54 lines
1.2 KiB
JavaScript
Executable File
54 lines
1.2 KiB
JavaScript
Executable File
#!/usr/bin/env node
|
|
const filename = process.argv[2]
|
|
const fs = require('fs')
|
|
const unpack = require('browser-unpack')
|
|
const path = require('path')
|
|
|
|
const file = fs.readFileSync(filename, 'utf8')
|
|
const result = unpack(file)
|
|
|
|
const sizes = result.map(item => {
|
|
const size = new Buffer(item.source).byteLength
|
|
const sizeKb = (size / 1024).toFixed(3) + ' kb'
|
|
return {
|
|
id: path.relative(process.cwd(), item.id),
|
|
size,
|
|
sizeKb,
|
|
}
|
|
})
|
|
.sort((a, b) => a.size - b.size)
|
|
|
|
const maxNameLength = sizes
|
|
.reduce((m, i) => m < i.id.length ? i.id.length : m, 0)
|
|
const maxSizeLength = sizes
|
|
.reduce((m, i) => m < i.sizeKb.length ? i.sizeKb.length : m, 0)
|
|
|
|
const totalSize = sizes.reduce((s, i) => i.size + s, 0)
|
|
|
|
function padRight(text, size) {
|
|
while (text.length < size) {
|
|
text += ' '
|
|
}
|
|
return text
|
|
}
|
|
|
|
function padLeft(text, size) {
|
|
while (text.length < size) {
|
|
text = ' ' + text
|
|
}
|
|
return text
|
|
}
|
|
|
|
sizes
|
|
.forEach(item => {
|
|
console.log(
|
|
padRight(item.id, maxNameLength),
|
|
padLeft(item.sizeKb, maxSizeLength),
|
|
)
|
|
})
|
|
console.log()
|
|
console.log(
|
|
padRight('Total size:', maxNameLength),
|
|
padLeft((totalSize / 1024).toFixed(3) + ' kb', maxSizeLength),
|
|
)
|