diff --git a/packages/babel-preset-env/src/targets-parser.js b/packages/babel-preset-env/src/targets-parser.js index c2a446d7ea84..ad165a6d1a65 100644 --- a/packages/babel-preset-env/src/targets-parser.js +++ b/packages/babel-preset-env/src/targets-parser.js @@ -50,6 +50,13 @@ const validateBrowsers = browsers => { typeof browsers === "undefined" || isBrowsersQueryValid(browsers), `Invalid Option: '${browsers}' is not a valid browserslist query`, ); + + // Since we overwrite browserslist.defaults, let's special case + // when a user actually wants `defaults`. + if (browsers === "defaults") { + return browserslistDefaults; + } + return browsers; }; @@ -176,6 +183,7 @@ const getTargets = (targets: Object = {}, options: Object = {}): Targets => { // Parse browsers target via browserslist const browsersquery = validateBrowsers(targets.browsers); + const shouldParseBrowsers = !!targets.browsers; const shouldSearchForConfig = !options.ignoreBrowserslistConfig && !Object.keys(targets).length; diff --git a/packages/babel-preset-env/test/fixtures/preset-options/browserslist-defaults/input.mjs b/packages/babel-preset-env/test/fixtures/preset-options/browserslist-defaults/input.mjs new file mode 100644 index 000000000000..bf68e2dbd8c9 --- /dev/null +++ b/packages/babel-preset-env/test/fixtures/preset-options/browserslist-defaults/input.mjs @@ -0,0 +1 @@ +const test = () => ""; diff --git a/packages/babel-preset-env/test/fixtures/preset-options/browserslist-defaults/options.json b/packages/babel-preset-env/test/fixtures/preset-options/browserslist-defaults/options.json new file mode 100644 index 000000000000..fb7e8d2043b6 --- /dev/null +++ b/packages/babel-preset-env/test/fixtures/preset-options/browserslist-defaults/options.json @@ -0,0 +1,12 @@ +{ + "presets": [ + [ + "../../../../lib", + { + "targets": { + "browsers": "defaults" + } + } + ] + ] +} diff --git a/packages/babel-preset-env/test/fixtures/preset-options/browserslist-defaults/output.js b/packages/babel-preset-env/test/fixtures/preset-options/browserslist-defaults/output.js new file mode 100644 index 000000000000..a5703ba6f53d --- /dev/null +++ b/packages/babel-preset-env/test/fixtures/preset-options/browserslist-defaults/output.js @@ -0,0 +1,5 @@ +"use strict"; + +var test = function test() { + return ""; +}; diff --git a/packages/babel-preset-env/test/targets-parser.spec.js b/packages/babel-preset-env/test/targets-parser.spec.js index fe6e2fac314a..f87cc5cfd42f 100644 --- a/packages/babel-preset-env/test/targets-parser.spec.js +++ b/packages/babel-preset-env/test/targets-parser.spec.js @@ -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;