diff --git a/src/lib/dataSize.ts b/src/lib/dataSize.ts index 5ac4e4ae..67439d31 100644 --- a/src/lib/dataSize.ts +++ b/src/lib/dataSize.ts @@ -1,11 +1,21 @@ export function parseDataSize(sizeStr: string): number { - if (!sizeStr) return 0; - const match = sizeStr.trim().toUpperCase().match(/^([\d.]+)\s*([KMGT]?B)$/); + if (typeof sizeStr !== 'string') return 0; + + const match = /^\s*([\d.]+)\s*([KMGT]?B)\s*$/i.exec(sizeStr); if (!match) return 0; - const [, numStr, unit] = match; - const num = parseFloat(numStr) || 0; - const multipliers: Record = { - B: 1, KB: 1024, MB: 1024**2, GB: 1024**3, TB: 1024**4, - }; - return num * (multipliers[unit] || 1); + + const [ , numStr, unitRaw ] = match; + const num = parseFloat(numStr); + if (isNaN(num)) return 0; + + const unit = unitRaw.toUpperCase(); + const multipliers = { + B: 1, + KB: 1024, + MB: 1024 ** 2, + GB: 1024 ** 3, + TB: 1024 ** 4, + } as const; + + return num * (multipliers[unit as keyof typeof multipliers] ?? 1); } \ No newline at end of file