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,353 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
sidebar_position: 3
|
|
3
|
-
---
|
|
4
|
-
|
|
5
|
-
# Parallel Execution
|
|
6
|
-
|
|
7
|
-
Reqon supports parallel execution of independent actions for improved performance.
|
|
8
|
-
|
|
9
|
-
## Basic Parallel Execution
|
|
10
|
-
|
|
11
|
-
```vague
|
|
12
|
-
run [ActionA, ActionB, ActionC] then MergeResults
|
|
13
|
-
```
|
|
14
|
-
|
|
15
|
-
Execution:
|
|
16
|
-
```
|
|
17
|
-
┌─ ActionA ─┐
|
|
18
|
-
├─ ActionB ─┼─ MergeResults
|
|
19
|
-
└─ ActionC ─┘
|
|
20
|
-
```
|
|
21
|
-
|
|
22
|
-
## Syntax
|
|
23
|
-
|
|
24
|
-
### Parallel Group
|
|
25
|
-
|
|
26
|
-
```vague
|
|
27
|
-
run [Action1, Action2, Action3]
|
|
28
|
-
```
|
|
29
|
-
|
|
30
|
-
All actions run simultaneously.
|
|
31
|
-
|
|
32
|
-
### Parallel Then Sequential
|
|
33
|
-
|
|
34
|
-
```vague
|
|
35
|
-
run [Fetch1, Fetch2] then Process then [Export1, Export2]
|
|
36
|
-
```
|
|
37
|
-
|
|
38
|
-
```
|
|
39
|
-
┌─ Fetch1 ─┐ ┌─ Export1 ─┐
|
|
40
|
-
├──────────┼─ Process ─┼────────────┤
|
|
41
|
-
└─ Fetch2 ─┘ └─ Export2 ─┘
|
|
42
|
-
```
|
|
43
|
-
|
|
44
|
-
## Use Cases
|
|
45
|
-
|
|
46
|
-
### Fetching from Multiple Sources
|
|
47
|
-
|
|
48
|
-
```vague
|
|
49
|
-
mission MultiSourceSync {
|
|
50
|
-
source Xero { auth: oauth2, base: "https://api.xero.com" }
|
|
51
|
-
source QuickBooks { auth: oauth2, base: "https://quickbooks.api.com" }
|
|
52
|
-
source Stripe { auth: bearer, base: "https://api.stripe.com" }
|
|
53
|
-
|
|
54
|
-
action FetchXero {
|
|
55
|
-
get Xero "/invoices"
|
|
56
|
-
store response -> xeroInvoices { key: .InvoiceID }
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
action FetchQuickBooks {
|
|
60
|
-
get QuickBooks "/invoices"
|
|
61
|
-
store response -> qbInvoices { key: .Id }
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
action FetchStripe {
|
|
65
|
-
get Stripe "/invoices"
|
|
66
|
-
store response -> stripeInvoices { key: .id }
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
action Reconcile {
|
|
70
|
-
// All invoices are now available
|
|
71
|
-
for xero in xeroInvoices {
|
|
72
|
-
// Cross-reference with other sources
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
// Fetch all in parallel, then reconcile
|
|
77
|
-
run [FetchXero, FetchQuickBooks, FetchStripe] then Reconcile
|
|
78
|
-
}
|
|
79
|
-
```
|
|
80
|
-
|
|
81
|
-
### Independent Processing
|
|
82
|
-
|
|
83
|
-
```vague
|
|
84
|
-
mission DataProcessing {
|
|
85
|
-
action ProcessCustomers {
|
|
86
|
-
for customer in rawCustomers {
|
|
87
|
-
// Transform customers
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
action ProcessOrders {
|
|
92
|
-
for order in rawOrders {
|
|
93
|
-
// Transform orders
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
action ProcessProducts {
|
|
98
|
-
for product in rawProducts {
|
|
99
|
-
// Transform products
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
action GenerateReports {
|
|
104
|
-
// Uses all processed data
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
run [ProcessCustomers, ProcessOrders, ProcessProducts] then GenerateReports
|
|
108
|
-
}
|
|
109
|
-
```
|
|
110
|
-
|
|
111
|
-
### Fan-Out Fan-In
|
|
112
|
-
|
|
113
|
-
```vague
|
|
114
|
-
mission FanOutFanIn {
|
|
115
|
-
action FetchMaster {
|
|
116
|
-
get "/items"
|
|
117
|
-
store response -> items { key: .id }
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
action EnrichWithPricing {
|
|
121
|
-
for item in items {
|
|
122
|
-
get "/pricing" { params: { itemId: item.id } }
|
|
123
|
-
store response -> pricing { key: item.id }
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
action EnrichWithInventory {
|
|
128
|
-
for item in items {
|
|
129
|
-
get "/inventory" { params: { itemId: item.id } }
|
|
130
|
-
store response -> inventory { key: item.id }
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
action Combine {
|
|
135
|
-
for item in items {
|
|
136
|
-
map item -> EnrichedItem {
|
|
137
|
-
...item,
|
|
138
|
-
price: pricing[item.id].price,
|
|
139
|
-
stock: inventory[item.id].quantity
|
|
140
|
-
}
|
|
141
|
-
store item -> enrichedItems { key: .id }
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
run FetchMaster then [EnrichWithPricing, EnrichWithInventory] then Combine
|
|
146
|
-
}
|
|
147
|
-
```
|
|
148
|
-
|
|
149
|
-
## Concurrency Control
|
|
150
|
-
|
|
151
|
-
### Limit Parallel Actions
|
|
152
|
-
|
|
153
|
-
```vague
|
|
154
|
-
mission ControlledParallel {
|
|
155
|
-
maxConcurrency: 3
|
|
156
|
-
|
|
157
|
-
run [A, B, C, D, E] then Finish
|
|
158
|
-
// Runs 3 at a time: [A,B,C], then [D,E]
|
|
159
|
-
}
|
|
160
|
-
```
|
|
161
|
-
|
|
162
|
-
### Per-Action Limits
|
|
163
|
-
|
|
164
|
-
```vague
|
|
165
|
-
action FetchWithLimit {
|
|
166
|
-
concurrency: 5 // Max 5 concurrent requests within this action
|
|
167
|
-
|
|
168
|
-
for item in items parallel {
|
|
169
|
-
get concat("/items/", item.id)
|
|
170
|
-
}
|
|
171
|
-
}
|
|
172
|
-
```
|
|
173
|
-
|
|
174
|
-
## Error Handling
|
|
175
|
-
|
|
176
|
-
### Default Behavior
|
|
177
|
-
|
|
178
|
-
All parallel actions run even if one fails:
|
|
179
|
-
|
|
180
|
-
```vague
|
|
181
|
-
run [ActionA, ActionB, ActionC]
|
|
182
|
-
// If ActionB fails, ActionA and ActionC still complete
|
|
183
|
-
```
|
|
184
|
-
|
|
185
|
-
### Fail-Fast Mode
|
|
186
|
-
|
|
187
|
-
```vague
|
|
188
|
-
mission FailFast {
|
|
189
|
-
parallelMode: "fail-fast"
|
|
190
|
-
|
|
191
|
-
run [ActionA, ActionB, ActionC]
|
|
192
|
-
// If ActionB fails, cancel ActionA and ActionC
|
|
193
|
-
}
|
|
194
|
-
```
|
|
195
|
-
|
|
196
|
-
### Handling Partial Results
|
|
197
|
-
|
|
198
|
-
```vague
|
|
199
|
-
action Merge {
|
|
200
|
-
// Check which sources succeeded
|
|
201
|
-
match {
|
|
202
|
-
length(dataA) > 0 and length(dataB) > 0 -> {
|
|
203
|
-
// Full merge
|
|
204
|
-
},
|
|
205
|
-
length(dataA) > 0 -> {
|
|
206
|
-
// Partial merge - only A available
|
|
207
|
-
},
|
|
208
|
-
_ -> abort "No data available"
|
|
209
|
-
}
|
|
210
|
-
}
|
|
211
|
-
```
|
|
212
|
-
|
|
213
|
-
## Shared State
|
|
214
|
-
|
|
215
|
-
### Isolated Contexts
|
|
216
|
-
|
|
217
|
-
Parallel actions have isolated variable contexts:
|
|
218
|
-
|
|
219
|
-
```vague
|
|
220
|
-
action ParallelA {
|
|
221
|
-
// Sets its own 'response'
|
|
222
|
-
get "/a"
|
|
223
|
-
}
|
|
224
|
-
|
|
225
|
-
action ParallelB {
|
|
226
|
-
// Has its own 'response', doesn't see A's
|
|
227
|
-
get "/b"
|
|
228
|
-
}
|
|
229
|
-
```
|
|
230
|
-
|
|
231
|
-
### Shared Stores
|
|
232
|
-
|
|
233
|
-
All actions can write to shared stores:
|
|
234
|
-
|
|
235
|
-
```vague
|
|
236
|
-
action ParallelA {
|
|
237
|
-
get "/a"
|
|
238
|
-
store response -> shared { key: concat("a-", .id) }
|
|
239
|
-
}
|
|
240
|
-
|
|
241
|
-
action ParallelB {
|
|
242
|
-
get "/b"
|
|
243
|
-
store response -> shared { key: concat("b-", .id) }
|
|
244
|
-
}
|
|
245
|
-
```
|
|
246
|
-
|
|
247
|
-
## Performance Considerations
|
|
248
|
-
|
|
249
|
-
### When to Use Parallel
|
|
250
|
-
|
|
251
|
-
| Scenario | Recommendation |
|
|
252
|
-
|----------|----------------|
|
|
253
|
-
| Independent API calls | Parallel |
|
|
254
|
-
| Rate-limited API | Sequential |
|
|
255
|
-
| Data dependencies | Sequential |
|
|
256
|
-
| Mixed workload | Hybrid |
|
|
257
|
-
|
|
258
|
-
### Memory Usage
|
|
259
|
-
|
|
260
|
-
Parallel execution uses more memory:
|
|
261
|
-
|
|
262
|
-
```vague
|
|
263
|
-
// Memory-efficient: process and discard
|
|
264
|
-
run Fetch then Process then Export
|
|
265
|
-
|
|
266
|
-
// Higher memory: all data in memory at once
|
|
267
|
-
run [FetchA, FetchB, FetchC] then Combine
|
|
268
|
-
```
|
|
269
|
-
|
|
270
|
-
### Network Saturation
|
|
271
|
-
|
|
272
|
-
Too much parallelism can saturate network:
|
|
273
|
-
|
|
274
|
-
```vague
|
|
275
|
-
// May overwhelm API
|
|
276
|
-
run [A, B, C, D, E, F, G, H, I, J]
|
|
277
|
-
|
|
278
|
-
// Better: limited parallelism
|
|
279
|
-
maxConcurrency: 3
|
|
280
|
-
run [A, B, C, D, E, F, G, H, I, J]
|
|
281
|
-
```
|
|
282
|
-
|
|
283
|
-
## Best Practices
|
|
284
|
-
|
|
285
|
-
### Group Related Operations
|
|
286
|
-
|
|
287
|
-
```vague
|
|
288
|
-
// Good: related fetches together
|
|
289
|
-
run [FetchOrders, FetchOrderItems, FetchOrderPayments] then ProcessOrders
|
|
290
|
-
|
|
291
|
-
// Avoid: unrelated operations
|
|
292
|
-
run [FetchOrders, SendEmails, CleanupLogs]
|
|
293
|
-
```
|
|
294
|
-
|
|
295
|
-
### Balance Parallelism
|
|
296
|
-
|
|
297
|
-
```vague
|
|
298
|
-
// Good: measured parallelism
|
|
299
|
-
maxConcurrency: 5
|
|
300
|
-
run [A, B, C, D, E, F, G, H] then Merge
|
|
301
|
-
|
|
302
|
-
// Risky: unlimited parallelism
|
|
303
|
-
run [A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P]
|
|
304
|
-
```
|
|
305
|
-
|
|
306
|
-
### Handle Failures Gracefully
|
|
307
|
-
|
|
308
|
-
```vague
|
|
309
|
-
action Merge {
|
|
310
|
-
match {
|
|
311
|
-
length(errors) > 0 -> {
|
|
312
|
-
store { errors: errors, partial: true } -> mergeLog
|
|
313
|
-
// Continue with available data
|
|
314
|
-
},
|
|
315
|
-
_ -> continue
|
|
316
|
-
}
|
|
317
|
-
}
|
|
318
|
-
```
|
|
319
|
-
|
|
320
|
-
## Troubleshooting
|
|
321
|
-
|
|
322
|
-
### Actions Not Running in Parallel
|
|
323
|
-
|
|
324
|
-
Check syntax uses brackets:
|
|
325
|
-
|
|
326
|
-
```vague
|
|
327
|
-
// This is parallel
|
|
328
|
-
run [A, B, C]
|
|
329
|
-
|
|
330
|
-
// This is sequential
|
|
331
|
-
run A then B then C
|
|
332
|
-
```
|
|
333
|
-
|
|
334
|
-
### Race Conditions
|
|
335
|
-
|
|
336
|
-
Use unique keys when writing to shared stores:
|
|
337
|
-
|
|
338
|
-
```vague
|
|
339
|
-
// Good: unique keys
|
|
340
|
-
store response -> shared { key: concat(source, "-", .id) }
|
|
341
|
-
|
|
342
|
-
// Risky: may collide
|
|
343
|
-
store response -> shared { key: .id }
|
|
344
|
-
```
|
|
345
|
-
|
|
346
|
-
### Memory Issues
|
|
347
|
-
|
|
348
|
-
Reduce parallelism or process in batches:
|
|
349
|
-
|
|
350
|
-
```vague
|
|
351
|
-
maxConcurrency: 2
|
|
352
|
-
run [A, B, C, D, E, F]
|
|
353
|
-
```
|