reqon-dsl 0.2.0 → 0.4.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 (450) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/README.md +45 -3
  3. package/dist/ast/nodes.d.ts +91 -4
  4. package/dist/ast/nodes.js +14 -0
  5. package/dist/auth/circuit-breaker.d.ts +11 -0
  6. package/dist/auth/circuit-breaker.js +90 -18
  7. package/dist/auth/credentials.d.ts +6 -1
  8. package/dist/auth/credentials.js +12 -4
  9. package/dist/auth/oauth2-provider.js +13 -3
  10. package/dist/auth/rate-limiter.d.ts +12 -1
  11. package/dist/auth/rate-limiter.js +39 -26
  12. package/dist/auth/token-store.js +8 -1
  13. package/dist/cli.d.ts +24 -1
  14. package/dist/cli.js +149 -10
  15. package/dist/config/constants.d.ts +152 -0
  16. package/dist/config/constants.js +139 -0
  17. package/dist/config/index.d.ts +4 -0
  18. package/dist/config/index.js +4 -0
  19. package/dist/control/index.d.ts +2 -0
  20. package/dist/control/index.js +1 -0
  21. package/dist/control/server.d.ts +105 -0
  22. package/dist/control/server.js +315 -0
  23. package/dist/control/types.d.ts +61 -0
  24. package/dist/control/types.js +7 -0
  25. package/dist/debug/cli-debugger.d.ts +17 -0
  26. package/dist/debug/cli-debugger.js +185 -0
  27. package/dist/debug/controller.d.ts +94 -0
  28. package/dist/debug/controller.js +45 -0
  29. package/dist/debug/index.d.ts +6 -0
  30. package/dist/debug/index.js +5 -0
  31. package/dist/errors/index.d.ts +67 -0
  32. package/dist/errors/index.js +89 -1
  33. package/dist/execution/index.d.ts +1 -1
  34. package/dist/execution/state.d.ts +24 -0
  35. package/dist/execution/store.js +2 -2
  36. package/dist/execution-log/events.d.ts +125 -0
  37. package/dist/execution-log/events.js +17 -0
  38. package/dist/execution-log/fold.d.ts +38 -0
  39. package/dist/execution-log/fold.js +54 -0
  40. package/dist/execution-log/index.d.ts +18 -0
  41. package/dist/execution-log/index.js +6 -0
  42. package/dist/execution-log/postgres-store.d.ts +36 -0
  43. package/dist/execution-log/postgres-store.js +108 -0
  44. package/dist/execution-log/resume.d.ts +11 -0
  45. package/dist/execution-log/resume.js +5 -0
  46. package/dist/execution-log/sqlite-store.d.ts +16 -0
  47. package/dist/execution-log/sqlite-store.js +101 -0
  48. package/dist/execution-log/store.d.ts +72 -0
  49. package/dist/execution-log/store.js +182 -0
  50. package/dist/index.d.ts +23 -2
  51. package/dist/index.js +35 -3
  52. package/dist/interpreter/context.d.ts +29 -0
  53. package/dist/interpreter/context.js +18 -0
  54. package/dist/interpreter/evaluator.d.ts +63 -1
  55. package/dist/interpreter/evaluator.js +219 -42
  56. package/dist/interpreter/executor.d.ts +132 -14
  57. package/dist/interpreter/executor.js +883 -178
  58. package/dist/interpreter/fetch-handler.d.ts +48 -1
  59. package/dist/interpreter/fetch-handler.js +216 -38
  60. package/dist/interpreter/http.d.ts +34 -0
  61. package/dist/interpreter/http.js +203 -28
  62. package/dist/interpreter/index.d.ts +5 -3
  63. package/dist/interpreter/index.js +4 -2
  64. package/dist/interpreter/pagination.d.ts +12 -3
  65. package/dist/interpreter/pagination.js +102 -32
  66. package/dist/interpreter/signals.d.ts +8 -0
  67. package/dist/interpreter/signals.js +12 -0
  68. package/dist/interpreter/source-manager.d.ts +75 -0
  69. package/dist/interpreter/source-manager.js +157 -0
  70. package/dist/interpreter/step-handlers/apply-handler.d.ts +29 -0
  71. package/dist/interpreter/step-handlers/apply-handler.js +79 -0
  72. package/dist/interpreter/step-handlers/for-handler.d.ts +16 -0
  73. package/dist/interpreter/step-handlers/for-handler.js +89 -7
  74. package/dist/interpreter/step-handlers/index.d.ts +4 -2
  75. package/dist/interpreter/step-handlers/index.js +4 -2
  76. package/dist/interpreter/step-handlers/match-handler.d.ts +9 -0
  77. package/dist/interpreter/step-handlers/match-handler.js +47 -17
  78. package/dist/interpreter/step-handlers/pause-handler.d.ts +52 -0
  79. package/dist/interpreter/step-handlers/pause-handler.js +87 -0
  80. package/dist/interpreter/step-handlers/store-handler.d.ts +17 -1
  81. package/dist/interpreter/step-handlers/store-handler.js +61 -20
  82. package/dist/interpreter/step-handlers/types.d.ts +3 -0
  83. package/dist/interpreter/step-handlers/validate-handler.d.ts +2 -1
  84. package/dist/interpreter/step-handlers/validate-handler.js +7 -2
  85. package/dist/interpreter/step-handlers/webhook-handler.d.ts +4 -0
  86. package/dist/interpreter/step-handlers/webhook-handler.js +31 -5
  87. package/dist/interpreter/store-manager.d.ts +46 -0
  88. package/dist/interpreter/store-manager.js +70 -0
  89. package/dist/lexer/index.d.ts +11 -4
  90. package/dist/lexer/index.js +11 -4
  91. package/dist/lexer/tokens.d.ts +17 -1
  92. package/dist/lexer/tokens.js +36 -0
  93. package/dist/loader/index.js +5 -8
  94. package/dist/mcp/index.d.ts +11 -0
  95. package/dist/mcp/index.js +11 -0
  96. package/dist/mcp/sandbox.d.ts +41 -0
  97. package/dist/mcp/sandbox.js +76 -0
  98. package/dist/mcp/server.d.ts +17 -0
  99. package/dist/mcp/server.js +504 -0
  100. package/dist/oas/index.d.ts +2 -0
  101. package/dist/oas/index.js +1 -0
  102. package/dist/oas/loader.d.ts +13 -1
  103. package/dist/oas/loader.js +25 -3
  104. package/dist/oas/mock-generator.d.ts +12 -0
  105. package/dist/oas/mock-generator.js +196 -0
  106. package/dist/oas/validator.js +45 -5
  107. package/dist/observability/events.d.ts +248 -0
  108. package/dist/observability/events.js +85 -0
  109. package/dist/observability/index.d.ts +15 -0
  110. package/dist/observability/index.js +12 -0
  111. package/dist/observability/logger.d.ts +106 -0
  112. package/dist/observability/logger.js +266 -0
  113. package/dist/observability/otel.d.ts +143 -0
  114. package/dist/observability/otel.js +421 -0
  115. package/dist/parser/action-parser.d.ts +105 -0
  116. package/dist/parser/action-parser.js +645 -0
  117. package/dist/parser/base.d.ts +7 -0
  118. package/dist/parser/base.js +11 -0
  119. package/dist/parser/expressions.d.ts +14 -0
  120. package/dist/parser/expressions.js +89 -6
  121. package/dist/parser/fetch-parser.d.ts +27 -0
  122. package/dist/parser/fetch-parser.js +280 -0
  123. package/dist/parser/index.d.ts +17 -0
  124. package/dist/parser/index.js +17 -0
  125. package/dist/parser/parser.d.ts +44 -46
  126. package/dist/parser/parser.js +122 -1070
  127. package/dist/parser/pipeline-parser.d.ts +12 -0
  128. package/dist/parser/pipeline-parser.js +52 -0
  129. package/dist/parser/schedule-parser.d.ts +7 -0
  130. package/dist/parser/schedule-parser.js +137 -0
  131. package/dist/parser/source-parser.d.ts +9 -0
  132. package/dist/parser/source-parser.js +151 -0
  133. package/dist/pause/index.d.ts +15 -0
  134. package/dist/pause/index.js +12 -0
  135. package/dist/pause/log-store.d.ts +33 -0
  136. package/dist/pause/log-store.js +98 -0
  137. package/dist/pause/manager.d.ts +130 -0
  138. package/dist/pause/manager.js +294 -0
  139. package/dist/pause/state.d.ts +93 -0
  140. package/dist/pause/state.js +103 -0
  141. package/dist/pause/store.d.ts +61 -0
  142. package/dist/pause/store.js +158 -0
  143. package/dist/plugin.d.ts +9 -12
  144. package/dist/plugin.js +10 -13
  145. package/dist/scheduler/cron-parser.d.ts +10 -3
  146. package/dist/scheduler/cron-parser.js +227 -48
  147. package/dist/scheduler/scheduler.js +56 -22
  148. package/dist/stores/factory.d.ts +7 -1
  149. package/dist/stores/factory.js +14 -3
  150. package/dist/stores/file.d.ts +26 -0
  151. package/dist/stores/file.js +67 -21
  152. package/dist/stores/index.d.ts +16 -1
  153. package/dist/stores/index.js +16 -1
  154. package/dist/stores/memory.d.ts +4 -0
  155. package/dist/stores/memory.js +8 -6
  156. package/dist/stores/postgrest.d.ts +28 -0
  157. package/dist/stores/postgrest.js +84 -37
  158. package/dist/stores/types.d.ts +17 -0
  159. package/dist/stores/types.js +12 -0
  160. package/dist/sync/index.d.ts +3 -2
  161. package/dist/sync/index.js +2 -1
  162. package/dist/sync/log-store.d.ts +30 -0
  163. package/dist/sync/log-store.js +45 -0
  164. package/dist/sync/store.js +1 -1
  165. package/dist/trace/index.d.ts +18 -0
  166. package/dist/trace/index.js +13 -0
  167. package/dist/trace/log-view.d.ts +57 -0
  168. package/dist/trace/log-view.js +76 -0
  169. package/dist/trace/recorder.d.ts +75 -0
  170. package/dist/trace/recorder.js +157 -0
  171. package/dist/trace/replay.d.ts +132 -0
  172. package/dist/trace/replay.js +264 -0
  173. package/dist/trace/state.d.ts +102 -0
  174. package/dist/trace/state.js +86 -0
  175. package/dist/trace/store.d.ts +75 -0
  176. package/dist/trace/store.js +250 -0
  177. package/dist/utils/deep-merge.d.ts +10 -0
  178. package/dist/utils/deep-merge.js +23 -0
  179. package/dist/utils/file.d.ts +13 -4
  180. package/dist/utils/file.js +70 -12
  181. package/dist/utils/index.d.ts +2 -1
  182. package/dist/utils/index.js +2 -1
  183. package/dist/utils/long-timeout.d.ts +19 -0
  184. package/dist/utils/long-timeout.js +33 -0
  185. package/dist/utils/path.d.ts +22 -1
  186. package/dist/utils/path.js +46 -1
  187. package/dist/utils/redact.d.ts +22 -0
  188. package/dist/utils/redact.js +42 -0
  189. package/dist/utils/type-guards.d.ts +58 -0
  190. package/dist/utils/type-guards.js +92 -0
  191. package/dist/webhook/server.d.ts +9 -0
  192. package/dist/webhook/server.js +122 -36
  193. package/dist/webhook/types.d.ts +9 -1
  194. package/package.json +76 -9
  195. package/.claude/settings.local.json +0 -31
  196. package/.claude/skills/api-integration.md +0 -125
  197. package/.claude/skills/database-schema.md +0 -51
  198. package/.claude/skills/dsl-design.md +0 -80
  199. package/.claude/skills/property-testing.md +0 -143
  200. package/.claude/skills/reqon/SKILL.md +0 -44
  201. package/.claude/skills/reqon/references/examples.md +0 -206
  202. package/.claude/skills/reqon/references/syntax.md +0 -263
  203. package/.claude/skills/vscode-extension.md +0 -113
  204. package/.github/dependabot.yml +0 -32
  205. package/.github/pull_request_template.md +0 -21
  206. package/.github/workflows/ci.yml +0 -174
  207. package/.github/workflows/release.yml +0 -73
  208. package/CLAUDE.md +0 -72
  209. package/CONTRIBUTING.md +0 -161
  210. package/TODO.md +0 -51
  211. package/dist/auth/auth.test.d.ts +0 -1
  212. package/dist/auth/auth.test.js +0 -255
  213. package/dist/errors/errors.test.d.ts +0 -1
  214. package/dist/errors/errors.test.js +0 -165
  215. package/dist/execution/execution.test.d.ts +0 -1
  216. package/dist/execution/execution.test.js +0 -246
  217. package/dist/integration.test.d.ts +0 -1
  218. package/dist/integration.test.js +0 -168
  219. package/dist/interpreter/evaluator.test.d.ts +0 -1
  220. package/dist/interpreter/evaluator.test.js +0 -512
  221. package/dist/interpreter/http.test.d.ts +0 -1
  222. package/dist/interpreter/http.test.js +0 -299
  223. package/dist/interpreter/progress.test.d.ts +0 -1
  224. package/dist/interpreter/progress.test.js +0 -216
  225. package/dist/interpreter/schema-matcher.test.d.ts +0 -1
  226. package/dist/interpreter/schema-matcher.test.js +0 -122
  227. package/dist/lexer/lexer.d.ts +0 -24
  228. package/dist/lexer/lexer.js +0 -264
  229. package/dist/lexer/lexer.test.d.ts +0 -1
  230. package/dist/lexer/lexer.test.js +0 -259
  231. package/dist/loader/loader.test.d.ts +0 -1
  232. package/dist/loader/loader.test.js +0 -287
  233. package/dist/oas/oas.test.d.ts +0 -1
  234. package/dist/oas/oas.test.js +0 -218
  235. package/dist/parser/expressions.test.d.ts +0 -1
  236. package/dist/parser/expressions.test.js +0 -378
  237. package/dist/parser/match.test.d.ts +0 -1
  238. package/dist/parser/match.test.js +0 -254
  239. package/dist/parser/parser.test.d.ts +0 -1
  240. package/dist/parser/parser.test.js +0 -333
  241. package/dist/parser/schedule.test.d.ts +0 -1
  242. package/dist/parser/schedule.test.js +0 -241
  243. package/dist/scheduler/cron-parser.test.d.ts +0 -1
  244. package/dist/scheduler/cron-parser.test.js +0 -188
  245. package/dist/stores/file.test.d.ts +0 -1
  246. package/dist/stores/file.test.js +0 -165
  247. package/dist/stores/memory.test.d.ts +0 -1
  248. package/dist/stores/memory.test.js +0 -157
  249. package/dist/stores/stores.test.d.ts +0 -1
  250. package/dist/stores/stores.test.js +0 -158
  251. package/dist/sync/sync.test.d.ts +0 -1
  252. package/dist/sync/sync.test.js +0 -221
  253. package/docusaurus/README.md +0 -41
  254. package/docusaurus/docs/advanced/execution-state.md +0 -283
  255. package/docusaurus/docs/advanced/extending-reqon.md +0 -388
  256. package/docusaurus/docs/advanced/multi-file-missions.md +0 -250
  257. package/docusaurus/docs/advanced/parallel-execution.md +0 -353
  258. package/docusaurus/docs/api-reference.md +0 -443
  259. package/docusaurus/docs/authentication/api-key.md +0 -339
  260. package/docusaurus/docs/authentication/basic.md +0 -276
  261. package/docusaurus/docs/authentication/bearer.md +0 -282
  262. package/docusaurus/docs/authentication/oauth2.md +0 -317
  263. package/docusaurus/docs/authentication/overview.md +0 -251
  264. package/docusaurus/docs/cli.md +0 -229
  265. package/docusaurus/docs/core-concepts/actions.md +0 -286
  266. package/docusaurus/docs/core-concepts/missions.md +0 -264
  267. package/docusaurus/docs/core-concepts/schemas.md +0 -353
  268. package/docusaurus/docs/core-concepts/sources.md +0 -339
  269. package/docusaurus/docs/core-concepts/stores.md +0 -332
  270. package/docusaurus/docs/dsl-syntax/expressions.md +0 -361
  271. package/docusaurus/docs/dsl-syntax/fetch.md +0 -293
  272. package/docusaurus/docs/dsl-syntax/for-loops.md +0 -324
  273. package/docusaurus/docs/dsl-syntax/map.md +0 -345
  274. package/docusaurus/docs/dsl-syntax/match.md +0 -387
  275. package/docusaurus/docs/dsl-syntax/pipelines.md +0 -397
  276. package/docusaurus/docs/dsl-syntax/validate.md +0 -401
  277. package/docusaurus/docs/error-handling/dead-letter-queues.md +0 -399
  278. package/docusaurus/docs/error-handling/flow-control.md +0 -337
  279. package/docusaurus/docs/error-handling/retry-strategies.md +0 -368
  280. package/docusaurus/docs/examples.md +0 -488
  281. package/docusaurus/docs/getting-started.md +0 -256
  282. package/docusaurus/docs/http/circuit-breaker.md +0 -401
  283. package/docusaurus/docs/http/incremental-sync.md +0 -394
  284. package/docusaurus/docs/http/pagination.md +0 -361
  285. package/docusaurus/docs/http/rate-limiting.md +0 -383
  286. package/docusaurus/docs/http/requests.md +0 -328
  287. package/docusaurus/docs/http/retry.md +0 -402
  288. package/docusaurus/docs/intro.md +0 -90
  289. package/docusaurus/docs/openapi/loading-specs.md +0 -305
  290. package/docusaurus/docs/openapi/operation-calls.md +0 -314
  291. package/docusaurus/docs/openapi/overview.md +0 -212
  292. package/docusaurus/docs/openapi/response-validation.md +0 -344
  293. package/docusaurus/docs/scheduling/cron.md +0 -305
  294. package/docusaurus/docs/scheduling/daemon-mode.md +0 -317
  295. package/docusaurus/docs/scheduling/intervals.md +0 -289
  296. package/docusaurus/docs/scheduling/overview.md +0 -231
  297. package/docusaurus/docs/stores/custom-adapters.md +0 -376
  298. package/docusaurus/docs/stores/file.md +0 -236
  299. package/docusaurus/docs/stores/memory.md +0 -193
  300. package/docusaurus/docs/stores/overview.md +0 -274
  301. package/docusaurus/docs/stores/postgrest.md +0 -316
  302. package/docusaurus/docusaurus.config.ts +0 -148
  303. package/docusaurus/package-lock.json +0 -18029
  304. package/docusaurus/package.json +0 -47
  305. package/docusaurus/sidebars.ts +0 -155
  306. package/docusaurus/src/components/HomepageFeatures/index.tsx +0 -105
  307. package/docusaurus/src/components/HomepageFeatures/styles.module.css +0 -12
  308. package/docusaurus/src/css/custom.css +0 -169
  309. package/docusaurus/src/pages/index.module.css +0 -48
  310. package/docusaurus/src/pages/index.tsx +0 -110
  311. package/docusaurus/src/pages/markdown-page.md +0 -7
  312. package/docusaurus/static/.nojekyll +0 -0
  313. package/docusaurus/static/img/docusaurus-social-card.jpg +0 -0
  314. package/docusaurus/static/img/docusaurus.png +0 -0
  315. package/docusaurus/static/img/favicon.ico +0 -0
  316. package/docusaurus/static/img/logo.svg +0 -10
  317. package/docusaurus/static/img/undraw_docusaurus_mountain.svg +0 -171
  318. package/docusaurus/static/img/undraw_docusaurus_react.svg +0 -170
  319. package/docusaurus/static/img/undraw_docusaurus_tree.svg +0 -40
  320. package/docusaurus/tsconfig.json +0 -8
  321. package/examples/README.md +0 -112
  322. package/examples/error-handling/README.md +0 -150
  323. package/examples/error-handling/payment-processor.vague +0 -287
  324. package/examples/github-sync/README.md +0 -74
  325. package/examples/github-sync/fetch-issues.vague +0 -47
  326. package/examples/github-sync/fetch-prs.vague +0 -40
  327. package/examples/github-sync/mission.vague +0 -101
  328. package/examples/github-sync/normalize.vague +0 -70
  329. package/examples/jsonplaceholder/README.md +0 -28
  330. package/examples/jsonplaceholder/posts.vague +0 -48
  331. package/examples/petstore/README.md +0 -35
  332. package/examples/petstore/openapi.yaml +0 -97
  333. package/examples/petstore/sync.vague +0 -52
  334. package/examples/temporal-comparison/README.md +0 -297
  335. package/examples/temporal-comparison/reconciliation.vague +0 -355
  336. package/examples/temporal-comparison/temporal/activities/index.ts +0 -8
  337. package/examples/temporal-comparison/temporal/activities/shipstation.ts +0 -225
  338. package/examples/temporal-comparison/temporal/activities/shopify.ts +0 -257
  339. package/examples/temporal-comparison/temporal/activities/storage.ts +0 -198
  340. package/examples/temporal-comparison/temporal/activities/stripe.ts +0 -169
  341. package/examples/temporal-comparison/temporal/activities/validation.ts +0 -205
  342. package/examples/temporal-comparison/temporal/client/schedule.ts +0 -218
  343. package/examples/temporal-comparison/temporal/config/retry.ts +0 -63
  344. package/examples/temporal-comparison/temporal/types/index.ts +0 -129
  345. package/examples/temporal-comparison/temporal/workers/main.ts +0 -130
  346. package/examples/temporal-comparison/temporal/workflows/orderReconciliation.ts +0 -262
  347. package/examples/xero/README.md +0 -88
  348. package/examples/xero/invoices.vague +0 -189
  349. package/src/api-integration.test.ts +0 -954
  350. package/src/ast/index.ts +0 -1
  351. package/src/ast/nodes.ts +0 -310
  352. package/src/auth/auth.test.ts +0 -326
  353. package/src/auth/circuit-breaker.test.ts +0 -390
  354. package/src/auth/circuit-breaker.ts +0 -379
  355. package/src/auth/credentials.test.ts +0 -273
  356. package/src/auth/credentials.ts +0 -246
  357. package/src/auth/index.ts +0 -40
  358. package/src/auth/oauth2-provider.ts +0 -177
  359. package/src/auth/rate-limiter.ts +0 -459
  360. package/src/auth/token-store.ts +0 -177
  361. package/src/auth/types.ts +0 -159
  362. package/src/benchmark/e2e.bench.ts +0 -288
  363. package/src/benchmark/evaluator.bench.ts +0 -331
  364. package/src/benchmark/fixtures.ts +0 -295
  365. package/src/benchmark/index.ts +0 -108
  366. package/src/benchmark/lexer.bench.ts +0 -69
  367. package/src/benchmark/parser.bench.ts +0 -103
  368. package/src/benchmark/resilience.bench.ts +0 -193
  369. package/src/benchmark/store.bench.ts +0 -147
  370. package/src/benchmark/utils.ts +0 -230
  371. package/src/cli.ts +0 -313
  372. package/src/errors/errors.test.ts +0 -234
  373. package/src/errors/index.ts +0 -223
  374. package/src/execution/execution.test.ts +0 -307
  375. package/src/execution/index.ts +0 -21
  376. package/src/execution/state.ts +0 -207
  377. package/src/execution/store.ts +0 -188
  378. package/src/index.ts +0 -169
  379. package/src/integration.test.ts +0 -192
  380. package/src/interpreter/context.ts +0 -57
  381. package/src/interpreter/evaluator.test.ts +0 -796
  382. package/src/interpreter/evaluator.ts +0 -245
  383. package/src/interpreter/executor.ts +0 -946
  384. package/src/interpreter/fetch-handler.ts +0 -302
  385. package/src/interpreter/http.test.ts +0 -423
  386. package/src/interpreter/http.ts +0 -308
  387. package/src/interpreter/index.ts +0 -32
  388. package/src/interpreter/pagination.ts +0 -207
  389. package/src/interpreter/progress.test.ts +0 -276
  390. package/src/interpreter/schema-matcher.test.ts +0 -160
  391. package/src/interpreter/schema-matcher.ts +0 -168
  392. package/src/interpreter/signals.ts +0 -73
  393. package/src/interpreter/step-handlers/for-handler.ts +0 -65
  394. package/src/interpreter/step-handlers/index.ts +0 -17
  395. package/src/interpreter/step-handlers/map-handler.ts +0 -24
  396. package/src/interpreter/step-handlers/match-handler.ts +0 -101
  397. package/src/interpreter/step-handlers/store-handler.ts +0 -78
  398. package/src/interpreter/step-handlers/types.ts +0 -17
  399. package/src/interpreter/step-handlers/validate-handler.ts +0 -30
  400. package/src/interpreter/step-handlers/webhook-handler.ts +0 -142
  401. package/src/lexer/index.ts +0 -18
  402. package/src/lexer/lexer.test.ts +0 -316
  403. package/src/lexer/tokens.ts +0 -179
  404. package/src/loader/index.ts +0 -288
  405. package/src/loader/loader.test.ts +0 -360
  406. package/src/oas/index.ts +0 -4
  407. package/src/oas/loader.ts +0 -126
  408. package/src/oas/oas.test.ts +0 -254
  409. package/src/oas/validator.ts +0 -299
  410. package/src/parser/base.ts +0 -124
  411. package/src/parser/expressions.test.ts +0 -525
  412. package/src/parser/expressions.ts +0 -314
  413. package/src/parser/index.ts +0 -3
  414. package/src/parser/match.test.ts +0 -296
  415. package/src/parser/parser.test.ts +0 -739
  416. package/src/parser/parser.ts +0 -1469
  417. package/src/parser/schedule.test.ts +0 -287
  418. package/src/parser/webhook.test.ts +0 -248
  419. package/src/plugin.ts +0 -83
  420. package/src/scheduler/cron-parser.test.ts +0 -236
  421. package/src/scheduler/cron-parser.ts +0 -236
  422. package/src/scheduler/index.ts +0 -10
  423. package/src/scheduler/scheduler.ts +0 -443
  424. package/src/scheduler/types.ts +0 -71
  425. package/src/stores/factory.ts +0 -104
  426. package/src/stores/file.test.ts +0 -276
  427. package/src/stores/file.ts +0 -211
  428. package/src/stores/index.ts +0 -6
  429. package/src/stores/memory.test.ts +0 -238
  430. package/src/stores/memory.ts +0 -63
  431. package/src/stores/postgrest.test.ts +0 -488
  432. package/src/stores/postgrest.ts +0 -263
  433. package/src/stores/stores.test.ts +0 -197
  434. package/src/stores/types.ts +0 -58
  435. package/src/sync/index.ts +0 -16
  436. package/src/sync/state.ts +0 -126
  437. package/src/sync/store.ts +0 -139
  438. package/src/sync/sync.test.ts +0 -271
  439. package/src/utils/async.ts +0 -10
  440. package/src/utils/file.ts +0 -106
  441. package/src/utils/index.ts +0 -14
  442. package/src/utils/logger.ts +0 -53
  443. package/src/utils/path.ts +0 -47
  444. package/src/webhook/index.ts +0 -15
  445. package/src/webhook/server.test.ts +0 -253
  446. package/src/webhook/server.ts +0 -389
  447. package/src/webhook/store.ts +0 -239
  448. package/src/webhook/types.ts +0 -93
  449. package/tsconfig.json +0 -17
  450. package/vitest.config.ts +0 -39
