UNPKG

parcel-bundler

Version:

<p align="center"> <a href="https://parceljs.org/" target="_blank"> <img alt="Parcel" src="https://user-images.githubusercontent.com/19409/31321658-f6aed0f2-ac3d-11e7-8100-1587e676e0ec.png" width="749"> </a> </p>

93 lines (76 loc) 2.3 kB
var getBundleURL = require('./bundle-url').getBundleURL; function loadBundles(bundles) { var id = Array.isArray(bundles) ? bundles[bundles.length - 1] : bundles; try { return Promise.resolve(require(id)); } catch (err) { if (err.code === 'MODULE_NOT_FOUND') { return new LazyPromise(function (resolve, reject) { Promise.all(bundles.slice(0, -1).map(loadBundle)).then(function () { return require(id); }).then(resolve, reject); }); } throw err; } } module.exports = exports = loadBundles; var bundles = {}; var bundleLoaders = { js: loadJSBundle, css: loadCSSBundle }; function loadBundle(bundle) { if (bundles[bundle]) { return bundles[bundle]; } var type = bundle.match(/\.(.+)$/)[1].toLowerCase(); var bundleLoader = bundleLoaders[type]; if (bundleLoader) { return bundles[bundle] = bundleLoader(getBundleURL() + bundle); } } function loadJSBundle(bundle) { return new Promise(function (resolve, reject) { var script = document.createElement('script'); script.async = true; script.type = 'text/javascript'; script.charset = 'utf-8'; script.src = bundle; script.onerror = function (e) { script.onerror = script.onload = null; reject(e); }; script.onload = function () { script.onerror = script.onload = null; resolve(); }; document.getElementsByTagName('head')[0].appendChild(script); }); } function loadCSSBundle(bundle) { return new Promise(function (resolve, reject) { var link = document.createElement('link'); link.rel = 'stylesheet'; link.href = bundle; link.onerror = function (e) { link.onerror = link.onload = null; reject(e); }; link.onload = function () { link.onerror = link.onload = null; resolve(); }; document.getElementsByTagName('head')[0].appendChild(link); }); } function LazyPromise(executor) { this.executor = executor; this.promise = null; } LazyPromise.prototype.then = function (onSuccess, onError) { return this.promise || (this.promise = new Promise(this.executor).then(onSuccess, onError)); }; LazyPromise.prototype.catch = function (onError) { return this.promise || (this.promise = new Promise(this.executor).catch(onError)); };