@temelj/workflow 0.0.0-alpha.3 → 0.0.0-alpha.4

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 (461) hide show
  1. package/README.md +394 -2
  2. package/dist/attributes.d.mts +11 -9
  3. package/dist/attributes.mjs +23 -5
  4. package/dist/bundle.d.mts +5 -23
  5. package/dist/bundle.mjs +2 -18
  6. package/dist/client/create.d.mts +26 -23
  7. package/dist/client/create.mjs +26 -32
  8. package/dist/client/facades.d.mts +12 -18
  9. package/dist/client/facades.mjs +102 -93
  10. package/dist/client/mod.mjs +1 -2
  11. package/dist/client/run-handle.d.mts +17 -54
  12. package/dist/client/run-handle.mjs +35 -105
  13. package/dist/client/worker-options.d.mts +8 -8
  14. package/dist/client/worker-options.mjs +11 -11
  15. package/dist/cloudflare/cloudflare.d.mts +4 -5
  16. package/dist/cloudflare/codec.d.mts +28 -13
  17. package/dist/cloudflare/codec.mjs +40 -17
  18. package/dist/cloudflare/entrypoint.d.mts +3 -4
  19. package/dist/cloudflare/entrypoint.mjs +4 -3
  20. package/dist/cloudflare/execution.d.mts +3 -4
  21. package/dist/cloudflare/execution.mjs +20 -13
  22. package/dist/cloudflare/host.d.mts +6 -7
  23. package/dist/cloudflare/host.mjs +7 -6
  24. package/dist/cloudflare/mod.d.mts +4 -4
  25. package/dist/cloudflare/mod.mjs +2 -2
  26. package/dist/cloudflare/name.d.mts +3 -4
  27. package/dist/cloudflare/name.mjs +3 -3
  28. package/dist/cloudflare/registry.d.mts +3 -23
  29. package/dist/cloudflare/registry.mjs +2 -20
  30. package/dist/cloudflare/runtime.d.mts +11 -18
  31. package/dist/cloudflare/runtime.mjs +52 -73
  32. package/dist/cloudflare/step.d.mts +6 -6
  33. package/dist/cloudflare/step.mjs +69 -57
  34. package/dist/cloudflare/types.d.mts +17 -36
  35. package/dist/collection.d.mts +8 -11
  36. package/dist/collection.mjs +10 -14
  37. package/dist/compiled-function.d.mts +14 -19
  38. package/dist/compiled-function.mjs +12 -24
  39. package/dist/compiled.d.mts +4 -0
  40. package/dist/compiled.mjs +4 -0
  41. package/dist/compiler/ast.d.mts +26 -0
  42. package/dist/{vite → compiler}/ast.mjs +24 -16
  43. package/dist/{vite → compiler}/error.d.mts +4 -6
  44. package/dist/{vite → compiler}/error.mjs +14 -16
  45. package/dist/compiler/manifest.d.mts +6 -0
  46. package/dist/{vite → compiler}/manifest.mjs +9 -7
  47. package/dist/compiler/plugin.d.mts +7 -0
  48. package/dist/{vite → compiler}/plugin.mjs +45 -46
  49. package/dist/compiler/safety.d.mts +12 -0
  50. package/dist/{vite → compiler}/safety.mjs +5 -11
  51. package/dist/{vite → compiler}/source-edit.d.mts +3 -4
  52. package/dist/{vite → compiler}/source-edit.mjs +1 -1
  53. package/dist/{vite → compiler}/source-map.d.mts +4 -3
  54. package/dist/{vite → compiler}/source-map.mjs +3 -3
  55. package/dist/compiler/source.d.mts +7 -0
  56. package/dist/{vite → compiler}/source.mjs +1 -1
  57. package/dist/compiler/transform.d.mts +12 -0
  58. package/dist/{vite → compiler}/transform.mjs +37 -38
  59. package/dist/definition.d.mts +17 -25
  60. package/dist/definition.mjs +19 -35
  61. package/dist/engine/child-workflow.d.mts +5 -9
  62. package/dist/engine/child-workflow.mjs +46 -67
  63. package/dist/engine/command-identity.d.mts +5 -6
  64. package/dist/engine/command-identity.mjs +9 -5
  65. package/dist/engine/context.d.mts +17 -0
  66. package/dist/engine/create.d.mts +36 -94
  67. package/dist/engine/create.mjs +55 -260
  68. package/dist/engine/deterministic.d.mts +6 -11
  69. package/dist/engine/deterministic.mjs +47 -68
  70. package/dist/engine/durable-command.d.mts +5 -5
  71. package/dist/engine/durable-command.mjs +2 -2
  72. package/dist/engine/execution-service.d.mts +20 -24
  73. package/dist/engine/execution-service.mjs +54 -52
  74. package/dist/engine/hooks.d.mts +17 -39
  75. package/dist/engine/hooks.mjs +73 -94
  76. package/dist/engine/inspection.d.mts +23 -15
  77. package/dist/engine/inspection.mjs +55 -29
  78. package/dist/engine/lifecycle.d.mts +6 -12
  79. package/dist/engine/lifecycle.mjs +5 -5
  80. package/dist/engine/lock-replay.d.mts +8 -15
  81. package/dist/engine/lock-replay.mjs +12 -25
  82. package/dist/engine/lock.d.mts +10 -15
  83. package/dist/engine/lock.mjs +65 -51
  84. package/dist/engine/message.d.mts +14 -34
  85. package/dist/engine/message.mjs +94 -127
  86. package/dist/engine/observation.d.mts +9 -11
  87. package/dist/engine/observation.mjs +18 -27
  88. package/dist/engine/replay.d.mts +18 -19
  89. package/dist/engine/replay.mjs +32 -56
  90. package/dist/engine/resume.d.mts +16 -0
  91. package/dist/engine/resume.mjs +24 -0
  92. package/dist/engine/retry.d.mts +15 -19
  93. package/dist/engine/retry.mjs +17 -17
  94. package/dist/engine/run-data.d.mts +4 -8
  95. package/dist/engine/run-data.mjs +24 -22
  96. package/dist/engine/run-service.d.mts +24 -33
  97. package/dist/engine/run-service.mjs +125 -93
  98. package/dist/engine/run-utils.d.mts +11 -13
  99. package/dist/engine/run-utils.mjs +23 -46
  100. package/dist/engine/schedule.d.mts +8 -22
  101. package/dist/engine/schedule.mjs +37 -34
  102. package/dist/engine/serialization.d.mts +9 -6
  103. package/dist/engine/serialization.mjs +30 -21
  104. package/dist/engine/signals.d.mts +23 -0
  105. package/dist/engine/signals.mjs +41 -0
  106. package/dist/engine/start.d.mts +18 -0
  107. package/dist/engine/start.mjs +88 -0
  108. package/dist/engine/state.d.mts +37 -67
  109. package/dist/engine/state.mjs +119 -280
  110. package/dist/engine/step-api.d.mts +5 -8
  111. package/dist/engine/step-api.mjs +16 -16
  112. package/dist/engine/stream-reader.d.mts +12 -0
  113. package/dist/engine/stream-reader.mjs +154 -0
  114. package/dist/engine/stream.d.mts +9 -54
  115. package/dist/engine/stream.mjs +54 -196
  116. package/dist/engine/summary/recovery.d.mts +35 -0
  117. package/dist/engine/summary/recovery.mjs +363 -0
  118. package/dist/engine/summary/runs.d.mts +43 -0
  119. package/dist/engine/summary/runs.mjs +294 -0
  120. package/dist/engine/summary/step-attempts.d.mts +5 -10
  121. package/dist/engine/summary/step-attempts.mjs +157 -36
  122. package/dist/engine/summary/tally.d.mts +44 -0
  123. package/dist/engine/summary/tally.mjs +142 -0
  124. package/dist/engine/task.d.mts +4 -5
  125. package/dist/engine/task.mjs +40 -48
  126. package/dist/errors/base.d.mts +17 -77
  127. package/dist/errors/base.mjs +26 -327
  128. package/dist/errors/capability.d.mts +3 -6
  129. package/dist/errors/capability.mjs +4 -8
  130. package/dist/errors/codes.d.mts +116 -0
  131. package/dist/{types/error-code.mjs → errors/codes.mjs} +2 -17
  132. package/dist/errors/definition.d.mts +3 -17
  133. package/dist/errors/definition.mjs +5 -42
  134. package/dist/errors/failures.d.mts +17 -51
  135. package/dist/errors/failures.mjs +35 -102
  136. package/dist/errors/hook.d.mts +5 -9
  137. package/dist/errors/hook.mjs +4 -16
  138. package/dist/errors/implementation.d.mts +3 -6
  139. package/dist/errors/implementation.mjs +7 -12
  140. package/dist/errors/lock.d.mts +7 -20
  141. package/dist/errors/lock.mjs +8 -44
  142. package/dist/errors/message.d.mts +14 -59
  143. package/dist/errors/message.mjs +13 -39
  144. package/dist/errors/mod.d.mts +4 -5
  145. package/dist/errors/mod.mjs +5 -7
  146. package/dist/errors/records.d.mts +10 -4
  147. package/dist/errors/records.mjs +256 -256
  148. package/dist/errors/run.d.mts +27 -68
  149. package/dist/errors/run.mjs +31 -85
  150. package/dist/errors/schedule.d.mts +7 -18
  151. package/dist/errors/schedule.mjs +7 -39
  152. package/dist/errors/step.d.mts +12 -45
  153. package/dist/errors/step.mjs +13 -34
  154. package/dist/errors/stream.d.mts +8 -16
  155. package/dist/errors/stream.mjs +7 -41
  156. package/dist/esbuild.d.mts +6 -4
  157. package/dist/esbuild.mjs +2 -1
  158. package/dist/events/descriptors.d.mts +12 -241
  159. package/dist/events/descriptors.mjs +12 -5
  160. package/dist/history/projection.d.mts +4 -6
  161. package/dist/history/projection.mjs +22 -26
  162. package/dist/history/replay-projection.d.mts +44 -48
  163. package/dist/history/replay-projection.mjs +41 -50
  164. package/dist/history/{mod.d.mts → replay.d.mts} +16 -21
  165. package/dist/history/{mod.mjs → replay.mjs} +21 -25
  166. package/dist/history/sequencer.d.mts +10 -11
  167. package/dist/history/sequencer.mjs +11 -7
  168. package/dist/history/step-attempts.d.mts +4 -7
  169. package/dist/history/step-attempts.mjs +8 -9
  170. package/dist/history/timeline.d.mts +4 -13
  171. package/dist/history/timeline.mjs +46 -265
  172. package/dist/history/validator.d.mts +5 -7
  173. package/dist/history/validator.mjs +9 -24
  174. package/dist/hook-token.d.mts +7 -0
  175. package/dist/hook-token.mjs +32 -0
  176. package/dist/ids.d.mts +8 -0
  177. package/dist/ids.mjs +21 -0
  178. package/dist/message-options.d.mts +11 -5
  179. package/dist/message-options.mjs +9 -7
  180. package/dist/mod.d.mts +32 -36
  181. package/dist/mod.mjs +9 -13
  182. package/dist/otel/metrics.d.mts +31 -0
  183. package/dist/otel/metrics.mjs +60 -0
  184. package/dist/otel/mod.d.mts +3 -0
  185. package/dist/otel/mod.mjs +3 -0
  186. package/dist/otel/spans.d.mts +24 -0
  187. package/dist/otel/spans.mjs +218 -0
  188. package/dist/otel/support.d.mts +15 -8
  189. package/dist/otel/support.mjs +18 -40
  190. package/dist/{otel.d.mts → otel/telemetry.d.mts} +5 -6
  191. package/dist/otel/telemetry.mjs +305 -0
  192. package/dist/pagination.d.mts +6 -12
  193. package/dist/pagination.mjs +10 -14
  194. package/dist/registry.d.mts +8 -5
  195. package/dist/registry.mjs +19 -10
  196. package/dist/rolldown.d.mts +6 -4
  197. package/dist/rolldown.mjs +2 -1
  198. package/dist/rollup.d.mts +6 -4
  199. package/dist/rollup.mjs +2 -1
  200. package/dist/rspack.d.mts +6 -4
  201. package/dist/rspack.mjs +2 -1
  202. package/dist/run-status.d.mts +29 -0
  203. package/dist/run-status.mjs +42 -0
  204. package/dist/schema/common.d.mts +22 -0
  205. package/dist/schema/common.mjs +54 -0
  206. package/dist/schema/error.d.mts +17 -0
  207. package/dist/schema/error.mjs +39 -0
  208. package/dist/schema/events.d.mts +446 -0
  209. package/dist/schema/events.mjs +235 -0
  210. package/dist/schema/pagination.d.mts +5 -0
  211. package/dist/schema/pagination.mjs +11 -0
  212. package/dist/schema/persisted-value.d.mts +8 -0
  213. package/dist/schema/persisted-value.mjs +94 -0
  214. package/dist/schema/run.d.mts +51 -0
  215. package/dist/schema/run.mjs +88 -0
  216. package/dist/schema/store.d.mts +94 -0
  217. package/dist/schema/store.mjs +116 -0
  218. package/dist/step-definition.d.mts +4 -9
  219. package/dist/step-definition.mjs +2 -2
  220. package/dist/store/capabilities.d.mts +8 -9
  221. package/dist/store/capabilities.mjs +7 -7
  222. package/dist/store/cleanup.d.mts +9 -14
  223. package/dist/store/cleanup.mjs +86 -85
  224. package/dist/store/create.d.mts +28 -29
  225. package/dist/store/create.mjs +10 -11
  226. package/dist/store/events.d.mts +48 -0
  227. package/dist/store/events.mjs +263 -0
  228. package/dist/store/indexes.d.mts +25 -0
  229. package/dist/store/indexes.mjs +282 -0
  230. package/dist/store/instrumentation.d.mts +2 -3
  231. package/dist/store/instrumentation.mjs +30 -30
  232. package/dist/store/lock.d.mts +4 -5
  233. package/dist/store/lock.mjs +5 -7
  234. package/dist/store/materialization.d.mts +10 -17
  235. package/dist/store/materialization.mjs +39 -33
  236. package/dist/store/mod.d.mts +3 -3
  237. package/dist/store/mod.mjs +2 -2
  238. package/dist/store/query.d.mts +13 -17
  239. package/dist/store/query.mjs +13 -13
  240. package/dist/store/run.d.mts +25 -34
  241. package/dist/store/run.mjs +67 -108
  242. package/dist/store/schedule.d.mts +6 -8
  243. package/dist/store/schedule.mjs +11 -11
  244. package/dist/store/step-attempt.d.mts +9 -12
  245. package/dist/store/step-attempt.mjs +9 -9
  246. package/dist/store/storage-value.d.mts +3 -3
  247. package/dist/store/storage-value.mjs +17 -1
  248. package/dist/store/validation.d.mts +17 -20
  249. package/dist/store/validation.mjs +30 -33
  250. package/dist/store-keys.d.mts +35 -47
  251. package/dist/store-keys.mjs +9 -17
  252. package/dist/telemetry.d.mts +16 -16
  253. package/dist/telemetry.mjs +3 -3
  254. package/dist/temporal.d.mts +11 -16
  255. package/dist/temporal.mjs +8 -9
  256. package/dist/timer.d.mts +12 -10
  257. package/dist/timer.mjs +11 -3
  258. package/dist/types/cleanup.d.mts +13 -50
  259. package/dist/types/cleanup.mjs +1 -22
  260. package/dist/types/client.d.mts +101 -162
  261. package/dist/types/{vite.d.mts → compiler.d.mts} +17 -24
  262. package/dist/types/compiler.mjs +1 -0
  263. package/dist/types/definition.d.mts +22 -34
  264. package/dist/types/engine-options.d.mts +10 -17
  265. package/dist/types/engine.d.mts +15 -274
  266. package/dist/types/error.d.mts +15 -217
  267. package/dist/types/error.mjs +1 -48
  268. package/dist/types/events.d.mts +59 -2730
  269. package/dist/types/events.mjs +1 -283
  270. package/dist/types/hook.d.mts +27 -85
  271. package/dist/types/hook.mjs +1 -66
  272. package/dist/types/ids.d.mts +9 -0
  273. package/dist/types/ids.mjs +1 -0
  274. package/dist/types/lock.d.mts +8 -26
  275. package/dist/types/lock.mjs +1 -18
  276. package/dist/types/message.d.mts +29 -43
  277. package/dist/types/observation.d.mts +43 -58
  278. package/dist/types/pagination.d.mts +6 -22
  279. package/dist/types/pagination.mjs +1 -13
  280. package/dist/types/result.d.mts +11 -43
  281. package/dist/types/retry.d.mts +7 -14
  282. package/dist/types/run-list.d.mts +9 -11
  283. package/dist/types/run-options.d.mts +25 -32
  284. package/dist/types/run.d.mts +35 -315
  285. package/dist/types/run.mjs +1 -207
  286. package/dist/types/runtime.d.mts +33 -145
  287. package/dist/types/runtime.mjs +1 -21
  288. package/dist/types/schedule.d.mts +13 -72
  289. package/dist/types/schedule.mjs +1 -48
  290. package/dist/types/step-attempts.d.mts +65 -261
  291. package/dist/types/step-attempts.mjs +1 -43
  292. package/dist/types/step.d.mts +66 -77
  293. package/dist/types/step.mjs +1 -5
  294. package/dist/types/store.d.mts +50 -182
  295. package/dist/types/stream.d.mts +19 -40
  296. package/dist/types/summary.d.mts +174 -278
  297. package/dist/types/telemetry.d.mts +23 -28
  298. package/dist/types/telemetry.mjs +1 -9
  299. package/dist/types/timeline.d.mts +46 -233
  300. package/dist/types/worker.d.mts +22 -29
  301. package/dist/values.d.mts +15 -0
  302. package/dist/values.mjs +57 -0
  303. package/dist/vite.d.mts +5 -6
  304. package/dist/vite.mjs +3 -4
  305. package/dist/webpack.d.mts +6 -4
  306. package/dist/webpack.mjs +2 -1
  307. package/dist/worker/error.d.mts +2 -9
  308. package/dist/worker/error.mjs +20 -32
  309. package/dist/worker/missing-implementation.d.mts +19 -0
  310. package/dist/worker/missing-implementation.mjs +62 -0
  311. package/dist/worker/worker.d.mts +18 -0
  312. package/dist/{worker.mjs → worker/worker.mjs} +64 -118
  313. package/package.json +28 -47
  314. package/dist/engine/execution-api.d.mts +0 -29
  315. package/dist/engine/execution-api.mjs +0 -33
  316. package/dist/engine/inspection-api.d.mts +0 -34
  317. package/dist/engine/inspection-api.mjs +0 -78
  318. package/dist/engine/mod.d.mts +0 -4
  319. package/dist/engine/mod.mjs +0 -2
  320. package/dist/engine/recovery.d.mts +0 -26
  321. package/dist/engine/recovery.mjs +0 -92
  322. package/dist/engine/retry-policy.d.mts +0 -4
  323. package/dist/engine/retry-policy.mjs +0 -4
  324. package/dist/engine/start-api.d.mts +0 -30
  325. package/dist/engine/start-api.mjs +0 -99
  326. package/dist/engine/summary/active-events.d.mts +0 -34
  327. package/dist/engine/summary/active-events.mjs +0 -69
  328. package/dist/engine/summary/child-workflow-runs.d.mts +0 -24
  329. package/dist/engine/summary/child-workflow-runs.mjs +0 -138
  330. package/dist/engine/summary/child-workflow-waits.d.mts +0 -21
  331. package/dist/engine/summary/child-workflow-waits.mjs +0 -67
  332. package/dist/engine/summary/recovery-child-workflow-waits.d.mts +0 -11
  333. package/dist/engine/summary/recovery-child-workflow-waits.mjs +0 -89
  334. package/dist/engine/summary/recovery-due-runs.d.mts +0 -16
  335. package/dist/engine/summary/recovery-due-runs.mjs +0 -52
  336. package/dist/engine/summary/recovery-failed-runs.d.mts +0 -14
  337. package/dist/engine/summary/recovery-failed-runs.mjs +0 -33
  338. package/dist/engine/summary/recovery-lease-runs.d.mts +0 -16
  339. package/dist/engine/summary/recovery-lease-runs.mjs +0 -69
  340. package/dist/engine/summary/recovery-locks.d.mts +0 -18
  341. package/dist/engine/summary/recovery-locks.mjs +0 -100
  342. package/dist/engine/summary/recovery-message-waits.d.mts +0 -11
  343. package/dist/engine/summary/recovery-message-waits.mjs +0 -74
  344. package/dist/engine/summary/recovery-retry-runs.d.mts +0 -17
  345. package/dist/engine/summary/recovery-retry-runs.mjs +0 -65
  346. package/dist/engine/summary/recovery-run-timestamps.d.mts +0 -13
  347. package/dist/engine/summary/recovery-run-timestamps.mjs +0 -18
  348. package/dist/engine/summary/recovery-runs.d.mts +0 -23
  349. package/dist/engine/summary/recovery-runs.mjs +0 -54
  350. package/dist/engine/summary/recovery-schedules.d.mts +0 -10
  351. package/dist/engine/summary/recovery-schedules.mjs +0 -46
  352. package/dist/engine/summary/recovery-sleep-waits.d.mts +0 -10
  353. package/dist/engine/summary/recovery-sleep-waits.mjs +0 -53
  354. package/dist/engine/summary/recovery-waits.d.mts +0 -21
  355. package/dist/engine/summary/recovery-waits.mjs +0 -29
  356. package/dist/engine/summary/run-availability.d.mts +0 -13
  357. package/dist/engine/summary/run-availability.mjs +0 -37
  358. package/dist/engine/summary/run-cleanup.d.mts +0 -14
  359. package/dist/engine/summary/run-cleanup.mjs +0 -44
  360. package/dist/engine/summary/run-failure.d.mts +0 -14
  361. package/dist/engine/summary/run-failure.mjs +0 -62
  362. package/dist/engine/summary/run-hooks.d.mts +0 -14
  363. package/dist/engine/summary/run-hooks.mjs +0 -63
  364. package/dist/engine/summary/run-lease.d.mts +0 -11
  365. package/dist/engine/summary/run-lease.mjs +0 -64
  366. package/dist/engine/summary/run-message-waits.d.mts +0 -15
  367. package/dist/engine/summary/run-message-waits.mjs +0 -62
  368. package/dist/engine/summary/run-metrics.d.mts +0 -31
  369. package/dist/engine/summary/run-metrics.mjs +0 -93
  370. package/dist/engine/summary/run-retry.d.mts +0 -9
  371. package/dist/engine/summary/run-retry.mjs +0 -69
  372. package/dist/engine/summary/run-sleeps.d.mts +0 -15
  373. package/dist/engine/summary/run-sleeps.mjs +0 -61
  374. package/dist/engine/summary/run-state.d.mts +0 -26
  375. package/dist/engine/summary/run-state.mjs +0 -48
  376. package/dist/engine/summary/run-status.d.mts +0 -16
  377. package/dist/engine/summary/run-status.mjs +0 -35
  378. package/dist/engine/summary/run-streams.d.mts +0 -14
  379. package/dist/engine/summary/run-streams.mjs +0 -46
  380. package/dist/engine/summary/run-transition.d.mts +0 -9
  381. package/dist/engine/summary/run-transition.mjs +0 -39
  382. package/dist/engine/summary/run-workflow.d.mts +0 -9
  383. package/dist/engine/summary/run-workflow.mjs +0 -47
  384. package/dist/engine/summary/step-attempt-active-child-workflows.d.mts +0 -13
  385. package/dist/engine/summary/step-attempt-active-child-workflows.mjs +0 -55
  386. package/dist/engine/summary/step-attempt-active-fields.d.mts +0 -23
  387. package/dist/engine/summary/step-attempt-active-fields.mjs +0 -14
  388. package/dist/engine/summary/step-attempt-active-message-waits.d.mts +0 -12
  389. package/dist/engine/summary/step-attempt-active-message-waits.mjs +0 -47
  390. package/dist/engine/summary/step-attempt-active-sleeps.d.mts +0 -19
  391. package/dist/engine/summary/step-attempt-active-sleeps.mjs +0 -44
  392. package/dist/engine/summary/step-attempt-buckets.d.mts +0 -22
  393. package/dist/engine/summary/step-attempt-buckets.mjs +0 -152
  394. package/dist/engine/summary/step-attempt-failure.d.mts +0 -12
  395. package/dist/engine/summary/step-attempt-failure.mjs +0 -61
  396. package/dist/engine/summary/step-attempt-lifecycle.d.mts +0 -13
  397. package/dist/engine/summary/step-attempt-lifecycle.mjs +0 -19
  398. package/dist/engine/summary.d.mts +0 -32
  399. package/dist/engine/summary.mjs +0 -37
  400. package/dist/errors/details.d.mts +0 -13
  401. package/dist/errors/details.mjs +0 -66
  402. package/dist/errors/record-view.d.mts +0 -11
  403. package/dist/errors/record-view.mjs +0 -24
  404. package/dist/errors/runtime.d.mts +0 -12
  405. package/dist/errors/runtime.mjs +0 -24
  406. package/dist/events/mod.d.mts +0 -3
  407. package/dist/events/mod.mjs +0 -2
  408. package/dist/history/attempt-key.d.mts +0 -6
  409. package/dist/history/attempt-key.mjs +0 -7
  410. package/dist/inspection/mod.d.mts +0 -5
  411. package/dist/inspection/mod.mjs +0 -3
  412. package/dist/otel.mjs +0 -590
  413. package/dist/runtime.d.mts +0 -35
  414. package/dist/runtime.mjs +0 -198
  415. package/dist/store/append-projection.d.mts +0 -15
  416. package/dist/store/append-projection.mjs +0 -26
  417. package/dist/store/compaction.d.mts +0 -5
  418. package/dist/store/compaction.mjs +0 -8
  419. package/dist/store/event-append-project.d.mts +0 -15
  420. package/dist/store/event-append-project.mjs +0 -77
  421. package/dist/store/event-append.d.mts +0 -37
  422. package/dist/store/event-append.mjs +0 -80
  423. package/dist/store/event-history.d.mts +0 -22
  424. package/dist/store/event-history.mjs +0 -75
  425. package/dist/store/event.d.mts +0 -10
  426. package/dist/store/event.mjs +0 -28
  427. package/dist/store/idempotency.d.mts +0 -10
  428. package/dist/store/idempotency.mjs +0 -167
  429. package/dist/store/message-index.d.mts +0 -21
  430. package/dist/store/message-index.mjs +0 -122
  431. package/dist/store/revision.d.mts +0 -4
  432. package/dist/store/revision.mjs +0 -7
  433. package/dist/store/schema.d.mts +0 -14
  434. package/dist/store/schema.mjs +0 -17
  435. package/dist/types/common.d.mts +0 -20
  436. package/dist/types/common.mjs +0 -16
  437. package/dist/types/error-code.d.mts +0 -256
  438. package/dist/types/message-id.d.mts +0 -7
  439. package/dist/types/message-id.mjs +0 -5
  440. package/dist/types/run-id.d.mts +0 -7
  441. package/dist/types/run-id.mjs +0 -5
  442. package/dist/types/step-id.d.mts +0 -7
  443. package/dist/types/step-id.mjs +0 -5
  444. package/dist/types/stream-id.d.mts +0 -7
  445. package/dist/types/stream-id.mjs +0 -5
  446. package/dist/types/worker-id.d.mts +0 -7
  447. package/dist/types/worker-id.mjs +0 -5
  448. package/dist/utility.d.mts +0 -49
  449. package/dist/utility.mjs +0 -122
  450. package/dist/vite/ast.d.mts +0 -23
  451. package/dist/vite/generated-name.d.mts +0 -7
  452. package/dist/vite/generated-name.mjs +0 -9
  453. package/dist/vite/manifest.d.mts +0 -7
  454. package/dist/vite/plugin.d.mts +0 -7
  455. package/dist/vite/safety.d.mts +0 -12
  456. package/dist/vite/source.d.mts +0 -7
  457. package/dist/vite/transform.d.mts +0 -7
  458. package/dist/webhook.d.mts +0 -16
  459. package/dist/webhook.mjs +0 -17
  460. package/dist/worker.d.mts +0 -19
  461. /package/dist/{types/vite.mjs → engine/context.mjs} +0 -0
