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.
Files changed (3) hide show
  1. package/README.md +1 -1
  2. package/dist/index.js +17 -22
  3. 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
- // => {cidr: "::/64", version: 6, prefix: "64", start: 0n, end: 18446744073709551615n}
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
- let end;
242
- if (pStart % biggest === 0) {
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 = (Math.floor(pEnd / biggest) - 1) * biggest;
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
- let end;
300
- if ((pStart & biggest - 1n) === 0n) {
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 = (pEnd & -biggest) - biggest;
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": "11.3.5",
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": ">=18",
25
+ "node": ">=22",
26
26
  "bun": "*"
27
27
  },
28
28
  "dependencies": {
29
- "ip-bigint": "^8.3.6"
29
+ "ip-bigint": "^9.0.3"
30
30
  },
31
31
  "devDependencies": {
32
- "@types/node": "25.6.0",
33
- "@typescript/native-preview": "7.0.0-dev.20260427.1",
34
- "@vitest/coverage-v8": "4.1.5",
35
- "eslint": "10.2.1",
36
- "eslint-config-silverwind": "132.0.0",
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.21.10",
39
- "tsdown-config-silverwind": "2.1.1",
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.4",
43
- "updates-config-silverwind": "2.1.1",
44
- "versions": "15.0.1",
45
- "vitest": "4.1.5",
46
- "vitest-config-silverwind": "11.3.1"
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
  }