From 2c020d3e67c0376679d8e01005ba8afcacaeff11 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bazyli=20Brz=C3=B3ska?= Date: Mon, 18 Feb 2019 21:27:17 +0100 Subject: [PATCH] fix: handle a potential uncaughtException Fixes a case in which we tried to send data through a socket that isn't connected due to the client being in the middle of a page reload (and thus closing the connection). This exception killed the whole webpack process. Example stacktrace: ``` uncaughtException Error: WebSocket is not open: readyState 2 (CLOSING) at WebSocket.send (/app/node_modules/ws/lib/websocket.js:322:19) at WebpackPluginServe.socket.progress (/app/node_modules/webpack-plugin-serve/lib/routes.js:87:16) at WebpackPluginServe.emit (events.js:189:13) at ProgressPlugin (/app/node_modules/webpack-plugin-serve/lib/index.js:212:16) at update (/app/node_modules/webpack/lib/ProgressPlugin.js:151:5) at moduleAdd (/app/node_modules/webpack/lib/ProgressPlugin.js:163:5) at SyncHook.eval (eval at create (/app/node_modules/tapable/lib/HookCodeFactory.js:19:10), :11:1) at Compilation.buildModule (/app/node_modules/webpack/lib/Compilation.js:634:26) at factory.create (/app/node_modules/webpack/lib/Compilation.js:884:14) at factory (/app/node_modules/webpack/lib/NormalModuleFactory.js:405:6) at hooks.afterResolve.callAsync (/app/node_modules/webpack/lib/NormalModuleFactory.js:155:13) at AsyncSeriesWaterfallHook.eval [as callAsync] (eval at create (/app/node_modules/tapable/lib/HookCodeFactory.js:32:10), :6:1) at resolver (/app/node_modules/webpack/lib/NormalModuleFactory.js:138:29) at process.nextTick (/app/node_modules/webpack/lib/NormalModuleFactory.js:342:9) at process._tickCallback (internal/process/next_tick.js:61:11) ``` --- lib/routes.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/lib/routes.js b/lib/routes.js index 0009c25..4fd1766 100644 --- a/lib/routes.js +++ b/lib/routes.js @@ -84,6 +84,9 @@ const setupRoutes = function setupRoutes() { }; socket.progress = (data) => { + if (socket.readyState !== 1) { + return; + } socket.send(prep({ action: 'progress', data })); };