import { Result } from "../patterns/result";
/**
 * Extensions for the Result pattern following the Open/Closed Principle.
 * These add functionality without modifying the core Result class.
 */
export declare const ResultExtensions: {
    /**
     * Maps error from one Result type to another, preserving error details
     *
     * @example
     * const emailResult = Email.create(input);
     * if (emailResult.isFailure) {
     *   return ResultExtensions.mapError<Email, User>(emailResult);
     * }
     */
    mapError<FromType, ToType>(result: Result<FromType>): Result<ToType>;
    /**
     * Maps a successful result value to a different type
     *
     * @example
     * const userResult = User.create({ name: "John" });
     * const userDtoResult = ResultExtensions.mapSuccess(userResult, user => UserDto.fromUser(user));
     */
    mapSuccess<FromType, ToType>(result: Result<FromType>, mapper: (value: FromType) => ToType): Result<ToType>;
    /**
     * Chains multiple results together, short-circuiting on first failure
     *
     * @example
     * const finalResult = ResultExtensions.chain(
     *   () => validateInput(input),
     *   (validInput) => processInput(validInput),
     *   (processedData) => saveToDatabase(processedData)
     * );
     */
    chain<T1, T2>(result: Result<T1>, fn: (value: T1) => Result<T2>): Result<T2>;
};
/**
 * Additional useful Result transformations and combinations
 */
export declare const ResultCombinators: {
    /**
     * Returns first success result or combines all error messages
     *
     * @example
     * const result = ResultCombinators.any([
     *   primaryValidator(input),
     *   fallbackValidator(input)
     * ]);
     */
    any<T>(results: Result<T>[]): Result<T>;
    /**
     * Collects all successful results or returns first failure
     *
     * @example
     * const usersResult = ResultCombinators.all(
     *   userIds.map(id => userRepository.getById(id))
     * );
     */
    all<T>(results: Result<T>[]): Result<T[]>;
};
