333
schangxiang@126.com
2025-09-19 18966e02fb573c7e2bb0c6426ed792b38b910940
1
{"version":3,"sources":["../browser/src/metadata-builder/ClosureJunctionEntityMetadataBuilder.ts"],"names":[],"mappings":"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","file":"ClosureJunctionEntityMetadataBuilder.js","sourcesContent":["import {EntityMetadata} from \"../metadata/EntityMetadata\";\nimport {ColumnMetadata} from \"../metadata/ColumnMetadata\";\nimport {ForeignKeyMetadata} from \"../metadata/ForeignKeyMetadata\";\nimport {Connection} from \"../connection/Connection\";\nimport {IndexMetadata} from \"../metadata/IndexMetadata\";\n\n/**\n * Creates EntityMetadata for junction tables of the closure entities.\n * Closure junction tables are tables generated by closure entities.\n */\nexport class ClosureJunctionEntityMetadataBuilder {\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 closure junction of the given closure entity.\n     */\n    build(parentClosureEntityMetadata: EntityMetadata) {\n\n        // create entity metadata itself\n        const entityMetadata = new EntityMetadata({\n            parentClosureEntityMetadata: parentClosureEntityMetadata,\n            connection: this.connection,\n            args: {\n                target: \"\",\n                name: parentClosureEntityMetadata.tableNameWithoutPrefix,\n                type: \"closure-junction\"\n            }\n        });\n        entityMetadata.build();\n\n        // create ancestor and descendant columns for new closure junction table\n        parentClosureEntityMetadata.primaryColumns.forEach(primaryColumn => {\n            entityMetadata.ownColumns.push(new ColumnMetadata({\n                connection: this.connection,\n                entityMetadata: entityMetadata,\n                closureType: \"ancestor\",\n                referencedColumn: primaryColumn,\n                args: {\n                    target: \"\",\n                    mode: \"virtual\",\n                    propertyName: primaryColumn.propertyName + \"_ancestor\", // todo: naming strategy\n                    options: {\n                        primary: true,\n                        length: primaryColumn.length,\n                        type: primaryColumn.type\n                    }\n                }\n            }));\n            entityMetadata.ownColumns.push(new ColumnMetadata({\n                connection: this.connection,\n                entityMetadata: entityMetadata,\n                closureType: \"descendant\",\n                referencedColumn: primaryColumn,\n                args: {\n                    target: \"\",\n                    mode: \"virtual\",\n                    propertyName: primaryColumn.propertyName + \"_descendant\",\n                    options: {\n                        primary: true,\n                        length: primaryColumn.length,\n                        type: primaryColumn.type,\n                    }\n                }\n            }));\n        });\n\n        entityMetadata.ownIndices = [\n            new IndexMetadata({\n                entityMetadata: entityMetadata,\n                columns: [entityMetadata.ownColumns[0]],\n                args: {\n                    target: entityMetadata.target,\n                    synchronize: true\n                }\n            }),\n            new IndexMetadata({\n                entityMetadata: entityMetadata,\n                columns: [entityMetadata.ownColumns[1]],\n                args: {\n                    target: entityMetadata.target,\n                    synchronize: true\n                }\n            })\n        ];\n\n        // if tree level column was defined by a closure entity then add it to the junction columns as well\n        if (parentClosureEntityMetadata.treeLevelColumn) {\n            entityMetadata.ownColumns.push(new ColumnMetadata({\n                connection: this.connection,\n                entityMetadata: entityMetadata,\n                args: {\n                    target: \"\",\n                    mode: \"virtual\",\n                    propertyName: \"level\",\n                    options: {\n                        type: this.connection.driver.mappedDataTypes.treeLevel,\n                    }\n                }\n            }));\n        }\n\n        // create junction table foreign keys\n        entityMetadata.foreignKeys = [\n            new ForeignKeyMetadata({\n                entityMetadata: entityMetadata,\n                referencedEntityMetadata: parentClosureEntityMetadata,\n                columns: [entityMetadata.ownColumns[0]],\n                referencedColumns: parentClosureEntityMetadata.primaryColumns,\n                // onDelete: \"CASCADE\" // todo: does not work in mssql for some reason\n            }),\n            new ForeignKeyMetadata({\n                entityMetadata: entityMetadata,\n                referencedEntityMetadata: parentClosureEntityMetadata,\n                columns: [entityMetadata.ownColumns[1]],\n                referencedColumns: parentClosureEntityMetadata.primaryColumns,\n                // onDelete: \"CASCADE\" // todo: does not work in mssql for some reason\n            }),\n        ];\n\n        return entityMetadata;\n    }\n\n}\n"],"sourceRoot":".."}