import { Enum, Entity, Property, RelationInfo } from '../../../domain';
export declare abstract class DomainConfigServiceBase<TEntity extends Entity, TProperty extends Property> {
    abstract get entities(): TEntity[];
    abstract get enums(): Enum[];
    getEntity(name: string): TEntity | undefined;
    getForcedEntity(name: string): TEntity;
    getEnum(name: string): Enum | undefined;
    isChild(entityName: string): boolean;
    existsProperty(entityName: string, name: string): boolean;
    getProperty(entityName: string, name: string): TProperty;
    getAutoIncrement(entityName: string): TProperty | undefined;
    getFieldIds(entityName: string): TProperty[] | undefined;
    listEntities(): string[];
    /**
     * Sort a list of entities according to their relationships
     * @param allEntities entities to order
     * @returns returns the sorted entities
     */
    sortByRelations(mainEntities: string[], allEntities: string[]): string[];
    /**
     * Sort a list of entities according to their dependencies
     * @param entities entities to order
     * @returns returns the sorted entities
     */
    sortByDependencies(entities?: string[]): string[];
    /**
     * Determines whether an entity can be included in the entity list based on its relationships
     * @param entityName name of entity
     * @param sorted current list of entities sorted by dependencies
     * @param parent entity parent , used in manyToOne relations
     * @returns
     */
    protected solveSortEntity(entityName: string, mainEntities: string[], allEntities: string[], sorted: string[], parent?: string): boolean;
    private unsolvedRelation;
    /**
     * Determines whether an entity can be included in the entity list based on its dependencies
     * @param entityName name of entity
     * @param sorted current list of entities sorted by dependencies
     * @param parent entity parent , used in manyToOne relations
     * @returns
     */
    protected hadDependencies(entity: TEntity, entities: string[], sorted: string[], parent?: string): boolean;
    private hadDependents;
    getRelation(entity: string, relation: string): RelationInfo;
}
