Skip to content

Commit 6091879

Browse files
clydindgp1130
authored andcommitted
fix(@angular-devkit/build-angular): generate correct filenames when targeting ESNext
Fixes: #16906
1 parent c515697 commit 6091879

File tree

5 files changed

+58
-10
lines changed

5 files changed

+58
-10
lines changed

packages/angular_devkit/build_angular/src/angular-cli-files/models/webpack-configs/utils.ts

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -110,9 +110,15 @@ export function getEsVersionForFileName(
110110
scriptTargetOverride: ScriptTarget | undefined,
111111
esVersionInFileName = false,
112112
): string {
113-
return scriptTargetOverride && esVersionInFileName
114-
? '-' + ScriptTarget[scriptTargetOverride].toLowerCase()
115-
: '';
113+
if (!esVersionInFileName || scriptTargetOverride === undefined) {
114+
return '';
115+
}
116+
117+
if (scriptTargetOverride === ScriptTarget.ESNext) {
118+
return '-esnext';
119+
}
120+
121+
return '-' + ScriptTarget[scriptTargetOverride].toLowerCase();
116122
}
117123

118124
export function isPolyfillsEntry(name: string) {

packages/angular_devkit/build_angular/src/browser/index.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -352,7 +352,7 @@ export function buildWebpackBrowser(
352352
}
353353
workerReplacements.push([
354354
file.file,
355-
file.file.replace(/\-es20\d{2}/, '-es5'),
355+
file.file.replace(/\-(es20\d{2}|esnext)/, '-es5'),
356356
]);
357357
} else {
358358
continue;
@@ -433,7 +433,7 @@ export function buildWebpackBrowser(
433433
// Add the newly created ES5 bundles to the index as nomodule scripts
434434
const newFilename = es5Polyfills
435435
? file.file.replace(/\-es20\d{2}/, '')
436-
: file.file.replace(/\-es20\d{2}/, '-es5');
436+
: file.file.replace(/\-(es20\d{2}|esnext)/, '-es5');
437437
noModuleFiles.push({ ...file, file: newFilename });
438438
}
439439

packages/angular_devkit/build_angular/src/utils/action-cache.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -154,7 +154,7 @@ export class BundleActionCache {
154154
cacheEntry = entries[CacheKey.DownlevelCode];
155155
if (cacheEntry) {
156156
result.downlevel = {
157-
filename: action.filename.replace(/\-es20\d{2}/, '-es5'),
157+
filename: action.filename.replace(/\-(es20\d{2}|esnext)/, '-es5'),
158158
size: cacheEntry.size,
159159
integrity: cacheEntry.integrity,
160160
};
@@ -164,7 +164,7 @@ export class BundleActionCache {
164164
cacheEntry = entries[CacheKey.DownlevelMap];
165165
if (cacheEntry) {
166166
result.downlevel.map = {
167-
filename: action.filename.replace(/\-es20\d{2}/, '-es5') + '.map',
167+
filename: action.filename.replace(/\-(es20\d{2}|esnext)/, '-es5') + '.map',
168168
size: cacheEntry.size,
169169
};
170170

packages/angular_devkit/build_angular/src/utils/process-bundle.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ export async function process(options: ProcessBundleOptions): Promise<ProcessBun
110110

111111
const basePath = path.dirname(options.filename);
112112
const filename = path.basename(options.filename);
113-
const downlevelFilename = filename.replace(/\-es20\d{2}/, '-es5');
113+
const downlevelFilename = filename.replace(/\-(es20\d{2}|esnext)/, '-es5');
114114
const downlevel = !options.optimizeOnly;
115115
const sourceCode = options.code;
116116
const sourceMap = options.map ? JSON.parse(options.map) : undefined;
@@ -440,7 +440,7 @@ async function processRuntime(
440440

441441
// Adjust lazy loaded scripts to point to the proper variant
442442
// Extra spacing is intentional to align source line positions
443-
downlevelCode = downlevelCode.replace(/"\-es20\d{2}\./, ' "-es5.');
443+
downlevelCode = downlevelCode.replace(/"\-(es20\d{2}|esnext)\./, ' "-es5.');
444444

445445
return {
446446
original: await processBundle({
@@ -451,7 +451,7 @@ async function processRuntime(
451451
downlevel: await processBundle({
452452
...options,
453453
code: downlevelCode,
454-
filename: options.filename.replace(/\-es20\d{2}/, '-es5'),
454+
filename: options.filename.replace(/\-(es20\d{2}|esnext)/, '-es5'),
455455
isOriginal: false,
456456
}),
457457
};

packages/angular_devkit/build_angular/test/browser/differential_loading_spec_large.ts

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,48 @@ describe('Browser Builder with differential loading', () => {
104104
expect(Object.keys(files)).toEqual(jasmine.arrayWithExactContents(expectedOutputs));
105105
});
106106

107+
it('emits all the neccessary files for target of ESNext', async () => {
108+
host.replaceInFile(
109+
'tsconfig.json',
110+
'"target": "es2015",',
111+
`"target": "esnext",`,
112+
);
113+
114+
const { files } = await browserBuild(architect, host, target);
115+
116+
const expectedOutputs = [
117+
'favicon.ico',
118+
'index.html',
119+
120+
'main-esnext.js',
121+
'main-esnext.js.map',
122+
'main-es5.js',
123+
'main-es5.js.map',
124+
125+
'polyfills-esnext.js',
126+
'polyfills-esnext.js.map',
127+
'polyfills-es5.js',
128+
'polyfills-es5.js.map',
129+
130+
'runtime-esnext.js',
131+
'runtime-esnext.js.map',
132+
'runtime-es5.js',
133+
'runtime-es5.js.map',
134+
135+
'styles-esnext.js',
136+
'styles-esnext.js.map',
137+
'styles-es5.js',
138+
'styles-es5.js.map',
139+
140+
'vendor-esnext.js',
141+
'vendor-esnext.js.map',
142+
'vendor-es5.js',
143+
'vendor-es5.js.map',
144+
] as PathFragment[];
145+
146+
expect(Object.keys(files)).toEqual(jasmine.arrayWithExactContents(expectedOutputs));
147+
});
148+
107149
it('deactivates differential loading for watch mode', async () => {
108150
const { files } = await browserBuild(architect, host, target, { watch: true });
109151

0 commit comments

Comments
 (0)