Skip to content

Commit

Permalink
refactor: replace caniuse-db by mdn-browser-compat-data (#11838)
Browse files Browse the repository at this point in the history
* refactor: replace caniuse-db by mdn-browser-compat-data

* fix broken test
  • Loading branch information
JLHwung committed Jul 20, 2020
1 parent e51a91e commit 48be93b
Show file tree
Hide file tree
Showing 9 changed files with 145 additions and 100 deletions.
15 changes: 8 additions & 7 deletions packages/babel-compat-data/data/native-modules.json
@@ -1,15 +1,16 @@
{
"es6.module": {
"chrome": "61",
"and_chr": "61",
"edge": "16",
"firefox": "60",
"chrome": "61",
"safari": "10.1",
"and_ff": "60",
"node": "13.2.0",
"opera": "48",
"ios_saf": "10.3",
"android": "61",
"op_mob": "48",
"and_chr": "61",
"and_ff": "60",
"samsung": "8.2"
"safari": "10.1",
"ios_saf": "10.3",
"samsung": "8.2",
"android": "61"
}
}
4 changes: 2 additions & 2 deletions packages/babel-compat-data/package.json
Expand Up @@ -21,7 +21,7 @@
"./plugin-bugfixes": "./data/plugin-bugfixes.json"
},
"scripts": {
"build-data": "./scripts/download-compat-table.sh; node ./scripts/build-data.js; node ./scripts/build-modules-support.js; node ./scripts/build-bugfixes-targets.js"
"build-data": "./scripts/download-compat-table.sh && node ./scripts/build-data.js && node ./scripts/build-modules-support.js && node ./scripts/build-bugfixes-targets.js"
},
"keywords": [
"babel",
Expand All @@ -35,7 +35,7 @@
},
"devDependencies": {
"@babel/helper-compilation-targets": "^7.10.4",
"caniuse-db": "1.0.30001035",
"mdn-browser-compat-data": "1.0.31",
"electron-to-chromium": "1.3.377",
"lodash": "^4.17.19"
}
Expand Down
75 changes: 47 additions & 28 deletions packages/babel-compat-data/scripts/build-modules-support.js
@@ -1,40 +1,59 @@
const path = require("path");
const fs = require("fs");

const moduleSupport = require("caniuse-db/features-json/es6-module.json");

const acceptedWithCaveats = new Set(["safari", "ios_saf"]);
const compatData = require("mdn-browser-compat-data").javascript;

// Map mdn-browser-compat-data to browserslist browser names
const browserNameMap = {
and_chr: "chrome",
and_ff: "firefox",
android: "chrome", // map to chrome here as Android WebView 61 is Chromium-based
op_mob: "opera",
chrome_android: "and_chr",
firefox_android: "and_ff",
safari_ios: "ios_saf",
nodejs: "node",
webview_android: "android",
opera_android: "op_mob",
samsunginternet_android: "samsung",
};

const browserSupportMap = {
android: "chrome_android", // map to chrome here as Android WebView 61 is Chromium-based
};
const { stats } = moduleSupport;

const allowedBrowsers = {};

