From 29b86eb5bbceff6adbfc99b9b7568c777ab0824e Mon Sep 17 00:00:00 2001 From: Eduardo San Martin Morote Date: Mon, 3 Oct 2022 09:38:27 +0200 Subject: [PATCH 1/3] fix(devtools): check _buffer existance --- packages/runtime-core/src/devtools.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/runtime-core/src/devtools.ts b/packages/runtime-core/src/devtools.ts index 83d7483df39..588c8f3a3af 100644 --- a/packages/runtime-core/src/devtools.ts +++ b/packages/runtime-core/src/devtools.ts @@ -28,7 +28,7 @@ interface DevtoolsHook { once: (event: string, handler: Function) => void off: (event: string, handler: Function) => void appRecords: AppRecord[] - _buffer: any[][] + _buffer?: any[][] } export let devtools: DevtoolsHook @@ -109,7 +109,7 @@ const _devtoolsComponentRemoved = /*#__PURE__*/ createDevtoolsComponentHook( export const devtoolsComponentRemoved = ( component: ComponentInternalInstance ) => { - if (devtools && devtools._buffer.length) { + if (devtools && Array.isArray(devtools._buffer) && devtools._buffer.length) { let wasBuffered = false devtools._buffer = devtools._buffer.filter(item => { if (item.some(arg => arg === component)) { From fb80ebe792f119bbfab76a8d43339a296377a49f Mon Sep 17 00:00:00 2001 From: Eduardo San Martin Morote Date: Mon, 3 Oct 2022 10:23:50 +0200 Subject: [PATCH 2/3] Update packages/runtime-core/src/devtools.ts Co-authored-by: Anthony Fu --- packages/runtime-core/src/devtools.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/runtime-core/src/devtools.ts b/packages/runtime-core/src/devtools.ts index 588c8f3a3af..c31fea2c1b9 100644 --- a/packages/runtime-core/src/devtools.ts +++ b/packages/runtime-core/src/devtools.ts @@ -109,6 +109,7 @@ const _devtoolsComponentRemoved = /*#__PURE__*/ createDevtoolsComponentHook( export const devtoolsComponentRemoved = ( component: ComponentInternalInstance ) => { + // _buffer is not available in iframe #6812 if (devtools && Array.isArray(devtools._buffer) && devtools._buffer.length) { let wasBuffered = false devtools._buffer = devtools._buffer.filter(item => { From e85443ec587549707c7e466e5a5c204251019c49 Mon Sep 17 00:00:00 2001 From: Eduardo San Martin Morote Date: Mon, 3 Oct 2022 11:19:49 +0200 Subject: [PATCH 3/3] refactor: us cleanupBuffer --- packages/runtime-core/src/devtools.ts | 25 ++++++++++++------------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/packages/runtime-core/src/devtools.ts b/packages/runtime-core/src/devtools.ts index c31fea2c1b9..f05128d47aa 100644 --- a/packages/runtime-core/src/devtools.ts +++ b/packages/runtime-core/src/devtools.ts @@ -28,7 +28,11 @@ interface DevtoolsHook { once: (event: string, handler: Function) => void off: (event: string, handler: Function) => void appRecords: AppRecord[] - _buffer?: any[][] + /** + * Added at https://github.com/vuejs/devtools/commit/f2ad51eea789006ab66942e5a27c0f0986a257f9 + * Returns wether the arg was buffered or not + */ + cleanupBuffer?: (matchArg: unknown) => boolean } export let devtools: DevtoolsHook @@ -109,19 +113,14 @@ const _devtoolsComponentRemoved = /*#__PURE__*/ createDevtoolsComponentHook( export const devtoolsComponentRemoved = ( component: ComponentInternalInstance ) => { - // _buffer is not available in iframe #6812 - if (devtools && Array.isArray(devtools._buffer) && devtools._buffer.length) { - let wasBuffered = false - devtools._buffer = devtools._buffer.filter(item => { - if (item.some(arg => arg === component)) { - wasBuffered = true - return false - } - return true - }) - if (wasBuffered) return + if ( + devtools && + typeof devtools.cleanupBuffer === 'function' && + // remove the component if it wasn't buffered + !devtools.cleanupBuffer(component) + ) { + _devtoolsComponentRemoved(component) } - _devtoolsComponentRemoved(component) } function createDevtoolsComponentHook(hook: DevtoolsHooks) {