htmlgaga
Version:
Manage non-SPA pages with webpack and React.js
84 lines (70 loc) • 3.47 kB
JavaScript
;
function _interopDefault(ex) {
return ex && "object" == typeof ex && "default" in ex ? ex.default : ex;
}
var MessageType = require("../../dist/MessageType-08992331.cjs.prod.js"), stripAnsi = _interopDefault(require("strip-ansi")), htmlEntities = require("html-entities");
function calculateDelayMs() {
var delay = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : 200, retries = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : 0;
return delay * Math.pow(2, retries);
}
var entities = new htmlEntities.AllHtmlEntities, overlay = document.createElement("div"), overlayStyles = {
position: "fixed",
top: "0",
right: "0",
bottom: "0",
left: "0",
background: "white",
zIndex: 999999,
fontSize: "18px",
whiteSpace: "pre",
paddingLeft: "20px",
paddingRight: "20px",
overflow: "auto",
lineHeight: 1.5
};
function htmlElement(txt) {
var tag = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : "div", styles = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {}, element = document.createElement(tag);
return element.innerHTML = txt, Object.keys(styles).forEach((function(key) {
element.style[key] = styles[key];
})), element;
}
function report(errors) {
var _document$body, _errors$ = errors[0], moduleName = _errors$.moduleName, message = _errors$.message;
overlay.appendChild(htmlElement("ERROR in ".concat(moduleName), "h1", {
color: "red"
})), overlay.appendChild(htmlElement(entities.encode(stripAnsi(message)), "pre")),
null === (_document$body = document.body) || void 0 === _document$body || _document$body.appendChild(overlay);
}
Object.keys(overlayStyles).forEach((function(key) {
overlay.style[key] = overlayStyles[key];
}));
var prefix = "[htmlgaga]", socketUrl = "ws://".concat(__WEBSOCKET__), maxRetries = 10, retries = 0, delay = 200, linkOpening = !1;
function createWebSocketClient(socketUrl) {
var client = new WebSocket(socketUrl);
return client.onopen = function() {
if (retries > 0) return window.location.reload();
console.log("".concat(prefix, " Socket connected on ").concat(socketUrl));
}, client.onmessage = function(event) {
var _JSON$parse = JSON.parse(null == event ? void 0 : event.data), type = _JSON$parse.type, data = _JSON$parse.data;
switch (!0) {
case type === MessageType.MessageType.HASH:
return void console.log("".concat(prefix, " Built in ").concat(data.endTime - data.startTime, "ms"));
case type === MessageType.MessageType.RELOAD:
if (linkOpening) return;
return void window.location.reload();
case type === MessageType.MessageType.INVALID:
return void console.log("".concat(prefix, " Rebuilding..."));
case type === MessageType.MessageType.ERRORS:
return void report(data);
}
}, client.onclose = function(event) {
console.log("".concat(prefix, " Disconnected"), event), retries < maxRetries ? (retries += 1,
client = null, setTimeout((function() {
createWebSocketClient(socketUrl);
}), Math.random() * calculateDelayMs(delay, retries))) : console.log("".concat(prefix, " Please make sure the server is on and refresh the page."));
}, client;
}
document.addEventListener("click", (function(e) {
var _e$target;
"a" === (null === (_e$target = e.target) || void 0 === _e$target ? void 0 : _e$target.tagName.toLowerCase()) && (linkOpening = !0);
})), createWebSocketClient(socketUrl);