Object.keys(stats).forEach(browser => {
const browserName = browserNameMap[browser] || browser;
const browserVersions = stats[browserName];
const allowedVersions = Object.keys(browserVersions)
.filter(value => {
// Edge 16/17 are marked as "y #6"
return acceptedWithCaveats.has(browserName)
? browserVersions[value][0] === "a"
: browserVersions[value].startsWith("y");
})
.sort((a, b) => a - b);

if (allowedVersions[0] !== undefined) {
// Handle cases where caniuse specifies version as: "11.0-11.2"
allowedBrowsers[browser] = allowedVersions[0].split("-")[0];

function browserVersion(browser, version_added) {
if (browser === "samsunginternet_android" && version_added === "8.0") {
return "8.2"; // samsung 8.0 is not defined in browserslist
}
});
// fixme: preset-env maps opera_android as opera, this is incorrect as they have different engine mappings
// see https://github.com/mdn/browser-compat-data/blob/master/browsers/opera_android.json
if (browser === "opera_android" && version_added === "45") {
return "48";
}
return version_added;
}

function process(source) {
const stats = source.__compat.support;
const allowedBrowsers = {};

Object.keys(stats).forEach(browser => {
const browserName = browserNameMap[browser] ?? browser;
let browserSupport = stats[browserSupportMap[browserName] ?? browser];
if (Array.isArray(browserSupport)) {
browserSupport = browserSupport[0]; // The first item is the most progressive support
}
if (browserSupport.version_added && !browserSupport.flags) {
allowedBrowsers[browserName] = browserVersion(
browser,
browserSupport.version_added
);
}
});

return allowedBrowsers;
}

const dataPath = path.join(__dirname, "../data/native-modules.json");
const data = {
"es6.module": allowedBrowsers,
"es6.module": process(compatData.statements.export),
};
fs.writeFileSync(dataPath, `${JSON.stringify(data, null, 2)}\n`);
exports.process = process;
@@ -0,0 +1,59 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP

exports[`getTargets esmodules returns browser supporting modules and keyed browser overrides 1`] = `
Object {
"android": "61.0.0",
"chrome": "61.0.0",
"edge": "16.0.0",
"firefox": "60.0.0",
"ie": "11.0.0",
"ios": "10.3.0",
"node": "13.2.0",
"opera": "48.0.0",
"safari": "10.1.0",
"samsung": "8.2.0",
}
`;

exports[`getTargets esmodules returns browser supporting modules and keyed browser overrides, ignoring browsers field 1`] = `
Object {
"android": "61.0.0",
"chrome": "61.0.0",
"edge": "16.0.0",
"firefox": "60.0.0",
"ie": "11.0.0",
"ios": "10.3.0",
"node": "13.2.0",
"opera": "48.0.0",
"safari": "10.1.0",
"samsung": "8.2.0",
}
`;

exports[`getTargets esmodules returns browsers supporting modules 1`] = `
Object {
"android": "61.0.0",
"chrome": "61.0.0",
"edge": "16.0.0",
"firefox": "60.0.0",
"ios": "10.3.0",
"node": "13.2.0",
"opera": "48.0.0",
"safari": "10.1.0",
"samsung": "8.2.0",
}
`;

exports[`getTargets esmodules returns browsers supporting modules, ignoring browsers key 1`] = `
Object {
"android": "61.0.0",
"chrome": "61.0.0",
"edge": "16.0.0",
"firefox": "60.0.0",
"ios": "10.3.0",
"node": "13.2.0",
"opera": "48.0.0",
"safari": "10.1.0",
"samsung": "8.2.0",
}
`;
Expand Up @@ -203,16 +203,7 @@ describe("getTargets", () => {
getTargets({
esmodules: true,
}),
).toEqual({
android: "61.0.0",
chrome: "61.0.0",
edge: "16.0.0",
firefox: "60.0.0",
ios: "10.3.0",
opera: "48.0.0",
safari: "10.1.0",
samsung: "8.2.0",
});
).toMatchSnapshot();
});

it("returns browsers supporting modules, ignoring browsers key", () => {
Expand All @@ -221,16 +212,7 @@ describe("getTargets", () => {
esmodules: true,
browsers: "ie 8",
}),
).toEqual({
android: "61.0.0",
chrome: "61.0.0",
edge: "16.0.0",
firefox: "60.0.0",
ios: "10.3.0",
opera: "48.0.0",
safari: "10.1.0",
samsung: "8.2.0",
});
).toMatchSnapshot();
});

it("returns browser supporting modules and keyed browser overrides", () => {
Expand All @@ -239,17 +221,7 @@ describe("getTargets", () => {
esmodules: true,
ie: 11,
}),
).toEqual({
android: "61.0.0",
chrome: "61.0.0",
safari: "10.1.0",
firefox: "60.0.0",
opera: "48.0.0",
ios: "10.3.0",
ie: "11.0.0",
edge: "16.0.0",
samsung: "8.2.0",
});
).toMatchSnapshot();
});

it("returns browser supporting modules and keyed browser overrides, ignoring browsers field", () => {
Expand All @@ -259,17 +231,7 @@ describe("getTargets", () => {
browsers: "ie 10",
ie: 11,
}),
).toEqual({
android: "61.0.0",
chrome: "61.0.0",
safari: "10.1.0",
ios: "10.3.0",
ie: "11.0.0",
edge: "16.0.0",
firefox: "60.0.0",
opera: "48.0.0",
samsung: "8.2.0",
});
).toMatchSnapshot();
});
});

Expand Down
Expand Up @@ -7,6 +7,7 @@ Using targets:
"edge": "16",
"firefox": "60",
"ios": "10.3",
"node": "13.2",
"opera": "48",
"safari": "10.1",
"samsung": "8.2"
Expand All @@ -15,8 +16,8 @@ Using targets:
Using modules transform: auto

