47 lines
1.4 KiB
TypeScript
47 lines
1.4 KiB
TypeScript
/**
|
|
* Shared formatting utilities for tsview web components
|
|
*/
|
|
|
|
/**
|
|
* Format a byte size into a human-readable string
|
|
* @param bytes - Size in bytes (can be undefined for S3 folders)
|
|
* @returns Formatted size string (e.g., "1.5 MB")
|
|
*/
|
|
export function formatSize(bytes?: number): string {
|
|
if (bytes === undefined || bytes === null) return '-';
|
|
if (bytes === 0) return '0 B';
|
|
|
|
const units = ['B', 'KB', 'MB', 'GB', 'TB'];
|
|
let size = bytes;
|
|
let unitIndex = 0;
|
|
|
|
while (size >= 1024 && unitIndex < units.length - 1) {
|
|
size /= 1024;
|
|
unitIndex++;
|
|
}
|
|
|
|
return `${size.toFixed(unitIndex > 0 ? 1 : 0)} ${units[unitIndex]}`;
|
|
}
|
|
|
|
/**
|
|
* Format a count into a compact human-readable string
|
|
* @param count - The count number (can be undefined)
|
|
* @returns Formatted count string (e.g., "1.5K", "2.3M")
|
|
*/
|
|
export function formatCount(count?: number): string {
|
|
if (count === undefined || count === null) return '';
|
|
if (count >= 1000000) return `${(count / 1000000).toFixed(1)}M`;
|
|
if (count >= 1000) return `${(count / 1000).toFixed(1)}K`;
|
|
return count.toString();
|
|
}
|
|
|
|
/**
|
|
* Extract the file name from a path
|
|
* @param path - Full file path (e.g., "folder/subfolder/file.txt")
|
|
* @returns File name (e.g., "file.txt")
|
|
*/
|
|
export function getFileName(path: string): string {
|
|
const parts = path.replace(/\/$/, '').split('/');
|
|
return parts[parts.length - 1] || path;
|
|
}
|