UNPKG

node-pkware

Version:

node.js implementation of StormLib's pkware compressor/de-compressor

58 lines 2.08 kB
#!/usr/bin/env -S node --enable-source-maps import * as process from 'node:process'; import minimist from 'minimist-lite'; import { getPackageVersion, parseNumberString, getInputStream, getOutputStream } from './helpers.js'; import { transformEmpty, transformIdentity, transformSplitBy, splitAt, through, } from '../stream/stream.js'; import { explode } from '../stream/index.js'; const args = minimist(process.argv.slice(2), { string: ['output', 'offset'], boolean: ['version', 'drop-before-offset', 'verbose'], alias: { v: 'version', }, }); // eslint-disable-next-line max-params -- can't really compress the params further without ruining readability async function decompress(input, output, offset, keepHeader, config) { let leftHandler; if (keepHeader) { leftHandler = transformIdentity(); } else { leftHandler = transformEmpty(); } const rightHandler = explode(config); const handler = transformSplitBy(splitAt(offset), leftHandler, rightHandler); // eslint-disable-next-line @typescript-eslint/return-await -- I'm not gonna rewrite this classic promise nonsense to async/await as I don't know where are the return points exactly return new Promise((resolve, reject) => { input.pipe(through(handler).on('error', reject)).pipe(output).on('finish', resolve).on('error', reject); }); } if (args.version) { const version = await getPackageVersion(); console.log(`node-pkware - version ${version}`); process.exit(0); } let input; let output; try { input = await getInputStream(args._[0]); output = await getOutputStream(args.output); } catch (error) { console.error('error:', error.message); process.exit(1); } const offset = parseNumberString(args.offset, 0); const keepHeader = !args['drop-before-offset']; const config = { verbose: args.verbose, }; try { await decompress(input, output, offset, keepHeader, config); process.exit(0); } catch (error) { console.error('error:', error.message); process.exit(1); } //# sourceMappingURL=explode.js.map