UNPKG

@synet/patterns

Version:

Robust, battle-tested collection of stable patterns used in Synet packages

61 lines (60 loc) 2.02 kB
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[]>; };