@auto-engineer/pipeline 1.65.0 → 1.67.0
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/.turbo/turbo-build.log +1 -1
- package/.turbo/turbo-test.log +6 -6
- package/.turbo/turbo-type-check.log +1 -1
- package/CHANGELOG.md +135 -0
- package/dist/src/builder/define-v2.d.ts +101 -0
- package/dist/src/builder/define-v2.d.ts.map +1 -0
- package/dist/src/builder/define-v2.js +209 -0
- package/dist/src/builder/define-v2.js.map +1 -0
- package/dist/src/engine/command-dispatcher.d.ts +31 -0
- package/dist/src/engine/command-dispatcher.d.ts.map +1 -0
- package/dist/src/engine/command-dispatcher.js +26 -0
- package/dist/src/engine/command-dispatcher.js.map +1 -0
- package/dist/src/engine/event-router.d.ts +21 -0
- package/dist/src/engine/event-router.d.ts.map +1 -0
- package/dist/src/engine/event-router.js +22 -0
- package/dist/src/engine/event-router.js.map +1 -0
- package/dist/src/engine/index.d.ts +15 -0
- package/dist/src/engine/index.d.ts.map +1 -0
- package/dist/src/engine/index.js +15 -0
- package/dist/src/engine/index.js.map +1 -0
- package/dist/src/engine/pipeline-engine.d.ts +37 -0
- package/dist/src/engine/pipeline-engine.d.ts.map +1 -0
- package/dist/src/engine/pipeline-engine.js +53 -0
- package/dist/src/engine/pipeline-engine.js.map +1 -0
- package/dist/src/engine/projections/item-status.d.ts +9 -0
- package/dist/src/engine/projections/item-status.d.ts.map +1 -0
- package/dist/src/engine/projections/item-status.js +9 -0
- package/dist/src/engine/projections/item-status.js.map +1 -0
- package/dist/src/engine/projections/latest-run.d.ts +9 -0
- package/dist/src/engine/projections/latest-run.d.ts.map +1 -0
- package/dist/src/engine/projections/latest-run.js +9 -0
- package/dist/src/engine/projections/latest-run.js.map +1 -0
- package/dist/src/engine/projections/message-log.d.ts +9 -0
- package/dist/src/engine/projections/message-log.d.ts.map +1 -0
- package/dist/src/engine/projections/message-log.js +10 -0
- package/dist/src/engine/projections/message-log.js.map +1 -0
- package/dist/src/engine/projections/node-status.d.ts +9 -0
- package/dist/src/engine/projections/node-status.d.ts.map +1 -0
- package/dist/src/engine/projections/node-status.js +9 -0
- package/dist/src/engine/projections/node-status.js.map +1 -0
- package/dist/src/engine/projections/stats.d.ts +9 -0
- package/dist/src/engine/projections/stats.d.ts.map +1 -0
- package/dist/src/engine/projections/stats.js +9 -0
- package/dist/src/engine/projections/stats.js.map +1 -0
- package/dist/src/engine/sqlite-consumer.d.ts +11 -0
- package/dist/src/engine/sqlite-consumer.d.ts.map +1 -0
- package/dist/src/engine/sqlite-consumer.js +27 -0
- package/dist/src/engine/sqlite-consumer.js.map +1 -0
- package/dist/src/engine/sqlite-store.d.ts +10 -0
- package/dist/src/engine/sqlite-store.d.ts.map +1 -0
- package/dist/src/engine/sqlite-store.js +14 -0
- package/dist/src/engine/sqlite-store.js.map +1 -0
- package/dist/src/engine/workflow-processor.d.ts +20 -0
- package/dist/src/engine/workflow-processor.d.ts.map +1 -0
- package/dist/src/engine/workflow-processor.js +36 -0
- package/dist/src/engine/workflow-processor.js.map +1 -0
- package/dist/src/engine/workflows/await-workflow.d.ts +33 -0
- package/dist/src/engine/workflows/await-workflow.d.ts.map +1 -0
- package/dist/src/engine/workflows/await-workflow.js +45 -0
- package/dist/src/engine/workflows/await-workflow.js.map +1 -0
- package/dist/src/engine/workflows/phased-workflow.d.ts +64 -0
- package/dist/src/engine/workflows/phased-workflow.d.ts.map +1 -0
- package/dist/src/engine/workflows/phased-workflow.js +103 -0
- package/dist/src/engine/workflows/phased-workflow.js.map +1 -0
- package/dist/src/engine/workflows/settled-workflow.d.ts +62 -0
- package/dist/src/engine/workflows/settled-workflow.d.ts.map +1 -0
- package/dist/src/engine/workflows/settled-workflow.js +92 -0
- package/dist/src/engine/workflows/settled-workflow.js.map +1 -0
- package/dist/src/graph/types.d.ts +1 -1
- package/dist/src/graph/types.d.ts.map +1 -1
- package/dist/src/index.d.ts +2 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +2 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/server/pipeline-server-v2.d.ts +48 -0
- package/dist/src/server/pipeline-server-v2.d.ts.map +1 -0
- package/dist/src/server/pipeline-server-v2.js +61 -0
- package/dist/src/server/pipeline-server-v2.js.map +1 -0
- package/dist/src/server/pipeline-server.d.ts +5 -1
- package/dist/src/server/pipeline-server.d.ts.map +1 -1
- package/dist/src/server/pipeline-server.js +71 -10
- package/dist/src/server/pipeline-server.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/ketchup-plan.md +13 -0
- package/package.json +3 -3
- package/src/builder/define-v2.specs.ts +236 -0
- package/src/builder/define-v2.ts +351 -0
- package/src/engine/command-dispatcher.specs.ts +62 -0
- package/src/engine/command-dispatcher.ts +46 -0
- package/src/engine/event-router.specs.ts +75 -0
- package/src/engine/event-router.ts +36 -0
- package/src/engine/index.ts +39 -0
- package/src/engine/pipeline-engine-e2e.specs.ts +776 -0
- package/src/engine/pipeline-engine.integration.specs.ts +126 -0
- package/src/engine/pipeline-engine.specs.ts +70 -0
- package/src/engine/pipeline-engine.ts +82 -0
- package/src/engine/projections/item-status.ts +11 -0
- package/src/engine/projections/latest-run.ts +10 -0
- package/src/engine/projections/message-log.ts +11 -0
- package/src/engine/projections/node-status.ts +10 -0
- package/src/engine/projections/projections.specs.ts +176 -0
- package/src/engine/projections/stats.ts +10 -0
- package/src/engine/sqlite-consumer.specs.ts +42 -0
- package/src/engine/sqlite-consumer.ts +34 -0
- package/src/engine/sqlite-store.specs.ts +46 -0
- package/src/engine/sqlite-store.ts +21 -0
- package/src/engine/workflow-processor.specs.ts +37 -0
- package/src/engine/workflow-processor.ts +57 -0
- package/src/engine/workflows/await-workflow.specs.ts +104 -0
- package/src/engine/workflows/await-workflow.ts +66 -0
- package/src/engine/workflows/phased-workflow.specs.ts +383 -0
- package/src/engine/workflows/phased-workflow.ts +153 -0
- package/src/engine/workflows/settled-workflow.specs.ts +364 -0
- package/src/engine/workflows/settled-workflow.ts +139 -0
- package/src/graph/types.ts +1 -1
- package/src/index.ts +2 -0
- package/src/server/pipeline-server-v2.specs.ts +91 -0
- package/src/server/pipeline-server-v2.ts +70 -0
- package/src/server/pipeline-server.specs.ts +327 -134
- package/src/server/pipeline-server.ts +77 -11
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export function createEventRouter(dispatcher) {
|
|
2
|
+
const mappings = new Map();
|
|
3
|
+
return {
|
|
4
|
+
register(mapping) {
|
|
5
|
+
const existing = mappings.get(mapping.eventType) ?? [];
|
|
6
|
+
mappings.set(mapping.eventType, [...existing, ...mapping.commands]);
|
|
7
|
+
},
|
|
8
|
+
async route(event) {
|
|
9
|
+
const commands = mappings.get(event.type);
|
|
10
|
+
if (!commands) {
|
|
11
|
+
return [];
|
|
12
|
+
}
|
|
13
|
+
const commandPromises = commands.map((command) => {
|
|
14
|
+
const data = typeof command.data === 'function' ? command.data(event) : command.data;
|
|
15
|
+
return dispatcher.dispatch({ type: command.commandType, data });
|
|
16
|
+
});
|
|
17
|
+
const resultArrays = await Promise.all(commandPromises);
|
|
18
|
+
return resultArrays.flat();
|
|
19
|
+
},
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=event-router.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"event-router.js","sourceRoot":"","sources":["../../../src/engine/event-router.ts"],"names":[],"mappings":"AAYA,MAAM,UAAU,iBAAiB,CAAC,UAAsD;IACtF,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAmC,CAAC;IAE5D,OAAO;QACL,QAAQ,CAAC,OAAoB;YAC3B,MAAM,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;YACvD,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,GAAG,QAAQ,EAAE,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;QACtE,CAAC;QAED,KAAK,CAAC,KAAK,CAAC,KAAY;YACtB,MAAM,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC1C,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,OAAO,EAAE,CAAC;YACZ,CAAC;YAED,MAAM,eAAe,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE;gBAC/C,MAAM,IAAI,GAAG,OAAO,OAAO,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC;gBACrF,OAAO,UAAU,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;YAClE,CAAC,CAAC,CAAC;YACH,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;YACxD,OAAO,YAAY,CAAC,IAAI,EAAE,CAAC;QAC7B,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export { createCommandDispatcher, dispatchAndStore } from './command-dispatcher';
|
|
2
|
+
export { createEventRouter } from './event-router';
|
|
3
|
+
export { createPipelineEngine } from './pipeline-engine';
|
|
4
|
+
export { itemStatusProjection } from './projections/item-status';
|
|
5
|
+
export { latestRunProjection } from './projections/latest-run';
|
|
6
|
+
export { messageLogProjection } from './projections/message-log';
|
|
7
|
+
export { nodeStatusProjection } from './projections/node-status';
|
|
8
|
+
export { statsProjection } from './projections/stats';
|
|
9
|
+
export { createConsumer } from './sqlite-consumer';
|
|
10
|
+
export { createPipelineStore, type PipelineStore } from './sqlite-store';
|
|
11
|
+
export { createWorkflowProcessor, type WorkflowRegistration } from './workflow-processor';
|
|
12
|
+
export { type AwaitInput, type AwaitOutput, type AwaitState, createAwaitWorkflow, decide as awaitDecide, evolve as awaitEvolve, initialState as awaitInitialState, } from './workflows/await-workflow';
|
|
13
|
+
export { createPhasedWorkflow, decide as phasedDecide, evolve as phasedEvolve, initialState as phasedInitialState, type PhasedInput, type PhasedItem, type PhasedOutput, type PhasedState, } from './workflows/phased-workflow';
|
|
14
|
+
export { createSettledWorkflow, decide as settledDecide, evolve as settledEvolve, initialState as settledInitialState, type SettledInput, type SettledOutput, type SettledState, } from './workflows/settled-workflow';
|
|
15
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/engine/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACjF,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,KAAK,aAAa,EAAE,MAAM,gBAAgB,CAAC;AACzE,OAAO,EAAE,uBAAuB,EAAE,KAAK,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC1F,OAAO,EACL,KAAK,UAAU,EACf,KAAK,WAAW,EAChB,KAAK,UAAU,EACf,mBAAmB,EACnB,MAAM,IAAI,WAAW,EACrB,MAAM,IAAI,WAAW,EACrB,YAAY,IAAI,iBAAiB,GAClC,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,oBAAoB,EACpB,MAAM,IAAI,YAAY,EACtB,MAAM,IAAI,YAAY,EACtB,YAAY,IAAI,kBAAkB,EAClC,KAAK,WAAW,EAChB,KAAK,UAAU,EACf,KAAK,YAAY,EACjB,KAAK,WAAW,GACjB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,qBAAqB,EACrB,MAAM,IAAI,aAAa,EACvB,MAAM,IAAI,aAAa,EACvB,YAAY,IAAI,mBAAmB,EACnC,KAAK,YAAY,EACjB,KAAK,aAAa,EAClB,KAAK,YAAY,GAClB,MAAM,8BAA8B,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export { createCommandDispatcher, dispatchAndStore } from './command-dispatcher.js';
|
|
2
|
+
export { createEventRouter } from './event-router.js';
|
|
3
|
+
export { createPipelineEngine } from './pipeline-engine.js';
|
|
4
|
+
export { itemStatusProjection } from './projections/item-status.js';
|
|
5
|
+
export { latestRunProjection } from './projections/latest-run.js';
|
|
6
|
+
export { messageLogProjection } from './projections/message-log.js';
|
|
7
|
+
export { nodeStatusProjection } from './projections/node-status.js';
|
|
8
|
+
export { statsProjection } from './projections/stats.js';
|
|
9
|
+
export { createConsumer } from './sqlite-consumer.js';
|
|
10
|
+
export { createPipelineStore } from './sqlite-store.js';
|
|
11
|
+
export { createWorkflowProcessor } from './workflow-processor.js';
|
|
12
|
+
export { createAwaitWorkflow, decide as awaitDecide, evolve as awaitEvolve, initialState as awaitInitialState, } from './workflows/await-workflow.js';
|
|
13
|
+
export { createPhasedWorkflow, decide as phasedDecide, evolve as phasedEvolve, initialState as phasedInitialState, } from './workflows/phased-workflow.js';
|
|
14
|
+
export { createSettledWorkflow, decide as settledDecide, evolve as settledEvolve, initialState as settledInitialState, } from './workflows/settled-workflow.js';
|
|
15
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/engine/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACjF,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAsB,MAAM,gBAAgB,CAAC;AACzE,OAAO,EAAE,uBAAuB,EAA6B,MAAM,sBAAsB,CAAC;AAC1F,OAAO,EAIL,mBAAmB,EACnB,MAAM,IAAI,WAAW,EACrB,MAAM,IAAI,WAAW,EACrB,YAAY,IAAI,iBAAiB,GAClC,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,oBAAoB,EACpB,MAAM,IAAI,YAAY,EACtB,MAAM,IAAI,YAAY,EACtB,YAAY,IAAI,kBAAkB,GAKnC,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,qBAAqB,EACrB,MAAM,IAAI,aAAa,EACvB,MAAM,IAAI,aAAa,EACvB,YAAY,IAAI,mBAAmB,GAIpC,MAAM,8BAA8B,CAAC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import type { WorkflowRegistration } from './workflow-processor.js';
|
|
2
|
+
type Event = {
|
|
3
|
+
type: string;
|
|
4
|
+
data: Record<string, unknown>;
|
|
5
|
+
};
|
|
6
|
+
type CommandHandler = (command: {
|
|
7
|
+
type: string;
|
|
8
|
+
data: Record<string, unknown>;
|
|
9
|
+
}) => Array<{
|
|
10
|
+
type: string;
|
|
11
|
+
data: Record<string, unknown>;
|
|
12
|
+
}> | Promise<Array<{
|
|
13
|
+
type: string;
|
|
14
|
+
data: Record<string, unknown>;
|
|
15
|
+
}>>;
|
|
16
|
+
type EmitMapping = {
|
|
17
|
+
eventType: string;
|
|
18
|
+
commands: Array<{
|
|
19
|
+
commandType: string;
|
|
20
|
+
data: Record<string, unknown> | ((event: Event) => Record<string, unknown>);
|
|
21
|
+
}>;
|
|
22
|
+
};
|
|
23
|
+
export declare function createPipelineEngine(): Promise<{
|
|
24
|
+
registerCommandHandler(commandType: string, handler: CommandHandler): void;
|
|
25
|
+
registerEmitMapping(mapping: EmitMapping): void;
|
|
26
|
+
registerWorkflow(registration: WorkflowRegistration): void;
|
|
27
|
+
registeredCommands(): string[];
|
|
28
|
+
onEvent(listener: (event: Event) => void): void;
|
|
29
|
+
processWorkflowEvent(event: Event): Event[];
|
|
30
|
+
dispatch(command: {
|
|
31
|
+
type: string;
|
|
32
|
+
data: Record<string, unknown>;
|
|
33
|
+
}): Promise<void>;
|
|
34
|
+
close(): Promise<void>;
|
|
35
|
+
}>;
|
|
36
|
+
export {};
|
|
37
|
+
//# sourceMappingURL=pipeline-engine.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pipeline-engine.d.ts","sourceRoot":"","sources":["../../../src/engine/pipeline-engine.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAGpE,KAAK,KAAK,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,CAAC;AAE7D,KAAK,cAAc,GAAG,CAAC,OAAO,EAAE;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC/B,KACG,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,CAAC,GACtD,OAAO,CAAC,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,CAAC,CAAC,CAAC;AAEpE,KAAK,WAAW,GAAG;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,KAAK,CAAC;QACd,WAAW,EAAE,MAAM,CAAC;QACpB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;KAC7E,CAAC,CAAC;CACJ,CAAC;AAEF,wBAAsB,oBAAoB;wCAuBF,MAAM,WAAW,cAAc,GAAG,IAAI;iCAI7C,WAAW,GAAG,IAAI;mCAIhB,oBAAoB,GAAG,IAAI;0BAIpC,MAAM,EAAE;sBAIZ,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,GAAG,IAAI;gCAInB,KAAK,GAAG,KAAK,EAAE;sBAInB;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;aAOxE,OAAO,CAAC,IAAI,CAAC;GAI/B"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { createCommandDispatcher, dispatchAndStore } from './command-dispatcher.js';
|
|
2
|
+
import { createEventRouter } from './event-router.js';
|
|
3
|
+
import { createPipelineStore } from './sqlite-store.js';
|
|
4
|
+
import { createWorkflowProcessor } from './workflow-processor.js';
|
|
5
|
+
export async function createPipelineEngine() {
|
|
6
|
+
const store = await createPipelineStore();
|
|
7
|
+
const dispatcher = createCommandDispatcher();
|
|
8
|
+
const router = createEventRouter(dispatcher);
|
|
9
|
+
const workflows = createWorkflowProcessor();
|
|
10
|
+
const eventListeners = [];
|
|
11
|
+
let streamCounter = 0;
|
|
12
|
+
async function processEvents(events) {
|
|
13
|
+
for (const event of events) {
|
|
14
|
+
for (const listener of eventListeners) {
|
|
15
|
+
listener(event);
|
|
16
|
+
}
|
|
17
|
+
const routedEvents = await router.route(event);
|
|
18
|
+
const workflowOutputs = workflows.process(event);
|
|
19
|
+
await processEvents(routedEvents);
|
|
20
|
+
await processEvents(workflowOutputs);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
return {
|
|
24
|
+
registerCommandHandler(commandType, handler) {
|
|
25
|
+
dispatcher.register(commandType, handler);
|
|
26
|
+
},
|
|
27
|
+
registerEmitMapping(mapping) {
|
|
28
|
+
router.register(mapping);
|
|
29
|
+
},
|
|
30
|
+
registerWorkflow(registration) {
|
|
31
|
+
workflows.register(registration);
|
|
32
|
+
},
|
|
33
|
+
registeredCommands() {
|
|
34
|
+
return dispatcher.registeredTypes();
|
|
35
|
+
},
|
|
36
|
+
onEvent(listener) {
|
|
37
|
+
eventListeners.push(listener);
|
|
38
|
+
},
|
|
39
|
+
processWorkflowEvent(event) {
|
|
40
|
+
return workflows.process(event);
|
|
41
|
+
},
|
|
42
|
+
async dispatch(command) {
|
|
43
|
+
streamCounter++;
|
|
44
|
+
const streamName = `pipeline-${streamCounter}`;
|
|
45
|
+
const results = await dispatchAndStore(dispatcher, store.eventStore, streamName, command);
|
|
46
|
+
await processEvents(results);
|
|
47
|
+
},
|
|
48
|
+
async close() {
|
|
49
|
+
await store.close();
|
|
50
|
+
},
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=pipeline-engine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pipeline-engine.js","sourceRoot":"","sources":["../../../src/engine/pipeline-engine.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AACpF,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAExD,OAAO,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAmBlE,MAAM,CAAC,KAAK,UAAU,oBAAoB;IACxC,MAAM,KAAK,GAAG,MAAM,mBAAmB,EAAE,CAAC;IAC1C,MAAM,UAAU,GAAG,uBAAuB,EAAE,CAAC;IAC7C,MAAM,MAAM,GAAG,iBAAiB,CAAC,UAAU,CAAC,CAAC;IAC7C,MAAM,SAAS,GAAG,uBAAuB,EAAE,CAAC;IAC5C,MAAM,cAAc,GAAkC,EAAE,CAAC;IACzD,IAAI,aAAa,GAAG,CAAC,CAAC;IAEtB,KAAK,UAAU,aAAa,CAAC,MAAe;QAC1C,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,KAAK,MAAM,QAAQ,IAAI,cAAc,EAAE,CAAC;gBACtC,QAAQ,CAAC,KAAK,CAAC,CAAC;YAClB,CAAC;YAED,MAAM,YAAY,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAC/C,MAAM,eAAe,GAAG,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YAEjD,MAAM,aAAa,CAAC,YAAY,CAAC,CAAC;YAClC,MAAM,aAAa,CAAC,eAAe,CAAC,CAAC;QACvC,CAAC;IACH,CAAC;IAED,OAAO;QACL,sBAAsB,CAAC,WAAmB,EAAE,OAAuB;YACjE,UAAU,CAAC,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QAC5C,CAAC;QAED,mBAAmB,CAAC,OAAoB;YACtC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QAC3B,CAAC;QAED,gBAAgB,CAAC,YAAkC;YACjD,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;QACnC,CAAC;QAED,kBAAkB;YAChB,OAAO,UAAU,CAAC,eAAe,EAAE,CAAC;QACtC,CAAC;QAED,OAAO,CAAC,QAAgC;YACtC,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAChC,CAAC;QAED,oBAAoB,CAAC,KAAY;YAC/B,OAAO,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAClC,CAAC;QAED,KAAK,CAAC,QAAQ,CAAC,OAAwD;YACrE,aAAa,EAAE,CAAC;YAChB,MAAM,UAAU,GAAG,YAAY,aAAa,EAAE,CAAC;YAC/C,MAAM,OAAO,GAAG,MAAM,gBAAgB,CAAC,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;YAC1F,MAAM,aAAa,CAAC,OAAO,CAAC,CAAC;QAC/B,CAAC;QAED,KAAK,CAAC,KAAK;YACT,MAAM,KAAK,CAAC,KAAK,EAAE,CAAC;QACtB,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { evolve, type ItemStatusChangedEvent, type ItemStatusDocument } from '../../projections/item-status-projection';
|
|
2
|
+
export { evolve, type ItemStatusChangedEvent, type ItemStatusDocument };
|
|
3
|
+
export declare const itemStatusProjection: {
|
|
4
|
+
name: string;
|
|
5
|
+
canHandle: readonly ["ItemStatusChanged"];
|
|
6
|
+
evolve: typeof evolve;
|
|
7
|
+
getDocumentId: (event: ItemStatusChangedEvent) => string;
|
|
8
|
+
};
|
|
9
|
+
//# sourceMappingURL=item-status.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"item-status.d.ts","sourceRoot":"","sources":["../../../../src/engine/projections/item-status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,KAAK,sBAAsB,EAAE,KAAK,kBAAkB,EAAE,MAAM,0CAA0C,CAAC;AAExH,OAAO,EAAE,MAAM,EAAE,KAAK,sBAAsB,EAAE,KAAK,kBAAkB,EAAE,CAAC;AAExE,eAAO,MAAM,oBAAoB;;;;2BAIR,sBAAsB;CAE9C,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { evolve } from '../../projections/item-status-projection.js';
|
|
2
|
+
export { evolve };
|
|
3
|
+
export const itemStatusProjection = {
|
|
4
|
+
name: 'item-status',
|
|
5
|
+
canHandle: ['ItemStatusChanged'],
|
|
6
|
+
evolve,
|
|
7
|
+
getDocumentId: (event) => `${event.data.correlationId}-${event.data.commandType}-${event.data.itemKey}`,
|
|
8
|
+
};
|
|
9
|
+
//# sourceMappingURL=item-status.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"item-status.js","sourceRoot":"","sources":["../../../../src/engine/projections/item-status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAwD,MAAM,0CAA0C,CAAC;AAExH,OAAO,EAAE,MAAM,EAAwD,CAAC;AAExE,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,IAAI,EAAE,aAAa;IACnB,SAAS,EAAE,CAAC,mBAAmB,CAAU;IACzC,MAAM;IACN,aAAa,EAAE,CAAC,KAA6B,EAAE,EAAE,CAC/C,GAAG,KAAK,CAAC,IAAI,CAAC,aAAa,IAAI,KAAK,CAAC,IAAI,CAAC,WAAW,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE;CAChF,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { evolve, type LatestRunDocument } from '../../projections/latest-run-projection';
|
|
2
|
+
export { evolve, type LatestRunDocument };
|
|
3
|
+
export declare const latestRunProjection: {
|
|
4
|
+
name: string;
|
|
5
|
+
canHandle: readonly ["PipelineRunStarted"];
|
|
6
|
+
evolve: typeof evolve;
|
|
7
|
+
getDocumentId: () => string;
|
|
8
|
+
};
|
|
9
|
+
//# sourceMappingURL=latest-run.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"latest-run.d.ts","sourceRoot":"","sources":["../../../../src/engine/projections/latest-run.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,KAAK,iBAAiB,EAAE,MAAM,yCAAyC,CAAC;AAEzF,OAAO,EAAE,MAAM,EAAE,KAAK,iBAAiB,EAAE,CAAC;AAE1C,eAAO,MAAM,mBAAmB;;;;;CAK/B,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { evolve } from '../../projections/latest-run-projection.js';
|
|
2
|
+
export { evolve };
|
|
3
|
+
export const latestRunProjection = {
|
|
4
|
+
name: 'latest-run',
|
|
5
|
+
canHandle: ['PipelineRunStarted'],
|
|
6
|
+
evolve,
|
|
7
|
+
getDocumentId: () => 'latest',
|
|
8
|
+
};
|
|
9
|
+
//# sourceMappingURL=latest-run.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"latest-run.js","sourceRoot":"","sources":["../../../../src/engine/projections/latest-run.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAA0B,MAAM,yCAAyC,CAAC;AAEzF,OAAO,EAAE,MAAM,EAA0B,CAAC;AAE1C,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,IAAI,EAAE,YAAY;IAClB,SAAS,EAAE,CAAC,oBAAoB,CAAU;IAC1C,MAAM;IACN,aAAa,EAAE,GAAG,EAAE,CAAC,QAAQ;CAC9B,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { evolve, type MessageLogDocument, type MessageLogEvent } from '../../projections/message-log-projection';
|
|
2
|
+
export { evolve, type MessageLogDocument, type MessageLogEvent };
|
|
3
|
+
export declare const messageLogProjection: {
|
|
4
|
+
name: string;
|
|
5
|
+
canHandle: readonly ["CommandDispatched", "DomainEventEmitted", "PipelineRunStarted", "NodeStatusChanged"];
|
|
6
|
+
evolve: typeof evolve;
|
|
7
|
+
getDocumentId: () => string;
|
|
8
|
+
};
|
|
9
|
+
//# sourceMappingURL=message-log.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"message-log.d.ts","sourceRoot":"","sources":["../../../../src/engine/projections/message-log.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,KAAK,kBAAkB,EAAE,KAAK,eAAe,EAAE,MAAM,0CAA0C,CAAC;AAEjH,OAAO,EAAE,MAAM,EAAE,KAAK,kBAAkB,EAAE,KAAK,eAAe,EAAE,CAAC;AAEjE,eAAO,MAAM,oBAAoB;;;;;CAKhC,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { nanoid } from 'nanoid';
|
|
2
|
+
import { evolve } from '../../projections/message-log-projection.js';
|
|
3
|
+
export { evolve };
|
|
4
|
+
export const messageLogProjection = {
|
|
5
|
+
name: 'message-log',
|
|
6
|
+
canHandle: ['CommandDispatched', 'DomainEventEmitted', 'PipelineRunStarted', 'NodeStatusChanged'],
|
|
7
|
+
evolve,
|
|
8
|
+
getDocumentId: () => nanoid(),
|
|
9
|
+
};
|
|
10
|
+
//# sourceMappingURL=message-log.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"message-log.js","sourceRoot":"","sources":["../../../../src/engine/projections/message-log.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,MAAM,EAAiD,MAAM,0CAA0C,CAAC;AAEjH,OAAO,EAAE,MAAM,EAAiD,CAAC;AAEjE,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,IAAI,EAAE,aAAa;IACnB,SAAS,EAAE,CAAC,mBAAmB,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,mBAAmB,CAAU;IAC1G,MAAM;IACN,aAAa,EAAE,GAAG,EAAE,CAAC,MAAM,EAAE;CAC9B,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { evolve, type NodeStatusChangedEvent, type NodeStatusDocument } from '../../projections/node-status-projection';
|
|
2
|
+
export { evolve, type NodeStatusChangedEvent, type NodeStatusDocument };
|
|
3
|
+
export declare const nodeStatusProjection: {
|
|
4
|
+
name: string;
|
|
5
|
+
canHandle: readonly ["NodeStatusChanged"];
|
|
6
|
+
evolve: typeof evolve;
|
|
7
|
+
getDocumentId: (event: NodeStatusChangedEvent) => string;
|
|
8
|
+
};
|
|
9
|
+
//# sourceMappingURL=node-status.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"node-status.d.ts","sourceRoot":"","sources":["../../../../src/engine/projections/node-status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,KAAK,sBAAsB,EAAE,KAAK,kBAAkB,EAAE,MAAM,0CAA0C,CAAC;AAExH,OAAO,EAAE,MAAM,EAAE,KAAK,sBAAsB,EAAE,KAAK,kBAAkB,EAAE,CAAC;AAExE,eAAO,MAAM,oBAAoB;;;;2BAIR,sBAAsB;CAC9C,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { evolve } from '../../projections/node-status-projection.js';
|
|
2
|
+
export { evolve };
|
|
3
|
+
export const nodeStatusProjection = {
|
|
4
|
+
name: 'node-status',
|
|
5
|
+
canHandle: ['NodeStatusChanged'],
|
|
6
|
+
evolve,
|
|
7
|
+
getDocumentId: (event) => `${event.data.correlationId}-${event.data.commandName}`,
|
|
8
|
+
};
|
|
9
|
+
//# sourceMappingURL=node-status.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"node-status.js","sourceRoot":"","sources":["../../../../src/engine/projections/node-status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAwD,MAAM,0CAA0C,CAAC;AAExH,OAAO,EAAE,MAAM,EAAwD,CAAC;AAExE,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,IAAI,EAAE,aAAa;IACnB,SAAS,EAAE,CAAC,mBAAmB,CAAU;IACzC,MAAM;IACN,aAAa,EAAE,CAAC,KAA6B,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,aAAa,IAAI,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE;CAC1G,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { evolve, type StatsDocument } from '../../projections/stats-projection';
|
|
2
|
+
export { evolve, type StatsDocument };
|
|
3
|
+
export declare const statsProjection: {
|
|
4
|
+
name: string;
|
|
5
|
+
canHandle: readonly ["CommandDispatched", "DomainEventEmitted"];
|
|
6
|
+
evolve: typeof evolve;
|
|
7
|
+
getDocumentId: () => string;
|
|
8
|
+
};
|
|
9
|
+
//# sourceMappingURL=stats.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stats.d.ts","sourceRoot":"","sources":["../../../../src/engine/projections/stats.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,KAAK,aAAa,EAAE,MAAM,oCAAoC,CAAC;AAEhF,OAAO,EAAE,MAAM,EAAE,KAAK,aAAa,EAAE,CAAC;AAEtC,eAAO,MAAM,eAAe;;;;;CAK3B,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { evolve } from '../../projections/stats-projection.js';
|
|
2
|
+
export { evolve };
|
|
3
|
+
export const statsProjection = {
|
|
4
|
+
name: 'stats',
|
|
5
|
+
canHandle: ['CommandDispatched', 'DomainEventEmitted'],
|
|
6
|
+
evolve,
|
|
7
|
+
getDocumentId: () => 'global',
|
|
8
|
+
};
|
|
9
|
+
//# sourceMappingURL=stats.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stats.js","sourceRoot":"","sources":["../../../../src/engine/projections/stats.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAsB,MAAM,oCAAoC,CAAC;AAEhF,OAAO,EAAE,MAAM,EAAsB,CAAC;AAEtC,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,IAAI,EAAE,OAAO;IACb,SAAS,EAAE,CAAC,mBAAmB,EAAE,oBAAoB,CAAU;IAC/D,MAAM;IACN,aAAa,EAAE,GAAG,EAAE,CAAC,QAAQ;CAC9B,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { PipelineStore } from './sqlite-store.js';
|
|
2
|
+
type EventHandler = (event: {
|
|
3
|
+
type: string;
|
|
4
|
+
data: Record<string, unknown>;
|
|
5
|
+
}) => void;
|
|
6
|
+
export declare function createConsumer(store: PipelineStore): {
|
|
7
|
+
on(eventType: string, handler: EventHandler): void;
|
|
8
|
+
poll(): Promise<void>;
|
|
9
|
+
};
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=sqlite-consumer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sqlite-consumer.d.ts","sourceRoot":"","sources":["../../../src/engine/sqlite-consumer.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAEvD,KAAK,YAAY,GAAG,CAAC,KAAK,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,KAAK,IAAI,CAAC;AAErF,wBAAgB,cAAc,CAAC,KAAK,EAAE,aAAa;kBAMjC,MAAM,WAAW,YAAY,GAAG,IAAI;YAIpC,OAAO,CAAC,IAAI,CAAC;EAkB9B"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { readMessagesBatch, sqliteConnection } from '@event-driven-io/emmett-sqlite';
|
|
2
|
+
export function createConsumer(store) {
|
|
3
|
+
const handlers = new Map();
|
|
4
|
+
let lastPosition = 0n;
|
|
5
|
+
const connection = sqliteConnection({ fileName: store.fileName });
|
|
6
|
+
return {
|
|
7
|
+
on(eventType, handler) {
|
|
8
|
+
handlers.set(eventType, handler);
|
|
9
|
+
},
|
|
10
|
+
async poll() {
|
|
11
|
+
const { messages, currentGlobalPosition } = await readMessagesBatch(connection, {
|
|
12
|
+
after: lastPosition,
|
|
13
|
+
batchSize: 1000,
|
|
14
|
+
});
|
|
15
|
+
for (const message of messages) {
|
|
16
|
+
const handler = handlers.get(message.type);
|
|
17
|
+
if (handler) {
|
|
18
|
+
handler({ type: message.type, data: message.data });
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
if (messages.length > 0) {
|
|
22
|
+
lastPosition = currentGlobalPosition;
|
|
23
|
+
}
|
|
24
|
+
},
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=sqlite-consumer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sqlite-consumer.js","sourceRoot":"","sources":["../../../src/engine/sqlite-consumer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAKrF,MAAM,UAAU,cAAc,CAAC,KAAoB;IACjD,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAwB,CAAC;IACjD,IAAI,YAAY,GAAG,EAAE,CAAC;IACtB,MAAM,UAAU,GAAG,gBAAgB,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;IAElE,OAAO;QACL,EAAE,CAAC,SAAiB,EAAE,OAAqB;YACzC,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QACnC,CAAC;QAED,KAAK,CAAC,IAAI;YACR,MAAM,EAAE,QAAQ,EAAE,qBAAqB,EAAE,GAAG,MAAM,iBAAiB,CAAC,UAAU,EAAE;gBAC9E,KAAK,EAAE,YAAY;gBACnB,SAAS,EAAE,IAAI;aAChB,CAAC,CAAC;YAEH,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;gBAC/B,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;gBAC3C,IAAI,OAAO,EAAE,CAAC;oBACZ,OAAO,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,IAA+B,EAAE,CAAC,CAAC;gBACjF,CAAC;YACH,CAAC;YAED,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACxB,YAAY,GAAG,qBAAqB,CAAC;YACvC,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { type SQLiteEventStore } from '@event-driven-io/emmett-sqlite';
|
|
2
|
+
export interface PipelineStore {
|
|
3
|
+
eventStore: SQLiteEventStore;
|
|
4
|
+
fileName: string;
|
|
5
|
+
close: () => Promise<void>;
|
|
6
|
+
}
|
|
7
|
+
export declare function createPipelineStore(options?: {
|
|
8
|
+
fileName?: string;
|
|
9
|
+
}): Promise<PipelineStore>;
|
|
10
|
+
//# sourceMappingURL=sqlite-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sqlite-store.d.ts","sourceRoot":"","sources":["../../../src/engine/sqlite-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuB,KAAK,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAE5F,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,gBAAgB,CAAC;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5B;AAED,wBAAsB,mBAAmB,CAAC,OAAO,CAAC,EAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,aAAa,CAAC,CAYjG"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { getSQLiteEventStore } from '@event-driven-io/emmett-sqlite';
|
|
2
|
+
export async function createPipelineStore(options) {
|
|
3
|
+
const fileName = options?.fileName ?? 'file::memory:?cache=shared';
|
|
4
|
+
const eventStore = getSQLiteEventStore({
|
|
5
|
+
fileName,
|
|
6
|
+
schema: { autoMigration: 'CreateOrUpdate' },
|
|
7
|
+
});
|
|
8
|
+
return {
|
|
9
|
+
eventStore,
|
|
10
|
+
fileName,
|
|
11
|
+
close: async () => { },
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=sqlite-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sqlite-store.js","sourceRoot":"","sources":["../../../src/engine/sqlite-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAyB,MAAM,gCAAgC,CAAC;AAQ5F,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,OAA+B;IACvE,MAAM,QAAQ,GAAG,OAAO,EAAE,QAAQ,IAAI,4BAA4B,CAAC;IACnE,MAAM,UAAU,GAAG,mBAAmB,CAAC;QACrC,QAAQ;QACR,MAAM,EAAE,EAAE,aAAa,EAAE,gBAAgB,EAAE;KAC5C,CAAC,CAAC;IAEH,OAAO;QACL,UAAU;QACV,QAAQ;QACR,KAAK,EAAE,KAAK,IAAI,EAAE,GAAE,CAAC;KACtB,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
type Event = {
|
|
2
|
+
type: string;
|
|
3
|
+
data: Record<string, unknown>;
|
|
4
|
+
};
|
|
5
|
+
type WorkflowDef = {
|
|
6
|
+
decide: (input: Event, state: unknown) => Event | Event[];
|
|
7
|
+
evolve: (state: unknown, event: Event) => unknown;
|
|
8
|
+
initialState: () => unknown;
|
|
9
|
+
};
|
|
10
|
+
export type WorkflowRegistration = {
|
|
11
|
+
id: string;
|
|
12
|
+
workflow: WorkflowDef;
|
|
13
|
+
inputEvents: string[];
|
|
14
|
+
};
|
|
15
|
+
export declare function createWorkflowProcessor(): {
|
|
16
|
+
register(registration: WorkflowRegistration): void;
|
|
17
|
+
process(event: Event): Event[];
|
|
18
|
+
};
|
|
19
|
+
export {};
|
|
20
|
+
//# sourceMappingURL=workflow-processor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow-processor.d.ts","sourceRoot":"","sources":["../../../src/engine/workflow-processor.ts"],"names":[],"mappings":"AAAA,KAAK,KAAK,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,CAAC;AAE7D,KAAK,WAAW,GAAG;IACjB,MAAM,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,KAAK,KAAK,GAAG,KAAK,EAAE,CAAC;IAC1D,MAAM,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,KAAK,OAAO,CAAC;IAClD,YAAY,EAAE,MAAM,OAAO,CAAC;CAC7B,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,WAAW,CAAC;IACtB,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB,CAAC;AAEF,wBAAgB,uBAAuB;2BAaZ,oBAAoB,GAAG,IAAI;mBAKnC,KAAK,GAAG,KAAK,EAAE;EAwBjC"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
export function createWorkflowProcessor() {
|
|
2
|
+
const registrations = new Map();
|
|
3
|
+
const eventsByWorkflow = new Map();
|
|
4
|
+
function rebuildState(reg, events) {
|
|
5
|
+
let state = reg.workflow.initialState();
|
|
6
|
+
for (const event of events) {
|
|
7
|
+
state = reg.workflow.evolve(state, event);
|
|
8
|
+
}
|
|
9
|
+
return state;
|
|
10
|
+
}
|
|
11
|
+
return {
|
|
12
|
+
register(registration) {
|
|
13
|
+
registrations.set(registration.id, registration);
|
|
14
|
+
eventsByWorkflow.set(registration.id, []);
|
|
15
|
+
},
|
|
16
|
+
process(event) {
|
|
17
|
+
const outputs = [];
|
|
18
|
+
for (const [id, reg] of registrations) {
|
|
19
|
+
if (!reg.inputEvents.includes(event.type)) {
|
|
20
|
+
continue;
|
|
21
|
+
}
|
|
22
|
+
const history = eventsByWorkflow.get(id);
|
|
23
|
+
history.push(event);
|
|
24
|
+
const state = rebuildState(reg, history);
|
|
25
|
+
const result = reg.workflow.decide(event, state);
|
|
26
|
+
const resultEvents = Array.isArray(result) ? result : [result];
|
|
27
|
+
for (const outputEvent of resultEvents) {
|
|
28
|
+
history.push(outputEvent);
|
|
29
|
+
outputs.push(outputEvent);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
return outputs;
|
|
33
|
+
},
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=workflow-processor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow-processor.js","sourceRoot":"","sources":["../../../src/engine/workflow-processor.ts"],"names":[],"mappings":"AAcA,MAAM,UAAU,uBAAuB;IACrC,MAAM,aAAa,GAAG,IAAI,GAAG,EAAgC,CAAC;IAC9D,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAAmB,CAAC;IAEpD,SAAS,YAAY,CAAC,GAAyB,EAAE,MAAe;QAC9D,IAAI,KAAK,GAAG,GAAG,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC;QACxC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,KAAK,GAAG,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAC5C,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO;QACL,QAAQ,CAAC,YAAkC;YACzC,aAAa,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,EAAE,YAAY,CAAC,CAAC;YACjD,gBAAgB,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QAC5C,CAAC;QAED,OAAO,CAAC,KAAY;YAClB,MAAM,OAAO,GAAY,EAAE,CAAC;YAE5B,KAAK,MAAM,CAAC,EAAE,EAAE,GAAG,CAAC,IAAI,aAAa,EAAE,CAAC;gBACtC,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;oBAC1C,SAAS;gBACX,CAAC;gBAED,MAAM,OAAO,GAAG,gBAAgB,CAAC,GAAG,CAAC,EAAE,CAAE,CAAC;gBAC1C,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBAEpB,MAAM,KAAK,GAAG,YAAY,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;gBACzC,MAAM,MAAM,GAAG,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;gBACjD,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;gBAE/D,KAAK,MAAM,WAAW,IAAI,YAAY,EAAE,CAAC;oBACvC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;oBAC1B,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;gBAC5B,CAAC;YACH,CAAC;YAED,OAAO,OAAO,CAAC;QACjB,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
export type AwaitInput = {
|
|
2
|
+
type: 'StartAwait';
|
|
3
|
+
data: {
|
|
4
|
+
correlationId: string;
|
|
5
|
+
keys: string[];
|
|
6
|
+
};
|
|
7
|
+
} | {
|
|
8
|
+
type: 'KeyCompleted';
|
|
9
|
+
data: {
|
|
10
|
+
key: string;
|
|
11
|
+
result: Record<string, unknown>;
|
|
12
|
+
};
|
|
13
|
+
};
|
|
14
|
+
export type AwaitOutput = {
|
|
15
|
+
type: 'AwaitCompleted';
|
|
16
|
+
data: {
|
|
17
|
+
results: Record<string, Record<string, unknown>>;
|
|
18
|
+
};
|
|
19
|
+
};
|
|
20
|
+
export type AwaitState = {
|
|
21
|
+
status: 'idle' | 'waiting' | 'completed';
|
|
22
|
+
pendingKeys: string[];
|
|
23
|
+
results: Record<string, Record<string, unknown>>;
|
|
24
|
+
};
|
|
25
|
+
export declare function initialState(): AwaitState;
|
|
26
|
+
export declare function decide(input: AwaitInput, state: AwaitState): AwaitOutput | AwaitOutput[];
|
|
27
|
+
export declare function createAwaitWorkflow(): {
|
|
28
|
+
decide: typeof decide;
|
|
29
|
+
evolve: typeof evolve;
|
|
30
|
+
initialState: typeof initialState;
|
|
31
|
+
};
|
|
32
|
+
export declare function evolve(state: AwaitState, event: AwaitInput | AwaitOutput): AwaitState;
|
|
33
|
+
//# sourceMappingURL=await-workflow.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"await-workflow.d.ts","sourceRoot":"","sources":["../../../../src/engine/workflows/await-workflow.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,UAAU,GAClB;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,IAAI,EAAE;QAAE,aAAa,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,EAAE,CAAA;KAAE,CAAA;CAAE,GACvE;IAAE,IAAI,EAAE,cAAc,CAAC;IAAC,IAAI,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,CAAA;CAAE,CAAC;AAErF,MAAM,MAAM,WAAW,GAAG;IACxB,IAAI,EAAE,gBAAgB,CAAC;IACvB,IAAI,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;KAAE,CAAC;CAC5D,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IACvB,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,WAAW,CAAC;IACzC,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CAClD,CAAC;AAEF,wBAAgB,YAAY,IAAI,UAAU,CAMzC;AAED,wBAAgB,MAAM,CAAC,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,GAAG,WAAW,GAAG,WAAW,EAAE,CAQxF;AAED,wBAAgB,mBAAmB,IAAI;IACrC,MAAM,EAAE,OAAO,MAAM,CAAC;IACtB,MAAM,EAAE,OAAO,MAAM,CAAC;IACtB,YAAY,EAAE,OAAO,YAAY,CAAC;CACnC,CAEA;AAED,wBAAgB,MAAM,CAAC,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,GAAG,WAAW,GAAG,UAAU,CAwBrF"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
export function initialState() {
|
|
2
|
+
return {
|
|
3
|
+
status: 'idle',
|
|
4
|
+
pendingKeys: [],
|
|
5
|
+
results: {},
|
|
6
|
+
};
|
|
7
|
+
}
|
|
8
|
+
export function decide(input, state) {
|
|
9
|
+
if (state.status !== 'waiting' || state.pendingKeys.length > 0) {
|
|
10
|
+
return [];
|
|
11
|
+
}
|
|
12
|
+
return {
|
|
13
|
+
type: 'AwaitCompleted',
|
|
14
|
+
data: { results: state.results },
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
export function createAwaitWorkflow() {
|
|
18
|
+
return { decide, evolve, initialState };
|
|
19
|
+
}
|
|
20
|
+
export function evolve(state, event) {
|
|
21
|
+
switch (event.type) {
|
|
22
|
+
case 'StartAwait':
|
|
23
|
+
return {
|
|
24
|
+
...state,
|
|
25
|
+
status: 'waiting',
|
|
26
|
+
pendingKeys: event.data.keys,
|
|
27
|
+
results: {},
|
|
28
|
+
};
|
|
29
|
+
case 'KeyCompleted': {
|
|
30
|
+
if (!state.pendingKeys.includes(event.data.key)) {
|
|
31
|
+
return state;
|
|
32
|
+
}
|
|
33
|
+
return {
|
|
34
|
+
...state,
|
|
35
|
+
pendingKeys: state.pendingKeys.filter((k) => k !== event.data.key),
|
|
36
|
+
results: { ...state.results, [event.data.key]: event.data.result },
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
case 'AwaitCompleted':
|
|
40
|
+
return { ...state, status: 'completed' };
|
|
41
|
+
default:
|
|
42
|
+
return state;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=await-workflow.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"await-workflow.js","sourceRoot":"","sources":["../../../../src/engine/workflows/await-workflow.ts"],"names":[],"mappings":"AAeA,MAAM,UAAU,YAAY;IAC1B,OAAO;QACL,MAAM,EAAE,MAAM;QACd,WAAW,EAAE,EAAE;QACf,OAAO,EAAE,EAAE;KACZ,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,MAAM,CAAC,KAAiB,EAAE,KAAiB;IACzD,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,IAAI,KAAK,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC/D,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,OAAO;QACL,IAAI,EAAE,gBAAgB;QACtB,IAAI,EAAE,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE;KACjC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,mBAAmB;IAKjC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC;AAC1C,CAAC;AAED,MAAM,UAAU,MAAM,CAAC,KAAiB,EAAE,KAA+B;IACvE,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;QACnB,KAAK,YAAY;YACf,OAAO;gBACL,GAAG,KAAK;gBACR,MAAM,EAAE,SAAS;gBACjB,WAAW,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI;gBAC5B,OAAO,EAAE,EAAE;aACZ,CAAC;QACJ,KAAK,cAAc,CAAC,CAAC,CAAC;YACpB,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;gBAChD,OAAO,KAAK,CAAC;YACf,CAAC;YACD,OAAO;gBACL,GAAG,KAAK;gBACR,WAAW,EAAE,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;gBAClE,OAAO,EAAE,EAAE,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE;aACnE,CAAC;QACJ,CAAC;QACD,KAAK,gBAAgB;YACnB,OAAO,EAAE,GAAG,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;QAC3C;YACE,OAAO,KAAK,CAAC;IACjB,CAAC;AACH,CAAC"}
|