Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Allow defaults query in preset-env #8897

Merged
merged 1 commit into from Jun 30, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
16 changes: 14 additions & 2 deletions packages/babel-preset-env/src/targets-parser.js
Expand Up @@ -50,6 +50,7 @@ const validateBrowsers = browsers => {
typeof browsers === "undefined" || isBrowsersQueryValid(browsers),
`Invalid Option: '${browsers}' is not a valid browserslist query`,
);

return browsers;
};

Expand Down Expand Up @@ -176,12 +177,23 @@ const getTargets = (targets: Object = {}, options: Object = {}): Targets => {

// Parse browsers target via browserslist
const browsersquery = validateBrowsers(targets.browsers);

const hasTargets = Object.keys(targets).length > 0;
const shouldParseBrowsers = !!targets.browsers;
const shouldSearchForConfig =
!options.ignoreBrowserslistConfig && !Object.keys(targets).length;
!options.ignoreBrowserslistConfig && !hasTargets;

if (shouldParseBrowsers || shouldSearchForConfig) {
browserslist.defaults = objectToBrowserslist(targets);
// If no targets are passed, we need to overwrite browserslist's defaults
// so that we enable all transforms (acting like the now deprecated
// preset-latest).
//
// Note, if browserslist resolves the config (ex. package.json), then usage
// of `defaults` in queries will be different since we don't want to break
// the behavior of "no targets is the same as preset-latest".
if (!hasTargets) {
browserslist.defaults = objectToBrowserslist(targets);
}

const browsers = browserslist(browsersquery, {
path: options.configPath,
Expand Down
@@ -0,0 +1 @@
defaults
@@ -0,0 +1 @@
const test = () => "";
@@ -0,0 +1,11 @@
{
"presets": [
[
"../../../../lib",
{
"configPath": "packages/babel-preset-env/test/fixtures/preset-options/browserslist-default-via-config",
"modules": false
}
]
]
}
@@ -0,0 +1,3 @@
var test = function test() {
return "";
};
@@ -0,0 +1 @@
const test = (a, [b], c) => "";
@@ -0,0 +1,13 @@
{
"presets": [
[
"../../../../lib",
{
"targets": {
"node": "current",
"browsers": ["defaults", "not ie <= 10"]
}
}
]
]
}
@@ -0,0 +1,16 @@
"use strict";

function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest(); }

function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance"); }

function _iterableToArrayLimit(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }

function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }

var test = function test(a, _ref, c) {
var _ref2 = _slicedToArray(_ref, 1),
b = _ref2[0];

return "";
};
@@ -0,0 +1 @@
const test = () => "";
@@ -0,0 +1,12 @@
{
"presets": [
[
"../../../../lib",
{
"targets": {
"browsers": "defaults"
}
}
]
]
}
@@ -0,0 +1,5 @@
"use strict";

var test = function test() {
return "";
};
9 changes: 9 additions & 0 deletions packages/babel-preset-env/test/targets-parser.spec.js
Expand Up @@ -20,6 +20,15 @@ describe("getTargets", () => {
});
});

it("allows 'defaults' query", () => {
const browserslistDefaults = browserslist.defaults;

const expected = getTargets({ browsers: browserslistDefaults });
const actual = getTargets({ browsers: "defaults" });

expect(actual).toEqual(expected);
});

it("does not clobber browserslists defaults", () => {
const browserslistDefaults = browserslist.defaults;

Expand Down