@auto-engineer/pipeline 0.20.0 → 0.21.2

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 (212) hide show
  1. package/.turbo/turbo-build.log +1 -1
  2. package/CHANGELOG.md +20 -0
  3. package/dist/src/server/pipeline-server.d.ts +2 -0
  4. package/dist/src/server/pipeline-server.d.ts.map +1 -1
  5. package/dist/src/server/pipeline-server.js +3 -0
  6. package/dist/src/server/pipeline-server.js.map +1 -1
  7. package/dist/tsconfig.tsbuildinfo +1 -1
  8. package/package.json +3 -3
  9. package/src/server/pipeline-server.specs.ts +9 -0
  10. package/src/server/pipeline-server.ts +4 -0
  11. package/.turbo/turbo-test.log +0 -14
  12. package/.turbo/turbo-type-check.log +0 -4
  13. package/coverage/base.css +0 -224
  14. package/coverage/block-navigation.js +0 -87
  15. package/coverage/builder/define.ts.html +0 -2224
  16. package/coverage/builder/index.html +0 -116
  17. package/coverage/config/index.html +0 -116
  18. package/coverage/config/pipeline-config.ts.html +0 -181
  19. package/coverage/core/descriptors.ts.html +0 -397
  20. package/coverage/core/index.html +0 -131
  21. package/coverage/core/types.ts.html +0 -133
  22. package/coverage/coverage-final.json +0 -33
  23. package/coverage/favicon.png +0 -0
  24. package/coverage/graph/filter-graph.ts.html +0 -418
  25. package/coverage/graph/index.html +0 -131
  26. package/coverage/graph/types.ts.html +0 -172
  27. package/coverage/index.html +0 -266
  28. package/coverage/logging/event-logger.ts.html +0 -235
  29. package/coverage/logging/index.html +0 -116
  30. package/coverage/plugins/handler-adapter.ts.html +0 -148
  31. package/coverage/plugins/index.html +0 -131
  32. package/coverage/plugins/plugin-loader.ts.html +0 -691
  33. package/coverage/prettify.css +0 -1
  34. package/coverage/prettify.js +0 -2
  35. package/coverage/projections/await-tracker-projection.ts.html +0 -289
  36. package/coverage/projections/index.html +0 -221
  37. package/coverage/projections/item-status-projection.ts.html +0 -181
  38. package/coverage/projections/latest-run-projection.ts.html +0 -145
  39. package/coverage/projections/message-log-projection.ts.html +0 -424
  40. package/coverage/projections/node-status-projection.ts.html +0 -184
  41. package/coverage/projections/phased-execution-projection.ts.html +0 -523
  42. package/coverage/projections/settled-instance-projection.ts.html +0 -565
  43. package/coverage/projections/stats-projection.ts.html +0 -163
  44. package/coverage/runtime/await-tracker.ts.html +0 -271
  45. package/coverage/runtime/context.ts.html +0 -124
  46. package/coverage/runtime/event-command-map.ts.html +0 -220
  47. package/coverage/runtime/index.html +0 -191
  48. package/coverage/runtime/phased-executor.ts.html +0 -775
  49. package/coverage/runtime/pipeline-runtime.ts.html +0 -448
  50. package/coverage/runtime/settled-tracker.ts.html +0 -790
  51. package/coverage/server/index.html +0 -131
  52. package/coverage/server/pipeline-server.ts.html +0 -3253
  53. package/coverage/server/sse-manager.ts.html +0 -310
  54. package/coverage/sort-arrow-sprite.png +0 -0
  55. package/coverage/sorter.js +0 -210
  56. package/coverage/store/index.html +0 -146
  57. package/coverage/store/pipeline-event-store.ts.html +0 -553
  58. package/coverage/store/pipeline-read-model.ts.html +0 -754
  59. package/coverage/store/sqlite-pipeline-event-store.ts.html +0 -193
  60. package/coverage/testing/event-capture.ts.html +0 -280
  61. package/coverage/testing/index.html +0 -161
  62. package/coverage/testing/mock-handlers.ts.html +0 -259
  63. package/coverage/testing/snapshot-compare.ts.html +0 -403
  64. package/coverage/testing/snapshot-sanitize.ts.html +0 -136
  65. package/dist/src/builder/define.specs.d.ts +0 -2
  66. package/dist/src/builder/define.specs.d.ts.map +0 -1
  67. package/dist/src/builder/define.specs.js +0 -435
  68. package/dist/src/builder/define.specs.js.map +0 -1
  69. package/dist/src/core/descriptors.specs.d.ts +0 -2
  70. package/dist/src/core/descriptors.specs.d.ts.map +0 -1
  71. package/dist/src/core/descriptors.specs.js +0 -24
  72. package/dist/src/core/descriptors.specs.js.map +0 -1
  73. package/dist/src/core/types.specs.d.ts +0 -2
  74. package/dist/src/core/types.specs.d.ts.map +0 -1
  75. package/dist/src/core/types.specs.js +0 -40
  76. package/dist/src/core/types.specs.js.map +0 -1
  77. package/dist/src/graph/filter-graph.specs.d.ts +0 -2
  78. package/dist/src/graph/filter-graph.specs.d.ts.map +0 -1
  79. package/dist/src/graph/filter-graph.specs.js +0 -204
  80. package/dist/src/graph/filter-graph.specs.js.map +0 -1
  81. package/dist/src/graph/types.specs.d.ts +0 -2
  82. package/dist/src/graph/types.specs.d.ts.map +0 -1
  83. package/dist/src/graph/types.specs.js +0 -148
  84. package/dist/src/graph/types.specs.js.map +0 -1
  85. package/dist/src/logging/event-logger.specs.d.ts +0 -2
  86. package/dist/src/logging/event-logger.specs.d.ts.map +0 -1
  87. package/dist/src/logging/event-logger.specs.js +0 -81
  88. package/dist/src/logging/event-logger.specs.js.map +0 -1
  89. package/dist/src/plugins/handler-adapter.specs.d.ts +0 -2
  90. package/dist/src/plugins/handler-adapter.specs.d.ts.map +0 -1
  91. package/dist/src/plugins/handler-adapter.specs.js +0 -129
  92. package/dist/src/plugins/handler-adapter.specs.js.map +0 -1
  93. package/dist/src/plugins/plugin-loader.specs.d.ts +0 -2
  94. package/dist/src/plugins/plugin-loader.specs.d.ts.map +0 -1
  95. package/dist/src/plugins/plugin-loader.specs.js +0 -246
  96. package/dist/src/plugins/plugin-loader.specs.js.map +0 -1
  97. package/dist/src/projections/item-status-projection.specs.d.ts +0 -2
  98. package/dist/src/projections/item-status-projection.specs.d.ts.map +0 -1
  99. package/dist/src/projections/item-status-projection.specs.js +0 -119
  100. package/dist/src/projections/item-status-projection.specs.js.map +0 -1
  101. package/dist/src/projections/latest-run-projection.specs.d.ts +0 -2
  102. package/dist/src/projections/latest-run-projection.specs.d.ts.map +0 -1
  103. package/dist/src/projections/latest-run-projection.specs.js +0 -33
  104. package/dist/src/projections/latest-run-projection.specs.js.map +0 -1
  105. package/dist/src/projections/message-log-projection.specs.d.ts +0 -2
  106. package/dist/src/projections/message-log-projection.specs.d.ts.map +0 -1
  107. package/dist/src/projections/message-log-projection.specs.js +0 -101
  108. package/dist/src/projections/message-log-projection.specs.js.map +0 -1
  109. package/dist/src/projections/node-status-projection.specs.d.ts +0 -2
  110. package/dist/src/projections/node-status-projection.specs.d.ts.map +0 -1
  111. package/dist/src/projections/node-status-projection.specs.js +0 -116
  112. package/dist/src/projections/node-status-projection.specs.js.map +0 -1
  113. package/dist/src/projections/phased-execution-projection.specs.d.ts +0 -2
  114. package/dist/src/projections/phased-execution-projection.specs.d.ts.map +0 -1
  115. package/dist/src/projections/phased-execution-projection.specs.js +0 -171
  116. package/dist/src/projections/phased-execution-projection.specs.js.map +0 -1
  117. package/dist/src/projections/settled-instance-projection.specs.d.ts +0 -2
  118. package/dist/src/projections/settled-instance-projection.specs.d.ts.map +0 -1
  119. package/dist/src/projections/settled-instance-projection.specs.js +0 -217
  120. package/dist/src/projections/settled-instance-projection.specs.js.map +0 -1
  121. package/dist/src/projections/stats-projection.specs.d.ts +0 -2
  122. package/dist/src/projections/stats-projection.specs.d.ts.map +0 -1
  123. package/dist/src/projections/stats-projection.specs.js +0 -91
  124. package/dist/src/projections/stats-projection.specs.js.map +0 -1
  125. package/dist/src/runtime/await-tracker.specs.d.ts +0 -2
  126. package/dist/src/runtime/await-tracker.specs.d.ts.map +0 -1
  127. package/dist/src/runtime/await-tracker.specs.js +0 -64
  128. package/dist/src/runtime/await-tracker.specs.js.map +0 -1
  129. package/dist/src/runtime/context.specs.d.ts +0 -2
  130. package/dist/src/runtime/context.specs.d.ts.map +0 -1
  131. package/dist/src/runtime/context.specs.js +0 -26
  132. package/dist/src/runtime/context.specs.js.map +0 -1
  133. package/dist/src/runtime/event-command-map.specs.d.ts +0 -2
  134. package/dist/src/runtime/event-command-map.specs.d.ts.map +0 -1
  135. package/dist/src/runtime/event-command-map.specs.js +0 -108
  136. package/dist/src/runtime/event-command-map.specs.js.map +0 -1
  137. package/dist/src/runtime/phased-executor.specs.d.ts +0 -2
  138. package/dist/src/runtime/phased-executor.specs.d.ts.map +0 -1
  139. package/dist/src/runtime/phased-executor.specs.js +0 -418
  140. package/dist/src/runtime/phased-executor.specs.js.map +0 -1
  141. package/dist/src/runtime/pipeline-runtime.specs.d.ts +0 -2
  142. package/dist/src/runtime/pipeline-runtime.specs.d.ts.map +0 -1
  143. package/dist/src/runtime/pipeline-runtime.specs.js +0 -227
  144. package/dist/src/runtime/pipeline-runtime.specs.js.map +0 -1
  145. package/dist/src/runtime/settled-tracker.specs.d.ts +0 -2
  146. package/dist/src/runtime/settled-tracker.specs.d.ts.map +0 -1
  147. package/dist/src/runtime/settled-tracker.specs.js +0 -811
  148. package/dist/src/runtime/settled-tracker.specs.js.map +0 -1
  149. package/dist/src/server/full-orchestration.e2e.specs.d.ts +0 -2
  150. package/dist/src/server/full-orchestration.e2e.specs.d.ts.map +0 -1
  151. package/dist/src/server/full-orchestration.e2e.specs.js +0 -561
  152. package/dist/src/server/full-orchestration.e2e.specs.js.map +0 -1
  153. package/dist/src/server/pipeline-server.e2e.specs.d.ts +0 -2
  154. package/dist/src/server/pipeline-server.e2e.specs.d.ts.map +0 -1
  155. package/dist/src/server/pipeline-server.e2e.specs.js +0 -373
  156. package/dist/src/server/pipeline-server.e2e.specs.js.map +0 -1
  157. package/dist/src/server/pipeline-server.specs.d.ts +0 -2
  158. package/dist/src/server/pipeline-server.specs.d.ts.map +0 -1
  159. package/dist/src/server/pipeline-server.specs.js +0 -1407
  160. package/dist/src/server/pipeline-server.specs.js.map +0 -1
  161. package/dist/src/server/sse-manager.specs.d.ts +0 -2
  162. package/dist/src/server/sse-manager.specs.d.ts.map +0 -1
  163. package/dist/src/server/sse-manager.specs.js +0 -178
  164. package/dist/src/server/sse-manager.specs.js.map +0 -1
  165. package/dist/src/store/pipeline-event-store.specs.d.ts +0 -2
  166. package/dist/src/store/pipeline-event-store.specs.d.ts.map +0 -1
  167. package/dist/src/store/pipeline-event-store.specs.js +0 -287
  168. package/dist/src/store/pipeline-event-store.specs.js.map +0 -1
  169. package/dist/src/store/pipeline-read-model.specs.d.ts +0 -2
  170. package/dist/src/store/pipeline-read-model.specs.d.ts.map +0 -1
  171. package/dist/src/store/pipeline-read-model.specs.js +0 -830
  172. package/dist/src/store/pipeline-read-model.specs.js.map +0 -1
  173. package/dist/src/testing/event-capture.specs.d.ts +0 -2
  174. package/dist/src/testing/event-capture.specs.d.ts.map +0 -1
  175. package/dist/src/testing/event-capture.specs.js +0 -114
  176. package/dist/src/testing/event-capture.specs.js.map +0 -1
  177. package/dist/src/testing/fixtures/kanban-full.pipeline.specs.d.ts +0 -2
  178. package/dist/src/testing/fixtures/kanban-full.pipeline.specs.d.ts.map +0 -1
  179. package/dist/src/testing/fixtures/kanban-full.pipeline.specs.js +0 -263
  180. package/dist/src/testing/fixtures/kanban-full.pipeline.specs.js.map +0 -1
  181. package/dist/src/testing/fixtures/kanban.pipeline.specs.d.ts +0 -2
  182. package/dist/src/testing/fixtures/kanban.pipeline.specs.d.ts.map +0 -1
  183. package/dist/src/testing/fixtures/kanban.pipeline.specs.js +0 -29
  184. package/dist/src/testing/fixtures/kanban.pipeline.specs.js.map +0 -1
  185. package/dist/src/testing/kanban-todo.e2e.specs.d.ts +0 -2
  186. package/dist/src/testing/kanban-todo.e2e.specs.d.ts.map +0 -1
  187. package/dist/src/testing/kanban-todo.e2e.specs.js +0 -160
  188. package/dist/src/testing/kanban-todo.e2e.specs.js.map +0 -1
  189. package/dist/src/testing/mock-handlers.specs.d.ts +0 -2
  190. package/dist/src/testing/mock-handlers.specs.d.ts.map +0 -1
  191. package/dist/src/testing/mock-handlers.specs.js +0 -193
  192. package/dist/src/testing/mock-handlers.specs.js.map +0 -1
  193. package/dist/src/testing/real-execution.e2e.specs.d.ts +0 -2
  194. package/dist/src/testing/real-execution.e2e.specs.d.ts.map +0 -1
  195. package/dist/src/testing/real-execution.e2e.specs.js +0 -140
  196. package/dist/src/testing/real-execution.e2e.specs.js.map +0 -1
  197. package/dist/src/testing/real-plugin.e2e.specs.d.ts +0 -2
  198. package/dist/src/testing/real-plugin.e2e.specs.d.ts.map +0 -1
  199. package/dist/src/testing/real-plugin.e2e.specs.js +0 -65
  200. package/dist/src/testing/real-plugin.e2e.specs.js.map +0 -1
  201. package/dist/src/testing/server-startup.e2e.specs.d.ts +0 -2
  202. package/dist/src/testing/server-startup.e2e.specs.d.ts.map +0 -1
  203. package/dist/src/testing/server-startup.e2e.specs.js +0 -104
  204. package/dist/src/testing/server-startup.e2e.specs.js.map +0 -1
  205. package/dist/src/testing/snapshot-compare.specs.d.ts +0 -2
  206. package/dist/src/testing/snapshot-compare.specs.d.ts.map +0 -1
  207. package/dist/src/testing/snapshot-compare.specs.js +0 -112
  208. package/dist/src/testing/snapshot-compare.specs.js.map +0 -1
  209. package/dist/src/testing/snapshot-sanitize.specs.d.ts +0 -2
  210. package/dist/src/testing/snapshot-sanitize.specs.d.ts.map +0 -1
  211. package/dist/src/testing/snapshot-sanitize.specs.js +0 -104
  212. package/dist/src/testing/snapshot-sanitize.specs.js.map +0 -1
