{"version":3,"file":"bundle.cjs","sources":["../esm/address.js","../esm/subnet.js","../esm/ip-range-list.js"],"sourcesContent":["const IPV4_MAPPED_PREFIX = 0xffff00000000n;\nconst invalidAddress = (value) => new TypeError(`Invalid IP address: ${String(value)}`);\nexport const isIPv4Mapped = (value) => (value >> 32n) === 0xffffn;\nfunction parseIPv4(address) {\n    const parts = address.split('.');\n    if (parts.length !== 4) {\n        return null;\n    }\n    let value = 0n;\n    for (const part of parts) {\n        if (!/^(?:0|[1-9]\\d{0,2})$/.test(part)) {\n            return null;\n        }\n        const octet = Number(part);\n        if (octet > 255) {\n            return null;\n        }\n        value = (value << 8n) + BigInt(octet);\n    }\n    return value;\n}\nfunction parseIPv6(address) {\n    if (!address.includes(':') || address.includes('%')) {\n        return null;\n    }\n    const hadIPv4Tail = address.includes('.');\n    if (hadIPv4Tail) {\n        const separator = address.lastIndexOf(':');\n        const ipv4 = separator === -1 ? null : parseIPv4(address.slice(separator + 1));\n        if (ipv4 === null) {\n            return null;\n        }\n        const high = (ipv4 >> 16n).toString(16);\n        const low = (ipv4 & 0xffffn).toString(16);\n        address = `${address.slice(0, separator)}:${high}:${low}`;\n    }\n    let groups;\n    const compression = address.indexOf('::');\n    if (compression !== -1) {\n        if (address.includes('::', compression + 2)) {\n            return null;\n        }\n        const left = address.slice(0, compression);\n        const right = address.slice(compression + 2);\n        const leftGroups = left === '' ? [] : left.split(':');\n        const rightGroups = right === '' ? [] : right.split(':');\n        if ([...leftGroups, ...rightGroups].some(group => group === '')) {\n            return null;\n        }\n        const omitted = 8 - leftGroups.length - rightGroups.length;\n        if (omitted < 1) {\n            return null;\n        }\n        groups = [...leftGroups, ...Array(omitted).fill('0'), ...rightGroups];\n    }\n    else {\n        groups = address.split(':');\n    }\n    if (groups.length !== 8 || groups.some(group => !/^[\\da-f]{1,4}$/i.test(group))) {\n        return null;\n    }\n    return groups.reduce((result, group) => (result << 16n) + BigInt(`0x${group}`), 0n);\n}\nexport function parseAddress(value) {\n    if (typeof value !== 'string') {\n        throw invalidAddress(value);\n    }\n    const isIPv6 = value.includes(':');\n    const parsed = isIPv6 ? parseIPv6(value) : parseIPv4(value);\n    if (parsed === null) {\n        throw invalidAddress(value);\n    }\n    const normalized = isIPv6 ? parsed : IPV4_MAPPED_PREFIX + parsed;\n    return {\n        value: normalized,\n        family: isIPv4Mapped(normalized) ? 'ipv4' : 'ipv6',\n    };\n}\nexport function formatAddress(value) {\n    // format IPv4-mapped IPv6\n    if (isIPv4Mapped(value)) {\n        const ipv4 = value & 0xffffffffn;\n        return `::ffff:${Number((ipv4 >> 24n) & 0xffn)}.${Number((ipv4 >> 16n) & 0xffn)}.${Number((ipv4 >> 8n) & 0xffn)}.${Number(ipv4 & 0xffn)}`;\n    }\n    // format IPv6\n    // first extract 16-bit IPv6 groups\n    const groups = Array.from({ length: 8 }, (_, index) => Number((value >> BigInt((7 - index) * 16)) & 0xffffn).toString(16));\n    // track the longest run of zeroes\n    let bestStart = -1;\n    let bestLength = 0;\n    for (let index = 0; index < groups.length;) {\n        if (groups[index] !== '0') {\n            index++;\n            continue;\n        }\n        let end = index;\n        while (end < groups.length && groups[end] === '0') {\n            end++;\n        }\n        if (end - index > bestLength) {\n            bestStart = index;\n            bestLength = end - index;\n        }\n        index = end;\n    }\n    // join the groups\n    if (bestLength < 2) {\n        return groups.join(':');\n    }\n    const left = groups.slice(0, bestStart).join(':');\n    const right = groups.slice(bestStart + bestLength).join(':');\n    if (left === '' && right === '') {\n        return '::';\n    }\n    if (left === '') {\n        return `::${right}`;\n    }\n    return right === '' ? `${left}::` : `${left}::${right}`;\n}\n//# sourceMappingURL=address.js.map","import { parseAddress } from './address.js';\nexport function parseSubnet(value) {\n    if (typeof value !== 'string') {\n        throw new TypeError(`Invalid subnet: ${String(value)}`);\n    }\n    const separator = value.indexOf('/');\n    if (separator === -1 || value.includes('/', separator + 1)) {\n        throw new TypeError(`Invalid subnet: ${value}`);\n    }\n    const address = value.slice(0, separator);\n    const prefixText = value.slice(separator + 1);\n    const rawBits = address.includes(':') ? 128 : 32;\n    if (!/^\\d+$/.test(prefixText)) {\n        throw new TypeError(`Invalid subnet prefix: ${prefixText}`);\n    }\n    const prefix = Number(prefixText);\n    if (prefix > rawBits) {\n        throw new RangeError(`Subnet prefix must be between 0 and ${rawBits}`);\n    }\n    const target = parseAddress(address);\n    const bits = target.family === 'ipv4' ? 32 : rawBits;\n    if (prefix > bits) {\n        throw new RangeError(`Subnet prefix must be between 0 and ${bits}`);\n    }\n    const size = 1n << BigInt(bits - prefix);\n    const start = (target.value / size) * size;\n    return [start, start + size - 1n];\n}\n//# sourceMappingURL=subnet.js.map","import { formatAddress, parseAddress } from './address.js';\nimport { parseSubnet } from './subnet.js';\n/**\n * A mutable IP allowlist/blocklist for IPv4 and IPv6 addresses, ranges, and subnets.\n *\n * IPv4-mapped IPv6 addresses such as `::ffff:192.0.2.1` are treated as\n * equivalent to plain IPv4 addresses such as `192.0.2.1`.\n */\nexport class IPRangeList {\n    intervals = [];\n    /**\n     * Returns a snapshot of the currently stored canonical merged ranges.\n     */\n    get ranges() {\n        return this.intervals.map(([start, end]) => ({\n            start: formatAddress(start),\n            end: formatAddress(end),\n        }));\n    }\n    /**\n     * Adds one IPv4 or IPv6 address and returns the same list.\n     */\n    addAddress(address) {\n        const parsed = parseAddress(address);\n        return this.addInterval(parsed.value, parsed.value);\n    }\n    /**\n     * Adds a CIDR subnet and returns the same list.\n     *\n     * Host bits are normalized to the subnet boundary.\n     */\n    addSubnet(subnet) {\n        const [start, end] = parseSubnet(subnet);\n        return this.addInterval(start, end);\n    }\n    /**\n     * Adds the inclusive range between two addresses and returns the same list.\n     */\n    addRange(start, end) {\n        const parsedStart = parseAddress(start);\n        const parsedEnd = parseAddress(end);\n        if (parsedStart.family !== parsedEnd.family) {\n            throw new RangeError('Range start and end must be from the same IP family');\n        }\n        if (parsedStart.value > parsedEnd.value) {\n            throw new RangeError('Range start must not be greater than range end');\n        }\n        return this.addInterval(parsedStart.value, parsedEnd.value);\n    }\n    /**\n     * Returns whether an address belongs to a stored range.\n     *\n     * Invalid candidates return false.\n     */\n    contains(address) {\n        let candidate;\n        try {\n            candidate = parseAddress(address).value;\n        }\n        catch {\n            return false;\n        }\n        let low = 0;\n        let high = this.intervals.length - 1;\n        while (low <= high) {\n            const middle = Math.floor((low + high) / 2);\n            const [start, end] = this.intervals[middle];\n            if (candidate < start) {\n                high = middle - 1;\n            }\n            else if (candidate > end) {\n                low = middle + 1;\n            }\n            else {\n                return true;\n            }\n        }\n        return false;\n    }\n    /**\n     * Alias for {@link contains}, matching Node.js `net.BlockList` terminology.\n     */\n    check(address) {\n        return this.contains(address);\n    }\n    addInterval(start, end) {\n        let low = 0;\n        let high = this.intervals.length;\n        while (low < high) {\n            const middle = Math.floor((low + high) / 2);\n            const interval = this.intervals[middle];\n            if (interval[0] < start) {\n                low = middle + 1;\n            }\n            else {\n                high = middle;\n            }\n        }\n        let index = low;\n        const previous = index > 0 ? this.intervals[index - 1] : undefined;\n        if (previous !== undefined && previous[1] + 1n >= start) {\n            index--;\n            start = previous[0];\n            end = end > previous[1] ? end : previous[1];\n        }\n        let stop = index;\n        while (stop < this.intervals.length) {\n            const interval = this.intervals[stop];\n            if (interval[0] > end + 1n) {\n                break;\n            }\n            end = end > interval[1] ? end : interval[1];\n            stop++;\n        }\n        this.intervals.splice(index, stop - index, [start, end]);\n        return this;\n    }\n}\n//# sourceMappingURL=ip-range-list.js.map"],"names":[],"mappings":"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"}