@auto-engineer/pipeline 0.0.1 → 0.15.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.
Files changed (201) hide show
  1. package/.turbo/turbo-build.log +1 -1
  2. package/CHANGELOG.md +26 -0
  3. package/README.md +279 -0
  4. package/dist/src/builder/define.d.ts +6 -2
  5. package/dist/src/builder/define.d.ts.map +1 -1
  6. package/dist/src/builder/define.js +17 -7
  7. package/dist/src/builder/define.js.map +1 -1
  8. package/dist/src/builder/define.specs.js +3 -3
  9. package/dist/src/builder/define.specs.js.map +1 -1
  10. package/dist/src/core/descriptors.d.ts +6 -2
  11. package/dist/src/core/descriptors.d.ts.map +1 -1
  12. package/dist/src/graph/filter-graph.d.ts +3 -0
  13. package/dist/src/graph/filter-graph.d.ts.map +1 -0
  14. package/dist/src/graph/filter-graph.js +80 -0
  15. package/dist/src/graph/filter-graph.js.map +1 -0
  16. package/dist/src/graph/filter-graph.specs.d.ts +2 -0
  17. package/dist/src/graph/filter-graph.specs.d.ts.map +1 -0
  18. package/dist/src/graph/filter-graph.specs.js +204 -0
  19. package/dist/src/graph/filter-graph.specs.js.map +1 -0
  20. package/dist/src/graph/types.d.ts +8 -0
  21. package/dist/src/graph/types.d.ts.map +1 -1
  22. package/dist/src/index.d.ts +1 -0
  23. package/dist/src/index.d.ts.map +1 -1
  24. package/dist/src/index.js.map +1 -1
  25. package/dist/src/projections/await-tracker-projection.d.ts +31 -0
  26. package/dist/src/projections/await-tracker-projection.d.ts.map +1 -0
  27. package/dist/src/projections/await-tracker-projection.js +35 -0
  28. package/dist/src/projections/await-tracker-projection.js.map +1 -0
  29. package/dist/src/projections/index.d.ts +4 -0
  30. package/dist/src/projections/index.d.ts.map +1 -0
  31. package/dist/src/projections/index.js +4 -0
  32. package/dist/src/projections/index.js.map +1 -0
  33. package/dist/src/projections/item-status-projection.d.ts +22 -0
  34. package/dist/src/projections/item-status-projection.d.ts.map +1 -0
  35. package/dist/src/projections/item-status-projection.js +11 -0
  36. package/dist/src/projections/item-status-projection.js.map +1 -0
  37. package/dist/src/projections/item-status-projection.specs.d.ts +2 -0
  38. package/dist/src/projections/item-status-projection.specs.d.ts.map +1 -0
  39. package/dist/src/projections/item-status-projection.specs.js +119 -0
  40. package/dist/src/projections/item-status-projection.specs.js.map +1 -0
  41. package/dist/src/projections/latest-run-projection.d.ts +15 -0
  42. package/dist/src/projections/latest-run-projection.d.ts.map +1 -0
  43. package/dist/src/projections/latest-run-projection.js +7 -0
  44. package/dist/src/projections/latest-run-projection.js.map +1 -0
  45. package/dist/src/projections/latest-run-projection.specs.d.ts +2 -0
  46. package/dist/src/projections/latest-run-projection.specs.d.ts.map +1 -0
  47. package/dist/src/projections/latest-run-projection.specs.js +33 -0
  48. package/dist/src/projections/latest-run-projection.specs.js.map +1 -0
  49. package/dist/src/projections/message-log-projection.d.ts +51 -0
  50. package/dist/src/projections/message-log-projection.d.ts.map +1 -0
  51. package/dist/src/projections/message-log-projection.js +51 -0
  52. package/dist/src/projections/message-log-projection.js.map +1 -0
  53. package/dist/src/projections/message-log-projection.specs.d.ts +2 -0
  54. package/dist/src/projections/message-log-projection.specs.d.ts.map +1 -0
  55. package/dist/src/projections/message-log-projection.specs.js +101 -0
  56. package/dist/src/projections/message-log-projection.specs.js.map +1 -0
  57. package/dist/src/projections/node-status-projection.d.ts +23 -0
  58. package/dist/src/projections/node-status-projection.d.ts.map +1 -0
  59. package/dist/src/projections/node-status-projection.js +10 -0
  60. package/dist/src/projections/node-status-projection.js.map +1 -0
  61. package/dist/src/projections/node-status-projection.specs.d.ts +2 -0
  62. package/dist/src/projections/node-status-projection.specs.d.ts.map +1 -0
  63. package/dist/src/projections/node-status-projection.specs.js +116 -0
  64. package/dist/src/projections/node-status-projection.specs.js.map +1 -0
  65. package/dist/src/projections/phased-execution-projection.d.ts +77 -0
  66. package/dist/src/projections/phased-execution-projection.d.ts.map +1 -0
  67. package/dist/src/projections/phased-execution-projection.js +54 -0
  68. package/dist/src/projections/phased-execution-projection.js.map +1 -0
  69. package/dist/src/projections/phased-execution-projection.specs.d.ts +2 -0
  70. package/dist/src/projections/phased-execution-projection.specs.d.ts.map +1 -0
  71. package/dist/src/projections/phased-execution-projection.specs.js +171 -0
  72. package/dist/src/projections/phased-execution-projection.specs.js.map +1 -0
  73. package/dist/src/projections/settled-instance-projection.d.ts +67 -0
  74. package/dist/src/projections/settled-instance-projection.d.ts.map +1 -0
  75. package/dist/src/projections/settled-instance-projection.js +66 -0
  76. package/dist/src/projections/settled-instance-projection.js.map +1 -0
  77. package/dist/src/projections/settled-instance-projection.specs.d.ts +2 -0
  78. package/dist/src/projections/settled-instance-projection.specs.d.ts.map +1 -0
  79. package/dist/src/projections/settled-instance-projection.specs.js +217 -0
  80. package/dist/src/projections/settled-instance-projection.specs.js.map +1 -0
  81. package/dist/src/projections/stats-projection.d.ts +9 -0
  82. package/dist/src/projections/stats-projection.d.ts.map +1 -0
  83. package/dist/src/projections/stats-projection.js +16 -0
  84. package/dist/src/projections/stats-projection.js.map +1 -0
  85. package/dist/src/projections/stats-projection.specs.d.ts +2 -0
  86. package/dist/src/projections/stats-projection.specs.d.ts.map +1 -0
  87. package/dist/src/projections/stats-projection.specs.js +91 -0
  88. package/dist/src/projections/stats-projection.specs.js.map +1 -0
  89. package/dist/src/runtime/await-tracker.d.ts +17 -7
  90. package/dist/src/runtime/await-tracker.d.ts.map +1 -1
  91. package/dist/src/runtime/await-tracker.js +32 -29
  92. package/dist/src/runtime/await-tracker.js.map +1 -1
  93. package/dist/src/runtime/await-tracker.specs.js +56 -38
  94. package/dist/src/runtime/await-tracker.specs.js.map +1 -1
  95. package/dist/src/runtime/context.d.ts +1 -1
  96. package/dist/src/runtime/context.d.ts.map +1 -1
  97. package/dist/src/runtime/event-command-map.d.ts +3 -3
  98. package/dist/src/runtime/event-command-map.d.ts.map +1 -1
  99. package/dist/src/runtime/event-command-map.js +6 -2
  100. package/dist/src/runtime/event-command-map.js.map +1 -1
  101. package/dist/src/runtime/phased-executor.d.ts +15 -9
  102. package/dist/src/runtime/phased-executor.d.ts.map +1 -1
  103. package/dist/src/runtime/phased-executor.js +126 -104
  104. package/dist/src/runtime/phased-executor.js.map +1 -1
  105. package/dist/src/runtime/phased-executor.specs.js +243 -81
  106. package/dist/src/runtime/phased-executor.specs.js.map +1 -1
  107. package/dist/src/runtime/pipeline-runtime.d.ts.map +1 -1
  108. package/dist/src/runtime/pipeline-runtime.js +2 -2
  109. package/dist/src/runtime/pipeline-runtime.js.map +1 -1
  110. package/dist/src/runtime/pipeline-runtime.specs.js +35 -0
  111. package/dist/src/runtime/pipeline-runtime.specs.js.map +1 -1
  112. package/dist/src/runtime/settled-tracker.d.ts +12 -9
  113. package/dist/src/runtime/settled-tracker.d.ts.map +1 -1
  114. package/dist/src/runtime/settled-tracker.js +92 -77
  115. package/dist/src/runtime/settled-tracker.js.map +1 -1
  116. package/dist/src/runtime/settled-tracker.specs.js +568 -118
  117. package/dist/src/runtime/settled-tracker.specs.js.map +1 -1
  118. package/dist/src/server/pipeline-server.d.ts +31 -9
  119. package/dist/src/server/pipeline-server.d.ts.map +1 -1
  120. package/dist/src/server/pipeline-server.e2e.specs.js +2 -10
  121. package/dist/src/server/pipeline-server.e2e.specs.js.map +1 -1
  122. package/dist/src/server/pipeline-server.js +418 -134
  123. package/dist/src/server/pipeline-server.js.map +1 -1
  124. package/dist/src/server/pipeline-server.specs.js +777 -32
  125. package/dist/src/server/pipeline-server.specs.js.map +1 -1
  126. package/dist/src/server/sse-manager.specs.js +55 -35
  127. package/dist/src/server/sse-manager.specs.js.map +1 -1
  128. package/dist/src/store/index.d.ts +3 -0
  129. package/dist/src/store/index.d.ts.map +1 -0
  130. package/dist/src/store/index.js +3 -0
  131. package/dist/src/store/index.js.map +1 -0
  132. package/dist/src/store/pipeline-event-store.d.ts +10 -0
  133. package/dist/src/store/pipeline-event-store.d.ts.map +1 -0
  134. package/dist/src/store/pipeline-event-store.js +112 -0
  135. package/dist/src/store/pipeline-event-store.js.map +1 -0
  136. package/dist/src/store/pipeline-event-store.specs.d.ts +2 -0
  137. package/dist/src/store/pipeline-event-store.specs.d.ts.map +1 -0
  138. package/dist/src/store/pipeline-event-store.specs.js +287 -0
  139. package/dist/src/store/pipeline-event-store.specs.js.map +1 -0
  140. package/dist/src/store/pipeline-read-model.d.ts +49 -0
  141. package/dist/src/store/pipeline-read-model.d.ts.map +1 -0
  142. package/dist/src/store/pipeline-read-model.js +157 -0
  143. package/dist/src/store/pipeline-read-model.js.map +1 -0
  144. package/dist/src/store/pipeline-read-model.specs.d.ts +2 -0
  145. package/dist/src/store/pipeline-read-model.specs.d.ts.map +1 -0
  146. package/dist/src/store/pipeline-read-model.specs.js +830 -0
  147. package/dist/src/store/pipeline-read-model.specs.js.map +1 -0
  148. package/dist/src/testing/fixtures/kanban-full.pipeline.js +2 -2
  149. package/dist/src/testing/fixtures/kanban-full.pipeline.js.map +1 -1
  150. package/dist/src/testing/fixtures/kanban.pipeline.js +2 -2
  151. package/dist/src/testing/fixtures/kanban.pipeline.js.map +1 -1
  152. package/dist/tsconfig.tsbuildinfo +1 -1
  153. package/ketchup-plan.md +960 -0
  154. package/package.json +7 -3
  155. package/src/builder/define.specs.ts +3 -3
  156. package/src/builder/define.ts +24 -11
  157. package/src/core/descriptors.ts +7 -2
  158. package/src/graph/filter-graph.specs.ts +241 -0
  159. package/src/graph/filter-graph.ts +111 -0
  160. package/src/graph/types.ts +10 -0
  161. package/src/index.ts +1 -2
  162. package/src/projections/await-tracker-projection.ts +68 -0
  163. package/src/projections/index.ts +11 -0
  164. package/src/projections/item-status-projection.specs.ts +130 -0
  165. package/src/projections/item-status-projection.ts +32 -0
  166. package/src/projections/latest-run-projection.specs.ts +38 -0
  167. package/src/projections/latest-run-projection.ts +20 -0
  168. package/src/projections/message-log-projection.specs.ts +118 -0
  169. package/src/projections/message-log-projection.ts +113 -0
  170. package/src/projections/node-status-projection.specs.ts +127 -0
  171. package/src/projections/node-status-projection.ts +33 -0
  172. package/src/projections/phased-execution-projection.specs.ts +202 -0
  173. package/src/projections/phased-execution-projection.ts +146 -0
  174. package/src/projections/settled-instance-projection.specs.ts +249 -0
  175. package/src/projections/settled-instance-projection.ts +160 -0
  176. package/src/projections/stats-projection.specs.ts +105 -0
  177. package/src/projections/stats-projection.ts +26 -0
  178. package/src/runtime/await-tracker.specs.ts +57 -34
  179. package/src/runtime/await-tracker.ts +43 -31
  180. package/src/runtime/context.ts +1 -1
  181. package/src/runtime/event-command-map.ts +11 -4
  182. package/src/runtime/phased-executor.specs.ts +357 -81
  183. package/src/runtime/phased-executor.ts +142 -126
  184. package/src/runtime/pipeline-runtime.specs.ts +42 -0
  185. package/src/runtime/pipeline-runtime.ts +6 -4
  186. package/src/runtime/settled-tracker.specs.ts +716 -120
  187. package/src/runtime/settled-tracker.ts +104 -98
  188. package/src/server/pipeline-server.e2e.specs.ts +10 -16
  189. package/src/server/pipeline-server.specs.ts +964 -49
  190. package/src/server/pipeline-server.ts +522 -156
  191. package/src/server/sse-manager.specs.ts +67 -36
  192. package/src/store/index.ts +2 -0
  193. package/src/store/pipeline-event-store.specs.ts +309 -0
  194. package/src/store/pipeline-event-store.ts +156 -0
  195. package/src/store/pipeline-read-model.specs.ts +967 -0
  196. package/src/store/pipeline-read-model.ts +223 -0
  197. package/src/testing/fixtures/kanban-full.pipeline.ts +2 -2
  198. package/src/testing/fixtures/kanban.pipeline.ts +2 -2
  199. package/claude.md +0 -160
  200. package/docs/testing-analysis.md +0 -395
  201. package/pomodoro-plan.md +0 -651
