|
7 | 7 | */
|
8 | 8 |
|
9 | 9 | import browserslist from 'browserslist';
|
| 10 | +import * as path from 'node:path'; |
10 | 11 |
|
11 | 12 | export function getSupportedBrowsers(
|
12 | 13 | projectRoot: string,
|
13 | 14 | logger: { warn(message: string): void },
|
14 | 15 | ): string[] {
|
15 |
| - browserslist.defaults = [ |
16 |
| - 'last 2 Chrome versions', |
17 |
| - 'last 1 Firefox version', |
18 |
| - 'last 2 Edge major versions', |
19 |
| - 'last 2 Safari major versions', |
20 |
| - 'last 2 iOS major versions', |
21 |
| - 'last 2 Android major versions', |
22 |
| - 'Firefox ESR', |
23 |
| - ]; |
| 16 | + // Read the browserslist configuration containing Angular's browser support policy. |
| 17 | + const angularBrowserslist = browserslist(undefined, { |
| 18 | + path: path.join(require.resolve('../baseline/.browserslistrc')), |
| 19 | + }); |
| 20 | + |
| 21 | + // Use Angular's configuration as the default. |
| 22 | + browserslist.defaults = angularBrowserslist; |
| 23 | + |
| 24 | + // Get the minimum set of browser versions supported by Angular. |
| 25 | + const minimumBrowsers = new Set(browserslist(angularBrowserslist)); |
24 | 26 |
|
25 | 27 | // Get browsers from config or default.
|
26 | 28 | const browsersFromConfigOrDefault = new Set(browserslist(undefined, { path: projectRoot }));
|
27 | 29 |
|
28 | 30 | // Get browsers that support ES6 modules.
|
29 | 31 | const browsersThatSupportEs6 = new Set(browserslist('supports es6-module'));
|
30 | 32 |
|
| 33 | + const nonEs6Browsers: string[] = []; |
31 | 34 | const unsupportedBrowsers: string[] = [];
|
32 | 35 | for (const browser of browsersFromConfigOrDefault) {
|
33 | 36 | if (!browsersThatSupportEs6.has(browser)) {
|
| 37 | + // Any browser which does not support ES6 is explicitly ignored, as Angular will not build successfully. |
34 | 38 | browsersFromConfigOrDefault.delete(browser);
|
| 39 | + nonEs6Browsers.push(browser); |
| 40 | + } else if (!minimumBrowsers.has(browser)) { |
| 41 | + // Any other unsupported browser we will attempt to use, but provide no support for. |
35 | 42 | unsupportedBrowsers.push(browser);
|
36 | 43 | }
|
37 | 44 | }
|
38 | 45 |
|
39 |
| - if (unsupportedBrowsers.length) { |
| 46 | + if (nonEs6Browsers.length) { |
40 | 47 | logger.warn(
|
41 | 48 | `One or more browsers which are configured in the project's Browserslist configuration ` +
|
42 | 49 | 'will be ignored as ES5 output is not supported by the Angular CLI.\n' +
|
43 |
| - `Ignored browsers: ${unsupportedBrowsers.join(', ')}`, |
| 50 | + `Ignored browsers:\n${nonEs6Browsers.join(', ')}`, |
| 51 | + ); |
| 52 | + } |
| 53 | + |
| 54 | + if (unsupportedBrowsers.length) { |
| 55 | + logger.warn( |
| 56 | + `One or more browsers which are configured in the project's Browserslist configuration ` + |
| 57 | + "fall outside Angular's browser support for this version.\n" + |
| 58 | + `Unsupported browsers:\n${unsupportedBrowsers.join(', ')}`, |
44 | 59 | );
|
45 | 60 | }
|
46 | 61 |
|
|
0 commit comments