@cosmocoder/mcp-web-docs 2.0.10 → 2.0.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/crawler/base.d.ts +2 -0
- package/build/crawler/base.js +6 -2
- package/build/crawler/base.js.map +1 -1
- package/build/crawler/docs-crawler.d.ts +1 -0
- package/build/crawler/docs-crawler.js +14 -0
- package/build/crawler/docs-crawler.js.map +1 -1
- package/build/crawler/docs-crawler.test.js +29 -16
- package/build/crawler/docs-crawler.test.js.map +1 -1
- package/build/crawler/github.js +2 -2
- package/build/crawler/github.js.map +1 -1
- package/build/crawler/github.test.js +15 -0
- package/build/crawler/github.test.js.map +1 -1
- package/build/index.js +82 -60
- package/build/index.js.map +1 -1
- package/build/index.test.js +463 -76
- package/build/index.test.js.map +1 -1
- package/build/indexing/queue-manager.d.ts +14 -33
- package/build/indexing/queue-manager.js +77 -70
- package/build/indexing/queue-manager.js.map +1 -1
- package/build/indexing/queue-manager.test.js +155 -245
- package/build/indexing/queue-manager.test.js.map +1 -1
- package/build/storage/storage.d.ts +11 -0
- package/build/storage/storage.js +60 -9
- package/build/storage/storage.js.map +1 -1
- package/build/storage/storage.test.js +156 -0
- package/build/storage/storage.test.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,257 +1,167 @@
|
|
|
1
|
+
import { setImmediate as nextTurn } from 'node:timers/promises';
|
|
1
2
|
import { IndexingQueueManager } from './queue-manager.js';
|
|
2
3
|
describe('IndexingQueueManager', () => {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
4
|
+
it('registers before running and removes the same completed operation', async () => {
|
|
5
|
+
const queue = new IndexingQueueManager();
|
|
6
|
+
const started = Promise.withResolvers();
|
|
7
|
+
const released = Promise.withResolvers();
|
|
8
|
+
const handle = await queue.runLatest('https://example.com/', async () => {
|
|
9
|
+
started.resolve();
|
|
10
|
+
await released.promise;
|
|
11
|
+
});
|
|
12
|
+
await started.promise;
|
|
13
|
+
expect(handle.replacedExisting).toBe(false);
|
|
14
|
+
released.resolve();
|
|
15
|
+
await handle.completion;
|
|
6
16
|
});
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
const controller1 = await queue.startOperation('https://example.com');
|
|
27
|
-
const mockPromise1 = new Promise((_resolve, reject) => {
|
|
28
|
-
controller1.signal.addEventListener('abort', () => reject(new Error('Aborted')));
|
|
29
|
-
});
|
|
30
|
-
queue.registerOperation('https://example.com', controller1, mockPromise1);
|
|
31
|
-
// Start second operation for same URL - should cancel first
|
|
32
|
-
const controller2 = await queue.startOperation('https://example.com');
|
|
33
|
-
expect(controller1.signal.aborted).toBe(true);
|
|
34
|
-
expect(controller2.signal.aborted).toBe(false);
|
|
35
|
-
queue.completeOperation('https://example.com');
|
|
36
|
-
});
|
|
37
|
-
it('should not affect operations for different URLs', async () => {
|
|
38
|
-
const controller1 = await queue.startOperation('https://example.com');
|
|
39
|
-
const mockPromise1 = new Promise((resolve) => setTimeout(resolve, 1000));
|
|
40
|
-
queue.registerOperation('https://example.com', controller1, mockPromise1);
|
|
41
|
-
const controller2 = await queue.startOperation('https://other.com');
|
|
42
|
-
const mockPromise2 = new Promise((resolve) => setTimeout(resolve, 1000));
|
|
43
|
-
queue.registerOperation('https://other.com', controller2, mockPromise2);
|
|
44
|
-
// Both should be active
|
|
45
|
-
expect(controller1.signal.aborted).toBe(false);
|
|
46
|
-
expect(controller2.signal.aborted).toBe(false);
|
|
47
|
-
expect(queue.isIndexing('https://example.com')).toBe(true);
|
|
48
|
-
expect(queue.isIndexing('https://other.com')).toBe(true);
|
|
49
|
-
queue.completeOperation('https://example.com');
|
|
50
|
-
queue.completeOperation('https://other.com');
|
|
51
|
-
});
|
|
52
|
-
it('should handle cancellation timeout gracefully', async () => {
|
|
53
|
-
vi.useFakeTimers();
|
|
54
|
-
// Start operation that never resolves
|
|
55
|
-
const controller1 = await queue.startOperation('https://example.com');
|
|
56
|
-
const neverResolves = new Promise(() => {
|
|
57
|
-
// This promise never resolves
|
|
58
|
-
});
|
|
59
|
-
queue.registerOperation('https://example.com', controller1, neverResolves);
|
|
60
|
-
// Start new operation - should timeout waiting for cancellation
|
|
61
|
-
const startPromise = queue.startOperation('https://example.com');
|
|
62
|
-
// Advance timers past the 5000ms timeout
|
|
63
|
-
await vi.advanceTimersByTimeAsync(5100);
|
|
64
|
-
const controller2 = await startPromise;
|
|
65
|
-
// Should have returned a new controller after timeout
|
|
66
|
-
expect(controller2).toBeDefined();
|
|
67
|
-
expect(controller2.signal.aborted).toBe(false);
|
|
68
|
-
queue.completeOperation('https://example.com');
|
|
69
|
-
vi.useRealTimers();
|
|
70
|
-
});
|
|
17
|
+
it('rejects a replacement when its aborted predecessor does not stop in time', async () => {
|
|
18
|
+
const queue = new IndexingQueueManager(10);
|
|
19
|
+
const firstStarted = Promise.withResolvers();
|
|
20
|
+
const firstReleased = Promise.withResolvers();
|
|
21
|
+
let firstSignal;
|
|
22
|
+
let replacementStarted = false;
|
|
23
|
+
const first = await queue.runLatest('https://example.com', async (signal) => {
|
|
24
|
+
firstSignal = signal;
|
|
25
|
+
firstStarted.resolve();
|
|
26
|
+
await firstReleased.promise;
|
|
27
|
+
});
|
|
28
|
+
await firstStarted.promise;
|
|
29
|
+
await expect(queue.runLatest('https://example.com/', async () => {
|
|
30
|
+
replacementStarted = true;
|
|
31
|
+
})).rejects.toThrow('Timed out cancelling');
|
|
32
|
+
expect(firstSignal.aborted).toBe(true);
|
|
33
|
+
expect(replacementStarted).toBe(false);
|
|
34
|
+
firstReleased.resolve();
|
|
35
|
+
await first.completion;
|
|
71
36
|
});
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
37
|
+
it('keeps same-URL transitions ordered while a different URL starts independently', async () => {
|
|
38
|
+
const queue = new IndexingQueueManager(1_000);
|
|
39
|
+
const firstStarted = Promise.withResolvers();
|
|
40
|
+
const firstReleased = Promise.withResolvers();
|
|
41
|
+
const secondStarted = Promise.withResolvers();
|
|
42
|
+
const secondReleased = Promise.withResolvers();
|
|
43
|
+
const thirdStarted = Promise.withResolvers();
|
|
44
|
+
const thirdReleased = Promise.withResolvers();
|
|
45
|
+
const otherStarted = Promise.withResolvers();
|
|
46
|
+
const otherReleased = Promise.withResolvers();
|
|
47
|
+
const order = [];
|
|
48
|
+
let firstSignal;
|
|
49
|
+
let secondSignal;
|
|
50
|
+
const first = await queue.runLatest('https://example.com', async (signal) => {
|
|
51
|
+
firstSignal = signal;
|
|
52
|
+
order.push('first');
|
|
53
|
+
firstStarted.resolve();
|
|
54
|
+
await firstReleased.promise;
|
|
55
|
+
});
|
|
56
|
+
await firstStarted.promise;
|
|
57
|
+
const secondStart = queue.runLatest('https://example.com', async (signal) => {
|
|
58
|
+
secondSignal = signal;
|
|
59
|
+
order.push('second');
|
|
60
|
+
secondStarted.resolve();
|
|
61
|
+
await secondReleased.promise;
|
|
62
|
+
});
|
|
63
|
+
const thirdStart = queue.runLatest('https://example.com', async () => {
|
|
64
|
+
order.push('third');
|
|
65
|
+
thirdStarted.resolve();
|
|
66
|
+
await thirdReleased.promise;
|
|
67
|
+
});
|
|
68
|
+
const other = await queue.runLatest('https://other.com', async () => {
|
|
69
|
+
order.push('other');
|
|
70
|
+
otherStarted.resolve();
|
|
71
|
+
await otherReleased.promise;
|
|
72
|
+
});
|
|
73
|
+
await otherStarted.promise;
|
|
74
|
+
expect(order).toEqual(['first', 'other']);
|
|
75
|
+
expect(firstSignal.aborted).toBe(true);
|
|
76
|
+
firstReleased.resolve();
|
|
77
|
+
const second = await secondStart;
|
|
78
|
+
await secondStarted.promise;
|
|
79
|
+
await first.completion;
|
|
80
|
+
await nextTurn();
|
|
81
|
+
expect(secondSignal.aborted).toBe(true);
|
|
82
|
+
expect(order).toEqual(['first', 'other', 'second']);
|
|
83
|
+
secondReleased.resolve();
|
|
84
|
+
const third = await thirdStart;
|
|
85
|
+
await thirdStarted.promise;
|
|
86
|
+
expect(order).toEqual(['first', 'other', 'second', 'third']);
|
|
87
|
+
thirdReleased.resolve();
|
|
88
|
+
otherReleased.resolve();
|
|
89
|
+
await Promise.all([second.completion, third.completion, other.completion]);
|
|
101
90
|
});
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
expect(queue.isIndexing('https://example.com')).toBe(false);
|
|
110
|
-
});
|
|
111
|
-
it('should handle completing non-existent operation gracefully', () => {
|
|
112
|
-
// Should not throw
|
|
113
|
-
expect(() => queue.completeOperation('https://nonexistent.com')).not.toThrow();
|
|
114
|
-
});
|
|
115
|
-
it('should normalize URL when completing', async () => {
|
|
116
|
-
const controller = await queue.startOperation('https://example.com');
|
|
117
|
-
const mockPromise = new Promise((resolve) => setTimeout(resolve, 100));
|
|
118
|
-
queue.registerOperation('https://example.com', controller, mockPromise);
|
|
119
|
-
// Complete with trailing slash
|
|
120
|
-
queue.completeOperation('https://example.com/');
|
|
121
|
-
expect(queue.isIndexing('https://example.com')).toBe(false);
|
|
122
|
-
});
|
|
123
|
-
});
|
|
124
|
-
describe('cancelAll', () => {
|
|
125
|
-
it('should cancel all active operations', async () => {
|
|
126
|
-
const controller1 = await queue.startOperation('https://example1.com');
|
|
127
|
-
const mockPromise1 = new Promise((resolve) => {
|
|
128
|
-
controller1.signal.addEventListener('abort', () => resolve());
|
|
129
|
-
});
|
|
130
|
-
queue.registerOperation('https://example1.com', controller1, mockPromise1);
|
|
131
|
-
const controller2 = await queue.startOperation('https://example2.com');
|
|
132
|
-
const mockPromise2 = new Promise((resolve) => {
|
|
133
|
-
controller2.signal.addEventListener('abort', () => resolve());
|
|
91
|
+
it('continues after a cancelled predecessor rejects', async () => {
|
|
92
|
+
const queue = new IndexingQueueManager();
|
|
93
|
+
const firstStarted = Promise.withResolvers();
|
|
94
|
+
const first = await queue.runLatest('https://example.com', async (signal) => {
|
|
95
|
+
firstStarted.resolve();
|
|
96
|
+
await new Promise((_resolve, reject) => {
|
|
97
|
+
signal.addEventListener('abort', () => reject(new Error('cancelled')), { once: true });
|
|
134
98
|
});
|
|
135
|
-
queue.registerOperation('https://example2.com', controller2, mockPromise2);
|
|
136
|
-
expect(queue.getActiveOperations()).toHaveLength(2);
|
|
137
|
-
await queue.cancelAll();
|
|
138
|
-
expect(controller1.signal.aborted).toBe(true);
|
|
139
|
-
expect(controller2.signal.aborted).toBe(true);
|
|
140
|
-
expect(queue.getActiveOperations()).toHaveLength(0);
|
|
141
|
-
});
|
|
142
|
-
it('should handle empty queue', async () => {
|
|
143
|
-
await expect(queue.cancelAll()).resolves.not.toThrow();
|
|
144
|
-
expect(queue.getActiveOperations()).toHaveLength(0);
|
|
145
|
-
});
|
|
146
|
-
it('should handle operations that reject on cancel', async () => {
|
|
147
|
-
const controller = await queue.startOperation('https://example.com');
|
|
148
|
-
const mockPromise = new Promise((_, reject) => {
|
|
149
|
-
controller.signal.addEventListener('abort', () => reject(new Error('Cancelled')));
|
|
150
|
-
});
|
|
151
|
-
queue.registerOperation('https://example.com', controller, mockPromise);
|
|
152
|
-
// Should not throw even if promises reject
|
|
153
|
-
await expect(queue.cancelAll()).resolves.not.toThrow();
|
|
154
|
-
expect(queue.getActiveOperations()).toHaveLength(0);
|
|
155
|
-
});
|
|
156
|
-
});
|
|
157
|
-
describe('isIndexing', () => {
|
|
158
|
-
it('should return false for URLs not being indexed', () => {
|
|
159
|
-
expect(queue.isIndexing('https://example.com')).toBe(false);
|
|
160
|
-
});
|
|
161
|
-
it('should return true for URLs being indexed', async () => {
|
|
162
|
-
const controller = await queue.startOperation('https://example.com');
|
|
163
|
-
const mockPromise = new Promise((resolve) => setTimeout(resolve, 100));
|
|
164
|
-
queue.registerOperation('https://example.com', controller, mockPromise);
|
|
165
|
-
expect(queue.isIndexing('https://example.com')).toBe(true);
|
|
166
|
-
queue.completeOperation('https://example.com');
|
|
167
|
-
});
|
|
168
|
-
it('should return false after operation completes', async () => {
|
|
169
|
-
const controller = await queue.startOperation('https://example.com');
|
|
170
|
-
const mockPromise = new Promise((resolve) => setTimeout(resolve, 100));
|
|
171
|
-
queue.registerOperation('https://example.com', controller, mockPromise);
|
|
172
|
-
queue.completeOperation('https://example.com');
|
|
173
|
-
expect(queue.isIndexing('https://example.com')).toBe(false);
|
|
174
|
-
});
|
|
175
|
-
it('should normalize URL when checking', async () => {
|
|
176
|
-
const controller = await queue.startOperation('https://example.com');
|
|
177
|
-
const mockPromise = new Promise((resolve) => setTimeout(resolve, 100));
|
|
178
|
-
queue.registerOperation('https://example.com', controller, mockPromise);
|
|
179
|
-
// Check with trailing slash
|
|
180
|
-
expect(queue.isIndexing('https://example.com/')).toBe(true);
|
|
181
|
-
queue.completeOperation('https://example.com');
|
|
182
99
|
});
|
|
100
|
+
const firstCompletion = first.completion.catch(() => { });
|
|
101
|
+
await firstStarted.promise;
|
|
102
|
+
const second = await queue.runLatest('https://example.com', async () => { });
|
|
103
|
+
expect(second.replacedExisting).toBe(true);
|
|
104
|
+
await Promise.all([firstCompletion, second.completion]);
|
|
183
105
|
});
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
106
|
+
it('cancelAll drains pending transitions and rejects starts until its shared barrier completes', async () => {
|
|
107
|
+
const queue = new IndexingQueueManager();
|
|
108
|
+
const firstStarted = Promise.withResolvers();
|
|
109
|
+
const firstReleased = Promise.withResolvers();
|
|
110
|
+
let firstSignal;
|
|
111
|
+
let secondStarted = false;
|
|
112
|
+
const first = await queue.runLatest('https://example.com', async (signal) => {
|
|
113
|
+
firstSignal = signal;
|
|
114
|
+
firstStarted.resolve();
|
|
115
|
+
await firstReleased.promise;
|
|
116
|
+
});
|
|
117
|
+
await firstStarted.promise;
|
|
118
|
+
const secondStart = queue.runLatest('https://example.com', async () => {
|
|
119
|
+
secondStarted = true;
|
|
120
|
+
});
|
|
121
|
+
const secondResult = expect(secondStart).rejects.toThrow('being cancelled');
|
|
122
|
+
await nextTurn();
|
|
123
|
+
let cancellationFinished = false;
|
|
124
|
+
const cancellation = queue.cancelAll();
|
|
125
|
+
expect(queue.cancelAll()).toBe(cancellation);
|
|
126
|
+
void cancellation.then(() => {
|
|
127
|
+
cancellationFinished = true;
|
|
128
|
+
});
|
|
129
|
+
let duringCancellationStarted = false;
|
|
130
|
+
await expect(queue.runLatest('https://other.com', async () => {
|
|
131
|
+
duringCancellationStarted = true;
|
|
132
|
+
})).rejects.toThrow('being cancelled');
|
|
133
|
+
await nextTurn();
|
|
134
|
+
expect(firstSignal.aborted).toBe(true);
|
|
135
|
+
expect(duringCancellationStarted).toBe(false);
|
|
136
|
+
expect(cancellationFinished).toBe(false);
|
|
137
|
+
firstReleased.resolve();
|
|
138
|
+
await Promise.all([first.completion, secondResult, cancellation]);
|
|
139
|
+
expect(secondStarted).toBe(false);
|
|
140
|
+
expect(cancellationFinished).toBe(true);
|
|
141
|
+
let afterCancellationStarted = false;
|
|
142
|
+
const afterCancellation = await queue.runLatest('https://example.com', async () => {
|
|
143
|
+
afterCancellationStarted = true;
|
|
144
|
+
});
|
|
145
|
+
await afterCancellation.completion;
|
|
146
|
+
expect(afterCancellationStarted).toBe(true);
|
|
220
147
|
});
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
expect(queue.getActiveOperations()).toHaveLength(2);
|
|
239
|
-
expect(queue.isIndexing('https://a.com')).toBe(true);
|
|
240
|
-
expect(queue.isIndexing('https://b.com')).toBe(false);
|
|
241
|
-
expect(queue.isIndexing('https://c.com')).toBe(true);
|
|
242
|
-
queue.completeOperation('https://a.com');
|
|
243
|
-
queue.completeOperation('https://c.com');
|
|
244
|
-
});
|
|
245
|
-
it('should handle rapid start/complete cycles', async () => {
|
|
246
|
-
for (let i = 0; i < 10; i++) {
|
|
247
|
-
const controller = await queue.startOperation('https://example.com');
|
|
248
|
-
const mockPromise = Promise.resolve();
|
|
249
|
-
queue.registerOperation('https://example.com', controller, mockPromise);
|
|
250
|
-
queue.completeOperation('https://example.com');
|
|
251
|
-
}
|
|
252
|
-
expect(queue.isIndexing('https://example.com')).toBe(false);
|
|
253
|
-
expect(queue.getActiveOperations()).toHaveLength(0);
|
|
254
|
-
});
|
|
148
|
+
it('bounds cancelAll when an operation ignores cancellation', async () => {
|
|
149
|
+
const queue = new IndexingQueueManager(10);
|
|
150
|
+
const started = Promise.withResolvers();
|
|
151
|
+
const released = Promise.withResolvers();
|
|
152
|
+
let signal;
|
|
153
|
+
const operation = await queue.runLatest('https://example.com', async (operationSignal) => {
|
|
154
|
+
signal = operationSignal;
|
|
155
|
+
started.resolve();
|
|
156
|
+
await released.promise;
|
|
157
|
+
});
|
|
158
|
+
await started.promise;
|
|
159
|
+
await expect(queue.cancelAll()).rejects.toThrow('Timed out cancelling all indexing operations');
|
|
160
|
+
expect(signal.aborted).toBe(true);
|
|
161
|
+
const next = await queue.runLatest('https://other.com', async () => { });
|
|
162
|
+
await next.completion;
|
|
163
|
+
released.resolve();
|
|
164
|
+
await operation.completion;
|
|
255
165
|
});
|
|
256
166
|
});
|
|
257
167
|
//# sourceMappingURL=queue-manager.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"queue-manager.test.js","sourceRoot":"","sources":["../../src/indexing/queue-manager.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"queue-manager.test.js","sourceRoot":"","sources":["../../src/indexing/queue-manager.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -11,7 +11,9 @@ export declare class DocumentStore implements StorageProvider {
|
|
|
11
11
|
private lanceTable?;
|
|
12
12
|
private readonly searchCache;
|
|
13
13
|
private ftsIndexCreated;
|
|
14
|
+
private mutationTail;
|
|
14
15
|
constructor(dbPath: string, vectorDbPath: string, embeddings: EmbeddingsProvider, maxCacheSize?: number);
|
|
16
|
+
private runMutation;
|
|
15
17
|
initialize(): Promise<void>;
|
|
16
18
|
close(): Promise<void>;
|
|
17
19
|
private ensureLanceColumn;
|
|
@@ -37,6 +39,7 @@ export declare class DocumentStore implements StorageProvider {
|
|
|
37
39
|
* Search only reads the published generation, so failed staging never leaks.
|
|
38
40
|
*/
|
|
39
41
|
addDocument(doc: ProcessedDocument, options?: AddDocumentOptions): Promise<void>;
|
|
42
|
+
private addDocumentUnlocked;
|
|
40
43
|
private acquireReplacementLease;
|
|
41
44
|
private captureCleanupGenerations;
|
|
42
45
|
private startReplacementHeartbeat;
|
|
@@ -72,6 +75,7 @@ export declare class DocumentStore implements StorageProvider {
|
|
|
72
75
|
private formatSearchResults;
|
|
73
76
|
listDocuments(): Promise<DocumentMetadata[]>;
|
|
74
77
|
deleteDocument(url: string): Promise<void>;
|
|
78
|
+
private deleteDocumentUnlocked;
|
|
75
79
|
getDocument(url: string): Promise<DocumentMetadata | null>;
|
|
76
80
|
private parseDocumentTags;
|
|
77
81
|
private replaceDocumentTags;
|
|
@@ -81,6 +85,7 @@ export declare class DocumentStore implements StorageProvider {
|
|
|
81
85
|
* @param tags - Array of tags to assign (empty array removes all tags)
|
|
82
86
|
*/
|
|
83
87
|
setTags(url: string, tags: string[]): Promise<void>;
|
|
88
|
+
private setTagsUnlocked;
|
|
84
89
|
/**
|
|
85
90
|
* List all unique tags with their usage counts
|
|
86
91
|
* @returns Array of tags with counts, sorted by count descending
|
|
@@ -102,6 +107,7 @@ export declare class DocumentStore implements StorageProvider {
|
|
|
102
107
|
* @throws Error if collection already exists
|
|
103
108
|
*/
|
|
104
109
|
createCollection(name: string, description?: string): Promise<void>;
|
|
110
|
+
private createCollectionUnlocked;
|
|
105
111
|
/**
|
|
106
112
|
* Delete a collection.
|
|
107
113
|
* Documents in the collection are NOT deleted, only the collection association.
|
|
@@ -109,6 +115,7 @@ export declare class DocumentStore implements StorageProvider {
|
|
|
109
115
|
* @throws Error if collection doesn't exist
|
|
110
116
|
*/
|
|
111
117
|
deleteCollection(name: string): Promise<void>;
|
|
118
|
+
private deleteCollectionUnlocked;
|
|
112
119
|
/**
|
|
113
120
|
* Update a collection's metadata.
|
|
114
121
|
* @param name - Current name of the collection
|
|
@@ -119,6 +126,7 @@ export declare class DocumentStore implements StorageProvider {
|
|
|
119
126
|
newName?: string;
|
|
120
127
|
description?: string;
|
|
121
128
|
}): Promise<void>;
|
|
129
|
+
private updateCollectionUnlocked;
|
|
122
130
|
/**
|
|
123
131
|
* List all collections with document counts.
|
|
124
132
|
* @returns Array of collections sorted by name
|
|
@@ -141,6 +149,7 @@ export declare class DocumentStore implements StorageProvider {
|
|
|
141
149
|
notFound: string[];
|
|
142
150
|
alreadyInCollection: string[];
|
|
143
151
|
}>;
|
|
152
|
+
private addToCollectionUnlocked;
|
|
144
153
|
/**
|
|
145
154
|
* Remove documents from a collection.
|
|
146
155
|
* @param name - Name of the collection
|
|
@@ -151,6 +160,7 @@ export declare class DocumentStore implements StorageProvider {
|
|
|
151
160
|
removed: string[];
|
|
152
161
|
notInCollection: string[];
|
|
153
162
|
}>;
|
|
163
|
+
private removeFromCollectionUnlocked;
|
|
154
164
|
/**
|
|
155
165
|
* Get URLs of all documents in a collection.
|
|
156
166
|
* Used for search filtering.
|
|
@@ -180,4 +190,5 @@ export declare class DocumentStore implements StorageProvider {
|
|
|
180
190
|
cleanedUp: boolean;
|
|
181
191
|
error?: string;
|
|
182
192
|
}>;
|
|
193
|
+
private optimizeUnlocked;
|
|
183
194
|
}
|