reqon-dsl 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/settings.local.json +31 -0
- package/.claude/skills/api-integration.md +125 -0
- package/.claude/skills/database-schema.md +51 -0
- package/.claude/skills/dsl-design.md +80 -0
- package/.claude/skills/property-testing.md +143 -0
- package/.claude/skills/reqon/SKILL.md +44 -0
- package/.claude/skills/reqon/references/examples.md +206 -0
- package/.claude/skills/reqon/references/syntax.md +263 -0
- package/.claude/skills/vscode-extension.md +113 -0
- package/.github/dependabot.yml +32 -0
- package/.github/pull_request_template.md +21 -0
- package/.github/workflows/ci.yml +174 -0
- package/.github/workflows/release.yml +73 -0
- package/CLAUDE.md +72 -0
- package/CONTRIBUTING.md +161 -0
- package/README.md +235 -0
- package/TODO.md +51 -0
- package/dist/ast/index.d.ts +1 -0
- package/dist/ast/index.js +1 -0
- package/dist/ast/nodes.d.ts +237 -0
- package/dist/ast/nodes.js +12 -0
- package/dist/auth/auth.test.d.ts +1 -0
- package/dist/auth/auth.test.js +255 -0
- package/dist/auth/circuit-breaker.d.ts +115 -0
- package/dist/auth/circuit-breaker.js +267 -0
- package/dist/auth/credentials.d.ts +91 -0
- package/dist/auth/credentials.js +169 -0
- package/dist/auth/index.d.ts +5 -0
- package/dist/auth/index.js +8 -0
- package/dist/auth/oauth2-provider.d.ts +41 -0
- package/dist/auth/oauth2-provider.js +131 -0
- package/dist/auth/rate-limiter.d.ts +61 -0
- package/dist/auth/rate-limiter.js +380 -0
- package/dist/auth/token-store.d.ts +30 -0
- package/dist/auth/token-store.js +148 -0
- package/dist/auth/types.d.ts +142 -0
- package/dist/auth/types.js +1 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.js +270 -0
- package/dist/errors/errors.test.d.ts +1 -0
- package/dist/errors/errors.test.js +165 -0
- package/dist/errors/index.d.ts +83 -0
- package/dist/errors/index.js +159 -0
- package/dist/execution/execution.test.d.ts +1 -0
- package/dist/execution/execution.test.js +246 -0
- package/dist/execution/index.d.ts +4 -0
- package/dist/execution/index.js +2 -0
- package/dist/execution/state.d.ts +136 -0
- package/dist/execution/state.js +82 -0
- package/dist/execution/store.d.ts +52 -0
- package/dist/execution/store.js +120 -0
- package/dist/index.d.ts +27 -0
- package/dist/index.js +57 -0
- package/dist/integration.test.d.ts +1 -0
- package/dist/integration.test.js +168 -0
- package/dist/interpreter/context.d.ts +15 -0
- package/dist/interpreter/context.js +29 -0
- package/dist/interpreter/evaluator.d.ts +5 -0
- package/dist/interpreter/evaluator.js +223 -0
- package/dist/interpreter/evaluator.test.d.ts +1 -0
- package/dist/interpreter/evaluator.test.js +512 -0
- package/dist/interpreter/executor.d.ts +131 -0
- package/dist/interpreter/executor.js +663 -0
- package/dist/interpreter/fetch-handler.d.ts +43 -0
- package/dist/interpreter/fetch-handler.js +203 -0
- package/dist/interpreter/http.d.ts +57 -0
- package/dist/interpreter/http.js +210 -0
- package/dist/interpreter/http.test.d.ts +1 -0
- package/dist/interpreter/http.test.js +299 -0
- package/dist/interpreter/index.d.ts +7 -0
- package/dist/interpreter/index.js +7 -0
- package/dist/interpreter/pagination.d.ts +63 -0
- package/dist/interpreter/pagination.js +155 -0
- package/dist/interpreter/progress.test.d.ts +1 -0
- package/dist/interpreter/progress.test.js +216 -0
- package/dist/interpreter/schema-matcher.d.ts +16 -0
- package/dist/interpreter/schema-matcher.js +136 -0
- package/dist/interpreter/schema-matcher.test.d.ts +1 -0
- package/dist/interpreter/schema-matcher.test.js +122 -0
- package/dist/interpreter/signals.d.ts +57 -0
- package/dist/interpreter/signals.js +73 -0
- package/dist/interpreter/step-handlers/for-handler.d.ts +17 -0
- package/dist/interpreter/step-handlers/for-handler.js +51 -0
- package/dist/interpreter/step-handlers/index.d.ts +8 -0
- package/dist/interpreter/step-handlers/index.js +8 -0
- package/dist/interpreter/step-handlers/map-handler.d.ts +10 -0
- package/dist/interpreter/step-handlers/map-handler.js +20 -0
- package/dist/interpreter/step-handlers/match-handler.d.ts +27 -0
- package/dist/interpreter/step-handlers/match-handler.js +61 -0
- package/dist/interpreter/step-handlers/store-handler.d.ts +13 -0
- package/dist/interpreter/step-handlers/store-handler.js +66 -0
- package/dist/interpreter/step-handlers/types.d.ts +15 -0
- package/dist/interpreter/step-handlers/types.js +1 -0
- package/dist/interpreter/step-handlers/validate-handler.d.ts +10 -0
- package/dist/interpreter/step-handlers/validate-handler.js +26 -0
- package/dist/interpreter/step-handlers/webhook-handler.d.ts +36 -0
- package/dist/interpreter/step-handlers/webhook-handler.js +104 -0
- package/dist/lexer/index.d.ts +10 -0
- package/dist/lexer/index.js +12 -0
- package/dist/lexer/lexer.d.ts +24 -0
- package/dist/lexer/lexer.js +264 -0
- package/dist/lexer/lexer.test.d.ts +1 -0
- package/dist/lexer/lexer.test.js +259 -0
- package/dist/lexer/tokens.d.ts +69 -0
- package/dist/lexer/tokens.js +146 -0
- package/dist/loader/index.d.ts +36 -0
- package/dist/loader/index.js +220 -0
- package/dist/loader/loader.test.d.ts +1 -0
- package/dist/loader/loader.test.js +287 -0
- package/dist/oas/index.d.ts +4 -0
- package/dist/oas/index.js +2 -0
- package/dist/oas/loader.d.ts +21 -0
- package/dist/oas/loader.js +82 -0
- package/dist/oas/oas.test.d.ts +1 -0
- package/dist/oas/oas.test.js +218 -0
- package/dist/oas/validator.d.ts +12 -0
- package/dist/oas/validator.js +227 -0
- package/dist/parser/base.d.ts +33 -0
- package/dist/parser/base.js +97 -0
- package/dist/parser/expressions.d.ts +27 -0
- package/dist/parser/expressions.js +248 -0
- package/dist/parser/expressions.test.d.ts +1 -0
- package/dist/parser/expressions.test.js +378 -0
- package/dist/parser/index.d.ts +3 -0
- package/dist/parser/index.js +3 -0
- package/dist/parser/match.test.d.ts +1 -0
- package/dist/parser/match.test.js +254 -0
- package/dist/parser/parser.d.ts +68 -0
- package/dist/parser/parser.js +1229 -0
- package/dist/parser/parser.test.d.ts +1 -0
- package/dist/parser/parser.test.js +333 -0
- package/dist/parser/schedule.test.d.ts +1 -0
- package/dist/parser/schedule.test.js +241 -0
- package/dist/plugin.d.ts +35 -0
- package/dist/plugin.js +68 -0
- package/dist/scheduler/cron-parser.d.ts +32 -0
- package/dist/scheduler/cron-parser.js +198 -0
- package/dist/scheduler/cron-parser.test.d.ts +1 -0
- package/dist/scheduler/cron-parser.test.js +188 -0
- package/dist/scheduler/index.d.ts +3 -0
- package/dist/scheduler/index.js +2 -0
- package/dist/scheduler/scheduler.d.ts +81 -0
- package/dist/scheduler/scheduler.js +376 -0
- package/dist/scheduler/types.d.ts +65 -0
- package/dist/scheduler/types.js +1 -0
- package/dist/stores/factory.d.ts +36 -0
- package/dist/stores/factory.js +73 -0
- package/dist/stores/file.d.ts +60 -0
- package/dist/stores/file.js +173 -0
- package/dist/stores/file.test.d.ts +1 -0
- package/dist/stores/file.test.js +165 -0
- package/dist/stores/index.d.ts +6 -0
- package/dist/stores/index.js +5 -0
- package/dist/stores/memory.d.ts +19 -0
- package/dist/stores/memory.js +51 -0
- package/dist/stores/memory.test.d.ts +1 -0
- package/dist/stores/memory.test.js +157 -0
- package/dist/stores/postgrest.d.ts +55 -0
- package/dist/stores/postgrest.js +217 -0
- package/dist/stores/stores.test.d.ts +1 -0
- package/dist/stores/stores.test.js +158 -0
- package/dist/stores/types.d.ts +31 -0
- package/dist/stores/types.js +26 -0
- package/dist/sync/index.d.ts +4 -0
- package/dist/sync/index.js +2 -0
- package/dist/sync/state.d.ts +69 -0
- package/dist/sync/state.js +66 -0
- package/dist/sync/store.d.ts +49 -0
- package/dist/sync/store.js +93 -0
- package/dist/sync/sync.test.d.ts +1 -0
- package/dist/sync/sync.test.js +221 -0
- package/dist/utils/async.d.ts +7 -0
- package/dist/utils/async.js +9 -0
- package/dist/utils/file.d.ts +38 -0
- package/dist/utils/file.js +92 -0
- package/dist/utils/index.d.ts +4 -0
- package/dist/utils/index.js +4 -0
- package/dist/utils/logger.d.ts +34 -0
- package/dist/utils/logger.js +39 -0
- package/dist/utils/path.d.ts +12 -0
- package/dist/utils/path.js +41 -0
- package/dist/webhook/index.d.ts +8 -0
- package/dist/webhook/index.js +7 -0
- package/dist/webhook/server.d.ts +84 -0
- package/dist/webhook/server.js +319 -0
- package/dist/webhook/store.d.ts +67 -0
- package/dist/webhook/store.js +193 -0
- package/dist/webhook/types.d.ts +88 -0
- package/dist/webhook/types.js +6 -0
- package/docusaurus/README.md +41 -0
- package/docusaurus/docs/advanced/execution-state.md +283 -0
- package/docusaurus/docs/advanced/extending-reqon.md +388 -0
- package/docusaurus/docs/advanced/multi-file-missions.md +250 -0
- package/docusaurus/docs/advanced/parallel-execution.md +353 -0
- package/docusaurus/docs/api-reference.md +443 -0
- package/docusaurus/docs/authentication/api-key.md +339 -0
- package/docusaurus/docs/authentication/basic.md +276 -0
- package/docusaurus/docs/authentication/bearer.md +282 -0
- package/docusaurus/docs/authentication/oauth2.md +317 -0
- package/docusaurus/docs/authentication/overview.md +251 -0
- package/docusaurus/docs/cli.md +229 -0
- package/docusaurus/docs/core-concepts/actions.md +286 -0
- package/docusaurus/docs/core-concepts/missions.md +264 -0
- package/docusaurus/docs/core-concepts/schemas.md +353 -0
- package/docusaurus/docs/core-concepts/sources.md +339 -0
- package/docusaurus/docs/core-concepts/stores.md +332 -0
- package/docusaurus/docs/dsl-syntax/expressions.md +361 -0
- package/docusaurus/docs/dsl-syntax/fetch.md +293 -0
- package/docusaurus/docs/dsl-syntax/for-loops.md +324 -0
- package/docusaurus/docs/dsl-syntax/map.md +345 -0
- package/docusaurus/docs/dsl-syntax/match.md +387 -0
- package/docusaurus/docs/dsl-syntax/pipelines.md +397 -0
- package/docusaurus/docs/dsl-syntax/validate.md +401 -0
- package/docusaurus/docs/error-handling/dead-letter-queues.md +399 -0
- package/docusaurus/docs/error-handling/flow-control.md +337 -0
- package/docusaurus/docs/error-handling/retry-strategies.md +368 -0
- package/docusaurus/docs/examples.md +488 -0
- package/docusaurus/docs/getting-started.md +256 -0
- package/docusaurus/docs/http/circuit-breaker.md +401 -0
- package/docusaurus/docs/http/incremental-sync.md +394 -0
- package/docusaurus/docs/http/pagination.md +361 -0
- package/docusaurus/docs/http/rate-limiting.md +383 -0
- package/docusaurus/docs/http/requests.md +328 -0
- package/docusaurus/docs/http/retry.md +402 -0
- package/docusaurus/docs/intro.md +90 -0
- package/docusaurus/docs/openapi/loading-specs.md +305 -0
- package/docusaurus/docs/openapi/operation-calls.md +314 -0
- package/docusaurus/docs/openapi/overview.md +212 -0
- package/docusaurus/docs/openapi/response-validation.md +344 -0
- package/docusaurus/docs/scheduling/cron.md +305 -0
- package/docusaurus/docs/scheduling/daemon-mode.md +317 -0
- package/docusaurus/docs/scheduling/intervals.md +289 -0
- package/docusaurus/docs/scheduling/overview.md +231 -0
- package/docusaurus/docs/stores/custom-adapters.md +376 -0
- package/docusaurus/docs/stores/file.md +236 -0
- package/docusaurus/docs/stores/memory.md +193 -0
- package/docusaurus/docs/stores/overview.md +274 -0
- package/docusaurus/docs/stores/postgrest.md +316 -0
- package/docusaurus/docusaurus.config.ts +148 -0
- package/docusaurus/package-lock.json +18029 -0
- package/docusaurus/package.json +47 -0
- package/docusaurus/sidebars.ts +155 -0
- package/docusaurus/src/components/HomepageFeatures/index.tsx +105 -0
- package/docusaurus/src/components/HomepageFeatures/styles.module.css +12 -0
- package/docusaurus/src/css/custom.css +169 -0
- package/docusaurus/src/pages/index.module.css +48 -0
- package/docusaurus/src/pages/index.tsx +110 -0
- package/docusaurus/src/pages/markdown-page.md +7 -0
- 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 +10 -0
- package/docusaurus/static/img/undraw_docusaurus_mountain.svg +171 -0
- package/docusaurus/static/img/undraw_docusaurus_react.svg +170 -0
- package/docusaurus/static/img/undraw_docusaurus_tree.svg +40 -0
- package/docusaurus/tsconfig.json +8 -0
- package/examples/README.md +112 -0
- package/examples/error-handling/README.md +150 -0
- package/examples/error-handling/payment-processor.vague +287 -0
- package/examples/github-sync/README.md +74 -0
- package/examples/github-sync/fetch-issues.vague +47 -0
- package/examples/github-sync/fetch-prs.vague +40 -0
- package/examples/github-sync/mission.vague +101 -0
- package/examples/github-sync/normalize.vague +70 -0
- package/examples/jsonplaceholder/README.md +28 -0
- package/examples/jsonplaceholder/posts.vague +48 -0
- package/examples/petstore/README.md +35 -0
- package/examples/petstore/openapi.yaml +97 -0
- package/examples/petstore/sync.vague +52 -0
- package/examples/temporal-comparison/README.md +297 -0
- package/examples/temporal-comparison/reconciliation.vague +355 -0
- package/examples/temporal-comparison/temporal/activities/index.ts +8 -0
- package/examples/temporal-comparison/temporal/activities/shipstation.ts +225 -0
- package/examples/temporal-comparison/temporal/activities/shopify.ts +257 -0
- package/examples/temporal-comparison/temporal/activities/storage.ts +198 -0
- package/examples/temporal-comparison/temporal/activities/stripe.ts +169 -0
- package/examples/temporal-comparison/temporal/activities/validation.ts +205 -0
- package/examples/temporal-comparison/temporal/client/schedule.ts +218 -0
- package/examples/temporal-comparison/temporal/config/retry.ts +63 -0
- package/examples/temporal-comparison/temporal/types/index.ts +129 -0
- package/examples/temporal-comparison/temporal/workers/main.ts +130 -0
- package/examples/temporal-comparison/temporal/workflows/orderReconciliation.ts +262 -0
- package/examples/xero/README.md +88 -0
- package/examples/xero/invoices.vague +189 -0
- package/package.json +40 -0
- package/src/api-integration.test.ts +954 -0
- package/src/ast/index.ts +1 -0
- package/src/ast/nodes.ts +310 -0
- package/src/auth/auth.test.ts +326 -0
- package/src/auth/circuit-breaker.test.ts +390 -0
- package/src/auth/circuit-breaker.ts +379 -0
- package/src/auth/credentials.test.ts +273 -0
- package/src/auth/credentials.ts +246 -0
- package/src/auth/index.ts +40 -0
- package/src/auth/oauth2-provider.ts +177 -0
- package/src/auth/rate-limiter.ts +459 -0
- package/src/auth/token-store.ts +177 -0
- package/src/auth/types.ts +159 -0
- package/src/benchmark/e2e.bench.ts +288 -0
- package/src/benchmark/evaluator.bench.ts +331 -0
- package/src/benchmark/fixtures.ts +295 -0
- package/src/benchmark/index.ts +108 -0
- package/src/benchmark/lexer.bench.ts +69 -0
- package/src/benchmark/parser.bench.ts +103 -0
- package/src/benchmark/resilience.bench.ts +193 -0
- package/src/benchmark/store.bench.ts +147 -0
- package/src/benchmark/utils.ts +230 -0
- package/src/cli.ts +313 -0
- package/src/errors/errors.test.ts +234 -0
- package/src/errors/index.ts +223 -0
- package/src/execution/execution.test.ts +307 -0
- package/src/execution/index.ts +21 -0
- package/src/execution/state.ts +207 -0
- package/src/execution/store.ts +188 -0
- package/src/index.ts +169 -0
- package/src/integration.test.ts +192 -0
- package/src/interpreter/context.ts +57 -0
- package/src/interpreter/evaluator.test.ts +796 -0
- package/src/interpreter/evaluator.ts +245 -0
- package/src/interpreter/executor.ts +946 -0
- package/src/interpreter/fetch-handler.ts +302 -0
- package/src/interpreter/http.test.ts +423 -0
- package/src/interpreter/http.ts +308 -0
- package/src/interpreter/index.ts +32 -0
- package/src/interpreter/pagination.ts +207 -0
- package/src/interpreter/progress.test.ts +276 -0
- package/src/interpreter/schema-matcher.test.ts +160 -0
- package/src/interpreter/schema-matcher.ts +168 -0
- package/src/interpreter/signals.ts +73 -0
- package/src/interpreter/step-handlers/for-handler.ts +65 -0
- package/src/interpreter/step-handlers/index.ts +17 -0
- package/src/interpreter/step-handlers/map-handler.ts +24 -0
- package/src/interpreter/step-handlers/match-handler.ts +101 -0
- package/src/interpreter/step-handlers/store-handler.ts +78 -0
- package/src/interpreter/step-handlers/types.ts +17 -0
- package/src/interpreter/step-handlers/validate-handler.ts +30 -0
- package/src/interpreter/step-handlers/webhook-handler.ts +142 -0
- package/src/lexer/index.ts +18 -0
- package/src/lexer/lexer.test.ts +316 -0
- package/src/lexer/tokens.ts +179 -0
- package/src/loader/index.ts +288 -0
- package/src/loader/loader.test.ts +360 -0
- package/src/oas/index.ts +4 -0
- package/src/oas/loader.ts +126 -0
- package/src/oas/oas.test.ts +254 -0
- package/src/oas/validator.ts +299 -0
- package/src/parser/base.ts +124 -0
- package/src/parser/expressions.test.ts +525 -0
- package/src/parser/expressions.ts +314 -0
- package/src/parser/index.ts +3 -0
- package/src/parser/match.test.ts +296 -0
- package/src/parser/parser.test.ts +739 -0
- package/src/parser/parser.ts +1469 -0
- package/src/parser/schedule.test.ts +287 -0
- package/src/parser/webhook.test.ts +248 -0
- package/src/plugin.ts +83 -0
- package/src/scheduler/cron-parser.test.ts +236 -0
- package/src/scheduler/cron-parser.ts +236 -0
- package/src/scheduler/index.ts +10 -0
- package/src/scheduler/scheduler.ts +443 -0
- package/src/scheduler/types.ts +71 -0
- package/src/stores/factory.ts +104 -0
- package/src/stores/file.test.ts +276 -0
- package/src/stores/file.ts +211 -0
- package/src/stores/index.ts +6 -0
- package/src/stores/memory.test.ts +238 -0
- package/src/stores/memory.ts +63 -0
- package/src/stores/postgrest.test.ts +488 -0
- package/src/stores/postgrest.ts +263 -0
- package/src/stores/stores.test.ts +197 -0
- package/src/stores/types.ts +58 -0
- package/src/sync/index.ts +16 -0
- package/src/sync/state.ts +126 -0
- package/src/sync/store.ts +139 -0
- package/src/sync/sync.test.ts +271 -0
- package/src/utils/async.ts +10 -0
- package/src/utils/file.ts +106 -0
- package/src/utils/index.ts +14 -0
- package/src/utils/logger.ts +53 -0
- package/src/utils/path.ts +47 -0
- package/src/webhook/index.ts +15 -0
- package/src/webhook/server.test.ts +253 -0
- package/src/webhook/server.ts +389 -0
- package/src/webhook/store.ts +239 -0
- package/src/webhook/types.ts +93 -0
- package/tsconfig.json +17 -0
- package/vitest.config.ts +39 -0
|
@@ -0,0 +1,263 @@
|
|
|
1
|
+
# Reqon DSL Syntax Reference
|
|
2
|
+
|
|
3
|
+
## Mission Structure
|
|
4
|
+
|
|
5
|
+
```
|
|
6
|
+
mission MissionName {
|
|
7
|
+
// Sources (API connections)
|
|
8
|
+
source SourceName { ... }
|
|
9
|
+
|
|
10
|
+
// Stores (data persistence)
|
|
11
|
+
store storeName: type("identifier")
|
|
12
|
+
|
|
13
|
+
// Schemas (type definitions)
|
|
14
|
+
schema SchemaName { ... }
|
|
15
|
+
|
|
16
|
+
// Actions (pipeline steps)
|
|
17
|
+
action ActionName { ... }
|
|
18
|
+
|
|
19
|
+
// Pipeline execution
|
|
20
|
+
run ActionA then ActionB
|
|
21
|
+
}
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
## Sources
|
|
25
|
+
|
|
26
|
+
### Authentication Types
|
|
27
|
+
|
|
28
|
+
```
|
|
29
|
+
// Bearer token (from env var)
|
|
30
|
+
source API {
|
|
31
|
+
auth: bearer,
|
|
32
|
+
base: "https://api.example.com",
|
|
33
|
+
headers: { "Accept": "application/json" }
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
// API key
|
|
37
|
+
source API {
|
|
38
|
+
auth: api_key,
|
|
39
|
+
base: "https://api.example.com"
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
// Basic auth
|
|
43
|
+
source API {
|
|
44
|
+
auth: basic,
|
|
45
|
+
base: "https://api.example.com"
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
// OAuth2
|
|
49
|
+
source API {
|
|
50
|
+
auth: oauth2,
|
|
51
|
+
base: "https://api.example.com",
|
|
52
|
+
oauth: {
|
|
53
|
+
tokenUrl: "https://auth.example.com/token",
|
|
54
|
+
clientId: env("CLIENT_ID"),
|
|
55
|
+
clientSecret: env("CLIENT_SECRET"),
|
|
56
|
+
scopes: ["read", "write"]
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
### Rate Limiting
|
|
62
|
+
|
|
63
|
+
```
|
|
64
|
+
source API {
|
|
65
|
+
auth: bearer,
|
|
66
|
+
base: "https://api.example.com",
|
|
67
|
+
rateLimit: {
|
|
68
|
+
strategy: "pause", // or "queue"
|
|
69
|
+
maxWait: 60, // seconds
|
|
70
|
+
fallbackRpm: 60 // requests per minute fallback
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
## Stores
|
|
76
|
+
|
|
77
|
+
```
|
|
78
|
+
store items: memory("items") // In-memory
|
|
79
|
+
store items: file("./data/items.json") // File-based
|
|
80
|
+
store items: sql("items_table") // SQL database
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
## Schemas
|
|
84
|
+
|
|
85
|
+
```
|
|
86
|
+
schema User {
|
|
87
|
+
id: int,
|
|
88
|
+
name: string,
|
|
89
|
+
email: string?, // Optional field
|
|
90
|
+
created_at: date,
|
|
91
|
+
tags: array,
|
|
92
|
+
metadata: object
|
|
93
|
+
}
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
Supported types: `int`, `string`, `boolean`, `decimal`, `date`, `array`, `object`
|
|
97
|
+
|
|
98
|
+
## HTTP Operations
|
|
99
|
+
|
|
100
|
+
### Basic Fetch
|
|
101
|
+
|
|
102
|
+
```
|
|
103
|
+
get "/users"
|
|
104
|
+
post "/users" { body: { "name": "John" } }
|
|
105
|
+
put "/users/{id}" { body: { "name": "Jane" } }
|
|
106
|
+
delete "/users/{id}"
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
### Full Options
|
|
110
|
+
|
|
111
|
+
```
|
|
112
|
+
get "/users" {
|
|
113
|
+
source: APISource,
|
|
114
|
+
body: { "status": "active" },
|
|
115
|
+
headers: { "X-Custom": "value" },
|
|
116
|
+
|
|
117
|
+
// Pagination
|
|
118
|
+
paginate: page(page, 100), // Page-based
|
|
119
|
+
paginate: cursor(.next_cursor), // Cursor-based
|
|
120
|
+
paginate: offset(offset, 50), // Offset-based
|
|
121
|
+
|
|
122
|
+
until: length(response) == 0, // Stop condition
|
|
123
|
+
|
|
124
|
+
// Retry configuration
|
|
125
|
+
retry: {
|
|
126
|
+
maxAttempts: 3,
|
|
127
|
+
backoff: "exponential", // or "constant", "linear"
|
|
128
|
+
initialDelay: 1000, // ms
|
|
129
|
+
maxDelay: 60000 // ms
|
|
130
|
+
},
|
|
131
|
+
|
|
132
|
+
// Incremental sync
|
|
133
|
+
since: lastSync
|
|
134
|
+
}
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
## Pattern Matching
|
|
138
|
+
|
|
139
|
+
```
|
|
140
|
+
match response {
|
|
141
|
+
// Match array of schema type
|
|
142
|
+
[UserSchema] -> { store response -> users { key: .id } },
|
|
143
|
+
|
|
144
|
+
// Match single schema type
|
|
145
|
+
ErrorSchema -> abort "API error",
|
|
146
|
+
|
|
147
|
+
// Match with condition
|
|
148
|
+
_ where .status == "rate_limited" -> retry { maxAttempts: 3 },
|
|
149
|
+
|
|
150
|
+
// Wildcard
|
|
151
|
+
_ -> skip
|
|
152
|
+
}
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
## Loops and Iteration
|
|
156
|
+
|
|
157
|
+
```
|
|
158
|
+
// Basic loop
|
|
159
|
+
for user in users {
|
|
160
|
+
// process each user
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
// Loop with filter
|
|
164
|
+
for user in users where .active == true {
|
|
165
|
+
// process only active users
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
// Loop with complex filter
|
|
169
|
+
for item in items where .status == "pending" and .priority > 5 {
|
|
170
|
+
// process filtered items
|
|
171
|
+
}
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
## Mapping
|
|
175
|
+
|
|
176
|
+
```
|
|
177
|
+
map input -> OutputSchema {
|
|
178
|
+
id: .id,
|
|
179
|
+
fullName: .firstName + " " + .lastName,
|
|
180
|
+
status: match .state {
|
|
181
|
+
"active" => "enabled",
|
|
182
|
+
"inactive" => "disabled",
|
|
183
|
+
_ => "unknown"
|
|
184
|
+
},
|
|
185
|
+
createdAt: .created_at,
|
|
186
|
+
tags: .labels
|
|
187
|
+
}
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
## Validation
|
|
191
|
+
|
|
192
|
+
```
|
|
193
|
+
validate response {
|
|
194
|
+
assume length(.name) > 0
|
|
195
|
+
assume .age >= 0
|
|
196
|
+
assume .email contains "@"
|
|
197
|
+
}
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
## Store Operations
|
|
201
|
+
|
|
202
|
+
```
|
|
203
|
+
// Basic store
|
|
204
|
+
store response -> items { key: .id }
|
|
205
|
+
|
|
206
|
+
// Upsert mode
|
|
207
|
+
store response -> items { key: .id, upsert: true }
|
|
208
|
+
|
|
209
|
+
// Partial update
|
|
210
|
+
store response -> items { key: .id, partial: true }
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
## Pipeline Execution
|
|
214
|
+
|
|
215
|
+
```
|
|
216
|
+
// Sequential
|
|
217
|
+
run ActionA then ActionB then ActionC
|
|
218
|
+
|
|
219
|
+
// Parallel then sequential
|
|
220
|
+
run [ActionA, ActionB] then ActionC
|
|
221
|
+
|
|
222
|
+
// Multiple parallel groups
|
|
223
|
+
run [ActionA, ActionB] then [ActionC, ActionD] then ActionE
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
## Flow Control Directives
|
|
227
|
+
|
|
228
|
+
| Directive | Description |
|
|
229
|
+
|-----------|-------------|
|
|
230
|
+
| `continue` | Proceed to next step |
|
|
231
|
+
| `skip` | Skip current loop item |
|
|
232
|
+
| `abort "msg"` | Stop mission with error |
|
|
233
|
+
| `retry {...}` | Retry current operation |
|
|
234
|
+
| `queue storeName` | Send to dead letter queue |
|
|
235
|
+
| `jump ActionName then retry` | Execute action then retry |
|
|
236
|
+
|
|
237
|
+
## Built-in Functions
|
|
238
|
+
|
|
239
|
+
- `length(array)` - Array length
|
|
240
|
+
- `now()` - Current timestamp
|
|
241
|
+
- `env("VAR_NAME")` - Environment variable
|
|
242
|
+
- `exists(store[key])` - Check if key exists in store
|
|
243
|
+
|
|
244
|
+
## Expressions
|
|
245
|
+
|
|
246
|
+
```
|
|
247
|
+
// Arithmetic
|
|
248
|
+
.price * .quantity
|
|
249
|
+
.total + .tax
|
|
250
|
+
|
|
251
|
+
// String concatenation
|
|
252
|
+
.firstName + " " + .lastName
|
|
253
|
+
"prefix_" + .id
|
|
254
|
+
|
|
255
|
+
// Comparisons
|
|
256
|
+
.age >= 18
|
|
257
|
+
.status == "active"
|
|
258
|
+
.count > 0 and .count < 100
|
|
259
|
+
|
|
260
|
+
// Property access
|
|
261
|
+
.user.name
|
|
262
|
+
.items[0].id
|
|
263
|
+
```
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
# VS Code Extension Skill
|
|
2
|
+
|
|
3
|
+
Use this skill when creating or enhancing VS Code support for Reqon's `.vague` files.
|
|
4
|
+
|
|
5
|
+
## Capabilities
|
|
6
|
+
|
|
7
|
+
### TextMate Grammar
|
|
8
|
+
Create syntax highlighting for `.vague` files:
|
|
9
|
+
- Keywords: mission, source, store, action, fetch, map, validate, run, then, for, in, where, match, assume
|
|
10
|
+
- Auth types: oauth2, bearer, basic, api_key
|
|
11
|
+
- Store types: memory, sql, nosql
|
|
12
|
+
- Operators: ->, =, :, |
|
|
13
|
+
- Strings, numbers, identifiers
|
|
14
|
+
- Comments
|
|
15
|
+
|
|
16
|
+
### Language Server Protocol (LSP)
|
|
17
|
+
Implement language intelligence:
|
|
18
|
+
- Syntax error diagnostics
|
|
19
|
+
- Hover information for keywords
|
|
20
|
+
- Go to definition for actions/missions
|
|
21
|
+
- Autocomplete for keywords and identifiers
|
|
22
|
+
- Document symbols outline
|
|
23
|
+
|
|
24
|
+
### Snippet Generation
|
|
25
|
+
Create snippets for common patterns:
|
|
26
|
+
- Mission template
|
|
27
|
+
- Source definition
|
|
28
|
+
- Store definition
|
|
29
|
+
- Fetch with pagination
|
|
30
|
+
- Map transformation
|
|
31
|
+
- Validate block
|
|
32
|
+
|
|
33
|
+
## Context Files
|
|
34
|
+
When using this skill, read:
|
|
35
|
+
- `src/lexer/tokens.ts` - All token types and keywords
|
|
36
|
+
- `src/ast/nodes.ts` - AST structure for symbols
|
|
37
|
+
- `src/parser/parser.ts` - Syntax rules
|
|
38
|
+
|
|
39
|
+
## Implementation Patterns
|
|
40
|
+
|
|
41
|
+
### TextMate Grammar Structure
|
|
42
|
+
```json
|
|
43
|
+
{
|
|
44
|
+
"name": "Vague",
|
|
45
|
+
"scopeName": "source.vague",
|
|
46
|
+
"fileTypes": ["vague"],
|
|
47
|
+
"patterns": [
|
|
48
|
+
{ "include": "#keywords" },
|
|
49
|
+
{ "include": "#strings" },
|
|
50
|
+
{ "include": "#comments" }
|
|
51
|
+
],
|
|
52
|
+
"repository": {
|
|
53
|
+
"keywords": {
|
|
54
|
+
"match": "\\b(mission|source|store|action|fetch|map|validate|run|then|for|in|where|match|assume)\\b",
|
|
55
|
+
"name": "keyword.control.vague"
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
### Extension package.json
|
|
62
|
+
```json
|
|
63
|
+
{
|
|
64
|
+
"name": "vague-vscode",
|
|
65
|
+
"displayName": "Vague",
|
|
66
|
+
"contributes": {
|
|
67
|
+
"languages": [{
|
|
68
|
+
"id": "vague",
|
|
69
|
+
"extensions": [".vague"],
|
|
70
|
+
"configuration": "./language-configuration.json"
|
|
71
|
+
}],
|
|
72
|
+
"grammars": [{
|
|
73
|
+
"language": "vague",
|
|
74
|
+
"scopeName": "source.vague",
|
|
75
|
+
"path": "./syntaxes/vague.tmLanguage.json"
|
|
76
|
+
}]
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
### Snippet Format
|
|
82
|
+
```json
|
|
83
|
+
{
|
|
84
|
+
"Mission": {
|
|
85
|
+
"prefix": "mission",
|
|
86
|
+
"body": [
|
|
87
|
+
"mission ${1:Name} {",
|
|
88
|
+
" source ${2:api} {",
|
|
89
|
+
" url: \"${3:https://api.example.com}\"",
|
|
90
|
+
" auth: ${4:bearer} { token: \"${5:\\$API_TOKEN}\" }",
|
|
91
|
+
" }",
|
|
92
|
+
"",
|
|
93
|
+
" action ${6:FetchData} {",
|
|
94
|
+
" fetch ${7:/endpoint}",
|
|
95
|
+
" }",
|
|
96
|
+
"}"
|
|
97
|
+
]
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
## Directory Structure
|
|
103
|
+
```
|
|
104
|
+
vague-vscode/
|
|
105
|
+
├── package.json
|
|
106
|
+
├── language-configuration.json
|
|
107
|
+
├── syntaxes/
|
|
108
|
+
│ └── vague.tmLanguage.json
|
|
109
|
+
├── snippets/
|
|
110
|
+
│ └── vague.json
|
|
111
|
+
└── src/
|
|
112
|
+
└── extension.ts # LSP client
|
|
113
|
+
```
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
version: 2
|
|
2
|
+
updates:
|
|
3
|
+
# npm dependencies
|
|
4
|
+
- package-ecosystem: "npm"
|
|
5
|
+
directory: "/"
|
|
6
|
+
schedule:
|
|
7
|
+
interval: "weekly"
|
|
8
|
+
day: "monday"
|
|
9
|
+
open-pull-requests-limit: 10
|
|
10
|
+
commit-message:
|
|
11
|
+
prefix: "deps"
|
|
12
|
+
groups:
|
|
13
|
+
dev-dependencies:
|
|
14
|
+
dependency-type: "development"
|
|
15
|
+
patterns:
|
|
16
|
+
- "*"
|
|
17
|
+
production-dependencies:
|
|
18
|
+
dependency-type: "production"
|
|
19
|
+
patterns:
|
|
20
|
+
- "*"
|
|
21
|
+
exclude-patterns:
|
|
22
|
+
- "vague-lang"
|
|
23
|
+
|
|
24
|
+
# GitHub Actions
|
|
25
|
+
- package-ecosystem: "github-actions"
|
|
26
|
+
directory: "/"
|
|
27
|
+
schedule:
|
|
28
|
+
interval: "weekly"
|
|
29
|
+
day: "monday"
|
|
30
|
+
open-pull-requests-limit: 5
|
|
31
|
+
commit-message:
|
|
32
|
+
prefix: "ci"
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
## Description
|
|
2
|
+
|
|
3
|
+
<!-- Brief description of changes -->
|
|
4
|
+
|
|
5
|
+
## Type of Change
|
|
6
|
+
|
|
7
|
+
- [ ] Bug fix (non-breaking change fixing an issue)
|
|
8
|
+
- [ ] New feature (non-breaking change adding functionality)
|
|
9
|
+
- [ ] Breaking change (fix or feature causing existing functionality to change)
|
|
10
|
+
- [ ] Documentation update
|
|
11
|
+
|
|
12
|
+
## Checklist
|
|
13
|
+
|
|
14
|
+
- [ ] Tests pass locally (`npm run test:run`)
|
|
15
|
+
- [ ] Build succeeds (`npm run build`)
|
|
16
|
+
- [ ] Code follows project conventions
|
|
17
|
+
- [ ] Self-reviewed the changes
|
|
18
|
+
|
|
19
|
+
## Related Issues
|
|
20
|
+
|
|
21
|
+
<!-- Link any related issues: Fixes #123, Closes #456 -->
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
name: CI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [main]
|
|
6
|
+
pull_request:
|
|
7
|
+
branches: [main]
|
|
8
|
+
|
|
9
|
+
concurrency:
|
|
10
|
+
group: ${{ github.workflow }}-${{ github.ref }}
|
|
11
|
+
cancel-in-progress: true
|
|
12
|
+
|
|
13
|
+
jobs:
|
|
14
|
+
test:
|
|
15
|
+
name: Test (Node ${{ matrix.node-version }})
|
|
16
|
+
runs-on: ubuntu-latest
|
|
17
|
+
|
|
18
|
+
strategy:
|
|
19
|
+
fail-fast: false
|
|
20
|
+
matrix:
|
|
21
|
+
node-version: [18, 20, 22]
|
|
22
|
+
|
|
23
|
+
steps:
|
|
24
|
+
- name: Checkout reqon
|
|
25
|
+
uses: actions/checkout@v4
|
|
26
|
+
|
|
27
|
+
- name: Checkout vague dependency
|
|
28
|
+
uses: actions/checkout@v4
|
|
29
|
+
with:
|
|
30
|
+
repository: mcclowes/vague
|
|
31
|
+
path: ../vague
|
|
32
|
+
|
|
33
|
+
- name: Setup Node.js ${{ matrix.node-version }}
|
|
34
|
+
uses: actions/setup-node@v4
|
|
35
|
+
with:
|
|
36
|
+
node-version: ${{ matrix.node-version }}
|
|
37
|
+
cache: 'npm'
|
|
38
|
+
|
|
39
|
+
- name: Install vague dependencies
|
|
40
|
+
run: npm ci
|
|
41
|
+
working-directory: ../vague
|
|
42
|
+
|
|
43
|
+
- name: Build vague
|
|
44
|
+
run: npm run build
|
|
45
|
+
working-directory: ../vague
|
|
46
|
+
|
|
47
|
+
- name: Install dependencies
|
|
48
|
+
run: npm ci
|
|
49
|
+
|
|
50
|
+
- name: Run tests
|
|
51
|
+
run: npm run test:run
|
|
52
|
+
|
|
53
|
+
- name: Build
|
|
54
|
+
run: npm run build
|
|
55
|
+
|
|
56
|
+
coverage:
|
|
57
|
+
name: Coverage
|
|
58
|
+
runs-on: ubuntu-latest
|
|
59
|
+
needs: test
|
|
60
|
+
|
|
61
|
+
steps:
|
|
62
|
+
- name: Checkout reqon
|
|
63
|
+
uses: actions/checkout@v4
|
|
64
|
+
|
|
65
|
+
- name: Checkout vague dependency
|
|
66
|
+
uses: actions/checkout@v4
|
|
67
|
+
with:
|
|
68
|
+
repository: mcclowes/vague
|
|
69
|
+
path: ../vague
|
|
70
|
+
|
|
71
|
+
- name: Setup Node.js
|
|
72
|
+
uses: actions/setup-node@v4
|
|
73
|
+
with:
|
|
74
|
+
node-version: 20
|
|
75
|
+
cache: 'npm'
|
|
76
|
+
|
|
77
|
+
- name: Install vague dependencies
|
|
78
|
+
run: npm ci
|
|
79
|
+
working-directory: ../vague
|
|
80
|
+
|
|
81
|
+
- name: Build vague
|
|
82
|
+
run: npm run build
|
|
83
|
+
working-directory: ../vague
|
|
84
|
+
|
|
85
|
+
- name: Install dependencies
|
|
86
|
+
run: npm ci
|
|
87
|
+
|
|
88
|
+
- name: Run tests with coverage
|
|
89
|
+
run: npm run test:coverage
|
|
90
|
+
|
|
91
|
+
- name: Upload coverage reports
|
|
92
|
+
uses: codecov/codecov-action@v4
|
|
93
|
+
with:
|
|
94
|
+
token: ${{ secrets.CODECOV_TOKEN }}
|
|
95
|
+
directory: ./coverage
|
|
96
|
+
fail_ci_if_error: false
|
|
97
|
+
verbose: true
|
|
98
|
+
|
|
99
|
+
typecheck:
|
|
100
|
+
name: Type Check
|
|
101
|
+
runs-on: ubuntu-latest
|
|
102
|
+
|
|
103
|
+
steps:
|
|
104
|
+
- name: Checkout reqon
|
|
105
|
+
uses: actions/checkout@v4
|
|
106
|
+
|
|
107
|
+
- name: Checkout vague dependency
|
|
108
|
+
uses: actions/checkout@v4
|
|
109
|
+
with:
|
|
110
|
+
repository: mcclowes/vague
|
|
111
|
+
path: ../vague
|
|
112
|
+
|
|
113
|
+
- name: Setup Node.js
|
|
114
|
+
uses: actions/setup-node@v4
|
|
115
|
+
with:
|
|
116
|
+
node-version: 20
|
|
117
|
+
cache: 'npm'
|
|
118
|
+
|
|
119
|
+
- name: Install vague dependencies
|
|
120
|
+
run: npm ci
|
|
121
|
+
working-directory: ../vague
|
|
122
|
+
|
|
123
|
+
- name: Build vague
|
|
124
|
+
run: npm run build
|
|
125
|
+
working-directory: ../vague
|
|
126
|
+
|
|
127
|
+
- name: Install dependencies
|
|
128
|
+
run: npm ci
|
|
129
|
+
|
|
130
|
+
- name: Type check
|
|
131
|
+
run: npx tsc --noEmit
|
|
132
|
+
|
|
133
|
+
benchmark:
|
|
134
|
+
name: Benchmark
|
|
135
|
+
runs-on: ubuntu-latest
|
|
136
|
+
if: github.event_name == 'push' && github.ref == 'refs/heads/main'
|
|
137
|
+
needs: test
|
|
138
|
+
|
|
139
|
+
steps:
|
|
140
|
+
- name: Checkout reqon
|
|
141
|
+
uses: actions/checkout@v4
|
|
142
|
+
|
|
143
|
+
- name: Checkout vague dependency
|
|
144
|
+
uses: actions/checkout@v4
|
|
145
|
+
with:
|
|
146
|
+
repository: mcclowes/vague
|
|
147
|
+
path: ../vague
|
|
148
|
+
|
|
149
|
+
- name: Setup Node.js
|
|
150
|
+
uses: actions/setup-node@v4
|
|
151
|
+
with:
|
|
152
|
+
node-version: 20
|
|
153
|
+
cache: 'npm'
|
|
154
|
+
|
|
155
|
+
- name: Install vague dependencies
|
|
156
|
+
run: npm ci
|
|
157
|
+
working-directory: ../vague
|
|
158
|
+
|
|
159
|
+
- name: Build vague
|
|
160
|
+
run: npm run build
|
|
161
|
+
working-directory: ../vague
|
|
162
|
+
|
|
163
|
+
- name: Install dependencies
|
|
164
|
+
run: npm ci
|
|
165
|
+
|
|
166
|
+
- name: Run benchmarks
|
|
167
|
+
run: npm run bench
|
|
168
|
+
|
|
169
|
+
- name: Upload benchmark results
|
|
170
|
+
uses: actions/upload-artifact@v4
|
|
171
|
+
with:
|
|
172
|
+
name: benchmark-results
|
|
173
|
+
path: benchmark-results.json
|
|
174
|
+
if-no-files-found: ignore
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
name: Release
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
tags:
|
|
6
|
+
- 'v*'
|
|
7
|
+
|
|
8
|
+
permissions:
|
|
9
|
+
contents: write
|
|
10
|
+
id-token: write
|
|
11
|
+
|
|
12
|
+
jobs:
|
|
13
|
+
release:
|
|
14
|
+
name: Release
|
|
15
|
+
runs-on: ubuntu-latest
|
|
16
|
+
|
|
17
|
+
steps:
|
|
18
|
+
- name: Checkout reqon
|
|
19
|
+
uses: actions/checkout@v4
|
|
20
|
+
|
|
21
|
+
- name: Checkout vague dependency
|
|
22
|
+
uses: actions/checkout@v4
|
|
23
|
+
with:
|
|
24
|
+
repository: mcclowes/vague
|
|
25
|
+
path: ../vague
|
|
26
|
+
|
|
27
|
+
- name: Setup Node.js
|
|
28
|
+
uses: actions/setup-node@v4
|
|
29
|
+
with:
|
|
30
|
+
node-version: 20
|
|
31
|
+
cache: 'npm'
|
|
32
|
+
registry-url: 'https://registry.npmjs.org'
|
|
33
|
+
|
|
34
|
+
- name: Install vague dependencies
|
|
35
|
+
run: npm ci
|
|
36
|
+
working-directory: ../vague
|
|
37
|
+
|
|
38
|
+
- name: Build vague
|
|
39
|
+
run: npm run build
|
|
40
|
+
working-directory: ../vague
|
|
41
|
+
|
|
42
|
+
- name: Install dependencies
|
|
43
|
+
run: npm ci
|
|
44
|
+
|
|
45
|
+
- name: Run tests
|
|
46
|
+
run: npm run test:run
|
|
47
|
+
|
|
48
|
+
- name: Build
|
|
49
|
+
run: npm run build
|
|
50
|
+
|
|
51
|
+
- name: Update package.json for publishing
|
|
52
|
+
run: |
|
|
53
|
+
# Replace local file dependency with published version for npm
|
|
54
|
+
# This assumes vague-lang is published to npm
|
|
55
|
+
node -e "
|
|
56
|
+
const pkg = require('./package.json');
|
|
57
|
+
if (pkg.dependencies['vague-lang']?.startsWith('file:')) {
|
|
58
|
+
pkg.dependencies['vague-lang'] = '*';
|
|
59
|
+
}
|
|
60
|
+
require('fs').writeFileSync('./package.json', JSON.stringify(pkg, null, 2));
|
|
61
|
+
"
|
|
62
|
+
|
|
63
|
+
- name: Publish to npm
|
|
64
|
+
run: npm publish --provenance --access public
|
|
65
|
+
env:
|
|
66
|
+
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
|
|
67
|
+
|
|
68
|
+
- name: Create GitHub Release
|
|
69
|
+
uses: softprops/action-gh-release@v2
|
|
70
|
+
with:
|
|
71
|
+
generate_release_notes: true
|
|
72
|
+
draft: false
|
|
73
|
+
prerelease: ${{ contains(github.ref, '-alpha') || contains(github.ref, '-beta') || contains(github.ref, '-rc') }}
|