import { IFilterModel, IHandlerRegistration } from '../filtermodel'; import { Handler } from '../handler'; export class BaseHookSystem { public constructor(public baseKey: string, private model: IFilterModel) { } public addHandler(obj: { handler: Handler, priority?: number }): Promise { return this.model.registerHandler({ handler : obj.handler, hookSystem: this, priority : obj.priority, }); } public async seriesMap(obj: T, ...rest: any[]): Promise { const queryHandlers = await this.model.queryHandlers(this); let toRet = obj; for (const queryHandler of queryHandlers) { toRet = await queryHandler.handle(toRet, ...rest); } return toRet as R; } public async series(obj: any, ...rest: any[]): Promise { const queryHandlers = await this.model.queryHandlers(this); for (const queryHandler of queryHandlers) { await queryHandler.handle(obj, ...rest); } } public async parallel(obj: T, ...rest: any[]): Promise { const queryHandlers = await this.model.queryHandlers(this); return Promise.all(queryHandlers .map((handler) => handler.handle(obj, ...rest)) ); } }