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