UNPKG

onezip

Version:

pack and extract .zip archives with emitter

117 lines (93 loc) 2.3 kB
#!/usr/bin/env node 'use strict'; const onezip = require('..'); const path = require('path'); const glob = require('glob'); const {argv} = process; const args = require('yargs-parser')(argv.slice(2), { string: [ 'pack', 'extract', ], alias: { v: 'version', h: 'help', p: 'pack', x: 'extract', }, }); validate(args); if (args.version) version(); else if (args.help) help(); else if (args.pack) getName(args.pack, (name) => { main('pack', name); }); else if (args.extract) getName(args.extract, (name) => { main('extract', name); }); else help(); function main(operation, file) { const cwd = process.cwd(); let to; let packer; switch(operation) { case 'pack': to = path.join(cwd, file + '.zip'); packer = onezip.pack(cwd, to, [ file, ]); break; case 'extract': to = cwd; packer = onezip.extract(file, to); break; } packer.on('error', (error) => { console.error(error.message); }); packer.on('progress', (percent) => { process.stdout.write('\r' + percent + '%'); }); packer.on('end', () => { process.stdout.write('\n'); }); } function getName(str, fn) { glob(str, (error, files) => { if (error) return console.error(error.message); if (!files.length) return console.error('file not found'); fn(files[0]); }); } function version() { console.log('v' + info().version); } function info() { return require('../package'); } function help() { const bin = require('../help'); const usage = `Usage: ${info().name} [path]`; console.log(usage); console.log('Options:'); for (const name of Object.keys(bin)) { console.log(` ${name} ${bin[name]}`); } } function validate(args) { const cmdReg = /^(_|v(ersion)?|h(elp)?|p(ack)?|x|extract)$/; for (const cmd of Object.keys(args)) { if (!cmdReg.test(cmd)) { const {name} = info(); console.error(`'${cmd}' is not a ${name} option. See '${name} --help'.`); process.exit(-1); } } }