You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
import hotEmitter from "webpack/hot/emitter.js"; import { log } from "./log.js";
/** @typedef {import("../index").Options} Options /** @typedef {import("../index").Status} Status
/** * @param {Options} options * @param {Status} status */ function reloadApp(_ref, status) { var hot = _ref.hot, liveReload = _ref.liveReload; if (status.isUnloading) { return; } var currentHash = status.currentHash, previousHash = status.previousHash; var isInitial = currentHash.indexOf( /** @type {string} */previousHash) >= 0; if (isInitial) { return; }
/** * @param {Window} rootWindow * @param {number} intervalId */ function applyReload(rootWindow, intervalId) { clearInterval(intervalId); log.info("App updated. Reloading..."); rootWindow.location.reload(); } var search = self.location.search.toLowerCase(); var allowToHot = search.indexOf("webpack-dev-server-hot=false") === -1; var allowToLiveReload = search.indexOf("webpack-dev-server-live-reload=false") === -1; if (hot && allowToHot) { log.info("App hot update..."); hotEmitter.emit("webpackHotUpdate", status.currentHash); if (typeof self !== "undefined" && self.window) { // broadcast update to window
self.postMessage("webpackHotUpdate".concat(status.currentHash), "*"); } } // allow refreshing the page only if liveReload isn't disabled
else if (liveReload && allowToLiveReload) { var rootWindow = self;
// use parent window for reload (in case we're in an iframe with no valid src)
var intervalId = self.setInterval(function () { if (rootWindow.location.protocol !== "about:") { // reload immediately if protocol is valid
applyReload(rootWindow, intervalId); } else { rootWindow = rootWindow.parent; if (rootWindow.parent === rootWindow) { // if parent equals current window we've reached the root which would continue forever, so trigger a reload anyways
applyReload(rootWindow, intervalId); } } }); } } export default reloadApp;
|