From ba4ea82f6841aa238bbba19bb2bd53ca7e661201 Mon Sep 17 00:00:00 2001 From: Chuck Jazdzewski Date: Thu, 18 Jan 2018 14:36:49 -0800 Subject: [PATCH] fix(compiler-cli): do not lower expressions in non-modules (#21649) Fixes: #21651 PR Close #21649 --- .../src/transformers/lower_expressions.ts | 5 +++-- .../test/transformers/lower_expressions_spec.ts | 12 +++++++++++- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/packages/compiler-cli/src/transformers/lower_expressions.ts b/packages/compiler-cli/src/transformers/lower_expressions.ts index ef38ff7286..9ac0f8174d 100644 --- a/packages/compiler-cli/src/transformers/lower_expressions.ts +++ b/packages/compiler-cli/src/transformers/lower_expressions.ts @@ -325,13 +325,14 @@ export class LowerMetadataCache implements RequestsMap { }; // Do not validate or lower metadata in a declaration file. Declaration files are requested - // when we need to update the version of the metadata to add informatoin that might be missing + // when we need to update the version of the metadata to add information that might be missing // in the out-of-date version that can be recovered from the .d.ts file. const declarationFile = sourceFile.isDeclarationFile; + const moduleFile = ts.isExternalModule(sourceFile); const metadata = this.collector.getMetadata( sourceFile, this.strict && !declarationFile, - declarationFile ? undefined : substituteExpression); + moduleFile && !declarationFile ? substituteExpression : undefined); return {metadata, requests}; } diff --git a/packages/compiler-cli/test/transformers/lower_expressions_spec.ts b/packages/compiler-cli/test/transformers/lower_expressions_spec.ts index d76d5571ee..2f34c235dc 100644 --- a/packages/compiler-cli/test/transformers/lower_expressions_spec.ts +++ b/packages/compiler-cli/test/transformers/lower_expressions_spec.ts @@ -99,7 +99,17 @@ describe('Expression lowering', () => { .toBeTruthy('did not find the data field'); }); - it('should throw a validation execption for invalid files', () => { + it('should not lower a non-module', () => { + const collected = collect(` + declare const global: any; + const ngDevMode: boolean = (function(global: any) { + return global.ngDevMode = true; + })(typeof window != 'undefined' && window || typeof self != 'undefined' && self || typeof global != 'undefined' && global); + `); + expect(collected.requests.size).toBe(0, 'unexpected rewriting'); + }); + + it('should throw a validation exception for invalid files', () => { const cache = new LowerMetadataCache({}, /* strict */ true); const sourceFile = ts.createSourceFile( 'foo.ts', `