UNPKG

get-js

Version:

A lightweight library to asynchronously load scripts on the fly.

98 lines (83 loc) 2.12 kB
"use strict"; 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;