From 13e688cb38dcb67c7182211968c794146be54692 Mon Sep 17 00:00:00 2001 From: doug-martin Date: Mon, 2 Nov 2020 22:11:07 -0600 Subject: [PATCH] fix(formatting,#446): Do not quote fields that do not contain a quote --- .../format/__tests__/issues/issue446.spec.ts | 24 +++++++++++++++++++ .../format/src/formatter/FieldFormatter.ts | 2 +- 2 files changed, 25 insertions(+), 1 deletion(-) create mode 100644 packages/format/__tests__/issues/issue446.spec.ts diff --git a/packages/format/__tests__/issues/issue446.spec.ts b/packages/format/__tests__/issues/issue446.spec.ts new file mode 100644 index 00000000..3ff3c017 --- /dev/null +++ b/packages/format/__tests__/issues/issue446.spec.ts @@ -0,0 +1,24 @@ +import * as csv from '../../src'; +import { RecordingStream } from '../__fixtures__'; + +describe('Issue #446 - https://github.com/C2FO/fast-csv/issues/446', () => { + it('should not quote a field that contains a single quote if it is not the quote character', () => { + return new Promise((res, rej) => { + const rs = new RecordingStream(); + const data: csv.RowArray[] = [["a quick' brown fox", 'jumped', 'over the lazy brown "dog"']]; + + csv.write(data, { + headers: ['header1', 'header2', 'header3'], + }) + .pipe(rs) + .on('error', rej) + .on('finish', () => { + expect(rs.data).toEqual([ + 'header1,header2,header3', + `\na quick' brown fox,jumped,"over the lazy brown ""dog"""`, + ]); + res(); + }); + }); + }); +}); diff --git a/packages/format/src/formatter/FieldFormatter.ts b/packages/format/src/formatter/FieldFormatter.ts index f4926235..a31baa7d 100644 --- a/packages/format/src/formatter/FieldFormatter.ts +++ b/packages/format/src/formatter/FieldFormatter.ts @@ -19,7 +19,7 @@ export class FieldFormatter { this.headers = formatterOptions.headers; } this.REPLACE_REGEXP = new RegExp(formatterOptions.quote, 'g'); - const escapePattern = `[${formatterOptions.delimiter}${escapeRegExp(formatterOptions.rowDelimiter)}|\r|\n']`; + const escapePattern = `[${formatterOptions.delimiter}${escapeRegExp(formatterOptions.rowDelimiter)}|\r|\n]`; this.ESCAPE_REGEXP = new RegExp(escapePattern); }