MCPcopy
hub / github.com/markmap/markmap / BufferContentProvider

Class BufferContentProvider

packages/markmap-cli/src/util/dev-server.ts:35–101  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

33}
34
35class BufferContentProvider implements IContentProvider {
36 private deferredSet = new Set<IDeferred<void>>();
37
38 state: IFileState = {
39 content: {
40 ts: 0,
41 value: '',
42 },
43 line: {
44 ts: 0,
45 value: 0,
46 },
47 };
48
49 protected disposeList: Array<() => void> = [];
50
51 constructor(readonly key: string) {}
52
53 async getUpdate(query: Record<string, number>, timeout = 10000) {
54 const deferred = defer<void>();
55 this.deferredSet.add(deferred);
56 setTimeout(() => {
57 this.feed(null, deferred);
58 }, timeout);
59 if (Object.keys(query).some((key) => query[key] < this.state[key].ts)) {
60 this.feed(null, deferred);
61 }
62 await deferred.promise;
63 }
64
65 protected feed(data: Partial<IFileState> | null, deferred?: IDeferred<void>) {
66 if (data) {
67 Object.assign(this.state, data);
68 }
69 if (deferred) {
70 deferred.resolve();
71 this.deferredSet.delete(deferred);
72 } else {
73 for (const d of this.deferredSet) {
74 d.resolve();
75 }
76 this.deferredSet.clear();
77 }
78 }
79
80 setCursor(line: number) {
81 this.feed({
82 line: {
83 ts: Date.now(),
84 value: line,
85 },
86 });
87 }
88
89 setContent(content: string) {
90 this.feed({
91 content: {
92 ts: Date.now(),

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected