@talend/assets-api
Version:
A set of API designed to access assets using CDN
188 lines (185 loc) • 4.95 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
/* eslint-disable no-console */
/**
*
* Most of the parameters are optional but in fact they are not optional.
* They are optional for dev experience because injected by a babel plugin
*/
function getPackageVersion(name, version) {
if (name) {
const sessionVersion = sessionStorage.getItem(name);
if (sessionVersion) {
return sessionVersion;
}
const metas = document.querySelectorAll(`meta[name="${name}"]`);
if (metas.length > 1) {
console.warn(`Package ${name} is installed multiple times`);
}
if (metas.length > 0) {
return metas[0].getAttribute('content') || version;
}
}
return version;
}
function getURL(path, name, version) {
const overriddenVersion = getPackageVersion(name, version);
if (!overriddenVersion) {
throw new Error(`Version not found for ${name}`);
}
return window.Talend.getCDNUrl({
name,
version: overriddenVersion,
path
});
}
const TIMEOUT = 10000;
function addScript({
src,
integrity,
...attr
}) {
const found = !!document.querySelector(`script[src="${src}"]`);
if (found) {
return;
}
const script = document.createElement('script');
script.setAttribute('src', src);
script.setAttribute('type', 'text/javascript');
script.setAttribute('crossorigin', 'anonymous');
if (integrity) {
script.setAttribute('integrity', integrity);
}
script.async = false;
_extends(script, attr);
document.body.appendChild(script);
}
function toDefaultModule(value) {
return Object.create(null, {
default: {
value,
enumerable: true
},
__esModule: {
value: true
},
[Symbol.toStringTag]: {
value: 'Module'
}
});
}
function getUMD(name, version, varName, path) {
const cache = {
resolved: false
};
function loaded() {
if (!varName) {
return false;
}
return !!window[varName];
}
if (loaded() && varName) {
return Promise.resolve(window[varName]);
}
const src = getURL(path || '/undefined', name, version);
console.log('getUMD', src, varName);
return new Promise((resolve, reject) => {
function onload() {
if (!varName) {
cache.resolved = true;
resolve(undefined);
} else {
console.log(`${varName} onload ok`);
}
}
function onerror(e) {
console.error(e);
reject(e);
}
addScript({
src,
onload,
onerror
});
if (varName) {
const intervalId = setInterval(() => {
if (loaded()) {
cache.resolved = true;
clearInterval(intervalId);
resolve(window[varName]);
}
}, 200);
setTimeout(() => {
if (!cache.resolved) {
clearInterval(intervalId);
reject(new Error(`UMD from ${src}, ${varName} not found in ${TIMEOUT}`));
}
}, TIMEOUT);
}
});
}
async function getJSON(path, name, version) {
const url = getURL(path, name, version);
const response = await fetch(url);
if (response.ok) {
return response.json();
}
console.error(`Response not ok: ${response.status} ${response.statusText} from ${url}`);
return undefined;
}
function addStyle({
href,
integrity,
...attr
}) {
const found = !!document.querySelector(`link[href="${href}"]`);
if (found) {
return;
}
const style = document.createElement('link');
style.setAttribute('rel', 'stylesheet');
style.setAttribute('media', 'print');
style.setAttribute('onload', 'this.media="all"');
if (integrity) {
style.setAttribute('integrity', integrity);
style.setAttribute('crossorigin', 'anonymous');
}
style.setAttribute('href', href);
_extends(style, attr);
const title = document.getElementsByTagName('TITLE')[0];
document.head.insertBefore(style, title);
}
if (!window.Talend) {
window.Talend = {};
}
if (!window.Talend.getCDNUrl) {
window.Talend.getCDNUrl = info => {
const CDN_URL = window.Talend.CDN_URL;
if (CDN_URL) {
if (CDN_URL.startsWith('/')) {
const baseTag = document.querySelector('base');
if (baseTag) {
const root = baseTag.getAttribute('href') || '';
if (root !== '/') {
return `${root}${CDN_URL}/${info.name}/${info.version}${info.path}`;
}
}
}
return `${CDN_URL}/${info.name}/${info.version}${info.path}`;
}
return `https://unpkg.com/${info.name}@${info.version}${info.path}`;
};
}
var _default = exports.default = {
getURL,
getUMD,
getJSON,
addScript,
addStyle,
toDefaultModule
};
//# sourceMappingURL=index.js.map