@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
JavaScript
;
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