Skip to content

Commit a1d4c2d

Browse files
chuckjazalxhub
authored andcommitted
fix(compiler-cli): do not emit invalid .metadata.json files
If no metadata is collected the `ngc` would generate file that contained `[null]` instead of eliding the `.metadata.json` file. Fixes: #20479
1 parent a33182c commit a1d4c2d

2 files changed

Lines changed: 25 additions & 3 deletions

File tree

‎packages/compiler-cli/src/transformers/program.ts‎

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -336,9 +336,11 @@ class AngularCompilerProgram implements Program {
336336
if (!sf.isDeclarationFile && !GENERATED_FILES.test(sf.fileName)) {
337337
metadataJsonCount++;
338338
const metadata = this.metadataCache.getMetadata(sf);
339-
const metadataText = JSON.stringify([metadata]);
340-
const outFileName = srcToOutPath(sf.fileName.replace(/\.tsx?$/, '.metadata.json'));
341-
this.writeFile(outFileName, metadataText, false, undefined, undefined, [sf]);
339+
if (metadata) {
340+
const metadataText = JSON.stringify([metadata]);
341+
const outFileName = srcToOutPath(sf.fileName.replace(/\.tsx?$/, '.metadata.json'));
342+
this.writeFile(outFileName, metadataText, false, undefined, undefined, [sf]);
343+
}
342344
}
343345
});
344346
}

‎packages/compiler-cli/test/ngc_spec.ts‎

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1474,6 +1474,26 @@ describe('ngc transformer command-line', () => {
14741474
});
14751475

14761476
describe('regressions', () => {
1477+
//#20479
1478+
it('should not generate an invalid metadata file', () => {
1479+
write('src/tsconfig.json', `{
1480+
"extends": "../tsconfig-base.json",
1481+
"files": ["lib.ts"],
1482+
"angularCompilerOptions": {
1483+
"skipTemplateCodegen": true
1484+
}
1485+
}`);
1486+
write('src/lib.ts', `
1487+
export namespace A{
1488+
export class C1 {
1489+
}
1490+
export interface I1{
1491+
}
1492+
}`);
1493+
expect(main(['-p', path.join(basePath, 'src/tsconfig.json')])).toBe(0);
1494+
shouldNotExist('src/lib.metadata.json');
1495+
});
1496+
14771497
//#19544
14781498
it('should recognize @NgModule() directive with a redundant @Injectable()', () => {
14791499
write('src/tsconfig.json', `{

0 commit comments

Comments
 (0)