Using plugins:
proposal-nullish-coalescing-operator { "android":"61", "chrome":"61", "edge":"16", "firefox":"60", "ios":"10.3", "opera":"48", "safari":"10.1", "samsung":"8.2" }
proposal-optional-chaining { "android":"61", "chrome":"61", "edge":"16", "firefox":"60", "ios":"10.3", "opera":"48", "safari":"10.1", "samsung":"8.2" }
proposal-nullish-coalescing-operator { "android":"61", "chrome":"61", "edge":"16", "firefox":"60", "ios":"10.3", "node":"13.2", "opera":"48", "safari":"10.1", "samsung":"8.2" }
proposal-optional-chaining { "android":"61", "chrome":"61", "edge":"16", "firefox":"60", "ios":"10.3", "node":"13.2", "opera":"48", "safari":"10.1", "samsung":"8.2" }
proposal-json-strings { "android":"61", "chrome":"61", "edge":"16", "firefox":"60", "ios":"10.3", "opera":"48", "safari":"10.1", "samsung":"8.2" }
proposal-optional-catch-binding { "android":"61", "chrome":"61", "edge":"16", "ios":"10.3", "opera":"48", "safari":"10.1", "samsung":"8.2" }
transform-parameters { "edge":"16" }
Expand All @@ -30,7 +31,7 @@ Using plugins:
transform-function-name { "edge":"16" }
transform-unicode-regex { "ios":"10.3", "safari":"10.1" }
transform-block-scoping { "ios":"10.3", "safari":"10.1" }
transform-modules-commonjs { "android":"61", "chrome":"61", "edge":"16", "firefox":"60", "ios":"10.3", "opera":"48", "safari":"10.1", "samsung":"8.2" }
proposal-dynamic-import { "android":"61", "chrome":"61", "edge":"16", "firefox":"60", "ios":"10.3", "opera":"48", "safari":"10.1", "samsung":"8.2" }
transform-modules-commonjs { "android":"61", "chrome":"61", "edge":"16", "firefox":"60", "ios":"10.3", "node":"13.2", "opera":"48", "safari":"10.1", "samsung":"8.2" }
proposal-dynamic-import { "android":"61", "chrome":"61", "edge":"16", "firefox":"60", "ios":"10.3", "node":"13.2", "opera":"48", "safari":"10.1", "samsung":"8.2" }

Using polyfills: No polyfills were added, since the `useBuiltIns` option was not set.
Expand Up @@ -7,6 +7,7 @@ Using targets:
"edge": "16",
"firefox": "60",
"ios": "10.3",
"node": "13.2",
"opera": "48",
"safari": "10.1",
"samsung": "8.2"
Expand All @@ -15,8 +16,8 @@ Using targets:
Using modules transform: auto

