diff --git a/packages/compiler-dom/src/transforms/stringifyStatic.ts b/packages/compiler-dom/src/transforms/stringifyStatic.ts index 6130d239..17587142 100644 --- a/packages/compiler-dom/src/transforms/stringifyStatic.ts +++ b/packages/compiler-dom/src/transforms/stringifyStatic.ts @@ -25,7 +25,8 @@ import { toDisplayString, normalizeClass, normalizeStyle, - stringifyStyle + stringifyStyle, + makeMap } from '@vue/shared' export const enum StringifyThresholds { @@ -145,6 +146,8 @@ const replaceHoist = ( context.hoists[context.hoists.indexOf(hoistToReplace)] = replacement } +const isNonStringifiable = /*#__PURE__*/ makeMap(`thead,tr,th,tbody,td`) + /** * for a hoisted node, analyze it and return: * - false: bailed (contains runtime constant) @@ -153,6 +156,10 @@ const replaceHoist = ( * - ec is the number of element with bindings inside */ function analyzeNode(node: StringifiableNode): [number, number] | false { + if (node.type === NodeTypes.ELEMENT && isNonStringifiable(node.tag)) { + return false + } + if (node.type === NodeTypes.TEXT_CALL) { return [1, 0] } diff --git a/packages/shared/src/makeMap.ts b/packages/shared/src/makeMap.ts index 712c3c2d..b598704c 100644 --- a/packages/shared/src/makeMap.ts +++ b/packages/shared/src/makeMap.ts @@ -1,8 +1,10 @@ -// Make a map and return a function for checking if a key -// is in that map. -// -// IMPORTANT: all calls of this function must be prefixed with /*#__PURE__*/ -// So that rollup can tree-shake them if necessary. +/** + * Make a map and return a function for checking if a key + * is in that map. + * IMPORTANT: all calls of this function must be prefixed with + * \/\*#\_\_PURE\_\_\*\/ + * So that rollup can tree-shake them if necessary. + */ export function makeMap( str: string, expectsLowerCase?: boolean