@temelj/workflow 0.0.0-alpha.1

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 (393) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +38 -0
  3. package/dist/attributes.d.mts +15 -0
  4. package/dist/attributes.mjs +30 -0
  5. package/dist/client/create.d.mts +31 -0
  6. package/dist/client/create.mjs +67 -0
  7. package/dist/client/facades.d.mts +21 -0
  8. package/dist/client/facades.mjs +142 -0
  9. package/dist/client/mod.d.mts +2 -0
  10. package/dist/client/mod.mjs +2 -0
  11. package/dist/client/run-handle.d.mts +66 -0
  12. package/dist/client/run-handle.mjs +156 -0
  13. package/dist/client/worker-options.d.mts +17 -0
  14. package/dist/client/worker-options.mjs +25 -0
  15. package/dist/collection.d.mts +15 -0
  16. package/dist/collection.mjs +33 -0
  17. package/dist/compiled-function.d.mts +27 -0
  18. package/dist/compiled-function.mjs +54 -0
  19. package/dist/definition.d.mts +37 -0
  20. package/dist/definition.mjs +83 -0
  21. package/dist/engine/child-workflow.d.mts +10 -0
  22. package/dist/engine/child-workflow.mjs +333 -0
  23. package/dist/engine/command-identity.d.mts +9 -0
  24. package/dist/engine/command-identity.mjs +14 -0
  25. package/dist/engine/create.d.mts +106 -0
  26. package/dist/engine/create.mjs +402 -0
  27. package/dist/engine/deterministic.d.mts +12 -0
  28. package/dist/engine/deterministic.mjs +102 -0
  29. package/dist/engine/durable-command.d.mts +10 -0
  30. package/dist/engine/durable-command.mjs +17 -0
  31. package/dist/engine/execution-api.d.mts +29 -0
  32. package/dist/engine/execution-api.mjs +33 -0
  33. package/dist/engine/execution-service.d.mts +41 -0
  34. package/dist/engine/execution-service.mjs +288 -0
  35. package/dist/engine/hooks.d.mts +56 -0
  36. package/dist/engine/hooks.mjs +237 -0
  37. package/dist/engine/inspection-api.d.mts +34 -0
  38. package/dist/engine/inspection-api.mjs +77 -0
  39. package/dist/engine/inspection.d.mts +18 -0
  40. package/dist/engine/inspection.mjs +149 -0
  41. package/dist/engine/lifecycle.d.mts +18 -0
  42. package/dist/engine/lifecycle.mjs +38 -0
  43. package/dist/engine/lock-replay.d.mts +30 -0
  44. package/dist/engine/lock-replay.mjs +38 -0
  45. package/dist/engine/lock.d.mts +21 -0
  46. package/dist/engine/lock.mjs +197 -0
  47. package/dist/engine/message.d.mts +47 -0
  48. package/dist/engine/message.mjs +357 -0
  49. package/dist/engine/mod.d.mts +4 -0
  50. package/dist/engine/mod.mjs +2 -0
  51. package/dist/engine/observation.d.mts +35 -0
  52. package/dist/engine/observation.mjs +201 -0
  53. package/dist/engine/recovery.d.mts +26 -0
  54. package/dist/engine/recovery.mjs +92 -0
  55. package/dist/engine/replay.d.mts +41 -0
  56. package/dist/engine/replay.mjs +122 -0
  57. package/dist/engine/retry-policy.d.mts +4 -0
  58. package/dist/engine/retry-policy.mjs +4 -0
  59. package/dist/engine/retry.d.mts +23 -0
  60. package/dist/engine/retry.mjs +75 -0
  61. package/dist/engine/run-data.d.mts +9 -0
  62. package/dist/engine/run-data.mjs +74 -0
  63. package/dist/engine/run-service.d.mts +38 -0
  64. package/dist/engine/run-service.mjs +133 -0
  65. package/dist/engine/run-utils.d.mts +16 -0
  66. package/dist/engine/run-utils.mjs +83 -0
  67. package/dist/engine/schedule.d.mts +25 -0
  68. package/dist/engine/schedule.mjs +207 -0
  69. package/dist/engine/serialization.d.mts +9 -0
  70. package/dist/engine/serialization.mjs +85 -0
  71. package/dist/engine/start-api.d.mts +30 -0
  72. package/dist/engine/start-api.mjs +98 -0
  73. package/dist/engine/state.d.mts +77 -0
  74. package/dist/engine/state.mjs +464 -0
  75. package/dist/engine/step-api.d.mts +9 -0
  76. package/dist/engine/step-api.mjs +25 -0
  77. package/dist/engine/stream.d.mts +55 -0
  78. package/dist/engine/stream.mjs +333 -0
  79. package/dist/engine/summary/active-events.d.mts +34 -0
  80. package/dist/engine/summary/active-events.mjs +69 -0
  81. package/dist/engine/summary/child-workflow-runs.d.mts +24 -0
  82. package/dist/engine/summary/child-workflow-runs.mjs +138 -0
  83. package/dist/engine/summary/child-workflow-waits.d.mts +21 -0
  84. package/dist/engine/summary/child-workflow-waits.mjs +67 -0
  85. package/dist/engine/summary/recovery-child-workflow-waits.d.mts +11 -0
  86. package/dist/engine/summary/recovery-child-workflow-waits.mjs +89 -0
  87. package/dist/engine/summary/recovery-due-runs.d.mts +16 -0
  88. package/dist/engine/summary/recovery-due-runs.mjs +52 -0
  89. package/dist/engine/summary/recovery-failed-runs.d.mts +14 -0
  90. package/dist/engine/summary/recovery-failed-runs.mjs +33 -0
  91. package/dist/engine/summary/recovery-lease-runs.d.mts +16 -0
  92. package/dist/engine/summary/recovery-lease-runs.mjs +69 -0
  93. package/dist/engine/summary/recovery-locks.d.mts +18 -0
  94. package/dist/engine/summary/recovery-locks.mjs +100 -0
  95. package/dist/engine/summary/recovery-message-waits.d.mts +11 -0
  96. package/dist/engine/summary/recovery-message-waits.mjs +74 -0
  97. package/dist/engine/summary/recovery-retry-runs.d.mts +17 -0
  98. package/dist/engine/summary/recovery-retry-runs.mjs +65 -0
  99. package/dist/engine/summary/recovery-run-timestamps.d.mts +13 -0
  100. package/dist/engine/summary/recovery-run-timestamps.mjs +18 -0
  101. package/dist/engine/summary/recovery-runs.d.mts +23 -0
  102. package/dist/engine/summary/recovery-runs.mjs +54 -0
  103. package/dist/engine/summary/recovery-schedules.d.mts +10 -0
  104. package/dist/engine/summary/recovery-schedules.mjs +46 -0
  105. package/dist/engine/summary/recovery-sleep-waits.d.mts +10 -0
  106. package/dist/engine/summary/recovery-sleep-waits.mjs +53 -0
  107. package/dist/engine/summary/recovery-waits.d.mts +21 -0
  108. package/dist/engine/summary/recovery-waits.mjs +29 -0
  109. package/dist/engine/summary/run-availability.d.mts +13 -0
  110. package/dist/engine/summary/run-availability.mjs +37 -0
  111. package/dist/engine/summary/run-cleanup.d.mts +14 -0
  112. package/dist/engine/summary/run-cleanup.mjs +44 -0
  113. package/dist/engine/summary/run-failure.d.mts +14 -0
  114. package/dist/engine/summary/run-failure.mjs +62 -0
  115. package/dist/engine/summary/run-hooks.d.mts +14 -0
  116. package/dist/engine/summary/run-hooks.mjs +63 -0
  117. package/dist/engine/summary/run-lease.d.mts +11 -0
  118. package/dist/engine/summary/run-lease.mjs +64 -0
  119. package/dist/engine/summary/run-message-waits.d.mts +15 -0
  120. package/dist/engine/summary/run-message-waits.mjs +62 -0
  121. package/dist/engine/summary/run-metrics.d.mts +31 -0
  122. package/dist/engine/summary/run-metrics.mjs +93 -0
  123. package/dist/engine/summary/run-retry.d.mts +9 -0
  124. package/dist/engine/summary/run-retry.mjs +69 -0
  125. package/dist/engine/summary/run-sleeps.d.mts +15 -0
  126. package/dist/engine/summary/run-sleeps.mjs +61 -0
  127. package/dist/engine/summary/run-state.d.mts +26 -0
  128. package/dist/engine/summary/run-state.mjs +48 -0
  129. package/dist/engine/summary/run-status.d.mts +16 -0
  130. package/dist/engine/summary/run-status.mjs +35 -0
  131. package/dist/engine/summary/run-streams.d.mts +14 -0
  132. package/dist/engine/summary/run-streams.mjs +46 -0
  133. package/dist/engine/summary/run-transition.d.mts +9 -0
  134. package/dist/engine/summary/run-transition.mjs +39 -0
  135. package/dist/engine/summary/run-workflow.d.mts +9 -0
  136. package/dist/engine/summary/run-workflow.mjs +47 -0
  137. package/dist/engine/summary/step-attempt-active-child-workflows.d.mts +13 -0
  138. package/dist/engine/summary/step-attempt-active-child-workflows.mjs +55 -0
  139. package/dist/engine/summary/step-attempt-active-fields.d.mts +23 -0
  140. package/dist/engine/summary/step-attempt-active-fields.mjs +14 -0
  141. package/dist/engine/summary/step-attempt-active-message-waits.d.mts +12 -0
  142. package/dist/engine/summary/step-attempt-active-message-waits.mjs +47 -0
  143. package/dist/engine/summary/step-attempt-active-sleeps.d.mts +19 -0
  144. package/dist/engine/summary/step-attempt-active-sleeps.mjs +44 -0
  145. package/dist/engine/summary/step-attempt-buckets.d.mts +22 -0
  146. package/dist/engine/summary/step-attempt-buckets.mjs +152 -0
  147. package/dist/engine/summary/step-attempt-failure.d.mts +12 -0
  148. package/dist/engine/summary/step-attempt-failure.mjs +61 -0
  149. package/dist/engine/summary/step-attempt-lifecycle.d.mts +13 -0
  150. package/dist/engine/summary/step-attempt-lifecycle.mjs +19 -0
  151. package/dist/engine/summary/step-attempts.d.mts +11 -0
  152. package/dist/engine/summary/step-attempts.mjs +43 -0
  153. package/dist/engine/summary.d.mts +32 -0
  154. package/dist/engine/summary.mjs +37 -0
  155. package/dist/engine/task.d.mts +6 -0
  156. package/dist/engine/task.mjs +207 -0
  157. package/dist/errors/base.d.mts +99 -0
  158. package/dist/errors/base.mjs +426 -0
  159. package/dist/errors/capability.d.mts +11 -0
  160. package/dist/errors/capability.mjs +23 -0
  161. package/dist/errors/definition.d.mts +21 -0
  162. package/dist/errors/definition.mjs +51 -0
  163. package/dist/errors/details.d.mts +13 -0
  164. package/dist/errors/details.mjs +65 -0
  165. package/dist/errors/failures.d.mts +81 -0
  166. package/dist/errors/failures.mjs +168 -0
  167. package/dist/errors/hook.d.mts +14 -0
  168. package/dist/errors/hook.mjs +30 -0
  169. package/dist/errors/implementation.d.mts +11 -0
  170. package/dist/errors/implementation.mjs +25 -0
  171. package/dist/errors/lock.d.mts +28 -0
  172. package/dist/errors/lock.mjs +70 -0
  173. package/dist/errors/message.d.mts +106 -0
  174. package/dist/errors/message.mjs +122 -0
  175. package/dist/errors/mod.d.mts +17 -0
  176. package/dist/errors/mod.mjs +17 -0
  177. package/dist/errors/record-view.d.mts +11 -0
  178. package/dist/errors/record-view.mjs +24 -0
  179. package/dist/errors/records.d.mts +7 -0
  180. package/dist/errors/records.mjs +280 -0
  181. package/dist/errors/run.d.mts +116 -0
  182. package/dist/errors/run.mjs +232 -0
  183. package/dist/errors/runtime.d.mts +12 -0
  184. package/dist/errors/runtime.mjs +24 -0
  185. package/dist/errors/schedule.d.mts +27 -0
  186. package/dist/errors/schedule.mjs +65 -0
  187. package/dist/errors/step.d.mts +76 -0
  188. package/dist/errors/step.mjs +113 -0
  189. package/dist/errors/stream.d.mts +24 -0
  190. package/dist/errors/stream.mjs +64 -0
  191. package/dist/esbuild.d.mts +7 -0
  192. package/dist/esbuild.mjs +6 -0
  193. package/dist/events/descriptors.d.mts +245 -0
  194. package/dist/events/descriptors.mjs +405 -0
  195. package/dist/events/mod.d.mts +3 -0
  196. package/dist/events/mod.mjs +2 -0
  197. package/dist/history/attempt-key.d.mts +6 -0
  198. package/dist/history/attempt-key.mjs +7 -0
  199. package/dist/history/mod.d.mts +71 -0
  200. package/dist/history/mod.mjs +195 -0
  201. package/dist/history/projection.d.mts +8 -0
  202. package/dist/history/projection.mjs +259 -0
  203. package/dist/history/replay-projection.d.mts +88 -0
  204. package/dist/history/replay-projection.mjs +369 -0
  205. package/dist/history/sequencer.d.mts +16 -0
  206. package/dist/history/sequencer.mjs +78 -0
  207. package/dist/history/step-attempts.d.mts +9 -0
  208. package/dist/history/step-attempts.mjs +50 -0
  209. package/dist/history/timeline.d.mts +16 -0
  210. package/dist/history/timeline.mjs +272 -0
  211. package/dist/history/validator.d.mts +9 -0
  212. package/dist/history/validator.mjs +110 -0
  213. package/dist/inspection/mod.d.mts +5 -0
  214. package/dist/inspection/mod.mjs +3 -0
  215. package/dist/message-options.d.mts +8 -0
  216. package/dist/message-options.mjs +25 -0
  217. package/dist/mod.d.mts +52 -0
  218. package/dist/mod.mjs +26 -0
  219. package/dist/otel/support.d.mts +18 -0
  220. package/dist/otel/support.mjs +102 -0
  221. package/dist/otel.d.mts +30 -0
  222. package/dist/otel.mjs +588 -0
  223. package/dist/pagination.d.mts +25 -0
  224. package/dist/pagination.mjs +73 -0
  225. package/dist/registry.d.mts +20 -0
  226. package/dist/registry.mjs +48 -0
  227. package/dist/rolldown.d.mts +7 -0
  228. package/dist/rolldown.mjs +6 -0
  229. package/dist/rollup.d.mts +7 -0
  230. package/dist/rollup.mjs +6 -0
  231. package/dist/rspack.d.mts +7 -0
  232. package/dist/rspack.mjs +6 -0
  233. package/dist/runtime.d.mts +34 -0
  234. package/dist/runtime.mjs +194 -0
  235. package/dist/step-definition.d.mts +10 -0
  236. package/dist/step-definition.mjs +15 -0
  237. package/dist/store/append-projection.d.mts +15 -0
  238. package/dist/store/append-projection.mjs +26 -0
  239. package/dist/store/capabilities.d.mts +14 -0
  240. package/dist/store/capabilities.mjs +42 -0
  241. package/dist/store/cleanup.d.mts +18 -0
  242. package/dist/store/cleanup.mjs +338 -0
  243. package/dist/store/compaction.d.mts +5 -0
  244. package/dist/store/compaction.mjs +8 -0
  245. package/dist/store/create.d.mts +52 -0
  246. package/dist/store/create.mjs +159 -0
  247. package/dist/store/event-append-project.d.mts +15 -0
  248. package/dist/store/event-append-project.mjs +77 -0
  249. package/dist/store/event-append.d.mts +37 -0
  250. package/dist/store/event-append.mjs +80 -0
  251. package/dist/store/event-history.d.mts +22 -0
  252. package/dist/store/event-history.mjs +75 -0
  253. package/dist/store/event.d.mts +10 -0
  254. package/dist/store/event.mjs +28 -0
  255. package/dist/store/idempotency.d.mts +10 -0
  256. package/dist/store/idempotency.mjs +167 -0
  257. package/dist/store/instrumentation.d.mts +7 -0
  258. package/dist/store/instrumentation.mjs +123 -0
  259. package/dist/store/lock.d.mts +8 -0
  260. package/dist/store/lock.mjs +28 -0
  261. package/dist/store/materialization.d.mts +30 -0
  262. package/dist/store/materialization.mjs +127 -0
  263. package/dist/store/message-index.d.mts +21 -0
  264. package/dist/store/message-index.mjs +121 -0
  265. package/dist/store/mod.d.mts +5 -0
  266. package/dist/store/mod.mjs +4 -0
  267. package/dist/store/query.d.mts +24 -0
  268. package/dist/store/query.mjs +82 -0
  269. package/dist/store/revision.d.mts +4 -0
  270. package/dist/store/revision.mjs +7 -0
  271. package/dist/store/run.d.mts +49 -0
  272. package/dist/store/run.mjs +236 -0
  273. package/dist/store/schedule.d.mts +12 -0
  274. package/dist/store/schedule.mjs +41 -0
  275. package/dist/store/schema.d.mts +14 -0
  276. package/dist/store/schema.mjs +17 -0
  277. package/dist/store/step-attempt.d.mts +14 -0
  278. package/dist/store/step-attempt.mjs +23 -0
  279. package/dist/store/storage-value.d.mts +5 -0
  280. package/dist/store/storage-value.mjs +6 -0
  281. package/dist/store/validation.d.mts +35 -0
  282. package/dist/store/validation.mjs +77 -0
  283. package/dist/store-keys.d.mts +49 -0
  284. package/dist/store-keys.mjs +63 -0
  285. package/dist/telemetry.d.mts +132 -0
  286. package/dist/telemetry.mjs +172 -0
  287. package/dist/temporal.d.mts +23 -0
  288. package/dist/temporal.mjs +59 -0
  289. package/dist/timer.d.mts +12 -0
  290. package/dist/timer.mjs +28 -0
  291. package/dist/types/cleanup.d.mts +112 -0
  292. package/dist/types/cleanup.mjs +22 -0
  293. package/dist/types/client.d.mts +270 -0
  294. package/dist/types/client.mjs +1 -0
  295. package/dist/types/common.d.mts +19 -0
  296. package/dist/types/common.mjs +15 -0
  297. package/dist/types/definition.d.mts +92 -0
  298. package/dist/types/definition.mjs +1 -0
  299. package/dist/types/engine-options.d.mts +76 -0
  300. package/dist/types/engine-options.mjs +1 -0
  301. package/dist/types/engine.d.mts +309 -0
  302. package/dist/types/engine.mjs +1 -0
  303. package/dist/types/error-code.d.mts +256 -0
  304. package/dist/types/error-code.mjs +131 -0
  305. package/dist/types/error.d.mts +236 -0
  306. package/dist/types/error.mjs +48 -0
  307. package/dist/types/events.d.mts +2869 -0
  308. package/dist/types/events.mjs +283 -0
  309. package/dist/types/hook.d.mts +149 -0
  310. package/dist/types/hook.mjs +66 -0
  311. package/dist/types/lock.d.mts +63 -0
  312. package/dist/types/lock.mjs +18 -0
  313. package/dist/types/message-id.d.mts +7 -0
  314. package/dist/types/message-id.mjs +5 -0
  315. package/dist/types/message.d.mts +87 -0
  316. package/dist/types/message.mjs +1 -0
  317. package/dist/types/observation.d.mts +146 -0
  318. package/dist/types/observation.mjs +1 -0
  319. package/dist/types/pagination.d.mts +32 -0
  320. package/dist/types/pagination.mjs +13 -0
  321. package/dist/types/result.d.mts +62 -0
  322. package/dist/types/result.mjs +1 -0
  323. package/dist/types/retry.d.mts +48 -0
  324. package/dist/types/retry.mjs +1 -0
  325. package/dist/types/run-id.d.mts +7 -0
  326. package/dist/types/run-id.mjs +5 -0
  327. package/dist/types/run-list.d.mts +43 -0
  328. package/dist/types/run-list.mjs +1 -0
  329. package/dist/types/run-options.d.mts +86 -0
  330. package/dist/types/run-options.mjs +1 -0
  331. package/dist/types/run.d.mts +355 -0
  332. package/dist/types/run.mjs +207 -0
  333. package/dist/types/runtime.d.mts +143 -0
  334. package/dist/types/runtime.mjs +21 -0
  335. package/dist/types/schedule.d.mts +127 -0
  336. package/dist/types/schedule.mjs +48 -0
  337. package/dist/types/step-attempts.d.mts +326 -0
  338. package/dist/types/step-attempts.mjs +43 -0
  339. package/dist/types/step-id.d.mts +7 -0
  340. package/dist/types/step-id.mjs +5 -0
  341. package/dist/types/step.d.mts +183 -0
  342. package/dist/types/step.mjs +5 -0
  343. package/dist/types/store.d.mts +254 -0
  344. package/dist/types/store.mjs +1 -0
  345. package/dist/types/stream-id.d.mts +7 -0
  346. package/dist/types/stream-id.mjs +5 -0
  347. package/dist/types/stream.d.mts +126 -0
  348. package/dist/types/stream.mjs +1 -0
  349. package/dist/types/summary.d.mts +318 -0
  350. package/dist/types/summary.mjs +1 -0
  351. package/dist/types/telemetry.d.mts +74 -0
  352. package/dist/types/telemetry.mjs +9 -0
  353. package/dist/types/timeline.d.mts +237 -0
  354. package/dist/types/timeline.mjs +1 -0
  355. package/dist/types/vite.d.mts +65 -0
  356. package/dist/types/vite.mjs +1 -0
  357. package/dist/types/worker-id.d.mts +7 -0
  358. package/dist/types/worker-id.mjs +5 -0
  359. package/dist/types/worker.d.mts +94 -0
  360. package/dist/types/worker.mjs +1 -0
  361. package/dist/utility.d.mts +49 -0
  362. package/dist/utility.mjs +122 -0
  363. package/dist/vite/ast.d.mts +23 -0
  364. package/dist/vite/ast.mjs +73 -0
  365. package/dist/vite/error.d.mts +19 -0
  366. package/dist/vite/error.mjs +47 -0
  367. package/dist/vite/generated-name.d.mts +7 -0
  368. package/dist/vite/generated-name.mjs +9 -0
  369. package/dist/vite/manifest.d.mts +7 -0
  370. package/dist/vite/manifest.mjs +106 -0
  371. package/dist/vite/plugin.d.mts +7 -0
  372. package/dist/vite/plugin.mjs +190 -0
  373. package/dist/vite/safety.d.mts +12 -0
  374. package/dist/vite/safety.mjs +96 -0
  375. package/dist/vite/source-edit.d.mts +12 -0
  376. package/dist/vite/source-edit.mjs +44 -0
  377. package/dist/vite/source-map.d.mts +11 -0
  378. package/dist/vite/source-map.mjs +53 -0
  379. package/dist/vite/source.d.mts +7 -0
  380. package/dist/vite/source.mjs +14 -0
  381. package/dist/vite/transform.d.mts +7 -0
  382. package/dist/vite/transform.mjs +405 -0
  383. package/dist/vite.d.mts +6 -0
  384. package/dist/vite.mjs +5 -0
  385. package/dist/webhook.d.mts +16 -0
  386. package/dist/webhook.mjs +17 -0
  387. package/dist/webpack.d.mts +7 -0
  388. package/dist/webpack.mjs +6 -0
  389. package/dist/worker/error.d.mts +11 -0
  390. package/dist/worker/error.mjs +40 -0
  391. package/dist/worker.d.mts +18 -0
  392. package/dist/worker.mjs +427 -0
  393. package/package.json +144 -0
