59 lines
1.9 KiB
JavaScript
59 lines
1.9 KiB
JavaScript
"use strict";
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.DBTransaction = exports.DataSourceContext = void 0;
|
|
const async_hooks_1 = require("async_hooks");
|
|
const storage = new async_hooks_1.AsyncLocalStorage();
|
|
class DataSourceContext {
|
|
static put(source, callback) {
|
|
storage.run(source, callback);
|
|
}
|
|
static current() {
|
|
return storage.getStore();
|
|
}
|
|
static async startTransaction(callback) {
|
|
const queryRunner = DataSourceContext.current().createQueryRunner();
|
|
return this.startTransactionToQueryRunner(queryRunner, callback);
|
|
}
|
|
static async startTransactionToQueryRunner(queryRunner, callback) {
|
|
await queryRunner.connect();
|
|
await queryRunner.startTransaction();
|
|
const transaction = new DBTransaction(queryRunner, queryRunner.manager);
|
|
try {
|
|
const result = await callback(transaction);
|
|
await transaction.commit();
|
|
return result;
|
|
}
|
|
catch (error) {
|
|
await transaction.rollback();
|
|
throw error;
|
|
}
|
|
}
|
|
}
|
|
exports.DataSourceContext = DataSourceContext;
|
|
class DBTransaction {
|
|
queryRunner;
|
|
manager;
|
|
constructor(queryRunner, manager) {
|
|
this.queryRunner = queryRunner;
|
|
this.manager = manager;
|
|
}
|
|
async rollback() {
|
|
if (!this.queryRunner.isTransactionActive) {
|
|
return;
|
|
}
|
|
await this.queryRunner.rollbackTransaction();
|
|
await this.queryRunner.release();
|
|
}
|
|
async commit() {
|
|
if (!this.queryRunner.isTransactionActive) {
|
|
return;
|
|
}
|
|
await this.queryRunner.commitTransaction();
|
|
await this.queryRunner.release();
|
|
}
|
|
getRepository(target) {
|
|
return this.manager.getRepository(target);
|
|
}
|
|
}
|
|
exports.DBTransaction = DBTransaction;
|
|
//# sourceMappingURL=data_source.context.js.map
|