Skip to content

Commit f34b43a

Browse files
filipesilvahansl
authored andcommitted
feat(@angular-devkit/build-optimizer): force side-effect optimizations
Fix #211
1 parent 5cb8354 commit f34b43a

File tree

3 files changed

+33
-4
lines changed

3 files changed

+33
-4
lines changed

packages/angular_devkit/build_optimizer/README.md

+1
Original file line numberDiff line numberDiff line change
@@ -187,6 +187,7 @@ export interface BuildOptimizerOptions {
187187
outputFilePath?: string;
188188
emitSourceMap?: boolean;
189189
strict?: boolean;
190+
isSideEffectFree?: boolean;
190191
}
191192
```
192193

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

+17-3
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,11 @@
66
* found in the LICENSE file at https://angular.io/license
77
*/
88
import { readFileSync } from 'fs';
9-
import { TransformJavascriptOutput, transformJavascript } from '../helpers/transform-javascript';
9+
import {
10+
TransformJavascriptOptions,
11+
TransformJavascriptOutput,
12+
transformJavascript,
13+
} from '../helpers/transform-javascript';
1014
import { getFoldFileTransformer } from '../transforms/class-fold';
1115
import { getImportTslibTransformer, testImportTslib } from '../transforms/import-tslib';
1216
import { getPrefixClassesTransformer, testPrefixClasses } from '../transforms/prefix-classes';
@@ -62,6 +66,7 @@ export interface BuildOptimizerOptions {
6266
outputFilePath?: string;
6367
emitSourceMap?: boolean;
6468
strict?: boolean;
69+
isSideEffectFree?: boolean;
6570
}
6671

6772
export function buildOptimizer(options: BuildOptimizerOptions): TransformJavascriptOutput {
@@ -92,7 +97,7 @@ export function buildOptimizer(options: BuildOptimizerOptions): TransformJavascr
9297
getTransforms.push(getPrefixClassesTransformer);
9398
}
9499

95-
if (inputFilePath && isKnownSideEffectFree(inputFilePath)) {
100+
if (options.isSideEffectFree || inputFilePath && isKnownSideEffectFree(inputFilePath)) {
96101
getTransforms.push(
97102
// getPrefixFunctionsTransformer is rather dangerous, apply only to known pure es5 modules.
98103
// It will mark both `require()` calls and `console.log(stuff)` as pure.
@@ -109,5 +114,14 @@ export function buildOptimizer(options: BuildOptimizerOptions): TransformJavascr
109114
);
110115
}
111116

112-
return transformJavascript({ ...options, getTransforms, content });
117+
const transformJavascriptOpts: TransformJavascriptOptions = {
118+
content: content,
119+
inputFilePath: options.inputFilePath,
120+
outputFilePath: options.outputFilePath,
121+
emitSourceMap: options.emitSourceMap,
122+
strict: options.strict,
123+
getTransforms,
124+
};
125+
126+
return transformJavascript(transformJavascriptOpts);
113127
}

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

+15-1
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ describe('build-optimizer', () => {
1717
const decorators = 'Clazz.decorators = [ { type: Injectable } ];';
1818

1919
describe('basic functionality', () => {
20-
fit('applies class-fold, scrub-file and prefix-functions to side-effect free modules', () => {
20+
it('applies class-fold, scrub-file and prefix-functions to side-effect free modules', () => {
2121
const input = tags.stripIndent`
2222
${imports}
2323
var __extends = (this && this.__extends) || function (d, b) {
@@ -117,6 +117,20 @@ describe('build-optimizer', () => {
117117
expect(tags.oneLine`${boOutput.content}`).toEqual(output);
118118
expect(boOutput.emitSkipped).toEqual(false);
119119
});
120+
121+
it('supports flagging module as side-effect free', () => {
122+
const output = tags.oneLine`
123+
/** PURE_IMPORTS_START PURE_IMPORTS_END */
124+
var RenderType_MdOption = /*@__PURE__*/ ɵcrt({ encapsulation: 2, styles: styles_MdOption });
125+
`;
126+
const input = tags.stripIndent`
127+
var RenderType_MdOption = ɵcrt({ encapsulation: 2, styles: styles_MdOption});
128+
`;
129+
130+
const boOutput = buildOptimizer({ content: input, isSideEffectFree: true });
131+
expect(tags.oneLine`${boOutput.content}`).toEqual(output);
132+
expect(boOutput.emitSkipped).toEqual(false);
133+
});
120134
});
121135

122136

0 commit comments

Comments
 (0)