cidr-block 2.1.0 → 2.1.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/dist/cjs/ipv4-address.cjs +10 -13
- package/dist/cjs/ipv4-address.cjs.map +1 -1
- package/dist/cjs/ipv4-cidr.cjs +36 -39
- package/dist/cjs/ipv4-cidr.cjs.map +1 -1
- package/dist/cjs/ipv4-errors.cjs +3 -6
- package/dist/cjs/ipv4-errors.cjs.map +1 -1
- package/dist/cjs/ipv6-address.cjs +20 -23
- package/dist/cjs/ipv6-address.cjs.map +1 -1
- package/dist/cjs/ipv6-cidr.cjs +37 -40
- package/dist/cjs/ipv6-cidr.cjs.map +1 -1
- package/dist/cjs/ipv6-errors.cjs +3 -6
- package/dist/cjs/ipv6-errors.cjs.map +1 -1
- package/dist/esm/ipv4-address.js +10 -13
- package/dist/esm/ipv4-address.js.map +1 -1
- package/dist/esm/ipv4-cidr.js +36 -39
- package/dist/esm/ipv4-cidr.js.map +1 -1
- package/dist/esm/ipv4-errors.js +3 -6
- package/dist/esm/ipv4-errors.js.map +1 -1
- package/dist/esm/ipv6-address.js +20 -23
- package/dist/esm/ipv6-address.js.map +1 -1
- package/dist/esm/ipv6-cidr.js +37 -40
- package/dist/esm/ipv6-cidr.js.map +1 -1
- package/dist/esm/ipv6-errors.js +3 -6
- package/dist/esm/ipv6-errors.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,10 +1,8 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var tslib_es6_js = require('/Users/brandon/cidr-block/node_modules/tslib/tslib.es6.js');
|
|
4
3
|
var ipv4 = require('./ipv4.cjs');
|
|
5
4
|
var ipv4Errors = require('./ipv4-errors.cjs');
|
|
6
5
|
|
|
7
|
-
var _Ipv4Address_octets;
|
|
8
6
|
/**
|
|
9
7
|
* Represents an IPv4 address with utility methods for manipulation and comparison.
|
|
10
8
|
*
|
|
@@ -62,12 +60,12 @@ var _Ipv4Address_octets;
|
|
|
62
60
|
* ```
|
|
63
61
|
*/
|
|
64
62
|
class Ipv4Address {
|
|
63
|
+
#octets;
|
|
65
64
|
constructor(ip) {
|
|
66
|
-
_Ipv4Address_octets.set(this, void 0);
|
|
67
65
|
if (!ipv4.ipv4.isValidAddress(ip)) {
|
|
68
66
|
throw new ipv4Errors.InvalidIpv4AddressError(ip);
|
|
69
67
|
}
|
|
70
|
-
|
|
68
|
+
this.#octets = ipv4.ipv4.parseOctets(ip);
|
|
71
69
|
}
|
|
72
70
|
/**
|
|
73
71
|
* Gets the octets of the IPv4 address.
|
|
@@ -83,7 +81,7 @@ class Ipv4Address {
|
|
|
83
81
|
* @returns An array of four numbers representing the octets of the IPv4 address.
|
|
84
82
|
*/
|
|
85
83
|
octets() {
|
|
86
|
-
return
|
|
84
|
+
return this.#octets;
|
|
87
85
|
}
|
|
88
86
|
/**
|
|
89
87
|
* Returns the string representation of the IPv4 address.
|
|
@@ -99,7 +97,7 @@ class Ipv4Address {
|
|
|
99
97
|
* @returns The IPv4 address as a string in dotted-decimal notation (example: "192.187.0.1").
|
|
100
98
|
*/
|
|
101
99
|
toString() {
|
|
102
|
-
return
|
|
100
|
+
return this.#octets.join('.');
|
|
103
101
|
}
|
|
104
102
|
/**
|
|
105
103
|
* Returns the binary string representation of the IPv4 address.
|
|
@@ -115,7 +113,7 @@ class Ipv4Address {
|
|
|
115
113
|
* @returns The IPv4 address as a binary string in dotted-decimal notation (example: "11000000.10111011.00000000.00000001").
|
|
116
114
|
*/
|
|
117
115
|
toBinaryString() {
|
|
118
|
-
return
|
|
116
|
+
return this.#octets.map(octet => octet.toString(2).padStart(8, '0')).join('.');
|
|
119
117
|
}
|
|
120
118
|
/**
|
|
121
119
|
* Converts the IPv4 address to its numeric representation.
|
|
@@ -131,7 +129,7 @@ class Ipv4Address {
|
|
|
131
129
|
* @returns The IPv4 address as a number.
|
|
132
130
|
*/
|
|
133
131
|
toNumber() {
|
|
134
|
-
return (((
|
|
132
|
+
return (((this.#octets[0] << 24) | (this.#octets[1] << 16) | (this.#octets[2] << 8) | this.#octets[3]) >>> 0);
|
|
135
133
|
}
|
|
136
134
|
/**
|
|
137
135
|
* Checks if there is a next sequential IPv4 address.
|
|
@@ -338,7 +336,7 @@ class Ipv4Address {
|
|
|
338
336
|
* @returns true if the IPv4 address is a loopback address (example: 127.0.0.1 is true)
|
|
339
337
|
*/
|
|
340
338
|
isLoopbackAddress() {
|
|
341
|
-
return
|
|
339
|
+
return this.#octets[0] === 127;
|
|
342
340
|
}
|
|
343
341
|
/**
|
|
344
342
|
* Checks if the IPv4 address is a private address.
|
|
@@ -361,7 +359,7 @@ class Ipv4Address {
|
|
|
361
359
|
* @returns true if the IPv4 address is in any of the private address ranges.
|
|
362
360
|
*/
|
|
363
361
|
isPrivateAddress() {
|
|
364
|
-
const [o1, o2] =
|
|
362
|
+
const [o1, o2] = this.#octets;
|
|
365
363
|
return o1 === 10 || (o1 === 172 && o2 >= 16 && o2 <= 31) || (o1 === 192 && o2 === 168);
|
|
366
364
|
}
|
|
367
365
|
/**
|
|
@@ -379,7 +377,7 @@ class Ipv4Address {
|
|
|
379
377
|
* @returns true if the IPv4 address is a local-link address.
|
|
380
378
|
*/
|
|
381
379
|
isLocalLinkAddress() {
|
|
382
|
-
const [o1, o2] =
|
|
380
|
+
const [o1, o2] = this.#octets;
|
|
383
381
|
return o1 === 169 && o2 === 254;
|
|
384
382
|
}
|
|
385
383
|
/**
|
|
@@ -397,11 +395,10 @@ class Ipv4Address {
|
|
|
397
395
|
* @returns true if the IPv4 address is a multicast address.
|
|
398
396
|
*/
|
|
399
397
|
isMulticastAddress() {
|
|
400
|
-
const firstOctet =
|
|
398
|
+
const firstOctet = this.#octets[0];
|
|
401
399
|
return firstOctet >= 224 && firstOctet <= 239;
|
|
402
400
|
}
|
|
403
401
|
}
|
|
404
|
-
_Ipv4Address_octets = new WeakMap();
|
|
405
402
|
|
|
406
403
|
exports.Ipv4Address = Ipv4Address;
|
|
407
404
|
//# sourceMappingURL=ipv4-address.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ipv4-address.cjs","sources":["../../../src/ipv4-address.ts"],"sourcesContent":[null],"names":["ipv4","InvalidIpv4AddressError"
|
|
1
|
+
{"version":3,"file":"ipv4-address.cjs","sources":["../../../src/ipv4-address.ts"],"sourcesContent":[null],"names":["ipv4","InvalidIpv4AddressError"],"mappings":"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"}
|
package/dist/cjs/ipv4-cidr.cjs
CHANGED
|
@@ -1,11 +1,9 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var tslib_es6_js = require('/Users/brandon/cidr-block/node_modules/tslib/tslib.es6.js');
|
|
4
3
|
var ipv4 = require('./ipv4.cjs');
|
|
5
4
|
var ipv4Address = require('./ipv4-address.cjs');
|
|
6
5
|
var ipv4Errors = require('./ipv4-errors.cjs');
|
|
7
6
|
|
|
8
|
-
var _Ipv4Cidr_address, _Ipv4Cidr_range;
|
|
9
7
|
/**
|
|
10
8
|
* Represents an IPv4 CIDR block with utility methods for subnet operations.
|
|
11
9
|
*
|
|
@@ -89,24 +87,24 @@ var _Ipv4Cidr_address, _Ipv4Cidr_range;
|
|
|
89
87
|
* ```
|
|
90
88
|
*/
|
|
91
89
|
class Ipv4Cidr {
|
|
90
|
+
#address;
|
|
91
|
+
#range;
|
|
92
92
|
constructor(address) {
|
|
93
|
-
_Ipv4Cidr_address.set(this, void 0);
|
|
94
|
-
_Ipv4Cidr_range.set(this, void 0);
|
|
95
93
|
if (!ipv4.ipv4.isValidCIDR(address)) {
|
|
96
94
|
throw new ipv4Errors.InvalidIpv4CidrError(address);
|
|
97
95
|
}
|
|
98
96
|
if (typeof address === 'string') {
|
|
99
97
|
const [ip, rangeStr] = address.split('/');
|
|
100
|
-
|
|
101
|
-
|
|
98
|
+
this.#address = new ipv4Address.Ipv4Address(ip);
|
|
99
|
+
this.#range = parseInt(rangeStr, 10);
|
|
102
100
|
}
|
|
103
101
|
else if (Array.isArray(address)) {
|
|
104
|
-
|
|
105
|
-
|
|
102
|
+
this.#address = new ipv4Address.Ipv4Address(address[0]);
|
|
103
|
+
this.#range = address[1];
|
|
106
104
|
}
|
|
107
105
|
else if (typeof address === 'object' && address !== null) {
|
|
108
|
-
|
|
109
|
-
|
|
106
|
+
this.#address = new ipv4Address.Ipv4Address(address.address);
|
|
107
|
+
this.#range = address.range;
|
|
110
108
|
}
|
|
111
109
|
else {
|
|
112
110
|
throw new ipv4Errors.InvalidIpv4CidrError(address);
|
|
@@ -126,7 +124,7 @@ class Ipv4Cidr {
|
|
|
126
124
|
* @returns The base IPv4 address.
|
|
127
125
|
*/
|
|
128
126
|
baseAddress() {
|
|
129
|
-
return
|
|
127
|
+
return this.#address;
|
|
130
128
|
}
|
|
131
129
|
/**
|
|
132
130
|
* Gets the CIDR range.
|
|
@@ -142,7 +140,7 @@ class Ipv4Cidr {
|
|
|
142
140
|
* @returns The CIDR range as a number.
|
|
143
141
|
*/
|
|
144
142
|
range() {
|
|
145
|
-
return
|
|
143
|
+
return this.#range;
|
|
146
144
|
}
|
|
147
145
|
/**
|
|
148
146
|
* Calculates the netmask for the CIDR range.
|
|
@@ -159,7 +157,7 @@ class Ipv4Cidr {
|
|
|
159
157
|
* @returns The netmask as an Ipv4Address.
|
|
160
158
|
*/
|
|
161
159
|
netmask() {
|
|
162
|
-
const maskNumber =
|
|
160
|
+
const maskNumber = this.#range === 0 ? 0 : (-1 << (32 - this.#range)) >>> 0;
|
|
163
161
|
return new ipv4Address.Ipv4Address(maskNumber);
|
|
164
162
|
}
|
|
165
163
|
/**
|
|
@@ -176,7 +174,7 @@ class Ipv4Cidr {
|
|
|
176
174
|
* @returns The IPv4 CIDR as a string (example: "192.0.0.0/24").
|
|
177
175
|
*/
|
|
178
176
|
toString() {
|
|
179
|
-
return `${
|
|
177
|
+
return `${this.#address.toString()}/${this.#range}`;
|
|
180
178
|
}
|
|
181
179
|
/**
|
|
182
180
|
* Gets the address and range parts of the IPv4 CIDR.
|
|
@@ -193,7 +191,7 @@ class Ipv4Cidr {
|
|
|
193
191
|
* @returns A tuple containing the IPv4 address and the CIDR range.
|
|
194
192
|
*/
|
|
195
193
|
rangeParts() {
|
|
196
|
-
return [
|
|
194
|
+
return [this.#address, this.#range];
|
|
197
195
|
}
|
|
198
196
|
/**
|
|
199
197
|
* Calculates the total number of addresses in the CIDR range.
|
|
@@ -210,7 +208,7 @@ class Ipv4Cidr {
|
|
|
210
208
|
* @returns The total number of addresses in the CIDR range.
|
|
211
209
|
*/
|
|
212
210
|
addressCount() {
|
|
213
|
-
return 2 ** (32 -
|
|
211
|
+
return 2 ** (32 - this.#range);
|
|
214
212
|
}
|
|
215
213
|
/**
|
|
216
214
|
* Generates all IPv4 addresses within the CIDR range.
|
|
@@ -229,7 +227,7 @@ class Ipv4Cidr {
|
|
|
229
227
|
* @returns A generator that yields each IPv4 address in the CIDR range.
|
|
230
228
|
*/
|
|
231
229
|
*addresses() {
|
|
232
|
-
const baseNumber =
|
|
230
|
+
const baseNumber = this.#address.toNumber();
|
|
233
231
|
const count = this.addressCount();
|
|
234
232
|
for (let i = 0; i < count; i++) {
|
|
235
233
|
yield new ipv4Address.Ipv4Address(baseNumber + i);
|
|
@@ -253,7 +251,7 @@ class Ipv4Cidr {
|
|
|
253
251
|
*/
|
|
254
252
|
equals(other) {
|
|
255
253
|
const otherCidr = other instanceof Ipv4Cidr ? other : new Ipv4Cidr(other);
|
|
256
|
-
return
|
|
254
|
+
return this.#address.equals(otherCidr.#address) && this.#range === otherCidr.#range;
|
|
257
255
|
}
|
|
258
256
|
/**
|
|
259
257
|
* Checks if there is a next sequential CIDR.
|
|
@@ -269,7 +267,7 @@ class Ipv4Cidr {
|
|
|
269
267
|
* @returns true if there is a next CIDR.
|
|
270
268
|
*/
|
|
271
269
|
hasNextCIDR() {
|
|
272
|
-
const nextBaseAddressNumber =
|
|
270
|
+
const nextBaseAddressNumber = this.#address.toNumber() + this.addressCount();
|
|
273
271
|
return nextBaseAddressNumber <= ipv4.ipv4.MAX_SIZE;
|
|
274
272
|
}
|
|
275
273
|
/**
|
|
@@ -289,11 +287,11 @@ class Ipv4Cidr {
|
|
|
289
287
|
* @returns The next CIDR, or undefined if there is no next CIDR.
|
|
290
288
|
*/
|
|
291
289
|
nextCIDR() {
|
|
292
|
-
const nextBaseAddressNumber =
|
|
290
|
+
const nextBaseAddressNumber = this.#address.toNumber() + this.addressCount();
|
|
293
291
|
if (nextBaseAddressNumber > ipv4.ipv4.MAX_SIZE) {
|
|
294
292
|
return undefined;
|
|
295
293
|
}
|
|
296
|
-
return new Ipv4Cidr([nextBaseAddressNumber,
|
|
294
|
+
return new Ipv4Cidr([nextBaseAddressNumber, this.#range]);
|
|
297
295
|
}
|
|
298
296
|
/**
|
|
299
297
|
* Checks if there is a previous sequential CIDR.
|
|
@@ -309,7 +307,7 @@ class Ipv4Cidr {
|
|
|
309
307
|
* @returns true if there is a previous CIDR.
|
|
310
308
|
*/
|
|
311
309
|
hasPreviousCIDR() {
|
|
312
|
-
return
|
|
310
|
+
return this.#address.toNumber() >= this.addressCount();
|
|
313
311
|
}
|
|
314
312
|
/**
|
|
315
313
|
* Gets the previous sequential CIDR.
|
|
@@ -328,11 +326,11 @@ class Ipv4Cidr {
|
|
|
328
326
|
* @returns The previous CIDR, or undefined if there is no previous CIDR.
|
|
329
327
|
*/
|
|
330
328
|
previousCIDR() {
|
|
331
|
-
const prevBaseAddressNumber =
|
|
329
|
+
const prevBaseAddressNumber = this.#address.toNumber() - this.addressCount();
|
|
332
330
|
if (prevBaseAddressNumber < ipv4.ipv4.MIN_SIZE) {
|
|
333
331
|
return undefined;
|
|
334
332
|
}
|
|
335
|
-
return new Ipv4Cidr([prevBaseAddressNumber,
|
|
333
|
+
return new Ipv4Cidr([prevBaseAddressNumber, this.#range]);
|
|
336
334
|
}
|
|
337
335
|
/**
|
|
338
336
|
* Gets the first usable address in the CIDR range.
|
|
@@ -351,10 +349,10 @@ class Ipv4Cidr {
|
|
|
351
349
|
* @returns The first usable IPv4 address, or undefined if the range is /32.
|
|
352
350
|
*/
|
|
353
351
|
getFirstUsableAddress() {
|
|
354
|
-
if (
|
|
352
|
+
if (this.#range === 32) {
|
|
355
353
|
return undefined;
|
|
356
354
|
}
|
|
357
|
-
const firstUsableNumber =
|
|
355
|
+
const firstUsableNumber = this.#address.toNumber() + 1;
|
|
358
356
|
return new ipv4Address.Ipv4Address(firstUsableNumber);
|
|
359
357
|
}
|
|
360
358
|
/**
|
|
@@ -374,10 +372,10 @@ class Ipv4Cidr {
|
|
|
374
372
|
* @returns The last usable IPv4 address, or undefined if the range is /32.
|
|
375
373
|
*/
|
|
376
374
|
getLastUsableAddress() {
|
|
377
|
-
if (
|
|
375
|
+
if (this.#range === 32) {
|
|
378
376
|
return undefined;
|
|
379
377
|
}
|
|
380
|
-
const lastUsableNumber =
|
|
378
|
+
const lastUsableNumber = this.#address.toNumber() + this.addressCount() - 2;
|
|
381
379
|
return new ipv4Address.Ipv4Address(lastUsableNumber);
|
|
382
380
|
}
|
|
383
381
|
/**
|
|
@@ -397,7 +395,7 @@ class Ipv4Cidr {
|
|
|
397
395
|
*/
|
|
398
396
|
includes(ip) {
|
|
399
397
|
const ipNumber = ip.toNumber();
|
|
400
|
-
const baseNumber =
|
|
398
|
+
const baseNumber = this.#address.toNumber();
|
|
401
399
|
const count = this.addressCount();
|
|
402
400
|
return ipNumber >= baseNumber && ipNumber < baseNumber + count;
|
|
403
401
|
}
|
|
@@ -419,9 +417,9 @@ class Ipv4Cidr {
|
|
|
419
417
|
*/
|
|
420
418
|
overlaps(other) {
|
|
421
419
|
const otherCidr = other instanceof Ipv4Cidr ? other : new Ipv4Cidr(other);
|
|
422
|
-
const thisBase =
|
|
420
|
+
const thisBase = this.#address.toNumber();
|
|
423
421
|
const thisCount = this.addressCount();
|
|
424
|
-
const otherBase =
|
|
422
|
+
const otherBase = otherCidr.#address.toNumber();
|
|
425
423
|
const otherCount = otherCidr.addressCount();
|
|
426
424
|
return thisBase < otherBase + otherCount && otherBase < thisBase + thisCount;
|
|
427
425
|
}
|
|
@@ -443,12 +441,12 @@ class Ipv4Cidr {
|
|
|
443
441
|
* @throws InvalidIpv4CidrRangeError if the new range is less than the current range or greater than the maximum range.
|
|
444
442
|
*/
|
|
445
443
|
subnet(newRange) {
|
|
446
|
-
if (newRange <
|
|
447
|
-
throw new ipv4Errors.InvalidIpv4CidrRangeError(`New range ${newRange} must be between current range ${
|
|
444
|
+
if (newRange < this.#range || newRange > ipv4.ipv4.MAX_RANGE) {
|
|
445
|
+
throw new ipv4Errors.InvalidIpv4CidrRangeError(`New range ${newRange} must be between current range ${this.#range} and ${ipv4.ipv4.MAX_RANGE}`);
|
|
448
446
|
}
|
|
449
447
|
const subranges = [];
|
|
450
|
-
const totalSubnets = 2 ** (newRange -
|
|
451
|
-
const baseNumber =
|
|
448
|
+
const totalSubnets = 2 ** (newRange - this.#range);
|
|
449
|
+
const baseNumber = this.#address.toNumber();
|
|
452
450
|
const subnetSize = 2 ** (32 - newRange);
|
|
453
451
|
for (let i = 0; i < totalSubnets; i++) {
|
|
454
452
|
const subnetBaseNumber = baseNumber + i * subnetSize;
|
|
@@ -476,11 +474,11 @@ class Ipv4Cidr {
|
|
|
476
474
|
*/
|
|
477
475
|
subnetBy(ranges) {
|
|
478
476
|
const subranges = [];
|
|
479
|
-
let currentBase =
|
|
477
|
+
let currentBase = this.#address.toNumber();
|
|
480
478
|
const endAddress = currentBase + this.addressCount();
|
|
481
479
|
for (const range of ranges) {
|
|
482
|
-
if (range <
|
|
483
|
-
throw new ipv4Errors.InvalidIpv4CidrRangeError(`Range ${range} must be between current range ${
|
|
480
|
+
if (range < this.#range || range > ipv4.ipv4.MAX_RANGE) {
|
|
481
|
+
throw new ipv4Errors.InvalidIpv4CidrRangeError(`Range ${range} must be between current range ${this.#range} and ${ipv4.ipv4.MAX_RANGE}`);
|
|
484
482
|
}
|
|
485
483
|
const subnetSize = 2 ** (32 - range);
|
|
486
484
|
if (currentBase + subnetSize > endAddress) {
|
|
@@ -492,7 +490,6 @@ class Ipv4Cidr {
|
|
|
492
490
|
return subranges;
|
|
493
491
|
}
|
|
494
492
|
}
|
|
495
|
-
_Ipv4Cidr_address = new WeakMap(), _Ipv4Cidr_range = new WeakMap();
|
|
496
493
|
|
|
497
494
|
exports.Ipv4Cidr = Ipv4Cidr;
|
|
498
495
|
//# sourceMappingURL=ipv4-cidr.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ipv4-cidr.cjs","sources":["../../../src/ipv4-cidr.ts"],"sourcesContent":[null],"names":["ipv4","InvalidIpv4CidrError","
|
|
1
|
+
{"version":3,"file":"ipv4-cidr.cjs","sources":["../../../src/ipv4-cidr.ts"],"sourcesContent":[null],"names":["ipv4","InvalidIpv4CidrError","Ipv4Address","InvalidIpv4CidrRangeError"],"mappings":"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"}
|
package/dist/cjs/ipv4-errors.cjs
CHANGED
|
@@ -1,22 +1,19 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
class InvalidIpv4AddressError extends Error {
|
|
4
|
+
name = 'InvalidIpv4AddressError';
|
|
4
5
|
constructor(invalidAddress) {
|
|
5
6
|
super(`${invalidAddress} is not a valid IPv4 address`);
|
|
6
|
-
this.name = 'InvalidIpv4AddressError';
|
|
7
7
|
}
|
|
8
8
|
}
|
|
9
9
|
class InvalidIpv4CidrError extends Error {
|
|
10
|
+
name = 'InvalidIpv4CidrError';
|
|
10
11
|
constructor(invalidCidr) {
|
|
11
12
|
super(`${invalidCidr} is not a valid IPv4 CIDR range`);
|
|
12
|
-
this.name = 'InvalidIpv4CidrError';
|
|
13
13
|
}
|
|
14
14
|
}
|
|
15
15
|
class InvalidIpv4CidrRangeError extends Error {
|
|
16
|
-
|
|
17
|
-
super(...arguments);
|
|
18
|
-
this.name = 'InvalidIpv4RangeError';
|
|
19
|
-
}
|
|
16
|
+
name = 'InvalidIpv4RangeError';
|
|
20
17
|
}
|
|
21
18
|
|
|
22
19
|
exports.InvalidIpv4AddressError = InvalidIpv4AddressError;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ipv4-errors.cjs","sources":["../../../src/ipv4-errors.ts"],"sourcesContent":[null],"names":[],"mappings":";;AAAM,MAAO,uBAAwB,SAAQ,KAAK,CAAA;
|
|
1
|
+
{"version":3,"file":"ipv4-errors.cjs","sources":["../../../src/ipv4-errors.ts"],"sourcesContent":[null],"names":[],"mappings":";;AAAM,MAAO,uBAAwB,SAAQ,KAAK,CAAA;IACvC,IAAI,GAAG,yBAAyB;AAEzC,IAAA,WAAA,CAAY,cAAuB,EAAA;AACjC,QAAA,KAAK,CAAC,CAAA,EAAG,cAAc,CAAA,4BAAA,CAA8B,CAAC;IACxD;AACD;AAEK,MAAO,oBAAqB,SAAQ,KAAK,CAAA;IACpC,IAAI,GAAG,sBAAsB;AAEtC,IAAA,WAAA,CAAY,WAAoB,EAAA;AAC9B,QAAA,KAAK,CAAC,CAAA,EAAG,WAAW,CAAA,+BAAA,CAAiC,CAAC;IACxD;AACD;AAEK,MAAO,yBAA0B,SAAQ,KAAK,CAAA;IACzC,IAAI,GAAG,uBAAuB;AACxC;;;;;;"}
|
|
@@ -1,10 +1,8 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var tslib_es6_js = require('/Users/brandon/cidr-block/node_modules/tslib/tslib.es6.js');
|
|
4
3
|
var ipv6 = require('./ipv6.cjs');
|
|
5
4
|
var ipv6Errors = require('./ipv6-errors.cjs');
|
|
6
5
|
|
|
7
|
-
var _Ipv6Address_hextets;
|
|
8
6
|
/**
|
|
9
7
|
* Represents an IPv6 address with utility methods for manipulation and comparison.
|
|
10
8
|
*
|
|
@@ -62,12 +60,12 @@ var _Ipv6Address_hextets;
|
|
|
62
60
|
* ```
|
|
63
61
|
*/
|
|
64
62
|
class Ipv6Address {
|
|
63
|
+
#hextets;
|
|
65
64
|
constructor(ip) {
|
|
66
|
-
_Ipv6Address_hextets.set(this, void 0);
|
|
67
65
|
if (!ipv6.ipv6.isValidAddress(ip)) {
|
|
68
66
|
throw new ipv6Errors.InvalidIpv6AddressError(ip);
|
|
69
67
|
}
|
|
70
|
-
|
|
68
|
+
this.#hextets = ipv6.ipv6.parseHextets(ip);
|
|
71
69
|
}
|
|
72
70
|
/**
|
|
73
71
|
* Gets the hextets of the IPv6 address.
|
|
@@ -83,7 +81,7 @@ class Ipv6Address {
|
|
|
83
81
|
* @returns An array of eight numbers representing the hextets of the IPv6 address.
|
|
84
82
|
*/
|
|
85
83
|
hextets() {
|
|
86
|
-
return
|
|
84
|
+
return this.#hextets;
|
|
87
85
|
}
|
|
88
86
|
/**
|
|
89
87
|
* Returns the full (expanded) string representation of the IPv6 address.
|
|
@@ -99,7 +97,7 @@ class Ipv6Address {
|
|
|
99
97
|
* @returns The IPv6 address as a full string with all hextets expanded.
|
|
100
98
|
*/
|
|
101
99
|
toFullString() {
|
|
102
|
-
return
|
|
100
|
+
return this.#hextets.map(h => h.toString(16).padStart(4, '0')).join(':');
|
|
103
101
|
}
|
|
104
102
|
/**
|
|
105
103
|
* Returns the compressed string representation of the IPv6 address.
|
|
@@ -122,7 +120,7 @@ class Ipv6Address {
|
|
|
122
120
|
let currentStart = -1;
|
|
123
121
|
let currentLength = 0;
|
|
124
122
|
for (let i = 0; i < 8; i++) {
|
|
125
|
-
if (
|
|
123
|
+
if (this.#hextets[i] === 0) {
|
|
126
124
|
if (currentStart === -1) {
|
|
127
125
|
currentStart = i;
|
|
128
126
|
currentLength = 1;
|
|
@@ -148,10 +146,10 @@ class Ipv6Address {
|
|
|
148
146
|
// Build the compressed string
|
|
149
147
|
if (longestStart === -1) {
|
|
150
148
|
// No compression possible
|
|
151
|
-
return
|
|
149
|
+
return this.#hextets.map(h => h.toString(16)).join(':');
|
|
152
150
|
}
|
|
153
|
-
const before =
|
|
154
|
-
const after =
|
|
151
|
+
const before = this.#hextets.slice(0, longestStart).map(h => h.toString(16));
|
|
152
|
+
const after = this.#hextets.slice(longestStart + longestLength).map(h => h.toString(16));
|
|
155
153
|
if (before.length === 0 && after.length === 0) {
|
|
156
154
|
return '::';
|
|
157
155
|
}
|
|
@@ -178,7 +176,7 @@ class Ipv6Address {
|
|
|
178
176
|
* @returns The IPv6 address as a binary string with colons separating hextets.
|
|
179
177
|
*/
|
|
180
178
|
toBinaryString() {
|
|
181
|
-
return
|
|
179
|
+
return this.#hextets.map(h => h.toString(2).padStart(16, '0')).join(':');
|
|
182
180
|
}
|
|
183
181
|
/**
|
|
184
182
|
* Converts the IPv6 address to its BigInt representation.
|
|
@@ -196,7 +194,7 @@ class Ipv6Address {
|
|
|
196
194
|
toBigInt() {
|
|
197
195
|
let result = 0n;
|
|
198
196
|
for (let i = 0; i < 8; i++) {
|
|
199
|
-
result = (result << 16n) | BigInt(
|
|
197
|
+
result = (result << 16n) | BigInt(this.#hextets[i]);
|
|
200
198
|
}
|
|
201
199
|
return result;
|
|
202
200
|
}
|
|
@@ -440,7 +438,7 @@ class Ipv6Address {
|
|
|
440
438
|
isUniqueLocalAddress() {
|
|
441
439
|
// fc00::/7 means first 7 bits are 1111110
|
|
442
440
|
// This covers fc00::/8 and fd00::/8
|
|
443
|
-
return (
|
|
441
|
+
return (this.#hextets[0] & 0xfe00) === 0xfc00;
|
|
444
442
|
}
|
|
445
443
|
/**
|
|
446
444
|
* Checks if the IPv6 address is a link-local address (fe80::/10)
|
|
@@ -457,7 +455,7 @@ class Ipv6Address {
|
|
|
457
455
|
*/
|
|
458
456
|
isLinkLocalAddress() {
|
|
459
457
|
// fe80::/10 means first 10 bits are 1111111010
|
|
460
|
-
return (
|
|
458
|
+
return (this.#hextets[0] & 0xffc0) === 0xfe80;
|
|
461
459
|
}
|
|
462
460
|
/**
|
|
463
461
|
* Checks if the IPv6 address is a multicast address (ff00::/8)
|
|
@@ -473,7 +471,7 @@ class Ipv6Address {
|
|
|
473
471
|
* @returns true if the IPv6 address is a multicast address
|
|
474
472
|
*/
|
|
475
473
|
isMulticastAddress() {
|
|
476
|
-
return (
|
|
474
|
+
return (this.#hextets[0] & 0xff00) === 0xff00;
|
|
477
475
|
}
|
|
478
476
|
/**
|
|
479
477
|
* Checks if the IPv6 address is an IPv4-mapped IPv6 address (::ffff:0:0/96)
|
|
@@ -491,12 +489,12 @@ class Ipv6Address {
|
|
|
491
489
|
*/
|
|
492
490
|
isIPv4MappedAddress() {
|
|
493
491
|
// First 80 bits (5 hextets) must be 0, 6th hextet must be 0xffff
|
|
494
|
-
return (
|
|
495
|
-
&&
|
|
496
|
-
&&
|
|
497
|
-
&&
|
|
498
|
-
&&
|
|
499
|
-
&&
|
|
492
|
+
return (this.#hextets[0] === 0
|
|
493
|
+
&& this.#hextets[1] === 0
|
|
494
|
+
&& this.#hextets[2] === 0
|
|
495
|
+
&& this.#hextets[3] === 0
|
|
496
|
+
&& this.#hextets[4] === 0
|
|
497
|
+
&& this.#hextets[5] === 0xffff);
|
|
500
498
|
}
|
|
501
499
|
/**
|
|
502
500
|
* Checks if the IPv6 address is a documentation address (2001:db8::/32)
|
|
@@ -513,10 +511,9 @@ class Ipv6Address {
|
|
|
513
511
|
* @returns true if the IPv6 address is a documentation address
|
|
514
512
|
*/
|
|
515
513
|
isDocumentationAddress() {
|
|
516
|
-
return
|
|
514
|
+
return this.#hextets[0] === 0x2001 && this.#hextets[1] === 0x0db8;
|
|
517
515
|
}
|
|
518
516
|
}
|
|
519
|
-
_Ipv6Address_hextets = new WeakMap();
|
|
520
517
|
|
|
521
518
|
exports.Ipv6Address = Ipv6Address;
|
|
522
519
|
//# sourceMappingURL=ipv6-address.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ipv6-address.cjs","sources":["../../../src/ipv6-address.ts"],"sourcesContent":[null],"names":["ipv6","InvalidIpv6AddressError"
|
|
1
|
+
{"version":3,"file":"ipv6-address.cjs","sources":["../../../src/ipv6-address.ts"],"sourcesContent":[null],"names":["ipv6","InvalidIpv6AddressError"],"mappings":"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"}
|