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

113 lines 4.3 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.useMongoClient = useMongoClient; exports.useMongoCollection = useMongoCollection; exports.useMongoEntityManager = useMongoEntityManager; exports.useMongoQueryRunner = useMongoQueryRunner; const types_1 = require("../types"); /** * Retrieves the underlying `MongoClient` instance from a TypeORM `MongoRepository`. * * @param repoInstance - An instance of a MongoRepository. * @returns The `MongoClient` instance used by the repository. * @throws Error if used on a non-Mongo repository or if the client is not available. * * @example * ```ts * import {useMongoClient} from "@nodeboot/starter-persistence"; * * const client = useMongoClient(this.mongoRepo); * const db = client.db("customDb"); * ``` * * @author Manuel Santos <https://github.com/manusant> */ function useMongoClient(repoInstance) { const queryRunner = repoInstance.queryRunner; const type = Reflect.getMetadata("custom:repotype", repoInstance); if (type === types_1.RepositoryType.MONGO && queryRunner) { const mongoClient = queryRunner.databaseConnection; if (mongoClient) { return mongoClient; } } throw new Error(`useMongoClient hook can only be used inside repositories extending MongoRepository`); } /** * Retrieves a MongoDB `Collection` from a TypeORM `MongoRepository`. * * @template C - Entity type of the collection. * @param repoInstance - An instance of a MongoRepository. * @param collectionName - Optional custom collection name; defaults to the repository’s metadata table name. * @returns The MongoDB collection instance. * @throws Error if used on a non-Mongo repository. * * @example * ```ts * import {useMongoCollection} from "@nodeboot/starter-persistence"; * * const usersCollection = useMongoCollection<User>(this.mongoRepo, "users"); * const user = await usersCollection.findOne({ email: "test@example.com" }); * ``` * * @author Manuel Santos <https://github.com/manusant> */ function useMongoCollection(repoInstance, collectionName) { const type = Reflect.getMetadata("custom:repotype", repoInstance); if (type === types_1.RepositoryType.MONGO && repoInstance.queryRunner) { const db = repoInstance.queryRunner.databaseConnection?.db(); if (db) { return db.collection(collectionName ?? repoInstance.metadata.tableName); } } throw new Error(`useMongoCollection function can only be used with instances of MongoRepository.`); } /** * Retrieves the `MongoEntityManager` from a TypeORM `MongoRepository`. * * @param repoInstance - An instance of a MongoRepository. * @returns The associated `MongoEntityManager`. * @throws Error if used on a non-Mongo repository. * * @example * ```ts * import {useMongoEntityManager} from "@nodeboot/starter-persistence"; * * const manager = useMongoEntityManager(this.mongoRepo); * await manager.find(User); * ``` * * @author Manuel Santos <https://github.com/manusant> */ function useMongoEntityManager(repoInstance) { const type = Reflect.getMetadata("custom:repotype", repoInstance); if (type !== types_1.RepositoryType.MONGO) { throw new Error(`useMongoEntityManager hook can only be used inside a valid TypeORM MongoRepository`); } return repoInstance.manager; } /** * Retrieves the `MongoQueryRunner` from a TypeORM `MongoRepository`. * * @param repoInstance - An instance of a MongoRepository. * @returns The associated `MongoQueryRunner`. * @throws Error if used on a non-Mongo repository. * * @example * ```ts * import {useMongoQueryRunner} from "@nodeboot/starter-persistence"; * * const queryRunner = useMongoQueryRunner(this.mongoRepo); * await queryRunner.databaseConnection.db().collection("myCollection").insertOne({ key: "value" }); * ``` * * @author Manuel Santos <https://github.com/manusant> */ function useMongoQueryRunner(repoInstance) { const type = Reflect.getMetadata("custom:repotype", repoInstance); if (type !== types_1.RepositoryType.MONGO) { throw new Error(`useMongoQueryRunner hook can only be used inside MongoDB repositories with an active MongoQueryRunner`); } return repoInstance.queryRunner; } //# sourceMappingURL=mongo.hooks.js.map