From 0f9f2f3bf3262d1c8c97aef53b184b87ee2620cd Mon Sep 17 00:00:00 2001 From: Brett Gilio Date: Sat, 24 Dec 2022 22:25:10 +0000 Subject: [PATCH] Add edge case checks and rework logic --- client/js/helpers/friendlysize.ts | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/client/js/helpers/friendlysize.ts b/client/js/helpers/friendlysize.ts index d29ba73f..80f88a7e 100644 --- a/client/js/helpers/friendlysize.ts +++ b/client/js/helpers/friendlysize.ts @@ -1,8 +1,15 @@ const sizes = ["Bytes", "KiB", "MiB", "GiB", "TiB", "PiB"]; -export default (size: number) => { - // Loosely inspired from https://stackoverflow.com/a/18650828/1935861 - const i = size > 0 ? Math.floor(Math.log(size) / Math.log(1024)) : 0; - const fixedSize = parseFloat((size / Math.pow(1024, i)).toFixed(1)); - return `${fixedSize} ${sizes[i]}`; -}; +export default function formatSize(size: number): string { + if (size <= 0) { + throw new Error("Size must be a positive number"); + } + + const i = Math.floor(Math.log(size) / Math.log(1024)); + + if (i >= sizes.length) { + throw new Error("Size is out of range"); + } + + return `${(size / Math.pow(1024, i)).toFixed(1)} ${sizes[i]}`; +}