Skip to content

Commit a7b7682

Browse files
chuckjazkara
authored andcommitted
fix(compiler): Only emit metadata for exported enums (angular#10957)
Closes: angular#10955
1 parent ece7985 commit a7b7682

File tree

2 files changed

+51
-35
lines changed

2 files changed

+51
-35
lines changed

tools/@angular/tsc-wrapped/src/collector.ts

Lines changed: 37 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -247,43 +247,45 @@ export class MetadataCollector {
247247
// Otherwise don't record the function.
248248
break;
249249
case ts.SyntaxKind.EnumDeclaration:
250-
const enumDeclaration = <ts.EnumDeclaration>node;
251-
let enumValueHolder: {[name: string]: MetadataValue} = {};
252-
const enumName = enumDeclaration.name.text;
253-
let nextDefaultValue: MetadataValue = 0;
254-
let writtenMembers = 0;
255-
for (const member of enumDeclaration.members) {
256-
let enumValue: MetadataValue;
257-
if (!member.initializer) {
258-
enumValue = nextDefaultValue;
259-
} else {
260-
enumValue = evaluator.evaluateNode(member.initializer);
250+
if (node.flags & ts.NodeFlags.Export) {
251+
const enumDeclaration = <ts.EnumDeclaration>node;
252+
let enumValueHolder: {[name: string]: MetadataValue} = {};
253+
const enumName = enumDeclaration.name.text;
254+
let nextDefaultValue: MetadataValue = 0;
255+
let writtenMembers = 0;
256+
for (const member of enumDeclaration.members) {
257+
let enumValue: MetadataValue;
258+
if (!member.initializer) {
259+
enumValue = nextDefaultValue;
260+
} else {
261+
enumValue = evaluator.evaluateNode(member.initializer);
262+
}
263+
let name: string = undefined;
264+
if (member.name.kind == ts.SyntaxKind.Identifier) {
265+
const identifier = <ts.Identifier>member.name;
266+
name = identifier.text;
267+
enumValueHolder[name] = enumValue;
268+
writtenMembers++;
269+
}
270+
if (typeof enumValue === 'number') {
271+
nextDefaultValue = enumValue + 1;
272+
} else if (name) {
273+
nextDefaultValue = {
274+
__symbolic: 'binary',
275+
operator: '+',
276+
left: {
277+
__symbolic: 'select',
278+
expression: {__symbolic: 'reference', name: enumName}, name
279+
}
280+
}
281+
} else {
282+
nextDefaultValue = errorSym('Unsuppported enum member name', member.name);
283+
};
261284
}
262-
let name: string = undefined;
263-
if (member.name.kind == ts.SyntaxKind.Identifier) {
264-
const identifier = <ts.Identifier>member.name;
265-
name = identifier.text;
266-
enumValueHolder[name] = enumValue;
267-
writtenMembers++;
285+
if (writtenMembers) {
286+
if (!metadata) metadata = {};
287+
metadata[enumName] = enumValueHolder;
268288
}
269-
if (typeof enumValue === 'number') {
270-
nextDefaultValue = enumValue + 1;
271-
} else if (name) {
272-
nextDefaultValue = {
273-
__symbolic: 'binary',
274-
operator: '+',
275-
left: {
276-
__symbolic: 'select',
277-
expression: {__symbolic: 'reference', name: enumName}, name
278-
}
279-
}
280-
} else {
281-
nextDefaultValue = errorSym('Unsuppported enum member name', member.name);
282-
};
283-
}
284-
if (writtenMembers) {
285-
if (!metadata) metadata = {};
286-
metadata[enumName] = enumValueHolder;
287289
}
288290
break;
289291
case ts.SyntaxKind.VariableStatement:

tools/@angular/tsc-wrapped/test/collector.spec.ts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ describe('Collector', () => {
2525
'exported-enum.ts',
2626
'exported-consts.ts',
2727
'local-symbol-ref.ts',
28+
'private-enum.ts',
2829
're-exports.ts',
2930
'static-field-reference.ts',
3031
'static-method.ts',
@@ -339,6 +340,15 @@ describe('Collector', () => {
339340
expect(someEnum).toEqual({A: 0, B: 1, C: 100, D: 101});
340341
});
341342

343+
it('should ignore a non-export enum', () => {
344+
let enumSource = program.getSourceFile('/private-enum.ts');
345+
let metadata = collector.getMetadata(enumSource);
346+
let publicEnum: any = metadata.metadata['PublicEnum'];
347+
let privateEnum: any = metadata.metadata['PrivateEnum'];
348+
expect(publicEnum).toEqual({a: 0, b: 1, c: 2});
349+
expect(privateEnum).toBeUndefined();
350+
});
351+
342352
it('should be able to collect enums initialized from consts', () => {
343353
let enumSource = program.getSourceFile('/exported-enum.ts');
344354
let metadata = collector.getMetadata(enumSource);
@@ -838,6 +848,10 @@ const FILES: Directory = {
838848
})
839849
export class SomeComponent {}
840850
`,
851+
'private-enum.ts': `
852+
export enum PublicEnum { a, b, c }
853+
enum PrivateEnum { e, f, g }
854+
`,
841855
'node_modules': {
842856
'angular2': {
843857
'core.d.ts': `

0 commit comments

Comments
 (0)