From d5f199adafa82d0e891ea7acaec039b6a85d1126 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Sat, 11 Apr 2026 12:56:32 +0100 Subject: [PATCH] perf: cache parsed guard sources --- scripts/lib/guard-inventory-utils.mjs | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/scripts/lib/guard-inventory-utils.mjs b/scripts/lib/guard-inventory-utils.mjs index 9be27412bdf..0a732002502 100644 --- a/scripts/lib/guard-inventory-utils.mjs +++ b/scripts/lib/guard-inventory-utils.mjs @@ -1,6 +1,8 @@ import { promises as fs } from "node:fs"; import path from "node:path"; +const parsedTypeScriptSourceCache = new Map(); + export function normalizeRepoPath(repoRoot, filePath) { return path.relative(repoRoot, filePath).split(path.sep).join("/"); } @@ -74,16 +76,22 @@ export function writeLine(stream, text) { export async function collectTypeScriptInventory(params) { const inventory = []; + const scriptKind = params.scriptKind ?? params.ts.ScriptKind.TS; for (const filePath of params.files) { - const source = await fs.readFile(filePath, "utf8"); - const sourceFile = params.ts.createSourceFile( - filePath, - source, - params.ts.ScriptTarget.Latest, - true, - params.scriptKind ?? params.ts.ScriptKind.TS, - ); + const cacheKey = `${scriptKind}:${filePath}`; + let sourceFile = parsedTypeScriptSourceCache.get(cacheKey); + if (!sourceFile) { + const source = await fs.readFile(filePath, "utf8"); + sourceFile = params.ts.createSourceFile( + filePath, + source, + params.ts.ScriptTarget.Latest, + true, + scriptKind, + ); + parsedTypeScriptSourceCache.set(cacheKey, sourceFile); + } inventory.push(...params.collectEntries(sourceFile, filePath)); }