Skip to content

Commit

Permalink
fix: setup() return type inaccurate with type defineExpose type arg
Browse files Browse the repository at this point in the history
close #1165
  • Loading branch information
johnsoncodehk committed Apr 11, 2022
1 parent 31e6a2b commit 5a3b4e2
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 81 deletions.
100 changes: 20 additions & 80 deletions packages/vue-code-gen/src/generators/script.ts
Expand Up @@ -271,10 +271,7 @@ export function generate(
if (scriptSetup && scriptSetupRanges) {
if (scriptSetupRanges.propsRuntimeArg || scriptSetupRanges.propsTypeArg) {
codeGen.addText(`props: (`);
if (scriptSetupRanges.propsRuntimeArg) {
addExtraReferenceVirtualCode('scriptSetup', scriptSetupRanges.propsRuntimeArg.start, scriptSetupRanges.propsRuntimeArg.end);
}
else if (scriptSetupRanges.propsTypeArg) {
if (scriptSetupRanges.propsTypeArg) {

usedTypes.DefinePropsToOptions = true;
codeGen.addText(`{} as `);
Expand All @@ -293,19 +290,22 @@ export function generate(
codeGen.addText(`>`);
}
}
else if (scriptSetupRanges.propsRuntimeArg) {
addExtraReferenceVirtualCode('scriptSetup', scriptSetupRanges.propsRuntimeArg.start, scriptSetupRanges.propsRuntimeArg.end);
}
codeGen.addText(`),\n`);
}
if (scriptSetupRanges.emitsRuntimeArg) {
codeGen.addText(`emits: (`);
addExtraReferenceVirtualCode('scriptSetup', scriptSetupRanges.emitsRuntimeArg.start, scriptSetupRanges.emitsRuntimeArg.end);
codeGen.addText(`),\n`);
}
else if (scriptSetupRanges.emitsTypeArg) {
if (scriptSetupRanges.emitsTypeArg) {
usedTypes.ConstructorOverloads = true;
codeGen.addText(`emits: ({} as __VLS_UnionToIntersection<__VLS_ConstructorOverloads<`);
addExtraReferenceVirtualCode('scriptSetup', scriptSetupRanges.emitsTypeArg.start, scriptSetupRanges.emitsTypeArg.end);
codeGen.addText(`>>),\n`);
}
else if (scriptSetupRanges.emitsRuntimeArg) {
codeGen.addText(`emits: (`);
addExtraReferenceVirtualCode('scriptSetup', scriptSetupRanges.emitsRuntimeArg.start, scriptSetupRanges.emitsRuntimeArg.end);
codeGen.addText(`),\n`);
}
const bindingsArr: {
bindings: { start: number, end: number }[],
content: string,
Expand Down Expand Up @@ -337,7 +337,13 @@ export function generate(
writeTemplate();
codeGen.addText(`};\n`);

if (scriptSetupRanges.exposeRuntimeArg) {
console.log(scriptSetupRanges.exposeTypeArg);
if (scriptSetupRanges.exposeTypeArg) {
codeGen.addText(`return { } as `);
addExtraReferenceVirtualCode('scriptSetup', scriptSetupRanges.exposeTypeArg.start, scriptSetupRanges.exposeTypeArg.end);
codeGen.addText(`;\n`);
}
else if (scriptSetupRanges.exposeRuntimeArg) {
codeGen.addText(`return `);
addExtraReferenceVirtualCode('scriptSetup', scriptSetupRanges.exposeRuntimeArg.start, scriptSetupRanges.exposeRuntimeArg.end);
codeGen.addText(`;\n`);
Expand Down Expand Up @@ -389,11 +395,10 @@ export function generate(
codeGen.addText(`})();\n`);
}
function writeExportOptions() {
codeGen.addText(`\n`);
codeGen.addText(`export const __VLS_options = {\n`);
if (script && scriptRanges?.exportDefault?.args) {
codeGen.addText(`\n`);
codeGen.addText(`export const __VLS_options = `);
const args = scriptRanges.exportDefault.args;
codeGen.addText(`...(`);
codeGen.addCode(
script.content.substring(args.start, args.end),
args,
Expand All @@ -406,73 +411,8 @@ export function generate(
},
},
);
codeGen.addText(`),\n`);
}
if (scriptSetupRanges?.propsRuntimeArg && scriptSetup) {
codeGen.addText(`props: (`);
codeGen.addCode(
scriptSetup.content.substring(scriptSetupRanges.propsRuntimeArg.start, scriptSetupRanges.propsRuntimeArg.end),
scriptSetupRanges.propsRuntimeArg,
SourceMaps.Mode.Offset,
{
vueTag: 'scriptSetup',
capabilities: {
references: true,
definitions: true,
rename: true,
},
},
);
codeGen.addText(`),\n`);
}
if (scriptSetupRanges?.propsTypeArg && scriptSetup) {
codeGen.addText(`props: ({} as `);
codeGen.addCode(
scriptSetup.content.substring(scriptSetupRanges.propsTypeArg.start, scriptSetupRanges.propsTypeArg.end),
scriptSetupRanges.propsTypeArg,
SourceMaps.Mode.Offset,
{
vueTag: 'scriptSetup',
capabilities: {
references: true,
definitions: true,
rename: true,
},
},
);
codeGen.addText(`),\n`);
}
if (scriptSetupRanges?.emitsRuntimeArg && scriptSetup) {
codeGen.addText(`emits: (`);
codeGen.addCode(
scriptSetup.content.substring(scriptSetupRanges.emitsRuntimeArg.start, scriptSetupRanges.emitsRuntimeArg.end),
scriptSetupRanges.emitsRuntimeArg,
SourceMaps.Mode.Offset,
{
vueTag: 'scriptSetup',
capabilities: {
references: true,
definitions: true,
rename: true,
},
},
);
codeGen.addText(`),\n`);
}
if (scriptSetupRanges?.emitsTypeArg && scriptSetup) {
codeGen.addText(`emits: ({} as `);
codeGen.addCode(
scriptSetup.content.substring(scriptSetupRanges.emitsTypeArg.start, scriptSetupRanges.emitsTypeArg.end),
scriptSetupRanges.emitsTypeArg,
SourceMaps.Mode.Offset,
{
vueTag: 'scriptSetup',
capabilities: {},
},
);
codeGen.addText(`),\n`);
codeGen.addText(`;\n`);
}
codeGen.addText(`};\n`);
}
function writeExportTypes() {

Expand Down
7 changes: 6 additions & 1 deletion packages/vue-code-gen/src/parsers/scriptSetupRanges.ts
Expand Up @@ -14,6 +14,7 @@ export function parseScriptSetupRanges(ts: typeof import('typescript/lib/tsserve
let emitsRuntimeArg: TextRange | undefined;
let emitsTypeArg: TextRange | undefined;
let exposeRuntimeArg: TextRange | undefined;
let exposeTypeArg: TextRange | undefined;
let emitsTypeNums = -1;

const bindings = parseBindingRanges(ts, ast, false);
Expand Down Expand Up @@ -48,6 +49,7 @@ export function parseScriptSetupRanges(ts: typeof import('typescript/lib/tsserve
emitsTypeArg,
emitsTypeNums,
exposeRuntimeArg,
exposeTypeArg,
};

function _getStartEnd(node: ts.Node) {
Expand All @@ -72,7 +74,7 @@ export function parseScriptSetupRanges(ts: typeof import('typescript/lib/tsserve
exposeRuntimeArg = _getStartEnd(runtimeArg);
}
}
else if (node.typeArguments?.length) {
if (node.typeArguments?.length) {
const typeArg = node.typeArguments[0];
if (callText === 'defineProps') {
propsTypeArg = _getStartEnd(typeArg);
Expand All @@ -83,6 +85,9 @@ export function parseScriptSetupRanges(ts: typeof import('typescript/lib/tsserve
emitsTypeNums = typeArg.members.length;
}
}
else if (callText === 'defineExpose') {
exposeTypeArg = _getStartEnd(typeArg);
}
}
}
else if (callText === 'withDefaults') {
Expand Down

0 comments on commit 5a3b4e2

Please sign in to comment.