UNPKG

it-ws

Version:

Simple async iterables for websocket client connections

34 lines (27 loc) 837 B
import type { ErrorEvent, WebSocket } from 'ws' export default async (socket: WebSocket): Promise<void> => { // if the socket is closing or closed, return end if (socket.readyState >= 2) { throw new Error('socket closed') } // if open, return if (socket.readyState === 1) { return } await new Promise<void>((resolve, reject) => { function cleanup (): void { socket.removeEventListener('open', handleOpen) socket.removeEventListener('error', handleErr) } function handleOpen (): void { cleanup() resolve() } function handleErr (event: ErrorEvent): void { cleanup() reject(event.error as Error ?? new Error(`connect ECONNREFUSED ${socket.url}`)) } socket.addEventListener('open', handleOpen) socket.addEventListener('error', handleErr) }) }