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