@synergenius/flow-weaver 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 (466) hide show
  1. package/LICENSE +122 -0
  2. package/README.md +315 -0
  3. package/dist/annotation-generator.d.ts +45 -0
  4. package/dist/annotation-generator.js +557 -0
  5. package/dist/api/builder.d.ts +223 -0
  6. package/dist/api/builder.js +345 -0
  7. package/dist/api/compile.d.ts +92 -0
  8. package/dist/api/compile.js +149 -0
  9. package/dist/api/extract-types.d.ts +29 -0
  10. package/dist/api/extract-types.js +57 -0
  11. package/dist/api/generate-in-place.d.ts +73 -0
  12. package/dist/api/generate-in-place.js +1353 -0
  13. package/dist/api/generate.d.ts +83 -0
  14. package/dist/api/generate.js +510 -0
  15. package/dist/api/helpers.d.ts +248 -0
  16. package/dist/api/helpers.js +285 -0
  17. package/dist/api/index.d.ts +46 -0
  18. package/dist/api/index.js +45 -0
  19. package/dist/api/inline-runtime.d.ts +27 -0
  20. package/dist/api/inline-runtime.js +551 -0
  21. package/dist/api/manipulation/connections.d.ts +79 -0
  22. package/dist/api/manipulation/connections.js +151 -0
  23. package/dist/api/manipulation/index.d.ts +34 -0
  24. package/dist/api/manipulation/index.js +41 -0
  25. package/dist/api/manipulation/node-types.d.ts +123 -0
  26. package/dist/api/manipulation/node-types.js +200 -0
  27. package/dist/api/manipulation/nodes.d.ts +144 -0
  28. package/dist/api/manipulation/nodes.js +333 -0
  29. package/dist/api/manipulation/ports.d.ts +59 -0
  30. package/dist/api/manipulation/ports.js +228 -0
  31. package/dist/api/manipulation/scopes.d.ts +52 -0
  32. package/dist/api/manipulation/scopes.js +156 -0
  33. package/dist/api/manipulation/validation.d.ts +6 -0
  34. package/dist/api/manipulation/validation.js +6 -0
  35. package/dist/api/manipulation/workflow.d.ts +81 -0
  36. package/dist/api/manipulation/workflow.js +116 -0
  37. package/dist/api/manipulation.d.ts +8 -0
  38. package/dist/api/manipulation.js +8 -0
  39. package/dist/api/parse.d.ts +48 -0
  40. package/dist/api/parse.js +110 -0
  41. package/dist/api/patterns.d.ts +112 -0
  42. package/dist/api/patterns.js +306 -0
  43. package/dist/api/query.d.ts +429 -0
  44. package/dist/api/query.js +816 -0
  45. package/dist/api/templates.d.ts +98 -0
  46. package/dist/api/templates.js +117 -0
  47. package/dist/api/transform.d.ts +31 -0
  48. package/dist/api/transform.js +40 -0
  49. package/dist/api/validate.d.ts +25 -0
  50. package/dist/api/validate.js +39 -0
  51. package/dist/api/workflow-file-operations.d.ts +29 -0
  52. package/dist/api/workflow-file-operations.js +180 -0
  53. package/dist/ast/builder.d.ts +210 -0
  54. package/dist/ast/builder.js +395 -0
  55. package/dist/ast/index.d.ts +5 -0
  56. package/dist/ast/index.js +5 -0
  57. package/dist/ast/serialization-node.d.ts +6 -0
  58. package/dist/ast/serialization-node.js +30 -0
  59. package/dist/ast/serialization.d.ts +43 -0
  60. package/dist/ast/serialization.js +134 -0
  61. package/dist/ast/types.d.ts +852 -0
  62. package/dist/ast/types.js +2 -0
  63. package/dist/ast/workflow-utils.d.ts +54 -0
  64. package/dist/ast/workflow-utils.js +114 -0
  65. package/dist/body-generator.d.ts +31 -0
  66. package/dist/body-generator.js +35 -0
  67. package/dist/built-in-nodes/delay.d.ts +11 -0
  68. package/dist/built-in-nodes/delay.js +29 -0
  69. package/dist/built-in-nodes/index.d.ts +5 -0
  70. package/dist/built-in-nodes/index.js +4 -0
  71. package/dist/built-in-nodes/invoke-workflow.d.ts +13 -0
  72. package/dist/built-in-nodes/invoke-workflow.js +25 -0
  73. package/dist/built-in-nodes/mock-types.d.ts +18 -0
  74. package/dist/built-in-nodes/mock-types.js +12 -0
  75. package/dist/built-in-nodes/wait-for-event.d.ts +13 -0
  76. package/dist/built-in-nodes/wait-for-event.js +25 -0
  77. package/dist/chevrotain-parser/connect-parser.d.ts +24 -0
  78. package/dist/chevrotain-parser/connect-parser.js +98 -0
  79. package/dist/chevrotain-parser/grammar-diagrams.d.ts +29 -0
  80. package/dist/chevrotain-parser/grammar-diagrams.js +264 -0
  81. package/dist/chevrotain-parser/index.d.ts +25 -0
  82. package/dist/chevrotain-parser/index.js +27 -0
  83. package/dist/chevrotain-parser/map-parser.d.ts +33 -0
  84. package/dist/chevrotain-parser/map-parser.js +130 -0
  85. package/dist/chevrotain-parser/node-parser.d.ts +36 -0
  86. package/dist/chevrotain-parser/node-parser.js +466 -0
  87. package/dist/chevrotain-parser/path-parser.d.ts +28 -0
  88. package/dist/chevrotain-parser/path-parser.js +118 -0
  89. package/dist/chevrotain-parser/port-parser.d.ts +36 -0
  90. package/dist/chevrotain-parser/port-parser.js +442 -0
  91. package/dist/chevrotain-parser/position-parser.d.ts +20 -0
  92. package/dist/chevrotain-parser/position-parser.js +83 -0
  93. package/dist/chevrotain-parser/scope-parser.d.ts +19 -0
  94. package/dist/chevrotain-parser/scope-parser.js +104 -0
  95. package/dist/chevrotain-parser/tokens.d.ts +78 -0
  96. package/dist/chevrotain-parser/tokens.js +384 -0
  97. package/dist/chevrotain-parser/trigger-cancel-parser.d.ts +50 -0
  98. package/dist/chevrotain-parser/trigger-cancel-parser.js +282 -0
  99. package/dist/cli/commands/changelog.d.ts +13 -0
  100. package/dist/cli/commands/changelog.js +135 -0
  101. package/dist/cli/commands/compile.d.ts +64 -0
  102. package/dist/cli/commands/compile.js +278 -0
  103. package/dist/cli/commands/create.d.ts +33 -0
  104. package/dist/cli/commands/create.js +147 -0
  105. package/dist/cli/commands/describe.d.ts +68 -0
  106. package/dist/cli/commands/describe.js +377 -0
  107. package/dist/cli/commands/dev.d.ts +32 -0
  108. package/dist/cli/commands/dev.js +384 -0
  109. package/dist/cli/commands/diagram.d.ts +13 -0
  110. package/dist/cli/commands/diagram.js +33 -0
  111. package/dist/cli/commands/diff.d.ts +11 -0
  112. package/dist/cli/commands/diff.js +59 -0
  113. package/dist/cli/commands/doctor.d.ts +57 -0
  114. package/dist/cli/commands/doctor.js +719 -0
  115. package/dist/cli/commands/export.d.ts +57 -0
  116. package/dist/cli/commands/export.js +163 -0
  117. package/dist/cli/commands/grammar.d.ts +9 -0
  118. package/dist/cli/commands/grammar.js +39 -0
  119. package/dist/cli/commands/init.d.ts +59 -0
  120. package/dist/cli/commands/init.js +435 -0
  121. package/dist/cli/commands/listen.d.ts +16 -0
  122. package/dist/cli/commands/listen.js +39 -0
  123. package/dist/cli/commands/market.d.ts +52 -0
  124. package/dist/cli/commands/market.js +436 -0
  125. package/dist/cli/commands/migrate.d.ts +13 -0
  126. package/dist/cli/commands/migrate.js +89 -0
  127. package/dist/cli/commands/openapi.d.ts +37 -0
  128. package/dist/cli/commands/openapi.js +67 -0
  129. package/dist/cli/commands/pattern.d.ts +34 -0
  130. package/dist/cli/commands/pattern.js +185 -0
  131. package/dist/cli/commands/plugin.d.ts +16 -0
  132. package/dist/cli/commands/plugin.js +176 -0
  133. package/dist/cli/commands/run.d.ts +49 -0
  134. package/dist/cli/commands/run.js +191 -0
  135. package/dist/cli/commands/serve.d.ts +45 -0
  136. package/dist/cli/commands/serve.js +81 -0
  137. package/dist/cli/commands/templates.d.ts +8 -0
  138. package/dist/cli/commands/templates.js +54 -0
  139. package/dist/cli/commands/ui.d.ts +16 -0
  140. package/dist/cli/commands/ui.js +130 -0
  141. package/dist/cli/commands/validate.d.ts +12 -0
  142. package/dist/cli/commands/validate.js +247 -0
  143. package/dist/cli/commands/watch.d.ts +9 -0
  144. package/dist/cli/commands/watch.js +70 -0
  145. package/dist/cli/flow-weaver.mjs +92924 -0
  146. package/dist/cli/index.d.ts +9 -0
  147. package/dist/cli/index.js +742 -0
  148. package/dist/cli/templates/ai/mock-provider.d.ts +7 -0
  149. package/dist/cli/templates/ai/mock-provider.js +64 -0
  150. package/dist/cli/templates/ai/types.d.ts +47 -0
  151. package/dist/cli/templates/ai/types.js +5 -0
  152. package/dist/cli/templates/approvals/index.d.ts +15 -0
  153. package/dist/cli/templates/approvals/index.js +241 -0
  154. package/dist/cli/templates/index.d.ts +102 -0
  155. package/dist/cli/templates/index.js +101 -0
  156. package/dist/cli/templates/nodes/agent-router.d.ts +3 -0
  157. package/dist/cli/templates/nodes/agent-router.js +114 -0
  158. package/dist/cli/templates/nodes/aggregator.d.ts +7 -0
  159. package/dist/cli/templates/nodes/aggregator.js +63 -0
  160. package/dist/cli/templates/nodes/conversation-memory.d.ts +3 -0
  161. package/dist/cli/templates/nodes/conversation-memory.js +85 -0
  162. package/dist/cli/templates/nodes/http.d.ts +7 -0
  163. package/dist/cli/templates/nodes/http.js +80 -0
  164. package/dist/cli/templates/nodes/human-approval.d.ts +3 -0
  165. package/dist/cli/templates/nodes/human-approval.js +110 -0
  166. package/dist/cli/templates/nodes/json-extractor.d.ts +3 -0
  167. package/dist/cli/templates/nodes/json-extractor.js +119 -0
  168. package/dist/cli/templates/nodes/llm-call.d.ts +3 -0
  169. package/dist/cli/templates/nodes/llm-call.js +106 -0
  170. package/dist/cli/templates/nodes/prompt-template.d.ts +3 -0
  171. package/dist/cli/templates/nodes/prompt-template.js +52 -0
  172. package/dist/cli/templates/nodes/rag-retriever.d.ts +3 -0
  173. package/dist/cli/templates/nodes/rag-retriever.js +128 -0
  174. package/dist/cli/templates/nodes/tool-executor.d.ts +3 -0
  175. package/dist/cli/templates/nodes/tool-executor.js +108 -0
  176. package/dist/cli/templates/nodes/transformer.d.ts +7 -0
  177. package/dist/cli/templates/nodes/transformer.js +68 -0
  178. package/dist/cli/templates/nodes/validator.d.ts +7 -0
  179. package/dist/cli/templates/nodes/validator.js +62 -0
  180. package/dist/cli/templates/providers/index.d.ts +14 -0
  181. package/dist/cli/templates/providers/index.js +239 -0
  182. package/dist/cli/templates/shared/approval-types.d.ts +9 -0
  183. package/dist/cli/templates/shared/approval-types.js +31 -0
  184. package/dist/cli/templates/shared/llm-types.d.ts +15 -0
  185. package/dist/cli/templates/shared/llm-types.js +104 -0
  186. package/dist/cli/templates/workflows/aggregator.d.ts +7 -0
  187. package/dist/cli/templates/workflows/aggregator.js +104 -0
  188. package/dist/cli/templates/workflows/ai-agent-durable.d.ts +8 -0
  189. package/dist/cli/templates/workflows/ai-agent-durable.js +338 -0
  190. package/dist/cli/templates/workflows/ai-agent.d.ts +31 -0
  191. package/dist/cli/templates/workflows/ai-agent.js +326 -0
  192. package/dist/cli/templates/workflows/ai-chat.d.ts +7 -0
  193. package/dist/cli/templates/workflows/ai-chat.js +169 -0
  194. package/dist/cli/templates/workflows/ai-pipeline-durable.d.ts +8 -0
  195. package/dist/cli/templates/workflows/ai-pipeline-durable.js +330 -0
  196. package/dist/cli/templates/workflows/ai-rag.d.ts +7 -0
  197. package/dist/cli/templates/workflows/ai-rag.js +186 -0
  198. package/dist/cli/templates/workflows/ai-react.d.ts +7 -0
  199. package/dist/cli/templates/workflows/ai-react.js +294 -0
  200. package/dist/cli/templates/workflows/conditional.d.ts +12 -0
  201. package/dist/cli/templates/workflows/conditional.js +142 -0
  202. package/dist/cli/templates/workflows/error-handler.d.ts +7 -0
  203. package/dist/cli/templates/workflows/error-handler.js +147 -0
  204. package/dist/cli/templates/workflows/foreach.d.ts +7 -0
  205. package/dist/cli/templates/workflows/foreach.js +143 -0
  206. package/dist/cli/templates/workflows/sequential.d.ts +7 -0
  207. package/dist/cli/templates/workflows/sequential.js +198 -0
  208. package/dist/cli/templates/workflows/webhook.d.ts +7 -0
  209. package/dist/cli/templates/workflows/webhook.js +161 -0
  210. package/dist/cli/utils/logger.d.ts +15 -0
  211. package/dist/cli/utils/logger.js +46 -0
  212. package/dist/constants.d.ts +100 -0
  213. package/dist/constants.js +125 -0
  214. package/dist/defaults.d.ts +3 -0
  215. package/dist/defaults.js +3 -0
  216. package/dist/deployment/config/defaults.d.ts +29 -0
  217. package/dist/deployment/config/defaults.js +98 -0
  218. package/dist/deployment/config/loader.d.ts +24 -0
  219. package/dist/deployment/config/loader.js +236 -0
  220. package/dist/deployment/config/types.d.ts +117 -0
  221. package/dist/deployment/config/types.js +5 -0
  222. package/dist/deployment/core/adapters.d.ts +90 -0
  223. package/dist/deployment/core/adapters.js +251 -0
  224. package/dist/deployment/core/executor.d.ts +62 -0
  225. package/dist/deployment/core/executor.js +197 -0
  226. package/dist/deployment/core/formatters.d.ts +57 -0
  227. package/dist/deployment/core/formatters.js +170 -0
  228. package/dist/deployment/index.d.ts +31 -0
  229. package/dist/deployment/index.js +48 -0
  230. package/dist/deployment/openapi/generator.d.ts +146 -0
  231. package/dist/deployment/openapi/generator.js +347 -0
  232. package/dist/deployment/openapi/schema-converter.d.ts +49 -0
  233. package/dist/deployment/openapi/schema-converter.js +192 -0
  234. package/dist/deployment/targets/base.d.ts +316 -0
  235. package/dist/deployment/targets/base.js +823 -0
  236. package/dist/deployment/targets/cloudflare.d.ts +23 -0
  237. package/dist/deployment/targets/cloudflare.js +1125 -0
  238. package/dist/deployment/targets/inngest.d.ts +38 -0
  239. package/dist/deployment/targets/inngest.js +926 -0
  240. package/dist/deployment/targets/lambda.d.ts +23 -0
  241. package/dist/deployment/targets/lambda.js +1289 -0
  242. package/dist/deployment/targets/vercel.d.ts +23 -0
  243. package/dist/deployment/targets/vercel.js +886 -0
  244. package/dist/deployment/types.d.ts +183 -0
  245. package/dist/deployment/types.js +8 -0
  246. package/dist/diagram/geometry.d.ts +26 -0
  247. package/dist/diagram/geometry.js +850 -0
  248. package/dist/diagram/index.d.ts +16 -0
  249. package/dist/diagram/index.js +42 -0
  250. package/dist/diagram/layout.d.ts +11 -0
  251. package/dist/diagram/layout.js +143 -0
  252. package/dist/diagram/orthogonal-router.d.ts +79 -0
  253. package/dist/diagram/orthogonal-router.js +568 -0
  254. package/dist/diagram/renderer.d.ts +3 -0
  255. package/dist/diagram/renderer.js +207 -0
  256. package/dist/diagram/theme.d.ts +20 -0
  257. package/dist/diagram/theme.js +189 -0
  258. package/dist/diagram/types.d.ts +70 -0
  259. package/dist/diagram/types.js +2 -0
  260. package/dist/diff/WorkflowDiffer.d.ts +13 -0
  261. package/dist/diff/WorkflowDiffer.js +429 -0
  262. package/dist/diff/formatDiff.d.ts +10 -0
  263. package/dist/diff/formatDiff.js +220 -0
  264. package/dist/diff/impact.d.ts +29 -0
  265. package/dist/diff/impact.js +119 -0
  266. package/dist/diff/index.d.ts +10 -0
  267. package/dist/diff/index.js +9 -0
  268. package/dist/diff/types.d.ts +138 -0
  269. package/dist/diff/types.js +35 -0
  270. package/dist/doc-metadata/extractors/annotations.d.ts +56 -0
  271. package/dist/doc-metadata/extractors/annotations.js +337 -0
  272. package/dist/doc-metadata/extractors/cli-commands.d.ts +17 -0
  273. package/dist/doc-metadata/extractors/cli-commands.js +355 -0
  274. package/dist/doc-metadata/extractors/mcp-tools.d.ts +16 -0
  275. package/dist/doc-metadata/extractors/mcp-tools.js +689 -0
  276. package/dist/doc-metadata/extractors/plugin-api.d.ts +19 -0
  277. package/dist/doc-metadata/extractors/plugin-api.js +279 -0
  278. package/dist/doc-metadata/index.d.ts +5 -0
  279. package/dist/doc-metadata/index.js +4 -0
  280. package/dist/doc-metadata/types.d.ts +120 -0
  281. package/dist/doc-metadata/types.js +5 -0
  282. package/dist/editor-completions/annotationValues.d.ts +12 -0
  283. package/dist/editor-completions/annotationValues.js +138 -0
  284. package/dist/editor-completions/contextParser.d.ts +40 -0
  285. package/dist/editor-completions/contextParser.js +410 -0
  286. package/dist/editor-completions/dataTypes.d.ts +16 -0
  287. package/dist/editor-completions/dataTypes.js +95 -0
  288. package/dist/editor-completions/goToDefinition.d.ts +27 -0
  289. package/dist/editor-completions/goToDefinition.js +112 -0
  290. package/dist/editor-completions/index.d.ts +39 -0
  291. package/dist/editor-completions/index.js +181 -0
  292. package/dist/editor-completions/jsDocAnnotations.d.ts +29 -0
  293. package/dist/editor-completions/jsDocAnnotations.js +357 -0
  294. package/dist/editor-completions/modifierCompletions.d.ts +17 -0
  295. package/dist/editor-completions/modifierCompletions.js +197 -0
  296. package/dist/editor-completions/types.d.ts +119 -0
  297. package/dist/editor-completions/types.js +8 -0
  298. package/dist/export/index.d.ts +68 -0
  299. package/dist/export/index.js +1074 -0
  300. package/dist/export/templates.d.ts +24 -0
  301. package/dist/export/templates.js +186 -0
  302. package/dist/friendly-errors.d.ts +35 -0
  303. package/dist/friendly-errors.js +375 -0
  304. package/dist/function-like.d.ts +38 -0
  305. package/dist/function-like.js +83 -0
  306. package/dist/generated-branding.d.ts +16 -0
  307. package/dist/generated-branding.js +22 -0
  308. package/dist/generator/async-detection.d.ts +27 -0
  309. package/dist/generator/async-detection.js +56 -0
  310. package/dist/generator/code-utils.d.ts +76 -0
  311. package/dist/generator/code-utils.js +410 -0
  312. package/dist/generator/control-flow.d.ts +54 -0
  313. package/dist/generator/control-flow.js +284 -0
  314. package/dist/generator/inngest.d.ts +53 -0
  315. package/dist/generator/inngest.js +1126 -0
  316. package/dist/generator/scope-function-generator.d.ts +78 -0
  317. package/dist/generator/scope-function-generator.js +360 -0
  318. package/dist/generator/unified.d.ts +42 -0
  319. package/dist/generator/unified.js +1504 -0
  320. package/dist/generator.d.ts +54 -0
  321. package/dist/generator.js +100 -0
  322. package/dist/index.d.ts +85 -0
  323. package/dist/index.js +89 -0
  324. package/dist/jsdoc-parser.d.ts +308 -0
  325. package/dist/jsdoc-parser.js +923 -0
  326. package/dist/jsdoc-port-sync/constants.d.ts +41 -0
  327. package/dist/jsdoc-port-sync/constants.js +103 -0
  328. package/dist/jsdoc-port-sync/diff.d.ts +76 -0
  329. package/dist/jsdoc-port-sync/diff.js +319 -0
  330. package/dist/jsdoc-port-sync/index.d.ts +42 -0
  331. package/dist/jsdoc-port-sync/index.js +45 -0
  332. package/dist/jsdoc-port-sync/port-parser.d.ts +68 -0
  333. package/dist/jsdoc-port-sync/port-parser.js +579 -0
  334. package/dist/jsdoc-port-sync/rename.d.ts +21 -0
  335. package/dist/jsdoc-port-sync/rename.js +256 -0
  336. package/dist/jsdoc-port-sync/signature-parser.d.ts +104 -0
  337. package/dist/jsdoc-port-sync/signature-parser.js +559 -0
  338. package/dist/jsdoc-port-sync/sync.d.ts +36 -0
  339. package/dist/jsdoc-port-sync/sync.js +644 -0
  340. package/dist/jsdoc-port-sync.d.ts +10 -0
  341. package/dist/jsdoc-port-sync.js +10 -0
  342. package/dist/marketplace/index.d.ts +11 -0
  343. package/dist/marketplace/index.js +10 -0
  344. package/dist/marketplace/manifest.d.ts +32 -0
  345. package/dist/marketplace/manifest.js +176 -0
  346. package/dist/marketplace/registry.d.ts +30 -0
  347. package/dist/marketplace/registry.js +100 -0
  348. package/dist/marketplace/types.d.ts +154 -0
  349. package/dist/marketplace/types.js +9 -0
  350. package/dist/marketplace/validator.d.ts +13 -0
  351. package/dist/marketplace/validator.js +131 -0
  352. package/dist/mcp/auto-registration.d.ts +3 -0
  353. package/dist/mcp/auto-registration.js +62 -0
  354. package/dist/mcp/editor-connection.d.ts +50 -0
  355. package/dist/mcp/editor-connection.js +125 -0
  356. package/dist/mcp/event-buffer.d.ts +62 -0
  357. package/dist/mcp/event-buffer.js +150 -0
  358. package/dist/mcp/index.d.ts +12 -0
  359. package/dist/mcp/index.js +11 -0
  360. package/dist/mcp/resources.d.ts +14 -0
  361. package/dist/mcp/resources.js +55 -0
  362. package/dist/mcp/response-utils.d.ts +63 -0
  363. package/dist/mcp/response-utils.js +89 -0
  364. package/dist/mcp/server.d.ts +4 -0
  365. package/dist/mcp/server.js +99 -0
  366. package/dist/mcp/tools-diagram.d.ts +8 -0
  367. package/dist/mcp/tools-diagram.js +53 -0
  368. package/dist/mcp/tools-editor.d.ts +5 -0
  369. package/dist/mcp/tools-editor.js +190 -0
  370. package/dist/mcp/tools-export.d.ts +9 -0
  371. package/dist/mcp/tools-export.js +180 -0
  372. package/dist/mcp/tools-marketplace.d.ts +9 -0
  373. package/dist/mcp/tools-marketplace.js +132 -0
  374. package/dist/mcp/tools-pattern.d.ts +3 -0
  375. package/dist/mcp/tools-pattern.js +783 -0
  376. package/dist/mcp/tools-query.d.ts +3 -0
  377. package/dist/mcp/tools-query.js +364 -0
  378. package/dist/mcp/tools-template.d.ts +10 -0
  379. package/dist/mcp/tools-template.js +119 -0
  380. package/dist/mcp/types.d.ts +70 -0
  381. package/dist/mcp/types.js +8 -0
  382. package/dist/mcp/workflow-executor.d.ts +47 -0
  383. package/dist/mcp/workflow-executor.js +133 -0
  384. package/dist/migration/registry.d.ts +30 -0
  385. package/dist/migration/registry.js +29 -0
  386. package/dist/node-types-generator.d.ts +49 -0
  387. package/dist/node-types-generator.js +139 -0
  388. package/dist/npm-packages.d.ts +56 -0
  389. package/dist/npm-packages.js +255 -0
  390. package/dist/parser.d.ts +204 -0
  391. package/dist/parser.js +2100 -0
  392. package/dist/plugin/PluginPanel.d.ts +12 -0
  393. package/dist/plugin/PluginPanel.js +5 -0
  394. package/dist/plugin/index.d.ts +13 -0
  395. package/dist/plugin/index.js +14 -0
  396. package/dist/plugin/types.d.ts +75 -0
  397. package/dist/plugin/types.js +8 -0
  398. package/dist/resolve-package-types.d.ts +17 -0
  399. package/dist/resolve-package-types.js +123 -0
  400. package/dist/runtime/CancellationError.d.ts +11 -0
  401. package/dist/runtime/CancellationError.js +20 -0
  402. package/dist/runtime/ExecutionContext.d.ts +146 -0
  403. package/dist/runtime/ExecutionContext.js +235 -0
  404. package/dist/runtime/builtin-functions.d.ts +8 -0
  405. package/dist/runtime/builtin-functions.js +549 -0
  406. package/dist/runtime/events.d.ts +50 -0
  407. package/dist/runtime/events.js +2 -0
  408. package/dist/runtime/function-registry.d.ts +59 -0
  409. package/dist/runtime/function-registry.js +66 -0
  410. package/dist/runtime/index.d.ts +7 -0
  411. package/dist/runtime/index.js +7 -0
  412. package/dist/runtime/parameter-resolver.d.ts +62 -0
  413. package/dist/runtime/parameter-resolver.js +113 -0
  414. package/dist/server/index.d.ts +7 -0
  415. package/dist/server/index.js +6 -0
  416. package/dist/server/types.d.ts +93 -0
  417. package/dist/server/types.js +5 -0
  418. package/dist/server/webhook-server.d.ts +50 -0
  419. package/dist/server/webhook-server.js +269 -0
  420. package/dist/server/workflow-registry.d.ts +61 -0
  421. package/dist/server/workflow-registry.js +202 -0
  422. package/dist/shared-project.d.ts +9 -0
  423. package/dist/shared-project.js +28 -0
  424. package/dist/sugar-optimizer.d.ts +40 -0
  425. package/dist/sugar-optimizer.js +387 -0
  426. package/dist/testing/assertions.d.ts +51 -0
  427. package/dist/testing/assertions.js +127 -0
  428. package/dist/testing/index.d.ts +30 -0
  429. package/dist/testing/index.js +24 -0
  430. package/dist/testing/mock-approval.d.ts +81 -0
  431. package/dist/testing/mock-approval.js +98 -0
  432. package/dist/testing/mock-llm.d.ts +124 -0
  433. package/dist/testing/mock-llm.js +119 -0
  434. package/dist/testing/recorder.d.ts +72 -0
  435. package/dist/testing/recorder.js +70 -0
  436. package/dist/testing/replayer.d.ts +56 -0
  437. package/dist/testing/replayer.js +143 -0
  438. package/dist/testing/token-tracker.d.ts +71 -0
  439. package/dist/testing/token-tracker.js +94 -0
  440. package/dist/type-checker.d.ts +42 -0
  441. package/dist/type-checker.js +190 -0
  442. package/dist/type-mappings.d.ts +29 -0
  443. package/dist/type-mappings.js +125 -0
  444. package/dist/types/branded-ports.d.ts +151 -0
  445. package/dist/types/branded-ports.js +121 -0
  446. package/dist/types/index.d.ts +5 -0
  447. package/dist/types/index.js +5 -0
  448. package/dist/types.d.ts +139 -0
  449. package/dist/types.js +15 -0
  450. package/dist/utils/error-utils.d.ts +15 -0
  451. package/dist/utils/error-utils.js +27 -0
  452. package/dist/utils/lru-cache.d.ts +15 -0
  453. package/dist/utils/lru-cache.js +40 -0
  454. package/dist/utils/port-ordering.d.ts +26 -0
  455. package/dist/utils/port-ordering.js +88 -0
  456. package/dist/utils/port-tag-utils.d.ts +23 -0
  457. package/dist/utils/port-tag-utils.js +41 -0
  458. package/dist/utils/string-distance.d.ts +14 -0
  459. package/dist/utils/string-distance.js +56 -0
  460. package/dist/validation/agent-detection.d.ts +33 -0
  461. package/dist/validation/agent-detection.js +115 -0
  462. package/dist/validation/agent-rules.d.ts +48 -0
  463. package/dist/validation/agent-rules.js +262 -0
  464. package/dist/validator.d.ts +92 -0
  465. package/dist/validator.js +970 -0
  466. package/package.json +109 -0
