Files
2026-04-21 22:34:39 +08:00

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