import { GraphCatalog } from "../catalog";
import { InternalJoinerServiceConfig } from "../types";
import { ChainLevel, ChainResolution, Hop } from "./types";
/**
 * Resolves a relation path all the way to a pushable join chain, classifying
 * paths that cannot be pushed (see {@link ChainResolution}).
 */
export declare function resolveChain(params: {
    rootConfig: InternalJoinerServiceConfig;
    pathSegments: string[];
}, catalog: GraphCatalog): ChainResolution;
/**
 * Resolves an alias-form relation path into per-hop info, expanding
 * fieldAlias shortcuts (e.g. `price_set` -> `price_set_link.price_set`) the
 * same way compile's parseProperties does. A segment resolves either to a
 * module-internal DML relation (from alias `__internal.relations` metadata)
 * or to a catalog relationship (link modules, read-only links). Returns
 * undefined when a segment resolves to neither, or when the graph schema
 * disagrees with the DML relation metadata.
 */
export declare function resolvePathHops(params: {
    rootConfig: InternalJoinerServiceConfig;
    pathSegments: string[];
}, catalog: GraphCatalog): Hop[] | undefined;
/**
 * Maps the resolved hops onto {@link CrossModuleJoinSpec}s, chaining via
 * `parent`. Three hop shapes are supported, one builder each:
 *
 * - (link module -> target) pairs: the link table joins the current position
 *   to an entity of another module.
 * - Read-only link hops: an FK column on the current position's table points
 *   at another module's entity. When the FK follows an internal hasMany hop,
 *   both fuse into a single spec with the internal child table acting as the
 *   link table (e.g. cart -> items -> product becomes
 *   `cart_line_item(cart_id -> product_id) -> product`).
 * - Module-internal DML relation hops (hasMany/belongsTo), standing alone as
 *   self-join levels so deeper levels can chain on them.
 */
export declare function buildChainLevels(params: {
    hops: Hop[];
    rootConfig: InternalJoinerServiceConfig;
    catalog: GraphCatalog;
}): ChainLevel[] | undefined;
//# sourceMappingURL=build-chain.d.ts.map