@@ -0,0 +1,182 @@
1
+ /**
2
+ * Append-only storage for execution events. The contract: events for a given
3
+ * execution are read back in append order with a contiguous `seq` starting at 0.
4
+ */
5
+ import { appendFile, readFile, readdir, mkdir } from 'node:fs/promises';
6
+ import { join } from 'node:path';
7
+ /** True for the pause lifecycle events the pause read-model folds. */
8
+ function isPauseEvent(event) {
9
+ return event.type === 'pause.created' || event.type === 'pause.resumed';
10
+ }
11
+ /**
12
+ * Fold `checkpoint.advanced` events into the latest checkpoint per key. "Latest"
13
+ * is the furthest-advanced sync: ordered by `syncedAt` (so a checkpoint never
14
+ * moves backwards across runs — incremental sync stays monotonic), ties broken
15
+ * by the recording time `at` then `seq`. Shared by every store backend so the
16
+ * read-model semantics stay identical across them.
17
+ */
18
+ export function reduceCheckpoints(events, mission) {
19
+ const latest = new Map();
20
+ const isNewer = (a, prior) => {
21
+ if (a.syncedAt !== prior.syncedAt)
22
+ return a.syncedAt > prior.syncedAt;
23
+ if (a.at !== prior.at)
24
+ return a.at > prior.at;
25
+ return a.seq > prior.seq;
26
+ };
27
+ for (const event of events) {
28
+ if (event.type !== 'checkpoint.advanced')
29
+ continue;
30
+ if (mission !== undefined && event.mission !== mission)
31
+ continue;
32
+ const candidate = {
33
+ syncedAt: event.syncedAt,
34
+ at: event.at,
35
+ seq: event.seq,
36
+ record: {
37
+ key: event.key,
38
+ syncedAt: event.syncedAt,
39
+ recordCount: event.recordCount,
40
+ cursor: event.cursor,
41
+ mission: event.mission,
42
+ executionId: event.executionId,
43
+ },
44
+ };
45
+ const prior = latest.get(event.key);
46
+ if (!prior || isNewer(candidate, prior))
47
+ latest.set(event.key, candidate);
48
+ }
49
+ return Array.from(latest.values()).map((v) => v.record);
50
+ }
51
+ /** In-memory execution log — for tests and ephemeral runs. */
52
+ export class MemoryExecutionLog {
53
+ events = new Map();
54
+ async append(event) {
55
+ const existing = this.events.get(event.executionId);
56
+ const log = existing ?? [];
57
+ const stored = { ...event, seq: log.length, at: new Date().toISOString() };
58
+ log.push(stored);
59
+ if (!existing)
60
+ this.events.set(event.executionId, log);
61
+ return stored;
62
+ }
63
+ async read(executionId) {
64
+ return [...(this.events.get(executionId) ?? [])];
65
+ }
66
+ async listCheckpoints(mission) {
67
+ const all = [];
68
+ for (const log of this.events.values())
69
+ all.push(...log);
70
+ return reduceCheckpoints(all, mission);
71
+ }
72
+ async listPauses() {
73
+ const pauses = [];
74
+ for (const log of this.events.values())
75
+ pauses.push(...log.filter(isPauseEvent));
76
+ return pauses;
77
+ }
78
+ }
79
+ /**
80
+ * Durable execution log: one append-only JSON-lines file per execution.
81
+ *
82
+ * Appends are O_APPEND single-line writes, so a crash mid-write can at worst
83
+ * leave a torn final line, which {@link read} skips. The log therefore survives
84
+ * a process restart — a resumed run reads its prior events back. Dev-grade: no
85
+ * atomic seq assignment or locking. For a transactional single-process backend
86
+ * use {@link SqliteExecutionLog}; Postgres (multi-node) is still to come.
87
+ */
88
+ export class FileExecutionLog {
89
+ dir;
90
+ /** Cached next-seq per execution, lazily initialised from disk. */
91
+ counts = new Map();
92
+ constructor(dir = '.reqon-data/execution-log') {
93
+ this.dir = dir;
94
+ }
95
+ pathFor(executionId) {
96
+ // executionId is runtime-generated (uuid); keep the filename simple/safe.
97
+ const safe = executionId.replace(/[^A-Za-z0-9_.-]/g, '_');
98
+ return join(this.dir, `${safe}.jsonl`);
99
+ }
100
+ async append(event) {
101
+ await mkdir(this.dir, { recursive: true });
102
+ let seq = this.counts.get(event.executionId);
103
+ let prefix = '';
104
+ if (seq === undefined) {
105
+ // First append this instance: derive next seq from any persisted events,
106
+ // and detect an unterminated tail left by a crash mid-append. Writing
107
+ // straight after it would concatenate this event onto the torn line and
108
+ // corrupt it; a leading newline terminates the torn line (which read()
109
+ // still skips) and keeps this event a clean, parseable record.
110
+ const raw = await this.readRaw(event.executionId);
111
+ seq = this.parse(raw).length;
112
+ if (raw.length > 0 && !raw.endsWith('\n'))
113
+ prefix = '\n';
114
+ }
115
+ const stored = { ...event, seq, at: new Date().toISOString() };
116
+ // The log can carry resume state (e.g. a pause checkpoint's captured
117
+ // variables), so create files owner-only (0o600) — never world-readable.
118
+ // mode applies on creation; appends to an existing file keep its mode.
119
+ await appendFile(this.pathFor(event.executionId), `${prefix}${JSON.stringify(stored)}\n`, {
120
+ encoding: 'utf-8',
121
+ mode: 0o600,
122
+ });
123
+ this.counts.set(event.executionId, seq + 1);
124
+ return stored;
125
+ }
126
+ async read(executionId) {
127
+ return this.parse(await this.readRaw(executionId));
128
+ }
129
+ async listCheckpoints(mission) {
130
+ return reduceCheckpoints(await this.readAll(), mission);
131
+ }
132
+ async listPauses() {
133
+ return (await this.readAll()).filter(isPauseEvent);
134
+ }
135
+ /** Read and parse every execution's events in this directory. */
136
+ async readAll() {
137
+ let files;
138
+ try {
139
+ files = await readdir(this.dir);
140
+ }
141
+ catch (err) {
142
+ if (err.code === 'ENOENT')
143
+ return [];
144
+ throw err;
145
+ }
146
+ const all = [];
147
+ for (const file of files) {
148
+ if (!file.endsWith('.jsonl'))
149
+ continue;
150
+ all.push(...this.parse(await readFile(join(this.dir, file), 'utf-8')));
151
+ }
152
+ return all;
153
+ }
154
+ async readRaw(executionId) {
155
+ try {
156
+ return await readFile(this.pathFor(executionId), 'utf-8');
157
+ }
158
+ catch (err) {
159
+ if (err.code === 'ENOENT')
160
+ return '';
161
+ throw err;
162
+ }
163
+ }
164
+ parse(content) {
165
+ const events = [];
166
+ for (const line of content.split('\n')) {
167
+ if (line.trim() === '')
168
+ continue;
169
+ try {
170
+ events.push(JSON.parse(line));
171
+ }
172
+ catch {
173
+ // A torn line from a crash mid-append. Each event is an independent
174
+ // single-line record, so skip just this line rather than discarding
175
+ // everything after it (a healed torn line can sit mid-file, followed
176
+ // by valid events appended on resume).
177
+ continue;
178
+ }
179
+ }
180
+ return events;
181
+ }
182
+ }
package/dist/index.d.ts CHANGED
@@ -1,16 +1,37 @@
1
+ /**
2
+ * ---
3
+ * purpose: Main library entry point - exports all public APIs
4
+ * exports:
5
+ * - parse, execute, fromFile, fromPath, reqon - convenience functions
6
+ * - ReqonLexer, ReqonParser - parsing infrastructure
7
+ * - MissionExecutor - runtime execution
8
+ * - Store adapters, Scheduler, Sync, Webhook, Observability
9
+ * related:
10
+ * - ./cli.ts - CLI entry point using these exports
11
+ * - ./plugin.ts - Vague plugin registration
12
+ * - ./interpreter/executor.ts - core execution logic
13
+ * ---
14
+ */
1
15
  export { ReqonLexer, ReqonTokenType, type ReqonToken } from './lexer/index.js';
