@n8n/workflow-sdk 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (322) hide show
  1. package/LICENSE.md +88 -0
  2. package/README.md +30 -0
  3. package/dist/ast-interpreter/errors.d.ts +19 -0
  4. package/dist/ast-interpreter/errors.js +64 -0
  5. package/dist/ast-interpreter/errors.js.map +1 -0
  6. package/dist/ast-interpreter/index.d.ts +5 -0
  7. package/dist/ast-interpreter/index.js +18 -0
  8. package/dist/ast-interpreter/index.js.map +1 -0
  9. package/dist/ast-interpreter/interpreter.d.ts +2 -0
  10. package/dist/ast-interpreter/interpreter.js +471 -0
  11. package/dist/ast-interpreter/interpreter.js.map +1 -0
  12. package/dist/ast-interpreter/parser.d.ts +2 -0
  13. package/dist/ast-interpreter/parser.js +61 -0
  14. package/dist/ast-interpreter/parser.js.map +1 -0
  15. package/dist/ast-interpreter/validators.d.ts +13 -0
  16. package/dist/ast-interpreter/validators.js +243 -0
  17. package/dist/ast-interpreter/validators.js.map +1 -0
  18. package/dist/build.tsbuildinfo +1 -0
  19. package/dist/cli/code-to-json.d.ts +1 -0
  20. package/dist/cli/code-to-json.js +51 -0
  21. package/dist/cli/code-to-json.js.map +1 -0
  22. package/dist/cli/index.d.ts +2 -0
  23. package/dist/cli/index.js +25 -0
  24. package/dist/cli/index.js.map +1 -0
  25. package/dist/cli/json-to-code.d.ts +1 -0
  26. package/dist/cli/json-to-code.js +60 -0
  27. package/dist/cli/json-to-code.js.map +1 -0
  28. package/dist/cli/utils.d.ts +1 -0
  29. package/dist/cli/utils.js +16 -0
  30. package/dist/cli/utils.js.map +1 -0
  31. package/dist/codegen/code-generator.d.ts +14 -0
  32. package/dist/codegen/code-generator.js +807 -0
  33. package/dist/codegen/code-generator.js.map +1 -0
  34. package/dist/codegen/composite-builder.d.ts +3 -0
  35. package/dist/codegen/composite-builder.js +718 -0
  36. package/dist/codegen/composite-builder.js.map +1 -0
  37. package/dist/codegen/composite-handlers/build-utils.d.ts +24 -0
  38. package/dist/codegen/composite-handlers/build-utils.js +79 -0
  39. package/dist/codegen/composite-handlers/build-utils.js.map +1 -0
  40. package/dist/codegen/composite-handlers/error-handler.d.ts +6 -0
  41. package/dist/codegen/composite-handlers/error-handler.js +51 -0
  42. package/dist/codegen/composite-handlers/error-handler.js.map +1 -0
  43. package/dist/codegen/composite-handlers/if-else-handler.d.ts +5 -0
  44. package/dist/codegen/composite-handlers/if-else-handler.js +57 -0
  45. package/dist/codegen/composite-handlers/if-else-handler.js.map +1 -0
  46. package/dist/codegen/composite-handlers/index.d.ts +1 -0
  47. package/dist/codegen/composite-handlers/index.js +17 -0
  48. package/dist/codegen/composite-handlers/index.js.map +1 -0
  49. package/dist/codegen/composite-handlers/merge-handler.d.ts +5 -0
  50. package/dist/codegen/composite-handlers/merge-handler.js +25 -0
  51. package/dist/codegen/composite-handlers/merge-handler.js.map +1 -0
  52. package/dist/codegen/composite-handlers/sib-handler.d.ts +5 -0
  53. package/dist/codegen/composite-handlers/sib-handler.js +57 -0
  54. package/dist/codegen/composite-handlers/sib-handler.js.map +1 -0
  55. package/dist/codegen/composite-handlers/switch-case-handler.d.ts +5 -0
  56. package/dist/codegen/composite-handlers/switch-case-handler.js +80 -0
  57. package/dist/codegen/composite-handlers/switch-case-handler.js.map +1 -0
  58. package/dist/codegen/composite-tree.d.ts +81 -0
  59. package/dist/codegen/composite-tree.js +3 -0
  60. package/dist/codegen/composite-tree.js.map +1 -0
  61. package/dist/codegen/config-builder.d.ts +7 -0
  62. package/dist/codegen/config-builder.js +22 -0
  63. package/dist/codegen/config-builder.js.map +1 -0
  64. package/dist/codegen/constants.d.ts +5 -0
  65. package/dist/codegen/constants.js +30 -0
  66. package/dist/codegen/constants.js.map +1 -0
  67. package/dist/codegen/deferred-connections.d.ts +20 -0
  68. package/dist/codegen/deferred-connections.js +46 -0
  69. package/dist/codegen/deferred-connections.js.map +1 -0
  70. package/dist/codegen/execution-schema-jsdoc.d.ts +3 -0
  71. package/dist/codegen/execution-schema-jsdoc.js +109 -0
  72. package/dist/codegen/execution-schema-jsdoc.js.map +1 -0
  73. package/dist/codegen/execution-status.d.ts +9 -0
  74. package/dist/codegen/execution-status.js +42 -0
  75. package/dist/codegen/execution-status.js.map +1 -0
  76. package/dist/codegen/expression-annotator.d.ts +2 -0
  77. package/dist/codegen/expression-annotator.js +38 -0
  78. package/dist/codegen/expression-annotator.js.map +1 -0
  79. package/dist/codegen/graph-annotator.d.ts +2 -0
  80. package/dist/codegen/graph-annotator.js +107 -0
  81. package/dist/codegen/graph-annotator.js.map +1 -0
  82. package/dist/codegen/index.d.ts +20 -0
  83. package/dist/codegen/index.js +60 -0
  84. package/dist/codegen/index.js.map +1 -0
  85. package/dist/codegen/merge-pattern.d.ts +12 -0
  86. package/dist/codegen/merge-pattern.js +119 -0
  87. package/dist/codegen/merge-pattern.js.map +1 -0
  88. package/dist/codegen/node-type-utils.d.ts +4 -0
  89. package/dist/codegen/node-type-utils.js +38 -0
  90. package/dist/codegen/node-type-utils.js.map +1 -0
  91. package/dist/codegen/output-utils.d.ts +9 -0
  92. package/dist/codegen/output-utils.js +68 -0
  93. package/dist/codegen/output-utils.js.map +1 -0
  94. package/dist/codegen/parse-workflow-code.d.ts +3 -0
  95. package/dist/codegen/parse-workflow-code.js +438 -0
  96. package/dist/codegen/parse-workflow-code.js.map +1 -0
  97. package/dist/codegen/semantic-graph.d.ts +3 -0
  98. package/dist/codegen/semantic-graph.js +216 -0
  99. package/dist/codegen/semantic-graph.js.map +1 -0
  100. package/dist/codegen/semantic-registry.d.ts +18 -0
  101. package/dist/codegen/semantic-registry.js +102 -0
  102. package/dist/codegen/semantic-registry.js.map +1 -0
  103. package/dist/codegen/sib-merge-handler.d.ts +20 -0
  104. package/dist/codegen/sib-merge-handler.js +92 -0
  105. package/dist/codegen/sib-merge-handler.js.map +1 -0
  106. package/dist/codegen/string-utils.d.ts +6 -0
  107. package/dist/codegen/string-utils.js +38 -0
  108. package/dist/codegen/string-utils.js.map +1 -0
  109. package/dist/codegen/subnode-generator.d.ts +17 -0
  110. package/dist/codegen/subnode-generator.js +219 -0
  111. package/dist/codegen/subnode-generator.js.map +1 -0
  112. package/dist/codegen/types.d.ts +40 -0
  113. package/dist/codegen/types.js +16 -0
  114. package/dist/codegen/types.js.map +1 -0
  115. package/dist/codegen/variable-names.d.ts +8 -0
  116. package/dist/codegen/variable-names.js +121 -0
  117. package/dist/codegen/variable-names.js.map +1 -0
  118. package/dist/constants/index.d.ts +1 -0
  119. package/dist/constants/index.js +14 -0
  120. package/dist/constants/index.js.map +1 -0
  121. package/dist/constants/node-types.d.ts +19 -0
  122. package/dist/constants/node-types.js +46 -0
  123. package/dist/constants/node-types.js.map +1 -0
  124. package/dist/expression/index.d.ts +6 -0
  125. package/dist/expression/index.js +181 -0
  126. package/dist/expression/index.js.map +1 -0
  127. package/dist/expression.d.ts +1 -0
  128. package/dist/expression.js +10 -0
  129. package/dist/expression.js.map +1 -0
  130. package/dist/generate-types/generate-node-defs-cli.d.ts +7 -0
  131. package/dist/generate-types/generate-node-defs-cli.js +99 -0
  132. package/dist/generate-types/generate-node-defs-cli.js.map +1 -0
  133. package/dist/generate-types/generate-types.d.ts +163 -0
  134. package/dist/generate-types/generate-types.js +2569 -0
  135. package/dist/generate-types/generate-types.js.map +1 -0
  136. package/dist/generate-types/generate-zod-schemas.d.ts +41 -0
  137. package/dist/generate-types/generate-zod-schemas.js +1129 -0
  138. package/dist/generate-types/generate-zod-schemas.js.map +1 -0
  139. package/dist/generate-types/index.d.ts +3 -0
  140. package/dist/generate-types/index.js +62 -0
  141. package/dist/generate-types/index.js.map +1 -0
  142. package/dist/generate-types/zod-helpers.d.ts +189 -0
  143. package/dist/generate-types/zod-helpers.js +76 -0
  144. package/dist/generate-types/zod-helpers.js.map +1 -0
  145. package/dist/index.d.ts +20 -0
  146. package/dist/index.js +87 -0
  147. package/dist/index.js.map +1 -0
  148. package/dist/types/aliases.d.ts +5 -0
  149. package/dist/types/aliases.js +3 -0
  150. package/dist/types/aliases.js.map +1 -0
  151. package/dist/types/base.d.ts +395 -0
  152. package/dist/types/base.js +22 -0
  153. package/dist/types/base.js.map +1 -0
  154. package/dist/utils/code-helpers.d.ts +7 -0
  155. package/dist/utils/code-helpers.js +47 -0
  156. package/dist/utils/code-helpers.js.map +1 -0
  157. package/dist/utils/index.d.ts +2 -0
  158. package/dist/utils/index.js +11 -0
  159. package/dist/utils/index.js.map +1 -0
  160. package/dist/utils/safe-access.d.ts +3 -0
  161. package/dist/utils/safe-access.js +21 -0
  162. package/dist/utils/safe-access.js.map +1 -0
  163. package/dist/utils/trigger-detection.d.ts +1 -0
  164. package/dist/utils/trigger-detection.js +17 -0
  165. package/dist/utils/trigger-detection.js.map +1 -0
  166. package/dist/validation/display-options.d.ts +18 -0
  167. package/dist/validation/display-options.js +194 -0
  168. package/dist/validation/display-options.js.map +1 -0
  169. package/dist/validation/index.d.ts +34 -0
  170. package/dist/validation/index.js +428 -0
  171. package/dist/validation/index.js.map +1 -0
  172. package/dist/validation/input-resolver.d.ts +2 -0
  173. package/dist/validation/input-resolver.js +23 -0
  174. package/dist/validation/input-resolver.js.map +1 -0
  175. package/dist/validation/resolve-schema.d.ts +14 -0
  176. package/dist/validation/resolve-schema.js +105 -0
  177. package/dist/validation/resolve-schema.js.map +1 -0
  178. package/dist/validation/schema-helpers.d.ts +164 -0
  179. package/dist/validation/schema-helpers.js +51 -0
  180. package/dist/validation/schema-helpers.js.map +1 -0
  181. package/dist/validation/schema-validator.d.ts +22 -0
  182. package/dist/validation/schema-validator.js +402 -0
  183. package/dist/validation/schema-validator.js.map +1 -0
  184. package/dist/validation/test-schema-setup.d.ts +2 -0
  185. package/dist/validation/test-schema-setup.js +108 -0
  186. package/dist/validation/test-schema-setup.js.map +1 -0
  187. package/dist/validation.d.ts +1 -0
  188. package/dist/validation.js +9 -0
  189. package/dist/validation.js.map +1 -0
  190. package/dist/workflow-builder/connection-utils.d.ts +4 -0
  191. package/dist/workflow-builder/connection-utils.js +42 -0
  192. package/dist/workflow-builder/connection-utils.js.map +1 -0
  193. package/dist/workflow-builder/constants.d.ts +3 -0
  194. package/dist/workflow-builder/constants.js +7 -0
  195. package/dist/workflow-builder/constants.js.map +1 -0
  196. package/dist/workflow-builder/control-flow-builders/if-else.d.ts +2 -0
  197. package/dist/workflow-builder/control-flow-builders/if-else.js +3 -0
  198. package/dist/workflow-builder/control-flow-builders/if-else.js.map +1 -0
  199. package/dist/workflow-builder/control-flow-builders/next-batch.d.ts +2 -0
  200. package/dist/workflow-builder/control-flow-builders/next-batch.js +7 -0
  201. package/dist/workflow-builder/control-flow-builders/next-batch.js.map +1 -0
  202. package/dist/workflow-builder/control-flow-builders/split-in-batches.d.ts +27 -0
  203. package/dist/workflow-builder/control-flow-builders/split-in-batches.js +268 -0
  204. package/dist/workflow-builder/control-flow-builders/split-in-batches.js.map +1 -0
  205. package/dist/workflow-builder/control-flow-builders/switch-case.d.ts +2 -0
  206. package/dist/workflow-builder/control-flow-builders/switch-case.js +3 -0
  207. package/dist/workflow-builder/control-flow-builders/switch-case.js.map +1 -0
  208. package/dist/workflow-builder/layout-utils.d.ts +2 -0
  209. package/dist/workflow-builder/layout-utils.js +54 -0
  210. package/dist/workflow-builder/layout-utils.js.map +1 -0
  211. package/dist/workflow-builder/node-builders/index.d.ts +2 -0
  212. package/dist/workflow-builder/node-builders/index.js +29 -0
  213. package/dist/workflow-builder/node-builders/index.js.map +1 -0
  214. package/dist/workflow-builder/node-builders/node-builder.d.ts +26 -0
  215. package/dist/workflow-builder/node-builders/node-builder.js +596 -0
  216. package/dist/workflow-builder/node-builders/node-builder.js.map +1 -0
  217. package/dist/workflow-builder/node-builders/subnode-builders.d.ts +25 -0
  218. package/dist/workflow-builder/node-builders/subnode-builders.js +110 -0
  219. package/dist/workflow-builder/node-builders/subnode-builders.js.map +1 -0
  220. package/dist/workflow-builder/pin-data-utils.d.ts +5 -0
  221. package/dist/workflow-builder/pin-data-utils.js +54 -0
  222. package/dist/workflow-builder/pin-data-utils.js.map +1 -0
  223. package/dist/workflow-builder/plugins/composite-handlers/branch-handler-utils.d.ts +9 -0
  224. package/dist/workflow-builder/plugins/composite-handlers/branch-handler-utils.js +162 -0
  225. package/dist/workflow-builder/plugins/composite-handlers/branch-handler-utils.js.map +1 -0
  226. package/dist/workflow-builder/plugins/composite-handlers/if-else-handler.d.ts +5 -0
  227. package/dist/workflow-builder/plugins/composite-handlers/if-else-handler.js +83 -0
  228. package/dist/workflow-builder/plugins/composite-handlers/if-else-handler.js.map +1 -0
  229. package/dist/workflow-builder/plugins/composite-handlers/index.d.ts +3 -0
  230. package/dist/workflow-builder/plugins/composite-handlers/index.js +10 -0
  231. package/dist/workflow-builder/plugins/composite-handlers/index.js.map +1 -0
  232. package/dist/workflow-builder/plugins/composite-handlers/split-in-batches-handler.d.ts +15 -0
  233. package/dist/workflow-builder/plugins/composite-handlers/split-in-batches-handler.js +216 -0
  234. package/dist/workflow-builder/plugins/composite-handlers/split-in-batches-handler.js.map +1 -0
  235. package/dist/workflow-builder/plugins/composite-handlers/switch-case-handler.d.ts +5 -0
  236. package/dist/workflow-builder/plugins/composite-handlers/switch-case-handler.js +91 -0
  237. package/dist/workflow-builder/plugins/composite-handlers/switch-case-handler.js.map +1 -0
  238. package/dist/workflow-builder/plugins/defaults.d.ts +2 -0
  239. package/dist/workflow-builder/plugins/defaults.js +53 -0
  240. package/dist/workflow-builder/plugins/defaults.js.map +1 -0
  241. package/dist/workflow-builder/plugins/index.d.ts +3 -0
  242. package/dist/workflow-builder/plugins/index.js +9 -0
  243. package/dist/workflow-builder/plugins/index.js.map +1 -0
  244. package/dist/workflow-builder/plugins/registry.d.ts +22 -0
  245. package/dist/workflow-builder/plugins/registry.js +98 -0
  246. package/dist/workflow-builder/plugins/registry.js.map +1 -0
  247. package/dist/workflow-builder/plugins/serializers/index.d.ts +1 -0
  248. package/dist/workflow-builder/plugins/serializers/index.js +6 -0
  249. package/dist/workflow-builder/plugins/serializers/index.js.map +1 -0
  250. package/dist/workflow-builder/plugins/serializers/json-serializer.d.ts +3 -0
  251. package/dist/workflow-builder/plugins/serializers/json-serializer.js +140 -0
  252. package/dist/workflow-builder/plugins/serializers/json-serializer.js.map +1 -0
  253. package/dist/workflow-builder/plugins/types.d.ts +76 -0
  254. package/dist/workflow-builder/plugins/types.js +29 -0
  255. package/dist/workflow-builder/plugins/types.js.map +1 -0
  256. package/dist/workflow-builder/plugins/validators/agent-validator.d.ts +2 -0
  257. package/dist/workflow-builder/plugins/validators/agent-validator.js +45 -0
  258. package/dist/workflow-builder/plugins/validators/agent-validator.js.map +1 -0
  259. package/dist/workflow-builder/plugins/validators/chain-llm-validator.d.ts +2 -0
  260. package/dist/workflow-builder/plugins/validators/chain-llm-validator.js +39 -0
  261. package/dist/workflow-builder/plugins/validators/chain-llm-validator.js.map +1 -0
  262. package/dist/workflow-builder/plugins/validators/date-method-validator.d.ts +2 -0
  263. package/dist/workflow-builder/plugins/validators/date-method-validator.js +28 -0
  264. package/dist/workflow-builder/plugins/validators/date-method-validator.js.map +1 -0
  265. package/dist/workflow-builder/plugins/validators/disconnected-node-validator.d.ts +2 -0
  266. package/dist/workflow-builder/plugins/validators/disconnected-node-validator.js +142 -0
  267. package/dist/workflow-builder/plugins/validators/disconnected-node-validator.js.map +1 -0
  268. package/dist/workflow-builder/plugins/validators/expression-path-validator.d.ts +2 -0
  269. package/dist/workflow-builder/plugins/validators/expression-path-validator.js +155 -0
  270. package/dist/workflow-builder/plugins/validators/expression-path-validator.js.map +1 -0
  271. package/dist/workflow-builder/plugins/validators/expression-prefix-validator.d.ts +2 -0
  272. package/dist/workflow-builder/plugins/validators/expression-prefix-validator.js +32 -0
  273. package/dist/workflow-builder/plugins/validators/expression-prefix-validator.js.map +1 -0
  274. package/dist/workflow-builder/plugins/validators/from-ai-validator.d.ts +2 -0
  275. package/dist/workflow-builder/plugins/validators/from-ai-validator.js +30 -0
  276. package/dist/workflow-builder/plugins/validators/from-ai-validator.js.map +1 -0
  277. package/dist/workflow-builder/plugins/validators/http-request-validator.d.ts +2 -0
  278. package/dist/workflow-builder/plugins/validators/http-request-validator.js +55 -0
  279. package/dist/workflow-builder/plugins/validators/http-request-validator.js.map +1 -0
  280. package/dist/workflow-builder/plugins/validators/index.d.ts +15 -0
  281. package/dist/workflow-builder/plugins/validators/index.js +34 -0
  282. package/dist/workflow-builder/plugins/validators/index.js.map +1 -0
  283. package/dist/workflow-builder/plugins/validators/max-nodes-validator.d.ts +2 -0
  284. package/dist/workflow-builder/plugins/validators/max-nodes-validator.js +40 -0
  285. package/dist/workflow-builder/plugins/validators/max-nodes-validator.js.map +1 -0
  286. package/dist/workflow-builder/plugins/validators/merge-node-validator.d.ts +2 -0
  287. package/dist/workflow-builder/plugins/validators/merge-node-validator.js +54 -0
  288. package/dist/workflow-builder/plugins/validators/merge-node-validator.js.map +1 -0
  289. package/dist/workflow-builder/plugins/validators/missing-trigger-validator.d.ts +2 -0
  290. package/dist/workflow-builder/plugins/validators/missing-trigger-validator.js +27 -0
  291. package/dist/workflow-builder/plugins/validators/missing-trigger-validator.js.map +1 -0
  292. package/dist/workflow-builder/plugins/validators/no-nodes-validator.d.ts +2 -0
  293. package/dist/workflow-builder/plugins/validators/no-nodes-validator.js +23 -0
  294. package/dist/workflow-builder/plugins/validators/no-nodes-validator.js.map +1 -0
  295. package/dist/workflow-builder/plugins/validators/set-node-validator.d.ts +2 -0
  296. package/dist/workflow-builder/plugins/validators/set-node-validator.js +41 -0
  297. package/dist/workflow-builder/plugins/validators/set-node-validator.js.map +1 -0
  298. package/dist/workflow-builder/plugins/validators/subnode-connection-validator.d.ts +2 -0
  299. package/dist/workflow-builder/plugins/validators/subnode-connection-validator.js +64 -0
  300. package/dist/workflow-builder/plugins/validators/subnode-connection-validator.js.map +1 -0
  301. package/dist/workflow-builder/plugins/validators/tool-node-validator.d.ts +2 -0
  302. package/dist/workflow-builder/plugins/validators/tool-node-validator.js +37 -0
  303. package/dist/workflow-builder/plugins/validators/tool-node-validator.js.map +1 -0
  304. package/dist/workflow-builder/string-utils.d.ts +9 -0
  305. package/dist/workflow-builder/string-utils.js +237 -0
  306. package/dist/workflow-builder/string-utils.js.map +1 -0
  307. package/dist/workflow-builder/subnode-utils.d.ts +2 -0
  308. package/dist/workflow-builder/subnode-utils.js +180 -0
  309. package/dist/workflow-builder/subnode-utils.js.map +1 -0
  310. package/dist/workflow-builder/type-guards.d.ts +15 -0
  311. package/dist/workflow-builder/type-guards.js +48 -0
  312. package/dist/workflow-builder/type-guards.js.map +1 -0
  313. package/dist/workflow-builder/validation-helpers.d.ts +27 -0
  314. package/dist/workflow-builder/validation-helpers.js +195 -0
  315. package/dist/workflow-builder/validation-helpers.js.map +1 -0
  316. package/dist/workflow-builder/workflow-import.d.ts +15 -0
  317. package/dist/workflow-builder/workflow-import.js +102 -0
  318. package/dist/workflow-builder/workflow-import.js.map +1 -0
  319. package/dist/workflow-builder.d.ts +2 -0
  320. package/dist/workflow-builder.js +636 -0
  321. package/dist/workflow-builder.js.map +1 -0
  322. package/package.json +61 -0
