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

65 lines (64 loc) 2.86 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.runInTransaction = exports.runOnTransactionComplete = exports.runOnTransactionRollback = exports.runOnTransactionCommit = void 0; exports.useMongoClient = useMongoClient; const typeorm_transactional_1 = require("typeorm-transactional"); const MongoQueryRunner_1 = require("typeorm/driver/mongodb/MongoQueryRunner"); /** * Registers a callback to be executed when the current transaction is successfully committed. * * @param cb - The callback function to execute on transaction commit. */ const runOnTransactionCommit = (cb) => { return (0, typeorm_transactional_1.runOnTransactionCommit)(cb); }; exports.runOnTransactionCommit = runOnTransactionCommit; /** * Registers a callback to be executed when the current transaction is rolled back. * * @param cb - The callback function that receives the error that caused the rollback. */ const runOnTransactionRollback = (cb) => { return (0, typeorm_transactional_1.runOnTransactionRollback)(cb); }; exports.runOnTransactionRollback = runOnTransactionRollback; /** * Registers a callback to be executed when the current transaction is either committed or rolled back. * * @param cb - The callback function that receives an optional error (if the transaction was rolled back). */ const runOnTransactionComplete = (cb) => { return (0, typeorm_transactional_1.runOnTransactionComplete)(cb); }; exports.runOnTransactionComplete = runOnTransactionComplete; /** * Executes a given function within a transaction. * * @template F - The function type to be executed inside the transaction. * @param fn - The function to be executed within the transaction. * @param options - Optional transaction options (e.g., isolation level, propagation). * @returns The result of the function execution within the transaction. */ const runInTransaction = (fn, options) => { return (0, typeorm_transactional_1.wrapInTransaction)(fn, options)(); }; exports.runInTransaction = runInTransaction; /** * Retrieves the MongoDB client associated with a given TypeORM MongoRepository instance. * * @template R - A repository extending MongoRepository. * @param repoInstance - An instance of a MongoRepository. * @returns The MongoClient instance used by the repository. * @throws Error if the function is called outside of a MongoRepository. */ function useMongoClient(repoInstance) { const queryRunner = repoInstance.queryRunner; if (queryRunner instanceof MongoQueryRunner_1.MongoQueryRunner) { // Retrieve the MongoClient instance from the TypeORM MongoDriver const mongoClient = queryRunner.databaseConnection; if (mongoClient) { return mongoClient; } } throw new Error(`useMongoClient hook can only be used inside repositories extending MongoRepository`); }