import { Connection, SelectQueryBuilder } from "..";
import { EntitySchemaIndexOptions } from "./EntitySchemaIndexOptions";
import { EntitySchemaColumnOptions } from "./EntitySchemaColumnOptions";
import { EntitySchemaRelationOptions } from "./EntitySchemaRelationOptions";
import { OrderByCondition } from "../find-options/OrderByCondition";
import { TableType } from "../metadata/types/TableTypes";
import { EntitySchemaUniqueOptions } from "./EntitySchemaUniqueOptions";
import { EntitySchemaCheckOptions } from "./EntitySchemaCheckOptions";
import { EntitySchemaExclusionOptions } from "./EntitySchemaExclusionOptions";
/**
 * Interface for entity metadata mappings stored inside "schemas" instead of models decorated by decorators.
 */
export declare class EntitySchemaOptions<T> {
    /**
     * Name of the schema it extends.
     */
    extends?: string;
    /**
     * Target bind to this entity schema. Optional.
     */
    target?: Function;
    /**
     * Entity name.
     */
    name: string;
    /**
     * Table name.
     */
    tableName?: string;
    /**
     * Database name. Used in MySql and Sql Server.
     */
    database?: string;
    /**
     * Schema name. Used in Postgres and Sql Server.
     */
    schema?: string;
    /**
     * Table type.
     */
    type?: TableType;
    /**
     * Specifies a property name by which queries will perform ordering by default when fetching rows.
     */
    orderBy?: OrderByCondition;
    /**
     * Entity column's options.
     */
    columns: {
        [P in keyof T]?: EntitySchemaColumnOptions;
    };
    /**
     * Entity relation's options.
     */
    relations?: {
        [P in keyof T]?: EntitySchemaRelationOptions;
    };
    /**
    * Entity indices options.
    */
    indices?: EntitySchemaIndexOptions[];
    /**
    * Entity uniques options.
    */
    uniques?: EntitySchemaUniqueOptions[];
    /**
    * Entity check options.
    */
    checks?: EntitySchemaCheckOptions[];
    /**
    * Entity exclusion options.
    */
    exclusions?: EntitySchemaExclusionOptions[];
    /**
     * Indicates if schema synchronization is enabled or disabled for this entity.
     * If it will be set to false then schema sync will and migrations ignore this entity.
     * By default schema synchronization is enabled for all entities.
     */
    synchronize?: boolean;
    /**
     * View expression.
     */
    expression?: string | ((connection: Connection) => SelectQueryBuilder<any>);
}
