Skip to content

Commit

Permalink
fix: don't mutate InputTarget's passed to @babel/helper-compilation-t…
Browse files Browse the repository at this point in the history
…argets (#11648)
  • Loading branch information
fivetanley committed May 30, 2020
1 parent e6d873e commit 15d6da0
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 7 deletions.
16 changes: 9 additions & 7 deletions packages/babel-helper-compilation-targets/src/index.js
Expand Up @@ -166,24 +166,26 @@ export default function getTargets(
options: Object = {},
): Targets {
const targetOpts: Targets = {};
let { browsers } = inputTargets;

// `esmodules` as a target indicates the specific set of browsers supporting ES Modules.
// These values OVERRIDE the `browsers` field.
if (inputTargets.esmodules) {
const supportsESModules = browserModulesData["es6.module"];
inputTargets.browsers = Object.keys(supportsESModules)
browsers = Object.keys(supportsESModules)
.map(browser => `${browser} ${supportsESModules[browser]}`)
.join(", ");
}

// Remove esmodules after being consumed to fix `hasTargets` below
delete inputTargets.esmodules;

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

// Remove esmodules after being consumed to fix `hasTargets` below
const input = { ...inputTargets };
delete input.esmodules;
delete input.browsers;

let targets: Targets = validateTargetNames(inputTargets);
let targets: Targets = validateTargetNames(input);

const shouldParseBrowsers = !!browsersquery;
const hasTargets = shouldParseBrowsers || Object.keys(targets).length > 0;
Expand Down
Expand Up @@ -20,6 +20,18 @@ describe("getTargets", () => {
});
});

it("does not mutate the input", () => {
const input = Object.freeze({ browsers: "defaults", esmodules: true });
const expected = getTargets({
browsers: browserslist.defaults,
esmodules: true,
});
const actual = getTargets(input);
expect(actual).toEqual(expected);
expect(input.browsers).toEqual("defaults");
expect(input.esmodules).toEqual(true);
});

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

Expand Down

0 comments on commit 15d6da0

Please sign in to comment.