awaitly 1.31.1 → 1.32.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 (169) hide show
  1. package/dist/adapters.cjs +2 -2
  2. package/dist/adapters.cjs.map +1 -1
  3. package/dist/adapters.d.cts +3 -1
  4. package/dist/adapters.d.ts +3 -1
  5. package/dist/adapters.js +2 -2
  6. package/dist/adapters.js.map +1 -1
  7. package/dist/batch.cjs +2 -2
  8. package/dist/batch.cjs.map +1 -1
  9. package/dist/batch.d.cts +3 -1
  10. package/dist/batch.d.ts +3 -1
  11. package/dist/batch.js +2 -2
  12. package/dist/batch.js.map +1 -1
  13. package/dist/circuit-breaker.cjs +2 -2
  14. package/dist/circuit-breaker.cjs.map +1 -1
  15. package/dist/circuit-breaker.d.cts +3 -1
  16. package/dist/circuit-breaker.d.ts +3 -1
  17. package/dist/circuit-breaker.js +2 -2
  18. package/dist/circuit-breaker.js.map +1 -1
  19. package/dist/conditional.d.cts +3 -1
  20. package/dist/conditional.d.ts +3 -1
  21. package/dist/core.cjs +2 -2
  22. package/dist/core.cjs.map +1 -1
  23. package/dist/core.d.cts +2 -1
  24. package/dist/core.d.ts +2 -1
  25. package/dist/core.js +2 -2
  26. package/dist/core.js.map +1 -1
  27. package/dist/diagnostics.cjs +3 -3
  28. package/dist/diagnostics.cjs.map +1 -1
  29. package/dist/diagnostics.d.cts +3 -1
  30. package/dist/diagnostics.d.ts +3 -1
  31. package/dist/diagnostics.js +3 -3
  32. package/dist/diagnostics.js.map +1 -1
  33. package/dist/durable.cjs +3 -3
  34. package/dist/durable.cjs.map +1 -1
  35. package/dist/durable.d.cts +8 -361
  36. package/dist/durable.d.ts +8 -361
  37. package/dist/durable.js +3 -3
  38. package/dist/durable.js.map +1 -1
  39. package/dist/engine.cjs +11 -0
  40. package/dist/engine.cjs.map +1 -0
  41. package/dist/engine.d.cts +114 -0
  42. package/dist/engine.d.ts +114 -0
  43. package/dist/engine.js +11 -0
  44. package/dist/engine.js.map +1 -0
  45. package/dist/errors-entry-CMH73Eym.d.cts +339 -0
  46. package/dist/errors-entry-DOt5UUl4.d.ts +339 -0
  47. package/dist/errors.cjs +1 -1
  48. package/dist/errors.cjs.map +1 -1
  49. package/dist/errors.d.cts +2 -318
  50. package/dist/errors.d.ts +2 -318
  51. package/dist/errors.js +1 -1
  52. package/dist/errors.js.map +1 -1
  53. package/dist/fetch.cjs +2 -2
  54. package/dist/fetch.cjs.map +1 -1
  55. package/dist/fetch.d.cts +3 -1
  56. package/dist/fetch.d.ts +3 -1
  57. package/dist/fetch.js +2 -2
  58. package/dist/fetch.js.map +1 -1
  59. package/dist/functional.cjs +1 -1
  60. package/dist/functional.cjs.map +1 -1
  61. package/dist/functional.d.cts +2 -0
  62. package/dist/functional.d.ts +2 -0
  63. package/dist/functional.js +1 -1
  64. package/dist/functional.js.map +1 -1
  65. package/dist/{guards-PU64_GKv.d.cts → guards-B79mP5Q8.d.cts} +3 -3
  66. package/dist/{guards-B5lgMJq0.d.ts → guards-BUq6NJCM.d.ts} +3 -3
  67. package/dist/{hitl-Dyiy0R1v.d.cts → hitl-BCqkMAHw.d.cts} +2 -2
  68. package/dist/{hitl-BjeSm1sJ.d.ts → hitl-BZtPx0aU.d.ts} +2 -2
  69. package/dist/hitl.cjs +2 -2
  70. package/dist/hitl.cjs.map +1 -1
  71. package/dist/hitl.d.cts +9 -6
  72. package/dist/hitl.d.ts +9 -6
  73. package/dist/hitl.js +2 -2
  74. package/dist/hitl.js.map +1 -1
  75. package/dist/index-BVUAOWGG.d.ts +417 -0
  76. package/dist/index-CQnpmUcC.d.cts +417 -0
  77. package/dist/index.cjs +1 -1
  78. package/dist/index.cjs.map +1 -1
  79. package/dist/index.d.cts +4 -3
  80. package/dist/index.d.ts +4 -3
  81. package/dist/index.js +1 -1
  82. package/dist/index.js.map +1 -1
  83. package/dist/otel.d.cts +3 -1
  84. package/dist/otel.d.ts +3 -1
  85. package/dist/{persistence-entry-B3ukwbb5.d.ts → persistence-entry-ClFhxd2Q.d.ts} +11 -5
  86. package/dist/{persistence-entry-CgVzswbg.d.cts → persistence-entry-jflY61az.d.cts} +11 -5
  87. package/dist/persistence.d.cts +6 -3
  88. package/dist/persistence.d.ts +6 -3
  89. package/dist/policies.d.cts +3 -1
  90. package/dist/policies.d.ts +3 -1
  91. package/dist/ratelimit.cjs +2 -2
  92. package/dist/ratelimit.cjs.map +1 -1
  93. package/dist/ratelimit.d.cts +3 -1
  94. package/dist/ratelimit.d.ts +3 -1
  95. package/dist/ratelimit.js +2 -2
  96. package/dist/ratelimit.js.map +1 -1
  97. package/dist/reliability.cjs +2 -2
  98. package/dist/reliability.cjs.map +1 -1
  99. package/dist/reliability.d.cts +3 -1
  100. package/dist/reliability.d.ts +3 -1
  101. package/dist/reliability.js +2 -2
  102. package/dist/reliability.js.map +1 -1
  103. package/dist/resolver.cjs +2 -2
  104. package/dist/resolver.cjs.map +1 -1
  105. package/dist/resolver.d.cts +5 -3
  106. package/dist/resolver.d.ts +5 -3
  107. package/dist/resolver.js +2 -2
  108. package/dist/resolver.js.map +1 -1
  109. package/dist/resource.cjs +2 -2
  110. package/dist/resource.cjs.map +1 -1
  111. package/dist/resource.d.cts +3 -1
  112. package/dist/resource.d.ts +3 -1
  113. package/dist/resource.js +2 -2
  114. package/dist/resource.js.map +1 -1
  115. package/dist/result/retry.cjs +1 -1
  116. package/dist/result/retry.cjs.map +1 -1
  117. package/dist/result/retry.d.cts +2 -0
  118. package/dist/result/retry.d.ts +2 -0
  119. package/dist/result/retry.js +1 -1
  120. package/dist/result/retry.js.map +1 -1
  121. package/dist/result.cjs +1 -1
  122. package/dist/result.cjs.map +1 -1
  123. package/dist/result.d.cts +8 -23
  124. package/dist/result.d.ts +8 -23
  125. package/dist/result.js +1 -1
  126. package/dist/result.js.map +1 -1
  127. package/dist/{run-entry-C1uFytM6.d.cts → run-entry-rw7zll_G.d.ts} +16 -45
  128. package/dist/{run-entry-C1uFytM6.d.ts → run-entry-yQu63Yj9.d.cts} +16 -45
  129. package/dist/run.cjs +2 -2
  130. package/dist/run.cjs.map +1 -1
  131. package/dist/run.d.cts +3 -1
  132. package/dist/run.d.ts +3 -1
  133. package/dist/run.js +2 -2
  134. package/dist/run.js.map +1 -1
  135. package/dist/saga.cjs +2 -2
  136. package/dist/saga.cjs.map +1 -1
  137. package/dist/saga.d.cts +3 -1
  138. package/dist/saga.d.ts +3 -1
  139. package/dist/saga.js +2 -2
  140. package/dist/saga.js.map +1 -1
  141. package/dist/singleflight.d.cts +3 -1
  142. package/dist/singleflight.d.ts +3 -1
  143. package/dist/streaming.cjs +4 -4
  144. package/dist/streaming.cjs.map +1 -1
  145. package/dist/streaming.d.cts +5 -3
  146. package/dist/streaming.d.ts +5 -3
  147. package/dist/streaming.js +4 -4
  148. package/dist/streaming.js.map +1 -1
  149. package/dist/testing.cjs +8 -4
  150. package/dist/testing.cjs.map +1 -1
  151. package/dist/testing.d.cts +87 -4
  152. package/dist/testing.d.ts +87 -4
  153. package/dist/testing.js +8 -4
  154. package/dist/testing.js.map +1 -1
  155. package/dist/{types-wa_wTOn3.d.ts → types-CuWK5AlK.d.ts} +1 -1
  156. package/dist/{types-DUWrNIJu.d.cts → types-uR3JpwvF.d.cts} +1 -1
  157. package/dist/webhook.cjs +2 -2
  158. package/dist/webhook.cjs.map +1 -1
  159. package/dist/webhook.d.cts +7 -4
  160. package/dist/webhook.d.ts +7 -4
  161. package/dist/webhook.js +2 -2
  162. package/dist/webhook.js.map +1 -1
  163. package/dist/workflow.cjs +3 -3
  164. package/dist/workflow.cjs.map +1 -1
  165. package/dist/workflow.d.cts +47 -11
  166. package/dist/workflow.d.ts +47 -11
  167. package/dist/workflow.js +3 -3
  168. package/dist/workflow.js.map +1 -1
  169. package/package.json +15 -1
