/** * Discriminated union representing either a successful result (Ok) or an error (Err). * * @template Ok Type of successful value * @template Err Type of error value */ export type Result = Success | Failure; /** * Represents a successful operation result. * * @template T Type of the contained value. */ export type Success = { readonly $type: "ok"; readonly value: T; }; /** * Represents a failed operation result. * * @template T Type of the error information. */ export type Failure = { readonly $type: "err"; readonly err: T; }; /** * Creates a Success result with the given value. * * @example * const result: Result = Ok(42); */ export declare const Ok: (value: T) => Result; /** * Creates a Failure result with the given error. * * @example * const error: Result = Err("File not found"); */ export declare const Err: (err: T) => Result; export declare namespace Result { type Successes = T extends Success ? T : never; type Failures = T extends Failure ? T : never; /** * Type guard for Success results. * * @param v Result to check * @returns true if the result is a Success */ const isOk: (v: Result) => v is Success; /** * Type guard for Failure results. * * @param v Result to check * @returns true if the result is a Failure */ const isErr: (v: Result) => v is Failure; /** * Type guard that checks if a value is a valid Result. * * @param v Unknown value to check * @returns true if the value is either Success or Failure */ const is: (v: unknown) => v is Result; /** * Transforms a Success value while preserving error state. * * @template Ok Original success type * @template Ok2 New success type * @template Err Error type * * @param v Result to transform * @param fn Transformation function for success values * @returns New Result with transformed value or original error * * @example * const numResult = Ok(42); * const strResult = Result.map(numResult, n => n.toString()); */ const map: (v: Result, fn: (v: Ok) => Ok2) => Result; /** * Chains Result-producing operations. * * @template Ok Original success type * @template Err Original errors * @template Ok2 New success type * @template Err2 New errors * * @param v Initial Result value * @param fn Function that returns a new Result * @returns Combined Result from the operation chain * * @example * const result = Result.flatMap(Ok(42), n => n > 0 ? Ok(n) : Err("Negative")); */ const flatMap: (v: Result, fn: (v: Ok) => Result) => Result; /** * Transforms an Error value while preserving success state. * * @template Ok Success type * @template Err Original error type * @template Err2 New error type * * @param v Result to transform * @param fn Transformation function for error values * @returns New Result with original value or transformed error * * @example * const errResult = Err("error"); * const newErrResult = Result.mapErr(errResult, e => e.toUpperCase()); */ const mapErr: (v: Result, fn: (v: Err) => Err2) => Result; /** * Chains error-handling operations that may produce new errors. * * @template Ok Success type * @template Err Original error type * @template Err2 New error type * * @param v Initial Result value * @param fn Function that returns a new Result error * @returns Combined Result from the error-handling chain * * @example * const result = Result.flatMapErr(Err("error"), e => Err(e.toUpperCase())); */ const flatMapErr: (v: Result, fn: (v: Err) => Result) => Result; /** * Extracts the success value if Ok, otherwise computes a fallback value. * * @template Ok Success type * @template Err Error type * @template Out Return type (Ok or fallback type) * * @param v Result to extract from * @param fn Fallback function that computes a value if Result is Err * @returns The success value or the result of the fallback function * * @example * const result = Result.orElse(Ok(42), () => 0); * // => 42 * * @example * const result = Result.orElse(Err("error"), () => 0); * // => 0 */ const orElse: (v: Result, fn: (err: Err) => Out) => Ok | Out; /** * Converts a synchronous function's return value to a Result type. * * @param fn Function to execute * @returns Result containing: * - Original Result if function returns one * - Success with return value for non-Result returns * * @example * getUserFromDB // () => User * const getUser = () => Result.from(() => getUserFromDB()); // Result */ const from: (fn: () => T) => Result ? Ok : T extends Failure ? never : T, T extends Failure ? Err : never>; const fromAsync: (fn: () => T | Promise) => Promise ? Ok : T extends Failure ? never : T, T extends Failure ? Err : never>>; const tryCatch: (fn: () => T, handler?: (e: unknown) => Err) => Success | Failure; const tryCatchAsync: (fn: () => T | Promise, handler?: (e: unknown) => Err) => Promise> | Failure>; } export type Successes = T extends Success ? Ok : never; export type Failures = T extends Failure ? Err : never;