UNPKG

@loopeco/socketio

Version:

A enhanced LoopBack's WebSocket server based on socket.io

47 lines (40 loc) 1.67 kB
import {Socket} from 'socket.io'; import {IncomingMessage, OutgoingMessage} from 'http'; import express from 'express'; import {SocketIoNextFunction} from './types'; import setPrototypeOf = require('setprototypeof'); export function expressInit(socket: Socket, next?: SocketIoNextFunction): [express.Request, express.Response]; export function expressInit( request: IncomingMessage, response?: OutgoingMessage | SocketIoNextFunction, next?: SocketIoNextFunction, ): [express.Request, express.Response]; export function expressInit( request: IncomingMessage | Socket, response?: OutgoingMessage | SocketIoNextFunction, next?: SocketIoNextFunction, ): [express.Request, express.Response] { if (typeof (request as Socket).use === 'function') { request = (request as Socket).request; } if (typeof response === 'function') { next = response as SocketIoNextFunction; response = undefined; } // eslint-disable-next-line @typescript-eslint/no-explicit-any const req = (request ?? {}) as any; // eslint-disable-next-line @typescript-eslint/no-explicit-any const res = (response ?? req.res ?? {}) as any; if (!req.res) req.res = res; if (!res.req) res.req = req; req.next = next; if (!isExpressRequest(req)) setPrototypeOf(req, express.request); if (!isExpressResponse(res)) setPrototypeOf(res, express.response); return [req, res]; } export function isExpressRequest(x?: object): x is express.Request { return !!x && typeof (x as express.Request).header === 'function'; } export function isExpressResponse(x?: object): x is express.Response { return !!x && typeof (x as express.Response).header === 'function'; }