cidr-tools 11.3.5 → 12.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/index.js +17 -22
- package/package.json +15 -15
package/README.md
CHANGED
|
@@ -26,7 +26,7 @@ normalizeCidr("::ffff/64");
|
|
|
26
26
|
//=> "::/64"
|
|
27
27
|
|
|
28
28
|
parseCidr("::/64");
|
|
29
|
-
|
|
29
|
+
//=> {cidr: "::/64", version: 6, prefix: "64", start: 0n, end: 18446744073709551615n}
|
|
30
30
|
```
|
|
31
31
|
|
|
32
32
|
## API
|
package/dist/index.js
CHANGED
|
@@ -8,6 +8,7 @@ const bits = {
|
|
|
8
8
|
const octetStrings = Array.from({ length: 256 }, (_, i) => String(i));
|
|
9
9
|
const octetDotStrings = Array.from({ length: 256 }, (_, i) => `${i}.`);
|
|
10
10
|
const prefixStrings = Array.from({ length: 129 }, (_, i) => `/${i}`);
|
|
11
|
+
const prefixNumStrings = Array.from({ length: 129 }, (_, i) => String(i));
|
|
11
12
|
const cmpV4StartEnd = (a, b) => a.start - b.start || a.end - b.end;
|
|
12
13
|
const cmpV4Start = (a, b) => a.start - b.start;
|
|
13
14
|
const cmpV6StartEnd = (a, b) => a.start > b.start ? 1 : a.start < b.start ? -1 : a.end > b.end ? 1 : a.end < b.end ? -1 : 0;
|
|
@@ -104,7 +105,7 @@ function parseCidr(str) {
|
|
|
104
105
|
if (v4num !== -1) {
|
|
105
106
|
const prefixNum = prefixPresent ? parsePrefixNum(str, slashIndex) : 32;
|
|
106
107
|
const ip = formatIPv4Fast(v4num);
|
|
107
|
-
const prefix = String(prefixNum);
|
|
108
|
+
const prefix = prefixNumStrings[prefixNum] ?? String(prefixNum);
|
|
108
109
|
const hostBits = 32 - prefixNum;
|
|
109
110
|
let startNum, endNum;
|
|
110
111
|
if (hostBits >= 32) {
|
|
@@ -130,7 +131,7 @@ function parseCidr(str) {
|
|
|
130
131
|
const { number, version, ipv4mapped, scopeid } = parseIp(ipPart);
|
|
131
132
|
if (!version) throw new Error(`Network is not a CIDR or IP: "${str}"`);
|
|
132
133
|
if (prefixNum === -1) prefixNum = bits[version];
|
|
133
|
-
const prefix = String(prefixNum);
|
|
134
|
+
const prefix = prefixNumStrings[prefixNum] ?? String(prefixNum);
|
|
134
135
|
const ip = stringifyIp({
|
|
135
136
|
number,
|
|
136
137
|
version,
|
|
@@ -238,24 +239,18 @@ function subparts4(pStart, pEnd, output) {
|
|
|
238
239
|
}
|
|
239
240
|
let biggest = biggestPowerOfTwo4(size);
|
|
240
241
|
let start;
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
start = pStart;
|
|
244
|
-
end = start + biggest - 1;
|
|
245
|
-
} else {
|
|
242
|
+
if (pStart % biggest === 0) start = pStart;
|
|
243
|
+
else {
|
|
246
244
|
start = Math.floor(pEnd / biggest) * biggest;
|
|
247
245
|
if (start + biggest - 1 > pEnd) {
|
|
248
|
-
start
|
|
246
|
+
start -= biggest;
|
|
249
247
|
while (start < pStart) {
|
|
250
248
|
biggest /= 2;
|
|
251
249
|
start = (Math.floor(pEnd / biggest) - 1) * biggest;
|
|
252
250
|
}
|
|
253
|
-
end = start + biggest - 1;
|
|
254
|
-
} else {
|
|
255
|
-
start = Math.floor(pEnd / biggest) * biggest;
|
|
256
|
-
end = start + biggest - 1;
|
|
257
251
|
}
|
|
258
252
|
}
|
|
253
|
+
const end = start + biggest - 1;
|
|
259
254
|
if (start !== pStart) subparts4(pStart, start - 1, output);
|
|
260
255
|
output.push({
|
|
261
256
|
start,
|
|
@@ -296,24 +291,18 @@ function subparts6(pStart, pEnd, output) {
|
|
|
296
291
|
}
|
|
297
292
|
let biggest = biggestPowerOfTwo(size);
|
|
298
293
|
let start;
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
start = pStart;
|
|
302
|
-
end = start + biggest - 1n;
|
|
303
|
-
} else {
|
|
294
|
+
if ((pStart & biggest - 1n) === 0n) start = pStart;
|
|
295
|
+
else {
|
|
304
296
|
start = pEnd & -biggest;
|
|
305
297
|
if (start + biggest - 1n > pEnd) {
|
|
306
|
-
start
|
|
298
|
+
start -= biggest;
|
|
307
299
|
while (start < pStart) {
|
|
308
300
|
biggest >>= 1n;
|
|
309
301
|
start = (pEnd & -biggest) - biggest;
|
|
310
302
|
}
|
|
311
|
-
end = start + biggest - 1n;
|
|
312
|
-
} else {
|
|
313
|
-
start = pEnd & -biggest;
|
|
314
|
-
end = start + biggest - 1n;
|
|
315
303
|
}
|
|
316
304
|
}
|
|
305
|
+
const end = start + biggest - 1n;
|
|
317
306
|
if (start !== pStart) subparts6(pStart, start - 1n, output);
|
|
318
307
|
output.push({
|
|
319
308
|
start,
|
|
@@ -524,6 +513,9 @@ function overlapCidr(a, b) {
|
|
|
524
513
|
if (parseIPv4Range(a)) {
|
|
525
514
|
const startA = rangeV4Start, endA = rangeV4End;
|
|
526
515
|
if (parseIPv4Range(b)) return startA <= rangeV4End && rangeV4Start <= endA;
|
|
516
|
+
const pb = parseCidrLean(b);
|
|
517
|
+
if (pb.version !== 4) return false;
|
|
518
|
+
return startA <= pb.end && pb.start <= endA;
|
|
527
519
|
}
|
|
528
520
|
const pa = parseCidrLean(a);
|
|
529
521
|
const pb = parseCidrLean(b);
|
|
@@ -584,6 +576,9 @@ function containsCidr(a, b) {
|
|
|
584
576
|
if (parseIPv4Range(a)) {
|
|
585
577
|
const startA = rangeV4Start, endA = rangeV4End;
|
|
586
578
|
if (parseIPv4Range(b)) return startA <= rangeV4Start && endA >= rangeV4End;
|
|
579
|
+
const pb = parseCidrLean(b);
|
|
580
|
+
if (pb.version !== 4) return false;
|
|
581
|
+
return startA <= pb.start && endA >= pb.end;
|
|
587
582
|
}
|
|
588
583
|
const pa = parseCidrLean(a);
|
|
589
584
|
const pb = parseCidrLean(b);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "cidr-tools",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "12.0.1",
|
|
4
4
|
"author": "silverwind <me@silverwind.io>",
|
|
5
5
|
"description": "Tools to work with IPv4 and IPv6 CIDR",
|
|
6
6
|
"keywords": [
|
|
@@ -22,27 +22,27 @@
|
|
|
22
22
|
"dist"
|
|
23
23
|
],
|
|
24
24
|
"engines": {
|
|
25
|
-
"node": ">=
|
|
25
|
+
"node": ">=22",
|
|
26
26
|
"bun": "*"
|
|
27
27
|
},
|
|
28
28
|
"dependencies": {
|
|
29
|
-
"ip-bigint": "^
|
|
29
|
+
"ip-bigint": "^9.0.3"
|
|
30
30
|
},
|
|
31
31
|
"devDependencies": {
|
|
32
|
-
"@types/node": "25.
|
|
33
|
-
"@typescript/native-preview": "7.0.0-dev.
|
|
34
|
-
"@vitest/coverage-v8": "4.1.
|
|
35
|
-
"eslint": "10.
|
|
36
|
-
"eslint-config-silverwind": "
|
|
32
|
+
"@types/node": "25.8.0",
|
|
33
|
+
"@typescript/native-preview": "7.0.0-dev.20260516.1",
|
|
34
|
+
"@vitest/coverage-v8": "4.1.6",
|
|
35
|
+
"eslint": "10.4.0",
|
|
36
|
+
"eslint-config-silverwind": "133.0.3",
|
|
37
37
|
"jest-extended": "7.0.0",
|
|
38
|
-
"tsdown": "0.
|
|
39
|
-
"tsdown-config-silverwind": "
|
|
38
|
+
"tsdown": "0.22.0",
|
|
39
|
+
"tsdown-config-silverwind": "3.0.1",
|
|
40
40
|
"typescript": "6.0.3",
|
|
41
41
|
"typescript-config-silverwind": "18.0.0",
|
|
42
|
-
"updates": "17.16.
|
|
43
|
-
"updates-config-silverwind": "
|
|
44
|
-
"versions": "15.0.
|
|
45
|
-
"vitest": "4.1.
|
|
46
|
-
"vitest-config-silverwind": "11.3.
|
|
42
|
+
"updates": "17.16.12",
|
|
43
|
+
"updates-config-silverwind": "3.0.2",
|
|
44
|
+
"versions": "15.0.4",
|
|
45
|
+
"vitest": "4.1.6",
|
|
46
|
+
"vitest-config-silverwind": "11.3.5"
|
|
47
47
|
}
|
|
48
48
|
}
|