diff --git a/packages/babel-plugin-proposal-object-rest-spread/package.json b/packages/babel-plugin-proposal-object-rest-spread/package.json index bf8ac9543ba8..637f97d30aa4 100644 --- a/packages/babel-plugin-proposal-object-rest-spread/package.json +++ b/packages/babel-plugin-proposal-object-rest-spread/package.json @@ -17,6 +17,8 @@ "babel-plugin" ], "dependencies": { + "@babel/compat-data": "workspace:^7.13.6", + "@babel/helper-compilation-targets": "workspace:^7.13.0", "@babel/helper-plugin-utils": "workspace:^7.13.0", "@babel/plugin-syntax-object-rest-spread": "^7.8.3", "@babel/plugin-transform-parameters": "workspace:^7.13.0" diff --git a/packages/babel-plugin-proposal-object-rest-spread/src/index.js b/packages/babel-plugin-proposal-object-rest-spread/src/index.js index 7179c20899ba..b5d232b83b91 100644 --- a/packages/babel-plugin-proposal-object-rest-spread/src/index.js +++ b/packages/babel-plugin-proposal-object-rest-spread/src/index.js @@ -2,6 +2,8 @@ import { declare } from "@babel/helper-plugin-utils"; import syntaxObjectRestSpread from "@babel/plugin-syntax-object-rest-spread"; import { types as t } from "@babel/core"; import { convertFunctionParams } from "@babel/plugin-transform-parameters"; +import { isRequired } from "@babel/helper-compilation-targets"; +import compatData from "@babel/compat-data/corejs2-built-ins"; // TODO: Remove in Babel 8 // @babel/types <=7.3.3 counts FOO as referenced in var { x: FOO }. @@ -17,7 +19,12 @@ const ZERO_REFS = (() => { export default declare((api, opts) => { api.assertVersion(7); - const { useBuiltIns = false, loose = false } = opts; + const targets = api.targets(); + const supportsObjectAssign = !isRequired("es6.object.assign", targets, { + compatData, + }); + + const { useBuiltIns = supportsObjectAssign, loose = false } = opts; if (typeof loose !== "boolean") { throw new Error(".loose must be a boolean, or undefined"); diff --git a/packages/babel-plugin-proposal-object-rest-spread/test/fixtures/assumption-setSpreadProperties/targets-support-object-assign/input.js b/packages/babel-plugin-proposal-object-rest-spread/test/fixtures/assumption-setSpreadProperties/targets-support-object-assign/input.js new file mode 100644 index 000000000000..04816a32e9dd --- /dev/null +++ b/packages/babel-plugin-proposal-object-rest-spread/test/fixtures/assumption-setSpreadProperties/targets-support-object-assign/input.js @@ -0,0 +1 @@ +let a = { x: 1, ...b }; diff --git a/packages/babel-plugin-proposal-object-rest-spread/test/fixtures/assumption-setSpreadProperties/targets-support-object-assign/options.json b/packages/babel-plugin-proposal-object-rest-spread/test/fixtures/assumption-setSpreadProperties/targets-support-object-assign/options.json new file mode 100644 index 000000000000..6bcd030506b6 --- /dev/null +++ b/packages/babel-plugin-proposal-object-rest-spread/test/fixtures/assumption-setSpreadProperties/targets-support-object-assign/options.json @@ -0,0 +1,3 @@ +{ + "targets": "firefox 70" +} diff --git a/packages/babel-plugin-proposal-object-rest-spread/test/fixtures/assumption-setSpreadProperties/targets-support-object-assign/output.js b/packages/babel-plugin-proposal-object-rest-spread/test/fixtures/assumption-setSpreadProperties/targets-support-object-assign/output.js new file mode 100644 index 000000000000..0687894a351e --- /dev/null +++ b/packages/babel-plugin-proposal-object-rest-spread/test/fixtures/assumption-setSpreadProperties/targets-support-object-assign/output.js @@ -0,0 +1,3 @@ +let a = Object.assign({ + x: 1 +}, b); diff --git a/packages/babel-plugin-proposal-object-rest-spread/test/fixtures/object-spread-loose/targets-support-object-assign/input.js b/packages/babel-plugin-proposal-object-rest-spread/test/fixtures/object-spread-loose/targets-support-object-assign/input.js new file mode 100644 index 000000000000..04816a32e9dd --- /dev/null +++ b/packages/babel-plugin-proposal-object-rest-spread/test/fixtures/object-spread-loose/targets-support-object-assign/input.js @@ -0,0 +1 @@ +let a = { x: 1, ...b }; diff --git a/packages/babel-plugin-proposal-object-rest-spread/test/fixtures/object-spread-loose/targets-support-object-assign/options.json b/packages/babel-plugin-proposal-object-rest-spread/test/fixtures/object-spread-loose/targets-support-object-assign/options.json new file mode 100644 index 000000000000..6bcd030506b6 --- /dev/null +++ b/packages/babel-plugin-proposal-object-rest-spread/test/fixtures/object-spread-loose/targets-support-object-assign/options.json @@ -0,0 +1,3 @@ +{ + "targets": "firefox 70" +} diff --git a/packages/babel-plugin-proposal-object-rest-spread/test/fixtures/object-spread-loose/targets-support-object-assign/output.js b/packages/babel-plugin-proposal-object-rest-spread/test/fixtures/object-spread-loose/targets-support-object-assign/output.js new file mode 100644 index 000000000000..0687894a351e --- /dev/null +++ b/packages/babel-plugin-proposal-object-rest-spread/test/fixtures/object-spread-loose/targets-support-object-assign/output.js @@ -0,0 +1,3 @@ +let a = Object.assign({ + x: 1 +}, b); diff --git a/yarn.lock b/yarn.lock index af1a48b62520..f8a736c53c97 100644 --- a/yarn.lock +++ b/yarn.lock @@ -139,7 +139,7 @@ __metadata: languageName: node linkType: hard -"@babel/compat-data@workspace:^7.13.0, @babel/compat-data@workspace:^7.13.5, @babel/compat-data@workspace:packages/babel-compat-data": +"@babel/compat-data@workspace:^7.13.0, @babel/compat-data@workspace:^7.13.5, @babel/compat-data@workspace:^7.13.6, @babel/compat-data@workspace:packages/babel-compat-data": version: 0.0.0-use.local resolution: "@babel/compat-data@workspace:packages/babel-compat-data" dependencies: @@ -1287,7 +1287,9 @@ __metadata: version: 0.0.0-use.local resolution: "@babel/plugin-proposal-object-rest-spread@workspace:packages/babel-plugin-proposal-object-rest-spread" dependencies: + "@babel/compat-data": "workspace:^7.13.6" "@babel/core": "workspace:*" + "@babel/helper-compilation-targets": "workspace:^7.13.0" "@babel/helper-plugin-test-runner": "workspace:*" "@babel/helper-plugin-utils": "workspace:^7.13.0" "@babel/plugin-syntax-object-rest-spread": ^7.8.3