util-helpers
Version:
52 lines (49 loc) • 2.01 kB
JavaScript
import { __assign, __rest } from 'tslib';
import { isObject } from 'ut2';
import { objectKeys } from './utils/native.js';
var loadScript = function (_src, options) {
var finalOptions;
if (isObject(_src)) {
finalOptions = _src;
}
else if (typeof _src === 'string') {
finalOptions = __assign({ src: _src }, options);
}
else {
finalOptions = options || {};
}
return new Promise(function (resolve, reject) {
var container = document.head || document.getElementsByTagName('head')[0] || document.body;
var script = document.createElement('script');
var src = finalOptions.src, attrs = finalOptions.attrs, _a = finalOptions.destroyOnError, destroyOnError = _a === void 0 ? true : _a, onload = finalOptions.onload, onerror = finalOptions.onerror, restOptions = __rest(finalOptions, ["src", "attrs", "destroyOnError", "onload", "onerror"]);
var props = __assign({ async: true, type: 'text/javascript' }, restOptions);
for (var key in props) {
script[key] = props[key];
}
if (typeof attrs === 'object') {
objectKeys(attrs).forEach(function (key) {
script.setAttribute(key, attrs[key]);
});
}
if (src) {
script.src = src;
script.onload = function (ev) {
onload === null || onload === void 0 ? void 0 : onload.call(this, ev);
resolve(script);
};
script.onerror = function (ev) {
this.onerror = this.onload = null;
onerror === null || onerror === void 0 ? void 0 : onerror.call(this, ev);
if (destroyOnError) {
container.removeChild(script);
}
reject(new URIError('Failed to load ' + this.src));
};
}
container.appendChild(script);
if (!src) {
resolve(script);
}
});
};
export { loadScript as default };