@calmo/task-runner 3.8.1 → 3.8.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 (42) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/coverage/coverage-final.json +1 -1
  3. package/coverage/index.html +7 -7
  4. package/coverage/lcov-report/index.html +7 -7
  5. package/coverage/lcov-report/src/EventBus.ts.html +70 -34
  6. package/coverage/lcov-report/src/TaskGraphValidationError.ts.html +1 -1
  7. package/coverage/lcov-report/src/TaskGraphValidator.ts.html +1 -1
  8. package/coverage/lcov-report/src/TaskRunner.ts.html +1 -1
  9. package/coverage/lcov-report/src/TaskRunnerBuilder.ts.html +1 -1
  10. package/coverage/lcov-report/src/TaskRunnerExecutionConfig.ts.html +1 -1
  11. package/coverage/lcov-report/src/TaskStateManager.ts.html +1 -1
  12. package/coverage/lcov-report/src/WorkflowExecutor.ts.html +1 -1
  13. package/coverage/lcov-report/src/contracts/ErrorTypes.ts.html +1 -1
  14. package/coverage/lcov-report/src/contracts/RunnerEvents.ts.html +1 -1
  15. package/coverage/lcov-report/src/contracts/index.html +1 -1
  16. package/coverage/lcov-report/src/index.html +7 -7
  17. package/coverage/lcov-report/src/strategies/DryRunExecutionStrategy.ts.html +1 -1
  18. package/coverage/lcov-report/src/strategies/RetryingExecutionStrategy.ts.html +1 -1
  19. package/coverage/lcov-report/src/strategies/StandardExecutionStrategy.ts.html +1 -1
  20. package/coverage/lcov-report/src/strategies/index.html +1 -1
  21. package/coverage/lcov.info +37 -34
  22. package/coverage/src/EventBus.ts.html +70 -34
  23. package/coverage/src/TaskGraphValidationError.ts.html +1 -1
  24. package/coverage/src/TaskGraphValidator.ts.html +1 -1
  25. package/coverage/src/TaskRunner.ts.html +1 -1
  26. package/coverage/src/TaskRunnerBuilder.ts.html +1 -1
  27. package/coverage/src/TaskRunnerExecutionConfig.ts.html +1 -1
  28. package/coverage/src/TaskStateManager.ts.html +1 -1
  29. package/coverage/src/WorkflowExecutor.ts.html +1 -1
  30. package/coverage/src/contracts/ErrorTypes.ts.html +1 -1
  31. package/coverage/src/contracts/RunnerEvents.ts.html +1 -1
  32. package/coverage/src/contracts/index.html +1 -1
  33. package/coverage/src/index.html +7 -7
  34. package/coverage/src/strategies/DryRunExecutionStrategy.ts.html +1 -1
  35. package/coverage/src/strategies/RetryingExecutionStrategy.ts.html +1 -1
  36. package/coverage/src/strategies/StandardExecutionStrategy.ts.html +1 -1
  37. package/coverage/src/strategies/index.html +1 -1
  38. package/dist/EventBus.js +11 -2
  39. package/dist/EventBus.js.map +1 -1
  40. package/package.json +1 -1
  41. package/src/EventBus.ts +27 -15
  42. package/test-report.xml +149 -131
@@ -358,7 +358,7 @@ export class RetryingExecutionStrategy<
358
358
  <div class='footer quiet pad2 space-top1 center small'>
359
359
  Code coverage generated by
360
360
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
361
- at 2026-01-21T01:05:21.402Z
361
+ at 2026-01-21T01:16:02.348Z
362
362
  </div>
363
363
  <script src="../../prettify.js"></script>
364
364
  <script>
@@ -175,7 +175,7 @@ export class StandardExecutionStrategy&lt;
175
175
  <div class='footer quiet pad2 space-top1 center small'>
176
176
  Code coverage generated by
177
177
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
178
- at 2026-01-21T01:05:21.402Z
178
+ at 2026-01-21T01:16:02.348Z
179
179
  </div>
180
180
  <script src="../../prettify.js"></script>
