@jagreehal/workflow 1.7.0 → 1.8.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/README.md +244 -0
- package/dist/core.cjs +1 -1
- package/dist/core.cjs.map +1 -1
- package/dist/core.d.cts +98 -12
- package/dist/core.d.ts +98 -12
- package/dist/core.js +1 -1
- package/dist/core.js.map +1 -1
- package/dist/index.cjs +5 -5
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +282 -17
- package/dist/index.d.ts +282 -17
- package/dist/index.js +5 -5
- package/dist/index.js.map +1 -1
- package/dist/workflow.cjs +1 -1
- package/dist/workflow.cjs.map +1 -1
- package/dist/workflow.d.cts +47 -15
- package/dist/workflow.d.ts +47 -15
- package/dist/workflow.js +1 -1
- package/dist/workflow.js.map +1 -1
- package/docs/advanced.md +57 -4
- package/docs/api.md +37 -6
- package/package.json +1 -1
package/dist/core.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var g=e=>({ok:!0,value:e}),k=(e,t)=>({ok:!1,error:e,...t?.cause!==void 0?{cause:t.cause}:{}}),Te=e=>e.ok,ke=e=>!e.ok,ue=e=>typeof e=="object"&&e!==null&&e.type==="UNEXPECTED_ERROR",F=Symbol.for("step_timeout_marker");function z(e){return typeof e!="object"||e===null?!1:e.type==="STEP_TIMEOUT"?!0:F in e}function ae(e){if(!(typeof e!="object"||e===null)){if(e.type==="STEP_TIMEOUT"){let t=e;return{timeoutMs:t.timeoutMs,stepName:t.stepName,stepKey:t.stepKey,attempt:t.attempt}}if(F in e)return e[F]}}var ee=Symbol("early-exit");function ie(e,t){return{[ee]:!0,error:e,meta:t}}function pe(e){return typeof e=="object"&&e!==null&&e[ee]===!0}var te=Symbol("mapper-exception");function le(e){return{[te]:!0,thrown:e}}function ce(e){return typeof e=="object"&&e!==null&&e[te]===!0}function Ee(e){return typeof e=="string"?{name:e}:e??{}}function B(e,t){let{backoff:n,initialDelay:a,maxDelay:d,jitter:A}=t,x;switch(n){case"fixed":x=a;break;case"linear":x=a*e;break;case"exponential":x=a*Math.pow(2,e-1);break}if(x=Math.min(x,d),A){let r=x*.25*Math.random();x=x+r}return Math.floor(x)}function q(e){return new Promise(t=>setTimeout(t,e))}var Q=Symbol("timeout");async function ye(e,t,n){let a=new AbortController,d=t.error??{type:"STEP_TIMEOUT",stepName:n.name,stepKey:n.key,timeoutMs:t.ms,attempt:n.attempt},A,x=new Promise((I,R)=>{A=setTimeout(()=>{a.abort(),R({[Q]:!0,error:d})},t.ms)}),r;t.signal?r=Promise.resolve(e(a.signal)):r=Promise.resolve(e());try{return await Promise.race([r,x])}catch(I){if(typeof I=="object"&&I!==null&&I[Q]===!0){let R=I.error;if(typeof R=="object"&&R!==null&&R.type!=="STEP_TIMEOUT"){let V={timeoutMs:t.ms,stepName:n.name,stepKey:n.key,attempt:n.attempt};F in R?R[F]=V:Object.defineProperty(R,F,{value:V,enumerable:!1,writable:!0,configurable:!1})}throw R}throw I}finally{clearTimeout(A)}}var j={backoff:"exponential",initialDelay:100,maxDelay:3e4,jitter:!0,retryOn:()=>!0,onRetry:()=>{}};async function Z(e,t){let{onError:n,onEvent:a,catchUnexpected:d,workflowId:A,context:x}=t&&typeof t=="object"?t:{},r=A??crypto.randomUUID(),I=!n&&!d,R=[],V=0,W=o=>o??`step_${++V}`,E=o=>{if(o.type==="step_success"){let P=o.stepId;for(let h=R.length-1;h>=0;h--){let D=R[h];if(D.type==="race"&&!D.winnerId){D.winnerId=P;break}}}a?.(o,x)},O=ie,H=o=>pe(o),X=(o,P)=>I?P?.origin==="result"?{type:"UNEXPECTED_ERROR",cause:{type:"STEP_FAILURE",origin:"result",error:o,...P.resultCause!==void 0?{cause:P.resultCause}:{}}}:P?.origin==="throw"?{type:"UNEXPECTED_ERROR",cause:{type:"STEP_FAILURE",origin:"throw",error:o,thrown:P.thrown}}:{type:"UNEXPECTED_ERROR",cause:{type:"STEP_FAILURE",origin:"result",error:o}}:o,ne=o=>o.origin==="result"?o.resultCause:o.thrown,re=o=>({type:"UNEXPECTED_ERROR",cause:o.meta.origin==="result"?{type:"STEP_FAILURE",origin:"result",error:o.error,...o.meta.resultCause!==void 0?{cause:o.meta.resultCause}:{}}:{type:"STEP_FAILURE",origin:"throw",error:o.error,thrown:o.meta.thrown}});try{let P=function(m,p){let i=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let s=performance.now(),u=!1;R.push({scopeId:i,type:"parallel"});let C=()=>{if(u)return;u=!0;let c=R.findIndex(l=>l.scopeId===i);c!==-1&&R.splice(c,1),E({type:"scope_end",workflowId:r,scopeId:i,ts:Date.now(),durationMs:performance.now()-s})};E({type:"scope_start",workflowId:r,scopeId:i,scopeType:"parallel",name:m,ts:Date.now()});try{let c=await p();if(C(),!c.ok)throw n?.(c.error,m),O(c.error,{origin:"result",resultCause:c.cause});return c.value}catch(c){throw C(),c}})()},h=function(m,p){let i=Object.keys(m),s=p.name??`Parallel(${i.join(", ")})`,u=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let C=performance.now(),c=!1;R.push({scopeId:u,type:"parallel"});let l=()=>{if(c)return;c=!0;let w=R.findIndex(f=>f.scopeId===u);w!==-1&&R.splice(w,1),E({type:"scope_end",workflowId:r,scopeId:u,ts:Date.now(),durationMs:performance.now()-C})};E({type:"scope_start",workflowId:r,scopeId:u,scopeType:"parallel",name:s,ts:Date.now()});try{let w=await new Promise(_=>{if(i.length===0){_([]);return}let v=!1,S=i.length,N=new Array(i.length);for(let M=0;M<i.length;M++){let K=i[M],Y=M;Promise.resolve(m[K]()).catch(T=>k({type:"PROMISE_REJECTED",cause:T},{cause:{type:"PROMISE_REJECTION",reason:T}})).then(T=>{if(!v){if(!T.ok){v=!0,_([{key:K,result:T}]);return}N[Y]={key:K,result:T},S--,S===0&&_(N)}})}});l();let f={};for(let{key:_,result:v}of w){if(!v.ok)throw n?.(v.error,_),O(v.error,{origin:"result",resultCause:v.cause});f[_]=v.value}return f}catch(w){throw l(),w}})()};var me=P,we=h;let o=(m,p)=>(async()=>{let i=Ee(p),{name:s,key:u,retry:C,timeout:c}=i,l=W(u),w=a,f=w?performance.now():0;if(!(typeof m=="function")){if(C&&C.attempts>1)throw new Error("step: retry options require a function operation. Direct Promise/Result values cannot be re-executed on retry. Wrap your operation in a function: step(() => yourOperation, { retry: {...} })");if(c)throw new Error("step: timeout options require a function operation. Direct Promise/Result values cannot be wrapped with timeout after they've started. Wrap your operation in a function: step(() => yourOperation, { timeout: {...} })")}let S={attempts:Math.max(1,C?.attempts??1),backoff:C?.backoff??j.backoff,initialDelay:C?.initialDelay??j.initialDelay,maxDelay:C?.maxDelay??j.maxDelay,jitter:C?.jitter??j.jitter,retryOn:C?.retryOn??j.retryOn,onRetry:C?.onRetry??j.onRetry};a&&E({type:"step_start",workflowId:r,stepId:l,stepKey:u,name:s,ts:Date.now()});let N;for(let T=1;T<=S.attempts;T++){let se=w?performance.now():0;try{let y;if(typeof m=="function"?c?y=await ye(m,c,{name:s,key:u,attempt:T}):y=await m():y=await m,y.ok){let U=performance.now()-f;return E({type:"step_success",workflowId:r,stepId:l,stepKey:u,name:s,ts:Date.now(),durationMs:U}),u&&E({type:"step_complete",workflowId:r,stepKey:u,name:s,ts:Date.now(),durationMs:U,result:y}),y.value}if(N=y,T<S.attempts&&S.retryOn(y.error,T)){let U=B(T,S);E({type:"step_retry",workflowId:r,stepId:l,stepKey:u,name:s,ts:Date.now(),attempt:T+1,maxAttempts:S.attempts,delayMs:U,error:y.error}),S.onRetry(y.error,T,U),await q(U);continue}S.attempts>1&&E({type:"step_retries_exhausted",workflowId:r,stepId:l,stepKey:u,name:s,ts:Date.now(),durationMs:performance.now()-f,attempts:T,lastError:y.error});break}catch(y){let U=performance.now()-se;if(H(y))throw E({type:"step_aborted",workflowId:r,stepId:l,stepKey:u,name:s,ts:Date.now(),durationMs:U}),y;if(z(y)){let b=ae(y),$=c?.ms??b?.timeoutMs??0;if(E({type:"step_timeout",workflowId:r,stepId:l,stepKey:u,name:s,ts:Date.now(),timeoutMs:$,attempt:T}),T<S.attempts&&S.retryOn(y,T)){let J=B(T,S);E({type:"step_retry",workflowId:r,stepId:l,stepKey:u,name:s,ts:Date.now(),attempt:T+1,maxAttempts:S.attempts,delayMs:J,error:y}),S.onRetry(y,T,J),await q(J);continue}S.attempts>1&&E({type:"step_retries_exhausted",workflowId:r,stepId:l,stepKey:u,name:s,ts:Date.now(),durationMs:performance.now()-f,attempts:T,lastError:y})}if(T<S.attempts&&S.retryOn(y,T)){let b=B(T,S);E({type:"step_retry",workflowId:r,stepId:l,stepKey:u,name:s,ts:Date.now(),attempt:T+1,maxAttempts:S.attempts,delayMs:b,error:y}),S.onRetry(y,T,b),await q(b);continue}S.attempts>1&&!z(y)&&E({type:"step_retries_exhausted",workflowId:r,stepId:l,stepKey:u,name:s,ts:Date.now(),durationMs:performance.now()-f,attempts:T,lastError:y});let L=performance.now()-f;if(d){let b;try{b=d(y)}catch($){throw le($)}throw E({type:"step_error",workflowId:r,stepId:l,stepKey:u,name:s,ts:Date.now(),durationMs:L,error:b}),u&&E({type:"step_complete",workflowId:r,stepKey:u,name:s,ts:Date.now(),durationMs:L,result:k(b,{cause:y}),meta:{origin:"throw",thrown:y}}),n?.(b,s),O(b,{origin:"throw",thrown:y})}else{let b={type:"UNEXPECTED_ERROR",cause:{type:"UNCAUGHT_EXCEPTION",thrown:y}};throw E({type:"step_error",workflowId:r,stepId:l,stepKey:u,name:s,ts:Date.now(),durationMs:L,error:b}),u&&E({type:"step_complete",workflowId:r,stepKey:u,name:s,ts:Date.now(),durationMs:L,result:k(b,{cause:y}),meta:{origin:"throw",thrown:y}}),y}}}let M=N,K=performance.now()-f,Y=X(M.error,{origin:"result",resultCause:M.cause});throw E({type:"step_error",workflowId:r,stepId:l,stepKey:u,name:s,ts:Date.now(),durationMs:K,error:Y}),u&&E({type:"step_complete",workflowId:r,stepKey:u,name:s,ts:Date.now(),durationMs:K,result:M,meta:{origin:"result",resultCause:M.cause}}),n?.(M.error,s),O(M.error,{origin:"result",resultCause:M.cause})})();o.try=(m,p)=>{let i=p.name,s=p.key,u=W(s),C="error"in p?()=>p.error:p.onError,c=a;return(async()=>{let l=c?performance.now():0;a&&E({type:"step_start",workflowId:r,stepId:u,stepKey:s,name:i,ts:Date.now()});try{let w=await m(),f=performance.now()-l;return E({type:"step_success",workflowId:r,stepId:u,stepKey:s,name:i,ts:Date.now(),durationMs:f}),s&&E({type:"step_complete",workflowId:r,stepKey:s,name:i,ts:Date.now(),durationMs:f,result:g(w)}),w}catch(w){let f=C(w),_=performance.now()-l,v=X(f,{origin:"throw",thrown:w});throw E({type:"step_error",workflowId:r,stepId:u,stepKey:s,name:i,ts:Date.now(),durationMs:_,error:v}),s&&E({type:"step_complete",workflowId:r,stepKey:s,name:i,ts:Date.now(),durationMs:_,result:k(f,{cause:w}),meta:{origin:"throw",thrown:w}}),n?.(f,i),O(f,{origin:"throw",thrown:w})}})()},o.fromResult=(m,p)=>{let i=p.name,s=p.key,u=W(s),C="error"in p?()=>p.error:p.onError,c=a;return(async()=>{let l=c?performance.now():0;a&&E({type:"step_start",workflowId:r,stepId:u,stepKey:s,name:i,ts:Date.now()});let w=await m();if(w.ok){let f=performance.now()-l;return E({type:"step_success",workflowId:r,stepId:u,stepKey:s,name:i,ts:Date.now(),durationMs:f}),s&&E({type:"step_complete",workflowId:r,stepKey:s,name:i,ts:Date.now(),durationMs:f,result:g(w.value)}),w.value}else{let f=C(w.error),_=performance.now()-l,v=X(f,{origin:"result",resultCause:w.error});throw E({type:"step_error",workflowId:r,stepId:u,stepKey:s,name:i,ts:Date.now(),durationMs:_,error:v}),s&&E({type:"step_complete",workflowId:r,stepKey:s,name:i,ts:Date.now(),durationMs:_,result:k(f,{cause:w.error}),meta:{origin:"result",resultCause:w.error}}),n?.(f,i),O(f,{origin:"result",resultCause:w.error})}})()},o.retry=(m,p)=>o(m,{name:p.name,key:p.key,retry:{attempts:p.attempts,backoff:p.backoff,initialDelay:p.initialDelay,maxDelay:p.maxDelay,jitter:p.jitter,retryOn:p.retryOn,onRetry:p.onRetry},timeout:p.timeout}),o.withTimeout=(m,p)=>o(m,{name:p.name,key:p.key,timeout:p}),o.parallel=((...m)=>{if(typeof m[0]=="string"){let p=m[0],i=m[1];return P(p,i)}else{let p=m[0],i=m[1]??{};return h(p,i)}}),o.race=(m,p)=>{let i=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let s=performance.now(),u=!1,C={scopeId:i,type:"race",winnerId:void 0};R.push(C);let c=()=>{if(u)return;u=!0;let l=R.findIndex(w=>w.scopeId===i);l!==-1&&R.splice(l,1),E({type:"scope_end",workflowId:r,scopeId:i,ts:Date.now(),durationMs:performance.now()-s,winnerId:C.winnerId})};E({type:"scope_start",workflowId:r,scopeId:i,scopeType:"race",name:m,ts:Date.now()});try{let l=await p();if(c(),!l.ok)throw n?.(l.error,m),O(l.error,{origin:"result",resultCause:l.cause});return l.value}catch(l){throw c(),l}})()},o.allSettled=(m,p)=>{let i=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let s=performance.now(),u=!1;R.push({scopeId:i,type:"allSettled"});let C=()=>{if(u)return;u=!0;let c=R.findIndex(l=>l.scopeId===i);c!==-1&&R.splice(c,1),E({type:"scope_end",workflowId:r,scopeId:i,ts:Date.now(),durationMs:performance.now()-s})};E({type:"scope_start",workflowId:r,scopeId:i,scopeType:"allSettled",name:m,ts:Date.now()});try{let c=await p();if(C(),!c.ok)throw n?.(c.error,m),O(c.error,{origin:"result",resultCause:c.cause});return c.value}catch(c){throw C(),c}})()};let oe=await e(o);return g(oe)}catch(o){if(ce(o))throw o.thrown;if(H(o)){let h=ne(o.meta);if(d||n)return k(o.error,{cause:h});if(ue(o.error))return k(o.error,{cause:h});let D=re(o);return k(D,{cause:h})}if(d){let h=d(o);return n?.(h,"unexpected"),k(h,{cause:o})}let P={type:"UNEXPECTED_ERROR",cause:{type:"UNCAUGHT_EXCEPTION",thrown:o}};return n?.(P,"unexpected"),k(P,{cause:o})}}Z.strict=(e,t)=>Z(e,t);var G=class extends Error{constructor(n,a){super(`Unwrap called on an error result: ${String(n)}`);this.error=n;this.cause=a;this.name="UnwrapError"}},de=e=>{if(e.ok)return e.value;throw new G(e.error,e.cause)},fe=(e,t)=>e.ok?e.value:t,Re=(e,t)=>e.ok?e.value:t(e.error,e.cause);function Ce(e,t){try{return g(e())}catch(n){return t?k(t(n),{cause:n}):k(n)}}async function xe(e,t){try{return g(await e)}catch(n){return t?k(t(n),{cause:n}):k(n)}}async function Se(e,t){try{return g(await e())}catch(n){return t?k(t(n),{cause:n}):k(n)}}function ge(e,t){return e!=null?g(e):k(t())}function Ae(e,t){return e.ok?g(t(e.value)):e}function be(e,t){return e.ok?e:k(t(e.error),{cause:e.cause})}function Pe(e,t){return e.ok?t.ok(e.value):t.err(e.error,e.cause)}function he(e,t){return e.ok?t(e.value):e}function _e(e,t){return e.ok&&t(e.value),e}function ve(e,t){return e.ok||t(e.error,e.cause),e}function Me(e,t,n){if(!e.ok)return e;try{return g(t(e.value))}catch(a){return k(n(a),{cause:a})}}function Ie(e,t,n){if(e.ok)return e;try{return k(t(e.error),{cause:e.cause})}catch(a){return k(n(a),{cause:a})}}function Oe(e,t,n){return e.ok?g(t(e.value)):k(n(e.error),{cause:e.cause})}function Ue(e,t){return e.ok?e:t(e.error,e.cause)}async function De(e,t){let n=await e;return n.ok?n:t(n.error,n.cause)}function Ke(e,t){return e.ok?g(e.value):g(t(e.error,e.cause))}async function je(e,t){let n=await e;return n.ok?g(n.value):g(await t(n.error,n.cause))}function Fe(e){let t=[];for(let n of e){if(!n.ok)return n;t.push(n.value)}return g(t)}async function Ne(e){return e.length===0?g([]):new Promise(t=>{let n=!1,a=e.length,d=new Array(e.length);for(let A=0;A<e.length;A++){let x=A;Promise.resolve(e[x]).catch(r=>k({type:"PROMISE_REJECTED",cause:r},{cause:{type:"PROMISE_REJECTION",reason:r}})).then(r=>{if(!n){if(!r.ok){n=!0,t(r);return}d[x]=r.value,a--,a===0&&t(g(d))}})}})}function Ve(e){let t=[],n=[];for(let a of e)a.ok?t.push(a.value):n.push({error:a.error,cause:a.cause});return n.length>0?k(n):g(t)}function Le(e){let t=[],n=[];for(let a of e)a.ok?t.push(a.value):n.push(a.error);return{values:t,errors:n}}function We(e){if(e.length===0)return k({type:"EMPTY_INPUT",message:"any() requires at least one Result"});let t=null;for(let n of e){if(n.ok)return n;t||(t=n)}return t}async function Xe(e){return e.length===0?k({type:"EMPTY_INPUT",message:"anyAsync() requires at least one Result"}):new Promise(t=>{let n=!1,a=e.length,d=null;for(let A of e)Promise.resolve(A).catch(x=>k({type:"PROMISE_REJECTED",cause:x},{cause:{type:"PROMISE_REJECTION",reason:x}})).then(x=>{if(!n){if(x.ok){n=!0,t(x);return}d||(d=x),a--,a===0&&t(d)}})})}async function Ye(e){let t=await Promise.all(e.map(d=>Promise.resolve(d).then(A=>({status:"result",result:A})).catch(A=>({status:"rejected",error:{type:"PROMISE_REJECTED",cause:A},cause:{type:"PROMISE_REJECTION",reason:A}})))),n=[],a=[];for(let d of t)d.status==="rejected"?a.push({error:d.error,cause:d.cause}):d.result.ok?n.push(d.result.value):a.push({error:d.result.error,cause:d.result.cause});return a.length>0?k(a):g(n)}export{ee as EARLY_EXIT_SYMBOL,F as STEP_TIMEOUT_MARKER,G as UnwrapError,Fe as all,Ne as allAsync,Ve as allSettled,Ye as allSettledAsync,he as andThen,We as any,Xe as anyAsync,Oe as bimap,ie as createEarlyExit,k as err,Ce as from,ge as fromNullable,xe as fromPromise,ae as getStepTimeoutMeta,pe as isEarlyExit,ke as isErr,Te as isOk,z as isStepTimeoutError,ue as isUnexpectedError,Ae as map,be as mapError,Ie as mapErrorTry,Me as mapTry,Pe as match,g as ok,Ue as orElse,De as orElseAsync,Le as partition,Ke as recover,je as recoverAsync,Z as run,_e as tap,ve as tapError,Se as tryAsync,de as unwrap,fe as unwrapOr,Re as unwrapOrElse};
|
|
1
|
+
var g=e=>({ok:!0,value:e}),d=(e,t)=>({ok:!1,error:e,...t?.cause!==void 0?{cause:t.cause}:{}}),ke=e=>e.ok,de=e=>!e.ok,ue=e=>typeof e=="object"&&e!==null&&e.type==="UNEXPECTED_ERROR",F=Symbol.for("step_timeout_marker");function Q(e){return typeof e!="object"||e===null?!1:e.type==="STEP_TIMEOUT"?!0:F in e}function ae(e){if(!(typeof e!="object"||e===null)){if(e.type==="STEP_TIMEOUT"){let t=e;return{timeoutMs:t.timeoutMs,stepName:t.stepName,stepKey:t.stepKey,attempt:t.attempt}}if(F in e)return e[F]}}var te=Symbol("early-exit");function ie(e,t){return{[te]:!0,error:e,meta:t}}function pe(e){return typeof e=="object"&&e!==null&&e[te]===!0}var ne=Symbol("mapper-exception");function le(e){return{[ne]:!0,thrown:e}}function ce(e){return typeof e=="object"&&e!==null&&e[ne]===!0}function Ee(e){return typeof e=="string"?{name:e}:e??{}}function q(e,t){let{backoff:n,initialDelay:a,maxDelay:f,jitter:A}=t,E;switch(n){case"fixed":E=a;break;case"linear":E=a*e;break;case"exponential":E=a*Math.pow(2,e-1);break}if(E=Math.min(E,f),A){let r=E*.25*Math.random();E=E+r}return Math.floor(E)}function G(e){return new Promise(t=>setTimeout(t,e))}var Z=Symbol("timeout");async function ye(e,t,n){let a=new AbortController,f=t.error??{type:"STEP_TIMEOUT",stepName:n.name,stepKey:n.key,timeoutMs:t.ms,attempt:n.attempt},A,E=new Promise((I,C)=>{A=setTimeout(()=>{a.abort(),C({[Z]:!0,error:f})},t.ms)}),r;t.signal?r=Promise.resolve(e(a.signal)):r=Promise.resolve(e());try{return await Promise.race([r,E])}catch(I){if(typeof I=="object"&&I!==null&&I[Z]===!0){let C=I.error;if(typeof C=="object"&&C!==null&&C.type!=="STEP_TIMEOUT"){let L={timeoutMs:t.ms,stepName:n.name,stepKey:n.key,attempt:n.attempt};F in C?C[F]=L:Object.defineProperty(C,F,{value:L,enumerable:!1,writable:!0,configurable:!1})}throw C}throw I}finally{clearTimeout(A)}}var j={backoff:"exponential",initialDelay:100,maxDelay:3e4,jitter:!0,retryOn:()=>!0,onRetry:()=>{}};async function ee(e,t){let{onError:n,onEvent:a,catchUnexpected:f,workflowId:A,context:E}=t&&typeof t=="object"?t:{},r=A??crypto.randomUUID(),I=!n&&!f,C=[],L=0,X=o=>o??`step_${++L}`,y=o=>{let b=o.context!==void 0||E===void 0?o:{...o,context:E};if(b.type==="step_success"){let M=b.stepId;for(let D=C.length-1;D>=0;D--){let N=C[D];if(N.type==="race"&&!N.winnerId){N.winnerId=M;break}}}a?.(b,E)},O=ie,z=o=>pe(o),Y=(o,b)=>I?b?.origin==="result"?{type:"UNEXPECTED_ERROR",cause:{type:"STEP_FAILURE",origin:"result",error:o,...b.resultCause!==void 0?{cause:b.resultCause}:{}}}:b?.origin==="throw"?{type:"UNEXPECTED_ERROR",cause:{type:"STEP_FAILURE",origin:"throw",error:o,thrown:b.thrown}}:{type:"UNEXPECTED_ERROR",cause:{type:"STEP_FAILURE",origin:"result",error:o}}:o,re=o=>o.origin==="result"?o.resultCause:o.thrown,oe=o=>({type:"UNEXPECTED_ERROR",cause:o.meta.origin==="result"?{type:"STEP_FAILURE",origin:"result",error:o.error,...o.meta.resultCause!==void 0?{cause:o.meta.resultCause}:{}}:{type:"STEP_FAILURE",origin:"throw",error:o.error,thrown:o.meta.thrown}});try{let b=function(m,p){let i=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let s=performance.now(),u=!1;C.push({scopeId:i,type:"parallel"});let x=()=>{if(u)return;u=!0;let c=C.findIndex(l=>l.scopeId===i);c!==-1&&C.splice(c,1),y({type:"scope_end",workflowId:r,scopeId:i,ts:Date.now(),durationMs:performance.now()-s})};y({type:"scope_start",workflowId:r,scopeId:i,scopeType:"parallel",name:m,ts:Date.now()});try{let c=await p();if(x(),!c.ok)throw n?.(c.error,m,E),O(c.error,{origin:"result",resultCause:c.cause});return c.value}catch(c){throw x(),c}})()},M=function(m,p){let i=Object.keys(m),s=p.name??`Parallel(${i.join(", ")})`,u=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let x=performance.now(),c=!1;C.push({scopeId:u,type:"parallel"});let l=()=>{if(c)return;c=!0;let T=C.findIndex(R=>R.scopeId===u);T!==-1&&C.splice(T,1),y({type:"scope_end",workflowId:r,scopeId:u,ts:Date.now(),durationMs:performance.now()-x})};y({type:"scope_start",workflowId:r,scopeId:u,scopeType:"parallel",name:s,ts:Date.now()});try{let T=await new Promise(h=>{if(i.length===0){h([]);return}let _=!1,S=i.length,V=new Array(i.length);for(let v=0;v<i.length;v++){let K=i[v],$=v;Promise.resolve(m[K]()).catch(k=>d({type:"PROMISE_REJECTED",cause:k},{cause:{type:"PROMISE_REJECTION",reason:k}})).then(k=>{if(!_){if(!k.ok){_=!0,h([{key:K,result:k}]);return}V[$]={key:K,result:k},S--,S===0&&h(V)}})}});l();let R={};for(let{key:h,result:_}of T){if(!_.ok)throw n?.(_.error,h,E),O(_.error,{origin:"result",resultCause:_.cause});R[h]=_.value}return R}catch(T){throw l(),T}})()};var me=b,Te=M;let o=(m,p)=>(async()=>{let i=Ee(p),{name:s,key:u,retry:x,timeout:c}=i,l=X(u),T=a,R=T?performance.now():0;if(!(typeof m=="function")){if(x&&x.attempts>1)throw new Error("step: retry options require a function operation. Direct Promise/Result values cannot be re-executed on retry. Wrap your operation in a function: step(() => yourOperation, { retry: {...} })");if(c)throw new Error("step: timeout options require a function operation. Direct Promise/Result values cannot be wrapped with timeout after they've started. Wrap your operation in a function: step(() => yourOperation, { timeout: {...} })")}let S={attempts:Math.max(1,x?.attempts??1),backoff:x?.backoff??j.backoff,initialDelay:x?.initialDelay??j.initialDelay,maxDelay:x?.maxDelay??j.maxDelay,jitter:x?.jitter??j.jitter,retryOn:x?.retryOn??j.retryOn,onRetry:x?.onRetry??j.onRetry};a&&y({type:"step_start",workflowId:r,stepId:l,stepKey:u,name:s,ts:Date.now()});let V;for(let k=1;k<=S.attempts;k++){let se=T?performance.now():0;try{let w;if(typeof m=="function"?c?w=await ye(m,c,{name:s,key:u,attempt:k}):w=await m():w=await m,w.ok){let U=performance.now()-R;return y({type:"step_success",workflowId:r,stepId:l,stepKey:u,name:s,ts:Date.now(),durationMs:U}),u&&y({type:"step_complete",workflowId:r,stepKey:u,name:s,ts:Date.now(),durationMs:U,result:w}),w.value}if(V=w,k<S.attempts&&S.retryOn(w.error,k)){let U=q(k,S);y({type:"step_retry",workflowId:r,stepId:l,stepKey:u,name:s,ts:Date.now(),attempt:k+1,maxAttempts:S.attempts,delayMs:U,error:w.error}),S.onRetry(w.error,k,U),await G(U);continue}S.attempts>1&&y({type:"step_retries_exhausted",workflowId:r,stepId:l,stepKey:u,name:s,ts:Date.now(),durationMs:performance.now()-R,attempts:k,lastError:w.error});break}catch(w){let U=performance.now()-se;if(z(w))throw y({type:"step_aborted",workflowId:r,stepId:l,stepKey:u,name:s,ts:Date.now(),durationMs:U}),w;if(Q(w)){let P=ae(w),J=c?.ms??P?.timeoutMs??0;if(y({type:"step_timeout",workflowId:r,stepId:l,stepKey:u,name:s,ts:Date.now(),timeoutMs:J,attempt:k}),k<S.attempts&&S.retryOn(w,k)){let B=q(k,S);y({type:"step_retry",workflowId:r,stepId:l,stepKey:u,name:s,ts:Date.now(),attempt:k+1,maxAttempts:S.attempts,delayMs:B,error:w}),S.onRetry(w,k,B),await G(B);continue}S.attempts>1&&y({type:"step_retries_exhausted",workflowId:r,stepId:l,stepKey:u,name:s,ts:Date.now(),durationMs:performance.now()-R,attempts:k,lastError:w})}if(k<S.attempts&&S.retryOn(w,k)){let P=q(k,S);y({type:"step_retry",workflowId:r,stepId:l,stepKey:u,name:s,ts:Date.now(),attempt:k+1,maxAttempts:S.attempts,delayMs:P,error:w}),S.onRetry(w,k,P),await G(P);continue}S.attempts>1&&!Q(w)&&y({type:"step_retries_exhausted",workflowId:r,stepId:l,stepKey:u,name:s,ts:Date.now(),durationMs:performance.now()-R,attempts:k,lastError:w});let W=performance.now()-R;if(f){let P;try{P=f(w)}catch(J){throw le(J)}throw y({type:"step_error",workflowId:r,stepId:l,stepKey:u,name:s,ts:Date.now(),durationMs:W,error:P}),u&&y({type:"step_complete",workflowId:r,stepKey:u,name:s,ts:Date.now(),durationMs:W,result:d(P,{cause:w}),meta:{origin:"throw",thrown:w}}),n?.(P,s,E),O(P,{origin:"throw",thrown:w})}else{let P={type:"UNEXPECTED_ERROR",cause:{type:"UNCAUGHT_EXCEPTION",thrown:w}};throw y({type:"step_error",workflowId:r,stepId:l,stepKey:u,name:s,ts:Date.now(),durationMs:W,error:P}),u&&y({type:"step_complete",workflowId:r,stepKey:u,name:s,ts:Date.now(),durationMs:W,result:d(P,{cause:w}),meta:{origin:"throw",thrown:w}}),w}}}let v=V,K=performance.now()-R,$=Y(v.error,{origin:"result",resultCause:v.cause});throw y({type:"step_error",workflowId:r,stepId:l,stepKey:u,name:s,ts:Date.now(),durationMs:K,error:$}),u&&y({type:"step_complete",workflowId:r,stepKey:u,name:s,ts:Date.now(),durationMs:K,result:v,meta:{origin:"result",resultCause:v.cause}}),n?.(v.error,s,E),O(v.error,{origin:"result",resultCause:v.cause})})();o.try=(m,p)=>{let i=p.name,s=p.key,u=X(s),x="error"in p?()=>p.error:p.onError,c=a;return(async()=>{let l=c?performance.now():0;a&&y({type:"step_start",workflowId:r,stepId:u,stepKey:s,name:i,ts:Date.now()});try{let T=await m(),R=performance.now()-l;return y({type:"step_success",workflowId:r,stepId:u,stepKey:s,name:i,ts:Date.now(),durationMs:R}),s&&y({type:"step_complete",workflowId:r,stepKey:s,name:i,ts:Date.now(),durationMs:R,result:g(T)}),T}catch(T){let R=x(T),h=performance.now()-l,_=Y(R,{origin:"throw",thrown:T});throw y({type:"step_error",workflowId:r,stepId:u,stepKey:s,name:i,ts:Date.now(),durationMs:h,error:_}),s&&y({type:"step_complete",workflowId:r,stepKey:s,name:i,ts:Date.now(),durationMs:h,result:d(R,{cause:T}),meta:{origin:"throw",thrown:T}}),n?.(R,i,E),O(R,{origin:"throw",thrown:T})}})()},o.fromResult=(m,p)=>{let i=p.name,s=p.key,u=X(s),x="error"in p?()=>p.error:p.onError,c=a;return(async()=>{let l=c?performance.now():0;a&&y({type:"step_start",workflowId:r,stepId:u,stepKey:s,name:i,ts:Date.now()});let T=await m();if(T.ok){let R=performance.now()-l;return y({type:"step_success",workflowId:r,stepId:u,stepKey:s,name:i,ts:Date.now(),durationMs:R}),s&&y({type:"step_complete",workflowId:r,stepKey:s,name:i,ts:Date.now(),durationMs:R,result:g(T.value)}),T.value}else{let R=x(T.error),h=performance.now()-l,_=Y(R,{origin:"result",resultCause:T.error});throw y({type:"step_error",workflowId:r,stepId:u,stepKey:s,name:i,ts:Date.now(),durationMs:h,error:_}),s&&y({type:"step_complete",workflowId:r,stepKey:s,name:i,ts:Date.now(),durationMs:h,result:d(R,{cause:T.error}),meta:{origin:"result",resultCause:T.error}}),n?.(R,i,E),O(R,{origin:"result",resultCause:T.error})}})()},o.retry=(m,p)=>o(m,{name:p.name,key:p.key,retry:{attempts:p.attempts,backoff:p.backoff,initialDelay:p.initialDelay,maxDelay:p.maxDelay,jitter:p.jitter,retryOn:p.retryOn,onRetry:p.onRetry},timeout:p.timeout}),o.withTimeout=(m,p)=>o(m,{name:p.name,key:p.key,timeout:p}),o.parallel=((...m)=>{if(typeof m[0]=="string"){let p=m[0],i=m[1];return b(p,i)}else{let p=m[0],i=m[1]??{};return M(p,i)}}),o.race=(m,p)=>{let i=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let s=performance.now(),u=!1,x={scopeId:i,type:"race",winnerId:void 0};C.push(x);let c=()=>{if(u)return;u=!0;let l=C.findIndex(T=>T.scopeId===i);l!==-1&&C.splice(l,1),y({type:"scope_end",workflowId:r,scopeId:i,ts:Date.now(),durationMs:performance.now()-s,winnerId:x.winnerId})};y({type:"scope_start",workflowId:r,scopeId:i,scopeType:"race",name:m,ts:Date.now()});try{let l=await p();if(c(),!l.ok)throw n?.(l.error,m,E),O(l.error,{origin:"result",resultCause:l.cause});return l.value}catch(l){throw c(),l}})()},o.allSettled=(m,p)=>{let i=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let s=performance.now(),u=!1;C.push({scopeId:i,type:"allSettled"});let x=()=>{if(u)return;u=!0;let c=C.findIndex(l=>l.scopeId===i);c!==-1&&C.splice(c,1),y({type:"scope_end",workflowId:r,scopeId:i,ts:Date.now(),durationMs:performance.now()-s})};y({type:"scope_start",workflowId:r,scopeId:i,scopeType:"allSettled",name:m,ts:Date.now()});try{let c=await p();if(x(),!c.ok)throw n?.(c.error,m,E),O(c.error,{origin:"result",resultCause:c.cause});return c.value}catch(c){throw x(),c}})()};let N=await e(o);return g(N)}catch(o){if(ce(o))throw o.thrown;if(z(o)){let M=re(o.meta);if(f||n)return d(o.error,{cause:M});if(ue(o.error))return d(o.error,{cause:M});let D=oe(o);return d(D,{cause:M})}if(f){let M=f(o);return n?.(M,"unexpected",E),d(M,{cause:o})}let b={type:"UNEXPECTED_ERROR",cause:{type:"UNCAUGHT_EXCEPTION",thrown:o}};return n?.(b,"unexpected",E),d(b,{cause:o})}}ee.strict=(e,t)=>ee(e,t);var H=class extends Error{constructor(n,a){super(`Unwrap called on an error result: ${String(n)}`);this.error=n;this.cause=a;this.name="UnwrapError"}},fe=e=>{if(e.ok)return e.value;throw new H(e.error,e.cause)},Re=(e,t)=>e.ok?e.value:t,Ce=(e,t)=>e.ok?e.value:t(e.error,e.cause);function xe(e,t){try{return g(e())}catch(n){return t?d(t(n),{cause:n}):d(n)}}async function Se(e,t){try{return g(await e)}catch(n){return t?d(t(n),{cause:n}):d(n)}}async function ge(e,t){try{return g(await e())}catch(n){return t?d(t(n),{cause:n}):d(n)}}function Ae(e,t){return e!=null?g(e):d(t())}function be(e,t){return e.ok?g(t(e.value)):e}function Pe(e,t){return e.ok?e:d(t(e.error),{cause:e.cause})}function he(e,t){return e.ok?t.ok(e.value):t.err(e.error,e.cause)}function _e(e,t){return e.ok?t(e.value):e}function ve(e,t){return e.ok&&t(e.value),e}function Me(e,t){return e.ok||t(e.error,e.cause),e}function Ie(e,t,n){if(!e.ok)return e;try{return g(t(e.value))}catch(a){return d(n(a),{cause:a})}}function Oe(e,t,n){if(e.ok)return e;try{return d(t(e.error),{cause:e.cause})}catch(a){return d(n(a),{cause:a})}}function Ue(e,t,n){return e.ok?g(t(e.value)):d(n(e.error),{cause:e.cause})}function De(e,t){return e.ok?e:t(e.error,e.cause)}async function Ke(e,t){let n=await e;return n.ok?n:t(n.error,n.cause)}function je(e,t){return e.ok?g(e.value):g(t(e.error,e.cause))}async function Fe(e,t){let n=await e;return n.ok?g(n.value):g(await t(n.error,n.cause))}function we(e){return e!==null&&typeof e=="object"&&"ok"in e&&typeof e.ok=="boolean"&&(e.ok===!0&&"value"in e||e.ok===!1&&"error"in e)?e:null}function Ne(e){return we(e)!==null}function Ve(e){let t=[];for(let n of e){if(!n.ok)return n;t.push(n.value)}return g(t)}async function Le(e){return e.length===0?g([]):new Promise(t=>{let n=!1,a=e.length,f=new Array(e.length);for(let A=0;A<e.length;A++){let E=A;Promise.resolve(e[E]).catch(r=>d({type:"PROMISE_REJECTED",cause:r},{cause:{type:"PROMISE_REJECTION",reason:r}})).then(r=>{if(!n){if(!r.ok){n=!0,t(r);return}f[E]=r.value,a--,a===0&&t(g(f))}})}})}function We(e){let t=[],n=[];for(let a of e)a.ok?t.push(a.value):n.push({error:a.error,cause:a.cause});return n.length>0?d(n):g(t)}function Xe(e){let t=[],n=[];for(let a of e)a.ok?t.push(a.value):n.push(a.error);return{values:t,errors:n}}function Ye(e){if(e.length===0)return d({type:"EMPTY_INPUT",message:"any() requires at least one Result"});let t=null;for(let n of e){if(n.ok)return n;t||(t=n)}return t}async function $e(e){return e.length===0?d({type:"EMPTY_INPUT",message:"anyAsync() requires at least one Result"}):new Promise(t=>{let n=!1,a=e.length,f=null;for(let A of e)Promise.resolve(A).catch(E=>d({type:"PROMISE_REJECTED",cause:E},{cause:{type:"PROMISE_REJECTION",reason:E}})).then(E=>{if(!n){if(E.ok){n=!0,t(E);return}f||(f=E),a--,a===0&&t(f)}})})}async function Je(e){let t=await Promise.all(e.map(f=>Promise.resolve(f).then(A=>({status:"result",result:A})).catch(A=>({status:"rejected",error:{type:"PROMISE_REJECTED",cause:A},cause:{type:"PROMISE_REJECTION",reason:A}})))),n=[],a=[];for(let f of t)f.status==="rejected"?a.push({error:f.error,cause:f.cause}):f.result.ok?n.push(f.result.value):a.push({error:f.result.error,cause:f.result.cause});return a.length>0?d(a):g(n)}export{te as EARLY_EXIT_SYMBOL,F as STEP_TIMEOUT_MARKER,H as UnwrapError,Ve as all,Le as allAsync,We as allSettled,Je as allSettledAsync,_e as andThen,Ye as any,$e as anyAsync,Ue as bimap,ie as createEarlyExit,d as err,xe as from,Ae as fromNullable,Se as fromPromise,ae as getStepTimeoutMeta,we as hydrate,pe as isEarlyExit,de as isErr,ke as isOk,Ne as isSerializedResult,Q as isStepTimeoutError,ue as isUnexpectedError,be as map,Pe as mapError,Oe as mapErrorTry,Ie as mapTry,he as match,g as ok,De as orElse,Ke as orElseAsync,Xe as partition,je as recover,Fe as recoverAsync,ee as run,ve as tap,Me as tapError,ge as tryAsync,fe as unwrap,Re as unwrapOr,Ce as unwrapOrElse};
|
|
2
2
|
//# sourceMappingURL=core.js.map
|