Skip to content

Instantly share code, notes, and snippets.

@jacobq
Created December 20, 2019 17:31
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jacobq/48589927655ccfc771a5e47f064dc41e to your computer and use it in GitHub Desktop.
Save jacobq/48589927655ccfc771a5e47f064dc41e to your computer and use it in GitHub Desktop.
csv-stringify context.header bug repro
const { createWriteStream } = require('fs');
const intoStream = require('into-stream');
const csvStringify = require('csv-stringify');
const makePromise = () => {
let resolve;
let reject;
const promise = new Promise((resolve_, reject_) => {
resolve = resolve_;
reject = reject_;
});
return { resolve, reject, promise };
};
async function saveAsCSV(fileName, collection) {
const { resolve, reject, promise } = makePromise();
let stream = intoStream.object(collection);
stream.pipe(csvStringify({
header: true, // setting this to false prevents the problem but also prevents the header row from being generated
cast: {
number(original, context) {
const { header } = context;
console.log(`header=${header} for context -->`, context);
return { value: `${original}${header ? '-header' : ''}` };
}
},
columns: [{
key: 'foo',
header: 'The foo column'
}, {
key: 'bar',
header: 'The bar column'
}]
}))
.pipe(createWriteStream(fileName))
.on('finish', () => {
console.log(`saveAsCSV write stream finished for ${fileName}`);
resolve();
})
.on('error', reject);
return promise;
}
async function main() {
const records = [{
foo: 1,
bar: 2,
}, {
foo: 3,
bar: 4,
}];
await saveAsCSV('output.csv', records)
}
if (require.main === module) {
main();
}
{
"name": "csv-header-test",
"version": "1.0.0",
"description": "Repro of what appears to be a bug with csv-stringify",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "Jacob Quant <jacobq@gmail.com>",
"license": "MIT",
"dependencies": {
"csv-stringify": "^5.3.4",
"into-stream": "^5.1.1"
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment