node-pkware
Version:
node.js implementation of StormLib's pkware compressor/de-compressor
58 lines • 2.08 kB
JavaScript
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