diff --git a/packages/babel-compat-data/data/corejs2-built-ins.json b/packages/babel-compat-data/data/corejs2-built-ins.json index 7efce26786..d73da7ae11 100644 --- a/packages/babel-compat-data/data/corejs2-built-ins.json +++ b/packages/babel-compat-data/data/corejs2-built-ins.json @@ -80,7 +80,7 @@ "node": "11", "ios": "12", "samsung": "10", - "electron": "4" + "electron": "4.0" }, "es6.array.for-each": { "chrome": "5", @@ -248,7 +248,7 @@ "ie": "9", "ios": "12", "samsung": "8", - "electron": "3" + "electron": "3.0" }, "es6.array.species": { "chrome": "51", @@ -710,7 +710,7 @@ "node": "8.10", "ios": "9", "samsung": "8", - "electron": "3" + "electron": "3.0" }, "es7.object.define-setter": { "chrome": "62", @@ -721,7 +721,7 @@ "node": "8.10", "ios": "9", "samsung": "8", - "electron": "3" + "electron": "3.0" }, "es6.object.define-property": { "chrome": "5", @@ -826,7 +826,7 @@ "node": "8.10", "ios": "9", "samsung": "8", - "electron": "3" + "electron": "3.0" }, "es7.object.lookup-setter": { "chrome": "62", @@ -837,7 +837,7 @@ "node": "8.10", "ios": "9", "samsung": "8", - "electron": "3" + "electron": "3.0" }, "es6.object.prevent-extensions": { "chrome": "44", @@ -971,7 +971,7 @@ "node": "10", "ios": "11.3", "samsung": "8", - "electron": "3" + "electron": "3.0" }, "es6.reflect.apply": { "chrome": "49", @@ -1224,7 +1224,7 @@ "node": "10", "ios": "12", "samsung": "8", - "electron": "3" + "electron": "3.0" }, "es6.string.anchor": { "chrome": "5", @@ -1528,7 +1528,7 @@ "node": "10", "ios": "12", "samsung": "9", - "electron": "3" + "electron": "3.0" }, "es7.string.trim-right": { "chrome": "66", @@ -1539,7 +1539,7 @@ "node": "10", "ios": "12", "samsung": "9", - "electron": "3" + "electron": "3.0" }, "es6.typed.array-buffer": { "chrome": "51", diff --git a/packages/babel-compat-data/data/native-modules.json b/packages/babel-compat-data/data/native-modules.json index 4ede11b4dd..9923db203c 100644 --- a/packages/babel-compat-data/data/native-modules.json +++ b/packages/babel-compat-data/data/native-modules.json @@ -11,6 +11,7 @@ "safari": "10.1", "ios_saf": "10.3", "samsung": "8.2", - "android": "61" + "android": "61", + "electron": "2.0" } } diff --git a/packages/babel-compat-data/data/plugins.json b/packages/babel-compat-data/data/plugins.json index 5664681d22..864002a42f 100644 --- a/packages/babel-compat-data/data/plugins.json +++ b/packages/babel-compat-data/data/plugins.json @@ -1,16 +1,17 @@ { "proposal-class-properties": { "chrome": "74", - "opera": "61", + "opera": "62", "edge": "79", "node": "12", "samsung": "11", - "electron": "6" + "electron": "6.0" }, "proposal-private-methods": { "chrome": "84", + "opera": "70", "edge": "84", - "electron": "10" + "electron": "10.0" }, "proposal-numeric-separator": { "chrome": "75", @@ -21,13 +22,13 @@ "node": "12.5", "ios": "13", "samsung": "11", - "electron": "6" + "electron": "6.0" }, "proposal-logical-assignment-operators": { "chrome": "85", "firefox": "79", "safari": "14", - "electron": "10" + "electron": "10.0" }, "proposal-nullish-coalescing-operator": { "chrome": "80", @@ -37,7 +38,8 @@ "safari": "13.1", "node": "14", "ios": "13.4", - "electron": "8" + "samsung": "13", + "electron": "8.0" }, "proposal-optional-chaining": { "chrome": "80", @@ -47,7 +49,8 @@ "safari": "13.1", "node": "14", "ios": "13.4", - "electron": "8" + "samsung": "13", + "electron": "8.0" }, "proposal-json-strings": { "chrome": "66", @@ -58,7 +61,7 @@ "node": "10", "ios": "12", "samsung": "9", - "electron": "3" + "electron": "3.0" }, "proposal-optional-catch-binding": { "chrome": "66", @@ -69,7 +72,7 @@ "node": "10", "ios": "11.3", "samsung": "9", - "electron": "3" + "electron": "3.0" }, "transform-parameters": { "chrome": "49", @@ -91,7 +94,7 @@ "node": "10", "ios": "12", "samsung": "8", - "electron": "3" + "electron": "3.0" }, "proposal-object-rest-spread": { "chrome": "60", @@ -102,7 +105,7 @@ "node": "8.3", "ios": "11.3", "samsung": "8", - "electron": "2" + "electron": "2.0" }, "transform-dotall-regex": { "chrome": "62", @@ -113,7 +116,7 @@ "node": "8.10", "ios": "11.3", "samsung": "8", - "electron": "3" + "electron": "3.0" }, "proposal-unicode-property-regex": { "chrome": "64", @@ -124,7 +127,7 @@ "node": "10", "ios": "11.3", "samsung": "9", - "electron": "3" + "electron": "3.0" }, "transform-named-capturing-groups-regex": { "chrome": "64", @@ -135,7 +138,7 @@ "node": "10", "ios": "11.3", "samsung": "9", - "electron": "3" + "electron": "3.0" }, "transform-async-to-generator": { "chrome": "55", @@ -424,10 +427,14 @@ }, "proposal-export-namespace-from": { "chrome": "72", + "and_chr": "72", "edge": "79", - "opera": "60", "firefox": "80", "node": "13.2", - "samsung": "11.0" + "opera": "60", + "op_mob": "51", + "samsung": "11.0", + "android": "72", + "electron": "5.0" } } diff --git a/packages/babel-compat-data/package.json b/packages/babel-compat-data/package.json index a0834277a8..2be5539858 100644 --- a/packages/babel-compat-data/package.json +++ b/packages/babel-compat-data/package.json @@ -30,8 +30,8 @@ ], "devDependencies": { "@babel/helper-compilation-targets": "workspace:^7.10.4", - "electron-to-chromium": "1.3.513", + "electron-to-chromium": "1.3.570", "lodash": "^4.17.19", - "mdn-browser-compat-data": "1.0.31" + "mdn-browser-compat-data": "1.0.38" } } diff --git a/packages/babel-compat-data/scripts/build-bugfixes-targets.js b/packages/babel-compat-data/scripts/build-bugfixes-targets.js index 9fe3b77b9f..4245776d0a 100644 --- a/packages/babel-compat-data/scripts/build-bugfixes-targets.js +++ b/packages/babel-compat-data/scripts/build-bugfixes-targets.js @@ -3,6 +3,7 @@ // NOTE: This script must be run _after_ build-data.js const path = require("path"); +const { addElectronSupportFromChromium } = require("./chromium-to-electron"); const { getLowestImplementedVersion, @@ -38,6 +39,7 @@ for (const [plugin, { replaces, features }] of Object.entries(data)) { generatedTargets[plugin][env] = supportedWithBugfix; } } + addElectronSupportFromChromium(generatedTargets[plugin]); } for (const [replaced, features] of Object.entries(allReplacedFeatures)) { @@ -57,6 +59,7 @@ for (const [replaced, features] of Object.entries(allReplacedFeatures)) { generatedTargets[replaced][env] = stillNotSupported; } } + addElectronSupportFromChromium(generatedTargets[replaced]); } for (const [filename, data] of [ diff --git a/packages/babel-compat-data/scripts/build-data.js b/packages/babel-compat-data/scripts/build-data.js index 94248e5f5e..8e97a7948b 100644 --- a/packages/babel-compat-data/scripts/build-data.js +++ b/packages/babel-compat-data/scripts/build-data.js @@ -1,7 +1,8 @@ "use strict"; const path = require("path"); - +const compatData = require("mdn-browser-compat-data").javascript; +const { process } = require("./build-modules-support"); const { generateData, environments, writeFile } = require("./utils-build-data"); for (const target of ["plugin", "corejs2-built-in"]) { @@ -11,16 +12,13 @@ for (const target of ["plugin", "corejs2-built-in"]) { ); if (target === "plugin") { // add export-namespace-from from mdn-browser-compat-data - // todo: replace the hardcoded compat data to mdn-browser-compat-data - // after https://github.com/mdn/browser-compat-data/pull/6394 is published - newData["proposal-export-namespace-from"] = { - chrome: "72", - edge: "79", - opera: "60", - firefox: "80", - node: "13.2", - samsung: "11.0", - }; + const exportNamespaceFromCompatData = process( + compatData.statements.export.namespace + ); + // the node.js compat data is 12.0, the first node version ships `export *` behind a flag + // here we overwrite to 13.2 which is the first unflagged version + exportNamespaceFromCompatData.node = "13.2"; + newData["proposal-export-namespace-from"] = exportNamespaceFromCompatData; } const dataPath = path.join(__dirname, `../data/${target}s.json`); diff --git a/packages/babel-compat-data/scripts/build-modules-support.js b/packages/babel-compat-data/scripts/build-modules-support.js index 8ca691cdd6..ca244d2a64 100644 --- a/packages/babel-compat-data/scripts/build-modules-support.js +++ b/packages/babel-compat-data/scripts/build-modules-support.js @@ -2,6 +2,7 @@ const path = require("path"); const fs = require("fs"); const compatData = require("mdn-browser-compat-data").javascript; +const { addElectronSupportFromChromium } = require("./chromium-to-electron"); // Map mdn-browser-compat-data to browserslist browser names const browserNameMap = { @@ -47,6 +48,7 @@ function process(source) { ); } }); + addElectronSupportFromChromium(allowedBrowsers); return allowedBrowsers; } diff --git a/packages/babel-compat-data/scripts/chromium-to-electron.js b/packages/babel-compat-data/scripts/chromium-to-electron.js new file mode 100644 index 0000000000..d40b682404 --- /dev/null +++ b/packages/babel-compat-data/scripts/chromium-to-electron.js @@ -0,0 +1,32 @@ +const { versions } = require("electron-to-chromium"); +// todo: we should have imported `chromiumVersions` from `require("electron-to-chromium").chromiumVersions`, +// however the data is inconsistent with `require("electron-to-chromium").versions`. +// see https://github.com/Kilian/electron-to-chromium/pull/36 +const chromiumVersions = {}; +for (const electronVersion of Object.keys(versions)) { + chromiumVersions[versions[electronVersion]] = + chromiumVersions[versions[electronVersion]] || electronVersion; +} +const chromiumVersionList = Object.keys(chromiumVersions); + +function chromiumToElectron(version) { + if (chromiumVersions[version]) { + return chromiumVersions[version]; + } + const supportedVersion = chromiumVersionList.concat(version); + supportedVersion.sort((a, b) => +a - +b); + const nextSupportedVersion = + supportedVersion[supportedVersion.indexOf(version) + 1]; + return chromiumVersions[nextSupportedVersion]; +} + +function addElectronSupportFromChromium(supportData) { + if (supportData.chrome) { + const electronVersion = chromiumToElectron(supportData.chrome); + if (electronVersion) { + supportData.electron = electronVersion; + } + } +} + +exports.addElectronSupportFromChromium = addElectronSupportFromChromium; diff --git a/packages/babel-compat-data/scripts/download-compat-table.sh b/packages/babel-compat-data/scripts/download-compat-table.sh index daf9e60c8f..8b09f3df57 100755 --- a/packages/babel-compat-data/scripts/download-compat-table.sh +++ b/packages/babel-compat-data/scripts/download-compat-table.sh @@ -1,7 +1,7 @@ #!/bin/bash set -e -COMPAT_TABLE_COMMIT=163aacb6f93e325231d578e31c03141cd9086dbb +COMPAT_TABLE_COMMIT=e77292d3fc6f8d84c9a5a12b27e4636950fa1275 GIT_HEAD=build/compat-table/.git/HEAD if [ -d "build/compat-table" ]; then diff --git a/packages/babel-compat-data/scripts/utils-build-data.js b/packages/babel-compat-data/scripts/utils-build-data.js index 4fdaef6bbe..e8a21f4f27 100644 --- a/packages/babel-compat-data/scripts/utils-build-data.js +++ b/packages/babel-compat-data/scripts/utils-build-data.js @@ -4,31 +4,13 @@ const fs = require("fs"); const flatMap = require("lodash/flatMap"); const mapValues = require("lodash/mapValues"); const findLastIndex = require("lodash/findLastIndex"); -const electronToChromiumVersions = require("electron-to-chromium").versions; +const { addElectronSupportFromChromium } = require("./chromium-to-electron"); const envs = require("../build/compat-table/environments"); const parseEnvsVersions = require("../build/compat-table/build-utils/parse-envs-versions"); const interpolateAllResults = require("../build/compat-table/build-utils/interpolate-all-results"); const compareVersions = require("../build/compat-table/build-utils/compare-versions"); -// Add Electron to the list of environments -Object.keys(electronToChromiumVersions).forEach(electron => { - const chrome = electronToChromiumVersions[electron]; - - const electronId = `electron${electron.replace(".", "_")}`; - let chromeId = `chrome${chrome}`; - - // This is missing - if (chromeId === "chrome82") chromeId = "chrome81"; - if (!envs[chromeId]) { - throw new Error( - `Electron ${electron} inherits from Chrome ${chrome}, which is not defined.` - ); - } - - envs[electronId] = { equals: chromeId }; -}); - const envsVersions = parseEnvsVersions(envs); const compatSources = ["es5", "es6", "es2016plus", "esnext"].map(source => { @@ -51,7 +33,6 @@ exports.environments = [ "ios", "phantom", "samsung", - "electron", ]; const compatibilityTests = flatMap(compatSources, data => @@ -117,6 +98,7 @@ exports.generateData = (environments, features) => { const version = exports.getLowestImplementedVersion(options, env); if (version) plugin[env] = version; }); + addElectronSupportFromChromium(plugin); return plugin; }); diff --git a/yarn.lock b/yarn.lock index 1564f0e910..28c1038662 100644 --- a/yarn.lock +++ b/yarn.lock @@ -92,9 +92,9 @@ __metadata: resolution: "@babel/compat-data@workspace:packages/babel-compat-data" dependencies: "@babel/helper-compilation-targets": "workspace:^7.10.4" - electron-to-chromium: 1.3.513 + electron-to-chromium: 1.3.570 lodash: ^4.17.19 - mdn-browser-compat-data: 1.0.31 + mdn-browser-compat-data: 1.0.38 languageName: unknown linkType: soft @@ -7647,10 +7647,10 @@ __metadata: languageName: node linkType: hard -"electron-to-chromium@npm:1.3.513, electron-to-chromium@npm:^1.3.413": - version: 1.3.513 - resolution: "electron-to-chromium@npm:1.3.513" - checksum: f74b3b97095c669c86e879eb17b1877dc0a8948c87b92895d18e9d2df3f7b8ffdaed7b7a14c2c171838173ad5b28c1279788198868ce097418521ba0ed560c44 +"electron-to-chromium@npm:1.3.570, electron-to-chromium@npm:^1.3.413": + version: 1.3.570 + resolution: "electron-to-chromium@npm:1.3.570" + checksum: 23388b39692e2932e56033e7c0b5b5f70199e22c03335d97c811cad9b16f89e80c94abe55c6140aa12d0e19431abec764955395df9fdf3972918c6bccebc8e10 languageName: node linkType: hard @@ -11619,12 +11619,12 @@ fsevents@~2.1.2: languageName: node linkType: hard -"mdn-browser-compat-data@npm:1.0.31": - version: 1.0.31 - resolution: "mdn-browser-compat-data@npm:1.0.31" +"mdn-browser-compat-data@npm:1.0.38": + version: 1.0.38 + resolution: "mdn-browser-compat-data@npm:1.0.38" dependencies: extend: 3.0.2 - checksum: 37257b8328e3410b824ed4cc89e827e3ee0d9321e68a1c0d35fe073eef22a8a49e3b577a125c9e2d42bb922f7a2ec1bc1bfdaddc412264d8801447e61d6120f9 + checksum: 137bffed36b3d65fa2f58b7d7c58a238ff0a7de9d942517a280a04f817f06681354b62825c70966a2920d6efd666da86795942762d64c7b209eea7e543097a09 languageName: node linkType: hard