Files
mtdb_movie/common/resources/client/uploads/utils/pretty-bytes.ts
maher 703f50a09d
Some checks failed
Build / run (push) Has been cancelled
first commit
2025-10-29 11:42:25 +01:00

31 lines
991 B
TypeScript
Executable File

// Adapted from https://github.com/Flet/prettier-bytes/
// Changing 1000 bytes to 1024, so we can keep uppercase KB vs kB
// ISC License (c) Dan Flettre https://github.com/Flet/prettier-bytes/blob/master/LICENSE
export function prettyBytes(num?: number, fractionDigits = 1): string {
if (num == null || Number.isNaN(num)) return '';
const neg = num < 0;
const units = ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];
if (neg) {
num = -num;
}
if (num < 1) {
return `${(neg ? '-' : '') + num} B`;
}
const exponent = Math.min(
Math.floor(Math.log(num) / Math.log(1024)),
units.length - 1
);
num = Number(num / Math.pow(1024, exponent));
const unit = units[exponent];
if (num >= 10 || num % 1 === 0) {
// Do not show decimals when the number is two-digit, or if the number has no
// decimal component.
return `${(neg ? '-' : '') + num.toFixed(0)} ${unit}`;
}
return `${(neg ? '-' : '') + num.toFixed(fractionDigits)} ${unit}`;
}