resultar 3.0.0 → 3.1.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.d.ts CHANGED
@@ -26,7 +26,12 @@ type TaggedValue = {
26
26
  readonly _tag: string;
27
27
  };
28
28
  type TaggedErrorValue = Error & TaggedValue;
29
+ type TaggedReasonValue = TaggedValue;
30
+ type TaggedValueWithReason = TaggedValue & {
31
+ readonly reason: TaggedReasonValue;
32
+ };
29
33
  type TagsOf<E> = Extract<E, TaggedValue>["_tag"];
34
+ type TagsWithReasonOf<E> = Extract<E, TaggedValueWithReason>["_tag"];
30
35
  type ErrorTagsOf<E> = Extract<E, TaggedErrorValue>["_tag"];
31
36
  type ErrorForTag$1<E, Tag extends string> = Extract<E, {
32
37
  readonly _tag: Tag;
@@ -35,11 +40,30 @@ type ExcludeTag<E, Tag extends string> = Exclude<E, {
35
40
  readonly _tag: Tag;
36
41
  }>;
37
42
  type UntaggedError$1<E> = Exclude<Extract<E, Error>, TaggedErrorValue>;
43
+ type ReasonsOf<E, ErrorTag extends string> = Extract<ErrorForTag$1<E, ErrorTag>, {
44
+ readonly reason: TaggedReasonValue;
45
+ }>["reason"];
46
+ type ReasonTagsOf<E, ErrorTag extends string> = ReasonsOf<E, ErrorTag>["_tag"];
47
+ type ReasonForTag<E, ErrorTag extends string, ReasonTag extends string> = Extract<ReasonsOf<E, ErrorTag>, {
48
+ readonly _tag: ReasonTag;
49
+ }>;
50
+ type ErrorWithRemainingReason<ErrorType, Reason> = [Reason] extends [never] ? never : Omit<ErrorType, "reason"> & {
51
+ readonly reason: Reason;
52
+ };
53
+ type ExcludeReasonTag<E, ErrorTag extends string, ReasonTag extends string> = Exclude<E, {
54
+ readonly _tag: ErrorTag;
55
+ }> | ErrorWithRemainingReason<ErrorForTag$1<E, ErrorTag>, Exclude<ReasonsOf<E, ErrorTag>, {
56
+ readonly _tag: ReasonTag;
57
+ }>>;
38
58
  type CatchTagHandlerResult<Handlers> = { readonly [Key in keyof Handlers]: Handlers[Key] extends ((...args: infer _Args) => infer R) ? R : never }[keyof Handlers];
59
+ type CatchReasonHandlerResult<Handlers> = { readonly [Key in keyof Handlers]: Handlers[Key] extends ((...args: infer _Args) => infer R) ? R : never }[keyof Handlers];
39
60
  type MatchTagHandlerResult<Handlers> = { readonly [Key in keyof Handlers]: Handlers[Key] extends ((...args: infer _Args) => infer R) ? R : never }[keyof Handlers];
40
61
  type CatchTagHandlers<E, Handlers, R> = { readonly [Tag in keyof Handlers]: Tag extends TagsOf<E> ? (error: ErrorForTag$1<E, Tag & string>) => R : never };
41
62
  type ResultCatchTagHandlers<E, Handlers> = CatchTagHandlers<E, Handlers, Result<unknown, unknown>>;
42
63
  type ResultAsyncCatchTagHandlers<E, Handlers> = CatchTagHandlers<E, Handlers, Result<unknown, unknown> | ResultAsync<unknown, unknown>>;
64
+ type CatchReasonHandlers<E, ErrorTag extends string, Handlers, R> = { readonly [ReasonTag in keyof Handlers]: ReasonTag extends ReasonTagsOf<E, ErrorTag> ? (reason: ReasonForTag<E, ErrorTag, ReasonTag & string>, error: ErrorForTag$1<E, ErrorTag>) => R : never };
65
+ type ResultCatchReasonHandlers<E, ErrorTag extends string, Handlers> = CatchReasonHandlers<E, ErrorTag, Handlers, Result<unknown, unknown>>;
66
+ type ResultAsyncCatchReasonHandlers<E, ErrorTag extends string, Handlers> = CatchReasonHandlers<E, ErrorTag, Handlers, Result<unknown, unknown> | ResultAsync<unknown, unknown>>;
43
67
  type MatchTagHandlers<E, Handlers> = { readonly [Tag in ErrorTagsOf<E>]: (error: ErrorForTag$1<E, Tag>) => unknown } & ([UntaggedError$1<E>] extends [never] ? {
44
68
  readonly Error?: (error: Error) => unknown;
45
69
  } : {
@@ -52,6 +76,11 @@ type ResultFinalizer<T, E> = (value: T | undefined, error: E | undefined) => voi
52
76
  type MatchOkHandler<T, A> = (value: T) => A;
53
77
  type MatchErrorHandler<E, B> = (error: E) => B;
54
78
  type ResultCandidate = () => Result<unknown, unknown>;
79
+ type ResultRecord = Readonly<Record<string, Result<unknown, unknown>>>;
80
+ type CombineResultsRecord<T extends ResultRecord> = Result<{ readonly [Key in keyof T]: InferOkTypes<T[Key]> }, InferErrTypes<T[keyof T]>>;
81
+ type CombineResultsRecordWithAllErrors<T extends ResultRecord> = Result<{ readonly [Key in keyof T]: InferOkTypes<T[Key]> }, InferErrTypes<T[keyof T]>[]>;
82
+ type CombineResultsIterable<R extends Result<unknown, unknown>> = Result<readonly InferOkTypes<R>[], InferErrTypes<R>>;
83
+ type CombineResultsIterableWithAllErrors<R extends Result<unknown, unknown>> = Result<readonly InferOkTypes<R>[], InferErrTypes<R>[]>;
55
84
  type ResultLoopCollected<R extends Result<unknown, unknown>> = Result<readonly InferOkTypes<R>[], InferErrTypes<R>>;
56
85
  type ResultLoopDiscarded<R extends Result<unknown, unknown>> = Result<void, InferErrTypes<R>>;
57
86
  type ResultIterated<State, R extends Result<State, unknown>> = Result<State, InferErrTypes<R>>;
@@ -177,6 +206,9 @@ interface ResultOperations<T, E> {
177
206
  orElse<R extends Result<unknown, unknown>>(f: (e: E) => R): Result<InferOkTypes<R> | T, InferErrTypes<R>>;
178
207
  catchTag<const Tag extends TagsOf<E>, R extends Result<unknown, unknown>>(tag: Tag, f: (error: ErrorForTag$1<E, Tag>) => R): Result<T | InferOkTypes<R>, ExcludeTag<E, Tag> | InferErrTypes<R>>;
179
208
  catchTags<const Handlers extends object>(handlers: Handlers & ResultCatchTagHandlers<E, Handlers>): Result<T | InferOkTypes<CatchTagHandlerResult<Handlers>>, ExcludeTag<E, keyof Handlers & string> | InferErrTypes<CatchTagHandlerResult<Handlers>>>;
209
+ catchReason<const ErrorTag extends TagsWithReasonOf<E>, const ReasonTag extends ReasonTagsOf<E, ErrorTag>, R extends Result<unknown, unknown>>(errorTag: ErrorTag, reasonTag: ReasonTag, f: (reason: ReasonForTag<E, ErrorTag, ReasonTag>, error: ErrorForTag$1<E, ErrorTag>) => R): Result<T | InferOkTypes<R>, ExcludeReasonTag<E, ErrorTag, ReasonTag> | InferErrTypes<R>>;
210
+ catchReasons<const ErrorTag extends TagsWithReasonOf<E>, const Handlers extends object>(errorTag: ErrorTag, handlers: Handlers & ResultCatchReasonHandlers<E, ErrorTag, Handlers>): Result<T | InferOkTypes<CatchReasonHandlerResult<Handlers>>, ExcludeReasonTag<E, ErrorTag, keyof Handlers & string> | InferErrTypes<CatchReasonHandlerResult<Handlers>>>;
211
+ unwrapReason<const ErrorTag extends TagsWithReasonOf<E>>(errorTag: ErrorTag): Result<T, ExcludeTag<E, ErrorTag> | ReasonsOf<E, ErrorTag>>;
180
212
  asyncAndThen<X, Y>(f: (t: T) => ResultAsync<X, Y>): ResultAsync<X, E | Y>;
181
213
  asyncMap<X>(f: (t: T) => Promise<X>): ResultAsync<X, E>;
182
214
  match<A, B = A>(handlers: MatchHandlers$1<T, E, A, B>): A | B;
@@ -229,8 +261,12 @@ interface ResultStatic {
229
261
  err<T = never>(this: void, err: void): ErrResult<T, void>;
230
262
  combine<T extends readonly [Result<unknown, unknown>, ...Result<unknown, unknown>[]]>(this: void, resultList: T): CombineResults<T>;
231
263
  combine<T extends readonly Result<unknown, unknown>[]>(this: void, resultList: T): CombineResults<T>;
264
+ combine<T extends ResultRecord>(this: void, resultRecord: T): CombineResultsRecord<T>;
265
+ combine<R extends Result<unknown, unknown>>(this: void, results: Iterable<R>): CombineResultsIterable<R>;
232
266
  combineWithAllErrors<T extends readonly [Result<unknown, unknown>, ...Result<unknown, unknown>[]]>(this: void, resultList: T): CombineResultsWithAllErrorsArray<T>;
233
267
  combineWithAllErrors<T extends readonly Result<unknown, unknown>[]>(this: void, resultList: T): CombineResultsWithAllErrorsArray<T>;
268
+ combineWithAllErrors<T extends ResultRecord>(this: void, resultRecord: T): CombineResultsRecordWithAllErrors<T>;
269
+ combineWithAllErrors<R extends Result<unknown, unknown>>(this: void, results: Iterable<R>): CombineResultsIterableWithAllErrors<R>;
234
270
  validateAll<T extends readonly [Result<unknown, unknown>, ...Result<unknown, unknown>[]]>(this: void, resultList: T): CombineResultsWithAllErrorsArray<T>;
235
271
  validateAll<T extends readonly Result<unknown, unknown>[]>(this: void, resultList: T): CombineResultsWithAllErrorsArray<T>;
236
272
  validateAll<Item, R extends Result<unknown, unknown>>(this: void, items: Iterable<Item>, f: (value: Item, index: number) => R): ResultValidatedAll<R>;
@@ -341,16 +377,83 @@ type TraverseWithAllErrors<T, Depth extends number = 5> = Traverse<T, Depth> ext
341
377
  type CombineResults<T extends readonly Result<unknown, unknown>[]> = IsLiteralArray<T> extends 1 ? Traverse<T> : Result<ExtractOkTypes<T>, ExtractErrTypes<T>[number]>;
342
378
  type CombineResultsWithAllErrorsArray<T extends readonly Result<unknown, unknown>[]> = IsLiteralArray<T> extends 1 ? TraverseWithAllErrors<T> : Result<ExtractOkTypes<T>, ExtractErrTypes<T>[number][]>;
343
379
  //#endregion
380
+ //#region src/abort-error.d.ts
381
+ declare class AbortError extends Error {
382
+ constructor(message?: string, options?: ErrorOptions);
383
+ }
384
+ declare const isAbortError: (value: unknown) => value is AbortError;
385
+ //#endregion
344
386
  //#region src/result-async.d.ts
345
387
  type ResultAsyncFinalizer<T, E> = (value: T | undefined, error: E | undefined) => void | Promise<void>;
346
388
  interface TryResultAsyncOptions<T, E = unknown> {
347
389
  readonly try: () => Promise<T>;
348
390
  readonly catch?: (e: unknown) => E;
349
391
  }
392
+ interface ResultAsyncAbortSignal {
393
+ readonly aborted: boolean;
394
+ readonly reason?: unknown;
395
+ addEventListener(type: "abort", listener: () => void, options?: {
396
+ readonly once?: boolean;
397
+ }): void;
398
+ removeEventListener(type: "abort", listener: () => void): void;
399
+ }
400
+ type ResultAsyncConcurrency = number | "unbounded";
350
401
  type HandlerOk<R> = InferOkTypes<R> | InferAsyncOkTypes<R>;
351
402
  type HandlerErr<R> = InferErrTypes<R> | InferAsyncErrTypes<R>;
352
403
  type IterableElement<T> = T extends Iterable<infer Element> ? Element : never;
353
404
  type ResultAsyncCandidate = () => ResultAsync<unknown, unknown>;
405
+ type ResultAsyncRecord = Readonly<Record<string, ResultAsync<unknown, unknown>>>;
406
+ type CombineResultAsyncsRecord<T extends ResultAsyncRecord> = ResultAsync<{ readonly [Key in keyof T]: InferAsyncOkTypes<T[Key]> }, InferAsyncErrTypes<T[keyof T]>>;
407
+ type CombineResultAsyncsRecordWithAllErrors<T extends ResultAsyncRecord> = ResultAsync<{ readonly [Key in keyof T]: InferAsyncOkTypes<T[Key]> }, InferAsyncErrTypes<T[keyof T]>[]>;
408
+ type CombineResultAsyncsIterable<R extends ResultAsync<unknown, unknown>> = ResultAsync<readonly InferAsyncOkTypes<R>[], InferAsyncErrTypes<R>>;
409
+ type CombineResultAsyncsIterableWithAllErrors<R extends ResultAsync<unknown, unknown>> = ResultAsync<readonly InferAsyncOkTypes<R>[], InferAsyncErrTypes<R>[]>;
410
+ type ResultAsyncRaceTask<T, E> = (signal: ResultAsyncAbortSignal) => ResultAsync<T, E>;
411
+ type ResultAsyncRaceTaskOk<Task> = Task extends ResultAsyncRaceTask<infer T, unknown> ? T : never;
412
+ type ResultAsyncRaceTaskErr<Task> = Task extends ResultAsyncRaceTask<unknown, infer E> ? E : never;
413
+ type ResultAsyncRaceTasksOk<Tasks extends readonly ResultAsyncRaceTask<unknown, unknown>[]> = ResultAsyncRaceTaskOk<Tasks[number]>;
414
+ type ResultAsyncRaceTasksErr<Tasks extends readonly ResultAsyncRaceTask<unknown, unknown>[]> = ResultAsyncRaceTaskErr<Tasks[number]>;
415
+ interface ResultAsyncRaceHandle<T, E> {
416
+ readonly signal: ResultAsyncAbortSignal;
417
+ abort(reason?: unknown): void;
418
+ wait(): ResultAsync<T, E>;
419
+ }
420
+ interface ResultAsyncTimeoutOptions<E> {
421
+ readonly onTimeout: () => E;
422
+ readonly timeoutMs: number;
423
+ }
424
+ interface ResultAsyncRetryContext {
425
+ readonly attempt: number;
426
+ readonly nextAttempt: number;
427
+ readonly retriesRemaining: number;
428
+ }
429
+ type ResultAsyncRetryTask<T, E> = (attempt: number, signal: ResultAsyncAbortSignal) => ResultAsync<T, E>;
430
+ type ResultAsyncRetryTaskOk<Task> = Task extends ResultAsyncRetryTask<infer T, unknown> ? T : never;
431
+ type ResultAsyncRetryTaskErr<Task> = Task extends ResultAsyncRetryTask<unknown, infer E> ? E : never;
432
+ type ResultAsyncRetryDelay = number | ((context: ResultAsyncRetryContext) => number);
433
+ interface ResultAsyncRetryOptions<E> {
434
+ readonly delayMs?: ResultAsyncRetryDelay;
435
+ readonly onRetry?: (error: E, context: ResultAsyncRetryContext) => void | Promise<void>;
436
+ readonly signal?: ResultAsyncAbortSignal;
437
+ readonly times: number;
438
+ readonly while?: (error: E, context: ResultAsyncRetryContext) => boolean | Promise<boolean>;
439
+ }
440
+ interface ResultAsyncRetryOrElseOptions<E, F, U> extends ResultAsyncRetryOptions<E> {
441
+ readonly orElse: (error: E, context: ResultAsyncRetryContext) => Result<U, F> | ResultAsync<U, F>;
442
+ }
443
+ type ResultAsyncResourceAcquire<Resource, E> = (signal: ResultAsyncAbortSignal) => ResultAsync<Resource, E>;
444
+ type ResultAsyncResourceEffect<T, E> = Result<T, E> | ResultAsync<T, E>;
445
+ type ResultAsyncResourceUse<Resource, T, E> = (resource: Resource, signal: ResultAsyncAbortSignal) => ResultAsyncResourceEffect<T, E>;
446
+ interface ResultAsyncResourceReleaseContext {
447
+ readonly result: Result<unknown, unknown> | undefined;
448
+ readonly signal: ResultAsyncAbortSignal;
449
+ }
450
+ type ResultAsyncResourceRelease<Resource> = (resource: Resource, context: ResultAsyncResourceReleaseContext) => ResultAsyncResourceEffect<unknown, unknown> | Promise<void> | void;
451
+ interface ResultAsyncWithResourceOptions<Resource, AcquireError, T, UseError> {
452
+ readonly acquire: ResultAsyncResourceAcquire<Resource, AcquireError>;
453
+ readonly release: ResultAsyncResourceRelease<Resource>;
454
+ readonly signal?: ResultAsyncAbortSignal;
455
+ readonly use: ResultAsyncResourceUse<Resource, T, UseError>;
456
+ }
354
457
  type FirstSuccessOfAsync<Candidates extends Iterable<ResultAsyncCandidate>> = ResultAsync<InferAsyncOkTypes<ReturnType<IterableElement<Candidates>>>, InferAsyncErrTypes<ReturnType<IterableElement<Candidates>>>>;
355
458
  type ResultAsyncLoopCollected<R extends ResultAsync<unknown, unknown>> = ResultAsync<readonly InferAsyncOkTypes<R>[], InferAsyncErrTypes<R>>;
356
459
  type ResultAsyncLoopDiscarded<R extends ResultAsync<unknown, unknown>> = ResultAsync<void, InferAsyncErrTypes<R>>;
@@ -399,11 +502,16 @@ interface ResultAsyncIterateBooleanOptions<State, R extends ResultAsync<State, u
399
502
  readonly while: (state: State) => boolean;
400
503
  }
401
504
  interface ResultAsyncForEachOptions {
505
+ readonly concurrency?: ResultAsyncConcurrency;
402
506
  readonly discard?: false;
403
507
  }
404
508
  interface ResultAsyncForEachDiscardOptions {
509
+ readonly concurrency?: ResultAsyncConcurrency;
405
510
  readonly discard: true;
406
511
  }
512
+ interface ResultAsyncValidateAllOptions {
513
+ readonly concurrency?: ResultAsyncConcurrency;
514
+ }
407
515
  interface ResultAsyncIfOptions<OnTrue extends ResultAsyncConditional, OnFalse extends ResultAsyncConditional> {
408
516
  readonly onFalse: () => OnFalse;
409
517
  readonly onTrue: () => OnTrue;
@@ -511,12 +619,27 @@ declare class ResultAsync<T, E> extends Pipeable implements PromiseLike<Result<T
511
619
  static fromPromise<T, E>(this: void, promise: PromiseLike<T>, errorFn: (e: unknown) => E): ResultAsync<T, E>;
512
620
  static combine<T extends readonly [ResultAsync<unknown, unknown>, ...ResultAsync<unknown, unknown>[]]>(this: void, asyncResultList: T): CombineResultAsyncs<T>;
513
621
  static combine<T extends readonly ResultAsync<unknown, unknown>[]>(this: void, asyncResultList: T): CombineResultAsyncs<T>;
622
+ static combine<T extends ResultAsyncRecord>(this: void, asyncResultRecord: T): CombineResultAsyncsRecord<T>;
623
+ static combine<R extends ResultAsync<unknown, unknown>>(this: void, asyncResults: Iterable<R>): CombineResultAsyncsIterable<R>;
514
624
  static combineWithAllErrors<T extends readonly [ResultAsync<unknown, unknown>, ...ResultAsync<unknown, unknown>[]]>(this: void, asyncResultList: T): CombineResultsWithAllErrorsArrayAsync<T>;
515
625
  static combineWithAllErrors<T extends readonly ResultAsync<unknown, unknown>[]>(this: void, asyncResultList: T): CombineResultsWithAllErrorsArrayAsync<T>;
626
+ static combineWithAllErrors<T extends ResultAsyncRecord>(this: void, asyncResultRecord: T): CombineResultAsyncsRecordWithAllErrors<T>;
627
+ static combineWithAllErrors<R extends ResultAsync<unknown, unknown>>(this: void, asyncResults: Iterable<R>): CombineResultAsyncsIterableWithAllErrors<R>;
516
628
  static validateAll<T extends readonly [ResultAsync<unknown, unknown>, ...ResultAsync<unknown, unknown>[]]>(this: void, asyncResultList: T): CombineResultsWithAllErrorsArrayAsync<T>;
517
629
  static validateAll<T extends readonly ResultAsync<unknown, unknown>[]>(this: void, asyncResultList: T): CombineResultsWithAllErrorsArrayAsync<T>;
518
- static validateAll<Item, R extends ResultAsync<unknown, unknown>>(this: void, items: Iterable<Item>, f: (value: Item, index: number) => R): ResultAsyncValidatedAll<R>;
630
+ static validateAll<Item, R extends ResultAsync<unknown, unknown>>(this: void, items: Iterable<Item>, f: (value: Item, index: number) => R, options?: ResultAsyncValidateAllOptions): ResultAsyncValidatedAll<R>;
519
631
  static zip<Left extends ResultAsync<unknown, unknown>, Right extends ResultAsync<unknown, unknown>>(this: void, left: Left, right: Right): ResultAsyncZipped<Left, Right>;
632
+ static retry<Task extends ResultAsyncRetryTask<unknown, unknown>>(this: void, task: Task, options: ResultAsyncRetryOptions<ResultAsyncRetryTaskErr<Task>>): ResultAsync<ResultAsyncRetryTaskOk<Task>, ResultAsyncRetryTaskErr<Task> | AbortError>;
633
+ static retryOrElse<Task extends ResultAsyncRetryTask<unknown, unknown>, U, F>(this: void, task: Task, options: ResultAsyncRetryOrElseOptions<ResultAsyncRetryTaskErr<Task>, F, U>): ResultAsync<ResultAsyncRetryTaskOk<Task> | U, F | AbortError>;
634
+ static withResource<Resource, AcquireError, T, UseError>(this: void, options: ResultAsyncWithResourceOptions<Resource, AcquireError, T, UseError>): ResultAsync<T, AcquireError | UseError | AbortError>;
635
+ static race<Left extends ResultAsyncRaceTask<unknown, unknown>, Right extends ResultAsyncRaceTask<unknown, unknown>>(this: void, left: Left, right: Right): ResultAsync<ResultAsyncRaceTaskOk<Left> | ResultAsyncRaceTaskOk<Right>, ResultAsyncRaceTaskErr<Left> | ResultAsyncRaceTaskErr<Right>>;
636
+ static raceAll<Tasks extends readonly [ResultAsyncRaceTask<unknown, unknown>, ...ResultAsyncRaceTask<unknown, unknown>[]]>(this: void, tasks: Tasks): ResultAsync<ResultAsyncRaceTasksOk<Tasks>, ResultAsyncRaceTasksErr<Tasks>>;
637
+ static raceFirst<Left extends ResultAsyncRaceTask<unknown, unknown>, Right extends ResultAsyncRaceTask<unknown, unknown>>(this: void, left: Left, right: Right): ResultAsync<ResultAsyncRaceTaskOk<Left> | ResultAsyncRaceTaskOk<Right>, ResultAsyncRaceTaskErr<Left> | ResultAsyncRaceTaskErr<Right>>;
638
+ static raceWith<Left extends ResultAsyncRaceTask<unknown, unknown>, Right extends ResultAsyncRaceTask<unknown, unknown>, OnLeftDone extends ResultAsyncConditional, OnRightDone extends ResultAsyncConditional>(this: void, left: Left, right: Right, handlers: {
639
+ readonly onLeftDone: (result: Result<ResultAsyncRaceTaskOk<Left>, ResultAsyncRaceTaskErr<Left>>, right: ResultAsyncRaceHandle<ResultAsyncRaceTaskOk<Right>, ResultAsyncRaceTaskErr<Right>>) => OnLeftDone;
640
+ readonly onRightDone: (result: Result<ResultAsyncRaceTaskOk<Right>, ResultAsyncRaceTaskErr<Right>>, left: ResultAsyncRaceHandle<ResultAsyncRaceTaskOk<Left>, ResultAsyncRaceTaskErr<Left>>) => OnRightDone;
641
+ }): ResultAsync<HandlerOk<OnLeftDone> | HandlerOk<OnRightDone>, HandlerErr<OnLeftDone> | HandlerErr<OnRightDone>>;
642
+ static timeout<Task extends ResultAsyncRaceTask<unknown, unknown>, TimeoutError>(this: void, task: Task, options: ResultAsyncTimeoutOptions<TimeoutError>): ResultAsync<ResultAsyncRaceTaskOk<Task>, ResultAsyncRaceTaskErr<Task> | TimeoutError>;
520
643
  static firstSuccessOf<Candidates extends Iterable<ResultAsyncCandidate>>(this: void, candidates: Candidates): FirstSuccessOfAsync<Candidates>;
521
644
  static if<OnTrue extends ResultAsyncConditional, OnFalse extends ResultAsyncConditional>(this: void, condition: ResultAsyncBooleanCondition, options: ResultAsyncIfOptions<OnTrue, OnFalse>): ResultAsyncIf<never, OnTrue, OnFalse>;
522
645
  static if<Condition extends ResultAsyncConditionResult, OnTrue extends ResultAsyncConditional, OnFalse extends ResultAsyncConditional>(this: void, condition: Condition, options: ResultAsyncIfOptions<OnTrue, OnFalse>): ResultAsyncIf<HandlerErr<Condition>, OnTrue, OnFalse>;
@@ -564,6 +687,11 @@ declare class ResultAsync<T, E> extends Pipeable implements PromiseLike<Result<T
564
687
  catchTag<const Tag extends TagsOf<E>, R extends ResultAsync<unknown, unknown>>(tag: Tag, f: (error: ErrorForTag$1<E, Tag>) => R): ResultAsync<T | InferAsyncOkTypes<R>, ExcludeTag<E, Tag> | InferAsyncErrTypes<R>>;
565
688
  catchTag<U, F, const Tag extends TagsOf<E>>(tag: Tag, f: (error: ErrorForTag$1<E, Tag>) => Result<U, F> | ResultAsync<U, F>): ResultAsync<T | U, ExcludeTag<E, Tag> | F>;
566
689
  catchTags<const Handlers extends object>(handlers: Handlers & ResultAsyncCatchTagHandlers<E, Handlers>): ResultAsync<T | HandlerOk<CatchTagHandlerResult<Handlers>>, ExcludeTag<E, keyof Handlers & string> | HandlerErr<CatchTagHandlerResult<Handlers>>>;
690
+ catchReason<const ErrorTag extends TagsWithReasonOf<E>, const ReasonTag extends ReasonTagsOf<E, ErrorTag>, R extends Result<unknown, unknown>>(errorTag: ErrorTag, reasonTag: ReasonTag, f: (reason: ReasonForTag<E, ErrorTag, ReasonTag>, error: ErrorForTag$1<E, ErrorTag>) => R): ResultAsync<T | InferOkTypes<R>, ExcludeReasonTag<E, ErrorTag, ReasonTag> | InferErrTypes<R>>;
691
+ catchReason<const ErrorTag extends TagsWithReasonOf<E>, const ReasonTag extends ReasonTagsOf<E, ErrorTag>, R extends ResultAsync<unknown, unknown>>(errorTag: ErrorTag, reasonTag: ReasonTag, f: (reason: ReasonForTag<E, ErrorTag, ReasonTag>, error: ErrorForTag$1<E, ErrorTag>) => R): ResultAsync<T | InferAsyncOkTypes<R>, ExcludeReasonTag<E, ErrorTag, ReasonTag> | InferAsyncErrTypes<R>>;
692
+ catchReason<U, F, const ErrorTag extends TagsWithReasonOf<E>, const ReasonTag extends ReasonTagsOf<E, ErrorTag>>(errorTag: ErrorTag, reasonTag: ReasonTag, f: (reason: ReasonForTag<E, ErrorTag, ReasonTag>, error: ErrorForTag$1<E, ErrorTag>) => Result<U, F> | ResultAsync<U, F>): ResultAsync<T | U, ExcludeReasonTag<E, ErrorTag, ReasonTag> | F>;
693
+ catchReasons<const ErrorTag extends TagsWithReasonOf<E>, const Handlers extends object>(errorTag: ErrorTag, handlers: Handlers & ResultAsyncCatchReasonHandlers<E, ErrorTag, Handlers>): ResultAsync<T | HandlerOk<CatchReasonHandlerResult<Handlers>>, ExcludeReasonTag<E, ErrorTag, keyof Handlers & string> | HandlerErr<CatchReasonHandlerResult<Handlers>>>;
694
+ unwrapReason<const ErrorTag extends TagsWithReasonOf<E>>(errorTag: ErrorTag): ResultAsync<T, ExcludeTag<E, ErrorTag> | ReasonsOf<E, ErrorTag>>;
567
695
  match<A, B = A>(handlers: MatchHandlers$1<T, E, A, B>): Promise<A | B>;
568
696
  match<A, B = A>(ok: (t: T) => A, fnErr: (e: E) => B): Promise<A | B>;
569
697
  matchTags<A, const Handlers extends object>(ok: (t: T) => A, handlers: Handlers & MatchTagHandlers<E, Handlers>): Promise<A | MatchTagHandlerResult<Handlers>>;
@@ -619,6 +747,18 @@ type TraverseAsync<T, Depth extends number = 5> = IsLiteralArray<T> extends 1 ?
619
747
  type TraverseWithAllErrorsAsync<T, Depth extends number = 5> = TraverseAsync<T, Depth> extends ResultAsync<infer Oks, infer Errs> ? ResultAsync<Oks, Errs[]> : never;
620
748
  type Writable<T> = T extends readonly unknown[] ? [...T] : T;
621
749
  //#endregion
750
+ //#region src/redacted.d.ts
751
+ type Redacted<T> = string & {
752
+ readonly __resultarRedacted: true;
753
+ readonly __resultarRedactedType?: T;
754
+ readonly label: string | undefined;
755
+ toJSON(): string;
756
+ toString(): string;
757
+ };
758
+ declare const redact: <T>(value: T, label?: string) => Redacted<T>;
759
+ declare const isRedacted: (value: unknown) => value is Redacted<unknown>;
760
+ declare const revealRedacted: <T>(value: Redacted<T>) => T;
761
+ //#endregion
622
762
  //#region src/tagged-error.d.ts
623
763
  type Alpha = "a" | "b" | "c" | "d" | "e" | "f" | "g" | "h" | "i" | "j" | "k" | "l" | "m" | "n" | "o" | "p" | "q" | "r" | "s" | "t" | "u" | "v" | "w" | "x" | "y" | "z" | "A" | "B" | "C" | "D" | "E" | "F" | "G" | "H" | "I" | "J" | "K" | "L" | "M" | "N" | "O" | "P" | "Q" | "R" | "S" | "T" | "U" | "V" | "W" | "X" | "Y" | "Z" | "_";
624
764
  type Digit = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9";
@@ -665,9 +805,17 @@ type TaggedErrorClass<Tag extends string, MessageTemplate extends string, Base e
665
805
  err<This extends new (...args: TaggedErrorConstructorArgs<MessageTemplate>) => Error>(this: This, ...args: TaggedErrorConstructorArgs<MessageTemplate>): ErrResult<never, ErrorClassInstance<This>>;
666
806
  is(value: unknown): value is TaggedErrorInstance<Tag, MessageTemplate, Base>;
667
807
  };
668
- type TaggedEnum<Members extends Record<string, Record<PropertyKey, unknown>>> = { readonly [Tag in keyof Members]: Readonly<Members[Tag]> & {
808
+ type TaggedEnum<Members extends Record<string, object>> = { readonly [Tag in keyof Members]: Readonly<Members[Tag]> & {
669
809
  readonly _tag: Tag;
670
810
  } }[keyof Members];
811
+ type TaggedEnumMember<Members extends Record<string, object>, Tag extends keyof Members> = Readonly<Members[Tag]> & {
812
+ readonly _tag: Tag;
813
+ };
814
+ type TaggedEnumConstructor<Members extends Record<string, object>, Tag extends keyof Members> = keyof Members[Tag] extends never ? (props?: Readonly<Members[Tag]>) => TaggedEnumMember<Members, Tag> : (props: Readonly<Members[Tag]>) => TaggedEnumMember<Members, Tag>;
815
+ type TaggedEnumFactory<Members extends Record<string, object>> = { readonly [Tag in keyof Members]: TaggedEnumConstructor<Members, Tag> } & {
816
+ $is<Tag extends keyof Members>(tag: Tag, value: unknown): value is TaggedEnumMember<Members, Tag>;
817
+ $match<ReturnType>(value: TaggedEnum<Members>, handlers: { readonly [Tag in keyof Members]: (value: TaggedEnumMember<Members, Tag>) => ReturnType }): ReturnType;
818
+ };
671
819
  type TaggedErrorLike = Error & {
672
820
  readonly _tag: string;
673
821
  };
@@ -689,8 +837,9 @@ declare const findCause: <T extends Error>(error: Error, ErrorClass: ErrorClass<
689
837
  declare function createTaggedError<const Tag extends string, const MessageTemplate extends string = typeof defaultMessageTemplate, Base extends Error = Error>(options: Omit<TaggedErrorOptions<Tag, MessageTemplate, Base>, "message"> & {
690
838
  readonly message?: RejectReservedTemplateVariables<MessageTemplate>;
691
839
  }): TaggedErrorClass<Tag, MessageTemplate, Base>;
840
+ declare const taggedEnum: <Members extends Record<string, object>>() => TaggedEnumFactory<Members>;
692
841
  declare const matchError: <ErrorType extends Error, ReturnType>(error: ErrorType, handlers: MatchHandlers<ErrorType, ReturnType>) => ReturnType;
693
842
  declare const matchErrorPartial: <ErrorType extends Error, ReturnType>(error: ErrorType, handlers: PartialMatchHandlers<ErrorType, ReturnType>, fallback: (error: ErrorType) => ReturnType) => ReturnType;
694
843
  //#endregion
695
- export { DisposableResult, DisposableResultAsync, type ErrResult, type OkResult, Result, ResultAsync, type ResultOperations, type SafeTryAsyncOptions, type SafeTryOptions, type StrictResult, type StrictResultAsync, type TaggedEnum, type TaggedErrorClass, type TaggedErrorInstance, type TaggedErrorOptions, type TryResultAsyncOptions, type TryResultOptions, createTaggedError, tryResult as default, tryResult as try, tryResult, err, errAsync, findCause, fromPromise, fromSafePromise, fromThrowable, fromThrowableAsync, isError, matchError, matchErrorPartial, ok, okAsync, safeTry, tryResultAsync as tryAsync, tryResultAsync, tryCatch, tryCatchAsync, unit, unitAsync };
844
+ export { AbortError, DisposableResult, DisposableResultAsync, type ErrResult, type OkResult, type Redacted, Result, ResultAsync, type ResultAsyncAbortSignal, type ResultAsyncConcurrency, type ResultAsyncRaceHandle, type ResultAsyncRaceTask, type ResultAsyncResourceAcquire, type ResultAsyncResourceEffect, type ResultAsyncResourceRelease, type ResultAsyncResourceReleaseContext, type ResultAsyncResourceUse, type ResultAsyncRetryContext, type ResultAsyncRetryOptions, type ResultAsyncRetryOrElseOptions, type ResultAsyncRetryTask, type ResultAsyncTimeoutOptions, type ResultAsyncWithResourceOptions, type ResultOperations, type SafeTryAsyncOptions, type SafeTryOptions, type StrictResult, type StrictResultAsync, type TaggedEnum, type TaggedEnumFactory, type TaggedErrorClass, type TaggedErrorInstance, type TaggedErrorOptions, type TryResultAsyncOptions, type TryResultOptions, createTaggedError, tryResult as default, tryResult as try, tryResult, err, errAsync, findCause, fromPromise, fromSafePromise, fromThrowable, fromThrowableAsync, isAbortError, isError, isRedacted, matchError, matchErrorPartial, ok, okAsync, redact, revealRedacted, safeTry, taggedEnum, tryResultAsync as tryAsync, tryResultAsync, tryCatch, tryCatchAsync, unit, unitAsync };
696
845
  //# sourceMappingURL=index.d.ts.map