]> git.ipfire.org Git - thirdparty/vuejs/core.git/commitdiff
refactor: reuse htmlNesting from compiler-dom
authorEvan You <evan@vuejs.org>
Fri, 31 Jan 2025 14:32:05 +0000 (22:32 +0800)
committerEvan You <evan@vuejs.org>
Fri, 31 Jan 2025 14:32:05 +0000 (22:32 +0800)
packages/compiler-dom/src/index.ts
packages/compiler-vapor/src/html-nesting.ts [deleted file]
packages/compiler-vapor/src/transforms/transformElement.ts

index 9c5489900c4a1eb71132b0084a603ace71cf3b41..950901e7bf91c1d6ad97f8526ff788f538658adc 100644 (file)
@@ -75,4 +75,5 @@ export {
   DOMErrorMessages,
 } from './errors'
 export { resolveModifiers } from './transforms/vOn'
+export { isValidHTMLNesting } from './htmlNesting'
 export * from '@vue/compiler-core'
diff --git a/packages/compiler-vapor/src/html-nesting.ts b/packages/compiler-vapor/src/html-nesting.ts
deleted file mode 100644 (file)
index 932be55..0000000
+++ /dev/null
@@ -1,196 +0,0 @@
-/**
- * Copied from https://github.com/MananTank/validate-html-nesting
- * with ISC license
- *
- * To avoid runtime dependency on validate-html-nesting
- * This file should not change very often in the original repo
- * but we may need to keep it up-to-date from time to time.
- */
-
-/**
- * returns true if given parent-child nesting is valid HTML
- */
-export function isValidHTMLNesting(parent: string, child: string): boolean {
-  // if we know the list of children that are the only valid children for the given parent
-  if (parent in onlyValidChildren) {
-    return onlyValidChildren[parent].has(child)
-  }
-
-  // if we know the list of parents that are the only valid parents for the given child
-  if (child in onlyValidParents) {
-    return onlyValidParents[child].has(parent)
-  }
-
-  // if we know the list of children that are NOT valid for the given parent
-  if (parent in knownInvalidChildren) {
-    // check if the child is in the list of invalid children
-    // if so, return false
-    if (knownInvalidChildren[parent].has(child)) return false
-  }
-
-  // if we know the list of parents that are NOT valid for the given child
-  if (child in knownInvalidParents) {
-    // check if the parent is in the list of invalid parents
-    // if so, return false
-    if (knownInvalidParents[child].has(parent)) return false
-  }
-
-  return true
-}
-
-const headings = new Set(['h1', 'h2', 'h3', 'h4', 'h5', 'h6'])
-const emptySet = new Set([])
-
-/**
- * maps element to set of elements that can be it's children, no other */
-const onlyValidChildren: Record<string, Set<string>> = {
-  head: new Set([
-    'base',
-    'basefront',
-    'bgsound',
-    'link',
-    'meta',
-    'title',
-    'noscript',
-    'noframes',
-    'style',
-    'script',
-    'template',
-  ]),
-  optgroup: new Set(['option']),
-  select: new Set(['optgroup', 'option']),
-  math: new Set(['mrow']),
-  script: new Set(),
-  // table
-  table: new Set(['caption', 'colgroup', 'tbody', 'tfoot', 'thead']),
-  tr: new Set(['td', 'th']),
-  colgroup: new Set(['col']),
-  tbody: new Set(['tr']),
-  thead: new Set(['tr']),
-  tfoot: new Set(['tr']),
-  // these elements can not have any children elements
-  iframe: emptySet,
-  option: emptySet,
-  textarea: emptySet,
-  style: emptySet,
-  title: emptySet,
-}
-
-/** maps elements to set of elements which can be it's parent, no other */
-const onlyValidParents: Record<string, Set<string>> = {
-  // sections
-  html: emptySet,
-  body: new Set(['html']),
-  head: new Set(['html']),
-  // table
-  td: new Set(['tr']),
-  colgroup: new Set(['table']),
-  caption: new Set(['table']),
-  tbody: new Set(['table']),
-  tfoot: new Set(['table']),
-  col: new Set(['colgroup']),
-  th: new Set(['tr']),
-  thead: new Set(['table']),
-  tr: new Set(['tbody', 'thead', 'tfoot']),
-  // data list
-  dd: new Set(['dl', 'div']),
-  dt: new Set(['dl', 'div']),
-  // other
-  figcaption: new Set(['figure']),
-  // li: new Set(["ul", "ol"]),
-  summary: new Set(['details']),
-  area: new Set(['map']),
-} as const
-
-/** maps element to set of elements that can not be it's children, others can */
-const knownInvalidChildren: Record<string, Set<string>> = {
-  p: new Set([
-    'address',
-    'article',
-    'aside',
-    'blockquote',
-    'center',
-    'details',
-    'dialog',
-    'dir',
-    'div',
-    'dl',
-    'fieldset',
-    'figure',
-    'footer',
-    'form',
-    'h1',
-    'h2',
-    'h3',
-    'h4',
-    'h5',
-    'h6',
-    'header',
-    'hgroup',
-    'hr',
-    'li',
-    'main',
-    'nav',
-    'menu',
-    'ol',
-    'p',
-    'pre',
-    'section',
-    'table',
-    'ul',
-  ]),
-  svg: new Set([
-    'b',
-    'blockquote',
-    'br',
-    'code',
-    'dd',
-    'div',
-    'dl',
-    'dt',
-    'em',
-    'embed',
-    'h1',
-    'h2',
-    'h3',
-    'h4',
-    'h5',
-    'h6',
-    'hr',
-    'i',
-    'img',
-    'li',
-    'menu',
-    'meta',
-    'ol',
-    'p',
-    'pre',
-    'ruby',
-    's',
-    'small',
-    'span',
-    'strong',
-    'sub',
-    'sup',
-    'table',
-    'u',
-    'ul',
-    'var',
-  ]),
-} as const
-
-/** maps element to set of elements that can not be it's parent, others can */
-const knownInvalidParents: Record<string, Set<string>> = {
-  a: new Set(['a']),
-  button: new Set(['button']),
-  dd: new Set(['dd', 'dt']),
-  dt: new Set(['dd', 'dt']),
-  form: new Set(['form']),
-  li: new Set(['li']),
-  h1: headings,
-  h2: headings,
-  h3: headings,
-  h4: headings,
-  h5: headings,
-  h6: headings,
-}
index 5963c14ccec8fb2a41af9a5064b1faef16651c8a..f42801ace6d72f257aa02aa6663881d7229451c1 100644 (file)
@@ -1,4 +1,4 @@
-import { isValidHTMLNesting } from '../html-nesting'
+import { isValidHTMLNesting } from '@vue/compiler-dom'
 import {
   type AttributeNode,
   type ComponentNode,