@@ -10,7 +10,6 @@ import { endOfLine, generateSfcBlockSection, newLine } from '../utils';
1010import { endBoundary , startBoundary } from '../utils/boundary' ;
1111import { createScriptCodegenContext , type ScriptCodegenContext } from './context' ;
1212import { generateGeneric , generateScriptSetupImports , generateSetupFunction } from './scriptSetup' ;
13- import { generateSrc } from './src' ;
1413import { generateTemplate } from './template' ;
1514
1615const exportExpression = `{} as typeof ${ names . _export } ` ;
@@ -41,19 +40,39 @@ function* generateWorker(
4140 options : ScriptCodegenOptions ,
4241 ctx : ScriptCodegenContext ,
4342) : Generator < Code > {
44- yield * generateGlobalTypesReference ( options ) ;
43+ const { script , scriptRanges , scriptSetup , scriptSetupRanges , vueCompilerOptions , fileName } = options ;
4544
46- const { script , scriptRanges , scriptSetup , scriptSetupRanges , vueCompilerOptions } = options ;
45+ yield * generateGlobalTypesReference ( vueCompilerOptions , fileName ) ;
4746
48- if ( scriptSetup && scriptSetupRanges ) {
49- yield * generateScriptSetupImports ( scriptSetup , scriptSetupRanges ) ;
50- }
51- if ( script ?. src ) {
52- yield * generateSrc ( script . src ) ;
53- }
47+ // <script src="">
48+ if ( typeof script ?. src === 'object' ) {
49+ let src = script . src . text ;
50+ if ( src . endsWith ( '.ts' ) && ! src . endsWith ( '.d.ts' ) ) {
51+ src = src . slice ( 0 , - '.ts' . length ) + '.js' ;
52+ }
53+ else if ( src . endsWith ( '.tsx' ) ) {
54+ src = src . slice ( 0 , - '.tsx' . length ) + '.jsx' ;
55+ }
56+
57+ yield `import __VLS_default from ` ;
58+ const token = yield * startBoundary ( 'main' , script . src . offset , {
59+ ...codeFeatures . all ,
60+ ...src !== script . src . text ? codeFeatures . navigationWithoutRename : { } ,
61+ } ) ;
62+ yield `'` ;
63+ yield [ src . slice ( 0 , script . src . text . length ) , 'main' , script . src . offset , { __combineToken : token } ] ;
64+ yield src . slice ( script . src . text . length ) ;
65+ yield `'` ;
66+ yield endBoundary ( token , script . src . offset + script . src . text . length ) ;
67+ yield endOfLine ;
68+ yield `export default __VLS_default;${ endOfLine } ` ;
5469
70+ yield * generateTemplate ( options , ctx , '__VLS_default' ) ;
71+ }
5572 // <script> + <script setup>
56- if ( script && scriptRanges && scriptSetup && scriptSetupRanges ) {
73+ else if ( script && scriptRanges && scriptSetup && scriptSetupRanges ) {
74+ yield * generateScriptSetupImports ( scriptSetup , scriptSetupRanges ) ;
75+
5776 // <script>
5877 let selfType : string | undefined ;
5978 const { exportDefault } = scriptRanges ;
@@ -105,6 +124,8 @@ function* generateWorker(
105124 }
106125 // only <script setup>
107126 else if ( scriptSetup && scriptSetupRanges ) {
127+ yield * generateScriptSetupImports ( scriptSetup , scriptSetupRanges ) ;
128+
108129 if ( scriptSetup . generic ) {
109130 yield * generateExportDeclareEqual ( scriptSetup , names . _export ) ;
110131 yield * generateGeneric (
@@ -217,13 +238,13 @@ function* generateScriptWithExportDefault(
217238 yield * generateSfcBlockSection ( script , exportDefault . end , script . content . length , codeFeatures . all ) ;
218239}
219240
220- function * generateGlobalTypesReference ( options : ScriptCodegenOptions ) : Generator < Code > {
221- const globalTypesPath = options . vueCompilerOptions . globalTypesPath ( options . fileName ) ;
241+ function * generateGlobalTypesReference ( vueCompilerOptions : VueCompilerOptions , fileName : string ) : Generator < Code > {
242+ const globalTypesPath = vueCompilerOptions . globalTypesPath ( fileName ) ;
222243 if ( ! globalTypesPath ) {
223244 yield `/* placeholder */${ newLine } ` ;
224245 }
225246 else if ( path . isAbsolute ( globalTypesPath ) ) {
226- let relativePath = path . relative ( path . dirname ( options . fileName ) , globalTypesPath ) ;
247+ let relativePath = path . relative ( path . dirname ( fileName ) , globalTypesPath ) ;
227248 if (
228249 relativePath !== globalTypesPath
229250 && ! relativePath . startsWith ( './' )
0 commit comments