@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 +86 -0
- package/dist/core.cjs +1 -1
- package/dist/core.cjs.map +1 -1
- package/dist/core.d.cts +93 -6
- package/dist/core.d.ts +93 -6
- 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.js +1 -1
- package/dist/workflow.js.map +1 -1
- package/package.json +6 -1
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
|