@codemation/core 0.0.1

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 (348) hide show
  1. package/README.md +30 -0
  2. package/dist/EngineExecutionLimitsPolicy-8MEFIYx1.d.cts +160 -0
  3. package/dist/EngineExecutionLimitsPolicy-BWAXW9D6.d.cts +160 -0
  4. package/dist/EngineExecutionLimitsPolicy-Bp8PS1Ss.d.cts +159 -0
  5. package/dist/EngineExecutionLimitsPolicy-CLxcN-D2.d.ts +159 -0
  6. package/dist/EngineExecutionLimitsPolicy-DZXuix51.d.ts +160 -0
  7. package/dist/EngineExecutionLimitsPolicy-Gfz6ngFd.d.ts +160 -0
  8. package/dist/EngineFactory-CBnntY3J.cjs +3152 -0
  9. package/dist/EngineFactory-CBnntY3J.cjs.map +1 -0
  10. package/dist/EngineFactory-Cwn3R2YA.js +3087 -0
  11. package/dist/EngineFactory-Cwn3R2YA.js.map +1 -0
  12. package/dist/EngineFactory-DWCnNocp.js +3063 -0
  13. package/dist/EngineFactory-DWCnNocp.js.map +1 -0
  14. package/dist/EngineFactory-DhPFou4p.cjs +3188 -0
  15. package/dist/EngineFactory-DhPFou4p.cjs.map +1 -0
  16. package/dist/EngineFactory-l_9xmBtv.cjs +3190 -0
  17. package/dist/EngineFactory-l_9xmBtv.cjs.map +1 -0
  18. package/dist/EngineFactory-w-aOWuqh.js +3089 -0
  19. package/dist/EngineFactory-w-aOWuqh.js.map +1 -0
  20. package/dist/InMemoryLiveWorkflowRepository-1J9MHN_I.js +18 -0
  21. package/dist/InMemoryLiveWorkflowRepository-1J9MHN_I.js.map +1 -0
  22. package/dist/InMemoryLiveWorkflowRepository-BTzHpQ6e.cjs +151 -0
  23. package/dist/InMemoryLiveWorkflowRepository-BTzHpQ6e.cjs.map +1 -0
  24. package/dist/InMemoryLiveWorkflowRepository-BoLNnVLg.js +139 -0
  25. package/dist/InMemoryLiveWorkflowRepository-BoLNnVLg.js.map +1 -0
  26. package/dist/InMemoryLiveWorkflowRepository-CULNqv96.d.ts +1300 -0
  27. package/dist/InMemoryLiveWorkflowRepository-D6eiiXxF.d.cts +1168 -0
  28. package/dist/InMemoryLiveWorkflowRepository-D7l8cjdZ.d.cts +1130 -0
  29. package/dist/InMemoryLiveWorkflowRepository-DL7LmC9S.d.ts +1340 -0
  30. package/dist/InMemoryLiveWorkflowRepository-jnv-OnOP.d.ts +1300 -0
  31. package/dist/InMemoryLiveWorkflowRepository-xny1_Z6i.cjs +24 -0
  32. package/dist/InMemoryLiveWorkflowRepository-xny1_Z6i.cjs.map +1 -0
  33. package/dist/InMemoryLiveWorkflowRepository-xr7b4kvi.d.ts +1338 -0
  34. package/dist/InMemoryWorkflowCatalog-BIdFpwbK.d.ts +1205 -0
  35. package/dist/InMemoryWorkflowCatalog-BW00_3N3.d.cts +12 -0
  36. package/dist/InMemoryWorkflowCatalog-BiYHGoPw.cjs +24 -0
  37. package/dist/InMemoryWorkflowCatalog-BiYHGoPw.cjs.map +1 -0
  38. package/dist/InMemoryWorkflowCatalog-BrG0ApMO.d.cts +1115 -0
  39. package/dist/InMemoryWorkflowCatalog-BzrAr--Y.js +139 -0
  40. package/dist/InMemoryWorkflowCatalog-BzrAr--Y.js.map +1 -0
  41. package/dist/InMemoryWorkflowCatalog-C-EJlJ7y.d.cts +1120 -0
  42. package/dist/InMemoryWorkflowCatalog-C4482bpw.cjs +24 -0
  43. package/dist/InMemoryWorkflowCatalog-C4482bpw.cjs.map +1 -0
  44. package/dist/InMemoryWorkflowCatalog-CZ0kZpOv.d.ts +1289 -0
  45. package/dist/InMemoryWorkflowCatalog-C_ACeLyW.d.cts +1119 -0
  46. package/dist/InMemoryWorkflowCatalog-CiHWIu5E.d.cts +12 -0
  47. package/dist/InMemoryWorkflowCatalog-CkH7gkya.js +18 -0
  48. package/dist/InMemoryWorkflowCatalog-CkH7gkya.js.map +1 -0
  49. package/dist/InMemoryWorkflowCatalog-CnpZVJM9.d.ts +1205 -0
  50. package/dist/InMemoryWorkflowCatalog-Cu68S8YR.js +18 -0
  51. package/dist/InMemoryWorkflowCatalog-Cu68S8YR.js.map +1 -0
  52. package/dist/InMemoryWorkflowCatalog-D2w9nMj2.cjs +151 -0
  53. package/dist/InMemoryWorkflowCatalog-D2w9nMj2.cjs.map +1 -0
  54. package/dist/InMemoryWorkflowCatalog-D5eMxEf7.js +18 -0
  55. package/dist/InMemoryWorkflowCatalog-D5eMxEf7.js.map +1 -0
  56. package/dist/InMemoryWorkflowCatalog-D5nCp2yZ.d.ts +1267 -0
  57. package/dist/InMemoryWorkflowCatalog-DIq0bjqN.d.ts +12 -0
  58. package/dist/InMemoryWorkflowCatalog-DLgaEaw_.d.ts +1288 -0
  59. package/dist/InMemoryWorkflowCatalog-DNBFdK-x.d.cts +1120 -0
  60. package/dist/InMemoryWorkflowCatalog-DQBkCzb7.cjs +24 -0
  61. package/dist/InMemoryWorkflowCatalog-DQBkCzb7.cjs.map +1 -0
  62. package/dist/InMemoryWorkflowCatalog-DS4-eX6i.d.cts +1118 -0
  63. package/dist/InMemoryWorkflowCatalog-DdVfy8MY.d.ts +12 -0
  64. package/dist/InMemoryWorkflowCatalog-DeVZu3g8.d.ts +12 -0
  65. package/dist/InMemoryWorkflowCatalog-GxkQjvt5.d.ts +1200 -0
  66. package/dist/InMemoryWorkflowCatalog-qaVRn1Lc.d.cts +1115 -0
  67. package/dist/InMemoryWorkflowCatalog-z1aIT4TC.d.cts +12 -0
  68. package/dist/InMemoryWorkflowRegistry-BBuOovLL.d.ts +1007 -0
  69. package/dist/InMemoryWorkflowRegistry-BIFnSl3k.d.ts +1201 -0
  70. package/dist/InMemoryWorkflowRegistry-BnGilthz.d.ts +1137 -0
  71. package/dist/InMemoryWorkflowRegistry-CEp5I8No.d.ts +1146 -0
  72. package/dist/InMemoryWorkflowRegistry-CHyMB9jW.d.cts +976 -0
  73. package/dist/InMemoryWorkflowRegistry-CUN7K86m.d.cts +1061 -0
  74. package/dist/InMemoryWorkflowRegistry-CVfHyELh.d.cts +971 -0
  75. package/dist/InMemoryWorkflowRegistry-CXXJrwAr.d.cts +1052 -0
  76. package/dist/InMemoryWorkflowRegistry-DDGfPTJy.d.ts +1013 -0
  77. package/dist/InMemoryWorkflowRegistry-DnYSOoT5.d.ts +1120 -0
  78. package/dist/InMemoryWorkflowRegistry-Dp5GiFF2.d.cts +1035 -0
  79. package/dist/InMemoryWorkflowRegistry-DypDBeOw.d.cts +1116 -0
  80. package/dist/InMemoryWorkflowRegistry-SzwJCAxT.d.ts +1012 -0
  81. package/dist/InMemoryWorkflowRegistry-jupvqyGc.d.cts +977 -0
  82. package/dist/InMemoryWorkflowRegistry-rAdKVWYT.d.ts +1117 -0
  83. package/dist/InProcessRetryRunner-BBNPkXjy.d.cts +292 -0
  84. package/dist/PersistedWorkflowSnapshotFactory-7RkOL3Kg.d.ts +14 -0
  85. package/dist/PersistedWorkflowSnapshotFactory-BmANa46W.cjs +141 -0
  86. package/dist/PersistedWorkflowSnapshotFactory-BmANa46W.cjs.map +1 -0
  87. package/dist/PersistedWorkflowSnapshotFactory-Bwb_etSt.js +118 -0
  88. package/dist/PersistedWorkflowSnapshotFactory-Bwb_etSt.js.map +1 -0
  89. package/dist/PersistedWorkflowSnapshotFactory-CRkKGNV6.js +123 -0
  90. package/dist/PersistedWorkflowSnapshotFactory-CRkKGNV6.js.map +1 -0
  91. package/dist/PersistedWorkflowSnapshotFactory-CZolnGy5.js +101 -0
  92. package/dist/PersistedWorkflowSnapshotFactory-CZolnGy5.js.map +1 -0
  93. package/dist/PersistedWorkflowSnapshotFactory-Ca_oysOv.cjs +131 -0
  94. package/dist/PersistedWorkflowSnapshotFactory-Ca_oysOv.cjs.map +1 -0
  95. package/dist/PersistedWorkflowSnapshotFactory-CqIcShnX.js +103 -0
  96. package/dist/PersistedWorkflowSnapshotFactory-CqIcShnX.js.map +1 -0
  97. package/dist/PersistedWorkflowSnapshotFactory-D-tBk4_G.js +119 -0
  98. package/dist/PersistedWorkflowSnapshotFactory-D-tBk4_G.js.map +1 -0
  99. package/dist/PersistedWorkflowSnapshotFactory-D4cXl2e2.cjs +131 -0
  100. package/dist/PersistedWorkflowSnapshotFactory-D4cXl2e2.cjs.map +1 -0
  101. package/dist/PersistedWorkflowSnapshotFactory-DINoP12r.cjs +131 -0
  102. package/dist/PersistedWorkflowSnapshotFactory-DINoP12r.cjs.map +1 -0
  103. package/dist/PersistedWorkflowSnapshotFactory-DJAwSuHU.js +103 -0
  104. package/dist/PersistedWorkflowSnapshotFactory-DJAwSuHU.js.map +1 -0
  105. package/dist/PersistedWorkflowSnapshotFactory-DSUjVCcf.cjs +131 -0
  106. package/dist/PersistedWorkflowSnapshotFactory-DSUjVCcf.cjs.map +1 -0
  107. package/dist/PersistedWorkflowSnapshotFactory-DdHuhkDb.cjs +107 -0
  108. package/dist/PersistedWorkflowSnapshotFactory-DdHuhkDb.cjs.map +1 -0
  109. package/dist/PersistedWorkflowSnapshotFactory-Dqc6NHis.js +119 -0
  110. package/dist/PersistedWorkflowSnapshotFactory-Dqc6NHis.js.map +1 -0
  111. package/dist/PersistedWorkflowSnapshotFactory-Dxa2dSrw.cjs +130 -0
  112. package/dist/PersistedWorkflowSnapshotFactory-Dxa2dSrw.cjs.map +1 -0
  113. package/dist/PersistedWorkflowSnapshotFactory-Ep79Ah1G.js +123 -0
  114. package/dist/PersistedWorkflowSnapshotFactory-Ep79Ah1G.js.map +1 -0
  115. package/dist/PersistedWorkflowSnapshotFactory-GyLfRuiJ.js +119 -0
  116. package/dist/PersistedWorkflowSnapshotFactory-GyLfRuiJ.js.map +1 -0
  117. package/dist/PersistedWorkflowSnapshotFactory-HTpBsBzn.js +102 -0
  118. package/dist/PersistedWorkflowSnapshotFactory-HTpBsBzn.js.map +1 -0
  119. package/dist/PersistedWorkflowSnapshotFactory-LVmaaf3t.cjs +141 -0
  120. package/dist/PersistedWorkflowSnapshotFactory-LVmaaf3t.cjs.map +1 -0
  121. package/dist/PersistedWorkflowSnapshotFactory-PZCpo2ZS.js +119 -0
  122. package/dist/PersistedWorkflowSnapshotFactory-PZCpo2ZS.js.map +1 -0
  123. package/dist/PersistedWorkflowSnapshotFactory-UjQ1SJev.cjs +109 -0
  124. package/dist/PersistedWorkflowSnapshotFactory-UjQ1SJev.cjs.map +1 -0
  125. package/dist/PersistedWorkflowSnapshotFactory-Y8kCrhcy.cjs +109 -0
  126. package/dist/PersistedWorkflowSnapshotFactory-Y8kCrhcy.cjs.map +1 -0
  127. package/dist/PersistedWorkflowSnapshotFactory-Z_nB-fmB.cjs +108 -0
  128. package/dist/PersistedWorkflowSnapshotFactory-Z_nB-fmB.cjs.map +1 -0
  129. package/dist/RunIntentService-1EE6N8ZL.cjs +963 -0
  130. package/dist/RunIntentService-1EE6N8ZL.cjs.map +1 -0
  131. package/dist/RunIntentService-2ivFmNQh.cjs +3462 -0
  132. package/dist/RunIntentService-2ivFmNQh.cjs.map +1 -0
  133. package/dist/RunIntentService-B0sUL5q-.js +761 -0
  134. package/dist/RunIntentService-B0sUL5q-.js.map +1 -0
  135. package/dist/RunIntentService-BFVbsOcg.js +3131 -0
  136. package/dist/RunIntentService-BFVbsOcg.js.map +1 -0
  137. package/dist/RunIntentService-BsBOwpVN.cjs +1051 -0
  138. package/dist/RunIntentService-BsBOwpVN.cjs.map +1 -0
  139. package/dist/RunIntentService-CSk3ETyn.js +858 -0
  140. package/dist/RunIntentService-CSk3ETyn.js.map +1 -0
  141. package/dist/RunIntentService-Ckn3u3tA.d.cts +326 -0
  142. package/dist/RunIntentService-DEo6GTTo.d.cts +289 -0
  143. package/dist/RunIntentService-DKrGtL0B.js +782 -0
  144. package/dist/RunIntentService-DKrGtL0B.js.map +1 -0
  145. package/dist/RunIntentService-DNOJc1R7.cjs +942 -0
  146. package/dist/RunIntentService-DNOJc1R7.cjs.map +1 -0
  147. package/dist/RunIntentService-Dq3pV53j.d.cts +289 -0
  148. package/dist/RunIntentService-NKobsfMQ.d.cts +274 -0
  149. package/dist/WorkflowSnapshotCodec-C3fuuS_R.d.cts +22 -0
  150. package/dist/WorkflowSnapshotCodec-CUudUo6f.js +123 -0
  151. package/dist/WorkflowSnapshotCodec-CUudUo6f.js.map +1 -0
  152. package/dist/WorkflowSnapshotCodec-CuCPQZTc.cjs +129 -0
  153. package/dist/WorkflowSnapshotCodec-CuCPQZTc.cjs.map +1 -0
  154. package/dist/WorkflowSnapshotCodec-DLiXQNvV.d.cts +22 -0
  155. package/dist/WorkflowSnapshotCodec-DNtdrZ7l.d.cts +22 -0
  156. package/dist/WorkflowSnapshotCodec-DTdWkoW_.d.cts +22 -0
  157. package/dist/bootstrap/index.cjs +1028 -0
  158. package/dist/bootstrap/index.cjs.map +1 -0
  159. package/dist/bootstrap/index.d.cts +311 -0
  160. package/dist/bootstrap/index.d.ts +83 -0
  161. package/dist/bootstrap/index.js +994 -0
  162. package/dist/bootstrap/index.js.map +1 -0
  163. package/dist/credentialTypes-B5h3dI7r.d.cts +1107 -0
  164. package/dist/credentialTypes-B9okPCVo.d.cts +963 -0
  165. package/dist/credentialTypes-BFL70rgZ.d.cts +964 -0
  166. package/dist/credentialTypes-BGkh1O07.d.ts +1010 -0
  167. package/dist/credentialTypes-BNLi4Q7u.d.ts +1030 -0
  168. package/dist/credentialTypes-CeSoZGj3.d.cts +994 -0
  169. package/dist/credentialTypes-CpHc32Ig.d.cts +984 -0
  170. package/dist/credentialTypes-D0m7MQQl.d.cts +1107 -0
  171. package/dist/credentialTypes-D4nL2sUd.d.ts +1000 -0
  172. package/dist/credentialTypes-DBYK2Qbu.d.ts +999 -0
  173. package/dist/credentialTypes-DMJVy0r1.d.ts +1000 -0
  174. package/dist/credentialTypes-DhUAjYQp.d.ts +1020 -0
  175. package/dist/credentialTypes-gGITj5KL.d.cts +964 -0
  176. package/dist/credentialTypes-r3KVBJBE.d.cts +974 -0
  177. package/dist/diTokens-ClO27tjK.cjs +34 -0
  178. package/dist/diTokens-ClO27tjK.cjs.map +1 -0
  179. package/dist/diTokens-CoHBkwG6.js +28 -0
  180. package/dist/diTokens-CoHBkwG6.js.map +1 -0
  181. package/dist/index-6Doxmfnd.d.ts +857 -0
  182. package/dist/index-9g6Pfe9Z.d.ts +689 -0
  183. package/dist/index-AZ72Ej-K.d.ts +920 -0
  184. package/dist/index-BEk9V-q-.d.ts +667 -0
  185. package/dist/index-Bjt7_7oS.d.ts +1192 -0
  186. package/dist/index-CFGxsYXy.d.ts +708 -0
  187. package/dist/index-C_u8xFgn.d.ts +690 -0
  188. package/dist/index-CpbfsvOJ.d.ts +1192 -0
  189. package/dist/index-CsReNJN_.d.ts +859 -0
  190. package/dist/index-D5iNnXaW.d.ts +667 -0
  191. package/dist/index-DD_Eft1q.d.ts +708 -0
  192. package/dist/index-DiSYUe0G.d.ts +1192 -0
  193. package/dist/index-gIcH60sp.d.ts +674 -0
  194. package/dist/index.cjs +520 -0
  195. package/dist/index.cjs.map +1 -0
  196. package/dist/index.d.cts +345 -0
  197. package/dist/index.d.ts +3 -0
  198. package/dist/index.js +412 -0
  199. package/dist/index.js.map +1 -0
  200. package/dist/runtime-BIvd-1JA.cjs +4112 -0
  201. package/dist/runtime-BIvd-1JA.cjs.map +1 -0
  202. package/dist/runtime-D3eWKSQK.cjs +3986 -0
  203. package/dist/runtime-D3eWKSQK.cjs.map +1 -0
  204. package/dist/runtime-Dvp4xAjg.js +3799 -0
  205. package/dist/runtime-Dvp4xAjg.js.map +1 -0
  206. package/dist/runtime-vc76SSAa.js +3685 -0
  207. package/dist/runtime-vc76SSAa.js.map +1 -0
  208. package/dist/runtimeTypes-BK0b8SaG.d.cts +884 -0
  209. package/dist/runtimeTypes-CoYZkYQq.d.cts +851 -0
  210. package/dist/runtimeTypes-D-Pm0Uas.d.cts +849 -0
  211. package/dist/testing.cjs +18 -0
  212. package/dist/testing.cjs.map +1 -0
  213. package/dist/testing.d.cts +19 -0
  214. package/dist/testing.d.ts +18 -0
  215. package/dist/testing.js +16 -0
  216. package/dist/testing.js.map +1 -0
  217. package/dist/types-Cb5UK7Y6.d.ts +857 -0
  218. package/package.json +66 -0
  219. package/src/ai/AiHost.ts +115 -0
  220. package/src/binaries/DefaultExecutionBinaryServiceFactory.ts +37 -0
  221. package/src/binaries/DefaultNodeBinaryAttachmentServiceFactory.ts +120 -0
  222. package/src/binaries/UnavailableBinaryStorage.ts +19 -0
  223. package/src/binaries/index.ts +2 -0
  224. package/src/bootstrap/index.ts +46 -0
  225. package/src/bootstrap/runtime/EngineRuntimeRegistrar.ts +180 -0
  226. package/src/bootstrap/runtime/EngineRuntimeRegistration.types.ts +43 -0
  227. package/src/bootstrap/runtime/index.ts +6 -0
  228. package/src/browser.ts +8 -0
  229. package/src/contracts/Clock.ts +10 -0
  230. package/src/contracts/ExpRetryPolicy.ts +23 -0
  231. package/src/contracts/NoRetryPolicy.ts +5 -0
  232. package/src/contracts/RetryPolicy.ts +23 -0
  233. package/src/contracts/credentialTypes.ts +194 -0
  234. package/src/contracts/index.ts +6 -0
  235. package/src/contracts/retryPolicySpec.types.ts +30 -0
  236. package/src/contracts/runFinishedAtFactory.ts +19 -0
  237. package/src/contracts/runTypes.ts +314 -0
  238. package/src/contracts/runtimeTypes.ts +373 -0
  239. package/src/contracts/webhookTypes.ts +49 -0
  240. package/src/contracts/workflowActivationPolicy.ts +16 -0
  241. package/src/contracts/workflowTypes.ts +280 -0
  242. package/src/di/CoreTokens.ts +60 -0
  243. package/src/di/index.ts +24 -0
  244. package/src/events/EventPublishingWorkflowExecutionRepository.ts +67 -0
  245. package/src/events/InMemoryRunEventBusRegistry.ts +37 -0
  246. package/src/events/InMemoryRunEventSubscription.ts +9 -0
  247. package/src/events/NodeEventPublisher.ts +22 -0
  248. package/src/events/index.ts +4 -0
  249. package/src/events/runEvents.ts +54 -0
  250. package/src/execution/ActivationEnqueueService.ts +125 -0
  251. package/src/execution/CredentialResolverFactory.ts +39 -0
  252. package/src/execution/DefaultAsyncSleeper.ts +9 -0
  253. package/src/execution/DefaultExecutionContextFactory.ts +48 -0
  254. package/src/execution/InProcessRetryRunner.ts +115 -0
  255. package/src/execution/InProcessRetryRunnerFactory.ts +8 -0
  256. package/src/execution/NodeActivationRequestComposer.ts +113 -0
  257. package/src/execution/NodeExecutionSnapshotFactory.ts +152 -0
  258. package/src/execution/NodeExecutor.ts +43 -0
  259. package/src/execution/NodeExecutorFactory.ts +10 -0
  260. package/src/execution/NodeInputsByPortFactory.ts +14 -0
  261. package/src/execution/NodeInstanceFactory.ts +32 -0
  262. package/src/execution/NodeInstanceFactoryFactory.ts +9 -0
  263. package/src/execution/NodeRunStateWriter.ts +185 -0
  264. package/src/execution/NodeRunStateWriterFactory.ts +29 -0
  265. package/src/execution/PersistedRunStateTerminalBuilder.ts +25 -0
  266. package/src/execution/RunStateSemantics.ts +158 -0
  267. package/src/execution/WorkflowRunExecutionContextFactory.ts +45 -0
  268. package/src/execution/asyncSleeper.types.ts +3 -0
  269. package/src/execution/index.ts +26 -0
  270. package/src/index.ts +18 -0
  271. package/src/orchestration/Engine.ts +229 -0
  272. package/src/orchestration/EngineWaiters.ts +37 -0
  273. package/src/orchestration/RunContinuationService.ts +810 -0
  274. package/src/orchestration/RunStartService.ts +449 -0
  275. package/src/orchestration/TriggerRuntimeService.ts +260 -0
  276. package/src/orchestration/index.ts +5 -0
  277. package/src/planning/CurrentStateFrontierPlanner.ts +400 -0
  278. package/src/planning/EngineWorkflowPlanningFactory.ts +63 -0
  279. package/src/planning/RunQueuePlanner.ts +302 -0
  280. package/src/planning/WorkflowTopologyPlanner.ts +77 -0
  281. package/src/planning/index.ts +4 -0
  282. package/src/policies/WorkflowPolicyErrorServices.ts +38 -0
  283. package/src/policies/executionLimits/EngineExecutionLimitsPolicy.ts +66 -0
  284. package/src/policies/executionLimits/EngineExecutionLimitsPolicyFactory.ts +14 -0
  285. package/src/policies/index.ts +10 -0
  286. package/src/policies/storage/RunPolicySnapshotFactory.ts +23 -0
  287. package/src/policies/storage/RunTerminalPersistenceCoordinator.ts +29 -0
  288. package/src/policies/storage/WorkflowStoragePolicyEvaluator.ts +39 -0
  289. package/src/runStorage/BinaryBodyBufferReader.ts +57 -0
  290. package/src/runStorage/BinaryBodyReadableStreamFactory.ts +21 -0
  291. package/src/runStorage/InMemoryBinaryStorageRegistry.ts +53 -0
  292. package/src/runStorage/InMemoryRunData.ts +33 -0
  293. package/src/runStorage/InMemoryRunDataFactory.ts +8 -0
  294. package/src/runStorage/InMemoryWorkflowExecutionRepository.ts +95 -0
  295. package/src/runStorage/RunSummaryMapper.ts +17 -0
  296. package/src/runStorage/index.ts +7 -0
  297. package/src/runtime/EngineFactory.ts +151 -0
  298. package/src/runtime/EngineWorkflowRunnerService.ts +39 -0
  299. package/src/runtime/EngineWorkflowRunnerServiceFactory.ts +11 -0
  300. package/src/runtime/InMemoryLiveWorkflowRepository.ts +20 -0
  301. package/src/runtime/RunIntentService.ts +175 -0
  302. package/src/runtime/RunIntentServiceFactory.ts +11 -0
  303. package/src/runtime/WorkflowRepositoryWebhookTriggerMatcher.ts +144 -0
  304. package/src/runtime/WorkflowRepositoryWebhookTriggerMatcherFactory.ts +13 -0
  305. package/src/runtime/index.ts +9 -0
  306. package/src/runtime-types/InjectableRuntimeDecoratorComposerRegistry.ts +25 -0
  307. package/src/runtime-types/PersistedRuntimeTypeMetadataStoreRegistry.ts +46 -0
  308. package/src/runtime-types/PersistedRuntimeTypeNameResolver.ts +14 -0
  309. package/src/runtime-types/StackTraceCallSitePathResolver.ts +25 -0
  310. package/src/runtime-types/persistedRuntimeTypeModelRegistry.ts +33 -0
  311. package/src/runtime-types/runtimeTypeDecorators.types.ts +46 -0
  312. package/src/scheduler/ConfigDrivenOffloadPolicy.ts +28 -0
  313. package/src/scheduler/DefaultDrivingScheduler.ts +100 -0
  314. package/src/scheduler/HintOnlyOffloadPolicy.ts +9 -0
  315. package/src/scheduler/InlineDrivingScheduler.ts +145 -0
  316. package/src/scheduler/InlineDrivingSchedulerFactory.ts +9 -0
  317. package/src/scheduler/LocalOnlyScheduler.ts +7 -0
  318. package/src/serialization/ItemsInputNormalizer.ts +36 -0
  319. package/src/testing/RejectingCredentialSessionService.ts +15 -0
  320. package/src/testing.ts +6 -0
  321. package/src/types/index.ts +12 -0
  322. package/src/workflow/definition/ConnectionInvocationIdFactory.ts +17 -0
  323. package/src/workflow/definition/ConnectionNodeIdFactory.ts +42 -0
  324. package/src/workflow/definition/WorkflowExecutableNodeClassifier.ts +71 -0
  325. package/src/workflow/definition/WorkflowExecutableNodeClassifierFactory.ts +9 -0
  326. package/src/workflow/dsl/ChainCursorResolver.ts +103 -0
  327. package/src/workflow/dsl/WhenBuilder.ts +57 -0
  328. package/src/workflow/dsl/WorkflowBuilder.ts +55 -0
  329. package/src/workflow/dsl/workflowBuilderTypes.ts +63 -0
  330. package/src/workflow/graph/DefaultWorkflowGraphFactory.ts +8 -0
  331. package/src/workflow/graph/ExecutableGraph.ts +24 -0
  332. package/src/workflow/index.ts +11 -0
  333. package/src/workflowSnapshots/MissingRuntimeExecutionMarker.ts +5 -0
  334. package/src/workflowSnapshots/MissingRuntimeFallbacksFactory.ts +27 -0
  335. package/src/workflowSnapshots/MissingRuntimeNode.ts +12 -0
  336. package/src/workflowSnapshots/MissingRuntimeNodeConfig.ts +14 -0
  337. package/src/workflowSnapshots/MissingRuntimeNodeToken.ts +1 -0
  338. package/src/workflowSnapshots/MissingRuntimeTrigger.ts +16 -0
  339. package/src/workflowSnapshots/MissingRuntimeTriggerConfig.ts +14 -0
  340. package/src/workflowSnapshots/MissingRuntimeTriggerToken.ts +1 -0
  341. package/src/workflowSnapshots/PersistedRuntimeTypeIdFactory.ts +19 -0
  342. package/src/workflowSnapshots/PersistedWorkflowTokenRegistry.ts +89 -0
  343. package/src/workflowSnapshots/PersistedWorkflowTokenRegistryFactory.ts +2 -0
  344. package/src/workflowSnapshots/WorkflowSnapshotCodec.ts +177 -0
  345. package/src/workflowSnapshots/WorkflowSnapshotResolver.ts +102 -0
  346. package/src/workflowSnapshots/index.ts +12 -0
  347. package/tsconfig.json +9 -0
  348. package/tsdown.config.ts +10 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PersistedWorkflowSnapshotFactory-GyLfRuiJ.js","names":["tokenRegistry: PersistedWorkflowTokenRegistryLike","fallback: Record<string, unknown>","tokenRegistry: PersistedWorkflowTokenRegistryLike"],"sources":["../src/engine/adapters/registry/InMemoryWorkflowRegistry.ts","../src/engine/materialization/PersistedWorkflowConfigSerializer.ts","../src/engine/materialization/PersistedWorkflowSnapshotFactory.ts"],"sourcesContent":["import type { WorkflowCatalog, WorkflowDefinition, WorkflowId } from \"../../../types\";\n\nexport class InMemoryWorkflowRegistry implements WorkflowCatalog {\n private readonly workflowsById = new Map<WorkflowId, WorkflowDefinition>();\n\n setWorkflows(workflows: ReadonlyArray<WorkflowDefinition>): void {\n this.workflowsById.clear();\n for (const workflow of workflows) {\n this.workflowsById.set(workflow.id, workflow);\n }\n }\n\n list(): ReadonlyArray<WorkflowDefinition> {\n return [...this.workflowsById.values()];\n }\n\n get(workflowId: WorkflowId): WorkflowDefinition | undefined {\n return this.workflowsById.get(workflowId);\n }\n}\n","import type { TypeToken } from \"../../di\";\nimport type { NodeConfigBase, PersistedTokenId, PersistedWorkflowTokenRegistryLike } from \"../../types\";\n\nexport class PersistedWorkflowConfigSerializer {\n constructor(private readonly tokenRegistry: PersistedWorkflowTokenRegistryLike) {}\n\n create(config: NodeConfigBase): unknown {\n try {\n const cloned = JSON.parse(JSON.stringify(config)) as Record<string, unknown>;\n this.injectTokenIds(cloned, config as unknown as Record<string, unknown>);\n return cloned;\n } catch {\n const fallback: Record<string, unknown> = {\n kind: config.kind,\n name: config.name,\n id: config.id,\n icon: config.icon,\n execution: config.execution,\n };\n this.injectTokenIds(fallback, config as unknown as Record<string, unknown>);\n return fallback;\n }\n }\n\n private injectTokenIds(target: Record<string, unknown>, source: Record<string, unknown>): void {\n const type = this.asTypeToken(source.type);\n if (type) {\n const tokenId = this.tokenRegistry.getTokenId(type) ?? this.tokenName(type);\n target.tokenId = tokenId;\n }\n for (const [key, value] of Object.entries(source)) {\n if (key === \"type\" || value == null) continue;\n if (Array.isArray(value)) {\n const arr = target[key];\n if (Array.isArray(arr)) {\n value.forEach((item, i) => {\n if (item && typeof item === \"object\" && arr[i] && typeof arr[i] === \"object\") {\n this.injectTokenIds(arr[i] as Record<string, unknown>, item as Record<string, unknown>);\n }\n });\n }\n continue;\n }\n if (typeof value === \"object\") {\n const t = target[key];\n if (t && typeof t === \"object\") {\n this.injectTokenIds(t as Record<string, unknown>, value as Record<string, unknown>);\n }\n }\n }\n }\n\n private tokenName(token: TypeToken<unknown>): PersistedTokenId {\n if (typeof token === \"function\" && token.name) return token.name as PersistedTokenId;\n if (typeof token === \"string\") return token as PersistedTokenId;\n return \"unknown\" as PersistedTokenId;\n }\n\n private asTypeToken(value: unknown): TypeToken<unknown> | undefined {\n if (typeof value === \"function\" || typeof value === \"string\" || typeof value === \"symbol\") {\n return value as TypeToken<unknown>;\n }\n return undefined;\n }\n}\n","import type { TypeToken } from \"../../di\";\nimport type {\n PersistedTokenId,\n PersistedWorkflowSnapshot,\n PersistedWorkflowTokenRegistryLike,\n WorkflowDefinition,\n} from \"../../types\";\n\nimport { PersistedWorkflowConfigSerializer } from \"./PersistedWorkflowConfigSerializer\";\n\nexport class PersistedWorkflowSnapshotFactory {\n private readonly configSerializer: PersistedWorkflowConfigSerializer;\n\n constructor(private readonly tokenRegistry: PersistedWorkflowTokenRegistryLike) {\n this.configSerializer = new PersistedWorkflowConfigSerializer(tokenRegistry);\n }\n\n create(workflow: WorkflowDefinition): PersistedWorkflowSnapshot {\n return {\n id: workflow.id,\n name: workflow.name,\n workflowErrorHandlerConfigured: workflow.workflowErrorHandler !== undefined,\n ...(workflow.connections !== undefined && workflow.connections.length > 0\n ? { connections: workflow.connections }\n : {}),\n nodes: workflow.nodes.map((node) => {\n const nodeTokenId = this.resolveTokenId(node.type);\n const configTokenId = this.resolveTokenId(node.config.type);\n return {\n id: node.id,\n kind: node.kind,\n name: node.name,\n nodeTokenId,\n configTokenId,\n tokenName: this.resolveTokenName(node.type),\n configTokenName: this.resolveTokenName(node.config?.type),\n config: this.configSerializer.create(node.config),\n };\n }),\n edges: workflow.edges.map((edge) => ({\n from: { nodeId: edge.from.nodeId, output: edge.from.output },\n to: { nodeId: edge.to.nodeId, input: edge.to.input },\n })),\n };\n }\n\n private resolveTokenId(token: TypeToken<unknown>): PersistedTokenId {\n const id = this.tokenRegistry.getTokenId(token);\n if (id) return id;\n const name = typeof token === \"function\" && token.name ? token.name : typeof token === \"string\" ? token : \"unknown\";\n return name as PersistedTokenId;\n }\n\n private resolveTokenName(token: TypeToken<unknown>): string | undefined {\n return typeof token === \"function\" && token.name ? token.name : typeof token === \"string\" ? token : undefined;\n }\n}\n"],"mappings":";AAEA,IAAa,2BAAb,MAAiE;CAC/D,AAAiB,gCAAgB,IAAI,KAAqC;CAE1E,aAAa,WAAoD;AAC/D,OAAK,cAAc,OAAO;AAC1B,OAAK,MAAM,YAAY,UACrB,MAAK,cAAc,IAAI,SAAS,IAAI,SAAS;;CAIjD,OAA0C;AACxC,SAAO,CAAC,GAAG,KAAK,cAAc,QAAQ,CAAC;;CAGzC,IAAI,YAAwD;AAC1D,SAAO,KAAK,cAAc,IAAI,WAAW;;;;;;ACd7C,IAAa,oCAAb,MAA+C;CAC7C,YAAY,AAAiBA,eAAmD;EAAnD;;CAE7B,OAAO,QAAiC;AACtC,MAAI;GACF,MAAM,SAAS,KAAK,MAAM,KAAK,UAAU,OAAO,CAAC;AACjD,QAAK,eAAe,QAAQ,OAA6C;AACzE,UAAO;UACD;GACN,MAAMC,WAAoC;IACxC,MAAM,OAAO;IACb,MAAM,OAAO;IACb,IAAI,OAAO;IACX,MAAM,OAAO;IACb,WAAW,OAAO;IACnB;AACD,QAAK,eAAe,UAAU,OAA6C;AAC3E,UAAO;;;CAIX,AAAQ,eAAe,QAAiC,QAAuC;EAC7F,MAAM,OAAO,KAAK,YAAY,OAAO,KAAK;AAC1C,MAAI,KAEF,QAAO,UADS,KAAK,cAAc,WAAW,KAAK,IAAI,KAAK,UAAU,KAAK;AAG7E,OAAK,MAAM,CAAC,KAAK,UAAU,OAAO,QAAQ,OAAO,EAAE;AACjD,OAAI,QAAQ,UAAU,SAAS,KAAM;AACrC,OAAI,MAAM,QAAQ,MAAM,EAAE;IACxB,MAAM,MAAM,OAAO;AACnB,QAAI,MAAM,QAAQ,IAAI,CACpB,OAAM,SAAS,MAAM,MAAM;AACzB,SAAI,QAAQ,OAAO,SAAS,YAAY,IAAI,MAAM,OAAO,IAAI,OAAO,SAClE,MAAK,eAAe,IAAI,IAA+B,KAAgC;MAEzF;AAEJ;;AAEF,OAAI,OAAO,UAAU,UAAU;IAC7B,MAAM,IAAI,OAAO;AACjB,QAAI,KAAK,OAAO,MAAM,SACpB,MAAK,eAAe,GAA8B,MAAiC;;;;CAM3F,AAAQ,UAAU,OAA6C;AAC7D,MAAI,OAAO,UAAU,cAAc,MAAM,KAAM,QAAO,MAAM;AAC5D,MAAI,OAAO,UAAU,SAAU,QAAO;AACtC,SAAO;;CAGT,AAAQ,YAAY,OAAgD;AAClE,MAAI,OAAO,UAAU,cAAc,OAAO,UAAU,YAAY,OAAO,UAAU,SAC/E,QAAO;;;;;;AClDb,IAAa,mCAAb,MAA8C;CAC5C,AAAiB;CAEjB,YAAY,AAAiBC,eAAmD;EAAnD;AAC3B,OAAK,mBAAmB,IAAI,kCAAkC,cAAc;;CAG9E,OAAO,UAAyD;AAC9D,SAAO;GACL,IAAI,SAAS;GACb,MAAM,SAAS;GACf,gCAAgC,SAAS,yBAAyB;GAClE,GAAI,SAAS,gBAAgB,UAAa,SAAS,YAAY,SAAS,IACpE,EAAE,aAAa,SAAS,aAAa,GACrC,EAAE;GACN,OAAO,SAAS,MAAM,KAAK,SAAS;IAClC,MAAM,cAAc,KAAK,eAAe,KAAK,KAAK;IAClD,MAAM,gBAAgB,KAAK,eAAe,KAAK,OAAO,KAAK;AAC3D,WAAO;KACL,IAAI,KAAK;KACT,MAAM,KAAK;KACX,MAAM,KAAK;KACX;KACA;KACA,WAAW,KAAK,iBAAiB,KAAK,KAAK;KAC3C,iBAAiB,KAAK,iBAAiB,KAAK,QAAQ,KAAK;KACzD,QAAQ,KAAK,iBAAiB,OAAO,KAAK,OAAO;KAClD;KACD;GACF,OAAO,SAAS,MAAM,KAAK,UAAU;IACnC,MAAM;KAAE,QAAQ,KAAK,KAAK;KAAQ,QAAQ,KAAK,KAAK;KAAQ;IAC5D,IAAI;KAAE,QAAQ,KAAK,GAAG;KAAQ,OAAO,KAAK,GAAG;KAAO;IACrD,EAAE;GACJ;;CAGH,AAAQ,eAAe,OAA6C;EAClE,MAAM,KAAK,KAAK,cAAc,WAAW,MAAM;AAC/C,MAAI,GAAI,QAAO;AAEf,SADa,OAAO,UAAU,cAAc,MAAM,OAAO,MAAM,OAAO,OAAO,UAAU,WAAW,QAAQ;;CAI5G,AAAQ,iBAAiB,OAA+C;AACtE,SAAO,OAAO,UAAU,cAAc,MAAM,OAAO,MAAM,OAAO,OAAO,UAAU,WAAW,QAAQ"}
