From 20e07421543d61c069cbb5e904b264b64619fd64 Mon Sep 17 00:00:00 2001 From: Charles Lyding <19598772+clydin@users.noreply.github.com> Date: Thu, 1 Dec 2022 12:30:20 -0500 Subject: [PATCH] refactor(@angular-devkit/build-angular): update browserslist conversion to latest esbuild browsers The conversion of browserslist targets to esbuild targets has been updated to reflect additions to esbuild. Additional browsers are now supported and the major/minor versions have been normalized. The later of which ensures that `.0` major versions are not misinterpreted as ranges rather than specific versions. (cherry picked from commit a0f9db8f2ee77b55232aed2ac2193f6b1406c776) --- .../build_angular/src/utils/esbuild-targets.ts | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/packages/angular_devkit/build_angular/src/utils/esbuild-targets.ts b/packages/angular_devkit/build_angular/src/utils/esbuild-targets.ts index 276adf234690..1147738e93a9 100644 --- a/packages/angular_devkit/build_angular/src/utils/esbuild-targets.ts +++ b/packages/angular_devkit/build_angular/src/utils/esbuild-targets.ts @@ -14,10 +14,19 @@ export function transformSupportedBrowsersToTargets(supportedBrowsers: string[]) const transformed: string[] = []; // https://esbuild.github.io/api/#target - const esBuildSupportedBrowsers = new Set(['safari', 'firefox', 'edge', 'chrome', 'ios', 'node']); + const esBuildSupportedBrowsers = new Set([ + 'chrome', + 'edge', + 'firefox', + 'ie', + 'ios', + 'node', + 'opera', + 'safari', + ]); for (const browser of supportedBrowsers) { - let [browserName, version] = browser.split(' '); + let [browserName, version] = browser.toLowerCase().split(' '); // browserslist uses the name `ios_saf` for iOS Safari whereas esbuild uses `ios` if (browserName === 'ios_saf') { @@ -33,6 +42,11 @@ export function transformSupportedBrowsersToTargets(supportedBrowsers: string[]) // esbuild only supports numeric versions so `TP` is converted to a high number (999) since // a Technology Preview (TP) of Safari is assumed to support all currently known features. version = '999'; + } else if (!version.includes('.')) { + // A lone major version is considered by esbuild to include all minor versions. However, + // browserslist does not and is also inconsistent in its `.0` version naming. For example, + // Safari 15.0 is named `safari 15` but Safari 16.0 is named `safari 16.0`. + version += '.0'; } transformed.push(browserName + version);