cidr-tools 12.0.1 → 12.0.2
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/dist/index.d.ts +1 -0
- package/dist/index.js +29 -100
- package/package.json +11 -11
package/dist/index.d.ts
CHANGED
|
@@ -23,6 +23,7 @@ declare function parseCidr(str: Network): ParsedCidr;
|
|
|
23
23
|
declare function mergeCidr(nets: Networks): Array<Network>;
|
|
24
24
|
/** Returns an array of merged remaining networks of the subtraction of `excludeNetworks` from `baseNetworks`. */
|
|
25
25
|
declare function excludeCidr(base: Networks, excl: Networks): Array<Network>;
|
|
26
|
+
/** Returns a generator for individual IPs contained in the networks. */
|
|
26
27
|
declare function expandCidr(nets: Networks): Generator<Network>;
|
|
27
28
|
/** Returns a boolean that indicates if `networksA` overlap (intersect) with `networksB`. */
|
|
28
29
|
declare function overlapCidr(a: Networks, b: Networks): boolean;
|
package/dist/index.js
CHANGED
|
@@ -93,8 +93,7 @@ function doNormalize(cidr, opts) {
|
|
|
93
93
|
}
|
|
94
94
|
/** Returns a string or array (depending on input) with a normalized representation. Will not include a prefix on single IPs. Will set network address to the start of the network. */
|
|
95
95
|
function normalizeCidr(cidr, opts) {
|
|
96
|
-
|
|
97
|
-
else return doNormalize(cidr, opts);
|
|
96
|
+
return Array.isArray(cidr) ? cidr.map((entry) => doNormalize(entry, opts)) : doNormalize(cidr, opts);
|
|
98
97
|
}
|
|
99
98
|
/** Returns a `parsed` Object which is used internally by this module. It can be used to test whether the passed network is IPv4 or IPv6 or to work with the BigInts directly. */
|
|
100
99
|
function parseCidr(str) {
|
|
@@ -207,108 +206,37 @@ function biggestPowerOfTwo4(num) {
|
|
|
207
206
|
return 1 << 31 - Math.clz32(num) >>> 0;
|
|
208
207
|
}
|
|
209
208
|
function subparts4(pStart, pEnd, output) {
|
|
210
|
-
|
|
211
|
-
|
|
209
|
+
let start = pStart;
|
|
210
|
+
while (start <= pEnd) {
|
|
211
|
+
const size = pEnd - start + 1;
|
|
212
|
+
const lowBit = (start & -start) >>> 0;
|
|
213
|
+
const blockSize = lowBit !== 0 && lowBit <= size ? lowBit : biggestPowerOfTwo4(size);
|
|
212
214
|
output.push({
|
|
213
|
-
start
|
|
214
|
-
end:
|
|
215
|
-
});
|
|
216
|
-
return;
|
|
217
|
-
}
|
|
218
|
-
if (pEnd - pStart === 1) {
|
|
219
|
-
if (pEnd % 2 === 0) output.push({
|
|
220
|
-
start: pStart,
|
|
221
|
-
end: pStart
|
|
222
|
-
}, {
|
|
223
|
-
start: pEnd,
|
|
224
|
-
end: pEnd
|
|
225
|
-
});
|
|
226
|
-
else output.push({
|
|
227
|
-
start: pStart,
|
|
228
|
-
end: pEnd
|
|
215
|
+
start,
|
|
216
|
+
end: start + blockSize - 1
|
|
229
217
|
});
|
|
230
|
-
|
|
218
|
+
start += blockSize;
|
|
231
219
|
}
|
|
232
|
-
const size = pEnd - pStart + 1;
|
|
233
|
-
if ((size & size - 1) === 0 && pStart % size === 0) {
|
|
234
|
-
output.push({
|
|
235
|
-
start: pStart,
|
|
236
|
-
end: pEnd
|
|
237
|
-
});
|
|
238
|
-
return;
|
|
239
|
-
}
|
|
240
|
-
let biggest = biggestPowerOfTwo4(size);
|
|
241
|
-
let start;
|
|
242
|
-
if (pStart % biggest === 0) start = pStart;
|
|
243
|
-
else {
|
|
244
|
-
start = Math.floor(pEnd / biggest) * biggest;
|
|
245
|
-
if (start + biggest - 1 > pEnd) {
|
|
246
|
-
start -= biggest;
|
|
247
|
-
while (start < pStart) {
|
|
248
|
-
biggest /= 2;
|
|
249
|
-
start = (Math.floor(pEnd / biggest) - 1) * biggest;
|
|
250
|
-
}
|
|
251
|
-
}
|
|
252
|
-
}
|
|
253
|
-
const end = start + biggest - 1;
|
|
254
|
-
if (start !== pStart) subparts4(pStart, start - 1, output);
|
|
255
|
-
output.push({
|
|
256
|
-
start,
|
|
257
|
-
end
|
|
258
|
-
});
|
|
259
|
-
if (end !== pEnd) subparts4(end + 1, pEnd, output);
|
|
260
220
|
}
|
|
261
221
|
function subparts6(pStart, pEnd, output) {
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
}, {
|
|
275
|
-
start: pEnd,
|
|
276
|
-
end: pEnd
|
|
277
|
-
});
|
|
278
|
-
else output.push({
|
|
279
|
-
start: pStart,
|
|
280
|
-
end: pEnd
|
|
281
|
-
});
|
|
282
|
-
return;
|
|
283
|
-
}
|
|
284
|
-
const size = pEnd - pStart + 1n;
|
|
285
|
-
if ((size & size - 1n) === 0n && (pStart & size - 1n) === 0n) {
|
|
222
|
+
let start = pStart;
|
|
223
|
+
while (start <= pEnd) {
|
|
224
|
+
const size = pEnd - start + 1n;
|
|
225
|
+
const lowBit = start & -start;
|
|
226
|
+
if ((size & size - 1n) === 0n && (lowBit === 0n || lowBit >= size)) {
|
|
227
|
+
output.push({
|
|
228
|
+
start,
|
|
229
|
+
end: pEnd
|
|
230
|
+
});
|
|
231
|
+
return;
|
|
232
|
+
}
|
|
233
|
+
const blockSize = lowBit !== 0n && lowBit <= size ? lowBit : biggestPowerOfTwo(size);
|
|
286
234
|
output.push({
|
|
287
|
-
start
|
|
288
|
-
end:
|
|
235
|
+
start,
|
|
236
|
+
end: start + blockSize - 1n
|
|
289
237
|
});
|
|
290
|
-
|
|
291
|
-
}
|
|
292
|
-
let biggest = biggestPowerOfTwo(size);
|
|
293
|
-
let start;
|
|
294
|
-
if ((pStart & biggest - 1n) === 0n) start = pStart;
|
|
295
|
-
else {
|
|
296
|
-
start = pEnd & -biggest;
|
|
297
|
-
if (start + biggest - 1n > pEnd) {
|
|
298
|
-
start -= biggest;
|
|
299
|
-
while (start < pStart) {
|
|
300
|
-
biggest >>= 1n;
|
|
301
|
-
start = (pEnd & -biggest) - biggest;
|
|
302
|
-
}
|
|
303
|
-
}
|
|
238
|
+
start += blockSize;
|
|
304
239
|
}
|
|
305
|
-
const end = start + biggest - 1n;
|
|
306
|
-
if (start !== pStart) subparts6(pStart, start - 1n, output);
|
|
307
|
-
output.push({
|
|
308
|
-
start,
|
|
309
|
-
end
|
|
310
|
-
});
|
|
311
|
-
if (end !== pEnd) subparts6(end + 1n, pEnd, output);
|
|
312
240
|
}
|
|
313
241
|
function formatPart4(part) {
|
|
314
242
|
return formatIPv4Fast(part.start) + prefixStrings[Math.clz32(part.end - part.start)];
|
|
@@ -475,6 +403,7 @@ function excludeCidr(base, excl) {
|
|
|
475
403
|
}
|
|
476
404
|
return result;
|
|
477
405
|
}
|
|
406
|
+
/** Returns a generator for individual IPs contained in the networks. */
|
|
478
407
|
function* expandCidr(nets) {
|
|
479
408
|
const arr = Array.isArray(nets) ? nets : [nets];
|
|
480
409
|
const v4 = [];
|
|
@@ -487,13 +416,13 @@ function* expandCidr(nets) {
|
|
|
487
416
|
if (v4.length > 0) for (const part of mergeIntervalsRaw4(v4)) {
|
|
488
417
|
let prevHigh = -1;
|
|
489
418
|
let prefix = "";
|
|
490
|
-
for (let
|
|
491
|
-
const high =
|
|
419
|
+
for (let num = part.start; num <= part.end; num++) {
|
|
420
|
+
const high = num >>> 8;
|
|
492
421
|
if (high !== prevHigh) {
|
|
493
|
-
prefix = octetDotStrings[
|
|
422
|
+
prefix = octetDotStrings[num >>> 24 & 255] + octetDotStrings[num >>> 16 & 255] + octetDotStrings[num >>> 8 & 255];
|
|
494
423
|
prevHigh = high;
|
|
495
424
|
}
|
|
496
|
-
yield prefix + octetStrings[
|
|
425
|
+
yield prefix + octetStrings[num & 255];
|
|
497
426
|
}
|
|
498
427
|
}
|
|
499
428
|
if (v6.length > 0) {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "cidr-tools",
|
|
3
|
-
"version": "12.0.
|
|
3
|
+
"version": "12.0.2",
|
|
4
4
|
"author": "silverwind <me@silverwind.io>",
|
|
5
5
|
"description": "Tools to work with IPv4 and IPv6 CIDR",
|
|
6
6
|
"keywords": [
|
|
@@ -26,23 +26,23 @@
|
|
|
26
26
|
"bun": "*"
|
|
27
27
|
},
|
|
28
28
|
"dependencies": {
|
|
29
|
-
"ip-bigint": "^9.0.
|
|
29
|
+
"ip-bigint": "^9.0.5"
|
|
30
30
|
},
|
|
31
31
|
"devDependencies": {
|
|
32
|
-
"@types/node": "25.
|
|
33
|
-
"@typescript/native-preview": "7.0.0-dev.
|
|
34
|
-
"@vitest/coverage-v8": "4.1.
|
|
32
|
+
"@types/node": "25.9.1",
|
|
33
|
+
"@typescript/native-preview": "7.0.0-dev.20260527.2",
|
|
34
|
+
"@vitest/coverage-v8": "4.1.7",
|
|
35
35
|
"eslint": "10.4.0",
|
|
36
|
-
"eslint-config-silverwind": "133.0.
|
|
36
|
+
"eslint-config-silverwind": "133.0.5",
|
|
37
37
|
"jest-extended": "7.0.0",
|
|
38
|
-
"tsdown": "0.22.
|
|
39
|
-
"tsdown-config-silverwind": "3.0.
|
|
38
|
+
"tsdown": "0.22.1",
|
|
39
|
+
"tsdown-config-silverwind": "3.0.2",
|
|
40
40
|
"typescript": "6.0.3",
|
|
41
41
|
"typescript-config-silverwind": "18.0.0",
|
|
42
|
-
"updates": "17.
|
|
42
|
+
"updates": "17.17.3",
|
|
43
43
|
"updates-config-silverwind": "3.0.2",
|
|
44
|
-
"versions": "15.0
|
|
45
|
-
"vitest": "4.1.
|
|
44
|
+
"versions": "15.1.0",
|
|
45
|
+
"vitest": "4.1.7",
|
|
46
46
|
"vitest-config-silverwind": "11.3.5"
|
|
47
47
|
}
|
|
48
48
|
}
|