add tests for electron option
Closes gh-55
This commit is contained in:
parent
a38f07181d
commit
64ed1ba167
@ -83,6 +83,12 @@ export const getCurrentNodeVersion = () => {
|
||||
};
|
||||
|
||||
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");
|
||||
@ -96,23 +102,38 @@ export const electronVersionToChromeVersion = (semverVer) => {
|
||||
return result;
|
||||
};
|
||||
|
||||
export const getTargets = (targetOpts = {}) => {
|
||||
if (targetOpts.node === true || targetOpts.node === "current") {
|
||||
targetOpts.node = getCurrentNodeVersion();
|
||||
const _extends = Object.assign || function (target) {
|
||||
for (let i = 1; i < arguments.length; i++) {
|
||||
const source = arguments[i];
|
||||
for (let key in source) {
|
||||
if (Object.prototype.hasOwnProperty.call(source, key)) {
|
||||
target[key] = source[key];
|
||||
}
|
||||
}
|
||||
}
|
||||
return target;
|
||||
};
|
||||
|
||||
|
||||
export const getTargets = (targets = {}) => {
|
||||
const targetOps = _extends({}, targets);
|
||||
|
||||
if (targetOps.node === true || targetOps.node === "current") {
|
||||
targetOps.node = getCurrentNodeVersion();
|
||||
}
|
||||
|
||||
// Rewrite Electron versions to their Chrome equivalents
|
||||
if (targetOpts.electron) {
|
||||
targetOpts.chrome = electronVersionToChromeVersion(targetOpts.electron);
|
||||
delete targetOpts.electron;
|
||||
if (targetOps.electron) {
|
||||
targetOps.chrome = electronVersionToChromeVersion(targetOps.electron);
|
||||
delete targetOps.electron;
|
||||
}
|
||||
|
||||
const browserOpts = targetOpts.browsers;
|
||||
const browserOpts = targetOps.browsers;
|
||||
if (isBrowsersQueryValid(browserOpts)) {
|
||||
const queryBrowsers = getLowestVersions(browserslist(browserOpts));
|
||||
return mergeBrowsers(queryBrowsers, targetOpts);
|
||||
return mergeBrowsers(queryBrowsers, targetOps);
|
||||
}
|
||||
return targetOpts;
|
||||
return targetOps;
|
||||
};
|
||||
|
||||
// TODO: Allow specifying plugins as either shortened or full name
|
||||
@ -189,18 +210,18 @@ export default function buildPreset(context, opts = {}) {
|
||||
hasBeenLogged = true;
|
||||
console.log("babel-preset-env: `DEBUG` option");
|
||||
console.log("");
|
||||
console.log(`Using targets: ${JSON.stringify(targets, null, 2)}`);
|
||||
console.log(`Using targets: ${JSON.stringify(opts.targets, null, 2)}`);
|
||||
console.log("");
|
||||
console.log(`modules transform: ${moduleType}`);
|
||||
console.log("");
|
||||
console.log("Using plugins:");
|
||||
transformations.forEach((transform) => {
|
||||
logPlugin(transform, targets, pluginList);
|
||||
logPlugin(transform, opts.targets, pluginList);
|
||||
});
|
||||
console.log("\nUsing polyfills:");
|
||||
if (useBuiltIns && polyfills.length) {
|
||||
polyfills.forEach((polyfill) => {
|
||||
logPlugin(polyfill, targets, builtInsList);
|
||||
logPlugin(polyfill, opts.targets, builtInsList);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
3
experimental/babel-preset-env/test/fixtures/preset-options/electron/actual.js
vendored
Normal file
3
experimental/babel-preset-env/test/fixtures/preset-options/electron/actual.js
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
import "babel-polyfill";
|
||||
|
||||
a ** b;
|
||||
8
experimental/babel-preset-env/test/fixtures/preset-options/electron/expected.js
vendored
Normal file
8
experimental/babel-preset-env/test/fixtures/preset-options/electron/expected.js
vendored
Normal file
@ -0,0 +1,8 @@
|
||||
import "core-js/modules/es7.string.pad-start";
|
||||
import "core-js/modules/es7.string.pad-end";
|
||||
import "core-js/modules/web.timers";
|
||||
import "core-js/modules/web.immediate";
|
||||
import "core-js/modules/web.dom.iterable";
|
||||
|
||||
|
||||
a ** b;
|
||||
11
experimental/babel-preset-env/test/fixtures/preset-options/electron/options.json
vendored
Normal file
11
experimental/babel-preset-env/test/fixtures/preset-options/electron/options.json
vendored
Normal file
@ -0,0 +1,11 @@
|
||||
{
|
||||
"presets": [
|
||||
["../../../../lib", {
|
||||
"targets": {
|
||||
"electron": 1.5
|
||||
},
|
||||
"modules": false,
|
||||
"useBuiltIns": true
|
||||
}]
|
||||
]
|
||||
}
|
||||
@ -2,6 +2,7 @@
|
||||
|
||||
const babelPresetEnv = require("../lib/index.js");
|
||||
const assert = require("assert");
|
||||
const electronToChromiumData = require("../data/electronToChromium");
|
||||
|
||||
const {
|
||||
validateModulesOption,
|
||||
@ -25,6 +26,34 @@ describe("babel-preset-env", () => {
|
||||
});
|
||||
});
|
||||
|
||||
describe("getTargets + electron", () => {
|
||||
it("should work with a string", function() {
|
||||
assert.deepEqual(babelPresetEnv.getTargets({
|
||||
electron: "1.0"
|
||||
}), {
|
||||
chrome: 50
|
||||
});
|
||||
});
|
||||
|
||||
it("should work with a number", function() {
|
||||
assert.deepEqual(babelPresetEnv.getTargets({
|
||||
electron: 1.0
|
||||
}), {
|
||||
chrome: 50
|
||||
});
|
||||
});
|
||||
|
||||
Object.keys(electronToChromiumData).forEach((electronVersion) => {
|
||||
it(`"should work for Electron: ${electronVersion}`, function() {
|
||||
assert.deepEqual(babelPresetEnv.getTargets({
|
||||
electron: electronVersion
|
||||
}), {
|
||||
chrome: electronToChromiumData[electronVersion]
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
describe("isPluginRequired", () => {
|
||||
it("returns true if no targets are specified", () => {
|
||||
const isRequired = babelPresetEnv.isPluginRequired({}, {});
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user