@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.
- package/LICENSE +122 -0
- package/README.md +315 -0
- package/dist/annotation-generator.d.ts +45 -0
- package/dist/annotation-generator.js +557 -0
- package/dist/api/builder.d.ts +223 -0
- package/dist/api/builder.js +345 -0
- package/dist/api/compile.d.ts +92 -0
- package/dist/api/compile.js +149 -0
- package/dist/api/extract-types.d.ts +29 -0
- package/dist/api/extract-types.js +57 -0
- package/dist/api/generate-in-place.d.ts +73 -0
- package/dist/api/generate-in-place.js +1353 -0
- package/dist/api/generate.d.ts +83 -0
- package/dist/api/generate.js +510 -0
- package/dist/api/helpers.d.ts +248 -0
- package/dist/api/helpers.js +285 -0
- package/dist/api/index.d.ts +46 -0
- package/dist/api/index.js +45 -0
- package/dist/api/inline-runtime.d.ts +27 -0
- package/dist/api/inline-runtime.js +551 -0
- package/dist/api/manipulation/connections.d.ts +79 -0
- package/dist/api/manipulation/connections.js +151 -0
- package/dist/api/manipulation/index.d.ts +34 -0
- package/dist/api/manipulation/index.js +41 -0
- package/dist/api/manipulation/node-types.d.ts +123 -0
- package/dist/api/manipulation/node-types.js +200 -0
- package/dist/api/manipulation/nodes.d.ts +144 -0
- package/dist/api/manipulation/nodes.js +333 -0
- package/dist/api/manipulation/ports.d.ts +59 -0
- package/dist/api/manipulation/ports.js +228 -0
- package/dist/api/manipulation/scopes.d.ts +52 -0
- package/dist/api/manipulation/scopes.js +156 -0
- package/dist/api/manipulation/validation.d.ts +6 -0
- package/dist/api/manipulation/validation.js +6 -0
- package/dist/api/manipulation/workflow.d.ts +81 -0
- package/dist/api/manipulation/workflow.js +116 -0
- package/dist/api/manipulation.d.ts +8 -0
- package/dist/api/manipulation.js +8 -0
- package/dist/api/parse.d.ts +48 -0
- package/dist/api/parse.js +110 -0
- package/dist/api/patterns.d.ts +112 -0
- package/dist/api/patterns.js +306 -0
- package/dist/api/query.d.ts +429 -0
- package/dist/api/query.js +816 -0
- package/dist/api/templates.d.ts +98 -0
- package/dist/api/templates.js +117 -0
- package/dist/api/transform.d.ts +31 -0
- package/dist/api/transform.js +40 -0
- package/dist/api/validate.d.ts +25 -0
- package/dist/api/validate.js +39 -0
- package/dist/api/workflow-file-operations.d.ts +29 -0
- package/dist/api/workflow-file-operations.js +180 -0
- package/dist/ast/builder.d.ts +210 -0
- package/dist/ast/builder.js +395 -0
- package/dist/ast/index.d.ts +5 -0
- package/dist/ast/index.js +5 -0
- package/dist/ast/serialization-node.d.ts +6 -0
- package/dist/ast/serialization-node.js +30 -0
- package/dist/ast/serialization.d.ts +43 -0
- package/dist/ast/serialization.js +134 -0
- package/dist/ast/types.d.ts +852 -0
- package/dist/ast/types.js +2 -0
- package/dist/ast/workflow-utils.d.ts +54 -0
- package/dist/ast/workflow-utils.js +114 -0
- package/dist/body-generator.d.ts +31 -0
- package/dist/body-generator.js +35 -0
- package/dist/built-in-nodes/delay.d.ts +11 -0
- package/dist/built-in-nodes/delay.js +29 -0
- package/dist/built-in-nodes/index.d.ts +5 -0
- package/dist/built-in-nodes/index.js +4 -0
- package/dist/built-in-nodes/invoke-workflow.d.ts +13 -0
- package/dist/built-in-nodes/invoke-workflow.js +25 -0
- package/dist/built-in-nodes/mock-types.d.ts +18 -0
- package/dist/built-in-nodes/mock-types.js +12 -0
- package/dist/built-in-nodes/wait-for-event.d.ts +13 -0
- package/dist/built-in-nodes/wait-for-event.js +25 -0
- package/dist/chevrotain-parser/connect-parser.d.ts +24 -0
- package/dist/chevrotain-parser/connect-parser.js +98 -0
- package/dist/chevrotain-parser/grammar-diagrams.d.ts +29 -0
- package/dist/chevrotain-parser/grammar-diagrams.js +264 -0
- package/dist/chevrotain-parser/index.d.ts +25 -0
- package/dist/chevrotain-parser/index.js +27 -0
- package/dist/chevrotain-parser/map-parser.d.ts +33 -0
- package/dist/chevrotain-parser/map-parser.js +130 -0
- package/dist/chevrotain-parser/node-parser.d.ts +36 -0
- package/dist/chevrotain-parser/node-parser.js +466 -0
- package/dist/chevrotain-parser/path-parser.d.ts +28 -0
- package/dist/chevrotain-parser/path-parser.js +118 -0
- package/dist/chevrotain-parser/port-parser.d.ts +36 -0
- package/dist/chevrotain-parser/port-parser.js +442 -0
- package/dist/chevrotain-parser/position-parser.d.ts +20 -0
- package/dist/chevrotain-parser/position-parser.js +83 -0
- package/dist/chevrotain-parser/scope-parser.d.ts +19 -0
- package/dist/chevrotain-parser/scope-parser.js +104 -0
- package/dist/chevrotain-parser/tokens.d.ts +78 -0
- package/dist/chevrotain-parser/tokens.js +384 -0
- package/dist/chevrotain-parser/trigger-cancel-parser.d.ts +50 -0
- package/dist/chevrotain-parser/trigger-cancel-parser.js +282 -0
- package/dist/cli/commands/changelog.d.ts +13 -0
- package/dist/cli/commands/changelog.js +135 -0
- package/dist/cli/commands/compile.d.ts +64 -0
- package/dist/cli/commands/compile.js +278 -0
- package/dist/cli/commands/create.d.ts +33 -0
- package/dist/cli/commands/create.js +147 -0
- package/dist/cli/commands/describe.d.ts +68 -0
- package/dist/cli/commands/describe.js +377 -0
- package/dist/cli/commands/dev.d.ts +32 -0
- package/dist/cli/commands/dev.js +384 -0
- package/dist/cli/commands/diagram.d.ts +13 -0
- package/dist/cli/commands/diagram.js +33 -0
- package/dist/cli/commands/diff.d.ts +11 -0
- package/dist/cli/commands/diff.js +59 -0
- package/dist/cli/commands/doctor.d.ts +57 -0
- package/dist/cli/commands/doctor.js +719 -0
- package/dist/cli/commands/export.d.ts +57 -0
- package/dist/cli/commands/export.js +163 -0
- package/dist/cli/commands/grammar.d.ts +9 -0
- package/dist/cli/commands/grammar.js +39 -0
- package/dist/cli/commands/init.d.ts +59 -0
- package/dist/cli/commands/init.js +435 -0
- package/dist/cli/commands/listen.d.ts +16 -0
- package/dist/cli/commands/listen.js +39 -0
- package/dist/cli/commands/market.d.ts +52 -0
- package/dist/cli/commands/market.js +436 -0
- package/dist/cli/commands/migrate.d.ts +13 -0
- package/dist/cli/commands/migrate.js +89 -0
- package/dist/cli/commands/openapi.d.ts +37 -0
- package/dist/cli/commands/openapi.js +67 -0
- package/dist/cli/commands/pattern.d.ts +34 -0
- package/dist/cli/commands/pattern.js +185 -0
- package/dist/cli/commands/plugin.d.ts +16 -0
- package/dist/cli/commands/plugin.js +176 -0
- package/dist/cli/commands/run.d.ts +49 -0
- package/dist/cli/commands/run.js +191 -0
- package/dist/cli/commands/serve.d.ts +45 -0
- package/dist/cli/commands/serve.js +81 -0
- package/dist/cli/commands/templates.d.ts +8 -0
- package/dist/cli/commands/templates.js +54 -0
- package/dist/cli/commands/ui.d.ts +16 -0
- package/dist/cli/commands/ui.js +130 -0
- package/dist/cli/commands/validate.d.ts +12 -0
- package/dist/cli/commands/validate.js +247 -0
- package/dist/cli/commands/watch.d.ts +9 -0
- package/dist/cli/commands/watch.js +70 -0
- package/dist/cli/flow-weaver.mjs +92924 -0
- package/dist/cli/index.d.ts +9 -0
- package/dist/cli/index.js +742 -0
- package/dist/cli/templates/ai/mock-provider.d.ts +7 -0
- package/dist/cli/templates/ai/mock-provider.js +64 -0
- package/dist/cli/templates/ai/types.d.ts +47 -0
- package/dist/cli/templates/ai/types.js +5 -0
- package/dist/cli/templates/approvals/index.d.ts +15 -0
- package/dist/cli/templates/approvals/index.js +241 -0
- package/dist/cli/templates/index.d.ts +102 -0
- package/dist/cli/templates/index.js +101 -0
- package/dist/cli/templates/nodes/agent-router.d.ts +3 -0
- package/dist/cli/templates/nodes/agent-router.js +114 -0
- package/dist/cli/templates/nodes/aggregator.d.ts +7 -0
- package/dist/cli/templates/nodes/aggregator.js +63 -0
- package/dist/cli/templates/nodes/conversation-memory.d.ts +3 -0
- package/dist/cli/templates/nodes/conversation-memory.js +85 -0
- package/dist/cli/templates/nodes/http.d.ts +7 -0
- package/dist/cli/templates/nodes/http.js +80 -0
- package/dist/cli/templates/nodes/human-approval.d.ts +3 -0
- package/dist/cli/templates/nodes/human-approval.js +110 -0
- package/dist/cli/templates/nodes/json-extractor.d.ts +3 -0
- package/dist/cli/templates/nodes/json-extractor.js +119 -0
- package/dist/cli/templates/nodes/llm-call.d.ts +3 -0
- package/dist/cli/templates/nodes/llm-call.js +106 -0
- package/dist/cli/templates/nodes/prompt-template.d.ts +3 -0
- package/dist/cli/templates/nodes/prompt-template.js +52 -0
- package/dist/cli/templates/nodes/rag-retriever.d.ts +3 -0
- package/dist/cli/templates/nodes/rag-retriever.js +128 -0
- package/dist/cli/templates/nodes/tool-executor.d.ts +3 -0
- package/dist/cli/templates/nodes/tool-executor.js +108 -0
- package/dist/cli/templates/nodes/transformer.d.ts +7 -0
- package/dist/cli/templates/nodes/transformer.js +68 -0
- package/dist/cli/templates/nodes/validator.d.ts +7 -0
- package/dist/cli/templates/nodes/validator.js +62 -0
- package/dist/cli/templates/providers/index.d.ts +14 -0
- package/dist/cli/templates/providers/index.js +239 -0
- package/dist/cli/templates/shared/approval-types.d.ts +9 -0
- package/dist/cli/templates/shared/approval-types.js +31 -0
- package/dist/cli/templates/shared/llm-types.d.ts +15 -0
- package/dist/cli/templates/shared/llm-types.js +104 -0
- package/dist/cli/templates/workflows/aggregator.d.ts +7 -0
- package/dist/cli/templates/workflows/aggregator.js +104 -0
- package/dist/cli/templates/workflows/ai-agent-durable.d.ts +8 -0
- package/dist/cli/templates/workflows/ai-agent-durable.js +338 -0
- package/dist/cli/templates/workflows/ai-agent.d.ts +31 -0
- package/dist/cli/templates/workflows/ai-agent.js +326 -0
- package/dist/cli/templates/workflows/ai-chat.d.ts +7 -0
- package/dist/cli/templates/workflows/ai-chat.js +169 -0
- package/dist/cli/templates/workflows/ai-pipeline-durable.d.ts +8 -0
- package/dist/cli/templates/workflows/ai-pipeline-durable.js +330 -0
- package/dist/cli/templates/workflows/ai-rag.d.ts +7 -0
- package/dist/cli/templates/workflows/ai-rag.js +186 -0
- package/dist/cli/templates/workflows/ai-react.d.ts +7 -0
- package/dist/cli/templates/workflows/ai-react.js +294 -0
- package/dist/cli/templates/workflows/conditional.d.ts +12 -0
- package/dist/cli/templates/workflows/conditional.js +142 -0
- package/dist/cli/templates/workflows/error-handler.d.ts +7 -0
- package/dist/cli/templates/workflows/error-handler.js +147 -0
- package/dist/cli/templates/workflows/foreach.d.ts +7 -0
- package/dist/cli/templates/workflows/foreach.js +143 -0
- package/dist/cli/templates/workflows/sequential.d.ts +7 -0
- package/dist/cli/templates/workflows/sequential.js +198 -0
- package/dist/cli/templates/workflows/webhook.d.ts +7 -0
- package/dist/cli/templates/workflows/webhook.js +161 -0
- package/dist/cli/utils/logger.d.ts +15 -0
- package/dist/cli/utils/logger.js +46 -0
- package/dist/constants.d.ts +100 -0
- package/dist/constants.js +125 -0
- package/dist/defaults.d.ts +3 -0
- package/dist/defaults.js +3 -0
- package/dist/deployment/config/defaults.d.ts +29 -0
- package/dist/deployment/config/defaults.js +98 -0
- package/dist/deployment/config/loader.d.ts +24 -0
- package/dist/deployment/config/loader.js +236 -0
- package/dist/deployment/config/types.d.ts +117 -0
- package/dist/deployment/config/types.js +5 -0
- package/dist/deployment/core/adapters.d.ts +90 -0
- package/dist/deployment/core/adapters.js +251 -0
- package/dist/deployment/core/executor.d.ts +62 -0
- package/dist/deployment/core/executor.js +197 -0
- package/dist/deployment/core/formatters.d.ts +57 -0
- package/dist/deployment/core/formatters.js +170 -0
- package/dist/deployment/index.d.ts +31 -0
- package/dist/deployment/index.js +48 -0
- package/dist/deployment/openapi/generator.d.ts +146 -0
- package/dist/deployment/openapi/generator.js +347 -0
- package/dist/deployment/openapi/schema-converter.d.ts +49 -0
- package/dist/deployment/openapi/schema-converter.js +192 -0
- package/dist/deployment/targets/base.d.ts +316 -0
- package/dist/deployment/targets/base.js +823 -0
- package/dist/deployment/targets/cloudflare.d.ts +23 -0
- package/dist/deployment/targets/cloudflare.js +1125 -0
- package/dist/deployment/targets/inngest.d.ts +38 -0
- package/dist/deployment/targets/inngest.js +926 -0
- package/dist/deployment/targets/lambda.d.ts +23 -0
- package/dist/deployment/targets/lambda.js +1289 -0
- package/dist/deployment/targets/vercel.d.ts +23 -0
- package/dist/deployment/targets/vercel.js +886 -0
- package/dist/deployment/types.d.ts +183 -0
- package/dist/deployment/types.js +8 -0
- package/dist/diagram/geometry.d.ts +26 -0
- package/dist/diagram/geometry.js +850 -0
- package/dist/diagram/index.d.ts +16 -0
- package/dist/diagram/index.js +42 -0
- package/dist/diagram/layout.d.ts +11 -0
- package/dist/diagram/layout.js +143 -0
- package/dist/diagram/orthogonal-router.d.ts +79 -0
- package/dist/diagram/orthogonal-router.js +568 -0
- package/dist/diagram/renderer.d.ts +3 -0
- package/dist/diagram/renderer.js +207 -0
- package/dist/diagram/theme.d.ts +20 -0
- package/dist/diagram/theme.js +189 -0
- package/dist/diagram/types.d.ts +70 -0
- package/dist/diagram/types.js +2 -0
- package/dist/diff/WorkflowDiffer.d.ts +13 -0
- package/dist/diff/WorkflowDiffer.js +429 -0
- package/dist/diff/formatDiff.d.ts +10 -0
- package/dist/diff/formatDiff.js +220 -0
- package/dist/diff/impact.d.ts +29 -0
- package/dist/diff/impact.js +119 -0
- package/dist/diff/index.d.ts +10 -0
- package/dist/diff/index.js +9 -0
- package/dist/diff/types.d.ts +138 -0
- package/dist/diff/types.js +35 -0
- package/dist/doc-metadata/extractors/annotations.d.ts +56 -0
- package/dist/doc-metadata/extractors/annotations.js +337 -0
- package/dist/doc-metadata/extractors/cli-commands.d.ts +17 -0
- package/dist/doc-metadata/extractors/cli-commands.js +355 -0
- package/dist/doc-metadata/extractors/mcp-tools.d.ts +16 -0
- package/dist/doc-metadata/extractors/mcp-tools.js +689 -0
- package/dist/doc-metadata/extractors/plugin-api.d.ts +19 -0
- package/dist/doc-metadata/extractors/plugin-api.js +279 -0
- package/dist/doc-metadata/index.d.ts +5 -0
- package/dist/doc-metadata/index.js +4 -0
- package/dist/doc-metadata/types.d.ts +120 -0
- package/dist/doc-metadata/types.js +5 -0
- package/dist/editor-completions/annotationValues.d.ts +12 -0
- package/dist/editor-completions/annotationValues.js +138 -0
- package/dist/editor-completions/contextParser.d.ts +40 -0
- package/dist/editor-completions/contextParser.js +410 -0
- package/dist/editor-completions/dataTypes.d.ts +16 -0
- package/dist/editor-completions/dataTypes.js +95 -0
- package/dist/editor-completions/goToDefinition.d.ts +27 -0
- package/dist/editor-completions/goToDefinition.js +112 -0
- package/dist/editor-completions/index.d.ts +39 -0
- package/dist/editor-completions/index.js +181 -0
- package/dist/editor-completions/jsDocAnnotations.d.ts +29 -0
- package/dist/editor-completions/jsDocAnnotations.js +357 -0
- package/dist/editor-completions/modifierCompletions.d.ts +17 -0
- package/dist/editor-completions/modifierCompletions.js +197 -0
- package/dist/editor-completions/types.d.ts +119 -0
- package/dist/editor-completions/types.js +8 -0
- package/dist/export/index.d.ts +68 -0
- package/dist/export/index.js +1074 -0
- package/dist/export/templates.d.ts +24 -0
- package/dist/export/templates.js +186 -0
- package/dist/friendly-errors.d.ts +35 -0
- package/dist/friendly-errors.js +375 -0
- package/dist/function-like.d.ts +38 -0
- package/dist/function-like.js +83 -0
- package/dist/generated-branding.d.ts +16 -0
- package/dist/generated-branding.js +22 -0
- package/dist/generator/async-detection.d.ts +27 -0
- package/dist/generator/async-detection.js +56 -0
- package/dist/generator/code-utils.d.ts +76 -0
- package/dist/generator/code-utils.js +410 -0
- package/dist/generator/control-flow.d.ts +54 -0
- package/dist/generator/control-flow.js +284 -0
- package/dist/generator/inngest.d.ts +53 -0
- package/dist/generator/inngest.js +1126 -0
- package/dist/generator/scope-function-generator.d.ts +78 -0
- package/dist/generator/scope-function-generator.js +360 -0
- package/dist/generator/unified.d.ts +42 -0
- package/dist/generator/unified.js +1504 -0
- package/dist/generator.d.ts +54 -0
- package/dist/generator.js +100 -0
- package/dist/index.d.ts +85 -0
- package/dist/index.js +89 -0
- package/dist/jsdoc-parser.d.ts +308 -0
- package/dist/jsdoc-parser.js +923 -0
- package/dist/jsdoc-port-sync/constants.d.ts +41 -0
- package/dist/jsdoc-port-sync/constants.js +103 -0
- package/dist/jsdoc-port-sync/diff.d.ts +76 -0
- package/dist/jsdoc-port-sync/diff.js +319 -0
- package/dist/jsdoc-port-sync/index.d.ts +42 -0
- package/dist/jsdoc-port-sync/index.js +45 -0
- package/dist/jsdoc-port-sync/port-parser.d.ts +68 -0
- package/dist/jsdoc-port-sync/port-parser.js +579 -0
- package/dist/jsdoc-port-sync/rename.d.ts +21 -0
- package/dist/jsdoc-port-sync/rename.js +256 -0
- package/dist/jsdoc-port-sync/signature-parser.d.ts +104 -0
- package/dist/jsdoc-port-sync/signature-parser.js +559 -0
- package/dist/jsdoc-port-sync/sync.d.ts +36 -0
- package/dist/jsdoc-port-sync/sync.js +644 -0
- package/dist/jsdoc-port-sync.d.ts +10 -0
- package/dist/jsdoc-port-sync.js +10 -0
- package/dist/marketplace/index.d.ts +11 -0
- package/dist/marketplace/index.js +10 -0
- package/dist/marketplace/manifest.d.ts +32 -0
- package/dist/marketplace/manifest.js +176 -0
- package/dist/marketplace/registry.d.ts +30 -0
- package/dist/marketplace/registry.js +100 -0
- package/dist/marketplace/types.d.ts +154 -0
- package/dist/marketplace/types.js +9 -0
- package/dist/marketplace/validator.d.ts +13 -0
- package/dist/marketplace/validator.js +131 -0
- package/dist/mcp/auto-registration.d.ts +3 -0
- package/dist/mcp/auto-registration.js +62 -0
- package/dist/mcp/editor-connection.d.ts +50 -0
- package/dist/mcp/editor-connection.js +125 -0
- package/dist/mcp/event-buffer.d.ts +62 -0
- package/dist/mcp/event-buffer.js +150 -0
- package/dist/mcp/index.d.ts +12 -0
- package/dist/mcp/index.js +11 -0
- package/dist/mcp/resources.d.ts +14 -0
- package/dist/mcp/resources.js +55 -0
- package/dist/mcp/response-utils.d.ts +63 -0
- package/dist/mcp/response-utils.js +89 -0
- package/dist/mcp/server.d.ts +4 -0
- package/dist/mcp/server.js +99 -0
- package/dist/mcp/tools-diagram.d.ts +8 -0
- package/dist/mcp/tools-diagram.js +53 -0
- package/dist/mcp/tools-editor.d.ts +5 -0
- package/dist/mcp/tools-editor.js +190 -0
- package/dist/mcp/tools-export.d.ts +9 -0
- package/dist/mcp/tools-export.js +180 -0
- package/dist/mcp/tools-marketplace.d.ts +9 -0
- package/dist/mcp/tools-marketplace.js +132 -0
- package/dist/mcp/tools-pattern.d.ts +3 -0
- package/dist/mcp/tools-pattern.js +783 -0
- package/dist/mcp/tools-query.d.ts +3 -0
- package/dist/mcp/tools-query.js +364 -0
- package/dist/mcp/tools-template.d.ts +10 -0
- package/dist/mcp/tools-template.js +119 -0
- package/dist/mcp/types.d.ts +70 -0
- package/dist/mcp/types.js +8 -0
- package/dist/mcp/workflow-executor.d.ts +47 -0
- package/dist/mcp/workflow-executor.js +133 -0
- package/dist/migration/registry.d.ts +30 -0
- package/dist/migration/registry.js +29 -0
- package/dist/node-types-generator.d.ts +49 -0
- package/dist/node-types-generator.js +139 -0
- package/dist/npm-packages.d.ts +56 -0
- package/dist/npm-packages.js +255 -0
- package/dist/parser.d.ts +204 -0
- package/dist/parser.js +2100 -0
- package/dist/plugin/PluginPanel.d.ts +12 -0
- package/dist/plugin/PluginPanel.js +5 -0
- package/dist/plugin/index.d.ts +13 -0
- package/dist/plugin/index.js +14 -0
- package/dist/plugin/types.d.ts +75 -0
- package/dist/plugin/types.js +8 -0
- package/dist/resolve-package-types.d.ts +17 -0
- package/dist/resolve-package-types.js +123 -0
- package/dist/runtime/CancellationError.d.ts +11 -0
- package/dist/runtime/CancellationError.js +20 -0
- package/dist/runtime/ExecutionContext.d.ts +146 -0
- package/dist/runtime/ExecutionContext.js +235 -0
- package/dist/runtime/builtin-functions.d.ts +8 -0
- package/dist/runtime/builtin-functions.js +549 -0
- package/dist/runtime/events.d.ts +50 -0
- package/dist/runtime/events.js +2 -0
- package/dist/runtime/function-registry.d.ts +59 -0
- package/dist/runtime/function-registry.js +66 -0
- package/dist/runtime/index.d.ts +7 -0
- package/dist/runtime/index.js +7 -0
- package/dist/runtime/parameter-resolver.d.ts +62 -0
- package/dist/runtime/parameter-resolver.js +113 -0
- package/dist/server/index.d.ts +7 -0
- package/dist/server/index.js +6 -0
- package/dist/server/types.d.ts +93 -0
- package/dist/server/types.js +5 -0
- package/dist/server/webhook-server.d.ts +50 -0
- package/dist/server/webhook-server.js +269 -0
- package/dist/server/workflow-registry.d.ts +61 -0
- package/dist/server/workflow-registry.js +202 -0
- package/dist/shared-project.d.ts +9 -0
- package/dist/shared-project.js +28 -0
- package/dist/sugar-optimizer.d.ts +40 -0
- package/dist/sugar-optimizer.js +387 -0
- package/dist/testing/assertions.d.ts +51 -0
- package/dist/testing/assertions.js +127 -0
- package/dist/testing/index.d.ts +30 -0
- package/dist/testing/index.js +24 -0
- package/dist/testing/mock-approval.d.ts +81 -0
- package/dist/testing/mock-approval.js +98 -0
- package/dist/testing/mock-llm.d.ts +124 -0
- package/dist/testing/mock-llm.js +119 -0
- package/dist/testing/recorder.d.ts +72 -0
- package/dist/testing/recorder.js +70 -0
- package/dist/testing/replayer.d.ts +56 -0
- package/dist/testing/replayer.js +143 -0
- package/dist/testing/token-tracker.d.ts +71 -0
- package/dist/testing/token-tracker.js +94 -0
- package/dist/type-checker.d.ts +42 -0
- package/dist/type-checker.js +190 -0
- package/dist/type-mappings.d.ts +29 -0
- package/dist/type-mappings.js +125 -0
- package/dist/types/branded-ports.d.ts +151 -0
- package/dist/types/branded-ports.js +121 -0
- package/dist/types/index.d.ts +5 -0
- package/dist/types/index.js +5 -0
- package/dist/types.d.ts +139 -0
- package/dist/types.js +15 -0
- package/dist/utils/error-utils.d.ts +15 -0
- package/dist/utils/error-utils.js +27 -0
- package/dist/utils/lru-cache.d.ts +15 -0
- package/dist/utils/lru-cache.js +40 -0
- package/dist/utils/port-ordering.d.ts +26 -0
- package/dist/utils/port-ordering.js +88 -0
- package/dist/utils/port-tag-utils.d.ts +23 -0
- package/dist/utils/port-tag-utils.js +41 -0
- package/dist/utils/string-distance.d.ts +14 -0
- package/dist/utils/string-distance.js +56 -0
- package/dist/validation/agent-detection.d.ts +33 -0
- package/dist/validation/agent-detection.js +115 -0
- package/dist/validation/agent-rules.d.ts +48 -0
- package/dist/validation/agent-rules.js +262 -0
- package/dist/validator.d.ts +92 -0
- package/dist/validator.js +970 -0
- package/package.json +109 -0
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module jsdoc-port-sync/constants
|
|
3
|
+
*
|
|
4
|
+
* Regex patterns and helper functions for JSDoc port parsing.
|
|
5
|
+
* Browser-compatible (no ts-morph dependency).
|
|
6
|
+
*
|
|
7
|
+
* NOTE: Port parsing now uses Chevrotain. These patterns are for
|
|
8
|
+
* JSDoc block detection, validation, and edge cases only.
|
|
9
|
+
*/
|
|
10
|
+
/** Match JSDoc block */
|
|
11
|
+
export declare const JSDOC_BLOCK_REGEX: RegExp;
|
|
12
|
+
/** Detect port-related lines (input, output, step) */
|
|
13
|
+
export declare const PORT_TAG_REGEX: RegExp;
|
|
14
|
+
/** Regex to detect orphan incomplete lines (tag but no name) */
|
|
15
|
+
export declare const ORPHAN_PORT_LINE_REGEX: RegExp;
|
|
16
|
+
/** Detect @scope declarations (global flag for iterating) */
|
|
17
|
+
export declare const SCOPE_TAG_REGEX: RegExp;
|
|
18
|
+
/** Match function declaration start: function name( */
|
|
19
|
+
export declare const FUNC_DECL_START: RegExp;
|
|
20
|
+
/** Match arrow function start: const/let/var name = ( */
|
|
21
|
+
export declare const ARROW_START: RegExp;
|
|
22
|
+
/** Match return object: return { ... } */
|
|
23
|
+
export declare const RETURN_OBJECT_REGEX: RegExp;
|
|
24
|
+
/** Reserved parameter names to skip */
|
|
25
|
+
export declare const RESERVED_PARAMS: string[];
|
|
26
|
+
/** Reserved return field names to skip */
|
|
27
|
+
export declare const RESERVED_RETURN_FIELDS: string[];
|
|
28
|
+
/**
|
|
29
|
+
* Check if a port name is a reserved STEP port.
|
|
30
|
+
* Includes both external (execute, onSuccess, onFailure) and scoped (start, success, failure).
|
|
31
|
+
*/
|
|
32
|
+
export declare function isReservedStepPort(name: string): boolean;
|
|
33
|
+
/**
|
|
34
|
+
* Find the index of the closing paren/brace that matches the opening at startIndex.
|
|
35
|
+
*/
|
|
36
|
+
export declare function findBalancedClose(text: string, startIndex: number): number;
|
|
37
|
+
/**
|
|
38
|
+
* Split parameters string by comma, handling nested braces, parens, and angles
|
|
39
|
+
*/
|
|
40
|
+
export declare function splitParams(paramsStr: string): string[];
|
|
41
|
+
//# sourceMappingURL=constants.d.ts.map
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module jsdoc-port-sync/constants
|
|
3
|
+
*
|
|
4
|
+
* Regex patterns and helper functions for JSDoc port parsing.
|
|
5
|
+
* Browser-compatible (no ts-morph dependency).
|
|
6
|
+
*
|
|
7
|
+
* NOTE: Port parsing now uses Chevrotain. These patterns are for
|
|
8
|
+
* JSDoc block detection, validation, and edge cases only.
|
|
9
|
+
*/
|
|
10
|
+
import { isExecutePort, isSuccessPort, isFailurePort, isScopedMandatoryPort } from "../constants.js";
|
|
11
|
+
// =============================================================================
|
|
12
|
+
// JSDoc Block Regex
|
|
13
|
+
// =============================================================================
|
|
14
|
+
/** Match JSDoc block */
|
|
15
|
+
export const JSDOC_BLOCK_REGEX = /\/\*\*[\s\S]*?\*\//;
|
|
16
|
+
// =============================================================================
|
|
17
|
+
// Port Tag Detection (not parsing - Chevrotain handles that)
|
|
18
|
+
// =============================================================================
|
|
19
|
+
/** Detect port-related lines (input, output, step) */
|
|
20
|
+
export const PORT_TAG_REGEX = /^\s*\*\s*@(input|output|step)\b/;
|
|
21
|
+
/** Regex to detect orphan incomplete lines (tag but no name) */
|
|
22
|
+
export const ORPHAN_PORT_LINE_REGEX = /^\s*\*\s*@(input|output|step)\s*$/;
|
|
23
|
+
/** Detect @scope declarations (global flag for iterating) */
|
|
24
|
+
export const SCOPE_TAG_REGEX = /@scope\s+(\w+)/g;
|
|
25
|
+
// =============================================================================
|
|
26
|
+
// Function Signature Regexes
|
|
27
|
+
// =============================================================================
|
|
28
|
+
/** Match function declaration start: function name( */
|
|
29
|
+
export const FUNC_DECL_START = /(?:async\s+)?function\s+\w+\s*\(/;
|
|
30
|
+
/** Match arrow function start: const/let/var name = ( */
|
|
31
|
+
export const ARROW_START = /(?:const|let|var)\s+\w+\s*=\s*(?:async\s*)?\(/;
|
|
32
|
+
/** Match return object: return { ... } */
|
|
33
|
+
export const RETURN_OBJECT_REGEX = /return\s*\{([^}]+)\}/g;
|
|
34
|
+
// =============================================================================
|
|
35
|
+
// Reserved Names
|
|
36
|
+
// =============================================================================
|
|
37
|
+
/** Reserved parameter names to skip */
|
|
38
|
+
export const RESERVED_PARAMS = ["execute"];
|
|
39
|
+
/** Reserved return field names to skip */
|
|
40
|
+
export const RESERVED_RETURN_FIELDS = ["onSuccess", "onFailure"];
|
|
41
|
+
// =============================================================================
|
|
42
|
+
// Helper Functions
|
|
43
|
+
// =============================================================================
|
|
44
|
+
/**
|
|
45
|
+
* Check if a port name is a reserved STEP port.
|
|
46
|
+
* Includes both external (execute, onSuccess, onFailure) and scoped (start, success, failure).
|
|
47
|
+
*/
|
|
48
|
+
export function isReservedStepPort(name) {
|
|
49
|
+
return isExecutePort(name) || isSuccessPort(name) || isFailurePort(name) || isScopedMandatoryPort(name);
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Find the index of the closing paren/brace that matches the opening at startIndex.
|
|
53
|
+
*/
|
|
54
|
+
export function findBalancedClose(text, startIndex) {
|
|
55
|
+
const openChar = text[startIndex];
|
|
56
|
+
const closeChar = openChar === "(" ? ")" : openChar === "{" ? "}" : "]";
|
|
57
|
+
let depth = 1;
|
|
58
|
+
for (let i = startIndex + 1; i < text.length; i++) {
|
|
59
|
+
if (text[i] === openChar)
|
|
60
|
+
depth++;
|
|
61
|
+
else if (text[i] === closeChar) {
|
|
62
|
+
depth--;
|
|
63
|
+
if (depth === 0)
|
|
64
|
+
return i;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
return -1;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Split parameters string by comma, handling nested braces, parens, and angles
|
|
71
|
+
*/
|
|
72
|
+
export function splitParams(paramsStr) {
|
|
73
|
+
const result = [];
|
|
74
|
+
let current = "";
|
|
75
|
+
let braceDepth = 0;
|
|
76
|
+
let angleDepth = 0;
|
|
77
|
+
let parenDepth = 0;
|
|
78
|
+
for (const char of paramsStr) {
|
|
79
|
+
if (char === "{")
|
|
80
|
+
braceDepth++;
|
|
81
|
+
else if (char === "}")
|
|
82
|
+
braceDepth--;
|
|
83
|
+
else if (char === "<")
|
|
84
|
+
angleDepth++;
|
|
85
|
+
else if (char === ">" && angleDepth > 0)
|
|
86
|
+
angleDepth--;
|
|
87
|
+
else if (char === "(")
|
|
88
|
+
parenDepth++;
|
|
89
|
+
else if (char === ")")
|
|
90
|
+
parenDepth--;
|
|
91
|
+
else if (char === "," && braceDepth === 0 && angleDepth === 0 && parenDepth === 0) {
|
|
92
|
+
result.push(current);
|
|
93
|
+
current = "";
|
|
94
|
+
continue;
|
|
95
|
+
}
|
|
96
|
+
current += char;
|
|
97
|
+
}
|
|
98
|
+
if (current.trim()) {
|
|
99
|
+
result.push(current);
|
|
100
|
+
}
|
|
101
|
+
return result;
|
|
102
|
+
}
|
|
103
|
+
//# sourceMappingURL=constants.js.map
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module jsdoc-port-sync/diff
|
|
3
|
+
*
|
|
4
|
+
* Port diff system for UI sync without regeneration.
|
|
5
|
+
*/
|
|
6
|
+
import type { TPortDefinition } from "../ast/types.js";
|
|
7
|
+
/**
|
|
8
|
+
* Represents a diff between two port arrays
|
|
9
|
+
*/
|
|
10
|
+
export interface TPortDiff {
|
|
11
|
+
added: Array<{
|
|
12
|
+
name: string;
|
|
13
|
+
type: string;
|
|
14
|
+
direction: "INPUT" | "OUTPUT";
|
|
15
|
+
label?: string;
|
|
16
|
+
scope?: string;
|
|
17
|
+
placement?: string;
|
|
18
|
+
}>;
|
|
19
|
+
removed: Array<{
|
|
20
|
+
name: string;
|
|
21
|
+
direction: "INPUT" | "OUTPUT";
|
|
22
|
+
}>;
|
|
23
|
+
renamed: Array<{
|
|
24
|
+
from: string;
|
|
25
|
+
to: string;
|
|
26
|
+
direction: "INPUT" | "OUTPUT";
|
|
27
|
+
}>;
|
|
28
|
+
labelChanged: Array<{
|
|
29
|
+
name: string;
|
|
30
|
+
label: string;
|
|
31
|
+
direction: "INPUT" | "OUTPUT";
|
|
32
|
+
type: string;
|
|
33
|
+
scope?: string;
|
|
34
|
+
}>;
|
|
35
|
+
typeChanged: Array<{
|
|
36
|
+
name: string;
|
|
37
|
+
type: string;
|
|
38
|
+
direction: "INPUT" | "OUTPUT";
|
|
39
|
+
}>;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Compute the diff between two port arrays.
|
|
43
|
+
* Used to detect what changed when user edits ports via UI.
|
|
44
|
+
*/
|
|
45
|
+
export declare function computePortsDiff(before: Array<{
|
|
46
|
+
name: string;
|
|
47
|
+
type: string;
|
|
48
|
+
direction: string;
|
|
49
|
+
label?: string;
|
|
50
|
+
scope?: string;
|
|
51
|
+
placement?: string;
|
|
52
|
+
}>, after: Array<{
|
|
53
|
+
name: string;
|
|
54
|
+
type: string;
|
|
55
|
+
direction: string;
|
|
56
|
+
label?: string;
|
|
57
|
+
scope?: string;
|
|
58
|
+
placement?: string;
|
|
59
|
+
}>): TPortDiff;
|
|
60
|
+
/**
|
|
61
|
+
* Format/regenerate all port tags in JSDoc.
|
|
62
|
+
* AGGRESSIVE MODE - for Cmd+Shift+P formatting.
|
|
63
|
+
*
|
|
64
|
+
* Unlike updatePortsInFunctionText() which preserves incomplete lines,
|
|
65
|
+
* this function:
|
|
66
|
+
* 1. Removes ALL existing port lines (valid or invalid)
|
|
67
|
+
* 2. Regenerates them in proper order based on [order:N] metadata
|
|
68
|
+
* 3. Ensures consistent formatting
|
|
69
|
+
*/
|
|
70
|
+
export declare function formatPortsInFunctionText(functionText: string, inputs: Record<string, TPortDefinition>, outputs: Record<string, TPortDefinition>): string;
|
|
71
|
+
/**
|
|
72
|
+
* Apply a port diff to code without regenerating existing lines.
|
|
73
|
+
* This preserves incomplete/in-progress lines the user is typing.
|
|
74
|
+
*/
|
|
75
|
+
export declare function applyPortsDiffToCode(code: string, diff: TPortDiff): string;
|
|
76
|
+
//# sourceMappingURL=diff.d.ts.map
|
|
@@ -0,0 +1,319 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module jsdoc-port-sync/diff
|
|
3
|
+
*
|
|
4
|
+
* Port diff system for UI sync without regeneration.
|
|
5
|
+
*/
|
|
6
|
+
import { generateJSDocPortTag } from "../annotation-generator.js";
|
|
7
|
+
import { JSDOC_BLOCK_REGEX, PORT_TAG_REGEX } from "./constants.js";
|
|
8
|
+
import { portTypeToTsType } from "./signature-parser.js";
|
|
9
|
+
// =============================================================================
|
|
10
|
+
// Diff Computation
|
|
11
|
+
// =============================================================================
|
|
12
|
+
/**
|
|
13
|
+
* Compute the diff between two port arrays.
|
|
14
|
+
* Used to detect what changed when user edits ports via UI.
|
|
15
|
+
*/
|
|
16
|
+
export function computePortsDiff(before, after) {
|
|
17
|
+
const diff = { added: [], removed: [], renamed: [], labelChanged: [], typeChanged: [] };
|
|
18
|
+
const beforeMap = new Map(before.map(p => [p.name, p]));
|
|
19
|
+
const afterMap = new Map(after.map(p => [p.name, p]));
|
|
20
|
+
// Find removed ports
|
|
21
|
+
for (const [name, port] of beforeMap) {
|
|
22
|
+
if (!afterMap.has(name)) {
|
|
23
|
+
diff.removed.push({ name, direction: port.direction });
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
// Find added ports, label changes, and type changes
|
|
27
|
+
for (const [name, port] of afterMap) {
|
|
28
|
+
if (!beforeMap.has(name)) {
|
|
29
|
+
diff.added.push({
|
|
30
|
+
name,
|
|
31
|
+
type: port.type,
|
|
32
|
+
direction: port.direction,
|
|
33
|
+
label: port.label,
|
|
34
|
+
scope: port.scope,
|
|
35
|
+
placement: port.placement
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
const beforePort = beforeMap.get(name);
|
|
40
|
+
if (beforePort.label !== port.label && port.label) {
|
|
41
|
+
diff.labelChanged.push({
|
|
42
|
+
name,
|
|
43
|
+
label: port.label,
|
|
44
|
+
direction: port.direction,
|
|
45
|
+
type: port.type,
|
|
46
|
+
scope: port.scope
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
if (beforePort.type !== port.type) {
|
|
50
|
+
diff.typeChanged.push({
|
|
51
|
+
name,
|
|
52
|
+
type: port.type,
|
|
53
|
+
direction: port.direction
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
// Detect renames: exactly one removed and one added with same type/direction
|
|
59
|
+
if (diff.removed.length === 1 && diff.added.length === 1) {
|
|
60
|
+
const removed = diff.removed[0];
|
|
61
|
+
const added = diff.added[0];
|
|
62
|
+
const removedPort = before.find(p => p.name === removed.name);
|
|
63
|
+
if (removedPort && removedPort.type === added.type && removedPort.direction === added.direction) {
|
|
64
|
+
diff.renamed.push({ from: removed.name, to: added.name, direction: added.direction });
|
|
65
|
+
diff.removed = [];
|
|
66
|
+
diff.added = [];
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
return diff;
|
|
70
|
+
}
|
|
71
|
+
// =============================================================================
|
|
72
|
+
// Format Ports (Aggressive Mode)
|
|
73
|
+
// =============================================================================
|
|
74
|
+
/**
|
|
75
|
+
* Format/regenerate all port tags in JSDoc.
|
|
76
|
+
* AGGRESSIVE MODE - for Cmd+Shift+P formatting.
|
|
77
|
+
*
|
|
78
|
+
* Unlike updatePortsInFunctionText() which preserves incomplete lines,
|
|
79
|
+
* this function:
|
|
80
|
+
* 1. Removes ALL existing port lines (valid or invalid)
|
|
81
|
+
* 2. Regenerates them in proper order based on [order:N] metadata
|
|
82
|
+
* 3. Ensures consistent formatting
|
|
83
|
+
*/
|
|
84
|
+
export function formatPortsInFunctionText(functionText, inputs, outputs) {
|
|
85
|
+
const jsdocMatch = functionText.match(JSDOC_BLOCK_REGEX);
|
|
86
|
+
// Helper to safely get order from metadata (metadata is Record<string, unknown>)
|
|
87
|
+
const getOrder = (port) => {
|
|
88
|
+
const order = port.metadata?.order;
|
|
89
|
+
return typeof order === "number" ? order : Infinity;
|
|
90
|
+
};
|
|
91
|
+
// Sort by order metadata
|
|
92
|
+
const sortedInputs = Object.entries(inputs)
|
|
93
|
+
.sort((a, b) => getOrder(a[1]) - getOrder(b[1]));
|
|
94
|
+
const sortedOutputs = Object.entries(outputs)
|
|
95
|
+
.sort((a, b) => getOrder(a[1]) - getOrder(b[1]));
|
|
96
|
+
// Separate into 4 groups based on scope
|
|
97
|
+
const externalInputs = sortedInputs.filter(([_, p]) => !p.scope);
|
|
98
|
+
const scopedInputs = sortedInputs.filter(([_, p]) => p.scope);
|
|
99
|
+
const externalOutputs = sortedOutputs.filter(([_, p]) => !p.scope);
|
|
100
|
+
const scopedOutputs = sortedOutputs.filter(([_, p]) => p.scope);
|
|
101
|
+
// Generate tags in correct order
|
|
102
|
+
const externalInputTags = externalInputs.map(([name, port]) => ` * ${generateJSDocPortTag(name, port, "input")}`);
|
|
103
|
+
const scopedOutputTags = scopedOutputs.map(([name, port]) => ` * ${generateJSDocPortTag(name, port, "output")}`);
|
|
104
|
+
const scopedInputTags = scopedInputs.map(([name, port]) => ` * ${generateJSDocPortTag(name, port, "input")}`);
|
|
105
|
+
const externalOutputTags = externalOutputs.map(([name, port]) => ` * ${generateJSDocPortTag(name, port, "output")}`);
|
|
106
|
+
// Combined order
|
|
107
|
+
const allPortTags = [...externalInputTags, ...scopedOutputTags, ...scopedInputTags, ...externalOutputTags];
|
|
108
|
+
if (!jsdocMatch) {
|
|
109
|
+
const newJsDoc = [
|
|
110
|
+
"/**",
|
|
111
|
+
" * @flowWeaver nodeType",
|
|
112
|
+
...allPortTags,
|
|
113
|
+
" */",
|
|
114
|
+
].join("\n");
|
|
115
|
+
return newJsDoc + "\n" + functionText;
|
|
116
|
+
}
|
|
117
|
+
// Parse existing JSDoc to preserve non-port content
|
|
118
|
+
const existingJsDoc = jsdocMatch[0];
|
|
119
|
+
const lines = existingJsDoc.split("\n");
|
|
120
|
+
const preservedLines = [];
|
|
121
|
+
let hasFlowWeaverTag = false;
|
|
122
|
+
for (const line of lines) {
|
|
123
|
+
if (line.trim() === "/**" || line.trim() === "*/") {
|
|
124
|
+
preservedLines.push(line);
|
|
125
|
+
continue;
|
|
126
|
+
}
|
|
127
|
+
// REMOVE ALL port lines (aggressive mode)
|
|
128
|
+
if (PORT_TAG_REGEX.test(line)) {
|
|
129
|
+
continue;
|
|
130
|
+
}
|
|
131
|
+
if (line.includes("@flowWeaver")) {
|
|
132
|
+
hasFlowWeaverTag = true;
|
|
133
|
+
}
|
|
134
|
+
preservedLines.push(line);
|
|
135
|
+
}
|
|
136
|
+
const newLines = [...preservedLines];
|
|
137
|
+
if (!hasFlowWeaverTag) {
|
|
138
|
+
newLines.splice(1, 0, " * @flowWeaver nodeType");
|
|
139
|
+
}
|
|
140
|
+
// Remove trailing empty JSDoc lines before inserting ports
|
|
141
|
+
// This prevents extra blank lines between @label and port tags
|
|
142
|
+
// Matches: " *", " * ", empty lines, or lines with only whitespace
|
|
143
|
+
let closingIdx = newLines.findIndex((l) => l.trim() === "*/");
|
|
144
|
+
while (closingIdx > 1) {
|
|
145
|
+
const prevLine = newLines[closingIdx - 1];
|
|
146
|
+
const isEmptyJsDocLine = /^\s*\*\s*$/.test(prevLine); // " *" or " * "
|
|
147
|
+
const isBlankLine = prevLine.trim() === ""; // empty or whitespace only
|
|
148
|
+
if (isEmptyJsDocLine || isBlankLine) {
|
|
149
|
+
newLines.splice(closingIdx - 1, 1);
|
|
150
|
+
closingIdx--;
|
|
151
|
+
}
|
|
152
|
+
else {
|
|
153
|
+
break;
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
// Insert ALL port tags before closing */
|
|
157
|
+
const insertIndex = newLines.findIndex((l) => l.trim() === "*/");
|
|
158
|
+
newLines.splice(insertIndex, 0, ...allPortTags);
|
|
159
|
+
const newJsDoc = newLines.join("\n");
|
|
160
|
+
return functionText.replace(JSDOC_BLOCK_REGEX, newJsDoc);
|
|
161
|
+
}
|
|
162
|
+
// =============================================================================
|
|
163
|
+
// Apply Diff
|
|
164
|
+
// =============================================================================
|
|
165
|
+
/**
|
|
166
|
+
* Apply a port diff to code without regenerating existing lines.
|
|
167
|
+
* This preserves incomplete/in-progress lines the user is typing.
|
|
168
|
+
*/
|
|
169
|
+
export function applyPortsDiffToCode(code, diff) {
|
|
170
|
+
let result = code;
|
|
171
|
+
// 1. Remove ports
|
|
172
|
+
for (const { name, direction } of diff.removed) {
|
|
173
|
+
const tag = direction === "INPUT" ? "@input" : "@output";
|
|
174
|
+
const lineRegex = new RegExp(`^\\s*\\*\\s*${tag}\\s+\\[?${name}\\]?(?:[^\\S\\n]+|[^\\S\\n]*-|[^\\S\\n]*\\[order|$).*$\\n?`, "gm");
|
|
175
|
+
result = result.replace(lineRegex, "");
|
|
176
|
+
}
|
|
177
|
+
// 2. Rename ports
|
|
178
|
+
for (const { from, to, direction } of diff.renamed) {
|
|
179
|
+
const tag = direction === "INPUT" ? "@input" : "@output";
|
|
180
|
+
const renameRegex = new RegExp(`(${tag}\\s+)(\\[?)${from}(\\]?\\b)`, "g");
|
|
181
|
+
result = result.replace(renameRegex, `$1$2${to}$3`);
|
|
182
|
+
}
|
|
183
|
+
// 3. Update labels
|
|
184
|
+
for (const { name, label, direction, scope } of diff.labelChanged) {
|
|
185
|
+
const tag = direction === "INPUT" ? "@input" : "@output";
|
|
186
|
+
const labelRegex = new RegExp(`(\\*\\s*${tag}\\s+\\[?${name}\\]?)(?:\\s+scope:\\w+)?(?:\\s+\\[order:\\s*\\d+\\])?(?:\\s+-\\s+[^\\n]*)?`, "g");
|
|
187
|
+
const beforeReplace = result;
|
|
188
|
+
result = result.replace(labelRegex, `$1${scope ? ` scope:${scope}` : ""} - ${label}`);
|
|
189
|
+
if (result === beforeReplace) {
|
|
190
|
+
const scopePart = scope ? ` scope:${scope}` : "";
|
|
191
|
+
const labelPart = ` - ${label}`;
|
|
192
|
+
const newLine = ` * ${tag} ${name}${scopePart}${labelPart}`;
|
|
193
|
+
result = result.replace(/(\n)(\s*\*\/)/, `$1${newLine}\n$2`);
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
// 4. Update types in signature (not JSDoc - types come from signature)
|
|
197
|
+
// Handle simple types and the standard function type we generate: (...args: any[]) => any
|
|
198
|
+
for (const { name, type, direction } of diff.typeChanged) {
|
|
199
|
+
const tsType = portTypeToTsType(type);
|
|
200
|
+
// Pattern for simple types: word characters, [], and optional ?
|
|
201
|
+
const simpleTypePattern = `[\\w\\[\\]\\?]+`;
|
|
202
|
+
// Pattern for the standard function type we generate: (...args: any[]) => any
|
|
203
|
+
// This is safe to replace because we know its exact structure
|
|
204
|
+
const standardFunctionPattern = `\\(\\.\\.\\.args:\\s*any\\[\\]\\)\\s*=>\\s*any`;
|
|
205
|
+
if (direction === "INPUT") {
|
|
206
|
+
// Try simple type first
|
|
207
|
+
const simpleParamRegex = new RegExp(`(\\b${name}\\??\\s*):\\s*(${simpleTypePattern})\\s*([,)])`, "g");
|
|
208
|
+
const beforeSimple = result;
|
|
209
|
+
result = result.replace(simpleParamRegex, `$1: ${tsType}$3`);
|
|
210
|
+
// If no change, try standard function type pattern
|
|
211
|
+
if (result === beforeSimple) {
|
|
212
|
+
const funcParamRegex = new RegExp(`(\\b${name}\\??\\s*):\\s*(${standardFunctionPattern})\\s*([,)])`, "g");
|
|
213
|
+
result = result.replace(funcParamRegex, `$1: ${tsType}$3`);
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
else {
|
|
217
|
+
// OUTPUT type change: ONLY modify within the return type annotation, NOT return statements in body
|
|
218
|
+
// Return type annotation is between "): {" and the closing "}" before "{" or "=>" (function body)
|
|
219
|
+
const returnTypeMatch = result.match(/(\)\s*:\s*)(\{[^}]+\})(\s*(?:\{|=>))/);
|
|
220
|
+
if (returnTypeMatch) {
|
|
221
|
+
const beforeReturnType = result.substring(0, returnTypeMatch.index + returnTypeMatch[1].length);
|
|
222
|
+
const returnTypeContent = returnTypeMatch[2];
|
|
223
|
+
const afterReturnType = result.substring(returnTypeMatch.index + returnTypeMatch[1].length + returnTypeContent.length);
|
|
224
|
+
// Only apply replacement within the return type annotation
|
|
225
|
+
const simpleReturnRegex = new RegExp(`(\\b${name}\\s*):\\s*(${simpleTypePattern})\\s*([,;}])`, "g");
|
|
226
|
+
let newReturnType = returnTypeContent.replace(simpleReturnRegex, `$1: ${tsType}$3`);
|
|
227
|
+
// If no change, try standard function type pattern
|
|
228
|
+
if (newReturnType === returnTypeContent) {
|
|
229
|
+
const funcReturnRegex = new RegExp(`(\\b${name}\\s*):\\s*(${standardFunctionPattern})\\s*([,;}])`, "g");
|
|
230
|
+
newReturnType = returnTypeContent.replace(funcReturnRegex, `$1: ${tsType}$3`);
|
|
231
|
+
}
|
|
232
|
+
result = beforeReturnType + newReturnType + afterReturnType;
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
// 5. Add new ports
|
|
237
|
+
for (const { name, direction, label, scope, placement } of diff.added) {
|
|
238
|
+
const tag = direction === "INPUT" ? "@input" : "@output";
|
|
239
|
+
const existsRegex = new RegExp(`@${tag === "@input" ? "input" : "output"}\\s+\\[?${name}[\\]\\s\\[\\-]?`, "i");
|
|
240
|
+
if (existsRegex.test(result)) {
|
|
241
|
+
continue;
|
|
242
|
+
}
|
|
243
|
+
const scopePart = scope ? ` scope:${scope}` : "";
|
|
244
|
+
const placementPart = placement ? ` [placement:${placement}]` : "";
|
|
245
|
+
const labelPart = label ? ` - ${label}` : "";
|
|
246
|
+
const newLine = ` * ${tag} ${name}${scopePart}${placementPart}${labelPart}`;
|
|
247
|
+
if (direction === "INPUT" && !scope) {
|
|
248
|
+
const firstScopedOutputMatch = result.match(/(\n)(\s*\*\s*@output\s+\w+\s+scope:)/);
|
|
249
|
+
if (firstScopedOutputMatch) {
|
|
250
|
+
result = result.replace(/(\n)(\s*\*\s*@output\s+\w+\s+scope:)/, `$1${newLine}\n$2`);
|
|
251
|
+
}
|
|
252
|
+
else {
|
|
253
|
+
const firstScopedInputMatch = result.match(/(\n)(\s*\*\s*@input\s+\w+\s+scope:)/);
|
|
254
|
+
if (firstScopedInputMatch) {
|
|
255
|
+
result = result.replace(/(\n)(\s*\*\s*@input\s+\w+\s+scope:)/, `$1${newLine}\n$2`);
|
|
256
|
+
}
|
|
257
|
+
else {
|
|
258
|
+
const firstOutputMatch = result.match(/(\n)(\s*\*\s*@output\s+)/);
|
|
259
|
+
if (firstOutputMatch) {
|
|
260
|
+
result = result.replace(/(\n)(\s*\*\s*@output\s+)/, `$1${newLine}\n$2`);
|
|
261
|
+
}
|
|
262
|
+
else {
|
|
263
|
+
result = result.replace(/(\n)(\s*\*\/)/, `$1${newLine}\n$2`);
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
else if (direction === "OUTPUT" && scope) {
|
|
269
|
+
const lines = result.split("\n");
|
|
270
|
+
let insertIndex = -1;
|
|
271
|
+
for (let i = 0; i < lines.length; i++) {
|
|
272
|
+
const line = lines[i];
|
|
273
|
+
if (/@input\s+\w+/.test(line) && line.includes("scope:")) {
|
|
274
|
+
insertIndex = i;
|
|
275
|
+
break;
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
if (insertIndex === -1) {
|
|
279
|
+
for (let i = 0; i < lines.length; i++) {
|
|
280
|
+
const line = lines[i];
|
|
281
|
+
if (/@output\s+\w+/.test(line) && !line.includes("scope:")) {
|
|
282
|
+
insertIndex = i;
|
|
283
|
+
break;
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
if (insertIndex !== -1) {
|
|
288
|
+
lines.splice(insertIndex, 0, newLine);
|
|
289
|
+
result = lines.join("\n");
|
|
290
|
+
}
|
|
291
|
+
else {
|
|
292
|
+
result = result.replace(/(\n)(\s*\*\/)/, `$1${newLine}\n$2`);
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
else if (direction === "INPUT" && scope) {
|
|
296
|
+
const lines = result.split("\n");
|
|
297
|
+
let insertIndex = -1;
|
|
298
|
+
for (let i = 0; i < lines.length; i++) {
|
|
299
|
+
const line = lines[i];
|
|
300
|
+
if (/@output\s+\w+/.test(line) && !line.includes("scope:")) {
|
|
301
|
+
insertIndex = i;
|
|
302
|
+
break;
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
if (insertIndex !== -1) {
|
|
306
|
+
lines.splice(insertIndex, 0, newLine);
|
|
307
|
+
result = lines.join("\n");
|
|
308
|
+
}
|
|
309
|
+
else {
|
|
310
|
+
result = result.replace(/(\n)(\s*\*\/)/, `$1${newLine}\n$2`);
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
else {
|
|
314
|
+
result = result.replace(/(\n)(\s*\*\/)/, `$1${newLine}\n$2`);
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
return result;
|
|
318
|
+
}
|
|
319
|
+
//# sourceMappingURL=diff.js.map
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module jsdoc-port-sync
|
|
3
|
+
*
|
|
4
|
+
* Browser-compatible bidirectional sync between JSDoc annotations and TypeScript
|
|
5
|
+
* signatures. Uses regex only - no ts-morph dependency.
|
|
6
|
+
*
|
|
7
|
+
* ## Dual Source of Truth
|
|
8
|
+
*
|
|
9
|
+
* | Aspect | Source | Notes |
|
|
10
|
+
* |----------------|---------------|-------|
|
|
11
|
+
* | Port EXISTENCE | **Signature** | Params + return fields define what ports exist |
|
|
12
|
+
* | Port TYPES | **Signature** | Types inferred from TypeScript signature |
|
|
13
|
+
* | Port METADATA | **JSDoc** | Labels, order, placement, scope |
|
|
14
|
+
*
|
|
15
|
+
* ## Sync Flow
|
|
16
|
+
*
|
|
17
|
+
* ```
|
|
18
|
+
* Keystroke → syncJSDocToSignature (preserves signature, adds from JSDoc)
|
|
19
|
+
*
|
|
20
|
+
* Ctrl+P → syncSignatureToJSDoc (regenerates JSDoc) → syncJSDocToSignature
|
|
21
|
+
* ```
|
|
22
|
+
*
|
|
23
|
+
* ## Key Functions
|
|
24
|
+
*
|
|
25
|
+
* - {@link parsePortsFromFunctionText} - Extract ports from JSDoc
|
|
26
|
+
* - {@link syncJSDocToSignature} - JSDoc → Signature (add params/return fields)
|
|
27
|
+
* - {@link syncSignatureToJSDoc} - Signature → JSDoc (regenerate tags)
|
|
28
|
+
* - {@link syncCodeRenames} - Position-based rename detection
|
|
29
|
+
* - {@link computePortsDiff} / {@link applyPortsDiffToCode} - Diff-based updates
|
|
30
|
+
*/
|
|
31
|
+
export type { TPortDefinition, TDataType } from "../ast/types.js";
|
|
32
|
+
export type { ParsedParam } from "./signature-parser.js";
|
|
33
|
+
export type { TPortDiff } from "./diff.js";
|
|
34
|
+
export { JSDOC_BLOCK_REGEX, PORT_TAG_REGEX, ORPHAN_PORT_LINE_REGEX, SCOPE_TAG_REGEX, FUNC_DECL_START, ARROW_START, RETURN_OBJECT_REGEX, RESERVED_PARAMS, RESERVED_RETURN_FIELDS, isReservedStepPort, findBalancedClose, splitParams, } from "./constants.js";
|
|
35
|
+
export { parsePortLine, isValidPortLine } from "../chevrotain-parser/port-parser.js";
|
|
36
|
+
export type { PortParseResult } from "../chevrotain-parser/port-parser.js";
|
|
37
|
+
export { parseFunctionSignature, parseReturnFields, parseReturnBodyFieldsWithTypes, parseReturnTypeFields, parseReturnTypeFieldsWithTypes, parseInputTypeFields, tsTypeToPortType, portTypeToTsType, parseCallbackType, buildCallbackType, callbackHasAllPorts, } from "./signature-parser.js";
|
|
38
|
+
export { hasScopes, getScopeNames, hasOrphanPortLines, getIncompletePortNames, parsePortsFromFunctionText, updatePortsInFunctionText, } from "./port-parser.js";
|
|
39
|
+
export { syncSignatureToJSDoc, syncJSDocToSignature, } from "./sync.js";
|
|
40
|
+
export { renamePortInCode, syncCodeRenames, } from "./rename.js";
|
|
41
|
+
export { computePortsDiff, formatPortsInFunctionText, applyPortsDiffToCode, } from "./diff.js";
|
|
42
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module jsdoc-port-sync
|
|
3
|
+
*
|
|
4
|
+
* Browser-compatible bidirectional sync between JSDoc annotations and TypeScript
|
|
5
|
+
* signatures. Uses regex only - no ts-morph dependency.
|
|
6
|
+
*
|
|
7
|
+
* ## Dual Source of Truth
|
|
8
|
+
*
|
|
9
|
+
* | Aspect | Source | Notes |
|
|
10
|
+
* |----------------|---------------|-------|
|
|
11
|
+
* | Port EXISTENCE | **Signature** | Params + return fields define what ports exist |
|
|
12
|
+
* | Port TYPES | **Signature** | Types inferred from TypeScript signature |
|
|
13
|
+
* | Port METADATA | **JSDoc** | Labels, order, placement, scope |
|
|
14
|
+
*
|
|
15
|
+
* ## Sync Flow
|
|
16
|
+
*
|
|
17
|
+
* ```
|
|
18
|
+
* Keystroke → syncJSDocToSignature (preserves signature, adds from JSDoc)
|
|
19
|
+
*
|
|
20
|
+
* Ctrl+P → syncSignatureToJSDoc (regenerates JSDoc) → syncJSDocToSignature
|
|
21
|
+
* ```
|
|
22
|
+
*
|
|
23
|
+
* ## Key Functions
|
|
24
|
+
*
|
|
25
|
+
* - {@link parsePortsFromFunctionText} - Extract ports from JSDoc
|
|
26
|
+
* - {@link syncJSDocToSignature} - JSDoc → Signature (add params/return fields)
|
|
27
|
+
* - {@link syncSignatureToJSDoc} - Signature → JSDoc (regenerate tags)
|
|
28
|
+
* - {@link syncCodeRenames} - Position-based rename detection
|
|
29
|
+
* - {@link computePortsDiff} / {@link applyPortsDiffToCode} - Diff-based updates
|
|
30
|
+
*/
|
|
31
|
+
// Constants (kept for JSDoc detection/validation - Chevrotain handles parsing)
|
|
32
|
+
export { JSDOC_BLOCK_REGEX, PORT_TAG_REGEX, ORPHAN_PORT_LINE_REGEX, SCOPE_TAG_REGEX, FUNC_DECL_START, ARROW_START, RETURN_OBJECT_REGEX, RESERVED_PARAMS, RESERVED_RETURN_FIELDS, isReservedStepPort, findBalancedClose, splitParams, } from "./constants.js";
|
|
33
|
+
// Chevrotain-based port parsing (replaces regex patterns)
|
|
34
|
+
export { parsePortLine, isValidPortLine } from "../chevrotain-parser/port-parser.js";
|
|
35
|
+
// Signature parsing
|
|
36
|
+
export { parseFunctionSignature, parseReturnFields, parseReturnBodyFieldsWithTypes, parseReturnTypeFields, parseReturnTypeFieldsWithTypes, parseInputTypeFields, tsTypeToPortType, portTypeToTsType, parseCallbackType, buildCallbackType, callbackHasAllPorts, } from "./signature-parser.js";
|
|
37
|
+
// Port parsing
|
|
38
|
+
export { hasScopes, getScopeNames, hasOrphanPortLines, getIncompletePortNames, parsePortsFromFunctionText, updatePortsInFunctionText, } from "./port-parser.js";
|
|
39
|
+
// Sync functions
|
|
40
|
+
export { syncSignatureToJSDoc, syncJSDocToSignature, } from "./sync.js";
|
|
41
|
+
// Rename functions
|
|
42
|
+
export { renamePortInCode, syncCodeRenames, } from "./rename.js";
|
|
43
|
+
// Diff functions
|
|
44
|
+
export { computePortsDiff, formatPortsInFunctionText, applyPortsDiffToCode, } from "./diff.js";
|
|
45
|
+
//# sourceMappingURL=index.js.map
|