node-hue-api
Version:
Philips Hue API Library for Node.js
45 lines (44 loc) • 1.47 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.cleanHostname = exports.isIpv6Host = exports.getHttpUrl = exports.getHttpsUrl = void 0;
const ipv6Regex = /^(\[)?(((?:[0-9a-f]{1,4}))((?::[0-9a-f]{1,4}))*)?::((?:[0-9a-f]{1,4}))((?::[0-9a-f]{1,4}))*|((?:[0-9a-f]{1,4}))((?::[0-9a-f]{1,4})){7}(])?$/;
const bracketsRegex = /^\[.*]$/;
function getHttpsUrl(hostname, port) {
return generateUrl('https', hostname, port);
}
exports.getHttpsUrl = getHttpsUrl;
function getHttpUrl(hostname, port) {
return generateUrl('http', hostname, port);
}
exports.getHttpUrl = getHttpUrl;
function isIpv6Host(value) {
if (value) {
const trimmedValue = value.toLowerCase().trim();
if (ipv6Regex.test(trimmedValue)) {
return true;
}
}
return false;
}
exports.isIpv6Host = isIpv6Host;
function cleanHostname(hostname) {
if (bracketsRegex.test(hostname)) {
return hostname.substring(1, hostname.length - 1);
}
return hostname;
}
exports.cleanHostname = cleanHostname;
function escapeIPv6Address(address) {
let result = address.trim();
if (!bracketsRegex.test(result)) {
result = `[${address}]`;
}
return result;
}
function generateUrl(scheme, hostname, port) {
let escapedHostName = hostname;
if (isIpv6Host(hostname)) {
escapedHostName = escapeIPv6Address(hostname);
}
return new URL(`${scheme}://${escapedHostName}:${port}`);
}