import type { DataDomain } from '../DataDomain.js';
import type { DomainEntity } from '../DomainEntity.js';
import type { DomainValidation } from './rules.js';
/**
 * EntityValidation is a class that performs validation on entities in a data domain.
 *
 * @remarks
 * - We do not need to check for parent uniqueness here, because in the graph there can only be one edge
 *   between two nodes. Parent relationships are described by an edge in the graph.
 */
export declare class EntityValidation {
    protected domain: DataDomain;
    constructor(domain: DataDomain);
    /**
     * Performs all the validation rules on the entity.
     * If you are interested in a specific rule, use the specific method.
     * @param target The target entity to validate. Can be a string with
     *               the entity key or a DomainEntity object.
     */
    validate(target: string | DomainEntity): DomainValidation[];
    /**
     * Validates the entity primary key.
     * @param entity The entity to validate
     */
    validatePrimaryKey(entity: DomainEntity): DomainValidation[];
    /**
     * Checks if an entity has properties through its entire inheritance chain.
     * This includes direct properties and properties inherited from any level of parent entities.
     * @param entity The entity to check
     * @returns True if the entity has properties either directly or through inheritance
     */
    private hasPropertiesInherited;
    /**
     * Checks if an entity has associations through its entire inheritance chain.
     * This includes direct associations and associations inherited from any level of parent entities.
     * @param entity The entity to check
     * @returns True if the entity has associations either directly or through inheritance
     */
    private hasAssociationsInherited;
    /**
     * Checks if the entity has the minimum required properties.
     * @param entity The entity to validate
     */
    minimumRequiredProperties(entity: DomainEntity): DomainValidation[];
    /**
     * Validates the entity name.
     *
     * @remarks
     * - An entity must have a name defined.
     * - The name has to follow the same rules as the names in a PostgreSQL database.
     *   - Table names must start with a letter (a-z) or underscore (_).
     *   - Subsequent characters can be letters, digits (0-9), or underscores (_).
     *   - Names are case-insensitive.
     *   - The maximum length of a table name is 31 characters
     *   - Should be snake case (it's a convention, not an error).
     *   - Should not be a reserved word (for example: "IN", "SELECT", "FROM", etc.).
     * @param entity The entity to validate
     */
    validateName(entity: DomainEntity): DomainValidation[];
    /**
     * Checks if the entity name is unique in the data domain.
     * @param entity The entity to validate
     */
    uniqueName(entity: DomainEntity): DomainValidation[];
}
//# sourceMappingURL=entity_validation.d.ts.map