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