95 lines
3.6 KiB
JavaScript
95 lines
3.6 KiB
JavaScript
|
'use strict';
|
||
|
|
||
|
Object.defineProperty(exports, '__esModule', {
|
||
|
value: true
|
||
|
});
|
||
|
|
||
|
var _slicedToArray = (function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i['return']) _i['return'](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError('Invalid attempt to destructure non-iterable instance'); } }; })();
|
||
|
|
||
|
exports['default'] = proxyReactComponents;
|
||
|
|
||
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
|
||
|
|
||
|
var _reactProxy = require('react-proxy');
|
||
|
|
||
|
var _globalWindow = require('global/window');
|
||
|
|
||
|
var _globalWindow2 = _interopRequireDefault(_globalWindow);
|
||
|
|
||
|
var componentProxies = undefined;
|
||
|
if (_globalWindow2['default'].__reactComponentProxies) {
|
||
|
componentProxies = _globalWindow2['default'].__reactComponentProxies;
|
||
|
} else {
|
||
|
componentProxies = {};
|
||
|
Object.defineProperty(_globalWindow2['default'], '__reactComponentProxies', {
|
||
|
configurable: true,
|
||
|
enumerable: false,
|
||
|
writable: false,
|
||
|
value: componentProxies
|
||
|
});
|
||
|
}
|
||
|
|
||
|
function proxyReactComponents(_ref) {
|
||
|
var filename = _ref.filename;
|
||
|
var components = _ref.components;
|
||
|
var imports = _ref.imports;
|
||
|
var locals = _ref.locals;
|
||
|
|
||
|
var _imports = _slicedToArray(imports, 1);
|
||
|
|
||
|
var React = _imports[0];
|
||
|
|
||
|
var _locals = _slicedToArray(locals, 1);
|
||
|
|
||
|
var hot = _locals[0].hot;
|
||
|
|
||
|
if (!React.Component) {
|
||
|
throw new Error('imports[0] for react-transform-hmr does not look like React.');
|
||
|
}
|
||
|
|
||
|
if (!hot || typeof hot.accept !== 'function') {
|
||
|
throw new Error('locals[0] does not appear to be a `module` object with Hot Module ' + 'replacement API enabled. You should disable react-transform-hmr in ' + 'production by using `env` section in Babel configuration. See the ' + 'example in README: https://github.com/gaearon/react-transform-hmr');
|
||
|
}
|
||
|
|
||
|
if (Object.keys(components).some(function (key) {
|
||
|
return !components[key].isInFunction;
|
||
|
})) {
|
||
|
hot.accept(function (err) {
|
||
|
if (err) {
|
||
|
console.warn('[React Transform HMR] There was an error updating ' + filename + ':');
|
||
|
console.error(err);
|
||
|
}
|
||
|
});
|
||
|
}
|
||
|
|
||
|
var forceUpdate = (0, _reactProxy.getForceUpdate)(React);
|
||
|
|
||
|
return function wrapWithProxy(ReactClass, uniqueId) {
|
||
|
var _components$uniqueId = components[uniqueId];
|
||
|
var _components$uniqueId$isInFunction = _components$uniqueId.isInFunction;
|
||
|
var isInFunction = _components$uniqueId$isInFunction === undefined ? false : _components$uniqueId$isInFunction;
|
||
|
var _components$uniqueId$displayName = _components$uniqueId.displayName;
|
||
|
var displayName = _components$uniqueId$displayName === undefined ? uniqueId : _components$uniqueId$displayName;
|
||
|
|
||
|
if (isInFunction) {
|
||
|
return ReactClass;
|
||
|
}
|
||
|
|
||
|
var globalUniqueId = filename + '$' + uniqueId;
|
||
|
if (componentProxies[globalUniqueId]) {
|
||
|
(function () {
|
||
|
console.info('[React Transform HMR] Patching ' + displayName);
|
||
|
var instances = componentProxies[globalUniqueId].update(ReactClass);
|
||
|
setTimeout(function () {
|
||
|
return instances.forEach(forceUpdate);
|
||
|
});
|
||
|
})();
|
||
|
} else {
|
||
|
componentProxies[globalUniqueId] = (0, _reactProxy.createProxy)(ReactClass);
|
||
|
}
|
||
|
|
||
|
return componentProxies[globalUniqueId].get();
|
||
|
};
|
||
|
}
|
||
|
|
||
|
module.exports = exports['default'];
|