123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141 |
- 'use strict';
- module.exports = bytes;
- module.exports.format = format;
- module.exports.parse = parse;
- var map = {
- b: 1,
- kb: 1 << 10,
- mb: 1 << 20,
- gb: 1 << 30,
- tb: ((1 << 30) * 1024)
- };
- function bytes(value, options) {
- if (typeof value === 'string') {
- return parse(value);
- }
- if (typeof value === 'number') {
- return format(value, options);
- }
- return null;
- }
- function format(value, options) {
- if (typeof value !== 'number') {
- return null;
- }
- var mag = Math.abs(value);
- var thousandsSeparator = (options && options.thousandsSeparator) || '';
- var decimalPlaces = (options && options.decimalPlaces !== undefined) ? options.decimalPlaces : 2;
- var fixedDecimals = Boolean(options && options.fixedDecimals);
- var unit = 'B';
- if (mag >= map.tb) {
- unit = 'TB';
- } else if (mag >= map.gb) {
- unit = 'GB';
- } else if (mag >= map.mb) {
- unit = 'MB';
- } else if (mag >= map.kb) {
- unit = 'kB';
- }
- var val = value / map[unit.toLowerCase()];
- var str = val.toFixed(decimalPlaces);
- if (!fixedDecimals) {
- str = str.replace(/(?:\.0*|(\.[^0]+)0+)$/, '$1');
- }
- if (thousandsSeparator) {
- str = str.replace(/\B(?=(\d{3})+(?!\d))/g, thousandsSeparator);
- }
- return str + unit;
- }
- function parse(val) {
- if (typeof val === 'number' && !isNaN(val)) {
- return val;
- }
- if (typeof val !== 'string') {
- return null;
- }
-
- var results = val.match(/^((-|\+)?(\d+(?:\.\d+)?)) *(kb|mb|gb|tb)$/i);
- var floatValue;
- var unit = 'b';
- if (!results) {
-
- floatValue = parseInt(val);
- unit = 'b'
- } else {
-
- floatValue = parseFloat(results[1]);
- unit = results[4].toLowerCase();
- }
- return map[unit] * floatValue;
- }
|