From 2f30bbb495a44e320f9bb6006d013b42948d1a3f Mon Sep 17 00:00:00 2001 From: Pete Bacon Darwin Date: Tue, 16 Oct 2018 09:46:59 +0100 Subject: [PATCH] perf(ivy): ngcc - only render .d.ts analysis when necessary (#26403) For each package entry-point there is only one format that is used to compile the typings files (.d.ts). This will be either esm2015 or fesm2015 (preferred). So we would not run any dts processing in the renderer if we are not compiling the appropriate format. PR Close #26403 --- .../compiler-cli/src/ngcc/src/packages/transformer.ts | 8 ++++---- .../src/ngcc/src/rendering/esm_renderer.ts | 4 ++-- .../compiler-cli/src/ngcc/src/rendering/renderer.ts | 10 ++++++---- .../src/ngcc/test/rendering/esm2015_renderer_spec.ts | 2 +- .../src/ngcc/test/rendering/esm5_renderer_spec.ts | 2 +- .../src/ngcc/test/rendering/renderer_spec.ts | 2 +- 6 files changed, 15 insertions(+), 13 deletions(-) diff --git a/packages/compiler-cli/src/ngcc/src/packages/transformer.ts b/packages/compiler-cli/src/ngcc/src/packages/transformer.ts index a742f8352bf..b7999709035 100644 --- a/packages/compiler-cli/src/ngcc/src/packages/transformer.ts +++ b/packages/compiler-cli/src/ngcc/src/packages/transformer.ts @@ -85,8 +85,8 @@ export class Transformer { console.time(entryPoint.name + '(rendering)'); // Transform the source files and source maps. - const renderer = - this.getRenderer(format, packageProgram, reflectionHost, isCore, r3SymbolsFile); + const renderer = this.getRenderer( + format, packageProgram, reflectionHost, isCore, r3SymbolsFile, transformDts); const renderedFiles = renderer.renderProgram(packageProgram, decorationAnalyses, switchMarkerAnalyses); console.timeEnd(entryPoint.name + '(rendering)'); @@ -125,14 +125,14 @@ export class Transformer { getRenderer( format: string, program: ts.Program, host: NgccReflectionHost, isCore: boolean, - rewriteCoreImportsTo: ts.SourceFile|null): Renderer { + rewriteCoreImportsTo: ts.SourceFile|null, transformDts: boolean): Renderer { switch (format) { case 'esm2015': case 'esm5': case 'fesm2015': case 'fesm5': return new EsmRenderer( - host, isCore, rewriteCoreImportsTo, this.sourcePath, this.targetPath); + host, isCore, rewriteCoreImportsTo, this.sourcePath, this.targetPath, transformDts); default: throw new Error(`Renderer for "${format}" not yet implemented.`); } diff --git a/packages/compiler-cli/src/ngcc/src/rendering/esm_renderer.ts b/packages/compiler-cli/src/ngcc/src/rendering/esm_renderer.ts index a0b3394c747..aa59ab16403 100644 --- a/packages/compiler-cli/src/ngcc/src/rendering/esm_renderer.ts +++ b/packages/compiler-cli/src/ngcc/src/rendering/esm_renderer.ts @@ -15,8 +15,8 @@ export class EsmRenderer extends Renderer { constructor( protected host: NgccReflectionHost, protected isCore: boolean, protected rewriteCoreImportsTo: ts.SourceFile|null, protected sourcePath: string, - protected targetPath: string) { - super(host, isCore, rewriteCoreImportsTo, sourcePath, targetPath); + protected targetPath: string, transformDts: boolean) { + super(host, isCore, rewriteCoreImportsTo, sourcePath, targetPath, transformDts); } /** diff --git a/packages/compiler-cli/src/ngcc/src/rendering/renderer.ts b/packages/compiler-cli/src/ngcc/src/rendering/renderer.ts index e20979050f1..54f2cacdd10 100644 --- a/packages/compiler-cli/src/ngcc/src/rendering/renderer.ts +++ b/packages/compiler-cli/src/ngcc/src/rendering/renderer.ts @@ -57,7 +57,7 @@ export abstract class Renderer { constructor( protected host: NgccReflectionHost, protected isCore: boolean, protected rewriteCoreImportsTo: ts.SourceFile|null, protected sourcePath: string, - protected targetPath: string) {} + protected targetPath: string, protected transformDts: boolean) {} renderProgram( program: ts.Program, decorationAnalyses: DecorationAnalyses, @@ -74,9 +74,11 @@ export abstract class Renderer { } }); - // Transform the .d.ts files - const dtsFiles = this.getTypingsFilesToRender(decorationAnalyses); - dtsFiles.forEach((classes, file) => renderedFiles.push(...this.renderDtsFile(file, classes))); + if (this.transformDts) { + // Transform the .d.ts files + const dtsFiles = this.getTypingsFilesToRender(decorationAnalyses); + dtsFiles.forEach((classes, file) => renderedFiles.push(...this.renderDtsFile(file, classes))); + } return renderedFiles; } diff --git a/packages/compiler-cli/src/ngcc/test/rendering/esm2015_renderer_spec.ts b/packages/compiler-cli/src/ngcc/test/rendering/esm2015_renderer_spec.ts index f0b07ef6bf0..d1ba2c9f680 100644 --- a/packages/compiler-cli/src/ngcc/test/rendering/esm2015_renderer_spec.ts +++ b/packages/compiler-cli/src/ngcc/test/rendering/esm2015_renderer_spec.ts @@ -23,7 +23,7 @@ function setup(file: {name: string, contents: string}, transformDts: boolean = f const decorationAnalyses = new DecorationAnalyzer(program.getTypeChecker(), host, [''], false).analyzeProgram(program); const switchMarkerAnalyses = new SwitchMarkerAnalyzer(host).analyzeProgram(program); - const renderer = new EsmRenderer(host, false, null, dir, dir); + const renderer = new EsmRenderer(host, false, null, dir, dir, false); return {host, program, sourceFile, renderer, decorationAnalyses, switchMarkerAnalyses}; } diff --git a/packages/compiler-cli/src/ngcc/test/rendering/esm5_renderer_spec.ts b/packages/compiler-cli/src/ngcc/test/rendering/esm5_renderer_spec.ts index 88d54d62801..20d7f8a9ec1 100644 --- a/packages/compiler-cli/src/ngcc/test/rendering/esm5_renderer_spec.ts +++ b/packages/compiler-cli/src/ngcc/test/rendering/esm5_renderer_spec.ts @@ -20,7 +20,7 @@ function setup(file: {name: string, contents: string}) { const decorationAnalyses = new DecorationAnalyzer(program.getTypeChecker(), host, [''], false).analyzeProgram(program); const switchMarkerAnalyses = new SwitchMarkerAnalyzer(host).analyzeProgram(program); - const renderer = new EsmRenderer(host, false, null, '', ''); + const renderer = new EsmRenderer(host, false, null, '', '', false); return {host, program, sourceFile, renderer, decorationAnalyses, switchMarkerAnalyses}; } diff --git a/packages/compiler-cli/src/ngcc/test/rendering/renderer_spec.ts b/packages/compiler-cli/src/ngcc/test/rendering/renderer_spec.ts index 467acbc1282..3b30a016005 100644 --- a/packages/compiler-cli/src/ngcc/test/rendering/renderer_spec.ts +++ b/packages/compiler-cli/src/ngcc/test/rendering/renderer_spec.ts @@ -17,7 +17,7 @@ import {Esm2015ReflectionHost} from '../../src/host/esm2015_host'; import {Renderer} from '../../src/rendering/renderer'; class TestRenderer extends Renderer { - constructor(host: Esm2015ReflectionHost) { super(host, false, null, '/src', '/dist'); } + constructor(host: Esm2015ReflectionHost) { super(host, false, null, '/src', '/dist', false); } addImports(output: MagicString, imports: {name: string, as: string}[]) { output.prepend('\n// ADD IMPORTS\n'); }