Skip to content

Commit 68edc1d

Browse files
committed
feat(language-core): use internal options for directly exposing user prop types
Refs vuejs/core#10801
1 parent ccc428c commit 68edc1d

File tree

2 files changed

+42
-13
lines changed

2 files changed

+42
-13
lines changed

packages/language-core/lib/codegen/script/component.ts

+5
Original file line numberDiff line numberDiff line change
@@ -112,4 +112,9 @@ export function* generateScriptSetupOptions(
112112
}
113113
yield `>),${newLine}`;
114114
}
115+
116+
// https://github.com/vuejs/core/pull/10801
117+
if (scriptSetupRanges.props.define?.typeArg) {
118+
yield `__typeProps: typeof __VLS_typeProps,${newLine}`;
119+
}
115120
}

packages/language-core/lib/codegen/script/scriptSetup.ts

+37-13
Original file line numberDiff line numberDiff line change
@@ -122,20 +122,44 @@ function* generateSetupFunction(
122122
ctx.scriptSetupGeneratedOffset = options.getGeneratedLength() - scriptSetupRanges.importSectionEndOffset;
123123

124124
let setupCodeModifies: [Code[], number, number][] = [];
125-
if (scriptSetupRanges.props.define && !scriptSetupRanges.props.name) {
126-
const range = scriptSetupRanges.props.withDefaults ?? scriptSetupRanges.props.define;
125+
const propsRange = scriptSetupRanges.props.withDefaults ?? scriptSetupRanges.props.define;
126+
if (propsRange && scriptSetupRanges.props.define) {
127127
const statement = scriptSetupRanges.props.define.statement;
128-
if (statement.start === range.start && statement.end === range.end) {
129-
setupCodeModifies.push([[`const __VLS_props = `], range.start, range.start]);
130-
}
131-
else {
128+
if (scriptSetupRanges.props.define.typeArg) {
132129
setupCodeModifies.push([[
133-
`const __VLS_props = `,
134-
generateSfcBlockSection(scriptSetup, range.start, range.end, codeFeatures.all),
135-
`${endOfLine}`,
136-
generateSfcBlockSection(scriptSetup, statement.start, range.start, codeFeatures.all),
137-
`__VLS_props`,
138-
], statement.start, range.end]);
130+
`let __VLS_typeProps!: `,
131+
generateSfcBlockSection(scriptSetup, scriptSetupRanges.props.define.typeArg.start, scriptSetupRanges.props.define.typeArg.end, codeFeatures.all),
132+
endOfLine,
133+
], statement.start, statement.start]);
134+
setupCodeModifies.push([[`typeof __VLS_typeProps`], scriptSetupRanges.props.define.typeArg.start, scriptSetupRanges.props.define.typeArg.end]);
135+
}
136+
if (!scriptSetupRanges.props.name) {
137+
if (statement.start === propsRange.start && statement.end === propsRange.end) {
138+
setupCodeModifies.push([[`const __VLS_props = `], propsRange.start, propsRange.start]);
139+
}
140+
else {
141+
if (scriptSetupRanges.props.define.typeArg) {
142+
setupCodeModifies.push([[
143+
`const __VLS_props = `,
144+
generateSfcBlockSection(scriptSetup, propsRange.start, scriptSetupRanges.props.define.typeArg.start, codeFeatures.all),
145+
], statement.start, scriptSetupRanges.props.define.typeArg.start]);
146+
setupCodeModifies.push([[
147+
generateSfcBlockSection(scriptSetup, scriptSetupRanges.props.define.typeArg.end, propsRange.end, codeFeatures.all),
148+
`${endOfLine}`,
149+
generateSfcBlockSection(scriptSetup, statement.start, propsRange.start, codeFeatures.all),
150+
`__VLS_props`,
151+
], scriptSetupRanges.props.define.typeArg.end, propsRange.end]);
152+
}
153+
else {
154+
setupCodeModifies.push([[
155+
`const __VLS_props = `,
156+
generateSfcBlockSection(scriptSetup, propsRange.start, propsRange.end, codeFeatures.all),
157+
`${endOfLine}`,
158+
generateSfcBlockSection(scriptSetup, statement.start, propsRange.start, codeFeatures.all),
159+
`__VLS_props`,
160+
], statement.start, propsRange.end]);
161+
}
162+
}
139163
}
140164
}
141165
if (scriptSetupRanges.slots.define && !scriptSetupRanges.slots.name) {
@@ -338,7 +362,7 @@ function* generateComponentProps(
338362
yield ` & `;
339363
}
340364
ctx.generatedPropsType = true;
341-
yield generateSfcBlockSection(scriptSetup, scriptSetupRanges.props.define.typeArg.start, scriptSetupRanges.props.define.typeArg.end, codeFeatures.all);
365+
yield `typeof __VLS_typeProps`;
342366
}
343367
if (!ctx.generatedPropsType) {
344368
yield `{}`;

0 commit comments

Comments
 (0)