fix(compiler-cli): do not lower expressions in non-modules (#21649)

Fixes: #21651

PR Close #21649
This commit is contained in:
Chuck Jazdzewski 2018-01-18 14:36:49 -08:00 committed by Miško Hevery
parent 879756d44c
commit 7f93aad836
2 changed files with 14 additions and 3 deletions

View File

@ -325,13 +325,14 @@ export class LowerMetadataCache implements RequestsMap {
}; };
// Do not validate or lower metadata in a declaration file. Declaration files are requested // 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. // in the out-of-date version that can be recovered from the .d.ts file.
const declarationFile = sourceFile.isDeclarationFile; const declarationFile = sourceFile.isDeclarationFile;
const moduleFile = ts.isExternalModule(sourceFile);
const metadata = this.collector.getMetadata( const metadata = this.collector.getMetadata(
sourceFile, this.strict && !declarationFile, sourceFile, this.strict && !declarationFile,
declarationFile ? undefined : substituteExpression); moduleFile && !declarationFile ? substituteExpression : undefined);
return {metadata, requests}; return {metadata, requests};
} }

View File

@ -99,7 +99,17 @@ describe('Expression lowering', () => {
.toBeTruthy('did not find the data field'); .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 cache = new LowerMetadataCache({}, /* strict */ true);
const sourceFile = ts.createSourceFile( const sourceFile = ts.createSourceFile(
'foo.ts', ` 'foo.ts', `