Repository navigation
Expand file tree
/
Copy pathcli.js
More file actions
executable file
·82 lines (68 loc) · 1.66 KB
/
Copy pathcli.js
File metadata and controls
executable file
·82 lines (68 loc) · 1.66 KB
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
73
74
75
76
77
78
79
80
81
82
#!/usr/bin/env node
'use strict';
const arrify = require('arrify');
const decompress = require('decompress');
const getStdin = require('get-stdin');
const meow = require('meow');
const stripIndent = require('strip-indent');
const cli = meow(`
Usage
decompress <file> --out-dir=dist [--plugin=<name> ...]
cat <file> | decompress --out-dir=dist
Example
decompress --strip 1 --out-dir=dist file.zip
decompress --plugin=tarxz --out-dir=dist file.tar.xz
cat file.zip | decompress --out-dir=dist
Options
-o, --out-dir Output directory
-p, --plugin Override the default plugins
-s, --strip Remove leading directory components from extracted files
`, {
string: [
'out-dir',
'plugin',
'strip'
],
alias: {
o: 'out-dir',
p: 'plugin',
s: 'strip'
}
});
const requirePlugins = plugins => plugins.map(x => {
try {
return require(`decompress-${x}`)();
} catch (err) {
console.error(stripIndent(`
Unknown plugin: ${x}
Did you forgot to install the plugin?
You can install it with:
$ npm install -g decompress-${x}
`).trim());
process.exit(1);
}
});
const run = (input, opts) => {
opts = Object.assign({}, opts);
const dest = opts.outDir;
const plugins = arrify(opts.plugin);
if (plugins.length) {
opts.plugins = requirePlugins(plugins);
}
delete opts.outDir;
delete opts.plugin;
decompress(input, dest, opts);
};
if (!cli.input.length && process.stdin.isTTY) {
console.error('Specify a file');
process.exit(1);
}
if (!cli.flags.outDir) {
console.error('Specify a `--out-dir`');
process.exit(1);
}
if (cli.input.length) {
run(cli.input[0], cli.flags);
} else {
getStdin.buffer().then(buf => run(buf, cli.flags));
}