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

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 (154) hide show
  1. package/dist/src/client/reactor-client.d.ts +103 -0
  2. package/dist/src/client/reactor-client.d.ts.map +1 -0
  3. package/dist/src/client/reactor-client.js +182 -0
  4. package/dist/src/client/reactor-client.js.map +1 -0
  5. package/dist/src/client/types.d.ts +213 -0
  6. package/dist/src/client/types.d.ts.map +1 -0
  7. package/dist/src/client/types.js +14 -0
  8. package/dist/src/client/types.js.map +1 -0
  9. package/dist/src/core/builder.d.ts +20 -0
  10. package/dist/src/core/builder.d.ts.map +1 -0
  11. package/dist/src/core/builder.js +47 -0
  12. package/dist/src/core/builder.js.map +1 -0
  13. package/dist/src/{reactor.d.ts → core/reactor.d.ts} +5 -15
  14. package/dist/src/core/reactor.d.ts.map +1 -0
  15. package/dist/src/{reactor.js → core/reactor.js} +49 -29
  16. package/dist/src/core/reactor.js.map +1 -0
  17. package/dist/src/{interfaces/reactor.d.ts → core/types.d.ts} +3 -3
  18. package/dist/src/core/types.d.ts.map +1 -0
  19. package/dist/src/core/types.js +2 -0
  20. package/dist/src/core/types.js.map +1 -0
  21. package/dist/src/{utils.d.ts → core/utils.d.ts} +2 -2
  22. package/dist/src/core/utils.d.ts.map +1 -0
  23. package/dist/src/{utils.js → core/utils.js} +3 -1
  24. package/dist/src/core/utils.js.map +1 -0
  25. package/dist/src/events/event-bus.d.ts +3 -3
  26. package/dist/src/events/event-bus.d.ts.map +1 -1
  27. package/dist/src/events/event-bus.js +1 -1
  28. package/dist/src/events/event-bus.js.map +1 -1
  29. package/dist/src/events/interfaces.d.ts +1 -1
  30. package/dist/src/events/interfaces.d.ts.map +1 -1
  31. package/dist/src/executor/interfaces.d.ts +2 -2
  32. package/dist/src/executor/interfaces.d.ts.map +1 -1
  33. package/dist/src/executor/simple-job-executor-manager.js +9 -9
  34. package/dist/src/executor/simple-job-executor-manager.js.map +1 -1
  35. package/dist/src/executor/simple-job-executor.d.ts.map +1 -1
  36. package/dist/src/executor/simple-job-executor.js.map +1 -1
  37. package/dist/src/executor/types.d.ts +1 -1
  38. package/dist/src/executor/types.d.ts.map +1 -1
  39. package/dist/src/index.d.ts +9 -2
  40. package/dist/src/index.d.ts.map +1 -1
  41. package/dist/src/index.js +8 -1
  42. package/dist/src/index.js.map +1 -1
  43. package/dist/src/queue/interfaces.d.ts +20 -5
  44. package/dist/src/queue/interfaces.d.ts.map +1 -1
  45. package/dist/src/queue/job-execution-handle.d.ts +24 -0
  46. package/dist/src/queue/job-execution-handle.d.ts.map +1 -0
  47. package/dist/src/queue/job-execution-handle.js +62 -0
  48. package/dist/src/queue/job-execution-handle.js.map +1 -0
  49. package/dist/src/queue/queue.d.ts +24 -5
  50. package/dist/src/queue/queue.d.ts.map +1 -1
  51. package/dist/src/queue/queue.js +128 -46
  52. package/dist/src/queue/queue.js.map +1 -1
  53. package/dist/src/queue/types.d.ts +21 -0
  54. package/dist/src/queue/types.d.ts.map +1 -1
  55. package/dist/src/queue/types.js +12 -0
  56. package/dist/src/queue/types.js.map +1 -1
  57. package/dist/src/shared/awaiter.d.ts +32 -0
  58. package/dist/src/shared/awaiter.d.ts.map +1 -0
  59. package/dist/src/shared/awaiter.js +132 -0
  60. package/dist/src/shared/awaiter.js.map +1 -0
  61. package/dist/src/shared/factories.d.ts +1 -1
  62. package/dist/src/shared/factories.d.ts.map +1 -1
  63. package/dist/src/shared/types.d.ts +3 -0
  64. package/dist/src/shared/types.d.ts.map +1 -1
  65. package/dist/src/shared/types.js.map +1 -1
  66. package/dist/src/signer/passthrough-signer.d.ts +6 -0
  67. package/dist/src/signer/passthrough-signer.d.ts.map +1 -0
  68. package/dist/src/signer/passthrough-signer.js +6 -0
  69. package/dist/src/signer/passthrough-signer.js.map +1 -0
  70. package/dist/src/signer/types.d.ts +15 -0
  71. package/dist/src/signer/types.d.ts.map +1 -0
  72. package/dist/src/signer/types.js +2 -0
  73. package/dist/src/signer/types.js.map +1 -0
  74. package/dist/src/subs/default-error-handler.d.ts +13 -0
  75. package/dist/src/subs/default-error-handler.d.ts.map +1 -0
  76. package/dist/src/subs/default-error-handler.js +27 -0
  77. package/dist/src/subs/default-error-handler.js.map +1 -0
  78. package/dist/src/subs/react-subscription-manager.d.ts +45 -0
  79. package/dist/src/subs/react-subscription-manager.d.ts.map +1 -0
  80. package/dist/src/subs/react-subscription-manager.js +185 -0
  81. package/dist/src/subs/react-subscription-manager.js.map +1 -0
  82. package/dist/src/subs/types.d.ts +64 -0
  83. package/dist/src/subs/types.d.ts.map +1 -0
  84. package/dist/src/subs/types.js +2 -0
  85. package/dist/src/subs/types.js.map +1 -0
  86. package/package.json +6 -6
  87. package/dist/bench/end-to-end-flow.bench.d.ts +0 -2
  88. package/dist/bench/end-to-end-flow.bench.d.ts.map +0 -1
  89. package/dist/bench/end-to-end-flow.bench.js +0 -284
  90. package/dist/bench/end-to-end-flow.bench.js.map +0 -1
  91. package/dist/bench/event-bus.bench.d.ts +0 -2
  92. package/dist/bench/event-bus.bench.d.ts.map +0 -1
  93. package/dist/bench/event-bus.bench.js +0 -238
  94. package/dist/bench/event-bus.bench.js.map +0 -1
  95. package/dist/bench/queue-only.bench.d.ts +0 -2
  96. package/dist/bench/queue-only.bench.d.ts.map +0 -1
  97. package/dist/bench/queue-only.bench.js +0 -46
  98. package/dist/bench/queue-only.bench.js.map +0 -1
  99. package/dist/bench/reactor-throughput.bench.d.ts +0 -2
  100. package/dist/bench/reactor-throughput.bench.d.ts.map +0 -1
  101. package/dist/bench/reactor-throughput.bench.js +0 -164
  102. package/dist/bench/reactor-throughput.bench.js.map +0 -1
  103. package/dist/src/interfaces/reactor.d.ts.map +0 -1
  104. package/dist/src/interfaces/reactor.js +0 -2
  105. package/dist/src/interfaces/reactor.js.map +0 -1
  106. package/dist/src/reactor.d.ts.map +0 -1
  107. package/dist/src/reactor.js.map +0 -1
  108. package/dist/src/utils.d.ts.map +0 -1
  109. package/dist/src/utils.js.map +0 -1
  110. package/dist/test/event-bus.test.d.ts +0 -2
  111. package/dist/test/event-bus.test.d.ts.map +0 -1
  112. package/dist/test/event-bus.test.js +0 -532
  113. package/dist/test/event-bus.test.js.map +0 -1
  114. package/dist/test/executor-integration.test.d.ts +0 -2
  115. package/dist/test/executor-integration.test.d.ts.map +0 -1
  116. package/dist/test/executor-integration.test.js +0 -290
  117. package/dist/test/executor-integration.test.js.map +0 -1
  118. package/dist/test/factories.d.ts +0 -131
  119. package/dist/test/factories.d.ts.map +0 -1
  120. package/dist/test/factories.js +0 -347
  121. package/dist/test/factories.js.map +0 -1
  122. package/dist/test/queue.test.d.ts +0 -2
  123. package/dist/test/queue.test.d.ts.map +0 -1
  124. package/dist/test/queue.test.js +0 -587
  125. package/dist/test/queue.test.js.map +0 -1
  126. package/dist/test/reactor-queue.test.d.ts +0 -2
  127. package/dist/test/reactor-queue.test.d.ts.map +0 -1
  128. package/dist/test/reactor-queue.test.js +0 -328
  129. package/dist/test/reactor-queue.test.js.map +0 -1
  130. package/dist/test/reactor-read.test.d.ts +0 -2
  131. package/dist/test/reactor-read.test.d.ts.map +0 -1
  132. package/dist/test/reactor-read.test.js +0 -355
  133. package/dist/test/reactor-read.test.js.map +0 -1
  134. package/dist/test/registry.test.d.ts +0 -2
  135. package/dist/test/registry.test.d.ts.map +0 -1
  136. package/dist/test/registry.test.js +0 -182
  137. package/dist/test/registry.test.js.map +0 -1
  138. package/dist/test/simple-job-executor-manager.test.d.ts +0 -2
  139. package/dist/test/simple-job-executor-manager.test.d.ts.map +0 -1
  140. package/dist/test/simple-job-executor-manager.test.js +0 -132
  141. package/dist/test/simple-job-executor-manager.test.js.map +0 -1
  142. package/dist/test/simple-job-executor.test.d.ts +0 -2
  143. package/dist/test/simple-job-executor.test.d.ts.map +0 -1
  144. package/dist/test/simple-job-executor.test.js +0 -139
  145. package/dist/test/simple-job-executor.test.js.map +0 -1
  146. package/dist/test/utils.test.d.ts +0 -2
  147. package/dist/test/utils.test.d.ts.map +0 -1
  148. package/dist/test/utils.test.js +0 -66
  149. package/dist/test/utils.test.js.map +0 -1
  150. package/dist/tsconfig.tsbuildinfo +0 -1
  151. package/dist/vitest.config.d.ts +0 -3
  152. package/dist/vitest.config.d.ts.map +0 -1
  153. package/dist/vitest.config.js +0 -11
  154. package/dist/vitest.config.js.map +0 -1