package/dist/run.cjs CHANGED
@@ -1,7 +1,7 @@
1
- "use strict";var pe=Object.defineProperty;var Ce=Object.getOwnPropertyDescriptor;var xe=Object.getOwnPropertyNames;var he=Object.prototype.hasOwnProperty;var Se=(o,c)=>{for(var m in c)pe(o,m,{get:c[m],enumerable:!0})},be=(o,c,m,C)=>{if(c&&typeof c=="object"||typeof c=="function")for(let P of xe(c))!he.call(o,P)&&P!==m&&pe(o,P,{get:()=>c[P],enumerable:!(C=Ce(c,P))||C.enumerable});return o};var Ae=o=>be(pe({},"__esModule",{value:!0}),o);var Ke={};Se(Ke,{EARLY_EXIT_SYMBOL:()=>oe,STEP_TIMEOUT_MARKER:()=>Y,createEarlyExit:()=>we,getStepTimeoutMeta:()=>Ee,isEarlyExit:()=>ye,isStepTimeoutError:()=>ne,run:()=>re});module.exports=Ae(Ke);function Pe(o){let c=o.trim().match(/^(\d+(?:\.\d+)?)\s*(ms|s|m|h|d)$/i);if(!c)return;let m=parseFloat(c[1]),C=c[2].toLowerCase();return{_tag:"Duration",millis:m*({ms:1,s:1e3,m:6e4,h:36e5,d:864e5}[C]??1)}}var _e="UNEXPECTED_ERROR";function Oe(o){return _e}function j(o){return{ok:!0,value:o}}function D(o,c){let m=c?.cause;return{ok:!1,error:o,...m!==void 0?{cause:m}:{}}}function Me(o){if(o==null)return"unknown";if(typeof o=="string")return o.trim()||"unknown";if(typeof o=="object"){let c=o;if(typeof c._tag=="string"){let m=c._tag.trim();if(m)return m}if(typeof c.tag=="string"){let m=c.tag.trim();if(m)return m}if(typeof c.code=="string"){let m=c.code.trim();if(m)return m}else if(typeof c.code=="number")return String(c.code);if(o instanceof Error&&o.name){let m=o.name.trim();if(m)return m}}return"unknown"}function ve(o,c){if(!(!c||!o))return c[o]}function Ie(o){let{intent:c,domain:m,owner:C,tags:P,stateChanges:M,emits:O,calls:T}=o;if(!c&&!m&&!C&&!P?.length&&!M?.length&&!O?.length&&!T?.length)return;let I={};return c&&(I.intent=c),m&&(I.domain=m),C&&(I.owner=C),P?.length&&(I.tags=P),M?.length&&(I.stateChanges=M),O?.length&&(I.emits=O),T?.length&&(I.calls=T),I}function K(o,c,m,C,P){let M=Me(o),O=ve(M,c),T={tag:M,origin:m};return O!==void 0&&(T.classification=O),C!==void 0&&(T.attempt=C),P!==void 0&&(T.cumulativeDurationMs=P),T}var Y=Symbol.for("step_timeout_marker");function ne(o){return typeof o!="object"||o===null?!1:o.type==="STEP_TIMEOUT"?!0:Y in o}function Ee(o){if(!(typeof o!="object"||o===null)){if(o.type==="STEP_TIMEOUT"){let c=o;return{timeoutMs:c.timeoutMs,stepName:c.stepName,stepKey:c.stepKey,attempt:c.attempt}}if(Y in o)return o[Y]}}var oe=Symbol("early-exit");function we(o,c){return{[oe]:!0,error:o,meta:c}}function ye(o){return typeof o=="object"&&o!==null&&o[oe]===!0}var Te=Symbol("mapper-exception");function G(o){return{[Te]:!0,thrown:o}}function De(o){return typeof o=="object"&&o!==null&&o[Te]===!0}function ce(o,c){let{backoff:m,initialDelay:C,maxDelay:P,jitter:M}=c,O;switch(m){case"fixed":O=C;break;case"linear":O=C*o;break;case"exponential":O=C*Math.pow(2,o-1);break}if(O=Math.min(O,P),M){let T=O*.25*Math.random();O=O+T}return Math.floor(O)}function me(o){return new Promise(c=>setTimeout(c,o))}var de=Symbol("timeout"),te=Symbol("timeout-option");function Ue(o){return typeof o=="object"&&o!==null&&o[te]===!0}async function Ne(o,c,m,C){let P=new AbortController,M=c.onTimeout??"error",O=()=>typeof M=="function"?M({name:m.name,key:m.key,ms:c.ms}):c.error??{type:"STEP_TIMEOUT",stepName:m.name,stepKey:m.key,timeoutMs:c.ms,attempt:m.attempt},T;C?.aborted&&P.abort(C.reason);let I;C&&!C.aborted&&(I=()=>P.abort(C.reason),C.addEventListener("abort",I,{once:!0}));let s=new Promise((_,N)=>{T=setTimeout(()=>{if(M!=="disconnect"&&P.abort(),M==="option"){N({[te]:!0,ms:c.ms});return}N({[de]:!0,error:O()})},c.ms)}),U;c.signal?U=Promise.resolve(o(P.signal)):U=Promise.resolve(o());try{return await Promise.race([U,s])}catch(_){if(typeof _=="object"&&_!==null&&_[te]===!0)throw{[te]:!0,ms:c.ms};if(typeof _=="object"&&_!==null&&_[de]===!0){M==="disconnect"&&U.catch(()=>{});let N=_.error;if(typeof N=="object"&&N!==null&&N.type!=="STEP_TIMEOUT"){let H={timeoutMs:c.ms,stepName:m.name,stepKey:m.key,attempt:m.attempt};Y in N?N[Y]=H:Object.defineProperty(N,Y,{value:H,enumerable:!1,writable:!0,configurable:!1})}throw N}throw _}finally{clearTimeout(T),I&&C&&C.removeEventListener("abort",I)}}var z={backoff:"exponential",initialDelay:100,maxDelay:3e4,jitter:!0,retryOn:()=>!0,onRetry:()=>{}};async function re(o,c){let{onError:m,onEvent:C,catchUnexpected:P,workflowId:M,workflowName:O,context:T,_workflowSignal:I}=c&&typeof c=="object"?c:{},s=M??crypto.randomUUID(),U=P??Oe,_=[],N=0,H=l=>l??`step_${++N}`,u=l=>{let F=l.context!==void 0||T===void 0?l:{...l,context:T},W=O!==void 0&&F.workflowName===void 0?{...F,workflowName:O}:F;if(W.type==="step_success"){let Z=W.stepId;for(let ee=_.length-1;ee>=0;ee--){let L=_[ee];if(L.type==="race"&&!L.winnerId){L.winnerId=Z;break}}}C?.(W,T)},v=we,$=l=>ye(l),V=(l,F)=>l,ke=l=>typeof l=="function"?!1:!!(l&&typeof l=="object"&&"ok"in l||l&&typeof l=="object"&&"then"in l&&typeof l.then=="function");try{let F=function(r){let p={};for(let[n,t]of Object.entries(r))if(typeof t=="function")p[n]=t;else if(t&&typeof t=="object"&&"fn"in t)p[n]=t.fn;else throw new TypeError(`step.parallel: operation "${n}" must be a function or { fn, errors? } object`);return p},W=function(r,p){let n=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let t=performance.now(),e=!1;_.push({scopeId:n,type:"parallel"});let a=()=>{if(e)return;e=!0;let i=_.findIndex(E=>E.scopeId===n);i!==-1&&_.splice(i,1),u({type:"scope_end",workflowId:s,scopeId:n,ts:Date.now(),durationMs:performance.now()-t})};u({type:"scope_start",workflowId:s,scopeId:n,scopeType:"parallel",name:r,ts:Date.now()});try{let i=await p();if(a(),!i.ok)throw m?.(i.error,r,T),v(i.error,{origin:"result",resultCause:i.cause});return i.value}catch(i){throw a(),i}})()},Z=function(r,p){let n=Object.keys(r),t=p.name??`Parallel(${n.join(", ")})`,e=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let a=performance.now(),i=!1;_.push({scopeId:e,type:"parallel"});let E=()=>{if(i)return;i=!0;let w=_.findIndex(y=>y.scopeId===e);w!==-1&&_.splice(w,1),u({type:"scope_end",workflowId:s,scopeId:e,ts:Date.now(),durationMs:performance.now()-a})};u({type:"scope_start",workflowId:s,scopeId:e,scopeType:"parallel",name:t,ts:Date.now()});try{let w=await new Promise(f=>{if(n.length===0){f([]);return}let h=!1,A=n.length,k=new Array(n.length);for(let b=0;b<n.length;b++){let R=n[b],x=b;Promise.resolve(r[R]()).catch(g=>D({type:"PROMISE_REJECTED",cause:g},{cause:{type:"PROMISE_REJECTION",reason:g}})).then(g=>{if(!h){if(!g.ok){h=!0,f([{key:R,result:g}]);return}k[x]={key:R,result:g},A--,A===0&&f(k)}})}});E();let y={};for(let{key:f,result:h}of w){if(!h.ok)throw m?.(h.error,f,T),v(h.error,{origin:"result",resultCause:h.cause});y[f]=h.value}return y}catch(w){throw E(),w}})()};var je=F,Fe=W,Le=Z;let l=(r,p,n)=>(async()=>{if(typeof r!="string"||r.length===0)throw new Error('[awaitly] step() requires an explicit string ID as the first argument. Example: step("fetchUser", () => fetchUser(id))');let t=n??{},e=Ie(t),a=r,i=t.key??r,E=t.key??r,{description:w,retry:y,timeout:f}=t,h=H(i),A=C,k=A?performance.now():0,R=ke(p)?()=>p:p,g={attempts:Math.max(1,y?.attempts??1),backoff:y?.backoff??z.backoff,initialDelay:y?.initialDelay??z.initialDelay,maxDelay:y?.maxDelay??z.maxDelay,jitter:y?.jitter??z.jitter,retryOn:y?.retryOn??z.retryOn,onRetry:y?.onRetry??z.onRetry};C&&u({type:"step_start",workflowId:s,stepId:h,stepKey:i,name:a,description:w,ts:Date.now(),...e&&{metadata:e}});let J;for(let S=1;S<=g.attempts;S++){let Re=A?performance.now():0;try{let d;if(f?d=await Ne(R,f,{name:a,key:i,attempt:S},I):d=await R(),d.ok){let X=performance.now()-k;return u({type:"step_success",workflowId:s,stepId:h,stepKey:i,name:a,description:w,ts:Date.now(),durationMs:X,...e&&{metadata:e}}),E&&u({type:"step_complete",workflowId:s,stepKey:E,name:a,description:w,ts:Date.now(),durationMs:X,result:d,...e&&{metadata:e}}),d.value}if(J=d,S<g.attempts&&g.retryOn(d.error,S)){let X=ce(S,g);u({type:"step_retry",workflowId:s,stepId:h,stepKey:i,name:a,ts:Date.now(),attempt:S+1,maxAttempts:g.attempts,delayMs:X,error:d.error,...e&&{metadata:e},diagnostics:K(d.error,t.errorMeta,"result",S,performance.now()-k)}),g.onRetry(d.error,S,X),await me(X);continue}g.attempts>1&&u({type:"step_retries_exhausted",workflowId:s,stepId:h,stepKey:i,name:a,ts:Date.now(),durationMs:performance.now()-k,attempts:S,lastError:d.error,...e&&{metadata:e},diagnostics:K(d.error,t.errorMeta,"result",S,performance.now()-k)});break}catch(d){let X=performance.now()-Re;if(Ue(d)){let B=d.ms;u({type:"step_timeout",workflowId:s,stepId:h,stepKey:i,name:a,ts:Date.now(),timeoutMs:B,attempt:S,...e&&{metadata:e},diagnostics:K(d,t.errorMeta,"timeout",S)}),u({type:"step_success",workflowId:s,stepId:h,stepKey:i,name:a,description:w,ts:Date.now(),durationMs:performance.now()-k,...e&&{metadata:e}}),E&&u({type:"step_complete",workflowId:s,stepKey:E,name:a,description:w,ts:Date.now(),durationMs:performance.now()-k,result:j(void 0),...e&&{metadata:e}});return}if($(d))throw u({type:"step_aborted",workflowId:s,stepId:h,stepKey:i,name:a,description:w,ts:Date.now(),durationMs:X,...e&&{metadata:e}}),d;if(ne(d)){let B=Ee(d),ge=f?.ms??B?.timeoutMs??0;if(u({type:"step_timeout",workflowId:s,stepId:h,stepKey:i,name:a,ts:Date.now(),timeoutMs:ge,attempt:S,...e&&{metadata:e},diagnostics:K(d,t.errorMeta,"timeout",S)}),S<g.attempts&&g.retryOn(d,S)){let le=ce(S,g);u({type:"step_retry",workflowId:s,stepId:h,stepKey:i,name:a,ts:Date.now(),attempt:S+1,maxAttempts:g.attempts,delayMs:le,error:d,...e&&{metadata:e},diagnostics:K(d,t.errorMeta,"timeout",S,performance.now()-k)}),g.onRetry(d,S,le),await me(le);continue}g.attempts>1&&u({type:"step_retries_exhausted",workflowId:s,stepId:h,stepKey:i,name:a,ts:Date.now(),durationMs:performance.now()-k,attempts:S,lastError:d,...e&&{metadata:e},diagnostics:K(d,t.errorMeta,"timeout",S,performance.now()-k)});let ue=performance.now()-k;throw u({type:"step_error",workflowId:s,stepId:h,stepKey:i,name:a,description:w,ts:Date.now(),durationMs:ue,error:d,...e&&{metadata:e},diagnostics:K(d,t.errorMeta,"timeout",S,ue)}),E&&u({type:"step_complete",workflowId:s,stepKey:E,name:a,description:w,ts:Date.now(),durationMs:ue,result:D(d,{cause:d}),meta:{origin:"throw",thrown:d},...e&&{metadata:e}}),m?.(d,a,T),v(d,{origin:"throw",thrown:d})}if(S<g.attempts&&g.retryOn(d,S)){let B=ce(S,g);u({type:"step_retry",workflowId:s,stepId:h,stepKey:i,name:a,ts:Date.now(),attempt:S+1,maxAttempts:g.attempts,delayMs:B,error:d,...e&&{metadata:e},diagnostics:K(d,t.errorMeta,"throw",S,performance.now()-k)}),g.onRetry(d,S,B),await me(B);continue}g.attempts>1&&!ne(d)&&u({type:"step_retries_exhausted",workflowId:s,stepId:h,stepKey:i,name:a,ts:Date.now(),durationMs:performance.now()-k,attempts:S,lastError:d,...e&&{metadata:e},diagnostics:K(d,t.errorMeta,"throw",S,performance.now()-k)});let ie=performance.now()-k,Q;try{Q=U(d)}catch(B){throw G(B)}throw u({type:"step_error",workflowId:s,stepId:h,stepKey:i,name:a,description:w,ts:Date.now(),durationMs:ie,error:Q,...e&&{metadata:e},diagnostics:K(d,t.errorMeta,"throw",S,ie)}),E&&u({type:"step_complete",workflowId:s,stepKey:E,name:a,description:w,ts:Date.now(),durationMs:ie,result:D(Q,{cause:d}),meta:{origin:"throw",thrown:d},...e&&{metadata:e}}),m?.(Q,a,T),v(Q,{origin:"throw",thrown:d})}}let q=J,se=performance.now()-k,ae=V(q.error,{origin:"result",resultCause:q.cause});throw u({type:"step_error",workflowId:s,stepId:h,stepKey:i,name:a,description:w,ts:Date.now(),durationMs:se,error:ae,...e&&{metadata:e},diagnostics:K(q.error,t.errorMeta,"result",g.attempts,se)}),E&&u({type:"step_complete",workflowId:s,stepKey:E,name:a,description:w,ts:Date.now(),durationMs:se,result:q,meta:{origin:"result",resultCause:q.cause},...e&&{metadata:e}}),m?.(ae,a,T),v(ae,{origin:"result",resultCause:q.cause})})();l.try=(r,p,n)=>{if(typeof r!="string"||r.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 t=n.key??r,e=r,a=r,i="error"in n?()=>n.error:n.onError,E=C;return(async()=>{let w=E?performance.now():0;C&&u({type:"step_start",workflowId:s,stepId:a,stepKey:t,name:e,ts:Date.now()});try{let y=await p(),f=performance.now()-w;return u({type:"step_success",workflowId:s,stepId:a,stepKey:t,name:e,ts:Date.now(),durationMs:f}),t&&u({type:"step_complete",workflowId:s,stepKey:t,name:e,ts:Date.now(),durationMs:f,result:j(y)}),y}catch(y){let f=i(y),h=performance.now()-w,A=V(f,{origin:"throw",thrown:y});throw u({type:"step_error",workflowId:s,stepId:a,stepKey:t,name:e,ts:Date.now(),durationMs:h,error:A}),t&&u({type:"step_complete",workflowId:s,stepKey:t,name:e,ts:Date.now(),durationMs:h,result:D(f,{cause:y}),meta:{origin:"throw",thrown:y}}),m?.(A,e,T),v(A,{origin:"throw",thrown:y})}})()},l.fromResult=(r,p,n)=>{if(typeof r!="string"||r.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 t=n.key??r,e=r,a=r,i="error"in n?()=>n.error:n.onError,E=C;return(async()=>{let w=E?performance.now():0;C&&u({type:"step_start",workflowId:s,stepId:a,stepKey:t,name:e,ts:Date.now()});let y=await p();if(y.ok){let f=performance.now()-w;return u({type:"step_success",workflowId:s,stepId:a,stepKey:t,name:e,ts:Date.now(),durationMs:f}),t&&u({type:"step_complete",workflowId:s,stepKey:t,name:e,ts:Date.now(),durationMs:f,result:j(y.value)}),y.value}else{let f=i(y.error),h=performance.now()-w,A=V(f,{origin:"result",resultCause:y.error});throw u({type:"step_error",workflowId:s,stepId:a,stepKey:t,name:e,ts:Date.now(),durationMs:h,error:A}),t&&u({type:"step_complete",workflowId:s,stepKey:t,name:e,ts:Date.now(),durationMs:h,result:D(f,{cause:y.error}),meta:{origin:"result",resultCause:y.error}}),m?.(A,e,T),v(A,{origin:"result",resultCause:y.error})}})()},l.fromNullable=(r,p,n,t)=>{if(typeof r!="string"||r.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 l(r,async()=>{let e=await p();return e!=null?j(e):D(n())},t)},l.retry=(r,p,n)=>{if(typeof r!="string"||r.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 l(r,p,{key:n.key??r,retry:{attempts:n.attempts,backoff:n.backoff,initialDelay:n.initialDelay,maxDelay:n.maxDelay,jitter:n.jitter,retryOn:n.retryOn,onRetry:n.onRetry},timeout:n.timeout})},l.withTimeout=(r,p,n)=>{if(typeof r!="string"||r.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 l(r,p,{key:n.key??r,timeout:n})},l.sleep=(r,p,n)=>{if(typeof r!="string"||r.length===0)throw new Error('[awaitly] step.sleep() requires an explicit string ID as the first argument. Example: step.sleep("delay", "5s")');let t=typeof p=="string"?Pe(p):p;if(!t)throw new Error(`step.sleep: invalid duration '${p}'`);let e=t.millis,a=n?.signal;return l(r,async()=>{if(I?.aborted||a?.aborted){let i=new Error("Sleep aborted");throw i.name="AbortError",i}return new Promise((i,E)=>{let w={timeoutId:void 0},y=()=>{w.timeoutId&&clearTimeout(w.timeoutId);let f=new Error("Sleep aborted");f.name="AbortError",E(f)};I?.addEventListener("abort",y,{once:!0}),a?.addEventListener("abort",y,{once:!0}),w.timeoutId=setTimeout(()=>{I?.removeEventListener("abort",y),a?.removeEventListener("abort",y),i(j(void 0))},e)})},{key:n?.key??r,description:n?.description})},l.parallel=((...r)=>{if(typeof r[0]!="string")throw new TypeError("step.parallel(name, ...): first argument must be a string (step name). Example: step.parallel('Fetch data', { user: () => fetchUser(), posts: () => fetchPosts() })");let p=r[0],n=r[1];if(typeof n=="function")return W(p,n);if(n&&typeof n=="object"&&!Array.isArray(n)){let e=F(n);return Z(e,{name:p})}throw new TypeError("step.parallel(name, ...): second argument must be a function (array form) or an object of operations (object form).")}),l.race=(r,p)=>{let n=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let t=performance.now(),e=!1,a={scopeId:n,type:"race",winnerId:void 0};_.push(a);let i=()=>{if(e)return;e=!0;let E=_.findIndex(w=>w.scopeId===n);E!==-1&&_.splice(E,1),u({type:"scope_end",workflowId:s,scopeId:n,ts:Date.now(),durationMs:performance.now()-t,winnerId:a.winnerId})};u({type:"scope_start",workflowId:s,scopeId:n,scopeType:"race",name:r,ts:Date.now()});try{let E=await p();if(i(),!E.ok)throw m?.(E.error,r,T),v(E.error,{origin:"result",resultCause:E.cause});return E.value}catch(E){throw i(),E}})()},l.allSettled=(r,p)=>{let n=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let t=performance.now(),e=!1;_.push({scopeId:n,type:"allSettled"});let a=()=>{if(e)return;e=!0;let i=_.findIndex(E=>E.scopeId===n);i!==-1&&_.splice(i,1),u({type:"scope_end",workflowId:s,scopeId:n,ts:Date.now(),durationMs:performance.now()-t})};u({type:"scope_start",workflowId:s,scopeId:n,scopeType:"allSettled",name:r,ts:Date.now()});try{let i=await p();if(a(),!i.ok)throw m?.(i.error,r,T),v(i.error,{origin:"result",resultCause:i.cause});return i.value}catch(i){throw a(),i}})()},l.if=(r,p,n)=>n(),l.label=l.if,l.branch=async(r,p)=>{let{condition:n,then:t,else:e}=p;if(n())return await t();if(e)return await e()},l.arm=(r,p)=>({fn:r,errors:p}),l.forEach=async(r,p,n)=>{let t=[],e=n.maxIterations,a=0,i="run"in n,E=Symbol.asyncIterator in p?p:(async function*(){yield*p})();for await(let w of E){if(e!==void 0&&a>=e)break;let y;i?y=await n.run(w,a):y=await n.item.handler(w,a,l),t.push(y),a++}return t},l.item=r=>({__forEachItemHandler:!0,handler:r}),l.dep=(r,p)=>p,l.run=(r,p,n)=>l(r,()=>p,n),l.workflow=(r,p,n)=>l(r,p,n),l.andThen=(r,p,n,t)=>l(r,()=>n(p),t),l.match=async(r,p,n,t)=>l(r,async()=>{let e=await p;return e.ok?j(await n.ok(e.value)):j(await n.err(e.error,e.cause))},t),l.all=l.parallel,l.map=async(r,p,n,t)=>{let e=t?.concurrency??p.length;return l(r,()=>e>=p.length?fe(p.map((a,i)=>n(a,i))):(async()=>{let a=[];for(let i=0;i<p.length;i+=e){let E=p.slice(i,i+e),w=await fe(E.map((y,f)=>n(y,i+f)));if(!w.ok)return w;a.push(...w.value)}return j(a)})(),{key:t?.key})},l.withFallback=(r,p,n)=>{if(typeof r!="string"||r.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 t=n.key??r,e=r,a=H(t),i=C;return(async()=>{let E=i?performance.now():0;C&&u({type:"step_start",workflowId:s,stepId:a,stepKey:t,name:e,ts:Date.now()});let w;try{w=await p()}catch(k){if($(k))throw u({type:"step_aborted",workflowId:s,stepId:a,stepKey:t,name:e,ts:Date.now(),durationMs:performance.now()-E}),k;let b;try{b=U(k)}catch(x){throw G(x)}if(n.on!==void 0&&n.on!==b){let x=performance.now()-E;throw u({type:"step_error",workflowId:s,stepId:a,stepKey:t,name:e,ts:Date.now(),durationMs:x,error:b}),t&&u({type:"step_complete",workflowId:s,stepKey:t,name:e,ts:Date.now(),durationMs:x,result:D(b,{cause:k}),meta:{origin:"throw",thrown:k}}),m?.(b,e,T),v(b,{origin:"throw",thrown:k})}let R;try{R=await n.fallback()}catch(x){if($(x))throw u({type:"step_aborted",workflowId:s,stepId:a,stepKey:t,name:e,ts:Date.now(),durationMs:performance.now()-E}),x;let g;try{g=U(x)}catch(q){throw G(q)}let J=performance.now()-E;throw u({type:"step_error",workflowId:s,stepId:a,stepKey:t,name:e,ts:Date.now(),durationMs:J,error:g}),t&&u({type:"step_complete",workflowId:s,stepKey:t,name:e,ts:Date.now(),durationMs:J,result:D(g,{cause:x}),meta:{origin:"throw",thrown:x}}),m?.(g,e,T),v(g,{origin:"throw",thrown:x})}if(R.ok){let x=performance.now()-E;return u({type:"step_success",workflowId:s,stepId:a,stepKey:t,name:e,ts:Date.now(),durationMs:x}),t&&u({type:"step_complete",workflowId:s,stepKey:t,name:e,ts:Date.now(),durationMs:x,result:R,meta:{origin:"fallback",fallbackUsed:!0,fallbackReason:String(b)}}),R.value}else{let x=performance.now()-E,g=V(R.error,{origin:"result",resultCause:R.cause});throw u({type:"step_error",workflowId:s,stepId:a,stepKey:t,name:e,ts:Date.now(),durationMs:x,error:g}),t&&u({type:"step_complete",workflowId:s,stepKey:t,name:e,ts:Date.now(),durationMs:x,result:R,meta:{origin:"result",resultCause:R.cause}}),m?.(g,e,T),v(g,{origin:"result",resultCause:R.cause})}}if(w.ok){let k=performance.now()-E;return u({type:"step_success",workflowId:s,stepId:a,stepKey:t,name:e,ts:Date.now(),durationMs:k}),t&&u({type:"step_complete",workflowId:s,stepKey:t,name:e,ts:Date.now(),durationMs:k,result:w}),w.value}let y=w.error;if(n.on!==void 0&&n.on!==y){let k=performance.now()-E,b=V(y,{origin:"result",resultCause:w.cause});throw u({type:"step_error",workflowId:s,stepId:a,stepKey:t,name:e,ts:Date.now(),durationMs:k,error:b}),t&&u({type:"step_complete",workflowId:s,stepKey:t,name:e,ts:Date.now(),durationMs:k,result:w,meta:{origin:"result",resultCause:w.cause}}),m?.(b,e,T),v(b,{origin:"result",resultCause:w.cause})}let f;try{f=await n.fallback()}catch(k){if($(k))throw u({type:"step_aborted",workflowId:s,stepId:a,stepKey:t,name:e,ts:Date.now(),durationMs:performance.now()-E}),k;let b;try{b=U(k)}catch(x){throw G(x)}let R=performance.now()-E;throw u({type:"step_error",workflowId:s,stepId:a,stepKey:t,name:e,ts:Date.now(),durationMs:R,error:b}),t&&u({type:"step_complete",workflowId:s,stepKey:t,name:e,ts:Date.now(),durationMs:R,result:D(b,{cause:k}),meta:{origin:"throw",thrown:k}}),m?.(b,e,T),v(b,{origin:"throw",thrown:k})}if(f.ok){let k=performance.now()-E;return u({type:"step_success",workflowId:s,stepId:a,stepKey:t,name:e,ts:Date.now(),durationMs:k}),t&&u({type:"step_complete",workflowId:s,stepKey:t,name:e,ts:Date.now(),durationMs:k,result:f,meta:{origin:"fallback",fallbackUsed:!0,fallbackReason:String(y)}}),f.value}let h=performance.now()-E,A=V(f.error,{origin:"result",resultCause:f.cause});throw u({type:"step_error",workflowId:s,stepId:a,stepKey:t,name:e,ts:Date.now(),durationMs:h,error:A}),t&&u({type:"step_complete",workflowId:s,stepKey:t,name:e,ts:Date.now(),durationMs:h,result:f,meta:{origin:"result",resultCause:f.cause}}),m?.(A,e,T),v(A,{origin:"result",resultCause:f.cause})})()},l.withResource=(r,p)=>{if(typeof r!="string"||r.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 n=r,t=r,e=H(n),a=C;return(async()=>{let i=a?performance.now():0;C&&u({type:"step_start",workflowId:s,stepId:e,stepKey:n,name:t,ts:Date.now()});let E;try{E=await p.acquire()}catch(R){if($(R))throw u({type:"step_aborted",workflowId:s,stepId:e,stepKey:n,name:t,ts:Date.now(),durationMs:performance.now()-i}),R;let x;try{x=U(R)}catch(J){throw G(J)}let g=performance.now()-i;throw u({type:"step_error",workflowId:s,stepId:e,stepKey:n,name:t,ts:Date.now(),durationMs:g,error:x}),n&&u({type:"step_complete",workflowId:s,stepKey:n,name:t,ts:Date.now(),durationMs:g,result:D(x,{cause:R}),meta:{origin:"throw",thrown:R}}),m?.(x,t,T),v(x,{origin:"throw",thrown:R})}if(!E.ok){let R=performance.now()-i,x=V(E.error,{origin:"result",resultCause:E.cause});throw u({type:"step_error",workflowId:s,stepId:e,stepKey:n,name:t,ts:Date.now(),durationMs:R,error:x}),n&&u({type:"step_complete",workflowId:s,stepKey:n,name:t,ts:Date.now(),durationMs:R,result:E,meta:{origin:"result",resultCause:E.cause}}),m?.(x,t,T),v(x,{origin:"result",resultCause:E.cause})}let w=E.value,y,f,h=!1;try{y=await p.use(w)}catch(R){if($(R)){try{await p.release(w)}catch(x){console.warn(`[awaitly] step.withResource("${r}"): release threw after earlyExit:`,x)}throw R}f=R,h=!0}try{await p.release(w)}catch(R){console.warn(`[awaitly] step.withResource("${r}"): release threw:`,R)}if(h){let R;try{R=U(f)}catch(g){throw G(g)}let x=performance.now()-i;throw u({type:"step_error",workflowId:s,stepId:e,stepKey:n,name:t,ts:Date.now(),durationMs:x,error:R}),n&&u({type:"step_complete",workflowId:s,stepKey:n,name:t,ts:Date.now(),durationMs:x,result:D(R,{cause:f}),meta:{origin:"throw",thrown:f}}),m?.(R,t,T),v(R,{origin:"throw",thrown:f})}let A=y;if(A.ok){let R=performance.now()-i;return u({type:"step_success",workflowId:s,stepId:e,stepKey:n,name:t,ts:Date.now(),durationMs:R}),n&&u({type:"step_complete",workflowId:s,stepKey:n,name:t,ts:Date.now(),durationMs:R,result:A}),A.value}let k=performance.now()-i,b=V(A.error,{origin:"result",resultCause:A.cause});throw u({type:"step_error",workflowId:s,stepId:e,stepKey:n,name:t,ts:Date.now(),durationMs:k,error:b}),n&&u({type:"step_complete",workflowId:s,stepKey:n,name:t,ts:Date.now(),durationMs:k,result:A,meta:{origin:"result",resultCause:A.cause}}),m?.(b,t,T),v(b,{origin:"result",resultCause:A.cause})})()};let L=await o({step:l});if(process.env.NODE_ENV!=="production"&&L!==null&&typeof L=="object"&&"ok"in L&&typeof L.ok=="boolean"){let r=L;(r.ok===!0&&"value"in r||r.ok===!1&&"error"in r)&&console.warn(`awaitly: Workflow executor returned a Result-like object. Return raw values, not ok() or err().
1
+ "use strict";var me=Object.defineProperty;var De=Object.getOwnPropertyDescriptor;var Ue=Object.getOwnPropertyNames;var Ne=Object.prototype.hasOwnProperty;var Ke=(o,t)=>{for(var l in t)me(o,l,{get:t[l],enumerable:!0})},je=(o,t,l,T)=>{if(t&&typeof t=="object"||typeof t=="function")for(let _ of Ue(t))!Ne.call(o,_)&&_!==l&&me(o,_,{get:()=>t[_],enumerable:!(T=De(t,_))||T.enumerable});return o};var Fe=o=>je(me({},"__esModule",{value:!0}),o);var Je={};Ke(Je,{EARLY_EXIT_SYMBOL:()=>ie,STEP_TIMEOUT_MARKER:()=>Y,createEarlyExit:()=>fe,getStepTimeoutMeta:()=>we,isEarlyExit:()=>Te,isStepTimeoutError:()=>se,run:()=>ae});module.exports=Fe(Je);var ee=class extends Error{_tag};function N(o,t){return class extends ee{_tag=o;constructor(l,T){let _=t?.message?t.message(l??{}):o;if(super(_),this.name=o,Object.setPrototypeOf(this,new.target.prototype),l&&typeof l=="object"){let{_tag:S,name:A,message:y,stack:v,...a}=l,D=Object.prototype.hasOwnProperty.call(a,"cause"),P=D?a.cause:void 0;D&&delete a.cause;let U=T?.cause!==void 0;if(D&&U)throw new TypeError("TaggedError: cannot provide 'cause' in props when also setting ErrorOptions.cause");Object.assign(this,a),D&&(this.cause=P),U&&(this.cause=T?.cause)}else T?.cause!==void 0&&(this.cause=T.cause)}}}Object.defineProperty(N,Symbol.hasInstance,{value:o=>o instanceof ee});(_=>{function o(S){return S instanceof Error}_.isError=o;function t(S){return S instanceof ee}_.isTaggedError=t;function l(S,A){let y=S._tag,v=A[y];return v(S)}_.match=l;function T(S,A,y){let v=S._tag,a=A[v];return a?a(S):y(S)}_.matchPartial=T})(N||={});var ke=class extends N("TimeoutError",{message:t=>t.operation?`TimeoutError: ${t.operation} timed out after ${t.ms}ms`:`TimeoutError: Operation timed out after ${t.ms}ms`}){},ge=class extends N("RetryExhaustedError",{message:t=>t.operation?`RetryExhaustedError: ${t.operation} failed after ${t.attempts} attempts`:`RetryExhaustedError: Operation failed after ${t.attempts} attempts`}){},Re=class extends N("RateLimitError",{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`:""}`}){},xe=class extends N("CircuitBreakerOpenError",{message:t=>`CircuitBreakerOpenError: Circuit ${t.circuitName} is ${t.state??"OPEN"}${t.retryAfterMs?`, retry after ${Math.ceil(t.retryAfterMs/1e3)}s`:""}`}){},Ce=class extends N("ValidationError",{message:t=>`ValidationError: Invalid ${t.field} - ${t.reason}`}){},he=class extends N("NotFoundError",{message:t=>t.id?`NotFoundError: ${t.resource} with id ${t.id} not found`:`NotFoundError: ${t.resource} not found`}){},be=class extends N("UnauthorizedError",{message:t=>t.reason?`UnauthorizedError: ${t.reason}`:t.action&&t.resource?`UnauthorizedError: Not authorized to ${t.action} ${t.resource}`:"UnauthorizedError: Access denied"}){},Se=class extends N("NetworkError",{message:t=>t.url?`NetworkError: ${t.reason} (${t.url})`:`NetworkError: ${t.reason}`}){},Ae=class extends N("CompensationError",{message:t=>`CompensationError: Failed to compensate step ${t.step}`}){},ne=class extends N("UnexpectedError",{message:t=>`UnexpectedError: ${t.cause instanceof Error?t.cause.message:String(t.cause??"unknown")}`}){};function Be(o){let t=o.trim().match(/^(\d+(?:\.\d+)?)\s*(ms|s|m|h|d)$/i);if(!t)return;let l=parseFloat(t[1]),T=t[2].toLowerCase();return{_tag:"Duration",millis:l*({ms:1,s:1e3,m:6e4,h:36e5,d:864e5}[T]??1)}}function Le(o){return new ne({cause:o})}function F(o){return{ok:!0,value:o}}function K(o,t){let l=t?.cause;return{ok:!1,error:o,...l!==void 0?{cause:l}:{}}}function $e(o){if(o==null)return"unknown";if(typeof o=="string")return o.trim()||"unknown";if(typeof o=="object"){let t=o;if(typeof t._tag=="string"){let l=t._tag.trim();if(l)return l}if(typeof t.tag=="string"){let l=t.tag.trim();if(l)return l}if(typeof t.code=="string"){let l=t.code.trim();if(l)return l}else if(typeof t.code=="number")return String(t.code);if(o instanceof Error&&o.name){let l=o.name.trim();if(l)return l}}return"unknown"}function Ve(o,t){if(!(!t||!o))return t[o]}function He(o){let{intent:t,domain:l,owner:T,tags:_,stateChanges:S,emits:A,calls:y}=o;if(!t&&!l&&!T&&!_?.length&&!S?.length&&!A?.length&&!y?.length)return;let v={};return t&&(v.intent=t),l&&(v.domain=l),T&&(v.owner=T),_?.length&&(v.tags=_),S?.length&&(v.stateChanges=S),A?.length&&(v.emits=A),y?.length&&(v.calls=y),v}function j(o,t,l,T,_){let S=$e(o),A=Ve(S,t),y={tag:S,origin:l};return A!==void 0&&(y.classification=A),T!==void 0&&(y.attempt=T),_!==void 0&&(y.cumulativeDurationMs=_),y}var Y=Symbol.for("step_timeout_marker");function se(o){return typeof o!="object"||o===null?!1:o.type==="STEP_TIMEOUT"?!0:Y in o}function we(o){if(!(typeof o!="object"||o===null)){if(o.type==="STEP_TIMEOUT"){let t=o;return{timeoutMs:t.timeoutMs,stepName:t.stepName,stepKey:t.stepKey,attempt:t.attempt}}if(Y in o)return o[Y]}}var ie=Symbol("early-exit");function fe(o,t){return{[ie]:!0,error:o,meta:t}}function Te(o){return typeof o=="object"&&o!==null&&o[ie]===!0}var Oe=Symbol("mapper-exception");function G(o){return{[Oe]:!0,thrown:o}}function We(o){return typeof o=="object"&&o!==null&&o[Oe]===!0}function de(o,t){let{backoff:l,initialDelay:T,maxDelay:_,jitter:S}=t,A;switch(l){case"fixed":A=T;break;case"linear":A=T*o;break;case"exponential":A=T*Math.pow(2,o-1);break}if(A=Math.min(A,_),S){let y=A*.25*Math.random();A=A+y}return Math.floor(A)}function ye(o){return new Promise(t=>setTimeout(t,o))}var _e=Symbol("timeout"),oe=Symbol("timeout-option");function qe(o){return typeof o=="object"&&o!==null&&o[oe]===!0}async function Ye(o,t,l,T){let _=new AbortController,S=t.onTimeout??"error",A=()=>typeof S=="function"?S({name:l.name,key:l.key,ms:t.ms}):t.error??{type:"STEP_TIMEOUT",stepName:l.name,stepKey:l.key,timeoutMs:t.ms,attempt:l.attempt},y;T?.aborted&&_.abort(T.reason);let v;T&&!T.aborted&&(v=()=>_.abort(T.reason),T.addEventListener("abort",v,{once:!0}));let a=new Promise((P,U)=>{y=setTimeout(()=>{if(S!=="disconnect"&&_.abort(),S==="option"){U({[oe]:!0,ms:t.ms});return}U({[_e]:!0,error:A()})},t.ms)}),D;t.signal?D=Promise.resolve(o(_.signal)):D=Promise.resolve(o());try{return await Promise.race([D,a])}catch(P){if(typeof P=="object"&&P!==null&&P[oe]===!0)throw{[oe]:!0,ms:t.ms};if(typeof P=="object"&&P!==null&&P[_e]===!0){S==="disconnect"&&D.catch(()=>{});let U=P.error;if(typeof U=="object"&&U!==null&&U.type!=="STEP_TIMEOUT"){let X={timeoutMs:t.ms,stepName:l.name,stepKey:l.key,attempt:l.attempt};Y in U?U[Y]=X:Object.defineProperty(U,Y,{value:X,enumerable:!1,writable:!0,configurable:!1})}throw U}throw P}finally{clearTimeout(y),v&&T&&T.removeEventListener("abort",v)}}var Q={backoff:"exponential",initialDelay:100,maxDelay:3e4,jitter:!0,retryOn:()=>!0,onRetry:()=>{}};async function ae(o,t){let{onError:l,onEvent:T,catchUnexpected:_,workflowId:S,workflowName:A,context:y,_workflowSignal:v}=t&&typeof t=="object"?t:{},a=S??crypto.randomUUID(),D=_??Le,P=[],U=0,X=p=>p??`step_${++U}`,c=p=>{let B=p.context!==void 0||y===void 0?p:{...p,context:y},H=A!==void 0&&B.workflowName===void 0?{...B,workflowName:A}:B;if(H.type==="step_success"){let te=H.stepId;for(let re=P.length-1;re>=0;re--){let L=P[re];if(L.type==="race"&&!L.winnerId){L.winnerId=te;break}}}T?.(H,y)},I=fe,J=p=>Te(p),V=(p,B)=>p,Me=p=>typeof p=="function"?!1:!!(p&&typeof p=="object"&&"ok"in p||p&&typeof p=="object"&&"then"in p&&typeof p.then=="function");try{let B=function(s){let E={};for(let[n,r]of Object.entries(s))if(typeof r=="function")E[n]=r;else if(r&&typeof r=="object"&&"fn"in r)E[n]=r.fn;else throw new TypeError(`step.parallel: operation "${n}" must be a function or { fn, errors? } object`);return E},H=function(s,E){let n=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let r=performance.now(),e=!1;P.push({scopeId:n,type:"parallel"});let i=()=>{if(e)return;e=!0;let u=P.findIndex(m=>m.scopeId===n);u!==-1&&P.splice(u,1),c({type:"scope_end",workflowId:a,scopeId:n,ts:Date.now(),durationMs:performance.now()-r})};c({type:"scope_start",workflowId:a,scopeId:n,scopeType:"parallel",name:s,ts:Date.now()});try{let u=await E();if(i(),!u.ok)throw l?.(u.error,s,y),I(u.error,{origin:"result",resultCause:u.cause});return u.value}catch(u){throw i(),u}})()},te=function(s,E){let n=Object.keys(s),r=E.name??`Parallel(${n.join(", ")})`,e=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let i=performance.now(),u=!1;P.push({scopeId:e,type:"parallel"});let m=()=>{if(u)return;u=!0;let d=P.findIndex(w=>w.scopeId===e);d!==-1&&P.splice(d,1),c({type:"scope_end",workflowId:a,scopeId:e,ts:Date.now(),durationMs:performance.now()-i})};c({type:"scope_start",workflowId:a,scopeId:e,scopeType:"parallel",name:r,ts:Date.now()});try{let d=await new Promise(k=>{if(n.length===0){k([]);return}let h=!1,M=n.length,g=new Array(n.length);for(let O=0;O<n.length;O++){let R=n[O],C=O;Promise.resolve(s[R]()).catch(x=>K({type:"PROMISE_REJECTED",cause:x},{cause:{type:"PROMISE_REJECTION",reason:x}})).then(x=>{if(!h){if(!x.ok){h=!0,k([{key:R,result:x}]);return}g[C]={key:R,result:x},M--,M===0&&k(g)}})}});m();let w={};for(let{key:k,result:h}of d){if(!h.ok)throw l?.(h.error,k,y),I(h.error,{origin:"result",resultCause:h.cause});w[k]=h.value}return w}catch(d){throw m(),d}})()};var ze=B,Xe=H,Ge=te;let p=(s,E,n)=>(async()=>{if(typeof s!="string"||s.length===0)throw new Error('[awaitly] step() requires an explicit string ID as the first argument. Example: step("fetchUser", () => fetchUser(id))');let r=n??{},e=He(r),i=s,u=r.key??s,m=r.key??s,{description:d,retry:w,timeout:k}=r,h=X(u),M=T,g=M?performance.now():0,R=Me(E)?()=>E:E,x={attempts:Math.max(1,w?.attempts??1),backoff:w?.backoff??Q.backoff,initialDelay:w?.initialDelay??Q.initialDelay,maxDelay:w?.maxDelay??Q.maxDelay,jitter:w?.jitter??Q.jitter,retryOn:w?.retryOn??Q.retryOn,onRetry:w?.onRetry??Q.onRetry};T&&c({type:"step_start",workflowId:a,stepId:h,stepKey:u,name:i,description:d,ts:Date.now(),...e&&{metadata:e}});let z;for(let b=1;b<=x.attempts;b++){let ve=M?performance.now():0;try{let f;if(k?f=await Ye(R,k,{name:i,key:u,attempt:b},v):f=await R(),f.ok){let q=performance.now()-g;return c({type:"step_success",workflowId:a,stepId:h,stepKey:u,name:i,description:d,ts:Date.now(),durationMs:q,...e&&{metadata:e}}),m&&c({type:"step_complete",workflowId:a,stepKey:m,name:i,description:d,ts:Date.now(),durationMs:q,result:f,...e&&{metadata:e}}),f.value}if(z=f,b<x.attempts&&x.retryOn(f.error,b)){let q=de(b,x);c({type:"step_retry",workflowId:a,stepId:h,stepKey:u,name:i,ts:Date.now(),attempt:b+1,maxAttempts:x.attempts,delayMs:q,error:f.error,...e&&{metadata:e},diagnostics:j(f.error,r.errorMeta,"result",b,performance.now()-g)}),x.onRetry(f.error,b,q),await ye(q);continue}x.attempts>1&&c({type:"step_retries_exhausted",workflowId:a,stepId:h,stepKey:u,name:i,ts:Date.now(),durationMs:performance.now()-g,attempts:b,lastError:f.error,...e&&{metadata:e},diagnostics:j(f.error,r.errorMeta,"result",b,performance.now()-g)});break}catch(f){let q=performance.now()-ve;if(qe(f)){let $=f.ms;c({type:"step_timeout",workflowId:a,stepId:h,stepKey:u,name:i,ts:Date.now(),timeoutMs:$,attempt:b,...e&&{metadata:e},diagnostics:j(f,r.errorMeta,"timeout",b)}),c({type:"step_success",workflowId:a,stepId:h,stepKey:u,name:i,description:d,ts:Date.now(),durationMs:performance.now()-g,...e&&{metadata:e}}),m&&c({type:"step_complete",workflowId:a,stepKey:m,name:i,description:d,ts:Date.now(),durationMs:performance.now()-g,result:F(void 0),...e&&{metadata:e}});return}if(J(f))throw c({type:"step_aborted",workflowId:a,stepId:h,stepKey:u,name:i,description:d,ts:Date.now(),durationMs:q,...e&&{metadata:e}}),f;if(se(f)){let $=we(f),Ie=k?.ms??$?.timeoutMs??0;if(c({type:"step_timeout",workflowId:a,stepId:h,stepKey:u,name:i,ts:Date.now(),timeoutMs:Ie,attempt:b,...e&&{metadata:e},diagnostics:j(f,r.errorMeta,"timeout",b)}),b<x.attempts&&x.retryOn(f,b)){let Ee=de(b,x);c({type:"step_retry",workflowId:a,stepId:h,stepKey:u,name:i,ts:Date.now(),attempt:b+1,maxAttempts:x.attempts,delayMs:Ee,error:f,...e&&{metadata:e},diagnostics:j(f,r.errorMeta,"timeout",b,performance.now()-g)}),x.onRetry(f,b,Ee),await ye(Ee);continue}x.attempts>1&&c({type:"step_retries_exhausted",workflowId:a,stepId:h,stepKey:u,name:i,ts:Date.now(),durationMs:performance.now()-g,attempts:b,lastError:f,...e&&{metadata:e},diagnostics:j(f,r.errorMeta,"timeout",b,performance.now()-g)});let pe=performance.now()-g;throw c({type:"step_error",workflowId:a,stepId:h,stepKey:u,name:i,description:d,ts:Date.now(),durationMs:pe,error:f,...e&&{metadata:e},diagnostics:j(f,r.errorMeta,"timeout",b,pe)}),m&&c({type:"step_complete",workflowId:a,stepKey:m,name:i,description:d,ts:Date.now(),durationMs:pe,result:K(f,{cause:f}),meta:{origin:"throw",thrown:f},...e&&{metadata:e}}),l?.(f,i,y),I(f,{origin:"throw",thrown:f})}if(b<x.attempts&&x.retryOn(f,b)){let $=de(b,x);c({type:"step_retry",workflowId:a,stepId:h,stepKey:u,name:i,ts:Date.now(),attempt:b+1,maxAttempts:x.attempts,delayMs:$,error:f,...e&&{metadata:e},diagnostics:j(f,r.errorMeta,"throw",b,performance.now()-g)}),x.onRetry(f,b,$),await ye($);continue}x.attempts>1&&!se(f)&&c({type:"step_retries_exhausted",workflowId:a,stepId:h,stepKey:u,name:i,ts:Date.now(),durationMs:performance.now()-g,attempts:b,lastError:f,...e&&{metadata:e},diagnostics:j(f,r.errorMeta,"throw",b,performance.now()-g)});let le=performance.now()-g,Z;try{Z=D(f)}catch($){throw G($)}throw c({type:"step_error",workflowId:a,stepId:h,stepKey:u,name:i,description:d,ts:Date.now(),durationMs:le,error:Z,...e&&{metadata:e},diagnostics:j(f,r.errorMeta,"throw",b,le)}),m&&c({type:"step_complete",workflowId:a,stepKey:m,name:i,description:d,ts:Date.now(),durationMs:le,result:K(Z,{cause:f}),meta:{origin:"throw",thrown:f},...e&&{metadata:e}}),l?.(Z,i,y),I(Z,{origin:"throw",thrown:f})}}let W=z,ue=performance.now()-g,ce=V(W.error,{origin:"result",resultCause:W.cause});throw c({type:"step_error",workflowId:a,stepId:h,stepKey:u,name:i,description:d,ts:Date.now(),durationMs:ue,error:ce,...e&&{metadata:e},diagnostics:j(W.error,r.errorMeta,"result",x.attempts,ue)}),m&&c({type:"step_complete",workflowId:a,stepKey:m,name:i,description:d,ts:Date.now(),durationMs:ue,result:W,meta:{origin:"result",resultCause:W.cause},...e&&{metadata:e}}),l?.(ce,i,y),I(ce,{origin:"result",resultCause:W.cause})})();p.try=(s,E,n)=>{if(typeof s!="string"||s.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 r=n.key??s,e=s,i=s,u="error"in n?()=>n.error:n.onError,m=T;return(async()=>{let d=m?performance.now():0;T&&c({type:"step_start",workflowId:a,stepId:i,stepKey:r,name:e,ts:Date.now()});try{let w=await E(),k=performance.now()-d;return c({type:"step_success",workflowId:a,stepId:i,stepKey:r,name:e,ts:Date.now(),durationMs:k}),r&&c({type:"step_complete",workflowId:a,stepKey:r,name:e,ts:Date.now(),durationMs:k,result:F(w)}),w}catch(w){let k=u(w),h=performance.now()-d,M=V(k,{origin:"throw",thrown:w});throw c({type:"step_error",workflowId:a,stepId:i,stepKey:r,name:e,ts:Date.now(),durationMs:h,error:M}),r&&c({type:"step_complete",workflowId:a,stepKey:r,name:e,ts:Date.now(),durationMs:h,result:K(k,{cause:w}),meta:{origin:"throw",thrown:w}}),l?.(M,e,y),I(M,{origin:"throw",thrown:w})}})()},p.fromResult=(s,E,n)=>{if(typeof s!="string"||s.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 r=n.key??s,e=s,i=s,u="error"in n?()=>n.error:n.onError,m=T;return(async()=>{let d=m?performance.now():0;T&&c({type:"step_start",workflowId:a,stepId:i,stepKey:r,name:e,ts:Date.now()});let w=await E();if(w.ok){let k=performance.now()-d;return c({type:"step_success",workflowId:a,stepId:i,stepKey:r,name:e,ts:Date.now(),durationMs:k}),r&&c({type:"step_complete",workflowId:a,stepKey:r,name:e,ts:Date.now(),durationMs:k,result:F(w.value)}),w.value}else{let k=u(w.error),h=performance.now()-d,M=V(k,{origin:"result",resultCause:w.error});throw c({type:"step_error",workflowId:a,stepId:i,stepKey:r,name:e,ts:Date.now(),durationMs:h,error:M}),r&&c({type:"step_complete",workflowId:a,stepKey:r,name:e,ts:Date.now(),durationMs:h,result:K(k,{cause:w.error}),meta:{origin:"result",resultCause:w.error}}),l?.(M,e,y),I(M,{origin:"result",resultCause:w.error})}})()},p.fromNullable=(s,E,n,r)=>{if(typeof s!="string"||s.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 p(s,async()=>{let e=await E();return e!=null?F(e):K(n())},r)},p.retry=(s,E,n)=>{if(typeof s!="string"||s.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 p(s,E,{key:n.key??s,retry:{attempts:n.attempts,backoff:n.backoff,initialDelay:n.initialDelay,maxDelay:n.maxDelay,jitter:n.jitter,retryOn:n.retryOn,onRetry:n.onRetry},timeout:n.timeout})},p.withTimeout=(s,E,n)=>{if(typeof s!="string"||s.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 p(s,E,{key:n.key??s,timeout:n})},p.sleep=(s,E,n)=>{if(typeof s!="string"||s.length===0)throw new Error('[awaitly] step.sleep() requires an explicit string ID as the first argument. Example: step.sleep("delay", "5s")');let r=typeof E=="string"?Be(E):E;if(!r)throw new Error(`step.sleep: invalid duration '${E}'`);let e=r.millis,i=n?.signal;return p(s,async()=>{if(v?.aborted||i?.aborted){let u=new Error("Sleep aborted");throw u.name="AbortError",u}return new Promise((u,m)=>{let d={timeoutId:void 0},w=()=>{d.timeoutId&&clearTimeout(d.timeoutId);let k=new Error("Sleep aborted");k.name="AbortError",m(k)};v?.addEventListener("abort",w,{once:!0}),i?.addEventListener("abort",w,{once:!0}),d.timeoutId=setTimeout(()=>{v?.removeEventListener("abort",w),i?.removeEventListener("abort",w),u(F(void 0))},e)})},{key:n?.key??s,description:n?.description})},p.parallel=((...s)=>{if(typeof s[0]!="string")throw new TypeError("step.parallel(name, ...): first argument must be a string (step name). Example: step.parallel('Fetch data', { user: () => fetchUser(), posts: () => fetchPosts() })");let E=s[0],n=s[1];if(typeof n=="function")return H(E,n);if(n&&typeof n=="object"&&!Array.isArray(n)){let e=B(n);return te(e,{name:E})}throw new TypeError("step.parallel(name, ...): second argument must be a function (array form) or an object of operations (object form).")}),p.race=(s,E)=>{let n=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let r=performance.now(),e=!1,i={scopeId:n,type:"race",winnerId:void 0};P.push(i);let u=()=>{if(e)return;e=!0;let m=P.findIndex(d=>d.scopeId===n);m!==-1&&P.splice(m,1),c({type:"scope_end",workflowId:a,scopeId:n,ts:Date.now(),durationMs:performance.now()-r,winnerId:i.winnerId})};c({type:"scope_start",workflowId:a,scopeId:n,scopeType:"race",name:s,ts:Date.now()});try{let m=await E();if(u(),!m.ok)throw l?.(m.error,s,y),I(m.error,{origin:"result",resultCause:m.cause});return m.value}catch(m){throw u(),m}})()},p.allSettled=(s,E)=>{let n=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let r=performance.now(),e=!1;P.push({scopeId:n,type:"allSettled"});let i=()=>{if(e)return;e=!0;let u=P.findIndex(m=>m.scopeId===n);u!==-1&&P.splice(u,1),c({type:"scope_end",workflowId:a,scopeId:n,ts:Date.now(),durationMs:performance.now()-r})};c({type:"scope_start",workflowId:a,scopeId:n,scopeType:"allSettled",name:s,ts:Date.now()});try{let u=await E();if(i(),!u.ok)throw l?.(u.error,s,y),I(u.error,{origin:"result",resultCause:u.cause});return u.value}catch(u){throw i(),u}})()},p.if=(s,E,n)=>n(),p.label=p.if,p.branch=async(s,E)=>{let{condition:n,then:r,else:e}=E;if(n())return await r();if(e)return await e()},p.arm=(s,E)=>({fn:s,errors:E}),p.forEach=async(s,E,n)=>{let r=[],e=n.maxIterations,i=0,u="run"in n,m=Symbol.asyncIterator in E?E:(async function*(){yield*E})();for await(let d of m){if(e!==void 0&&i>=e)break;let w;u?w=await n.run(d,i):w=await n.item.handler(d,i,p),r.push(w),i++}return r},p.item=s=>({__forEachItemHandler:!0,handler:s}),p.dep=(s,E)=>E,p.run=(s,E,n)=>p(s,()=>E,n),p.workflow=(s,E,n)=>p(s,E,n),p.andThen=(s,E,n,r)=>p(s,()=>n(E),r),p.match=async(s,E,n,r)=>p(s,async()=>{let e=await E;return e.ok?F(await n.ok(e.value)):F(await n.err(e.error,e.cause))},r),p.all=p.parallel,p.map=async(s,E,n,r)=>{let e=r?.concurrency??E.length;return p(s,()=>e>=E.length?Pe(E.map((i,u)=>n(i,u))):(async()=>{let i=[];for(let u=0;u<E.length;u+=e){let m=E.slice(u,u+e),d=await Pe(m.map((w,k)=>n(w,u+k)));if(!d.ok)return d;i.push(...d.value)}return F(i)})(),{key:r?.key})},p.withFallback=(s,E,n)=>{if(typeof s!="string"||s.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 r=n.key??s,e=s,i=X(r),u=T;return(async()=>{let m=u?performance.now():0;T&&c({type:"step_start",workflowId:a,stepId:i,stepKey:r,name:e,ts:Date.now()});let d;try{d=await E()}catch(g){if(J(g))throw c({type:"step_aborted",workflowId:a,stepId:i,stepKey:r,name:e,ts:Date.now(),durationMs:performance.now()-m}),g;let O;try{O=D(g)}catch(C){throw G(C)}if(n.on!==void 0&&n.on!==O){let C=performance.now()-m;throw c({type:"step_error",workflowId:a,stepId:i,stepKey:r,name:e,ts:Date.now(),durationMs:C,error:O}),r&&c({type:"step_complete",workflowId:a,stepKey:r,name:e,ts:Date.now(),durationMs:C,result:K(O,{cause:g}),meta:{origin:"throw",thrown:g}}),l?.(O,e,y),I(O,{origin:"throw",thrown:g})}let R;try{R=await n.fallback()}catch(C){if(J(C))throw c({type:"step_aborted",workflowId:a,stepId:i,stepKey:r,name:e,ts:Date.now(),durationMs:performance.now()-m}),C;let x;try{x=D(C)}catch(W){throw G(W)}let z=performance.now()-m;throw c({type:"step_error",workflowId:a,stepId:i,stepKey:r,name:e,ts:Date.now(),durationMs:z,error:x}),r&&c({type:"step_complete",workflowId:a,stepKey:r,name:e,ts:Date.now(),durationMs:z,result:K(x,{cause:C}),meta:{origin:"throw",thrown:C}}),l?.(x,e,y),I(x,{origin:"throw",thrown:C})}if(R.ok){let C=performance.now()-m;return c({type:"step_success",workflowId:a,stepId:i,stepKey:r,name:e,ts:Date.now(),durationMs:C}),r&&c({type:"step_complete",workflowId:a,stepKey:r,name:e,ts:Date.now(),durationMs:C,result:R,meta:{origin:"fallback",fallbackUsed:!0,fallbackReason:String(O)}}),R.value}else{let C=performance.now()-m,x=V(R.error,{origin:"result",resultCause:R.cause});throw c({type:"step_error",workflowId:a,stepId:i,stepKey:r,name:e,ts:Date.now(),durationMs:C,error:x}),r&&c({type:"step_complete",workflowId:a,stepKey:r,name:e,ts:Date.now(),durationMs:C,result:R,meta:{origin:"result",resultCause:R.cause}}),l?.(x,e,y),I(x,{origin:"result",resultCause:R.cause})}}if(d.ok){let g=performance.now()-m;return c({type:"step_success",workflowId:a,stepId:i,stepKey:r,name:e,ts:Date.now(),durationMs:g}),r&&c({type:"step_complete",workflowId:a,stepKey:r,name:e,ts:Date.now(),durationMs:g,result:d}),d.value}let w=d.error;if(n.on!==void 0&&n.on!==w){let g=performance.now()-m,O=V(w,{origin:"result",resultCause:d.cause});throw c({type:"step_error",workflowId:a,stepId:i,stepKey:r,name:e,ts:Date.now(),durationMs:g,error:O}),r&&c({type:"step_complete",workflowId:a,stepKey:r,name:e,ts:Date.now(),durationMs:g,result:d,meta:{origin:"result",resultCause:d.cause}}),l?.(O,e,y),I(O,{origin:"result",resultCause:d.cause})}let k;try{k=await n.fallback()}catch(g){if(J(g))throw c({type:"step_aborted",workflowId:a,stepId:i,stepKey:r,name:e,ts:Date.now(),durationMs:performance.now()-m}),g;let O;try{O=D(g)}catch(C){throw G(C)}let R=performance.now()-m;throw c({type:"step_error",workflowId:a,stepId:i,stepKey:r,name:e,ts:Date.now(),durationMs:R,error:O}),r&&c({type:"step_complete",workflowId:a,stepKey:r,name:e,ts:Date.now(),durationMs:R,result:K(O,{cause:g}),meta:{origin:"throw",thrown:g}}),l?.(O,e,y),I(O,{origin:"throw",thrown:g})}if(k.ok){let g=performance.now()-m;return c({type:"step_success",workflowId:a,stepId:i,stepKey:r,name:e,ts:Date.now(),durationMs:g}),r&&c({type:"step_complete",workflowId:a,stepKey:r,name:e,ts:Date.now(),durationMs:g,result:k,meta:{origin:"fallback",fallbackUsed:!0,fallbackReason:String(w)}}),k.value}let h=performance.now()-m,M=V(k.error,{origin:"result",resultCause:k.cause});throw c({type:"step_error",workflowId:a,stepId:i,stepKey:r,name:e,ts:Date.now(),durationMs:h,error:M}),r&&c({type:"step_complete",workflowId:a,stepKey:r,name:e,ts:Date.now(),durationMs:h,result:k,meta:{origin:"result",resultCause:k.cause}}),l?.(M,e,y),I(M,{origin:"result",resultCause:k.cause})})()},p.withResource=(s,E)=>{if(typeof s!="string"||s.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 n=s,r=s,e=X(n),i=T;return(async()=>{let u=i?performance.now():0;T&&c({type:"step_start",workflowId:a,stepId:e,stepKey:n,name:r,ts:Date.now()});let m;try{m=await E.acquire()}catch(R){if(J(R))throw c({type:"step_aborted",workflowId:a,stepId:e,stepKey:n,name:r,ts:Date.now(),durationMs:performance.now()-u}),R;let C;try{C=D(R)}catch(z){throw G(z)}let x=performance.now()-u;throw c({type:"step_error",workflowId:a,stepId:e,stepKey:n,name:r,ts:Date.now(),durationMs:x,error:C}),n&&c({type:"step_complete",workflowId:a,stepKey:n,name:r,ts:Date.now(),durationMs:x,result:K(C,{cause:R}),meta:{origin:"throw",thrown:R}}),l?.(C,r,y),I(C,{origin:"throw",thrown:R})}if(!m.ok){let R=performance.now()-u,C=V(m.error,{origin:"result",resultCause:m.cause});throw c({type:"step_error",workflowId:a,stepId:e,stepKey:n,name:r,ts:Date.now(),durationMs:R,error:C}),n&&c({type:"step_complete",workflowId:a,stepKey:n,name:r,ts:Date.now(),durationMs:R,result:m,meta:{origin:"result",resultCause:m.cause}}),l?.(C,r,y),I(C,{origin:"result",resultCause:m.cause})}let d=m.value,w,k,h=!1;try{w=await E.use(d)}catch(R){if(J(R)){try{await E.release(d)}catch(C){console.warn(`[awaitly] step.withResource("${s}"): release threw after earlyExit:`,C)}throw R}k=R,h=!0}try{await E.release(d)}catch(R){console.warn(`[awaitly] step.withResource("${s}"): release threw:`,R)}if(h){let R;try{R=D(k)}catch(x){throw G(x)}let C=performance.now()-u;throw c({type:"step_error",workflowId:a,stepId:e,stepKey:n,name:r,ts:Date.now(),durationMs:C,error:R}),n&&c({type:"step_complete",workflowId:a,stepKey:n,name:r,ts:Date.now(),durationMs:C,result:K(R,{cause:k}),meta:{origin:"throw",thrown:k}}),l?.(R,r,y),I(R,{origin:"throw",thrown:k})}let M=w;if(M.ok){let R=performance.now()-u;return c({type:"step_success",workflowId:a,stepId:e,stepKey:n,name:r,ts:Date.now(),durationMs:R}),n&&c({type:"step_complete",workflowId:a,stepKey:n,name:r,ts:Date.now(),durationMs:R,result:M}),M.value}let g=performance.now()-u,O=V(M.error,{origin:"result",resultCause:M.cause});throw c({type:"step_error",workflowId:a,stepId:e,stepKey:n,name:r,ts:Date.now(),durationMs:g,error:O}),n&&c({type:"step_complete",workflowId:a,stepKey:n,name:r,ts:Date.now(),durationMs:g,result:M,meta:{origin:"result",resultCause:M.cause}}),l?.(O,r,y),I(O,{origin:"result",resultCause:M.cause})})()};let L=await o({step:p});if(process.env.NODE_ENV!=="production"&&L!==null&&typeof L=="object"&&"ok"in L&&typeof L.ok=="boolean"){let s=L;(s.ok===!0&&"value"in s||s.ok===!1&&"error"in s)&&console.warn(`awaitly: Workflow executor returned a Result-like object. Return raw values, not ok() or err().
2
2
 
3
3
  Incorrect: return ok({ data });
4
4
  Correct: return { data };
5
5
 
6
- See: https://jagreehal.github.io/awaitly/guides/troubleshooting/#returning-ok-from-workflow-executor-double-wrapping`)}return j(L)}catch(l){if(De(l))throw l.thrown;if($(l)){let W=l.meta.origin==="throw"?l.meta.thrown:l.meta.origin==="result"?l.meta.resultCause:void 0;return D(l.error,{cause:W})}let F=U(l);return m?.(F,"unexpected",T),D(F,{cause:l})}}re.strict=(o,c)=>re(o,c);async function fe(o){return o.length===0?j([]):new Promise(c=>{let m=!1,C=o.length,P=new Array(o.length);for(let M=0;M<o.length;M++){let O=M;Promise.resolve(o[O]).catch(T=>D({type:"PROMISE_REJECTED",cause:T},{cause:{type:"PROMISE_REJECTION",reason:T}})).then(T=>{if(!m){if(!T.ok){m=!0,c(T);return}P[O]=T.value,C--,C===0&&c(j(P))}})}})}0&&(module.exports={EARLY_EXIT_SYMBOL,STEP_TIMEOUT_MARKER,createEarlyExit,getStepTimeoutMeta,isEarlyExit,isStepTimeoutError,run});
6
+ See: https://jagreehal.github.io/awaitly/guides/troubleshooting/#returning-ok-from-workflow-executor-double-wrapping`)}return F(L)}catch(p){if(We(p))throw p.thrown;if(J(p)){let H=p.meta.origin==="throw"?p.meta.thrown:p.meta.origin==="result"?p.meta.resultCause:void 0;return K(p.error,{cause:H})}let B=D(p);return l?.(B,"unexpected",y),K(B,{cause:p})}}ae.strict=(o,t)=>ae(o,t);async function Pe(o){return o.length===0?F([]):new Promise(t=>{let l=!1,T=o.length,_=new Array(o.length);for(let S=0;S<o.length;S++){let A=S;Promise.resolve(o[A]).catch(y=>K({type:"PROMISE_REJECTED",cause:y},{cause:{type:"PROMISE_REJECTION",reason:y}})).then(y=>{if(!l){if(!y.ok){l=!0,t(y);return}_[A]=y.value,T--,T===0&&t(F(_))}})}})}0&&(module.exports={EARLY_EXIT_SYMBOL,STEP_TIMEOUT_MARKER,createEarlyExit,getStepTimeoutMeta,isEarlyExit,isStepTimeoutError,run});
7
7
  //# sourceMappingURL=run.cjs.map