@@ -0,0 +1,427 @@
1
+ import { WorkflowStateError } from "./errors/base.mjs";
2
+ import { WorkflowRunNotFoundError } from "./errors/run.mjs";
3
+ import { createDefaultWorkerId, isPositiveSafeInteger, resolvePositiveSafeIntegerOption } from "./utility.mjs";
4
+ import { WorkflowCapabilityError } from "./errors/capability.mjs";
5
+ import { durationBetween } from "./temporal.mjs";
6
+ import { MAX_TIMER_DELAY, nonNegativeTimerDelay, positiveTimerDelay } from "./timer.mjs";
7
+ import { resolveMissingImplementationRetryConfig } from "./engine/retry.mjs";
8
+ import { patchRunIfCurrent, transitionRunToFailed, transitionRunToMissingImplementationWait, wakeParentRunForTerminalChild, wakeParentRunForWaitingChild } from "./engine/state.mjs";
9
+ import { requireWorkflowStoreCapabilities } from "./store/capabilities.mjs";
10
+ import { DEFAULT_MISSING_IMPLEMENTATION_RETRY_INTERVAL, makeMissingImplementationDeadlineErrorRecord, makeMissingImplementationNotFoundErrorRecord, missingImplementationRetryDelay, toWorkflowWorkerErrorRecord } from "./worker/error.mjs";
11
+ //#region src/worker.ts
12
+ const DEFAULT_WORKER_LEASE_DURATION = Temporal.Duration.from({ seconds: 30 });
13
+ const DEFAULT_WORKER_POLL_INTERVAL = Temporal.Duration.from({ milliseconds: 100 });
14
+ const DEFAULT_WORKER_STOP_DRAIN_TIMEOUT = Temporal.Duration.from({ seconds: 30 });
15
+ /** Storage-backed workflow worker implementation. */
16
+ var WorkflowWorker = class {
17
+ #engine;
18
+ #store;
19
+ #registry;
20
+ #workerId;
21
+ #leaseDuration;
22
+ #heartbeatInterval;
23
+ #stopDrainTimeout;
24
+ #defaultPollInterval;
25
+ #missingImplementationRetry;
26
+ #now;
27
+ #stopRequested = false;
28
+ #pollWakeups = /* @__PURE__ */ new Set();
29
+ #activeExecutionAborts = /* @__PURE__ */ new Set();
30
+ #activeExecutions = /* @__PURE__ */ new Set();
31
+ #activeExecutionRuns = /* @__PURE__ */ new Map();
32
+ constructor(options) {
33
+ const store = options.engine.store;
34
+ requireWorkflowStoreCapabilities(store, {
35
+ conditionalRunClaims: "workflow worker conditional run claims",
36
+ conditionalRunUpdates: "workflow worker conditional run updates",
37
+ conditionalRunLeaseExtensions: "workflow worker conditional lease extensions",
38
+ conditionalRunLeaseReleases: "workflow worker conditional lease releases",
39
+ conditionalEventAppends: "workflow worker conditional event appends",
40
+ reconcilesStepAttemptsFromEvents: "workflow worker step-attempt reconciliation"
41
+ });
42
+ this.#engine = options.engine;
43
+ this.#store = store;
44
+ this.#registry = options.registry;
45
+ this.#workerId = options.workerId ?? createDefaultWorkerId();
46
+ this.#leaseDuration = options.leaseDuration ?? DEFAULT_WORKER_LEASE_DURATION;
47
+ const resolvedLeaseDelay = positiveTimerDelay(this.#leaseDuration, "Workflow worker leaseDuration");
48
+ this.#heartbeatInterval = options.heartbeatInterval === void 0 ? Math.min(MAX_TIMER_DELAY, Math.max(1, Math.floor(resolvedLeaseDelay.clampedDelay / 2))) : nonNegativeTimerDelay(options.heartbeatInterval, "Workflow worker heartbeatInterval").clampedDelay;
49
+ this.#stopDrainTimeout = nonNegativeTimerDelay(options.stopDrainTimeout ?? DEFAULT_WORKER_STOP_DRAIN_TIMEOUT, "Workflow worker stopDrainTimeout").clampedDelay;
50
+ this.#defaultPollInterval = nonNegativeTimerDelay(options.pollInterval ?? DEFAULT_WORKER_POLL_INTERVAL, "Workflow worker pollInterval").clampedDelay;
51
+ this.#missingImplementationRetry = resolveMissingImplementationRetryConfig(options.missingImplementationRetry, {
52
+ initialInterval: DEFAULT_MISSING_IMPLEMENTATION_RETRY_INTERVAL,
53
+ backoffCoefficient: 2,
54
+ maximumAttempts: 0
55
+ }, "Workflow missing implementation retry options");
56
+ this.#now = options.now ?? Temporal.Now.instant;
57
+ }
58
+ async processRun(runId) {
59
+ this.#stopRequested = false;
60
+ const run = await this.#claimRun({ runId });
61
+ if (run === void 0) WorkflowStateError.runNotClaimable(runId);
62
+ if (this.#stopRequested) {
63
+ await this.#releaseLease(run.id, run.attempts);
64
+ WorkflowStateError.workerStoppedBeforeRun(runId);
65
+ }
66
+ return await this.#executeClaimedRun(run);
67
+ }
68
+ async processNextRun(options) {
69
+ this.#stopRequested = false;
70
+ return await this.#processNextRun(options);
71
+ }
72
+ async extendLease(runId, options) {
73
+ return await this.#extendLease(runId, options?.attempts);
74
+ }
75
+ async releaseLease(runId, options) {
76
+ return await this.#releaseLease(runId, options?.attempts);
77
+ }
78
+ async run(options) {
79
+ this.#stopRequested = false;
80
+ let processedRuns = 0;
81
+ const activeRuns = /* @__PURE__ */ new Set();
82
+ const pollInterval = options?.pollInterval === void 0 ? this.#defaultPollInterval : nonNegativeTimerDelay(options.pollInterval, "Workflow worker pollInterval").clampedDelay;
83
+ const maxRuns = resolvePositiveSafeIntegerOption(options?.maxRuns, "Workflow worker maxRuns");
84
+ const concurrency = resolvePositiveSafeIntegerOption(options?.concurrency, "Workflow worker concurrency") ?? 1;
85
+ const tickSchedules = options?.tickSchedules ?? false;
86
+ while (!this.#stopRequested && options?.signal?.aborted !== true) {
87
+ if (maxRuns !== void 0 && processedRuns >= maxRuns) break;
88
+ if (tickSchedules) await this.#tickDueSchedules();
89
+ while (!this.#stopRequested && activeRuns.size < concurrency && (maxRuns === void 0 || processedRuns + activeRuns.size < maxRuns)) {
90
+ let execution;
91
+ execution = this.#processNextRun(options ?? {}, options?.signal).then((result) => ({
92
+ execution,
93
+ result
94
+ }), (error) => ({
95
+ error,
96
+ execution
97
+ }));
98
+ activeRuns.add(execution);
99
+ }
100
+ if (activeRuns.size > 0) {
101
+ const settled = await Promise.race(activeRuns);
102
+ activeRuns.delete(settled.execution);
103
+ if (settled.error !== void 0) {
104
+ await this.#abortActiveWorkerExecutions(activeRuns);
105
+ throw settled.error;
106
+ }
107
+ if (settled.result !== void 0) {
108
+ processedRuns++;
109
+ continue;
110
+ }
111
+ if (activeRuns.size > 0) {
112
+ await this.#sleep(await this.#idlePollDelay(options ?? {}, pollInterval, tickSchedules), options?.signal);
113
+ continue;
114
+ }
115
+ }
116
+ if (this.#stopRequested || options?.signal?.aborted) break;
117
+ await this.#sleep(await this.#idlePollDelay(options ?? {}, pollInterval, tickSchedules), options?.signal);
118
+ }
119
+ if (activeRuns.size > 0) for (const settled of await Promise.all(activeRuns)) {
120
+ activeRuns.delete(settled.execution);
121
+ if (settled.error !== void 0) throw settled.error;
122
+ if (settled.result !== void 0) processedRuns++;
123
+ }
124
+ return { processedRuns };
125
+ }
126
+ async stop() {
127
+ this.#stopRequested = true;
128
+ const activeExecutions = [...this.#activeExecutions];
129
+ const releaseRuns = [...this.#activeExecutionRuns];
130
+ for (const controller of this.#activeExecutionAborts) controller.abort();
131
+ for (const wakeup of this.#pollWakeups) wakeup();
132
+ if (!await this.#waitForActiveExecutions(activeExecutions)) return;
133
+ await Promise.all(releaseRuns.map(async ([runId, attempts]) => await this.#releaseLease(runId, attempts)));
134
+ }
135
+ async #waitForActiveExecutions(activeExecutions) {
136
+ if (activeExecutions.length === 0) return true;
137
+ if (this.#stopDrainTimeout === 0) return false;
138
+ let timer;
139
+ const timeout = new Promise((resolve) => {
140
+ timer = setTimeout(() => {
141
+ resolve(false);
142
+ }, this.#stopDrainTimeout);
143
+ });
144
+ const drained = Promise.allSettled(activeExecutions).then(() => true);
145
+ const result = await Promise.race([drained, timeout]);
146
+ if (timer !== void 0) clearTimeout(timer);
147
+ return result;
148
+ }
149
+ async #abortActiveWorkerExecutions(activeRuns) {
150
+ for (const controller of this.#activeExecutionAborts) controller.abort();
151
+ await Promise.all(activeRuns);
152
+ }
153
+ async #claimRun(options) {
154
+ const timestamp = this.#now();
155
+ const run = await this.#store.claimRun({
156
+ ...options,
157
+ workerId: this.#workerId,
158
+ leaseDuration: this.#leaseDuration,
159
+ now: timestamp
160
+ });
161
+ if (run === void 0 && options?.runId !== void 0) this.#observeWorkerOperation({
162
+ operation: "claim",
163
+ status: "failure",
164
+ timestamp,
165
+ runId: options.runId
166
+ });
167
+ return run;
168
+ }
169
+ async #processNextRun(options, signal) {
170
+ const timestamp = this.#now();
171
+ const run = await this.#claimRun(options);
172
+ this.#observeWorkerOperation({
173
+ operation: "poll",
174
+ status: run === void 0 ? "empty" : "claimed",
175
+ timestamp,
176
+ ...run === void 0 ? {} : {
177
+ runId: run.id,
178
+ run
179
+ }
180
+ });
181
+ if (run === void 0) return;
182
+ if (this.#stopRequested || signal?.aborted === true) {
183
+ await this.#releaseLease(run.id, run.attempts);
184
+ return;
185
+ }
186
+ return await this.#executeClaimedRun(run, signal);
187
+ }
188
+ async #tickDueSchedules() {
189
+ if (this.#engine.tickSchedules === void 0) WorkflowCapabilityError.unsupported("workflow schedule ticking");
190
+ await this.#engine.tickSchedules({ now: this.#now() });
191
+ }
192
+ async #executeClaimedRun(run, signal) {
193
+ const definition = this.#registry.getByName(run.workflowName, run.workflowVersion);
194
+ if (definition === void 0) return await this.#rescheduleMissingImplementation(run);
195
+ const attempts = run.attempts !== void 0 && isPositiveSafeInteger(run.attempts) ? run.attempts : void 0;
196
+ return await this.#withHeartbeat(run.id, attempts, signal, async (executionSignal) => await this.#engine.resumeWorkflow(definition, run.id, { signal: executionSignal }));
197
+ }
198
+ async #rescheduleMissingImplementation(run) {
199
+ const timestamp = this.#now();
200
+ const retryAttempt = run.attempts ?? (run.retryAttempt ?? 0) + 1;
201
+ const errorRecord = makeMissingImplementationNotFoundErrorRecord(run);
202
+ const deadlineAt = run.deadlineAt;
203
+ if (deadlineAt !== void 0 && Temporal.Instant.compare(deadlineAt, timestamp) <= 0) return await this.#failMissingImplementationForDeadline(run, deadlineAt, timestamp);
204
+ if (this.#missingImplementationRetry.maximumAttempts > 0 && retryAttempt >= this.#missingImplementationRetry.maximumAttempts) return await this.#failMissingImplementationRun(run, errorRecord, timestamp);
205
+ let availableAt;
206
+ try {
207
+ availableAt = timestamp.add(Temporal.Duration.from({ milliseconds: nonNegativeTimerDelay(missingImplementationRetryDelay(this.#missingImplementationRetry, retryAttempt), "Workflow missing implementation retry delay").clampedDelay }));
208
+ } catch (retryError) {
209
+ return await this.#failMissingImplementationRun(run, toWorkflowWorkerErrorRecord(retryError), timestamp);
210
+ }
211
+ if (deadlineAt !== void 0 && Temporal.Instant.compare(deadlineAt, availableAt) <= 0) return await this.#failMissingImplementationForDeadline(run, deadlineAt, timestamp);
212
+ const waitingRun = await patchRunIfCurrent(this.#store, run, transitionRunToMissingImplementationWait(run, errorRecord, timestamp, availableAt, retryAttempt));
213
+ if (waitingRun === void 0) return await this.#readRunExecutionResult(run.id);
214
+ await wakeParentRunForWaitingChild(this.#store, waitingRun, availableAt);
215
+ return {
216
+ kind: "waiting",
217
+ run: waitingRun,
218
+ availableAt
219
+ };
220
+ }
221
+ async #failMissingImplementationRun(run, errorRecord, timestamp) {
222
+ return await this.#failClaimedMissingImplementationRun(run, errorRecord, timestamp, "failed");
223
+ }
224
+ async #failMissingImplementationForDeadline(run, deadlineAt, timestamp) {
225
+ return await this.#failClaimedMissingImplementationRun(run, makeMissingImplementationDeadlineErrorRecord(run, deadlineAt), timestamp, "deadline", deadlineAt);
226
+ }
227
+ async #failClaimedMissingImplementationRun(run, errorRecord, timestamp, reason, deadlineAt) {
228
+ const failedRun = await patchRunIfCurrent(this.#store, run, transitionRunToFailed(run, errorRecord, timestamp, reason, deadlineAt));
229
+ if (failedRun === void 0) return await this.#readRunExecutionResult(run.id);
230
+ if (await this.#store.appendEventIfRunCurrent(failedRun, {
231
+ kind: "workflow_failed",
232
+ timestamp
233
+ }) === void 0) return await this.#readRunExecutionResult(run.id);
234
+ await wakeParentRunForTerminalChild(this.#store, failedRun, timestamp);
235
+ return {
236
+ kind: "failed",
237
+ run: failedRun,
238
+ error: errorRecord
239
+ };
240
+ }
241
+ async #readRunExecutionResult(runId) {
242
+ const current = await this.#engine.getRun(runId);
243
+ if (current === void 0) WorkflowRunNotFoundError.notFound(runId);
244
+ if (current.status === "completed") return {
245
+ kind: "completed",
246
+ run: current,
247
+ output: current.output
248
+ };
249
+ if (current.status === "failed") return {
250
+ kind: "failed",
251
+ run: current,
252
+ error: current.error ?? {
253
+ name: "WorkflowError",
254
+ message: `Workflow run failed: ${runId}`
255
+ }
256
+ };
257
+ if (current.status === "canceled") return {
258
+ kind: "failed",
259
+ run: current,
260
+ error: current.error ?? {
261
+ name: "WorkflowRunCanceledError",
262
+ message: `Workflow run was canceled: ${runId}`
263
+ }
264
+ };
265
+ return {
266
+ kind: "waiting",
267
+ run: current,
268
+ availableAt: current.availableAt ?? this.#now()
269
+ };
270
+ }
271
+ async #extendLease(runId, attempts) {
272
+ const timestamp = this.#now();
273
+ const run = await this.#store.extendRunLease({
274
+ runId,
275
+ workerId: this.#workerId,
276
+ attempts,
277
+ leaseDuration: this.#leaseDuration,
278
+ now: timestamp
279
+ });
280
+ this.#observeWorkerOperation({
281
+ operation: "lease_extension",
282
+ status: run === void 0 ? "failure" : "success",
283
+ timestamp,
284
+ runId,
285
+ ...run === void 0 ? {} : { run }
286
+ });
287
+ return run;
288
+ }
289
+ async #releaseLease(runId, attempts) {
290
+ const timestamp = this.#now();
291
+ const run = await this.#store.releaseRunLease({
292
+ runId,
293
+ workerId: this.#workerId,
294
+ attempts,
295
+ now: timestamp
296
+ });
297
+ this.#observeWorkerOperation({
298
+ operation: "lease_release",
299
+ status: run === void 0 ? "failure" : "success",
300
+ timestamp,
301
+ runId,
302
+ ...run === void 0 ? {} : { run }
303
+ });
304
+ return run;
305
+ }
306
+ async #withHeartbeat(runId, attempts, signal, callback) {
307
+ const executionAbort = new AbortController();
308
+ this.#activeExecutionAborts.add(executionAbort);
309
+ if (attempts !== void 0) this.#activeExecutionRuns.set(runId, attempts);
310
+ let timer;
311
+ let heartbeatPending = false;
312
+ let heartbeat;
313
+ let heartbeatError;
314
+ let abortRelease;
315
+ const abortExecution = () => {
316
+ executionAbort.abort();
317
+ abortRelease = this.#releaseLease(runId, attempts);
318
+ };
319
+ if (this.#stopRequested || signal?.aborted === true) executionAbort.abort();
320
+ else signal?.addEventListener("abort", abortExecution, { once: true });
321
+ if (this.#heartbeatInterval > 0) timer = setInterval(() => {
322
+ if (heartbeatPending || executionAbort.signal.aborted) return;
323
+ heartbeatPending = true;
324
+ heartbeat = this.#extendLease(runId, attempts).then((run) => {
325
+ if (run === void 0) {
326
+ this.#observeWorkerOperation({
327
+ operation: "heartbeat",
328
+ status: "failure",
329
+ timestamp: this.#now(),
330
+ runId
331
+ });
332
+ executionAbort.abort();
333
+ }
334
+ }).catch((error) => {
335
+ executionAbort.abort();
336
+ heartbeatError ??= error;
337
+ this.#observeWorkerOperation({
338
+ operation: "heartbeat",
339
+ status: "failure",
340
+ timestamp: this.#now(),
341
+ runId,
342
+ error
343
+ });
344
+ }).finally(() => {
345
+ heartbeatPending = false;
346
+ });
347
+ }, this.#heartbeatInterval);
348
+ const execution = (async () => await callback(executionAbort.signal))();
349
+ this.#activeExecutions.add(execution);
350
+ let executionOutcome;
351
+ try {
352
+ executionOutcome = {
353
+ status: "fulfilled",
354
+ value: await execution
355
+ };
356
+ } catch (error) {
357
+ executionOutcome = {
358
+ status: "rejected",
359
+ reason: error
360
+ };
361
+ } finally {
362
+ if (timer !== void 0) clearInterval(timer);
363
+ this.#activeExecutions.delete(execution);
364
+ this.#activeExecutionAborts.delete(executionAbort);
365
+ this.#activeExecutionRuns.delete(runId);
366
+ signal?.removeEventListener("abort", abortExecution);
367
+ await heartbeat;
368
+ await abortRelease;
369
+ }
370
+ if (heartbeatError !== void 0) throw heartbeatError;
371
+ if (executionOutcome.status === "rejected") throw executionOutcome.reason;
372
+ return executionOutcome.value;
373
+ }
374
+ #observeWorkerOperation(event) {
375
+ try {
376
+ this.#engine.observeWorkerOperation?.({
377
+ workerId: this.#workerId,
378
+ ...event
379
+ });
380
+ } catch {
381
+ return;
382
+ }
383
+ }
384
+ async #sleep(duration, signal) {
385
+ if (duration <= 0 || this.#stopRequested || signal?.aborted === true) {
386
+ await Promise.resolve();
387
+ return;
388
+ }
389
+ await new Promise((resolve) => {
390
+ let timer;
391
+ const finish = () => {
392
+ if (timer !== void 0) clearTimeout(timer);
393
+ this.#pollWakeups.delete(finish);
394
+ signal?.removeEventListener("abort", finish);
395
+ resolve();
396
+ };
397
+ this.#pollWakeups.add(finish);
398
+ signal?.addEventListener("abort", finish, { once: true });
399
+ timer = setTimeout(finish, duration);
400
+ });
401
+ }
402
+ async #idlePollDelay(options, pollInterval, tickSchedules) {
403
+ if (pollInterval <= 0 || this.#engine.getRunSummary === void 0) return pollInterval;
404
+ const timestamp = this.#now();
405
+ const summaryWakeAt = earliestSummaryWakeAt(await this.#engine.getRunSummary(options), timestamp);
406
+ const scheduleWakeAt = tickSchedules ? await this.#nextScheduleWakeAt() : void 0;
407
+ const nextWakeAt = summaryWakeAt === void 0 ? scheduleWakeAt : scheduleWakeAt === void 0 || Temporal.Instant.compare(summaryWakeAt, scheduleWakeAt) <= 0 ? summaryWakeAt : scheduleWakeAt;
408
+ if (nextWakeAt === void 0) return pollInterval;
409
+ return Math.min(pollInterval, nonNegativeTimerDelay(durationBetween(timestamp, nextWakeAt), "Workflow idle poll delay").clampedDelay);
410
+ }
411
+ async #nextScheduleWakeAt() {
412
+ if (this.#engine.listSchedules === void 0) return;
413
+ return (await this.#engine.listSchedules({
414
+ status: "active",
415
+ limit: 1
416
+ }))[0]?.nextFireAt;
417
+ }
418
+ };
419
+ function earliestSummaryWakeAt(summary, timestamp) {
420
+ if (summary.lease.expired > 0) return timestamp;
421
+ const nextAt = summary.nextAvailableAt === void 0 ? summary.retry.nextRetryAt : summary.retry.nextRetryAt === void 0 || Temporal.Instant.compare(summary.nextAvailableAt, summary.retry.nextRetryAt) <= 0 ? summary.nextAvailableAt : summary.retry.nextRetryAt;
422
+ if (nextAt === void 0) return summary.lease.nextExpiresAt;
423
+ if (summary.lease.nextExpiresAt === void 0) return nextAt;
424
+ return Temporal.Instant.compare(summary.lease.nextExpiresAt, nextAt) < 0 ? summary.lease.nextExpiresAt : nextAt;
425
+ }
426
+ //#endregion
427
+ export { WorkflowWorker };
package/package.json ADDED
@@ -0,0 +1,144 @@
1
+ {
2
+ "name": "@temelj/workflow",
3
+ "version": "0.0.0-alpha.1",
4
+ "description": "Durable, vendor-agnostic, extendible workflows.",
5
+ "license": "MIT",
6
+ "repository": {
7
+ "url": "https://github.com/tinrab/temelj"
8
+ },
9
+ "files": [
10
+ "dist"
11
+ ],
12
+ "type": "module",
13
+ "main": "./dist/mod.mjs",
14
+ "types": "./dist/mod.d.mts",
15
+ "exports": {
16
+ ".": {
17
+ "types": "./dist/mod.d.mts",
18
+ "import": "./dist/mod.mjs"
19
+ },
20
+ "./engine": {
21
+ "types": "./dist/engine/mod.d.mts",
22
+ "import": "./dist/engine/mod.mjs"
23
+ },
24
+ "./esbuild": {
25
+ "types": "./dist/esbuild.d.mts",
26
+ "import": "./dist/esbuild.mjs"
27
+ },
28
+ "./events": {
29
+ "types": "./dist/events/mod.d.mts",
30
+ "import": "./dist/events/mod.mjs"
31
+ },
32
+ "./inspection": {
33
+ "types": "./dist/inspection/mod.d.mts",
34
+ "import": "./dist/inspection/mod.mjs"
35
+ },
36
+ "./otel": {
37
+ "types": "./dist/otel.d.mts",
38
+ "import": "./dist/otel.mjs"
39
+ },
40
+ "./registry": {
41
+ "types": "./dist/registry.d.mts",
42
+ "import": "./dist/registry.mjs"
43
+ },
44
+ "./rolldown": {
45
+ "types": "./dist/rolldown.d.mts",
46
+ "import": "./dist/rolldown.mjs"
47
+ },
48
+ "./rollup": {
49
+ "types": "./dist/rollup.d.mts",
50
+ "import": "./dist/rollup.mjs"
51
+ },
52
+ "./rspack": {
53
+ "types": "./dist/rspack.d.mts",
54
+ "import": "./dist/rspack.mjs"
55
+ },
56
+ "./telemetry": {
57
+ "types": "./dist/telemetry.d.mts",
58
+ "import": "./dist/telemetry.mjs"
59
+ },
60
+ "./store": {
61
+ "types": "./dist/store/mod.d.mts",
62
+ "import": "./dist/store/mod.mjs"
63
+ },
64
+ "./vite": {
65
+ "types": "./dist/vite.d.mts",
66
+ "import": "./dist/vite.mjs"
67
+ },
68
+ "./webpack": {
69
+ "types": "./dist/webpack.d.mts",
70
+ "import": "./dist/webpack.mjs"
71
+ },
72
+ "./worker": {
73
+ "types": "./dist/worker.d.mts",
74
+ "import": "./dist/worker.mjs"
75
+ }
76
+ },
77
+ "dependencies": {
78
+ "@opentelemetry/api": "^1.9.1",
79
+ "oxc-parser": "0.141.0",
80
+ "unplugin": "^3.3.0",
81
+ "zod": "^4.4.3",
82
+ "@temelj/event": "0.1.0",
83
+ "@temelj/standard-schema": "0.1.0",
84
+ "@temelj/storage": "0.4.0",
85
+ "@temelj/string": "0.14.0",
86
+ "@temelj/value": "0.14.0",
87
+ "@temelj/log": "0.1.0"
88
+ },
89
+ "devDependencies": {
90
+ "@opentelemetry/sdk-metrics": "^2.10.0",
91
+ "@opentelemetry/sdk-trace-base": "^2.10.0",
92
+ "@rspack/core": "^2.1.5",
93
+ "@types/node": "26.1.1",
94
+ "esbuild": "^0.28.1",
95
+ "rolldown": "^1.2.0",
96
+ "rollup": "^4.62.2",
97
+ "shx": "^0.4.0",
98
+ "tsdown": "^0.22.14",
99
+ "typedoc": "^0.28.20",
100
+ "typescript": "^7.0.2",
101
+ "vite": "^8.1.5",
102
+ "vitest": "^4.1.10",
103
+ "webpack": "^5.109.0"
104
+ },
105
+ "peerDependencies": {
106
+ "@rspack/core": "^2.0.0",
107
+ "esbuild": "^0.28.0",
108
+ "rolldown": "^1.0.0",
109
+ "rollup": "^4.0.0",
110
+ "typescript": "^6.0.0",
111
+ "vite": "^8.0.0",
112
+ "webpack": "^5.0.0"
113
+ },
114
+ "peerDependenciesMeta": {
115
+ "@rspack/core": {
116
+ "optional": true
117
+ },
118
+ "esbuild": {
119
+ "optional": true
120
+ },
121
+ "rolldown": {
122
+ "optional": true
123
+ },
124
+ "rollup": {
125
+ "optional": true
126
+ },
127
+ "typescript": {
128
+ "optional": true
129
+ },
130
+ "vite": {
131
+ "optional": true
132
+ },
133
+ "webpack": {
134
+ "optional": true
135
+ }
136
+ },
137
+ "scripts": {
138
+ "build": "tsdown",
139
+ "test": "vitest run",
140
+ "typecheck": "tsc --noEmit",
141
+ "clean": "shx rm -rf dist",
142
+ "docs": "shx rm -rf docs && typedoc"
143
+ }
144
+ }