This codemod replaces zlib.bytesRead with zlib.bytesWritten for consistent stream property naming to handle Node.js DEP0108.
What It Does
This codemod:
- Replaces
bytesRead property with bytesWritten in all zlib transform streams
- Handles both CommonJS and ESM imports
- Works with all zlib stream types (Gzip, Deflate, Inflate, etc.)
Before/After Examples
Basic Usage with Gzip
Before:
const zlib = require("node:zlib");
const gzip = zlib.createGzip();
gzip.on("end", () => {
console.log("Bytes processed:", gzip.bytesRead);
});
After:
const zlib = require("node:zlib");
const gzip = zlib.createGzip();
gzip.on("end", () => {
console.log("Bytes processed:", gzip.bytesWritten);
});
Statistics Object
Before:
const zlib = require("node:zlib");
const deflate = zlib.createDeflate();
deflate.on("finish", () => {
const stats = {
input: deflate.bytesRead,
output: deflate.bytesWritten
};
});
After:
const zlib = require("node:zlib");
const deflate = zlib.createDeflate();
deflate.on("finish", () => {
const stats = {
input: deflate.bytesWritten,
output: deflate.bytesWritten
};
});
Progress Tracking
Before:
const zlib = require("node:zlib");
function trackProgress(stream) {
setInterval(() => {
console.log(`Progress: ${stream.bytesRead} bytes`);
}, 1000);
}
After:
const zlib = require("node:zlib");
function trackProgress(stream) {
setInterval(() => {
console.log(`Progress: ${stream.bytesWritten} bytes`);
}, 1000);
}
ESM Import
Before:
import { createGzip } from "node:zlib";
const gzip = createGzip();
const bytesProcessed = gzip.bytesRead;
After:
import { createGzip } from "node:zlib";
const gzip = createGzip();
const bytesProcessed = gzip.bytesWritten;
Destructured Require
Before:
const { createGzip } = require("node:zlib");
const gzip = createGzip();
const bytes = gzip.bytesRead;
After:
const { createGzip } = require("node:zlib");
const gzip = createGzip();
const bytes = gzip.bytesWritten;
Usage
Run this codemod on your project:
npx codemod node/userland/zlib-bytesread-to-byteswritten
The property name change from bytesRead to bytesWritten may seem counterintuitive, but it aligns with the stream’s perspective: bytes written to the compression/decompression stream.
This codemod works with all zlib compression streams including createGzip(), createGunzip(), createDeflate(), createInflate(), createDeflateRaw(), createInflateRaw(), createUnzip(), and createBrotliCompress()/createBrotliDecompress().