@altostra/core
Version:
Core library for shared types and logic
67 lines (66 loc) • 3.89 kB
TypeScript
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;