181
181
  <script>
@@ -131,7 +131,7 @@
131
131
  <div class='footer quiet pad2 space-top1 center small'>
132
132
  Code coverage generated by
133
133
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
134
- at 2026-01-21T01:05:21.402Z
134
+ at 2026-01-21T01:16:02.348Z
135
135
  </div>
136
136
  <script src="../../prettify.js"></script>
137
137
  <script>
@@ -3,41 +3,44 @@ SF:src/EventBus.ts
3
3
  FN:19,(anonymous_0)
4
4
  FN:39,(anonymous_1)
5
5
  FN:55,(anonymous_2)
6
- FN:64,(anonymous_3)
7
- FN:68,(anonymous_4)
8
- FNF:5
9
- FNH:5
10
- FNDA:16,(anonymous_0)
11
- FNDA:3,(anonymous_1)
12
- FNDA:437,(anonymous_2)
13
- FNDA:14,(anonymous_3)
6
+ FN:68,(anonymous_3)
7
+ FN:73,(anonymous_4)
8
+ FN:88,(anonymous_5)
9
+ FNF:6
10
+ FNH:6
11
+ FNDA:24,(anonymous_0)
12
+ FNDA:8,(anonymous_1)
13
+ FNDA:443,(anonymous_2)
14
+ FNDA:19,(anonymous_3)
14
15
  FNDA:1,(anonymous_4)
15
- DA:12,81
16
- DA:23,16
17
- DA:26,14
18
- DA:29,16
19
- DA:43,3
20
- DA:44,2
21
- DA:59,437
22
- DA:62,437
23
- DA:63,14
24
- DA:64,14
25
- DA:65,14
26
- DA:66,14
27
- DA:67,14
28
- DA:68,1
29
- DA:69,1
30
- DA:77,1
31
- LF:16
32
- LH:16
33
- BRDA:23,0,0,14
34
- BRDA:23,0,1,2
35
- BRDA:43,1,0,2
36
- BRDA:43,1,1,1
37
- BRDA:62,2,0,14
38
- BRDA:62,2,1,423
39
- BRDA:67,3,0,1
40
- BRDA:67,3,1,13
16
+ FNDA:1,(anonymous_5)
17
+ DA:12,90
18
+ DA:23,24
19
+ DA:26,21
20
+ DA:29,24
21
+ DA:43,8
22
+ DA:44,6
23
+ DA:59,443
24
+ DA:62,443
25
+ DA:63,19
26
+ DA:67,19
27
+ DA:69,19
28
+ DA:70,19
29
+ DA:71,19
30
+ DA:73,1
31
+ DA:74,1
32
+ DA:82,3
33
+ DA:90,1
34
+ LF:17
35
+ LH:17
36
+ BRDA:23,0,0,21
37
+ BRDA:23,0,1,3
38
+ BRDA:43,1,0,6
39
+ BRDA:43,1,1,2
40
+ BRDA:62,2,0,19
41
+ BRDA:62,2,1,424
42
+ BRDA:71,3,0,1
43
+ BRDA:71,3,1,18
41
44
  BRF:8
42
45
  BRH:8
43
46
  end_of_record
@@ -25,7 +25,7 @@
25
25
  <div class='fl pad1y space-right2'>
26
26
  <span class="strong">100% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>16/16</span>
28
+ <span class='fraction'>17/17</span>
29
29
  </div>
30
30
 
31
31
 
@@ -39,14 +39,14 @@
39
39
  <div class='fl pad1y space-right2'>
40
40
  <span class="strong">100% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>5/5</span>
42
+ <span class='fraction'>6/6</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
47
  <span class="strong">100% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>16/16</span>
49
+ <span class='fraction'>17/17</span>
50
50
  </div>
51
51
 
52
52
 
@@ -149,7 +149,19 @@
149
149
  <a name='L84'></a><a href='#L84'>84</a>
150
150
  <a name='L85'></a><a href='#L85'>85</a>
151
151
  <a name='L86'></a><a href='#L86'>86</a>
