Skip to content
This repository was archived by the owner on Apr 4, 2025. It is now read-only.

Commit 8b5b9a1

Browse files
clydinfilipesilva
authored andcommitted
fix(@angular-devkit/build-optimizer): support 2.7+ exported enums
1 parent 6f41723 commit 8b5b9a1

File tree

3 files changed

+46
-8
lines changed

3 files changed

+46
-8
lines changed

packages/angular_devkit/build_optimizer/src/build-optimizer/build-optimizer_spec.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ describe('build-optimizer', () => {
6363
ChangeDetectionStrategy[ChangeDetectionStrategy["OnPush"] = 0] = "OnPush";
6464
ChangeDetectionStrategy[ChangeDetectionStrategy["Default"] = 1] = "Default";
6565
return ChangeDetectionStrategy;
66-
})({});
66+
})(ChangeDetectionStrategy || (ChangeDetectionStrategy = {}));
6767
var Clazz = /*@__PURE__*/ (function () { function Clazz() { } ${staticProperty} return Clazz; }());
6868
var ComponentClazz = /*@__PURE__*/ (function () {
6969
function ComponentClazz() { }

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

+20-4
Original file line numberDiff line numberDiff line change
@@ -174,16 +174,32 @@ function findTs2_3EnumIife(name: string, statement: ts.Statement): ts.CallExpres
174174

175175
const callExpression = expression;
176176

177-
const argument = expression.arguments[0];
178-
if (!ts.isBinaryExpression(argument)
179-
|| argument.operatorToken.kind !== ts.SyntaxKind.BarBarToken) {
177+
let argument = expression.arguments[0];
178+
if (!ts.isBinaryExpression(argument)) {
180179
return null;
181180
}
182181

183182
if (!ts.isIdentifier(argument.left) || argument.left.text !== name) {
184183
return null;
185184
}
186185

186+
if (argument.operatorToken.kind === ts.SyntaxKind.FirstAssignment) {
187+
if (!ts.isBinaryExpression(argument.right)
188+
|| argument.right.operatorToken.kind !== ts.SyntaxKind.BarBarToken) {
189+
return null;
190+
}
191+
192+
argument = argument.right;
193+
}
194+
195+
if (!ts.isBinaryExpression(argument)) {
196+
return null;
197+
}
198+
199+
if (argument.operatorToken.kind !== ts.SyntaxKind.BarBarToken) {
200+
return null;
201+
}
202+
187203
expression = expression.expression;
188204
while (ts.isParenthesizedExpression(expression)) {
189205
expression = expression.expression;
@@ -406,7 +422,7 @@ function updateEnumIife(hostNode: ts.VariableStatement, iife: ts.CallExpression)
406422
updatedFunction,
407423
),
408424
iife.typeArguments,
409-
[ts.createObjectLiteral()],
425+
iife.arguments,
410426
);
411427

412428
return updateHostNode(hostNode, updatedIife);

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

+25-3
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ describe('wrap-enums', () => {
5050
ChangeDetectionStrategy[ChangeDetectionStrategy["OnPush"] = 0] = "OnPush";
5151
ChangeDetectionStrategy[ChangeDetectionStrategy["Default"] = 1] = "Default";
5252
return ChangeDetectionStrategy;
53-
})({});
53+
})(ChangeDetectionStrategy || (ChangeDetectionStrategy = {}));
5454
`;
5555

5656
expect(tags.oneLine`${transform(input)}`).toEqual(tags.oneLine`${output}`);
@@ -73,7 +73,7 @@ describe('wrap-enums', () => {
7373
AnimatorControlState[AnimatorControlState["FINISHED"] = 3] = "FINISHED";
7474
AnimatorControlState[AnimatorControlState["DESTROYED"] = 4] = "DESTROYED";
7575
return AnimatorControlState;
76-
})({});
76+
})(AnimatorControlState || (AnimatorControlState = {}));
7777
`;
7878

7979
expect(tags.oneLine`${transform(input)}`).toEqual(tags.oneLine`${output}`);
@@ -155,9 +155,31 @@ describe('wrap-enums', () => {
155155
RequestMethod[RequestMethod["Head"] = 5] = "Head";
156156
RequestMethod[RequestMethod["Patch"] = 6] = "Patch";
157157
return RequestMethod;
158-
})({});
158+
})(RequestMethod || (RequestMethod = {}));
159+
`;
160+
161+
expect(tags.oneLine`${transform(input)}`).toEqual(tags.oneLine`${output}`);
162+
});
163+
164+
it('wraps exported enums in IIFE', () => {
165+
const input = tags.stripIndent`
166+
var ExportEnum;
167+
(function (ExportEnum) {
168+
ExportEnum[ExportEnum["A"] = 0] = "A";
169+
ExportEnum[ExportEnum["B"] = 1] = "B";
170+
ExportEnum[ExportEnum["C"] = 2] = "C";
171+
})(ExportEnum = exports.ExportEnum || (exports.ExportEnum = {}));
172+
`;
173+
const output = tags.stripIndent`
174+
var ExportEnum = /*@__PURE__*/ (function (ExportEnum) {
175+
ExportEnum[ExportEnum["A"] = 0] = "A";
176+
ExportEnum[ExportEnum["B"] = 1] = "B";
177+
ExportEnum[ExportEnum["C"] = 2] = "C";
178+
return ExportEnum;
179+
})(ExportEnum = exports.ExportEnum || (exports.ExportEnum = {}));
159180
`;
160181

161182
expect(tags.oneLine`${transform(input)}`).toEqual(tags.oneLine`${output}`);
162183
});
184+
163185
});

0 commit comments

Comments
 (0)