function cidrContainsCidr
cidrContainsCidr<T extends Cidr>(
outer: T,
inner: T extends Cidrv4 ? Cidrv4 : Cidrv6
): boolean

Checks if one CIDR block fully contains another.

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

Examples

IPv4 containment

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

assert(cidrContainsCidr(parseCidr("10.0.0.0/8"), parseCidr("10.1.0.0/16")));
assertEquals(cidrContainsCidr(parseCidr("10.1.0.0/16"), parseCidr("10.0.0.0/8")), false);

IPv6 containment

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

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

Mixed versions throw TypeError

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

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

Type Parameters

T extends Cidr

Parameters

outer: T

The CIDR block that may contain the other

inner: T extends Cidrv4 ? Cidrv4 : Cidrv6

The CIDR block that may be contained

Return Type

boolean

true if every address in inner is within outer, false otherwise

Throws

TypeError

If the two CIDRs are different IP versions