get-js
Version:
A lightweight library to asynchronously load scripts on the fly.
98 lines (83 loc) • 2.12 kB
JavaScript
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = void 0;
var _util = require("./util");
var resolved = {};
/**
* Load javascript url asynchronously.
*
* @param {*} url The javascript url to load.
* @param {*} callback Callback function to invoke on success.
* @param {*} errorCallback Callback function to invoke on error.
* @returns {void}
*/
function loadScript(url, callback, errorCallback) {
var invokeCallback = function invokeCallback() {
resolved[url] = true;
if ((0, _util.isFunction)(callback)) {
callback();
}
};
if (resolved[url]) {
invokeCallback();
return;
}
var script = document.createElement('script');
script.type = 'text/javascript';
if (script.readyState) {
// IE
script.onreadystatechange = function () {
if (script.readyState == 'loaded' || script.readyState == 'complete') {
script.onreadystatechange = null;
invokeCallback();
}
};
} else {
// Others
script.onload = function () {
invokeCallback();
};
}
script.onerror = function (e) {
resolved[url] = false;
console.log('error', e);
if ((0, _util.isFunction)(errorCallback)) {
errorCallback();
}
};
script.src = url;
var parent = document.body || document.head || document;
parent.appendChild(script);
}
/**
* Load javascript url (or a list of urls) asynchronously
* and return a Promise instance.
*
* @param {*} src
* @param {*} opts
* @returns {Promise}
*/
function get(src, opts) {
if ((0, _util.isString)(src)) {
return new Promise(function (resolve, reject) {
loadScript(src, function () {
return resolve(true);
}, function () {
return reject();
});
});
} else if ((0, _util.isArray)(src)) {
var p = Promise.resolve(true);
src.forEach(function (url) {
p = p.then(function () {
return get(url);
});
});
return p;
}
throw new Error('Invalid argument for get()');
}
var _default = get;
exports["default"] = _default;
;