Skip to content

Commit

Permalink
Fix ASI bug in react-hot-loader transform (#384)
Browse files Browse the repository at this point in the history
The specific pattern `export default function() {}` was transformed in such a
way that the parenthesized block afterword looked like a function invocation. To
avoid this, we can start the snippet with a semicolon.
  • Loading branch information
alangpierce committed Dec 31, 2018
1 parent 4f42a22 commit 69d9178
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 5 deletions.
2 changes: 1 addition & 1 deletion src/transformers/ReactHotLoaderTransformer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ export default class ReactHotLoaderTransformer extends Transformer {
});
}
return `
(function () {
;(function () {
var reactHotLoader = require('react-hot-loader').default;
var leaveModule = require('react-hot-loader').leaveModule;
if (!reactHotLoader) {
Expand Down
29 changes: 25 additions & 4 deletions test/react-hot-loader-test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ describe("transform react-hot-loader", () => {
let _default; exports. default = _default = 12;
(function () {
;(function () {
var reactHotLoader = require('react-hot-loader').default;
var leaveModule = require('react-hot-loader').leaveModule;
if (!reactHotLoader) {
Expand Down Expand Up @@ -141,7 +141,7 @@ describe("transform react-hot-loader", () => {
let _default; export default _default = 12;
(function () {
;(function () {
var reactHotLoader = require('react-hot-loader').default;
var leaveModule = require('react-hot-loader').leaveModule;
if (!reactHotLoader) {
Expand All @@ -167,7 +167,7 @@ describe("transform react-hot-loader", () => {
const f = (x) => x + 1;
(function () {
;(function () {
var reactHotLoader = require('react-hot-loader').default;
var leaveModule = require('react-hot-loader').leaveModule;
if (!reactHotLoader) {
Expand All @@ -188,7 +188,28 @@ describe("transform react-hot-loader", () => {
`${RHL_PREFIX}
export default function add() {}
(function () {
;(function () {
var reactHotLoader = require('react-hot-loader').default;
var leaveModule = require('react-hot-loader').leaveModule;
if (!reactHotLoader) {
return;
}
reactHotLoader.register(add, "add", "sample.tsx");
leaveModule(module);
})();`,
["typescript"],
);
});

it("guards against ASI issues by starting the suffix with a semicolon", () => {
assertESMResult(
`
export default function add() {}
`,
`${RHL_PREFIX}
export default function add() {}
;(function () {
var reactHotLoader = require('react-hot-loader').default;
var leaveModule = require('react-hot-loader').leaveModule;
if (!reactHotLoader) {
Expand Down

0 comments on commit 69d9178

Please sign in to comment.