@decaf-ts/integrations 0.3.7 → 0.3.9

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 (417) hide show
  1. package/dist/integrations.cjs +3 -3
  2. package/dist/integrations.js +3 -3
  3. package/lib/cjs/graph/engine/constants.cjs +58 -0
  4. package/lib/cjs/graph/engine/decorators.cjs +4 -0
  5. package/lib/cjs/graph/engine/errors/GraphCycleError.cjs +20 -0
  6. package/lib/cjs/graph/engine/errors/GraphExecutionError.cjs +27 -0
  7. package/lib/cjs/graph/engine/errors/GraphInputError.cjs +20 -0
  8. package/lib/cjs/graph/engine/errors/GraphLoopLimitError.cjs +20 -0
  9. package/lib/cjs/graph/engine/errors/GraphPinningError.cjs +20 -0
  10. package/lib/cjs/graph/engine/errors/GraphPortError.cjs +20 -0
  11. package/lib/cjs/graph/engine/errors/GraphStoreError.cjs +20 -0
  12. package/lib/cjs/graph/engine/errors/GraphTopologyError.cjs +20 -0
  13. package/lib/cjs/graph/{errors → engine/errors}/index.cjs +2 -2
  14. package/lib/cjs/graph/engine/events/GraphExecutionEvent.cjs +4 -0
  15. package/lib/cjs/graph/engine/events/GraphExecutionEventEmitter.cjs +40 -0
  16. package/lib/cjs/graph/engine/events/GraphExecutionEventFactory.cjs +37 -0
  17. package/lib/cjs/graph/engine/events/GraphExecutionObserver.cjs +4 -0
  18. package/lib/cjs/graph/{events → engine/events}/index.cjs +2 -2
  19. package/lib/cjs/graph/engine/execution/CodeSandboxEvaluator.cjs +4 -0
  20. package/lib/cjs/graph/engine/execution/GraphExecutionContext.cjs +79 -0
  21. package/lib/cjs/graph/engine/execution/GraphExecutionEngine.cjs +408 -0
  22. package/lib/cjs/graph/engine/execution/GraphExecutionFrame.cjs +32 -0
  23. package/lib/cjs/graph/engine/execution/GraphExecutionResult.cjs +30 -0
  24. package/lib/cjs/graph/engine/execution/GraphNodeExecutor.cjs +4 -0
  25. package/lib/cjs/graph/engine/execution/SwitchGraphNodeExecutor.cjs +103 -0
  26. package/lib/cjs/graph/{execution → engine/execution}/index.cjs +2 -2
  27. package/lib/cjs/graph/engine/index.cjs +84 -0
  28. package/lib/cjs/graph/engine/loops/ConditionExpressionEvaluator.cjs +87 -0
  29. package/lib/cjs/graph/engine/loops/ForeachGraphNodeExecutor.cjs +85 -0
  30. package/lib/cjs/graph/engine/loops/GraphConditionEvaluator.cjs +85 -0
  31. package/lib/cjs/graph/engine/loops/GraphLoopExecutionContext.cjs +16 -0
  32. package/lib/cjs/graph/engine/loops/UntilGraphNodeExecutor.cjs +77 -0
  33. package/lib/cjs/graph/engine/loops/WhileGraphNodeExecutor.cjs +78 -0
  34. package/lib/cjs/graph/{loops → engine/loops}/index.cjs +2 -2
  35. package/lib/cjs/graph/engine/pinning/GraphPinningDependencyResolver.cjs +28 -0
  36. package/lib/cjs/graph/engine/pinning/GraphPinningMetadata.cjs +20 -0
  37. package/lib/cjs/graph/engine/pinning/GraphPinningPolicy.cjs +34 -0
  38. package/lib/cjs/graph/engine/pinning/GraphPinningService.cjs +191 -0
  39. package/lib/cjs/graph/{pinning → engine/pinning}/index.cjs +2 -2
  40. package/lib/cjs/graph/engine/planning/GraphExecutionPlan.cjs +4 -0
  41. package/lib/cjs/graph/engine/planning/GraphExecutionPlanEdge.cjs +4 -0
  42. package/lib/cjs/graph/engine/planning/GraphExecutionPlanLayer.cjs +4 -0
  43. package/lib/cjs/graph/engine/planning/GraphExecutionPlanNode.cjs +4 -0
  44. package/lib/cjs/graph/engine/planning/GraphExecutionPlanner.cjs +197 -0
  45. package/lib/cjs/graph/engine/planning/GraphRelationResolver.cjs +172 -0
  46. package/lib/cjs/graph/engine/planning/GraphTopology.cjs +57 -0
  47. package/lib/cjs/graph/{planning → engine/planning}/index.cjs +2 -2
  48. package/lib/cjs/graph/engine/registry/GraphNodeExecutorRegistry.cjs +44 -0
  49. package/lib/cjs/graph/engine/registry/GraphNodeExecutorResolver.cjs +27 -0
  50. package/lib/cjs/graph/{registry → engine/registry}/index.cjs +2 -2
  51. package/lib/cjs/graph/engine/snapshots/GraphExecutionSnapshotMapper.cjs +53 -0
  52. package/lib/cjs/graph/{snapshots → engine/snapshots}/index.cjs +2 -2
  53. package/lib/cjs/graph/engine/store/GraphCachedValue.cjs +4 -0
  54. package/lib/cjs/graph/engine/store/GraphValueKey.cjs +4 -0
  55. package/lib/cjs/graph/engine/store/GraphValueStore.cjs +76 -0
  56. package/lib/cjs/graph/engine/store/GraphValueStoreAdapter.cjs +4 -0
  57. package/lib/cjs/graph/engine/store/InMemoryGraphValueStoreAdapter.cjs +69 -0
  58. package/lib/cjs/graph/{store → engine/store}/index.cjs +2 -2
  59. package/lib/cjs/graph/engine/types.cjs +4 -0
  60. package/lib/cjs/graph/engine/validation/GraphDefinitionValidator.cjs +33 -0
  61. package/lib/cjs/graph/engine/validation/GraphPortSchemaResolver.cjs +58 -0
  62. package/lib/cjs/graph/engine/validation/GraphValueValidator.cjs +52 -0
  63. package/lib/cjs/graph/{validation → engine/validation}/index.cjs +2 -2
  64. package/lib/cjs/graph/index.cjs +10 -60
  65. package/lib/cjs/graph/shared/constants.cjs +44 -0
  66. package/lib/cjs/graph/shared/index.cjs +38 -0
  67. package/lib/cjs/graph/{nodes → shared/nodes}/agent.cjs +2 -2
  68. package/lib/cjs/graph/shared/nodes/base.cjs +35 -0
  69. package/lib/cjs/graph/shared/nodes/category-styles.cjs +38 -0
  70. package/lib/cjs/graph/shared/nodes/flow-control.cjs +464 -0
  71. package/lib/cjs/graph/{nodes → shared/nodes}/index.cjs +2 -2
  72. package/lib/cjs/graph/shared/nodes/triggers.cjs +250 -0
  73. package/lib/cjs/graph/shared/types.cjs +4 -0
  74. package/lib/cjs/index.cjs +3 -3
  75. package/lib/cjs/nest/index.cjs +2 -3
  76. package/lib/esm/graph/engine/constants.js +62 -0
  77. package/lib/esm/graph/engine/decorators.js +2 -0
  78. package/lib/esm/graph/engine/errors/GraphCycleError.js +15 -0
  79. package/lib/esm/graph/engine/errors/GraphExecutionError.js +22 -0
  80. package/lib/esm/graph/engine/errors/GraphInputError.js +15 -0
  81. package/lib/esm/graph/engine/errors/GraphLoopLimitError.js +15 -0
  82. package/lib/esm/graph/engine/errors/GraphPinningError.js +15 -0
  83. package/lib/esm/graph/engine/errors/GraphPortError.js +15 -0
  84. package/lib/esm/graph/engine/errors/GraphStoreError.js +15 -0
  85. package/lib/esm/graph/engine/errors/GraphTopologyError.js +15 -0
  86. package/lib/esm/graph/engine/errors/index.js +14 -0
  87. package/lib/esm/graph/engine/events/GraphExecutionEvent.js +2 -0
  88. package/lib/esm/graph/engine/events/GraphExecutionEventEmitter.js +35 -0
  89. package/lib/esm/graph/engine/events/GraphExecutionEventFactory.js +32 -0
  90. package/lib/esm/graph/engine/events/GraphExecutionObserver.js +2 -0
  91. package/lib/esm/graph/engine/events/index.js +10 -0
  92. package/lib/esm/graph/engine/execution/CodeSandboxEvaluator.js +18 -0
  93. package/lib/esm/graph/engine/execution/GraphExecutionContext.js +74 -0
  94. package/lib/esm/graph/engine/execution/GraphExecutionEngine.js +403 -0
  95. package/lib/esm/graph/engine/execution/GraphExecutionFrame.js +27 -0
  96. package/lib/esm/graph/engine/execution/GraphExecutionResult.js +26 -0
  97. package/lib/esm/graph/engine/execution/GraphNodeExecutor.js +2 -0
  98. package/lib/esm/graph/engine/execution/SwitchGraphNodeExecutor.js +98 -0
  99. package/lib/esm/graph/engine/execution/index.js +13 -0
  100. package/lib/esm/graph/engine/index.js +67 -0
  101. package/lib/esm/graph/engine/loops/ConditionExpressionEvaluator.js +82 -0
  102. package/lib/esm/graph/engine/loops/ForeachGraphNodeExecutor.js +80 -0
  103. package/lib/esm/graph/engine/loops/GraphConditionEvaluator.js +80 -0
  104. package/lib/esm/graph/engine/loops/GraphLoopExecutionContext.js +11 -0
  105. package/lib/esm/graph/engine/loops/UntilGraphNodeExecutor.js +72 -0
  106. package/lib/esm/graph/engine/loops/WhileGraphNodeExecutor.js +73 -0
  107. package/lib/esm/graph/engine/loops/index.js +12 -0
  108. package/lib/esm/graph/engine/pinning/GraphPinningDependencyResolver.js +23 -0
  109. package/lib/esm/graph/engine/pinning/GraphPinningMetadata.js +15 -0
  110. package/lib/esm/graph/engine/pinning/GraphPinningPolicy.js +29 -0
  111. package/lib/esm/graph/engine/pinning/GraphPinningService.js +186 -0
  112. package/lib/esm/graph/engine/pinning/index.js +10 -0
  113. package/lib/esm/graph/engine/planning/GraphExecutionPlan.js +2 -0
  114. package/lib/esm/graph/engine/planning/GraphExecutionPlanEdge.js +7 -0
  115. package/lib/esm/graph/engine/planning/GraphExecutionPlanLayer.js +2 -0
  116. package/lib/esm/graph/engine/planning/GraphExecutionPlanNode.js +2 -0
  117. package/lib/esm/graph/engine/planning/GraphExecutionPlanner.js +192 -0
  118. package/lib/esm/graph/engine/planning/GraphRelationResolver.js +167 -0
  119. package/lib/esm/graph/engine/planning/GraphTopology.js +52 -0
  120. package/lib/esm/graph/engine/planning/index.js +13 -0
  121. package/lib/esm/graph/engine/registry/GraphNodeExecutorRegistry.js +39 -0
  122. package/lib/esm/graph/engine/registry/GraphNodeExecutorResolver.js +22 -0
  123. package/lib/esm/graph/engine/registry/index.js +8 -0
  124. package/lib/esm/graph/engine/snapshots/GraphExecutionSnapshotMapper.js +48 -0
  125. package/lib/esm/graph/engine/snapshots/index.js +7 -0
  126. package/lib/esm/graph/engine/store/GraphCachedValue.js +2 -0
  127. package/lib/esm/graph/engine/store/GraphValueKey.js +7 -0
  128. package/lib/esm/graph/engine/store/GraphValueStore.js +71 -0
  129. package/lib/esm/graph/engine/store/GraphValueStoreAdapter.js +2 -0
  130. package/lib/esm/graph/engine/store/InMemoryGraphValueStoreAdapter.js +64 -0
  131. package/lib/esm/graph/engine/store/index.js +11 -0
  132. package/lib/esm/graph/engine/types.js +2 -0
  133. package/lib/esm/graph/engine/validation/GraphDefinitionValidator.js +28 -0
  134. package/lib/esm/graph/engine/validation/GraphPortSchemaResolver.js +53 -0
  135. package/lib/esm/graph/engine/validation/GraphValueValidator.js +47 -0
  136. package/lib/esm/graph/engine/validation/index.js +9 -0
  137. package/lib/esm/graph/index.js +9 -59
  138. package/lib/esm/graph/shared/constants.js +56 -0
  139. package/lib/esm/graph/shared/index.js +19 -0
  140. package/lib/esm/graph/shared/nodes/agent.js +101 -0
  141. package/lib/esm/graph/shared/nodes/base.js +30 -0
  142. package/lib/esm/graph/shared/nodes/category-styles.js +34 -0
  143. package/lib/esm/graph/shared/nodes/flow-control.js +455 -0
  144. package/lib/esm/graph/shared/nodes/index.js +18 -0
  145. package/lib/esm/graph/shared/nodes/triggers.js +241 -0
  146. package/lib/esm/graph/shared/types.js +2 -0
  147. package/lib/esm/index.js +3 -3
  148. package/lib/esm/nest/index.js +1 -2
  149. package/lib/types/graph/engine/constants.d.cts +59 -0
  150. package/lib/types/graph/engine/constants.d.mts +59 -0
  151. package/lib/types/graph/{execution → engine/execution}/GraphExecutionResult.d.cts +1 -1
  152. package/lib/types/graph/{execution → engine/execution}/GraphExecutionResult.d.mts +1 -1
  153. package/lib/types/graph/engine/index.d.cts +61 -0
  154. package/lib/types/graph/engine/index.d.mts +61 -0
  155. package/lib/types/graph/{loops → engine/loops}/ConditionExpressionEvaluator.d.cts +1 -1
  156. package/lib/types/graph/{loops → engine/loops}/ConditionExpressionEvaluator.d.mts +1 -1
  157. package/lib/types/graph/{loops → engine/loops}/GraphConditionEvaluator.d.cts +2 -1
  158. package/lib/types/graph/{loops → engine/loops}/GraphConditionEvaluator.d.mts +2 -1
  159. package/lib/types/graph/{types.d.cts → engine/types.d.cts} +8 -116
  160. package/lib/types/graph/{types.d.mts → engine/types.d.mts} +8 -116
  161. package/lib/types/graph/index.d.cts +8 -53
  162. package/lib/types/graph/index.d.mts +8 -53
  163. package/lib/types/graph/shared/constants.d.cts +53 -0
  164. package/lib/types/graph/shared/constants.d.mts +53 -0
  165. package/lib/types/graph/shared/index.d.cts +18 -0
  166. package/lib/types/graph/shared/index.d.mts +18 -0
  167. package/lib/types/graph/shared/types.d.cts +121 -0
  168. package/lib/types/graph/shared/types.d.mts +121 -0
  169. package/lib/types/index.d.cts +2 -2
  170. package/lib/types/index.d.mts +2 -2
  171. package/lib/types/nest/index.d.cts +0 -1
  172. package/lib/types/nest/index.d.mts +0 -1
  173. package/package.json +25 -3
  174. package/lib/cjs/graph/constants.cjs +0 -94
  175. package/lib/cjs/graph/decorators.cjs +0 -4
  176. package/lib/cjs/graph/errors/GraphCycleError.cjs +0 -20
  177. package/lib/cjs/graph/errors/GraphExecutionError.cjs +0 -27
  178. package/lib/cjs/graph/errors/GraphInputError.cjs +0 -20
  179. package/lib/cjs/graph/errors/GraphLoopLimitError.cjs +0 -20
  180. package/lib/cjs/graph/errors/GraphPinningError.cjs +0 -20
  181. package/lib/cjs/graph/errors/GraphPortError.cjs +0 -20
  182. package/lib/cjs/graph/errors/GraphStoreError.cjs +0 -20
  183. package/lib/cjs/graph/errors/GraphTopologyError.cjs +0 -20
  184. package/lib/cjs/graph/events/GraphExecutionEvent.cjs +0 -4
  185. package/lib/cjs/graph/events/GraphExecutionEventEmitter.cjs +0 -40
  186. package/lib/cjs/graph/events/GraphExecutionEventFactory.cjs +0 -37
  187. package/lib/cjs/graph/events/GraphExecutionObserver.cjs +0 -4
  188. package/lib/cjs/graph/execution/CodeSandboxEvaluator.cjs +0 -4
  189. package/lib/cjs/graph/execution/GraphExecutionContext.cjs +0 -79
  190. package/lib/cjs/graph/execution/GraphExecutionEngine.cjs +0 -407
  191. package/lib/cjs/graph/execution/GraphExecutionFrame.cjs +0 -32
  192. package/lib/cjs/graph/execution/GraphExecutionResult.cjs +0 -30
  193. package/lib/cjs/graph/execution/GraphNodeExecutor.cjs +0 -4
  194. package/lib/cjs/graph/execution/SwitchGraphNodeExecutor.cjs +0 -103
  195. package/lib/cjs/graph/loops/ConditionExpressionEvaluator.cjs +0 -87
  196. package/lib/cjs/graph/loops/ForeachGraphNodeExecutor.cjs +0 -84
  197. package/lib/cjs/graph/loops/GraphConditionEvaluator.cjs +0 -85
  198. package/lib/cjs/graph/loops/GraphLoopExecutionContext.cjs +0 -16
  199. package/lib/cjs/graph/loops/UntilGraphNodeExecutor.cjs +0 -76
  200. package/lib/cjs/graph/loops/WhileGraphNodeExecutor.cjs +0 -77
  201. package/lib/cjs/graph/nodes/base.cjs +0 -35
  202. package/lib/cjs/graph/nodes/category-styles.cjs +0 -38
  203. package/lib/cjs/graph/nodes/flow-control.cjs +0 -464
  204. package/lib/cjs/graph/nodes/triggers.cjs +0 -250
  205. package/lib/cjs/graph/pinning/GraphPinningDependencyResolver.cjs +0 -28
  206. package/lib/cjs/graph/pinning/GraphPinningMetadata.cjs +0 -20
  207. package/lib/cjs/graph/pinning/GraphPinningPolicy.cjs +0 -34
  208. package/lib/cjs/graph/pinning/GraphPinningService.cjs +0 -191
  209. package/lib/cjs/graph/planning/GraphExecutionPlan.cjs +0 -4
  210. package/lib/cjs/graph/planning/GraphExecutionPlanEdge.cjs +0 -4
  211. package/lib/cjs/graph/planning/GraphExecutionPlanLayer.cjs +0 -4
  212. package/lib/cjs/graph/planning/GraphExecutionPlanNode.cjs +0 -4
  213. package/lib/cjs/graph/planning/GraphExecutionPlanner.cjs +0 -197
  214. package/lib/cjs/graph/planning/GraphRelationResolver.cjs +0 -172
  215. package/lib/cjs/graph/planning/GraphTopology.cjs +0 -57
  216. package/lib/cjs/graph/registry/GraphNodeExecutorRegistry.cjs +0 -44
  217. package/lib/cjs/graph/registry/GraphNodeExecutorResolver.cjs +0 -27
  218. package/lib/cjs/graph/snapshots/GraphExecutionSnapshotMapper.cjs +0 -53
  219. package/lib/cjs/graph/store/GraphCachedValue.cjs +0 -4
  220. package/lib/cjs/graph/store/GraphValueKey.cjs +0 -4
  221. package/lib/cjs/graph/store/GraphValueStore.cjs +0 -76
  222. package/lib/cjs/graph/store/GraphValueStoreAdapter.cjs +0 -4
  223. package/lib/cjs/graph/store/InMemoryGraphValueStoreAdapter.cjs +0 -69
  224. package/lib/cjs/graph/types.cjs +0 -4
  225. package/lib/cjs/graph/validation/GraphDefinitionValidator.cjs +0 -33
  226. package/lib/cjs/graph/validation/GraphPortSchemaResolver.cjs +0 -58
  227. package/lib/cjs/graph/validation/GraphValueValidator.cjs +0 -52
  228. package/lib/esm/graph/constants.js +0 -106
  229. package/lib/esm/graph/decorators.js +0 -2
  230. package/lib/esm/graph/errors/GraphCycleError.js +0 -15
  231. package/lib/esm/graph/errors/GraphExecutionError.js +0 -22
  232. package/lib/esm/graph/errors/GraphInputError.js +0 -15
  233. package/lib/esm/graph/errors/GraphLoopLimitError.js +0 -15
  234. package/lib/esm/graph/errors/GraphPinningError.js +0 -15
  235. package/lib/esm/graph/errors/GraphPortError.js +0 -15
  236. package/lib/esm/graph/errors/GraphStoreError.js +0 -15
  237. package/lib/esm/graph/errors/GraphTopologyError.js +0 -15
  238. package/lib/esm/graph/errors/index.js +0 -14
  239. package/lib/esm/graph/events/GraphExecutionEvent.js +0 -2
  240. package/lib/esm/graph/events/GraphExecutionEventEmitter.js +0 -35
  241. package/lib/esm/graph/events/GraphExecutionEventFactory.js +0 -32
  242. package/lib/esm/graph/events/GraphExecutionObserver.js +0 -2
  243. package/lib/esm/graph/events/index.js +0 -10
  244. package/lib/esm/graph/execution/CodeSandboxEvaluator.js +0 -18
  245. package/lib/esm/graph/execution/GraphExecutionContext.js +0 -74
  246. package/lib/esm/graph/execution/GraphExecutionEngine.js +0 -402
  247. package/lib/esm/graph/execution/GraphExecutionFrame.js +0 -27
  248. package/lib/esm/graph/execution/GraphExecutionResult.js +0 -26
  249. package/lib/esm/graph/execution/GraphNodeExecutor.js +0 -2
  250. package/lib/esm/graph/execution/SwitchGraphNodeExecutor.js +0 -98
  251. package/lib/esm/graph/execution/index.js +0 -13
  252. package/lib/esm/graph/loops/ConditionExpressionEvaluator.js +0 -82
  253. package/lib/esm/graph/loops/ForeachGraphNodeExecutor.js +0 -79
  254. package/lib/esm/graph/loops/GraphConditionEvaluator.js +0 -80
  255. package/lib/esm/graph/loops/GraphLoopExecutionContext.js +0 -11
  256. package/lib/esm/graph/loops/UntilGraphNodeExecutor.js +0 -71
  257. package/lib/esm/graph/loops/WhileGraphNodeExecutor.js +0 -72
  258. package/lib/esm/graph/loops/index.js +0 -12
  259. package/lib/esm/graph/nodes/agent.js +0 -101
  260. package/lib/esm/graph/nodes/base.js +0 -30
  261. package/lib/esm/graph/nodes/category-styles.js +0 -34
  262. package/lib/esm/graph/nodes/flow-control.js +0 -455
  263. package/lib/esm/graph/nodes/index.js +0 -18
  264. package/lib/esm/graph/nodes/triggers.js +0 -241
  265. package/lib/esm/graph/pinning/GraphPinningDependencyResolver.js +0 -23
  266. package/lib/esm/graph/pinning/GraphPinningMetadata.js +0 -15
  267. package/lib/esm/graph/pinning/GraphPinningPolicy.js +0 -29
  268. package/lib/esm/graph/pinning/GraphPinningService.js +0 -186
  269. package/lib/esm/graph/pinning/index.js +0 -10
  270. package/lib/esm/graph/planning/GraphExecutionPlan.js +0 -2
  271. package/lib/esm/graph/planning/GraphExecutionPlanEdge.js +0 -7
  272. package/lib/esm/graph/planning/GraphExecutionPlanLayer.js +0 -2
  273. package/lib/esm/graph/planning/GraphExecutionPlanNode.js +0 -2
  274. package/lib/esm/graph/planning/GraphExecutionPlanner.js +0 -192
  275. package/lib/esm/graph/planning/GraphRelationResolver.js +0 -167
  276. package/lib/esm/graph/planning/GraphTopology.js +0 -52
  277. package/lib/esm/graph/planning/index.js +0 -13
  278. package/lib/esm/graph/registry/GraphNodeExecutorRegistry.js +0 -39
  279. package/lib/esm/graph/registry/GraphNodeExecutorResolver.js +0 -22
  280. package/lib/esm/graph/registry/index.js +0 -8
  281. package/lib/esm/graph/snapshots/GraphExecutionSnapshotMapper.js +0 -48
  282. package/lib/esm/graph/snapshots/index.js +0 -7
  283. package/lib/esm/graph/store/GraphCachedValue.js +0 -2
  284. package/lib/esm/graph/store/GraphValueKey.js +0 -7
  285. package/lib/esm/graph/store/GraphValueStore.js +0 -71
  286. package/lib/esm/graph/store/GraphValueStoreAdapter.js +0 -2
  287. package/lib/esm/graph/store/InMemoryGraphValueStoreAdapter.js +0 -64
  288. package/lib/esm/graph/store/index.js +0 -11
  289. package/lib/esm/graph/types.js +0 -2
  290. package/lib/esm/graph/validation/GraphDefinitionValidator.js +0 -28
  291. package/lib/esm/graph/validation/GraphPortSchemaResolver.js +0 -53
  292. package/lib/esm/graph/validation/GraphValueValidator.js +0 -47
  293. package/lib/esm/graph/validation/index.js +0 -9
  294. package/lib/types/graph/constants.d.cts +0 -101
  295. package/lib/types/graph/constants.d.mts +0 -101
  296. /package/lib/types/graph/{decorators.d.cts → engine/decorators.d.cts} +0 -0
  297. /package/lib/types/graph/{decorators.d.mts → engine/decorators.d.mts} +0 -0
  298. /package/lib/types/graph/{errors → engine/errors}/GraphCycleError.d.cts +0 -0
  299. /package/lib/types/graph/{errors → engine/errors}/GraphCycleError.d.mts +0 -0
  300. /package/lib/types/graph/{errors → engine/errors}/GraphExecutionError.d.cts +0 -0
  301. /package/lib/types/graph/{errors → engine/errors}/GraphExecutionError.d.mts +0 -0
  302. /package/lib/types/graph/{errors → engine/errors}/GraphInputError.d.cts +0 -0
  303. /package/lib/types/graph/{errors → engine/errors}/GraphInputError.d.mts +0 -0
  304. /package/lib/types/graph/{errors → engine/errors}/GraphLoopLimitError.d.cts +0 -0
  305. /package/lib/types/graph/{errors → engine/errors}/GraphLoopLimitError.d.mts +0 -0
  306. /package/lib/types/graph/{errors → engine/errors}/GraphPinningError.d.cts +0 -0
  307. /package/lib/types/graph/{errors → engine/errors}/GraphPinningError.d.mts +0 -0
  308. /package/lib/types/graph/{errors → engine/errors}/GraphPortError.d.cts +0 -0
  309. /package/lib/types/graph/{errors → engine/errors}/GraphPortError.d.mts +0 -0
  310. /package/lib/types/graph/{errors → engine/errors}/GraphStoreError.d.cts +0 -0
  311. /package/lib/types/graph/{errors → engine/errors}/GraphStoreError.d.mts +0 -0
  312. /package/lib/types/graph/{errors → engine/errors}/GraphTopologyError.d.cts +0 -0
  313. /package/lib/types/graph/{errors → engine/errors}/GraphTopologyError.d.mts +0 -0
  314. /package/lib/types/graph/{errors → engine/errors}/index.d.cts +0 -0
  315. /package/lib/types/graph/{errors → engine/errors}/index.d.mts +0 -0
  316. /package/lib/types/graph/{events → engine/events}/GraphExecutionEvent.d.cts +0 -0
  317. /package/lib/types/graph/{events → engine/events}/GraphExecutionEvent.d.mts +0 -0
  318. /package/lib/types/graph/{events → engine/events}/GraphExecutionEventEmitter.d.cts +0 -0
  319. /package/lib/types/graph/{events → engine/events}/GraphExecutionEventEmitter.d.mts +0 -0
  320. /package/lib/types/graph/{events → engine/events}/GraphExecutionEventFactory.d.cts +0 -0
  321. /package/lib/types/graph/{events → engine/events}/GraphExecutionEventFactory.d.mts +0 -0
  322. /package/lib/types/graph/{events → engine/events}/GraphExecutionObserver.d.cts +0 -0
  323. /package/lib/types/graph/{events → engine/events}/GraphExecutionObserver.d.mts +0 -0
  324. /package/lib/types/graph/{events → engine/events}/index.d.cts +0 -0
  325. /package/lib/types/graph/{events → engine/events}/index.d.mts +0 -0
  326. /package/lib/types/graph/{execution → engine/execution}/CodeSandboxEvaluator.d.cts +0 -0
  327. /package/lib/types/graph/{execution → engine/execution}/CodeSandboxEvaluator.d.mts +0 -0
  328. /package/lib/types/graph/{execution → engine/execution}/GraphExecutionContext.d.cts +0 -0
  329. /package/lib/types/graph/{execution → engine/execution}/GraphExecutionContext.d.mts +0 -0
  330. /package/lib/types/graph/{execution → engine/execution}/GraphExecutionEngine.d.cts +0 -0
  331. /package/lib/types/graph/{execution → engine/execution}/GraphExecutionEngine.d.mts +0 -0
  332. /package/lib/types/graph/{execution → engine/execution}/GraphExecutionFrame.d.cts +0 -0
  333. /package/lib/types/graph/{execution → engine/execution}/GraphExecutionFrame.d.mts +0 -0
  334. /package/lib/types/graph/{execution → engine/execution}/GraphNodeExecutor.d.cts +0 -0
  335. /package/lib/types/graph/{execution → engine/execution}/GraphNodeExecutor.d.mts +0 -0
  336. /package/lib/types/graph/{execution → engine/execution}/SwitchGraphNodeExecutor.d.cts +0 -0
  337. /package/lib/types/graph/{execution → engine/execution}/SwitchGraphNodeExecutor.d.mts +0 -0
  338. /package/lib/types/graph/{execution → engine/execution}/index.d.cts +0 -0
  339. /package/lib/types/graph/{execution → engine/execution}/index.d.mts +0 -0
  340. /package/lib/types/graph/{loops → engine/loops}/ForeachGraphNodeExecutor.d.cts +0 -0
  341. /package/lib/types/graph/{loops → engine/loops}/ForeachGraphNodeExecutor.d.mts +0 -0
  342. /package/lib/types/graph/{loops → engine/loops}/GraphLoopExecutionContext.d.cts +0 -0
  343. /package/lib/types/graph/{loops → engine/loops}/GraphLoopExecutionContext.d.mts +0 -0
  344. /package/lib/types/graph/{loops → engine/loops}/UntilGraphNodeExecutor.d.cts +0 -0
  345. /package/lib/types/graph/{loops → engine/loops}/UntilGraphNodeExecutor.d.mts +0 -0
  346. /package/lib/types/graph/{loops → engine/loops}/WhileGraphNodeExecutor.d.cts +0 -0
  347. /package/lib/types/graph/{loops → engine/loops}/WhileGraphNodeExecutor.d.mts +0 -0
  348. /package/lib/types/graph/{loops → engine/loops}/index.d.cts +0 -0
  349. /package/lib/types/graph/{loops → engine/loops}/index.d.mts +0 -0
  350. /package/lib/types/graph/{pinning → engine/pinning}/GraphPinningDependencyResolver.d.cts +0 -0
  351. /package/lib/types/graph/{pinning → engine/pinning}/GraphPinningDependencyResolver.d.mts +0 -0
  352. /package/lib/types/graph/{pinning → engine/pinning}/GraphPinningMetadata.d.cts +0 -0
  353. /package/lib/types/graph/{pinning → engine/pinning}/GraphPinningMetadata.d.mts +0 -0
  354. /package/lib/types/graph/{pinning → engine/pinning}/GraphPinningPolicy.d.cts +0 -0
  355. /package/lib/types/graph/{pinning → engine/pinning}/GraphPinningPolicy.d.mts +0 -0
  356. /package/lib/types/graph/{pinning → engine/pinning}/GraphPinningService.d.cts +0 -0
  357. /package/lib/types/graph/{pinning → engine/pinning}/GraphPinningService.d.mts +0 -0
  358. /package/lib/types/graph/{pinning → engine/pinning}/index.d.cts +0 -0
  359. /package/lib/types/graph/{pinning → engine/pinning}/index.d.mts +0 -0
  360. /package/lib/types/graph/{planning → engine/planning}/GraphExecutionPlan.d.cts +0 -0
  361. /package/lib/types/graph/{planning → engine/planning}/GraphExecutionPlan.d.mts +0 -0
  362. /package/lib/types/graph/{planning → engine/planning}/GraphExecutionPlanEdge.d.cts +0 -0
  363. /package/lib/types/graph/{planning → engine/planning}/GraphExecutionPlanEdge.d.mts +0 -0
  364. /package/lib/types/graph/{planning → engine/planning}/GraphExecutionPlanLayer.d.cts +0 -0
  365. /package/lib/types/graph/{planning → engine/planning}/GraphExecutionPlanLayer.d.mts +0 -0
  366. /package/lib/types/graph/{planning → engine/planning}/GraphExecutionPlanNode.d.cts +0 -0
  367. /package/lib/types/graph/{planning → engine/planning}/GraphExecutionPlanNode.d.mts +0 -0
  368. /package/lib/types/graph/{planning → engine/planning}/GraphExecutionPlanner.d.cts +0 -0
  369. /package/lib/types/graph/{planning → engine/planning}/GraphExecutionPlanner.d.mts +0 -0
  370. /package/lib/types/graph/{planning → engine/planning}/GraphRelationResolver.d.cts +0 -0
  371. /package/lib/types/graph/{planning → engine/planning}/GraphRelationResolver.d.mts +0 -0
  372. /package/lib/types/graph/{planning → engine/planning}/GraphTopology.d.cts +0 -0
  373. /package/lib/types/graph/{planning → engine/planning}/GraphTopology.d.mts +0 -0
  374. /package/lib/types/graph/{planning → engine/planning}/index.d.cts +0 -0
  375. /package/lib/types/graph/{planning → engine/planning}/index.d.mts +0 -0
  376. /package/lib/types/graph/{registry → engine/registry}/GraphNodeExecutorRegistry.d.cts +0 -0
  377. /package/lib/types/graph/{registry → engine/registry}/GraphNodeExecutorRegistry.d.mts +0 -0
  378. /package/lib/types/graph/{registry → engine/registry}/GraphNodeExecutorResolver.d.cts +0 -0
  379. /package/lib/types/graph/{registry → engine/registry}/GraphNodeExecutorResolver.d.mts +0 -0
  380. /package/lib/types/graph/{registry → engine/registry}/index.d.cts +0 -0
  381. /package/lib/types/graph/{registry → engine/registry}/index.d.mts +0 -0
  382. /package/lib/types/graph/{snapshots → engine/snapshots}/GraphExecutionSnapshotMapper.d.cts +0 -0
  383. /package/lib/types/graph/{snapshots → engine/snapshots}/GraphExecutionSnapshotMapper.d.mts +0 -0
  384. /package/lib/types/graph/{snapshots → engine/snapshots}/index.d.cts +0 -0
  385. /package/lib/types/graph/{snapshots → engine/snapshots}/index.d.mts +0 -0
  386. /package/lib/types/graph/{store → engine/store}/GraphCachedValue.d.cts +0 -0
  387. /package/lib/types/graph/{store → engine/store}/GraphCachedValue.d.mts +0 -0
  388. /package/lib/types/graph/{store → engine/store}/GraphValueKey.d.cts +0 -0
  389. /package/lib/types/graph/{store → engine/store}/GraphValueKey.d.mts +0 -0
  390. /package/lib/types/graph/{store → engine/store}/GraphValueStore.d.cts +0 -0
  391. /package/lib/types/graph/{store → engine/store}/GraphValueStore.d.mts +0 -0
  392. /package/lib/types/graph/{store → engine/store}/GraphValueStoreAdapter.d.cts +0 -0
  393. /package/lib/types/graph/{store → engine/store}/GraphValueStoreAdapter.d.mts +0 -0
  394. /package/lib/types/graph/{store → engine/store}/InMemoryGraphValueStoreAdapter.d.cts +0 -0
  395. /package/lib/types/graph/{store → engine/store}/InMemoryGraphValueStoreAdapter.d.mts +0 -0
  396. /package/lib/types/graph/{store → engine/store}/index.d.cts +0 -0
  397. /package/lib/types/graph/{store → engine/store}/index.d.mts +0 -0
  398. /package/lib/types/graph/{validation → engine/validation}/GraphDefinitionValidator.d.cts +0 -0
  399. /package/lib/types/graph/{validation → engine/validation}/GraphDefinitionValidator.d.mts +0 -0
  400. /package/lib/types/graph/{validation → engine/validation}/GraphPortSchemaResolver.d.cts +0 -0
  401. /package/lib/types/graph/{validation → engine/validation}/GraphPortSchemaResolver.d.mts +0 -0
  402. /package/lib/types/graph/{validation → engine/validation}/GraphValueValidator.d.cts +0 -0
  403. /package/lib/types/graph/{validation → engine/validation}/GraphValueValidator.d.mts +0 -0
  404. /package/lib/types/graph/{validation → engine/validation}/index.d.cts +0 -0
  405. /package/lib/types/graph/{validation → engine/validation}/index.d.mts +0 -0
  406. /package/lib/types/graph/{nodes → shared/nodes}/agent.d.cts +0 -0
  407. /package/lib/types/graph/{nodes → shared/nodes}/agent.d.mts +0 -0
  408. /package/lib/types/graph/{nodes → shared/nodes}/base.d.cts +0 -0
  409. /package/lib/types/graph/{nodes → shared/nodes}/base.d.mts +0 -0
  410. /package/lib/types/graph/{nodes → shared/nodes}/category-styles.d.cts +0 -0
  411. /package/lib/types/graph/{nodes → shared/nodes}/category-styles.d.mts +0 -0
  412. /package/lib/types/graph/{nodes → shared/nodes}/flow-control.d.cts +0 -0
  413. /package/lib/types/graph/{nodes → shared/nodes}/flow-control.d.mts +0 -0
  414. /package/lib/types/graph/{nodes → shared/nodes}/index.d.cts +0 -0
  415. /package/lib/types/graph/{nodes → shared/nodes}/index.d.mts +0 -0
  416. /package/lib/types/graph/{nodes → shared/nodes}/triggers.d.cts +0 -0
  417. /package/lib/types/graph/{nodes → shared/nodes}/triggers.d.mts +0 -0
