awaitly 1.31.0 → 1.31.1
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 +1 -1
- package/dist/adapters.d.ts +1 -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 +1 -1
- package/dist/batch.d.ts +1 -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 +1 -1
- package/dist/circuit-breaker.d.ts +1 -1
- package/dist/circuit-breaker.js +2 -2
- package/dist/circuit-breaker.js.map +1 -1
- package/dist/conditional.d.cts +1 -1
- package/dist/conditional.d.ts +1 -1
- package/dist/core.cjs +2 -2
- package/dist/core.cjs.map +1 -1
- package/dist/core.d.cts +1 -1
- package/dist/core.d.ts +1 -1
- package/dist/core.js +2 -2
- package/dist/core.js.map +1 -1
- package/dist/diagnostics.cjs +8 -0
- package/dist/diagnostics.cjs.map +1 -0
- package/dist/diagnostics.d.cts +65 -0
- package/dist/diagnostics.d.ts +65 -0
- package/dist/diagnostics.js +8 -0
- package/dist/diagnostics.js.map +1 -0
- package/dist/durable.cjs +3 -3
- package/dist/durable.cjs.map +1 -1
- package/dist/durable.d.cts +4 -4
- package/dist/durable.d.ts +4 -4
- package/dist/durable.js +3 -3
- package/dist/durable.js.map +1 -1
- package/dist/fetch.cjs +2 -2
- package/dist/fetch.cjs.map +1 -1
- package/dist/fetch.d.cts +1 -1
- package/dist/fetch.d.ts +1 -1
- package/dist/fetch.js +2 -2
- package/dist/fetch.js.map +1 -1
- package/dist/{guards-rK0_ZPJk.d.ts → guards-B5lgMJq0.d.ts} +2 -2
- package/dist/{guards-Cujq_17E.d.cts → guards-PU64_GKv.d.cts} +2 -2
- package/dist/{hitl-DtewAZuT.d.ts → hitl-BjeSm1sJ.d.ts} +2 -2
- package/dist/{hitl-Cqyu9HqC.d.cts → hitl-Dyiy0R1v.d.cts} +2 -2
- package/dist/hitl.cjs +2 -2
- package/dist/hitl.cjs.map +1 -1
- package/dist/hitl.d.cts +6 -6
- package/dist/hitl.d.ts +6 -6
- package/dist/hitl.js +2 -2
- package/dist/hitl.js.map +1 -1
- package/dist/otel.cjs +1 -1
- package/dist/otel.cjs.map +1 -1
- package/dist/otel.d.cts +1 -1
- package/dist/otel.d.ts +1 -1
- package/dist/otel.js +1 -1
- package/dist/otel.js.map +1 -1
- package/dist/{persistence-entry-BlWCtxSV.d.ts → persistence-entry-B3ukwbb5.d.ts} +2 -2
- package/dist/{persistence-entry-D4z7BXV_.d.cts → persistence-entry-CgVzswbg.d.cts} +2 -2
- package/dist/persistence.d.cts +3 -3
- package/dist/persistence.d.ts +3 -3
- package/dist/policies.d.cts +1 -1
- package/dist/policies.d.ts +1 -1
- package/dist/ratelimit.cjs +2 -2
- package/dist/ratelimit.cjs.map +1 -1
- package/dist/ratelimit.d.cts +1 -1
- package/dist/ratelimit.d.ts +1 -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 +1 -1
- package/dist/reliability.d.ts +1 -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 +1 -1
- package/dist/resolver.d.ts +1 -1
- 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 +1 -1
- package/dist/resource.d.ts +1 -1
- package/dist/resource.js +2 -2
- package/dist/resource.js.map +1 -1
- package/dist/{run-entry-CFLkUvqw.d.cts → run-entry-C1uFytM6.d.cts} +168 -1
- package/dist/{run-entry-CFLkUvqw.d.ts → run-entry-C1uFytM6.d.ts} +168 -1
- package/dist/run.cjs +2 -2
- package/dist/run.cjs.map +1 -1
- package/dist/run.d.cts +1 -1
- package/dist/run.d.ts +1 -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 +1 -1
- package/dist/saga.d.ts +1 -1
- package/dist/saga.js +2 -2
- package/dist/saga.js.map +1 -1
- package/dist/singleflight.d.cts +1 -1
- package/dist/singleflight.d.ts +1 -1
- package/dist/streaming.cjs +4 -4
- package/dist/streaming.cjs.map +1 -1
- package/dist/streaming.d.cts +3 -3
- package/dist/streaming.d.ts +3 -3
- package/dist/streaming.js +4 -4
- package/dist/streaming.js.map +1 -1
- package/dist/testing.cjs +4 -4
- package/dist/testing.cjs.map +1 -1
- package/dist/testing.d.cts +3 -3
- package/dist/testing.d.ts +3 -3
- package/dist/testing.js +4 -4
- package/dist/testing.js.map +1 -1
- package/dist/{types-Dmw78_CL.d.cts → types-DUWrNIJu.d.cts} +1 -1
- package/dist/{types-DiG4vCyB.d.ts → types-wa_wTOn3.d.ts} +1 -1
- package/dist/webhook.cjs +2 -2
- package/dist/webhook.cjs.map +1 -1
- package/dist/webhook.d.cts +3 -3
- package/dist/webhook.d.ts +3 -3
- 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 +7 -7
- package/dist/workflow.d.ts +7 -7
- package/dist/workflow.js +3 -3
- package/dist/workflow.js.map +1 -1
- package/package.json +7 -2
package/dist/adapters.cjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
"use strict";var re=Object.defineProperty;var be=Object.getOwnPropertyDescriptor;var he=Object.getOwnPropertyNames;var Se=Object.prototype.hasOwnProperty;var Ae=(r,E)=>{for(var y in E)re(r,y,{get:E[y],enumerable:!0})},ve=(r,E,y,d)=>{if(E&&typeof E=="object"||typeof E=="function")for(let S of he(E))!Se.call(r,S)&&S!==y&&re(r,S,{get:()=>E[S],enumerable:!(d=be(E,S))||d.enumerable});return r};var Pe=r=>ve(re({},"__esModule",{value:!0}),r);var je={};Ae(je,{fromCallback:()=>Te,fromEvent:()=>ke,isEventEmitterLike:()=>Re,isEventTimeoutError:()=>de,isInvalidEmitterError:()=>fe});module.exports=Pe(je);function _e(r){let E=r.trim().match(/^(\d+(?:\.\d+)?)\s*(ms|s|m|h|d)$/i);if(!E)return;let y=parseFloat(E[1]),d=E[2].toLowerCase();return{_tag:"Duration",millis:y*({ms:1,s:1e3,m:6e4,h:36e5,d:864e5}[d]??1)}}var Oe="UNEXPECTED_ERROR";function Ie(r){return Oe}function N(r){return{ok:!0,value:r}}function M(r,E){let y=E?.cause;return{ok:!1,error:r,...y!==void 0?{cause:y}:{}}}var H=Symbol.for("step_timeout_marker");function ce(r){return typeof r!="object"||r===null?!1:r.type==="STEP_TIMEOUT"?!0:H in r}function Me(r){if(!(typeof r!="object"||r===null)){if(r.type==="STEP_TIMEOUT"){let E=r;return{timeoutMs:E.timeoutMs,stepName:E.stepName,stepKey:E.stepKey,attempt:E.attempt}}if(H in r)return r[H]}}var we=Symbol("early-exit");function De(r,E){return{[we]:!0,error:r,meta:E}}function Ue(r){return typeof r=="object"&&r!==null&&r[we]===!0}var ye=Symbol("mapper-exception");function $(r){return{[ye]:!0,thrown:r}}function Ne(r){return typeof r=="object"&&r!==null&&r[ye]===!0}function oe(r,E){let{backoff:y,initialDelay:d,maxDelay:S,jitter:A}=E,I;switch(y){case"fixed":I=d;break;case"linear":I=d*r;break;case"exponential":I=d*Math.pow(2,r-1);break}if(I=Math.min(I,S),A){let g=I*.25*Math.random();I=I+g}return Math.floor(I)}function se(r){return new Promise(E=>setTimeout(E,r))}var pe=Symbol("timeout"),ee=Symbol("timeout-option");function Ke(r){return typeof r=="object"&&r!==null&&r[ee]===!0}async function Fe(r,E,y,d){let S=new AbortController,A=E.onTimeout??"error",I=()=>typeof A=="function"?A({name:y.name,key:y.key,ms:E.ms}):E.error??{type:"STEP_TIMEOUT",stepName:y.name,stepKey:y.key,timeoutMs:E.ms,attempt:y.attempt},g;d?.aborted&&S.abort(d.reason);let K;d&&!d.aborted&&(K=()=>S.abort(d.reason),d.addEventListener("abort",K,{once:!0}));let s=new Promise((R,v)=>{g=setTimeout(()=>{if(A!=="disconnect"&&S.abort(),A==="option"){v({[ee]:!0,ms:E.ms});return}v({[pe]:!0,error:I()})},E.ms)}),U;E.signal?U=Promise.resolve(r(S.signal)):U=Promise.resolve(r());try{return await Promise.race([U,s])}catch(R){if(typeof R=="object"&&R!==null&&R[ee]===!0)throw{[ee]:!0,ms:E.ms};if(typeof R=="object"&&R!==null&&R[pe]===!0){A==="disconnect"&&U.catch(()=>{});let v=R.error;if(typeof v=="object"&&v!==null&&v.type!=="STEP_TIMEOUT"){let B={timeoutMs:E.ms,stepName:y.name,stepKey:y.key,attempt:y.attempt};H in v?v[H]=B:Object.defineProperty(v,H,{value:B,enumerable:!1,writable:!0,configurable:!1})}throw v}throw R}finally{clearTimeout(g),K&&d&&d.removeEventListener("abort",K)}}var J={backoff:"exponential",initialDelay:100,maxDelay:3e4,jitter:!0,retryOn:()=>!0,onRetry:()=>{}};async function Ee(r,E){let{onError:y,onEvent:d,catchUnexpected:S,workflowId:A,workflowName:I,context:g,_workflowSignal:K}=E&&typeof E=="object"?E:{},s=A??crypto.randomUUID(),U=S??Ie,R=[],v=0,B=u=>u??`step_${++v}`,a=u=>{let F=u.context!==void 0||g===void 0?u:{...u,context:g},q=I!==void 0&&F.workflowName===void 0?{...F,workflowName:I}:F;if(q.type==="step_success"){let z=q.stepId;for(let Q=R.length-1;Q>=0;Q--){let j=R[Q];if(j.type==="race"&&!j.winnerId){j.winnerId=z;break}}}d?.(q,g)},D=De,Y=u=>Ue(u),W=(u,F)=>u,ge=u=>typeof u=="function"?!1:!!(u&&typeof u=="object"&&"ok"in u||u&&typeof u=="object"&&"then"in u&&typeof u.then=="function");try{let F=function(o){let c={};for(let[e,n]of Object.entries(o))if(typeof n=="function")c[e]=n;else if(n&&typeof n=="object"&&"fn"in n)c[e]=n.fn;else throw new TypeError(`step.parallel: operation "${e}" must be a function or { fn, errors? } object`);return c},q=function(o,c){let e=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let n=performance.now(),t=!1;R.push({scopeId:e,type:"parallel"});let i=()=>{if(t)return;t=!0;let l=R.findIndex(p=>p.scopeId===e);l!==-1&&R.splice(l,1),a({type:"scope_end",workflowId:s,scopeId:e,ts:Date.now(),durationMs:performance.now()-n})};a({type:"scope_start",workflowId:s,scopeId:e,scopeType:"parallel",name:o,ts:Date.now()});try{let l=await c();if(i(),!l.ok)throw y?.(l.error,o,g),D(l.error,{origin:"result",resultCause:l.cause});return l.value}catch(l){throw i(),l}})()},z=function(o,c){let e=Object.keys(o),n=c.name??`Parallel(${e.join(", ")})`,t=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let i=performance.now(),l=!1;R.push({scopeId:t,type:"parallel"});let p=()=>{if(l)return;l=!0;let f=R.findIndex(T=>T.scopeId===t);f!==-1&&R.splice(f,1),a({type:"scope_end",workflowId:s,scopeId:t,ts:Date.now(),durationMs:performance.now()-i})};a({type:"scope_start",workflowId:s,scopeId:t,scopeType:"parallel",name:n,ts:Date.now()});try{let f=await new Promise(m=>{if(e.length===0){m([]);return}let _=!1,x=e.length,b=new Array(e.length);for(let h=0;h<e.length;h++){let k=e[h],w=h;Promise.resolve(o[k]()).catch(P=>M({type:"PROMISE_REJECTED",cause:P},{cause:{type:"PROMISE_REJECTION",reason:P}})).then(P=>{if(!_){if(!P.ok){_=!0,m([{key:k,result:P}]);return}b[w]={key:k,result:P},x--,x===0&&m(b)}})}});p();let T={};for(let{key:m,result:_}of f){if(!_.ok)throw y?.(_.error,m,g),D(_.error,{origin:"result",resultCause:_.cause});T[m]=_.value}return T}catch(f){throw p(),f}})()};var Le=F,Ve=q,Be=z;let u=(o,c,e)=>(async()=>{if(typeof o!="string"||o.length===0)throw new Error('[awaitly] step() requires an explicit string ID as the first argument. Example: step("fetchUser", () => fetchUser(id))');let n=e??{},t=o,i=n.key??o,l=n.key??o,{description:p,retry:f,timeout:T}=n,m=B(i),_=d,x=_?performance.now():0,h=ge(c)?()=>c:c,w={attempts:Math.max(1,f?.attempts??1),backoff:f?.backoff??J.backoff,initialDelay:f?.initialDelay??J.initialDelay,maxDelay:f?.maxDelay??J.maxDelay,jitter:f?.jitter??J.jitter,retryOn:f?.retryOn??J.retryOn,onRetry:f?.onRetry??J.onRetry};d&&a({type:"step_start",workflowId:s,stepId:m,stepKey:i,name:t,description:p,ts:Date.now()});let P;for(let O=1;O<=w.attempts;O++){let Ce=_?performance.now():0;try{let C;if(T?C=await Fe(h,T,{name:t,key:i,attempt:O},K):C=await h(),C.ok){let X=performance.now()-x;return a({type:"step_success",workflowId:s,stepId:m,stepKey:i,name:t,description:p,ts:Date.now(),durationMs:X}),l&&a({type:"step_complete",workflowId:s,stepKey:l,name:t,description:p,ts:Date.now(),durationMs:X,result:C}),C.value}if(P=C,O<w.attempts&&w.retryOn(C.error,O)){let X=oe(O,w);a({type:"step_retry",workflowId:s,stepId:m,stepKey:i,name:t,ts:Date.now(),attempt:O+1,maxAttempts:w.attempts,delayMs:X,error:C.error}),w.onRetry(C.error,O,X),await se(X);continue}w.attempts>1&&a({type:"step_retries_exhausted",workflowId:s,stepId:m,stepKey:i,name:t,ts:Date.now(),durationMs:performance.now()-x,attempts:O,lastError:C.error});break}catch(C){let X=performance.now()-Ce;if(Ke(C)){let V=C.ms;a({type:"step_timeout",workflowId:s,stepId:m,stepKey:i,name:t,ts:Date.now(),timeoutMs:V,attempt:O}),a({type:"step_success",workflowId:s,stepId:m,stepKey:i,name:t,description:p,ts:Date.now(),durationMs:performance.now()-x}),l&&a({type:"step_complete",workflowId:s,stepKey:l,name:t,description:p,ts:Date.now(),durationMs:performance.now()-x,result:N(void 0)});return}if(Y(C))throw a({type:"step_aborted",workflowId:s,stepId:m,stepKey:i,name:t,description:p,ts:Date.now(),durationMs:X}),C;if(ce(C)){let V=Me(C),xe=T?.ms??V?.timeoutMs??0;if(a({type:"step_timeout",workflowId:s,stepId:m,stepKey:i,name:t,ts:Date.now(),timeoutMs:xe,attempt:O}),O<w.attempts&&w.retryOn(C,O)){let ne=oe(O,w);a({type:"step_retry",workflowId:s,stepId:m,stepKey:i,name:t,ts:Date.now(),attempt:O+1,maxAttempts:w.attempts,delayMs:ne,error:C}),w.onRetry(C,O,ne),await se(ne);continue}w.attempts>1&&a({type:"step_retries_exhausted",workflowId:s,stepId:m,stepKey:i,name:t,ts:Date.now(),durationMs:performance.now()-x,attempts:O,lastError:C});let le=performance.now()-x;throw a({type:"step_error",workflowId:s,stepId:m,stepKey:i,name:t,description:p,ts:Date.now(),durationMs:le,error:C}),l&&a({type:"step_complete",workflowId:s,stepKey:l,name:t,description:p,ts:Date.now(),durationMs:le,result:M(C,{cause:C}),meta:{origin:"throw",thrown:C}}),y?.(C,t,g),D(C,{origin:"throw",thrown:C})}if(O<w.attempts&&w.retryOn(C,O)){let V=oe(O,w);a({type:"step_retry",workflowId:s,stepId:m,stepKey:i,name:t,ts:Date.now(),attempt:O+1,maxAttempts:w.attempts,delayMs:V,error:C}),w.onRetry(C,O,V),await se(V);continue}w.attempts>1&&!ce(C)&&a({type:"step_retries_exhausted",workflowId:s,stepId:m,stepKey:i,name:t,ts:Date.now(),durationMs:performance.now()-x,attempts:O,lastError:C});let ie=performance.now()-x,G;try{G=U(C)}catch(V){throw $(V)}throw a({type:"step_error",workflowId:s,stepId:m,stepKey:i,name:t,description:p,ts:Date.now(),durationMs:ie,error:G}),l&&a({type:"step_complete",workflowId:s,stepKey:l,name:t,description:p,ts:Date.now(),durationMs:ie,result:M(G,{cause:C}),meta:{origin:"throw",thrown:C}}),y?.(G,t,g),D(G,{origin:"throw",thrown:C})}}let L=P,Z=performance.now()-x,te=W(L.error,{origin:"result",resultCause:L.cause});throw a({type:"step_error",workflowId:s,stepId:m,stepKey:i,name:t,description:p,ts:Date.now(),durationMs:Z,error:te}),l&&a({type:"step_complete",workflowId:s,stepKey:l,name:t,description:p,ts:Date.now(),durationMs:Z,result:L,meta:{origin:"result",resultCause:L.cause}}),y?.(te,t,g),D(te,{origin:"result",resultCause:L.cause})})();u.try=(o,c,e)=>{if(typeof o!="string"||o.length===0)throw new Error('[awaitly] step.try() requires an explicit string ID as the first argument. Example: step.try("parse", () => JSON.parse(str), { error: "PARSE_ERROR" })');let n=e.key??o,t=o,i=o,l="error"in e?()=>e.error:e.onError,p=d;return(async()=>{let f=p?performance.now():0;d&&a({type:"step_start",workflowId:s,stepId:i,stepKey:n,name:t,ts:Date.now()});try{let T=await c(),m=performance.now()-f;return a({type:"step_success",workflowId:s,stepId:i,stepKey:n,name:t,ts:Date.now(),durationMs:m}),n&&a({type:"step_complete",workflowId:s,stepKey:n,name:t,ts:Date.now(),durationMs:m,result:N(T)}),T}catch(T){let m=l(T),_=performance.now()-f,x=W(m,{origin:"throw",thrown:T});throw a({type:"step_error",workflowId:s,stepId:i,stepKey:n,name:t,ts:Date.now(),durationMs:_,error:x}),n&&a({type:"step_complete",workflowId:s,stepKey:n,name:t,ts:Date.now(),durationMs:_,result:M(m,{cause:T}),meta:{origin:"throw",thrown:T}}),y?.(x,t,g),D(x,{origin:"throw",thrown:T})}})()},u.fromResult=(o,c,e)=>{if(typeof o!="string"||o.length===0)throw new Error('[awaitly] step.fromResult() requires an explicit string ID as the first argument. Example: step.fromResult("callProvider", () => callProvider(input), { onError: (e) => ({ type: "FAILED" }) })');let n=e.key??o,t=o,i=o,l="error"in e?()=>e.error:e.onError,p=d;return(async()=>{let f=p?performance.now():0;d&&a({type:"step_start",workflowId:s,stepId:i,stepKey:n,name:t,ts:Date.now()});let T=await c();if(T.ok){let m=performance.now()-f;return a({type:"step_success",workflowId:s,stepId:i,stepKey:n,name:t,ts:Date.now(),durationMs:m}),n&&a({type:"step_complete",workflowId:s,stepKey:n,name:t,ts:Date.now(),durationMs:m,result:N(T.value)}),T.value}else{let m=l(T.error),_=performance.now()-f,x=W(m,{origin:"result",resultCause:T.error});throw a({type:"step_error",workflowId:s,stepId:i,stepKey:n,name:t,ts:Date.now(),durationMs:_,error:x}),n&&a({type:"step_complete",workflowId:s,stepKey:n,name:t,ts:Date.now(),durationMs:_,result:M(m,{cause:T.error}),meta:{origin:"result",resultCause:T.error}}),y?.(x,t,g),D(x,{origin:"result",resultCause:T.error})}})()},u.fromNullable=(o,c,e,n)=>{if(typeof o!="string"||o.length===0)throw new Error('[awaitly] step.fromNullable() requires an explicit string ID as the first argument. Example: step.fromNullable("getUser", () => db.find(id), () => ({ type: "NOT_FOUND" }))');return u(o,async()=>{let t=await c();return t!=null?N(t):M(e())},n)},u.retry=(o,c,e)=>{if(typeof o!="string"||o.length===0)throw new Error('[awaitly] step.retry() requires an explicit string ID as the first argument. Example: step.retry("fetchData", () => fetchData(), { attempts: 3 })');return u(o,c,{key:e.key??o,retry:{attempts:e.attempts,backoff:e.backoff,initialDelay:e.initialDelay,maxDelay:e.maxDelay,jitter:e.jitter,retryOn:e.retryOn,onRetry:e.onRetry},timeout:e.timeout})},u.withTimeout=(o,c,e)=>{if(typeof o!="string"||o.length===0)throw new Error('[awaitly] step.withTimeout() requires an explicit string ID as the first argument. Example: step.withTimeout("slowOp", () => slowOp(), { ms: 5000 })');return u(o,c,{key:e.key??o,timeout:e})},u.sleep=(o,c,e)=>{if(typeof o!="string"||o.length===0)throw new Error('[awaitly] step.sleep() requires an explicit string ID as the first argument. Example: step.sleep("delay", "5s")');let n=typeof c=="string"?_e(c):c;if(!n)throw new Error(`step.sleep: invalid duration '${c}'`);let t=n.millis,i=e?.signal;return u(o,async()=>{if(K?.aborted||i?.aborted){let l=new Error("Sleep aborted");throw l.name="AbortError",l}return new Promise((l,p)=>{let f={timeoutId:void 0},T=()=>{f.timeoutId&&clearTimeout(f.timeoutId);let m=new Error("Sleep aborted");m.name="AbortError",p(m)};K?.addEventListener("abort",T,{once:!0}),i?.addEventListener("abort",T,{once:!0}),f.timeoutId=setTimeout(()=>{K?.removeEventListener("abort",T),i?.removeEventListener("abort",T),l(N(void 0))},t)})},{key:e?.key??o,description:e?.description})},u.parallel=((...o)=>{if(typeof o[0]!="string")throw new TypeError("step.parallel(name, ...): first argument must be a string (step name). Example: step.parallel('Fetch data', { user: () => fetchUser(), posts: () => fetchPosts() })");let c=o[0],e=o[1];if(typeof e=="function")return q(c,e);if(e&&typeof e=="object"&&!Array.isArray(e)){let t=F(e);return z(t,{name:c})}throw new TypeError("step.parallel(name, ...): second argument must be a function (array form) or an object of operations (object form).")}),u.race=(o,c)=>{let e=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let n=performance.now(),t=!1,i={scopeId:e,type:"race",winnerId:void 0};R.push(i);let l=()=>{if(t)return;t=!0;let p=R.findIndex(f=>f.scopeId===e);p!==-1&&R.splice(p,1),a({type:"scope_end",workflowId:s,scopeId:e,ts:Date.now(),durationMs:performance.now()-n,winnerId:i.winnerId})};a({type:"scope_start",workflowId:s,scopeId:e,scopeType:"race",name:o,ts:Date.now()});try{let p=await c();if(l(),!p.ok)throw y?.(p.error,o,g),D(p.error,{origin:"result",resultCause:p.cause});return p.value}catch(p){throw l(),p}})()},u.allSettled=(o,c)=>{let e=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let n=performance.now(),t=!1;R.push({scopeId:e,type:"allSettled"});let i=()=>{if(t)return;t=!0;let l=R.findIndex(p=>p.scopeId===e);l!==-1&&R.splice(l,1),a({type:"scope_end",workflowId:s,scopeId:e,ts:Date.now(),durationMs:performance.now()-n})};a({type:"scope_start",workflowId:s,scopeId:e,scopeType:"allSettled",name:o,ts:Date.now()});try{let l=await c();if(i(),!l.ok)throw y?.(l.error,o,g),D(l.error,{origin:"result",resultCause:l.cause});return l.value}catch(l){throw i(),l}})()},u.if=(o,c,e)=>e(),u.label=u.if,u.branch=async(o,c)=>{let{condition:e,then:n,else:t}=c;if(e())return await n();if(t)return await t()},u.arm=(o,c)=>({fn:o,errors:c}),u.forEach=async(o,c,e)=>{let n=[],t=e.maxIterations,i=0,l="run"in e,p=Symbol.asyncIterator in c?c:(async function*(){yield*c})();for await(let f of p){if(t!==void 0&&i>=t)break;let T;l?T=await e.run(f,i):T=await e.item.handler(f,i,u),n.push(T),i++}return n},u.item=o=>({__forEachItemHandler:!0,handler:o}),u.dep=(o,c)=>c,u.run=(o,c,e)=>u(o,()=>c,e),u.workflow=(o,c,e)=>u(o,c,e),u.andThen=(o,c,e,n)=>u(o,()=>e(c),n),u.match=async(o,c,e,n)=>u(o,async()=>{let t=await c;return t.ok?N(await e.ok(t.value)):N(await e.err(t.error,t.cause))},n),u.all=u.parallel,u.map=async(o,c,e,n)=>{let t=n?.concurrency??c.length;return u(o,()=>t>=c.length?me(c.map((i,l)=>e(i,l))):(async()=>{let i=[];for(let l=0;l<c.length;l+=t){let p=c.slice(l,l+t),f=await me(p.map((T,m)=>e(T,l+m)));if(!f.ok)return f;i.push(...f.value)}return N(i)})(),{key:n?.key})},u.withFallback=(o,c,e)=>{if(typeof o!="string"||o.length===0)throw new Error('[awaitly] step.withFallback() requires an explicit string ID as the first argument. Example: step.withFallback("getUser", () => fetchUser(id), { fallback: () => fetchFromCache(id) })');let n=e.key??o,t=o,i=B(n),l=d;return(async()=>{let p=l?performance.now():0;d&&a({type:"step_start",workflowId:s,stepId:i,stepKey:n,name:t,ts:Date.now()});let f;try{f=await c()}catch(b){if(Y(b))throw a({type:"step_aborted",workflowId:s,stepId:i,stepKey:n,name:t,ts:Date.now(),durationMs:performance.now()-p}),b;let h;try{h=U(b)}catch(w){throw $(w)}if(e.on!==void 0&&e.on!==h){let w=performance.now()-p;throw a({type:"step_error",workflowId:s,stepId:i,stepKey:n,name:t,ts:Date.now(),durationMs:w,error:h}),n&&a({type:"step_complete",workflowId:s,stepKey:n,name:t,ts:Date.now(),durationMs:w,result:M(h,{cause:b}),meta:{origin:"throw",thrown:b}}),y?.(h,t,g),D(h,{origin:"throw",thrown:b})}let k;try{k=await e.fallback()}catch(w){if(Y(w))throw a({type:"step_aborted",workflowId:s,stepId:i,stepKey:n,name:t,ts:Date.now(),durationMs:performance.now()-p}),w;let P;try{P=U(w)}catch(Z){throw $(Z)}let L=performance.now()-p;throw a({type:"step_error",workflowId:s,stepId:i,stepKey:n,name:t,ts:Date.now(),durationMs:L,error:P}),n&&a({type:"step_complete",workflowId:s,stepKey:n,name:t,ts:Date.now(),durationMs:L,result:M(P,{cause:w}),meta:{origin:"throw",thrown:w}}),y?.(P,t,g),D(P,{origin:"throw",thrown:w})}if(k.ok){let w=performance.now()-p;return a({type:"step_success",workflowId:s,stepId:i,stepKey:n,name:t,ts:Date.now(),durationMs:w}),n&&a({type:"step_complete",workflowId:s,stepKey:n,name:t,ts:Date.now(),durationMs:w,result:k,meta:{origin:"fallback",fallbackUsed:!0,fallbackReason:String(h)}}),k.value}else{let w=performance.now()-p,P=W(k.error,{origin:"result",resultCause:k.cause});throw a({type:"step_error",workflowId:s,stepId:i,stepKey:n,name:t,ts:Date.now(),durationMs:w,error:P}),n&&a({type:"step_complete",workflowId:s,stepKey:n,name:t,ts:Date.now(),durationMs:w,result:k,meta:{origin:"result",resultCause:k.cause}}),y?.(P,t,g),D(P,{origin:"result",resultCause:k.cause})}}if(f.ok){let b=performance.now()-p;return a({type:"step_success",workflowId:s,stepId:i,stepKey:n,name:t,ts:Date.now(),durationMs:b}),n&&a({type:"step_complete",workflowId:s,stepKey:n,name:t,ts:Date.now(),durationMs:b,result:f}),f.value}let T=f.error;if(e.on!==void 0&&e.on!==T){let b=performance.now()-p,h=W(T,{origin:"result",resultCause:f.cause});throw a({type:"step_error",workflowId:s,stepId:i,stepKey:n,name:t,ts:Date.now(),durationMs:b,error:h}),n&&a({type:"step_complete",workflowId:s,stepKey:n,name:t,ts:Date.now(),durationMs:b,result:f,meta:{origin:"result",resultCause:f.cause}}),y?.(h,t,g),D(h,{origin:"result",resultCause:f.cause})}let m;try{m=await e.fallback()}catch(b){if(Y(b))throw a({type:"step_aborted",workflowId:s,stepId:i,stepKey:n,name:t,ts:Date.now(),durationMs:performance.now()-p}),b;let h;try{h=U(b)}catch(w){throw $(w)}let k=performance.now()-p;throw a({type:"step_error",workflowId:s,stepId:i,stepKey:n,name:t,ts:Date.now(),durationMs:k,error:h}),n&&a({type:"step_complete",workflowId:s,stepKey:n,name:t,ts:Date.now(),durationMs:k,result:M(h,{cause:b}),meta:{origin:"throw",thrown:b}}),y?.(h,t,g),D(h,{origin:"throw",thrown:b})}if(m.ok){let b=performance.now()-p;return a({type:"step_success",workflowId:s,stepId:i,stepKey:n,name:t,ts:Date.now(),durationMs:b}),n&&a({type:"step_complete",workflowId:s,stepKey:n,name:t,ts:Date.now(),durationMs:b,result:m,meta:{origin:"fallback",fallbackUsed:!0,fallbackReason:String(T)}}),m.value}let _=performance.now()-p,x=W(m.error,{origin:"result",resultCause:m.cause});throw a({type:"step_error",workflowId:s,stepId:i,stepKey:n,name:t,ts:Date.now(),durationMs:_,error:x}),n&&a({type:"step_complete",workflowId:s,stepKey:n,name:t,ts:Date.now(),durationMs:_,result:m,meta:{origin:"result",resultCause:m.cause}}),y?.(x,t,g),D(x,{origin:"result",resultCause:m.cause})})()},u.withResource=(o,c)=>{if(typeof o!="string"||o.length===0)throw new Error('[awaitly] step.withResource() requires an explicit string ID as the first argument. Example: step.withResource("useDb", { acquire: () => connect(), use: (db) => query(db), release: (db) => db.close() })');let e=o,n=o,t=B(e),i=d;return(async()=>{let l=i?performance.now():0;d&&a({type:"step_start",workflowId:s,stepId:t,stepKey:e,name:n,ts:Date.now()});let p;try{p=await c.acquire()}catch(k){if(Y(k))throw a({type:"step_aborted",workflowId:s,stepId:t,stepKey:e,name:n,ts:Date.now(),durationMs:performance.now()-l}),k;let w;try{w=U(k)}catch(L){throw $(L)}let P=performance.now()-l;throw a({type:"step_error",workflowId:s,stepId:t,stepKey:e,name:n,ts:Date.now(),durationMs:P,error:w}),e&&a({type:"step_complete",workflowId:s,stepKey:e,name:n,ts:Date.now(),durationMs:P,result:M(w,{cause:k}),meta:{origin:"throw",thrown:k}}),y?.(w,n,g),D(w,{origin:"throw",thrown:k})}if(!p.ok){let k=performance.now()-l,w=W(p.error,{origin:"result",resultCause:p.cause});throw a({type:"step_error",workflowId:s,stepId:t,stepKey:e,name:n,ts:Date.now(),durationMs:k,error:w}),e&&a({type:"step_complete",workflowId:s,stepKey:e,name:n,ts:Date.now(),durationMs:k,result:p,meta:{origin:"result",resultCause:p.cause}}),y?.(w,n,g),D(w,{origin:"result",resultCause:p.cause})}let f=p.value,T,m,_=!1;try{T=await c.use(f)}catch(k){if(Y(k)){try{await c.release(f)}catch(w){console.warn(`[awaitly] step.withResource("${o}"): release threw after earlyExit:`,w)}throw k}m=k,_=!0}try{await c.release(f)}catch(k){console.warn(`[awaitly] step.withResource("${o}"): release threw:`,k)}if(_){let k;try{k=U(m)}catch(P){throw $(P)}let w=performance.now()-l;throw a({type:"step_error",workflowId:s,stepId:t,stepKey:e,name:n,ts:Date.now(),durationMs:w,error:k}),e&&a({type:"step_complete",workflowId:s,stepKey:e,name:n,ts:Date.now(),durationMs:w,result:M(k,{cause:m}),meta:{origin:"throw",thrown:m}}),y?.(k,n,g),D(k,{origin:"throw",thrown:m})}let x=T;if(x.ok){let k=performance.now()-l;return a({type:"step_success",workflowId:s,stepId:t,stepKey:e,name:n,ts:Date.now(),durationMs:k}),e&&a({type:"step_complete",workflowId:s,stepKey:e,name:n,ts:Date.now(),durationMs:k,result:x}),x.value}let b=performance.now()-l,h=W(x.error,{origin:"result",resultCause:x.cause});throw a({type:"step_error",workflowId:s,stepId:t,stepKey:e,name:n,ts:Date.now(),durationMs:b,error:h}),e&&a({type:"step_complete",workflowId:s,stepKey:e,name:n,ts:Date.now(),durationMs:b,result:x,meta:{origin:"result",resultCause:x.cause}}),y?.(h,n,g),D(h,{origin:"result",resultCause:x.cause})})()};let j=await r({step:u});if(process.env.NODE_ENV!=="production"&&j!==null&&typeof j=="object"&&"ok"in j&&typeof j.ok=="boolean"){let o=j;(o.ok===!0&&"value"in o||o.ok===!1&&"error"in o)&&console.warn(`awaitly: Workflow executor returned a Result-like object. Return raw values, not ok() or err().
|
|
1
|
+
"use strict";var ie=Object.defineProperty;var Se=Object.getOwnPropertyDescriptor;var Ae=Object.getOwnPropertyNames;var ve=Object.prototype.hasOwnProperty;var _e=(n,s)=>{for(var c in s)ie(n,c,{get:s[c],enumerable:!0})},Pe=(n,s,c,w)=>{if(s&&typeof s=="object"||typeof s=="function")for(let S of Ae(s))!ve.call(n,S)&&S!==c&&ie(n,S,{get:()=>s[S],enumerable:!(w=Se(s,S))||w.enumerable});return n};var Oe=n=>Pe(ie({},"__esModule",{value:!0}),n);var qe={};_e(qe,{fromCallback:()=>Re,fromEvent:()=>ge,isEventEmitterLike:()=>Ce,isEventTimeoutError:()=>Te,isInvalidEmitterError:()=>ke});module.exports=Oe(qe);function Me(n){let s=n.trim().match(/^(\d+(?:\.\d+)?)\s*(ms|s|m|h|d)$/i);if(!s)return;let c=parseFloat(s[1]),w=s[2].toLowerCase();return{_tag:"Duration",millis:c*({ms:1,s:1e3,m:6e4,h:36e5,d:864e5}[w]??1)}}var Ie="UNEXPECTED_ERROR";function De(n){return Ie}function K(n){return{ok:!0,value:n}}function D(n,s){let c=s?.cause;return{ok:!1,error:n,...c!==void 0?{cause:c}:{}}}function Ue(n){if(n==null)return"unknown";if(typeof n=="string")return n.trim()||"unknown";if(typeof n=="object"){let s=n;if(typeof s._tag=="string"){let c=s._tag.trim();if(c)return c}if(typeof s.tag=="string"){let c=s.tag.trim();if(c)return c}if(typeof s.code=="string"){let c=s.code.trim();if(c)return c}else if(typeof s.code=="number")return String(s.code);if(n instanceof Error&&n.name){let c=n.name.trim();if(c)return c}}return"unknown"}function Ne(n,s){if(!(!s||!n))return s[n]}function Ke(n){let{intent:s,domain:c,owner:w,tags:S,stateChanges:v,emits:_,calls:y}=n;if(!s&&!c&&!w&&!S?.length&&!v?.length&&!_?.length&&!y?.length)return;let I={};return s&&(I.intent=s),c&&(I.domain=c),w&&(I.owner=w),S?.length&&(I.tags=S),v?.length&&(I.stateChanges=v),_?.length&&(I.emits=_),y?.length&&(I.calls=y),I}function F(n,s,c,w,S){let v=Ue(n),_=Ne(v,s),y={tag:v,origin:c};return _!==void 0&&(y.classification=_),w!==void 0&&(y.attempt=w),S!==void 0&&(y.cumulativeDurationMs=S),y}var z=Symbol.for("step_timeout_marker");function Ee(n){return typeof n!="object"||n===null?!1:n.type==="STEP_TIMEOUT"?!0:z in n}function Fe(n){if(!(typeof n!="object"||n===null)){if(n.type==="STEP_TIMEOUT"){let s=n;return{timeoutMs:s.timeoutMs,stepName:s.stepName,stepKey:s.stepKey,attempt:s.attempt}}if(z in n)return n[z]}}var ye=Symbol("early-exit");function je(n,s){return{[ye]:!0,error:n,meta:s}}function Le(n){return typeof n=="object"&&n!==null&&n[ye]===!0}var fe=Symbol("mapper-exception");function H(n){return{[fe]:!0,thrown:n}}function Ve(n){return typeof n=="object"&&n!==null&&n[fe]===!0}function ue(n,s){let{backoff:c,initialDelay:w,maxDelay:S,jitter:v}=s,_;switch(c){case"fixed":_=w;break;case"linear":_=w*n;break;case"exponential":_=w*Math.pow(2,n-1);break}if(_=Math.min(_,S),v){let y=_*.25*Math.random();_=_+y}return Math.floor(_)}function le(n){return new Promise(s=>setTimeout(s,n))}var me=Symbol("timeout"),te=Symbol("timeout-option");function Be(n){return typeof n=="object"&&n!==null&&n[te]===!0}async function We(n,s,c,w){let S=new AbortController,v=s.onTimeout??"error",_=()=>typeof v=="function"?v({name:c.name,key:c.key,ms:s.ms}):s.error??{type:"STEP_TIMEOUT",stepName:c.name,stepKey:c.key,timeoutMs:s.ms,attempt:c.attempt},y;w?.aborted&&S.abort(w.reason);let I;w&&!w.aborted&&(I=()=>S.abort(w.reason),w.addEventListener("abort",I,{once:!0}));let a=new Promise((x,M)=>{y=setTimeout(()=>{if(v!=="disconnect"&&S.abort(),v==="option"){M({[te]:!0,ms:s.ms});return}M({[me]:!0,error:_()})},s.ms)}),N;s.signal?N=Promise.resolve(n(S.signal)):N=Promise.resolve(n());try{return await Promise.race([N,a])}catch(x){if(typeof x=="object"&&x!==null&&x[te]===!0)throw{[te]:!0,ms:s.ms};if(typeof x=="object"&&x!==null&&x[me]===!0){v==="disconnect"&&N.catch(()=>{});let M=x.error;if(typeof M=="object"&&M!==null&&M.type!=="STEP_TIMEOUT"){let B={timeoutMs:s.ms,stepName:c.name,stepKey:c.key,attempt:c.attempt};z in M?M[z]=B:Object.defineProperty(M,z,{value:B,enumerable:!1,writable:!0,configurable:!1})}throw M}throw x}finally{clearTimeout(y),I&&w&&w.removeEventListener("abort",I)}}var G={backoff:"exponential",initialDelay:100,maxDelay:3e4,jitter:!0,retryOn:()=>!0,onRetry:()=>{}};async function we(n,s){let{onError:c,onEvent:w,catchUnexpected:S,workflowId:v,workflowName:_,context:y,_workflowSignal:I}=s&&typeof s=="object"?s:{},a=v??crypto.randomUUID(),N=S??De,x=[],M=0,B=p=>p??`step_${++M}`,l=p=>{let j=p.context!==void 0||y===void 0?p:{...p,context:y},q=_!==void 0&&j.workflowName===void 0?{...j,workflowName:_}:j;if(q.type==="step_success"){let Z=q.stepId;for(let ee=x.length-1;ee>=0;ee--){let L=x[ee];if(L.type==="race"&&!L.winnerId){L.winnerId=Z;break}}}w?.(q,y)},U=je,$=p=>Le(p),W=(p,j)=>p,xe=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 j=function(o){let E={};for(let[r,t]of Object.entries(o))if(typeof t=="function")E[r]=t;else if(t&&typeof t=="object"&&"fn"in t)E[r]=t.fn;else throw new TypeError(`step.parallel: operation "${r}" must be a function or { fn, errors? } object`);return E},q=function(o,E){let r=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let t=performance.now(),e=!1;x.push({scopeId:r,type:"parallel"});let i=()=>{if(e)return;e=!0;let u=x.findIndex(m=>m.scopeId===r);u!==-1&&x.splice(u,1),l({type:"scope_end",workflowId:a,scopeId:r,ts:Date.now(),durationMs:performance.now()-t})};l({type:"scope_start",workflowId:a,scopeId:r,scopeType:"parallel",name:o,ts:Date.now()});try{let u=await E();if(i(),!u.ok)throw c?.(u.error,o,y),U(u.error,{origin:"result",resultCause:u.cause});return u.value}catch(u){throw i(),u}})()},Z=function(o,E){let r=Object.keys(o),t=E.name??`Parallel(${r.join(", ")})`,e=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let i=performance.now(),u=!1;x.push({scopeId:e,type:"parallel"});let m=()=>{if(u)return;u=!0;let d=x.findIndex(f=>f.scopeId===e);d!==-1&&x.splice(d,1),l({type:"scope_end",workflowId:a,scopeId:e,ts:Date.now(),durationMs:performance.now()-i})};l({type:"scope_start",workflowId:a,scopeId:e,scopeType:"parallel",name:t,ts:Date.now()});try{let d=await new Promise(k=>{if(r.length===0){k([]);return}let b=!1,O=r.length,R=new Array(r.length);for(let P=0;P<r.length;P++){let g=r[P],h=P;Promise.resolve(o[g]()).catch(C=>D({type:"PROMISE_REJECTED",cause:C},{cause:{type:"PROMISE_REJECTION",reason:C}})).then(C=>{if(!b){if(!C.ok){b=!0,k([{key:g,result:C}]);return}R[h]={key:g,result:C},O--,O===0&&k(R)}})}});m();let f={};for(let{key:k,result:b}of d){if(!b.ok)throw c?.(b.error,k,y),U(b.error,{origin:"result",resultCause:b.cause});f[k]=b.value}return f}catch(d){throw m(),d}})()};var Xe=j,Ye=q,$e=Z;let p=(o,E,r)=>(async()=>{if(typeof o!="string"||o.length===0)throw new Error('[awaitly] step() requires an explicit string ID as the first argument. Example: step("fetchUser", () => fetchUser(id))');let t=r??{},e=Ke(t),i=o,u=t.key??o,m=t.key??o,{description:d,retry:f,timeout:k}=t,b=B(u),O=w,R=O?performance.now():0,g=xe(E)?()=>E:E,C={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&&l({type:"step_start",workflowId:a,stepId:b,stepKey:u,name:i,description:d,ts:Date.now(),...e&&{metadata:e}});let J;for(let A=1;A<=C.attempts;A++){let he=O?performance.now():0;try{let T;if(k?T=await We(g,k,{name:i,key:u,attempt:A},I):T=await g(),T.ok){let Y=performance.now()-R;return l({type:"step_success",workflowId:a,stepId:b,stepKey:u,name:i,description:d,ts:Date.now(),durationMs:Y,...e&&{metadata:e}}),m&&l({type:"step_complete",workflowId:a,stepKey:m,name:i,description:d,ts:Date.now(),durationMs:Y,result:T,...e&&{metadata:e}}),T.value}if(J=T,A<C.attempts&&C.retryOn(T.error,A)){let Y=ue(A,C);l({type:"step_retry",workflowId:a,stepId:b,stepKey:u,name:i,ts:Date.now(),attempt:A+1,maxAttempts:C.attempts,delayMs:Y,error:T.error,...e&&{metadata:e},diagnostics:F(T.error,t.errorMeta,"result",A,performance.now()-R)}),C.onRetry(T.error,A,Y),await le(Y);continue}C.attempts>1&&l({type:"step_retries_exhausted",workflowId:a,stepId:b,stepKey:u,name:i,ts:Date.now(),durationMs:performance.now()-R,attempts:A,lastError:T.error,...e&&{metadata:e},diagnostics:F(T.error,t.errorMeta,"result",A,performance.now()-R)});break}catch(T){let Y=performance.now()-he;if(Be(T)){let V=T.ms;l({type:"step_timeout",workflowId:a,stepId:b,stepKey:u,name:i,ts:Date.now(),timeoutMs:V,attempt:A,...e&&{metadata:e},diagnostics:F(T,t.errorMeta,"timeout",A)}),l({type:"step_success",workflowId:a,stepId:b,stepKey:u,name:i,description:d,ts:Date.now(),durationMs:performance.now()-R,...e&&{metadata:e}}),m&&l({type:"step_complete",workflowId:a,stepKey:m,name:i,description:d,ts:Date.now(),durationMs:performance.now()-R,result:K(void 0),...e&&{metadata:e}});return}if($(T))throw l({type:"step_aborted",workflowId:a,stepId:b,stepKey:u,name:i,description:d,ts:Date.now(),durationMs:Y,...e&&{metadata:e}}),T;if(Ee(T)){let V=Fe(T),be=k?.ms??V?.timeoutMs??0;if(l({type:"step_timeout",workflowId:a,stepId:b,stepKey:u,name:i,ts:Date.now(),timeoutMs:be,attempt:A,...e&&{metadata:e},diagnostics:F(T,t.errorMeta,"timeout",A)}),A<C.attempts&&C.retryOn(T,A)){let ae=ue(A,C);l({type:"step_retry",workflowId:a,stepId:b,stepKey:u,name:i,ts:Date.now(),attempt:A+1,maxAttempts:C.attempts,delayMs:ae,error:T,...e&&{metadata:e},diagnostics:F(T,t.errorMeta,"timeout",A,performance.now()-R)}),C.onRetry(T,A,ae),await le(ae);continue}C.attempts>1&&l({type:"step_retries_exhausted",workflowId:a,stepId:b,stepKey:u,name:i,ts:Date.now(),durationMs:performance.now()-R,attempts:A,lastError:T,...e&&{metadata:e},diagnostics:F(T,t.errorMeta,"timeout",A,performance.now()-R)});let se=performance.now()-R;throw l({type:"step_error",workflowId:a,stepId:b,stepKey:u,name:i,description:d,ts:Date.now(),durationMs:se,error:T,...e&&{metadata:e},diagnostics:F(T,t.errorMeta,"timeout",A,se)}),m&&l({type:"step_complete",workflowId:a,stepKey:m,name:i,description:d,ts:Date.now(),durationMs:se,result:D(T,{cause:T}),meta:{origin:"throw",thrown:T},...e&&{metadata:e}}),c?.(T,i,y),U(T,{origin:"throw",thrown:T})}if(A<C.attempts&&C.retryOn(T,A)){let V=ue(A,C);l({type:"step_retry",workflowId:a,stepId:b,stepKey:u,name:i,ts:Date.now(),attempt:A+1,maxAttempts:C.attempts,delayMs:V,error:T,...e&&{metadata:e},diagnostics:F(T,t.errorMeta,"throw",A,performance.now()-R)}),C.onRetry(T,A,V),await le(V);continue}C.attempts>1&&!Ee(T)&&l({type:"step_retries_exhausted",workflowId:a,stepId:b,stepKey:u,name:i,ts:Date.now(),durationMs:performance.now()-R,attempts:A,lastError:T,...e&&{metadata:e},diagnostics:F(T,t.errorMeta,"throw",A,performance.now()-R)});let oe=performance.now()-R,Q;try{Q=N(T)}catch(V){throw H(V)}throw l({type:"step_error",workflowId:a,stepId:b,stepKey:u,name:i,description:d,ts:Date.now(),durationMs:oe,error:Q,...e&&{metadata:e},diagnostics:F(T,t.errorMeta,"throw",A,oe)}),m&&l({type:"step_complete",workflowId:a,stepKey:m,name:i,description:d,ts:Date.now(),durationMs:oe,result:D(Q,{cause:T}),meta:{origin:"throw",thrown:T},...e&&{metadata:e}}),c?.(Q,i,y),U(Q,{origin:"throw",thrown:T})}}let X=J,ne=performance.now()-R,re=W(X.error,{origin:"result",resultCause:X.cause});throw l({type:"step_error",workflowId:a,stepId:b,stepKey:u,name:i,description:d,ts:Date.now(),durationMs:ne,error:re,...e&&{metadata:e},diagnostics:F(X.error,t.errorMeta,"result",C.attempts,ne)}),m&&l({type:"step_complete",workflowId:a,stepKey:m,name:i,description:d,ts:Date.now(),durationMs:ne,result:X,meta:{origin:"result",resultCause:X.cause},...e&&{metadata:e}}),c?.(re,i,y),U(re,{origin:"result",resultCause:X.cause})})();p.try=(o,E,r)=>{if(typeof o!="string"||o.length===0)throw new Error('[awaitly] step.try() requires an explicit string ID as the first argument. Example: step.try("parse", () => JSON.parse(str), { error: "PARSE_ERROR" })');let t=r.key??o,e=o,i=o,u="error"in r?()=>r.error:r.onError,m=w;return(async()=>{let d=m?performance.now():0;w&&l({type:"step_start",workflowId:a,stepId:i,stepKey:t,name:e,ts:Date.now()});try{let f=await E(),k=performance.now()-d;return l({type:"step_success",workflowId:a,stepId:i,stepKey:t,name:e,ts:Date.now(),durationMs:k}),t&&l({type:"step_complete",workflowId:a,stepKey:t,name:e,ts:Date.now(),durationMs:k,result:K(f)}),f}catch(f){let k=u(f),b=performance.now()-d,O=W(k,{origin:"throw",thrown:f});throw l({type:"step_error",workflowId:a,stepId:i,stepKey:t,name:e,ts:Date.now(),durationMs:b,error:O}),t&&l({type:"step_complete",workflowId:a,stepKey:t,name:e,ts:Date.now(),durationMs:b,result:D(k,{cause:f}),meta:{origin:"throw",thrown:f}}),c?.(O,e,y),U(O,{origin:"throw",thrown:f})}})()},p.fromResult=(o,E,r)=>{if(typeof o!="string"||o.length===0)throw new Error('[awaitly] step.fromResult() requires an explicit string ID as the first argument. Example: step.fromResult("callProvider", () => callProvider(input), { onError: (e) => ({ type: "FAILED" }) })');let t=r.key??o,e=o,i=o,u="error"in r?()=>r.error:r.onError,m=w;return(async()=>{let d=m?performance.now():0;w&&l({type:"step_start",workflowId:a,stepId:i,stepKey:t,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:i,stepKey:t,name:e,ts:Date.now(),durationMs:k}),t&&l({type:"step_complete",workflowId:a,stepKey:t,name:e,ts:Date.now(),durationMs:k,result:K(f.value)}),f.value}else{let k=u(f.error),b=performance.now()-d,O=W(k,{origin:"result",resultCause:f.error});throw l({type:"step_error",workflowId:a,stepId:i,stepKey:t,name:e,ts:Date.now(),durationMs:b,error:O}),t&&l({type:"step_complete",workflowId:a,stepKey:t,name:e,ts:Date.now(),durationMs:b,result:D(k,{cause:f.error}),meta:{origin:"result",resultCause:f.error}}),c?.(O,e,y),U(O,{origin:"result",resultCause:f.error})}})()},p.fromNullable=(o,E,r,t)=>{if(typeof o!="string"||o.length===0)throw new Error('[awaitly] step.fromNullable() requires an explicit string ID as the first argument. Example: step.fromNullable("getUser", () => db.find(id), () => ({ type: "NOT_FOUND" }))');return p(o,async()=>{let e=await E();return e!=null?K(e):D(r())},t)},p.retry=(o,E,r)=>{if(typeof o!="string"||o.length===0)throw new Error('[awaitly] step.retry() requires an explicit string ID as the first argument. Example: step.retry("fetchData", () => fetchData(), { attempts: 3 })');return p(o,E,{key:r.key??o,retry:{attempts:r.attempts,backoff:r.backoff,initialDelay:r.initialDelay,maxDelay:r.maxDelay,jitter:r.jitter,retryOn:r.retryOn,onRetry:r.onRetry},timeout:r.timeout})},p.withTimeout=(o,E,r)=>{if(typeof o!="string"||o.length===0)throw new Error('[awaitly] step.withTimeout() requires an explicit string ID as the first argument. Example: step.withTimeout("slowOp", () => slowOp(), { ms: 5000 })');return p(o,E,{key:r.key??o,timeout:r})},p.sleep=(o,E,r)=>{if(typeof o!="string"||o.length===0)throw new Error('[awaitly] step.sleep() requires an explicit string ID as the first argument. Example: step.sleep("delay", "5s")');let t=typeof E=="string"?Me(E):E;if(!t)throw new Error(`step.sleep: invalid duration '${E}'`);let e=t.millis,i=r?.signal;return p(o,async()=>{if(I?.aborted||i?.aborted){let u=new Error("Sleep aborted");throw u.name="AbortError",u}return new Promise((u,m)=>{let d={timeoutId:void 0},f=()=>{d.timeoutId&&clearTimeout(d.timeoutId);let k=new Error("Sleep aborted");k.name="AbortError",m(k)};I?.addEventListener("abort",f,{once:!0}),i?.addEventListener("abort",f,{once:!0}),d.timeoutId=setTimeout(()=>{I?.removeEventListener("abort",f),i?.removeEventListener("abort",f),u(K(void 0))},e)})},{key:r?.key??o,description:r?.description})},p.parallel=((...o)=>{if(typeof o[0]!="string")throw new TypeError("step.parallel(name, ...): first argument must be a string (step name). Example: step.parallel('Fetch data', { user: () => fetchUser(), posts: () => fetchPosts() })");let E=o[0],r=o[1];if(typeof r=="function")return q(E,r);if(r&&typeof r=="object"&&!Array.isArray(r)){let e=j(r);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=(o,E)=>{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};x.push(i);let u=()=>{if(e)return;e=!0;let m=x.findIndex(d=>d.scopeId===r);m!==-1&&x.splice(m,1),l({type:"scope_end",workflowId:a,scopeId:r,ts:Date.now(),durationMs:performance.now()-t,winnerId:i.winnerId})};l({type:"scope_start",workflowId:a,scopeId:r,scopeType:"race",name:o,ts:Date.now()});try{let m=await E();if(u(),!m.ok)throw c?.(m.error,o,y),U(m.error,{origin:"result",resultCause:m.cause});return m.value}catch(m){throw u(),m}})()},p.allSettled=(o,E)=>{let r=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let t=performance.now(),e=!1;x.push({scopeId:r,type:"allSettled"});let i=()=>{if(e)return;e=!0;let u=x.findIndex(m=>m.scopeId===r);u!==-1&&x.splice(u,1),l({type:"scope_end",workflowId:a,scopeId:r,ts:Date.now(),durationMs:performance.now()-t})};l({type:"scope_start",workflowId:a,scopeId:r,scopeType:"allSettled",name:o,ts:Date.now()});try{let u=await E();if(i(),!u.ok)throw c?.(u.error,o,y),U(u.error,{origin:"result",resultCause:u.cause});return u.value}catch(u){throw i(),u}})()},p.if=(o,E,r)=>r(),p.label=p.if,p.branch=async(o,E)=>{let{condition:r,then:t,else:e}=E;if(r())return await t();if(e)return await e()},p.arm=(o,E)=>({fn:o,errors:E}),p.forEach=async(o,E,r)=>{let t=[],e=r.maxIterations,i=0,u="run"in r,m=Symbol.asyncIterator in E?E:(async function*(){yield*E})();for await(let d of m){if(e!==void 0&&i>=e)break;let f;u?f=await r.run(d,i):f=await r.item.handler(d,i,p),t.push(f),i++}return t},p.item=o=>({__forEachItemHandler:!0,handler:o}),p.dep=(o,E)=>E,p.run=(o,E,r)=>p(o,()=>E,r),p.workflow=(o,E,r)=>p(o,E,r),p.andThen=(o,E,r,t)=>p(o,()=>r(E),t),p.match=async(o,E,r,t)=>p(o,async()=>{let e=await E;return e.ok?K(await r.ok(e.value)):K(await r.err(e.error,e.cause))},t),p.all=p.parallel,p.map=async(o,E,r,t)=>{let e=t?.concurrency??E.length;return p(o,()=>e>=E.length?de(E.map((i,u)=>r(i,u))):(async()=>{let i=[];for(let u=0;u<E.length;u+=e){let m=E.slice(u,u+e),d=await de(m.map((f,k)=>r(f,u+k)));if(!d.ok)return d;i.push(...d.value)}return K(i)})(),{key:t?.key})},p.withFallback=(o,E,r)=>{if(typeof o!="string"||o.length===0)throw new Error('[awaitly] step.withFallback() requires an explicit string ID as the first argument. Example: step.withFallback("getUser", () => fetchUser(id), { fallback: () => fetchFromCache(id) })');let t=r.key??o,e=o,i=B(t),u=w;return(async()=>{let m=u?performance.now():0;w&&l({type:"step_start",workflowId:a,stepId:i,stepKey:t,name:e,ts:Date.now()});let d;try{d=await E()}catch(R){if($(R))throw l({type:"step_aborted",workflowId:a,stepId:i,stepKey:t,name:e,ts:Date.now(),durationMs:performance.now()-m}),R;let P;try{P=N(R)}catch(h){throw H(h)}if(r.on!==void 0&&r.on!==P){let h=performance.now()-m;throw l({type:"step_error",workflowId:a,stepId:i,stepKey:t,name:e,ts:Date.now(),durationMs:h,error:P}),t&&l({type:"step_complete",workflowId:a,stepKey:t,name:e,ts:Date.now(),durationMs:h,result:D(P,{cause:R}),meta:{origin:"throw",thrown:R}}),c?.(P,e,y),U(P,{origin:"throw",thrown:R})}let g;try{g=await r.fallback()}catch(h){if($(h))throw l({type:"step_aborted",workflowId:a,stepId:i,stepKey:t,name:e,ts:Date.now(),durationMs:performance.now()-m}),h;let C;try{C=N(h)}catch(X){throw H(X)}let J=performance.now()-m;throw l({type:"step_error",workflowId:a,stepId:i,stepKey:t,name:e,ts:Date.now(),durationMs:J,error:C}),t&&l({type:"step_complete",workflowId:a,stepKey:t,name:e,ts:Date.now(),durationMs:J,result:D(C,{cause:h}),meta:{origin:"throw",thrown:h}}),c?.(C,e,y),U(C,{origin:"throw",thrown:h})}if(g.ok){let h=performance.now()-m;return l({type:"step_success",workflowId:a,stepId:i,stepKey:t,name:e,ts:Date.now(),durationMs:h}),t&&l({type:"step_complete",workflowId:a,stepKey:t,name:e,ts:Date.now(),durationMs:h,result:g,meta:{origin:"fallback",fallbackUsed:!0,fallbackReason:String(P)}}),g.value}else{let h=performance.now()-m,C=W(g.error,{origin:"result",resultCause:g.cause});throw l({type:"step_error",workflowId:a,stepId:i,stepKey:t,name:e,ts:Date.now(),durationMs:h,error:C}),t&&l({type:"step_complete",workflowId:a,stepKey:t,name:e,ts:Date.now(),durationMs:h,result:g,meta:{origin:"result",resultCause:g.cause}}),c?.(C,e,y),U(C,{origin:"result",resultCause:g.cause})}}if(d.ok){let R=performance.now()-m;return l({type:"step_success",workflowId:a,stepId:i,stepKey:t,name:e,ts:Date.now(),durationMs:R}),t&&l({type:"step_complete",workflowId:a,stepKey:t,name:e,ts:Date.now(),durationMs:R,result:d}),d.value}let f=d.error;if(r.on!==void 0&&r.on!==f){let R=performance.now()-m,P=W(f,{origin:"result",resultCause:d.cause});throw l({type:"step_error",workflowId:a,stepId:i,stepKey:t,name:e,ts:Date.now(),durationMs:R,error:P}),t&&l({type:"step_complete",workflowId:a,stepKey:t,name:e,ts:Date.now(),durationMs:R,result:d,meta:{origin:"result",resultCause:d.cause}}),c?.(P,e,y),U(P,{origin:"result",resultCause:d.cause})}let k;try{k=await r.fallback()}catch(R){if($(R))throw l({type:"step_aborted",workflowId:a,stepId:i,stepKey:t,name:e,ts:Date.now(),durationMs:performance.now()-m}),R;let P;try{P=N(R)}catch(h){throw H(h)}let g=performance.now()-m;throw l({type:"step_error",workflowId:a,stepId:i,stepKey:t,name:e,ts:Date.now(),durationMs:g,error:P}),t&&l({type:"step_complete",workflowId:a,stepKey:t,name:e,ts:Date.now(),durationMs:g,result:D(P,{cause:R}),meta:{origin:"throw",thrown:R}}),c?.(P,e,y),U(P,{origin:"throw",thrown:R})}if(k.ok){let R=performance.now()-m;return l({type:"step_success",workflowId:a,stepId:i,stepKey:t,name:e,ts:Date.now(),durationMs:R}),t&&l({type:"step_complete",workflowId:a,stepKey:t,name:e,ts:Date.now(),durationMs:R,result:k,meta:{origin:"fallback",fallbackUsed:!0,fallbackReason:String(f)}}),k.value}let b=performance.now()-m,O=W(k.error,{origin:"result",resultCause:k.cause});throw l({type:"step_error",workflowId:a,stepId:i,stepKey:t,name:e,ts:Date.now(),durationMs:b,error:O}),t&&l({type:"step_complete",workflowId:a,stepKey:t,name:e,ts:Date.now(),durationMs:b,result:k,meta:{origin:"result",resultCause:k.cause}}),c?.(O,e,y),U(O,{origin:"result",resultCause:k.cause})})()},p.withResource=(o,E)=>{if(typeof o!="string"||o.length===0)throw new Error('[awaitly] step.withResource() requires an explicit string ID as the first argument. Example: step.withResource("useDb", { acquire: () => connect(), use: (db) => query(db), release: (db) => db.close() })');let r=o,t=o,e=B(r),i=w;return(async()=>{let u=i?performance.now():0;w&&l({type:"step_start",workflowId:a,stepId:e,stepKey:r,name:t,ts:Date.now()});let m;try{m=await E.acquire()}catch(g){if($(g))throw l({type:"step_aborted",workflowId:a,stepId:e,stepKey:r,name:t,ts:Date.now(),durationMs:performance.now()-u}),g;let h;try{h=N(g)}catch(J){throw H(J)}let C=performance.now()-u;throw l({type:"step_error",workflowId:a,stepId:e,stepKey:r,name:t,ts:Date.now(),durationMs:C,error:h}),r&&l({type:"step_complete",workflowId:a,stepKey:r,name:t,ts:Date.now(),durationMs:C,result:D(h,{cause:g}),meta:{origin:"throw",thrown:g}}),c?.(h,t,y),U(h,{origin:"throw",thrown:g})}if(!m.ok){let g=performance.now()-u,h=W(m.error,{origin:"result",resultCause:m.cause});throw l({type:"step_error",workflowId:a,stepId:e,stepKey:r,name:t,ts:Date.now(),durationMs:g,error:h}),r&&l({type:"step_complete",workflowId:a,stepKey:r,name:t,ts:Date.now(),durationMs:g,result:m,meta:{origin:"result",resultCause:m.cause}}),c?.(h,t,y),U(h,{origin:"result",resultCause:m.cause})}let d=m.value,f,k,b=!1;try{f=await E.use(d)}catch(g){if($(g)){try{await E.release(d)}catch(h){console.warn(`[awaitly] step.withResource("${o}"): release threw after earlyExit:`,h)}throw g}k=g,b=!0}try{await E.release(d)}catch(g){console.warn(`[awaitly] step.withResource("${o}"): release threw:`,g)}if(b){let g;try{g=N(k)}catch(C){throw H(C)}let h=performance.now()-u;throw l({type:"step_error",workflowId:a,stepId:e,stepKey:r,name:t,ts:Date.now(),durationMs:h,error:g}),r&&l({type:"step_complete",workflowId:a,stepKey:r,name:t,ts:Date.now(),durationMs:h,result:D(g,{cause:k}),meta:{origin:"throw",thrown:k}}),c?.(g,t,y),U(g,{origin:"throw",thrown:k})}let O=f;if(O.ok){let g=performance.now()-u;return l({type:"step_success",workflowId:a,stepId:e,stepKey:r,name:t,ts:Date.now(),durationMs:g}),r&&l({type:"step_complete",workflowId:a,stepKey:r,name:t,ts:Date.now(),durationMs:g,result:O}),O.value}let R=performance.now()-u,P=W(O.error,{origin:"result",resultCause:O.cause});throw l({type:"step_error",workflowId:a,stepId:e,stepKey:r,name:t,ts:Date.now(),durationMs:R,error:P}),r&&l({type:"step_complete",workflowId:a,stepKey:r,name:t,ts:Date.now(),durationMs:R,result:O,meta:{origin:"result",resultCause:O.cause}}),c?.(P,t,y),U(P,{origin:"result",resultCause:O.cause})})()};let L=await n({step:p});if(process.env.NODE_ENV!=="production"&&L!==null&&typeof L=="object"&&"ok"in L&&typeof L.ok=="boolean"){let o=L;(o.ok===!0&&"value"in o||o.ok===!1&&"error"in o)&&console.warn(`awaitly: Workflow executor returned a Result-like object. Return raw values, not ok() or err().
|
|
2
2
|
|
|
3
3
|
Incorrect: return ok({ data });
|
|
4
4
|
Correct: return { data };
|
|
5
5
|
|
|
6
|
-
See: https://jagreehal.github.io/awaitly/guides/troubleshooting/#returning-ok-from-workflow-executor-double-wrapping`)}return
|
|
6
|
+
See: https://jagreehal.github.io/awaitly/guides/troubleshooting/#returning-ok-from-workflow-executor-double-wrapping`)}return K(L)}catch(p){if(Ve(p))throw p.thrown;if($(p)){let q=p.meta.origin==="throw"?p.meta.thrown:p.meta.origin==="result"?p.meta.resultCause:void 0;return D(p.error,{cause:q})}let j=N(p);return c?.(j,"unexpected",y),D(j,{cause:p})}}we.strict=(n,s)=>we(n,s);async function de(n){return n.length===0?K([]):new Promise(s=>{let c=!1,w=n.length,S=new Array(n.length);for(let v=0;v<n.length;v++){let _=v;Promise.resolve(n[_]).catch(y=>D({type:"PROMISE_REJECTED",cause:y},{cause:{type:"PROMISE_REJECTION",reason:y}})).then(y=>{if(!c){if(!y.ok){c=!0,s(y);return}S[_]=y.value,w--,w===0&&s(K(S))}})}})}function Te(n){return typeof n=="object"&&n!==null&&n.type==="EVENT_TIMEOUT"}function ke(n){return typeof n=="object"&&n!==null&&n.type==="INVALID_EMITTER"}function Re(n,s){return new Promise(c=>{try{n((w,S)=>{if(w){let v=s?.onError?s.onError(w):w;c(D(v,{cause:w}))}else c(K(S))})}catch(w){let S=w instanceof Error?w:new Error(String(w)),v=s?.onError?s.onError(S):S;c(D(v,{cause:w}))}})}function ce(n){return typeof n=="object"&&n!==null&&"on"in n&&"off"in n&&typeof n.on=="function"&&typeof n.off=="function"}function pe(n){return typeof n=="object"&&n!==null&&"addEventListener"in n&&"removeEventListener"in n&&typeof n.addEventListener=="function"&&typeof n.removeEventListener=="function"}function ge(n,s,c){return new Promise(w=>{let S,v=!1,_=ce(n)?(x,M)=>n.on(x,M):pe(n)?(x,M)=>n.addEventListener(x,M):null,y=ce(n)?(x,M)=>n.off(x,M):pe(n)?(x,M)=>n.removeEventListener(x,M):null;if(!_||!y){w(D({type:"INVALID_EMITTER",message:"Object does not have on/off or addEventListener/removeEventListener"}));return}let I=(...x)=>{v||(v=!0,N(),w(K(x[0])))},a=(...x)=>{if(v)return;v=!0,N();let M=x[0],B=c?.onError?c.onError(M):M;w(D(B,{cause:M}))},N=()=>{S&&clearTimeout(S),y(s.success,I),s.error&&y(s.error,a)};_(s.success,I),s.error&&_(s.error,a),s.timeout&&(S=setTimeout(()=>{if(v)return;v=!0,N();let x={type:"EVENT_TIMEOUT",event:s.success,timeoutMs:s.timeout};w(D(x))},s.timeout))})}function Ce(n){return ce(n)||pe(n)}0&&(module.exports={fromCallback,fromEvent,isEventEmitterLike,isEventTimeoutError,isInvalidEmitterError});
|
|
7
7
|
//# sourceMappingURL=adapters.cjs.map
|