UNPKG

hono

Version:

Web framework built on Web Standards

110 lines (109 loc) 3.37 kB
"use strict"; var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __hasOwnProp = Object.prototype.hasOwnProperty; var __export = (target, all) => { for (var name in all) __defProp(target, name, { get: all[name], enumerable: true }); }; var __copyProps = (to, from, except, desc) => { if (from && typeof from === "object" || typeof from === "function") { for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); } return to; }; var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); var ipaddr_exports = {}; __export(ipaddr_exports, { convertIPv4ToBinary: () => convertIPv4ToBinary, convertIPv6BinaryToString: () => convertIPv6BinaryToString, convertIPv6ToBinary: () => convertIPv6ToBinary, distinctRemoteAddr: () => distinctRemoteAddr, expandIPv6: () => expandIPv6 }); module.exports = __toCommonJS(ipaddr_exports); const expandIPv6 = (ipV6) => { const sections = ipV6.split(":"); for (let i = 0; i < sections.length; i++) { const node = sections[i]; if (node !== "") { sections[i] = node.padStart(4, "0"); } else { sections[i + 1] === "" && sections.splice(i + 1, 1); sections[i] = new Array(8 - sections.length + 1).fill("0000").join(":"); } } return sections.join(":"); }; const IPV4_REGEX = /^[0-9]{0,3}\.[0-9]{0,3}\.[0-9]{0,3}\.[0-9]{0,3}$/; const distinctRemoteAddr = (remoteAddr) => { if (IPV4_REGEX.test(remoteAddr)) { return "IPv4"; } if (remoteAddr.includes(":")) { return "IPv6"; } }; const convertIPv4ToBinary = (ipv4) => { const parts = ipv4.split("."); let result = 0n; for (let i = 0; i < 4; i++) { result <<= 8n; result += BigInt(parts[i]); } return result; }; const convertIPv6ToBinary = (ipv6) => { const sections = expandIPv6(ipv6).split(":"); let result = 0n; for (let i = 0; i < 8; i++) { result <<= 16n; result += BigInt(parseInt(sections[i], 16)); } return result; }; const convertIPv6BinaryToString = (ipV6) => { const sections = []; for (let i = 0; i < 8; i++) { sections.push((ipV6 >> BigInt(16 * (7 - i)) & 0xffffn).toString(16)); } let currentZeroStart = -1; let maxZeroStart = -1; let maxZeroEnd = -1; for (let i = 0; i < 8; i++) { if (sections[i] === "0") { if (currentZeroStart === -1) { currentZeroStart = i; } } else { if (currentZeroStart > -1) { if (i - currentZeroStart > maxZeroEnd - maxZeroStart) { maxZeroStart = currentZeroStart; maxZeroEnd = i; } currentZeroStart = -1; } } } if (currentZeroStart > -1) { if (8 - currentZeroStart > maxZeroEnd - maxZeroStart) { maxZeroStart = currentZeroStart; maxZeroEnd = 8; } } if (maxZeroStart !== -1) { sections.splice(maxZeroStart, maxZeroEnd - maxZeroStart, ":"); } return sections.join(":").replace(/:{2,}/g, "::"); }; // Annotate the CommonJS export names for ESM import in node: 0 && (module.exports = { convertIPv4ToBinary, convertIPv6BinaryToString, convertIPv6ToBinary, distinctRemoteAddr, expandIPv6 });