"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