Skip to content

Commit ca668e2

Browse files
authored
perf: cache files during emitDts (#2701)
closes #2691
1 parent e284968 commit ca668e2

File tree

1 file changed

+9
-3
lines changed

1 file changed

+9
-3
lines changed

packages/svelte2tsx/src/emitDts.ts

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -277,7 +277,7 @@ interface SvelteMap {
277277
* those transformed source later on.
278278
*/
279279
async function createSvelteMap(config: EmitDtsConfig): Promise<SvelteMap> {
280-
const svelteFiles = new Map();
280+
const svelteFiles = new Map<string, { transformed: string; isTsFile: boolean }>();
281281

282282
// TODO detect Svelte version in here and set shimsPath accordingly if not given from above
283283
const noSvelteComponentTyped = config.svelteShimsPath
@@ -286,6 +286,12 @@ async function createSvelteMap(config: EmitDtsConfig): Promise<SvelteMap> {
286286
const version = noSvelteComponentTyped ? undefined : '3.42.0';
287287

288288
function add(path: string): boolean {
289+
const normalizedPath = path.replace(/\\/g, '/');
290+
291+
if (svelteFiles.has(normalizedPath)) {
292+
return svelteFiles.get(normalizedPath)!.isTsFile;
293+
}
294+
289295
const code = ts.sys.readFile(path, 'utf-8');
290296
const isTsFile = /<script\s+[^>]*?lang=('|")(ts|typescript)('|")/.test(code);
291297
const transformed = svelte2tsx(code, {
@@ -295,13 +301,13 @@ async function createSvelteMap(config: EmitDtsConfig): Promise<SvelteMap> {
295301
version,
296302
noSvelteComponentTyped: noSvelteComponentTyped
297303
}).code;
298-
svelteFiles.set(path.replace(/\\/g, '/'), transformed);
304+
svelteFiles.set(normalizedPath, { transformed, isTsFile });
299305
return isTsFile;
300306
}
301307

302308
return {
303309
add,
304-
get: (key: string) => svelteFiles.get(key.replace(/\\/g, '/'))
310+
get: (key: string) => svelteFiles.get(key.replace(/\\/g, '/'))?.transformed
305311
};
306312
}
307313

0 commit comments

Comments
 (0)