import { ensureDir, outputFile, readJSON } from 'fs-extra'
import { basename, join } from 'path'
import { decachePlugin } from '@server/helpers/decache'
+import { ApplicationModel } from '@server/models/application/application'
import { MOAuthTokenUser, MUser } from '@server/types/models'
import { getCompleteLocale } from '@shared/core-utils'
import {
import { PluginLibrary, RegisterServerAuthExternalOptions, RegisterServerAuthPassOptions, RegisterServerOptions } from '../../types/plugins'
import { ClientHtml } from '../client-html'
import { RegisterHelpers } from './register-helpers'
-import { installNpmPlugin, installNpmPluginFromDisk, removeNpmPlugin } from './yarn'
+import { installNpmPlugin, installNpmPluginFromDisk, rebuildNativePlugins, removeNpmPlugin } from './yarn'
export interface RegisteredPlugin {
npmName: string
for (const hook of this.hooks[hookName]) {
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 })
+ result = await internalRunHook({
+ handler: hook.handler,
+ hookType,
+ result,
+ params,
+ onError: err => { logger.error('Cannot run hook %s of plugin %s.', hookName, hook.pluginName, { err }) }
})
}
logger.info('Plugin %s uninstalled.', npmName)
}
+ async rebuildNativePluginsIfNeeded () {
+ if (!await ApplicationModel.nodeABIChanged()) return
+
+ return rebuildNativePlugins()
+ }
+
// ###################### Private register ######################
private async registerPluginOrTheme (plugin: PluginModel) {
if (!this.hooks[options.target]) this.hooks[options.target] = []
this.hooks[options.target].push({
- npmName: npmName,
+ npmName,
pluginName: plugin.name,
handler: options.handler,
priority: options.priority || 0