fix(runtime-core): allow classes to be passed as plugins (#588)
This commit is contained in:
parent
453e6889da
commit
8f616a89c5
@ -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.`
|
||||
|
@ -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<HostNode, HostElement>(
|
||||
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" ` +
|
||||
|
Loading…
Reference in New Issue
Block a user