@powerhousedao/reactor 4.1.0-dev.9 → 4.1.0-dev.91

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 (226) hide show
  1. package/dist/src/cache/buffer/ring-buffer.d.ts +37 -0
  2. package/dist/src/cache/buffer/ring-buffer.d.ts.map +1 -0
  3. package/dist/src/cache/buffer/ring-buffer.js +69 -0
  4. package/dist/src/cache/buffer/ring-buffer.js.map +1 -0
  5. package/dist/src/cache/kysely-write-cache.d.ts +133 -0
  6. package/dist/src/cache/kysely-write-cache.d.ts.map +1 -0
  7. package/dist/src/cache/kysely-write-cache.js +375 -0
  8. package/dist/src/cache/kysely-write-cache.js.map +1 -0
  9. package/dist/src/cache/lru/lru-tracker.d.ts +15 -0
  10. package/dist/src/cache/lru/lru-tracker.d.ts.map +1 -0
  11. package/dist/src/cache/lru/lru-tracker.js +96 -0
  12. package/dist/src/cache/lru/lru-tracker.js.map +1 -0
  13. package/dist/src/cache/types.d.ts +42 -0
  14. package/dist/src/cache/types.d.ts.map +1 -0
  15. package/dist/src/cache/types.js +2 -0
  16. package/dist/src/cache/types.js.map +1 -0
  17. package/dist/src/cache/write/interfaces.d.ts +83 -0
  18. package/dist/src/cache/write/interfaces.d.ts.map +1 -0
  19. package/dist/src/cache/write/interfaces.js +2 -0
  20. package/dist/src/cache/write/interfaces.js.map +1 -0
  21. package/dist/src/client/reactor-client.d.ts +103 -0
  22. package/dist/src/client/reactor-client.d.ts.map +1 -0
  23. package/dist/src/client/reactor-client.js +184 -0
  24. package/dist/src/client/reactor-client.js.map +1 -0
  25. package/dist/src/client/types.d.ts +213 -0
  26. package/dist/src/client/types.d.ts.map +1 -0
  27. package/dist/src/client/types.js +14 -0
  28. package/dist/src/client/types.js.map +1 -0
  29. package/dist/src/core/builder.d.ts +20 -0
  30. package/dist/src/core/builder.d.ts.map +1 -0
  31. package/dist/src/core/builder.js +47 -0
  32. package/dist/src/core/builder.js.map +1 -0
  33. package/dist/src/core/reactor.d.ts +92 -0
  34. package/dist/src/core/reactor.d.ts.map +1 -0
  35. package/dist/src/core/reactor.js +646 -0
  36. package/dist/src/core/reactor.js.map +1 -0
  37. package/dist/src/core/types.d.ts +121 -0
  38. package/dist/src/core/types.d.ts.map +1 -0
  39. package/dist/src/core/types.js +2 -0
  40. package/dist/src/core/types.js.map +1 -0
  41. package/dist/src/core/utils.d.ts +11 -0
  42. package/dist/src/core/utils.d.ts.map +1 -0
  43. package/dist/src/core/utils.js +31 -0
  44. package/dist/src/core/utils.js.map +1 -0
  45. package/dist/src/events/event-bus.d.ts +3 -3
  46. package/dist/src/events/event-bus.d.ts.map +1 -1
  47. package/dist/src/events/event-bus.js.map +1 -1
  48. package/dist/src/events/interfaces.d.ts +1 -1
  49. package/dist/src/events/interfaces.d.ts.map +1 -1
  50. package/dist/src/events/types.d.ts +15 -1
  51. package/dist/src/events/types.d.ts.map +1 -1
  52. package/dist/src/events/types.js +6 -0
  53. package/dist/src/events/types.js.map +1 -1
  54. package/dist/src/executor/interfaces.d.ts +31 -54
  55. package/dist/src/executor/interfaces.d.ts.map +1 -1
  56. package/dist/src/executor/simple-job-executor-manager.d.ts +31 -0
  57. package/dist/src/executor/simple-job-executor-manager.d.ts.map +1 -0
  58. package/dist/src/executor/simple-job-executor-manager.js +190 -0
  59. package/dist/src/executor/simple-job-executor-manager.js.map +1 -0
  60. package/dist/src/executor/simple-job-executor.d.ts +48 -0
  61. package/dist/src/executor/simple-job-executor.d.ts.map +1 -0
  62. package/dist/src/executor/simple-job-executor.js +488 -0
  63. package/dist/src/executor/simple-job-executor.js.map +1 -0
  64. package/dist/src/executor/types.d.ts +30 -8
  65. package/dist/src/executor/types.d.ts.map +1 -1
  66. package/dist/src/executor/types.js.map +1 -1
  67. package/dist/src/executor/util.d.ts +47 -0
  68. package/dist/src/executor/util.d.ts.map +1 -0
  69. package/dist/src/executor/util.js +113 -0
  70. package/dist/src/executor/util.js.map +1 -0
  71. package/dist/src/index.d.ts +30 -3
  72. package/dist/src/index.d.ts.map +1 -1
  73. package/dist/src/index.js +36 -2
  74. package/dist/src/index.js.map +1 -1
  75. package/dist/src/job-tracker/in-memory-job-tracker.d.ts +15 -0
  76. package/dist/src/job-tracker/in-memory-job-tracker.d.ts.map +1 -0
  77. package/dist/src/job-tracker/in-memory-job-tracker.js +78 -0
  78. package/dist/src/job-tracker/in-memory-job-tracker.js.map +1 -0
  79. package/dist/src/job-tracker/index.d.ts +3 -0
  80. package/dist/src/job-tracker/index.d.ts.map +1 -0
  81. package/dist/src/job-tracker/index.js +2 -0
  82. package/dist/src/job-tracker/index.js.map +1 -0
  83. package/dist/src/job-tracker/interfaces.d.ts +41 -0
  84. package/dist/src/job-tracker/interfaces.d.ts.map +1 -0
  85. package/dist/src/job-tracker/interfaces.js +2 -0
  86. package/dist/src/job-tracker/interfaces.js.map +1 -0
  87. package/dist/src/queue/interfaces.d.ts +45 -5
  88. package/dist/src/queue/interfaces.d.ts.map +1 -1
  89. package/dist/src/queue/job-execution-handle.d.ts +24 -0
  90. package/dist/src/queue/job-execution-handle.d.ts.map +1 -0
  91. package/dist/src/queue/job-execution-handle.js +62 -0
  92. package/dist/src/queue/job-execution-handle.js.map +1 -0
  93. package/dist/src/queue/queue.d.ts +54 -5
  94. package/dist/src/queue/queue.d.ts.map +1 -1
  95. package/dist/src/queue/queue.js +272 -36
  96. package/dist/src/queue/queue.js.map +1 -1
  97. package/dist/src/queue/types.d.ts +32 -5
  98. package/dist/src/queue/types.d.ts.map +1 -1
  99. package/dist/src/queue/types.js +12 -0
  100. package/dist/src/queue/types.js.map +1 -1
  101. package/dist/src/read-models/coordinator.d.ts +38 -0
  102. package/dist/src/read-models/coordinator.d.ts.map +1 -0
  103. package/dist/src/read-models/coordinator.js +62 -0
  104. package/dist/src/read-models/coordinator.js.map +1 -0
  105. package/dist/src/read-models/document-view.d.ts +20 -0
  106. package/dist/src/read-models/document-view.d.ts.map +1 -0
  107. package/dist/src/read-models/document-view.js +365 -0
  108. package/dist/src/read-models/document-view.js.map +1 -0
  109. package/dist/src/read-models/interfaces.d.ts +29 -0
  110. package/dist/src/read-models/interfaces.d.ts.map +1 -0
  111. package/dist/src/read-models/interfaces.js +2 -0
  112. package/dist/src/read-models/interfaces.js.map +1 -0
  113. package/dist/src/read-models/types.d.ts +46 -0
  114. package/dist/src/read-models/types.d.ts.map +1 -0
  115. package/dist/src/read-models/types.js +2 -0
  116. package/dist/src/read-models/types.js.map +1 -0
  117. package/dist/src/registry/implementation.d.ts +62 -0
  118. package/dist/src/registry/implementation.d.ts.map +1 -0
  119. package/dist/src/registry/implementation.js +96 -0
  120. package/dist/src/registry/implementation.js.map +1 -0
  121. package/dist/src/registry/index.d.ts +3 -0
  122. package/dist/src/registry/index.d.ts.map +1 -0
  123. package/dist/src/registry/index.js +2 -0
  124. package/dist/src/registry/index.js.map +1 -0
  125. package/dist/src/registry/interfaces.d.ts +39 -0
  126. package/dist/src/registry/interfaces.d.ts.map +1 -0
  127. package/dist/src/registry/interfaces.js +2 -0
  128. package/dist/src/registry/interfaces.js.map +1 -0
  129. package/dist/src/shared/awaiter.d.ts +32 -0
  130. package/dist/src/shared/awaiter.d.ts.map +1 -0
  131. package/dist/src/shared/awaiter.js +132 -0
  132. package/dist/src/shared/awaiter.js.map +1 -0
  133. package/dist/src/shared/errors.d.ts +17 -0
  134. package/dist/src/shared/errors.d.ts.map +1 -0
  135. package/dist/src/shared/errors.js +33 -0
  136. package/dist/src/shared/errors.js.map +1 -0
  137. package/dist/src/shared/factories.d.ts +16 -0
  138. package/dist/src/shared/factories.d.ts.map +1 -0
  139. package/dist/src/shared/factories.js +33 -0
  140. package/dist/src/shared/factories.js.map +1 -0
  141. package/dist/src/shared/types.d.ts +91 -19
  142. package/dist/src/shared/types.d.ts.map +1 -1
  143. package/dist/src/shared/types.js +35 -1
  144. package/dist/src/shared/types.js.map +1 -1
  145. package/dist/src/shared/utils.d.ts +3 -0
  146. package/dist/src/shared/utils.d.ts.map +1 -0
  147. package/dist/src/shared/utils.js +8 -0
  148. package/dist/src/shared/utils.js.map +1 -0
  149. package/dist/src/signer/passthrough-signer.d.ts +6 -0
  150. package/dist/src/signer/passthrough-signer.d.ts.map +1 -0
  151. package/dist/src/signer/passthrough-signer.js +6 -0
  152. package/dist/src/signer/passthrough-signer.js.map +1 -0
  153. package/dist/src/signer/types.d.ts +15 -0
  154. package/dist/src/signer/types.d.ts.map +1 -0
  155. package/dist/src/signer/types.js +2 -0
  156. package/dist/src/signer/types.js.map +1 -0
  157. package/dist/src/storage/interfaces.d.ts +121 -0
  158. package/dist/src/storage/interfaces.d.ts.map +1 -0
  159. package/dist/src/storage/interfaces.js +19 -0
  160. package/dist/src/storage/interfaces.js.map +1 -0
  161. package/dist/src/storage/kysely/keyframe-store.d.ts +15 -0
  162. package/dist/src/storage/kysely/keyframe-store.d.ts.map +1 -0
  163. package/dist/src/storage/kysely/keyframe-store.js +71 -0
  164. package/dist/src/storage/kysely/keyframe-store.js.map +1 -0
  165. package/dist/src/storage/kysely/store.d.ts +15 -0
  166. package/dist/src/storage/kysely/store.d.ts.map +1 -0
  167. package/dist/src/storage/kysely/store.js +196 -0
  168. package/dist/src/storage/kysely/store.js.map +1 -0
  169. package/dist/src/storage/kysely/types.d.ts +39 -0
  170. package/dist/src/storage/kysely/types.d.ts.map +1 -0
  171. package/dist/src/storage/kysely/types.js +2 -0
  172. package/dist/src/storage/kysely/types.js.map +1 -0
  173. package/dist/src/storage/txn.d.ts +15 -0
  174. package/dist/src/storage/txn.d.ts.map +1 -0
  175. package/dist/src/storage/txn.js +41 -0
  176. package/dist/src/storage/txn.js.map +1 -0
  177. package/dist/src/subs/default-error-handler.d.ts +13 -0
  178. package/dist/src/subs/default-error-handler.d.ts.map +1 -0
  179. package/dist/src/subs/default-error-handler.js +27 -0
  180. package/dist/src/subs/default-error-handler.js.map +1 -0
  181. package/dist/src/subs/react-subscription-manager.d.ts +45 -0
  182. package/dist/src/subs/react-subscription-manager.d.ts.map +1 -0
  183. package/dist/src/subs/react-subscription-manager.js +185 -0
  184. package/dist/src/subs/react-subscription-manager.js.map +1 -0
  185. package/dist/src/subs/types.d.ts +64 -0
  186. package/dist/src/subs/types.d.ts.map +1 -0
  187. package/dist/src/subs/types.js +2 -0
  188. package/dist/src/subs/types.js.map +1 -0
  189. package/dist/src/utils/reshuffle.d.ts +30 -0
  190. package/dist/src/utils/reshuffle.d.ts.map +1 -0
  191. package/dist/src/utils/reshuffle.js +47 -0
  192. package/dist/src/utils/reshuffle.js.map +1 -0
  193. package/package.json +18 -7
  194. package/dist/bench/end-to-end-flow.bench.d.ts +0 -2
  195. package/dist/bench/end-to-end-flow.bench.d.ts.map +0 -1
  196. package/dist/bench/end-to-end-flow.bench.js +0 -256
  197. package/dist/bench/end-to-end-flow.bench.js.map +0 -1
  198. package/dist/bench/event-bus.bench.d.ts +0 -2
  199. package/dist/bench/event-bus.bench.d.ts.map +0 -1
  200. package/dist/bench/event-bus.bench.js +0 -238
  201. package/dist/bench/event-bus.bench.js.map +0 -1
  202. package/dist/bench/queue-only.bench.d.ts +0 -2
  203. package/dist/bench/queue-only.bench.d.ts.map +0 -1
  204. package/dist/bench/queue-only.bench.js +0 -40
  205. package/dist/bench/queue-only.bench.js.map +0 -1
  206. package/dist/bench/reactor-throughput.bench.d.ts +0 -2
  207. package/dist/bench/reactor-throughput.bench.d.ts.map +0 -1
  208. package/dist/bench/reactor-throughput.bench.js +0 -137
  209. package/dist/bench/reactor-throughput.bench.js.map +0 -1
  210. package/dist/src/executor/job-executor.d.ts +0 -62
  211. package/dist/src/executor/job-executor.d.ts.map +0 -1
  212. package/dist/src/executor/job-executor.js +0 -325
  213. package/dist/src/executor/job-executor.js.map +0 -1
  214. package/dist/test/event-bus.test.d.ts +0 -2
  215. package/dist/test/event-bus.test.d.ts.map +0 -1
  216. package/dist/test/event-bus.test.js +0 -532
  217. package/dist/test/event-bus.test.js.map +0 -1
  218. package/dist/test/job-executor.test.d.ts +0 -2
  219. package/dist/test/job-executor.test.d.ts.map +0 -1
  220. package/dist/test/job-executor.test.js +0 -581
  221. package/dist/test/job-executor.test.js.map +0 -1
  222. package/dist/test/queue.test.d.ts +0 -2
  223. package/dist/test/queue.test.d.ts.map +0 -1
  224. package/dist/test/queue.test.js +0 -396
  225. package/dist/test/queue.test.js.map +0 -1
  226. package/dist/tsconfig.tsbuildinfo +0 -1
