awaitly 1.34.0 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (241) hide show
  1. package/dist/{duration.d.ts → di-BDlT7InM.d.cts} +15 -1
  2. package/dist/{duration.d.cts → di-BbFFfO8y.d.ts} +15 -1
  3. package/dist/errors-DtXvrCiO.d.cts +708 -0
  4. package/dist/errors-DtXvrCiO.d.ts +708 -0
  5. package/dist/index.cjs +4594 -1
  6. package/dist/index.cjs.map +1 -1
  7. package/dist/index.d.cts +1970 -141
  8. package/dist/index.d.ts +1970 -141
  9. package/dist/index.js +4398 -1
  10. package/dist/index.js.map +1 -1
  11. package/dist/result.cjs +641 -1
  12. package/dist/result.cjs.map +1 -1
  13. package/dist/result.d.cts +35 -5
  14. package/dist/result.d.ts +35 -5
  15. package/dist/result.js +561 -1
  16. package/dist/result.js.map +1 -1
  17. package/dist/testing.cjs +4202 -8
  18. package/dist/testing.cjs.map +1 -1
  19. package/dist/testing.d.cts +2 -6
  20. package/dist/testing.d.ts +2 -6
  21. package/dist/testing.js +4154 -8
  22. package/dist/testing.js.map +1 -1
  23. package/dist/{run-entry-D2MmJFj9.d.cts → types-B8NfNRGX.d.ts} +1152 -1499
  24. package/dist/{run-entry-Dduz-is2.d.ts → types-BZ2f4MRR.d.cts} +1152 -1499
  25. package/dist/workflow.cjs +7096 -6
  26. package/dist/workflow.cjs.map +1 -1
  27. package/dist/workflow.d.cts +3346 -22
  28. package/dist/workflow.d.ts +3346 -22
  29. package/dist/workflow.js +6929 -6
  30. package/dist/workflow.js.map +1 -1
  31. package/package.json +13 -178
  32. package/dist/adapters.cjs +0 -7
  33. package/dist/adapters.cjs.map +0 -1
  34. package/dist/adapters.d.cts +0 -179
  35. package/dist/adapters.d.ts +0 -179
  36. package/dist/adapters.js +0 -7
  37. package/dist/adapters.js.map +0 -1
  38. package/dist/batch.cjs +0 -7
  39. package/dist/batch.cjs.map +0 -1
  40. package/dist/batch.d.cts +0 -200
  41. package/dist/batch.d.ts +0 -200
  42. package/dist/batch.js +0 -7
  43. package/dist/batch.js.map +0 -1
  44. package/dist/bind-deps.cjs +0 -2
  45. package/dist/bind-deps.cjs.map +0 -1
  46. package/dist/bind-deps.d.cts +0 -28
  47. package/dist/bind-deps.d.ts +0 -28
  48. package/dist/bind-deps.js +0 -2
  49. package/dist/bind-deps.js.map +0 -1
  50. package/dist/cache.cjs +0 -2
  51. package/dist/cache.cjs.map +0 -1
  52. package/dist/cache.d.cts +0 -269
  53. package/dist/cache.d.ts +0 -269
  54. package/dist/cache.js +0 -2
  55. package/dist/cache.js.map +0 -1
  56. package/dist/circuit-breaker.cjs +0 -7
  57. package/dist/circuit-breaker.cjs.map +0 -1
  58. package/dist/circuit-breaker.d.cts +0 -211
  59. package/dist/circuit-breaker.d.ts +0 -211
  60. package/dist/circuit-breaker.js +0 -7
  61. package/dist/circuit-breaker.js.map +0 -1
  62. package/dist/conditional.cjs +0 -2
  63. package/dist/conditional.cjs.map +0 -1
  64. package/dist/conditional.d.cts +0 -252
  65. package/dist/conditional.d.ts +0 -252
  66. package/dist/conditional.js +0 -2
  67. package/dist/conditional.js.map +0 -1
  68. package/dist/core.cjs +0 -7
  69. package/dist/core.cjs.map +0 -1
  70. package/dist/core.d.cts +0 -5
  71. package/dist/core.d.ts +0 -5
  72. package/dist/core.js +0 -7
  73. package/dist/core.js.map +0 -1
  74. package/dist/di-COl5oFnR.d.cts +0 -15
  75. package/dist/di-CyDj_JyZ.d.ts +0 -15
  76. package/dist/diagnostics.cjs +0 -8
  77. package/dist/diagnostics.cjs.map +0 -1
  78. package/dist/diagnostics.d.cts +0 -68
  79. package/dist/diagnostics.d.ts +0 -68
  80. package/dist/diagnostics.js +0 -8
  81. package/dist/diagnostics.js.map +0 -1
  82. package/dist/durable.cjs +0 -11
  83. package/dist/durable.cjs.map +0 -1
  84. package/dist/durable.d.cts +0 -9
  85. package/dist/durable.d.ts +0 -9
  86. package/dist/durable.js +0 -11
  87. package/dist/durable.js.map +0 -1
  88. package/dist/duration.cjs +0 -2
  89. package/dist/duration.cjs.map +0 -1
  90. package/dist/duration.js +0 -2
  91. package/dist/duration.js.map +0 -1
  92. package/dist/engine.cjs +0 -11
  93. package/dist/engine.cjs.map +0 -1
  94. package/dist/engine.d.cts +0 -115
  95. package/dist/engine.d.ts +0 -115
  96. package/dist/engine.js +0 -11
  97. package/dist/engine.js.map +0 -1
  98. package/dist/errors.cjs +0 -2
  99. package/dist/errors.cjs.map +0 -1
  100. package/dist/errors.d.cts +0 -361
  101. package/dist/errors.d.ts +0 -361
  102. package/dist/errors.js +0 -2
  103. package/dist/errors.js.map +0 -1
  104. package/dist/fetch.cjs +0 -7
  105. package/dist/fetch.cjs.map +0 -1
  106. package/dist/fetch.d.cts +0 -86
  107. package/dist/fetch.d.ts +0 -86
  108. package/dist/fetch.js +0 -7
  109. package/dist/fetch.js.map +0 -1
  110. package/dist/flow.cjs +0 -7
  111. package/dist/flow.cjs.map +0 -1
  112. package/dist/flow.d.cts +0 -163
  113. package/dist/flow.d.ts +0 -163
  114. package/dist/flow.js +0 -7
  115. package/dist/flow.js.map +0 -1
  116. package/dist/functional.cjs +0 -2
  117. package/dist/functional.cjs.map +0 -1
  118. package/dist/functional.d.cts +0 -444
  119. package/dist/functional.d.ts +0 -444
  120. package/dist/functional.js +0 -2
  121. package/dist/functional.js.map +0 -1
  122. package/dist/guards-BodHXLzX.d.cts +0 -72
  123. package/dist/guards-CeWoQ8fn.d.ts +0 -72
  124. package/dist/hitl-BPE_1UiM.d.cts +0 -468
  125. package/dist/hitl-byp570uC.d.ts +0 -468
  126. package/dist/hitl.cjs +0 -7
  127. package/dist/hitl.cjs.map +0 -1
  128. package/dist/hitl.d.cts +0 -442
  129. package/dist/hitl.d.ts +0 -442
  130. package/dist/hitl.js +0 -7
  131. package/dist/hitl.js.map +0 -1
  132. package/dist/index-BYT3amEz.d.ts +0 -417
  133. package/dist/index-C_ak66jy.d.cts +0 -417
  134. package/dist/match-entry-DjI2bLpD.d.cts +0 -209
  135. package/dist/match-entry-DjI2bLpD.d.ts +0 -209
  136. package/dist/match.cjs +0 -2
  137. package/dist/match.cjs.map +0 -1
  138. package/dist/match.d.cts +0 -1
  139. package/dist/match.d.ts +0 -1
  140. package/dist/match.js +0 -2
  141. package/dist/match.js.map +0 -1
  142. package/dist/otel.cjs +0 -2
  143. package/dist/otel.cjs.map +0 -1
  144. package/dist/otel.d.cts +0 -188
  145. package/dist/otel.d.ts +0 -188
  146. package/dist/otel.js +0 -2
  147. package/dist/otel.js.map +0 -1
  148. package/dist/persistence-entry-DOMx3woy.d.ts +0 -822
  149. package/dist/persistence-entry-ymCA4iDu.d.cts +0 -822
  150. package/dist/persistence.cjs +0 -2
  151. package/dist/persistence.cjs.map +0 -1
  152. package/dist/persistence.d.cts +0 -7
  153. package/dist/persistence.d.ts +0 -7
  154. package/dist/persistence.js +0 -2
  155. package/dist/persistence.js.map +0 -1
  156. package/dist/policies.cjs +0 -2
  157. package/dist/policies.cjs.map +0 -1
  158. package/dist/policies.d.cts +0 -379
  159. package/dist/policies.d.ts +0 -379
  160. package/dist/policies.js +0 -2
  161. package/dist/policies.js.map +0 -1
  162. package/dist/ratelimit.cjs +0 -7
  163. package/dist/ratelimit.cjs.map +0 -1
  164. package/dist/ratelimit.d.cts +0 -458
  165. package/dist/ratelimit.d.ts +0 -458
  166. package/dist/ratelimit.js +0 -7
  167. package/dist/ratelimit.js.map +0 -1
  168. package/dist/reliability.cjs +0 -11
  169. package/dist/reliability.cjs.map +0 -1
  170. package/dist/reliability.d.cts +0 -11
  171. package/dist/reliability.d.ts +0 -11
  172. package/dist/reliability.js +0 -11
  173. package/dist/reliability.js.map +0 -1
  174. package/dist/resolver.cjs +0 -7
  175. package/dist/resolver.cjs.map +0 -1
  176. package/dist/resolver.d.cts +0 -68
  177. package/dist/resolver.d.ts +0 -68
  178. package/dist/resolver.js +0 -7
  179. package/dist/resolver.js.map +0 -1
  180. package/dist/resource.cjs +0 -7
  181. package/dist/resource.cjs.map +0 -1
  182. package/dist/resource.d.cts +0 -174
  183. package/dist/resource.d.ts +0 -174
  184. package/dist/resource.js +0 -7
  185. package/dist/resource.js.map +0 -1
  186. package/dist/result/retry.cjs +0 -2
  187. package/dist/result/retry.cjs.map +0 -1
  188. package/dist/result/retry.d.cts +0 -70
  189. package/dist/result/retry.d.ts +0 -70
  190. package/dist/result/retry.js +0 -2
  191. package/dist/result/retry.js.map +0 -1
  192. package/dist/retry.cjs +0 -2
  193. package/dist/retry.cjs.map +0 -1
  194. package/dist/retry.d.cts +0 -388
  195. package/dist/retry.d.ts +0 -388
  196. package/dist/retry.js +0 -2
  197. package/dist/retry.js.map +0 -1
  198. package/dist/run.cjs +0 -7
  199. package/dist/run.cjs.map +0 -1
  200. package/dist/run.d.cts +0 -4
  201. package/dist/run.d.ts +0 -4
  202. package/dist/run.js +0 -7
  203. package/dist/run.js.map +0 -1
  204. package/dist/saga.cjs +0 -11
  205. package/dist/saga.cjs.map +0 -1
  206. package/dist/saga.d.cts +0 -164
  207. package/dist/saga.d.ts +0 -164
  208. package/dist/saga.js +0 -11
  209. package/dist/saga.js.map +0 -1
  210. package/dist/singleflight.cjs +0 -2
  211. package/dist/singleflight.cjs.map +0 -1
  212. package/dist/singleflight.d.cts +0 -145
  213. package/dist/singleflight.d.ts +0 -145
  214. package/dist/singleflight.js +0 -2
  215. package/dist/singleflight.js.map +0 -1
  216. package/dist/slugs.cjs +0 -2
  217. package/dist/slugs.cjs.map +0 -1
  218. package/dist/slugs.d.cts +0 -67
  219. package/dist/slugs.d.ts +0 -67
  220. package/dist/slugs.js +0 -2
  221. package/dist/slugs.js.map +0 -1
  222. package/dist/streaming.cjs +0 -9
  223. package/dist/streaming.cjs.map +0 -1
  224. package/dist/streaming.d.cts +0 -596
  225. package/dist/streaming.d.ts +0 -596
  226. package/dist/streaming.js +0 -9
  227. package/dist/streaming.js.map +0 -1
  228. package/dist/tagged-error.cjs +0 -2
  229. package/dist/tagged-error.cjs.map +0 -1
  230. package/dist/tagged-error.d.cts +0 -275
  231. package/dist/tagged-error.d.ts +0 -275
  232. package/dist/tagged-error.js +0 -2
  233. package/dist/tagged-error.js.map +0 -1
  234. package/dist/types-DQmzO9f4.d.ts +0 -323
  235. package/dist/types-qBUOYi-4.d.cts +0 -323
  236. package/dist/webhook.cjs +0 -7
  237. package/dist/webhook.cjs.map +0 -1
  238. package/dist/webhook.d.cts +0 -499
  239. package/dist/webhook.d.ts +0 -499
  240. package/dist/webhook.js +0 -7
  241. package/dist/webhook.js.map +0 -1
