webpack-dev-server 2.2.1 → 2.4.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/client/index.js CHANGED
@@ -2,6 +2,7 @@
2
2
  var url = require("url");
3
3
  var stripAnsi = require("strip-ansi");
4
4
  var socket = require("./socket");
5
+ var overlay = require("./overlay");
5
6
 
6
7
  function getCurrentScriptSource() {
7
8
  // `document.currentScript` is the most accurate way to find the current script,
@@ -32,6 +33,8 @@ var hot = false;
32
33
  var initial = true;
33
34
  var currentHash = "";
34
35
  var logLevel = "info";
36
+ var useWarningOverlay = false;
37
+ var useErrorOverlay = false;
35
38
 
36
39
  function log(level, msg) {
37
40
  if(logLevel === "info" && level === "info")
@@ -44,7 +47,7 @@ function log(level, msg) {
44
47
 
45
48
  // Send messages to the outside, so plugins can consume it.
46
49
  function sendMsg(type, data) {
47
- if(typeof self !== "undefined") {
50
+ if(typeof self !== "undefined" && self.window) {
48
51
  self.postMessage({
49
52
  type: "webpack" + type,
50
53
  data: data
@@ -66,13 +69,26 @@ var onSocketMsg = {
66
69
  },
67
70
  "still-ok": function() {
68
71
  log("info", "[WDS] Nothing changed.")
72
+ if(useWarningOverlay || useErrorOverlay) overlay.clear();
69
73
  sendMsg("StillOk");
70
74
  },
71
75
  "log-level": function(level) {
72
76
  logLevel = level;
73
77
  },
78
+ "overlay": function(overlay) {
79
+ if(typeof document !== "undefined") {
80
+ if(typeof(overlay) === "boolean") {
81
+ useWarningOverlay = overlay;
82
+ useErrorOverlay = overlay;
83
+ } else if(overlay) {
84
+ useWarningOverlay = overlay.warnings;
85
+ useErrorOverlay = overlay.errors;
86
+ }
87
+ }
88
+ },
74
89
  ok: function() {
75
90
  sendMsg("Ok");
91
+ if(useWarningOverlay || useErrorOverlay) overlay.clear();
76
92
  if(initial) return initial = false;
77
93
  reloadApp();
78
94
  },
@@ -88,6 +104,8 @@ var onSocketMsg = {
88
104
  sendMsg("Warnings", strippedWarnings);
89
105
  for(var i = 0; i < strippedWarnings.length; i++)
90
106
  console.warn(strippedWarnings[i]);
107
+ if(useWarningOverlay) overlay.showMessage(warnings);
108
+
91
109
  if(initial) return initial = false;
92
110
  reloadApp();
93
111
  },
@@ -99,6 +117,7 @@ var onSocketMsg = {
99
117
  sendMsg("Errors", strippedErrors);
100
118
  for(var i = 0; i < strippedErrors.length; i++)
101
119
  console.error(strippedErrors[i]);
120
+ if(useErrorOverlay) overlay.showMessage(errors);
102
121
  },
103
122
  close: function() {
104
123
  log("error", "[WDS] Disconnected!");
@@ -138,12 +157,20 @@ var socketUrl = url.format({
138
157
 
139
158
  socket(socketUrl, onSocketMsg);
140
159
 
160
+ var isUnloading = false;
161
+ self.addEventListener("beforeunload", function() {
162
+ isUnloading = true;
163
+ });
164
+
141
165
  function reloadApp() {
166
+ if(isUnloading) {
167
+ return;
168
+ }
142
169
  if(hot) {
143
170
  log("info", "[WDS] App hot update...");
144
171
  var hotEmitter = require("webpack/hot/emitter");
145
172
  hotEmitter.emit("webpackHotUpdate", currentHash);
146
- if(typeof self !== "undefined") {
173
+ if(typeof self !== "undefined" && self.window) {
147
174
  // broadcast update to window
148
175
  self.postMessage("webpackHotUpdate" + currentHash, "*");
149
176
  }