Skip to content

Commit 7c5178c

Browse files
filipesilvaalexeagle
authored andcommitted
feat(@angular-devkit/build-optimizer): correctly identify renamed enums
1 parent 6076e16 commit 7c5178c

File tree

2 files changed

+65
-5
lines changed

2 files changed

+65
-5
lines changed

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

+7-3
Original file line numberDiff line numberDiff line change
@@ -221,10 +221,14 @@ function findTs2_3EnumIife(
221221
}
222222

223223
const parameter = expression.parameters[0];
224-
if (!ts.isIdentifier(parameter.name) || parameter.name.text !== name) {
224+
if (!ts.isIdentifier(parameter.name)) {
225225
return null;
226226
}
227227

228+
// The name of the parameter can be different than the name of the enum if it was renamed
229+
// due to scope hoisting.
230+
const parameterName = parameter.name.text;
231+
228232
// In TS 2.3 enums, the IIFE contains only expressions with a certain format.
229233
// If we find any that is different, we ignore the whole thing.
230234
for (let bodyIndex = 0; bodyIndex < expression.body.statements.length; ++bodyIndex) {
@@ -245,7 +249,7 @@ function findTs2_3EnumIife(
245249
return null;
246250
}
247251

248-
if (!ts.isIdentifier(assignment.expression) || assignment.expression.text !== name) {
252+
if (!ts.isIdentifier(assignment.expression) || assignment.expression.text !== parameterName) {
249253
return null;
250254
}
251255

@@ -261,7 +265,7 @@ function findTs2_3EnumIife(
261265
}
262266

263267
if (!ts.isIdentifier(memberArgument.left.expression)
264-
|| memberArgument.left.expression.text !== name) {
268+
|| memberArgument.left.expression.text !== parameterName) {
265269
return null;
266270
}
267271

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

+58-2
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import { getWrapEnumsTransformer } from './wrap-enums';
1414
const transform = (content: string) => transformJavascript(
1515
{ content, getTransforms: [getWrapEnumsTransformer] }).content;
1616

17+
// tslint:disable-next-line:no-big-function
1718
describe('wrap-enums', () => {
1819
it('wraps ts 2.2 enums in IIFE', () => {
1920
const input = tags.stripIndent`
@@ -37,7 +38,7 @@ describe('wrap-enums', () => {
3738
expect(tags.oneLine`${transform(input)}`).toEqual(tags.oneLine`${output}`);
3839
});
3940

40-
it('wraps ts 2.3 - 2.6 enums in IIFE', () => {
41+
it('wraps ts >2.3 enums in IIFE', () => {
4142
const input = tags.stripIndent`
4243
export var ChangeDetectionStrategy;
4344
(function (ChangeDetectionStrategy) {
@@ -56,7 +57,7 @@ describe('wrap-enums', () => {
5657
expect(tags.oneLine`${transform(input)}`).toEqual(tags.oneLine`${output}`);
5758
});
5859

59-
it('wraps ts 2.3 - 2.6 enums in IIFE, even if they have funny numbers', () => {
60+
it('wraps ts >2.3 enums in IIFE, even if they have funny numbers', () => {
6061
const input = tags.stripIndent`
6162
export var AnimatorControlState;
6263
(function (AnimatorControlState) {
@@ -79,6 +80,61 @@ describe('wrap-enums', () => {
7980
expect(tags.oneLine`${transform(input)}`).toEqual(tags.oneLine`${output}`);
8081
});
8182

83+
it('wraps ts >2.3 enums in IIFE, even if they were renamed due to scope hoisting', () => {
84+
const input = tags.stripIndent`
85+
var TokenType$1;
86+
(function (TokenType) {
87+
TokenType[TokenType["TAG_OPEN_START"] = 0] = "TAG_OPEN_START";
88+
TokenType[TokenType["TAG_OPEN_END"] = 1] = "TAG_OPEN_END";
89+
TokenType[TokenType["TAG_OPEN_END_VOID"] = 2] = "TAG_OPEN_END_VOID";
90+
TokenType[TokenType["TAG_CLOSE"] = 3] = "TAG_CLOSE";
91+
TokenType[TokenType["TEXT"] = 4] = "TEXT";
92+
TokenType[TokenType["ESCAPABLE_RAW_TEXT"] = 5] = "ESCAPABLE_RAW_TEXT";
93+
TokenType[TokenType["RAW_TEXT"] = 6] = "RAW_TEXT";
94+
TokenType[TokenType["COMMENT_START"] = 7] = "COMMENT_START";
95+
TokenType[TokenType["COMMENT_END"] = 8] = "COMMENT_END";
96+
TokenType[TokenType["CDATA_START"] = 9] = "CDATA_START";
97+
TokenType[TokenType["CDATA_END"] = 10] = "CDATA_END";
98+
TokenType[TokenType["ATTR_NAME"] = 11] = "ATTR_NAME";
99+
TokenType[TokenType["ATTR_VALUE"] = 12] = "ATTR_VALUE";
100+
TokenType[TokenType["DOC_TYPE"] = 13] = "DOC_TYPE";
101+
TokenType[TokenType["EXPANSION_FORM_START"] = 14] = "EXPANSION_FORM_START";
102+
TokenType[TokenType["EXPANSION_CASE_VALUE"] = 15] = "EXPANSION_CASE_VALUE";
103+
TokenType[TokenType["EXPANSION_CASE_EXP_START"] = 16] = "EXPANSION_CASE_EXP_START";
104+
TokenType[TokenType["EXPANSION_CASE_EXP_END"] = 17] = "EXPANSION_CASE_EXP_END";
105+
TokenType[TokenType["EXPANSION_FORM_END"] = 18] = "EXPANSION_FORM_END";
106+
TokenType[TokenType["EOF"] = 19] = "EOF";
107+
})(TokenType$1 || (TokenType$1 = {}));
108+
`;
109+
const output = tags.stripIndent`
110+
var TokenType$1 = /*@__PURE__*/ (function (TokenType) {
111+
TokenType[TokenType["TAG_OPEN_START"] = 0] = "TAG_OPEN_START";
112+
TokenType[TokenType["TAG_OPEN_END"] = 1] = "TAG_OPEN_END";
113+
TokenType[TokenType["TAG_OPEN_END_VOID"] = 2] = "TAG_OPEN_END_VOID";
114+
TokenType[TokenType["TAG_CLOSE"] = 3] = "TAG_CLOSE";
115+
TokenType[TokenType["TEXT"] = 4] = "TEXT";
116+
TokenType[TokenType["ESCAPABLE_RAW_TEXT"] = 5] = "ESCAPABLE_RAW_TEXT";
117+
TokenType[TokenType["RAW_TEXT"] = 6] = "RAW_TEXT";
118+
TokenType[TokenType["COMMENT_START"] = 7] = "COMMENT_START";
119+
TokenType[TokenType["COMMENT_END"] = 8] = "COMMENT_END";
120+
TokenType[TokenType["CDATA_START"] = 9] = "CDATA_START";
121+
TokenType[TokenType["CDATA_END"] = 10] = "CDATA_END";
122+
TokenType[TokenType["ATTR_NAME"] = 11] = "ATTR_NAME";
123+
TokenType[TokenType["ATTR_VALUE"] = 12] = "ATTR_VALUE";
124+
TokenType[TokenType["DOC_TYPE"] = 13] = "DOC_TYPE";
125+
TokenType[TokenType["EXPANSION_FORM_START"] = 14] = "EXPANSION_FORM_START";
126+
TokenType[TokenType["EXPANSION_CASE_VALUE"] = 15] = "EXPANSION_CASE_VALUE";
127+
TokenType[TokenType["EXPANSION_CASE_EXP_START"] = 16] = "EXPANSION_CASE_EXP_START";
128+
TokenType[TokenType["EXPANSION_CASE_EXP_END"] = 17] = "EXPANSION_CASE_EXP_END";
129+
TokenType[TokenType["EXPANSION_FORM_END"] = 18] = "EXPANSION_FORM_END";
130+
TokenType[TokenType["EOF"] = 19] = "EOF";
131+
return TokenType;
132+
})({});
133+
`;
134+
135+
expect(tags.oneLine`${transform(input)}`).toEqual(tags.oneLine`${output}`);
136+
});
137+
82138
it('wraps tsickle enums in IIFE', () => {
83139
const input = tags.stripIndent`
84140
/** @enum {number} */

0 commit comments

Comments
 (0)