UNPKG

mihawk

Version:

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

69 lines (68 loc) 2.93 kB
'use strict'; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.getAddressByServer = exports.getPortByServer = exports.getAddrInfoByServer = exports.isServerAddressInfo = exports.enhanceServer = void 0; const util_1 = require("util"); 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 === null || connectMap === void 0 ? void 0 : connectMap.set(key, socket); socket.on('close', () => { (connectMap === null || connectMap === void 0 ? void 0 : connectMap.has(key)) && connectMap.delete(key); }); }); server.destory = (callback) => __awaiter(this, void 0, void 0, function* () { server.closeAllConnections(); server.closeIdleConnections(); const closeServer = (0, util_1.promisify)(server.close).bind(server); yield closeServer(); if (connectMap) { for (const [key, socket] of connectMap.entries()) { socket.destroy(); } connectMap.clear(); connectMap = null; } typeof callback === 'function' && callback(); }); return server; } exports.enhanceServer = enhanceServer; function isServerAddressInfo(obj) { if (typeof obj === 'object' && obj !== null && obj !== undefined) { return 'address' in obj; } return false; } exports.isServerAddressInfo = isServerAddressInfo; function getAddrInfoByServer(server) { const addr = server.address(); if (isServerAddressInfo(addr)) { return addr; } return null; } exports.getAddrInfoByServer = getAddrInfoByServer; function getPortByServer(server) { var _a; return ((_a = getAddrInfoByServer(server)) === null || _a === void 0 ? void 0 : _a.port) || null; } exports.getPortByServer = getPortByServer; function getAddressByServer(server) { var _a; return ((_a = getAddrInfoByServer(server)) === null || _a === void 0 ? void 0 : _a.address) || null; } exports.getAddressByServer = getAddressByServer;