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