1import * as _ from 'lodash-es' 4export const mb = kb * 1024 5export const gb = mb * 1024 6export const tb = gb * 1024 8export const mbit = 1_000_000 9export const gbit = mbit * 1000 11const bytesUnits: Record<string, number> = { 17 pb: tb * 1024 // one size larger than largest needed for logic below 20export const humanBytes = (bytes: number | string | null | undefined): string | number | null | undefined => { 21 if (!bytes) return bytes 23 const isEq = _.toInteger(bytes).toString() == bytes.toString() 25 bytes = _.toInteger(bytes) 28 if (!_.isInteger(bytes)) return bytes 30 return _.compact(_.map(_.keys(bytesUnits), (unit, i) => { 31 const unitInBytes = bytesUnits[unit] 32 if ((bytes as number) < unitInBytes) { 33 const prevUnit = _.keys(bytesUnits)[i - 1] 34 const prevUnitInBytes = bytesUnits[prevUnit] 36 return `${_.round((bytes as number) / prevUnitInBytes, 2)}${prevUnit}`