Use the correct this in __self for JSX elements in arrows (#11288)

* Inject `__source` and `__self` in JSX elements earlier

This fixes an issue where `this` was not correct inside arrow functions, similar to
906f8be24d

* Add test

* Remove try-catch

* Update error

* Update fixtures

* Update windows fixtures
This commit is contained in:
Nicolò Ribaudo
2020-03-19 20:01:17 +01:00
committed by GitHub
parent 0a02a12235
commit 11292a3c74
22 changed files with 221 additions and 250 deletions

View File

@@ -1,32 +0,0 @@
var actual = transform(
`var x = (
<>
<div>
<div key="1" />
<div key="2" meow="wolf" />
<div key="3" />
<div {...props} key="4" />
</div>
</>
);`,
Object.assign({}, opts, { filename: 'C:\\fake\\path\\mock.js' })
).code;
var expected =
`import { createElement as _createElement } from "react";
import { jsxs as _jsxs } from "react/jsx-runtime";
import { jsx as _jsx } from "react/jsx-runtime";
import { Fragment as _Fragment } from "react/jsx-runtime";
var _jsxFileName = "C:\\\\fake\\\\path\\\\mock.js";
var x = _jsx(_Fragment, {
children: _jsxs("div", {
children: [_jsx("div", {}, "1"), _jsx("div", {
meow: "wolf"
}, "2"), _jsx("div", {}, "3"), _createElement("div", { ...props,
key: "4"
})]
})
});`;
expect(actual).toBe(expected);

View File

@@ -1,16 +0,0 @@
{
"plugins": [
[
"transform-react-jsx",
{
"autoImport": "namedExports",
"runtime": "automatic"
}
],
"transform-react-jsx-source",
"transform-react-jsx-self"
],
"sourceType": "module",
"os": ["win32"],
"throws": "__source and __self should not be defined in props. You are most likely using the deprecated transform-react-jsx-self or transform-react-jsx-source Babel plugins. __source and __self will be set automatically in automatic runtime. Please remove transform-react-jsx-self or transform-react-jsx-source from your Babel config."
}

View File

@@ -1,32 +0,0 @@
var actual = transform(
`var x = (
<>
<div>
<div key="1" />
<div key="2" meow="wolf" />
<div key="3" />
<div {...props} key="4" />
</div>
</>
);`,
Object.assign({}, opts, { filename: '/fake/path/mock.js' })
).code;
var expected =
`import { createElement as _createElement } from "react";
import { jsxs as _jsxs } from "react/jsx-runtime";
import { jsx as _jsx } from "react/jsx-runtime";
import { Fragment as _Fragment } from "react/jsx-runtime";
var _jsxFileName = "/fake/path/mock.js";
var x = _jsx(_Fragment, {
children: _jsxs("div", {
children: [_jsx("div", {}, "1"), _jsx("div", {
meow: "wolf"
}, "2"), _jsx("div", {}, "3"), _createElement("div", { ...props,
key: "4"
})]
})
});`;
expect(actual).toBe(expected);

View File

@@ -0,0 +1,10 @@
var x = (
<>
<div>
<div key="1" />
<div key="2" meow="wolf" />
<div key="3" />
<div {...props} key="4" />
</div>
</>
);

View File

@@ -6,11 +6,6 @@
"autoImport": "namedExports",
"runtime": "automatic"
}
],
"transform-react-jsx-source",
"transform-react-jsx-self"
],
"sourceType": "module",
"os": ["linux", "darwin"],
"throws": "__source and __self should not be defined in props. You are most likely using the deprecated transform-react-jsx-self or transform-react-jsx-source Babel plugins. __source and __self will be set automatically in automatic runtime. Please remove transform-react-jsx-self or transform-react-jsx-source from your Babel config."
]
]
}

View File

