diff --git a/data/electron-to-chromium.js b/data/electron-to-chromium.js deleted file mode 100644 index 7e26adf3..00000000 --- a/data/electron-to-chromium.js +++ /dev/null @@ -1,10 +0,0 @@ -module.exports = { - "1.5": 54, - "1.4": 53, - "1.3": 52, - "1.2": 51, - "1.1": 50, - "1.0": 50, - "0.37": 49, - "0.36": 47, -}; \ No newline at end of file diff --git a/package.json b/package.json index aaf02e4d..7d43418c 100644 --- a/package.json +++ b/package.json @@ -46,7 +46,8 @@ "babel-plugin-transform-exponentiation-operator": "^6.8.0", "babel-plugin-transform-regenerator": "^6.6.0", "browserslist": "^1.4.0", - "invariant": "^2.2.2" + "invariant": "^2.2.2", + "electron-to-chromium": "^1.1.0" }, "devDependencies": { "babel-cli": "^6.11.4", diff --git a/src/index.js b/src/index.js index 4a271b57..68cd1bbb 100644 --- a/src/index.js +++ b/src/index.js @@ -1,8 +1,7 @@ import browserslist from "browserslist"; - import builtInsList from "../data/built-ins.json"; import defaultInclude from "./default-includes"; -import electronToChromium from "../data/electron-to-chromium"; +import { electronToChromium } from "electron-to-chromium"; import moduleTransformations from "./module-transformations"; import normalizeOptions from "./normalize-options.js"; import pluginList from "../data/plugins.json"; @@ -82,26 +81,6 @@ export const getCurrentNodeVersion = () => { return parseFloat(process.versions.node); }; -export const electronVersionToChromeVersion = (semverVer) => { - semverVer = String(semverVer); - - if (semverVer === "1") { - semverVer = "1.0"; - } - - const m = semverVer.match(/^(\d+\.\d+)/); - if (!m) { - throw new Error("Electron version must be a semver version"); - } - - const result = electronToChromium[m[1]]; - if (!result) { - throw new Error(`Electron version ${m[1]} is either too old or too new`); - } - - return result; -}; - const _extends = Object.assign || function (target) { for (let i = 1; i < arguments.length; i++) { const source = arguments[i]; @@ -124,7 +103,18 @@ export const getTargets = (targets = {}) => { // Rewrite Electron versions to their Chrome equivalents if (targetOps.electron) { - targetOps.chrome = electronVersionToChromeVersion(targetOps.electron); + const electronChromeVersion = parseInt(electronToChromium(targetOps.electron), 10); + + if (!electronChromeVersion) { + throw new Error(`Electron version ${targetOps.electron} is either too old or too new`); + } + + if (targetOps.chrome) { + targetOps.chrome = Math.min(targetOps.chrome, electronChromeVersion); + } else { + targetOps.chrome = electronChromeVersion; + } + delete targetOps.electron; } diff --git a/test/fixtures/preset-options/electron/expected.js b/test/fixtures/preset-options/electron/expected.js index 102926c4..72f57862 100644 --- a/test/fixtures/preset-options/electron/expected.js +++ b/test/fixtures/preset-options/electron/expected.js @@ -1,3 +1,6 @@ +import "core-js/modules/es7.object.values"; +import "core-js/modules/es7.object.entries"; +import "core-js/modules/es7.object.get-own-property-descriptors"; import "core-js/modules/es7.string.pad-start"; import "core-js/modules/es7.string.pad-end"; import "core-js/modules/web.timers"; @@ -5,4 +8,4 @@ import "core-js/modules/web.immediate"; import "core-js/modules/web.dom.iterable"; -a ** b; \ No newline at end of file +a ** b; diff --git a/test/fixtures/preset-options/electron/options.json b/test/fixtures/preset-options/electron/options.json index 873cef11..281c0fd3 100644 --- a/test/fixtures/preset-options/electron/options.json +++ b/test/fixtures/preset-options/electron/options.json @@ -2,7 +2,7 @@ "presets": [ ["../../../../lib", { "targets": { - "electron": 1.5 + "electron": 1.4 }, "modules": false, "useBuiltIns": true diff --git a/test/index.spec.js b/test/index.spec.js index c27e55dc..6dcfc0b8 100644 --- a/test/index.spec.js +++ b/test/index.spec.js @@ -2,7 +2,7 @@ const babelPresetEnv = require("../lib/index.js"); const assert = require("assert"); -const electronToChromiumData = require("../data/electron-to-chromium"); +const { versions: electronToChromiumData } = require("electron-to-chromium"); describe("babel-preset-env", () => { describe("getTargets", () => { @@ -26,18 +26,37 @@ describe("babel-preset-env", () => { assert.deepEqual(babelPresetEnv.getTargets({ electron: "1.0" }), { - chrome: 50 + chrome: 49 }); }); it("should work with a number", function() { assert.deepEqual(babelPresetEnv.getTargets({ electron: 1.0 + }), { + chrome: 49 + }); + }); + + + it("should preserve lower Chrome number if Electron version is more recent", function() { + assert.deepEqual(babelPresetEnv.getTargets({ + electron: 1.4, + chrome: 50 }), { chrome: 50 }); }); + it("should overwrite Chrome number if Electron version is older", function() { + assert.deepEqual(babelPresetEnv.getTargets({ + electron: 1.0, + chrome: 50 + }), { + chrome: 49 + }); + }); + Object.keys(electronToChromiumData).forEach((electronVersion) => { it(`"should work for Electron: ${electronVersion}`, function() { assert.deepEqual(babelPresetEnv.getTargets({