diff --git a/packages/vue-code-gen/src/generators/script.ts b/packages/vue-code-gen/src/generators/script.ts index f756a96da..9680d6b2b 100644 --- a/packages/vue-code-gen/src/generators/script.ts +++ b/packages/vue-code-gen/src/generators/script.ts @@ -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 `); @@ -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, @@ -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`); @@ -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, @@ -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() { diff --git a/packages/vue-code-gen/src/parsers/scriptSetupRanges.ts b/packages/vue-code-gen/src/parsers/scriptSetupRanges.ts index 34b6a88da..b108f3c82 100644 --- a/packages/vue-code-gen/src/parsers/scriptSetupRanges.ts +++ b/packages/vue-code-gen/src/parsers/scriptSetupRanges.ts @@ -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); @@ -48,6 +49,7 @@ export function parseScriptSetupRanges(ts: typeof import('typescript/lib/tsserve emitsTypeArg, emitsTypeNums, exposeRuntimeArg, + exposeTypeArg, }; function _getStartEnd(node: ts.Node) { @@ -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); @@ -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') {