Skip to content

Commit f7941e6

Browse files
committed
fix(kit): respect legacy devtools plugin registration
1 parent 813a544 commit f7941e6

File tree

4 files changed

+35
-2
lines changed

4 files changed

+35
-2
lines changed
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
import { target } from '@vue/devtools-shared'
2+
3+
// devtools <= 6.x
4+
export function isLegacyVueDevTools() {
5+
return +(target.__VUE_DEVTOOLS_GLOBAL_HOOK__.devtoolsVersion?.[0] ?? 0) < 7
6+
}
7+
8+
export function onLegacyDevToolsPluginApiAvailabled(cb: () => void) {
9+
if (target.__VUE_DEVTOOLS_PLUGIN_API_AVAILABLE__) {
10+
cb()
11+
return
12+
}
13+
// eslint-disable-next-line accessor-pairs
14+
Object.defineProperty(target, '__VUE_DEVTOOLS_PLUGIN_API_AVAILABLE__', {
15+
set(value) {
16+
if (value)
17+
cb()
18+
},
19+
configurable: true,
20+
})
21+
}

packages/devtools-kit/src/core/index.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import { createDevToolsHook, devtoolsHooks, hook, subscribeDevToolsHook } from '
33
import { DevToolsHooks } from '../types'
44
import { devtoolsAppRecords, devtoolsState, getDevToolsEnv } from '../state'
55
import { DevToolsEvents, DevToolsPluginApi, apiHooks, collectDevToolsPlugin, setupExternalPlugin } from '../api'
6+
import { onLegacyDevToolsPluginApiAvailabled } from '../compat'
67
import { createAppRecord, setActiveAppRecord } from './app-record'
78

89
export function initDevTools() {
@@ -34,6 +35,13 @@ export function initDevTools() {
3435
setupExternalPlugin([pluginDescriptor, setupFn], app, api)
3536
})
3637

38+
onLegacyDevToolsPluginApiAvailabled(() => {
39+
const normalizedPluginBuffer = devtoolsState.pluginBuffer.filter(([item]) => item.id !== 'components')
40+
normalizedPluginBuffer.forEach(([pluginDescriptor, setupFn]) => {
41+
target.__VUE_DEVTOOLS_GLOBAL_HOOK__.emit(DevToolsHooks.SETUP_DEVTOOLS_PLUGIN, pluginDescriptor, setupFn, { target: 'legacy' })
42+
})
43+
})
44+
3745
// create app record
3846
hook.on.vueAppInit(async (app, version) => {
3947
const record = createAppRecord(app)

packages/devtools-kit/src/hook/index.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ const on: VueHooks['on'] = {
3131
export function createDevToolsHook(): DevToolsHook {
3232
return {
3333
id: 'vue-devtools-next',
34+
devtoolsVersion: '7.0',
3435
enabled: false,
3536
appRecords: [],
3637
apps: [],
@@ -105,7 +106,9 @@ export function subscribeDevToolsHook() {
105106
})
106107

107108
// devtools plugin setup
108-
hook.on<DevToolsEvent[DevToolsHooks.SETUP_DEVTOOLS_PLUGIN]>(DevToolsHooks.SETUP_DEVTOOLS_PLUGIN, (pluginDescriptor, setupFn) => {
109+
hook.on<DevToolsEvent[DevToolsHooks.SETUP_DEVTOOLS_PLUGIN]>(DevToolsHooks.SETUP_DEVTOOLS_PLUGIN, (pluginDescriptor, setupFn, options) => {
110+
if (options?.target === 'legacy')
111+
return
109112
devtoolsHooks.callHook(DevToolsHooks.SETUP_DEVTOOLS_PLUGIN, pluginDescriptor, setupFn)
110113
})
111114
}

packages/devtools-kit/src/types/hook.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,12 +26,13 @@ export interface DevToolsEvent {
2626
[DevToolsHooks.COMPONENT_ADDED]: (app: HookAppInstance, uid: number, parentUid: number, component: VueAppInstance) => void
2727
[DevToolsHooks.COMPONENT_UPDATED]: DevToolsEvent['component:added']
2828
[DevToolsHooks.COMPONENT_REMOVED]: DevToolsEvent['component:added']
29-
[DevToolsHooks.SETUP_DEVTOOLS_PLUGIN]: (pluginDescriptor: PluginDescriptor, setupFn: PluginSetupFunction) => void
29+
[DevToolsHooks.SETUP_DEVTOOLS_PLUGIN]: (pluginDescriptor: PluginDescriptor, setupFn: PluginSetupFunction, options?: { target?: string }) => void
3030
}
3131

3232
export interface DevToolsHook {
3333
id: string
3434
enabled?: boolean
35+
devtoolsVersion: string
3536
events: Map<DevToolsHooks, Function[]>
3637
emit: (event: DevToolsHooks, ...payload: any[]) => void
3738
on: <T extends Function>(event: DevToolsHooks, handler: T) => () => void

0 commit comments

Comments
 (0)