import { RegisterHookOptions } from '../../../shared/models/plugins/register-hook.model'
import { PluginSettingsManager } from '../../../shared/models/plugins/plugin-settings-manager.model'
import { PluginStorageManager } from '../../../shared/models/plugins/plugin-storage-manager.model'
-import { ServerHook, ServerHookName } from '../../../shared/models/plugins/server-hook.model'
+import { ServerHook, ServerHookName, serverHookObject } from '../../../shared/models/plugins/server-hook.model'
import { getHookType, internalRunHook } from '../../../shared/core-utils/plugins/hooks'
import { RegisterOptions } from '../../typings/plugins/register-options.model'
import { PluginLibrary } from '../../typings/plugins'
// ###################### Hooks ######################
- async runHook (hookName: ServerHookName, param?: any) {
- let result = param
-
- if (!this.hooks[hookName]) return result
+ async runHook <T> (hookName: ServerHookName, result?: T, params?: any): Promise<T> {
+ 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 })
})
}
try {
await this.registerPluginOrTheme(plugin)
} catch (err) {
+ // Try to unregister the plugin
+ try {
+ await this.unregister(PluginModel.buildNpmName(plugin.name, plugin.type))
+ } catch {
+ // we don't care if we cannot unregister it
+ }
+
logger.error('Cannot register plugin %s, skipping.', plugin.name, { err })
}
}
private getRegisterHelpers (npmName: string, plugin: PluginModel): RegisterOptions {
const registerHook = (options: RegisterHookOptions) => {
+ if (serverHookObject[options.target] !== true) {
+ logger.warn('Unknown hook %s of plugin %s. Skipping.', options.target, npmName)
+ return
+ }
+
if (!this.hooks[options.target]) this.hooks[options.target] = []
this.hooks[options.target].push({