ip-bigint
Advanced tools
Comparing version 7.2.0 to 7.2.1
50
index.js
export const max4 = 2n ** 32n - 1n; | ||
export const max6 = 2n ** 128n - 1n; | ||
const isIP = ip => ip.includes(":") ? 6 : ip.includes(".") ? 4 : 0; | ||
export function parseIp(ip) { | ||
const version = isIP(ip); | ||
const version = ip.includes(":") ? 6 : ip.includes(".") ? 4 : 0; | ||
if (!version) throw new Error(`Invalid IP address: ${ip}`); | ||
const result = Object.create(null); | ||
let number = 0n; | ||
let exp = 0n; | ||
const res = Object.create(null); | ||
@@ -18,9 +17,5 @@ if (version === 4) { | ||
} | ||
result.number = number; | ||
result.version = version; | ||
return result; | ||
} else { | ||
if (ip.includes(".")) { | ||
result.ipv4mapped = true; | ||
res.ipv4mapped = true; | ||
ip = ip.split(":").map(part => { | ||
@@ -39,3 +34,3 @@ if (part.includes(".")) { | ||
[, ip, scopeid] = /(.+)%(.+)/.exec(ip); | ||
result.scopeid = scopeid; | ||
res.scopeid = scopeid; | ||
} | ||
@@ -56,7 +51,7 @@ | ||
} | ||
} | ||
result.number = number; | ||
result.version = version; | ||
return result; | ||
} | ||
res.number = number; | ||
res.version = version; | ||
return res; | ||
} | ||
@@ -119,29 +114,26 @@ | ||
function compressIPv6(parts) { | ||
let longestSequence; | ||
let currentSequence; | ||
let longest, current; | ||
for (const [index, part] of parts.entries()) { | ||
if (part === "0") { | ||
if (!currentSequence) { | ||
currentSequence = new Set([index]); | ||
if (!current) { | ||
current = new Set([index]); | ||
} else { | ||
currentSequence.add(index); | ||
current.add(index); | ||
} | ||
} else { | ||
if (currentSequence) { | ||
if (!longestSequence) { | ||
longestSequence = currentSequence; | ||
} else if (currentSequence.size > longestSequence.size) { | ||
longestSequence = currentSequence; | ||
if (current) { | ||
if (!longest) { | ||
longest = current; | ||
} else if (current.size > longest.size) { | ||
longest = current; | ||
} | ||
currentSequence = null; | ||
current = null; | ||
} | ||
} | ||
} | ||
if (!longestSequence && currentSequence) { | ||
longestSequence = currentSequence; | ||
} else if (currentSequence && currentSequence.size > longestSequence.size) { | ||
longestSequence = currentSequence; | ||
if ((!longest && current) || (current && current.size > longest.size)) { | ||
longest = current; | ||
} | ||
for (const index of longestSequence || []) { | ||
for (const index of longest || []) { | ||
parts[index] = ":"; | ||
@@ -148,0 +140,0 @@ } |
{ | ||
"name": "ip-bigint", | ||
"version": "7.2.0", | ||
"version": "7.2.1", | ||
"description": "Convert IPv4 and IPv6 addresses to native BigInt and vice-versa", | ||
@@ -5,0 +5,0 @@ "author": "silverwind <me@silverwind.io>", |
6196
121