UNPKG

typeorm

Version:

Data-Mapper ORM for TypeScript and ES2021+. Supports MySQL/MariaDB, PostgreSQL, MS SQL Server, Oracle, SAP HANA, SQLite, MongoDB databases.

75 lines (73 loc) 4.14 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.ConnectionMetadataBuilder = void 0; const DirectoryExportedClassesLoader_1 = require("../util/DirectoryExportedClassesLoader"); const OrmUtils_1 = require("../util/OrmUtils"); const container_1 = require("../container"); const globals_1 = require("../globals"); const EntityMetadataBuilder_1 = require("../metadata-builder/EntityMetadataBuilder"); const EntitySchemaTransformer_1 = require("../entity-schema/EntitySchemaTransformer"); const InstanceChecker_1 = require("../util/InstanceChecker"); /** * Builds migration instances, subscriber instances and entity metadatas for the given classes. */ class ConnectionMetadataBuilder { // ------------------------------------------------------------------------- // Constructor // ------------------------------------------------------------------------- constructor(connection) { this.connection = connection; } // ------------------------------------------------------------------------- // Public Methods // ------------------------------------------------------------------------- /** * Builds migration instances for the given classes or directories. */ async buildMigrations(migrations) { const [migrationClasses, migrationDirectories] = OrmUtils_1.OrmUtils.splitClassesAndStrings(migrations); const allMigrationClasses = [ ...migrationClasses, ...(await (0, DirectoryExportedClassesLoader_1.importClassesFromDirectories)(this.connection.logger, migrationDirectories)), ]; return allMigrationClasses.map((migrationClass) => (0, container_1.getFromContainer)(migrationClass)); } /** * Builds subscriber instances for the given classes or directories. */ async buildSubscribers(subscribers) { const [subscriberClasses, subscriberDirectories] = OrmUtils_1.OrmUtils.splitClassesAndStrings(subscribers || []); const allSubscriberClasses = [ ...subscriberClasses, ...(await (0, DirectoryExportedClassesLoader_1.importClassesFromDirectories)(this.connection.logger, subscriberDirectories)), ]; return (0, globals_1.getMetadataArgsStorage)() .filterSubscribers(allSubscriberClasses) .map((metadata) => (0, container_1.getFromContainer)(metadata.target)); } /** * Builds entity metadatas for the given classes or directories. */ async buildEntityMetadatas(entities) { // todo: instead we need to merge multiple metadata args storages const [entityClassesOrSchemas, entityDirectories] = OrmUtils_1.OrmUtils.splitClassesAndStrings(entities || []); const entityClasses = entityClassesOrSchemas.filter((entityClass) => !InstanceChecker_1.InstanceChecker.isEntitySchema(entityClass)); const entitySchemas = entityClassesOrSchemas.filter((entityClass) => InstanceChecker_1.InstanceChecker.isEntitySchema(entityClass)); const allEntityClasses = [ ...entityClasses, ...(await (0, DirectoryExportedClassesLoader_1.importClassesFromDirectories)(this.connection.logger, entityDirectories)), ]; allEntityClasses.forEach((entityClass) => { // if we have entity schemas loaded from directories if (InstanceChecker_1.InstanceChecker.isEntitySchema(entityClass)) { entitySchemas.push(entityClass); } }); const decoratorEntityMetadatas = new EntityMetadataBuilder_1.EntityMetadataBuilder(this.connection, (0, globals_1.getMetadataArgsStorage)()).build(allEntityClasses); const metadataArgsStorageFromSchema = new EntitySchemaTransformer_1.EntitySchemaTransformer().transform(entitySchemas); const schemaEntityMetadatas = new EntityMetadataBuilder_1.EntityMetadataBuilder(this.connection, metadataArgsStorageFromSchema).build(); return [...decoratorEntityMetadatas, ...schemaEntityMetadatas]; } } exports.ConnectionMetadataBuilder = ConnectionMetadataBuilder; //# sourceMappingURL=ConnectionMetadataBuilder.js.map