Using plugins:
proposal-nullish-coalescing-operator { "android":"61", "chrome":"61", "edge":"16", "firefox":"60", "ios":"10.3", "opera":"48", "safari":"10.1", "samsung":"8.2" }
proposal-optional-chaining { "android":"61", "chrome":"61", "edge":"16", "firefox":"60", "ios":"10.3", "opera":"48", "safari":"10.1", "samsung":"8.2" }
proposal-nullish-coalescing-operator { "android":"61", "chrome":"61", "edge":"16", "firefox":"60", "ios":"10.3", "node":"13.2", "opera":"48", "safari":"10.1", "samsung":"8.2" }
proposal-optional-chaining { "android":"61", "chrome":"61", "edge":"16", "firefox":"60", "ios":"10.3", "node":"13.2", "opera":"48", "safari":"10.1", "samsung":"8.2" }
proposal-json-strings { "android":"61", "chrome":"61", "edge":"16", "firefox":"60", "ios":"10.3", "opera":"48", "safari":"10.1", "samsung":"8.2" }
proposal-optional-catch-binding { "android":"61", "chrome":"61", "edge":"16", "ios":"10.3", "opera":"48", "safari":"10.1", "samsung":"8.2" }
proposal-async-generator-functions { "android":"61", "chrome":"61", "edge":"16", "ios":"10.3", "opera":"48", "safari":"10.1" }
Expand All @@ -25,13 +26,13 @@ Using plugins:
proposal-unicode-property-regex { "android":"61", "chrome":"61", "edge":"16", "firefox":"60", "ios":"10.3", "opera":"48", "safari":"10.1", "samsung":"8.2" }
transform-named-capturing-groups-regex { "android":"61", "chrome":"61", "edge":"16", "firefox":"60", "ios":"10.3", "opera":"48", "safari":"10.1", "samsung":"8.2" }
transform-unicode-regex { "ios":"10.3", "safari":"10.1" }
bugfix/transform-async-arrows-in-class { "android":"61", "chrome":"61", "edge":"16", "firefox":"60", "ios":"10.3", "opera":"48", "safari":"10.1", "samsung":"8.2" }
bugfix/transform-edge-default-parameters { "android":"61", "chrome":"61", "edge":"16", "firefox":"60", "ios":"10.3", "opera":"48", "safari":"10.1", "samsung":"8.2" }
bugfix/transform-edge-function-name { "android":"61", "chrome":"61", "edge":"16", "firefox":"60", "ios":"10.3", "opera":"48", "safari":"10.1", "samsung":"8.2" }
bugfix/transform-safari-block-shadowing { "android":"61", "chrome":"61", "edge":"16", "firefox":"60", "ios":"10.3", "opera":"48", "safari":"10.1", "samsung":"8.2" }
bugfix/transform-safari-for-shadowing { "android":"61", "chrome":"61", "edge":"16", "firefox":"60", "ios":"10.3", "opera":"48", "safari":"10.1", "samsung":"8.2" }
bugfix/transform-tagged-template-caching { "android":"61", "chrome":"61", "edge":"16", "firefox":"60", "ios":"10.3", "opera":"48", "safari":"10.1", "samsung":"8.2" }
transform-modules-commonjs { "android":"61", "chrome":"61", "edge":"16", "firefox":"60", "ios":"10.3", "opera":"48", "safari":"10.1", "samsung":"8.2" }
proposal-dynamic-import { "android":"61", "chrome":"61", "edge":"16", "firefox":"60", "ios":"10.3", "opera":"48", "safari":"10.1", "samsung":"8.2" }
bugfix/transform-async-arrows-in-class { "android":"61", "chrome":"61", "edge":"16", "firefox":"60", "ios":"10.3", "node":"13.2", "opera":"48", "safari":"10.1", "samsung":"8.2" }
bugfix/transform-edge-default-parameters { "android":"61", "chrome":"61", "edge":"16", "firefox":"60", "ios":"10.3", "node":"13.2", "opera":"48", "safari":"10.1", "samsung":"8.2" }
bugfix/transform-edge-function-name { "android":"61", "chrome":"61", "edge":"16", "firefox":"60", "ios":"10.3", "node":"13.2", "opera":"48", "safari":"10.1", "samsung":"8.2" }
bugfix/transform-safari-block-shadowing { "android":"61", "chrome":"61", "edge":"16", "firefox":"60", "ios":"10.3", "node":"13.2", "opera":"48", "safari":"10.1", "samsung":"8.2" }
bugfix/transform-safari-for-shadowing { "android":"61", "chrome":"61", "edge":"16", "firefox":"60", "ios":"10.3", "node":"13.2", "opera":"48", "safari":"10.1", "samsung":"8.2" }
bugfix/transform-tagged-template-caching { "android":"61", "chrome":"61", "edge":"16", "firefox":"60", "ios":"10.3", "node":"13.2", "opera":"48", "safari":"10.1", "samsung":"8.2" }
transform-modules-commonjs { "android":"61", "chrome":"61", "edge":"16", "firefox":"60", "ios":"10.3", "node":"13.2", "opera":"48", "safari":"10.1", "samsung":"8.2" }
proposal-dynamic-import { "android":"61", "chrome":"61", "edge":"16", "firefox":"60", "ios":"10.3", "node":"13.2", "opera":"48", "safari":"10.1", "samsung":"8.2" }

Using polyfills: No polyfills were added, since the `useBuiltIns` option was not set.
Expand Up @@ -7,6 +7,7 @@ Using targets:
"edge": "16",
"firefox": "60",
"ios": "10.3",
"node": "13.2",
"opera": "48",
"safari": "10.1",
"samsung": "8.2"
Expand All @@ -15,8 +16,8 @@ Using targets:
Using modules transform: false

