import Bluebird from 'bluebird' import { ServerActionHookName, ServerFilterHookName } from '../../../shared/models' import { logger } from '../../helpers/logger' import { PluginManager } from './plugin-manager' type PromiseFunction = (params: U) => Promise | Bluebird type RawFunction = (params: U) => T // Helpers to run hooks const Hooks = { wrapObject: (result: T, hookName: U, context?: any) => { return PluginManager.Instance.runHook(hookName, result, context) }, wrapPromiseFun: async (fun: PromiseFunction, params: U, hookName: V) => { const result = await fun(params) return PluginManager.Instance.runHook(hookName, result, params) }, wrapFun: async (fun: RawFunction, params: U, hookName: V) => { const result = fun(params) return PluginManager.Instance.runHook(hookName, result, params) }, runAction: (hookName: U, params?: T) => { PluginManager.Instance.runHook(hookName, undefined, params) .catch(err => logger.error('Fatal hook error.', { err })) } } export { Hooks }