///
declare module '@ioc:Adonis/Addons/LucidObserver' {
import type { ModelQueryBuilderContract, LucidModel, LucidRow, EventsList } from '@ioc:Adonis/Lucid/Orm';
import type { SimplePaginatorContract } from '@ioc:Adonis/Lucid/Database';
import type { NormalizeConstructor } from '@ioc:Adonis/Core/Helpers';
import { Constructor } from '@adonisjs/fold';
export type ObserverMethod = `${'before' | 'after'}${Capitalize}`;
export type ObserverMethodParameter = LucidRow | Array | ModelQueryBuilderContract | [
countQuery: ModelQueryBuilderContract,
query: ModelQueryBuilderContract
] | SimplePaginatorContract;
export interface ObserverContract {
/**
* Indicate if observer methods should be executed
* after transaction commit.
*/
afterCommit?: boolean;
/**
* Invoked before the insert or the update query.
*
* @param {LucidRow} model
* @return {*} {Promise}
* @memberof ObserverContract
*/
beforeSave?(model: LucidRow): Promise;
/**
* Invoked after the insert or the update query.
*
* @param {LucidRow} model
* @return {*} {Promise}
* @memberof ObserverContract
*/
afterSave?(model: LucidRow): Promise;
/**
* Invoked before the find query.
*
* @param {ModelQueryBuilderContract} query
* @return {*} {Promise}
* @memberof ObserverContract
*/
beforeFind?(query: ModelQueryBuilderContract): Promise;
/**
* Invoked after the find query.
*
* @param {LucidRow} model
* @return {*} {Promise}
* @memberof ObserverContract
*/
afterFind?(model: LucidRow): Promise;
/**
* Invoked before the fetch query.
*
* @param {ModelQueryBuilderContract} query
* @return {*} {Promise}
* @memberof ObserverContract
*/
beforeFetch?(query: ModelQueryBuilderContract): Promise;
/**
* Invoked after the fetch query.
*
* @param {Array} records
* @return {*} {Promise}
* @memberof ObserverContract
*/
afterFetch?(records: Array): Promise;
/**
* Invoked only before the insert query.
*
* @param {LucidRow} model
* @return {*} {Promise}
* @memberof ObserverContract
*/
beforeCreate?(model: LucidRow): Promise;
/**
* Invoked only after the insert query.
*
* @param {LucidRow} model
* @return {*} {Promise}
* @memberof ObserverContract
*/
afterCreate?(model: LucidRow): Promise;
/**
* Invoked only before the update query.
*
* @param {LucidRow} model
* @return {*} {Promise}
* @memberof ObserverContract
*/
beforeUpdate?(model: LucidRow): Promise;
/**
* Invoked only after the update query.
*
* @param {LucidRow} model
* @return {*} {Promise}
* @memberof ObserverContract
*/
afterUpdate?(model: LucidRow): Promise;
/**
* Invoked before the delete query.
*
* @param {LucidRow} model
* @return {*} {Promise}
* @memberof ObserverContract
*/
beforeDelete?(model: LucidRow): Promise;
/**
* Invoked after the delete query.
*
* @param {LucidRow} model
* @return {*} {Promise}
* @memberof ObserverContract
*/
afterDelete?(model: LucidRow): Promise;
/**
* Invoked before the paginate query.
*
* @param {ModelPaginatorContract} paginator
* @return {*} {Promise}
* @memberof ObserverContract
*/
beforePaginate?([countQuery, query]: [
ModelQueryBuilderContract,
ModelQueryBuilderContract
]): Promise;
/**
* Invoked after the paginate query.
*
* @param {ModelPaginatorContract} paginator
* @return {*} {Promise}
* @memberof ObserverContract
*/
afterPaginate?(paginator: SimplePaginatorContract): Promise;
}
export interface ObservableModel extends LucidModel {
/**
* Add an observer to the model.
*
* @param {ObserverContract} observer
* @memberof ObservableModel
*/
$addObserver(observer: Constructor): void;
/**
* Add multiple observers to a model.
*
* @param {Array} observers
* @memberof ObservableModel
*/
$addObservers(observers: Array>): void;
/**
* Get a list of observers instances attached
* to the model.
*
* @return {*} {Array}
* @memberof ObservableModel
*/
$getObservers(): Array;
/**
* Get a list of all observers instances (including globals).
*
* @return {*} {Array}
* @memberof ObservableModel
*/
$getAllObservers(): Array;
/**
* Add observers to the model and register hooks callbacks.
*
* @param {Array>} [observers]
* @memberof ObservableModel
*/
observe(observers?: Array>): void;
/**
* Remove observers from the model and execute the callback,
* then restore them.
*
* @param {(() => any | Promise)} callback
* @return {*} {Promise}
* @memberof ObservableModel
*/
withoutObservers any | Promise>(callback: T): Promise>;
}
export interface ObservableRow extends LucidRow {
/**
* Save without executing 0observers methods.
*/
saveQuietly(): Promise;
}
export interface ObservableMixin {
>(superclass: T): T & ObservableModel & {
new (...args: Array): ObservableRow;
};
}
const Observable: ObservableMixin;
export { Observable };
}