123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- 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;
|