-
-
Notifications
You must be signed in to change notification settings - Fork 10
/
Copy pathcli.js
executable file
·72 lines (62 loc) · 1.43 KB
/
cli.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
#!/usr/bin/env node
import process from 'node:process';
import fs from 'node:fs';
import meow from 'meow';
import prettyBytes from 'pretty-bytes';
import {gzipSizeSync} from 'gzip-size';
import chalk from 'chalk';
import getStdin from 'get-stdin';
const cli = meow(`
Usage
$ gzip-size <file>
$ cat <file> | gzip-size
Options
--level Compression level [0-9] (Default: 9)
--raw Display value in bytes
--include-original Include original size
Examples
$ gzip-size unicorn.png
192 kB
$ gzip-size unicorn.png --raw
192256
$ gzip-size unicorn.png --include-original
392 kB → 192 kB
`, {
importMeta: import.meta,
flags: {
level: {
type: 'number',
},
raw: {
type: 'boolean',
},
includeOriginal: {
type: 'boolean',
},
},
});
const [input] = cli.input;
if (!input && process.stdin.isTTY) {
console.error('Specify a file path');
process.exit(1);
}
const options = {};
if (cli.flags.level) {
options.level = cli.flags.level;
}
function output(data) {
const originalSize = data.length;
const gzippedSize = gzipSizeSync(data);
let output = cli.flags.raw ? gzippedSize : prettyBytes(gzippedSize);
if (cli.flags.includeOriginal) {
output = (cli.flags.raw ? originalSize : prettyBytes(originalSize)) + chalk.dim(' → ') + output;
}
console.log(output);
}
(async () => {
if (input) {
output(fs.readFileSync(input));
} else {
output(await getStdin.buffer());
}
})();