mihawk
Version:
A tiny & simple mock server tool, support json,js,cjs,ts(typescript).
51 lines (50 loc) • 1.56 kB
JavaScript
;
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;
}