@powerhousedao/reactor 4.1.0-dev.5 → 4.1.0-dev.50

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.
Files changed (148) hide show
  1. package/dist/bench/event-bus.bench.js +18 -28
  2. package/dist/bench/event-bus.bench.js.map +1 -1
  3. package/dist/bench/queue-only.bench.js +9 -3
  4. package/dist/bench/queue-only.bench.js.map +1 -1
  5. package/dist/bench/reactor-throughput.bench.js +42 -35
  6. package/dist/bench/reactor-throughput.bench.js.map +1 -1
  7. package/dist/src/events/event-bus.d.ts +3 -3
  8. package/dist/src/events/event-bus.d.ts.map +1 -1
  9. package/dist/src/events/event-bus.js +1 -1
  10. package/dist/src/events/event-bus.js.map +1 -1
  11. package/dist/src/events/interfaces.d.ts +1 -1
  12. package/dist/src/events/interfaces.d.ts.map +1 -1
  13. package/dist/src/events/types.d.ts +1 -1
  14. package/dist/src/events/types.d.ts.map +1 -1
  15. package/dist/src/events/types.js.map +1 -1
  16. package/dist/src/executor/interfaces.d.ts +31 -54
  17. package/dist/src/executor/interfaces.d.ts.map +1 -1
  18. package/dist/src/executor/simple-job-executor-manager.d.ts +27 -0
  19. package/dist/src/executor/simple-job-executor-manager.d.ts.map +1 -0
  20. package/dist/src/executor/simple-job-executor-manager.js +128 -0
  21. package/dist/src/executor/simple-job-executor-manager.js.map +1 -0
  22. package/dist/src/executor/simple-job-executor.d.ts +19 -0
  23. package/dist/src/executor/simple-job-executor.d.ts.map +1 -0
  24. package/dist/src/executor/simple-job-executor.js +69 -0
  25. package/dist/src/executor/simple-job-executor.js.map +1 -0
  26. package/dist/src/executor/types.d.ts +23 -8
  27. package/dist/src/executor/types.d.ts.map +1 -1
  28. package/dist/src/executor/types.js.map +1 -1
  29. package/dist/src/index.d.ts +9 -2
  30. package/dist/src/index.d.ts.map +1 -1
  31. package/dist/src/index.js +8 -2
  32. package/dist/src/index.js.map +1 -1
  33. package/dist/src/interfaces/reactor.d.ts +121 -0
  34. package/dist/src/interfaces/reactor.d.ts.map +1 -0
  35. package/dist/src/interfaces/reactor.js +2 -0
  36. package/dist/src/interfaces/reactor.js.map +1 -0
  37. package/dist/src/queue/interfaces.d.ts +45 -5
  38. package/dist/src/queue/interfaces.d.ts.map +1 -1
  39. package/dist/src/queue/job-execution-handle.d.ts +23 -0
  40. package/dist/src/queue/job-execution-handle.d.ts.map +1 -0
  41. package/dist/src/queue/job-execution-handle.js +62 -0
  42. package/dist/src/queue/job-execution-handle.js.map +1 -0
  43. package/dist/src/queue/queue.d.ts +54 -5
  44. package/dist/src/queue/queue.d.ts.map +1 -1
  45. package/dist/src/queue/queue.js +237 -23
  46. package/dist/src/queue/queue.js.map +1 -1
  47. package/dist/src/queue/types.d.ts +26 -1
  48. package/dist/src/queue/types.d.ts.map +1 -1
  49. package/dist/src/queue/types.js +12 -0
  50. package/dist/src/queue/types.js.map +1 -1
  51. package/dist/src/reactor.d.ts +109 -0
  52. package/dist/src/reactor.d.ts.map +1 -0
  53. package/dist/src/reactor.js +610 -0
  54. package/dist/src/reactor.js.map +1 -0
  55. package/dist/src/registry/implementation.d.ts +62 -0
  56. package/dist/src/registry/implementation.d.ts.map +1 -0
  57. package/dist/src/registry/implementation.js +96 -0
  58. package/dist/src/registry/implementation.js.map +1 -0
  59. package/dist/src/registry/index.d.ts +3 -0
  60. package/dist/src/registry/index.d.ts.map +1 -0
  61. package/dist/src/registry/index.js +2 -0
  62. package/dist/src/registry/index.js.map +1 -0
  63. package/dist/src/registry/interfaces.d.ts +39 -0
  64. package/dist/src/registry/interfaces.d.ts.map +1 -0
  65. package/dist/src/registry/interfaces.js +2 -0
  66. package/dist/src/registry/interfaces.js.map +1 -0
  67. package/dist/src/shared/factories.d.ts +16 -0
  68. package/dist/src/shared/factories.d.ts.map +1 -0
  69. package/dist/src/shared/factories.js +33 -0
  70. package/dist/src/shared/factories.js.map +1 -0
  71. package/dist/src/shared/types.d.ts +83 -19
  72. package/dist/src/shared/types.d.ts.map +1 -1
  73. package/dist/src/shared/types.js +30 -1
  74. package/dist/src/shared/types.js.map +1 -1
  75. package/dist/src/shared/utils.d.ts +3 -0
  76. package/dist/src/shared/utils.d.ts.map +1 -0
  77. package/dist/src/shared/utils.js +8 -0
  78. package/dist/src/shared/utils.js.map +1 -0
  79. package/dist/src/utils.d.ts +11 -0
  80. package/dist/src/utils.d.ts.map +1 -0
  81. package/dist/src/utils.js +31 -0
  82. package/dist/src/utils.js.map +1 -0
  83. package/dist/test/event-bus.test.js +23 -14
  84. package/dist/test/event-bus.test.js.map +1 -1
  85. package/dist/test/executor/executor-integration.test.d.ts +2 -0
  86. package/dist/test/executor/executor-integration.test.d.ts.map +1 -0
  87. package/dist/test/executor/executor-integration.test.js +287 -0
  88. package/dist/test/executor/executor-integration.test.js.map +1 -0
  89. package/dist/test/executor/job-execution-handle.test.d.ts +2 -0
  90. package/dist/test/executor/job-execution-handle.test.d.ts.map +1 -0
  91. package/dist/test/executor/job-execution-handle.test.js +272 -0
  92. package/dist/test/executor/job-execution-handle.test.js.map +1 -0
  93. package/dist/test/executor/simple-job-executor-manager.test.d.ts +2 -0
  94. package/dist/test/executor/simple-job-executor-manager.test.d.ts.map +1 -0
  95. package/dist/test/executor/simple-job-executor-manager.test.js +132 -0
  96. package/dist/test/executor/simple-job-executor-manager.test.js.map +1 -0
  97. package/dist/test/executor/simple-job-executor.test.d.ts +2 -0
  98. package/dist/test/executor/simple-job-executor.test.d.ts.map +1 -0
  99. package/dist/test/executor/simple-job-executor.test.js +139 -0
  100. package/dist/test/executor/simple-job-executor.test.js.map +1 -0
  101. package/dist/test/factories.d.ts +122 -0
  102. package/dist/test/factories.d.ts.map +1 -0
  103. package/dist/test/factories.js +319 -0
  104. package/dist/test/factories.js.map +1 -0
  105. package/dist/test/integration/document-drive-integration.test.d.ts +2 -0
  106. package/dist/test/integration/document-drive-integration.test.d.ts.map +1 -0
  107. package/dist/test/integration/document-drive-integration.test.js +1102 -0
  108. package/dist/test/integration/document-drive-integration.test.js.map +1 -0
  109. package/dist/test/integration/reactor-read.test.d.ts +2 -0
  110. package/dist/test/integration/reactor-read.test.d.ts.map +1 -0
  111. package/dist/test/integration/reactor-read.test.js +300 -0
  112. package/dist/test/integration/reactor-read.test.js.map +1 -0
  113. package/dist/test/queue/queue-integration.test.d.ts +2 -0
  114. package/dist/test/queue/queue-integration.test.d.ts.map +1 -0
  115. package/dist/test/queue/queue-integration.test.js +322 -0
  116. package/dist/test/queue/queue-integration.test.js.map +1 -0
  117. package/dist/test/{queue.test.d.ts.map → queue/queue.test.d.ts.map} +1 -1
  118. package/dist/test/queue/queue.test.js +770 -0
  119. package/dist/test/queue/queue.test.js.map +1 -0
  120. package/dist/test/registry/registry.test.d.ts +2 -0
  121. package/dist/test/registry/registry.test.d.ts.map +1 -0
  122. package/dist/test/registry/registry.test.js +182 -0
  123. package/dist/test/registry/registry.test.js.map +1 -0
  124. package/dist/test/utils.test.d.ts +2 -0
  125. package/dist/test/utils.test.d.ts.map +1 -0
  126. package/dist/test/utils.test.js +66 -0
  127. package/dist/test/utils.test.js.map +1 -0
  128. package/dist/tsconfig.tsbuildinfo +1 -1
  129. package/dist/vitest.config.d.ts +3 -0
  130. package/dist/vitest.config.d.ts.map +1 -0
  131. package/dist/vitest.config.js +11 -0
  132. package/dist/vitest.config.js.map +1 -0
  133. package/package.json +6 -1
  134. package/dist/bench/end-to-end-flow.bench.d.ts +0 -2
  135. package/dist/bench/end-to-end-flow.bench.d.ts.map +0 -1
  136. package/dist/bench/end-to-end-flow.bench.js +0 -256
  137. package/dist/bench/end-to-end-flow.bench.js.map +0 -1
  138. package/dist/src/executor/job-executor.d.ts +0 -62
  139. package/dist/src/executor/job-executor.d.ts.map +0 -1
  140. package/dist/src/executor/job-executor.js +0 -325
  141. package/dist/src/executor/job-executor.js.map +0 -1
  142. package/dist/test/job-executor.test.d.ts +0 -2
  143. package/dist/test/job-executor.test.d.ts.map +0 -1
  144. package/dist/test/job-executor.test.js +0 -581
  145. package/dist/test/job-executor.test.js.map +0 -1
  146. package/dist/test/queue.test.js +0 -396
  147. package/dist/test/queue.test.js.map +0 -1
  148. /package/dist/test/{queue.test.d.ts → queue/queue.test.d.ts} +0 -0