@@ -1,59 +1,65 @@
1
+ import { WorkflowErrorCode } from "../errors/codes.mjs";
1
2
  import { WorkflowStateError } from "../errors/base.mjs";
2
3
  import { WorkflowRunNotFoundError } from "../errors/run.mjs";
3
- import { isTerminalWorkflowLifecycleEventForRun, isTerminalWorkflowRunStatus, limitWorkflowItems, nextRunAttempt } from "../utility.mjs";
4
4
  import "../errors/mod.mjs";
5
- import { omitUndefined } from "../collection.mjs";
6
- import { supportsWorkflowConditionalWrite } from "./capabilities.mjs";
5
+ import { limitItems, omitUndefined } from "../collection.mjs";
7
6
  import { makeRunKey } from "../store-keys.mjs";
8
- import { isSameWorkflowStorageValue } from "./revision.mjs";
7
+ import { CLEARED_LEASE, CLEARED_RETRY, UNFINISHED, isTerminalEventForRun, isTerminalRunStatus, nextRunAttempt } from "../run-status.mjs";
8
+ import { supportsConditionalWrite } from "./capabilities.mjs";
9
+ import { makeRunCursorKey, pageItems } from "../pagination.mjs";
9
10
  import { toStorageValue } from "./storage-value.mjs";