2
16
  export { reqonPlugin, registerReqonPlugin } from './plugin.js';
3
17
  export { ReqonParser } from './parser/index.js';
4
18
  export * from './ast/index.js';
5
19
  export { MissionExecutor, HttpClient, BearerAuthProvider, OAuth2AuthProvider, createContext, evaluate, type ExecutionResult, type ExecutionError, type ExecutorConfig, type ExecutionContext, type ProgressCallbacks, type ExecutionStartEvent, type ExecutionCompleteEvent, type StageStartEvent, type StageCompleteEvent, } from './interpreter/index.js';
6
20
  export { MemoryStore, FileStore, createStore, type StoreAdapter, type StoreFilter, type StoreConfig, } from './stores/index.js';
7
- export { createExecutionState, findResumePoint, canResume, getProgress, getExecutionSummary, FileExecutionStore, MemoryExecutionStore, type ExecutionState, type ExecutionStore, type StageState, } from './execution/index.js';
21
+ export { createExecutionState, findResumePoint, canResume, getProgress, getExecutionSummary, FileExecutionStore, MemoryExecutionStore, type ExecutionState, type ExecutionStore, type StageState, type LiveProgress, } from './execution/index.js';
22
+ export { MemoryExecutionLog, FileExecutionLog, SqliteExecutionLog, PostgresExecutionLog, foldLog, loadState, effectId, reduceCheckpoints, type ExecutionEvent, type StoredEvent, type ExecutionLogStore, type CheckpointRecord, type FoldedState, } from './execution-log/index.js';
8
23
  export { Scheduler, parseCronExpression, getNextRunTime, intervalToMs, shouldRunNow, type ScheduledJob, type SchedulerState, type ScheduleEvent, type SchedulerCallbacks, type SchedulerConfig, type ScheduledMission, } from './scheduler/index.js';
