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
@@ -1,4 +1,6 @@
1
- import { c as AsyncResult } from './run-entry-C1uFytM6.cjs';
1
+ import { c as AsyncResult } from './run-entry-yQu63Yj9.cjs';
2
+ import './errors-entry-CMH73Eym.cjs';
3
+ import './tagged-error.cjs';
2
4
 
3
5
  /**
4
6
  * awaitly/adapters
@@ -1,4 +1,6 @@
1
- import { c as AsyncResult } from './run-entry-C1uFytM6.js';
1
+ import { c as AsyncResult } from './run-entry-rw7zll_G.js';
2
+ import './errors-entry-DOt5UUl4.js';
3
+ import './tagged-error.js';
2
4
 
3
5
  /**
4
6
  * awaitly/adapters
package/dist/adapters.js CHANGED
@@ -1,7 +1,7 @@
1
- function Re(r){let l=r.trim().match(/^(\d+(?:\.\d+)?)\s*(ms|s|m|h|d)$/i);if(!l)return;let E=parseFloat(l[1]),d=l[2].toLowerCase();return{_tag:"Duration",millis:E*({ms:1,s:1e3,m:6e4,h:36e5,d:864e5}[d]??1)}}var ge="UNEXPECTED_ERROR";function Ce(r){return ge}function K(r){return{ok:!0,value:r}}function D(r,l){let E=l?.cause;return{ok:!1,error:r,...E!==void 0?{cause:E}:{}}}function xe(r){if(r==null)return"unknown";if(typeof r=="string")return r.trim()||"unknown";if(typeof r=="object"){let l=r;if(typeof l._tag=="string"){let E=l._tag.trim();if(E)return E}if(typeof l.tag=="string"){let E=l.tag.trim();if(E)return E}if(typeof l.code=="string"){let E=l.code.trim();if(E)return E}else if(typeof l.code=="number")return String(l.code);if(r instanceof Error&&r.name){let E=r.name.trim();if(E)return E}}return"unknown"}function he(r,l){if(!(!l||!r))return l[r]}function be(r){let{intent:l,domain:E,owner:d,tags:v,stateChanges:A,emits:_,calls:y}=r;if(!l&&!E&&!d&&!v?.length&&!A?.length&&!_?.length&&!y?.length)return;let I={};return l&&(I.intent=l),E&&(I.domain=E),d&&(I.owner=d),v?.length&&(I.tags=v),A?.length&&(I.stateChanges=A),_?.length&&(I.emits=_),y?.length&&(I.calls=y),I}function F(r,l,E,d,v){let A=xe(r),_=he(A,l),y={tag:A,origin:E};return _!==void 0&&(y.classification=_),d!==void 0&&(y.attempt=d),v!==void 0&&(y.cumulativeDurationMs=v),y}var z=Symbol.for("step_timeout_marker");function pe(r){return typeof r!="object"||r===null?!1:r.type==="STEP_TIMEOUT"?!0:z in r}function Se(r){if(!(typeof r!="object"||r===null)){if(r.type==="STEP_TIMEOUT"){let l=r;return{timeoutMs:l.timeoutMs,stepName:l.stepName,stepKey:l.stepKey,attempt:l.attempt}}if(z in r)return r[z]}}var de=Symbol("early-exit");function Ae(r,l){return{[de]:!0,error:r,meta:l}}function ve(r){return typeof r=="object"&&r!==null&&r[de]===!0}var ye=Symbol("mapper-exception");function H(r){return{[ye]:!0,thrown:r}}function _e(r){return typeof r=="object"&&r!==null&&r[ye]===!0}function ie(r,l){let{backoff:E,initialDelay:d,maxDelay:v,jitter:A}=l,_;switch(E){case"fixed":_=d;break;case"linear":_=d*r;break;case"exponential":_=d*Math.pow(2,r-1);break}if(_=Math.min(_,v),A){let y=_*.25*Math.random();_=_+y}return Math.floor(_)}function ue(r){return new Promise(l=>setTimeout(l,r))}var Ee=Symbol("timeout"),te=Symbol("timeout-option");function Pe(r){return typeof r=="object"&&r!==null&&r[te]===!0}async function Oe(r,l,E,d){let v=new AbortController,A=l.onTimeout??"error",_=()=>typeof A=="function"?A({name:E.name,key:E.key,ms:l.ms}):l.error??{type:"STEP_TIMEOUT",stepName:E.name,stepKey:E.key,timeoutMs:l.ms,attempt:E.attempt},y;d?.aborted&&v.abort(d.reason);let I;d&&!d.aborted&&(I=()=>v.abort(d.reason),d.addEventListener("abort",I,{once:!0}));let s=new Promise((x,M)=>{y=setTimeout(()=>{if(A!=="disconnect"&&v.abort(),A==="option"){M({[te]:!0,ms:l.ms});return}M({[Ee]:!0,error:_()})},l.ms)}),N;l.signal?N=Promise.resolve(r(v.signal)):N=Promise.resolve(r());try{return await Promise.race([N,s])}catch(x){if(typeof x=="object"&&x!==null&&x[te]===!0)throw{[te]:!0,ms:l.ms};if(typeof x=="object"&&x!==null&&x[Ee]===!0){A==="disconnect"&&N.catch(()=>{});let M=x.error;if(typeof M=="object"&&M!==null&&M.type!=="STEP_TIMEOUT"){let B={timeoutMs:l.ms,stepName:E.name,stepKey:E.key,attempt:E.attempt};z in M?M[z]=B:Object.defineProperty(M,z,{value:B,enumerable:!1,writable:!0,configurable:!1})}throw M}throw x}finally{clearTimeout(y),I&&d&&d.removeEventListener("abort",I)}}var G={backoff:"exponential",initialDelay:100,maxDelay:3e4,jitter:!0,retryOn:()=>!0,onRetry:()=>{}};async function me(r,l){let{onError:E,onEvent:d,catchUnexpected:v,workflowId:A,workflowName:_,context:y,_workflowSignal:I}=l&&typeof l=="object"?l:{},s=A??crypto.randomUUID(),N=v??Ce,x=[],M=0,B=c=>c??`step_${++M}`,u=c=>{let j=c.context!==void 0||y===void 0?c:{...c,context:y},q=_!==void 0&&j.workflowName===void 0?{...j,workflowName:_}:j;if(q.type==="step_success"){let Z=q.stepId;for(let ee=x.length-1;ee>=0;ee--){let L=x[ee];if(L.type==="race"&&!L.winnerId){L.winnerId=Z;break}}}d?.(q,y)},U=Ae,$=c=>ve(c),W=(c,j)=>c,fe=c=>typeof c=="function"?!1:!!(c&&typeof c=="object"&&"ok"in c||c&&typeof c=="object"&&"then"in c&&typeof c.then=="function");try{let j=function(o){let p={};for(let[n,t]of Object.entries(o))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},q=function(o,p){let n=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let t=performance.now(),e=!1;x.push({scopeId:n,type:"parallel"});let a=()=>{if(e)return;e=!0;let i=x.findIndex(m=>m.scopeId===n);i!==-1&&x.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:o,ts:Date.now()});try{let i=await p();if(a(),!i.ok)throw E?.(i.error,o,y),U(i.error,{origin:"result",resultCause:i.cause});return i.value}catch(i){throw a(),i}})()},Z=function(o,p){let n=Object.keys(o),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;x.push({scopeId:e,type:"parallel"});let m=()=>{if(i)return;i=!0;let w=x.findIndex(f=>f.scopeId===e);w!==-1&&x.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(k=>{if(n.length===0){k([]);return}let b=!1,O=n.length,R=new Array(n.length);for(let P=0;P<n.length;P++){let g=n[P],h=P;Promise.resolve(o[g]()).catch(C=>D({type:"PROMISE_REJECTED",cause:C},{cause:{type:"PROMISE_REJECTION",reason:C}})).then(C=>{if(!b){if(!C.ok){b=!0,k([{key:g,result:C}]);return}R[h]={key:g,result:C},O--,O===0&&k(R)}})}});m();let f={};for(let{key:k,result:b}of w){if(!b.ok)throw E?.(b.error,k,y),U(b.error,{origin:"result",resultCause:b.cause});f[k]=b.value}return f}catch(w){throw m(),w}})()};var Ke=j,Fe=q,je=Z;let c=(o,p,n)=>(async()=>{if(typeof o!="string"||o.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=be(t),a=o,i=t.key??o,m=t.key??o,{description:w,retry:f,timeout:k}=t,b=B(i),O=d,R=O?performance.now():0,g=fe(p)?()=>p:p,C={attempts:Math.max(1,f?.attempts??1),backoff:f?.backoff??G.backoff,initialDelay:f?.initialDelay??G.initialDelay,maxDelay:f?.maxDelay??G.maxDelay,jitter:f?.jitter??G.jitter,retryOn:f?.retryOn??G.retryOn,onRetry:f?.onRetry??G.onRetry};d&&u({type:"step_start",workflowId:s,stepId:b,stepKey:i,name:a,description:w,ts:Date.now(),...e&&{metadata:e}});let J;for(let S=1;S<=C.attempts;S++){let Te=O?performance.now():0;try{let T;if(k?T=await Oe(g,k,{name:a,key:i,attempt:S},I):T=await g(),T.ok){let Y=performance.now()-R;return u({type:"step_success",workflowId:s,stepId:b,stepKey:i,name:a,description:w,ts:Date.now(),durationMs:Y,...e&&{metadata:e}}),m&&u({type:"step_complete",workflowId:s,stepKey:m,name:a,description:w,ts:Date.now(),durationMs:Y,result:T,...e&&{metadata:e}}),T.value}if(J=T,S<C.attempts&&C.retryOn(T.error,S)){let Y=ie(S,C);u({type:"step_retry",workflowId:s,stepId:b,stepKey:i,name:a,ts:Date.now(),attempt:S+1,maxAttempts:C.attempts,delayMs:Y,error:T.error,...e&&{metadata:e},diagnostics:F(T.error,t.errorMeta,"result",S,performance.now()-R)}),C.onRetry(T.error,S,Y),await ue(Y);continue}C.attempts>1&&u({type:"step_retries_exhausted",workflowId:s,stepId:b,stepKey:i,name:a,ts:Date.now(),durationMs:performance.now()-R,attempts:S,lastError:T.error,...e&&{metadata:e},diagnostics:F(T.error,t.errorMeta,"result",S,performance.now()-R)});break}catch(T){let Y=performance.now()-Te;if(Pe(T)){let V=T.ms;u({type:"step_timeout",workflowId:s,stepId:b,stepKey:i,name:a,ts:Date.now(),timeoutMs:V,attempt:S,...e&&{metadata:e},diagnostics:F(T,t.errorMeta,"timeout",S)}),u({type:"step_success",workflowId:s,stepId:b,stepKey:i,name:a,description:w,ts:Date.now(),durationMs:performance.now()-R,...e&&{metadata:e}}),m&&u({type:"step_complete",workflowId:s,stepKey:m,name:a,description:w,ts:Date.now(),durationMs:performance.now()-R,result:K(void 0),...e&&{metadata:e}});return}if($(T))throw u({type:"step_aborted",workflowId:s,stepId:b,stepKey:i,name:a,description:w,ts:Date.now(),durationMs:Y,...e&&{metadata:e}}),T;if(pe(T)){let V=Se(T),ke=k?.ms??V?.timeoutMs??0;if(u({type:"step_timeout",workflowId:s,stepId:b,stepKey:i,name:a,ts:Date.now(),timeoutMs:ke,attempt:S,...e&&{metadata:e},diagnostics:F(T,t.errorMeta,"timeout",S)}),S<C.attempts&&C.retryOn(T,S)){let ae=ie(S,C);u({type:"step_retry",workflowId:s,stepId:b,stepKey:i,name:a,ts:Date.now(),attempt:S+1,maxAttempts:C.attempts,delayMs:ae,error:T,...e&&{metadata:e},diagnostics:F(T,t.errorMeta,"timeout",S,performance.now()-R)}),C.onRetry(T,S,ae),await ue(ae);continue}C.attempts>1&&u({type:"step_retries_exhausted",workflowId:s,stepId:b,stepKey:i,name:a,ts:Date.now(),durationMs:performance.now()-R,attempts:S,lastError:T,...e&&{metadata:e},diagnostics:F(T,t.errorMeta,"timeout",S,performance.now()-R)});let se=performance.now()-R;throw u({type:"step_error",workflowId:s,stepId:b,stepKey:i,name:a,description:w,ts:Date.now(),durationMs:se,error:T,...e&&{metadata:e},diagnostics:F(T,t.errorMeta,"timeout",S,se)}),m&&u({type:"step_complete",workflowId:s,stepKey:m,name:a,description:w,ts:Date.now(),durationMs:se,result:D(T,{cause:T}),meta:{origin:"throw",thrown:T},...e&&{metadata:e}}),E?.(T,a,y),U(T,{origin:"throw",thrown:T})}if(S<C.attempts&&C.retryOn(T,S)){let V=ie(S,C);u({type:"step_retry",workflowId:s,stepId:b,stepKey:i,name:a,ts:Date.now(),attempt:S+1,maxAttempts:C.attempts,delayMs:V,error:T,...e&&{metadata:e},diagnostics:F(T,t.errorMeta,"throw",S,performance.now()-R)}),C.onRetry(T,S,V),await ue(V);continue}C.attempts>1&&!pe(T)&&u({type:"step_retries_exhausted",workflowId:s,stepId:b,stepKey:i,name:a,ts:Date.now(),durationMs:performance.now()-R,attempts:S,lastError:T,...e&&{metadata:e},diagnostics:F(T,t.errorMeta,"throw",S,performance.now()-R)});let oe=performance.now()-R,Q;try{Q=N(T)}catch(V){throw H(V)}throw u({type:"step_error",workflowId:s,stepId:b,stepKey:i,name:a,description:w,ts:Date.now(),durationMs:oe,error:Q,...e&&{metadata:e},diagnostics:F(T,t.errorMeta,"throw",S,oe)}),m&&u({type:"step_complete",workflowId:s,stepKey:m,name:a,description:w,ts:Date.now(),durationMs:oe,result:D(Q,{cause:T}),meta:{origin:"throw",thrown:T},...e&&{metadata:e}}),E?.(Q,a,y),U(Q,{origin:"throw",thrown:T})}}let X=J,ne=performance.now()-R,re=W(X.error,{origin:"result",resultCause:X.cause});throw u({type:"step_error",workflowId:s,stepId:b,stepKey:i,name:a,description:w,ts:Date.now(),durationMs:ne,error:re,...e&&{metadata:e},diagnostics:F(X.error,t.errorMeta,"result",C.attempts,ne)}),m&&u({type:"step_complete",workflowId:s,stepKey:m,name:a,description:w,ts:Date.now(),durationMs:ne,result:X,meta:{origin:"result",resultCause:X.cause},...e&&{metadata:e}}),E?.(re,a,y),U(re,{origin:"result",resultCause:X.cause})})();c.try=(o,p,n)=>{if(typeof o!="string"||o.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??o,e=o,a=o,i="error"in n?()=>n.error:n.onError,m=d;return(async()=>{let w=m?performance.now():0;d&&u({type:"step_start",workflowId:s,stepId:a,stepKey:t,name:e,ts:Date.now()});try{let f=await p(),k=performance.now()-w;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:K(f)}),f}catch(f){let k=i(f),b=performance.now()-w,O=W(k,{origin:"throw",thrown:f});throw u({type:"step_error",workflowId:s,stepId:a,stepKey:t,name:e,ts:Date.now(),durationMs:b,error:O}),t&&u({type:"step_complete",workflowId:s,stepKey:t,name:e,ts:Date.now(),durationMs:b,result:D(k,{cause:f}),meta:{origin:"throw",thrown:f}}),E?.(O,e,y),U(O,{origin:"throw",thrown:f})}})()},c.fromResult=(o,p,n)=>{if(typeof o!="string"||o.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??o,e=o,a=o,i="error"in n?()=>n.error:n.onError,m=d;return(async()=>{let w=m?performance.now():0;d&&u({type:"step_start",workflowId:s,stepId:a,stepKey:t,name:e,ts:Date.now()});let f=await p();if(f.ok){let k=performance.now()-w;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:K(f.value)}),f.value}else{let k=i(f.error),b=performance.now()-w,O=W(k,{origin:"result",resultCause:f.error});throw u({type:"step_error",workflowId:s,stepId:a,stepKey:t,name:e,ts:Date.now(),durationMs:b,error:O}),t&&u({type:"step_complete",workflowId:s,stepKey:t,name:e,ts:Date.now(),durationMs:b,result:D(k,{cause:f.error}),meta:{origin:"result",resultCause:f.error}}),E?.(O,e,y),U(O,{origin:"result",resultCause:f.error})}})()},c.fromNullable=(o,p,n,t)=>{if(typeof o!="string"||o.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 c(o,async()=>{let e=await p();return e!=null?K(e):D(n())},t)},c.retry=(o,p,n)=>{if(typeof o!="string"||o.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 c(o,p,{key:n.key??o,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})},c.withTimeout=(o,p,n)=>{if(typeof o!="string"||o.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 c(o,p,{key:n.key??o,timeout:n})},c.sleep=(o,p,n)=>{if(typeof o!="string"||o.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"?Re(p):p;if(!t)throw new Error(`step.sleep: invalid duration '${p}'`);let e=t.millis,a=n?.signal;return c(o,async()=>{if(I?.aborted||a?.aborted){let i=new Error("Sleep aborted");throw i.name="AbortError",i}return new Promise((i,m)=>{let w={timeoutId:void 0},f=()=>{w.timeoutId&&clearTimeout(w.timeoutId);let k=new Error("Sleep aborted");k.name="AbortError",m(k)};I?.addEventListener("abort",f,{once:!0}),a?.addEventListener("abort",f,{once:!0}),w.timeoutId=setTimeout(()=>{I?.removeEventListener("abort",f),a?.removeEventListener("abort",f),i(K(void 0))},e)})},{key:n?.key??o,description:n?.description})},c.parallel=((...o)=>{if(typeof o[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=o[0],n=o[1];if(typeof n=="function")return q(p,n);if(n&&typeof n=="object"&&!Array.isArray(n)){let e=j(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).")}),c.race=(o,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};x.push(a);let i=()=>{if(e)return;e=!0;let m=x.findIndex(w=>w.scopeId===n);m!==-1&&x.splice(m,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:o,ts:Date.now()});try{let m=await p();if(i(),!m.ok)throw E?.(m.error,o,y),U(m.error,{origin:"result",resultCause:m.cause});return m.value}catch(m){throw i(),m}})()},c.allSettled=(o,p)=>{let n=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let t=performance.now(),e=!1;x.push({scopeId:n,type:"allSettled"});let a=()=>{if(e)return;e=!0;let i=x.findIndex(m=>m.scopeId===n);i!==-1&&x.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:o,ts:Date.now()});try{let i=await p();if(a(),!i.ok)throw E?.(i.error,o,y),U(i.error,{origin:"result",resultCause:i.cause});return i.value}catch(i){throw a(),i}})()},c.if=(o,p,n)=>n(),c.label=c.if,c.branch=async(o,p)=>{let{condition:n,then:t,else:e}=p;if(n())return await t();if(e)return await e()},c.arm=(o,p)=>({fn:o,errors:p}),c.forEach=async(o,p,n)=>{let t=[],e=n.maxIterations,a=0,i="run"in n,m=Symbol.asyncIterator in p?p:(async function*(){yield*p})();for await(let w of m){if(e!==void 0&&a>=e)break;let f;i?f=await n.run(w,a):f=await n.item.handler(w,a,c),t.push(f),a++}return t},c.item=o=>({__forEachItemHandler:!0,handler:o}),c.dep=(o,p)=>p,c.run=(o,p,n)=>c(o,()=>p,n),c.workflow=(o,p,n)=>c(o,p,n),c.andThen=(o,p,n,t)=>c(o,()=>n(p),t),c.match=async(o,p,n,t)=>c(o,async()=>{let e=await p;return e.ok?K(await n.ok(e.value)):K(await n.err(e.error,e.cause))},t),c.all=c.parallel,c.map=async(o,p,n,t)=>{let e=t?.concurrency??p.length;return c(o,()=>e>=p.length?we(p.map((a,i)=>n(a,i))):(async()=>{let a=[];for(let i=0;i<p.length;i+=e){let m=p.slice(i,i+e),w=await we(m.map((f,k)=>n(f,i+k)));if(!w.ok)return w;a.push(...w.value)}return K(a)})(),{key:t?.key})},c.withFallback=(o,p,n)=>{if(typeof o!="string"||o.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??o,e=o,a=B(t),i=d;return(async()=>{let m=i?performance.now():0;d&&u({type:"step_start",workflowId:s,stepId:a,stepKey:t,name:e,ts:Date.now()});let w;try{w=await p()}catch(R){if($(R))throw u({type:"step_aborted",workflowId:s,stepId:a,stepKey:t,name:e,ts:Date.now(),durationMs:performance.now()-m}),R;let P;try{P=N(R)}catch(h){throw H(h)}if(n.on!==void 0&&n.on!==P){let h=performance.now()-m;throw u({type:"step_error",workflowId:s,stepId:a,stepKey:t,name:e,ts:Date.now(),durationMs:h,error:P}),t&&u({type:"step_complete",workflowId:s,stepKey:t,name:e,ts:Date.now(),durationMs:h,result:D(P,{cause:R}),meta:{origin:"throw",thrown:R}}),E?.(P,e,y),U(P,{origin:"throw",thrown:R})}let g;try{g=await n.fallback()}catch(h){if($(h))throw u({type:"step_aborted",workflowId:s,stepId:a,stepKey:t,name:e,ts:Date.now(),durationMs:performance.now()-m}),h;let C;try{C=N(h)}catch(X){throw H(X)}let J=performance.now()-m;throw u({type:"step_error",workflowId:s,stepId:a,stepKey:t,name:e,ts:Date.now(),durationMs:J,error:C}),t&&u({type:"step_complete",workflowId:s,stepKey:t,name:e,ts:Date.now(),durationMs:J,result:D(C,{cause:h}),meta:{origin:"throw",thrown:h}}),E?.(C,e,y),U(C,{origin:"throw",thrown:h})}if(g.ok){let h=performance.now()-m;return u({type:"step_success",workflowId:s,stepId:a,stepKey:t,name:e,ts:Date.now(),durationMs:h}),t&&u({type:"step_complete",workflowId:s,stepKey:t,name:e,ts:Date.now(),durationMs:h,result:g,meta:{origin:"fallback",fallbackUsed:!0,fallbackReason:String(P)}}),g.value}else{let h=performance.now()-m,C=W(g.error,{origin:"result",resultCause:g.cause});throw u({type:"step_error",workflowId:s,stepId:a,stepKey:t,name:e,ts:Date.now(),durationMs:h,error:C}),t&&u({type:"step_complete",workflowId:s,stepKey:t,name:e,ts:Date.now(),durationMs:h,result:g,meta:{origin:"result",resultCause:g.cause}}),E?.(C,e,y),U(C,{origin:"result",resultCause:g.cause})}}if(w.ok){let R=performance.now()-m;return u({type:"step_success",workflowId:s,stepId:a,stepKey:t,name:e,ts:Date.now(),durationMs:R}),t&&u({type:"step_complete",workflowId:s,stepKey:t,name:e,ts:Date.now(),durationMs:R,result:w}),w.value}let f=w.error;if(n.on!==void 0&&n.on!==f){let R=performance.now()-m,P=W(f,{origin:"result",resultCause:w.cause});throw u({type:"step_error",workflowId:s,stepId:a,stepKey:t,name:e,ts:Date.now(),durationMs:R,error:P}),t&&u({type:"step_complete",workflowId:s,stepKey:t,name:e,ts:Date.now(),durationMs:R,result:w,meta:{origin:"result",resultCause:w.cause}}),E?.(P,e,y),U(P,{origin:"result",resultCause:w.cause})}let k;try{k=await n.fallback()}catch(R){if($(R))throw u({type:"step_aborted",workflowId:s,stepId:a,stepKey:t,name:e,ts:Date.now(),durationMs:performance.now()-m}),R;let P;try{P=N(R)}catch(h){throw H(h)}let g=performance.now()-m;throw u({type:"step_error",workflowId:s,stepId:a,stepKey:t,name:e,ts:Date.now(),durationMs:g,error:P}),t&&u({type:"step_complete",workflowId:s,stepKey:t,name:e,ts:Date.now(),durationMs:g,result:D(P,{cause:R}),meta:{origin:"throw",thrown:R}}),E?.(P,e,y),U(P,{origin:"throw",thrown:R})}if(k.ok){let R=performance.now()-m;return u({type:"step_success",workflowId:s,stepId:a,stepKey:t,name:e,ts:Date.now(),durationMs:R}),t&&u({type:"step_complete",workflowId:s,stepKey:t,name:e,ts:Date.now(),durationMs:R,result:k,meta:{origin:"fallback",fallbackUsed:!0,fallbackReason:String(f)}}),k.value}let b=performance.now()-m,O=W(k.error,{origin:"result",resultCause:k.cause});throw u({type:"step_error",workflowId:s,stepId:a,stepKey:t,name:e,ts:Date.now(),durationMs:b,error:O}),t&&u({type:"step_complete",workflowId:s,stepKey:t,name:e,ts:Date.now(),durationMs:b,result:k,meta:{origin:"result",resultCause:k.cause}}),E?.(O,e,y),U(O,{origin:"result",resultCause:k.cause})})()},c.withResource=(o,p)=>{if(typeof o!="string"||o.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=o,t=o,e=B(n),a=d;return(async()=>{let i=a?performance.now():0;d&&u({type:"step_start",workflowId:s,stepId:e,stepKey:n,name:t,ts:Date.now()});let m;try{m=await p.acquire()}catch(g){if($(g))throw u({type:"step_aborted",workflowId:s,stepId:e,stepKey:n,name:t,ts:Date.now(),durationMs:performance.now()-i}),g;let h;try{h=N(g)}catch(J){throw H(J)}let C=performance.now()-i;throw u({type:"step_error",workflowId:s,stepId:e,stepKey:n,name:t,ts:Date.now(),durationMs:C,error:h}),n&&u({type:"step_complete",workflowId:s,stepKey:n,name:t,ts:Date.now(),durationMs:C,result:D(h,{cause:g}),meta:{origin:"throw",thrown:g}}),E?.(h,t,y),U(h,{origin:"throw",thrown:g})}if(!m.ok){let g=performance.now()-i,h=W(m.error,{origin:"result",resultCause:m.cause});throw u({type:"step_error",workflowId:s,stepId:e,stepKey:n,name:t,ts:Date.now(),durationMs:g,error:h}),n&&u({type:"step_complete",workflowId:s,stepKey:n,name:t,ts:Date.now(),durationMs:g,result:m,meta:{origin:"result",resultCause:m.cause}}),E?.(h,t,y),U(h,{origin:"result",resultCause:m.cause})}let w=m.value,f,k,b=!1;try{f=await p.use(w)}catch(g){if($(g)){try{await p.release(w)}catch(h){console.warn(`[awaitly] step.withResource("${o}"): release threw after earlyExit:`,h)}throw g}k=g,b=!0}try{await p.release(w)}catch(g){console.warn(`[awaitly] step.withResource("${o}"): release threw:`,g)}if(b){let g;try{g=N(k)}catch(C){throw H(C)}let h=performance.now()-i;throw u({type:"step_error",workflowId:s,stepId:e,stepKey:n,name:t,ts:Date.now(),durationMs:h,error:g}),n&&u({type:"step_complete",workflowId:s,stepKey:n,name:t,ts:Date.now(),durationMs:h,result:D(g,{cause:k}),meta:{origin:"throw",thrown:k}}),E?.(g,t,y),U(g,{origin:"throw",thrown:k})}let O=f;if(O.ok){let g=performance.now()-i;return u({type:"step_success",workflowId:s,stepId:e,stepKey:n,name:t,ts:Date.now(),durationMs:g}),n&&u({type:"step_complete",workflowId:s,stepKey:n,name:t,ts:Date.now(),durationMs:g,result:O}),O.value}let R=performance.now()-i,P=W(O.error,{origin:"result",resultCause:O.cause});throw u({type:"step_error",workflowId:s,stepId:e,stepKey:n,name:t,ts:Date.now(),durationMs:R,error:P}),n&&u({type:"step_complete",workflowId:s,stepKey:n,name:t,ts:Date.now(),durationMs:R,result:O,meta:{origin:"result",resultCause:O.cause}}),E?.(P,t,y),U(P,{origin:"result",resultCause:O.cause})})()};let L=await r({step:c});if(process.env.NODE_ENV!=="production"&&L!==null&&typeof L=="object"&&"ok"in L&&typeof L.ok=="boolean"){let o=L;(o.ok===!0&&"value"in o||o.ok===!1&&"error"in o)&&console.warn(`awaitly: Workflow executor returned a Result-like object. Return raw values, not ok() or err().
1
+ var ee=class extends Error{_tag};function K(t,r){return class extends ee{_tag=t;constructor(l,d){let _=r?.message?r.message(l??{}):t;if(super(_),this.name=t,Object.setPrototypeOf(this,new.target.prototype),l&&typeof l=="object"){let{_tag:x,name:A,message:w,stack:M,...a}=l,D=Object.prototype.hasOwnProperty.call(a,"cause"),C=D?a.cause:void 0;D&&delete a.cause;let P=d?.cause!==void 0;if(D&&P)throw new TypeError("TaggedError: cannot provide 'cause' in props when also setting ErrorOptions.cause");Object.assign(this,a),D&&(this.cause=C),P&&(this.cause=d?.cause)}else d?.cause!==void 0&&(this.cause=d.cause)}}}Object.defineProperty(K,Symbol.hasInstance,{value:t=>t instanceof ee});(_=>{function t(x){return x instanceof Error}_.isError=t;function r(x){return x instanceof ee}_.isTaggedError=r;function l(x,A){let w=x._tag,M=A[w];return M(x)}_.match=l;function d(x,A,w){let M=x._tag,a=A[M];return a?a(x):w(x)}_.matchPartial=d})(K||={});var de=class extends K("TimeoutError",{message:r=>r.operation?`TimeoutError: ${r.operation} timed out after ${r.ms}ms`:`TimeoutError: Operation timed out after ${r.ms}ms`}){},we=class extends K("RetryExhaustedError",{message:r=>r.operation?`RetryExhaustedError: ${r.operation} failed after ${r.attempts} attempts`:`RetryExhaustedError: Operation failed after ${r.attempts} attempts`}){},ye=class extends K("RateLimitError",{message:r=>r.limiterName?`RateLimitError: Rate limit exceeded for ${r.limiterName}${r.retryAfterMs?`, retry after ${r.retryAfterMs}ms`:""}`:`RateLimitError: Rate limit exceeded${r.retryAfterMs?`, retry after ${r.retryAfterMs}ms`:""}`}){},fe=class extends K("CircuitBreakerOpenError",{message:r=>`CircuitBreakerOpenError: Circuit ${r.circuitName} is ${r.state??"OPEN"}${r.retryAfterMs?`, retry after ${Math.ceil(r.retryAfterMs/1e3)}s`:""}`}){},Te=class extends K("ValidationError",{message:r=>`ValidationError: Invalid ${r.field} - ${r.reason}`}){},ke=class extends K("NotFoundError",{message:r=>r.id?`NotFoundError: ${r.resource} with id ${r.id} not found`:`NotFoundError: ${r.resource} not found`}){},ge=class extends K("UnauthorizedError",{message:r=>r.reason?`UnauthorizedError: ${r.reason}`:r.action&&r.resource?`UnauthorizedError: Not authorized to ${r.action} ${r.resource}`:"UnauthorizedError: Access denied"}){},Re=class extends K("NetworkError",{message:r=>r.url?`NetworkError: ${r.reason} (${r.url})`:`NetworkError: ${r.reason}`}){},xe=class extends K("CompensationError",{message:r=>`CompensationError: Failed to compensate step ${r.step}`}){},ne=class extends K("UnexpectedError",{message:r=>`UnexpectedError: ${r.cause instanceof Error?r.cause.message:String(r.cause??"unknown")}`}){};function Me(t){let r=t.trim().match(/^(\d+(?:\.\d+)?)\s*(ms|s|m|h|d)$/i);if(!r)return;let l=parseFloat(r[1]),d=r[2].toLowerCase();return{_tag:"Duration",millis:l*({ms:1,s:1e3,m:6e4,h:36e5,d:864e5}[d]??1)}}function Ie(t){return new ne({cause:t})}function F(t){return{ok:!0,value:t}}function U(t,r){let l=r?.cause;return{ok:!1,error:t,...l!==void 0?{cause:l}:{}}}function De(t){if(t==null)return"unknown";if(typeof t=="string")return t.trim()||"unknown";if(typeof t=="object"){let r=t;if(typeof r._tag=="string"){let l=r._tag.trim();if(l)return l}if(typeof r.tag=="string"){let l=r.tag.trim();if(l)return l}if(typeof r.code=="string"){let l=r.code.trim();if(l)return l}else if(typeof r.code=="number")return String(r.code);if(t instanceof Error&&t.name){let l=t.name.trim();if(l)return l}}return"unknown"}function Ue(t,r){if(!(!r||!t))return r[t]}function Ne(t){let{intent:r,domain:l,owner:d,tags:_,stateChanges:x,emits:A,calls:w}=t;if(!r&&!l&&!d&&!_?.length&&!x?.length&&!A?.length&&!w?.length)return;let M={};return r&&(M.intent=r),l&&(M.domain=l),d&&(M.owner=d),_?.length&&(M.tags=_),x?.length&&(M.stateChanges=x),A?.length&&(M.emits=A),w?.length&&(M.calls=w),M}function j(t,r,l,d,_){let x=De(t),A=Ue(x,r),w={tag:x,origin:l};return A!==void 0&&(w.classification=A),d!==void 0&&(w.attempt=d),_!==void 0&&(w.cumulativeDurationMs=_),w}var Q=Symbol.for("step_timeout_marker");function Ce(t){return typeof t!="object"||t===null?!1:t.type==="STEP_TIMEOUT"?!0:Q in t}function Ke(t){if(!(typeof t!="object"||t===null)){if(t.type==="STEP_TIMEOUT"){let r=t;return{timeoutMs:r.timeoutMs,stepName:r.stepName,stepKey:r.stepKey,attempt:r.attempt}}if(Q in t)return t[Q]}}var Ae=Symbol("early-exit");function Fe(t,r){return{[Ae]:!0,error:t,meta:r}}function je(t){return typeof t=="object"&&t!==null&&t[Ae]===!0}var ve=Symbol("mapper-exception");function G(t){return{[ve]:!0,thrown:t}}function Le(t){return typeof t=="object"&&t!==null&&t[ve]===!0}function le(t,r){let{backoff:l,initialDelay:d,maxDelay:_,jitter:x}=r,A;switch(l){case"fixed":A=d;break;case"linear":A=d*t;break;case"exponential":A=d*Math.pow(2,t-1);break}if(A=Math.min(A,_),x){let w=A*.25*Math.random();A=A+w}return Math.floor(A)}function pe(t){return new Promise(r=>setTimeout(r,t))}var he=Symbol("timeout"),oe=Symbol("timeout-option");function Be(t){return typeof t=="object"&&t!==null&&t[oe]===!0}async function Ve(t,r,l,d){let _=new AbortController,x=r.onTimeout??"error",A=()=>typeof x=="function"?x({name:l.name,key:l.key,ms:r.ms}):r.error??{type:"STEP_TIMEOUT",stepName:l.name,stepKey:l.key,timeoutMs:r.ms,attempt:l.attempt},w;d?.aborted&&_.abort(d.reason);let M;d&&!d.aborted&&(M=()=>_.abort(d.reason),d.addEventListener("abort",M,{once:!0}));let a=new Promise((C,P)=>{w=setTimeout(()=>{if(x!=="disconnect"&&_.abort(),x==="option"){P({[oe]:!0,ms:r.ms});return}P({[he]:!0,error:A()})},r.ms)}),D;r.signal?D=Promise.resolve(t(_.signal)):D=Promise.resolve(t());try{return await Promise.race([D,a])}catch(C){if(typeof C=="object"&&C!==null&&C[oe]===!0)throw{[oe]:!0,ms:r.ms};if(typeof C=="object"&&C!==null&&C[he]===!0){x==="disconnect"&&D.catch(()=>{});let P=C.error;if(typeof P=="object"&&P!==null&&P.type!=="STEP_TIMEOUT"){let $={timeoutMs:r.ms,stepName:l.name,stepKey:l.key,attempt:l.attempt};Q in P?P[Q]=$:Object.defineProperty(P,Q,{value:$,enumerable:!1,writable:!0,configurable:!1})}throw P}throw C}finally{clearTimeout(w),M&&d&&d.removeEventListener("abort",M)}}var X={backoff:"exponential",initialDelay:100,maxDelay:3e4,jitter:!0,retryOn:()=>!0,onRetry:()=>{}};async function be(t,r){let{onError:l,onEvent:d,catchUnexpected:_,workflowId:x,workflowName:A,context:w,_workflowSignal:M}=r&&typeof r=="object"?r:{},a=x??crypto.randomUUID(),D=_??Ie,C=[],P=0,$=p=>p??`step_${++P}`,c=p=>{let L=p.context!==void 0||w===void 0?p:{...p,context:w},W=A!==void 0&&L.workflowName===void 0?{...L,workflowName:A}:L;if(W.type==="step_success"){let te=W.stepId;for(let re=C.length-1;re>=0;re--){let B=C[re];if(B.type==="race"&&!B.winnerId){B.winnerId=te;break}}}d?.(W,w)},N=Fe,J=p=>je(p),H=(p,L)=>p,_e=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 L=function(s){let E={};for(let[o,n]of Object.entries(s))if(typeof n=="function")E[o]=n;else if(n&&typeof n=="object"&&"fn"in n)E[o]=n.fn;else throw new TypeError(`step.parallel: operation "${o}" must be a function or { fn, errors? } object`);return E},W=function(s,E){let o=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let n=performance.now(),e=!1;C.push({scopeId:o,type:"parallel"});let i=()=>{if(e)return;e=!0;let u=C.findIndex(m=>m.scopeId===o);u!==-1&&C.splice(u,1),c({type:"scope_end",workflowId:a,scopeId:o,ts:Date.now(),durationMs:performance.now()-n})};c({type:"scope_start",workflowId:a,scopeId:o,scopeType:"parallel",name:s,ts:Date.now()});try{let u=await E();if(i(),!u.ok)throw l?.(u.error,s,w),N(u.error,{origin:"result",resultCause:u.cause});return u.value}catch(u){throw i(),u}})()},te=function(s,E){let o=Object.keys(s),n=E.name??`Parallel(${o.join(", ")})`,e=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let i=performance.now(),u=!1;C.push({scopeId:e,type:"parallel"});let m=()=>{if(u)return;u=!0;let y=C.findIndex(f=>f.scopeId===e);y!==-1&&C.splice(y,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:n,ts:Date.now()});try{let y=await new Promise(k=>{if(o.length===0){k([]);return}let S=!1,I=o.length,g=new Array(o.length);for(let O=0;O<o.length;O++){let R=o[O],b=O;Promise.resolve(s[R]()).catch(h=>U({type:"PROMISE_REJECTED",cause:h},{cause:{type:"PROMISE_REJECTION",reason:h}})).then(h=>{if(!S){if(!h.ok){S=!0,k([{key:R,result:h}]);return}g[b]={key:R,result:h},I--,I===0&&k(g)}})}});m();let f={};for(let{key:k,result:S}of y){if(!S.ok)throw l?.(S.error,k,w),N(S.error,{origin:"result",resultCause:S.cause});f[k]=S.value}return f}catch(y){throw m(),y}})()};var Je=L,ze=W,Ge=te;let p=(s,E,o)=>(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 n=o??{},e=Ne(n),i=s,u=n.key??s,m=n.key??s,{description:y,retry:f,timeout:k}=n,S=$(u),I=d,g=I?performance.now():0,R=_e(E)?()=>E:E,h={attempts:Math.max(1,f?.attempts??1),backoff:f?.backoff??X.backoff,initialDelay:f?.initialDelay??X.initialDelay,maxDelay:f?.maxDelay??X.maxDelay,jitter:f?.jitter??X.jitter,retryOn:f?.retryOn??X.retryOn,onRetry:f?.onRetry??X.onRetry};d&&c({type:"step_start",workflowId:a,stepId:S,stepKey:u,name:i,description:y,ts:Date.now(),...e&&{metadata:e}});let z;for(let v=1;v<=h.attempts;v++){let Pe=I?performance.now():0;try{let T;if(k?T=await Ve(R,k,{name:i,key:u,attempt:v},M):T=await R(),T.ok){let Y=performance.now()-g;return c({type:"step_success",workflowId:a,stepId:S,stepKey:u,name:i,description:y,ts:Date.now(),durationMs:Y,...e&&{metadata:e}}),m&&c({type:"step_complete",workflowId:a,stepKey:m,name:i,description:y,ts:Date.now(),durationMs:Y,result:T,...e&&{metadata:e}}),T.value}if(z=T,v<h.attempts&&h.retryOn(T.error,v)){let Y=le(v,h);c({type:"step_retry",workflowId:a,stepId:S,stepKey:u,name:i,ts:Date.now(),attempt:v+1,maxAttempts:h.attempts,delayMs:Y,error:T.error,...e&&{metadata:e},diagnostics:j(T.error,n.errorMeta,"result",v,performance.now()-g)}),h.onRetry(T.error,v,Y),await pe(Y);continue}h.attempts>1&&c({type:"step_retries_exhausted",workflowId:a,stepId:S,stepKey:u,name:i,ts:Date.now(),durationMs:performance.now()-g,attempts:v,lastError:T.error,...e&&{metadata:e},diagnostics:j(T.error,n.errorMeta,"result",v,performance.now()-g)});break}catch(T){let Y=performance.now()-Pe;if(Be(T)){let V=T.ms;c({type:"step_timeout",workflowId:a,stepId:S,stepKey:u,name:i,ts:Date.now(),timeoutMs:V,attempt:v,...e&&{metadata:e},diagnostics:j(T,n.errorMeta,"timeout",v)}),c({type:"step_success",workflowId:a,stepId:S,stepKey:u,name:i,description:y,ts:Date.now(),durationMs:performance.now()-g,...e&&{metadata:e}}),m&&c({type:"step_complete",workflowId:a,stepKey:m,name:i,description:y,ts:Date.now(),durationMs:performance.now()-g,result:F(void 0),...e&&{metadata:e}});return}if(J(T))throw c({type:"step_aborted",workflowId:a,stepId:S,stepKey:u,name:i,description:y,ts:Date.now(),durationMs:Y,...e&&{metadata:e}}),T;if(Ce(T)){let V=Ke(T),Oe=k?.ms??V?.timeoutMs??0;if(c({type:"step_timeout",workflowId:a,stepId:S,stepKey:u,name:i,ts:Date.now(),timeoutMs:Oe,attempt:v,...e&&{metadata:e},diagnostics:j(T,n.errorMeta,"timeout",v)}),v<h.attempts&&h.retryOn(T,v)){let ce=le(v,h);c({type:"step_retry",workflowId:a,stepId:S,stepKey:u,name:i,ts:Date.now(),attempt:v+1,maxAttempts:h.attempts,delayMs:ce,error:T,...e&&{metadata:e},diagnostics:j(T,n.errorMeta,"timeout",v,performance.now()-g)}),h.onRetry(T,v,ce),await pe(ce);continue}h.attempts>1&&c({type:"step_retries_exhausted",workflowId:a,stepId:S,stepKey:u,name:i,ts:Date.now(),durationMs:performance.now()-g,attempts:v,lastError:T,...e&&{metadata:e},diagnostics:j(T,n.errorMeta,"timeout",v,performance.now()-g)});let ue=performance.now()-g;throw c({type:"step_error",workflowId:a,stepId:S,stepKey:u,name:i,description:y,ts:Date.now(),durationMs:ue,error:T,...e&&{metadata:e},diagnostics:j(T,n.errorMeta,"timeout",v,ue)}),m&&c({type:"step_complete",workflowId:a,stepKey:m,name:i,description:y,ts:Date.now(),durationMs:ue,result:U(T,{cause:T}),meta:{origin:"throw",thrown:T},...e&&{metadata:e}}),l?.(T,i,w),N(T,{origin:"throw",thrown:T})}if(v<h.attempts&&h.retryOn(T,v)){let V=le(v,h);c({type:"step_retry",workflowId:a,stepId:S,stepKey:u,name:i,ts:Date.now(),attempt:v+1,maxAttempts:h.attempts,delayMs:V,error:T,...e&&{metadata:e},diagnostics:j(T,n.errorMeta,"throw",v,performance.now()-g)}),h.onRetry(T,v,V),await pe(V);continue}h.attempts>1&&!Ce(T)&&c({type:"step_retries_exhausted",workflowId:a,stepId:S,stepKey:u,name:i,ts:Date.now(),durationMs:performance.now()-g,attempts:v,lastError:T,...e&&{metadata:e},diagnostics:j(T,n.errorMeta,"throw",v,performance.now()-g)});let ie=performance.now()-g,Z;try{Z=D(T)}catch(V){throw G(V)}throw c({type:"step_error",workflowId:a,stepId:S,stepKey:u,name:i,description:y,ts:Date.now(),durationMs:ie,error:Z,...e&&{metadata:e},diagnostics:j(T,n.errorMeta,"throw",v,ie)}),m&&c({type:"step_complete",workflowId:a,stepKey:m,name:i,description:y,ts:Date.now(),durationMs:ie,result:U(Z,{cause:T}),meta:{origin:"throw",thrown:T},...e&&{metadata:e}}),l?.(Z,i,w),N(Z,{origin:"throw",thrown:T})}}let q=z,se=performance.now()-g,ae=H(q.error,{origin:"result",resultCause:q.cause});throw c({type:"step_error",workflowId:a,stepId:S,stepKey:u,name:i,description:y,ts:Date.now(),durationMs:se,error:ae,...e&&{metadata:e},diagnostics:j(q.error,n.errorMeta,"result",h.attempts,se)}),m&&c({type:"step_complete",workflowId:a,stepKey:m,name:i,description:y,ts:Date.now(),durationMs:se,result:q,meta:{origin:"result",resultCause:q.cause},...e&&{metadata:e}}),l?.(ae,i,w),N(ae,{origin:"result",resultCause:q.cause})})();p.try=(s,E,o)=>{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 n=o.key??s,e=s,i=s,u="error"in o?()=>o.error:o.onError,m=d;return(async()=>{let y=m?performance.now():0;d&&c({type:"step_start",workflowId:a,stepId:i,stepKey:n,name:e,ts:Date.now()});try{let f=await E(),k=performance.now()-y;return c({type:"step_success",workflowId:a,stepId:i,stepKey:n,name:e,ts:Date.now(),durationMs:k}),n&&c({type:"step_complete",workflowId:a,stepKey:n,name:e,ts:Date.now(),durationMs:k,result:F(f)}),f}catch(f){let k=u(f),S=performance.now()-y,I=H(k,{origin:"throw",thrown:f});throw c({type:"step_error",workflowId:a,stepId:i,stepKey:n,name:e,ts:Date.now(),durationMs:S,error:I}),n&&c({type:"step_complete",workflowId:a,stepKey:n,name:e,ts:Date.now(),durationMs:S,result:U(k,{cause:f}),meta:{origin:"throw",thrown:f}}),l?.(I,e,w),N(I,{origin:"throw",thrown:f})}})()},p.fromResult=(s,E,o)=>{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 n=o.key??s,e=s,i=s,u="error"in o?()=>o.error:o.onError,m=d;return(async()=>{let y=m?performance.now():0;d&&c({type:"step_start",workflowId:a,stepId:i,stepKey:n,name:e,ts:Date.now()});let f=await E();if(f.ok){let k=performance.now()-y;return c({type:"step_success",workflowId:a,stepId:i,stepKey:n,name:e,ts:Date.now(),durationMs:k}),n&&c({type:"step_complete",workflowId:a,stepKey:n,name:e,ts:Date.now(),durationMs:k,result:F(f.value)}),f.value}else{let k=u(f.error),S=performance.now()-y,I=H(k,{origin:"result",resultCause:f.error});throw c({type:"step_error",workflowId:a,stepId:i,stepKey:n,name:e,ts:Date.now(),durationMs:S,error:I}),n&&c({type:"step_complete",workflowId:a,stepKey:n,name:e,ts:Date.now(),durationMs:S,result:U(k,{cause:f.error}),meta:{origin:"result",resultCause:f.error}}),l?.(I,e,w),N(I,{origin:"result",resultCause:f.error})}})()},p.fromNullable=(s,E,o,n)=>{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):U(o())},n)},p.retry=(s,E,o)=>{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:o.key??s,retry:{attempts:o.attempts,backoff:o.backoff,initialDelay:o.initialDelay,maxDelay:o.maxDelay,jitter:o.jitter,retryOn:o.retryOn,onRetry:o.onRetry},timeout:o.timeout})},p.withTimeout=(s,E,o)=>{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:o.key??s,timeout:o})},p.sleep=(s,E,o)=>{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 n=typeof E=="string"?Me(E):E;if(!n)throw new Error(`step.sleep: invalid duration '${E}'`);let e=n.millis,i=o?.signal;return p(s,async()=>{if(M?.aborted||i?.aborted){let u=new Error("Sleep aborted");throw u.name="AbortError",u}return new Promise((u,m)=>{let y={timeoutId:void 0},f=()=>{y.timeoutId&&clearTimeout(y.timeoutId);let k=new Error("Sleep aborted");k.name="AbortError",m(k)};M?.addEventListener("abort",f,{once:!0}),i?.addEventListener("abort",f,{once:!0}),y.timeoutId=setTimeout(()=>{M?.removeEventListener("abort",f),i?.removeEventListener("abort",f),u(F(void 0))},e)})},{key:o?.key??s,description:o?.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],o=s[1];if(typeof o=="function")return W(E,o);if(o&&typeof o=="object"&&!Array.isArray(o)){let e=L(o);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 o=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let n=performance.now(),e=!1,i={scopeId:o,type:"race",winnerId:void 0};C.push(i);let u=()=>{if(e)return;e=!0;let m=C.findIndex(y=>y.scopeId===o);m!==-1&&C.splice(m,1),c({type:"scope_end",workflowId:a,scopeId:o,ts:Date.now(),durationMs:performance.now()-n,winnerId:i.winnerId})};c({type:"scope_start",workflowId:a,scopeId:o,scopeType:"race",name:s,ts:Date.now()});try{let m=await E();if(u(),!m.ok)throw l?.(m.error,s,w),N(m.error,{origin:"result",resultCause:m.cause});return m.value}catch(m){throw u(),m}})()},p.allSettled=(s,E)=>{let o=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let n=performance.now(),e=!1;C.push({scopeId:o,type:"allSettled"});let i=()=>{if(e)return;e=!0;let u=C.findIndex(m=>m.scopeId===o);u!==-1&&C.splice(u,1),c({type:"scope_end",workflowId:a,scopeId:o,ts:Date.now(),durationMs:performance.now()-n})};c({type:"scope_start",workflowId:a,scopeId:o,scopeType:"allSettled",name:s,ts:Date.now()});try{let u=await E();if(i(),!u.ok)throw l?.(u.error,s,w),N(u.error,{origin:"result",resultCause:u.cause});return u.value}catch(u){throw i(),u}})()},p.if=(s,E,o)=>o(),p.label=p.if,p.branch=async(s,E)=>{let{condition:o,then:n,else:e}=E;if(o())return await n();if(e)return await e()},p.arm=(s,E)=>({fn:s,errors:E}),p.forEach=async(s,E,o)=>{let n=[],e=o.maxIterations,i=0,u="run"in o,m=Symbol.asyncIterator in E?E:(async function*(){yield*E})();for await(let y of m){if(e!==void 0&&i>=e)break;let f;u?f=await o.run(y,i):f=await o.item.handler(y,i,p),n.push(f),i++}return n},p.item=s=>({__forEachItemHandler:!0,handler:s}),p.dep=(s,E)=>E,p.run=(s,E,o)=>p(s,()=>E,o),p.workflow=(s,E,o)=>p(s,E,o),p.andThen=(s,E,o,n)=>p(s,()=>o(E),n),p.match=async(s,E,o,n)=>p(s,async()=>{let e=await E;return e.ok?F(await o.ok(e.value)):F(await o.err(e.error,e.cause))},n),p.all=p.parallel,p.map=async(s,E,o,n)=>{let e=n?.concurrency??E.length;return p(s,()=>e>=E.length?Se(E.map((i,u)=>o(i,u))):(async()=>{let i=[];for(let u=0;u<E.length;u+=e){let m=E.slice(u,u+e),y=await Se(m.map((f,k)=>o(f,u+k)));if(!y.ok)return y;i.push(...y.value)}return F(i)})(),{key:n?.key})},p.withFallback=(s,E,o)=>{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 n=o.key??s,e=s,i=$(n),u=d;return(async()=>{let m=u?performance.now():0;d&&c({type:"step_start",workflowId:a,stepId:i,stepKey:n,name:e,ts:Date.now()});let y;try{y=await E()}catch(g){if(J(g))throw c({type:"step_aborted",workflowId:a,stepId:i,stepKey:n,name:e,ts:Date.now(),durationMs:performance.now()-m}),g;let O;try{O=D(g)}catch(b){throw G(b)}if(o.on!==void 0&&o.on!==O){let b=performance.now()-m;throw c({type:"step_error",workflowId:a,stepId:i,stepKey:n,name:e,ts:Date.now(),durationMs:b,error:O}),n&&c({type:"step_complete",workflowId:a,stepKey:n,name:e,ts:Date.now(),durationMs:b,result:U(O,{cause:g}),meta:{origin:"throw",thrown:g}}),l?.(O,e,w),N(O,{origin:"throw",thrown:g})}let R;try{R=await o.fallback()}catch(b){if(J(b))throw c({type:"step_aborted",workflowId:a,stepId:i,stepKey:n,name:e,ts:Date.now(),durationMs:performance.now()-m}),b;let h;try{h=D(b)}catch(q){throw G(q)}let z=performance.now()-m;throw c({type:"step_error",workflowId:a,stepId:i,stepKey:n,name:e,ts:Date.now(),durationMs:z,error:h}),n&&c({type:"step_complete",workflowId:a,stepKey:n,name:e,ts:Date.now(),durationMs:z,result:U(h,{cause:b}),meta:{origin:"throw",thrown:b}}),l?.(h,e,w),N(h,{origin:"throw",thrown:b})}if(R.ok){let b=performance.now()-m;return c({type:"step_success",workflowId:a,stepId:i,stepKey:n,name:e,ts:Date.now(),durationMs:b}),n&&c({type:"step_complete",workflowId:a,stepKey:n,name:e,ts:Date.now(),durationMs:b,result:R,meta:{origin:"fallback",fallbackUsed:!0,fallbackReason:String(O)}}),R.value}else{let b=performance.now()-m,h=H(R.error,{origin:"result",resultCause:R.cause});throw c({type:"step_error",workflowId:a,stepId:i,stepKey:n,name:e,ts:Date.now(),durationMs:b,error:h}),n&&c({type:"step_complete",workflowId:a,stepKey:n,name:e,ts:Date.now(),durationMs:b,result:R,meta:{origin:"result",resultCause:R.cause}}),l?.(h,e,w),N(h,{origin:"result",resultCause:R.cause})}}if(y.ok){let g=performance.now()-m;return c({type:"step_success",workflowId:a,stepId:i,stepKey:n,name:e,ts:Date.now(),durationMs:g}),n&&c({type:"step_complete",workflowId:a,stepKey:n,name:e,ts:Date.now(),durationMs:g,result:y}),y.value}let f=y.error;if(o.on!==void 0&&o.on!==f){let g=performance.now()-m,O=H(f,{origin:"result",resultCause:y.cause});throw c({type:"step_error",workflowId:a,stepId:i,stepKey:n,name:e,ts:Date.now(),durationMs:g,error:O}),n&&c({type:"step_complete",workflowId:a,stepKey:n,name:e,ts:Date.now(),durationMs:g,result:y,meta:{origin:"result",resultCause:y.cause}}),l?.(O,e,w),N(O,{origin:"result",resultCause:y.cause})}let k;try{k=await o.fallback()}catch(g){if(J(g))throw c({type:"step_aborted",workflowId:a,stepId:i,stepKey:n,name:e,ts:Date.now(),durationMs:performance.now()-m}),g;let O;try{O=D(g)}catch(b){throw G(b)}let R=performance.now()-m;throw c({type:"step_error",workflowId:a,stepId:i,stepKey:n,name:e,ts:Date.now(),durationMs:R,error:O}),n&&c({type:"step_complete",workflowId:a,stepKey:n,name:e,ts:Date.now(),durationMs:R,result:U(O,{cause:g}),meta:{origin:"throw",thrown:g}}),l?.(O,e,w),N(O,{origin:"throw",thrown:g})}if(k.ok){let g=performance.now()-m;return c({type:"step_success",workflowId:a,stepId:i,stepKey:n,name:e,ts:Date.now(),durationMs:g}),n&&c({type:"step_complete",workflowId:a,stepKey:n,name:e,ts:Date.now(),durationMs:g,result:k,meta:{origin:"fallback",fallbackUsed:!0,fallbackReason:String(f)}}),k.value}let S=performance.now()-m,I=H(k.error,{origin:"result",resultCause:k.cause});throw c({type:"step_error",workflowId:a,stepId:i,stepKey:n,name:e,ts:Date.now(),durationMs:S,error:I}),n&&c({type:"step_complete",workflowId:a,stepKey:n,name:e,ts:Date.now(),durationMs:S,result:k,meta:{origin:"result",resultCause:k.cause}}),l?.(I,e,w),N(I,{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 o=s,n=s,e=$(o),i=d;return(async()=>{let u=i?performance.now():0;d&&c({type:"step_start",workflowId:a,stepId:e,stepKey:o,name:n,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:o,name:n,ts:Date.now(),durationMs:performance.now()-u}),R;let b;try{b=D(R)}catch(z){throw G(z)}let h=performance.now()-u;throw c({type:"step_error",workflowId:a,stepId:e,stepKey:o,name:n,ts:Date.now(),durationMs:h,error:b}),o&&c({type:"step_complete",workflowId:a,stepKey:o,name:n,ts:Date.now(),durationMs:h,result:U(b,{cause:R}),meta:{origin:"throw",thrown:R}}),l?.(b,n,w),N(b,{origin:"throw",thrown:R})}if(!m.ok){let R=performance.now()-u,b=H(m.error,{origin:"result",resultCause:m.cause});throw c({type:"step_error",workflowId:a,stepId:e,stepKey:o,name:n,ts:Date.now(),durationMs:R,error:b}),o&&c({type:"step_complete",workflowId:a,stepKey:o,name:n,ts:Date.now(),durationMs:R,result:m,meta:{origin:"result",resultCause:m.cause}}),l?.(b,n,w),N(b,{origin:"result",resultCause:m.cause})}let y=m.value,f,k,S=!1;try{f=await E.use(y)}catch(R){if(J(R)){try{await E.release(y)}catch(b){console.warn(`[awaitly] step.withResource("${s}"): release threw after earlyExit:`,b)}throw R}k=R,S=!0}try{await E.release(y)}catch(R){console.warn(`[awaitly] step.withResource("${s}"): release threw:`,R)}if(S){let R;try{R=D(k)}catch(h){throw G(h)}let b=performance.now()-u;throw c({type:"step_error",workflowId:a,stepId:e,stepKey:o,name:n,ts:Date.now(),durationMs:b,error:R}),o&&c({type:"step_complete",workflowId:a,stepKey:o,name:n,ts:Date.now(),durationMs:b,result:U(R,{cause:k}),meta:{origin:"throw",thrown:k}}),l?.(R,n,w),N(R,{origin:"throw",thrown:k})}let I=f;if(I.ok){let R=performance.now()-u;return c({type:"step_success",workflowId:a,stepId:e,stepKey:o,name:n,ts:Date.now(),durationMs:R}),o&&c({type:"step_complete",workflowId:a,stepKey:o,name:n,ts:Date.now(),durationMs:R,result:I}),I.value}let g=performance.now()-u,O=H(I.error,{origin:"result",resultCause:I.cause});throw c({type:"step_error",workflowId:a,stepId:e,stepKey:o,name:n,ts:Date.now(),durationMs:g,error:O}),o&&c({type:"step_complete",workflowId:a,stepKey:o,name:n,ts:Date.now(),durationMs:g,result:I,meta:{origin:"result",resultCause:I.cause}}),l?.(O,n,w),N(O,{origin:"result",resultCause:I.cause})})()};let B=await t({step:p});if(process.env.NODE_ENV!=="production"&&B!==null&&typeof B=="object"&&"ok"in B&&typeof B.ok=="boolean"){let s=B;(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 K(L)}catch(c){if(_e(c))throw c.thrown;if($(c)){let q=c.meta.origin==="throw"?c.meta.thrown:c.meta.origin==="result"?c.meta.resultCause:void 0;return D(c.error,{cause:q})}let j=N(c);return E?.(j,"unexpected",y),D(j,{cause:c})}}me.strict=(r,l)=>me(r,l);async function we(r){return r.length===0?K([]):new Promise(l=>{let E=!1,d=r.length,v=new Array(r.length);for(let A=0;A<r.length;A++){let _=A;Promise.resolve(r[_]).catch(y=>D({type:"PROMISE_REJECTED",cause:y},{cause:{type:"PROMISE_REJECTION",reason:y}})).then(y=>{if(!E){if(!y.ok){E=!0,l(y);return}v[_]=y.value,d--,d===0&&l(K(v))}})}})}function Me(r){return typeof r=="object"&&r!==null&&r.type==="EVENT_TIMEOUT"}function Ie(r){return typeof r=="object"&&r!==null&&r.type==="INVALID_EMITTER"}function De(r,l){return new Promise(E=>{try{r((d,v)=>{if(d){let A=l?.onError?l.onError(d):d;E(D(A,{cause:d}))}else E(K(v))})}catch(d){let v=d instanceof Error?d:new Error(String(d)),A=l?.onError?l.onError(v):v;E(D(A,{cause:d}))}})}function le(r){return typeof r=="object"&&r!==null&&"on"in r&&"off"in r&&typeof r.on=="function"&&typeof r.off=="function"}function ce(r){return typeof r=="object"&&r!==null&&"addEventListener"in r&&"removeEventListener"in r&&typeof r.addEventListener=="function"&&typeof r.removeEventListener=="function"}function Ue(r,l,E){return new Promise(d=>{let v,A=!1,_=le(r)?(x,M)=>r.on(x,M):ce(r)?(x,M)=>r.addEventListener(x,M):null,y=le(r)?(x,M)=>r.off(x,M):ce(r)?(x,M)=>r.removeEventListener(x,M):null;if(!_||!y){d(D({type:"INVALID_EMITTER",message:"Object does not have on/off or addEventListener/removeEventListener"}));return}let I=(...x)=>{A||(A=!0,N(),d(K(x[0])))},s=(...x)=>{if(A)return;A=!0,N();let M=x[0],B=E?.onError?E.onError(M):M;d(D(B,{cause:M}))},N=()=>{v&&clearTimeout(v),y(l.success,I),l.error&&y(l.error,s)};_(l.success,I),l.error&&_(l.error,s),l.timeout&&(v=setTimeout(()=>{if(A)return;A=!0,N();let x={type:"EVENT_TIMEOUT",event:l.success,timeoutMs:l.timeout};d(D(x))},l.timeout))})}function Ne(r){return le(r)||ce(r)}export{De as fromCallback,Ue as fromEvent,Ne as isEventEmitterLike,Me as isEventTimeoutError,Ie as isInvalidEmitterError};
6
+ See: https://jagreehal.github.io/awaitly/guides/troubleshooting/#returning-ok-from-workflow-executor-double-wrapping`)}return F(B)}catch(p){if(Le(p))throw p.thrown;if(J(p)){let W=p.meta.origin==="throw"?p.meta.thrown:p.meta.origin==="result"?p.meta.resultCause:void 0;return U(p.error,{cause:W})}let L=D(p);return l?.(L,"unexpected",w),U(L,{cause:p})}}be.strict=(t,r)=>be(t,r);async function Se(t){return t.length===0?F([]):new Promise(r=>{let l=!1,d=t.length,_=new Array(t.length);for(let x=0;x<t.length;x++){let A=x;Promise.resolve(t[A]).catch(w=>U({type:"PROMISE_REJECTED",cause:w},{cause:{type:"PROMISE_REJECTION",reason:w}})).then(w=>{if(!l){if(!w.ok){l=!0,r(w);return}_[A]=w.value,d--,d===0&&r(F(_))}})}})}function $e(t){return typeof t=="object"&&t!==null&&t.type==="EVENT_TIMEOUT"}function He(t){return typeof t=="object"&&t!==null&&t.type==="INVALID_EMITTER"}function We(t,r){return new Promise(l=>{try{t((d,_)=>{if(d){let x=r?.onError?r.onError(d):d;l(U(x,{cause:d}))}else l(F(_))})}catch(d){let _=d instanceof Error?d:new Error(String(d)),x=r?.onError?r.onError(_):_;l(U(x,{cause:d}))}})}function Ee(t){return typeof t=="object"&&t!==null&&"on"in t&&"off"in t&&typeof t.on=="function"&&typeof t.off=="function"}function me(t){return typeof t=="object"&&t!==null&&"addEventListener"in t&&"removeEventListener"in t&&typeof t.addEventListener=="function"&&typeof t.removeEventListener=="function"}function qe(t,r,l){return new Promise(d=>{let _,x=!1,A=Ee(t)?(C,P)=>t.on(C,P):me(t)?(C,P)=>t.addEventListener(C,P):null,w=Ee(t)?(C,P)=>t.off(C,P):me(t)?(C,P)=>t.removeEventListener(C,P):null;if(!A||!w){d(U({type:"INVALID_EMITTER",message:"Object does not have on/off or addEventListener/removeEventListener"}));return}let M=(...C)=>{x||(x=!0,D(),d(F(C[0])))},a=(...C)=>{if(x)return;x=!0,D();let P=C[0],$=l?.onError?l.onError(P):P;d(U($,{cause:P}))},D=()=>{_&&clearTimeout(_),w(r.success,M),r.error&&w(r.error,a)};A(r.success,M),r.error&&A(r.error,a),r.timeout&&(_=setTimeout(()=>{if(x)return;x=!0,D();let C={type:"EVENT_TIMEOUT",event:r.success,timeoutMs:r.timeout};d(U(C))},r.timeout))})}function Ye(t){return Ee(t)||me(t)}export{We as fromCallback,qe as fromEvent,Ye as isEventEmitterLike,$e as isEventTimeoutError,He as isInvalidEmitterError};
7
7
  //# sourceMappingURL=adapters.js.map