Skip to main content
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().

Build docs developers (and LLMs) love