@@ -0,0 +1,102 @@
1
+ //#region src/engine/adapters/persisted-workflow/PersistedWorkflowConfigSerializer.ts
2
+ var PersistedWorkflowConfigSerializer = class {
3
+ constructor(tokenRegistry) {
4
+ this.tokenRegistry = tokenRegistry;
5
+ }
6
+ create(config) {
7
+ try {
8
+ const cloned = JSON.parse(JSON.stringify(config));
9
+ this.injectTokenIds(cloned, config);
10
+ return cloned;
11
+ } catch {
12
+ const fallback = {
13
+ kind: config.kind,
14
+ name: config.name,
15
+ id: config.id,
16
+ icon: config.icon,
17
+ execution: config.execution
18
+ };
19
+ this.injectTokenIds(fallback, config);
20
+ return fallback;
21
+ }
22
+ }
23
+ injectTokenIds(target, source) {
24
+ const type = this.asTypeToken(source.type);
25
+ if (type) target.tokenId = this.tokenRegistry.getTokenId(type) ?? this.tokenName(type);
26
+ for (const [key, value] of Object.entries(source)) {
27
+ if (key === "type" || value == null) continue;
28
+ if (Array.isArray(value)) {
29
+ const arr = target[key];
30
+ if (Array.isArray(arr)) value.forEach((item, i) => {
31
+ if (item && typeof item === "object" && arr[i] && typeof arr[i] === "object") this.injectTokenIds(arr[i], item);
32
+ });
33
+ continue;
34
+ }
35
+ if (typeof value === "object") {
36
+ const t = target[key];
37
+ if (t && typeof t === "object") this.injectTokenIds(t, value);
38
+ }
39
+ }
40
+ }
41
+ tokenName(token) {
42
+ if (typeof token === "function" && token.name) return token.name;
43
+ if (typeof token === "string") return token;
44
+ return "unknown";
45
+ }
46
+ asTypeToken(value) {
47
+ if (typeof value === "function" || typeof value === "string" || typeof value === "symbol") return value;
48
+ }
49
+ };
50
+
51
+ //#endregion
52
+ //#region src/engine/adapters/persisted-workflow/PersistedWorkflowSnapshotFactory.ts
53
+ var PersistedWorkflowSnapshotFactory = class {
54
+ configSerializer;
55
+ constructor(tokenRegistry) {
56
+ this.tokenRegistry = tokenRegistry;
57
+ this.configSerializer = new PersistedWorkflowConfigSerializer(tokenRegistry);
58
+ }
59
+ create(workflow) {
60
+ return {
61
+ id: workflow.id,
62
+ name: workflow.name,
63
+ workflowErrorHandlerConfigured: workflow.workflowErrorHandler !== void 0,
64
+ nodes: workflow.nodes.map((node) => {
65
+ const nodeTokenId = this.resolveTokenId(node.type);
66
+ const configTokenId = this.resolveTokenId(node.config.type);
67
+ return {
68
+ id: node.id,
69
+ kind: node.kind,
70
+ name: node.name,
71
+ nodeTokenId,
72
+ configTokenId,
73
+ tokenName: this.resolveTokenName(node.type),
74
+ configTokenName: this.resolveTokenName(node.config?.type),
75
+ config: this.configSerializer.create(node.config)
76
+ };
77
+ }),
78
+ edges: workflow.edges.map((edge) => ({
79
+ from: {
80
+ nodeId: edge.from.nodeId,
81
+ output: edge.from.output
82
+ },
83
+ to: {
84
+ nodeId: edge.to.nodeId,
85
+ input: edge.to.input
86
+ }
87
+ }))
88
+ };
89
+ }
90
+ resolveTokenId(token) {
91
+ const id = this.tokenRegistry.getTokenId(token);
92
+ if (id) return id;
93
+ return typeof token === "function" && token.name ? token.name : typeof token === "string" ? token : "unknown";
94
+ }
95
+ resolveTokenName(token) {
96
+ return typeof token === "function" && token.name ? token.name : typeof token === "string" ? token : void 0;
97
+ }
98
+ };
99
+
100
+ //#endregion
101
+ export { PersistedWorkflowSnapshotFactory as t };
102
+ //# sourceMappingURL=PersistedWorkflowSnapshotFactory-HTpBsBzn.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PersistedWorkflowSnapshotFactory-HTpBsBzn.js","names":["tokenRegistry: PersistedWorkflowTokenRegistryLike","fallback: Record<string, unknown>","tokenRegistry: PersistedWorkflowTokenRegistryLike"],"sources":["../src/engine/adapters/persisted-workflow/PersistedWorkflowConfigSerializer.ts","../src/engine/adapters/persisted-workflow/PersistedWorkflowSnapshotFactory.ts"],"sourcesContent":["import type { TypeToken } from \"../../../di\";\r\nimport type { NodeConfigBase, PersistedTokenId, PersistedWorkflowTokenRegistryLike } from \"../../../types\";\r\n\r\nexport class PersistedWorkflowConfigSerializer {\r\n constructor(private readonly tokenRegistry: PersistedWorkflowTokenRegistryLike) {}\r\n\r\n create(config: NodeConfigBase): unknown {\r\n try {\r\n const cloned = JSON.parse(JSON.stringify(config)) as Record<string, unknown>;\r\n this.injectTokenIds(cloned, config as unknown as Record<string, unknown>);\r\n return cloned;\r\n } catch {\r\n const fallback: Record<string, unknown> = {\r\n kind: config.kind,\r\n name: config.name,\r\n id: config.id,\r\n icon: config.icon,\r\n execution: config.execution,\r\n };\r\n this.injectTokenIds(fallback, config as unknown as Record<string, unknown>);\r\n return fallback;\r\n }\r\n }\r\n\r\n private injectTokenIds(target: Record<string, unknown>, source: Record<string, unknown>): void {\r\n const type = this.asTypeToken(source.type);\r\n if (type) {\r\n const tokenId = this.tokenRegistry.getTokenId(type) ?? this.tokenName(type);\r\n target.tokenId = tokenId;\r\n }\r\n for (const [key, value] of Object.entries(source)) {\r\n if (key === \"type\" || value == null) continue;\r\n if (Array.isArray(value)) {\r\n const arr = target[key];\r\n if (Array.isArray(arr)) {\r\n value.forEach((item, i) => {\r\n if (item && typeof item === \"object\" && arr[i] && typeof arr[i] === \"object\") {\r\n this.injectTokenIds(arr[i] as Record<string, unknown>, item as Record<string, unknown>);\r\n }\r\n });\r\n }\r\n continue;\r\n }\r\n if (typeof value === \"object\") {\r\n const t = target[key];\r\n if (t && typeof t === \"object\") {\r\n this.injectTokenIds(t as Record<string, unknown>, value as Record<string, unknown>);\r\n }\r\n }\r\n }\r\n }\r\n\r\n private tokenName(token: TypeToken<unknown>): PersistedTokenId {\r\n if (typeof token === \"function\" && token.name) return token.name as PersistedTokenId;\r\n if (typeof token === \"string\") return token as PersistedTokenId;\r\n return \"unknown\" as PersistedTokenId;\r\n }\r\n\r\n private asTypeToken(value: unknown): TypeToken<unknown> | undefined {\r\n if (typeof value === \"function\" || typeof value === \"string\" || typeof value === \"symbol\") {\r\n return value as TypeToken<unknown>;\r\n }\r\n return undefined;\r\n }\r\n}\r\n\r\n","import type { TypeToken } from \"../../../di\";\r\nimport type { PersistedTokenId, PersistedWorkflowSnapshot, PersistedWorkflowTokenRegistryLike, WorkflowDefinition } from \"../../../types\";\r\n\r\nimport { PersistedWorkflowConfigSerializer } from \"./PersistedWorkflowConfigSerializer\";\r\n\r\nexport class PersistedWorkflowSnapshotFactory {\r\n private readonly configSerializer: PersistedWorkflowConfigSerializer;\r\n\r\n constructor(private readonly tokenRegistry: PersistedWorkflowTokenRegistryLike) {\r\n this.configSerializer = new PersistedWorkflowConfigSerializer(tokenRegistry);\r\n }\r\n\r\n create(workflow: WorkflowDefinition): PersistedWorkflowSnapshot {\r\n return {\r\n id: workflow.id,\r\n name: workflow.name,\r\n workflowErrorHandlerConfigured: workflow.workflowErrorHandler !== undefined,\r\n nodes: workflow.nodes.map((node) => {\r\n const nodeTokenId = this.resolveTokenId(node.type);\r\n const configTokenId = this.resolveTokenId(node.config.type);\r\n return {\r\n id: node.id,\r\n kind: node.kind,\r\n name: node.name,\r\n nodeTokenId,\r\n configTokenId,\r\n tokenName: this.resolveTokenName(node.type),\r\n configTokenName: this.resolveTokenName(node.config?.type),\r\n config: this.configSerializer.create(node.config),\r\n };\r\n }),\r\n edges: workflow.edges.map((edge) => ({\r\n from: { nodeId: edge.from.nodeId, output: edge.from.output },\r\n to: { nodeId: edge.to.nodeId, input: edge.to.input },\r\n })),\r\n };\r\n }\r\n\r\n private resolveTokenId(token: TypeToken<unknown>): PersistedTokenId {\r\n const id = this.tokenRegistry.getTokenId(token);\r\n if (id) return id;\r\n const name = typeof token === \"function\" && token.name ? token.name : typeof token === \"string\" ? token : \"unknown\";\r\n return name as PersistedTokenId;\r\n }\r\n\r\n private resolveTokenName(token: TypeToken<unknown>): string | undefined {\r\n return typeof token === \"function\" && token.name ? token.name : typeof token === \"string\" ? token : undefined;\r\n }\r\n}\r\n\r\n"],"mappings":";AAGA,IAAa,oCAAb,MAA+C;CAC7C,YAAY,AAAiBA,eAAmD;EAAnD;;CAE7B,OAAO,QAAiC;AACtC,MAAI;GACF,MAAM,SAAS,KAAK,MAAM,KAAK,UAAU,OAAO,CAAC;AACjD,QAAK,eAAe,QAAQ,OAA6C;AACzE,UAAO;UACD;GACN,MAAMC,WAAoC;IACxC,MAAM,OAAO;IACb,MAAM,OAAO;IACb,IAAI,OAAO;IACX,MAAM,OAAO;IACb,WAAW,OAAO;IACnB;AACD,QAAK,eAAe,UAAU,OAA6C;AAC3E,UAAO;;;CAIX,AAAQ,eAAe,QAAiC,QAAuC;EAC7F,MAAM,OAAO,KAAK,YAAY,OAAO,KAAK;AAC1C,MAAI,KAEF,QAAO,UADS,KAAK,cAAc,WAAW,KAAK,IAAI,KAAK,UAAU,KAAK;AAG7E,OAAK,MAAM,CAAC,KAAK,UAAU,OAAO,QAAQ,OAAO,EAAE;AACjD,OAAI,QAAQ,UAAU,SAAS,KAAM;AACrC,OAAI,MAAM,QAAQ,MAAM,EAAE;IACxB,MAAM,MAAM,OAAO;AACnB,QAAI,MAAM,QAAQ,IAAI,CACpB,OAAM,SAAS,MAAM,MAAM;AACzB,SAAI,QAAQ,OAAO,SAAS,YAAY,IAAI,MAAM,OAAO,IAAI,OAAO,SAClE,MAAK,eAAe,IAAI,IAA+B,KAAgC;MAEzF;AAEJ;;AAEF,OAAI,OAAO,UAAU,UAAU;IAC7B,MAAM,IAAI,OAAO;AACjB,QAAI,KAAK,OAAO,MAAM,SACpB,MAAK,eAAe,GAA8B,MAAiC;;;;CAM3F,AAAQ,UAAU,OAA6C;AAC7D,MAAI,OAAO,UAAU,cAAc,MAAM,KAAM,QAAO,MAAM;AAC5D,MAAI,OAAO,UAAU,SAAU,QAAO;AACtC,SAAO;;CAGT,AAAQ,YAAY,OAAgD;AAClE,MAAI,OAAO,UAAU,cAAc,OAAO,UAAU,YAAY,OAAO,UAAU,SAC/E,QAAO;;;;;;ACvDb,IAAa,mCAAb,MAA8C;CAC5C,AAAiB;CAEjB,YAAY,AAAiBC,eAAmD;EAAnD;AAC3B,OAAK,mBAAmB,IAAI,kCAAkC,cAAc;;CAG9E,OAAO,UAAyD;AAC9D,SAAO;GACL,IAAI,SAAS;GACb,MAAM,SAAS;GACf,gCAAgC,SAAS,yBAAyB;GAClE,OAAO,SAAS,MAAM,KAAK,SAAS;IAClC,MAAM,cAAc,KAAK,eAAe,KAAK,KAAK;IAClD,MAAM,gBAAgB,KAAK,eAAe,KAAK,OAAO,KAAK;AAC3D,WAAO;KACL,IAAI,KAAK;KACT,MAAM,KAAK;KACX,MAAM,KAAK;KACX;KACA;KACA,WAAW,KAAK,iBAAiB,KAAK,KAAK;KAC3C,iBAAiB,KAAK,iBAAiB,KAAK,QAAQ,KAAK;KACzD,QAAQ,KAAK,iBAAiB,OAAO,KAAK,OAAO;KAClD;KACD;GACF,OAAO,SAAS,MAAM,KAAK,UAAU;IACnC,MAAM;KAAE,QAAQ,KAAK,KAAK;KAAQ,QAAQ,KAAK,KAAK;KAAQ;IAC5D,IAAI;KAAE,QAAQ,KAAK,GAAG;KAAQ,OAAO,KAAK,GAAG;KAAO;IACrD,EAAE;GACJ;;CAGH,AAAQ,eAAe,OAA6C;EAClE,MAAM,KAAK,KAAK,cAAc,WAAW,MAAM;AAC/C,MAAI,GAAI,QAAO;AAEf,SADa,OAAO,UAAU,cAAc,MAAM,OAAO,MAAM,OAAO,OAAO,UAAU,WAAW,QAAQ;;CAI5G,AAAQ,iBAAiB,OAA+C;AACtE,SAAO,OAAO,UAAU,cAAc,MAAM,OAAO,MAAM,OAAO,OAAO,UAAU,WAAW,QAAQ"}
@@ -0,0 +1,141 @@
1
+
2
+ //#region src/engine/adapters/registry/InMemoryWorkflowCatalog.ts
3
+ var InMemoryWorkflowCatalog = class {
4
+ workflowsById = /* @__PURE__ */ new Map();
5
+ setWorkflows(workflows) {
6
+ this.workflowsById.clear();
7
+ for (const workflow of workflows) this.workflowsById.set(workflow.id, workflow);
8
+ }
9
+ list() {
10
+ return [...this.workflowsById.values()];
11
+ }
12
+ get(workflowId) {
13
+ return this.workflowsById.get(workflowId);
14
+ }
15
+ };
16
+ /**
17
+ * @deprecated Use {@link InMemoryWorkflowCatalog}. Kept for older tests and consumer scaffolds.
18
+ */
19
+ const InMemoryWorkflowRegistry = InMemoryWorkflowCatalog;
20
+
21
+ //#endregion
22
+ //#region src/engine/materialization/PersistedWorkflowConfigSerializer.ts
23
+ var PersistedWorkflowConfigSerializer = class {
24
+ constructor(tokenRegistry) {
25
+ this.tokenRegistry = tokenRegistry;
26
+ }
27
+ create(config) {
28
+ try {
29
+ const cloned = JSON.parse(JSON.stringify(config));
30
+ this.injectTokenIds(cloned, config);
31
+ return cloned;
32
+ } catch {
33
+ const fallback = {
34
+ kind: config.kind,
35
+ name: config.name,
36
+ id: config.id,
37
+ icon: config.icon,
38
+ execution: config.execution
39
+ };
40
+ this.injectTokenIds(fallback, config);
41
+ return fallback;
42
+ }
43
+ }
44
+ injectTokenIds(target, source) {
45
+ const type = this.asTypeToken(source.type);
46
+ if (type) target.tokenId = this.tokenRegistry.getTokenId(type) ?? this.tokenName(type);
47
+ for (const [key, value] of Object.entries(source)) {
48
+ if (key === "type" || value == null) continue;
49
+ if (Array.isArray(value)) {
50
+ const arr = target[key];
51
+ if (Array.isArray(arr)) value.forEach((item, i) => {
52
+ if (item && typeof item === "object" && arr[i] && typeof arr[i] === "object") this.injectTokenIds(arr[i], item);
53
+ });
54
+ continue;
55
+ }
56
+ if (typeof value === "object") {
57
+ const t = target[key];
58
+ if (t && typeof t === "object") this.injectTokenIds(t, value);
59
+ }
60
+ }
61
+ }
62
+ tokenName(token) {
63
+ if (typeof token === "function" && token.name) return token.name;
64
+ if (typeof token === "string") return token;
65
+ return "unknown";
66
+ }
67
+ asTypeToken(value) {
68
+ if (typeof value === "function" || typeof value === "string" || typeof value === "symbol") return value;
69
+ }
70
+ };
71
+
72
+ //#endregion
73
+ //#region src/engine/materialization/PersistedWorkflowSnapshotFactory.ts
74
+ var PersistedWorkflowSnapshotFactory = class {
75
+ configSerializer;
76
+ constructor(tokenRegistry) {
77
+ this.tokenRegistry = tokenRegistry;
78
+ this.configSerializer = new PersistedWorkflowConfigSerializer(tokenRegistry);
79
+ }
80
+ create(workflow) {
81
+ return {
82
+ id: workflow.id,
83
+ name: workflow.name,
84
+ workflowErrorHandlerConfigured: workflow.workflowErrorHandler !== void 0,
85
+ ...workflow.connections !== void 0 && workflow.connections.length > 0 ? { connections: workflow.connections } : {},
86
+ nodes: workflow.nodes.map((node) => {
87
+ const nodeTokenId = this.resolveTokenId(node.type);
88
+ const configTokenId = this.resolveTokenId(node.config.type);
89
+ return {
90
+ id: node.id,
91
+ kind: node.kind,
92
+ name: node.name,
93
+ nodeTokenId,
94
+ configTokenId,
95
+ tokenName: this.resolveTokenName(node.type),
96
+ configTokenName: this.resolveTokenName(node.config?.type),
97
+ config: this.configSerializer.create(node.config)
98
+ };
99
+ }),
100
+ edges: workflow.edges.map((edge) => ({
101
+ from: {
102
+ nodeId: edge.from.nodeId,
103
+ output: edge.from.output
104
+ },
105
+ to: {
106
+ nodeId: edge.to.nodeId,
107
+ input: edge.to.input
108
+ }
109
+ }))
110
+ };
111
+ }
112
+ resolveTokenId(token) {
113
+ const id = this.tokenRegistry.getTokenId(token);
114
+ if (id) return id;
115
+ return typeof token === "function" && token.name ? token.name : typeof token === "string" ? token : "unknown";
116
+ }
117
+ resolveTokenName(token) {
118
+ return typeof token === "function" && token.name ? token.name : typeof token === "string" ? token : void 0;
119
+ }
120
+ };
121
+
122
+ //#endregion
123
+ Object.defineProperty(exports, 'InMemoryWorkflowCatalog', {
124
+ enumerable: true,
125
+ get: function () {
126
+ return InMemoryWorkflowCatalog;
127
+ }
128
+ });
129
+ Object.defineProperty(exports, 'InMemoryWorkflowRegistry', {
130
+ enumerable: true,
131
+ get: function () {
132
+ return InMemoryWorkflowRegistry;
133
+ }
134
+ });
135
+ Object.defineProperty(exports, 'PersistedWorkflowSnapshotFactory', {
136
+ enumerable: true,
137
+ get: function () {
138
+ return PersistedWorkflowSnapshotFactory;
139
+ }
140
+ });
141
+ //# sourceMappingURL=PersistedWorkflowSnapshotFactory-LVmaaf3t.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PersistedWorkflowSnapshotFactory-LVmaaf3t.cjs","names":["tokenRegistry: PersistedWorkflowTokenRegistryLike","fallback: Record<string, unknown>","tokenRegistry: PersistedWorkflowTokenRegistryLike"],"sources":["../src/engine/adapters/registry/InMemoryWorkflowCatalog.ts","../src/engine/materialization/PersistedWorkflowConfigSerializer.ts","../src/engine/materialization/PersistedWorkflowSnapshotFactory.ts"],"sourcesContent":["import type { WorkflowCatalog, WorkflowDefinition, WorkflowId } from \"../../../types\";\n\nexport class InMemoryWorkflowCatalog implements WorkflowCatalog {\n private readonly workflowsById = new Map<WorkflowId, WorkflowDefinition>();\n\n setWorkflows(workflows: ReadonlyArray<WorkflowDefinition>): void {\n this.workflowsById.clear();\n for (const workflow of workflows) {\n this.workflowsById.set(workflow.id, workflow);\n }\n }\n\n list(): ReadonlyArray<WorkflowDefinition> {\n return [...this.workflowsById.values()];\n }\n\n get(workflowId: WorkflowId): WorkflowDefinition | undefined {\n return this.workflowsById.get(workflowId);\n }\n}\n\n/**\n * @deprecated Use {@link InMemoryWorkflowCatalog}. Kept for older tests and consumer scaffolds.\n */\nexport const InMemoryWorkflowRegistry = InMemoryWorkflowCatalog;\n","import type { TypeToken } from \"../../di\";\nimport type { NodeConfigBase, PersistedTokenId, PersistedWorkflowTokenRegistryLike } from \"../../types\";\n\nexport class PersistedWorkflowConfigSerializer {\n constructor(private readonly tokenRegistry: PersistedWorkflowTokenRegistryLike) {}\n\n create(config: NodeConfigBase): unknown {\n try {\n const cloned = JSON.parse(JSON.stringify(config)) as Record<string, unknown>;\n this.injectTokenIds(cloned, config as unknown as Record<string, unknown>);\n return cloned;\n } catch {\n const fallback: Record<string, unknown> = {\n kind: config.kind,\n name: config.name,\n id: config.id,\n icon: config.icon,\n execution: config.execution,\n };\n this.injectTokenIds(fallback, config as unknown as Record<string, unknown>);\n return fallback;\n }\n }\n\n private injectTokenIds(target: Record<string, unknown>, source: Record<string, unknown>): void {\n const type = this.asTypeToken(source.type);\n if (type) {\n const tokenId = this.tokenRegistry.getTokenId(type) ?? this.tokenName(type);\n target.tokenId = tokenId;\n }\n for (const [key, value] of Object.entries(source)) {\n if (key === \"type\" || value == null) continue;\n if (Array.isArray(value)) {\n const arr = target[key];\n if (Array.isArray(arr)) {\n value.forEach((item, i) => {\n if (item && typeof item === \"object\" && arr[i] && typeof arr[i] === \"object\") {\n this.injectTokenIds(arr[i] as Record<string, unknown>, item as Record<string, unknown>);\n }\n });\n }\n continue;\n }\n if (typeof value === \"object\") {\n const t = target[key];\n if (t && typeof t === \"object\") {\n this.injectTokenIds(t as Record<string, unknown>, value as Record<string, unknown>);\n }\n }\n }\n }\n\n private tokenName(token: TypeToken<unknown>): PersistedTokenId {\n if (typeof token === \"function\" && token.name) return token.name as PersistedTokenId;\n if (typeof token === \"string\") return token as PersistedTokenId;\n return \"unknown\" as PersistedTokenId;\n }\n\n private asTypeToken(value: unknown): TypeToken<unknown> | undefined {\n if (typeof value === \"function\" || typeof value === \"string\" || typeof value === \"symbol\") {\n return value as TypeToken<unknown>;\n }\n return undefined;\n }\n}\n","import type { TypeToken } from \"../../di\";\nimport type {\n PersistedTokenId,\n PersistedWorkflowSnapshot,\n PersistedWorkflowTokenRegistryLike,\n WorkflowDefinition,\n} from \"../../types\";\n\nimport { PersistedWorkflowConfigSerializer } from \"./PersistedWorkflowConfigSerializer\";\n\nexport class PersistedWorkflowSnapshotFactory {\n private readonly configSerializer: PersistedWorkflowConfigSerializer;\n\n constructor(private readonly tokenRegistry: PersistedWorkflowTokenRegistryLike) {\n this.configSerializer = new PersistedWorkflowConfigSerializer(tokenRegistry);\n }\n\n create(workflow: WorkflowDefinition): PersistedWorkflowSnapshot {\n return {\n id: workflow.id,\n name: workflow.name,\n workflowErrorHandlerConfigured: workflow.workflowErrorHandler !== undefined,\n ...(workflow.connections !== undefined && workflow.connections.length > 0\n ? { connections: workflow.connections }\n : {}),\n nodes: workflow.nodes.map((node) => {\n const nodeTokenId = this.resolveTokenId(node.type);\n const configTokenId = this.resolveTokenId(node.config.type);\n return {\n id: node.id,\n kind: node.kind,\n name: node.name,\n nodeTokenId,\n configTokenId,\n tokenName: this.resolveTokenName(node.type),\n configTokenName: this.resolveTokenName(node.config?.type),\n config: this.configSerializer.create(node.config),\n };\n }),\n edges: workflow.edges.map((edge) => ({\n from: { nodeId: edge.from.nodeId, output: edge.from.output },\n to: { nodeId: edge.to.nodeId, input: edge.to.input },\n })),\n };\n }\n\n private resolveTokenId(token: TypeToken<unknown>): PersistedTokenId {\n const id = this.tokenRegistry.getTokenId(token);\n if (id) return id;\n const name = typeof token === \"function\" && token.name ? token.name : typeof token === \"string\" ? token : \"unknown\";\n return name as PersistedTokenId;\n }\n\n private resolveTokenName(token: TypeToken<unknown>): string | undefined {\n return typeof token === \"function\" && token.name ? token.name : typeof token === \"string\" ? token : undefined;\n }\n}\n"],"mappings":";;AAEA,IAAa,0BAAb,MAAgE;CAC9D,AAAiB,gCAAgB,IAAI,KAAqC;CAE1E,aAAa,WAAoD;AAC/D,OAAK,cAAc,OAAO;AAC1B,OAAK,MAAM,YAAY,UACrB,MAAK,cAAc,IAAI,SAAS,IAAI,SAAS;;CAIjD,OAA0C;AACxC,SAAO,CAAC,GAAG,KAAK,cAAc,QAAQ,CAAC;;CAGzC,IAAI,YAAwD;AAC1D,SAAO,KAAK,cAAc,IAAI,WAAW;;;;;;AAO7C,MAAa,2BAA2B;;;;ACrBxC,IAAa,oCAAb,MAA+C;CAC7C,YAAY,AAAiBA,eAAmD;EAAnD;;CAE7B,OAAO,QAAiC;AACtC,MAAI;GACF,MAAM,SAAS,KAAK,MAAM,KAAK,UAAU,OAAO,CAAC;AACjD,QAAK,eAAe,QAAQ,OAA6C;AACzE,UAAO;UACD;GACN,MAAMC,WAAoC;IACxC,MAAM,OAAO;IACb,MAAM,OAAO;IACb,IAAI,OAAO;IACX,MAAM,OAAO;IACb,WAAW,OAAO;IACnB;AACD,QAAK,eAAe,UAAU,OAA6C;AAC3E,UAAO;;;CAIX,AAAQ,eAAe,QAAiC,QAAuC;EAC7F,MAAM,OAAO,KAAK,YAAY,OAAO,KAAK;AAC1C,MAAI,KAEF,QAAO,UADS,KAAK,cAAc,WAAW,KAAK,IAAI,KAAK,UAAU,KAAK;AAG7E,OAAK,MAAM,CAAC,KAAK,UAAU,OAAO,QAAQ,OAAO,EAAE;AACjD,OAAI,QAAQ,UAAU,SAAS,KAAM;AACrC,OAAI,MAAM,QAAQ,MAAM,EAAE;IACxB,MAAM,MAAM,OAAO;AACnB,QAAI,MAAM,QAAQ,IAAI,CACpB,OAAM,SAAS,MAAM,MAAM;AACzB,SAAI,QAAQ,OAAO,SAAS,YAAY,IAAI,MAAM,OAAO,IAAI,OAAO,SAClE,MAAK,eAAe,IAAI,IAA+B,KAAgC;MAEzF;AAEJ;;AAEF,OAAI,OAAO,UAAU,UAAU;IAC7B,MAAM,IAAI,OAAO;AACjB,QAAI,KAAK,OAAO,MAAM,SACpB,MAAK,eAAe,GAA8B,MAAiC;;;;CAM3F,AAAQ,UAAU,OAA6C;AAC7D,MAAI,OAAO,UAAU,cAAc,MAAM,KAAM,QAAO,MAAM;AAC5D,MAAI,OAAO,UAAU,SAAU,QAAO;AACtC,SAAO;;CAGT,AAAQ,YAAY,OAAgD;AAClE,MAAI,OAAO,UAAU,cAAc,OAAO,UAAU,YAAY,OAAO,UAAU,SAC/E,QAAO;;;;;;AClDb,IAAa,mCAAb,MAA8C;CAC5C,AAAiB;CAEjB,YAAY,AAAiBC,eAAmD;EAAnD;AAC3B,OAAK,mBAAmB,IAAI,kCAAkC,cAAc;;CAG9E,OAAO,UAAyD;AAC9D,SAAO;GACL,IAAI,SAAS;GACb,MAAM,SAAS;GACf,gCAAgC,SAAS,yBAAyB;GAClE,GAAI,SAAS,gBAAgB,UAAa,SAAS,YAAY,SAAS,IACpE,EAAE,aAAa,SAAS,aAAa,GACrC,EAAE;GACN,OAAO,SAAS,MAAM,KAAK,SAAS;IAClC,MAAM,cAAc,KAAK,eAAe,KAAK,KAAK;IAClD,MAAM,gBAAgB,KAAK,eAAe,KAAK,OAAO,KAAK;AAC3D,WAAO;KACL,IAAI,KAAK;KACT,MAAM,KAAK;KACX,MAAM,KAAK;KACX;KACA;KACA,WAAW,KAAK,iBAAiB,KAAK,KAAK;KAC3C,iBAAiB,KAAK,iBAAiB,KAAK,QAAQ,KAAK;KACzD,QAAQ,KAAK,iBAAiB,OAAO,KAAK,OAAO;KAClD;KACD;GACF,OAAO,SAAS,MAAM,KAAK,UAAU;IACnC,MAAM;KAAE,QAAQ,KAAK,KAAK;KAAQ,QAAQ,KAAK,KAAK;KAAQ;IAC5D,IAAI;KAAE,QAAQ,KAAK,GAAG;KAAQ,OAAO,KAAK,GAAG;KAAO;IACrD,EAAE;GACJ;;CAGH,AAAQ,eAAe,OAA6C;EAClE,MAAM,KAAK,KAAK,cAAc,WAAW,MAAM;AAC/C,MAAI,GAAI,QAAO;AAEf,SADa,OAAO,UAAU,cAAc,MAAM,OAAO,MAAM,OAAO,OAAO,UAAU,WAAW,QAAQ;;CAI5G,AAAQ,iBAAiB,OAA+C;AACtE,SAAO,OAAO,UAAU,cAAc,MAAM,OAAO,MAAM,OAAO,OAAO,UAAU,WAAW,QAAQ"}
@@ -0,0 +1,119 @@
1
+ //#region src/engine/adapters/catalog/InMemoryWorkflowCatalog.ts
2
+ var InMemoryWorkflowCatalog = class {
3
+ workflowsById = /* @__PURE__ */ new Map();
4
+ setWorkflows(workflows) {
5
+ this.workflowsById.clear();
6
+ for (const workflow of workflows) this.workflowsById.set(workflow.id, workflow);
7
+ }
8
+ list() {
9
+ return [...this.workflowsById.values()];
10
+ }
11
+ get(workflowId) {
12
+ return this.workflowsById.get(workflowId);
13
+ }
14
+ };
15
+
16
+ //#endregion
17
+ //#region src/engine/materialization/PersistedWorkflowConfigSerializer.ts
18
+ var PersistedWorkflowConfigSerializer = class {
19
+ constructor(tokenRegistry) {
20
+ this.tokenRegistry = tokenRegistry;
21
+ }
22
+ create(config) {
23
+ try {
24
+ const cloned = JSON.parse(JSON.stringify(config));
25
+ this.injectTokenIds(cloned, config);
26
+ return cloned;
27
+ } catch {
28
+ const fallback = {
29
+ kind: config.kind,
30
+ name: config.name,
31
+ id: config.id,
32
+ icon: config.icon,
33
+ execution: config.execution
34
+ };
35
+ this.injectTokenIds(fallback, config);
36
+ return fallback;
37
+ }
38
+ }
39
+ injectTokenIds(target, source) {
40
+ const type = this.asTypeToken(source.type);
41
+ if (type) target.tokenId = this.tokenRegistry.getTokenId(type) ?? this.tokenName(type);
42
+ for (const [key, value] of Object.entries(source)) {
43
+ if (key === "type" || value == null) continue;
44
+ if (Array.isArray(value)) {
45
+ const arr = target[key];
46
+ if (Array.isArray(arr)) value.forEach((item, i) => {
47
+ if (item && typeof item === "object" && arr[i] && typeof arr[i] === "object") this.injectTokenIds(arr[i], item);
48
+ });
49
+ continue;
50
+ }
51
+ if (typeof value === "object") {
52
+ const t = target[key];
53
+ if (t && typeof t === "object") this.injectTokenIds(t, value);
54
+ }
55
+ }
56
+ }
57
+ tokenName(token) {
58
+ if (typeof token === "function" && token.name) return token.name;
59
+ if (typeof token === "string") return token;
60
+ return "unknown";
61
+ }
62
+ asTypeToken(value) {
63
+ if (typeof value === "function" || typeof value === "string" || typeof value === "symbol") return value;
64
+ }
65
+ };
66
+
67
+ //#endregion
68
+ //#region src/engine/materialization/PersistedWorkflowSnapshotFactory.ts
69
+ var PersistedWorkflowSnapshotFactory = class {
70
+ configSerializer;
71
+ constructor(tokenRegistry) {
72
+ this.tokenRegistry = tokenRegistry;
73
+ this.configSerializer = new PersistedWorkflowConfigSerializer(tokenRegistry);
74
+ }
75
+ create(workflow) {
76
+ return {
77
+ id: workflow.id,
78
+ name: workflow.name,
79
+ workflowErrorHandlerConfigured: workflow.workflowErrorHandler !== void 0,
80
+ ...workflow.connections !== void 0 && workflow.connections.length > 0 ? { connections: workflow.connections } : {},
81
+ nodes: workflow.nodes.map((node) => {
82
+ const nodeTokenId = this.resolveTokenId(node.type);
83
+ const configTokenId = this.resolveTokenId(node.config.type);
84
+ return {
85
+ id: node.id,
86
+ kind: node.kind,
87
+ name: node.name,
88
+ nodeTokenId,
89
+ configTokenId,
90
+ tokenName: this.resolveTokenName(node.type),
91
+ configTokenName: this.resolveTokenName(node.config?.type),
92
+ config: this.configSerializer.create(node.config)
93
+ };
94
+ }),
95
+ edges: workflow.edges.map((edge) => ({
96
+ from: {
97
+ nodeId: edge.from.nodeId,
98
+ output: edge.from.output
99
+ },
100
+ to: {
101
+ nodeId: edge.to.nodeId,
102
+ input: edge.to.input
103
+ }
104
+ }))
105
+ };
106
+ }
107
+ resolveTokenId(token) {
108
+ const id = this.tokenRegistry.getTokenId(token);
109
+ if (id) return id;
110
+ return typeof token === "function" && token.name ? token.name : typeof token === "string" ? token : "unknown";
111
+ }
112
+ resolveTokenName(token) {
113
+ return typeof token === "function" && token.name ? token.name : typeof token === "string" ? token : void 0;
114
+ }
115
+ };
116
+
117
+ //#endregion
118
+ export { InMemoryWorkflowCatalog as n, PersistedWorkflowSnapshotFactory as t };
119
+ //# sourceMappingURL=PersistedWorkflowSnapshotFactory-PZCpo2ZS.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PersistedWorkflowSnapshotFactory-PZCpo2ZS.js","names":["tokenRegistry: PersistedWorkflowTokenRegistryLike","fallback: Record<string, unknown>","tokenRegistry: PersistedWorkflowTokenRegistryLike"],"sources":["../src/engine/adapters/catalog/InMemoryWorkflowCatalog.ts","../src/engine/materialization/PersistedWorkflowConfigSerializer.ts","../src/engine/materialization/PersistedWorkflowSnapshotFactory.ts"],"sourcesContent":["import type { WorkflowCatalog, WorkflowDefinition, WorkflowId } from \"../../../types\";\n\nexport class InMemoryWorkflowCatalog implements WorkflowCatalog {\n private readonly workflowsById = new Map<WorkflowId, WorkflowDefinition>();\n\n setWorkflows(workflows: ReadonlyArray<WorkflowDefinition>): void {\n this.workflowsById.clear();\n for (const workflow of workflows) {\n this.workflowsById.set(workflow.id, workflow);\n }\n }\n\n list(): ReadonlyArray<WorkflowDefinition> {\n return [...this.workflowsById.values()];\n }\n\n get(workflowId: WorkflowId): WorkflowDefinition | undefined {\n return this.workflowsById.get(workflowId);\n }\n}\n","import type { TypeToken } from \"../../di\";\nimport type { NodeConfigBase, PersistedTokenId, PersistedWorkflowTokenRegistryLike } from \"../../types\";\n\nexport class PersistedWorkflowConfigSerializer {\n constructor(private readonly tokenRegistry: PersistedWorkflowTokenRegistryLike) {}\n\n create(config: NodeConfigBase): unknown {\n try {\n const cloned = JSON.parse(JSON.stringify(config)) as Record<string, unknown>;\n this.injectTokenIds(cloned, config as unknown as Record<string, unknown>);\n return cloned;\n } catch {\n const fallback: Record<string, unknown> = {\n kind: config.kind,\n name: config.name,\n id: config.id,\n icon: config.icon,\n execution: config.execution,\n };\n this.injectTokenIds(fallback, config as unknown as Record<string, unknown>);\n return fallback;\n }\n }\n\n private injectTokenIds(target: Record<string, unknown>, source: Record<string, unknown>): void {\n const type = this.asTypeToken(source.type);\n if (type) {\n const tokenId = this.tokenRegistry.getTokenId(type) ?? this.tokenName(type);\n target.tokenId = tokenId;\n }\n for (const [key, value] of Object.entries(source)) {\n if (key === \"type\" || value == null) continue;\n if (Array.isArray(value)) {\n const arr = target[key];\n if (Array.isArray(arr)) {\n value.forEach((item, i) => {\n if (item && typeof item === \"object\" && arr[i] && typeof arr[i] === \"object\") {\n this.injectTokenIds(arr[i] as Record<string, unknown>, item as Record<string, unknown>);\n }\n });\n }\n continue;\n }\n if (typeof value === \"object\") {\n const t = target[key];\n if (t && typeof t === \"object\") {\n this.injectTokenIds(t as Record<string, unknown>, value as Record<string, unknown>);\n }\n }\n }\n }\n\n private tokenName(token: TypeToken<unknown>): PersistedTokenId {\n if (typeof token === \"function\" && token.name) return token.name as PersistedTokenId;\n if (typeof token === \"string\") return token as PersistedTokenId;\n return \"unknown\" as PersistedTokenId;\n }\n\n private asTypeToken(value: unknown): TypeToken<unknown> | undefined {\n if (typeof value === \"function\" || typeof value === \"string\" || typeof value === \"symbol\") {\n return value as TypeToken<unknown>;\n }\n return undefined;\n }\n}\n","import type { TypeToken } from \"../../di\";\nimport type {\n PersistedTokenId,\n PersistedWorkflowSnapshot,\n PersistedWorkflowTokenRegistryLike,\n WorkflowDefinition,\n} from \"../../types\";\n\nimport { PersistedWorkflowConfigSerializer } from \"./PersistedWorkflowConfigSerializer\";\n\nexport class PersistedWorkflowSnapshotFactory {\n private readonly configSerializer: PersistedWorkflowConfigSerializer;\n\n constructor(private readonly tokenRegistry: PersistedWorkflowTokenRegistryLike) {\n this.configSerializer = new PersistedWorkflowConfigSerializer(tokenRegistry);\n }\n\n create(workflow: WorkflowDefinition): PersistedWorkflowSnapshot {\n return {\n id: workflow.id,\n name: workflow.name,\n workflowErrorHandlerConfigured: workflow.workflowErrorHandler !== undefined,\n ...(workflow.connections !== undefined && workflow.connections.length > 0\n ? { connections: workflow.connections }\n : {}),\n nodes: workflow.nodes.map((node) => {\n const nodeTokenId = this.resolveTokenId(node.type);\n const configTokenId = this.resolveTokenId(node.config.type);\n return {\n id: node.id,\n kind: node.kind,\n name: node.name,\n nodeTokenId,\n configTokenId,\n tokenName: this.resolveTokenName(node.type),\n configTokenName: this.resolveTokenName(node.config?.type),\n config: this.configSerializer.create(node.config),\n };\n }),\n edges: workflow.edges.map((edge) => ({\n from: { nodeId: edge.from.nodeId, output: edge.from.output },\n to: { nodeId: edge.to.nodeId, input: edge.to.input },\n })),\n };\n }\n\n private resolveTokenId(token: TypeToken<unknown>): PersistedTokenId {\n const id = this.tokenRegistry.getTokenId(token);\n if (id) return id;\n const name = typeof token === \"function\" && token.name ? token.name : typeof token === \"string\" ? token : \"unknown\";\n return name as PersistedTokenId;\n }\n\n private resolveTokenName(token: TypeToken<unknown>): string | undefined {\n return typeof token === \"function\" && token.name ? token.name : typeof token === \"string\" ? token : undefined;\n }\n}\n"],"mappings":"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"}
@@ -0,0 +1,109 @@
1
+
2
+ //#region src/engine/materialization/PersistedWorkflowConfigSerializer.ts
3
+ var PersistedWorkflowConfigSerializer = class {
4
+ constructor(tokenRegistry) {
5
+ this.tokenRegistry = tokenRegistry;
6
+ }
7
+ create(config) {
8
+ try {
9
+ const cloned = JSON.parse(JSON.stringify(config));
10
+ this.injectTokenIds(cloned, config);
11
+ return cloned;
12
+ } catch {
13
+ const fallback = {
14
+ kind: config.kind,
15
+ name: config.name,
16
+ id: config.id,
17
+ icon: config.icon,
18
+ execution: config.execution
19
+ };
20
+ this.injectTokenIds(fallback, config);
21
+ return fallback;
22
+ }
23
+ }
24
+ injectTokenIds(target, source) {
25
+ const type = this.asTypeToken(source.type);
26
+ if (type) target.tokenId = this.tokenRegistry.getTokenId(type) ?? this.tokenName(type);
27
+ for (const [key, value] of Object.entries(source)) {
28
+ if (key === "type" || value == null) continue;
29
+ if (Array.isArray(value)) {
30
+ const arr = target[key];
31
+ if (Array.isArray(arr)) value.forEach((item, i) => {
32
+ if (item && typeof item === "object" && arr[i] && typeof arr[i] === "object") this.injectTokenIds(arr[i], item);
33
+ });
34
+ continue;
35
+ }
36
+ if (typeof value === "object") {
37
+ const t = target[key];
38
+ if (t && typeof t === "object") this.injectTokenIds(t, value);
39
+ }
40
+ }
41
+ }
42
+ tokenName(token) {
43
+ if (typeof token === "function" && token.name) return token.name;
44
+ if (typeof token === "string") return token;
45
+ return "unknown";
46
+ }
47
+ asTypeToken(value) {
48
+ if (typeof value === "function" || typeof value === "string" || typeof value === "symbol") return value;
49
+ }
50
+ };
51
+
52
+ //#endregion
53
+ //#region src/engine/materialization/PersistedWorkflowSnapshotFactory.ts
54
+ var PersistedWorkflowSnapshotFactory = class {
55
+ configSerializer;
56
+ constructor(tokenRegistry) {
57
+ this.tokenRegistry = tokenRegistry;
58
+ this.configSerializer = new PersistedWorkflowConfigSerializer(tokenRegistry);
59
+ }
60
+ create(workflow) {
61
+ return {
62
+ id: workflow.id,
63
+ name: workflow.name,
64
+ workflowErrorHandlerConfigured: workflow.workflowErrorHandler !== void 0,
65
+ ...workflow.connections !== void 0 && workflow.connections.length > 0 ? { connections: workflow.connections } : {},
66
+ nodes: workflow.nodes.map((node) => {
67
+ const nodeTokenId = this.resolveTokenId(node.type);
68
+ const configTokenId = this.resolveTokenId(node.config.type);
69
+ return {
70
+ id: node.id,
71
+ kind: node.kind,
72
+ name: node.name,
73
+ nodeTokenId,
74
+ configTokenId,
75
+ tokenName: this.resolveTokenName(node.type),
76
+ configTokenName: this.resolveTokenName(node.config?.type),
77
+ config: this.configSerializer.create(node.config)
78
+ };
79
+ }),
80
+ edges: workflow.edges.map((edge) => ({
81
+ from: {
82
+ nodeId: edge.from.nodeId,
83
+ output: edge.from.output
84
+ },
85
+ to: {
86
+ nodeId: edge.to.nodeId,
87
+ input: edge.to.input
88
+ }
89
+ }))
90
+ };
91
+ }
92
+ resolveTokenId(token) {
93
+ const id = this.tokenRegistry.getTokenId(token);
94
+ if (id) return id;
95
+ return typeof token === "function" && token.name ? token.name : typeof token === "string" ? token : "unknown";
96
+ }
97
+ resolveTokenName(token) {
98
+ return typeof token === "function" && token.name ? token.name : typeof token === "string" ? token : void 0;
99
+ }
100
+ };
101
+
102
+ //#endregion
103
+ Object.defineProperty(exports, 'PersistedWorkflowSnapshotFactory', {
104
+ enumerable: true,
105
+ get: function () {
106
+ return PersistedWorkflowSnapshotFactory;
107
+ }
108
+ });
109
+ //# sourceMappingURL=PersistedWorkflowSnapshotFactory-UjQ1SJev.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PersistedWorkflowSnapshotFactory-UjQ1SJev.cjs","names":["tokenRegistry: PersistedWorkflowTokenRegistryLike","fallback: Record<string, unknown>","tokenRegistry: PersistedWorkflowTokenRegistryLike"],"sources":["../src/engine/materialization/PersistedWorkflowConfigSerializer.ts","../src/engine/materialization/PersistedWorkflowSnapshotFactory.ts"],"sourcesContent":["import type { TypeToken } from \"../../di\";\nimport type { NodeConfigBase, PersistedTokenId, PersistedWorkflowTokenRegistryLike } from \"../../types\";\n\nexport class PersistedWorkflowConfigSerializer {\n constructor(private readonly tokenRegistry: PersistedWorkflowTokenRegistryLike) {}\n\n create(config: NodeConfigBase): unknown {\n try {\n const cloned = JSON.parse(JSON.stringify(config)) as Record<string, unknown>;\n this.injectTokenIds(cloned, config as unknown as Record<string, unknown>);\n return cloned;\n } catch {\n const fallback: Record<string, unknown> = {\n kind: config.kind,\n name: config.name,\n id: config.id,\n icon: config.icon,\n execution: config.execution,\n };\n this.injectTokenIds(fallback, config as unknown as Record<string, unknown>);\n return fallback;\n }\n }\n\n private injectTokenIds(target: Record<string, unknown>, source: Record<string, unknown>): void {\n const type = this.asTypeToken(source.type);\n if (type) {\n const tokenId = this.tokenRegistry.getTokenId(type) ?? this.tokenName(type);\n target.tokenId = tokenId;\n }\n for (const [key, value] of Object.entries(source)) {\n if (key === \"type\" || value == null) continue;\n if (Array.isArray(value)) {\n const arr = target[key];\n if (Array.isArray(arr)) {\n value.forEach((item, i) => {\n if (item && typeof item === \"object\" && arr[i] && typeof arr[i] === \"object\") {\n this.injectTokenIds(arr[i] as Record<string, unknown>, item as Record<string, unknown>);\n }\n });\n }\n continue;\n }\n if (typeof value === \"object\") {\n const t = target[key];\n if (t && typeof t === \"object\") {\n this.injectTokenIds(t as Record<string, unknown>, value as Record<string, unknown>);\n }\n }\n }\n }\n\n private tokenName(token: TypeToken<unknown>): PersistedTokenId {\n if (typeof token === \"function\" && token.name) return token.name as PersistedTokenId;\n if (typeof token === \"string\") return token as PersistedTokenId;\n return \"unknown\" as PersistedTokenId;\n }\n\n private asTypeToken(value: unknown): TypeToken<unknown> | undefined {\n if (typeof value === \"function\" || typeof value === \"string\" || typeof value === \"symbol\") {\n return value as TypeToken<unknown>;\n }\n return undefined;\n }\n}\n","import type { TypeToken } from \"../../di\";\nimport type {\n PersistedTokenId,\n PersistedWorkflowSnapshot,\n PersistedWorkflowTokenRegistryLike,\n WorkflowDefinition,\n} from \"../../types\";\n\nimport { PersistedWorkflowConfigSerializer } from \"./PersistedWorkflowConfigSerializer\";\n\nexport class PersistedWorkflowSnapshotFactory {\n private readonly configSerializer: PersistedWorkflowConfigSerializer;\n\n constructor(private readonly tokenRegistry: PersistedWorkflowTokenRegistryLike) {\n this.configSerializer = new PersistedWorkflowConfigSerializer(tokenRegistry);\n }\n\n create(workflow: WorkflowDefinition): PersistedWorkflowSnapshot {\n return {\n id: workflow.id,\n name: workflow.name,\n workflowErrorHandlerConfigured: workflow.workflowErrorHandler !== undefined,\n ...(workflow.connections !== undefined && workflow.connections.length > 0\n ? { connections: workflow.connections }\n : {}),\n nodes: workflow.nodes.map((node) => {\n const nodeTokenId = this.resolveTokenId(node.type);\n const configTokenId = this.resolveTokenId(node.config.type);\n return {\n id: node.id,\n kind: node.kind,\n name: node.name,\n nodeTokenId,\n configTokenId,\n tokenName: this.resolveTokenName(node.type),\n configTokenName: this.resolveTokenName(node.config?.type),\n config: this.configSerializer.create(node.config),\n };\n }),\n edges: workflow.edges.map((edge) => ({\n from: { nodeId: edge.from.nodeId, output: edge.from.output },\n to: { nodeId: edge.to.nodeId, input: edge.to.input },\n })),\n };\n }\n\n private resolveTokenId(token: TypeToken<unknown>): PersistedTokenId {\n const id = this.tokenRegistry.getTokenId(token);\n if (id) return id;\n const name = typeof token === \"function\" && token.name ? token.name : typeof token === \"string\" ? token : \"unknown\";\n return name as PersistedTokenId;\n }\n\n private resolveTokenName(token: TypeToken<unknown>): string | undefined {\n return typeof token === \"function\" && token.name ? token.name : typeof token === \"string\" ? token : undefined;\n }\n}\n"],"mappings":";;AAGA,IAAa,oCAAb,MAA+C;CAC7C,YAAY,AAAiBA,eAAmD;EAAnD;;CAE7B,OAAO,QAAiC;AACtC,MAAI;GACF,MAAM,SAAS,KAAK,MAAM,KAAK,UAAU,OAAO,CAAC;AACjD,QAAK,eAAe,QAAQ,OAA6C;AACzE,UAAO;UACD;GACN,MAAMC,WAAoC;IACxC,MAAM,OAAO;IACb,MAAM,OAAO;IACb,IAAI,OAAO;IACX,MAAM,OAAO;IACb,WAAW,OAAO;IACnB;AACD,QAAK,eAAe,UAAU,OAA6C;AAC3E,UAAO;;;CAIX,AAAQ,eAAe,QAAiC,QAAuC;EAC7F,MAAM,OAAO,KAAK,YAAY,OAAO,KAAK;AAC1C,MAAI,KAEF,QAAO,UADS,KAAK,cAAc,WAAW,KAAK,IAAI,KAAK,UAAU,KAAK;AAG7E,OAAK,MAAM,CAAC,KAAK,UAAU,OAAO,QAAQ,OAAO,EAAE;AACjD,OAAI,QAAQ,UAAU,SAAS,KAAM;AACrC,OAAI,MAAM,QAAQ,MAAM,EAAE;IACxB,MAAM,MAAM,OAAO;AACnB,QAAI,MAAM,QAAQ,IAAI,CACpB,OAAM,SAAS,MAAM,MAAM;AACzB,SAAI,QAAQ,OAAO,SAAS,YAAY,IAAI,MAAM,OAAO,IAAI,OAAO,SAClE,MAAK,eAAe,IAAI,IAA+B,KAAgC;MAEzF;AAEJ;;AAEF,OAAI,OAAO,UAAU,UAAU;IAC7B,MAAM,IAAI,OAAO;AACjB,QAAI,KAAK,OAAO,MAAM,SACpB,MAAK,eAAe,GAA8B,MAAiC;;;;CAM3F,AAAQ,UAAU,OAA6C;AAC7D,MAAI,OAAO,UAAU,cAAc,MAAM,KAAM,QAAO,MAAM;AAC5D,MAAI,OAAO,UAAU,SAAU,QAAO;AACtC,SAAO;;CAGT,AAAQ,YAAY,OAAgD;AAClE,MAAI,OAAO,UAAU,cAAc,OAAO,UAAU,YAAY,OAAO,UAAU,SAC/E,QAAO;;;;;;AClDb,IAAa,mCAAb,MAA8C;CAC5C,AAAiB;CAEjB,YAAY,AAAiBC,eAAmD;EAAnD;AAC3B,OAAK,mBAAmB,IAAI,kCAAkC,cAAc;;CAG9E,OAAO,UAAyD;AAC9D,SAAO;GACL,IAAI,SAAS;GACb,MAAM,SAAS;GACf,gCAAgC,SAAS,yBAAyB;GAClE,GAAI,SAAS,gBAAgB,UAAa,SAAS,YAAY,SAAS,IACpE,EAAE,aAAa,SAAS,aAAa,GACrC,EAAE;GACN,OAAO,SAAS,MAAM,KAAK,SAAS;IAClC,MAAM,cAAc,KAAK,eAAe,KAAK,KAAK;IAClD,MAAM,gBAAgB,KAAK,eAAe,KAAK,OAAO,KAAK;AAC3D,WAAO;KACL,IAAI,KAAK;KACT,MAAM,KAAK;KACX,MAAM,KAAK;KACX;KACA;KACA,WAAW,KAAK,iBAAiB,KAAK,KAAK;KAC3C,iBAAiB,KAAK,iBAAiB,KAAK,QAAQ,KAAK;KACzD,QAAQ,KAAK,iBAAiB,OAAO,KAAK,OAAO;KAClD;KACD;GACF,OAAO,SAAS,MAAM,KAAK,UAAU;IACnC,MAAM;KAAE,QAAQ,KAAK,KAAK;KAAQ,QAAQ,KAAK,KAAK;KAAQ;IAC5D,IAAI;KAAE,QAAQ,KAAK,GAAG;KAAQ,OAAO,KAAK,GAAG;KAAO;IACrD,EAAE;GACJ;;CAGH,AAAQ,eAAe,OAA6C;EAClE,MAAM,KAAK,KAAK,cAAc,WAAW,MAAM;AAC/C,MAAI,GAAI,QAAO;AAEf,SADa,OAAO,UAAU,cAAc,MAAM,OAAO,MAAM,OAAO,OAAO,UAAU,WAAW,QAAQ;;CAI5G,AAAQ,iBAAiB,OAA+C;AACtE,SAAO,OAAO,UAAU,cAAc,MAAM,OAAO,MAAM,OAAO,OAAO,UAAU,WAAW,QAAQ"}