export interface ProjectModel {
    project: ProjectInfo;
    entities: Entity[] | {
        [entityName: string]: Entity;
    };
    baseProjectEntities?: Entity[] | {
        [entityName: string]: Entity;
    };
    enums: Enum[];
    views: View[];
    restQueries: RestQuery[];
    restServices: RestService[];
}
export interface ProjectInfo {
    name: string;
    namespace: string;
    modulePrefix: string;
    locales: Locale[];
    restClientId?: string;
    restClientSecret?: string;
}
export declare type InheritanceType = 'SINGLE_TABLE' | 'TABLE_PER_CLASS' | 'JOINED';
export interface Entity {
    name?: string;
    className: string;
    packageName: string;
    dataStore?: string;
    table?: string;
    parentClassName: string;
    discriminator?: string;
    updatable: boolean;
    creatable: boolean;
    hasUuid: boolean;
    softDelete: boolean;
    versioned: boolean;
    reference?: string;
    parentPackage: string;
    embeddable: boolean;
    persistentEntity: boolean;
    replaceParent: boolean;
    systemLevel: boolean;
    namePattern?: string;
    mappedSuperclass: boolean;
    fqn: string;
    imported: boolean;
    attributes: EntityAttribute[];
    inheritanceType?: InheritanceType;
    idAttributeName?: string;
}
export interface Datatype {
    packageName: string;
    className: string;
    fqn: string;
    label: string;
    entityName?: string;
}
export interface EnumValue {
    id: string;
    name: string;
}
export interface Enum extends Datatype {
    values: EnumValue[];
}
export declare type MappingType = 'DATATYPE' | 'ENUM' | 'ASSOCIATION' | 'COMPOSITION' | 'EMBEDDED';
export declare type TemporalType = 'DATE' | 'TIME' | 'TIMESTAMP';
export declare type Cardinality = 'ONE_TO_ONE' | 'ONE_TO_MANY' | 'MANY_TO_ONE' | 'MANY_TO_MANY';
export interface EntityAttribute {
    name: string;
    type: Datatype;
    mappingType: MappingType;
    cardinality?: Cardinality;
    readOnly: boolean;
    column: string;
    mandatory: boolean;
    unique: boolean;
    length: number;
    mappedBy?: string;
    transient: boolean;
    temporalType?: TemporalType;
}
export interface View {
    name: string;
    entity: string;
    classFqn: string;
    parentName: string;
    overwrite: boolean;
    systemProperties: boolean;
    properties: ViewProperty[];
    allProperties: ViewProperty[];
}
export interface ViewProperty {
    name: string;
    entity?: string;
    classFqn?: string;
    lazy?: boolean;
}
export declare type BuiltinView = '_local' | '_minimal' | '_base';
export interface Locale {
    code: string;
    caption: string;
}
export interface RestQuery {
    name: string;
    jpql: string;
    entity: string;
    view: string;
    params: RestParam[];
}
export interface RestParam {
    name: string;
    type: string;
}
export interface RestService {
    name: string;
    methods: RestServiceMethod[];
}
export interface RestServiceMethod {
    name: string;
    params: RestParam[];
}
export declare const FILE_DESCRIPTOR_FQN = "com.haulmont.cuba.core.entity.FileDescriptor";
export declare function getEntitiesArray(entities: Entity[] | {
    [entityName: string]: Entity;
} | undefined): Entity[];