@@ -1,192 +0,0 @@
1
- import { graphDefinitionOf } from "@decaf-ts/ui-decorators/graph";
2
- import { GRAPH_WORKFLOW_BOUNDARY } from "./../constants.js";
3
- import { GraphCycleError } from "./../errors/GraphCycleError.js";
4
- import { GraphTopologyError } from "./../errors/GraphTopologyError.js";
5
- import { GraphRelationResolver } from "./GraphRelationResolver.js";
6
- /**
7
- * Planner that turns a {@link GraphWorkflowDefinition} into a
8
- * {@link GraphExecutionPlan} with topological layers.
9
- */
10
- export class GraphExecutionPlanner {
11
- constructor(resolver) {
12
- this.resolver = resolver ?? new GraphRelationResolver();
13
- }
14
- /**
15
- * Plans a workflow for execution.
16
- *
17
- * @param workflow - The workflow definition to plan.
18
- * @returns The execution plan with nodes, edges, layers, and maps.
19
- * @throws {GraphTopologyError} when node IDs are not unique.
20
- * @throws {GraphCycleError} when the workflow contains an unsupported cycle.
21
- */
22
- plan(workflow) {
23
- this.validateUniqueNodeIds(workflow);
24
- const nodes = this.resolveNodes(workflow);
25
- const edges = this.resolver.resolve(workflow);
26
- const incomingByNode = this.buildIncomingMap(edges);
27
- const outgoingByNode = this.buildOutgoingMap(edges);
28
- const layers = this.topologicalLayers(nodes, edges);
29
- return {
30
- workflow,
31
- workflowId: workflow.name,
32
- nodes,
33
- edges,
34
- layers,
35
- incomingByNode,
36
- outgoingByNode,
37
- };
38
- }
39
- /**
40
- * Validates that all workflow node IDs are unique.
41
- */
42
- validateUniqueNodeIds(workflow) {
43
- const seen = new Set();
44
- for (const node of workflow.nodes ?? []) {
45
- if (seen.has(node.id)) {
46
- throw new GraphTopologyError(`Duplicate node id '${node.id}' in workflow '${workflow.name}'`, { nodeId: node.id, workflowId: workflow.name });
47
- }
48
- seen.add(node.id);
49
- }
50
- }
51
- /**
52
- * Resolves workflow node metadata into plan nodes with full definitions.
53
- */
54
- resolveNodes(workflow) {
55
- const result = [];
56
- for (const nodeMeta of workflow.nodes ?? []) {
57
- const definition = this.resolveDefinition(nodeMeta);
58
- const inputPorts = (definition.ports ?? [])
59
- .filter((p) => p.direction === "input")
60
- .map((p) => p.name);
61
- const outputPorts = (definition.ports ?? [])
62
- .filter((p) => p.direction === "output")
63
- .map((p) => p.name);
64
- result.push({
65
- id: nodeMeta.id,
66
- kind: nodeMeta.kind ?? definition.kind ?? nodeMeta.id,
67
- label: nodeMeta.label,
68
- source: nodeMeta,
69
- definition,
70
- inputPorts,
71
- outputPorts,
72
- metadata: nodeMeta.metadata,
73
- });
74
- }
75
- return result;
76
- }
77
- /**
78
- * Attempts to resolve the full graph node definition from metadata.
79
- *
80
- * Accepts either a decorated Model class/instance (resolved via
81
- * `graphDefinitionOf`) or a plain `GraphNodeDefinition`-shaped object
82
- * (useful for serialized workflows that inline node definitions).
83
- */
84
- resolveDefinition(nodeMeta) {
85
- if (nodeMeta.node) {
86
- if (this.isRawDefinition(nodeMeta.node)) {
87
- return nodeMeta.node;
88
- }
89
- try {
90
- return graphDefinitionOf(nodeMeta.node);
91
- }
92
- catch {
93
- // fall through to stub
94
- }
95
- }
96
- // Return a minimal stub definition so planning can proceed
97
- return {
98
- name: nodeMeta.id,
99
- tag: nodeMeta.id,
100
- kind: nodeMeta.kind ?? nodeMeta.id,
101
- labels: [],
102
- ports: [],
103
- };
104
- }
105
- /**
106
- * Returns `true` when a value looks like a raw {@link GraphNodeDefinition}
107
- * (a plain object with a `ports` array and a `name` string).
108
- */
109
- isRawDefinition(value) {
110
- return (typeof value === "object" &&
111
- value !== null &&
112
- !Array.isArray(value) &&
113
- typeof value.name === "string" &&
114
- Array.isArray(value.ports));
115
- }
116
- /**
117
- * Builds a map of node id -> incoming edges.
118
- */
119
- buildIncomingMap(edges) {
120
- const map = new Map();
121
- for (const edge of edges) {
122
- const list = map.get(edge.targetNodeId) ?? [];
123
- list.push(edge);
124
- map.set(edge.targetNodeId, list);
125
- }
126
- return map;
127
- }
128
- /**
129
- * Builds a map of node id -> outgoing edges.
130
- */
131
- buildOutgoingMap(edges) {
132
- const map = new Map();
133
- for (const edge of edges) {
134
- const list = map.get(edge.sourceNodeId) ?? [];
135
- list.push(edge);
136
- map.set(edge.sourceNodeId, list);
137
- }
138
- return map;
139
- }
140
- /**
141
- * Produces topological layers using Kahn's algorithm.
142
- *
143
- * Workflow boundary edges do not count as executable-node dependencies.
144
- */
145
- topologicalLayers(nodes, edges) {
146
- const executableNodes = nodes.filter((n) => n.id !== GRAPH_WORKFLOW_BOUNDARY);
147
- const nodeIds = new Set(executableNodes.map((n) => n.id));
148
- // Only edges between two executable nodes count as dependencies
149
- const execEdges = edges.filter((e) => nodeIds.has(e.sourceNodeId) && nodeIds.has(e.targetNodeId));
150
- // Compute in-degree
151
- const indegree = new Map();
152
- for (const node of executableNodes)
153
- indegree.set(node.id, 0);
154
- for (const edge of execEdges) {
155
- indegree.set(edge.targetNodeId, (indegree.get(edge.targetNodeId) ?? 0) + 1);
156
- }
157
- const layers = [];
158
- const planned = new Set();
159
- let ready = executableNodes.filter((n) => (indegree.get(n.id) ?? 0) === 0);
160
- let layerIndex = 0;
161
- while (ready.length > 0) {
162
- const layer = { index: layerIndex++, nodes: ready };
163
- layers.push(layer);
164
- const nextReady = [];
165
- for (const node of ready) {
166
- planned.add(node.id);
167
- const outgoing = execEdges.filter((e) => e.sourceNodeId === node.id);
168
- for (const edge of outgoing) {
169
- const deg = (indegree.get(edge.targetNodeId) ?? 1) - 1;
170
- indegree.set(edge.targetNodeId, deg);
171
- if (deg === 0 && !planned.has(edge.targetNodeId)) {
172
- const next = executableNodes.find((n) => n.id === edge.targetNodeId);
173
- if (next)
174
- nextReady.push(next);
175
- }
176
- }
177
- }
178
- ready = nextReady;
179
- }
180
- if (planned.size !== executableNodes.length) {
181
- const unplanned = executableNodes
182
- .filter((n) => !planned.has(n.id))
183
- .map((n) => n.id);
184
- throw new GraphCycleError({
185
- unplannedNodes: unplanned,
186
- workflowId: nodes[0]?.definition?.name,
187
- });
188
- }
189
- return layers;
190
- }
191
- }
192
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR3JhcGhFeGVjdXRpb25QbGFubmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2dyYXBoL3BsYW5uaW5nL0dyYXBoRXhlY3V0aW9uUGxhbm5lci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFTQSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUVsRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsMEJBQXFCO0FBQ3ZELE9BQU8sRUFBRSxlQUFlLEVBQUUsdUNBQWtDO0FBQzVELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSwwQ0FBcUM7QUFLbEUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLG1DQUFnQztBQUVoRTs7O0dBR0c7QUFDSCxNQUFNLE9BQU8scUJBQXFCO0lBR2hDLFlBQVksUUFBZ0M7UUFDMUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLElBQUksSUFBSSxxQkFBcUIsRUFBRSxDQUFDO0lBQzFELENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0gsSUFBSSxDQUFDLFFBQWlDO1FBQ3BDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUVyQyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzFDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRTlDLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNwRCxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFcEQsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztRQUVwRCxPQUFPO1lBQ0wsUUFBUTtZQUNSLFVBQVUsRUFBRSxRQUFRLENBQUMsSUFBSTtZQUN6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TSxJQUFJLEdBQUcsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7d0JBQ3JFLElBQUksSUFBSTs0QkFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUNqQyxDQUFDO2dCQUNILENBQUM7WUFDSCxDQUFDO1lBQ0QsS0FBSyxHQUFHLFNBQVMsQ0FBQztRQUNwQixDQUFDO1FBRUQsSUFBSSxPQUFPLENBQUMsSUFBSSxLQUFLLGVBQWUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUM1QyxNQUFNLFNBQVMsR0FBRyxlQUFlO2lCQUM5QixNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7aUJBQ2pDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3BCLE1BQU0sSUFBSSxlQUFlLENBQUM7Z0JBQ3hCLGNBQWMsRUFBRSxTQUFTO2dCQUN6QixVQUFVLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLFVBQVUsRUFBRSxJQUFJO2FBQ3ZDLENBQUMsQ0FBQztRQUNMLENBQUM7UUFFRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBtb2R1bGUgaW50ZWdyYXRpb25zL2dyYXBoL3BsYW5uaW5nL0dyYXBoRXhlY3V0aW9uUGxhbm5lclxuICogQHN1bW1hcnkgVG9wb2xvZ2ljYWwgcGxhbm5lciBmb3IgZ3JhcGggd29ya2Zsb3dzLlxuICogQGRlc2NyaXB0aW9uIFJlc29sdmVzIHdvcmtmbG93IG5vZGVzIGFuZCByZWxhdGlvbnMsIHZhbGlkYXRlcyB0b3BvbG9neSwgZGV0ZWN0cyBjeWNsZXMsIGFuZCBwcm9kdWNlcyB0b3BvbG9naWNhbCBleGVjdXRpb24gbGF5ZXJzIHVzaW5nIEthaG4ncyBhbGdvcml0aG0uXG4gKi9cbmltcG9ydCB0eXBlIHtcbiAgR3JhcGhOb2RlRGVmaW5pdGlvbixcbiAgR3JhcGhXb3JrZmxvd0RlZmluaXRpb24sXG59IGZyb20gXCJAZGVjYWYtdHMvdWktZGVjb3JhdG9ycy9ncmFwaFwiO1xuaW1wb3J0IHsgZ3JhcGhEZWZpbml0aW9uT2YgfSBmcm9tIFwiQGRlY2FmLXRzL3VpLWRlY29yYXRvcnMvZ3JhcGhcIjtcblxuaW1wb3J0IHsgR1JBUEhfV09SS0ZMT1dfQk9VTkRBUlkgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBHcmFwaEN5Y2xlRXJyb3IgfSBmcm9tIFwiLi4vZXJyb3JzL0dyYXBoQ3ljbGVFcnJvclwiO1xuaW1wb3J0IHsgR3JhcGhUb3BvbG9neUVycm9yIH0gZnJvbSBcIi4uL2Vycm9ycy9HcmFwaFRvcG9sb2d5RXJyb3JcIjtcbmltcG9ydCB0eXBlIHsgR3JhcGhFeGVjdXRpb25QbGFuIH0gZnJvbSBcIi4vR3JhcGhFeGVjdXRpb25QbGFuXCI7XG5pbXBvcnQgdHlwZSB7IEdyYXBoRXhlY3V0aW9uUGxhbk5vZGUgfSBmcm9tIFwiLi9HcmFwaEV4ZWN1dGlvblBsYW5Ob2RlXCI7XG5pbXBvcnQgdHlwZSB7IEdyYXBoRXhlY3V0aW9uUGxhbkVkZ2UgfSBmcm9tIFwiLi9HcmFwaEV4ZWN1dGlvblBsYW5FZGdlXCI7XG5pbXBvcnQgdHlwZSB7IEdyYXBoRXhlY3V0aW9uUGxhbkxheWVyIH0gZnJvbSBcIi4vR3JhcGhFeGVjdXRpb25QbGFuTGF5ZXJcIjtcbmltcG9ydCB7IEdyYXBoUmVsYXRpb25SZXNvbHZlciB9IGZyb20gXCIuL0dyYXBoUmVsYXRpb25SZXNvbHZlclwiO1xuXG4vKipcbiAqIFBsYW5uZXIgdGhhdCB0dXJucyBhIHtAbGluayBHcmFwaFdvcmtmbG93RGVmaW5pdGlvbn0gaW50byBhXG4gKiB7QGxpbmsgR3JhcGhFeGVjdXRpb25QbGFufSB3aXRoIHRvcG9sb2dpY2FsIGxheWVycy5cbiAqL1xuZXhwb3J0IGNsYXNzIEdyYXBoRXhlY3V0aW9uUGxhbm5lciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgcmVzb2x2ZXI6IEdyYXBoUmVsYXRpb25SZXNvbHZlcjtcblxuICBjb25zdHJ1Y3RvcihyZXNvbHZlcj86IEdyYXBoUmVsYXRpb25SZXNvbHZlcikge1xuICAgIHRoaXMucmVzb2x2ZXIgPSByZXNvbHZlciA/PyBuZXcgR3JhcGhSZWxhdGlvblJlc29sdmVyKCk7XG4gIH1cblxuICAvKipcbiAgICogUGxhbnMgYSB3b3JrZmxvdyBmb3IgZXhlY3V0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0gd29ya2Zsb3cgLSBUaGUgd29ya2Zsb3cgZGVmaW5pdGlvbiB0byBwbGFuLlxuICAgKiBAcmV0dXJucyBUaGUgZXhlY3V0aW9uIHBsYW4gd2l0aCBub2RlcywgZWRnZXMsIGxheWVycywgYW5kIG1hcHMuXG4gICAqIEB0aHJvd3Mge0dyYXBoVG9wb2xvZ3lFcnJvcn0gd2hlbiBub2RlIElEcyBhcmUgbm90IHVuaXF1ZS5cbiAgICogQHRocm93cyB7R3JhcGhDeWNsZUVycm9yfSB3aGVuIHRoZSB3b3JrZmxvdyBjb250YWlucyBhbiB1bnN1cHBvcnRlZCBjeWNsZS5cbiAgICovXG4gIHBsYW4od29ya2Zsb3c6IEdyYXBoV29ya2Zsb3dEZWZpbml0aW9uKTogR3JhcGhFeGVjdXRpb25QbGFuIHtcbiAgICB0aGlzLnZhbGlkYXRlVW5pcXVlTm9kZUlkcyh3b3JrZmxvdyk7XG5cbiAgICBjb25zdCBub2RlcyA9IHRoaXMucmVzb2x2ZU5vZGVzKHdvcmtmbG93KTtcbiAgICBjb25zdCBlZGdlcyA9IHRoaXMucmVzb2x2ZXIucmVzb2x2ZSh3b3JrZmxvdyk7XG5cbiAgICBjb25zdCBpbmNvbWluZ0J5Tm9kZSA9IHRoaXMuYnVpbGRJbmNvbWluZ01hcChlZGdlcyk7XG4gICAgY29uc3Qgb3V0Z29pbmdCeU5vZGUgPSB0aGlzLmJ1aWxkT3V0Z29pbmdNYXAoZWRnZXMpO1xuXG4gICAgY29uc3QgbGF5ZXJzID0gdGhpcy50b3BvbG9naWNhbExheWVycyhub2RlcywgZWRnZXMpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHdvcmtmbG93LFxuICAgICAgd29ya2Zsb3dJZDogd29ya2Zsb3cubmFtZSxcbiAgICAgIG5vZGVzLFxuICAgICAgZWRnZXMsXG4gICAgICBsYXllcnMsXG4gICAgICBpbmNvbWluZ0J5Tm9kZSxcbiAgICAgIG91dGdvaW5nQnlOb2RlLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIHRoYXQgYWxsIHdvcmtmbG93IG5vZGUgSURzIGFyZSB1bmlxdWUuXG4gICAqL1xuICBwcml2YXRlIHZhbGlkYXRlVW5pcXVlTm9kZUlkcyh3b3JrZmxvdzogR3JhcGhXb3JrZmxvd0RlZmluaXRpb24pOiB2b2lkIHtcbiAgICBjb25zdCBzZWVuID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgZm9yIChjb25zdCBub2RlIG9mIHdvcmtmbG93Lm5vZGVzID8/IFtdKSB7XG4gICAgICBpZiAoc2Vlbi5oYXMobm9kZS5pZCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEdyYXBoVG9wb2xvZ3lFcnJvcihcbiAgICAgICAgICBgRHVwbGljYXRlIG5vZGUgaWQgJyR7bm9kZS5pZH0nIGluIHdvcmtmbG93ICcke3dvcmtmbG93Lm5hbWV9J2AsXG4gICAgICAgICAgeyBub2RlSWQ6IG5vZGUuaWQsIHdvcmtmbG93SWQ6IHdvcmtmbG93Lm5hbWUgfVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgc2Vlbi5hZGQobm9kZS5pZCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlc29sdmVzIHdvcmtmbG93IG5vZGUgbWV0YWRhdGEgaW50byBwbGFuIG5vZGVzIHdpdGggZnVsbCBkZWZpbml0aW9ucy5cbiAgICovXG4gIHByaXZhdGUgcmVzb2x2ZU5vZGVzKFxuICAgIHdvcmtmbG93OiBHcmFwaFdvcmtmbG93RGVmaW5pdGlvblxuICApOiBHcmFwaEV4ZWN1dGlvblBsYW5Ob2RlW10ge1xuICAgIGNvbnN0IHJlc3VsdDogR3JhcGhFeGVjdXRpb25QbGFuTm9kZVtdID0gW107XG4gICAgZm9yIChjb25zdCBub2RlTWV0YSBvZiB3b3JrZmxvdy5ub2RlcyA/PyBbXSkge1xuICAgICAgY29uc3QgZGVmaW5pdGlvbiA9IHRoaXMucmVzb2x2ZURlZmluaXRpb24obm9kZU1ldGEpO1xuICAgICAgY29uc3QgaW5wdXRQb3J0cyA9IChkZWZpbml0aW9uLnBvcnRzID8/IFtdKVxuICAgICAgICAuZmlsdGVyKChwKSA9PiBwLmRpcmVjdGlvbiA9PT0gXCJpbnB1dFwiKVxuICAgICAgICAubWFwKChwKSA9PiBwLm5hbWUpO1xuICAgICAgY29uc3Qgb3V0cHV0UG9ydHMgPSAoZGVmaW5pdGlvbi5wb3J0cyA/PyBbXSlcbiAgICAgICAgLmZpbHRlcigocCkgPT4gcC5kaXJlY3Rpb24gPT09IFwib3V0cHV0XCIpXG4gICAgICAgIC5tYXAoKHApID0+IHAubmFtZSk7XG4gICAgICByZXN1bHQucHVzaCh7XG4gICAgICAgIGlkOiBub2RlTWV0YS5pZCxcbiAgICAgICAga2luZDogbm9kZU1ldGEua2luZCA/PyBkZWZpbml0aW9uLmtpbmQgPz8gbm9kZU1ldGEuaWQsXG4gICAgICAgIGxhYmVsOiBub2RlTWV0YS5sYWJlbCxcbiAgICAgICAgc291cmNlOiBub2RlTWV0YSxcbiAgICAgICAgZGVmaW5pdGlvbixcbiAgICAgICAgaW5wdXRQb3J0cyxcbiAgICAgICAgb3V0cHV0UG9ydHMsXG4gICAgICAgIG1ldGFkYXRhOiBub2RlTWV0YS5tZXRhZGF0YSxcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIEF0dGVtcHRzIHRvIHJlc29sdmUgdGhlIGZ1bGwgZ3JhcGggbm9kZSBkZWZpbml0aW9uIGZyb20gbWV0YWRhdGEuXG4gICAqXG4gICAqIEFjY2VwdHMgZWl0aGVyIGEgZGVjb3JhdGVkIE1vZGVsIGNsYXNzL2luc3RhbmNlIChyZXNvbHZlZCB2aWFcbiAgICogYGdyYXBoRGVmaW5pdGlvbk9mYCkgb3IgYSBwbGFpbiBgR3JhcGhOb2RlRGVmaW5pdGlvbmAtc2hhcGVkIG9iamVjdFxuICAgKiAodXNlZnVsIGZvciBzZXJpYWxpemVkIHdvcmtmbG93cyB0aGF0IGlubGluZSBub2RlIGRlZmluaXRpb25zKS5cbiAgICovXG4gIHByaXZhdGUgcmVzb2x2ZURlZmluaXRpb24obm9kZU1ldGE6IHtcbiAgICBub2RlPzogdW5rbm93bjtcbiAgICBraW5kPzogc3RyaW5nO1xuICAgIGlkOiBzdHJpbmc7XG4gIH0pOiBHcmFwaE5vZGVEZWZpbml0aW9uIHtcbiAgICBpZiAobm9kZU1ldGEubm9kZSkge1xuICAgICAgaWYgKHRoaXMuaXNSYXdEZWZpbml0aW9uKG5vZGVNZXRhLm5vZGUpKSB7XG4gICAgICAgIHJldHVybiBub2RlTWV0YS5ub2RlIGFzIEdyYXBoTm9kZURlZmluaXRpb247XG4gICAgICB9XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gZ3JhcGhEZWZpbml0aW9uT2Yobm9kZU1ldGEubm9kZSBhcyBhbnkpO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIC8vIGZhbGwgdGhyb3VnaCB0byBzdHViXG4gICAgICB9XG4gICAgfVxuICAgIC8vIFJldHVybiBhIG1pbmltYWwgc3R1YiBkZWZpbml0aW9uIHNvIHBsYW5uaW5nIGNhbiBwcm9jZWVkXG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWU6IG5vZGVNZXRhLmlkLFxuICAgICAgdGFnOiBub2RlTWV0YS5pZCxcbiAgICAgIGtpbmQ6IG5vZGVNZXRhLmtpbmQgPz8gbm9kZU1ldGEuaWQsXG4gICAgICBsYWJlbHM6IFtdLFxuICAgICAgcG9ydHM6IFtdLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBgdHJ1ZWAgd2hlbiBhIHZhbHVlIGxvb2tzIGxpa2UgYSByYXcge0BsaW5rIEdyYXBoTm9kZURlZmluaXRpb259XG4gICAqIChhIHBsYWluIG9iamVjdCB3aXRoIGEgYHBvcnRzYCBhcnJheSBhbmQgYSBgbmFtZWAgc3RyaW5nKS5cbiAgICovXG4gIHByaXZhdGUgaXNSYXdEZWZpbml0aW9uKHZhbHVlOiB1bmtub3duKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiAmJlxuICAgICAgdmFsdWUgIT09IG51bGwgJiZcbiAgICAgICFBcnJheS5pc0FycmF5KHZhbHVlKSAmJlxuICAgICAgdHlwZW9mICh2YWx1ZSBhcyB7IG5hbWU/OiB1bmtub3duIH0pLm5hbWUgPT09IFwic3RyaW5nXCIgJiZcbiAgICAgIEFycmF5LmlzQXJyYXkoKHZhbHVlIGFzIHsgcG9ydHM/OiB1bmtub3duIH0pLnBvcnRzKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQnVpbGRzIGEgbWFwIG9mIG5vZGUgaWQgLT4gaW5jb21pbmcgZWRnZXMuXG4gICAqL1xuICBwcml2YXRlIGJ1aWxkSW5jb21pbmdNYXAoXG4gICAgZWRnZXM6IEdyYXBoRXhlY3V0aW9uUGxhbkVkZ2VbXVxuICApOiBNYXA8c3RyaW5nLCBHcmFwaEV4ZWN1dGlvblBsYW5FZGdlW10+IHtcbiAgICBjb25zdCBtYXAgPSBuZXcgTWFwPHN0cmluZywgR3JhcGhFeGVjdXRpb25QbGFuRWRnZVtdPigpO1xuICAgIGZvciAoY29uc3QgZWRnZSBvZiBlZGdlcykge1xuICAgICAgY29uc3QgbGlzdCA9IG1hcC5nZXQoZWRnZS50YXJnZXROb2RlSWQpID8/IFtdO1xuICAgICAgbGlzdC5wdXNoKGVkZ2UpO1xuICAgICAgbWFwLnNldChlZGdlLnRhcmdldE5vZGVJZCwgbGlzdCk7XG4gICAgfVxuICAgIHJldHVybiBtYXA7XG4gIH1cblxuICAvKipcbiAgICogQnVpbGRzIGEgbWFwIG9mIG5vZGUgaWQgLT4gb3V0Z29pbmcgZWRnZXMuXG4gICAqL1xuICBwcml2YXRlIGJ1aWxkT3V0Z29pbmdNYXAoXG4gICAgZWRnZXM6IEdyYXBoRXhlY3V0aW9uUGxhbkVkZ2VbXVxuICApOiBNYXA8c3RyaW5nLCBHcmFwaEV4ZWN1dGlvblBsYW5FZGdlW10+IHtcbiAgICBjb25zdCBtYXAgPSBuZXcgTWFwPHN0cmluZywgR3JhcGhFeGVjdXRpb25QbGFuRWRnZVtdPigpO1xuICAgIGZvciAoY29uc3QgZWRnZSBvZiBlZGdlcykge1xuICAgICAgY29uc3QgbGlzdCA9IG1hcC5nZXQoZWRnZS5zb3VyY2VOb2RlSWQpID8/IFtdO1xuICAgICAgbGlzdC5wdXNoKGVkZ2UpO1xuICAgICAgbWFwLnNldChlZGdlLnNvdXJjZU5vZGVJZCwgbGlzdCk7XG4gICAgfVxuICAgIHJldHVybiBtYXA7XG4gIH1cblxuICAvKipcbiAgICogUHJvZHVjZXMgdG9wb2xvZ2ljYWwgbGF5ZXJzIHVzaW5nIEthaG4ncyBhbGdvcml0aG0uXG4gICAqXG4gICAqIFdvcmtmbG93IGJvdW5kYXJ5IGVkZ2VzIGRvIG5vdCBjb3VudCBhcyBleGVjdXRhYmxlLW5vZGUgZGVwZW5kZW5jaWVzLlxuICAgKi9cbiAgcHJpdmF0ZSB0b3BvbG9naWNhbExheWVycyhcbiAgICBub2RlczogR3JhcGhFeGVjdXRpb25QbGFuTm9kZVtdLFxuICAgIGVkZ2VzOiBHcmFwaEV4ZWN1dGlvblBsYW5FZGdlW11cbiAgKTogR3JhcGhFeGVjdXRpb25QbGFuTGF5ZXJbXSB7XG4gICAgY29uc3QgZXhlY3V0YWJsZU5vZGVzID0gbm9kZXMuZmlsdGVyKFxuICAgICAgKG4pID0+IG4uaWQgIT09IEdSQVBIX1dPUktGTE9XX0JPVU5EQVJZXG4gICAgKTtcbiAgICBjb25zdCBub2RlSWRzID0gbmV3IFNldChleGVjdXRhYmxlTm9kZXMubWFwKChuKSA9PiBuLmlkKSk7XG5cbiAgICAvLyBPbmx5IGVkZ2VzIGJldHdlZW4gdHdvIGV4ZWN1dGFibGUgbm9kZXMgY291bnQgYXMgZGVwZW5kZW5jaWVzXG4gICAgY29uc3QgZXhlY0VkZ2VzID0gZWRnZXMuZmlsdGVyKFxuICAgICAgKGUpID0+IG5vZGVJZHMuaGFzKGUuc291cmNlTm9kZUlkKSAmJiBub2RlSWRzLmhhcyhlLnRhcmdldE5vZGVJZClcbiAgICApO1xuXG4gICAgLy8gQ29tcHV0ZSBpbi1kZWdyZWVcbiAgICBjb25zdCBpbmRlZ3JlZSA9IG5ldyBNYXA8c3RyaW5nLCBudW1iZXI+KCk7XG4gICAgZm9yIChjb25zdCBub2RlIG9mIGV4ZWN1dGFibGVOb2RlcykgaW5kZWdyZWUuc2V0KG5vZGUuaWQsIDApO1xuICAgIGZvciAoY29uc3QgZWRnZSBvZiBleGVjRWRnZXMpIHtcbiAgICAgIGluZGVncmVlLnNldChlZGdlLnRhcmdldE5vZGVJZCwgKGluZGVncmVlLmdldChlZGdlLnRhcmdldE5vZGVJZCkgPz8gMCkgKyAxKTtcbiAgICB9XG5cbiAgICBjb25zdCBsYXllcnM6IEdyYXBoRXhlY3V0aW9uUGxhbkxheWVyW10gPSBbXTtcbiAgICBjb25zdCBwbGFubmVkID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgbGV0IHJlYWR5ID0gZXhlY3V0YWJsZU5vZGVzLmZpbHRlcigobikgPT4gKGluZGVncmVlLmdldChuLmlkKSA/PyAwKSA9PT0gMCk7XG4gICAgbGV0IGxheWVySW5kZXggPSAwO1xuXG4gICAgd2hpbGUgKHJlYWR5Lmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGxheWVyOiBHcmFwaEV4ZWN1dGlvblBsYW5MYXllciA9IHsgaW5kZXg6IGxheWVySW5kZXgrKywgbm9kZXM6IHJlYWR5IH07XG4gICAgICBsYXllcnMucHVzaChsYXllcik7XG4gICAgICBjb25zdCBuZXh0UmVhZHk6IEdyYXBoRXhlY3V0aW9uUGxhbk5vZGVbXSA9IFtdO1xuICAgICAgZm9yIChjb25zdCBub2RlIG9mIHJlYWR5KSB7XG4gICAgICAgIHBsYW5uZWQuYWRkKG5vZGUuaWQpO1xuICAgICAgICBjb25zdCBvdXRnb2luZyA9IGV4ZWNFZGdlcy5maWx0ZXIoKGUpID0+IGUuc291cmNlTm9kZUlkID09PSBub2RlLmlkKTtcbiAgICAgICAgZm9yIChjb25zdCBlZGdlIG9mIG91dGdvaW5nKSB7XG4gICAgICAgICAgY29uc3QgZGVnID0gKGluZGVncmVlLmdldChlZGdlLnRhcmdldE5vZGVJZCkgPz8gMSkgLSAxO1xuICAgICAgICAgIGluZGVncmVlLnNldChlZGdlLnRhcmdldE5vZGVJZCwgZGVnKTtcbiAgICAgICAgICBpZiAoZGVnID09PSAwICYmICFwbGFubmVkLmhhcyhlZGdlLnRhcmdldE5vZGVJZCkpIHtcbiAgICAgICAgICAgIGNvbnN0IG5leHQgPSBleGVjdXRhYmxlTm9kZXMuZmluZCgobikgPT4gbi5pZCA9PT0gZWRnZS50YXJnZXROb2RlSWQpO1xuICAgICAgICAgICAgaWYgKG5leHQpIG5leHRSZWFkeS5wdXNoKG5leHQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmVhZHkgPSBuZXh0UmVhZHk7XG4gICAgfVxuXG4gICAgaWYgKHBsYW5uZWQuc2l6ZSAhPT0gZXhlY3V0YWJsZU5vZGVzLmxlbmd0aCkge1xuICAgICAgY29uc3QgdW5wbGFubmVkID0gZXhlY3V0YWJsZU5vZGVzXG4gICAgICAgIC5maWx0ZXIoKG4pID0+ICFwbGFubmVkLmhhcyhuLmlkKSlcbiAgICAgICAgLm1hcCgobikgPT4gbi5pZCk7XG4gICAgICB0aHJvdyBuZXcgR3JhcGhDeWNsZUVycm9yKHtcbiAgICAgICAgdW5wbGFubmVkTm9kZXM6IHVucGxhbm5lZCxcbiAgICAgICAgd29ya2Zsb3dJZDogbm9kZXNbMF0/LmRlZmluaXRpb24/Lm5hbWUsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbGF5ZXJzO1xuICB9XG59XG4iXX0=
@@ -1,167 +0,0 @@
1
- import { graphDefinitionOf } from "@decaf-ts/ui-decorators/graph";
2
- import { GRAPH_WORKFLOW_BOUNDARY } from "./../constants.js";
3
- import { GraphPortError } from "./../errors/GraphPortError.js";
4
- import { GraphTopologyError } from "./../errors/GraphTopologyError.js";
5
- /**
6
- * Resolves raw workflow relation metadata into normalized execution edges.
7
- */
8
- export class GraphRelationResolver {
9
- /**
10
- * Resolves all relations of a workflow into execution edges.
11
- *
12
- * @param workflow - The workflow definition.
13
- * @returns Array of normalized edges.
14
- * @throws {GraphTopologyError} when an endpoint is unknown or ambiguous.
15
- * @throws {GraphPortError} when a referenced port is missing or unknown.
16
- */
17
- resolve(workflow) {
18
- const nodeIds = new Set(workflow.nodes.map((n) => n.id));
19
- const boundaryAliases = this.boundaryAliases(workflow);
20
- const inputPorts = this.portNames(workflow.inputs);
21
- const outputPorts = this.portNames(workflow.outputs);
22
- const nodePortMap = this.buildNodePortMap(workflow);
23
- const edges = [];
24
- for (const relation of workflow.relations ?? []) {
25
- const edge = this.resolveRelation(relation, nodeIds, boundaryAliases, inputPorts, outputPorts, nodePortMap);
26
- edges.push(edge);
27
- }
28
- return edges;
29
- }
30
- /**
31
- * Resolves a single relation into an edge.
32
- */
33
- resolveRelation(relation, nodeIds, boundaryAliases, inputPorts, outputPorts, nodePortMap) {
34
- const sourceNodeId = this.resolveEndpoint(relation.source, nodeIds, boundaryAliases);
35
- const targetNodeId = this.resolveEndpoint(relation.target, nodeIds, boundaryAliases);
36
- const sourcePort = relation.sourcePort;
37
- const targetPort = relation.targetPort;
38
- if (!sourcePort) {
39
- throw new GraphPortError(`Relation is missing sourcePort (source: ${String(relation.source)}, target: ${String(relation.target)})`, { relation });
40
- }
41
- if (!targetPort) {
42
- throw new GraphPortError(`Relation is missing targetPort (source: ${String(relation.source)}, target: ${String(relation.target)})`, { relation });
43
- }
44
- this.validatePort(sourceNodeId, sourcePort, true, boundaryAliases, inputPorts, outputPorts, nodePortMap);
45
- this.validatePort(targetNodeId, targetPort, false, boundaryAliases, inputPorts, outputPorts, nodePortMap);
46
- return {
47
- id: this.createEdgeId(sourceNodeId, sourcePort, targetNodeId, targetPort),
48
- sourceNodeId,
49
- sourcePort,
50
- targetNodeId,
51
- targetPort,
52
- label: relation.label,
53
- metadata: relation.metadata,
54
- };
55
- }
56
- /**
57
- * Resolves an endpoint (source or target) to a node id or the workflow boundary.
58
- */
59
- resolveEndpoint(endpoint, nodeIds, boundaryAliases) {
60
- const name = String(endpoint);
61
- if (boundaryAliases.has(name))
62
- return GRAPH_WORKFLOW_BOUNDARY;
63
- if (nodeIds.has(name))
64
- return name;
65
- throw new GraphTopologyError(`Unknown endpoint '${name}'`, { endpoint: name, knownNodes: Array.from(nodeIds) });
66
- }
67
- /**
68
- * Validates that a port exists on the given node or boundary.
69
- */
70
- validatePort(nodeId, port, isSource, boundaryAliases, inputPorts, outputPorts, nodePortMap) {
71
- if (nodeId === GRAPH_WORKFLOW_BOUNDARY) {
72
- const ports = isSource ? inputPorts : outputPorts;
73
- if (!ports.has(port)) {
74
- throw new GraphPortError(`Unknown ${isSource ? "input" : "output"} port '${port}' on workflow boundary`, { nodeId, port, isSource, available: Array.from(ports) });
75
- }
76
- return;
77
- }
78
- const nodePorts = nodePortMap.get(nodeId);
79
- if (!nodePorts) {
80
- throw new GraphTopologyError(`No port map for node '${nodeId}'`, {
81
- nodeId,
82
- });
83
- }
84
- const ports = isSource ? nodePorts.output : nodePorts.input;
85
- if (!ports.has(port)) {
86
- throw new GraphPortError(`Unknown ${isSource ? "output" : "input"} port '${port}' on node '${nodeId}'`, { nodeId, port, isSource, available: Array.from(ports) });
87
- }
88
- }
89
- /**
90
- * Builds the set of boundary aliases for a workflow.
91
- */
92
- boundaryAliases(workflow) {
93
- return new Set([
94
- GRAPH_WORKFLOW_BOUNDARY,
95
- "workflow",
96
- "graph",
97
- workflow.name,
98
- ]);
99
- }
100
- /**
101
- * Extracts port names from a list of port definitions.
102
- */
103
- portNames(ports) {
104
- return new Set((ports ?? []).map((p) => p.name));
105
- }
106
- /**
107
- * Builds a map of node id -> { input ports, output ports }.
108
- */
109
- buildNodePortMap(workflow) {
110
- const map = new Map();
111
- for (const nodeMeta of workflow.nodes ?? []) {
112
- const input = new Set();
113
- const output = new Set();
114
- const def = this.resolveNodeDefinition(nodeMeta);
115
- if (def) {
116
- for (const port of def.ports ?? []) {
117
- if (port.direction === "input")
118
- input.add(port.name);
119
- else
120
- output.add(port.name);
121
- }
122
- }
123
- map.set(nodeMeta.id, { input, output });
124
- }
125
- return map;
126
- }
127
- /**
128
- * Attempts to resolve a node's full definition from its metadata.
129
- *
130
- * Accepts either a decorated Model class/instance (resolved via
131
- * `graphDefinitionOf`) or a plain `GraphNodeDefinition`-shaped object
132
- * (useful for serialized workflows that inline node definitions).
133
- */
134
- resolveNodeDefinition(nodeMeta) {
135
- if (nodeMeta.node) {
136
- if (this.isRawDefinition(nodeMeta.node)) {
137
- return nodeMeta.node;
138
- }
139
- try {
140
- const def = graphDefinitionOf(nodeMeta.node);
141
- return def;
142
- }
143
- catch {
144
- return undefined;
145
- }
146
- }
147
- return undefined;
148
- }
149
- /**
150
- * Returns `true` when a value looks like a raw {@link GraphNodeDefinition}
151
- * (a plain object with a `ports` array and a `name` string).
152
- */
153
- isRawDefinition(value) {
154
- return (typeof value === "object" &&
155
- value !== null &&
156
- !Array.isArray(value) &&
157
- typeof value.name === "string" &&
158
- Array.isArray(value.ports));
159
- }
160
- /**
161
- * Creates a stable edge id from its endpoints and ports.
162
- */
163
- createEdgeId(sourceNodeId, sourcePort, targetNodeId, targetPort) {
164
- return `${sourceNodeId}:${sourcePort}->${targetNodeId}:${targetPort}`;
165
- }
166
- }
167
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR3JhcGhSZWxhdGlvblJlc29sdmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2dyYXBoL3BsYW5uaW5nL0dyYXBoUmVsYXRpb25SZXNvbHZlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFVQSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUVsRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsMEJBQXFCO0FBQ3ZELE9BQU8sRUFBRSxjQUFjLEVBQUUsc0NBQWlDO0FBQzFELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSwwQ0FBcUM7QUFHbEU7O0dBRUc7QUFDSCxNQUFNLE9BQU8scUJBQXFCO0lBQ2hDOzs7Ozs7O09BT0c7SUFDSCxPQUFPLENBQUMsUUFBaUM7UUFDdkMsTUFBTSxPQUFPLEdBQUcsSUFBSSxHQUFHLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3pELE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDdkQsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDbkQsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDckQsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRXBELE1BQU0sS0FBSyxHQUE2QixFQUFFLENBQUM7UUFFM0MsS0FBSyxNQUFNLFFBQVEsSUFBSSxRQUFRLENBQUMsU0FBUyxJQUFJLEVBQUUsRUFBRSxDQUFDO1lBQ2hELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQy9CLFFBQVEsRUFDUixPQUFPLEVBQ1AsZUFB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QixDQUMzQixRQUEyQztRQUUzQyxJQUFJLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNsQixJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7Z0JBQ3hDLE9BQU8sUUFBUSxDQUFDLElBRWYsQ0FBQztZQUNKLENBQUM7WUFDRCxJQUFJLENBQUM7Z0JBQ0gsTUFBTSxHQUFHLEdBQUcsaUJBQWlCLENBQUMsUUFBUSxDQUFDLElBQVcsQ0FBQyxDQUFDO2dCQUNwRCxPQUFPLEdBQVUsQ0FBQztZQUNwQixDQUFDO1lBQUMsTUFBTSxDQUFDO2dCQUNQLE9BQU8sU0FBUyxDQUFDO1lBQ25CLENBQUM7UUFDSCxDQUFDO1FBQ0QsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUVEOzs7T0FHRztJQUNLLGVBQWUsQ0FBQyxLQUFjO1FBQ3BDLE9BQU8sQ0FDTCxPQUFPLEtBQUssS0FBSyxRQUFRO1lBQ3pCLEtBQUssS0FBSyxJQUFJO1lBQ2QsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztZQUNyQixPQUFRLEtBQTRCLENBQUMsSUFBSSxLQUFLLFFBQVE7WUFDdEQsS0FBSyxDQUFDLE9BQU8sQ0FBRSxLQUE2QixDQUFDLEtBQUssQ0FBQyxDQUNwRCxDQUFDO0lBQ0osQ0FBQztJQUVEOztPQUVHO0lBQ0ssWUFBWSxDQUNsQixZQUFvQixFQUNwQixVQUFrQixFQUNsQixZQUFvQixFQUNwQixVQUFrQjtRQUVsQixPQUFPLEdBQUcsWUFBWSxJQUFJLFVBQVUsS0FBSyxZQUFZLElBQUksVUFBVSxFQUFFLENBQUM7SUFDeEUsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbW9kdWxlIGludGVncmF0aW9ucy9ncmFwaC9wbGFubmluZy9HcmFwaFJlbGF0aW9uUmVzb2x2ZXJcbiAqIEBzdW1tYXJ5IE5vcm1hbGl6ZXMgd29ya2Zsb3cgcmVsYXRpb25zIGludG8gZXhlY3V0aW9uIGVkZ2VzLlxuICogQGRlc2NyaXB0aW9uIFJlc29sdmVzIHdvcmtmbG93IGJvdW5kYXJ5IGFsaWFzZXMsIHZhbGlkYXRlcyBlbmRwb2ludHMgYW5kIHBvcnRzLCBhbmQgcHJvZHVjZXMgc3RhYmxlIGVkZ2UgSURzLlxuICovXG5pbXBvcnQgdHlwZSB7XG4gIEdyYXBoUG9ydERlZmluaXRpb24sXG4gIEdyYXBoV29ya2Zsb3dEZWZpbml0aW9uLFxuICBHcmFwaFdvcmtmbG93UmVsYXRpb25NZXRhZGF0YSxcbn0gZnJvbSBcIkBkZWNhZi10cy91aS1kZWNvcmF0b3JzL2dyYXBoXCI7XG5pbXBvcnQgeyBncmFwaERlZmluaXRpb25PZiB9IGZyb20gXCJAZGVjYWYtdHMvdWktZGVjb3JhdG9ycy9ncmFwaFwiO1xuXG5pbXBvcnQgeyBHUkFQSF9XT1JLRkxPV19CT1VOREFSWSB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IEdyYXBoUG9ydEVycm9yIH0gZnJvbSBcIi4uL2Vycm9ycy9HcmFwaFBvcnRFcnJvclwiO1xuaW1wb3J0IHsgR3JhcGhUb3BvbG9neUVycm9yIH0gZnJvbSBcIi4uL2Vycm9ycy9HcmFwaFRvcG9sb2d5RXJyb3JcIjtcbmltcG9ydCB0eXBlIHsgR3JhcGhFeGVjdXRpb25QbGFuRWRnZSB9IGZyb20gXCIuL0dyYXBoRXhlY3V0aW9uUGxhbkVkZ2VcIjtcblxuLyoqXG4gKiBSZXNvbHZlcyByYXcgd29ya2Zsb3cgcmVsYXRpb24gbWV0YWRhdGEgaW50byBub3JtYWxpemVkIGV4ZWN1dGlvbiBlZGdlcy5cbiAqL1xuZXhwb3J0IGNsYXNzIEdyYXBoUmVsYXRpb25SZXNvbHZlciB7XG4gIC8qKlxuICAgKiBSZXNvbHZlcyBhbGwgcmVsYXRpb25zIG9mIGEgd29ya2Zsb3cgaW50byBleGVjdXRpb24gZWRnZXMuXG4gICAqXG4gICAqIEBwYXJhbSB3b3JrZmxvdyAtIFRoZSB3b3JrZmxvdyBkZWZpbml0aW9uLlxuICAgKiBAcmV0dXJucyBBcnJheSBvZiBub3JtYWxpemVkIGVkZ2VzLlxuICAgKiBAdGhyb3dzIHtHcmFwaFRvcG9sb2d5RXJyb3J9IHdoZW4gYW4gZW5kcG9pbnQgaXMgdW5rbm93biBvciBhbWJpZ3VvdXMuXG4gICAqIEB0aHJvd3Mge0dyYXBoUG9ydEVycm9yfSB3aGVuIGEgcmVmZXJlbmNlZCBwb3J0IGlzIG1pc3Npbmcgb3IgdW5rbm93bi5cbiAgICovXG4gIHJlc29sdmUod29ya2Zsb3c6IEdyYXBoV29ya2Zsb3dEZWZpbml0aW9uKTogR3JhcGhFeGVjdXRpb25QbGFuRWRnZVtdIHtcbiAgICBjb25zdCBub2RlSWRzID0gbmV3IFNldCh3b3JrZmxvdy5ub2Rlcy5tYXAoKG4pID0+IG4uaWQpKTtcbiAgICBjb25zdCBib3VuZGFyeUFsaWFzZXMgPSB0aGlzLmJvdW5kYXJ5QWxpYXNlcyh3b3JrZmxvdyk7XG4gICAgY29uc3QgaW5wdXRQb3J0cyA9IHRoaXMucG9ydE5hbWVzKHdvcmtmbG93LmlucHV0cyk7XG4gICAgY29uc3Qgb3V0cHV0UG9ydHMgPSB0aGlzLnBvcnROYW1lcyh3b3JrZmxvdy5vdXRwdXRzKTtcbiAgICBjb25zdCBub2RlUG9ydE1hcCA9IHRoaXMuYnVpbGROb2RlUG9ydE1hcCh3b3JrZmxvdyk7XG5cbiAgICBjb25zdCBlZGdlczogR3JhcGhFeGVjdXRpb25QbGFuRWRnZVtdID0gW107XG5cbiAgICBmb3IgKGNvbnN0IHJlbGF0aW9uIG9mIHdvcmtmbG93LnJlbGF0aW9ucyA/PyBbXSkge1xuICAgICAgY29uc3QgZWRnZSA9IHRoaXMucmVzb2x2ZVJlbGF0aW9uKFxuICAgICAgICByZWxhdGlvbixcbiAgICAgICAgbm9kZUlkcyxcbiAgICAgICAgYm91bmRhcnlBbGlhc2VzLFxuICAgICAgICBpbnB1dFBvcnRzLFxuICAgICAgICBvdXRwdXRQb3J0cyxcbiAgICAgICAgbm9kZVBvcnRNYXBcbiAgICAgICk7XG4gICAgICBlZGdlcy5wdXNoKGVkZ2UpO1xuICAgIH1cblxuICAgIHJldHVybiBlZGdlcztcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNvbHZlcyBhIHNpbmdsZSByZWxhdGlvbiBpbnRvIGFuIGVkZ2UuXG4gICAqL1xuICBwcml2YXRlIHJlc29sdmVSZWxhdGlvbihcbiAgICByZWxhdGlvbjogR3JhcGhXb3JrZmxvd1JlbGF0aW9uTWV0YWRhdGEsXG4gICAgbm9kZUlkczogU2V0PHN0cmluZz4sXG4gICAgYm91bmRhcnlBbGlhc2VzOiBTZXQ8c3RyaW5nPixcbiAgICBpbnB1dFBvcnRzOiBTZXQ8c3RyaW5nPixcbiAgICBvdXRwdXRQb3J0czogU2V0PHN0cmluZz4sXG4gICAgbm9kZVBvcnRNYXA6IE1hcDxzdHJpbmcsIHsgaW5wdXQ6IFNldDxzdHJpbmc+OyBvdXRwdXQ6IFNldDxzdHJpbmc+IH0+XG4gICk6IEdyYXBoRXhlY3V0aW9uUGxhbkVkZ2Uge1xuICAgIGNvbnN0IHNvdXJjZU5vZGVJZCA9IHRoaXMucmVzb2x2ZUVuZHBvaW50KFxuICAgICAgcmVsYXRpb24uc291cmNlLFxuICAgICAgbm9kZUlkcyxcbiAgICAgIGJvdW5kYXJ5QWxpYXNlc1xuICAgICk7XG4gICAgY29uc3QgdGFyZ2V0Tm9kZUlkID0gdGhpcy5yZXNvbHZlRW5kcG9pbnQoXG4gICAgICByZWxhdGlvbi50YXJnZXQsXG4gICAgICBub2RlSWRzLFxuICAgICAgYm91bmRhcnlBbGlhc2VzXG4gICAgKTtcblxuICAgIGNvbnN0IHNvdXJjZVBvcnQgPSByZWxhdGlvbi5zb3VyY2VQb3J0O1xuICAgIGNvbnN0IHRhcmdldFBvcnQgPSByZWxhdGlvbi50YXJnZXRQb3J0O1xuXG4gICAgaWYgKCFzb3VyY2VQb3J0KSB7XG4gICAgICB0aHJvdyBuZXcgR3JhcGhQb3J0RXJyb3IoXG4gICAgICAgIGBSZWxhdGlvbiBpcyBtaXNzaW5nIHNvdXJjZVBvcnQgKHNvdXJjZTogJHtTdHJpbmcocmVsYXRpb24uc291cmNlKX0sIHRhcmdldDogJHtTdHJpbmcocmVsYXRpb24udGFyZ2V0KX0pYCxcbiAgICAgICAgeyByZWxhdGlvbiB9XG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoIXRhcmdldFBvcnQpIHtcbiAgICAgIHRocm93IG5ldyBHcmFwaFBvcnRFcnJvcihcbiAgICAgICAgYFJlbGF0aW9uIGlzIG1pc3NpbmcgdGFyZ2V0UG9ydCAoc291cmNlOiAke1N0cmluZyhyZWxhdGlvbi5zb3VyY2UpfSwgdGFyZ2V0OiAke1N0cmluZyhyZWxhdGlvbi50YXJnZXQpfSlgLFxuICAgICAgICB7IHJlbGF0aW9uIH1cbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy52YWxpZGF0ZVBvcnQoXG4gICAgICBzb3VyY2VOb2RlSWQsXG4gICAgICBzb3VyY2VQb3J0LFxuICAgICAgdHJ1ZSxcbiAgICAgIGJvdW5kYXJ5QWxpYXNlcyxcbiAgICAgIGlucHV0UG9ydHMsXG4gICAgICBvdXRwdXRQb3J0cyxcbiAgICAgIG5vZGVQb3J0TWFwXG4gICAgKTtcbiAgICB0aGlzLnZhbGlkYXRlUG9ydChcbiAgICAgIHRhcmdldE5vZGVJZCxcbiAgICAgIHRhcmdldFBvcnQsXG4gICAgICBmYWxzZSxcbiAgICAgIGJvdW5kYXJ5QWxpYXNlcyxcbiAgICAgIGlucHV0UG9ydHMsXG4gICAgICBvdXRwdXRQb3J0cyxcbiAgICAgIG5vZGVQb3J0TWFwXG4gICAgKTtcblxuICAgIHJldHVybiB7XG4gICAgICBpZDogdGhpcy5jcmVhdGVFZGdlSWQoc291cmNlTm9kZUlkLCBzb3VyY2VQb3J0LCB0YXJnZXROb2RlSWQsIHRhcmdldFBvcnQpLFxuICAgICAgc291cmNlTm9kZUlkLFxuICAgICAgc291cmNlUG9ydCxcbiAgICAgIHRhcmdldE5vZGVJZCxcbiAgICAgIHRhcmdldFBvcnQsXG4gICAgICBsYWJlbDogcmVsYXRpb24ubGFiZWwsXG4gICAgICBtZXRhZGF0YTogcmVsYXRpb24ubWV0YWRhdGEsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNvbHZlcyBhbiBlbmRwb2ludCAoc291cmNlIG9yIHRhcmdldCkgdG8gYSBub2RlIGlkIG9yIHRoZSB3b3JrZmxvdyBib3VuZGFyeS5cbiAgICovXG4gIHByaXZhdGUgcmVzb2x2ZUVuZHBvaW50KFxuICAgIGVuZHBvaW50OiBzdHJpbmcgfCB1bmtub3duLFxuICAgIG5vZGVJZHM6IFNldDxzdHJpbmc+LFxuICAgIGJvdW5kYXJ5QWxpYXNlczogU2V0PHN0cmluZz5cbiAgKTogc3RyaW5nIHtcbiAgICBjb25zdCBuYW1lID0gU3RyaW5nKGVuZHBvaW50KTtcbiAgICBpZiAoYm91bmRhcnlBbGlhc2VzLmhhcyhuYW1lKSkgcmV0dXJuIEdSQVBIX1dPUktGTE9XX0JPVU5EQVJZO1xuICAgIGlmIChub2RlSWRzLmhhcyhuYW1lKSkgcmV0dXJuIG5hbWU7XG4gICAgdGhyb3cgbmV3IEdyYXBoVG9wb2xvZ3lFcnJvcihcbiAgICAgIGBVbmtub3duIGVuZHBvaW50ICcke25hbWV9J2AsXG4gICAgICB7IGVuZHBvaW50OiBuYW1lLCBrbm93bk5vZGVzOiBBcnJheS5mcm9tKG5vZGVJZHMpIH1cbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyB0aGF0IGEgcG9ydCBleGlzdHMgb24gdGhlIGdpdmVuIG5vZGUgb3IgYm91bmRhcnkuXG4gICAqL1xuICBwcml2YXRlIHZhbGlkYXRlUG9ydChcbiAgICBub2RlSWQ6IHN0cmluZyxcbiAgICBwb3J0OiBzdHJpbmcsXG4gICAgaXNTb3VyY2U6IGJvb2xlYW4sXG4gICAgYm91bmRhcnlBbGlhc2VzOiBTZXQ8c3RyaW5nPixcbiAgICBpbnB1dFBvcnRzOiBTZXQ8c3RyaW5nPixcbiAgICBvdXRwdXRQb3J0czogU2V0PHN0cmluZz4sXG4gICAgbm9kZVBvcnRNYXA6IE1hcDxzdHJpbmcsIHsgaW5wdXQ6IFNldDxzdHJpbmc+OyBvdXRwdXQ6IFNldDxzdHJpbmc+IH0+XG4gICk6IHZvaWQge1xuICAgIGlmIChub2RlSWQgPT09IEdSQVBIX1dPUktGTE9XX0JPVU5EQVJZKSB7XG4gICAgICBjb25zdCBwb3J0cyA9IGlzU291cmNlID8gaW5wdXRQb3J0cyA6IG91dHB1dFBvcnRzO1xuICAgICAgaWYgKCFwb3J0cy5oYXMocG9ydCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEdyYXBoUG9ydEVycm9yKFxuICAgICAgICAgIGBVbmtub3duICR7aXNTb3VyY2UgPyBcImlucHV0XCIgOiBcIm91dHB1dFwifSBwb3J0ICcke3BvcnR9JyBvbiB3b3JrZmxvdyBib3VuZGFyeWAsXG4gICAgICAgICAgeyBub2RlSWQsIHBvcnQsIGlzU291cmNlLCBhdmFpbGFibGU6IEFycmF5LmZyb20ocG9ydHMpIH1cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBub2RlUG9ydHMgPSBub2RlUG9ydE1hcC5nZXQobm9kZUlkKTtcbiAgICBpZiAoIW5vZGVQb3J0cykge1xuICAgICAgdGhyb3cgbmV3IEdyYXBoVG9wb2xvZ3lFcnJvcihgTm8gcG9ydCBtYXAgZm9yIG5vZGUgJyR7bm9kZUlkfSdgLCB7XG4gICAgICAgIG5vZGVJZCxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IHBvcnRzID0gaXNTb3VyY2UgPyBub2RlUG9ydHMub3V0cHV0IDogbm9kZVBvcnRzLmlucHV0O1xuICAgIGlmICghcG9ydHMuaGFzKHBvcnQpKSB7XG4gICAgICB0aHJvdyBuZXcgR3JhcGhQb3J0RXJyb3IoXG4gICAgICAgIGBVbmtub3duICR7aXNTb3VyY2UgPyBcIm91dHB1dFwiIDogXCJpbnB1dFwifSBwb3J0ICcke3BvcnR9JyBvbiBub2RlICcke25vZGVJZH0nYCxcbiAgICAgICAgeyBub2RlSWQsIHBvcnQsIGlzU291cmNlLCBhdmFpbGFibGU6IEFycmF5LmZyb20ocG9ydHMpIH1cbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkcyB0aGUgc2V0IG9mIGJvdW5kYXJ5IGFsaWFzZXMgZm9yIGEgd29ya2Zsb3cuXG4gICAqL1xuICBwcml2YXRlIGJvdW5kYXJ5QWxpYXNlcyh3b3JrZmxvdzogR3JhcGhXb3JrZmxvd0RlZmluaXRpb24pOiBTZXQ8c3RyaW5nPiB7XG4gICAgcmV0dXJuIG5ldyBTZXQoW1xuICAgICAgR1JBUEhfV09SS0ZMT1dfQk9VTkRBUlksXG4gICAgICBcIndvcmtmbG93XCIsXG4gICAgICBcImdyYXBoXCIsXG4gICAgICB3b3JrZmxvdy5uYW1lLFxuICAgIF0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4dHJhY3RzIHBvcnQgbmFtZXMgZnJvbSBhIGxpc3Qgb2YgcG9ydCBkZWZpbml0aW9ucy5cbiAgICovXG4gIHByaXZhdGUgcG9ydE5hbWVzKHBvcnRzOiBHcmFwaFBvcnREZWZpbml0aW9uW10gfCB1bmRlZmluZWQpOiBTZXQ8c3RyaW5nPiB7XG4gICAgcmV0dXJuIG5ldyBTZXQoKHBvcnRzID8/IFtdKS5tYXAoKHApID0+IHAubmFtZSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkcyBhIG1hcCBvZiBub2RlIGlkIC0+IHsgaW5wdXQgcG9ydHMsIG91dHB1dCBwb3J0cyB9LlxuICAgKi9cbiAgcHJpdmF0ZSBidWlsZE5vZGVQb3J0TWFwKFxuICAgIHdvcmtmbG93OiBHcmFwaFdvcmtmbG93RGVmaW5pdGlvblxuICApOiBNYXA8c3RyaW5nLCB7IGlucHV0OiBTZXQ8c3RyaW5nPjsgb3V0cHV0OiBTZXQ8c3RyaW5nPiB9PiB7XG4gICAgY29uc3QgbWFwID0gbmV3IE1hcDxzdHJpbmcsIHsgaW5wdXQ6IFNldDxzdHJpbmc+OyBvdXRwdXQ6IFNldDxzdHJpbmc+IH0+KCk7XG4gICAgZm9yIChjb25zdCBub2RlTWV0YSBvZiB3b3JrZmxvdy5ub2RlcyA/PyBbXSkge1xuICAgICAgY29uc3QgaW5wdXQgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICAgIGNvbnN0IG91dHB1dCA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgICAgY29uc3QgZGVmID0gdGhpcy5yZXNvbHZlTm9kZURlZmluaXRpb24obm9kZU1ldGEpO1xuICAgICAgaWYgKGRlZikge1xuICAgICAgICBmb3IgKGNvbnN0IHBvcnQgb2YgZGVmLnBvcnRzID8/IFtdKSB7XG4gICAgICAgICAgaWYgKHBvcnQuZGlyZWN0aW9uID09PSBcImlucHV0XCIpIGlucHV0LmFkZChwb3J0Lm5hbWUpO1xuICAgICAgICAgIGVsc2Ugb3V0cHV0LmFkZChwb3J0Lm5hbWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBtYXAuc2V0KG5vZGVNZXRhLmlkLCB7IGlucHV0LCBvdXRwdXQgfSk7XG4gICAgfVxuICAgIHJldHVybiBtYXA7XG4gIH1cblxuICAvKipcbiAgICogQXR0ZW1wdHMgdG8gcmVzb2x2ZSBhIG5vZGUncyBmdWxsIGRlZmluaXRpb24gZnJvbSBpdHMgbWV0YWRhdGEuXG4gICAqXG4gICAqIEFjY2VwdHMgZWl0aGVyIGEgZGVjb3JhdGVkIE1vZGVsIGNsYXNzL2luc3RhbmNlIChyZXNvbHZlZCB2aWFcbiAgICogYGdyYXBoRGVmaW5pdGlvbk9mYCkgb3IgYSBwbGFpbiBgR3JhcGhOb2RlRGVmaW5pdGlvbmAtc2hhcGVkIG9iamVjdFxuICAgKiAodXNlZnVsIGZvciBzZXJpYWxpemVkIHdvcmtmbG93cyB0aGF0IGlubGluZSBub2RlIGRlZmluaXRpb25zKS5cbiAgICovXG4gIHByaXZhdGUgcmVzb2x2ZU5vZGVEZWZpbml0aW9uKFxuICAgIG5vZGVNZXRhOiB7IG5vZGU/OiB1bmtub3duOyBraW5kPzogc3RyaW5nIH1cbiAgKTogeyBwb3J0czogeyBkaXJlY3Rpb246IHN0cmluZzsgbmFtZTogc3RyaW5nIH1bXSB9IHwgdW5kZWZpbmVkIHtcbiAgICBpZiAobm9kZU1ldGEubm9kZSkge1xuICAgICAgaWYgKHRoaXMuaXNSYXdEZWZpbml0aW9uKG5vZGVNZXRhLm5vZGUpKSB7XG4gICAgICAgIHJldHVybiBub2RlTWV0YS5ub2RlIGFzIHtcbiAgICAgICAgICBwb3J0czogeyBkaXJlY3Rpb246IHN0cmluZzsgbmFtZTogc3RyaW5nIH1bXTtcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGRlZiA9IGdyYXBoRGVmaW5pdGlvbk9mKG5vZGVNZXRhLm5vZGUgYXMgYW55KTtcbiAgICAgICAgcmV0dXJuIGRlZiBhcyBhbnk7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGB0cnVlYCB3aGVuIGEgdmFsdWUgbG9va3MgbGlrZSBhIHJhdyB7QGxpbmsgR3JhcGhOb2RlRGVmaW5pdGlvbn1cbiAgICogKGEgcGxhaW4gb2JqZWN0IHdpdGggYSBgcG9ydHNgIGFycmF5IGFuZCBhIGBuYW1lYCBzdHJpbmcpLlxuICAgKi9cbiAgcHJpdmF0ZSBpc1Jhd0RlZmluaXRpb24odmFsdWU6IHVua25vd24pOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgdHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmXG4gICAgICB2YWx1ZSAhPT0gbnVsbCAmJlxuICAgICAgIUFycmF5LmlzQXJyYXkodmFsdWUpICYmXG4gICAgICB0eXBlb2YgKHZhbHVlIGFzIHsgbmFtZT86IHVua25vd24gfSkubmFtZSA9PT0gXCJzdHJpbmdcIiAmJlxuICAgICAgQXJyYXkuaXNBcnJheSgodmFsdWUgYXMgeyBwb3J0cz86IHVua25vd24gfSkucG9ydHMpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgc3RhYmxlIGVkZ2UgaWQgZnJvbSBpdHMgZW5kcG9pbnRzIGFuZCBwb3J0cy5cbiAgICovXG4gIHByaXZhdGUgY3JlYXRlRWRnZUlkKFxuICAgIHNvdXJjZU5vZGVJZDogc3RyaW5nLFxuICAgIHNvdXJjZVBvcnQ6IHN0cmluZyxcbiAgICB0YXJnZXROb2RlSWQ6IHN0cmluZyxcbiAgICB0YXJnZXRQb3J0OiBzdHJpbmdcbiAgKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7c291cmNlTm9kZUlkfToke3NvdXJjZVBvcnR9LT4ke3RhcmdldE5vZGVJZH06JHt0YXJnZXRQb3J0fWA7XG4gIH1cbn1cbiJdfQ==
@@ -1,52 +0,0 @@
1
- /**
2
- * Topology utility for traversing the execution plan's edges.
3
- */
4
- export class GraphTopology {
5
- /**
6
- * Returns the set of upstream node ids reachable from `nodeId` by following
7
- * incoming edges. The workflow boundary node is excluded.
8
- */
9
- static upstreamNodes(nodeId, incomingByNode, includeBoundary = false) {
10
- const visited = new Set();
11
- const stack = [nodeId];
12
- while (stack.length) {
13
- const current = stack.pop();
14
- const incoming = incomingByNode.get(current) ?? [];
15
- for (const edge of incoming) {
16
- if (!includeBoundary && this.isBoundary(edge.sourceNodeId))
17
- continue;
18
- if (!visited.has(edge.sourceNodeId)) {
19
- visited.add(edge.sourceNodeId);
20
- stack.push(edge.sourceNodeId);
21
- }
22
- }
23
- }
24
- return visited;
25
- }
26
- /**
27
- * Returns the set of downstream node ids reachable from `nodeId` by following
28
- * outgoing edges. The workflow boundary node is excluded.
29
- */
30
- static downstreamNodes(nodeId, outgoingByNode, includeBoundary = false) {
31
- const visited = new Set();
32
- const stack = [nodeId];
33
- while (stack.length) {
34
- const current = stack.pop();
35
- const outgoing = outgoingByNode.get(current) ?? [];
36
- for (const edge of outgoing) {
37
- if (!includeBoundary && this.isBoundary(edge.targetNodeId))
38
- continue;
39
- if (!visited.has(edge.targetNodeId)) {
40
- visited.add(edge.targetNodeId);
41
- stack.push(edge.targetNodeId);
42
- }
43
- }
44
- }
45
- return visited;
46
- }
47
- /** Returns whether a node id is the workflow boundary. */
48
- static isBoundary(nodeId) {
49
- return nodeId === "$workflow";
50
- }
51
- }
52
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR3JhcGhUb3BvbG9neS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9ncmFwaC9wbGFubmluZy9HcmFwaFRvcG9sb2d5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQU9BOztHQUVHO0FBQ0gsTUFBTSxPQUFPLGFBQWE7SUFDeEI7OztPQUdHO0lBQ0gsTUFBTSxDQUFDLGFBQWEsQ0FDbEIsTUFBYyxFQUNkLGNBQXFELEVBQ3JELGVBQWUsR0FBRyxLQUFLO1FBRXZCLE1BQU0sT0FBTyxHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7UUFDbEMsTUFBTSxLQUFLLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN2QixPQUFPLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNwQixNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsR0FBRyxFQUFHLENBQUM7WUFDN0IsTUFBTSxRQUFRLEdBQUcsY0FBYyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDbkQsS0FBSyxNQUFNLElBQUksSUFBSSxRQUFRLEVBQUUsQ0FBQztnQkFDNUIsSUFBSSxDQUFDLGVBQWUsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUM7b0JBQUUsU0FBUztnQkFDckUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUM7b0JBQ3BDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO29CQUMvQixLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztnQkFDaEMsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO1FBQ0QsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUVEOzs7T0FHRztJQUNILE1BQU0sQ0FBQyxlQUFlLENBQ3BCLE1BQWMsRUFDZCxjQUFxRCxFQUNyRCxlQUFlLEdBQUcsS0FBSztRQUV2QixNQUFNLE9BQU8sR0FBRyxJQUFJLEdBQUcsRUFBVSxDQUFDO1FBQ2xDLE1BQU0sS0FBSyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDdkIsT0FBTyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDcEIsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLEdBQUcsRUFBRyxDQUFDO1lBQzdCLE1BQU0sUUFBUSxHQUFHLGNBQWMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ25ELEtBQUssTUFBTSxJQUFJLElBQUksUUFBUSxFQUFFLENBQUM7Z0JBQzVCLElBQUksQ0FBQyxlQUFlLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDO29CQUFFLFNBQVM7Z0JBQ3JFLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDO29CQUNwQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztvQkFDL0IsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7Z0JBQ2hDLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztRQUNELE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7SUFFRCwwREFBMEQ7SUFDMUQsTUFBTSxDQUFDLFVBQVUsQ0FBQyxNQUFjO1FBQzlCLE9BQU8sTUFBTSxLQUFLLFdBQVcsQ0FBQztJQUNoQyxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBtb2R1bGUgaW50ZWdyYXRpb25zL2dyYXBoL3BsYW5uaW5nL0dyYXBoVG9wb2xvZ3lcbiAqIEBzdW1tYXJ5IFV0aWxpdHkgaGVscGVycyBmb3IgZ3JhcGggdG9wb2xvZ3kgYW5hbHlzaXMuXG4gKiBAZGVzY3JpcHRpb24gUHJvdmlkZXMgaGVscGVyIGZ1bmN0aW9ucyB1c2VkIGJ5IHRoZSBwbGFubmVyIGFuZCBwaW5uaW5nIGRlcGVuZGVuY3kgcmVzb2x2ZXIuXG4gKi9cbmltcG9ydCB0eXBlIHsgR3JhcGhFeGVjdXRpb25QbGFuRWRnZSB9IGZyb20gXCIuL0dyYXBoRXhlY3V0aW9uUGxhbkVkZ2VcIjtcblxuLyoqXG4gKiBUb3BvbG9neSB1dGlsaXR5IGZvciB0cmF2ZXJzaW5nIHRoZSBleGVjdXRpb24gcGxhbidzIGVkZ2VzLlxuICovXG5leHBvcnQgY2xhc3MgR3JhcGhUb3BvbG9neSB7XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBzZXQgb2YgdXBzdHJlYW0gbm9kZSBpZHMgcmVhY2hhYmxlIGZyb20gYG5vZGVJZGAgYnkgZm9sbG93aW5nXG4gICAqIGluY29taW5nIGVkZ2VzLiBUaGUgd29ya2Zsb3cgYm91bmRhcnkgbm9kZSBpcyBleGNsdWRlZC5cbiAgICovXG4gIHN0YXRpYyB1cHN0cmVhbU5vZGVzKFxuICAgIG5vZGVJZDogc3RyaW5nLFxuICAgIGluY29taW5nQnlOb2RlOiBNYXA8c3RyaW5nLCBHcmFwaEV4ZWN1dGlvblBsYW5FZGdlW10+LFxuICAgIGluY2x1ZGVCb3VuZGFyeSA9IGZhbHNlXG4gICk6IFNldDxzdHJpbmc+IHtcbiAgICBjb25zdCB2aXNpdGVkID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgY29uc3Qgc3RhY2sgPSBbbm9kZUlkXTtcbiAgICB3aGlsZSAoc3RhY2subGVuZ3RoKSB7XG4gICAgICBjb25zdCBjdXJyZW50ID0gc3RhY2sucG9wKCkhO1xuICAgICAgY29uc3QgaW5jb21pbmcgPSBpbmNvbWluZ0J5Tm9kZS5nZXQoY3VycmVudCkgPz8gW107XG4gICAgICBmb3IgKGNvbnN0IGVkZ2Ugb2YgaW5jb21pbmcpIHtcbiAgICAgICAgaWYgKCFpbmNsdWRlQm91bmRhcnkgJiYgdGhpcy5pc0JvdW5kYXJ5KGVkZ2Uuc291cmNlTm9kZUlkKSkgY29udGludWU7XG4gICAgICAgIGlmICghdmlzaXRlZC5oYXMoZWRnZS5zb3VyY2VOb2RlSWQpKSB7XG4gICAgICAgICAgdmlzaXRlZC5hZGQoZWRnZS5zb3VyY2VOb2RlSWQpO1xuICAgICAgICAgIHN0YWNrLnB1c2goZWRnZS5zb3VyY2VOb2RlSWQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB2aXNpdGVkO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHNldCBvZiBkb3duc3RyZWFtIG5vZGUgaWRzIHJlYWNoYWJsZSBmcm9tIGBub2RlSWRgIGJ5IGZvbGxvd2luZ1xuICAgKiBvdXRnb2luZyBlZGdlcy4gVGhlIHdvcmtmbG93IGJvdW5kYXJ5IG5vZGUgaXMgZXhjbHVkZWQuXG4gICAqL1xuICBzdGF0aWMgZG93bnN0cmVhbU5vZGVzKFxuICAgIG5vZGVJZDogc3RyaW5nLFxuICAgIG91dGdvaW5nQnlOb2RlOiBNYXA8c3RyaW5nLCBHcmFwaEV4ZWN1dGlvblBsYW5FZGdlW10+LFxuICAgIGluY2x1ZGVCb3VuZGFyeSA9IGZhbHNlXG4gICk6IFNldDxzdHJpbmc+IHtcbiAgICBjb25zdCB2aXNpdGVkID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgY29uc3Qgc3RhY2sgPSBbbm9kZUlkXTtcbiAgICB3aGlsZSAoc3RhY2subGVuZ3RoKSB7XG4gICAgICBjb25zdCBjdXJyZW50ID0gc3RhY2sucG9wKCkhO1xuICAgICAgY29uc3Qgb3V0Z29pbmcgPSBvdXRnb2luZ0J5Tm9kZS5nZXQoY3VycmVudCkgPz8gW107XG4gICAgICBmb3IgKGNvbnN0IGVkZ2Ugb2Ygb3V0Z29pbmcpIHtcbiAgICAgICAgaWYgKCFpbmNsdWRlQm91bmRhcnkgJiYgdGhpcy5pc0JvdW5kYXJ5KGVkZ2UudGFyZ2V0Tm9kZUlkKSkgY29udGludWU7XG4gICAgICAgIGlmICghdmlzaXRlZC5oYXMoZWRnZS50YXJnZXROb2RlSWQpKSB7XG4gICAgICAgICAgdmlzaXRlZC5hZGQoZWRnZS50YXJnZXROb2RlSWQpO1xuICAgICAgICAgIHN0YWNrLnB1c2goZWRnZS50YXJnZXROb2RlSWQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB2aXNpdGVkO1xuICB9XG5cbiAgLyoqIFJldHVybnMgd2hldGhlciBhIG5vZGUgaWQgaXMgdGhlIHdvcmtmbG93IGJvdW5kYXJ5LiAqL1xuICBzdGF0aWMgaXNCb3VuZGFyeShub2RlSWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBub2RlSWQgPT09IFwiJHdvcmtmbG93XCI7XG4gIH1cbn1cbiJdfQ==
@@ -1,13 +0,0 @@
1
- /**
2
- * @module integrations/graph/planning
3
- * @summary Graph execution planning.
4
- * @description Re-exports the execution plan types, relation resolver, and topological planner.
5
- */
6
- export * from "./GraphExecutionPlanNode.js";
7
- export * from "./GraphExecutionPlanEdge.js";
8
- export * from "./GraphExecutionPlanLayer.js";
9
- export * from "./GraphExecutionPlan.js";
10
- export * from "./GraphRelationResolver.js";
11
- export * from "./GraphExecutionPlanner.js";
12
- export * from "./GraphTopology.js";
13
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZ3JhcGgvcGxhbm5pbmcvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7R0FJRztBQUNILDRDQUF5QztBQUN6Qyw0Q0FBeUM7QUFDekMsNkNBQTBDO0FBQzFDLHdDQUFxQztBQUNyQywyQ0FBd0M7QUFDeEMsMkNBQXdDO0FBQ3hDLG1DQUFnQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQG1vZHVsZSBpbnRlZ3JhdGlvbnMvZ3JhcGgvcGxhbm5pbmdcbiAqIEBzdW1tYXJ5IEdyYXBoIGV4ZWN1dGlvbiBwbGFubmluZy5cbiAqIEBkZXNjcmlwdGlvbiBSZS1leHBvcnRzIHRoZSBleGVjdXRpb24gcGxhbiB0eXBlcywgcmVsYXRpb24gcmVzb2x2ZXIsIGFuZCB0b3BvbG9naWNhbCBwbGFubmVyLlxuICovXG5leHBvcnQgKiBmcm9tIFwiLi9HcmFwaEV4ZWN1dGlvblBsYW5Ob2RlXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9HcmFwaEV4ZWN1dGlvblBsYW5FZGdlXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9HcmFwaEV4ZWN1dGlvblBsYW5MYXllclwiO1xuZXhwb3J0ICogZnJvbSBcIi4vR3JhcGhFeGVjdXRpb25QbGFuXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9HcmFwaFJlbGF0aW9uUmVzb2x2ZXJcIjtcbmV4cG9ydCAqIGZyb20gXCIuL0dyYXBoRXhlY3V0aW9uUGxhbm5lclwiO1xuZXhwb3J0ICogZnJvbSBcIi4vR3JhcGhUb3BvbG9neVwiO1xuIl19
@@ -1,39 +0,0 @@
1
- import { GraphExecutionError } from "./../errors/GraphExecutionError.js";
2
- /**
3
- * Registry that maps node `kind` strings to {@link GraphNodeExecutor}
4
- * instances.
5
- */
6
- export class GraphNodeExecutorRegistry {
7
- constructor() {
8
- this.executors = new Map();
9
- }
10
- /** Registers an executor for the given node kind. */
11
- register(kind, executor) {
12
- if (!kind)
13
- throw new GraphExecutionError("Graph executor kind is required");
14
- this.executors.set(kind, executor);
15
- return this;
16
- }
17
- /** Removes the executor for the given node kind. */
18
- unregister(kind) {
19
- this.executors.delete(kind);
20
- return this;
21
- }
22
- /** Returns whether an executor is registered for the given kind. */
23
- has(kind) {
24
- return this.executors.has(kind);
25
- }
26
- /**
27
- * Resolves the executor for the given node kind.
28
- *
29
- * @throws {GraphExecutionError} when no executor is registered for `kind`.
30
- */
31
- resolve(kind) {
32
- const executor = this.executors.get(kind);
33
- if (!executor) {
34
- throw new GraphExecutionError(`No graph executor registered for kind '${kind}'`, "GRAPH_EXECUTOR_NOT_FOUND", { kind });
35
- }
36
- return executor;
37
- }
38
- }
39
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR3JhcGhOb2RlRXhlY3V0b3JSZWdpc3RyeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9ncmFwaC9yZWdpc3RyeS9HcmFwaE5vZGVFeGVjdXRvclJlZ2lzdHJ5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQU1BLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSwyQ0FBc0M7QUFFcEU7OztHQUdHO0FBQ0gsTUFBTSxPQUFPLHlCQUF5QjtJQUF0QztRQUNtQixjQUFTLEdBQUcsSUFBSSxHQUFHLEVBQTZCLENBQUM7SUFvQ3BFLENBQUM7SUFsQ0MscURBQXFEO0lBQ3JELFFBQVEsQ0FBQyxJQUFZLEVBQUUsUUFBMkI7UUFDaEQsSUFBSSxDQUFDLElBQUk7WUFBRSxNQUFNLElBQUksbUJBQW1CLENBQUMsaUNBQWlDLENBQUMsQ0FBQztRQUM1RSxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDbkMsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsb0RBQW9EO0lBQ3BELFVBQVUsQ0FBQyxJQUFZO1FBQ3JCLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzVCLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELG9FQUFvRTtJQUNwRSxHQUFHLENBQUMsSUFBWTtRQUNkLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxPQUFPLENBQUMsSUFBWTtRQUNsQixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMxQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDZCxNQUFNLElBQUksbUJBQW1CLENBQzNCLDBDQUEwQyxJQUFJLEdBQUcsRUFDakQsMEJBQTBCLEVBQzFCLEVBQUUsSUFBSSxFQUFFLENBQ1QsQ0FBQztRQUNKLENBQUM7UUFDRCxPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBtb2R1bGUgaW50ZWdyYXRpb25zL2dyYXBoL3JlZ2lzdHJ5L0dyYXBoTm9kZUV4ZWN1dG9yUmVnaXN0cnlcbiAqIEBzdW1tYXJ5IFJlZ2lzdHJ5IGZvciBncmFwaCBub2RlIGV4ZWN1dG9ycy5cbiAqIEBkZXNjcmlwdGlvbiBNYXBzIG5vZGUga2luZHMgdG8gdGhlaXIgZXhlY3V0b3IgaW1wbGVtZW50YXRpb25zLiBUaGUgZW5naW5lIHJlc29sdmVzIGV4ZWN1dG9ycyBieSBub2RlIGtpbmQgYXQgZXhlY3V0aW9uIHRpbWUuXG4gKi9cbmltcG9ydCB0eXBlIHsgR3JhcGhOb2RlRXhlY3V0b3IgfSBmcm9tIFwiLi4vZXhlY3V0aW9uL0dyYXBoTm9kZUV4ZWN1dG9yXCI7XG5pbXBvcnQgeyBHcmFwaEV4ZWN1dGlvbkVycm9yIH0gZnJvbSBcIi4uL2Vycm9ycy9HcmFwaEV4ZWN1dGlvbkVycm9yXCI7XG5cbi8qKlxuICogUmVnaXN0cnkgdGhhdCBtYXBzIG5vZGUgYGtpbmRgIHN0cmluZ3MgdG8ge0BsaW5rIEdyYXBoTm9kZUV4ZWN1dG9yfVxuICogaW5zdGFuY2VzLlxuICovXG5leHBvcnQgY2xhc3MgR3JhcGhOb2RlRXhlY3V0b3JSZWdpc3RyeSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgZXhlY3V0b3JzID0gbmV3IE1hcDxzdHJpbmcsIEdyYXBoTm9kZUV4ZWN1dG9yPigpO1xuXG4gIC8qKiBSZWdpc3RlcnMgYW4gZXhlY3V0b3IgZm9yIHRoZSBnaXZlbiBub2RlIGtpbmQuICovXG4gIHJlZ2lzdGVyKGtpbmQ6IHN0cmluZywgZXhlY3V0b3I6IEdyYXBoTm9kZUV4ZWN1dG9yKTogdGhpcyB7XG4gICAgaWYgKCFraW5kKSB0aHJvdyBuZXcgR3JhcGhFeGVjdXRpb25FcnJvcihcIkdyYXBoIGV4ZWN1dG9yIGtpbmQgaXMgcmVxdWlyZWRcIik7XG4gICAgdGhpcy5leGVjdXRvcnMuc2V0KGtpbmQsIGV4ZWN1dG9yKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKiBSZW1vdmVzIHRoZSBleGVjdXRvciBmb3IgdGhlIGdpdmVuIG5vZGUga2luZC4gKi9cbiAgdW5yZWdpc3RlcihraW5kOiBzdHJpbmcpOiB0aGlzIHtcbiAgICB0aGlzLmV4ZWN1dG9ycy5kZWxldGUoa2luZCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKiogUmV0dXJucyB3aGV0aGVyIGFuIGV4ZWN1dG9yIGlzIHJlZ2lzdGVyZWQgZm9yIHRoZSBnaXZlbiBraW5kLiAqL1xuICBoYXMoa2luZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZXhlY3V0b3JzLmhhcyhraW5kKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNvbHZlcyB0aGUgZXhlY3V0b3IgZm9yIHRoZSBnaXZlbiBub2RlIGtpbmQuXG4gICAqXG4gICAqIEB0aHJvd3Mge0dyYXBoRXhlY3V0aW9uRXJyb3J9IHdoZW4gbm8gZXhlY3V0b3IgaXMgcmVnaXN0ZXJlZCBmb3IgYGtpbmRgLlxuICAgKi9cbiAgcmVzb2x2ZShraW5kOiBzdHJpbmcpOiBHcmFwaE5vZGVFeGVjdXRvciB7XG4gICAgY29uc3QgZXhlY3V0b3IgPSB0aGlzLmV4ZWN1dG9ycy5nZXQoa2luZCk7XG4gICAgaWYgKCFleGVjdXRvcikge1xuICAgICAgdGhyb3cgbmV3IEdyYXBoRXhlY3V0aW9uRXJyb3IoXG4gICAgICAgIGBObyBncmFwaCBleGVjdXRvciByZWdpc3RlcmVkIGZvciBraW5kICcke2tpbmR9J2AsXG4gICAgICAgIFwiR1JBUEhfRVhFQ1VUT1JfTk9UX0ZPVU5EXCIsXG4gICAgICAgIHsga2luZCB9XG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gZXhlY3V0b3I7XG4gIH1cbn1cbiJdfQ==
@@ -1,22 +0,0 @@
1
- /**
2
- * Resolver that wraps a {@link GraphNodeExecutorRegistry} and optionally
3
- * falls back to a default executor when a kind is not found.
4
- */
5
- export class GraphNodeExecutorResolver {
6
- constructor(registry, defaultExecutor) {
7
- this.registry = registry;
8
- this.defaultExecutor = defaultExecutor;
9
- }
10
- /**
11
- * Resolves the executor for `kind`, falling back to the default executor
12
- * when provided.
13
- */
14
- resolve(kind) {
15
- if (this.registry.has(kind))
16
- return this.registry.resolve(kind);
17
- if (this.defaultExecutor)
18
- return this.defaultExecutor;
19
- return this.registry.resolve(kind);
20
- }
21
- }
22
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR3JhcGhOb2RlRXhlY3V0b3JSZXNvbHZlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9ncmFwaC9yZWdpc3RyeS9HcmFwaE5vZGVFeGVjdXRvclJlc29sdmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVFBOzs7R0FHRztBQUNILE1BQU0sT0FBTyx5QkFBeUI7SUFHcEMsWUFDbUIsUUFBbUMsRUFDcEQsZUFBbUM7UUFEbEIsYUFBUSxHQUFSLFFBQVEsQ0FBMkI7UUFHcEQsSUFBSSxDQUFDLGVBQWUsR0FBRyxlQUFlLENBQUM7SUFDekMsQ0FBQztJQUVEOzs7T0FHRztJQUNILE9BQU8sQ0FBQyxJQUFZO1FBQ2xCLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDO1lBQUUsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNoRSxJQUFJLElBQUksQ0FBQyxlQUFlO1lBQUUsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDO1FBQ3RELE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDckMsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbW9kdWxlIGludGVncmF0aW9ucy9ncmFwaC9yZWdpc3RyeS9HcmFwaE5vZGVFeGVjdXRvclJlc29sdmVyXG4gKiBAc3VtbWFyeSBVdGlsaXR5IGZvciByZXNvbHZpbmcgZXhlY3V0b3JzIGZyb20gYSByZWdpc3RyeSB3aXRoIGZhbGxiYWNrLlxuICogQGRlc2NyaXB0aW9uIFByb3ZpZGVzIGEgaGVscGVyIHRoYXQgYXR0ZW1wdHMgdG8gcmVzb2x2ZSBhbiBleGVjdXRvciBieSBraW5kLCBmYWxsaW5nIGJhY2sgdG8gYSBkZWZhdWx0IGV4ZWN1dG9yIHdoZW4gdGhlIGtpbmQgaXMgbm90IHJlZ2lzdGVyZWQuXG4gKi9cbmltcG9ydCB0eXBlIHsgR3JhcGhOb2RlRXhlY3V0b3IgfSBmcm9tIFwiLi4vZXhlY3V0aW9uL0dyYXBoTm9kZUV4ZWN1dG9yXCI7XG5pbXBvcnQgdHlwZSB7IEdyYXBoTm9kZUV4ZWN1dG9yUmVnaXN0cnkgfSBmcm9tIFwiLi9HcmFwaE5vZGVFeGVjdXRvclJlZ2lzdHJ5XCI7XG5cbi8qKlxuICogUmVzb2x2ZXIgdGhhdCB3cmFwcyBhIHtAbGluayBHcmFwaE5vZGVFeGVjdXRvclJlZ2lzdHJ5fSBhbmQgb3B0aW9uYWxseVxuICogZmFsbHMgYmFjayB0byBhIGRlZmF1bHQgZXhlY3V0b3Igd2hlbiBhIGtpbmQgaXMgbm90IGZvdW5kLlxuICovXG5leHBvcnQgY2xhc3MgR3JhcGhOb2RlRXhlY3V0b3JSZXNvbHZlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgZGVmYXVsdEV4ZWN1dG9yPzogR3JhcGhOb2RlRXhlY3V0b3I7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSByZWdpc3RyeTogR3JhcGhOb2RlRXhlY3V0b3JSZWdpc3RyeSxcbiAgICBkZWZhdWx0RXhlY3V0b3I/OiBHcmFwaE5vZGVFeGVjdXRvclxuICApIHtcbiAgICB0aGlzLmRlZmF1bHRFeGVjdXRvciA9IGRlZmF1bHRFeGVjdXRvcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNvbHZlcyB0aGUgZXhlY3V0b3IgZm9yIGBraW5kYCwgZmFsbGluZyBiYWNrIHRvIHRoZSBkZWZhdWx0IGV4ZWN1dG9yXG4gICAqIHdoZW4gcHJvdmlkZWQuXG4gICAqL1xuICByZXNvbHZlKGtpbmQ6IHN0cmluZyk6IEdyYXBoTm9kZUV4ZWN1dG9yIHtcbiAgICBpZiAodGhpcy5yZWdpc3RyeS5oYXMoa2luZCkpIHJldHVybiB0aGlzLnJlZ2lzdHJ5LnJlc29sdmUoa2luZCk7XG4gICAgaWYgKHRoaXMuZGVmYXVsdEV4ZWN1dG9yKSByZXR1cm4gdGhpcy5kZWZhdWx0RXhlY3V0b3I7XG4gICAgcmV0dXJuIHRoaXMucmVnaXN0cnkucmVzb2x2ZShraW5kKTtcbiAgfVxufVxuIl19
@@ -1,8 +0,0 @@
1
- /**
2
- * @module integrations/graph/registry
3
- * @summary Graph node executor registry and resolver.
4
- * @description Re-exports the executor registry and resolver.
5
- */
6
- export * from "./GraphNodeExecutorRegistry.js";
7
- export * from "./GraphNodeExecutorResolver.js";
8
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZ3JhcGgvcmVnaXN0cnkvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7R0FJRztBQUNILCtDQUE0QztBQUM1QywrQ0FBNEMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBtb2R1bGUgaW50ZWdyYXRpb25zL2dyYXBoL3JlZ2lzdHJ5XG4gKiBAc3VtbWFyeSBHcmFwaCBub2RlIGV4ZWN1dG9yIHJlZ2lzdHJ5IGFuZCByZXNvbHZlci5cbiAqIEBkZXNjcmlwdGlvbiBSZS1leHBvcnRzIHRoZSBleGVjdXRvciByZWdpc3RyeSBhbmQgcmVzb2x2ZXIuXG4gKi9cbmV4cG9ydCAqIGZyb20gXCIuL0dyYXBoTm9kZUV4ZWN1dG9yUmVnaXN0cnlcIjtcbmV4cG9ydCAqIGZyb20gXCIuL0dyYXBoTm9kZUV4ZWN1dG9yUmVzb2x2ZXJcIjtcbiJdfQ==
@@ -1,48 +0,0 @@
1
- /**
2
- * @module integrations/graph/snapshots/GraphExecutionSnapshotMapper
3
- * @summary Maps execution results to snapshot patches.
4
- * @description Produces a GraphExecutionSnapshotPatch consumable by `@decaf-ts/ui-decorators/graph` snapshots, rather than replacing the snapshot system.
5
- */
6
- import { GraphExecutionStatus } from "./../constants.js";
7
- /**
8
- * Maps a {@link GraphExecutionResult} to a {@link GraphExecutionSnapshotPatch}.
9
- */
10
- export class GraphExecutionSnapshotMapper {
11
- /**
12
- * Creates a snapshot patch from an execution result.
13
- */
14
- map(result) {
15
- const nodes = {};
16
- for (const [id, nodeResult] of Object.entries(result.nodeResults)) {
17
- nodes[id] = {
18
- status: nodeResult.status,
19
- startedAt: nodeResult.startedAt?.toISOString(),
20
- finishedAt: nodeResult.finishedAt?.toISOString(),
21
- error: nodeResult.error,
22
- outputs: nodeResult.outputs,
23
- fromCache: nodeResult.fromCache,
24
- pinned: nodeResult.pinned,
25
- };
26
- }
27
- const edges = {};
28
- for (const event of result.events) {
29
- if (event.edgeId && event.type === "edge.valueRouted") {
30
- edges[event.edgeId] = {
31
- status: GraphExecutionStatus.SUCCEEDED,
32
- lastValue: event.payload?.value,
33
- updatedAt: event.timestamp.toISOString(),
34
- };
35
- }
36
- }
37
- const events = [...result.events];
38
- return {
39
- runId: result.runId,
40
- status: result.status,
41
- nodes,
42
- edges,
43
- outputs: result.outputs,
44
- events,
45
- };
46
- }
47
- }
48
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR3JhcGhFeGVjdXRpb25TbmFwc2hvdE1hcHBlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9ncmFwaC9zbmFwc2hvdHMvR3JhcGhFeGVjdXRpb25TbmFwc2hvdE1hcHBlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7OztHQUlHO0FBQ0gsT0FBTyxFQUFFLG9CQUFvQixFQUFFLDBCQUFxQjtBQU9wRDs7R0FFRztBQUNILE1BQU0sT0FBTyw0QkFBNEI7SUFDdkM7O09BRUc7SUFDSCxHQUFHLENBQUMsTUFBNEI7UUFDOUIsTUFBTSxLQUFLLEdBQXlDLEVBQUUsQ0FBQztRQUN2RCxLQUFLLE1BQU0sQ0FBQyxFQUFFLEVBQUUsVUFBVSxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQztZQUNsRSxLQUFLLENBQUMsRUFBRSxDQUFDLEdBQUc7Z0JBQ1YsTUFBTSxFQUFFLFVBQVUsQ0FBQyxNQUFNO2dCQUN6QixTQUFTLEVBQUUsVUFBVSxDQUFDLFNBQVMsRUFBRSxXQUFXLEVBQUU7Z0JBQzlDLFVBQVUsRUFBRSxVQUFVLENBQUMsVUFBVSxFQUFFLFdBQVcsRUFBRTtnQkFDaEQsS0FBSyxFQUFFLFVBQVUsQ0FBQyxLQUFLO2dCQUN2QixPQUFPLEVBQUUsVUFBVSxDQUFDLE9BQU87Z0JBQzNCLFNBQVMsRUFBRSxVQUFVLENBQUMsU0FBUztnQkFDL0IsTUFBTSxFQUFFLFVBQVUsQ0FBQyxNQUFNO2FBQzFCLENBQUM7UUFDSixDQUFDO1FBRUQsTUFBTSxLQUFLLEdBQXlDLEVBQUUsQ0FBQztRQUN2RCxLQUFLLE1BQU0sS0FBSyxJQUFJLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNsQyxJQUFJLEtBQUssQ0FBQyxNQUFNLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxrQkFBa0IsRUFBRSxDQUFDO2dCQUN0RCxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxHQUFHO29CQUNwQixNQUFNLEVBQUUsb0JBQW9CLENBQUMsU0FBUztvQkFDdEMsU0FBUyxFQUFHLEtBQUssQ0FBQyxPQUFlLEVBQUUsS0FBSztvQkFDeEMsU0FBUyxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUFFO2lCQUN6QyxDQUFDO1lBQ0osQ0FBQztRQUNILENBQUM7UUFFRCxNQUFNLE1BQU0sR0FBMEIsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUV6RCxPQUFPO1lBQ0wsS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLO1lBQ25CLE1BQU0sRUFBRSxNQUFNLENBQUMsTUFBTTtZQUNyQixLQUFLO1lBQ0wsS0FBSztZQUNMLE9BQU8sRUFBRSxNQUFNLENBQUMsT0FBTztZQUN2QixNQUFNO1NBQ1AsQ0FBQztJQUNKLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQG1vZHVsZSBpbnRlZ3JhdGlvbnMvZ3JhcGgvc25hcHNob3RzL0dyYXBoRXhlY3V0aW9uU25hcHNob3RNYXBwZXJcbiAqIEBzdW1tYXJ5IE1hcHMgZXhlY3V0aW9uIHJlc3VsdHMgdG8gc25hcHNob3QgcGF0Y2hlcy5cbiAqIEBkZXNjcmlwdGlvbiBQcm9kdWNlcyBhIEdyYXBoRXhlY3V0aW9uU25hcHNob3RQYXRjaCBjb25zdW1hYmxlIGJ5IGBAZGVjYWYtdHMvdWktZGVjb3JhdG9ycy9ncmFwaGAgc25hcHNob3RzLCByYXRoZXIgdGhhbiByZXBsYWNpbmcgdGhlIHNuYXBzaG90IHN5c3RlbS5cbiAqL1xuaW1wb3J0IHsgR3JhcGhFeGVjdXRpb25TdGF0dXMgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgdHlwZSB7XG4gIEdyYXBoRXhlY3V0aW9uRXZlbnQsXG4gIEdyYXBoRXhlY3V0aW9uUmVzdWx0LFxuICBHcmFwaEV4ZWN1dGlvblNuYXBzaG90UGF0Y2gsXG59IGZyb20gXCIuLi90eXBlc1wiO1xuXG4vKipcbiAqIE1hcHMgYSB7QGxpbmsgR3JhcGhFeGVjdXRpb25SZXN1bHR9IHRvIGEge0BsaW5rIEdyYXBoRXhlY3V0aW9uU25hcHNob3RQYXRjaH0uXG4gKi9cbmV4cG9ydCBjbGFzcyBHcmFwaEV4ZWN1dGlvblNuYXBzaG90TWFwcGVyIHtcbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBzbmFwc2hvdCBwYXRjaCBmcm9tIGFuIGV4ZWN1dGlvbiByZXN1bHQuXG4gICAqL1xuICBtYXAocmVzdWx0OiBHcmFwaEV4ZWN1dGlvblJlc3VsdCk6IEdyYXBoRXhlY3V0aW9uU25hcHNob3RQYXRjaCB7XG4gICAgY29uc3Qgbm9kZXM6IEdyYXBoRXhlY3V0aW9uU25hcHNob3RQYXRjaFtcIm5vZGVzXCJdID0ge307XG4gICAgZm9yIChjb25zdCBbaWQsIG5vZGVSZXN1bHRdIG9mIE9iamVjdC5lbnRyaWVzKHJlc3VsdC5ub2RlUmVzdWx0cykpIHtcbiAgICAgIG5vZGVzW2lkXSA9IHtcbiAgICAgICAgc3RhdHVzOiBub2RlUmVzdWx0LnN0YXR1cyxcbiAgICAgICAgc3RhcnRlZEF0OiBub2RlUmVzdWx0LnN0YXJ0ZWRBdD8udG9JU09TdHJpbmcoKSxcbiAgICAgICAgZmluaXNoZWRBdDogbm9kZVJlc3VsdC5maW5pc2hlZEF0Py50b0lTT1N0cmluZygpLFxuICAgICAgICBlcnJvcjogbm9kZVJlc3VsdC5lcnJvcixcbiAgICAgICAgb3V0cHV0czogbm9kZVJlc3VsdC5vdXRwdXRzLFxuICAgICAgICBmcm9tQ2FjaGU6IG5vZGVSZXN1bHQuZnJvbUNhY2hlLFxuICAgICAgICBwaW5uZWQ6IG5vZGVSZXN1bHQucGlubmVkLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBjb25zdCBlZGdlczogR3JhcGhFeGVjdXRpb25TbmFwc2hvdFBhdGNoW1wiZWRnZXNcIl0gPSB7fTtcbiAgICBmb3IgKGNvbnN0IGV2ZW50IG9mIHJlc3VsdC5ldmVudHMpIHtcbiAgICAgIGlmIChldmVudC5lZGdlSWQgJiYgZXZlbnQudHlwZSA9PT0gXCJlZGdlLnZhbHVlUm91dGVkXCIpIHtcbiAgICAgICAgZWRnZXNbZXZlbnQuZWRnZUlkXSA9IHtcbiAgICAgICAgICBzdGF0dXM6IEdyYXBoRXhlY3V0aW9uU3RhdHVzLlNVQ0NFRURFRCxcbiAgICAgICAgICBsYXN0VmFsdWU6IChldmVudC5wYXlsb2FkIGFzIGFueSk/LnZhbHVlLFxuICAgICAgICAgIHVwZGF0ZWRBdDogZXZlbnQudGltZXN0YW1wLnRvSVNPU3RyaW5nKCksXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgZXZlbnRzOiBHcmFwaEV4ZWN1dGlvbkV2ZW50W10gPSBbLi4ucmVzdWx0LmV2ZW50c107XG5cbiAgICByZXR1cm4ge1xuICAgICAgcnVuSWQ6IHJlc3VsdC5ydW5JZCxcbiAgICAgIHN0YXR1czogcmVzdWx0LnN0YXR1cyxcbiAgICAgIG5vZGVzLFxuICAgICAgZWRnZXMsXG4gICAgICBvdXRwdXRzOiByZXN1bHQub3V0cHV0cyxcbiAgICAgIGV2ZW50cyxcbiAgICB9O1xuICB9XG59XG4iXX0=