UNPKG

rollup-plugin-stats

Version:
83 lines (76 loc) 2.5 kB
'use strict'; var path = require('node:path'); var process = require('node:process'); var extract = require('./extract.cjs'); var fs = require('node:fs/promises'); async function rollupStatsWrite(filepath, stats) { const content = JSON.stringify(stats, null, 2); // Create base directory if it does not exist await fs.mkdir(path.dirname(filepath), { recursive: true }); await fs.writeFile(filepath, content); return { filepath, content, }; } function round(value, precision = 2) { const multiplier = 10 ^ precision; return Math.round(value * multiplier) / multiplier; } const FILE_SIZE = { BYTE: { symbol: 'B', multiplier: 1, }, KILO: { symbol: 'KiB', multiplier: 1024, }, MEGA: { symbol: 'MiB', multiplier: 1024 * 1024, }, }; function formatFileSize(value) { let unit = FILE_SIZE.BYTE; if (typeof value !== 'number') { return `0${unit.symbol}`; } if (value < FILE_SIZE.KILO.multiplier) { unit = FILE_SIZE.BYTE; } else if (value < FILE_SIZE.MEGA.multiplier) { unit = FILE_SIZE.KILO; } else { unit = FILE_SIZE.MEGA; } return `${round(value / unit.multiplier, 2)}${unit.symbol}`; } const PLUGIN_NAME = 'rollupStats'; const DEFAULT_FILE_NAME = 'stats.json'; function rollupStats(options = {}) { return { name: PLUGIN_NAME, async generateBundle(context, bundle) { const resolvedOptions = typeof options === 'function' ? options(context) : options; const { fileName, stats: statsOptions, write = rollupStatsWrite } = resolvedOptions || {}; const resolvedFileName = fileName || DEFAULT_FILE_NAME; const filepath = path.isAbsolute(resolvedFileName) ? resolvedFileName : path.join(context.dir || process.cwd(), resolvedFileName); const stats = extract(bundle, statsOptions); try { const res = await write(filepath, stats); const outputSize = Buffer.byteLength(res.content, 'utf-8'); this.info(`Stats saved to ${res.filepath} (${formatFileSize(outputSize)})`); } catch (error) { // eslint-disable-line // Log error, but do not throw to allow the compilation to continue this.warn(error); } }, }; } module.exports = rollupStats; //# sourceMappingURL=index.cjs.map