| Leo Repp | 58b9f11 | 2021-11-22 11:57:47 +0100 | [diff] [blame^] | 1 | |
| 2 | /** |
| 3 | * Parse byte `size` string. |
| 4 | * |
| 5 | * @param {String} size |
| 6 | * @return {Number} |
| 7 | * @api public |
| 8 | */ |
| 9 | |
| 10 | module.exports = function(size) { |
| 11 | if ('number' == typeof size) return convert(size); |
| 12 | var parts = size.match(/^(\d+(?:\.\d+)?) *(kb|mb|gb|tb)$/) |
| 13 | , n = parseFloat(parts[1]) |
| 14 | , type = parts[2]; |
| 15 | |
| 16 | var map = { |
| 17 | kb: 1 << 10 |
| 18 | , mb: 1 << 20 |
| 19 | , gb: 1 << 30 |
| 20 | , tb: ((1 << 30) * 1024) |
| 21 | }; |
| 22 | |
| 23 | return map[type] * n; |
| 24 | }; |
| 25 | |
| 26 | /** |
| 27 | * convert bytes into string. |
| 28 | * |
| 29 | * @param {Number} b - bytes to convert |
| 30 | * @return {String} |
| 31 | * @api public |
| 32 | */ |
| 33 | |
| 34 | function convert (b) { |
| 35 | var tb = ((1 << 30) * 1024), gb = 1 << 30, mb = 1 << 20, kb = 1 << 10, abs = Math.abs(b); |
| 36 | if (abs >= tb) return (Math.round(b / tb * 100) / 100) + 'tb'; |
| 37 | if (abs >= gb) return (Math.round(b / gb * 100) / 100) + 'gb'; |
| 38 | if (abs >= mb) return (Math.round(b / mb * 100) / 100) + 'mb'; |
| 39 | if (abs >= kb) return (Math.round(b / kb * 100) / 100) + 'kb'; |
| 40 | return b + 'b'; |
| 41 | } |