@powerhousedao/reactor 5.0.0-staging.1 → 5.0.0-staging.2

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 (93) hide show
  1. package/dist/bench/end-to-end-flow.bench.js +45 -27
  2. package/dist/bench/end-to-end-flow.bench.js.map +1 -1
  3. package/dist/bench/queue-only.bench.js +1 -0
  4. package/dist/bench/queue-only.bench.js.map +1 -1
  5. package/dist/bench/reactor-throughput.bench.js +27 -10
  6. package/dist/bench/reactor-throughput.bench.js.map +1 -1
  7. package/dist/src/executor/interfaces.d.ts +30 -53
  8. package/dist/src/executor/interfaces.d.ts.map +1 -1
  9. package/dist/src/executor/simple-job-executor-manager.d.ts +27 -0
  10. package/dist/src/executor/simple-job-executor-manager.d.ts.map +1 -0
  11. package/dist/src/executor/simple-job-executor-manager.js +128 -0
  12. package/dist/src/executor/simple-job-executor-manager.js.map +1 -0
  13. package/dist/src/executor/simple-job-executor.d.ts +19 -0
  14. package/dist/src/executor/simple-job-executor.d.ts.map +1 -0
  15. package/dist/src/executor/simple-job-executor.js +69 -0
  16. package/dist/src/executor/simple-job-executor.js.map +1 -0
  17. package/dist/src/executor/types.d.ts +22 -7
  18. package/dist/src/executor/types.d.ts.map +1 -1
  19. package/dist/src/executor/types.js.map +1 -1
  20. package/dist/src/index.d.ts +5 -1
  21. package/dist/src/index.d.ts.map +1 -1
  22. package/dist/src/index.js +5 -2
  23. package/dist/src/index.js.map +1 -1
  24. package/dist/src/queue/interfaces.d.ts +25 -0
  25. package/dist/src/queue/interfaces.d.ts.map +1 -1
  26. package/dist/src/queue/queue.d.ts +30 -0
  27. package/dist/src/queue/queue.d.ts.map +1 -1
  28. package/dist/src/queue/queue.js +164 -17
  29. package/dist/src/queue/queue.js.map +1 -1
  30. package/dist/src/queue/types.d.ts +4 -0
  31. package/dist/src/queue/types.d.ts.map +1 -1
  32. package/dist/src/queue/types.js.map +1 -1
  33. package/dist/src/reactor.d.ts.map +1 -1
  34. package/dist/src/reactor.js +4 -4
  35. package/dist/src/reactor.js.map +1 -1
  36. package/dist/src/registry/implementation.d.ts +62 -0
  37. package/dist/src/registry/implementation.d.ts.map +1 -0
  38. package/dist/src/registry/implementation.js +96 -0
  39. package/dist/src/registry/implementation.js.map +1 -0
  40. package/dist/src/registry/index.d.ts +3 -0
  41. package/dist/src/registry/index.d.ts.map +1 -0
  42. package/dist/src/registry/index.js +2 -0
  43. package/dist/src/registry/index.js.map +1 -0
  44. package/dist/src/registry/interfaces.d.ts +39 -0
  45. package/dist/src/registry/interfaces.d.ts.map +1 -0
  46. package/dist/src/registry/interfaces.js +2 -0
  47. package/dist/src/registry/interfaces.js.map +1 -0
  48. package/dist/test/executor-integration.test.d.ts +2 -0
  49. package/dist/test/executor-integration.test.d.ts.map +1 -0
  50. package/dist/test/executor-integration.test.js +290 -0
  51. package/dist/test/executor-integration.test.js.map +1 -0
  52. package/dist/test/factories.d.ts +131 -0
  53. package/dist/test/factories.d.ts.map +1 -0
  54. package/dist/test/factories.js +347 -0
  55. package/dist/test/factories.js.map +1 -0
  56. package/dist/test/queue.test.js +212 -32
  57. package/dist/test/queue.test.js.map +1 -1
  58. package/dist/test/reactor-queue.test.d.ts +2 -0
  59. package/dist/test/reactor-queue.test.d.ts.map +1 -0
  60. package/dist/test/reactor-queue.test.js +328 -0
  61. package/dist/test/reactor-queue.test.js.map +1 -0
  62. package/dist/test/reactor-read.test.js +28 -3
  63. package/dist/test/reactor-read.test.js.map +1 -1
  64. package/dist/test/registry.test.d.ts +2 -0
  65. package/dist/test/registry.test.d.ts.map +1 -0
  66. package/dist/test/registry.test.js +182 -0
  67. package/dist/test/registry.test.js.map +1 -0
  68. package/dist/test/simple-job-executor-manager.test.d.ts +2 -0
  69. package/dist/test/simple-job-executor-manager.test.d.ts.map +1 -0
  70. package/dist/test/simple-job-executor-manager.test.js +132 -0
  71. package/dist/test/simple-job-executor-manager.test.js.map +1 -0
  72. package/dist/test/simple-job-executor.test.d.ts +2 -0
  73. package/dist/test/simple-job-executor.test.d.ts.map +1 -0
  74. package/dist/test/simple-job-executor.test.js +139 -0
  75. package/dist/test/simple-job-executor.test.js.map +1 -0
  76. package/dist/tsconfig.tsbuildinfo +1 -1
  77. package/dist/vitest.config.d.ts +3 -0
  78. package/dist/vitest.config.d.ts.map +1 -0
  79. package/dist/vitest.config.js +11 -0
  80. package/dist/vitest.config.js.map +1 -0
  81. package/package.json +3 -3
  82. package/dist/src/executor/job-executor.d.ts +0 -62
  83. package/dist/src/executor/job-executor.d.ts.map +0 -1
  84. package/dist/src/executor/job-executor.js +0 -325
  85. package/dist/src/executor/job-executor.js.map +0 -1
  86. package/dist/test/job-executor.test.d.ts +0 -2
  87. package/dist/test/job-executor.test.d.ts.map +0 -1
  88. package/dist/test/job-executor.test.js +0 -587
  89. package/dist/test/job-executor.test.js.map +0 -1
  90. package/dist/test/reactor-write.test.d.ts +0 -2
  91. package/dist/test/reactor-write.test.d.ts.map +0 -1
  92. package/dist/test/reactor-write.test.js +0 -232
  93. package/dist/test/reactor-write.test.js.map +0 -1
