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.
Files changed (396) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/README.md +22 -0
  3. package/dist/ast/nodes.d.ts +83 -4
  4. package/dist/ast/nodes.js +14 -0
  5. package/dist/auth/circuit-breaker.js +7 -6
  6. package/dist/auth/rate-limiter.d.ts +4 -0
  7. package/dist/auth/rate-limiter.js +9 -16
  8. package/dist/cli.d.ts +13 -0
  9. package/dist/cli.js +84 -4
  10. package/dist/config/constants.d.ts +141 -0
  11. package/dist/config/constants.js +128 -0
  12. package/dist/config/index.d.ts +4 -0
  13. package/dist/config/index.js +4 -0
  14. package/dist/control/index.d.ts +2 -0
  15. package/dist/control/index.js +1 -0
  16. package/dist/control/server.d.ts +88 -0
  17. package/dist/control/server.js +238 -0
  18. package/dist/control/types.d.ts +55 -0
  19. package/dist/control/types.js +7 -0
  20. package/dist/debug/cli-debugger.d.ts +17 -0
  21. package/dist/debug/cli-debugger.js +180 -0
  22. package/dist/debug/controller.d.ts +94 -0
  23. package/dist/debug/controller.js +45 -0
  24. package/dist/debug/index.d.ts +6 -0
  25. package/dist/debug/index.js +5 -0
  26. package/dist/errors/index.d.ts +67 -0
  27. package/dist/errors/index.js +89 -1
  28. package/dist/execution/index.d.ts +1 -1
  29. package/dist/execution/state.d.ts +24 -0
  30. package/dist/index.d.ts +21 -1
  31. package/dist/index.js +33 -2
  32. package/dist/interpreter/context.d.ts +14 -0
  33. package/dist/interpreter/context.js +15 -0
  34. package/dist/interpreter/evaluator.d.ts +63 -1
  35. package/dist/interpreter/evaluator.js +186 -39
  36. package/dist/interpreter/executor.d.ts +70 -14
  37. package/dist/interpreter/executor.js +503 -174
  38. package/dist/interpreter/fetch-handler.d.ts +9 -0
  39. package/dist/interpreter/fetch-handler.js +133 -24
  40. package/dist/interpreter/http.d.ts +5 -0
  41. package/dist/interpreter/http.js +26 -12
  42. package/dist/interpreter/index.d.ts +3 -1
  43. package/dist/interpreter/index.js +2 -0
  44. package/dist/interpreter/pagination.d.ts +11 -2
  45. package/dist/interpreter/pagination.js +95 -31
  46. package/dist/interpreter/signals.d.ts +8 -0
  47. package/dist/interpreter/signals.js +12 -0
  48. package/dist/interpreter/source-manager.d.ts +75 -0
  49. package/dist/interpreter/source-manager.js +157 -0
  50. package/dist/interpreter/step-handlers/apply-handler.d.ts +29 -0
  51. package/dist/interpreter/step-handlers/apply-handler.js +79 -0
  52. package/dist/interpreter/step-handlers/for-handler.d.ts +13 -0
  53. package/dist/interpreter/step-handlers/for-handler.js +71 -4
  54. package/dist/interpreter/step-handlers/index.d.ts +4 -2
  55. package/dist/interpreter/step-handlers/index.js +4 -2
  56. package/dist/interpreter/step-handlers/match-handler.d.ts +9 -0
  57. package/dist/interpreter/step-handlers/match-handler.js +43 -16
  58. package/dist/interpreter/step-handlers/pause-handler.d.ts +52 -0
  59. package/dist/interpreter/step-handlers/pause-handler.js +87 -0
  60. package/dist/interpreter/step-handlers/store-handler.d.ts +11 -1
  61. package/dist/interpreter/step-handlers/store-handler.js +45 -13
  62. package/dist/interpreter/step-handlers/types.d.ts +3 -0
  63. package/dist/interpreter/step-handlers/validate-handler.d.ts +2 -1
  64. package/dist/interpreter/step-handlers/validate-handler.js +4 -2
  65. package/dist/interpreter/step-handlers/webhook-handler.d.ts +3 -0
  66. package/dist/interpreter/step-handlers/webhook-handler.js +18 -2
  67. package/dist/interpreter/store-manager.d.ts +46 -0
  68. package/dist/interpreter/store-manager.js +66 -0
  69. package/dist/lexer/index.d.ts +11 -4
  70. package/dist/lexer/index.js +11 -4
  71. package/dist/lexer/tokens.d.ts +17 -1
  72. package/dist/lexer/tokens.js +36 -0
  73. package/dist/mcp/index.d.ts +11 -0
  74. package/dist/mcp/index.js +11 -0
  75. package/dist/mcp/server.d.ts +17 -0
  76. package/dist/mcp/server.js +451 -0
  77. package/dist/oas/index.d.ts +2 -0
  78. package/dist/oas/index.js +1 -0
  79. package/dist/oas/mock-generator.d.ts +12 -0
  80. package/dist/oas/mock-generator.js +187 -0
  81. package/dist/observability/events.d.ts +244 -0
  82. package/dist/observability/events.js +90 -0
  83. package/dist/observability/index.d.ts +15 -0
  84. package/dist/observability/index.js +12 -0
  85. package/dist/observability/logger.d.ts +106 -0
  86. package/dist/observability/logger.js +259 -0
  87. package/dist/observability/otel.d.ts +135 -0
  88. package/dist/observability/otel.js +386 -0
  89. package/dist/parser/action-parser.d.ts +105 -0
  90. package/dist/parser/action-parser.js +645 -0
  91. package/dist/parser/expressions.d.ts +13 -0
  92. package/dist/parser/expressions.js +72 -2
  93. package/dist/parser/fetch-parser.d.ts +27 -0
  94. package/dist/parser/fetch-parser.js +269 -0
  95. package/dist/parser/index.d.ts +17 -0
  96. package/dist/parser/index.js +17 -0
  97. package/dist/parser/parser.d.ts +44 -46
  98. package/dist/parser/parser.js +122 -1070
  99. package/dist/parser/pipeline-parser.d.ts +12 -0
  100. package/dist/parser/pipeline-parser.js +52 -0
  101. package/dist/parser/schedule-parser.d.ts +7 -0
  102. package/dist/parser/schedule-parser.js +137 -0
  103. package/dist/parser/source-parser.d.ts +9 -0
  104. package/dist/parser/source-parser.js +151 -0
  105. package/dist/pause/index.d.ts +14 -0
  106. package/dist/pause/index.js +11 -0
  107. package/dist/pause/manager.d.ts +118 -0
  108. package/dist/pause/manager.js +245 -0
  109. package/dist/pause/state.d.ts +93 -0
  110. package/dist/pause/state.js +103 -0
  111. package/dist/pause/store.d.ts +61 -0
  112. package/dist/pause/store.js +156 -0
  113. package/dist/plugin.d.ts +9 -12
  114. package/dist/plugin.js +10 -13
  115. package/dist/stores/factory.d.ts +1 -1
  116. package/dist/stores/factory.js +3 -2
  117. package/dist/stores/file.d.ts +26 -0
  118. package/dist/stores/file.js +64 -10
  119. package/dist/stores/index.d.ts +16 -1
  120. package/dist/stores/index.js +16 -1
  121. package/dist/stores/memory.d.ts +4 -0
  122. package/dist/stores/memory.js +11 -0
  123. package/dist/stores/types.d.ts +17 -0
  124. package/dist/stores/types.js +12 -0
  125. package/dist/trace/index.d.ts +16 -0
  126. package/dist/trace/index.js +12 -0
  127. package/dist/trace/recorder.d.ts +71 -0
  128. package/dist/trace/recorder.js +144 -0
  129. package/dist/trace/replay.d.ts +132 -0
  130. package/dist/trace/replay.js +264 -0
  131. package/dist/trace/state.d.ts +102 -0
  132. package/dist/trace/state.js +86 -0
  133. package/dist/trace/store.d.ts +69 -0
  134. package/dist/trace/store.js +225 -0
  135. package/dist/utils/index.d.ts +1 -0
  136. package/dist/utils/index.js +1 -0
  137. package/dist/utils/type-guards.d.ts +58 -0
  138. package/dist/utils/type-guards.js +92 -0
  139. package/dist/webhook/server.js +7 -6
  140. package/package.json +55 -6
  141. package/.claude/settings.local.json +0 -31
  142. package/.claude/skills/api-integration.md +0 -125
  143. package/.claude/skills/database-schema.md +0 -51
  144. package/.claude/skills/dsl-design.md +0 -80
  145. package/.claude/skills/property-testing.md +0 -143
  146. package/.claude/skills/reqon/SKILL.md +0 -44
  147. package/.claude/skills/reqon/references/examples.md +0 -206
  148. package/.claude/skills/reqon/references/syntax.md +0 -263
  149. package/.claude/skills/vscode-extension.md +0 -113
  150. package/.github/dependabot.yml +0 -32
  151. package/.github/pull_request_template.md +0 -21
  152. package/.github/workflows/ci.yml +0 -174
  153. package/.github/workflows/release.yml +0 -73
  154. package/CLAUDE.md +0 -72
  155. package/CONTRIBUTING.md +0 -161
  156. package/TODO.md +0 -51
  157. package/dist/auth/auth.test.d.ts +0 -1
  158. package/dist/auth/auth.test.js +0 -255
  159. package/dist/errors/errors.test.d.ts +0 -1
  160. package/dist/errors/errors.test.js +0 -165
  161. package/dist/execution/execution.test.d.ts +0 -1
  162. package/dist/execution/execution.test.js +0 -246
  163. package/dist/integration.test.d.ts +0 -1
  164. package/dist/integration.test.js +0 -168
  165. package/dist/interpreter/evaluator.test.d.ts +0 -1
  166. package/dist/interpreter/evaluator.test.js +0 -512
  167. package/dist/interpreter/http.test.d.ts +0 -1
  168. package/dist/interpreter/http.test.js +0 -299
  169. package/dist/interpreter/progress.test.d.ts +0 -1
  170. package/dist/interpreter/progress.test.js +0 -216
  171. package/dist/interpreter/schema-matcher.test.d.ts +0 -1
  172. package/dist/interpreter/schema-matcher.test.js +0 -122
  173. package/dist/lexer/lexer.d.ts +0 -24
  174. package/dist/lexer/lexer.js +0 -264
  175. package/dist/lexer/lexer.test.d.ts +0 -1
  176. package/dist/lexer/lexer.test.js +0 -259
  177. package/dist/loader/loader.test.d.ts +0 -1
  178. package/dist/loader/loader.test.js +0 -287
  179. package/dist/oas/oas.test.d.ts +0 -1
  180. package/dist/oas/oas.test.js +0 -218
  181. package/dist/parser/expressions.test.d.ts +0 -1
  182. package/dist/parser/expressions.test.js +0 -378
  183. package/dist/parser/match.test.d.ts +0 -1
  184. package/dist/parser/match.test.js +0 -254
  185. package/dist/parser/parser.test.d.ts +0 -1
  186. package/dist/parser/parser.test.js +0 -333
  187. package/dist/parser/schedule.test.d.ts +0 -1
  188. package/dist/parser/schedule.test.js +0 -241
  189. package/dist/scheduler/cron-parser.test.d.ts +0 -1
  190. package/dist/scheduler/cron-parser.test.js +0 -188
  191. package/dist/stores/file.test.d.ts +0 -1
  192. package/dist/stores/file.test.js +0 -165
  193. package/dist/stores/memory.test.d.ts +0 -1
  194. package/dist/stores/memory.test.js +0 -157
  195. package/dist/stores/stores.test.d.ts +0 -1
  196. package/dist/stores/stores.test.js +0 -158
  197. package/dist/sync/sync.test.d.ts +0 -1
  198. package/dist/sync/sync.test.js +0 -221
  199. package/docusaurus/README.md +0 -41
  200. package/docusaurus/docs/advanced/execution-state.md +0 -283
  201. package/docusaurus/docs/advanced/extending-reqon.md +0 -388
  202. package/docusaurus/docs/advanced/multi-file-missions.md +0 -250
  203. package/docusaurus/docs/advanced/parallel-execution.md +0 -353
  204. package/docusaurus/docs/api-reference.md +0 -443
  205. package/docusaurus/docs/authentication/api-key.md +0 -339
  206. package/docusaurus/docs/authentication/basic.md +0 -276
  207. package/docusaurus/docs/authentication/bearer.md +0 -282
  208. package/docusaurus/docs/authentication/oauth2.md +0 -317
  209. package/docusaurus/docs/authentication/overview.md +0 -251
  210. package/docusaurus/docs/cli.md +0 -229
  211. package/docusaurus/docs/core-concepts/actions.md +0 -286
  212. package/docusaurus/docs/core-concepts/missions.md +0 -264
  213. package/docusaurus/docs/core-concepts/schemas.md +0 -353
  214. package/docusaurus/docs/core-concepts/sources.md +0 -339
  215. package/docusaurus/docs/core-concepts/stores.md +0 -332
  216. package/docusaurus/docs/dsl-syntax/expressions.md +0 -361
  217. package/docusaurus/docs/dsl-syntax/fetch.md +0 -293
  218. package/docusaurus/docs/dsl-syntax/for-loops.md +0 -324
  219. package/docusaurus/docs/dsl-syntax/map.md +0 -345
  220. package/docusaurus/docs/dsl-syntax/match.md +0 -387
  221. package/docusaurus/docs/dsl-syntax/pipelines.md +0 -397
  222. package/docusaurus/docs/dsl-syntax/validate.md +0 -401
  223. package/docusaurus/docs/error-handling/dead-letter-queues.md +0 -399
  224. package/docusaurus/docs/error-handling/flow-control.md +0 -337
  225. package/docusaurus/docs/error-handling/retry-strategies.md +0 -368
  226. package/docusaurus/docs/examples.md +0 -488
  227. package/docusaurus/docs/getting-started.md +0 -256
  228. package/docusaurus/docs/http/circuit-breaker.md +0 -401
  229. package/docusaurus/docs/http/incremental-sync.md +0 -394
  230. package/docusaurus/docs/http/pagination.md +0 -361
  231. package/docusaurus/docs/http/rate-limiting.md +0 -383
  232. package/docusaurus/docs/http/requests.md +0 -328
  233. package/docusaurus/docs/http/retry.md +0 -402
  234. package/docusaurus/docs/intro.md +0 -90
  235. package/docusaurus/docs/openapi/loading-specs.md +0 -305
  236. package/docusaurus/docs/openapi/operation-calls.md +0 -314
  237. package/docusaurus/docs/openapi/overview.md +0 -212
  238. package/docusaurus/docs/openapi/response-validation.md +0 -344
  239. package/docusaurus/docs/scheduling/cron.md +0 -305
  240. package/docusaurus/docs/scheduling/daemon-mode.md +0 -317
  241. package/docusaurus/docs/scheduling/intervals.md +0 -289
  242. package/docusaurus/docs/scheduling/overview.md +0 -231
  243. package/docusaurus/docs/stores/custom-adapters.md +0 -376
  244. package/docusaurus/docs/stores/file.md +0 -236
  245. package/docusaurus/docs/stores/memory.md +0 -193
  246. package/docusaurus/docs/stores/overview.md +0 -274
  247. package/docusaurus/docs/stores/postgrest.md +0 -316
  248. package/docusaurus/docusaurus.config.ts +0 -148
  249. package/docusaurus/package-lock.json +0 -18029
  250. package/docusaurus/package.json +0 -47
  251. package/docusaurus/sidebars.ts +0 -155
  252. package/docusaurus/src/components/HomepageFeatures/index.tsx +0 -105
  253. package/docusaurus/src/components/HomepageFeatures/styles.module.css +0 -12
  254. package/docusaurus/src/css/custom.css +0 -169
  255. package/docusaurus/src/pages/index.module.css +0 -48
  256. package/docusaurus/src/pages/index.tsx +0 -110
  257. package/docusaurus/src/pages/markdown-page.md +0 -7
  258. package/docusaurus/static/.nojekyll +0 -0
  259. package/docusaurus/static/img/docusaurus-social-card.jpg +0 -0
  260. package/docusaurus/static/img/docusaurus.png +0 -0
  261. package/docusaurus/static/img/favicon.ico +0 -0
  262. package/docusaurus/static/img/logo.svg +0 -10
  263. package/docusaurus/static/img/undraw_docusaurus_mountain.svg +0 -171
  264. package/docusaurus/static/img/undraw_docusaurus_react.svg +0 -170
  265. package/docusaurus/static/img/undraw_docusaurus_tree.svg +0 -40
  266. package/docusaurus/tsconfig.json +0 -8
  267. package/examples/README.md +0 -112
  268. package/examples/error-handling/README.md +0 -150
  269. package/examples/error-handling/payment-processor.vague +0 -287
  270. package/examples/github-sync/README.md +0 -74
  271. package/examples/github-sync/fetch-issues.vague +0 -47
  272. package/examples/github-sync/fetch-prs.vague +0 -40
  273. package/examples/github-sync/mission.vague +0 -101
  274. package/examples/github-sync/normalize.vague +0 -70
  275. package/examples/jsonplaceholder/README.md +0 -28
  276. package/examples/jsonplaceholder/posts.vague +0 -48
  277. package/examples/petstore/README.md +0 -35
  278. package/examples/petstore/openapi.yaml +0 -97
  279. package/examples/petstore/sync.vague +0 -52
  280. package/examples/temporal-comparison/README.md +0 -297
  281. package/examples/temporal-comparison/reconciliation.vague +0 -355
  282. package/examples/temporal-comparison/temporal/activities/index.ts +0 -8
  283. package/examples/temporal-comparison/temporal/activities/shipstation.ts +0 -225
  284. package/examples/temporal-comparison/temporal/activities/shopify.ts +0 -257
  285. package/examples/temporal-comparison/temporal/activities/storage.ts +0 -198
  286. package/examples/temporal-comparison/temporal/activities/stripe.ts +0 -169
  287. package/examples/temporal-comparison/temporal/activities/validation.ts +0 -205
  288. package/examples/temporal-comparison/temporal/client/schedule.ts +0 -218
  289. package/examples/temporal-comparison/temporal/config/retry.ts +0 -63
  290. package/examples/temporal-comparison/temporal/types/index.ts +0 -129
  291. package/examples/temporal-comparison/temporal/workers/main.ts +0 -130
  292. package/examples/temporal-comparison/temporal/workflows/orderReconciliation.ts +0 -262
  293. package/examples/xero/README.md +0 -88
  294. package/examples/xero/invoices.vague +0 -189
  295. package/src/api-integration.test.ts +0 -954
  296. package/src/ast/index.ts +0 -1
  297. package/src/ast/nodes.ts +0 -310
  298. package/src/auth/auth.test.ts +0 -326
  299. package/src/auth/circuit-breaker.test.ts +0 -390
  300. package/src/auth/circuit-breaker.ts +0 -379
  301. package/src/auth/credentials.test.ts +0 -273
  302. package/src/auth/credentials.ts +0 -246
  303. package/src/auth/index.ts +0 -40
  304. package/src/auth/oauth2-provider.ts +0 -177
  305. package/src/auth/rate-limiter.ts +0 -459
  306. package/src/auth/token-store.ts +0 -177
  307. package/src/auth/types.ts +0 -159
  308. package/src/benchmark/e2e.bench.ts +0 -288
  309. package/src/benchmark/evaluator.bench.ts +0 -331
  310. package/src/benchmark/fixtures.ts +0 -295
  311. package/src/benchmark/index.ts +0 -108
  312. package/src/benchmark/lexer.bench.ts +0 -69
  313. package/src/benchmark/parser.bench.ts +0 -103
  314. package/src/benchmark/resilience.bench.ts +0 -193
  315. package/src/benchmark/store.bench.ts +0 -147
  316. package/src/benchmark/utils.ts +0 -230
  317. package/src/cli.ts +0 -313
  318. package/src/errors/errors.test.ts +0 -234
  319. package/src/errors/index.ts +0 -223
  320. package/src/execution/execution.test.ts +0 -307
  321. package/src/execution/index.ts +0 -21
  322. package/src/execution/state.ts +0 -207
  323. package/src/execution/store.ts +0 -188
  324. package/src/index.ts +0 -169
  325. package/src/integration.test.ts +0 -192
  326. package/src/interpreter/context.ts +0 -57
  327. package/src/interpreter/evaluator.test.ts +0 -796
  328. package/src/interpreter/evaluator.ts +0 -245
  329. package/src/interpreter/executor.ts +0 -946
  330. package/src/interpreter/fetch-handler.ts +0 -302
  331. package/src/interpreter/http.test.ts +0 -423
  332. package/src/interpreter/http.ts +0 -308
  333. package/src/interpreter/index.ts +0 -32
  334. package/src/interpreter/pagination.ts +0 -207
  335. package/src/interpreter/progress.test.ts +0 -276
  336. package/src/interpreter/schema-matcher.test.ts +0 -160
  337. package/src/interpreter/schema-matcher.ts +0 -168
  338. package/src/interpreter/signals.ts +0 -73
  339. package/src/interpreter/step-handlers/for-handler.ts +0 -65
  340. package/src/interpreter/step-handlers/index.ts +0 -17
  341. package/src/interpreter/step-handlers/map-handler.ts +0 -24
  342. package/src/interpreter/step-handlers/match-handler.ts +0 -101
  343. package/src/interpreter/step-handlers/store-handler.ts +0 -78
  344. package/src/interpreter/step-handlers/types.ts +0 -17
  345. package/src/interpreter/step-handlers/validate-handler.ts +0 -30
  346. package/src/interpreter/step-handlers/webhook-handler.ts +0 -142
  347. package/src/lexer/index.ts +0 -18
  348. package/src/lexer/lexer.test.ts +0 -316
  349. package/src/lexer/tokens.ts +0 -179
  350. package/src/loader/index.ts +0 -288
  351. package/src/loader/loader.test.ts +0 -360
  352. package/src/oas/index.ts +0 -4
  353. package/src/oas/loader.ts +0 -126
  354. package/src/oas/oas.test.ts +0 -254
  355. package/src/oas/validator.ts +0 -299
  356. package/src/parser/base.ts +0 -124
  357. package/src/parser/expressions.test.ts +0 -525
  358. package/src/parser/expressions.ts +0 -314
  359. package/src/parser/index.ts +0 -3
  360. package/src/parser/match.test.ts +0 -296
  361. package/src/parser/parser.test.ts +0 -739
  362. package/src/parser/parser.ts +0 -1469
  363. package/src/parser/schedule.test.ts +0 -287
  364. package/src/parser/webhook.test.ts +0 -248
  365. package/src/plugin.ts +0 -83
  366. package/src/scheduler/cron-parser.test.ts +0 -236
  367. package/src/scheduler/cron-parser.ts +0 -236
  368. package/src/scheduler/index.ts +0 -10
  369. package/src/scheduler/scheduler.ts +0 -443
  370. package/src/scheduler/types.ts +0 -71
  371. package/src/stores/factory.ts +0 -104
  372. package/src/stores/file.test.ts +0 -276
  373. package/src/stores/file.ts +0 -211
  374. package/src/stores/index.ts +0 -6
  375. package/src/stores/memory.test.ts +0 -238
  376. package/src/stores/memory.ts +0 -63
  377. package/src/stores/postgrest.test.ts +0 -488
  378. package/src/stores/postgrest.ts +0 -263
  379. package/src/stores/stores.test.ts +0 -197
  380. package/src/stores/types.ts +0 -58
  381. package/src/sync/index.ts +0 -16
  382. package/src/sync/state.ts +0 -126
  383. package/src/sync/store.ts +0 -139
  384. package/src/sync/sync.test.ts +0 -271
  385. package/src/utils/async.ts +0 -10
  386. package/src/utils/file.ts +0 -106
  387. package/src/utils/index.ts +0 -14
  388. package/src/utils/logger.ts +0 -53
  389. package/src/utils/path.ts +0 -47
  390. package/src/webhook/index.ts +0 -15
  391. package/src/webhook/server.test.ts +0 -253
  392. package/src/webhook/server.ts +0 -389
  393. package/src/webhook/store.ts +0 -239
  394. package/src/webhook/types.ts +0 -93
  395. package/tsconfig.json +0 -17
  396. package/vitest.config.ts +0 -39
