diff --git a/packages/csv-stringify/lib/api/normalize_options.js b/packages/csv-stringify/lib/api/normalize_options.js index 32e63033c..a1b58d70c 100644 --- a/packages/csv-stringify/lib/api/normalize_options.js +++ b/packages/csv-stringify/lib/api/normalize_options.js @@ -200,7 +200,7 @@ const normalize_options = function (opts) { if (options.cast === undefined || options.cast === null) { options.cast = {}; } else { - // todo + options.cast = { ...options.cast }; } // Normalize option cast.bigint if (options.cast.bigint === undefined || options.cast.bigint === null) { diff --git a/packages/csv-stringify/test/option.cast.ts b/packages/csv-stringify/test/option.cast.ts index 5d27be58a..158f99c8f 100644 --- a/packages/csv-stringify/test/option.cast.ts +++ b/packages/csv-stringify/test/option.cast.ts @@ -1,8 +1,19 @@ import "should"; import dedent from "dedent"; import { stringify } from "../lib/index.js"; +import { stringify as stringifySync } from "../lib/sync.js"; describe("Option `cast`", function () { + it("preserves frozen options in the sync API", function () { + const string = (value: string) => value.toUpperCase(); + const cast = { string }; + Object.freeze(cast); + for (let i = 0; i < 2; i++) { + stringifySync([["value", 42]], { cast }).should.equal("VALUE,42\n"); + } + cast.should.eql({ string }); + }); + describe("default", function () { it("default BigInt formatter", function (next) { stringify(