diff --git a/packages/angular_devkit/build_optimizer/src/transforms/prefix-functions.ts b/packages/angular_devkit/build_optimizer/src/transforms/prefix-functions.ts index 05ac4f0bac..d2414bb989 100644 --- a/packages/angular_devkit/build_optimizer/src/transforms/prefix-functions.ts +++ b/packages/angular_devkit/build_optimizer/src/transforms/prefix-functions.ts @@ -64,6 +64,14 @@ export function findTopLevelFunctions(parentNode: ts.Node): Set { return; } + if ((ts.isFunctionExpression(innerNode) || ts.isArrowFunction(innerNode)) + && ts.isParenthesizedExpression(node)) { + // pure functions can be wrapped in parentizes + // we should not add pure comments to this sort of syntax. + // example var foo = (() => x) + return; + } + if (noPureComment) { if (ts.isNewExpression(innerNode)) { topLevelFunctions.add(node); diff --git a/packages/angular_devkit/build_optimizer/src/transforms/prefix-functions_spec.ts b/packages/angular_devkit/build_optimizer/src/transforms/prefix-functions_spec.ts index 459eb69fda..d8b55c65a5 100644 --- a/packages/angular_devkit/build_optimizer/src/transforms/prefix-functions_spec.ts +++ b/packages/angular_devkit/build_optimizer/src/transforms/prefix-functions_spec.ts @@ -141,4 +141,30 @@ describe('prefix-functions', () => { expect(tags.oneLine`${transform(input)}`).toEqual(tags.oneLine`${output}`); }); }); + + it('doesn\'t add comment to downlevel arrow function', () => { + const input = tags.stripIndent` + var populate = (function (props, rawData, entity) { + props.forEach(function (prop) { }); + }); + `; + const output = tags.stripIndent` + ${input} + `; + + expect(tags.oneLine`${transform(input)}`).toEqual(tags.oneLine`${output}`); + }); + + it('doesn\'t add comment inside arrow function', () => { + const input = tags.stripIndent` + const populate = ((props, rawData, entity) => { + props.forEach(x => x); + }); + `; + const output = tags.stripIndent` + ${input} + `; + + expect(tags.oneLine`${transform(input)}`).toEqual(tags.oneLine`${output}`); + }); });