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

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,328 @@
1
+ import { beforeEach, describe, expect, it, vi } from "vitest";
2
+ import { documentModelDocumentModelModule } from "document-model";
3
+ import { driveDocumentModelModule } from "document-drive";
4
+ import { v4 as uuidv4 } from "uuid";
5
+ import { JobStatus } from "../src/shared/types.js";
6
+ import { createMockDocument, createDocumentModelAction, createTestActions, createTestReactorSetup, } from "./factories.js";
7
+ describe("Reactor <> Queue Integration", () => {
8
+ let reactor;
9
+ let driveServer;
10
+ let storage;
11
+ let eventBus;
12
+ let queue;
13
+ let jobExecutor;
14
+ const documentModels = [
15
+ documentModelDocumentModelModule,
16
+ driveDocumentModelModule,
17
+ ];
18
+ beforeEach(async () => {
19
+ const setup = await createTestReactorSetup(documentModels);
20
+ reactor = setup.reactor;
21
+ driveServer = setup.driveServer;
22
+ storage = setup.storage;
23
+ eventBus = setup.eventBus;
24
+ queue = setup.queue;
25
+ jobExecutor = setup.jobExecutor;
26
+ });
27
+ describe("mutate", () => {
28
+ it("should enqueue jobs for document mutations", async () => {
29
+ // Create a test document
30
+ const testDoc = createMockDocument({
31
+ id: "test-doc-1",
32
+ slug: "test-doc",
33
+ });
34
+ // Add the document to the drive server
35
+ await driveServer.addDocument(testDoc);
36
+ // Create a mock action for the documentmodel document type
37
+ const action = createDocumentModelAction("SET_NAME", {
38
+ input: { name: "Updated Document Model" },
39
+ });
40
+ // Spy on the queue's enqueue method
41
+ const enqueueSpy = vi.spyOn(queue, "enqueue");
42
+ const result = await reactor.mutate(testDoc.header.id, [action]);
43
+ // Verify that the queue's enqueue method was called
44
+ expect(enqueueSpy).toHaveBeenCalledTimes(1);
45
+ // Verify the job structure
46
+ const enqueuedJob = enqueueSpy.mock.calls[0][0];
47
+ expect(enqueuedJob.documentId).toBe(testDoc.header.id);
48
+ expect(enqueuedJob.operation.action).toEqual(action);
49
+ expect(enqueuedJob.scope).toBe(action.scope || "global");
50
+ expect(enqueuedJob.branch).toBe("main");
51
+ // Verify the result
52
+ expect(result).toBeDefined();
53
+ expect(result.id).toBeDefined();
54
+ expect(result.status).toBe(JobStatus.PENDING);
55
+ });
56
+ it("should create proper Job objects from actions", async () => {
57
+ // Create a test document
58
+ const testDoc = createMockDocument({
59
+ id: "test-doc-2",
60
+ slug: "test-doc-2",
61
+ });
62
+ // Add the document to the drive server
63
+ await driveServer.addDocument(testDoc);
64
+ // Create multiple actions
65
+ const actions = [
66
+ createDocumentModelAction("SET_NAME", {
67
+ input: { name: "First Update" },
68
+ }),
69
+ createDocumentModelAction("SET_DESCRIPTION", {
70
+ input: { description: "Test description" },
71
+ timestampUtcMs: String(Date.now() + 1000),
72
+ }),
73
+ ];
74
+ // Capture the jobs that are enqueued
75
+ const enqueuedJobs = [];
76
+ vi.spyOn(queue, "enqueue").mockImplementation((job) => {
77
+ enqueuedJobs.push(job);
78
+ return Promise.resolve();
79
+ });
80
+ const result = await reactor.mutate(testDoc.header.id, actions);
81
+ // Verify jobs were enqueued
82
+ expect(enqueuedJobs).toHaveLength(actions.length);
83
+ enqueuedJobs.forEach((job, index) => {
84
+ expect(job.documentId).toBe(testDoc.header.id);
85
+ expect(job.operation.action).toEqual(actions[index]);
86
+ expect(job.scope).toBe(actions[index].scope || "global");
87
+ expect(job.branch).toBe("main");
88
+ expect(job.operation.index).toBe(index);
89
+ });
90
+ // Verify the result
91
+ expect(result.status).toBe(JobStatus.PENDING);
92
+ });
93
+ it("should start the job executor when jobs are enqueued", async () => {
94
+ // Create a test document
95
+ const testDoc = createMockDocument({
96
+ id: "test-doc-3",
97
+ slug: "test-doc-3",
98
+ });
99
+ // Add the document to the drive server
100
+ await driveServer.addDocument(testDoc);
101
+ // Spy on the executor's executeJob method (start is called internally)
102
+ const executorSpy = vi.spyOn(jobExecutor, "executeJob");
103
+ const action = createDocumentModelAction("SET_NAME", {
104
+ input: { name: "Test Name" },
105
+ });
106
+ await reactor.mutate(testDoc.header.id, [action]);
107
+ // The executor's internal start should have been triggered
108
+ // In the shim, start is called automatically on first mutate
109
+ // We can't directly test this with the simplified design
110
+ });
111
+ it("should return JobInfo with pending status when jobs are enqueued", async () => {
112
+ // Create a test document
113
+ const testDoc = createMockDocument({
114
+ id: "test-doc-4",
115
+ slug: "test-doc-4",
116
+ });
117
+ // Add the document to the drive server
118
+ await driveServer.addDocument(testDoc);
119
+ const action = createDocumentModelAction("SET_NAME", {
120
+ input: { name: "Test Name" },
121
+ });
122
+ const result = await reactor.mutate(testDoc.header.id, [action]);
123
+ // Now that we use the queue, it should return PENDING
124
+ expect(result).toBeDefined();
125
+ expect(result.id).toBeDefined();
126
+ expect(result.status).toBe(JobStatus.PENDING);
127
+ });
128
+ it("should handle multiple actions in sequence", async () => {
129
+ // Create a test document
130
+ const testDoc = createMockDocument({
131
+ id: "test-doc-5",
132
+ slug: "test-doc-5",
133
+ });
134
+ // Add the document to the drive server
135
+ await driveServer.addDocument(testDoc);
136
+ const actions = createTestActions(3, "SET_NAME");
137
+ // Track enqueued jobs
138
+ const enqueuedJobs = [];
139
+ vi.spyOn(queue, "enqueue").mockImplementation((job) => {
140
+ enqueuedJobs.push(job);
141
+ return Promise.resolve();
142
+ });
143
+ const result = await reactor.mutate(testDoc.header.id, actions);
144
+ expect(result).toBeDefined();
145
+ expect(result.id).toBeDefined();
146
+ expect(result.status).toBe(JobStatus.PENDING);
147
+ // Verify all jobs were enqueued in order
148
+ expect(enqueuedJobs).toHaveLength(3);
149
+ // Verify jobs maintain order
150
+ enqueuedJobs.forEach((job, index) => {
151
+ expect(job.operation.index).toBe(index);
152
+ const actionInput = job.operation.action.input;
153
+ expect(actionInput.name).toBe(`Action ${index + 1}`);
154
+ });
155
+ });
156
+ describe("serial execution per document", () => {
157
+ it("should not dequeue jobs for a document that has executing jobs", async () => {
158
+ // Create two test documents
159
+ const testDoc1 = createMockDocument({
160
+ id: "test-doc-serial-1",
161
+ slug: "test-doc-serial-1",
162
+ });
163
+ const testDoc2 = createMockDocument({
164
+ id: "test-doc-serial-2",
165
+ slug: "test-doc-serial-2",
166
+ });
167
+ // Add documents to the drive server
168
+ await driveServer.addDocument(testDoc1);
169
+ await driveServer.addDocument(testDoc2);
170
+ // Create actions for both documents
171
+ const action1 = {
172
+ id: uuidv4(),
173
+ type: "SET_NAME",
174
+ scope: "global",
175
+ input: { name: "Doc 1 Action 1" },
176
+ timestampUtcMs: String(Date.now()),
177
+ };
178
+ const action2 = {
179
+ id: uuidv4(),
180
+ type: "SET_NAME",
181
+ scope: "global",
182
+ input: { name: "Doc 1 Action 2" },
183
+ timestampUtcMs: String(Date.now() + 1000),
184
+ };
185
+ const action3 = {
186
+ id: uuidv4(),
187
+ type: "SET_NAME",
188
+ scope: "global",
189
+ input: { name: "Doc 2 Action 1" },
190
+ timestampUtcMs: String(Date.now() + 2000),
191
+ };
192
+ // Enqueue jobs for both documents
193
+ await reactor.mutate(testDoc1.header.id, [action1, action2]);
194
+ await reactor.mutate(testDoc2.header.id, [action3]);
195
+ // First dequeue should get a job from document 1
196
+ const job1 = await queue.dequeueNext();
197
+ expect(job1).toBeDefined();
198
+ expect(job1?.documentId).toBe(testDoc1.header.id);
199
+ // Second dequeue should get the job from document 2 (not doc 1's second job)
200
+ const job2 = await queue.dequeueNext();
201
+ expect(job2).toBeDefined();
202
+ expect(job2?.documentId).toBe(testDoc2.header.id);
203
+ // Third dequeue should return null since doc 1 is still executing
204
+ const job3 = await queue.dequeueNext();
205
+ expect(job3).toBeNull();
206
+ // Complete the first job
207
+ if (job1) {
208
+ await queue.completeJob(job1.id);
209
+ }
210
+ // Now we should be able to dequeue the second job from document 1
211
+ const job4 = await queue.dequeueNext();
212
+ expect(job4).toBeDefined();
213
+ expect(job4?.documentId).toBe(testDoc1.header.id);
214
+ });
215
+ it("should allow concurrent execution of jobs from different documents", async () => {
216
+ // Create three test documents
217
+ const docs = await Promise.all([
218
+ createMockDocument({ id: "concurrent-1", slug: "concurrent-1" }),
219
+ createMockDocument({ id: "concurrent-2", slug: "concurrent-2" }),
220
+ createMockDocument({ id: "concurrent-3", slug: "concurrent-3" }),
221
+ ]);
222
+ // Add documents to the drive server
223
+ for (const doc of docs) {
224
+ await driveServer.addDocument(doc);
225
+ }
226
+ // Create actions for each document
227
+ const actions = docs.map((doc, index) => ({
228
+ id: uuidv4(),
229
+ type: "SET_NAME",
230
+ scope: "global",
231
+ input: { name: `Doc ${index + 1} Action` },
232
+ timestampUtcMs: String(Date.now() + index * 1000),
233
+ }));
234
+ // Enqueue one job per document
235
+ for (let i = 0; i < docs.length; i++) {
236
+ await reactor.mutate(docs[i].header.id, [actions[i]]);
237
+ }
238
+ // Should be able to dequeue all three jobs since they're from different documents
239
+ const dequeuedJobs = [];
240
+ for (let i = 0; i < docs.length; i++) {
241
+ const job = await queue.dequeueNext();
242
+ expect(job).toBeDefined();
243
+ dequeuedJobs.push(job);
244
+ }
245
+ // Verify we got one job from each document
246
+ const documentIds = dequeuedJobs.map((job) => job.documentId).sort();
247
+ const expectedIds = docs.map((doc) => doc.header.id).sort();
248
+ expect(documentIds).toEqual(expectedIds);
249
+ // Fourth dequeue should return null since all documents are executing
250
+ const noMoreJobs = await queue.dequeueNext();
251
+ expect(noMoreJobs).toBeNull();
252
+ });
253
+ it("should resume processing after job completion", async () => {
254
+ // Create a test document
255
+ const testDoc = createMockDocument({
256
+ id: "test-resume",
257
+ slug: "test-resume",
258
+ });
259
+ await driveServer.addDocument(testDoc);
260
+ // Create multiple actions for the same document
261
+ const actions = [1, 2, 3].map((i) => ({
262
+ id: uuidv4(),
263
+ type: "SET_NAME",
264
+ scope: "global",
265
+ input: { name: `Action ${i}` },
266
+ timestampUtcMs: String(Date.now() + i * 1000),
267
+ }));
268
+ // Enqueue all actions
269
+ await reactor.mutate(testDoc.header.id, actions);
270
+ // Dequeue first job
271
+ const job1 = await queue.dequeueNext();
272
+ expect(job1).toBeDefined();
273
+ expect(job1?.operation.index).toBe(0);
274
+ // Should not be able to dequeue another job for this document
275
+ const blockedJob = await queue.dequeueNext();
276
+ expect(blockedJob).toBeNull();
277
+ // Complete the first job
278
+ if (job1) {
279
+ await queue.completeJob(job1.id);
280
+ }
281
+ // Now should be able to dequeue the second job
282
+ const job2 = await queue.dequeueNext();
283
+ expect(job2).toBeDefined();
284
+ expect(job2?.operation.index).toBe(1);
285
+ // Complete second job and get third
286
+ if (job2) {
287
+ await queue.completeJob(job2.id);
288
+ }
289
+ const job3 = await queue.dequeueNext();
290
+ expect(job3).toBeDefined();
291
+ expect(job3?.operation.index).toBe(2);
292
+ });
293
+ it("should handle job failure and allow next job to proceed", async () => {
294
+ // Create a test document
295
+ const testDoc = createMockDocument({
296
+ id: "test-failure",
297
+ slug: "test-failure",
298
+ });
299
+ await driveServer.addDocument(testDoc);
300
+ // Create two actions
301
+ const actions = [1, 2].map((i) => ({
302
+ id: uuidv4(),
303
+ type: "SET_NAME",
304
+ scope: "global",
305
+ input: { name: `Action ${i}` },
306
+ timestampUtcMs: String(Date.now() + i * 1000),
307
+ }));
308
+ // Enqueue actions
309
+ await reactor.mutate(testDoc.header.id, actions);
310
+ // Dequeue first job
311
+ const job1 = await queue.dequeueNext();
312
+ expect(job1).toBeDefined();
313
+ // Should not be able to dequeue second job
314
+ const blockedJob = await queue.dequeueNext();
315
+ expect(blockedJob).toBeNull();
316
+ // Fail the first job
317
+ if (job1) {
318
+ await queue.failJob(job1.id, "Test failure");
319
+ }
320
+ // Now should be able to dequeue the second job
321
+ const job2 = await queue.dequeueNext();
322
+ expect(job2).toBeDefined();
323
+ expect(job2?.operation.index).toBe(1);
324
+ });
325
+ });
326
+ });
327
+ });
328
+ //# sourceMappingURL=reactor-queue.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reactor-queue.test.js","sourceRoot":"","sources":["../../test/reactor-queue.test.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,8 @@
1
1
  import { MemoryStorage, ReactorBuilder, driveDocumentModelModule, } from "document-drive";