package/dist/saga.cjs DELETED
@@ -1,11 +0,0 @@
1
- "use strict";var Be=Object.defineProperty;var Ct=Object.getOwnPropertyDescriptor;var bt=Object.getOwnPropertyNames;var vt=Object.prototype.hasOwnProperty;var At=(e,t)=>{for(var a in t)Be(e,a,{get:t[a],enumerable:!0})},_t=(e,t,a,x)=>{if(t&&typeof t=="object"||typeof t=="function")for(let y of bt(t))!vt.call(e,y)&&y!==a&&Be(e,y,{get:()=>t[y],enumerable:!(x=Ct(t,y))||x.enumerable});return e};var Dt=e=>_t(Be({},"__esModule",{value:!0}),e);var Yt={};At(Yt,{createSagaWorkflow:()=>ht,isSagaCompensationError:()=>xt,runSaga:()=>St});module.exports=Dt(Yt);var Ot={"step-require-id":"step-require-id","step-no-immediate-execution":"step-no-immediate-execution","step-require-thunk-for-key":"step-require-thunk-for-key","step-no-bare-await":"step-no-bare-await","step-no-try-catch-wrap":"step-no-try-catch-wrap","step-stable-cache-keys":"step-stable-cache-keys","workflow-no-floating":"workflow-no-floating","workflow-options-position":"workflow-options-position","workflow-callback-shape":"workflow-callback-shape","workflow-no-callable-form":"workflow-no-callable-form","workflow-no-dynamic-import":"workflow-no-dynamic-import","result-no-floating":"result-no-floating","result-require-handling":"result-require-handling","result-no-double-wrap":"result-no-double-wrap","result-no-manual-propagation":"result-no-manual-propagation","result-no-direct-ok-err":"result-no-direct-ok-err","error-check-unexpected-first":"error-check-unexpected-first","error-access-cause":"error-access-cause","error-normalize":"error-normalize","error-no-throw-in-deps":"error-no-throw-in-deps","concurrency-no-promise-all":"concurrency-no-promise-all","concurrency-no-promise-race":"concurrency-no-promise-race","concurrency-no-promise-allsettled":"concurrency-no-promise-allsettled","runtime-step-timeout":"runtime-step-timeout","runtime-step-aborted":"runtime-step-aborted","runtime-retry-exhausted":"runtime-retry-exhausted","runtime-rate-limit":"runtime-rate-limit","runtime-circuit-open":"runtime-circuit-open","runtime-unexpected":"runtime-unexpected","runtime-resolver-not-found":"runtime-resolver-not-found","runtime-saga-compensation":"runtime-saga-compensation"};function Qe(e){return`https://jagreehal.github.io/awaitly/rules/#${e}`}var Xt=Object.keys(Ot);var Ue=class extends Error{_tag};function pe(e,t){return class extends Ue{_tag=e;constructor(a,x){let y=t?.message?t.message(a??{}):e;if(super(y),this.name=e,t?.slug!==void 0){if(!t.hint)throw new TypeError(`TaggedError: 'hint' is required when 'slug' is set (slug: "${t.slug}")`);Object.defineProperty(this,"code",{value:t.slug,enumerable:!0,writable:!1,configurable:!1}),Object.defineProperty(this,"hint",{value:t.hint,enumerable:!0,writable:!1,configurable:!1}),Object.defineProperty(this,"docsUrl",{value:Qe(t.slug),enumerable:!0,writable:!1,configurable:!1})}if(Object.setPrototypeOf(this,new.target.prototype),a&&typeof a=="object"){let g;if(t?.slug!==void 0){let{_tag:o,name:J,message:v,stack:E,code:G,hint:l,docsUrl:X,...ne}=a;g=ne}else{let{_tag:o,name:J,message:v,stack:E,...G}=a;g=G}let N=Object.prototype.hasOwnProperty.call(g,"cause"),C=N?g.cause:void 0;N&&delete g.cause;let H=x?.cause!==void 0;if(N&&H)throw new TypeError("TaggedError: cannot provide 'cause' in props when also setting ErrorOptions.cause");Object.assign(this,g),N&&(this.cause=C),H&&(this.cause=x?.cause)}else x?.cause!==void 0&&(this.cause=x.cause)}}}Object.defineProperty(pe,Symbol.hasInstance,{value:e=>e instanceof Ue});(y=>{function e(g){return g instanceof Error}y.isError=e;function t(g){return g instanceof Ue}y.isTaggedError=t;function a(g,N){let C=g._tag,H=N[C];return H(g)}y.match=a;function x(g,N,C){let H=g._tag,o=N[H];return o?o(g):C(g)}y.matchPartial=x})(pe||={});var et=class extends pe("TimeoutError",{slug:"runtime-step-timeout",hint:"Increase the step's timeout option, or check why the upstream operation is slow.",message:t=>t.operation?`TimeoutError: ${t.operation} timed out after ${t.ms}ms`:`TimeoutError: Operation timed out after ${t.ms}ms`}){},tt=class extends pe("RetryExhaustedError",{slug:"runtime-retry-exhausted",hint:"All retry attempts failed. Inspect lastError and decide whether to surface it or compensate.",message:t=>t.operation?`RetryExhaustedError: ${t.operation} failed after ${t.attempts} attempts`:`RetryExhaustedError: Operation failed after ${t.attempts} attempts`}){},rt=class extends pe("RateLimitError",{slug:"runtime-rate-limit",hint:"Wait retryAfterMs before retrying, or apply step.cache to deduplicate calls.",message:t=>t.limiterName?`RateLimitError: Rate limit exceeded for ${t.limiterName}${t.retryAfterMs?`, retry after ${t.retryAfterMs}ms`:""}`:`RateLimitError: Rate limit exceeded${t.retryAfterMs?`, retry after ${t.retryAfterMs}ms`:""}`}){},nt=class extends pe("CircuitBreakerOpenError",{slug:"runtime-circuit-open",hint:"The circuit is open. Wait for it to half-open or fall back to a degraded path.",message:t=>`CircuitBreakerOpenError: Circuit ${t.circuitName} is ${t.state??"OPEN"}${t.retryAfterMs?`, retry after ${Math.ceil(t.retryAfterMs/1e3)}s`:""}`}){},ot=class extends pe("ValidationError",{message:t=>`ValidationError: Invalid ${t.field} - ${t.reason}`}){},st=class extends pe("NotFoundError",{message:t=>t.id?`NotFoundError: ${t.resource} with id ${t.id} not found`:`NotFoundError: ${t.resource} not found`}){},at=class extends pe("UnauthorizedError",{message:t=>t.reason?`UnauthorizedError: ${t.reason}`:t.action&&t.resource?`UnauthorizedError: Not authorized to ${t.action} ${t.resource}`:"UnauthorizedError: Access denied"}){},it=class extends pe("NetworkError",{message:t=>t.url?`NetworkError: ${t.reason} (${t.url})`:`NetworkError: ${t.reason}`}){},ut=class extends pe("CompensationError",{slug:"runtime-saga-compensation",hint:"A saga compensation step failed. Inspect compensationError and ensure compensation is idempotent.",message:t=>`CompensationError: Failed to compensate step ${t.step}`}){},be=class extends pe("UnexpectedError",{slug:"runtime-unexpected",hint:"An unexpected exception escaped a step. Inspect cause; consider returning a typed Result instead of throwing.",message:t=>`UnexpectedError: ${t.cause instanceof Error?t.cause.message:String(t.cause??"unknown")}`}){};function Pt(e){let t=e.trim().match(/^(\d+(?:\.\d+)?)\s*(ms|s|m|h|d)$/i);if(!t)return;let a=parseFloat(t[1]),x=t[2].toLowerCase();return{_tag:"Duration",millis:a*({ms:1,s:1e3,m:6e4,h:36e5,d:864e5}[x]??1)}}function Ke(e){return new be({cause:e})}function Y(e){return{ok:!0,value:e}}function K(e,t){let a=t?.cause;return{ok:!1,error:e,...a!==void 0?{cause:a}:{}}}var mt=e=>e instanceof be||typeof e=="object"&&e!==null&&"_tag"in e&&e._tag==="UnexpectedError";function Mt(e){if(e==null)return"unknown";if(typeof e=="string")return e.trim()||"unknown";if(typeof e=="object"){let t=e;if(typeof t._tag=="string"){let a=t._tag.trim();if(a)return a}if(typeof t.tag=="string"){let a=t.tag.trim();if(a)return a}if(typeof t.code=="string"){let a=t.code.trim();if(a)return a}else if(typeof t.code=="number")return String(t.code);if(e instanceof Error&&e.name){let a=e.name.trim();if(a)return a}}return"unknown"}function It(e,t){if(!(!t||!e))return t[e]}function qe(e){let{intent:t,domain:a,owner:x,tags:y,stateChanges:g,emits:N,calls:C}=e;if(!t&&!a&&!x&&!y?.length&&!g?.length&&!N?.length&&!C?.length)return;let H={};return t&&(H.intent=t),a&&(H.domain=a),x&&(H.owner=x),y?.length&&(H.tags=y),g?.length&&(H.stateChanges=g),N?.length&&(H.emits=N),C?.length&&(H.calls=C),H}function de(e,t,a,x,y){let g=Mt(e),N=It(g,t),C={tag:g,origin:a};return N!==void 0&&(C.classification=N),x!==void 0&&(C.attempt=x),y!==void 0&&(C.cumulativeDurationMs=y),C}var Oe=Symbol.for("step_timeout_marker");function lt(e){return typeof e!="object"||e===null?!1:e.type==="STEP_TIMEOUT"?!0:Oe in e}function Ut(e){if(!(typeof e!="object"||e===null)){if(e.type==="STEP_TIMEOUT"){let t=e;return{timeoutMs:t.timeoutMs,stepName:t.stepName,stepKey:t.stepKey,attempt:t.attempt}}if(Oe in e)return e[Oe]}}var dt=Symbol("early-exit");function Te(e,t){return{[dt]:!0,error:e,meta:t}}function we(e){return typeof e=="object"&&e!==null&&e[dt]===!0}var ft=Symbol("mapper-exception");function _e(e){return{[ft]:!0,thrown:e}}function Wt(e){return typeof e=="object"&&e!==null&&e[ft]===!0}function $e(e,t){let{backoff:a,initialDelay:x,maxDelay:y,jitter:g}=t,N;switch(a){case"fixed":N=x;break;case"linear":N=x*e;break;case"exponential":N=x*Math.pow(2,e-1);break}if(N=Math.min(N,y),g){let C=N*.25*Math.random();N=N+C}return Math.floor(N)}function He(e){return new Promise(t=>setTimeout(t,e))}var ct=Symbol("timeout"),Ne=Symbol("timeout-option");function Nt(e){return typeof e=="object"&&e!==null&&e[Ne]===!0}async function jt(e,t,a,x){let y=new AbortController,g=t.onTimeout??"error",N=()=>typeof g=="function"?g({name:a.name,key:a.key,ms:t.ms}):t.error??{type:"STEP_TIMEOUT",stepName:a.name,stepKey:a.key,timeoutMs:t.ms,attempt:a.attempt},C;x?.aborted&&y.abort(x.reason);let H;x&&!x.aborted&&(H=()=>y.abort(x.reason),x.addEventListener("abort",H,{once:!0}));let o=new Promise((v,E)=>{C=setTimeout(()=>{if(g!=="disconnect"&&y.abort(),g==="option"){E({[Ne]:!0,ms:t.ms});return}E({[ct]:!0,error:N()})},t.ms)}),J;t.signal?J=Promise.resolve(e(y.signal)):J=Promise.resolve(e());try{return await Promise.race([J,o])}catch(v){if(typeof v=="object"&&v!==null&&v[Ne]===!0)throw{[Ne]:!0,ms:t.ms};if(typeof v=="object"&&v!==null&&v[ct]===!0){g==="disconnect"&&J.catch(()=>{});let E=v.error;if(typeof E=="object"&&E!==null&&E.type!=="STEP_TIMEOUT"){let G={timeoutMs:t.ms,stepName:a.name,stepKey:a.key,attempt:a.attempt};Oe in E?E[Oe]=G:Object.defineProperty(E,Oe,{value:G,enumerable:!1,writable:!0,configurable:!1})}throw E}throw v}finally{clearTimeout(C),H&&x&&x.removeEventListener("abort",H)}}var De={backoff:"exponential",initialDelay:100,maxDelay:3e4,jitter:!0,shouldRetry:()=>!0,onRetry:()=>{}};async function je(e,t){let{onError:a,onEvent:x,catchUnexpected:y,workflowId:g,workflowName:N,context:C,_workflowSignal:H}=t&&typeof t=="object"?t:{},o=g??crypto.randomUUID(),J=y??Ke,v=[],E=0,G=k=>k??`step_${++E}`,l=k=>{let le=k.context!==void 0||C===void 0?k:{...k,context:C},ce=N!==void 0&&le.workflowName===void 0?{...le,workflowName:N}:le;if(ce.type==="step_success"){let fe=ce.stepId;for(let Ce=v.length-1;Ce>=0;Ce--){let me=v[Ce];if(me.type==="race"&&!me.winnerId){me.winnerId=fe;break}}}x?.(ce,C)},X=Te,ne=k=>we(k),V=(k,le)=>k,Se=k=>typeof k=="function"?!1:!!(k&&typeof k=="object"&&"ok"in k||k&&typeof k=="object"&&"then"in k&&typeof k.then=="function");try{let le=function(c){let h={};for(let[r,i]of Object.entries(c))if(typeof i=="function")h[r]=i;else if(i&&typeof i=="object"&&"fn"in i)h[r]=i.fn;else throw new TypeError(`step.all: operation "${r}" must be a function or { fn, errors? } object`);return h},ce=function(c,h){let r=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let i=performance.now(),n=!1;v.push({scopeId:r,type:"parallel"});let d=()=>{if(n)return;n=!0;let T=v.findIndex(b=>b.scopeId===r);T!==-1&&v.splice(T,1),l({type:"scope_end",workflowId:o,scopeId:r,ts:Date.now(),durationMs:performance.now()-i})};l({type:"scope_start",workflowId:o,scopeId:r,scopeType:"parallel",name:c,ts:Date.now()});try{let T=await h();if(d(),!T.ok)throw a?.(T.error,c,C),X(T.error,{origin:"result",resultCause:T.cause});return T.value}catch(T){throw d(),T}})()},fe=function(c,h){let r=Object.keys(c),i=h.name??`Parallel(${r.join(", ")})`,n=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let d=performance.now(),T=!1;v.push({scopeId:n,type:"parallel"});let b=()=>{if(T)return;T=!0;let u=v.findIndex(_=>_.scopeId===n);u!==-1&&v.splice(u,1),l({type:"scope_end",workflowId:o,scopeId:n,ts:Date.now(),durationMs:performance.now()-d})};l({type:"scope_start",workflowId:o,scopeId:n,scopeType:"parallel",name:i,ts:Date.now()});try{let u=await new Promise(U=>{if(r.length===0){U([]);return}let B=!1,Z=r.length,M=new Array(r.length);for(let q=0;q<r.length;q++){let W=r[q],L=q;Promise.resolve(c[W]()).catch(O=>K({type:"PROMISE_REJECTED",cause:O},{cause:{type:"PROMISE_REJECTION",reason:O}})).then(O=>{if(!B){if(!O.ok){B=!0,U([{key:W,result:O}]);return}M[L]={key:W,result:O},Z--,Z===0&&U(M)}})}});b();let _={};for(let{key:U,result:B}of u){if(!B.ok)throw a?.(B.error,U,C),X(B.error,{origin:"result",resultCause:B.cause});_[U]=B.value}return _}catch(u){throw b(),u}})()};var ve=le,Ae=ce,ye=fe;let k=(c,h,r)=>(async()=>{if(typeof c!="string"||c.length===0)throw new Error('[awaitly] step() requires an explicit string ID as the first argument. Example: step("fetchUser", () => fetchUser(id))');let i=r??{},n=qe(i),d=c,T=i.key??c,b=i.key??c,{description:u,retry:_,timeout:U}=i,B=G(T),Z=x,M=Z?performance.now():0,W=Se(h)?()=>h:h,O={attempts:Math.max(1,_?.attempts??1),backoff:_?.backoff??De.backoff,initialDelay:_?.initialDelay??De.initialDelay,maxDelay:_?.maxDelay??De.maxDelay,jitter:_?.jitter??De.jitter,shouldRetry:_?.shouldRetry??De.shouldRetry,onRetry:_?.onRetry??De.onRetry};x&&l({type:"step_start",workflowId:o,stepId:B,stepKey:T,name:d,description:u,ts:Date.now(),...n&&{metadata:n}});let ge;for(let s=1;s<=O.attempts;s++){let m=Z?performance.now():0;try{let p;if(U?p=await jt(W,U,{name:d,key:T,attempt:s},H):p=await W(),p.ok){let $=performance.now()-M;return l({type:"step_success",workflowId:o,stepId:B,stepKey:T,name:d,description:u,ts:Date.now(),durationMs:$,...n&&{metadata:n}}),b&&l({type:"step_complete",workflowId:o,stepKey:b,name:d,description:u,ts:Date.now(),durationMs:$,result:p,...n&&{metadata:n}}),p.value}if(ge=p,s<O.attempts&&O.shouldRetry(p.error,s)){let $=$e(s,O);l({type:"step_retry",workflowId:o,stepId:B,stepKey:T,name:d,ts:Date.now(),attempt:s+1,maxAttempts:O.attempts,delayMs:$,error:p.error,...n&&{metadata:n},diagnostics:de(p.error,i.errorMeta,"result",s,performance.now()-M)}),O.onRetry(p.error,s,$),await He($);continue}O.attempts>1&&l({type:"step_retries_exhausted",workflowId:o,stepId:B,stepKey:T,name:d,ts:Date.now(),durationMs:performance.now()-M,attempts:s,lastError:p.error,...n&&{metadata:n},diagnostics:de(p.error,i.errorMeta,"result",s,performance.now()-M)});break}catch(p){let $=performance.now()-m;if(Nt(p)){let R=p.ms;l({type:"step_timeout",workflowId:o,stepId:B,stepKey:T,name:d,ts:Date.now(),timeoutMs:R,attempt:s,...n&&{metadata:n},diagnostics:de(p,i.errorMeta,"timeout",s)}),l({type:"step_success",workflowId:o,stepId:B,stepKey:T,name:d,description:u,ts:Date.now(),durationMs:performance.now()-M,...n&&{metadata:n}}),b&&l({type:"step_complete",workflowId:o,stepKey:b,name:d,description:u,ts:Date.now(),durationMs:performance.now()-M,result:Y(void 0),...n&&{metadata:n}});return}if(ne(p))throw l({type:"step_aborted",workflowId:o,stepId:B,stepKey:T,name:d,description:u,ts:Date.now(),durationMs:$,...n&&{metadata:n}}),p;if(lt(p)){let R=Ut(p),D=U?.ms??R?.timeoutMs??0;if(l({type:"step_timeout",workflowId:o,stepId:B,stepKey:T,name:d,ts:Date.now(),timeoutMs:D,attempt:s,...n&&{metadata:n},diagnostics:de(p,i.errorMeta,"timeout",s)}),s<O.attempts&&O.shouldRetry(p,s)){let I=$e(s,O);l({type:"step_retry",workflowId:o,stepId:B,stepKey:T,name:d,ts:Date.now(),attempt:s+1,maxAttempts:O.attempts,delayMs:I,error:p,...n&&{metadata:n},diagnostics:de(p,i.errorMeta,"timeout",s,performance.now()-M)}),O.onRetry(p,s,I),await He(I);continue}O.attempts>1&&l({type:"step_retries_exhausted",workflowId:o,stepId:B,stepKey:T,name:d,ts:Date.now(),durationMs:performance.now()-M,attempts:s,lastError:p,...n&&{metadata:n},diagnostics:de(p,i.errorMeta,"timeout",s,performance.now()-M)});let A=performance.now()-M;throw l({type:"step_error",workflowId:o,stepId:B,stepKey:T,name:d,description:u,ts:Date.now(),durationMs:A,error:p,...n&&{metadata:n},diagnostics:de(p,i.errorMeta,"timeout",s,A)}),b&&l({type:"step_complete",workflowId:o,stepKey:b,name:d,description:u,ts:Date.now(),durationMs:A,result:K(p,{cause:p}),meta:{origin:"throw",thrown:p},...n&&{metadata:n}}),a?.(p,d,C),X(p,{origin:"throw",thrown:p})}if(s<O.attempts&&O.shouldRetry(p,s)){let R=$e(s,O);l({type:"step_retry",workflowId:o,stepId:B,stepKey:T,name:d,ts:Date.now(),attempt:s+1,maxAttempts:O.attempts,delayMs:R,error:p,...n&&{metadata:n},diagnostics:de(p,i.errorMeta,"throw",s,performance.now()-M)}),O.onRetry(p,s,R),await He(R);continue}O.attempts>1&&!lt(p)&&l({type:"step_retries_exhausted",workflowId:o,stepId:B,stepKey:T,name:d,ts:Date.now(),durationMs:performance.now()-M,attempts:s,lastError:p,...n&&{metadata:n},diagnostics:de(p,i.errorMeta,"throw",s,performance.now()-M)});let f=performance.now()-M,S;try{S=J(p)}catch(R){throw _e(R)}throw l({type:"step_error",workflowId:o,stepId:B,stepKey:T,name:d,description:u,ts:Date.now(),durationMs:f,error:S,...n&&{metadata:n},diagnostics:de(p,i.errorMeta,"throw",s,f)}),b&&l({type:"step_complete",workflowId:o,stepKey:b,name:d,description:u,ts:Date.now(),durationMs:f,result:K(S,{cause:p}),meta:{origin:"throw",thrown:p},...n&&{metadata:n}}),a?.(S,d,C),X(S,{origin:"throw",thrown:p})}}let Ee=ge,oe=performance.now()-M,Re=V(Ee.error,{origin:"result",resultCause:Ee.cause});throw l({type:"step_error",workflowId:o,stepId:B,stepKey:T,name:d,description:u,ts:Date.now(),durationMs:oe,error:Re,...n&&{metadata:n},diagnostics:de(Ee.error,i.errorMeta,"result",O.attempts,oe)}),b&&l({type:"step_complete",workflowId:o,stepKey:b,name:d,description:u,ts:Date.now(),durationMs:oe,result:Ee,meta:{origin:"result",resultCause:Ee.cause},...n&&{metadata:n}}),a?.(Re,d,C),X(Re,{origin:"result",resultCause:Ee.cause})})();k.try=(c,h,r)=>{if(typeof c!="string"||c.length===0)throw new Error('[awaitly] step.try() requires an explicit string ID as the first argument. Example: step.try("parse", () => JSON.parse(str), { error: "PARSE_ERROR" })');let i="error"in r?()=>r.error:r.onError;if(r.retry||r.timeout)return k.retry(c,async()=>{try{return Y(await h())}catch(u){return K(i(u),{cause:u})}},{attempts:r.retry?.attempts??1,...r.retry??{},key:r.key,timeout:r.timeout});let n=r.key??c,d=c,T=c,b=x;return(async()=>{let u=b?performance.now():0;x&&l({type:"step_start",workflowId:o,stepId:T,stepKey:n,name:d,ts:Date.now()});try{let _=await h(),U=performance.now()-u;return l({type:"step_success",workflowId:o,stepId:T,stepKey:n,name:d,ts:Date.now(),durationMs:U}),n&&l({type:"step_complete",workflowId:o,stepKey:n,name:d,ts:Date.now(),durationMs:U,result:Y(_)}),_}catch(_){let U=i(_),B=performance.now()-u,Z=V(U,{origin:"throw",thrown:_});throw l({type:"step_error",workflowId:o,stepId:T,stepKey:n,name:d,ts:Date.now(),durationMs:B,error:Z}),n&&l({type:"step_complete",workflowId:o,stepKey:n,name:d,ts:Date.now(),durationMs:B,result:K(U,{cause:_}),meta:{origin:"throw",thrown:_}}),a?.(Z,d,C),X(Z,{origin:"throw",thrown:_})}})()},k.fromResult=(c,h,r)=>{if(typeof c!="string"||c.length===0)throw new Error('[awaitly] step.fromResult() requires an explicit string ID as the first argument. Example: step.fromResult("callProvider", () => callProvider(input), { onError: (e) => ({ type: "FAILED" }) })');let i=r.key??c,n=c,d=c,T="error"in r?()=>r.error:r.onError,b=x;return(async()=>{let u=b?performance.now():0;x&&l({type:"step_start",workflowId:o,stepId:d,stepKey:i,name:n,ts:Date.now()});let _=await h();if(_.ok){let U=performance.now()-u;return l({type:"step_success",workflowId:o,stepId:d,stepKey:i,name:n,ts:Date.now(),durationMs:U}),i&&l({type:"step_complete",workflowId:o,stepKey:i,name:n,ts:Date.now(),durationMs:U,result:Y(_.value)}),_.value}else{let U=T(_.error),B=performance.now()-u,Z=V(U,{origin:"result",resultCause:_.error});throw l({type:"step_error",workflowId:o,stepId:d,stepKey:i,name:n,ts:Date.now(),durationMs:B,error:Z}),i&&l({type:"step_complete",workflowId:o,stepKey:i,name:n,ts:Date.now(),durationMs:B,result:K(U,{cause:_.error}),meta:{origin:"result",resultCause:_.error}}),a?.(Z,n,C),X(Z,{origin:"result",resultCause:_.error})}})()},k.fromNullable=(c,h,r,i)=>{if(typeof c!="string"||c.length===0)throw new Error('[awaitly] step.fromNullable() requires an explicit string ID as the first argument. Example: step.fromNullable("getUser", () => db.find(id), () => ({ type: "NOT_FOUND" }))');return k(c,async()=>{let n=await h();return n!=null?Y(n):K(r())},i)},k.retry=(c,h,r)=>{if(typeof c!="string"||c.length===0)throw new Error('[awaitly] step.retry() requires an explicit string ID as the first argument. Example: step.retry("fetchData", () => fetchData(), { attempts: 3 })');return k(c,h,{key:r.key??c,retry:{attempts:r.attempts,backoff:r.backoff,initialDelay:r.initialDelay,maxDelay:r.maxDelay,jitter:r.jitter,shouldRetry:r.shouldRetry,onRetry:r.onRetry},timeout:r.timeout})},k.withTimeout=(c,h,r)=>{if(typeof c!="string"||c.length===0)throw new Error('[awaitly] step.withTimeout() requires an explicit string ID as the first argument. Example: step.withTimeout("slowOp", () => slowOp(), { ms: 5000 })');return k(c,h,{key:r.key??c,timeout:r})},k.sleep=(c,h,r)=>{if(typeof c!="string"||c.length===0)throw new Error('[awaitly] step.sleep() requires an explicit string ID as the first argument. Example: step.sleep("delay", "5s")');let i=typeof h=="string"?Pt(h):h;if(!i)throw new Error(`step.sleep: invalid duration '${h}'`);let n=i.millis,d=r?.signal;return k(c,async()=>{if(H?.aborted||d?.aborted){let T=new Error("Sleep aborted");throw T.name="AbortError",T}return new Promise((T,b)=>{let u={timeoutId:void 0},_=()=>{u.timeoutId&&clearTimeout(u.timeoutId);let U=new Error("Sleep aborted");U.name="AbortError",b(U)};H?.addEventListener("abort",_,{once:!0}),d?.addEventListener("abort",_,{once:!0}),u.timeoutId=setTimeout(()=>{H?.removeEventListener("abort",_),d?.removeEventListener("abort",_),T(Y(void 0))},n)})},{key:r?.key??c,description:r?.description})},k.all=((...c)=>{if(typeof c[0]!="string")throw new TypeError("step.all(name, ...): first argument must be a string (step name). Example: step.all('Fetch data', { user: () => fetchUser(), posts: () => fetchPosts() })");let h=c[0],r=c[1];if(typeof r=="function")return ce(h,r);if(r&&typeof r=="object"&&!Array.isArray(r)){let n=le(r);return fe(n,{name:h})}throw new TypeError("step.all(name, ...): second argument must be a function (array form) or an object of operations (object form).")}),k.race=(c,h)=>{let r=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let i=performance.now(),n=!1,d={scopeId:r,type:"race",winnerId:void 0};v.push(d);let T=()=>{if(n)return;n=!0;let b=v.findIndex(u=>u.scopeId===r);b!==-1&&v.splice(b,1),l({type:"scope_end",workflowId:o,scopeId:r,ts:Date.now(),durationMs:performance.now()-i,winnerId:d.winnerId})};l({type:"scope_start",workflowId:o,scopeId:r,scopeType:"race",name:c,ts:Date.now()});try{let b=await h();if(T(),!b.ok)throw a?.(b.error,c,C),X(b.error,{origin:"result",resultCause:b.cause});return b.value}catch(b){throw T(),b}})()},k.if=(c,h,r)=>r(),k.label=k.if,k.branch=async(c,h)=>{let{condition:r,then:i,else:n}=h;if(r())return await i();if(n)return await n()},k.arm=(c,h)=>({fn:c,errors:h}),k.forEach=async(c,h,r)=>{let i=[],n=r.maxIterations,d=0,T="run"in r,b=Symbol.asyncIterator in h?h:(async function*(){yield*h})();for await(let u of b){if(n!==void 0&&d>=n)break;let _;T?_=await r.run(u,d):_=await r.item.handler(u,d,k),i.push(_),d++}return i},k.item=c=>({__forEachItemHandler:!0,handler:c}),k.dep=(c,h)=>h,k.workflow=(c,h,r)=>k(c,h,r),k.map=async(c,h,r,i)=>{let n=i?.concurrency??h.length;return k(c,()=>n>=h.length?pt(h.map((d,T)=>r(d,T))):(async()=>{let d=[];for(let T=0;T<h.length;T+=n){let b=h.slice(T,T+n),u=await pt(b.map((_,U)=>r(_,T+U)));if(!u.ok)return u;d.push(...u.value)}return Y(d)})(),{key:i?.key})},k.withFallback=(c,h,r)=>{if(typeof c!="string"||c.length===0)throw new Error('[awaitly] step.withFallback() requires an explicit string ID as the first argument. Example: step.withFallback("getUser", () => fetchUser(id), { fallback: () => fetchFromCache(id) })');let i=r.key??c,n=c,d=G(i),T=x;return(async()=>{let b=T?performance.now():0;x&&l({type:"step_start",workflowId:o,stepId:d,stepKey:i,name:n,ts:Date.now()});let u;try{u=await h()}catch(M){if(ne(M))throw l({type:"step_aborted",workflowId:o,stepId:d,stepKey:i,name:n,ts:Date.now(),durationMs:performance.now()-b}),M;let q;try{q=J(M)}catch(L){throw _e(L)}if(r.on!==void 0&&r.on!==q){let L=performance.now()-b;throw l({type:"step_error",workflowId:o,stepId:d,stepKey:i,name:n,ts:Date.now(),durationMs:L,error:q}),i&&l({type:"step_complete",workflowId:o,stepKey:i,name:n,ts:Date.now(),durationMs:L,result:K(q,{cause:M}),meta:{origin:"throw",thrown:M}}),a?.(q,n,C),X(q,{origin:"throw",thrown:M})}let W;try{W=await r.fallback()}catch(L){if(ne(L))throw l({type:"step_aborted",workflowId:o,stepId:d,stepKey:i,name:n,ts:Date.now(),durationMs:performance.now()-b}),L;let O;try{O=J(L)}catch(Ee){throw _e(Ee)}let ge=performance.now()-b;throw l({type:"step_error",workflowId:o,stepId:d,stepKey:i,name:n,ts:Date.now(),durationMs:ge,error:O}),i&&l({type:"step_complete",workflowId:o,stepKey:i,name:n,ts:Date.now(),durationMs:ge,result:K(O,{cause:L}),meta:{origin:"throw",thrown:L}}),a?.(O,n,C),X(O,{origin:"throw",thrown:L})}if(W.ok){let L=performance.now()-b;return l({type:"step_success",workflowId:o,stepId:d,stepKey:i,name:n,ts:Date.now(),durationMs:L}),i&&l({type:"step_complete",workflowId:o,stepKey:i,name:n,ts:Date.now(),durationMs:L,result:W,meta:{origin:"fallback",fallbackUsed:!0,fallbackReason:String(q)}}),W.value}else{let L=performance.now()-b,O=V(W.error,{origin:"result",resultCause:W.cause});throw l({type:"step_error",workflowId:o,stepId:d,stepKey:i,name:n,ts:Date.now(),durationMs:L,error:O}),i&&l({type:"step_complete",workflowId:o,stepKey:i,name:n,ts:Date.now(),durationMs:L,result:W,meta:{origin:"result",resultCause:W.cause}}),a?.(O,n,C),X(O,{origin:"result",resultCause:W.cause})}}if(u.ok){let M=performance.now()-b;return l({type:"step_success",workflowId:o,stepId:d,stepKey:i,name:n,ts:Date.now(),durationMs:M}),i&&l({type:"step_complete",workflowId:o,stepKey:i,name:n,ts:Date.now(),durationMs:M,result:u}),u.value}let _=u.error;if(r.on!==void 0&&r.on!==_){let M=performance.now()-b,q=V(_,{origin:"result",resultCause:u.cause});throw l({type:"step_error",workflowId:o,stepId:d,stepKey:i,name:n,ts:Date.now(),durationMs:M,error:q}),i&&l({type:"step_complete",workflowId:o,stepKey:i,name:n,ts:Date.now(),durationMs:M,result:u,meta:{origin:"result",resultCause:u.cause}}),a?.(q,n,C),X(q,{origin:"result",resultCause:u.cause})}let U;try{U=await r.fallback()}catch(M){if(ne(M))throw l({type:"step_aborted",workflowId:o,stepId:d,stepKey:i,name:n,ts:Date.now(),durationMs:performance.now()-b}),M;let q;try{q=J(M)}catch(L){throw _e(L)}let W=performance.now()-b;throw l({type:"step_error",workflowId:o,stepId:d,stepKey:i,name:n,ts:Date.now(),durationMs:W,error:q}),i&&l({type:"step_complete",workflowId:o,stepKey:i,name:n,ts:Date.now(),durationMs:W,result:K(q,{cause:M}),meta:{origin:"throw",thrown:M}}),a?.(q,n,C),X(q,{origin:"throw",thrown:M})}if(U.ok){let M=performance.now()-b;return l({type:"step_success",workflowId:o,stepId:d,stepKey:i,name:n,ts:Date.now(),durationMs:M}),i&&l({type:"step_complete",workflowId:o,stepKey:i,name:n,ts:Date.now(),durationMs:M,result:U,meta:{origin:"fallback",fallbackUsed:!0,fallbackReason:String(_)}}),U.value}let B=performance.now()-b,Z=V(U.error,{origin:"result",resultCause:U.cause});throw l({type:"step_error",workflowId:o,stepId:d,stepKey:i,name:n,ts:Date.now(),durationMs:B,error:Z}),i&&l({type:"step_complete",workflowId:o,stepKey:i,name:n,ts:Date.now(),durationMs:B,result:U,meta:{origin:"result",resultCause:U.cause}}),a?.(Z,n,C),X(Z,{origin:"result",resultCause:U.cause})})()},k.withResource=(c,h)=>{if(typeof c!="string"||c.length===0)throw new Error('[awaitly] step.withResource() requires an explicit string ID as the first argument. Example: step.withResource("useDb", { acquire: () => connect(), use: (db) => query(db), release: (db) => db.close() })');let r=c,i=c,n=G(r),d=x;return(async()=>{let T=d?performance.now():0;x&&l({type:"step_start",workflowId:o,stepId:n,stepKey:r,name:i,ts:Date.now()});let b;try{b=await h.acquire()}catch(W){if(ne(W))throw l({type:"step_aborted",workflowId:o,stepId:n,stepKey:r,name:i,ts:Date.now(),durationMs:performance.now()-T}),W;let L;try{L=J(W)}catch(ge){throw _e(ge)}let O=performance.now()-T;throw l({type:"step_error",workflowId:o,stepId:n,stepKey:r,name:i,ts:Date.now(),durationMs:O,error:L}),r&&l({type:"step_complete",workflowId:o,stepKey:r,name:i,ts:Date.now(),durationMs:O,result:K(L,{cause:W}),meta:{origin:"throw",thrown:W}}),a?.(L,i,C),X(L,{origin:"throw",thrown:W})}if(!b.ok){let W=performance.now()-T,L=V(b.error,{origin:"result",resultCause:b.cause});throw l({type:"step_error",workflowId:o,stepId:n,stepKey:r,name:i,ts:Date.now(),durationMs:W,error:L}),r&&l({type:"step_complete",workflowId:o,stepKey:r,name:i,ts:Date.now(),durationMs:W,result:b,meta:{origin:"result",resultCause:b.cause}}),a?.(L,i,C),X(L,{origin:"result",resultCause:b.cause})}let u=b.value,_,U,B=!1;try{_=await h.use(u)}catch(W){if(ne(W)){try{await h.release(u)}catch(L){console.warn(`[awaitly] step.withResource("${c}"): release threw after earlyExit:`,L)}throw W}U=W,B=!0}try{await h.release(u)}catch(W){console.warn(`[awaitly] step.withResource("${c}"): release threw:`,W)}if(B){let W;try{W=J(U)}catch(O){throw _e(O)}let L=performance.now()-T;throw l({type:"step_error",workflowId:o,stepId:n,stepKey:r,name:i,ts:Date.now(),durationMs:L,error:W}),r&&l({type:"step_complete",workflowId:o,stepKey:r,name:i,ts:Date.now(),durationMs:L,result:K(W,{cause:U}),meta:{origin:"throw",thrown:U}}),a?.(W,i,C),X(W,{origin:"throw",thrown:U})}let Z=_;if(Z.ok){let W=performance.now()-T;return l({type:"step_success",workflowId:o,stepId:n,stepKey:r,name:i,ts:Date.now(),durationMs:W}),r&&l({type:"step_complete",workflowId:o,stepKey:r,name:i,ts:Date.now(),durationMs:W,result:Z}),Z.value}let M=performance.now()-T,q=V(Z.error,{origin:"result",resultCause:Z.cause});throw l({type:"step_error",workflowId:o,stepId:n,stepKey:r,name:i,ts:Date.now(),durationMs:M,error:q}),r&&l({type:"step_complete",workflowId:o,stepKey:r,name:i,ts:Date.now(),durationMs:M,result:Z,meta:{origin:"result",resultCause:Z.cause}}),a?.(q,i,C),X(q,{origin:"result",resultCause:Z.cause})})()};let me=await e({step:k});if(process.env.NODE_ENV!=="production"&&me!==null&&typeof me=="object"&&"ok"in me&&typeof me.ok=="boolean"){let c=me;(c.ok===!0&&"value"in c||c.ok===!1&&"error"in c)&&console.warn(`awaitly: Workflow executor returned a Result-like object. Return raw values, not ok() or err().
2
-
3
- Incorrect: return ok({ data });
4
- Correct: return { data };
5
-
6
- See: https://jagreehal.github.io/awaitly/guides/troubleshooting/#returning-ok-from-workflow-executor-double-wrapping`)}return Y(me)}catch(k){if(Wt(k))throw k.thrown;if(ne(k)){let ce=k.meta.origin==="throw"?k.meta.thrown:k.meta.origin==="result"?k.meta.resultCause:void 0;return K(k.error,{cause:ce})}let le=J(k);return a?.(le,"unexpected",C),K(le,{cause:k})}}je.strict=(e,t)=>je(e,t);async function pt(e){return e.length===0?Y([]):new Promise(t=>{let a=!1,x=e.length,y=new Array(e.length);for(let g=0;g<e.length;g++){let N=g;Promise.resolve(e[N]).catch(C=>K({type:"PROMISE_REJECTED",cause:C},{cause:{type:"PROMISE_REJECTION",reason:C}})).then(C=>{if(!a){if(!C.ok){a=!0,t(C);return}y[N]=C.value,x--,x===0&&t(Y(y))}})}})}var Kt="STREAM_WRITE_ERROR",Ft="STREAM_READ_ERROR",Vt="STREAM_CLOSE_ERROR";var Lt="STREAM_ENDED";function Fe(e,t,a){return{type:Kt,reason:e,message:t,...a!==void 0?{cause:a}:{}}}function Je(e,t,a){return{type:Ft,reason:e,message:t,...a!==void 0?{cause:a}:{}}}function ze(e,t,a){return{type:Vt,reason:e,message:t,...a!==void 0?{cause:a}:{}}}function Ve(e){return{type:Lt,finalPosition:e}}function Et(e={}){let t=e.highWaterMark??16,a=e.lowWaterMark??Math.floor(t/2),x=e.onStateChange,y="flowing",g=0,N=[];function C(o){if(y!==o&&(y=o,x?.(o),o==="flowing"&&N.length>0)){let J=N;N=[];for(let v of J)v()}}function H(){y==="flowing"&&g>=t?C("paused"):y==="paused"&&g<=a&&C("flowing")}return{get state(){return y},get bufferedCount(){return g},get highWaterMark(){return t},get lowWaterMark(){return a},increment(){g++,H()},decrement(){g>0&&(g--,H())},setCount(o){g=Math.max(0,o),H()},waitForDrain(){return y==="flowing"?Promise.resolve():new Promise(o=>{N.push(o)})},reset(){g=0,N=[],C("flowing")}}}function Bt(e){return{_tag:"Duration",millis:e}}function $t(e){return{_tag:"Duration",millis:e*1e3}}function Ht(e){return{_tag:"Duration",millis:e*60*1e3}}function qt(e){return{_tag:"Duration",millis:e*60*60*1e3}}function Jt(e){return{_tag:"Duration",millis:e*24*60*60*1e3}}function wt(e){return e.millis}function yt(e){let t=e.trim().match(/^(\d+(?:\.\d+)?)\s*(ms|s|m|h|d)$/i);if(!t)return;let a=parseFloat(t[1]);switch(t[2].toLowerCase()){case"ms":return Bt(a);case"s":return $t(a);case"m":return Ht(a);case"h":return qt(a);case"d":return Jt(a);default:return}}function gt(e){return e.type==="step_complete"}function Ye(e){return typeof e=="object"&&e!==null&&e.type==="WORKFLOW_CANCELLED"}function kt(){let e=new Map;return{handleEvent:t=>{gt(t)&&e.set(t.stepKey,{result:t.result,meta:t.meta})},getResumeState:()=>({steps:new Map(e)}),clear:()=>e.clear()}}function zt(e){return typeof e=="object"&&e!==null&&e.__cachedMeta===!0}function he(e,t,a){return K(e,{cause:{__cachedMeta:!0,originalCause:a,meta:t}})}function We(e){return zt(e)?e.meta:{origin:"result",resultCause:e}}async function Tt(e,t){let a=e["~standard"].validate(t),x=a instanceof Promise?await a:a;return x.issues?K({type:"INPUT_VALIDATION_ERROR",issues:x.issues.map(y=>({message:y.message,path:y.path?.map(g=>typeof g=="object"?g.key:g)})),message:`Input validation failed: ${x.issues.map(y=>y.message).join(", ")}`}):Y(x.value)}function Ge(e,t){let a=x=>((...y)=>{let g=y.at(-1),N=y.length>0&&typeof g=="object"&&g!==null&&!Array.isArray(g)&&typeof g!="function",C=N?g:void 0,H=N?y.slice(0,-1):y,o={...t,...C?.deps??{}},J=C?{...C,deps:o}:{deps:o};return e[x](...H,J)});return{run:a("run"),runWithState:a("runWithState"),withDeps(x){return Ge(e,{...t,...x})}}}var Le=class extends Error{constructor(a,x,y){super(a);this.stepId=x;this.originalError=y;this.name="SnapshotDecodeError"}};function Xe(e){if(e.type==="error"){let t=new Error(e.message);return t.name=e.name,e.stack&&(t.stack=e.stack),e.cause&&(t.cause=Xe(e.cause)),t}return e.value!==void 0?e.value:e.stringRepresentation}function Rt(e,t,a){if(typeof e!="string"||e.length===0)throw new TypeError("createWorkflow(workflowName, deps, options?): first argument must be a non-empty string. Example: createWorkflow('checkout', { chargeCard, sendEmail })");let x=t??{},y=a;async function g(o,J,v){let E=o??crypto.randomUUID(),G=v?.deps?{...x,...v.deps}:x,l=[],X=v?.createContext??y?.createContext,ne=X?await X():void 0,V=v?.signal??y?.signal,Se=v?.onEvent??y?.onEvent,ve=v?.onError??y?.onError,Ae=v?.shouldRun??y?.shouldRun,ye=v?.onBeforeStart??y?.onBeforeStart,k=v?.onAfterStep??y?.onAfterStep,le=v?.resumeState??y?.resumeState,ce=y?.catchUnexpected??Ke,fe={},Ce=(v?.devWarnings??y?.devWarnings)===!0&&process.env.NODE_ENV!=="production",me=new Set,c=new Set,h={workflowId:E,onEvent:Se,context:ne!==void 0?ne:void 0,signal:V,input:{},ref:s=>fe[s],set:(s,m)=>{Ce&&!me.has(s)&&(me.add(s),console.warn(`awaitly: ctx.set('${s}', ...) is deprecated for static analysis. Use step('id', fn, { out: '${s}' }) instead.`)),fe[s]=m},get:s=>(Ce&&!c.has(s)&&(c.add(s),console.warn(`awaitly: ctx.get('${s}') is deprecated for static analysis. Use ctx.ref('${s}') instead for tracked dependencies.`)),fe[s])},r=s=>{let m=s.context!==void 0||ne===void 0?s:{...s,context:ne},p=m.workflowName===void 0?{...m,workflowName:e}:m;Se?.(p,ne)},i=(s,m)=>{let p={type:"WORKFLOW_CANCELLED",reason:s,lastStepKey:m};return K(ce(p),{cause:p})};if(V?.aborted){let s=typeof V.reason=="string"?V.reason:V.reason instanceof Error?V.reason.message:void 0;return r({type:"workflow_cancelled",workflowId:E,ts:Date.now(),durationMs:0,reason:s}),i(s)}if(Ae){let s=performance.now();try{let m=await Ae(E,ne),p=performance.now()-s;if(r({type:"hook_should_run",workflowId:E,ts:Date.now(),durationMs:p,result:m,skipped:!m}),!m){let $=new Error("Workflow skipped by shouldRun hook");return K(ce($),{cause:$})}}catch(m){let p=performance.now()-s;return r({type:"hook_should_run_error",workflowId:E,ts:Date.now(),durationMs:p,error:m}),K(ce(m),{cause:m})}}if(ye){let s=performance.now();try{let m=await ye(E,ne),p=performance.now()-s;if(r({type:"hook_before_start",workflowId:E,ts:Date.now(),durationMs:p,result:m,skipped:!m}),!m){let $=new Error("Workflow skipped by onBeforeStart hook");return K(ce($),{cause:$})}}catch(m){let p=performance.now()-s;return r({type:"hook_before_start_error",workflowId:E,ts:Date.now(),durationMs:p,error:m}),K(ce(m),{cause:m})}}let n=y?.inputSchema,d=y?.input;if(n){let s=await Tt(n,d);if(!s.ok)return K(s.error);h.input=s.value}else d!==void 0&&(h.input=d);let T=Date.now(),b=performance.now();r({type:"workflow_start",workflowId:E,ts:T});let u=v?.cache??y?.cache,_=v?.streamStore??y?.streamStore;if(le&&!u&&(u=new Map),le&&u){let s=typeof le=="function"?await le():le;s.steps instanceof Map||(console.warn(`awaitly: resumeState.steps is not a Map (got ${typeof s.steps}). This usually happens when state is serialized with JSON.stringify() directly.
7
- Use stringifyState() and parseState() from 'awaitly/persistence' instead:
8
- import { stringifyState, parseState } from 'awaitly/persistence';
9
- const json = stringifyState(state); // Save this
10
- const restored = parseState(json); // Load this`),typeof s.steps=="object"&&s.steps!==null&&(s.steps=new Map(Object.entries(s.steps))));for(let[m,p]of s.steps){let{result:$,meta:f}=p;if($.ok)u.set(m,$);else{let S=f??{origin:"result",resultCause:$.cause};u.set(m,he($.error,S,$.cause))}}}let U=v?.snapshot??y?.snapshot,B=y?.serialization;if(U&&!le){u||(u=new Map);let s=U,m=B?.decode;for(let[p,$]of Object.entries(s.steps))if(Object.prototype.hasOwnProperty.call(s.steps,p))try{if($.ok){let f=m?m($.value):$.value;u.set(p,Y(f))}else{let f=m?m($.error):$.error,S=Xe($.cause),R=$.meta?.origin==="throw"?{origin:"throw",thrown:S}:{origin:"result",resultCause:S};u.set(p,he(f,R,S))}}catch(f){throw new Le(`Failed to decode step "${p}": ${f instanceof Error?f.message:String(f)}`,p,f instanceof Error?f:void 0)}}let Z=!1,M,q,W=()=>{Z=!0,M=typeof V?.reason=="string"?V.reason:V?.reason instanceof Error?V.reason.message:void 0};V&&!V.aborted&&V.addEventListener("abort",W,{once:!0});let L=()=>{if(Z||V?.aborted)throw{type:"WORKFLOW_CANCELLED",reason:M??(typeof V?.reason=="string"?V.reason:V?.reason instanceof Error?V.reason.message:void 0),lastStepKey:q}},O=async(s,m,p)=>{if(!k)return;let $=performance.now();try{await k(s,m,E,ne);let f=performance.now()-$;r({type:"hook_after_step",workflowId:E,stepKey:s,ts:Date.now(),durationMs:f})}catch(f){let S=performance.now()-$;throw r({type:"hook_after_step_error",workflowId:E,stepKey:s,ts:Date.now(),durationMs:S,error:f}),f}},ge=s=>{let m=async(f,S,R)=>{if(typeof f!="string")throw new Error('[awaitly] step() requires a string ID as the first argument. Example: step("fetchUser", () => fetchUser(id))');let D=f,A=R??{},I=D,w=Object.prototype.hasOwnProperty.call(A,"key")?A.key:D,{ttl:j,out:ee}=A;L();let Q=qe(A);if(w&&u&&u.has(w)){r({type:"step_cache_hit",workflowId:E,stepKey:w,name:I,ts:Date.now(),...Q&&{metadata:Q}});let P=u.get(w);if(P.ok)return q=w,ee&&(fe[ee]=P.value),P.value;let F=We(P.cause);throw Te(P.error,F)}w&&u&&r({type:"step_cache_miss",workflowId:E,stepKey:w,name:I,ts:Date.now(),...Q&&{metadata:Q}});try{let P=await s(D,S,A);return ee&&(fe[ee]=P),A.compensate&&l.push({stepName:I,value:P,compensate:A.compensate}),w&&(q=w,u&&u.set(w,Y(P),j?{ttl:j}:void 0),await O(w,Y(P))),P}catch(P){if(w&&we(P)){let F=P,se=F.meta.origin==="result"?F.meta.resultCause:F.meta.origin==="throw"?F.meta.thrown:void 0,z=he(F.error,F.meta,se);u&&u.set(w,z,j?{ttl:j}:void 0),await O(w,z,F.meta)}throw P}};m.try=async(f,S,R)=>{let{ttl:D}=R,A=R.key??f,I=f;if(u&&u.has(A)){r({type:"step_cache_hit",workflowId:E,stepKey:A,name:I,ts:Date.now()});let w=u.get(A);if(w.ok)return w.value;let j=We(w.cause);throw Te(w.error,j)}u&&r({type:"step_cache_miss",workflowId:E,stepKey:A,name:I,ts:Date.now()});try{let w=await s.try(f,S,{...R,key:A});return R.compensate&&l.push({stepName:I,value:w,compensate:R.compensate}),u&&u.set(A,Y(w),D?{ttl:D}:void 0),await O(A,Y(w)),w}catch(w){if(we(w)){let j=w,ee=j.meta.origin==="result"?j.meta.resultCause:j.meta.origin==="throw"?j.meta.thrown:void 0,Q=he(j.error,j.meta,ee);u&&u.set(A,Q,D?{ttl:D}:void 0),await O(A,Q,j.meta)}throw w}},m.fromResult=async(f,S,R)=>{let{ttl:D}=R,A=R.key??f,I=f;if(u&&u.has(A)){r({type:"step_cache_hit",workflowId:E,stepKey:A,name:I,ts:Date.now()});let w=u.get(A);if(w.ok)return w.value;let j=We(w.cause);throw Te(w.error,j)}u&&r({type:"step_cache_miss",workflowId:E,stepKey:A,name:I,ts:Date.now()});try{let w=await s.fromResult(f,S,{...R,key:A});return u&&u.set(A,Y(w),D?{ttl:D}:void 0),await O(A,Y(w)),w}catch(w){if(we(w)){let j=w,ee=j.meta.origin==="result"?j.meta.resultCause:j.meta.origin==="throw"?j.meta.thrown:void 0,Q=he(j.error,j.meta,ee);u&&u.set(A,Q,D?{ttl:D}:void 0),await O(A,Q,j.meta)}throw w}},m.race=s.race,m.withFallback=async(f,S,R)=>{let D=R.key??f,A=f;if(u&&u.has(D)){r({type:"step_cache_hit",workflowId:E,stepKey:D,name:A,ts:Date.now()});let I=u.get(D);if(I.ok)return I.value;let w=We(I.cause);throw Te(I.error,w)}u&&r({type:"step_cache_miss",workflowId:E,stepKey:D,name:A,ts:Date.now()});try{let I=await s.withFallback(f,S,R);return u&&u.set(D,Y(I)),await O(D,Y(I)),I}catch(I){if(we(I)){let w=I,j=w.meta.origin==="result"?w.meta.resultCause:w.meta.origin==="throw"?w.meta.thrown:void 0,ee=he(w.error,w.meta,j);u&&u.set(D,ee),await O(D,ee,w.meta)}throw I}},m.withResource=async(f,S)=>{let R=f;try{let D=await s.withResource(f,S);return await O(R,Y(D)),D}catch(D){if(we(D)){let A=D,I=A.meta.origin==="result"?A.meta.resultCause:A.meta.origin==="throw"?A.meta.thrown:void 0,w=he(A.error,A.meta,I);await O(R,w,A.meta)}throw D}},m.retry=(f,S,R)=>{let D={key:R.key,retry:{attempts:R.attempts,backoff:R.backoff,initialDelay:R.initialDelay,maxDelay:R.maxDelay,jitter:R.jitter,shouldRetry:R.shouldRetry,onRetry:R.onRetry},timeout:R.timeout,ttl:R.ttl};return m(f,S,D)},m.withTimeout=(f,S,R)=>{let D={key:R.key,timeout:R,ttl:R.ttl};return m(f,S,D)},m.sleep=(f,S,R)=>{if(typeof f!="string"||f.length===0)throw new Error('[awaitly] step.sleep() requires an explicit string ID as the first argument. Example: step.sleep("delay", "5s")');let D=typeof S=="string"?yt(S):S;if(!D)throw new Error(`step.sleep: invalid duration '${S}'`);let A=wt(D),I=R?.signal;return m(f,async()=>{if(V?.aborted||I?.aborted){let j=new Error("Sleep aborted");throw j.name="AbortError",j}return new Promise((j,ee)=>{let Q={timeoutId:void 0},P=()=>{Q.timeoutId&&clearTimeout(Q.timeoutId);let F=new Error("Sleep aborted");F.name="AbortError",ee(F)};V?.addEventListener("abort",P,{once:!0}),I?.addEventListener("abort",P,{once:!0}),Q.timeoutId=setTimeout(()=>{V?.removeEventListener("abort",P),I?.removeEventListener("abort",P),j(Y(void 0))},A)})},{key:R?.key,ttl:R?.ttl,description:R?.description})};let p=new Map,$=new Map;return m.getWritable=f=>{let S=f?.namespace??"default",R=f?.highWaterMark??16;if(!_)throw new Error("streamStore is required to use getWritable(). Pass a streamStore to createWorkflow options.");let D=`${E}:${S}`,A=p.get(D);if(A&&!A.closed&&!A.aborted)return A.writer;let I=Et({highWaterMark:R,onStateChange:F=>{r({type:"stream_backpressure",workflowId:E,namespace:S,bufferedCount:I.bufferedCount,state:F,ts:Date.now()})}}),w=0,j=!0,ee=!1,Q=!1;r({type:"stream_created",workflowId:E,namespace:S,ts:Date.now()});let P={async write(F){if(Q)return K(Fe("closed","Stream is closed"));if(ee)return K(Fe("aborted","Stream was aborted"));I.state==="paused"&&await I.waitForDrain();let se={value:F,position:w,ts:Date.now()},z=await _.append(E,S,se);return z.ok?(r({type:"stream_write",workflowId:E,namespace:S,position:w,ts:Date.now()}),w++,I.increment(),Y(void 0)):(r({type:"stream_error",workflowId:E,namespace:S,error:z.error,position:w,ts:Date.now()}),K(Fe("store_error",z.error.message,z.error)))},async close(){if(Q)return K(ze("already_closed","Stream is already closed"));let F=await _.closeStream(E,S);return F.ok?(Q=!0,j=!1,r({type:"stream_close",workflowId:E,namespace:S,finalPosition:w,ts:Date.now()}),p.delete(D),Y(void 0)):K(ze("store_error",F.error.message,F.error))},abort(F){ee=!0,j=!1,Q=!0,r({type:"stream_error",workflowId:E,namespace:S,error:F,position:w,ts:Date.now()}),p.delete(D)},get writable(){return j},get position(){return w},get namespace(){return S}};return p.set(D,{writer:P,backpressure:I,aborted:ee,closed:Q}),P},m.getReadable=f=>{let S=f?.namespace??"default",R=f?.startIndex??0,D=f?.pollInterval??10,A=f?.pollTimeout??3e4;if(!_)throw new Error("streamStore is required to use getReadable(). Pass a streamStore to createWorkflow options.");let I=`${E}:${S}:${R}`,w=$.get(I);if(w&&!w.closed)return w.reader;let j=()=>{let ke=`${E}:${S}`,re=p.get(ke);re&&re.backpressure.decrement()},ee=R,Q=!0,P=!1,F=[],se=0,z={async read(){if(P)return K(Je("closed","Reader is closed"));if(se<F.length){let ue=F[se++];return ee=ue.position+1,j(),r({type:"stream_read",workflowId:E,namespace:S,position:ue.position,ts:Date.now()}),Y(ue.value)}let ke=`${E}:${S}`,re=Date.now(),ie=p.has(ke),te=await _.getMetadata(E,S),ae=te.ok&&te.value!==void 0;for(;Date.now()-re<A;){let ue=await _.read(E,S,ee,100);if(!ue.ok)return K(Je("store_error",ue.error.message,ue.error));let Pe=ue.value;if(Pe.length>0){F=Pe,se=1;let Ie=Pe[0];return ee=Ie.position+1,j(),r({type:"stream_read",workflowId:E,namespace:S,position:Ie.position,ts:Date.now()}),Y(Ie.value)}let Me=p.has(ke),xe=await _.getMetadata(E,S),Ze=xe.ok&&xe.value!==void 0;if(Me&&(ie=!0),Ze&&(ae=!0),xe.ok&&xe.value?.closed)return Q=!1,K(Ve(ee));if(ie&&!Me&&!Ze)return Q=!1,K(Ve(ee));ae&&!Me&&xe.ok&&xe.value?.closed,await new Promise(Ie=>setTimeout(Ie,D))}return Q=!1,K(Ve(ee))},close(){P=!0,Q=!1,F=[],$.delete(I)},get readable(){return Q},get position(){return ee},get namespace(){return S}};return $.set(I,{reader:z,position:ee,closed:P}),z},m.streamForEach=async(f,S,R)=>{let D=R?.checkpointInterval??1,A=R?.concurrency??1,I=[],w=0,j=-1,ee=P=>typeof P=="object"&&P!==null&&"read"in P&&typeof P.read=="function",Q=async(P,F,se,z)=>{let re=D>0&&F%D===0?`stream-foreach:${z}:pos-${se}`:void 0,ie=re??`stream-item-${se}`,te=await m(ie,()=>S(P,F),{key:re});return{index:F,position:se,result:te}};if(ee(f))if(A<=1){let P=f.position,F=await f.read();for(;F.ok;){let se=F.value,{result:z}=await Q(se,w,P,f.namespace);I.push(z),j=P,w++,P=f.position,F=await f.read()}}else{let P=new Map,F=0,se=0,z=new Array(A).fill(null),ke=async()=>{for(let ue=0;ue<z.length;ue++)if(z[ue]===null)return ue;let te=z.filter(ue=>ue!==null),ae=await Promise.race(te);return P.set(ae.index,{position:ae.position,result:ae.result}),z[ae.slotIndex]=null,ae.slotIndex},re=f.position,ie=await f.read();for(;ie.ok;){let te=await ke(),ae=F,ue=re,Pe=ie.value,Me=te;z[te]=Q(Pe,ae,ue,f.namespace).then(xe=>({slotIndex:Me,...xe})),se++,F++,re=f.position,ie=await f.read()}for(let te=0;te<z.length;te++)if(z[te]!==null){let ae=await z[te];P.set(ae.index,{position:ae.position,result:ae.result})}for(let te=0;te<se;te++){let ae=P.get(te);ae&&(I.push(ae.result),j=ae.position,w++)}}else if(A<=1){let P=0;for await(let F of f){let{result:se}=await Q(F,P,P,"async-iterable");I.push(se),j=P,w++,P++}}else{let P=new Map,F=0,se=0,z=new Array(A).fill(null),ke=async()=>{for(let te=0;te<z.length;te++)if(z[te]===null)return te;let re=z.filter(te=>te!==null),ie=await Promise.race(re);return P.set(ie.index,ie.result),z[ie.slotIndex]=null,ie.slotIndex};for await(let re of f){let ie=await ke(),te=F,ae=ie;z[ie]=Q(re,te,te,"async-iterable").then(ue=>({slotIndex:ae,...ue})),se++,F++}for(let re=0;re<z.length;re++)if(z[re]!==null){let ie=await z[re];P.set(ie.index,ie.result)}for(let re=0;re<se;re++)P.has(re)&&(I.push(P.get(re)),j=re,w++)}return{results:I,processedCount:w,lastPosition:j}},m.if=s.if,m.label=s.label,m.branch=s.branch,m.arm=s.arm,m.forEach=s.forEach,m.item=s.item,m.dep=s.dep,m.workflow=(f,S,R)=>m(f,S,R),m.all=(f,S,R)=>{let D=R!==void 0&&Object.prototype.hasOwnProperty.call(R,"key")?R:{...R,key:void 0};return m(f,async()=>Y(await s.all(f,S)),D)},m.map=(f,S,R,D)=>{let A=D!==void 0&&Object.prototype.hasOwnProperty.call(D,"key")?D:{...D,key:void 0};return m(f,async()=>Y(await s.map(f,S,R,D)),A)},m},Ee=({step:s})=>J({step:ge(s),deps:G,ctx:h}),oe;try{oe=await je(Ee,{onError:ve,onEvent:Se,catchUnexpected:ce,workflowId:E,workflowName:e,context:ne,_workflowSignal:V})}finally{V&&V.removeEventListener("abort",W)}if(!oe.ok&&l.length>0){let s=[];for(let m=l.length-1;m>=0;m--){let p=l[m];try{await p.compensate(p.value)}catch($){s.push({stepName:p.stepName,error:$})}}if(s.length>0){let m={type:"SAGA_COMPENSATION_ERROR",originalError:oe.error,compensationErrors:s};oe=K(m,{cause:oe.cause})}}let Re=performance.now()-b;if(!oe.ok){let s;if(Ye(oe.cause)&&(s=oe.cause),!s&&Z&&mt(oe.error)){let m=oe.cause;m!=null&&typeof m=="object"&&"name"in m&&m.name==="AbortError"&&(s={type:"WORKFLOW_CANCELLED",reason:M??(typeof V?.reason=="string"?V.reason:V?.reason instanceof Error?V.reason.message:void 0),lastStepKey:q})}if(s)return r({type:"workflow_cancelled",workflowId:E,ts:Date.now(),durationMs:Re,reason:s.reason,lastStepKey:s.lastStepKey}),s&&!Ye(oe.cause)?K(oe.error,{cause:s}):oe}if(oe.ok&&Z){let s=M??(typeof V?.reason=="string"?V.reason:V?.reason instanceof Error?V.reason.message:void 0);r({type:"workflow_cancelled",workflowId:E,ts:Date.now(),durationMs:Re,reason:s,lastStepKey:q});let m={type:"WORKFLOW_CANCELLED",reason:s,lastStepKey:q};return K(ce(m),{cause:m})}return oe.ok?r({type:"workflow_success",workflowId:E,ts:Date.now(),durationMs:Re}):r({type:"workflow_error",workflowId:E,ts:Date.now(),durationMs:Re,error:oe.error}),oe}function N(o,J,v){let E,G,l;return typeof o=="string"?(E=o,G=J,l=v):(G=o,l=J),g(E,G,l)}async function C(o,J,v){let E,G,l;typeof o=="string"?(E=o,G=J,l=v):(G=o,l=J);let X=kt(),ne=l?.onEvent,Se={...l,onEvent:(ye,k)=>{X.handleEvent(ye);try{ne?.(ye,k)}catch{}}},ve,Ae;try{ve=await g(E,G,Se)}catch(ye){let k=y?.catchUnexpected??Ke;ve=K(k(ye),{cause:ye})}finally{Ae=X.getResumeState()}return{result:ve,resumeState:Ae}}let H={withDeps:o=>Ge(H,o),run:N,runWithState:C};return H}function xt(e){return typeof e=="object"&&e!==null&&e.type==="SAGA_COMPENSATION_ERROR"}function ht(e,t,a){return Rt(e,t,a)}async function St(e,t){let a=crypto.randomUUID(),x=performance.now(),y=[],g=o=>t?.onEvent?.(o);g({type:"saga_start",sagaId:a,ts:Date.now()});let H=Object.assign(async(o,J,v)=>{if(typeof o!="string"||o.length===0)throw new TypeError("step(name, operation, options?): first argument must be a string.");let E=await J();if(E.ok)return v?.compensate&&y.push({name:o,value:E.value,compensate:v.compensate}),E.value;throw Te(E.error,{origin:"result",resultCause:E.cause})},{try:async(o,J,v)=>{if(typeof o!="string"||o.length===0)throw new TypeError("step.try(name, operation, options): first argument must be a string.");let E="error"in v?()=>v.error:v.onError;try{let G=await J();return v.compensate&&y.push({name:o,value:G,compensate:v.compensate}),G}catch(G){let l=E(G);throw Te(l,{origin:"throw",thrown:G})}}});try{let o=await e({step:H});return g({type:"saga_success",sagaId:a,ts:Date.now(),durationMs:performance.now()-x}),Y(o)}catch(o){let J=performance.now()-x,v=we(o)?o.error:o;g({type:"saga_error",sagaId:a,ts:Date.now(),durationMs:J,error:v}),g({type:"saga_compensation_start",sagaId:a,ts:Date.now(),stepCount:y.length});let E=performance.now(),G=[];for(let l=y.length-1;l>=0;l--){let X=y[l];try{await X.compensate(X.value),g({type:"saga_compensation_step",sagaId:a,stepName:X.name,ts:Date.now(),success:!0})}catch(ne){G.push({stepName:X.name,error:ne}),g({type:"saga_compensation_step",sagaId:a,stepName:X.name,ts:Date.now(),success:!1,error:ne})}}if(g({type:"saga_compensation_end",sagaId:a,ts:Date.now(),durationMs:performance.now()-E,success:G.length===0,failedCount:G.length}),G.length>0){let l={type:"SAGA_COMPENSATION_ERROR",originalError:v,compensationErrors:G};if(t?.onError?.(l),t?.throwOnCompensationFailure)throw l;return K(l)}return t?.onError?.(v),we(o)?K(v):K(new be({cause:o}))}}0&&(module.exports={createSagaWorkflow,isSagaCompensationError,runSaga});
11
- //# sourceMappingURL=saga.cjs.map