What is gunzip-maybe?
The 'gunzip-maybe' npm package is a utility for conditionally decompressing gzip files. It is particularly useful in streams where you may not know if the input is gzipped or not. The package will automatically detect and decompress gzipped input, passing through non-gzipped input unchanged.
What are gunzip-maybe's main functionalities?
Conditional Decompression
This feature allows you to conditionally decompress a file if it is gzipped. The code sample reads a potentially gzipped file ('file.txt.gz') and writes the decompressed content to 'file.txt'. If the input file is not gzipped, it simply passes the content through unchanged.
const fs = require('fs');
const gunzipMaybe = require('gunzip-maybe');
fs.createReadStream('file.txt.gz')
.pipe(gunzipMaybe())
.pipe(fs.createWriteStream('file.txt'));
Stream Processing
This feature demonstrates how 'gunzip-maybe' can be used in a stream processing pipeline. The code sets up a PassThrough stream, pipes it through 'gunzip-maybe', and then pipes the result to another PassThrough stream. This allows for flexible stream processing where the input may or may not be gzipped.
const { PassThrough } = require('stream');
const gunzipMaybe = require('gunzip-maybe');
const input = new PassThrough();
const output = new PassThrough();
input.pipe(gunzipMaybe()).pipe(output);
input.write('some data');
input.end();
output.on('data', (data) => {
console.log(data.toString());
});
Other packages similar to gunzip-maybe
zlib
The 'zlib' package is a core Node.js module that provides compression and decompression functionalities, including gzip. Unlike 'gunzip-maybe', 'zlib' does not automatically detect if the input is gzipped, so you need to handle that logic yourself.
decompress
The 'decompress' package is a comprehensive decompression library that supports multiple formats including gzip, tar, and zip. It is more versatile than 'gunzip-maybe' but also more complex to use if you only need conditional gzip decompression.
node-unzipper
The 'node-unzipper' package is focused on unzipping files, including gzip. It provides more control over the decompression process compared to 'gunzip-maybe', but requires more setup and configuration.
gunzip-maybe
Transform stream that gunzips its input if it is gzipped and just echoes it if not.
npm install gunzip-maybe
Usage
Simply pipe a gzipped (or not gzipped) stream to gunzip([maxRecursion = 3])
and read the unzipped content.
maxRecursion
protects the unzip mechanism from an infinite recursion in case of a malicious archive.
gzippedStream.pipe(gunzip()).pipe(process.stdout);
plainTextStream.pipe(gunzip()).pipe(process.stdout);
CLI usage
npm install -g gunzip-maybe
gunzip-maybe --help # will print out usage
License
MIT