UNPKG

@softwareventures/maintain-project

Version:

Automatically create and maintain TypeScript projects with standard settings for Software Ventures Limited

56 lines (55 loc) 6.35 kB
import type { AsyncIterableLike } from "../collections/async-iterable.js"; export type Result<TReason = void, TValue = void> = Success<TValue> | Failure<TReason>; export interface Success<T = void> { readonly type: "success"; readonly value: T; } export interface Failure<T = void> { readonly type: "failure"; readonly reasons: readonly T[]; } export declare function success(): Success; export declare function success<T>(value: T): Success<T>; export declare function failure(): Failure; export declare function failure<T>(reasons: readonly T[]): Failure<T>; export declare function isSuccess<TReason, TValue>(result: Result<TReason, TValue>): result is Success<TValue>; export declare function isFailure<TReason, TValue>(result: Result<TReason, TValue>): result is Failure<TReason>; export declare function mapResult<TReason, TValue, TNewValue>(result: Result<TReason, TValue>, f: (value: TValue) => TNewValue): Result<TReason, TNewValue>; export declare function mapResultFn<TReason, TValue, TNewValue>(f: (value: TValue) => TNewValue): (result: Result<TReason, TValue>) => Result<TReason, TNewValue>; export declare function mapAsyncResult<TReason, TValue, TNewValue>(result: Result<TReason, TValue>, f: (value: TValue) => PromiseLike<TNewValue> | TNewValue): Promise<Result<TReason, TNewValue>>; export declare function mapAsyncResultFn<TReason, TValue, TNewValue>(f: (value: TValue) => PromiseLike<TNewValue> | TNewValue): (result: Result<TReason, TValue>) => Promise<Result<TReason, TNewValue>>; export declare function bindResult<TReason, TNewReason = TReason, TValue = void, TNewValue = void>(result: Result<TReason, TValue>, f: (value: TValue) => Result<TNewReason | TReason, TNewValue>): Result<TNewReason | TReason, TNewValue>; export declare function bindResultFn<TReason, TNewReason = TReason, TValue = void, TNewValue = void>(f: (value: TValue) => Result<TNewReason | TReason, TNewValue>): (result: Result<TReason, TValue>) => Result<TNewReason | TReason, TNewValue>; export declare function bindAsyncResult<TReason, TNewReason = TReason, TValue = void, TNewValue = void>(result: Result<TReason, TValue>, f: (value: TValue) => PromiseLike<Result<TNewReason | TReason, TNewValue>>): Promise<Result<TNewReason | TReason, TNewValue>>; export declare function bindAsyncResultFn<TReason, TNewReason = TReason, TValue = void, TNewValue = void>(f: (value: TValue) => PromiseLike<Result<TNewReason | TReason, TNewValue>>): (result: Result<TReason, TValue>) => Promise<Result<TNewReason | TReason, TNewValue>>; export declare function mapFailure<TReason, TValue>(result: Result<TReason, TValue>, f: (reason: TReason) => never): Success<TValue>; export declare function mapFailure<TReason, TValue, TNewReason>(result: Result<TReason, TValue>, f: (reason: TReason) => TNewReason): Result<TNewReason, TValue>; export declare function mapFailureFn<TReason, TValue>(f: (reason: TReason) => never): (result: Result<TReason, TValue>) => Success<TValue>; export declare function mapFailureFn<TReason, TValue, TNewReason>(f: (reason: TReason) => TNewReason): (result: Result<TReason, TValue>) => Result<TNewReason, TValue>; export declare function bindFailure<TReason, TNewReason, TValue, TNewValue = TValue>(result: Result<TReason, TValue>, f: (reasons: readonly TReason[]) => Result<TNewReason, TNewValue>): Result<TNewReason, TValue | TNewValue>; export declare function bindFailureFn<TReason, TNewReason, TValue, TNewValue = TValue>(f: (reasons: readonly TReason[]) => Result<TNewReason, TNewValue>): (result: Result<TReason, TValue>) => Result<TNewReason, TValue | TNewValue>; export declare function combineResults<TReason>(results: Iterable<Result<TReason>>): Result<TReason>; export declare function combineAsyncResults<TReason>(results: AsyncIterableLike<Result<TReason>>): Promise<Result<TReason>>; export declare function chainResults<TReason, TValue>(initial: TValue, actions: Iterable<(value: TValue) => Result<TReason, TValue>>): Result<TReason, TValue>; export declare function chainResultsFn<TReason, TValue>(actions: Iterable<(value: TValue) => Result<TReason, TValue>>): (initial: TValue) => Result<TReason, TValue>; export declare function chainAsyncResults<TReason, TValue>(initial: TValue, actions: Iterable<(value: TValue) => PromiseLike<Result<TReason, TValue>>>): Promise<Result<TReason, TValue>>; export declare function chainAsyncResultsFn<TReason, TValue>(actions: Iterable<(value: TValue) => PromiseLike<Result<TReason, TValue>>>): (initial: TValue) => Promise<Result<TReason, TValue>>; export declare function tolerantFoldAsyncResults<TElement, TReason, TAccumulator>(iterable: AsyncIterableLike<TElement>, f: (accumulator: TAccumulator, element: TElement) => Promise<Result<TReason, TAccumulator>> | Result<TReason, TAccumulator>, initial: TAccumulator): Promise<Result<TReason, TAccumulator>>; export declare function tolerantFoldAsyncResultsFn<TElement, TReason, TAccumulator>(f: (accumulator: TAccumulator, element: TElement) => Promise<Result<TReason, TAccumulator>> | Result<TReason, TAccumulator>, initial: TAccumulator): (iterable: AsyncIterableLike<TElement>) => Promise<Result<TReason, TAccumulator>>; type InferReasons<T> = T extends ReadonlyArray<Result<infer Reasons, unknown>> ? Reasons : never; type InferValue<T> = T extends Success<infer Value> ? Value : never; export declare function allResults<T extends Array<Result<unknown, unknown>>>(results: readonly [...T]): Result<InferReasons<T>, { [K in keyof T]: InferValue<T[K]>; }>; type InferAwaited<T> = T extends Promise<infer Value> ? Value : T; type InferAwaiteds<T extends unknown[]> = { [K in keyof T]: InferAwaited<T[K]>; }; export declare function allAsyncResults<T extends Array<Promise<Result<unknown, unknown>> | Result<unknown, unknown>>>(results: readonly [...T]): Promise<Result<InferReasons<InferAwaiteds<T>>, { [K in keyof T]: InferValue<InferAwaited<T[K]>>; }>>; export declare function toNullable<TValue>(result: Result<unknown, TValue>): TValue | null; export declare function toAsyncNullable<TValue>(result: Promise<Result<unknown, TValue>>): Promise<TValue | null>; export declare function throwFailure<TValue>(result: Result<unknown, TValue>, message?: string | undefined): TValue; export declare function throwFailureFn<TValue>(message: string): (result: Result<unknown, TValue>) => TValue; export {};