don't stat() all input files As part of transpilation we might receive directories as input files. To check, we tested each file for whether it was a directory or not. This disk access evaded our various caches. To fix: 1. only check for directories in transpilation; 2. when checking for directories, assume names ending in sourc file extensions like ".js" are not directories. PiperOrigin-RevId: 296473783
diff --git a/internal/tsc_wrapped/tsc_wrapped.ts b/internal/tsc_wrapped/tsc_wrapped.ts index 24e2e6e..077a948 100644 --- a/internal/tsc_wrapped/tsc_wrapped.ts +++ b/internal/tsc_wrapped/tsc_wrapped.ts
@@ -177,11 +177,14 @@ * them to their .js or .ts contents. */ function expandSourcesFromDirectories(fileList: string[], filePath: string) { + if (filePath.endsWith('.ts') || filePath.endsWith('.tsx') || + filePath.endsWith('.js')) { + fileList.push(filePath); + return; + } + if (!fs.statSync(filePath).isDirectory()) { - if (filePath.endsWith('.ts') || filePath.endsWith('.tsx') || - filePath.endsWith('.js')) { - fileList.push(filePath); - } + // subdirectories may also contain e.g. .java files, which we ignore. return; } const entries = fs.readdirSync(filePath); @@ -223,10 +226,14 @@ angularCompilerOptions } = parsed; - const sourceFiles: string[] = []; - for (let i = 0; i < files.length; i++) { - const filePath = files[i]; - expandSourcesFromDirectories(sourceFiles, filePath); + let sourceFiles: string[] = []; + if (bazelOpts.isJsTranspilation) { + // Under JS transpilations, some inputs might be directories. + for (const filePath of files) { + expandSourcesFromDirectories(sourceFiles, filePath); + } + } else { + sourceFiles = files; } if (bazelOpts.maxCacheSizeMb !== undefined) {