9
- export { generateCheckpointKey, formatSinceDate, parseSinceDate, EPOCH, FileSyncStore, MemorySyncStore, type SyncCheckpoint, type SyncStore, } from './sync/index.js';
24
+ export { generateCheckpointKey, formatSinceDate, parseSinceDate, EPOCH, FileSyncStore, MemorySyncStore, LogBackedSyncStore, type SyncCheckpoint, type SyncStore, } from './sync/index.js';
10
25
  export { ReqonError, ParseError, LexerError, RuntimeError, ValidationError, formatErrors, getSourceLine, getSourceContext, type SourceLocation, type ErrorContext, } from './errors/index.js';
11
26
  export { loadMission, isMissionFolder, getMissionName, type LoadResult, type LoadOptions, } from './loader/index.js';
12
27
  export { loadEnv, loadCredentials, resolveCredentials, resolveEnvString, hasEnvReference, credentialsFromEnv, type CredentialsConfig, type LoadEnvResult, type AuthCredentials, type SourceCredentials, } from './auth/credentials.js';
13
28
  export { WebhookServer, MemoryWebhookStore, FileWebhookStore, type WebhookStore, type WebhookServerConfig, type WebhookServerCallbacks, type WebhookRegistration, type WebhookEvent, type WaitResult, } from './webhook/index.js';
