reqon-dsl 0.2.0 → 0.4.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/CHANGELOG.md +7 -0
- package/README.md +45 -3
- package/dist/ast/nodes.d.ts +91 -4
- package/dist/ast/nodes.js +14 -0
- package/dist/auth/circuit-breaker.d.ts +11 -0
- package/dist/auth/circuit-breaker.js +90 -18
- package/dist/auth/credentials.d.ts +6 -1
- package/dist/auth/credentials.js +12 -4
- package/dist/auth/oauth2-provider.js +13 -3
- package/dist/auth/rate-limiter.d.ts +12 -1
- package/dist/auth/rate-limiter.js +39 -26
- package/dist/auth/token-store.js +8 -1
- package/dist/cli.d.ts +24 -1
- package/dist/cli.js +149 -10
- package/dist/config/constants.d.ts +152 -0
- package/dist/config/constants.js +139 -0
- package/dist/config/index.d.ts +4 -0
- package/dist/config/index.js +4 -0
- package/dist/control/index.d.ts +2 -0
- package/dist/control/index.js +1 -0
- package/dist/control/server.d.ts +105 -0
- package/dist/control/server.js +315 -0
- package/dist/control/types.d.ts +61 -0
- package/dist/control/types.js +7 -0
- package/dist/debug/cli-debugger.d.ts +17 -0
- package/dist/debug/cli-debugger.js +185 -0
- package/dist/debug/controller.d.ts +94 -0
- package/dist/debug/controller.js +45 -0
- package/dist/debug/index.d.ts +6 -0
- package/dist/debug/index.js +5 -0
- package/dist/errors/index.d.ts +67 -0
- package/dist/errors/index.js +89 -1
- package/dist/execution/index.d.ts +1 -1
- package/dist/execution/state.d.ts +24 -0
- package/dist/execution/store.js +2 -2
- package/dist/execution-log/events.d.ts +125 -0
- package/dist/execution-log/events.js +17 -0
- package/dist/execution-log/fold.d.ts +38 -0
- package/dist/execution-log/fold.js +54 -0
- package/dist/execution-log/index.d.ts +18 -0
- package/dist/execution-log/index.js +6 -0
- package/dist/execution-log/postgres-store.d.ts +36 -0
- package/dist/execution-log/postgres-store.js +108 -0
- package/dist/execution-log/resume.d.ts +11 -0
- package/dist/execution-log/resume.js +5 -0
- package/dist/execution-log/sqlite-store.d.ts +16 -0
- package/dist/execution-log/sqlite-store.js +101 -0
- package/dist/execution-log/store.d.ts +72 -0
- package/dist/execution-log/store.js +182 -0
- package/dist/index.d.ts +23 -2
- package/dist/index.js +35 -3
- package/dist/interpreter/context.d.ts +29 -0
- package/dist/interpreter/context.js +18 -0
- package/dist/interpreter/evaluator.d.ts +63 -1
- package/dist/interpreter/evaluator.js +219 -42
- package/dist/interpreter/executor.d.ts +132 -14
- package/dist/interpreter/executor.js +883 -178
- package/dist/interpreter/fetch-handler.d.ts +48 -1
- package/dist/interpreter/fetch-handler.js +216 -38
- package/dist/interpreter/http.d.ts +34 -0
- package/dist/interpreter/http.js +203 -28
- package/dist/interpreter/index.d.ts +5 -3
- package/dist/interpreter/index.js +4 -2
- package/dist/interpreter/pagination.d.ts +12 -3
- package/dist/interpreter/pagination.js +102 -32
- package/dist/interpreter/signals.d.ts +8 -0
- package/dist/interpreter/signals.js +12 -0
- package/dist/interpreter/source-manager.d.ts +75 -0
- package/dist/interpreter/source-manager.js +157 -0
- package/dist/interpreter/step-handlers/apply-handler.d.ts +29 -0
- package/dist/interpreter/step-handlers/apply-handler.js +79 -0
- package/dist/interpreter/step-handlers/for-handler.d.ts +16 -0
- package/dist/interpreter/step-handlers/for-handler.js +89 -7
- package/dist/interpreter/step-handlers/index.d.ts +4 -2
- package/dist/interpreter/step-handlers/index.js +4 -2
- package/dist/interpreter/step-handlers/match-handler.d.ts +9 -0
- package/dist/interpreter/step-handlers/match-handler.js +47 -17
- package/dist/interpreter/step-handlers/pause-handler.d.ts +52 -0
- package/dist/interpreter/step-handlers/pause-handler.js +87 -0
- package/dist/interpreter/step-handlers/store-handler.d.ts +17 -1
- package/dist/interpreter/step-handlers/store-handler.js +61 -20
- package/dist/interpreter/step-handlers/types.d.ts +3 -0
- package/dist/interpreter/step-handlers/validate-handler.d.ts +2 -1
- package/dist/interpreter/step-handlers/validate-handler.js +7 -2
- package/dist/interpreter/step-handlers/webhook-handler.d.ts +4 -0
- package/dist/interpreter/step-handlers/webhook-handler.js +31 -5
- package/dist/interpreter/store-manager.d.ts +46 -0
- package/dist/interpreter/store-manager.js +70 -0
- package/dist/lexer/index.d.ts +11 -4
- package/dist/lexer/index.js +11 -4
- package/dist/lexer/tokens.d.ts +17 -1
- package/dist/lexer/tokens.js +36 -0
- package/dist/loader/index.js +5 -8
- package/dist/mcp/index.d.ts +11 -0
- package/dist/mcp/index.js +11 -0
- package/dist/mcp/sandbox.d.ts +41 -0
- package/dist/mcp/sandbox.js +76 -0
- package/dist/mcp/server.d.ts +17 -0
- package/dist/mcp/server.js +504 -0
- package/dist/oas/index.d.ts +2 -0
- package/dist/oas/index.js +1 -0
- package/dist/oas/loader.d.ts +13 -1
- package/dist/oas/loader.js +25 -3
- package/dist/oas/mock-generator.d.ts +12 -0
- package/dist/oas/mock-generator.js +196 -0
- package/dist/oas/validator.js +45 -5
- package/dist/observability/events.d.ts +248 -0
- package/dist/observability/events.js +85 -0
- package/dist/observability/index.d.ts +15 -0
- package/dist/observability/index.js +12 -0
- package/dist/observability/logger.d.ts +106 -0
- package/dist/observability/logger.js +266 -0
- package/dist/observability/otel.d.ts +143 -0
- package/dist/observability/otel.js +421 -0
- package/dist/parser/action-parser.d.ts +105 -0
- package/dist/parser/action-parser.js +645 -0
- package/dist/parser/base.d.ts +7 -0
- package/dist/parser/base.js +11 -0
- package/dist/parser/expressions.d.ts +14 -0
- package/dist/parser/expressions.js +89 -6
- package/dist/parser/fetch-parser.d.ts +27 -0
- package/dist/parser/fetch-parser.js +280 -0
- package/dist/parser/index.d.ts +17 -0
- package/dist/parser/index.js +17 -0
- package/dist/parser/parser.d.ts +44 -46
- package/dist/parser/parser.js +122 -1070
- package/dist/parser/pipeline-parser.d.ts +12 -0
- package/dist/parser/pipeline-parser.js +52 -0
- package/dist/parser/schedule-parser.d.ts +7 -0
- package/dist/parser/schedule-parser.js +137 -0
- package/dist/parser/source-parser.d.ts +9 -0
- package/dist/parser/source-parser.js +151 -0
- package/dist/pause/index.d.ts +15 -0
- package/dist/pause/index.js +12 -0
- package/dist/pause/log-store.d.ts +33 -0
- package/dist/pause/log-store.js +98 -0
- package/dist/pause/manager.d.ts +130 -0
- package/dist/pause/manager.js +294 -0
- package/dist/pause/state.d.ts +93 -0
- package/dist/pause/state.js +103 -0
- package/dist/pause/store.d.ts +61 -0
- package/dist/pause/store.js +158 -0
- package/dist/plugin.d.ts +9 -12
- package/dist/plugin.js +10 -13
- package/dist/scheduler/cron-parser.d.ts +10 -3
- package/dist/scheduler/cron-parser.js +227 -48
- package/dist/scheduler/scheduler.js +56 -22
- package/dist/stores/factory.d.ts +7 -1
- package/dist/stores/factory.js +14 -3
- package/dist/stores/file.d.ts +26 -0
- package/dist/stores/file.js +67 -21
- package/dist/stores/index.d.ts +16 -1
- package/dist/stores/index.js +16 -1
- package/dist/stores/memory.d.ts +4 -0
- package/dist/stores/memory.js +8 -6
- package/dist/stores/postgrest.d.ts +28 -0
- package/dist/stores/postgrest.js +84 -37
- package/dist/stores/types.d.ts +17 -0
- package/dist/stores/types.js +12 -0
- package/dist/sync/index.d.ts +3 -2
- package/dist/sync/index.js +2 -1
- package/dist/sync/log-store.d.ts +30 -0
- package/dist/sync/log-store.js +45 -0
- package/dist/sync/store.js +1 -1
- package/dist/trace/index.d.ts +18 -0
- package/dist/trace/index.js +13 -0
- package/dist/trace/log-view.d.ts +57 -0
- package/dist/trace/log-view.js +76 -0
- package/dist/trace/recorder.d.ts +75 -0
- package/dist/trace/recorder.js +157 -0
- package/dist/trace/replay.d.ts +132 -0
- package/dist/trace/replay.js +264 -0
- package/dist/trace/state.d.ts +102 -0
- package/dist/trace/state.js +86 -0
- package/dist/trace/store.d.ts +75 -0
- package/dist/trace/store.js +250 -0
- package/dist/utils/deep-merge.d.ts +10 -0
- package/dist/utils/deep-merge.js +23 -0
- package/dist/utils/file.d.ts +13 -4
- package/dist/utils/file.js +70 -12
- package/dist/utils/index.d.ts +2 -1
- package/dist/utils/index.js +2 -1
- package/dist/utils/long-timeout.d.ts +19 -0
- package/dist/utils/long-timeout.js +33 -0
- package/dist/utils/path.d.ts +22 -1
- package/dist/utils/path.js +46 -1
- package/dist/utils/redact.d.ts +22 -0
- package/dist/utils/redact.js +42 -0
- package/dist/utils/type-guards.d.ts +58 -0
- package/dist/utils/type-guards.js +92 -0
- package/dist/webhook/server.d.ts +9 -0
- package/dist/webhook/server.js +122 -36
- package/dist/webhook/types.d.ts +9 -1
- package/package.json +76 -9
- package/.claude/settings.local.json +0 -31
- package/.claude/skills/api-integration.md +0 -125
- package/.claude/skills/database-schema.md +0 -51
- package/.claude/skills/dsl-design.md +0 -80
- package/.claude/skills/property-testing.md +0 -143
- package/.claude/skills/reqon/SKILL.md +0 -44
- package/.claude/skills/reqon/references/examples.md +0 -206
- package/.claude/skills/reqon/references/syntax.md +0 -263
- package/.claude/skills/vscode-extension.md +0 -113
- package/.github/dependabot.yml +0 -32
- package/.github/pull_request_template.md +0 -21
- package/.github/workflows/ci.yml +0 -174
- package/.github/workflows/release.yml +0 -73
- package/CLAUDE.md +0 -72
- package/CONTRIBUTING.md +0 -161
- package/TODO.md +0 -51
- package/dist/auth/auth.test.d.ts +0 -1
- package/dist/auth/auth.test.js +0 -255
- package/dist/errors/errors.test.d.ts +0 -1
- package/dist/errors/errors.test.js +0 -165
- package/dist/execution/execution.test.d.ts +0 -1
- package/dist/execution/execution.test.js +0 -246
- package/dist/integration.test.d.ts +0 -1
- package/dist/integration.test.js +0 -168
- package/dist/interpreter/evaluator.test.d.ts +0 -1
- package/dist/interpreter/evaluator.test.js +0 -512
- package/dist/interpreter/http.test.d.ts +0 -1
- package/dist/interpreter/http.test.js +0 -299
- package/dist/interpreter/progress.test.d.ts +0 -1
- package/dist/interpreter/progress.test.js +0 -216
- package/dist/interpreter/schema-matcher.test.d.ts +0 -1
- package/dist/interpreter/schema-matcher.test.js +0 -122
- package/dist/lexer/lexer.d.ts +0 -24
- package/dist/lexer/lexer.js +0 -264
- package/dist/lexer/lexer.test.d.ts +0 -1
- package/dist/lexer/lexer.test.js +0 -259
- package/dist/loader/loader.test.d.ts +0 -1
- package/dist/loader/loader.test.js +0 -287
- package/dist/oas/oas.test.d.ts +0 -1
- package/dist/oas/oas.test.js +0 -218
- package/dist/parser/expressions.test.d.ts +0 -1
- package/dist/parser/expressions.test.js +0 -378
- package/dist/parser/match.test.d.ts +0 -1
- package/dist/parser/match.test.js +0 -254
- package/dist/parser/parser.test.d.ts +0 -1
- package/dist/parser/parser.test.js +0 -333
- package/dist/parser/schedule.test.d.ts +0 -1
- package/dist/parser/schedule.test.js +0 -241
- package/dist/scheduler/cron-parser.test.d.ts +0 -1
- package/dist/scheduler/cron-parser.test.js +0 -188
- package/dist/stores/file.test.d.ts +0 -1
- package/dist/stores/file.test.js +0 -165
- package/dist/stores/memory.test.d.ts +0 -1
- package/dist/stores/memory.test.js +0 -157
- package/dist/stores/stores.test.d.ts +0 -1
- package/dist/stores/stores.test.js +0 -158
- package/dist/sync/sync.test.d.ts +0 -1
- package/dist/sync/sync.test.js +0 -221
- package/docusaurus/README.md +0 -41
- package/docusaurus/docs/advanced/execution-state.md +0 -283
- package/docusaurus/docs/advanced/extending-reqon.md +0 -388
- package/docusaurus/docs/advanced/multi-file-missions.md +0 -250
- package/docusaurus/docs/advanced/parallel-execution.md +0 -353
- package/docusaurus/docs/api-reference.md +0 -443
- package/docusaurus/docs/authentication/api-key.md +0 -339
- package/docusaurus/docs/authentication/basic.md +0 -276
- package/docusaurus/docs/authentication/bearer.md +0 -282
- package/docusaurus/docs/authentication/oauth2.md +0 -317
- package/docusaurus/docs/authentication/overview.md +0 -251
- package/docusaurus/docs/cli.md +0 -229
- package/docusaurus/docs/core-concepts/actions.md +0 -286
- package/docusaurus/docs/core-concepts/missions.md +0 -264
- package/docusaurus/docs/core-concepts/schemas.md +0 -353
- package/docusaurus/docs/core-concepts/sources.md +0 -339
- package/docusaurus/docs/core-concepts/stores.md +0 -332
- package/docusaurus/docs/dsl-syntax/expressions.md +0 -361
- package/docusaurus/docs/dsl-syntax/fetch.md +0 -293
- package/docusaurus/docs/dsl-syntax/for-loops.md +0 -324
- package/docusaurus/docs/dsl-syntax/map.md +0 -345
- package/docusaurus/docs/dsl-syntax/match.md +0 -387
- package/docusaurus/docs/dsl-syntax/pipelines.md +0 -397
- package/docusaurus/docs/dsl-syntax/validate.md +0 -401
- package/docusaurus/docs/error-handling/dead-letter-queues.md +0 -399
- package/docusaurus/docs/error-handling/flow-control.md +0 -337
- package/docusaurus/docs/error-handling/retry-strategies.md +0 -368
- package/docusaurus/docs/examples.md +0 -488
- package/docusaurus/docs/getting-started.md +0 -256
- package/docusaurus/docs/http/circuit-breaker.md +0 -401
- package/docusaurus/docs/http/incremental-sync.md +0 -394
- package/docusaurus/docs/http/pagination.md +0 -361
- package/docusaurus/docs/http/rate-limiting.md +0 -383
- package/docusaurus/docs/http/requests.md +0 -328
- package/docusaurus/docs/http/retry.md +0 -402
- package/docusaurus/docs/intro.md +0 -90
- package/docusaurus/docs/openapi/loading-specs.md +0 -305
- package/docusaurus/docs/openapi/operation-calls.md +0 -314
- package/docusaurus/docs/openapi/overview.md +0 -212
- package/docusaurus/docs/openapi/response-validation.md +0 -344
- package/docusaurus/docs/scheduling/cron.md +0 -305
- package/docusaurus/docs/scheduling/daemon-mode.md +0 -317
- package/docusaurus/docs/scheduling/intervals.md +0 -289
- package/docusaurus/docs/scheduling/overview.md +0 -231
- package/docusaurus/docs/stores/custom-adapters.md +0 -376
- package/docusaurus/docs/stores/file.md +0 -236
- package/docusaurus/docs/stores/memory.md +0 -193
- package/docusaurus/docs/stores/overview.md +0 -274
- package/docusaurus/docs/stores/postgrest.md +0 -316
- package/docusaurus/docusaurus.config.ts +0 -148
- package/docusaurus/package-lock.json +0 -18029
- package/docusaurus/package.json +0 -47
- package/docusaurus/sidebars.ts +0 -155
- package/docusaurus/src/components/HomepageFeatures/index.tsx +0 -105
- package/docusaurus/src/components/HomepageFeatures/styles.module.css +0 -12
- package/docusaurus/src/css/custom.css +0 -169
- package/docusaurus/src/pages/index.module.css +0 -48
- package/docusaurus/src/pages/index.tsx +0 -110
- package/docusaurus/src/pages/markdown-page.md +0 -7
- package/docusaurus/static/.nojekyll +0 -0
- package/docusaurus/static/img/docusaurus-social-card.jpg +0 -0
- package/docusaurus/static/img/docusaurus.png +0 -0
- package/docusaurus/static/img/favicon.ico +0 -0
- package/docusaurus/static/img/logo.svg +0 -10
- package/docusaurus/static/img/undraw_docusaurus_mountain.svg +0 -171
- package/docusaurus/static/img/undraw_docusaurus_react.svg +0 -170
- package/docusaurus/static/img/undraw_docusaurus_tree.svg +0 -40
- package/docusaurus/tsconfig.json +0 -8
- package/examples/README.md +0 -112
- package/examples/error-handling/README.md +0 -150
- package/examples/error-handling/payment-processor.vague +0 -287
- package/examples/github-sync/README.md +0 -74
- package/examples/github-sync/fetch-issues.vague +0 -47
- package/examples/github-sync/fetch-prs.vague +0 -40
- package/examples/github-sync/mission.vague +0 -101
- package/examples/github-sync/normalize.vague +0 -70
- package/examples/jsonplaceholder/README.md +0 -28
- package/examples/jsonplaceholder/posts.vague +0 -48
- package/examples/petstore/README.md +0 -35
- package/examples/petstore/openapi.yaml +0 -97
- package/examples/petstore/sync.vague +0 -52
- package/examples/temporal-comparison/README.md +0 -297
- package/examples/temporal-comparison/reconciliation.vague +0 -355
- package/examples/temporal-comparison/temporal/activities/index.ts +0 -8
- package/examples/temporal-comparison/temporal/activities/shipstation.ts +0 -225
- package/examples/temporal-comparison/temporal/activities/shopify.ts +0 -257
- package/examples/temporal-comparison/temporal/activities/storage.ts +0 -198
- package/examples/temporal-comparison/temporal/activities/stripe.ts +0 -169
- package/examples/temporal-comparison/temporal/activities/validation.ts +0 -205
- package/examples/temporal-comparison/temporal/client/schedule.ts +0 -218
- package/examples/temporal-comparison/temporal/config/retry.ts +0 -63
- package/examples/temporal-comparison/temporal/types/index.ts +0 -129
- package/examples/temporal-comparison/temporal/workers/main.ts +0 -130
- package/examples/temporal-comparison/temporal/workflows/orderReconciliation.ts +0 -262
- package/examples/xero/README.md +0 -88
- package/examples/xero/invoices.vague +0 -189
- package/src/api-integration.test.ts +0 -954
- package/src/ast/index.ts +0 -1
- package/src/ast/nodes.ts +0 -310
- package/src/auth/auth.test.ts +0 -326
- package/src/auth/circuit-breaker.test.ts +0 -390
- package/src/auth/circuit-breaker.ts +0 -379
- package/src/auth/credentials.test.ts +0 -273
- package/src/auth/credentials.ts +0 -246
- package/src/auth/index.ts +0 -40
- package/src/auth/oauth2-provider.ts +0 -177
- package/src/auth/rate-limiter.ts +0 -459
- package/src/auth/token-store.ts +0 -177
- package/src/auth/types.ts +0 -159
- package/src/benchmark/e2e.bench.ts +0 -288
- package/src/benchmark/evaluator.bench.ts +0 -331
- package/src/benchmark/fixtures.ts +0 -295
- package/src/benchmark/index.ts +0 -108
- package/src/benchmark/lexer.bench.ts +0 -69
- package/src/benchmark/parser.bench.ts +0 -103
- package/src/benchmark/resilience.bench.ts +0 -193
- package/src/benchmark/store.bench.ts +0 -147
- package/src/benchmark/utils.ts +0 -230
- package/src/cli.ts +0 -313
- package/src/errors/errors.test.ts +0 -234
- package/src/errors/index.ts +0 -223
- package/src/execution/execution.test.ts +0 -307
- package/src/execution/index.ts +0 -21
- package/src/execution/state.ts +0 -207
- package/src/execution/store.ts +0 -188
- package/src/index.ts +0 -169
- package/src/integration.test.ts +0 -192
- package/src/interpreter/context.ts +0 -57
- package/src/interpreter/evaluator.test.ts +0 -796
- package/src/interpreter/evaluator.ts +0 -245
- package/src/interpreter/executor.ts +0 -946
- package/src/interpreter/fetch-handler.ts +0 -302
- package/src/interpreter/http.test.ts +0 -423
- package/src/interpreter/http.ts +0 -308
- package/src/interpreter/index.ts +0 -32
- package/src/interpreter/pagination.ts +0 -207
- package/src/interpreter/progress.test.ts +0 -276
- package/src/interpreter/schema-matcher.test.ts +0 -160
- package/src/interpreter/schema-matcher.ts +0 -168
- package/src/interpreter/signals.ts +0 -73
- package/src/interpreter/step-handlers/for-handler.ts +0 -65
- package/src/interpreter/step-handlers/index.ts +0 -17
- package/src/interpreter/step-handlers/map-handler.ts +0 -24
- package/src/interpreter/step-handlers/match-handler.ts +0 -101
- package/src/interpreter/step-handlers/store-handler.ts +0 -78
- package/src/interpreter/step-handlers/types.ts +0 -17
- package/src/interpreter/step-handlers/validate-handler.ts +0 -30
- package/src/interpreter/step-handlers/webhook-handler.ts +0 -142
- package/src/lexer/index.ts +0 -18
- package/src/lexer/lexer.test.ts +0 -316
- package/src/lexer/tokens.ts +0 -179
- package/src/loader/index.ts +0 -288
- package/src/loader/loader.test.ts +0 -360
- package/src/oas/index.ts +0 -4
- package/src/oas/loader.ts +0 -126
- package/src/oas/oas.test.ts +0 -254
- package/src/oas/validator.ts +0 -299
- package/src/parser/base.ts +0 -124
- package/src/parser/expressions.test.ts +0 -525
- package/src/parser/expressions.ts +0 -314
- package/src/parser/index.ts +0 -3
- package/src/parser/match.test.ts +0 -296
- package/src/parser/parser.test.ts +0 -739
- package/src/parser/parser.ts +0 -1469
- package/src/parser/schedule.test.ts +0 -287
- package/src/parser/webhook.test.ts +0 -248
- package/src/plugin.ts +0 -83
- package/src/scheduler/cron-parser.test.ts +0 -236
- package/src/scheduler/cron-parser.ts +0 -236
- package/src/scheduler/index.ts +0 -10
- package/src/scheduler/scheduler.ts +0 -443
- package/src/scheduler/types.ts +0 -71
- package/src/stores/factory.ts +0 -104
- package/src/stores/file.test.ts +0 -276
- package/src/stores/file.ts +0 -211
- package/src/stores/index.ts +0 -6
- package/src/stores/memory.test.ts +0 -238
- package/src/stores/memory.ts +0 -63
- package/src/stores/postgrest.test.ts +0 -488
- package/src/stores/postgrest.ts +0 -263
- package/src/stores/stores.test.ts +0 -197
- package/src/stores/types.ts +0 -58
- package/src/sync/index.ts +0 -16
- package/src/sync/state.ts +0 -126
- package/src/sync/store.ts +0 -139
- package/src/sync/sync.test.ts +0 -271
- package/src/utils/async.ts +0 -10
- package/src/utils/file.ts +0 -106
- package/src/utils/index.ts +0 -14
- package/src/utils/logger.ts +0 -53
- package/src/utils/path.ts +0 -47
- package/src/webhook/index.ts +0 -15
- package/src/webhook/server.test.ts +0 -253
- package/src/webhook/server.ts +0 -389
- package/src/webhook/store.ts +0 -239
- package/src/webhook/types.ts +0 -93
- package/tsconfig.json +0 -17
- package/vitest.config.ts +0 -39
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Append-only storage for execution events. The contract: events for a given
|
|
3
|
+
* execution are read back in append order with a contiguous `seq` starting at 0.
|
|
4
|
+
*/
|
|
5
|
+
import { appendFile, readFile, readdir, mkdir } from 'node:fs/promises';
|
|
6
|
+
import { join } from 'node:path';
|
|
7
|
+
/** True for the pause lifecycle events the pause read-model folds. */
|
|
8
|
+
function isPauseEvent(event) {
|
|
9
|
+
return event.type === 'pause.created' || event.type === 'pause.resumed';
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Fold `checkpoint.advanced` events into the latest checkpoint per key. "Latest"
|
|
13
|
+
* is the furthest-advanced sync: ordered by `syncedAt` (so a checkpoint never
|
|
14
|
+
* moves backwards across runs — incremental sync stays monotonic), ties broken
|
|
15
|
+
* by the recording time `at` then `seq`. Shared by every store backend so the
|
|
16
|
+
* read-model semantics stay identical across them.
|
|
17
|
+
*/
|
|
18
|
+
export function reduceCheckpoints(events, mission) {
|
|
19
|
+
const latest = new Map();
|
|
20
|
+
const isNewer = (a, prior) => {
|
|
21
|
+
if (a.syncedAt !== prior.syncedAt)
|
|
22
|
+
return a.syncedAt > prior.syncedAt;
|
|
23
|
+
if (a.at !== prior.at)
|
|
24
|
+
return a.at > prior.at;
|
|
25
|
+
return a.seq > prior.seq;
|
|
26
|
+
};
|
|
27
|
+
for (const event of events) {
|
|
28
|
+
if (event.type !== 'checkpoint.advanced')
|
|
29
|
+
continue;
|
|
30
|
+
if (mission !== undefined && event.mission !== mission)
|
|
31
|
+
continue;
|
|
32
|
+
const candidate = {
|
|
33
|
+
syncedAt: event.syncedAt,
|
|
34
|
+
at: event.at,
|
|
35
|
+
seq: event.seq,
|
|
36
|
+
record: {
|
|
37
|
+
key: event.key,
|
|
38
|
+
syncedAt: event.syncedAt,
|
|
39
|
+
recordCount: event.recordCount,
|
|
40
|
+
cursor: event.cursor,
|
|
41
|
+
mission: event.mission,
|
|
42
|
+
executionId: event.executionId,
|
|
43
|
+
},
|
|
44
|
+
};
|
|
45
|
+
const prior = latest.get(event.key);
|
|
46
|
+
if (!prior || isNewer(candidate, prior))
|
|
47
|
+
latest.set(event.key, candidate);
|
|
48
|
+
}
|
|
49
|
+
return Array.from(latest.values()).map((v) => v.record);
|
|
50
|
+
}
|
|
51
|
+
/** In-memory execution log — for tests and ephemeral runs. */
|
|
52
|
+
export class MemoryExecutionLog {
|
|
53
|
+
events = new Map();
|
|
54
|
+
async append(event) {
|
|
55
|
+
const existing = this.events.get(event.executionId);
|
|
56
|
+
const log = existing ?? [];
|
|
57
|
+
const stored = { ...event, seq: log.length, at: new Date().toISOString() };
|
|
58
|
+
log.push(stored);
|
|
59
|
+
if (!existing)
|
|
60
|
+
this.events.set(event.executionId, log);
|
|
61
|
+
return stored;
|
|
62
|
+
}
|
|
63
|
+
async read(executionId) {
|
|
64
|
+
return [...(this.events.get(executionId) ?? [])];
|
|
65
|
+
}
|
|
66
|
+
async listCheckpoints(mission) {
|
|
67
|
+
const all = [];
|
|
68
|
+
for (const log of this.events.values())
|
|
69
|
+
all.push(...log);
|
|
70
|
+
return reduceCheckpoints(all, mission);
|
|
71
|
+
}
|
|
72
|
+
async listPauses() {
|
|
73
|
+
const pauses = [];
|
|
74
|
+
for (const log of this.events.values())
|
|
75
|
+
pauses.push(...log.filter(isPauseEvent));
|
|
76
|
+
return pauses;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Durable execution log: one append-only JSON-lines file per execution.
|
|
81
|
+
*
|
|
82
|
+
* Appends are O_APPEND single-line writes, so a crash mid-write can at worst
|
|
83
|
+
* leave a torn final line, which {@link read} skips. The log therefore survives
|
|
84
|
+
* a process restart — a resumed run reads its prior events back. Dev-grade: no
|
|
85
|
+
* atomic seq assignment or locking. For a transactional single-process backend
|
|
86
|
+
* use {@link SqliteExecutionLog}; Postgres (multi-node) is still to come.
|
|
87
|
+
*/
|
|
88
|
+
export class FileExecutionLog {
|
|
89
|
+
dir;
|
|
90
|
+
/** Cached next-seq per execution, lazily initialised from disk. */
|
|
91
|
+
counts = new Map();
|
|
92
|
+
constructor(dir = '.reqon-data/execution-log') {
|
|
93
|
+
this.dir = dir;
|
|
94
|
+
}
|
|
95
|
+
pathFor(executionId) {
|
|
96
|
+
// executionId is runtime-generated (uuid); keep the filename simple/safe.
|
|
97
|
+
const safe = executionId.replace(/[^A-Za-z0-9_.-]/g, '_');
|
|
98
|
+
return join(this.dir, `${safe}.jsonl`);
|
|
99
|
+
}
|
|
100
|
+
async append(event) {
|
|
101
|
+
await mkdir(this.dir, { recursive: true });
|
|
102
|
+
let seq = this.counts.get(event.executionId);
|
|
103
|
+
let prefix = '';
|
|
104
|
+
if (seq === undefined) {
|
|
105
|
+
// First append this instance: derive next seq from any persisted events,
|
|
106
|
+
// and detect an unterminated tail left by a crash mid-append. Writing
|
|
107
|
+
// straight after it would concatenate this event onto the torn line and
|
|
108
|
+
// corrupt it; a leading newline terminates the torn line (which read()
|
|
109
|
+
// still skips) and keeps this event a clean, parseable record.
|
|
110
|
+
const raw = await this.readRaw(event.executionId);
|
|
111
|
+
seq = this.parse(raw).length;
|
|
112
|
+
if (raw.length > 0 && !raw.endsWith('\n'))
|
|
113
|
+
prefix = '\n';
|
|
114
|
+
}
|
|
115
|
+
const stored = { ...event, seq, at: new Date().toISOString() };
|
|
116
|
+
// The log can carry resume state (e.g. a pause checkpoint's captured
|
|
117
|
+
// variables), so create files owner-only (0o600) — never world-readable.
|
|
118
|
+
// mode applies on creation; appends to an existing file keep its mode.
|
|
119
|
+
await appendFile(this.pathFor(event.executionId), `${prefix}${JSON.stringify(stored)}\n`, {
|
|
120
|
+
encoding: 'utf-8',
|
|
121
|
+
mode: 0o600,
|
|
122
|
+
});
|
|
123
|
+
this.counts.set(event.executionId, seq + 1);
|
|
124
|
+
return stored;
|
|
125
|
+
}
|
|
126
|
+
async read(executionId) {
|
|
127
|
+
return this.parse(await this.readRaw(executionId));
|
|
128
|
+
}
|
|
129
|
+
async listCheckpoints(mission) {
|
|
130
|
+
return reduceCheckpoints(await this.readAll(), mission);
|
|
131
|
+
}
|
|
132
|
+
async listPauses() {
|
|
133
|
+
return (await this.readAll()).filter(isPauseEvent);
|
|
134
|
+
}
|
|
135
|
+
/** Read and parse every execution's events in this directory. */
|
|
136
|
+
async readAll() {
|
|
137
|
+
let files;
|
|
138
|
+
try {
|
|
139
|
+
files = await readdir(this.dir);
|
|
140
|
+
}
|
|
141
|
+
catch (err) {
|
|
142
|
+
if (err.code === 'ENOENT')
|
|
143
|
+
return [];
|
|
144
|
+
throw err;
|
|
145
|
+
}
|
|
146
|
+
const all = [];
|
|
147
|
+
for (const file of files) {
|
|
148
|
+
if (!file.endsWith('.jsonl'))
|
|
149
|
+
continue;
|
|
150
|
+
all.push(...this.parse(await readFile(join(this.dir, file), 'utf-8')));
|
|
151
|
+
}
|
|
152
|
+
return all;
|
|
153
|
+
}
|
|
154
|
+
async readRaw(executionId) {
|
|
155
|
+
try {
|
|
156
|
+
return await readFile(this.pathFor(executionId), 'utf-8');
|
|
157
|
+
}
|
|
158
|
+
catch (err) {
|
|
159
|
+
if (err.code === 'ENOENT')
|
|
160
|
+
return '';
|
|
161
|
+
throw err;
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
parse(content) {
|
|
165
|
+
const events = [];
|
|
166
|
+
for (const line of content.split('\n')) {
|
|
167
|
+
if (line.trim() === '')
|
|
168
|
+
continue;
|
|
169
|
+
try {
|
|
170
|
+
events.push(JSON.parse(line));
|
|
171
|
+
}
|
|
172
|
+
catch {
|
|
173
|
+
// A torn line from a crash mid-append. Each event is an independent
|
|
174
|
+
// single-line record, so skip just this line rather than discarding
|
|
175
|
+
// everything after it (a healed torn line can sit mid-file, followed
|
|
176
|
+
// by valid events appended on resume).
|
|
177
|
+
continue;
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
return events;
|
|
181
|
+
}
|
|
182
|
+
}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,16 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ---
|
|
3
|
+
* purpose: Main library entry point - exports all public APIs
|
|
4
|
+
* exports:
|
|
5
|
+
* - parse, execute, fromFile, fromPath, reqon - convenience functions
|
|
6
|
+
* - ReqonLexer, ReqonParser - parsing infrastructure
|
|
7
|
+
* - MissionExecutor - runtime execution
|
|
8
|
+
* - Store adapters, Scheduler, Sync, Webhook, Observability
|
|
9
|
+
* related:
|
|
10
|
+
* - ./cli.ts - CLI entry point using these exports
|
|
11
|
+
* - ./plugin.ts - Vague plugin registration
|
|
12
|
+
* - ./interpreter/executor.ts - core execution logic
|
|
13
|
+
* ---
|
|
14
|
+
*/
|
|
1
15
|
export { ReqonLexer, ReqonTokenType, type ReqonToken } from './lexer/index.js';
|
|
2
16
|
export { reqonPlugin, registerReqonPlugin } from './plugin.js';
|
|
3
17
|
export { ReqonParser } from './parser/index.js';
|
|
4
18
|
export * from './ast/index.js';
|
|
5
19
|
export { MissionExecutor, HttpClient, BearerAuthProvider, OAuth2AuthProvider, createContext, evaluate, type ExecutionResult, type ExecutionError, type ExecutorConfig, type ExecutionContext, type ProgressCallbacks, type ExecutionStartEvent, type ExecutionCompleteEvent, type StageStartEvent, type StageCompleteEvent, } from './interpreter/index.js';
|
|
6
20
|
export { MemoryStore, FileStore, createStore, type StoreAdapter, type StoreFilter, type StoreConfig, } from './stores/index.js';
|
|
7
|
-
export { createExecutionState, findResumePoint, canResume, getProgress, getExecutionSummary, FileExecutionStore, MemoryExecutionStore, type ExecutionState, type ExecutionStore, type StageState, } from './execution/index.js';
|
|
21
|
+
export { createExecutionState, findResumePoint, canResume, getProgress, getExecutionSummary, FileExecutionStore, MemoryExecutionStore, type ExecutionState, type ExecutionStore, type StageState, type LiveProgress, } from './execution/index.js';
|
|
22
|
+
export { MemoryExecutionLog, FileExecutionLog, SqliteExecutionLog, PostgresExecutionLog, foldLog, loadState, effectId, reduceCheckpoints, type ExecutionEvent, type StoredEvent, type ExecutionLogStore, type CheckpointRecord, type FoldedState, } from './execution-log/index.js';
|
|
8
23
|
export { Scheduler, parseCronExpression, getNextRunTime, intervalToMs, shouldRunNow, type ScheduledJob, type SchedulerState, type ScheduleEvent, type SchedulerCallbacks, type SchedulerConfig, type ScheduledMission, } from './scheduler/index.js';
|
|
9
|
-
export { generateCheckpointKey, formatSinceDate, parseSinceDate, EPOCH, FileSyncStore, MemorySyncStore, type SyncCheckpoint, type SyncStore, } from './sync/index.js';
|
|
24
|
+
export { generateCheckpointKey, formatSinceDate, parseSinceDate, EPOCH, FileSyncStore, MemorySyncStore, LogBackedSyncStore, type SyncCheckpoint, type SyncStore, } from './sync/index.js';
|
|
10
25
|
export { ReqonError, ParseError, LexerError, RuntimeError, ValidationError, formatErrors, getSourceLine, getSourceContext, type SourceLocation, type ErrorContext, } from './errors/index.js';
|
|
11
26
|
export { loadMission, isMissionFolder, getMissionName, type LoadResult, type LoadOptions, } from './loader/index.js';
|
|
12
27
|
export { loadEnv, loadCredentials, resolveCredentials, resolveEnvString, hasEnvReference, credentialsFromEnv, type CredentialsConfig, type LoadEnvResult, type AuthCredentials, type SourceCredentials, } from './auth/credentials.js';
|
|
13
28
|
export { WebhookServer, MemoryWebhookStore, FileWebhookStore, type WebhookStore, type WebhookServerConfig, type WebhookServerCallbacks, type WebhookRegistration, type WebhookEvent, type WaitResult, } from './webhook/index.js';
|
|
29
|
+
export { ControlServer, type ControlServerConfig, type ControlServerCallbacks, type StatusResponse, type ControlResponse, } from './control/index.js';
|
|
30
|
+
export { ObservabilityEmitter, createEmitter, type ObservabilityEvent, type EventType, type EventHandler, type EventEmitter, type MissionStartPayload, type MissionCompletePayload, type StageStartPayload, type StageCompletePayload, type StepStartPayload, type StepCompletePayload, type FetchStartPayload, type FetchCompletePayload, type DataStorePayload, type LoopStartPayload, type LoopCompletePayload, type WebhookRegisterPayload, type WebhookCompletePayload, createStructuredLogger, ConsoleOutput, JsonLinesOutput, BufferOutput, type StructuredLogger, type LogEntry, type LogOutput, type Span, type CreateLoggerOptions, SpanBuilder, OTelEventAdapter, OTLPExporter, createOTelListener, type OTelSpan, type OTLPExporterConfig, } from './observability/index.js';
|
|
31
|
+
export { MCP_SERVER_VERSION } from './mcp/index.js';
|
|
32
|
+
export { BaseDebugController, CLIDebugger, type DebugController, type DebugMode, type DebugPauseReason, type DebugSnapshot, type DebugCommand, type DebugLocation, } from './debug/index.js';
|
|
33
|
+
export { FileTraceStore, MemoryTraceStore, TraceRecorder, TraceReplayer, LogTraceView, traceTimelineFromLog, createTraceRecorder, createTraceReplayer, createExecutionTrace, safeClone, truncateForTrace, type LogTimelineEntry, type LogTraceSummary, type TraceStore, type TraceSnapshot, type StoreSnapshot as TraceStoreSnapshot, type LoopContext as TraceLoopContext, type ExecutionTrace, type TraceRecorderConfig, type ReplaySession, type ReplayStepResult, type TimelineEvent, type VariableChange, type SnapshotDiff, } from './trace/index.js';
|
|
34
|
+
export { FilePauseStore, MemoryPauseStore, LogBackedPauseStore, PauseManager, createPauseManager, parseDuration, formatDuration, createPauseState, isPauseExpired, getRemainingTime, getPauseSummary, type PauseStore, type PauseState, type PauseCheckpoint, type PauseResumeTriggerState, type PauseManagerConfig, type CreatePauseOptions, type PauseStatus, } from './pause/index.js';
|
|
14
35
|
import { type ExecutorConfig } from './interpreter/index.js';
|
|
15
36
|
import type { ReqonProgram } from './ast/index.js';
|
|
16
37
|
export declare function parse(source: string, filePath?: string): ReqonProgram;
|
package/dist/index.js
CHANGED
|
@@ -1,3 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ---
|
|
3
|
+
* purpose: Main library entry point - exports all public APIs
|
|
4
|
+
* exports:
|
|
5
|
+
* - parse, execute, fromFile, fromPath, reqon - convenience functions
|
|
6
|
+
* - ReqonLexer, ReqonParser - parsing infrastructure
|
|
7
|
+
* - MissionExecutor - runtime execution
|
|
8
|
+
* - Store adapters, Scheduler, Sync, Webhook, Observability
|
|
9
|
+
* related:
|
|
10
|
+
* - ./cli.ts - CLI entry point using these exports
|
|
11
|
+
* - ./plugin.ts - Vague plugin registration
|
|
12
|
+
* - ./interpreter/executor.ts - core execution logic
|
|
13
|
+
* ---
|
|
14
|
+
*/
|
|
1
15
|
export { ReqonLexer, ReqonTokenType } from './lexer/index.js';
|
|
2
16
|
export { reqonPlugin, registerReqonPlugin } from './plugin.js';
|
|
3
17
|
export { ReqonParser } from './parser/index.js';
|
|
@@ -5,12 +19,30 @@ export * from './ast/index.js';
|
|
|
5
19
|
export { MissionExecutor, HttpClient, BearerAuthProvider, OAuth2AuthProvider, createContext, evaluate, } from './interpreter/index.js';
|
|
6
20
|
export { MemoryStore, FileStore, createStore, } from './stores/index.js';
|
|
7
21
|
export { createExecutionState, findResumePoint, canResume, getProgress, getExecutionSummary, FileExecutionStore, MemoryExecutionStore, } from './execution/index.js';
|
|
22
|
+
export { MemoryExecutionLog, FileExecutionLog, SqliteExecutionLog, PostgresExecutionLog, foldLog, loadState, effectId, reduceCheckpoints, } from './execution-log/index.js';
|
|
8
23
|
export { Scheduler, parseCronExpression, getNextRunTime, intervalToMs, shouldRunNow, } from './scheduler/index.js';
|
|
9
|
-
export { generateCheckpointKey, formatSinceDate, parseSinceDate, EPOCH, FileSyncStore, MemorySyncStore, } from './sync/index.js';
|
|
24
|
+
export { generateCheckpointKey, formatSinceDate, parseSinceDate, EPOCH, FileSyncStore, MemorySyncStore, LogBackedSyncStore, } from './sync/index.js';
|
|
10
25
|
export { ReqonError, ParseError, LexerError, RuntimeError, ValidationError, formatErrors, getSourceLine, getSourceContext, } from './errors/index.js';
|
|
11
26
|
export { loadMission, isMissionFolder, getMissionName, } from './loader/index.js';
|
|
12
27
|
export { loadEnv, loadCredentials, resolveCredentials, resolveEnvString, hasEnvReference, credentialsFromEnv, } from './auth/credentials.js';
|
|
13
28
|
export { WebhookServer, MemoryWebhookStore, FileWebhookStore, } from './webhook/index.js';
|
|
29
|
+
// Control server for pause/resume and status queries
|
|
30
|
+
export { ControlServer, } from './control/index.js';
|
|
31
|
+
// Observability
|
|
32
|
+
export {
|
|
33
|
+
// Event system
|
|
34
|
+
ObservabilityEmitter, createEmitter,
|
|
35
|
+
// Logger
|
|
36
|
+
createStructuredLogger, ConsoleOutput, JsonLinesOutput, BufferOutput,
|
|
37
|
+
// OpenTelemetry
|
|
38
|
+
SpanBuilder, OTelEventAdapter, OTLPExporter, createOTelListener, } from './observability/index.js';
|
|
39
|
+
export { MCP_SERVER_VERSION } from './mcp/index.js';
|
|
40
|
+
// Debug
|
|
41
|
+
export { BaseDebugController, CLIDebugger, } from './debug/index.js';
|
|
42
|
+
// Trace - time-travel debugging
|
|
43
|
+
export { FileTraceStore, MemoryTraceStore, TraceRecorder, TraceReplayer, LogTraceView, traceTimelineFromLog, createTraceRecorder, createTraceReplayer, createExecutionTrace, safeClone, truncateForTrace, } from './trace/index.js';
|
|
44
|
+
// Pause - resource-free long pauses
|
|
45
|
+
export { FilePauseStore, MemoryPauseStore, LogBackedPauseStore, PauseManager, createPauseManager, parseDuration, formatDuration, createPauseState, isPauseExpired, getRemainingTime, getPauseSummary, } from './pause/index.js';
|
|
14
46
|
import { readFile } from 'node:fs/promises';
|
|
15
47
|
import { resolve } from 'node:path';
|
|
16
48
|
import { ReqonLexer } from './lexer/index.js';
|
|
@@ -43,8 +75,8 @@ export async function fromFile(filePath, config = {}) {
|
|
|
43
75
|
* - Folder: ./sync-invoices/ (with mission.reqon + action files)
|
|
44
76
|
*/
|
|
45
77
|
export async function fromPath(path, config = {}) {
|
|
46
|
-
const { program } = await loadMission(path);
|
|
47
|
-
const executor = new MissionExecutor(config);
|
|
78
|
+
const { program, baseDir } = await loadMission(path);
|
|
79
|
+
const executor = new MissionExecutor({ ...config, missionDir: baseDir });
|
|
48
80
|
return executor.execute(program);
|
|
49
81
|
}
|
|
50
82
|
// Tagged template literal for inline missions
|
|
@@ -1,13 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ---
|
|
3
|
+
* purpose: Execution context - scoped state for variables, stores, sources
|
|
4
|
+
* exports:
|
|
5
|
+
* - ExecutionContext - interface for execution state
|
|
6
|
+
* - createContext, childContext - context factory functions
|
|
7
|
+
* - getVariable, setVariable - scoped variable access
|
|
8
|
+
* related:
|
|
9
|
+
* - ./executor.ts - creates and uses contexts
|
|
10
|
+
* - ./evaluator.ts - reads from context during expression evaluation
|
|
11
|
+
* - ../stores/types.ts - StoreAdapter interface
|
|
12
|
+
* ---
|
|
13
|
+
*/
|
|
1
14
|
import type { SchemaDefinition } from 'vague-lang';
|
|
2
15
|
import type { StoreAdapter } from '../stores/types.js';
|
|
3
16
|
import type { HttpClient } from './http.js';
|
|
17
|
+
/**
|
|
18
|
+
* Mutable per-action execution state. Parallel actions (`run [A, B]`) must not
|
|
19
|
+
* share this — each gets its own scope so their step counters and deferred sync
|
|
20
|
+
* checkpoints can't corrupt each other. Nested scopes (for/match) inherit the
|
|
21
|
+
* same reference so the whole action shares one counter/checkpoint list.
|
|
22
|
+
*/
|
|
23
|
+
export interface ActionScope {
|
|
24
|
+
/** Monotonic step index within the action (for trace/debug positions). */
|
|
25
|
+
stepIndex: number;
|
|
26
|
+
/** Current retry attempt of the action (0-based), for effect identity. */
|
|
27
|
+
attempt: number;
|
|
28
|
+
/** Sync checkpoints deferred until the action's data is durably stored. */
|
|
29
|
+
pendingCheckpoints: Array<() => Promise<void>>;
|
|
30
|
+
}
|
|
4
31
|
export interface ExecutionContext {
|
|
5
32
|
stores: Map<string, StoreAdapter>;
|
|
33
|
+
storeTypes: Map<string, string>;
|
|
6
34
|
sources: Map<string, HttpClient>;
|
|
7
35
|
schemas: Map<string, SchemaDefinition>;
|
|
8
36
|
variables: Map<string, unknown>;
|
|
9
37
|
response?: unknown;
|
|
10
38
|
parent?: ExecutionContext;
|
|
39
|
+
actionScope?: ActionScope;
|
|
11
40
|
}
|
|
12
41
|
export declare function createContext(): ExecutionContext;
|
|
13
42
|
export declare function childContext(parent: ExecutionContext): ExecutionContext;
|
|
@@ -1,6 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ---
|
|
3
|
+
* purpose: Execution context - scoped state for variables, stores, sources
|
|
4
|
+
* exports:
|
|
5
|
+
* - ExecutionContext - interface for execution state
|
|
6
|
+
* - createContext, childContext - context factory functions
|
|
7
|
+
* - getVariable, setVariable - scoped variable access
|
|
8
|
+
* related:
|
|
9
|
+
* - ./executor.ts - creates and uses contexts
|
|
10
|
+
* - ./evaluator.ts - reads from context during expression evaluation
|
|
11
|
+
* - ../stores/types.ts - StoreAdapter interface
|
|
12
|
+
* ---
|
|
13
|
+
*/
|
|
1
14
|
export function createContext() {
|
|
2
15
|
return {
|
|
3
16
|
stores: new Map(),
|
|
17
|
+
storeTypes: new Map(),
|
|
4
18
|
sources: new Map(),
|
|
5
19
|
schemas: new Map(),
|
|
6
20
|
variables: new Map(),
|
|
@@ -9,10 +23,14 @@ export function createContext() {
|
|
|
9
23
|
export function childContext(parent) {
|
|
10
24
|
return {
|
|
11
25
|
stores: parent.stores,
|
|
26
|
+
storeTypes: parent.storeTypes,
|
|
12
27
|
sources: parent.sources,
|
|
13
28
|
schemas: parent.schemas,
|
|
14
29
|
variables: new Map(),
|
|
15
30
|
parent,
|
|
31
|
+
// Nested scopes (for/match) share the action's scope so the step counter
|
|
32
|
+
// and checkpoint list stay coherent across the whole action.
|
|
33
|
+
actionScope: parent.actionScope,
|
|
16
34
|
};
|
|
17
35
|
}
|
|
18
36
|
export function getVariable(ctx, name) {
|
|
@@ -1,5 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ---
|
|
3
|
+
* purpose: Expression evaluator - evaluates Vague/Reqon expressions at runtime
|
|
4
|
+
* inputs:
|
|
5
|
+
* - Expression AST node (literals, identifiers, binary ops, function calls)
|
|
6
|
+
* - ExecutionContext with variables, response, stores
|
|
7
|
+
* - Optional current record for iteration contexts
|
|
8
|
+
* outputs:
|
|
9
|
+
* - Evaluated value (any JSON-compatible type)
|
|
10
|
+
* related:
|
|
11
|
+
* - ./context.ts - provides variable bindings
|
|
12
|
+
* - ./executor.ts - calls evaluate() for step expressions
|
|
13
|
+
* - ../parser/expressions.ts - IsExpression, ObjectLiteralExpression types
|
|
14
|
+
* ---
|
|
15
|
+
*/
|
|
1
16
|
import type { Expression } from 'vague-lang';
|
|
2
17
|
import type { ExecutionContext } from './context.js';
|
|
3
|
-
|
|
18
|
+
import type { IsExpression, ObjectLiteralExpression } from '../parser/expressions.js';
|
|
19
|
+
/**
|
|
20
|
+
* Evaluate a Reqon/Vague expression within an execution context.
|
|
21
|
+
*
|
|
22
|
+
* Supports all expression types from the Vague DSL including literals, identifiers,
|
|
23
|
+
* binary/logical/ternary expressions, function calls, and pattern matching.
|
|
24
|
+
*
|
|
25
|
+
* @param expr - The expression AST node to evaluate
|
|
26
|
+
* @param ctx - The execution context containing variables, response data, and stores
|
|
27
|
+
* @param current - Optional current record for iteration contexts (e.g., inside for/map)
|
|
28
|
+
* @returns The evaluated result, which can be any JSON-compatible value
|
|
29
|
+
*
|
|
30
|
+
* @example
|
|
31
|
+
* // Evaluate a simple identifier
|
|
32
|
+
* const result = evaluate({ type: 'Identifier', name: 'foo' }, ctx);
|
|
33
|
+
*
|
|
34
|
+
* @example
|
|
35
|
+
* // Evaluate with current record context
|
|
36
|
+
* const result = evaluate(expr, ctx, { id: 1, name: 'test' });
|
|
37
|
+
*/
|
|
38
|
+
export declare function evaluate(expr: Expression | IsExpression | ObjectLiteralExpression, ctx: ExecutionContext, current?: unknown): unknown;
|
|
39
|
+
/**
|
|
40
|
+
* Evaluate an expression and convert the result to a string.
|
|
41
|
+
*
|
|
42
|
+
* @param expr - The expression to evaluate
|
|
43
|
+
* @param ctx - The execution context
|
|
44
|
+
* @param current - Optional current record for iteration contexts
|
|
45
|
+
* @returns The string representation of the evaluated value
|
|
46
|
+
*/
|
|
4
47
|
export declare function evaluateToString(expr: Expression, ctx: ExecutionContext, current?: unknown): string;
|
|
48
|
+
/**
|
|
49
|
+
* Interpolate variables in a path string using {variable.path} syntax.
|
|
50
|
+
*
|
|
51
|
+
* Replaces placeholders like {id} or {user.name} with values from the
|
|
52
|
+
* current record or execution context variables.
|
|
53
|
+
*
|
|
54
|
+
* @param path - The path string with {placeholder} syntax
|
|
55
|
+
* @param ctx - The execution context
|
|
56
|
+
* @param current - Optional current record for iteration contexts
|
|
57
|
+
* @returns The interpolated path string
|
|
58
|
+
*
|
|
59
|
+
* @example
|
|
60
|
+
* // Interpolate a simple variable
|
|
61
|
+
* interpolatePath('/users/{id}', ctx, { id: 123 }); // '/users/123'
|
|
62
|
+
*
|
|
63
|
+
* @example
|
|
64
|
+
* // Interpolate a nested path
|
|
65
|
+
* interpolatePath('/orgs/{org.id}/users', ctx, { org: { id: 'acme' } }); // '/orgs/acme/users'
|
|
66
|
+
*/
|
|
5
67
|
export declare function interpolatePath(path: string, ctx: ExecutionContext, current?: unknown): string;
|