From a786f7c43acd2c6bbe32fd1307a3bacbf39f12da Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=99=BD=E9=9B=BE=E4=B8=89=E8=AF=AD?= <32354856+baiwusanyu-c@users.noreply.github.com> Date: Mon, 23 Oct 2023 21:44:05 +0800 Subject: [PATCH 01/11] feat: added isLateTag --- .../runtime-core/src/helpers/resolveAssets.ts | 23 +++++++++++-------- packages/shared/src/domTagConfig.ts | 4 ++++ 2 files changed, 18 insertions(+), 9 deletions(-) diff --git a/packages/runtime-core/src/helpers/resolveAssets.ts b/packages/runtime-core/src/helpers/resolveAssets.ts index 3aedcee47ee..1974c6c2527 100644 --- a/packages/runtime-core/src/helpers/resolveAssets.ts +++ b/packages/runtime-core/src/helpers/resolveAssets.ts @@ -6,7 +6,7 @@ import { } from '../component' import { currentRenderingInstance } from '../componentRenderContext' import { Directive } from '../directives' -import { camelize, capitalize, isString } from '@vue/shared' +import {camelize, capitalize, isLateTag, isString} from '@vue/shared' import { warn } from '../warning' import { VNodeTypes } from '../vnode' @@ -106,19 +106,24 @@ function resolveAsset( resolve(instance[type] || (Component as ComponentOptions)[type], name) || // global registration resolve(instance.appContext[type], name) - + debugger if (!res && maybeSelfReference) { // fallback to implicit self-reference return Component } - if (__DEV__ && warnMissing && !res) { - const extra = - type === COMPONENTS - ? `\nIf this is a native custom element, make sure to exclude it from ` + - `component resolution via compilerOptions.isCustomElement.` - : `` - warn(`Failed to resolve ${type.slice(0, -1)}: ${name}${extra}`) + if (__DEV__ && warnMissing) { + const isResEmpty = !res; + const isNameLateTag = isLateTag(name); + + if ((isResEmpty && !isNameLateTag) || (!isResEmpty && isNameLateTag)) { + const extra = + type === COMPONENTS + ? `\nIf this is a native custom element, make sure to exclude it from ` + + `component resolution via compilerOptions.isCustomElement.` + : `` + warn(`Failed to resolve ${type.slice(0, -1)}: ${name}${extra}`) + } } return res diff --git a/packages/shared/src/domTagConfig.ts b/packages/shared/src/domTagConfig.ts index 535aa6be718..a7bc1c1901c 100644 --- a/packages/shared/src/domTagConfig.ts +++ b/packages/shared/src/domTagConfig.ts @@ -14,6 +14,8 @@ const HTML_TAGS = 'option,output,progress,select,textarea,details,dialog,menu,' + 'summary,template,blockquote,iframe,tfoot' +const LATE_ADDED_TAGS = 'search' + // https://developer.mozilla.org/en-US/docs/Web/SVG/Element const SVG_TAGS = 'svg,animate,animateMotion,animateTransform,circle,clipPath,color-profile,' + @@ -45,3 +47,5 @@ export const isSVGTag = /*#__PURE__*/ makeMap(SVG_TAGS) * Do NOT use in runtime code paths unless behind `__DEV__` flag. */ export const isVoidTag = /*#__PURE__*/ makeMap(VOID_TAGS) + +export const isLateTag = /*#__PURE__*/ makeMap(LATE_ADDED_TAGS) From d4de55f9e272b484558eaa4ca32848bed6ccfc53 Mon Sep 17 00:00:00 2001 From: "autofix-ci[bot]" <114827586+autofix-ci[bot]@users.noreply.github.com> Date: Mon, 23 Oct 2023 13:45:56 +0000 Subject: [PATCH 02/11] [autofix.ci] apply automated fixes --- packages/runtime-core/src/helpers/resolveAssets.ts | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/packages/runtime-core/src/helpers/resolveAssets.ts b/packages/runtime-core/src/helpers/resolveAssets.ts index 1974c6c2527..5527954181d 100644 --- a/packages/runtime-core/src/helpers/resolveAssets.ts +++ b/packages/runtime-core/src/helpers/resolveAssets.ts @@ -6,7 +6,7 @@ import { } from '../component' import { currentRenderingInstance } from '../componentRenderContext' import { Directive } from '../directives' -import {camelize, capitalize, isLateTag, isString} from '@vue/shared' +import { camelize, capitalize, isLateTag, isString } from '@vue/shared' import { warn } from '../warning' import { VNodeTypes } from '../vnode' @@ -113,15 +113,15 @@ function resolveAsset( } if (__DEV__ && warnMissing) { - const isResEmpty = !res; - const isNameLateTag = isLateTag(name); + const isResEmpty = !res + const isNameLateTag = isLateTag(name) if ((isResEmpty && !isNameLateTag) || (!isResEmpty && isNameLateTag)) { const extra = - type === COMPONENTS - ? `\nIf this is a native custom element, make sure to exclude it from ` + - `component resolution via compilerOptions.isCustomElement.` - : `` + type === COMPONENTS + ? `\nIf this is a native custom element, make sure to exclude it from ` + + `component resolution via compilerOptions.isCustomElement.` + : `` warn(`Failed to resolve ${type.slice(0, -1)}: ${name}${extra}`) } } From 4451a17e49d36aae6bea9a241a6434f6c8f39487 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=99=BD=E9=9B=BE=E4=B8=89=E8=AF=AD?= <32354856+baiwusanyu-c@users.noreply.github.com> Date: Mon, 23 Oct 2023 22:24:02 +0800 Subject: [PATCH 03/11] chore: remove debugger --- packages/runtime-core/src/helpers/resolveAssets.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/runtime-core/src/helpers/resolveAssets.ts b/packages/runtime-core/src/helpers/resolveAssets.ts index 5527954181d..85055ffea9e 100644 --- a/packages/runtime-core/src/helpers/resolveAssets.ts +++ b/packages/runtime-core/src/helpers/resolveAssets.ts @@ -106,7 +106,6 @@ function resolveAsset( resolve(instance[type] || (Component as ComponentOptions)[type], name) || // global registration resolve(instance.appContext[type], name) - debugger if (!res && maybeSelfReference) { // fallback to implicit self-reference return Component From 0d86d59f4476b05cb5c925d3bb4bee9a9341742a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=99=BD=E9=9B=BE=E4=B8=89=E8=AF=AD?= <32354856+baiwusanyu-c@users.noreply.github.com> Date: Mon, 23 Oct 2023 23:45:38 +0800 Subject: [PATCH 04/11] chore: updated code --- .../runtime-core/src/helpers/resolveAssets.ts | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/packages/runtime-core/src/helpers/resolveAssets.ts b/packages/runtime-core/src/helpers/resolveAssets.ts index 85055ffea9e..bb38fb380ef 100644 --- a/packages/runtime-core/src/helpers/resolveAssets.ts +++ b/packages/runtime-core/src/helpers/resolveAssets.ts @@ -111,18 +111,13 @@ function resolveAsset( return Component } - if (__DEV__ && warnMissing) { - const isResEmpty = !res - const isNameLateTag = isLateTag(name) - - if ((isResEmpty && !isNameLateTag) || (!isResEmpty && isNameLateTag)) { - const extra = + if (__DEV__ && warnMissing && ((!res && !isLateTag(name)) || (res && isLateTag(name)))) { + const extra = type === COMPONENTS - ? `\nIf this is a native custom element, make sure to exclude it from ` + + ? `\nIf this is a native custom element, make sure to exclude it from ` + `component resolution via compilerOptions.isCustomElement.` - : `` - warn(`Failed to resolve ${type.slice(0, -1)}: ${name}${extra}`) - } + : `` + warn(`Failed to resolve ${type.slice(0, -1)}: ${name}${extra}`) } return res From 3b41769c5a0e12c5a1a9c09d7d0974fe0d31b19d Mon Sep 17 00:00:00 2001 From: "autofix-ci[bot]" <114827586+autofix-ci[bot]@users.noreply.github.com> Date: Mon, 23 Oct 2023 15:46:45 +0000 Subject: [PATCH 05/11] [autofix.ci] apply automated fixes --- packages/runtime-core/src/helpers/resolveAssets.ts | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/packages/runtime-core/src/helpers/resolveAssets.ts b/packages/runtime-core/src/helpers/resolveAssets.ts index bb38fb380ef..281a452df9a 100644 --- a/packages/runtime-core/src/helpers/resolveAssets.ts +++ b/packages/runtime-core/src/helpers/resolveAssets.ts @@ -111,12 +111,16 @@ function resolveAsset( return Component } - if (__DEV__ && warnMissing && ((!res && !isLateTag(name)) || (res && isLateTag(name)))) { + if ( + __DEV__ && + warnMissing && + ((!res && !isLateTag(name)) || (res && isLateTag(name))) + ) { const extra = - type === COMPONENTS - ? `\nIf this is a native custom element, make sure to exclude it from ` + - `component resolution via compilerOptions.isCustomElement.` - : `` + type === COMPONENTS + ? `\nIf this is a native custom element, make sure to exclude it from ` + + `component resolution via compilerOptions.isCustomElement.` + : `` warn(`Failed to resolve ${type.slice(0, -1)}: ${name}${extra}`) } From f0dcf9e4c24c600a935eac61f86d5ed7e41aaee0 Mon Sep 17 00:00:00 2001 From: baiwusanyu-c <740132583@qq.com> Date: Mon, 20 Nov 2023 15:10:22 +0800 Subject: [PATCH 06/11] chore: updated code --- packages/compiler-core/src/ast.ts | 7 ++++++- packages/compiler-core/src/codegen.ts | 5 ++++- packages/compiler-core/src/runtimeHelpers.ts | 2 ++ .../src/transforms/transformElement.ts | 6 ++++-- .../runtime-core/src/helpers/resolveAssets.ts | 15 +++++++++++++++ packages/runtime-core/src/index.ts | 3 ++- 6 files changed, 33 insertions(+), 5 deletions(-) diff --git a/packages/compiler-core/src/ast.ts b/packages/compiler-core/src/ast.ts index 515083c336a..3f6617d014d 100644 --- a/packages/compiler-core/src/ast.ts +++ b/packages/compiler-core/src/ast.ts @@ -11,7 +11,8 @@ import { CREATE_VNODE, CREATE_ELEMENT_VNODE, CREATE_BLOCK, - CREATE_ELEMENT_BLOCK + CREATE_ELEMENT_BLOCK, + RESOLVE_SETUP_RETURNED } from './runtimeHelpers' import { PropsExpression } from './transforms/transformElement' import { ImportItem, TransformContext } from './transform' @@ -822,6 +823,10 @@ export function getVNodeBlockHelper(ssr: boolean, isComponent: boolean) { return ssr || isComponent ? CREATE_BLOCK : CREATE_ELEMENT_BLOCK } +export function getSetupReturnedHelper() { + return RESOLVE_SETUP_RETURNED +} + export function convertToBlock( node: VNodeCall, { helper, removeHelper, inSSR }: TransformContext diff --git a/packages/compiler-core/src/codegen.ts b/packages/compiler-core/src/codegen.ts index 2b88ab0cfbd..7757a666643 100644 --- a/packages/compiler-core/src/codegen.ts +++ b/packages/compiler-core/src/codegen.ts @@ -26,7 +26,8 @@ import { VNodeCall, SequenceExpression, getVNodeBlockHelper, - getVNodeHelper + getVNodeHelper, + getSetupReturnedHelper } from './ast' import { SourceMapGenerator, RawSourceMap } from 'source-map-js' import { @@ -231,6 +232,8 @@ export function generate( if (!__BROWSER__ && options.bindingMetadata && !options.inline) { // binding optimization args args.push('$props', '$setup', '$data', '$options') + // Add helper 'getSetupReturnedHelper' for $setup + context.helper(getSetupReturnedHelper()) } const signature = !__BROWSER__ && options.isTS diff --git a/packages/compiler-core/src/runtimeHelpers.ts b/packages/compiler-core/src/runtimeHelpers.ts index 3f5ef024797..ca82327c7de 100644 --- a/packages/compiler-core/src/runtimeHelpers.ts +++ b/packages/compiler-core/src/runtimeHelpers.ts @@ -12,6 +12,7 @@ export const CREATE_COMMENT = Symbol(__DEV__ ? `createCommentVNode` : ``) export const CREATE_TEXT = Symbol(__DEV__ ? `createTextVNode` : ``) export const CREATE_STATIC = Symbol(__DEV__ ? `createStaticVNode` : ``) export const RESOLVE_COMPONENT = Symbol(__DEV__ ? `resolveComponent` : ``) +export const RESOLVE_SETUP_RETURNED = Symbol(__DEV__ ? `resolveSetupReturned` : ``) export const RESOLVE_DYNAMIC_COMPONENT = Symbol( __DEV__ ? `resolveDynamicComponent` : `` ) @@ -57,6 +58,7 @@ export const helperNameMap: Record = { [CREATE_TEXT]: `createTextVNode`, [CREATE_STATIC]: `createStaticVNode`, [RESOLVE_COMPONENT]: `resolveComponent`, + [RESOLVE_SETUP_RETURNED]:`resolveSetupReturned`, [RESOLVE_DYNAMIC_COMPONENT]: `resolveDynamicComponent`, [RESOLVE_DIRECTIVE]: `resolveDirective`, [RESOLVE_FILTER]: `resolveFilter`, diff --git a/packages/compiler-core/src/transforms/transformElement.ts b/packages/compiler-core/src/transforms/transformElement.ts index 253b6be5efa..eca1748dc4b 100644 --- a/packages/compiler-core/src/transforms/transformElement.ts +++ b/packages/compiler-core/src/transforms/transformElement.ts @@ -19,7 +19,8 @@ import { TemplateTextChildNode, DirectiveArguments, createVNodeCall, - ConstantTypes + ConstantTypes, + getSetupReturnedHelper } from '../ast' import { PatchFlags, @@ -369,10 +370,11 @@ function resolveSetupReference(name: string, context: TransformContext) { checkType(BindingTypes.SETUP_REACTIVE_CONST) || checkType(BindingTypes.LITERAL_CONST) if (fromConst) { + const helper = context.helperString return context.inline ? // in inline mode, const setup bindings (e.g. imports) can be used as-is fromConst - : `$setup[${JSON.stringify(fromConst)}]` + : `${helper(getSetupReturnedHelper())}(${JSON.stringify(fromConst)}, $setup)` } const fromMaybeRef = diff --git a/packages/runtime-core/src/helpers/resolveAssets.ts b/packages/runtime-core/src/helpers/resolveAssets.ts index 281a452df9a..ac282cfe63b 100644 --- a/packages/runtime-core/src/helpers/resolveAssets.ts +++ b/packages/runtime-core/src/helpers/resolveAssets.ts @@ -141,3 +141,18 @@ function resolve(registry: Record | undefined, name: string) { registry[capitalize(camelize(name))]) ) } + +/** + * @private + */ +export function resolveSetupReturned(name:string, setupReturn: any) { + if(!setupReturn) return name + const returnValue = setupReturn[name] + if(returnValue && returnValue.__file && isLateTag(name as string)){ + const extra = + `\nIf this is a native custom element, make sure to exclude it from ` + + `component resolution via compilerOptions.isCustomElement.` + warn(`Failed to resolve component: ${name}${extra}`) + } + return returnValue +} diff --git a/packages/runtime-core/src/index.ts b/packages/runtime-core/src/index.ts index 85bd92e75b0..a2de0f08d8b 100644 --- a/packages/runtime-core/src/index.ts +++ b/packages/runtime-core/src/index.ts @@ -128,7 +128,8 @@ export { export { resolveComponent, resolveDirective, - resolveDynamicComponent + resolveDynamicComponent, + resolveSetupReturned } from './helpers/resolveAssets' // For integration with runtime compiler export { registerRuntimeCompiler, isRuntimeOnly } from './component' From 97194ff9b548ff4c8473b6f524dc88862c5e20cd Mon Sep 17 00:00:00 2001 From: "autofix-ci[bot]" <114827586+autofix-ci[bot]@users.noreply.github.com> Date: Mon, 20 Nov 2023 07:11:26 +0000 Subject: [PATCH 07/11] [autofix.ci] apply automated fixes --- packages/compiler-core/src/runtimeHelpers.ts | 6 ++++-- packages/compiler-core/src/transforms/transformElement.ts | 4 +++- packages/runtime-core/src/helpers/resolveAssets.ts | 8 ++++---- 3 files changed, 11 insertions(+), 7 deletions(-) diff --git a/packages/compiler-core/src/runtimeHelpers.ts b/packages/compiler-core/src/runtimeHelpers.ts index ca82327c7de..cc0ac71e60f 100644 --- a/packages/compiler-core/src/runtimeHelpers.ts +++ b/packages/compiler-core/src/runtimeHelpers.ts @@ -12,7 +12,9 @@ export const CREATE_COMMENT = Symbol(__DEV__ ? `createCommentVNode` : ``) export const CREATE_TEXT = Symbol(__DEV__ ? `createTextVNode` : ``) export const CREATE_STATIC = Symbol(__DEV__ ? `createStaticVNode` : ``) export const RESOLVE_COMPONENT = Symbol(__DEV__ ? `resolveComponent` : ``) -export const RESOLVE_SETUP_RETURNED = Symbol(__DEV__ ? `resolveSetupReturned` : ``) +export const RESOLVE_SETUP_RETURNED = Symbol( + __DEV__ ? `resolveSetupReturned` : `` +) export const RESOLVE_DYNAMIC_COMPONENT = Symbol( __DEV__ ? `resolveDynamicComponent` : `` ) @@ -58,7 +60,7 @@ export const helperNameMap: Record = { [CREATE_TEXT]: `createTextVNode`, [CREATE_STATIC]: `createStaticVNode`, [RESOLVE_COMPONENT]: `resolveComponent`, - [RESOLVE_SETUP_RETURNED]:`resolveSetupReturned`, + [RESOLVE_SETUP_RETURNED]: `resolveSetupReturned`, [RESOLVE_DYNAMIC_COMPONENT]: `resolveDynamicComponent`, [RESOLVE_DIRECTIVE]: `resolveDirective`, [RESOLVE_FILTER]: `resolveFilter`, diff --git a/packages/compiler-core/src/transforms/transformElement.ts b/packages/compiler-core/src/transforms/transformElement.ts index eca1748dc4b..8f991535b7b 100644 --- a/packages/compiler-core/src/transforms/transformElement.ts +++ b/packages/compiler-core/src/transforms/transformElement.ts @@ -374,7 +374,9 @@ function resolveSetupReference(name: string, context: TransformContext) { return context.inline ? // in inline mode, const setup bindings (e.g. imports) can be used as-is fromConst - : `${helper(getSetupReturnedHelper())}(${JSON.stringify(fromConst)}, $setup)` + : `${helper(getSetupReturnedHelper())}(${JSON.stringify( + fromConst + )}, $setup)` } const fromMaybeRef = diff --git a/packages/runtime-core/src/helpers/resolveAssets.ts b/packages/runtime-core/src/helpers/resolveAssets.ts index ac282cfe63b..1852ad4bb64 100644 --- a/packages/runtime-core/src/helpers/resolveAssets.ts +++ b/packages/runtime-core/src/helpers/resolveAssets.ts @@ -145,13 +145,13 @@ function resolve(registry: Record | undefined, name: string) { /** * @private */ -export function resolveSetupReturned(name:string, setupReturn: any) { - if(!setupReturn) return name +export function resolveSetupReturned(name: string, setupReturn: any) { + if (!setupReturn) return name const returnValue = setupReturn[name] - if(returnValue && returnValue.__file && isLateTag(name as string)){ + if (returnValue && returnValue.__file && isLateTag(name as string)) { const extra = `\nIf this is a native custom element, make sure to exclude it from ` + - `component resolution via compilerOptions.isCustomElement.` + `component resolution via compilerOptions.isCustomElement.` warn(`Failed to resolve component: ${name}${extra}`) } return returnValue From 1618c0a42660766834f973e50050531e31bd81a3 Mon Sep 17 00:00:00 2001 From: baiwusanyu-c <740132583@qq.com> Date: Mon, 20 Nov 2023 15:28:51 +0800 Subject: [PATCH 08/11] chore: updated warning info --- .../transforms/transformElement.spec.ts | 10 ++++++++ .../runtime-core/src/helpers/resolveAssets.ts | 25 +++++++++++-------- 2 files changed, 24 insertions(+), 11 deletions(-) diff --git a/packages/compiler-core/__tests__/transforms/transformElement.spec.ts b/packages/compiler-core/__tests__/transforms/transformElement.spec.ts index a1ae013a830..4cdfea4d62c 100644 --- a/packages/compiler-core/__tests__/transforms/transformElement.spec.ts +++ b/packages/compiler-core/__tests__/transforms/transformElement.spec.ts @@ -98,6 +98,16 @@ describe('compiler: element transform', () => { expect(node.tag).toBe(`$setup["Example"]`) }) + test('resolve component from setup bindings & component', () => { + const { root, node } = parseWithElementTransform(``, { + bindingMetadata: { + Example: BindingTypes.SETUP_CONST + } + }) + expect(root.helpers).not.toContain(RESOLVE_COMPONENT) + expect(node.tag).toBe(`_resolveSetupReturned("Example", $setup)`) + }) + test('resolve component from setup bindings (inline)', () => { const { root, node } = parseWithElementTransform(``, { inline: true, diff --git a/packages/runtime-core/src/helpers/resolveAssets.ts b/packages/runtime-core/src/helpers/resolveAssets.ts index ac282cfe63b..974b64177fb 100644 --- a/packages/runtime-core/src/helpers/resolveAssets.ts +++ b/packages/runtime-core/src/helpers/resolveAssets.ts @@ -116,11 +116,16 @@ function resolveAsset( warnMissing && ((!res && !isLateTag(name)) || (res && isLateTag(name))) ) { - const extra = - type === COMPONENTS - ? `\nIf this is a native custom element, make sure to exclude it from ` + + let extra = '' + if (type === COMPONENTS) { + if (isLateTag(name)) { + extra = `\nplease do not use built-in tag names as component names.` + } else { + extra = + `\nIf this is a native custom element, make sure to exclude it from ` + `component resolution via compilerOptions.isCustomElement.` - : `` + } + } warn(`Failed to resolve ${type.slice(0, -1)}: ${name}${extra}`) } @@ -145,14 +150,12 @@ function resolve(registry: Record | undefined, name: string) { /** * @private */ -export function resolveSetupReturned(name:string, setupReturn: any) { - if(!setupReturn) return name +export function resolveSetupReturned(name: string, setupReturn: any) { + if (!setupReturn) return name const returnValue = setupReturn[name] - if(returnValue && returnValue.__file && isLateTag(name as string)){ - const extra = - `\nIf this is a native custom element, make sure to exclude it from ` + - `component resolution via compilerOptions.isCustomElement.` - warn(`Failed to resolve component: ${name}${extra}`) + if (returnValue && returnValue.__file && isLateTag(name as string)) { + const extra = `\nplease do not use built-in tag names as component names.` + warn(`Failed to resolve component: ${name},${extra}`) } return returnValue } From ec4ff32b93f9c9ada8e7554a38ed9c65eaa5dd23 Mon Sep 17 00:00:00 2001 From: "autofix-ci[bot]" <114827586+autofix-ci[bot]@users.noreply.github.com> Date: Wed, 3 Jan 2024 01:55:23 +0000 Subject: [PATCH 09/11] [autofix.ci] apply automated fixes --- .../__tests__/transforms/transformElement.spec.ts | 4 ++-- packages/compiler-core/src/ast.ts | 2 +- packages/compiler-core/src/codegen.ts | 2 +- packages/compiler-core/src/runtimeHelpers.ts | 2 +- packages/compiler-core/src/transforms/transformElement.ts | 4 ++-- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/packages/compiler-core/__tests__/transforms/transformElement.spec.ts b/packages/compiler-core/__tests__/transforms/transformElement.spec.ts index 20266538b7d..8f6ede8d02b 100644 --- a/packages/compiler-core/__tests__/transforms/transformElement.spec.ts +++ b/packages/compiler-core/__tests__/transforms/transformElement.spec.ts @@ -101,8 +101,8 @@ describe('compiler: element transform', () => { test('resolve component from setup bindings & component', () => { const { root, node } = parseWithElementTransform(``, { bindingMetadata: { - Example: BindingTypes.SETUP_CONST - } + Example: BindingTypes.SETUP_CONST, + }, }) expect(root.helpers).not.toContain(RESOLVE_COMPONENT) expect(node.tag).toBe(`_resolveSetupReturned("Example", $setup)`) diff --git a/packages/compiler-core/src/ast.ts b/packages/compiler-core/src/ast.ts index 29ccab005fa..d214bfa7527 100644 --- a/packages/compiler-core/src/ast.ts +++ b/packages/compiler-core/src/ast.ts @@ -9,9 +9,9 @@ import { OPEN_BLOCK, type RENDER_LIST, type RENDER_SLOT, + RESOLVE_SETUP_RETURNED, WITH_DIRECTIVES, type WITH_MEMO, - RESOLVE_SETUP_RETURNED } from './runtimeHelpers' import type { PropsExpression } from './transforms/transformElement' import type { ImportItem, TransformContext } from './transform' diff --git a/packages/compiler-core/src/codegen.ts b/packages/compiler-core/src/codegen.ts index 0c27577fe9c..c83e783226f 100644 --- a/packages/compiler-core/src/codegen.ts +++ b/packages/compiler-core/src/codegen.ts @@ -24,10 +24,10 @@ import { type TemplateLiteral, type TextNode, type VNodeCall, + getSetupReturnedHelper, getVNodeBlockHelper, getVNodeHelper, locStub, - getSetupReturnedHelper } from './ast' import { type RawSourceMap, SourceMapGenerator } from 'source-map-js' import { diff --git a/packages/compiler-core/src/runtimeHelpers.ts b/packages/compiler-core/src/runtimeHelpers.ts index f27bb7585fa..957fedd9618 100644 --- a/packages/compiler-core/src/runtimeHelpers.ts +++ b/packages/compiler-core/src/runtimeHelpers.ts @@ -13,7 +13,7 @@ export const CREATE_TEXT = Symbol(__DEV__ ? `createTextVNode` : ``) export const CREATE_STATIC = Symbol(__DEV__ ? `createStaticVNode` : ``) export const RESOLVE_COMPONENT = Symbol(__DEV__ ? `resolveComponent` : ``) export const RESOLVE_SETUP_RETURNED = Symbol( - __DEV__ ? `resolveSetupReturned` : `` + __DEV__ ? `resolveSetupReturned` : ``, ) export const RESOLVE_DYNAMIC_COMPONENT = Symbol( __DEV__ ? `resolveDynamicComponent` : ``, diff --git a/packages/compiler-core/src/transforms/transformElement.ts b/packages/compiler-core/src/transforms/transformElement.ts index b2e3191d13c..f3f4579ace6 100644 --- a/packages/compiler-core/src/transforms/transformElement.ts +++ b/packages/compiler-core/src/transforms/transformElement.ts @@ -21,7 +21,7 @@ import { createObjectProperty, createSimpleExpression, createVNodeCall, - getSetupReturnedHelper + getSetupReturnedHelper, } from '../ast' import { PatchFlagNames, @@ -361,7 +361,7 @@ function resolveSetupReference(name: string, context: TransformContext) { ? // in inline mode, const setup bindings (e.g. imports) can be used as-is fromConst : `${helper(getSetupReturnedHelper())}(${JSON.stringify( - fromConst + fromConst, )}, $setup)` } From 3d4bac88f80daa6a0476a712481d0da5b96c3622 Mon Sep 17 00:00:00 2001 From: Evan You Date: Fri, 16 Aug 2024 20:36:15 +0800 Subject: [PATCH 10/11] workflow: pass along commit in ecosystem-ci-trigger [ci skip] --- .github/workflows/ecosystem-ci-trigger.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ecosystem-ci-trigger.yml b/.github/workflows/ecosystem-ci-trigger.yml index 25adf7c85f4..fdd40600847 100644 --- a/.github/workflows/ecosystem-ci-trigger.yml +++ b/.github/workflows/ecosystem-ci-trigger.yml @@ -56,7 +56,8 @@ jobs: return { num: context.issue.number, branchName: pr.head.ref, - repo: pr.head.repo.full_name + repo: pr.head.repo.full_name, + commit: pr.head.sha } - uses: actions/github-script@v7 id: trigger @@ -81,5 +82,6 @@ jobs: branchName: prData.branchName, repo: prData.repo, suite: suite === '' ? '-' : suite + commit: prData.commit } }) From b9f84dae8505cc743577cf1321dd2e045a2d73e6 Mon Sep 17 00:00:00 2001 From: Michael Brevard Date: Wed, 18 Sep 2024 10:44:23 +0300 Subject: [PATCH 11/11] perf(hydration): avoid observer if element is in viewport (#11639) --- .../runtime-core/src/hydrationStrategies.ts | 29 +++++++++++++++++-- 1 file changed, 26 insertions(+), 3 deletions(-) diff --git a/packages/runtime-core/src/hydrationStrategies.ts b/packages/runtime-core/src/hydrationStrategies.ts index 51200fc1c34..791ca9e5254 100644 --- a/packages/runtime-core/src/hydrationStrategies.ts +++ b/packages/runtime-core/src/hydrationStrategies.ts @@ -26,6 +26,16 @@ export const hydrateOnIdle: HydrationStrategyFactory = return () => cancelIdleCallback(id) } +function elementIsVisibleInViewport(el: Element) { + const { top, left, bottom, right } = el.getBoundingClientRect() + // eslint-disable-next-line no-restricted-globals + const { innerHeight, innerWidth } = window + return ( + ((top > 0 && top < innerHeight) || (bottom > 0 && bottom < innerHeight)) && + ((left > 0 && left < innerWidth) || (right > 0 && right < innerWidth)) + ) +} + export const hydrateOnVisible: HydrationStrategyFactory< IntersectionObserverInit > = opts => (hydrate, forEach) => { @@ -37,7 +47,14 @@ export const hydrateOnVisible: HydrationStrategyFactory< break } }, opts) - forEach(el => ob.observe(el)) + forEach(el => { + if (elementIsVisibleInViewport(el)) { + hydrate() + ob.disconnect() + return false + } + ob.observe(el) + }) return () => ob.disconnect() } @@ -85,14 +102,20 @@ export const hydrateOnInteraction: HydrationStrategyFactory< return teardown } -export function forEachElement(node: Node, cb: (el: Element) => void): void { +export function forEachElement( + node: Node, + cb: (el: Element) => void | false, +): void { // fragment if (isComment(node) && node.data === '[') { let depth = 1 let next = node.nextSibling while (next) { if (next.nodeType === DOMNodeTypes.ELEMENT) { - cb(next as Element) + const result = cb(next as Element) + if (result === false) { + break + } } else if (isComment(next)) { if (next.data === ']') { if (--depth === 0) break