@jagreehal/workflow 1.11.0 → 1.13.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.
Files changed (60) hide show
  1. package/README.md +1197 -20
  2. package/dist/batch.cjs +1 -1
  3. package/dist/batch.cjs.map +1 -1
  4. package/dist/batch.js +1 -1
  5. package/dist/batch.js.map +1 -1
  6. package/dist/core.cjs +1 -1
  7. package/dist/core.cjs.map +1 -1
  8. package/dist/core.d.cts +31 -17
  9. package/dist/core.d.ts +31 -17
  10. package/dist/core.js +1 -1
  11. package/dist/core.js.map +1 -1
  12. package/dist/duration.cjs +2 -0
  13. package/dist/duration.cjs.map +1 -0
  14. package/dist/duration.d.cts +246 -0
  15. package/dist/duration.d.ts +246 -0
  16. package/dist/duration.js +2 -0
  17. package/dist/duration.js.map +1 -0
  18. package/dist/index.cjs +5 -5
  19. package/dist/index.cjs.map +1 -1
  20. package/dist/index.d.cts +3 -0
  21. package/dist/index.d.ts +3 -0
  22. package/dist/index.js +5 -5
  23. package/dist/index.js.map +1 -1
  24. package/dist/match.cjs +2 -0
  25. package/dist/match.cjs.map +1 -0
  26. package/dist/match.d.cts +216 -0
  27. package/dist/match.d.ts +216 -0
  28. package/dist/match.js +2 -0
  29. package/dist/match.js.map +1 -0
  30. package/dist/resource.cjs +1 -1
  31. package/dist/resource.cjs.map +1 -1
  32. package/dist/resource.js +1 -1
  33. package/dist/resource.js.map +1 -1
  34. package/dist/schedule.cjs +2 -0
  35. package/dist/schedule.cjs.map +1 -0
  36. package/dist/schedule.d.cts +387 -0
  37. package/dist/schedule.d.ts +387 -0
  38. package/dist/schedule.js +2 -0
  39. package/dist/schedule.js.map +1 -0
  40. package/dist/workflow.cjs +1 -1
  41. package/dist/workflow.cjs.map +1 -1
  42. package/dist/workflow.js +1 -1
  43. package/dist/workflow.js.map +1 -1
  44. package/docs/api.md +30 -0
  45. package/docs/coming-from-neverthrow.md +103 -10
  46. package/docs/effect-features-to-port.md +210 -0
  47. package/docs/match-examples.test.ts +558 -0
  48. package/docs/match.md +417 -0
  49. package/docs/policies-examples.test.ts +750 -0
  50. package/docs/policies.md +508 -0
  51. package/docs/resource-management-examples.test.ts +729 -0
  52. package/docs/resource-management.md +509 -0
  53. package/docs/schedule-examples.test.ts +736 -0
  54. package/docs/schedule.md +467 -0
  55. package/docs/tagged-error-examples.test.ts +494 -0
  56. package/docs/tagged-error.md +730 -0
  57. package/docs/visualization-examples.test.ts +663 -0
  58. package/docs/visualization.md +395 -0
  59. package/docs/visualize-examples.md +1 -1
  60. package/package.json +17 -2
