@@ -3,6 +3,8 @@ import { EDGE, isConditionBlockType, isRouterBlockType } from '@/executor/consta
33import type { DAG } from '@/executor/dag/builder'
44import {
55 buildBranchNodeId ,
6+ buildParallelSentinelEndId ,
7+ buildParallelSentinelStartId ,
68 buildSentinelEndId ,
79 buildSentinelStartId ,
810 calculateBranchCount ,
@@ -51,7 +53,7 @@ export class EdgeConstructor {
5153 )
5254
5355 this . wireLoopSentinels ( dag , reachableBlocks )
54- this . wireParallelBlocks ( workflow , dag , loopBlockIds , parallelBlockIds , pauseTriggerMapping )
56+ this . wireParallelSentinels ( dag , pauseTriggerMapping )
5557 }
5658
5759 private buildMetadataMaps ( workflow : SerializedWorkflow ) : EdgeMetadata {
@@ -157,43 +159,40 @@ export class EdgeConstructor {
157159 const sourceIsParallelBlock = parallelBlockIds . has ( source )
158160 const targetIsParallelBlock = parallelBlockIds . has ( target )
159161
160- if (
161- sourceIsLoopBlock ||
162- targetIsLoopBlock ||
163- sourceIsParallelBlock ||
164- targetIsParallelBlock
165- ) {
166- let loopSentinelStartId : string | undefined
167-
168- if ( sourceIsLoopBlock ) {
169- const sentinelEndId = buildSentinelEndId ( originalSource )
170- loopSentinelStartId = buildSentinelStartId ( originalSource )
171-
172- if ( ! dag . nodes . has ( sentinelEndId ) || ! dag . nodes . has ( loopSentinelStartId ) ) {
173- continue
174- }
175-
176- source = sentinelEndId
177- sourceHandle = EDGE . LOOP_EXIT
162+ if ( sourceIsLoopBlock ) {
163+ const sentinelEndId = buildSentinelEndId ( originalSource )
164+ const loopSentinelStartId = buildSentinelStartId ( originalSource )
165+ if ( ! dag . nodes . has ( sentinelEndId ) || ! dag . nodes . has ( loopSentinelStartId ) ) {
166+ continue
178167 }
168+ source = sentinelEndId
169+ sourceHandle = EDGE . LOOP_EXIT
170+ this . addEdge ( dag , loopSentinelStartId , target , EDGE . LOOP_EXIT , targetHandle )
171+ }
179172
180- if ( targetIsLoopBlock ) {
181- const sentinelStartId = buildSentinelStartId ( target )
182-
183- if ( ! dag . nodes . has ( sentinelStartId ) ) {
184- continue
185- }
186-
187- target = sentinelStartId
173+ if ( targetIsLoopBlock ) {
174+ const sentinelStartId = buildSentinelStartId ( target )
175+ if ( ! dag . nodes . has ( sentinelStartId ) ) {
176+ continue
188177 }
178+ target = sentinelStartId
179+ }
189180
190- if ( loopSentinelStartId ) {
191- this . addEdge ( dag , loopSentinelStartId , target , EDGE . LOOP_EXIT , targetHandle )
181+ if ( sourceIsParallelBlock ) {
182+ const sentinelEndId = buildParallelSentinelEndId ( originalSource )
183+ if ( ! dag . nodes . has ( sentinelEndId ) ) {
184+ continue
192185 }
186+ source = sentinelEndId
187+ sourceHandle = EDGE . PARALLEL_EXIT
188+ }
193189
194- if ( sourceIsParallelBlock || targetIsParallelBlock ) {
190+ if ( targetIsParallelBlock ) {
191+ const sentinelStartId = buildParallelSentinelStartId ( target )
192+ if ( ! dag . nodes . has ( sentinelStartId ) ) {
195193 continue
196194 }
195+ target = sentinelStartId
197196 }
198197
199198 if ( this . edgeCrossesLoopBoundary ( source , target , blocksInLoops , dag ) ) {
@@ -256,80 +255,40 @@ export class EdgeConstructor {
256255 }
257256 }
258257
259- private wireParallelBlocks (
260- workflow : SerializedWorkflow ,
261- dag : DAG ,
262- loopBlockIds : Set < string > ,
263- parallelBlockIds : Set < string > ,
264- pauseTriggerMapping : Map < string , string >
265- ) : void {
258+ private wireParallelSentinels ( dag : DAG , pauseTriggerMapping : Map < string , string > ) : void {
266259 for ( const [ parallelId , parallelConfig ] of dag . parallelConfigs ) {
267260 const nodes = parallelConfig . nodes
268261
269262 if ( nodes . length === 0 ) continue
270263
264+ const sentinelStartId = buildParallelSentinelStartId ( parallelId )
265+ const sentinelEndId = buildParallelSentinelEndId ( parallelId )
266+
267+ if ( ! dag . nodes . has ( sentinelStartId ) || ! dag . nodes . has ( sentinelEndId ) ) {
268+ continue
269+ }
270+
271271 const { entryNodes, terminalNodes, branchCount } = this . findParallelBoundaryNodes (
272272 nodes ,
273273 parallelId ,
274274 dag
275275 )
276276
277- logger . info ( 'Wiring parallel block edges' , {
278- parallelId,
279- entryNodes,
280- terminalNodes,
281- branchCount,
282- } )
283-
284- for ( const connection of workflow . connections ) {
285- const { source, target, sourceHandle, targetHandle } = connection
286-
287- if ( target === parallelId ) {
288- if ( loopBlockIds . has ( source ) || parallelBlockIds . has ( source ) ) continue
289-
290- if ( nodes . includes ( source ) ) {
291- logger . warn ( 'Invalid: parallel block connected from its own internal node' , {
292- parallelId,
293- source,
294- } )
295- continue
296- }
297-
298- logger . info ( 'Wiring edge to parallel block' , { source, parallelId, entryNodes } )
299-
300- for ( const entryNodeId of entryNodes ) {
301- for ( let i = 0 ; i < branchCount ; i ++ ) {
302- const branchNodeId = buildBranchNodeId ( entryNodeId , i )
303-
304- if ( dag . nodes . has ( branchNodeId ) ) {
305- this . addEdge ( dag , source , branchNodeId , sourceHandle , targetHandle )
306- }
307- }
277+ for ( const entryNodeId of entryNodes ) {
278+ for ( let i = 0 ; i < branchCount ; i ++ ) {
279+ const branchNodeId = buildBranchNodeId ( entryNodeId , i )
280+ if ( dag . nodes . has ( branchNodeId ) ) {
281+ this . addEdge ( dag , sentinelStartId , branchNodeId )
308282 }
309283 }
284+ }
310285
311- if ( source === parallelId ) {
312- if ( loopBlockIds . has ( target ) || parallelBlockIds . has ( target ) ) continue
313-
314- if ( nodes . includes ( target ) ) {
315- logger . warn ( 'Invalid: parallel block connected to its own internal node' , {
316- parallelId,
317- target,
318- } )
319- continue
320- }
321-
322- logger . info ( 'Wiring edge from parallel block' , { parallelId, target, terminalNodes } )
323-
324- for ( const terminalNodeId of terminalNodes ) {
325- for ( let i = 0 ; i < branchCount ; i ++ ) {
326- const branchNodeId = buildBranchNodeId ( terminalNodeId , i )
327-
328- if ( dag . nodes . has ( branchNodeId ) ) {
329- const resolvedSourceId = pauseTriggerMapping . get ( branchNodeId ) ?? branchNodeId
330- this . addEdge ( dag , resolvedSourceId , target , sourceHandle , targetHandle )
331- }
332- }
286+ for ( const terminalNodeId of terminalNodes ) {
287+ for ( let i = 0 ; i < branchCount ; i ++ ) {
288+ const branchNodeId = buildBranchNodeId ( terminalNodeId , i )
289+ if ( dag . nodes . has ( branchNodeId ) ) {
290+ const resolvedSourceId = pauseTriggerMapping . get ( branchNodeId ) ?? branchNodeId
291+ this . addEdge ( dag , resolvedSourceId , sentinelEndId )
333292 }
334293 }
335294 }
0 commit comments