@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,248 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Helper utilities for API manipulation operations
|
|
3
|
+
* Provides immutability via Immer and validation wrappers
|
|
4
|
+
*/
|
|
5
|
+
import { type Draft } from "immer";
|
|
6
|
+
import { type ValidationResult } from "./validate.js";
|
|
7
|
+
import type { TWorkflowAST, TNodeInstanceAST, TPortReference } from "../ast/types.js";
|
|
8
|
+
/**
|
|
9
|
+
* Wrapper for all mutation operations that ensures:
|
|
10
|
+
* 1. Immutability via Immer's structural sharing (only clones what changes)
|
|
11
|
+
* 2. Validation after operation (ensures every operation produces valid AST)
|
|
12
|
+
* 3. Proper error handling (throws on validation failure)
|
|
13
|
+
*
|
|
14
|
+
* This is the foundation of all manipulation API functions.
|
|
15
|
+
* Each operation can mutate the draft as if it were mutable,
|
|
16
|
+
* but Immer returns a new immutable AST with structural sharing.
|
|
17
|
+
*
|
|
18
|
+
* @param ast - The workflow AST to operate on
|
|
19
|
+
* @param operation - Function that mutates the draft
|
|
20
|
+
* @param operationName - Optional name for better error messages
|
|
21
|
+
* @returns New immutable WorkflowAST
|
|
22
|
+
* @throws {Error} If validation fails after operation
|
|
23
|
+
*
|
|
24
|
+
* @example
|
|
25
|
+
* ```typescript
|
|
26
|
+
* const newAst = withValidation(ast, draft => {
|
|
27
|
+
* draft.instances.push(newNode);
|
|
28
|
+
* }, 'addNode');
|
|
29
|
+
* ```
|
|
30
|
+
*/
|
|
31
|
+
export declare function withValidation<T extends TWorkflowAST>(ast: T, operation: (draft: Draft<T>) => void, operationName?: string): T;
|
|
32
|
+
/**
|
|
33
|
+
* Wrapper for mutation operations with minimal validation.
|
|
34
|
+
* Only validates operation-specific requirements (e.g., "does this node exist?")
|
|
35
|
+
* but does NOT validate the entire workflow.
|
|
36
|
+
*
|
|
37
|
+
* This allows operations to succeed even when the workflow has other validation
|
|
38
|
+
* errors, preventing a frustrating "can't move nodes because workflow is broken"
|
|
39
|
+
* experience while still catching obvious mistakes like typos.
|
|
40
|
+
*
|
|
41
|
+
* @param ast - The workflow AST to operate on
|
|
42
|
+
* @param operation - Function that mutates the draft
|
|
43
|
+
* @param checks - Optional validation checks specific to this operation
|
|
44
|
+
* @param operationName - Optional name for better error messages
|
|
45
|
+
* @returns New immutable WorkflowAST
|
|
46
|
+
* @throws {Error} If operation-specific checks fail
|
|
47
|
+
*
|
|
48
|
+
* @example
|
|
49
|
+
* ```typescript
|
|
50
|
+
* const newAst = withMinimalValidation(
|
|
51
|
+
* ast,
|
|
52
|
+
* draft => { draft.instances = draft.instances.filter(n => n.id !== nodeId); },
|
|
53
|
+
* [(result) => assertNodeExists(result, nodeId)],
|
|
54
|
+
* 'removeNode'
|
|
55
|
+
* );
|
|
56
|
+
* ```
|
|
57
|
+
*/
|
|
58
|
+
export declare function withMinimalValidation<T extends TWorkflowAST>(ast: T, operation: (draft: Draft<T>) => void, checks?: Array<(result: T) => void>, operationName?: string): T;
|
|
59
|
+
/**
|
|
60
|
+
* Wrapper for UI-only mutation operations that ensures immutability
|
|
61
|
+
* but performs NO validation. Use this for metadata changes that don't
|
|
62
|
+
* affect workflow correctness (e.g., node positions, labels, UI state).
|
|
63
|
+
*
|
|
64
|
+
* This allows users to make cosmetic changes even when the workflow
|
|
65
|
+
* has validation errors, providing a smooth editing experience.
|
|
66
|
+
*
|
|
67
|
+
* @param ast - The workflow AST to operate on
|
|
68
|
+
* @param operation - Function that mutates the draft
|
|
69
|
+
* @returns New immutable WorkflowAST
|
|
70
|
+
*
|
|
71
|
+
* @example
|
|
72
|
+
* ```typescript
|
|
73
|
+
* const newAst = withoutValidation(ast, draft => {
|
|
74
|
+
* const node = draft.instances.find(n => n.id === nodeId);
|
|
75
|
+
* if (node) node.x = 100;
|
|
76
|
+
* });
|
|
77
|
+
* ```
|
|
78
|
+
*/
|
|
79
|
+
export declare function withoutValidation<T extends TWorkflowAST>(ast: T, operation: (draft: Draft<T>) => void): T;
|
|
80
|
+
/**
|
|
81
|
+
* Options for node removal operations
|
|
82
|
+
*/
|
|
83
|
+
export interface RemoveOptions {
|
|
84
|
+
/**
|
|
85
|
+
* Whether to remove all connections to/from the node
|
|
86
|
+
* @default true
|
|
87
|
+
*/
|
|
88
|
+
removeConnections?: boolean;
|
|
89
|
+
/**
|
|
90
|
+
* Whether to validate after removal
|
|
91
|
+
* @default true
|
|
92
|
+
*/
|
|
93
|
+
validateAfter?: boolean;
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Filter options for querying nodes
|
|
97
|
+
*/
|
|
98
|
+
export interface NodeFilter {
|
|
99
|
+
/** Filter by node type name */
|
|
100
|
+
type?: string;
|
|
101
|
+
/** Filter by parent scope */
|
|
102
|
+
scope?: string;
|
|
103
|
+
/** Custom filter predicate */
|
|
104
|
+
predicate?: (node: TNodeInstanceAST) => boolean;
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Validates and normalizes port reference format
|
|
108
|
+
* Accepts either string format ("nodeId.portName") or object format ({ node, port })
|
|
109
|
+
*
|
|
110
|
+
* @param ref - Port reference to validate
|
|
111
|
+
* @returns Validated TPortReference object
|
|
112
|
+
* @throws {Error} If format is invalid
|
|
113
|
+
*
|
|
114
|
+
* @example
|
|
115
|
+
* ```typescript
|
|
116
|
+
* // String format
|
|
117
|
+
* const ref1 = validatePortReference("processor1.input");
|
|
118
|
+
* // Returns: { node: "processor1", port: "input" }
|
|
119
|
+
*
|
|
120
|
+
* // Object format
|
|
121
|
+
* const ref2 = validatePortReference({ node: "processor1", port: "input" });
|
|
122
|
+
* // Returns: { node: "processor1", port: "input" }
|
|
123
|
+
*
|
|
124
|
+
* // Invalid format throws error
|
|
125
|
+
* validatePortReference("invalid"); // Throws: Invalid port reference format
|
|
126
|
+
* ```
|
|
127
|
+
*/
|
|
128
|
+
export declare function validatePortReference(ref: string | TPortReference): TPortReference;
|
|
129
|
+
/**
|
|
130
|
+
* Checks if two port references point to the same port
|
|
131
|
+
* Compares both node ID and port name for equality
|
|
132
|
+
*
|
|
133
|
+
* @param a - First port reference
|
|
134
|
+
* @param b - Second port reference
|
|
135
|
+
* @returns True if both references point to the same port
|
|
136
|
+
*
|
|
137
|
+
* @example
|
|
138
|
+
* ```typescript
|
|
139
|
+
* const ref1 = { node: "processor1", port: "input" };
|
|
140
|
+
* const ref2 = { node: "processor1", port: "input" };
|
|
141
|
+
* const ref3 = { node: "processor1", port: "output" };
|
|
142
|
+
*
|
|
143
|
+
* portReferencesEqual(ref1, ref2); // true
|
|
144
|
+
* portReferencesEqual(ref1, ref3); // false
|
|
145
|
+
* ```
|
|
146
|
+
*/
|
|
147
|
+
export declare function portReferencesEqual(a: TPortReference, b: TPortReference): boolean;
|
|
148
|
+
/**
|
|
149
|
+
* Formats a port reference object as a string
|
|
150
|
+
* Converts { node, port } to "node.port" format
|
|
151
|
+
*
|
|
152
|
+
* @param ref - Port reference to format
|
|
153
|
+
* @returns String representation in "node.port" format
|
|
154
|
+
*
|
|
155
|
+
* @example
|
|
156
|
+
* ```typescript
|
|
157
|
+
* const ref = { node: "processor1", port: "input" };
|
|
158
|
+
* const str = formatPortReference(ref);
|
|
159
|
+
* // Returns: "processor1.input"
|
|
160
|
+
* ```
|
|
161
|
+
*/
|
|
162
|
+
export declare function formatPortReference(ref: TPortReference): string;
|
|
163
|
+
/**
|
|
164
|
+
* Helper to generate unique node IDs
|
|
165
|
+
* Uses base name + incrementing counter
|
|
166
|
+
*
|
|
167
|
+
* @param ast - Workflow AST
|
|
168
|
+
* @param baseName - Base name for the ID
|
|
169
|
+
* @returns Unique node ID
|
|
170
|
+
*
|
|
171
|
+
* @example
|
|
172
|
+
* ```typescript
|
|
173
|
+
* generateUniqueNodeId(ast, 'processor') // Returns 'processor', 'processor1', 'processor2', etc.
|
|
174
|
+
* ```
|
|
175
|
+
*/
|
|
176
|
+
export declare function generateUniqueNodeId(ast: TWorkflowAST, baseName: string): string;
|
|
177
|
+
/**
|
|
178
|
+
* Asserts that a node type exists in the workflow
|
|
179
|
+
* Useful for validation before adding node instances
|
|
180
|
+
*
|
|
181
|
+
* @param ast - Workflow AST (or Immer draft)
|
|
182
|
+
* @param typeName - Node type function name to check
|
|
183
|
+
* @throws {Error} If node type doesn't exist (lists available types)
|
|
184
|
+
*
|
|
185
|
+
* @example
|
|
186
|
+
* ```typescript
|
|
187
|
+
* // Before adding a node, verify its type exists
|
|
188
|
+
* assertNodeTypeExists(workflow, "processData");
|
|
189
|
+
* const node = addNode(workflow, { id: "proc1", nodeType: "processData" });
|
|
190
|
+
*
|
|
191
|
+
* // Throws with helpful message if missing
|
|
192
|
+
* assertNodeTypeExists(workflow, "invalid");
|
|
193
|
+
* // Error: Node type "invalid" not found. Available types: processData, transformData
|
|
194
|
+
* ```
|
|
195
|
+
*/
|
|
196
|
+
export declare function assertNodeTypeExists(ast: TWorkflowAST, typeName: string): void;
|
|
197
|
+
/**
|
|
198
|
+
* Asserts that a node instance exists in the workflow
|
|
199
|
+
* Useful for validation before operations like rename or remove
|
|
200
|
+
*
|
|
201
|
+
* @param ast - Workflow AST (or Immer draft)
|
|
202
|
+
* @param nodeId - Node instance ID to check
|
|
203
|
+
* @throws {Error} If node doesn't exist (lists available nodes)
|
|
204
|
+
*
|
|
205
|
+
* @example
|
|
206
|
+
* ```typescript
|
|
207
|
+
* // Before renaming a node, verify it exists
|
|
208
|
+
* assertNodeExists(workflow, "processor1");
|
|
209
|
+
* const updated = renameNode(workflow, "processor1", "processor_renamed");
|
|
210
|
+
*
|
|
211
|
+
* // Throws with helpful message if missing
|
|
212
|
+
* assertNodeExists(workflow, "missing");
|
|
213
|
+
* // Error: Node "missing" not found. Available nodes: processor1, transformer1
|
|
214
|
+
* ```
|
|
215
|
+
*/
|
|
216
|
+
export declare function assertNodeExists(ast: TWorkflowAST, nodeId: string): void;
|
|
217
|
+
/**
|
|
218
|
+
* Asserts that a node instance does NOT exist in the workflow
|
|
219
|
+
* Useful for validation before adding new nodes to prevent ID conflicts
|
|
220
|
+
*
|
|
221
|
+
* @param ast - Workflow AST (or Immer draft)
|
|
222
|
+
* @param nodeId - Node instance ID to check
|
|
223
|
+
* @throws {Error} If node already exists
|
|
224
|
+
*
|
|
225
|
+
* @example
|
|
226
|
+
* ```typescript
|
|
227
|
+
* // Before adding a node, verify ID is unique
|
|
228
|
+
* assertNodeNotExists(workflow, "newProcessor");
|
|
229
|
+
* const updated = addNode(workflow, { id: "newProcessor", nodeType: "process" });
|
|
230
|
+
*
|
|
231
|
+
* // Throws if ID is taken
|
|
232
|
+
* assertNodeNotExists(workflow, "processor1");
|
|
233
|
+
* // Error: Node "processor1" already exists
|
|
234
|
+
* ```
|
|
235
|
+
*/
|
|
236
|
+
export declare function assertNodeNotExists(ast: TWorkflowAST, nodeId: string): void;
|
|
237
|
+
/**
|
|
238
|
+
* Result type for operations that may produce warnings
|
|
239
|
+
*/
|
|
240
|
+
export interface OperationResult<T = void> {
|
|
241
|
+
/** Result value (if applicable) */
|
|
242
|
+
value?: T;
|
|
243
|
+
/** Validation result */
|
|
244
|
+
validation: ValidationResult;
|
|
245
|
+
/** Whether operation succeeded */
|
|
246
|
+
success: boolean;
|
|
247
|
+
}
|
|
248
|
+
//# sourceMappingURL=helpers.d.ts.map
|
|
@@ -0,0 +1,285 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Helper utilities for API manipulation operations
|
|
3
|
+
* Provides immutability via Immer and validation wrappers
|
|
4
|
+
*/
|
|
5
|
+
import { produce, enableMapSet } from "immer";
|
|
6
|
+
import { validateWorkflow } from "./validate.js";
|
|
7
|
+
import { getErrorMessage } from "../utils/error-utils.js";
|
|
8
|
+
// Enable Map/Set support for Immer
|
|
9
|
+
enableMapSet();
|
|
10
|
+
/**
|
|
11
|
+
* Wrapper for all mutation operations that ensures:
|
|
12
|
+
* 1. Immutability via Immer's structural sharing (only clones what changes)
|
|
13
|
+
* 2. Validation after operation (ensures every operation produces valid AST)
|
|
14
|
+
* 3. Proper error handling (throws on validation failure)
|
|
15
|
+
*
|
|
16
|
+
* This is the foundation of all manipulation API functions.
|
|
17
|
+
* Each operation can mutate the draft as if it were mutable,
|
|
18
|
+
* but Immer returns a new immutable AST with structural sharing.
|
|
19
|
+
*
|
|
20
|
+
* @param ast - The workflow AST to operate on
|
|
21
|
+
* @param operation - Function that mutates the draft
|
|
22
|
+
* @param operationName - Optional name for better error messages
|
|
23
|
+
* @returns New immutable WorkflowAST
|
|
24
|
+
* @throws {Error} If validation fails after operation
|
|
25
|
+
*
|
|
26
|
+
* @example
|
|
27
|
+
* ```typescript
|
|
28
|
+
* const newAst = withValidation(ast, draft => {
|
|
29
|
+
* draft.instances.push(newNode);
|
|
30
|
+
* }, 'addNode');
|
|
31
|
+
* ```
|
|
32
|
+
*/
|
|
33
|
+
export function withValidation(ast, operation, operationName) {
|
|
34
|
+
// Execute operation with Immer
|
|
35
|
+
const result = produce(ast, operation);
|
|
36
|
+
// Validate the final result (not the draft)
|
|
37
|
+
const validation = validateWorkflow(result);
|
|
38
|
+
if (validation.errors.length > 0) {
|
|
39
|
+
const context = operationName ? ` during ${operationName}` : "";
|
|
40
|
+
const errorDetails = validation.errors
|
|
41
|
+
.slice(0, 3)
|
|
42
|
+
.map((e) => ` - ${e.message}`)
|
|
43
|
+
.join("\n");
|
|
44
|
+
throw new Error(`Validation failed${context}:\n${errorDetails}${validation.errors.length > 3 ? `\n ... and ${validation.errors.length - 3} more errors` : ""}`);
|
|
45
|
+
}
|
|
46
|
+
return result;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Wrapper for mutation operations with minimal validation.
|
|
50
|
+
* Only validates operation-specific requirements (e.g., "does this node exist?")
|
|
51
|
+
* but does NOT validate the entire workflow.
|
|
52
|
+
*
|
|
53
|
+
* This allows operations to succeed even when the workflow has other validation
|
|
54
|
+
* errors, preventing a frustrating "can't move nodes because workflow is broken"
|
|
55
|
+
* experience while still catching obvious mistakes like typos.
|
|
56
|
+
*
|
|
57
|
+
* @param ast - The workflow AST to operate on
|
|
58
|
+
* @param operation - Function that mutates the draft
|
|
59
|
+
* @param checks - Optional validation checks specific to this operation
|
|
60
|
+
* @param operationName - Optional name for better error messages
|
|
61
|
+
* @returns New immutable WorkflowAST
|
|
62
|
+
* @throws {Error} If operation-specific checks fail
|
|
63
|
+
*
|
|
64
|
+
* @example
|
|
65
|
+
* ```typescript
|
|
66
|
+
* const newAst = withMinimalValidation(
|
|
67
|
+
* ast,
|
|
68
|
+
* draft => { draft.instances = draft.instances.filter(n => n.id !== nodeId); },
|
|
69
|
+
* [(result) => assertNodeExists(result, nodeId)],
|
|
70
|
+
* 'removeNode'
|
|
71
|
+
* );
|
|
72
|
+
* ```
|
|
73
|
+
*/
|
|
74
|
+
export function withMinimalValidation(ast, operation, checks, operationName) {
|
|
75
|
+
// Execute operation with Immer
|
|
76
|
+
const result = produce(ast, operation);
|
|
77
|
+
// Run operation-specific checks (if provided)
|
|
78
|
+
if (checks) {
|
|
79
|
+
try {
|
|
80
|
+
checks.forEach(check => check(result));
|
|
81
|
+
}
|
|
82
|
+
catch (error) {
|
|
83
|
+
const context = operationName ? ` during ${operationName}` : "";
|
|
84
|
+
throw new Error(`${getErrorMessage(error)}${context}`);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
return result;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Wrapper for UI-only mutation operations that ensures immutability
|
|
91
|
+
* but performs NO validation. Use this for metadata changes that don't
|
|
92
|
+
* affect workflow correctness (e.g., node positions, labels, UI state).
|
|
93
|
+
*
|
|
94
|
+
* This allows users to make cosmetic changes even when the workflow
|
|
95
|
+
* has validation errors, providing a smooth editing experience.
|
|
96
|
+
*
|
|
97
|
+
* @param ast - The workflow AST to operate on
|
|
98
|
+
* @param operation - Function that mutates the draft
|
|
99
|
+
* @returns New immutable WorkflowAST
|
|
100
|
+
*
|
|
101
|
+
* @example
|
|
102
|
+
* ```typescript
|
|
103
|
+
* const newAst = withoutValidation(ast, draft => {
|
|
104
|
+
* const node = draft.instances.find(n => n.id === nodeId);
|
|
105
|
+
* if (node) node.x = 100;
|
|
106
|
+
* });
|
|
107
|
+
* ```
|
|
108
|
+
*/
|
|
109
|
+
export function withoutValidation(ast, operation) {
|
|
110
|
+
// Execute operation with Immer (immutability only, no validation)
|
|
111
|
+
return produce(ast, operation);
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Validates and normalizes port reference format
|
|
115
|
+
* Accepts either string format ("nodeId.portName") or object format ({ node, port })
|
|
116
|
+
*
|
|
117
|
+
* @param ref - Port reference to validate
|
|
118
|
+
* @returns Validated TPortReference object
|
|
119
|
+
* @throws {Error} If format is invalid
|
|
120
|
+
*
|
|
121
|
+
* @example
|
|
122
|
+
* ```typescript
|
|
123
|
+
* // String format
|
|
124
|
+
* const ref1 = validatePortReference("processor1.input");
|
|
125
|
+
* // Returns: { node: "processor1", port: "input" }
|
|
126
|
+
*
|
|
127
|
+
* // Object format
|
|
128
|
+
* const ref2 = validatePortReference({ node: "processor1", port: "input" });
|
|
129
|
+
* // Returns: { node: "processor1", port: "input" }
|
|
130
|
+
*
|
|
131
|
+
* // Invalid format throws error
|
|
132
|
+
* validatePortReference("invalid"); // Throws: Invalid port reference format
|
|
133
|
+
* ```
|
|
134
|
+
*/
|
|
135
|
+
export function validatePortReference(ref) {
|
|
136
|
+
if (typeof ref === "string") {
|
|
137
|
+
const parts = ref.split(".");
|
|
138
|
+
if (parts.length !== 2) {
|
|
139
|
+
throw new Error(`Invalid port reference format: "${ref}". Expected "nodeId.portName"`);
|
|
140
|
+
}
|
|
141
|
+
return { node: parts[0], port: parts[1] };
|
|
142
|
+
}
|
|
143
|
+
if (!ref.node || !ref.port) {
|
|
144
|
+
throw new Error(`Invalid port reference: missing node or port property`);
|
|
145
|
+
}
|
|
146
|
+
return ref;
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Checks if two port references point to the same port
|
|
150
|
+
* Compares both node ID and port name for equality
|
|
151
|
+
*
|
|
152
|
+
* @param a - First port reference
|
|
153
|
+
* @param b - Second port reference
|
|
154
|
+
* @returns True if both references point to the same port
|
|
155
|
+
*
|
|
156
|
+
* @example
|
|
157
|
+
* ```typescript
|
|
158
|
+
* const ref1 = { node: "processor1", port: "input" };
|
|
159
|
+
* const ref2 = { node: "processor1", port: "input" };
|
|
160
|
+
* const ref3 = { node: "processor1", port: "output" };
|
|
161
|
+
*
|
|
162
|
+
* portReferencesEqual(ref1, ref2); // true
|
|
163
|
+
* portReferencesEqual(ref1, ref3); // false
|
|
164
|
+
* ```
|
|
165
|
+
*/
|
|
166
|
+
export function portReferencesEqual(a, b) {
|
|
167
|
+
// Include scope in comparison - scoped ports are different from non-scoped ports
|
|
168
|
+
return a.node === b.node && a.port === b.port && (a.scope ?? null) === (b.scope ?? null);
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Formats a port reference object as a string
|
|
172
|
+
* Converts { node, port } to "node.port" format
|
|
173
|
+
*
|
|
174
|
+
* @param ref - Port reference to format
|
|
175
|
+
* @returns String representation in "node.port" format
|
|
176
|
+
*
|
|
177
|
+
* @example
|
|
178
|
+
* ```typescript
|
|
179
|
+
* const ref = { node: "processor1", port: "input" };
|
|
180
|
+
* const str = formatPortReference(ref);
|
|
181
|
+
* // Returns: "processor1.input"
|
|
182
|
+
* ```
|
|
183
|
+
*/
|
|
184
|
+
export function formatPortReference(ref) {
|
|
185
|
+
return `${ref.node}.${ref.port}`;
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* Helper to generate unique node IDs
|
|
189
|
+
* Uses base name + incrementing counter
|
|
190
|
+
*
|
|
191
|
+
* @param ast - Workflow AST
|
|
192
|
+
* @param baseName - Base name for the ID
|
|
193
|
+
* @returns Unique node ID
|
|
194
|
+
*
|
|
195
|
+
* @example
|
|
196
|
+
* ```typescript
|
|
197
|
+
* generateUniqueNodeId(ast, 'processor') // Returns 'processor', 'processor1', 'processor2', etc.
|
|
198
|
+
* ```
|
|
199
|
+
*/
|
|
200
|
+
export function generateUniqueNodeId(ast, baseName) {
|
|
201
|
+
const existingIds = new Set(ast.instances.map((n) => n.id));
|
|
202
|
+
// Try base name first
|
|
203
|
+
if (!existingIds.has(baseName)) {
|
|
204
|
+
return baseName;
|
|
205
|
+
}
|
|
206
|
+
// Try with counter
|
|
207
|
+
let counter = 1;
|
|
208
|
+
while (existingIds.has(`${baseName}${counter}`)) {
|
|
209
|
+
counter++;
|
|
210
|
+
}
|
|
211
|
+
return `${baseName}${counter}`;
|
|
212
|
+
}
|
|
213
|
+
/**
|
|
214
|
+
* Asserts that a node type exists in the workflow
|
|
215
|
+
* Useful for validation before adding node instances
|
|
216
|
+
*
|
|
217
|
+
* @param ast - Workflow AST (or Immer draft)
|
|
218
|
+
* @param typeName - Node type function name to check
|
|
219
|
+
* @throws {Error} If node type doesn't exist (lists available types)
|
|
220
|
+
*
|
|
221
|
+
* @example
|
|
222
|
+
* ```typescript
|
|
223
|
+
* // Before adding a node, verify its type exists
|
|
224
|
+
* assertNodeTypeExists(workflow, "processData");
|
|
225
|
+
* const node = addNode(workflow, { id: "proc1", nodeType: "processData" });
|
|
226
|
+
*
|
|
227
|
+
* // Throws with helpful message if missing
|
|
228
|
+
* assertNodeTypeExists(workflow, "invalid");
|
|
229
|
+
* // Error: Node type "invalid" not found. Available types: processData, transformData
|
|
230
|
+
* ```
|
|
231
|
+
*/
|
|
232
|
+
export function assertNodeTypeExists(ast, typeName) {
|
|
233
|
+
if (!ast.nodeTypes.some((nt) => nt.name === typeName || nt.functionName === typeName)) {
|
|
234
|
+
throw new Error(`Node type "${typeName}" not found. Available types: ${ast.nodeTypes.map((nt) => nt.name || nt.functionName).join(", ")}`);
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
/**
|
|
238
|
+
* Asserts that a node instance exists in the workflow
|
|
239
|
+
* Useful for validation before operations like rename or remove
|
|
240
|
+
*
|
|
241
|
+
* @param ast - Workflow AST (or Immer draft)
|
|
242
|
+
* @param nodeId - Node instance ID to check
|
|
243
|
+
* @throws {Error} If node doesn't exist (lists available nodes)
|
|
244
|
+
*
|
|
245
|
+
* @example
|
|
246
|
+
* ```typescript
|
|
247
|
+
* // Before renaming a node, verify it exists
|
|
248
|
+
* assertNodeExists(workflow, "processor1");
|
|
249
|
+
* const updated = renameNode(workflow, "processor1", "processor_renamed");
|
|
250
|
+
*
|
|
251
|
+
* // Throws with helpful message if missing
|
|
252
|
+
* assertNodeExists(workflow, "missing");
|
|
253
|
+
* // Error: Node "missing" not found. Available nodes: processor1, transformer1
|
|
254
|
+
* ```
|
|
255
|
+
*/
|
|
256
|
+
export function assertNodeExists(ast, nodeId) {
|
|
257
|
+
if (!ast.instances.some((n) => n.id === nodeId)) {
|
|
258
|
+
throw new Error(`Node "${nodeId}" not found. Available nodes: ${ast.instances.map((n) => n.id).join(", ")}`);
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
/**
|
|
262
|
+
* Asserts that a node instance does NOT exist in the workflow
|
|
263
|
+
* Useful for validation before adding new nodes to prevent ID conflicts
|
|
264
|
+
*
|
|
265
|
+
* @param ast - Workflow AST (or Immer draft)
|
|
266
|
+
* @param nodeId - Node instance ID to check
|
|
267
|
+
* @throws {Error} If node already exists
|
|
268
|
+
*
|
|
269
|
+
* @example
|
|
270
|
+
* ```typescript
|
|
271
|
+
* // Before adding a node, verify ID is unique
|
|
272
|
+
* assertNodeNotExists(workflow, "newProcessor");
|
|
273
|
+
* const updated = addNode(workflow, { id: "newProcessor", nodeType: "process" });
|
|
274
|
+
*
|
|
275
|
+
* // Throws if ID is taken
|
|
276
|
+
* assertNodeNotExists(workflow, "processor1");
|
|
277
|
+
* // Error: Node "processor1" already exists
|
|
278
|
+
* ```
|
|
279
|
+
*/
|
|
280
|
+
export function assertNodeNotExists(ast, nodeId) {
|
|
281
|
+
if (ast.instances.some((n) => n.id === nodeId)) {
|
|
282
|
+
throw new Error(`Node "${nodeId}" already exists`);
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
//# sourceMappingURL=helpers.js.map
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module api
|
|
3
|
+
*
|
|
4
|
+
* # Flow Weaver API
|
|
5
|
+
*
|
|
6
|
+
* High-level API for working with Flow Weaver workflows.
|
|
7
|
+
*
|
|
8
|
+
* ## Parse → Validate → Generate Pipeline
|
|
9
|
+
*
|
|
10
|
+
* ```
|
|
11
|
+
* Source File (.ts)
|
|
12
|
+
* ↓
|
|
13
|
+
* parseWorkflow() → TWorkflowAST
|
|
14
|
+
* ↓
|
|
15
|
+
* validateWorkflow() → ValidationResult
|
|
16
|
+
* ↓
|
|
17
|
+
* generateCode() → Executable code
|
|
18
|
+
* ```
|
|
19
|
+
*
|
|
20
|
+
* Or use `compileWorkflow()` for all steps in one call.
|
|
21
|
+
*
|
|
22
|
+
* ## Key Exports
|
|
23
|
+
*
|
|
24
|
+
* - **Parsing**: {@link parseWorkflow}
|
|
25
|
+
* - **Validation**: {@link validateWorkflow}
|
|
26
|
+
* - **Generation**: {@link generateCode}, {@link generateInPlace}
|
|
27
|
+
* - **Compilation**: {@link compileWorkflow}
|
|
28
|
+
* - **Query**: `getNode()`, `getNodeType()`, `findConnections()`
|
|
29
|
+
* - **Manipulation**: `addNode()`, `removeNode()`, `addConnection()`, etc.
|
|
30
|
+
* - **Builder**: `WorkflowBuilder` for programmatic AST construction
|
|
31
|
+
*/
|
|
32
|
+
export type { TWorkflowAST, TNodeTypeDefaultConfig, TNodeTypeAST, TNodeInstanceConfig, TNodeInstanceAST, TConnectionAST, TPortReference, TImportDeclaration, TImportSpecifier, TPortDefinition, TDataType, TSerializableValue, TSerializableObject, TSerializableArray, TExecuteWhen, TBranchingStrategy, TWorkflowMetadata, TNodeMetadata, TConnectionMetadata, TSourceLocation, TControlFlowGraph, TControlFlowEdge, TValidationError, TAnalysisResult, TBranchingNodeInfo, TBranchRegion, TMergeNodeInfo, TASTTransformer, TASTVisitor, TParseOptions, TValidationRule, TGenerateOptions, TCompileResult, TCompilationMetadata, } from '../ast/types.js';
|
|
33
|
+
export { type CompileOptions, compileWorkflow } from './compile.js';
|
|
34
|
+
export { type GenerateResult, generateCode } from './generate.js';
|
|
35
|
+
export { type InPlaceGenerateOptions, type InPlaceGenerateResult, generateInPlace, hasInPlaceMarkers, stripGeneratedSections, MARKERS, } from './generate-in-place.js';
|
|
36
|
+
export { type ParseResult, parseWorkflow } from './parse.js';
|
|
37
|
+
export { transformWorkflow } from './transform.js';
|
|
38
|
+
export { type ValidationResult, validateWorkflow } from './validate.js';
|
|
39
|
+
export * from './manipulation.js';
|
|
40
|
+
export { withValidation, withMinimalValidation, withoutValidation, type RemoveOptions, type NodeFilter, type OperationResult, validatePortReference, portReferencesEqual, formatPortReference, generateUniqueNodeId, assertNodeTypeExists, assertNodeExists, assertNodeNotExists, } from './helpers.js';
|
|
41
|
+
export * from './query.js';
|
|
42
|
+
export * from './builder.js';
|
|
43
|
+
export * from './workflow-file-operations.js';
|
|
44
|
+
export * from './templates.js';
|
|
45
|
+
export * from './patterns.js';
|
|
46
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module api
|
|
3
|
+
*
|
|
4
|
+
* # Flow Weaver API
|
|
5
|
+
*
|
|
6
|
+
* High-level API for working with Flow Weaver workflows.
|
|
7
|
+
*
|
|
8
|
+
* ## Parse → Validate → Generate Pipeline
|
|
9
|
+
*
|
|
10
|
+
* ```
|
|
11
|
+
* Source File (.ts)
|
|
12
|
+
* ↓
|
|
13
|
+
* parseWorkflow() → TWorkflowAST
|
|
14
|
+
* ↓
|
|
15
|
+
* validateWorkflow() → ValidationResult
|
|
16
|
+
* ↓
|
|
17
|
+
* generateCode() → Executable code
|
|
18
|
+
* ```
|
|
19
|
+
*
|
|
20
|
+
* Or use `compileWorkflow()` for all steps in one call.
|
|
21
|
+
*
|
|
22
|
+
* ## Key Exports
|
|
23
|
+
*
|
|
24
|
+
* - **Parsing**: {@link parseWorkflow}
|
|
25
|
+
* - **Validation**: {@link validateWorkflow}
|
|
26
|
+
* - **Generation**: {@link generateCode}, {@link generateInPlace}
|
|
27
|
+
* - **Compilation**: {@link compileWorkflow}
|
|
28
|
+
* - **Query**: `getNode()`, `getNodeType()`, `findConnections()`
|
|
29
|
+
* - **Manipulation**: `addNode()`, `removeNode()`, `addConnection()`, etc.
|
|
30
|
+
* - **Builder**: `WorkflowBuilder` for programmatic AST construction
|
|
31
|
+
*/
|
|
32
|
+
export { compileWorkflow } from './compile.js';
|
|
33
|
+
export { generateCode } from './generate.js';
|
|
34
|
+
export { generateInPlace, hasInPlaceMarkers, stripGeneratedSections, MARKERS, } from './generate-in-place.js';
|
|
35
|
+
export { parseWorkflow } from './parse.js';
|
|
36
|
+
export { transformWorkflow } from './transform.js';
|
|
37
|
+
export { validateWorkflow } from './validate.js';
|
|
38
|
+
export * from './manipulation.js';
|
|
39
|
+
export { withValidation, withMinimalValidation, withoutValidation, validatePortReference, portReferencesEqual, formatPortReference, generateUniqueNodeId, assertNodeTypeExists, assertNodeExists, assertNodeNotExists, } from './helpers.js';
|
|
40
|
+
export * from './query.js';
|
|
41
|
+
export * from './builder.js';
|
|
42
|
+
export * from './workflow-file-operations.js';
|
|
43
|
+
export * from './templates.js';
|
|
44
|
+
export * from './patterns.js';
|
|
45
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generates inline runtime code for standalone execution
|
|
3
|
+
*
|
|
4
|
+
* This includes all types and the GeneratedExecutionContext class
|
|
5
|
+
* so generated workflows have zero runtime dependencies.
|
|
6
|
+
*
|
|
7
|
+
* @param production - Whether to generate production-optimized code (no debug events)
|
|
8
|
+
* @param exportClasses - Whether to add 'export' keyword to classes (for shared modules)
|
|
9
|
+
*/
|
|
10
|
+
export declare function generateInlineRuntime(production: boolean, exportClasses?: boolean): string;
|
|
11
|
+
import type { TModuleFormat } from '../ast/types.js';
|
|
12
|
+
/**
|
|
13
|
+
* Generates inline WebSocket debug client for auto-detection from env var
|
|
14
|
+
* Only included in development mode builds
|
|
15
|
+
*
|
|
16
|
+
* @param moduleFormat - The module format to use for imports ('esm' or 'cjs')
|
|
17
|
+
*/
|
|
18
|
+
export declare function generateInlineDebugClient(moduleFormat?: TModuleFormat): string;
|
|
19
|
+
/**
|
|
20
|
+
* Generates a standalone runtime module file for multi-workflow bundles.
|
|
21
|
+
* This exports all runtime types and classes so individual workflow files can import them.
|
|
22
|
+
*
|
|
23
|
+
* @param production - Whether to generate production-optimized code (no debug events)
|
|
24
|
+
* @param moduleFormat - The module format to use ('esm' or 'cjs')
|
|
25
|
+
*/
|
|
26
|
+
export declare function generateStandaloneRuntimeModule(production: boolean, moduleFormat?: TModuleFormat): string;
|
|
27
|
+
//# sourceMappingURL=inline-runtime.d.ts.map
|