// @flow import type { Option } from "../Option"; import type { ExtractValue } from "../types"; export type OkType = { ...{ +TAG: 0, +_0: $NonMaybeType, ... }, ...{ __: "Ok", ... }, }; export type ErrorType = { ...{ +TAG: 1, +_0: $NonMaybeType, ... }, ...{ __: "Error", ... }, }; export type Result = OkType | ErrorType; declare export var Ok: (value: $NonMaybeType) => OkType; declare export var Error: (value: $NonMaybeType) => ErrorType; /** * Returns `Ok(value)` if `value` is non-nullable, otherwise, returns `Error(errorValue)`. */ declare export function fromNullable( value: A, errorValue: $NonMaybeType ): Result, B>; declare export function fromNullable( errorValue: $NonMaybeType ): (value: A) => Result, B>; /** * Returns `Ok(value)` if `value` is not falsy, otherwise, returns `Error(errorValue)`. */ declare export function fromFalsy( value: A, errorValue: $NonMaybeType ): Result, B>; declare export function fromFalsy( errorValue: $NonMaybeType ): (value: A) => Result, B>; /** * Returns `Ok(value)` if the predicate function returns `true`, otherwise, returns `Error(errorValue)`. */ declare export function fromPredicate( value: A, predicateFn: (value: $NonMaybeType) => boolean, errorValue: $NonMaybeType ): Result, B>; declare export function fromPredicate( predicateFn: (value: $NonMaybeType) => boolean, errorValue: $NonMaybeType ): (value: A) => Result, B>; /** * Returns `Ok(value)` (`value` is the result of `fn`) if `fn` didn't throw an error, otherwise, returns `Error(err)`. */ declare export function fromExecution( fn: () => A ): Result, globalThis.Error>; /** * Returns `Ok(value)` if `promise` is resolved successfully, otherwise, returns `Error(err)`. */ declare export function fromPromise( promise: Promise ): Promise, globalThis.Error>>; /** * Returns the result of `mapFn` if `result` is `Ok(value)`, otherwise, returns `Error(errorValue)` and `mapFn` is not called. */ declare export function map( result: Result, mapFn: (value: A) => $NonMaybeType ): Result; declare export function map( mapFn: (value: A) => $NonMaybeType ): (result: Result) => Result; /** * Returns the result of `mapFn` if `result` is `Ok(value)`, otherwise returns a default value. */ declare export function mapWithDefault( result: Result, defaultValue: $NonMaybeType, mapFn: (value: A) => $NonMaybeType ): R; declare export function mapWithDefault( defaultValue: $NonMaybeType, mapFn: (value: A) => $NonMaybeType ): (result: Result) => R; /** * Returns the result of `mapFn` (it must have a return type of `Result`) if `result` is `Ok(value)`, otherwise, returns `result` unchanged. */ declare export function flatMap( result: Result, mapFn: (value: A) => Result ): Result; declare export function flatMap( mapFn: (value: A) => Result ): (result: Result) => Result; /** * Returns `value` if `result` is `Ok(value)`, otherwise, throws an exception. */ declare export function getExn(result: Result): A | empty; /** * Returns `value` if `result` is `Ok(value)`, otherwise, returns a default value. */ declare export function getWithDefault( result: Result, defaultValue: $NonMaybeType ): A; declare export function getWithDefault( defaultValue: $NonMaybeType ): (result: Result) => A; /** * Returns `value` if `result` is `Ok(value)`, otherwise, returns `undefined`. */ declare export function toUndefined(result: Result): A | void; /** * Returns `value` if `result` is `Ok(value)`, otherwise, returns `null`. */ declare export function toNullable(result: Result): A | null; /** * Returns `Some(value)` if `result` is `Ok(value)`, otherwise, returns `None`, both `Some` and `None` come from the `Option` type. */ declare export function toOption(result: Result): Option; /** * Returns the result of `okFn` if `result` is `Ok(value)`, otherwise, returns the result of `errorFn`. */ declare export function match( result: Result, okFn: (value: A) => R, errorFn: (value: B) => R ): R; declare export function match( okFn: (value: A) => R, errorFn: (value: B) => R ): (result: Result) => R; declare export function isError(result: Result): boolean; declare export function isOk(result: Result): boolean; /** * Applies a side-effect function to the value in `Ok`, and returns the original `result`. */ declare export function tap( result: Result, okFn: (value: A) => void ): Result; declare export function tap( okFn: (value: A) => void ): (result: Result) => Result; /** * Applies a side-effect function to the value in `Error`, and returns the original `result`. */ declare export function tapError( result: Result, errorFn: (err: B) => void ): Result; declare export function tapError( errorFn: (err: B) => void ): (result: Result) => Result; /** * Converts errors into successful values, and returns a Result where the error channel is voided, to indicate that the error has been handled. */ declare export function handleError( result: Result, mapFn: (err: B) => $NonMaybeType ): Result; declare export function handleError( mapFn: (err: B) => $NonMaybeType ): (result: Result) => Result; /** * Returns `result` unchanged if `result` is of the form `Ok`, otherwise, returns `Error(mapFn(err))`. */ declare export function mapError( result: Result, mapFn: (err: B) => $NonMaybeType ): Result; declare export function mapError( mapFn: (err: B) => $NonMaybeType ): (result: Result) => Result; /** * Returns `mapFn(err)` when `result` is of the form `Error(err)`, otherwise, returns `result` unchanged. */ declare export function catchError( result: Result, mapFn: (err: B) => Result ): Result; declare export function catchError( mapFn: (err: B) => Result ): (result: Result) => Result; /** * Ensures that the returned result is `Ok` by returning the provided result if it's already [Ok], or by falling back to the default value, which will be wrapped in the `Ok` constructor, if the provided result is an `Error`. */ declare export function recover( result: Result, defaultValue: $NonMaybeType ): Result; declare export function recover( defaultValue: $NonMaybeType ): (result: Result) => Result; /** * Swaps the values between the `Ok` and `Error`. */ declare export function flip(result: Result): Result;