UNPKG

@nodeboot/starter-persistence

Version:

Nodeboot starter package for persistence. Supports data access layer auto-configuration providing features like database initialization, consistency check, entity mapping, repository pattern, transactions, paging, migrations, persistence listeners, persis

46 lines 2.39 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.DefaultRepositoriesAdapter = void 0; const context_1 = require("@nodeboot/context"); const typeorm_1 = require("typeorm"); const winston_1 = require("winston"); const PersistenceContext_1 = require("../PersistenceContext"); /** * Default implementation of the {@link RepositoriesAdapter} interface. * * Responsible for binding all repositories from the {@link PersistenceContext} * to the provided IoC container, initializing them with the TypeORM EntityManager, * and caching them inside the EntityManager and the IoC container. */ class DefaultRepositoriesAdapter { /** * Binds repositories to the given IoC container. * * Retrieves the TypeORM EntityManager and a Winston Logger instance from the container, * then iterates over all repositories defined in the {@link PersistenceContext}. * For each repository, it creates an instance, logs the registration, * stores the instance in the EntityManager's repository cache, and * registers the instance with the IoC container. * * @param {IocContainer} iocContainer - The IoC container to bind repositories to. */ bind(iocContainer) { const entityManager = iocContainer.get(typeorm_1.EntityManager); const logger = iocContainer.get(winston_1.Logger); for (const repository of PersistenceContext_1.PersistenceContext.get().repositories) { const { target, entity, type } = repository; // Check if the current active profiles allow this repository // This is useful for conditional repository registration based on environment profiles if ((0, context_1.allowedProfiles)(target)) { const entityRepositoryInstance = new target(entity, entityManager, entityManager.queryRunner); logger.info(`Registering a '${type.toString()}' repository '${target.name}' for entity '${entity.name}'`); // Set repository to entity manager cache entityManager.repositories.set(target, entityRepositoryInstance); // set it to the DI container iocContainer.set(target, entityRepositoryInstance); } } } } exports.DefaultRepositoriesAdapter = DefaultRepositoriesAdapter; //# sourceMappingURL=DefaultRepositoriesAdapter.js.map