From 5b1ff713aca7c870592e385feba014813fe1cad1 Mon Sep 17 00:00:00 2001 From: markdreyer Date: Wed, 30 Jan 2019 17:29:31 -0600 Subject: [PATCH 1/3] Update ParseConfig.dynamicTyping definition From documentation https://www.papaparse.com/docs#config : It also accepts an object or a function. If object it's values should be a boolean to indicate if dynamic typing should be applied for each column number (or header name if using headers). If it's a function, it should return a boolean value for each field number (or name if using headers) which will be passed as first argument. --- types/papaparse/index.d.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/types/papaparse/index.d.ts b/types/papaparse/index.d.ts index fc97ef210c..df09dde329 100644 --- a/types/papaparse/index.d.ts +++ b/types/papaparse/index.d.ts @@ -97,7 +97,7 @@ export interface ParseConfig { quoteChar?: string; // default: '"' header?: boolean; // default: false trimHeaders?: boolean; // default: false - dynamicTyping?: boolean; // default: false + dynamicTyping?: boolean | { [key: string]: boolean; [index: number]: boolean;} | ((field: string) => boolean); // default: false preview?: number; // default: 0 encoding?: string; // default: "" worker?: boolean; // default: false From 0b462231d669795ef8f2daecb4be5e7a09f362de Mon Sep 17 00:00:00 2001 From: markdreyer Date: Wed, 30 Jan 2019 17:33:53 -0600 Subject: [PATCH 2/3] Update type variable names to match documentation --- types/papaparse/index.d.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/types/papaparse/index.d.ts b/types/papaparse/index.d.ts index df09dde329..300e33b4a5 100644 --- a/types/papaparse/index.d.ts +++ b/types/papaparse/index.d.ts @@ -97,7 +97,7 @@ export interface ParseConfig { quoteChar?: string; // default: '"' header?: boolean; // default: false trimHeaders?: boolean; // default: false - dynamicTyping?: boolean | { [key: string]: boolean; [index: number]: boolean;} | ((field: string) => boolean); // default: false + dynamicTyping?: boolean | { [headerName: string]: boolean; [columnNumber: number]: boolean;} | ((field: string | number) => boolean); // default: false preview?: number; // default: 0 encoding?: string; // default: "" worker?: boolean; // default: false From c8cdd4b998b43a1e68d64d2367308458c7b77b7d Mon Sep 17 00:00:00 2001 From: markdreyer Date: Wed, 30 Jan 2019 18:57:01 -0600 Subject: [PATCH 3/3] Add tests for ParseConfig.dynamicTyping --- types/papaparse/papaparse-tests.ts | 58 ++++++++++++++++++------------ 1 file changed, 35 insertions(+), 23 deletions(-) diff --git a/types/papaparse/papaparse-tests.ts b/types/papaparse/papaparse-tests.ts index 50929ff512..a22ea5b14d 100644 --- a/types/papaparse/papaparse-tests.ts +++ b/types/papaparse/papaparse-tests.ts @@ -2,12 +2,12 @@ import Papa = require("papaparse"); import { - ParseConfig, - UnparseConfig, - UnparseObject, - ParseError, - ParseMeta, - ParseResult + ParseConfig, + UnparseConfig, + UnparseObject, + ParseError, + ParseMeta, + ParseResult } from "papaparse"; import { Readable } from "stream"; @@ -19,14 +19,26 @@ var res = Papa.parse("3,3,3"); res.errors[0].code; Papa.parse("3,3,3", { - delimiter: ';', - comments: false, + delimiter: ';', + comments: false, trimHeaders: false, + step: function (results, p) { + p.abort(); + results.data.length; + }, + dynamicTyping: true +}); - step: function (results, p) { - p.abort(); - results.data.length; - } +Papa.parse("3,3,3", { + dynamicTyping: (field: string | number): boolean => /headerName/i.test(field.toString()) +}); + +Papa.parse("3,3,3", { + dynamicTyping: {'headerName': true} +}); + +Papa.parse("3,3,3", { + dynamicTyping: {5: true} }); var file = new File(null, null, null); @@ -35,20 +47,20 @@ Papa.parse(file, { transform: function(value, field) { }, - complete: function (a, b) { - a.meta.fields; - b.name; - } + complete: function (a, b) { + a.meta.fields; + b.name; + } }); const readable = new Readable() const rows = [ - "1,2,3", - "4,5,6" + "1,2,3", + "4,5,6" ] rows.forEach(r => { - readable.push(r); + readable.push(r); }); const papaStream: NodeJS.ReadWriteStream = Papa.parse(Papa.NODE_STREAM_INPUT); @@ -61,16 +73,16 @@ readable.pipe(papaStream); Papa.unparse([{ a: 1, b: 1, c: 1 }]); Papa.unparse([[1, 2, 3], [4, 5, 6]]); Papa.unparse({ - fields: ["3"], - data: [] + fields: ["3"], + data: [] }); Papa.unparse([{ a: 1, b: 1, c: 1 }], { quotes: false }); Papa.unparse([{ a: 1, b: 1, c: 1 }], { quotes: [false, true, true] }); Papa.unparse([[1, 2, 3], [4, 5, 6]], { delimiter: "," }); Papa.unparse({ - fields: ["3"], - data: [] + fields: ["3"], + data: [] }, { newline: "\n" });