'use strict'; // Load modules const RFC3986 = require('./rfc3986'); // Declare internals const internals = { Ip: { cidrs: { ipv4: { required: '\\/(?:' + RFC3986.ipv4Cidr + ')', optional: '(?:\\/(?:' + RFC3986.ipv4Cidr + '))?', forbidden: '' }, ipv6: { required: '\\/' + RFC3986.ipv6Cidr, optional: '(?:\\/' + RFC3986.ipv6Cidr + ')?', forbidden: '' }, ipvfuture: { required: '\\/' + RFC3986.ipv6Cidr, optional: '(?:\\/' + RFC3986.ipv6Cidr + ')?', forbidden: '' } }, versions: { ipv4: RFC3986.IPv4address, ipv6: RFC3986.IPv6address, ipvfuture: RFC3986.IPvFuture } } }; internals.Ip.createIpRegex = function (versions, cidr) { let regex; for (let i = 0; i < versions.length; ++i) { const version = versions[i]; if (!regex) { regex = '^(?:' + internals.Ip.versions[version] + internals.Ip.cidrs[version][cidr]; } else { regex += '|' + internals.Ip.versions[version] + internals.Ip.cidrs[version][cidr]; } } return new RegExp(regex + ')$'); }; module.exports = internals.Ip;