import type { EntityMetadata, EntityName } from '../typings.js'; import { type MetadataDiscoveryOptions } from '../utils/Configuration.js'; import type { MetadataStorage } from './MetadataStorage.js'; /** * @internal */ export declare class MetadataValidator { validateEntityDefinition(metadata: MetadataStorage, name: EntityName, options: MetadataDiscoveryOptions): void; validateDiscovered(discovered: EntityMetadata[], options: MetadataDiscoveryOptions): void; private validateReference; private validateTargetKey; /** * Checks if a property has a unique constraint (either via `unique: true` or single-property `@Unique` decorator). * Composite unique constraints are not sufficient for targetKey. */ private isPropertyUnique; private validatePolymorphicTargets; private validateBidirectional; private validateOwningSide; private validateInverseSide; private validateIndexes; private validateDuplicateFieldNames; private validateVersionField; /** * Validates that entity properties do not use dangerous names that could lead to * prototype pollution vulnerabilities. This validation ensures that property names * cannot be exploited to modify object prototypes when values are assigned during * entity hydration or persistence operations. * * @internal */ private validatePropertyNames; /** * Validates view entity configuration. * View entities must have an expression. */ private validateViewEntity; /** * Validates that STI and TPT are not mixed in the same inheritance hierarchy. * An entity hierarchy can use either STI (discriminatorColumn) or TPT (inheritance: 'tpt'), * but not both. * * Note: This validation runs before `initTablePerTypeInheritance` sets `inheritanceType`, * so we check the raw `inheritance` option from the decorator/schema. */ private validateInheritanceStrategies; }