@softwareventures/maintain-project
Version:
Automatically create and maintain TypeScript projects with standard settings for Software Ventures Limited
56 lines (55 loc) • 6.35 kB
TypeScript
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 {};