@jagreehal/workflow 1.1.0 → 1.3.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 +86 -0
- package/dist/core.cjs +1 -1
- package/dist/core.cjs.map +1 -1
- package/dist/core.d.cts +113 -8
- package/dist/core.d.ts +113 -8
- package/dist/core.js +1 -1
- package/dist/core.js.map +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/visualize.cjs +7 -0
- package/dist/visualize.cjs.map +1 -0
- package/dist/visualize.d.cts +805 -0
- package/dist/visualize.d.ts +805 -0
- package/dist/visualize.js +7 -0
- package/dist/visualize.js.map +1 -0
- package/dist/workflow.cjs +1 -1
- package/dist/workflow.cjs.map +1 -1
- package/dist/workflow.d.cts +3 -1
- package/dist/workflow.d.ts +3 -1
- package/dist/workflow.js +1 -1
- package/dist/workflow.js.map +1 -1
- package/package.json +7 -1
package/dist/workflow.d.cts
CHANGED
|
@@ -165,7 +165,9 @@ type AnyResultFn = (...args: any[]) => Result<any, any, any> | Promise<Result<an
|
|
|
165
165
|
* Example: ErrorsOfDeps<{ fetchUser: typeof fetchUser, fetchPosts: typeof fetchPosts }>
|
|
166
166
|
* yields: 'NOT_FOUND' | 'FETCH_ERROR'
|
|
167
167
|
*/
|
|
168
|
-
type ErrorsOfDeps<Deps extends Record<string, AnyResultFn>> =
|
|
168
|
+
type ErrorsOfDeps<Deps extends Record<string, AnyResultFn>> = {
|
|
169
|
+
[K in keyof Deps]: ErrorOf<Deps[K]>;
|
|
170
|
+
}[keyof Deps];
|
|
169
171
|
/**
|
|
170
172
|
* Extract union of cause types from a deps object.
|
|
171
173
|
* Example: CausesOfDeps<{ fetchUser: typeof fetchUser }> where fetchUser returns Result<User, "NOT_FOUND", Error>
|
package/dist/workflow.d.ts
CHANGED
|
@@ -165,7 +165,9 @@ type AnyResultFn = (...args: any[]) => Result<any, any, any> | Promise<Result<an
|
|
|
165
165
|
* Example: ErrorsOfDeps<{ fetchUser: typeof fetchUser, fetchPosts: typeof fetchPosts }>
|
|
166
166
|
* yields: 'NOT_FOUND' | 'FETCH_ERROR'
|
|
167
167
|
*/
|
|
168
|
-
type ErrorsOfDeps<Deps extends Record<string, AnyResultFn>> =
|
|
168
|
+
type ErrorsOfDeps<Deps extends Record<string, AnyResultFn>> = {
|
|
169
|
+
[K in keyof Deps]: ErrorOf<Deps[K]>;
|
|
170
|
+
}[keyof Deps];
|
|
169
171
|
/**
|
|
170
172
|
* Extract union of cause types from a deps object.
|
|
171
173
|
* Example: CausesOfDeps<{ fetchUser: typeof fetchUser }> where fetchUser returns Result<User, "NOT_FOUND", Error>
|
package/dist/workflow.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var S=e=>({ok:!0,value:e}),f=(e,n)=>({ok:!1,error:e,...n?.cause!==void 0?{cause:n.cause}:{}});var L=e=>typeof e=="object"&&e!==null&&e.type==="UNEXPECTED_ERROR",F=Symbol("early-exit");function O(e,n){return{[F]:!0,error:e,meta:n}}function M(e){return typeof e=="object"&&e!==null&&e[F]===!0}var N=Symbol("mapper-exception");function X(e){return{[N]:!0,thrown:e}}function J(e){return typeof e=="object"&&e!==null&&e[N]===!0}function G(e){return typeof e=="string"?{name:e}:e??{}}async function _(e,n){let{onError:p,onEvent:y,catchUnexpected:v,workflowId:h,context:I}=n&&typeof n=="object"?n:{},l=h??crypto.randomUUID(),x=!p&&!v,c=s=>{y?.(s,I)},R=O,D=s=>M(s),U=(s,m)=>x?m?.origin==="result"?{type:"UNEXPECTED_ERROR",cause:{type:"STEP_FAILURE",origin:"result",error:s,...m.resultCause!==void 0?{cause:m.resultCause}:{}}}:m?.origin==="throw"?{type:"UNEXPECTED_ERROR",cause:{type:"STEP_FAILURE",origin:"throw",error:s,thrown:m.thrown}}:{type:"UNEXPECTED_ERROR",cause:{type:"STEP_FAILURE",origin:"result",error:s}}:s,P=s=>s.origin==="result"?s.resultCause:s.thrown,k=s=>({type:"UNEXPECTED_ERROR",cause:s.meta.origin==="result"?{type:"STEP_FAILURE",origin:"result",error:s.error,...s.meta.resultCause!==void 0?{cause:s.meta.resultCause}:{}}:{type:"STEP_FAILURE",origin:"throw",error:s.error,thrown:s.meta.thrown}});try{let s=(d,T)=>(async()=>{let{name:t,key:o}=G(T),w=y?performance.now():0;y&&c({type:"step_start",workflowId:l,stepKey:o,name:t,ts:Date.now()});let i;try{i=await(typeof d=="function"?d():d)}catch(u){let E=performance.now()-w;if(D(u))throw c({type:"step_aborted",workflowId:l,stepKey:o,name:t,ts:Date.now(),durationMs:E}),u;if(v){let A;try{A=v(u)}catch(V){throw X(V)}throw c({type:"step_error",workflowId:l,stepKey:o,name:t,ts:Date.now(),durationMs:E,error:A}),o&&c({type:"step_complete",workflowId:l,stepKey:o,name:t,ts:Date.now(),durationMs:E,result:f(A,{cause:u}),meta:{origin:"throw",thrown:u}}),p?.(A,t),R(A,{origin:"throw",thrown:u})}else{let A={type:"UNEXPECTED_ERROR",cause:{type:"UNCAUGHT_EXCEPTION",thrown:u}};throw c({type:"step_error",workflowId:l,stepKey:o,name:t,ts:Date.now(),durationMs:E,error:A}),o&&c({type:"step_complete",workflowId:l,stepKey:o,name:t,ts:Date.now(),durationMs:E,result:f(A,{cause:u}),meta:{origin:"throw",thrown:u}}),u}}let r=performance.now()-w;if(i.ok)return c({type:"step_success",workflowId:l,stepKey:o,name:t,ts:Date.now(),durationMs:r}),o&&c({type:"step_complete",workflowId:l,stepKey:o,name:t,ts:Date.now(),durationMs:r,result:i}),i.value;let a=U(i.error,{origin:"result",resultCause:i.cause});throw c({type:"step_error",workflowId:l,stepKey:o,name:t,ts:Date.now(),durationMs:r,error:a}),o&&c({type:"step_complete",workflowId:l,stepKey:o,name:t,ts:Date.now(),durationMs:r,result:i,meta:{origin:"result",resultCause:i.cause}}),p?.(i.error,t),R(i.error,{origin:"result",resultCause:i.cause})})();s.try=(d,T)=>{let t=T.name,o=T.key,C="error"in T?()=>T.error:T.onError,w=y;return(async()=>{let i=w?performance.now():0;y&&c({type:"step_start",workflowId:l,stepKey:o,name:t,ts:Date.now()});try{let r=await d(),a=performance.now()-i;return c({type:"step_success",workflowId:l,stepKey:o,name:t,ts:Date.now(),durationMs:a}),o&&c({type:"step_complete",workflowId:l,stepKey:o,name:t,ts:Date.now(),durationMs:a,result:S(r)}),r}catch(r){let a=C(r),u=performance.now()-i,E=U(a,{origin:"throw",thrown:r});throw c({type:"step_error",workflowId:l,stepKey:o,name:t,ts:Date.now(),durationMs:u,error:E}),o&&c({type:"step_complete",workflowId:l,stepKey:o,name:t,ts:Date.now(),durationMs:u,result:f(a,{cause:r}),meta:{origin:"throw",thrown:r}}),p?.(a,t),R(a,{origin:"throw",thrown:r})}})()},s.fromResult=(d,T)=>{let t=T.name,o=T.key,C="error"in T?()=>T.error:T.onError,w=y;return(async()=>{let i=w?performance.now():0;y&&c({type:"step_start",workflowId:l,stepKey:o,name:t,ts:Date.now()});let r=await d();if(r.ok){let a=performance.now()-i;return c({type:"step_success",workflowId:l,stepKey:o,name:t,ts:Date.now(),durationMs:a}),o&&c({type:"step_complete",workflowId:l,stepKey:o,name:t,ts:Date.now(),durationMs:a,result:S(r.value)}),r.value}else{let a=C(r.error),u=performance.now()-i,E=U(a,{origin:"result",resultCause:r.error});throw c({type:"step_error",workflowId:l,stepKey:o,name:t,ts:Date.now(),durationMs:u,error:E}),o&&c({type:"step_complete",workflowId:l,stepKey:o,name:t,ts:Date.now(),durationMs:u,result:f(a,{cause:r.error}),meta:{origin:"result",resultCause:r.error}}),p?.(a,t),R(a,{origin:"result",resultCause:r.error})}})()};let g=await e(s);return S(g)}catch(s){if(J(s))throw s.thrown;if(D(s)){let g=P(s.meta);if(v||p)return f(s.error,{cause:g});if(L(s.error))return f(s.error,{cause:g});let d=k(s);return f(d,{cause:g})}if(v){let g=v(s);return p?.(g,"unexpected"),f(g,{cause:s})}let m={type:"UNEXPECTED_ERROR",cause:{type:"UNCAUGHT_EXCEPTION",thrown:s}};return p?.(m,"unexpected"),f(m,{cause:s})}}_.strict=(e,n)=>_(e,n);function H(){let e=new Map;return{handleEvent:n=>{W(n)&&e.set(n.stepKey,{result:n.result,meta:n.meta})},getState:()=>({steps:new Map(e)}),clear:()=>e.clear()}}function Y(e){return typeof e=="object"&&e!==null&&e.__cachedMeta===!0}function b(e,n,p){return f(e,{cause:{__cachedMeta:!0,originalCause:p,meta:n}})}function j(e){return Y(e)?e.meta:{origin:"result",resultCause:e}}function $(e,n){async function p(y,v){let h=typeof v=="function",I=h?y:void 0,l=h?v:y,x=crypto.randomUUID(),c=n?.createContext?.(),R=t=>{n?.onEvent?.(t,c)},D=Date.now(),U=performance.now();R({type:"workflow_start",workflowId:x,ts:D});let P=n?.resumeState,k=n?.cache;if(P&&!k&&(k=new Map),P&&k){let t=typeof P=="function"?await P():P;for(let[o,C]of t.steps){let{result:w,meta:i}=C;if(w.ok)k.set(o,w);else{let r=i??{origin:"result",resultCause:w.cause};k.set(o,b(w.error,r,w.cause))}}}let s=t=>typeof t=="string"?{name:t}:t??{},m=t=>{if(!k)return t;let o=async(C,w)=>{let{name:i,key:r}=s(w);if(r&&k.has(r)){R({type:"step_cache_hit",workflowId:x,stepKey:r,name:i,ts:Date.now()});let u=k.get(r);if(u.ok)return u.value;let E=j(u.cause);throw O(u.error,E)}r&&R({type:"step_cache_miss",workflowId:x,stepKey:r,name:i,ts:Date.now()});let a=typeof C=="function"?C:()=>C;try{let u=await t(a,w);return r&&k.set(r,S(u)),u}catch(u){if(r&&M(u)){let E=u,A=E.meta.origin==="result"?E.meta.resultCause:E.meta.thrown;k.set(r,b(E.error,E.meta,A))}throw u}};return o.try=async(C,w)=>{let{name:i,key:r}=w;if(r&&k.has(r)){R({type:"step_cache_hit",workflowId:x,stepKey:r,name:i,ts:Date.now()});let a=k.get(r);if(a.ok)return a.value;let u=j(a.cause);throw O(a.error,u)}r&&R({type:"step_cache_miss",workflowId:x,stepKey:r,name:i,ts:Date.now()});try{let a=await t.try(C,w);return r&&k.set(r,S(a)),a}catch(a){if(r&&M(a)){let u=a,E=u.meta.origin==="result"?u.meta.resultCause:u.meta.thrown;k.set(r,b(u.error,u.meta,E))}throw a}},o},g=h?t=>l(m(t),e,I):t=>l(m(t),e),d;if(n?.strict===!0){let t=n;d=await _.strict(g,{onError:t.onError,onEvent:t.onEvent,catchUnexpected:t.catchUnexpected,workflowId:x,context:c})}else{let t=n;d=await _(g,{onError:t?.onError??(()=>{}),onEvent:t?.onEvent,workflowId:x,context:c})}let T=performance.now()-U;return d.ok?R({type:"workflow_success",workflowId:x,ts:Date.now(),durationMs:T}):R({type:"workflow_error",workflowId:x,ts:Date.now(),durationMs:T,error:d.error}),d}return p}function W(e){return e.type==="step_complete"}function K(e){return typeof e=="object"&&e!==null&&e.type==="PENDING_APPROVAL"}function z(e){return typeof e=="object"&&e!==null&&e.type==="APPROVAL_REJECTED"}function Q(e,n){return f({type:"PENDING_APPROVAL",stepKey:e,reason:n?.reason,metadata:n?.metadata})}function Z(e){return async()=>{let n=await e.checkApproval();switch(n.status){case"pending":return f({type:"PENDING_APPROVAL",stepKey:e.key,reason:e.pendingReason,metadata:e.metadata});case"rejected":return f({type:"APPROVAL_REJECTED",stepKey:e.key,reason:n.reason});case"approved":return S(n.value)}}}function ee(e,n){let p=new Map(e.steps);return p.set(n.stepKey,{result:S(n.value)}),{steps:p}}function ne(e,n){let p=new Map(e.steps);return p.delete(n),{steps:p}}function te(e,n){let p=e.steps.get(n);return!p||p.result.ok?!1:K(p.result.error)}function re(e){let n=[];for(let[p,y]of e.steps)!y.result.ok&&K(y.result.error)&&n.push(p);return n}function se(){let e=new Map;return{handleEvent:n=>{W(n)&&e.set(n.stepKey,{result:n.result,meta:n.meta})},getState:()=>({steps:new Map(e)}),clear:()=>e.clear(),hasPendingApprovals:()=>{for(let n of e.values())if(!n.result.ok&&K(n.result.error))return!0;return!1},getPendingApprovals:()=>{let n=[];for(let[p,y]of e)!y.result.ok&&K(y.result.error)&&n.push({stepKey:p,error:y.result.error});return n},injectApproval:(n,p)=>(e.set(n,{result:S(p)}),{steps:new Map(e)})}}export{ne as clearStep,Z as createApprovalStep,se as createHITLCollector,H as createStepCollector,$ as createWorkflow,re as getPendingApprovals,te as hasPendingApproval,ee as injectApproval,z as isApprovalRejected,K as isPendingApproval,W as isStepComplete,Q as pendingApproval};
|
|
1
|
+
var v=e=>({ok:!0,value:e}),x=(e,s)=>({ok:!1,error:e,...s?.cause!==void 0?{cause:s.cause}:{}});var Y=e=>typeof e=="object"&&e!==null&&e.type==="UNEXPECTED_ERROR",L=Symbol("early-exit");function M(e,s){return{[L]:!0,error:e,meta:s}}function K(e){return typeof e=="object"&&e!==null&&e[L]===!0}var X=Symbol("mapper-exception");function $(e){return{[X]:!0,thrown:e}}function q(e){return typeof e=="object"&&e!==null&&e[X]===!0}function B(e){return typeof e=="string"?{name:e}:e??{}}async function O(e,s){let{onError:l,onEvent:T,catchUnexpected:h,workflowId:U,context:W}=s&&typeof s=="object"?s:{},E=U??crypto.randomUUID(),g=!l&&!h,m=[],A=0,D=u=>u??`step_${++A}`,y=u=>{if(u.type==="step_success"){let C=u.stepId;for(let p=m.length-1;p>=0;p--){let c=m[p];if(c.type==="race"&&!c.winnerId){c.winnerId=C;break}}}T?.(u,W)},S=M,k=u=>K(u),I=(u,C)=>g?C?.origin==="result"?{type:"UNEXPECTED_ERROR",cause:{type:"STEP_FAILURE",origin:"result",error:u,...C.resultCause!==void 0?{cause:C.resultCause}:{}}}:C?.origin==="throw"?{type:"UNEXPECTED_ERROR",cause:{type:"STEP_FAILURE",origin:"throw",error:u,thrown:C.thrown}}:{type:"UNEXPECTED_ERROR",cause:{type:"STEP_FAILURE",origin:"result",error:u}}:u,b=u=>u.origin==="result"?u.resultCause:u.thrown,F=u=>({type:"UNEXPECTED_ERROR",cause:u.meta.origin==="result"?{type:"STEP_FAILURE",origin:"result",error:u.error,...u.meta.resultCause!==void 0?{cause:u.meta.resultCause}:{}}:{type:"STEP_FAILURE",origin:"throw",error:u.error,thrown:u.meta.thrown}});try{let u=(c,w)=>(async()=>{let{name:r,key:o}=B(w),t=D(o),n=T?performance.now():0;T&&y({type:"step_start",workflowId:E,stepId:t,stepKey:o,name:r,ts:Date.now()});let a;try{a=await(typeof c=="function"?c():c)}catch(R){let P=performance.now()-n;if(k(R))throw y({type:"step_aborted",workflowId:E,stepId:t,stepKey:o,name:r,ts:Date.now(),durationMs:P}),R;if(h){let _;try{_=h(R)}catch(G){throw $(G)}throw y({type:"step_error",workflowId:E,stepId:t,stepKey:o,name:r,ts:Date.now(),durationMs:P,error:_}),o&&y({type:"step_complete",workflowId:E,stepKey:o,name:r,ts:Date.now(),durationMs:P,result:x(_,{cause:R}),meta:{origin:"throw",thrown:R}}),l?.(_,r),S(_,{origin:"throw",thrown:R})}else{let _={type:"UNEXPECTED_ERROR",cause:{type:"UNCAUGHT_EXCEPTION",thrown:R}};throw y({type:"step_error",workflowId:E,stepId:t,stepKey:o,name:r,ts:Date.now(),durationMs:P,error:_}),o&&y({type:"step_complete",workflowId:E,stepKey:o,name:r,ts:Date.now(),durationMs:P,result:x(_,{cause:R}),meta:{origin:"throw",thrown:R}}),R}}let d=performance.now()-n;if(a.ok)return y({type:"step_success",workflowId:E,stepId:t,stepKey:o,name:r,ts:Date.now(),durationMs:d}),o&&y({type:"step_complete",workflowId:E,stepKey:o,name:r,ts:Date.now(),durationMs:d,result:a}),a.value;let f=I(a.error,{origin:"result",resultCause:a.cause});throw y({type:"step_error",workflowId:E,stepId:t,stepKey:o,name:r,ts:Date.now(),durationMs:d,error:f}),o&&y({type:"step_complete",workflowId:E,stepKey:o,name:r,ts:Date.now(),durationMs:d,result:a,meta:{origin:"result",resultCause:a.cause}}),l?.(a.error,r),S(a.error,{origin:"result",resultCause:a.cause})})();u.try=(c,w)=>{let r=w.name,o=w.key,t=D(o),i="error"in w?()=>w.error:w.onError,n=T;return(async()=>{let a=n?performance.now():0;T&&y({type:"step_start",workflowId:E,stepId:t,stepKey:o,name:r,ts:Date.now()});try{let d=await c(),f=performance.now()-a;return y({type:"step_success",workflowId:E,stepId:t,stepKey:o,name:r,ts:Date.now(),durationMs:f}),o&&y({type:"step_complete",workflowId:E,stepKey:o,name:r,ts:Date.now(),durationMs:f,result:v(d)}),d}catch(d){let f=i(d),R=performance.now()-a,P=I(f,{origin:"throw",thrown:d});throw y({type:"step_error",workflowId:E,stepId:t,stepKey:o,name:r,ts:Date.now(),durationMs:R,error:P}),o&&y({type:"step_complete",workflowId:E,stepKey:o,name:r,ts:Date.now(),durationMs:R,result:x(f,{cause:d}),meta:{origin:"throw",thrown:d}}),l?.(f,r),S(f,{origin:"throw",thrown:d})}})()},u.fromResult=(c,w)=>{let r=w.name,o=w.key,t=D(o),i="error"in w?()=>w.error:w.onError,n=T;return(async()=>{let a=n?performance.now():0;T&&y({type:"step_start",workflowId:E,stepId:t,stepKey:o,name:r,ts:Date.now()});let d=await c();if(d.ok){let f=performance.now()-a;return y({type:"step_success",workflowId:E,stepId:t,stepKey:o,name:r,ts:Date.now(),durationMs:f}),o&&y({type:"step_complete",workflowId:E,stepKey:o,name:r,ts:Date.now(),durationMs:f,result:v(d.value)}),d.value}else{let f=i(d.error),R=performance.now()-a,P=I(f,{origin:"result",resultCause:d.error});throw y({type:"step_error",workflowId:E,stepId:t,stepKey:o,name:r,ts:Date.now(),durationMs:R,error:P}),o&&y({type:"step_complete",workflowId:E,stepKey:o,name:r,ts:Date.now(),durationMs:R,result:x(f,{cause:d.error}),meta:{origin:"result",resultCause:d.error}}),l?.(f,r),S(f,{origin:"result",resultCause:d.error})}})()},u.parallel=(c,w)=>{let r=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let o=performance.now(),t=!1;m.push({scopeId:r,type:"parallel"});let i=()=>{if(t)return;t=!0;let n=m.findIndex(a=>a.scopeId===r);n!==-1&&m.splice(n,1),y({type:"scope_end",workflowId:E,scopeId:r,ts:Date.now(),durationMs:performance.now()-o})};y({type:"scope_start",workflowId:E,scopeId:r,scopeType:"parallel",name:c,ts:Date.now()});try{let n=await w();if(i(),!n.ok)throw l?.(n.error,c),S(n.error,{origin:"result",resultCause:n.cause});return n.value}catch(n){throw i(),n}})()},u.race=(c,w)=>{let r=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let o=performance.now(),t=!1,i={scopeId:r,type:"race",winnerId:void 0};m.push(i);let n=()=>{if(t)return;t=!0;let a=m.findIndex(d=>d.scopeId===r);a!==-1&&m.splice(a,1),y({type:"scope_end",workflowId:E,scopeId:r,ts:Date.now(),durationMs:performance.now()-o,winnerId:i.winnerId})};y({type:"scope_start",workflowId:E,scopeId:r,scopeType:"race",name:c,ts:Date.now()});try{let a=await w();if(n(),!a.ok)throw l?.(a.error,c),S(a.error,{origin:"result",resultCause:a.cause});return a.value}catch(a){throw n(),a}})()},u.allSettled=(c,w)=>{let r=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let o=performance.now(),t=!1;m.push({scopeId:r,type:"allSettled"});let i=()=>{if(t)return;t=!0;let n=m.findIndex(a=>a.scopeId===r);n!==-1&&m.splice(n,1),y({type:"scope_end",workflowId:E,scopeId:r,ts:Date.now(),durationMs:performance.now()-o})};y({type:"scope_start",workflowId:E,scopeId:r,scopeType:"allSettled",name:c,ts:Date.now()});try{let n=await w();if(i(),!n.ok)throw l?.(n.error,c),S(n.error,{origin:"result",resultCause:n.cause});return n.value}catch(n){throw i(),n}})()};let p=await e(u);return v(p)}catch(u){if(q(u))throw u.thrown;if(k(u)){let p=b(u.meta);if(h||l)return x(u.error,{cause:p});if(Y(u.error))return x(u.error,{cause:p});let c=F(u);return x(c,{cause:p})}if(h){let p=h(u);return l?.(p,"unexpected"),x(p,{cause:u})}let C={type:"UNEXPECTED_ERROR",cause:{type:"UNCAUGHT_EXCEPTION",thrown:u}};return l?.(C,"unexpected"),x(C,{cause:u})}}O.strict=(e,s)=>O(e,s);function Z(){let e=new Map;return{handleEvent:s=>{J(s)&&e.set(s.stepKey,{result:s.result,meta:s.meta})},getState:()=>({steps:new Map(e)}),clear:()=>e.clear()}}function H(e){return typeof e=="object"&&e!==null&&e.__cachedMeta===!0}function N(e,s,l){return x(e,{cause:{__cachedMeta:!0,originalCause:l,meta:s}})}function V(e){return H(e)?e.meta:{origin:"result",resultCause:e}}function ee(e,s){async function l(T,h){let U=typeof h=="function",W=U?T:void 0,E=U?h:T,g=crypto.randomUUID(),m=s?.createContext?.(),A=p=>{s?.onEvent?.(p,m)},D=Date.now(),y=performance.now();A({type:"workflow_start",workflowId:g,ts:D});let S=s?.resumeState,k=s?.cache;if(S&&!k&&(k=new Map),S&&k){let p=typeof S=="function"?await S():S;for(let[c,w]of p.steps){let{result:r,meta:o}=w;if(r.ok)k.set(c,r);else{let t=o??{origin:"result",resultCause:r.cause};k.set(c,N(r.error,t,r.cause))}}}let I=p=>typeof p=="string"?{name:p}:p??{},b=p=>{if(!k)return p;let c=async(w,r)=>{let{name:o,key:t}=I(r);if(t&&k.has(t)){A({type:"step_cache_hit",workflowId:g,stepKey:t,name:o,ts:Date.now()});let n=k.get(t);if(n.ok)return n.value;let a=V(n.cause);throw M(n.error,a)}t&&A({type:"step_cache_miss",workflowId:g,stepKey:t,name:o,ts:Date.now()});let i=typeof w=="function"?w:()=>w;try{let n=await p(i,r);return t&&k.set(t,v(n)),n}catch(n){if(t&&K(n)){let a=n,d=a.meta.origin==="result"?a.meta.resultCause:a.meta.thrown;k.set(t,N(a.error,a.meta,d))}throw n}};return c.try=async(w,r)=>{let{name:o,key:t}=r;if(t&&k.has(t)){A({type:"step_cache_hit",workflowId:g,stepKey:t,name:o,ts:Date.now()});let i=k.get(t);if(i.ok)return i.value;let n=V(i.cause);throw M(i.error,n)}t&&A({type:"step_cache_miss",workflowId:g,stepKey:t,name:o,ts:Date.now()});try{let i=await p.try(w,r);return t&&k.set(t,v(i)),i}catch(i){if(t&&K(i)){let n=i,a=n.meta.origin==="result"?n.meta.resultCause:n.meta.thrown;k.set(t,N(n.error,n.meta,a))}throw i}},c.fromResult=async(w,r)=>{let{name:o,key:t}=r;if(t&&k.has(t)){A({type:"step_cache_hit",workflowId:g,stepKey:t,name:o,ts:Date.now()});let i=k.get(t);if(i.ok)return i.value;let n=V(i.cause);throw M(i.error,n)}t&&A({type:"step_cache_miss",workflowId:g,stepKey:t,name:o,ts:Date.now()});try{let i=await p.fromResult(w,r);return t&&k.set(t,v(i)),i}catch(i){if(t&&K(i)){let n=i,a=n.meta.origin==="result"?n.meta.resultCause:n.meta.thrown;k.set(t,N(n.error,n.meta,a))}throw i}},c.parallel=p.parallel,c.race=p.race,c.allSettled=p.allSettled,c},F=U?p=>E(b(p),e,W):p=>E(b(p),e),u;if(s?.strict===!0){let p=s;u=await O.strict(F,{onError:p.onError,onEvent:p.onEvent,catchUnexpected:p.catchUnexpected,workflowId:g,context:m})}else{let p=s;u=await O(F,{onError:p?.onError??(()=>{}),onEvent:p?.onEvent,workflowId:g,context:m})}let C=performance.now()-y;return u.ok?A({type:"workflow_success",workflowId:g,ts:Date.now(),durationMs:C}):A({type:"workflow_error",workflowId:g,ts:Date.now(),durationMs:C,error:u.error}),u}return l}function J(e){return e.type==="step_complete"}function j(e){return typeof e=="object"&&e!==null&&e.type==="PENDING_APPROVAL"}function ne(e){return typeof e=="object"&&e!==null&&e.type==="APPROVAL_REJECTED"}function te(e,s){return x({type:"PENDING_APPROVAL",stepKey:e,reason:s?.reason,metadata:s?.metadata})}function re(e){return async()=>{let s=await e.checkApproval();switch(s.status){case"pending":return x({type:"PENDING_APPROVAL",stepKey:e.key,reason:e.pendingReason,metadata:e.metadata});case"rejected":return x({type:"APPROVAL_REJECTED",stepKey:e.key,reason:s.reason});case"approved":return v(s.value)}}}function se(e,s){let l=new Map(e.steps);return l.set(s.stepKey,{result:v(s.value)}),{steps:l}}function oe(e,s){let l=new Map(e.steps);return l.delete(s),{steps:l}}function ue(e,s){let l=e.steps.get(s);return!l||l.result.ok?!1:j(l.result.error)}function ae(e){let s=[];for(let[l,T]of e.steps)!T.result.ok&&j(T.result.error)&&s.push(l);return s}function pe(){let e=new Map;return{handleEvent:s=>{J(s)&&e.set(s.stepKey,{result:s.result,meta:s.meta})},getState:()=>({steps:new Map(e)}),clear:()=>e.clear(),hasPendingApprovals:()=>{for(let s of e.values())if(!s.result.ok&&j(s.result.error))return!0;return!1},getPendingApprovals:()=>{let s=[];for(let[l,T]of e)!T.result.ok&&j(T.result.error)&&s.push({stepKey:l,error:T.result.error});return s},injectApproval:(s,l)=>(e.set(s,{result:v(l)}),{steps:new Map(e)})}}export{oe as clearStep,re as createApprovalStep,pe as createHITLCollector,Z as createStepCollector,ee as createWorkflow,ae as getPendingApprovals,ue as hasPendingApproval,se as injectApproval,ne as isApprovalRejected,j as isPendingApproval,J as isStepComplete,te as pendingApproval};
|
|
2
2
|
//# sourceMappingURL=workflow.js.map
|