@powerhousedao/reactor 5.0.0-staging.1 → 5.0.0-staging.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bench/end-to-end-flow.bench.js +45 -27
- package/dist/bench/end-to-end-flow.bench.js.map +1 -1
- package/dist/bench/queue-only.bench.js +1 -0
- package/dist/bench/queue-only.bench.js.map +1 -1
- package/dist/bench/reactor-throughput.bench.js +27 -10
- package/dist/bench/reactor-throughput.bench.js.map +1 -1
- package/dist/src/executor/interfaces.d.ts +30 -53
- package/dist/src/executor/interfaces.d.ts.map +1 -1
- package/dist/src/executor/simple-job-executor-manager.d.ts +27 -0
- package/dist/src/executor/simple-job-executor-manager.d.ts.map +1 -0
- package/dist/src/executor/simple-job-executor-manager.js +128 -0
- package/dist/src/executor/simple-job-executor-manager.js.map +1 -0
- package/dist/src/executor/simple-job-executor.d.ts +19 -0
- package/dist/src/executor/simple-job-executor.d.ts.map +1 -0
- package/dist/src/executor/simple-job-executor.js +69 -0
- package/dist/src/executor/simple-job-executor.js.map +1 -0
- package/dist/src/executor/types.d.ts +22 -7
- package/dist/src/executor/types.d.ts.map +1 -1
- package/dist/src/executor/types.js.map +1 -1
- package/dist/src/index.d.ts +5 -1
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +5 -2
- package/dist/src/index.js.map +1 -1
- package/dist/src/queue/interfaces.d.ts +25 -0
- package/dist/src/queue/interfaces.d.ts.map +1 -1
- package/dist/src/queue/queue.d.ts +30 -0
- package/dist/src/queue/queue.d.ts.map +1 -1
- package/dist/src/queue/queue.js +164 -17
- package/dist/src/queue/queue.js.map +1 -1
- package/dist/src/queue/types.d.ts +4 -0
- package/dist/src/queue/types.d.ts.map +1 -1
- package/dist/src/queue/types.js.map +1 -1
- package/dist/src/reactor.d.ts.map +1 -1
- package/dist/src/reactor.js +4 -4
- package/dist/src/reactor.js.map +1 -1
- package/dist/src/registry/implementation.d.ts +62 -0
- package/dist/src/registry/implementation.d.ts.map +1 -0
- package/dist/src/registry/implementation.js +96 -0
- package/dist/src/registry/implementation.js.map +1 -0
- package/dist/src/registry/index.d.ts +3 -0
- package/dist/src/registry/index.d.ts.map +1 -0
- package/dist/src/registry/index.js +2 -0
- package/dist/src/registry/index.js.map +1 -0
- package/dist/src/registry/interfaces.d.ts +39 -0
- package/dist/src/registry/interfaces.d.ts.map +1 -0
- package/dist/src/registry/interfaces.js +2 -0
- package/dist/src/registry/interfaces.js.map +1 -0
- package/dist/test/executor-integration.test.d.ts +2 -0
- package/dist/test/executor-integration.test.d.ts.map +1 -0
- package/dist/test/executor-integration.test.js +290 -0
- package/dist/test/executor-integration.test.js.map +1 -0
- package/dist/test/factories.d.ts +131 -0
- package/dist/test/factories.d.ts.map +1 -0
- package/dist/test/factories.js +347 -0
- package/dist/test/factories.js.map +1 -0
- package/dist/test/queue.test.js +212 -32
- package/dist/test/queue.test.js.map +1 -1
- package/dist/test/reactor-queue.test.d.ts +2 -0
- package/dist/test/reactor-queue.test.d.ts.map +1 -0
- package/dist/test/reactor-queue.test.js +328 -0
- package/dist/test/reactor-queue.test.js.map +1 -0
- package/dist/test/reactor-read.test.js +28 -3
- package/dist/test/reactor-read.test.js.map +1 -1
- package/dist/test/registry.test.d.ts +2 -0
- package/dist/test/registry.test.d.ts.map +1 -0
- package/dist/test/registry.test.js +182 -0
- package/dist/test/registry.test.js.map +1 -0
- package/dist/test/simple-job-executor-manager.test.d.ts +2 -0
- package/dist/test/simple-job-executor-manager.test.d.ts.map +1 -0
- package/dist/test/simple-job-executor-manager.test.js +132 -0
- package/dist/test/simple-job-executor-manager.test.js.map +1 -0
- package/dist/test/simple-job-executor.test.d.ts +2 -0
- package/dist/test/simple-job-executor.test.d.ts.map +1 -0
- package/dist/test/simple-job-executor.test.js +139 -0
- package/dist/test/simple-job-executor.test.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/vitest.config.d.ts +3 -0
- package/dist/vitest.config.d.ts.map +1 -0
- package/dist/vitest.config.js +11 -0
- package/dist/vitest.config.js.map +1 -0
- package/package.json +3 -3
- package/dist/src/executor/job-executor.d.ts +0 -62
- package/dist/src/executor/job-executor.d.ts.map +0 -1
- package/dist/src/executor/job-executor.js +0 -325
- package/dist/src/executor/job-executor.js.map +0 -1
- package/dist/test/job-executor.test.d.ts +0 -2
- package/dist/test/job-executor.test.d.ts.map +0 -1
- package/dist/test/job-executor.test.js +0 -587
- package/dist/test/job-executor.test.js.map +0 -1
- package/dist/test/reactor-write.test.d.ts +0 -2
- package/dist/test/reactor-write.test.d.ts.map +0 -1
- package/dist/test/reactor-write.test.js +0 -232
- package/dist/test/reactor-write.test.js.map +0 -1
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Simple job executor that processes a job by applying actions through document model reducers.
|
|
3
|
+
*/
|
|
4
|
+
export class SimpleJobExecutor {
|
|
5
|
+
registry;
|
|
6
|
+
documentStorage;
|
|
7
|
+
operationStorage;
|
|
8
|
+
constructor(registry, documentStorage, operationStorage) {
|
|
9
|
+
this.registry = registry;
|
|
10
|
+
this.documentStorage = documentStorage;
|
|
11
|
+
this.operationStorage = operationStorage;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Execute a single job by applying its action through the appropriate reducer.
|
|
15
|
+
*/
|
|
16
|
+
async executeJob(job) {
|
|
17
|
+
const startTime = Date.now();
|
|
18
|
+
let document;
|
|
19
|
+
try {
|
|
20
|
+
document = await this.documentStorage.get(job.documentId);
|
|
21
|
+
}
|
|
22
|
+
catch (error) {
|
|
23
|
+
return {
|
|
24
|
+
job,
|
|
25
|
+
success: false,
|
|
26
|
+
error: error instanceof Error ? error : new Error(String(error)),
|
|
27
|
+
duration: Date.now() - startTime,
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
let module;
|
|
31
|
+
try {
|
|
32
|
+
module = this.registry.getModule(document.header.documentType);
|
|
33
|
+
}
|
|
34
|
+
catch (error) {
|
|
35
|
+
return {
|
|
36
|
+
job,
|
|
37
|
+
success: false,
|
|
38
|
+
error: error instanceof Error ? error : new Error(String(error)),
|
|
39
|
+
duration: Date.now() - startTime,
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
const updatedDocument = module.reducer(document, job.operation.action);
|
|
43
|
+
const scope = job.scope || "global";
|
|
44
|
+
const operations = updatedDocument.operations[scope];
|
|
45
|
+
if (operations.length === 0) {
|
|
46
|
+
throw new Error("No operation generated from action");
|
|
47
|
+
}
|
|
48
|
+
const newOperation = operations[operations.length - 1];
|
|
49
|
+
// Write the operation to legacy storage
|
|
50
|
+
try {
|
|
51
|
+
await this.operationStorage.addDocumentOperations(job.documentId, [newOperation], updatedDocument);
|
|
52
|
+
}
|
|
53
|
+
catch (error) {
|
|
54
|
+
return {
|
|
55
|
+
job,
|
|
56
|
+
success: false,
|
|
57
|
+
error: error instanceof Error ? error : new Error(String(error)),
|
|
58
|
+
duration: Date.now() - startTime,
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
return {
|
|
62
|
+
job,
|
|
63
|
+
success: true,
|
|
64
|
+
operation: newOperation,
|
|
65
|
+
duration: Date.now() - startTime,
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=simple-job-executor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"simple-job-executor.js","sourceRoot":"","sources":["../../../src/executor/simple-job-executor.ts"],"names":[],"mappings":"AAOA;;GAEG;AACH,MAAM,OAAO,iBAAiB;IAElB;IACA;IACA;IAHV,YACU,QAAgC,EAChC,eAAiC,EACjC,gBAA2C;QAF3C,aAAQ,GAAR,QAAQ,CAAwB;QAChC,oBAAe,GAAf,eAAe,CAAkB;QACjC,qBAAgB,GAAhB,gBAAgB,CAA2B;IAClD,CAAC;IAEJ;;OAEG;IACH,KAAK,CAAC,UAAU,CAAC,GAAQ;QACvB,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAE7B,IAAI,QAAoB,CAAC;QACzB,IAAI,CAAC;YACH,QAAQ,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAC5D,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,GAAG;gBACH,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBAChE,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;aACjC,CAAC;QACJ,CAAC;QAED,IAAI,MAA2B,CAAC;QAChC,IAAI,CAAC;YACH,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QACjE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,GAAG;gBACH,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBAChE,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;aACjC,CAAC;QACJ,CAAC;QAED,MAAM,eAAe,GAAG,MAAM,CAAC,OAAO,CACpC,QAAsB,EACtB,GAAG,CAAC,SAAS,CAAC,MAAM,CACrB,CAAC;QAEF,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,IAAI,QAAQ,CAAC;QACpC,MAAM,UAAU,GAAG,eAAe,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QACrD,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC5B,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;QACxD,CAAC;QAED,MAAM,YAAY,GAAG,UAAU,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAEvD,wCAAwC;QACxC,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,gBAAgB,CAAC,qBAAqB,CAC/C,GAAG,CAAC,UAAU,EACd,CAAC,YAAY,CAAC,EACd,eAAe,CAChB,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,GAAG;gBACH,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBAChE,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;aACjC,CAAC;QACJ,CAAC;QAED,OAAO;YACL,GAAG;YACH,OAAO,EAAE,IAAI;YACb,SAAS,EAAE,YAAY;YACvB,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;SACjC,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -7,12 +7,14 @@ export type JobResult = {
|
|
|
7
7
|
job: Job;
|
|
8
8
|
/** Whether the job executed successfully */
|
|
9
9
|
success: boolean;
|
|
10
|
-
/** Error
|
|
11
|
-
error?:
|
|
10
|
+
/** Error if the job failed */
|
|
11
|
+
error?: Error;
|
|
12
|
+
/** The operation generated from the action (if successful) */
|
|
13
|
+
operation?: any;
|
|
12
14
|
/** Timestamp when the job execution completed */
|
|
13
|
-
completedAt
|
|
15
|
+
completedAt?: string;
|
|
14
16
|
/** Duration of job execution in milliseconds */
|
|
15
|
-
duration
|
|
17
|
+
duration?: number;
|
|
16
18
|
/** Any additional metadata from the execution */
|
|
17
19
|
metadata?: Record<string, any>;
|
|
18
20
|
};
|
|
@@ -23,11 +25,11 @@ export type JobExecutorConfig = {
|
|
|
23
25
|
/** Maximum number of concurrent jobs to execute */
|
|
24
26
|
maxConcurrency?: number;
|
|
25
27
|
/** Maximum time in milliseconds a job can run before being considered timed out */
|
|
26
|
-
|
|
28
|
+
jobTimeoutMs?: number;
|
|
27
29
|
/** Base delay in milliseconds for exponential backoff retries */
|
|
28
|
-
|
|
30
|
+
retryBaseDelayMs?: number;
|
|
29
31
|
/** Maximum delay in milliseconds for exponential backoff retries */
|
|
30
|
-
|
|
32
|
+
retryMaxDelayMs?: number;
|
|
31
33
|
};
|
|
32
34
|
/**
|
|
33
35
|
* Event types for the job executor
|
|
@@ -64,4 +66,17 @@ export type ExecutorStoppedEvent = {
|
|
|
64
66
|
stoppedAt: string;
|
|
65
67
|
graceful: boolean;
|
|
66
68
|
};
|
|
69
|
+
/**
|
|
70
|
+
* Status information for the job executor manager
|
|
71
|
+
*/
|
|
72
|
+
export type ExecutorManagerStatus = {
|
|
73
|
+
/** Whether the manager is currently running */
|
|
74
|
+
isRunning: boolean;
|
|
75
|
+
/** Number of executor instances managed */
|
|
76
|
+
numExecutors: number;
|
|
77
|
+
/** Number of jobs currently being processed */
|
|
78
|
+
activeJobs: number;
|
|
79
|
+
/** Total number of jobs processed since start */
|
|
80
|
+
totalJobsProcessed: number;
|
|
81
|
+
};
|
|
67
82
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/executor/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,GAAG,EAAE,MAAM,mBAAmB,CAAC;AAE7C;;GAEG;AACH,MAAM,MAAM,SAAS,GAAG;IACtB,gCAAgC;IAChC,GAAG,EAAE,GAAG,CAAC;IAET,4CAA4C;IAC5C,OAAO,EAAE,OAAO,CAAC;IAEjB,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/executor/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,GAAG,EAAE,MAAM,mBAAmB,CAAC;AAE7C;;GAEG;AACH,MAAM,MAAM,SAAS,GAAG;IACtB,gCAAgC;IAChC,GAAG,EAAE,GAAG,CAAC;IAET,4CAA4C;IAC5C,OAAO,EAAE,OAAO,CAAC;IAEjB,8BAA8B;IAC9B,KAAK,CAAC,EAAE,KAAK,CAAC;IAEd,8DAA8D;IAC9D,SAAS,CAAC,EAAE,GAAG,CAAC;IAEhB,iDAAiD;IACjD,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,gDAAgD;IAChD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,iDAAiD;IACjD,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAChC,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,iBAAiB,GAAG;IAC9B,mDAAmD;IACnD,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB,mFAAmF;IACnF,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB,iEAAiE;IACjE,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B,oEAAoE;IACpE,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,qBAAqB;;;;;;CAMxB,CAAC;AAEX;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG;IAC5B,GAAG,EAAE,GAAG,CAAC;IACT,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,GAAG,EAAE,GAAG,CAAC;IACT,MAAM,EAAE,SAAS,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,GAAG,EAAE,GAAG,CAAC;IACT,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,MAAM,EAAE,iBAAiB,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;CACnB,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,qBAAqB,GAAG;IAClC,+CAA+C;IAC/C,SAAS,EAAE,OAAO,CAAC;IAEnB,2CAA2C;IAC3C,YAAY,EAAE,MAAM,CAAC;IAErB,+CAA+C;IAC/C,UAAU,EAAE,MAAM,CAAC;IAEnB,iDAAiD;IACjD,kBAAkB,EAAE,MAAM,CAAC;CAC5B,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/executor/types.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/executor/types.ts"],"names":[],"mappings":"AA6CA;;GAEG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,WAAW,EAAE,KAAK;IAClB,aAAa,EAAE,KAAK;IACpB,UAAU,EAAE,KAAK;IACjB,gBAAgB,EAAE,KAAK;IACvB,gBAAgB,EAAE,KAAK;CACf,CAAC"}
|
package/dist/src/index.d.ts
CHANGED
|
@@ -8,5 +8,9 @@ export { EventBusAggregateError, type Unsubscribe } from "./events/types.js";
|
|
|
8
8
|
export { type IQueue } from "./queue/interfaces.js";
|
|
9
9
|
export { InMemoryQueue } from "./queue/queue.js";
|
|
10
10
|
export { QueueEventTypes, type Job, type JobAvailableEvent, } from "./queue/types.js";
|
|
11
|
-
export {
|
|
11
|
+
export { type IJobExecutor, type IJobExecutorManager, } from "./executor/interfaces.js";
|
|
12
|
+
export { SimpleJobExecutorManager, type JobExecutorFactory, } from "./executor/simple-job-executor-manager.js";
|
|
13
|
+
export { SimpleJobExecutor as InMemoryJobExecutor, SimpleJobExecutor, } from "./executor/simple-job-executor.js";
|
|
14
|
+
export { JobExecutorEventTypes, type ExecutorStartedEvent, type ExecutorStoppedEvent, type JobCompletedEvent, type JobExecutorConfig, type JobFailedEvent, type JobResult, type JobStartedEvent, } from "./executor/types.js";
|
|
15
|
+
export { DocumentModelRegistry, DuplicateModuleError, InvalidModuleError, ModuleNotFoundError, type IDocumentModelRegistry, } from "./registry/index.js";
|
|
12
16
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/src/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,2BAA2B,EAAE,MAAM,uBAAuB,CAAC;AACpE,OAAO,EACL,SAAS,EACT,eAAe,EACf,sBAAsB,EACtB,KAAK,OAAO,EACZ,KAAK,YAAY,EACjB,KAAK,aAAa,EAClB,KAAK,YAAY,EACjB,KAAK,cAAc,EACnB,KAAK,UAAU,GAChB,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,sBAAsB,EAAE,KAAK,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAG7E,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EACL,eAAe,EACf,KAAK,GAAG,EACR,KAAK,iBAAiB,GACvB,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EACL,mBAAmB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,2BAA2B,EAAE,MAAM,uBAAuB,CAAC;AACpE,OAAO,EACL,SAAS,EACT,eAAe,EACf,sBAAsB,EACtB,KAAK,OAAO,EACZ,KAAK,YAAY,EACjB,KAAK,aAAa,EAClB,KAAK,YAAY,EACjB,KAAK,cAAc,EACnB,KAAK,UAAU,GAChB,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,sBAAsB,EAAE,KAAK,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAG7E,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EACL,eAAe,EACf,KAAK,GAAG,EACR,KAAK,iBAAiB,GACvB,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EACL,KAAK,YAAY,EACjB,KAAK,mBAAmB,GACzB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,wBAAwB,EACxB,KAAK,kBAAkB,GACxB,MAAM,2CAA2C,CAAC;AACnD,OAAO,EACL,iBAAiB,IAAI,mBAAmB,EACxC,iBAAiB,GAClB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EACL,qBAAqB,EACrB,KAAK,oBAAoB,EACzB,KAAK,oBAAoB,EACzB,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,EACtB,KAAK,cAAc,EACnB,KAAK,SAAS,EACd,KAAK,eAAe,GACrB,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EACL,qBAAqB,EACrB,oBAAoB,EACpB,kBAAkB,EAClB,mBAAmB,EACnB,KAAK,sBAAsB,GAC5B,MAAM,qBAAqB,CAAC"}
|
package/dist/src/index.js
CHANGED
|
@@ -6,6 +6,9 @@ export { EventBus } from "./events/event-bus.js";
|
|
|
6
6
|
export { EventBusAggregateError } from "./events/types.js";
|
|
7
7
|
export { InMemoryQueue } from "./queue/queue.js";
|
|
8
8
|
export { QueueEventTypes, } from "./queue/types.js";
|
|
9
|
-
|
|
10
|
-
export { InMemoryJobExecutor,
|
|
9
|
+
export { SimpleJobExecutorManager, } from "./executor/simple-job-executor-manager.js";
|
|
10
|
+
export { SimpleJobExecutor as InMemoryJobExecutor, SimpleJobExecutor, } from "./executor/simple-job-executor.js";
|
|
11
|
+
export { JobExecutorEventTypes, } from "./executor/types.js";
|
|
12
|
+
// Document Model Registry
|
|
13
|
+
export { DocumentModelRegistry, DuplicateModuleError, InvalidModuleError, ModuleNotFoundError, } from "./registry/index.js";
|
|
11
14
|
//# sourceMappingURL=index.js.map
|
package/dist/src/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,2BAA2B,EAAE,MAAM,uBAAuB,CAAC;AACpE,OAAO,EACL,SAAS,EACT,eAAe,EACf,sBAAsB,GAOvB,MAAM,mBAAmB,CAAC;AAE3B,YAAY;AACZ,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAEjD,OAAO,EAAE,sBAAsB,EAAoB,MAAM,mBAAmB,CAAC;AAI7E,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EACL,eAAe,GAGhB,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,2BAA2B,EAAE,MAAM,uBAAuB,CAAC;AACpE,OAAO,EACL,SAAS,EACT,eAAe,EACf,sBAAsB,GAOvB,MAAM,mBAAmB,CAAC;AAE3B,YAAY;AACZ,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAEjD,OAAO,EAAE,sBAAsB,EAAoB,MAAM,mBAAmB,CAAC;AAI7E,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EACL,eAAe,GAGhB,MAAM,kBAAkB,CAAC;AAO1B,OAAO,EACL,wBAAwB,GAEzB,MAAM,2CAA2C,CAAC;AACnD,OAAO,EACL,iBAAiB,IAAI,mBAAmB,EACxC,iBAAiB,GAClB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EACL,qBAAqB,GAQtB,MAAM,qBAAqB,CAAC;AAE7B,0BAA0B;AAC1B,OAAO,EACL,qBAAqB,EACrB,oBAAoB,EACpB,kBAAkB,EAClB,mBAAmB,GAEpB,MAAM,qBAAqB,CAAC"}
|
|
@@ -58,5 +58,30 @@ export interface IQueue {
|
|
|
58
58
|
* @returns Promise that resolves when all queues are cleared
|
|
59
59
|
*/
|
|
60
60
|
clearAll(): Promise<void>;
|
|
61
|
+
/**
|
|
62
|
+
* Check if there are any jobs in the queue.
|
|
63
|
+
* @returns Promise that resolves to true if there are jobs, false otherwise
|
|
64
|
+
*/
|
|
65
|
+
hasJobs(): Promise<boolean>;
|
|
66
|
+
/**
|
|
67
|
+
* Mark a job as completed.
|
|
68
|
+
* @param jobId - The ID of the job to mark as completed
|
|
69
|
+
* @returns Promise that resolves when the job is marked as completed
|
|
70
|
+
*/
|
|
71
|
+
completeJob(jobId: string): Promise<void>;
|
|
72
|
+
/**
|
|
73
|
+
* Mark a job as failed.
|
|
74
|
+
* @param jobId - The ID of the job to mark as failed
|
|
75
|
+
* @param error - Optional error message
|
|
76
|
+
* @returns Promise that resolves when the job is marked as failed
|
|
77
|
+
*/
|
|
78
|
+
failJob(jobId: string, error?: string): Promise<void>;
|
|
79
|
+
/**
|
|
80
|
+
* Retry a failed job.
|
|
81
|
+
* @param jobId - The ID of the job to retry
|
|
82
|
+
* @param error - Optional error message from the failure
|
|
83
|
+
* @returns Promise that resolves when the job is requeued for retry
|
|
84
|
+
*/
|
|
85
|
+
retryJob(jobId: string, error?: string): Promise<void>;
|
|
61
86
|
}
|
|
62
87
|
//# sourceMappingURL=interfaces.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interfaces.d.ts","sourceRoot":"","sources":["../../../src/queue/interfaces.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,GAAG,EAAE,MAAM,YAAY,CAAC;AAEtC;;;;GAIG;AACH,MAAM,WAAW,MAAM;IACrB;;;;;;OAMG;IACH,OAAO,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEjC;;;;;;OAMG;IACH,OAAO,CACL,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC;IAEvB;;;OAGG;IACH,WAAW,IAAI,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC;IAEnC;;;;;;OAMG;IACH,IAAI,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAEzE;;;OAGG;IACH,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAE7B;;;;OAIG;IACH,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAExC;;;;;;OAMG;IACH,KAAK,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAExE;;;OAGG;IACH,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"interfaces.d.ts","sourceRoot":"","sources":["../../../src/queue/interfaces.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,GAAG,EAAE,MAAM,YAAY,CAAC;AAEtC;;;;GAIG;AACH,MAAM,WAAW,MAAM;IACrB;;;;;;OAMG;IACH,OAAO,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEjC;;;;;;OAMG;IACH,OAAO,CACL,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC;IAEvB;;;OAGG;IACH,WAAW,IAAI,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC;IAEnC;;;;;;OAMG;IACH,IAAI,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAEzE;;;OAGG;IACH,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAE7B;;;;OAIG;IACH,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAExC;;;;;;OAMG;IACH,KAAK,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAExE;;;OAGG;IACH,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAE1B;;;OAGG;IACH,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IAE5B;;;;OAIG;IACH,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE1C;;;;;OAKG;IACH,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEtD;;;;;OAKG;IACH,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACxD"}
|
|
@@ -4,10 +4,16 @@ import { type 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;
|
|
12
18
|
constructor(eventBus: IEventBus);
|
|
13
19
|
/**
|
|
@@ -18,6 +24,26 @@ export declare class InMemoryQueue implements IQueue {
|
|
|
18
24
|
* Gets or creates a queue for the given key
|
|
19
25
|
*/
|
|
20
26
|
private getQueue;
|
|
27
|
+
/**
|
|
28
|
+
* Check if a document has any jobs currently executing
|
|
29
|
+
*/
|
|
30
|
+
private isDocumentExecuting;
|
|
31
|
+
/**
|
|
32
|
+
* Mark a job as executing for its document
|
|
33
|
+
*/
|
|
34
|
+
private markJobExecuting;
|
|
35
|
+
/**
|
|
36
|
+
* Mark a job as no longer executing for its document
|
|
37
|
+
*/
|
|
38
|
+
private markJobComplete;
|
|
39
|
+
/**
|
|
40
|
+
* Check if all dependencies for a job have been completed
|
|
41
|
+
*/
|
|
42
|
+
private areDependenciesMet;
|
|
43
|
+
/**
|
|
44
|
+
* Get the next job that has all its dependencies met
|
|
45
|
+
*/
|
|
46
|
+
private getNextJobWithMetDependencies;
|
|
21
47
|
enqueue(job: Job): Promise<void>;
|
|
22
48
|
dequeue(documentId: string, scope: string, branch: string): Promise<Job | null>;
|
|
23
49
|
dequeueNext(): Promise<Job | null>;
|
|
@@ -26,5 +52,9 @@ export declare class InMemoryQueue implements IQueue {
|
|
|
26
52
|
remove(jobId: string): Promise<boolean>;
|
|
27
53
|
clear(documentId: string, scope: string, branch: string): Promise<void>;
|
|
28
54
|
clearAll(): Promise<void>;
|
|
55
|
+
hasJobs(): Promise<boolean>;
|
|
56
|
+
completeJob(jobId: string): Promise<void>;
|
|
57
|
+
failJob(jobId: string, error?: string): Promise<void>;
|
|
58
|
+
retryJob(jobId: string, error?: string): Promise<void>;
|
|
29
59
|
}
|
|
30
60
|
//# 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,KAAK,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAmB,KAAK,GAAG,EAA0B,MAAM,YAAY,CAAC;AAE/E
|
|
1
|
+
{"version":3,"file":"queue.d.ts","sourceRoot":"","sources":["../../../src/queue/queue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAmB,KAAK,GAAG,EAA0B,MAAM,YAAY,CAAC;AAE/E;;;;;GAKG;AACH,qBAAa,aAAc,YAAW,MAAM;IAQ9B,OAAO,CAAC,QAAQ;IAP5B,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;gBAEtB,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;IAsBhC,OAAO,CACX,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC;IA8BhB,WAAW,IAAI,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC;IAoClC,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;IAgBzC,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAarD,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAyC7D"}
|
package/dist/src/queue/queue.js
CHANGED
|
@@ -2,11 +2,17 @@ import { QueueEventTypes } from "./types.js";
|
|
|
2
2
|
/**
|
|
3
3
|
* In-memory implementation of the IQueue interface.
|
|
4
4
|
* Organizes jobs by documentId, scope, and branch to ensure proper ordering.
|
|
5
|
+
* Ensures serial execution per document by tracking executing jobs.
|
|
6
|
+
* Implements dependency management through queue hints.
|
|
5
7
|
*/
|
|
6
8
|
export class InMemoryQueue {
|
|
7
9
|
eventBus;
|
|
8
10
|
queues = new Map();
|
|
9
|
-
|
|
11
|
+
jobIdToQueueKey = new Map();
|
|
12
|
+
docIdToJobId = new Map();
|
|
13
|
+
jobIdToDocId = new Map();
|
|
14
|
+
completedJobs = new Set();
|
|
15
|
+
jobIndex = new Map();
|
|
10
16
|
constructor(eventBus) {
|
|
11
17
|
this.eventBus = eventBus;
|
|
12
18
|
}
|
|
@@ -27,13 +33,66 @@ export class InMemoryQueue {
|
|
|
27
33
|
}
|
|
28
34
|
return queue;
|
|
29
35
|
}
|
|
36
|
+
/**
|
|
37
|
+
* Check if a document has any jobs currently executing
|
|
38
|
+
*/
|
|
39
|
+
isDocumentExecuting(documentId) {
|
|
40
|
+
const executingSet = this.docIdToJobId.get(documentId);
|
|
41
|
+
return executingSet ? executingSet.size > 0 : false;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Mark a job as executing for its document
|
|
45
|
+
*/
|
|
46
|
+
markJobExecuting(job) {
|
|
47
|
+
let executingSet = this.docIdToJobId.get(job.documentId);
|
|
48
|
+
if (!executingSet) {
|
|
49
|
+
executingSet = new Set();
|
|
50
|
+
this.docIdToJobId.set(job.documentId, executingSet);
|
|
51
|
+
}
|
|
52
|
+
executingSet.add(job.id);
|
|
53
|
+
this.jobIdToDocId.set(job.id, job.documentId);
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Mark a job as no longer executing for its document
|
|
57
|
+
*/
|
|
58
|
+
markJobComplete(jobId, documentId) {
|
|
59
|
+
const executingSet = this.docIdToJobId.get(documentId);
|
|
60
|
+
if (executingSet) {
|
|
61
|
+
executingSet.delete(jobId);
|
|
62
|
+
if (executingSet.size === 0) {
|
|
63
|
+
this.docIdToJobId.delete(documentId);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
this.jobIdToDocId.delete(jobId);
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Check if all dependencies for a job have been completed
|
|
70
|
+
*/
|
|
71
|
+
areDependenciesMet(job) {
|
|
72
|
+
if (!job.queueHint || job.queueHint.length === 0) {
|
|
73
|
+
return true;
|
|
74
|
+
}
|
|
75
|
+
return job.queueHint.every((depId) => this.completedJobs.has(depId));
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Get the next job that has all its dependencies met
|
|
79
|
+
*/
|
|
80
|
+
getNextJobWithMetDependencies(queue) {
|
|
81
|
+
for (const job of queue) {
|
|
82
|
+
if (this.areDependenciesMet(job)) {
|
|
83
|
+
return job;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
return null;
|
|
87
|
+
}
|
|
30
88
|
async enqueue(job) {
|
|
31
89
|
const queueKey = this.createQueueKey(job.documentId, job.scope, job.branch);
|
|
32
90
|
const queue = this.getQueue(queueKey);
|
|
33
91
|
// Add job to the end of the queue (FIFO)
|
|
34
92
|
queue.push(job);
|
|
35
|
-
// Track job location for removal
|
|
36
|
-
this.
|
|
93
|
+
// Track job location for removal and dependency resolution
|
|
94
|
+
this.jobIdToQueueKey.set(job.id, queueKey);
|
|
95
|
+
this.jobIndex.set(job.id, job);
|
|
37
96
|
// Emit job available event
|
|
38
97
|
const eventData = {
|
|
39
98
|
documentId: job.documentId,
|
|
@@ -49,9 +108,16 @@ export class InMemoryQueue {
|
|
|
49
108
|
if (!queue || queue.length === 0) {
|
|
50
109
|
return null;
|
|
51
110
|
}
|
|
52
|
-
//
|
|
53
|
-
const job =
|
|
111
|
+
// Find the first job with met dependencies
|
|
112
|
+
const job = this.getNextJobWithMetDependencies(queue);
|
|
113
|
+
if (!job) {
|
|
114
|
+
return null; // No job with met dependencies
|
|
115
|
+
}
|
|
116
|
+
// Remove job from queue
|
|
117
|
+
const jobIndex = queue.indexOf(job);
|
|
118
|
+
queue.splice(jobIndex, 1);
|
|
54
119
|
// Remove from job index
|
|
120
|
+
this.jobIdToQueueKey.delete(job.id);
|
|
55
121
|
this.jobIndex.delete(job.id);
|
|
56
122
|
// Clean up empty queue
|
|
57
123
|
if (queue.length === 0) {
|
|
@@ -60,17 +126,30 @@ export class InMemoryQueue {
|
|
|
60
126
|
return job;
|
|
61
127
|
}
|
|
62
128
|
async dequeueNext() {
|
|
63
|
-
// Find the first non-empty queue
|
|
129
|
+
// Find the first non-empty queue for a document that's not currently executing
|
|
64
130
|
for (const [queueKey, queue] of this.queues.entries()) {
|
|
65
131
|
if (queue.length > 0) {
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
132
|
+
// Find the first job with met dependencies
|
|
133
|
+
const job = this.getNextJobWithMetDependencies(queue);
|
|
134
|
+
if (!job) {
|
|
135
|
+
continue; // No job with met dependencies in this queue
|
|
136
|
+
}
|
|
137
|
+
// Only dequeue if the document is not currently executing jobs
|
|
138
|
+
if (!this.isDocumentExecuting(job.documentId)) {
|
|
139
|
+
// Remove job from queue
|
|
140
|
+
const jobIdx = queue.indexOf(job);
|
|
141
|
+
queue.splice(jobIdx, 1);
|
|
142
|
+
// Remove from job index
|
|
143
|
+
this.jobIdToQueueKey.delete(job.id);
|
|
144
|
+
this.jobIndex.delete(job.id);
|
|
145
|
+
// Mark this job as executing for its document
|
|
146
|
+
this.markJobExecuting(job);
|
|
147
|
+
// Clean up empty queue
|
|
148
|
+
if (queue.length === 0) {
|
|
149
|
+
this.queues.delete(queueKey);
|
|
150
|
+
}
|
|
151
|
+
return job;
|
|
72
152
|
}
|
|
73
|
-
return job;
|
|
74
153
|
}
|
|
75
154
|
}
|
|
76
155
|
return null;
|
|
@@ -88,25 +167,28 @@ export class InMemoryQueue {
|
|
|
88
167
|
return total;
|
|
89
168
|
}
|
|
90
169
|
async remove(jobId) {
|
|
91
|
-
const queueKey = this.
|
|
170
|
+
const queueKey = this.jobIdToQueueKey.get(jobId);
|
|
92
171
|
if (!queueKey) {
|
|
93
172
|
return false;
|
|
94
173
|
}
|
|
95
174
|
const queue = this.queues.get(queueKey);
|
|
96
175
|
if (!queue) {
|
|
97
176
|
// Clean up orphaned index entry
|
|
177
|
+
this.jobIdToQueueKey.delete(jobId);
|
|
98
178
|
this.jobIndex.delete(jobId);
|
|
99
179
|
return false;
|
|
100
180
|
}
|
|
101
|
-
const
|
|
102
|
-
if (
|
|
181
|
+
const jobIdx = queue.findIndex((job) => job.id === jobId);
|
|
182
|
+
if (jobIdx === -1) {
|
|
103
183
|
// Clean up orphaned index entry
|
|
184
|
+
this.jobIdToQueueKey.delete(jobId);
|
|
104
185
|
this.jobIndex.delete(jobId);
|
|
105
186
|
return false;
|
|
106
187
|
}
|
|
107
188
|
// Remove job from queue
|
|
108
|
-
queue.splice(
|
|
189
|
+
queue.splice(jobIdx, 1);
|
|
109
190
|
// Remove from job index
|
|
191
|
+
this.jobIdToQueueKey.delete(jobId);
|
|
110
192
|
this.jobIndex.delete(jobId);
|
|
111
193
|
// Clean up empty queue
|
|
112
194
|
if (queue.length === 0) {
|
|
@@ -120,6 +202,7 @@ export class InMemoryQueue {
|
|
|
120
202
|
if (queue) {
|
|
121
203
|
// Remove all jobs from the job index
|
|
122
204
|
for (const job of queue) {
|
|
205
|
+
this.jobIdToQueueKey.delete(job.id);
|
|
123
206
|
this.jobIndex.delete(job.id);
|
|
124
207
|
}
|
|
125
208
|
// Remove the queue
|
|
@@ -128,9 +211,73 @@ export class InMemoryQueue {
|
|
|
128
211
|
}
|
|
129
212
|
async clearAll() {
|
|
130
213
|
// Clear all job indices
|
|
214
|
+
this.jobIdToQueueKey.clear();
|
|
131
215
|
this.jobIndex.clear();
|
|
216
|
+
this.completedJobs.clear();
|
|
132
217
|
// Clear all queues
|
|
133
218
|
this.queues.clear();
|
|
134
219
|
}
|
|
220
|
+
async hasJobs() {
|
|
221
|
+
return (this.queues.size > 0 &&
|
|
222
|
+
Array.from(this.queues.values()).some((q) => q.length > 0));
|
|
223
|
+
}
|
|
224
|
+
async completeJob(jobId) {
|
|
225
|
+
// Get the documentId for the executing job
|
|
226
|
+
const documentId = this.jobIdToDocId.get(jobId);
|
|
227
|
+
if (documentId) {
|
|
228
|
+
// Mark the job as no longer executing
|
|
229
|
+
this.markJobComplete(jobId, documentId);
|
|
230
|
+
}
|
|
231
|
+
// Track the job as completed for dependency resolution
|
|
232
|
+
this.completedJobs.add(jobId);
|
|
233
|
+
// For in-memory queue, completing just removes the job
|
|
234
|
+
// In a persistent queue, this would update the job status
|
|
235
|
+
await this.remove(jobId);
|
|
236
|
+
}
|
|
237
|
+
async failJob(jobId, error) {
|
|
238
|
+
// Get the documentId for the executing job
|
|
239
|
+
const documentId = this.jobIdToDocId.get(jobId);
|
|
240
|
+
if (documentId) {
|
|
241
|
+
// Mark the job as no longer executing
|
|
242
|
+
this.markJobComplete(jobId, documentId);
|
|
243
|
+
}
|
|
244
|
+
// For in-memory queue, failing just removes the job
|
|
245
|
+
// In a persistent queue, this would update the job status and store the error
|
|
246
|
+
await this.remove(jobId);
|
|
247
|
+
}
|
|
248
|
+
async retryJob(jobId, error) {
|
|
249
|
+
// Get the documentId for the executing job and mark it as complete
|
|
250
|
+
const documentId = this.jobIdToDocId.get(jobId);
|
|
251
|
+
if (documentId) {
|
|
252
|
+
// Mark the job as no longer executing
|
|
253
|
+
this.markJobComplete(jobId, documentId);
|
|
254
|
+
}
|
|
255
|
+
// For in-memory queue, we need to find the job and re-enqueue it
|
|
256
|
+
// In a real implementation, this would update retry count and delay
|
|
257
|
+
const queueKey = this.jobIdToQueueKey.get(jobId);
|
|
258
|
+
if (!queueKey) {
|
|
259
|
+
return;
|
|
260
|
+
}
|
|
261
|
+
const queue = this.queues.get(queueKey);
|
|
262
|
+
if (!queue) {
|
|
263
|
+
return;
|
|
264
|
+
}
|
|
265
|
+
const jobIndex = queue.findIndex((job) => job.id === jobId);
|
|
266
|
+
if (jobIndex === -1) {
|
|
267
|
+
return;
|
|
268
|
+
}
|
|
269
|
+
const job = queue[jobIndex];
|
|
270
|
+
// Update retry count
|
|
271
|
+
const updatedJob = {
|
|
272
|
+
...job,
|
|
273
|
+
retryCount: (job.retryCount || 0) + 1,
|
|
274
|
+
lastError: error,
|
|
275
|
+
};
|
|
276
|
+
// Remove old job
|
|
277
|
+
queue.splice(jobIndex, 1);
|
|
278
|
+
this.jobIdToQueueKey.delete(jobId);
|
|
279
|
+
// Re-enqueue with updated retry count
|
|
280
|
+
await this.enqueue(updatedJob);
|
|
281
|
+
}
|
|
135
282
|
}
|
|
136
283
|
//# sourceMappingURL=queue.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"queue.js","sourceRoot":"","sources":["../../../src/queue/queue.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAoC,MAAM,YAAY,CAAC;AAE/E
|
|
1
|
+
{"version":3,"file":"queue.js","sourceRoot":"","sources":["../../../src/queue/queue.ts"],"names":[],"mappings":"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"}
|
|
@@ -15,10 +15,14 @@ export type Job = {
|
|
|
15
15
|
operation: Operation;
|
|
16
16
|
/** Timestamp when the job was created */
|
|
17
17
|
createdAt: string;
|
|
18
|
+
/** The hint for the queue to use for ordering the job */
|
|
19
|
+
queueHint: string[];
|
|
18
20
|
/** Number of retry attempts */
|
|
19
21
|
retryCount?: number;
|
|
20
22
|
/** Maximum number of retries allowed */
|
|
21
23
|
maxRetries?: number;
|
|
24
|
+
/** Last error message if job failed */
|
|
25
|
+
lastError?: string;
|
|
22
26
|
};
|
|
23
27
|
/**
|
|
24
28
|
* 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,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEhD;;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;
|
|
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,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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/queue/types.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/queue/types.ts"],"names":[],"mappings":"AAqCA;;GAEG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,aAAa,EAAE,KAAK;CACZ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reactor.d.ts","sourceRoot":"","sources":["../../src/reactor.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"reactor.d.ts","sourceRoot":"","sources":["../../src/reactor.ts"],"names":[],"mappings":"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"}
|
package/dist/src/reactor.js
CHANGED
|
@@ -274,6 +274,7 @@ export class Reactor {
|
|
|
274
274
|
action: action,
|
|
275
275
|
},
|
|
276
276
|
createdAt: new Date().toISOString(),
|
|
277
|
+
queueHint: [],
|
|
277
278
|
maxRetries: 3,
|
|
278
279
|
}));
|
|
279
280
|
// Enqueue all jobs
|
|
@@ -388,10 +389,9 @@ export class Reactor {
|
|
|
388
389
|
*/
|
|
389
390
|
async ensureJobExecutorRunning() {
|
|
390
391
|
if (!this.jobExecutorStarted) {
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
});
|
|
392
|
+
// For new simplified executor, no start method needed
|
|
393
|
+
// The executor just executes jobs when called
|
|
394
|
+
// The manager (if used) handles listening to queue events
|
|
395
395
|
this.jobExecutorStarted = true;
|
|
396
396
|
}
|
|
397
397
|
}
|