/**
* @since 4.0.0
*/
import * as Cause from "../../Cause.ts";
import * as Exit from "../../Exit.ts";
import type { LazyArg } from "../../Function.ts";
import * as Option from "../../Option.ts";
import { type Pipeable } from "../../Pipeable.ts";
import type { Predicate, Refinement } from "../../Predicate.ts";
import * as Schema_ from "../../Schema.ts";
import type * as Types from "../../Types.ts";
/**
* @since 4.0.0
* @category type ids
*/
export type TypeId = "~effect/reactivity/AsyncResult";
/**
* @since 4.0.0
* @category type ids
*/
export declare const TypeId: TypeId;
/**
* @since 4.0.0
* @category models
*/
export type AsyncResult = Initial | Success | Failure;
/**
* @since 4.0.0
* @category Guards
*/
export declare const isAsyncResult: (u: unknown) => u is AsyncResult;
/**
* @since 4.0.0
* @category models
*/
export declare namespace AsyncResult {
/**
* @since 4.0.0
* @category models
*/
interface Proto extends Pipeable {
readonly [TypeId]: {
readonly E: (_: never) => E;
readonly A: (_: never) => A;
};
readonly waiting: boolean;
}
/**
* @since 4.0.0
*/
type Success = R extends AsyncResult ? A : never;
/**
* @since 4.0.0
*/
type Failure = R extends AsyncResult ? E : never;
}
/**
* @since 4.0.0
*/
export type With, A, E> = R extends Initial ? Initial : R extends Success ? Success : R extends Failure ? Failure : never;
/**
* @since 4.0.0
* @category refinements
*/
export declare const isWaiting: (result: AsyncResult) => boolean;
/**
* @since 4.0.0
* @category models
*/
export interface Initial extends AsyncResult.Proto {
readonly _tag: "Initial";
}
/**
* @since 4.0.0
* @category constructors
*/
export declare const fromExit: (exit: Exit.Exit) => Success | Failure;
/**
* @since 4.0.0
* @category constructors
*/
export declare const fromExitWithPrevious: (exit: Exit.Exit, previous: Option.Option>) => Success | Failure;
/**
* @since 4.0.0
* @category constructors
*/
export declare const waitingFrom: (previous: Option.Option>) => AsyncResult;
/**
* @since 4.0.0
* @category refinements
*/
export declare const isInitial: (result: AsyncResult) => result is Initial;
/**
* @since 4.0.0
* @category refinements
*/
export declare const isNotInitial: (result: AsyncResult) => result is Success | Failure;
/**
* @since 4.0.0
* @category constructors
*/
export declare const initial: (waiting?: boolean) => Initial;
/**
* @since 4.0.0
* @category models
*/
export interface Success extends AsyncResult.Proto {
readonly _tag: "Success";
readonly value: A;
readonly timestamp: number;
}
/**
* @since 4.0.0
* @category refinements
*/
export declare const isSuccess: (result: AsyncResult) => result is Success;
/**
* @since 4.0.0
* @category constructors
*/
export declare const success: (value: A, options?: {
readonly waiting?: boolean | undefined;
readonly timestamp?: number | undefined;
}) => Success;
/**
* @since 4.0.0
* @category models
*/
export interface Failure extends AsyncResult.Proto {
readonly _tag: "Failure";
readonly cause: Cause.Cause;
readonly previousSuccess: Option.Option>;
}
/**
* @since 4.0.0
* @category refinements
*/
export declare const isFailure: (result: AsyncResult) => result is Failure;
/**
* @since 4.0.0
* @category refinements
*/
export declare const isInterrupted: (result: AsyncResult) => result is Failure;
/**
* @since 4.0.0
* @category constructors
*/
export declare const failure: (cause: Cause.Cause, options?: {
readonly previousSuccess?: Option.Option> | undefined;
readonly waiting?: boolean | undefined;
}) => Failure;
/**
* @since 4.0.0
* @category constructors
*/
export declare const failureWithPrevious: (cause: Cause.Cause, options: {
readonly previous: Option.Option>;
readonly waiting?: boolean | undefined;
}) => Failure;
/**
* @since 4.0.0
* @category constructors
*/
export declare const fail: (error: E, options?: {
readonly previousSuccess?: Option.Option> | undefined;
readonly waiting?: boolean | undefined;
}) => Failure;
/**
* @since 4.0.0
* @category constructors
*/
export declare const failWithPrevious: (error: E, options: {
readonly previous: Option.Option>;
readonly waiting?: boolean | undefined;
}) => Failure;
/**
* @since 4.0.0
* @category constructors
*/
export declare const waiting: >(self: R, options?: {
readonly touch?: boolean | undefined;
}) => R;
/**
* @since 4.0.0
* @category combinators
*/
export declare const touch: >(result: A) => A;
/**
* @since 4.0.0
* @category constructors
*/
export declare const replacePrevious: , XE, A>(self: R, previous: Option.Option>) => With>;
/**
* @since 4.0.0
* @category accessors
*/
export declare const value: (self: AsyncResult) => Option.Option;
/**
* @since 4.0.0
* @category accessors
*/
export declare const getOrElse: {
/**
* @since 4.0.0
* @category accessors
*/
(orElse: LazyArg): (self: AsyncResult) => A | B;
/**
* @since 4.0.0
* @category accessors
*/
(self: AsyncResult, orElse: LazyArg): A | B;
};
/**
* @since 4.0.0
* @category accessors
*/
export declare const getOrThrow: (self: AsyncResult) => A;
/**
* @since 4.0.0
* @category accessors
*/
export declare const cause: (self: AsyncResult) => Option.Option>;
/**
* @since 4.0.0
* @category accessors
*/
export declare const error: (self: AsyncResult) => Option.Option;
/**
* @since 4.0.0
* @category combinators
*/
export declare const toExit: (self: AsyncResult) => Exit.Exit;
/**
* @since 4.0.0
* @category combinators
*/
export declare const map: {
/**
* @since 4.0.0
* @category combinators
*/
(f: (a: A) => B): (self: AsyncResult) => AsyncResult;
/**
* @since 4.0.0
* @category combinators
*/
(self: AsyncResult, f: (a: A) => B): AsyncResult;
};
/**
* @since 4.0.0
* @category combinators
*/
export declare const flatMap: {
/**
* @since 4.0.0
* @category combinators
*/
(f: (a: A, prev: Success) => AsyncResult): (self: AsyncResult) => AsyncResult;
/**
* @since 4.0.0
* @category combinators
*/
(self: AsyncResult, f: (a: A, prev: Success) => AsyncResult): AsyncResult;
};
/**
* @since 4.0.0
* @category combinators
*/
export declare const match: {
/**
* @since 4.0.0
* @category combinators
*/
(options: {
readonly onInitial: (_: Initial) => X;
readonly onFailure: (_: Failure) => Y;
readonly onSuccess: (_: Success) => Z;
}): (self: AsyncResult) => X | Y | Z;
/**
* @since 4.0.0
* @category combinators
*/
(self: AsyncResult, options: {
readonly onInitial: (_: Initial) => X;
readonly onFailure: (_: Failure) => Y;
readonly onSuccess: (_: Success) => Z;
}): X | Y | Z;
};
/**
* @since 4.0.0
* @category combinators
*/
export declare const matchWithError: {
/**
* @since 4.0.0
* @category combinators
*/
(options: {
readonly onInitial: (_: Initial) => W;
readonly onError: (error: E, _: Failure) => X;
readonly onDefect: (defect: unknown, _: Failure) => Y;
readonly onSuccess: (_: Success) => Z;
}): (self: AsyncResult) => W | X | Y | Z;
/**
* @since 4.0.0
* @category combinators
*/
(self: AsyncResult, options: {
readonly onInitial: (_: Initial) => W;
readonly onError: (error: E, _: Failure) => X;
readonly onDefect: (defect: unknown, _: Failure) => Y;
readonly onSuccess: (_: Success) => Z;
}): W | X | Y | Z;
};
/**
* @since 4.0.0
* @category combinators
*/
export declare const matchWithWaiting: {
/**
* @since 4.0.0
* @category combinators
*/
(options: {
readonly onWaiting: (_: AsyncResult) => W;
readonly onError: (error: E, _: Failure) => X;
readonly onDefect: (defect: unknown, _: Failure) => Y;
readonly onSuccess: (_: Success) => Z;
}): (self: AsyncResult) => W | X | Y | Z;
/**
* @since 4.0.0
* @category combinators
*/
(self: AsyncResult, options: {
readonly onWaiting: (_: AsyncResult) => W;
readonly onError: (error: E, _: Failure) => X;
readonly onDefect: (defect: unknown, _: Failure) => Y;
readonly onSuccess: (_: Success) => Z;
}): W | X | Y | Z;
};
/**
* Combines multiple results into a single result. Also works with non-result
* values.
*
* @since 4.0.0
* @category combinators
*/
export declare const all: | Record>(results: Arg) => AsyncResult<[Arg] extends [ReadonlyArray] ? { -readonly [K in keyof Arg]: [Arg[K]] extends [AsyncResult] ? _A : Arg[K]; } : [Arg] extends [Iterable] ? _A extends AsyncResult ? _AA : _A : [Arg] extends [Record] ? { -readonly [K in keyof Arg]: [Arg[K]] extends [AsyncResult] ? _A : Arg[K]; } : never, [Arg] extends [ReadonlyArray] ? AsyncResult.Failure : [Arg] extends [Iterable] ? AsyncResult.Failure<_A> : [Arg] extends [Record] ? AsyncResult.Failure : never>;
/**
* @since 4.0.0
* @category Builder
*/
export declare const builder: >(self: A) => Builder ? _A : never, A extends Failure ? _E_1 : never, A extends Initial ? true : never, A extends Failure ? Defect | Interrupt : never>;
/**
* @since 4.0.0
* @category Builder
*/
export interface Defect {
readonly _: unique symbol;
}
/**
* @since 4.0.0
* @category Builder
*/
export interface Interrupt {
readonly _: unique symbol;
}
/**
* @since 4.0.0
* @category Builder
*/
export type Builder = Pipeable & {
onWaiting(f: (result: AsyncResult) => B): Builder;
orElse(orElse: LazyArg): Out | B;
orNull(): Out | null;
render(): [A | I] extends [never] ? Out : Out | null;
} & ([A | E | I | F] extends [never] ? {
exhaustive(): Out;
} : unknown) & ([I] extends [never] ? unknown : {
onInitial(f: (result: Initial) => B): Builder;
onInitialOrWaiting(f: (result: AsyncResult) => B): Builder;
}) & ([A] extends [never] ? unknown : {
onSuccess(f: (value: A, result: Success) => B): Builder;
}) & ([E] extends [never] ? unknown : {
onError(f: (error: E, result: Failure) => B): Builder;
onErrorIf(refinement: Refinement, f: (error: B, result: Failure) => C): Builder>, I, F>;
onErrorIf(predicate: Predicate, f: (error: E, result: Failure) => C): Builder;
onErrorTag>, B>(tags: Tags, f: (error: Types.ExtractTag, result: Failure) => B): Builder, I, F>;
onErrorTag, B>(tag: Tag, f: (error: Types.ExtractTag, result: Failure) => B): Builder, I, F>;
}) & ([E | F] extends [never] ? unknown : {
onFailure(f: (cause: Cause.Cause, result: Failure) => B): Builder;
}) & (Interrupt extends F ? {
onInterrupt(f: (interruptors: ReadonlySet, result: Failure) => B): Builder>;
} : unknown) & (Defect extends F ? {
onDefect(f: (defect: unknown, result: Failure) => B): Builder>;
} : unknown);
/**
* @since 4.0.0
* @category Schemas
*/
export interface Schema extends Schema_.declareConstructor, AsyncResult, readonly [Success, Schema_.Cause]> {
readonly success: Success;
readonly error: Error;
}
/**
* @since 4.0.0
* @category Schemas
*/
export declare const Schema: (options: {
readonly success?: A | undefined;
readonly error?: E | undefined;
}) => Schema;
//# sourceMappingURL=AsyncResult.d.ts.map