You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
44 lines
867 B
JavaScript
44 lines
867 B
JavaScript
6 years ago
|
"use strict";
|
||
|
|
||
|
const {B, KiB, MiB, GiB, TiB, PiB, EiB} = require("../../units/bytes/iec");
|
||
|
|
||
|
let unitMap = {
|
||
|
b: B,
|
||
|
k: KiB,
|
||
|
m: MiB,
|
||
|
g: GiB,
|
||
|
t: TiB,
|
||
|
p: PiB,
|
||
|
e: EiB
|
||
|
};
|
||
|
|
||
|
function mapUnit(unitString) {
|
||
|
if (unitString == null) {
|
||
|
return B;
|
||
|
} else {
|
||
|
let normalizedUnitString = unitString.toLowerCase();
|
||
|
|
||
|
if (unitMap[normalizedUnitString] != null) {
|
||
|
return unitMap[normalizedUnitString];
|
||
|
} else {
|
||
|
throw new Error(`Unknown unit: ${unit}`);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
module.exports = function parseIECBytes(sizeString) {
|
||
|
if (sizeString == null) {
|
||
|
return sizeString;
|
||
|
} else {
|
||
|
let match = /^([0-9]+(?:\.[0-9]+)?)([bkmgtpe])?$/i.exec(sizeString.trim());
|
||
|
|
||
|
if (match == null) {
|
||
|
throw new Error(`Could not parse size string: ${sizeString}`);
|
||
|
}
|
||
|
|
||
|
let [_, number, unit] = match;
|
||
|
let unitCreator = mapUnit(unit);
|
||
|
|
||
|
return unitCreator(parseFloat(number));
|
||
|
}
|
||
|
};
|