perf(compiler): skip type check and emit in bazel in some cases. (#19646)

If no user files changed:
- only type check the changed generated files

Never emit non changed generated files
- we still calculate them, but don’t send them through
  TypeScript to emit them but cache the written files instead.
PR Close #19646
This commit is contained in:
Tobias Bosch
2017-10-10 13:45:42 -07:00
committed by Chuck Jazdzewski
parent 3acf9c7063
commit a22121d65d
21 changed files with 596 additions and 297 deletions

View File

@ -9,6 +9,7 @@
import {GeneratedFile} from '@angular/compiler';
import * as ts from 'typescript';
import {Program} from './api';
import {TypeScriptNodeEmitter} from './node_emitter';
import {GENERATED_FILES} from './util';
@ -19,12 +20,12 @@ const PREAMBLE = `/**
* tslint:disable
*/`;
export function getAngularEmitterTransformFactory(generatedFiles: Map<string, GeneratedFile>): () =>
export function getAngularEmitterTransformFactory(program: Program): () =>
(sourceFile: ts.SourceFile) => ts.SourceFile {
return function() {
const emitter = new TypeScriptNodeEmitter();
return function(sourceFile: ts.SourceFile): ts.SourceFile {
const g = generatedFiles.get(sourceFile.fileName);
const g = program.getGeneratedFile(sourceFile.fileName) as GeneratedFile;
if (g && g.stmts) {
const [newSourceFile] = emitter.updateSourceFile(sourceFile, g.stmts, PREAMBLE);
return newSourceFile;