From 8f616a89c580bc211540d5e4d60488ff24d024cc Mon Sep 17 00:00:00 2001 From: Kael Date: Thu, 9 Jan 2020 04:40:24 +1100 Subject: [PATCH] fix(runtime-core): allow classes to be passed as plugins (#588) --- packages/runtime-core/__tests__/apiApp.spec.ts | 11 +++++++++-- packages/runtime-core/src/apiCreateApp.ts | 8 ++++---- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/packages/runtime-core/__tests__/apiApp.spec.ts b/packages/runtime-core/__tests__/apiApp.spec.ts index 2a70350cf2a..31096954e6d 100644 --- a/packages/runtime-core/__tests__/apiApp.spec.ts +++ b/packages/runtime-core/__tests__/apiApp.spec.ts @@ -244,11 +244,18 @@ describe('api: createApp', () => { const PluginB: Plugin = { install: (app, arg1, arg2) => app.provide('bar', arg1 + arg2) } - const PluginC: any = undefined + class PluginC { + someProperty = {} + static install() { + app.provide('baz', 2) + } + } + const PluginD: any = undefined const app = createApp() app.use(PluginA) app.use(PluginB, 1, 1) + app.use(PluginC) const Root = { setup() { @@ -266,7 +273,7 @@ describe('api: createApp', () => { `Plugin has already been applied to target app` ).toHaveBeenWarnedTimes(1) - app.use(PluginC) + app.use(PluginD) expect( `A plugin must either be a function or an object with an "install" ` + `function.` diff --git a/packages/runtime-core/src/apiCreateApp.ts b/packages/runtime-core/src/apiCreateApp.ts index fa50f0e8e31..a07b14ca0d4 100644 --- a/packages/runtime-core/src/apiCreateApp.ts +++ b/packages/runtime-core/src/apiCreateApp.ts @@ -56,7 +56,7 @@ export interface AppContext { type PluginInstallFunction = (app: App, ...options: any[]) => any export type Plugin = - | PluginInstallFunction + | PluginInstallFunction & { install?: PluginInstallFunction } | { install: PluginInstallFunction } @@ -103,12 +103,12 @@ export function createAppAPI( use(plugin: Plugin, ...options: any[]) { if (installedPlugins.has(plugin)) { __DEV__ && warn(`Plugin has already been applied to target app.`) - } else if (isFunction(plugin)) { - installedPlugins.add(plugin) - plugin(app, ...options) } else if (plugin && isFunction(plugin.install)) { installedPlugins.add(plugin) plugin.install(app, ...options) + } else if (isFunction(plugin)) { + installedPlugins.add(plugin) + plugin(app, ...options) } else if (__DEV__) { warn( `A plugin must either be a function or an object with an "install" ` +