///
import * as Sequelize from 'sequelize';
import { Spec, SpecType } from 'pretur.spec';
import { Resolver, UnitializedResolver } from './resolver';
import { Synchronizer, UnitializedSynchronizer } from './synchronizer';
import { UninitializedSequelizeModel, SequelizeModel } from './sequelizeModel';
import { Pool } from './pool';
export declare type FieldWhereClause = F | Sequelize.WhereOptions | Sequelize.WhereOptions | Sequelize.col | Sequelize.and | Sequelize.or | Sequelize.WhereGeometryOptions | F[] | object;
export declare type AliasModelMap = {
[P in keyof T['records'] | keyof T['sets']]: string;
};
export declare type AliasKeyMap = {
[P in keyof T['records'] | keyof T['sets']]: keyof T['fields'];
};
export declare type FieldWhereBuilders = {
[P in keyof T['fields']]?: (value: T['fields'][P]) => FieldWhereClause;
};
export interface ModelDescriptor {
spec: Spec;
name: string;
primaryKeys: (keyof T['fields'])[];
sequelizeModel?: SequelizeModel;
resolver?: Resolver;
synchronizer?: Synchronizer;
aliasModelMap: AliasModelMap;
aliasKeyMap: AliasKeyMap;
allowedAttributes: (keyof T['fields'])[];
mutableAttributes: (keyof T['fields'])[];
defaultOrder: [keyof T['fields'], 'ASC' | 'DESC'];
fieldWhereBuilders?: FieldWhereBuilders;
sanitizeAttributes(attributes?: (keyof T['fields'])[] | keyof T['fields']): (keyof T['fields'])[];
initialize(pool: Pool): void;
}
export interface BuildModelDescriptorOptions {
sequelizeModel?: UninitializedSequelizeModel;
resolver?: UnitializedResolver;
synchronizer?: UnitializedSynchronizer;
defaultOrder?: [keyof T['fields'], 'ASC' | 'DESC'];
fieldWhereBuilders?: FieldWhereBuilders;
allowedAttributes?: (keyof T['fields'])[];
allowedMutableAttributes?: (keyof T['fields'])[];
}
export declare function buildModelDescriptor(spec: Spec, options?: BuildModelDescriptorOptions): ModelDescriptor;