29
+ export { ControlServer, type ControlServerConfig, type ControlServerCallbacks, type StatusResponse, type ControlResponse, } from './control/index.js';
30
+ export { ObservabilityEmitter, createEmitter, type ObservabilityEvent, type EventType, type EventHandler, type EventEmitter, type MissionStartPayload, type MissionCompletePayload, type StageStartPayload, type StageCompletePayload, type StepStartPayload, type StepCompletePayload, type FetchStartPayload, type FetchCompletePayload, type DataStorePayload, type LoopStartPayload, type LoopCompletePayload, type WebhookRegisterPayload, type WebhookCompletePayload, createStructuredLogger, ConsoleOutput, JsonLinesOutput, BufferOutput, type StructuredLogger, type LogEntry, type LogOutput, type Span, type CreateLoggerOptions, SpanBuilder, OTelEventAdapter, OTLPExporter, createOTelListener, type OTelSpan, type OTLPExporterConfig, } from './observability/index.js';
31
+ export { MCP_SERVER_VERSION } from './mcp/index.js';
32
+ export { BaseDebugController, CLIDebugger, type DebugController, type DebugMode, type DebugPauseReason, type DebugSnapshot, type DebugCommand, type DebugLocation, } from './debug/index.js';
33
+ export { FileTraceStore, MemoryTraceStore, TraceRecorder, TraceReplayer, LogTraceView, traceTimelineFromLog, createTraceRecorder, createTraceReplayer, createExecutionTrace, safeClone, truncateForTrace, type LogTimelineEntry, type LogTraceSummary, type TraceStore, type TraceSnapshot, type StoreSnapshot as TraceStoreSnapshot, type LoopContext as TraceLoopContext, type ExecutionTrace, type TraceRecorderConfig, type ReplaySession, type ReplayStepResult, type TimelineEvent, type VariableChange, type SnapshotDiff, } from './trace/index.js';
34
+ export { FilePauseStore, MemoryPauseStore, LogBackedPauseStore, PauseManager, createPauseManager, parseDuration, formatDuration, createPauseState, isPauseExpired, getRemainingTime, getPauseSummary, type PauseStore, type PauseState, type PauseCheckpoint, type PauseResumeTriggerState, type PauseManagerConfig, type CreatePauseOptions, type PauseStatus, } from './pause/index.js';
14
35
  import { type ExecutorConfig } from './interpreter/index.js';
