rollup-plugin-webpack-stats
Version:
Rollup/Vite/Rolldown plugin to generate a stats JSON file with a bundle-stats webpack-compatible structure
1 lines • 3.67 kB
Source Map (JSON)
{"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"}