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 = {},
|
options: Object = {},
|
||||||
): Targets {
|
): Targets {
|
||||||
const targetOpts: Targets = {};
|
const targetOpts: Targets = {};
|
||||||
|
let { browsers } = inputTargets;
|
||||||
|
|
||||||
// `esmodules` as a target indicates the specific set of browsers supporting ES Modules.
|
// `esmodules` as a target indicates the specific set of browsers supporting ES Modules.
|
||||||
// These values OVERRIDE the `browsers` field.
|
// These values OVERRIDE the `browsers` field.
|
||||||
if (inputTargets.esmodules) {
|
if (inputTargets.esmodules) {
|
||||||
const supportsESModules = browserModulesData["es6.module"];
|
const supportsESModules = browserModulesData["es6.module"];
|
||||||
inputTargets.browsers = Object.keys(supportsESModules)
|
browsers = Object.keys(supportsESModules)
|
||||||
.map(browser => `${browser} ${supportsESModules[browser]}`)
|
.map(browser => `${browser} ${supportsESModules[browser]}`)
|
||||||
.join(", ");
|
.join(", ");
|
||||||
}
|
}
|
||||||
|
|
||||||
// Remove esmodules after being consumed to fix `hasTargets` below
|
|
||||||
delete inputTargets.esmodules;
|
|
||||||
|
|
||||||
// Parse browsers target via browserslist
|
// Parse browsers target via browserslist
|
||||||
const browsersquery = validateBrowsers(inputTargets.browsers);
|
const browsersquery = validateBrowsers(browsers);
|
||||||
delete inputTargets.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 shouldParseBrowsers = !!browsersquery;
|
||||||
const hasTargets = shouldParseBrowsers || Object.keys(targets).length > 0;
|
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", () => {
|
it("allows 'defaults' query", () => {
|
||||||
const browserslistDefaults = browserslist.defaults;
|
const browserslistDefaults = browserslist.defaults;
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user