fix(compiler-sfc): support runtime Enum in normal script (#4698)
This commit is contained in:
		
							parent
							
								
									914e2e3880
								
							
						
					
					
						commit
						f66d456b7a
					
				@ -1323,6 +1323,25 @@ return { Foo }
 | 
				
			|||||||
})"
 | 
					})"
 | 
				
			||||||
`;
 | 
					`;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					exports[`SFC compile <script setup> with TypeScript runtime Enum in normal script 1`] = `
 | 
				
			||||||
 | 
					"import { defineComponent as _defineComponent } from 'vue'
 | 
				
			||||||
 | 
					enum Foo { A = 123 }
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					          export enum D { D = \\"D\\" }
 | 
				
			||||||
 | 
					          const enum C { C = \\"C\\" }
 | 
				
			||||||
 | 
					          enum B { B = \\"B\\" }
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					export default /*#__PURE__*/_defineComponent({
 | 
				
			||||||
 | 
					  setup(__props, { expose }) {
 | 
				
			||||||
 | 
					  expose()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					return { D, C, B, Foo }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					})"
 | 
				
			||||||
 | 
					`;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
exports[`SFC compile <script setup> with TypeScript withDefaults (dynamic) 1`] = `
 | 
					exports[`SFC compile <script setup> with TypeScript withDefaults (dynamic) 1`] = `
 | 
				
			||||||
"import { mergeDefaults as _mergeDefaults, defineComponent as _defineComponent } from 'vue'
 | 
					"import { mergeDefaults as _mergeDefaults, defineComponent as _defineComponent } from 'vue'
 | 
				
			||||||
import { defaults } from './foo'
 | 
					import { defaults } from './foo'
 | 
				
			||||||
 | 
				
			|||||||
@ -1042,6 +1042,26 @@ const emit = defineEmits(['a', 'b'])
 | 
				
			|||||||
      })
 | 
					      })
 | 
				
			||||||
    })
 | 
					    })
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    test('runtime Enum in normal script', () => {
 | 
				
			||||||
 | 
					      const { content, bindings } = compile(
 | 
				
			||||||
 | 
					        `<script lang="ts">
 | 
				
			||||||
 | 
					          export enum D { D = "D" }
 | 
				
			||||||
 | 
					          const enum C { C = "C" }
 | 
				
			||||||
 | 
					          enum B { B = "B" }
 | 
				
			||||||
 | 
					        </script>
 | 
				
			||||||
 | 
					        <script setup lang="ts">
 | 
				
			||||||
 | 
					        enum Foo { A = 123 }
 | 
				
			||||||
 | 
					        </script>`
 | 
				
			||||||
 | 
					      )
 | 
				
			||||||
 | 
					      assertCode(content)
 | 
				
			||||||
 | 
					      expect(bindings).toStrictEqual({
 | 
				
			||||||
 | 
					        D: BindingTypes.SETUP_CONST,
 | 
				
			||||||
 | 
					        C: BindingTypes.SETUP_CONST,
 | 
				
			||||||
 | 
					        B: BindingTypes.SETUP_CONST,
 | 
				
			||||||
 | 
					        Foo: BindingTypes.SETUP_CONST
 | 
				
			||||||
 | 
					      })
 | 
				
			||||||
 | 
					    })
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    test('const Enum', () => {
 | 
					    test('const Enum', () => {
 | 
				
			||||||
      const { content, bindings } = compile(
 | 
					      const { content, bindings } = compile(
 | 
				
			||||||
        `<script setup lang="ts">
 | 
					        `<script setup lang="ts">
 | 
				
			||||||
 | 
				
			|||||||
@ -834,7 +834,8 @@ export function compileScript(
 | 
				
			|||||||
      } else if (
 | 
					      } else if (
 | 
				
			||||||
        (node.type === 'VariableDeclaration' ||
 | 
					        (node.type === 'VariableDeclaration' ||
 | 
				
			||||||
          node.type === 'FunctionDeclaration' ||
 | 
					          node.type === 'FunctionDeclaration' ||
 | 
				
			||||||
          node.type === 'ClassDeclaration') &&
 | 
					          node.type === 'ClassDeclaration' ||
 | 
				
			||||||
 | 
					          node.type === 'TSEnumDeclaration') &&
 | 
				
			||||||
        !node.declare
 | 
					        !node.declare
 | 
				
			||||||
      ) {
 | 
					      ) {
 | 
				
			||||||
        walkDeclaration(node, scriptBindings, userImportAlias)
 | 
					        walkDeclaration(node, scriptBindings, userImportAlias)
 | 
				
			||||||
@ -1504,6 +1505,7 @@ function walkDeclaration(
 | 
				
			|||||||
      }
 | 
					      }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  } else if (
 | 
					  } else if (
 | 
				
			||||||
 | 
					    node.type === 'TSEnumDeclaration' ||
 | 
				
			||||||
    node.type === 'FunctionDeclaration' ||
 | 
					    node.type === 'FunctionDeclaration' ||
 | 
				
			||||||
    node.type === 'ClassDeclaration'
 | 
					    node.type === 'ClassDeclaration'
 | 
				
			||||||
  ) {
 | 
					  ) {
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user