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