333
schangxiang@126.com
2025-09-19 18966e02fb573c7e2bb0c6426ed792b38b910940
1
{"version":3,"sources":["../../src/metadata-builder/EntityMetadataValidator.ts"],"names":[],"mappings":"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","file":"EntityMetadataValidator.js","sourcesContent":["import {EntityMetadata} from \"../metadata/EntityMetadata\";\nimport {MissingPrimaryColumnError} from \"../error/MissingPrimaryColumnError\";\nimport {CircularRelationsError} from \"../error/CircularRelationsError\";\nimport {DepGraph} from \"../util/DepGraph\";\nimport {Driver} from \"../driver/Driver\";\nimport {DataTypeNotSupportedError} from \"../error/DataTypeNotSupportedError\";\nimport {ColumnType} from \"../driver/types/ColumnTypes\";\nimport {MongoDriver} from \"../driver/mongodb/MongoDriver\";\nimport {SqlServerDriver} from \"../driver/sqlserver/SqlServerDriver\";\nimport {MysqlDriver} from \"../driver/mysql/MysqlDriver\";\nimport {NoConnectionOptionError} from \"../error/NoConnectionOptionError\";\nimport {InitializedRelationError} from \"../error/InitializedRelationError\";\n\n/// todo: add check if there are multiple tables with the same name\n/// todo: add checks when generated column / table names are too long for the specific driver\n// todo: type in function validation, inverse side function validation\n// todo: check on build for duplicate names, since naming checking was removed from MetadataStorage\n// todo: duplicate name checking for: table, relation, column, index, naming strategy, join tables/columns?\n// todo: check if multiple tree parent metadatas in validator\n// todo: tree decorators can be used only on closure table (validation)\n// todo: throw error if parent tree metadata was not specified in a closure table\n\n// todo: MetadataArgsStorage: type in function validation, inverse side function validation\n// todo: MetadataArgsStorage: check on build for duplicate names, since naming checking was removed from MetadataStorage\n// todo: MetadataArgsStorage: duplicate name checking for: table, relation, column, index, naming strategy, join tables/columns?\n// todo: MetadataArgsStorage: check for duplicate targets too since this check has been removed too\n// todo: check if relation decorator contains primary: true and nullable: true\n// todo: check column length, precision. scale\n// todo: MySQL index can be unique or spatial or fulltext\n\n/**\n * Validates built entity metadatas.\n */\nexport class EntityMetadataValidator {\n\n    // -------------------------------------------------------------------------\n    // Public Methods\n    // -------------------------------------------------------------------------\n\n    /**\n     * Validates all given entity metadatas.\n     */\n    validateMany(entityMetadatas: EntityMetadata[], driver: Driver) {\n        entityMetadatas.forEach(entityMetadata => this.validate(entityMetadata, entityMetadatas, driver));\n        this.validateDependencies(entityMetadatas);\n        this.validateEagerRelations(entityMetadatas);\n    }\n\n    /**\n     * Validates given entity metadata.\n     */\n    validate(entityMetadata: EntityMetadata, allEntityMetadatas: EntityMetadata[], driver: Driver) {\n\n        // check if table metadata has an id\n        if (!entityMetadata.primaryColumns.length && !entityMetadata.isJunction)\n            throw new MissingPrimaryColumnError(entityMetadata);\n\n        // validate if table is using inheritance it has a discriminator\n        // also validate if discriminator values are not empty and not repeated\n        if (entityMetadata.inheritancePattern === \"STI\") {\n            if (!entityMetadata.discriminatorColumn)\n                throw new Error(`Entity ${entityMetadata.name} using single-table inheritance, it should also have a discriminator column. Did you forget to put discriminator column options?`);\n\n            if ([\"\", undefined, null].indexOf(entityMetadata.discriminatorValue) !== -1)\n                throw new Error(`Entity ${entityMetadata.name} has empty discriminator value. Discriminator value should not be empty.`);\n\n            const sameDiscriminatorValueEntityMetadata = allEntityMetadatas.find(metadata => {\n                return metadata !== entityMetadata && metadata.discriminatorValue === entityMetadata.discriminatorValue;\n            });\n            if (sameDiscriminatorValueEntityMetadata)\n                throw new Error(`Entities ${entityMetadata.name} and ${sameDiscriminatorValueEntityMetadata.name} as equal discriminator values. Make sure their discriminator values are not equal using @DiscriminatorValue decorator.`);\n        }\n\n        entityMetadata.relationCounts.forEach(relationCount => {\n            if (relationCount.relation.isManyToOne || relationCount.relation.isOneToOne)\n                throw new Error(`Relation count can not be implemented on ManyToOne or OneToOne relations.`);\n        });\n\n        if (!(driver instanceof MongoDriver)) {\n            entityMetadata.columns.forEach(column => {\n                const normalizedColumn = driver.normalizeType(column) as ColumnType;\n                if (driver.supportedDataTypes.indexOf(normalizedColumn) === -1)\n                    throw new DataTypeNotSupportedError(column, normalizedColumn, driver.options.type);\n                if (column.length && driver.withLengthColumnTypes.indexOf(normalizedColumn) === -1)\n                    throw new Error(`Column ${column.propertyName} of Entity ${entityMetadata.name} does not support length property.`);\n            });\n        }\n\n        if (driver instanceof MysqlDriver) {\n            const generatedColumns = entityMetadata.columns.filter(column => column.isGenerated && column.generationStrategy !== \"uuid\");\n            if (generatedColumns.length > 1)\n                throw new Error(`Error in ${entityMetadata.name} entity. There can be only one auto-increment column in MySql table.`);\n        }\n\n        // for mysql we are able to not define a default selected database, instead all entities can have their database\n        // defined in their decorators. To make everything work either all entities must have database define and we\n        // can live without database set in the connection options, either database in the connection options must be set\n        if (driver instanceof MysqlDriver) {\n            const metadatasWithDatabase = allEntityMetadatas.filter(metadata => metadata.database);\n            if (metadatasWithDatabase.length === 0 && !driver.database)\n                throw new NoConnectionOptionError(\"database\");\n        }\n\n        if (driver instanceof SqlServerDriver) {\n            const charsetColumns = entityMetadata.columns.filter(column => column.charset);\n            if (charsetColumns.length > 1)\n                throw new Error(`Character set specifying is not supported in Sql Server`);\n        }\n\n        // check if relations are all without initialized properties\n        const entityInstance = entityMetadata.create();\n        entityMetadata.relations.forEach(relation => {\n            if (relation.isManyToMany || relation.isOneToMany) {\n\n                // we skip relations for which persistence is disabled since initialization in them cannot harm somehow\n                if (relation.persistenceEnabled === false)\n                    return;\n\n                // get entity relation value and check if its an array\n                const relationInitializedValue = relation.getEntityValue(entityInstance);\n                if (relationInitializedValue instanceof Array)\n                    throw new InitializedRelationError(relation);\n            }\n        });\n\n        // validate relations\n        entityMetadata.relations.forEach(relation => {\n\n            // check join tables:\n            // using JoinTable is possible only on one side of the many-to-many relation\n            // todo(dima): fix\n            // if (relation.joinTable) {\n            //     if (!relation.isManyToMany)\n            //         throw new UsingJoinTableIsNotAllowedError(entityMetadata, relation);\n\n            //     // if there is inverse side of the relation, then check if it does not have join table too\n            //     if (relation.hasInverseSide && relation.inverseRelation.joinTable)\n            //         throw new UsingJoinTableOnlyOnOneSideAllowedError(entityMetadata, relation);\n            // }\n\n            // check join columns:\n            // using JoinColumn is possible only on one side of the relation and on one-to-one, many-to-one relation types\n            // first check if relation is one-to-one or many-to-one\n            // todo(dima): fix\n            /*if (relation.joinColumn) {\n\n                // join column can be applied only on one-to-one and many-to-one relations\n                if (!relation.isOneToOne && !relation.isManyToOne)\n                    throw new UsingJoinColumnIsNotAllowedError(entityMetadata, relation);\n\n                // if there is inverse side of the relation, then check if it does not have join table too\n                if (relation.hasInverseSide && relation.inverseRelation.joinColumn && relation.isOneToOne)\n                    throw new UsingJoinColumnOnlyOnOneSideAllowedError(entityMetadata, relation);\n\n                // check if join column really has referenced column\n                if (relation.joinColumn && !relation.joinColumn.referencedColumn)\n                    throw new Error(`Join column does not have referenced column set`);\n\n            }\n\n            // if its a one-to-one relation and JoinColumn is missing on both sides of the relation\n            // or its one-side relation without JoinColumn we should give an error\n            if (!relation.joinColumn && relation.isOneToOne && (!relation.hasInverseSide || !relation.inverseRelation.joinColumn))\n                throw new MissingJoinColumnError(entityMetadata, relation);*/\n\n            // if its a many-to-many relation and JoinTable is missing on both sides of the relation\n            // or its one-side relation without JoinTable we should give an error\n            // todo(dima): fix it\n            // if (!relation.joinTable && relation.isManyToMany && (!relation.hasInverseSide || !relation.inverseRelation.joinTable))\n            //     throw new MissingJoinTableError(entityMetadata, relation);\n\n\n            // todo: validate if its one-to-one and side which does not have join column MUST have inverse side\n            // todo: validate if its many-to-many and side which does not have join table MUST have inverse side\n            // todo: if there is a relation, and inverse side is specified only on one side, shall we give error\n            // todo: with message like: \"Inverse side is specified only on one side of the relationship. Specify on other side too to prevent confusion\".\n            // todo: add validation if there two entities with the same target, and show error message with description of the problem (maybe file was renamed/moved but left in output directory)\n            // todo: check if there are multiple columns on the same column applied.\n            // todo: check column type if is missing in relational databases (throw new Error(`Column type of ${type} cannot be determined.`);)\n            // todo: include driver-specific checks. for example in mongodb empty prefixes are not allowed\n            // todo: if multiple columns with same name - throw exception, including cases when columns are in embeds with same prefixes or without prefix at all\n            // todo: if multiple primary key used, at least one of them must be unique or @Index decorator must be set on entity\n            // todo: check if entity with duplicate names, some decorators exist\n\n\n        });\n\n        // make sure cascade remove is not set for both sides of relationships (can be set in OneToOne decorators)\n        entityMetadata.relations.forEach(relation => {\n            const isCircularCascadeRemove = relation.isCascadeRemove && relation.inverseRelation && relation.inverseRelation!.isCascadeRemove;\n            if (isCircularCascadeRemove)\n                throw new Error(`Relation ${entityMetadata.name}#${relation.propertyName} and ${relation.inverseRelation!.entityMetadata.name}#${relation.inverseRelation!.propertyName} both has cascade remove set. ` +\n                    `This may lead to unexpected circular removals. Please set cascade remove only from one side of relationship.`);\n        }); // todo: maybe better just deny removal from one to one relation without join column?\n\n        entityMetadata.eagerRelations.forEach(relation => {\n\n        });\n    }\n\n    /**\n     * Validates dependencies of the entity metadatas.\n     */\n    protected validateDependencies(entityMetadatas: EntityMetadata[]) {\n\n        const graph = new DepGraph();\n        entityMetadatas.forEach(entityMetadata => {\n            graph.addNode(entityMetadata.name);\n        });\n        entityMetadatas.forEach(entityMetadata => {\n            entityMetadata.relationsWithJoinColumns\n                .filter(relation => !relation.isNullable)\n                .forEach(relation => {\n                    graph.addDependency(entityMetadata.name, relation.inverseEntityMetadata.name);\n                });\n        });\n        try {\n            graph.overallOrder();\n\n        } catch (err) {\n            throw new CircularRelationsError(err.toString().replace(\"Error: Dependency Cycle Found: \", \"\"));\n        }\n    }\n\n    /**\n     * Validates eager relations to prevent circular dependency in them.\n     */\n    protected validateEagerRelations(entityMetadatas: EntityMetadata[]) {\n        entityMetadatas.forEach(entityMetadata => {\n            entityMetadata.eagerRelations.forEach(relation => {\n                if (relation.inverseRelation && relation.inverseRelation.isEager)\n                    throw new Error(`Circular eager relations are disallowed. ` +\n                        `${entityMetadata.targetName}#${relation.propertyPath} contains \"eager: true\", and its inverse side ` +\n                        `${relation.inverseEntityMetadata.targetName}#${relation.inverseRelation.propertyPath} contains \"eager: true\" as well.` +\n                        ` Remove \"eager: true\" from one side of the relation.`);\n            });\n        });\n    }\n\n}"],"sourceRoot":".."}