@dossierhq/database-adapter
Version:
A library for adapting Dossier to a database, such as SQLite or PostgreSQL.
26 lines (25 loc) • 1.65 kB
TypeScript
import type { ErrorType, Logger, LoggerContext, PromiseResult } from '@dossierhq/core';
import type { DatabaseAdapter } from './DatabaseAdapter.js';
export interface Transaction {
_type: 'Transaction';
}
export interface DatabasePerformanceCallbacks {
onMutexAcquired: (duration: number) => void;
onQueryCompleted: (query: string, success: boolean, duration: number) => void;
onRootTransactionAcquired: (duration: number) => void;
onRootTransactionCompleted: (duration: number) => void;
}
export interface TransactionContext<TTransaction extends Transaction = Transaction> extends LoggerContext {
readonly transaction: TTransaction | null;
databasePerformance: DatabasePerformanceCallbacks | null;
withTransaction<TOk, TError extends ErrorType>(callback: (context: TransactionContext<TTransaction>) => PromiseResult<TOk, TError>): PromiseResult<TOk, TError | typeof ErrorType.Generic>;
}
export declare abstract class TransactionContextImpl<TContext extends TransactionContext> implements TransactionContext {
#private;
readonly logger: Logger;
readonly transaction: Transaction | null;
readonly databasePerformance: DatabasePerformanceCallbacks | null;
constructor(databaseAdapter: DatabaseAdapter, logger: Logger, databasePerformance: DatabasePerformanceCallbacks | null, transaction: Transaction | null);
protected abstract copyWithNewTransaction(databaseAdapter: DatabaseAdapter, transaction: Transaction): TContext;
withTransaction<TOk, TError extends ErrorType>(callback: (context: TContext) => PromiseResult<TOk, TError>): PromiseResult<TOk, TError | typeof ErrorType.Generic>;
}