@powerhousedao/reactor 4.1.0-staging.1 → 5.0.0-staging.10

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 (147) hide show
  1. package/dist/bench/event-bus.bench.js +17 -27
  2. package/dist/bench/event-bus.bench.js.map +1 -1
  3. package/dist/bench/queue-only.bench.js +8 -2
  4. package/dist/bench/queue-only.bench.js.map +1 -1
  5. package/dist/bench/reactor-throughput.bench.js +42 -35
  6. package/dist/bench/reactor-throughput.bench.js.map +1 -1
  7. package/dist/src/events/event-bus.d.ts +3 -3
  8. package/dist/src/events/event-bus.d.ts.map +1 -1
  9. package/dist/src/events/event-bus.js.map +1 -1
  10. package/dist/src/events/interfaces.d.ts +1 -1
  11. package/dist/src/events/interfaces.d.ts.map +1 -1
  12. package/dist/src/events/types.d.ts +1 -1
  13. package/dist/src/events/types.d.ts.map +1 -1
  14. package/dist/src/events/types.js.map +1 -1
  15. package/dist/src/executor/interfaces.d.ts +31 -54
  16. package/dist/src/executor/interfaces.d.ts.map +1 -1
  17. package/dist/src/executor/simple-job-executor-manager.d.ts +27 -0
  18. package/dist/src/executor/simple-job-executor-manager.d.ts.map +1 -0
  19. package/dist/src/executor/simple-job-executor-manager.js +128 -0
  20. package/dist/src/executor/simple-job-executor-manager.js.map +1 -0
  21. package/dist/src/executor/simple-job-executor.d.ts +19 -0
  22. package/dist/src/executor/simple-job-executor.d.ts.map +1 -0
  23. package/dist/src/executor/simple-job-executor.js +69 -0
  24. package/dist/src/executor/simple-job-executor.js.map +1 -0
  25. package/dist/src/executor/types.d.ts +23 -8
  26. package/dist/src/executor/types.d.ts.map +1 -1
  27. package/dist/src/executor/types.js.map +1 -1
  28. package/dist/src/index.d.ts +9 -2
  29. package/dist/src/index.d.ts.map +1 -1
  30. package/dist/src/index.js +8 -2
  31. package/dist/src/index.js.map +1 -1
  32. package/dist/src/interfaces/reactor.d.ts +121 -0
  33. package/dist/src/interfaces/reactor.d.ts.map +1 -0
  34. package/dist/src/interfaces/reactor.js +2 -0
  35. package/dist/src/interfaces/reactor.js.map +1 -0
  36. package/dist/src/queue/interfaces.d.ts +45 -5
  37. package/dist/src/queue/interfaces.d.ts.map +1 -1
  38. package/dist/src/queue/job-execution-handle.d.ts +24 -0
  39. package/dist/src/queue/job-execution-handle.d.ts.map +1 -0
  40. package/dist/src/queue/job-execution-handle.js +62 -0
  41. package/dist/src/queue/job-execution-handle.js.map +1 -0
  42. package/dist/src/queue/queue.d.ts +54 -5
  43. package/dist/src/queue/queue.d.ts.map +1 -1
  44. package/dist/src/queue/queue.js +237 -23
  45. package/dist/src/queue/queue.js.map +1 -1
  46. package/dist/src/queue/types.d.ts +26 -1
  47. package/dist/src/queue/types.d.ts.map +1 -1
  48. package/dist/src/queue/types.js +12 -0
  49. package/dist/src/queue/types.js.map +1 -1
  50. package/dist/src/reactor.d.ts +100 -0
  51. package/dist/src/reactor.d.ts.map +1 -0
  52. package/dist/src/reactor.js +591 -0
  53. package/dist/src/reactor.js.map +1 -0
  54. package/dist/src/registry/implementation.d.ts +62 -0
  55. package/dist/src/registry/implementation.d.ts.map +1 -0
  56. package/dist/src/registry/implementation.js +96 -0
  57. package/dist/src/registry/implementation.js.map +1 -0
  58. package/dist/src/registry/index.d.ts +3 -0
  59. package/dist/src/registry/index.d.ts.map +1 -0
  60. package/dist/src/registry/index.js +2 -0
  61. package/dist/src/registry/index.js.map +1 -0
  62. package/dist/src/registry/interfaces.d.ts +39 -0
  63. package/dist/src/registry/interfaces.d.ts.map +1 -0
  64. package/dist/src/registry/interfaces.js +2 -0
  65. package/dist/src/registry/interfaces.js.map +1 -0
  66. package/dist/src/shared/factories.d.ts +16 -0
  67. package/dist/src/shared/factories.d.ts.map +1 -0
  68. package/dist/src/shared/factories.js +33 -0
  69. package/dist/src/shared/factories.js.map +1 -0
  70. package/dist/src/shared/types.d.ts +83 -19
  71. package/dist/src/shared/types.d.ts.map +1 -1
  72. package/dist/src/shared/types.js +30 -1
  73. package/dist/src/shared/types.js.map +1 -1
  74. package/dist/src/shared/utils.d.ts +3 -0
  75. package/dist/src/shared/utils.d.ts.map +1 -0
  76. package/dist/src/shared/utils.js +8 -0
  77. package/dist/src/shared/utils.js.map +1 -0
  78. package/dist/src/utils.d.ts +11 -0
  79. package/dist/src/utils.d.ts.map +1 -0
  80. package/dist/src/utils.js +31 -0
  81. package/dist/src/utils.js.map +1 -0
  82. package/dist/test/event-bus.test.js +19 -10
  83. package/dist/test/event-bus.test.js.map +1 -1
  84. package/dist/test/executor/executor-integration.test.d.ts +2 -0
  85. package/dist/test/executor/executor-integration.test.d.ts.map +1 -0
  86. package/dist/test/executor/executor-integration.test.js +287 -0
  87. package/dist/test/executor/executor-integration.test.js.map +1 -0
  88. package/dist/test/executor/job-execution-handle.test.d.ts +2 -0
  89. package/dist/test/executor/job-execution-handle.test.d.ts.map +1 -0
  90. package/dist/test/executor/job-execution-handle.test.js +272 -0
  91. package/dist/test/executor/job-execution-handle.test.js.map +1 -0
  92. package/dist/test/executor/simple-job-executor-manager.test.d.ts +2 -0
  93. package/dist/test/executor/simple-job-executor-manager.test.d.ts.map +1 -0
  94. package/dist/test/executor/simple-job-executor-manager.test.js +132 -0
  95. package/dist/test/executor/simple-job-executor-manager.test.js.map +1 -0
  96. package/dist/test/executor/simple-job-executor.test.d.ts +2 -0
  97. package/dist/test/executor/simple-job-executor.test.d.ts.map +1 -0
  98. package/dist/test/executor/simple-job-executor.test.js +139 -0
  99. package/dist/test/executor/simple-job-executor.test.js.map +1 -0
  100. package/dist/test/factories.d.ts +123 -0
  101. package/dist/test/factories.d.ts.map +1 -0
  102. package/dist/test/factories.js +319 -0
  103. package/dist/test/factories.js.map +1 -0
  104. package/dist/test/integration/document-drive-integration.test.d.ts +2 -0
  105. package/dist/test/integration/document-drive-integration.test.d.ts.map +1 -0
  106. package/dist/test/integration/document-drive-integration.test.js +1102 -0
  107. package/dist/test/integration/document-drive-integration.test.js.map +1 -0
  108. package/dist/test/integration/reactor-read.test.d.ts +2 -0
  109. package/dist/test/integration/reactor-read.test.d.ts.map +1 -0
  110. package/dist/test/integration/reactor-read.test.js +291 -0
  111. package/dist/test/integration/reactor-read.test.js.map +1 -0
  112. package/dist/test/queue/queue-integration.test.d.ts +2 -0
  113. package/dist/test/queue/queue-integration.test.d.ts.map +1 -0
  114. package/dist/test/queue/queue-integration.test.js +322 -0
  115. package/dist/test/queue/queue-integration.test.js.map +1 -0
  116. package/dist/test/{queue.test.d.ts.map → queue/queue.test.d.ts.map} +1 -1
  117. package/dist/test/queue/queue.test.js +770 -0
  118. package/dist/test/queue/queue.test.js.map +1 -0
  119. package/dist/test/registry/registry.test.d.ts +2 -0
  120. package/dist/test/registry/registry.test.d.ts.map +1 -0
  121. package/dist/test/registry/registry.test.js +182 -0
  122. package/dist/test/registry/registry.test.js.map +1 -0
  123. package/dist/test/utils.test.d.ts +2 -0
  124. package/dist/test/utils.test.d.ts.map +1 -0
  125. package/dist/test/utils.test.js +66 -0
  126. package/dist/test/utils.test.js.map +1 -0
  127. package/dist/tsconfig.tsbuildinfo +1 -1
  128. package/dist/vitest.config.d.ts +3 -0
  129. package/dist/vitest.config.d.ts.map +1 -0
  130. package/dist/vitest.config.js +11 -0
  131. package/dist/vitest.config.js.map +1 -0
  132. package/package.json +6 -1
  133. package/dist/bench/end-to-end-flow.bench.d.ts +0 -2
  134. package/dist/bench/end-to-end-flow.bench.d.ts.map +0 -1
  135. package/dist/bench/end-to-end-flow.bench.js +0 -256
  136. package/dist/bench/end-to-end-flow.bench.js.map +0 -1
  137. package/dist/src/executor/job-executor.d.ts +0 -62
  138. package/dist/src/executor/job-executor.d.ts.map +0 -1
  139. package/dist/src/executor/job-executor.js +0 -325
  140. package/dist/src/executor/job-executor.js.map +0 -1
  141. package/dist/test/job-executor.test.d.ts +0 -2
  142. package/dist/test/job-executor.test.d.ts.map +0 -1
  143. package/dist/test/job-executor.test.js +0 -581
  144. package/dist/test/job-executor.test.js.map +0 -1
  145. package/dist/test/queue.test.js +0 -396
  146. package/dist/test/queue.test.js.map +0 -1
  147. /package/dist/test/{queue.test.d.ts → queue/queue.test.d.ts} +0 -0