15
36
  import type { ReqonProgram } from './ast/index.js';
16
37
  export declare function parse(source: string, filePath?: string): ReqonProgram;
package/dist/index.js CHANGED
@@ -1,3 +1,17 @@
1
+ /**
2
+ * ---
3
+ * purpose: Main library entry point - exports all public APIs
4
+ * exports:
5
+ * - parse, execute, fromFile, fromPath, reqon - convenience functions
6
+ * - ReqonLexer, ReqonParser - parsing infrastructure
7
+ * - MissionExecutor - runtime execution
8
+ * - Store adapters, Scheduler, Sync, Webhook, Observability
9
+ * related:
10
+ * - ./cli.ts - CLI entry point using these exports
11
+ * - ./plugin.ts - Vague plugin registration
12
+ * - ./interpreter/executor.ts - core execution logic
13
+ * ---
14
+ */
1
15
  export { ReqonLexer, ReqonTokenType } from './lexer/index.js';
2
16
  export { reqonPlugin, registerReqonPlugin } from './plugin.js';
3
17
  export { ReqonParser } from './parser/index.js';
@@ -5,12 +19,30 @@ export * from './ast/index.js';
5
19
  export { MissionExecutor, HttpClient, BearerAuthProvider, OAuth2AuthProvider, createContext, evaluate, } from './interpreter/index.js';
