unthrown 1.0.0 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +76 -12
- package/dist/index.d.cts +100 -35
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.mts +100 -35
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +75 -13
- package/dist/index.mjs.map +1 -1
- package/docs/index.md +181 -124
- package/package.json +1 -1
package/dist/index.d.mts
CHANGED
|
@@ -158,6 +158,23 @@ type ResultMethods<T, E> = {
|
|
|
158
158
|
* @param f - the side effect (its return value is ignored).
|
|
159
159
|
*/
|
|
160
160
|
tapErr(f: (error: E) => void): Result$1<T, E>;
|
|
161
|
+
/**
|
|
162
|
+
* Run a **failable** side effect on the error, keeping the original error but
|
|
163
|
+
* threading the effect's own error.
|
|
164
|
+
*
|
|
165
|
+
* @remarks
|
|
166
|
+
* The error-channel mirror of {@link ResultMethods.flatTap | flatTap}: `f`
|
|
167
|
+
* returns a `Result`, but its **success value is discarded** — on the effect's
|
|
168
|
+
* `Ok` the original `Err` flows through unchanged, while an `Err` (or `Defect`)
|
|
169
|
+
* from `f` short-circuits and threads its error (`Result<T, E | E2>`). Runs only
|
|
170
|
+
* on `Err`; `Ok` and `Defect` pass through. If `f` throws, the throw becomes a
|
|
171
|
+
* `Defect`. Use it for a failable effect _during_ error handling (e.g. writing
|
|
172
|
+
* the error to an audit log that may itself fail).
|
|
173
|
+
*
|
|
174
|
+
* @typeParam E2 - the error type the effect may introduce.
|
|
175
|
+
* @param f - the failable side effect; its `Ok` value is ignored.
|
|
176
|
+
*/
|
|
177
|
+
flatTapErr<E2>(f: (error: E) => Result$1<unknown, E2>): Result$1<T, E | E2>;
|
|
161
178
|
/**
|
|
162
179
|
* Recover from a `Defect` — the **only** combinator that can touch one.
|
|
163
180
|
*
|
|
@@ -244,7 +261,7 @@ type ResultMethods<T, E> = {
|
|
|
244
261
|
isOk(): this is OkView<T, E>; /** Whether this result is `Err` — narrows `this` to its {@link ErrView} on `true`. */
|
|
245
262
|
isErr(): this is ErrView<E, T>; /** Whether this result is a `Defect` — narrows `this` to its {@link DefectView} on `true`. */
|
|
246
263
|
isDefect(): this is DefectView<T, E>; /** Lift this synchronous `Result` into an {@link AsyncResult}. */
|
|
247
|
-
toAsync(): AsyncResult<T, E>;
|
|
264
|
+
toAsync(): AsyncResult$1<T, E>;
|
|
248
265
|
};
|
|
249
266
|
/** The `Ok` variant of a {@link Result}: a success carrying a `value`. */
|
|
250
267
|
type OkView<T, E = never> = ResultMethods<T, E> & {
|
|
@@ -334,33 +351,40 @@ type Awaitable<T> = {
|
|
|
334
351
|
* @typeParam T - the success value type.
|
|
335
352
|
* @typeParam E - the modeled error type.
|
|
336
353
|
*/
|
|
337
|
-
type AsyncResult<T, E> = Awaitable<Result$1<T, E>> & {
|
|
338
|
-
/** Asynchronous `map`. `f` is synchronous; a throw becomes a `Defect`. */map<U>(f: (value: T) => U): AsyncResult<U, E>;
|
|
354
|
+
type AsyncResult$1<T, E> = Awaitable<Result$1<T, E>> & {
|
|
355
|
+
/** Asynchronous `map`. `f` is synchronous; a throw becomes a `Defect`. */map<U>(f: (value: T) => U): AsyncResult$1<U, E>;
|
|
339
356
|
/**
|
|
340
357
|
* Asynchronous `flatMap`. `f` may return a `Result` **or** an `AsyncResult`
|
|
341
358
|
* (never a raw `Promise`); a throw becomes a `Defect`.
|
|
342
359
|
*/
|
|
343
|
-
flatMap<U, E2>(f: (value: T) => Result$1<U, E2> | AsyncResult<U, E2>): AsyncResult<U, E | E2>; /** Asynchronous `tap`. `f` is synchronous; a throw becomes a `Defect`. */
|
|
344
|
-
tap(f: (value: T) => void): AsyncResult<T, E>;
|
|
360
|
+
flatMap<U, E2>(f: (value: T) => Result$1<U, E2> | AsyncResult$1<U, E2>): AsyncResult$1<U, E | E2>; /** Asynchronous `tap`. `f` is synchronous; a throw becomes a `Defect`. */
|
|
361
|
+
tap(f: (value: T) => void): AsyncResult$1<T, E>;
|
|
345
362
|
/**
|
|
346
363
|
* Asynchronous `flatTap` — a failable tap that keeps the original value. `f`
|
|
347
364
|
* may return a `Result` **or** an `AsyncResult`; its `Ok` value is discarded,
|
|
348
365
|
* an `Err`/`Defect` short-circuits, and a throw becomes a `Defect`.
|
|
349
366
|
*/
|
|
350
|
-
flatTap<E2>(f: (value: T) => Result$1<unknown, E2> | AsyncResult<unknown, E2>): AsyncResult<T, E | E2>;
|
|
367
|
+
flatTap<E2>(f: (value: T) => Result$1<unknown, E2> | AsyncResult$1<unknown, E2>): AsyncResult$1<T, E | E2>;
|
|
351
368
|
/**
|
|
352
369
|
* Asynchronous `bind` (do-notation). `f` may return a `Result` **or** an
|
|
353
370
|
* `AsyncResult`; its value is bound under `name` in the accumulating scope.
|
|
354
371
|
*/
|
|
355
|
-
bind<K extends string, U, E2>(name: K, f: (scope: T) => Result$1<U, E2> | AsyncResult<U, E2>): AsyncResult<Bound<T, K, U>, E | E2>; /** Asynchronous `let` (do-notation). `f` returns a plain value, bound under `name`. */
|
|
356
|
-
let<K extends string, U>(name: K, f: (scope: T) => U): AsyncResult<Bound<T, K, U>, E>; /** Asynchronous `as`. */
|
|
357
|
-
as<U>(value: U): AsyncResult<U, E>; /** Asynchronous `mapErr`. `f` is synchronous; a throw becomes a `Defect`. */
|
|
358
|
-
mapErr<E2>(f: (error: E) => E2): AsyncResult<T, E2>; /** Asynchronous `orElse`. `f` may return a `Result` or an `AsyncResult`. */
|
|
359
|
-
orElse<U, E2>(f: (error: E) => Result$1<U, E2> | AsyncResult<U, E2>): AsyncResult<T | U, E2>; /** Asynchronous `recover`. `f` is synchronous; a throw becomes a `Defect`. */
|
|
360
|
-
recover<U>(f: (error: E) => U): AsyncResult<T | U, never>; /** Asynchronous `tapErr`. `f` is synchronous; a throw becomes a `Defect`. */
|
|
361
|
-
tapErr(f: (error: E) => void): AsyncResult<T, E>;
|
|
362
|
-
|
|
363
|
-
|
|
372
|
+
bind<K extends string, U, E2>(name: K, f: (scope: T) => Result$1<U, E2> | AsyncResult$1<U, E2>): AsyncResult$1<Bound<T, K, U>, E | E2>; /** Asynchronous `let` (do-notation). `f` returns a plain value, bound under `name`. */
|
|
373
|
+
let<K extends string, U>(name: K, f: (scope: T) => U): AsyncResult$1<Bound<T, K, U>, E>; /** Asynchronous `as`. */
|
|
374
|
+
as<U>(value: U): AsyncResult$1<U, E>; /** Asynchronous `mapErr`. `f` is synchronous; a throw becomes a `Defect`. */
|
|
375
|
+
mapErr<E2>(f: (error: E) => E2): AsyncResult$1<T, E2>; /** Asynchronous `orElse`. `f` may return a `Result` or an `AsyncResult`. */
|
|
376
|
+
orElse<U, E2>(f: (error: E) => Result$1<U, E2> | AsyncResult$1<U, E2>): AsyncResult$1<T | U, E2>; /** Asynchronous `recover`. `f` is synchronous; a throw becomes a `Defect`. */
|
|
377
|
+
recover<U>(f: (error: E) => U): AsyncResult$1<T | U, never>; /** Asynchronous `tapErr`. `f` is synchronous; a throw becomes a `Defect`. */
|
|
378
|
+
tapErr(f: (error: E) => void): AsyncResult$1<T, E>;
|
|
379
|
+
/**
|
|
380
|
+
* Asynchronous `flatTapErr` — a failable tap on the error that keeps the
|
|
381
|
+
* original error. `f` may return a `Result` **or** an `AsyncResult`; its `Ok`
|
|
382
|
+
* value is discarded, an `Err`/`Defect` from `f` threads through, and a throw
|
|
383
|
+
* becomes a `Defect`.
|
|
384
|
+
*/
|
|
385
|
+
flatTapErr<E2>(f: (error: E) => Result$1<unknown, E2> | AsyncResult$1<unknown, E2>): AsyncResult$1<T, E | E2>; /** Asynchronous `recoverDefect`. `f` may return a `Result` or an `AsyncResult`. */
|
|
386
|
+
recoverDefect<U, E2>(f: (cause: unknown) => Result$1<U, E2> | AsyncResult$1<U, E2>): AsyncResult$1<T | U, E | E2>; /** Asynchronous `tapDefect`. */
|
|
387
|
+
tapDefect(f: (cause: unknown) => void): AsyncResult$1<T, E>; /** Asynchronous `match`. Handlers are synchronous; resolves to `R`. */
|
|
364
388
|
match<R>(cases: {
|
|
365
389
|
ok: (value: T) => R;
|
|
366
390
|
err: (error: E) => R;
|
|
@@ -396,13 +420,13 @@ type ErrOf<R> = R extends {
|
|
|
396
420
|
*
|
|
397
421
|
* @typeParam R - the `AsyncResult` type to inspect.
|
|
398
422
|
*/
|
|
399
|
-
type AsyncOkOf<R> = R extends AsyncResult<infer T, unknown> ? T : never;
|
|
423
|
+
type AsyncOkOf<R> = R extends AsyncResult$1<infer T, unknown> ? T : never;
|
|
400
424
|
/**
|
|
401
425
|
* Extract the error type `E` from an {@link AsyncResult}.
|
|
402
426
|
*
|
|
403
427
|
* @typeParam R - the `AsyncResult` type to inspect.
|
|
404
428
|
*/
|
|
405
|
-
type AsyncErrOf<R> = R extends AsyncResult<unknown, infer E> ? E : never;
|
|
429
|
+
type AsyncErrOf<R> = R extends AsyncResult$1<unknown, infer E> ? E : never;
|
|
406
430
|
//#endregion
|
|
407
431
|
//#region src/constructors.d.ts
|
|
408
432
|
/**
|
|
@@ -477,6 +501,19 @@ declare class UnwrapError<E = unknown> extends Error {
|
|
|
477
501
|
readonly error: E;
|
|
478
502
|
constructor(error: E);
|
|
479
503
|
}
|
|
504
|
+
/**
|
|
505
|
+
* Type guard: is `x` a {@link Result} (any of `Ok` / `Err` / `Defect`)?
|
|
506
|
+
*
|
|
507
|
+
* @remarks
|
|
508
|
+
* Unlike {@link isOk} / {@link isErr} / {@link isDefect}, which narrow a value
|
|
509
|
+
* already known to be a `Result`, this narrows from `unknown` — useful at an
|
|
510
|
+
* untyped boundary. It checks the value carries the `Result` prototype, so a
|
|
511
|
+
* look-alike plain object (`{ tag: "Ok" }`) is **not** matched. An `AsyncResult`
|
|
512
|
+
* is not a `Result` and returns `false`.
|
|
513
|
+
*
|
|
514
|
+
* @returns `true` when `x` is a `Result` produced by this library.
|
|
515
|
+
*/
|
|
516
|
+
declare function isResult(x: unknown): x is Result$1<unknown, unknown>;
|
|
480
517
|
//#endregion
|
|
481
518
|
//#region src/defect.d.ts
|
|
482
519
|
declare const DEFECT: unique symbol;
|
|
@@ -618,7 +655,7 @@ declare function fromThrowable<A extends unknown[], T, R>(fn: (...args: A) => T,
|
|
|
618
655
|
* );
|
|
619
656
|
* ```
|
|
620
657
|
*/
|
|
621
|
-
declare function fromPromise<T, R>(promise: Promise<T> | (() => Promise<T>), qualify: (cause: unknown) => R): AsyncResult<T, Exclude<R, Defect>>;
|
|
658
|
+
declare function fromPromise<T, R>(promise: Promise<T> | (() => Promise<T>), qualify: (cause: unknown) => R): AsyncResult$1<T, Exclude<R, Defect>>;
|
|
622
659
|
/**
|
|
623
660
|
* Wrap a `Promise` asserted **not** to fail in any modeled way: any rejection
|
|
624
661
|
* becomes a `Defect`.
|
|
@@ -631,7 +668,7 @@ declare function fromPromise<T, R>(promise: Promise<T> | (() => Promise<T>), qua
|
|
|
631
668
|
* @typeParam T - the resolved value type.
|
|
632
669
|
* @param promise - the promise, or a thunk returning one.
|
|
633
670
|
*/
|
|
634
|
-
declare function fromSafePromise<T>(promise: Promise<T> | (() => Promise<T>)): AsyncResult<T, never>;
|
|
671
|
+
declare function fromSafePromise<T>(promise: Promise<T> | (() => Promise<T>)): AsyncResult$1<T, never>;
|
|
635
672
|
/**
|
|
636
673
|
* The success channel of {@link all} / {@link allAsync}: a **positional tuple**
|
|
637
674
|
* for a fixed-length input (including the empty tuple), or a homogeneous
|
|
@@ -653,7 +690,7 @@ type AllOk<Rs extends readonly unknown[], Ts extends readonly unknown[]> = numbe
|
|
|
653
690
|
/** A record of `Result`s — the input to {@link allFromDict}. */
|
|
654
691
|
type ResultRecord = Record<string, Result$1<unknown, unknown>>;
|
|
655
692
|
/** A record of `AsyncResult`s — the input to {@link allFromDictAsync}. */
|
|
656
|
-
type AsyncResultRecord = Record<string, AsyncResult<unknown, unknown>>;
|
|
693
|
+
type AsyncResultRecord = Record<string, AsyncResult$1<unknown, unknown>>;
|
|
657
694
|
/**
|
|
658
695
|
* Collect a tuple/array of {@link Result}s into a single `Result` of all their
|
|
659
696
|
* success values.
|
|
@@ -707,7 +744,7 @@ declare function allFromDict<R extends ResultRecord>(results: R): Result$1<{ [K
|
|
|
707
744
|
* await allAsync([fromSafePromise(a()), fromSafePromise(b())]);
|
|
708
745
|
* ```
|
|
709
746
|
*/
|
|
710
|
-
declare function allAsync<Rs extends readonly AsyncResult<unknown, unknown>[]>(results: readonly [...Rs]): AsyncResult<AllOk<Rs, { [K in keyof Rs]: AsyncOkOf<Rs[K]> }>, AsyncErrOf<Rs[number]>>;
|
|
747
|
+
declare function allAsync<Rs extends readonly AsyncResult$1<unknown, unknown>[]>(results: readonly [...Rs]): AsyncResult$1<AllOk<Rs, { [K in keyof Rs]: AsyncOkOf<Rs[K]> }>, AsyncErrOf<Rs[number]>>;
|
|
711
748
|
/**
|
|
712
749
|
* The asynchronous counterpart of {@link allFromDict}: combine a record of
|
|
713
750
|
* {@link AsyncResult}s into one `AsyncResult` of a record of their values.
|
|
@@ -722,17 +759,16 @@ declare function allAsync<Rs extends readonly AsyncResult<unknown, unknown>[]>(r
|
|
|
722
759
|
* await allFromDictAsync({ a: fromSafePromise(a()), b: fromSafePromise(b()) });
|
|
723
760
|
* ```
|
|
724
761
|
*/
|
|
725
|
-
declare function allFromDictAsync<R extends AsyncResultRecord>(results: R): AsyncResult<{ [K in keyof R]: AsyncOkOf<R[K]> }, AsyncErrOf<R[keyof R]>>;
|
|
762
|
+
declare function allFromDictAsync<R extends AsyncResultRecord>(results: R): AsyncResult$1<{ [K in keyof R]: AsyncOkOf<R[K]> }, AsyncErrOf<R[keyof R]>>;
|
|
726
763
|
//#endregion
|
|
727
764
|
//#region src/facade.d.ts
|
|
728
765
|
/**
|
|
729
|
-
* Companion object grouping the
|
|
730
|
-
* discoverable namespace: {@link Result.Ok}, {@link Result.Err},
|
|
731
|
-
* {@link Result.Defect}, {@link Result.
|
|
732
|
-
* {@link Result.
|
|
733
|
-
* {@link Result.
|
|
734
|
-
* {@link Result.
|
|
735
|
-
* {@link Result.isDefect}.
|
|
766
|
+
* Companion object grouping the **`Result`-producing** entry points under a
|
|
767
|
+
* single, discoverable namespace: {@link Result.Ok}, {@link Result.Err},
|
|
768
|
+
* {@link Result.Defect}, {@link Result.Do}, {@link Result.fromNullable},
|
|
769
|
+
* {@link Result.fromThrowable}, {@link Result.all}, {@link Result.allFromDict},
|
|
770
|
+
* {@link Result.isOk}, {@link Result.isErr}, {@link Result.isDefect},
|
|
771
|
+
* {@link Result.isResult}.
|
|
736
772
|
*
|
|
737
773
|
* @remarks
|
|
738
774
|
* Purely additive sugar — each member **is** the corresponding free function.
|
|
@@ -740,6 +776,10 @@ declare function allFromDictAsync<R extends AsyncResultRecord>(results: R): Asyn
|
|
|
740
776
|
* `{ Ok }` never pulls this object in. The value `Result` and the type
|
|
741
777
|
* {@link Result} share one name (the companion-object pattern).
|
|
742
778
|
*
|
|
779
|
+
* The **async** entry points live on the sibling {@link AsyncResult} companion
|
|
780
|
+
* (`AsyncResult.fromPromise`, `AsyncResult.all`, …), grouped by what they
|
|
781
|
+
* return — a static lives in exactly one namespace.
|
|
782
|
+
*
|
|
743
783
|
* @example
|
|
744
784
|
* ```ts
|
|
745
785
|
* import { Result } from "unthrown";
|
|
@@ -753,17 +793,42 @@ declare const Result: {
|
|
|
753
793
|
readonly Do: typeof Do;
|
|
754
794
|
readonly fromNullable: typeof fromNullable;
|
|
755
795
|
readonly fromThrowable: typeof fromThrowable;
|
|
756
|
-
readonly fromPromise: typeof fromPromise;
|
|
757
|
-
readonly fromSafePromise: typeof fromSafePromise;
|
|
758
796
|
readonly all: typeof all;
|
|
759
|
-
readonly allAsync: typeof allAsync;
|
|
760
797
|
readonly allFromDict: typeof allFromDict;
|
|
761
|
-
readonly allFromDictAsync: typeof allFromDictAsync;
|
|
762
798
|
readonly isOk: typeof isOk;
|
|
763
799
|
readonly isErr: typeof isErr;
|
|
764
800
|
readonly isDefect: typeof isDefect;
|
|
801
|
+
readonly isResult: typeof isResult;
|
|
765
802
|
};
|
|
766
803
|
type Result<T, E> = Result$1<T, E>;
|
|
804
|
+
/**
|
|
805
|
+
* Companion object grouping the **`AsyncResult`-producing** entry points under
|
|
806
|
+
* the matching namespace: {@link AsyncResult.fromPromise},
|
|
807
|
+
* {@link AsyncResult.fromSafePromise}, {@link AsyncResult.all},
|
|
808
|
+
* {@link AsyncResult.allFromDict}.
|
|
809
|
+
*
|
|
810
|
+
* @remarks
|
|
811
|
+
* The async sibling of {@link Result}. Statics are grouped by what they
|
|
812
|
+
* **return**, so `fromPromise`/`fromSafePromise` and the async aggregates sit
|
|
813
|
+
* here rather than on {@link Result}; the namespace already conveys "async", so
|
|
814
|
+
* the aggregates drop the `Async` suffix (`AsyncResult.all` is the free function
|
|
815
|
+
* `allAsync`; `AsyncResult.allFromDict` is `allFromDictAsync`). Like
|
|
816
|
+
* {@link Result}, the free functions remain the primary, tree-shakeable API; the
|
|
817
|
+
* value `AsyncResult` and the type {@link AsyncResult} share one name.
|
|
818
|
+
*
|
|
819
|
+
* @example
|
|
820
|
+
* ```ts
|
|
821
|
+
* import { AsyncResult, Defect } from "unthrown";
|
|
822
|
+
* const user = await AsyncResult.fromPromise(fetchUser(id), (c) => Defect(c));
|
|
823
|
+
* ```
|
|
824
|
+
*/
|
|
825
|
+
declare const AsyncResult: {
|
|
826
|
+
readonly fromPromise: typeof fromPromise;
|
|
827
|
+
readonly fromSafePromise: typeof fromSafePromise;
|
|
828
|
+
readonly all: typeof allAsync;
|
|
829
|
+
readonly allFromDict: typeof allFromDictAsync;
|
|
830
|
+
};
|
|
831
|
+
type AsyncResult<T, E> = AsyncResult$1<T, E>;
|
|
767
832
|
//#endregion
|
|
768
833
|
//#region src/tagged.d.ts
|
|
769
834
|
type Props = Record<string, unknown>;
|
|
@@ -885,7 +950,7 @@ declare function matchTags<T, E extends {
|
|
|
885
950
|
}, R>(result: Result$1<T, E>, handlers: TagHandlers<T, E, R>): R;
|
|
886
951
|
declare function matchTags<T, E extends {
|
|
887
952
|
_tag: string;
|
|
888
|
-
}, R>(result: AsyncResult<T, E>, handlers: TagHandlers<T, E, R>): Promise<R>;
|
|
953
|
+
}, R>(result: AsyncResult$1<T, E>, handlers: TagHandlers<T, E, R>): Promise<R>;
|
|
889
954
|
//#endregion
|
|
890
|
-
export { type AsyncErrOf, type AsyncOkOf,
|
|
955
|
+
export { type AsyncErrOf, type AsyncOkOf, AsyncResult, type Awaitable, Defect, type DefectView, Do, Err, type ErrOf, type ErrView, Ok, type OkOf, type OkView, Result, type TagHandlers, TaggedError, type TaggedErrorConstructor, type TaggedErrorInstance, UnwrapError, all, allAsync, allFromDict, allFromDictAsync, fromNullable, fromPromise, fromSafePromise, fromThrowable, isDefect, isErr, isOk, isResult, matchTags };
|
|
891
956
|
//# sourceMappingURL=index.d.mts.map
|
package/dist/index.d.mts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.mts","names":[],"sources":["../src/types.ts","../src/constructors.ts","../src/core.ts","../src/defect.ts","../src/do.ts","../src/interop.ts","../src/facade.ts","../src/tagged.ts"],"mappings":";;AAQA;;;;;KAAY,QAAA,oBAA4B,CAAA,GAAI,CAAA,CAAE,CAAA;;;;;;;AAAC;AAU/C;KAAY,KAAA,2BAAgC,QAAA,CAAS,IAAA,CAAK,CAAA,EAAG,CAAA,qBAAsB,CAAA,GAAI,CAAA;;;;;;;;;;KAW3E,aAAA;EAXgC;;;;;;;;AAA4C;EAqBtF,GAAA,IAAO,CAAA,GAAI,KAAA,EAAO,CAAA,KAAM,CAAA,GAAI,QAAA,CAAO,CAAA,EAAG,CAAA;EAVf;;;;;;;;;;EAqBvB,OAAA,QAAe,CAAA,GAAI,KAAA,EAAO,CAAA,KAAM,QAAA,CAAO,CAAA,EAAG,EAAA,IAAM,QAAA,CAAO,CAAA,EAAG,CAAA,GAAI,EAAA;EAAP;;;;;;;;EASvD,GAAA,CAAI,CAAA,GAAI,KAAA,EAAO,CAAA,YAAa,QAAA,CAAO,CAAA,EAAG,CAAA;EAiBO;;;;;;;;;;;;;;;;EAA7C,OAAA,KAAY,CAAA,GAAI,KAAA,EAAO,CAAA,KAAM,QAAA,UAAgB,EAAA,IAAM,QAAA,CAAO,CAAA,EAAG,CAAA,GAAI,EAAA;EAuB9D;;;;;;;;;;;;;;;;;;;EAHH,IAAA,0BACE,IAAA,EAAM,CAAA,EACN,CAAA,GAAI,KAAA,EAAO,CAAA,KAAM,QAAA,CAAO,CAAA,EAAG,EAAA,IAC1B,QAAA,CAAO,KAAA,CAAM,CAAA,EAAG,CAAA,EAAG,CAAA,GAAI,CAAA,GAAI,EAAA;EA6CQ;;;;;;;;;;;;;;EA9BtC,GAAA,sBAAyB,IAAA,EAAM,CAAA,EAAG,CAAA,GAAI,KAAA,EAAO,CAAA,KAAM,CAAA,GAAI,QAAA,CAAO,KAAA,CAAM,CAAA,EAAG,CAAA,EAAG,CAAA,GAAI,CAAA;EAoD/C;;;;;;;EA5C/B,EAAA,IAAM,KAAA,EAAO,CAAA,GAAI,QAAA,CAAO,CAAA,EAAG,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.mts","names":[],"sources":["../src/types.ts","../src/constructors.ts","../src/core.ts","../src/defect.ts","../src/do.ts","../src/interop.ts","../src/facade.ts","../src/tagged.ts"],"mappings":"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"}
|
package/dist/index.mjs
CHANGED
|
@@ -126,6 +126,15 @@ var Res = class {
|
|
|
126
126
|
return defectRes(cause);
|
|
127
127
|
}
|
|
128
128
|
}
|
|
129
|
+
flatTapErr(f) {
|
|
130
|
+
if (this.tag !== "Err") return this;
|
|
131
|
+
try {
|
|
132
|
+
const r = f(this.error);
|
|
133
|
+
return r.tag === "Ok" ? this : passThrough(r);
|
|
134
|
+
} catch (cause) {
|
|
135
|
+
return defectRes(cause);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
129
138
|
recoverDefect(f) {
|
|
130
139
|
if (this.tag !== "Defect") return this;
|
|
131
140
|
try {
|
|
@@ -231,6 +240,21 @@ function defectRes(cause) {
|
|
|
231
240
|
});
|
|
232
241
|
}
|
|
233
242
|
/**
|
|
243
|
+
* Type guard: is `x` a {@link Result} (any of `Ok` / `Err` / `Defect`)?
|
|
244
|
+
*
|
|
245
|
+
* @remarks
|
|
246
|
+
* Unlike {@link isOk} / {@link isErr} / {@link isDefect}, which narrow a value
|
|
247
|
+
* already known to be a `Result`, this narrows from `unknown` — useful at an
|
|
248
|
+
* untyped boundary. It checks the value carries the `Result` prototype, so a
|
|
249
|
+
* look-alike plain object (`{ tag: "Ok" }`) is **not** matched. An `AsyncResult`
|
|
250
|
+
* is not a `Result` and returns `false`.
|
|
251
|
+
*
|
|
252
|
+
* @returns `true` when `x` is a `Result` produced by this library.
|
|
253
|
+
*/
|
|
254
|
+
function isResult(x) {
|
|
255
|
+
return x instanceof Res;
|
|
256
|
+
}
|
|
257
|
+
/**
|
|
234
258
|
* Reuse a non-matching variant (an `Err` or `Defect`) as a differently-typed
|
|
235
259
|
* `Result`, with no runtime work. Sound because the passed-through variant
|
|
236
260
|
* carries no value of the changed success type, so retyping it is a no-op — only
|
|
@@ -394,6 +418,17 @@ var AsyncRes = class AsyncRes {
|
|
|
394
418
|
}
|
|
395
419
|
}));
|
|
396
420
|
}
|
|
421
|
+
flatTapErr(f) {
|
|
422
|
+
return new AsyncRes(this.promise.then(async (r) => {
|
|
423
|
+
if (r.tag !== "Err") return passThrough(r);
|
|
424
|
+
try {
|
|
425
|
+
const inner = await f(r.error);
|
|
426
|
+
return inner.tag === "Ok" ? passThrough(r) : passThrough(inner);
|
|
427
|
+
} catch (cause) {
|
|
428
|
+
return defectRes(cause);
|
|
429
|
+
}
|
|
430
|
+
}));
|
|
431
|
+
}
|
|
397
432
|
recoverDefect(f) {
|
|
398
433
|
return new AsyncRes(this.promise.then(async (r) => {
|
|
399
434
|
if (r.tag !== "Defect") return r;
|
|
@@ -809,13 +844,12 @@ function allFromDictAsync(results) {
|
|
|
809
844
|
//#endregion
|
|
810
845
|
//#region src/facade.ts
|
|
811
846
|
/**
|
|
812
|
-
* Companion object grouping the
|
|
813
|
-
* discoverable namespace: {@link Result.Ok}, {@link Result.Err},
|
|
814
|
-
* {@link Result.Defect}, {@link Result.
|
|
815
|
-
* {@link Result.
|
|
816
|
-
* {@link Result.
|
|
817
|
-
* {@link Result.
|
|
818
|
-
* {@link Result.isDefect}.
|
|
847
|
+
* Companion object grouping the **`Result`-producing** entry points under a
|
|
848
|
+
* single, discoverable namespace: {@link Result.Ok}, {@link Result.Err},
|
|
849
|
+
* {@link Result.Defect}, {@link Result.Do}, {@link Result.fromNullable},
|
|
850
|
+
* {@link Result.fromThrowable}, {@link Result.all}, {@link Result.allFromDict},
|
|
851
|
+
* {@link Result.isOk}, {@link Result.isErr}, {@link Result.isDefect},
|
|
852
|
+
* {@link Result.isResult}.
|
|
819
853
|
*
|
|
820
854
|
* @remarks
|
|
821
855
|
* Purely additive sugar — each member **is** the corresponding free function.
|
|
@@ -823,6 +857,10 @@ function allFromDictAsync(results) {
|
|
|
823
857
|
* `{ Ok }` never pulls this object in. The value `Result` and the type
|
|
824
858
|
* {@link Result} share one name (the companion-object pattern).
|
|
825
859
|
*
|
|
860
|
+
* The **async** entry points live on the sibling {@link AsyncResult} companion
|
|
861
|
+
* (`AsyncResult.fromPromise`, `AsyncResult.all`, …), grouped by what they
|
|
862
|
+
* return — a static lives in exactly one namespace.
|
|
863
|
+
*
|
|
826
864
|
* @example
|
|
827
865
|
* ```ts
|
|
828
866
|
* import { Result } from "unthrown";
|
|
@@ -836,15 +874,39 @@ const Result = {
|
|
|
836
874
|
Do,
|
|
837
875
|
fromNullable,
|
|
838
876
|
fromThrowable,
|
|
839
|
-
fromPromise,
|
|
840
|
-
fromSafePromise,
|
|
841
877
|
all,
|
|
842
|
-
allAsync,
|
|
843
878
|
allFromDict,
|
|
844
|
-
allFromDictAsync,
|
|
845
879
|
isOk,
|
|
846
880
|
isErr,
|
|
847
|
-
isDefect
|
|
881
|
+
isDefect,
|
|
882
|
+
isResult
|
|
883
|
+
};
|
|
884
|
+
/**
|
|
885
|
+
* Companion object grouping the **`AsyncResult`-producing** entry points under
|
|
886
|
+
* the matching namespace: {@link AsyncResult.fromPromise},
|
|
887
|
+
* {@link AsyncResult.fromSafePromise}, {@link AsyncResult.all},
|
|
888
|
+
* {@link AsyncResult.allFromDict}.
|
|
889
|
+
*
|
|
890
|
+
* @remarks
|
|
891
|
+
* The async sibling of {@link Result}. Statics are grouped by what they
|
|
892
|
+
* **return**, so `fromPromise`/`fromSafePromise` and the async aggregates sit
|
|
893
|
+
* here rather than on {@link Result}; the namespace already conveys "async", so
|
|
894
|
+
* the aggregates drop the `Async` suffix (`AsyncResult.all` is the free function
|
|
895
|
+
* `allAsync`; `AsyncResult.allFromDict` is `allFromDictAsync`). Like
|
|
896
|
+
* {@link Result}, the free functions remain the primary, tree-shakeable API; the
|
|
897
|
+
* value `AsyncResult` and the type {@link AsyncResult} share one name.
|
|
898
|
+
*
|
|
899
|
+
* @example
|
|
900
|
+
* ```ts
|
|
901
|
+
* import { AsyncResult, Defect } from "unthrown";
|
|
902
|
+
* const user = await AsyncResult.fromPromise(fetchUser(id), (c) => Defect(c));
|
|
903
|
+
* ```
|
|
904
|
+
*/
|
|
905
|
+
const AsyncResult = {
|
|
906
|
+
fromPromise,
|
|
907
|
+
fromSafePromise,
|
|
908
|
+
all: allAsync,
|
|
909
|
+
allFromDict: allFromDictAsync
|
|
848
910
|
};
|
|
849
911
|
//#endregion
|
|
850
912
|
//#region src/tagged.ts
|
|
@@ -914,6 +976,6 @@ function matchTags(result, handlers) {
|
|
|
914
976
|
});
|
|
915
977
|
}
|
|
916
978
|
//#endregion
|
|
917
|
-
export { Defect, Do, Err, Ok, Result, TaggedError, UnwrapError, all, allAsync, allFromDict, allFromDictAsync, fromNullable, fromPromise, fromSafePromise, fromThrowable, isDefect, isErr, isOk, matchTags };
|
|
979
|
+
export { AsyncResult, Defect, Do, Err, Ok, Result, TaggedError, UnwrapError, all, allAsync, allFromDict, allFromDictAsync, fromNullable, fromPromise, fromSafePromise, fromThrowable, isDefect, isErr, isOk, isResult, matchTags };
|
|
918
980
|
|
|
919
981
|
//# sourceMappingURL=index.mjs.map
|