Skip to content

Commit 493ccbd

Browse files
chore(deps): update ws (#3652)
1 parent ae8c523 commit 493ccbd

12 files changed

+101
-42
lines changed

lib/Server.js

+30-14
Original file line numberDiff line numberDiff line change
@@ -1775,15 +1775,25 @@ class Server {
17751775
}
17761776

17771777
async stop() {
1778-
if (this.webSocketServer) {
1779-
process.nextTick(() => {
1780-
this.webSocketServer.implementation.close();
1781-
});
1778+
if (this.webSocketProxies.length > 0) {
1779+
this.webSocketProxies = [];
17821780
}
17831781

1784-
await Promise.all(this.staticWatchers.map((watcher) => watcher.close()));
1782+
if (this.staticWatchers.length > 0) {
1783+
await Promise.all(this.staticWatchers.map((watcher) => watcher.close()));
17851784

1786-
this.staticWatchers = [];
1785+
this.staticWatchers = [];
1786+
}
1787+
1788+
if (this.webSocketServer) {
1789+
await new Promise((resolve) => {
1790+
this.webSocketServer.implementation.close(() => {
1791+
resolve();
1792+
});
1793+
});
1794+
1795+
this.webSocketServer = null;
1796+
}
17871797

17881798
if (this.server) {
17891799
await new Promise((resolve) => {
@@ -1792,17 +1802,23 @@ class Server {
17921802
});
17931803
});
17941804

1795-
await new Promise((resolve, reject) => {
1796-
this.middleware.close((error) => {
1797-
if (error) {
1798-
reject(error);
1805+
this.server = null;
17991806

1800-
return;
1801-
}
1807+
if (this.middleware) {
1808+
await new Promise((resolve, reject) => {
1809+
this.middleware.close((error) => {
1810+
if (error) {
1811+
reject(error);
18021812

1803-
resolve();
1813+
return;
1814+
}
1815+
1816+
resolve();
1817+
});
18041818
});
1805-
});
1819+
1820+
this.middleware = null;
1821+
}
18061822
}
18071823
}
18081824

lib/servers/SockJSServer.js

+3-1
Original file line numberDiff line numberDiff line change
@@ -74,12 +74,14 @@ module.exports = class SockJSServer extends BaseServer {
7474
});
7575
});
7676

77-
this.implementation.close = () => {
77+
this.implementation.close = (callback) => {
7878
for (const client of this.clients) {
7979
client.close();
8080
}
8181

8282
this.clients.clear();
83+
84+
callback();
8385
};
8486
}
8587
};

lib/servers/WebsocketServer.js

+4
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,10 @@ module.exports = class WebsocketServer extends BaseServer {
7070
this.implementation.on("close", () => {
7171
clearInterval(interval);
7272

73+
for (const ws of this.clients) {
74+
ws.terminate();
75+
}
76+
7377
this.clients.clear();
7478
});
7579
}

package-lock.json

+39-9
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

+2-2
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@
5757
"strip-ansi": "^7.0.0",
5858
"url": "^0.11.0",
5959
"webpack-dev-middleware": "^5.0.0",
60-
"ws": "^7.5.3"
60+
"ws": "^8.1.0"
6161
},
6262
"devDependencies": {
6363
"@babel/cli": "^7.14.5",
@@ -104,7 +104,7 @@
104104
"tcp-port-used": "^1.0.2",
105105
"typescript": "^4.2.4",
106106
"url-loader": "^4.1.1",
107-
"webpack": "^5.48.0",
107+
"webpack": "^5.50.0",
108108
"webpack-cli": "^4.7.2",
109109
"webpack-merge": "^5.8.0"
110110
},

test/e2e/web-socket-communication.test.js