@@ -1,775 +0,0 @@
1
-
2
- <!doctype html>
3
- <html lang="en">
4
-
5
- <head>
6
- <title>Code coverage report for runtime/phased-executor.ts</title>
7
- <meta charset="utf-8" />
8
- <link rel="stylesheet" href="../prettify.css" />
9
- <link rel="stylesheet" href="../base.css" />
10
- <link rel="shortcut icon" type="image/x-icon" href="../favicon.png" />
11
- <meta name="viewport" content="width=device-width, initial-scale=1" />
12
- <style type='text/css'>
13
- .coverage-summary .sorter {
14
- background-image: url(../sort-arrow-sprite.png);
15
- }
16
- </style>
17
- </head>
18
-
19
- <body>
20
- <div class='wrapper'>
21
- <div class='pad1'>
22
- <h1><a href="../index.html">All files</a> / <a href="index.html">runtime</a> phased-executor.ts</h1>
23
- <div class='clearfix'>
24
-
25
- <div class='fl pad1y space-right2'>
26
- <span class="strong">100% </span>
27
- <span class="quiet">Statements</span>
28
- <span class='fraction'>171/171</span>
29
- </div>
30
-
31
-
32
- <div class='fl pad1y space-right2'>
33
- <span class="strong">100% </span>
34
- <span class="quiet">Branches</span>
35
- <span class='fraction'>60/60</span>
36
- </div>
37
-
38
-
39
- <div class='fl pad1y space-right2'>
40
- <span class="strong">100% </span>
41
- <span class="quiet">Functions</span>
42
- <span class='fraction'>15/15</span>
43
- </div>
44
-
45
-
46
- <div class='fl pad1y space-right2'>
47
- <span class="strong">100% </span>
48
- <span class="quiet">Lines</span>
49
- <span class='fraction'>171/171</span>
50
- </div>
51
-
52
-
53
- </div>
54
- <p class="quiet">
55
- Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
56
- </p>
57
- <template id="filterTemplate">
58
- <div class="quiet">
59
- Filter:
60
- <input type="search" id="fileSearch">
61
- </div>
62
- </template>
63
- </div>
64
- <div class='status-line high'></div>
65
- <pre><table class="coverage">
66
- <tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
67
- <a name='L2'></a><a href='#L2'>2</a>
68
- <a name='L3'></a><a href='#L3'>3</a>
69
- <a name='L4'></a><a href='#L4'>4</a>
70
- <a name='L5'></a><a href='#L5'>5</a>
71
- <a name='L6'></a><a href='#L6'>6</a>
72
- <a name='L7'></a><a href='#L7'>7</a>
73
- <a name='L8'></a><a href='#L8'>8</a>
74
- <a name='L9'></a><a href='#L9'>9</a>
75
- <a name='L10'></a><a href='#L10'>10</a>
76
- <a name='L11'></a><a href='#L11'>11</a>
77
- <a name='L12'></a><a href='#L12'>12</a>
78
- <a name='L13'></a><a href='#L13'>13</a>
79
- <a name='L14'></a><a href='#L14'>14</a>
80
- <a name='L15'></a><a href='#L15'>15</a>
81
- <a name='L16'></a><a href='#L16'>16</a>
82
- <a name='L17'></a><a href='#L17'>17</a>
83
- <a name='L18'></a><a href='#L18'>18</a>
84
- <a name='L19'></a><a href='#L19'>19</a>
85
- <a name='L20'></a><a href='#L20'>20</a>
86
- <a name='L21'></a><a href='#L21'>21</a>
87
- <a name='L22'></a><a href='#L22'>22</a>
88
- <a name='L23'></a><a href='#L23'>23</a>
89
- <a name='L24'></a><a href='#L24'>24</a>
90
- <a name='L25'></a><a href='#L25'>25</a>
91
- <a name='L26'></a><a href='#L26'>26</a>
92
- <a name='L27'></a><a href='#L27'>27</a>
93
- <a name='L28'></a><a href='#L28'>28</a>
94
- <a name='L29'></a><a href='#L29'>29</a>
95
- <a name='L30'></a><a href='#L30'>30</a>
96
- <a name='L31'></a><a href='#L31'>31</a>
97
- <a name='L32'></a><a href='#L32'>32</a>
98
- <a name='L33'></a><a href='#L33'>33</a>
99
- <a name='L34'></a><a href='#L34'>34</a>
100
- <a name='L35'></a><a href='#L35'>35</a>
101
- <a name='L36'></a><a href='#L36'>36</a>
102
- <a name='L37'></a><a href='#L37'>37</a>
103
- <a name='L38'></a><a href='#L38'>38</a>
104
- <a name='L39'></a><a href='#L39'>39</a>
105
- <a name='L40'></a><a href='#L40'>40</a>
106
- <a name='L41'></a><a href='#L41'>41</a>
107
- <a name='L42'></a><a href='#L42'>42</a>
108
- <a name='L43'></a><a href='#L43'>43</a>
109
- <a name='L44'></a><a href='#L44'>44</a>
110
- <a name='L45'></a><a href='#L45'>45</a>
111
- <a name='L46'></a><a href='#L46'>46</a>
112
- <a name='L47'></a><a href='#L47'>47</a>
113
- <a name='L48'></a><a href='#L48'>48</a>
114
- <a name='L49'></a><a href='#L49'>49</a>
115
- <a name='L50'></a><a href='#L50'>50</a>
116
- <a name='L51'></a><a href='#L51'>51</a>
117
- <a name='L52'></a><a href='#L52'>52</a>
118
- <a name='L53'></a><a href='#L53'>53</a>
119
- <a name='L54'></a><a href='#L54'>54</a>
120
- <a name='L55'></a><a href='#L55'>55</a>
121
- <a name='L56'></a><a href='#L56'>56</a>
122
- <a name='L57'></a><a href='#L57'>57</a>
123
- <a name='L58'></a><a href='#L58'>58</a>
124
- <a name='L59'></a><a href='#L59'>59</a>
125
- <a name='L60'></a><a href='#L60'>60</a>
126
- <a name='L61'></a><a href='#L61'>61</a>
127
- <a name='L62'></a><a href='#L62'>62</a>
128
- <a name='L63'></a><a href='#L63'>63</a>
129
- <a name='L64'></a><a href='#L64'>64</a>
130
- <a name='L65'></a><a href='#L65'>65</a>
131
- <a name='L66'></a><a href='#L66'>66</a>
132
- <a name='L67'></a><a href='#L67'>67</a>
133
- <a name='L68'></a><a href='#L68'>68</a>
134
- <a name='L69'></a><a href='#L69'>69</a>
135
- <a name='L70'></a><a href='#L70'>70</a>
136
- <a name='L71'></a><a href='#L71'>71</a>
137
- <a name='L72'></a><a href='#L72'>72</a>
138
- <a name='L73'></a><a href='#L73'>73</a>
139
- <a name='L74'></a><a href='#L74'>74</a>
140
- <a name='L75'></a><a href='#L75'>75</a>
141
- <a name='L76'></a><a href='#L76'>76</a>
142
- <a name='L77'></a><a href='#L77'>77</a>
143
- <a name='L78'></a><a href='#L78'>78</a>
144
- <a name='L79'></a><a href='#L79'>79</a>
145
- <a name='L80'></a><a href='#L80'>80</a>
146
- <a name='L81'></a><a href='#L81'>81</a>
147
- <a name='L82'></a><a href='#L82'>82</a>
148
- <a name='L83'></a><a href='#L83'>83</a>
149
- <a name='L84'></a><a href='#L84'>84</a>
150
- <a name='L85'></a><a href='#L85'>85</a>
151
- <a name='L86'></a><a href='#L86'>86</a>
152
- <a name='L87'></a><a href='#L87'>87</a>
153
- <a name='L88'></a><a href='#L88'>88</a>
154
- <a name='L89'></a><a href='#L89'>89</a>
155
- <a name='L90'></a><a href='#L90'>90</a>
156
- <a name='L91'></a><a href='#L91'>91</a>
157
- <a name='L92'></a><a href='#L92'>92</a>
158
- <a name='L93'></a><a href='#L93'>93</a>
159
- <a name='L94'></a><a href='#L94'>94</a>
160
- <a name='L95'></a><a href='#L95'>95</a>
161
- <a name='L96'></a><a href='#L96'>96</a>
162
- <a name='L97'></a><a href='#L97'>97</a>
163
- <a name='L98'></a><a href='#L98'>98</a>
164
- <a name='L99'></a><a href='#L99'>99</a>
165
- <a name='L100'></a><a href='#L100'>100</a>
166
- <a name='L101'></a><a href='#L101'>101</a>
167
- <a name='L102'></a><a href='#L102'>102</a>
168
- <a name='L103'></a><a href='#L103'>103</a>
169
- <a name='L104'></a><a href='#L104'>104</a>
170
- <a name='L105'></a><a href='#L105'>105</a>
171
- <a name='L106'></a><a href='#L106'>106</a>
172
- <a name='L107'></a><a href='#L107'>107</a>
173
- <a name='L108'></a><a href='#L108'>108</a>
174
- <a name='L109'></a><a href='#L109'>109</a>
175
- <a name='L110'></a><a href='#L110'>110</a>
176
- <a name='L111'></a><a href='#L111'>111</a>
177
- <a name='L112'></a><a href='#L112'>112</a>
178
- <a name='L113'></a><a href='#L113'>113</a>
179
- <a name='L114'></a><a href='#L114'>114</a>
180
- <a name='L115'></a><a href='#L115'>115</a>
181
- <a name='L116'></a><a href='#L116'>116</a>
182
- <a name='L117'></a><a href='#L117'>117</a>
183
- <a name='L118'></a><a href='#L118'>118</a>
184
- <a name='L119'></a><a href='#L119'>119</a>
185
- <a name='L120'></a><a href='#L120'>120</a>
186
- <a name='L121'></a><a href='#L121'>121</a>
187
- <a name='L122'></a><a href='#L122'>122</a>
188
- <a name='L123'></a><a href='#L123'>123</a>
189
- <a name='L124'></a><a href='#L124'>124</a>
190
- <a name='L125'></a><a href='#L125'>125</a>
191
- <a name='L126'></a><a href='#L126'>126</a>
192
- <a name='L127'></a><a href='#L127'>127</a>
193
- <a name='L128'></a><a href='#L128'>128</a>
194
- <a name='L129'></a><a href='#L129'>129</a>
195
- <a name='L130'></a><a href='#L130'>130</a>
196
- <a name='L131'></a><a href='#L131'>131</a>
197
- <a name='L132'></a><a href='#L132'>132</a>
198
- <a name='L133'></a><a href='#L133'>133</a>
199
- <a name='L134'></a><a href='#L134'>134</a>
200
- <a name='L135'></a><a href='#L135'>135</a>
201
- <a name='L136'></a><a href='#L136'>136</a>
202
- <a name='L137'></a><a href='#L137'>137</a>
203
- <a name='L138'></a><a href='#L138'>138</a>
204
- <a name='L139'></a><a href='#L139'>139</a>
205
- <a name='L140'></a><a href='#L140'>140</a>
206
- <a name='L141'></a><a href='#L141'>141</a>
207
- <a name='L142'></a><a href='#L142'>142</a>
208
- <a name='L143'></a><a href='#L143'>143</a>
209
- <a name='L144'></a><a href='#L144'>144</a>
210
- <a name='L145'></a><a href='#L145'>145</a>
211
- <a name='L146'></a><a href='#L146'>146</a>
212
- <a name='L147'></a><a href='#L147'>147</a>
213
- <a name='L148'></a><a href='#L148'>148</a>
214
- <a name='L149'></a><a href='#L149'>149</a>
215
- <a name='L150'></a><a href='#L150'>150</a>
216
- <a name='L151'></a><a href='#L151'>151</a>
217
- <a name='L152'></a><a href='#L152'>152</a>
218
- <a name='L153'></a><a href='#L153'>153</a>
219
- <a name='L154'></a><a href='#L154'>154</a>
220
- <a name='L155'></a><a href='#L155'>155</a>
221
- <a name='L156'></a><a href='#L156'>156</a>
222
- <a name='L157'></a><a href='#L157'>157</a>
223
- <a name='L158'></a><a href='#L158'>158</a>
224
- <a name='L159'></a><a href='#L159'>159</a>
225
- <a name='L160'></a><a href='#L160'>160</a>
226
- <a name='L161'></a><a href='#L161'>161</a>
227
- <a name='L162'></a><a href='#L162'>162</a>
228
- <a name='L163'></a><a href='#L163'>163</a>
229
- <a name='L164'></a><a href='#L164'>164</a>
230
- <a name='L165'></a><a href='#L165'>165</a>
231
- <a name='L166'></a><a href='#L166'>166</a>
232
- <a name='L167'></a><a href='#L167'>167</a>
233
- <a name='L168'></a><a href='#L168'>168</a>
234
- <a name='L169'></a><a href='#L169'>169</a>
235
- <a name='L170'></a><a href='#L170'>170</a>
236
- <a name='L171'></a><a href='#L171'>171</a>
237
- <a name='L172'></a><a href='#L172'>172</a>
238
- <a name='L173'></a><a href='#L173'>173</a>
239
- <a name='L174'></a><a href='#L174'>174</a>
240
- <a name='L175'></a><a href='#L175'>175</a>
241
- <a name='L176'></a><a href='#L176'>176</a>
242
- <a name='L177'></a><a href='#L177'>177</a>
243
- <a name='L178'></a><a href='#L178'>178</a>
244
- <a name='L179'></a><a href='#L179'>179</a>
245
- <a name='L180'></a><a href='#L180'>180</a>
246
- <a name='L181'></a><a href='#L181'>181</a>
247
- <a name='L182'></a><a href='#L182'>182</a>
248
- <a name='L183'></a><a href='#L183'>183</a>
249
- <a name='L184'></a><a href='#L184'>184</a>
250
- <a name='L185'></a><a href='#L185'>185</a>
251
- <a name='L186'></a><a href='#L186'>186</a>
252
- <a name='L187'></a><a href='#L187'>187</a>
253
- <a name='L188'></a><a href='#L188'>188</a>
254
- <a name='L189'></a><a href='#L189'>189</a>
255
- <a name='L190'></a><a href='#L190'>190</a>
256
- <a name='L191'></a><a href='#L191'>191</a>
257
- <a name='L192'></a><a href='#L192'>192</a>
258
- <a name='L193'></a><a href='#L193'>193</a>
259
- <a name='L194'></a><a href='#L194'>194</a>
260
- <a name='L195'></a><a href='#L195'>195</a>
261
- <a name='L196'></a><a href='#L196'>196</a>
262
- <a name='L197'></a><a href='#L197'>197</a>
263
- <a name='L198'></a><a href='#L198'>198</a>
264
- <a name='L199'></a><a href='#L199'>199</a>
265
- <a name='L200'></a><a href='#L200'>200</a>
266
- <a name='L201'></a><a href='#L201'>201</a>
267
- <a name='L202'></a><a href='#L202'>202</a>
268
- <a name='L203'></a><a href='#L203'>203</a>
269
- <a name='L204'></a><a href='#L204'>204</a>
270
- <a name='L205'></a><a href='#L205'>205</a>
271
- <a name='L206'></a><a href='#L206'>206</a>
272
- <a name='L207'></a><a href='#L207'>207</a>
273
- <a name='L208'></a><a href='#L208'>208</a>
274
- <a name='L209'></a><a href='#L209'>209</a>
275
- <a name='L210'></a><a href='#L210'>210</a>
276
- <a name='L211'></a><a href='#L211'>211</a>
277
- <a name='L212'></a><a href='#L212'>212</a>
278
- <a name='L213'></a><a href='#L213'>213</a>
279
- <a name='L214'></a><a href='#L214'>214</a>
280
- <a name='L215'></a><a href='#L215'>215</a>
281
- <a name='L216'></a><a href='#L216'>216</a>
282
- <a name='L217'></a><a href='#L217'>217</a>
283
- <a name='L218'></a><a href='#L218'>218</a>
284
- <a name='L219'></a><a href='#L219'>219</a>
285
- <a name='L220'></a><a href='#L220'>220</a>
286
- <a name='L221'></a><a href='#L221'>221</a>
287
- <a name='L222'></a><a href='#L222'>222</a>
288
- <a name='L223'></a><a href='#L223'>223</a>
289
- <a name='L224'></a><a href='#L224'>224</a>
290
- <a name='L225'></a><a href='#L225'>225</a>
291
- <a name='L226'></a><a href='#L226'>226</a>
292
- <a name='L227'></a><a href='#L227'>227</a>
293
- <a name='L228'></a><a href='#L228'>228</a>
294
- <a name='L229'></a><a href='#L229'>229</a>
295
- <a name='L230'></a><a href='#L230'>230</a>
296
- <a name='L231'></a><a href='#L231'>231</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
297
- <span class="cline-any cline-neutral">&nbsp;</span>
298
- <span class="cline-any cline-neutral">&nbsp;</span>
299
- <span class="cline-any cline-neutral">&nbsp;</span>
300
- <span class="cline-any cline-neutral">&nbsp;</span>
301
- <span class="cline-any cline-neutral">&nbsp;</span>
302
- <span class="cline-any cline-neutral">&nbsp;</span>
303
- <span class="cline-any cline-neutral">&nbsp;</span>
304
- <span class="cline-any cline-neutral">&nbsp;</span>
305
- <span class="cline-any cline-neutral">&nbsp;</span>
306
- <span class="cline-any cline-neutral">&nbsp;</span>
307
- <span class="cline-any cline-neutral">&nbsp;</span>
308
- <span class="cline-any cline-yes">1x</span>
309
- <span class="cline-any cline-yes">1x</span>
310
- <span class="cline-any cline-neutral">&nbsp;</span>
311
- <span class="cline-any cline-neutral">&nbsp;</span>
312
- <span class="cline-any cline-neutral">&nbsp;</span>
313
- <span class="cline-any cline-neutral">&nbsp;</span>
314
- <span class="cline-any cline-neutral">&nbsp;</span>
315
- <span class="cline-any cline-yes">1x</span>
316
- <span class="cline-any cline-yes">111x</span>
317
- <span class="cline-any cline-yes">111x</span>
318
- <span class="cline-any cline-yes">111x</span>
319
- <span class="cline-any cline-yes">111x</span>
320
- <span class="cline-any cline-yes">111x</span>
321
- <span class="cline-any cline-neutral">&nbsp;</span>
322
- <span class="cline-any cline-yes">1x</span>
323
- <span class="cline-any cline-yes">18x</span>
324
- <span class="cline-any cline-yes">18x</span>
325
- <span class="cline-any cline-yes">18x</span>
326
- <span class="cline-any cline-neutral">&nbsp;</span>
327
- <span class="cline-any cline-yes">1x</span>
328
- <span class="cline-any cline-yes">30x</span>
329
- <span class="cline-any cline-yes">30x</span>
330
- <span class="cline-any cline-neutral">&nbsp;</span>
331
- <span class="cline-any cline-yes">30x</span>
332
- <span class="cline-any cline-yes">52x</span>
333
- <span class="cline-any cline-yes">52x</span>
334
- <span class="cline-any cline-yes">52x</span>
335
- <span class="cline-any cline-yes">52x</span>
336
- <span class="cline-any cline-neutral">&nbsp;</span>
337
- <span class="cline-any cline-yes">30x</span>
338
- <span class="cline-any cline-yes">30x</span>
339
- <span class="cline-any cline-neutral">&nbsp;</span>
340
- <span class="cline-any cline-yes">30x</span>
341
- <span class="cline-any cline-yes">30x</span>
342
- <span class="cline-any cline-yes">30x</span>
343
- <span class="cline-any cline-yes">30x</span>
344
- <span class="cline-any cline-yes">30x</span>
345
- <span class="cline-any cline-yes">30x</span>
346
- <span class="cline-any cline-yes">30x</span>
347
- <span class="cline-any cline-yes">30x</span>
348
- <span class="cline-any cline-yes">30x</span>
349
- <span class="cline-any cline-yes">30x</span>
350
- <span class="cline-any cline-yes">30x</span>
351
- <span class="cline-any cline-neutral">&nbsp;</span>
352
- <span class="cline-any cline-yes">30x</span>
353
- <span class="cline-any cline-yes">30x</span>
354
- <span class="cline-any cline-neutral">&nbsp;</span>
355
- <span class="cline-any cline-yes">1x</span>
356
- <span class="cline-any cline-yes">27x</span>
357
- <span class="cline-any cline-yes">27x</span>
358
- <span class="cline-any cline-neutral">&nbsp;</span>
359
- <span class="cline-any cline-yes">25x</span>
360
- <span class="cline-any cline-yes">25x</span>
361
- <span class="cline-any cline-neutral">&nbsp;</span>
362
- <span class="cline-any cline-yes">25x</span>
363
- <span class="cline-any cline-neutral">&nbsp;</span>
364
- <span class="cline-any cline-yes">22x</span>
365
- <span class="cline-any cline-yes">27x</span>
366
- <span class="cline-any cline-neutral">&nbsp;</span>
367
- <span class="cline-any cline-yes">21x</span>
368
- <span class="cline-any cline-neutral">&nbsp;</span>
369
- <span class="cline-any cline-yes">27x</span>
370
- <span class="cline-any cline-yes">3x</span>
371
- <span class="cline-any cline-yes">3x</span>
372
- <span class="cline-any cline-yes">3x</span>
373
- <span class="cline-any cline-yes">3x</span>
374
- <span class="cline-any cline-yes">3x</span>
375
- <span class="cline-any cline-yes">3x</span>
376
- <span class="cline-any cline-yes">3x</span>
377
- <span class="cline-any cline-neutral">&nbsp;</span>
378
- <span class="cline-any cline-yes">18x</span>
379
- <span class="cline-any cline-yes">18x</span>
380
- <span class="cline-any cline-yes">18x</span>
381
- <span class="cline-any cline-yes">18x</span>
382
- <span class="cline-any cline-neutral">&nbsp;</span>
383
- <span class="cline-any cline-yes">18x</span>
384
- <span class="cline-any cline-neutral">&nbsp;</span>
385
- <span class="cline-any cline-yes">18x</span>
386
- <span class="cline-any cline-yes">25x</span>
387
- <span class="cline-any cline-yes">15x</span>
388
- <span class="cline-any cline-yes">15x</span>
389
- <span class="cline-any cline-yes">27x</span>
390
- <span class="cline-any cline-neutral">&nbsp;</span>
391
- <span class="cline-any cline-yes">1x</span>
392
- <span class="cline-any cline-yes">9x</span>
393
- <span class="cline-any cline-yes">9x</span>
394
- <span class="cline-any cline-yes">8x</span>
395
- <span class="cline-any cline-yes">8x</span>
396
- <span class="cline-any cline-neutral">&nbsp;</span>
397
- <span class="cline-any cline-yes">8x</span>
398
- <span class="cline-any cline-yes">2x</span>
399
- <span class="cline-any cline-yes">2x</span>
400
- <span class="cline-any cline-neutral">&nbsp;</span>
401
- <span class="cline-any cline-yes">8x</span>
402
- <span class="cline-any cline-yes">3x</span>
403
- <span class="cline-any cline-yes">3x</span>
404
- <span class="cline-any cline-yes">3x</span>
405
- <span class="cline-any cline-neutral">&nbsp;</span>
406
- <span class="cline-any cline-yes">2x</span>
407
- <span class="cline-any cline-yes">2x</span>
408
- <span class="cline-any cline-yes">2x</span>
409
- <span class="cline-any cline-yes">9x</span>
410
- <span class="cline-any cline-neutral">&nbsp;</span>
411
- <span class="cline-any cline-yes">1x</span>
412
- <span class="cline-any cline-yes">21x</span>
413
- <span class="cline-any cline-yes">21x</span>
414
- <span class="cline-any cline-yes">21x</span>
415
- <span class="cline-any cline-yes">42x</span>
416
- <span class="cline-any cline-yes">6x</span>
417
- <span class="cline-any cline-yes">6x</span>
418
- <span class="cline-any cline-yes">42x</span>
419
- <span class="cline-any cline-yes">21x</span>
420
- <span class="cline-any cline-yes">21x</span>
421
- <span class="cline-any cline-neutral">&nbsp;</span>
422
- <span class="cline-any cline-yes">1x</span>
423
- <span class="cline-any cline-yes">58x</span>
424
- <span class="cline-any cline-neutral">&nbsp;</span>
425
- <span class="cline-any cline-yes">58x</span>
426
- <span class="cline-any cline-yes">6x</span>
427
- <span class="cline-any cline-yes">6x</span>
428
- <span class="cline-any cline-yes">6x</span>
429
- <span class="cline-any cline-neutral">&nbsp;</span>
430
- <span class="cline-any cline-yes">52x</span>
431
- <span class="cline-any cline-yes">52x</span>
432
- <span class="cline-any cline-neutral">&nbsp;</span>
433
- <span class="cline-any cline-yes">58x</span>
434
- <span class="cline-any cline-yes">13x</span>
435
- <span class="cline-any cline-yes">13x</span>
436
- <span class="cline-any cline-yes">13x</span>
437
- <span class="cline-any cline-neutral">&nbsp;</span>
438
- <span class="cline-any cline-yes">58x</span>
439
- <span class="cline-any cline-yes">44x</span>
440
- <span class="cline-any cline-yes">44x</span>
441
- <span class="cline-any cline-yes">44x</span>
442
- <span class="cline-any cline-yes">44x</span>
443
- <span class="cline-any cline-neutral">&nbsp;</span>
444
- <span class="cline-any cline-yes">44x</span>
445
- <span class="cline-any cline-yes">44x</span>
446
- <span class="cline-any cline-yes">44x</span>
447
- <span class="cline-any cline-yes">44x</span>
448
- <span class="cline-any cline-yes">44x</span>
449
- <span class="cline-any cline-yes">44x</span>
450
- <span class="cline-any cline-yes">58x</span>
451
- <span class="cline-any cline-neutral">&nbsp;</span>
452
- <span class="cline-any cline-yes">1x</span>
453
- <span class="cline-any cline-yes">28x</span>
454
- <span class="cline-any cline-neutral">&nbsp;</span>
455
- <span class="cline-any cline-yes">28x</span>
456
- <span class="cline-any cline-yes">28x</span>
457
- <span class="cline-any cline-neutral">&nbsp;</span>
458
- <span class="cline-any cline-yes">28x</span>
459
- <span class="cline-any cline-yes">28x</span>
460
- <span class="cline-any cline-yes">28x</span>
461
- <span class="cline-any cline-yes">28x</span>
462
- <span class="cline-any cline-neutral">&nbsp;</span>
463
- <span class="cline-any cline-yes">28x</span>
464
- <span class="cline-any cline-yes">28x</span>
465
- <span class="cline-any cline-neutral">&nbsp;</span>
466
- <span class="cline-any cline-yes">1x</span>
467
- <span class="cline-any cline-yes">3x</span>
468
- <span class="cline-any cline-yes">3x</span>
469
- <span class="cline-any cline-neutral">&nbsp;</span>
470
- <span class="cline-any cline-yes">1x</span>
471
- <span class="cline-any cline-yes">9x</span>
472
- <span class="cline-any cline-yes">9x</span>
473
- <span class="cline-any cline-yes">9x</span>
474
- <span class="cline-any cline-yes">9x</span>
475
- <span class="cline-any cline-yes">9x</span>
476
- <span class="cline-any cline-neutral">&nbsp;</span>
477
- <span class="cline-any cline-yes">9x</span>
478
- <span class="cline-any cline-yes">9x</span>
479
- <span class="cline-any cline-neutral">&nbsp;</span>
480
- <span class="cline-any cline-yes">9x</span>
481
- <span class="cline-any cline-yes">9x</span>
482
- <span class="cline-any cline-yes">6x</span>
483
- <span class="cline-any cline-yes">3x</span>
484
- <span class="cline-any cline-neutral">&nbsp;</span>
485
- <span class="cline-any cline-yes">9x</span>
486
- <span class="cline-any cline-yes">9x</span>
487
- <span class="cline-any cline-yes">9x</span>
488
- <span class="cline-any cline-yes">9x</span>
489
- <span class="cline-any cline-yes">9x</span>
490
- <span class="cline-any cline-neutral">&nbsp;</span>
491
- <span class="cline-any cline-yes">9x</span>
492
- <span class="cline-any cline-yes">9x</span>
493
- <span class="cline-any cline-yes">9x</span>
494
- <span class="cline-any cline-yes">9x</span>
495
- <span class="cline-any cline-neutral">&nbsp;</span>
496
- <span class="cline-any cline-yes">9x</span>
497
- <span class="cline-any cline-yes">9x</span>
498
- <span class="cline-any cline-neutral">&nbsp;</span>
499
- <span class="cline-any cline-yes">1x</span>
500
- <span class="cline-any cline-yes">44x</span>
501
- <span class="cline-any cline-yes">44x</span>
502
- <span class="cline-any cline-yes">60x</span>
503
- <span class="cline-any cline-yes">60x</span>
504
- <span class="cline-any cline-yes">60x</span>
505
- <span class="cline-any cline-yes">60x</span>
506
- <span class="cline-any cline-yes">60x</span>
507
- <span class="cline-any cline-yes">44x</span>
508
- <span class="cline-any cline-yes">44x</span>
509
- <span class="cline-any cline-neutral">&nbsp;</span>
510
- <span class="cline-any cline-yes">1x</span>
511
- <span class="cline-any cline-yes">3x</span>
512
- <span class="cline-any cline-yes">3x</span>
513
- <span class="cline-any cline-neutral">&nbsp;</span>
514
- <span class="cline-any cline-yes">1x</span>
515
- <span class="cline-any cline-yes">30x</span>
516
- <span class="cline-any cline-yes">30x</span>
517
- <span class="cline-any cline-neutral">&nbsp;</span>
518
- <span class="cline-any cline-yes">1x</span>
519
- <span class="cline-any cline-yes">48x</span>
520
- <span class="cline-any cline-yes">48x</span>
521
- <span class="cline-any cline-neutral">&nbsp;</span>
522
- <span class="cline-any cline-yes">1x</span>
523
- <span class="cline-any cline-yes">132x</span>
524
- <span class="cline-any cline-yes">132x</span>
525
- <span class="cline-any cline-yes">1x</span>
526
- <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import type { Event } from '@auto-engineer/message-bus';
527
- import type { ForEachPhasedDescriptor } from '../core/descriptors';
528
- import type { PhasedExecutionDocument, PhasedExecutionEvent } from '../projections/phased-execution-projection';
529
- import type { PipelineReadModel } from '../store/pipeline-read-model';
530
- &nbsp;
531
- interface PhasedExecutorOptions {
532
- readModel: PipelineReadModel;
533
- onDispatch: (commandType: string, data: unknown, correlationId: string) =&gt; void;
534
- onComplete: (event: Event, correlationId: string) =&gt; void;
535
- onEventEmit?: (event: PhasedExecutionEvent) =&gt; void | Promise&lt;void&gt;;
536
- }
537
- &nbsp;
538
- export class PhasedExecutor {
539
- private handlerRegistry = new Map&lt;string, ForEachPhasedDescriptor&gt;();
540
- private readonly readModel: PipelineReadModel;
541
- private readonly onDispatch: (commandType: string, data: unknown, correlationId: string) =&gt; void;
542
- private readonly onComplete: (event: Event, correlationId: string) =&gt; void;
543
- private readonly onEventEmit?: (event: PhasedExecutionEvent) =&gt; void | Promise&lt;void&gt;;
544
- &nbsp;
545
- constructor(options: PhasedExecutorOptions) {
546
- this.readModel = options.readModel;
547
- this.onDispatch = options.onDispatch;
548
- this.onComplete = options.onComplete;
549
- this.onEventEmit = options.onEventEmit;
550
- }
551
- &nbsp;
552
- registerHandler(handler: ForEachPhasedDescriptor): void {
553
- const handlerId = this.generateHandlerId(handler);
554
- this.handlerRegistry.set(handlerId, handler);
555
- }
556
- &nbsp;
557
- async startPhased(handler: ForEachPhasedDescriptor, event: Event, correlationId: string): Promise&lt;void&gt; {
558
- const items = handler.itemsSelector(event);
559
- const itemData: Array&lt;{ key: string; phase: string; dispatched: boolean; completed: boolean }&gt; = [];
560
- &nbsp;
561
- for (const item of items) {
562
- const key = handler.completion.itemKey({ type: event.type, data: item as Record&lt;string, unknown&gt; });
563
- const phase = handler.classifier(item);
564
- itemData.push({ key, phase, dispatched: false, completed: false });
565
- }
566
- &nbsp;
567
- const executionId = this.generateSessionId(correlationId, handler);
568
- const handlerId = this.generateHandlerId(handler);
569
- &nbsp;
570
- await this.emitEvent({
571
- type: 'PhasedExecutionStarted',
572
- data: {
573
- executionId,
574
- correlationId,
575
- handlerId,
576
- triggerEvent: event,
577
- items: itemData,
578
- phases: handler.phases,
579
- },
580
- });
581
- &nbsp;
582
- await this.dispatchCurrentPhase(executionId, handler);
583
- }
584
- &nbsp;
585
- async onEventReceived(event: Event, itemKey: string): Promise&lt;void&gt; {
586
- const correlationId = event.correlationId;
587
- if (correlationId === undefined || correlationId === '') return;
588
- &nbsp;
589
- const executions = await this.readModel.getActivePhasedExecutions(correlationId);
590
- const execution = executions.find((ex) =&gt; ex.items.some((item) =&gt; item.key === itemKey));
591
- &nbsp;
592
- if (execution === undefined) return;
593
- &nbsp;
594
- const itemDoc = execution.items.find((i) =&gt; i.key === itemKey);
595
- if (itemDoc === undefined || itemDoc.completed) return;
596
- &nbsp;
597
- const handler = this.handlerRegistry.get(execution.handlerId)!;
598
- &nbsp;
599
- if (handler.stopOnFailure &amp;&amp; this.isFailureEvent(event, handler)) {
600
- await this.emitEvent({
601
- type: 'PhasedItemFailed',
602
- data: { executionId: execution.executionId, itemKey, error: event },
603
- });
604
- await this.handleFailure(execution.executionId, handler);
605
- return;
606
- }
607
- &nbsp;
608
- await this.emitEvent({
609
- type: 'PhasedItemCompleted',
610
- data: { executionId: execution.executionId, itemKey, resultEvent: event },
611
- });
612
- &nbsp;
613
- const updatedExecution = (await this.readModel.getPhasedExecution(execution.executionId))!;
614
- &nbsp;
615
- const pendingCount = this.countPendingInPhase(updatedExecution);
616
- if (pendingCount === 0) {
617
- await this.advanceToNextPhase(execution.executionId, handler);
618
- }
619
- }
620
- &nbsp;
621
- async isPhaseComplete(correlationId: string, phase: string): Promise&lt;boolean&gt; {
622
- const executions = await this.readModel.getActivePhasedExecutions(correlationId);
623
- for (const execution of executions) {
624
- const phaseIndex = execution.phases.indexOf(phase);
625
- if (phaseIndex === -1) continue;
626
- &nbsp;
627
- if (execution.currentPhaseIndex &gt; phaseIndex) {
628
- return true;
629
- }
630
- &nbsp;
631
- if (execution.currentPhaseIndex === phaseIndex) {
632
- const pendingCount = this.countPendingInPhase(execution);
633
- return pendingCount === 0;
634
- }
635
- &nbsp;
636
- return false;
637
- }
638
- return false;
639
- }
640
- &nbsp;
641
- private countPendingInPhase(execution: PhasedExecutionDocument): number {
642
- let pending = 0;
643
- const currentPhase = execution.phases[execution.currentPhaseIndex];
644
- for (const item of execution.items) {
645
- if (item.phase === currentPhase &amp;&amp; item.dispatched &amp;&amp; !item.completed) {
646
- pending++;
647
- }
648
- }
649
- return pending;
650
- }
651
- &nbsp;
652
- private async dispatchCurrentPhase(executionId: string, handler: ForEachPhasedDescriptor): Promise&lt;void&gt; {
653
- const execution = (await this.readModel.getPhasedExecution(executionId))!;
654
- &nbsp;
655
- if (execution.currentPhaseIndex &gt;= execution.phases.length) {
656
- await this.completeSession(executionId, handler, true);
657
- return;
658
- }
659
- &nbsp;
660
- const currentPhase = execution.phases[execution.currentPhaseIndex];
661
- const itemsToDispatch = execution.items.filter((i) =&gt; i.phase === currentPhase &amp;&amp; !i.dispatched);
662
- &nbsp;
663
- if (itemsToDispatch.length === 0) {
664
- await this.advanceToNextPhase(executionId, handler);
665
- return;
666
- }
667
- &nbsp;
668
- for (const item of itemsToDispatch) {
669
- await this.emitEvent({
670
- type: 'PhasedItemDispatched',
671
- data: { executionId, itemKey: item.key, phase: item.phase },
672
- });
673
- &nbsp;
674
- const originalItem = this.findItemByKey(execution.triggerEvent, handler, item.key);
675
- if (originalItem !== undefined) {
676
- const command = handler.emitFactory(originalItem, item.phase, execution.triggerEvent);
677
- this.onDispatch(command.commandType, command.data, execution.correlationId);
678
- }
679
- }
680
- }
681
- &nbsp;
682
- private async advanceToNextPhase(executionId: string, handler: ForEachPhasedDescriptor): Promise&lt;void&gt; {
683
- const execution = (await this.readModel.getPhasedExecution(executionId))!;
684
- &nbsp;
685
- const fromPhase = execution.currentPhaseIndex;
686
- const toPhase = fromPhase + 1;
687
- &nbsp;
688
- await this.emitEvent({
689
- type: 'PhasedPhaseAdvanced',
690
- data: { executionId, fromPhase, toPhase },
691
- });
692
- &nbsp;
693
- await this.dispatchCurrentPhase(executionId, handler);
694
- }
695
- &nbsp;
696
- private async handleFailure(executionId: string, handler: ForEachPhasedDescriptor): Promise&lt;void&gt; {
697
- await this.completeSession(executionId, handler, false);
698
- }
699
- &nbsp;
700
- private async completeSession(
701
- executionId: string,
702
- handler: ForEachPhasedDescriptor,
703
- success: boolean,
704
- ): Promise&lt;void&gt; {
705
- const execution = (await this.readModel.getPhasedExecution(executionId))!;
706
- &nbsp;
707
- const eventDescriptor = success ? handler.completion.successEvent : handler.completion.failureEvent;
708
- const eventType = eventDescriptor.name;
709
- &nbsp;
710
- const results = execution.items.filter((i) =&gt; i.completed).map((i) =&gt; i.key);
711
- const eventData = success
712
- ? { results, itemCount: execution.items.length }
713
- : { failures: execution.failedItems.map((f) =&gt; ({ key: f.key, error: f.error })) };
714
- &nbsp;
715
- const completionEvent: Event = {
716
- type: eventType,
717
- correlationId: execution.correlationId,
718
- data: eventData,
719
- };
720
- &nbsp;
721
- await this.emitEvent({
722
- type: 'PhasedExecutionCompleted',
723
- data: { executionId, success, results },
724
- });
725
- &nbsp;
726
- this.onComplete(completionEvent, execution.correlationId);
727
- }
728
- &nbsp;
729
- private findItemByKey(triggerEvent: Event, handler: ForEachPhasedDescriptor, key: string): unknown {
730
- const items = handler.itemsSelector(triggerEvent);
731
- return items.find((item) =&gt; {
732
- const itemKey = handler.completion.itemKey({
733
- type: triggerEvent.type,
734
- data: item as Record&lt;string, unknown&gt;,
735
- });
736
- return itemKey === key;
737
- });
738
- }
739
- &nbsp;
740
- private isFailureEvent(event: Event, handler: ForEachPhasedDescriptor): boolean {
741
- return event.type === handler.completion.failureEvent.name;
742
- }
743
- &nbsp;
744
- private generateSessionId(correlationId: string, handler: ForEachPhasedDescriptor): string {
745
- return `phased-${correlationId}-${handler.eventType}`;
746
- }
747
- &nbsp;
748
- private generateHandlerId(handler: ForEachPhasedDescriptor): string {
749
- return `phased-handler-${handler.eventType}`;
750
- }
751
- &nbsp;
752
- private async emitEvent(event: PhasedExecutionEvent): Promise&lt;void&gt; {
753
- await this.onEventEmit?.(event);
754
- }
755
- }
756
- &nbsp;</pre></td></tr></table></pre>
757
-
758
- <div class='push'></div><!-- for sticky footer -->
759
- </div><!-- /wrapper -->
760
- <div class='footer quiet pad2 space-top1 center small'>
761
- Code coverage generated by
762
- <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
763
- at 2026-01-06T00:27:41.742Z
764
- </div>
765
- <script src="../prettify.js"></script>
766
- <script>
767
- window.onload = function () {
768
- prettyPrint();
769
- };
770
- </script>
771
- <script src="../sorter.js"></script>
772
- <script src="../block-navigation.js"></script>
773
- </body>
774
- </html>
775
-