63 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			63 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
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; |