@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,442 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module chevrotain-parser/port-parser
|
|
3
|
+
*
|
|
4
|
+
* Parser for @input/@output/@step port declarations using Chevrotain.
|
|
5
|
+
*/
|
|
6
|
+
import { CstParser } from 'chevrotain';
|
|
7
|
+
import { JSDocLexer, InputTag, OutputTag, StepTag, Identifier, ScopePrefix, OrderPrefix, PlacementPrefix, TypePrefix, MergeStrategyPrefix, TopKeyword, BottomKeyword, TrueKeyword, FalseKeyword, OverKeyword, MinimizedKeyword, Integer, StringLiteral, DescriptionText, LBracket, RBracket, LParen, RParen, Comma, Colon, Dot, Dash, Equals, GreaterThan, LessThan, Pipe, Ampersand, LBrace, RBrace, Asterisk, allTokens, } from './tokens.js';
|
|
8
|
+
// =============================================================================
|
|
9
|
+
// Parser Definition
|
|
10
|
+
// =============================================================================
|
|
11
|
+
class PortParser extends CstParser {
|
|
12
|
+
constructor() {
|
|
13
|
+
super(allTokens);
|
|
14
|
+
this.performSelfAnalysis();
|
|
15
|
+
}
|
|
16
|
+
// Entry rule for port line
|
|
17
|
+
portLine = this.RULE('portLine', () => {
|
|
18
|
+
this.OR([
|
|
19
|
+
{ ALT: () => this.SUBRULE(this.inputPort) },
|
|
20
|
+
{ ALT: () => this.SUBRULE(this.outputPort) },
|
|
21
|
+
{ ALT: () => this.SUBRULE(this.stepPort) },
|
|
22
|
+
]);
|
|
23
|
+
});
|
|
24
|
+
// @input port: @input name, @input [name], @input [name=default]
|
|
25
|
+
inputPort = this.RULE('inputPort', () => {
|
|
26
|
+
this.CONSUME(InputTag);
|
|
27
|
+
this.OR([
|
|
28
|
+
{
|
|
29
|
+
ALT: () => {
|
|
30
|
+
// Bracketed format: [name] or [name=default]
|
|
31
|
+
this.CONSUME(LBracket, { LABEL: 'optionalBracket' });
|
|
32
|
+
this.CONSUME(Identifier, { LABEL: 'portName' });
|
|
33
|
+
this.OPTION(() => {
|
|
34
|
+
this.CONSUME(Equals);
|
|
35
|
+
// Default value can be an identifier, integer, or string literal
|
|
36
|
+
this.OR1([
|
|
37
|
+
{ ALT: () => this.CONSUME2(Identifier, { LABEL: 'defaultValue' }) },
|
|
38
|
+
{ ALT: () => this.CONSUME(Integer, { LABEL: 'defaultValueInt' }) },
|
|
39
|
+
{ ALT: () => this.CONSUME(StringLiteral, { LABEL: 'defaultValueStr' }) },
|
|
40
|
+
]);
|
|
41
|
+
});
|
|
42
|
+
this.CONSUME(RBracket);
|
|
43
|
+
},
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
ALT: () => {
|
|
47
|
+
// Plain format: name
|
|
48
|
+
this.CONSUME3(Identifier, { LABEL: 'portName' });
|
|
49
|
+
},
|
|
50
|
+
},
|
|
51
|
+
]);
|
|
52
|
+
this.OPTION2(() => {
|
|
53
|
+
this.SUBRULE(this.scopeClause);
|
|
54
|
+
});
|
|
55
|
+
this.MANY2(() => {
|
|
56
|
+
this.SUBRULE(this.metadataBracket);
|
|
57
|
+
});
|
|
58
|
+
this.OPTION4(() => {
|
|
59
|
+
this.SUBRULE(this.descriptionClause);
|
|
60
|
+
});
|
|
61
|
+
});
|
|
62
|
+
// @output port
|
|
63
|
+
outputPort = this.RULE('outputPort', () => {
|
|
64
|
+
this.CONSUME(OutputTag);
|
|
65
|
+
this.CONSUME(Identifier, { LABEL: 'portName' });
|
|
66
|
+
this.OPTION(() => {
|
|
67
|
+
this.SUBRULE(this.scopeClause);
|
|
68
|
+
});
|
|
69
|
+
this.MANY(() => {
|
|
70
|
+
this.SUBRULE(this.metadataBracket);
|
|
71
|
+
});
|
|
72
|
+
this.OPTION3(() => {
|
|
73
|
+
this.SUBRULE(this.descriptionClause);
|
|
74
|
+
});
|
|
75
|
+
});
|
|
76
|
+
// @step port
|
|
77
|
+
stepPort = this.RULE('stepPort', () => {
|
|
78
|
+
this.CONSUME(StepTag);
|
|
79
|
+
this.CONSUME(Identifier, { LABEL: 'portName' });
|
|
80
|
+
this.OPTION(() => {
|
|
81
|
+
this.SUBRULE(this.descriptionClause);
|
|
82
|
+
});
|
|
83
|
+
});
|
|
84
|
+
// scope:identifier
|
|
85
|
+
scopeClause = this.RULE('scopeClause', () => {
|
|
86
|
+
this.CONSUME(ScopePrefix);
|
|
87
|
+
this.CONSUME(Identifier, { LABEL: 'scopeName' });
|
|
88
|
+
});
|
|
89
|
+
// [order:N, placement:TOP/BOTTOM, type:X, mergeStrategy:X]
|
|
90
|
+
metadataBracket = this.RULE('metadataBracket', () => {
|
|
91
|
+
this.CONSUME(LBracket);
|
|
92
|
+
this.AT_LEAST_ONE_SEP({
|
|
93
|
+
SEP: Comma,
|
|
94
|
+
DEF: () => {
|
|
95
|
+
this.OR([
|
|
96
|
+
{ ALT: () => this.SUBRULE(this.orderAttr) },
|
|
97
|
+
{ ALT: () => this.SUBRULE(this.placementAttr) },
|
|
98
|
+
{ ALT: () => this.SUBRULE(this.typeAttr) },
|
|
99
|
+
{ ALT: () => this.SUBRULE(this.mergeStrategyAttr) },
|
|
100
|
+
]);
|
|
101
|
+
},
|
|
102
|
+
});
|
|
103
|
+
this.CONSUME(RBracket);
|
|
104
|
+
});
|
|
105
|
+
// order:N
|
|
106
|
+
orderAttr = this.RULE('orderAttr', () => {
|
|
107
|
+
this.CONSUME(OrderPrefix);
|
|
108
|
+
this.CONSUME(Integer, { LABEL: 'orderValue' });
|
|
109
|
+
});
|
|
110
|
+
// placement:TOP/BOTTOM
|
|
111
|
+
placementAttr = this.RULE('placementAttr', () => {
|
|
112
|
+
this.CONSUME(PlacementPrefix);
|
|
113
|
+
this.OR([
|
|
114
|
+
{ ALT: () => this.CONSUME(TopKeyword, { LABEL: 'placementValue' }) },
|
|
115
|
+
{ ALT: () => this.CONSUME(BottomKeyword, { LABEL: 'placementValue' }) },
|
|
116
|
+
]);
|
|
117
|
+
});
|
|
118
|
+
// type:STRING/NUMBER/BOOLEAN/ARRAY/OBJECT/FUNCTION/ANY/STEP
|
|
119
|
+
// Uses Identifier to avoid matching type keywords in descriptions
|
|
120
|
+
typeAttr = this.RULE('typeAttr', () => {
|
|
121
|
+
this.CONSUME(TypePrefix);
|
|
122
|
+
this.CONSUME(Identifier, { LABEL: 'typeValue' });
|
|
123
|
+
});
|
|
124
|
+
// mergeStrategy:FIRST/LAST/COLLECT/MERGE/CONCAT
|
|
125
|
+
mergeStrategyAttr = this.RULE('mergeStrategyAttr', () => {
|
|
126
|
+
this.CONSUME(MergeStrategyPrefix);
|
|
127
|
+
this.CONSUME(Identifier, { LABEL: 'mergeStrategyValue' });
|
|
128
|
+
});
|
|
129
|
+
// - description text
|
|
130
|
+
// Note: We just consume the dash here. The actual description text is extracted
|
|
131
|
+
// from the raw input in parsePortLine() to handle special characters like &, :, etc.
|
|
132
|
+
descriptionClause = this.RULE('descriptionClause', () => {
|
|
133
|
+
this.CONSUME(Dash);
|
|
134
|
+
// Consume any remaining tokens - they're part of the description
|
|
135
|
+
// but the actual description is extracted from raw input.
|
|
136
|
+
// Keywords (over, true, false, TOP, BOTTOM, minimized) and prefix tokens
|
|
137
|
+
// (scope:, order:, etc.) must be included here since they can appear in
|
|
138
|
+
// free-text descriptions (e.g., "Array to iterate over").
|
|
139
|
+
this.MANY(() => {
|
|
140
|
+
this.OR([
|
|
141
|
+
{ ALT: () => this.CONSUME(Identifier) },
|
|
142
|
+
{ ALT: () => this.CONSUME(Integer) },
|
|
143
|
+
{ ALT: () => this.CONSUME(LParen) },
|
|
144
|
+
{ ALT: () => this.CONSUME(RParen) },
|
|
145
|
+
{ ALT: () => this.CONSUME(Colon) },
|
|
146
|
+
{ ALT: () => this.CONSUME(StringLiteral) },
|
|
147
|
+
{ ALT: () => this.CONSUME(DescriptionText) },
|
|
148
|
+
{ ALT: () => this.CONSUME(Comma) },
|
|
149
|
+
{ ALT: () => this.CONSUME(Dot) },
|
|
150
|
+
{ ALT: () => this.CONSUME2(Dash) },
|
|
151
|
+
{ ALT: () => this.CONSUME(Equals) },
|
|
152
|
+
{ ALT: () => this.CONSUME(GreaterThan) },
|
|
153
|
+
{ ALT: () => this.CONSUME(LessThan) },
|
|
154
|
+
{ ALT: () => this.CONSUME(Pipe) },
|
|
155
|
+
{ ALT: () => this.CONSUME(Ampersand) },
|
|
156
|
+
{ ALT: () => this.CONSUME(LBrace) },
|
|
157
|
+
{ ALT: () => this.CONSUME(RBrace) },
|
|
158
|
+
{ ALT: () => this.CONSUME(LBracket) },
|
|
159
|
+
{ ALT: () => this.CONSUME(RBracket) },
|
|
160
|
+
{ ALT: () => this.CONSUME(Asterisk) },
|
|
161
|
+
// Keywords that can appear in description text
|
|
162
|
+
{ ALT: () => this.CONSUME(OverKeyword) },
|
|
163
|
+
{ ALT: () => this.CONSUME(TopKeyword) },
|
|
164
|
+
{ ALT: () => this.CONSUME(BottomKeyword) },
|
|
165
|
+
{ ALT: () => this.CONSUME(TrueKeyword) },
|
|
166
|
+
{ ALT: () => this.CONSUME(FalseKeyword) },
|
|
167
|
+
{ ALT: () => this.CONSUME(MinimizedKeyword) },
|
|
168
|
+
// Prefix tokens (scope:, order:, etc.)
|
|
169
|
+
{ ALT: () => this.CONSUME(ScopePrefix) },
|
|
170
|
+
{ ALT: () => this.CONSUME(OrderPrefix) },
|
|
171
|
+
{ ALT: () => this.CONSUME(PlacementPrefix) },
|
|
172
|
+
{ ALT: () => this.CONSUME(TypePrefix) },
|
|
173
|
+
{ ALT: () => this.CONSUME(MergeStrategyPrefix) },
|
|
174
|
+
]);
|
|
175
|
+
});
|
|
176
|
+
});
|
|
177
|
+
}
|
|
178
|
+
// =============================================================================
|
|
179
|
+
// Parser Instance (singleton)
|
|
180
|
+
// =============================================================================
|
|
181
|
+
const parserInstance = new PortParser();
|
|
182
|
+
// =============================================================================
|
|
183
|
+
// CST Visitor
|
|
184
|
+
// =============================================================================
|
|
185
|
+
const BaseVisitor = parserInstance.getBaseCstVisitorConstructor();
|
|
186
|
+
class PortVisitor extends BaseVisitor {
|
|
187
|
+
constructor() {
|
|
188
|
+
super();
|
|
189
|
+
this.validateVisitor();
|
|
190
|
+
}
|
|
191
|
+
portLine(ctx) {
|
|
192
|
+
if (ctx.inputPort) {
|
|
193
|
+
return this.visit(ctx.inputPort);
|
|
194
|
+
}
|
|
195
|
+
if (ctx.outputPort) {
|
|
196
|
+
return this.visit(ctx.outputPort);
|
|
197
|
+
}
|
|
198
|
+
if (ctx.stepPort) {
|
|
199
|
+
return this.visit(ctx.stepPort);
|
|
200
|
+
}
|
|
201
|
+
return null;
|
|
202
|
+
}
|
|
203
|
+
inputPort(ctx) {
|
|
204
|
+
const name = ctx.portName[0].image;
|
|
205
|
+
const isOptional = !!ctx.optionalBracket;
|
|
206
|
+
// Handle default value from identifier, integer, or string literal
|
|
207
|
+
let defaultValue;
|
|
208
|
+
if (ctx.defaultValue?.[0]) {
|
|
209
|
+
defaultValue = ctx.defaultValue[0].image;
|
|
210
|
+
}
|
|
211
|
+
else if (ctx.defaultValueInt?.[0]) {
|
|
212
|
+
defaultValue = ctx.defaultValueInt[0].image;
|
|
213
|
+
}
|
|
214
|
+
else if (ctx.defaultValueStr?.[0]) {
|
|
215
|
+
// Remove quotes from string literal
|
|
216
|
+
const raw = ctx.defaultValueStr[0].image;
|
|
217
|
+
defaultValue = raw.slice(1, -1);
|
|
218
|
+
}
|
|
219
|
+
let scope;
|
|
220
|
+
let order;
|
|
221
|
+
let placement;
|
|
222
|
+
let dataType;
|
|
223
|
+
let mergeStrategy;
|
|
224
|
+
let description;
|
|
225
|
+
if (ctx.scopeClause) {
|
|
226
|
+
scope = this.visit(ctx.scopeClause);
|
|
227
|
+
}
|
|
228
|
+
if (ctx.metadataBracket) {
|
|
229
|
+
// Handle multiple metadata brackets (e.g., [order:1] [placement:TOP])
|
|
230
|
+
for (const bracket of ctx.metadataBracket) {
|
|
231
|
+
const metadata = this.visit(bracket);
|
|
232
|
+
if (metadata.order !== undefined)
|
|
233
|
+
order = metadata.order;
|
|
234
|
+
if (metadata.placement !== undefined)
|
|
235
|
+
placement = metadata.placement;
|
|
236
|
+
if (metadata.dataType !== undefined)
|
|
237
|
+
dataType = metadata.dataType;
|
|
238
|
+
if (metadata.mergeStrategy !== undefined)
|
|
239
|
+
mergeStrategy = metadata.mergeStrategy;
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
if (ctx.descriptionClause) {
|
|
243
|
+
description = this.visit(ctx.descriptionClause);
|
|
244
|
+
}
|
|
245
|
+
return {
|
|
246
|
+
type: 'input',
|
|
247
|
+
name,
|
|
248
|
+
...(isOptional && { isOptional }),
|
|
249
|
+
...(defaultValue && { defaultValue }),
|
|
250
|
+
...(scope && { scope }),
|
|
251
|
+
...(order !== undefined && { order }),
|
|
252
|
+
...(placement && { placement }),
|
|
253
|
+
...(dataType && { dataType }),
|
|
254
|
+
...(mergeStrategy && { mergeStrategy }),
|
|
255
|
+
...(description && { description }),
|
|
256
|
+
};
|
|
257
|
+
}
|
|
258
|
+
outputPort(ctx) {
|
|
259
|
+
const name = ctx.portName[0].image;
|
|
260
|
+
let scope;
|
|
261
|
+
let order;
|
|
262
|
+
let placement;
|
|
263
|
+
let dataType;
|
|
264
|
+
let description;
|
|
265
|
+
if (ctx.scopeClause) {
|
|
266
|
+
scope = this.visit(ctx.scopeClause);
|
|
267
|
+
}
|
|
268
|
+
if (ctx.metadataBracket) {
|
|
269
|
+
// Handle multiple metadata brackets (e.g., [order:1] [placement:TOP])
|
|
270
|
+
for (const bracket of ctx.metadataBracket) {
|
|
271
|
+
const metadata = this.visit(bracket);
|
|
272
|
+
if (metadata.order !== undefined)
|
|
273
|
+
order = metadata.order;
|
|
274
|
+
if (metadata.placement !== undefined)
|
|
275
|
+
placement = metadata.placement;
|
|
276
|
+
if (metadata.dataType !== undefined)
|
|
277
|
+
dataType = metadata.dataType;
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
if (ctx.descriptionClause) {
|
|
281
|
+
description = this.visit(ctx.descriptionClause);
|
|
282
|
+
}
|
|
283
|
+
return {
|
|
284
|
+
type: 'output',
|
|
285
|
+
name,
|
|
286
|
+
...(scope && { scope }),
|
|
287
|
+
...(order !== undefined && { order }),
|
|
288
|
+
...(placement && { placement }),
|
|
289
|
+
...(dataType && { dataType }),
|
|
290
|
+
...(description && { description }),
|
|
291
|
+
};
|
|
292
|
+
}
|
|
293
|
+
stepPort(ctx) {
|
|
294
|
+
const name = ctx.portName[0].image;
|
|
295
|
+
let description;
|
|
296
|
+
if (ctx.descriptionClause) {
|
|
297
|
+
description = this.visit(ctx.descriptionClause);
|
|
298
|
+
}
|
|
299
|
+
return {
|
|
300
|
+
type: 'step',
|
|
301
|
+
name,
|
|
302
|
+
...(description && { description }),
|
|
303
|
+
};
|
|
304
|
+
}
|
|
305
|
+
scopeClause(ctx) {
|
|
306
|
+
return ctx.scopeName[0].image;
|
|
307
|
+
}
|
|
308
|
+
metadataBracket(ctx) {
|
|
309
|
+
let order;
|
|
310
|
+
let placement;
|
|
311
|
+
let dataType;
|
|
312
|
+
let mergeStrategy;
|
|
313
|
+
if (ctx.orderAttr) {
|
|
314
|
+
for (const attr of ctx.orderAttr) {
|
|
315
|
+
order = this.visit(attr);
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
if (ctx.placementAttr) {
|
|
319
|
+
for (const attr of ctx.placementAttr) {
|
|
320
|
+
placement = this.visit(attr);
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
if (ctx.typeAttr) {
|
|
324
|
+
for (const attr of ctx.typeAttr) {
|
|
325
|
+
dataType = this.visit(attr);
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
if (ctx.mergeStrategyAttr) {
|
|
329
|
+
for (const attr of ctx.mergeStrategyAttr) {
|
|
330
|
+
mergeStrategy = this.visit(attr);
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
return { order, placement, dataType, mergeStrategy };
|
|
334
|
+
}
|
|
335
|
+
orderAttr(ctx) {
|
|
336
|
+
return parseInt(ctx.orderValue[0].image, 10);
|
|
337
|
+
}
|
|
338
|
+
placementAttr(ctx) {
|
|
339
|
+
return ctx.placementValue[0].image;
|
|
340
|
+
}
|
|
341
|
+
typeAttr(ctx) {
|
|
342
|
+
return ctx.typeValue[0].image;
|
|
343
|
+
}
|
|
344
|
+
mergeStrategyAttr(ctx) {
|
|
345
|
+
return ctx.mergeStrategyValue[0].image;
|
|
346
|
+
}
|
|
347
|
+
descriptionClause(ctx) {
|
|
348
|
+
if (ctx.Identifier) {
|
|
349
|
+
return ctx.Identifier.map((token) => token.image).join(' ');
|
|
350
|
+
}
|
|
351
|
+
return '';
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
const visitorInstance = new PortVisitor();
|
|
355
|
+
// =============================================================================
|
|
356
|
+
// Public API
|
|
357
|
+
// =============================================================================
|
|
358
|
+
/**
|
|
359
|
+
* Parse a port line (@input/@output/@step) and return structured result.
|
|
360
|
+
* Returns null if the line is not a port declaration.
|
|
361
|
+
*/
|
|
362
|
+
export function parsePortLine(input, warnings) {
|
|
363
|
+
const lexResult = JSDocLexer.tokenize(input);
|
|
364
|
+
// Ignore lexer errors for now - we may have special chars in description
|
|
365
|
+
// Just ensure we have at least one token
|
|
366
|
+
// Check if starts with @input, @output, or @step
|
|
367
|
+
if (lexResult.tokens.length === 0) {
|
|
368
|
+
return null;
|
|
369
|
+
}
|
|
370
|
+
const firstToken = lexResult.tokens[0];
|
|
371
|
+
if (firstToken.tokenType !== InputTag &&
|
|
372
|
+
firstToken.tokenType !== OutputTag &&
|
|
373
|
+
firstToken.tokenType !== StepTag) {
|
|
374
|
+
return null;
|
|
375
|
+
}
|
|
376
|
+
parserInstance.input = lexResult.tokens;
|
|
377
|
+
const cst = parserInstance.portLine();
|
|
378
|
+
if (parserInstance.errors.length > 0) {
|
|
379
|
+
const firstError = parserInstance.errors[0];
|
|
380
|
+
const truncatedInput = input.length > 60 ? input.substring(0, 60) + '...' : input;
|
|
381
|
+
const expectedTokens = firstError.context?.ruleStack?.length
|
|
382
|
+
? ` in rule "${firstError.context.ruleStack[firstError.context.ruleStack.length - 1]}"`
|
|
383
|
+
: '';
|
|
384
|
+
warnings.push(`Failed to parse port line: "${truncatedInput}"${expectedTokens}\n` +
|
|
385
|
+
` Error: ${firstError.message}\n` +
|
|
386
|
+
` Expected format: @input <name> [scope:scopeName] [order:N] - description\n` +
|
|
387
|
+
` @output <name> - description\n` +
|
|
388
|
+
` @step <name> - description`);
|
|
389
|
+
return null;
|
|
390
|
+
}
|
|
391
|
+
const result = visitorInstance.visit(cst);
|
|
392
|
+
// Extract description from raw input (more robust than token-based)
|
|
393
|
+
// Description starts after " - " (dash with spaces)
|
|
394
|
+
const dashMatch = input.match(/\s-\s+(.+)$/);
|
|
395
|
+
if (dashMatch && dashMatch[1]) {
|
|
396
|
+
result.description = dashMatch[1].trim();
|
|
397
|
+
}
|
|
398
|
+
else if (result.description === '') {
|
|
399
|
+
// Parser found dash but no text - remove empty description
|
|
400
|
+
delete result.description;
|
|
401
|
+
}
|
|
402
|
+
return result;
|
|
403
|
+
}
|
|
404
|
+
/**
|
|
405
|
+
* Parse all port lines from a JSDoc block.
|
|
406
|
+
* Extracts lines starting with @input, @output, or @step.
|
|
407
|
+
*/
|
|
408
|
+
export function parsePortsFromJSDoc(jsdocBlock, warnings = []) {
|
|
409
|
+
const results = [];
|
|
410
|
+
// Split by lines and process each
|
|
411
|
+
const lines = jsdocBlock.split('\n');
|
|
412
|
+
for (const line of lines) {
|
|
413
|
+
// Remove JSDoc line prefix: " * "
|
|
414
|
+
const cleanLine = line.replace(/^\s*\*\s*/, '').trim();
|
|
415
|
+
// Skip if not a port tag
|
|
416
|
+
if (!cleanLine.startsWith('@input') &&
|
|
417
|
+
!cleanLine.startsWith('@output') &&
|
|
418
|
+
!cleanLine.startsWith('@step')) {
|
|
419
|
+
continue;
|
|
420
|
+
}
|
|
421
|
+
const result = parsePortLine(cleanLine, warnings);
|
|
422
|
+
if (result) {
|
|
423
|
+
results.push(result);
|
|
424
|
+
}
|
|
425
|
+
}
|
|
426
|
+
return results;
|
|
427
|
+
}
|
|
428
|
+
/**
|
|
429
|
+
* Check if a line is a valid port line.
|
|
430
|
+
*/
|
|
431
|
+
export function isValidPortLine(line) {
|
|
432
|
+
const cleanLine = line.replace(/^\s*\*\s*/, '').trim();
|
|
433
|
+
const warnings = [];
|
|
434
|
+
return parsePortLine(cleanLine, warnings) != null;
|
|
435
|
+
}
|
|
436
|
+
/**
|
|
437
|
+
* Get serialized grammar for documentation/diagram generation.
|
|
438
|
+
*/
|
|
439
|
+
export function getPortGrammar() {
|
|
440
|
+
return parserInstance.getSerializedGastProductions();
|
|
441
|
+
}
|
|
442
|
+
//# sourceMappingURL=port-parser.js.map
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module chevrotain-parser/position-parser
|
|
3
|
+
*
|
|
4
|
+
* Parser for @position declarations using Chevrotain.
|
|
5
|
+
*/
|
|
6
|
+
export interface PositionParseResult {
|
|
7
|
+
nodeId: string;
|
|
8
|
+
x: number;
|
|
9
|
+
y: number;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Parse a @position line and return structured result.
|
|
13
|
+
* Returns null if the line is not a position declaration.
|
|
14
|
+
*/
|
|
15
|
+
export declare function parsePositionLine(input: string, warnings: string[]): PositionParseResult | null;
|
|
16
|
+
/**
|
|
17
|
+
* Get serialized grammar for documentation/diagram generation.
|
|
18
|
+
*/
|
|
19
|
+
export declare function getPositionGrammar(): import("chevrotain").ISerializedGast[];
|
|
20
|
+
//# sourceMappingURL=position-parser.d.ts.map
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module chevrotain-parser/position-parser
|
|
3
|
+
*
|
|
4
|
+
* Parser for @position declarations using Chevrotain.
|
|
5
|
+
*/
|
|
6
|
+
import { CstParser } from 'chevrotain';
|
|
7
|
+
import { JSDocLexer, PositionTag, Identifier, Integer, allTokens } from './tokens.js';
|
|
8
|
+
// =============================================================================
|
|
9
|
+
// Parser Definition
|
|
10
|
+
// =============================================================================
|
|
11
|
+
class PositionParser extends CstParser {
|
|
12
|
+
constructor() {
|
|
13
|
+
super(allTokens);
|
|
14
|
+
this.performSelfAnalysis();
|
|
15
|
+
}
|
|
16
|
+
// Entry rule for position line
|
|
17
|
+
positionLine = this.RULE('positionLine', () => {
|
|
18
|
+
this.CONSUME(PositionTag);
|
|
19
|
+
this.CONSUME(Identifier, { LABEL: 'nodeId' });
|
|
20
|
+
this.CONSUME(Integer, { LABEL: 'xCoord' });
|
|
21
|
+
this.CONSUME2(Integer, { LABEL: 'yCoord' });
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
// =============================================================================
|
|
25
|
+
// Parser Instance (singleton)
|
|
26
|
+
// =============================================================================
|
|
27
|
+
const parserInstance = new PositionParser();
|
|
28
|
+
// =============================================================================
|
|
29
|
+
// CST Visitor
|
|
30
|
+
// =============================================================================
|
|
31
|
+
const BaseVisitor = parserInstance.getBaseCstVisitorConstructor();
|
|
32
|
+
class PositionVisitor extends BaseVisitor {
|
|
33
|
+
constructor() {
|
|
34
|
+
super();
|
|
35
|
+
this.validateVisitor();
|
|
36
|
+
}
|
|
37
|
+
positionLine(ctx) {
|
|
38
|
+
const nodeId = ctx.nodeId[0].image;
|
|
39
|
+
const x = parseInt(ctx.xCoord[0].image, 10);
|
|
40
|
+
const y = parseInt(ctx.yCoord[0].image, 10);
|
|
41
|
+
return { nodeId, x, y };
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
const visitorInstance = new PositionVisitor();
|
|
45
|
+
// =============================================================================
|
|
46
|
+
// Public API
|
|
47
|
+
// =============================================================================
|
|
48
|
+
/**
|
|
49
|
+
* Parse a @position line and return structured result.
|
|
50
|
+
* Returns null if the line is not a position declaration.
|
|
51
|
+
*/
|
|
52
|
+
export function parsePositionLine(input, warnings) {
|
|
53
|
+
const lexResult = JSDocLexer.tokenize(input);
|
|
54
|
+
if (lexResult.errors.length > 0) {
|
|
55
|
+
return null;
|
|
56
|
+
}
|
|
57
|
+
// Check if starts with @position
|
|
58
|
+
if (lexResult.tokens.length === 0) {
|
|
59
|
+
return null;
|
|
60
|
+
}
|
|
61
|
+
const firstToken = lexResult.tokens[0];
|
|
62
|
+
if (firstToken.tokenType !== PositionTag) {
|
|
63
|
+
return null;
|
|
64
|
+
}
|
|
65
|
+
parserInstance.input = lexResult.tokens;
|
|
66
|
+
const cst = parserInstance.positionLine();
|
|
67
|
+
if (parserInstance.errors.length > 0) {
|
|
68
|
+
const firstError = parserInstance.errors[0];
|
|
69
|
+
const truncatedInput = input.length > 60 ? input.substring(0, 60) + '...' : input;
|
|
70
|
+
warnings.push(`Failed to parse position line: "${truncatedInput}"\n` +
|
|
71
|
+
` Error: ${firstError.message}\n` +
|
|
72
|
+
` Expected format: @position nodeId x y`);
|
|
73
|
+
return null;
|
|
74
|
+
}
|
|
75
|
+
return visitorInstance.visit(cst);
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Get serialized grammar for documentation/diagram generation.
|
|
79
|
+
*/
|
|
80
|
+
export function getPositionGrammar() {
|
|
81
|
+
return parserInstance.getSerializedGastProductions();
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=position-parser.js.map
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module chevrotain-parser/scope-parser
|
|
3
|
+
*
|
|
4
|
+
* Parser for @scope declarations using Chevrotain.
|
|
5
|
+
*/
|
|
6
|
+
export interface ScopeParseResult {
|
|
7
|
+
scopeName: string;
|
|
8
|
+
children: string[];
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Parse a @scope line and return structured result.
|
|
12
|
+
* Returns null if the line is not a scope declaration.
|
|
13
|
+
*/
|
|
14
|
+
export declare function parseScopeLine(input: string, warnings: string[]): ScopeParseResult | null;
|
|
15
|
+
/**
|
|
16
|
+
* Get serialized grammar for documentation/diagram generation.
|
|
17
|
+
*/
|
|
18
|
+
export declare function getScopeGrammar(): import("chevrotain").ISerializedGast[];
|
|
19
|
+
//# sourceMappingURL=scope-parser.d.ts.map
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module chevrotain-parser/scope-parser
|
|
3
|
+
*
|
|
4
|
+
* Parser for @scope declarations using Chevrotain.
|
|
5
|
+
*/
|
|
6
|
+
import { CstParser } from 'chevrotain';
|
|
7
|
+
import { JSDocLexer, ScopeTag, Identifier, Dot, LBracket, RBracket, Comma, allTokens, } from './tokens.js';
|
|
8
|
+
// =============================================================================
|
|
9
|
+
// Parser Definition
|
|
10
|
+
// =============================================================================
|
|
11
|
+
class ScopeParser extends CstParser {
|
|
12
|
+
constructor() {
|
|
13
|
+
super(allTokens);
|
|
14
|
+
this.performSelfAnalysis();
|
|
15
|
+
}
|
|
16
|
+
// Entry rule for scope line: @scope scopeName [child1, child2]
|
|
17
|
+
// or @scope container.scopeName [child1, child2]
|
|
18
|
+
scopeLine = this.RULE('scopeLine', () => {
|
|
19
|
+
this.CONSUME(ScopeTag);
|
|
20
|
+
this.SUBRULE(this.scopeRef);
|
|
21
|
+
this.CONSUME(LBracket);
|
|
22
|
+
this.AT_LEAST_ONE_SEP({
|
|
23
|
+
SEP: Comma,
|
|
24
|
+
DEF: () => {
|
|
25
|
+
this.CONSUME(Identifier, { LABEL: 'childId' });
|
|
26
|
+
},
|
|
27
|
+
});
|
|
28
|
+
this.CONSUME(RBracket);
|
|
29
|
+
});
|
|
30
|
+
// scopeName or container.scopeName
|
|
31
|
+
scopeRef = this.RULE('scopeRef', () => {
|
|
32
|
+
this.CONSUME(Identifier, { LABEL: 'firstPart' });
|
|
33
|
+
this.OPTION(() => {
|
|
34
|
+
this.CONSUME(Dot);
|
|
35
|
+
this.CONSUME2(Identifier, { LABEL: 'secondPart' });
|
|
36
|
+
});
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
// =============================================================================
|
|
40
|
+
// Parser Instance (singleton)
|
|
41
|
+
// =============================================================================
|
|
42
|
+
const parserInstance = new ScopeParser();
|
|
43
|
+
// =============================================================================
|
|
44
|
+
// CST Visitor
|
|
45
|
+
// =============================================================================
|
|
46
|
+
const BaseVisitor = parserInstance.getBaseCstVisitorConstructor();
|
|
47
|
+
class ScopeVisitor extends BaseVisitor {
|
|
48
|
+
constructor() {
|
|
49
|
+
super();
|
|
50
|
+
this.validateVisitor();
|
|
51
|
+
}
|
|
52
|
+
scopeLine(ctx) {
|
|
53
|
+
const scopeName = this.visit(ctx.scopeRef);
|
|
54
|
+
const children = ctx.childId.map((token) => token.image);
|
|
55
|
+
return { scopeName, children };
|
|
56
|
+
}
|
|
57
|
+
scopeRef(ctx) {
|
|
58
|
+
const firstPart = ctx.firstPart[0].image;
|
|
59
|
+
if (ctx.secondPart) {
|
|
60
|
+
const secondPart = ctx.secondPart[0].image;
|
|
61
|
+
return `${firstPart}.${secondPart}`;
|
|
62
|
+
}
|
|
63
|
+
return firstPart;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
const visitorInstance = new ScopeVisitor();
|
|
67
|
+
// =============================================================================
|
|
68
|
+
// Public API
|
|
69
|
+
// =============================================================================
|
|
70
|
+
/**
|
|
71
|
+
* Parse a @scope line and return structured result.
|
|
72
|
+
* Returns null if the line is not a scope declaration.
|
|
73
|
+
*/
|
|
74
|
+
export function parseScopeLine(input, warnings) {
|
|
75
|
+
const lexResult = JSDocLexer.tokenize(input);
|
|
76
|
+
if (lexResult.errors.length > 0) {
|
|
77
|
+
return null;
|
|
78
|
+
}
|
|
79
|
+
if (lexResult.tokens.length === 0) {
|
|
80
|
+
return null;
|
|
81
|
+
}
|
|
82
|
+
const firstToken = lexResult.tokens[0];
|
|
83
|
+
if (firstToken.tokenType !== ScopeTag) {
|
|
84
|
+
return null;
|
|
85
|
+
}
|
|
86
|
+
parserInstance.input = lexResult.tokens;
|
|
87
|
+
const cst = parserInstance.scopeLine();
|
|
88
|
+
if (parserInstance.errors.length > 0) {
|
|
89
|
+
const firstError = parserInstance.errors[0];
|
|
90
|
+
const truncatedInput = input.length > 60 ? input.substring(0, 60) + '...' : input;
|
|
91
|
+
warnings.push(`Failed to parse scope line: "${truncatedInput}"\n` +
|
|
92
|
+
` Error: ${firstError.message}\n` +
|
|
93
|
+
` Expected format: @scope scopeName [child1, child2]`);
|
|
94
|
+
return null;
|
|
95
|
+
}
|
|
96
|
+
return visitorInstance.visit(cst);
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Get serialized grammar for documentation/diagram generation.
|
|
100
|
+
*/
|
|
101
|
+
export function getScopeGrammar() {
|
|
102
|
+
return parserInstance.getSerializedGastProductions();
|
|
103
|
+
}
|
|
104
|
+
//# sourceMappingURL=scope-parser.js.map
|