UNPKG

@altostra/core

Version:

Core library for shared types and logic

67 lines (66 loc) 3.89 kB
import type { AnyTypeValidation, TypeValidation } from '@altostra/type-validations'; import type { Option } from "./Option"; /** * Describes a result of an operation that either succeeds or fails. */ export declare type Result<TValue, TError> = Failure<TError> | Success<TValue>; export interface Success<TValue> { type: 'result-success'; value: TValue; } export declare function successValidation<T>(valueValidation: AnyTypeValidation<T>): TypeValidation<Success<T>>; export declare const isSuccess: TypeValidation<Success<unknown>>; export interface Failure<TError> { type: 'result-failure'; error: TError; } export declare function failureValidation<T>(errorValidation: AnyTypeValidation<T>): TypeValidation<Failure<T>>; export declare const isFailure: TypeValidation<Failure<any>>; export declare function resultValidation<T, TErr>(valueValidation: AnyTypeValidation<T>, errValidation: AnyTypeValidation<TErr>): TypeValidation<Result<T, TErr>>; export declare function resultValidation<T>(valueValidation: AnyTypeValidation<T>): TypeValidation<Result<T, any>>; export declare const isResult: TypeValidation<Result<unknown, any>>; /** * Describes an operation that partially succeeded. * T is the partial result, E[] is the list of errors encountered * while getting the result. */ export declare type PartialSuccess<TValue, TError> = [TValue, TError[]]; export declare function partialSuccessValidation<TValue, TError>(valueValidation: AnyTypeValidation<TValue>, errValidation: AnyTypeValidation<TError>): TypeValidation<PartialSuccess<TValue, TError>>; export declare function partialSuccessValidation<TValue>(valueValidation: AnyTypeValidation<TValue>): TypeValidation<PartialSuccess<TValue, any>>; export declare const isPartialSuccess: TypeValidation<PartialSuccess<unknown, any>>; export declare function partialSuccess<TValue, TError>(value: TValue, errors: TError[]): PartialSuccess<TValue, TError>; export declare function success<TValue>(value: TValue): Success<TValue>; export declare function failure<TError>(error: TError): Failure<TError>; export declare function fromSuccess<TValue>(success: Success<TValue>): TValue; export declare function fromFailure<TError>(failure: Failure<TError>): TError; export declare function fromOption<T>(opt: Option<T>): Result<T, void>; /** * Extracts result data from result object. \ * Throwing an error if the result object is a failed result * @param result The result object to extract the result from * @returns The result encapsulated in the result object */ export declare function fromResult<TValue, TError>(result: Result<TValue, TError>): TValue; /** * * Extracts result data from `PartialSuccess` object. * @param result A `PartialSuccess` result object that contain result and optional errors * @param throwOnError Specify `true` to throw an error if the result object has at least one error.\ * Otherwise `false`. * @returns The result encapsulated in the result object */ export declare function fromResult<TValue, TError>(result: PartialSuccess<TValue, TError>, throwOnError: boolean): TValue; /** * Extracts result data from result object. \ * Throwing an error if the result object is a failed result * @param result The result object to extract the result from * @returns The result encapsulated in the result object */ export declare function fromSimpleResult<TValue, TError>(result: Result<TValue, TError>): TValue; /** * * Extracts result data from `PartialSuccess` object. * @param result A `PartialSuccess` result object that contain result and optional errors * @param throwOnError Specify `true` to throw an error if the result object has at least one error.\ * Otherwise `false`. * @returns The result encapsulated in the result object */ export declare function fromPartialResult<TValue, TError>(result: PartialSuccess<TValue, TError>, throwOnError: boolean): TValue;