jaybe-react-universal-component
Version:
A higher order component for loading components with promises
153 lines (110 loc) • 6.02 kB
JavaScript
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.cacheProm = exports.loadFromPromiseCache = exports.cacheExport = exports.loadFromCache = exports.callForString = exports.createDefaultRender = exports.createElement = exports.findExport = exports.resolveExport = exports.tryRequire = exports.DefaultError = exports.DefaultLoading = exports.babelInterop = exports.isWebpack = exports.isServer = exports.isTest = void 0;
var React = _interopRequireWildcard(require("react"));
var _requireById = _interopRequireDefault(require("./requireById"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
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)) { var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {}; if (desc.get || desc.set) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj.default = obj; return newObj; } }
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; }
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
var isTest = process.env.NODE_ENV === 'test';
exports.isTest = isTest;
var isServer = !(typeof window !== 'undefined' && window.document && window.document.createElement);
exports.isServer = isServer;
var isWebpack = function isWebpack() {
return typeof __webpack_require__ !== 'undefined';
};
exports.isWebpack = isWebpack;
var babelInterop = function babelInterop(mod) {
return mod && _typeof(mod) === 'object' && mod.__esModule ? mod.default : mod;
};
exports.babelInterop = babelInterop;
var DefaultLoading = function DefaultLoading() {
return React.createElement("div", null, "Loading...");
};
exports.DefaultLoading = DefaultLoading;
var DefaultError = function DefaultError(_ref) {
var error = _ref.error;
return React.createElement("div", null, "Error: ", error && error.message);
};
exports.DefaultError = DefaultError;
var tryRequire = function tryRequire(id) {
try {
return (0, _requireById.default)(id);
} catch (err) {
// warn if there was an error while requiring the chunk during development
// this can sometimes lead the server to render the loading component.
if (process.env.NODE_ENV === 'development') {
console.warn("chunk not available for synchronous require yet: ".concat(id, ": ").concat(err.message), err.stack);
}
}
return null;
};
exports.tryRequire = tryRequire;
var resolveExport = function resolveExport(mod, key, onLoad, chunkName, props, context, modCache) {
var isSync = arguments.length > 7 && arguments[7] !== undefined ? arguments[7] : false;
var exp = findExport(mod, key);
if (onLoad && mod) {
var _isServer = typeof window === 'undefined';
var info = {
isServer: _isServer,
isSync: isSync
};
onLoad(mod, info, props, context);
}
if (chunkName && exp) cacheExport(exp, chunkName, props, modCache);
return exp;
};
exports.resolveExport = resolveExport;
var findExport = function findExport(mod, key) {
if (typeof key === 'function') {
return key(mod);
} else if (key === null) {
return mod;
}
return mod && _typeof(mod) === 'object' && key ? mod[key] : babelInterop(mod);
};
exports.findExport = findExport;
var createElement = function createElement(Component, props) {
return React.isValidElement(Component) ? React.cloneElement(Component, props) : React.createElement(Component, props);
};
exports.createElement = createElement;
var createDefaultRender = function createDefaultRender(Loading, Err) {
return function (props, mod, isLoading, error) {
if (isLoading) {
return createElement(Loading, props);
} else if (error) {
return createElement(Err, _objectSpread({}, props, {
error: error
}));
} else if (mod) {
// primary usage (for async import loading + errors):
return createElement(mod, props);
}
return createElement(Loading, props);
};
};
exports.createDefaultRender = createDefaultRender;
var callForString = function callForString(strFun, props) {
return typeof strFun === 'function' ? strFun(props) : strFun;
};
exports.callForString = callForString;
var loadFromCache = function loadFromCache(chunkName, props, modCache) {
return !isServer && modCache[callForString(chunkName, props)];
};
exports.loadFromCache = loadFromCache;
var cacheExport = function cacheExport(exp, chunkName, props, modCache) {
return modCache[callForString(chunkName, props)] = exp;
};
exports.cacheExport = cacheExport;
var loadFromPromiseCache = function loadFromPromiseCache(chunkName, props, promisecache) {
return promisecache[callForString(chunkName, props)];
};
exports.loadFromPromiseCache = loadFromPromiseCache;
var cacheProm = function cacheProm(pr, chunkName, props, promisecache) {
return promisecache[callForString(chunkName, props)] = pr;
};
exports.cacheProm = cacheProm;
;