@@ -1,587 +0,0 @@
1
- import { beforeEach, describe, expect, it } from "vitest";
2
- import { InMemoryQueue } from "../src/queue/queue.js";
3
- import { QueueEventTypes, } from "../src/queue/types.js";
4
- import { createTestJob, createMockEventBus, createTestOperation, createJobWithDependencies, createJobDependencyChain, } from "./factories.js";
5
- describe("InMemoryQueue", () => {
6
- let queue;
7
- let eventBus;
8
- let mockEventBusEmit;
9
- beforeEach(() => {
10
- const mocks = createMockEventBus();
11
- eventBus = mocks.eventBus;
12
- mockEventBusEmit = mocks.mockEmit;
13
- queue = new InMemoryQueue(eventBus);
14
- });
15
- describe("enqueue", () => {
16
- it("should add a job to the queue", async () => {
17
- const job = createTestJob();
18
- await queue.enqueue(job);
19
- const size = await queue.size(job.documentId, job.scope, job.branch);
20
- expect(size).toBe(1);
21
- });
22
- it("should emit a jobAvailable event when a job is enqueued", async () => {
23
- const job = createTestJob();
24
- await queue.enqueue(job);
25
- expect(mockEventBusEmit).toHaveBeenCalledWith(QueueEventTypes.JOB_AVAILABLE, {
26
- documentId: job.documentId,
27
- scope: job.scope,
28
- branch: job.branch,
29
- jobId: job.id,
30
- });
31
- });
32
- it("should organize jobs by documentId, scope, and branch", async () => {
33
- const job1 = createTestJob({ id: "job-1", documentId: "doc-1" });
34
- const job2 = createTestJob({ id: "job-2", documentId: "doc-2" });
35
- const job3 = createTestJob({
36
- id: "job-3",
37
- documentId: "doc-1",
38
- scope: "local",
39
- });
40
- await queue.enqueue(job1);
41
- await queue.enqueue(job2);
42
- await queue.enqueue(job3);
43
- expect(await queue.size("doc-1", "global", "main")).toBe(1);
44
- expect(await queue.size("doc-2", "global", "main")).toBe(1);
45
- expect(await queue.size("doc-1", "local", "main")).toBe(1);
46
- });
47
- it("should maintain FIFO order within the same queue", async () => {
48
- const job1 = createTestJob({ id: "job-1" });
49
- const job2 = createTestJob({ id: "job-2" });
50
- const job3 = createTestJob({ id: "job-3" });
51
- await queue.enqueue(job1);
52
- await queue.enqueue(job2);
53
- await queue.enqueue(job3);
54
- const dequeuedJob1 = await queue.dequeue(job1.documentId, job1.scope, job1.branch);
55
- const dequeuedJob2 = await queue.dequeue(job1.documentId, job1.scope, job1.branch);
56
- const dequeuedJob3 = await queue.dequeue(job1.documentId, job1.scope, job1.branch);
57
- expect(dequeuedJob1?.id).toBe("job-1");
58
- expect(dequeuedJob2?.id).toBe("job-2");
59
- expect(dequeuedJob3?.id).toBe("job-3");
60
- });
61
- });
62
- describe("dequeue", () => {
63
- it("should return null when queue is empty", async () => {
64
- const job = await queue.dequeue("doc-1", "global", "main");
65
- expect(job).toBeNull();
66
- });
67
- it("should return and remove the first job from the queue", async () => {
68
- const testJob = createTestJob();
69
- await queue.enqueue(testJob);
70
- const dequeuedJob = await queue.dequeue(testJob.documentId, testJob.scope, testJob.branch);
71
- expect(dequeuedJob).toEqual(testJob);
72
- expect(await queue.size(testJob.documentId, testJob.scope, testJob.branch)).toBe(0);
73
- });
74
- it("should only dequeue from the specified document/scope/branch", async () => {
75
- const job1 = createTestJob({ id: "job-1", documentId: "doc-1" });
76
- const job2 = createTestJob({ id: "job-2", documentId: "doc-2" });
77
- await queue.enqueue(job1);
78
- await queue.enqueue(job2);
79
- const dequeuedJob = await queue.dequeue("doc-1", "global", "main");
80
- expect(dequeuedJob?.id).toBe("job-1");
81
- expect(await queue.size("doc-2", "global", "main")).toBe(1);
82
- });
83
- it("should clean up empty queues after dequeuing", async () => {
84
- const job = createTestJob();
85
- await queue.enqueue(job);
86
- await queue.dequeue(job.documentId, job.scope, job.branch);
87
- // Verify queue is cleaned up by checking total size
88
- expect(await queue.totalSize()).toBe(0);
89
- });
90
- });
91
- describe("dequeueNext", () => {
92
- it("should return null when no jobs are available", async () => {
93
- const job = await queue.dequeueNext();
94
- expect(job).toBeNull();
95
- });
96
- it("should return a job from any available queue", async () => {
97
- const job1 = createTestJob({ id: "job-1", documentId: "doc-1" });
98
- const job2 = createTestJob({ id: "job-2", documentId: "doc-2" });
99
- await queue.enqueue(job1);
100
- await queue.enqueue(job2);
101
- const dequeuedJob = await queue.dequeueNext();
102
- expect(dequeuedJob).toBeDefined();
103
- expect([job1.id, job2.id]).toContain(dequeuedJob?.id);
104
- expect(await queue.totalSize()).toBe(1);
105
- });
106
- it("should clean up empty queues after dequeuing", async () => {
107
- const job = createTestJob();
108
- await queue.enqueue(job);
109
- await queue.dequeueNext();
110
- expect(await queue.totalSize()).toBe(0);
111
- });
112
- });
113
- describe("size", () => {
114
- it("should return 0 for non-existent queue", async () => {
115
- const size = await queue.size("doc-1", "global", "main");
116
- expect(size).toBe(0);
117
- });
118
- it("should return correct size for existing queue", async () => {
119
- const job1 = createTestJob({ id: "job-1" });
120
- const job2 = createTestJob({ id: "job-2" });
121
- await queue.enqueue(job1);
122
- await queue.enqueue(job2);
123
- const size = await queue.size(job1.documentId, job1.scope, job1.branch);
124
- expect(size).toBe(2);
125
- });
126
- it("should return size for specific queue only", async () => {
127
- const job1 = createTestJob({ id: "job-1", documentId: "doc-1" });
128
- const job2 = createTestJob({ id: "job-2", documentId: "doc-2" });
129
- await queue.enqueue(job1);
130
- await queue.enqueue(job2);
131
- expect(await queue.size("doc-1", "global", "main")).toBe(1);
132
- expect(await queue.size("doc-2", "global", "main")).toBe(1);
133
- });
134
- });
135
- describe("totalSize", () => {
136
- it("should return 0 when no jobs are queued", async () => {
137
- const totalSize = await queue.totalSize();
138
- expect(totalSize).toBe(0);
139
- });
140
- it("should return total count across all queues", async () => {
141
- const job1 = createTestJob({ id: "job-1", documentId: "doc-1" });
142
- const job2 = createTestJob({ id: "job-2", documentId: "doc-2" });
143
- const job3 = createTestJob({
144
- id: "job-3",
145
- documentId: "doc-1",
146
- scope: "local",
147
- });
148
- await queue.enqueue(job1);
149
- await queue.enqueue(job2);
150
- await queue.enqueue(job3);
151
- const totalSize = await queue.totalSize();
152
- expect(totalSize).toBe(3);
153
- });
154
- });
155
- describe("remove", () => {
156
- it("should return false when job does not exist", async () => {
157
- const removed = await queue.remove("non-existent-job");
158
- expect(removed).toBe(false);
159
- });
160
- it("should remove and return true when job exists", async () => {
161
- const job = createTestJob();
162
- await queue.enqueue(job);
163
- const removed = await queue.remove(job.id);
164
- expect(removed).toBe(true);
165
- expect(await queue.size(job.documentId, job.scope, job.branch)).toBe(0);
166
- });
167
- it("should remove job from middle of queue", async () => {
168
- const job1 = createTestJob({ id: "job-1" });
169
- const job2 = createTestJob({ id: "job-2" });
170
- const job3 = createTestJob({ id: "job-3" });
171
- await queue.enqueue(job1);
172
- await queue.enqueue(job2);
173
- await queue.enqueue(job3);
174
- const removed = await queue.remove(job2.id);
175
- expect(removed).toBe(true);
176
- expect(await queue.size(job1.documentId, job1.scope, job1.branch)).toBe(2);
177
- // Verify correct jobs remain
178
- const dequeuedJob1 = await queue.dequeue(job1.documentId, job1.scope, job1.branch);
179
- const dequeuedJob2 = await queue.dequeue(job1.documentId, job1.scope, job1.branch);
180
- expect(dequeuedJob1?.id).toBe("job-1");
181
- expect(dequeuedJob2?.id).toBe("job-3");
182
- });
183
- it("should clean up empty queue after removing last job", async () => {
184
- const job = createTestJob();
185
- await queue.enqueue(job);
186
- await queue.remove(job.id);
187
- expect(await queue.totalSize()).toBe(0);
188
- });
189
- it("should handle orphaned job index entries gracefully", async () => {
190
- const job = createTestJob();
191
- await queue.enqueue(job);
192
- // Manually corrupt the state to simulate orphaned index
193
- const queueInstance = queue;
194
- // @ts-ignore - accessing private property for testing
195
- queueInstance.queues.clear();
196
- const removed = await queue.remove(job.id);
197
- expect(removed).toBe(false);
198
- });
199
- });
200
- describe("clear", () => {
201
- it("should clear specific queue", async () => {
202
- const job1 = createTestJob({ id: "job-1", documentId: "doc-1" });
203
- const job2 = createTestJob({ id: "job-2", documentId: "doc-2" });
204
- await queue.enqueue(job1);
205
- await queue.enqueue(job2);
206
- await queue.clear("doc-1", "global", "main");
207
- expect(await queue.size("doc-1", "global", "main")).toBe(0);
208
- expect(await queue.size("doc-2", "global", "main")).toBe(1);
209
- });
210
- it("should handle clearing non-existent queue", async () => {
211
- await expect(queue.clear("non-existent", "global", "main")).resolves.not.toThrow();
212
- });
213
- it("should clean up job indices when clearing", async () => {
214
- const job1 = createTestJob({ id: "job-1" });
215
- const job2 = createTestJob({ id: "job-2" });
216
- await queue.enqueue(job1);
217
- await queue.enqueue(job2);
218
- await queue.clear(job1.documentId, job1.scope, job1.branch);
219
- // Verify jobs can't be removed (they're no longer indexed)
220
- expect(await queue.remove(job1.id)).toBe(false);
221
- expect(await queue.remove(job2.id)).toBe(false);
222
- });
223
- });
224
- describe("clearAll", () => {
225
- it("should clear all queues", async () => {
226
- const job1 = createTestJob({ id: "job-1", documentId: "doc-1" });
227
- const job2 = createTestJob({ id: "job-2", documentId: "doc-2" });
228
- const job3 = createTestJob({
229
- id: "job-3",
230
- documentId: "doc-1",
231
- scope: "local",
232
- });
233
- await queue.enqueue(job1);
234
- await queue.enqueue(job2);
235
- await queue.enqueue(job3);
236
- await queue.clearAll();
237
- expect(await queue.totalSize()).toBe(0);
238
- expect(await queue.size("doc-1", "global", "main")).toBe(0);
239
- expect(await queue.size("doc-2", "global", "main")).toBe(0);
240
- expect(await queue.size("doc-1", "local", "main")).toBe(0);
241
- });
242
- it("should clean up all job indices", async () => {
243
- const job1 = createTestJob({ id: "job-1" });
244
- const job2 = createTestJob({ id: "job-2" });
245
- await queue.enqueue(job1);
246
- await queue.enqueue(job2);
247
- await queue.clearAll();
248
- // Verify jobs can't be removed (they're no longer indexed)
249
- expect(await queue.remove(job1.id)).toBe(false);
250
- expect(await queue.remove(job2.id)).toBe(false);
251
- });
252
- it("should handle clearing when already empty", async () => {
253
- await expect(queue.clearAll()).resolves.not.toThrow();
254
- expect(await queue.totalSize()).toBe(0);
255
- });
256
- });
257
- describe("event bus integration", () => {
258
- it("should emit events with correct data structure", async () => {
259
- const job = createTestJob({
260
- id: "test-job-id",
261
- documentId: "test-doc-id",
262
- scope: "test-scope",
263
- branch: "test-branch",
264
- });
265
- await queue.enqueue(job);
266
- expect(mockEventBusEmit).toHaveBeenCalledWith(QueueEventTypes.JOB_AVAILABLE, {
267
- documentId: "test-doc-id",
268
- scope: "test-scope",
269
- branch: "test-branch",
270
- jobId: "test-job-id",
271
- });
272
- });
273
- it("should handle event bus errors gracefully", async () => {
274
- mockEventBusEmit.mockRejectedValue(new Error("Event bus error"));
275
- const job = createTestJob();
276
- await expect(queue.enqueue(job)).rejects.toThrow("Event bus error");
277
- });
278
- it("should emit event for each job enqueued", async () => {
279
- const job1 = createTestJob({ id: "job-1" });
280
- const job2 = createTestJob({ id: "job-2" });
281
- await queue.enqueue(job1);
282
- await queue.enqueue(job2);
283
- expect(mockEventBusEmit).toHaveBeenCalledTimes(2);
284
- });
285
- });
286
- describe("queue key generation", () => {
287
- it("should create unique keys for different document/scope/branch combinations", async () => {
288
- const job1 = createTestJob({
289
- id: "job-1",
290
- documentId: "doc-1",
291
- scope: "global",
292
- branch: "main",
293
- });
294
- const job2 = createTestJob({
295
- id: "job-2",
296
- documentId: "doc-1",
297
- scope: "global",
298
- branch: "feature",
299
- });
300
- const job3 = createTestJob({
301
- id: "job-3",
302
- documentId: "doc-1",
303
- scope: "local",
304
- branch: "main",
305
- });
306
- const job4 = createTestJob({
307
- id: "job-4",
308
- documentId: "doc-2",
309
- scope: "global",
310
- branch: "main",
311
- });
312
- await queue.enqueue(job1);
313
- await queue.enqueue(job2);
314
- await queue.enqueue(job3);
315
- await queue.enqueue(job4);
316
- expect(await queue.size("doc-1", "global", "main")).toBe(1);
317
- expect(await queue.size("doc-1", "global", "feature")).toBe(1);
318
- expect(await queue.size("doc-1", "local", "main")).toBe(1);
319
- expect(await queue.size("doc-2", "global", "main")).toBe(1);
320
- });
321
- it("should handle special characters in identifiers", async () => {
322
- const job = createTestJob({
323
- documentId: "doc:with:colons",
324
- scope: "scope-with-dashes",
325
- branch: "branch_with_underscores",
326
- });
327
- await queue.enqueue(job);
328
- expect(await queue.size("doc:with:colons", "scope-with-dashes", "branch_with_underscores")).toBe(1);
329
- });
330
- });
331
- describe("dependency management", () => {
332
- it("should dequeue job with no dependencies immediately", async () => {
333
- const job = createTestJob({ id: "job-1", queueHint: [] });
334
- await queue.enqueue(job);
335
- const dequeuedJob = await queue.dequeue(job.documentId, job.scope, job.branch);
336
- expect(dequeuedJob?.id).toBe("job-1");
337
- });
338
- it("should block job with unmet dependencies", async () => {
339
- const job1 = createTestJob({ id: "job-1", queueHint: ["job-0"] });
340
- await queue.enqueue(job1);
341
- const dequeuedJob = await queue.dequeue(job1.documentId, job1.scope, job1.branch);
342
- expect(dequeuedJob).toBeNull();
343
- expect(await queue.size(job1.documentId, job1.scope, job1.branch)).toBe(1);
344
- });
345
- it("should dequeue job after dependencies are completed", async () => {
346
- const job1 = createTestJob({ id: "job-1", queueHint: [] });
347
- const job2 = createTestJob({ id: "job-2", queueHint: ["job-1"] });
348
- await queue.enqueue(job1);
349
- await queue.enqueue(job2);
350
- // First job should be dequeued
351
- const dequeuedJob1 = await queue.dequeue(job1.documentId, job1.scope, job1.branch);
352
- expect(dequeuedJob1?.id).toBe("job-1");
353
- // Second job should be blocked
354
- const blockedJob = await queue.dequeue(job2.documentId, job2.scope, job2.branch);
355
- expect(blockedJob).toBeNull();
356
- // Complete first job
357
- await queue.completeJob("job-1");
358
- // Now second job should be available
359
- const dequeuedJob2 = await queue.dequeue(job2.documentId, job2.scope, job2.branch);
360
- expect(dequeuedJob2?.id).toBe("job-2");
361
- });
362
- it("should handle multiple dependencies", async () => {
363
- const job1 = createTestJob({ id: "job-1", queueHint: [] });
364
- const job2 = createTestJob({ id: "job-2", queueHint: [] });
365
- const job3 = createTestJob({
366
- id: "job-3",
367
- queueHint: ["job-1", "job-2"],
368
- });
369
- await queue.enqueue(job1);
370
- await queue.enqueue(job2);
371
- await queue.enqueue(job3);
372
- // Dequeue and complete first job
373
- const dequeuedJob1 = await queue.dequeue(job1.documentId, job1.scope, job1.branch);
374
- expect(dequeuedJob1?.id).toBe("job-1");
375
- await queue.completeJob("job-1");
376
- // Next dequeue should return job-2 (not blocked), not job-3 (still blocked)
377
- const nextJob = await queue.dequeue(job1.documentId, job1.scope, job1.branch);
378
- expect(nextJob?.id).toBe("job-2");
379
- await queue.completeJob("job-2");
380
- // Now job 3 should be available
381
- const dequeuedJob3 = await queue.dequeue(job3.documentId, job3.scope, job3.branch);
382
- expect(dequeuedJob3?.id).toBe("job-3");
383
- });
384
- it("should handle dependency chains", async () => {
385
- const jobs = createJobDependencyChain(4);
386
- for (const job of jobs) {
387
- await queue.enqueue(job);
388
- }
389
- // Process in order
390
- const d1 = await queue.dequeue(jobs[0].documentId, jobs[0].scope, jobs[0].branch);
391
- expect(d1?.id).toBe("job-1");
392
- // Others should be blocked
393
- expect(await queue.dequeue(jobs[1].documentId, jobs[1].scope, jobs[1].branch)).toBeNull();
394
- expect(await queue.dequeue(jobs[2].documentId, jobs[2].scope, jobs[2].branch)).toBeNull();
395
- expect(await queue.dequeue(jobs[3].documentId, jobs[3].scope, jobs[3].branch)).toBeNull();
396
- await queue.completeJob("job-1");
397
- const d2 = await queue.dequeue(jobs[1].documentId, jobs[1].scope, jobs[1].branch);
398
- expect(d2?.id).toBe("job-2");
399
- // job-3 and job-4 still blocked
400
- expect(await queue.dequeue(jobs[2].documentId, jobs[2].scope, jobs[2].branch)).toBeNull();
401
- expect(await queue.dequeue(jobs[3].documentId, jobs[3].scope, jobs[3].branch)).toBeNull();
402
- await queue.completeJob("job-2");
403
- const d3 = await queue.dequeue(jobs[2].documentId, jobs[2].scope, jobs[2].branch);
404
- expect(d3?.id).toBe("job-3");
405
- // job-4 still blocked
406
- expect(await queue.dequeue(jobs[3].documentId, jobs[3].scope, jobs[3].branch)).toBeNull();
407
- await queue.completeJob("job-3");
408
- const d4 = await queue.dequeue(jobs[3].documentId, jobs[3].scope, jobs[3].branch);
409
- expect(d4?.id).toBe("job-4");
410
- });
411
- it("should dequeue jobs out of order based on dependencies", async () => {
412
- const job1 = createTestJob({ id: "job-1", queueHint: ["job-0"] });
413
- const job2 = createTestJob({ id: "job-2", queueHint: [] });
414
- const job3 = createTestJob({ id: "job-3", queueHint: [] });
415
- await queue.enqueue(job1);
416
- await queue.enqueue(job2);
417
- await queue.enqueue(job3);
418
- // Job 1 is blocked, so job 2 should be dequeued
419
- const dequeuedJob = await queue.dequeue(job1.documentId, job1.scope, job1.branch);
420
- expect(dequeuedJob?.id).toBe("job-2");
421
- });
422
- it("should handle dependencies across different queues", async () => {
423
- const job1 = createTestJob({
424
- id: "job-1",
425
- documentId: "doc-1",
426
- queueHint: [],
427
- });
428
- const job2 = createTestJob({
429
- id: "job-2",
430
- documentId: "doc-2",
431
- queueHint: ["job-1"],
432
- });
433
- await queue.enqueue(job1);
434
- await queue.enqueue(job2);
435
- // Job 2 should be blocked even though it's in a different queue
436
- const blockedJob = await queue.dequeue("doc-2", "global", "main");
437
- expect(blockedJob).toBeNull();
438
- // Dequeue and complete job 1
439
- const dequeuedJob1 = await queue.dequeue("doc-1", "global", "main");
440
- expect(dequeuedJob1?.id).toBe("job-1");
441
- await queue.completeJob("job-1");
442
- // Now job 2 should be available
443
- const dequeuedJob2 = await queue.dequeue("doc-2", "global", "main");
444
- expect(dequeuedJob2?.id).toBe("job-2");
445
- });
446
- it("should work with dequeueNext respecting dependencies", async () => {
447
- const job1 = createTestJob({
448
- id: "job-1",
449
- documentId: "doc-1",
450
- queueHint: ["job-0"],
451
- });
452
- const job2 = createTestJob({
453
- id: "job-2",
454
- documentId: "doc-2",
455
- queueHint: [],
456
- });
457
- await queue.enqueue(job1);
458
- await queue.enqueue(job2);
459
- // Should dequeue job-2 since job-1 is blocked
460
- const dequeuedJob = await queue.dequeueNext();
461
- expect(dequeuedJob?.id).toBe("job-2");
462
- });
463
- it("should handle circular dependencies by blocking all involved jobs", async () => {
464
- const job1 = createJobWithDependencies("job-1", ["job-2"]);
465
- const job2 = createJobWithDependencies("job-2", ["job-1"]);
466
- await queue.enqueue(job1);
467
- await queue.enqueue(job2);
468
- // Both jobs should be blocked
469
- const dequeuedJob1 = await queue.dequeue(job1.documentId, job1.scope, job1.branch);
470
- expect(dequeuedJob1).toBeNull();
471
- const dequeuedJob2 = await queue.dequeue(job2.documentId, job2.scope, job2.branch);
472
- expect(dequeuedJob2).toBeNull();
473
- });
474
- it("should handle self-dependencies by blocking the job", async () => {
475
- const job = createJobWithDependencies("job-1", ["job-1"]);
476
- await queue.enqueue(job);
477
- const dequeuedJob = await queue.dequeue(job.documentId, job.scope, job.branch);
478
- expect(dequeuedJob).toBeNull();
479
- });
480
- it("should clear completed jobs tracking when clearAll is called", async () => {
481
- const job1 = createTestJob({ id: "job-1", queueHint: [] });
482
- const job2 = createTestJob({ id: "job-2", queueHint: ["job-1"] });
483
- await queue.enqueue(job1);
484
- // Complete job-1
485
- await queue.dequeue(job1.documentId, job1.scope, job1.branch);
486
- await queue.completeJob("job-1");
487
- // Clear all
488
- await queue.clearAll();
489
- // Re-enqueue job-2 - it should be blocked again since completed jobs were cleared
490
- await queue.enqueue(job2);
491
- const dequeuedJob = await queue.dequeue(job2.documentId, job2.scope, job2.branch);
492
- expect(dequeuedJob).toBeNull();
493
- });
494
- it("should handle already completed dependencies", async () => {
495
- // Complete a job that doesn't exist in queue
496
- await queue.completeJob("job-0");
497
- // Enqueue a job that depends on it
498
- const job1 = createJobWithDependencies("job-1", ["job-0"]);
499
- await queue.enqueue(job1);
500
- // Should be able to dequeue since dependency is already complete
501
- const dequeuedJob = await queue.dequeue(job1.documentId, job1.scope, job1.branch);
502
- expect(dequeuedJob?.id).toBe("job-1");
503
- });
504
- it("should handle mixed dependencies (some met, some unmet)", async () => {
505
- // Complete one dependency
506
- await queue.completeJob("job-0");
507
- // Enqueue a job with mixed dependencies
508
- const job = createTestJob({
509
- id: "job-3",
510
- queueHint: ["job-0", "job-1", "job-2"],
511
- });
512
- await queue.enqueue(job);
513
- // Should be blocked (job-1 and job-2 not complete)
514
- let dequeuedJob = await queue.dequeue(job.documentId, job.scope, job.branch);
515
- expect(dequeuedJob).toBeNull();
516
- // Complete remaining dependencies
517
- await queue.completeJob("job-1");
518
- await queue.completeJob("job-2");
519
- // Now should be available
520
- dequeuedJob = await queue.dequeue(job.documentId, job.scope, job.branch);
521
- expect(dequeuedJob?.id).toBe("job-3");
522
- });
523
- it("should handle failJob without marking as completed", async () => {
524
- const job1 = createTestJob({ id: "job-1", queueHint: [] });
525
- const job2 = createTestJob({ id: "job-2", queueHint: ["job-1"] });
526
- await queue.enqueue(job1);
527
- await queue.enqueue(job2);
528
- // Dequeue and fail job 1
529
- const d1 = await queue.dequeue(job1.documentId, job1.scope, job1.branch);
530
- expect(d1?.id).toBe("job-1");
531
- await queue.failJob("job-1", "Test error");
532
- // Job 2 should still be blocked since job 1 wasn't completed
533
- const dequeuedJob = await queue.dequeue(job2.documentId, job2.scope, job2.branch);
534
- expect(dequeuedJob).toBeNull();
535
- });
536
- });
537
- describe("job properties", () => {
538
- it("should preserve all job properties", async () => {
539
- const operation = createTestOperation({
540
- index: 42,
541
- timestampUtcMs: "2023-01-01T00:00:00.000Z",
542
- hash: "custom-hash",
543
- skip: 5,
544
- action: {
545
- id: "action-1",
546
- type: "custom-operation",
547
- timestampUtcMs: "2023-01-01T00:00:00.000Z",
548
- input: { custom: "input" },
549
- scope: "global",
550
- },
551
- error: "test error",
552
- id: "custom-op-id",
553
- });
554
- const job = createTestJob({
555
- id: "custom-job-id",
556
- documentId: "custom-doc-id",
557
- scope: "custom-scope",
558
- branch: "custom-branch",
559
- operation,
560
- createdAt: "2023-01-01T00:00:00.000Z",
561
- retryCount: 2,
562
- maxRetries: 5,
563
- });
564
- await queue.enqueue(job);
565
- const dequeuedJob = await queue.dequeue(job.documentId, job.scope, job.branch);
566
- expect(dequeuedJob).toEqual(job);
567
- });
568
- it("should handle jobs with optional properties", async () => {
569
- const job = {
570
- id: "minimal-job",
571
- documentId: "doc-1",
572
- scope: "global",
573
- branch: "main",
574
- operation: createTestOperation(),
575
- createdAt: new Date().toISOString(),
576
- queueHint: [],
577
- // retryCount and maxRetries are optional
578
- };
579
- await queue.enqueue(job);
580
- const dequeuedJob = await queue.dequeue(job.documentId, job.scope, job.branch);
581
- expect(dequeuedJob).toEqual(job);
582
- expect(dequeuedJob?.retryCount).toBeUndefined();
583
- expect(dequeuedJob?.maxRetries).toBeUndefined();
584
- });
585
- });
586
- });
587
- //# sourceMappingURL=queue.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"queue.test.js","sourceRoot":"","sources":["../../test/queue.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=reactor-queue.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"reactor-queue.test.d.ts","sourceRoot":"","sources":["../../test/reactor-queue.test.ts"],"names":[],"mappings":""}