@jagreehal/workflow 1.0.0 → 1.1.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 S=e=>({ok:!0,value:e}),T=(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 D(e,n){return{[F]:!0,error:e,meta:n}}function M(e){return typeof e=="object"&&e!==null&&e[F]===!0}var j=Symbol("mapper-exception");function X(e){return{[j]:!0,thrown:e}}function J(e){return typeof e=="object"&&e!==null&&e[j]===!0}function G(e){return typeof e=="string"?{name:e}:e??{}}async function U(e,n){let{onError:a,onEvent:k,catchUnexpected:v,workflowId:h,context:I}=n&&typeof n=="object"?n:{},l=h??crypto.randomUUID(),R=!a&&!v,c=r=>{k?.(r,I)},m=D,_=r=>M(r),O=(r,f)=>R?f?.origin==="result"?{type:"UNEXPECTED_ERROR",cause:{type:"STEP_FAILURE",origin:"result",error:r,...f.resultCause!==void 0?{cause:f.resultCause}:{}}}:f?.origin==="throw"?{type:"UNEXPECTED_ERROR",cause:{type:"STEP_FAILURE",origin:"throw",error:r,thrown:f.thrown}}:{type:"UNEXPECTED_ERROR",cause:{type:"STEP_FAILURE",origin:"result",error:r}}:r,P=r=>r.origin==="result"?r.resultCause:r.thrown,w=r=>({type:"UNEXPECTED_ERROR",cause:r.meta.origin==="result"?{type:"STEP_FAILURE",origin:"result",error:r.error,...r.meta.resultCause!==void 0?{cause:r.meta.resultCause}:{}}:{type:"STEP_FAILURE",origin:"throw",error:r.error,thrown:r.meta.thrown}});try{let r=(d,x)=>(async()=>{let{name:t,key:u}=G(x),y=k?performance.now():0;k&&c({type:"step_start",workflowId:l,stepKey:u,name:t,ts:Date.now()});let i;try{i=await(typeof d=="function"?d():d)}catch(s){let E=performance.now()-y;if(_(s))throw c({type:"step_aborted",workflowId:l,stepKey:u,name:t,ts:Date.now(),durationMs:E}),s;if(v){let g;try{g=v(s)}catch(V){throw X(V)}throw c({type:"step_error",workflowId:l,stepKey:u,name:t,ts:Date.now(),durationMs:E,error:g}),u&&c({type:"step_complete",workflowId:l,stepKey:u,name:t,ts:Date.now(),durationMs:E,result:T(g,{cause:s}),meta:{origin:"throw",thrown:s}}),a?.(g,t),m(g,{origin:"throw",thrown:s})}else{let g={type:"UNEXPECTED_ERROR",cause:{type:"UNCAUGHT_EXCEPTION",thrown:s}};throw c({type:"step_error",workflowId:l,stepKey:u,name:t,ts:Date.now(),durationMs:E,error:g}),u&&c({type:"step_complete",workflowId:l,stepKey:u,name:t,ts:Date.now(),durationMs:E,result:T(g,{cause:s}),meta:{origin:"throw",thrown:s}}),s}}let o=performance.now()-y;if(i.ok)return c({type:"step_success",workflowId:l,stepKey:u,name:t,ts:Date.now(),durationMs:o}),u&&c({type:"step_complete",workflowId:l,stepKey:u,name:t,ts:Date.now(),durationMs:o,result:i}),i.value;let p=O(i.error,{origin:"result",resultCause:i.cause});throw c({type:"step_error",workflowId:l,stepKey:u,name:t,ts:Date.now(),durationMs:o,error:p}),u&&c({type:"step_complete",workflowId:l,stepKey:u,name:t,ts:Date.now(),durationMs:o,result:i,meta:{origin:"result",resultCause:i.cause}}),a?.(i.error,t),m(i.error,{origin:"result",resultCause:i.cause})})();r.try=(d,x)=>{let t=x.name,u=x.key,A="error"in x?()=>x.error:x.onError,y=k;return(async()=>{let i=y?performance.now():0;k&&c({type:"step_start",workflowId:l,stepKey:u,name:t,ts:Date.now()});try{let o=await d(),p=performance.now()-i;return c({type:"step_success",workflowId:l,stepKey:u,name:t,ts:Date.now(),durationMs:p}),u&&c({type:"step_complete",workflowId:l,stepKey:u,name:t,ts:Date.now(),durationMs:p,result:S(o)}),o}catch(o){let p=A(o),s=performance.now()-i,E=O(p,{origin:"throw",thrown:o});throw c({type:"step_error",workflowId:l,stepKey:u,name:t,ts:Date.now(),durationMs:s,error:E}),u&&c({type:"step_complete",workflowId:l,stepKey:u,name:t,ts:Date.now(),durationMs:s,result:T(p,{cause:o}),meta:{origin:"throw",thrown:o}}),a?.(p,t),m(p,{origin:"throw",thrown:o})}})()};let C=await e(r);return S(C)}catch(r){if(J(r))throw r.thrown;if(_(r)){let C=P(r.meta);if(v||a)return T(r.error,{cause:C});if(L(r.error))return T(r.error,{cause:C});let d=w(r);return T(d,{cause:C})}if(v){let C=v(r);return a?.(C,"unexpected"),T(C,{cause:r})}let f={type:"UNEXPECTED_ERROR",cause:{type:"UNCAUGHT_EXCEPTION",thrown:r}};return a?.(f,"unexpected"),T(f,{cause:r})}}U.strict=(e,n)=>U(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,a){return T(e,{cause:{__cachedMeta:!0,originalCause:a,meta:n}})}function N(e){return Y(e)?e.meta:{origin:"result",resultCause:e}}function $(e,n){async function a(k,v){let h=typeof v=="function",I=h?k:void 0,l=h?v:k,R=crypto.randomUUID(),c=n?.createContext?.(),m=t=>{n?.onEvent?.(t,c)},_=Date.now(),O=performance.now();m({type:"workflow_start",workflowId:R,ts:_});let P=n?.resumeState,w=n?.cache;if(P&&!w&&(w=new Map),P&&w){let t=typeof P=="function"?await P():P;for(let[u,A]of t.steps){let{result:y,meta:i}=A;if(y.ok)w.set(u,y);else{let o=i??{origin:"result",resultCause:y.cause};w.set(u,b(y.error,o,y.cause))}}}let r=t=>typeof t=="string"?{name:t}:t??{},f=t=>{if(!w)return t;let u=async(A,y)=>{let{name:i,key:o}=r(y);if(o&&w.has(o)){m({type:"step_cache_hit",workflowId:R,stepKey:o,name:i,ts:Date.now()});let s=w.get(o);if(s.ok)return s.value;let E=N(s.cause);throw D(s.error,E)}o&&m({type:"step_cache_miss",workflowId:R,stepKey:o,name:i,ts:Date.now()});let p=typeof A=="function"?A:()=>A;try{let s=await t(p,y);return o&&w.set(o,S(s)),s}catch(s){if(o&&M(s)){let E=s,g=E.meta.origin==="result"?E.meta.resultCause:E.meta.thrown;w.set(o,b(E.error,E.meta,g))}throw s}};return u.try=async(A,y)=>{let{name:i,key:o}=y;if(o&&w.has(o)){m({type:"step_cache_hit",workflowId:R,stepKey:o,name:i,ts:Date.now()});let p=w.get(o);if(p.ok)return p.value;let s=N(p.cause);throw D(p.error,s)}o&&m({type:"step_cache_miss",workflowId:R,stepKey:o,name:i,ts:Date.now()});try{let p=await t.try(A,y);return o&&w.set(o,S(p)),p}catch(p){if(o&&M(p)){let s=p,E=s.meta.origin==="result"?s.meta.resultCause:s.meta.thrown;w.set(o,b(s.error,s.meta,E))}throw p}},u},C=h?t=>l(f(t),e,I):t=>l(f(t),e),d;if(n?.strict===!0){let t=n;d=await U.strict(C,{onError:t.onError,onEvent:t.onEvent,catchUnexpected:t.catchUnexpected,workflowId:R,context:c})}else{let t=n;d=await U(C,{onError:t?.onError??(()=>{}),onEvent:t?.onEvent,workflowId:R,context:c})}let x=performance.now()-O;return d.ok?m({type:"workflow_success",workflowId:R,ts:Date.now(),durationMs:x}):m({type:"workflow_error",workflowId:R,ts:Date.now(),durationMs:x,error:d.error}),d}return a}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 T({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 T({type:"PENDING_APPROVAL",stepKey:e.key,reason:e.pendingReason,metadata:e.metadata});case"rejected":return T({type:"APPROVAL_REJECTED",stepKey:e.key,reason:n.reason});case"approved":return S(n.value)}}}function ee(e,n){let a=new Map(e.steps);return a.set(n.stepKey,{result:S(n.value)}),{steps:a}}function ne(e,n){let a=new Map(e.steps);return a.delete(n),{steps:a}}function te(e,n){let a=e.steps.get(n);return!a||a.result.ok?!1:K(a.result.error)}function re(e){let n=[];for(let[a,k]of e.steps)!k.result.ok&&K(k.result.error)&&n.push(a);return n}function oe(){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[a,k]of e)!k.result.ok&&K(k.result.error)&&n.push({stepKey:a,error:k.result.error});return n},injectApproval:(n,a)=>(e.set(n,{result:S(a)}),{steps:new Map(e)})}}export{ne as clearStep,Z as createApprovalStep,oe 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 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};
2
2
  //# sourceMappingURL=workflow.js.map