"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.long2ip = exports.ip2long = exports.Netmask = void 0; const netmask4_1 = require("./netmask4"); Object.defineProperty(exports, "ip2long", { enumerable: true, get: function () { return netmask4_1.ip2long; } }); Object.defineProperty(exports, "long2ip", { enumerable: true, get: function () { return netmask4_1.long2ip; } }); const netmask6_1 = require("./netmask6"); class Netmask { constructor(net, mask) { if (typeof net !== 'string') { throw new Error("Missing `net' parameter"); } // Detect IPv6: check the address part (before any /) for ':' const addrPart = net.indexOf('/') !== -1 ? net.substring(0, net.indexOf('/')) : net; if (addrPart.indexOf(':') !== -1) { this._impl = new netmask6_1.Netmask6Impl(net, mask); } else { this._impl = new netmask4_1.Netmask4Impl(net, mask); } this.base = this._impl.base; this.mask = this._impl.mask; this.hostmask = this._impl.hostmask; this.bitmask = this._impl.bitmask; this.size = this._impl.size; this.first = this._impl.first; this.last = this._impl.last; this.broadcast = this._impl.broadcast; if (this._impl instanceof netmask4_1.Netmask4Impl) { this.maskLong = this._impl.maskLong; this.netLong = this._impl.netLong; } else { this.maskLong = 0; this.netLong = 0; } } contains(ip) { if (typeof ip === 'string') { // If it has a '/', it's a CIDR block — wrap it if (ip.indexOf('/') > 0) { ip = new Netmask(ip); } // IPv4 shorthand (fewer than 4 octets, no colons) — wrap it else if (ip.indexOf(':') === -1 && ip.split('.').length !== 4) { ip = new Netmask(ip); } } if (ip instanceof Netmask) { return this.contains(ip.base) && this.contains(ip.broadcast || ip.last); } // Plain IP string — delegate to impl return this._impl.contains(ip); } next(count = 1) { const nextImpl = this._impl.next(count); const result = new Netmask(nextImpl.base, nextImpl.bitmask); return result; } /** @deprecated */ forEach(fn) { this._impl.forEach(fn); } toString() { return this._impl.toString(); } } exports.Netmask = Netmask;