UNPKG

@jumpaku/async-result

Version:

A typescript library that provides Result, Option, and AsyncResult.

74 lines (73 loc) 3.9 kB
import { BaseError } from "make-error-cause"; import { AsyncResult } from "./AsyncResult"; export declare class ResultError<E> extends BaseError { readonly name: string; readonly detail: E; constructor(error: E); } interface ResultTry { <V>(tryFun: () => V): Result<V, unknown>; <V, E>(tryFun: () => V, catchFun: (error: unknown) => E): Result<V, E>; } export declare const Result: { success: <V>(value: V) => Result<V, never>; failure: <E>(error: E) => Result<never, E>; try: ResultTry; isResult: <V, E>(obj: unknown) => obj is Result<V, E>; }; declare abstract class AbstractResult<V, E> { private assertsThisIsResult; abstract isSuccess(): this is Success<V, E>; abstract isFailure(): this is Failure<V, E>; match<X, Y>(onSuccess: (value: V) => X, onFailure: (error: E) => Y): X | Y; orDefault(value: V): V; orRecover(f: (error: E) => V): V; orThrow<F>(f?: (e: E) => F): V; orNull(): V | null; orUndefined(): V | undefined; onSuccess(f: (value: V) => void): Result<V, E>; onFailure(f: (error: E) => void): Result<V, E>; and<U, F>(other: Result<U, F>): Result<V | U, E | F>; or<U, F>(other: Result<U, F>): Result<V | U, E | F>; map<U>(neverThrowFun: (value: V) => U): Result<U, E>; mapAsync<U>(tryFun: (value: V) => U | Promise<U>): AsyncResult<U, unknown>; mapAsync<U, F>(tryFun: (value: V) => U | Promise<U>, catchFun: (error: unknown) => F): AsyncResult<U, F>; tryMap<U>(tryFun: (value: V) => U): Result<U, unknown>; tryMap<U, F>(tryFun: (value: V) => U, catchFun: (error: unknown) => F): Result<U, E | F>; flatMap<U, F>(neverThrowFun: (value: V) => Result<U, F>): Result<U, E | F>; flatMapAsync<U, F>(tryFun: (value: V) => Result<U, F> | AsyncResult<U, F>): AsyncResult<U, unknown>; flatMapAsync<U, F, G>(tryFun: (value: V) => Result<U, F> | AsyncResult<U, F>, catchFun: (error: unknown) => G): AsyncResult<U, E | F | G>; tryFlatMap<U, F>(tryFun: (value: V) => Result<U, F>): Result<U, unknown>; tryFlatMap<U, F, G>(tryFun: (value: V) => Result<U, F>, catchFun: (error: unknown) => G): Result<U, E | F | G>; recover(neverThrowFun: (error: E) => V): Result<V, never>; recoverAsync<F>(tryFun: (error: E) => V | Promise<V>): AsyncResult<V, unknown>; recoverAsync<F>(tryFun: (error: E) => V | Promise<V>, catchFun: (error: unknown) => F): AsyncResult<V, F>; tryRecover(tryFun: (error: E) => V): Result<V, unknown>; tryRecover<F>(tryFun: (error: E) => V, catchFun: (error: unknown) => F): Result<V, F>; flatRecover<F>(neverThrowFun: (error: E) => Result<V, F>): Result<V, F>; flatRecoverAsync<F>(tryFun: (error: E) => Result<V, F> | AsyncResult<V, F>): AsyncResult<V, unknown>; flatRecoverAsync<F, G>(tryFun: (error: E) => Result<V, F> | AsyncResult<V, F>, catchFun: (error: unknown) => G): AsyncResult<V, F | G>; tryFlatRecover<F>(tryFun: (error: E) => Result<V, F>): Result<V, unknown>; tryFlatRecover<F, G>(tryFun: (error: E) => Result<V, F>, catchFun: (error: unknown) => G): Result<V, F | G>; mapError<F>(neverThrowFun: (error: E) => F): Result<V, F>; tryMapError<F>(tryFun: (error: E) => F): Result<V, unknown>; tryMapError<F, G>(tryFun: (error: E) => F, catchFun: (error: unknown) => G): Result<V, F | G>; } export declare class Success<V, E> extends AbstractResult<V, E> { readonly value: V; constructor(value: V); readonly error: undefined; isSuccess(): this is Success<V, E>; isFailure(): this is Failure<V, E>; castError<F>(): Success<V, F>; } export declare class Failure<V, E> extends AbstractResult<V, E> { readonly error: E; constructor(error: E); readonly value: undefined; isSuccess(): this is Success<V, E>; isFailure(): this is Failure<V, E>; castValue<U>(): Failure<U, E>; } export declare type Result<V, E> = Success<V, E> | Failure<V, E>; export {};