import { Observable, ObservableInputTuple } from 'rxjs';
import { BuilderState, BuilderStateTuple, CacheStrategy } from '../types';
/**
 * This function merges multiple observables and applies a project function when all observables are done.
 * It returns an Observable that emits either the value of type A[number] or a BuilderState<T>.
 * @param tag - A string representing the tag.
 * @param sources - An array of Observables.
 * @param project - A function that takes an array of BuilderState<R> and returns a Promise<T>.
 * @param cacheStrategy - An optional parameter that defines the cache strategy.
 * @param mapper
 * @returns An Observable that emits either the value of type A[number] or a BuilderState<T>.
 */
export declare function mergeFactory<TCacheData, A extends ReadonlyArray<BuilderState<unknown>>, T, M>(tag: string, sources: [...ObservableInputTuple<A>], project: (...args: [...BuilderStateTuple<A>]) => Promise<T>, cacheStrategy: CacheStrategy<TCacheData, T>, mapper: (source: [...BuilderStateTuple<A>][number]) => M): Observable<BuilderState<T | M>>;
export declare function mergeFactory<TCacheData, A extends ReadonlyArray<BuilderState<unknown>>, T>(tag: string, sources: [...ObservableInputTuple<A>], project: (...args: [...BuilderStateTuple<A>]) => Promise<T>, cacheStrategy?: CacheStrategy<TCacheData, T>): Observable<A[number] | BuilderState<T>>;