@@ -0,0 +1,62 @@
1
+ import { JobQueueState } from "./types.js";
2
+ /**
3
+ * Implementation of the IJobExecutionHandle interface
4
+ */
5
+ export class JobExecutionHandle {
6
+ _state;
7
+ _job;
8
+ onStart;
9
+ onComplete;
10
+ onFail;
11
+ getStateName(state) {
12
+ switch (state) {
13
+ case JobQueueState.PREPROCESSING:
14
+ return "PREPROCESSING";
15
+ case JobQueueState.PENDING:
16
+ return "PENDING";
17
+ case JobQueueState.READY:
18
+ return "READY";
19
+ case JobQueueState.RUNNING:
20
+ return "RUNNING";
21
+ case JobQueueState.RESOLVED:
22
+ return "RESOLVED";
23
+ default:
24
+ return `UNKNOWN`;
25
+ }
26
+ }
27
+ constructor(job, initialState, callbacks) {
28
+ this._job = job;
29
+ this._state = initialState;
30
+ this.onStart = callbacks?.onStart;
31
+ this.onComplete = callbacks?.onComplete;
32
+ this.onFail = callbacks?.onFail;
33
+ }
34
+ get job() {
35
+ return this._job;
36
+ }
37
+ get state() {
38
+ return this._state;
39
+ }
40
+ start() {
41
+ if (this._state !== JobQueueState.READY) {
42
+ throw new Error(`Cannot start job in state ${this.getStateName(this._state)}`);
43
+ }
44
+ this._state = JobQueueState.RUNNING;
45
+ this.onStart?.();
46
+ }
47
+ complete() {
48
+ if (this._state !== JobQueueState.RUNNING) {
49
+ throw new Error(`Cannot complete job in state ${this.getStateName(this._state)}`);
50
+ }
51
+ this._state = JobQueueState.RESOLVED;
52
+ this.onComplete?.();
53
+ }
54
+ fail(reason) {
55
+ if (this._state !== JobQueueState.RUNNING) {
56
+ throw new Error(`Cannot fail job in state ${this.getStateName(this._state)}`);
57
+ }
58
+ this._state = JobQueueState.RESOLVED;
59
+ this.onFail?.(reason);
60
+ }
61
+ }
62
+ //# sourceMappingURL=job-execution-handle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"job-execution-handle.js","sourceRoot":"","sources":["../../../src/queue/job-execution-handle.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE3C;;GAEG;AACH,MAAM,OAAO,kBAAkB;IACrB,MAAM,CAAgB;IACtB,IAAI,CAAM;IACV,OAAO,CAAc;IACrB,UAAU,CAAc;IACxB,MAAM,CAA4B;IAElC,YAAY,CAAC,KAAoB;QACvC,QAAQ,KAAK,EAAE,CAAC;YACd,KAAK,aAAa,CAAC,aAAa;gBAC9B,OAAO,eAAe,CAAC;YACzB,KAAK,aAAa,CAAC,OAAO;gBACxB,OAAO,SAAS,CAAC;YACnB,KAAK,aAAa,CAAC,KAAK;gBACtB,OAAO,OAAO,CAAC;YACjB,KAAK,aAAa,CAAC,OAAO;gBACxB,OAAO,SAAS,CAAC;YACnB,KAAK,aAAa,CAAC,QAAQ;gBACzB,OAAO,UAAU,CAAC;YACpB;gBACE,OAAO,SAAS,CAAC;QACrB,CAAC;IACH,CAAC;IAED,YACE,GAAQ,EACR,YAA2B,EAC3B,SAIC;QAED,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC;QAChB,IAAI,CAAC,MAAM,GAAG,YAAY,CAAC;QAC3B,IAAI,CAAC,OAAO,GAAG,SAAS,EAAE,OAAO,CAAC;QAClC,IAAI,CAAC,UAAU,GAAG,SAAS,EAAE,UAAU,CAAC;QACxC,IAAI,CAAC,MAAM,GAAG,SAAS,EAAE,MAAM,CAAC;IAClC,CAAC;IAED,IAAI,GAAG;QACL,OAAO,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC;IAED,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED,KAAK;QACH,IAAI,IAAI,CAAC,MAAM,KAAK,aAAa,CAAC,KAAK,EAAE,CAAC;YACxC,MAAM,IAAI,KAAK,CACb,6BAA6B,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAC9D,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,MAAM,GAAG,aAAa,CAAC,OAAO,CAAC;QACpC,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC;IACnB,CAAC;IAED,QAAQ;QACN,IAAI,IAAI,CAAC,MAAM,KAAK,aAAa,CAAC,OAAO,EAAE,CAAC;YAC1C,MAAM,IAAI,KAAK,CACb,gCAAgC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CACjE,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,MAAM,GAAG,aAAa,CAAC,QAAQ,CAAC;QACrC,IAAI,CAAC,UAAU,EAAE,EAAE,CAAC;IACtB,CAAC;IAED,IAAI,CAAC,MAAc;QACjB,IAAI,IAAI,CAAC,MAAM,KAAK,aAAa,CAAC,OAAO,EAAE,CAAC;YAC1C,MAAM,IAAI,KAAK,CACb,4BAA4B,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAC7D,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,MAAM,GAAG,aAAa,CAAC,QAAQ,CAAC;QACrC,IAAI,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,CAAC;IACxB,CAAC;CACF"}
@@ -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;IA2BhC,OAAO,CACX,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC;IA6ChC,WAAW,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC;IAiDtE,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;IAqCvC,KAAK,CACT,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,IAAI,CAAC;IAgBV,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAUzB,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC;IAO3B,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;IAmBrD,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA4B5D;;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,34 +109,79 @@ export class InMemoryQueue {
43
109
  };