@@ -1,6 +1,20 @@
1
+ /**
2
+ * ---
3
+ * purpose: Execution context - scoped state for variables, stores, sources
4
+ * exports:
5
+ * - ExecutionContext - interface for execution state
6
+ * - createContext, childContext - context factory functions
7
+ * - getVariable, setVariable - scoped variable access
8
+ * related:
9
+ * - ./executor.ts - creates and uses contexts
10
+ * - ./evaluator.ts - reads from context during expression evaluation
11
+ * - ../stores/types.ts - StoreAdapter interface
12
+ * ---
13
+ */
1
14
  export function createContext() {
2
15
  return {
3
16
  stores: new Map(),
17
+ storeTypes: new Map(),
4
18
  sources: new Map(),
5
19
  schemas: new Map(),
6
20
  variables: new Map(),
@@ -9,6 +23,7 @@ export function createContext() {
9
23
  export function childContext(parent) {
10
24
  return {
11
25
  stores: parent.stores,
26
+ storeTypes: parent.storeTypes,
12
27
  sources: parent.sources,
13
28
  schemas: parent.schemas,
14
29
  variables: new Map(),
@@ -1,5 +1,67 @@
1
+ /**
2
+ * ---
3
+ * purpose: Expression evaluator - evaluates Vague/Reqon expressions at runtime
4
+ * inputs:
5
+ * - Expression AST node (literals, identifiers, binary ops, function calls)
6
+ * - ExecutionContext with variables, response, stores
7
+ * - Optional current record for iteration contexts
8
+ * outputs:
9
+ * - Evaluated value (any JSON-compatible type)
10
+ * related:
11
+ * - ./context.ts - provides variable bindings
12
+ * - ./executor.ts - calls evaluate() for step expressions
13
+ * - ../parser/expressions.ts - IsExpression, ObjectLiteralExpression types
14
+ * ---
15
+ */
1
16
  import type { Expression } from 'vague-lang';
2
17
  import type { ExecutionContext } from './context.js';
3
- export declare function evaluate(expr: Expression, ctx: ExecutionContext, current?: unknown): unknown;
18
+ import type { IsExpression, ObjectLiteralExpression } from '../parser/expressions.js';
19
+ /**
20
+ * Evaluate a Reqon/Vague expression within an execution context.
21
+ *
22
+ * Supports all expression types from the Vague DSL including literals, identifiers,
23
+ * binary/logical/ternary expressions, function calls, and pattern matching.
24
+ *
25
+ * @param expr - The expression AST node to evaluate
26
+ * @param ctx - The execution context containing variables, response data, and stores
27
+ * @param current - Optional current record for iteration contexts (e.g., inside for/map)
28
+ * @returns The evaluated result, which can be any JSON-compatible value
29
+ *
30
+ * @example
31
+ * // Evaluate a simple identifier
32
+ * const result = evaluate({ type: 'Identifier', name: 'foo' }, ctx);
33
+ *
34
+ * @example
35
+ * // Evaluate with current record context
36
+ * const result = evaluate(expr, ctx, { id: 1, name: 'test' });
37
+ */
38
+ export declare function evaluate(expr: Expression | IsExpression | ObjectLiteralExpression, ctx: ExecutionContext, current?: unknown): unknown;
39
+ /**
40
+ * Evaluate an expression and convert the result to a string.
41
+ *
42
+ * @param expr - The expression to evaluate
43
+ * @param ctx - The execution context
44
+ * @param current - Optional current record for iteration contexts
45
+ * @returns The string representation of the evaluated value
46
+ */
4
47
  export declare function evaluateToString(expr: Expression, ctx: ExecutionContext, current?: unknown): string;
48
+ /**
49
+ * Interpolate variables in a path string using {variable.path} syntax.
50
+ *
51
+ * Replaces placeholders like {id} or {user.name} with values from the
52
+ * current record or execution context variables.
53
+ *
54
+ * @param path - The path string with {placeholder} syntax
55
+ * @param ctx - The execution context
56
+ * @param current - Optional current record for iteration contexts
57
+ * @returns The interpolated path string
58
+ *
59
+ * @example
60
+ * // Interpolate a simple variable
61
+ * interpolatePath('/users/{id}', ctx, { id: 123 }); // '/users/123'
62
+ *
63
+ * @example
64
+ * // Interpolate a nested path
65
+ * interpolatePath('/orgs/{org.id}/users', ctx, { org: { id: 'acme' } }); // '/orgs/acme/users'
66
+ */
5
67
  export declare function interpolatePath(path: string, ctx: ExecutionContext, current?: unknown): string;
@@ -1,15 +1,63 @@
1
+ /**
2
+ * ---
3
+ * purpose: Expression evaluator - evaluates Vague/Reqon expressions at runtime
4
+ * inputs:
5
+ * - Expression AST node (literals, identifiers, binary ops, function calls)
6
+ * - ExecutionContext with variables, response, stores
7
+ * - Optional current record for iteration contexts
8
+ * outputs:
9
+ * - Evaluated value (any JSON-compatible type)
10
+ * related:
11
+ * - ./context.ts - provides variable bindings
12
+ * - ./executor.ts - calls evaluate() for step expressions
13
+ * - ../parser/expressions.ts - IsExpression, ObjectLiteralExpression types
14
+ * ---
15
+ */
1
16
  import { getVariable } from './context.js';
17
+ import { isRecord } from '../utils/type-guards.js';
18
+ import { EvaluatorError, UnsupportedOperationError } from '../errors/index.js';
19
+ /**
20
+ * Evaluate a Reqon/Vague expression within an execution context.
21
+ *
22
+ * Supports all expression types from the Vague DSL including literals, identifiers,
23
+ * binary/logical/ternary expressions, function calls, and pattern matching.
24
+ *
25
+ * @param expr - The expression AST node to evaluate
26
+ * @param ctx - The execution context containing variables, response data, and stores
27
+ * @param current - Optional current record for iteration contexts (e.g., inside for/map)
28
+ * @returns The evaluated result, which can be any JSON-compatible value
29
+ *
30
+ * @example
31
+ * // Evaluate a simple identifier
32
+ * const result = evaluate({ type: 'Identifier', name: 'foo' }, ctx);
33
+ *
34
+ * @example
35
+ * // Evaluate with current record context
36
+ * const result = evaluate(expr, ctx, { id: 1, name: 'test' });
37
+ */
2
38
  export function evaluate(expr, ctx, current) {
39
+ // Handle IsExpression before the switch (custom Reqon type, not in vague-lang Expression union)
40
+ if (expr.type === 'IsExpression') {
41
+ const isExpr = expr;
42
+ const value = evaluate(isExpr.operand, ctx, current);
43
+ return checkType(value, isExpr.typeCheck);
44
+ }
45
+ // Handle ObjectLiteral before the switch (custom Reqon type)
46
+ if (expr.type === 'ObjectLiteral') {
47
+ const objExpr = expr;
48
+ const result = {};
49
+ for (const prop of objExpr.properties) {
50
+ result[prop.key] = evaluate(prop.value, ctx, current);
51
+ }
52
+ return result;
53
+ }
3
54
  switch (expr.type) {
4
55
  case 'Literal':
5
56
  return expr.value;
6
57
  case 'Identifier': {
7
58
  // Check if it's a field on current object
8
- if (current && typeof current === 'object' && current !== null) {
9
- const obj = current;
10
- if (expr.name in obj) {
11
- return obj[expr.name];
12
- }
59
+ if (isRecord(current) && expr.name in current) {
60
+ return current[expr.name];
13
61
  }
14
62
  // Check variables
15
63
  const value = getVariable(ctx, expr.name);
@@ -20,20 +68,31 @@ export function evaluate(expr, ctx, current) {
20
68
  return ctx.response;
21
69
  }
22
70
  // Check if the identifier is a field on response
23
- if (ctx.response && typeof ctx.response === 'object') {
24
- const resp = ctx.response;
25
- if (expr.name in resp)
26
- return resp[expr.name];
71
+ if (isRecord(ctx.response) && expr.name in ctx.response) {
72
+ return ctx.response[expr.name];
27
73
  }
28
74
  return undefined;
29
75
  }
30
76
  case 'QualifiedName': {
31
- // Try from current/response first (common case)
77
+ // Handle 'response.x.y' specially - start from ctx.response
78
+ if (expr.parts.length > 0 && expr.parts[0] === 'response') {
79
+ let value = ctx.response;
80
+ for (let i = 1; i < expr.parts.length; i++) {
81
+ if (isRecord(value)) {
82
+ value = value[expr.parts[i]];
83
+ }
84
+ else {
85
+ return undefined;
86
+ }
87
+ }
88
+ return value;
89
+ }
90
+ // Try from current/response first (common case for .field paths)
32
91
  let value = current ?? ctx.response;
33
- if (value && typeof value === 'object' && value !== null) {
92
+ if (isRecord(value)) {
34
93
  let found = true;
35
94
  for (const part of expr.parts) {
36
- if (value && typeof value === 'object' && value !== null) {
95
+ if (isRecord(value)) {
37
96
  value = value[part];
38
97
  }
39
98
  else {
@@ -50,7 +109,7 @@ export function evaluate(expr, ctx, current) {
50
109
  value = getVariable(ctx, expr.parts[0]);
51
110
  if (value !== undefined) {
52
111
  for (let i = 1; i < expr.parts.length; i++) {
53
- if (value && typeof value === 'object') {
112
+ if (isRecord(value)) {
54
113
  value = value[expr.parts[i]];
55
114
  }
56
115
  else {
@@ -67,27 +126,36 @@ export function evaluate(expr, ctx, current) {
67
126
  const right = evaluate(expr.right, ctx, current);
68
127
  switch (expr.operator) {
69
128
  case '+':
70
- return left + right;
129
+ // Allow string concatenation
130
+ if (typeof left === 'string' || typeof right === 'string') {
131
+ return String(left ?? '') + String(right ?? '');
132
+ }
133
+ return toNumber(left, '+') + toNumber(right, '+');
71
134
  case '-':
72
- return left - right;
135
+ return toNumber(left, '-') - toNumber(right, '-');
73
136
  case '*':
74
- return left * right;
75
- case '/':
76
- return left / right;
137
+ return toNumber(left, '*') * toNumber(right, '*');
138
+ case '/': {
139
+ const divisor = toNumber(right, '/');
140
+ if (divisor === 0) {
141
+ throw new EvaluatorError('Division by zero', { expression: '/' });
142
+ }
143
+ return toNumber(left, '/') / divisor;
144
+ }
77
145
  case '==':
78
146
  return left === right;
79
147
  case '!=':
80
148
  return left !== right;
81
149
  case '<':
82
- return left < right;
150
+ return compareNumbers(left, right, '<');
83
151
  case '>':
84
- return left > right;
152
+ return compareNumbers(left, right, '>');
85
153
  case '<=':
86
- return left <= right;
154
+ return compareNumbers(left, right, '<=');
87
155
  case '>=':
88
- return left >= right;
156
+ return compareNumbers(left, right, '>=');
89
157
  default:
90
- throw new Error(`Unknown operator: ${expr.operator}`);
158
+ throw new UnsupportedOperationError(`operator: ${expr.operator}`, 'binary expression');
91
159
  }
92
160
  }
93
161
  case 'LogicalExpression': {
@@ -104,9 +172,9 @@ export function evaluate(expr, ctx, current) {
104
172
  case 'UnaryExpression': {
105
173
  const operand = evaluate(expr.operand, ctx, current);
106
174
  if (expr.operator === '-')
107
- return -operand;
175
+ return -toNumber(operand, 'unary -');
108
176
  if (expr.operator === '+')
109
- return +operand;
177
+ return toNumber(operand, 'unary +');
110
178
  return operand;
111
179
  }
112
180
  case 'TernaryExpression': {
@@ -139,8 +207,12 @@ export function evaluate(expr, ctx, current) {
139
207
  if (typeof args[0] === 'string')
140
208
  return args[0].length;
141
209
  return 0;
142
- case 'sum':
143
- return args[0].reduce((a, b) => a + b, 0);
210
+ case 'sum': {
211
+ if (!Array.isArray(args[0])) {
212
+ throw new EvaluatorError('sum() requires an array argument', { expression: 'sum' });
213
+ }
214
+ return args[0].reduce((acc, val) => acc + toNumber(val, 'sum'), 0);
215
+ }
144
216
  case 'count':
145
217
  return Array.isArray(args[0]) ? args[0].length : 0;
146
218
  case 'first':
@@ -148,13 +220,17 @@ export function evaluate(expr, ctx, current) {
148
220
  case 'last':
149
221
  return Array.isArray(args[0]) ? args[0][args[0].length - 1] : undefined;
150
222
  case 'round':
151
- return Math.round(args[0]);
223
+ return Math.round(toNumber(args[0], 'round'));
152
224
  case 'floor':
153
- return Math.floor(args[0]);
225
+ return Math.floor(toNumber(args[0], 'floor'));
154
226
  case 'ceil':
155
- return Math.ceil(args[0]);
227
+ return Math.ceil(toNumber(args[0], 'ceil'));
228
+ case 'now':
229
+ return new Date().toISOString();
230
+ case 'env':
231
+ return process.env[args[0]] ?? '';
156
232
  default:
157
- throw new Error(`Unknown function: ${expr.callee}`);
233
+ throw new UnsupportedOperationError(`function: ${expr.callee}`, 'call expression');
158
234
  }
159
235
  }
160
236
  case 'AnyOfExpression': {
@@ -166,27 +242,55 @@ export function evaluate(expr, ctx, current) {
166
242
  }
167
243
  return collection[Math.floor(Math.random() * collection.length)];
168
244
  }
169
- case 'IsExpression': {
170
- // Type checking expression: value is array, value is string, etc.
171
- const isExpr = expr;
172
- const value = evaluate(isExpr.operand, ctx, current);
173
- return checkType(value, isExpr.typeCheck);
245
+ case 'OrderedSequenceType': {
246
+ // Inline array literal: [1, 2, 3]
247
+ const seqExpr = expr;
248
+ return seqExpr.elements.map((el) => evaluate(el, ctx, current));
174
249
  }
175
250
  default:
176
- throw new Error(`Cannot evaluate expression type: ${expr.type}`);
251
+ throw new EvaluatorError(`Cannot evaluate expression type: ${expr.type}`, {
252
+ expression: expr.type,
253
+ });
177
254
  }
178
255
  }
256
+ /**
257
+ * Evaluate an expression and convert the result to a string.
258
+ *
259
+ * @param expr - The expression to evaluate
260
+ * @param ctx - The execution context
261
+ * @param current - Optional current record for iteration contexts
262
+ * @returns The string representation of the evaluated value
263
+ */
179
264
  export function evaluateToString(expr, ctx, current) {
180
265
  const value = evaluate(expr, ctx, current);
181
266
  return String(value ?? '');
182
267
  }
268
+ /**
269
+ * Interpolate variables in a path string using {variable.path} syntax.
270
+ *
271
+ * Replaces placeholders like {id} or {user.name} with values from the
272
+ * current record or execution context variables.
273
+ *
274
+ * @param path - The path string with {placeholder} syntax
275
+ * @param ctx - The execution context
276
+ * @param current - Optional current record for iteration contexts
277
+ * @returns The interpolated path string
278
+ *
279
+ * @example
280
+ * // Interpolate a simple variable
281
+ * interpolatePath('/users/{id}', ctx, { id: 123 }); // '/users/123'
282
+ *
283
+ * @example
284
+ * // Interpolate a nested path
285
+ * interpolatePath('/orgs/{org.id}/users', ctx, { org: { id: 'acme' } }); // '/orgs/acme/users'
286
+ */
183
287
  export function interpolatePath(path, ctx, current) {
184
288
  return path.replace(/\{([^}]+)\}/g, (_, expr) => {
185
289
  // Simple variable interpolation
186
290
  const parts = expr.split('.');
187
291
  let value = current;
188
292
  for (const part of parts) {
189
- if (value && typeof value === 'object') {
293
+ if (isRecord(value)) {
190
294
  value = value[part];
191
295
  }
192
296
  else {
@@ -196,6 +300,49 @@ export function interpolatePath(path, ctx, current) {
196
300
  return String(value ?? '');
197
301
  });
198
302
  }
303
+ /**
304
+ * Coerce a value to a number for arithmetic operations.
305
+ * Returns NaN for values that cannot be meaningfully converted.
306
+ */
307
+ function toNumber(value, operator) {
308
+ if (typeof value === 'number') {
309
+ return value;
310
+ }
311
+ if (typeof value === 'string') {
312
+ const parsed = Number(value);
313
+ if (!isNaN(parsed)) {
314
+ return parsed;
315
+ }
316
+ }
317
+ if (typeof value === 'boolean') {
318
+ return value ? 1 : 0;
319
+ }
320
+ if (value === null || value === undefined) {
321
+ throw new EvaluatorError(`Cannot perform '${operator}' on ${value === null ? 'null' : 'undefined'}`, { expression: operator });
322
+ }
323
+ throw new EvaluatorError(`Cannot perform '${operator}' on ${typeof value} (expected number)`, {
324
+ expression: operator,
325
+ });
326
+ }
327
+ /**
328
+ * Safely perform arithmetic comparison, with proper type coercion.
329
+ */
330
+ function compareNumbers(left, right, operator) {
331
+ const leftNum = toNumber(left, operator);
332
+ const rightNum = toNumber(right, operator);
333
+ switch (operator) {
334
+ case '<':
335
+ return leftNum < rightNum;
336
+ case '>':
337
+ return leftNum > rightNum;
338
+ case '<=':
339
+ return leftNum <= rightNum;
340
+ case '>=':
341
+ return leftNum >= rightNum;
342
+ default:
343
+ return false;
344
+ }
345
+ }
199
346
  /** Type check functions map - more efficient than switch statement */
200
347
  const TYPE_CHECKERS = new Map([
201
348
  ['array', (v) => Array.isArray(v)],
@@ -217,7 +364,7 @@ const TYPE_CHECKERS = new Map([
217
364
  function checkType(value, typeName) {
218
365
  const checker = TYPE_CHECKERS.get(typeName.toLowerCase());
219
366
  if (!checker) {
220
- throw new Error(`Unknown type for 'is' check: ${typeName}`);
367
+ throw new UnsupportedOperationError(`type check: ${typeName}`, "'is' expression");
221
368
  }
222
369
  return checker(value);
223
370
  }
@@ -1,10 +1,32 @@
1
+ /**
2
+ * ---
3
+ * purpose: Mission executor - orchestrates pipeline execution
4
+ * inputs:
5
+ * - ReqonProgram - parsed AST
6
+ * - ExecutorConfig - auth, stores, callbacks, debug settings
7
+ * outputs:
8
+ * - ExecutionResult - success/errors, stores, duration
9
+ * related:
10
+ * - ./context.ts - execution state (variables, stores, sources)
11
+ * - ./evaluator.ts - expression evaluation
12
+ * - ./fetch-handler.ts - HTTP requests
13
+ * - ./step-handlers/ - individual step type handlers
14
+ * - ./source-manager.ts - auth provider management
15
+ * ---
16
+ */
1
17
  import type { ReqonProgram } from '../ast/nodes.js';
2
18
  import type { StoreAdapter } from '../stores/types.js';
19
+ import { type AuthConfig } from './source-manager.js';
3
20
  import { type CircuitBreakerCallbacks } from '../auth/circuit-breaker.js';
4
21
  import type { RateLimitCallbacks } from '../auth/types.js';
5
22
  import { type ExecutionState, type ExecutionStore } from '../execution/index.js';
6
23
  import { type SyncStore } from '../sync/index.js';
7
24
  import type { WebhookServer } from '../webhook/index.js';
25
+ import type { EventEmitter, StructuredLogger } from '../observability/index.js';
26
+ import type { DebugController } from '../debug/index.js';
27
+ import type { ControlServer } from '../control/index.js';
28
+ import { type TraceStore } from '../trace/index.js';
29
+ import { type PauseManager, type PauseStore } from '../pause/index.js';
8
30
  export interface ExecutionResult {
9
31
  success: boolean;
10
32
  duration: number;
@@ -15,6 +37,10 @@ export interface ExecutionResult {
15
37
  executionId?: string;
16
38
  /** Execution state (if persistence enabled) */
17
39
  state?: ExecutionState;
40
+ /** Trace ID if tracing was enabled */
41
+ traceId?: string;
42
+ /** Pause ID if execution was paused */
43
+ pauseId?: string;
18
44
  }
19
45
  export interface ExecutionError {
20
46
  action: string;
@@ -71,6 +97,7 @@ export interface ExecutorConfig {
71
97
  stores?: Record<string, StoreAdapter>;
72
98
  dryRun?: boolean;
73
99
  verbose?: boolean;
100
+ missionDir?: string;
74
101
  rateLimitCallbacks?: RateLimitCallbacks;
75
102
  circuitBreakerCallbacks?: CircuitBreakerCallbacks;
76
103
  developmentMode?: boolean;
@@ -82,29 +109,39 @@ export interface ExecutorConfig {
82
109
  syncStore?: SyncStore;
83
110
  progress?: ProgressCallbacks;
84
111
  webhookServer?: WebhookServer;
112
+ eventEmitter?: EventEmitter;
113
+ logger?: StructuredLogger;
114
+ debugController?: DebugController;
115
+ controlServer?: ControlServer;
116
+ traceStore?: TraceStore;
117
+ pauseStore?: PauseStore;
118
+ pauseManager?: PauseManager;
85
119
  }
86
- interface AuthConfig {
87
- type: 'bearer' | 'oauth2' | 'none';
88
- token?: string;
89
- accessToken?: string;
90
- refreshToken?: string;
91
- tokenEndpoint?: string;
92
- clientId?: string;
93
- clientSecret?: string;
94
- }
120
+ export { type AuthConfig } from './source-manager.js';
95
121
  export declare class MissionExecutor {
96
122
  private config;
97
123
  private ctx;
98
124
  private errors;
99
125
  private actionsRun;
100
- private oasSources;
101
- private sourceConfigs;
126
+ private transforms;
102
127
  private rateLimiter;
103
128
  private circuitBreaker;
129
+ private sourceManager;
130
+ private storeManager;
104
131
  private executionStore?;
105
132
  private executionState?;
106
133
  private syncStore?;
107
134
  private missionName?;
135
+ private eventEmitter?;
136
+ private logger?;
137
+ private stepIndex;
138
+ private debugController?;
139
+ private traceRecorder?;
140
+ private traceStore?;
141
+ private pauseManager?;
142
+ private pauseStore?;
143
+ private currentStageIndex;
144
+ private currentPauseId?;
108
145
  constructor(config?: ExecutorConfig);
109
146
  execute(program: ReqonProgram): Promise<ExecutionResult>;
110
147
  private initializeExecutionState;
@@ -114,8 +151,6 @@ export declare class MissionExecutor {
114
151
  private getStageName;
115
152
  private executeSequentialStage;
116
153
  private executeParallelStage;
117
- private initializeSource;
118
- private initializeStore;
119
154
  private executeAction;
120
155
  private executeStep;
121
156
  private executeFetch;
@@ -125,7 +160,28 @@ export declare class MissionExecutor {
125
160
  private executeStore;
126
161
  private executeMatch;
127
162
  private executeLet;
163
+ private executeApply;
128
164
  private executeWebhook;
165
+ private executePause;
129
166
  private log;
167
+ /**
168
+ * Check if pause has been requested and handle it
169
+ * Should be called at safe pause points (between stages, loop iterations)
170
+ */
171
+ private checkPause;
172
+ /**
173
+ * Update control server with current state
174
+ */
175
+ private updateControlServerState;
176
+ private getStepType;
177
+ /** Get the event emitter (for external access) */
178
+ getEventEmitter(): EventEmitter | undefined;
179
+ /** Get the structured logger (for external access) */
180
+ getLogger(): StructuredLogger | undefined;
181
+ /** Get the debug controller (for external access) */
182
+ getDebugController(): DebugController | undefined;
183
+ /** Capture current execution state for debugging */
184
+ private captureDebugSnapshot;
185
+ /** Handle debug command and update state */
186
+ private handleDebugCommand;
130
187
  }
131
- export {};