Using plugins:
proposal-nullish-coalescing-operator { "android":"61", "chrome":"61", "edge":"16", "firefox":"60", "ios":"10.3", "opera":"48", "safari":"10.1", "samsung":"8.2" }
proposal-optional-chaining { "android":"61", "chrome":"61", "edge":"16", "firefox":"60", "ios":"10.3", "opera":"48", "safari":"10.1", "samsung":"8.2" }
proposal-nullish-coalescing-operator { "android":"61", "chrome":"61", "edge":"16", "firefox":"60", "ios":"10.3", "node":"13.2", "opera":"48", "safari":"10.1", "samsung":"8.2" }
proposal-optional-chaining { "android":"61", "chrome":"61", "edge":"16", "firefox":"60", "ios":"10.3", "node":"13.2", "opera":"48", "safari":"10.1", "samsung":"8.2" }
proposal-json-strings { "android":"61", "chrome":"61", "edge":"16", "firefox":"60", "ios":"10.3", "opera":"48", "safari":"10.1", "samsung":"8.2" }
proposal-optional-catch-binding { "android":"61", "chrome":"61", "edge":"16", "ios":"10.3", "opera":"48", "safari":"10.1", "samsung":"8.2" }
transform-parameters { "edge":"16" }
Expand All @@ -30,9 +31,9 @@ Using plugins:
transform-function-name { "edge":"16" }
transform-unicode-regex { "ios":"10.3", "safari":"10.1" }
transform-block-scoping { "ios":"10.3", "safari":"10.1" }
syntax-dynamic-import { "android":"61", "chrome":"61", "edge":"16", "firefox":"60", "ios":"10.3", "opera":"48", "safari":"10.1", "samsung":"8.2" }
syntax-dynamic-import { "android":"61", "chrome":"61", "edge":"16", "firefox":"60", "ios":"10.3", "node":"13.2", "opera":"48", "safari":"10.1", "samsung":"8.2" }

Using polyfills with `usage` option:

[<CWD>/packages/babel-preset-env/test/fixtures/corejs2/usage-browserslist-config-ignore/input.mjs] Added following core-js polyfill:
web.dom.iterable { "android":"61", "chrome":"61", "edge":"16", "firefox":"60", "ios":"10.3", "opera":"48", "safari":"10.1", "samsung":"8.2" }
web.dom.iterable { "android":"61", "chrome":"61", "edge":"16", "firefox":"60", "ios":"10.3", "node":"13.2", "opera":"48", "safari":"10.1", "samsung":"8.2" }
Expand Up @@ -7,6 +7,7 @@ Using targets:
"edge": "16",
"firefox": "60",
"ios": "10.3",
"node": "13.2",
"opera": "48",
"safari": "10.1",
"samsung": "8.2"
Expand All @@ -15,8 +16,8 @@ Using targets:
Using modules transform: false

Using plugins:
proposal-nullish-coalescing-operator { "android":"61", "chrome":"61", "edge":"16", "firefox":"60", "ios":"10.3", "opera":"48", "safari":"10.1", "samsung":"8.2" }
proposal-optional-chaining { "android":"61", "chrome":"61", "edge":"16", "firefox":"60", "ios":"10.3", "opera":"48", "safari":"10.1", "samsung":"8.2" }
proposal-nullish-coalescing-operator { "android":"61", "chrome":"61", "edge":"16", "firefox":"60", "ios":"10.3", "node":"13.2", "opera":"48", "safari":"10.1", "samsung":"8.2" }
proposal-optional-chaining { "android":"61", "chrome":"61", "edge":"16", "firefox":"60", "ios":"10.3", "node":"13.2", "opera":"48", "safari":"10.1", "samsung":"8.2" }
proposal-json-strings { "android":"61", "chrome":"61", "edge":"16", "firefox":"60", "ios":"10.3", "opera":"48", "safari":"10.1", "samsung":"8.2" }
proposal-optional-catch-binding { "android":"61", "chrome":"61", "edge":"16", "ios":"10.3", "opera":"48", "safari":"10.1", "samsung":"8.2" }
transform-parameters { "edge":"16" }
Expand All @@ -30,7 +31,7 @@ Using plugins:
transform-function-name { "edge":"16" }
transform-unicode-regex { "ios":"10.3", "safari":"10.1" }
transform-block-scoping { "ios":"10.3", "safari":"10.1" }
syntax-dynamic-import { "android":"61", "chrome":"61", "edge":"16", "firefox":"60", "ios":"10.3", "opera":"48", "safari":"10.1", "samsung":"8.2" }
syntax-dynamic-import { "android":"61", "chrome":"61", "edge":"16", "firefox":"60", "ios":"10.3", "node":"13.2", "opera":"48", "safari":"10.1", "samsung":"8.2" }

Using polyfills with `usage` option:

Expand Down

0 comments on commit 48be93b

Please sign in to comment.