44
110
  await this.eventBus.emit(QueueEventTypes.JOB_AVAILABLE, eventData);
45
111
  }
46
- async dequeue(documentId, scope, branch) {
112
+ async dequeue(documentId, scope, branch, signal) {
47
113
  const queueKey = this.createQueueKey(documentId, scope, branch);
48
114
  const queue = this.queues.get(queueKey);
49
115
  if (!queue || queue.length === 0) {
50
116
  return null;
51
117
  }
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);
118
+ // Find the first job with met dependencies
119
+ const job = this.getNextJobWithMetDependencies(queue);
120
+ if (!job) {
121
+ return null; // No job with met dependencies
122
+ }
123
+ // Remove job from queue
124
+ const jobIndex = queue.indexOf(job);
125
+ queue.splice(jobIndex, 1);
126
+ // Remove from queue tracking but keep in job index for retry
127
+ this.jobIdToQueueKey.delete(job.id);
128
+ // Mark this job as executing for its document
129
+ this.markJobExecuting(job);
56
130
  // Clean up empty queue
57
131
  if (queue.length === 0) {
58
132
  this.queues.delete(queueKey);
59
133
  }
60
- return job;
134
+ // Create and return the execution handle
135
+ const handle = new JobExecutionHandle(job, JobQueueState.READY, {
136
+ onStart: () => {
137
+ // Job is now running
138
+ },
139
+ onComplete: () => {
140
+ this.completeJob(job.id);
141
+ },
142
+ onFail: (reason) => {
143
+ this.failJob(job.id, reason);
144
+ },
145
+ });
146
+ return handle;
61
147
  }
