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.
- package/dist/adapters.cjs +2 -2
- package/dist/adapters.cjs.map +1 -1
- package/dist/adapters.d.cts +3 -1
- package/dist/adapters.d.ts +3 -1
- package/dist/adapters.js +2 -2
- package/dist/adapters.js.map +1 -1
- package/dist/batch.cjs +2 -2
- package/dist/batch.cjs.map +1 -1
- package/dist/batch.d.cts +3 -1
- package/dist/batch.d.ts +3 -1
- package/dist/batch.js +2 -2
- package/dist/batch.js.map +1 -1
- package/dist/circuit-breaker.cjs +2 -2
- package/dist/circuit-breaker.cjs.map +1 -1
- package/dist/circuit-breaker.d.cts +3 -1
- package/dist/circuit-breaker.d.ts +3 -1
- package/dist/circuit-breaker.js +2 -2
- package/dist/circuit-breaker.js.map +1 -1
- package/dist/conditional.d.cts +3 -1
- package/dist/conditional.d.ts +3 -1
- package/dist/core.cjs +2 -2
- package/dist/core.cjs.map +1 -1
- package/dist/core.d.cts +2 -1
- package/dist/core.d.ts +2 -1
- package/dist/core.js +2 -2
- package/dist/core.js.map +1 -1
- package/dist/diagnostics.cjs +3 -3
- package/dist/diagnostics.cjs.map +1 -1
- package/dist/diagnostics.d.cts +3 -1
- package/dist/diagnostics.d.ts +3 -1
- package/dist/diagnostics.js +3 -3
- package/dist/diagnostics.js.map +1 -1
- package/dist/durable.cjs +3 -3
- package/dist/durable.cjs.map +1 -1
- package/dist/durable.d.cts +8 -361
- package/dist/durable.d.ts +8 -361
- package/dist/durable.js +3 -3
- package/dist/durable.js.map +1 -1
- package/dist/engine.cjs +11 -0
- package/dist/engine.cjs.map +1 -0
- package/dist/engine.d.cts +114 -0
- package/dist/engine.d.ts +114 -0
- package/dist/engine.js +11 -0
- package/dist/engine.js.map +1 -0
- package/dist/errors-entry-CMH73Eym.d.cts +339 -0
- package/dist/errors-entry-DOt5UUl4.d.ts +339 -0
- package/dist/errors.cjs +1 -1
- package/dist/errors.cjs.map +1 -1
- package/dist/errors.d.cts +2 -318
- package/dist/errors.d.ts +2 -318
- package/dist/errors.js +1 -1
- package/dist/errors.js.map +1 -1
- package/dist/fetch.cjs +2 -2
- package/dist/fetch.cjs.map +1 -1
- package/dist/fetch.d.cts +3 -1
- package/dist/fetch.d.ts +3 -1
- package/dist/fetch.js +2 -2
- package/dist/fetch.js.map +1 -1
- package/dist/functional.cjs +1 -1
- package/dist/functional.cjs.map +1 -1
- package/dist/functional.d.cts +2 -0
- package/dist/functional.d.ts +2 -0
- package/dist/functional.js +1 -1
- package/dist/functional.js.map +1 -1
- package/dist/{guards-PU64_GKv.d.cts → guards-B79mP5Q8.d.cts} +3 -3
- package/dist/{guards-B5lgMJq0.d.ts → guards-BUq6NJCM.d.ts} +3 -3
- package/dist/{hitl-Dyiy0R1v.d.cts → hitl-BCqkMAHw.d.cts} +2 -2
- package/dist/{hitl-BjeSm1sJ.d.ts → hitl-BZtPx0aU.d.ts} +2 -2
- package/dist/hitl.cjs +2 -2
- package/dist/hitl.cjs.map +1 -1
- package/dist/hitl.d.cts +9 -6
- package/dist/hitl.d.ts +9 -6
- package/dist/hitl.js +2 -2
- package/dist/hitl.js.map +1 -1
- package/dist/index-BVUAOWGG.d.ts +417 -0
- package/dist/index-CQnpmUcC.d.cts +417 -0
- package/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +4 -3
- package/dist/index.d.ts +4 -3
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/otel.d.cts +3 -1
- package/dist/otel.d.ts +3 -1
- package/dist/{persistence-entry-B3ukwbb5.d.ts → persistence-entry-ClFhxd2Q.d.ts} +11 -5
- package/dist/{persistence-entry-CgVzswbg.d.cts → persistence-entry-jflY61az.d.cts} +11 -5
- package/dist/persistence.d.cts +6 -3
- package/dist/persistence.d.ts +6 -3
- package/dist/policies.d.cts +3 -1
- package/dist/policies.d.ts +3 -1
- package/dist/ratelimit.cjs +2 -2
- package/dist/ratelimit.cjs.map +1 -1
- package/dist/ratelimit.d.cts +3 -1
- package/dist/ratelimit.d.ts +3 -1
- package/dist/ratelimit.js +2 -2
- package/dist/ratelimit.js.map +1 -1
- package/dist/reliability.cjs +2 -2
- package/dist/reliability.cjs.map +1 -1
- package/dist/reliability.d.cts +3 -1
- package/dist/reliability.d.ts +3 -1
- package/dist/reliability.js +2 -2
- package/dist/reliability.js.map +1 -1
- package/dist/resolver.cjs +2 -2
- package/dist/resolver.cjs.map +1 -1
- package/dist/resolver.d.cts +5 -3
- package/dist/resolver.d.ts +5 -3
- package/dist/resolver.js +2 -2
- package/dist/resolver.js.map +1 -1
- package/dist/resource.cjs +2 -2
- package/dist/resource.cjs.map +1 -1
- package/dist/resource.d.cts +3 -1
- package/dist/resource.d.ts +3 -1
- package/dist/resource.js +2 -2
- package/dist/resource.js.map +1 -1
- package/dist/result/retry.cjs +1 -1
- package/dist/result/retry.cjs.map +1 -1
- package/dist/result/retry.d.cts +2 -0
- package/dist/result/retry.d.ts +2 -0
- package/dist/result/retry.js +1 -1
- package/dist/result/retry.js.map +1 -1
- package/dist/result.cjs +1 -1
- package/dist/result.cjs.map +1 -1
- package/dist/result.d.cts +8 -23
- package/dist/result.d.ts +8 -23
- package/dist/result.js +1 -1
- package/dist/result.js.map +1 -1
- package/dist/{run-entry-C1uFytM6.d.cts → run-entry-rw7zll_G.d.ts} +16 -45
- package/dist/{run-entry-C1uFytM6.d.ts → run-entry-yQu63Yj9.d.cts} +16 -45
- package/dist/run.cjs +2 -2
- package/dist/run.cjs.map +1 -1
- package/dist/run.d.cts +3 -1
- package/dist/run.d.ts +3 -1
- package/dist/run.js +2 -2
- package/dist/run.js.map +1 -1
- package/dist/saga.cjs +2 -2
- package/dist/saga.cjs.map +1 -1
- package/dist/saga.d.cts +3 -1
- package/dist/saga.d.ts +3 -1
- package/dist/saga.js +2 -2
- package/dist/saga.js.map +1 -1
- package/dist/singleflight.d.cts +3 -1
- package/dist/singleflight.d.ts +3 -1
- package/dist/streaming.cjs +4 -4
- package/dist/streaming.cjs.map +1 -1
- package/dist/streaming.d.cts +5 -3
- package/dist/streaming.d.ts +5 -3
- package/dist/streaming.js +4 -4
- package/dist/streaming.js.map +1 -1
- package/dist/testing.cjs +8 -4
- package/dist/testing.cjs.map +1 -1
- package/dist/testing.d.cts +87 -4
- package/dist/testing.d.ts +87 -4
- package/dist/testing.js +8 -4
- package/dist/testing.js.map +1 -1
- package/dist/{types-wa_wTOn3.d.ts → types-CuWK5AlK.d.ts} +1 -1
- package/dist/{types-DUWrNIJu.d.cts → types-uR3JpwvF.d.cts} +1 -1
- package/dist/webhook.cjs +2 -2
- package/dist/webhook.cjs.map +1 -1
- package/dist/webhook.d.cts +7 -4
- package/dist/webhook.d.ts +7 -4
- package/dist/webhook.js +2 -2
- package/dist/webhook.js.map +1 -1
- package/dist/workflow.cjs +3 -3
- package/dist/workflow.cjs.map +1 -1
- package/dist/workflow.d.cts +47 -11
- package/dist/workflow.d.ts +47 -11
- package/dist/workflow.js +3 -3
- package/dist/workflow.js.map +1 -1
- package/package.json +15 -1
package/dist/fetch.cjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
"use strict";var le=Object.defineProperty;var Fe=Object.getOwnPropertyDescriptor;var Me=Object.getOwnPropertyNames;var ve=Object.prototype.hasOwnProperty;var De=(r,e)=>{for(var s in e)le(r,s,{get:e[s],enumerable:!0})},Ie=(r,e,s,l)=>{if(e&&typeof e=="object"||typeof e=="function")for(let g of Me(e))!ve.call(r,g)&&g!==s&&le(r,g,{get:()=>e[g],enumerable:!(l=Fe(e,g))||l.enumerable});return r};var Ue=r=>Ie(le({},"__esModule",{value:!0}),r);var Qe={};De(Qe,{fetchArrayBuffer:()=>Se,fetchBlob:()=>be,fetchJson:()=>xe,fetchResponse:()=>Ae,fetchText:()=>Ce});module.exports=Ue(Qe);function Ne(r){let e=r.trim().match(/^(\d+(?:\.\d+)?)\s*(ms|s|m|h|d)$/i);if(!e)return;let s=parseFloat(e[1]),l=e[2].toLowerCase();return{_tag:"Duration",millis:s*({ms:1,s:1e3,m:6e4,h:36e5,d:864e5}[l]??1)}}var Be="UNEXPECTED_ERROR";function Ke(r){return Be}function I(r){return{ok:!0,value:r}}function _(r,e){let s=e?.cause;return{ok:!1,error:r,...s!==void 0?{cause:s}:{}}}function He(r){if(r==null)return"unknown";if(typeof r=="string")return r.trim()||"unknown";if(typeof r=="object"){let e=r;if(typeof e._tag=="string"){let s=e._tag.trim();if(s)return s}if(typeof e.tag=="string"){let s=e.tag.trim();if(s)return s}if(typeof e.code=="string"){let s=e.code.trim();if(s)return s}else if(typeof e.code=="number")return String(e.code);if(r instanceof Error&&r.name){let s=r.name.trim();if(s)return s}}return"unknown"}function je(r,e){if(!(!e||!r))return e[r]}function Le(r){let{intent:e,domain:s,owner:l,tags:g,stateChanges:f,emits:h,calls:y}=r;if(!e&&!s&&!l&&!g?.length&&!f?.length&&!h?.length&&!y?.length)return;let O={};return e&&(O.intent=e),s&&(O.domain=s),l&&(O.owner=l),g?.length&&(O.tags=g),f?.length&&(O.stateChanges=f),h?.length&&(O.emits=h),y?.length&&(O.calls=y),O}function B(r,e,s,l,g){let f=He(r),h=je(f,e),y={tag:f,origin:s};return h!==void 0&&(y.classification=h),l!==void 0&&(y.attempt=l),g!==void 0&&(y.cumulativeDurationMs=g),y}var Q=Symbol.for("step_timeout_marker");function we(r){return typeof r!="object"||r===null?!1:r.type==="STEP_TIMEOUT"?!0:Q in r}function qe(r){if(!(typeof r!="object"||r===null)){if(r.type==="STEP_TIMEOUT"){let e=r;return{timeoutMs:e.timeoutMs,stepName:e.stepName,stepKey:e.stepKey,attempt:e.attempt}}if(Q in r)return r[Q]}}var Re=Symbol("early-exit");function Ve(r,e){return{[Re]:!0,error:r,meta:e}}function We(r){return typeof r=="object"&&r!==null&&r[Re]===!0}var ge=Symbol("mapper-exception");function $(r){return{[ge]:!0,thrown:r}}function Je(r){return typeof r=="object"&&r!==null&&r[ge]===!0}function ee(r,e){let{backoff:s,initialDelay:l,maxDelay:g,jitter:f}=e,h;switch(s){case"fixed":h=l;break;case"linear":h=l*r;break;case"exponential":h=l*Math.pow(2,r-1);break}if(h=Math.min(h,g),f){let y=h*.25*Math.random();h=h+y}return Math.floor(h)}function te(r){return new Promise(e=>setTimeout(e,r))}var G={backoff:"exponential",initialDelay:100,maxDelay:3e4,jitter:!0,retryOn:(r,e)=>!0,onRetry:(r,e,s)=>{}};async function se(r,e){let s=Math.max(1,e.attempts),l={backoff:e.backoff??G.backoff,initialDelay:e.initialDelay??G.initialDelay,maxDelay:e.maxDelay??G.maxDelay,jitter:e.jitter??G.jitter,retryOn:e.retryOn??G.retryOn,onRetry:e.onRetry??G.onRetry},g;for(let f=1;f<=s;f++)try{let h=await r();if(h.ok)return h;if(g=h,f<s&&l.retryOn(h.error,f)){let y=ee(f,l);l.onRetry(h.error,f,y),await te(y);continue}return h}catch(h){if(f<s&&l.retryOn(h,f)){let y=ee(f,l);l.onRetry(h,f,y),await te(y);continue}throw h}return g}var fe=Symbol("timeout"),oe=Symbol("timeout-option");function Xe(r){return typeof r=="object"&&r!==null&&r[oe]===!0}async function Ye(r,e,s,l){let g=new AbortController,f=e.onTimeout??"error",h=()=>typeof f=="function"?f({name:s.name,key:s.key,ms:e.ms}):e.error??{type:"STEP_TIMEOUT",stepName:s.name,stepKey:s.key,timeoutMs:e.ms,attempt:s.attempt},y;l?.aborted&&g.abort(l.reason);let O;l&&!l.aborted&&(O=()=>g.abort(l.reason),l.addEventListener("abort",O,{once:!0}));let u=new Promise((v,N)=>{y=setTimeout(()=>{if(f!=="disconnect"&&g.abort(),f==="option"){N({[oe]:!0,ms:e.ms});return}N({[fe]:!0,error:h()})},e.ms)}),U;e.signal?U=Promise.resolve(r(g.signal)):U=Promise.resolve(r());try{return await Promise.race([U,u])}catch(v){if(typeof v=="object"&&v!==null&&v[oe]===!0)throw{[oe]:!0,ms:e.ms};if(typeof v=="object"&&v!==null&&v[fe]===!0){f==="disconnect"&&U.catch(()=>{});let N=v.error;if(typeof N=="object"&&N!==null&&N.type!=="STEP_TIMEOUT"){let Y={timeoutMs:e.ms,stepName:s.name,stepKey:s.key,attempt:s.attempt};Q in N?N[Q]=Y:Object.defineProperty(N,Q,{value:Y,enumerable:!1,writable:!0,configurable:!1})}throw N}throw v}finally{clearTimeout(y),O&&l&&l.removeEventListener("abort",O)}}var z={backoff:"exponential",initialDelay:100,maxDelay:3e4,jitter:!0,retryOn:()=>!0,onRetry:()=>{}};async function Te(r,e){let{onError:s,onEvent:l,catchUnexpected:g,workflowId:f,workflowName:h,context:y,_workflowSignal:O}=e&&typeof e=="object"?e:{},u=f??crypto.randomUUID(),U=g??Ke,v=[],N=0,Y=E=>E??`step_${++N}`,p=E=>{let K=E.context!==void 0||y===void 0?E:{...E,context:y},q=h!==void 0&&K.workflowName===void 0?{...K,workflowName:h}:K;if(q.type==="step_success"){let re=q.stepId;for(let ne=v.length-1;ne>=0;ne--){let H=v[ne];if(H.type==="race"&&!H.winnerId){H.winnerId=re;break}}}l?.(q,y)},D=Ve,J=E=>We(E),L=(E,K)=>E,Pe=E=>typeof E=="function"?!1:!!(E&&typeof E=="object"&&"ok"in E||E&&typeof E=="object"&&"then"in E&&typeof E.then=="function");try{let K=function(a){let m={};for(let[o,n]of Object.entries(a))if(typeof n=="function")m[o]=n;else if(n&&typeof n=="object"&&"fn"in n)m[o]=n.fn;else throw new TypeError(`step.parallel: operation "${o}" must be a function or { fn, errors? } object`);return m},q=function(a,m){let o=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let n=performance.now(),t=!1;v.push({scopeId:o,type:"parallel"});let i=()=>{if(t)return;t=!0;let c=v.findIndex(d=>d.scopeId===o);c!==-1&&v.splice(c,1),p({type:"scope_end",workflowId:u,scopeId:o,ts:Date.now(),durationMs:performance.now()-n})};p({type:"scope_start",workflowId:u,scopeId:o,scopeType:"parallel",name:a,ts:Date.now()});try{let c=await m();if(i(),!c.ok)throw s?.(c.error,a,y),D(c.error,{origin:"result",resultCause:c.cause});return c.value}catch(c){throw i(),c}})()},re=function(a,m){let o=Object.keys(a),n=m.name??`Parallel(${o.join(", ")})`,t=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let i=performance.now(),c=!1;v.push({scopeId:t,type:"parallel"});let d=()=>{if(c)return;c=!0;let w=v.findIndex(T=>T.scopeId===t);w!==-1&&v.splice(w,1),p({type:"scope_end",workflowId:u,scopeId:t,ts:Date.now(),durationMs:performance.now()-i})};p({type:"scope_start",workflowId:u,scopeId:t,scopeType:"parallel",name:n,ts:Date.now()});try{let w=await new Promise(R=>{if(o.length===0){R([]);return}let A=!1,M=o.length,x=new Array(o.length);for(let F=0;F<o.length;F++){let C=o[F],S=F;Promise.resolve(a[C]()).catch(b=>_({type:"PROMISE_REJECTED",cause:b},{cause:{type:"PROMISE_REJECTION",reason:b}})).then(b=>{if(!A){if(!b.ok){A=!0,R([{key:C,result:b}]);return}x[S]={key:C,result:b},M--,M===0&&R(x)}})}});d();let T={};for(let{key:R,result:A}of w){if(!A.ok)throw s?.(A.error,R,y),D(A.error,{origin:"result",resultCause:A.cause});T[R]=A.value}return T}catch(w){throw d(),w}})()};var Ze=K,et=q,tt=re;let E=(a,m,o)=>(async()=>{if(typeof a!="string"||a.length===0)throw new Error('[awaitly] step() requires an explicit string ID as the first argument. Example: step("fetchUser", () => fetchUser(id))');let n=o??{},t=Le(n),i=a,c=n.key??a,d=n.key??a,{description:w,retry:T,timeout:R}=n,A=Y(c),M=l,x=M?performance.now():0,C=Pe(m)?()=>m:m,b={attempts:Math.max(1,T?.attempts??1),backoff:T?.backoff??z.backoff,initialDelay:T?.initialDelay??z.initialDelay,maxDelay:T?.maxDelay??z.maxDelay,jitter:T?.jitter??z.jitter,retryOn:T?.retryOn??z.retryOn,onRetry:T?.onRetry??z.onRetry};l&&p({type:"step_start",workflowId:u,stepId:A,stepKey:c,name:i,description:w,ts:Date.now(),...t&&{metadata:t}});let X;for(let P=1;P<=b.attempts;P++){let _e=M?performance.now():0;try{let k;if(R?k=await Ye(C,R,{name:i,key:c,attempt:P},O):k=await C(),k.ok){let W=performance.now()-x;return p({type:"step_success",workflowId:u,stepId:A,stepKey:c,name:i,description:w,ts:Date.now(),durationMs:W,...t&&{metadata:t}}),d&&p({type:"step_complete",workflowId:u,stepKey:d,name:i,description:w,ts:Date.now(),durationMs:W,result:k,...t&&{metadata:t}}),k.value}if(X=k,P<b.attempts&&b.retryOn(k.error,P)){let W=ee(P,b);p({type:"step_retry",workflowId:u,stepId:A,stepKey:c,name:i,ts:Date.now(),attempt:P+1,maxAttempts:b.attempts,delayMs:W,error:k.error,...t&&{metadata:t},diagnostics:B(k.error,n.errorMeta,"result",P,performance.now()-x)}),b.onRetry(k.error,P,W),await te(W);continue}b.attempts>1&&p({type:"step_retries_exhausted",workflowId:u,stepId:A,stepKey:c,name:i,ts:Date.now(),durationMs:performance.now()-x,attempts:P,lastError:k.error,...t&&{metadata:t},diagnostics:B(k.error,n.errorMeta,"result",P,performance.now()-x)});break}catch(k){let W=performance.now()-_e;if(Xe(k)){let j=k.ms;p({type:"step_timeout",workflowId:u,stepId:A,stepKey:c,name:i,ts:Date.now(),timeoutMs:j,attempt:P,...t&&{metadata:t},diagnostics:B(k,n.errorMeta,"timeout",P)}),p({type:"step_success",workflowId:u,stepId:A,stepKey:c,name:i,description:w,ts:Date.now(),durationMs:performance.now()-x,...t&&{metadata:t}}),d&&p({type:"step_complete",workflowId:u,stepKey:d,name:i,description:w,ts:Date.now(),durationMs:performance.now()-x,result:I(void 0),...t&&{metadata:t}});return}if(J(k))throw p({type:"step_aborted",workflowId:u,stepId:A,stepKey:c,name:i,description:w,ts:Date.now(),durationMs:W,...t&&{metadata:t}}),k;if(we(k)){let j=qe(k),Oe=R?.ms??j?.timeoutMs??0;if(p({type:"step_timeout",workflowId:u,stepId:A,stepKey:c,name:i,ts:Date.now(),timeoutMs:Oe,attempt:P,...t&&{metadata:t},diagnostics:B(k,n.errorMeta,"timeout",P)}),P<b.attempts&&b.retryOn(k,P)){let pe=ee(P,b);p({type:"step_retry",workflowId:u,stepId:A,stepKey:c,name:i,ts:Date.now(),attempt:P+1,maxAttempts:b.attempts,delayMs:pe,error:k,...t&&{metadata:t},diagnostics:B(k,n.errorMeta,"timeout",P,performance.now()-x)}),b.onRetry(k,P,pe),await te(pe);continue}b.attempts>1&&p({type:"step_retries_exhausted",workflowId:u,stepId:A,stepKey:c,name:i,ts:Date.now(),durationMs:performance.now()-x,attempts:P,lastError:k,...t&&{metadata:t},diagnostics:B(k,n.errorMeta,"timeout",P,performance.now()-x)});let ce=performance.now()-x;throw p({type:"step_error",workflowId:u,stepId:A,stepKey:c,name:i,description:w,ts:Date.now(),durationMs:ce,error:k,...t&&{metadata:t},diagnostics:B(k,n.errorMeta,"timeout",P,ce)}),d&&p({type:"step_complete",workflowId:u,stepKey:d,name:i,description:w,ts:Date.now(),durationMs:ce,result:_(k,{cause:k}),meta:{origin:"throw",thrown:k},...t&&{metadata:t}}),s?.(k,i,y),D(k,{origin:"throw",thrown:k})}if(P<b.attempts&&b.retryOn(k,P)){let j=ee(P,b);p({type:"step_retry",workflowId:u,stepId:A,stepKey:c,name:i,ts:Date.now(),attempt:P+1,maxAttempts:b.attempts,delayMs:j,error:k,...t&&{metadata:t},diagnostics:B(k,n.errorMeta,"throw",P,performance.now()-x)}),b.onRetry(k,P,j),await te(j);continue}b.attempts>1&&!we(k)&&p({type:"step_retries_exhausted",workflowId:u,stepId:A,stepKey:c,name:i,ts:Date.now(),durationMs:performance.now()-x,attempts:P,lastError:k,...t&&{metadata:t},diagnostics:B(k,n.errorMeta,"throw",P,performance.now()-x)});let ie=performance.now()-x,Z;try{Z=U(k)}catch(j){throw $(j)}throw p({type:"step_error",workflowId:u,stepId:A,stepKey:c,name:i,description:w,ts:Date.now(),durationMs:ie,error:Z,...t&&{metadata:t},diagnostics:B(k,n.errorMeta,"throw",P,ie)}),d&&p({type:"step_complete",workflowId:u,stepKey:d,name:i,description:w,ts:Date.now(),durationMs:ie,result:_(Z,{cause:k}),meta:{origin:"throw",thrown:k},...t&&{metadata:t}}),s?.(Z,i,y),D(Z,{origin:"throw",thrown:k})}}let V=X,ae=performance.now()-x,ue=L(V.error,{origin:"result",resultCause:V.cause});throw p({type:"step_error",workflowId:u,stepId:A,stepKey:c,name:i,description:w,ts:Date.now(),durationMs:ae,error:ue,...t&&{metadata:t},diagnostics:B(V.error,n.errorMeta,"result",b.attempts,ae)}),d&&p({type:"step_complete",workflowId:u,stepKey:d,name:i,description:w,ts:Date.now(),durationMs:ae,result:V,meta:{origin:"result",resultCause:V.cause},...t&&{metadata:t}}),s?.(ue,i,y),D(ue,{origin:"result",resultCause:V.cause})})();E.try=(a,m,o)=>{if(typeof a!="string"||a.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??a,t=a,i=a,c="error"in o?()=>o.error:o.onError,d=l;return(async()=>{let w=d?performance.now():0;l&&p({type:"step_start",workflowId:u,stepId:i,stepKey:n,name:t,ts:Date.now()});try{let T=await m(),R=performance.now()-w;return p({type:"step_success",workflowId:u,stepId:i,stepKey:n,name:t,ts:Date.now(),durationMs:R}),n&&p({type:"step_complete",workflowId:u,stepKey:n,name:t,ts:Date.now(),durationMs:R,result:I(T)}),T}catch(T){let R=c(T),A=performance.now()-w,M=L(R,{origin:"throw",thrown:T});throw p({type:"step_error",workflowId:u,stepId:i,stepKey:n,name:t,ts:Date.now(),durationMs:A,error:M}),n&&p({type:"step_complete",workflowId:u,stepKey:n,name:t,ts:Date.now(),durationMs:A,result:_(R,{cause:T}),meta:{origin:"throw",thrown:T}}),s?.(M,t,y),D(M,{origin:"throw",thrown:T})}})()},E.fromResult=(a,m,o)=>{if(typeof a!="string"||a.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??a,t=a,i=a,c="error"in o?()=>o.error:o.onError,d=l;return(async()=>{let w=d?performance.now():0;l&&p({type:"step_start",workflowId:u,stepId:i,stepKey:n,name:t,ts:Date.now()});let T=await m();if(T.ok){let R=performance.now()-w;return p({type:"step_success",workflowId:u,stepId:i,stepKey:n,name:t,ts:Date.now(),durationMs:R}),n&&p({type:"step_complete",workflowId:u,stepKey:n,name:t,ts:Date.now(),durationMs:R,result:I(T.value)}),T.value}else{let R=c(T.error),A=performance.now()-w,M=L(R,{origin:"result",resultCause:T.error});throw p({type:"step_error",workflowId:u,stepId:i,stepKey:n,name:t,ts:Date.now(),durationMs:A,error:M}),n&&p({type:"step_complete",workflowId:u,stepKey:n,name:t,ts:Date.now(),durationMs:A,result:_(R,{cause:T.error}),meta:{origin:"result",resultCause:T.error}}),s?.(M,t,y),D(M,{origin:"result",resultCause:T.error})}})()},E.fromNullable=(a,m,o,n)=>{if(typeof a!="string"||a.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 E(a,async()=>{let t=await m();return t!=null?I(t):_(o())},n)},E.retry=(a,m,o)=>{if(typeof a!="string"||a.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 E(a,m,{key:o.key??a,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})},E.withTimeout=(a,m,o)=>{if(typeof a!="string"||a.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 E(a,m,{key:o.key??a,timeout:o})},E.sleep=(a,m,o)=>{if(typeof a!="string"||a.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 m=="string"?Ne(m):m;if(!n)throw new Error(`step.sleep: invalid duration '${m}'`);let t=n.millis,i=o?.signal;return E(a,async()=>{if(O?.aborted||i?.aborted){let c=new Error("Sleep aborted");throw c.name="AbortError",c}return new Promise((c,d)=>{let w={timeoutId:void 0},T=()=>{w.timeoutId&&clearTimeout(w.timeoutId);let R=new Error("Sleep aborted");R.name="AbortError",d(R)};O?.addEventListener("abort",T,{once:!0}),i?.addEventListener("abort",T,{once:!0}),w.timeoutId=setTimeout(()=>{O?.removeEventListener("abort",T),i?.removeEventListener("abort",T),c(I(void 0))},t)})},{key:o?.key??a,description:o?.description})},E.parallel=((...a)=>{if(typeof a[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 m=a[0],o=a[1];if(typeof o=="function")return q(m,o);if(o&&typeof o=="object"&&!Array.isArray(o)){let t=K(o);return re(t,{name:m})}throw new TypeError("step.parallel(name, ...): second argument must be a function (array form) or an object of operations (object form).")}),E.race=(a,m)=>{let o=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let n=performance.now(),t=!1,i={scopeId:o,type:"race",winnerId:void 0};v.push(i);let c=()=>{if(t)return;t=!0;let d=v.findIndex(w=>w.scopeId===o);d!==-1&&v.splice(d,1),p({type:"scope_end",workflowId:u,scopeId:o,ts:Date.now(),durationMs:performance.now()-n,winnerId:i.winnerId})};p({type:"scope_start",workflowId:u,scopeId:o,scopeType:"race",name:a,ts:Date.now()});try{let d=await m();if(c(),!d.ok)throw s?.(d.error,a,y),D(d.error,{origin:"result",resultCause:d.cause});return d.value}catch(d){throw c(),d}})()},E.allSettled=(a,m)=>{let o=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let n=performance.now(),t=!1;v.push({scopeId:o,type:"allSettled"});let i=()=>{if(t)return;t=!0;let c=v.findIndex(d=>d.scopeId===o);c!==-1&&v.splice(c,1),p({type:"scope_end",workflowId:u,scopeId:o,ts:Date.now(),durationMs:performance.now()-n})};p({type:"scope_start",workflowId:u,scopeId:o,scopeType:"allSettled",name:a,ts:Date.now()});try{let c=await m();if(i(),!c.ok)throw s?.(c.error,a,y),D(c.error,{origin:"result",resultCause:c.cause});return c.value}catch(c){throw i(),c}})()},E.if=(a,m,o)=>o(),E.label=E.if,E.branch=async(a,m)=>{let{condition:o,then:n,else:t}=m;if(o())return await n();if(t)return await t()},E.arm=(a,m)=>({fn:a,errors:m}),E.forEach=async(a,m,o)=>{let n=[],t=o.maxIterations,i=0,c="run"in o,d=Symbol.asyncIterator in m?m:(async function*(){yield*m})();for await(let w of d){if(t!==void 0&&i>=t)break;let T;c?T=await o.run(w,i):T=await o.item.handler(w,i,E),n.push(T),i++}return n},E.item=a=>({__forEachItemHandler:!0,handler:a}),E.dep=(a,m)=>m,E.run=(a,m,o)=>E(a,()=>m,o),E.workflow=(a,m,o)=>E(a,m,o),E.andThen=(a,m,o,n)=>E(a,()=>o(m),n),E.match=async(a,m,o,n)=>E(a,async()=>{let t=await m;return t.ok?I(await o.ok(t.value)):I(await o.err(t.error,t.cause))},n),E.all=E.parallel,E.map=async(a,m,o,n)=>{let t=n?.concurrency??m.length;return E(a,()=>t>=m.length?ke(m.map((i,c)=>o(i,c))):(async()=>{let i=[];for(let c=0;c<m.length;c+=t){let d=m.slice(c,c+t),w=await ke(d.map((T,R)=>o(T,c+R)));if(!w.ok)return w;i.push(...w.value)}return I(i)})(),{key:n?.key})},E.withFallback=(a,m,o)=>{if(typeof a!="string"||a.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??a,t=a,i=Y(n),c=l;return(async()=>{let d=c?performance.now():0;l&&p({type:"step_start",workflowId:u,stepId:i,stepKey:n,name:t,ts:Date.now()});let w;try{w=await m()}catch(x){if(J(x))throw p({type:"step_aborted",workflowId:u,stepId:i,stepKey:n,name:t,ts:Date.now(),durationMs:performance.now()-d}),x;let F;try{F=U(x)}catch(S){throw $(S)}if(o.on!==void 0&&o.on!==F){let S=performance.now()-d;throw p({type:"step_error",workflowId:u,stepId:i,stepKey:n,name:t,ts:Date.now(),durationMs:S,error:F}),n&&p({type:"step_complete",workflowId:u,stepKey:n,name:t,ts:Date.now(),durationMs:S,result:_(F,{cause:x}),meta:{origin:"throw",thrown:x}}),s?.(F,t,y),D(F,{origin:"throw",thrown:x})}let C;try{C=await o.fallback()}catch(S){if(J(S))throw p({type:"step_aborted",workflowId:u,stepId:i,stepKey:n,name:t,ts:Date.now(),durationMs:performance.now()-d}),S;let b;try{b=U(S)}catch(V){throw $(V)}let X=performance.now()-d;throw p({type:"step_error",workflowId:u,stepId:i,stepKey:n,name:t,ts:Date.now(),durationMs:X,error:b}),n&&p({type:"step_complete",workflowId:u,stepKey:n,name:t,ts:Date.now(),durationMs:X,result:_(b,{cause:S}),meta:{origin:"throw",thrown:S}}),s?.(b,t,y),D(b,{origin:"throw",thrown:S})}if(C.ok){let S=performance.now()-d;return p({type:"step_success",workflowId:u,stepId:i,stepKey:n,name:t,ts:Date.now(),durationMs:S}),n&&p({type:"step_complete",workflowId:u,stepKey:n,name:t,ts:Date.now(),durationMs:S,result:C,meta:{origin:"fallback",fallbackUsed:!0,fallbackReason:String(F)}}),C.value}else{let S=performance.now()-d,b=L(C.error,{origin:"result",resultCause:C.cause});throw p({type:"step_error",workflowId:u,stepId:i,stepKey:n,name:t,ts:Date.now(),durationMs:S,error:b}),n&&p({type:"step_complete",workflowId:u,stepKey:n,name:t,ts:Date.now(),durationMs:S,result:C,meta:{origin:"result",resultCause:C.cause}}),s?.(b,t,y),D(b,{origin:"result",resultCause:C.cause})}}if(w.ok){let x=performance.now()-d;return p({type:"step_success",workflowId:u,stepId:i,stepKey:n,name:t,ts:Date.now(),durationMs:x}),n&&p({type:"step_complete",workflowId:u,stepKey:n,name:t,ts:Date.now(),durationMs:x,result:w}),w.value}let T=w.error;if(o.on!==void 0&&o.on!==T){let x=performance.now()-d,F=L(T,{origin:"result",resultCause:w.cause});throw p({type:"step_error",workflowId:u,stepId:i,stepKey:n,name:t,ts:Date.now(),durationMs:x,error:F}),n&&p({type:"step_complete",workflowId:u,stepKey:n,name:t,ts:Date.now(),durationMs:x,result:w,meta:{origin:"result",resultCause:w.cause}}),s?.(F,t,y),D(F,{origin:"result",resultCause:w.cause})}let R;try{R=await o.fallback()}catch(x){if(J(x))throw p({type:"step_aborted",workflowId:u,stepId:i,stepKey:n,name:t,ts:Date.now(),durationMs:performance.now()-d}),x;let F;try{F=U(x)}catch(S){throw $(S)}let C=performance.now()-d;throw p({type:"step_error",workflowId:u,stepId:i,stepKey:n,name:t,ts:Date.now(),durationMs:C,error:F}),n&&p({type:"step_complete",workflowId:u,stepKey:n,name:t,ts:Date.now(),durationMs:C,result:_(F,{cause:x}),meta:{origin:"throw",thrown:x}}),s?.(F,t,y),D(F,{origin:"throw",thrown:x})}if(R.ok){let x=performance.now()-d;return p({type:"step_success",workflowId:u,stepId:i,stepKey:n,name:t,ts:Date.now(),durationMs:x}),n&&p({type:"step_complete",workflowId:u,stepKey:n,name:t,ts:Date.now(),durationMs:x,result:R,meta:{origin:"fallback",fallbackUsed:!0,fallbackReason:String(T)}}),R.value}let A=performance.now()-d,M=L(R.error,{origin:"result",resultCause:R.cause});throw p({type:"step_error",workflowId:u,stepId:i,stepKey:n,name:t,ts:Date.now(),durationMs:A,error:M}),n&&p({type:"step_complete",workflowId:u,stepKey:n,name:t,ts:Date.now(),durationMs:A,result:R,meta:{origin:"result",resultCause:R.cause}}),s?.(M,t,y),D(M,{origin:"result",resultCause:R.cause})})()},E.withResource=(a,m)=>{if(typeof a!="string"||a.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=a,n=a,t=Y(o),i=l;return(async()=>{let c=i?performance.now():0;l&&p({type:"step_start",workflowId:u,stepId:t,stepKey:o,name:n,ts:Date.now()});let d;try{d=await m.acquire()}catch(C){if(J(C))throw p({type:"step_aborted",workflowId:u,stepId:t,stepKey:o,name:n,ts:Date.now(),durationMs:performance.now()-c}),C;let S;try{S=U(C)}catch(X){throw $(X)}let b=performance.now()-c;throw p({type:"step_error",workflowId:u,stepId:t,stepKey:o,name:n,ts:Date.now(),durationMs:b,error:S}),o&&p({type:"step_complete",workflowId:u,stepKey:o,name:n,ts:Date.now(),durationMs:b,result:_(S,{cause:C}),meta:{origin:"throw",thrown:C}}),s?.(S,n,y),D(S,{origin:"throw",thrown:C})}if(!d.ok){let C=performance.now()-c,S=L(d.error,{origin:"result",resultCause:d.cause});throw p({type:"step_error",workflowId:u,stepId:t,stepKey:o,name:n,ts:Date.now(),durationMs:C,error:S}),o&&p({type:"step_complete",workflowId:u,stepKey:o,name:n,ts:Date.now(),durationMs:C,result:d,meta:{origin:"result",resultCause:d.cause}}),s?.(S,n,y),D(S,{origin:"result",resultCause:d.cause})}let w=d.value,T,R,A=!1;try{T=await m.use(w)}catch(C){if(J(C)){try{await m.release(w)}catch(S){console.warn(`[awaitly] step.withResource("${a}"): release threw after earlyExit:`,S)}throw C}R=C,A=!0}try{await m.release(w)}catch(C){console.warn(`[awaitly] step.withResource("${a}"): release threw:`,C)}if(A){let C;try{C=U(R)}catch(b){throw $(b)}let S=performance.now()-c;throw p({type:"step_error",workflowId:u,stepId:t,stepKey:o,name:n,ts:Date.now(),durationMs:S,error:C}),o&&p({type:"step_complete",workflowId:u,stepKey:o,name:n,ts:Date.now(),durationMs:S,result:_(C,{cause:R}),meta:{origin:"throw",thrown:R}}),s?.(C,n,y),D(C,{origin:"throw",thrown:R})}let M=T;if(M.ok){let C=performance.now()-c;return p({type:"step_success",workflowId:u,stepId:t,stepKey:o,name:n,ts:Date.now(),durationMs:C}),o&&p({type:"step_complete",workflowId:u,stepKey:o,name:n,ts:Date.now(),durationMs:C,result:M}),M.value}let x=performance.now()-c,F=L(M.error,{origin:"result",resultCause:M.cause});throw p({type:"step_error",workflowId:u,stepId:t,stepKey:o,name:n,ts:Date.now(),durationMs:x,error:F}),o&&p({type:"step_complete",workflowId:u,stepKey:o,name:n,ts:Date.now(),durationMs:x,result:M,meta:{origin:"result",resultCause:M.cause}}),s?.(F,n,y),D(F,{origin:"result",resultCause:M.cause})})()};let H=await r({step:E});if(process.env.NODE_ENV!=="production"&&H!==null&&typeof H=="object"&&"ok"in H&&typeof H.ok=="boolean"){let a=H;(a.ok===!0&&"value"in a||a.ok===!1&&"error"in a)&&console.warn(`awaitly: Workflow executor returned a Result-like object. Return raw values, not ok() or err().
|
|
1
|
+
"use strict";var me=Object.defineProperty;var qe=Object.getOwnPropertyDescriptor;var $e=Object.getOwnPropertyNames;var Ve=Object.prototype.hasOwnProperty;var We=(t,e)=>{for(var o in e)me(t,o,{get:e[o],enumerable:!0})},Je=(t,e,o,u)=>{if(e&&typeof e=="object"||typeof e=="function")for(let g of $e(e))!Ve.call(t,g)&&g!==o&&me(t,g,{get:()=>e[g],enumerable:!(u=qe(e,g))||u.enumerable});return t};var Ye=t=>Je(me({},"__esModule",{value:!0}),t);var ct={};We(ct,{fetchArrayBuffer:()=>Ne,fetchBlob:()=>Be,fetchJson:()=>De,fetchResponse:()=>He,fetchText:()=>Ue});module.exports=Ye(ct);var te=class extends Error{_tag};function N(t,e){return class extends te{_tag=t;constructor(o,u){let g=e?.message?e.message(o??{}):t;if(super(g),this.name=t,Object.setPrototypeOf(this,new.target.prototype),o&&typeof o=="object"){let{_tag:y,name:T,message:E,stack:_,...i}=o,U=Object.prototype.hasOwnProperty.call(i,"cause"),F=U?i.cause:void 0;U&&delete i.cause;let B=u?.cause!==void 0;if(U&&B)throw new TypeError("TaggedError: cannot provide 'cause' in props when also setting ErrorOptions.cause");Object.assign(this,i),U&&(this.cause=F),B&&(this.cause=u?.cause)}else u?.cause!==void 0&&(this.cause=u.cause)}}}Object.defineProperty(N,Symbol.hasInstance,{value:t=>t instanceof te});(g=>{function t(y){return y instanceof Error}g.isError=t;function e(y){return y instanceof te}g.isTaggedError=e;function o(y,T){let E=y._tag,_=T[E];return _(y)}g.match=o;function u(y,T,E){let _=y._tag,i=T[_];return i?i(y):E(y)}g.matchPartial=u})(N||={});var ke=class extends N("TimeoutError",{message:e=>e.operation?`TimeoutError: ${e.operation} timed out after ${e.ms}ms`:`TimeoutError: Operation timed out after ${e.ms}ms`}){},ge=class extends N("RetryExhaustedError",{message:e=>e.operation?`RetryExhaustedError: ${e.operation} failed after ${e.attempts} attempts`:`RetryExhaustedError: Operation failed after ${e.attempts} attempts`}){},Re=class extends N("RateLimitError",{message:e=>e.limiterName?`RateLimitError: Rate limit exceeded for ${e.limiterName}${e.retryAfterMs?`, retry after ${e.retryAfterMs}ms`:""}`:`RateLimitError: Rate limit exceeded${e.retryAfterMs?`, retry after ${e.retryAfterMs}ms`:""}`}){},he=class extends N("CircuitBreakerOpenError",{message:e=>`CircuitBreakerOpenError: Circuit ${e.circuitName} is ${e.state??"OPEN"}${e.retryAfterMs?`, retry after ${Math.ceil(e.retryAfterMs/1e3)}s`:""}`}){},xe=class extends N("ValidationError",{message:e=>`ValidationError: Invalid ${e.field} - ${e.reason}`}){},Ce=class extends N("NotFoundError",{message:e=>e.id?`NotFoundError: ${e.resource} with id ${e.id} not found`:`NotFoundError: ${e.resource} not found`}){},be=class extends N("UnauthorizedError",{message:e=>e.reason?`UnauthorizedError: ${e.reason}`:e.action&&e.resource?`UnauthorizedError: Not authorized to ${e.action} ${e.resource}`:"UnauthorizedError: Access denied"}){},Se=class extends N("NetworkError",{message:e=>e.url?`NetworkError: ${e.reason} (${e.url})`:`NetworkError: ${e.reason}`}){},Ae=class extends N("CompensationError",{message:e=>`CompensationError: Failed to compensate step ${e.step}`}){},ae=class extends N("UnexpectedError",{message:e=>`UnexpectedError: ${e.cause instanceof Error?e.cause.message:String(e.cause??"unknown")}`}){};function ze(t){let e=t.trim().match(/^(\d+(?:\.\d+)?)\s*(ms|s|m|h|d)$/i);if(!e)return;let o=parseFloat(e[1]),u=e[2].toLowerCase();return{_tag:"Duration",millis:o*({ms:1,s:1e3,m:6e4,h:36e5,d:864e5}[u]??1)}}function Ge(t){return new ae({cause:t})}function D(t){return{ok:!0,value:t}}function O(t,e){let o=e?.cause;return{ok:!1,error:t,...o!==void 0?{cause:o}:{}}}function Xe(t){if(t==null)return"unknown";if(typeof t=="string")return t.trim()||"unknown";if(typeof t=="object"){let e=t;if(typeof e._tag=="string"){let o=e._tag.trim();if(o)return o}if(typeof e.tag=="string"){let o=e.tag.trim();if(o)return o}if(typeof e.code=="string"){let o=e.code.trim();if(o)return o}else if(typeof e.code=="number")return String(e.code);if(t instanceof Error&&t.name){let o=t.name.trim();if(o)return o}}return"unknown"}function Qe(t,e){if(!(!e||!t))return e[t]}function Ze(t){let{intent:e,domain:o,owner:u,tags:g,stateChanges:y,emits:T,calls:E}=t;if(!e&&!o&&!u&&!g?.length&&!y?.length&&!T?.length&&!E?.length)return;let _={};return e&&(_.intent=e),o&&(_.domain=o),u&&(_.owner=u),g?.length&&(_.tags=g),y?.length&&(_.stateChanges=y),T?.length&&(_.emits=T),E?.length&&(_.calls=E),_}function H(t,e,o,u,g){let y=Xe(t),T=Qe(y,e),E={tag:y,origin:o};return T!==void 0&&(E.classification=T),u!==void 0&&(E.attempt=u),g!==void 0&&(E.cumulativeDurationMs=g),E}var Z=Symbol.for("step_timeout_marker");function Pe(t){return typeof t!="object"||t===null?!1:t.type==="STEP_TIMEOUT"?!0:Z in t}function et(t){if(!(typeof t!="object"||t===null)){if(t.type==="STEP_TIMEOUT"){let e=t;return{timeoutMs:e.timeoutMs,stepName:e.stepName,stepKey:e.stepKey,attempt:e.attempt}}if(Z in t)return t[Z]}}var Me=Symbol("early-exit");function tt(t,e){return{[Me]:!0,error:t,meta:e}}function rt(t){return typeof t=="object"&&t!==null&&t[Me]===!0}var ve=Symbol("mapper-exception");function G(t){return{[ve]:!0,thrown:t}}function nt(t){return typeof t=="object"&&t!==null&&t[ve]===!0}function re(t,e){let{backoff:o,initialDelay:u,maxDelay:g,jitter:y}=e,T;switch(o){case"fixed":T=u;break;case"linear":T=u*t;break;case"exponential":T=u*Math.pow(2,t-1);break}if(T=Math.min(T,g),y){let E=T*.25*Math.random();T=T+E}return Math.floor(T)}function ne(t){return new Promise(e=>setTimeout(e,t))}var X={backoff:"exponential",initialDelay:100,maxDelay:3e4,jitter:!0,retryOn:(t,e)=>!0,onRetry:(t,e,o)=>{}};async function ue(t,e){let o=Math.max(1,e.attempts),u={backoff:e.backoff??X.backoff,initialDelay:e.initialDelay??X.initialDelay,maxDelay:e.maxDelay??X.maxDelay,jitter:e.jitter??X.jitter,retryOn:e.retryOn??X.retryOn,onRetry:e.onRetry??X.onRetry},g;for(let y=1;y<=o;y++)try{let T=await t();if(T.ok)return T;if(g=T,y<o&&u.retryOn(T.error,y)){let E=re(y,u);u.onRetry(T.error,y,E),await ne(E);continue}return T}catch(T){if(y<o&&u.retryOn(T,y)){let E=re(y,u);u.onRetry(T,y,E),await ne(E);continue}throw T}return g}var _e=Symbol("timeout"),ie=Symbol("timeout-option");function ot(t){return typeof t=="object"&&t!==null&&t[ie]===!0}async function st(t,e,o,u){let g=new AbortController,y=e.onTimeout??"error",T=()=>typeof y=="function"?y({name:o.name,key:o.key,ms:e.ms}):e.error??{type:"STEP_TIMEOUT",stepName:o.name,stepKey:o.key,timeoutMs:e.ms,attempt:o.attempt},E;u?.aborted&&g.abort(u.reason);let _;u&&!u.aborted&&(_=()=>g.abort(u.reason),u.addEventListener("abort",_,{once:!0}));let i=new Promise((F,B)=>{E=setTimeout(()=>{if(y!=="disconnect"&&g.abort(),y==="option"){B({[ie]:!0,ms:e.ms});return}B({[_e]:!0,error:T()})},e.ms)}),U;e.signal?U=Promise.resolve(t(g.signal)):U=Promise.resolve(t());try{return await Promise.race([U,i])}catch(F){if(typeof F=="object"&&F!==null&&F[ie]===!0)throw{[ie]:!0,ms:e.ms};if(typeof F=="object"&&F!==null&&F[_e]===!0){y==="disconnect"&&U.catch(()=>{});let B=F.error;if(typeof B=="object"&&B!==null&&B.type!=="STEP_TIMEOUT"){let z={timeoutMs:e.ms,stepName:o.name,stepKey:o.key,attempt:o.attempt};Z in B?B[Z]=z:Object.defineProperty(B,Z,{value:z,enumerable:!1,writable:!0,configurable:!1})}throw B}throw F}finally{clearTimeout(E),_&&u&&u.removeEventListener("abort",_)}}var Q={backoff:"exponential",initialDelay:100,maxDelay:3e4,jitter:!0,retryOn:()=>!0,onRetry:()=>{}};async function Oe(t,e){let{onError:o,onEvent:u,catchUnexpected:g,workflowId:y,workflowName:T,context:E,_workflowSignal:_}=e&&typeof e=="object"?e:{},i=y??crypto.randomUUID(),U=g??Ge,F=[],B=0,z=d=>d??`step_${++B}`,l=d=>{let K=d.context!==void 0||E===void 0?d:{...d,context:E},$=T!==void 0&&K.workflowName===void 0?{...K,workflowName:T}:K;if($.type==="step_success"){let oe=$.stepId;for(let se=F.length-1;se>=0;se--){let j=F[se];if(j.type==="race"&&!j.winnerId){j.winnerId=oe;break}}}u?.($,E)},I=tt,J=d=>rt(d),q=(d,K)=>d,Ke=d=>typeof d=="function"?!1:!!(d&&typeof d=="object"&&"ok"in d||d&&typeof d=="object"&&"then"in d&&typeof d.then=="function");try{let K=function(a){let m={};for(let[s,n]of Object.entries(a))if(typeof n=="function")m[s]=n;else if(n&&typeof n=="object"&&"fn"in n)m[s]=n.fn;else throw new TypeError(`step.parallel: operation "${s}" must be a function or { fn, errors? } object`);return m},$=function(a,m){let s=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let n=performance.now(),r=!1;F.push({scopeId:s,type:"parallel"});let c=()=>{if(r)return;r=!0;let p=F.findIndex(w=>w.scopeId===s);p!==-1&&F.splice(p,1),l({type:"scope_end",workflowId:i,scopeId:s,ts:Date.now(),durationMs:performance.now()-n})};l({type:"scope_start",workflowId:i,scopeId:s,scopeType:"parallel",name:a,ts:Date.now()});try{let p=await m();if(c(),!p.ok)throw o?.(p.error,a,E),I(p.error,{origin:"result",resultCause:p.cause});return p.value}catch(p){throw c(),p}})()},oe=function(a,m){let s=Object.keys(a),n=m.name??`Parallel(${s.join(", ")})`,r=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let c=performance.now(),p=!1;F.push({scopeId:r,type:"parallel"});let w=()=>{if(p)return;p=!0;let f=F.findIndex(k=>k.scopeId===r);f!==-1&&F.splice(f,1),l({type:"scope_end",workflowId:i,scopeId:r,ts:Date.now(),durationMs:performance.now()-c})};l({type:"scope_start",workflowId:i,scopeId:r,scopeType:"parallel",name:n,ts:Date.now()});try{let f=await new Promise(h=>{if(s.length===0){h([]);return}let A=!1,v=s.length,x=new Array(s.length);for(let M=0;M<s.length;M++){let C=s[M],S=M;Promise.resolve(a[C]()).catch(b=>O({type:"PROMISE_REJECTED",cause:b},{cause:{type:"PROMISE_REJECTION",reason:b}})).then(b=>{if(!A){if(!b.ok){A=!0,h([{key:C,result:b}]);return}x[S]={key:C,result:b},v--,v===0&&h(x)}})}});w();let k={};for(let{key:h,result:A}of f){if(!A.ok)throw o?.(A.error,h,E),I(A.error,{origin:"result",resultCause:A.cause});k[h]=A.value}return k}catch(f){throw w(),f}})()};var pt=K,lt=$,Et=oe;let d=(a,m,s)=>(async()=>{if(typeof a!="string"||a.length===0)throw new Error('[awaitly] step() requires an explicit string ID as the first argument. Example: step("fetchUser", () => fetchUser(id))');let n=s??{},r=Ze(n),c=a,p=n.key??a,w=n.key??a,{description:f,retry:k,timeout:h}=n,A=z(p),v=u,x=v?performance.now():0,C=Ke(m)?()=>m:m,b={attempts:Math.max(1,k?.attempts??1),backoff:k?.backoff??Q.backoff,initialDelay:k?.initialDelay??Q.initialDelay,maxDelay:k?.maxDelay??Q.maxDelay,jitter:k?.jitter??Q.jitter,retryOn:k?.retryOn??Q.retryOn,onRetry:k?.onRetry??Q.onRetry};u&&l({type:"step_start",workflowId:i,stepId:A,stepKey:p,name:c,description:f,ts:Date.now(),...r&&{metadata:r}});let Y;for(let P=1;P<=b.attempts;P++){let je=v?performance.now():0;try{let R;if(h?R=await st(C,h,{name:c,key:p,attempt:P},_):R=await C(),R.ok){let W=performance.now()-x;return l({type:"step_success",workflowId:i,stepId:A,stepKey:p,name:c,description:f,ts:Date.now(),durationMs:W,...r&&{metadata:r}}),w&&l({type:"step_complete",workflowId:i,stepKey:w,name:c,description:f,ts:Date.now(),durationMs:W,result:R,...r&&{metadata:r}}),R.value}if(Y=R,P<b.attempts&&b.retryOn(R.error,P)){let W=re(P,b);l({type:"step_retry",workflowId:i,stepId:A,stepKey:p,name:c,ts:Date.now(),attempt:P+1,maxAttempts:b.attempts,delayMs:W,error:R.error,...r&&{metadata:r},diagnostics:H(R.error,n.errorMeta,"result",P,performance.now()-x)}),b.onRetry(R.error,P,W),await ne(W);continue}b.attempts>1&&l({type:"step_retries_exhausted",workflowId:i,stepId:A,stepKey:p,name:c,ts:Date.now(),durationMs:performance.now()-x,attempts:P,lastError:R.error,...r&&{metadata:r},diagnostics:H(R.error,n.errorMeta,"result",P,performance.now()-x)});break}catch(R){let W=performance.now()-je;if(ot(R)){let L=R.ms;l({type:"step_timeout",workflowId:i,stepId:A,stepKey:p,name:c,ts:Date.now(),timeoutMs:L,attempt:P,...r&&{metadata:r},diagnostics:H(R,n.errorMeta,"timeout",P)}),l({type:"step_success",workflowId:i,stepId:A,stepKey:p,name:c,description:f,ts:Date.now(),durationMs:performance.now()-x,...r&&{metadata:r}}),w&&l({type:"step_complete",workflowId:i,stepKey:w,name:c,description:f,ts:Date.now(),durationMs:performance.now()-x,result:D(void 0),...r&&{metadata:r}});return}if(J(R))throw l({type:"step_aborted",workflowId:i,stepId:A,stepKey:p,name:c,description:f,ts:Date.now(),durationMs:W,...r&&{metadata:r}}),R;if(Pe(R)){let L=et(R),Le=h?.ms??L?.timeoutMs??0;if(l({type:"step_timeout",workflowId:i,stepId:A,stepKey:p,name:c,ts:Date.now(),timeoutMs:Le,attempt:P,...r&&{metadata:r},diagnostics:H(R,n.errorMeta,"timeout",P)}),P<b.attempts&&b.retryOn(R,P)){let de=re(P,b);l({type:"step_retry",workflowId:i,stepId:A,stepKey:p,name:c,ts:Date.now(),attempt:P+1,maxAttempts:b.attempts,delayMs:de,error:R,...r&&{metadata:r},diagnostics:H(R,n.errorMeta,"timeout",P,performance.now()-x)}),b.onRetry(R,P,de),await ne(de);continue}b.attempts>1&&l({type:"step_retries_exhausted",workflowId:i,stepId:A,stepKey:p,name:c,ts:Date.now(),durationMs:performance.now()-x,attempts:P,lastError:R,...r&&{metadata:r},diagnostics:H(R,n.errorMeta,"timeout",P,performance.now()-x)});let Ee=performance.now()-x;throw l({type:"step_error",workflowId:i,stepId:A,stepKey:p,name:c,description:f,ts:Date.now(),durationMs:Ee,error:R,...r&&{metadata:r},diagnostics:H(R,n.errorMeta,"timeout",P,Ee)}),w&&l({type:"step_complete",workflowId:i,stepKey:w,name:c,description:f,ts:Date.now(),durationMs:Ee,result:O(R,{cause:R}),meta:{origin:"throw",thrown:R},...r&&{metadata:r}}),o?.(R,c,E),I(R,{origin:"throw",thrown:R})}if(P<b.attempts&&b.retryOn(R,P)){let L=re(P,b);l({type:"step_retry",workflowId:i,stepId:A,stepKey:p,name:c,ts:Date.now(),attempt:P+1,maxAttempts:b.attempts,delayMs:L,error:R,...r&&{metadata:r},diagnostics:H(R,n.errorMeta,"throw",P,performance.now()-x)}),b.onRetry(R,P,L),await ne(L);continue}b.attempts>1&&!Pe(R)&&l({type:"step_retries_exhausted",workflowId:i,stepId:A,stepKey:p,name:c,ts:Date.now(),durationMs:performance.now()-x,attempts:P,lastError:R,...r&&{metadata:r},diagnostics:H(R,n.errorMeta,"throw",P,performance.now()-x)});let le=performance.now()-x,ee;try{ee=U(R)}catch(L){throw G(L)}throw l({type:"step_error",workflowId:i,stepId:A,stepKey:p,name:c,description:f,ts:Date.now(),durationMs:le,error:ee,...r&&{metadata:r},diagnostics:H(R,n.errorMeta,"throw",P,le)}),w&&l({type:"step_complete",workflowId:i,stepKey:w,name:c,description:f,ts:Date.now(),durationMs:le,result:O(ee,{cause:R}),meta:{origin:"throw",thrown:R},...r&&{metadata:r}}),o?.(ee,c,E),I(ee,{origin:"throw",thrown:R})}}let V=Y,ce=performance.now()-x,pe=q(V.error,{origin:"result",resultCause:V.cause});throw l({type:"step_error",workflowId:i,stepId:A,stepKey:p,name:c,description:f,ts:Date.now(),durationMs:ce,error:pe,...r&&{metadata:r},diagnostics:H(V.error,n.errorMeta,"result",b.attempts,ce)}),w&&l({type:"step_complete",workflowId:i,stepKey:w,name:c,description:f,ts:Date.now(),durationMs:ce,result:V,meta:{origin:"result",resultCause:V.cause},...r&&{metadata:r}}),o?.(pe,c,E),I(pe,{origin:"result",resultCause:V.cause})})();d.try=(a,m,s)=>{if(typeof a!="string"||a.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=s.key??a,r=a,c=a,p="error"in s?()=>s.error:s.onError,w=u;return(async()=>{let f=w?performance.now():0;u&&l({type:"step_start",workflowId:i,stepId:c,stepKey:n,name:r,ts:Date.now()});try{let k=await m(),h=performance.now()-f;return l({type:"step_success",workflowId:i,stepId:c,stepKey:n,name:r,ts:Date.now(),durationMs:h}),n&&l({type:"step_complete",workflowId:i,stepKey:n,name:r,ts:Date.now(),durationMs:h,result:D(k)}),k}catch(k){let h=p(k),A=performance.now()-f,v=q(h,{origin:"throw",thrown:k});throw l({type:"step_error",workflowId:i,stepId:c,stepKey:n,name:r,ts:Date.now(),durationMs:A,error:v}),n&&l({type:"step_complete",workflowId:i,stepKey:n,name:r,ts:Date.now(),durationMs:A,result:O(h,{cause:k}),meta:{origin:"throw",thrown:k}}),o?.(v,r,E),I(v,{origin:"throw",thrown:k})}})()},d.fromResult=(a,m,s)=>{if(typeof a!="string"||a.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=s.key??a,r=a,c=a,p="error"in s?()=>s.error:s.onError,w=u;return(async()=>{let f=w?performance.now():0;u&&l({type:"step_start",workflowId:i,stepId:c,stepKey:n,name:r,ts:Date.now()});let k=await m();if(k.ok){let h=performance.now()-f;return l({type:"step_success",workflowId:i,stepId:c,stepKey:n,name:r,ts:Date.now(),durationMs:h}),n&&l({type:"step_complete",workflowId:i,stepKey:n,name:r,ts:Date.now(),durationMs:h,result:D(k.value)}),k.value}else{let h=p(k.error),A=performance.now()-f,v=q(h,{origin:"result",resultCause:k.error});throw l({type:"step_error",workflowId:i,stepId:c,stepKey:n,name:r,ts:Date.now(),durationMs:A,error:v}),n&&l({type:"step_complete",workflowId:i,stepKey:n,name:r,ts:Date.now(),durationMs:A,result:O(h,{cause:k.error}),meta:{origin:"result",resultCause:k.error}}),o?.(v,r,E),I(v,{origin:"result",resultCause:k.error})}})()},d.fromNullable=(a,m,s,n)=>{if(typeof a!="string"||a.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 d(a,async()=>{let r=await m();return r!=null?D(r):O(s())},n)},d.retry=(a,m,s)=>{if(typeof a!="string"||a.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 d(a,m,{key:s.key??a,retry:{attempts:s.attempts,backoff:s.backoff,initialDelay:s.initialDelay,maxDelay:s.maxDelay,jitter:s.jitter,retryOn:s.retryOn,onRetry:s.onRetry},timeout:s.timeout})},d.withTimeout=(a,m,s)=>{if(typeof a!="string"||a.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 d(a,m,{key:s.key??a,timeout:s})},d.sleep=(a,m,s)=>{if(typeof a!="string"||a.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 m=="string"?ze(m):m;if(!n)throw new Error(`step.sleep: invalid duration '${m}'`);let r=n.millis,c=s?.signal;return d(a,async()=>{if(_?.aborted||c?.aborted){let p=new Error("Sleep aborted");throw p.name="AbortError",p}return new Promise((p,w)=>{let f={timeoutId:void 0},k=()=>{f.timeoutId&&clearTimeout(f.timeoutId);let h=new Error("Sleep aborted");h.name="AbortError",w(h)};_?.addEventListener("abort",k,{once:!0}),c?.addEventListener("abort",k,{once:!0}),f.timeoutId=setTimeout(()=>{_?.removeEventListener("abort",k),c?.removeEventListener("abort",k),p(D(void 0))},r)})},{key:s?.key??a,description:s?.description})},d.parallel=((...a)=>{if(typeof a[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 m=a[0],s=a[1];if(typeof s=="function")return $(m,s);if(s&&typeof s=="object"&&!Array.isArray(s)){let r=K(s);return oe(r,{name:m})}throw new TypeError("step.parallel(name, ...): second argument must be a function (array form) or an object of operations (object form).")}),d.race=(a,m)=>{let s=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let n=performance.now(),r=!1,c={scopeId:s,type:"race",winnerId:void 0};F.push(c);let p=()=>{if(r)return;r=!0;let w=F.findIndex(f=>f.scopeId===s);w!==-1&&F.splice(w,1),l({type:"scope_end",workflowId:i,scopeId:s,ts:Date.now(),durationMs:performance.now()-n,winnerId:c.winnerId})};l({type:"scope_start",workflowId:i,scopeId:s,scopeType:"race",name:a,ts:Date.now()});try{let w=await m();if(p(),!w.ok)throw o?.(w.error,a,E),I(w.error,{origin:"result",resultCause:w.cause});return w.value}catch(w){throw p(),w}})()},d.allSettled=(a,m)=>{let s=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let n=performance.now(),r=!1;F.push({scopeId:s,type:"allSettled"});let c=()=>{if(r)return;r=!0;let p=F.findIndex(w=>w.scopeId===s);p!==-1&&F.splice(p,1),l({type:"scope_end",workflowId:i,scopeId:s,ts:Date.now(),durationMs:performance.now()-n})};l({type:"scope_start",workflowId:i,scopeId:s,scopeType:"allSettled",name:a,ts:Date.now()});try{let p=await m();if(c(),!p.ok)throw o?.(p.error,a,E),I(p.error,{origin:"result",resultCause:p.cause});return p.value}catch(p){throw c(),p}})()},d.if=(a,m,s)=>s(),d.label=d.if,d.branch=async(a,m)=>{let{condition:s,then:n,else:r}=m;if(s())return await n();if(r)return await r()},d.arm=(a,m)=>({fn:a,errors:m}),d.forEach=async(a,m,s)=>{let n=[],r=s.maxIterations,c=0,p="run"in s,w=Symbol.asyncIterator in m?m:(async function*(){yield*m})();for await(let f of w){if(r!==void 0&&c>=r)break;let k;p?k=await s.run(f,c):k=await s.item.handler(f,c,d),n.push(k),c++}return n},d.item=a=>({__forEachItemHandler:!0,handler:a}),d.dep=(a,m)=>m,d.run=(a,m,s)=>d(a,()=>m,s),d.workflow=(a,m,s)=>d(a,m,s),d.andThen=(a,m,s,n)=>d(a,()=>s(m),n),d.match=async(a,m,s,n)=>d(a,async()=>{let r=await m;return r.ok?D(await s.ok(r.value)):D(await s.err(r.error,r.cause))},n),d.all=d.parallel,d.map=async(a,m,s,n)=>{let r=n?.concurrency??m.length;return d(a,()=>r>=m.length?Fe(m.map((c,p)=>s(c,p))):(async()=>{let c=[];for(let p=0;p<m.length;p+=r){let w=m.slice(p,p+r),f=await Fe(w.map((k,h)=>s(k,p+h)));if(!f.ok)return f;c.push(...f.value)}return D(c)})(),{key:n?.key})},d.withFallback=(a,m,s)=>{if(typeof a!="string"||a.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=s.key??a,r=a,c=z(n),p=u;return(async()=>{let w=p?performance.now():0;u&&l({type:"step_start",workflowId:i,stepId:c,stepKey:n,name:r,ts:Date.now()});let f;try{f=await m()}catch(x){if(J(x))throw l({type:"step_aborted",workflowId:i,stepId:c,stepKey:n,name:r,ts:Date.now(),durationMs:performance.now()-w}),x;let M;try{M=U(x)}catch(S){throw G(S)}if(s.on!==void 0&&s.on!==M){let S=performance.now()-w;throw l({type:"step_error",workflowId:i,stepId:c,stepKey:n,name:r,ts:Date.now(),durationMs:S,error:M}),n&&l({type:"step_complete",workflowId:i,stepKey:n,name:r,ts:Date.now(),durationMs:S,result:O(M,{cause:x}),meta:{origin:"throw",thrown:x}}),o?.(M,r,E),I(M,{origin:"throw",thrown:x})}let C;try{C=await s.fallback()}catch(S){if(J(S))throw l({type:"step_aborted",workflowId:i,stepId:c,stepKey:n,name:r,ts:Date.now(),durationMs:performance.now()-w}),S;let b;try{b=U(S)}catch(V){throw G(V)}let Y=performance.now()-w;throw l({type:"step_error",workflowId:i,stepId:c,stepKey:n,name:r,ts:Date.now(),durationMs:Y,error:b}),n&&l({type:"step_complete",workflowId:i,stepKey:n,name:r,ts:Date.now(),durationMs:Y,result:O(b,{cause:S}),meta:{origin:"throw",thrown:S}}),o?.(b,r,E),I(b,{origin:"throw",thrown:S})}if(C.ok){let S=performance.now()-w;return l({type:"step_success",workflowId:i,stepId:c,stepKey:n,name:r,ts:Date.now(),durationMs:S}),n&&l({type:"step_complete",workflowId:i,stepKey:n,name:r,ts:Date.now(),durationMs:S,result:C,meta:{origin:"fallback",fallbackUsed:!0,fallbackReason:String(M)}}),C.value}else{let S=performance.now()-w,b=q(C.error,{origin:"result",resultCause:C.cause});throw l({type:"step_error",workflowId:i,stepId:c,stepKey:n,name:r,ts:Date.now(),durationMs:S,error:b}),n&&l({type:"step_complete",workflowId:i,stepKey:n,name:r,ts:Date.now(),durationMs:S,result:C,meta:{origin:"result",resultCause:C.cause}}),o?.(b,r,E),I(b,{origin:"result",resultCause:C.cause})}}if(f.ok){let x=performance.now()-w;return l({type:"step_success",workflowId:i,stepId:c,stepKey:n,name:r,ts:Date.now(),durationMs:x}),n&&l({type:"step_complete",workflowId:i,stepKey:n,name:r,ts:Date.now(),durationMs:x,result:f}),f.value}let k=f.error;if(s.on!==void 0&&s.on!==k){let x=performance.now()-w,M=q(k,{origin:"result",resultCause:f.cause});throw l({type:"step_error",workflowId:i,stepId:c,stepKey:n,name:r,ts:Date.now(),durationMs:x,error:M}),n&&l({type:"step_complete",workflowId:i,stepKey:n,name:r,ts:Date.now(),durationMs:x,result:f,meta:{origin:"result",resultCause:f.cause}}),o?.(M,r,E),I(M,{origin:"result",resultCause:f.cause})}let h;try{h=await s.fallback()}catch(x){if(J(x))throw l({type:"step_aborted",workflowId:i,stepId:c,stepKey:n,name:r,ts:Date.now(),durationMs:performance.now()-w}),x;let M;try{M=U(x)}catch(S){throw G(S)}let C=performance.now()-w;throw l({type:"step_error",workflowId:i,stepId:c,stepKey:n,name:r,ts:Date.now(),durationMs:C,error:M}),n&&l({type:"step_complete",workflowId:i,stepKey:n,name:r,ts:Date.now(),durationMs:C,result:O(M,{cause:x}),meta:{origin:"throw",thrown:x}}),o?.(M,r,E),I(M,{origin:"throw",thrown:x})}if(h.ok){let x=performance.now()-w;return l({type:"step_success",workflowId:i,stepId:c,stepKey:n,name:r,ts:Date.now(),durationMs:x}),n&&l({type:"step_complete",workflowId:i,stepKey:n,name:r,ts:Date.now(),durationMs:x,result:h,meta:{origin:"fallback",fallbackUsed:!0,fallbackReason:String(k)}}),h.value}let A=performance.now()-w,v=q(h.error,{origin:"result",resultCause:h.cause});throw l({type:"step_error",workflowId:i,stepId:c,stepKey:n,name:r,ts:Date.now(),durationMs:A,error:v}),n&&l({type:"step_complete",workflowId:i,stepKey:n,name:r,ts:Date.now(),durationMs:A,result:h,meta:{origin:"result",resultCause:h.cause}}),o?.(v,r,E),I(v,{origin:"result",resultCause:h.cause})})()},d.withResource=(a,m)=>{if(typeof a!="string"||a.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 s=a,n=a,r=z(s),c=u;return(async()=>{let p=c?performance.now():0;u&&l({type:"step_start",workflowId:i,stepId:r,stepKey:s,name:n,ts:Date.now()});let w;try{w=await m.acquire()}catch(C){if(J(C))throw l({type:"step_aborted",workflowId:i,stepId:r,stepKey:s,name:n,ts:Date.now(),durationMs:performance.now()-p}),C;let S;try{S=U(C)}catch(Y){throw G(Y)}let b=performance.now()-p;throw l({type:"step_error",workflowId:i,stepId:r,stepKey:s,name:n,ts:Date.now(),durationMs:b,error:S}),s&&l({type:"step_complete",workflowId:i,stepKey:s,name:n,ts:Date.now(),durationMs:b,result:O(S,{cause:C}),meta:{origin:"throw",thrown:C}}),o?.(S,n,E),I(S,{origin:"throw",thrown:C})}if(!w.ok){let C=performance.now()-p,S=q(w.error,{origin:"result",resultCause:w.cause});throw l({type:"step_error",workflowId:i,stepId:r,stepKey:s,name:n,ts:Date.now(),durationMs:C,error:S}),s&&l({type:"step_complete",workflowId:i,stepKey:s,name:n,ts:Date.now(),durationMs:C,result:w,meta:{origin:"result",resultCause:w.cause}}),o?.(S,n,E),I(S,{origin:"result",resultCause:w.cause})}let f=w.value,k,h,A=!1;try{k=await m.use(f)}catch(C){if(J(C)){try{await m.release(f)}catch(S){console.warn(`[awaitly] step.withResource("${a}"): release threw after earlyExit:`,S)}throw C}h=C,A=!0}try{await m.release(f)}catch(C){console.warn(`[awaitly] step.withResource("${a}"): release threw:`,C)}if(A){let C;try{C=U(h)}catch(b){throw G(b)}let S=performance.now()-p;throw l({type:"step_error",workflowId:i,stepId:r,stepKey:s,name:n,ts:Date.now(),durationMs:S,error:C}),s&&l({type:"step_complete",workflowId:i,stepKey:s,name:n,ts:Date.now(),durationMs:S,result:O(C,{cause:h}),meta:{origin:"throw",thrown:h}}),o?.(C,n,E),I(C,{origin:"throw",thrown:h})}let v=k;if(v.ok){let C=performance.now()-p;return l({type:"step_success",workflowId:i,stepId:r,stepKey:s,name:n,ts:Date.now(),durationMs:C}),s&&l({type:"step_complete",workflowId:i,stepKey:s,name:n,ts:Date.now(),durationMs:C,result:v}),v.value}let x=performance.now()-p,M=q(v.error,{origin:"result",resultCause:v.cause});throw l({type:"step_error",workflowId:i,stepId:r,stepKey:s,name:n,ts:Date.now(),durationMs:x,error:M}),s&&l({type:"step_complete",workflowId:i,stepKey:s,name:n,ts:Date.now(),durationMs:x,result:v,meta:{origin:"result",resultCause:v.cause}}),o?.(M,n,E),I(M,{origin:"result",resultCause:v.cause})})()};let j=await t({step:d});if(process.env.NODE_ENV!=="production"&&j!==null&&typeof j=="object"&&"ok"in j&&typeof j.ok=="boolean"){let a=j;(a.ok===!0&&"value"in a||a.ok===!1&&"error"in a)&&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
|
|
6
|
+
See: https://jagreehal.github.io/awaitly/guides/troubleshooting/#returning-ok-from-workflow-executor-double-wrapping`)}return D(j)}catch(d){if(nt(d))throw d.thrown;if(J(d)){let $=d.meta.origin==="throw"?d.meta.thrown:d.meta.origin==="result"?d.meta.resultCause:void 0;return O(d.error,{cause:$})}let K=U(d);return o?.(K,"unexpected",E),O(K,{cause:d})}}Oe.strict=(t,e)=>Oe(t,e);async function Fe(t){return t.length===0?D([]):new Promise(e=>{let o=!1,u=t.length,g=new Array(t.length);for(let y=0;y<t.length;y++){let T=y;Promise.resolve(t[T]).catch(E=>O({type:"PROMISE_REJECTED",cause:E},{cause:{type:"PROMISE_REJECTION",reason:E}})).then(E=>{if(!o){if(!E.ok){o=!0,e(E);return}g[T]=E.value,u--,u===0&&e(D(g))}})}})}function at(t,e){let o=new AbortController,u,g=!1,y;return t!==void 0&&(u=setTimeout(()=>{g=!0,o.abort({_tag:"Timeout",ms:t})},t)),e&&(e.aborted?o.abort(e.reason):(y=()=>o.abort(e.reason),e.addEventListener("abort",y,{once:!0}))),{signal:o.signal,cleanup(){u!==void 0&&clearTimeout(u),y&&e&&e.removeEventListener("abort",y)},timedOut:()=>g}}async function it(t,e){if(e)return e(t);let o=await t.text();try{return JSON.parse(o)}catch{return o||void 0}}function ut(t){let e=t.headers.get("content-type");return e!==null&&/\bjson\b/i.test(e)}async function ye(t,e,o){let u=t instanceof Request?t.signal:null,g="signal"in e&&e.signal===null?null:e.signal??u,{signal:y,cleanup:T,timedOut:E}=at(o,g);try{let _=await fetch(t,{...e,signal:y});return D(_)}catch(_){return E()?O({_tag:"FetchTimeoutError",ms:o}):y.aborted?O({_tag:"FetchAbortError",reason:y.reason??g?.reason??_}):O({_tag:"FetchNetworkError",cause:_})}finally{T()}}async function Ie(t,e){let o;try{o=await it(t,e)}catch{o=void 0}return{_tag:"FetchHttpError",status:t.status,statusText:t.statusText,...o!==void 0?{body:o}:{}}}function we(t){return typeof t=="number"?{attempts:t}:t}async function fe(t,e,o,u,g,y){let T=async()=>{let E=await ye(t,e,o);if(!E.ok)return E;let _=E.value;if(!_.ok)return O(await Ie(_,u));try{return D(await y(_))}catch(i){return O({_tag:"FetchNetworkError",cause:i})}};return g!==void 0?ue(T,we(g)):T()}async function Te(t,e){let o=await t;return o.ok?o:o.error._tag==="FetchHttpError"?O(e(o.error)):O(o.error)}function De(t,e){let o=async()=>{let u=await ye(t,e??{},e?.timeoutMs);if(!u.ok)return u;let g=u.value;if(!g.ok){let y=await Ie(g,e?.errorBody);return O(y)}if(g.status===204)return D(null);try{if(e?.strictContentType&&!ut(g)){let E=await g.text();return O({_tag:"FetchParseError",cause:new Error("Expected JSON Content-Type"),text:E})}let y=await g.text();if(y==="")return D(null);let T;try{T=JSON.parse(y)}catch(E){return O({_tag:"FetchParseError",cause:E,text:y})}if(e?.decode){let E=e.decode(T);return E.ok?D(E.value):O({_tag:"FetchDecodeError",issues:E.error.issues})}return D(T)}catch(y){return O({_tag:"FetchParseError",cause:y,text:""})}};return(async()=>{let u=e?.retry!==void 0?await ue(o,we(e.retry)):await o();return u.ok?u:u.error._tag==="FetchHttpError"&&e?.mapError?O(e.mapError(u.error)):u})()}function Ue(t,e){let o=fe(t,e??{},e?.timeoutMs,e?.errorBody,e?.retry,u=>u.text());return e?.mapError?Te(o,e.mapError):o}function Be(t,e){let o=fe(t,e??{},e?.timeoutMs,e?.errorBody,e?.retry,u=>u.blob());return e?.mapError?Te(o,e.mapError):o}function Ne(t,e){let o=fe(t,e??{},e?.timeoutMs,e?.errorBody,e?.retry,u=>u.arrayBuffer());return e?.mapError?Te(o,e.mapError):o}function He(t,e){let o=()=>ye(t,e??{},e?.timeoutMs);return e?.retry!==void 0?ue(o,we(e.retry)):o()}0&&(module.exports={fetchArrayBuffer,fetchBlob,fetchJson,fetchResponse,fetchText});
|
|
7
7
|
//# sourceMappingURL=fetch.cjs.map
|