{"version":3,"sources":["../src/constants.ts","../src/index.ts"],"names":[],"mappings":"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","file":"index.cjs","sourcesContent":["export const DECIMAL_UNITS = [\n  'B',\n  'KB',\n  'MB',\n  'GB',\n  'TB',\n  'PB',\n  'EB',\n  'ZB',\n  'YB',\n] as const;\nexport const BINARY_UNITS = [\n  'B',\n  'KiB',\n  'MiB',\n  'GiB',\n  'TiB',\n  'PiB',\n  'EiB',\n  'ZiB',\n  'YiB',\n] as const;\n\nexport const DECIMAL_BASE = 1000;\nexport const BINARY_BASE = 1024;\n\nexport const UNIT_MAP: Record<string, number> = {\n  // Decimal units (base 1000)\n  b: 1,\n  byte: 1,\n  bytes: 1,\n  kb: 1000,\n  mb: 1000 ** 2,\n  gb: 1000 ** 3,\n  tb: 1000 ** 4,\n  pb: 1000 ** 5,\n  eb: 1000 ** 6,\n  zb: 1000 ** 7,\n  yb: 1000 ** 8,\n  // Binary units (base 1024)\n  kib: 1024,\n  mib: 1024 ** 2,\n  gib: 1024 ** 3,\n  tib: 1024 ** 4,\n  pib: 1024 ** 5,\n  eib: 1024 ** 6,\n  zib: 1024 ** 7,\n  yib: 1024 ** 8,\n};\n","import type { FormatBytesOptions } from './types';\nimport {\n  DECIMAL_UNITS,\n  BINARY_UNITS,\n  DECIMAL_BASE,\n  BINARY_BASE,\n  UNIT_MAP,\n} from './constants';\n\nexport type { FormatBytesOptions };\n\n/**\n * Formats a number of bytes into a human-readable string.\n * @param bytes The number of bytes to format.\n * @param options Optional formatting configuration.\n * @returns A human-readable string representation of the byte size.\n * @throws {TypeError} If input `bytes` is not a number.\n */\nexport function formatBytes(\n  bytes: number,\n  options?: FormatBytesOptions\n): string {\n  if (typeof bytes !== 'number') {\n    throw new TypeError('Input bytes must be a number');\n  }\n\n  const {\n    decimalPlaces = 2,\n    useBinary = false,\n    fixedDecimals = false,\n    includeUnitSpace = true,\n  } = options || {};\n\n  const units = useBinary ? BINARY_UNITS : DECIMAL_UNITS;\n  const base = useBinary ? BINARY_BASE : DECIMAL_BASE;\n  const space = includeUnitSpace ? ' ' : '';\n\n  if (bytes === 0) {\n    return `0${space}Bytes`;\n  }\n\n  const isNegative = bytes < 0;\n  const absoluteBytes = Math.abs(bytes);\n\n  const unitIndex =\n    absoluteBytes < 1\n      ? 0\n      : Math.min(\n          Math.floor(Math.log(absoluteBytes) / Math.log(base)),\n          units.length - 1\n        );\n\n  const value = absoluteBytes / Math.pow(base, unitIndex);\n  const formattedValue = fixedDecimals\n    ? value.toFixed(decimalPlaces)\n    : parseFloat(value.toFixed(decimalPlaces)).toString();\n\n  const sign = isNegative ? '-' : '';\n  const unit = units[unitIndex];\n\n  return `${sign}${formattedValue}${space}${unit}`;\n}\n\n/**\n * Parses a human-readable byte string (e.g., \"512KB\", \"1.5 GiB\") into a number of bytes.\n * Supports both decimal (KB, MB) and binary (KiB, MiB) units case-insensitively.\n * @param sizeString The human-readable byte string to parse.\n * @returns The number of bytes, or null if the string is unparseable.\n * @throws {TypeError} If input `sizeString` is not a string.\n */\nexport function parseBytes(sizeString: string): number | null {\n  if (typeof sizeString !== 'string') {\n    throw new TypeError('Input sizeString must be a string');\n  }\n\n  const trimmed = sizeString.trim();\n  if (!trimmed) {\n    return null;\n  }\n\n  // Regex to match number (with optional decimal) followed by optional space and unit\n  const match = trimmed.match(/^(-?\\d+(?:\\.\\d+)?)\\s*([a-z]+)?$/i);\n  if (!match) {\n    return null;\n  }\n\n  const [, valueStr, unit] = match;\n  const value = parseFloat(valueStr!);\n\n  if (isNaN(value)) {\n    return null;\n  }\n\n  // If no unit provided, assume bytes\n  if (!unit) {\n    return value;\n  }\n\n  // Look up the unit in our map (case-insensitive)\n  const unitLower = unit.toLowerCase();\n  const multiplier = UNIT_MAP[unitLower];\n\n  if (multiplier === undefined) {\n    return null;\n  }\n\n  return value * multiplier;\n}\n"]}