@@ -3,30 +3,7 @@ import { ConfigManager } from './config-manager';
3
3
import { Logger } from './logger' ;
4
4
import { SvelteSnapshotManager } from './svelte-snapshots' ;
5
5
import { createSvelteSys } from './svelte-sys' ;
6
- import { ensureRealSvelteFilePath , isVirtualSvelteFilePath } from './utils' ;
7
-
8
- // TODO remove when we update to typescript 5.0
9
- declare module 'typescript/lib/tsserverlibrary' {
10
- interface LanguageServiceHost {
11
- /** @deprecated supply resolveModuleNameLiterals instead for resolution that can handle newer resolution modes like nodenext */
12
- resolveModuleNames ?(
13
- moduleNames : string [ ] ,
14
- containingFile : string ,
15
- reusedNames : string [ ] | undefined ,
16
- redirectedReference : ts . ResolvedProjectReference | undefined ,
17
- options : ts . CompilerOptions ,
18
- containingSourceFile ?: ts . SourceFile
19
- ) : ( ts . ResolvedModule | undefined ) [ ] ;
20
- resolveModuleNameLiterals ?(
21
- moduleLiterals : readonly ts . StringLiteralLike [ ] ,
22
- containingFile : string ,
23
- redirectedReference : ts . ResolvedProjectReference | undefined ,
24
- options : ts . CompilerOptions ,
25
- containingSourceFile : ts . SourceFile ,
26
- reusedNames : readonly ts . StringLiteralLike [ ] | undefined
27
- ) : readonly ts . ResolvedModuleWithFailedLookupLocations [ ] ;
28
- }
29
- }
6
+ import { ensureRealSvelteFilePath , isSvelteFilePath , isVirtualSvelteFilePath } from './utils' ;
30
7
31
8
/**
32
9
* Caches resolved modules.
@@ -161,12 +138,22 @@ export function patchModuleLoader(
161
138
162
139
return resolved . map ( ( tsResolvedModule , idx ) => {
163
140
const moduleName = moduleNames [ idx ] ;
164
- if ( tsResolvedModule || ! ensureRealSvelteFilePath ( moduleName ) . endsWith ( '.svelte' ) ) {
141
+ if (
142
+ ! isSvelteFilePath ( moduleName ) ||
143
+ // corresponding .d.ts files take precedence over .svelte files
144
+ tsResolvedModule ?. resolvedFileName . endsWith ( '.d.ts' ) ||
145
+ tsResolvedModule ?. resolvedFileName . endsWith ( '.d.svelte.ts' )
146
+ ) {
165
147
return tsResolvedModule ;
166
148
}
167
149
168
- return resolveSvelteModuleNameFromCache ( moduleName , containingFile , compilerOptions )
169
- . resolvedModule ;
150
+ const result = resolveSvelteModuleNameFromCache (
151
+ moduleName ,
152
+ containingFile ,
153
+ compilerOptions
154
+ ) . resolvedModule ;
155
+ // .svelte takes precedence over .svelte.ts etc
156
+ return result ?? tsResolvedModule ;
170
157
} ) ;
171
158
}
172
159
@@ -238,14 +225,19 @@ export function patchModuleLoader(
238
225
239
226
return resolved . map ( ( tsResolvedModule , idx ) => {
240
227
const moduleName = moduleLiterals [ idx ] . text ;
228
+
241
229
if (
242
- tsResolvedModule . resolvedModule ||
243
- ! ensureRealSvelteFilePath ( moduleName ) . endsWith ( '.svelte' )
230
+ ! isSvelteFilePath ( moduleName ) ||
231
+ // corresponding .d.ts files take precedence over .svelte files
232
+ tsResolvedModule ?. resolvedModule ?. resolvedFileName . endsWith ( '.d.ts' ) ||
233
+ tsResolvedModule ?. resolvedModule ?. resolvedFileName . endsWith ( '.d.svelte.ts' )
244
234
) {
245
235
return tsResolvedModule ;
246
236
}
247
237
248
- return resolveSvelteModuleNameFromCache ( moduleName , containingFile , options ) ;
238
+ const result = resolveSvelteModuleNameFromCache ( moduleName , containingFile , options ) ;
239
+ // .svelte takes precedence over .svelte.ts etc
240
+ return result ?? tsResolvedModule ;
249
241
} ) ;
250
242
}
251
243
0 commit comments