@@ -1,14 +1,22 @@
1
- import { IEventBus } from "../events/interfaces.js";
2
- import { IQueue } from "./interfaces.js";
3
- import { Job } from "./types.js";
1
+ import type { IEventBus } from "../events/interfaces.js";
2
+ import type { IQueue } from "./interfaces.js";
3
+ import type { IJobExecutionHandle, Job } from "./types.js";
4
4
  /**
5
5
  * In-memory implementation of the IQueue interface.
6
6
  * Organizes jobs by documentId, scope, and branch to ensure proper ordering.
7
+ * Ensures serial execution per document by tracking executing jobs.
8
+ * Implements dependency management through queue hints.
7
9
  */
8
10
  export declare class InMemoryQueue implements IQueue {
9
11
  private eventBus;
10
12
  private queues;
13
+ private jobIdToQueueKey;
14
+ private docIdToJobId;
15
+ private jobIdToDocId;
16
+ private completedJobs;
11
17
  private jobIndex;
18
+ private isBlocked;
19
+ private onDrainedCallback?;
12
20
  constructor(eventBus: IEventBus);
13
21
  /**
14
22
  * Creates a unique key for a document/scope/branch combination
@@ -18,13 +26,54 @@ export declare class InMemoryQueue implements IQueue {
18
26
  * Gets or creates a queue for the given key
19
27
  */
20
28
  private getQueue;
29
+ /**
30
+ * Check if a document has any jobs currently executing
31
+ */
32
+ private isDocumentExecuting;
33
+ /**
34
+ * Mark a job as executing for its document
35
+ */
36
+ private markJobExecuting;
37
+ /**
38
+ * Mark a job as no longer executing for its document
39
+ */
40
+ private markJobComplete;
41
+ /**
42
+ * Check if all dependencies for a job have been completed
43
+ */
44
+ private areDependenciesMet;
45
+ /**
46
+ * Get the next job that has all its dependencies met
47
+ */
48
+ private getNextJobWithMetDependencies;
21
49
  enqueue(job: Job): Promise<void>;
22
- dequeue(documentId: string, scope: string, branch: string): Promise<Job | null>;
23
- dequeueNext(): Promise<Job | null>;
50
+ dequeue(documentId: string, scope: string, branch: string, signal?: AbortSignal): Promise<IJobExecutionHandle | null>;
51
+ dequeueNext(signal?: AbortSignal): Promise<IJobExecutionHandle | null>;
24
52
  size(documentId: string, scope: string, branch: string): Promise<number>;
25
53
  totalSize(): Promise<number>;
26
54
  remove(jobId: string): Promise<boolean>;
27
55
  clear(documentId: string, scope: string, branch: string): Promise<void>;
28
56
  clearAll(): Promise<void>;
57
+ hasJobs(): Promise<boolean>;
58
+ completeJob(jobId: string): Promise<void>;
59
+ failJob(jobId: string, error?: string): Promise<void>;
60
+ retryJob(jobId: string, error?: string): Promise<void>;
61
+ /**
62
+ * Check if the queue is drained and call the callback if it is
63
+ */
64
+ private checkDrained;
65
+ /**
66
+ * Returns true if and only if all jobs have been resolved.
67
+ */
68
+ get isDrained(): boolean;
69
+ /**
70
+ * Blocks the queue from accepting new jobs.
71
+ * @param onDrained - Optional callback to call when the queue is drained
72
+ */
73
+ block(onDrained?: () => void): void;
74
+ /**
75
+ * Unblocks the queue from accepting new jobs.
76
+ */
77
+ unblock(): void;
29
78
  }
