@dossierhq/database-adapter
Version:
A library for adapting Dossier to a database, such as SQLite or PostgreSQL.
31 lines • 1.35 kB
JavaScript
/// <reference types="./TransactionContext.d.ts" />
export class TransactionContextImpl {
#databaseAdapter;
logger;
transaction;
databasePerformance;
constructor(databaseAdapter, logger, databasePerformance, transaction) {
this.#databaseAdapter = databaseAdapter;
this.logger = logger;
this.databasePerformance = databasePerformance;
this.transaction = transaction;
}
async withTransaction(callback) {
if (this.transaction) {
// Already in transaction
return await this.#databaseAdapter.withNestedTransaction(this, this.transaction, async () => {
return callback(this);
});
}
const startTime = performance.now();
const result = await this.#databaseAdapter.withRootTransaction(this, (transaction) => this.copyWithNewTransaction(this.#databaseAdapter, transaction), async (context) => {
const acquireDuration = performance.now() - startTime;
this.databasePerformance?.onRootTransactionAcquired(acquireDuration);
return callback(context);
});
const completeDuration = performance.now() - startTime;
this.databasePerformance?.onRootTransactionCompleted(completeDuration);
return result;
}
}
//# sourceMappingURL=TransactionContext.js.map