@nicolastoulemont/std 0.9.0 → 0.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +388 -60
- package/dist/brand/index.d.mts +1 -1
- package/dist/brand/index.mjs +1 -1
- package/dist/{brand-DZgGDrAe.mjs → brand-DP-C92GS.mjs} +2 -2
- package/dist/{brand-DZgGDrAe.mjs.map → brand-DP-C92GS.mjs.map} +1 -1
- package/dist/{brand.types-B3NDX1vo.d.mts → brand.types-C_7QgCA4.d.mts} +1 -1
- package/dist/{brand.types-B3NDX1vo.d.mts.map → brand.types-C_7QgCA4.d.mts.map} +1 -1
- package/dist/context/index.d.mts +1 -1
- package/dist/context/index.mjs +1 -1
- package/dist/{context-0xDbwtpx.mjs → context-7oKePrBY.mjs} +2 -2
- package/dist/{context-0xDbwtpx.mjs.map → context-7oKePrBY.mjs.map} +1 -1
- package/dist/{context-B2dWloPl.d.mts → context-B9oWzbwF.d.mts} +2 -2
- package/dist/{context-B2dWloPl.d.mts.map → context-B9oWzbwF.d.mts.map} +1 -1
- package/dist/data/index.d.mts +1 -1
- package/dist/data/index.mjs +1 -1
- package/dist/data-W10ldR5l.mjs +2 -0
- package/dist/data-W10ldR5l.mjs.map +1 -0
- package/dist/{dual-fN6OUwN_.mjs → dual-CZhzZslG.mjs} +1 -1
- package/dist/{dual-fN6OUwN_.mjs.map → dual-CZhzZslG.mjs.map} +1 -1
- package/dist/duration/index.d.mts +1 -1
- package/dist/duration/index.mjs +1 -1
- package/dist/{duration-Bas3mi1N.mjs → duration-Dwtjy95Z.mjs} +2 -2
- package/dist/{duration-Bas3mi1N.mjs.map → duration-Dwtjy95Z.mjs.map} +1 -1
- package/dist/either/index.d.mts +1 -1
- package/dist/either/index.mjs +1 -1
- package/dist/{either-G7uOu4Ar.mjs → either-B2TvVY_j.mjs} +2 -2
- package/dist/{either-G7uOu4Ar.mjs.map → either-B2TvVY_j.mjs.map} +1 -1
- package/dist/exit-DOdhmr81.d.mts +67 -0
- package/dist/exit-DOdhmr81.d.mts.map +1 -0
- package/dist/fiber/index.d.mts +2 -0
- package/dist/fiber/index.mjs +1 -0
- package/dist/fiber-CZsyrDdd.mjs +2 -0
- package/dist/fiber-CZsyrDdd.mjs.map +1 -0
- package/dist/{flow-CNyLsPGb.mjs → flow-D8_tllWl.mjs} +1 -1
- package/dist/{flow-CNyLsPGb.mjs.map → flow-D8_tllWl.mjs.map} +1 -1
- package/dist/functions/index.mjs +1 -1
- package/dist/functions-DmOZ7O4j.mjs +2 -0
- package/dist/{functions-ByAk682_.mjs.map → functions-DmOZ7O4j.mjs.map} +1 -1
- package/dist/fx/index.d.mts +1 -1
- package/dist/fx/index.mjs +1 -1
- package/dist/fx-DXBw4iYX.mjs +2 -0
- package/dist/fx-DXBw4iYX.mjs.map +1 -0
- package/dist/fx.runtime-B2_rL7h_.mjs +2 -0
- package/dist/fx.runtime-B2_rL7h_.mjs.map +1 -0
- package/dist/fx.runtime-BuIElLpZ.d.mts +16 -0
- package/dist/fx.runtime-BuIElLpZ.d.mts.map +1 -0
- package/dist/{fx.types-DyQVgTS8.mjs → fx.types-Bg-Mmdm5.mjs} +1 -1
- package/dist/{fx.types-DyQVgTS8.mjs.map → fx.types-Bg-Mmdm5.mjs.map} +1 -1
- package/dist/{fx.types-BdN1EWxr.d.mts → fx.types-CpFKa-Jj.d.mts} +1 -1
- package/dist/{fx.types-BdN1EWxr.d.mts.map → fx.types-CpFKa-Jj.d.mts.map} +1 -1
- package/dist/{index-DfAqfnY0.d.mts → index-5QkUtJ-4.d.mts} +4 -4
- package/dist/{index-DfAqfnY0.d.mts.map → index-5QkUtJ-4.d.mts.map} +1 -1
- package/dist/{index-BD-els5J.d.mts → index-B3xia3Jl.d.mts} +82 -58
- package/dist/index-B3xia3Jl.d.mts.map +1 -0
- package/dist/{index-CIvNgjsx.d.mts → index-B4rHoUK4.d.mts} +2 -2
- package/dist/{index-CIvNgjsx.d.mts.map → index-B4rHoUK4.d.mts.map} +1 -1
- package/dist/{index-BA0EsFxS.d.mts → index-BDUhDs4D.d.mts} +3 -3
- package/dist/{index-BA0EsFxS.d.mts.map → index-BDUhDs4D.d.mts.map} +1 -1
- package/dist/{index-CNTYbcY9.d.mts → index-BZ1-IrU_.d.mts} +1 -1
- package/dist/{index-CNTYbcY9.d.mts.map → index-BZ1-IrU_.d.mts.map} +1 -1
- package/dist/{index-uE3S3Krx.d.mts → index-BZP6t2h9.d.mts} +5 -5
- package/dist/{index-uE3S3Krx.d.mts.map → index-BZP6t2h9.d.mts.map} +1 -1
- package/dist/{index-D8rDE60Y.d.mts → index-Bu-z5Xoq.d.mts} +1 -1
- package/dist/index-Bu-z5Xoq.d.mts.map +1 -0
- package/dist/index-C8KMi_I9.d.mts +226 -0
- package/dist/index-C8KMi_I9.d.mts.map +1 -0
- package/dist/{index-dCRymj_g.d.mts → index-CfXGmPMY.d.mts} +5 -5
- package/dist/{index-dCRymj_g.d.mts.map → index-CfXGmPMY.d.mts.map} +1 -1
- package/dist/index-Cv48HmyO.d.mts +59 -0
- package/dist/index-Cv48HmyO.d.mts.map +1 -0
- package/dist/{index-D6pjHqlK.d.mts → index-D-KxgnwF.d.mts} +49 -70
- package/dist/index-D-KxgnwF.d.mts.map +1 -0
- package/dist/{index-DR7hzXU4.d.mts → index-DLkMqvw4.d.mts} +137 -29
- package/dist/index-DLkMqvw4.d.mts.map +1 -0
- package/dist/index-DlWm_PwP.d.mts +436 -0
- package/dist/index-DlWm_PwP.d.mts.map +1 -0
- package/dist/{index-CVmgBpDt.d.mts → index-DogEz6WQ.d.mts} +2 -2
- package/dist/{index-CVmgBpDt.d.mts.map → index-DogEz6WQ.d.mts.map} +1 -1
- package/dist/{index-D8gcYvR9.d.mts → index-XxPUUAGQ.d.mts} +5 -5
- package/dist/{index-D8gcYvR9.d.mts.map → index-XxPUUAGQ.d.mts.map} +1 -1
- package/dist/{index-BqJ1GWAF.d.mts → index-pC80zLHb.d.mts} +2 -2
- package/dist/{index-BqJ1GWAF.d.mts.map → index-pC80zLHb.d.mts.map} +1 -1
- package/dist/index.d.mts +23 -20
- package/dist/index.mjs +1 -1
- package/dist/layer/index.d.mts +1 -1
- package/dist/layer/index.mjs +1 -1
- package/dist/layer-BmrPWBkT.mjs +2 -0
- package/dist/layer-BmrPWBkT.mjs.map +1 -0
- package/dist/{layer.types-BB0MrvLg.d.mts → layer.types-DsCTjICW.d.mts} +4 -4
- package/dist/{layer.types-BB0MrvLg.d.mts.map → layer.types-DsCTjICW.d.mts.map} +1 -1
- package/dist/log/index.d.mts +2 -0
- package/dist/log/index.mjs +1 -0
- package/dist/log-Bh8G5umo.mjs +2 -0
- package/dist/log-Bh8G5umo.mjs.map +1 -0
- package/dist/multithread/index.d.mts +1 -1
- package/dist/multithread/index.mjs +1 -1
- package/dist/multithread-CovZ2ioL.mjs +21 -0
- package/dist/multithread-CovZ2ioL.mjs.map +1 -0
- package/dist/option/index.d.mts +1 -1
- package/dist/option/index.mjs +1 -1
- package/dist/{option-C2iCxAuJ.mjs → option-BlyP5LA2.mjs} +2 -2
- package/dist/{option-C2iCxAuJ.mjs.map → option-BlyP5LA2.mjs.map} +1 -1
- package/dist/{option.types-D9hrKcfa.d.mts → option.types-DLp3QpFE.d.mts} +3 -3
- package/dist/{option.types-D9hrKcfa.d.mts.map → option.types-DLp3QpFE.d.mts.map} +1 -1
- package/dist/{option.types-CbY_swma.mjs → option.types-bFFSErJ-.mjs} +1 -1
- package/dist/{option.types-CbY_swma.mjs.map → option.types-bFFSErJ-.mjs.map} +1 -1
- package/dist/order/index.d.mts +1 -1
- package/dist/order/index.mjs +1 -1
- package/dist/{order-BXOBEKvB.mjs → order-VTXpppmI.mjs} +2 -2
- package/dist/{order-BXOBEKvB.mjs.map → order-VTXpppmI.mjs.map} +1 -1
- package/dist/{pipeable-BIrevC0D.d.mts → pipeable-BY9yPsNK.d.mts} +1 -1
- package/dist/{pipeable-BIrevC0D.d.mts.map → pipeable-BY9yPsNK.d.mts.map} +1 -1
- package/dist/pipeable-COGyGMUV.mjs +2 -0
- package/dist/{pipeable-Dp1_23zH.mjs.map → pipeable-COGyGMUV.mjs.map} +1 -1
- package/dist/predicate/index.d.mts +1 -1
- package/dist/predicate/index.mjs +1 -1
- package/dist/{predicate-D_1SsIi4.mjs → predicate-8hY-0Ocv.mjs} +2 -2
- package/dist/{predicate-D_1SsIi4.mjs.map → predicate-8hY-0Ocv.mjs.map} +1 -1
- package/dist/provide/index.d.mts +1 -1
- package/dist/provide/index.mjs +1 -1
- package/dist/provide-K-6oXtLm.mjs +2 -0
- package/dist/provide-K-6oXtLm.mjs.map +1 -0
- package/dist/queue/index.d.mts +1 -1
- package/dist/queue/index.mjs +1 -1
- package/dist/{queue-GYVrD39q.mjs → queue-CeEIUHcY.mjs} +2 -2
- package/dist/{queue-GYVrD39q.mjs.map → queue-CeEIUHcY.mjs.map} +1 -1
- package/dist/result/index.d.mts +1 -1
- package/dist/result/index.mjs +1 -1
- package/dist/{result-D3VY0qBG.mjs → result-C74pRN2x.mjs} +2 -2
- package/dist/{result-D3VY0qBG.mjs.map → result-C74pRN2x.mjs.map} +1 -1
- package/dist/{result.types-BKzChyWY.d.mts → result.types-CnhiVFEV.d.mts} +3 -3
- package/dist/{result.types-BKzChyWY.d.mts.map → result.types-CnhiVFEV.d.mts.map} +1 -1
- package/dist/schedule/index.d.mts +1 -1
- package/dist/schedule/index.mjs +1 -1
- package/dist/{schedule-B7qV60tO.mjs → schedule-ChcIgvd5.mjs} +2 -2
- package/dist/{schedule-B7qV60tO.mjs.map → schedule-ChcIgvd5.mjs.map} +1 -1
- package/dist/{schedule-BzPjvMXc.d.mts → schedule-DiidMLcl.d.mts} +3 -3
- package/dist/{schedule-BzPjvMXc.d.mts.map → schedule-DiidMLcl.d.mts.map} +1 -1
- package/dist/schema/index.d.mts +1 -1
- package/dist/schema/index.mjs +1 -1
- package/dist/schema-CT_wO7tN.mjs +2 -0
- package/dist/schema-CT_wO7tN.mjs.map +1 -0
- package/dist/scope/index.d.mts +1 -1
- package/dist/scope/index.mjs +1 -1
- package/dist/{scope-CuM3CzwG.d.mts → scope-7bLTmdRX.d.mts} +4 -4
- package/dist/scope-7bLTmdRX.d.mts.map +1 -0
- package/dist/scope-D2AqJy7j.mjs +2 -0
- package/dist/scope-D2AqJy7j.mjs.map +1 -0
- package/dist/service/index.d.mts +1 -1
- package/dist/service/index.mjs +1 -1
- package/dist/{service-D8mr0wwg.d.mts → service-C4xUfS_M.d.mts} +2 -2
- package/dist/{service-D8mr0wwg.d.mts.map → service-C4xUfS_M.d.mts.map} +1 -1
- package/dist/{service-CWAIEH46.mjs → service-DHkeorS3.mjs} +2 -2
- package/dist/{service-CWAIEH46.mjs.map → service-DHkeorS3.mjs.map} +1 -1
- package/dist/trace/index.d.mts +2 -0
- package/dist/trace/index.mjs +1 -0
- package/dist/trace-ByjppUes.mjs +2 -0
- package/dist/trace-ByjppUes.mjs.map +1 -0
- package/dist/trace-D_7sjH22.d.mts +375 -0
- package/dist/trace-D_7sjH22.d.mts.map +1 -0
- package/package.json +13 -5
- package/dist/adt/index.d.mts +0 -2
- package/dist/adt/index.mjs +0 -1
- package/dist/adt-CY8wLJJI.mjs +0 -2
- package/dist/adt-CY8wLJJI.mjs.map +0 -1
- package/dist/data-DqACNS_g.mjs +0 -2
- package/dist/data-DqACNS_g.mjs.map +0 -1
- package/dist/discriminator.types-C-ygT2S1.d.mts +0 -7
- package/dist/discriminator.types-C-ygT2S1.d.mts.map +0 -1
- package/dist/functions-ByAk682_.mjs +0 -2
- package/dist/fx-C_RTDEpv.mjs +0 -2
- package/dist/fx-C_RTDEpv.mjs.map +0 -1
- package/dist/fx.runtime-jQxh77s3.mjs +0 -2
- package/dist/fx.runtime-jQxh77s3.mjs.map +0 -1
- package/dist/index-BD-els5J.d.mts.map +0 -1
- package/dist/index-BaRJVkLo.d.mts +0 -458
- package/dist/index-BaRJVkLo.d.mts.map +0 -1
- package/dist/index-BipW0MC3.d.mts +0 -64
- package/dist/index-BipW0MC3.d.mts.map +0 -1
- package/dist/index-D6pjHqlK.d.mts.map +0 -1
- package/dist/index-D8rDE60Y.d.mts.map +0 -1
- package/dist/index-DR7hzXU4.d.mts.map +0 -1
- package/dist/is-plain-object-BoFjRafL.mjs +0 -2
- package/dist/is-plain-object-BoFjRafL.mjs.map +0 -1
- package/dist/layer-C5A-EM0h.mjs +0 -2
- package/dist/layer-C5A-EM0h.mjs.map +0 -1
- package/dist/multithread-Cyc8Bz45.mjs +0 -19
- package/dist/multithread-Cyc8Bz45.mjs.map +0 -1
- package/dist/pipeable-Dp1_23zH.mjs +0 -2
- package/dist/provide-CuccogWx.mjs +0 -2
- package/dist/provide-CuccogWx.mjs.map +0 -1
- package/dist/schema-DstB1_VK.mjs +0 -2
- package/dist/schema-DstB1_VK.mjs.map +0 -1
- package/dist/schema.shared-Bjyroa6b.mjs +0 -2
- package/dist/schema.shared-Bjyroa6b.mjs.map +0 -1
- package/dist/schema.types-w1WK4kGS.d.mts +0 -62
- package/dist/schema.types-w1WK4kGS.d.mts.map +0 -1
- package/dist/scope-CuM3CzwG.d.mts.map +0 -1
- package/dist/scope-gVt4PESc.mjs +0 -2
- package/dist/scope-gVt4PESc.mjs.map +0 -1
- package/dist/service-resolution-BefYr4nR.mjs +0 -2
- package/dist/service-resolution-BefYr4nR.mjs.map +0 -1
- /package/dist/{chunk-oQKkju2G.mjs → chunk-6rpU2rUb.mjs} +0 -0
- /package/dist/{option-CXXiA1w-.mjs → option-BqAUkJ8e.mjs} +0 -0
- /package/dist/{result-xFLfwriM.mjs → result-B5WbPg8C.mjs} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"result-D3VY0qBG.mjs","names":["values"],"sources":["../src/result/result.ts"],"sourcesContent":["/**\n * Synchronous success/error primitives with typed channels (`Ok` / `Err`).\n *\n * **Mental model**\n * - `Result<A, E>` makes success and failure explicit.\n * - Use `flatMap` to sequence fallible operations without throwing.\n *\n * **Common tasks**\n * - Construct with `Result.ok`, `Result.err`, `Result.fromTry`.\n * - Transform with `Result.map`, `Result.mapErr`, `Result.flatMap`.\n * - Handle with `Result.match` or `Result.unwrapOr`.\n *\n * **Gotchas**\n * - `Result.err` short-circuits in `Fx.gen`.\n * - Keep domain errors in the `E` channel instead of throwing.\n *\n * **Quickstart**\n *\n * @example\n * ```ts\n * import { Result } from \"@nicolastoulemont/std\"\n *\n * const parsed = Result.fromTry(() => Number.parseInt(\"42\", 10))\n * const doubled = Result.map(parsed, (value) => value * 2)\n * ```\n *\n * @module\n */\nimport { FxTypeId } from \"../fx/fx.types\"\nimport { dual } from \"../shared/dual\"\nimport { isPromise } from \"../shared/is-promise\"\nimport { pipeable } from \"../shared/pipeable\"\nimport type {\n FromTryOptions,\n Result as ResultType,\n ResultAll,\n ResultFlatMap,\n ResultFromTry,\n ResultMap,\n ResultMapErr,\n ResultMatch,\n ResultTap,\n ResultOrElse,\n ResultFilter,\n ResultUnwrapOr,\n ResultUnwrapOrElse,\n} from \"./result.types\"\n\n/**\n * Re-exported `Result` type.\n *\n * @example\n * ```ts\n * import type { Result } from \"@nicolastoulemont/std\"\n *\n * type Example = Result.Result<unknown, unknown>\n * ```\n */\nexport type Result<T, E> = ResultType<T, E>\n\n/* oxlint-disable no-unsafe-type-assertion -- Result constructors encode Fx phantom channels and iterator contracts via type-level markers. */\n\n// ============================================================================\n// Constructors\n// ============================================================================\n\n/**\n * Create a successful Result.\n *\n * @param value - The success value\n * @returns A Result with _tag: \"Ok\"\n *\n * @example\n * ```ts\n * import { Result } from \"@nicolastoulemont/std\"\n *\n * const value = Result.ok(42)\n * // => { _tag: \"Ok\", value: 42 }\n * ```\n */\nexport const ok = <T>(value: T): ResultType<T, never> => {\n const result: ResultType<T, never> = {\n _tag: \"Ok\",\n value,\n pipe: pipeable,\n [FxTypeId]: {\n _A: () => value,\n _E: () => undefined as never,\n _R: () => undefined as never,\n },\n // oxlint-disable-next-line require-yield\n *[Symbol.iterator](): Generator<ResultType<T, never>, T, unknown> {\n return value\n },\n }\n return result\n}\n\n/**\n * Create an error Result.\n *\n * @param error - The error value\n * @returns A Result with _tag: \"Err\"\n *\n * @example\n * ```ts\n * import { Result } from \"@nicolastoulemont/std\"\n *\n * const value = Result.err(\"boom\")\n * // => { _tag: \"Err\", error: \"boom\" }\n * ```\n */\nexport const err = <E>(error: E): ResultType<never, E> => {\n const result: ResultType<never, E> = {\n _tag: \"Err\",\n error,\n pipe: pipeable,\n [FxTypeId]: {\n _A: () => undefined as never,\n _E: () => error,\n _R: () => undefined as never,\n },\n *[Symbol.iterator](): Generator<ResultType<never, E>, never, unknown> {\n yield result\n throw new Error(\"Unreachable: Fx.gen should short-circuit on error\")\n },\n }\n return result\n}\n\n// ============================================================================\n// Type Guards\n// ============================================================================\n\n/**\n * Check if a Result is successful.\n *\n * @param result - The Result to check\n * @returns true if the Result is Ok\n *\n * @example\n * ```ts\n * import { Result } from \"@nicolastoulemont/std\"\n *\n * const isOk = Result.isOk(Result.ok(1))\n * // => true\n * ```\n */\nexport const isOk = <T, E>(result: ResultType<T, E>): result is Extract<ResultType<T, E>, { _tag: \"Ok\" }> =>\n result._tag === \"Ok\"\n\n/**\n * Check if a Result is an error.\n *\n * @param result - The Result to check\n * @returns true if the Result is an error\n *\n * @example\n * ```ts\n * import { Result } from \"@nicolastoulemont/std\"\n *\n * const isErr = Result.isErr(Result.err(\"boom\"))\n * // => true\n * ```\n */\nexport const isErr = <T, E>(result: ResultType<T, E>): result is Extract<ResultType<T, E>, { _tag: \"Err\" }> =>\n result._tag === \"Err\"\n\n// ============================================================================\n// Transformations (curried for pipe)\n// ============================================================================\n\n/**\n * Transform the success value of a Result.\n * If the Result is an error, it passes through unchanged.\n *\n * Supports both data-first and data-last calling styles:\n * - Data-first: `map(result, fn)`\n * - Data-last: `pipe(result, map(fn))`\n *\n * Supports both sync and async callbacks:\n * - Sync fn: returns U\n * - Async fn: returns Promise<U>\n *\n * @param fn - Function that transforms the success value\n * @returns The mapped Result in data-first form, or a function that maps a Result in data-last form\n *\n * @example\n * ```ts\n * import { Result } from \"@nicolastoulemont/std\"\n *\n * const input = Result.ok(2)\n * const dataFirst = Result.map(input, (n) => n + 1)\n * // => { _tag: \"Ok\", value: 3 }\n *\n * const dataLast = Result.map((n: number) => n + 1)(input)\n * // => { _tag: \"Ok\", value: 3 }\n * ```\n */\n/* oxlint-disable no-explicit-any, no-unsafe-return, no-unsafe-type-assertion -- Required for overloaded return types in curried functions */\nexport const map: ResultMap = dual(2, (result: ResultType<unknown, unknown>, fn: (value: unknown) => unknown) => {\n if (result._tag === \"Err\") return result as any\n const mapped = fn(result.value)\n if (isPromise(mapped)) {\n return Promise.resolve(mapped).then(ok) as any\n }\n return ok(mapped) as any\n})\n/* oxlint-enable no-explicit-any, no-unsafe-return, no-unsafe-type-assertion */\n\n/**\n * Transform the error value of a Result.\n * If the Result is successful, it passes through unchanged.\n *\n * Supports both data-first and data-last calling styles:\n * - Data-first: `mapErr(result, fn)`\n * - Data-last: `pipe(result, mapErr(fn))`\n *\n * Supports both sync and async callbacks:\n * - Sync fn: returns F\n * - Async fn: returns Promise<F>\n *\n * @param fn - Function that transforms the error value\n * @returns The mapped Result in data-first form, or a function that maps Result errors in data-last form\n *\n * @example\n * ```ts\n * import { Result } from \"@nicolastoulemont/std\"\n *\n * const input = Result.err(\"missing\")\n * const dataFirst = Result.mapErr(input, (msg) => msg.toUpperCase())\n * // => { _tag: \"Err\", error: \"MISSING\" }\n *\n * const dataLast = Result.mapErr((msg: string) => msg.toUpperCase())(input)\n * // => { _tag: \"Err\", error: \"MISSING\" }\n * ```\n */\n/* oxlint-disable no-explicit-any, no-unsafe-return, no-unsafe-type-assertion -- Required for overloaded return types in curried functions */\nexport const mapErr: ResultMapErr = dual(2, (result: ResultType<unknown, unknown>, fn: (error: unknown) => unknown) => {\n if (result._tag === \"Ok\") return result as any\n const mapped = fn(result.error)\n if (isPromise(mapped)) {\n return Promise.resolve(mapped).then(err) as any\n }\n return err(mapped) as any\n})\n/* oxlint-enable no-explicit-any, no-unsafe-return, no-unsafe-type-assertion */\n\n/**\n * Chain operations that return Results.\n * If the Result is an error, it passes through unchanged.\n *\n * Supports both data-first and data-last calling styles:\n * - Data-first: `flatMap(result, fn)`\n * - Data-last: `pipe(result, flatMap(fn))`\n *\n * Supports both sync and async functions:\n * - Sync fn: returns Result<U, E | E2>\n * - Async fn: returns Promise<Result<U, E | E2>>\n *\n * @param fn - Function that takes a value and returns a Result (or Promise<Result>)\n * @returns The resulting Result in data-first form, or a function that flatMaps a Result in data-last form\n *\n * @example\n * ```ts\n * import { Result } from \"@nicolastoulemont/std\"\n *\n * const input = Result.ok(2)\n * const dataFirst = Result.flatMap(input, (n) => Result.ok(n + 1))\n * // => { _tag: \"Ok\", value: 3 }\n *\n * const dataLast = Result.flatMap((n: number) => Result.ok(n + 1))(input)\n * // => { _tag: \"Ok\", value: 3 }\n * ```\n */\n// oxlint-disable-next-line no-explicit-any, no-unsafe-return, no-unsafe-type-assertion -- Required for overloaded return types\nexport const flatMap: ResultFlatMap = dual(2, (result: ResultType<unknown, unknown>, fn: (value: unknown) => unknown) =>\n result._tag === \"Ok\" ? fn(result.value) : result,\n)\n\n/**\n * Perform a side effect on the success value without modifying the Result.\n * Useful for debugging, logging, or other side effects in a pipeline.\n * If the Result is an error, the function is not called.\n *\n * Supports both data-first and data-last calling styles:\n * - Data-first: `tap(result, fn)`\n * - Data-last: `pipe(result, tap(fn))`\n *\n * Supports both sync and async side effects:\n * - Sync fn: returns any value (ignored)\n * - Async fn: returns Promise<unknown>\n *\n * @param fn - Function to call with the success value (return value is ignored)\n * @returns The original Result in data-first form, or a function that taps a Result in data-last form\n *\n * @example\n * ```ts\n * import { Result } from \"@nicolastoulemont/std\"\n *\n * let seen = 0\n * const input = Result.ok(2)\n * const dataFirst = Result.tap(input, (n) => {\n * seen = n\n * })\n * // => { _tag: \"Ok\", value: 2 }\n *\n * const dataLast = Result.tap((n: number) => {\n * seen = n\n * })(input)\n * // => { _tag: \"Ok\", value: 2 }\n * ```\n */\n/* oxlint-disable no-explicit-any, no-unsafe-return, no-unsafe-type-assertion -- Required for overloaded return types in curried functions */\nexport const tap: ResultTap = dual(2, (result: ResultType<unknown, unknown>, fn: (value: unknown) => unknown) => {\n if (result._tag === \"Err\") return result as any\n const sideEffect = fn(result.value)\n if (isPromise(sideEffect)) {\n return Promise.resolve(sideEffect).then(() => result) as any\n }\n return result as any\n})\n/* oxlint-enable no-explicit-any, no-unsafe-return, no-unsafe-type-assertion */\n\n/**\n * Recover from an error by providing an alternative Result.\n * If the Result is successful, it passes through unchanged.\n *\n * Supports both data-first and data-last calling styles:\n * - Data-first: `orElse(result, fn)`\n * - Data-last: `pipe(result, orElse(fn))`\n *\n * Supports both sync and async fallback functions:\n * - Sync fn: returns Result<T | U, E2>\n * - Async fn: returns Promise<Result<T | U, E2>>\n *\n * @param fn - Function that takes the error and returns an alternative Result\n * @returns The original or fallback Result in data-first form, or a function that recovers from an error in data-last form\n *\n * @example\n * ```ts\n * import { Result } from \"@nicolastoulemont/std\"\n *\n * const input = Result.err(\"missing\") as Result.Result<number, string>\n * const dataFirst = Result.orElse(input, () => Result.ok(0))\n * // => { _tag: \"Ok\", value: 0 }\n *\n * const dataLast = Result.orElse(() => Result.ok(0))(input)\n * // => { _tag: \"Ok\", value: 0 }\n * ```\n */\n// oxlint-disable-next-line no-explicit-any, no-unsafe-return, no-unsafe-type-assertion -- Required for overloaded return types\nexport const orElse: ResultOrElse = dual(2, (result: ResultType<unknown, unknown>, fn: (error: unknown) => unknown) =>\n result._tag === \"Ok\" ? result : fn(result.error),\n)\n\n/**\n * Filter a successful Result based on a predicate.\n * If the predicate returns false, converts the success to an error.\n * If the Result is already an error, it passes through unchanged.\n *\n * Supports both data-first and data-last calling styles:\n * - Data-first: `filter(result, predicate, onFail)`\n * - Data-last: `pipe(result, filter(predicate, onFail))`\n *\n * @param predicate - Function that returns true to keep the value\n * @param onFail - Function that creates the error when predicate fails\n * @returns The filtered Result in data-first form, or a function that filters a Result in data-last form\n *\n * @example\n * ```ts\n * import { Result } from \"@nicolastoulemont/std\"\n *\n * const input = Result.ok(3)\n * const dataFirst = Result.filter(input, (n) => n > 0, (n) => `${n} must be positive`)\n * // => { _tag: \"Ok\", value: 3 }\n *\n * const dataLast = Result.filter((n: number) => n > 0, (n) => `${n} must be positive`)(input)\n * // => { _tag: \"Ok\", value: 3 }\n * ```\n */\nexport const filter: ResultFilter = dual(\n 3,\n (\n result: ResultType<unknown, unknown>,\n predicate: (value: unknown) => boolean,\n onFail: (value: unknown) => unknown,\n ) => {\n if (result._tag === \"Err\") return result\n return predicate(result.value) ? result : err(onFail(result.value))\n },\n)\n\n// ============================================================================\n// Combinators\n// ============================================================================\n\n/**\n * Combine multiple Results into a single Result.\n * Supports both array and object inputs.\n *\n * - If all Results are ok, returns ok with all values\n * - If any Result is an error, returns the first error (short-circuits)\n *\n * For arrays of 1-6 elements, tuple types are inferred automatically.\n * For longer arrays, use `as const` to preserve tuple structure.\n *\n * @example\n * ```ts\n * import { Result } from \"@nicolastoulemont/std\"\n *\n * const combined = Result.all([Result.ok(1), Result.ok(2)] as const)\n * // => { _tag: \"Ok\", value: [1, 2] }\n * ```\n */\n/* oxlint-disable no-explicit-any, no-unsafe-return, no-unsafe-member-access, strict-boolean-expressions, no-unsafe-type-assertion, no-unsafe-argument -- Required for handling union types in overloaded function */\nexport const all: ResultAll = (results: any): any => {\n if (Array.isArray(results)) {\n const values: unknown[] = []\n for (const result of results) {\n if (result._tag === \"Err\") return result\n values.push(result.value)\n }\n return ok(values)\n }\n\n const values: Record<string, unknown> = {}\n for (const [key, result] of Object.entries(results)) {\n const r = result as ResultType<unknown, unknown>\n if (r._tag === \"Err\") return result\n values[key] = r.value\n }\n return ok(values)\n}\n/* oxlint-enable no-explicit-any, no-unsafe-return, no-unsafe-member-access, strict-boolean-expressions, no-unsafe-type-assertion, no-unsafe-argument */\n\n// ============================================================================\n// Extraction\n// ============================================================================\n\n/**\n * Get the success value or a default value.\n *\n * Supports both data-first and data-last calling styles:\n * - Data-first: `unwrapOr(result, defaultValue)`\n * - Data-last: `pipe(result, unwrapOr(defaultValue))`\n *\n * Uses NoInfer to prevent type inference from the default value.\n *\n * @param defaultValue - Value to return if the Result is an error\n * @returns The unwrapped value in data-first form, or a function that unwraps a Result with a default in data-last form\n *\n * @example\n * ```ts\n * import { Result } from \"@nicolastoulemont/std\"\n *\n * const input = Result.err(\"missing\") as Result.Result<number, string>\n * const dataFirst = Result.unwrapOr(input, 0)\n * // => 0\n *\n * const dataLast = Result.unwrapOr(0)(input)\n * // => 0\n * ```\n */\nexport const unwrapOr: ResultUnwrapOr = dual(\n 2,\n <T, E>(result: ResultType<T, E>, defaultValue: NoInfer<T>): T => (result._tag === \"Ok\" ? result.value : defaultValue),\n)\n\n/**\n * Get the success value or compute a value from the error.\n *\n * Supports both data-first and data-last calling styles:\n * - Data-first: `unwrapOrElse(result, fn)`\n * - Data-last: `pipe(result, unwrapOrElse(fn))`\n *\n * @param fn - Function to compute a value from the error\n * @returns The unwrapped value in data-first form, or a function that unwraps a Result lazily in data-last form\n *\n * @example\n * ```ts\n * import { Result } from \"@nicolastoulemont/std\"\n *\n * const input = Result.err(\"missing\") as Result.Result<number, string>\n * const dataFirst = Result.unwrapOrElse(input, () => 0)\n * // => 0\n *\n * const dataLast = Result.unwrapOrElse(() => 0)(input)\n * // => 0\n * ```\n */\nexport const unwrapOrElse: ResultUnwrapOrElse = dual(\n 2,\n <T, E>(result: ResultType<T, E>, fn: (error: E) => T): T => (result._tag === \"Ok\" ? result.value : fn(result.error)),\n)\n\n/**\n * Pattern match on a Result, handling both success and error cases.\n *\n * Supports both data-first and data-last calling styles:\n * - Data-first: `match(result, { Ok: ..., Err: ... })`\n * - Data-last: `pipe(result, match({ Ok: ..., Err: ... }))`\n *\n * @param handlers - Object with `Ok` and `Err` handlers\n * @returns The handler result in data-first form, or a function that matches a Result in data-last form\n *\n * @example\n * ```ts\n * import { Result } from \"@nicolastoulemont/std\"\n *\n * const input = Result.ok(2) as Result.Result<number, string>\n * const dataFirst = Result.match(input, {\n * Ok: (value) => `ok:${value}` ,\n * Err: (error) => `err:${error}` ,\n * })\n * // => \"ok:2\"\n *\n * const dataLast = Result.match({\n * Ok: (value: number) => `ok:${value}` ,\n * Err: (error: string) => `err:${error}` ,\n * })(input)\n * // => \"ok:2\"\n * ```\n */\nexport const match: ResultMatch = dual(\n 2,\n <T, E, U>(result: ResultType<T, E>, handlers: { Ok: (value: T) => U; Err: (error: E) => U }): U =>\n result._tag === \"Ok\" ? handlers.Ok(result.value) : handlers.Err(result.error),\n)\n\n// ============================================================================\n// Error Boundary\n// ============================================================================\n\n/**\n * Wrap a function that might throw into a Result.\n * Supports both sync and async functions with automatic type inference.\n *\n * Can be called with a simple callback or an object with `try` and `catch`:\n * - Simple: `fromTry(() => riskyOp())` — errors are wrapped as `Error`\n * - Object: `fromTry({ try: () => riskyOp(), catch: (e) => mapError(e) })` — custom error mapping\n *\n * @param fnOrOptions - Function that might throw, or object with `try` and `catch`\n * @returns A Result with the return value or the caught/mapped error\n *\n * @example\n * ```ts\n * import { Result } from \"@nicolastoulemont/std\"\n *\n * const parsed = Result.fromTry(() => Number.parseInt(\"42\", 10))\n * // => { _tag: \"Ok\", value: 42 }\n * ```\n */\n/* oxlint-disable no-explicit-any, no-unsafe-type-assertion -- Required for overloaded return type */\nexport const fromTry: ResultFromTry = (fnOrOptions: (() => unknown) | FromTryOptions<unknown, unknown>): any => {\n const fn = typeof fnOrOptions === \"function\" ? fnOrOptions : fnOrOptions.try\n const catchFn =\n typeof fnOrOptions === \"function\"\n ? (e: unknown) => (e instanceof Error ? e : new Error(String(e)))\n : fnOrOptions.catch\n const finallyFn = typeof fnOrOptions === \"function\" ? undefined : fnOrOptions.finally\n\n let isAsync = false\n try {\n const result = fn()\n if (isPromise(result)) {\n isAsync = true\n const promise = Promise.resolve(result)\n .then(ok)\n .catch((e: unknown) => err(catchFn(e)))\n return finallyFn ? promise.finally(finallyFn) : promise\n }\n return ok(result)\n } catch (e) {\n return err(catchFn(e))\n } finally {\n if (finallyFn && !isAsync) {\n finallyFn()\n }\n }\n}\n/* oxlint-enable no-explicit-any, no-unsafe-type-assertion */\n\nconst try_ = fromTry\n\nexport {\n /**\n * Alias of {@link fromTry}.\n *\n * @example\n * ```ts\n * import { Result } from \"@nicolastoulemont/std\"\n *\n * const parsed = Result.try(() => JSON.parse(\"{\\\"ok\\\":true}\"))\n * ```\n *\n */\n try_ as try,\n}\n\n/* oxlint-enable no-unsafe-type-assertion */\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"result-C74pRN2x.mjs","names":["values"],"sources":["../src/result/result.ts"],"sourcesContent":["/**\n * Synchronous success/error primitives with typed channels (`Ok` / `Err`).\n *\n * **Mental model**\n * - `Result<A, E>` makes success and failure explicit.\n * - Use `flatMap` to sequence fallible operations without throwing.\n *\n * **Common tasks**\n * - Construct with `Result.ok`, `Result.err`, `Result.fromTry`.\n * - Transform with `Result.map`, `Result.mapErr`, `Result.flatMap`.\n * - Handle with `Result.match` or `Result.unwrapOr`.\n *\n * **Gotchas**\n * - `Result.err` short-circuits in `Fx.gen`.\n * - Keep domain errors in the `E` channel instead of throwing.\n *\n * **Quickstart**\n *\n * @example\n * ```ts\n * import { Result } from \"@nicolastoulemont/std\"\n *\n * const parsed = Result.fromTry(() => Number.parseInt(\"42\", 10))\n * const doubled = Result.map(parsed, (value) => value * 2)\n * ```\n *\n * @module\n */\nimport { FxTypeId } from \"../fx/fx.types\"\nimport { dual } from \"../shared/dual\"\nimport { isPromise } from \"../shared/is-promise\"\nimport { pipeable } from \"../shared/pipeable\"\nimport type {\n FromTryOptions,\n Result as ResultType,\n ResultAll,\n ResultFlatMap,\n ResultFromTry,\n ResultMap,\n ResultMapErr,\n ResultMatch,\n ResultTap,\n ResultOrElse,\n ResultFilter,\n ResultUnwrapOr,\n ResultUnwrapOrElse,\n} from \"./result.types\"\n\n/**\n * Re-exported `Result` type.\n *\n * @example\n * ```ts\n * import type { Result } from \"@nicolastoulemont/std\"\n *\n * type Example = Result.Result<unknown, unknown>\n * ```\n */\nexport type Result<T, E> = ResultType<T, E>\n\n/* oxlint-disable no-unsafe-type-assertion -- Result constructors encode Fx phantom channels and iterator contracts via type-level markers. */\n\n// ============================================================================\n// Constructors\n// ============================================================================\n\n/**\n * Create a successful Result.\n *\n * @param value - The success value\n * @returns A Result with _tag: \"Ok\"\n *\n * @example\n * ```ts\n * import { Result } from \"@nicolastoulemont/std\"\n *\n * const value = Result.ok(42)\n * // => { _tag: \"Ok\", value: 42 }\n * ```\n */\nexport const ok = <T>(value: T): ResultType<T, never> => {\n const result: ResultType<T, never> = {\n _tag: \"Ok\",\n value,\n pipe: pipeable,\n [FxTypeId]: {\n _A: () => value,\n _E: () => undefined as never,\n _R: () => undefined as never,\n },\n // oxlint-disable-next-line require-yield\n *[Symbol.iterator](): Generator<ResultType<T, never>, T, unknown> {\n return value\n },\n }\n return result\n}\n\n/**\n * Create an error Result.\n *\n * @param error - The error value\n * @returns A Result with _tag: \"Err\"\n *\n * @example\n * ```ts\n * import { Result } from \"@nicolastoulemont/std\"\n *\n * const value = Result.err(\"boom\")\n * // => { _tag: \"Err\", error: \"boom\" }\n * ```\n */\nexport const err = <E>(error: E): ResultType<never, E> => {\n const result: ResultType<never, E> = {\n _tag: \"Err\",\n error,\n pipe: pipeable,\n [FxTypeId]: {\n _A: () => undefined as never,\n _E: () => error,\n _R: () => undefined as never,\n },\n *[Symbol.iterator](): Generator<ResultType<never, E>, never, unknown> {\n yield result\n throw new Error(\"Unreachable: Fx.gen should short-circuit on error\")\n },\n }\n return result\n}\n\n// ============================================================================\n// Type Guards\n// ============================================================================\n\n/**\n * Check if a Result is successful.\n *\n * @param result - The Result to check\n * @returns true if the Result is Ok\n *\n * @example\n * ```ts\n * import { Result } from \"@nicolastoulemont/std\"\n *\n * const isOk = Result.isOk(Result.ok(1))\n * // => true\n * ```\n */\nexport const isOk = <T, E>(result: ResultType<T, E>): result is Extract<ResultType<T, E>, { _tag: \"Ok\" }> =>\n result._tag === \"Ok\"\n\n/**\n * Check if a Result is an error.\n *\n * @param result - The Result to check\n * @returns true if the Result is an error\n *\n * @example\n * ```ts\n * import { Result } from \"@nicolastoulemont/std\"\n *\n * const isErr = Result.isErr(Result.err(\"boom\"))\n * // => true\n * ```\n */\nexport const isErr = <T, E>(result: ResultType<T, E>): result is Extract<ResultType<T, E>, { _tag: \"Err\" }> =>\n result._tag === \"Err\"\n\n// ============================================================================\n// Transformations (curried for pipe)\n// ============================================================================\n\n/**\n * Transform the success value of a Result.\n * If the Result is an error, it passes through unchanged.\n *\n * Supports both data-first and data-last calling styles:\n * - Data-first: `map(result, fn)`\n * - Data-last: `pipe(result, map(fn))`\n *\n * Supports both sync and async callbacks:\n * - Sync fn: returns U\n * - Async fn: returns Promise<U>\n *\n * @param fn - Function that transforms the success value\n * @returns The mapped Result in data-first form, or a function that maps a Result in data-last form\n *\n * @example\n * ```ts\n * import { Result } from \"@nicolastoulemont/std\"\n *\n * const input = Result.ok(2)\n * const dataFirst = Result.map(input, (n) => n + 1)\n * // => { _tag: \"Ok\", value: 3 }\n *\n * const dataLast = Result.map((n: number) => n + 1)(input)\n * // => { _tag: \"Ok\", value: 3 }\n * ```\n */\n/* oxlint-disable no-explicit-any, no-unsafe-return, no-unsafe-type-assertion -- Required for overloaded return types in curried functions */\nexport const map: ResultMap = dual(2, (result: ResultType<unknown, unknown>, fn: (value: unknown) => unknown) => {\n if (result._tag === \"Err\") return result as any\n const mapped = fn(result.value)\n if (isPromise(mapped)) {\n return Promise.resolve(mapped).then(ok) as any\n }\n return ok(mapped) as any\n})\n/* oxlint-enable no-explicit-any, no-unsafe-return, no-unsafe-type-assertion */\n\n/**\n * Transform the error value of a Result.\n * If the Result is successful, it passes through unchanged.\n *\n * Supports both data-first and data-last calling styles:\n * - Data-first: `mapErr(result, fn)`\n * - Data-last: `pipe(result, mapErr(fn))`\n *\n * Supports both sync and async callbacks:\n * - Sync fn: returns F\n * - Async fn: returns Promise<F>\n *\n * @param fn - Function that transforms the error value\n * @returns The mapped Result in data-first form, or a function that maps Result errors in data-last form\n *\n * @example\n * ```ts\n * import { Result } from \"@nicolastoulemont/std\"\n *\n * const input = Result.err(\"missing\")\n * const dataFirst = Result.mapErr(input, (msg) => msg.toUpperCase())\n * // => { _tag: \"Err\", error: \"MISSING\" }\n *\n * const dataLast = Result.mapErr((msg: string) => msg.toUpperCase())(input)\n * // => { _tag: \"Err\", error: \"MISSING\" }\n * ```\n */\n/* oxlint-disable no-explicit-any, no-unsafe-return, no-unsafe-type-assertion -- Required for overloaded return types in curried functions */\nexport const mapErr: ResultMapErr = dual(2, (result: ResultType<unknown, unknown>, fn: (error: unknown) => unknown) => {\n if (result._tag === \"Ok\") return result as any\n const mapped = fn(result.error)\n if (isPromise(mapped)) {\n return Promise.resolve(mapped).then(err) as any\n }\n return err(mapped) as any\n})\n/* oxlint-enable no-explicit-any, no-unsafe-return, no-unsafe-type-assertion */\n\n/**\n * Chain operations that return Results.\n * If the Result is an error, it passes through unchanged.\n *\n * Supports both data-first and data-last calling styles:\n * - Data-first: `flatMap(result, fn)`\n * - Data-last: `pipe(result, flatMap(fn))`\n *\n * Supports both sync and async functions:\n * - Sync fn: returns Result<U, E | E2>\n * - Async fn: returns Promise<Result<U, E | E2>>\n *\n * @param fn - Function that takes a value and returns a Result (or Promise<Result>)\n * @returns The resulting Result in data-first form, or a function that flatMaps a Result in data-last form\n *\n * @example\n * ```ts\n * import { Result } from \"@nicolastoulemont/std\"\n *\n * const input = Result.ok(2)\n * const dataFirst = Result.flatMap(input, (n) => Result.ok(n + 1))\n * // => { _tag: \"Ok\", value: 3 }\n *\n * const dataLast = Result.flatMap((n: number) => Result.ok(n + 1))(input)\n * // => { _tag: \"Ok\", value: 3 }\n * ```\n */\n// oxlint-disable-next-line no-explicit-any, no-unsafe-return, no-unsafe-type-assertion -- Required for overloaded return types\nexport const flatMap: ResultFlatMap = dual(2, (result: ResultType<unknown, unknown>, fn: (value: unknown) => unknown) =>\n result._tag === \"Ok\" ? fn(result.value) : result,\n)\n\n/**\n * Perform a side effect on the success value without modifying the Result.\n * Useful for debugging, logging, or other side effects in a pipeline.\n * If the Result is an error, the function is not called.\n *\n * Supports both data-first and data-last calling styles:\n * - Data-first: `tap(result, fn)`\n * - Data-last: `pipe(result, tap(fn))`\n *\n * Supports both sync and async side effects:\n * - Sync fn: returns any value (ignored)\n * - Async fn: returns Promise<unknown>\n *\n * @param fn - Function to call with the success value (return value is ignored)\n * @returns The original Result in data-first form, or a function that taps a Result in data-last form\n *\n * @example\n * ```ts\n * import { Result } from \"@nicolastoulemont/std\"\n *\n * let seen = 0\n * const input = Result.ok(2)\n * const dataFirst = Result.tap(input, (n) => {\n * seen = n\n * })\n * // => { _tag: \"Ok\", value: 2 }\n *\n * const dataLast = Result.tap((n: number) => {\n * seen = n\n * })(input)\n * // => { _tag: \"Ok\", value: 2 }\n * ```\n */\n/* oxlint-disable no-explicit-any, no-unsafe-return, no-unsafe-type-assertion -- Required for overloaded return types in curried functions */\nexport const tap: ResultTap = dual(2, (result: ResultType<unknown, unknown>, fn: (value: unknown) => unknown) => {\n if (result._tag === \"Err\") return result as any\n const sideEffect = fn(result.value)\n if (isPromise(sideEffect)) {\n return Promise.resolve(sideEffect).then(() => result) as any\n }\n return result as any\n})\n/* oxlint-enable no-explicit-any, no-unsafe-return, no-unsafe-type-assertion */\n\n/**\n * Recover from an error by providing an alternative Result.\n * If the Result is successful, it passes through unchanged.\n *\n * Supports both data-first and data-last calling styles:\n * - Data-first: `orElse(result, fn)`\n * - Data-last: `pipe(result, orElse(fn))`\n *\n * Supports both sync and async fallback functions:\n * - Sync fn: returns Result<T | U, E2>\n * - Async fn: returns Promise<Result<T | U, E2>>\n *\n * @param fn - Function that takes the error and returns an alternative Result\n * @returns The original or fallback Result in data-first form, or a function that recovers from an error in data-last form\n *\n * @example\n * ```ts\n * import { Result } from \"@nicolastoulemont/std\"\n *\n * const input = Result.err(\"missing\") as Result.Result<number, string>\n * const dataFirst = Result.orElse(input, () => Result.ok(0))\n * // => { _tag: \"Ok\", value: 0 }\n *\n * const dataLast = Result.orElse(() => Result.ok(0))(input)\n * // => { _tag: \"Ok\", value: 0 }\n * ```\n */\n// oxlint-disable-next-line no-explicit-any, no-unsafe-return, no-unsafe-type-assertion -- Required for overloaded return types\nexport const orElse: ResultOrElse = dual(2, (result: ResultType<unknown, unknown>, fn: (error: unknown) => unknown) =>\n result._tag === \"Ok\" ? result : fn(result.error),\n)\n\n/**\n * Filter a successful Result based on a predicate.\n * If the predicate returns false, converts the success to an error.\n * If the Result is already an error, it passes through unchanged.\n *\n * Supports both data-first and data-last calling styles:\n * - Data-first: `filter(result, predicate, onFail)`\n * - Data-last: `pipe(result, filter(predicate, onFail))`\n *\n * @param predicate - Function that returns true to keep the value\n * @param onFail - Function that creates the error when predicate fails\n * @returns The filtered Result in data-first form, or a function that filters a Result in data-last form\n *\n * @example\n * ```ts\n * import { Result } from \"@nicolastoulemont/std\"\n *\n * const input = Result.ok(3)\n * const dataFirst = Result.filter(input, (n) => n > 0, (n) => `${n} must be positive`)\n * // => { _tag: \"Ok\", value: 3 }\n *\n * const dataLast = Result.filter((n: number) => n > 0, (n) => `${n} must be positive`)(input)\n * // => { _tag: \"Ok\", value: 3 }\n * ```\n */\nexport const filter: ResultFilter = dual(\n 3,\n (\n result: ResultType<unknown, unknown>,\n predicate: (value: unknown) => boolean,\n onFail: (value: unknown) => unknown,\n ) => {\n if (result._tag === \"Err\") return result\n return predicate(result.value) ? result : err(onFail(result.value))\n },\n)\n\n// ============================================================================\n// Combinators\n// ============================================================================\n\n/**\n * Combine multiple Results into a single Result.\n * Supports both array and object inputs.\n *\n * - If all Results are ok, returns ok with all values\n * - If any Result is an error, returns the first error (short-circuits)\n *\n * For arrays of 1-6 elements, tuple types are inferred automatically.\n * For longer arrays, use `as const` to preserve tuple structure.\n *\n * @example\n * ```ts\n * import { Result } from \"@nicolastoulemont/std\"\n *\n * const combined = Result.all([Result.ok(1), Result.ok(2)] as const)\n * // => { _tag: \"Ok\", value: [1, 2] }\n * ```\n */\n/* oxlint-disable no-explicit-any, no-unsafe-return, no-unsafe-member-access, strict-boolean-expressions, no-unsafe-type-assertion, no-unsafe-argument -- Required for handling union types in overloaded function */\nexport const all: ResultAll = (results: any): any => {\n if (Array.isArray(results)) {\n const values: unknown[] = []\n for (const result of results) {\n if (result._tag === \"Err\") return result\n values.push(result.value)\n }\n return ok(values)\n }\n\n const values: Record<string, unknown> = {}\n for (const [key, result] of Object.entries(results)) {\n const r = result as ResultType<unknown, unknown>\n if (r._tag === \"Err\") return result\n values[key] = r.value\n }\n return ok(values)\n}\n/* oxlint-enable no-explicit-any, no-unsafe-return, no-unsafe-member-access, strict-boolean-expressions, no-unsafe-type-assertion, no-unsafe-argument */\n\n// ============================================================================\n// Extraction\n// ============================================================================\n\n/**\n * Get the success value or a default value.\n *\n * Supports both data-first and data-last calling styles:\n * - Data-first: `unwrapOr(result, defaultValue)`\n * - Data-last: `pipe(result, unwrapOr(defaultValue))`\n *\n * Uses NoInfer to prevent type inference from the default value.\n *\n * @param defaultValue - Value to return if the Result is an error\n * @returns The unwrapped value in data-first form, or a function that unwraps a Result with a default in data-last form\n *\n * @example\n * ```ts\n * import { Result } from \"@nicolastoulemont/std\"\n *\n * const input = Result.err(\"missing\") as Result.Result<number, string>\n * const dataFirst = Result.unwrapOr(input, 0)\n * // => 0\n *\n * const dataLast = Result.unwrapOr(0)(input)\n * // => 0\n * ```\n */\nexport const unwrapOr: ResultUnwrapOr = dual(\n 2,\n <T, E>(result: ResultType<T, E>, defaultValue: NoInfer<T>): T => (result._tag === \"Ok\" ? result.value : defaultValue),\n)\n\n/**\n * Get the success value or compute a value from the error.\n *\n * Supports both data-first and data-last calling styles:\n * - Data-first: `unwrapOrElse(result, fn)`\n * - Data-last: `pipe(result, unwrapOrElse(fn))`\n *\n * @param fn - Function to compute a value from the error\n * @returns The unwrapped value in data-first form, or a function that unwraps a Result lazily in data-last form\n *\n * @example\n * ```ts\n * import { Result } from \"@nicolastoulemont/std\"\n *\n * const input = Result.err(\"missing\") as Result.Result<number, string>\n * const dataFirst = Result.unwrapOrElse(input, () => 0)\n * // => 0\n *\n * const dataLast = Result.unwrapOrElse(() => 0)(input)\n * // => 0\n * ```\n */\nexport const unwrapOrElse: ResultUnwrapOrElse = dual(\n 2,\n <T, E>(result: ResultType<T, E>, fn: (error: E) => T): T => (result._tag === \"Ok\" ? result.value : fn(result.error)),\n)\n\n/**\n * Pattern match on a Result, handling both success and error cases.\n *\n * Supports both data-first and data-last calling styles:\n * - Data-first: `match(result, { Ok: ..., Err: ... })`\n * - Data-last: `pipe(result, match({ Ok: ..., Err: ... }))`\n *\n * @param handlers - Object with `Ok` and `Err` handlers\n * @returns The handler result in data-first form, or a function that matches a Result in data-last form\n *\n * @example\n * ```ts\n * import { Result } from \"@nicolastoulemont/std\"\n *\n * const input = Result.ok(2) as Result.Result<number, string>\n * const dataFirst = Result.match(input, {\n * Ok: (value) => `ok:${value}` ,\n * Err: (error) => `err:${error}` ,\n * })\n * // => \"ok:2\"\n *\n * const dataLast = Result.match({\n * Ok: (value: number) => `ok:${value}` ,\n * Err: (error: string) => `err:${error}` ,\n * })(input)\n * // => \"ok:2\"\n * ```\n */\nexport const match: ResultMatch = dual(\n 2,\n <T, E, U>(result: ResultType<T, E>, handlers: { Ok: (value: T) => U; Err: (error: E) => U }): U =>\n result._tag === \"Ok\" ? handlers.Ok(result.value) : handlers.Err(result.error),\n)\n\n// ============================================================================\n// Error Boundary\n// ============================================================================\n\n/**\n * Wrap a function that might throw into a Result.\n * Supports both sync and async functions with automatic type inference.\n *\n * Can be called with a simple callback or an object with `try` and `catch`:\n * - Simple: `fromTry(() => riskyOp())` — errors are wrapped as `Error`\n * - Object: `fromTry({ try: () => riskyOp(), catch: (e) => mapError(e) })` — custom error mapping\n *\n * @param fnOrOptions - Function that might throw, or object with `try` and `catch`\n * @returns A Result with the return value or the caught/mapped error\n *\n * @example\n * ```ts\n * import { Result } from \"@nicolastoulemont/std\"\n *\n * const parsed = Result.fromTry(() => Number.parseInt(\"42\", 10))\n * // => { _tag: \"Ok\", value: 42 }\n * ```\n */\n/* oxlint-disable no-explicit-any, no-unsafe-type-assertion -- Required for overloaded return type */\nexport const fromTry: ResultFromTry = (fnOrOptions: (() => unknown) | FromTryOptions<unknown, unknown>): any => {\n const fn = typeof fnOrOptions === \"function\" ? fnOrOptions : fnOrOptions.try\n const catchFn =\n typeof fnOrOptions === \"function\"\n ? (e: unknown) => (e instanceof Error ? e : new Error(String(e)))\n : fnOrOptions.catch\n const finallyFn = typeof fnOrOptions === \"function\" ? undefined : fnOrOptions.finally\n\n let isAsync = false\n try {\n const result = fn()\n if (isPromise(result)) {\n isAsync = true\n const promise = Promise.resolve(result)\n .then(ok)\n .catch((e: unknown) => err(catchFn(e)))\n return finallyFn ? promise.finally(finallyFn) : promise\n }\n return ok(result)\n } catch (e) {\n return err(catchFn(e))\n } finally {\n if (finallyFn && !isAsync) {\n finallyFn()\n }\n }\n}\n/* oxlint-enable no-explicit-any, no-unsafe-type-assertion */\n\nconst try_ = fromTry\n\nexport {\n /**\n * Alias of {@link fromTry}.\n *\n * @example\n * ```ts\n * import { Result } from \"@nicolastoulemont/std\"\n *\n * const parsed = Result.try(() => JSON.parse(\"{\\\"ok\\\":true}\"))\n * ```\n *\n */\n try_ as try,\n}\n\n/* oxlint-enable no-unsafe-type-assertion */\n"],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { i as Fx } from "./fx.types-
|
|
2
|
-
import { t as Pipeable } from "./pipeable-
|
|
1
|
+
import { i as Fx } from "./fx.types-CpFKa-Jj.mjs";
|
|
2
|
+
import { t as Pipeable } from "./pipeable-BY9yPsNK.mjs";
|
|
3
3
|
|
|
4
4
|
//#region src/shared/type-utils.types.d.ts
|
|
5
5
|
|
|
@@ -178,4 +178,4 @@ type ResultMatch = {
|
|
|
178
178
|
};
|
|
179
179
|
//#endregion
|
|
180
180
|
export { ResultFromTry as a, ResultMatch as c, ResultUnwrapOr as d, ResultUnwrapOrElse as f, Prettify as h, ResultFlatMap as i, ResultOrElse as l, Ok as m, ResultAll as n, ResultMap as o, Err as p, ResultFilter as r, ResultMapErr as s, Result as t, ResultTap as u };
|
|
181
|
-
//# sourceMappingURL=result.types-
|
|
181
|
+
//# sourceMappingURL=result.types-CnhiVFEV.d.mts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"result.types-BKzChyWY.d.mts","names":[],"sources":["../src/shared/type-utils.types.ts","../src/result/result.types.ts"],"sourcesContent":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"result.types-CnhiVFEV.d.mts","names":[],"sources":["../src/shared/type-utils.types.ts","../src/result/result.types.ts"],"sourcesContent":[],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { r as schedule_d_exports } from "../schedule-
|
|
1
|
+
import { r as schedule_d_exports } from "../schedule-DiidMLcl.mjs";
|
|
2
2
|
export { schedule_d_exports as Schedule };
|
package/dist/schedule/index.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{t as e}from"../schedule-
|
|
1
|
+
import{t as e}from"../schedule-ChcIgvd5.mjs";export{e as Schedule};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{t as e}from"./chunk-
|
|
2
|
-
//# sourceMappingURL=schedule-
|
|
1
|
+
import{t as e}from"./chunk-6rpU2rUb.mjs";import{r as t}from"./result-C74pRN2x.mjs";import{t as n}from"./data-W10ldR5l.mjs";import{n as r,r as i}from"./duration-Dwtjy95Z.mjs";var a=e({ScheduleInvalidDelayError:()=>s,ScheduleInvalidFactorError:()=>c,ScheduleInvalidRetryCountError:()=>o,exponential:()=>g,fixed:()=>h,recurs:()=>m}),o=class extends n(`ScheduleInvalidRetryCountError`){},s=class extends n(`ScheduleInvalidDelayError`){},c=class extends n(`ScheduleInvalidFactorError`){};const l=e=>{if(!Number.isInteger(e)||e<0)throw new o({input:e,message:`Schedule retry count must be an integer >= 0, received: ${String(e)}`})},u=(e,n)=>{let a=r(n);if(t(a))throw new s({field:e,input:n,message:a.error.message,cause:a.error});let o=i(a.value);if(!Number.isFinite(o)||o<0)throw new s({field:e,input:n,message:`Schedule ${e} must be a finite number >= 0, received: ${String(o)}`});return o},d=(e,t)=>{if(!Number.isFinite(t)||t<=0)throw new c({input:t,message:`Schedule ${e} must be a finite number > 0, received: ${String(t)}`})},f=(e,t)=>({_tag:`RetrySchedule`,_sync:!0,maxRetries:e,delayForAttempt:t}),p=(e,t)=>({_tag:`RetrySchedule`,_sync:!1,maxRetries:e,delayForAttempt:t}),m=e=>(l(e),f(e,()=>0)),h=e=>{l(e.times);let t=u(`delay`,e.delay);return p(e.times,()=>t)},g=e=>{l(e.times);let t=u(`baseDelay`,e.baseDelay),n=e.factor??2;d(`factor`,n);let r;return e.maxDelay!==void 0&&(r=u(`maxDelay`,e.maxDelay)),p(e.times,e=>{let i=t*n**(e-1);return r===void 0?i:Math.min(i,r)})};export{a as t};
|
|
2
|
+
//# sourceMappingURL=schedule-ChcIgvd5.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schedule-
|
|
1
|
+
{"version":3,"file":"schedule-ChcIgvd5.mjs","names":["Data.TaggedError","Duration.from","Result.isErr","Duration.toMillis"],"sources":["../src/schedule/schedule.ts"],"sourcesContent":["/**\n * Retry schedule constructors used by `Fx.retry`.\n *\n * **Mental model**\n * - A schedule defines retry count and per-attempt delay.\n * - Sync schedules have no async delay requirements.\n *\n * **Common tasks**\n * - Use `Schedule.recurs` for immediate retries.\n * - Use `Schedule.fixed` for constant-delay retries.\n * - Use `Schedule.exponential` for backoff.\n *\n * **Gotchas**\n * - `times` is the number of retries after the first attempt.\n * - Delay values must normalize to finite, non-negative milliseconds.\n *\n * **Quickstart**\n *\n * @example\n * ```ts\n * import { Schedule } from \"@nicolastoulemont/std\"\n *\n * const schedule = Schedule.recurs(2)\n * const delay = schedule.delayForAttempt(1)\n * // => 0\n * ```\n *\n * @module\n */\n/* oxlint-disable eslint/max-classes-per-file -- TaggedError classes are exported alongside schedule constructors by design. */\nimport { Data } from \"../data\"\nimport { Duration } from \"../duration\"\nimport { Result } from \"../result\"\n/**\n * Retry schedule used by Fx.retry.\n *\n * A schedule defines:\n * - how many retries are allowed after the first attempt\n * - how long to wait before each retry attempt\n *\n * @example\n * ```ts\n * import { Schedule } from \"@nicolastoulemont/std\"\n *\n * type Example = typeof Schedule\n * ```\n */\nexport type RetrySchedule = SyncRetrySchedule | AsyncRetrySchedule\n\n/**\n * Schedule that never introduces async delays.\n *\n * @example\n * ```ts\n * import { Schedule } from \"@nicolastoulemont/std\"\n *\n * type Example = typeof Schedule\n * ```\n */\nexport type SyncRetrySchedule = {\n readonly _tag: \"RetrySchedule\"\n readonly _sync: true\n readonly maxRetries: number\n readonly delayForAttempt: (retryAttempt: number) => number\n}\n\n/**\n * Schedule that may delay retries, requiring async execution.\n *\n * @example\n * ```ts\n * import { Schedule } from \"@nicolastoulemont/std\"\n *\n * type Example = typeof Schedule\n * ```\n */\nexport type AsyncRetrySchedule = {\n readonly _tag: \"RetrySchedule\"\n readonly _sync: false\n readonly maxRetries: number\n readonly delayForAttempt: (retryAttempt: number) => number\n}\n\n/**\n * Tagged error for invalid retry counts.\n *\n * @example\n * ```ts\n * import { Schedule } from \"@nicolastoulemont/std\"\n *\n * const error = new Schedule.ScheduleInvalidRetryCountError({\n * input: -1,\n * message: \"Schedule retry count must be an integer >= 0, received: -1\",\n * })\n * // => error._tag === \"ScheduleInvalidRetryCountError\"\n * ```\n */\nexport class ScheduleInvalidRetryCountError extends Data.TaggedError(\"ScheduleInvalidRetryCountError\")<{\n input: number\n message: string\n}> {}\n\n/**\n * Tagged error for invalid schedule delay inputs.\n *\n * @example\n * ```ts\n * import { Schedule } from \"@nicolastoulemont/std\"\n *\n * const error = new Schedule.ScheduleInvalidDelayError({\n * field: \"delay\",\n * input: \"oops\",\n * message: \"Invalid duration string: oops\",\n * })\n * // => error._tag === \"ScheduleInvalidDelayError\"\n * ```\n */\nexport class ScheduleInvalidDelayError extends Data.TaggedError(\"ScheduleInvalidDelayError\")<{\n field: \"delay\" | \"baseDelay\" | \"maxDelay\"\n input: Duration.Input\n message: string\n cause?: Duration.InputError\n}> {}\n\n/**\n * Tagged error for invalid exponential factors.\n *\n * @example\n * ```ts\n * import { Schedule } from \"@nicolastoulemont/std\"\n *\n * const error = new Schedule.ScheduleInvalidFactorError({\n * input: 0,\n * message: \"Schedule factor must be a finite number > 0, received: 0\",\n * })\n * // => error._tag === \"ScheduleInvalidFactorError\"\n * ```\n */\nexport class ScheduleInvalidFactorError extends Data.TaggedError(\"ScheduleInvalidFactorError\")<{\n input: number\n message: string\n}> {}\n\ntype FixedScheduleOptions = {\n readonly times: number\n /**\n * The delay for the fixed schedule.\n * in milliseconds.\n */\n readonly delay: Duration.Input\n}\n\ntype ExponentialScheduleOptions = {\n readonly times: number\n /**\n * The base delay for the exponential schedule.\n * in milliseconds.\n */\n readonly baseDelay: Duration.Input\n /**\n * The factor for the exponential schedule.\n * Default: 2\n */\n readonly factor?: number | undefined\n /**\n * The maximum delay for the exponential schedule.\n * in milliseconds.\n */\n readonly maxDelay?: Duration.Input | undefined\n}\n\nconst validateRetryCount = (times: number) => {\n if (!Number.isInteger(times) || times < 0) {\n throw new ScheduleInvalidRetryCountError({\n input: times,\n message: `Schedule retry count must be an integer >= 0, received: ${String(times)}`,\n })\n }\n}\n\nconst validateDelay = (field: \"delay\" | \"baseDelay\" | \"maxDelay\", input: Duration.Input): number => {\n const normalized = Duration.from(input)\n if (Result.isErr(normalized)) {\n throw new ScheduleInvalidDelayError({\n field,\n input,\n message: normalized.error.message,\n cause: normalized.error,\n })\n }\n\n const millis = Duration.toMillis(normalized.value)\n if (!Number.isFinite(millis) || millis < 0) {\n throw new ScheduleInvalidDelayError({\n field,\n input,\n message: `Schedule ${field} must be a finite number >= 0, received: ${String(millis)}`,\n })\n }\n\n return millis\n}\n\nconst validatePositiveFinite = (name: \"factor\", value: number) => {\n if (!Number.isFinite(value) || value <= 0) {\n throw new ScheduleInvalidFactorError({\n input: value,\n message: `Schedule ${name} must be a finite number > 0, received: ${String(value)}`,\n })\n }\n}\n\nconst makeSyncSchedule = (\n maxRetries: number,\n delayForAttempt: (retryAttempt: number) => number,\n): SyncRetrySchedule => ({\n _tag: \"RetrySchedule\",\n _sync: true,\n maxRetries,\n delayForAttempt,\n})\n\nconst makeAsyncSchedule = (\n maxRetries: number,\n delayForAttempt: (retryAttempt: number) => number,\n): AsyncRetrySchedule => ({\n _tag: \"RetrySchedule\",\n _sync: false,\n maxRetries,\n delayForAttempt,\n})\n\n/**\n * Retry immediately up to `times` times.\n *\n * @example\n * ```ts\n * import { Schedule } from \"@nicolastoulemont/std\"\n *\n * const schedule = Schedule.recurs(2)\n * const delay = schedule.delayForAttempt(1)\n * // => 0\n * ```\n */\nexport const recurs = (times: number): SyncRetrySchedule => {\n validateRetryCount(times)\n return makeSyncSchedule(times, () => 0)\n}\n\n/**\n * Retry with a fixed delay between attempts.\n *\n * @example\n * ```ts\n * import { Duration, Schedule } from \"@nicolastoulemont/std\"\n *\n * const schedule = Schedule.fixed({ times: 2, delay: Duration.millis(100) })\n * const delay = schedule.delayForAttempt(2)\n * // => 100\n * ```\n */\nexport const fixed = (options: FixedScheduleOptions): AsyncRetrySchedule => {\n validateRetryCount(options.times)\n const delay = validateDelay(\"delay\", options.delay)\n return makeAsyncSchedule(options.times, () => delay)\n}\n\n/**\n * Retry with exponential backoff:\n * `baseDelay * factor^(retryAttempt - 1)`, optionally capped by `maxDelay`.\n *\n * @example\n * ```ts\n * import { Duration, Schedule } from \"@nicolastoulemont/std\"\n *\n * const schedule = Schedule.exponential({ times: 3, baseDelay: Duration.millis(100) })\n * const delay = schedule.delayForAttempt(3)\n * // => 400\n * ```\n */\nexport const exponential = (options: ExponentialScheduleOptions): AsyncRetrySchedule => {\n validateRetryCount(options.times)\n const baseDelay = validateDelay(\"baseDelay\", options.baseDelay)\n\n const factor = options.factor ?? 2\n validatePositiveFinite(\"factor\", factor)\n\n let maxDelay: number | undefined\n if (options.maxDelay !== undefined) {\n maxDelay = validateDelay(\"maxDelay\", options.maxDelay)\n }\n\n return makeAsyncSchedule(options.times, (retryAttempt) => {\n const delay = baseDelay * Math.pow(factor, retryAttempt - 1)\n return maxDelay === undefined ? delay : Math.min(delay, maxDelay)\n })\n}\n"],"mappings":"0UAiGa,EAAb,cAAoDA,EAAiB,iCAAiC,AAGnG,GAiBU,EAAb,cAA+CA,EAAiB,4BAA4B,AAKzF,GAgBU,EAAb,cAAgDA,EAAiB,6BAA6B,AAG3F,GA8BH,MAAM,EAAsB,GAAkB,CAC5C,GAAI,CAAC,OAAO,UAAU,EAAM,EAAI,EAAQ,EACtC,MAAM,IAAI,EAA+B,CACvC,MAAO,EACP,QAAS,2DAA2D,OAAO,EAAM,GAClF,CAAC,EAIA,GAAiB,EAA2C,IAAkC,CAClG,IAAM,EAAaC,EAAc,EAAM,CACvC,GAAIC,EAAa,EAAW,CAC1B,MAAM,IAAI,EAA0B,CAClC,QACA,QACA,QAAS,EAAW,MAAM,QAC1B,MAAO,EAAW,MACnB,CAAC,CAGJ,IAAM,EAASC,EAAkB,EAAW,MAAM,CAClD,GAAI,CAAC,OAAO,SAAS,EAAO,EAAI,EAAS,EACvC,MAAM,IAAI,EAA0B,CAClC,QACA,QACA,QAAS,YAAY,EAAM,2CAA2C,OAAO,EAAO,GACrF,CAAC,CAGJ,OAAO,GAGH,GAA0B,EAAgB,IAAkB,CAChE,GAAI,CAAC,OAAO,SAAS,EAAM,EAAI,GAAS,EACtC,MAAM,IAAI,EAA2B,CACnC,MAAO,EACP,QAAS,YAAY,EAAK,0CAA0C,OAAO,EAAM,GAClF,CAAC,EAIA,GACJ,EACA,KACuB,CACvB,KAAM,gBACN,MAAO,GACP,aACA,kBACD,EAEK,GACJ,EACA,KACwB,CACxB,KAAM,gBACN,MAAO,GACP,aACA,kBACD,EAcY,EAAU,IACrB,EAAmB,EAAM,CAClB,EAAiB,MAAa,EAAE,EAe5B,EAAS,GAAsD,CAC1E,EAAmB,EAAQ,MAAM,CACjC,IAAM,EAAQ,EAAc,QAAS,EAAQ,MAAM,CACnD,OAAO,EAAkB,EAAQ,UAAa,EAAM,EAgBzC,EAAe,GAA4D,CACtF,EAAmB,EAAQ,MAAM,CACjC,IAAM,EAAY,EAAc,YAAa,EAAQ,UAAU,CAEzD,EAAS,EAAQ,QAAU,EACjC,EAAuB,SAAU,EAAO,CAExC,IAAI,EAKJ,OAJI,EAAQ,WAAa,IAAA,KACvB,EAAW,EAAc,WAAY,EAAQ,SAAS,EAGjD,EAAkB,EAAQ,MAAQ,GAAiB,CACxD,IAAM,EAAQ,EAAqB,IAAQ,EAAe,GAC1D,OAAO,IAAa,IAAA,GAAY,EAAQ,KAAK,IAAI,EAAO,EAAS,EACjE"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { n as TaggedErrorFactory } from "./index-
|
|
2
|
-
import { n as InputError, t as Input } from "./index-
|
|
1
|
+
import { n as TaggedErrorFactory } from "./index-D-KxgnwF.mjs";
|
|
2
|
+
import { n as InputError, t as Input } from "./index-5QkUtJ-4.mjs";
|
|
3
3
|
|
|
4
4
|
//#region src/schedule/schedule.d.ts
|
|
5
5
|
declare namespace schedule_d_exports {
|
|
@@ -180,4 +180,4 @@ declare const fixed: (options: FixedScheduleOptions) => AsyncRetrySchedule;
|
|
|
180
180
|
declare const exponential: (options: ExponentialScheduleOptions) => AsyncRetrySchedule;
|
|
181
181
|
//#endregion
|
|
182
182
|
export { SyncRetrySchedule as n, schedule_d_exports as r, RetrySchedule as t };
|
|
183
|
-
//# sourceMappingURL=schedule-
|
|
183
|
+
//# sourceMappingURL=schedule-DiidMLcl.d.mts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schedule-
|
|
1
|
+
{"version":3,"file":"schedule-DiidMLcl.d.mts","names":[],"sources":["../src/schedule/schedule.ts"],"sourcesContent":[],"mappings":";;;;;;;AAoPA;AAiBA;AAmBA;;;;;;;;;;;;KAzOY,aAAA,GAAgB,oBAAoB;;;;;;;;;;;KAYpC,iBAAA;;;;;;;;;;;;;;;;KAiBA,kBAAA;;;;;;cAKX,qCAAA;;;;;;;;;;;;;;;cAgBY,8BAAA,SAAuC;;;;cAG/C,gCAAA;;;;;;;;;;;;;;;;cAiBQ,yBAAA,SAAkC;;SAEtC;;UAEC;;cACL,iCAAA;;;;;;;;;;;;;;;cAgBQ,0BAAA,SAAmC;;;;KAK3C,oBAAA;;;;;;kBAMa;;KAGb,0BAAA;;;;;;sBAMiB;;;;;;;;;;sBAUA;;;;;;;;;;;;;;cA4ET,2BAA0B;;;;;;;;;;;;;cAiB1B,iBAAkB,yBAAuB;;;;;;;;;;;;;;cAmBzC,uBAAwB,+BAA6B"}
|
package/dist/schema/index.d.mts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { t as schema_d_exports } from "../index-
|
|
1
|
+
import { t as schema_d_exports } from "../index-DlWm_PwP.mjs";
|
|
2
2
|
export { schema_d_exports as Schema };
|
package/dist/schema/index.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{t as e}from"../schema-
|
|
1
|
+
import{t as e}from"../schema-CT_wO7tN.mjs";export{e as Schema};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{t as e}from"./chunk-6rpU2rUb.mjs";import{t}from"./dual-CZhzZslG.mjs";import{n}from"./flow-D8_tllWl.mjs";import{t as r}from"./pipeable-COGyGMUV.mjs";import{i,t as a}from"./result-C74pRN2x.mjs";import{a as o,i as s,o as c,r as l,s as u,t as d}from"./data-W10ldR5l.mjs";function f(e){return typeof e==`object`&&e&&`key`in e?e.key:e}function p(e){return e.map(e=>({message:e.message,path:e.path?.map(f)}))}function m(e){return e.issues?a({issues:p(e.issues)}):i(e.value)}function h(e){return e instanceof Error&&e.message.length>0?e.message:typeof e==`string`&&e.length>0?e:`Schema validation failed.`}function g(e){return{issues:[{message:h(e)}]}}function _(e,t){try{let r=e[`~standard`].validate(t);return n(r)?Promise.resolve(r).then(e=>m(e),e=>a(g(e))):m(r)}catch(e){return a(g(e))}}function v(e,t,r){let i;try{i=e[`~standard`].validate(t)}catch(e){return a(g(e))}if(n(i))throw TypeError(`Async validation is not supported in ${r}.`);return m(i)}var y=class extends d(`CodecDecodeError`){},b=class extends d(`CodecDecodeValidationError`){},x=class extends d(`CodecEncodeValidationError`){},S=class extends d(`CodecEncodeError`){};const C={"~standard":{version:1,vendor:`@nicolastoulemont/std`,validate(e){return typeof e==`string`?{value:e}:{issues:[{message:`Expected string`}]}}}};function w(e){return t=>new b({side:e,error:t})}function T(e){return t=>new x({side:e,error:t})}function E(e,t=`Codec decode failed`){return e instanceof y?e:new y({message:t,cause:e})}function D(e,t=`Codec encode failed`){return e instanceof S?e:new S({message:t,cause:e})}function O(e,t){return e._tag===`Err`?a(t(e.error)):i(e.value)}function k(e,t){return n(e)?Promise.resolve(e).then(e=>O(e,t)):O(e,t)}function A(e,t){if(t._tag===`Err`)return a(w(`encoded`)(t.error));try{let r=e.decode(t.value);return n(r)?Promise.resolve(r).then(t=>k(_(e.decoded,t),w(`decoded`)),e=>a(E(e))):k(_(e.decoded,r),w(`decoded`))}catch(e){return a(E(e))}}function j(e,t){if(t._tag===`Err`)return a(T(`decoded`)(t.error));try{let r=e.encode(t.value);return n(r)?Promise.resolve(r).then(t=>k(_(e.encoded,t),T(`encoded`)),e=>a(D(e))):k(_(e.encoded,r),T(`encoded`))}catch(e){return a(D(e))}}function M(e){let t={decoded:e.decoded,encoded:e.encoded,decode(t){let r=_(e.encoded,t);return n(r)?Promise.resolve(r).then(t=>A(e,t)):A(e,r)},encode(t){let r=_(e.decoded,t);return n(r)?Promise.resolve(r).then(t=>j(e,t)):j(e,r)},pipe:r};return Object.freeze(t)}function N(e,t={}){return M({decoded:e,encoded:C,decode(e){try{return JSON.parse(e)}catch(e){throw E(e,`JSON parse failed`)}},encode(e){try{return JSON.stringify(e,t.replacer,t.space)}catch(e){throw D(e,`JSON stringify failed`)}}})}const P=Object.assign(M,{json:N});function F(e){return typeof e!=`object`||!e?!1:Object.getPrototypeOf(e)===null||Object.getPrototypeOf(e)===Object.prototype}function I(e){return t=>{let n=v(e,t,`Schema.struct()`);return n._tag===`Err`?a(n.error):F(n.value)?i(l(n.value)):a({issues:[{message:`Schema.struct() requires schemas with plain object outputs.`}]})}}function L(e){return typeof e==`function`&&`_variant`in e&&e._variant===!0}function R(e,t,n){return v(e,t,`ADT variant "${n}"`)}function z(e){return t=>F(t)&&`_tag`in t&&t._tag===e}function B(e){let t=new Set(e);return e=>F(e)&&`_tag`in e&&typeof e._tag==`string`&&t.has(e._tag)}function V(e,t){let n=z(e),r=c(e),o=u(e),s=n=>{let r=R(t,{...n,_tag:e},e);return r._tag===`Err`?a(r.error):i({...r.value,_tag:e})};return s._variant=!0,s._tag=e,s.schema=t,s.is=n,s.equals=r,s.hash=o,s}function H(e,t){let n=Object.keys(t),r={};for(let[e,n]of Object.entries(t))L(n)?n._tag===e?r[e]=n:r[e]=V(e,n.schema):r[e]=V(e,n);return{_name:e,is:B(n),equals:s(n),hash:o(n),...r}}var U=e({Codec:()=>W,codec:()=>J,is:()=>$,parse:()=>Y,refine:()=>Z,struct:()=>G,tagged:()=>K,union:()=>q});let W;(function(e){e.DecodeError=y,e.DecodeValidationError=b,e.EncodeValidationError=x,e.EncodeError=S})(W||={});const G=I,K=V,q=H,J=P;function Y(e){return t=>_(e,t)}const X=t(2,(e,t)=>v(t,e,`Schema.refine()`)._tag===`Ok`);function Z(...e){return X(...e)}const Q=t(2,(e,t)=>v(t,e,`Schema.is()`)._tag===`Ok`);function $(...e){return Q(...e)}export{U as t};
|
|
2
|
+
//# sourceMappingURL=schema-CT_wO7tN.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema-CT_wO7tN.mjs","names":["Result.err","Result.ok","validateSync","Data.TaggedError","codec","struct","validateSync","dataStruct","validateSchemaSync","tagged","union","tagged","structImpl","taggedImpl","unionImpl","codecImpl","validateSync"],"sources":["../src/schema/schema.shared.ts","../src/schema/schema.codec.ts","../src/shared/is-plain-object.ts","../src/schema/schema.struct.ts","../src/schema/schema.tagged-utils.ts","../src/schema/schema.tagged.ts","../src/schema/schema.union.ts","../src/schema/schema.ts"],"sourcesContent":["import { Result } from \"../result\"\nimport type { Result as ResultType } from \"../result/result.types\"\nimport { isPromise } from \"../shared/is-promise\"\nimport type { ValidationError, ValidationIssue } from \"./schema.types\"\nimport type { StandardSchemaV1 } from \"@standard-schema/spec\"\n\nfunction normalizePathSegment(segment: PropertyKey | { readonly key: PropertyKey }): PropertyKey {\n return typeof segment === \"object\" && segment !== null && \"key\" in segment ? segment.key : segment\n}\n\nfunction normalizeIssues(\n issues: NonNullable<StandardSchemaV1.Result<unknown>[\"issues\"]>,\n): ReadonlyArray<ValidationIssue> {\n return issues.map((issue) => ({\n message: issue.message,\n path: issue.path?.map(normalizePathSegment),\n }))\n}\n\nfunction toValidationResult<T>(result: StandardSchemaV1.Result<T>): ResultType<T, ValidationError> {\n if (result.issues) {\n return Result.err({ issues: normalizeIssues(result.issues) })\n }\n\n return Result.ok(result.value)\n}\n\nfunction toErrorMessage(error: unknown): string {\n if (error instanceof Error && error.message.length > 0) {\n return error.message\n }\n\n if (typeof error === \"string\" && error.length > 0) {\n return error\n }\n\n return \"Schema validation failed.\"\n}\n\nfunction toThrownValidationError(error: unknown): ValidationError {\n return {\n issues: [{ message: toErrorMessage(error) }],\n }\n}\n\nexport function validate<T>(\n schema: StandardSchemaV1<unknown, T>,\n value: unknown,\n): ResultType<T, ValidationError> | Promise<ResultType<T, ValidationError>> {\n try {\n const result = schema[\"~standard\"].validate(value)\n\n if (isPromise(result)) {\n return Promise.resolve(result).then(\n (validated) => toValidationResult(validated),\n (error) => Result.err(toThrownValidationError(error)),\n )\n }\n\n return toValidationResult(result)\n } catch (error) {\n return Result.err(toThrownValidationError(error))\n }\n}\n\nexport function validateSync<T>(\n schema: StandardSchemaV1<unknown, T>,\n value: unknown,\n operation: string,\n): ResultType<T, ValidationError> {\n let result: StandardSchemaV1.Result<T> | Promise<StandardSchemaV1.Result<T>>\n\n try {\n result = schema[\"~standard\"].validate(value)\n } catch (error) {\n return Result.err(toThrownValidationError(error))\n }\n\n if (isPromise(result)) {\n throw new TypeError(`Async validation is not supported in ${operation}.`)\n }\n\n return toValidationResult(result)\n}\n","import { Data } from \"../data\"\nimport { err, ok } from \"../result/result\"\nimport type { Result } from \"../result/result.types\"\nimport { isPromise } from \"../shared/is-promise\"\nimport { pipeable } from \"../shared/pipeable\"\nimport type { Pipeable } from \"../shared/pipeable\"\nimport { validate } from \"./schema.shared\"\nimport type { Input, Output, SyncSchema, ValidationError } from \"./schema.types\"\nimport type { StandardSchemaV1 } from \"@standard-schema/spec\"\n\nexport class CodecDecodeError extends Data.TaggedError(\"CodecDecodeError\")<{\n readonly message: string\n readonly cause?: unknown\n}> {}\n\nexport class CodecDecodeValidationError extends Data.TaggedError(\"CodecDecodeValidationError\")<{\n readonly side: \"encoded\" | \"decoded\"\n readonly error: ValidationError\n}> {}\n\nexport class CodecEncodeValidationError extends Data.TaggedError(\"CodecEncodeValidationError\")<{\n readonly side: \"decoded\" | \"encoded\"\n readonly error: ValidationError\n}> {}\n\nexport class CodecEncodeError extends Data.TaggedError(\"CodecEncodeError\")<{\n readonly message: string\n readonly cause?: unknown\n}> {}\n\nexport type CodecError = CodecDecodeError | CodecDecodeValidationError | CodecEncodeValidationError | CodecEncodeError\n\ntype MaybePromise<T> = T | Promise<T>\n\ntype IsNever<T> = [T] extends [never] ? true : false\n\ntype IsAsyncValidation<Decoded extends StandardSchemaV1, Encoded extends StandardSchemaV1> = Decoded extends SyncSchema\n ? Encoded extends SyncSchema\n ? false\n : true\n : true\n\ntype DecodeIsAsync<Decoded extends StandardSchemaV1, Encoded extends StandardSchemaV1, DecodeReturn> =\n IsAsyncValidation<Decoded, Encoded> extends true\n ? true\n : IsNever<DecodeReturn> extends true\n ? false\n : DecodeReturn extends Promise<unknown>\n ? true\n : false\n\ntype EncodeIsAsync<Decoded extends StandardSchemaV1, Encoded extends StandardSchemaV1, EncodeReturn> =\n IsAsyncValidation<Decoded, Encoded> extends true\n ? true\n : IsNever<EncodeReturn> extends true\n ? false\n : EncodeReturn extends Promise<unknown>\n ? true\n : false\n\ntype CodecMethodResult<T, IsAsync extends boolean> = IsAsync extends true\n ? Promise<Result<T, CodecError>>\n : Result<T, CodecError>\n\nexport type Codec<\n Decoded extends StandardSchemaV1 = StandardSchemaV1,\n Encoded extends StandardSchemaV1 = StandardSchemaV1,\n DecodeReturn = Input<Decoded>,\n EncodeReturn = Input<Encoded>,\n> = Pipeable & {\n readonly decoded: Decoded\n readonly encoded: Encoded\n decode(input: Input<Encoded>): CodecMethodResult<Output<Decoded>, DecodeIsAsync<Decoded, Encoded, DecodeReturn>>\n encode(value: Output<Decoded>): CodecMethodResult<Output<Encoded>, EncodeIsAsync<Decoded, Encoded, EncodeReturn>>\n}\n\nexport type Decoded<C> = C extends { readonly decoded: infer DecodedSchema extends StandardSchemaV1 }\n ? Output<DecodedSchema>\n : never\n\nexport type Encoded<C> = C extends { readonly encoded: infer EncodedSchema extends StandardSchemaV1 }\n ? Output<EncodedSchema>\n : never\n\nexport type DecodeInput<C> = C extends { decode(input: infer I): unknown } ? I : never\n\nexport type EncodeInput<C> = C extends { encode(input: infer I): unknown } ? I : never\n\nexport type CodecOptions<\n Decoded extends StandardSchemaV1,\n Encoded extends StandardSchemaV1,\n DecodeReturn extends MaybePromise<Input<Decoded>>,\n EncodeReturn extends MaybePromise<Input<Encoded>>,\n> = {\n readonly decoded: Decoded\n readonly encoded: Encoded\n readonly decode: (encoded: Output<Encoded>) => DecodeReturn\n readonly encode: (decoded: Output<Decoded>) => EncodeReturn\n}\n\nexport type JsonCodecOptions = {\n readonly replacer?: Parameters<typeof JSON.stringify>[1]\n readonly space?: Parameters<typeof JSON.stringify>[2]\n}\n\ntype UnknownInputSchema<S extends StandardSchemaV1> = unknown extends Input<S> ? S : never\n\nconst stringSchema: SyncSchema<string, string> = {\n \"~standard\": {\n version: 1,\n vendor: \"@nicolastoulemont/std\",\n validate(value: unknown) {\n if (typeof value === \"string\") {\n return { value }\n }\n\n return { issues: [{ message: \"Expected string\" }] }\n },\n },\n}\n\nfunction mapDecodeValidationError(side: \"encoded\" | \"decoded\") {\n return (error: ValidationError): CodecDecodeValidationError => new CodecDecodeValidationError({ side, error })\n}\n\nfunction mapEncodeValidationError(side: \"decoded\" | \"encoded\") {\n return (error: ValidationError): CodecEncodeValidationError => new CodecEncodeValidationError({ side, error })\n}\n\nfunction normalizeDecodeCause(cause: unknown, message = \"Codec decode failed\"): CodecDecodeError {\n if (cause instanceof CodecDecodeError) {\n return cause\n }\n\n return new CodecDecodeError({ message, cause })\n}\n\nfunction normalizeEncodeCause(cause: unknown, message = \"Codec encode failed\"): CodecEncodeError {\n if (cause instanceof CodecEncodeError) {\n return cause\n }\n\n return new CodecEncodeError({ message, cause })\n}\n\nfunction mapValidation<T, E extends CodecError>(\n result: Result<T, ValidationError>,\n mapError: (error: ValidationError) => E,\n): Result<T, E> {\n if (result._tag === \"Err\") {\n return err(mapError(result.error))\n }\n\n return ok(result.value)\n}\n\nfunction mapValidationMaybePromise<T, E extends CodecError>(\n result: Result<T, ValidationError> | Promise<Result<T, ValidationError>>,\n mapError: (error: ValidationError) => E,\n): Result<T, E> | Promise<Result<T, E>> {\n if (isPromise(result)) {\n return Promise.resolve(result).then((validated) => mapValidation(validated, mapError))\n }\n\n return mapValidation(result, mapError)\n}\n\nfunction continueDecode<\n Decoded extends StandardSchemaV1,\n Encoded extends StandardSchemaV1,\n DecodeReturn extends MaybePromise<Input<Decoded>>,\n EncodeReturn extends MaybePromise<Input<Encoded>>,\n>(\n options: CodecOptions<Decoded, Encoded, DecodeReturn, EncodeReturn>,\n encodedResult: Result<Output<Encoded>, ValidationError>,\n): Result<Output<Decoded>, CodecError> | Promise<Result<Output<Decoded>, CodecError>> {\n if (encodedResult._tag === \"Err\") {\n return err(mapDecodeValidationError(\"encoded\")(encodedResult.error))\n }\n\n try {\n const decodedInput = options.decode(encodedResult.value)\n\n if (isPromise(decodedInput)) {\n return Promise.resolve(decodedInput).then(\n (value) => mapValidationMaybePromise(validate(options.decoded, value), mapDecodeValidationError(\"decoded\")),\n (cause) => err(normalizeDecodeCause(cause)),\n )\n }\n\n return mapValidationMaybePromise(validate(options.decoded, decodedInput), mapDecodeValidationError(\"decoded\"))\n } catch (cause) {\n return err(normalizeDecodeCause(cause))\n }\n}\n\nfunction continueEncode<\n Decoded extends StandardSchemaV1,\n Encoded extends StandardSchemaV1,\n DecodeReturn extends MaybePromise<Input<Decoded>>,\n EncodeReturn extends MaybePromise<Input<Encoded>>,\n>(\n options: CodecOptions<Decoded, Encoded, DecodeReturn, EncodeReturn>,\n decodedResult: Result<Output<Decoded>, ValidationError>,\n): Result<Output<Encoded>, CodecError> | Promise<Result<Output<Encoded>, CodecError>> {\n if (decodedResult._tag === \"Err\") {\n return err(mapEncodeValidationError(\"decoded\")(decodedResult.error))\n }\n\n try {\n const encodedInput = options.encode(decodedResult.value)\n\n if (isPromise(encodedInput)) {\n return Promise.resolve(encodedInput).then(\n (value) => mapValidationMaybePromise(validate(options.encoded, value), mapEncodeValidationError(\"encoded\")),\n (cause) => err(normalizeEncodeCause(cause)),\n )\n }\n\n return mapValidationMaybePromise(validate(options.encoded, encodedInput), mapEncodeValidationError(\"encoded\"))\n } catch (cause) {\n return err(normalizeEncodeCause(cause))\n }\n}\n\n/**\n * Create a first-class bidirectional schema codec.\n *\n * Pipeline:\n * - decode: encoded input -> encoded validation -> decode transform -> decoded validation -> decoded output\n * - encode: decoded value -> decoded validation -> encode transform -> encoded validation -> encoded output\n */\nfunction makeCodec<\n Decoded extends StandardSchemaV1,\n Encoded extends StandardSchemaV1,\n DecodeReturn extends MaybePromise<Input<Decoded>>,\n EncodeReturn extends MaybePromise<Input<Encoded>>,\n>(\n options: CodecOptions<Decoded, Encoded, DecodeReturn, EncodeReturn>,\n): Codec<Decoded, Encoded, DecodeReturn, EncodeReturn> {\n const codec: Codec<Decoded, Encoded, DecodeReturn, EncodeReturn> = {\n decoded: options.decoded,\n encoded: options.encoded,\n decode(input) {\n const encodedResult = validate(options.encoded, input)\n\n if (isPromise(encodedResult)) {\n return Promise.resolve(encodedResult).then((result) => continueDecode(options, result)) as ReturnType<\n Codec<Decoded, Encoded, DecodeReturn, EncodeReturn>[\"decode\"]\n >\n }\n\n return continueDecode(options, encodedResult) as ReturnType<\n Codec<Decoded, Encoded, DecodeReturn, EncodeReturn>[\"decode\"]\n >\n },\n encode(value) {\n const decodedResult = validate(options.decoded, value)\n\n if (isPromise(decodedResult)) {\n return Promise.resolve(decodedResult).then((result) => continueEncode(options, result)) as ReturnType<\n Codec<Decoded, Encoded, DecodeReturn, EncodeReturn>[\"encode\"]\n >\n }\n\n return continueEncode(options, decodedResult) as ReturnType<\n Codec<Decoded, Encoded, DecodeReturn, EncodeReturn>[\"encode\"]\n >\n },\n pipe: pipeable,\n }\n\n return Object.freeze(codec)\n}\n\nfunction jsonCodec<S extends StandardSchemaV1>(schema: UnknownInputSchema<S>, options: JsonCodecOptions = {}) {\n return makeCodec({\n decoded: schema,\n encoded: stringSchema,\n decode(input: string): Input<S> {\n try {\n return JSON.parse(input) as Input<S>\n } catch (cause) {\n throw normalizeDecodeCause(cause, \"JSON parse failed\")\n }\n },\n encode(value: Output<S>) {\n try {\n return JSON.stringify(value, options.replacer, options.space) as string\n } catch (cause) {\n throw normalizeEncodeCause(cause, \"JSON stringify failed\")\n }\n },\n })\n}\n\nexport type CodecConstructor = {\n <\n Decoded extends StandardSchemaV1,\n Encoded extends StandardSchemaV1,\n DecodeReturn extends MaybePromise<Input<Decoded>>,\n EncodeReturn extends MaybePromise<Input<Encoded>>,\n >(\n options: CodecOptions<Decoded, Encoded, DecodeReturn, EncodeReturn>,\n ): Codec<Decoded, Encoded, DecodeReturn, EncodeReturn>\n json<S extends StandardSchemaV1>(\n schema: UnknownInputSchema<S>,\n options?: JsonCodecOptions,\n ): ReturnType<typeof jsonCodec<S>>\n}\n\nexport const codec = Object.assign(makeCodec, {\n json: jsonCodec,\n}) as CodecConstructor\n","/**\n * Check if a value is a plain object.\n * A plain object is an object created with `{}`, `Object.create(null)`, or `new Object()`.\n * Arrays, functions, dates, maps, etc. are not considered plain objects.\n */\nexport function isPlainObject(value: unknown): value is Record<PropertyKey, unknown> {\n if (value === null || typeof value !== \"object\") {\n return false\n }\n\n return Object.getPrototypeOf(value) === null || Object.getPrototypeOf(value) === Object.prototype\n}\n","import { struct as dataStruct } from \"../data/data.struct\"\nimport type { StructValue } from \"../data/data.types\"\nimport { err, ok } from \"../result/result\"\nimport type { Result } from \"../result/result.types\"\nimport { isPlainObject } from \"../shared/is-plain-object\"\nimport { validateSync } from \"./schema.shared\"\nimport type { Input, Output, SyncSchema, ValidationError } from \"./schema.types\"\n\ntype StructSchema<TInput = unknown, TOutput extends Record<string, unknown> = Record<string, unknown>> = SyncSchema<\n TInput,\n TOutput\n>\n\ntype StructConstructor<S extends StructSchema> = (input: Input<S>) => Result<StructValue<Output<S>>, ValidationError>\n\n/**\n * Create a sync schema-backed constructor for struct objects.\n *\n * The constructor validates through the provided schema, then wraps the\n * validated object with `Data.struct()` so the result is frozen and gains\n * structural `equals()` and `hash()` behavior.\n */\nexport function struct<S extends StructSchema>(schema: S): StructConstructor<S> {\n return (input: Input<S>) => {\n const result = validateSync(schema, input, \"Schema.struct()\")\n\n if (result._tag === \"Err\") {\n return err(result.error)\n }\n\n if (!isPlainObject(result.value)) {\n return err({\n issues: [{ message: \"Schema.struct() requires schemas with plain object outputs.\" }],\n })\n }\n\n return ok(dataStruct(result.value))\n }\n}\n","import { validateSync as validateSchemaSync } from \"../schema/schema.shared\"\nimport { isPlainObject } from \"../shared/is-plain-object\"\nimport type { TaggedSchema } from \"./schema.union.types\"\nimport type { StandardSchemaV1 } from \"@standard-schema/spec\"\n\n/**\n * Check if a value is an TaggedSchema created by tagged().\n * TaggedSchemas are callable functions with static properties.\n */\nexport function isVariant(value: unknown): value is TaggedSchema {\n return typeof value === \"function\" && \"_variant\" in value && value[\"_variant\"] === true\n}\n\n/**\n * Validate data using a Standard Schema, enforcing sync-only validation.\n * Throws if the schema returns a Promise.\n */\nexport function validateSync<T>(schema: StandardSchemaV1<unknown, T>, data: unknown, _tag: string) {\n return validateSchemaSync(schema, data, `ADT variant \"${_tag}\"`)\n}\n\n/**\n * Create a type guard function for a specific _tag.\n */\nexport function createIsGuard<Tag extends string, T>(\n _tag: Tag,\n): (value: unknown) => value is T & { readonly _tag: Tag } {\n return (value: unknown): value is T & { readonly _tag: Tag } => {\n return isPlainObject(value) && \"_tag\" in value && value[\"_tag\"] === _tag\n }\n}\n\n/**\n * Create a type guard function for multiple _tags (SchemaUnion root guard).\n */\nexport function createIsAnyGuard<T>(_tags: readonly string[]): (value: unknown) => value is T {\n const _tagSet = new Set(_tags)\n return (value: unknown): value is T => {\n return isPlainObject(value) && \"_tag\" in value && typeof value[\"_tag\"] === \"string\" && _tagSet.has(value[\"_tag\"])\n }\n}\n","import { createEqualsMethod, createHashMethod } from \"../equality/equality\"\nimport { ok, err } from \"../result/result\"\nimport type { Result } from \"../result/result.types\"\nimport type { ValidationError } from \"../schema/schema.types\"\nimport type { Discriminator } from \"../shared/discriminator.types\"\nimport { createIsGuard, validateSync } from \"./schema.tagged-utils\"\nimport type { TaggedSchemaInput, TaggedSchemaOutput, TaggedSchema } from \"./schema.union.types\"\nimport type { StandardSchemaV1 } from \"@standard-schema/spec\"\n\n/**\n * Create a standalone tagged variant from a Standard Schema.\n *\n * Variants can be used independently or composed into an SchemaUnion via union().\n * All defaults should be defined at the schema level (e.g., Zod's .default()).\n *\n * @template Tag - The string literal type for the _tag discriminator\n * @template S - The Standard Schema type for validation\n * @param _tag - The _tag discriminator value\n * @param schema - A Standard Schema compliant validator\n * @returns A callable TaggedSchema with is(), equals(), and hash() methods\n *\n * @see {@link union} for composing variants into discriminated unions\n * @see {@link tagged} for unvalidated tagged value constructors\n *\n * @example\n * ```ts\n * const CircleSchema = z.object({\n * radius: z.number().positive(),\n * color: z.string().default('blue')\n * })\n *\n * const Circle = tagged('Circle', CircleSchema)\n *\n * const result = Circle({ radius: 10 })\n * // { _tag: \"Ok\", value: { _tag: \"Circle\", radius: 10, color: \"blue\" } }\n *\n * Circle.is(someValue) // type guard\n * ```\n */\nexport function tagged<Tag extends string, S extends StandardSchemaV1>(_tag: Tag, schema: S): TaggedSchema<Tag, S>\n\n// Implementation\nexport function tagged<Tag extends string, S extends StandardSchemaV1>(_tag: Tag, schema: S): TaggedSchema<Tag, S> {\n type Output = TaggedSchemaOutput<S> & Discriminator<Tag>\n\n const isGuard = createIsGuard<Tag, Output>(_tag)\n const equals = createEqualsMethod<Tag, TaggedSchemaOutput<S>>(_tag)\n const hash = createHashMethod<Tag, TaggedSchemaOutput<S>>(_tag)\n\n // Constructor function\n const constructor = (input: TaggedSchemaInput<S>): Result<Output, ValidationError> => {\n // Add _tag to the input before validation\n // oxlint-disable-next-line no-unsafe-type-assertion -- Required for spreading generic input\n const taggedInput = { ...(input as object), _tag }\n\n // Validate using the schema\n const result = validateSync(schema, taggedInput, _tag)\n\n if (result._tag === \"Err\") {\n return err(result.error)\n }\n\n // Ensure _tag is in the output (schema might strip unknown keys)\n // oxlint-disable-next-line no-unsafe-type-assertion -- Required for output construction\n const output = { ...(result.value as object), _tag } as Output\n return ok(output)\n }\n\n // Attach static properties to constructor function\n constructor._variant = true as const\n constructor._tag = _tag\n constructor.schema = schema\n constructor.is = isGuard\n constructor.equals = equals\n constructor.hash = hash\n\n return constructor as TaggedSchema<Tag, S>\n}\n","import { createADTEqualsMethod, createADTHashMethod } from \"../equality/equality\"\nimport { tagged } from \"./schema.tagged\"\nimport { createIsAnyGuard, isVariant } from \"./schema.tagged-utils\"\nimport type { SchemaUnion, TaggedSchemaDef, TaggedSchema } from \"./schema.union.types\"\nimport type { StandardSchemaV1 } from \"@standard-schema/spec\"\n\n/**\n * Compose records or schemas into a discriminated union (SchemaUnion).\n *\n * Accepts either:\n * - Pre-built TaggedSchemas from tagged()\n * - Raw Standard Schema validators (will be wrapped internally)\n *\n * When using pre-built records, the object key overrides the original _tag.\n *\n * @template R - Record of variant names to TaggedSchemas or StandardSchema validators\n * @param name - The name of this SchemaUnion (for identification)\n * @param records - An object mapping _tag names to TaggedSchemas or schemas\n * @returns An SchemaUnion object with accessors for each variant\n *\n * @see {@link variant} for creating individual variant types\n * @see {@link match} for exhaustive pattern matching on SchemaUnion values\n *\n * @example\n * ```ts\n * // From pre-built variants\n * const Circle = tagged('Circle', CircleSchema)\n * const Square = tagged('Square', SquareSchema)\n * const Shape = union('Shape', { Circle, Square })\n *\n * // From raw schemas (JSON codec is automatically included)\n * const Shape = union('Shape', {\n * Circle: CircleSchema,\n * Square: SquareSchema\n * })\n *\n * // Mixed\n * const Shape = union('Shape', {\n * Circle, // Pre-built variant\n * Square: SquareSchema // Raw schema\n * })\n *\n * // Usage\n * Shape.Circle({ radius: 10 })\n * Shape.is(someValue) // type guard for any variant\n * Shape.Circle.is(someValue) // type guard for Circle\n * ```\n */\nexport function union<R extends Record<string, TaggedSchemaDef>>(name: string, records: R): SchemaUnion<R> {\n const tags = Object.keys(records)\n const variants: Record<string, TaggedSchema> = {}\n\n for (const [_tag, def] of Object.entries(records)) {\n if (isVariant(def)) {\n // Pre-built TaggedSchema - key overrides original _tag\n if (def._tag === _tag) {\n // _tag matches key, use as-is\n variants[_tag] = def\n } else {\n // _tag differs from key - create new variant with key as _tag\n variants[_tag] = tagged(_tag, def.schema)\n }\n } else {\n // Raw schema - wrap in variant\n // oxlint-disable-next-line no-unsafe-type-assertion -- def is a StandardSchemaV1 in this branch\n variants[_tag] = tagged(_tag, def as StandardSchemaV1)\n }\n }\n\n // Create the root type guard for any variant\n const isAnyVariant = createIsAnyGuard(tags)\n const equals = createADTEqualsMethod(tags)\n const hash = createADTHashMethod(tags)\n\n // oxlint-disable-next-line no-unsafe-type-assertion -- Required for generic SchemaUnion return type\n return {\n _name: name,\n is: isAnyVariant,\n equals,\n hash,\n ...variants,\n } as SchemaUnion<R>\n}\n","import type { Result as ResultType } from \"../result/result.types\"\n/**\n * Standard Schema-backed parsing and refinement helpers.\n *\n * **Mental model**\n * - `Schema.parse` is for boundary validation and parsing.\n * - `Schema.codec` is for bidirectional boundary encoding/decoding.\n * - `Schema.is` is a sync-only proof guard for direct in-memory checks.\n * - `Schema.refine` is the reusable preserved-shape guard for higher-order APIs like `Array.filter`.\n *\n * **Common tasks**\n * - Parse loose external data into validated subtypes.\n * - Build first-class codecs with validated encoded and decoded sides.\n * - Use `Schema.is` for direct control-flow checks against already-typed values.\n * - Reuse a schema as a preserved-shape predicate with `Schema.refine`.\n * - Name reusable narrowed types with `Schema.Refine<Base, typeof schema>` or exact schema outputs with `Schema.Infer<typeof schema>`.\n *\n * **Gotchas**\n * - `Schema.parse` may be sync or async based on the schema type you preserve.\n * - `Schema.refine` and `Schema.is` support both data-first and data-last styles.\n * - `Schema.refine` and `Schema.is` are sync-only.\n * - `Schema.is` and `Schema.refine` must only be used with proof schemas that validate the current value in place.\n * - Transforms, defaults, coercions, and other output-changing schemas should use `Schema.parse`.\n * - `Schema.is` narrows `unknown` to the exact schema output, but in direct control flow TypeScript preserves the current value shape.\n * - `Schema.refine` exists for the cases where you need that preserved shape to survive higher-order APIs like `Array.filter`.\n *\n * @module\n */\nimport { dual } from \"../shared/dual\"\nimport {\n CodecDecodeError,\n CodecDecodeValidationError,\n CodecEncodeError,\n CodecEncodeValidationError,\n codec as codecImpl,\n} from \"./schema.codec\"\nimport type {\n Codec as CodecType,\n CodecConstructor as CodecConstructorType,\n CodecError as CodecErrorType,\n CodecOptions as CodecOptionsType,\n Decoded as CodecDecoded,\n DecodeInput as CodecDecodeInput,\n Encoded as CodecEncoded,\n EncodeInput as CodecEncodeInput,\n JsonCodecOptions as CodecJsonOptions,\n} from \"./schema.codec\"\nimport { validate, validateSync } from \"./schema.shared\"\nimport { struct as structImpl } from \"./schema.struct\"\nimport { tagged as taggedImpl } from \"./schema.tagged\"\nimport type {\n Input,\n Output,\n Refine as Refined,\n SyncRefinementSchema,\n SyncSchema,\n ValidationError,\n} from \"./schema.types\"\nimport { union as unionImpl } from \"./schema.union\"\nimport type {\n UnionInfer as UnionInferType,\n UnionVariantNames as UnionVariantNamesType,\n UnionVariantOf as UnionVariantOfType,\n} from \"./schema.union.types\"\nimport type { StandardSchemaV1 } from \"@standard-schema/spec\"\n\nexport type {\n Infer,\n Input,\n Output,\n Refine,\n RefinementSchema,\n SyncRefinementSchema,\n SyncSchema,\n ValidationError,\n ValidationIssue,\n} from \"./schema.types\"\n\nexport type {\n SchemaUnion,\n TaggedSchema,\n TaggedSchemaDef,\n TaggedSchemaInput,\n TaggedSchemaOutput,\n} from \"./schema.union.types\"\nexport type { StructValue } from \"../data/data.types\"\n\nexport declare namespace Union {\n export type Infer<T> = UnionInferType<T>\n export type VariantNames<T> = UnionVariantNamesType<T>\n export type VariantOf<T, K extends string> = UnionVariantOfType<T, K>\n}\n\nexport namespace Codec {\n export const DecodeError = CodecDecodeError\n export const DecodeValidationError = CodecDecodeValidationError\n export const EncodeValidationError = CodecEncodeValidationError\n export const EncodeError = CodecEncodeError\n\n export type Codec<\n DecodedSchema extends StandardSchemaV1 = StandardSchemaV1,\n EncodedSchema extends StandardSchemaV1 = StandardSchemaV1,\n DecodeReturn extends Input<DecodedSchema> | Promise<Input<DecodedSchema>> = Input<DecodedSchema>,\n EncodeReturn extends Input<EncodedSchema> | Promise<Input<EncodedSchema>> = Input<EncodedSchema>,\n > = CodecType<DecodedSchema, EncodedSchema, DecodeReturn, EncodeReturn>\n\n export type Decoded<C> = CodecDecoded<C>\n export type Encoded<C> = CodecEncoded<C>\n export type DecodeInput<C> = CodecDecodeInput<C>\n export type EncodeInput<C> = CodecEncodeInput<C>\n export type Error = CodecErrorType\n export type Options<\n DecodedSchema extends StandardSchemaV1,\n EncodedSchema extends StandardSchemaV1,\n DecodeReturn extends Input<DecodedSchema> | Promise<Input<DecodedSchema>>,\n EncodeReturn extends Input<EncodedSchema> | Promise<Input<EncodedSchema>>,\n > = CodecOptionsType<DecodedSchema, EncodedSchema, DecodeReturn, EncodeReturn>\n export type JsonOptions = CodecJsonOptions\n export type Constructor = CodecConstructorType\n}\n\n/**\n * Construct sync schema-backed structs with structural value semantics.\n */\nexport const struct = structImpl\n\n/**\n * Construct schema-backed tagged values.\n */\nexport const tagged = taggedImpl\n\n/**\n * Compose schema-backed tagged values into a discriminated union.\n */\nexport const union = unionImpl\n\n/**\n * Construct first-class bidirectional schema codecs.\n */\nexport const codec = codecImpl\n\n/**\n * Create a schema-backed parser.\n *\n * For sync schemas the returned parser is sync.\n * For general Standard Schema values the returned parser is async.\n */\nexport function parse<S extends SyncSchema>(schema: S): (value: Input<S>) => ResultType<Output<S>, ValidationError>\nexport function parse<S extends StandardSchemaV1>(\n schema: S,\n): (value: Input<S>) => Promise<ResultType<Output<S>, ValidationError>>\nexport function parse<S extends StandardSchemaV1>(schema: S) {\n return (value: Input<S>) => {\n return validate(schema, value)\n }\n}\n\nexport type RefineFn = {\n <S extends SyncSchema, Base extends Input<S>>(value: Base, schema: S): value is Refined<Base, S>\n <S extends SyncSchema>(schema: S): <Base extends Input<S>>(value: Base) => value is Refined<Base, S>\n}\n\nexport type Is = {\n <Base, Sub extends Base>(value: Base, schema: SyncRefinementSchema<Base, Sub>): value is Sub\n <S extends SyncSchema>(value: unknown, schema: S): value is Output<S>\n <Base, Sub extends Base>(schema: SyncRefinementSchema<Base, Sub>): (value: Base) => value is Sub\n <S extends SyncSchema>(schema: S): (value: unknown) => value is Output<S>\n}\n\n/* oxlint-disable no-explicit-any, no-unsafe-return, no-unsafe-type-assertion -- dual() requires a single implementation signature */\nconst refineImpl = dual(2, (value: unknown, schema: SyncSchema) => {\n return validateSync(schema, value, \"Schema.refine()\")._tag === \"Ok\"\n}) as RefineFn\n\n/**\n * Create a sync-only schema-backed reusable type guard that preserves the original value shape.\n *\n * Use this when a schema validates only a subset of a broader in-memory value\n * and you need the preserved shape to survive higher-order APIs like\n * `Array.filter`. The narrowed type is `Base & Output<typeof schema>`, not the\n * exact schema output.\n *\n * Supports both data-first and data-last styles:\n * - Data-first: `Schema.refine(value, schema)`\n * - Data-last: `Schema.refine(schema)(value)`\n *\n * Only use this with sync proof schemas that validate properties already\n * present on the original value. Transforms, defaults, and coercions are not\n * safe here because they can change the schema output without changing the\n * original input value.\n */\nexport function refine<S extends SyncSchema, Base extends Input<S>>(value: Base, schema: S): value is Refined<Base, S>\nexport function refine<S extends SyncSchema>(\n schema: S,\n): <Base extends Input<S>>(value: Base) => value is Refined<Base, S>\nexport function refine(...args: [value: unknown, schema: SyncSchema] | [schema: SyncSchema]) {\n return (refineImpl as (...args: [unknown, SyncSchema] | [SyncSchema]) => boolean | ((value: unknown) => boolean))(\n ...args,\n )\n}\n\nconst isImpl = dual(2, (value: unknown, schema: SyncSchema) => {\n return validateSync(schema, value, \"Schema.is()\")._tag === \"Ok\"\n}) as Is\n\n/**\n * Create a sync-only schema-backed proof guard.\n *\n * On `unknown` values this narrows to the exact schema output. On already-typed\n * values, TypeScript preserves the current shape during direct control-flow\n * checks. Use `Schema.refine` when that preserved shape must survive\n * higher-order APIs like `Array.filter`.\n *\n * Supports both data-first and data-last styles:\n * - Data-first: `Schema.is(value, schema)`\n * - Data-last: `Schema.is(schema)(value)`\n */\nexport function is<Base, Sub extends Base>(value: Base, schema: SyncRefinementSchema<Base, Sub>): value is Sub\nexport function is<S extends SyncSchema>(value: unknown, schema: S): value is Output<S>\nexport function is<Base, Sub extends Base>(schema: SyncRefinementSchema<Base, Sub>): (value: Base) => value is Sub\nexport function is<S extends SyncSchema>(schema: S): (value: unknown) => value is Output<S>\nexport function is(...args: [value: unknown, schema: SyncSchema] | [schema: SyncSchema]) {\n return (isImpl as (...args: [unknown, SyncSchema] | [SyncSchema]) => boolean | ((value: unknown) => boolean))(...args)\n}\n/* oxlint-enable no-explicit-any, no-unsafe-return, no-unsafe-type-assertion */\n"],"mappings":"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"}
|
package/dist/scope/index.d.mts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { r as scope_d_exports } from "../scope-
|
|
1
|
+
import { r as scope_d_exports } from "../scope-7bLTmdRX.mjs";
|
|
2
2
|
export { scope_d_exports as Scope };
|
package/dist/scope/index.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{n as e}from"../scope-
|
|
1
|
+
import{n as e}from"../scope-D2AqJy7j.mjs";export{e as Scope};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { m as SyncFx, t as AsyncFx } from "./fx.types-
|
|
2
|
-
import { t as Result } from "./result.types-
|
|
1
|
+
import { m as SyncFx, t as AsyncFx } from "./fx.types-CpFKa-Jj.mjs";
|
|
2
|
+
import { t as Result } from "./result.types-CnhiVFEV.mjs";
|
|
3
3
|
|
|
4
4
|
//#region src/scope/scope.d.ts
|
|
5
5
|
declare namespace scope_d_exports {
|
|
@@ -24,7 +24,7 @@ type ScopeService = {
|
|
|
24
24
|
* @param finalizer - A function that returns an Fx to run on cleanup
|
|
25
25
|
* @returns An Fx that completes when the finalizer is registered
|
|
26
26
|
*/
|
|
27
|
-
addFinalizer(finalizer: () => SyncFx<void> | AsyncFx<void>): SyncFx<void>;
|
|
27
|
+
addFinalizer(finalizer: () => SyncFx<void, never, unknown> | AsyncFx<void, never, unknown>): SyncFx<void>;
|
|
28
28
|
/**
|
|
29
29
|
* Close the scope, running all finalizers in LIFO order.
|
|
30
30
|
*
|
|
@@ -70,4 +70,4 @@ declare function make(): ScopeService;
|
|
|
70
70
|
type ExcludeScope<R> = Exclude<R, ScopeService>;
|
|
71
71
|
//#endregion
|
|
72
72
|
export { ScopeService as n, scope_d_exports as r, ExcludeScope as t };
|
|
73
|
-
//# sourceMappingURL=scope-
|
|
73
|
+
//# sourceMappingURL=scope-7bLTmdRX.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scope-7bLTmdRX.d.mts","names":[],"sources":["../src/scope/scope.ts"],"sourcesContent":[],"mappings":";;;;;;;;;;;;;;;AAoDA;;;AAQ+F,KARnF,YAAA,GAQmF;EAQjF;;;;;AA0Bd;AAkHA;EAAsC,YAAA,CAAA,SAAA,EAAA,GAAA,GApJN,MAoJM,CAAA,IAAA,EAAA,KAAA,EAAA,OAAA,CAAA,GApJyB,OAoJzB,CAAA,IAAA,EAAA,KAAA,EAAA,OAAA,CAAA,CAAA,EApJyD,MAoJzD,CAAA,IAAA,CAAA;EAAG;;;;;;cA5I3B,2BAA2B,eAAe;;;;;;;UAQ9C;;;;;;;;;;;;;;;;;iBAkBM,IAAA,CAAA,GAAQ;;;;;;;;;;;;KAkHZ,kBAAkB,QAAQ,GAAG"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{t as e}from"./chunk-6rpU2rUb.mjs";import{t}from"./fx.types-Bg-Mmdm5.mjs";var n=e({make:()=>r});function r(){let e=[],n=!1,i=[];return{addFinalizer(r){return{_tag:`SyncFx`,[t]:{_A:()=>void 0,_E:()=>void 0,_R:()=>void 0},*[Symbol.iterator](){n||e.push(r)}}},close(r){return e.some(e=>e()._tag===`AsyncFx`)?{_tag:`AsyncFx`,[t]:{_A:()=>void 0,_E:()=>void 0,_R:()=>void 0},async*[Symbol.asyncIterator](){if(n)return;n=!0;for(let e of[...i].toReversed())yield*e.close(r);let t=[...e].toReversed();for(let e of t)yield*e()}}:{_tag:`SyncFx`,[t]:{_A:()=>void 0,_E:()=>void 0,_R:()=>void 0},*[Symbol.iterator](){if(n)return;n=!0;for(let e of[...i].toReversed())yield*e.close(r);let t=[...e].toReversed();for(let e of t)yield*e()}}},fork(){let e=r();return i.push(e),e}}}export{n,r as t};
|
|
2
|
+
//# sourceMappingURL=scope-D2AqJy7j.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scope-D2AqJy7j.mjs","names":[],"sources":["../src/scope/scope.ts"],"sourcesContent":["/**\n * Scope lifecycle management for registering and running finalizers.\n *\n * **Mental model**\n * - A scope tracks cleanup actions and executes them in LIFO order.\n * - `Layer.scoped` and `Provide.layer` rely on scope semantics.\n *\n * **Common tasks**\n * - Create scopes with `Scope.make`.\n * - Register cleanup with `scope.addFinalizer`.\n * - Close scopes with `scope.close`.\n *\n * **Gotchas**\n * - Child scopes close before parent finalizers.\n * - Async finalizers force async scope close.\n *\n * **Quickstart**\n *\n * @example\n * ```ts\n * import { Scope } from \"@nicolastoulemont/std\"\n *\n * import { Result } from \"@nicolastoulemont/std\"\n *\n * const scope = Scope.make()\n * const closeFx = scope.close(Result.ok(undefined))\n * // => SyncFx<void> | AsyncFx<void>\n * ```\n *\n * @module\n */\nimport { FxTypeId } from \"../fx/fx.types\"\nimport type { SyncFx, AsyncFx, FxYield } from \"../fx/fx.types\"\nimport type { Result } from \"../result/result.types\"\n\n/* oxlint-disable no-unsafe-type-assertion -- Scope encodes Fx phantom type slots and sync/async branch narrowing via assertions. */\n\n// ============================================================================\n// Scope Service\n// ============================================================================\n\n/**\n * Scope manages resource lifecycles with finalizers.\n * Finalizers run in LIFO (Last In, First Out) order when the scope closes.\n *\n * @example\n * ```ts\n * import { Scope } from \"@nicolastoulemont/std\"\n *\n * type Example = typeof Scope\n * ```\n */\nexport type ScopeService = {\n /**\n * Add a finalizer to be run when the scope closes.\n * Finalizers are run in LIFO order.\n *\n * @param finalizer - A function that returns an Fx to run on cleanup\n * @returns An Fx that completes when the finalizer is registered\n */\n addFinalizer(finalizer: () => SyncFx<void, never, unknown> | AsyncFx<void, never, unknown>): SyncFx<void>\n\n /**\n * Close the scope, running all finalizers in LIFO order.\n *\n * @param exit - The exit status of the computation\n * @returns An Fx that completes when all finalizers have run\n */\n close(exit: Result<unknown, unknown>): SyncFx<void> | AsyncFx<void>\n\n /**\n * Fork a child scope.\n * The child scope will be closed when the parent scope closes.\n *\n * @returns A new child scope\n */\n fork(): ScopeService\n}\n\n/**\n * Create a new Scope instance.\n * This is the concrete implementation of the ScopeService interface.\n *\n * @example\n * ```ts\n * import { Scope } from \"@nicolastoulemont/std\"\n *\n * import { Result } from \"@nicolastoulemont/std\"\n *\n * const scope = Scope.make()\n * const closeFx = scope.close(Result.ok(undefined))\n * // => SyncFx<void> | AsyncFx<void>\n * ```\n */\nexport function make(): ScopeService {\n type Finalizer = () => SyncFx<void, never, unknown> | AsyncFx<void, never, unknown>\n const finalizers: Finalizer[] = []\n let closed = false\n const children: ScopeService[] = []\n\n const scope: ScopeService = {\n addFinalizer(finalizer: Finalizer): SyncFx<void> {\n return {\n _tag: \"SyncFx\",\n [FxTypeId]: {\n _A: () => undefined as void,\n _E: () => undefined as never,\n _R: () => undefined as never,\n },\n // oxlint-disable-next-line require-yield\n *[Symbol.iterator](): Generator<FxYield<never, never>, void, unknown> {\n if (!closed) {\n finalizers.push(finalizer)\n }\n },\n } as SyncFx<void>\n },\n\n close(exit: Result<unknown, unknown>): SyncFx<void> | AsyncFx<void> {\n // Check if any finalizer is async\n const hasAsyncFinalizer = finalizers.some((f) => {\n const fx = f()\n return fx._tag === \"AsyncFx\"\n })\n\n if (hasAsyncFinalizer) {\n return {\n _tag: \"AsyncFx\",\n [FxTypeId]: {\n _A: () => undefined as void,\n _E: () => undefined as never,\n _R: () => undefined as never,\n },\n // oxlint-disable-next-line require-yield\n async *[Symbol.asyncIterator](): AsyncGenerator<FxYield<never, never>, void, unknown> {\n if (closed) return\n closed = true\n\n // Close children first\n for (const child of [...children].toReversed()) {\n const childClose = child.close(exit)\n yield* childClose\n }\n\n // Run finalizers in LIFO order\n const reversed = [...finalizers].toReversed()\n for (const finalizer of reversed) {\n const fx = finalizer()\n yield* fx as SyncFx<void> | AsyncFx<void>\n }\n },\n } as AsyncFx<void>\n }\n\n // Sync version\n return {\n _tag: \"SyncFx\",\n [FxTypeId]: {\n _A: () => undefined as void,\n _E: () => undefined as never,\n _R: () => undefined as never,\n },\n // oxlint-disable-next-line require-yield\n *[Symbol.iterator](): Generator<FxYield<never, never>, void, unknown> {\n if (closed) return\n closed = true\n\n // Close children first\n for (const child of [...children].toReversed()) {\n const childClose = child.close(exit)\n yield* childClose as SyncFx<void>\n }\n\n // Run finalizers in LIFO order\n const reversed = [...finalizers].toReversed()\n for (const finalizer of reversed) {\n const fx = finalizer()\n yield* fx as SyncFx<void>\n }\n },\n } as SyncFx<void>\n },\n\n fork(): ScopeService {\n const child = make()\n children.push(child)\n return child\n },\n }\n\n return scope\n}\n\n// ============================================================================\n// Helper Types\n// ============================================================================\n\n/**\n * Type utility to exclude Scope from requirements.\n * Used by Layer.scoped to auto-provide Scope.\n *\n * @example\n * ```ts\n * import { Scope } from \"@nicolastoulemont/std\"\n *\n * type Example = typeof Scope\n * ```\n */\nexport type ExcludeScope<R> = Exclude<R, ScopeService>\n\n/* oxlint-enable no-unsafe-type-assertion */\n"],"mappings":"sGA8FA,SAAgB,GAAqB,CAEnC,IAAM,EAA0B,EAAE,CAC9B,EAAS,GACP,EAA2B,EAAE,CA4FnC,MA1F4B,CAC1B,aAAa,EAAoC,CAC/C,MAAO,CACL,KAAM,UACL,GAAW,CACV,OAAU,IAAA,GACV,OAAU,IAAA,GACV,OAAU,IAAA,GACX,CAED,EAAE,OAAO,WAA6D,CAC/D,GACH,EAAW,KAAK,EAAU,EAG/B,EAGH,MAAM,EAA8D,CAqClE,OAnC0B,EAAW,KAAM,GAC9B,GAAG,CACJ,OAAS,UACnB,CAGO,CACL,KAAM,WACL,GAAW,CACV,OAAU,IAAA,GACV,OAAU,IAAA,GACV,OAAU,IAAA,GACX,CAED,OAAQ,OAAO,gBAAuE,CACpF,GAAI,EAAQ,OACZ,EAAS,GAGT,IAAK,IAAM,IAAS,CAAC,GAAG,EAAS,CAAC,YAAY,CAE5C,MADmB,EAAM,MAAM,EAAK,CAKtC,IAAM,EAAW,CAAC,GAAG,EAAW,CAAC,YAAY,CAC7C,IAAK,IAAM,KAAa,EAEtB,MADW,GAAW,EAI3B,CAII,CACL,KAAM,UACL,GAAW,CACV,OAAU,IAAA,GACV,OAAU,IAAA,GACV,OAAU,IAAA,GACX,CAED,EAAE,OAAO,WAA6D,CACpE,GAAI,EAAQ,OACZ,EAAS,GAGT,IAAK,IAAM,IAAS,CAAC,GAAG,EAAS,CAAC,YAAY,CAE5C,MADmB,EAAM,MAAM,EAAK,CAKtC,IAAM,EAAW,CAAC,GAAG,EAAW,CAAC,YAAY,CAC7C,IAAK,IAAM,KAAa,EAEtB,MADW,GAAW,EAI3B,EAGH,MAAqB,CACnB,IAAM,EAAQ,GAAM,CAEpB,OADA,EAAS,KAAK,EAAM,CACb,GAEV"}
|
package/dist/service/index.d.mts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { n as service_d_exports } from "../service-
|
|
1
|
+
import { n as service_d_exports } from "../service-C4xUfS_M.mjs";
|
|
2
2
|
export { service_d_exports as Service };
|
package/dist/service/index.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{t as e}from"../service-
|
|
1
|
+
import{t as e}from"../service-DHkeorS3.mjs";export{e as Service};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { i as Fx } from "./fx.types-
|
|
1
|
+
import { i as Fx } from "./fx.types-CpFKa-Jj.mjs";
|
|
2
2
|
|
|
3
3
|
//#region src/service/service.d.ts
|
|
4
4
|
declare namespace service_d_exports {
|
|
@@ -60,4 +60,4 @@ declare function Service<Self>(): <Key extends string>(key: Key) => ServiceClass
|
|
|
60
60
|
declare function tag<S>(key: string): ServiceClass<S>;
|
|
61
61
|
//#endregion
|
|
62
62
|
export { service_d_exports as n, ServiceClass as t };
|
|
63
|
-
//# sourceMappingURL=service-
|
|
63
|
+
//# sourceMappingURL=service-C4xUfS_M.d.mts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service-
|
|
1
|
+
{"version":3,"file":"service-C4xUfS_M.d.mts","names":[],"sources":["../src/service/service.ts"],"sourcesContent":[],"mappings":";;;;;;;;;;;;;;AAiDA;;;;;AAIkB,KAJN,YAIM,CAAA,IAAA,EAAA,YAAA,MAAA,GAAA,MAAA,CAAA,GAJ4C,EAI5C,CAJ+C,IAI/C,EAAA,KAAA,EAJ4D,IAI5D,CAAA,GAAA;EAO4B,SAAA,IAAA,EAAA,SAAA;EAAM,SAAA,GAAA,EATpC,GASoC;EAAnB,SAAA,KAAA,EAPf,IAOe;EAAyB;;;AAuB1D;;EAAgF,CAAA,MAAA,CAAA,QAAA,GAAA,EAvBzD,SAuByD,CAvB/C,YAuB+C,CAvBlC,IAuBkC,EAvB5B,GAuB4B,CAAA,EAvBtB,IAuBsB,EAAA,OAAA,CAAA;CAAM;;;;AA4CtF;;;;;;;;;;;;;iBA5CgB,2CAA2C,QAAQ,aAAa,MAAM,kBAAkB;;;;;;;;;;;;;iBA4CxF,qBAAqB,aAAa"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{t as e}from"./chunk-
|
|
2
|
-
//# sourceMappingURL=service-
|
|
1
|
+
import{t as e}from"./chunk-6rpU2rUb.mjs";import{t}from"./fx.types-Bg-Mmdm5.mjs";var n=e({Service:()=>r,tag:()=>i});function r(){return e=>{let n=class{static _tag=`Service`;static key=e;static _Self=void 0;static[t]={_A:()=>void 0,_E:()=>void 0,_R:()=>void 0};static*[Symbol.iterator](){return yield n}};return n}}function i(e){let n={_tag:`Service`,key:e,_Self:void 0,[t]:{_A:()=>void 0,_E:()=>void 0,_R:()=>void 0},*[Symbol.iterator](){return yield n}};return n}export{n as t};
|
|
2
|
+
//# sourceMappingURL=service-DHkeorS3.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service-
|
|
1
|
+
{"version":3,"file":"service-DHkeorS3.mjs","names":["tag"],"sources":["../src/service/service.ts"],"sourcesContent":["/**\n * Service tag constructors for `Fx` dependency injection.\n *\n * **Mental model**\n * - A service tag is both a runtime lookup key and a typed requirement marker.\n * - `Service()` and `tag()` create values that can be yielded in `Fx.gen`.\n *\n * **Common tasks**\n * - Define class-based services with `Service`.\n * - Define interface-only tags with `tag`.\n *\n * **Gotchas**\n * - Service keys must be globally unique in a context.\n * - Yielding a service tag requires the service to be provided.\n *\n * **Quickstart**\n *\n * @example\n * ```ts\n * import { Service } from \"@nicolastoulemont/std\"\n *\n * const Logger = Service.Service<{ log: (message: string) => void }>()(\"Logger\")\n * // => service class with key \"Logger\"\n * ```\n *\n * @module\n */\nimport { FxTypeId } from \"../fx/fx.types\"\nimport type { Fx } from \"../fx/fx.types\"\n\n/* oxlint-disable no-unsafe-type-assertion -- Service tags carry phantom generic metadata at runtime and require explicit type assertions. */\n\n// ============================================================================\n// Service Class Types\n// ============================================================================\n\n/**\n * The interface returned by Service()().\n * Acts as both a type tag and a runtime lookup key.\n * Implements Fx protocol with E = never (no errors) and R = Self (requires itself).\n * When yielded, yields itself (as Fx) for proper type inference.\n *\n * @example\n * ```ts\n * import { Service } from \"@nicolastoulemont/std\"\n *\n * type Example = typeof Service\n * ```\n */\nexport type ServiceClass<Self, Key extends string = string> = Fx<Self, never, Self> & {\n readonly _tag: \"Service\"\n readonly key: Key\n // Phantom type\n readonly _Self: Self\n\n /**\n * Yielding the service class in a gen computation\n * returns the service instance from context.\n * Yields the ServiceClass itself (which implements Fx) for type inference.\n */\n [Symbol.iterator](): Generator<ServiceClass<Self, Key>, Self, unknown>\n}\n\n// ============================================================================\n// Service Factory\n// ============================================================================\n\n/**\n * Define a service with a unique key.\n * The returned class acts as both a type and a runtime tag for lookup.\n *\n * Usage follows a double-invocation pattern:\n * - First call provides the Self type parameter\n * - Second call provides the unique key\n *\n * @example\n * ```ts\n * import { Service } from \"@nicolastoulemont/std\"\n *\n * const Logger = Service.Service<string>()(\"Logger\")\n * // => service class with key \"Logger\"\n * ```\n */\nexport function Service<Self>(): <Key extends string>(key: Key) => ServiceClass<Self, Key> & (new () => Self) {\n return <Key extends string>(key: Key): ServiceClass<Self, Key> & (new () => Self) => {\n // Create the base class with proper prototype\n // oxlint-disable-next-line typescript/no-extraneous-class\n const ServiceBase = class {\n static readonly _tag = \"Service\" as const\n static readonly key: Key = key\n static readonly _Self: Self = undefined as unknown as Self\n\n static readonly [FxTypeId] = {\n _A: () => undefined as unknown as Self,\n _E: () => undefined as never,\n _R: () => undefined as unknown as Self,\n };\n\n /**\n * Yielding the class returns the class itself (for type inference).\n * The runtime intercepts this and provides the actual service instance.\n */\n static *[Symbol.iterator](): Generator<typeof ServiceBase, Self, Self> {\n // Yield the class itself - it implements Fx<Self, never, Self>\n // The runtime will recognize ServiceClass and inject the service\n const serviceInstance = yield ServiceBase\n return serviceInstance\n }\n }\n\n // Return with correct typing\n return ServiceBase as unknown as ServiceClass<Self, Key> & (new () => Self)\n }\n}\n\n/**\n * Create a service tag without class syntax.\n * Useful for simple services that don't need class inheritance.\n *\n * @example\n * ```ts\n * import { Service } from \"@nicolastoulemont/std\"\n *\n * const Logger = Service.tag<string>(\"Logger\")\n * // => plain service tag with key \"Logger\"\n * ```\n */\nexport function tag<S>(key: string): ServiceClass<S> {\n const tag: ServiceClass<S> = {\n _tag: \"Service\",\n key,\n _Self: undefined as unknown as S,\n [FxTypeId]: {\n _A: () => undefined as unknown as S,\n _E: () => undefined as never,\n _R: () => undefined as unknown as S,\n },\n *[Symbol.iterator](): Generator<ServiceClass<S>, S, S> {\n // Yield the tag itself - it implements Fx<S, never, S>\n // The runtime will recognize ServiceClass and inject the service\n const serviceInstance = yield tag\n return serviceInstance\n },\n }\n return tag\n}\n\n/* oxlint-enable no-unsafe-type-assertion */\n"],"mappings":"mHAmFA,SAAgB,GAA8F,CAC5G,MAA4B,IAAyD,CAGnF,IAAM,EAAc,KAAM,CACxB,OAAgB,KAAO,UACvB,OAAgB,IAAW,EAC3B,OAAgB,MAAc,IAAA,GAE9B,OAAiB,GAAY,CAC3B,OAAU,IAAA,GACV,OAAU,IAAA,GACV,OAAU,IAAA,GACX,CAMD,QAAS,OAAO,WAAuD,CAIrE,OADwB,MAAM,IAMlC,OAAO,GAgBX,SAAgB,EAAO,EAA8B,CACnD,IAAMA,EAAuB,CAC3B,KAAM,UACN,MACA,MAAO,IAAA,IACN,GAAW,CACV,OAAU,IAAA,GACV,OAAU,IAAA,GACV,OAAU,IAAA,GACX,CACD,EAAE,OAAO,WAA8C,CAIrD,OADwB,MAAMA,GAGjC,CACD,OAAOA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{r as e}from"../trace-ByjppUes.mjs";export{e as Trace};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{t as e}from"./chunk-6rpU2rUb.mjs";import{t}from"./fx.types-Bg-Mmdm5.mjs";import{n}from"./context-7oKePrBY.mjs";import{g as r,h as i,i as a,m as o,p as s}from"./fx.runtime-B2_rL7h_.mjs";var c=e({annotate:()=>b,attribute:()=>x,current:()=>C,currentContext:()=>w,event:()=>S,layer:()=>E,native:()=>f,resolveFxSpanOptions:()=>D,span:()=>y,withParent:()=>T});let l=0;const u=e=>[...crypto.getRandomValues(new Uint8Array(e))].map(e=>e.toString(16).padStart(2,`0`)).join(``),d=e=>({traceId:e===void 0?u(16):(`context`in e?e.context:e).traceId,spanId:`${++l}`.padStart(16,`0`)}),f=()=>({startSpan:({name:e,kind:t,parent:n})=>{let r={},i=[],a=!1;return{name:e,context:d(n),kind:t,attribute(e,t){a||(r[e]=t)},event(e,t){a||i.push(t===void 0?{name:e}:{name:e,attributes:t})},end(){a=!0}}}}),p={_tag:`NoCurrentSpanError`},m=e=>typeof e==`object`&&!!e&&`startSpan`in e&&typeof e.startSpan==`function`,h=e=>typeof e==`object`&&!!e&&`context`in e&&`attribute`in e&&`event`in e,g=e=>m(e)?e:f(),_=e=>`context`in e?e.context:e,v=(e,t,n)=>{let r=g(e.tracer),i=n?.root===!0?void 0:n?.parent??(h(e.currentSpan),e.currentSpan),a={name:t,kind:n?.kind??`internal`,attributes:{...e.spanAttributes,...n?.attributes},links:[...e.spanLinks,...n?.links??[]],...i===void 0?{}:{parent:i},...n?.root===void 0?{}:{root:n.root}},o=r.startSpan(a);for(let[e,t]of Object.entries(n?.attributes??{}))o.attribute(e,t);return o};function y(e,t,n){return r(t,t=>{let r=v(t,e,n);return{...t,currentSpan:r,currentLocalSpan:r,spanAttributes:{},spanLinks:[]}},(e,t)=>{h(t.currentLocalSpan)&&t.currentLocalSpan.end(e)})}const b=e=>o(t=>{if(h(t.currentLocalSpan))for(let[n,r]of Object.entries(e))t.currentLocalSpan.attribute(n,r);return{...t,spanAttributes:{...t.spanAttributes,...e}}}),x=(e,t)=>b({[e]:t}),S=(e,t)=>o(n=>(h(n.currentLocalSpan)&&n.currentLocalSpan.event(e,t),n)),C=()=>({_tag:`SyncFx`,[t]:{_A:()=>void 0,_E:()=>p,_R:()=>void 0},*[Symbol.iterator](){let e=yield*a();if(h(e.currentLocalSpan))return e.currentLocalSpan;throw yield p,Error(`Unreachable`)}}),w=()=>({_tag:`SyncFx`,[t]:{_A:()=>void 0,_E:()=>void 0,_R:()=>void 0},*[Symbol.iterator](){let e=yield*a();return h(e.currentSpan)?e.currentSpan.context:e.currentSpan===void 0?void 0:_(e.currentSpan)}}),T=e=>t=>i(t,t=>({...t,currentSpan:e})),E=e=>({_tag:`Layer`,_ROut:void 0,_E:void 0,_RIn:void 0,_Sync:void 0,build:()=>({_tag:`SyncFx`,[t]:{_A:()=>void 0,_E:()=>void 0,_R:()=>void 0},*[Symbol.iterator](){return yield*o(s(e)),n()}})}),D=(e,t)=>{if(typeof e==`string`)return{name:e,options:{}};let{name:n,attributes:r,links:i,...a}=e,o=typeof r==`function`?r(...t):r,s=typeof i==`function`?i(...t):i;return{name:n,options:{...a,...o===void 0?{}:{attributes:o},...s===void 0?{}:{links:s}}}};export{y as n,c as r,D as t};
|
|
2
|
+
//# sourceMappingURL=trace-ByjppUes.mjs.map
|