bytes
Advanced tools
Comparing version 2.0.2 to 2.1.0
@@ -0,1 +1,7 @@ | ||
2.1.0 / 2015-05-21 | ||
================== | ||
* add `.format` export | ||
* add `.parse` export | ||
2.0.2 / 2015-05-20 | ||
@@ -2,0 +8,0 @@ ================== |
101
index.js
@@ -0,1 +1,8 @@ | ||
/*! | ||
* bytes | ||
* Copyright(c) 2012-2014 TJ Holowaychuk | ||
* Copyright(c) 2015 Jed Watson | ||
* MIT Licensed | ||
*/ | ||
'use strict'; | ||
@@ -9,10 +16,17 @@ | ||
module.exports = bytes; | ||
module.exports.format = format; | ||
module.exports.parse = parse; | ||
/** | ||
* Module dependencies. | ||
* Module variables. | ||
* @private | ||
*/ | ||
var convert = require('./lib/byte-convert'); | ||
var parse = require('./lib/byte-parse'); | ||
var map = { | ||
b: 1, | ||
kb: 1 << 10, | ||
mb: 1 << 20, | ||
gb: 1 << 30, | ||
tb: ((1 << 30) * 1024) | ||
}; | ||
@@ -37,3 +51,3 @@ /** | ||
if (typeof value === 'number') { | ||
return convert(value, options); | ||
return format(value, options); | ||
} | ||
@@ -43,1 +57,80 @@ | ||
} | ||
/** | ||
* Format the given value in bytes into a string. | ||
* | ||
* If the value is negative, it is kept as such. If it is a float, | ||
* it is rounded. | ||
* | ||
* @param {number} value | ||
* @param {object} [options] | ||
* @param {string} [options.thousandsSeparator=] | ||
* @public | ||
*/ | ||
function format(val, options) { | ||
if (typeof val !== 'number') { | ||
return null; | ||
} | ||
var mag = Math.abs(val); | ||
var thousandsSeparator = (options && options.thousandsSeparator) || ''; | ||
var unit = 'B'; | ||
var value = val; | ||
if (mag >= map.tb) { | ||
value = Math.round(value / map.tb * 100) / 100; | ||
unit = 'TB'; | ||
} else if (mag >= map.gb) { | ||
value = Math.round(value / map.gb * 100) / 100; | ||
unit = 'GB'; | ||
} else if (mag >= map.mb) { | ||
value = Math.round(value / map.mb * 100) / 100; | ||
unit = 'MB'; | ||
} else if (mag >= map.kb) { | ||
value = Math.round(value / map.kb * 100) / 100; | ||
unit = 'kB'; | ||
} | ||
if (thousandsSeparator) { | ||
value = value.toString().replace(/\B(?=(\d{3})+(?!\d))/g, thousandsSeparator); | ||
} | ||
return value + unit; | ||
} | ||
/** | ||
* Parse the string value into an integer in bytes. | ||
* | ||
* If no unit is given, it is assumed the value is in bytes. | ||
* | ||
* @param {number|string} val | ||
* @public | ||
*/ | ||
function parse(val) { | ||
if (typeof val === 'number' && !isNaN(val)) { | ||
return val; | ||
} | ||
if (typeof val !== 'string') { | ||
return null; | ||
} | ||
// Test if the string passed is valid | ||
var results = val.match(/^((-|\+)?(\d+(?:\.\d+)?)) *(kb|mb|gb|tb)$/i); | ||
var floatValue; | ||
var unit = 'b'; | ||
if (!results) { | ||
// Nothing could be extracted from the given string | ||
floatValue = parseInt(val); | ||
unit = 'b' | ||
} else { | ||
// Retrieve the value and the unit | ||
floatValue = parseFloat(results[1]); | ||
unit = results[4].toLowerCase(); | ||
} | ||
return map[unit] * floatValue; | ||
} |
{ | ||
"name": "bytes", | ||
"description": "Utility to parse a string bytes to bytes and vice-versa", | ||
"version": "2.0.2", | ||
"version": "2.1.0", | ||
"author": "TJ Holowaychuk <tj@vision-media.ca> (http://tjholowaychuk.com)", | ||
@@ -29,3 +29,2 @@ "contributors": [ | ||
"files": [ | ||
"lib/", | ||
"History.md", | ||
@@ -32,0 +31,0 @@ "LICENSE", |
@@ -7,3 +7,2 @@ # Bytes utility | ||
```js | ||
@@ -13,5 +12,5 @@ var bytes = require('bytes'); | ||
#### bytes(number value, [options]): string|null | ||
#### bytes.format(number value, [options]): string|null | ||
Convert the given value in bytes into a string. If the value is negative, it is kept as such. If it is a float, it is | ||
Format the given value in bytes into a string. If the value is negative, it is kept as such. If it is a float, it is | ||
rounded. | ||
@@ -51,3 +50,3 @@ | ||
#### Bytes(string value): number|null | ||
#### bytes.parse(string value): number|null | ||
@@ -54,0 +53,0 @@ Parse the string value into an integer in bytes. If no unit is given, it is assumed the value is in bytes. |
6312
4
112
84