6
20
  export { MemoryStore, FileStore, createStore, } from './stores/index.js';
7
21
  export { createExecutionState, findResumePoint, canResume, getProgress, getExecutionSummary, FileExecutionStore, MemoryExecutionStore, } from './execution/index.js';
22
+ export { MemoryExecutionLog, FileExecutionLog, SqliteExecutionLog, PostgresExecutionLog, foldLog, loadState, effectId, reduceCheckpoints, } from './execution-log/index.js';
8
23
  export { Scheduler, parseCronExpression, getNextRunTime, intervalToMs, shouldRunNow, } from './scheduler/index.js';
9
- export { generateCheckpointKey, formatSinceDate, parseSinceDate, EPOCH, FileSyncStore, MemorySyncStore, } from './sync/index.js';
24
+ export { generateCheckpointKey, formatSinceDate, parseSinceDate, EPOCH, FileSyncStore, MemorySyncStore, LogBackedSyncStore, } from './sync/index.js';
10
25
  export { ReqonError, ParseError, LexerError, RuntimeError, ValidationError, formatErrors, getSourceLine, getSourceContext, } from './errors/index.js';
11
26
  export { loadMission, isMissionFolder, getMissionName, } from './loader/index.js';
12
27
  export { loadEnv, loadCredentials, resolveCredentials, resolveEnvString, hasEnvReference, credentialsFromEnv, } from './auth/credentials.js';
