})"
`;
+exports[`SFC compile <script setup> with TypeScript runtime Enum 1`] = `
+"import { defineComponent as _defineComponent } from 'vue'
+enum Foo { A = 123 }
+
+export default _defineComponent({
+ setup(__props, { expose }) {
+ expose()
+
+
+return { Foo }
+}
+
+})"
+`;
+
exports[`SFC compile <script setup> with TypeScript withDefaults (dynamic) 1`] = `
"import { mergeDefaults as _mergeDefaults, defineComponent as _defineComponent } from 'vue'
import { defaults } from './foo'
expect(content).toMatch(`emit: ((e: 'foo' | 'bar') => void),`)
expect(content).toMatch(`emits: ["foo", "bar"] as unknown as undefined`)
})
+
+ test('runtime Enum', () => {
+ const { content, bindings } = compile(
+ `<script setup lang="ts">
+ enum Foo { A = 123 }
+ </script>`
+ )
+ assertCode(content)
+ expect(bindings).toStrictEqual({
+ Foo: BindingTypes.SETUP_CONST
+ })
+ })
})
describe('async/await detection', () => {
walkDeclaration(node, setupBindings, userImportAlias)
}
- // Type declarations
- if (node.type === 'VariableDeclaration' && node.declare) {
- s.remove(start, end)
- }
-
- // move all type declarations to outer scope
- if (
- node.type.startsWith('TS') ||
- (node.type === 'ExportNamedDeclaration' && node.exportKind === 'type')
- ) {
- recordType(node, declaredTypes)
- s.move(start, end, 0)
- }
-
// walk statements & named exports / variable declarations for top level
// await
if (
node
)
}
+
+ if (isTS) {
+ // runtime enum
+ if (node.type === 'TSEnumDeclaration' && !node.const) {
+ registerBinding(setupBindings, node.id, BindingTypes.SETUP_CONST)
+ }
+
+ // move all Type declarations to outer scope
+ if (
+ node.type.startsWith('TS') ||
+ (node.type === 'ExportNamedDeclaration' &&
+ node.exportKind === 'type') ||
+ (node.type === 'VariableDeclaration' && node.declare)
+ ) {
+ recordType(node, declaredTypes)
+ s.move(start, end, 0)
+ }
+ }
}
// in parse only mode, we should have collected all the information we need,