]> git.ipfire.org Git - thirdparty/vuejs/core.git/commitdiff
fix(build): avoid const enum conflicts
authorEvan You <yyx990803@gmail.com>
Mon, 6 Feb 2023 01:44:12 +0000 (09:44 +0800)
committerEvan You <yyx990803@gmail.com>
Mon, 6 Feb 2023 01:44:12 +0000 (09:44 +0800)
packages/runtime-core/__tests__/rendererChildren.spec.ts
packages/runtime-core/__tests__/rendererFragment.spec.ts
packages/runtime-core/__tests__/vnodeHooks.spec.ts
packages/runtime-test/__tests__/testRuntime.spec.ts
packages/runtime-test/src/nodeOps.ts
packages/runtime-test/src/serialize.ts
scripts/const-enum.js

index a8edbe72c9b8e3f6612004fa0fb491fe1ff64d2d..747626ad53182a0375dd250a5e43d34fdcf9f98c 100644 (file)
@@ -3,7 +3,7 @@ import {
   h,
   render,
   nodeOps,
-  NodeTypes,
+  TestNodeTypes,
   TestElement,
   serialize,
   serializeInner
@@ -487,7 +487,7 @@ describe('renderer: unkeyed children', () => {
 
     elm = root.children[0] as TestElement
     expect(elm.children[0]).toMatchObject({
-      type: NodeTypes.TEXT,
+      type: TestNodeTypes.TEXT,
       text: 'text'
     })
 
@@ -495,7 +495,7 @@ describe('renderer: unkeyed children', () => {
 
     elm = root.children[0] as TestElement
     expect(elm.children[0]).toMatchObject({
-      type: NodeTypes.TEXT,
+      type: TestNodeTypes.TEXT,
       text: 'text'
     })
   })
@@ -505,7 +505,7 @@ describe('renderer: unkeyed children', () => {
 
     elm = root.children[0] as TestElement
     expect(elm.children[0]).toMatchObject({
-      type: NodeTypes.TEXT,
+      type: TestNodeTypes.TEXT,
       text: 'text'
     })
 
@@ -513,7 +513,7 @@ describe('renderer: unkeyed children', () => {
 
     elm = root.children[0] as TestElement
     expect(elm.children[0]).toMatchObject({
-      type: NodeTypes.TEXT,
+      type: TestNodeTypes.TEXT,
       text: 'text2'
     })
   })
index 1de73ef632c819383a623fc4c4c666901dd9b96d..d0c9e5c79a7818d2ccb452d5598a4806de3d0961 100644 (file)
@@ -3,7 +3,7 @@ import {
   createVNode,
   render,
   nodeOps,
-  NodeTypes,
+  TestNodeTypes,
   TestElement,
   Fragment,
   resetOps,
@@ -32,23 +32,23 @@ describe('renderer: fragment', () => {
     expect(serializeInner(root)).toBe(`<div>one</div>two`)
     expect(root.children.length).toBe(4)
     expect(root.children[0]).toMatchObject({
-      type: NodeTypes.TEXT,
+      type: TestNodeTypes.TEXT,
       text: ''
     })
     expect(root.children[1]).toMatchObject({
-      type: NodeTypes.ELEMENT,
+      type: TestNodeTypes.ELEMENT,
       tag: 'div'
     })
     expect((root.children[1] as TestElement).children[0]).toMatchObject({
-      type: NodeTypes.TEXT,
+      type: TestNodeTypes.TEXT,
       text: 'one'
     })
     expect(root.children[2]).toMatchObject({
-      type: NodeTypes.TEXT,
+      type: TestNodeTypes.TEXT,
       text: 'two'
     })
     expect(root.children[3]).toMatchObject({
-      type: NodeTypes.TEXT,
+      type: TestNodeTypes.TEXT,
       text: ''
     })
   })
index 7b9b731807442cc9cccf59d637e71bdbda5e36ae..4d6f452273808b10321fdd88193261d8ded4855a 100644 (file)
@@ -5,7 +5,7 @@ import {
   nodeOps,
   VNodeProps,
   TestElement,
-  NodeTypes,
+  TestNodeTypes,
   VNode
 } from '@vue/runtime-test'
 
@@ -45,13 +45,13 @@ describe('renderer: vnode hooks', () => {
       onVnodeMounted: vi.fn(),
       onVnodeBeforeUpdate: vi.fn(vnode => {
         expect((vnode.el as TestElement).children[0]).toMatchObject({
-          type: NodeTypes.TEXT,
+          type: TestNodeTypes.TEXT,
           text: 'foo'
         })
       }),
       onVnodeUpdated: vi.fn(vnode => {
         expect((vnode.el as TestElement).children[0]).toMatchObject({
-          type: NodeTypes.TEXT,
+          type: TestNodeTypes.TEXT,
           text: 'bar'
         })
       }),
@@ -70,13 +70,13 @@ describe('renderer: vnode hooks', () => {
       onVnodeMounted: vi.fn(),
       onVnodeBeforeUpdate: vi.fn(vnode => {
         expect(vnode.el as TestElement).toMatchObject({
-          type: NodeTypes.TEXT,
+          type: TestNodeTypes.TEXT,
           text: 'foo'
         })
       }),
       onVnodeUpdated: vi.fn(vnode => {
         expect(vnode.el as TestElement).toMatchObject({
-          type: NodeTypes.TEXT,
+          type: TestNodeTypes.TEXT,
           text: 'bar'
         })
       }),
index 789ace25446c3784684a5324c1ca591e4cebfad4..b148e72a48b3c5020b98398dc659be0dd341ab82 100644 (file)
@@ -2,7 +2,7 @@ import {
   h,
   render,
   nodeOps,
-  NodeTypes,
+  TestNodeTypes,
   TestElement,
   TestText,
   ref,
@@ -32,12 +32,12 @@ describe('test renderer', () => {
     expect(root.children.length).toBe(1)
 
     const el = root.children[0] as TestElement
-    expect(el.type).toBe(NodeTypes.ELEMENT)
+    expect(el.type).toBe(TestNodeTypes.ELEMENT)
     expect(el.props.id).toBe('test')
     expect(el.children.length).toBe(1)
 
     const text = el.children[0] as TestText
-    expect(text.type).toBe(NodeTypes.TEXT)
+    expect(text.type).toBe(TestNodeTypes.TEXT)
     expect(text.text).toBe('hello')
   })
 
@@ -68,7 +68,7 @@ describe('test renderer', () => {
 
     expect(ops[0]).toEqual({
       type: NodeOpTypes.CREATE,
-      nodeType: NodeTypes.ELEMENT,
+      nodeType: TestNodeTypes.ELEMENT,
       tag: 'div',
       targetNode: root.children[0]
     })
index 94a793cc483a1d939589c3ecf0187cb6051e243b..a3a8012f28043b1d359f5f901650f22999062b3f 100644 (file)
@@ -1,6 +1,6 @@
 import { markRaw } from '@vue/reactivity'
 
-export const enum NodeTypes {
+export const enum TestNodeTypes {
   TEXT = 'text',
   ELEMENT = 'element',
   COMMENT = 'comment'
@@ -17,7 +17,7 @@ export const enum NodeOpTypes {
 
 export interface TestElement {
   id: number
-  type: NodeTypes.ELEMENT
+  type: TestNodeTypes.ELEMENT
   parentNode: TestElement | null
   tag: string
   children: TestNode[]
@@ -27,14 +27,14 @@ export interface TestElement {
 
 export interface TestText {
   id: number
-  type: NodeTypes.TEXT
+  type: TestNodeTypes.TEXT
   parentNode: TestElement | null
   text: string
 }
 
 export interface TestComment {
   id: number
-  type: NodeTypes.COMMENT
+  type: TestNodeTypes.COMMENT
   parentNode: TestElement | null
   text: string
 }
@@ -43,7 +43,7 @@ export type TestNode = TestElement | TestText | TestComment
 
 export interface NodeOp {
   type: NodeOpTypes
-  nodeType?: NodeTypes
+  nodeType?: TestNodeTypes
   tag?: string
   text?: string
   targetNode?: TestNode
@@ -74,7 +74,7 @@ export function dumpOps(): NodeOp[] {
 function createElement(tag: string): TestElement {
   const node: TestElement = {
     id: nodeId++,
-    type: NodeTypes.ELEMENT,
+    type: TestNodeTypes.ELEMENT,
     tag,
     children: [],
     props: {},
@@ -83,7 +83,7 @@ function createElement(tag: string): TestElement {
   }
   logNodeOp({
     type: NodeOpTypes.CREATE,
-    nodeType: NodeTypes.ELEMENT,
+    nodeType: TestNodeTypes.ELEMENT,
     targetNode: node,
     tag
   })
@@ -95,13 +95,13 @@ function createElement(tag: string): TestElement {
 function createText(text: string): TestText {
   const node: TestText = {
     id: nodeId++,
-    type: NodeTypes.TEXT,
+    type: TestNodeTypes.TEXT,
     text,
     parentNode: null
   }
   logNodeOp({
     type: NodeOpTypes.CREATE,
-    nodeType: NodeTypes.TEXT,
+    nodeType: TestNodeTypes.TEXT,
     targetNode: node,
     text
   })
@@ -113,13 +113,13 @@ function createText(text: string): TestText {
 function createComment(text: string): TestComment {
   const node: TestComment = {
     id: nodeId++,
-    type: NodeTypes.COMMENT,
+    type: TestNodeTypes.COMMENT,
     text,
     parentNode: null
   }
   logNodeOp({
     type: NodeOpTypes.CREATE,
-    nodeType: NodeTypes.COMMENT,
+    nodeType: TestNodeTypes.COMMENT,
     targetNode: node,
     text
   })
@@ -203,7 +203,7 @@ function setElementText(el: TestElement, text: string) {
     el.children = [
       {
         id: nodeId++,
-        type: NodeTypes.TEXT,
+        type: TestNodeTypes.TEXT,
         text,
         parentNode: el
       }
index a1ee138b6599c31caa12599384c8413e3f088b00..21cfb2e1a0511765cda014ea0292126ab622cf6d 100644 (file)
@@ -1,7 +1,7 @@
 import {
   TestElement,
   TestNode,
-  NodeTypes,
+  TestNodeTypes,
   TestText,
   TestComment
 } from './nodeOps'
@@ -12,7 +12,7 @@ export function serialize(
   indent: number = 0,
   depth: number = 0
 ): string {
-  if (node.type === NodeTypes.ELEMENT) {
+  if (node.type === TestNodeTypes.ELEMENT) {
     return serializeElement(node, indent, depth)
   } else {
     return serializeText(node, indent, depth)
@@ -64,6 +64,6 @@ function serializeText(
   const padding = indent ? ` `.repeat(indent).repeat(depth) : ``
   return (
     padding +
-    (node.type === NodeTypes.COMMENT ? `<!--${node.text}-->` : node.text)
+    (node.type === TestNodeTypes.COMMENT ? `<!--${node.text}-->` : node.text)
   )
 }
index 7cac217b7b1d03c90151a956e02f6c647a8d83ba..b4a602af68952e5d0ecc1631fd2040e1bb9d1e8b 100644 (file)
@@ -81,6 +81,12 @@ export function scanEnums() {
           }
           const key = e.id.type === 'Identifier' ? e.id.name : e.id.value
           const fullKey = `${id}.${key}`
+          const saveValue = value => {
+            if (fullKey in enumData.defines) {
+              throw new Error(`name conflict for enum ${id} in ${file}`)
+            }
+            enumData.defines[fullKey] = JSON.stringify(value)
+          }
           const init = e.initializer
           if (init) {
             let value
@@ -138,15 +144,15 @@ export function scanEnums() {
                 `unhandled initializer type ${init.type} for ${fullKey} in ${file}`
               )
             }
-            enumData.defines[fullKey] = JSON.stringify(value)
+            saveValue(value)
             lastInitialized = value
           } else {
             if (lastInitialized === undefined) {
               // first initialized
-              enumData.defines[fullKey] = `0`
+              saveValue(`0`)
               lastInitialized = 0
             } else if (typeof lastInitialized === 'number') {
-              enumData.defines[fullKey] = String(++lastInitialized)
+              saveValue(String(++lastInitialized))
             } else {
               // should not happen
               throw new Error(`wrong enum initialization sequence in ${file}`)