Skip to content

Commit dc64b7f

Browse files
committed
fix(macros): prevent return defineComponent for generic component
1 parent 9769f27 commit dc64b7f

File tree

1 file changed

+19
-18
lines changed

1 file changed

+19
-18
lines changed

packages/macros/src/volar/define-component.ts

Lines changed: 19 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,9 @@ export function transformDefineComponent(
88
): void {
99
const { codes, ast, ts } = options
1010

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)
1214

1315
codes.replaceRange(
1416
node.getStart(ast),
@@ -18,27 +20,26 @@ export function transformDefineComponent(
1820
const __setup = `,
1921
)
2022

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+
`({
2830
__typeProps: {} as Parameters<typeof __setup>[0],
29-
setup:() => {},
3031
...{} as Parameters<typeof __setup>[1] extends { slots?: infer S, expose?: infer E } | undefined ? {
3132
setup: E extends (exposed: infer Exposed) => any ? () => Exposed : never,
3233
slots: S extends Record<string, any> ? import('vue').SlotsType<S> : never
3334
} : {},`,
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+
})`,
3843
] as Code[])
39-
: []),
40-
`
41-
})
42-
})()`,
43-
)
44+
codes.replaceRange(node.end, node.end, '\n return ', ...result, `\n})()`)
4445
}

0 commit comments

Comments
 (0)