@@ -1,164 +1,186 @@
1
1
  export class PhasedExecutor {
2
2
  constructor(options) {
3
- this.sessions = new Map();
4
- this.keyToSession = new Map();
3
+ this.handlerRegistry = new Map();
4
+ this.readModel = options.readModel;
5
5
  this.onDispatch = options.onDispatch;
6
6
  this.onComplete = options.onComplete;
7
+ this.onEventEmit = options.onEventEmit;
7
8
  }
8
- startPhased(handler, event, correlationId) {
9
+ registerHandler(handler) {
10
+ const handlerId = this.generateHandlerId(handler);
11
+ this.handlerRegistry.set(handlerId, handler);
12
+ }
13
+ async startPhased(handler, event, correlationId) {
9
14
  const items = handler.itemsSelector(event);
10
- const itemTrackers = new Map();
15
+ const itemData = [];
11
16
  for (const item of items) {
12
17
  const key = handler.completion.itemKey({ type: event.type, data: item });
13
18
  const phase = handler.classifier(item);
14
- itemTrackers.set(key, {
15
- key,
16
- phase,
17
- dispatched: false,
18
- completed: false,
19
- });
20
- }
21
- const session = {
22
- correlationId,
23
- handler,
24
- triggerEvent: event,
25
- items: itemTrackers,
26
- phases: handler.phases,
27
- currentPhaseIndex: 0,
28
- pendingInPhase: new Set(),
29
- failedItems: new Map(),
30
- };
31
- const sessionId = this.generateSessionId(correlationId, handler);
32
- this.sessions.set(sessionId, session);
33
- for (const key of itemTrackers.keys()) {
34
- this.keyToSession.set(this.keyWithCorrelation(key, correlationId), sessionId);
19
+ itemData.push({ key, phase, dispatched: false, completed: false });
35
20
  }
36
- this.dispatchCurrentPhase(sessionId);
21
+ const executionId = this.generateSessionId(correlationId, handler);
22
+ const handlerId = this.generateHandlerId(handler);
23
+ await this.emitEvent({
24
+ type: 'PhasedExecutionStarted',
25
+ data: {
26
+ executionId,
27
+ correlationId,
28
+ handlerId,
29
+ triggerEvent: event,
30
+ items: itemData,
31
+ phases: handler.phases,
32
+ },
33
+ });
34
+ await this.dispatchCurrentPhase(executionId, handler);
37
35
  }
38
- onEventReceived(event, itemKey) {
36
+ async onEventReceived(event, itemKey) {
39
37
  const correlationId = event.correlationId;
40
38
  if (correlationId === undefined || correlationId === '')
41
39
  return;
42
- const lookupKey = this.keyWithCorrelation(itemKey, correlationId);
43
- const sessionId = this.keyToSession.get(lookupKey);
44
- if (sessionId === undefined)
40
+ const executions = await this.readModel.getActivePhasedExecutions(correlationId);
41
+ const execution = executions.find((ex) => ex.items.some((item) => item.key === itemKey));
42
+ if (execution === undefined)
43
+ return;
44
+ const itemDoc = execution.items.find((i) => i.key === itemKey);
45
+ if (itemDoc === undefined || itemDoc.completed)
45
46
  return;
46
- const session = this.sessions.get(sessionId);
47
- const tracker = session.items.get(itemKey);
48
- if (tracker === undefined || tracker.completed)
47
+ const handler = this.handlerRegistry.get(execution.handlerId);
48
+ if (handler === undefined)
49
49
  return;
50
- tracker.completed = true;
51
- session.pendingInPhase.delete(itemKey);
52
- if (session.handler.stopOnFailure && this.isFailureEvent(event, session.handler)) {
53
- session.failedItems.set(itemKey, event);
54
- this.handleFailure(sessionId, session);
50
+ if (handler.stopOnFailure && this.isFailureEvent(event, handler)) {
51
+ await this.emitEvent({
52
+ type: 'PhasedItemFailed',
53
+ data: { executionId: execution.executionId, itemKey, error: event },
54
+ });
55
+ await this.handleFailure(execution.executionId, handler);
55
56
  return;
56
57
  }
57
- if (session.pendingInPhase.size === 0) {
58
- this.advanceToNextPhase(sessionId, session);
58
+ await this.emitEvent({
59
+ type: 'PhasedItemCompleted',
60
+ data: { executionId: execution.executionId, itemKey, resultEvent: event },
61
+ });
62
+ const updatedExecution = await this.readModel.getPhasedExecution(execution.executionId);
63
+ if (updatedExecution === null)
64
+ return;
65
+ const pendingCount = this.countPendingInPhase(updatedExecution);
66
+ if (pendingCount === 0) {
67
+ await this.advanceToNextPhase(execution.executionId, handler);
59
68
  }
60
69
  }
61
- getActiveSessionCount() {
62
- return this.sessions.size;
70
+ async getActiveSessionCount() {
71
+ const allExecutions = await this.readModel.getActivePhasedExecutions('');
72
+ return allExecutions.length;
63
73
  }
64
- isPhaseComplete(correlationId, phase) {
65
- for (const session of this.sessions.values()) {
66
- if (session.correlationId !== correlationId)
67
- continue;
68
- const phaseIndex = session.phases.indexOf(phase);
74
+ async isPhaseComplete(correlationId, phase) {
75
+ const executions = await this.readModel.getActivePhasedExecutions(correlationId);
76
+ for (const execution of executions) {
77
+ const phaseIndex = execution.phases.indexOf(phase);
69
78
  if (phaseIndex === -1)
70
79
  continue;
71
- if (session.currentPhaseIndex > phaseIndex) {
80
+ if (execution.currentPhaseIndex > phaseIndex) {
72
81
  return true;
73
82
  }
74
- if (session.currentPhaseIndex === phaseIndex) {
75
- return session.pendingInPhase.size === 0;
83
+ if (execution.currentPhaseIndex === phaseIndex) {
84
+ const pendingCount = this.countPendingInPhase(execution);
85
+ return pendingCount === 0;
76
86
  }
77
87
  return false;
78
88
  }
79
89
  return false;
80
90
  }
81
- dispatchCurrentPhase(sessionId) {
82
- const session = this.sessions.get(sessionId);
83
- if (session.currentPhaseIndex >= session.phases.length) {
84
- this.completeSession(sessionId, session, true);
85
- return;
86
- }
87
- const currentPhase = session.phases[session.currentPhaseIndex];
88
- const itemsToDispatch = [];
89
- for (const tracker of session.items.values()) {
90
- if (tracker.phase === currentPhase && !tracker.dispatched) {
91
- itemsToDispatch.push(tracker);
91
+ countPendingInPhase(execution) {
92
+ let pending = 0;
93
+ const currentPhase = execution.phases[execution.currentPhaseIndex];
94
+ for (const item of execution.items) {
95
+ if (item.phase === currentPhase && item.dispatched && !item.completed) {
96
+ pending++;
92
97
  }
93
98
  }
99
+ return pending;
100
+ }
101
+ async dispatchCurrentPhase(executionId, handler) {
102
+ const execution = await this.readModel.getPhasedExecution(executionId);
103
+ if (execution === null)
104
+ return;
105
+ if (execution.currentPhaseIndex >= execution.phases.length) {
106
+ await this.completeSession(executionId, handler, true);
107
+ return;
108
+ }
109
+ const currentPhase = execution.phases[execution.currentPhaseIndex];
110
+ const itemsToDispatch = execution.items.filter((i) => i.phase === currentPhase && !i.dispatched);
94
111
  if (itemsToDispatch.length === 0) {
95
- this.advanceToNextPhase(sessionId, session);
112
+ await this.advanceToNextPhase(executionId, handler);
96
113
  return;
97
114
  }
98
- for (const tracker of itemsToDispatch) {
99
- tracker.dispatched = true;
100
- session.pendingInPhase.add(tracker.key);
101
- const item = this.findItemByKey(session, tracker.key);
102
- if (item !== undefined) {
103
- const command = session.handler.emitFactory(item, tracker.phase, session.triggerEvent);
104
- this.onDispatch(command.commandType, command.data, session.correlationId);
115
+ for (const item of itemsToDispatch) {
116
+ await this.emitEvent({
117
+ type: 'PhasedItemDispatched',
118
+ data: { executionId, itemKey: item.key, phase: item.phase },
119
+ });
120
+ const originalItem = this.findItemByKey(execution.triggerEvent, handler, item.key);
121
+ if (originalItem !== undefined) {
122
+ const command = handler.emitFactory(originalItem, item.phase, execution.triggerEvent);
123
+ this.onDispatch(command.commandType, command.data, execution.correlationId);
105
124
  }
106
125
  }
107
126
  }
108
- advanceToNextPhase(sessionId, session) {
109
- session.currentPhaseIndex++;
110
- this.dispatchCurrentPhase(sessionId);
127
+ async advanceToNextPhase(executionId, handler) {
128
+ const execution = await this.readModel.getPhasedExecution(executionId);
129
+ if (execution === null)
130
+ return;
131
+ const fromPhase = execution.currentPhaseIndex;
132
+ const toPhase = fromPhase + 1;
133
+ await this.emitEvent({
134
+ type: 'PhasedPhaseAdvanced',
135
+ data: { executionId, fromPhase, toPhase },
136
+ });
137
+ await this.dispatchCurrentPhase(executionId, handler);
111
138
  }
112
- handleFailure(sessionId, session) {
113
- this.completeSession(sessionId, session, false);
139
+ async handleFailure(executionId, handler) {
140
+ await this.completeSession(executionId, handler, false);
114
141
  }
115
- completeSession(sessionId, session, success) {
116
- const eventType = success ? session.handler.completion.successEvent : session.handler.completion.failureEvent;
117
- const results = this.collectResults(session);
142
+ async completeSession(executionId, handler, success) {
143
+ const execution = await this.readModel.getPhasedExecution(executionId);
144
+ if (execution === null)
145
+ return;
146
+ const eventDescriptor = success ? handler.completion.successEvent : handler.completion.failureEvent;
147
+ const eventType = eventDescriptor.name;
148
+ const results = execution.items.filter((i) => i.completed).map((i) => i.key);
118
149
  const eventData = success
119
- ? { results, itemCount: session.items.size }
120
- : { failures: Array.from(session.failedItems.entries()).map(([k, v]) => ({ key: k, error: v })) };
150
+ ? { results, itemCount: execution.items.length }
151
+ : { failures: execution.failedItems.map((f) => ({ key: f.key, error: f.error })) };
121
152
  const completionEvent = {
122
153
  type: eventType,
123
- correlationId: session.correlationId,
154
+ correlationId: execution.correlationId,
124
155
  data: eventData,
125
156
  };
126
- this.onComplete(completionEvent, session.correlationId);
127
- this.cleanupSession(sessionId, session);
128
- }
129
- collectResults(session) {
130
- const completed = [];
131
- for (const tracker of session.items.values()) {
132
- if (tracker.completed) {
133
- completed.push(tracker.key);
134
- }
135
- }
136
- return completed;
137
- }
138
- cleanupSession(sessionId, session) {
139
- for (const key of session.items.keys()) {
140
- this.keyToSession.delete(this.keyWithCorrelation(key, session.correlationId));
141
- }
142
- this.sessions.delete(sessionId);
157
+ await this.emitEvent({
158
+ type: 'PhasedExecutionCompleted',
159
+ data: { executionId, success, results },
160
+ });
161
+ this.onComplete(completionEvent, execution.correlationId);
143
162
  }
144
- findItemByKey(session, key) {
145
- const items = session.handler.itemsSelector(session.triggerEvent);
163
+ findItemByKey(triggerEvent, handler, key) {
164
+ const items = handler.itemsSelector(triggerEvent);
146
165
  return items.find((item) => {
147
- const itemKey = session.handler.completion.itemKey({
148
- type: session.triggerEvent.type,
166
+ const itemKey = handler.completion.itemKey({
167
+ type: triggerEvent.type,
149
168
  data: item,
150
169
  });
151
170
  return itemKey === key;
152
171
  });
153
172
  }
154
173
  isFailureEvent(event, handler) {
155
- return event.type === handler.completion.failureEvent;
174
+ return event.type === handler.completion.failureEvent.name;
156
175
  }
157
176
  generateSessionId(correlationId, handler) {
158
177
  return `phased-${correlationId}-${handler.eventType}`;
159
178
  }
160
- keyWithCorrelation(key, correlationId) {
161
- return `${correlationId}::${key}`;
179
+ generateHandlerId(handler) {
180
+ return `phased-handler-${handler.eventType}`;
181
+ }
182
+ async emitEvent(event) {
183
+ await this.onEventEmit?.(event);
162
184
  }
163
185
  }
164
186
  //# sourceMappingURL=phased-executor.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"phased-executor.js","sourceRoot":"","sources":["../../../src/runtime/phased-executor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"phased-executor.js","sourceRoot":"","sources":["../../../src/runtime/phased-executor.ts"],"names":[],"mappings":"AAYA,MAAM,OAAO,cAAc;IAOzB,YAAY,OAA8B;QANlC,oBAAe,GAAG,IAAI,GAAG,EAAmC,CAAC;QAOnE,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;QACnC,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;QACrC,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;QACrC,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;IACzC,CAAC;IAED,eAAe,CAAC,OAAgC;QAC9C,MAAM,SAAS,GAAG,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;QAClD,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAC/C,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,OAAgC,EAAE,KAAY,EAAE,aAAqB;QACrF,MAAM,KAAK,GAAG,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC3C,MAAM,QAAQ,GAAmF,EAAE,CAAC;QAEpG,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,GAAG,GAAG,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,IAA+B,EAAE,CAAC,CAAC;YACpG,MAAM,KAAK,GAAG,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YACvC,QAAQ,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;QACrE,CAAC;QAED,MAAM,WAAW,GAAG,IAAI,CAAC,iBAAiB,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;QACnE,MAAM,SAAS,GAAG,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;QAElD,MAAM,IAAI,CAAC,SAAS,CAAC;YACnB,IAAI,EAAE,wBAAwB;YAC9B,IAAI,EAAE;gBACJ,WAAW;gBACX,aAAa;gBACb,SAAS;gBACT,YAAY,EAAE,KAAK;gBACnB,KAAK,EAAE,QAAQ;gBACf,MAAM,EAAE,OAAO,CAAC,MAAM;aACvB;SACF,CAAC,CAAC;QAEH,MAAM,IAAI,CAAC,oBAAoB,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IACxD,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,KAAY,EAAE,OAAe;QACjD,MAAM,aAAa,GAAG,KAAK,CAAC,aAAa,CAAC;QAC1C,IAAI,aAAa,KAAK,SAAS,IAAI,aAAa,KAAK,EAAE;YAAE,OAAO;QAEhE,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,yBAAyB,CAAC,aAAa,CAAC,CAAC;QACjF,MAAM,SAAS,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,KAAK,OAAO,CAAC,CAAC,CAAC;QAEzF,IAAI,SAAS,KAAK,SAAS;YAAE,OAAO;QAEpC,MAAM,OAAO,GAAG,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,OAAO,CAAC,CAAC;QAC/D,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,CAAC,SAAS;YAAE,OAAO;QAEvD,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QAC9D,IAAI,OAAO,KAAK,SAAS;YAAE,OAAO;QAElC,IAAI,OAAO,CAAC,aAAa,IAAI,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,CAAC;YACjE,MAAM,IAAI,CAAC,SAAS,CAAC;gBACnB,IAAI,EAAE,kBAAkB;gBACxB,IAAI,EAAE,EAAE,WAAW,EAAE,SAAS,CAAC,WAAW,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE;aACpE,CAAC,CAAC;YACH,MAAM,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;YACzD,OAAO;QACT,CAAC;QAED,MAAM,IAAI,CAAC,SAAS,CAAC;YACnB,IAAI,EAAE,qBAAqB;YAC3B,IAAI,EAAE,EAAE,WAAW,EAAE,SAAS,CAAC,WAAW,EAAE,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE;SAC1E,CAAC,CAAC;QAEH,MAAM,gBAAgB,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,kBAAkB,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;QACxF,IAAI,gBAAgB,KAAK,IAAI;YAAE,OAAO;QAEtC,MAAM,YAAY,GAAG,IAAI,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,CAAC;QAChE,IAAI,YAAY,KAAK,CAAC,EAAE,CAAC;YACvB,MAAM,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QAChE,CAAC;IACH,CAAC;IAED,KAAK,CAAC,qBAAqB;QACzB,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,yBAAyB,CAAC,EAAE,CAAC,CAAC;QACzE,OAAO,aAAa,CAAC,MAAM,CAAC;IAC9B,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,aAAqB,EAAE,KAAa;QACxD,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,yBAAyB,CAAC,aAAa,CAAC,CAAC;QACjF,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;YACnC,MAAM,UAAU,GAAG,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YACnD,IAAI,UAAU,KAAK,CAAC,CAAC;gBAAE,SAAS;YAEhC,IAAI,SAAS,CAAC,iBAAiB,GAAG,UAAU,EAAE,CAAC;gBAC7C,OAAO,IAAI,CAAC;YACd,CAAC;YAED,IAAI,SAAS,CAAC,iBAAiB,KAAK,UAAU,EAAE,CAAC;gBAC/C,MAAM,YAAY,GAAG,IAAI,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC;gBACzD,OAAO,YAAY,KAAK,CAAC,CAAC;YAC5B,CAAC;YAED,OAAO,KAAK,CAAC;QACf,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAEO,mBAAmB,CAAC,SAAkC;QAC5D,IAAI,OAAO,GAAG,CAAC,CAAC;QAChB,MAAM,YAAY,GAAG,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;QACnE,KAAK,MAAM,IAAI,IAAI,SAAS,CAAC,KAAK,EAAE,CAAC;YACnC,IAAI,IAAI,CAAC,KAAK,KAAK,YAAY,IAAI,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;gBACtE,OAAO,EAAE,CAAC;YACZ,CAAC;QACH,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAEO,KAAK,CAAC,oBAAoB,CAAC,WAAmB,EAAE,OAAgC;QACtF,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,kBAAkB,CAAC,WAAW,CAAC,CAAC;QACvE,IAAI,SAAS,KAAK,IAAI;YAAE,OAAO;QAE/B,IAAI,SAAS,CAAC,iBAAiB,IAAI,SAAS,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;YAC3D,MAAM,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;YACvD,OAAO;QACT,CAAC;QAED,MAAM,YAAY,GAAG,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;QACnE,MAAM,eAAe,GAAG,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,YAAY,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;QAEjG,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACjC,MAAM,IAAI,CAAC,kBAAkB,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;YACpD,OAAO;QACT,CAAC;QAED,KAAK,MAAM,IAAI,IAAI,eAAe,EAAE,CAAC;YACnC,MAAM,IAAI,CAAC,SAAS,CAAC;gBACnB,IAAI,EAAE,sBAAsB;gBAC5B,IAAI,EAAE,EAAE,WAAW,EAAE,OAAO,EAAE,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE;aAC5D,CAAC,CAAC;YAEH,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,YAAY,EAAE,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;YACnF,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;gBAC/B,MAAM,OAAO,GAAG,OAAO,CAAC,WAAW,CAAC,YAAY,EAAE,IAAI,CAAC,KAAK,EAAE,SAAS,CAAC,YAAY,CAAC,CAAC;gBACtF,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,WAAW,EAAE,OAAO,CAAC,IAAI,EAAE,SAAS,CAAC,aAAa,CAAC,CAAC;YAC9E,CAAC;QACH,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,kBAAkB,CAAC,WAAmB,EAAE,OAAgC;QACpF,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,kBAAkB,CAAC,WAAW,CAAC,CAAC;QACvE,IAAI,SAAS,KAAK,IAAI;YAAE,OAAO;QAE/B,MAAM,SAAS,GAAG,SAAS,CAAC,iBAAiB,CAAC;QAC9C,MAAM,OAAO,GAAG,SAAS,GAAG,CAAC,CAAC;QAE9B,MAAM,IAAI,CAAC,SAAS,CAAC;YACnB,IAAI,EAAE,qBAAqB;YAC3B,IAAI,EAAE,EAAE,WAAW,EAAE,SAAS,EAAE,OAAO,EAAE;SAC1C,CAAC,CAAC;QAEH,MAAM,IAAI,CAAC,oBAAoB,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IACxD,CAAC;IAEO,KAAK,CAAC,aAAa,CAAC,WAAmB,EAAE,OAAgC;QAC/E,MAAM,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;IAC1D,CAAC;IAEO,KAAK,CAAC,eAAe,CAC3B,WAAmB,EACnB,OAAgC,EAChC,OAAgB;QAEhB,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,kBAAkB,CAAC,WAAW,CAAC,CAAC;QACvE,IAAI,SAAS,KAAK,IAAI;YAAE,OAAO;QAE/B,MAAM,eAAe,GAAG,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC;QACpG,MAAM,SAAS,GAAG,eAAe,CAAC,IAAI,CAAC;QAEvC,MAAM,OAAO,GAAG,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAC7E,MAAM,SAAS,GAAG,OAAO;YACvB,CAAC,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,CAAC,KAAK,CAAC,MAAM,EAAE;YAChD,CAAC,CAAC,EAAE,QAAQ,EAAE,SAAS,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC;QAErF,MAAM,eAAe,GAAU;YAC7B,IAAI,EAAE,SAAS;YACf,aAAa,EAAE,SAAS,CAAC,aAAa;YACtC,IAAI,EAAE,SAAS;SAChB,CAAC;QAEF,MAAM,IAAI,CAAC,SAAS,CAAC;YACnB,IAAI,EAAE,0BAA0B;YAChC,IAAI,EAAE,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,EAAE;SACxC,CAAC,CAAC;QAEH,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE,SAAS,CAAC,aAAa,CAAC,CAAC;IAC5D,CAAC;IAEO,aAAa,CAAC,YAAmB,EAAE,OAAgC,EAAE,GAAW;QACtF,MAAM,KAAK,GAAG,OAAO,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;QAClD,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE;YACzB,MAAM,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC;gBACzC,IAAI,EAAE,YAAY,CAAC,IAAI;gBACvB,IAAI,EAAE,IAA+B;aACtC,CAAC,CAAC;YACH,OAAO,OAAO,KAAK,GAAG,CAAC;QACzB,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,cAAc,CAAC,KAAY,EAAE,OAAgC;QACnE,OAAO,KAAK,CAAC,IAAI,KAAK,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC;IAC7D,CAAC;IAEO,iBAAiB,CAAC,aAAqB,EAAE,OAAgC;QAC/E,OAAO,UAAU,aAAa,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;IACxD,CAAC;IAEO,iBAAiB,CAAC,OAAgC;QACxD,OAAO,kBAAkB,OAAO,CAAC,SAAS,EAAE,CAAC;IAC/C,CAAC;IAEO,KAAK,CAAC,SAAS,CAAC,KAA2B;QACjD,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC;IAClC,CAAC;CACF"}