function cidrOverlaps
cidrOverlaps<T extends Cidr>(
a: T,
b: T extends Cidrv4 ? Cidrv4 : Cidrv6
): boolean

Checks if two CIDR blocks overlap (share at least one address).

Dispatches to cidrv4Overlaps or cidrv6Overlaps based on the address type. Throws TypeError when mixing IPv4 and IPv6 CIDRs.

Examples

IPv4 overlap

import { assert, assertEquals } from "@std/assert";
import { cidrOverlaps, parseCidr } from "@hertzg/ip/cidr";

assert(cidrOverlaps(parseCidr("10.0.0.0/8"), parseCidr("10.1.0.0/16")));
assertEquals(cidrOverlaps(parseCidr("10.0.0.0/8"), parseCidr("172.16.0.0/12")), false);

IPv6 overlap

import { assert, assertEquals } from "@std/assert";
import { cidrOverlaps, parseCidr } from "@hertzg/ip/cidr";

assert(cidrOverlaps(parseCidr("2001:db8::/32"), parseCidr("2001:db8:1::/48")));
assertEquals(cidrOverlaps(parseCidr("2001:db8::/32"), parseCidr("2001:db9::/32")), false);

Mixed versions throw TypeError

import { assertThrows } from "@std/assert";
import { cidrOverlaps, parseCidr } from "@hertzg/ip/cidr";

assertThrows(
  () => cidrOverlaps(parseCidr("10.0.0.0/8"), parseCidr("2001:db8::/32")),
  TypeError,
);
assertThrows(
  () => cidrOverlaps(parseCidr("::/0"), parseCidr("0.0.0.0/0")),
  TypeError,
);

Type Parameters

T extends Cidr

Parameters

a: T

The first CIDR block

b: T extends Cidrv4 ? Cidrv4 : Cidrv6

The second CIDR block

Return Type

boolean

true if the two CIDR blocks share at least one address, false otherwise

Throws

TypeError

If the two CIDRs are different IP versions