schangxiang@126.com
2025-09-19 0821aa23eabe557c0d9ef5dbe6989c68be35d1fe
1
{"version":3,"sources":["../browser/src/metadata-builder/EntityMetadataBuilder.ts"],"names":[],"mappings":"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","file":"EntityMetadataBuilder.js","sourcesContent":["import {CockroachDriver} from \"../driver/cockroachdb/CockroachDriver\";\nimport {EntityMetadata} from \"../metadata/EntityMetadata\";\nimport {ColumnMetadata} from \"../metadata/ColumnMetadata\";\nimport {IndexMetadata} from \"../metadata/IndexMetadata\";\nimport {RelationMetadata} from \"../metadata/RelationMetadata\";\nimport {EmbeddedMetadata} from \"../metadata/EmbeddedMetadata\";\nimport {MetadataArgsStorage} from \"../metadata-args/MetadataArgsStorage\";\nimport {EmbeddedMetadataArgs} from \"../metadata-args/EmbeddedMetadataArgs\";\nimport {RelationIdMetadata} from \"../metadata/RelationIdMetadata\";\nimport {RelationCountMetadata} from \"../metadata/RelationCountMetadata\";\nimport {MetadataUtils} from \"./MetadataUtils\";\nimport {TableMetadataArgs} from \"../metadata-args/TableMetadataArgs\";\nimport {JunctionEntityMetadataBuilder} from \"./JunctionEntityMetadataBuilder\";\nimport {ClosureJunctionEntityMetadataBuilder} from \"./ClosureJunctionEntityMetadataBuilder\";\nimport {RelationJoinColumnBuilder} from \"./RelationJoinColumnBuilder\";\nimport {Connection} from \"../connection/Connection\";\nimport {EntityListenerMetadata} from \"../metadata/EntityListenerMetadata\";\nimport {UniqueMetadata} from \"../metadata/UniqueMetadata\";\nimport {MysqlDriver} from \"../driver/mysql/MysqlDriver\";\nimport {CheckMetadata} from \"../metadata/CheckMetadata\";\nimport {SqlServerDriver} from \"../driver/sqlserver/SqlServerDriver\";\nimport {PostgresDriver} from \"../driver/postgres/PostgresDriver\";\nimport {ExclusionMetadata} from \"../metadata/ExclusionMetadata\";\n\n/**\n * Builds EntityMetadata objects and all its sub-metadatas.\n */\nexport class EntityMetadataBuilder {\n\n    // -------------------------------------------------------------------------\n    // Protected Properties\n    // -------------------------------------------------------------------------\n\n    /**\n     * Used to build entity metadatas of the junction entities.\n     */\n    protected junctionEntityMetadataBuilder: JunctionEntityMetadataBuilder;\n\n    /**\n     * Used to build entity metadatas of the closure junction entities.\n     */\n    protected closureJunctionEntityMetadataBuilder: ClosureJunctionEntityMetadataBuilder;\n\n    /**\n     * Used to build join columns of the relations.\n     */\n    protected relationJoinColumnBuilder: RelationJoinColumnBuilder;\n\n    // -------------------------------------------------------------------------\n    // Constructor\n    // -------------------------------------------------------------------------\n\n    constructor(private connection: Connection,\n                private metadataArgsStorage: MetadataArgsStorage) {\n\n        this.junctionEntityMetadataBuilder = new JunctionEntityMetadataBuilder(connection);\n        this.closureJunctionEntityMetadataBuilder = new ClosureJunctionEntityMetadataBuilder(connection);\n        this.relationJoinColumnBuilder = new RelationJoinColumnBuilder(connection);\n    }\n\n    // -------------------------------------------------------------------------\n    // Public Methods\n    // -------------------------------------------------------------------------\n\n    /**\n     * Builds a complete entity metadatas for the given entity classes.\n     */\n    build(entityClasses?: Function[]): EntityMetadata[] {\n\n        // if entity classes to filter entities by are given then do filtering, otherwise use all\n        const allTables = entityClasses ? this.metadataArgsStorage.filterTables(entityClasses) : this.metadataArgsStorage.tables;\n\n        // filter out table metadata args for those we really create entity metadatas and tables in the db\n        const realTables = allTables.filter(table => table.type === \"regular\" || table.type === \"closure\" || table.type === \"entity-child\" || table.type === \"view\");\n\n        // create entity metadatas for a user defined entities (marked with @Entity decorator or loaded from entity schemas)\n        const entityMetadatas = realTables.map(tableArgs => this.createEntityMetadata(tableArgs));\n\n        // compute parent entity metadatas for table inheritance\n        entityMetadatas.forEach(entityMetadata => this.computeParentEntityMetadata(entityMetadatas, entityMetadata));\n\n        // after all metadatas created we set child entity metadatas for table inheritance\n        entityMetadatas.forEach(metadata => {\n            metadata.childEntityMetadatas = entityMetadatas.filter(childMetadata => {\n                return metadata.target instanceof Function\n                    && childMetadata.target instanceof Function\n                    && MetadataUtils.isInherited(childMetadata.target, metadata.target);\n            });\n        });\n\n        // build entity metadata (step0), first for non-single-table-inherited entity metadatas (dependant)\n        entityMetadatas\n            .filter(entityMetadata => entityMetadata.tableType !== \"entity-child\")\n            .forEach(entityMetadata => entityMetadata.build());\n\n        // build entity metadata (step0), now for single-table-inherited entity metadatas (dependant)\n        entityMetadatas\n            .filter(entityMetadata => entityMetadata.tableType === \"entity-child\")\n            .forEach(entityMetadata => entityMetadata.build());\n\n        // compute entity metadata columns, relations, etc. first for the regular, non-single-table-inherited entity metadatas\n        entityMetadatas\n            .filter(entityMetadata => entityMetadata.tableType !== \"entity-child\")\n            .forEach(entityMetadata => this.computeEntityMetadataStep1(entityMetadatas, entityMetadata));\n\n        // then do it for single table inheritance children (since they are depend on their parents to be built)\n        entityMetadatas\n            .filter(entityMetadata => entityMetadata.tableType === \"entity-child\")\n            .forEach(entityMetadata => this.computeEntityMetadataStep1(entityMetadatas, entityMetadata));\n\n        // calculate entity metadata computed properties and all its sub-metadatas\n        entityMetadatas.forEach(entityMetadata => this.computeEntityMetadataStep2(entityMetadata));\n\n        // calculate entity metadata's inverse properties\n        entityMetadatas.forEach(entityMetadata => this.computeInverseProperties(entityMetadata, entityMetadatas));\n\n        // go through all entity metadatas and create foreign keys / junction entity metadatas for their relations\n        entityMetadatas\n            .filter(entityMetadata => entityMetadata.tableType !== \"entity-child\")\n            .forEach(entityMetadata => {\n\n                // create entity's relations join columns (for many-to-one and one-to-one owner)\n                entityMetadata.relations.filter(relation => relation.isOneToOne || relation.isManyToOne).forEach(relation => {\n                    const joinColumns = this.metadataArgsStorage.filterJoinColumns(relation.target, relation.propertyName);\n                    const { foreignKey, uniqueConstraint } = this.relationJoinColumnBuilder.build(joinColumns, relation); // create a foreign key based on its metadata args\n                    if (foreignKey) {\n                        relation.registerForeignKeys(foreignKey); // push it to the relation and thus register there a join column\n                        entityMetadata.foreignKeys.push(foreignKey);\n                    }\n                    if (uniqueConstraint) {\n                        if (this.connection.driver instanceof MysqlDriver || this.connection.driver instanceof SqlServerDriver) {\n                            const index = new IndexMetadata({\n                                entityMetadata: uniqueConstraint.entityMetadata,\n                                columns: uniqueConstraint.columns,\n                                args: {\n                                    target: uniqueConstraint.target!,\n                                    name: uniqueConstraint.name,\n                                    unique: true,\n                                    synchronize: true\n                                }\n                            });\n\n                            if (this.connection.driver instanceof SqlServerDriver) {\n                                index.where = index.columns.map(column => {\n                                    return `${this.connection.driver.escape(column.databaseName)} IS NOT NULL`;\n                                }).join(\" AND \");\n                            }\n\n                            if (relation.embeddedMetadata) {\n                                relation.embeddedMetadata.indices.push(index);\n                            } else {\n                                relation.entityMetadata.ownIndices.push(index);\n                            }\n                            this.computeEntityMetadataStep2(entityMetadata);\n\n                        } else {\n                            if (relation.embeddedMetadata) {\n                                relation.embeddedMetadata.uniques.push(uniqueConstraint);\n                            } else {\n                                relation.entityMetadata.ownUniques.push(uniqueConstraint);\n                            }\n                            this.computeEntityMetadataStep2(entityMetadata);\n                        }\n                    }\n\n                    if (foreignKey && this.connection.driver instanceof CockroachDriver) {\n                        const index = new IndexMetadata({\n                            entityMetadata: relation.entityMetadata,\n                            columns: foreignKey.columns,\n                            args: {\n                                target: relation.entityMetadata.target!,\n                                synchronize: true\n                            }\n                        });\n                        if (relation.embeddedMetadata) {\n                            relation.embeddedMetadata.indices.push(index);\n                        } else {\n                            relation.entityMetadata.ownIndices.push(index);\n                        }\n                        this.computeEntityMetadataStep2(entityMetadata);\n                    }\n                });\n\n                // create junction entity metadatas for entity many-to-many relations\n                entityMetadata.relations.filter(relation => relation.isManyToMany).forEach(relation => {\n                    const joinTable = this.metadataArgsStorage.findJoinTable(relation.target, relation.propertyName)!;\n                    if (!joinTable) return; // no join table set - no need to do anything (it means this is many-to-many inverse side)\n\n                    // here we create a junction entity metadata for a new junction table of many-to-many relation\n                    const junctionEntityMetadata = this.junctionEntityMetadataBuilder.build(relation, joinTable);\n                    relation.registerForeignKeys(...junctionEntityMetadata.foreignKeys);\n                    relation.registerJunctionEntityMetadata(junctionEntityMetadata);\n\n                    // compute new entity metadata properties and push it to entity metadatas pool\n                    this.computeEntityMetadataStep2(junctionEntityMetadata);\n                    this.computeInverseProperties(junctionEntityMetadata, entityMetadatas);\n                    entityMetadatas.push(junctionEntityMetadata);\n                });\n\n        });\n\n        // update entity metadata depend properties\n        entityMetadatas\n            .forEach(entityMetadata => {\n                entityMetadata.relationsWithJoinColumns = entityMetadata.relations.filter(relation => relation.isWithJoinColumn);\n                entityMetadata.hasNonNullableRelations = entityMetadata.relationsWithJoinColumns.some(relation => !relation.isNullable || relation.isPrimary);\n            });\n\n        // generate closure junction tables for all closure tables\n        entityMetadatas\n            .filter(metadata => metadata.treeType === \"closure-table\")\n            .forEach(entityMetadata => {\n                const closureJunctionEntityMetadata = this.closureJunctionEntityMetadataBuilder.build(entityMetadata);\n                entityMetadata.closureJunctionTable = closureJunctionEntityMetadata;\n                this.computeEntityMetadataStep2(closureJunctionEntityMetadata);\n                this.computeInverseProperties(closureJunctionEntityMetadata, entityMetadatas);\n                entityMetadatas.push(closureJunctionEntityMetadata);\n            });\n\n        // generate keys for tables with single-table inheritance\n        entityMetadatas\n            .filter(metadata => metadata.inheritancePattern === \"STI\" && metadata.discriminatorColumn)\n            .forEach(entityMetadata => this.createKeysForTableInheritance(entityMetadata));\n\n        // build all indices (need to do it after relations and their join columns are built)\n        entityMetadatas.forEach(entityMetadata => {\n            entityMetadata.indices.forEach(index => index.build(this.connection.namingStrategy));\n        });\n\n        // build all unique constraints (need to do it after relations and their join columns are built)\n        entityMetadatas.forEach(entityMetadata => {\n            entityMetadata.uniques.forEach(unique => unique.build(this.connection.namingStrategy));\n        });\n\n        // build all check constraints\n        entityMetadatas.forEach(entityMetadata => {\n            entityMetadata.checks.forEach(check => check.build(this.connection.namingStrategy));\n        });\n\n        // build all exclusion constraints\n        entityMetadatas.forEach(entityMetadata => {\n            entityMetadata.exclusions.forEach(exclusion => exclusion.build(this.connection.namingStrategy));\n        });\n\n        // add lazy initializer for entity relations\n        entityMetadatas\n            .filter(metadata => metadata.target instanceof Function)\n            .forEach(entityMetadata => {\n                entityMetadata.relations\n                    .filter(relation => relation.isLazy)\n                    .forEach(relation => {\n                        this.connection.relationLoader.enableLazyLoad(relation, (entityMetadata.target as Function).prototype);\n                    });\n            });\n\n        entityMetadatas.forEach(entityMetadata => {\n            entityMetadata.columns.forEach(column => {\n                // const target = column.embeddedMetadata ? column.embeddedMetadata.type : column.target;\n                const generated = this.metadataArgsStorage.findGenerated(column.target, column.propertyName);\n                if (generated) {\n                    column.isGenerated = true;\n                    column.generationStrategy = generated.strategy;\n                    if (generated.strategy === \"uuid\") {\n                        column.type = \"uuid\";\n                    } else if (generated.strategy === \"rowid\") {\n                        column.type = \"int\";\n                    } else {\n                        column.type = column.type || Number;\n                    }\n                    column.build(this.connection);\n                    this.computeEntityMetadataStep2(entityMetadata);\n                }\n            });\n\n        });\n\n        return entityMetadatas;\n    }\n\n    // -------------------------------------------------------------------------\n    // Protected Methods\n    // -------------------------------------------------------------------------\n\n    /**\n     * Creates entity metadata from the given table args.\n     * Creates column, relation, etc. metadatas for everything this entity metadata owns.\n     */\n    protected createEntityMetadata(tableArgs: TableMetadataArgs): EntityMetadata {\n\n        // we take all \"inheritance tree\" from a target entity to collect all stored metadata args\n        // (by decorators or inside entity schemas). For example for target Post < ContentModel < Unit\n        // it will be an array of [Post, ContentModel, Unit] and we can then get all metadata args of those classes\n        const inheritanceTree: any[] = tableArgs.target instanceof Function\n            ? MetadataUtils.getInheritanceTree(tableArgs.target)\n            : [tableArgs.target]; // todo: implement later here inheritance for string-targets\n\n        const tableInheritance = this.metadataArgsStorage.findInheritanceType(tableArgs.target);\n        const tableTree = this.metadataArgsStorage.findTree(tableArgs.target);\n\n        // if single table inheritance used, we need to copy all children columns in to parent table\n        let singleTableChildrenTargets: any[];\n        if ((tableInheritance && tableInheritance.pattern === \"STI\") || tableArgs.type === \"entity-child\") {\n            singleTableChildrenTargets = this.metadataArgsStorage\n                .filterSingleTableChildren(tableArgs.target)\n                .map(args => args.target)\n                .filter(target => target instanceof Function);\n\n            inheritanceTree.push(...singleTableChildrenTargets);\n        }\n\n        return new EntityMetadata({\n            connection: this.connection,\n            args: tableArgs,\n            inheritanceTree: inheritanceTree,\n            tableTree: tableTree,\n            inheritancePattern: tableInheritance ? tableInheritance.pattern : undefined\n        });\n    }\n\n    protected computeParentEntityMetadata(allEntityMetadatas: EntityMetadata[], entityMetadata: EntityMetadata) {\n\n        // after all metadatas created we set parent entity metadata for table inheritance\n        if (entityMetadata.tableType === \"entity-child\") {\n            entityMetadata.parentEntityMetadata = allEntityMetadatas.find(allEntityMetadata => {\n                return allEntityMetadata.inheritanceTree.indexOf(entityMetadata.target as Function) !== -1 && allEntityMetadata.inheritancePattern === \"STI\";\n            })!;\n        }\n    }\n\n    protected computeEntityMetadataStep1(allEntityMetadatas: EntityMetadata[], entityMetadata: EntityMetadata) {\n\n        const entityInheritance = this.metadataArgsStorage.findInheritanceType(entityMetadata.target);\n\n        const discriminatorValue = this.metadataArgsStorage.findDiscriminatorValue(entityMetadata.target);\n        entityMetadata.discriminatorValue = discriminatorValue ? discriminatorValue.value : (entityMetadata.target as any).name; // todo: pass this to naming strategy to generate a name\n\n        // if single table inheritance is used, we need to mark all embedded columns as nullable\n        entityMetadata.embeddeds = this.createEmbeddedsRecursively(entityMetadata, this.metadataArgsStorage.filterEmbeddeds(entityMetadata.inheritanceTree))\n            .map((embedded: EmbeddedMetadata): EmbeddedMetadata => {\n                 if (entityMetadata.inheritancePattern === \"STI\") {\n                     embedded.columns = embedded.columns.map((column: ColumnMetadata): ColumnMetadata => {\n                         column.isNullable = true;\n                         return column;\n                     });\n                 }\n                 return embedded;\n            });\n\n        entityMetadata.ownColumns = this.metadataArgsStorage\n            .filterColumns(entityMetadata.inheritanceTree)\n            .map(args => {\n\n                // for single table children we reuse columns created for their parents\n                if (entityMetadata.tableType === \"entity-child\")\n                    return entityMetadata.parentEntityMetadata.ownColumns.find(column => column.propertyName === args.propertyName)!;\n\n                const column = new ColumnMetadata({ connection: this.connection, entityMetadata, args });\n\n                // if single table inheritance used, we need to mark all inherit table columns as nullable\n                const columnInSingleTableInheritedChild = allEntityMetadatas.find(otherEntityMetadata => otherEntityMetadata.tableType === \"entity-child\" && otherEntityMetadata.target === args.target);\n                if (columnInSingleTableInheritedChild)\n                    column.isNullable = true;\n                return column;\n            });\n\n        // for table inheritance we need to add a discriminator column\n        //\n        if (entityInheritance && entityInheritance.column) {\n            const discriminatorColumnName = entityInheritance.column && entityInheritance.column.name ? entityInheritance.column.name : \"type\";\n            let discriminatorColumn = entityMetadata.ownColumns.find(column => column.propertyName === discriminatorColumnName);\n            if (!discriminatorColumn) {\n                discriminatorColumn = new ColumnMetadata({\n                    connection: this.connection,\n                    entityMetadata: entityMetadata,\n                    args: {\n                        target: entityMetadata.target,\n                        mode: \"virtual\",\n                        propertyName: discriminatorColumnName,\n                        options: entityInheritance.column || {\n                            name: discriminatorColumnName,\n                            type: \"varchar\",\n                            nullable: false\n                        }\n                    }\n                });\n                discriminatorColumn.isVirtual = true;\n                discriminatorColumn.isDiscriminator = true;\n                entityMetadata.ownColumns.push(discriminatorColumn);\n            } else {\n                discriminatorColumn.isDiscriminator = true;\n            }\n        }\n\n        // add discriminator column to the child entity metadatas\n        // discriminator column will not be there automatically since we are creating it in the code above\n        if (entityMetadata.tableType === \"entity-child\") {\n            const discriminatorColumn = entityMetadata.parentEntityMetadata.ownColumns.find(column => column.isDiscriminator);\n            if (discriminatorColumn && !entityMetadata.ownColumns.find(column => column === discriminatorColumn)) {\n                entityMetadata.ownColumns.push(discriminatorColumn);\n            }\n        }\n\n        // check if tree is used then we need to add extra columns for specific tree types\n        if (entityMetadata.treeType === \"materialized-path\") {\n            entityMetadata.ownColumns.push(new ColumnMetadata({\n                connection: this.connection,\n                entityMetadata: entityMetadata,\n                materializedPath: true,\n                args: {\n                    target: entityMetadata.target,\n                    mode: \"virtual\",\n                    propertyName: \"mpath\",\n                    options: /*tree.column || */ {\n                        name: \"mpath\",\n                        type: \"varchar\",\n                        nullable: true,\n                        default: \"\"\n                    }\n                }\n            }));\n\n        } else if (entityMetadata.treeType === \"nested-set\") {\n            entityMetadata.ownColumns.push(new ColumnMetadata({\n                connection: this.connection,\n                entityMetadata: entityMetadata,\n                nestedSetLeft: true,\n                args: {\n                    target: entityMetadata.target,\n                    mode: \"virtual\",\n                    propertyName: \"nsleft\",\n                    options: /*tree.column || */ {\n                        name: \"nsleft\",\n                        type: \"integer\",\n                        nullable: false,\n                        default: 1\n                    }\n                }\n            }));\n            entityMetadata.ownColumns.push(new ColumnMetadata({\n                connection: this.connection,\n                entityMetadata: entityMetadata,\n                nestedSetRight: true,\n                args: {\n                    target: entityMetadata.target,\n                    mode: \"virtual\",\n                    propertyName: \"nsright\",\n                    options: /*tree.column || */ {\n                        name: \"nsright\",\n                        type: \"integer\",\n                        nullable: false,\n                        default: 2\n                    }\n                }\n            }));\n        }\n\n        entityMetadata.ownRelations = this.metadataArgsStorage.filterRelations(entityMetadata.inheritanceTree).map(args => {\n\n            // for single table children we reuse relations created for their parents\n            if (entityMetadata.tableType === \"entity-child\")\n                return entityMetadata.parentEntityMetadata.ownRelations.find(relation => relation.propertyName === args.propertyName)!;\n\n            return new RelationMetadata({ entityMetadata, args });\n        });\n        entityMetadata.relationIds = this.metadataArgsStorage.filterRelationIds(entityMetadata.inheritanceTree).map(args => {\n\n            // for single table children we reuse relation ids created for their parents\n            if (entityMetadata.tableType === \"entity-child\")\n                return entityMetadata.parentEntityMetadata.relationIds.find(relationId => relationId.propertyName === args.propertyName)!;\n\n            return new RelationIdMetadata({ entityMetadata, args });\n        });\n        entityMetadata.relationCounts = this.metadataArgsStorage.filterRelationCounts(entityMetadata.inheritanceTree).map(args => {\n\n            // for single table children we reuse relation counts created for their parents\n            if (entityMetadata.tableType === \"entity-child\")\n                return entityMetadata.parentEntityMetadata.relationCounts.find(relationCount => relationCount.propertyName === args.propertyName)!;\n\n            return new RelationCountMetadata({ entityMetadata, args });\n        });\n        entityMetadata.ownListeners = this.metadataArgsStorage.filterListeners(entityMetadata.inheritanceTree).map(args => {\n            return new EntityListenerMetadata({ entityMetadata: entityMetadata, args: args });\n        });\n        entityMetadata.checks = this.metadataArgsStorage.filterChecks(entityMetadata.inheritanceTree).map(args => {\n            return new CheckMetadata({ entityMetadata, args });\n        });\n\n        // Only PostgreSQL supports exclusion constraints.\n        if (this.connection.driver instanceof PostgresDriver) {\n            entityMetadata.exclusions = this.metadataArgsStorage.filterExclusions(entityMetadata.inheritanceTree).map(args => {\n                return new ExclusionMetadata({ entityMetadata, args });\n            });\n        }\n\n        if (this.connection.driver instanceof CockroachDriver) {\n            entityMetadata.ownIndices = this.metadataArgsStorage.filterIndices(entityMetadata.inheritanceTree)\n                .filter(args => !args.unique)\n                .map(args => {\n                    return new IndexMetadata({entityMetadata, args});\n                });\n\n            const uniques = this.metadataArgsStorage.filterIndices(entityMetadata.inheritanceTree)\n                .filter(args => args.unique)\n                .map(args => {\n                    return new UniqueMetadata({\n                        entityMetadata: entityMetadata,\n                        args: {\n                            target: args.target,\n                            name: args.name,\n                            columns: args.columns,\n                        }\n                    });\n                });\n            entityMetadata.ownUniques.push(...uniques);\n\n        } else {\n            entityMetadata.ownIndices = this.metadataArgsStorage.filterIndices(entityMetadata.inheritanceTree).map(args => {\n                return new IndexMetadata({entityMetadata, args});\n            });\n        }\n\n        // Mysql stores unique constraints as unique indices.\n        if (this.connection.driver instanceof MysqlDriver) {\n            const indices = this.metadataArgsStorage.filterUniques(entityMetadata.inheritanceTree).map(args => {\n                return new IndexMetadata({\n                    entityMetadata: entityMetadata,\n                    args: {\n                        target: args.target,\n                        name: args.name,\n                        columns: args.columns,\n                        unique: true,\n                        synchronize: true\n                    }\n                });\n            });\n            entityMetadata.ownIndices.push(...indices);\n\n        } else {\n            const uniques = this.metadataArgsStorage.filterUniques(entityMetadata.inheritanceTree).map(args => {\n                return new UniqueMetadata({ entityMetadata, args });\n            });\n            entityMetadata.ownUniques.push(...uniques);\n        }\n    }\n\n    /**\n     * Creates from the given embedded metadata args real embedded metadatas with its columns and relations,\n     * and does the same for all its sub-embeddeds (goes recursively).\n     */\n    protected createEmbeddedsRecursively(entityMetadata: EntityMetadata, embeddedArgs: EmbeddedMetadataArgs[]): EmbeddedMetadata[] {\n        return embeddedArgs.map(embeddedArgs => {\n            const embeddedMetadata = new EmbeddedMetadata({ entityMetadata: entityMetadata, args: embeddedArgs });\n            const targets = MetadataUtils.getInheritanceTree(embeddedMetadata.type);\n\n            embeddedMetadata.columns = this.metadataArgsStorage.filterColumns(targets).map(args => {\n                return new ColumnMetadata({ connection: this.connection, entityMetadata, embeddedMetadata, args});\n            });\n            embeddedMetadata.relations = this.metadataArgsStorage.filterRelations(targets).map(args => {\n                return new RelationMetadata({ entityMetadata, embeddedMetadata, args });\n            });\n            embeddedMetadata.listeners = this.metadataArgsStorage.filterListeners(targets).map(args => {\n                return new EntityListenerMetadata({ entityMetadata, embeddedMetadata, args });\n            });\n            embeddedMetadata.indices = this.metadataArgsStorage.filterIndices(targets).map(args => {\n                return new IndexMetadata({ entityMetadata, embeddedMetadata, args });\n            });\n            embeddedMetadata.uniques = this.metadataArgsStorage.filterUniques(targets).map(args => {\n                return new UniqueMetadata({ entityMetadata, embeddedMetadata, args });\n            });\n            embeddedMetadata.relationIds = this.metadataArgsStorage.filterRelationIds(targets).map(args => {\n                return new RelationIdMetadata({ entityMetadata, args });\n            });\n            embeddedMetadata.relationCounts = this.metadataArgsStorage.filterRelationCounts(targets).map(args => {\n                return new RelationCountMetadata({ entityMetadata, args });\n            });\n            embeddedMetadata.embeddeds = this.createEmbeddedsRecursively(entityMetadata, this.metadataArgsStorage.filterEmbeddeds(targets));\n            embeddedMetadata.embeddeds.forEach(subEmbedded => subEmbedded.parentEmbeddedMetadata = embeddedMetadata);\n            entityMetadata.allEmbeddeds.push(embeddedMetadata);\n            return embeddedMetadata;\n        });\n    }\n\n    /**\n     * Computes all entity metadata's computed properties, and all its sub-metadatas (relations, columns, embeds, etc).\n     */\n    protected computeEntityMetadataStep2(entityMetadata: EntityMetadata) {\n        entityMetadata.embeddeds.forEach(embedded => embedded.build(this.connection));\n        entityMetadata.embeddeds.forEach(embedded => {\n            embedded.columnsFromTree.forEach(column => column.build(this.connection));\n            embedded.relationsFromTree.forEach(relation => relation.build());\n        });\n        entityMetadata.ownColumns.forEach(column => column.build(this.connection));\n        entityMetadata.ownRelations.forEach(relation => relation.build());\n        entityMetadata.relations = entityMetadata.embeddeds.reduce((relations, embedded) => relations.concat(embedded.relationsFromTree), entityMetadata.ownRelations);\n        entityMetadata.eagerRelations = entityMetadata.relations.filter(relation => relation.isEager);\n        entityMetadata.lazyRelations = entityMetadata.relations.filter(relation => relation.isLazy);\n        entityMetadata.oneToOneRelations = entityMetadata.relations.filter(relation => relation.isOneToOne);\n        entityMetadata.oneToManyRelations = entityMetadata.relations.filter(relation => relation.isOneToMany);\n        entityMetadata.manyToOneRelations = entityMetadata.relations.filter(relation => relation.isManyToOne);\n        entityMetadata.manyToManyRelations = entityMetadata.relations.filter(relation => relation.isManyToMany);\n        entityMetadata.ownerOneToOneRelations = entityMetadata.relations.filter(relation => relation.isOneToOneOwner);\n        entityMetadata.ownerManyToManyRelations = entityMetadata.relations.filter(relation => relation.isManyToManyOwner);\n        entityMetadata.treeParentRelation = entityMetadata.relations.find(relation => relation.isTreeParent);\n        entityMetadata.treeChildrenRelation = entityMetadata.relations.find(relation => relation.isTreeChildren);\n        entityMetadata.columns = entityMetadata.embeddeds.reduce((columns, embedded) => columns.concat(embedded.columnsFromTree), entityMetadata.ownColumns);\n        entityMetadata.listeners = entityMetadata.embeddeds.reduce((columns, embedded) => columns.concat(embedded.listenersFromTree), entityMetadata.ownListeners);\n        entityMetadata.afterLoadListeners = entityMetadata.listeners.filter(listener => listener.type === \"after-load\");\n        entityMetadata.afterInsertListeners = entityMetadata.listeners.filter(listener => listener.type === \"after-insert\");\n        entityMetadata.afterUpdateListeners = entityMetadata.listeners.filter(listener => listener.type === \"after-update\");\n        entityMetadata.afterRemoveListeners = entityMetadata.listeners.filter(listener => listener.type === \"after-remove\");\n        entityMetadata.beforeInsertListeners = entityMetadata.listeners.filter(listener => listener.type === \"before-insert\");\n        entityMetadata.beforeUpdateListeners = entityMetadata.listeners.filter(listener => listener.type === \"before-update\");\n        entityMetadata.beforeRemoveListeners = entityMetadata.listeners.filter(listener => listener.type === \"before-remove\");\n        entityMetadata.indices = entityMetadata.embeddeds.reduce((columns, embedded) => columns.concat(embedded.indicesFromTree), entityMetadata.ownIndices);\n        entityMetadata.uniques = entityMetadata.embeddeds.reduce((columns, embedded) => columns.concat(embedded.uniquesFromTree), entityMetadata.ownUniques);\n        entityMetadata.primaryColumns = entityMetadata.columns.filter(column => column.isPrimary);\n        entityMetadata.nonVirtualColumns = entityMetadata.columns.filter(column => !column.isVirtual);\n        entityMetadata.ancestorColumns = entityMetadata.columns.filter(column => column.closureType === \"ancestor\");\n        entityMetadata.descendantColumns = entityMetadata.columns.filter(column => column.closureType === \"descendant\");\n        entityMetadata.hasMultiplePrimaryKeys = entityMetadata.primaryColumns.length > 1;\n        entityMetadata.generatedColumns = entityMetadata.columns.filter(column => column.isGenerated || column.isObjectId);\n        entityMetadata.hasUUIDGeneratedColumns = entityMetadata.columns.filter(column => column.isGenerated || column.generationStrategy === \"uuid\").length > 0;\n        entityMetadata.createDateColumn = entityMetadata.columns.find(column => column.isCreateDate);\n        entityMetadata.updateDateColumn = entityMetadata.columns.find(column => column.isUpdateDate);\n        entityMetadata.versionColumn = entityMetadata.columns.find(column => column.isVersion);\n        entityMetadata.discriminatorColumn = entityMetadata.columns.find(column => column.isDiscriminator);\n        entityMetadata.treeLevelColumn = entityMetadata.columns.find(column => column.isTreeLevel);\n        entityMetadata.nestedSetLeftColumn = entityMetadata.columns.find(column => column.isNestedSetLeft);\n        entityMetadata.nestedSetRightColumn = entityMetadata.columns.find(column => column.isNestedSetRight);\n        entityMetadata.materializedPathColumn = entityMetadata.columns.find(column => column.isMaterializedPath);\n        entityMetadata.objectIdColumn = entityMetadata.columns.find(column => column.isObjectId);\n        entityMetadata.foreignKeys.forEach(foreignKey => foreignKey.build(this.connection.namingStrategy));\n        entityMetadata.propertiesMap = entityMetadata.createPropertiesMap();\n        entityMetadata.relationIds.forEach(relationId => relationId.build());\n        entityMetadata.relationCounts.forEach(relationCount => relationCount.build());\n        entityMetadata.embeddeds.forEach(embedded => {\n            embedded.relationIdsFromTree.forEach(relationId => relationId.build());\n            embedded.relationCountsFromTree.forEach(relationCount => relationCount.build());\n        });\n    }\n\n    /**\n     * Computes entity metadata's relations inverse side properties.\n     */\n    protected computeInverseProperties(entityMetadata: EntityMetadata, entityMetadatas: EntityMetadata[]) {\n        entityMetadata.relations.forEach(relation => {\n\n            // compute inverse side (related) entity metadatas for all relation metadatas\n            const inverseEntityMetadata = entityMetadatas.find(m => m.target === relation.type || (typeof relation.type === \"string\" && m.targetName === relation.type));\n            if (!inverseEntityMetadata)\n                throw new Error(\"Entity metadata for \" + entityMetadata.name + \"#\" + relation.propertyPath + \" was not found. Check if you specified a correct entity object and if it's connected in the connection options.\");\n\n            relation.inverseEntityMetadata = inverseEntityMetadata;\n            relation.inverseSidePropertyPath = relation.buildInverseSidePropertyPath();\n\n            // and compute inverse relation and mark if it has such\n            relation.inverseRelation = inverseEntityMetadata.relations.find(foundRelation => foundRelation.propertyPath === relation.inverseSidePropertyPath);\n        });\n    }\n\n    /**\n     * Creates indices for the table of single table inheritance.\n     */\n    protected createKeysForTableInheritance(entityMetadata: EntityMetadata) {\n        entityMetadata.indices.push(\n            new IndexMetadata({\n                entityMetadata: entityMetadata,\n                columns: [entityMetadata.discriminatorColumn!],\n                args: {\n                    target: entityMetadata.target,\n                    unique: false\n                }\n            }),\n        );\n    }\n\n}\n"],"sourceRoot":".."}