resultar 3.0.0 → 3.1.0-beta.1
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 +343 -10
- package/dist/index.d.ts +152 -3
- package/dist/index.js +567 -29
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
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,
|
|
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
|