@@ -0,0 +1,610 @@
1
+ import { AbortError } from "document-drive/utils/errors";
2
+ import { v4 as uuidv4 } from "uuid";
3
+ import { createMutableShutdownStatus } from "./shared/factories.js";
4
+ import { JobStatus, } from "./shared/types.js";
5
+ import { matchesScope } from "./shared/utils.js";
6
+ import { filterByParentId, filterByType } from "./utils.js";
7
+ /**
8
+ * The Reactor facade implementation.
9
+ *
10
+ * This class implements the IReactor interface and serves as the main entry point
11
+ * for the new Reactor architecture. In Phase 2 of the refactoring plan, it acts
12
+ * as a facade over the existing BaseDocumentDriveServer while we incrementally
13
+ * migrate to the new architecture.
14
+ *
15
+ * The facade pattern allows us to:
16
+ * 1. Present the new IReactor API to clients immediately
17
+ * 2. Internally delegate to the refactored BaseDocumentDriveServer (post Phase 1)
18
+ * 3. Incrementally replace internal implementations without breaking clients
19
+ * 4. Validate the new architecture alongside the existing system
20
+ */
21
+ export class Reactor {
22
+ driveServer;
23
+ documentStorage;
24
+ shutdownStatus;
25
+ setShutdown;
26
+ eventBus;
27
+ queue;
28
+ jobExecutor;
29
+ jobExecutorStarted = false;
30
+ constructor(driveServer, documentStorage, eventBus, queue, jobExecutor) {
31
+ // Store required dependencies
32
+ this.driveServer = driveServer;
33
+ this.documentStorage = documentStorage;
34
+ this.eventBus = eventBus;
35
+ this.queue = queue;
36
+ this.jobExecutor = jobExecutor;
37
+ // Create mutable shutdown status using factory method
38
+ const [status, setter] = createMutableShutdownStatus(false);
39
+ this.shutdownStatus = status;
40
+ this.setShutdown = setter;
41
+ }
42
+ /**
43
+ * Signals that the reactor should shutdown.
44
+ */
45
+ kill() {
46
+ // Mark the reactor as shutdown
47
+ this.setShutdown(true);
48
+ // TODO: Phase 3+ - Implement graceful shutdown for queue, executors, etc.
49
+ // For now, we just mark as shutdown and return status
50
+ return this.shutdownStatus;
51
+ }
52
+ /**
53
+ * Retrieves a list of document model specifications
54
+ */
55
+ getDocumentModels(namespace, paging, signal) {
56
+ // Get document model modules from the drive server
57
+ // Note: BaseDocumentDriveServer provides modules, not model states
58
+ // This is an adaptation layer that converts modules to states
59
+ const modules = this.driveServer.getDocumentModelModules();
60
+ // Convert modules to DocumentModelState format
61
+ // TODO: Proper conversion when DocumentModelState structure is finalized
62
+ const filteredModels = modules
63
+ .filter((module) => !namespace || module.documentModel.name.startsWith(namespace))
64
+ .map((module) => ({
65
+ id: module.documentModel.id,
66
+ name: module.documentModel.name,
67
+ extension: module.documentModel.extension,
68
+ author: module.documentModel.author,
69
+ description: module.documentModel.description || "",
70
+ specifications: module.documentModel.specifications,
71
+ }));
72
+ // Apply paging
73
+ const startIndex = paging ? parseInt(paging.cursor) || 0 : 0;
74
+ const limit = paging?.limit || filteredModels.length;
75
+ const pagedModels = filteredModels.slice(startIndex, startIndex + limit);
76
+ // Create paged results
77
+ const hasMore = startIndex + limit < filteredModels.length;
78
+ const nextCursor = hasMore ? String(startIndex + limit) : undefined;
79
+ // even thought this is currently synchronous, they could have passed in an already-aborted signal
80
+ if (signal?.aborted) {
81
+ throw new AbortError();
82
+ }
83
+ return Promise.resolve({
84
+ results: pagedModels,
85
+ options: paging || { cursor: "0", limit: filteredModels.length },
86
+ nextCursor,
87
+ next: hasMore
88
+ ? () => this.getDocumentModels(namespace, { cursor: nextCursor, limit }, signal)
89
+ : undefined,
90
+ });
91
+ }
92
+ /**
93
+ * Retrieves a specific PHDocument by id
94
+ */
95
+ async get(id, view, signal) {
96
+ const document = await this.documentStorage.get(id);
97
+ if (signal?.aborted) {
98
+ throw new AbortError();
99
+ }
100
+ const childIds = await this.documentStorage.getChildren(id);
101
+ if (signal?.aborted) {
102
+ throw new AbortError();
103
+ }
104
+ // Apply view filter - This will be removed when we pass the viewfilter along
105
+ // to the underlying store, but is here now for the interface.
106
+ for (const scope in document.state) {
107
+ if (!matchesScope(view, scope)) {
108
+ // eslint-disable-next-line @typescript-eslint/no-dynamic-delete
109
+ delete document.state[scope];
110
+ }
111
+ }
112
+ return {
113
+ document,
114
+ childIds,
115
+ };
116
+ }
117
+ /**
118
+ * Retrieves a specific PHDocument by slug
119
+ */
120
+ async getBySlug(slug, view, signal) {
121
+ // Use the storage layer to resolve slug to ID
122
+ let ids;
123
+ try {
124
+ ids = await this.documentStorage.resolveIds([slug], signal);
125
+ }
126
+ catch (error) {
127
+ // If the error is from resolveIds (document not found), wrap it with our message
128
+ if (error instanceof Error && error.message.includes("not found")) {
129
+ throw new Error(`Document not found with slug: ${slug}`);
130
+ }
131
+ throw error;
132
+ }
133
+ if (ids.length === 0 || !ids[0]) {
134
+ throw new Error(`Document not found with slug: ${slug}`);
135
+ }
136
+ // Now get the document by its resolved ID
137
+ return await this.get(ids[0], view, signal);
138
+ }
139
+ /**
140
+ * Retrieves the operations for a document
141
+ */
142
+ async getOperations(documentId, view, paging, signal) {
143
+ // Use storage directly to get the document
144
+ const document = await this.documentStorage.get(documentId);
145
+ if (signal?.aborted) {
146
+ throw new AbortError();
147
+ }
148
+ const operations = document.operations;
149
+ const result = {};
150
+ // apply view filter, per scope -- this will be removed when we pass the viewfilter along
151
+ // to the underlying store, but is here now for the interface.
152
+ for (const scope in operations) {
153
+ if (matchesScope(view, scope)) {
154
+ const scopeOperations = operations[scope];
155
+ // apply paging too
156
+ const startIndex = paging ? parseInt(paging.cursor) || 0 : 0;
157
+ const limit = paging?.limit || scopeOperations.length;
158
+ const pagedOperations = scopeOperations.slice(startIndex, startIndex + limit);
159
+ result[scope] = {
160
+ results: pagedOperations,
161
+ options: { cursor: String(startIndex + limit), limit },
162
+ };
163
+ }
164
+ }
165
+ return Promise.resolve(result);
166
+ }
167
+ /**
168
+ * Filters documents by criteria and returns a list of them
169
+ */
170
+ async find(search, view, paging, signal) {
171
+ let results;
172
+ if (search.ids) {
173
+ if (search.slugs && search.slugs.length > 0) {
174
+ throw new Error("Cannot use both ids and slugs in the same search");
175
+ }
176
+ results = await this.findByIds(search.ids, view, paging, signal);
177
+ if (search.parentId) {
178
+ results = filterByParentId(results, search.parentId);
179
+ }
180
+ if (search.type) {
181
+ results = filterByType(results, search.type);
182
+ }
183
+ }
184
+ else if (search.slugs) {
185
+ results = await this.findBySlugs(search.slugs, view, paging, signal);
186
+ if (search.parentId) {
187
+ results = filterByParentId(results, search.parentId);
188
+ }
189
+ if (search.type) {
190
+ results = filterByType(results, search.type);
191
+ }
192
+ }
193
+ else if (search.parentId) {
194
+ results = await this.findByParentId(search.parentId, view, paging, signal);
195
+ if (search.type) {
196
+ results = filterByType(results, search.type);
197
+ }
198
+ }
199
+ else if (search.type) {
200
+ results = await this.findByType(search.type, view, paging, signal);
201
+ }
202
+ else {
203
+ throw new Error("No search criteria provided");
204
+ }
205
+ if (signal?.aborted) {
206
+ throw new AbortError();
207
+ }
208
+ return results;
209
+ }
210
+ /**
211
+ * Creates a document
212
+ */
213
+ async create(document, signal) {
214
+ try {
215
+ // BaseDocumentDriveServer uses addDocument, not createDocument
216
+ // addDocument adds an existing document to a drive
217
+ await this.driveServer.addDocument(document);
218
+ }
219
+ catch {
220
+ // TODO: Phase 4 - This will return a job that can be retried
221
+ return JobStatus.FAILED;
222
+ }
223
+ if (signal?.aborted) {
224
+ throw new AbortError();
225
+ }
226
+ // Return success status
227
+ // TODO: Phase 4 - This will return a job that goes through the queue
228
+ return JobStatus.COMPLETED;
229
+ }
230
+ /**
231
+ * Deletes a document
232
+ */
233
+ async deleteDocument(id, propagate, signal) {
234
+ const jobId = uuidv4();
235
+ try {
236
+ // Delete document using drive server
237
+ await this.driveServer.deleteDocument(id);
238
+ // TODO: Implement cascade deletion when propagate mode is CASCADE
239
+ }
240
+ catch (error) {
241
+ // TODO: Phase 4 - This will return a job that can be retried
242
+ return {
243
+ id: jobId,
244
+ status: JobStatus.FAILED,
245
+ error: error instanceof Error ? error.message : "Unknown error",
246
+ };
247
+ }
248
+ if (signal?.aborted) {
249
+ throw new AbortError();
250
+ }
251
+ // Return success job info
252
+ // TODO: Phase 4 - This will return a job that goes through the queue
253
+ return {
254
+ id: jobId,
255
+ status: JobStatus.COMPLETED,
256
+ };
257
+ }
258
+ /**
259
+ * Applies a list of actions to a document
260
+ */
261
+ async mutate(id, actions) {
262
+ // Ensure the job executor is running
263
+ this.ensureJobExecutorRunning();
264
+ // Create jobs for each action/operation
265
+ const jobs = actions.map((action, index) => ({
266
+ id: uuidv4(),
267
+ documentId: id,
268
+ scope: action.scope || "global",
269
+ branch: "main", // Default to main branch
270
+ operation: {
271
+ index: index,
272
+ timestampUtcMs: String(action.timestampUtcMs || Date.now()),
273
+ hash: "", // Will be computed by the executor
274
+ skip: 0,
275
+ action: action,
276
+ },
277
+ createdAt: new Date().toISOString(),
278
+ queueHint: [],
279
+ maxRetries: 3,
280
+ }));
281
+ // Enqueue all jobs
282
+ for (const job of jobs) {
283
+ await this.queue.enqueue(job);
284
+ }
285
+ // Return job info for the batch (using the first job's ID as the batch ID)
286
+ const batchJobId = jobs.length > 0 ? jobs[0].id : uuidv4();
287
+ return {
288
+ id: batchJobId,
289
+ status: JobStatus.PENDING,
290
+ };
291
+ }
292
+ /**
293
+ * Adds multiple documents as children to another
294
+ */
295
+ async addChildren(parentId, documentIds, view, signal) {
296
+ const jobId = uuidv4();
297
+ // Check abort signal before starting
298
+ if (signal?.aborted) {
299
+ throw new AbortError();
300
+ }
301
+ // TODO: Implement when drive server supports hierarchical documents
302
+ // For now, this is a placeholder implementation
303
+ // Verify parent exists
304
+ try {
305
+ await this.driveServer.getDocument(parentId);
306
+ }
307
+ catch (error) {
308
+ return {
309
+ id: jobId,
310
+ status: JobStatus.FAILED,
311
+ error: error instanceof Error ? error.message : "Unknown error",
312
+ };
313
+ }
314
+ // Check abort signal after parent verification
315
+ if (signal?.aborted) {
316
+ throw new AbortError();
317
+ }
318
+ // Verify all children exist
319
+ for (const childId of documentIds) {
320
+ try {
321
+ await this.driveServer.getDocument(childId);
322
+ }
323
+ catch (error) {
324
+ return {
325
+ id: jobId,
326
+ status: JobStatus.FAILED,
327
+ error: error instanceof Error ? error.message : "Unknown error",
328
+ };
329
+ }
330
+ // Check abort signal after each child verification
331
+ if (signal?.aborted) {
332
+ throw new AbortError();
333
+ }
334
+ }
335
+ // TODO: Actually establish parent-child relationships
336
+ // Return success job info
337
+ return {
338
+ id: jobId,
339
+ status: JobStatus.COMPLETED,
340
+ };
341
+ }
342
+ /**
343
+ * Removes multiple documents as children from another
344
+ */
345
+ async removeChildren(parentId, documentIds, view, signal) {
346
+ const jobId = uuidv4();
347
+ // Check abort signal before starting
348
+ if (signal?.aborted) {
349
+ throw new AbortError();
350
+ }
351
+ // TODO: Implement when drive server supports hierarchical documents
352
+ // For now, this is a placeholder implementation
353
+ // Verify parent exists
354
+ try {
355
+ await this.driveServer.getDocument(parentId);
356
+ }
357
+ catch (error) {
358
+ return {
359
+ id: jobId,
360
+ status: JobStatus.FAILED,
361
+ error: error instanceof Error ? error.message : "Unknown error",
362
+ };
363
+ }
364
+ // Check abort signal after parent verification
365
+ if (signal?.aborted) {
366
+ throw new AbortError();
367
+ }
368
+ // TODO: Actually remove parent-child relationships
369
+ // Return success job info
370
+ return {
371
+ id: jobId,
372
+ status: JobStatus.COMPLETED,
373
+ };
374
+ }
375
+ /**
376
+ * Retrieves the status of a job
377
+ */
378
+ getJobStatus(jobId, signal) {
379
+ if (signal?.aborted) {
380
+ throw new AbortError();
381
+ }
382
+ // TODO: Phase 3 - Implement once IQueue and job tracking is in place
383
+ // For now, return a not found status
384
+ return Promise.resolve({
385
+ id: jobId,
386
+ status: JobStatus.FAILED,
387
+ error: "Job tracking not yet implemented",
388
+ });
389
+ }
390
+ /**
391
+ * Starts the job executor if not already running.
392
+ * Called automatically when the first job is enqueued.
393
+ */
394
+ ensureJobExecutorRunning() {
395
+ if (!this.jobExecutorStarted) {
396
+ // For new simplified executor, no start method needed
397
+ // The executor just executes jobs when called
398
+ // The manager (if used) handles listening to queue events
399
+ this.jobExecutorStarted = true;
400
+ }
401
+ }
402
+ /**
403
+ * Finds documents by their IDs
404
+ */
405
+ async findByIds(ids, view, paging, signal) {
406
+ const documents = [];
407
+ // Fetch each document by ID using storage directly
408
+ for (const id of ids) {
409
+ if (signal?.aborted) {
410
+ throw new AbortError();
411
+ }
412
+ let document;
413
+ try {
414
+ document = await this.documentStorage.get(id);
415
+ }
416
+ catch {
417
+ // Skip documents that don't exist or can't be accessed
418
+ // This matches the behavior expected from a search operation
419
+ continue;
420
+ }
421
+ // Apply view filter - This will be removed when we pass the viewfilter along
422
+ // to the underlying store, but is here now for the interface.
423
+ for (const scope in document.state) {
424
+ if (!matchesScope(view, scope)) {
425
+ // eslint-disable-next-line @typescript-eslint/no-dynamic-delete
426
+ delete document.state[scope];
427
+ }
428
+ }
429
+ documents.push(document);
430
+ }
431
+ if (signal?.aborted) {
432
+ throw new AbortError();
433
+ }
434
+ // Apply paging
435
+ const startIndex = paging ? parseInt(paging.cursor) || 0 : 0;
436
+ const limit = paging?.limit || documents.length;
437
+ const pagedDocuments = documents.slice(startIndex, startIndex + limit);
438
+ // Create paged results
439
+ const hasMore = startIndex + limit < documents.length;
440
+ const nextCursor = hasMore ? String(startIndex + limit) : undefined;
441
+ return {
442
+ results: pagedDocuments,
443
+ options: paging || { cursor: "0", limit: documents.length },
444
+ nextCursor,
445
+ next: hasMore
446
+ ? () => this.findByIds(ids, view, { cursor: nextCursor, limit }, signal)
447
+ : undefined,
448
+ };
449
+ }
450
+ /**
451
+ * Finds documents by their slugs
452
+ */
453
+ async findBySlugs(slugs, view, paging, signal) {
454
+ const documents = [];
455
+ // Use storage to resolve slugs to IDs
456
+ let ids;
457
+ try {
458
+ ids = await this.documentStorage.resolveIds(slugs, signal);
459
+ }
460
+ catch {
461
+ // If slug resolution fails, return empty results
462
+ // This matches the behavior expected from a search operation
463
+ ids = [];
464
+ }
465
+ // Fetch each document by resolved ID
466
+ for (const id of ids) {
467
+ if (signal?.aborted) {
468
+ throw new AbortError();
469
+ }
470
+ let document;
471
+ try {
472
+ document = await this.documentStorage.get(id);
473
+ }
474
+ catch {
475
+ // Skip documents that don't exist or can't be accessed
476
+ continue;
477
+ }
478
+ // Apply view filter - This will be removed when we pass the viewfilter along
479
+ // to the underlying store, but is here now for the interface.
480
+ for (const scope in document.state) {
481
+ if (!matchesScope(view, scope)) {
482
+ // eslint-disable-next-line @typescript-eslint/no-dynamic-delete
483
+ delete document.state[scope];
484
+ }
485
+ }
486
+ documents.push(document);
487
+ }
488
+ if (signal?.aborted) {
489
+ throw new AbortError();
490
+ }
491
+ // Apply paging - this will be removed when we pass the paging along
492
+ // to the underlying store, but is here now for the interface.
493
+ const startIndex = paging ? parseInt(paging.cursor) || 0 : 0;
494
+ const limit = paging?.limit || documents.length;
495
+ const pagedDocuments = documents.slice(startIndex, startIndex + limit);
496
+ // Create paged results
497
+ const hasMore = startIndex + limit < documents.length;
498
+ const nextCursor = hasMore ? String(startIndex + limit) : undefined;
499
+ return {
500
+ results: pagedDocuments,
501
+ options: paging || { cursor: "0", limit: documents.length },
502
+ nextCursor,
503
+ next: hasMore
504
+ ? () => this.findBySlugs(slugs, view, { cursor: nextCursor, limit }, signal)
505
+ : undefined,
506
+ };
507
+ }
508
+ /**
509
+ * Finds documents by parent ID
510
+ */
511
+ async findByParentId(parentId, view, paging, signal) {
512
+ // Get child document IDs from storage
513
+ const childIds = await this.documentStorage.getChildren(parentId);
514
+ if (signal?.aborted) {
515
+ throw new AbortError();
516
+ }
517
+ const documents = [];
518
+ // Fetch each child document
519
+ for (const childId of childIds) {
520
+ if (signal?.aborted) {
521
+ throw new AbortError();
522
+ }
523
+ let document;
524
+ try {
525
+ document = await this.documentStorage.get(childId);
526
+ }
527
+ catch {
528
+ // Skip documents that don't exist or can't be accessed
529
+ // This matches the behavior expected from a search operation
530
+ continue;
531
+ }
532
+ // Apply view filter - This will be removed when we pass the viewfilter along
533
+ // to the underlying store, but is here now for the interface.
534
+ for (const scope in document.state) {
535
+ if (!matchesScope(view, scope)) {
536
+ // eslint-disable-next-line @typescript-eslint/no-dynamic-delete
537
+ delete document.state[scope];
538
+ }
539
+ }
540
+ documents.push(document);
541
+ }
542
+ if (signal?.aborted) {
543
+ throw new AbortError();
544
+ }
545
+ // Apply paging
546
+ const startIndex = paging ? parseInt(paging.cursor) || 0 : 0;
547
+ const limit = paging?.limit || documents.length;
548
+ const pagedDocuments = documents.slice(startIndex, startIndex + limit);
549
+ // Create paged results
550
+ const hasMore = startIndex + limit < documents.length;
551
+ const nextCursor = hasMore ? String(startIndex + limit) : undefined;
552
+ return {
553
+ results: pagedDocuments,
554
+ options: paging || { cursor: "0", limit: documents.length },
555
+ nextCursor,
556
+ next: hasMore
557
+ ? () => this.findByParentId(parentId, view, { cursor: nextCursor, limit }, signal)
558
+ : undefined,
559
+ };
560
+ }
561
+ /**
562
+ * Finds documents by type
563
+ */
564
+ async findByType(type, view, paging, signal) {
565
+ const documents = [];
566
+ // Use storage's findByType method directly
567
+ const cursor = paging?.cursor;
568
+ const limit = paging?.limit || 100;
569
+ // Get document IDs of the specified type
570
+ const { documents: documentIds, nextCursor } = await this.documentStorage.findByType(type, limit, cursor);
571
+ if (signal?.aborted) {
572
+ throw new AbortError();
573
+ }
574
+ // Fetch each document by its ID
575
+ for (const documentId of documentIds) {
576
+ if (signal?.aborted) {
577
+ throw new AbortError();
578
+ }
579
+ let document;
580
+ try {
581
+ document = await this.documentStorage.get(documentId);
582
+ }
583
+ catch {
584
+ // Skip documents that can't be retrieved
585
+ continue;
586
+ }
587
+ // Apply view filter
588
+ for (const scope in document.state) {
589
+ if (!matchesScope(view, scope)) {
590
+ // eslint-disable-next-line @typescript-eslint/no-dynamic-delete
591
+ delete document.state[scope];
592
+ }
593
+ }
594
+ documents.push(document);
595
+ }
596
+ if (signal?.aborted) {
597
+ throw new AbortError();
598
+ }
599
+ // Results are already paged from the storage layer
600
+ return {
601
+ results: documents,
602
+ options: paging || { cursor: cursor || "0", limit },
603
+ nextCursor,
604
+ next: nextCursor
605
+ ? async () => this.findByType(type, view, { cursor: nextCursor, limit }, signal)
606
+ : undefined,
607
+ };
608
+ }
609
+ }
610
+ //# sourceMappingURL=reactor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reactor.js","sourceRoot":"","sources":["../../src/reactor.ts"],"names":[],"mappings":"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"}