import { minify } from '@swc/core'
import replace from '@rollup/plugin-replace'
import { brotliCompressSync, gzipSync } from 'node:zlib'
+import { parseArgs } from 'node:util'
+import pico from 'picocolors'
+import prettyBytes from 'pretty-bytes'
+
+const {
+ values: { write },
+} = parseArgs({
+ options: {
+ write: {
+ type: 'boolean',
+ default: false,
+ },
+ },
+})
const sizeDir = path.resolve('temp/size')
const entry = path.resolve('./packages/vue/dist/vue.runtime.esm-bundler.js')
main()
async function main() {
+ console.log()
const tasks: ReturnType<typeof generateBundle>[] = []
for (const preset of presets) {
tasks.push(generateBundle(preset))
await mkdir(sizeDir, { recursive: true })
await writeFile(
path.resolve(sizeDir, '_usages.json'),
- JSON.stringify(results),
+ JSON.stringify(results, null, 2),
'utf-8',
)
}
const gzip = gzipSync(minified).length
const brotli = brotliCompressSync(minified).length
+ if (write) {
+ await writeFile(path.resolve(sizeDir, preset.name + '.js'), bundled)
+ }
+
+ console.log(
+ `${pico.green(pico.bold(preset.name))} - min:${prettyBytes(
+ size,
+ )} / gzip:${prettyBytes(gzip)} / brotli:${prettyBytes(brotli)}`,
+ )
+
return {
name: preset.name,
size,