10
- import { isReadableWorkflowRunRecord, parseStoredWorkflowRunRecord, requireReadableStoreRun, requireValidRunTransition } from "./validation.mjs";
11
- import { rollbackAppendedEventIfCurrent } from "./event-history.mjs";
12
- import { makeWorkflowRunCursorKey, pageItems } from "../pagination.mjs";
13
- import { compactWorkflowStoreRecord } from "./compaction.mjs";
14
- import { matchesWorkflowRunListOptions, queryWorkflowRuns } from "./query.mjs";
11
+ import { isReadableRunRecord, parseStoredRunRecord, requireReadableStoreRun, requireValidRunTransition } from "./validation.mjs";
12
+ import { rollbackAppendedEventIfCurrent } from "./events.mjs";
13
+ import { matchesRunListOptions, queryRuns } from "./query.mjs";
14
+ import { deepEquals } from "@temelj/value";
15
15
  //#region src/store/run.ts
16
16
  async function updateRunIfCurrent(storage, namespace, store, current, next) {
17
17
  const runId = current.id;
18
18
  const nextRunId = next.id;
19
- if (runId !== nextRunId) WorkflowStateError.runIdMismatch(runId, nextRunId);
19
+ if (runId !== nextRunId) throw new WorkflowStateError(`Workflow store runId mismatch: ${runId} !== ${nextRunId}`, {
20
+ code: WorkflowErrorCode.STATE_RUN_ID_MISMATCH,
21
+ details: {
22
+ actual: runId,
23
+ expected: nextRunId
24
+ }
25
+ });
20
26
  requireReadableStoreRun(current, namespace);
21
27
  if (next.namespace !== namespace) WorkflowStateError.runNamespaceMismatch(String(next.namespace), namespace);
22
- if (!supportsWorkflowConditionalWrite(storage)) {
28
+ if (!supportsConditionalWrite(storage)) {
23
29
  const latest = await store.getRun(runId);
24
- if (latest === void 0 || !isSameWorkflowStorageValue(omitUndefined(latest), omitUndefined(current))) return;
30
+ if (latest === void 0 || !deepEquals(omitUndefined(latest), omitUndefined(current))) return;
25
31
  requireValidRunTransition(current, next);
26
- const compact = compactWorkflowStoreRecord(next);
32
+ const compact = omitUndefined(next);
27
33
  await storage.set(makeRunKey(namespace, runId), toStorageValue(compact));
28
34
  return compact;
29
35
  }
30
36
  requireValidRunTransition(current, next);
31
- const compact = compactWorkflowStoreRecord(next);
37
+ const compact = omitUndefined(next);
32
38
  return await storage.compareAndSet(makeRunKey(namespace, runId), toStorageValue(current), toStorageValue(compact)) ? compact : void 0;
33
39
  }
34
40
  async function getWorkflowRun(storage, namespace, runId) {
35
41
  const run = await storage.get(makeRunKey(namespace, runId));
36
- return isReadableWorkflowRunRecord(run, namespace) ? run : void 0;
42
+ return isReadableRunRecord(run, namespace) ? run : void 0;
37
43
  }
38
44
  async function listWorkflowRuns(storage, namespace, options) {
39
- const runs = await queryWorkflowRuns(storage, namespace, options, {
45
+ const runs = await queryRuns(storage, namespace, options, {
40
46
  label: "Workflow run list options",
41
47
  sort: true
42
48
  });
43
- return limitWorkflowItems(runs, options?.limit);
49
+ return limitItems(runs, options?.limit);
44
50
  }
45
51
  async function listWorkflowRunsPage(storage, namespace, options) {
46
- const runs = await queryWorkflowRuns(storage, namespace, {
52
+ const runs = await queryRuns(storage, namespace, {
47
53
  ...options,
48
54
  limit: void 0
49
55
  }, {
50
56
  label: "Workflow run page options",
51
57
  sort: true
52
58
  });
53
- return pageItems(runs, options, "Workflow run page", makeWorkflowRunCursorKey);
59
+ return pageItems(runs, options, "Workflow run page", makeRunCursorKey);
54
60
  }
55
61
  async function countWorkflowRuns(storage, namespace, options) {
56
- return (await queryWorkflowRuns(storage, namespace, options, {
62
+ return (await queryRuns(storage, namespace, options, {
57
63
  label: "Workflow run list options",
58
64
  sort: false
59
65
  })).length;
@@ -63,147 +69,100 @@ async function updateWorkflowRun(storage, namespace, store, run) {
63
69
  if (run.namespace !== namespace) WorkflowStateError.runNamespaceMismatch(String(run.namespace), namespace);
64
70
  const current = await store.getRun(runId);
65
71
  if (current !== void 0) requireValidRunTransition(current, run);
66
- const compact = compactWorkflowStoreRecord(run);
72
+ const compact = omitUndefined(run);
67
73
  await storage.set(makeRunKey(namespace, runId), toStorageValue(compact));
68
74
  return compact;
69
75
  }
70
76
  async function claimWorkflowRun(storage, namespace, store, options) {
71
- const listOptions = claimableWorkflowRunListOptions(options);
77
+ const listOptions = claimableRunListOptions(options);
72
78
  const run = options.runId === void 0 ? await firstClaimableRun(store, options, listOptions) : await store.getRun(options.runId);
73
79
  if (run === void 0 || !canClaimRun(run, options, listOptions)) return;
74
80
  return await updateRunIfCurrent(storage, namespace, store, run, claimedRunPatch(run, options.workerId, options.now, options.leaseDuration));
75
81
  }
76
82
  async function extendWorkflowRunLease(storage, namespace, store, options) {
77
83
  const run = await store.getRun(options.runId);
78
- if (!isWorkflowRunLeaseHeldByWorker(run, options)) return;
84
+ if (!isRunLeaseHeldByWorker(run, options)) return;
79
85
  return await updateRunIfCurrent(storage, namespace, store, run, extendedRunLeasePatch(run, options.now, options.leaseDuration));
80
86
  }
81
87
  async function releaseWorkflowRunLease(storage, namespace, store, options) {
82
88
  const run = await store.getRun(options.runId);
83
- if (!isWorkflowRunLeaseHeldByWorker(run, options)) return;
89
+ if (!isRunLeaseHeldByWorker(run, options)) return;
84
90
  return await updateRunIfCurrent(storage, namespace, store, run, releaseRunLeasePatch(run, options.now));
85
91
  }
86
- function isSameReadableWorkflowRunRevision(latest, current, namespace) {
87
- return latest !== void 0 && isReadableWorkflowRunRecord(latest, namespace) && isSameWorkflowStorageValue(omitUndefined(latest), omitUndefined(current));
92
+ function isSameReadableRunRevision(latest, current, namespace) {
93
+ return latest !== void 0 && isReadableRunRecord(latest, namespace) && deepEquals(omitUndefined(latest), omitUndefined(current));
88
94
  }
89
- async function isStoredWorkflowRunRevisionCurrent(storage, namespace, currentRun) {
90
- return isSameReadableWorkflowRunRevision(await getReadableStoredWorkflowRunValue(storage, namespace, currentRun.id), currentRun, namespace);
95
+ async function isStoredRunRevisionCurrent(storage, namespace, currentRun) {
96
+ return isSameReadableRunRevision(await getWorkflowRun(storage, namespace, currentRun.id), currentRun, namespace);
91
97
  }
92
- async function getReadableStoredWorkflowRun(storage, namespace, runId) {
98
+ async function getReadableStoredRun(storage, namespace, runId) {
93
99
  const runValue = await storage.get(makeRunKey(namespace, runId));
94
- const run = parseStoredWorkflowRunRecord(runValue);
95
- return isReadableWorkflowRunRecord(run, namespace) ? run : void 0;
96
- }
97
- async function getReadableStoredWorkflowRunValue(storage, namespace, runId) {
98
- const run = await storage.get(makeRunKey(namespace, runId));
99
- return isReadableWorkflowRunRecord(run, namespace) ? run : void 0;
100
+ const run = parseStoredRunRecord(runValue);
101
+ return isReadableRunRecord(run, namespace) ? run : void 0;
100
102
  }
101
- async function requireReadableStoredWorkflowRun(storage, namespace, runId) {
102
- const run = await getReadableStoredWorkflowRun(storage, namespace, runId);
103
+ async function requireReadableStoredRun(storage, namespace, runId) {
104
+ const run = await getReadableStoredRun(storage, namespace, runId);
103
105
  if (run === void 0) WorkflowRunNotFoundError.notFound(runId);
104
106
  return run;
105
107
  }
106
108
  function shouldRollbackAppendedEventForRun(namespace, run, event) {
107
- if (run === void 0 || !isReadableWorkflowRunRecord(run, namespace)) return true;
108
- return isTerminalWorkflowRunStatus(run.status) && !isTerminalWorkflowLifecycleEventForRun(run, event);
109
+ if (run === void 0 || !isReadableRunRecord(run, namespace)) return true;
110
+ return isTerminalRunStatus(run.status) && !isTerminalEventForRun(run, event);
109
111
  }
110
- function isWorkflowRunStaleForAppend(currentRun, event) {
111
- return isTerminalWorkflowRunStatus(currentRun.status) && !isTerminalWorkflowLifecycleEventForRun(currentRun, event);
112
+ function isRunStaleForAppend(currentRun, event) {
113
+ return isTerminalRunStatus(currentRun.status) && !isTerminalEventForRun(currentRun, event);
112
114
  }
113
115
  async function rollbackAppendedEventIfRunStale(storage, namespace, runId, event, events) {
114
- if (!shouldRollbackAppendedEventForRun(namespace, await getReadableStoredWorkflowRunValue(storage, namespace, runId), event)) return false;
116
+ if (!shouldRollbackAppendedEventForRun(namespace, await getWorkflowRun(storage, namespace, runId), event)) return false;
115
117
  await rollbackAppendedEventIfCurrent(storage, namespace, runId, events);
116
118
  return true;
117
119
  }
118
120
  function claimedRunPatch(run, workerId, now, leaseDuration) {
119
- const timestamp = now;
120
121
  const lastTransitionReason = isStaleLeaseClaim(run, now) ? "reclaimed" : "claimed";
121
122
  return {
122
123
  ...run,
123
124
  status: "running",
124
125
  attempts: nextRunAttempt(run.attempts),
125
- idempotencyKey: run.idempotencyKey,
126
- parentRunId: run.parentRunId,
127
- parentStepId: run.parentStepId,
128
- parentStepName: run.parentStepName,
129
- parentStepAttempt: run.parentStepAttempt,
130
126
  workerId,
131
- createdAt: run.createdAt,
132
- updatedAt: timestamp,
133
- lastTransitionAt: timestamp,
127
+ updatedAt: now,
128
+ lastTransitionAt: now,
134
129
  lastTransitionReason,
135
- startedAt: run.startedAt ?? timestamp,
130
+ startedAt: run.startedAt ?? now,
136
131
  leaseExpiresAt: now.add(leaseDuration),
137
- deadlineAt: run.deadlineAt,
138
132
  availableAt: void 0,
139
- retryAt: void 0,
140
- retryReason: void 0,
141
- retryAttempt: void 0,
142
- retryStepId: void 0,
143
- retryStepName: void 0,
144
- error: void 0,
145
- output: void 0,
146
- finishedAt: void 0
133
+ ...CLEARED_RETRY,
134
+ ...UNFINISHED
147
135
  };
148
136
  }
149
137
  function extendedRunLeasePatch(run, now, leaseDuration) {
150
- const timestamp = now;
151
138
  return {
152
139
  ...run,
153
- idempotencyKey: run.idempotencyKey,
154
- parentRunId: run.parentRunId,
155
- parentStepId: run.parentStepId,
156
- parentStepName: run.parentStepName,
157
- parentStepAttempt: run.parentStepAttempt,
158
- createdAt: run.createdAt,
159
- updatedAt: timestamp,
160
- lastTransitionAt: run.lastTransitionAt ?? timestamp,
161
- deadlineAt: run.deadlineAt,
162
- startedAt: run.startedAt ?? timestamp,
140
+ updatedAt: now,
141
+ lastTransitionAt: run.lastTransitionAt ?? now,
142
+ startedAt: run.startedAt ?? now,
163
143
  leaseExpiresAt: now.add(leaseDuration),
164
- retryAt: void 0,
165
- retryReason: void 0,
166
- retryAttempt: void 0,
167
- retryStepId: void 0,
168
- retryStepName: void 0,
169
- error: void 0,
170
- output: void 0,
171
- finishedAt: void 0
144
+ ...CLEARED_RETRY,
145
+ ...UNFINISHED
172
146
  };
173
147
  }
174
148
  function releaseRunLeasePatch(run, now) {
175
- const timestamp = now;
176
149
  return {
177
150
  ...run,
178
151
  status: "waiting",
179
- idempotencyKey: run.idempotencyKey,
180
- parentRunId: run.parentRunId,
181
- parentStepId: run.parentStepId,
182
- parentStepName: run.parentStepName,
183
- parentStepAttempt: run.parentStepAttempt,
184
- availableAt: timestamp,
185
- createdAt: run.createdAt,
186
- updatedAt: timestamp,
187
- lastTransitionAt: timestamp,
152
+ availableAt: now,
153
+ updatedAt: now,
154
+ lastTransitionAt: now,
188
155
  lastTransitionReason: "waiting",
189
- deadlineAt: run.deadlineAt,
190
- startedAt: run.startedAt ?? timestamp,
191
- retryAt: void 0,
192
- retryReason: void 0,
193
- retryAttempt: void 0,
194
- retryStepId: void 0,
195
- retryStepName: void 0,
196
- error: void 0,
197
- output: void 0,
198
- finishedAt: void 0,
199
- workerId: void 0,
200
- leaseExpiresAt: void 0
156
+ startedAt: run.startedAt ?? now,
157
+ ...CLEARED_RETRY,
158
+ ...UNFINISHED,
159
+ ...CLEARED_LEASE
201
160
  };
202
161
  }
203
162
  async function firstClaimableRun(store, options, listOptions) {
204
163
  return (await store.listRuns(listOptions)).find((run) => canClaimRun(run, options, listOptions));
205
164
  }
206
- function claimableWorkflowRunListOptions(options) {
165
+ function claimableRunListOptions(options) {
207
166
  return {
208
167
  ...options,
209
168
  workerId: void 0,
@@ -216,18 +175,18 @@ function claimableWorkflowRunListOptions(options) {
216
175
  };
217
176
  }
218
177
  function canClaimRun(run, options, listOptions) {
219
- if (!matchesClaimableWorkflowRunListOptions(run, listOptions)) return false;
178
+ if (!matchesClaimableRunListOptions(run, listOptions)) return false;
220
179
  if (run.status === "pending" || run.status === "waiting") return run.availableAt === void 0 || Temporal.Instant.compare(run.availableAt, options.now) <= 0;
221
180
  if (run.status !== "running") return false;
222
181
  if (run.workerId === void 0) return true;
223
182
  if (run.leaseExpiresAt === void 0) return true;
224
183
  return Temporal.Instant.compare(run.leaseExpiresAt, options.now) <= 0;
225
184
  }
226
- function isWorkflowRunLeaseHeldByWorker(run, options) {
185
+ function isRunLeaseHeldByWorker(run, options) {
227
186
  return run !== void 0 && run.status === "running" && run.workerId === options.workerId && (options.attempts === void 0 || run.attempts === options.attempts) && run.leaseExpiresAt !== void 0 && Temporal.Instant.compare(run.leaseExpiresAt, options.now) > 0;
228
187
  }
229
- function matchesClaimableWorkflowRunListOptions(run, listOptions) {
230
- return matchesWorkflowRunListOptions(run, listOptions) && (listOptions.retryReason !== void 0 || run.retryReason === void 0);
188
+ function matchesClaimableRunListOptions(run, listOptions) {
189
+ return matchesRunListOptions(run, listOptions) && (listOptions.retryReason !== void 0 || run.retryReason === void 0);
231
190
  }
232
191
  function isStaleLeaseClaim(run, now) {
233
192
  if (run.status !== "running") return false;
@@ -236,4 +195,4 @@ function isStaleLeaseClaim(run, now) {
236
195
  return Temporal.Instant.compare(run.leaseExpiresAt, now) <= 0;
237
196
  }
238
197
  //#endregion
239
- export { canClaimRun, claimWorkflowRun, claimedRunPatch, countWorkflowRuns, extendWorkflowRunLease, extendedRunLeasePatch, firstClaimableRun, getReadableStoredWorkflowRun, getWorkflowRun, isSameReadableWorkflowRunRevision, isStaleLeaseClaim, isStoredWorkflowRunRevisionCurrent, isWorkflowRunStaleForAppend, listWorkflowRuns, listWorkflowRunsPage, releaseRunLeasePatch, releaseWorkflowRunLease, requireReadableStoredWorkflowRun, rollbackAppendedEventIfRunStale, shouldRollbackAppendedEventForRun, updateRunIfCurrent, updateWorkflowRun };
198
+ export { claimWorkflowRun, countWorkflowRuns, extendWorkflowRunLease, getReadableStoredRun, getWorkflowRun, isRunStaleForAppend, isStoredRunRevisionCurrent, listWorkflowRuns, listWorkflowRunsPage, releaseWorkflowRunLease, requireReadableStoredRun, rollbackAppendedEventIfRunStale, updateRunIfCurrent, updateWorkflowRun };
@@ -1,12 +1,10 @@
1
1
  import { WorkflowPage } from "../types/pagination.mjs";
2
2
  import { ListSchedulesOptions, ListSchedulesPageOptions, ScheduleId, ScheduleRecord } from "../types/schedule.mjs";
3
3
  import { WorkflowStorage } from "../types/store.mjs";
4
- import { StorageValue } from "@temelj/storage";
5
4
  //#region src/store/schedule.d.ts
6
- declare function createSchedule<TInput>(storage: WorkflowStorage, namespace: string, schedule: ScheduleRecord<TInput>): Promise<ScheduleRecord<TInput>>;
7
- declare function getReadableSchedule<TInput = StorageValue>(storage: WorkflowStorage, namespace: string, scheduleId: ScheduleId): Promise<ScheduleRecord<TInput> | undefined>;
8
- declare function updateScheduleIfCurrent<TInput>(storage: WorkflowStorage, namespace: string, current: ScheduleRecord, next: ScheduleRecord<TInput>): Promise<ScheduleRecord<TInput> | undefined>;
9
- declare function listSchedules(storage: WorkflowStorage, namespace: string, options?: ListSchedulesOptions): Promise<readonly ScheduleRecord[]>;
10
- declare function listSchedulesPage(storage: WorkflowStorage, namespace: string, options?: ListSchedulesPageOptions): Promise<WorkflowPage<ScheduleRecord>>;
11
- //#endregion
12
- export { createSchedule, getReadableSchedule, listSchedules, listSchedulesPage, updateScheduleIfCurrent };
5
+ export declare function createSchedule(storage: WorkflowStorage, namespace: string, schedule: ScheduleRecord): Promise<ScheduleRecord>;
6
+ export declare function getReadableSchedule(storage: WorkflowStorage, namespace: string, scheduleId: ScheduleId): Promise<ScheduleRecord | undefined>;
7
+ export declare function updateScheduleIfCurrent(storage: WorkflowStorage, namespace: string, current: ScheduleRecord, next: ScheduleRecord): Promise<ScheduleRecord | undefined>;
8
+ export declare function listSchedules(storage: WorkflowStorage, namespace: string, options?: ListSchedulesOptions): Promise<readonly ScheduleRecord[]>;
9
+ export declare function listSchedulesPage(storage: WorkflowStorage, namespace: string, options?: ListSchedulesPageOptions): Promise<WorkflowPage<ScheduleRecord>>;
10
+ //#endregion
@@ -1,18 +1,18 @@
1
- import { limitWorkflowItems } from "../utility.mjs";
1
+ import { WorkflowErrorCode } from "../errors/codes.mjs";
2
2
  import { WorkflowScheduleAlreadyExistsError, WorkflowScheduleError } from "../errors/schedule.mjs";
3
3
  import "../errors/mod.mjs";
4
+ import { limitItems, omitUndefined } from "../collection.mjs";
4
5
  import { makeScheduleKey } from "../store-keys.mjs";
6
+ import { makeScheduleCursorKey, pageItems } from "../pagination.mjs";
5
7
  import { toStorageValue } from "./storage-value.mjs";
6
8
  import { isReadableScheduleRecord } from "./validation.mjs";
7
- import { makeScheduleCursorKey, pageItems } from "../pagination.mjs";
8
- import { compactWorkflowStoreRecord } from "./compaction.mjs";
9
9
  import { querySchedules } from "./query.mjs";
10
10
  //#region src/store/schedule.ts
11
11
  async function createSchedule(storage, namespace, schedule) {
12
12
  if (schedule.namespace !== namespace) WorkflowScheduleError.namespaceMismatch(schedule.namespace, namespace);
13
- if (!isReadableScheduleRecord(schedule, namespace)) WorkflowScheduleError.recordInvalid();
14
- const compact = compactWorkflowStoreRecord(schedule);
15
- if (!await storage.compareAndSet(makeScheduleKey(namespace, schedule.id), void 0, toStorageValue(compact))) WorkflowScheduleAlreadyExistsError.alreadyExists(schedule.id);
13
+ if (!isReadableScheduleRecord(schedule, namespace)) throw new WorkflowScheduleError("Workflow schedule record is invalid", WorkflowErrorCode.SCHEDULE_RECORD_INVALID, void 0);
14
+ const compact = omitUndefined(schedule);
15
+ if (!await storage.compareAndSet(makeScheduleKey(namespace, schedule.id), void 0, toStorageValue(compact))) throw new WorkflowScheduleAlreadyExistsError(schedule.id);
16
16
  return compact;
17
17
  }
18
18
  async function getReadableSchedule(storage, namespace, scheduleId) {
@@ -22,15 +22,15 @@ async function getReadableSchedule(storage, namespace, scheduleId) {
22
22
  async function updateScheduleIfCurrent(storage, namespace, current, next) {
23
23
  if (current.namespace !== namespace) WorkflowScheduleError.namespaceMismatch(current.namespace, namespace);
24
24
  if (next.namespace !== namespace) WorkflowScheduleError.namespaceMismatch(next.namespace, namespace);
25
- if (current.id !== next.id) WorkflowScheduleError.idChangeRejected();
26
- if (!isReadableScheduleRecord(current, namespace)) WorkflowScheduleError.currentRecordInvalid();
27
- if (!isReadableScheduleRecord(next, namespace)) WorkflowScheduleError.nextRecordInvalid();
28
- const compact = compactWorkflowStoreRecord(next);
25
+ if (current.id !== next.id) throw new WorkflowScheduleError("Workflow schedule id cannot change", WorkflowErrorCode.SCHEDULE_ID_CHANGE_REJECTED, void 0);
26
+ if (!isReadableScheduleRecord(current, namespace)) throw new WorkflowScheduleError("Current workflow schedule record is invalid", WorkflowErrorCode.SCHEDULE_CURRENT_RECORD_INVALID, void 0);
27
+ if (!isReadableScheduleRecord(next, namespace)) throw new WorkflowScheduleError("Next workflow schedule record is invalid", WorkflowErrorCode.SCHEDULE_NEXT_RECORD_INVALID, void 0);
28
+ const compact = omitUndefined(next);
29
29
  return await storage.compareAndSet(makeScheduleKey(namespace, current.id), toStorageValue(current), toStorageValue(compact)) ? compact : void 0;
30
30
  }
31
31
  async function listSchedules(storage, namespace, options) {
32
32
  const schedules = await querySchedules(storage, namespace, options, { label: "Workflow schedule list options" });
33
- return limitWorkflowItems(schedules, options?.limit);
33
+ return limitItems(schedules, options?.limit);
34
34
  }
35
35
  async function listSchedulesPage(storage, namespace, options) {
36
36
  const schedules = await querySchedules(storage, namespace, {
@@ -1,14 +1,11 @@
1
- import { RunId } from "../types/run-id.mjs";
1
+ import { RunId } from "../types/ids.mjs";
2
2
  import { WorkflowPage } from "../types/pagination.mjs";
3
- import { WorkflowListStepAttemptsPageOptions } from "../types/run-list.mjs";
4
- import { WorkflowListStepAttemptsOptions, WorkflowStepAttemptRecord } from "../types/step-attempts.mjs";
5
- import "../types/run.mjs";
6
- import { WorkflowEventReader, WorkflowRunReaderRepository, WorkflowStorage } from "../types/store.mjs";
3
+ import { ListStepAttemptsPageOptions } from "../types/run-list.mjs";
4
+ import { ListStepAttemptsOptions, StepAttemptRecord } from "../types/step-attempts.mjs";
5
+ import { WorkflowStorage, WorkflowStore } from "../types/store.mjs";
7
6
  //#region src/store/step-attempt.d.ts
8
- type WorkflowStepAttemptReadStore = WorkflowRunReaderRepository & WorkflowEventReader;
9
- declare function listWorkflowStepAttempts(storage: WorkflowStorage, namespace: string, store: WorkflowStepAttemptReadStore, runId: RunId, options?: WorkflowListStepAttemptsOptions): Promise<readonly WorkflowStepAttemptRecord[]>;
10
- declare function listWorkflowStepAttemptsPage(storage: WorkflowStorage, namespace: string, store: WorkflowStepAttemptReadStore, runId: RunId, options?: WorkflowListStepAttemptsPageOptions): Promise<WorkflowPage<WorkflowStepAttemptRecord>>;
11
- declare function countWorkflowStepAttempts(storage: WorkflowStorage, namespace: string, store: WorkflowStepAttemptReadStore, runId: RunId, options?: WorkflowListStepAttemptsOptions): Promise<number>;
12
- declare function repairWorkflowStepAttempts(storage: WorkflowStorage, namespace: string, store: WorkflowStepAttemptReadStore, runId: RunId): Promise<readonly WorkflowStepAttemptRecord[]>;
13
- //#endregion
14
- export { countWorkflowStepAttempts, listWorkflowStepAttempts, listWorkflowStepAttemptsPage, repairWorkflowStepAttempts };
7
+ export declare function listWorkflowStepAttempts(storage: WorkflowStorage, namespace: string, store: WorkflowStore, runId: RunId, options?: ListStepAttemptsOptions): Promise<readonly StepAttemptRecord[]>;
8
+ export declare function listWorkflowStepAttemptsPage(storage: WorkflowStorage, namespace: string, store: WorkflowStore, runId: RunId, options?: ListStepAttemptsPageOptions): Promise<WorkflowPage<StepAttemptRecord>>;
9
+ export declare function countWorkflowStepAttempts(storage: WorkflowStorage, namespace: string, store: WorkflowStore, runId: RunId, options?: ListStepAttemptsOptions): Promise<number>;
10
+ export declare function repairWorkflowStepAttempts(storage: WorkflowStorage, namespace: string, store: WorkflowStore, runId: RunId): Promise<readonly StepAttemptRecord[]>;
11
+ //#endregion
@@ -1,24 +1,24 @@
1
- import { limitWorkflowItems } from "../utility.mjs";
2
- import { makeWorkflowStepAttemptCursorKey, pageItems } from "../pagination.mjs";
1
+ import { limitItems } from "../collection.mjs";
2
+ import { makeStepAttemptCursorKey, pageItems } from "../pagination.mjs";
3
3
  import { reconcileStepAttempts } from "./materialization.mjs";
4
- import { getRequiredStoreRun, queryWorkflowStepAttempts } from "./query.mjs";
4
+ import { getRequiredRun, queryStepAttempts } from "./query.mjs";
5
5
  //#region src/store/step-attempt.ts
6
6
  async function listWorkflowStepAttempts(storage, namespace, store, runId, options) {
7
- const attempts = await queryWorkflowStepAttempts(storage, namespace, store, runId, options, { label: "Workflow step attempt list options" });
8
- return limitWorkflowItems(attempts, options?.limit);
7
+ const attempts = await queryStepAttempts(storage, namespace, store, runId, options, { label: "Workflow step attempt list options" });
8
+ return limitItems(attempts, options?.limit);
9
9
  }
10
10
  async function listWorkflowStepAttemptsPage(storage, namespace, store, runId, options) {
11
- const attempts = await queryWorkflowStepAttempts(storage, namespace, store, runId, {
11
+ const attempts = await queryStepAttempts(storage, namespace, store, runId, {
12
12
  ...options,
13
13
  limit: void 0
14
14
  }, { label: "Workflow step attempt page options" });
15
- return pageItems(attempts, options, "Workflow step attempt page", makeWorkflowStepAttemptCursorKey);
15
+ return pageItems(attempts, options, "Workflow step attempt page", makeStepAttemptCursorKey);
16
16
  }
17
17
  async function countWorkflowStepAttempts(storage, namespace, store, runId, options) {
18
- return (await queryWorkflowStepAttempts(storage, namespace, store, runId, options, { label: "Workflow step attempt list options" })).length;
18
+ return (await queryStepAttempts(storage, namespace, store, runId, options, { label: "Workflow step attempt list options" })).length;
19
19
  }
20
20
  async function repairWorkflowStepAttempts(storage, namespace, store, runId) {
21
- await getRequiredStoreRun(store, runId);
21
+ await getRequiredRun(store, runId);
22
22
  return await reconcileStepAttempts(storage, namespace, runId, await store.getEvents(runId));
23
23
  }
24
24
  //#endregion
@@ -1,5 +1,5 @@
1
1
  import { StorageValue } from "@temelj/storage";
2
2
  //#region src/store/storage-value.d.ts
3
- declare function toStorageValue(value: unknown): StorageValue;
4
- //#endregion
5
- export { toStorageValue };
3
+ /** Validates storage writes and omits undefined optional fields from workflow records. */
4
+ export declare function toStorageValue(value: unknown): StorageValue;
5
+ //#endregion
@@ -1,6 +1,22 @@
1
+ import { parse } from "../schema/common.mjs";
2
+ import { persistedValueSchema } from "../schema/persisted-value.mjs";
3
+ import { isPlainObject } from "@temelj/value";
1
4
  //#region src/store/storage-value.ts
5
+ /** Validates storage writes and omits undefined optional fields from workflow records. */
2
6
  function toStorageValue(value) {
3
- return value;
7
+ return normalizeStoredValue(value, /* @__PURE__ */ new WeakSet());
8
+ }
9
+ function normalizeStoredValue(value, active) {
10
+ if (!Array.isArray(value) && !isPlainObject(value)) return parse(persistedValueSchema, value);
11
+ if (active.has(value)) throw new TypeError("Circular workflow records cannot be stored");
12
+ active.add(value);
13
+ try {
14
+ if (Array.isArray(value)) return Array.from(value, (item) => normalizeStoredValue(item, active));
15
+ if (Object.getOwnPropertySymbols(value).some((key) => Object.prototype.propertyIsEnumerable.call(value, key))) throw new TypeError("Symbol keys cannot be stored in workflow records");
16
+ return Object.fromEntries(Object.entries(value).filter(([, item]) => item !== void 0).map(([key, item]) => [key, normalizeStoredValue(item, active)]));
17
+ } finally {
18
+ active.delete(value);
19
+ }
4
20
  }
5
21
  //#endregion
6
22
  export { toStorageValue };
@@ -1,35 +1,32 @@
1
1
  import { CleanupMarkerRecord } from "../types/cleanup.mjs";
2
2
  import { ScheduleRecord } from "../types/schedule.mjs";
3
3
  import { LockRecord } from "../types/lock.mjs";
4
- import { WorkflowStepAttemptRecord } from "../types/step-attempts.mjs";
5
- import { WorkflowRunRecord, WorkflowRunTransitionReason } from "../types/run.mjs";
4
+ import { StepAttemptRecord } from "../types/step-attempts.mjs";
5
+ import { RunRecord, RunTransitionReason } from "../types/run.mjs";
6
6
  import { EventRecord } from "../types/events.mjs";
7
- import { WorkflowMessageIdempotencyIndex } from "../types/store.mjs";
7
+ import { MessageIdempotencyIndex } from "../types/store.mjs";
8
8
  import { StorageValue } from "@temelj/storage";
9
9
  //#region src/store/validation.d.ts
10
10
  /** Returns whether an unknown value is a readable run record in the expected namespace. */
11
- declare function isReadableWorkflowRunRecord(run: unknown, expectedNamespace: string): run is WorkflowRunRecord;
11
+ export declare function isReadableRunRecord(run: unknown, expectedNamespace: string): run is RunRecord;
12
12
  /** Returns whether an unknown value is a run record that can participate in indexed list queries. */
13
- declare function isListableWorkflowRunRecord(run: unknown, expectedNamespace: string): run is WorkflowRunRecord & {
14
- readonly lastTransitionReason: WorkflowRunTransitionReason;
13
+ export declare function isListableRunRecord(run: unknown, expectedNamespace: string): run is RunRecord & {
14
+ readonly lastTransitionReason: RunTransitionReason;
15
15
  };
16
16
  /** Parses a stored workflow run record, if one exists. */
17
- declare function parseStoredWorkflowRunRecord(value: StorageValue | undefined): WorkflowRunRecord | undefined;
17
+ export declare function parseStoredRunRecord(value: StorageValue | undefined): RunRecord | undefined;
18
18
  /** Returns whether an unknown value is a readable schedule record in the expected namespace. */
19
- declare function isReadableScheduleRecord<TInput = StorageValue>(schedule: unknown, expectedNamespace: string): schedule is ScheduleRecord<TInput>;
19
+ export declare function isReadableScheduleRecord(schedule: unknown, expectedNamespace: string): schedule is ScheduleRecord;
20
20
  /** Returns whether an unknown value is a readable lock record in the expected namespace. */
21
- declare function isReadableLockRecord(lock: unknown, expectedNamespace: string): lock is LockRecord;
22
- /** Returns whether an unknown value is a readable durable workflow event record. */
23
- declare function isReadableEventRecord(event: unknown): event is EventRecord;
21
+ export declare function isReadableLockRecord(lock: unknown, expectedNamespace: string): lock is LockRecord;
22
+ export declare function isReadableEventRecord(event: unknown): event is EventRecord;
24
23
  /** Parses a readable cleanup marker record, if the value has the expected shape. */
25
- declare function readableCleanupMarkerRecord(marker: unknown): CleanupMarkerRecord | undefined;
24
+ export declare function readableCleanupMarkerRecord(marker: StorageValue | undefined): CleanupMarkerRecord | undefined;
26
25
  /** Parses a stored materialized step-attempt record, if one exists. */
27
- declare function parseStoredWorkflowStepAttemptRecord(value: StorageValue | undefined): WorkflowStepAttemptRecord | undefined;
28
- /** Returns whether an unknown value is a readable message idempotency index record. */
29
- declare function isReadableMessageIdempotencyIndex(value: unknown): value is WorkflowMessageIdempotencyIndex;
26
+ export declare function parseStoredStepAttemptRecord(value: StorageValue | undefined): StepAttemptRecord | undefined;
27
+ export declare function isReadableMessageIdempotencyIndex(value: unknown): value is MessageIdempotencyIndex;
30
28
  /** Returns whether the stored message idempotency index matches the expected logical index. */
31
- declare function isSameMessageIdempotencyIndex(current: unknown, value: WorkflowMessageIdempotencyIndex): boolean;
32
- declare function requireReadableStoreRun(run: WorkflowRunRecord, namespace: string): void;
33
- declare function requireValidRunTransition(current: WorkflowRunRecord, next: WorkflowRunRecord): void;
34
- //#endregion
35
- export { isListableWorkflowRunRecord, isReadableEventRecord, isReadableLockRecord, isReadableMessageIdempotencyIndex, isReadableScheduleRecord, isReadableWorkflowRunRecord, isSameMessageIdempotencyIndex, parseStoredWorkflowRunRecord, parseStoredWorkflowStepAttemptRecord, readableCleanupMarkerRecord, requireReadableStoreRun, requireValidRunTransition };
29
+ export declare function isSameMessageIdempotencyIndex(current: StorageValue | MessageIdempotencyIndex | undefined, value: MessageIdempotencyIndex): boolean;
30
+ export declare function requireReadableStoreRun(run: RunRecord, namespace: string): void;
31
+ export declare function requireValidRunTransition(current: RunRecord, next: RunRecord): void;
32
+ //#endregion
@@ -1,69 +1,66 @@
1
+ import { parse } from "../schema/common.mjs";
1
2
  import { WorkflowRunNotFoundError, WorkflowRunTransitionError } from "../errors/run.mjs";
2
- import { workflowRunRecordSchema } from "../types/run.mjs";
3
3
  import "../errors/mod.mjs";
4
- import { workflowEventRecordSchema } from "../types/events.mjs";
5
- import { workflowCleanupMarkerRecordSchema } from "../types/cleanup.mjs";
6
- import { workflowLockRecordSchema } from "../types/lock.mjs";
7
- import { workflowScheduleRecordSchema } from "../types/schedule.mjs";
8
- import { workflowStepAttemptRecordSchema } from "../types/step-attempts.mjs";
9
- import { workflowMessageIdempotencyIndexSchema } from "./schema.mjs";
4
+ import { runRecordSchema } from "../schema/run.mjs";
5
+ import { eventRecordSchema } from "../schema/events.mjs";
6
+ import { cleanupMarkerRecordSchema, lockRecordSchema, messageIdempotencyIndexSchema, scheduleRecordSchema, stepAttemptRecordSchema } from "../schema/store.mjs";
7
+ import { ss } from "@temelj/standard-schema";
10
8
  //#region src/store/validation.ts
11
9
  /** Returns whether an unknown value is a readable run record in the expected namespace. */
12
- function isReadableWorkflowRunRecord(run, expectedNamespace) {
13
- const parsed = workflowRunRecordSchema.safeParse(run);
14
- return parsed.success && parsed.data.namespace === expectedNamespace;
10
+ function isReadableRunRecord(run, expectedNamespace) {
11
+ const parsed = ss.safeParseSync(runRecordSchema, run);
12
+ return parsed.success && parsed.value.namespace === expectedNamespace;
15
13
  }
16
14
  /** Returns whether an unknown value is a run record that can participate in indexed list queries. */
17
- function isListableWorkflowRunRecord(run, expectedNamespace) {
18
- return isReadableWorkflowRunRecord(run, expectedNamespace);
15
+ function isListableRunRecord(run, expectedNamespace) {
16
+ return isReadableRunRecord(run, expectedNamespace);
19
17
  }
20
18
  /** Parses a stored workflow run record, if one exists. */
21
- function parseStoredWorkflowRunRecord(value) {
22
- return value === void 0 ? void 0 : workflowRunRecordSchema.parse(value);
19
+ function parseStoredRunRecord(value) {
20
+ return value === void 0 ? void 0 : parse(runRecordSchema, value);
23
21
  }
24
22
  /** Returns whether an unknown value is a readable schedule record in the expected namespace. */
25
23
  function isReadableScheduleRecord(schedule, expectedNamespace) {
26
- const parsed = workflowScheduleRecordSchema.safeParse(schedule);
27
- return parsed.success && parsed.data.namespace === expectedNamespace;
24
+ const parsed = ss.safeParseSync(scheduleRecordSchema, schedule);
25
+ return parsed.success && parsed.value.namespace === expectedNamespace;
28
26
  }
29
27
  /** Returns whether an unknown value is a readable lock record in the expected namespace. */
30
28
  function isReadableLockRecord(lock, expectedNamespace) {
31
- const parsed = workflowLockRecordSchema.safeParse(lock);
32
- return parsed.success && parsed.data.namespace === expectedNamespace;
29
+ const parsed = ss.safeParseSync(lockRecordSchema, lock);
30
+ return parsed.success && parsed.value.namespace === expectedNamespace;
33
31
  }
34
- /** Returns whether an unknown value is a readable durable workflow event record. */
35
32
  function isReadableEventRecord(event) {
36
- return workflowEventRecordSchema.safeParse(event).success;
33
+ return ss.safeParseSync(eventRecordSchema, event).success;
37
34
  }
38
35
  /** Parses a readable cleanup marker record, if the value has the expected shape. */
39
36
  function readableCleanupMarkerRecord(marker) {
40
- const parsed = workflowCleanupMarkerRecordSchema.safeParse(marker);
41
- return parsed.success ? parsed.data : void 0;
37
+ const parsed = ss.safeParseSync(cleanupMarkerRecordSchema, marker);
38
+ return parsed.success ? parsed.value : void 0;
42
39
  }
43
40
  /** Parses a stored materialized step-attempt record, if one exists. */
44
- function parseStoredWorkflowStepAttemptRecord(value) {
45
- return value === void 0 ? void 0 : workflowStepAttemptRecordSchema.parse(value);
41
+ function parseStoredStepAttemptRecord(value) {
42
+ return value === void 0 ? void 0 : parse(stepAttemptRecordSchema, value);
46
43
  }
47
- /** Returns whether an unknown value is a readable message idempotency index record. */
48
44
  function isReadableMessageIdempotencyIndex(value) {
49
- return workflowMessageIdempotencyIndexSchema.safeParse(value).success;
45
+ return ss.safeParseSync(messageIdempotencyIndexSchema, value).success;
50
46
  }
51
47
  /** Returns whether the stored message idempotency index matches the expected logical index. */
52
48
  function isSameMessageIdempotencyIndex(current, value) {
53
- const parsedCurrent = workflowMessageIdempotencyIndexSchema.safeParse(current);
54
- return parsedCurrent.success && parsedCurrent.data.runId === value.runId && parsedCurrent.data.messageId === value.messageId && Temporal.Instant.compare(parsedCurrent.data.timestamp, value.timestamp) === 0;
49
+ const parsedCurrent = ss.safeParseSync(messageIdempotencyIndexSchema, current);
50
+ return parsedCurrent.success && parsedCurrent.value.runId === value.runId && parsedCurrent.value.messageId === value.messageId && Temporal.Instant.compare(parsedCurrent.value.timestamp, value.timestamp) === 0;
55
51
  }
56
52
  function requireReadableStoreRun(run, namespace) {
57
53
  const runId = run.id;
58
- if (!isReadableWorkflowRunRecord(run, namespace)) WorkflowRunNotFoundError.notFound(runId);
54
+ const parsed = ss.safeParseSync(runRecordSchema, run);
55
+ if (!parsed.success || parsed.value.namespace !== namespace) WorkflowRunNotFoundError.notFound(runId);
59
56
  }
60
57
  function requireValidRunTransition(current, next) {
61
58
  if (current.status === next.status) return;
62
- if (canTransitionWorkflowRunStatus(current.status, next.status)) return;
63
- WorkflowRunTransitionError.invalidTransition(current.id, current.status, next.status);
59
+ if (canTransitionRunStatus(current.status, next.status)) return;
60
+ throw new WorkflowRunTransitionError(current.id, current.status, next.status);
64
61
  }
65
62
  /** Returns whether a run status transition is allowed by the workflow state machine. */
66
- function canTransitionWorkflowRunStatus(from, to) {
63
+ function canTransitionRunStatus(from, to) {
67
64
  switch (from) {
68
65
  case "pending": return to === "running" || to === "waiting" || to === "failed" || to === "canceled";
69
66
  case "running": return to === "waiting" || to === "completed" || to === "failed" || to === "canceled";
@@ -74,4 +71,4 @@ function canTransitionWorkflowRunStatus(from, to) {
74
71
  }
75
72
  }
76
73
  //#endregion
77
- export { isListableWorkflowRunRecord, isReadableEventRecord, isReadableLockRecord, isReadableMessageIdempotencyIndex, isReadableScheduleRecord, isReadableWorkflowRunRecord, isSameMessageIdempotencyIndex, parseStoredWorkflowRunRecord, parseStoredWorkflowStepAttemptRecord, readableCleanupMarkerRecord, requireReadableStoreRun, requireValidRunTransition };
74
+ export { isListableRunRecord, isReadableEventRecord, isReadableLockRecord, isReadableMessageIdempotencyIndex, isReadableRunRecord, isReadableScheduleRecord, isSameMessageIdempotencyIndex, parseStoredRunRecord, parseStoredStepAttemptRecord, readableCleanupMarkerRecord, requireReadableStoreRun, requireValidRunTransition };