From 1572c5872d2bc97531ea28a4fc49e32579417d3e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Piotr=20Ole=C5=9B?= Date: Sat, 7 Aug 2021 21:24:11 +0200 Subject: [PATCH] fix: add missing realpath and initialize files in memory MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit In the situation, when there were already some files built in the real fs, controlled typescript system returned true for fileExists call on initial run and false on subsequent calls causing assertion in TypeScript to fail. ✅ Closes: #630 --- .../reporter/ControlledTypeScriptSystem.ts | 20 ++++++++++++++----- test/e2e/TypeScriptGenerateTrace.spec.ts | 2 +- 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/src/typescript-reporter/reporter/ControlledTypeScriptSystem.ts b/src/typescript-reporter/reporter/ControlledTypeScriptSystem.ts index d71f7f32..517ecb47 100644 --- a/src/typescript-reporter/reporter/ControlledTypeScriptSystem.ts +++ b/src/typescript-reporter/reporter/ControlledTypeScriptSystem.ts @@ -150,11 +150,18 @@ function createControlledTypeScriptSystem( } function getReadFileSystem(path: string) { - if ( - !isInitialRun && - (mode === 'readonly' || mode === 'write-tsbuildinfo') && - isArtifact(path) - ) { + if ((mode === 'readonly' || mode === 'write-tsbuildinfo') && isArtifact(path)) { + if (isInitialRun && !memFileSystem.exists(path) && passiveFileSystem.exists(path)) { + // copy file to memory on initial run + const stats = passiveFileSystem.readStats(path); + if (stats?.isFile()) { + const content = passiveFileSystem.readFile(path); + if (content) { + memFileSystem.writeFile(path, content); + memFileSystem.updateTimes(path, stats.atime, stats.mtime); + } + } + } return memFileSystem; } @@ -175,6 +182,9 @@ function createControlledTypeScriptSystem( const controlledSystem: ControlledTypeScriptSystem = { ...typescript.sys, useCaseSensitiveFileNames: caseSensitive, + realpath(path: string): string { + return getReadFileSystem(path).realPath(path); + }, fileExists(path: string): boolean { const stats = getReadFileSystem(path).readStats(path); diff --git a/test/e2e/TypeScriptGenerateTrace.spec.ts b/test/e2e/TypeScriptGenerateTrace.spec.ts index ffec8f6b..9cb517fe 100644 --- a/test/e2e/TypeScriptGenerateTrace.spec.ts +++ b/test/e2e/TypeScriptGenerateTrace.spec.ts @@ -73,7 +73,7 @@ describe('TypeScript Generate Trace', () => { // update sandbox to generate trace await sandbox.patch( - 'tsconfig.json', + 'tsconfig.base.json', ' "rootDir": "./packages"', [' "rootDir": "./packages",', ' "generateTrace": "./traces"'].join('\n') );