62
- async dequeueNext() {
63
- // Find the first non-empty queue and dequeue from it
148
+ async dequeueNext(signal) {
149
+ // Find the first non-empty queue for a document that's not currently executing
64
150
  for (const [queueKey, queue] of this.queues.entries()) {
65
151
  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);
152
+ // Find the first job with met dependencies
153
+ const job = this.getNextJobWithMetDependencies(queue);
154
+ if (!job) {
155
+ continue; // No job with met dependencies in this queue
156
+ }
157
+ // Only dequeue if the document is not currently executing jobs
158
+ if (!this.isDocumentExecuting(job.documentId)) {
159
+ // Remove job from queue
160
+ const jobIdx = queue.indexOf(job);
161
+ queue.splice(jobIdx, 1);
162
+ // Remove from queue tracking but keep in job index for retry
163
+ this.jobIdToQueueKey.delete(job.id);
164
+ // Keep job in jobIndex so we can retry it if needed
165
+ // Mark this job as executing for its document
166
+ this.markJobExecuting(job);
167
+ // Clean up empty queue
168
+ if (queue.length === 0) {
169
+ this.queues.delete(queueKey);
170
+ }
171
+ // Create and return the execution handle
172
+ const handle = new JobExecutionHandle(job, JobQueueState.READY, {
173
+ onStart: () => {
174
+ // Job is now running
175
+ },
176
+ onComplete: () => {
177
+ this.completeJob(job.id);
178
+ },
179
+ onFail: (reason) => {
180
+ this.failJob(job.id, reason);
181
+ },
182
+ });
183
+ return handle;
72
184
  }
73
- return job;
74
185
  }
75
186
  }
