{"version":3,"file":"utils.cjs","names":["crypto","path"],"sources":["../src/utils.ts"],"sourcesContent":["import path from 'node:path';\nimport crypto from 'node:crypto';\nimport type { ChunkStats } from 'rollup-plugin-stats/extract';\n\nconst HASH_LENGTH = 7;\n\n/**\n * Get content byte size\n */\nexport function getByteSize(\n  content?: string | Uint8Array<ArrayBufferLike>\n): number {\n  if (!content) {\n    return 0;\n  }\n\n  if (typeof content === 'string') {\n    return Buffer.byteLength(content);\n  }\n\n  return content?.length || 0;\n}\n\n/**\n * Generate a 7 chars hash from a filepath\n */\nexport function getHash(filepath: string): string {\n  const digest = crypto.createHash('sha256');\n  return digest.update(filepath).digest('hex').substr(0, HASH_LENGTH);\n}\n\nexport function getChunkId(chunk: ChunkStats): string {\n  let value = chunk.name;\n\n  // Use entry module relative path\n  if (chunk.moduleIds?.length > 0) {\n    const absoluteModulePath = chunk.moduleIds[chunk.moduleIds.length - 1];\n    value = path.relative(process.cwd(), absoluteModulePath);\n  }\n\n  return getHash([chunk, value].join('-'));\n}\n\ntype ExcludeFilepathParam = string | RegExp | ((filepath: string) => boolean);\n\nexport type ExcludeFilepathOption =\n  | ExcludeFilepathParam\n  | Array<ExcludeFilepathParam>;\n\nexport function round(value: number, precision = 2) {\n  const multiplier = 10 ^ precision;\n  return Math.round(value * multiplier) / multiplier;\n}\n\nconst FILE_SIZE = {\n  BYTE: {\n    symbol: 'B',\n    multiplier: 1,\n  },\n  KILO: {\n    symbol: 'KiB',\n    multiplier: 1024,\n  },\n  MEGA: {\n    symbol: 'MiB',\n    multiplier: 1024 * 1024,\n  },\n};\n\nexport function formatFileSize(value?: number | null): string {\n  let unit = FILE_SIZE.BYTE;\n\n  if (typeof value !== 'number') {\n    return `0${unit.symbol}`;\n  }\n\n  if (value < FILE_SIZE.KILO.multiplier) {\n    unit = FILE_SIZE.BYTE;\n  } else if (value < FILE_SIZE.MEGA.multiplier) {\n    unit = FILE_SIZE.KILO;\n  } else {\n    unit = FILE_SIZE.MEGA;\n  }\n\n  return `${round(value / unit.multiplier, 2)}${unit.symbol}`;\n}\n\nconst DEFAULT_FILE_NAME = 'webpack-stats.json';\n\nexport function resolveFilepath(\n  fileName = DEFAULT_FILE_NAME,\n  outputDir?: string\n): string {\n  // Check if the fileName is an absolute path\n  if (path.isAbsolute(fileName)) {\n    return fileName;\n  }\n\n  // If the fileName is not an absolute path, join it with the output directory or the current working directory\n  return path.join(outputDir || process.cwd(), fileName);\n}\n"],"mappings":";;;;;;;AAIA,MAAM,cAAc;;;;AAKpB,SAAgB,YACd,SACQ;CACR,IAAI,CAAC,SACH,OAAO;CAGT,IAAI,OAAO,YAAY,UACrB,OAAO,OAAO,WAAW,OAAO;CAGlC,OAAO,SAAS,UAAU;AAC5B;;;;AAKA,SAAgB,QAAQ,UAA0B;CAEhD,OADeA,oBAAO,WAAW,QACrB,EAAE,OAAO,QAAQ,EAAE,OAAO,KAAK,EAAE,OAAO,GAAG,WAAW;AACpE;AAEA,SAAgB,WAAW,OAA2B;CACpD,IAAI,QAAQ,MAAM;CAGlB,IAAI,MAAM,WAAW,SAAS,GAAG;EAC/B,MAAM,qBAAqB,MAAM,UAAU,MAAM,UAAU,SAAS;EACpE,QAAQC,kBAAK,SAAS,QAAQ,IAAI,GAAG,kBAAkB;CACzD;CAEA,OAAO,QAAQ,CAAC,OAAO,KAAK,EAAE,KAAK,GAAG,CAAC;AACzC;AAQA,SAAgB,MAAM,OAAe,YAAY,GAAG;CAClD,MAAM,aAAa,KAAK;CACxB,OAAO,KAAK,MAAM,QAAQ,UAAU,IAAI;AAC1C;AAEA,MAAM,YAAY;CAChB,MAAM;EACJ,QAAQ;EACR,YAAY;CACd;CACA,MAAM;EACJ,QAAQ;EACR,YAAY;CACd;CACA,MAAM;EACJ,QAAQ;EACR,YAAY,OAAO;CACrB;AACF;AAEA,SAAgB,eAAe,OAA+B;CAC5D,IAAI,OAAO,UAAU;CAErB,IAAI,OAAO,UAAU,UACnB,OAAO,IAAI,KAAK;CAGlB,IAAI,QAAQ,UAAU,KAAK,YACzB,OAAO,UAAU;MACZ,IAAI,QAAQ,UAAU,KAAK,YAChC,OAAO,UAAU;MAEjB,OAAO,UAAU;CAGnB,OAAO,GAAG,MAAM,QAAQ,KAAK,YAAY,CAAC,IAAI,KAAK;AACrD;AAEA,MAAM,oBAAoB;AAE1B,SAAgB,gBACd,WAAW,mBACX,WACQ;CAER,IAAIA,kBAAK,WAAW,QAAQ,GAC1B,OAAO;CAIT,OAAOA,kBAAK,KAAK,aAAa,QAAQ,IAAI,GAAG,QAAQ;AACvD"}