UNPKG

react-saasify-chrisvxd

Version:

React components for Saasify web clients.

84 lines (68 loc) 1.96 kB
var getBundleURL = require('./bundle-url').getBundleURL; function loadBundlesLazy(bundles) { if (!Array.isArray(bundles)) { bundles = [bundles] } var id = bundles[bundles.length - 1]; try { return Promise.resolve(require(id)); } catch (err) { if (err.code === 'MODULE_NOT_FOUND') { return new LazyPromise(function (resolve, reject) { loadBundles(bundles.slice(0, -1)) .then(function () { return require(id); }) .then(resolve, reject); }); } throw err; } } function loadBundles(bundles) { return Promise.all(bundles.map(loadBundle)); } var bundleLoaders = {}; function registerBundleLoader(type, loader) { bundleLoaders[type] = loader; } module.exports = exports = loadBundlesLazy; exports.load = loadBundles; exports.register = registerBundleLoader; var bundles = {}; function loadBundle(bundle) { var id; if (Array.isArray(bundle)) { id = bundle[1]; bundle = bundle[0]; } if (bundles[bundle]) { return bundles[bundle]; } var type = (bundle.substring(bundle.lastIndexOf('.') + 1, bundle.length) || bundle).toLowerCase(); var bundleLoader = bundleLoaders[type]; if (bundleLoader) { return bundles[bundle] = bundleLoader(getBundleURL() + bundle) .then(function (resolved) { if (resolved) { module.bundle.register(id, resolved); } return resolved; }).catch(function(e) { delete bundles[bundle]; throw e; }); } } function LazyPromise(executor) { this.executor = executor; this.promise = null; } LazyPromise.prototype.then = function (onSuccess, onError) { if (this.promise === null) this.promise = new Promise(this.executor) return this.promise.then(onSuccess, onError) }; LazyPromise.prototype.catch = function (onError) { if (this.promise === null) this.promise = new Promise(this.executor) return this.promise.catch(onError) };