fix: don't mutate InputTarget's passed to @babel/helper-compilation-targets (#11648)
This commit is contained in:
parent
e6d873e061
commit
15d6da076a
@ -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;
|
||||
|
||||
@ -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;
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user