import { CollectionImpl } from "../../collection/index.cjs";
import { CollectionOptionsIdentity } from "../../collection-options.cjs";
import { QueryIR } from "../ir.cjs";
export type CollectionResolver = (options: CollectionOptionsIdentity<any, string | number, any, any, any>) => CollectionImpl<any, string | number, any, any, any>;
/**
 * Gives every query-source placement its own runtime source identities.
 *
 * A reused builder describes the same query meaning, but each FROM, JOIN,
 * UNION, or include placement owns an independent position in the dataflow
 * graph. Expressions are immutable and can remain shared; source refs cannot
 * because their sourceId identifies that lexical position. A supplied
 * resolver also binds any retained descriptors while cloning the plan.
 */
export declare function cloneQueryForPlacement(query: QueryIR, resolveCollection?: CollectionResolver): QueryIR;