152
- <a name='L87'></a><a href='#L87'>87</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
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></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
153
165
  <span class="cline-any cline-neutral">&nbsp;</span>
154
166
  <span class="cline-any cline-neutral">&nbsp;</span>
155
167
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -160,7 +172,7 @@
160
172
  <span class="cline-any cline-neutral">&nbsp;</span>
161
173
  <span class="cline-any cline-neutral">&nbsp;</span>
162
174
  <span class="cline-any cline-neutral">&nbsp;</span>
163
- <span class="cline-any cline-yes">81x</span>
175
+ <span class="cline-any cline-yes">90x</span>
164
176
  <span class="cline-any cline-neutral">&nbsp;</span>
165
177
  <span class="cline-any cline-neutral">&nbsp;</span>
166
178
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -171,13 +183,13 @@
171
183
  <span class="cline-any cline-neutral">&nbsp;</span>
172
184
  <span class="cline-any cline-neutral">&nbsp;</span>
173
185
  <span class="cline-any cline-neutral">&nbsp;</span>
174
- <span class="cline-any cline-yes">16x</span>
186
+ <span class="cline-any cline-yes">24x</span>
175
187
  <span class="cline-any cline-neutral">&nbsp;</span>
176
188
  <span class="cline-any cline-neutral">&nbsp;</span>
177
- <span class="cline-any cline-yes">14x</span>
189
+ <span class="cline-any cline-yes">21x</span>
178
190
  <span class="cline-any cline-neutral">&nbsp;</span>
179
191
  <span class="cline-any cline-neutral">&nbsp;</span>
180
- <span class="cline-any cline-yes">16x</span>
192
+ <span class="cline-any cline-yes">24x</span>
181
193
  <span class="cline-any cline-neutral">&nbsp;</span>
182
194
  <span class="cline-any cline-neutral">&nbsp;</span>
183
195
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -191,8 +203,11 @@
191
203
  <span class="cline-any cline-neutral">&nbsp;</span>
192
204
  <span class="cline-any cline-neutral">&nbsp;</span>
193
205
  <span class="cline-any cline-neutral">&nbsp;</span>
194
- <span class="cline-any cline-yes">3x</span>
195
- <span class="cline-any cline-yes">2x</span>
206
+ <span class="cline-any cline-yes">8x</span>
207
+ <span class="cline-any cline-yes">6x</span>
208
+ <span class="cline-any cline-neutral">&nbsp;</span>
209
+ <span class="cline-any cline-neutral">&nbsp;</span>
210
+ <span class="cline-any cline-neutral">&nbsp;</span>
196
211
  <span class="cline-any cline-neutral">&nbsp;</span>
197
212
  <span class="cline-any cline-neutral">&nbsp;</span>
198
213
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -204,18 +219,20 @@
204
219
  <span class="cline-any cline-neutral">&nbsp;</span>
205
220
  <span class="cline-any cline-neutral">&nbsp;</span>
206
221
  <span class="cline-any cline-neutral">&nbsp;</span>
222
+ <span class="cline-any cline-yes">443x</span>
207
223
  <span class="cline-any cline-neutral">&nbsp;</span>
208
224
  <span class="cline-any cline-neutral">&nbsp;</span>
225
+ <span class="cline-any cline-yes">443x</span>
226
+ <span class="cline-any cline-yes">19x</span>
209
227
  <span class="cline-any cline-neutral">&nbsp;</span>
210
- <span class="cline-any cline-yes">437x</span>
211
228
  <span class="cline-any cline-neutral">&nbsp;</span>
212
229
  <span class="cline-any cline-neutral">&nbsp;</span>
213
- <span class="cline-any cline-yes">437x</span>
214
- <span class="cline-any cline-yes">14x</span>
215
- <span class="cline-any cline-yes">14x</span>
216
- <span class="cline-any cline-yes">14x</span>
217
- <span class="cline-any cline-yes">14x</span>
218
- <span class="cline-any cline-yes">14x</span>
230
+ <span class="cline-any cline-yes">19x</span>
231
+ <span class="cline-any cline-neutral">&nbsp;</span>
232
+ <span class="cline-any cline-yes">19x</span>
233
+ <span class="cline-any cline-yes">19x</span>
234
+ <span class="cline-any cline-yes">19x</span>
235
+ <span class="cline-any cline-neutral">&nbsp;</span>
219
236
  <span class="cline-any cline-yes">1x</span>
