octonom
Version:
Object Document Mapper for any database
28 lines (27 loc) • 1.22 kB
TypeScript
import { Model } from './model';
import { ISchemaInstance, Path } from './schema/schema';
export interface IChangeHookOptions<TModel extends Model> {
path: Path;
value: any;
modelInstance: TModel;
schemaInstance: ISchemaInstance;
}
export interface IChangeHooks<TModel extends Model = Model> {
beforeChange?(options: IChangeHookOptions<TModel>): any;
afterChange?(options: IChangeHookOptions<TModel>): any;
}
export declare type IHooks<TModel extends Model = Model> = IChangeHooks<TModel>;
export interface IHookOptionsMap<TModel extends Model> {
beforeChange: IChangeHookOptions<TModel>;
afterChange: IChangeHookOptions<TModel>;
}
export declare type hookHandlers<TOptions> = Array<(options: TOptions) => void>;
export declare type HookHandlersMap<TModel extends Model> = {
[k in keyof IHookOptionsMap<TModel>]: hookHandlers<IHookOptionsMap<TModel>[k]>;
};
export declare class Hooks<TModel extends Model> {
private handlers;
constructor(hooks?: Hooks<TModel>);
register<K extends keyof HookHandlersMap<TModel>>(name: K, handler: HookHandlersMap<TModel>[K][0]): void;
run<K extends keyof IHookOptionsMap<TModel>>(name: K, options: IHookOptionsMap<TModel>[K]): void;
}