dino-core
Version:
A dependency injection framework for NodeJS applications
37 lines (36 loc) • 1.38 kB
TypeScript
import { AbstractInterceptor, type PropertyKey } from './abstract.interceptors';
export declare class TransactionInterceptor extends AbstractInterceptor {
private static _instance;
/**
* Implement Proxy handler get method to provide transactional nature for repositories.
*
* The transaction environment is defined as:
*
* ```javascript
* try {
* obj.beginTransaction();
* const answer = Reflect.get(obj, prop);
* obj.completeTransaction();
* return answer;
* } catch(e) {
* logger.error('unable to complete transaction, rolling-back', e);
* obj.rollbackTransaction();
* } finally {
* obj.cleanupTransactionResources();
* }
* ```
* As such beginTransaction, completeTransaction, rollbackTransaction and eventually cleanupTransactionResources
* should be implemented.
*
* * @param {Injectable} obj The target of this proxy
* @param {String} prop the method or property name to access
* @returns {Any}
*
* @public
*/
intercept(obj: any, prop: PropertyKey): any;
isApplicable(obj: any, prop: PropertyKey): boolean;
completeTransaction(resolve: any, obj: any, response: any): Promise<void>;
rollbackTransaction(reject: any, obj: any, e: any): Promise<void>;
static create(): TransactionInterceptor;
}