diff --git a/packages/website/src/components/linter/bridge.ts b/packages/website/src/components/linter/bridge.ts index 414873484c1a..1f1dec771aa7 100644 --- a/packages/website/src/components/linter/bridge.ts +++ b/packages/website/src/components/linter/bridge.ts @@ -14,7 +14,9 @@ export function createFileSystem( const files = new Map(); files.set(`/.eslintrc`, config.eslintrc); files.set(`/tsconfig.json`, config.tsconfig); - files.set(`/input${config.fileType}`, config.code); + if (config.code !== '') { + files.set(`/input${config.fileType}`, config.code); + } const fileWatcherCallbacks = new Map>(); @@ -78,6 +80,10 @@ export function createFileSystem( const expPath = getPathRegExp(path); return [...files.keys()].filter(fileName => expPath.test(fileName)); }; - + system.getScriptFileNames = (): string[] => { + return [...files.keys()] + .filter(fileName => !fileName.startsWith('/lib.')) + .filter(f => !f.endsWith('/.eslintrc') && !f.endsWith('.json')); + }; return system; } diff --git a/packages/website/src/components/linter/createParser.ts b/packages/website/src/components/linter/createParser.ts index 89bc7a44735e..4327316ec07f 100644 --- a/packages/website/src/components/linter/createParser.ts +++ b/packages/website/src/components/linter/createParser.ts @@ -21,14 +21,12 @@ export function createParser( ): { updateConfig: (compilerOptions: ts.CompilerOptions) => void; } & Parser.ParserModule { - const registeredFiles = new Set(); - const createEnv = ( compilerOptions: ts.CompilerOptions, ): tsvfs.VirtualTypeScriptEnvironment => { return vfs.createVirtualTypeScriptEnvironment( system, - [...registeredFiles], + system.getScriptFileNames(), window.ts, compilerOptions, ); @@ -46,10 +44,10 @@ export function createParser( // if text is empty use empty line to avoid error const code = text || '\n'; - if (registeredFiles.has(filePath)) { + if (system.fileExists(filePath)) { compilerHost.updateFile(filePath, code); } else { - registeredFiles.add(filePath); + system.writeFile(filePath, code); compilerHost.createFile(filePath, code); } diff --git a/packages/website/src/components/linter/types.ts b/packages/website/src/components/linter/types.ts index 6e8a046733b7..5da48b127074 100644 --- a/packages/website/src/components/linter/types.ts +++ b/packages/website/src/components/linter/types.ts @@ -30,6 +30,7 @@ export interface WebLinterModule { export type PlaygroundSystem = { removeFile: (fileName: string) => void; searchFiles: (path: string) => string[]; + getScriptFileNames: () => string[]; } & Required> & ts.System;