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