@talend/assets-api
Version:
A set of API designed to access assets using CDN
239 lines (237 loc) • 7.09 kB
JavaScript
(function webpackUniversalModuleDefinition(root, factory) {
if(typeof exports === 'object' && typeof module === 'object')
module.exports = factory();
else if(typeof define === 'function' && define.amd)
define([], factory);
else if(typeof exports === 'object')
exports["TalendAssetsApi"] = factory();
else
root["TalendAssetsApi"] = factory();
})(this, () => {
return /******/ (() => { // webpackBootstrap
/******/ "use strict";
/******/ // The require scope
/******/ var __webpack_require__ = {};
/******/
/************************************************************************/
/******/ /* webpack/runtime/define property getters */
/******/ (() => {
/******/ // define getter functions for harmony exports
/******/ __webpack_require__.d = (exports, definition) => {
/******/ for(var key in definition) {
/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
/******/ }
/******/ }
/******/ };
/******/ })();
/******/
/******/ /* webpack/runtime/hasOwnProperty shorthand */
/******/ (() => {
/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
/******/ })();
/******/
/******/ /* webpack/runtime/make namespace object */
/******/ (() => {
/******/ // define __esModule on exports
/******/ __webpack_require__.r = (exports) => {
/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
/******/ }
/******/ Object.defineProperty(exports, '__esModule', { value: true });
/******/ };
/******/ })();
/******/
/************************************************************************/
var __webpack_exports__ = {};
/*!**********************!*\
!*** ./src/index.ts ***!
\**********************/
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
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}`;
};
}
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({
getURL,
getUMD,
getJSON,
addScript,
addStyle,
toDefaultModule
});
/******/ return __webpack_exports__;
/******/ })()
;
});
//# sourceMappingURL=TalendAssetsApi.js.map