diff --git a/packages/svelte2tsx/src/emitDts.ts b/packages/svelte2tsx/src/emitDts.ts index 3740a66c3..fb312a36d 100644 --- a/packages/svelte2tsx/src/emitDts.ts +++ b/packages/svelte2tsx/src/emitDts.ts @@ -277,7 +277,7 @@ interface SvelteMap { * those transformed source later on. */ async function createSvelteMap(config: EmitDtsConfig): Promise { - const svelteFiles = new Map(); + const svelteFiles = new Map(); // TODO detect Svelte version in here and set shimsPath accordingly if not given from above const noSvelteComponentTyped = config.svelteShimsPath @@ -286,6 +286,12 @@ async function createSvelteMap(config: EmitDtsConfig): Promise { const version = noSvelteComponentTyped ? undefined : '3.42.0'; function add(path: string): boolean { + const normalizedPath = path.replace(/\\/g, '/'); + + if (svelteFiles.has(normalizedPath)) { + return svelteFiles.get(normalizedPath)!.isTsFile; + } + const code = ts.sys.readFile(path, 'utf-8'); const isTsFile = /]*?lang=('|")(ts|typescript)('|")/.test(code); const transformed = svelte2tsx(code, { @@ -295,13 +301,13 @@ async function createSvelteMap(config: EmitDtsConfig): Promise { version, noSvelteComponentTyped: noSvelteComponentTyped }).code; - svelteFiles.set(path.replace(/\\/g, '/'), transformed); + svelteFiles.set(normalizedPath, { transformed, isTsFile }); return isTsFile; } return { add, - get: (key: string) => svelteFiles.get(key.replace(/\\/g, '/')) + get: (key: string) => svelteFiles.get(key.replace(/\\/g, '/'))?.transformed }; }