import { Pipe, PipeTransform } from "@angular/core"; // Transforms a filesize in bytes to a human readable decimal filesize using SI prefixes @Pipe({ name: "filesize", standalone: false, }) export class FilesizePipe implements PipeTransform { transform(size: number): string { if (typeof size !== "number") { return "0"; } const symbols = ["B", "KB", "MB", "GB", "TB"]; const sizes = [1, 2 ** 10, 2 ** 20, 2 ** 30, 2 ** 40, 2 ** 50]; let symbol = symbols[0]; let base = sizes[0]; if (size < sizes[1]) { return "<1 KB"; } else if (size < sizes[2]) { symbol = symbols[1]; base = sizes[1]; } else if (size < sizes[3]) { symbol = symbols[2]; base = sizes[2]; } else if (size < sizes[4]) { symbol = symbols[3]; base = sizes[3]; } else if (size < sizes[5]) { symbol = symbols[4]; base = sizes[4]; } else { console.warn("file size symbol not supported"); } const rounded = Math.round(size / base); return `${rounded} ${symbol}`; } }