@jagreehal/workflow 1.5.0 → 1.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/core.d.cts CHANGED
@@ -1605,6 +1605,184 @@ declare function mapTry<T, U, E, F, C>(result: Result<T, E, C>, transform: (valu
1605
1605
  * ```
1606
1606
  */
1607
1607
  declare function mapErrorTry<T, E, F, G, C>(result: Result<T, E, C>, transform: (error: E) => F, onError: (cause: unknown) => G): Result<T, F | G, C | unknown>;
1608
+ /**
1609
+ * Transforms both the success value and error value of a Result simultaneously.
1610
+ *
1611
+ * ## When to Use
1612
+ *
1613
+ * Use `bimap()` when:
1614
+ * - You need to transform both success and error in one operation
1615
+ * - You're normalizing Results to a common format
1616
+ * - You want symmetric transformation of both cases
1617
+ * - You're building adapters between different Result types
1618
+ *
1619
+ * ## Why Use This Instead of `map` + `mapError`
1620
+ *
1621
+ * - **Single operation**: Transforms both cases in one call
1622
+ * - **Clearer intent**: Shows you're handling both cases symmetrically
1623
+ * - **Less code**: Avoids chaining map and mapError
1624
+ *
1625
+ * @param r - The Result to transform
1626
+ * @param onOk - Function that transforms the success value
1627
+ * @param onErr - Function that transforms the error value
1628
+ * @returns A new Result with transformed value or transformed error
1629
+ *
1630
+ * @example
1631
+ * ```typescript
1632
+ * // Normalize to API response format
1633
+ * const response = bimap(
1634
+ * fetchUser(id),
1635
+ * user => ({ status: 'success', data: user }),
1636
+ * error => ({ status: 'error', code: error })
1637
+ * );
1638
+ *
1639
+ * // Transform types
1640
+ * const stringified = bimap(
1641
+ * parseNumber(input),
1642
+ * n => `Value: ${n}`,
1643
+ * e => `Error: ${e}`
1644
+ * );
1645
+ *
1646
+ * // Adapt between error types
1647
+ * const adapted = bimap(
1648
+ * externalResult,
1649
+ * value => internalValue(value),
1650
+ * error => internalError(error)
1651
+ * );
1652
+ * ```
1653
+ */
1654
+ declare function bimap<T, U, E, F, C>(r: Result<T, E, C>, onOk: (value: T) => U, onErr: (error: E) => F): Result<U, F, C>;
1655
+ /**
1656
+ * Recovers from an error by returning a new Result.
1657
+ * Similar to neverthrow's `.orElse()`.
1658
+ *
1659
+ * ## When to Use
1660
+ *
1661
+ * Use `orElse()` when:
1662
+ * - You want to recover from errors with fallback operations
1663
+ * - The recovery might also fail (returns a Result)
1664
+ * - You need to chain fallback strategies
1665
+ * - You're implementing retry or fallback patterns
1666
+ *
1667
+ * ## Why Use This
1668
+ *
1669
+ * - **Fallback chains**: Try alternative operations on failure
1670
+ * - **Error recovery**: Convert errors to success with fallback values
1671
+ * - **Composable**: Can chain multiple orElse calls for cascading fallbacks
1672
+ * - **Type-safe**: TypeScript tracks the error union through recovery
1673
+ *
1674
+ * @param r - The Result to potentially recover from
1675
+ * @param fn - Function that takes the error and returns a new Result (may succeed or fail)
1676
+ * @returns The original Result if successful, or the result of the recovery function
1677
+ *
1678
+ * @example
1679
+ * ```typescript
1680
+ * // Fallback to default user
1681
+ * const user = orElse(
1682
+ * fetchUser(id),
1683
+ * error => error === 'NOT_FOUND' ? ok(defaultUser) : err(error)
1684
+ * );
1685
+ *
1686
+ * // Try cache, then database, then fail
1687
+ * const data = orElse(
1688
+ * orElse(
1689
+ * fetchFromCache(key),
1690
+ * () => fetchFromDatabase(key)
1691
+ * ),
1692
+ * () => err('DATA_UNAVAILABLE' as const)
1693
+ * );
1694
+ *
1695
+ * // Convert specific errors to success
1696
+ * const result = orElse(
1697
+ * riskyOperation(),
1698
+ * error => error.code === 'RETRY' ? ok(defaultValue) : err(error)
1699
+ * );
1700
+ * ```
1701
+ */
1702
+ declare function orElse<T, E, E2, C, C2>(r: Result<T, E, C>, fn: (error: E, cause?: C) => Result<T, E2, C2>): Result<T, E2, C2>;
1703
+ /**
1704
+ * Async version of orElse for recovering from errors with async operations.
1705
+ *
1706
+ * @param r - The Result or AsyncResult to potentially recover from
1707
+ * @param fn - Async function that takes the error and returns a new Result
1708
+ * @returns Promise of the original Result if successful, or the result of the recovery function
1709
+ *
1710
+ * @example
1711
+ * ```typescript
1712
+ * // Try primary API, fall back to secondary
1713
+ * const data = await orElseAsync(
1714
+ * await fetchFromPrimaryApi(),
1715
+ * async (error) => {
1716
+ * if (error === 'UNAVAILABLE') {
1717
+ * return await fetchFromSecondaryApi();
1718
+ * }
1719
+ * return err(error);
1720
+ * }
1721
+ * );
1722
+ * ```
1723
+ */
1724
+ declare function orElseAsync<T, E, E2, C, C2>(r: Result<T, E, C> | Promise<Result<T, E, C>>, fn: (error: E, cause?: C) => Result<T, E2, C2> | Promise<Result<T, E2, C2>>): Promise<Result<T, E2, C2>>;
1725
+ /**
1726
+ * Recovers from an error by returning a plain value (not a Result).
1727
+ * Useful when you want to provide a default value on error.
1728
+ *
1729
+ * ## When to Use
1730
+ *
1731
+ * Use `recover()` when:
1732
+ * - You want to provide a fallback value on error
1733
+ * - Recovery cannot fail (unlike orElse which returns a Result)
1734
+ * - You're implementing default value patterns
1735
+ * - You want to guarantee a successful Result
1736
+ *
1737
+ * ## Why Use This Instead of `orElse`
1738
+ *
1739
+ * - **Simpler**: Recovery function returns plain value, not Result
1740
+ * - **Guaranteed success**: Always returns ok() after recovery
1741
+ * - **Clearer intent**: Shows recovery cannot fail
1742
+ *
1743
+ * @param r - The Result to potentially recover from
1744
+ * @param fn - Function that takes the error and returns a recovery value
1745
+ * @returns The original Result if successful, or ok(recoveryValue) if error
1746
+ *
1747
+ * @example
1748
+ * ```typescript
1749
+ * // Provide default user on NOT_FOUND
1750
+ * const user = recover(
1751
+ * fetchUser(id),
1752
+ * error => error === 'NOT_FOUND' ? defaultUser : guestUser
1753
+ * );
1754
+ *
1755
+ * // Convert all errors to default
1756
+ * const config = recover(
1757
+ * loadConfig(),
1758
+ * () => defaultConfig
1759
+ * );
1760
+ *
1761
+ * // Recover with error-based defaults
1762
+ * const value = recover(
1763
+ * parseNumber(input),
1764
+ * error => error === 'EMPTY' ? 0 : -1
1765
+ * );
1766
+ * ```
1767
+ */
1768
+ declare function recover<T, E, C>(r: Result<T, E, C>, fn: (error: E, cause?: C) => T): Result<T, never, never>;
1769
+ /**
1770
+ * Async version of recover for recovering with async operations.
1771
+ *
1772
+ * @param r - The Result or AsyncResult to potentially recover from
1773
+ * @param fn - Async function that takes the error and returns a recovery value
1774
+ * @returns Promise of ok(value) - either original or recovered
1775
+ *
1776
+ * @example
1777
+ * ```typescript
1778
+ * // Recover by fetching default from API
1779
+ * const user = await recoverAsync(
1780
+ * await fetchUser(id),
1781
+ * async (error) => await fetchDefaultUser()
1782
+ * );
1783
+ * ```
1784
+ */
1785
+ declare function recoverAsync<T, E, C>(r: Result<T, E, C> | Promise<Result<T, E, C>>, fn: (error: E, cause?: C) => T | Promise<T>): Promise<Result<T, never, never>>;
1608
1786
  type AllValues<T extends readonly Result<unknown, unknown, unknown>[]> = {
1609
1787
  [K in keyof T]: T[K] extends Result<infer V, unknown, unknown> ? V : never;
1610
1788
  };
@@ -1992,4 +2170,4 @@ type AllAsyncCauses<T extends readonly MaybeAsyncResult<unknown, unknown, unknow
1992
2170
  */
1993
2171
  declare function allSettledAsync<const T extends readonly MaybeAsyncResult<unknown, unknown, unknown>[]>(results: T): Promise<Result<AllAsyncValues<T>, SettledError<AllAsyncErrors<T> | PromiseRejectedError, AllAsyncCauses<T> | PromiseRejectionCause>[]>>;
1994
2172
 
1995
- export { type AsyncResult, type BackoffStrategy, type CauseOf, EARLY_EXIT_SYMBOL, type EarlyExit, type EmptyInputError, type ErrorOf, type Errors, type ExtractCause, type ExtractError, type ExtractValue, type MaybeAsyncResult, type PromiseRejectedError, type PromiseRejectionCause, type Result, type RetryOptions, type RunOptions, type RunOptionsWithCatch, type RunOptionsWithoutCatch, type RunStep, STEP_TIMEOUT_MARKER, type ScopeType, type SettledError, type StepFailureMeta, type StepOptions, type StepTimeoutError, type StepTimeoutMarkerMeta, type TimeoutOptions, type UnexpectedCause, type UnexpectedError, type UnexpectedStepFailureCause, UnwrapError, type WorkflowEvent, all, allAsync, allSettled, allSettledAsync, andThen, any, anyAsync, createEarlyExit, err, from, fromNullable, fromPromise, getStepTimeoutMeta, isEarlyExit, isErr, isOk, isStepTimeoutError, isUnexpectedError, map, mapError, mapErrorTry, mapTry, match, ok, partition, run, tap, tapError, tryAsync, unwrap, unwrapOr, unwrapOrElse };
2173
+ export { type AsyncResult, type BackoffStrategy, type CauseOf, EARLY_EXIT_SYMBOL, type EarlyExit, type EmptyInputError, type ErrorOf, type Errors, type ExtractCause, type ExtractError, type ExtractValue, type MaybeAsyncResult, type PromiseRejectedError, type PromiseRejectionCause, type Result, type RetryOptions, type RunOptions, type RunOptionsWithCatch, type RunOptionsWithoutCatch, type RunStep, STEP_TIMEOUT_MARKER, type ScopeType, type SettledError, type StepFailureMeta, type StepOptions, type StepTimeoutError, type StepTimeoutMarkerMeta, type TimeoutOptions, type UnexpectedCause, type UnexpectedError, type UnexpectedStepFailureCause, UnwrapError, type WorkflowEvent, all, allAsync, allSettled, allSettledAsync, andThen, any, anyAsync, bimap, createEarlyExit, err, from, fromNullable, fromPromise, getStepTimeoutMeta, isEarlyExit, isErr, isOk, isStepTimeoutError, isUnexpectedError, map, mapError, mapErrorTry, mapTry, match, ok, orElse, orElseAsync, partition, recover, recoverAsync, run, tap, tapError, tryAsync, unwrap, unwrapOr, unwrapOrElse };
package/dist/core.d.ts CHANGED
@@ -1605,6 +1605,184 @@ declare function mapTry<T, U, E, F, C>(result: Result<T, E, C>, transform: (valu
1605
1605
  * ```
1606
1606
  */
1607
1607
  declare function mapErrorTry<T, E, F, G, C>(result: Result<T, E, C>, transform: (error: E) => F, onError: (cause: unknown) => G): Result<T, F | G, C | unknown>;
1608
+ /**
1609
+ * Transforms both the success value and error value of a Result simultaneously.
1610
+ *
1611
+ * ## When to Use
1612
+ *
1613
+ * Use `bimap()` when:
1614
+ * - You need to transform both success and error in one operation
1615
+ * - You're normalizing Results to a common format
1616
+ * - You want symmetric transformation of both cases
1617
+ * - You're building adapters between different Result types
1618
+ *
1619
+ * ## Why Use This Instead of `map` + `mapError`
1620
+ *
1621
+ * - **Single operation**: Transforms both cases in one call
1622
+ * - **Clearer intent**: Shows you're handling both cases symmetrically
1623
+ * - **Less code**: Avoids chaining map and mapError
1624
+ *
1625
+ * @param r - The Result to transform
1626
+ * @param onOk - Function that transforms the success value
1627
+ * @param onErr - Function that transforms the error value
1628
+ * @returns A new Result with transformed value or transformed error
1629
+ *
1630
+ * @example
1631
+ * ```typescript
1632
+ * // Normalize to API response format
1633
+ * const response = bimap(
1634
+ * fetchUser(id),
1635
+ * user => ({ status: 'success', data: user }),
1636
+ * error => ({ status: 'error', code: error })
1637
+ * );
1638
+ *
1639
+ * // Transform types
1640
+ * const stringified = bimap(
1641
+ * parseNumber(input),
1642
+ * n => `Value: ${n}`,
1643
+ * e => `Error: ${e}`
1644
+ * );
1645
+ *
1646
+ * // Adapt between error types
1647
+ * const adapted = bimap(
1648
+ * externalResult,
1649
+ * value => internalValue(value),
1650
+ * error => internalError(error)
1651
+ * );
1652
+ * ```
1653
+ */
1654
+ declare function bimap<T, U, E, F, C>(r: Result<T, E, C>, onOk: (value: T) => U, onErr: (error: E) => F): Result<U, F, C>;
1655
+ /**
1656
+ * Recovers from an error by returning a new Result.
1657
+ * Similar to neverthrow's `.orElse()`.
1658
+ *
1659
+ * ## When to Use
1660
+ *
1661
+ * Use `orElse()` when:
1662
+ * - You want to recover from errors with fallback operations
1663
+ * - The recovery might also fail (returns a Result)
1664
+ * - You need to chain fallback strategies
1665
+ * - You're implementing retry or fallback patterns
1666
+ *
1667
+ * ## Why Use This
1668
+ *
1669
+ * - **Fallback chains**: Try alternative operations on failure
1670
+ * - **Error recovery**: Convert errors to success with fallback values
1671
+ * - **Composable**: Can chain multiple orElse calls for cascading fallbacks
1672
+ * - **Type-safe**: TypeScript tracks the error union through recovery
1673
+ *
1674
+ * @param r - The Result to potentially recover from
1675
+ * @param fn - Function that takes the error and returns a new Result (may succeed or fail)
1676
+ * @returns The original Result if successful, or the result of the recovery function
1677
+ *
1678
+ * @example
1679
+ * ```typescript
1680
+ * // Fallback to default user
1681
+ * const user = orElse(
1682
+ * fetchUser(id),
1683
+ * error => error === 'NOT_FOUND' ? ok(defaultUser) : err(error)
1684
+ * );
1685
+ *
1686
+ * // Try cache, then database, then fail
1687
+ * const data = orElse(
1688
+ * orElse(
1689
+ * fetchFromCache(key),
1690
+ * () => fetchFromDatabase(key)
1691
+ * ),
1692
+ * () => err('DATA_UNAVAILABLE' as const)
1693
+ * );
1694
+ *
1695
+ * // Convert specific errors to success
1696
+ * const result = orElse(
1697
+ * riskyOperation(),
1698
+ * error => error.code === 'RETRY' ? ok(defaultValue) : err(error)
1699
+ * );
1700
+ * ```
1701
+ */
1702
+ declare function orElse<T, E, E2, C, C2>(r: Result<T, E, C>, fn: (error: E, cause?: C) => Result<T, E2, C2>): Result<T, E2, C2>;
1703
+ /**
1704
+ * Async version of orElse for recovering from errors with async operations.
1705
+ *
1706
+ * @param r - The Result or AsyncResult to potentially recover from
1707
+ * @param fn - Async function that takes the error and returns a new Result
1708
+ * @returns Promise of the original Result if successful, or the result of the recovery function
1709
+ *
1710
+ * @example
1711
+ * ```typescript
1712
+ * // Try primary API, fall back to secondary
1713
+ * const data = await orElseAsync(
1714
+ * await fetchFromPrimaryApi(),
1715
+ * async (error) => {
1716
+ * if (error === 'UNAVAILABLE') {
1717
+ * return await fetchFromSecondaryApi();
1718
+ * }
1719
+ * return err(error);
1720
+ * }
1721
+ * );
1722
+ * ```
1723
+ */
1724
+ declare function orElseAsync<T, E, E2, C, C2>(r: Result<T, E, C> | Promise<Result<T, E, C>>, fn: (error: E, cause?: C) => Result<T, E2, C2> | Promise<Result<T, E2, C2>>): Promise<Result<T, E2, C2>>;
1725
+ /**
1726
+ * Recovers from an error by returning a plain value (not a Result).
1727
+ * Useful when you want to provide a default value on error.
1728
+ *
1729
+ * ## When to Use
1730
+ *
1731
+ * Use `recover()` when:
1732
+ * - You want to provide a fallback value on error
1733
+ * - Recovery cannot fail (unlike orElse which returns a Result)
1734
+ * - You're implementing default value patterns
1735
+ * - You want to guarantee a successful Result
1736
+ *
1737
+ * ## Why Use This Instead of `orElse`
1738
+ *
1739
+ * - **Simpler**: Recovery function returns plain value, not Result
1740
+ * - **Guaranteed success**: Always returns ok() after recovery
1741
+ * - **Clearer intent**: Shows recovery cannot fail
1742
+ *
1743
+ * @param r - The Result to potentially recover from
1744
+ * @param fn - Function that takes the error and returns a recovery value
1745
+ * @returns The original Result if successful, or ok(recoveryValue) if error
1746
+ *
1747
+ * @example
1748
+ * ```typescript
1749
+ * // Provide default user on NOT_FOUND
1750
+ * const user = recover(
1751
+ * fetchUser(id),
1752
+ * error => error === 'NOT_FOUND' ? defaultUser : guestUser
1753
+ * );
1754
+ *
1755
+ * // Convert all errors to default
1756
+ * const config = recover(
1757
+ * loadConfig(),
1758
+ * () => defaultConfig
1759
+ * );
1760
+ *
1761
+ * // Recover with error-based defaults
1762
+ * const value = recover(
1763
+ * parseNumber(input),
1764
+ * error => error === 'EMPTY' ? 0 : -1
1765
+ * );
1766
+ * ```
1767
+ */
1768
+ declare function recover<T, E, C>(r: Result<T, E, C>, fn: (error: E, cause?: C) => T): Result<T, never, never>;
1769
+ /**
1770
+ * Async version of recover for recovering with async operations.
1771
+ *
1772
+ * @param r - The Result or AsyncResult to potentially recover from
1773
+ * @param fn - Async function that takes the error and returns a recovery value
1774
+ * @returns Promise of ok(value) - either original or recovered
1775
+ *
1776
+ * @example
1777
+ * ```typescript
1778
+ * // Recover by fetching default from API
1779
+ * const user = await recoverAsync(
1780
+ * await fetchUser(id),
1781
+ * async (error) => await fetchDefaultUser()
1782
+ * );
1783
+ * ```
1784
+ */
1785
+ declare function recoverAsync<T, E, C>(r: Result<T, E, C> | Promise<Result<T, E, C>>, fn: (error: E, cause?: C) => T | Promise<T>): Promise<Result<T, never, never>>;
1608
1786
  type AllValues<T extends readonly Result<unknown, unknown, unknown>[]> = {
1609
1787
  [K in keyof T]: T[K] extends Result<infer V, unknown, unknown> ? V : never;
1610
1788
  };
@@ -1992,4 +2170,4 @@ type AllAsyncCauses<T extends readonly MaybeAsyncResult<unknown, unknown, unknow
1992
2170
  */
1993
2171
  declare function allSettledAsync<const T extends readonly MaybeAsyncResult<unknown, unknown, unknown>[]>(results: T): Promise<Result<AllAsyncValues<T>, SettledError<AllAsyncErrors<T> | PromiseRejectedError, AllAsyncCauses<T> | PromiseRejectionCause>[]>>;
1994
2172
 
1995
- export { type AsyncResult, type BackoffStrategy, type CauseOf, EARLY_EXIT_SYMBOL, type EarlyExit, type EmptyInputError, type ErrorOf, type Errors, type ExtractCause, type ExtractError, type ExtractValue, type MaybeAsyncResult, type PromiseRejectedError, type PromiseRejectionCause, type Result, type RetryOptions, type RunOptions, type RunOptionsWithCatch, type RunOptionsWithoutCatch, type RunStep, STEP_TIMEOUT_MARKER, type ScopeType, type SettledError, type StepFailureMeta, type StepOptions, type StepTimeoutError, type StepTimeoutMarkerMeta, type TimeoutOptions, type UnexpectedCause, type UnexpectedError, type UnexpectedStepFailureCause, UnwrapError, type WorkflowEvent, all, allAsync, allSettled, allSettledAsync, andThen, any, anyAsync, createEarlyExit, err, from, fromNullable, fromPromise, getStepTimeoutMeta, isEarlyExit, isErr, isOk, isStepTimeoutError, isUnexpectedError, map, mapError, mapErrorTry, mapTry, match, ok, partition, run, tap, tapError, tryAsync, unwrap, unwrapOr, unwrapOrElse };
2173
+ export { type AsyncResult, type BackoffStrategy, type CauseOf, EARLY_EXIT_SYMBOL, type EarlyExit, type EmptyInputError, type ErrorOf, type Errors, type ExtractCause, type ExtractError, type ExtractValue, type MaybeAsyncResult, type PromiseRejectedError, type PromiseRejectionCause, type Result, type RetryOptions, type RunOptions, type RunOptionsWithCatch, type RunOptionsWithoutCatch, type RunStep, STEP_TIMEOUT_MARKER, type ScopeType, type SettledError, type StepFailureMeta, type StepOptions, type StepTimeoutError, type StepTimeoutMarkerMeta, type TimeoutOptions, type UnexpectedCause, type UnexpectedError, type UnexpectedStepFailureCause, UnwrapError, type WorkflowEvent, all, allAsync, allSettled, allSettledAsync, andThen, any, anyAsync, bimap, createEarlyExit, err, from, fromNullable, fromPromise, getStepTimeoutMeta, isEarlyExit, isErr, isOk, isStepTimeoutError, isUnexpectedError, map, mapError, mapErrorTry, mapTry, match, ok, orElse, orElseAsync, partition, recover, recoverAsync, run, tap, tapError, tryAsync, unwrap, unwrapOr, unwrapOrElse };
package/dist/core.js CHANGED
@@ -1,2 +1,2 @@
1
- var P=e=>({ok:!0,value:e}),T=(e,t)=>({ok:!1,error:e,...t?.cause!==void 0?{cause:t.cause}:{}}),Ee=e=>e.ok,ye=e=>!e.ok,oe=e=>typeof e=="object"&&e!==null&&e.type==="UNEXPECTED_ERROR",D=Symbol.for("step_timeout_marker");function G(e){return typeof e!="object"||e===null?!1:e.type==="STEP_TIMEOUT"?!0:D in e}function se(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(D in e)return e[D]}}var Q=Symbol("early-exit");function ue(e,t){return{[Q]:!0,error:e,meta:t}}function ae(e){return typeof e=="object"&&e!==null&&e[Q]===!0}var Z=Symbol("mapper-exception");function ie(e){return{[Z]:!0,thrown:e}}function pe(e){return typeof e=="object"&&e!==null&&e[Z]===!0}function le(e){return typeof e=="string"?{name:e}:e??{}}function X(e,t){let{backoff:n,initialDelay:u,maxDelay:w,jitter:g}=t,k;switch(n){case"fixed":k=u;break;case"linear":k=u*e;break;case"exponential":k=u*Math.pow(2,e-1);break}if(k=Math.min(k,w),g){let o=k*.25*Math.random();k=k+o}return Math.floor(k)}function Y(e){return new Promise(t=>setTimeout(t,e))}var H=Symbol("timeout");async function ce(e,t,n){let u=new AbortController,w=t.error??{type:"STEP_TIMEOUT",stepName:n.name,stepKey:n.key,timeoutMs:t.ms,attempt:n.attempt},g,k=new Promise((v,x)=>{g=setTimeout(()=>{u.abort(),x({[H]:!0,error:w})},t.ms)}),o;t.signal?o=Promise.resolve(e(u.signal)):o=Promise.resolve(e());try{return await Promise.race([o,k])}catch(v){if(typeof v=="object"&&v!==null&&v[H]===!0){let x=v.error;if(typeof x=="object"&&x!==null&&x.type!=="STEP_TIMEOUT"){let K={timeoutMs:t.ms,stepName:n.name,stepKey:n.key,attempt:n.attempt};D in x?x[D]=K:Object.defineProperty(x,D,{value:K,enumerable:!1,writable:!0,configurable:!1})}throw x}throw v}finally{clearTimeout(g)}}var U={backoff:"exponential",initialDelay:100,maxDelay:3e4,jitter:!0,retryOn:()=>!0,onRetry:()=>{}};async function z(e,t){let{onError:n,onEvent:u,catchUnexpected:w,workflowId:g,context:k}=t&&typeof t=="object"?t:{},o=g??crypto.randomUUID(),v=!n&&!w,x=[],K=0,N=r=>r??`step_${++K}`,l=r=>{if(r.type==="step_success"){let h=r.stepId;for(let b=x.length-1;b>=0;b--){let m=x[b];if(m.type==="race"&&!m.winnerId){m.winnerId=h;break}}}u?.(r,k)},M=ue,q=r=>ae(r),V=(r,h)=>v?h?.origin==="result"?{type:"UNEXPECTED_ERROR",cause:{type:"STEP_FAILURE",origin:"result",error:r,...h.resultCause!==void 0?{cause:h.resultCause}:{}}}:h?.origin==="throw"?{type:"UNEXPECTED_ERROR",cause:{type:"STEP_FAILURE",origin:"throw",error:r,thrown:h.thrown}}:{type:"UNEXPECTED_ERROR",cause:{type:"STEP_FAILURE",origin:"result",error:r}}:r,ee=r=>r.origin==="result"?r.resultCause:r.thrown,te=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=(m,i)=>(async()=>{let y=le(i),{name:s,key:a,retry:d,timeout:c}=y,p=N(a),f=u,R=f?performance.now():0;if(!(typeof m=="function")){if(d&&d.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,d?.attempts??1),backoff:d?.backoff??U.backoff,initialDelay:d?.initialDelay??U.initialDelay,maxDelay:d?.maxDelay??U.maxDelay,jitter:d?.jitter??U.jitter,retryOn:d?.retryOn??U.retryOn,onRetry:d?.onRetry??U.onRetry};u&&l({type:"step_start",workflowId:o,stepId:p,stepKey:a,name:s,ts:Date.now()});let J;for(let C=1;C<=S.attempts;C++){let re=f?performance.now():0;try{let E;if(typeof m=="function"?c?E=await ce(m,c,{name:s,key:a,attempt:C}):E=await m():E=await m,E.ok){let _=performance.now()-R;return l({type:"step_success",workflowId:o,stepId:p,stepKey:a,name:s,ts:Date.now(),durationMs:_}),a&&l({type:"step_complete",workflowId:o,stepKey:a,name:s,ts:Date.now(),durationMs:_,result:E}),E.value}if(J=E,C<S.attempts&&S.retryOn(E.error,C)){let _=X(C,S);l({type:"step_retry",workflowId:o,stepId:p,stepKey:a,name:s,ts:Date.now(),attempt:C+1,maxAttempts:S.attempts,delayMs:_,error:E.error}),S.onRetry(E.error,C,_),await Y(_);continue}S.attempts>1&&l({type:"step_retries_exhausted",workflowId:o,stepId:p,stepKey:a,name:s,ts:Date.now(),durationMs:performance.now()-R,attempts:C,lastError:E.error});break}catch(E){let _=performance.now()-re;if(q(E))throw l({type:"step_aborted",workflowId:o,stepId:p,stepKey:a,name:s,ts:Date.now(),durationMs:_}),E;if(G(E)){let A=se(E),L=c?.ms??A?.timeoutMs??0;if(l({type:"step_timeout",workflowId:o,stepId:p,stepKey:a,name:s,ts:Date.now(),timeoutMs:L,attempt:C}),C<S.attempts&&S.retryOn(E,C)){let W=X(C,S);l({type:"step_retry",workflowId:o,stepId:p,stepKey:a,name:s,ts:Date.now(),attempt:C+1,maxAttempts:S.attempts,delayMs:W,error:E}),S.onRetry(E,C,W),await Y(W);continue}S.attempts>1&&l({type:"step_retries_exhausted",workflowId:o,stepId:p,stepKey:a,name:s,ts:Date.now(),durationMs:performance.now()-R,attempts:C,lastError:E})}if(C<S.attempts&&S.retryOn(E,C)){let A=X(C,S);l({type:"step_retry",workflowId:o,stepId:p,stepKey:a,name:s,ts:Date.now(),attempt:C+1,maxAttempts:S.attempts,delayMs:A,error:E}),S.onRetry(E,C,A),await Y(A);continue}S.attempts>1&&!G(E)&&l({type:"step_retries_exhausted",workflowId:o,stepId:p,stepKey:a,name:s,ts:Date.now(),durationMs:performance.now()-R,attempts:C,lastError:E});let F=performance.now()-R;if(w){let A;try{A=w(E)}catch(L){throw ie(L)}throw l({type:"step_error",workflowId:o,stepId:p,stepKey:a,name:s,ts:Date.now(),durationMs:F,error:A}),a&&l({type:"step_complete",workflowId:o,stepKey:a,name:s,ts:Date.now(),durationMs:F,result:T(A,{cause:E}),meta:{origin:"throw",thrown:E}}),n?.(A,s),M(A,{origin:"throw",thrown:E})}else{let A={type:"UNEXPECTED_ERROR",cause:{type:"UNCAUGHT_EXCEPTION",thrown:E}};throw l({type:"step_error",workflowId:o,stepId:p,stepKey:a,name:s,ts:Date.now(),durationMs:F,error:A}),a&&l({type:"step_complete",workflowId:o,stepKey:a,name:s,ts:Date.now(),durationMs:F,result:T(A,{cause:E}),meta:{origin:"throw",thrown:E}}),E}}}let I=J,$=performance.now()-R,ne=V(I.error,{origin:"result",resultCause:I.cause});throw l({type:"step_error",workflowId:o,stepId:p,stepKey:a,name:s,ts:Date.now(),durationMs:$,error:ne}),a&&l({type:"step_complete",workflowId:o,stepKey:a,name:s,ts:Date.now(),durationMs:$,result:I,meta:{origin:"result",resultCause:I.cause}}),n?.(I.error,s),M(I.error,{origin:"result",resultCause:I.cause})})();r.try=(m,i)=>{let y=i.name,s=i.key,a=N(s),d="error"in i?()=>i.error:i.onError,c=u;return(async()=>{let p=c?performance.now():0;u&&l({type:"step_start",workflowId:o,stepId:a,stepKey:s,name:y,ts:Date.now()});try{let f=await m(),R=performance.now()-p;return l({type:"step_success",workflowId:o,stepId:a,stepKey:s,name:y,ts:Date.now(),durationMs:R}),s&&l({type:"step_complete",workflowId:o,stepKey:s,name:y,ts:Date.now(),durationMs:R,result:P(f)}),f}catch(f){let R=d(f),O=performance.now()-p,j=V(R,{origin:"throw",thrown:f});throw l({type:"step_error",workflowId:o,stepId:a,stepKey:s,name:y,ts:Date.now(),durationMs:O,error:j}),s&&l({type:"step_complete",workflowId:o,stepKey:s,name:y,ts:Date.now(),durationMs:O,result:T(R,{cause:f}),meta:{origin:"throw",thrown:f}}),n?.(R,y),M(R,{origin:"throw",thrown:f})}})()},r.fromResult=(m,i)=>{let y=i.name,s=i.key,a=N(s),d="error"in i?()=>i.error:i.onError,c=u;return(async()=>{let p=c?performance.now():0;u&&l({type:"step_start",workflowId:o,stepId:a,stepKey:s,name:y,ts:Date.now()});let f=await m();if(f.ok){let R=performance.now()-p;return l({type:"step_success",workflowId:o,stepId:a,stepKey:s,name:y,ts:Date.now(),durationMs:R}),s&&l({type:"step_complete",workflowId:o,stepKey:s,name:y,ts:Date.now(),durationMs:R,result:P(f.value)}),f.value}else{let R=d(f.error),O=performance.now()-p,j=V(R,{origin:"result",resultCause:f.error});throw l({type:"step_error",workflowId:o,stepId:a,stepKey:s,name:y,ts:Date.now(),durationMs:O,error:j}),s&&l({type:"step_complete",workflowId:o,stepKey:s,name:y,ts:Date.now(),durationMs:O,result:T(R,{cause:f.error}),meta:{origin:"result",resultCause:f.error}}),n?.(R,y),M(R,{origin:"result",resultCause:f.error})}})()},r.retry=(m,i)=>r(m,{name:i.name,key:i.key,retry:{attempts:i.attempts,backoff:i.backoff,initialDelay:i.initialDelay,maxDelay:i.maxDelay,jitter:i.jitter,retryOn:i.retryOn,onRetry:i.onRetry},timeout:i.timeout}),r.withTimeout=(m,i)=>r(m,{name:i.name,key:i.key,timeout:i}),r.parallel=(m,i)=>{let y=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let s=performance.now(),a=!1;x.push({scopeId:y,type:"parallel"});let d=()=>{if(a)return;a=!0;let c=x.findIndex(p=>p.scopeId===y);c!==-1&&x.splice(c,1),l({type:"scope_end",workflowId:o,scopeId:y,ts:Date.now(),durationMs:performance.now()-s})};l({type:"scope_start",workflowId:o,scopeId:y,scopeType:"parallel",name:m,ts:Date.now()});try{let c=await i();if(d(),!c.ok)throw n?.(c.error,m),M(c.error,{origin:"result",resultCause:c.cause});return c.value}catch(c){throw d(),c}})()},r.race=(m,i)=>{let y=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let s=performance.now(),a=!1,d={scopeId:y,type:"race",winnerId:void 0};x.push(d);let c=()=>{if(a)return;a=!0;let p=x.findIndex(f=>f.scopeId===y);p!==-1&&x.splice(p,1),l({type:"scope_end",workflowId:o,scopeId:y,ts:Date.now(),durationMs:performance.now()-s,winnerId:d.winnerId})};l({type:"scope_start",workflowId:o,scopeId:y,scopeType:"race",name:m,ts:Date.now()});try{let p=await i();if(c(),!p.ok)throw n?.(p.error,m),M(p.error,{origin:"result",resultCause:p.cause});return p.value}catch(p){throw c(),p}})()},r.allSettled=(m,i)=>{let y=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let s=performance.now(),a=!1;x.push({scopeId:y,type:"allSettled"});let d=()=>{if(a)return;a=!0;let c=x.findIndex(p=>p.scopeId===y);c!==-1&&x.splice(c,1),l({type:"scope_end",workflowId:o,scopeId:y,ts:Date.now(),durationMs:performance.now()-s})};l({type:"scope_start",workflowId:o,scopeId:y,scopeType:"allSettled",name:m,ts:Date.now()});try{let c=await i();if(d(),!c.ok)throw n?.(c.error,m),M(c.error,{origin:"result",resultCause:c.cause});return c.value}catch(c){throw d(),c}})()};let b=await e(r);return P(b)}catch(r){if(pe(r))throw r.thrown;if(q(r)){let b=ee(r.meta);if(w||n)return T(r.error,{cause:b});if(oe(r.error))return T(r.error,{cause:b});let m=te(r);return T(m,{cause:b})}if(w){let b=w(r);return n?.(b,"unexpected"),T(b,{cause:r})}let h={type:"UNEXPECTED_ERROR",cause:{type:"UNCAUGHT_EXCEPTION",thrown:r}};return n?.(h,"unexpected"),T(h,{cause:r})}}z.strict=(e,t)=>z(e,t);var B=class extends Error{constructor(n,u){super(`Unwrap called on an error result: ${String(n)}`);this.error=n;this.cause=u;this.name="UnwrapError"}},me=e=>{if(e.ok)return e.value;throw new B(e.error,e.cause)},we=(e,t)=>e.ok?e.value:t,Te=(e,t)=>e.ok?e.value:t(e.error,e.cause);function ke(e,t){try{return P(e())}catch(n){return t?T(t(n),{cause:n}):T(n)}}async function de(e,t){try{return P(await e)}catch(n){return t?T(t(n),{cause:n}):T(n)}}async function fe(e,t){try{return P(await e())}catch(n){return t?T(t(n),{cause:n}):T(n)}}function Re(e,t){return e!=null?P(e):T(t())}function Ce(e,t){return e.ok?P(t(e.value)):e}function xe(e,t){return e.ok?e:T(t(e.error),{cause:e.cause})}function Se(e,t){return e.ok?t.ok(e.value):t.err(e.error,e.cause)}function ge(e,t){return e.ok?t(e.value):e}function Ae(e,t){return e.ok&&t(e.value),e}function Pe(e,t){return e.ok||t(e.error,e.cause),e}function be(e,t,n){if(!e.ok)return e;try{return P(t(e.value))}catch(u){return T(n(u),{cause:u})}}function he(e,t,n){if(e.ok)return e;try{return T(t(e.error),{cause:e.cause})}catch(u){return T(n(u),{cause:u})}}function ve(e){let t=[];for(let n of e){if(!n.ok)return n;t.push(n.value)}return P(t)}async function _e(e){return e.length===0?P([]):new Promise(t=>{let n=!1,u=e.length,w=new Array(e.length);for(let g=0;g<e.length;g++){let k=g;Promise.resolve(e[k]).catch(o=>T({type:"PROMISE_REJECTED",cause:o},{cause:{type:"PROMISE_REJECTION",reason:o}})).then(o=>{if(!n){if(!o.ok){n=!0,t(o);return}w[k]=o.value,u--,u===0&&t(P(w))}})}})}function Me(e){let t=[],n=[];for(let u of e)u.ok?t.push(u.value):n.push({error:u.error,cause:u.cause});return n.length>0?T(n):P(t)}function Ie(e){let t=[],n=[];for(let u of e)u.ok?t.push(u.value):n.push(u.error);return{values:t,errors:n}}function Oe(e){if(e.length===0)return T({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 Ue(e){return e.length===0?T({type:"EMPTY_INPUT",message:"anyAsync() requires at least one Result"}):new Promise(t=>{let n=!1,u=e.length,w=null;for(let g of e)Promise.resolve(g).catch(k=>T({type:"PROMISE_REJECTED",cause:k},{cause:{type:"PROMISE_REJECTION",reason:k}})).then(k=>{if(!n){if(k.ok){n=!0,t(k);return}w||(w=k),u--,u===0&&t(w)}})})}async function De(e){let t=await Promise.all(e.map(w=>Promise.resolve(w).then(g=>({status:"result",result:g})).catch(g=>({status:"rejected",error:{type:"PROMISE_REJECTED",cause:g},cause:{type:"PROMISE_REJECTION",reason:g}})))),n=[],u=[];for(let w of t)w.status==="rejected"?u.push({error:w.error,cause:w.cause}):w.result.ok?n.push(w.result.value):u.push({error:w.result.error,cause:w.result.cause});return u.length>0?T(u):P(n)}export{Q as EARLY_EXIT_SYMBOL,D as STEP_TIMEOUT_MARKER,B as UnwrapError,ve as all,_e as allAsync,Me as allSettled,De as allSettledAsync,ge as andThen,Oe as any,Ue as anyAsync,ue as createEarlyExit,T as err,ke as from,Re as fromNullable,de as fromPromise,se as getStepTimeoutMeta,ae as isEarlyExit,ye as isErr,Ee as isOk,G as isStepTimeoutError,oe as isUnexpectedError,Ce as map,xe as mapError,he as mapErrorTry,be as mapTry,Se as match,P as ok,Ie as partition,z as run,Ae as tap,Pe as tapError,fe as tryAsync,me as unwrap,we as unwrapOr,Te as unwrapOrElse};
1
+ var g=e=>({ok:!0,value:e}),T=(e,t)=>({ok:!1,error:e,...t?.cause!==void 0?{cause:t.cause}:{}}),Ee=e=>e.ok,ye=e=>!e.ok,oe=e=>typeof e=="object"&&e!==null&&e.type==="UNEXPECTED_ERROR",D=Symbol.for("step_timeout_marker");function G(e){return typeof e!="object"||e===null?!1:e.type==="STEP_TIMEOUT"?!0:D in e}function se(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(D in e)return e[D]}}var Q=Symbol("early-exit");function ue(e,t){return{[Q]:!0,error:e,meta:t}}function ae(e){return typeof e=="object"&&e!==null&&e[Q]===!0}var Z=Symbol("mapper-exception");function ie(e){return{[Z]:!0,thrown:e}}function pe(e){return typeof e=="object"&&e!==null&&e[Z]===!0}function le(e){return typeof e=="string"?{name:e}:e??{}}function X(e,t){let{backoff:n,initialDelay:u,maxDelay:w,jitter:A}=t,k;switch(n){case"fixed":k=u;break;case"linear":k=u*e;break;case"exponential":k=u*Math.pow(2,e-1);break}if(k=Math.min(k,w),A){let o=k*.25*Math.random();k=k+o}return Math.floor(k)}function Y(e){return new Promise(t=>setTimeout(t,e))}var H=Symbol("timeout");async function ce(e,t,n){let u=new AbortController,w=t.error??{type:"STEP_TIMEOUT",stepName:n.name,stepKey:n.key,timeoutMs:t.ms,attempt:n.attempt},A,k=new Promise((h,x)=>{A=setTimeout(()=>{u.abort(),x({[H]:!0,error:w})},t.ms)}),o;t.signal?o=Promise.resolve(e(u.signal)):o=Promise.resolve(e());try{return await Promise.race([o,k])}catch(h){if(typeof h=="object"&&h!==null&&h[H]===!0){let x=h.error;if(typeof x=="object"&&x!==null&&x.type!=="STEP_TIMEOUT"){let K={timeoutMs:t.ms,stepName:n.name,stepKey:n.key,attempt:n.attempt};D in x?x[D]=K:Object.defineProperty(x,D,{value:K,enumerable:!1,writable:!0,configurable:!1})}throw x}throw h}finally{clearTimeout(A)}}var U={backoff:"exponential",initialDelay:100,maxDelay:3e4,jitter:!0,retryOn:()=>!0,onRetry:()=>{}};async function z(e,t){let{onError:n,onEvent:u,catchUnexpected:w,workflowId:A,context:k}=t&&typeof t=="object"?t:{},o=A??crypto.randomUUID(),h=!n&&!w,x=[],K=0,N=r=>r??`step_${++K}`,l=r=>{if(r.type==="step_success"){let b=r.stepId;for(let v=x.length-1;v>=0;v--){let m=x[v];if(m.type==="race"&&!m.winnerId){m.winnerId=b;break}}}u?.(r,k)},M=ue,q=r=>ae(r),V=(r,b)=>h?b?.origin==="result"?{type:"UNEXPECTED_ERROR",cause:{type:"STEP_FAILURE",origin:"result",error:r,...b.resultCause!==void 0?{cause:b.resultCause}:{}}}:b?.origin==="throw"?{type:"UNEXPECTED_ERROR",cause:{type:"STEP_FAILURE",origin:"throw",error:r,thrown:b.thrown}}:{type:"UNEXPECTED_ERROR",cause:{type:"STEP_FAILURE",origin:"result",error:r}}:r,ee=r=>r.origin==="result"?r.resultCause:r.thrown,te=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=(m,i)=>(async()=>{let y=le(i),{name:s,key:a,retry:d,timeout:c}=y,p=N(a),f=u,R=f?performance.now():0;if(!(typeof m=="function")){if(d&&d.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,d?.attempts??1),backoff:d?.backoff??U.backoff,initialDelay:d?.initialDelay??U.initialDelay,maxDelay:d?.maxDelay??U.maxDelay,jitter:d?.jitter??U.jitter,retryOn:d?.retryOn??U.retryOn,onRetry:d?.onRetry??U.onRetry};u&&l({type:"step_start",workflowId:o,stepId:p,stepKey:a,name:s,ts:Date.now()});let J;for(let C=1;C<=S.attempts;C++){let re=f?performance.now():0;try{let E;if(typeof m=="function"?c?E=await ce(m,c,{name:s,key:a,attempt:C}):E=await m():E=await m,E.ok){let _=performance.now()-R;return l({type:"step_success",workflowId:o,stepId:p,stepKey:a,name:s,ts:Date.now(),durationMs:_}),a&&l({type:"step_complete",workflowId:o,stepKey:a,name:s,ts:Date.now(),durationMs:_,result:E}),E.value}if(J=E,C<S.attempts&&S.retryOn(E.error,C)){let _=X(C,S);l({type:"step_retry",workflowId:o,stepId:p,stepKey:a,name:s,ts:Date.now(),attempt:C+1,maxAttempts:S.attempts,delayMs:_,error:E.error}),S.onRetry(E.error,C,_),await Y(_);continue}S.attempts>1&&l({type:"step_retries_exhausted",workflowId:o,stepId:p,stepKey:a,name:s,ts:Date.now(),durationMs:performance.now()-R,attempts:C,lastError:E.error});break}catch(E){let _=performance.now()-re;if(q(E))throw l({type:"step_aborted",workflowId:o,stepId:p,stepKey:a,name:s,ts:Date.now(),durationMs:_}),E;if(G(E)){let P=se(E),L=c?.ms??P?.timeoutMs??0;if(l({type:"step_timeout",workflowId:o,stepId:p,stepKey:a,name:s,ts:Date.now(),timeoutMs:L,attempt:C}),C<S.attempts&&S.retryOn(E,C)){let W=X(C,S);l({type:"step_retry",workflowId:o,stepId:p,stepKey:a,name:s,ts:Date.now(),attempt:C+1,maxAttempts:S.attempts,delayMs:W,error:E}),S.onRetry(E,C,W),await Y(W);continue}S.attempts>1&&l({type:"step_retries_exhausted",workflowId:o,stepId:p,stepKey:a,name:s,ts:Date.now(),durationMs:performance.now()-R,attempts:C,lastError:E})}if(C<S.attempts&&S.retryOn(E,C)){let P=X(C,S);l({type:"step_retry",workflowId:o,stepId:p,stepKey:a,name:s,ts:Date.now(),attempt:C+1,maxAttempts:S.attempts,delayMs:P,error:E}),S.onRetry(E,C,P),await Y(P);continue}S.attempts>1&&!G(E)&&l({type:"step_retries_exhausted",workflowId:o,stepId:p,stepKey:a,name:s,ts:Date.now(),durationMs:performance.now()-R,attempts:C,lastError:E});let j=performance.now()-R;if(w){let P;try{P=w(E)}catch(L){throw ie(L)}throw l({type:"step_error",workflowId:o,stepId:p,stepKey:a,name:s,ts:Date.now(),durationMs:j,error:P}),a&&l({type:"step_complete",workflowId:o,stepKey:a,name:s,ts:Date.now(),durationMs:j,result:T(P,{cause:E}),meta:{origin:"throw",thrown:E}}),n?.(P,s),M(P,{origin:"throw",thrown:E})}else{let P={type:"UNEXPECTED_ERROR",cause:{type:"UNCAUGHT_EXCEPTION",thrown:E}};throw l({type:"step_error",workflowId:o,stepId:p,stepKey:a,name:s,ts:Date.now(),durationMs:j,error:P}),a&&l({type:"step_complete",workflowId:o,stepKey:a,name:s,ts:Date.now(),durationMs:j,result:T(P,{cause:E}),meta:{origin:"throw",thrown:E}}),E}}}let I=J,$=performance.now()-R,ne=V(I.error,{origin:"result",resultCause:I.cause});throw l({type:"step_error",workflowId:o,stepId:p,stepKey:a,name:s,ts:Date.now(),durationMs:$,error:ne}),a&&l({type:"step_complete",workflowId:o,stepKey:a,name:s,ts:Date.now(),durationMs:$,result:I,meta:{origin:"result",resultCause:I.cause}}),n?.(I.error,s),M(I.error,{origin:"result",resultCause:I.cause})})();r.try=(m,i)=>{let y=i.name,s=i.key,a=N(s),d="error"in i?()=>i.error:i.onError,c=u;return(async()=>{let p=c?performance.now():0;u&&l({type:"step_start",workflowId:o,stepId:a,stepKey:s,name:y,ts:Date.now()});try{let f=await m(),R=performance.now()-p;return l({type:"step_success",workflowId:o,stepId:a,stepKey:s,name:y,ts:Date.now(),durationMs:R}),s&&l({type:"step_complete",workflowId:o,stepKey:s,name:y,ts:Date.now(),durationMs:R,result:g(f)}),f}catch(f){let R=d(f),O=performance.now()-p,F=V(R,{origin:"throw",thrown:f});throw l({type:"step_error",workflowId:o,stepId:a,stepKey:s,name:y,ts:Date.now(),durationMs:O,error:F}),s&&l({type:"step_complete",workflowId:o,stepKey:s,name:y,ts:Date.now(),durationMs:O,result:T(R,{cause:f}),meta:{origin:"throw",thrown:f}}),n?.(R,y),M(R,{origin:"throw",thrown:f})}})()},r.fromResult=(m,i)=>{let y=i.name,s=i.key,a=N(s),d="error"in i?()=>i.error:i.onError,c=u;return(async()=>{let p=c?performance.now():0;u&&l({type:"step_start",workflowId:o,stepId:a,stepKey:s,name:y,ts:Date.now()});let f=await m();if(f.ok){let R=performance.now()-p;return l({type:"step_success",workflowId:o,stepId:a,stepKey:s,name:y,ts:Date.now(),durationMs:R}),s&&l({type:"step_complete",workflowId:o,stepKey:s,name:y,ts:Date.now(),durationMs:R,result:g(f.value)}),f.value}else{let R=d(f.error),O=performance.now()-p,F=V(R,{origin:"result",resultCause:f.error});throw l({type:"step_error",workflowId:o,stepId:a,stepKey:s,name:y,ts:Date.now(),durationMs:O,error:F}),s&&l({type:"step_complete",workflowId:o,stepKey:s,name:y,ts:Date.now(),durationMs:O,result:T(R,{cause:f.error}),meta:{origin:"result",resultCause:f.error}}),n?.(R,y),M(R,{origin:"result",resultCause:f.error})}})()},r.retry=(m,i)=>r(m,{name:i.name,key:i.key,retry:{attempts:i.attempts,backoff:i.backoff,initialDelay:i.initialDelay,maxDelay:i.maxDelay,jitter:i.jitter,retryOn:i.retryOn,onRetry:i.onRetry},timeout:i.timeout}),r.withTimeout=(m,i)=>r(m,{name:i.name,key:i.key,timeout:i}),r.parallel=(m,i)=>{let y=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let s=performance.now(),a=!1;x.push({scopeId:y,type:"parallel"});let d=()=>{if(a)return;a=!0;let c=x.findIndex(p=>p.scopeId===y);c!==-1&&x.splice(c,1),l({type:"scope_end",workflowId:o,scopeId:y,ts:Date.now(),durationMs:performance.now()-s})};l({type:"scope_start",workflowId:o,scopeId:y,scopeType:"parallel",name:m,ts:Date.now()});try{let c=await i();if(d(),!c.ok)throw n?.(c.error,m),M(c.error,{origin:"result",resultCause:c.cause});return c.value}catch(c){throw d(),c}})()},r.race=(m,i)=>{let y=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let s=performance.now(),a=!1,d={scopeId:y,type:"race",winnerId:void 0};x.push(d);let c=()=>{if(a)return;a=!0;let p=x.findIndex(f=>f.scopeId===y);p!==-1&&x.splice(p,1),l({type:"scope_end",workflowId:o,scopeId:y,ts:Date.now(),durationMs:performance.now()-s,winnerId:d.winnerId})};l({type:"scope_start",workflowId:o,scopeId:y,scopeType:"race",name:m,ts:Date.now()});try{let p=await i();if(c(),!p.ok)throw n?.(p.error,m),M(p.error,{origin:"result",resultCause:p.cause});return p.value}catch(p){throw c(),p}})()},r.allSettled=(m,i)=>{let y=`scope_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;return(async()=>{let s=performance.now(),a=!1;x.push({scopeId:y,type:"allSettled"});let d=()=>{if(a)return;a=!0;let c=x.findIndex(p=>p.scopeId===y);c!==-1&&x.splice(c,1),l({type:"scope_end",workflowId:o,scopeId:y,ts:Date.now(),durationMs:performance.now()-s})};l({type:"scope_start",workflowId:o,scopeId:y,scopeType:"allSettled",name:m,ts:Date.now()});try{let c=await i();if(d(),!c.ok)throw n?.(c.error,m),M(c.error,{origin:"result",resultCause:c.cause});return c.value}catch(c){throw d(),c}})()};let v=await e(r);return g(v)}catch(r){if(pe(r))throw r.thrown;if(q(r)){let v=ee(r.meta);if(w||n)return T(r.error,{cause:v});if(oe(r.error))return T(r.error,{cause:v});let m=te(r);return T(m,{cause:v})}if(w){let v=w(r);return n?.(v,"unexpected"),T(v,{cause:r})}let b={type:"UNEXPECTED_ERROR",cause:{type:"UNCAUGHT_EXCEPTION",thrown:r}};return n?.(b,"unexpected"),T(b,{cause:r})}}z.strict=(e,t)=>z(e,t);var B=class extends Error{constructor(n,u){super(`Unwrap called on an error result: ${String(n)}`);this.error=n;this.cause=u;this.name="UnwrapError"}},me=e=>{if(e.ok)return e.value;throw new B(e.error,e.cause)},we=(e,t)=>e.ok?e.value:t,Te=(e,t)=>e.ok?e.value:t(e.error,e.cause);function ke(e,t){try{return g(e())}catch(n){return t?T(t(n),{cause:n}):T(n)}}async function de(e,t){try{return g(await e)}catch(n){return t?T(t(n),{cause:n}):T(n)}}async function fe(e,t){try{return g(await e())}catch(n){return t?T(t(n),{cause:n}):T(n)}}function Re(e,t){return e!=null?g(e):T(t())}function Ce(e,t){return e.ok?g(t(e.value)):e}function xe(e,t){return e.ok?e:T(t(e.error),{cause:e.cause})}function Se(e,t){return e.ok?t.ok(e.value):t.err(e.error,e.cause)}function ge(e,t){return e.ok?t(e.value):e}function Ae(e,t){return e.ok&&t(e.value),e}function Pe(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(u){return T(n(u),{cause:u})}}function be(e,t,n){if(e.ok)return e;try{return T(t(e.error),{cause:e.cause})}catch(u){return T(n(u),{cause:u})}}function he(e,t,n){return e.ok?g(t(e.value)):T(n(e.error),{cause:e.cause})}function _e(e,t){return e.ok?e:t(e.error,e.cause)}async function Me(e,t){let n=await e;return n.ok?n:t(n.error,n.cause)}function Ie(e,t){return e.ok?g(e.value):g(t(e.error,e.cause))}async function Oe(e,t){let n=await e;return n.ok?g(n.value):g(await t(n.error,n.cause))}function Ue(e){let t=[];for(let n of e){if(!n.ok)return n;t.push(n.value)}return g(t)}async function De(e){return e.length===0?g([]):new Promise(t=>{let n=!1,u=e.length,w=new Array(e.length);for(let A=0;A<e.length;A++){let k=A;Promise.resolve(e[k]).catch(o=>T({type:"PROMISE_REJECTED",cause:o},{cause:{type:"PROMISE_REJECTION",reason:o}})).then(o=>{if(!n){if(!o.ok){n=!0,t(o);return}w[k]=o.value,u--,u===0&&t(g(w))}})}})}function Ke(e){let t=[],n=[];for(let u of e)u.ok?t.push(u.value):n.push({error:u.error,cause:u.cause});return n.length>0?T(n):g(t)}function Fe(e){let t=[],n=[];for(let u of e)u.ok?t.push(u.value):n.push(u.error);return{values:t,errors:n}}function je(e){if(e.length===0)return T({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 Ne(e){return e.length===0?T({type:"EMPTY_INPUT",message:"anyAsync() requires at least one Result"}):new Promise(t=>{let n=!1,u=e.length,w=null;for(let A of e)Promise.resolve(A).catch(k=>T({type:"PROMISE_REJECTED",cause:k},{cause:{type:"PROMISE_REJECTION",reason:k}})).then(k=>{if(!n){if(k.ok){n=!0,t(k);return}w||(w=k),u--,u===0&&t(w)}})})}async function Ve(e){let t=await Promise.all(e.map(w=>Promise.resolve(w).then(A=>({status:"result",result:A})).catch(A=>({status:"rejected",error:{type:"PROMISE_REJECTED",cause:A},cause:{type:"PROMISE_REJECTION",reason:A}})))),n=[],u=[];for(let w of t)w.status==="rejected"?u.push({error:w.error,cause:w.cause}):w.result.ok?n.push(w.result.value):u.push({error:w.result.error,cause:w.result.cause});return u.length>0?T(u):g(n)}export{Q as EARLY_EXIT_SYMBOL,D as STEP_TIMEOUT_MARKER,B as UnwrapError,Ue as all,De as allAsync,Ke as allSettled,Ve as allSettledAsync,ge as andThen,je as any,Ne as anyAsync,he as bimap,ue as createEarlyExit,T as err,ke as from,Re as fromNullable,de as fromPromise,se as getStepTimeoutMeta,ae as isEarlyExit,ye as isErr,Ee as isOk,G as isStepTimeoutError,oe as isUnexpectedError,Ce as map,xe as mapError,be as mapErrorTry,ve as mapTry,Se as match,g as ok,_e as orElse,Me as orElseAsync,Fe as partition,Ie as recover,Oe as recoverAsync,z as run,Ae as tap,Pe as tapError,fe as tryAsync,me as unwrap,we as unwrapOr,Te as unwrapOrElse};
2
2
  //# sourceMappingURL=core.js.map