Skip to content
This repository was archived by the owner on Feb 22, 2018. It is now read-only.

Commit b862218

Browse files
committed
Force TypeScript to only load the files that should be transpiled for each step. This essentially turns the process back into file by file transpilation.
1 parent d22a895 commit b862218

File tree

1 file changed

+29
-5
lines changed

1 file changed

+29
-5
lines changed

lib/main.ts

Lines changed: 29 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ export class Transpiler {
1818

1919
constructor(private failFast: boolean = false, private generateLibraryName: boolean = false) {}
2020

21-
options: ts.CompilerOptions = {
21+
static OPTIONS: ts.CompilerOptions = {
2222
target: ts.ScriptTarget.ES6,
2323
module: ts.ModuleKind.CommonJS,
2424
allowNonTsExtensions: true,
@@ -33,15 +33,39 @@ export class Transpiler {
3333
.join('\n');
3434
}
3535

36+
createCompilerHost(files: string[]): ts.CompilerHost {
37+
var fileMap: {[s: string]: boolean} = {};
38+
files.forEach((f) => fileMap[f] = true);
39+
return {
40+
getSourceFile(sourceName, languageVersion) {
41+
// Only transpile the files directly passed in, do not transpile transitive dependencies.
42+
if (fileMap.hasOwnProperty(sourceName)) {
43+
var contents = fs.readFileSync(sourceName, 'UTF-8');
44+
return ts.createSourceFile(sourceName, contents, Transpiler.OPTIONS.target, true);
45+
}
46+
if (sourceName === 'lib.d.ts') {
47+
return ts.createSourceFile(sourceName, '', Transpiler.OPTIONS.target, true);
48+
}
49+
return undefined;
50+
},
51+
writeFile(name, text, writeByteOrderMark) { fs.writeFile(name, text); },
52+
getDefaultLibFileName: () => 'lib.d.ts',
53+
useCaseSensitiveFileNames: () => true,
54+
getCanonicalFileName: (filename) => filename,
55+
getCurrentDirectory: () => '',
56+
getNewLine: () => '\n'
57+
};
58+
}
59+
3660
translateFile(fileName: string, relativeFileName: string): string {
37-
var host = ts.createCompilerHost(this.options, /*setParentNodes*/ true);
38-
var program = ts.createProgram([fileName], this.options, host);
61+
var host = this.createCompilerHost([fileName]);
62+
var program = ts.createProgram([fileName], Transpiler.OPTIONS, host);
3963
return this.translateProgram(program, relativeFileName);
4064
}
4165

4266
translateFiles(fileNames: string[]): void {
43-
var host = ts.createCompilerHost(this.options, /*setParentNodes*/ true);
44-
var program = ts.createProgram(fileNames, this.options, host);
67+
var host = this.createCompilerHost(fileNames);
68+
var program = ts.createProgram(fileNames, Transpiler.OPTIONS, host);
4569
program.getSourceFiles()
4670
.filter((sourceFile: ts.SourceFile) => !sourceFile.fileName.match(/\.d\.ts$/) &&
4771
!!sourceFile.fileName.match(/\.[jt]s$/))

0 commit comments

Comments
 (0)