bytez
Version:
Convert bytes to human readable string.
62 lines (61 loc) • 2.39 kB
JavaScript
;
var __assign = (this && this.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
// appendations
var appendationFactor = ["", "K", "M", "G", "T", "P", "E", "Z", "Y"];
var bitsOrKibibits = ["", "i"];
var bytesOrBits = ["B", "bit"];
var defaultOptions = {
bits: false,
base2: false,
precision: 1,
roundOffInt: true,
};
/**
* Takes a number argument representing bytes and returns a formated, condesnsed string.
* @param {number|string} bytes
* @param {Object} optionsObject
* @returns {string}
*
* @example
* console.log(bytez(124000))
*/
function bytez(bytes, optionsObject) {
// set base options
var options = __assign(__assign({}, defaultOptions), optionsObject);
// set number and check type
var number = bytes;
if (typeof number == "string") {
// @ts-ignore
number.length > 0 ? (number = parseFloat(bytes)) : (number = 0);
}
else if (!Number.isFinite(number))
throw new TypeError("Number must be of type Number or String, received " + typeof number);
var negative = number >= 0 ? false : true;
number = !options.bits ? Math.abs(number) : Math.abs(number) * 8;
var factor = number ? (!options.base2 ? Math.floor(Math.log10(number) / 3) : Math.floor(Math.log(number) / Math.log(1024))) : 0;
var divisor = options.base2 ? Math.pow(2, 10 * factor) : Math.pow(10, factor * 3);
number = (number / divisor).toFixed(options.precision);
// determine if should leave digit on
if (options.roundOffInt && Number.isInteger(parseFloat(number)))
number = number.split(".")[0];
// return final product
return "" + (negative ? "-" : "") + number + returnAppendation(factor, options.bits, options.base2);
function returnAppendation(factor, bits, kibi) {
if (bits === void 0) { bits = false; }
if (kibi === void 0) { kibi = false; }
return (appendationFactor[factor] +
bitsOrKibibits[kibi ? 1 : 0] +
bytesOrBits[bits ? 1 : 0]);
}
}
module.exports = bytez;