Commit 2af69ccf by psschand Committed by Ryan McKinley

CSV: escape quotes in toCSV (#16874)

parent c3a52049
......@@ -48,11 +48,13 @@ function norm(csv: string): string {
describe('write csv', () => {
it('should write the same CSV that we read', () => {
const firstRow = [10, 'this "has quotes" inside', true];
const path = __dirname + '/testdata/roundtrip.csv';
const csv = fs.readFileSync(path, 'utf8');
const data = readCSV(csv);
const out = toCSV(data, { headerStyle: CSVHeaderStyle.full });
expect(data.length).toBe(1);
expect(data[0].rows[0]).toEqual(firstRow);
expect(data[0].fields.length).toBe(3);
expect(norm(out)).toBe(norm(csv));
......@@ -63,6 +65,7 @@ describe('write csv', () => {
const f = readCSV(shorter);
const fields = f[0].fields;
expect(fields.length).toBe(3);
expect(f[0].rows[0]).toEqual(firstRow);
expect(fields.map(f => f.name).join(',')).toEqual('a,b,c'); // the names
});
});
......@@ -266,7 +266,7 @@ function writeValue(value: any, config: CSVConfig): string {
const str = value.toString();
if (str.includes('"')) {
// Escape the double quote characters
return config.quoteChar + str.replace('"', '""') + config.quoteChar;
return config.quoteChar + str.replace(/"/gi, '""') + config.quoteChar;
}
if (str.includes('\n') || str.includes(config.delimiter)) {
return config.quoteChar + str + config.quoteChar;
......
#name#a,b,c
#type#number,string,boolean
#unit#ms,,s
10,AA,true
10,"this ""has quotes"" inside",true
20,XX,false
30,YY,false
40,ZZ,true
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment