import { IBaseModelConstructor, IModelMetadataOptions, IModelMetadata, IModelPropertyMetadata, IModelRelationMetadata, IModelPropertyMetadataOptions, IModelRelationMetadataOptions } from './interfaces';
export declare class ModelMetadata implements IModelMetadata {
    protected _name: string;
    protected _pluralName: string;
    protected _autoId: boolean;
    protected _connectionName: string;
    protected _properties: Map<string, IModelPropertyMetadata>;
    protected _relations: Map<string, IModelRelationMetadata>;
    protected _model: IBaseModelConstructor;
    protected _raw: any;
    constructor(options: IModelMetadataOptions, properties?: {
        [key: string]: IModelPropertyMetadataOptions;
    }, relations?: {
        [key: string]: IModelRelationMetadataOptions;
    });
    name: string;
    pluralName: string;
    autoId: boolean;
    properties: IterableIterator<IModelPropertyMetadata>;
    relations: IterableIterator<IModelRelationMetadata>;
    connectionName: string;
    idProperty: IModelPropertyMetadata;
    validationSchema: {
        [key: string]: any;
    };
    asyncValidationSchema: {
        [key: string]: any;
    };
    defineProperty(options: IModelPropertyMetadataOptions): void;
    buildPropertyId(name: string, type: any): void;
    getProperty(name: string): IModelPropertyMetadata;
    hasProperty(name: string): boolean;
    isAllowedProperty(name: string): boolean;
    defineRelation(options: IModelRelationMetadataOptions): void;
    apply(model: any): void;
}