package/dist/core.d.cts CHANGED
@@ -31,6 +31,8 @@ type Ok<T> = {
31
31
  * Use `err(error)` to create instances.
32
32
  *
33
33
  * @template E - The type of the error value
34
+ * @template C - The type of the cause (defaults to unknown)
35
+ * @template T - Phantom type for the success value (preserved after narrowing)
34
36
  *
35
37
  * @example
36
38
  * ```typescript
@@ -52,14 +54,7 @@ type Err<E, C = unknown> = {
52
54
  * @template E - The type of the error value (defaults to unknown)
53
55
  * @template C - The type of the cause (defaults to unknown)
54
56
  */
55
- type Result<T, E = unknown, C = unknown> = {
56
- ok: true;
57
- value: T;
58
- } | {
59
- ok: false;
60
- error: E;
61
- cause?: C;
62
- };
57
+ type Result<T, E = unknown, C = unknown> = Ok<T> | Err<E, C>;
63
58
  /**
64
59
  * A Promise that resolves to a Result.
65
60
  * Use this for asynchronous operations that might fail.
@@ -1169,7 +1164,7 @@ declare const unwrapOrElse: <T, E, C>(r: Result<T, E, C>, fn: (error: E, cause?:
1169
1164
  * // error: { ok: false, error: SyntaxError }
1170
1165
  * ```
1171
1166
  */
1172
- declare function from<T>(fn: () => T): Result<T, unknown>;
1167
+ declare function from<T>(fn: () => T): Ok<T> | Err<unknown, unknown>;
1173
1168
  /**
1174
1169
  * Wraps a synchronous throwing function in a Result with custom error mapping.
1175
1170
  *
@@ -1195,7 +1190,7 @@ declare function from<T>(fn: () => T): Result<T, unknown>;
1195
1190
  * );
1196
1191
  * ```
1197
1192
  */
1198
- declare function from<T, E>(fn: () => T, onError: (cause: unknown) => E): Result<T, E>;
1193
+ declare function from<T, E>(fn: () => T, onError: (cause: unknown) => E): Ok<T> | Err<E, unknown>;
1199
1194
  /**
1200
1195
  * Wraps a Promise in a Result, converting rejections to errors.
1201
1196
  *
@@ -1226,7 +1221,7 @@ declare function from<T, E>(fn: () => T, onError: (cause: unknown) => E): Result
1226
1221
  * // result.ok: true if fetch succeeded, false if rejected
1227
1222
  * ```
1228
1223
  */
1229
- declare function fromPromise<T>(promise: Promise<T>): AsyncResult<T, unknown>;
1224
+ declare function fromPromise<T>(promise: Promise<T>): Promise<Ok<T> | Err<unknown, unknown>>;
1230
1225
  /**
1231
1226
  * Wraps a Promise in a Result with custom error mapping.
1232
1227
  *
@@ -1255,7 +1250,7 @@ declare function fromPromise<T>(promise: Promise<T>): AsyncResult<T, unknown>;
1255
1250
  * );
1256
1251
  * ```
1257
1252
  */
1258
- declare function fromPromise<T, E>(promise: Promise<T>, onError: (cause: unknown) => E): AsyncResult<T, E>;
1253
+ declare function fromPromise<T, E>(promise: Promise<T>, onError: (cause: unknown) => E): Promise<Ok<T> | Err<E, unknown>>;
1259
1254
  /**
1260
1255
  * Wraps an async function in a Result, catching both thrown exceptions and Promise rejections.
1261
1256
  *
@@ -1393,6 +1388,8 @@ declare function fromNullable<T, E>(value: T | null | undefined, onNull: () => E
1393
1388
  * );
1394
1389
  * ```
1395
1390
  */
1391
+ declare function map<T, U>(r: Ok<T>, fn: (value: T) => U): Ok<U>;
1392
+ declare function map<T, U, E, C>(r: Err<E, C>, fn: (value: T) => U): Err<E, C>;
1396
1393
  declare function map<T, U, E, C>(r: Result<T, E, C>, fn: (value: T) => U): Result<U, E, C>;
1397
1394
  /**
1398
1395
  * Transforms the error value of a Result.
@@ -1481,6 +1478,14 @@ declare function mapError<T, E, F, C>(r: Result<T, E, C>, fn: (error: E) => F):
1481
1478
  * });
1482
1479
  * ```
1483
1480
  */
1481
+ declare function match<T, E, C, R>(r: Ok<T>, handlers: {
1482
+ ok: (value: T) => R;
1483
+ err: (error: E, cause?: C) => R;
1484
+ }): R;
1485
+ declare function match<T, E, C, R>(r: Err<E, C>, handlers: {
1486
+ ok: (value: T) => R;
1487
+ err: (error: E, cause?: C) => R;
1488
+ }): R;
1484
1489
  declare function match<T, E, C, R>(r: Result<T, E, C>, handlers: {
1485
1490
  ok: (value: T) => R;
1486
1491
  err: (error: E, cause?: C) => R;
@@ -1541,6 +1546,10 @@ declare function match<T, E, C, R>(r: Result<T, E, C>, handlers: {
1541
1546
  * // data.error: 'FETCH_ERROR' | 'NOT_FOUND'
1542
1547
  * ```
1543
1548
  */
1549
+ declare function andThen<T, U>(r: Ok<T>, fn: (value: T) => Ok<U>): Ok<U>;
1550
+ declare function andThen<T, F, C2>(r: Ok<T>, fn: (value: T) => Err<F, C2>): Err<F, C2>;
1551
+ declare function andThen<T, U, F, C2>(r: Ok<T>, fn: (value: T) => Result<U, F, C2>): Result<U, F, C2>;
1552
+ declare function andThen<T, U, E, F, C1, C2>(r: Err<E, C1>, fn: (value: T) => Result<U, F, C2>): Err<E, C1>;
1544
1553
  declare function andThen<T, U, E, F, C1, C2>(r: Result<T, E, C1>, fn: (value: T) => Result<U, F, C2>): Result<U, E | F, C1 | C2>;
1545
1554
  /**
1546
1555
  * Executes a side effect on a successful Result without changing it.
@@ -1948,14 +1957,17 @@ declare function hydrate<T, E, C = unknown>(value: unknown): Result<T, E, C> | n
1948
1957
  */
1949
1958
  declare function isSerializedResult(value: unknown): value is Result<unknown, unknown, unknown>;
1950
1959
  type AllValues<T extends readonly Result<unknown, unknown, unknown>[]> = {
1951
- [K in keyof T]: T[K] extends Result<infer V, unknown, unknown> ? V : never;
1960
+ [K in keyof T]: T[K] extends Ok<infer V> ? V : T[K] extends Err<unknown, unknown> ? never : T[K] extends Result<infer V, unknown, unknown> ? V : never;
1952
1961
  };
1953
1962
  type AllErrors<T extends readonly Result<unknown, unknown, unknown>[]> = {
1954
- [K in keyof T]: T[K] extends Result<unknown, infer E, unknown> ? E : never;
1963
+ [K in keyof T]: T[K] extends Ok<unknown> ? never : T[K] extends Err<infer E, unknown> ? E : T[K] extends Result<unknown, infer E, unknown> ? E : never;
1955
1964
  }[number];
1956
1965
  type AllCauses<T extends readonly Result<unknown, unknown, unknown>[]> = {
1957
- [K in keyof T]: T[K] extends Result<unknown, unknown, infer C> ? C : never;
1966
+ [K in keyof T]: T[K] extends Ok<unknown> ? never : T[K] extends Err<unknown, infer C> ? C : T[K] extends Result<unknown, unknown, infer C> ? C : never;
1958
1967
  }[number];
1968
+ type AllResult<T extends readonly Result<unknown, unknown, unknown>[]> = [
1969
+ AllErrors<T>
1970
+ ] extends [never] ? Ok<AllValues<T>> : Result<AllValues<T>, AllErrors<T>, AllCauses<T>>;
1959
1971
  /**
1960
1972
  * Combines multiple Results into one, requiring all to succeed.
1961
1973
  *
@@ -2003,7 +2015,7 @@ type AllCauses<T extends readonly Result<unknown, unknown, unknown>[]> = {
2003
2015
  * // data.value: [user, posts, comments] if all succeed
2004
2016
  * ```
2005
2017
  */
2006
- declare function all<const T extends readonly Result<unknown, unknown, unknown>[]>(results: T): Result<AllValues<T>, AllErrors<T>, AllCauses<T>>;
2018
+ declare function all<const T extends readonly Result<unknown, unknown, unknown>[]>(results: T): AllResult<T>;
2007
2019
  /**
2008
2020
  * Combines multiple Results or Promises of Results into one (async version of `all`).
2009
2021
  *
@@ -2059,7 +2071,9 @@ type SettledError<E, C = unknown> = {
2059
2071
  error: E;
2060
2072
  cause?: C;
2061
2073
  };
2062
- type AllSettledResult<T extends readonly Result<unknown, unknown, unknown>[]> = Result<AllValues<T>, SettledError<AllErrors<T>, AllCauses<T>>[]>;
2074
+ type AllSettledResult<T extends readonly Result<unknown, unknown, unknown>[]> = [
2075
+ AllErrors<T>
2076
+ ] extends [never] ? Ok<AllValues<T>> : Result<AllValues<T>, SettledError<AllErrors<T>, AllCauses<T>>[]>;
2063
2077
  /**
2064
2078
  * Combines multiple Results, collecting all errors instead of short-circuiting.
2065
2079
  *
package/dist/core.d.ts CHANGED
@@ -31,6 +31,8 @@ type Ok<T> = {
31
31
  * Use `err(error)` to create instances.
32
32
  *
33
33
  * @template E - The type of the error value
34
+ * @template C - The type of the cause (defaults to unknown)
35
+ * @template T - Phantom type for the success value (preserved after narrowing)
34
36
  *
35
37
  * @example
36
38
  * ```typescript
@@ -52,14 +54,7 @@ type Err<E, C = unknown> = {
52
54
  * @template E - The type of the error value (defaults to unknown)
53
55
  * @template C - The type of the cause (defaults to unknown)
54
56
  */
55
- type Result<T, E = unknown, C = unknown> = {
56
- ok: true;
57
- value: T;
58
- } | {
59
- ok: false;
60
- error: E;
61
- cause?: C;
62
- };
57
+ type Result<T, E = unknown, C = unknown> = Ok<T> | Err<E, C>;
63
58
  /**
64
59
  * A Promise that resolves to a Result.
65
60
  * Use this for asynchronous operations that might fail.
@@ -1169,7 +1164,7 @@ declare const unwrapOrElse: <T, E, C>(r: Result<T, E, C>, fn: (error: E, cause?:
1169
1164
  * // error: { ok: false, error: SyntaxError }
1170
1165
  * ```
1171
1166
  */
1172
- declare function from<T>(fn: () => T): Result<T, unknown>;
1167
+ declare function from<T>(fn: () => T): Ok<T> | Err<unknown, unknown>;
1173
1168
  /**
1174
1169
  * Wraps a synchronous throwing function in a Result with custom error mapping.
1175
1170
  *
@@ -1195,7 +1190,7 @@ declare function from<T>(fn: () => T): Result<T, unknown>;
1195
1190
  * );
1196
1191
  * ```
1197
1192
  */
1198
- declare function from<T, E>(fn: () => T, onError: (cause: unknown) => E): Result<T, E>;
1193
+ declare function from<T, E>(fn: () => T, onError: (cause: unknown) => E): Ok<T> | Err<E, unknown>;
1199
1194
  /**
1200
1195
  * Wraps a Promise in a Result, converting rejections to errors.
1201
1196
  *
@@ -1226,7 +1221,7 @@ declare function from<T, E>(fn: () => T, onError: (cause: unknown) => E): Result
1226
1221
  * // result.ok: true if fetch succeeded, false if rejected
1227
1222
  * ```
1228
1223
  */
1229
- declare function fromPromise<T>(promise: Promise<T>): AsyncResult<T, unknown>;
1224
+ declare function fromPromise<T>(promise: Promise<T>): Promise<Ok<T> | Err<unknown, unknown>>;
1230
1225
  /**
1231
1226
  * Wraps a Promise in a Result with custom error mapping.
1232
1227
  *
@@ -1255,7 +1250,7 @@ declare function fromPromise<T>(promise: Promise<T>): AsyncResult<T, unknown>;
1255
1250
  * );
1256
1251
  * ```
1257
1252
  */
1258
- declare function fromPromise<T, E>(promise: Promise<T>, onError: (cause: unknown) => E): AsyncResult<T, E>;
1253
+ declare function fromPromise<T, E>(promise: Promise<T>, onError: (cause: unknown) => E): Promise<Ok<T> | Err<E, unknown>>;
1259
1254
  /**
1260
1255
  * Wraps an async function in a Result, catching both thrown exceptions and Promise rejections.
1261
1256
  *
@@ -1393,6 +1388,8 @@ declare function fromNullable<T, E>(value: T | null | undefined, onNull: () => E
1393
1388
  * );
1394
1389
  * ```
1395
1390
  */
1391
+ declare function map<T, U>(r: Ok<T>, fn: (value: T) => U): Ok<U>;
1392
+ declare function map<T, U, E, C>(r: Err<E, C>, fn: (value: T) => U): Err<E, C>;
1396
1393
  declare function map<T, U, E, C>(r: Result<T, E, C>, fn: (value: T) => U): Result<U, E, C>;
1397
1394
  /**
1398
1395
  * Transforms the error value of a Result.
@@ -1481,6 +1478,14 @@ declare function mapError<T, E, F, C>(r: Result<T, E, C>, fn: (error: E) => F):
1481
1478
  * });
1482
1479
  * ```
1483
1480
  */
1481
+ declare function match<T, E, C, R>(r: Ok<T>, handlers: {
1482
+ ok: (value: T) => R;
1483
+ err: (error: E, cause?: C) => R;
1484
+ }): R;
1485
+ declare function match<T, E, C, R>(r: Err<E, C>, handlers: {
1486
+ ok: (value: T) => R;
1487
+ err: (error: E, cause?: C) => R;
1488
+ }): R;
1484
1489
  declare function match<T, E, C, R>(r: Result<T, E, C>, handlers: {
1485
1490
  ok: (value: T) => R;
1486
1491
  err: (error: E, cause?: C) => R;
@@ -1541,6 +1546,10 @@ declare function match<T, E, C, R>(r: Result<T, E, C>, handlers: {
1541
1546
  * // data.error: 'FETCH_ERROR' | 'NOT_FOUND'
1542
1547
  * ```
1543
1548
  */
1549
+ declare function andThen<T, U>(r: Ok<T>, fn: (value: T) => Ok<U>): Ok<U>;
1550
+ declare function andThen<T, F, C2>(r: Ok<T>, fn: (value: T) => Err<F, C2>): Err<F, C2>;
1551
+ declare function andThen<T, U, F, C2>(r: Ok<T>, fn: (value: T) => Result<U, F, C2>): Result<U, F, C2>;
1552
+ declare function andThen<T, U, E, F, C1, C2>(r: Err<E, C1>, fn: (value: T) => Result<U, F, C2>): Err<E, C1>;
1544
1553
  declare function andThen<T, U, E, F, C1, C2>(r: Result<T, E, C1>, fn: (value: T) => Result<U, F, C2>): Result<U, E | F, C1 | C2>;
1545
1554
  /**
1546
1555
  * Executes a side effect on a successful Result without changing it.
@@ -1948,14 +1957,17 @@ declare function hydrate<T, E, C = unknown>(value: unknown): Result<T, E, C> | n
1948
1957
  */
1949
1958
  declare function isSerializedResult(value: unknown): value is Result<unknown, unknown, unknown>;
1950
1959
  type AllValues<T extends readonly Result<unknown, unknown, unknown>[]> = {
1951
- [K in keyof T]: T[K] extends Result<infer V, unknown, unknown> ? V : never;
1960
+ [K in keyof T]: T[K] extends Ok<infer V> ? V : T[K] extends Err<unknown, unknown> ? never : T[K] extends Result<infer V, unknown, unknown> ? V : never;
1952
1961
  };
1953
1962
  type AllErrors<T extends readonly Result<unknown, unknown, unknown>[]> = {
1954
- [K in keyof T]: T[K] extends Result<unknown, infer E, unknown> ? E : never;
1963
+ [K in keyof T]: T[K] extends Ok<unknown> ? never : T[K] extends Err<infer E, unknown> ? E : T[K] extends Result<unknown, infer E, unknown> ? E : never;
1955
1964
  }[number];
1956
1965
  type AllCauses<T extends readonly Result<unknown, unknown, unknown>[]> = {
1957
- [K in keyof T]: T[K] extends Result<unknown, unknown, infer C> ? C : never;
1966
+ [K in keyof T]: T[K] extends Ok<unknown> ? never : T[K] extends Err<unknown, infer C> ? C : T[K] extends Result<unknown, unknown, infer C> ? C : never;
1958
1967
  }[number];
1968
+ type AllResult<T extends readonly Result<unknown, unknown, unknown>[]> = [
1969
+ AllErrors<T>
1970
+ ] extends [never] ? Ok<AllValues<T>> : Result<AllValues<T>, AllErrors<T>, AllCauses<T>>;
1959
1971
  /**
1960
1972
  * Combines multiple Results into one, requiring all to succeed.
1961
1973
  *
@@ -2003,7 +2015,7 @@ type AllCauses<T extends readonly Result<unknown, unknown, unknown>[]> = {
2003
2015
  * // data.value: [user, posts, comments] if all succeed
2004
2016
  * ```
2005
2017
  */
2006
- declare function all<const T extends readonly Result<unknown, unknown, unknown>[]>(results: T): Result<AllValues<T>, AllErrors<T>, AllCauses<T>>;
2018
+ declare function all<const T extends readonly Result<unknown, unknown, unknown>[]>(results: T): AllResult<T>;
2007
2019
  /**
2008
2020
  * Combines multiple Results or Promises of Results into one (async version of `all`).
2009
2021
  *
@@ -2059,7 +2071,9 @@ type SettledError<E, C = unknown> = {
2059
2071
  error: E;
2060
2072
  cause?: C;
2061
2073
  };
2062
- type AllSettledResult<T extends readonly Result<unknown, unknown, unknown>[]> = Result<AllValues<T>, SettledError<AllErrors<T>, AllCauses<T>>[]>;
2074
+ type AllSettledResult<T extends readonly Result<unknown, unknown, unknown>[]> = [
2075
+ AllErrors<T>
2076
+ ] extends [never] ? Ok<AllValues<T>> : Result<AllValues<T>, SettledError<AllErrors<T>, AllCauses<T>>[]>;
2063
2077
  /**
2064
2078
  * Combines multiple Results, collecting all errors instead of short-circuiting.
2065
2079
  *
package/dist/core.js CHANGED
@@ -1,2 +1,2 @@
1
- var g=e=>({ok:!0,value:e}),d=(e,t)=>({ok:!1,error:e,...t?.cause!==void 0?{cause:t.cause}:{}}),Te=e=>e.ok,ke=e=>!e.ok,se=e=>typeof e=="object"&&e!==null&&e.type==="UNEXPECTED_ERROR",F=Symbol.for("step_timeout_marker");function Q(e){return typeof e!="object"||e===null?!1:e.type==="STEP_TIMEOUT"?!0:F in e}function ue(e){if(!(typeof e!="object"||e===null)){if(e.type==="STEP_TIMEOUT"){let t=e;return{timeoutMs:t.timeoutMs,stepName:t.stepName,stepKey:t.stepKey,attempt:t.attempt}}if(F in e)return e[F]}}var te=Symbol("early-exit");function ae(e,t){return{[te]:!0,error:e,meta:t}}function ie(e){return typeof e=="object"&&e!==null&&e[te]===!0}var ne=Symbol("mapper-exception");function pe(e){return{[ne]:!0,thrown:e}}function le(e){return typeof e=="object"&&e!==null&&e[ne]===!0}function ce(e){return typeof e=="string"?{name:e}:e??{}}function q(e,t){let{backoff:n,initialDelay:a,maxDelay:f,jitter:A}=t,E;switch(n){case"fixed":E=a;break;case"linear":E=a*e;break;case"exponential":E=a*Math.pow(2,e-1);break}if(E=Math.min(E,f),A){let r=E*.25*Math.random();E=E+r}return Math.floor(E)}function G(e){return new Promise(t=>setTimeout(t,e))}var Z=Symbol("timeout");async function Ee(e,t,n){let a=new AbortController,f=t.error??{type:"STEP_TIMEOUT",stepName:n.name,stepKey:n.key,timeoutMs:t.ms,attempt:n.attempt},A,E=new Promise((I,C)=>{A=setTimeout(()=>{a.abort(),C({[Z]:!0,error:f})},t.ms)}),r;t.signal?r=Promise.resolve(e(a.signal)):r=Promise.resolve(e());try{return await Promise.race([r,E])}catch(I){if(typeof I=="object"&&I!==null&&I[Z]===!0){let C=I.error;if(typeof C=="object"&&C!==null&&C.type!=="STEP_TIMEOUT"){let L={timeoutMs:t.ms,stepName:n.name,stepKey:n.key,attempt:n.attempt};F in C?C[F]=L:Object.defineProperty(C,F,{value:L,enumerable:!1,writable:!0,configurable:!1})}throw C}throw I}finally{clearTimeout(A)}}var j={backoff:"exponential",initialDelay:100,maxDelay:3e4,jitter:!0,retryOn:()=>!0,onRetry:()=>{}};async function ee(e,t){let{onError:n,onEvent:a,catchUnexpected:f,workflowId:A,context:E}=t&&typeof t=="object"?t:{},r=A??crypto.randomUUID(),I=!n&&!f,C=[],L=0,X=s=>s??`step_${++L}`,y=s=>{let b=s.context!==void 0||E===void 0?s:{...s,context:E};if(b.type==="step_success"){let v=b.stepId;for(let D=C.length-1;D>=0;D--){let N=C[D];if(N.type==="race"&&!N.winnerId){N.winnerId=v;break}}}a?.(b,E)},O=ae,z=s=>ie(s),Y=(s,b)=>I?b?.origin==="result"?{type:"UNEXPECTED_ERROR",cause:{type:"STEP_FAILURE",origin:"result",error:s,...b.resultCause!==void 0?{cause:b.resultCause}:{}}}:b?.origin==="throw"?{type:"UNEXPECTED_ERROR",cause:{type:"STEP_FAILURE",origin:"throw",error:s,thrown:b.thrown}}:{type:"UNEXPECTED_ERROR",cause:{type:"STEP_FAILURE",origin:"result",error:s}}:s,re=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 b=function(m,p){let i=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let o=performance.now(),u=!1;C.push({scopeId:i,type:"parallel"});let x=()=>{if(u)return;u=!0;let c=C.findIndex(l=>l.scopeId===i);c!==-1&&C.splice(c,1),y({type:"scope_end",workflowId:r,scopeId:i,ts:Date.now(),durationMs:performance.now()-o})};y({type:"scope_start",workflowId:r,scopeId:i,scopeType:"parallel",name:m,ts:Date.now()});try{let c=await p();if(x(),!c.ok)throw n?.(c.error,m,E),O(c.error,{origin:"result",resultCause:c.cause});return c.value}catch(c){throw x(),c}})()},v=function(m,p){let i=Object.keys(m),o=p.name??`Parallel(${i.join(", ")})`,u=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let x=performance.now(),c=!1;C.push({scopeId:u,type:"parallel"});let l=()=>{if(c)return;c=!0;let T=C.findIndex(R=>R.scopeId===u);T!==-1&&C.splice(T,1),y({type:"scope_end",workflowId:r,scopeId:u,ts:Date.now(),durationMs:performance.now()-x})};y({type:"scope_start",workflowId:r,scopeId:u,scopeType:"parallel",name:o,ts:Date.now()});try{let T=await new Promise(h=>{if(i.length===0){h([]);return}let _=!1,S=i.length,V=new Array(i.length);for(let M=0;M<i.length;M++){let K=i[M],$=M;Promise.resolve(m[K]()).catch(k=>d({type:"PROMISE_REJECTED",cause:k},{cause:{type:"PROMISE_REJECTION",reason:k}})).then(k=>{if(!_){if(!k.ok){_=!0,h([{key:K,result:k}]);return}V[$]={key:K,result:k},S--,S===0&&h(V)}})}});l();let R={};for(let{key:h,result:_}of T){if(!_.ok)throw n?.(_.error,h,E),O(_.error,{origin:"result",resultCause:_.cause});R[h]=_.value}return R}catch(T){throw l(),T}})()};var we=b,me=v;let s=(m,p)=>(async()=>{let i=ce(p),{name:o,key:u,retry:x,timeout:c}=i,l=X(u),T=a,R=T?performance.now():0;if(!(typeof m=="function")){if(x&&x.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(c)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,x?.attempts??1),backoff:x?.backoff??j.backoff,initialDelay:x?.initialDelay??j.initialDelay,maxDelay:x?.maxDelay??j.maxDelay,jitter:x?.jitter??j.jitter,retryOn:x?.retryOn??j.retryOn,onRetry:x?.onRetry??j.onRetry};a&&y({type:"step_start",workflowId:r,stepId:l,stepKey:u,name:o,ts:Date.now()});let V;for(let k=1;k<=S.attempts;k++){let oe=T?performance.now():0;try{let w;if(typeof m=="function"?c?w=await Ee(m,c,{name:o,key:u,attempt:k}):w=await m():w=await m,w.ok){let U=performance.now()-R;return y({type:"step_success",workflowId:r,stepId:l,stepKey:u,name:o,ts:Date.now(),durationMs:U}),u&&y({type:"step_complete",workflowId:r,stepKey:u,name:o,ts:Date.now(),durationMs:U,result:w}),w.value}if(V=w,k<S.attempts&&S.retryOn(w.error,k)){let U=q(k,S);y({type:"step_retry",workflowId:r,stepId:l,stepKey:u,name:o,ts:Date.now(),attempt:k+1,maxAttempts:S.attempts,delayMs:U,error:w.error}),S.onRetry(w.error,k,U),await G(U);continue}S.attempts>1&&y({type:"step_retries_exhausted",workflowId:r,stepId:l,stepKey:u,name:o,ts:Date.now(),durationMs:performance.now()-R,attempts:k,lastError:w.error});break}catch(w){let U=performance.now()-oe;if(z(w))throw y({type:"step_aborted",workflowId:r,stepId:l,stepKey:u,name:o,ts:Date.now(),durationMs:U}),w;if(Q(w)){let P=ue(w),J=c?.ms??P?.timeoutMs??0;if(y({type:"step_timeout",workflowId:r,stepId:l,stepKey:u,name:o,ts:Date.now(),timeoutMs:J,attempt:k}),k<S.attempts&&S.retryOn(w,k)){let B=q(k,S);y({type:"step_retry",workflowId:r,stepId:l,stepKey:u,name:o,ts:Date.now(),attempt:k+1,maxAttempts:S.attempts,delayMs:B,error:w}),S.onRetry(w,k,B),await G(B);continue}S.attempts>1&&y({type:"step_retries_exhausted",workflowId:r,stepId:l,stepKey:u,name:o,ts:Date.now(),durationMs:performance.now()-R,attempts:k,lastError:w})}if(k<S.attempts&&S.retryOn(w,k)){let P=q(k,S);y({type:"step_retry",workflowId:r,stepId:l,stepKey:u,name:o,ts:Date.now(),attempt:k+1,maxAttempts:S.attempts,delayMs:P,error:w}),S.onRetry(w,k,P),await G(P);continue}S.attempts>1&&!Q(w)&&y({type:"step_retries_exhausted",workflowId:r,stepId:l,stepKey:u,name:o,ts:Date.now(),durationMs:performance.now()-R,attempts:k,lastError:w});let W=performance.now()-R;if(f){let P;try{P=f(w)}catch(J){throw pe(J)}throw y({type:"step_error",workflowId:r,stepId:l,stepKey:u,name:o,ts:Date.now(),durationMs:W,error:P}),u&&y({type:"step_complete",workflowId:r,stepKey:u,name:o,ts:Date.now(),durationMs:W,result:d(P,{cause:w}),meta:{origin:"throw",thrown:w}}),n?.(P,o,E),O(P,{origin:"throw",thrown:w})}else{let P={type:"UNEXPECTED_ERROR",cause:{type:"UNCAUGHT_EXCEPTION",thrown:w}};throw y({type:"step_error",workflowId:r,stepId:l,stepKey:u,name:o,ts:Date.now(),durationMs:W,error:P}),u&&y({type:"step_complete",workflowId:r,stepKey:u,name:o,ts:Date.now(),durationMs:W,result:d(P,{cause:w}),meta:{origin:"throw",thrown:w}}),w}}}let M=V,K=performance.now()-R,$=Y(M.error,{origin:"result",resultCause:M.cause});throw y({type:"step_error",workflowId:r,stepId:l,stepKey:u,name:o,ts:Date.now(),durationMs:K,error:$}),u&&y({type:"step_complete",workflowId:r,stepKey:u,name:o,ts:Date.now(),durationMs:K,result:M,meta:{origin:"result",resultCause:M.cause}}),n?.(M.error,o,E),O(M.error,{origin:"result",resultCause:M.cause})})();s.try=(m,p)=>{let i=p.name,o=p.key,u=X(o),x="error"in p?()=>p.error:p.onError,c=a;return(async()=>{let l=c?performance.now():0;a&&y({type:"step_start",workflowId:r,stepId:u,stepKey:o,name:i,ts:Date.now()});try{let T=await m(),R=performance.now()-l;return y({type:"step_success",workflowId:r,stepId:u,stepKey:o,name:i,ts:Date.now(),durationMs:R}),o&&y({type:"step_complete",workflowId:r,stepKey:o,name:i,ts:Date.now(),durationMs:R,result:g(T)}),T}catch(T){let R=x(T),h=performance.now()-l,_=Y(R,{origin:"throw",thrown:T});throw y({type:"step_error",workflowId:r,stepId:u,stepKey:o,name:i,ts:Date.now(),durationMs:h,error:_}),o&&y({type:"step_complete",workflowId:r,stepKey:o,name:i,ts:Date.now(),durationMs:h,result:d(R,{cause:T}),meta:{origin:"throw",thrown:T}}),n?.(R,i,E),O(R,{origin:"throw",thrown:T})}})()},s.fromResult=(m,p)=>{let i=p.name,o=p.key,u=X(o),x="error"in p?()=>p.error:p.onError,c=a;return(async()=>{let l=c?performance.now():0;a&&y({type:"step_start",workflowId:r,stepId:u,stepKey:o,name:i,ts:Date.now()});let T=await m();if(T.ok){let R=performance.now()-l;return y({type:"step_success",workflowId:r,stepId:u,stepKey:o,name:i,ts:Date.now(),durationMs:R}),o&&y({type:"step_complete",workflowId:r,stepKey:o,name:i,ts:Date.now(),durationMs:R,result:g(T.value)}),T.value}else{let R=x(T.error),h=performance.now()-l,_=Y(R,{origin:"result",resultCause:T.error});throw y({type:"step_error",workflowId:r,stepId:u,stepKey:o,name:i,ts:Date.now(),durationMs:h,error:_}),o&&y({type:"step_complete",workflowId:r,stepKey:o,name:i,ts:Date.now(),durationMs:h,result:d(R,{cause:T.error}),meta:{origin:"result",resultCause:T.error}}),n?.(R,i,E),O(R,{origin:"result",resultCause:T.error})}})()},s.retry=(m,p)=>s(m,{name:p.name,key:p.key,retry:{attempts:p.attempts,backoff:p.backoff,initialDelay:p.initialDelay,maxDelay:p.maxDelay,jitter:p.jitter,retryOn:p.retryOn,onRetry:p.onRetry},timeout:p.timeout}),s.withTimeout=(m,p)=>s(m,{name:p.name,key:p.key,timeout:p}),s.parallel=((...m)=>{if(typeof m[0]=="string"){let p=m[0],i=m[1];return b(p,i)}else{let p=m[0],i=m[1]??{};return v(p,i)}}),s.race=(m,p)=>{let i=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let o=performance.now(),u=!1,x={scopeId:i,type:"race",winnerId:void 0};C.push(x);let c=()=>{if(u)return;u=!0;let l=C.findIndex(T=>T.scopeId===i);l!==-1&&C.splice(l,1),y({type:"scope_end",workflowId:r,scopeId:i,ts:Date.now(),durationMs:performance.now()-o,winnerId:x.winnerId})};y({type:"scope_start",workflowId:r,scopeId:i,scopeType:"race",name:m,ts:Date.now()});try{let l=await p();if(c(),!l.ok)throw n?.(l.error,m,E),O(l.error,{origin:"result",resultCause:l.cause});return l.value}catch(l){throw c(),l}})()},s.allSettled=(m,p)=>{let i=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let o=performance.now(),u=!1;C.push({scopeId:i,type:"allSettled"});let x=()=>{if(u)return;u=!0;let c=C.findIndex(l=>l.scopeId===i);c!==-1&&C.splice(c,1),y({type:"scope_end",workflowId:r,scopeId:i,ts:Date.now(),durationMs:performance.now()-o})};y({type:"scope_start",workflowId:r,scopeId:i,scopeType:"allSettled",name:m,ts:Date.now()});try{let c=await p();if(x(),!c.ok)throw n?.(c.error,m,E),O(c.error,{origin:"result",resultCause:c.cause});return c.value}catch(c){throw x(),c}})()};let N=await e(s);return g(N)}catch(s){if(le(s))throw s.thrown;if(z(s)){let v=s.meta.origin==="throw"?s.meta.thrown:s.meta.resultCause;if(f||n)return d(s.error,{cause:v});if(se(s.error))return d(s.error,{cause:v});let D=re(s);return d(D,{cause:v})}if(f){let v=f(s);return n?.(v,"unexpected",E),d(v,{cause:s})}let b={type:"UNEXPECTED_ERROR",cause:{type:"UNCAUGHT_EXCEPTION",thrown:s}};return n?.(b,"unexpected",E),d(b,{cause:s})}}ee.strict=(e,t)=>ee(e,t);var H=class extends Error{constructor(n,a){super(`Unwrap called on an error result: ${String(n)}`);this.error=n;this.cause=a;this.name="UnwrapError"}},de=e=>{if(e.ok)return e.value;throw new H(e.error,e.cause)},fe=(e,t)=>e.ok?e.value:t,Re=(e,t)=>e.ok?e.value:t(e.error,e.cause);function Ce(e,t){try{return g(e())}catch(n){return t?d(t(n),{cause:n}):d(n)}}async function xe(e,t){try{return g(await e)}catch(n){return t?d(t(n),{cause:n}):d(n)}}async function Se(e,t){try{return g(await e())}catch(n){return t?d(t(n),{cause:n}):d(n)}}function ge(e,t){return e!=null?g(e):d(t())}function Ae(e,t){return e.ok?g(t(e.value)):e}function be(e,t){return e.ok?e:d(t(e.error),{cause:e.cause})}function Pe(e,t){return e.ok?t.ok(e.value):t.err(e.error,e.cause)}function he(e,t){return e.ok?t(e.value):e}function _e(e,t){return e.ok&&t(e.value),e}function Me(e,t){return e.ok||t(e.error,e.cause),e}function ve(e,t,n){if(!e.ok)return e;try{return g(t(e.value))}catch(a){return d(n(a),{cause:a})}}function Ie(e,t,n){if(e.ok)return e;try{return d(t(e.error),{cause:e.cause})}catch(a){return d(n(a),{cause:a})}}function Oe(e,t,n){return e.ok?g(t(e.value)):d(n(e.error),{cause:e.cause})}function Ue(e,t){return e.ok?e:t(e.error,e.cause)}async function De(e,t){let n=await e;return n.ok?n:t(n.error,n.cause)}function Ke(e,t){return e.ok?g(e.value):g(t(e.error,e.cause))}async function je(e,t){let n=await e;return n.ok?g(n.value):g(await t(n.error,n.cause))}function ye(e){return e!==null&&typeof e=="object"&&"ok"in e&&typeof e.ok=="boolean"&&(e.ok===!0&&"value"in e||e.ok===!1&&"error"in e)?e:null}function Fe(e){return ye(e)!==null}function Ne(e){let t=[];for(let n of e){if(!n.ok)return n;t.push(n.value)}return g(t)}async function Ve(e){return e.length===0?g([]):new Promise(t=>{let n=!1,a=e.length,f=new Array(e.length);for(let A=0;A<e.length;A++){let E=A;Promise.resolve(e[E]).catch(r=>d({type:"PROMISE_REJECTED",cause:r},{cause:{type:"PROMISE_REJECTION",reason:r}})).then(r=>{if(!n){if(!r.ok){n=!0,t(r);return}f[E]=r.value,a--,a===0&&t(g(f))}})}})}function Le(e){let t=[],n=[];for(let a of e)a.ok?t.push(a.value):n.push({error:a.error,cause:a.cause});return n.length>0?d(n):g(t)}function We(e){let t=[],n=[];for(let a of e)a.ok?t.push(a.value):n.push(a.error);return{values:t,errors:n}}function Xe(e){if(e.length===0)return d({type:"EMPTY_INPUT",message:"any() requires at least one Result"});let t=null;for(let n of e){if(n.ok)return n;t||(t=n)}return t}async function Ye(e){return e.length===0?d({type:"EMPTY_INPUT",message:"anyAsync() requires at least one Result"}):new Promise(t=>{let n=!1,a=e.length,f=null;for(let A of e)Promise.resolve(A).catch(E=>d({type:"PROMISE_REJECTED",cause:E},{cause:{type:"PROMISE_REJECTION",reason:E}})).then(E=>{if(!n){if(E.ok){n=!0,t(E);return}f||(f=E),a--,a===0&&t(f)}})})}async function $e(e){let t=await Promise.all(e.map(f=>Promise.resolve(f).then(A=>({status:"result",result:A})).catch(A=>({status:"rejected",error:{type:"PROMISE_REJECTED",cause:A},cause:{type:"PROMISE_REJECTION",reason:A}})))),n=[],a=[];for(let f of t)f.status==="rejected"?a.push({error:f.error,cause:f.cause}):f.result.ok?n.push(f.result.value):a.push({error:f.result.error,cause:f.result.cause});return a.length>0?d(a):g(n)}export{te as EARLY_EXIT_SYMBOL,F as STEP_TIMEOUT_MARKER,H as UnwrapError,Ne as all,Ve as allAsync,Le as allSettled,$e as allSettledAsync,he as andThen,Xe as any,Ye as anyAsync,Oe as bimap,ae as createEarlyExit,d as err,Ce as from,ge as fromNullable,xe as fromPromise,ue as getStepTimeoutMeta,ye as hydrate,ie as isEarlyExit,ke as isErr,Te as isOk,Fe as isSerializedResult,Q as isStepTimeoutError,se as isUnexpectedError,Ae as map,be as mapError,Ie as mapErrorTry,ve as mapTry,Pe as match,g as ok,Ue as orElse,De as orElseAsync,We as partition,Ke as recover,je as recoverAsync,ee as run,_e as tap,Me as tapError,Se as tryAsync,de as unwrap,fe as unwrapOr,Re as unwrapOrElse};
1
+ var g=e=>({ok:!0,value:e}),d=(e,n)=>({ok:!1,error:e,...n?.cause!==void 0?{cause:n.cause}:{}}),Te=e=>e.ok,ke=e=>!e.ok,se=e=>typeof e=="object"&&e!==null&&e.type==="UNEXPECTED_ERROR",j=Symbol.for("step_timeout_marker");function Q(e){return typeof e!="object"||e===null?!1:e.type==="STEP_TIMEOUT"?!0:j in e}function ue(e){if(!(typeof e!="object"||e===null)){if(e.type==="STEP_TIMEOUT"){let n=e;return{timeoutMs:n.timeoutMs,stepName:n.stepName,stepKey:n.stepKey,attempt:n.attempt}}if(j in e)return e[j]}}var ne=Symbol("early-exit");function ae(e,n){return{[ne]:!0,error:e,meta:n}}function ie(e){return typeof e=="object"&&e!==null&&e[ne]===!0}var te=Symbol("mapper-exception");function pe(e){return{[te]:!0,thrown:e}}function le(e){return typeof e=="object"&&e!==null&&e[te]===!0}function ce(e){return typeof e=="string"?{name:e}:e??{}}function q(e,n){let{backoff:t,initialDelay:a,maxDelay:f,jitter:A}=n,E;switch(t){case"fixed":E=a;break;case"linear":E=a*e;break;case"exponential":E=a*Math.pow(2,e-1);break}if(E=Math.min(E,f),A){let r=E*.25*Math.random();E=E+r}return Math.floor(E)}function G(e){return new Promise(n=>setTimeout(n,e))}var Z=Symbol("timeout");async function Ee(e,n,t){let a=new AbortController,f=n.error??{type:"STEP_TIMEOUT",stepName:t.name,stepKey:t.key,timeoutMs:n.ms,attempt:t.attempt},A,E=new Promise((O,C)=>{A=setTimeout(()=>{a.abort(),C({[Z]:!0,error:f})},n.ms)}),r;n.signal?r=Promise.resolve(e(a.signal)):r=Promise.resolve(e());try{return await Promise.race([r,E])}catch(O){if(typeof O=="object"&&O!==null&&O[Z]===!0){let C=O.error;if(typeof C=="object"&&C!==null&&C.type!=="STEP_TIMEOUT"){let L={timeoutMs:n.ms,stepName:t.name,stepKey:t.key,attempt:t.attempt};j in C?C[j]=L:Object.defineProperty(C,j,{value:L,enumerable:!1,writable:!0,configurable:!1})}throw C}throw O}finally{clearTimeout(A)}}var F={backoff:"exponential",initialDelay:100,maxDelay:3e4,jitter:!0,retryOn:()=>!0,onRetry:()=>{}};async function ee(e,n){let{onError:t,onEvent:a,catchUnexpected:f,workflowId:A,context:E}=n&&typeof n=="object"?n:{},r=A??crypto.randomUUID(),O=!t&&!f,C=[],L=0,X=s=>s??`step_${++L}`,y=s=>{let h=s.context!==void 0||E===void 0?s:{...s,context:E};if(h.type==="step_success"){let M=h.stepId;for(let D=C.length-1;D>=0;D--){let N=C[D];if(N.type==="race"&&!N.winnerId){N.winnerId=M;break}}}a?.(h,E)},I=ae,z=s=>ie(s),Y=(s,h)=>O?h?.origin==="result"?{type:"UNEXPECTED_ERROR",cause:{type:"STEP_FAILURE",origin:"result",error:s,...h.resultCause!==void 0?{cause:h.resultCause}:{}}}:h?.origin==="throw"?{type:"UNEXPECTED_ERROR",cause:{type:"STEP_FAILURE",origin:"throw",error:s,thrown:h.thrown}}:{type:"UNEXPECTED_ERROR",cause:{type:"STEP_FAILURE",origin:"result",error:s}}:s,re=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 h=function(m,p){let i=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let o=performance.now(),u=!1;C.push({scopeId:i,type:"parallel"});let x=()=>{if(u)return;u=!0;let c=C.findIndex(l=>l.scopeId===i);c!==-1&&C.splice(c,1),y({type:"scope_end",workflowId:r,scopeId:i,ts:Date.now(),durationMs:performance.now()-o})};y({type:"scope_start",workflowId:r,scopeId:i,scopeType:"parallel",name:m,ts:Date.now()});try{let c=await p();if(x(),!c.ok)throw t?.(c.error,m,E),I(c.error,{origin:"result",resultCause:c.cause});return c.value}catch(c){throw x(),c}})()},M=function(m,p){let i=Object.keys(m),o=p.name??`Parallel(${i.join(", ")})`,u=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let x=performance.now(),c=!1;C.push({scopeId:u,type:"parallel"});let l=()=>{if(c)return;c=!0;let T=C.findIndex(R=>R.scopeId===u);T!==-1&&C.splice(T,1),y({type:"scope_end",workflowId:r,scopeId:u,ts:Date.now(),durationMs:performance.now()-x})};y({type:"scope_start",workflowId:r,scopeId:u,scopeType:"parallel",name:o,ts:Date.now()});try{let T=await new Promise(P=>{if(i.length===0){P([]);return}let _=!1,S=i.length,V=new Array(i.length);for(let v=0;v<i.length;v++){let K=i[v],$=v;Promise.resolve(m[K]()).catch(k=>d({type:"PROMISE_REJECTED",cause:k},{cause:{type:"PROMISE_REJECTION",reason:k}})).then(k=>{if(!_){if(!k.ok){_=!0,P([{key:K,result:k}]);return}V[$]={key:K,result:k},S--,S===0&&P(V)}})}});l();let R={};for(let{key:P,result:_}of T){if(!_.ok)throw t?.(_.error,P,E),I(_.error,{origin:"result",resultCause:_.cause});R[P]=_.value}return R}catch(T){throw l(),T}})()};var we=h,me=M;let s=(m,p)=>(async()=>{let i=ce(p),{name:o,key:u,retry:x,timeout:c}=i,l=X(u),T=a,R=T?performance.now():0;if(!(typeof m=="function")){if(x&&x.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(c)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,x?.attempts??1),backoff:x?.backoff??F.backoff,initialDelay:x?.initialDelay??F.initialDelay,maxDelay:x?.maxDelay??F.maxDelay,jitter:x?.jitter??F.jitter,retryOn:x?.retryOn??F.retryOn,onRetry:x?.onRetry??F.onRetry};a&&y({type:"step_start",workflowId:r,stepId:l,stepKey:u,name:o,ts:Date.now()});let V;for(let k=1;k<=S.attempts;k++){let oe=T?performance.now():0;try{let w;if(typeof m=="function"?c?w=await Ee(m,c,{name:o,key:u,attempt:k}):w=await m():w=await m,w.ok){let U=performance.now()-R;return y({type:"step_success",workflowId:r,stepId:l,stepKey:u,name:o,ts:Date.now(),durationMs:U}),u&&y({type:"step_complete",workflowId:r,stepKey:u,name:o,ts:Date.now(),durationMs:U,result:w}),w.value}if(V=w,k<S.attempts&&S.retryOn(w.error,k)){let U=q(k,S);y({type:"step_retry",workflowId:r,stepId:l,stepKey:u,name:o,ts:Date.now(),attempt:k+1,maxAttempts:S.attempts,delayMs:U,error:w.error}),S.onRetry(w.error,k,U),await G(U);continue}S.attempts>1&&y({type:"step_retries_exhausted",workflowId:r,stepId:l,stepKey:u,name:o,ts:Date.now(),durationMs:performance.now()-R,attempts:k,lastError:w.error});break}catch(w){let U=performance.now()-oe;if(z(w))throw y({type:"step_aborted",workflowId:r,stepId:l,stepKey:u,name:o,ts:Date.now(),durationMs:U}),w;if(Q(w)){let b=ue(w),J=c?.ms??b?.timeoutMs??0;if(y({type:"step_timeout",workflowId:r,stepId:l,stepKey:u,name:o,ts:Date.now(),timeoutMs:J,attempt:k}),k<S.attempts&&S.retryOn(w,k)){let B=q(k,S);y({type:"step_retry",workflowId:r,stepId:l,stepKey:u,name:o,ts:Date.now(),attempt:k+1,maxAttempts:S.attempts,delayMs:B,error:w}),S.onRetry(w,k,B),await G(B);continue}S.attempts>1&&y({type:"step_retries_exhausted",workflowId:r,stepId:l,stepKey:u,name:o,ts:Date.now(),durationMs:performance.now()-R,attempts:k,lastError:w})}if(k<S.attempts&&S.retryOn(w,k)){let b=q(k,S);y({type:"step_retry",workflowId:r,stepId:l,stepKey:u,name:o,ts:Date.now(),attempt:k+1,maxAttempts:S.attempts,delayMs:b,error:w}),S.onRetry(w,k,b),await G(b);continue}S.attempts>1&&!Q(w)&&y({type:"step_retries_exhausted",workflowId:r,stepId:l,stepKey:u,name:o,ts:Date.now(),durationMs:performance.now()-R,attempts:k,lastError:w});let W=performance.now()-R;if(f){let b;try{b=f(w)}catch(J){throw pe(J)}throw y({type:"step_error",workflowId:r,stepId:l,stepKey:u,name:o,ts:Date.now(),durationMs:W,error:b}),u&&y({type:"step_complete",workflowId:r,stepKey:u,name:o,ts:Date.now(),durationMs:W,result:d(b,{cause:w}),meta:{origin:"throw",thrown:w}}),t?.(b,o,E),I(b,{origin:"throw",thrown:w})}else{let b={type:"UNEXPECTED_ERROR",cause:{type:"UNCAUGHT_EXCEPTION",thrown:w}};throw y({type:"step_error",workflowId:r,stepId:l,stepKey:u,name:o,ts:Date.now(),durationMs:W,error:b}),u&&y({type:"step_complete",workflowId:r,stepKey:u,name:o,ts:Date.now(),durationMs:W,result:d(b,{cause:w}),meta:{origin:"throw",thrown:w}}),w}}}let v=V,K=performance.now()-R,$=Y(v.error,{origin:"result",resultCause:v.cause});throw y({type:"step_error",workflowId:r,stepId:l,stepKey:u,name:o,ts:Date.now(),durationMs:K,error:$}),u&&y({type:"step_complete",workflowId:r,stepKey:u,name:o,ts:Date.now(),durationMs:K,result:v,meta:{origin:"result",resultCause:v.cause}}),t?.(v.error,o,E),I(v.error,{origin:"result",resultCause:v.cause})})();s.try=(m,p)=>{let i=p.name,o=p.key,u=X(o),x="error"in p?()=>p.error:p.onError,c=a;return(async()=>{let l=c?performance.now():0;a&&y({type:"step_start",workflowId:r,stepId:u,stepKey:o,name:i,ts:Date.now()});try{let T=await m(),R=performance.now()-l;return y({type:"step_success",workflowId:r,stepId:u,stepKey:o,name:i,ts:Date.now(),durationMs:R}),o&&y({type:"step_complete",workflowId:r,stepKey:o,name:i,ts:Date.now(),durationMs:R,result:g(T)}),T}catch(T){let R=x(T),P=performance.now()-l,_=Y(R,{origin:"throw",thrown:T});throw y({type:"step_error",workflowId:r,stepId:u,stepKey:o,name:i,ts:Date.now(),durationMs:P,error:_}),o&&y({type:"step_complete",workflowId:r,stepKey:o,name:i,ts:Date.now(),durationMs:P,result:d(R,{cause:T}),meta:{origin:"throw",thrown:T}}),t?.(R,i,E),I(R,{origin:"throw",thrown:T})}})()},s.fromResult=(m,p)=>{let i=p.name,o=p.key,u=X(o),x="error"in p?()=>p.error:p.onError,c=a;return(async()=>{let l=c?performance.now():0;a&&y({type:"step_start",workflowId:r,stepId:u,stepKey:o,name:i,ts:Date.now()});let T=await m();if(T.ok){let R=performance.now()-l;return y({type:"step_success",workflowId:r,stepId:u,stepKey:o,name:i,ts:Date.now(),durationMs:R}),o&&y({type:"step_complete",workflowId:r,stepKey:o,name:i,ts:Date.now(),durationMs:R,result:g(T.value)}),T.value}else{let R=x(T.error),P=performance.now()-l,_=Y(R,{origin:"result",resultCause:T.error});throw y({type:"step_error",workflowId:r,stepId:u,stepKey:o,name:i,ts:Date.now(),durationMs:P,error:_}),o&&y({type:"step_complete",workflowId:r,stepKey:o,name:i,ts:Date.now(),durationMs:P,result:d(R,{cause:T.error}),meta:{origin:"result",resultCause:T.error}}),t?.(R,i,E),I(R,{origin:"result",resultCause:T.error})}})()},s.retry=(m,p)=>s(m,{name:p.name,key:p.key,retry:{attempts:p.attempts,backoff:p.backoff,initialDelay:p.initialDelay,maxDelay:p.maxDelay,jitter:p.jitter,retryOn:p.retryOn,onRetry:p.onRetry},timeout:p.timeout}),s.withTimeout=(m,p)=>s(m,{name:p.name,key:p.key,timeout:p}),s.parallel=((...m)=>{if(typeof m[0]=="string"){let p=m[0],i=m[1];return h(p,i)}else{let p=m[0],i=m[1]??{};return M(p,i)}}),s.race=(m,p)=>{let i=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let o=performance.now(),u=!1,x={scopeId:i,type:"race",winnerId:void 0};C.push(x);let c=()=>{if(u)return;u=!0;let l=C.findIndex(T=>T.scopeId===i);l!==-1&&C.splice(l,1),y({type:"scope_end",workflowId:r,scopeId:i,ts:Date.now(),durationMs:performance.now()-o,winnerId:x.winnerId})};y({type:"scope_start",workflowId:r,scopeId:i,scopeType:"race",name:m,ts:Date.now()});try{let l=await p();if(c(),!l.ok)throw t?.(l.error,m,E),I(l.error,{origin:"result",resultCause:l.cause});return l.value}catch(l){throw c(),l}})()},s.allSettled=(m,p)=>{let i=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let o=performance.now(),u=!1;C.push({scopeId:i,type:"allSettled"});let x=()=>{if(u)return;u=!0;let c=C.findIndex(l=>l.scopeId===i);c!==-1&&C.splice(c,1),y({type:"scope_end",workflowId:r,scopeId:i,ts:Date.now(),durationMs:performance.now()-o})};y({type:"scope_start",workflowId:r,scopeId:i,scopeType:"allSettled",name:m,ts:Date.now()});try{let c=await p();if(x(),!c.ok)throw t?.(c.error,m,E),I(c.error,{origin:"result",resultCause:c.cause});return c.value}catch(c){throw x(),c}})()};let N=await e(s);return g(N)}catch(s){if(le(s))throw s.thrown;if(z(s)){let M=s.meta.origin==="throw"?s.meta.thrown:s.meta.resultCause;if(f||t)return d(s.error,{cause:M});if(se(s.error))return d(s.error,{cause:M});let D=re(s);return d(D,{cause:M})}if(f){let M=f(s);return t?.(M,"unexpected",E),d(M,{cause:s})}let h={type:"UNEXPECTED_ERROR",cause:{type:"UNCAUGHT_EXCEPTION",thrown:s}};return t?.(h,"unexpected",E),d(h,{cause:s})}}ee.strict=(e,n)=>ee(e,n);var H=class extends Error{constructor(t,a){super(`Unwrap called on an error result: ${String(t)}`);this.error=t;this.cause=a;this.name="UnwrapError"}},de=e=>{if(e.ok)return e.value;throw new H(e.error,e.cause)},fe=(e,n)=>e.ok?e.value:n,Re=(e,n)=>e.ok?e.value:n(e.error,e.cause);function Ce(e,n){try{return g(e())}catch(t){return n?d(n(t),{cause:t}):d(t)}}async function xe(e,n){try{return g(await e)}catch(t){return n?d(n(t),{cause:t}):d(t)}}async function Se(e,n){try{return g(await e())}catch(t){return n?d(n(t),{cause:t}):d(t)}}function ge(e,n){return e!=null?g(e):d(n())}function Ae(e,n){return e.ok?g(n(e.value)):e}function he(e,n){return e.ok?e:d(n(e.error),{cause:e.cause})}function be(e,n){return e.ok?n.ok(e.value):n.err(e.error,e.cause)}function Pe(e,n){return e.ok?n(e.value):e}function _e(e,n){return e.ok&&n(e.value),e}function ve(e,n){return e.ok||n(e.error,e.cause),e}function Me(e,n,t){if(!e.ok)return e;try{return g(n(e.value))}catch(a){return d(t(a),{cause:a})}}function Oe(e,n,t){if(e.ok)return e;try{return d(n(e.error),{cause:e.cause})}catch(a){return d(t(a),{cause:a})}}function Ie(e,n,t){return e.ok?g(n(e.value)):d(t(e.error),{cause:e.cause})}function Ue(e,n){return e.ok?e:n(e.error,e.cause)}async function De(e,n){let t=await e;return t.ok?t:n(t.error,t.cause)}function Ke(e,n){return e.ok?g(e.value):g(n(e.error,e.cause))}async function Fe(e,n){let t=await e;return t.ok?g(t.value):g(await n(t.error,t.cause))}function ye(e){return e!==null&&typeof e=="object"&&"ok"in e&&typeof e.ok=="boolean"&&(e.ok===!0&&"value"in e||e.ok===!1&&"error"in e)?e:null}function je(e){return ye(e)!==null}function Ne(e){let n=[];for(let t of e){if(!t.ok)return t;n.push(t.value)}return g(n)}async function Ve(e){return e.length===0?g([]):new Promise(n=>{let t=!1,a=e.length,f=new Array(e.length);for(let A=0;A<e.length;A++){let E=A;Promise.resolve(e[E]).catch(r=>d({type:"PROMISE_REJECTED",cause:r},{cause:{type:"PROMISE_REJECTION",reason:r}})).then(r=>{if(!t){if(!r.ok){t=!0,n(r);return}f[E]=r.value,a--,a===0&&n(g(f))}})}})}function Le(e){let n=[],t=[];for(let a of e)a.ok?n.push(a.value):t.push({error:a.error,cause:a.cause});return t.length>0?d(t):g(n)}function We(e){let n=[],t=[];for(let a of e)a.ok?n.push(a.value):t.push(a.error);return{values:n,errors:t}}function Xe(e){if(e.length===0)return d({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 Ye(e){return e.length===0?d({type:"EMPTY_INPUT",message:"anyAsync() requires at least one Result"}):new Promise(n=>{let t=!1,a=e.length,f=null;for(let A of e)Promise.resolve(A).catch(E=>d({type:"PROMISE_REJECTED",cause:E},{cause:{type:"PROMISE_REJECTION",reason:E}})).then(E=>{if(!t){if(E.ok){t=!0,n(E);return}f||(f=E),a--,a===0&&n(f)}})})}async function $e(e){let n=await Promise.all(e.map(f=>Promise.resolve(f).then(A=>({status:"result",result:A})).catch(A=>({status:"rejected",error:{type:"PROMISE_REJECTED",cause:A},cause:{type:"PROMISE_REJECTION",reason:A}})))),t=[],a=[];for(let f of n)f.status==="rejected"?a.push({error:f.error,cause:f.cause}):f.result.ok?t.push(f.result.value):a.push({error:f.result.error,cause:f.result.cause});return a.length>0?d(a):g(t)}export{ne as EARLY_EXIT_SYMBOL,j as STEP_TIMEOUT_MARKER,H as UnwrapError,Ne as all,Ve as allAsync,Le as allSettled,$e as allSettledAsync,Pe as andThen,Xe as any,Ye as anyAsync,Ie as bimap,ae as createEarlyExit,d as err,Ce as from,ge as fromNullable,xe as fromPromise,ue as getStepTimeoutMeta,ye as hydrate,ie as isEarlyExit,ke as isErr,Te as isOk,je as isSerializedResult,Q as isStepTimeoutError,se as isUnexpectedError,Ae as map,he as mapError,Oe as mapErrorTry,Me as mapTry,be as match,g as ok,Ue as orElse,De as orElseAsync,We as partition,Ke as recover,Fe as recoverAsync,ee as run,_e as tap,ve as tapError,Se as tryAsync,de as unwrap,fe as unwrapOr,Re as unwrapOrElse};
2
2
  //# sourceMappingURL=core.js.map