13
28
  export { WebhookServer, MemoryWebhookStore, FileWebhookStore, } from './webhook/index.js';
29
+ // Control server for pause/resume and status queries
30
+ export { ControlServer, } from './control/index.js';
31
+ // Observability
32
+ export {
33
+ // Event system
34
+ ObservabilityEmitter, createEmitter,
35
+ // Logger
36
+ createStructuredLogger, ConsoleOutput, JsonLinesOutput, BufferOutput,
37
+ // OpenTelemetry
38
+ SpanBuilder, OTelEventAdapter, OTLPExporter, createOTelListener, } from './observability/index.js';
39
+ export { MCP_SERVER_VERSION } from './mcp/index.js';
40
+ // Debug
41
+ export { BaseDebugController, CLIDebugger, } from './debug/index.js';
42
+ // Trace - time-travel debugging
43
+ export { FileTraceStore, MemoryTraceStore, TraceRecorder, TraceReplayer, LogTraceView, traceTimelineFromLog, createTraceRecorder, createTraceReplayer, createExecutionTrace, safeClone, truncateForTrace, } from './trace/index.js';
44
+ // Pause - resource-free long pauses
45
+ export { FilePauseStore, MemoryPauseStore, LogBackedPauseStore, PauseManager, createPauseManager, parseDuration, formatDuration, createPauseState, isPauseExpired, getRemainingTime, getPauseSummary, } from './pause/index.js';
14
46
  import { readFile } from 'node:fs/promises';
15
47
  import { resolve } from 'node:path';
16
48
  import { ReqonLexer } from './lexer/index.js';
@@ -43,8 +75,8 @@ export async function fromFile(filePath, config = {}) {
43
75
  * - Folder: ./sync-invoices/ (with mission.reqon + action files)
44
76
  */
45
77
  export async function fromPath(path, config = {}) {
46
- const { program } = await loadMission(path);
47
- const executor = new MissionExecutor(config);
78
+ const { program, baseDir } = await loadMission(path);
79
+ const executor = new MissionExecutor({ ...config, missionDir: baseDir });
48
80
  return executor.execute(program);
49
81
  }
50
82
  // Tagged template literal for inline missions
@@ -1,13 +1,42 @@
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
  import type { SchemaDefinition } from 'vague-lang';
2
15
  import type { StoreAdapter } from '../stores/types.js';
3
16
  import type { HttpClient } from './http.js';
17
+ /**
18
+ * Mutable per-action execution state. Parallel actions (`run [A, B]`) must not
19
+ * share this — each gets its own scope so their step counters and deferred sync
20
+ * checkpoints can't corrupt each other. Nested scopes (for/match) inherit the
21
+ * same reference so the whole action shares one counter/checkpoint list.
22
+ */
23
+ export interface ActionScope {
24
+ /** Monotonic step index within the action (for trace/debug positions). */
25
+ stepIndex: number;
26
+ /** Current retry attempt of the action (0-based), for effect identity. */
27
+ attempt: number;
28
+ /** Sync checkpoints deferred until the action's data is durably stored. */
29
+ pendingCheckpoints: Array<() => Promise<void>>;
30
+ }
4
31
  export interface ExecutionContext {
5
32
  stores: Map<string, StoreAdapter>;
33
+ storeTypes: Map<string, string>;
6
34
  sources: Map<string, HttpClient>;
7
35
  schemas: Map<string, SchemaDefinition>;
8
36
  variables: Map<string, unknown>;
9
37
  response?: unknown;
10
38
  parent?: ExecutionContext;
39
+ actionScope?: ActionScope;
11
40
  }
12
41
  export declare function createContext(): ExecutionContext;
13
42
  export declare function childContext(parent: ExecutionContext): ExecutionContext;
@@ -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,10 +23,14 @@ 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(),
15
30
  parent,
31
+ // Nested scopes (for/match) share the action's scope so the step counter
32
+ // and checkpoint list stay coherent across the whole action.
33
+ actionScope: parent.actionScope,
16
34
  };
17
35
  }
18
36
  export function getVariable(ctx, name) {
@@ -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;