mirror of
https://github.com/ditatompel/xmr-remote-nodes.git
synced 2025-04-09 21:16:28 +07:00
Wraps IPv6 host in square brackets, returns as-is for domain names or IPv4 addresses.
76 lines
2.5 KiB
JavaScript
76 lines
2.5 KiB
JavaScript
/**
|
|
* Modifies the input string based on whether it is an IPv6 address.
|
|
* If the input is an IPv6 address, it wraps it in square brackets `[ ]`.
|
|
* Otherwise, it returns the input string as-is (for domain names or
|
|
* IPv4 addresses). AND I'M SORRY USING REGEX FOR THIS!
|
|
*
|
|
* @param {string} hostname
|
|
* @returns {string} - The modified string, IPv6 addresses wrapped in `[ ]`.
|
|
*/
|
|
export const formatHostname = (hostname) => {
|
|
// const ipv6Pattern = /^(?:[a-fA-F0-9]{1,4}:){7}[a-fA-F0-9]{1,4}$/; // full
|
|
// pattern for both full and compressed IPv6 addresses.
|
|
// source: https://regex101.com/library/cP9mH9?filterFlavors=dotnet&filterFlavors=javascript&orderBy=RELEVANCE&search=ip
|
|
// This may be incorrect, but let's assume it's correct. xD
|
|
const ipv6Pattern =
|
|
/^(([0-9A-Fa-f]{1,4}:){7})([0-9A-Fa-f]{1,4})$|(([0-9A-Fa-f]{1,4}:){1,6}:)(([0-9A-Fa-f]{1,4}:){0,4})([0-9A-Fa-f]{1,4})$/;
|
|
if (ipv6Pattern.test(hostname)) {
|
|
return `[${hostname}]`;
|
|
}
|
|
|
|
return hostname;
|
|
};
|
|
|
|
/**
|
|
* @param {number} bytes
|
|
* @param {number} decimals
|
|
* @returns {string}
|
|
*/
|
|
export const formatBytes = (bytes, decimals = 2) => {
|
|
if (!+bytes) return '0 Bytes';
|
|
|
|
const k = 1024;
|
|
const dm = decimals < 0 ? 0 : decimals;
|
|
const sizes = ['Bytes', 'KiB', 'MiB', 'GiB', 'TiB', 'PiB', 'EiB', 'ZiB', 'YiB'];
|
|
|
|
const i = Math.floor(Math.log(bytes) / Math.log(k));
|
|
|
|
return `${parseFloat((bytes / Math.pow(k, i)).toFixed(dm))} ${sizes[i]}`;
|
|
};
|
|
|
|
/**
|
|
* Returns a number with a maximum precision.
|
|
*
|
|
* This function was copied from jtgrassie/monero-pool project.
|
|
* Source: https://github.com/jtgrassie/monero-pool/blob/master/src/webui-embed.html
|
|
*
|
|
* Copyright (c) 2018, The Monero Project
|
|
*
|
|
* @param {number} n
|
|
* @param {number} p
|
|
*/
|
|
const maxPrecision = (n, p) => {
|
|
return parseFloat(n.toFixed(p));
|
|
};
|
|
|
|
/**
|
|
* Formats a hash value (h) into human readable format.
|
|
*
|
|
* This function was copied from jtgrassie/monero-pool project.
|
|
* Source: https://github.com/jtgrassie/monero-pool/blob/master/src/webui-embed.html
|
|
*
|
|
* Copyright (c) 2018, The Monero Project
|
|
*
|
|
* @param {number} h
|
|
*/
|
|
export const formatHashes = (h) => {
|
|
if (h < 1e-12) return '0 H';
|
|
else if (h < 1e-9) return maxPrecision(h * 1e12, 0) + ' pH';
|
|
else if (h < 1e-6) return maxPrecision(h * 1e9, 0) + ' nH';
|
|
else if (h < 1e-3) return maxPrecision(h * 1e6, 0) + ' μH';
|
|
else if (h < 1) return maxPrecision(h * 1e3, 0) + ' mH';
|
|
else if (h < 1e3) return h + ' H';
|
|
else if (h < 1e6) return maxPrecision(h * 1e-3, 2) + ' KH';
|
|
else if (h < 1e9) return maxPrecision(h * 1e-6, 2) + ' MH';
|
|
else return maxPrecision(h * 1e-9, 2) + ' GH';
|
|
};
|