@jagreehal/workflow 1.1.0 → 1.2.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 CHANGED
@@ -103,6 +103,92 @@ const result = await checkout(async (step) => {
103
103
  // result.error: 'UNAUTHORIZED' | 'ORDER_NOT_FOUND' | 'PAYMENT_FAILED' | UnexpectedError
104
104
  ```
105
105
 
106
+ ### Composing workflows
107
+
108
+ You can combine multiple workflows together. The error types automatically aggregate:
109
+
110
+ ```typescript
111
+ // Validation workflow
112
+ const validateEmail = async (email: string): AsyncResult<string, 'INVALID_EMAIL'> =>
113
+ email.includes('@') ? ok(email) : err('INVALID_EMAIL');
114
+
115
+ const validatePassword = async (pwd: string): AsyncResult<string, 'WEAK_PASSWORD'> =>
116
+ pwd.length >= 8 ? ok(pwd) : err('WEAK_PASSWORD');
117
+
118
+ const validationWorkflow = createWorkflow({ validateEmail, validatePassword });
119
+
120
+ // Checkout workflow (from example above)
121
+ const authenticate = async (token: string): AsyncResult<{ userId: string }, 'UNAUTHORIZED'> =>
122
+ token === 'valid' ? ok({ userId: 'user-1' }) : err('UNAUTHORIZED');
123
+
124
+ const fetchOrder = async (id: string): AsyncResult<{ total: number }, 'ORDER_NOT_FOUND'> =>
125
+ ok({ total: 99 });
126
+
127
+ const chargeCard = async (amount: number): AsyncResult<{ txId: string }, 'PAYMENT_FAILED'> =>
128
+ ok({ txId: 'tx-123' });
129
+
130
+ const checkoutWorkflow = createWorkflow({ authenticate, fetchOrder, chargeCard });
131
+
132
+ // Composed workflow: validation + checkout
133
+ // Include all dependencies from both workflows
134
+ const validateAndCheckout = createWorkflow({
135
+ validateEmail,
136
+ validatePassword,
137
+ authenticate,
138
+ fetchOrder,
139
+ chargeCard,
140
+ });
141
+
142
+ const result = await validateAndCheckout(async (step, deps) => {
143
+ // Run validation workflow as a step (workflows return AsyncResult)
144
+ const validated = await step(() => validationWorkflow(async (innerStep) => {
145
+ const email = await innerStep(deps.validateEmail('user@example.com'));
146
+ const password = await innerStep(deps.validatePassword('secret123'));
147
+ return { email, password };
148
+ }));
149
+
150
+ // Run checkout workflow as a step
151
+ const checkout = await step(() => checkoutWorkflow(async (innerStep) => {
152
+ const auth = await innerStep(deps.authenticate('valid'));
153
+ const order = await innerStep(deps.fetchOrder('order-1'));
154
+ const payment = await innerStep(deps.chargeCard(order.total));
155
+ return { userId: auth.userId, txId: payment.txId };
156
+ }));
157
+
158
+ return { validated, checkout };
159
+ });
160
+
161
+ // result.error: 'INVALID_EMAIL' | 'WEAK_PASSWORD' | 'UNAUTHORIZED' | 'ORDER_NOT_FOUND' | 'PAYMENT_FAILED' | UnexpectedError
162
+ // ↑ All error types from both workflows are automatically aggregated
163
+ ```
164
+
165
+ **Alternative approach**: You can also combine workflows by including all their dependencies in a single workflow:
166
+
167
+ ```typescript
168
+ // Simpler composition - combine all dependencies
169
+ const composed = createWorkflow({
170
+ validateEmail,
171
+ validatePassword,
172
+ authenticate,
173
+ fetchOrder,
174
+ chargeCard,
175
+ });
176
+
177
+ const result = await composed(async (step, deps) => {
178
+ // Validation steps
179
+ const email = await step(deps.validateEmail('user@example.com'));
180
+ const password = await step(deps.validatePassword('secret123'));
181
+
182
+ // Checkout steps
183
+ const auth = await step(deps.authenticate('valid'));
184
+ const order = await step(deps.fetchOrder('order-1'));
185
+ const payment = await step(deps.chargeCard(order.total));
186
+
187
+ return { email, password, userId: auth.userId, txId: payment.txId };
188
+ });
189
+ // Same error union: 'INVALID_EMAIL' | 'WEAK_PASSWORD' | 'UNAUTHORIZED' | 'ORDER_NOT_FOUND' | 'PAYMENT_FAILED' | UnexpectedError
190
+ ```
191
+
106
192
  ### Wrapping throwing APIs with step.try
107
193
 
108
194
  ```typescript
package/dist/core.cjs CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";var U=Object.defineProperty;var L=Object.getOwnPropertyDescriptor;var X=Object.getOwnPropertyNames;var W=Object.prototype.hasOwnProperty;var Y=(e,n)=>{for(var r in n)U(e,r,{get:n[r],enumerable:!0})},J=(e,n,r,t)=>{if(n&&typeof n=="object"||typeof n=="function")for(let u of X(n))!W.call(e,u)&&u!==r&&U(e,u,{get:()=>n[u],enumerable:!(t=L(n,u))||t.enumerable});return e};var G=e=>J(U({},"__esModule",{value:!0}),e);var me={};Y(me,{EARLY_EXIT_SYMBOL:()=>b,UnwrapError:()=>h,all:()=>we,allAsync:()=>ye,allSettled:()=>ke,allSettledAsync:()=>fe,andThen:()=>ie,any:()=>Re,anyAsync:()=>de,createEarlyExit:()=>M,err:()=>i,from:()=>ne,fromNullable:()=>oe,fromPromise:()=>re,isEarlyExit:()=>K,isErr:()=>B,isOk:()=>q,isUnexpectedError:()=>O,map:()=>se,mapError:()=>ue,mapErrorTry:()=>pe,mapTry:()=>ce,match:()=>ae,ok:()=>k,partition:()=>Te,run:()=>_,tap:()=>le,tapError:()=>Ee,tryAsync:()=>te,unwrap:()=>Q,unwrapOr:()=>Z,unwrapOrElse:()=>ee});module.exports=G(me);var k=e=>({ok:!0,value:e}),i=(e,n)=>({ok:!1,error:e,...n?.cause!==void 0?{cause:n.cause}:{}}),q=e=>e.ok,B=e=>!e.ok,O=e=>typeof e=="object"&&e!==null&&e.type==="UNEXPECTED_ERROR",b=Symbol("early-exit");function M(e,n){return{[b]:!0,error:e,meta:n}}function K(e){return typeof e=="object"&&e!==null&&e[b]===!0}var F=Symbol("mapper-exception");function H(e){return{[F]:!0,thrown:e}}function $(e){return typeof e=="object"&&e!==null&&e[F]===!0}function z(e){return typeof e=="string"?{name:e}:e??{}}async function _(e,n){let{onError:r,onEvent:t,catchUnexpected:u,workflowId:R,context:d}=n&&typeof n=="object"?n:{},a=R??crypto.randomUUID(),D=!r&&!u,c=o=>{t?.(o,d)},P=M,I=o=>K(o),S=(o,f)=>D?f?.origin==="result"?{type:"UNEXPECTED_ERROR",cause:{type:"STEP_FAILURE",origin:"result",error:o,...f.resultCause!==void 0?{cause:f.resultCause}:{}}}:f?.origin==="throw"?{type:"UNEXPECTED_ERROR",cause:{type:"STEP_FAILURE",origin:"throw",error:o,thrown:f.thrown}}:{type:"UNEXPECTED_ERROR",cause:{type:"STEP_FAILURE",origin:"result",error:o}}:o,N=o=>o.origin==="result"?o.resultCause:o.thrown,V=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 o=(m,T)=>(async()=>{let{name:l,key:s}=z(T),v=t?performance.now():0;t&&c({type:"step_start",workflowId:a,stepKey:s,name:l,ts:Date.now()});let p;try{p=await(typeof m=="function"?m():m)}catch(y){let C=performance.now()-v;if(I(y))throw c({type:"step_aborted",workflowId:a,stepKey:s,name:l,ts:Date.now(),durationMs:C}),y;if(u){let A;try{A=u(y)}catch(j){throw H(j)}throw c({type:"step_error",workflowId:a,stepKey:s,name:l,ts:Date.now(),durationMs:C,error:A}),s&&c({type:"step_complete",workflowId:a,stepKey:s,name:l,ts:Date.now(),durationMs:C,result:i(A,{cause:y}),meta:{origin:"throw",thrown:y}}),r?.(A,l),P(A,{origin:"throw",thrown:y})}else{let A={type:"UNEXPECTED_ERROR",cause:{type:"UNCAUGHT_EXCEPTION",thrown:y}};throw c({type:"step_error",workflowId:a,stepKey:s,name:l,ts:Date.now(),durationMs:C,error:A}),s&&c({type:"step_complete",workflowId:a,stepKey:s,name:l,ts:Date.now(),durationMs:C,result:i(A,{cause:y}),meta:{origin:"throw",thrown:y}}),y}}let E=performance.now()-v;if(p.ok)return c({type:"step_success",workflowId:a,stepKey:s,name:l,ts:Date.now(),durationMs:E}),s&&c({type:"step_complete",workflowId:a,stepKey:s,name:l,ts:Date.now(),durationMs:E,result:p}),p.value;let w=S(p.error,{origin:"result",resultCause:p.cause});throw c({type:"step_error",workflowId:a,stepKey:s,name:l,ts:Date.now(),durationMs:E,error:w}),s&&c({type:"step_complete",workflowId:a,stepKey:s,name:l,ts:Date.now(),durationMs:E,result:p,meta:{origin:"result",resultCause:p.cause}}),r?.(p.error,l),P(p.error,{origin:"result",resultCause:p.cause})})();o.try=(m,T)=>{let l=T.name,s=T.key,g="error"in T?()=>T.error:T.onError,v=t;return(async()=>{let p=v?performance.now():0;t&&c({type:"step_start",workflowId:a,stepKey:s,name:l,ts:Date.now()});try{let E=await m(),w=performance.now()-p;return c({type:"step_success",workflowId:a,stepKey:s,name:l,ts:Date.now(),durationMs:w}),s&&c({type:"step_complete",workflowId:a,stepKey:s,name:l,ts:Date.now(),durationMs:w,result:k(E)}),E}catch(E){let w=g(E),y=performance.now()-p,C=S(w,{origin:"throw",thrown:E});throw c({type:"step_error",workflowId:a,stepKey:s,name:l,ts:Date.now(),durationMs:y,error:C}),s&&c({type:"step_complete",workflowId:a,stepKey:s,name:l,ts:Date.now(),durationMs:y,result:i(w,{cause:E}),meta:{origin:"throw",thrown:E}}),r?.(w,l),P(w,{origin:"throw",thrown:E})}})()},o.fromResult=(m,T)=>{let l=T.name,s=T.key,g="error"in T?()=>T.error:T.onError,v=t;return(async()=>{let p=v?performance.now():0;t&&c({type:"step_start",workflowId:a,stepKey:s,name:l,ts:Date.now()});let E=await m();if(E.ok){let w=performance.now()-p;return c({type:"step_success",workflowId:a,stepKey:s,name:l,ts:Date.now(),durationMs:w}),s&&c({type:"step_complete",workflowId:a,stepKey:s,name:l,ts:Date.now(),durationMs:w,result:k(E.value)}),E.value}else{let w=g(E.error),y=performance.now()-p,C=S(w,{origin:"result",resultCause:E.error});throw c({type:"step_error",workflowId:a,stepKey:s,name:l,ts:Date.now(),durationMs:y,error:C}),s&&c({type:"step_complete",workflowId:a,stepKey:s,name:l,ts:Date.now(),durationMs:y,result:i(w,{cause:E.error}),meta:{origin:"result",resultCause:E.error}}),r?.(w,l),P(w,{origin:"result",resultCause:E.error})}})()};let x=await e(o);return k(x)}catch(o){if($(o))throw o.thrown;if(I(o)){let x=N(o.meta);if(u||r)return i(o.error,{cause:x});if(O(o.error))return i(o.error,{cause:x});let m=V(o);return i(m,{cause:x})}if(u){let x=u(o);return r?.(x,"unexpected"),i(x,{cause:o})}let f={type:"UNEXPECTED_ERROR",cause:{type:"UNCAUGHT_EXCEPTION",thrown:o}};return r?.(f,"unexpected"),i(f,{cause:o})}}_.strict=(e,n)=>_(e,n);var h=class extends Error{constructor(r,t){super(`Unwrap called on an error result: ${String(r)}`);this.error=r;this.cause=t;this.name="UnwrapError"}},Q=e=>{if(e.ok)return e.value;throw new h(e.error,e.cause)},Z=(e,n)=>e.ok?e.value:n,ee=(e,n)=>e.ok?e.value:n(e.error,e.cause);function ne(e,n){try{return k(e())}catch(r){return n?i(n(r),{cause:r}):i(r)}}async function re(e,n){try{return k(await e)}catch(r){return n?i(n(r),{cause:r}):i(r)}}async function te(e,n){try{return k(await e())}catch(r){return n?i(n(r),{cause:r}):i(r)}}function oe(e,n){return e!=null?k(e):i(n())}function se(e,n){return e.ok?k(n(e.value)):e}function ue(e,n){return e.ok?e:i(n(e.error),{cause:e.cause})}function ae(e,n){return e.ok?n.ok(e.value):n.err(e.error,e.cause)}function ie(e,n){return e.ok?n(e.value):e}function le(e,n){return e.ok&&n(e.value),e}function Ee(e,n){return e.ok||n(e.error,e.cause),e}function ce(e,n,r){if(!e.ok)return e;try{return k(n(e.value))}catch(t){return i(r(t),{cause:t})}}function pe(e,n,r){if(e.ok)return e;try{return i(n(e.error),{cause:e.cause})}catch(t){return i(r(t),{cause:t})}}function we(e){let n=[];for(let r of e){if(!r.ok)return r;n.push(r.value)}return k(n)}async function ye(e){return e.length===0?k([]):new Promise(n=>{let r=!1,t=e.length,u=new Array(e.length);for(let R=0;R<e.length;R++){let d=R;Promise.resolve(e[d]).catch(a=>i({type:"PROMISE_REJECTED",cause:a},{cause:{type:"PROMISE_REJECTION",reason:a}})).then(a=>{if(!r){if(!a.ok){r=!0,n(a);return}u[d]=a.value,t--,t===0&&n(k(u))}})}})}function ke(e){let n=[],r=[];for(let t of e)t.ok?n.push(t.value):r.push({error:t.error,cause:t.cause});return r.length>0?i(r):k(n)}function Te(e){let n=[],r=[];for(let t of e)t.ok?n.push(t.value):r.push(t.error);return{values:n,errors:r}}function Re(e){if(e.length===0)return i({type:"EMPTY_INPUT",message:"any() requires at least one Result"});let n=null;for(let r of e){if(r.ok)return r;n||(n=r)}return n}async function de(e){return e.length===0?i({type:"EMPTY_INPUT",message:"anyAsync() requires at least one Result"}):new Promise(n=>{let r=!1,t=e.length,u=null;for(let R of e)Promise.resolve(R).catch(d=>i({type:"PROMISE_REJECTED",cause:d},{cause:{type:"PROMISE_REJECTION",reason:d}})).then(d=>{if(!r){if(d.ok){r=!0,n(d);return}u||(u=d),t--,t===0&&n(u)}})})}async function fe(e){let n=await Promise.all(e.map(u=>Promise.resolve(u).then(R=>({status:"result",result:R})).catch(R=>({status:"rejected",error:{type:"PROMISE_REJECTED",cause:R},cause:{type:"PROMISE_REJECTION",reason:R}})))),r=[],t=[];for(let u of n)u.status==="rejected"?t.push({error:u.error,cause:u.cause}):u.result.ok?r.push(u.result.value):t.push({error:u.result.error,cause:u.result.cause});return t.length>0?i(t):k(r)}0&&(module.exports={EARLY_EXIT_SYMBOL,UnwrapError,all,allAsync,allSettled,allSettledAsync,andThen,any,anyAsync,createEarlyExit,err,from,fromNullable,fromPromise,isEarlyExit,isErr,isOk,isUnexpectedError,map,mapError,mapErrorTry,mapTry,match,ok,partition,run,tap,tapError,tryAsync,unwrap,unwrapOr,unwrapOrElse});
1
+ "use strict";var b=Object.defineProperty;var J=Object.getOwnPropertyDescriptor;var $=Object.getOwnPropertyNames;var G=Object.prototype.hasOwnProperty;var q=(e,n)=>{for(var t in n)b(e,t,{get:n[t],enumerable:!0})},B=(e,n,t,u)=>{if(n&&typeof n=="object"||typeof n=="function")for(let c of $(n))!G.call(e,c)&&c!==t&&b(e,c,{get:()=>n[c],enumerable:!(u=J(n,c))||u.enumerable});return e};var H=e=>B(b({},"__esModule",{value:!0}),e);var ge={};q(ge,{EARLY_EXIT_SYMBOL:()=>O,UnwrapError:()=>I,all:()=>de,allAsync:()=>Re,allSettled:()=>fe,allSettledAsync:()=>Ae,andThen:()=>Ee,any:()=>Ce,anyAsync:()=>xe,createEarlyExit:()=>F,err:()=>l,from:()=>se,fromNullable:()=>ie,fromPromise:()=>ue,isEarlyExit:()=>N,isErr:()=>Q,isOk:()=>z,isUnexpectedError:()=>D,map:()=>pe,mapError:()=>ce,mapErrorTry:()=>ke,mapTry:()=>Te,match:()=>le,ok:()=>f,partition:()=>me,run:()=>M,tap:()=>we,tapError:()=>ye,tryAsync:()=>ae,unwrap:()=>te,unwrapOr:()=>re,unwrapOrElse:()=>oe});module.exports=H(ge);var f=e=>({ok:!0,value:e}),l=(e,n)=>({ok:!1,error:e,...n?.cause!==void 0?{cause:n.cause}:{}}),z=e=>e.ok,Q=e=>!e.ok,D=e=>typeof e=="object"&&e!==null&&e.type==="UNEXPECTED_ERROR",O=Symbol("early-exit");function F(e,n){return{[O]:!0,error:e,meta:n}}function N(e){return typeof e=="object"&&e!==null&&e[O]===!0}var V=Symbol("mapper-exception");function Z(e){return{[V]:!0,thrown:e}}function ee(e){return typeof e=="object"&&e!==null&&e[V]===!0}function ne(e){return typeof e=="string"?{name:e}:e??{}}async function M(e,n){let{onError:t,onEvent:u,catchUnexpected:c,workflowId:C,context:A}=n&&typeof n=="object"?n:{},a=C??crypto.randomUUID(),j=!t&&!c,g=[],L=0,_=r=>r??`step_${++L}`,E=r=>{if(r.type==="step_success"){let S=r.stepId;for(let x=g.length-1;x>=0;x--){let T=g[x];if(T.type==="race"&&!T.winnerId){T.winnerId=S;break}}}u?.(r,A)},h=F,K=r=>N(r),U=(r,S)=>j?S?.origin==="result"?{type:"UNEXPECTED_ERROR",cause:{type:"STEP_FAILURE",origin:"result",error:r,...S.resultCause!==void 0?{cause:S.resultCause}:{}}}:S?.origin==="throw"?{type:"UNEXPECTED_ERROR",cause:{type:"STEP_FAILURE",origin:"throw",error:r,thrown:S.thrown}}:{type:"UNEXPECTED_ERROR",cause:{type:"STEP_FAILURE",origin:"result",error:r}}:r,X=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=(T,k)=>(async()=>{let{name:o,key:s}=ne(k),y=_(s),p=u?performance.now():0;u&&E({type:"step_start",workflowId:a,stepId:y,stepKey:s,name:o,ts:Date.now()});let i;try{i=await(typeof T=="function"?T():T)}catch(R){let v=performance.now()-p;if(K(R))throw E({type:"step_aborted",workflowId:a,stepId:y,stepKey:s,name:o,ts:Date.now(),durationMs:v}),R;if(c){let P;try{P=c(R)}catch(Y){throw Z(Y)}throw E({type:"step_error",workflowId:a,stepId:y,stepKey:s,name:o,ts:Date.now(),durationMs:v,error:P}),s&&E({type:"step_complete",workflowId:a,stepKey:s,name:o,ts:Date.now(),durationMs:v,result:l(P,{cause:R}),meta:{origin:"throw",thrown:R}}),t?.(P,o),h(P,{origin:"throw",thrown:R})}else{let P={type:"UNEXPECTED_ERROR",cause:{type:"UNCAUGHT_EXCEPTION",thrown:R}};throw E({type:"step_error",workflowId:a,stepId:y,stepKey:s,name:o,ts:Date.now(),durationMs:v,error:P}),s&&E({type:"step_complete",workflowId:a,stepKey:s,name:o,ts:Date.now(),durationMs:v,result:l(P,{cause:R}),meta:{origin:"throw",thrown:R}}),R}}let w=performance.now()-p;if(i.ok)return E({type:"step_success",workflowId:a,stepId:y,stepKey:s,name:o,ts:Date.now(),durationMs:w}),s&&E({type:"step_complete",workflowId:a,stepKey:s,name:o,ts:Date.now(),durationMs:w,result:i}),i.value;let d=U(i.error,{origin:"result",resultCause:i.cause});throw E({type:"step_error",workflowId:a,stepId:y,stepKey:s,name:o,ts:Date.now(),durationMs:w,error:d}),s&&E({type:"step_complete",workflowId:a,stepKey:s,name:o,ts:Date.now(),durationMs:w,result:i,meta:{origin:"result",resultCause:i.cause}}),t?.(i.error,o),h(i.error,{origin:"result",resultCause:i.cause})})();r.try=(T,k)=>{let o=k.name,s=k.key,y=_(s),m="error"in k?()=>k.error:k.onError,p=u;return(async()=>{let i=p?performance.now():0;u&&E({type:"step_start",workflowId:a,stepId:y,stepKey:s,name:o,ts:Date.now()});try{let w=await T(),d=performance.now()-i;return E({type:"step_success",workflowId:a,stepId:y,stepKey:s,name:o,ts:Date.now(),durationMs:d}),s&&E({type:"step_complete",workflowId:a,stepKey:s,name:o,ts:Date.now(),durationMs:d,result:f(w)}),w}catch(w){let d=m(w),R=performance.now()-i,v=U(d,{origin:"throw",thrown:w});throw E({type:"step_error",workflowId:a,stepId:y,stepKey:s,name:o,ts:Date.now(),durationMs:R,error:v}),s&&E({type:"step_complete",workflowId:a,stepKey:s,name:o,ts:Date.now(),durationMs:R,result:l(d,{cause:w}),meta:{origin:"throw",thrown:w}}),t?.(d,o),h(d,{origin:"throw",thrown:w})}})()},r.fromResult=(T,k)=>{let o=k.name,s=k.key,y=_(s),m="error"in k?()=>k.error:k.onError,p=u;return(async()=>{let i=p?performance.now():0;u&&E({type:"step_start",workflowId:a,stepId:y,stepKey:s,name:o,ts:Date.now()});let w=await T();if(w.ok){let d=performance.now()-i;return E({type:"step_success",workflowId:a,stepId:y,stepKey:s,name:o,ts:Date.now(),durationMs:d}),s&&E({type:"step_complete",workflowId:a,stepKey:s,name:o,ts:Date.now(),durationMs:d,result:f(w.value)}),w.value}else{let d=m(w.error),R=performance.now()-i,v=U(d,{origin:"result",resultCause:w.error});throw E({type:"step_error",workflowId:a,stepId:y,stepKey:s,name:o,ts:Date.now(),durationMs:R,error:v}),s&&E({type:"step_complete",workflowId:a,stepKey:s,name:o,ts:Date.now(),durationMs:R,result:l(d,{cause:w.error}),meta:{origin:"result",resultCause:w.error}}),t?.(d,o),h(d,{origin:"result",resultCause:w.error})}})()},r.parallel=(T,k)=>{let o=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let s=performance.now(),y=!1;g.push({scopeId:o,type:"parallel"});let m=()=>{if(y)return;y=!0;let p=g.findIndex(i=>i.scopeId===o);p!==-1&&g.splice(p,1),E({type:"scope_end",workflowId:a,scopeId:o,ts:Date.now(),durationMs:performance.now()-s})};E({type:"scope_start",workflowId:a,scopeId:o,scopeType:"parallel",name:T,ts:Date.now()});try{let p=await k();if(m(),!p.ok)throw t?.(p.error,T),h(p.error,{origin:"result",resultCause:p.cause});return p.value}catch(p){throw m(),p}})()},r.race=(T,k)=>{let o=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let s=performance.now(),y=!1,m={scopeId:o,type:"race",winnerId:void 0};g.push(m);let p=()=>{if(y)return;y=!0;let i=g.findIndex(w=>w.scopeId===o);i!==-1&&g.splice(i,1),E({type:"scope_end",workflowId:a,scopeId:o,ts:Date.now(),durationMs:performance.now()-s,winnerId:m.winnerId})};E({type:"scope_start",workflowId:a,scopeId:o,scopeType:"race",name:T,ts:Date.now()});try{let i=await k();if(p(),!i.ok)throw t?.(i.error,T),h(i.error,{origin:"result",resultCause:i.cause});return i.value}catch(i){throw p(),i}})()},r.allSettled=(T,k)=>{let o=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let s=performance.now(),y=!1;g.push({scopeId:o,type:"allSettled"});let m=()=>{if(y)return;y=!0;let p=g.findIndex(i=>i.scopeId===o);p!==-1&&g.splice(p,1),E({type:"scope_end",workflowId:a,scopeId:o,ts:Date.now(),durationMs:performance.now()-s})};E({type:"scope_start",workflowId:a,scopeId:o,scopeType:"allSettled",name:T,ts:Date.now()});try{let p=await k();if(m(),!p.ok)throw t?.(p.error,T),h(p.error,{origin:"result",resultCause:p.cause});return p.value}catch(p){throw m(),p}})()};let x=await e(r);return f(x)}catch(r){if(ee(r))throw r.thrown;if(K(r)){let x=X(r.meta);if(c||t)return l(r.error,{cause:x});if(D(r.error))return l(r.error,{cause:x});let T=W(r);return l(T,{cause:x})}if(c){let x=c(r);return t?.(x,"unexpected"),l(x,{cause:r})}let S={type:"UNEXPECTED_ERROR",cause:{type:"UNCAUGHT_EXCEPTION",thrown:r}};return t?.(S,"unexpected"),l(S,{cause:r})}}M.strict=(e,n)=>M(e,n);var I=class extends Error{constructor(t,u){super(`Unwrap called on an error result: ${String(t)}`);this.error=t;this.cause=u;this.name="UnwrapError"}},te=e=>{if(e.ok)return e.value;throw new I(e.error,e.cause)},re=(e,n)=>e.ok?e.value:n,oe=(e,n)=>e.ok?e.value:n(e.error,e.cause);function se(e,n){try{return f(e())}catch(t){return n?l(n(t),{cause:t}):l(t)}}async function ue(e,n){try{return f(await e)}catch(t){return n?l(n(t),{cause:t}):l(t)}}async function ae(e,n){try{return f(await e())}catch(t){return n?l(n(t),{cause:t}):l(t)}}function ie(e,n){return e!=null?f(e):l(n())}function pe(e,n){return e.ok?f(n(e.value)):e}function ce(e,n){return e.ok?e:l(n(e.error),{cause:e.cause})}function le(e,n){return e.ok?n.ok(e.value):n.err(e.error,e.cause)}function Ee(e,n){return e.ok?n(e.value):e}function we(e,n){return e.ok&&n(e.value),e}function ye(e,n){return e.ok||n(e.error,e.cause),e}function Te(e,n,t){if(!e.ok)return e;try{return f(n(e.value))}catch(u){return l(t(u),{cause:u})}}function ke(e,n,t){if(e.ok)return e;try{return l(n(e.error),{cause:e.cause})}catch(u){return l(t(u),{cause:u})}}function de(e){let n=[];for(let t of e){if(!t.ok)return t;n.push(t.value)}return f(n)}async function Re(e){return e.length===0?f([]):new Promise(n=>{let t=!1,u=e.length,c=new Array(e.length);for(let C=0;C<e.length;C++){let A=C;Promise.resolve(e[A]).catch(a=>l({type:"PROMISE_REJECTED",cause:a},{cause:{type:"PROMISE_REJECTION",reason:a}})).then(a=>{if(!t){if(!a.ok){t=!0,n(a);return}c[A]=a.value,u--,u===0&&n(f(c))}})}})}function fe(e){let n=[],t=[];for(let u of e)u.ok?n.push(u.value):t.push({error:u.error,cause:u.cause});return t.length>0?l(t):f(n)}function me(e){let n=[],t=[];for(let u of e)u.ok?n.push(u.value):t.push(u.error);return{values:n,errors:t}}function Ce(e){if(e.length===0)return l({type:"EMPTY_INPUT",message:"any() requires at least one Result"});let n=null;for(let t of e){if(t.ok)return t;n||(n=t)}return n}async function xe(e){return e.length===0?l({type:"EMPTY_INPUT",message:"anyAsync() requires at least one Result"}):new Promise(n=>{let t=!1,u=e.length,c=null;for(let C of e)Promise.resolve(C).catch(A=>l({type:"PROMISE_REJECTED",cause:A},{cause:{type:"PROMISE_REJECTION",reason:A}})).then(A=>{if(!t){if(A.ok){t=!0,n(A);return}c||(c=A),u--,u===0&&n(c)}})})}async function Ae(e){let n=await Promise.all(e.map(c=>Promise.resolve(c).then(C=>({status:"result",result:C})).catch(C=>({status:"rejected",error:{type:"PROMISE_REJECTED",cause:C},cause:{type:"PROMISE_REJECTION",reason:C}})))),t=[],u=[];for(let c of n)c.status==="rejected"?u.push({error:c.error,cause:c.cause}):c.result.ok?t.push(c.result.value):u.push({error:c.result.error,cause:c.result.cause});return u.length>0?l(u):f(t)}0&&(module.exports={EARLY_EXIT_SYMBOL,UnwrapError,all,allAsync,allSettled,allSettledAsync,andThen,any,anyAsync,createEarlyExit,err,from,fromNullable,fromPromise,isEarlyExit,isErr,isOk,isUnexpectedError,map,mapError,mapErrorTry,mapTry,match,ok,partition,run,tap,tapError,tryAsync,unwrap,unwrapOr,unwrapOrElse});
2
2
  //# sourceMappingURL=core.cjs.map