30
79
  //# sourceMappingURL=queue.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"queue.d.ts","sourceRoot":"","sources":["../../../src/queue/queue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzC,OAAO,EAAE,GAAG,EAAsC,MAAM,YAAY,CAAC;AAErE;;;GAGG;AACH,qBAAa,aAAc,YAAW,MAAM;IAI9B,OAAO,CAAC,QAAQ;IAH5B,OAAO,CAAC,MAAM,CAA4B;IAC1C,OAAO,CAAC,QAAQ,CAA6B;gBAEzB,QAAQ,EAAE,SAAS;IAEvC;;OAEG;IACH,OAAO,CAAC,cAAc;IAQtB;;OAEG;IACH,OAAO,CAAC,QAAQ;IASV,OAAO,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;IAqBhC,OAAO,CACX,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC;IAsBhB,WAAW,IAAI,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC;IAqBlC,IAAI,CACR,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,MAAM,CAAC;IAMZ,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC;IAQ5B,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAkCvC,KAAK,CACT,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,IAAI,CAAC;IAeV,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;CAOhC"}
1
+ {"version":3,"file":"queue.d.ts","sourceRoot":"","sources":["../../../src/queue/queue.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAE9C,OAAO,KAAK,EAAE,mBAAmB,EAAE,GAAG,EAAqB,MAAM,YAAY,CAAC;AAG9E;;;;;GAKG;AACH,qBAAa,aAAc,YAAW,MAAM;IAU9B,OAAO,CAAC,QAAQ;IAT5B,OAAO,CAAC,MAAM,CAA4B;IAC1C,OAAO,CAAC,eAAe,CAA6B;IACpD,OAAO,CAAC,YAAY,CAAkC;IACtD,OAAO,CAAC,YAAY,CAA6B;IACjD,OAAO,CAAC,aAAa,CAAqB;IAC1C,OAAO,CAAC,QAAQ,CAA0B;IAC1C,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,iBAAiB,CAAC,CAAa;gBAEnB,QAAQ,EAAE,SAAS;IAEvC;;OAEG;IACH,OAAO,CAAC,cAAc;IAQtB;;OAEG;IACH,OAAO,CAAC,QAAQ;IAShB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAK3B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAUxB;;OAEG;IACH,OAAO,CAAC,eAAe;IAWvB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAO1B;;OAEG;IACH,OAAO,CAAC,6BAA6B;IAS/B,OAAO,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;IA2BtC,OAAO,CACL,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC;IAiDtC,WAAW,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC;IAqDtE,IAAI,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAMxE,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC;IAQ5B,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAqCvC,KAAK,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAkBvE,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAYzB,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC;IAOrB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAsBzC,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA4BrD,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAoC5D;;OAEG;IACH,OAAO,CAAC,YAAY;IAQpB;;OAEG;IACH,IAAI,SAAS,IAAI,OAAO,CAUvB;IAED;;;OAGG;IACH,KAAK,CAAC,SAAS,CAAC,EAAE,MAAM,IAAI,GAAG,IAAI;IAQnC;;OAEG;IACH,OAAO,IAAI,IAAI;CAIhB"}
@@ -1,12 +1,21 @@
1
- import { QueueEventTypes } from "./types.js";
1
+ import { JobExecutionHandle } from "./job-execution-handle.js";
2
+ import { JobQueueState, QueueEventTypes } from "./types.js";
2
3
  /**
3
4
  * In-memory implementation of the IQueue interface.
4
5
  * Organizes jobs by documentId, scope, and branch to ensure proper ordering.
6
+ * Ensures serial execution per document by tracking executing jobs.
7
+ * Implements dependency management through queue hints.
5
8
  */
6
9
  export class InMemoryQueue {
7
10
  eventBus;
8
11
  queues = new Map();
9
- jobIndex = new Map(); // jobId -> queueKey mapping
12
+ jobIdToQueueKey = new Map();
13
+ docIdToJobId = new Map();
14
+ jobIdToDocId = new Map();
15
+ completedJobs = new Set();
16
+ jobIndex = new Map();
17
+ isBlocked = false;
18
+ onDrainedCallback;
10
19
  constructor(eventBus) {
11
20
  this.eventBus = eventBus;
12
21
  }
@@ -27,13 +36,70 @@ export class InMemoryQueue {
27
36
  }
28
37
  return queue;
29
38
  }
39
+ /**
40
+ * Check if a document has any jobs currently executing
41
+ */
42
+ isDocumentExecuting(documentId) {
43
+ const executingSet = this.docIdToJobId.get(documentId);
44
+ return executingSet ? executingSet.size > 0 : false;
45
+ }
46
+ /**
47
+ * Mark a job as executing for its document
48
+ */
49
+ markJobExecuting(job) {
50
+ let executingSet = this.docIdToJobId.get(job.documentId);
51
+ if (!executingSet) {
52
+ executingSet = new Set();
53
+ this.docIdToJobId.set(job.documentId, executingSet);
54
+ }
55
+ executingSet.add(job.id);
56
+ this.jobIdToDocId.set(job.id, job.documentId);
57
+ }
58
+ /**
59
+ * Mark a job as no longer executing for its document
60
+ */
61
+ markJobComplete(jobId, documentId) {
62
+ const executingSet = this.docIdToJobId.get(documentId);
63
+ if (executingSet) {
64
+ executingSet.delete(jobId);
65
+ if (executingSet.size === 0) {
66
+ this.docIdToJobId.delete(documentId);
67
+ }
68
+ }
69
+ this.jobIdToDocId.delete(jobId);
70
+ }
71
+ /**
72
+ * Check if all dependencies for a job have been completed
73
+ */
74
+ areDependenciesMet(job) {
75
+ if (job.queueHint.length === 0) {
76
+ return true;
77
+ }
78
+ return job.queueHint.every((depId) => this.completedJobs.has(depId));
79
+ }
80
+ /**
81
+ * Get the next job that has all its dependencies met
82
+ */
83
+ getNextJobWithMetDependencies(queue) {
84
+ for (const job of queue) {
85
+ if (this.areDependenciesMet(job)) {
86
+ return job;
87
+ }
88
+ }
89
+ return null;
90
+ }
30
91
  async enqueue(job) {
92
+ // Throw error if queue is blocked
93
+ if (this.isBlocked) {
94
+ throw new Error("Queue is blocked");
95
+ }
31
96
  const queueKey = this.createQueueKey(job.documentId, job.scope, job.branch);
32
97
  const queue = this.getQueue(queueKey);
33
98
  // Add job to the end of the queue (FIFO)
34
99
  queue.push(job);
35
- // Track job location for removal
36
- this.jobIndex.set(job.id, queueKey);
100
+ // Track job location for removal and dependency resolution
101
+ this.jobIdToQueueKey.set(job.id, queueKey);
102
+ this.jobIndex.set(job.id, job);
37
103
  // Emit job available event
38
104
  const eventData = {
39
105
  documentId: job.documentId,
@@ -43,94 +109,264 @@ export class InMemoryQueue {
43
109
  };
44
110
  await this.eventBus.emit(QueueEventTypes.JOB_AVAILABLE, eventData);
45
111
  }
46
- async dequeue(documentId, scope, branch) {
112
+ dequeue(documentId, scope, branch, signal) {
47
113
  const queueKey = this.createQueueKey(documentId, scope, branch);
48
114
  const queue = this.queues.get(queueKey);
115
+ if (signal?.aborted) {
116
+ return Promise.reject(new Error("Operation aborted"));
117
+ }
49
118
  if (!queue || queue.length === 0) {
50
- return null;
119
+ return Promise.resolve(null);
51
120
  }
52
- // Remove job from the front of the queue (FIFO)
53
- const job = queue.shift();
54
- // Remove from job index
55
- this.jobIndex.delete(job.id);
121
+ // Find the first job with met dependencies
122
+ const job = this.getNextJobWithMetDependencies(queue);
123
+ if (!job) {
124
+ return Promise.resolve(null);
125
+ }
126
+ // Remove job from queue
127
+ const jobIndex = queue.indexOf(job);
128
+ queue.splice(jobIndex, 1);
129
+ // Remove from queue tracking but keep in job index for retry
130
+ this.jobIdToQueueKey.delete(job.id);
131
+ // Mark this job as executing for its document
132
+ this.markJobExecuting(job);
56
133
  // Clean up empty queue
57
134
  if (queue.length === 0) {
58
135
  this.queues.delete(queueKey);
59
136
  }
60
- return job;
137
+ // Create and return the execution handle
138
+ const handle = new JobExecutionHandle(job, JobQueueState.READY, {
139
+ onStart: () => {
140
+ // Job is now running
141
+ },
142
+ onComplete: () => {
143
+ void this.completeJob(job.id);
144
+ },
145
+ onFail: (reason) => {
146
+ void this.failJob(job.id, reason);
147
+ },
148
+ });
149
+ return Promise.resolve(handle);
61
150
  }
62
- async dequeueNext() {
63
- // Find the first non-empty queue and dequeue from it
151
+ dequeueNext(signal) {
152
+ if (signal?.aborted) {
153
+ return Promise.reject(new Error("Operation aborted"));
154
+ }
155
+ // Find the first non-empty queue for a document that's not currently executing
64
156
  for (const [queueKey, queue] of this.queues.entries()) {
65
157
  if (queue.length > 0) {
66
- const job = queue.shift();
67
- // Remove from job index
68
- this.jobIndex.delete(job.id);
69
- // Clean up empty queue
70
- if (queue.length === 0) {
71
- this.queues.delete(queueKey);
158
+ // Find the first job with met dependencies
159
+ const job = this.getNextJobWithMetDependencies(queue);
160
+ if (!job) {
161
+ continue; // No job with met dependencies in this queue
162
+ }
163
+ // Only dequeue if the document is not currently executing jobs
164
+ if (!this.isDocumentExecuting(job.documentId)) {
165
+ // Remove job from queue
166
+ const jobIdx = queue.indexOf(job);
167
+ queue.splice(jobIdx, 1);
168
+ // Remove from queue tracking but keep in job index for retry
169
+ this.jobIdToQueueKey.delete(job.id);
170
+ // Keep job in jobIndex so we can retry it if needed
171
+ // Mark this job as executing for its document
172
+ this.markJobExecuting(job);
173
+ // Clean up empty queue
174
+ if (queue.length === 0) {
175
+ this.queues.delete(queueKey);
176
+ }
177
+ // Create and return the execution handle
178
+ const handle = new JobExecutionHandle(job, JobQueueState.READY, {
179
+ onStart: () => {
180
+ // Job is now running
181
+ },
182
+ onComplete: () => {
183
+ void this.completeJob(job.id);
184
+ },
185
+ onFail: (reason) => {
186
+ void this.failJob(job.id, reason);
187
+ },
188
+ });
189
+ return Promise.resolve(handle);
72
190
  }
73
- return job;
74
191
  }
75
192
  }
76
- return null;
193
+ return Promise.resolve(null);
77
194
  }
78
- async size(documentId, scope, branch) {
195
+ size(documentId, scope, branch) {
79
196
  const queueKey = this.createQueueKey(documentId, scope, branch);
80
197
  const queue = this.queues.get(queueKey);
81
- return queue ? queue.length : 0;
198
+ return Promise.resolve(queue ? queue.length : 0);
82
199
  }
83
- async totalSize() {
200
+ totalSize() {
84
201
  let total = 0;
85
202
  for (const queue of this.queues.values()) {
86
203
  total += queue.length;
87
204
  }
88
- return total;
205
+ return Promise.resolve(total);
89
206
  }
90
- async remove(jobId) {
91
- const queueKey = this.jobIndex.get(jobId);
207
+ remove(jobId) {
208
+ const queueKey = this.jobIdToQueueKey.get(jobId);
92
209
  if (!queueKey) {
93
- return false;
210
+ return Promise.resolve(false);
94
211
  }
95
212
  const queue = this.queues.get(queueKey);
96
213
  if (!queue) {
97
214
  // Clean up orphaned index entry
215
+ this.jobIdToQueueKey.delete(jobId);
98
216
  this.jobIndex.delete(jobId);
99
- return false;
217
+ return Promise.resolve(false);
100
218
  }
101
- const jobIndex = queue.findIndex((job) => job.id === jobId);
102
- if (jobIndex === -1) {
219
+ const jobIdx = queue.findIndex((job) => job.id === jobId);
220
+ if (jobIdx === -1) {
103
221
  // Clean up orphaned index entry
222
+ this.jobIdToQueueKey.delete(jobId);
104
223
  this.jobIndex.delete(jobId);
105
- return false;
224
+ return Promise.resolve(false);
106
225
  }
107
226
  // Remove job from queue
108
- queue.splice(jobIndex, 1);
227
+ queue.splice(jobIdx, 1);
109
228
  // Remove from job index
229
+ this.jobIdToQueueKey.delete(jobId);
110
230
  this.jobIndex.delete(jobId);
111
231
  // Clean up empty queue
112
232
  if (queue.length === 0) {
113
233
  this.queues.delete(queueKey);
114
234
  }
115
- return true;
235
+ return Promise.resolve(true);
116
236
  }
117
- async clear(documentId, scope, branch) {
237
+ clear(documentId, scope, branch) {
118
238
  const queueKey = this.createQueueKey(documentId, scope, branch);
119
239
  const queue = this.queues.get(queueKey);
120
240
  if (queue) {
121
241
  // Remove all jobs from the job index
122
242
  for (const job of queue) {
243
+ this.jobIdToQueueKey.delete(job.id);
123
244
  this.jobIndex.delete(job.id);
124
245
  }
125
246
  // Remove the queue
126
247
  this.queues.delete(queueKey);
127
248
  }
249
+ return Promise.resolve();
128
250
  }
129
- async clearAll() {
251
+ clearAll() {
130
252
  // Clear all job indices
253
+ this.jobIdToQueueKey.clear();
131
254
  this.jobIndex.clear();
255
+ this.completedJobs.clear();
132
256
  // Clear all queues
133
257
  this.queues.clear();
258
+ return Promise.resolve();
259
+ }
260
+ hasJobs() {
261
+ return Promise.resolve(this.queues.size > 0 &&
262
+ Array.from(this.queues.values()).some((q) => q.length > 0));
263
+ }
264
+ async completeJob(jobId) {
265
+ // Get the documentId for the executing job
266
+ const documentId = this.jobIdToDocId.get(jobId);
267
+ if (documentId) {
268
+ // Mark the job as no longer executing
269
+ this.markJobComplete(jobId, documentId);
270
+ }
271
+ // Track the job as completed for dependency resolution
272
+ this.completedJobs.add(jobId);
273
+ // Remove from job index
274
+ this.jobIndex.delete(jobId);
275
+ // For in-memory queue, completing just removes the job
276
+ // In a persistent queue, this would update the job status
277
+ await this.remove(jobId);
278
+ // Check if queue is now drained
279
+ this.checkDrained();
280
+ }
281
+ async failJob(jobId, error) {
282
+ // Get the documentId for the executing job
283
+ const documentId = this.jobIdToDocId.get(jobId);
284
+ if (documentId) {
285
+ // Mark the job as no longer executing
286
+ this.markJobComplete(jobId, documentId);
287
+ }
288
+ // update the job lastError and errorHistory
289
+ const job = this.jobIndex.get(jobId);
290
+ if (job) {
291
+ job.lastError = error;
292
+ if (error) {
293
+ job.errorHistory.push(error);
294
+ }
295
+ }
296
+ // Remove from job index
297
+ this.jobIndex.delete(jobId);
298
+ // For in-memory queue, failing just removes the job
299
+ // In a persistent queue, this would update the job status and store the error
300
+ await this.remove(jobId);
301
+ // Check if queue is now drained
302
+ this.checkDrained();
303
+ }
304
+ async retryJob(jobId, error) {
305
+ // Get the job from the index (it might be executing, not in queue)
306
+ const job = this.jobIndex.get(jobId);
307
+ if (!job) {
308
+ return;
309
+ }
310
+ // update the job lastError
311
+ job.lastError = error;
312
+ // Mark it as no longer executing if it was
313
+ const documentId = this.jobIdToDocId.get(jobId);
314
+ if (documentId) {
315
+ this.markJobComplete(jobId, documentId);
316
+ }
317
+ // Remove from indices
318
+ this.jobIndex.delete(jobId);
319
+ this.jobIdToQueueKey.delete(jobId);
320
+ // Add error to history
321
+ if (error) {
322
+ job.errorHistory.push(error);
323
+ }
324
+ // Update retry count
325
+ const updatedJob = {
326
+ ...job,
327
+ retryCount: (job.retryCount || 0) + 1,
328
+ lastError: error,
329
+ };
330
+ // Re-enqueue with updated retry count
331
+ await this.enqueue(updatedJob);
332
+ }
333
+ /**
334
+ * Check if the queue is drained and call the callback if it is
335
+ */
336
+ checkDrained() {
337
+ if (this.isDrained && this.onDrainedCallback) {
338
+ const callback = this.onDrainedCallback;
339
+ this.onDrainedCallback = undefined;
340
+ callback();
341
+ }
342
+ }
343
+ /**
344
+ * Returns true if and only if all jobs have been resolved.
345
+ */
346
+ get isDrained() {
347
+ // Queue is drained if there are no pending jobs and no executing jobs
348
+ const hasPendingJobs = this.queues.size > 0 &&
349
+ Array.from(this.queues.values()).some((q) => q.length > 0);
350
+ const hasExecutingJobs = this.docIdToJobId.size > 0 &&
351
+ Array.from(this.docIdToJobId.values()).some((set) => set.size > 0);
352
+ return !hasPendingJobs && !hasExecutingJobs;
353
+ }
354
+ /**
355
+ * Blocks the queue from accepting new jobs.
356
+ * @param onDrained - Optional callback to call when the queue is drained
357
+ */
358
+ block(onDrained) {
359
+ this.isBlocked = true;
360
+ this.onDrainedCallback = onDrained;
361
+ // Check if already drained
362
+ this.checkDrained();
363
+ }
364
+ /**
365
+ * Unblocks the queue from accepting new jobs.
366
+ */
367
+ unblock() {
368
+ this.isBlocked = false;
369
+ this.onDrainedCallback = undefined;
134
370
  }
135
371
  }
136
372
  //# sourceMappingURL=queue.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"queue.js","sourceRoot":"","sources":["../../../src/queue/queue.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"queue.js","sourceRoot":"","sources":["../../../src/queue/queue.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,25 @@
1
- import { Operation } from "#shared/types.js";
1
+ import type { Action } from "document-model";
2
+ /**
3
+ * State of a job in the queue
4
+ */
5
+ export declare enum JobQueueState {
6
+ UNKNOWN = -1,
7
+ PREPROCESSING = 0,
8
+ PENDING = 1,
9
+ READY = 2,
10
+ RUNNING = 3,
11
+ RESOLVED = 4
12
+ }
13
+ /**
14
+ * Interface for a job execution handle
15
+ */
16
+ export interface IJobExecutionHandle {
17
+ readonly job: Job;
18
+ readonly state: JobQueueState;
19
+ start(): void;
20
+ complete(): void;
21
+ fail(reason: string): void;
22
+ }
2
23
  /**
3
24
  * Represents a job to be executed by the job executor
4
25
  */
@@ -7,18 +28,24 @@ export type Job = {
7
28
  id: string;
8
29
  /** The document ID this job operates on */
9
30
  documentId: string;
10
- /** The scope of the operation */
31
+ /** The scope of the operations */
11
32
  scope: string;
12
- /** The branch of the operation */
33
+ /** The branch of the operations */
13
34
  branch: string;
14
- /** The operation to be executed */
15
- operation: Operation;
35
+ /** The actions to be executed (processed sequentially) */
36
+ actions: Action[];
16
37
  /** Timestamp when the job was created */
17
38
  createdAt: string;
39
+ /** The hint for the queue to use for ordering the job */
40
+ queueHint: string[];
18
41
  /** Number of retry attempts */
19
42
  retryCount?: number;
20
43
  /** Maximum number of retries allowed */
21
44
  maxRetries?: number;
45
+ /** Last error message if job failed */
46
+ lastError?: string;
47
+ /** History of all error messages from each attempt (ordered) */
48
+ errorHistory: string[];
22
49
  };
23
50
  /**
24
51
  * Event types for the queue system
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/queue/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAE7C;;GAEG;AACH,MAAM,MAAM,GAAG,GAAG;IAChB,oCAAoC;IACpC,EAAE,EAAE,MAAM,CAAC;IAEX,2CAA2C;IAC3C,UAAU,EAAE,MAAM,CAAC;IAEnB,iCAAiC;IACjC,KAAK,EAAE,MAAM,CAAC;IAEd,kCAAkC;IAClC,MAAM,EAAE,MAAM,CAAC;IAEf,mCAAmC;IACnC,SAAS,EAAE,SAAS,CAAC;IAErB,yCAAyC;IACzC,SAAS,EAAE,MAAM,CAAC;IAElB,+BAA+B;IAC/B,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB,wCAAwC;IACxC,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,eAAe;;CAElB,CAAC;AAEX;;GAEG;AACH,MAAM,MAAM,iBAAiB,GAAG;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/queue/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAE7C;;GAEG;AACH,oBAAY,aAAa;IACvB,OAAO,KAAK;IACZ,aAAa,IAAI;IACjB,OAAO,IAAI;IACX,KAAK,IAAI;IACT,OAAO,IAAI;IACX,QAAQ,IAAI;CACb;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC;IAClB,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC;IAE9B,KAAK,IAAI,IAAI,CAAC;IACd,QAAQ,IAAI,IAAI,CAAC;IACjB,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAED;;GAEG;AACH,MAAM,MAAM,GAAG,GAAG;IAChB,oCAAoC;IACpC,EAAE,EAAE,MAAM,CAAC;IAEX,2CAA2C;IAC3C,UAAU,EAAE,MAAM,CAAC;IAEnB,kCAAkC;IAClC,KAAK,EAAE,MAAM,CAAC;IAEd,mCAAmC;IACnC,MAAM,EAAE,MAAM,CAAC;IAEf,0DAA0D;IAC1D,OAAO,EAAE,MAAM,EAAE,CAAC;IAElB,yCAAyC;IACzC,SAAS,EAAE,MAAM,CAAC;IAElB,yDAAyD;IACzD,SAAS,EAAE,MAAM,EAAE,CAAC;IAEpB,+BAA+B;IAC/B,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB,wCAAwC;IACxC,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB,uCAAuC;IACvC,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,gEAAgE;IAChE,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,eAAe;;CAElB,CAAC;AAEX;;GAEG;AACH,MAAM,MAAM,iBAAiB,GAAG;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf,CAAC"}
@@ -1,3 +1,15 @@
1
+ /**
2
+ * State of a job in the queue
3
+ */
4
+ export var JobQueueState;
5
+ (function (JobQueueState) {
6
+ JobQueueState[JobQueueState["UNKNOWN"] = -1] = "UNKNOWN";
7
+ JobQueueState[JobQueueState["PREPROCESSING"] = 0] = "PREPROCESSING";
8
+ JobQueueState[JobQueueState["PENDING"] = 1] = "PENDING";
9
+ JobQueueState[JobQueueState["READY"] = 2] = "READY";
10
+ JobQueueState[JobQueueState["RUNNING"] = 3] = "RUNNING";
11
+ JobQueueState[JobQueueState["RESOLVED"] = 4] = "RESOLVED";
12
+ })(JobQueueState || (JobQueueState = {}));
1
13
  /**
2
14
  * Event types for the queue system
3
15
  */
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/queue/types.ts"],"names":[],"mappings":"AA+BA;;GAEG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,aAAa,EAAE,KAAK;CACZ,CAAC"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/queue/types.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,CAAN,IAAY,aAOX;AAPD,WAAY,aAAa;IACvB,wDAAY,CAAA;IACZ,mEAAiB,CAAA;IACjB,uDAAW,CAAA;IACX,mDAAS,CAAA;IACT,uDAAW,CAAA;IACX,yDAAY,CAAA;AACd,CAAC,EAPW,aAAa,KAAb,aAAa,QAOxB;AAoDD;;GAEG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,aAAa,EAAE,KAAK;CACZ,CAAC"}
@@ -0,0 +1,38 @@
1
+ import type { IEventBus } from "../events/interfaces.js";
2
+ import type { IReadModel, IReadModelCoordinator } from "./interfaces.js";
3
+ /**
4
+ * Coordinates read model synchronization by listening to operation write events
5
+ * and updating all registered read models in parallel.
6
+ *
7
+ * This coordinator is responsible for:
8
+ * - Subscribing to OPERATION_WRITTEN events from the event bus
9
+ * - Distributing operation updates to all registered read models
10
+ * - Managing the lifecycle of read model subscriptions
11
+ *
12
+ * Read models are updated asynchronously and in parallel to avoid blocking
13
+ * the write path. Errors in read model updates are propagated through the
14
+ * event bus but do not affect the write operation success.
15
+ */
16
+ export declare class ReadModelCoordinator implements IReadModelCoordinator {
17
+ private eventBus;
18
+ private readModels;
19
+ private unsubscribe?;
20
+ private isRunning;
21
+ constructor(eventBus: IEventBus, readModels: IReadModel[]);
22
+ /**
23
+ * Start listening for operation events and updating read models.
24
+ * Can be called multiple times safely (subsequent calls are no-ops).
25
+ */
26
+ start(): void;
27
+ /**
28
+ * Stop listening and clean up subscriptions.
29
+ * Can be called multiple times safely (subsequent calls are no-ops).
30
+ */
31
+ stop(): void;
32
+ /**
33
+ * Handle operation written events by updating all read models in parallel.
34
+ * Errors from individual read models are collected and re-thrown as an aggregate.
35
+ */
36
+ private handleOperationWritten;
37
+ }
38
+ //# sourceMappingURL=coordinator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coordinator.d.ts","sourceRoot":"","sources":["../../../src/read-models/coordinator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAMzD,OAAO,KAAK,EAAE,UAAU,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAEzE;;;;;;;;;;;;GAYG;AACH,qBAAa,oBAAqB,YAAW,qBAAqB;IAK9D,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,UAAU;IALpB,OAAO,CAAC,WAAW,CAAC,CAAc;IAClC,OAAO,CAAC,SAAS,CAAS;gBAGhB,QAAQ,EAAE,SAAS,EACnB,UAAU,EAAE,UAAU,EAAE;IAGlC;;;OAGG;IACH,KAAK,IAAI,IAAI;IAgBb;;;OAGG;IACH,IAAI,IAAI,IAAI;IAaZ;;;OAGG;YACW,sBAAsB;CAWrC"}