Skip to content

Commit 483251a

Browse files
authored
feat(node): support closeAll with force flag (#147)
1 parent 12fef5f commit 483251a

File tree

2 files changed

+15
-4
lines changed

2 files changed

+15
-4
lines changed

src/adapters/node.ts

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ export interface NodeAdapter extends AdapterInstance {
2929
socket: Duplex,
3030
head: Buffer,
3131
): Promise<void>;
32-
closeAll: (code?: number, data?: string | Buffer) => void;
32+
closeAll: (code?: number, data?: string | Buffer, force?: boolean) => void;
3333
}
3434

3535
export interface NodeOptions extends AdapterOptions {
@@ -103,9 +103,13 @@ const nodeAdapter: Adapter<NodeAdapter, NodeOptions> = (options = {}) => {
103103
wss.emit("connection", ws, nodeReq);
104104
});
105105
},
106-
closeAll: (code, data) => {
106+
closeAll: (code, data, force) => {
107107
for (const client of wss.clients) {
108-
client.close(code, data);
108+
if (force) {
109+
client.terminate();
110+
} else {
111+
client.close(code, data);
112+
}
109113
}
110114
},
111115
};

test/adapters/node.test.ts

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { afterAll, beforeAll, describe } from "vitest";
1+
import { afterAll, beforeAll, describe, expect, test } from "vitest";
22
import { createServer, Server } from "node:http";
33
import { getRandomPort, waitForPort } from "get-port-please";
44
import nodeAdapter from "../../src/adapters/node";
@@ -45,4 +45,11 @@ describe("node", () => {
4545
wsTests(() => url, {
4646
adapter: "node",
4747
});
48+
49+
test("forcefully terminates when force=true", async () => {
50+
ws.closeAll(undefined, undefined, true);
51+
for (const { websocket } of ws.peers) {
52+
expect(websocket.readyState).toBe(WebSocket.CLOSING);
53+
}
54+
});
4855
});

0 commit comments

Comments
 (0)