@@ -0,0 +1,636 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.workflow = void 0;
4
+ const base_1 = require("./types/base");
5
+ const index_1 = require("./validation/index");
6
+ const connection_utils_1 = require("./workflow-builder/connection-utils");
7
+ const node_builder_1 = require("./workflow-builder/node-builders/node-builder");
8
+ const pin_data_utils_1 = require("./workflow-builder/pin-data-utils");
9
+ const defaults_1 = require("./workflow-builder/plugins/defaults");
10
+ const registry_1 = require("./workflow-builder/plugins/registry");
11
+ const serializers_1 = require("./workflow-builder/plugins/serializers");
12
+ const string_utils_1 = require("./workflow-builder/string-utils");
13
+ const subnode_utils_1 = require("./workflow-builder/subnode-utils");
14
+ const workflow_import_1 = require("./workflow-builder/workflow-import");
15
+ (0, defaults_1.registerDefaultPlugins)(registry_1.pluginRegistry);
16
+ class WorkflowBuilderImpl {
17
+ constructor(id, name, settings = {}, nodes, currentNode, pinData, meta, registry) {
18
+ this.id = id;
19
+ this.name = name;
20
+ this._settings = { ...settings };
21
+ this._nodes = nodes ? new Map(nodes) : new Map();
22
+ this._currentNode = currentNode ?? null;
23
+ this._currentOutput = 0;
24
+ this._pinData = pinData;
25
+ this._meta = meta;
26
+ this._registry = registry;
27
+ }
28
+ createMutablePluginContext(nodes, nameMapping) {
29
+ const effectiveNameMapping = nameMapping ?? new Map();
30
+ return {
31
+ nodes,
32
+ workflowId: this.id,
33
+ workflowName: this.name,
34
+ settings: this._settings,
35
+ pinData: this._pinData,
36
+ nameMapping: effectiveNameMapping,
37
+ addNodeWithSubnodes: (node) => {
38
+ const actualKey = this.addNodeWithSubnodes(nodes, node);
39
+ if (actualKey && actualKey !== node.name) {
40
+ effectiveNameMapping.set(node.id, actualKey);
41
+ }
42
+ return actualKey;
43
+ },
44
+ addBranchToGraph: (branch) => {
45
+ return this.addBranchToGraph(nodes, branch, effectiveNameMapping);
46
+ },
47
+ trackRename: (nodeId, actualKey) => {
48
+ effectiveNameMapping.set(nodeId, actualKey);
49
+ },
50
+ };
51
+ }
52
+ collectPinData(node) {
53
+ const nodePinData = node.config?.pinData;
54
+ if (!nodePinData || nodePinData.length === 0) {
55
+ return this._pinData;
56
+ }
57
+ return {
58
+ ...this._pinData,
59
+ [node.name]: nodePinData,
60
+ };
61
+ }
62
+ collectPinDataFromChain(chain) {
63
+ let pinData = this._pinData;
64
+ const registry = this._registry ?? registry_1.pluginRegistry;
65
+ for (const chainNode of chain.allNodes) {
66
+ const handler = registry.findCompositeHandler(chainNode);
67
+ if (handler?.collectPinData) {
68
+ handler.collectPinData(chainNode, (node) => {
69
+ pinData = this.collectPinDataFromNode(node, pinData);
70
+ });
71
+ }
72
+ else if (chainNode?.config?.pinData) {
73
+ pinData = this.collectPinDataFromNode(chainNode, pinData);
74
+ }
75
+ }
76
+ return pinData;
77
+ }
78
+ collectPinDataFromNode(node, existingPinData) {
79
+ const nodePinData = node.config?.pinData;
80
+ if (nodePinData && nodePinData.length > 0) {
81
+ return {
82
+ ...existingPinData,
83
+ [node.name]: nodePinData,
84
+ };
85
+ }
86
+ return existingPinData;
87
+ }
88
+ add(node) {
89
+ if (Array.isArray(node)) {
90
+ for (const target of node) {
91
+ if ((0, node_builder_1.isInputTarget)(target)) {
92
+ const inputTargetNode = target.node;
93
+ if (!this._nodes.has(inputTargetNode.name)) {
94
+ this.addNodeWithSubnodes(this._nodes, inputTargetNode);
95
+ }
96
+ }
97
+ else if ((0, base_1.isNodeChain)(target)) {
98
+ for (const chainNode of target.allNodes) {
99
+ if (!this._nodes.has(chainNode.name)) {
100
+ this.addNodeWithSubnodes(this._nodes, chainNode);
101
+ }
102
+ }
103
+ this.addConnectionTargetNodes(this._nodes, target);
104
+ }
105
+ else {
106
+ const targetNode = target;
107
+ if (!this._nodes.has(targetNode.name)) {
108
+ this.addNodeWithSubnodes(this._nodes, targetNode);
109
+ }
110
+ }
111
+ }
112
+ return this;
113
+ }
114
+ const addRegistry = this._registry ?? registry_1.pluginRegistry;
115
+ const addHandler = addRegistry.findCompositeHandler(node);
116
+ if (addHandler) {
117
+ const ctx = this.createMutablePluginContext(this._nodes);
118
+ const headName = addHandler.addNodes(node, ctx);
119
+ this._currentNode = headName;
120
+ this._currentOutput = 0;
121
+ return this;
122
+ }
123
+ if ((0, base_1.isNodeChain)(node)) {
124
+ const nameMapping = new Map();
125
+ for (const chainNode of node.allNodes) {
126
+ const pluginResult = this.tryPluginDispatch(this._nodes, chainNode, nameMapping);
127
+ if (pluginResult === undefined) {
128
+ const actualKey = this.addNodeWithSubnodes(this._nodes, chainNode);
129
+ if (actualKey && actualKey !== chainNode.name) {
130
+ nameMapping.set(chainNode.id, actualKey);
131
+ }
132
+ }
133
+ }
134
+ this.addConnectionTargetNodes(this._nodes, node, nameMapping);
135
+ this._pinData = this.collectPinDataFromChain(node);
136
+ this._currentNode = nameMapping.get(node.tail.id) ?? node.tail.name;
137
+ this._currentOutput = 0;
138
+ return this;
139
+ }
140
+ const regularNode = node;
141
+ const actualKey = this.addNodeWithSubnodes(this._nodes, regularNode) ?? regularNode.name;
142
+ this.addSingleNodeConnectionTargets(this._nodes, regularNode);
143
+ this._pinData = this.collectPinData(regularNode);
144
+ this._currentNode = actualKey;
145
+ this._currentOutput = 0;
146
+ return this;
147
+ }
148
+ to(nodeOrComposite) {
149
+ if ((0, node_builder_1.isInputTarget)(nodeOrComposite)) {
150
+ const actualNode = nodeOrComposite.node;
151
+ const actualKey = this.addNodeWithSubnodes(this._nodes, actualNode) ?? actualNode.name;
152
+ if (this._currentNode) {
153
+ const currentGraphNode = this._nodes.get(this._currentNode);
154
+ if (currentGraphNode) {
155
+ const mainConns = currentGraphNode.connections.get('main') ?? new Map();
156
+ const outputConns = mainConns.get(this._currentOutput) ?? [];
157
+ const alreadyConnected = outputConns.some((c) => c.node === actualKey && c.index === nodeOrComposite.inputIndex);
158
+ if (!alreadyConnected) {
159
+ outputConns.push({
160
+ node: actualKey,
161
+ type: 'main',
162
+ index: nodeOrComposite.inputIndex,
163
+ });
164
+ }
165
+ mainConns.set(this._currentOutput, outputConns);
166
+ currentGraphNode.connections.set('main', mainConns);
167
+ }
168
+ }
169
+ this._currentNode = actualKey;
170
+ this._currentOutput = 0;
171
+ return this;
172
+ }
173
+ if (Array.isArray(nodeOrComposite)) {
174
+ return this.handleFanOut(nodeOrComposite);
175
+ }
176
+ if ((0, base_1.isNodeChain)(nodeOrComposite)) {
177
+ return this.handleNodeChain(nodeOrComposite);
178
+ }
179
+ const thenRegistry = this._registry ?? registry_1.pluginRegistry;
180
+ const thenHandler = thenRegistry.findCompositeHandler(nodeOrComposite);
181
+ if (thenHandler) {
182
+ const ctx = this.createMutablePluginContext(this._nodes);
183
+ const headName = thenHandler.addNodes(nodeOrComposite, ctx);
184
+ if (this._currentNode) {
185
+ const currentGraphNode = this._nodes.get(this._currentNode);
186
+ if (currentGraphNode) {
187
+ const mainConns = currentGraphNode.connections.get('main') ?? new Map();
188
+ const outputConns = mainConns.get(this._currentOutput) ?? [];
189
+ outputConns.push({ node: headName, type: 'main', index: 0 });
190
+ mainConns.set(this._currentOutput, outputConns);
191
+ currentGraphNode.connections.set('main', mainConns);
192
+ }
193
+ }
194
+ this._currentNode = headName;
195
+ this._currentOutput = 0;
196
+ return this;
197
+ }
198
+ const node = nodeOrComposite;
199
+ const actualKey = this.addNodeWithSubnodes(this._nodes, node) ?? node.name;
200
+ this.addSingleNodeConnectionTargets(this._nodes, node);
201
+ if (this._currentNode) {
202
+ const currentGraphNode = this._nodes.get(this._currentNode);
203
+ if (currentGraphNode) {
204
+ const mainConns = currentGraphNode.connections.get('main') ?? new Map();
205
+ const outputConnections = mainConns.get(this._currentOutput) ?? [];
206
+ const alreadyConnected = outputConnections.some((c) => c.node === actualKey);
207
+ if (!alreadyConnected) {
208
+ mainConns.set(this._currentOutput, [
209
+ ...outputConnections,
210
+ { node: actualKey, type: 'main', index: 0 },
211
+ ]);
212
+ currentGraphNode.connections.set('main', mainConns);
213
+ }
214
+ }
215
+ }
216
+ this._pinData = this.collectPinData(node);
217
+ this._currentNode = actualKey;
218
+ this._currentOutput = 0;
219
+ return this;
220
+ }
221
+ output() {
222
+ throw new Error('Cannot call .output() on the workflow builder. ' +
223
+ 'Use .output() on a node variable instead: myNode.output(0).to(targetNode)');
224
+ }
225
+ input() {
226
+ throw new Error('Cannot call .input() on the workflow builder. ' +
227
+ 'Use .input() on a node variable instead: myNode.input(1)');
228
+ }
229
+ settings(settings) {
230
+ this._settings = { ...this._settings, ...settings };
231
+ return this;
232
+ }
233
+ connect(source, sourceOutput, target, targetInput) {
234
+ if (!this._nodes.has(source.name)) {
235
+ this.addNodeWithSubnodes(this._nodes, source);
236
+ }
237
+ if (!this._nodes.has(target.name)) {
238
+ this.addNodeWithSubnodes(this._nodes, target);
239
+ }
240
+ const sourceNode = this._nodes.get(source.name);
241
+ if (sourceNode) {
242
+ const mainConns = sourceNode.connections.get('main') ?? new Map();
243
+ const outputConns = mainConns.get(sourceOutput) ?? [];
244
+ const alreadyExists = outputConns.some((c) => c.node === target.name && c.index === targetInput);
245
+ if (!alreadyExists) {
246
+ outputConns.push({ node: target.name, type: 'main', index: targetInput });
247
+ mainConns.set(sourceOutput, outputConns);
248
+ sourceNode.connections.set('main', mainConns);
249
+ }
250
+ }
251
+ return this;
252
+ }
253
+ getNode(name) {
254
+ const directLookup = this._nodes.get(name);
255
+ if (directLookup) {
256
+ return directLookup.instance;
257
+ }
258
+ for (const graphNode of this._nodes.values()) {
259
+ if (graphNode.instance.name === name) {
260
+ return graphNode.instance;
261
+ }
262
+ }
263
+ return undefined;
264
+ }
265
+ toJSON() {
266
+ this.mergeInstanceConnections();
267
+ const ctx = {
268
+ nodes: this._nodes,
269
+ workflowId: this.id,
270
+ workflowName: this.name,
271
+ settings: this._settings,
272
+ pinData: this._pinData,
273
+ meta: this._meta,
274
+ resolveTargetNodeName: (target) => this.resolveTargetNodeName(target),
275
+ };
276
+ return serializers_1.jsonSerializer.serialize(ctx);
277
+ }
278
+ mergeInstanceConnections() {
279
+ for (const graphNode of this._nodes.values()) {
280
+ if (typeof graphNode.instance.getConnections === 'function') {
281
+ const nodeConns = graphNode.instance.getConnections();
282
+ for (const { target, outputIndex, targetInputIndex } of nodeConns) {
283
+ const targetName = this.resolveTargetNodeName(target, this._staleIdToKeyMap);
284
+ if (!targetName)
285
+ continue;
286
+ const mainConns = graphNode.connections.get('main') ?? new Map();
287
+ const outputConns = mainConns.get(outputIndex) ?? [];
288
+ const targetIndex = targetInputIndex ?? 0;
289
+ const alreadyExists = outputConns.some((c) => c.node === targetName && c.index === targetIndex);
290
+ if (!alreadyExists) {
291
+ outputConns.push({ node: targetName, type: 'main', index: targetIndex });
292
+ mainConns.set(outputIndex, outputConns);
293
+ graphNode.connections.set('main', mainConns);
294
+ }
295
+ }
296
+ }
297
+ }
298
+ }
299
+ regenerateNodeIds() {
300
+ const newNodes = new Map();
301
+ const staleIdToKeyMap = new Map();
302
+ for (const [mapKey, graphNode] of this._nodes) {
303
+ const instance = graphNode.instance;
304
+ staleIdToKeyMap.set(instance.id, mapKey);
305
+ const newId = (0, string_utils_1.generateDeterministicNodeId)(this.id, instance.type, mapKey);
306
+ const newInstance = (0, node_builder_1.cloneNodeWithId)(instance, newId);
307
+ newNodes.set(mapKey, {
308
+ instance: newInstance,
309
+ connections: graphNode.connections,
310
+ });
311
+ }
312
+ this._staleIdToKeyMap = staleIdToKeyMap;
313
+ this._nodes = newNodes;
314
+ }
315
+ validate(options = {}) {
316
+ const errors = [];
317
+ const warnings = [];
318
+ const registry = this._registry ?? registry_1.pluginRegistry;
319
+ const pluginCtx = {
320
+ nodes: this._nodes,
321
+ workflowId: this.id,
322
+ workflowName: this.name,
323
+ settings: this._settings,
324
+ pinData: this._pinData,
325
+ validationOptions: {
326
+ allowDisconnectedNodes: options.allowDisconnectedNodes,
327
+ allowNoTrigger: options.allowNoTrigger,
328
+ nodeTypesProvider: options.nodeTypesProvider,
329
+ },
330
+ };
331
+ for (const [_mapKey, graphNode] of this._nodes) {
332
+ const nodeType = graphNode.instance.type;
333
+ const validators = registry.getValidatorsForNodeType(nodeType);
334
+ for (const validator of validators) {
335
+ const issues = validator.validateNode(graphNode.instance, graphNode, pluginCtx);
336
+ this.collectValidationIssues(issues, errors, warnings, index_1.ValidationError, index_1.ValidationWarning);
337
+ }
338
+ }
339
+ for (const validator of registry.getValidators()) {
340
+ if (validator.validateWorkflow) {
341
+ const issues = validator.validateWorkflow(pluginCtx);
342
+ this.collectValidationIssues(issues, errors, warnings, index_1.ValidationError, index_1.ValidationWarning);
343
+ }
344
+ }
345
+ return {
346
+ valid: errors.length === 0,
347
+ errors,
348
+ warnings,
349
+ };
350
+ }
351
+ collectValidationIssues(issues, errors, warnings, ValidationErrorClass, ValidationWarningClass) {
352
+ for (const issue of issues) {
353
+ const code = issue.code;
354
+ if (issue.severity === 'error') {
355
+ errors.push(new ValidationErrorClass(code, issue.message, issue.nodeName, undefined, issue.violationLevel));
356
+ }
357
+ else {
358
+ warnings.push(new ValidationWarningClass(code, issue.message, issue.nodeName, issue.parameterPath, issue.originalName, issue.violationLevel));
359
+ }
360
+ }
361
+ }
362
+ toString() {
363
+ return JSON.stringify(this.toJSON(), null, 2);
364
+ }
365
+ toFormat(format) {
366
+ const registry = this._registry;
367
+ if (!registry) {
368
+ throw new Error(`No serializer registered for format '${format}'. Provide a registry with serializers when creating the workflow.`);
369
+ }
370
+ const serializer = registry.getSerializer(format);
371
+ if (!serializer) {
372
+ throw new Error(`No serializer registered for format '${format}'`);
373
+ }
374
+ const ctx = {
375
+ nodes: this._nodes,
376
+ workflowId: this.id,
377
+ workflowName: this.name,
378
+ settings: this._settings,
379
+ pinData: this._pinData,
380
+ meta: this._meta,
381
+ resolveTargetNodeName: (target) => this.resolveTargetNodeName(target),
382
+ };
383
+ return serializer.serialize(ctx);
384
+ }
385
+ generatePinData(options) {
386
+ const { beforeWorkflow } = options ?? {};
387
+ const existingNodeNames = beforeWorkflow
388
+ ? new Set(beforeWorkflow.nodes.map((n) => n.name))
389
+ : undefined;
390
+ for (const graphNode of this._nodes.values()) {
391
+ const node = graphNode.instance;
392
+ const nodeName = node.name;
393
+ if (existingNodeNames?.has(nodeName)) {
394
+ continue;
395
+ }
396
+ if (this._pinData?.[nodeName]) {
397
+ continue;
398
+ }
399
+ if (!(0, pin_data_utils_1.shouldGeneratePinData)(node)) {
400
+ continue;
401
+ }
402
+ const output = node.config?.output;
403
+ if (output && output.length > 0) {
404
+ this._pinData = this._pinData ?? {};
405
+ this._pinData[nodeName] = output;
406
+ }
407
+ }
408
+ return this;
409
+ }
410
+ resolveTargetNodeName(target, nameMapping) {
411
+ const registry = this._registry ?? registry_1.pluginRegistry;
412
+ return (0, connection_utils_1.resolveTargetNodeName)(target, this._nodes, registry, nameMapping);
413
+ }
414
+ addConnectionTargetNodes(nodes, chain, nameMapping) {
415
+ const registry = this._registry ?? registry_1.pluginRegistry;
416
+ const connections = chain.getConnections();
417
+ for (const { target } of connections) {
418
+ if (registry.isCompositeType(target))
419
+ continue;
420
+ if ((0, base_1.isNodeChain)(target)) {
421
+ this.addBranchToGraph(nodes, target, nameMapping);
422
+ continue;
423
+ }
424
+ if ((0, node_builder_1.isInputTarget)(target)) {
425
+ const inputTargetNode = target.node;
426
+ if (!nodes.has(inputTargetNode.name)) {
427
+ const actualKey = this.addNodeWithSubnodes(nodes, inputTargetNode);
428
+ if (actualKey && nameMapping && actualKey !== inputTargetNode.name) {
429
+ nameMapping.set(inputTargetNode.id, actualKey);
430
+ }
431
+ }
432
+ continue;
433
+ }
434
+ const targetNode = target;
435
+ if (!nodes.has(targetNode.name)) {
436
+ const actualKey = this.addNodeWithSubnodes(nodes, targetNode);
437
+ if (actualKey && nameMapping && actualKey !== targetNode.name) {
438
+ nameMapping.set(targetNode.id, actualKey);
439
+ }
440
+ }
441
+ }
442
+ }
443
+ addSingleNodeConnectionTargets(nodes, nodeInstance) {
444
+ if (typeof nodeInstance.getConnections !== 'function')
445
+ return;
446
+ const registry = this._registry ?? registry_1.pluginRegistry;
447
+ const connections = nodeInstance.getConnections();
448
+ for (const { target } of connections) {
449
+ if (registry.isCompositeType(target))
450
+ continue;
451
+ if ((0, base_1.isNodeChain)(target)) {
452
+ this.addBranchToGraph(nodes, target);
453
+ continue;
454
+ }
455
+ if ((0, node_builder_1.isInputTarget)(target)) {
456
+ const inputTargetNode = target.node;
457
+ if (!nodes.has(inputTargetNode.name)) {
458
+ this.addNodeWithSubnodes(nodes, inputTargetNode);
459
+ }
460
+ continue;
461
+ }
462
+ const targetNode = target;
463
+ if (!nodes.has(targetNode.name)) {
464
+ this.addNodeWithSubnodes(nodes, targetNode);
465
+ }
466
+ }
467
+ }
468
+ tryPluginDispatch(nodes, target, nameMapping) {
469
+ const registry = this._registry ?? registry_1.pluginRegistry;
470
+ const handler = registry.findCompositeHandler(target);
471
+ if (handler) {
472
+ const ctx = this.createMutablePluginContext(nodes, nameMapping);
473
+ return handler.addNodes(target, ctx);
474
+ }
475
+ return undefined;
476
+ }
477
+ addNodeWithSubnodes(nodes, nodeInstance) {
478
+ return (0, subnode_utils_1.addNodeWithSubnodes)(nodes, nodeInstance);
479
+ }
480
+ handleFanOut(nodes) {
481
+ if (nodes.length === 0) {
482
+ return this;
483
+ }
484
+ const currentGraphNode = this._currentNode ? this._nodes.get(this._currentNode) : undefined;
485
+ nodes.forEach((node, index) => {
486
+ if (node === null) {
487
+ return;
488
+ }
489
+ const headNodeName = this.addBranchToGraph(this._nodes, node);
490
+ if (this._currentNode && currentGraphNode) {
491
+ const mainConns = currentGraphNode.connections.get('main') ?? new Map();
492
+ const outputConnections = mainConns.get(index) ?? [];
493
+ mainConns.set(index, [
494
+ ...outputConnections,
495
+ { node: headNodeName, type: 'main', index: 0 },
496
+ ]);
497
+ currentGraphNode.connections.set('main', mainConns);
498
+ }
499
+ });
500
+ const nonNullNodes = nodes.filter((n) => n !== null);
501
+ const lastNode = nonNullNodes[nonNullNodes.length - 1];
502
+ this._currentNode = lastNode
503
+ ? (0, base_1.isNodeChain)(lastNode)
504
+ ? (lastNode.tail?.name ?? this._currentNode)
505
+ : lastNode.name
506
+ : this._currentNode;
507
+ this._currentOutput = 0;
508
+ return this;
509
+ }
510
+ handleNodeChain(chain) {
511
+ const headNodeName = this.addBranchToGraph(this._nodes, chain);
512
+ if (this._currentNode) {
513
+ const currentGraphNode = this._nodes.get(this._currentNode);
514
+ if (currentGraphNode) {
515
+ const mainConns = currentGraphNode.connections.get('main') ?? new Map();
516
+ const outputConnections = mainConns.get(this._currentOutput) ?? [];
517
+ outputConnections.push({ node: headNodeName, type: 'main', index: 0 });
518
+ mainConns.set(this._currentOutput, outputConnections);
519
+ currentGraphNode.connections.set('main', mainConns);
520
+ }
521
+ }
522
+ this._pinData = this.collectPinDataFromChain(chain);
523
+ this._currentNode = chain.tail?.name ?? headNodeName;
524
+ this._currentOutput = 0;
525
+ return this;
526
+ }
527
+ addBranchToGraph(nodes, branch, nameMapping) {
528
+ const effectiveNameMapping = nameMapping ?? new Map();
529
+ const registry = this._registry ?? registry_1.pluginRegistry;
530
+ const pluginResult = this.tryPluginDispatch(nodes, branch, effectiveNameMapping);
531
+ if (pluginResult !== undefined) {
532
+ return pluginResult;
533
+ }
534
+ if ((0, base_1.isNodeChain)(branch)) {
535
+ for (const chainNode of branch.allNodes) {
536
+ if (chainNode === null) {
537
+ continue;
538
+ }
539
+ if (typeof chainNode !== 'object' ||
540
+ (!('name' in chainNode) && !registry.isCompositeType(chainNode))) {
541
+ continue;
542
+ }
543
+ const chainPluginResult = this.tryPluginDispatch(nodes, chainNode, effectiveNameMapping);
544
+ if (chainPluginResult === undefined) {
545
+ const actualKey = this.addNodeWithSubnodes(nodes, chainNode);
546
+ if (actualKey && actualKey !== chainNode.name) {
547
+ effectiveNameMapping.set(chainNode.id, actualKey);
548
+ }
549
+ }
550
+ }
551
+ const connections = branch.getConnections();
552
+ for (const { target, outputIndex, targetInputIndex } of connections) {
553
+ for (const chainNode of branch.allNodes) {
554
+ if (chainNode === null) {
555
+ continue;
556
+ }
557
+ if (typeof chainNode.getConnections !== 'function') {
558
+ continue;
559
+ }
560
+ const nodeToCheck = chainNode;
561
+ const nodeName = chainNode.name;
562
+ if (nodeToCheck && nodeName && typeof nodeToCheck.getConnections === 'function') {
563
+ const nodeConns = nodeToCheck.getConnections();
564
+ if (nodeConns.some((c) => c.target === target &&
565
+ c.outputIndex === outputIndex &&
566
+ c.targetInputIndex === targetInputIndex)) {
567
+ if ((0, base_1.isNodeChain)(target)) {
568
+ const chainTarget = target;
569
+ for (const targetChainNode of chainTarget.allNodes) {
570
+ if (targetChainNode === null)
571
+ continue;
572
+ const targetPluginResult = this.tryPluginDispatch(nodes, targetChainNode, effectiveNameMapping);
573
+ if (targetPluginResult === undefined && !nodes.has(targetChainNode.name)) {
574
+ this.addNodeWithSubnodes(nodes, targetChainNode);
575
+ }
576
+ }
577
+ }
578
+ else if (typeof target.name === 'string' &&
579
+ !nodes.has(target.name)) {
580
+ this.addNodeWithSubnodes(nodes, target);
581
+ }
582
+ const mappedKey = nodeToCheck && effectiveNameMapping.get(nodeToCheck.id);
583
+ const actualSourceKey = mappedKey ?? nodeName;
584
+ const sourceGraphNode = nodes.get(actualSourceKey);
585
+ if (sourceGraphNode) {
586
+ const targetName = this.resolveTargetNodeName(target, effectiveNameMapping);
587
+ if (targetName) {
588
+ const mainConns = sourceGraphNode.connections.get('main') ??
589
+ new Map();
590
+ const outputConns = mainConns.get(outputIndex) ?? [];
591
+ if (!outputConns.some((c) => c.node === targetName && c.index === (targetInputIndex ?? 0))) {
592
+ outputConns.push({
593
+ node: targetName,
594
+ type: 'main',
595
+ index: targetInputIndex ?? 0,
596
+ });
597
+ mainConns.set(outputIndex, outputConns);
598
+ sourceGraphNode.connections.set('main', mainConns);
599
+ }
600
+ }
601
+ }
602
+ }
603
+ }
604
+ }
605
+ }
606
+ const headKey = effectiveNameMapping.get(branch.head.id) ?? branch.head.name;
607
+ return headKey;
608
+ }
609
+ else {
610
+ const actualKey = this.addNodeWithSubnodes(nodes, branch);
611
+ if (actualKey && actualKey !== branch.name) {
612
+ effectiveNameMapping.set(branch.id, actualKey);
613
+ }
614
+ return actualKey ?? branch.name;
615
+ }
616
+ }
617
+ }
618
+ function isWorkflowBuilderOptions(options) {
619
+ if (!options)
620
+ return false;
621
+ return 'settings' in options || 'registry' in options;
622
+ }
623
+ function createWorkflow(id, name, options) {
624
+ if (isWorkflowBuilderOptions(options)) {
625
+ return new WorkflowBuilderImpl(id, name, options.settings, undefined, undefined, undefined, undefined, options.registry);
626
+ }
627
+ return new WorkflowBuilderImpl(id, name, options);
628
+ }
629
+ function fromJSON(json) {
630
+ const parsed = (0, workflow_import_1.parseWorkflowJSON)(json);
631
+ return new WorkflowBuilderImpl(parsed.id, parsed.name, parsed.settings, parsed.nodes, parsed.lastNode, parsed.pinData, parsed.meta);
632
+ }
633
+ exports.workflow = Object.assign(createWorkflow, {
634
+ fromJSON,
635
+ });
636
+ //# sourceMappingURL=workflow-builder.js.map