From a674743f5d45cb31389ec2edb9e4ec45060b2a6c Mon Sep 17 00:00:00 2001 From: Huanyi Xie <74809554+xiehuanyi@users.noreply.github.com> Date: Mon, 12 Oct 2026 00:30:10 +0300 Subject: [PATCH] fix(csv-stringify): allow empty string column keys --- .../csv-stringify/lib/api/normalize_columns.js | 2 +- packages/csv-stringify/test/option.columns.js | 15 +++++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/packages/csv-stringify/lib/api/normalize_columns.js b/packages/csv-stringify/lib/api/normalize_columns.js index 53e4b2700..130e2b066 100644 --- a/packages/csv-stringify/lib/api/normalize_columns.js +++ b/packages/csv-stringify/lib/api/normalize_columns.js @@ -27,7 +27,7 @@ const normalize_columns = function (columns) { column !== null && !Array.isArray(column) ) { - if (!column.key) { + if (!column.key && column.key !== "") { return [ Error('Invalid column definition: property "key" is required'), ]; diff --git a/packages/csv-stringify/test/option.columns.js b/packages/csv-stringify/test/option.columns.js index a83bd1dd1..7002ee219 100644 --- a/packages/csv-stringify/test/option.columns.js +++ b/packages/csv-stringify/test/option.columns.js @@ -1,8 +1,23 @@ import "should"; import { stringify } from "../lib/index.js"; +import { stringify as stringifySync } from "../lib/sync.js"; describe("Option `columns`", function () { describe("definition", function () { + it("accepts an empty record key with an explicit header", function () { + stringifySync([{ "": "value" }], { + columns: [{ key: "", header: "blank" }], + header: true, + }).should.eql("blank\nvalue\n"); + }); + + it("accepts an empty record key with the default header", function () { + stringifySync([{ "": "value" }], { + columns: [{ key: "" }], + header: true, + }).should.eql("\nvalue\n"); + }); + it("validates option types", function () { (() => { stringify([], { columns: true }, () => {});