import { type FactoryWithRequiredInput } from '../getter/getter'; import { type Maybe } from '../value/maybe.type'; /** * A function that tries an array of Promise factories one after another until one * produces a successful result. Returns `undefined` if none succeed. * * @param input - The input to pass to each factory. * @param config - Optional per-call configuration overrides. * @returns The first successful value, or `undefined` if no factory succeeds. */ export type TryWithPromiseFactoriesFunction = (input: I, config?: TryWithPromiseFactoriesFunctionOptionalConfig) => Promise>; /** * Optional per-call configuration for {@link TryWithPromiseFactoriesFunction}. */ export interface TryWithPromiseFactoriesFunctionOptionalConfig { /** * Whether or not to return a Maybe value if it is returned by one of the created promises. * * Defaults to false. */ readonly successOnMaybe?: boolean; /** * Whether or not to throw errors. * * Defaults to false. */ readonly throwErrors?: boolean; } /** * Configuration for creating a {@link TryWithPromiseFactoriesFunction} via {@link tryWithPromiseFactoriesFunction}. */ export interface TryWithPromiseFactoriesFunctionConfig extends TryWithPromiseFactoriesFunctionOptionalConfig { /** * Factories used to create new Promise valeus to test. * * Promises are generated one at a time. * * I.E. if the first factory's generated promise returns a non-successful value or throws an error, the next promise will be generated and tried. */ readonly promiseFactories: FactoryWithRequiredInput>, I>[]; } /** * Creates a {@link TryWithPromiseFactoriesFunction} that sequentially tries each promise factory * until one returns a non-null value (or a Maybe value if `successOnMaybe` is true). * * @param config - Configuration including the array of promise factories and default behavior options. * @returns A function that tries each factory in order for a given input. */ export declare function tryWithPromiseFactoriesFunction(config: TryWithPromiseFactoriesFunctionConfig): TryWithPromiseFactoriesFunction;