import { ColumnMetadata } from "../metadata/ColumnMetadata";
import type { DataSource } from "../data-source/DataSource";
import { EntityMetadata } from "../metadata/EntityMetadata";
import type { JoinTableMetadataArgs } from "../metadata-args/JoinTableMetadataArgs";
import type { RelationMetadata } from "../metadata/RelationMetadata";
/**
 * Creates EntityMetadata for junction tables.
 * Junction tables are tables generated by many-to-many relations.
 */
export declare class JunctionEntityMetadataBuilder {
    private dataSource;
    constructor(dataSource: DataSource);
    /**
     * Builds EntityMetadata for the junction of the given many-to-many relation.
     * @param relation
     * @param joinTable
     */
    build(relation: RelationMetadata, joinTable: JoinTableMetadataArgs): EntityMetadata;
    /**
     * Collects referenced columns from the given join column args.
     * @param relation
     * @param joinTable
     */
    protected collectReferencedColumns(relation: RelationMetadata, joinTable: JoinTableMetadataArgs): ColumnMetadata[];
    /**
     * Collects inverse referenced columns from the given join column args.
     * @param relation
     * @param joinTable
     */
    protected collectInverseReferencedColumns(relation: RelationMetadata, joinTable: JoinTableMetadataArgs): ColumnMetadata[];
    protected changeDuplicatedColumnNames(junctionColumns: ColumnMetadata[], inverseJunctionColumns: ColumnMetadata[]): void;
}
