diff --git a/types/json2csv/json2csv-tests.ts b/types/json2csv/json2csv-tests.ts index 6f73ea4817..930903cf75 100644 --- a/types/json2csv/json2csv-tests.ts +++ b/types/json2csv/json2csv-tests.ts @@ -1,5 +1,7 @@ -import json2csv, { parse, Parser, Transform } from 'json2csv'; import { Transform as NodeTransform } from 'stream'; +import { createReadStream, createWriteStream } from 'fs'; + +import json2csv, { AsyncParser, parse, Parser, parseAsync, Transform } from 'json2csv'; let s: string; let obj: object; @@ -17,15 +19,19 @@ parse({}); parse([]); parse({}, {}); +new Parser(); +const parser: Parser = new Parser({}); +s = parser.parse({ str: '', num: 1, obj: {} }); +parser.parse([]); +const transform: Transform = new Transform({ quote: '' }); +const nodeTransform: NodeTransform = transform; + +// Tests using examples from Readme interface Car { car: string; price: number; } -new Parser(); -const parser: Parser = new Parser({}); -s = parser.parse({ str: '', num: 1, obj: {} }); - const opts: json2csv.Options = { fields: [{ label: 'Car Name', @@ -36,11 +42,62 @@ const opts: json2csv.Options = { }] }; -const json2csvParser = new Parser(opts); +const data = [{ + car: 'VW Beetle', + price: 1395 +}, { + car: 'VW T1', + price: 1357 +}]; -parser.parse([]); -const transform: Transform = new Transform({ quote: '' }); -const nodeTransform: NodeTransform = transform; +// Test for Synchronous Parser +try { + const parser = new Parser(opts); + const csv = parser.parse({ car: '', price: 1 }); + console.log(csv); +} catch (err) { + console.error(err); +} + +// Test convenience method "parse" +try { + const csv = parse(data, opts); + console.log(csv); +} catch (err) { + console.error(err); +} + +// Test for Asynchronous Parser +const transformOpts = { highWaterMark: 8192 }; + +const asyncParser = new AsyncParser(opts, transformOpts); + +let csv = ''; +asyncParser.processor + .on('data', chunk => (csv += chunk.toString())) + .on('end', () => console.log(csv)) + .on('error', err => console.error(err)); + +// Test for transform events +asyncParser.transform + .on('header', header => console.log(header)) + .on('line', line => console.log(line)) + .on('error', err => console.log(err)); + +asyncParser.input.push(data); // This data might come from an HTTP request, etc. +asyncParser.input.push(null); // Sending `null` to a stream signal that no more data is expected and ends it. + +const input = createReadStream('/path/to/input', { encoding: 'utf8' }); +const output = createWriteStream('path/to/output', { encoding: 'utf8' }); + +asyncParser.fromInput(input).toOutput(output).promise() + .then(csv => console.log(csv)) + .catch(err => console.error(err)); + +// Test convenience method "parseAsync" +parseAsync(data, opts) + .then(csv => console.log(csv)) + .catch(err => console.error(err)); /******************** * Internal Methods *