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
|
@@ -1,397 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
sidebar_position: 6
|
|
3
|
-
---
|
|
4
|
-
|
|
5
|
-
# Pipelines
|
|
6
|
-
|
|
7
|
-
Pipelines define the execution order of actions in a mission. They support sequential execution, parallel execution, and conditional flows.
|
|
8
|
-
|
|
9
|
-
## Basic Syntax
|
|
10
|
-
|
|
11
|
-
```vague
|
|
12
|
-
run ActionName
|
|
13
|
-
run ActionA then ActionB
|
|
14
|
-
run [ActionA, ActionB] then ActionC
|
|
15
|
-
```
|
|
16
|
-
|
|
17
|
-
## Sequential Execution
|
|
18
|
-
|
|
19
|
-
Execute actions one after another:
|
|
20
|
-
|
|
21
|
-
```vague
|
|
22
|
-
mission DataPipeline {
|
|
23
|
-
action Fetch { /* ... */ }
|
|
24
|
-
action Transform { /* ... */ }
|
|
25
|
-
action Export { /* ... */ }
|
|
26
|
-
|
|
27
|
-
run Fetch then Transform then Export
|
|
28
|
-
}
|
|
29
|
-
```
|
|
30
|
-
|
|
31
|
-
Each action completes before the next starts:
|
|
32
|
-
|
|
33
|
-
```
|
|
34
|
-
Fetch → Transform → Export
|
|
35
|
-
```
|
|
36
|
-
|
|
37
|
-
## Parallel Execution
|
|
38
|
-
|
|
39
|
-
Execute multiple actions concurrently:
|
|
40
|
-
|
|
41
|
-
```vague
|
|
42
|
-
mission ParallelFetch {
|
|
43
|
-
action FetchUsers { /* ... */ }
|
|
44
|
-
action FetchOrders { /* ... */ }
|
|
45
|
-
action FetchProducts { /* ... */ }
|
|
46
|
-
|
|
47
|
-
run [FetchUsers, FetchOrders, FetchProducts]
|
|
48
|
-
}
|
|
49
|
-
```
|
|
50
|
-
|
|
51
|
-
Execution diagram:
|
|
52
|
-
|
|
53
|
-
```
|
|
54
|
-
┌─ FetchUsers ──┐
|
|
55
|
-
├─ FetchOrders ─┼─→
|
|
56
|
-
└─ FetchProducts┘
|
|
57
|
-
```
|
|
58
|
-
|
|
59
|
-
## Parallel Then Sequential
|
|
60
|
-
|
|
61
|
-
Combine parallel and sequential:
|
|
62
|
-
|
|
63
|
-
```vague
|
|
64
|
-
mission ComplexPipeline {
|
|
65
|
-
action FetchCustomers { /* ... */ }
|
|
66
|
-
action FetchProducts { /* ... */ }
|
|
67
|
-
action MergeData { /* ... */ }
|
|
68
|
-
action Export { /* ... */ }
|
|
69
|
-
|
|
70
|
-
run [FetchCustomers, FetchProducts] then MergeData then Export
|
|
71
|
-
}
|
|
72
|
-
```
|
|
73
|
-
|
|
74
|
-
Execution:
|
|
75
|
-
|
|
76
|
-
```
|
|
77
|
-
┌─ FetchCustomers ─┐
|
|
78
|
-
├─────────────────→┼─ MergeData ─→ Export
|
|
79
|
-
└─ FetchProducts ──┘
|
|
80
|
-
```
|
|
81
|
-
|
|
82
|
-
## Multiple Parallel Groups
|
|
83
|
-
|
|
84
|
-
```vague
|
|
85
|
-
mission MultiPhase {
|
|
86
|
-
// Phase 1: Fetch all data sources
|
|
87
|
-
action FetchA { }
|
|
88
|
-
action FetchB { }
|
|
89
|
-
action FetchC { }
|
|
90
|
-
|
|
91
|
-
// Phase 2: Transform in parallel
|
|
92
|
-
action TransformA { }
|
|
93
|
-
action TransformB { }
|
|
94
|
-
|
|
95
|
-
// Phase 3: Final merge
|
|
96
|
-
action Merge { }
|
|
97
|
-
|
|
98
|
-
run [FetchA, FetchB, FetchC]
|
|
99
|
-
then [TransformA, TransformB]
|
|
100
|
-
then Merge
|
|
101
|
-
}
|
|
102
|
-
```
|
|
103
|
-
|
|
104
|
-
## Single Action
|
|
105
|
-
|
|
106
|
-
Run a single action:
|
|
107
|
-
|
|
108
|
-
```vague
|
|
109
|
-
mission SimpleSync {
|
|
110
|
-
action Sync {
|
|
111
|
-
get "/data"
|
|
112
|
-
store response -> data { key: .id }
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
run Sync
|
|
116
|
-
}
|
|
117
|
-
```
|
|
118
|
-
|
|
119
|
-
## Action Dependencies
|
|
120
|
-
|
|
121
|
-
Actions run in order share context:
|
|
122
|
-
|
|
123
|
-
```vague
|
|
124
|
-
mission DependentActions {
|
|
125
|
-
store customers: memory("customers")
|
|
126
|
-
store orders: memory("orders")
|
|
127
|
-
|
|
128
|
-
action FetchCustomers {
|
|
129
|
-
get "/customers"
|
|
130
|
-
store response -> customers { key: .id }
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
action FetchOrders {
|
|
134
|
-
// Can access customers store populated by previous action
|
|
135
|
-
for customer in customers {
|
|
136
|
-
get concat("/customers/", customer.id, "/orders")
|
|
137
|
-
store response -> orders { key: .id }
|
|
138
|
-
}
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
run FetchCustomers then FetchOrders
|
|
142
|
-
}
|
|
143
|
-
```
|
|
144
|
-
|
|
145
|
-
## Parallel Action Isolation
|
|
146
|
-
|
|
147
|
-
Parallel actions have isolated contexts:
|
|
148
|
-
|
|
149
|
-
```vague
|
|
150
|
-
mission ParallelIsolation {
|
|
151
|
-
store results: memory("results")
|
|
152
|
-
|
|
153
|
-
action ProcessA {
|
|
154
|
-
get "/data-a"
|
|
155
|
-
store response -> results { key: concat("a-", .id) }
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
action ProcessB {
|
|
159
|
-
get "/data-b"
|
|
160
|
-
store response -> results { key: concat("b-", .id) }
|
|
161
|
-
}
|
|
162
|
-
|
|
163
|
-
// Both write to same store, but with different key prefixes
|
|
164
|
-
run [ProcessA, ProcessB]
|
|
165
|
-
}
|
|
166
|
-
```
|
|
167
|
-
|
|
168
|
-
## Error Handling in Pipelines
|
|
169
|
-
|
|
170
|
-
### Sequential Error Handling
|
|
171
|
-
|
|
172
|
-
Errors in sequential pipelines stop execution:
|
|
173
|
-
|
|
174
|
-
```vague
|
|
175
|
-
run Fetch then Transform then Export
|
|
176
|
-
// If Transform fails, Export never runs
|
|
177
|
-
```
|
|
178
|
-
|
|
179
|
-
### Parallel Error Handling
|
|
180
|
-
|
|
181
|
-
In parallel groups, all actions run even if one fails:
|
|
182
|
-
|
|
183
|
-
```vague
|
|
184
|
-
run [FetchA, FetchB, FetchC] then Merge
|
|
185
|
-
// If FetchB fails, FetchA and FetchC still complete
|
|
186
|
-
// Merge runs but FetchB data is missing
|
|
187
|
-
```
|
|
188
|
-
|
|
189
|
-
Handle partial failures:
|
|
190
|
-
|
|
191
|
-
```vague
|
|
192
|
-
action Merge {
|
|
193
|
-
// Check which data sources succeeded
|
|
194
|
-
match {
|
|
195
|
-
length(dataA) > 0 and length(dataB) > 0 -> {
|
|
196
|
-
// Full merge
|
|
197
|
-
},
|
|
198
|
-
length(dataA) > 0 -> {
|
|
199
|
-
// Partial merge with just A
|
|
200
|
-
},
|
|
201
|
-
length(dataB) > 0 -> {
|
|
202
|
-
// Partial merge with just B
|
|
203
|
-
},
|
|
204
|
-
_ -> abort "No data available"
|
|
205
|
-
}
|
|
206
|
-
}
|
|
207
|
-
```
|
|
208
|
-
|
|
209
|
-
## Common Pipeline Patterns
|
|
210
|
-
|
|
211
|
-
### ETL Pipeline
|
|
212
|
-
|
|
213
|
-
```vague
|
|
214
|
-
mission ETL {
|
|
215
|
-
action Extract {
|
|
216
|
-
get "/source-data"
|
|
217
|
-
store response -> raw { key: .id }
|
|
218
|
-
}
|
|
219
|
-
|
|
220
|
-
action Transform {
|
|
221
|
-
for item in raw {
|
|
222
|
-
map item -> Transformed { /* ... */ }
|
|
223
|
-
store item -> transformed { key: .id }
|
|
224
|
-
}
|
|
225
|
-
}
|
|
226
|
-
|
|
227
|
-
action Load {
|
|
228
|
-
for item in transformed {
|
|
229
|
-
post "/destination" { body: item }
|
|
230
|
-
}
|
|
231
|
-
}
|
|
232
|
-
|
|
233
|
-
run Extract then Transform then Load
|
|
234
|
-
}
|
|
235
|
-
```
|
|
236
|
-
|
|
237
|
-
### Fan-Out Fan-In
|
|
238
|
-
|
|
239
|
-
```vague
|
|
240
|
-
mission FanOutFanIn {
|
|
241
|
-
action FetchMain {
|
|
242
|
-
get "/items"
|
|
243
|
-
store response -> items { key: .id }
|
|
244
|
-
}
|
|
245
|
-
|
|
246
|
-
action EnrichA {
|
|
247
|
-
for item in items {
|
|
248
|
-
get concat("/enrichA/", item.id)
|
|
249
|
-
store response -> enrichA { key: item.id }
|
|
250
|
-
}
|
|
251
|
-
}
|
|
252
|
-
|
|
253
|
-
action EnrichB {
|
|
254
|
-
for item in items {
|
|
255
|
-
get concat("/enrichB/", item.id)
|
|
256
|
-
store response -> enrichB { key: item.id }
|
|
257
|
-
}
|
|
258
|
-
}
|
|
259
|
-
|
|
260
|
-
action Combine {
|
|
261
|
-
for item in items {
|
|
262
|
-
map item -> Enriched {
|
|
263
|
-
...item,
|
|
264
|
-
dataA: enrichA[item.id],
|
|
265
|
-
dataB: enrichB[item.id]
|
|
266
|
-
}
|
|
267
|
-
store item -> enriched { key: .id }
|
|
268
|
-
}
|
|
269
|
-
}
|
|
270
|
-
|
|
271
|
-
run FetchMain then [EnrichA, EnrichB] then Combine
|
|
272
|
-
}
|
|
273
|
-
```
|
|
274
|
-
|
|
275
|
-
### Conditional Pipeline
|
|
276
|
-
|
|
277
|
-
```vague
|
|
278
|
-
mission ConditionalPipeline {
|
|
279
|
-
action CheckStatus {
|
|
280
|
-
get "/status"
|
|
281
|
-
store response -> status
|
|
282
|
-
}
|
|
283
|
-
|
|
284
|
-
action FullSync {
|
|
285
|
-
get "/all-data"
|
|
286
|
-
store response -> data { key: .id }
|
|
287
|
-
}
|
|
288
|
-
|
|
289
|
-
action IncrementalSync {
|
|
290
|
-
get "/data" { since: lastSync }
|
|
291
|
-
store response -> data { key: .id, upsert: true }
|
|
292
|
-
}
|
|
293
|
-
|
|
294
|
-
action Process {
|
|
295
|
-
// Determine which sync to run based on status
|
|
296
|
-
match status {
|
|
297
|
-
{ needsFullSync: true } -> run FullSync,
|
|
298
|
-
_ -> run IncrementalSync
|
|
299
|
-
}
|
|
300
|
-
}
|
|
301
|
-
|
|
302
|
-
run CheckStatus then Process
|
|
303
|
-
}
|
|
304
|
-
```
|
|
305
|
-
|
|
306
|
-
### Retry Pipeline
|
|
307
|
-
|
|
308
|
-
```vague
|
|
309
|
-
mission RetryPipeline {
|
|
310
|
-
action FetchWithRetry {
|
|
311
|
-
get "/unreliable-endpoint" {
|
|
312
|
-
retry: { maxAttempts: 3, backoff: exponential }
|
|
313
|
-
}
|
|
314
|
-
|
|
315
|
-
match response {
|
|
316
|
-
{ error: _ } -> abort "Failed after retries",
|
|
317
|
-
_ -> store response -> data { key: .id }
|
|
318
|
-
}
|
|
319
|
-
}
|
|
320
|
-
|
|
321
|
-
action ProcessData { /* ... */ }
|
|
322
|
-
|
|
323
|
-
run FetchWithRetry then ProcessData
|
|
324
|
-
}
|
|
325
|
-
```
|
|
326
|
-
|
|
327
|
-
## Best Practices
|
|
328
|
-
|
|
329
|
-
### Group Related Fetches
|
|
330
|
-
|
|
331
|
-
```vague
|
|
332
|
-
// Good: related fetches in parallel
|
|
333
|
-
run [FetchOrders, FetchOrderItems, FetchOrderPayments] then ProcessOrders
|
|
334
|
-
|
|
335
|
-
// Avoid: unrelated data
|
|
336
|
-
run [FetchOrders, FetchUsers, FetchProducts] then ???
|
|
337
|
-
```
|
|
338
|
-
|
|
339
|
-
### Keep Actions Focused
|
|
340
|
-
|
|
341
|
-
```vague
|
|
342
|
-
// Good: single responsibility
|
|
343
|
-
action FetchUsers { }
|
|
344
|
-
action TransformUsers { }
|
|
345
|
-
action ExportUsers { }
|
|
346
|
-
|
|
347
|
-
run FetchUsers then TransformUsers then ExportUsers
|
|
348
|
-
|
|
349
|
-
// Avoid: monolithic action
|
|
350
|
-
action DoEverything { }
|
|
351
|
-
run DoEverything
|
|
352
|
-
```
|
|
353
|
-
|
|
354
|
-
### Handle Dependencies Explicitly
|
|
355
|
-
|
|
356
|
-
```vague
|
|
357
|
-
mission ExplicitDependencies {
|
|
358
|
-
action FetchParent {
|
|
359
|
-
get "/parents"
|
|
360
|
-
store response -> parents { key: .id }
|
|
361
|
-
}
|
|
362
|
-
|
|
363
|
-
action FetchChildren {
|
|
364
|
-
// Explicitly depends on parents
|
|
365
|
-
for parent in parents {
|
|
366
|
-
get concat("/parents/", parent.id, "/children")
|
|
367
|
-
store response -> children { key: .id }
|
|
368
|
-
}
|
|
369
|
-
}
|
|
370
|
-
|
|
371
|
-
// Order enforces dependency
|
|
372
|
-
run FetchParent then FetchChildren
|
|
373
|
-
}
|
|
374
|
-
```
|
|
375
|
-
|
|
376
|
-
### Document Complex Pipelines
|
|
377
|
-
|
|
378
|
-
```vague
|
|
379
|
-
mission DocumentedPipeline {
|
|
380
|
-
// Phase 1: Data Collection
|
|
381
|
-
action FetchCustomers { }
|
|
382
|
-
action FetchOrders { }
|
|
383
|
-
action FetchProducts { }
|
|
384
|
-
|
|
385
|
-
// Phase 2: Enrichment
|
|
386
|
-
action EnrichOrders { }
|
|
387
|
-
|
|
388
|
-
// Phase 3: Export
|
|
389
|
-
action ExportToWarehouse { }
|
|
390
|
-
action ExportToAnalytics { }
|
|
391
|
-
|
|
392
|
-
// Execution: Collect → Enrich → Export
|
|
393
|
-
run [FetchCustomers, FetchOrders, FetchProducts]
|
|
394
|
-
then EnrichOrders
|
|
395
|
-
then [ExportToWarehouse, ExportToAnalytics]
|
|
396
|
-
}
|
|
397
|
-
```
|