uploaded
This commit is contained in:
44
node_modules/@hapi/address/esm/ip.js
generated
vendored
Normal file
44
node_modules/@hapi/address/esm/ip.js
generated
vendored
Normal file
@@ -0,0 +1,44 @@
|
||||
import { assert } from '@hapi/hoek';
|
||||
import { ipVersions } from './uri';
|
||||
/**
|
||||
* Generates a regular expression used to validate IP addresses.
|
||||
*
|
||||
* @param options - optional settings.
|
||||
*
|
||||
* @returns an object with the regular expression and meta data.
|
||||
*/
|
||||
export function ipRegex(options = {}) {
|
||||
// CIDR
|
||||
const cidr = options.cidr || 'optional';
|
||||
assert(['required', 'optional', 'forbidden'].includes(cidr), 'options.cidr must be one of required, optional, forbidden');
|
||||
// Versions
|
||||
assert(options.version === undefined || typeof options.version === 'string' || Array.isArray(options.version), 'options.version must be a string or an array of string');
|
||||
let versions = options.version || ['ipv4', 'ipv6', 'ipvfuture'];
|
||||
if (!Array.isArray(versions)) {
|
||||
versions = [versions];
|
||||
}
|
||||
assert(versions.length >= 1, 'options.version must have at least 1 version specified');
|
||||
for (const version of versions) {
|
||||
assert(typeof version === 'string' && version === version.toLowerCase(), 'Invalid options.version value');
|
||||
assert(['ipv4', 'ipv6', 'ipvfuture'].includes(version), 'options.version contains unknown version ' + version + ' - must be one of ipv4, ipv6, ipvfuture');
|
||||
}
|
||||
versions = Array.from(new Set(versions));
|
||||
// Regex
|
||||
const parts = versions.map((version) => {
|
||||
// Forbidden
|
||||
if (cidr === 'forbidden') {
|
||||
return ipVersions[version];
|
||||
}
|
||||
// Required
|
||||
const cidrpart = `\\/${version === 'ipv4' ? ipVersions.v4Cidr : ipVersions.v6Cidr}`;
|
||||
if (cidr === 'required') {
|
||||
return `${ipVersions[version]}${cidrpart}`;
|
||||
}
|
||||
// Optional
|
||||
return `${ipVersions[version]}(?:${cidrpart})?`;
|
||||
});
|
||||
const raw = `(?:${parts.join('|')})`;
|
||||
const regex = new RegExp(`^${raw}$`);
|
||||
return { cidr, versions, regex, raw };
|
||||
}
|
||||
//# sourceMappingURL=ip.js.map
|
||||
Reference in New Issue
Block a user