76
187
  return null;
@@ -88,25 +199,28 @@ export class InMemoryQueue {
88
199
  return total;
89
200
  }
90
201
  async remove(jobId) {
91
- const queueKey = this.jobIndex.get(jobId);
202
+ const queueKey = this.jobIdToQueueKey.get(jobId);
92
203
  if (!queueKey) {
93
204
  return false;
94
205
  }
95
206
  const queue = this.queues.get(queueKey);
96
207
  if (!queue) {
97
208
  // Clean up orphaned index entry
209
+ this.jobIdToQueueKey.delete(jobId);
98
210
  this.jobIndex.delete(jobId);
99
211
  return false;
100
212
  }
101
- const jobIndex = queue.findIndex((job) => job.id === jobId);
102
- if (jobIndex === -1) {
213
+ const jobIdx = queue.findIndex((job) => job.id === jobId);
214
+ if (jobIdx === -1) {
103
215
  // Clean up orphaned index entry
216
+ this.jobIdToQueueKey.delete(jobId);
104
217
  this.jobIndex.delete(jobId);
105
218
  return false;
106
219
  }
107
220
  // Remove job from queue
108
- queue.splice(jobIndex, 1);
221
+ queue.splice(jobIdx, 1);
109
222
  // Remove from job index
223
+ this.jobIdToQueueKey.delete(jobId);
110
224
  this.jobIndex.delete(jobId);
111
225
  // Clean up empty queue
112
226
  if (queue.length === 0) {
@@ -120,6 +234,7 @@ export class InMemoryQueue {
120
234
  if (queue) {
121
235
  // Remove all jobs from the job index
122
236
  for (const job of queue) {
237
+ this.jobIdToQueueKey.delete(job.id);
123
238
  this.jobIndex.delete(job.id);
124
239
  }
125
240
  // Remove the queue
@@ -128,9 +243,108 @@ export class InMemoryQueue {
128
243
  }
129
244
  async clearAll() {
130
245
  // Clear all job indices
246
+ this.jobIdToQueueKey.clear();
131
247
  this.jobIndex.clear();
248
+ this.completedJobs.clear();
132
249
  // Clear all queues
133
250
  this.queues.clear();
134
251
  }
252
+ async hasJobs() {
253
+ return (this.queues.size > 0 &&
254
+ Array.from(this.queues.values()).some((q) => q.length > 0));
255
+ }
256
+ async completeJob(jobId) {
257
+ // Get the documentId for the executing job
258
+ const documentId = this.jobIdToDocId.get(jobId);
259
+ if (documentId) {
260
+ // Mark the job as no longer executing
261
+ this.markJobComplete(jobId, documentId);
262
+ }
263
+ // Track the job as completed for dependency resolution
264
+ this.completedJobs.add(jobId);
265
+ // Remove from job index
266
+ this.jobIndex.delete(jobId);
267
+ // For in-memory queue, completing just removes the job
268
+ // In a persistent queue, this would update the job status
269
+ await this.remove(jobId);
270
+ // Check if queue is now drained
271
+ this.checkDrained();
272
+ }
273
+ async failJob(jobId, error) {
274
+ // Get the documentId for the executing job
275
+ const documentId = this.jobIdToDocId.get(jobId);
276
+ if (documentId) {
277
+ // Mark the job as no longer executing
278
+ this.markJobComplete(jobId, documentId);
279
+ }
280
+ // Remove from job index
281
+ this.jobIndex.delete(jobId);
282
+ // For in-memory queue, failing just removes the job
283
+ // In a persistent queue, this would update the job status and store the error
284
+ await this.remove(jobId);
285
+ // Check if queue is now drained
286
+ this.checkDrained();
287
+ }
288
+ async retryJob(jobId, error) {
289
+ // Get the job from the index (it might be executing, not in queue)
290
+ const job = this.jobIndex.get(jobId);
291
+ if (!job) {
292
+ return;
293
+ }
294
+ // Mark it as no longer executing if it was
295
+ const documentId = this.jobIdToDocId.get(jobId);
296
+ if (documentId) {
297
+ this.markJobComplete(jobId, documentId);
298
+ }
299
+ // Remove from indices
300
+ this.jobIndex.delete(jobId);
301
+ this.jobIdToQueueKey.delete(jobId);
302
+ // Update retry count
303
+ const updatedJob = {
304
+ ...job,
305
+ retryCount: (job.retryCount || 0) + 1,
306
+ lastError: error,
307
+ };
308
+ // Re-enqueue with updated retry count
309
+ await this.enqueue(updatedJob);
310
+ }
311
+ /**
312
+ * Check if the queue is drained and call the callback if it is
313
+ */
314
+ checkDrained() {
315
+ if (this.isDrained && this.onDrainedCallback) {
316
+ const callback = this.onDrainedCallback;
317
+ this.onDrainedCallback = undefined;
318
+ callback();
319
+ }
320
+ }
321
+ /**
322
+ * Returns true if and only if all jobs have been resolved.
323
+ */
324
+ get isDrained() {
325
+ // Queue is drained if there are no pending jobs and no executing jobs
326
+ const hasPendingJobs = this.queues.size > 0 &&
327
+ Array.from(this.queues.values()).some((q) => q.length > 0);
328
+ const hasExecutingJobs = this.docIdToJobId.size > 0 &&
329
+ Array.from(this.docIdToJobId.values()).some((set) => set.size > 0);
330
+ return !hasPendingJobs && !hasExecutingJobs;
331
+ }
332
+ /**
333
+ * Blocks the queue from accepting new jobs.
334
+ * @param onDrained - Optional callback to call when the queue is drained
335
+ */
336
+ block(onDrained) {
337
+ this.isBlocked = true;
338
+ this.onDrainedCallback = onDrained;
339
+ // Check if already drained
340
+ this.checkDrained();
341
+ }
342
+ /**
343
+ * Unblocks the queue from accepting new jobs.
344
+ */
345
+ unblock() {
346
+ this.isBlocked = false;
347
+ this.onDrainedCallback = undefined;
348
+ }
135
349
  }
136
350
  //# 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":"AAEA,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAE/D,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAE5D;;;;;GAKG;AACH,MAAM,OAAO,aAAa;IAUJ;IATZ,MAAM,GAAG,IAAI,GAAG,EAAiB,CAAC;IAClC,eAAe,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC5C,YAAY,GAAG,IAAI,GAAG,EAAuB,CAAC;IAC9C,YAAY,GAAG,IAAI,GAAG,EAAkB,CAAC;IACzC,aAAa,GAAG,IAAI,GAAG,EAAU,CAAC;IAClC,QAAQ,GAAG,IAAI,GAAG,EAAe,CAAC;IAClC,SAAS,GAAG,KAAK,CAAC;IAClB,iBAAiB,CAAc;IAEvC,YAAoB,QAAmB;QAAnB,aAAQ,GAAR,QAAQ,CAAW;IAAG,CAAC;IAE3C;;OAEG;IACK,cAAc,CACpB,UAAkB,EAClB,KAAa,EACb,MAAc;QAEd,OAAO,GAAG,UAAU,IAAI,KAAK,IAAI,MAAM,EAAE,CAAC;IAC5C,CAAC;IAED;;OAEG;IACK,QAAQ,CAAC,QAAgB;QAC/B,IAAI,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACtC,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,KAAK,GAAG,EAAE,CAAC;YACX,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QACnC,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;OAEG;IACK,mBAAmB,CAAC,UAAkB;QAC5C,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACvD,OAAO,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IACtD,CAAC;IAED;;OAEG;IACK,gBAAgB,CAAC,GAAQ;QAC/B,IAAI,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACzD,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,YAAY,GAAG,IAAI,GAAG,EAAE,CAAC;YACzB,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;QACtD,CAAC;QACD,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACzB,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC;IAChD,CAAC;IAED;;OAEG;IACK,eAAe,CAAC,KAAa,EAAE,UAAkB;QACvD,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACvD,IAAI,YAAY,EAAE,CAAC;YACjB,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC3B,IAAI,YAAY,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;gBAC5B,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;YACvC,CAAC;QACH,CAAC;QACD,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAClC,CAAC;IAED;;OAEG;IACK,kBAAkB,CAAC,GAAQ;QACjC,IAAI,GAAG,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC/B,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;IACvE,CAAC;IAED;;OAEG;IACK,6BAA6B,CAAC,KAAY;QAChD,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;YACxB,IAAI,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,EAAE,CAAC;gBACjC,OAAO,GAAG,CAAC;YACb,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,GAAQ;QACpB,kCAAkC;QAClC,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;QACtC,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;QAC5E,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAEtC,yCAAyC;QACzC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAEhB,2DAA2D;QAC3D,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;QAC3C,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;QAE/B,2BAA2B;QAC3B,MAAM,SAAS,GAAsB;YACnC,UAAU,EAAE,GAAG,CAAC,UAAU;YAC1B,KAAK,EAAE,GAAG,CAAC,KAAK;YAChB,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,KAAK,EAAE,GAAG,CAAC,EAAE;SACd,CAAC;QAEF,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC;IACrE,CAAC;IAED,KAAK,CAAC,OAAO,CACX,UAAkB,EAClB,KAAa,EACb,MAAc,EACd,MAAoB;QAEpB,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;QAChE,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAExC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACjC,OAAO,IAAI,CAAC;QACd,CAAC;QAED,2CAA2C;QAC3C,MAAM,GAAG,GAAG,IAAI,CAAC,6BAA6B,CAAC,KAAK,CAAC,CAAC;QACtD,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,OAAO,IAAI,CAAC,CAAC,+BAA+B;QAC9C,CAAC;QAED,wBAAwB;QACxB,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACpC,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;QAE1B,6DAA6D;QAC7D,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAEpC,8CAA8C;QAC9C,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;QAE3B,uBAAuB;QACvB,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC/B,CAAC;QAED,yCAAyC;QACzC,MAAM,MAAM,GAAG,IAAI,kBAAkB,CAAC,GAAG,EAAE,aAAa,CAAC,KAAK,EAAE;YAC9D,OAAO,EAAE,GAAG,EAAE;gBACZ,qBAAqB;YACvB,CAAC;YACD,UAAU,EAAE,GAAG,EAAE;gBACf,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAC3B,CAAC;YACD,MAAM,EAAE,CAAC,MAAc,EAAE,EAAE;gBACzB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;YAC/B,CAAC;SACF,CAAC,CAAC;QAEH,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,MAAoB;QACpC,+EAA+E;QAC/E,KAAK,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC;YACtD,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACrB,2CAA2C;gBAC3C,MAAM,GAAG,GAAG,IAAI,CAAC,6BAA6B,CAAC,KAAK,CAAC,CAAC;gBACtD,IAAI,CAAC,GAAG,EAAE,CAAC;oBACT,SAAS,CAAC,6CAA6C;gBACzD,CAAC;gBAED,+DAA+D;gBAC/D,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;oBAC9C,wBAAwB;oBACxB,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;oBAClC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;oBAExB,6DAA6D;oBAC7D,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;oBACpC,oDAAoD;oBAEpD,8CAA8C;oBAC9C,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;oBAE3B,uBAAuB;oBACvB,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;wBACvB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;oBAC/B,CAAC;oBAED,yCAAyC;oBACzC,MAAM,MAAM,GAAG,IAAI,kBAAkB,CAAC,GAAG,EAAE,aAAa,CAAC,KAAK,EAAE;wBAC9D,OAAO,EAAE,GAAG,EAAE;4BACZ,qBAAqB;wBACvB,CAAC;wBACD,UAAU,EAAE,GAAG,EAAE;4BACf,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;wBAC3B,CAAC;wBACD,MAAM,EAAE,CAAC,MAAc,EAAE,EAAE;4BACzB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;wBAC/B,CAAC;qBACF,CAAC,CAAC;oBAEH,OAAO,MAAM,CAAC;gBAChB,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,IAAI,CACR,UAAkB,EAClB,KAAa,EACb,MAAc;QAEd,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;QAChE,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACxC,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IAClC,CAAC;IAED,KAAK,CAAC,SAAS;QACb,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC;YACzC,KAAK,IAAI,KAAK,CAAC,MAAM,CAAC;QACxB,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,KAAa;QACxB,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACjD,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO,KAAK,CAAC;QACf,CAAC;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACxC,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,gCAAgC;YAChC,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACnC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC5B,OAAO,KAAK,CAAC;QACf,CAAC;QAED,MAAM,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,KAAK,CAAC,CAAC;QAC1D,IAAI,MAAM,KAAK,CAAC,CAAC,EAAE,CAAC;YAClB,gCAAgC;YAChC,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACnC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC5B,OAAO,KAAK,CAAC;QACf,CAAC;QAED,wBAAwB;QACxB,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAExB,wBAAwB;QACxB,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACnC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAE5B,uBAAuB;QACvB,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC/B,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,KAAK,CACT,UAAkB,EAClB,KAAa,EACb,MAAc;QAEd,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;QAChE,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAExC,IAAI,KAAK,EAAE,CAAC;YACV,qCAAqC;YACrC,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;gBACxB,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBACpC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAC/B,CAAC;YAED,mBAAmB;YACnB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC;IAED,KAAK,CAAC,QAAQ;QACZ,wBAAwB;QACxB,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;QAC7B,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;QACtB,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;QAE3B,mBAAmB;QACnB,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;IACtB,CAAC;IAED,KAAK,CAAC,OAAO;QACX,OAAO,CACL,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC;YACpB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAC3D,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,KAAa;QAC7B,2CAA2C;QAC3C,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAChD,IAAI,UAAU,EAAE,CAAC;YACf,sCAAsC;YACtC,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;QAC1C,CAAC;QAED,uDAAuD;QACvD,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAE9B,wBAAwB;QACxB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAE5B,uDAAuD;QACvD,0DAA0D;QAC1D,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAEzB,gCAAgC;QAChC,IAAI,CAAC,YAAY,EAAE,CAAC;IACtB,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,KAAa,EAAE,KAAc;QACzC,2CAA2C;QAC3C,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAChD,IAAI,UAAU,EAAE,CAAC;YACf,sCAAsC;YACtC,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;QAC1C,CAAC;QAED,wBAAwB;QACxB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAE5B,oDAAoD;QACpD,8EAA8E;QAC9E,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAEzB,gCAAgC;QAChC,IAAI,CAAC,YAAY,EAAE,CAAC;IACtB,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,KAAa,EAAE,KAAc;QAC1C,mEAAmE;QACnE,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACrC,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,OAAO;QACT,CAAC;QAED,2CAA2C;QAC3C,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAChD,IAAI,UAAU,EAAE,CAAC;YACf,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;QAC1C,CAAC;QAED,sBAAsB;QACtB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC5B,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAEnC,qBAAqB;QACrB,MAAM,UAAU,GAAQ;YACtB,GAAG,GAAG;YACN,UAAU,EAAE,CAAC,GAAG,CAAC,UAAU,IAAI,CAAC,CAAC,GAAG,CAAC;YACrC,SAAS,EAAE,KAAK;SACjB,CAAC;QAEF,sCAAsC;QACtC,MAAM,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IACjC,CAAC;IAED;;OAEG;IACK,YAAY;QAClB,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC7C,MAAM,QAAQ,GAAG,IAAI,CAAC,iBAAiB,CAAC;YACxC,IAAI,CAAC,iBAAiB,GAAG,SAAS,CAAC;YACnC,QAAQ,EAAE,CAAC;QACb,CAAC;IACH,CAAC;IAED;;OAEG;IACH,IAAI,SAAS;QACX,sEAAsE;QACtE,MAAM,cAAc,GAClB,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC;YACpB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAC7D,MAAM,gBAAgB,GACpB,IAAI,CAAC,YAAY,CAAC,IAAI,GAAG,CAAC;YAC1B,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;QAErE,OAAO,CAAC,cAAc,IAAI,CAAC,gBAAgB,CAAC;IAC9C,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,SAAsB;QAC1B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,IAAI,CAAC,iBAAiB,GAAG,SAAS,CAAC;QAEnC,2BAA2B;QAC3B,IAAI,CAAC,YAAY,EAAE,CAAC;IACtB,CAAC;IAED;;OAEG;IACH,OAAO;QACL,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QACvB,IAAI,CAAC,iBAAiB,GAAG,SAAS,CAAC;IACrC,CAAC;CACF"}
@@ -1,4 +1,25 @@
1
- import { Operation } from "#shared/types.js";
1
+ import type { Operation } 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
  */
@@ -15,10 +36,14 @@ export type Job = {
15
36
  operation: Operation;
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;
22
47
  };
23
48
  /**
24
49
  * 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,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEhD;;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,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,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;CACpB,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;AAiDD;;GAEG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,aAAa,EAAE,KAAK;CACZ,CAAC"}