@@ -52,6 +52,8 @@ export function createLanguage(
52
52
vueCompilerOptions ,
53
53
codegenStack ,
54
54
) ;
55
+ patchResolveModuleNames ( ts , vueCompilerOptions ) ;
56
+
55
57
const sharedTypesSnapshot = ts . ScriptSnapshot . fromString ( sharedTypes . getTypesCode ( vueCompilerOptions ) ) ;
56
58
const languageModule : Language = {
57
59
createVirtualFile ( fileName , snapshot , languageId ) {
@@ -108,7 +110,7 @@ export function createLanguage(
108
110
) {
109
111
return moduleLiterals . map ( ( moduleLiteral ) => {
110
112
let moduleName = moduleLiteral . text ;
111
- if ( sourceFile . impliedNodeFormat === ts . ModuleKind . ESNext && moduleName . endsWith ( '.vue' ) ) {
113
+ if ( sourceFile . impliedNodeFormat === ts . ModuleKind . ESNext && vueCompilerOptions . extensions . some ( ext => moduleName . endsWith ( ext ) ) ) {
112
114
moduleName = `${ moduleName } .js` ;
113
115
}
114
116
return ts . resolveModuleName (
@@ -146,3 +148,25 @@ export function createLanguages(
146
148
...vueCompilerOptions . experimentalAdditionalLanguageModules ?. map ( module => require ( module ) ) ?? [ ] ,
147
149
] ;
148
150
}
151
+
152
+ function patchResolveModuleNames (
153
+ ts : typeof import ( 'typescript/lib/tsserverlibrary' ) ,
154
+ vueCompilerOptions : VueCompilerOptions ,
155
+ ) {
156
+ try {
157
+ // from https://github.com/vuejs/language-tools/pull/1543
158
+ if ( ! ( ( ts as any ) . __vuePatchResolveModuleNames ) ) {
159
+ ( ts as any ) . __vuePatchResolveModuleNames = true ;
160
+ const resolveModuleNames = ts . resolveModuleName ;
161
+ ts . resolveModuleName = ( ...args ) => {
162
+ if ( args [ 6 ] === ts . ModuleKind . ESNext && vueCompilerOptions . extensions . some ( ext => args [ 0 ] . endsWith ( ext ) ) ) {
163
+ args [ 6 ] = ts . ModuleKind . CommonJS ;
164
+ }
165
+ return resolveModuleNames ( ...args ) ;
166
+ } ;
167
+ }
168
+ }
169
+ catch ( e ) {
170
+ // console.warn('[volar] patchResolveModuleNames failed', e);
171
+ }
172
+ }
0 commit comments