From c435eaa242ece069d32c42880a5cc67c0d45d8ae Mon Sep 17 00:00:00 2001 From: Anton Korzunov Date: Thu, 4 Jul 2019 18:56:02 +1000 Subject: [PATCH] fix: babel plugin should use only extrernals hooks, fixes #1285 --- src/fresh/babel.js | 83 +- test/__babel_fixtures__/hooks.js | 10 + test/__snapshots__/babel.test.js.snap | 2447 +++++++++++++++++++++++++ 3 files changed, 2463 insertions(+), 77 deletions(-) create mode 100644 test/__snapshots__/babel.test.js.snap diff --git a/src/fresh/babel.js b/src/fresh/babel.js index 64836e3c8..27edf6714 100644 --- a/src/fresh/babel.js +++ b/src/fresh/babel.js @@ -193,7 +193,7 @@ export default function(babel) { } } - function getHookCallsSignature(functionNode) { + function getHookCallsSignature(functionNode, scope) { const fnHookCalls = hookCalls.get(functionNode); if (fnHookCalls === undefined) { return null; @@ -202,6 +202,7 @@ export default function(babel) { key: fnHookCalls.map(call => call.name + '{' + call.key + '}').join('\n'), customHooks: fnHookCalls .filter(call => !isBuiltinHook(call.name)) + .filter(call => scope.parent.hasBinding(call.name)) .map(call => t.cloneDeep(call.callee)), }; } @@ -240,6 +241,7 @@ export default function(babel) { return; } const fnScope = path.scope.getFunctionParent(); + if (fnScope === null) { return; } @@ -249,6 +251,7 @@ export default function(babel) { if (!hookCalls.has(fnNode)) { hookCalls.set(fnNode, []); } + let hookCallsForFn = hookCalls.get(fnNode); let key = ''; if (path.parent.type === 'VariableDeclarator') { @@ -384,7 +387,7 @@ export default function(babel) { if (id === null) { return; } - const signature = getHookCallsSignature(node); + const signature = getHookCallsSignature(node, path.scope); if (signature === null) { return; } @@ -424,7 +427,7 @@ export default function(babel) { 'ArrowFunctionExpression|FunctionExpression': { exit(path) { const node = path.node; - const signature = getHookCallsSignature(node); + const signature = getHookCallsSignature(node, path.scope); if (signature === null) { return; } @@ -474,80 +477,6 @@ export default function(babel) { } }, }, - VariableDeclaration(path) { - return; - const node = path.node; - let programPath; - let insertAfterPath; - switch (path.parent.type) { - case 'Program': - insertAfterPath = path; - programPath = path.parentPath; - break; - case 'ExportNamedDeclaration': - insertAfterPath = path.parentPath; - programPath = insertAfterPath.parentPath; - break; - case 'ExportDefaultDeclaration': - insertAfterPath = path.parentPath; - programPath = insertAfterPath.parentPath; - break; - default: - return; - } - - // Make sure we're not mutating the same tree twice. - // This can happen if another Babel plugin replaces parents. - if (seenForRegistration.has(node)) { - return; - } - seenForRegistration.add(node); - // Don't mutate the tree above this point. - - const declPaths = path.get('declarations'); - if (declPaths.length !== 1) { - return; - } - const declPath = declPaths[0]; - const inferredName = declPath.node.id.name; - findInnerComponents( - inferredName, - declPath, - (persistentID, targetExpr, targetPath) => { - if (targetPath === null) { - // For case like: - // export const Something = hoc(Foo) - // we don't want to wrap Foo inside the call. - // Instead we assume it's registered at definition. - return; - } - const handle = createRegistration(programPath, persistentID); - if ( - (targetExpr.type === 'ArrowFunctionExpression' || - targetExpr.type === 'FunctionExpression') && - targetPath.parent.type === 'VariableDeclarator' - ) { - // Special case when a function would get an inferred name: - // let Foo = () => {} - // let Foo = function() {} - // We'll register it on next line so that - // we don't mess up the inferred 'Foo' function name. - insertAfterPath.insertAfter( - t.expressionStatement( - t.assignmentExpression('=', handle, declPath.node.id), - ), - ); - // Result: let Foo = () => {}; _c1 = Foo; - } else { - // let Foo = hoc(() => {}) - targetPath.replaceWith( - t.assignmentExpression('=', handle, targetExpr), - ); - // Result: let Foo = _c1 = hoc(() => {}) - } - }, - ); - }, Program: { enter(path) { // This is a separate early visitor because we need to collect Hook calls diff --git a/test/__babel_fixtures__/hooks.js b/test/__babel_fixtures__/hooks.js index 14f33945c..6d2953217 100644 --- a/test/__babel_fixtures__/hooks.js +++ b/test/__babel_fixtures__/hooks.js @@ -42,6 +42,16 @@ const useCustomHookAgain = () => { useExternalHook(); }; +const useInnerHook = ({useHookFromProps}) => { + const useHookBase = () => useState(); + const useHook = () => useState(useHookFromProps(useHookBase())); + useHookFromProps(); + { + // sub scope + useHook(); + } +}; + function useFunc () { useState(42); useEffectHook(); diff --git a/test/__snapshots__/babel.test.js.snap b/test/__snapshots__/babel.test.js.snap new file mode 100644 index 000000000..ea1b9e1a5 --- /dev/null +++ b/test/__snapshots__/babel.test.js.snap @@ -0,0 +1,2447 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`babel Targetting "es2015" copies arrow function body block onto hidden class methods arguments.js 1`] = ` +"\\"use strict\\"; + +var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\\"value\\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); + +(function () { + var enterModule = (typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal : require('react-hot-loader')).enterModule; + enterModule && enterModule(module); +})(); + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\\"Cannot call a class as a function\\"); } } + +var __signature__ = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal.default.signature : function (a) { + return a; +}; + +var Foo = function () { + function Foo() { + var _arguments = arguments; + + _classCallCheck(this, Foo); + + this.bar = function (a, b) { + _arguments; + + return a(b); + }; + } + + _createClass(Foo, [{ + key: \\"__reactstandin__regenerateByEval\\", + // @ts-ignore + value: function __reactstandin__regenerateByEval(key, code) { + // @ts-ignore + this[key] = eval(code); + } + }]); + + return Foo; +}(); + +; + +(function () { + var reactHotLoader = (typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal : require('react-hot-loader')).default; + + if (!reactHotLoader) { + return; + } + + reactHotLoader.register(Foo, \\"Foo\\", __FILENAME__); +})(); + +; + +(function () { + var leaveModule = (typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal : require('react-hot-loader')).leaveModule; + leaveModule && leaveModule(module); +})();" +`; + +exports[`babel Targetting "es2015" copies arrow function body block onto hidden class methods arrow function in constructor.js 1`] = ` +"\\"use strict\\"; + +var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\\"value\\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); + +(function () { + var enterModule = (typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal : require('react-hot-loader')).enterModule; + enterModule && enterModule(module); +})(); + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\\"Cannot call a class as a function\\"); } } + +var __signature__ = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal.default.signature : function (a) { + return a; +}; + +var Foo = function () { + function Foo() { + _classCallCheck(this, Foo); + + this.onClick = function (e) { + return e.target.value; + }; + } + + _createClass(Foo, [{ + key: \\"__reactstandin__regenerateByEval\\", + // @ts-ignore + value: function __reactstandin__regenerateByEval(key, code) { + // @ts-ignore + this[key] = eval(code); + } + }]); + + return Foo; +}(); + +; + +(function () { + var reactHotLoader = (typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal : require('react-hot-loader')).default; + + if (!reactHotLoader) { + return; + } + + reactHotLoader.register(Foo, \\"Foo\\", __FILENAME__); +})(); + +; + +(function () { + var leaveModule = (typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal : require('react-hot-loader')).leaveModule; + leaveModule && leaveModule(module); +})();" +`; + +exports[`babel Targetting "es2015" copies arrow function body block onto hidden class methods async functions expression body.js 1`] = ` +"\\"use strict\\"; + +var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\\"value\\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); + +(function () { + var enterModule = (typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal : require('react-hot-loader')).enterModule; + enterModule && enterModule(module); +})(); + +function _asyncToGenerator(fn) { return function () { var gen = fn.apply(this, arguments); return new Promise(function (resolve, reject) { function step(key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { return Promise.resolve(value).then(function (value) { step(\\"next\\", value); }, function (err) { step(\\"throw\\", err); }); } } return step(\\"next\\"); }); }; } + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\\"Cannot call a class as a function\\"); } } + +var __signature__ = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal.default.signature : function (a) { + return a; +}; + +var Foo = function () { + function Foo() { + var _this = this; + + _classCallCheck(this, Foo); + + this.bar = function () { + var _ref = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee(a, b) { + return regeneratorRuntime.wrap(function _callee$(_context) { + while (1) { + switch (_context.prev = _context.next) { + case 0: + _context.next = 2; + return b(a); + + case 2: + return _context.abrupt(\\"return\\", _context.sent); + + case 3: + case \\"end\\": + return _context.stop(); + } + } + }, _callee, _this); + })); + + return function (_x, _x2) { + return _ref.apply(this, arguments); + }; + }(); + } + + _createClass(Foo, [{ + key: \\"__reactstandin__regenerateByEval\\", + // @ts-ignore + value: function __reactstandin__regenerateByEval(key, code) { + // @ts-ignore + this[key] = eval(code); + } + }]); + + return Foo; +}(); + +; + +(function () { + var reactHotLoader = (typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal : require('react-hot-loader')).default; + + if (!reactHotLoader) { + return; + } + + reactHotLoader.register(Foo, \\"Foo\\", __FILENAME__); +})(); + +; + +(function () { + var leaveModule = (typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal : require('react-hot-loader')).leaveModule; + leaveModule && leaveModule(module); +})();" +`; + +exports[`babel Targetting "es2015" copies arrow function body block onto hidden class methods async functions.js 1`] = ` +"\\"use strict\\"; + +var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\\"value\\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); + +(function () { + var enterModule = (typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal : require('react-hot-loader')).enterModule; + enterModule && enterModule(module); +})(); + +function _asyncToGenerator(fn) { return function () { var gen = fn.apply(this, arguments); return new Promise(function (resolve, reject) { function step(key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { return Promise.resolve(value).then(function (value) { step(\\"next\\", value); }, function (err) { step(\\"throw\\", err); }); } } return step(\\"next\\"); }); }; } + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\\"Cannot call a class as a function\\"); } } + +var __signature__ = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal.default.signature : function (a) { + return a; +}; + +var Foo = function () { + function Foo() { + var _this = this; + + _classCallCheck(this, Foo); + + this.bar = function () { + var _ref = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee(a, b) { + return regeneratorRuntime.wrap(function _callee$(_context) { + while (1) { + switch (_context.prev = _context.next) { + case 0: + _context.next = 2; + return a(b); + + case 2: + return _context.abrupt(\\"return\\", _context.sent); + + case 3: + case \\"end\\": + return _context.stop(); + } + } + }, _callee, _this); + })); + + return function (_x, _x2) { + return _ref.apply(this, arguments); + }; + }(); + } + + _createClass(Foo, [{ + key: \\"__reactstandin__regenerateByEval\\", + // @ts-ignore + value: function __reactstandin__regenerateByEval(key, code) { + // @ts-ignore + this[key] = eval(code); + } + }]); + + return Foo; +}(); + +; + +(function () { + var reactHotLoader = (typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal : require('react-hot-loader')).default; + + if (!reactHotLoader) { + return; + } + + reactHotLoader.register(Foo, \\"Foo\\", __FILENAME__); +})(); + +; + +(function () { + var leaveModule = (typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal : require('react-hot-loader')).leaveModule; + leaveModule && leaveModule(module); +})();" +`; + +exports[`babel Targetting "es2015" copies arrow function body block onto hidden class methods block body.js 1`] = ` +"\\"use strict\\"; + +var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\\"value\\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); + +(function () { + var enterModule = (typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal : require('react-hot-loader')).enterModule; + enterModule && enterModule(module); +})(); + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\\"Cannot call a class as a function\\"); } } + +var __signature__ = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal.default.signature : function (a) { + return a; +}; + +var Foo = function () { + function Foo() { + _classCallCheck(this, Foo); + + this.bar = function (a, b) { + return a(b); + }; + } + + _createClass(Foo, [{ + key: \\"__reactstandin__regenerateByEval\\", + // @ts-ignore + value: function __reactstandin__regenerateByEval(key, code) { + // @ts-ignore + this[key] = eval(code); + } + }]); + + return Foo; +}(); + +; + +(function () { + var reactHotLoader = (typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal : require('react-hot-loader')).default; + + if (!reactHotLoader) { + return; + } + + reactHotLoader.register(Foo, \\"Foo\\", __FILENAME__); +})(); + +; + +(function () { + var leaveModule = (typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal : require('react-hot-loader')).leaveModule; + leaveModule && leaveModule(module); +})();" +`; + +exports[`babel Targetting "es2015" copies arrow function body block onto hidden class methods default params.js 1`] = ` +"\\"use strict\\"; + +var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\\"value\\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); + +(function () { + var enterModule = (typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal : require('react-hot-loader')).enterModule; + enterModule && enterModule(module); +})(); + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\\"Cannot call a class as a function\\"); } } + +var __signature__ = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal.default.signature : function (a) { + return a; +}; + +var Foo = function () { + function Foo() { + _classCallCheck(this, Foo); + + this.bar = function () { + var a = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : \\"foo\\"; + + return a + \\"bar\\"; + }; + } + + _createClass(Foo, [{ + key: \\"__reactstandin__regenerateByEval\\", + // @ts-ignore + value: function __reactstandin__regenerateByEval(key, code) { + // @ts-ignore + this[key] = eval(code); + } + }]); + + return Foo; +}(); + +; + +(function () { + var reactHotLoader = (typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal : require('react-hot-loader')).default; + + if (!reactHotLoader) { + return; + } + + reactHotLoader.register(Foo, \\"Foo\\", __FILENAME__); +})(); + +; + +(function () { + var leaveModule = (typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal : require('react-hot-loader')).leaveModule; + leaveModule && leaveModule(module); +})();" +`; + +exports[`babel Targetting "es2015" copies arrow function body block onto hidden class methods destructured params.js 1`] = ` +"\\"use strict\\"; + +var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\\"value\\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); + +(function () { + var enterModule = (typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal : require('react-hot-loader')).enterModule; + enterModule && enterModule(module); +})(); + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\\"Cannot call a class as a function\\"); } } + +var __signature__ = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal.default.signature : function (a) { + return a; +}; + +var Foo = function () { + function Foo() { + _classCallCheck(this, Foo); + + this.bar = function (_ref, _ref2) { + var a = _ref.a; + var b = _ref2.b; + + return \\"\\" + a + b; + }; + } + + _createClass(Foo, [{ + key: \\"__reactstandin__regenerateByEval\\", + // @ts-ignore + value: function __reactstandin__regenerateByEval(key, code) { + // @ts-ignore + this[key] = eval(code); + } + }]); + + return Foo; +}(); + +; + +(function () { + var reactHotLoader = (typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal : require('react-hot-loader')).default; + + if (!reactHotLoader) { + return; + } + + reactHotLoader.register(Foo, \\"Foo\\", __FILENAME__); +})(); + +; + +(function () { + var leaveModule = (typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal : require('react-hot-loader')).leaveModule; + leaveModule && leaveModule(module); +})();" +`; + +exports[`babel Targetting "es2015" copies arrow function body block onto hidden class methods expression body.js 1`] = ` +"\\"use strict\\"; + +var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\\"value\\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); + +(function () { + var enterModule = (typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal : require('react-hot-loader')).enterModule; + enterModule && enterModule(module); +})(); + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\\"Cannot call a class as a function\\"); } } + +var __signature__ = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal.default.signature : function (a) { + return a; +}; + +var Foo = function () { + function Foo() { + _classCallCheck(this, Foo); + + this.onClick = function (e) { + return e.target.value; + }; + } + + _createClass(Foo, [{ + key: \\"__reactstandin__regenerateByEval\\", + // @ts-ignore + value: function __reactstandin__regenerateByEval(key, code) { + // @ts-ignore + this[key] = eval(code); + } + }]); + + return Foo; +}(); + +; + +(function () { + var reactHotLoader = (typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal : require('react-hot-loader')).default; + + if (!reactHotLoader) { + return; + } + + reactHotLoader.register(Foo, \\"Foo\\", __FILENAME__); +})(); + +; + +(function () { + var leaveModule = (typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal : require('react-hot-loader')).leaveModule; + leaveModule && leaveModule(module); +})();" +`; + +exports[`babel Targetting "es2015" copies arrow function body block onto hidden class methods nested arguments.js 1`] = ` +"\\"use strict\\"; + +var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\\"value\\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); + +(function () { + var enterModule = (typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal : require('react-hot-loader')).enterModule; + enterModule && enterModule(module); +})(); + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\\"Cannot call a class as a function\\"); } } + +var __signature__ = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal.default.signature : function (a) { + return a; +}; + +var Foo = function () { + function Foo() { + var _arguments = arguments; + + _classCallCheck(this, Foo); + + this.bar = function (a, b) { + (function () { + _arguments; + }); + + return a(b); + }; + } + + _createClass(Foo, [{ + key: \\"__reactstandin__regenerateByEval\\", + // @ts-ignore + value: function __reactstandin__regenerateByEval(key, code) { + // @ts-ignore + this[key] = eval(code); + } + }]); + + return Foo; +}(); + +; + +(function () { + var reactHotLoader = (typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal : require('react-hot-loader')).default; + + if (!reactHotLoader) { + return; + } + + reactHotLoader.register(Foo, \\"Foo\\", __FILENAME__); +})(); + +; + +(function () { + var leaveModule = (typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal : require('react-hot-loader')).leaveModule; + leaveModule && leaveModule(module); +})();" +`; + +exports[`babel Targetting "es2015" copies arrow function body block onto hidden class methods nested new.target.js 1`] = ` +"\\"use strict\\"; + +var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\\"value\\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); + +(function () { + var enterModule = (typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal : require('react-hot-loader')).enterModule; + enterModule && enterModule(module); +})(); + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\\"Cannot call a class as a function\\"); } } + +var __signature__ = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal.default.signature : function (a) { + return a; +}; + +var Foo = function () { + function Foo() { + _classCallCheck(this, Foo); + + this.bar = function (a, b) { + (function () { + new.target; + }); + + return a(b); + }; + } + + _createClass(Foo, [{ + key: \\"__reactstandin__regenerateByEval\\", + // @ts-ignore + value: function __reactstandin__regenerateByEval(key, code) { + // @ts-ignore + this[key] = eval(code); + } + }]); + + return Foo; +}(); + +; + +(function () { + var reactHotLoader = (typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal : require('react-hot-loader')).default; + + if (!reactHotLoader) { + return; + } + + reactHotLoader.register(Foo, \\"Foo\\", __FILENAME__); +})(); + +; + +(function () { + var leaveModule = (typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal : require('react-hot-loader')).leaveModule; + leaveModule && leaveModule(module); +})();" +`; + +exports[`babel Targetting "es2015" copies arrow function body block onto hidden class methods new.target.js 1`] = ` +"\\"use strict\\"; + +var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\\"value\\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); + +(function () { + var enterModule = (typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal : require('react-hot-loader')).enterModule; + enterModule && enterModule(module); +})(); + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\\"Cannot call a class as a function\\"); } } + +var __signature__ = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal.default.signature : function (a) { + return a; +}; + +var Foo = function () { + function Foo() { + _classCallCheck(this, Foo); + + this.bar = function (a, b) { + new.target; + + return a(b); + }; + } + + _createClass(Foo, [{ + key: \\"__reactstandin__regenerateByEval\\", + // @ts-ignore + value: function __reactstandin__regenerateByEval(key, code) { + // @ts-ignore + this[key] = eval(code); + } + }]); + + return Foo; +}(); + +; + +(function () { + var reactHotLoader = (typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal : require('react-hot-loader')).default; + + if (!reactHotLoader) { + return; + } + + reactHotLoader.register(Foo, \\"Foo\\", __FILENAME__); +})(); + +; + +(function () { + var leaveModule = (typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal : require('react-hot-loader')).leaveModule; + leaveModule && leaveModule(module); +})();" +`; + +exports[`babel Targetting "es2015" copies arrow function body block onto hidden class methods not a function.js 1`] = ` +"\\"use strict\\"; + +var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\\"value\\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); + +(function () { + var enterModule = (typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal : require('react-hot-loader')).enterModule; + enterModule && enterModule(module); +})(); + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\\"Cannot call a class as a function\\"); } } + +var __signature__ = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal.default.signature : function (a) { + return a; +}; + +var Foo = function () { + function Foo() { + _classCallCheck(this, Foo); + + this.bar = 2; + } + + _createClass(Foo, [{ + key: \\"__reactstandin__regenerateByEval\\", + // @ts-ignore + value: function __reactstandin__regenerateByEval(key, code) { + // @ts-ignore + this[key] = eval(code); + } + }]); + + return Foo; +}(); + +; + +(function () { + var reactHotLoader = (typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal : require('react-hot-loader')).default; + + if (!reactHotLoader) { + return; + } + + reactHotLoader.register(Foo, \\"Foo\\", __FILENAME__); +})(); + +; + +(function () { + var leaveModule = (typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal : require('react-hot-loader')).leaveModule; + leaveModule && leaveModule(module); +})();" +`; + +exports[`babel Targetting "es2015" copies arrow function body block onto hidden class methods not an arrow function.js 1`] = ` +"\\"use strict\\"; + +var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\\"value\\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); + +(function () { + var enterModule = (typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal : require('react-hot-loader')).enterModule; + enterModule && enterModule(module); +})(); + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\\"Cannot call a class as a function\\"); } } + +var __signature__ = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal.default.signature : function (a) { + return a; +}; + +var Foo = function () { + function Foo() { + _classCallCheck(this, Foo); + + this.bar = function (a, b) { + return a(b); + }; + } + + _createClass(Foo, [{ + key: \\"__reactstandin__regenerateByEval\\", + // @ts-ignore + value: function __reactstandin__regenerateByEval(key, code) { + // @ts-ignore + this[key] = eval(code); + } + }]); + + return Foo; +}(); + +; + +(function () { + var reactHotLoader = (typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal : require('react-hot-loader')).default; + + if (!reactHotLoader) { + return; + } + + reactHotLoader.register(Foo, \\"Foo\\", __FILENAME__); +})(); + +; + +(function () { + var leaveModule = (typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal : require('react-hot-loader')).leaveModule; + leaveModule && leaveModule(module); +})();" +`; + +exports[`babel Targetting "es2015" copies arrow function body block onto hidden class methods same name as class method.js 1`] = ` +"\\"use strict\\"; + +var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\\"value\\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); + +(function () { + var enterModule = (typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal : require('react-hot-loader')).enterModule; + enterModule && enterModule(module); +})(); + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\\"Cannot call a class as a function\\"); } } + +var __signature__ = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal.default.signature : function (a) { + return a; +}; + +var Foo = function () { + function Foo() { + _classCallCheck(this, Foo); + + this.bar = function (a, b) { + return a(b); + }; + } + + _createClass(Foo, [{ + key: \\"bar\\", + value: function bar() { + return 2; + } + }, { + key: \\"__reactstandin__regenerateByEval\\", + // @ts-ignore + value: function __reactstandin__regenerateByEval(key, code) { + // @ts-ignore + this[key] = eval(code); + } + }]); + + return Foo; +}(); + +; + +(function () { + var reactHotLoader = (typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal : require('react-hot-loader')).default; + + if (!reactHotLoader) { + return; + } + + reactHotLoader.register(Foo, \\"Foo\\", __FILENAME__); +})(); + +; + +(function () { + var leaveModule = (typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal : require('react-hot-loader')).leaveModule; + leaveModule && leaveModule(module); +})();" +`; + +exports[`babel Targetting "es2015" copies arrow function body block onto hidden class methods static property.js 1`] = ` +"\\"use strict\\"; + +(function () { + var enterModule = (typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal : require('react-hot-loader')).enterModule; + enterModule && enterModule(module); +})(); + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\\"Cannot call a class as a function\\"); } } + +var __signature__ = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal.default.signature : function (a) { + return a; +}; + +var Foo = function Foo() { + _classCallCheck(this, Foo); +}; + +Foo.bar = function (a, b) { + return a(b); +}; + +; + +(function () { + var reactHotLoader = (typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal : require('react-hot-loader')).default; + + if (!reactHotLoader) { + return; + } + + reactHotLoader.register(Foo, \\"Foo\\", __FILENAME__); +})(); + +; + +(function () { + var leaveModule = (typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal : require('react-hot-loader')).leaveModule; + leaveModule && leaveModule(module); +})();" +`; + +exports[`babel Targetting "es2015" tags potential React components bindings.js 1`] = ` +"\\"use strict\\"; + +Object.defineProperty(exports, \\"__esModule\\", { + value: true +}); +exports.C = undefined; + +var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\\"value\\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); + +var _leftPad = require(\\"left-pad\\"); + +var _leftPad2 = _interopRequireDefault(_leftPad); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +(function () { + var enterModule = (typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal : require('react-hot-loader')).enterModule; + enterModule && enterModule(module); +})(); + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\\"Cannot call a class as a function\\"); } } + +var __signature__ = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal.default.signature : function (a) { + return a; +}; + +var A = 42; +function B() { + function R() {} + + var S = function S() { + _classCallCheck(this, S); + }; + + var T = 42; +} + +var C = exports.C = function () { + function C() { + _classCallCheck(this, C); + } + + _createClass(C, [{ + key: \\"U\\", + value: function U() { + function V() { + var W = function W() { + _classCallCheck(this, W); + }; + } + } + }, { + key: \\"__reactstandin__regenerateByEval\\", + // @ts-ignore + value: function __reactstandin__regenerateByEval(key, code) { + // @ts-ignore + this[key] = eval(code); + } + }]); + + return C; +}(); + +var D = function X() { + _classCallCheck(this, X); +}; +var E = D; +var Y = require(\\"left-pad\\"); + +var _require = require(\\"left-pad\\"), + Z = _require.Z; + +var _default = React.createClass({ + displayName: \\"_default\\" +}); + +exports.default = _default; +; + +(function () { + var reactHotLoader = (typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal : require('react-hot-loader')).default; + + if (!reactHotLoader) { + return; + } + + reactHotLoader.register(A, \\"A\\", __FILENAME__); + reactHotLoader.register(B, \\"B\\", __FILENAME__); + reactHotLoader.register(C, \\"C\\", __FILENAME__); + reactHotLoader.register(D, \\"D\\", __FILENAME__); + reactHotLoader.register(E, \\"E\\", __FILENAME__); + reactHotLoader.register(_default, \\"default\\", __FILENAME__); +})(); + +; + +(function () { + var leaveModule = (typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal : require('react-hot-loader')).leaveModule; + leaveModule && leaveModule(module); +})();" +`; + +exports[`babel Targetting "es2015" tags potential React components counter.js 1`] = ` +"\\"use strict\\"; + +Object.defineProperty(exports, \\"__esModule\\", { + value: true +}); + +(function () { + var enterModule = (typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal : require('react-hot-loader')).enterModule; + enterModule && enterModule(module); +})(); + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\\"Cannot call a class as a function\\"); } } + +var __signature__ = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal.default.signature : function (a) { + return a; +}; + +var Counter = function Counter() { + _classCallCheck(this, Counter); +}; + +var _default = function _default() { + return React.createElement( + \\"div\\", + null, + React.createElement(Counter, null) + ); +}; + +exports.default = _default; +; + +(function () { + var reactHotLoader = (typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal : require('react-hot-loader')).default; + + if (!reactHotLoader) { + return; + } + + reactHotLoader.register(Counter, \\"Counter\\", __FILENAME__); + reactHotLoader.register(_default, \\"default\\", __FILENAME__); +})(); + +; + +(function () { + var leaveModule = (typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal : require('react-hot-loader')).leaveModule; + leaveModule && leaveModule(module); +})();" +`; + +exports[`babel Targetting "es2015" tags potential React components drop hot.prod.js 1`] = ` +"'use strict'; + +Object.defineProperty(exports, \\"__esModule\\", { + value: true +}); +exports.z = exports.e = exports.d = exports.c = exports.b = exports.a = undefined; + +var _react = require('react'); + +var _react2 = _interopRequireDefault(_react); + +var _reactHotLoader = require('react-hot-loader'); + +var RHL = _interopRequireWildcard(_reactHotLoader); + +var RHL2 = _interopRequireWildcard(_reactHotLoader); + +var _root = require('react-hot-loader/root'); + +var _notReactHotLoader = require('not-react-hot-loader'); + +var NOTRHL = _interopRequireWildcard(_notReactHotLoader); + +function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var App = function App() { + return _react2.default.createElement( + 'div', + null, + 'Hello World!' + ); +}; + +var a = App; +var z = App; +var b = App; +var c = App; +var d = App; +var e = App; + +(0, _reactHotLoader.foo)(module)(App); +(0, _notReactHotLoader.hot)(module)(App); +(0, _reactHotLoader.foo)(module)(App); +RHL.foo(module)(App); +NOTRHL.hot(module)(App); + +// should not drop incomplete reference +(0, _reactHotLoader.foo)(module); + +exports.a = a; +exports.b = b; +exports.c = c; +exports.d = d; +exports.e = e; +exports.z = z;" +`; + +exports[`babel Targetting "es2015" tags potential React components hooks.js 1`] = ` +"'use strict'; + +var _react = require('react'); + +var _react2 = _interopRequireDefault(_react); + +var _externalHook = require('external-hook'); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +(function () { + var enterModule = (typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal : require('react-hot-loader')).enterModule; + enterModule && enterModule(module); +})(); + +var __signature__ = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal.default.signature : function (a) { + return a; +}; + +var NoHooks = function NoHooks() { + return _react2.default.createElement( + 'div', + null, + 'no hooks' + ); +}; + +var UseStateHook = function UseStateHook() { + (0, _react.useState)(42); +}; + +__signature__(UseStateHook, 'useState{(42)}'); + +var UseStateHooks = function UseStateHooks() { + (0, _react.useState)(42); + (0, _react.useState)(24); +}; + +__signature__(UseStateHooks, 'useState{(42)}\\\\nuseState{(24)}'); + +var useEffectHook = function useEffectHook() { + _react2.default.useEffect(function () { + return {}; + }); + (0, _react.useState)(24); + _react2.default.useState(42); +}; + +__signature__(useEffectHook, 'useEffect{}\\\\nuseState{(24)}\\\\nuseState{(42)}'); + +var useForwardRefHook = _react2.default.forwardRef(__signature__(function () { + _react2.default.useEffect(function () { + return {}; + }); + (0, _react.useState)(24); + _react2.default.useState(42); +}, 'useEffect{}\\\\nuseState{(24)}\\\\nuseState{(42)}')); + +var useForwardRefFunctionHook = _react2.default.forwardRef(__signature__(function () { + _react2.default.useEffect(function () { + return {}; + }); + (0, _react.useState)(24); + _react2.default.useState(42); +}, 'useEffect{}\\\\nuseState{(24)}\\\\nuseState{(42)}')); + +var useCustomHook = function useCustomHook() { + (0, _react.useState)(42); + useEffectHook(); + (0, _externalHook.useExternalHook)(); +}; + +__signature__(useCustomHook, 'useState{(42)}\\\\nuseEffectHook{}\\\\nuseExternalHook{}', function () { + return [useEffectHook, _externalHook.useExternalHook]; +}); + +var useCustomHookAgain = function useCustomHookAgain() { + (0, _react.useState)(42); + useEffectHook(); + (0, _externalHook.useExternalHook)(); +}; + +__signature__(useCustomHookAgain, 'useState{(42)}\\\\nuseEffectHook{}\\\\nuseExternalHook{}', function () { + return [useEffectHook, _externalHook.useExternalHook]; +}); + +var useInnerHook = function useInnerHook(_ref) { + var useHookFromProps = _ref.useHookFromProps; + + var useHookBase = function useHookBase() { + return (0, _react.useState)(); + }; + + __signature__(useHookBase, 'useState{}'); + + var useHook = function useHook() { + return (0, _react.useState)(useHookFromProps(useHookBase())); + }; + + __signature__(useHook, 'useState{(useHookFromProps(useHookBase()))}\\\\nuseHookFromProps{}\\\\nuseHookBase{}', function () { + return [useHookFromProps, useHookBase]; + }); + + useHookFromProps(); + { + // sub scope + useHook(); + } +}; + +__signature__(useInnerHook, 'useHookFromProps{}\\\\nuseHook{}'); + +function useFunc() { + (0, _react.useState)(42); + useEffectHook(); +} +__signature__(useFunc, 'useState{(42)}\\\\nuseEffectHook{}', function () { + return [useEffectHook]; +}); + +; +; + +(function () { + var reactHotLoader = (typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal : require('react-hot-loader')).default; + + if (!reactHotLoader) { + return; + } + + reactHotLoader.register(NoHooks, 'NoHooks', __FILENAME__); + reactHotLoader.register(UseStateHook, 'UseStateHook', __FILENAME__); + reactHotLoader.register(UseStateHooks, 'UseStateHooks', __FILENAME__); + reactHotLoader.register(useEffectHook, 'useEffectHook', __FILENAME__); + reactHotLoader.register(useForwardRefHook, 'useForwardRefHook', __FILENAME__); + reactHotLoader.register(useForwardRefFunctionHook, 'useForwardRefFunctionHook', __FILENAME__); + reactHotLoader.register(useCustomHook, 'useCustomHook', __FILENAME__); + reactHotLoader.register(useCustomHookAgain, 'useCustomHookAgain', __FILENAME__); + reactHotLoader.register(useInnerHook, 'useInnerHook', __FILENAME__); + reactHotLoader.register(useFunc, 'useFunc', __FILENAME__); +})(); + +; + +(function () { + var leaveModule = (typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal : require('react-hot-loader')).leaveModule; + leaveModule && leaveModule(module); +})();" +`; + +exports[`babel Targetting "es2015" tags potential React components issue 246.js 1`] = ` +"\\"use strict\\"; + +Object.defineProperty(exports, \\"__esModule\\", { + value: true +}); +exports.spread = spread; + +(function () { + var enterModule = (typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal : require('react-hot-loader')).enterModule; + enterModule && enterModule(module); +})(); + +var __signature__ = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal.default.signature : function (a) { + return a; +}; + +function spread() { + for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } + + return args.push(1); +} +; + +(function () { + var reactHotLoader = (typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal : require('react-hot-loader')).default; + + if (!reactHotLoader) { + return; + } + + reactHotLoader.register(spread, \\"spread\\", __FILENAME__); +})(); + +; + +(function () { + var leaveModule = (typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal : require('react-hot-loader')).leaveModule; + leaveModule && leaveModule(module); +})();" +`; + +exports[`babel Targetting "es2015" tags potential React components name clash.js 1`] = ` +"\\"use strict\\"; + +Object.defineProperty(exports, \\"__esModule\\", { + value: true +}); + +(function () { + var enterModule = (typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal : require('react-hot-loader')).enterModule; + enterModule && enterModule(module); +})(); + +var __signature__ = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal.default.signature : function (a) { + return a; +}; + +var _default = 10; +var _default2 = 42; +exports.default = _default2; +; + +(function () { + var reactHotLoader = (typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal : require('react-hot-loader')).default; + + if (!reactHotLoader) { + return; + } + + reactHotLoader.register(_default, \\"_default\\", __FILENAME__); + reactHotLoader.register(_default2, \\"default\\", __FILENAME__); +})(); + +; + +(function () { + var leaveModule = (typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal : require('react-hot-loader')).leaveModule; + leaveModule && leaveModule(module); +})();" +`; + +exports[`babel Targetting "modern" copies arrow function body block onto hidden class methods arguments.js 1`] = ` +"\\"use strict\\"; + +(function () { + var enterModule = (typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal : require('react-hot-loader')).enterModule; + enterModule && enterModule(module); +})(); + +var __signature__ = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal.default.signature : function (a) { + return a; +}; + +class Foo { + constructor() { + this.bar = (a, b) => { + arguments; + + return a(b); + }; + } + + // @ts-ignore + __reactstandin__regenerateByEval(key, code) { + // @ts-ignore + this[key] = eval(code); + } + +} +; + +(function () { + var reactHotLoader = (typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal : require('react-hot-loader')).default; + + if (!reactHotLoader) { + return; + } + + reactHotLoader.register(Foo, \\"Foo\\", __FILENAME__); +})(); + +; + +(function () { + var leaveModule = (typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal : require('react-hot-loader')).leaveModule; + leaveModule && leaveModule(module); +})();" +`; + +exports[`babel Targetting "modern" copies arrow function body block onto hidden class methods arrow function in constructor.js 1`] = ` +"\\"use strict\\"; + +(function () { + var enterModule = (typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal : require('react-hot-loader')).enterModule; + enterModule && enterModule(module); +})(); + +var __signature__ = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal.default.signature : function (a) { + return a; +}; + +class Foo { + constructor() { + this.onClick = e => e.target.value; + } + + // @ts-ignore + __reactstandin__regenerateByEval(key, code) { + // @ts-ignore + this[key] = eval(code); + } + +} +; + +(function () { + var reactHotLoader = (typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal : require('react-hot-loader')).default; + + if (!reactHotLoader) { + return; + } + + reactHotLoader.register(Foo, \\"Foo\\", __FILENAME__); +})(); + +; + +(function () { + var leaveModule = (typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal : require('react-hot-loader')).leaveModule; + leaveModule && leaveModule(module); +})();" +`; + +exports[`babel Targetting "modern" copies arrow function body block onto hidden class methods async functions expression body.js 1`] = ` +"\\"use strict\\"; + +(function () { + var enterModule = (typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal : require('react-hot-loader')).enterModule; + enterModule && enterModule(module); +})(); + +var __signature__ = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal.default.signature : function (a) { + return a; +}; + +class Foo { + constructor() { + this.bar = async (a, b) => await b(a); + } + + // @ts-ignore + __reactstandin__regenerateByEval(key, code) { + // @ts-ignore + this[key] = eval(code); + } + +} +; + +(function () { + var reactHotLoader = (typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal : require('react-hot-loader')).default; + + if (!reactHotLoader) { + return; + } + + reactHotLoader.register(Foo, \\"Foo\\", __FILENAME__); +})(); + +; + +(function () { + var leaveModule = (typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal : require('react-hot-loader')).leaveModule; + leaveModule && leaveModule(module); +})();" +`; + +exports[`babel Targetting "modern" copies arrow function body block onto hidden class methods async functions.js 1`] = ` +"\\"use strict\\"; + +(function () { + var enterModule = (typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal : require('react-hot-loader')).enterModule; + enterModule && enterModule(module); +})(); + +var __signature__ = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal.default.signature : function (a) { + return a; +}; + +class Foo { + constructor() { + this.bar = async (a, b) => { + return await a(b); + }; + } + + // @ts-ignore + __reactstandin__regenerateByEval(key, code) { + // @ts-ignore + this[key] = eval(code); + } + +} +; + +(function () { + var reactHotLoader = (typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal : require('react-hot-loader')).default; + + if (!reactHotLoader) { + return; + } + + reactHotLoader.register(Foo, \\"Foo\\", __FILENAME__); +})(); + +; + +(function () { + var leaveModule = (typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal : require('react-hot-loader')).leaveModule; + leaveModule && leaveModule(module); +})();" +`; + +exports[`babel Targetting "modern" copies arrow function body block onto hidden class methods block body.js 1`] = ` +"\\"use strict\\"; + +(function () { + var enterModule = (typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal : require('react-hot-loader')).enterModule; + enterModule && enterModule(module); +})(); + +var __signature__ = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal.default.signature : function (a) { + return a; +}; + +class Foo { + constructor() { + this.bar = (a, b) => { + return a(b); + }; + } + + // @ts-ignore + __reactstandin__regenerateByEval(key, code) { + // @ts-ignore + this[key] = eval(code); + } + +} +; + +(function () { + var reactHotLoader = (typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal : require('react-hot-loader')).default; + + if (!reactHotLoader) { + return; + } + + reactHotLoader.register(Foo, \\"Foo\\", __FILENAME__); +})(); + +; + +(function () { + var leaveModule = (typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal : require('react-hot-loader')).leaveModule; + leaveModule && leaveModule(module); +})();" +`; + +exports[`babel Targetting "modern" copies arrow function body block onto hidden class methods default params.js 1`] = ` +"\\"use strict\\"; + +(function () { + var enterModule = (typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal : require('react-hot-loader')).enterModule; + enterModule && enterModule(module); +})(); + +var __signature__ = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal.default.signature : function (a) { + return a; +}; + +class Foo { + constructor() { + this.bar = (a = \\"foo\\") => { + return \`\${a}bar\`; + }; + } + + // @ts-ignore + __reactstandin__regenerateByEval(key, code) { + // @ts-ignore + this[key] = eval(code); + } + +} +; + +(function () { + var reactHotLoader = (typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal : require('react-hot-loader')).default; + + if (!reactHotLoader) { + return; + } + + reactHotLoader.register(Foo, \\"Foo\\", __FILENAME__); +})(); + +; + +(function () { + var leaveModule = (typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal : require('react-hot-loader')).leaveModule; + leaveModule && leaveModule(module); +})();" +`; + +exports[`babel Targetting "modern" copies arrow function body block onto hidden class methods destructured params.js 1`] = ` +"\\"use strict\\"; + +(function () { + var enterModule = (typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal : require('react-hot-loader')).enterModule; + enterModule && enterModule(module); +})(); + +var __signature__ = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal.default.signature : function (a) { + return a; +}; + +class Foo { + constructor() { + this.bar = ({ a }, { b }) => { + return \`\${a}\${b}\`; + }; + } + + // @ts-ignore + __reactstandin__regenerateByEval(key, code) { + // @ts-ignore + this[key] = eval(code); + } + +} +; + +(function () { + var reactHotLoader = (typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal : require('react-hot-loader')).default; + + if (!reactHotLoader) { + return; + } + + reactHotLoader.register(Foo, \\"Foo\\", __FILENAME__); +})(); + +; + +(function () { + var leaveModule = (typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal : require('react-hot-loader')).leaveModule; + leaveModule && leaveModule(module); +})();" +`; + +exports[`babel Targetting "modern" copies arrow function body block onto hidden class methods expression body.js 1`] = ` +"\\"use strict\\"; + +(function () { + var enterModule = (typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal : require('react-hot-loader')).enterModule; + enterModule && enterModule(module); +})(); + +var __signature__ = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal.default.signature : function (a) { + return a; +}; + +class Foo { + constructor() { + this.onClick = e => e.target.value; + } + + // @ts-ignore + __reactstandin__regenerateByEval(key, code) { + // @ts-ignore + this[key] = eval(code); + } + +} +; + +(function () { + var reactHotLoader = (typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal : require('react-hot-loader')).default; + + if (!reactHotLoader) { + return; + } + + reactHotLoader.register(Foo, \\"Foo\\", __FILENAME__); +})(); + +; + +(function () { + var leaveModule = (typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal : require('react-hot-loader')).leaveModule; + leaveModule && leaveModule(module); +})();" +`; + +exports[`babel Targetting "modern" copies arrow function body block onto hidden class methods nested arguments.js 1`] = ` +"\\"use strict\\"; + +(function () { + var enterModule = (typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal : require('react-hot-loader')).enterModule; + enterModule && enterModule(module); +})(); + +var __signature__ = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal.default.signature : function (a) { + return a; +}; + +class Foo { + constructor() { + this.bar = (a, b) => { + () => { + arguments; + }; + + return a(b); + }; + } + + // @ts-ignore + __reactstandin__regenerateByEval(key, code) { + // @ts-ignore + this[key] = eval(code); + } + +} +; + +(function () { + var reactHotLoader = (typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal : require('react-hot-loader')).default; + + if (!reactHotLoader) { + return; + } + + reactHotLoader.register(Foo, \\"Foo\\", __FILENAME__); +})(); + +; + +(function () { + var leaveModule = (typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal : require('react-hot-loader')).leaveModule; + leaveModule && leaveModule(module); +})();" +`; + +exports[`babel Targetting "modern" copies arrow function body block onto hidden class methods nested new.target.js 1`] = ` +"\\"use strict\\"; + +(function () { + var enterModule = (typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal : require('react-hot-loader')).enterModule; + enterModule && enterModule(module); +})(); + +var __signature__ = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal.default.signature : function (a) { + return a; +}; + +class Foo { + constructor() { + this.bar = (a, b) => { + () => { + new.target; + }; + + return a(b); + }; + } + + // @ts-ignore + __reactstandin__regenerateByEval(key, code) { + // @ts-ignore + this[key] = eval(code); + } + +} +; + +(function () { + var reactHotLoader = (typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal : require('react-hot-loader')).default; + + if (!reactHotLoader) { + return; + } + + reactHotLoader.register(Foo, \\"Foo\\", __FILENAME__); +})(); + +; + +(function () { + var leaveModule = (typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal : require('react-hot-loader')).leaveModule; + leaveModule && leaveModule(module); +})();" +`; + +exports[`babel Targetting "modern" copies arrow function body block onto hidden class methods new.target.js 1`] = ` +"\\"use strict\\"; + +(function () { + var enterModule = (typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal : require('react-hot-loader')).enterModule; + enterModule && enterModule(module); +})(); + +var __signature__ = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal.default.signature : function (a) { + return a; +}; + +class Foo { + constructor() { + this.bar = (a, b) => { + new.target; + + return a(b); + }; + } + + // @ts-ignore + __reactstandin__regenerateByEval(key, code) { + // @ts-ignore + this[key] = eval(code); + } + +} +; + +(function () { + var reactHotLoader = (typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal : require('react-hot-loader')).default; + + if (!reactHotLoader) { + return; + } + + reactHotLoader.register(Foo, \\"Foo\\", __FILENAME__); +})(); + +; + +(function () { + var leaveModule = (typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal : require('react-hot-loader')).leaveModule; + leaveModule && leaveModule(module); +})();" +`; + +exports[`babel Targetting "modern" copies arrow function body block onto hidden class methods not a function.js 1`] = ` +"\\"use strict\\"; + +(function () { + var enterModule = (typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal : require('react-hot-loader')).enterModule; + enterModule && enterModule(module); +})(); + +var __signature__ = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal.default.signature : function (a) { + return a; +}; + +class Foo { + constructor() { + this.bar = 2; + } + + // @ts-ignore + __reactstandin__regenerateByEval(key, code) { + // @ts-ignore + this[key] = eval(code); + } + +} +; + +(function () { + var reactHotLoader = (typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal : require('react-hot-loader')).default; + + if (!reactHotLoader) { + return; + } + + reactHotLoader.register(Foo, \\"Foo\\", __FILENAME__); +})(); + +; + +(function () { + var leaveModule = (typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal : require('react-hot-loader')).leaveModule; + leaveModule && leaveModule(module); +})();" +`; + +exports[`babel Targetting "modern" copies arrow function body block onto hidden class methods not an arrow function.js 1`] = ` +"\\"use strict\\"; + +(function () { + var enterModule = (typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal : require('react-hot-loader')).enterModule; + enterModule && enterModule(module); +})(); + +var __signature__ = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal.default.signature : function (a) { + return a; +}; + +class Foo { + constructor() { + this.bar = function (a, b) { + return a(b); + }; + } + + // @ts-ignore + __reactstandin__regenerateByEval(key, code) { + // @ts-ignore + this[key] = eval(code); + } + +} +; + +(function () { + var reactHotLoader = (typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal : require('react-hot-loader')).default; + + if (!reactHotLoader) { + return; + } + + reactHotLoader.register(Foo, \\"Foo\\", __FILENAME__); +})(); + +; + +(function () { + var leaveModule = (typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal : require('react-hot-loader')).leaveModule; + leaveModule && leaveModule(module); +})();" +`; + +exports[`babel Targetting "modern" copies arrow function body block onto hidden class methods same name as class method.js 1`] = ` +"\\"use strict\\"; + +(function () { + var enterModule = (typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal : require('react-hot-loader')).enterModule; + enterModule && enterModule(module); +})(); + +var __signature__ = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal.default.signature : function (a) { + return a; +}; + +class Foo { + constructor() { + this.bar = (a, b) => { + return a(b); + }; + } + + bar() { + return 2; + } + + // @ts-ignore + __reactstandin__regenerateByEval(key, code) { + // @ts-ignore + this[key] = eval(code); + } + +} +; + +(function () { + var reactHotLoader = (typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal : require('react-hot-loader')).default; + + if (!reactHotLoader) { + return; + } + + reactHotLoader.register(Foo, \\"Foo\\", __FILENAME__); +})(); + +; + +(function () { + var leaveModule = (typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal : require('react-hot-loader')).leaveModule; + leaveModule && leaveModule(module); +})();" +`; + +exports[`babel Targetting "modern" copies arrow function body block onto hidden class methods static property.js 1`] = ` +"\\"use strict\\"; + +(function () { + var enterModule = (typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal : require('react-hot-loader')).enterModule; + enterModule && enterModule(module); +})(); + +var __signature__ = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal.default.signature : function (a) { + return a; +}; + +class Foo {} + +Foo.bar = (a, b) => { + return a(b); +}; + +; + +(function () { + var reactHotLoader = (typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal : require('react-hot-loader')).default; + + if (!reactHotLoader) { + return; + } + + reactHotLoader.register(Foo, \\"Foo\\", __FILENAME__); +})(); + +; + +(function () { + var leaveModule = (typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal : require('react-hot-loader')).leaveModule; + leaveModule && leaveModule(module); +})();" +`; + +exports[`babel Targetting "modern" tags potential React components bindings.js 1`] = ` +"\\"use strict\\"; + +Object.defineProperty(exports, \\"__esModule\\", { + value: true +}); +exports.C = undefined; + +var _leftPad = require(\\"left-pad\\"); + +var _leftPad2 = _interopRequireDefault(_leftPad); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +(function () { + var enterModule = (typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal : require('react-hot-loader')).enterModule; + enterModule && enterModule(module); +})(); + +var __signature__ = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal.default.signature : function (a) { + return a; +}; + +const A = 42; +function B() { + function R() {} + class S {} + const T = 42; +} +class C { + U() { + function V() { + class W {} + } + } + + // @ts-ignore + __reactstandin__regenerateByEval(key, code) { + // @ts-ignore + this[key] = eval(code); + } + +} +exports.C = C; +const D = class X {}; +let E = D; +var Y = require(\\"left-pad\\"); +var { Z } = require(\\"left-pad\\"); + +const _default = React.createClass({ + displayName: \\"_default\\" +}); + +exports.default = _default; +; + +(function () { + var reactHotLoader = (typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal : require('react-hot-loader')).default; + + if (!reactHotLoader) { + return; + } + + reactHotLoader.register(A, \\"A\\", __FILENAME__); + reactHotLoader.register(B, \\"B\\", __FILENAME__); + reactHotLoader.register(C, \\"C\\", __FILENAME__); + reactHotLoader.register(D, \\"D\\", __FILENAME__); + reactHotLoader.register(E, \\"E\\", __FILENAME__); + reactHotLoader.register(_default, \\"default\\", __FILENAME__); +})(); + +; + +(function () { + var leaveModule = (typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal : require('react-hot-loader')).leaveModule; + leaveModule && leaveModule(module); +})();" +`; + +exports[`babel Targetting "modern" tags potential React components counter.js 1`] = ` +"\\"use strict\\"; + +Object.defineProperty(exports, \\"__esModule\\", { + value: true +}); + +(function () { + var enterModule = (typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal : require('react-hot-loader')).enterModule; + enterModule && enterModule(module); +})(); + +var __signature__ = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal.default.signature : function (a) { + return a; +}; + +class Counter {} + +const _default = () => React.createElement( + \\"div\\", + null, + React.createElement(Counter, null) +); + +exports.default = _default; +; + +(function () { + var reactHotLoader = (typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal : require('react-hot-loader')).default; + + if (!reactHotLoader) { + return; + } + + reactHotLoader.register(Counter, \\"Counter\\", __FILENAME__); + reactHotLoader.register(_default, \\"default\\", __FILENAME__); +})(); + +; + +(function () { + var leaveModule = (typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal : require('react-hot-loader')).leaveModule; + leaveModule && leaveModule(module); +})();" +`; + +exports[`babel Targetting "modern" tags potential React components drop hot.prod.js 1`] = ` +"'use strict'; + +Object.defineProperty(exports, \\"__esModule\\", { + value: true +}); +exports.z = exports.e = exports.d = exports.c = exports.b = exports.a = undefined; + +var _react = require('react'); + +var _react2 = _interopRequireDefault(_react); + +var _reactHotLoader = require('react-hot-loader'); + +var RHL = _interopRequireWildcard(_reactHotLoader); + +var RHL2 = _interopRequireWildcard(_reactHotLoader); + +var _root = require('react-hot-loader/root'); + +var _notReactHotLoader = require('not-react-hot-loader'); + +var NOTRHL = _interopRequireWildcard(_notReactHotLoader); + +function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +const App = () => _react2.default.createElement( + 'div', + null, + 'Hello World!' +); + +const a = App; +const z = App; +const b = App; +const c = App; +const d = App; +const e = App; + +(0, _reactHotLoader.foo)(module)(App); +(0, _notReactHotLoader.hot)(module)(App); +(0, _reactHotLoader.foo)(module)(App); +RHL.foo(module)(App); +NOTRHL.hot(module)(App); + +// should not drop incomplete reference +(0, _reactHotLoader.foo)(module); + +exports.a = a; +exports.b = b; +exports.c = c; +exports.d = d; +exports.e = e; +exports.z = z;" +`; + +exports[`babel Targetting "modern" tags potential React components hooks.js 1`] = ` +"'use strict'; + +var _react = require('react'); + +var _react2 = _interopRequireDefault(_react); + +var _externalHook = require('external-hook'); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +(function () { + var enterModule = (typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal : require('react-hot-loader')).enterModule; + enterModule && enterModule(module); +})(); + +var __signature__ = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal.default.signature : function (a) { + return a; +}; + +const NoHooks = () => _react2.default.createElement( + 'div', + null, + 'no hooks' +); + +const UseStateHook = () => { + (0, _react.useState)(42); +}; + +__signature__(UseStateHook, 'useState{(42)}'); + +const UseStateHooks = () => { + (0, _react.useState)(42); + (0, _react.useState)(24); +}; + +__signature__(UseStateHooks, 'useState{(42)}\\\\nuseState{(24)}'); + +const useEffectHook = () => { + _react2.default.useEffect(() => ({})); + (0, _react.useState)(24); + _react2.default.useState(42); +}; + +__signature__(useEffectHook, 'useEffect{}\\\\nuseState{(24)}\\\\nuseState{(42)}'); + +const useForwardRefHook = _react2.default.forwardRef(__signature__(() => { + _react2.default.useEffect(() => ({})); + (0, _react.useState)(24); + _react2.default.useState(42); +}, 'useEffect{}\\\\nuseState{(24)}\\\\nuseState{(42)}')); + +const useForwardRefFunctionHook = _react2.default.forwardRef(__signature__(function () { + _react2.default.useEffect(() => ({})); + (0, _react.useState)(24); + _react2.default.useState(42); +}, 'useEffect{}\\\\nuseState{(24)}\\\\nuseState{(42)}')); + +const useCustomHook = () => { + (0, _react.useState)(42); + useEffectHook(); + (0, _externalHook.useExternalHook)(); +}; + +__signature__(useCustomHook, 'useState{(42)}\\\\nuseEffectHook{}\\\\nuseExternalHook{}', () => [useEffectHook, _externalHook.useExternalHook]); + +const useCustomHookAgain = () => { + (0, _react.useState)(42); + useEffectHook(); + (0, _externalHook.useExternalHook)(); +}; + +__signature__(useCustomHookAgain, 'useState{(42)}\\\\nuseEffectHook{}\\\\nuseExternalHook{}', () => [useEffectHook, _externalHook.useExternalHook]); + +const useInnerHook = ({ useHookFromProps }) => { + const useHookBase = () => (0, _react.useState)(); + + __signature__(useHookBase, 'useState{}'); + + const useHook = () => (0, _react.useState)(useHookFromProps(useHookBase())); + + __signature__(useHook, 'useState{(useHookFromProps(useHookBase()))}\\\\nuseHookFromProps{}\\\\nuseHookBase{}', () => [useHookFromProps, useHookBase]); + + useHookFromProps(); + { + // sub scope + useHook(); + } +}; + +__signature__(useInnerHook, 'useHookFromProps{}\\\\nuseHook{}'); + +function useFunc() { + (0, _react.useState)(42); + useEffectHook(); +} +__signature__(useFunc, 'useState{(42)}\\\\nuseEffectHook{}', () => [useEffectHook]); + +; +; + +(function () { + var reactHotLoader = (typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal : require('react-hot-loader')).default; + + if (!reactHotLoader) { + return; + } + + reactHotLoader.register(NoHooks, 'NoHooks', __FILENAME__); + reactHotLoader.register(UseStateHook, 'UseStateHook', __FILENAME__); + reactHotLoader.register(UseStateHooks, 'UseStateHooks', __FILENAME__); + reactHotLoader.register(useEffectHook, 'useEffectHook', __FILENAME__); + reactHotLoader.register(useForwardRefHook, 'useForwardRefHook', __FILENAME__); + reactHotLoader.register(useForwardRefFunctionHook, 'useForwardRefFunctionHook', __FILENAME__); + reactHotLoader.register(useCustomHook, 'useCustomHook', __FILENAME__); + reactHotLoader.register(useCustomHookAgain, 'useCustomHookAgain', __FILENAME__); + reactHotLoader.register(useInnerHook, 'useInnerHook', __FILENAME__); + reactHotLoader.register(useFunc, 'useFunc', __FILENAME__); +})(); + +; + +(function () { + var leaveModule = (typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal : require('react-hot-loader')).leaveModule; + leaveModule && leaveModule(module); +})();" +`; + +exports[`babel Targetting "modern" tags potential React components issue 246.js 1`] = ` +"\\"use strict\\"; + +Object.defineProperty(exports, \\"__esModule\\", { + value: true +}); +exports.spread = spread; + +(function () { + var enterModule = (typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal : require('react-hot-loader')).enterModule; + enterModule && enterModule(module); +})(); + +var __signature__ = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal.default.signature : function (a) { + return a; +}; + +function spread(...args) { + return args.push(1); +} +; + +(function () { + var reactHotLoader = (typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal : require('react-hot-loader')).default; + + if (!reactHotLoader) { + return; + } + + reactHotLoader.register(spread, \\"spread\\", __FILENAME__); +})(); + +; + +(function () { + var leaveModule = (typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal : require('react-hot-loader')).leaveModule; + leaveModule && leaveModule(module); +})();" +`; + +exports[`babel Targetting "modern" tags potential React components name clash.js 1`] = ` +"\\"use strict\\"; + +Object.defineProperty(exports, \\"__esModule\\", { + value: true +}); + +(function () { + var enterModule = (typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal : require('react-hot-loader')).enterModule; + enterModule && enterModule(module); +})(); + +var __signature__ = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal.default.signature : function (a) { + return a; +}; + +const _default = 10; +const _default2 = 42; +exports.default = _default2; +; + +(function () { + var reactHotLoader = (typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal : require('react-hot-loader')).default; + + if (!reactHotLoader) { + return; + } + + reactHotLoader.register(_default, \\"_default\\", __FILENAME__); + reactHotLoader.register(_default2, \\"default\\", __FILENAME__); +})(); + +; + +(function () { + var leaveModule = (typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal : require('react-hot-loader')).leaveModule; + leaveModule && leaveModule(module); +})();" +`;