cdn-cache-check
Version:
Makes HTTP requests to URLs and parses response headers to determine caching behaviour
178 lines (145 loc) • 5.68 kB
JavaScript
const debug = require('debug')('cdn-cache-check-utils');
debug('Entry: [%s]', __filename);
function formatBytes(bytes, decimals = 2) {
try {
if (bytes === 0) {
return ('0 Bytes');
} else {
const k = 1024;
const dm = decimals < 0 ? 0 : decimals;
const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];
const i = Math.floor(Math.log(bytes) / Math.log(k));
return `${parseFloat((bytes / Math.pow(k, i)).toFixed(dm))} ${sizes[i]}`;
}
} catch (error) {
debug('formatBytes() caught an exception: %O', error);
return (`${bytes} Bytes`);
}
}
function secondsToHms(seconds) {
if (seconds) {
try {
seconds = Number(seconds);
let h = Math.floor(seconds / 3600);
let m = Math.floor(seconds % 3600 / 60);
let s = Math.floor(seconds % 3600 % 60);
return `${(`0${h}`).slice(-2)} hours, ${(`0${m}`).slice(-2)} minutes, ${(`0${s}`).slice(-2)} seconds`;
} catch (error) {
debug('secondsToHms() caught an exception: %O', error);
// an unexpected error occurred; return the original value
return (`${seconds} seconds`);
}
} else {
return ('<invalid>');
}
}
function millisecondsToHms(milliseconds) {
if (milliseconds) {
try {
let seconds = Number(milliseconds / 1000);
let h = Math.floor(seconds / 3600);
let m = Math.floor(seconds % 3600 / 60);
let s = Math.floor(seconds % 3600 % 60);
let returnString = '';
if (h > 0) {
returnString = `${(`0${h}`).slice(-2)} hours, `;
}
if (m > 0) {
returnString = `${returnString}${(`0${m}`).slice(-2)} minutes, `;
}
if (s > 0) {
if (s === 1) {
returnString = `${returnString}${(`0${s}`).slice(-2)} second`;
} else {
returnString = `${returnString}${(`0${s}`).slice(-2)} seconds`;
}
}
return returnString;
} catch (error) {
debug('millisecondsToHms() caught an exception: %O', error);
// an unexpected error occurred; return the original value
return (`${milliseconds} milliseconds`);
}
} else {
return ('<invalid>');
}
}
function getColourLevelDesc() {
const colourLevel = ['Colours Disabled', '16 Colours (Basic)', '256 Colours', '16 Million Colours (True Colour)'];
// Use chalk to detect colour level support
const chalk = require('chalk');
let level = chalk.supportsColor.level;
if (level === null) {
level = 0;
}
return (colourLevel[level]);
}
function getHeadersCollections(settings) {
debug('getHeadersCollections()');
try {
let collections = [];
for (let i = 0; i < settings.headersCollections.length; i++) {
collections.push(Object.keys(settings.headersCollections[i]).toString());
}
return collections;
} catch (error) {
debug('Error caught in getHeadersCollections(): %O', error);
return [];
}
}
function IsTLD(testString) {
debug('IsTLD(%s)', testString);
try {
// Load array of valid top-level-domains
let tlds = require('tlds');
// Query array for supplied string
if (tlds.indexOf(testString) > -1) {
// `testString` exists
return (true);
} else {
// `testString` does not exist
return (false);
}
} catch (error) {
debug('IsTLD() caught an error: %O', error);
return (false);
}
}
function generateUniqueFilename(extension) {
debug('generateUniqueFilename(%s)', extension);
const defaultExtension = '.csv';
const os = require('os');
const path = require('path');
let prefix = 'ccc-';
try {
const uniqueFilename = require('unique-filename');
const today = new Date();
// Check if a file extension was provided
if (extension) {
// Prepend a dot '.' if there isn't one
if ((extension.charAt(0) === '.') === false) {
extension = `.${extension}`
}
} else {
extension = defaultExtension;
}
// Incorporate today's date into the prefix
prefix = prefix + (today.getFullYear()).toString() + (today.getMonth() + 1).toString() + (today.getDay() + 1).toString();
// Generate full filename with path
let filename = uniqueFilename(os.tmpdir(), prefix) + extension;
debug('Generated the unique filename: %s', filename);
// return the resulting filename
return (filename);
} catch (error) {
debug('generateUniqueFilename() caught an error: %O', error);
// We need to return something, so generate a random 8 char string and apply prefix and extension
let filename = os.tmpdir() + path.sep + prefix + Math.random().toString().substring(2, 10) + defaultExtension;
return (filename);
}
}
function getAppPath() {
let path = require('path');
let AppPath = path.resolve(__dirname);
return (AppPath);
}
module.exports = { getAppPath, generateUniqueFilename, IsTLD, getHeadersCollections, getColourLevelDesc, millisecondsToHms, secondsToHms, formatBytes };