diff --git a/packages/baseline-browser-mapping/src/scripts/baseline-browser-versions.ts b/packages/baseline-browser-mapping/src/scripts/baseline-browser-versions.ts index 16542dc86f6..4d769cb10c0 100644 --- a/packages/baseline-browser-mapping/src/scripts/baseline-browser-versions.ts +++ b/packages/baseline-browser-mapping/src/scripts/baseline-browser-versions.ts @@ -1,5 +1,8 @@ -import bcdBrowsers from "@mdn/browser-compat-data" assert { type: "json" }; -import otherBrowsers from "../data/downstream-browsers.json" assert { type: "json" }; +import { createRequire } from "module"; +const require = createRequire(import.meta.url); + +const bcdBrowsers = require("@mdn/browser-compat-data"); +const otherBrowsers = require("../data/downstream-browsers.json"); const bcdCoreBrowserNames: string[] = [ "chrome", @@ -11,9 +14,42 @@ const bcdCoreBrowserNames: string[] = [ "safari_ios", ]; -const coreBrowserData = Object.entries(bcdBrowsers.browsers).filter( - ([browserName, browserData]) => bcdCoreBrowserNames.includes(browserName), -); +type BrowserData = { + [key: string]: { + releases: { + [key: string]: { + status: string; + release_date?: string; + }; + }; + }; +}; + +interface Browser { + name: string; + releases: { + [version: string]: { + status: string; + release_date?: string; + engine?: string; + engine_version?: string; + }; + }; +} + +interface BrowserVersion { + browser: string; + version: string; + release_date: string; + engine: string | null; + engine_version: string | null; +} + +const coreBrowserData: [string, Browser][] = Object.entries( + bcdBrowsers.browsers as BrowserData, +).filter(([browserName, browserData]) => + bcdCoreBrowserNames.includes(browserName), +) as [string, Browser][]; const bcdDownstreamBrowserNames: string[] = [ "webview_android", @@ -21,24 +57,19 @@ const bcdDownstreamBrowserNames: string[] = [ "opera_android", "opera", ]; - -const downstreamBrowserData = [ - ...Object.entries(bcdBrowsers.browsers).filter(([browserName, browserData]) => - bcdDownstreamBrowserNames.includes(browserName), - ), - ...Object.entries(otherBrowsers.browsers), +const downstreamBrowserData: [string, Browser][] = [ + ...(Object.entries(bcdBrowsers.browsers as BrowserData).filter( + ([browserName, browserData]) => + bcdDownstreamBrowserNames.includes(browserName), + ) as [string, Browser][]), + ...(Object.entries(otherBrowsers.browsers as BrowserData) as [ + string, + Browser, + ][]), ]; const acceptableStatuses: string[] = ["current", "esr", "retired", "unknown"]; -interface BrowserVersion { - browser: string; - version: string; - release_date: string; - engine: string | null; - engine_version: string | null; -} - const compareVersions = ( incomingVersionString: string, previousVersionString: string, @@ -103,9 +134,7 @@ const getCoreVersionsByDate = ( return true; }) .sort((a, b) => { - { - return compareVersions(a[0], b[0]); - } + return compareVersions(a[0], b[0]); }); for (let i = 1; i < sortedVersions.length; i++) { const thisVersion = sortedVersions[i]; @@ -161,6 +190,7 @@ const getDownstreamBrowsers = ( let downstreamArray: BrowserVersion[] = new Array(); downstreamBrowserData.forEach(([browserName, browserData]) => { + if (!browserData.releases) return; let sortedAndFilteredVersions = Object.entries(browserData.releases) .filter(([versionNumber, versionData]) => { if (!versionData.engine) { @@ -170,7 +200,8 @@ const getDownstreamBrowsers = ( return false; } if ( - parseInt(versionData.engine_version) < parseInt(minimumChromeVersion) + versionData.engine_version && + parseInt(versionData.engine_version) < parseInt(minimumChromeVersion!) ) { return false; } @@ -187,9 +218,9 @@ const getDownstreamBrowsers = ( downstreamArray.push({ browser: browserName, version: versionNumber, - release_date: versionData.release_date, - engine: versionData.engine, - engine_version: versionData.engine_version, + release_date: versionData.release_date ?? "unknown", + engine: versionData.engine ?? null, + engine_version: versionData.engine_version ?? null, }); if (minOnly) { break; diff --git a/packages/baseline-browser-mapping/tsconfig.json b/packages/baseline-browser-mapping/tsconfig.json index 8da82e0b5ec..8c858ebe134 100644 --- a/packages/baseline-browser-mapping/tsconfig.json +++ b/packages/baseline-browser-mapping/tsconfig.json @@ -11,5 +11,5 @@ "strict": true, "noUncheckedIndexedAccess": true }, - "include": ["./src"] + "include": ["./src", "./src/data/downstream-browsers.json"] }