Skip to content

Commit 4f352ea

Browse files
clydinalan-agius4
authored andcommitted
refactor(@angular-devkit/build-angular): use script target in custom babel loader
This change uses the project's TypeScript configuration script target to determine the required Babel processing.
1 parent 507be0d commit 4f352ea

File tree

4 files changed

+19
-7
lines changed

4 files changed

+19
-7
lines changed

packages/angular_devkit/build_angular/src/babel/webpack-loader.ts

+16-3
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
* found in the LICENSE file at https://angular.io/license
77
*/
88
import { custom } from 'babel-loader';
9+
import { ScriptTarget } from 'typescript';
910

1011
interface AngularCustomOptions {
1112
forceES5: boolean;
@@ -62,9 +63,11 @@ export default custom<AngularCustomOptions>(() => {
6263
});
6364

6465
return {
65-
async customOptions({ forceES5, ...loaderOptions }, { source }) {
66-
let shouldProcess = forceES5;
66+
async customOptions({ scriptTarget, ...loaderOptions }, { source }) {
67+
// Must process file if plugins are added
68+
let shouldProcess = Array.isArray(loaderOptions.plugins) && loaderOptions.plugins.length > 0;
6769

70+
// Analyze file for linking
6871
let shouldLink = false;
6972
const { hasLinkerSupport, requiresLinking } = await checkLinking(this.resourcePath, source);
7073
if (requiresLinking && !hasLinkerSupport) {
@@ -77,17 +80,27 @@ export default custom<AngularCustomOptions>(() => {
7780
}
7881
shouldProcess ||= shouldLink;
7982

83+
// Analyze for ES target processing
84+
let forceES5 = false;
85+
const esTarget = scriptTarget as ScriptTarget;
86+
if (esTarget < ScriptTarget.ES2015) {
87+
forceES5 = true;
88+
}
89+
shouldProcess ||= forceES5;
90+
91+
// Add provided loader options to default base options
8092
const options: Record<string, unknown> = {
8193
...baseOptions,
8294
...loaderOptions,
8395
};
8496

97+
// Skip babel processing if no actions are needed
8598
if (!shouldProcess) {
8699
// Force the current file to be ignored
87100
options.ignore = [() => true];
88101
}
89102

90-
return { custom: { forceES5: !!forceES5, shouldLink }, loader: options };
103+
return { custom: { forceES5, shouldLink }, loader: options };
91104
},
92105
config(configuration, { customOptions }) {
93106
return {

packages/angular_devkit/build_angular/src/utils/build-options.ts

+1-2
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@ import {
1616
I18NMissingTranslation,
1717
IndexUnion,
1818
Localize,
19-
OptimizationClass,
2019
SourceMapClass,
2120
} from '../browser/schema';
2221
import { Schema as DevServerSchema } from '../dev-server/schema';
@@ -98,5 +97,5 @@ export interface WebpackConfigOptions<T = BuildOptions> {
9897
buildOptions: T;
9998
tsConfig: ParsedConfiguration;
10099
tsConfigPath: string;
101-
supportES2015: boolean;
100+
scriptTarget: import('typescript').ScriptTarget;
102101
}

packages/angular_devkit/build_angular/src/utils/webpack-browser-config.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ export async function generateWebpackConfig(
7777
buildOptions,
7878
tsConfig,
7979
tsConfigPath,
80-
supportES2015,
80+
scriptTarget,
8181
};
8282

8383
wco.buildOptions.progress = defaultProgress(wco.buildOptions.progress);

packages/angular_devkit/build_angular/src/webpack/configs/common.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -554,7 +554,7 @@ export function getCommonConfig(wco: WebpackConfigOptions): Configuration {
554554
cacheIdentifier: JSON.stringify({
555555
buildAngular: require('../../../package.json').version,
556556
}),
557-
forceES5: !wco.supportES2015,
557+
scriptTarget: wco.scriptTarget,
558558
},
559559
},
560560
...buildOptimizerUseRule,

0 commit comments

Comments
 (0)