From 32757fa15a9a96e3cfb15915899ffddeead25f01 Mon Sep 17 00:00:00 2001 From: Huanyi Xie <74809554+xiehuanyi@users.noreply.github.com> Date: Sun, 11 Oct 2026 21:01:57 +0300 Subject: [PATCH 1/2] fix(stream-transform): honor falsy params in the sync API --- packages/stream-transform/dist/cjs/sync.cjs | 2 +- packages/stream-transform/dist/esm/sync.js | 2 +- packages/stream-transform/dist/iife/sync.js | 2 +- packages/stream-transform/dist/umd/sync.js | 2 +- packages/stream-transform/lib/sync.js | 2 +- packages/stream-transform/test/api.sync.js | 21 +++++++++++++++++++++ 6 files changed, 26 insertions(+), 5 deletions(-) diff --git a/packages/stream-transform/dist/cjs/sync.cjs b/packages/stream-transform/dist/cjs/sync.cjs index 360c0e9b6..a495fd454 100644 --- a/packages/stream-transform/dist/cjs/sync.cjs +++ b/packages/stream-transform/dist/cjs/sync.cjs @@ -145,7 +145,7 @@ const transform = function () { } // Validate arguments let expected_handler_length = 1; - if (options.params) { + if (options.params !== undefined && options.params !== null) { expected_handler_length++; } if (handler.length > expected_handler_length) { diff --git a/packages/stream-transform/dist/esm/sync.js b/packages/stream-transform/dist/esm/sync.js index aeb8d90ab..886c81724 100644 --- a/packages/stream-transform/dist/esm/sync.js +++ b/packages/stream-transform/dist/esm/sync.js @@ -5263,7 +5263,7 @@ const transform = function () { } // Validate arguments let expected_handler_length = 1; - if (options.params) { + if (options.params !== undefined && options.params !== null) { expected_handler_length++; } if (handler.length > expected_handler_length) { diff --git a/packages/stream-transform/dist/iife/sync.js b/packages/stream-transform/dist/iife/sync.js index 60b8c7d94..6113387d8 100644 --- a/packages/stream-transform/dist/iife/sync.js +++ b/packages/stream-transform/dist/iife/sync.js @@ -5266,7 +5266,7 @@ var stream_transform_sync = (function (exports) { } // Validate arguments let expected_handler_length = 1; - if (options.params) { + if (options.params !== undefined && options.params !== null) { expected_handler_length++; } if (handler.length > expected_handler_length) { diff --git a/packages/stream-transform/dist/umd/sync.js b/packages/stream-transform/dist/umd/sync.js index 8eb2a88b5..d6cf8f07f 100644 --- a/packages/stream-transform/dist/umd/sync.js +++ b/packages/stream-transform/dist/umd/sync.js @@ -5269,7 +5269,7 @@ } // Validate arguments let expected_handler_length = 1; - if (options.params) { + if (options.params !== undefined && options.params !== null) { expected_handler_length++; } if (handler.length > expected_handler_length) { diff --git a/packages/stream-transform/lib/sync.js b/packages/stream-transform/lib/sync.js index e09e75130..67b2cfc69 100644 --- a/packages/stream-transform/lib/sync.js +++ b/packages/stream-transform/lib/sync.js @@ -33,7 +33,7 @@ const transform = function () { } // Validate arguments let expected_handler_length = 1; - if (options.params) { + if (options.params !== undefined && options.params !== null) { expected_handler_length++; } if (handler.length > expected_handler_length) { diff --git a/packages/stream-transform/test/api.sync.js b/packages/stream-transform/test/api.sync.js index f9b365747..88234f151 100644 --- a/packages/stream-transform/test/api.sync.js +++ b/packages/stream-transform/test/api.sync.js @@ -31,6 +31,27 @@ describe("api.sync", function () { data.should.eql(["a|b|c", "1|2|3"]); }); + for (const params of [0, false, ""]) { + it(`honors falsy params ${JSON.stringify(params)}`, function () { + const data = transform(["record"], { params }, function (record, value) { + return [record, value]; + }); + data.should.eql([["record", params]]); + }); + } + + for (const params of [undefined, null]) { + it(`rejects callback handlers with params ${params}`, function () { + (function () { + transform(["record"], { params }, function (record, callback) { + callback(null, record); + }); + }).should.throw( + "Invalid Handler: only synchronous handlers are supported", + ); + }); + } + it("only sync handlers are supported", function () { // Without options (function () { From 7b0f5a0fae0161c92ab624a3152353f7711b32e7 Mon Sep 17 00:00:00 2001 From: Huanyi Xie <74809554+xiehuanyi@users.noreply.github.com> Date: Mon, 12 Oct 2026 01:29:22 +0300 Subject: [PATCH 2/2] test(stream-transform): group sync params regressions with option tests --- packages/stream-transform/test/api.sync.js | 21 -------------- .../stream-transform/test/option.params.js | 29 +++++++++++++++++++ 2 files changed, 29 insertions(+), 21 deletions(-) diff --git a/packages/stream-transform/test/api.sync.js b/packages/stream-transform/test/api.sync.js index 88234f151..f9b365747 100644 --- a/packages/stream-transform/test/api.sync.js +++ b/packages/stream-transform/test/api.sync.js @@ -31,27 +31,6 @@ describe("api.sync", function () { data.should.eql(["a|b|c", "1|2|3"]); }); - for (const params of [0, false, ""]) { - it(`honors falsy params ${JSON.stringify(params)}`, function () { - const data = transform(["record"], { params }, function (record, value) { - return [record, value]; - }); - data.should.eql([["record", params]]); - }); - } - - for (const params of [undefined, null]) { - it(`rejects callback handlers with params ${params}`, function () { - (function () { - transform(["record"], { params }, function (record, callback) { - callback(null, record); - }); - }).should.throw( - "Invalid Handler: only synchronous handlers are supported", - ); - }); - } - it("only sync handlers are supported", function () { // Without options (function () { diff --git a/packages/stream-transform/test/option.params.js b/packages/stream-transform/test/option.params.js index 17579d9af..4474cf75b 100644 --- a/packages/stream-transform/test/option.params.js +++ b/packages/stream-transform/test/option.params.js @@ -1,7 +1,36 @@ +import "should"; +import { transform as transformSync } from "../lib/sync.js"; import { generate } from "csv-generate"; import { transform } from "../lib/index.js"; describe("option.params", function () { + describe("sync API", function () { + for (const params of [0, false, ""]) { + it(`honors falsy params ${JSON.stringify(params)}`, function () { + const data = transformSync( + ["record"], + { params }, + function (record, value) { + return [record, value]; + }, + ); + data.should.eql([["record", params]]); + }); + } + + for (const params of [undefined, null]) { + it(`rejects callback handlers with params ${params}`, function () { + (function () { + transformSync(["record"], { params }, function (record, callback) { + callback(null, record); + }); + }).should.throw( + "Invalid Handler: only synchronous handlers are supported", + ); + }); + } + }); + it("sync", function (next) { const generator = generate({ length: 100, objectMode: true, seed: 1 }); const transformer = generator.pipe(