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