reqon-dsl 0.2.0 → 0.3.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 +22 -0
- package/dist/ast/nodes.d.ts +83 -4
- package/dist/ast/nodes.js +14 -0
- package/dist/auth/circuit-breaker.js +7 -6
- package/dist/auth/rate-limiter.d.ts +4 -0
- package/dist/auth/rate-limiter.js +9 -16
- package/dist/cli.d.ts +13 -0
- package/dist/cli.js +84 -4
- package/dist/config/constants.d.ts +141 -0
- package/dist/config/constants.js +128 -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 +88 -0
- package/dist/control/server.js +238 -0
- package/dist/control/types.d.ts +55 -0
- package/dist/control/types.js +7 -0
- package/dist/debug/cli-debugger.d.ts +17 -0
- package/dist/debug/cli-debugger.js +180 -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/index.d.ts +21 -1
- package/dist/index.js +33 -2
- package/dist/interpreter/context.d.ts +14 -0
- package/dist/interpreter/context.js +15 -0
- package/dist/interpreter/evaluator.d.ts +63 -1
- package/dist/interpreter/evaluator.js +186 -39
- package/dist/interpreter/executor.d.ts +70 -14
- package/dist/interpreter/executor.js +503 -174
- package/dist/interpreter/fetch-handler.d.ts +9 -0
- package/dist/interpreter/fetch-handler.js +133 -24
- package/dist/interpreter/http.d.ts +5 -0
- package/dist/interpreter/http.js +26 -12
- package/dist/interpreter/index.d.ts +3 -1
- package/dist/interpreter/index.js +2 -0
- package/dist/interpreter/pagination.d.ts +11 -2
- package/dist/interpreter/pagination.js +95 -31
- 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 +13 -0
- package/dist/interpreter/step-handlers/for-handler.js +71 -4
- 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 +43 -16
- 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 +11 -1
- package/dist/interpreter/step-handlers/store-handler.js +45 -13
- 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 +4 -2
- package/dist/interpreter/step-handlers/webhook-handler.d.ts +3 -0
- package/dist/interpreter/step-handlers/webhook-handler.js +18 -2
- package/dist/interpreter/store-manager.d.ts +46 -0
- package/dist/interpreter/store-manager.js +66 -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/mcp/index.d.ts +11 -0
- package/dist/mcp/index.js +11 -0
- package/dist/mcp/server.d.ts +17 -0
- package/dist/mcp/server.js +451 -0
- package/dist/oas/index.d.ts +2 -0
- package/dist/oas/index.js +1 -0
- package/dist/oas/mock-generator.d.ts +12 -0
- package/dist/oas/mock-generator.js +187 -0
- package/dist/observability/events.d.ts +244 -0
- package/dist/observability/events.js +90 -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 +259 -0
- package/dist/observability/otel.d.ts +135 -0
- package/dist/observability/otel.js +386 -0
- package/dist/parser/action-parser.d.ts +105 -0
- package/dist/parser/action-parser.js +645 -0
- package/dist/parser/expressions.d.ts +13 -0
- package/dist/parser/expressions.js +72 -2
- package/dist/parser/fetch-parser.d.ts +27 -0
- package/dist/parser/fetch-parser.js +269 -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 +14 -0
- package/dist/pause/index.js +11 -0
- package/dist/pause/manager.d.ts +118 -0
- package/dist/pause/manager.js +245 -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 +156 -0
- package/dist/plugin.d.ts +9 -12
- package/dist/plugin.js +10 -13
- package/dist/stores/factory.d.ts +1 -1
- package/dist/stores/factory.js +3 -2
- package/dist/stores/file.d.ts +26 -0
- package/dist/stores/file.js +64 -10
- 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 +11 -0
- package/dist/stores/types.d.ts +17 -0
- package/dist/stores/types.js +12 -0
- package/dist/trace/index.d.ts +16 -0
- package/dist/trace/index.js +12 -0
- package/dist/trace/recorder.d.ts +71 -0
- package/dist/trace/recorder.js +144 -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 +69 -0
- package/dist/trace/store.js +225 -0
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/index.js +1 -0
- package/dist/utils/type-guards.d.ts +58 -0
- package/dist/utils/type-guards.js +92 -0
- package/dist/webhook/server.js +7 -6
- package/package.json +55 -6
- 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
|
@@ -11,9 +11,9 @@ export class ReqonExpressionParser extends ReqonParserBase {
|
|
|
11
11
|
parseTernary() {
|
|
12
12
|
const condition = this.parseOr();
|
|
13
13
|
if (this.match(TokenType.QUESTION)) {
|
|
14
|
-
const consequent = this.
|
|
14
|
+
const consequent = this.parseTernaryBranch();
|
|
15
15
|
this.consume(TokenType.COLON, "Expected ':' in ternary expression");
|
|
16
|
-
const alternate = this.
|
|
16
|
+
const alternate = this.parseTernaryBranch();
|
|
17
17
|
return {
|
|
18
18
|
type: 'TernaryExpression',
|
|
19
19
|
condition,
|
|
@@ -23,6 +23,46 @@ export class ReqonExpressionParser extends ReqonParserBase {
|
|
|
23
23
|
}
|
|
24
24
|
return condition;
|
|
25
25
|
}
|
|
26
|
+
// Parse a ternary branch - allows nested ternaries but skips superposition
|
|
27
|
+
parseTernaryBranch() {
|
|
28
|
+
const expr = this.parseTernaryBranchOr();
|
|
29
|
+
if (this.match(TokenType.QUESTION)) {
|
|
30
|
+
const consequent = this.parseTernaryBranch();
|
|
31
|
+
this.consume(TokenType.COLON, "Expected ':' in ternary expression");
|
|
32
|
+
const alternate = this.parseTernaryBranch();
|
|
33
|
+
return {
|
|
34
|
+
type: 'TernaryExpression',
|
|
35
|
+
condition: expr,
|
|
36
|
+
consequent,
|
|
37
|
+
alternate,
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
return expr;
|
|
41
|
+
}
|
|
42
|
+
parseTernaryBranchOr() {
|
|
43
|
+
let left = this.parseTernaryBranchAnd();
|
|
44
|
+
while (this.match(TokenType.OR)) {
|
|
45
|
+
const right = this.parseTernaryBranchAnd();
|
|
46
|
+
left = { type: 'LogicalExpression', operator: 'or', left, right };
|
|
47
|
+
}
|
|
48
|
+
return left;
|
|
49
|
+
}
|
|
50
|
+
parseTernaryBranchAnd() {
|
|
51
|
+
let left = this.parseTernaryBranchNot();
|
|
52
|
+
while (this.match(TokenType.AND)) {
|
|
53
|
+
const right = this.parseTernaryBranchNot();
|
|
54
|
+
left = { type: 'LogicalExpression', operator: 'and', left, right };
|
|
55
|
+
}
|
|
56
|
+
return left;
|
|
57
|
+
}
|
|
58
|
+
parseTernaryBranchNot() {
|
|
59
|
+
if (this.match(TokenType.NOT)) {
|
|
60
|
+
const operand = this.parseTernaryBranchNot();
|
|
61
|
+
return { type: 'NotExpression', operand };
|
|
62
|
+
}
|
|
63
|
+
// Skip superposition, go directly to comparison
|
|
64
|
+
return this.parseComparison();
|
|
65
|
+
}
|
|
26
66
|
parseOr() {
|
|
27
67
|
let left = this.parseAnd();
|
|
28
68
|
while (this.match(TokenType.OR)) {
|
|
@@ -200,6 +240,10 @@ export class ReqonExpressionParser extends ReqonParserBase {
|
|
|
200
240
|
if (this.match(TokenType.FALSE)) {
|
|
201
241
|
return { type: 'Literal', value: false, dataType: 'boolean' };
|
|
202
242
|
}
|
|
243
|
+
// Object literal: { key: value, ... }
|
|
244
|
+
if (this.match(TokenType.LBRACE)) {
|
|
245
|
+
return this.parseObjectLiteral();
|
|
246
|
+
}
|
|
203
247
|
// Identifier (including HTTP method tokens that can be used as identifiers)
|
|
204
248
|
if (this.checkIdentifier()) {
|
|
205
249
|
const name = this.advance().value;
|
|
@@ -237,6 +281,32 @@ export class ReqonExpressionParser extends ReqonParserBase {
|
|
|
237
281
|
this.consume(TokenType.RBRACKET, "Expected ']'");
|
|
238
282
|
return { type: 'OrderedSequenceType', elements };
|
|
239
283
|
}
|
|
284
|
+
parseObjectLiteral() {
|
|
285
|
+
const properties = [];
|
|
286
|
+
// Handle empty object {}
|
|
287
|
+
if (this.check(TokenType.RBRACE)) {
|
|
288
|
+
this.advance();
|
|
289
|
+
return { type: 'ObjectLiteral', properties };
|
|
290
|
+
}
|
|
291
|
+
do {
|
|
292
|
+
// Key can be an identifier or a string
|
|
293
|
+
let key;
|
|
294
|
+
if (this.check(TokenType.STRING)) {
|
|
295
|
+
key = this.advance().value;
|
|
296
|
+
}
|
|
297
|
+
else if (this.checkIdentifier()) {
|
|
298
|
+
key = this.advance().value;
|
|
299
|
+
}
|
|
300
|
+
else {
|
|
301
|
+
throw this.error('Expected property key (identifier or string)');
|
|
302
|
+
}
|
|
303
|
+
this.consume(TokenType.COLON, "Expected ':' after property key");
|
|
304
|
+
const value = this.parseExpression();
|
|
305
|
+
properties.push({ key, value });
|
|
306
|
+
} while (this.match(TokenType.COMMA) && !this.check(TokenType.RBRACE));
|
|
307
|
+
this.consume(TokenType.RBRACE, "Expected '}'");
|
|
308
|
+
return { type: 'ObjectLiteral', properties };
|
|
309
|
+
}
|
|
240
310
|
parseQualifiedName() {
|
|
241
311
|
const parts = [];
|
|
242
312
|
parts.push(this.consume(TokenType.IDENTIFIER, 'Expected identifier').value);
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { FetchStep, PaginationConfig, RetryConfig, SinceConfig } from '../ast/nodes.js';
|
|
2
|
+
import { ScheduleParser } from './schedule-parser.js';
|
|
3
|
+
export declare class FetchParser extends ScheduleParser {
|
|
4
|
+
/**
|
|
5
|
+
* Check if current token is an HTTP method keyword
|
|
6
|
+
*/
|
|
7
|
+
protected checkHttpMethod(): boolean;
|
|
8
|
+
/**
|
|
9
|
+
* Parse HTTP method syntax: get "/path" { options }
|
|
10
|
+
*/
|
|
11
|
+
protected parseHttpMethodStep(): FetchStep;
|
|
12
|
+
/**
|
|
13
|
+
* Parse OAS-style call: call Source.operationId { options }
|
|
14
|
+
*/
|
|
15
|
+
protected parseCallStep(): FetchStep;
|
|
16
|
+
/**
|
|
17
|
+
* Parse fetch options block (shared between HTTP methods and call)
|
|
18
|
+
*/
|
|
19
|
+
protected parseFetchOptions(): Partial<FetchStep>;
|
|
20
|
+
/**
|
|
21
|
+
* Parse a fetch option key, handling keyword tokens that can appear as keys
|
|
22
|
+
*/
|
|
23
|
+
private parseFetchOptionKey;
|
|
24
|
+
protected parseSinceConfig(): SinceConfig;
|
|
25
|
+
protected parsePaginationConfig(): PaginationConfig;
|
|
26
|
+
protected parseRetryConfig(): RetryConfig;
|
|
27
|
+
}
|
|
@@ -0,0 +1,269 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Fetch step parsing
|
|
3
|
+
* Handles parsing of HTTP fetch steps (get, post, put, patch, delete, call).
|
|
4
|
+
*/
|
|
5
|
+
import { TokenType } from 'vague-lang';
|
|
6
|
+
import { ReqonTokenType } from '../lexer/tokens.js';
|
|
7
|
+
import { ScheduleParser } from './schedule-parser.js';
|
|
8
|
+
export class FetchParser extends ScheduleParser {
|
|
9
|
+
/**
|
|
10
|
+
* Check if current token is an HTTP method keyword
|
|
11
|
+
*/
|
|
12
|
+
checkHttpMethod() {
|
|
13
|
+
const t = this.peek().type;
|
|
14
|
+
return (t === ReqonTokenType.GET ||
|
|
15
|
+
t === ReqonTokenType.POST ||
|
|
16
|
+
t === ReqonTokenType.PUT ||
|
|
17
|
+
t === ReqonTokenType.PATCH ||
|
|
18
|
+
t === ReqonTokenType.DELETE);
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Parse HTTP method syntax: get "/path" { options }
|
|
22
|
+
*/
|
|
23
|
+
parseHttpMethodStep() {
|
|
24
|
+
const methodToken = this.advance();
|
|
25
|
+
let method;
|
|
26
|
+
switch (methodToken.type) {
|
|
27
|
+
case ReqonTokenType.GET:
|
|
28
|
+
method = 'GET';
|
|
29
|
+
break;
|
|
30
|
+
case ReqonTokenType.POST:
|
|
31
|
+
method = 'POST';
|
|
32
|
+
break;
|
|
33
|
+
case ReqonTokenType.PUT:
|
|
34
|
+
method = 'PUT';
|
|
35
|
+
break;
|
|
36
|
+
case ReqonTokenType.PATCH:
|
|
37
|
+
method = 'PATCH';
|
|
38
|
+
break;
|
|
39
|
+
case ReqonTokenType.DELETE:
|
|
40
|
+
method = 'DELETE';
|
|
41
|
+
break;
|
|
42
|
+
default:
|
|
43
|
+
throw this.error(`Unexpected HTTP method token: ${methodToken.value}`);
|
|
44
|
+
}
|
|
45
|
+
const path = this.parseExpression();
|
|
46
|
+
// Parse optional config block
|
|
47
|
+
const options = this.parseFetchOptions();
|
|
48
|
+
return {
|
|
49
|
+
type: 'FetchStep',
|
|
50
|
+
method,
|
|
51
|
+
path,
|
|
52
|
+
...options,
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Parse OAS-style call: call Source.operationId { options }
|
|
57
|
+
*/
|
|
58
|
+
parseCallStep() {
|
|
59
|
+
this.consume(ReqonTokenType.CALL, "Expected 'call'");
|
|
60
|
+
// OAS-style: call Source.operationId
|
|
61
|
+
const sourceName = this.consume(TokenType.IDENTIFIER, 'Expected source name').value;
|
|
62
|
+
this.consume(TokenType.DOT, "Expected '.'");
|
|
63
|
+
const opId = this.consume(TokenType.IDENTIFIER, 'Expected operationId').value;
|
|
64
|
+
const operationRef = { source: sourceName, operationId: opId };
|
|
65
|
+
const options = this.parseFetchOptions();
|
|
66
|
+
return {
|
|
67
|
+
type: 'FetchStep',
|
|
68
|
+
operationRef,
|
|
69
|
+
...options,
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Parse fetch options block (shared between HTTP methods and call)
|
|
74
|
+
*/
|
|
75
|
+
parseFetchOptions() {
|
|
76
|
+
let source;
|
|
77
|
+
let body;
|
|
78
|
+
let headers;
|
|
79
|
+
let paginate;
|
|
80
|
+
let until;
|
|
81
|
+
let retry;
|
|
82
|
+
let since;
|
|
83
|
+
if (this.match(TokenType.LBRACE)) {
|
|
84
|
+
while (!this.check(TokenType.RBRACE) && !this.isAtEnd()) {
|
|
85
|
+
const key = this.parseFetchOptionKey();
|
|
86
|
+
this.consume(TokenType.COLON, "Expected ':'");
|
|
87
|
+
switch (key) {
|
|
88
|
+
case 'source':
|
|
89
|
+
source = this.consume(TokenType.IDENTIFIER, 'Expected source name').value;
|
|
90
|
+
break;
|
|
91
|
+
case 'body':
|
|
92
|
+
body = this.parseExpression();
|
|
93
|
+
break;
|
|
94
|
+
case 'paginate':
|
|
95
|
+
paginate = this.parsePaginationConfig();
|
|
96
|
+
break;
|
|
97
|
+
case 'until':
|
|
98
|
+
until = this.parseExpression();
|
|
99
|
+
break;
|
|
100
|
+
case 'retry':
|
|
101
|
+
retry = this.parseRetryConfig();
|
|
102
|
+
break;
|
|
103
|
+
case 'since':
|
|
104
|
+
since = this.parseSinceConfig();
|
|
105
|
+
break;
|
|
106
|
+
default:
|
|
107
|
+
throw this.error(`Unknown fetch option: ${key}`);
|
|
108
|
+
}
|
|
109
|
+
this.match(TokenType.COMMA);
|
|
110
|
+
}
|
|
111
|
+
this.consume(TokenType.RBRACE, "Expected '}'");
|
|
112
|
+
}
|
|
113
|
+
return { source, body, headers, paginate, until, retry, since };
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Parse a fetch option key, handling keyword tokens that can appear as keys
|
|
117
|
+
*/
|
|
118
|
+
parseFetchOptionKey() {
|
|
119
|
+
if (this.check(ReqonTokenType.SOURCE)) {
|
|
120
|
+
this.advance();
|
|
121
|
+
return 'source';
|
|
122
|
+
}
|
|
123
|
+
else if (this.check(ReqonTokenType.PAGINATE)) {
|
|
124
|
+
this.advance();
|
|
125
|
+
return 'paginate';
|
|
126
|
+
}
|
|
127
|
+
else if (this.check(ReqonTokenType.UNTIL)) {
|
|
128
|
+
this.advance();
|
|
129
|
+
return 'until';
|
|
130
|
+
}
|
|
131
|
+
else if (this.check(ReqonTokenType.RETRY)) {
|
|
132
|
+
this.advance();
|
|
133
|
+
return 'retry';
|
|
134
|
+
}
|
|
135
|
+
else if (this.check(ReqonTokenType.SINCE)) {
|
|
136
|
+
this.advance();
|
|
137
|
+
return 'since';
|
|
138
|
+
}
|
|
139
|
+
return this.consume(TokenType.IDENTIFIER, 'Expected option key').value;
|
|
140
|
+
}
|
|
141
|
+
parseSinceConfig() {
|
|
142
|
+
// since: lastSync
|
|
143
|
+
// since: lastSync("custom-key")
|
|
144
|
+
// since: lastSync { param: "modified_since", format: "unix" }
|
|
145
|
+
// since: lastSync { header: "If-Modified-Since" }
|
|
146
|
+
if (this.check(ReqonTokenType.LAST_SYNC)) {
|
|
147
|
+
this.advance();
|
|
148
|
+
let key;
|
|
149
|
+
let param;
|
|
150
|
+
let header;
|
|
151
|
+
let format;
|
|
152
|
+
let updateFrom;
|
|
153
|
+
// Check for optional key: lastSync("key")
|
|
154
|
+
if (this.match(TokenType.LPAREN)) {
|
|
155
|
+
key = this.consume(TokenType.STRING, 'Expected checkpoint key').value;
|
|
156
|
+
this.consume(TokenType.RPAREN, "Expected ')'");
|
|
157
|
+
}
|
|
158
|
+
// Check for optional config block
|
|
159
|
+
if (this.match(TokenType.LBRACE)) {
|
|
160
|
+
while (!this.check(TokenType.RBRACE) && !this.isAtEnd()) {
|
|
161
|
+
const optionKey = this.consume(TokenType.IDENTIFIER, 'Expected option key').value;
|
|
162
|
+
this.consume(TokenType.COLON, "Expected ':'");
|
|
163
|
+
switch (optionKey) {
|
|
164
|
+
case 'param':
|
|
165
|
+
param = this.consume(TokenType.STRING, 'Expected param name').value;
|
|
166
|
+
break;
|
|
167
|
+
case 'header':
|
|
168
|
+
header = this.consume(TokenType.STRING, 'Expected header name').value;
|
|
169
|
+
break;
|
|
170
|
+
case 'format':
|
|
171
|
+
format = this.consume(TokenType.IDENTIFIER, 'Expected format')
|
|
172
|
+
.value;
|
|
173
|
+
break;
|
|
174
|
+
case 'updateFrom':
|
|
175
|
+
updateFrom = this.consume(TokenType.STRING, 'Expected field path').value;
|
|
176
|
+
break;
|
|
177
|
+
default:
|
|
178
|
+
throw this.error(`Unknown since option: ${optionKey}`);
|
|
179
|
+
}
|
|
180
|
+
this.match(TokenType.COMMA);
|
|
181
|
+
}
|
|
182
|
+
this.consume(TokenType.RBRACE, "Expected '}'");
|
|
183
|
+
}
|
|
184
|
+
return {
|
|
185
|
+
type: 'lastSync',
|
|
186
|
+
key,
|
|
187
|
+
param,
|
|
188
|
+
header,
|
|
189
|
+
format,
|
|
190
|
+
updateFrom,
|
|
191
|
+
};
|
|
192
|
+
}
|
|
193
|
+
// since: <expression> - custom expression for the timestamp
|
|
194
|
+
const expression = this.parseExpression();
|
|
195
|
+
return {
|
|
196
|
+
type: 'expression',
|
|
197
|
+
expression,
|
|
198
|
+
};
|
|
199
|
+
}
|
|
200
|
+
parsePaginationConfig() {
|
|
201
|
+
const typeToken = this.advance();
|
|
202
|
+
let type;
|
|
203
|
+
switch (typeToken.type) {
|
|
204
|
+
case ReqonTokenType.OFFSET:
|
|
205
|
+
type = 'offset';
|
|
206
|
+
break;
|
|
207
|
+
case ReqonTokenType.CURSOR:
|
|
208
|
+
type = 'cursor';
|
|
209
|
+
break;
|
|
210
|
+
case ReqonTokenType.PAGE:
|
|
211
|
+
type = 'page';
|
|
212
|
+
break;
|
|
213
|
+
default:
|
|
214
|
+
throw this.error(`Unknown pagination type: ${typeToken.value}`);
|
|
215
|
+
}
|
|
216
|
+
this.consume(TokenType.LPAREN, "Expected '('");
|
|
217
|
+
// Accept keyword tokens as param names (e.g., 'page', 'offset', 'cursor')
|
|
218
|
+
let param;
|
|
219
|
+
if (this.check(ReqonTokenType.PAGE)) {
|
|
220
|
+
param = this.advance().value;
|
|
221
|
+
}
|
|
222
|
+
else if (this.check(ReqonTokenType.OFFSET)) {
|
|
223
|
+
param = this.advance().value;
|
|
224
|
+
}
|
|
225
|
+
else if (this.check(ReqonTokenType.CURSOR)) {
|
|
226
|
+
param = this.advance().value;
|
|
227
|
+
}
|
|
228
|
+
else {
|
|
229
|
+
param = this.consume(TokenType.IDENTIFIER, 'Expected param name').value;
|
|
230
|
+
}
|
|
231
|
+
this.consume(TokenType.COMMA, "Expected ','");
|
|
232
|
+
const pageSize = parseInt(this.consume(TokenType.NUMBER, 'Expected page size').value, 10);
|
|
233
|
+
let cursorPath;
|
|
234
|
+
if (type === 'cursor' && this.match(TokenType.COMMA)) {
|
|
235
|
+
cursorPath = this.consume(TokenType.STRING, 'Expected cursor path').value;
|
|
236
|
+
}
|
|
237
|
+
this.consume(TokenType.RPAREN, "Expected ')'");
|
|
238
|
+
return { type, param, pageSize, cursorPath };
|
|
239
|
+
}
|
|
240
|
+
parseRetryConfig() {
|
|
241
|
+
this.consume(TokenType.LBRACE, "Expected '{'");
|
|
242
|
+
let maxAttempts = 3;
|
|
243
|
+
let backoff = 'exponential';
|
|
244
|
+
let initialDelay = 1000;
|
|
245
|
+
let maxDelay;
|
|
246
|
+
while (!this.check(TokenType.RBRACE) && !this.isAtEnd()) {
|
|
247
|
+
const key = this.consume(TokenType.IDENTIFIER, 'Expected retry option').value;
|
|
248
|
+
this.consume(TokenType.COLON, "Expected ':'");
|
|
249
|
+
switch (key) {
|
|
250
|
+
case 'maxAttempts':
|
|
251
|
+
maxAttempts = parseInt(this.consume(TokenType.NUMBER, 'Expected number').value, 10);
|
|
252
|
+
break;
|
|
253
|
+
case 'backoff':
|
|
254
|
+
backoff = this.consume(TokenType.IDENTIFIER, 'Expected backoff type')
|
|
255
|
+
.value;
|
|
256
|
+
break;
|
|
257
|
+
case 'initialDelay':
|
|
258
|
+
initialDelay = parseInt(this.consume(TokenType.NUMBER, 'Expected number').value, 10);
|
|
259
|
+
break;
|
|
260
|
+
case 'maxDelay':
|
|
261
|
+
maxDelay = parseInt(this.consume(TokenType.NUMBER, 'Expected number').value, 10);
|
|
262
|
+
break;
|
|
263
|
+
}
|
|
264
|
+
this.match(TokenType.COMMA);
|
|
265
|
+
}
|
|
266
|
+
this.consume(TokenType.RBRACE, "Expected '}'");
|
|
267
|
+
return { maxAttempts, backoff, initialDelay, maxDelay };
|
|
268
|
+
}
|
|
269
|
+
}
|
package/dist/parser/index.d.ts
CHANGED
|
@@ -1,3 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ---
|
|
3
|
+
* purpose: Parser module exports - inheritance chain of specialized parsers
|
|
4
|
+
* note: Parser classes form inheritance chain (Base -> Expression -> Source -> Schedule -> Fetch -> Action -> Pipeline -> ReqonParser)
|
|
5
|
+
* exports:
|
|
6
|
+
* - ReqonParser - top-level parser for .vague files
|
|
7
|
+
* related:
|
|
8
|
+
* - ./parser.ts - ReqonParser implementation
|
|
9
|
+
* - ./base.ts - token manipulation utilities
|
|
10
|
+
* - ../lexer/index.ts - tokenization
|
|
11
|
+
* ---
|
|
12
|
+
*/
|
|
1
13
|
export { ReqonParser } from './parser.js';
|
|
2
14
|
export { ReqonExpressionParser } from './expressions.js';
|
|
3
15
|
export { ReqonParserBase } from './base.js';
|
|
16
|
+
export { SourceParser } from './source-parser.js';
|
|
17
|
+
export { ScheduleParser } from './schedule-parser.js';
|
|
18
|
+
export { FetchParser } from './fetch-parser.js';
|
|
19
|
+
export { ActionParser } from './action-parser.js';
|
|
20
|
+
export { PipelineParser } from './pipeline-parser.js';
|
package/dist/parser/index.js
CHANGED
|
@@ -1,3 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ---
|
|
3
|
+
* purpose: Parser module exports - inheritance chain of specialized parsers
|
|
4
|
+
* note: Parser classes form inheritance chain (Base -> Expression -> Source -> Schedule -> Fetch -> Action -> Pipeline -> ReqonParser)
|
|
5
|
+
* exports:
|
|
6
|
+
* - ReqonParser - top-level parser for .vague files
|
|
7
|
+
* related:
|
|
8
|
+
* - ./parser.ts - ReqonParser implementation
|
|
9
|
+
* - ./base.ts - token manipulation utilities
|
|
10
|
+
* - ../lexer/index.ts - tokenization
|
|
11
|
+
* ---
|
|
12
|
+
*/
|
|
1
13
|
export { ReqonParser } from './parser.js';
|
|
2
14
|
export { ReqonExpressionParser } from './expressions.js';
|
|
3
15
|
export { ReqonParserBase } from './base.js';
|
|
16
|
+
export { SourceParser } from './source-parser.js';
|
|
17
|
+
export { ScheduleParser } from './schedule-parser.js';
|
|
18
|
+
export { FetchParser } from './fetch-parser.js';
|
|
19
|
+
export { ActionParser } from './action-parser.js';
|
|
20
|
+
export { PipelineParser } from './pipeline-parser.js';
|
package/dist/parser/parser.d.ts
CHANGED
|
@@ -1,68 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ---
|
|
3
|
+
* purpose: Top-level parser - combines all domain-specific parser modules
|
|
4
|
+
* inputs:
|
|
5
|
+
* - Token[] from lexer
|
|
6
|
+
* - source string for error messages
|
|
7
|
+
* outputs:
|
|
8
|
+
* - ReqonProgram AST
|
|
9
|
+
* related:
|
|
10
|
+
* - ./pipeline-parser.ts - parent class (pipeline stage parsing)
|
|
11
|
+
* - ./action-parser.ts - action/step parsing
|
|
12
|
+
* - ./fetch-parser.ts - HTTP fetch parsing
|
|
13
|
+
* - ../ast/nodes.ts - AST node types
|
|
14
|
+
* ---
|
|
15
|
+
*/
|
|
1
16
|
import { type Token } from 'vague-lang';
|
|
2
|
-
import {
|
|
3
|
-
import
|
|
4
|
-
export declare class ReqonParser extends
|
|
17
|
+
import type { ReqonProgram, PipelineDefinition } from '../ast/nodes.js';
|
|
18
|
+
import { PipelineParser } from './pipeline-parser.js';
|
|
19
|
+
export declare class ReqonParser extends PipelineParser {
|
|
5
20
|
constructor(tokens: Token[], source?: string, filePath?: string);
|
|
21
|
+
/**
|
|
22
|
+
* Parse a complete Reqon program
|
|
23
|
+
*/
|
|
6
24
|
parse(): ReqonProgram;
|
|
25
|
+
/**
|
|
26
|
+
* Parse a top-level statement
|
|
27
|
+
*/
|
|
7
28
|
private parseStatement;
|
|
29
|
+
/**
|
|
30
|
+
* Parse a mission definition
|
|
31
|
+
*/
|
|
8
32
|
private parseMission;
|
|
9
33
|
/**
|
|
10
|
-
*
|
|
34
|
+
* Parse checkpoint configuration: checkpoint: afterStep | onFailure
|
|
11
35
|
*/
|
|
12
|
-
private
|
|
36
|
+
private parseCheckpointConfig;
|
|
13
37
|
/**
|
|
14
|
-
*
|
|
38
|
+
* Parse trace configuration: trace: full | minimal
|
|
15
39
|
*/
|
|
16
|
-
private
|
|
40
|
+
private parseTraceConfig;
|
|
17
41
|
/**
|
|
18
|
-
* Validate that all action references in
|
|
42
|
+
* Validate that all store, source, action, and transform references in actions exist
|
|
19
43
|
*/
|
|
20
|
-
private
|
|
21
|
-
private parseSchedule;
|
|
22
|
-
private parseIntervalSchedule;
|
|
23
|
-
private parseScheduleRetryConfig;
|
|
24
|
-
private parseSource;
|
|
25
|
-
private parseSourceConfig;
|
|
26
|
-
private parseRateLimitConfig;
|
|
27
|
-
private parseCircuitBreakerConfig;
|
|
28
|
-
private parseAuthConfig;
|
|
29
|
-
private parseStoreDefinition;
|
|
30
|
-
private parseAction;
|
|
31
|
-
private parseActionStep;
|
|
32
|
-
private checkHttpMethod;
|
|
44
|
+
private validateActionReferences;
|
|
33
45
|
/**
|
|
34
|
-
*
|
|
46
|
+
* Recursively validate store, source, action, and transform references in action steps
|
|
35
47
|
*/
|
|
36
|
-
private
|
|
48
|
+
private validateStepsReferences;
|
|
37
49
|
/**
|
|
38
|
-
*
|
|
39
|
-
* For direct HTTP requests, use: get "/path", post "/path", etc.
|
|
50
|
+
* Validate references in a single step
|
|
40
51
|
*/
|
|
41
|
-
private
|
|
42
|
-
private parseSinceConfig;
|
|
43
|
-
private parsePaginationConfig;
|
|
44
|
-
private parseRetryConfig;
|
|
45
|
-
private parseForStep;
|
|
46
|
-
private parseMapStep;
|
|
47
|
-
private parseValidateStep;
|
|
48
|
-
private parseStoreStep;
|
|
49
|
-
private parseMatchStep;
|
|
50
|
-
private parseMatchArm;
|
|
51
|
-
private tryParseFlowDirective;
|
|
52
|
-
private parseLetStep;
|
|
52
|
+
private validateStepReferences;
|
|
53
53
|
/**
|
|
54
|
-
*
|
|
55
|
-
*
|
|
54
|
+
* Validate that all action references in the pipeline exist
|
|
55
|
+
* Note: This is called by the loader after action merging
|
|
56
56
|
*/
|
|
57
|
-
|
|
57
|
+
validatePipelineReferences(pipeline: PipelineDefinition, definedActions: Set<string>): void;
|
|
58
58
|
/**
|
|
59
|
-
* Parse
|
|
59
|
+
* Parse an import statement
|
|
60
60
|
*/
|
|
61
|
-
private parseWebhookStorageConfig;
|
|
62
|
-
private parsePipeline;
|
|
63
|
-
private parsePipelineStage;
|
|
64
|
-
private parseSchema;
|
|
65
|
-
private parseFieldDefinition;
|
|
66
61
|
private parseImport;
|
|
62
|
+
/**
|
|
63
|
+
* Parse a let statement
|
|
64
|
+
*/
|
|
67
65
|
private parseLet;
|
|
68
66
|
}
|