@jagreehal/workflow 1.9.0 → 1.10.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/workflow.js CHANGED
@@ -1,2 +1,2 @@
1
- var M=e=>({ok:!0,value:e}),S=(e,o)=>({ok:!1,error:e,...o?.cause!==void 0?{cause:o.cause}:{}});var ye=e=>typeof e=="object"&&e!==null&&e.type==="UNEXPECTED_ERROR",X=Symbol.for("step_timeout_marker");function ae(e){return typeof e!="object"||e===null?!1:e.type==="STEP_TIMEOUT"?!0:X in e}function we(e){if(!(typeof e!="object"||e===null)){if(e.type==="STEP_TIMEOUT"){let o=e;return{timeoutMs:o.timeoutMs,stepName:o.stepName,stepKey:o.stepKey,attempt:o.attempt}}if(X in e)return e[X]}}var pe=Symbol("early-exit");function Y(e,o){return{[pe]:!0,error:e,meta:o}}function $(e){return typeof e=="object"&&e!==null&&e[pe]===!0}var ce=Symbol("mapper-exception");function me(e){return{[ce]:!0,thrown:e}}function ke(e){return typeof e=="object"&&e!==null&&e[ce]===!0}function de(e){return typeof e=="string"?{name:e}:e??{}}function re(e,o){let{backoff:E,initialDelay:x,maxDelay:D,jitter:K}=o,C;switch(E){case"fixed":C=x;break;case"linear":C=x*e;break;case"exponential":C=x*Math.pow(2,e-1);break}if(C=Math.min(C,D),K){let c=C*.25*Math.random();C=C+c}return Math.floor(C)}function oe(e){return new Promise(o=>setTimeout(o,e))}var ie=Symbol("timeout");async function fe(e,o,E){let x=new AbortController,D=o.error??{type:"STEP_TIMEOUT",stepName:E.name,stepKey:E.key,timeoutMs:o.ms,attempt:E.attempt},K,C=new Promise((f,m)=>{K=setTimeout(()=>{x.abort(),m({[ie]:!0,error:D})},o.ms)}),c;o.signal?c=Promise.resolve(e(x.signal)):c=Promise.resolve(e());try{return await Promise.race([c,C])}catch(f){if(typeof f=="object"&&f!==null&&f[ie]===!0){let m=f.error;if(typeof m=="object"&&m!==null&&m.type!=="STEP_TIMEOUT"){let j={timeoutMs:o.ms,stepName:E.name,stepKey:E.key,attempt:E.attempt};X in m?m[X]=j:Object.defineProperty(m,X,{value:j,enumerable:!1,writable:!0,configurable:!1})}throw m}throw f}finally{clearTimeout(K)}}var L={backoff:"exponential",initialDelay:100,maxDelay:3e4,jitter:!0,retryOn:()=>!0,onRetry:()=>{}};async function H(e,o){let{onError:E,onEvent:x,catchUnexpected:D,workflowId:K,context:C}=o&&typeof o=="object"?o:{},c=K??crypto.randomUUID(),f=!E&&!D,m=[],j=0,v=p=>p??`step_${++j}`,w=p=>{let g=p.context!==void 0||C===void 0?p:{...p,context:C};if(g.type==="step_success"){let b=g.stepId;for(let W=m.length-1;W>=0;W--){let I=m[W];if(I.type==="race"&&!I.winnerId){I.winnerId=b;break}}}x?.(g,C)},P=Y,G=p=>$(p),B=(p,g)=>f?g?.origin==="result"?{type:"UNEXPECTED_ERROR",cause:{type:"STEP_FAILURE",origin:"result",error:p,...g.resultCause!==void 0?{cause:g.resultCause}:{}}}:g?.origin==="throw"?{type:"UNEXPECTED_ERROR",cause:{type:"STEP_FAILURE",origin:"throw",error:p,thrown:g.thrown}}:{type:"UNEXPECTED_ERROR",cause:{type:"STEP_FAILURE",origin:"result",error:p}}:p,Z=p=>p.origin==="result"?p.resultCause:p.thrown,F=p=>({type:"UNEXPECTED_ERROR",cause:p.meta.origin==="result"?{type:"STEP_FAILURE",origin:"result",error:p.error,...p.meta.resultCause!==void 0?{cause:p.meta.resultCause}:{}}:{type:"STEP_FAILURE",origin:"throw",error:p.error,thrown:p.meta.thrown}});try{let g=function(k,r){let s=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let u=performance.now(),t=!1;m.push({scopeId:s,type:"parallel"});let l=()=>{if(t)return;t=!0;let n=m.findIndex(a=>a.scopeId===s);n!==-1&&m.splice(n,1),w({type:"scope_end",workflowId:c,scopeId:s,ts:Date.now(),durationMs:performance.now()-u})};w({type:"scope_start",workflowId:c,scopeId:s,scopeType:"parallel",name:k,ts:Date.now()});try{let n=await r();if(l(),!n.ok)throw E?.(n.error,k,C),P(n.error,{origin:"result",resultCause:n.cause});return n.value}catch(n){throw l(),n}})()},b=function(k,r){let s=Object.keys(k),u=r.name??`Parallel(${s.join(", ")})`,t=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let l=performance.now(),n=!1;m.push({scopeId:t,type:"parallel"});let a=()=>{if(n)return;n=!0;let i=m.findIndex(y=>y.scopeId===t);i!==-1&&m.splice(i,1),w({type:"scope_end",workflowId:c,scopeId:t,ts:Date.now(),durationMs:performance.now()-l})};w({type:"scope_start",workflowId:c,scopeId:t,scopeType:"parallel",name:u,ts:Date.now()});try{let i=await new Promise(h=>{if(s.length===0){h([]);return}let _=!1,A=s.length,J=new Array(s.length);for(let O=0;O<s.length;O++){let V=s[O],ee=O;Promise.resolve(k[V]()).catch(R=>S({type:"PROMISE_REJECTED",cause:R},{cause:{type:"PROMISE_REJECTION",reason:R}})).then(R=>{if(!_){if(!R.ok){_=!0,h([{key:V,result:R}]);return}J[ee]={key:V,result:R},A--,A===0&&h(J)}})}});a();let y={};for(let{key:h,result:_}of i){if(!_.ok)throw E?.(_.error,h,C),P(_.error,{origin:"result",resultCause:_.cause});y[h]=_.value}return y}catch(i){throw a(),i}})()};var T=g,ue=b;let p=(k,r)=>(async()=>{let s=de(r),{name:u,key:t,retry:l,timeout:n}=s,a=v(t),i=x,y=i?performance.now():0;if(!(typeof k=="function")){if(l&&l.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(n)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 A={attempts:Math.max(1,l?.attempts??1),backoff:l?.backoff??L.backoff,initialDelay:l?.initialDelay??L.initialDelay,maxDelay:l?.maxDelay??L.maxDelay,jitter:l?.jitter??L.jitter,retryOn:l?.retryOn??L.retryOn,onRetry:l?.onRetry??L.onRetry};x&&w({type:"step_start",workflowId:c,stepId:a,stepKey:t,name:u,ts:Date.now()});let J;for(let R=1;R<=A.attempts;R++){let Ee=i?performance.now():0;try{let d;if(typeof k=="function"?n?d=await fe(k,n,{name:u,key:t,attempt:R}):d=await k():d=await k,d.ok){let N=performance.now()-y;return w({type:"step_success",workflowId:c,stepId:a,stepKey:t,name:u,ts:Date.now(),durationMs:N}),t&&w({type:"step_complete",workflowId:c,stepKey:t,name:u,ts:Date.now(),durationMs:N,result:d}),d.value}if(J=d,R<A.attempts&&A.retryOn(d.error,R)){let N=re(R,A);w({type:"step_retry",workflowId:c,stepId:a,stepKey:t,name:u,ts:Date.now(),attempt:R+1,maxAttempts:A.attempts,delayMs:N,error:d.error}),A.onRetry(d.error,R,N),await oe(N);continue}A.attempts>1&&w({type:"step_retries_exhausted",workflowId:c,stepId:a,stepKey:t,name:u,ts:Date.now(),durationMs:performance.now()-y,attempts:R,lastError:d.error});break}catch(d){let N=performance.now()-Ee;if(G(d))throw w({type:"step_aborted",workflowId:c,stepId:a,stepKey:t,name:u,ts:Date.now(),durationMs:N}),d;if(ae(d)){let U=we(d),te=n?.ms??U?.timeoutMs??0;if(w({type:"step_timeout",workflowId:c,stepId:a,stepKey:t,name:u,ts:Date.now(),timeoutMs:te,attempt:R}),R<A.attempts&&A.retryOn(d,R)){let ne=re(R,A);w({type:"step_retry",workflowId:c,stepId:a,stepKey:t,name:u,ts:Date.now(),attempt:R+1,maxAttempts:A.attempts,delayMs:ne,error:d}),A.onRetry(d,R,ne),await oe(ne);continue}A.attempts>1&&w({type:"step_retries_exhausted",workflowId:c,stepId:a,stepKey:t,name:u,ts:Date.now(),durationMs:performance.now()-y,attempts:R,lastError:d})}if(R<A.attempts&&A.retryOn(d,R)){let U=re(R,A);w({type:"step_retry",workflowId:c,stepId:a,stepKey:t,name:u,ts:Date.now(),attempt:R+1,maxAttempts:A.attempts,delayMs:U,error:d}),A.onRetry(d,R,U),await oe(U);continue}A.attempts>1&&!ae(d)&&w({type:"step_retries_exhausted",workflowId:c,stepId:a,stepKey:t,name:u,ts:Date.now(),durationMs:performance.now()-y,attempts:R,lastError:d});let q=performance.now()-y;if(D){let U;try{U=D(d)}catch(te){throw me(te)}throw w({type:"step_error",workflowId:c,stepId:a,stepKey:t,name:u,ts:Date.now(),durationMs:q,error:U}),t&&w({type:"step_complete",workflowId:c,stepKey:t,name:u,ts:Date.now(),durationMs:q,result:S(U,{cause:d}),meta:{origin:"throw",thrown:d}}),E?.(U,u,C),P(U,{origin:"throw",thrown:d})}else{let U={type:"UNEXPECTED_ERROR",cause:{type:"UNCAUGHT_EXCEPTION",thrown:d}};throw w({type:"step_error",workflowId:c,stepId:a,stepKey:t,name:u,ts:Date.now(),durationMs:q,error:U}),t&&w({type:"step_complete",workflowId:c,stepKey:t,name:u,ts:Date.now(),durationMs:q,result:S(U,{cause:d}),meta:{origin:"throw",thrown:d}}),d}}}let O=J,V=performance.now()-y,ee=B(O.error,{origin:"result",resultCause:O.cause});throw w({type:"step_error",workflowId:c,stepId:a,stepKey:t,name:u,ts:Date.now(),durationMs:V,error:ee}),t&&w({type:"step_complete",workflowId:c,stepKey:t,name:u,ts:Date.now(),durationMs:V,result:O,meta:{origin:"result",resultCause:O.cause}}),E?.(O.error,u,C),P(O.error,{origin:"result",resultCause:O.cause})})();p.try=(k,r)=>{let s=r.name,u=r.key,t=v(u),l="error"in r?()=>r.error:r.onError,n=x;return(async()=>{let a=n?performance.now():0;x&&w({type:"step_start",workflowId:c,stepId:t,stepKey:u,name:s,ts:Date.now()});try{let i=await k(),y=performance.now()-a;return w({type:"step_success",workflowId:c,stepId:t,stepKey:u,name:s,ts:Date.now(),durationMs:y}),u&&w({type:"step_complete",workflowId:c,stepKey:u,name:s,ts:Date.now(),durationMs:y,result:M(i)}),i}catch(i){let y=l(i),h=performance.now()-a,_=B(y,{origin:"throw",thrown:i});throw w({type:"step_error",workflowId:c,stepId:t,stepKey:u,name:s,ts:Date.now(),durationMs:h,error:_}),u&&w({type:"step_complete",workflowId:c,stepKey:u,name:s,ts:Date.now(),durationMs:h,result:S(y,{cause:i}),meta:{origin:"throw",thrown:i}}),E?.(y,s,C),P(y,{origin:"throw",thrown:i})}})()},p.fromResult=(k,r)=>{let s=r.name,u=r.key,t=v(u),l="error"in r?()=>r.error:r.onError,n=x;return(async()=>{let a=n?performance.now():0;x&&w({type:"step_start",workflowId:c,stepId:t,stepKey:u,name:s,ts:Date.now()});let i=await k();if(i.ok){let y=performance.now()-a;return w({type:"step_success",workflowId:c,stepId:t,stepKey:u,name:s,ts:Date.now(),durationMs:y}),u&&w({type:"step_complete",workflowId:c,stepKey:u,name:s,ts:Date.now(),durationMs:y,result:M(i.value)}),i.value}else{let y=l(i.error),h=performance.now()-a,_=B(y,{origin:"result",resultCause:i.error});throw w({type:"step_error",workflowId:c,stepId:t,stepKey:u,name:s,ts:Date.now(),durationMs:h,error:_}),u&&w({type:"step_complete",workflowId:c,stepKey:u,name:s,ts:Date.now(),durationMs:h,result:S(y,{cause:i.error}),meta:{origin:"result",resultCause:i.error}}),E?.(y,s,C),P(y,{origin:"result",resultCause:i.error})}})()},p.retry=(k,r)=>p(k,{name:r.name,key:r.key,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=(k,r)=>p(k,{name:r.name,key:r.key,timeout:r}),p.parallel=((...k)=>{if(typeof k[0]=="string"){let r=k[0],s=k[1];return g(r,s)}else{let r=k[0],s=k[1]??{};return b(r,s)}}),p.race=(k,r)=>{let s=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let u=performance.now(),t=!1,l={scopeId:s,type:"race",winnerId:void 0};m.push(l);let n=()=>{if(t)return;t=!0;let a=m.findIndex(i=>i.scopeId===s);a!==-1&&m.splice(a,1),w({type:"scope_end",workflowId:c,scopeId:s,ts:Date.now(),durationMs:performance.now()-u,winnerId:l.winnerId})};w({type:"scope_start",workflowId:c,scopeId:s,scopeType:"race",name:k,ts:Date.now()});try{let a=await r();if(n(),!a.ok)throw E?.(a.error,k,C),P(a.error,{origin:"result",resultCause:a.cause});return a.value}catch(a){throw n(),a}})()},p.allSettled=(k,r)=>{let s=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let u=performance.now(),t=!1;m.push({scopeId:s,type:"allSettled"});let l=()=>{if(t)return;t=!0;let n=m.findIndex(a=>a.scopeId===s);n!==-1&&m.splice(n,1),w({type:"scope_end",workflowId:c,scopeId:s,ts:Date.now(),durationMs:performance.now()-u})};w({type:"scope_start",workflowId:c,scopeId:s,scopeType:"allSettled",name:k,ts:Date.now()});try{let n=await r();if(l(),!n.ok)throw E?.(n.error,k,C),P(n.error,{origin:"result",resultCause:n.cause});return n.value}catch(n){throw l(),n}})()};let I=await e(p);return M(I)}catch(p){if(ke(p))throw p.thrown;if(G(p)){let b=Z(p.meta);if(D||E)return S(p.error,{cause:b});if(ye(p.error))return S(p.error,{cause:b});let W=F(p);return S(W,{cause:b})}if(D){let b=D(p);return E?.(b,"unexpected",C),S(b,{cause:p})}let g={type:"UNEXPECTED_ERROR",cause:{type:"UNCAUGHT_EXCEPTION",thrown:p}};return E?.(g,"unexpected",C),S(g,{cause:p})}}H.strict=(e,o)=>H(e,o);function xe(){let e=new Map;return{handleEvent:o=>{le(o)&&e.set(o.stepKey,{result:o.result,meta:o.meta})},getState:()=>({steps:new Map(e)}),clear:()=>e.clear()}}function Te(e){return typeof e=="object"&&e!==null&&e.__cachedMeta===!0}function z(e,o,E){return S(e,{cause:{__cachedMeta:!0,originalCause:E,meta:o}})}function se(e){return Te(e)?e.meta:{origin:"result",resultCause:e}}function Se(e,o){async function E(x,D){let K=typeof D=="function",C=K?x:void 0,c=K?D:x,f=crypto.randomUUID(),m=o?.createContext?.(),j={workflowId:f,onEvent:o?.onEvent,context:m!==void 0?m:void 0},v=r=>{let s=r.context!==void 0||m===void 0?r:{...r,context:m};o?.onEvent?.(s,m)},w=o?.shouldRun,P=o?.catchUnexpected;if(w){let r=performance.now();try{let s=await w(f,m),u=performance.now()-r;if(v({type:"hook_should_run",workflowId:f,ts:Date.now(),durationMs:u,result:s,skipped:!s}),!s){let t=new Error("Workflow skipped by shouldRun hook");if(P){let n=P(t);return S(n)}return S({type:"UNEXPECTED_ERROR",cause:{type:"UNCAUGHT_EXCEPTION",thrown:t}})}}catch(s){let u=performance.now()-r;if(v({type:"hook_should_run_error",workflowId:f,ts:Date.now(),durationMs:u,error:s}),P){let l=P(s);return S(l)}return S({type:"UNEXPECTED_ERROR",cause:{type:"UNCAUGHT_EXCEPTION",thrown:s}})}}let G=o?.onBeforeStart;if(G){let r=performance.now();try{let s=await G(f,m),u=performance.now()-r;if(v({type:"hook_before_start",workflowId:f,ts:Date.now(),durationMs:u,result:s,skipped:!s}),!s){let t=new Error("Workflow skipped by onBeforeStart hook");if(P){let n=P(t);return S(n)}return S({type:"UNEXPECTED_ERROR",cause:{type:"UNCAUGHT_EXCEPTION",thrown:t}})}}catch(s){let u=performance.now()-r;if(v({type:"hook_before_start_error",workflowId:f,ts:Date.now(),durationMs:u,error:s}),P){let l=P(s);return S(l)}return S({type:"UNEXPECTED_ERROR",cause:{type:"UNCAUGHT_EXCEPTION",thrown:s}})}}let B=Date.now(),Z=performance.now();v({type:"workflow_start",workflowId:f,ts:B});let F=o?.resumeState,T=o?.cache;if(F&&!T&&(T=new Map),F&&T){let r=typeof F=="function"?await F():F;for(let[s,u]of r.steps){let{result:t,meta:l}=u;if(t.ok)T.set(s,t);else{let n=l??{origin:"result",resultCause:t.cause};T.set(s,z(t.error,n,t.cause))}}}let ue=r=>typeof r=="string"?{name:r}:r??{},p=o?.onAfterStep,g=async(r,s)=>{if(!p)return;let u=performance.now();try{await p(r,s,f,m);let t=performance.now()-u;v({type:"hook_after_step",workflowId:f,stepKey:r,ts:Date.now(),durationMs:t})}catch(t){let l=performance.now()-u;throw v({type:"hook_after_step_error",workflowId:f,stepKey:r,ts:Date.now(),durationMs:l,error:t}),t}},b=r=>{if(!T&&!p)return r;let s=async(u,t)=>{let{name:l,key:n}=ue(t);if(n&&T&&T.has(n)){v({type:"step_cache_hit",workflowId:f,stepKey:n,name:l,ts:Date.now()});let i=T.get(n);if(i.ok)return i.value;let y=se(i.cause);throw Y(i.error,y)}n&&T&&v({type:"step_cache_miss",workflowId:f,stepKey:n,name:l,ts:Date.now()});let a=typeof u=="function"?u:()=>u;try{let i=await r(a,t);return n&&(T&&T.set(n,M(i)),await g(n,M(i))),i}catch(i){if(n&&$(i)){let y=i,h=y.meta.origin==="result"?y.meta.resultCause:y.meta.thrown,_=z(y.error,y.meta,h);T&&T.set(n,_),await g(n,_)}throw i}};return s.try=async(u,t)=>{let{name:l,key:n}=t;if(n&&T&&T.has(n)){v({type:"step_cache_hit",workflowId:f,stepKey:n,name:l,ts:Date.now()});let a=T.get(n);if(a.ok)return a.value;let i=se(a.cause);throw Y(a.error,i)}n&&T&&v({type:"step_cache_miss",workflowId:f,stepKey:n,name:l,ts:Date.now()});try{let a=await r.try(u,t);return n&&(T&&T.set(n,M(a)),await g(n,M(a))),a}catch(a){if(n&&$(a)){let i=a,y=i.meta.origin==="result"?i.meta.resultCause:i.meta.thrown,h=z(i.error,i.meta,y);T&&T.set(n,h),await g(n,h)}throw a}},s.fromResult=async(u,t)=>{let{name:l,key:n}=t;if(n&&T&&T.has(n)){v({type:"step_cache_hit",workflowId:f,stepKey:n,name:l,ts:Date.now()});let a=T.get(n);if(a.ok)return a.value;let i=se(a.cause);throw Y(a.error,i)}n&&T&&v({type:"step_cache_miss",workflowId:f,stepKey:n,name:l,ts:Date.now()});try{let a=await r.fromResult(u,t);return n&&(T&&T.set(n,M(a)),await g(n,M(a))),a}catch(a){if(n&&$(a)){let i=a,y=i.meta.origin==="result"?i.meta.resultCause:i.meta.thrown,h=z(i.error,i.meta,y);T&&T.set(n,h),await g(n,h)}throw a}},s.parallel=r.parallel,s.race=r.race,s.allSettled=r.allSettled,s.retry=(u,t)=>s(u,{name:t.name,key:t.key,retry:{attempts:t.attempts,backoff:t.backoff,initialDelay:t.initialDelay,maxDelay:t.maxDelay,jitter:t.jitter,retryOn:t.retryOn,onRetry:t.onRetry},timeout:t.timeout}),s.withTimeout=(u,t)=>s(u,{name:t.name,key:t.key,timeout:t}),s},W=K?r=>c(b(r),e,C,j):r=>c(b(r),e,j),I;if(o?.strict===!0){let r=o;I=await H.strict(W,{onError:r.onError,onEvent:r.onEvent,catchUnexpected:r.catchUnexpected,workflowId:f,context:m})}else{let r=o;I=await H(W,{onError:r?.onError??(()=>{}),onEvent:r?.onEvent,workflowId:f,context:m})}let k=performance.now()-Z;return I.ok?v({type:"workflow_success",workflowId:f,ts:Date.now(),durationMs:k}):v({type:"workflow_error",workflowId:f,ts:Date.now(),durationMs:k,error:I.error}),I}return E}function le(e){return e.type==="step_complete"}function Q(e){return typeof e=="object"&&e!==null&&e.type==="PENDING_APPROVAL"}function ge(e){return typeof e=="object"&&e!==null&&e.type==="APPROVAL_REJECTED"}function Ae(e,o){return S({type:"PENDING_APPROVAL",stepKey:e,reason:o?.reason,metadata:o?.metadata})}function he(e){return async()=>{let o=await e.checkApproval();switch(o.status){case"pending":return S({type:"PENDING_APPROVAL",stepKey:e.key,reason:e.pendingReason,metadata:e.metadata});case"rejected":return S({type:"APPROVAL_REJECTED",stepKey:e.key,reason:o.reason});case"approved":return M(o.value)}}}function ve(e,o){let E=new Map(e.steps);return E.set(o.stepKey,{result:M(o.value)}),{steps:E}}function Pe(e,o){let E=new Map(e.steps);return E.delete(o),{steps:E}}function _e(e,o){let E=e.steps.get(o);return!E||E.result.ok?!1:Q(E.result.error)}function be(e){let o=[];for(let[E,x]of e.steps)!x.result.ok&&Q(x.result.error)&&o.push(E);return o}function Ue(){let e=new Map;return{handleEvent:o=>{le(o)&&e.set(o.stepKey,{result:o.result,meta:o.meta})},getState:()=>({steps:new Map(e)}),clear:()=>e.clear(),hasPendingApprovals:()=>{for(let o of e.values())if(!o.result.ok&&Q(o.result.error))return!0;return!1},getPendingApprovals:()=>{let o=[];for(let[E,x]of e)!x.result.ok&&Q(x.result.error)&&o.push({stepKey:E,error:x.result.error});return o},injectApproval:(o,E)=>(e.set(o,{result:M(E)}),{steps:new Map(e)})}}export{Pe as clearStep,he as createApprovalStep,Ue as createHITLCollector,xe as createStepCollector,Se as createWorkflow,be as getPendingApprovals,_e as hasPendingApproval,ve as injectApproval,ge as isApprovalRejected,Q as isPendingApproval,le as isStepComplete,Ae as pendingApproval};
1
+ var M=e=>({ok:!0,value:e}),A=(e,o)=>({ok:!1,error:e,...o?.cause!==void 0?{cause:o.cause}:{}});var Ee=e=>typeof e=="object"&&e!==null&&e.type==="UNEXPECTED_ERROR",X=Symbol.for("step_timeout_marker");function ue(e){return typeof e!="object"||e===null?!1:e.type==="STEP_TIMEOUT"?!0:X in e}function ye(e){if(!(typeof e!="object"||e===null)){if(e.type==="STEP_TIMEOUT"){let o=e;return{timeoutMs:o.timeoutMs,stepName:o.stepName,stepKey:o.stepKey,attempt:o.attempt}}if(X in e)return e[X]}}var ie=Symbol("early-exit");function Y(e,o){return{[ie]:!0,error:e,meta:o}}function $(e){return typeof e=="object"&&e!==null&&e[ie]===!0}var pe=Symbol("mapper-exception");function we(e){return{[pe]:!0,thrown:e}}function me(e){return typeof e=="object"&&e!==null&&e[pe]===!0}function ke(e){return typeof e=="string"?{name:e}:e??{}}function re(e,o){let{backoff:y,initialDelay:g,maxDelay:D,jitter:I}=o,C;switch(y){case"fixed":C=g;break;case"linear":C=g*e;break;case"exponential":C=g*Math.pow(2,e-1);break}if(C=Math.min(C,D),I){let l=C*.25*Math.random();C=C+l}return Math.floor(C)}function oe(e){return new Promise(o=>setTimeout(o,e))}var ae=Symbol("timeout");async function de(e,o,y){let g=new AbortController,D=o.error??{type:"STEP_TIMEOUT",stepName:y.name,stepKey:y.key,timeoutMs:o.ms,attempt:y.attempt},I,C=new Promise((f,k)=>{I=setTimeout(()=>{g.abort(),k({[ae]:!0,error:D})},o.ms)}),l;o.signal?l=Promise.resolve(e(g.signal)):l=Promise.resolve(e());try{return await Promise.race([l,C])}catch(f){if(typeof f=="object"&&f!==null&&f[ae]===!0){let k=f.error;if(typeof k=="object"&&k!==null&&k.type!=="STEP_TIMEOUT"){let j={timeoutMs:o.ms,stepName:y.name,stepKey:y.key,attempt:y.attempt};X in k?k[X]=j:Object.defineProperty(k,X,{value:j,enumerable:!1,writable:!0,configurable:!1})}throw k}throw f}finally{clearTimeout(I)}}var L={backoff:"exponential",initialDelay:100,maxDelay:3e4,jitter:!0,retryOn:()=>!0,onRetry:()=>{}};async function H(e,o){let{onError:y,onEvent:g,catchUnexpected:D,workflowId:I,context:C}=o&&typeof o=="object"?o:{},l=I??crypto.randomUUID(),f=!y&&!D,k=[],j=0,v=c=>c??`step_${++j}`,w=c=>{let P=c.context!==void 0||C===void 0?c:{...c,context:C};if(P.type==="step_success"){let _=P.stepId;for(let K=k.length-1;K>=0;K--){let W=k[K];if(W.type==="race"&&!W.winnerId){W.winnerId=_;break}}}g?.(P,C)},b=Y,G=c=>$(c),B=(c,P)=>f?P?.origin==="result"?{type:"UNEXPECTED_ERROR",cause:{type:"STEP_FAILURE",origin:"result",error:c,...P.resultCause!==void 0?{cause:P.resultCause}:{}}}:P?.origin==="throw"?{type:"UNEXPECTED_ERROR",cause:{type:"STEP_FAILURE",origin:"throw",error:c,thrown:P.thrown}}:{type:"UNEXPECTED_ERROR",cause:{type:"STEP_FAILURE",origin:"result",error:c}}:c,Z=c=>({type:"UNEXPECTED_ERROR",cause:c.meta.origin==="result"?{type:"STEP_FAILURE",origin:"result",error:c.error,...c.meta.resultCause!==void 0?{cause:c.meta.resultCause}:{}}:{type:"STEP_FAILURE",origin:"throw",error:c.error,thrown:c.meta.thrown}});try{let P=function(m,E){let n=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let r=performance.now(),s=!1;k.push({scopeId:n,type:"parallel"});let u=()=>{if(s)return;s=!0;let p=k.findIndex(t=>t.scopeId===n);p!==-1&&k.splice(p,1),w({type:"scope_end",workflowId:l,scopeId:n,ts:Date.now(),durationMs:performance.now()-r})};w({type:"scope_start",workflowId:l,scopeId:n,scopeType:"parallel",name:m,ts:Date.now()});try{let p=await E();if(u(),!p.ok)throw y?.(p.error,m,C),b(p.error,{origin:"result",resultCause:p.cause});return p.value}catch(p){throw u(),p}})()},_=function(m,E){let n=Object.keys(m),r=E.name??`Parallel(${n.join(", ")})`,s=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let u=performance.now(),p=!1;k.push({scopeId:s,type:"parallel"});let t=()=>{if(p)return;p=!0;let a=k.findIndex(i=>i.scopeId===s);a!==-1&&k.splice(a,1),w({type:"scope_end",workflowId:l,scopeId:s,ts:Date.now(),durationMs:performance.now()-u})};w({type:"scope_start",workflowId:l,scopeId:s,scopeType:"parallel",name:r,ts:Date.now()});try{let a=await new Promise(x=>{if(n.length===0){x([]);return}let h=!1,S=n.length,J=new Array(n.length);for(let O=0;O<n.length;O++){let V=n[O],ee=O;Promise.resolve(m[V]()).catch(R=>A({type:"PROMISE_REJECTED",cause:R},{cause:{type:"PROMISE_REJECTION",reason:R}})).then(R=>{if(!h){if(!R.ok){h=!0,x([{key:V,result:R}]);return}J[ee]={key:V,result:R},S--,S===0&&x(J)}})}});t();let i={};for(let{key:x,result:h}of a){if(!h.ok)throw y?.(h.error,x,C),b(h.error,{origin:"result",resultCause:h.cause});i[x]=h.value}return i}catch(a){throw t(),a}})()};var F=P,T=_;let c=(m,E)=>(async()=>{let n=ke(E),{name:r,key:s,retry:u,timeout:p}=n,t=v(s),a=g,i=a?performance.now():0;if(!(typeof m=="function")){if(u&&u.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(p)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,u?.attempts??1),backoff:u?.backoff??L.backoff,initialDelay:u?.initialDelay??L.initialDelay,maxDelay:u?.maxDelay??L.maxDelay,jitter:u?.jitter??L.jitter,retryOn:u?.retryOn??L.retryOn,onRetry:u?.onRetry??L.onRetry};g&&w({type:"step_start",workflowId:l,stepId:t,stepKey:s,name:r,ts:Date.now()});let J;for(let R=1;R<=S.attempts;R++){let le=a?performance.now():0;try{let d;if(typeof m=="function"?p?d=await de(m,p,{name:r,key:s,attempt:R}):d=await m():d=await m,d.ok){let N=performance.now()-i;return w({type:"step_success",workflowId:l,stepId:t,stepKey:s,name:r,ts:Date.now(),durationMs:N}),s&&w({type:"step_complete",workflowId:l,stepKey:s,name:r,ts:Date.now(),durationMs:N,result:d}),d.value}if(J=d,R<S.attempts&&S.retryOn(d.error,R)){let N=re(R,S);w({type:"step_retry",workflowId:l,stepId:t,stepKey:s,name:r,ts:Date.now(),attempt:R+1,maxAttempts:S.attempts,delayMs:N,error:d.error}),S.onRetry(d.error,R,N),await oe(N);continue}S.attempts>1&&w({type:"step_retries_exhausted",workflowId:l,stepId:t,stepKey:s,name:r,ts:Date.now(),durationMs:performance.now()-i,attempts:R,lastError:d.error});break}catch(d){let N=performance.now()-le;if(G(d))throw w({type:"step_aborted",workflowId:l,stepId:t,stepKey:s,name:r,ts:Date.now(),durationMs:N}),d;if(ue(d)){let U=ye(d),te=p?.ms??U?.timeoutMs??0;if(w({type:"step_timeout",workflowId:l,stepId:t,stepKey:s,name:r,ts:Date.now(),timeoutMs:te,attempt:R}),R<S.attempts&&S.retryOn(d,R)){let ne=re(R,S);w({type:"step_retry",workflowId:l,stepId:t,stepKey:s,name:r,ts:Date.now(),attempt:R+1,maxAttempts:S.attempts,delayMs:ne,error:d}),S.onRetry(d,R,ne),await oe(ne);continue}S.attempts>1&&w({type:"step_retries_exhausted",workflowId:l,stepId:t,stepKey:s,name:r,ts:Date.now(),durationMs:performance.now()-i,attempts:R,lastError:d})}if(R<S.attempts&&S.retryOn(d,R)){let U=re(R,S);w({type:"step_retry",workflowId:l,stepId:t,stepKey:s,name:r,ts:Date.now(),attempt:R+1,maxAttempts:S.attempts,delayMs:U,error:d}),S.onRetry(d,R,U),await oe(U);continue}S.attempts>1&&!ue(d)&&w({type:"step_retries_exhausted",workflowId:l,stepId:t,stepKey:s,name:r,ts:Date.now(),durationMs:performance.now()-i,attempts:R,lastError:d});let q=performance.now()-i;if(D){let U;try{U=D(d)}catch(te){throw we(te)}throw w({type:"step_error",workflowId:l,stepId:t,stepKey:s,name:r,ts:Date.now(),durationMs:q,error:U}),s&&w({type:"step_complete",workflowId:l,stepKey:s,name:r,ts:Date.now(),durationMs:q,result:A(U,{cause:d}),meta:{origin:"throw",thrown:d}}),y?.(U,r,C),b(U,{origin:"throw",thrown:d})}else{let U={type:"UNEXPECTED_ERROR",cause:{type:"UNCAUGHT_EXCEPTION",thrown:d}};throw w({type:"step_error",workflowId:l,stepId:t,stepKey:s,name:r,ts:Date.now(),durationMs:q,error:U}),s&&w({type:"step_complete",workflowId:l,stepKey:s,name:r,ts:Date.now(),durationMs:q,result:A(U,{cause:d}),meta:{origin:"throw",thrown:d}}),d}}}let O=J,V=performance.now()-i,ee=B(O.error,{origin:"result",resultCause:O.cause});throw w({type:"step_error",workflowId:l,stepId:t,stepKey:s,name:r,ts:Date.now(),durationMs:V,error:ee}),s&&w({type:"step_complete",workflowId:l,stepKey:s,name:r,ts:Date.now(),durationMs:V,result:O,meta:{origin:"result",resultCause:O.cause}}),y?.(O.error,r,C),b(O.error,{origin:"result",resultCause:O.cause})})();c.try=(m,E)=>{let n=E.name,r=E.key,s=v(r),u="error"in E?()=>E.error:E.onError,p=g;return(async()=>{let t=p?performance.now():0;g&&w({type:"step_start",workflowId:l,stepId:s,stepKey:r,name:n,ts:Date.now()});try{let a=await m(),i=performance.now()-t;return w({type:"step_success",workflowId:l,stepId:s,stepKey:r,name:n,ts:Date.now(),durationMs:i}),r&&w({type:"step_complete",workflowId:l,stepKey:r,name:n,ts:Date.now(),durationMs:i,result:M(a)}),a}catch(a){let i=u(a),x=performance.now()-t,h=B(i,{origin:"throw",thrown:a});throw w({type:"step_error",workflowId:l,stepId:s,stepKey:r,name:n,ts:Date.now(),durationMs:x,error:h}),r&&w({type:"step_complete",workflowId:l,stepKey:r,name:n,ts:Date.now(),durationMs:x,result:A(i,{cause:a}),meta:{origin:"throw",thrown:a}}),y?.(i,n,C),b(i,{origin:"throw",thrown:a})}})()},c.fromResult=(m,E)=>{let n=E.name,r=E.key,s=v(r),u="error"in E?()=>E.error:E.onError,p=g;return(async()=>{let t=p?performance.now():0;g&&w({type:"step_start",workflowId:l,stepId:s,stepKey:r,name:n,ts:Date.now()});let a=await m();if(a.ok){let i=performance.now()-t;return w({type:"step_success",workflowId:l,stepId:s,stepKey:r,name:n,ts:Date.now(),durationMs:i}),r&&w({type:"step_complete",workflowId:l,stepKey:r,name:n,ts:Date.now(),durationMs:i,result:M(a.value)}),a.value}else{let i=u(a.error),x=performance.now()-t,h=B(i,{origin:"result",resultCause:a.error});throw w({type:"step_error",workflowId:l,stepId:s,stepKey:r,name:n,ts:Date.now(),durationMs:x,error:h}),r&&w({type:"step_complete",workflowId:l,stepKey:r,name:n,ts:Date.now(),durationMs:x,result:A(i,{cause:a.error}),meta:{origin:"result",resultCause:a.error}}),y?.(i,n,C),b(i,{origin:"result",resultCause:a.error})}})()},c.retry=(m,E)=>c(m,{name:E.name,key:E.key,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}),c.withTimeout=(m,E)=>c(m,{name:E.name,key:E.key,timeout:E}),c.parallel=((...m)=>{if(typeof m[0]=="string"){let E=m[0],n=m[1];return P(E,n)}else{let E=m[0],n=m[1]??{};return _(E,n)}}),c.race=(m,E)=>{let n=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let r=performance.now(),s=!1,u={scopeId:n,type:"race",winnerId:void 0};k.push(u);let p=()=>{if(s)return;s=!0;let t=k.findIndex(a=>a.scopeId===n);t!==-1&&k.splice(t,1),w({type:"scope_end",workflowId:l,scopeId:n,ts:Date.now(),durationMs:performance.now()-r,winnerId:u.winnerId})};w({type:"scope_start",workflowId:l,scopeId:n,scopeType:"race",name:m,ts:Date.now()});try{let t=await E();if(p(),!t.ok)throw y?.(t.error,m,C),b(t.error,{origin:"result",resultCause:t.cause});return t.value}catch(t){throw p(),t}})()},c.allSettled=(m,E)=>{let n=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let r=performance.now(),s=!1;k.push({scopeId:n,type:"allSettled"});let u=()=>{if(s)return;s=!0;let p=k.findIndex(t=>t.scopeId===n);p!==-1&&k.splice(p,1),w({type:"scope_end",workflowId:l,scopeId:n,ts:Date.now(),durationMs:performance.now()-r})};w({type:"scope_start",workflowId:l,scopeId:n,scopeType:"allSettled",name:m,ts:Date.now()});try{let p=await E();if(u(),!p.ok)throw y?.(p.error,m,C),b(p.error,{origin:"result",resultCause:p.cause});return p.value}catch(p){throw u(),p}})()};let W=await e(c);return M(W)}catch(c){if(me(c))throw c.thrown;if(G(c)){let _=c.meta.origin==="throw"?c.meta.thrown:c.meta.resultCause;if(D||y)return A(c.error,{cause:_});if(Ee(c.error))return A(c.error,{cause:_});let K=Z(c);return A(K,{cause:_})}if(D){let _=D(c);return y?.(_,"unexpected",C),A(_,{cause:c})}let P={type:"UNEXPECTED_ERROR",cause:{type:"UNCAUGHT_EXCEPTION",thrown:c}};return y?.(P,"unexpected",C),A(P,{cause:c})}}H.strict=(e,o)=>H(e,o);function Ce(){let e=new Map;return{handleEvent:o=>{ce(o)&&e.set(o.stepKey,{result:o.result,meta:o.meta})},getState:()=>({steps:new Map(e)}),clear:()=>e.clear()}}function fe(e){return typeof e=="object"&&e!==null&&e.__cachedMeta===!0}function z(e,o,y){return A(e,{cause:{__cachedMeta:!0,originalCause:y,meta:o}})}function se(e){return fe(e)?e.meta:{origin:"result",resultCause:e}}function xe(e,o){async function y(g,D){let I=typeof D=="function",C=I?g:void 0,l=I?D:g,f=crypto.randomUUID(),k=o?.createContext?.(),j={workflowId:f,onEvent:o?.onEvent,context:k!==void 0?k:void 0},v=n=>{let r=n.context!==void 0||k===void 0?n:{...n,context:k};o?.onEvent?.(r,k)},w=o?.shouldRun,b=o?.catchUnexpected;if(w){let n=performance.now();try{let r=await w(f,k),s=performance.now()-n;if(v({type:"hook_should_run",workflowId:f,ts:Date.now(),durationMs:s,result:r,skipped:!r}),!r){let u=new Error("Workflow skipped by shouldRun hook");if(b){let t=b(u);return A(t)}return A({type:"UNEXPECTED_ERROR",cause:{type:"UNCAUGHT_EXCEPTION",thrown:u}})}}catch(r){let s=performance.now()-n;if(v({type:"hook_should_run_error",workflowId:f,ts:Date.now(),durationMs:s,error:r}),b){let p=b(r);return A(p)}return A({type:"UNEXPECTED_ERROR",cause:{type:"UNCAUGHT_EXCEPTION",thrown:r}})}}let G=o?.onBeforeStart;if(G){let n=performance.now();try{let r=await G(f,k),s=performance.now()-n;if(v({type:"hook_before_start",workflowId:f,ts:Date.now(),durationMs:s,result:r,skipped:!r}),!r){let u=new Error("Workflow skipped by onBeforeStart hook");if(b){let t=b(u);return A(t)}return A({type:"UNEXPECTED_ERROR",cause:{type:"UNCAUGHT_EXCEPTION",thrown:u}})}}catch(r){let s=performance.now()-n;if(v({type:"hook_before_start_error",workflowId:f,ts:Date.now(),durationMs:s,error:r}),b){let p=b(r);return A(p)}return A({type:"UNEXPECTED_ERROR",cause:{type:"UNCAUGHT_EXCEPTION",thrown:r}})}}let B=Date.now(),Z=performance.now();v({type:"workflow_start",workflowId:f,ts:B});let F=o?.resumeState,T=o?.cache;if(F&&!T&&(T=new Map),F&&T){let n=typeof F=="function"?await F():F;for(let[r,s]of n.steps){let{result:u,meta:p}=s;if(u.ok)T.set(r,u);else{let t=p??{origin:"result",resultCause:u.cause};T.set(r,z(u.error,t,u.cause))}}}let c=n=>typeof n=="string"?{name:n}:n??{},P=o?.onAfterStep,_=async(n,r)=>{if(!P)return;let s=performance.now();try{await P(n,r,f,k);let u=performance.now()-s;v({type:"hook_after_step",workflowId:f,stepKey:n,ts:Date.now(),durationMs:u})}catch(u){let p=performance.now()-s;throw v({type:"hook_after_step_error",workflowId:f,stepKey:n,ts:Date.now(),durationMs:p,error:u}),u}},K=n=>{if(!T&&!P)return n;let r=async(s,u)=>{let{name:p,key:t}=c(u);if(t&&T&&T.has(t)){v({type:"step_cache_hit",workflowId:f,stepKey:t,name:p,ts:Date.now()});let i=T.get(t);if(i.ok)return i.value;let x=se(i.cause);throw Y(i.error,x)}t&&T&&v({type:"step_cache_miss",workflowId:f,stepKey:t,name:p,ts:Date.now()});let a=typeof s=="function"?s:()=>s;try{let i=await n(a,u);return t&&(T&&T.set(t,M(i)),await _(t,M(i))),i}catch(i){if(t&&$(i)){let x=i,h=x.meta.origin==="result"?x.meta.resultCause:x.meta.thrown,S=z(x.error,x.meta,h);T&&T.set(t,S),await _(t,S)}throw i}};return r.try=async(s,u)=>{let{name:p,key:t}=u;if(t&&T&&T.has(t)){v({type:"step_cache_hit",workflowId:f,stepKey:t,name:p,ts:Date.now()});let a=T.get(t);if(a.ok)return a.value;let i=se(a.cause);throw Y(a.error,i)}t&&T&&v({type:"step_cache_miss",workflowId:f,stepKey:t,name:p,ts:Date.now()});try{let a=await n.try(s,u);return t&&(T&&T.set(t,M(a)),await _(t,M(a))),a}catch(a){if(t&&$(a)){let i=a,x=i.meta.origin==="result"?i.meta.resultCause:i.meta.thrown,h=z(i.error,i.meta,x);T&&T.set(t,h),await _(t,h)}throw a}},r.fromResult=async(s,u)=>{let{name:p,key:t}=u;if(t&&T&&T.has(t)){v({type:"step_cache_hit",workflowId:f,stepKey:t,name:p,ts:Date.now()});let a=T.get(t);if(a.ok)return a.value;let i=se(a.cause);throw Y(a.error,i)}t&&T&&v({type:"step_cache_miss",workflowId:f,stepKey:t,name:p,ts:Date.now()});try{let a=await n.fromResult(s,u);return t&&(T&&T.set(t,M(a)),await _(t,M(a))),a}catch(a){if(t&&$(a)){let i=a,x=i.meta.origin==="result"?i.meta.resultCause:i.meta.thrown,h=z(i.error,i.meta,x);T&&T.set(t,h),await _(t,h)}throw a}},r.parallel=n.parallel,r.race=n.race,r.allSettled=n.allSettled,r.retry=(s,u)=>r(s,{name:u.name,key:u.key,retry:{attempts:u.attempts,backoff:u.backoff,initialDelay:u.initialDelay,maxDelay:u.maxDelay,jitter:u.jitter,retryOn:u.retryOn,onRetry:u.onRetry},timeout:u.timeout}),r.withTimeout=(s,u)=>r(s,{name:u.name,key:u.key,timeout:u}),r},W=I?n=>l(K(n),e,C,j):n=>l(K(n),e,j),m;if(o?.strict===!0){let n=o;m=await H.strict(W,{onError:n.onError,onEvent:n.onEvent,catchUnexpected:n.catchUnexpected,workflowId:f,context:k})}else{let n=o;m=await H(W,{onError:n?.onError??(()=>{}),onEvent:n?.onEvent,workflowId:f,context:k})}let E=performance.now()-Z;return m.ok?v({type:"workflow_success",workflowId:f,ts:Date.now(),durationMs:E}):v({type:"workflow_error",workflowId:f,ts:Date.now(),durationMs:E,error:m.error}),m}return y}function ce(e){return e.type==="step_complete"}function Q(e){return typeof e=="object"&&e!==null&&e.type==="PENDING_APPROVAL"}function Se(e){return typeof e=="object"&&e!==null&&e.type==="APPROVAL_REJECTED"}function ge(e,o){return A({type:"PENDING_APPROVAL",stepKey:e,reason:o?.reason,metadata:o?.metadata})}function Ae(e){return async()=>{let o=await e.checkApproval();switch(o.status){case"pending":return A({type:"PENDING_APPROVAL",stepKey:e.key,reason:e.pendingReason,metadata:e.metadata});case"rejected":return A({type:"APPROVAL_REJECTED",stepKey:e.key,reason:o.reason});case"approved":return M(o.value)}}}function he(e,o){let y=new Map(e.steps);return y.set(o.stepKey,{result:M(o.value)}),{steps:y}}function ve(e,o){let y=new Map(e.steps);return y.delete(o),{steps:y}}function Pe(e,o){let y=e.steps.get(o);return!y||y.result.ok?!1:Q(y.result.error)}function _e(e){let o=[];for(let[y,g]of e.steps)!g.result.ok&&Q(g.result.error)&&o.push(y);return o}function be(){let e=new Map;return{handleEvent:o=>{ce(o)&&e.set(o.stepKey,{result:o.result,meta:o.meta})},getState:()=>({steps:new Map(e)}),clear:()=>e.clear(),hasPendingApprovals:()=>{for(let o of e.values())if(!o.result.ok&&Q(o.result.error))return!0;return!1},getPendingApprovals:()=>{let o=[];for(let[y,g]of e)!g.result.ok&&Q(g.result.error)&&o.push({stepKey:y,error:g.result.error});return o},injectApproval:(o,y)=>(e.set(o,{result:M(y)}),{steps:new Map(e)})}}export{ve as clearStep,Ae as createApprovalStep,be as createHITLCollector,Ce as createStepCollector,xe as createWorkflow,_e as getPendingApprovals,Pe as hasPendingApproval,he as injectApproval,Se as isApprovalRejected,Q as isPendingApproval,ce as isStepComplete,ge as pendingApproval};
2
2
  //# sourceMappingURL=workflow.js.map