@calmo/task-runner 1.2.3 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.jules/sentinel.md +4 -0
- package/AGENTS.md +53 -1
- package/CHANGELOG.md +41 -15
- package/README.md +1 -1
- package/coverage/coverage-final.json +8 -4
- package/coverage/index.html +24 -9
- package/coverage/lcov-report/index.html +24 -9
- package/coverage/lcov-report/src/EventBus.ts.html +8 -8
- package/coverage/lcov-report/src/TaskGraphValidator.ts.html +143 -62
- package/coverage/lcov-report/src/TaskRunner.ts.html +213 -21
- package/coverage/lcov-report/src/TaskRunnerBuilder.ts.html +313 -0
- package/coverage/lcov-report/src/TaskRunnerExecutionConfig.ts.html +124 -0
- package/coverage/lcov-report/src/TaskStateManager.ts.html +511 -0
- package/coverage/lcov-report/src/WorkflowExecutor.ts.html +125 -137
- package/coverage/lcov-report/src/contracts/RunnerEvents.ts.html +1 -1
- package/coverage/lcov-report/src/contracts/index.html +1 -1
- package/coverage/lcov-report/src/index.html +59 -14
- package/coverage/lcov-report/src/strategies/StandardExecutionStrategy.ts.html +190 -0
- package/coverage/lcov-report/src/strategies/index.html +116 -0
- package/coverage/lcov.info +383 -184
- package/coverage/src/EventBus.ts.html +8 -8
- package/coverage/src/TaskGraphValidator.ts.html +143 -62
- package/coverage/src/TaskRunner.ts.html +213 -21
- package/coverage/src/TaskRunnerBuilder.ts.html +313 -0
- package/coverage/src/TaskRunnerExecutionConfig.ts.html +124 -0
- package/coverage/src/TaskStateManager.ts.html +511 -0
- package/coverage/src/WorkflowExecutor.ts.html +125 -137
- package/coverage/src/contracts/RunnerEvents.ts.html +1 -1
- package/coverage/src/contracts/index.html +1 -1
- package/coverage/src/index.html +59 -14
- package/coverage/src/strategies/StandardExecutionStrategy.ts.html +190 -0
- package/coverage/src/strategies/index.html +116 -0
- package/dist/TaskGraphValidator.js +39 -16
- package/dist/TaskGraphValidator.js.map +1 -1
- package/dist/TaskRunner.d.ts +12 -2
- package/dist/TaskRunner.js +55 -3
- package/dist/TaskRunner.js.map +1 -1
- package/dist/TaskRunnerBuilder.d.ts +33 -0
- package/dist/TaskRunnerBuilder.js +54 -0
- package/dist/TaskRunnerBuilder.js.map +1 -0
- package/dist/TaskRunnerExecutionConfig.d.ts +13 -0
- package/dist/TaskRunnerExecutionConfig.js +2 -0
- package/dist/TaskRunnerExecutionConfig.js.map +1 -0
- package/dist/TaskStateManager.d.ts +54 -0
- package/dist/TaskStateManager.js +130 -0
- package/dist/TaskStateManager.js.map +1 -0
- package/dist/TaskStatus.d.ts +1 -1
- package/dist/TaskStep.d.ts +2 -1
- package/dist/WorkflowExecutor.d.ts +11 -10
- package/dist/WorkflowExecutor.js +64 -73
- package/dist/WorkflowExecutor.js.map +1 -1
- package/dist/index.d.ts +4 -0
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/strategies/IExecutionStrategy.d.ts +16 -0
- package/dist/strategies/IExecutionStrategy.js +2 -0
- package/dist/strategies/IExecutionStrategy.js.map +1 -0
- package/dist/strategies/StandardExecutionStrategy.d.ts +9 -0
- package/dist/strategies/StandardExecutionStrategy.js +25 -0
- package/dist/strategies/StandardExecutionStrategy.js.map +1 -0
- package/openspec/changes/add-concurrency-control/proposal.md +14 -0
- package/openspec/changes/add-concurrency-control/tasks.md +9 -0
- package/openspec/changes/add-task-retry-policy/proposal.md +13 -0
- package/openspec/changes/add-task-retry-policy/tasks.md +10 -0
- package/openspec/changes/add-workflow-preview/proposal.md +12 -0
- package/openspec/changes/add-workflow-preview/tasks.md +7 -0
- package/openspec/changes/archive/2026-01-18-add-external-task-cancellation/tasks.md +10 -0
- package/openspec/changes/archive/2026-01-18-add-integration-tests/proposal.md +18 -0
- package/openspec/changes/archive/2026-01-18-add-integration-tests/tasks.md +17 -0
- package/openspec/changes/archive/2026-01-18-refactor-core-architecture/proposal.md +14 -0
- package/openspec/changes/archive/2026-01-18-refactor-core-architecture/tasks.md +8 -0
- package/package.json +1 -1
- package/src/TaskGraphValidator.ts +46 -19
- package/src/TaskRunner.ts +68 -4
- package/src/TaskRunnerBuilder.ts +76 -0
- package/src/TaskRunnerExecutionConfig.ts +13 -0
- package/src/TaskStateManager.ts +142 -0
- package/src/TaskStatus.ts +1 -1
- package/src/TaskStep.ts +2 -1
- package/src/WorkflowExecutor.ts +75 -79
- package/src/index.ts +4 -0
- package/src/strategies/IExecutionStrategy.ts +21 -0
- package/src/strategies/StandardExecutionStrategy.ts +35 -0
- package/test-report.xml +121 -43
- package/GEMINI.md +0 -46
- package/openspec/changes/add-external-task-cancellation/tasks.md +0 -10
- /package/openspec/changes/{add-external-task-cancellation → archive/2026-01-18-add-external-task-cancellation}/proposal.md +0 -0
|
@@ -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'>
|
|
28
|
+
<span class='fraction'>56/56</span>
|
|
29
29
|
</div>
|
|
30
30
|
|
|
31
31
|
|
|
@@ -46,7 +46,7 @@
|
|
|
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'>
|
|
49
|
+
<span class='fraction'>54/54</span>
|
|
50
50
|
</div>
|
|
51
51
|
|
|
52
52
|
|
|
@@ -199,7 +199,34 @@
|
|
|
199
199
|
<a name='L134'></a><a href='#L134'>134</a>
|
|
200
200
|
<a name='L135'></a><a href='#L135'>135</a>
|
|
201
201
|
<a name='L136'></a><a href='#L136'>136</a>
|
|
202
|
-
<a name='L137'></a><a href='#L137'>137</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></td><td class="line-coverage quiet"><span class="cline-any cline-neutral"> </span>
|
|
203
230
|
<span class="cline-any cline-neutral"> </span>
|
|
204
231
|
<span class="cline-any cline-neutral"> </span>
|
|
205
232
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -216,27 +243,27 @@
|
|
|
216
243
|
<span class="cline-any cline-neutral"> </span>
|
|
217
244
|
<span class="cline-any cline-neutral"> </span>
|
|
218
245
|
<span class="cline-any cline-neutral"> </span>
|
|
219
|
-
<span class="cline-any cline-yes">
|
|
246
|
+
<span class="cline-any cline-yes">54x</span>
|
|
220
247
|
<span class="cline-any cline-neutral"> </span>
|
|
221
248
|
<span class="cline-any cline-neutral"> </span>
|
|
222
|
-
<span class="cline-any cline-yes">
|
|
223
|
-
<span class="cline-any cline-yes">
|
|
224
|
-
<span class="cline-any cline-yes">
|
|
249
|
+
<span class="cline-any cline-yes">54x</span>
|
|
250
|
+
<span class="cline-any cline-yes">54x</span>
|
|
251
|
+
<span class="cline-any cline-yes">20139x</span>
|
|
225
252
|
<span class="cline-any cline-yes">3x</span>
|
|
226
253
|
<span class="cline-any cline-neutral"> </span>
|
|
227
254
|
<span class="cline-any cline-neutral"> </span>
|
|
228
255
|
<span class="cline-any cline-neutral"> </span>
|
|
229
256
|
<span class="cline-any cline-neutral"> </span>
|
|
230
257
|
<span class="cline-any cline-neutral"> </span>
|
|
231
|
-
<span class="cline-any cline-yes">
|
|
258
|
+
<span class="cline-any cline-yes">20136x</span>
|
|
232
259
|
<span class="cline-any cline-neutral"> </span>
|
|
233
260
|
<span class="cline-any cline-neutral"> </span>
|
|
234
261
|
<span class="cline-any cline-neutral"> </span>
|
|
235
262
|
<span class="cline-any cline-neutral"> </span>
|
|
236
|
-
<span class="cline-any cline-yes">
|
|
237
|
-
<span class="cline-any cline-yes">
|
|
238
|
-
<span class="cline-any cline-yes">
|
|
239
|
-
<span class="cline-any cline-yes">
|
|
263
|
+
<span class="cline-any cline-yes">54x</span>
|
|
264
|
+
<span class="cline-any cline-yes">20139x</span>
|
|
265
|
+
<span class="cline-any cline-yes">20166x</span>
|
|
266
|
+
<span class="cline-any cline-yes">6x</span>
|
|
240
267
|
<span class="cline-any cline-neutral"> </span>
|
|
241
268
|
<span class="cline-any cline-neutral"> </span>
|
|
242
269
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -247,48 +274,51 @@
|
|
|
247
274
|
<span class="cline-any cline-neutral"> </span>
|
|
248
275
|
<span class="cline-any cline-neutral"> </span>
|
|
249
276
|
<span class="cline-any cline-neutral"> </span>
|
|
250
|
-
<span class="cline-any cline-yes">
|
|
277
|
+
<span class="cline-any cline-yes">54x</span>
|
|
251
278
|
<span class="cline-any cline-neutral"> </span>
|
|
252
|
-
<span class="cline-any cline-yes">
|
|
253
|
-
<span class="cline-any cline-yes">
|
|
279
|
+
<span class="cline-any cline-yes">54x</span>
|
|
280
|
+
<span class="cline-any cline-yes">5x</span>
|
|
254
281
|
<span class="cline-any cline-neutral"> </span>
|
|
255
282
|
<span class="cline-any cline-neutral"> </span>
|
|
256
283
|
<span class="cline-any cline-neutral"> </span>
|
|
257
284
|
<span class="cline-any cline-neutral"> </span>
|
|
258
285
|
<span class="cline-any cline-neutral"> </span>
|
|
259
286
|
<span class="cline-any cline-neutral"> </span>
|
|
260
|
-
<span class="cline-any cline-yes">
|
|
261
|
-
<span class="cline-any cline-yes">
|
|
262
|
-
<span class="cline-any cline-yes">
|
|
287
|
+
<span class="cline-any cline-yes">49x</span>
|
|
288
|
+
<span class="cline-any cline-yes">49x</span>
|
|
289
|
+
<span class="cline-any cline-yes">20131x</span>
|
|
263
290
|
<span class="cline-any cline-neutral"> </span>
|
|
264
291
|
<span class="cline-any cline-neutral"> </span>
|
|
265
|
-
<span class="cline-any cline-yes">
|
|
266
|
-
<span class="cline-any cline-yes">
|
|
292
|
+
<span class="cline-any cline-yes">49x</span>
|
|
293
|
+
<span class="cline-any cline-yes">49x</span>
|
|
267
294
|
<span class="cline-any cline-neutral"> </span>
|
|
268
|
-
<span class="cline-any cline-yes">25x</span>
|
|
269
295
|
<span class="cline-any cline-yes">49x</span>
|
|
296
|
+
<span class="cline-any cline-yes">20124x</span>
|
|
270
297
|
<span class="cline-any cline-yes">3x</span>
|
|
271
298
|
<span class="cline-any cline-neutral"> </span>
|
|
272
299
|
<span class="cline-any cline-neutral"> </span>
|
|
273
|
-
<span class="cline-any cline-yes">
|
|
274
|
-
<span class="cline-any cline-yes">
|
|
300
|
+
<span class="cline-any cline-yes">20121x</span>
|
|
301
|
+
<span class="cline-any cline-yes">20121x</span>
|
|
302
|
+
<span class="cline-any cline-neutral"> </span>
|
|
303
|
+
<span class="cline-any cline-neutral"> </span>
|
|
304
|
+
<span class="cline-any cline-yes">5x</span>
|
|
305
|
+
<span class="cline-any cline-yes">5x</span>
|
|
306
|
+
<span class="cline-any cline-yes">5x</span>
|
|
307
|
+
<span class="cline-any cline-neutral"> </span>
|
|
308
|
+
<span class="cline-any cline-yes">5x</span>
|
|
275
309
|
<span class="cline-any cline-neutral"> </span>
|
|
276
310
|
<span class="cline-any cline-neutral"> </span>
|
|
277
|
-
<span class="cline-any cline-yes">4x</span>
|
|
278
|
-
<span class="cline-any cline-yes">4x</span>
|
|
279
|
-
<span class="cline-any cline-yes">4x</span>
|
|
280
311
|
<span class="cline-any cline-neutral"> </span>
|
|
281
|
-
<span class="cline-any cline-yes">4x</span>
|
|
282
312
|
<span class="cline-any cline-neutral"> </span>
|
|
283
313
|
<span class="cline-any cline-neutral"> </span>
|
|
314
|
+
<span class="cline-any cline-yes">5x</span>
|
|
284
315
|
<span class="cline-any cline-neutral"> </span>
|
|
285
316
|
<span class="cline-any cline-neutral"> </span>
|
|
286
317
|
<span class="cline-any cline-neutral"> </span>
|
|
287
|
-
<span class="cline-any cline-yes">
|
|
318
|
+
<span class="cline-any cline-yes">49x</span>
|
|
288
319
|
<span class="cline-any cline-neutral"> </span>
|
|
289
320
|
<span class="cline-any cline-neutral"> </span>
|
|
290
321
|
<span class="cline-any cline-neutral"> </span>
|
|
291
|
-
<span class="cline-any cline-yes">25x</span>
|
|
292
322
|
<span class="cline-any cline-neutral"> </span>
|
|
293
323
|
<span class="cline-any cline-neutral"> </span>
|
|
294
324
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -297,11 +327,11 @@
|
|
|
297
327
|
<span class="cline-any cline-neutral"> </span>
|
|
298
328
|
<span class="cline-any cline-neutral"> </span>
|
|
299
329
|
<span class="cline-any cline-neutral"> </span>
|
|
330
|
+
<span class="cline-any cline-yes">8x</span>
|
|
331
|
+
<span class="cline-any cline-yes">8x</span>
|
|
300
332
|
<span class="cline-any cline-neutral"> </span>
|
|
301
333
|
<span class="cline-any cline-neutral"> </span>
|
|
302
334
|
<span class="cline-any cline-neutral"> </span>
|
|
303
|
-
<span class="cline-any cline-yes">6x</span>
|
|
304
|
-
<span class="cline-any cline-yes">6x</span>
|
|
305
335
|
<span class="cline-any cline-neutral"> </span>
|
|
306
336
|
<span class="cline-any cline-neutral"> </span>
|
|
307
337
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -309,30 +339,54 @@
|
|
|
309
339
|
<span class="cline-any cline-neutral"> </span>
|
|
310
340
|
<span class="cline-any cline-neutral"> </span>
|
|
311
341
|
<span class="cline-any cline-neutral"> </span>
|
|
342
|
+
<span class="cline-any cline-yes">20121x</span>
|
|
312
343
|
<span class="cline-any cline-neutral"> </span>
|
|
344
|
+
<span class="cline-any cline-yes">20121x</span>
|
|
345
|
+
<span class="cline-any cline-yes">20121x</span>
|
|
346
|
+
<span class="cline-any cline-yes">20121x</span>
|
|
313
347
|
<span class="cline-any cline-neutral"> </span>
|
|
314
|
-
<span class="cline-any cline-yes">
|
|
315
|
-
<span class="cline-any cline-yes">51x</span>
|
|
316
|
-
<span class="cline-any cline-yes">51x</span>
|
|
348
|
+
<span class="cline-any cline-yes">20121x</span>
|
|
317
349
|
<span class="cline-any cline-neutral"> </span>
|
|
318
|
-
<span class="cline-any cline-yes">51x</span>
|
|
319
|
-
<span class="cline-any cline-yes">51x</span>
|
|
320
|
-
<span class="cline-any cline-yes">33x</span>
|
|
321
350
|
<span class="cline-any cline-neutral"> </span>
|
|
322
351
|
<span class="cline-any cline-neutral"> </span>
|
|
323
352
|
<span class="cline-any cline-neutral"> </span>
|
|
353
|
+
<span class="cline-any cline-neutral"> </span>
|
|
354
|
+
<span class="cline-any cline-neutral"> </span>
|
|
355
|
+
<span class="cline-any cline-yes">20121x</span>
|
|
356
|
+
<span class="cline-any cline-yes">40273x</span>
|
|
357
|
+
<span class="cline-any cline-yes">40273x</span>
|
|
358
|
+
<span class="cline-any cline-neutral"> </span>
|
|
359
|
+
<span class="cline-any cline-yes">40273x</span>
|
|
360
|
+
<span class="cline-any cline-yes">20157x</span>
|
|
361
|
+
<span class="cline-any cline-yes">20157x</span>
|
|
362
|
+
<span class="cline-any cline-neutral"> </span>
|
|
363
|
+
<span class="cline-any cline-yes">20157x</span>
|
|
364
|
+
<span class="cline-any cline-neutral"> </span>
|
|
365
|
+
<span class="cline-any cline-yes">5x</span>
|
|
324
366
|
<span class="cline-any cline-yes">5x</span>
|
|
325
|
-
<span class="cline-any cline-yes">28x</span>
|
|
326
367
|
<span class="cline-any cline-neutral"> </span>
|
|
327
368
|
<span class="cline-any cline-neutral"> </span>
|
|
328
|
-
<span class="cline-any cline-yes">
|
|
329
|
-
<span class="cline-any cline-yes">
|
|
369
|
+
<span class="cline-any cline-yes">20152x</span>
|
|
370
|
+
<span class="cline-any cline-yes">7x</span>
|
|
371
|
+
<span class="cline-any cline-yes">7x</span>
|
|
372
|
+
<span class="cline-any cline-yes">7x</span>
|
|
373
|
+
<span class="cline-any cline-neutral"> </span>
|
|
374
|
+
<span class="cline-any cline-yes">7x</span>
|
|
375
|
+
<span class="cline-any cline-neutral"> </span>
|
|
376
|
+
<span class="cline-any cline-neutral"> </span>
|
|
377
|
+
<span class="cline-any cline-neutral"> </span>
|
|
378
|
+
<span class="cline-any cline-neutral"> </span>
|
|
379
|
+
<span class="cline-any cline-neutral"> </span>
|
|
380
|
+
<span class="cline-any cline-neutral"> </span>
|
|
330
381
|
<span class="cline-any cline-neutral"> </span>
|
|
331
382
|
<span class="cline-any cline-neutral"> </span>
|
|
383
|
+
<span class="cline-any cline-yes">20116x</span>
|
|
384
|
+
<span class="cline-any cline-yes">20116x</span>
|
|
385
|
+
<span class="cline-any cline-yes">20116x</span>
|
|
332
386
|
<span class="cline-any cline-neutral"> </span>
|
|
333
|
-
<span class="cline-any cline-
|
|
334
|
-
<span class="cline-any cline-
|
|
335
|
-
<span class="cline-any cline-yes">
|
|
387
|
+
<span class="cline-any cline-neutral"> </span>
|
|
388
|
+
<span class="cline-any cline-neutral"> </span>
|
|
389
|
+
<span class="cline-any cline-yes">20116x</span>
|
|
336
390
|
<span class="cline-any cline-neutral"> </span>
|
|
337
391
|
<span class="cline-any cline-neutral"> </span>
|
|
338
392
|
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">import { ITaskGraphValidator } from "./contracts/ITaskGraphValidator.js";
|
|
@@ -441,33 +495,60 @@ export class TaskGraphValidator implements ITaskGraphValidator {
|
|
|
441
495
|
}
|
|
442
496
|
|
|
443
497
|
private detectCycle(
|
|
444
|
-
|
|
498
|
+
startTaskId: string,
|
|
445
499
|
path: string[],
|
|
446
500
|
visited: Set<string>,
|
|
447
501
|
recursionStack: Set<string>,
|
|
448
502
|
adjacencyList: Map<string, string[]>
|
|
449
503
|
): boolean {
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
504
|
+
// Use an explicit stack to avoid maximum call stack size exceeded errors
|
|
505
|
+
const stack: { taskId: string; index: number; dependencies: string[] }[] = [];
|
|
506
|
+
|
|
507
|
+
visited.add(startTaskId);
|
|
508
|
+
recursionStack.add(startTaskId);
|
|
509
|
+
path.push(startTaskId);
|
|
510
|
+
|
|
511
|
+
stack.push({
|
|
512
|
+
taskId: startTaskId,
|
|
513
|
+
index: 0,
|
|
514
|
+
/* v8 ignore next */
|
|
515
|
+
dependencies: adjacencyList.get(startTaskId) ?? []
|
|
516
|
+
});
|
|
517
|
+
|
|
518
|
+
while (stack.length > 0) {
|
|
519
|
+
const frame = stack[stack.length - 1];
|
|
520
|
+
const { taskId, dependencies } = frame;
|
|
521
|
+
|
|
522
|
+
if (frame.index < dependencies.length) {
|
|
523
|
+
const dependenceId = dependencies[frame.index];
|
|
524
|
+
frame.index++;
|
|
453
525
|
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
526
|
+
if (recursionStack.has(dependenceId)) {
|
|
527
|
+
// Cycle detected
|
|
528
|
+
path.push(dependenceId);
|
|
529
|
+
return true;
|
|
530
|
+
}
|
|
531
|
+
|
|
532
|
+
if (!visited.has(dependenceId)) {
|
|
533
|
+
visited.add(dependenceId);
|
|
534
|
+
recursionStack.add(dependenceId);
|
|
535
|
+
path.push(dependenceId);
|
|
536
|
+
|
|
537
|
+
stack.push({
|
|
538
|
+
taskId: dependenceId,
|
|
539
|
+
index: 0,
|
|
540
|
+
/* v8 ignore next */
|
|
541
|
+
dependencies: adjacencyList.get(dependenceId) ?? []
|
|
542
|
+
});
|
|
543
|
+
}
|
|
544
|
+
} else {
|
|
545
|
+
// Finished all dependencies for this node
|
|
546
|
+
recursionStack.delete(taskId);
|
|
547
|
+
path.pop();
|
|
548
|
+
stack.pop();
|
|
466
549
|
}
|
|
467
550
|
}
|
|
468
551
|
|
|
469
|
-
recursionStack.delete(taskId);
|
|
470
|
-
path.pop();
|
|
471
552
|
return false;
|
|
472
553
|
}
|
|
473
554
|
}
|
|
@@ -478,7 +559,7 @@ export class TaskGraphValidator implements ITaskGraphValidator {
|
|
|
478
559
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
479
560
|
Code coverage generated by
|
|
480
561
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
481
|
-
at 2026-01-
|
|
562
|
+
at 2026-01-18T16:53:50.059Z
|
|
482
563
|
</div>
|
|
483
564
|
<script src="../prettify.js"></script>
|
|
484
565
|
<script>
|