@macrof/loader
Version:
React MicroFrontend Loader, Typescript, Webpack 5, ModuleFederation
57 lines (56 loc) • 2.16 kB
JavaScript
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
const APP_MF_LINK = '__MF_CLIENT_LINK__';
const makeRequest = (url) => __awaiter(void 0, void 0, void 0, function* () {
try {
const res = yield fetch(url, {
method: 'GET',
mode: 'cors',
cache: 'no-cache',
});
return res.text().then((data) => data
.replace(/\s/g, '')
.replace(/'/g, '"'));
}
catch (err) {
return Promise.reject(err);
}
});
const init = (data) => {
try {
window[APP_MF_LINK] = JSON.parse(data);
return Promise.resolve();
}
catch (err) {
return Promise.reject(err);
}
};
const error = (err) => {
var _a, _b, _c;
const element = document.createElement("div");
element.style.textAlign = "center";
element.style.fontSize = "20px";
element.style.margin = "0 auto";
element.style.width = "500px";
element.innerHTML = `
${(_b = (_a = err === null || err === void 0 ? void 0 : err.response) === null || _a === void 0 ? void 0 : _a.status) !== null && _b !== void 0 ? _b : ''}
<hr>
Something went wrong.
<br>
Please try again later.
`;
(_c = document.getElementById("root")) === null || _c === void 0 ? void 0 : _c.appendChild(element);
console.error('[loadProdUrls]: failed to load MF Urls(production)');
};
export const loadProdUrls = (url, boot) => {
makeRequest(url)
.then((data) => init(data)
.then(() => boot())).catch((err) => error(err));
};