fix(compiler): No longer writes 0 length files outside of genDir (#10023)

Fixes: #9984
This commit is contained in:
Chuck Jazdzewski
2016-07-13 11:15:23 -07:00
committed by GitHub
parent 42b0c1d8a2
commit 6518ff88b2
2 changed files with 38 additions and 20 deletions

View File

@ -17,9 +17,11 @@ export interface Directory { [name: string]: Entry; }
export class MockContext implements ReflectorHostContext {
constructor(public currentDirectory: string, private files: Entry) {}
exists(fileName: string): boolean { return this.getEntry(fileName) !== undefined; }
fileExists(fileName: string): boolean { return typeof this.getEntry(fileName) === 'string'; }
read(fileName: string): string|undefined {
directoryExists(path: string): boolean { return typeof this.getEntry(path) === 'object' }
readFile(fileName: string): string|undefined {
let data = this.getEntry(fileName);
if (typeof data === 'string') {
return data;
@ -27,7 +29,7 @@ export class MockContext implements ReflectorHostContext {
return undefined;
}
write(fileName: string, data: string): void {
writeFile(fileName: string, data: string): void {
let parts = fileName.split('/');
let name = parts.pop();
let entry = this.getEntry(parts);
@ -36,6 +38,8 @@ export class MockContext implements ReflectorHostContext {
}
}
assumeFileExists(fileName: string): void { this.writeFile(fileName, ''); }
getEntry(fileName: string|string[]): Entry|undefined {
let parts = typeof fileName === 'string' ? fileName.split('/') : fileName;
if (parts[0]) {
@ -79,16 +83,18 @@ function normalize(parts: string[]): string[] {
export class MockCompilerHost implements ts.CompilerHost {
constructor(private context: MockContext) {}
fileExists(fileName: string): boolean { return this.context.exists(fileName); }
fileExists(fileName: string): boolean { return this.context.fileExists(fileName); }
readFile(fileName: string): string { return this.context.read(fileName); }
readFile(fileName: string): string { return this.context.readFile(fileName); }
directoryExists(directoryName: string): boolean { return this.context.exists(directoryName); }
directoryExists(directoryName: string): boolean {
return this.context.directoryExists(directoryName);
}
getSourceFile(
fileName: string, languageVersion: ts.ScriptTarget,
onError?: (message: string) => void): ts.SourceFile {
let sourceText = this.context.read(fileName);
let sourceText = this.context.readFile(fileName);
if (sourceText) {
return ts.createSourceFile(fileName, sourceText, languageVersion);
} else {
@ -100,7 +106,7 @@ export class MockCompilerHost implements ts.CompilerHost {
return ts.getDefaultLibFileName(options);
}
writeFile: ts.WriteFileCallback = (fileName, text) => { this.context.write(fileName, text); }
writeFile: ts.WriteFileCallback = (fileName, text) => { this.context.writeFile(fileName, text); }
getCurrentDirectory(): string {
return this.context.currentDirectory;