220
237
  <span class="cline-any cline-yes">1x</span>
221
238
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -225,7 +242,7 @@
225
242
  <span class="cline-any cline-neutral">&nbsp;</span>
226
243
  <span class="cline-any cline-neutral">&nbsp;</span>
227
244
  <span class="cline-any cline-neutral">&nbsp;</span>
228
- <span class="cline-any cline-yes">1x</span>
245
+ <span class="cline-any cline-yes">3x</span>
229
246
  <span class="cline-any cline-neutral">&nbsp;</span>
230
247
  <span class="cline-any cline-neutral">&nbsp;</span>
231
248
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -233,6 +250,13 @@
233
250
  <span class="cline-any cline-neutral">&nbsp;</span>
234
251
  <span class="cline-any cline-neutral">&nbsp;</span>
235
252
  <span class="cline-any cline-neutral">&nbsp;</span>
253
+ <span class="cline-any cline-yes">1x</span>
254
+ <span class="cline-any cline-neutral">&nbsp;</span>
255
+ <span class="cline-any cline-neutral">&nbsp;</span>
256
+ <span class="cline-any cline-neutral">&nbsp;</span>
257
+ <span class="cline-any cline-neutral">&nbsp;</span>
258
+ <span class="cline-any cline-neutral">&nbsp;</span>
259
+ <span class="cline-any cline-neutral">&nbsp;</span>
236
260
  <span class="cline-any cline-neutral">&nbsp;</span>
237
261
  <span class="cline-any cline-neutral">&nbsp;</span>