@@ -0,0 +1,14 @@
import { createElement as _createElement } from "react";
import { jsxs as _jsxs } from "react/jsx-runtime";
import { jsx as _jsx } from "react/jsx-runtime";
import { Fragment as _Fragment } from "react/jsx-runtime";
var x = /*#__PURE__*/_jsx(_Fragment, {
children: /*#__PURE__*/_jsxs("div", {
children: [/*#__PURE__*/_jsx("div", {}, "1"), /*#__PURE__*/_jsx("div", {
meow: "wolf"
}, "2"), /*#__PURE__*/_jsx("div", {}, "3"), /*#__PURE__*/_createElement("div", { ...props,
key: "4"
})]
})
});

View File

@@ -1,31 +0,0 @@
var actual = transform(
`/** @jsxRuntime classic */
var x = (
<>
<div>
<div key="1" />
<div key="2" meow="wolf" />
<div key="3" />
<div {...props} key="4" />
</div>
</>
);`,
Object.assign({}, opts, { filename: 'C:\\fake\\path\\mock.js' })
).code;
var expected =
`var _jsxFileName = "C:\\\\fake\\\\path\\\\mock.js";
/** @jsxRuntime classic */
var x = React.createElement(React.Fragment, null, React.createElement("div", null, React.createElement("div", {
key: "1"
}), React.createElement("div", {
key: "2",
meow: "wolf"
}), React.createElement("div", {
key: "3"
}), React.createElement("div", { ...props,
key: "4"
})));`;
expect(actual).toBe(expected);

View File

@@ -1,15 +0,0 @@
{
"plugins": [
[
"transform-react-jsx",
{
"runtime": "automatic"
}
],
"transform-react-jsx-source",
"transform-react-jsx-self"
],
"sourceType": "module",
"os": ["win32"],
"throws": "__source and __self should not be defined in props. You are most likely using the deprecated transform-react-jsx-self or transform-react-jsx-source Babel plugins. __source and __self will be set automatically in automatic runtime. Please remove transform-react-jsx-self or transform-react-jsx-source from your Babel config."
}

View File

@@ -1,31 +0,0 @@
var actual = transform(
`/** @jsxRuntime classic */
var x = (
<>
<div>
<div key="1" />
<div key="2" meow="wolf" />
<div key="3" />
<div {...props} key="4" />
</div>
</>
);`,
Object.assign({}, opts, { filename: '/fake/path/mock.js' })
).code;
var expected =
`var _jsxFileName = "/fake/path/mock.js";
/** @jsxRuntime classic */
var x = React.createElement(React.Fragment, null, React.createElement("div", null, React.createElement("div", {
key: "1"
}), React.createElement("div", {
key: "2",
meow: "wolf"
}), React.createElement("div", {
key: "3"
}), React.createElement("div", { ...props,
key: "4"
})));`;
expect(actual).toBe(expected);

View File

@@ -0,0 +1,11 @@
/** @jsxRuntime classic */
var x = (
<>
<div>
<div key="1" />
<div key="2" meow="wolf" />
<div key="3" />
<div {...props} key="4" />
</div>
</>
);

View File

@@ -1,15 +1,5 @@
{
"plugins": [
[
"transform-react-jsx",
{
"runtime": "automatic"
}
],
"transform-react-jsx-source",
"transform-react-jsx-self"
],
"sourceType": "module",
"os": ["linux", "darwin"],
"throws": "__source and __self should not be defined in props. You are most likely using the deprecated transform-react-jsx-self or transform-react-jsx-source Babel plugins. __source and __self will be set automatically in automatic runtime. Please remove transform-react-jsx-self or transform-react-jsx-source from your Babel config."
["transform-react-jsx", { "runtime": "automatic" }]
]
}

View File

@@ -0,0 +1,11 @@
/** @jsxRuntime classic */
var x = /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("div", {
key: "1"
}), /*#__PURE__*/React.createElement("div", {
key: "2",
meow: "wolf"
}), /*#__PURE__*/React.createElement("div", {
key: "3"
}), /*#__PURE__*/React.createElement("div", { ...props,
key: "4"
})));