UNPKG

@malagu/typeorm

Version:
69 lines 2.97 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getTransactionalOption = exports.Transactional = exports.TransactionalOption = exports.Propagation = void 0; const common_1 = require("../../common"); const context_1 = require("../context"); const utils_1 = require("../utils"); var Propagation; (function (Propagation) { Propagation[Propagation["Required"] = 0] = "Required"; Propagation[Propagation["RequiresNew"] = 1] = "RequiresNew"; })(Propagation = exports.Propagation || (exports.Propagation = {})); var TransactionalOption; (function (TransactionalOption) { function is(option) { return option && (option.name !== undefined || option.isolation !== undefined || option.readOnly !== undefined); } TransactionalOption.is = is; })(TransactionalOption = exports.TransactionalOption || (exports.TransactionalOption = {})); exports.Transactional = function (nameOrTransactionalOption) { const { name, isolation, propagation, readOnly } = getTransactionalOption(nameOrTransactionalOption); return (target, methodName, descriptor) => { const originalMethod = descriptor.value; descriptor.value = async function (...args) { if (propagation === Propagation.Required) { const em = context_1.OrmContext.getEntityManager(name); if (em && em.queryRunner && (em.queryRunner.isTransactionActive || readOnly)) { return originalMethod.apply(this, args); } } const callback = async (entityManager) => { context_1.OrmContext.pushEntityManager(name, entityManager); try { return await originalMethod.apply(this, args); } finally { context_1.OrmContext.popEntityManager(name); } }; const conn = await utils_1.getConnection(name); const manager = conn.manager; if (readOnly) { return callback(manager); } else if (isolation) { return manager.transaction(isolation, callback); } else { return manager.transaction(callback); } }; }; }; function getTransactionalOption(nameOrTransactionalOption) { const defaultOption = { name: common_1.DEFAULT_CONNECTION_NAME, propagation: Propagation.Required, readOnly: false }; let option = defaultOption; if (TransactionalOption.is(nameOrTransactionalOption)) { option = Object.assign(Object.assign({}, defaultOption), nameOrTransactionalOption); } else if (nameOrTransactionalOption) { option = Object.assign(Object.assign({}, defaultOption), { name: nameOrTransactionalOption }); } return option; } exports.getTransactionalOption = getTransactionalOption; //# sourceMappingURL=transactional.js.map