238
262
  <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import {
@@ -298,25 +322,37 @@ export class EventBus&lt;TContext&gt; {
298
322
  | undefined;
299
323
  if (listeners) {
300
324
  for (const listener of listeners) {
301
- Promise.resolve().then(() =&gt; {
302
- try {
303
- const result = listener(data);
304
- if (result instanceof Promise) {
305
- result.catch((error) =&gt; {
306
- console.error(
307
- `Error in event listener for ${String(event)}:`,
308
- error
309
- );
310
- });
325
+ // We use Promise.resolve().then() to schedule the listener on the microtask queue,
326
+ // ensuring the emit method remains non-blocking.
327
+ // The final .catch() ensures that any errors in the promise infrastructure itself are logged.
328
+ Promise.resolve()
329
+ .then(() =&gt; {
330
+ try {
331
+ const result = listener(data);
332
+ if (result instanceof Promise) {
333
+ // Handle async listener rejections
334
+ result.catch((error) =&gt; {
335
+ console.error(
336
+ `Error in event listener for ${String(event)}:`,
337
+ error
338
+ );
339
+ });
340
+ }
341
+ } catch (error) {
342
+ // Handle sync listener errors
343
+ console.error(
344
+ `Error in event listener for ${String(event)}:`,
345
+ error
346
+ );
311
347
  }
312
- } catch (error) {
313
- // Prevent listener errors from bubbling up
348
+ })
349
+ .catch((error) =&gt; {
350
+ // detailed handling for the promise chain itself
314
351
  console.error(
315
- `Error in event listener for ${String(event)}:`,
352
+ `Unexpected error in event bus execution for ${String(event)}:`,
316
353
  error
317
354
  );
318
- }
319
- });
355
+ });
320
356
  }
321
357
  }
322
358
  }
@@ -328,7 +364,7 @@ export class EventBus&lt;TContext&gt; {
328
364
  <div class='footer quiet pad2 space-top1 center small'>
329
365
  Code coverage generated by
330
366
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
331
- at 2026-01-21T01:05:21.392Z
367
+ at 2026-01-21T01:16:02.338Z
332
368
  </div>
333
369
  <script src="../prettify.js"></script>
334
370
  <script>
@@ -115,7 +115,7 @@ export class TaskGraphValidationError extends Error {
115
115
  <div class='footer quiet pad2 space-top1 center small'>
116
116
  Code coverage generated by
117
117
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
118
- at 2026-01-21T01:05:21.392Z
118
+ at 2026-01-21T01:16:02.338Z
119
119
  </div>
120
120
  <script src="../prettify.js"></script>
121
121
  <script>
@@ -634,7 +634,7 @@ export class TaskGraphValidator implements ITaskGraphValidator {
634
634
  <div class='footer quiet pad2 space-top1 center small'>
635
635
  Code coverage generated by
636
636
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
637
- at 2026-01-21T01:05:21.392Z
637
+ at 2026-01-21T01:16:02.338Z
638
638
  </div>
639
639
  <script src="../prettify.js"></script>
640
640
  <script>
@@ -691,7 +691,7 @@ export class TaskRunner&lt;TContext&gt; {
691
691
  <div class='footer quiet pad2 space-top1 center small'>
692
692
  Code coverage generated by
693
693
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
694
- at 2026-01-21T01:05:21.392Z
694
+ at 2026-01-21T01:16:02.338Z
695
695
  </div>
696
696
  <script src="../prettify.js"></script>
697
697
  <script>
@@ -322,7 +322,7 @@ export class TaskRunnerBuilder&lt;TContext&gt; {
322
322
  <div class='footer quiet pad2 space-top1 center small'>
323
323
  Code coverage generated by
324
324
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
325
- at 2026-01-21T01:05:21.392Z
325
+ at 2026-01-21T01:16:02.338Z
326
326
  </div>
327
327
  <script src="../prettify.js"></script>
328
328
  <script>
@@ -139,7 +139,7 @@ export interface TaskRunnerExecutionConfig {
139
139
  <div class='footer quiet pad2 space-top1 center small'>
140
140
  Code coverage generated by
141
141
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
142
- at 2026-01-21T01:05:21.392Z
142
+ at 2026-01-21T01:16:02.338Z
143
143
  </div>
144
144
  <script src="../prettify.js"></script>
145
145
  <script>
@@ -514,7 +514,7 @@ export class TaskStateManager&lt;TContext&gt; {
514
514
  <div class='footer quiet pad2 space-top1 center small'>
515
515
  Code coverage generated by
516
516
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
517
- at 2026-01-21T01:05:21.392Z
517
+ at 2026-01-21T01:16:02.338Z
518
518
  </div>
519
519
  <script src="../prettify.js"></script>
520
520
  <script>
@@ -643,7 +643,7 @@ export class WorkflowExecutor&lt;TContext&gt; {
643
643
  <div class='footer quiet pad2 space-top1 center small'>
644
644
  Code coverage generated by
645
645
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
646
- at 2026-01-21T01:05:21.392Z
646
+ at 2026-01-21T01:16:02.338Z
647
647
  </div>
648
648
  <script src="../prettify.js"></script>
649
649
  <script>
@@ -88,7 +88,7 @@ export const ERROR_CYCLE = "cycle" as const;
88
88
  <div class='footer quiet pad2 space-top1 center small'>
89
89
  Code coverage generated by
90
90
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
91
- at 2026-01-21T01:05:21.392Z
91
+ at 2026-01-21T01:16:02.338Z
92
92
  </div>
93
93
  <script src="../../prettify.js"></script>
94
94
  <script>
@@ -202,7 +202,7 @@ export type ListenerMap&lt;TContext&gt; = {
202
202
  <div class='footer quiet pad2 space-top1 center small'>
203
203
  Code coverage generated by
204
204
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
205
- at 2026-01-21T01:05:21.392Z
205
+ at 2026-01-21T01:16:02.338Z
206
206
  </div>
207
207
  <script src="../../prettify.js"></script>
208
208
  <script>
@@ -116,7 +116,7 @@
116
116
  <div class='footer quiet pad2 space-top1 center small'>
117
117
  Code coverage generated by
118
118
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
119
- at 2026-01-21T01:05:21.392Z
119
+ at 2026-01-21T01:16:02.338Z
120
120
  </div>
121
121
  <script src="../../prettify.js"></script>
122
122
  <script>
@@ -25,7 +25,7 @@
25
25
  <div class='fl pad1y space-right2'>
26
26
  <span class="strong">100% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>256/256</span>
28
+ <span class='fraction'>257/257</span>
29
29
  </div>
30
30
 
31
31
 
@@ -39,14 +39,14 @@
39
39
  <div class='fl pad1y space-right2'>
40
40
  <span class="strong">100% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>50/50</span>
42
+ <span class='fraction'>51/51</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
47
  <span class="strong">100% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>253/253</span>
49
+ <span class='fraction'>254/254</span>
50
50
  </div>
51
51
 
52
52
 
@@ -84,13 +84,13 @@
84
84
  <div class="chart"><div class="cover-fill cover-full" style="width: 100%"></div><div class="cover-empty" style="width: 0%"></div></div>
85
85
  </td>
86
86
  <td data-value="100" class="pct high">100%</td>
87
- <td data-value="16" class="abs high">16/16</td>
87
+ <td data-value="17" class="abs high">17/17</td>
88
88
  <td data-value="100" class="pct high">100%</td>
89
89
  <td data-value="8" class="abs high">8/8</td>
90
90
  <td data-value="100" class="pct high">100%</td>
91
- <td data-value="5" class="abs high">5/5</td>
91
+ <td data-value="6" class="abs high">6/6</td>
92
92
  <td data-value="100" class="pct high">100%</td>
93
- <td data-value="16" class="abs high">16/16</td>
93
+ <td data-value="17" class="abs high">17/17</td>
94
94
  </tr>
95
95
 
96
96
  <tr>
@@ -206,7 +206,7 @@
206
206
  <div class='footer quiet pad2 space-top1 center small'>
207
207
  Code coverage generated by
208
208
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
209
- at 2026-01-21T01:05:21.392Z
209
+ at 2026-01-21T01:16:02.338Z
210
210
  </div>
211
211
  <script src="../prettify.js"></script>
212
212
  <script>
@@ -163,7 +163,7 @@ export class DryRunExecutionStrategy&lt;
163
163
  <div class='footer quiet pad2 space-top1 center small'>
164
164
  Code coverage generated by
165
165
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
166
- at 2026-01-21T01:05:21.392Z
166
+ at 2026-01-21T01:16:02.338Z
167
167
  </div>
168
168
  <script src="../../prettify.js"></script>
169
169
  <script>
@@ -358,7 +358,7 @@ export class RetryingExecutionStrategy&lt;
358
358
  <div class='footer quiet pad2 space-top1 center small'>
359
359
  Code coverage generated by
360
360
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
361
- at 2026-01-21T01:05:21.392Z
361
+ at 2026-01-21T01:16:02.338Z
362
362
  </div>
363
363
  <script src="../../prettify.js"></script>
364
364
  <script>
@@ -175,7 +175,7 @@ export class StandardExecutionStrategy&lt;
175
175
  <div class='footer quiet pad2 space-top1 center small'>
176
176
  Code coverage generated by
177
177
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
178
- at 2026-01-21T01:05:21.392Z
178
+ at 2026-01-21T01:16:02.338Z
179
179
  </div>
180
180
  <script src="../../prettify.js"></script>
181
181
  <script>
@@ -131,7 +131,7 @@
131
131
  <div class='footer quiet pad2 space-top1 center small'>
132
132
  Code coverage generated by
133
133
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
134
- at 2026-01-21T01:05:21.392Z
134
+ at 2026-01-21T01:16:02.338Z
135
135
  </div>
136
136
  <script src="../../prettify.js"></script>
137
137
  <script>
package/dist/EventBus.js CHANGED
@@ -37,19 +37,28 @@ export class EventBus {
37
37
  const listeners = this.listeners[event];
38
38
  if (listeners) {
39
39
  for (const listener of listeners) {
40
- Promise.resolve().then(() => {
40
+ // We use Promise.resolve().then() to schedule the listener on the microtask queue,
41
+ // ensuring the emit method remains non-blocking.
42
+ // The final .catch() ensures that any errors in the promise infrastructure itself are logged.
43
+ Promise.resolve()
44
+ .then(() => {
41
45
  try {
42
46
  const result = listener(data);
43
47
  if (result instanceof Promise) {
48
+ // Handle async listener rejections
44
49
  result.catch((error) => {
45
50
  console.error(`Error in event listener for ${String(event)}:`, error);
46
51
  });
47
52
  }
48
53
  }
49
54
  catch (error) {
50
- // Prevent listener errors from bubbling up
55
+ // Handle sync listener errors
51
56
  console.error(`Error in event listener for ${String(event)}:`, error);
52
57
  }
58
+ })
59
+ .catch((error) => {
60
+ // detailed handling for the promise chain itself
61
+ console.error(`Unexpected error in event bus execution for ${String(event)}:`, error);
53
62
  });
54
63
  }
55
64
  }
@@ -1 +1 @@
1
- {"version":3,"file":"EventBus.js","sourceRoot":"","sources":["../src/EventBus.ts"],"names":[],"mappings":"AAMA;;;GAGG;AACH,MAAM,OAAO,QAAQ;IACX,SAAS,GAA0B,EAAE,CAAC;IAE9C;;;;OAIG;IACI,EAAE,CACP,KAAQ,EACR,QAA0C;QAE1C,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;YAC3B,4EAA4E;YAC5E,iEAAiE;YACjE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,IAAI,GAAG,EAAyC,CAAC;QAC3E,CAAC;QACD,oFAAoF;QACnF,IAAI,CAAC,SAAS,CAAC,KAAK,CAA2C,CAAC,GAAG,CAClE,QAAQ,CACT,CAAC;IACJ,CAAC;IAED;;;;OAIG;IACI,GAAG,CACR,KAAQ,EACR,QAA0C;QAE1C,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;YACzB,IAAI,CAAC,SAAS,CAAC,KAAK,CAA2C,CAAC,MAAM,CACrE,QAAQ,CACT,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;;;OAIG;IACI,IAAI,CACT,KAAQ,EACR,IAAsC;QAEtC,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAEzB,CAAC;QACd,IAAI,SAAS,EAAE,CAAC;YACd,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;gBACjC,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE;oBAC1B,IAAI,CAAC;wBACH,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;wBAC9B,IAAI,MAAM,YAAY,OAAO,EAAE,CAAC;4BAC9B,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;gCACrB,OAAO,CAAC,KAAK,CACX,+BAA+B,MAAM,CAAC,KAAK,CAAC,GAAG,EAC/C,KAAK,CACN,CAAC;4BACJ,CAAC,CAAC,CAAC;wBACL,CAAC;oBACH,CAAC;oBAAC,OAAO,KAAK,EAAE,CAAC;wBACf,2CAA2C;wBAC3C,OAAO,CAAC,KAAK,CACX,+BAA+B,MAAM,CAAC,KAAK,CAAC,GAAG,EAC/C,KAAK,CACN,CAAC;oBACJ,CAAC;gBACH,CAAC,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;CACF"}
1
+ {"version":3,"file":"EventBus.js","sourceRoot":"","sources":["../src/EventBus.ts"],"names":[],"mappings":"AAMA;;;GAGG;AACH,MAAM,OAAO,QAAQ;IACX,SAAS,GAA0B,EAAE,CAAC;IAE9C;;;;OAIG;IACI,EAAE,CACP,KAAQ,EACR,QAA0C;QAE1C,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;YAC3B,4EAA4E;YAC5E,iEAAiE;YACjE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,IAAI,GAAG,EAAyC,CAAC;QAC3E,CAAC;QACD,oFAAoF;QACnF,IAAI,CAAC,SAAS,CAAC,KAAK,CAA2C,CAAC,GAAG,CAClE,QAAQ,CACT,CAAC;IACJ,CAAC;IAED;;;;OAIG;IACI,GAAG,CACR,KAAQ,EACR,QAA0C;QAE1C,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;YACzB,IAAI,CAAC,SAAS,CAAC,KAAK,CAA2C,CAAC,MAAM,CACrE,QAAQ,CACT,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;;;OAIG;IACI,IAAI,CACT,KAAQ,EACR,IAAsC;QAEtC,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAEzB,CAAC;QACd,IAAI,SAAS,EAAE,CAAC;YACd,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;gBACjC,mFAAmF;gBACnF,iDAAiD;gBACjD,8FAA8F;gBAC9F,OAAO,CAAC,OAAO,EAAE;qBACd,IAAI,CAAC,GAAG,EAAE;oBACT,IAAI,CAAC;wBACH,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;wBAC9B,IAAI,MAAM,YAAY,OAAO,EAAE,CAAC;4BAC9B,mCAAmC;4BACnC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;gCACrB,OAAO,CAAC,KAAK,CACX,+BAA+B,MAAM,CAAC,KAAK,CAAC,GAAG,EAC/C,KAAK,CACN,CAAC;4BACJ,CAAC,CAAC,CAAC;wBACL,CAAC;oBACH,CAAC;oBAAC,OAAO,KAAK,EAAE,CAAC;wBACf,8BAA8B;wBAC9B,OAAO,CAAC,KAAK,CACX,+BAA+B,MAAM,CAAC,KAAK,CAAC,GAAG,EAC/C,KAAK,CACN,CAAC;oBACJ,CAAC;gBACH,CAAC,CAAC;qBACD,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;oBACf,iDAAiD;oBACjD,OAAO,CAAC,KAAK,CACX,+CAA+C,MAAM,CAAC,KAAK,CAAC,GAAG,EAC/D,KAAK,CACN,CAAC;gBACJ,CAAC,CAAC,CAAC;YACP,CAAC;QACH,CAAC;IACH,CAAC;CACF"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@calmo/task-runner",
3
- "version": "3.8.1",
3
+ "version": "3.8.2",
4
4
  "description": "A lightweight, type-safe, and domain-agnostic task orchestration engine. It resolves a Directed Acyclic Graph (DAG) of steps, executes independent tasks in parallel, and manages a shared context across the pipeline.",
5
5
  "repository": {
6
6
  "type": "git",
package/src/EventBus.ts CHANGED
@@ -61,25 +61,37 @@ export class EventBus<TContext> {
61
61
  | undefined;
62
62
  if (listeners) {
63
63
  for (const listener of listeners) {
64
- Promise.resolve().then(() => {
65
- try {
66
- const result = listener(data);
67
- if (result instanceof Promise) {
68
- result.catch((error) => {
69
- console.error(
70
- `Error in event listener for ${String(event)}:`,
71
- error
72
- );
73
- });
64
+ // We use Promise.resolve().then() to schedule the listener on the microtask queue,
65
+ // ensuring the emit method remains non-blocking.
66
+ // The final .catch() ensures that any errors in the promise infrastructure itself are logged.
67
+ Promise.resolve()
68
+ .then(() => {
69
+ try {
70
+ const result = listener(data);
71
+ if (result instanceof Promise) {
72
+ // Handle async listener rejections
73
+ result.catch((error) => {
74
+ console.error(
75
+ `Error in event listener for ${String(event)}:`,
76
+ error
77
+ );
78
+ });
79
+ }
80
+ } catch (error) {
81
+ // Handle sync listener errors
82
+ console.error(
83
+ `Error in event listener for ${String(event)}:`,
84
+ error
85
+ );
74
86
  }
75
- } catch (error) {
76
- // Prevent listener errors from bubbling up
87
+ })
88
+ .catch((error) => {
89
+ // detailed handling for the promise chain itself
77
90
  console.error(
78
- `Error in event listener for ${String(event)}:`,
91
+ `Unexpected error in event bus execution for ${String(event)}:`,
79
92
  error
80
93
  );
81
- }
82
- });
94
+ });
83
95
  }
84
96
  }
85
97
  }