From da01efed2847a4f21b5419822b1ecb48e9ce7764 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mateusz=20Burzy=C5=84ski?= Date: Thu, 10 Dec 2020 11:18:49 +0100 Subject: [PATCH] Fixed a regression for multiple __self & __source props with classic runtime --- .../src/index.js | 7 ++----- .../input.mjs | 1 + .../my-preset.js | 3 +++ .../options.json | 3 +++ .../output.mjs | 18 ++++++++++++++++++ 5 files changed, 27 insertions(+), 5 deletions(-) create mode 100644 packages/babel-preset-react/test/fixtures/regression/runtime-classic-allow-multiple-source-self/input.mjs create mode 100644 packages/babel-preset-react/test/fixtures/regression/runtime-classic-allow-multiple-source-self/my-preset.js create mode 100644 packages/babel-preset-react/test/fixtures/regression/runtime-classic-allow-multiple-source-self/options.json create mode 100644 packages/babel-preset-react/test/fixtures/regression/runtime-classic-allow-multiple-source-self/output.mjs diff --git a/packages/babel-helper-builder-react-jsx-experimental/src/index.js b/packages/babel-helper-builder-react-jsx-experimental/src/index.js index 2e163dc65112..152dc43b2ccf 100644 --- a/packages/babel-helper-builder-react-jsx-experimental/src/index.js +++ b/packages/babel-helper-builder-react-jsx-experimental/src/index.js @@ -862,7 +862,6 @@ You can set \`throwIfNamespace: false\` to bypass this warning.`, let props = []; const objs = []; - const found = Object.create(null); for (const attr of attribs) { const name = @@ -870,10 +869,8 @@ You can set \`throwIfNamespace: false\` to bypass this warning.`, t.isJSXIdentifier(attr.name) && attr.name.name; - if (name === "__source" || name === "__self") { - if (found[name]) throw sourceSelfError(path, name); - found[name] = true; - if (!options.development) continue; + if (!options.development && (name === "__source" || name === "__self")) { + continue; } if (useSpread || !t.isJSXSpreadAttribute(attr)) { diff --git a/packages/babel-preset-react/test/fixtures/regression/runtime-classic-allow-multiple-source-self/input.mjs b/packages/babel-preset-react/test/fixtures/regression/runtime-classic-allow-multiple-source-self/input.mjs new file mode 100644 index 000000000000..61da16d02641 --- /dev/null +++ b/packages/babel-preset-react/test/fixtures/regression/runtime-classic-allow-multiple-source-self/input.mjs @@ -0,0 +1 @@ +
diff --git a/packages/babel-preset-react/test/fixtures/regression/runtime-classic-allow-multiple-source-self/my-preset.js b/packages/babel-preset-react/test/fixtures/regression/runtime-classic-allow-multiple-source-self/my-preset.js new file mode 100644 index 000000000000..662db9983bee --- /dev/null +++ b/packages/babel-preset-react/test/fixtures/regression/runtime-classic-allow-multiple-source-self/my-preset.js @@ -0,0 +1,3 @@ +module.exports = () => ({ + presets: [["@babel/preset-react", { development: true }]], +}); diff --git a/packages/babel-preset-react/test/fixtures/regression/runtime-classic-allow-multiple-source-self/options.json b/packages/babel-preset-react/test/fixtures/regression/runtime-classic-allow-multiple-source-self/options.json new file mode 100644 index 000000000000..02f456faee9c --- /dev/null +++ b/packages/babel-preset-react/test/fixtures/regression/runtime-classic-allow-multiple-source-self/options.json @@ -0,0 +1,3 @@ +{ + "presets": [["@babel/preset-react", { "development": true }], "./my-preset"] +} diff --git a/packages/babel-preset-react/test/fixtures/regression/runtime-classic-allow-multiple-source-self/output.mjs b/packages/babel-preset-react/test/fixtures/regression/runtime-classic-allow-multiple-source-self/output.mjs new file mode 100644 index 000000000000..2e17927a0b39 --- /dev/null +++ b/packages/babel-preset-react/test/fixtures/regression/runtime-classic-allow-multiple-source-self/output.mjs @@ -0,0 +1,18 @@ +var _jsxFileName = "/packages/babel-preset-react/test/fixtures/regression/runtime-classic-allow-multiple-source-self/input.mjs", + _jsxFileName2 = "/packages/babel-preset-react/test/fixtures/regression/runtime-classic-allow-multiple-source-self/input.mjs"; + +/*#__PURE__*/ +React.createElement("div", { + __self: this, + __source: { + fileName: _jsxFileName, + lineNumber: 1, + columnNumber: 1 + }, + __self: this, + __source: { + fileName: _jsxFileName2, + lineNumber: 1, + columnNumber: 1 + } +});