import { Observable, Subject } from 'rxjs'; export declare type TransactionManager = { activeTransactions: number; batchTransaction: Subject | null; }; export declare const transactionManager: TransactionManager; export declare function startBatch(): void; export declare function endBatch(): void; export declare function isTransactionInProcess(): boolean; export declare function commit(): Observable; /** * A logical transaction. * Use this transaction to optimize the dispatch of all the stores. * The following code will update the store, BUT emits only once * * @example * applyTransaction(() => { * this.todosStore.add(new Todo(1, title)); * this.todosStore.add(new Todo(2, title)); * }); * */ export declare function applyTransaction(action: () => T, thisArg?: any): T; /** * A logical transaction. * Use this transaction to optimize the dispatch of all the stores. * * The following code will update the store, BUT emits only once. * * @example * @transaction * addTodos() { * this.todosStore.add(new Todo(1, title)); * this.todosStore.add(new Todo(2, title)); * } * * */ export declare function transaction(): (target: any, propertyKey: string, descriptor: PropertyDescriptor) => PropertyDescriptor; /** * * RxJS custom operator that wraps the callback inside transaction * * @example * * return http.get().pipe( * withTransaction(response > { * store.setActive(1); * store.update(); * store.updateEntity(1, {}); * }) * ) * */ export declare function withTransaction(next: (value: T) => void): (source: Observable) => Observable;