{"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":".."}
|