Promise-based wrappers for Node.js core APIs that modernize callback-based methods to work with async/await patterns
—
Pending
Does it follow best practices?
Impact
Pending
No eval scenarios have been run
Pending
The risk profile of this skill
Compress and decompress data using various algorithms with promise support. Provides modern async/await compatibility for Node.js zlib operations.
Compress and decompress data using the gzip algorithm.
/**
* Compress data using gzip algorithm
* @param buffer - Data to compress (Buffer or string)
* @param options - Compression options
* @returns Promise resolving to compressed Buffer
*/
function gzip(buffer, options): Promise<Buffer>;
/**
* Decompress gzip-compressed data
* @param buffer - Compressed data Buffer
* @param options - Decompression options
* @returns Promise resolving to decompressed Buffer
*/
function gunzip(buffer, options): Promise<Buffer>;Compress and decompress data using the deflate algorithm.
/**
* Compress data using deflate algorithm
* @param buffer - Data to compress (Buffer or string)
* @param options - Compression options
* @returns Promise resolving to compressed Buffer
*/
function deflate(buffer, options): Promise<Buffer>;
/**
* Decompress deflate-compressed data
* @param buffer - Compressed data Buffer
* @param options - Decompression options
* @returns Promise resolving to decompressed Buffer
*/
function inflate(buffer, options): Promise<Buffer>;Compress and decompress data using raw deflate (without headers).
/**
* Compress data using raw deflate algorithm (no headers)
* @param buffer - Data to compress (Buffer or string)
* @param options - Compression options
* @returns Promise resolving to compressed Buffer
*/
function deflateRaw(buffer, options): Promise<Buffer>;
/**
* Decompress raw deflate-compressed data
* @param buffer - Compressed data Buffer
* @param options - Decompression options
* @returns Promise resolving to decompressed Buffer
*/
function inflateRaw(buffer, options): Promise<Buffer>;Automatically detect and decompress various compression formats.
/**
* Decompress data, automatically detecting the compression format
* @param buffer - Compressed data Buffer
* @param options - Decompression options
* @returns Promise resolving to decompressed Buffer
*/
function unzip(buffer, options): Promise<Buffer>;Usage Examples:
const zlib = require('mz/zlib');
// Basic gzip compression and decompression
async function gzipExample() {
try {
const originalData = 'Hello, World! This is some text to compress.';
console.log('Original:', originalData);
console.log('Original size:', originalData.length, 'bytes');
// Compress with gzip
const compressed = await zlib.gzip(originalData);
console.log('Compressed size:', compressed.length, 'bytes');
console.log('Compression ratio:', (compressed.length / originalData.length * 100).toFixed(1) + '%');
// Decompress
const decompressed = await zlib.gunzip(compressed);
console.log('Decompressed:', decompressed.toString());
} catch (error) {
console.error('Compression failed:', error);
}
}
// Deflate compression
async function deflateExample() {
try {
const data = Buffer.from('This is test data for deflate compression');
// Compress with deflate
const compressed = await zlib.deflate(data);
console.log('Deflate compressed:', compressed.length, 'bytes');
// Decompress
const decompressed = await zlib.inflate(compressed);
console.log('Decompressed:', decompressed.toString());
} catch (error) {
console.error('Deflate operation failed:', error);
}
}
// Raw deflate (no headers)
async function rawDeflateExample() {
try {
const data = 'Raw deflate compression example';
const compressed = await zlib.deflateRaw(data);
const decompressed = await zlib.inflateRaw(compressed);
console.log('Raw deflate works:', decompressed.toString() === data);
} catch (error) {
console.error('Raw deflate failed:', error);
}
}
// Universal decompression
async function unzipExample() {
try {
// Compress with gzip first
const data = 'Data compressed with gzip';
const gzipped = await zlib.gzip(data);
// Decompress with unzip (auto-detects format)
const unzipped = await zlib.unzip(gzipped);
console.log('Unzipped:', unzipped.toString());
} catch (error) {
console.error('Unzip failed:', error);
}
}
// Compress large data with options
async function compressWithOptions() {
try {
const largeData = 'Large data string...'.repeat(1000);
// Compress with custom options
const compressed = await zlib.gzip(largeData, {
level: 9, // Maximum compression
chunkSize: 1024, // Chunk size for processing
windowBits: 15, // Window size
memLevel: 8, // Memory usage level
strategy: zlib.constants.Z_DEFAULT_STRATEGY
});
console.log('Highly compressed size:', compressed.length);
const decompressed = await zlib.gunzip(compressed);
console.log('Decompression successful:', decompressed.length === largeData.length);
} catch (error) {
console.error('Compression with options failed:', error);
}
}
// Callback support is still available
zlib.gzip('callback example', (err, compressed) => {
if (err) {
console.error('Error:', err);
} else {
console.log('Compressed with callback:', compressed.length, 'bytes');
}
});
// File compression example
const fs = require('mz/fs');
async function compressFile(inputPath, outputPath) {
try {
// Read file
const fileData = await fs.readFile(inputPath);
console.log('Original file size:', fileData.length, 'bytes');
// Compress
const compressed = await zlib.gzip(fileData);
console.log('Compressed size:', compressed.length, 'bytes');
// Write compressed file
await fs.writeFile(outputPath, compressed);
console.log('Compressed file saved to:', outputPath);
} catch (error) {
console.error('File compression failed:', error);
}
}
// Compare compression algorithms
async function compareAlgorithms() {
const testData = 'This is test data for comparing compression algorithms. '.repeat(100);
try {
const gzipResult = await zlib.gzip(testData);
const deflateResult = await zlib.deflate(testData);
const deflateRawResult = await zlib.deflateRaw(testData);
console.log('Original size:', testData.length);
console.log('Gzip size:', gzipResult.length);
console.log('Deflate size:', deflateResult.length);
console.log('Deflate raw size:', deflateRawResult.length);
} catch (error) {
console.error('Comparison failed:', error);
}
}All compression functions accept an options object:
interface CompressionOptions {
/** Compression level (0-9, where 9 is best compression) */
level?: number;
/** Chunk size for processing data */
chunkSize?: number;
/** Window size (affects compression ratio and memory usage) */
windowBits?: number;
/** Memory usage level (1-9, where 9 uses most memory) */
memLevel?: number;
/** Compression strategy */
strategy?: number;
/** Dictionary for compression (advanced usage) */
dictionary?: Buffer;
/** Information about the original data */
info?: boolean;
}Compression functions will reject with errors for:
const zlib = require('mz/zlib');
async function handleCompressionErrors() {
try {
// This will fail - trying to decompress non-compressed data
await zlib.gunzip('not compressed data');
} catch (error) {
console.error('Decompression error:', error.message);
// Error codes: Z_DATA_ERROR, Z_BUF_ERROR, etc.
}
try {
// This will fail - invalid compression level
await zlib.gzip('data', { level: 15 }); // Max level is 9
} catch (error) {
console.error('Invalid options:', error.message);
}
}// Web server response compression
async function compressHttpResponse(data) {
try {
return await zlib.gzip(data);
} catch (error) {
// Return uncompressed data if compression fails
return Buffer.from(data);
}
}
// Database storage compression
async function compressForStorage(jsonData) {
try {
const stringified = JSON.stringify(jsonData);
const compressed = await zlib.deflate(stringified);
return compressed;
} catch (error) {
throw new Error('Failed to compress data for storage: ' + error.message);
}
}
// Log file compression
async function compressLogs(logEntries) {
try {
const logText = logEntries.join('\n');
return await zlib.gzip(logText, { level: 9 }); // Maximum compression for logs
} catch (error) {
throw new Error('Log compression failed: ' + error.message);
}
}thenify-all to wrap native zlib methodszlib.constants.Z_BEST_COMPRESSION)