diff options
Diffstat (limited to 'client/src/root-helpers/bytes.ts')
-rw-r--r-- | client/src/root-helpers/bytes.ts | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/client/src/root-helpers/bytes.ts b/client/src/root-helpers/bytes.ts new file mode 100644 index 000000000..ec8b55faa --- /dev/null +++ b/client/src/root-helpers/bytes.ts | |||
@@ -0,0 +1,31 @@ | |||
1 | const dictionary: Array<{ max: number; type: string }> = [ | ||
2 | { max: 1024, type: 'B' }, | ||
3 | { max: 1048576, type: 'KB' }, | ||
4 | { max: 1073741824, type: 'MB' }, | ||
5 | { max: 1.0995116e12, type: 'GB' } | ||
6 | ] | ||
7 | |||
8 | function getBytes (value: number, precision?: number | undefined): string | number { | ||
9 | const format = dictionary.find(d => value < d.max) || dictionary[dictionary.length - 1] | ||
10 | const calc = value / (format.max / 1024) | ||
11 | |||
12 | const num = precision === undefined | ||
13 | ? calc | ||
14 | : applyPrecision(calc, precision) | ||
15 | |||
16 | return `${num} ${format.type}` | ||
17 | } | ||
18 | |||
19 | function applyPrecision (num: number, precision: number) { | ||
20 | if (precision <= 0) { | ||
21 | return Math.round(num) | ||
22 | } | ||
23 | |||
24 | const tho = 10 ** precision | ||
25 | |||
26 | return Math.round(num * tho) / tho | ||
27 | } | ||
28 | |||
29 | export { | ||
30 | getBytes | ||
31 | } | ||