Skip to content

Commit c9535a5

Browse files
alan-agius4mgechev
authored andcommitted
fix(@angular-devkit/build-optimizer): wrap TypeScript string enums in IIFE
Fixes angular#14786
1 parent 8352f1e commit c9535a5

File tree

2 files changed

+29
-3
lines changed

2 files changed

+29
-3
lines changed

packages/angular_devkit/build_optimizer/src/transforms/wrap-enums.ts

+8-3
Original file line numberDiff line numberDiff line change
@@ -299,11 +299,16 @@ function findTs2_3EnumIife(
299299
}
300300

301301
const memberArgument = assignment.argumentExpression;
302-
if (!memberArgument || !ts.isBinaryExpression(memberArgument)
303-
|| memberArgument.operatorToken.kind !== ts.SyntaxKind.FirstAssignment) {
304-
return null;
302+
// String enum
303+
if (ts.isStringLiteral(memberArgument)) {
304+
return [callExpression, exportExpression];
305305
}
306306

307+
// Non string enums
308+
if (!ts.isBinaryExpression(memberArgument)
309+
|| memberArgument.operatorToken.kind !== ts.SyntaxKind.FirstAssignment) {
310+
return null;
311+
}
307312

308313
if (!ts.isElementAccessExpression(memberArgument.left)) {
309314
return null;

packages/angular_devkit/build_optimizer/src/transforms/wrap-enums_spec.ts

+21
Original file line numberDiff line numberDiff line change
@@ -514,6 +514,27 @@ describe('wrap enums and classes transformer', () => {
514514
expect(tags.oneLine`${transform(input)}`).toEqual(tags.oneLine`${output}`);
515515
});
516516

517+
it('wraps TS string enums in IIFE', () => {
518+
const input = tags.stripIndent`
519+
export var NotificationKind;
520+
(function (NotificationKind) {
521+
NotificationKind["NEXT"] = "N";
522+
NotificationKind["ERROR"] = "E";
523+
NotificationKind["COMPLETE"] = "C";
524+
})(NotificationKind || (NotificationKind = {}));
525+
`;
526+
const output = tags.stripIndent`
527+
export var NotificationKind = /*@__PURE__*/ (function (NotificationKind) {
528+
NotificationKind["NEXT"] = "N";
529+
NotificationKind["ERROR"] = "E";
530+
NotificationKind["COMPLETE"] = "C";
531+
return NotificationKind;
532+
})({});
533+
`;
534+
535+
expect(tags.oneLine`${transform(input)}`).toEqual(tags.oneLine`${output}`);
536+
});
537+
517538
it('wraps tsickle enums in IIFE', () => {
518539
const input = tags.stripIndent`
519540
/** @enum {number} */

0 commit comments

Comments
 (0)