@@ -8,7 +8,9 @@ export function transformDefineComponent(
8
8
) : void {
9
9
const { codes, ast, ts } = options
10
10
11
- codes . replaceRange ( node . arguments [ 0 ] . end , node . end - 1 )
11
+ const [ comp , compOptions ] = node . arguments
12
+
13
+ codes . replaceRange ( comp . end , node . end - 1 )
12
14
13
15
codes . replaceRange (
14
16
node . getStart ( ast ) ,
@@ -18,27 +20,26 @@ export function transformDefineComponent(
18
20
const __setup = ` ,
19
21
)
20
22
21
- const compOptions = node . arguments [ 1 ]
22
- codes . replaceRange (
23
- node . end ,
24
- node . end ,
25
- '\n return ' ,
26
- [ node . expression . getText ( ast ) , node . expression . getStart ( ast ) ] ,
27
- `({
23
+ const result =
24
+ ( ts . isArrowFunction ( comp ) || ts . isFunctionExpression ( comp ) ) &&
25
+ comp . typeParameters ?. length
26
+ ? [ '__setup' ]
27
+ : ( [
28
+ [ node . expression . getText ( ast ) , node . expression . getStart ( ast ) ] ,
29
+ `({
28
30
__typeProps: {} as Parameters<typeof __setup>[0],
29
- setup:() => {},
30
31
...{} as Parameters<typeof __setup>[1] extends { slots?: infer S, expose?: infer E } | undefined ? {
31
32
setup: E extends (exposed: infer Exposed) => any ? () => Exposed : never,
32
33
slots: S extends Record<string, any> ? import('vue').SlotsType<S> : never
33
34
} : {},` ,
34
- ...( compOptions
35
- ? ( [
36
- '\n ...' ,
37
- [ compOptions . getText ( ast ) , compOptions . getStart ( ast ) ] ,
35
+ ...( compOptions
36
+ ? [
37
+ '\n ...' ,
38
+ [ compOptions . getText ( ast ) , compOptions . getStart ( ast ) ] ,
39
+ ]
40
+ : [ ] ) ,
41
+ `
42
+ })` ,
38
43
] as Code [ ] )
39
- : [ ] ) ,
40
- `
41
- })
42
- })()` ,
43
- )
44
+ codes . replaceRange ( node . end , node . end , '\n return ' , ...result , `\n})()` )
44
45
}
0 commit comments