2
2
  import { documentModelDocumentModelModule } from "document-model";
3
- import { beforeEach, describe, expect, it } from "vitest";
3
+ import { beforeEach, describe, expect, it, vi } from "vitest";
4
4
  import { EventBus } from "../src/events/event-bus.js";
5
- import { InMemoryJobExecutor } from "../src/executor/job-executor.js";
5
+ import { SimpleJobExecutor } from "../src/executor/simple-job-executor.js";
6
6
  import { InMemoryQueue } from "../src/queue/queue.js";
7
7
  import { Reactor } from "../src/reactor.js";
8
8
  // Helper to create a valid PHDocument using the document model utils
@@ -45,7 +45,32 @@ describe("Reactor Read Interface", () => {
45
45
  // Create event bus, queue, and executor
46
46
  eventBus = new EventBus();
47
47
  queue = new InMemoryQueue(eventBus);
48
- jobExecutor = new InMemoryJobExecutor(eventBus, queue);
48
+ // Create a mock registry for the executor
49
+ const registry = {
50
+ getModule: vi.fn().mockReturnValue({
51
+ reducer: vi.fn((doc, action) => ({
52
+ ...doc,
53
+ operations: { global: [{ index: 0, hash: "test-hash" }] },
54
+ })),
55
+ }),
56
+ };
57
+ // Create a mock document storage for the executor (different from IDocumentStorage for reactor)
58
+ const mockDocStorage = {
59
+ get: vi.fn().mockResolvedValue({
60
+ header: { documentType: "test" },
61
+ operations: { global: [] },
62
+ history: [],
63
+ state: {},
64
+ initialState: {},
65
+ clipboard: [],
66
+ }),
67
+ delete: vi.fn(),
68
+ exists: vi.fn(),
69
+ getChildren: vi.fn(),
70
+ findByType: vi.fn(),
71
+ resolveIds: vi.fn(),
72
+ };
73
+ jobExecutor = new SimpleJobExecutor(registry, mockDocStorage, mockDocStorage);
49
74
  // Create reactor facade with all required dependencies
50
75
  reactor = new Reactor(driveServer, storage, eventBus, queue, jobExecutor);
51
76
  });
