@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
JavaScript
;
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`);
}