Nuxt/test/utils/resource-size.js

36 lines
1.1 KiB
JavaScript

import { resolve } from 'path'
import zlib from 'zlib'
import fs from 'fs-extra'
import pify from 'pify'
const gzipCompressor = pify(zlib.gzip)
const brotliCompressor = pify(zlib.brotliCompress)
const compressSize = (input, compressor) => compressor(input).then(data => data.length)
export const getResourcesSize = async (distDir, mode, { filter, gzip, brotli } = {}) => {
if (!filter) {
filter = filename => filename.endsWith('.js')
}
const { all } = await import(resolve(distDir, 'server', `${mode}.manifest.json`))
const resources = all.filter(filter)
const sizes = { uncompressed: 0, gzip: 0, brotli: 0 }
for (const resource of resources) {
const file = resolve(distDir, 'client', resource)
const stat = await fs.stat(file)
sizes.uncompressed += stat.size / 1024
if (gzip || brotli) {
const fileContent = await fs.readFile(file)
if (gzip) {
sizes.gzip += await compressSize(fileContent, gzipCompressor) / 1024
}
if (brotli) {
sizes.brotli += await compressSize(fileContent, brotliCompressor) / 1024
}
}
}
return sizes
}