From a52cdbe54dd1208f3ead446f28a5987e3831bd6f Mon Sep 17 00:00:00 2001 From: mikesealey Date: Tue, 19 Nov 2024 17:18:11 +0000 Subject: [PATCH] allows additional CSV delimiters --- .../server/src/api/routes/tests/table.spec.ts | 15 +++++++++++++++ packages/server/src/utilities/csv.ts | 5 ++++- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/packages/server/src/api/routes/tests/table.spec.ts b/packages/server/src/api/routes/tests/table.spec.ts index b9d8696714..692a3c4b91 100644 --- a/packages/server/src/api/routes/tests/table.spec.ts +++ b/packages/server/src/api/routes/tests/table.spec.ts @@ -1511,5 +1511,20 @@ datasourceDescribe( }) }) }) + describe("csvToJson", () => { + const delimiters = [",", ";", ":", "|", "~", "\t", " "] + it.only.each(delimiters)( + "can parse CSVs with delimiter; %s", + async delimiter => { + const rows = await config.api.table.csvToJson({ + csvString: [ + ["a", "b", "c", "d", "e"].join(delimiter), + ["1", "2", "3", "4", "5"].join(delimiter), + ].join("\n"), + }) + expect(rows).toEqual([{ a: "1", b: "2", c: "3", d: "4", e: "5" }]) + } + ) + }) } ) diff --git a/packages/server/src/utilities/csv.ts b/packages/server/src/utilities/csv.ts index 43d712165a..4ecdbba37e 100644 --- a/packages/server/src/utilities/csv.ts +++ b/packages/server/src/utilities/csv.ts @@ -9,7 +9,10 @@ export async function jsonFromCsvString(csvString: string) { // is causing issues on conversion. ignoreEmpty will remove the key completly // if empty, so creating this empty object will ensure we return the values // with the keys but empty values - const result = await csv({ ignoreEmpty: false }).fromString(csvString) + const result = await csv({ + ignoreEmpty: false, + delimiter: [",", ";", ":", "|", "~", "\t", " "], + }).fromString(csvString) result.forEach((r, i) => { for (const [key] of Object.entries(r).filter(([, value]) => value === "")) { if (castedWithEmptyValues[i][key] === undefined) {