From 89cd12756035a146bbcc4db78cd3cd64f2f3d88d Mon Sep 17 00:00:00 2001 From: Chocobozzz Date: Fri, 19 Jul 2019 17:30:41 +0200 Subject: Add hook filters tests --- server/lib/plugins/hooks.ts | 19 ++++++++++++++----- server/lib/plugins/plugin-manager.ts | 10 +++++----- 2 files changed, 19 insertions(+), 10 deletions(-) (limited to 'server/lib/plugins') diff --git a/server/lib/plugins/hooks.ts b/server/lib/plugins/hooks.ts index 7bb907e6a..b694d4118 100644 --- a/server/lib/plugins/hooks.ts +++ b/server/lib/plugins/hooks.ts @@ -3,16 +3,25 @@ import { PluginManager } from './plugin-manager' import { logger } from '../../helpers/logger' import * as Bluebird from 'bluebird' +type PromiseFunction = (params: U) => Promise | Bluebird +type RawFunction = (params: U) => T + // Helpers to run hooks const Hooks = { - wrapObject: (obj: T, hookName: U) => { - return PluginManager.Instance.runHook(hookName, obj) as Promise + wrapObject: (result: T, hookName: U) => { + return PluginManager.Instance.runHook(hookName, result) as Promise + }, + + wrapPromiseFun: async (fun: PromiseFunction, params: U, hookName: V) => { + const result = await fun(params) + + return PluginManager.Instance.runHook(hookName, result, params) }, - wrapPromise: async (fun: Promise | Bluebird, hookName: U) => { - const result = await fun + wrapFun: async (fun: RawFunction, params: U, hookName: V) => { + const result = fun(params) - return PluginManager.Instance.runHook(hookName, result) + return PluginManager.Instance.runHook(hookName, result, params) }, runAction: (hookName: U, params?: T) => { diff --git a/server/lib/plugins/plugin-manager.ts b/server/lib/plugins/plugin-manager.ts index 9afda97ea..6485a47c5 100644 --- a/server/lib/plugins/plugin-manager.ts +++ b/server/lib/plugins/plugin-manager.ts @@ -98,15 +98,15 @@ export class PluginManager implements ServerHook { // ###################### Hooks ###################### - async runHook (hookName: ServerHookName, param?: any) { - let result = param - - if (!this.hooks[hookName]) return result + async runHook (hookName: ServerHookName, result?: T, params?: any): Promise { + if (!this.hooks[hookName]) return Promise.resolve(result) const hookType = getHookType(hookName) for (const hook of this.hooks[hookName]) { - result = await internalRunHook(hook.handler, hookType, param, err => { + logger.debug('Running hook %s of plugin %s.', hookName, hook.npmName) + + result = await internalRunHook(hook.handler, hookType, result, params, err => { logger.error('Cannot run hook %s of plugin %s.', hookName, hook.pluginName, { err }) }) } -- cgit v1.2.3