UNPKG

coach-core

Version:
126 lines (116 loc) 3.17 kB
'use strict'; const urlParser = require('url'); module.exports = { isHTTP2(page) { return page.httpType === 'h2' || page.httpType === 'spdy'; }, isHTTP3(page) { return page.httpType.startsWith('h3'); }, /** * Get the hostname from a URL string. * @param {string} url The URL like https://www.example.com/hepp * @returns {string} the hostname */ getHostname(url) { if (!url) { return ''; } return urlParser.parse(url).hostname || ''; }, /** * Convert bytes to human readable. * @param {Number} bytes * @returns {String} human readable file size */ formatBytes(bytes) { var sizes = ['B', 'kB', 'MB', 'GB', 'TB']; if (bytes === 0) { return '0 B'; } var i = parseInt(Math.floor(Math.log(bytes) / Math.log(1000)), 10); return Math.round((bytes / Math.pow(1000, i)) * 10) / 10 + ' ' + sizes[i]; }, /** * Print seconds as the largest available time. * @param {int} seconds A number in seconds * @return {String} The time in nearest largest definition. */ prettyPrintSeconds: function (seconds) { if (typeof seconds === 'undefined') { return ''; } var secondsPerYear = 365 * 24 * 60 * 60, secondsPerWeek = 60 * 60 * 24 * 7, secondsPerDay = 60 * 60 * 24, secondsPerHour = 60 * 60, secondsPerMinute = 60, sign = seconds < 0 ? '-' : ''; if (seconds < 0) { seconds = Math.abs(seconds); } if (seconds / secondsPerYear >= 1) { return ( sign + Math.round(seconds / secondsPerYear) + ' year' + (Math.round(seconds / secondsPerYear) > 1 ? 's' : '') ); } else if (seconds / secondsPerWeek >= 1) { return ( sign + Math.round(seconds / secondsPerWeek) + ' week' + (Math.round(seconds / secondsPerWeek) > 1 ? 's' : '') ); } else if (seconds / secondsPerDay >= 1) { return ( sign + Math.round(seconds / secondsPerDay) + ' day' + (Math.round(seconds / secondsPerDay) > 1 ? 's' : '') ); } else if (seconds / secondsPerHour >= 1) { return ( sign + Math.round(seconds / secondsPerHour) + ' hour' + (Math.round(seconds / secondsPerHour) > 1 ? 's' : '') ); } else if (seconds / secondsPerMinute >= 1) { return ( sign + Math.round(seconds / secondsPerMinute) + ' minute' + (Math.round(seconds / secondsPerMinute) > 1 ? 's' : '') ); } else { return ( sign + seconds + ' second' + (seconds > 1 || seconds === 0 ? 's' : '') ); } }, human(node, pretty) { if (!node) { return undefined; } let clean = {}; Object.keys(node).forEach(function (key) { clean[key] = pretty(node[key]); }); return clean; }, shortURL(url) { if (url.length > 40) { let shortUrl = url.replace(/\?.*/, ''); url = shortUrl.substr(0, 20) + '...' + shortUrl.substr(-17); } return url; }, plural: function (number, text) { if (number > 1) { text += 's'; } return `${number} ${text}`; } };