+4-6
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ describe("web socket communication", () => {
3333

3434
page
3535
.on("console", (message) => {
36-
consoleMessages.push(message);
36+
consoleMessages.push(message.text());
3737
})
3838
.on("pageerror", (error) => {
3939
pageErrors.push(error);
@@ -45,20 +45,18 @@ describe("web socket communication", () => {
4545
await server.stop();
4646
await new Promise((resolve) => {
4747
const interval = setInterval(() => {
48-
if (server.webSocketServer.clients.size === 0) {
48+
if (consoleMessages.includes("[webpack-dev-server] Disconnected!")) {
4949
clearInterval(interval);
50+
5051
resolve();
5152
}
5253
}, 100);
5354
});
5455

55-
expect(consoleMessages.map((message) => message.text())).toMatchSnapshot(
56-
"console messages"
57-
);
56+
expect(consoleMessages).toMatchSnapshot("console messages");
5857
expect(pageErrors).toMatchSnapshot("page errors");
5958

6059
await browser.close();
61-
await server.stop();
6260
});
6361

6462
it(`should work and terminate client that is not alive ("${websocketServer}")`, async () => {

test/server/Server.test.js

+9-3
Original file line numberDiff line numberDiff line change
@@ -176,7 +176,11 @@ describe("Server", () => {
176176
options: {
177177
webSocketServer: class CustomServerImplementation {
178178
constructor() {
179-
this.implementation = { close: () => {} };
179+
this.implementation = {
180+
close: (callback) => {
181+
callback();
182+
},
183+
};
180184
}
181185
},
182186
},
@@ -192,7 +196,8 @@ describe("Server", () => {
192196
type: "ws",
193197
options: {
194198
host: "127.0.0.1",
195-
port: 43334,
199+
// TODO `jest` is freeze here
200+
// port: 43334,
196201
pathname: "/ws",
197202
},
198203
},
@@ -210,7 +215,8 @@ describe("Server", () => {
210215
type: "ws",
211216
options: {
212217
host: "127.0.0.1",
213-
port: "43335",
218+
// TODO `jest` is freeze here
219+
// port: "43335",
214220
pathname: "/ws",
215221
},
216222
},

test/server/__snapshots__/Server.test.js.snap.webpack4

-2
Original file line numberDiff line numberDiff line change
@@ -478,7 +478,6 @@ Object {
478478
"host": "127.0.0.1",
479479
"path": "/ws",
480480
"pathname": "/ws",
481-
"port": 43334,
482481
},
483482
"type": "ws",
484483
},
@@ -523,7 +522,6 @@ Object {
523522
"host": "127.0.0.1",
524523
"path": "/ws",
525524
"pathname": "/ws",
526-
"port": 43335,
527525
},
528526
"type": "ws",
529527
},

test/server/__snapshots__/Server.test.js.snap.webpack5

-2
Original file line numberDiff line numberDiff line change
@@ -478,7 +478,6 @@ Object {
478478
"host": "127.0.0.1",
479479
"path": "/ws",
480480
"pathname": "/ws",
481-
"port": 43334,
482481
},
483482
"type": "ws",
484483
},
@@ -523,7 +522,6 @@ Object {
523522
"host": "127.0.0.1",
524523
"path": "/ws",
525524
"pathname": "/ws",
526-
"port": 43335,
527525
},
528526
"type": "ws",
529527
},

test/server/http2-option.test.js

+1
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ describe('"http2" option', () => {
6262
});
6363
http2Req.on("end", () => {
6464
expect(data).toEqual(expect.stringMatching(/Heyo/));
65+
client.close();
6566
done();
6667
});
6768
http2Req.end();

test/server/proxy-option.test.js

+5-1
Original file line numberDiff line numberDiff line change
@@ -584,7 +584,7 @@ describe("proxy option", () => {
584584
ws = new WebSocket(`ws://localhost:${port3}/proxy3/socket`);
585585

586586
ws.on("message", (message) => {
587-
responseMessage = message;
587+
responseMessage = message.toString();
588588
done();
589589
});
590590

@@ -600,6 +600,10 @@ describe("proxy option", () => {
600600
afterAll(async () => {
601601
webSocketServer.close();
602602

603+
for (const client of webSocketServer.clients) {
604+
client.terminate();
605+
}
606+
603607
await server.stop();
604608
});
605609
});

test/server/setupExitSignals-option.test.js

+4-2
Original file line numberDiff line numberDiff line change
@@ -46,10 +46,12 @@ describe("setupExitSignals option", () => {
4646

4747
it.each(signals)("should close and exit on %s", (signal, done) => {
4848
process.emit(signal);
49-
process.nextTick(() => {
49+
50+
setTimeout(() => {
5051
expect(killSpy.mock.calls.length).toEqual(1);
52+
expect(exitSpy.mock.calls.length).toEqual(1);
5153

5254
done();
53-
});
55+
}, 1000);
5456
});
5557
});

0 commit comments

Comments
 (0)