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

"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));
}
};