fix: don't mutate InputTarget's passed to @babel/helper-compilation-targets (#11648)

This commit is contained in:
Stanley Stuart 2020-05-30 07:56:34 -07:00 committed by GitHub
parent e6d873e061
commit 15d6da076a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 21 additions and 7 deletions

View File

@ -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);
let targets: Targets = validateTargetNames(inputTargets);
// Remove esmodules after being consumed to fix `hasTargets` below
const input = { ...inputTargets };
delete input.esmodules;
delete input.browsers;
let targets: Targets = validateTargetNames(input);
const shouldParseBrowsers = !!browsersquery;
const hasTargets = shouldParseBrowsers || Object.keys(targets).length > 0;

View File

@ -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;