import type z from 'zod'; import type { DenialReason } from '../common'; import type { KnownErrorCodes } from './ErrorCodes'; export type Result = Success | Failure; export interface SuccessOrError { success: boolean; value?: T; error?: E; } export interface Success { success: true; value: T; } export interface Failure { success: false; error: E; } export type ErrorType = { errorCode: string; errorMessage: string; [key: string]: any; }; export type MatchErrorCodes = { success: (data: T) => U; } & { [K in E['errorCode']]: (error: Extract) => U; }; export type GenericSuccess = T extends Array ? { success: true; items: T; } : T extends object ? { success: true; } & T : { success: true; value: T; }; export type GenericFailure = { success: false; } & E; export type GenericResult = GenericSuccess | GenericFailure; export type SimpleError = { errorCode: KnownErrorCodes; errorMessage: string; reason?: DenialReason; issues?: z.core.$ZodIssue[]; }; export type WrappedError = { errorCode: 'wrapped_error'; errorMessage: string; error: unknown; }; export interface MultiError { errorCode: 'multi_error'; errorMessage: string; errors: E[]; } export declare function logErrors(multiError: MultiError, prefix?: string): void; export declare function logError(error: ErrorType, prefix?: string, log?: (message: string, ...args: any[]) => void): void; export declare function genericResult(result: Result): GenericResult; export declare function mapResult(result: Result, fn: (value: T) => U): Result; export declare function flatMapResult(result: Result, fn: (value: T) => Result): Result; export declare function matchResult(result: Success, cases: { success: (data: T) => U; }): U; export declare function matchResult(result: Failure, cases: { [K in E['errorCode']]: (error: Extract) => U; }): U; export declare function matchResult(result: Result, cases: MatchErrorCodes): U; export declare function success(): Success; export declare function success(value: T): Success; export declare function failure(error: E): Failure; export declare function isSuccess(result: Result): result is Success; export declare function isFailure(result: Result): result is Failure; export declare function unwrap(result: Result): T; export declare function logResult(result: Result, message?: string): Result; export declare function wrap(fn: () => Promise): Promise>; export declare function wrap(fn: () => T): Result; export declare function wrap(promise: Promise): Promise>; export declare function wrap(value: T): Result; export declare class R implements SuccessOrError { readonly success: boolean; private readonly _data; protected constructor(success: boolean, _data: T | E); static success(value: T): Success; static failure(error: E): Failure; get value(): T; get error(): E; toString(): string; toJSON(): GenericResult; } //# sourceMappingURL=Result.d.ts.map