Skip to content

Commit 9f75ed5

Browse files
committed
same for ts-plugin (major version bump)
1 parent 72e815b commit 9f75ed5

File tree

4 files changed

+32
-34
lines changed

4 files changed

+32
-34
lines changed

packages/typescript-plugin/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "typescript-svelte-plugin",
3-
"version": "0.2.0",
3+
"version": "0.3.0",
44
"description": "A TypeScript Plugin providing Svelte intellisense",
55
"main": "dist/src/index.js",
66
"scripts": {

packages/typescript-plugin/src/module-loader.ts

Lines changed: 22 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -3,30 +3,7 @@ import { ConfigManager } from './config-manager';
33
import { Logger } from './logger';
44
import { SvelteSnapshotManager } from './svelte-snapshots';
55
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';
307

318
/**
329
* Caches resolved modules.
@@ -161,12 +138,22 @@ export function patchModuleLoader(
161138

162139
return resolved.map((tsResolvedModule, idx) => {
163140
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+
) {
165147
return tsResolvedModule;
166148
}
167149

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;
170157
});
171158
}
172159

@@ -238,14 +225,19 @@ export function patchModuleLoader(
238225

239226
return resolved.map((tsResolvedModule, idx) => {
240227
const moduleName = moduleLiterals[idx].text;
228+
241229
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')
244234
) {
245235
return tsResolvedModule;
246236
}
247237

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;
249241
});
250242
}
251243

packages/typescript-plugin/src/svelte-sys.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ export function createSvelteSys(ts: _ts, logger: Logger) {
3030
const realpath = ts.sys.realpath;
3131
svelteSys.realpath = function (path) {
3232
if (isVirtualSvelteFilePath(path)) {
33-
return realpath(toRealSvelteFilePath(path)) + '.ts';
33+
return realpath(toRealSvelteFilePath(path));
3434
}
3535
return realpath(path);
3636
};

packages/typescript-plugin/src/utils.ts

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,17 @@ export function isSvelteFilePath(filePath: string) {
88
}
99

1010
export function isVirtualSvelteFilePath(filePath: string) {
11-
return filePath.endsWith('.svelte.ts');
11+
return filePath.endsWith('.d.svelte.ts');
1212
}
1313

1414
export function toRealSvelteFilePath(filePath: string) {
15-
return filePath.slice(0, -'.ts'.length);
15+
return filePath.slice(0, -11 /* 'd.svelte.ts'.length */) + 'svelte';
16+
}
17+
18+
export function toVirtualSvelteFilePath(svelteFilePath: string) {
19+
return isVirtualSvelteFilePath(svelteFilePath)
20+
? svelteFilePath
21+
: svelteFilePath.slice(0, -6 /* 'svelte'.length */) + 'd.svelte.ts';
1622
}
1723

1824
export function ensureRealSvelteFilePath(filePath: string) {

0 commit comments

Comments
 (0)