feat(node-ws): Add WebSocketServer instance return to createNodeWebSocket (#1213)
* Add WebSocketServer instance return to createNodeWebSocket This change introduces the return of the WebSocketServer instance from the createNodeWebSocket function, enhancing its usability by allowing consumers access to the WebSocketServer instance for additional operations. - Updated tests to verify the returned WebSocketServer instance - Added wss property to NodeWebSocket interface for type safety * stylepull/1249/head
parent
aee369e728
commit
5178967931
|
@ -0,0 +1,5 @@
|
|||
---
|
||||
'@hono/node-ws': minor
|
||||
---
|
||||
|
||||
Return the WebSocketServer instance used for createNodeWebSocket
|
|
@ -13,10 +13,11 @@ describe('WebSocket helper', () => {
|
|||
let server: ServerType
|
||||
let injectWebSocket: ReturnType<typeof createNodeWebSocket>['injectWebSocket']
|
||||
let upgradeWebSocket: ReturnType<typeof createNodeWebSocket>['upgradeWebSocket']
|
||||
let wss: ReturnType<typeof createNodeWebSocket>['wss']
|
||||
|
||||
beforeEach(async () => {
|
||||
app = new Hono()
|
||||
;({ injectWebSocket, upgradeWebSocket } = createNodeWebSocket({ app }))
|
||||
;({ injectWebSocket, upgradeWebSocket, wss } = createNodeWebSocket({ app }))
|
||||
|
||||
server = await new Promise<ServerType>((resolve) => {
|
||||
const server = serve({ fetch: app.fetch, port: 3030 }, () => resolve(server))
|
||||
|
@ -286,4 +287,25 @@ describe('WebSocket helper', () => {
|
|||
|
||||
expect(await mainPromise).toBe(true)
|
||||
})
|
||||
|
||||
it('Should return the wss used for the websocket helper', async () => {
|
||||
let clientWs: WebSocket | null = null
|
||||
const mainPromise = new Promise<void>((resolve) =>
|
||||
wss.on('connection', (ws) => {
|
||||
clientWs = ws
|
||||
resolve()
|
||||
})
|
||||
)
|
||||
|
||||
app.get(
|
||||
'/',
|
||||
upgradeWebSocket(() => ({}))
|
||||
)
|
||||
new WebSocket('ws://localhost:3030/')
|
||||
|
||||
await mainPromise
|
||||
|
||||
expect(clientWs).toBeTruthy()
|
||||
expect(wss.clients.size).toBe(1)
|
||||
})
|
||||
})
|
||||
|
|
|
@ -17,6 +17,7 @@ export interface NodeWebSocket {
|
|||
}
|
||||
>
|
||||
injectWebSocket(server: Server | Http2Server | Http2SecureServer): void
|
||||
wss: WebSocketServer
|
||||
}
|
||||
export interface NodeWebSocketInit {
|
||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||
|
@ -56,6 +57,7 @@ export const createNodeWebSocket = (init: NodeWebSocketInit): NodeWebSocket => {
|
|||
}
|
||||
|
||||
return {
|
||||
wss,
|
||||
injectWebSocket(server) {
|
||||
server.on('upgrade', async (request, socket: Duplex, head) => {
|
||||
const url = new URL(request.url ?? '/', init.baseUrl ?? 'http://localhost')
|
||||
|
|
Loading…
Reference in New Issue