UNPKG

mihawk

Version:

A tiny & simple mock server tool, support json,js,cjs,ts(typescript).

51 lines (50 loc) 1.56 kB
'use strict'; import { promisify } from 'util'; export function enhanceServer(server) { let connectMap = null; server.on('connection', socket => { if (!connectMap) { connectMap = new Map(); } const { remoteAddress, remotePort } = socket || {}; const key = `${remoteAddress}:${remotePort}@${Date.now()}`; connectMap?.set(key, socket); socket.on('close', () => { connectMap?.has(key) && connectMap.delete(key); }); }); server.destory = async (callback) => { server.closeAllConnections(); server.closeIdleConnections(); const closeServer = promisify(server.close).bind(server); await closeServer(); if (connectMap) { for (const [key, socket] of connectMap.entries()) { socket.destroy(); } connectMap.clear(); connectMap = null; } typeof callback === 'function' && callback(); }; return server; } export function isServerAddressInfo(obj) { if (typeof obj === 'object' && obj !== null && obj !== undefined) { return 'address' in obj; } return false; } export function getAddrInfoByServer(server) { const addr = server.address(); if (isServerAddressInfo(addr)) { return addr; } return null; } export function getPortByServer(server) { return getAddrInfoByServer(server)?.port || null; } export function getAddressByServer(server) { return getAddrInfoByServer(server)?.address || null; }