@@ -0,0 +1,131 @@
1
+ import { MemoryStorage, type BaseDocumentDriveServer } from "document-drive";
2
+ import type { IDocumentOperationStorage, IDocumentStorage } from "document-drive/storage/types";
3
+ import { type Action, type DocumentModelModule, type Operation, type PHDocument } from "document-model";
4
+ import { EventBus } from "../src/events/event-bus.js";
5
+ import type { IEventBus } from "../src/events/interfaces.js";
6
+ import type { IJobExecutor } from "../src/executor/interfaces.js";
7
+ import { SimpleJobExecutor } from "../src/executor/simple-job-executor.js";
8
+ import { SimpleJobExecutorManager } from "../src/executor/simple-job-executor-manager.js";
9
+ import { InMemoryQueue } from "../src/queue/queue.js";
10
+ import type { IQueue } from "../src/queue/interfaces.js";
11
+ import type { Job } from "../src/queue/types.js";
12
+ import { Reactor } from "../src/reactor.js";
13
+ import { DocumentModelRegistry } from "../src/registry/implementation.js";
14
+ import type { IDocumentModelRegistry } from "../src/registry/interfaces.js";
15
+ /**
16
+ * Factory for creating test Job objects
17
+ */
18
+ export declare function createTestJob(overrides?: Partial<Job>): Job;
19
+ /**
20
+ * Factory for creating minimal Job objects (useful for performance tests)
21
+ */
22
+ export declare function createMinimalJob(overrides?: Partial<Job>): Job;
23
+ /**
24
+ * Factory for creating test Operation objects
25
+ */
26
+ export declare function createTestOperation(overrides?: Partial<Operation>): Operation;
27
+ /**
28
+ * Factory for creating minimal Operation objects
29
+ */
30
+ export declare function createMinimalOperation(overrides?: Partial<Operation>): Operation;
31
+ /**
32
+ * Factory for creating test Action objects
33
+ */
34
+ export declare function createTestAction(overrides?: Partial<Action>): Action;
35
+ /**
36
+ * Factory for creating minimal Action objects
37
+ */
38
+ export declare function createMinimalAction(overrides?: Partial<Action>): Action;
39
+ /**
40
+ * Factory for creating specific document model actions
41
+ */
42
+ export declare function createDocumentModelAction(type: "SET_NAME" | "SET_DESCRIPTION" | "CREATE" | "UPDATE", overrides?: Partial<Action>): Action;
43
+ /**
44
+ * Factory for creating mock PHDocument objects
45
+ */
46
+ export declare function createMockDocument(overrides?: {
47
+ id?: string;
48
+ slug?: string;
49
+ documentType?: string;
50
+ state?: any;
51
+ }): PHDocument;
52
+ /**
53
+ * Factory for creating test EventBus instances
54
+ */
55
+ export declare function createTestEventBus(): IEventBus;
56
+ /**
57
+ * Factory for creating test EventBus with mock emit
58
+ */
59
+ export declare function createMockEventBus(): {
60
+ eventBus: EventBus;
61
+ mockEmit: import("vitest").Mock<(...args: any[]) => any>;
62
+ };
63
+ /**
64
+ * Factory for creating test Queue instances
65
+ */
66
+ export declare function createTestQueue(eventBus?: IEventBus): IQueue;
67
+ /**
68
+ * Factory for creating test Registry instances
69
+ */
70
+ export declare function createTestRegistry(modules?: DocumentModelModule<any>[]): IDocumentModelRegistry;
71
+ /**
72
+ * Factory for creating mock JobExecutor
73
+ */
74
+ export declare function createMockJobExecutor(overrides?: Partial<IJobExecutor>): IJobExecutor;
75
+ /**
76
+ * Factory for creating mock SimpleJobExecutor with spy functions
77
+ */
78
+ export declare function createMockSimpleJobExecutor(): {
79
+ executor: IJobExecutor;
80
+ executeJobSpy: import("vitest").Mock<(...args: any[]) => any>;
81
+ };
82
+ /**
83
+ * Factory for creating mock IDocumentStorage
84
+ */
85
+ export declare function createMockDocumentStorage(overrides?: Partial<IDocumentStorage>): IDocumentStorage;
86
+ /**
87
+ * Factory for creating mock IDocumentOperationStorage
88
+ */
89
+ export declare function createMockOperationStorage(overrides?: Partial<IDocumentOperationStorage>): IDocumentOperationStorage;
90
+ /**
91
+ * Factory for creating a complete test reactor setup
92
+ */
93
+ export declare function createTestReactorSetup(documentModels?: DocumentModelModule<any>[]): Promise<{
94
+ reactor: Reactor;
95
+ driveServer: BaseDocumentDriveServer;
96
+ storage: MemoryStorage;
97
+ eventBus: EventBus;
98
+ queue: InMemoryQueue;
99
+ jobExecutor: SimpleJobExecutor;
100
+ registry: DocumentModelRegistry;
101
+ }>;
102
+ /**
103
+ * Factory for creating SimpleJobExecutorManager with dependencies
104
+ */
105
+ export declare function createTestJobExecutorManager(queue?: IQueue, eventBus?: IEventBus, executor?: IJobExecutor): {
106
+ manager: SimpleJobExecutorManager;
107
+ queue: IQueue;
108
+ eventBus: IEventBus;
109
+ executor: IJobExecutor;
110
+ };
111
+ /**
112
+ * Factory for creating test data sets
113
+ */
114
+ export declare function createTestJobSet(count: number, baseOverrides?: Partial<Job>): Job[];
115
+ /**
116
+ * Factory for creating jobs with dependencies
117
+ */
118
+ export declare function createJobWithDependencies(id: string, dependencies: string[], overrides?: Partial<Job>): Job;
119
+ /**
120
+ * Factory for creating a dependency chain of jobs
121
+ */
122
+ export declare function createJobDependencyChain(length: number): Job[];
123
+ /**
124
+ * Factory for creating multiple actions for testing
125
+ */
126
+ export declare function createTestActions(count: number, type?: string): Action[];
127
+ /**
128
+ * Factory for creating mock documents in bulk
129
+ */
130
+ export declare function createTestDocuments(count: number, baseOverrides?: any): PHDocument[];
131
+ //# sourceMappingURL=factories.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"factories.d.ts","sourceRoot":"","sources":["../../test/factories.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,347 @@
1
+ import { MemoryStorage, ReactorBuilder, driveDocumentModelModule, } from "document-drive";
2
+ import { documentModelDocumentModelModule, } from "document-model";
3
+ import { v4 as uuidv4 } from "uuid";
4
+ import { vi } from "vitest";
5
+ import { EventBus } from "../src/events/event-bus.js";
6
+ import { SimpleJobExecutor } from "../src/executor/simple-job-executor.js";
7
+ import { SimpleJobExecutorManager } from "../src/executor/simple-job-executor-manager.js";
8
+ import { InMemoryQueue } from "../src/queue/queue.js";
9
+ import { Reactor } from "../src/reactor.js";
10
+ import { DocumentModelRegistry } from "../src/registry/implementation.js";
11
+ /**
12
+ * Factory for creating test Job objects
13
+ */
14
+ export function createTestJob(overrides = {}) {
15
+ const defaultJob = {
16
+ id: overrides.id || `job-${uuidv4()}`,
17
+ documentId: "doc-1",
18
+ scope: "global",
19
+ branch: "main",
20
+ operation: createTestOperation(overrides.operation ? { ...overrides.operation } : undefined),
21
+ createdAt: new Date().toISOString(),
22
+ queueHint: [],
23
+ retryCount: 0,
24
+ maxRetries: 3,
25
+ };
26
+ return {
27
+ ...defaultJob,
28
+ ...overrides,
29
+ };
30
+ }
31
+ /**
32
+ * Factory for creating minimal Job objects (useful for performance tests)
33
+ */
34
+ export function createMinimalJob(overrides = {}) {
35
+ return {
36
+ id: overrides.id || `job-${uuidv4()}`,
37
+ documentId: overrides.documentId || "doc-1",
38
+ scope: overrides.scope || "global",
39
+ branch: overrides.branch || "main",
40
+ operation: createMinimalOperation(),
41
+ createdAt: overrides.createdAt || "2023-01-01T00:00:00.000Z",
42
+ queueHint: overrides.queueHint || [],
43
+ ...overrides,
44
+ };
45
+ }
46
+ /**
47
+ * Factory for creating test Operation objects
48
+ */
49
+ export function createTestOperation(overrides = {}) {
50
+ const defaultOperation = {
51
+ index: 1,
52
+ timestampUtcMs: new Date().toISOString(),
53
+ hash: "test-hash",
54
+ skip: 0,
55
+ action: createTestAction(overrides.action ? { ...overrides.action } : undefined),
56
+ id: "op-1",
57
+ };
58
+ return {
59
+ ...defaultOperation,
60
+ ...overrides,
61
+ };
62
+ }
63
+ /**
64
+ * Factory for creating minimal Operation objects
65
+ */
66
+ export function createMinimalOperation(overrides = {}) {
67
+ return {
68
+ index: overrides.index ?? 0,
69
+ timestampUtcMs: overrides.timestampUtcMs || "2023-01-01T00:00:00.000Z",
70
+ hash: overrides.hash || "hash-123",
71
+ skip: overrides.skip ?? 0,
72
+ action: overrides.action || createMinimalAction(),
73
+ id: overrides.id || `op-${uuidv4()}`,
74
+ };
75
+ }
76
+ /**
77
+ * Factory for creating test Action objects
78
+ */
79
+ export function createTestAction(overrides = {}) {
80
+ const defaultAction = {
81
+ id: uuidv4(),
82
+ type: "test-operation",
83
+ timestampUtcMs: new Date().toISOString(),
84
+ input: { test: "data" },
85
+ scope: "global",
86
+ };
87
+ return {
88
+ ...defaultAction,
89
+ ...overrides,
90
+ };
91
+ }
92
+ /**
93
+ * Factory for creating minimal Action objects
94
+ */
95
+ export function createMinimalAction(overrides = {}) {
96
+ return {
97
+ id: overrides.id || `action-${uuidv4()}`,
98
+ type: overrides.type || "CREATE",
99
+ timestampUtcMs: overrides.timestampUtcMs || "2023-01-01T00:00:00.000Z",
100
+ input: overrides.input || { data: "test" },
101
+ scope: overrides.scope || "global",
102
+ };
103
+ }
104
+ /**
105
+ * Factory for creating specific document model actions
106
+ */
107
+ export function createDocumentModelAction(type, overrides = {}) {
108
+ const actionTypes = {
109
+ SET_NAME: { name: "Test Name" },
110
+ SET_DESCRIPTION: { description: "Test Description" },
111
+ CREATE: { name: "New Document" },
112
+ UPDATE: { data: "Updated Data" },
113
+ };
114
+ return {
115
+ id: uuidv4(),
116
+ type,
117
+ scope: "global",
118
+ timestampUtcMs: String(Date.now()),
119
+ input: actionTypes[type] || {},
120
+ ...overrides,
121
+ };
122
+ }
123
+ /**
124
+ * Factory for creating mock PHDocument objects
125
+ */
126
+ export function createMockDocument(overrides = {}) {
127
+ const baseDocument = documentModelDocumentModelModule.utils.createDocument();
128
+ if (overrides.id) {
129
+ baseDocument.header.id = overrides.id;
130
+ }
131
+ if (overrides.slug) {
132
+ baseDocument.header.slug = overrides.slug;
133
+ }
134
+ if (overrides.documentType) {
135
+ baseDocument.header.documentType = overrides.documentType;
136
+ }
137
+ if (overrides.state) {
138
+ baseDocument.state = {
139
+ ...baseDocument.state,
140
+ ...overrides.state,
141
+ };
142
+ }
143
+ return baseDocument;
144
+ }
145
+ /**
146
+ * Factory for creating test EventBus instances
147
+ */
148
+ export function createTestEventBus() {
149
+ return new EventBus();
150
+ }
151
+ /**
152
+ * Factory for creating test EventBus with mock emit
153
+ */
154
+ export function createMockEventBus() {
155
+ const eventBus = new EventBus();
156
+ const mockEmit = vi.fn().mockResolvedValue(undefined);
157
+ eventBus.emit = mockEmit;
158
+ return {
159
+ eventBus,
160
+ mockEmit,
161
+ };
162
+ }
163
+ /**
164
+ * Factory for creating test Queue instances
165
+ */
166
+ export function createTestQueue(eventBus) {
167
+ return new InMemoryQueue(eventBus || createTestEventBus());
168
+ }
169
+ /**
170
+ * Factory for creating test Registry instances
171
+ */
172
+ export function createTestRegistry(modules) {
173
+ const registry = new DocumentModelRegistry();
174
+ if (modules) {
175
+ modules.forEach((module) => registry.registerModules(module));
176
+ }
177
+ else {
178
+ // Register default module
179
+ registry.registerModules(documentModelDocumentModelModule);
180
+ }
181
+ return registry;
182
+ }
183
+ /**
184
+ * Factory for creating mock JobExecutor
185
+ */
186
+ export function createMockJobExecutor(overrides = {}) {
187
+ return {
188
+ executeJob: vi.fn().mockResolvedValue({ success: true }),
189
+ ...overrides,
190
+ };
191
+ }
192
+ /**
193
+ * Factory for creating mock SimpleJobExecutor with spy functions
194
+ */
195
+ export function createMockSimpleJobExecutor() {
196
+ const executeJobSpy = vi.fn().mockResolvedValue({
197
+ success: true,
198
+ result: {},
199
+ });
200
+ const executor = {
201
+ executeJob: executeJobSpy,
202
+ };
203
+ return {
204
+ executor,
205
+ executeJobSpy,
206
+ };
207
+ }
208
+ /**
209
+ * Factory for creating mock IDocumentStorage
210
+ */
211
+ export function createMockDocumentStorage(overrides = {}) {
212
+ return {
213
+ get: vi.fn().mockResolvedValue({
214
+ header: {
215
+ id: "doc-1",
216
+ documentType: "powerhouse/document-model",
217
+ },
218
+ operations: { global: [] },
219
+ state: {},
220
+ }),
221
+ set: vi.fn().mockResolvedValue(undefined),
222
+ delete: vi.fn().mockResolvedValue(undefined),
223
+ exists: vi.fn().mockResolvedValue(false),
224
+ getChildren: vi.fn().mockResolvedValue([]),
225
+ findByType: vi.fn().mockResolvedValue([]),
226
+ resolveIds: vi.fn().mockResolvedValue([]),
227
+ ...overrides,
228
+ };
229
+ }
230
+ /**
231
+ * Factory for creating mock IDocumentOperationStorage
232
+ */
233
+ export function createMockOperationStorage(overrides = {}) {
234
+ return {
235
+ addDocumentOperations: vi.fn().mockResolvedValue(undefined),
236
+ ...overrides,
237
+ };
238
+ }
239
+ /**
240
+ * Factory for creating a complete test reactor setup
241
+ */
242
+ export async function createTestReactorSetup(documentModels = [
243
+ documentModelDocumentModelModule,
244
+ driveDocumentModelModule,
245
+ ]) {
246
+ const storage = new MemoryStorage();
247
+ const eventBus = new EventBus();
248
+ const queue = new InMemoryQueue(eventBus);
249
+ // Create real drive server
250
+ const builder = new ReactorBuilder(documentModels).withStorage(storage);
251
+ const driveServer = builder.build();
252
+ await driveServer.initialize();
253
+ // Create registry and register modules
254
+ const registry = new DocumentModelRegistry();
255
+ registry.registerModules(documentModelDocumentModelModule);
256
+ // Create job executor
257
+ const jobExecutor = new SimpleJobExecutor(registry, storage, storage);
258
+ // Create reactor
259
+ const reactor = new Reactor(driveServer, storage, eventBus, queue, jobExecutor);
260
+ return {
261
+ reactor,
262
+ driveServer,
263
+ storage,
264
+ eventBus,
265
+ queue,
266
+ jobExecutor,
267
+ registry,
268
+ };
269
+ }
270
+ /**
271
+ * Factory for creating SimpleJobExecutorManager with dependencies
272
+ */
273
+ export function createTestJobExecutorManager(queue, eventBus, executor) {
274
+ const actualQueue = queue || createTestQueue();
275
+ const actualEventBus = eventBus || createTestEventBus();
276
+ const actualExecutor = executor || createMockJobExecutor();
277
+ const manager = new SimpleJobExecutorManager(() => actualExecutor, actualEventBus, actualQueue);
278
+ return {
279
+ manager,
280
+ queue: actualQueue,
281
+ eventBus: actualEventBus,
282
+ executor: actualExecutor,
283
+ };
284
+ }
285
+ /**
286
+ * Factory for creating test data sets
287
+ */
288
+ export function createTestJobSet(count, baseOverrides = {}) {
289
+ return Array.from({ length: count }, (_, i) => createTestJob({
290
+ id: `job-${i + 1}`,
291
+ ...baseOverrides,
292
+ operation: createTestOperation({
293
+ index: i,
294
+ action: createTestAction({
295
+ input: { name: `Action ${i + 1}` },
296
+ }),
297
+ }),
298
+ }));
299
+ }
300
+ /**
301
+ * Factory for creating jobs with dependencies
302
+ */
303
+ export function createJobWithDependencies(id, dependencies, overrides = {}) {
304
+ return createTestJob({
305
+ id,
306
+ queueHint: dependencies,
307
+ ...overrides,
308
+ });
309
+ }
310
+ /**
311
+ * Factory for creating a dependency chain of jobs
312
+ */
313
+ export function createJobDependencyChain(length) {
314
+ const jobs = [];
315
+ for (let i = 0; i < length; i++) {
316
+ const dependencies = i === 0 ? [] : [`job-${i}`];
317
+ jobs.push(createJobWithDependencies(`job-${i + 1}`, dependencies, {
318
+ operation: createTestOperation({
319
+ index: i,
320
+ action: createTestAction({
321
+ input: { name: `Chain Action ${i + 1}` },
322
+ }),
323
+ }),
324
+ }));
325
+ }
326
+ return jobs;
327
+ }
328
+ /**
329
+ * Factory for creating multiple actions for testing
330
+ */
331
+ export function createTestActions(count, type = "SET_NAME") {
332
+ return Array.from({ length: count }, (_, i) => createDocumentModelAction(type, {
333
+ input: { name: `Action ${i + 1}` },
334
+ timestampUtcMs: String(Date.now() + i * 1000),
335
+ }));
336
+ }
337
+ /**
338
+ * Factory for creating mock documents in bulk
339
+ */
340
+ export function createTestDocuments(count, baseOverrides = {}) {
341
+ return Array.from({ length: count }, (_, i) => createMockDocument({
342
+ id: `doc-${i + 1}`,
343
+ slug: `doc-${i + 1}`,
344
+ ...baseOverrides,
345
+ }));
346
+ }
347
+ //# sourceMappingURL=factories.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"factories.js","sourceRoot":"","sources":["../../test/factories.ts"],"names":[],"mappings":"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"}