333
schangxiang@126.com
2025-09-19 18966e02fb573c7e2bb0c6426ed792b38b910940
1
{"version":3,"sources":["../../src/metadata-builder/JunctionEntityMetadataBuilder.ts"],"names":[],"mappings":"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","file":"JunctionEntityMetadataBuilder.js","sourcesContent":["import {MysqlDriver} from \"../driver/mysql/MysqlDriver\";\nimport {ColumnMetadata} from \"../metadata/ColumnMetadata\";\nimport {Connection} from \"../connection/Connection\";\nimport {EntityMetadata} from \"../metadata/EntityMetadata\";\nimport {ForeignKeyMetadata} from \"../metadata/ForeignKeyMetadata\";\nimport {IndexMetadata} from \"../metadata/IndexMetadata\";\nimport {JoinTableMetadataArgs} from \"../metadata-args/JoinTableMetadataArgs\";\nimport {RelationMetadata} from \"../metadata/RelationMetadata\";\n\n/**\n * Creates EntityMetadata for junction tables.\n * Junction tables are tables generated by many-to-many relations.\n */\nexport class JunctionEntityMetadataBuilder {\n\n    // -------------------------------------------------------------------------\n    // Constructor\n    // -------------------------------------------------------------------------\n\n    constructor(private connection: Connection) {\n    }\n\n    // -------------------------------------------------------------------------\n    // Public Methods\n    // -------------------------------------------------------------------------\n\n    /**\n     * Builds EntityMetadata for the junction of the given many-to-many relation.\n     */\n    build(relation: RelationMetadata, joinTable: JoinTableMetadataArgs): EntityMetadata {\n        const referencedColumns = this.collectReferencedColumns(relation, joinTable);\n        const inverseReferencedColumns = this.collectInverseReferencedColumns(relation, joinTable);\n\n        const joinTableName = joinTable.name || this.connection.namingStrategy.joinTableName(\n            relation.entityMetadata.tableNameWithoutPrefix,\n            relation.inverseEntityMetadata.tableNameWithoutPrefix,\n            relation.propertyPath,\n            relation.inverseRelation ? relation.inverseRelation.propertyName : \"\"\n        );\n\n        const entityMetadata = new EntityMetadata({\n            connection: this.connection,\n            args: {\n                target: \"\",\n                name: joinTableName,\n                type: \"junction\",\n                database: joinTable.database || relation.entityMetadata.database,\n                schema: joinTable.schema || relation.entityMetadata.schema,\n            }\n        });\n        entityMetadata.build();\n\n        // create original side junction columns\n        const junctionColumns = referencedColumns.map(referencedColumn => {\n            const joinColumn = joinTable.joinColumns ? joinTable.joinColumns.find(joinColumnArgs => {\n                return (!joinColumnArgs.referencedColumnName || joinColumnArgs.referencedColumnName === referencedColumn.propertyName) &&\n                    !!joinColumnArgs.name;\n            }) : undefined;\n            const columnName = joinColumn && joinColumn.name ? joinColumn.name\n                : this.connection.namingStrategy.joinTableColumnName(relation.entityMetadata.tableNameWithoutPrefix, referencedColumn.propertyName, referencedColumn.databaseName);\n\n            return new ColumnMetadata({\n                connection: this.connection,\n                entityMetadata: entityMetadata,\n                referencedColumn: referencedColumn,\n                args: {\n                    target: \"\",\n                    mode: \"virtual\",\n                    propertyName: columnName,\n                    options: {\n                        name: columnName,\n                        length: !referencedColumn.length\n                        && (this.connection.driver instanceof MysqlDriver)\n                        && (referencedColumn.generationStrategy === \"uuid\" || referencedColumn.type === \"uuid\")\n                            ? \"36\"\n                            : referencedColumn.length, // fix https://github.com/typeorm/typeorm/issues/3604\n                        width: referencedColumn.width,\n                        type: referencedColumn.type,\n                        precision: referencedColumn.precision,\n                        scale: referencedColumn.scale,\n                        charset: referencedColumn.charset,\n                        collation: referencedColumn.collation,\n                        zerofill: referencedColumn.zerofill,\n                        unsigned: referencedColumn.zerofill ? true : referencedColumn.unsigned,\n                        nullable: false,\n                        primary: true,\n                    }\n                }\n            });\n        });\n\n        // create inverse side junction columns\n        const inverseJunctionColumns = inverseReferencedColumns.map(inverseReferencedColumn => {\n            const joinColumn = joinTable.inverseJoinColumns ? joinTable.inverseJoinColumns.find(joinColumnArgs => {\n                return (!joinColumnArgs.referencedColumnName || joinColumnArgs.referencedColumnName === inverseReferencedColumn.propertyName) &&\n                    !!joinColumnArgs.name;\n            }) : undefined;\n            const columnName = joinColumn && joinColumn.name ? joinColumn.name\n                : this.connection.namingStrategy.joinTableInverseColumnName(relation.inverseEntityMetadata.tableNameWithoutPrefix, inverseReferencedColumn.propertyName, inverseReferencedColumn.databaseName);\n\n            return new ColumnMetadata({\n                connection: this.connection,\n                entityMetadata: entityMetadata,\n                referencedColumn: inverseReferencedColumn,\n                args: {\n                    target: \"\",\n                    mode: \"virtual\",\n                    propertyName: columnName,\n                    options: {\n                        length: !inverseReferencedColumn.length\n                        && (this.connection.driver instanceof MysqlDriver)\n                        && (inverseReferencedColumn.generationStrategy === \"uuid\" || inverseReferencedColumn.type === \"uuid\")\n                            ? \"36\"\n                            : inverseReferencedColumn.length, // fix https://github.com/typeorm/typeorm/issues/3604\n                        type: inverseReferencedColumn.type,\n                        precision: inverseReferencedColumn.precision,\n                        scale: inverseReferencedColumn.scale,\n                        charset: inverseReferencedColumn.charset,\n                        collation: inverseReferencedColumn.collation,\n                        zerofill: inverseReferencedColumn.zerofill,\n                        unsigned: inverseReferencedColumn.zerofill ? true : inverseReferencedColumn.unsigned,\n                        name: columnName,\n                        nullable: false,\n                        primary: true,\n                    }\n                }\n            });\n        });\n\n        this.changeDuplicatedColumnNames(junctionColumns, inverseJunctionColumns);\n\n        // set junction table columns\n        entityMetadata.ownerColumns = junctionColumns;\n        entityMetadata.inverseColumns = inverseJunctionColumns;\n        entityMetadata.ownColumns = [...junctionColumns, ...inverseJunctionColumns];\n        entityMetadata.ownColumns.forEach(column => column.relationMetadata = relation);\n\n        // create junction table foreign keys\n        entityMetadata.foreignKeys = [\n            new ForeignKeyMetadata({\n                entityMetadata: entityMetadata,\n                referencedEntityMetadata: relation.entityMetadata,\n                columns: junctionColumns,\n                referencedColumns: referencedColumns,\n                onDelete: relation.onDelete ||  \"CASCADE\"\n            }),\n            new ForeignKeyMetadata({\n                entityMetadata: entityMetadata,\n                referencedEntityMetadata: relation.inverseEntityMetadata,\n                columns: inverseJunctionColumns,\n                referencedColumns: inverseReferencedColumns,\n                onDelete: relation.onDelete || \"CASCADE\"\n            }),\n        ];\n\n        // create junction table indices\n        entityMetadata.ownIndices = [\n            new IndexMetadata({\n                entityMetadata: entityMetadata,\n                columns: junctionColumns,\n                args: {\n                    target: entityMetadata.target,\n                    synchronize: true\n                }\n            }),\n\n            new IndexMetadata({\n                entityMetadata: entityMetadata,\n                columns: inverseJunctionColumns,\n                args: {\n                    target: entityMetadata.target,\n                    synchronize: true\n                }\n            })\n        ];\n\n        // finally return entity metadata\n        return entityMetadata;\n    }\n\n    // -------------------------------------------------------------------------\n    // Protected Methods\n    // -------------------------------------------------------------------------\n\n    /**\n     * Collects referenced columns from the given join column args.\n     */\n    protected collectReferencedColumns(relation: RelationMetadata, joinTable: JoinTableMetadataArgs): ColumnMetadata[] {\n        const hasAnyReferencedColumnName = joinTable.joinColumns ? joinTable.joinColumns.find(joinColumn => !!joinColumn.referencedColumnName) : false;\n        if (!joinTable.joinColumns || (joinTable.joinColumns && !hasAnyReferencedColumnName)) {\n            return relation.entityMetadata.columns.filter(column => column.isPrimary);\n        } else {\n            return joinTable.joinColumns.map(joinColumn => {\n                const referencedColumn = relation.entityMetadata.columns.find(column => column.propertyName === joinColumn.referencedColumnName);\n                if (!referencedColumn)\n                    throw new Error(`Referenced column ${joinColumn.referencedColumnName} was not found in entity ${relation.entityMetadata.name}`);\n\n                return referencedColumn;\n            });\n        }\n    }\n\n    /**\n     * Collects inverse referenced columns from the given join column args.\n     */\n    protected collectInverseReferencedColumns(relation: RelationMetadata, joinTable: JoinTableMetadataArgs): ColumnMetadata[] {\n        const hasInverseJoinColumns = !!joinTable.inverseJoinColumns;\n        const hasAnyInverseReferencedColumnName = hasInverseJoinColumns ? joinTable.inverseJoinColumns!.find(joinColumn => !!joinColumn.referencedColumnName) : false;\n        if (!hasInverseJoinColumns || (hasInverseJoinColumns && !hasAnyInverseReferencedColumnName)) {\n            return relation.inverseEntityMetadata.primaryColumns;\n        } else {\n            return joinTable.inverseJoinColumns!.map(joinColumn => {\n                const referencedColumn = relation.inverseEntityMetadata.ownColumns.find(column => column.propertyName === joinColumn.referencedColumnName);\n                if (!referencedColumn)\n                    throw new Error(`Referenced column ${joinColumn.referencedColumnName} was not found in entity ${relation.inverseEntityMetadata.name}`);\n\n                return referencedColumn;\n            });\n        }\n    }\n\n    protected changeDuplicatedColumnNames(junctionColumns: ColumnMetadata[], inverseJunctionColumns: ColumnMetadata[]) {\n        junctionColumns.forEach(junctionColumn => {\n            inverseJunctionColumns.forEach(inverseJunctionColumn => {\n                if (junctionColumn.givenDatabaseName === inverseJunctionColumn.givenDatabaseName) {\n                    const junctionColumnName = this.connection.namingStrategy.joinTableColumnDuplicationPrefix(junctionColumn.propertyName, 1);\n                    junctionColumn.propertyName = junctionColumnName;\n                    junctionColumn.givenDatabaseName = junctionColumnName;\n\n                    const inverseJunctionColumnName = this.connection.namingStrategy.joinTableColumnDuplicationPrefix(inverseJunctionColumn.propertyName, 2);\n                    inverseJunctionColumn.propertyName = inverseJunctionColumnName;\n                    inverseJunctionColumn.givenDatabaseName = inverseJunctionColumnName;\n                }\n            });\n        });\n    }\n\n}\n"],"sourceRoot":".."}