@@ -1 +1 @@
1
- {"version":3,"file":"reactor-read.test.js","sourceRoot":"","sources":["../../test/reactor-read.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"reactor-read.test.js","sourceRoot":"","sources":["../../test/reactor-read.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=registry.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.test.d.ts","sourceRoot":"","sources":["../../test/registry.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,182 @@
1
+ import { driveDocumentModelModule } from "document-drive";
2
+ import { documentModelDocumentModelModule, } from "document-model";
3
+ import { beforeEach, describe, expect, it } from "vitest";
4
+ import { DocumentModelRegistry, DuplicateModuleError, ModuleNotFoundError, } from "../src/registry/implementation.js";
5
+ describe("DocumentModelRegistry", () => {
6
+ let registry;
7
+ // Use real document model modules with proper type casting
8
+ const documentModelModule = documentModelDocumentModelModule;
9
+ const driveModule = driveDocumentModelModule;
10
+ beforeEach(() => {
11
+ registry = new DocumentModelRegistry();
12
+ });
13
+ describe("registerModules", () => {
14
+ it("should register a single module successfully", () => {
15
+ expect(() => registry.registerModules(documentModelModule)).not.toThrow();
16
+ expect(registry.getAllModules()).toHaveLength(1);
17
+ expect(registry.getAllModules()[0]).toBe(documentModelModule);
18
+ });
19
+ it("should register multiple modules successfully", () => {
20
+ expect(() => registry.registerModules(documentModelModule, driveModule)).not.toThrow();
21
+ expect(registry.getAllModules()).toHaveLength(2);
22
+ expect(registry.getAllModules()).toContain(documentModelModule);
23
+ expect(registry.getAllModules()).toContain(driveModule);
24
+ });
25
+ it("should throw DuplicateModuleError when registering duplicate module", () => {
26
+ registry.registerModules(documentModelModule);
27
+ expect(() => registry.registerModules(documentModelModule)).toThrow(DuplicateModuleError);
28
+ expect(() => registry.registerModules(documentModelModule)).toThrow(`Document model module already registered for type: ${documentModelModule.documentModel.id}`);
29
+ });
30
+ it("should allow registering different modules with different IDs", () => {
31
+ registry.registerModules(documentModelModule);
32
+ expect(() => registry.registerModules(driveModule)).not.toThrow();
33
+ expect(registry.getAllModules()).toHaveLength(2);
34
+ });
35
+ });
36
+ describe("getModule", () => {
37
+ it("should return registered module", () => {
38
+ registry.registerModules(documentModelModule);
39
+ const module = registry.getModule(documentModelModule.documentModel.id);
40
+ expect(module).toBe(documentModelModule);
41
+ });
42
+ it("should return correct module when multiple are registered", () => {
43
+ registry.registerModules(documentModelModule, driveModule);
44
+ const docModule = registry.getModule(documentModelModule.documentModel.id);
45
+ expect(docModule).toBe(documentModelModule);
46
+ const drvModule = registry.getModule(driveModule.documentModel.id);
47
+ expect(drvModule).toBe(driveModule);
48
+ });
49
+ it("should throw ModuleNotFoundError for unregistered module", () => {
50
+ expect(() => registry.getModule("unknown.module.id")).toThrow(ModuleNotFoundError);
51
+ expect(() => registry.getModule("unknown.module.id")).toThrow("Document model module not found for type: unknown.module.id");
52
+ });
53
+ it("should throw ModuleNotFoundError after module is unregistered", () => {
54
+ registry.registerModules(documentModelModule);
55
+ registry.unregisterModules(documentModelModule.documentModel.id);
56
+ expect(() => registry.getModule(documentModelModule.documentModel.id)).toThrow(ModuleNotFoundError);
57
+ });
58
+ });
59
+ describe("unregisterModules", () => {
60
+ it("should unregister a single module successfully", () => {
61
+ registry.registerModules(documentModelModule);
62
+ const result = registry.unregisterModules(documentModelModule.documentModel.id);
63
+ expect(result).toBe(true);
64
+ expect(registry.getAllModules()).toHaveLength(0);
65
+ });
66
+ it("should unregister multiple modules successfully", () => {
67
+ registry.registerModules(documentModelModule, driveModule);
68
+ const result = registry.unregisterModules(documentModelModule.documentModel.id, driveModule.documentModel.id);
69
+ expect(result).toBe(true);
70
+ expect(registry.getAllModules()).toHaveLength(0);
71
+ });
72
+ it("should return false when module not found", () => {
73
+ const result = registry.unregisterModules("unknown.module.id");
74
+ expect(result).toBe(false);
75
+ });
76
+ it("should return false when some modules not found", () => {
77
+ registry.registerModules(documentModelModule);
78
+ const result = registry.unregisterModules(documentModelModule.documentModel.id, "unknown.module.id");
79
+ expect(result).toBe(false);
80
+ // But the found module should still be unregistered
81
+ expect(registry.getAllModules()).toHaveLength(0);
82
+ });
83
+ it("should only unregister specified modules", () => {
84
+ registry.registerModules(documentModelModule, driveModule);
85
+ const result = registry.unregisterModules(documentModelModule.documentModel.id);
86
+ expect(result).toBe(true);
87
+ expect(registry.getAllModules()).toHaveLength(1);
88
+ expect(registry.getAllModules()[0]).toBe(driveModule);
89
+ });
90
+ });
91
+ describe("getAllModules", () => {
92
+ it("should return empty array when no modules registered", () => {
93
+ const modules = registry.getAllModules();
94
+ expect(modules).toEqual([]);
95
+ });
96
+ it("should return all registered modules", () => {
97
+ registry.registerModules(documentModelModule, driveModule);
98
+ const modules = registry.getAllModules();
99
+ expect(modules).toHaveLength(2);
100
+ expect(modules).toContain(documentModelModule);
101
+ expect(modules).toContain(driveModule);
102
+ });
103
+ it("should return modules in registration order", () => {
104
+ registry.registerModules(documentModelModule);
105
+ registry.registerModules(driveModule);
106
+ const modules = registry.getAllModules();
107
+ expect(modules[0]).toBe(documentModelModule);
108
+ expect(modules[1]).toBe(driveModule);
109
+ });
110
+ });
111
+ describe("clear", () => {
112
+ it("should clear all registered modules", () => {
113
+ registry.registerModules(documentModelModule, driveModule);
114
+ registry.clear();
115
+ expect(registry.getAllModules()).toEqual([]);
116
+ });
117
+ it("should allow registering modules after clear", () => {
118
+ registry.registerModules(documentModelModule);
119
+ registry.clear();
120
+ expect(() => registry.registerModules(documentModelModule)).not.toThrow();
121
+ expect(registry.getAllModules()).toHaveLength(1);
122
+ });
123
+ it("should make getModule throw after clear", () => {
124
+ registry.registerModules(documentModelModule);
125
+ const moduleId = documentModelModule.documentModel.id;
126
+ // Module is accessible before clear
127
+ expect(() => registry.getModule(moduleId)).not.toThrow();
128
+ registry.clear();
129
+ // Module is not accessible after clear
130
+ expect(() => registry.getModule(moduleId)).toThrow(ModuleNotFoundError);
131
+ });
132
+ });
133
+ describe("Integration tests", () => {
134
+ it("should handle multiple operations in sequence", () => {
135
+ // Register modules
136
+ registry.registerModules(documentModelModule, driveModule);
137
+ expect(registry.getAllModules()).toHaveLength(2);
138
+ // Get modules
139
+ const docModule = registry.getModule(documentModelModule.documentModel.id);
140
+ expect(docModule).toBe(documentModelModule);
141
+ // Unregister one
142
+ registry.unregisterModules(driveModule.documentModel.id);
143
+ expect(registry.getAllModules()).toHaveLength(1);
144
+ // Try to get unregistered module
145
+ expect(() => registry.getModule(driveModule.documentModel.id)).toThrow(ModuleNotFoundError);
146
+ // Clear all
147
+ registry.clear();
148
+ expect(registry.getAllModules()).toHaveLength(0);
149
+ // Register again
150
+ registry.registerModules(driveModule);
151
+ expect(registry.getAllModules()).toHaveLength(1);
152
+ });
153
+ it("should maintain consistency after multiple register/unregister cycles", () => {
154
+ // First cycle
155
+ registry.registerModules(documentModelModule);
156
+ expect(registry.getAllModules()).toHaveLength(1);
157
+ registry.unregisterModules(documentModelModule.documentModel.id);
158
+ expect(registry.getAllModules()).toHaveLength(0);
159
+ // Second cycle
160
+ registry.registerModules(documentModelModule, driveModule);
161
+ expect(registry.getAllModules()).toHaveLength(2);
162
+ registry.unregisterModules(documentModelModule.documentModel.id);
163
+ expect(registry.getAllModules()).toHaveLength(1);
164
+ // Third cycle
165
+ registry.registerModules(documentModelModule);
166
+ expect(registry.getAllModules()).toHaveLength(2);
167
+ registry.clear();
168
+ expect(registry.getAllModules()).toHaveLength(0);
169
+ });
170
+ it("should properly handle edge cases", () => {
171
+ // Unregister from empty registry
172
+ expect(registry.unregisterModules("any.id")).toBe(false);
173
+ // Clear empty registry
174
+ expect(() => registry.clear()).not.toThrow();
175
+ // Register, clear, then try to get
176
+ registry.registerModules(documentModelModule);
177
+ registry.clear();
178
+ expect(() => registry.getModule(documentModelModule.documentModel.id)).toThrow(ModuleNotFoundError);
179
+ });
180
+ });
181
+ });
182
+ //# sourceMappingURL=registry.test.js.map