sequelize-transactional
Version:
A Transactional method decorator for Sequelize
35 lines (34 loc) • 1.69 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.initSequelizeTransactional = exports.getSequelize = exports.CONNECTION_NAME = exports.initSequelizeCLS = exports.getTransactionalNamespace = void 0;
const sequelize_1 = require("sequelize");
const cls_hooked_1 = require("cls-hooked");
let transactionalNamespace;
const getTransactionalNamespace = () => {
if (transactionalNamespace) {
return transactionalNamespace;
}
throw new Error('Could not find namespace for transactions. Make sure you called initSequelizeCLS() before creating Sequelize connections');
};
exports.getTransactionalNamespace = getTransactionalNamespace;
function initSequelizeCLS() {
if (typeof sequelize_1.Sequelize.useCLS === 'function') {
transactionalNamespace = (0, cls_hooked_1.createNamespace)('sequelize-transactional-decorator-namespace');
sequelize_1.Sequelize.useCLS(transactionalNamespace);
}
else {
throw Error('Cannot call Sequelize.useCLS (need Sequelize version 4 or later)');
}
}
exports.initSequelizeCLS = initSequelizeCLS;
exports.CONNECTION_NAME = 'primary';
const sequelizeConnections = {};
const getSequelize = () => sequelizeConnections[exports.CONNECTION_NAME];
exports.getSequelize = getSequelize;
function initSequelizeTransactional(sequelizeConnection) {
if (!transactionalNamespace) {
throw new Error('Sequelize CLS not enabled. Call initSequelizeCLS() before calling initSequelizeTransactional()');
}
sequelizeConnections[exports.CONNECTION_NAME] = sequelizeConnection;
}
exports.initSequelizeTransactional = initSequelizeTransactional;