typeorm-transactional-async-callbacks
Version:
A Transactional Method Decorator for typeorm that uses cls-hooked to handle and propagate transactions between different repositories and service methods. Inpired by Spring Trasnactional Annotation and Sequelize CLS
46 lines • 1.93 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.Storage = void 0;
var semver_1 = require("semver");
var storage_driver_1 = require("../enums/storage-driver");
var async_local_storage_1 = require("./driver/async-local-storage");
var cls_hooked_1 = require("./driver/cls-hooked");
var Storage = /** @class */ (function () {
function Storage() {
}
Storage.prototype.create = function (storageDriverEnum) {
if (this.driver) {
// We probably should not allow calling this function when driver is already defined
return this.driver;
}
var DriverConstructor = this.getDriverConstructor(storageDriverEnum);
this.driver = new DriverConstructor();
return this.driver;
};
Storage.prototype.get = function () {
if (!this.driver) {
throw new Error('No storage driver defined in your app ... please call initializeTransactionalContext() before application start.');
}
return this.driver;
};
Storage.prototype.getDriverConstructor = function (storageDriverEnum) {
switch (storageDriverEnum) {
case storage_driver_1.StorageDriver.ASYNC_LOCAL_STORAGE:
return async_local_storage_1.AsyncLocalStorageDriver;
case storage_driver_1.StorageDriver.CLS_HOOKED:
return cls_hooked_1.ClsHookedDriver;
case storage_driver_1.StorageDriver.AUTO:
default:
return this.getBestSupportedDriverConstructor();
}
};
Storage.prototype.getBestSupportedDriverConstructor = function () {
if (process && (0, semver_1.gte)(process.versions.node, '16.0.0')) {
return async_local_storage_1.AsyncLocalStorageDriver;
}
return cls_hooked_1.ClsHookedDriver;
};
return Storage;
}());
exports.Storage = Storage;
//# sourceMappingURL=storage.js.map
;