@@ -0,0 +1,68 @@
1
+ /**
2
+ * @module jsdoc-port-sync/port-parser
3
+ *
4
+ * Parse and update @input/@output/@step annotations in JSDoc.
5
+ * Uses Chevrotain for parsing, browser-compatible.
6
+ */
7
+ import type { TPortDefinition } from '../ast/types.js';
8
+ /**
9
+ * Check if the code has any @scope declarations in JSDoc.
10
+ * Used to automatically determine if the node should be in scoped mode.
11
+ *
12
+ * @param functionText - The function text containing JSDoc
13
+ * @returns true if the code has @scope declarations, false otherwise
14
+ */
15
+ export declare function hasScopes(functionText: string): boolean;
16
+ /**
17
+ * Get all scope names declared in the code via @scope tags.
18
+ *
19
+ * @param functionText - The function text containing JSDoc
20
+ * @returns Array of scope names
21
+ */
22
+ export declare function getScopeNames(functionText: string): string[];
23
+ /**
24
+ * Check if the code has any orphan port lines (type but no name).
25
+ * Used to skip rename detection when user is editing port names.
26
+ */
27
+ export declare function hasOrphanPortLines(functionText: string): {
28
+ inputs: boolean;
29
+ outputs: boolean;
30
+ };
31
+ /**
32
+ * Extract port names from incomplete JSDoc lines.
33
+ * These are lines where the user is still typing.
34
+ * Used to prevent generating duplicate tags for ports being edited.
35
+ */
36
+ export declare function getIncompletePortNames(functionText: string): {
37
+ inputs: Set<string>;
38
+ outputs: Set<string>;
39
+ steps: Set<string>;
40
+ };
41
+ /**
42
+ * Check if a line is incomplete (port tag but not fully valid).
43
+ * Also detects "incomplete description" patterns like "@input name -" (dash but no text).
44
+ */
45
+ export declare function isIncompletePortLine(line: string): boolean;
46
+ /**
47
+ * Parse @input/@output/@step annotations from function text.
48
+ * Uses Chevrotain for parsing, browser-compatible.
49
+ *
50
+ * Types are derived from signature, not JSDoc:
51
+ * - JSDoc provides metadata: name, optional, default, scope, label, order, placement
52
+ * - Types are inferred from function signature using inferDataTypeFromTS()
53
+ * - @step annotation marks explicit STEP/control-flow ports
54
+ * - Reserved ports (execute, onSuccess, onFailure) auto-detect as STEP
55
+ */
56
+ export declare function parsePortsFromFunctionText(functionText: string): {
57
+ inputs: Record<string, TPortDefinition>;
58
+ outputs: Record<string, TPortDefinition>;
59
+ };
60
+ /**
61
+ * Update @input/@output annotations in function text.
62
+ * Preserves other JSDoc content (description, @label, @scope, etc.).
63
+ *
64
+ * @param signatureInputOrder - Optional array of input names in signature order.
65
+ * When provided, new inputs are inserted at the correct position based on signature.
66
+ */
67
+ export declare function updatePortsInFunctionText(functionText: string, inputs: Record<string, TPortDefinition>, outputs: Record<string, TPortDefinition>, signatureInputOrder?: string[]): string;
68
+ //# sourceMappingURL=port-parser.d.ts.map
@@ -0,0 +1,579 @@
1
+ /**
2
+ * @module jsdoc-port-sync/port-parser
3
+ *
4
+ * Parse and update @input/@output/@step annotations in JSDoc.
5
+ * Uses Chevrotain for parsing, browser-compatible.
6
+ */
7
+ import { generateJSDocPortTag } from '../annotation-generator.js';
8
+ import { isExecutePort, isSuccessPort, isFailurePort, isScopedMandatoryPort } from '../constants.js';
9
+ import { inferDataTypeFromTS } from '../type-mappings.js';
10
+ import { parsePortLine, parsePortsFromJSDoc, isValidPortLine as chevrotainIsValidPortLine, } from '../chevrotain-parser/port-parser.js';
11
+ import { JSDOC_BLOCK_REGEX, PORT_TAG_REGEX, ORPHAN_PORT_LINE_REGEX } from './constants.js';
12
+ import { parseFunctionSignature, parseReturnTypeFieldsWithTypes } from './signature-parser.js';
13
+ // =============================================================================
14
+ // Scope Detection
15
+ // =============================================================================
16
+ /** Match @scope tags: @scope name */
17
+ const SCOPE_TAG_REGEX = /\*\s*@scope\s+(\w+)/g;
18
+ /**
19
+ * Check if the code has any @scope declarations in JSDoc.
20
+ * Used to automatically determine if the node should be in scoped mode.
21
+ *
22
+ * @param functionText - The function text containing JSDoc
23
+ * @returns true if the code has @scope declarations, false otherwise
24
+ */
25
+ export function hasScopes(functionText) {
26
+ const jsdocMatch = functionText.match(JSDOC_BLOCK_REGEX);
27
+ if (!jsdocMatch)
28
+ return false;
29
+ SCOPE_TAG_REGEX.lastIndex = 0;
30
+ return SCOPE_TAG_REGEX.test(jsdocMatch[0]);
31
+ }
32
+ /**
33
+ * Get all scope names declared in the code via @scope tags.
34
+ *
35
+ * @param functionText - The function text containing JSDoc
36
+ * @returns Array of scope names
37
+ */
38
+ export function getScopeNames(functionText) {
39
+ const jsdocMatch = functionText.match(JSDOC_BLOCK_REGEX);
40
+ if (!jsdocMatch)
41
+ return [];
42
+ const scopes = [];
43
+ SCOPE_TAG_REGEX.lastIndex = 0;
44
+ let match;
45
+ while ((match = SCOPE_TAG_REGEX.exec(jsdocMatch[0])) != null) {
46
+ scopes.push(match[1]);
47
+ }
48
+ return scopes;
49
+ }
50
+ // =============================================================================
51
+ // Orphan/Incomplete Port Detection
52
+ // =============================================================================
53
+ /**
54
+ * Check if the code has any orphan port lines (type but no name).
55
+ * Used to skip rename detection when user is editing port names.
56
+ */
57
+ export function hasOrphanPortLines(functionText) {
58
+ const jsdocMatch = functionText.match(JSDOC_BLOCK_REGEX);
59
+ if (!jsdocMatch)
60
+ return { inputs: false, outputs: false };
61
+ const lines = jsdocMatch[0].split('\n');
62
+ let hasOrphanInputs = false;
63
+ let hasOrphanOutputs = false;
64
+ for (const line of lines) {
65
+ const orphanMatch = line.match(ORPHAN_PORT_LINE_REGEX);
66
+ if (orphanMatch) {
67
+ const [, tagType] = orphanMatch;
68
+ if (tagType === 'input')
69
+ hasOrphanInputs = true;
70
+ else
71
+ hasOrphanOutputs = true;
72
+ }
73
+ }
74
+ return { inputs: hasOrphanInputs, outputs: hasOrphanOutputs };
75
+ }
76
+ /**
77
+ * Extract port names from incomplete JSDoc lines.
78
+ * These are lines where the user is still typing.
79
+ * Used to prevent generating duplicate tags for ports being edited.
80
+ */
81
+ export function getIncompletePortNames(functionText) {
82
+ const inputs = new Set();
83
+ const outputs = new Set();
84
+ const steps = new Set();
85
+ const jsdocMatch = functionText.match(JSDOC_BLOCK_REGEX);
86
+ if (!jsdocMatch)
87
+ return { inputs, outputs, steps };
88
+ const lines = jsdocMatch[0].split('\n');
89
+ for (const line of lines) {
90
+ // Check if it looks like a port line but doesn't parse
91
+ if (!PORT_TAG_REGEX.test(line))
92
+ continue;
93
+ if (chevrotainIsValidPortLine(line))
94
+ continue;
95
+ // Try to extract partial port name from incomplete line
96
+ const partialMatch = line.match(/\*\s*@(input|output|step)\s+\[?(\w+)/);
97
+ if (partialMatch) {
98
+ const [, tagType, portName] = partialMatch;
99
+ if (tagType === 'input') {
100
+ inputs.add(portName);
101
+ }
102
+ else if (tagType === 'output') {
103
+ outputs.add(portName);
104
+ }
105
+ else if (tagType === 'step') {
106
+ steps.add(portName);
107
+ }
108
+ }
109
+ }
110
+ return { inputs, outputs, steps };
111
+ }
112
+ /**
113
+ * Check if a line is incomplete (port tag but not fully valid).
114
+ * Also detects "incomplete description" patterns like "@input name -" (dash but no text).
115
+ */
116
+ export function isIncompletePortLine(line) {
117
+ if (!PORT_TAG_REGEX.test(line))
118
+ return false;
119
+ // Check if Chevrotain considers it invalid
120
+ if (!chevrotainIsValidPortLine(line))
121
+ return true;
122
+ // Also treat trailing dash (user typing description) as incomplete
123
+ const cleanLine = line.replace(/^\s*\*\s*/, '').trim();
124
+ if (/\s-\s*$/.test(cleanLine))
125
+ return true;
126
+ return false;
127
+ }
128
+ // =============================================================================
129
+ // Port Parsing
130
+ // =============================================================================
131
+ /**
132
+ * Parse @input/@output/@step annotations from function text.
133
+ * Uses Chevrotain for parsing, browser-compatible.
134
+ *
135
+ * Types are derived from signature, not JSDoc:
136
+ * - JSDoc provides metadata: name, optional, default, scope, label, order, placement
137
+ * - Types are inferred from function signature using inferDataTypeFromTS()
138
+ * - @step annotation marks explicit STEP/control-flow ports
139
+ * - Reserved ports (execute, onSuccess, onFailure) auto-detect as STEP
140
+ */
141
+ export function parsePortsFromFunctionText(functionText) {
142
+ const inputs = {};
143
+ const outputs = {};
144
+ const jsdocMatch = functionText.match(JSDOC_BLOCK_REGEX);
145
+ if (!jsdocMatch) {
146
+ return { inputs, outputs };
147
+ }
148
+ const jsdoc = jsdocMatch[0];
149
+ // Parse function signature to get types
150
+ const { params } = parseFunctionSignature(functionText);
151
+ const returnFields = parseReturnTypeFieldsWithTypes(functionText);
152
+ // Build lookup maps for signature types and optionality
153
+ const paramTypeMap = new Map();
154
+ const paramOptionalMap = new Map();
155
+ for (const param of params) {
156
+ if (param.tsType) {
157
+ paramTypeMap.set(param.name, param.tsType);
158
+ }
159
+ if (param.optional) {
160
+ paramOptionalMap.set(param.name, true);
161
+ }
162
+ }
163
+ const returnTypeMap = new Map();
164
+ for (const field of returnFields) {
165
+ returnTypeMap.set(field.name, field.tsType);
166
+ }
167
+ // Parse @scope declarations from JSDoc
168
+ const declaredScopes = new Set();
169
+ SCOPE_TAG_REGEX.lastIndex = 0;
170
+ let scopeMatch;
171
+ while ((scopeMatch = SCOPE_TAG_REGEX.exec(jsdoc)) != null) {
172
+ declaredScopes.add(scopeMatch[1]);
173
+ }
174
+ // Get valid scope names from @scope tags
175
+ // Also infer from callback parameters as fallback
176
+ const inferredScopes = new Set(params.filter((p) => p.tsType?.includes('=>')).map((p) => p.name));
177
+ // Combine declared @scope tags with inferred callback scopes
178
+ const allKnownScopes = new Set([...declaredScopes, ...inferredScopes]);
179
+ // If any scope is declared/known, accept any scope: attribute value
180
+ // This allows @scope processItem with scope:iteration - user knows what they're doing
181
+ const hasAnyScope = allKnownScopes.size > 0;
182
+ const validateScope = (scope) => {
183
+ if (!scope)
184
+ return undefined;
185
+ // If we have any declared/inferred scopes, accept any scope attribute
186
+ // (user may use different naming convention)
187
+ if (hasAnyScope)
188
+ return scope;
189
+ return undefined;
190
+ };
191
+ // Parse ports using Chevrotain
192
+ const portResults = parsePortsFromJSDoc(jsdoc);
193
+ for (const port of portResults) {
194
+ const { type, name, scope, order, placement, description, defaultValue, isOptional } = port;
195
+ if (type === 'step') {
196
+ // @step ports are always STEP type
197
+ const portDef = {
198
+ dataType: 'STEP',
199
+ ...(description && { label: description }),
200
+ };
201
+ // Determine if input or output from signature
202
+ const isInput = paramTypeMap.has(name);
203
+ const isOutput = returnTypeMap.has(name);
204
+ if (isInput) {
205
+ inputs[name] = portDef;
206
+ }
207
+ else if (isOutput) {
208
+ outputs[name] = portDef;
209
+ }
210
+ else {
211
+ // Default to output for custom STEP ports
212
+ outputs[name] = portDef;
213
+ }
214
+ continue;
215
+ }
216
+ if (type === 'input') {
217
+ // First port wins - skip duplicates
218
+ if (inputs[name])
219
+ continue;
220
+ const validatedScope = validateScope(scope);
221
+ // Determine type from signature or default to ANY
222
+ let dataType;
223
+ let tsType;
224
+ // Reserved external STEP ports (execute) are always STEP
225
+ // Scoped mandatory ports (success, failure) are STEP only when scoped
226
+ const isExternalStepPort = isExecutePort(name);
227
+ const isScopedStepPort = validatedScope && isScopedMandatoryPort(name);
228
+ if (isExternalStepPort || isScopedStepPort) {
229
+ dataType = 'STEP';
230
+ }
231
+ else {
232
+ tsType = paramTypeMap.get(name);
233
+ dataType = tsType ? inferDataTypeFromTS(tsType) : 'ANY';
234
+ }
235
+ // Optional if marked in JSDoc or in signature
236
+ const signatureOptional = paramOptionalMap.get(name) || false;
237
+ const portOptional = isOptional || signatureOptional;
238
+ const metadata = {};
239
+ if (order !== undefined)
240
+ metadata.order = order;
241
+ if (placement)
242
+ metadata.placement = placement;
243
+ inputs[name] = {
244
+ dataType,
245
+ ...(tsType && { tsType }),
246
+ ...(portOptional && { optional: true }),
247
+ ...(defaultValue && { default: parseDefaultValue(defaultValue) }),
248
+ ...(validatedScope && { scope: validatedScope }),
249
+ ...(description && { label: description }),
250
+ ...(Object.keys(metadata).length > 0 && { metadata }),
251
+ };
252
+ }
253
+ if (type === 'output') {
254
+ // First port wins - skip duplicates
255
+ if (outputs[name])
256
+ continue;
257
+ const validatedScope = validateScope(scope);
258
+ // Determine type from signature or default to ANY
259
+ let dataType;
260
+ let tsType;
261
+ // Reserved external STEP ports (onSuccess, onFailure) are always STEP
262
+ // Scoped mandatory ports (start, success, failure) are STEP only when scoped
263
+ const isExternalStepPort = isSuccessPort(name) || isFailurePort(name);
264
+ const isScopedStepPort = validatedScope && isScopedMandatoryPort(name);
265
+ if (isExternalStepPort || isScopedStepPort) {
266
+ dataType = 'STEP';
267
+ }
268
+ else {
269
+ tsType = returnTypeMap.get(name);
270
+ dataType = tsType ? inferDataTypeFromTS(tsType) : 'ANY';
271
+ }
272
+ const metadata = {};
273
+ if (order !== undefined)
274
+ metadata.order = order;
275
+ if (placement)
276
+ metadata.placement = placement;
277
+ outputs[name] = {
278
+ dataType,
279
+ ...(tsType && { tsType }),
280
+ ...(validatedScope && { scope: validatedScope }),
281
+ ...(description && { label: description }),
282
+ ...(Object.keys(metadata).length > 0 && { metadata }),
283
+ };
284
+ }
285
+ }
286
+ return { inputs, outputs };
287
+ }
288
+ // =============================================================================
289
+ // Port Update
290
+ // =============================================================================
291
+ /**
292
+ * Update @input/@output annotations in function text.
293
+ * Preserves other JSDoc content (description, @label, @scope, etc.).
294
+ *
295
+ * @param signatureInputOrder - Optional array of input names in signature order.
296
+ * When provided, new inputs are inserted at the correct position based on signature.
297
+ */
298
+ export function updatePortsInFunctionText(functionText, inputs, outputs, signatureInputOrder) {
299
+ const jsdocMatch = functionText.match(JSDOC_BLOCK_REGEX);
300
+ // Get port names from incomplete JSDoc lines (user still typing)
301
+ const incompletePortNames = getIncompletePortNames(functionText);
302
+ // Generate new port tags (skip ports with incomplete lines)
303
+ const inputTags = Object.entries(inputs)
304
+ .filter(([name]) => !incompletePortNames.inputs.has(name))
305
+ .map(([name, port]) => ` * ${generateJSDocPortTag(name, port, 'input')}`);
306
+ const outputTags = Object.entries(outputs)
307
+ .filter(([name]) => !incompletePortNames.outputs.has(name))
308
+ .map(([name, port]) => ` * ${generateJSDocPortTag(name, port, 'output')}`);
309
+ if (!jsdocMatch) {
310
+ // No existing JSDoc - create new one
311
+ const newJsDoc = ['/**', ' * @flowWeaver nodeType', ...inputTags, ...outputTags, ' */'].join('\n');
312
+ return newJsDoc + '\n' + functionText;
313
+ }
314
+ // Parse existing JSDoc to preserve non-port content
315
+ const existingJsDoc = jsdocMatch[0];
316
+ const lines = existingJsDoc.split('\n');
317
+ const preservedLines = [];
318
+ let hasFlowWeaverTag = false;
319
+ // Track which ports we've seen in the existing JSDoc
320
+ const seenInputs = new Set();
321
+ const seenOutputs = new Set();
322
+ // Track orphan incomplete lines
323
+ const orphanInputLines = [];
324
+ const orphanOutputLines = [];
325
+ // Track last input/output line indices for proper insertion ordering
326
+ let lastInputLineIndex = -1;
327
+ let lastOutputLineIndex = -1;
328
+ for (const line of lines) {
329
+ // Always preserve opening and closing
330
+ if (line.trim() === '/**' || line.trim() === '*/') {
331
+ preservedLines.push(line);
332
+ continue;
333
+ }
334
+ // Check if this is a port line
335
+ if (PORT_TAG_REGEX.test(line)) {
336
+ // Check if this is an orphan line (just tag, no name)
337
+ const orphanMatch = line.match(ORPHAN_PORT_LINE_REGEX);
338
+ if (orphanMatch) {
339
+ const [, tagType] = orphanMatch;
340
+ const lineIndex = preservedLines.length;
341
+ preservedLines.push(line);
342
+ if (tagType === 'input') {
343
+ orphanInputLines.push({ index: lineIndex, type: 'ANY' });
344
+ lastInputLineIndex = lineIndex;
345
+ }
346
+ else if (tagType === 'output' || tagType === 'step') {
347
+ orphanOutputLines.push({ index: lineIndex, type: 'ANY' });
348
+ lastOutputLineIndex = lineIndex;
349
+ }
350
+ continue;
351
+ }
352
+ // Preserve incomplete port lines (user still typing)
353
+ if (isIncompletePortLine(line)) {
354
+ const lineIndex = preservedLines.length;
355
+ preservedLines.push(line);
356
+ const partialMatch = line.match(/\*\s*@(input|output|step)\s+\[?(\w+)/);
357
+ if (partialMatch) {
358
+ const [, tagType, portName] = partialMatch;
359
+ if (tagType === 'input') {
360
+ seenInputs.add(portName);
361
+ lastInputLineIndex = lineIndex;
362
+ }
363
+ else if (tagType === 'output') {
364
+ seenOutputs.add(portName);
365
+ lastOutputLineIndex = lineIndex;
366
+ }
367
+ else if (tagType === 'step') {
368
+ seenInputs.add(portName);
369
+ seenOutputs.add(portName);
370
+ }
371
+ }
372
+ continue;
373
+ }
374
+ // Parse the port line using Chevrotain
375
+ const cleanLine = line.replace(/^\s*\*\s*/, '').trim();
376
+ const parsed = parsePortLine(cleanLine, []);
377
+ if (parsed) {
378
+ const lineIndex = preservedLines.length;
379
+ if (parsed.type === 'input') {
380
+ if (!inputs[parsed.name])
381
+ continue; // Port removed
382
+ preservedLines.push(line.trimEnd());
383
+ seenInputs.add(parsed.name);
384
+ lastInputLineIndex = lineIndex;
385
+ }
386
+ else if (parsed.type === 'output') {
387
+ if (!outputs[parsed.name])
388
+ continue; // Port removed
389
+ preservedLines.push(line.trimEnd());
390
+ seenOutputs.add(parsed.name);
391
+ lastOutputLineIndex = lineIndex;
392
+ }
393
+ else if (parsed.type === 'step') {
394
+ const isInput = inputs[parsed.name] !== undefined;
395
+ const isOutput = outputs[parsed.name] !== undefined;
396
+ if (!isInput && !isOutput)
397
+ continue; // Port removed
398
+ preservedLines.push(line.trimEnd());
399
+ if (isInput) {
400
+ seenInputs.add(parsed.name);
401
+ lastInputLineIndex = lineIndex;
402
+ }
403
+ if (isOutput) {
404
+ seenOutputs.add(parsed.name);
405
+ lastOutputLineIndex = lineIndex;
406
+ }
407
+ }
408
+ continue;
409
+ }
410
+ // Port tag but doesn't parse - preserve it
411
+ preservedLines.push(line);
412
+ continue;
413
+ }
414
+ // Track if we have @flowWeaver tag
415
+ if (line.includes('@flowWeaver')) {
416
+ hasFlowWeaverTag = true;
417
+ }
418
+ // Preserve all other lines
419
+ preservedLines.push(line);
420
+ }
421
+ // Build new JSDoc
422
+ const newLines = [...preservedLines];
423
+ // If no @flowWeaver tag, add it
424
+ if (!hasFlowWeaverTag) {
425
+ newLines.splice(1, 0, ' * @flowWeaver nodeType');
426
+ }
427
+ // Find ports that need to be added (not already in JSDoc)
428
+ const inputsToAdd = Object.entries(inputs).filter(([name]) => !seenInputs.has(name) && !incompletePortNames.inputs.has(name));
429
+ const outputsToAdd = Object.entries(outputs).filter(([name]) => !seenOutputs.has(name) && !incompletePortNames.outputs.has(name));
430
+ // Fill in orphan lines first
431
+ const remainingInputsToAdd = [];
432
+ for (const [name, port] of inputsToAdd) {
433
+ const orphanIndex = orphanInputLines.findIndex((o) => o.type === port.dataType);
434
+ if (orphanIndex !== -1) {
435
+ const orphan = orphanInputLines[orphanIndex];
436
+ newLines[orphan.index] = ` * ${generateJSDocPortTag(name, port, 'input')}`;
437
+ orphanInputLines.splice(orphanIndex, 1);
438
+ }
439
+ else if (orphanInputLines.length > 0) {
440
+ const orphan = orphanInputLines.shift();
441
+ newLines[orphan.index] = ` * ${generateJSDocPortTag(name, port, 'input')}`;
442
+ }
443
+ else {
444
+ remainingInputsToAdd.push([name, port]);
445
+ }
446
+ }
447
+ const remainingOutputsToAdd = [];
448
+ for (const [name, port] of outputsToAdd) {
449
+ const orphanIndex = orphanOutputLines.findIndex((o) => o.type === port.dataType);
450
+ if (orphanIndex !== -1) {
451
+ const orphan = orphanOutputLines[orphanIndex];
452
+ newLines[orphan.index] = ` * ${generateJSDocPortTag(name, port, 'output')}`;
453
+ orphanOutputLines.splice(orphanIndex, 1);
454
+ }
455
+ else if (orphanOutputLines.length > 0) {
456
+ const orphan = orphanOutputLines.shift();
457
+ newLines[orphan.index] = ` * ${generateJSDocPortTag(name, port, 'output')}`;
458
+ }
459
+ else {
460
+ remainingOutputsToAdd.push([name, port]);
461
+ }
462
+ }
463
+ // Generate tags for remaining ports
464
+ const newOutputTags = remainingOutputsToAdd.map(([name, port]) => ` * ${generateJSDocPortTag(name, port, 'output')}`);
465
+ // Insert NEW port tags at proper positions
466
+ const closingIndex = newLines.findIndex((l) => l.trim() === '*/');
467
+ if (newOutputTags.length > 0) {
468
+ const outputInsertIndex = lastOutputLineIndex >= 0
469
+ ? lastOutputLineIndex + 1
470
+ : lastInputLineIndex >= 0
471
+ ? lastInputLineIndex + 1
472
+ : closingIndex;
473
+ newLines.splice(outputInsertIndex, 0, ...newOutputTags);
474
+ }
475
+ if (remainingInputsToAdd.length > 0) {
476
+ const flowWeaverIndex = newLines.findIndex((l) => l.includes('@flowWeaver'));
477
+ // Separate scoped inputs from non-scoped inputs
478
+ const scopedInputsToAdd = remainingInputsToAdd.filter(([_, port]) => port.scope);
479
+ const nonScopedInputsToAdd = remainingInputsToAdd.filter(([_, port]) => !port.scope);
480
+ if (signatureInputOrder && signatureInputOrder.length > 0 && nonScopedInputsToAdd.length > 0) {
481
+ // Build a map of existing input names to their line indices
482
+ const existingInputLineIndices = {};
483
+ for (let i = 0; i < newLines.length; i++) {
484
+ const line = newLines[i];
485
+ const cleanLine = line.replace(/^\s*\*\s*/, '').trim();
486
+ const parsed = parsePortLine(cleanLine, []);
487
+ if (parsed && parsed.type === 'input') {
488
+ existingInputLineIndices[parsed.name] = i;
489
+ }
490
+ }
491
+ // Insert each new non-scoped input at the correct position
492
+ const sortedInputsToAdd = nonScopedInputsToAdd
493
+ .map(([name, port]) => ({
494
+ name,
495
+ port,
496
+ sigIndex: signatureInputOrder.indexOf(name),
497
+ }))
498
+ .filter((item) => item.sigIndex !== -1)
499
+ .sort((a, b) => b.sigIndex - a.sigIndex);
500
+ for (const { name, port, sigIndex } of sortedInputsToAdd) {
501
+ const newTag = ` * ${generateJSDocPortTag(name, port, 'input')}`;
502
+ let insertIndex = -1;
503
+ for (let i = sigIndex + 1; i < signatureInputOrder.length; i++) {
504
+ const nextName = signatureInputOrder[i];
505
+ if (existingInputLineIndices[nextName] !== undefined) {
506
+ insertIndex = existingInputLineIndices[nextName];
507
+ break;
508
+ }
509
+ }
510
+ if (insertIndex !== -1) {
511
+ newLines.splice(insertIndex, 0, newTag);
512
+ for (const [portName, idx] of Object.entries(existingInputLineIndices)) {
513
+ if (idx >= insertIndex) {
514
+ existingInputLineIndices[portName] = idx + 1;
515
+ }
516
+ }
517
+ existingInputLineIndices[name] = insertIndex;
518
+ }
519
+ else {
520
+ for (let i = sigIndex - 1; i >= 0; i--) {
521
+ const prevName = signatureInputOrder[i];
522
+ if (existingInputLineIndices[prevName] !== undefined) {
523
+ insertIndex = existingInputLineIndices[prevName] + 1;
524
+ break;
525
+ }
526
+ }
527
+ if (insertIndex === -1) {
528
+ insertIndex = flowWeaverIndex >= 0 ? flowWeaverIndex + 1 : 1;
529
+ }
530
+ newLines.splice(insertIndex, 0, newTag);
531
+ for (const [portName, idx] of Object.entries(existingInputLineIndices)) {
532
+ if (idx >= insertIndex) {
533
+ existingInputLineIndices[portName] = idx + 1;
534
+ }
535
+ }
536
+ existingInputLineIndices[name] = insertIndex;
537
+ }
538
+ }
539
+ }
540
+ else if (nonScopedInputsToAdd.length > 0) {
541
+ const nonScopedInputTags = nonScopedInputsToAdd.map(([name, port]) => ` * ${generateJSDocPortTag(name, port, 'input')}`);
542
+ const inputInsertIndex = lastInputLineIndex >= 0
543
+ ? lastInputLineIndex + 1
544
+ : flowWeaverIndex >= 0
545
+ ? flowWeaverIndex + 1
546
+ : 1;
547
+ newLines.splice(inputInsertIndex, 0, ...nonScopedInputTags);
548
+ }
549
+ // Insert scoped inputs after outputs (standard port order: inputs, scoped outputs, scoped inputs, outputs)
550
+ if (scopedInputsToAdd.length > 0) {
551
+ const scopedInputTags = scopedInputsToAdd.map(([name, port]) => ` * ${generateJSDocPortTag(name, port, 'input')}`);
552
+ // Insert after the last output line, or after inputs if no outputs
553
+ const closingIdx = newLines.findIndex((l) => l.trim() === '*/');
554
+ const insertIdx = lastOutputLineIndex >= 0
555
+ ? lastOutputLineIndex + 1
556
+ : closingIdx >= 0
557
+ ? closingIdx
558
+ : newLines.length - 1;
559
+ newLines.splice(insertIdx, 0, ...scopedInputTags);
560
+ }
561
+ }
562
+ const newJsDoc = newLines.join('\n');
563
+ return functionText.replace(JSDOC_BLOCK_REGEX, newJsDoc);
564
+ }
565
+ // =============================================================================
566
+ // Helpers
567
+ // =============================================================================
568
+ /**
569
+ * Parse default value from string.
570
+ */
571
+ function parseDefaultValue(value) {
572
+ try {
573
+ return JSON.parse(value);
574
+ }
575
+ catch {
576
+ return value;
577
+ }
578
+ }
579
+ //# sourceMappingURL=port-parser.js.map
@@ -0,0 +1,21 @@
1
+ /**
2
+ * @module jsdoc-port-sync/rename
3
+ *
4
+ * Port renaming and code rename synchronization.
5
+ */
6
+ /**
7
+ * Rename a port in both JSDoc and function signature.
8
+ * For input ports: renames @input tag and function parameter
9
+ * For output ports: renames @output tag and return type field
10
+ * For scoped ports: also updates callback parameter/return names
11
+ */
12
+ export declare function renamePortInCode(code: string, oldPortName: string, newPortName: string, portType: "input" | "output"): string;
13
+ /**
14
+ * Sync renames between JSDoc ports and function signature using before/after diff.
15
+ *
16
+ * @param previousCode - The code before the edit
17
+ * @param currentCode - The code after the edit
18
+ * @returns The synchronized code
19
+ */
20
+ export declare function syncCodeRenames(previousCode: string, currentCode: string): string;
21
+ //# sourceMappingURL=rename.d.ts.map