Security News
GitHub Removes Malicious Pull Requests Targeting Open Source Repositories
GitHub removed 27 malicious pull requests attempting to inject harmful code across multiple open source repositories, in another round of low-effort attacks.
csv-stringify
Advanced tools
The csv-stringify npm package is a module that provides the ability to convert arrays or objects into a CSV (Comma-Separated Values) string. It can be used to generate CSV files or strings from JavaScript data structures, supporting both the Node.js stream API and a simple callback-based API.
Stringifying an array of records
This feature allows you to convert an array of arrays (representing records) into a CSV string. Each sub-array is a row in the CSV output.
const stringify = require('csv-stringify');
const records = [['1', '2', '3'], ['a', 'b', 'c']];
stringify(records, (err, output) => {
if (err) throw err;
console.log(output);
});
Stringifying from a stream
This feature demonstrates how to use csv-stringify with Node.js streams. Data can be piped into the stringify function, which then outputs a CSV formatted stream.
const stringify = require('csv-stringify');
const { Readable } = require('stream');
const records = new Readable({
objectMode: true,
read() {}
});
records.push(['1', '2', '3']);
records.push(['a', 'b', 'c']);
records.push(null);
records.pipe(stringify()).pipe(process.stdout);
Stringifying objects with column headers
This feature allows you to convert an array of objects into a CSV string, including column headers as the first row in the output.
const stringify = require('csv-stringify');
const records = [{ id: '1', name: 'John Doe' }, { id: '2', name: 'Jane Doe' }];
stringify(records, { header: true }, (err, output) => {
if (err) throw err;
console.log(output);
});
PapaParse is a robust and powerful CSV (character-separated values) parser with a focus on ease of use and performance. It can parse CSV files or strings, convert them to JSON, and provide many advanced features like auto-detection of delimiters. Compared to csv-stringify, PapaParse offers both parsing and stringifying capabilities, whereas csv-stringify is focused only on stringifying.
fast-csv is an npm package that provides parsing and formatting capabilities for CSV data. It is designed to be fast and flexible, allowing for both stream and callback-based APIs. While csv-stringify is specifically for stringifying JavaScript data into CSV format, fast-csv offers both parsing and formatting, making it a more comprehensive solution for working with CSV data.
This project is part of the CSV module
and a stringifier converting records into a CSV text and implementing the
Node.js stream.Transform
API. It is also providing a simple callback-base API
for converniency. It is both extremely easy to use and powerfull. It was
released since 2010 and is tested against very large dataset by a large
community.
Documentation for the "csv-stringify" package is available here.
This module is to be considered in alpha stage. It is part of an ongoing effort to split the current CSV module into complementary modules with a cleaner design and the latest stream implementation. However, the code has been imported with very little changes and you should feel confident to use it in your code.
Run npm install csv
to install the full csv module or run
npm install csv-stringify
if you are only interested by the CSV stringifier.
Use the callback style API for simplicity or the stream based API for scalability.
The stringifier receive an array and return a string inside a user-provided
callback. This example is available with the command node samples/callback.js
.
var stringify = require('csv-stringify');
input = [ [ '1', '2', '3', '4' ], [ 'a', 'b', 'c', 'd' ] ];
stringify(input, function(err, output){
output.should.eql('1,2,3,4\na,b,c,d');
});
// node samples/stream.js
var stringify = require('csv-stringify');
data = '';
stringifier = stringify({delimiter: ':'})
stringifier.on('readable', function(){
while(row = stringifier.read()){
data += row;
}
});
stringifier.on('error', function(err){
consol.log(err.message);
});
stringifier.on('finish', function(){
data.should.eql(
"root:x:0:0:root:/root:/bin/bash\n" +
"someone:x:1022:1022:a funny cat:/home/someone:/bin/bash"
);
});
stringifier.write([ 'root','x','0','0','root','/root','/bin/bash' ]);
stringifier.write([ 'someone','x','1022','1022','a funny cat','/home/someone','/bin/bash' ]);
stringifier.end();
One usefull function part of the Stream API is pipe
to interact between
multiple streams. You may use this function to pipe a stream.Readable
array
or object source to a stream.Writable
string destination. The next example
available as node samples/pipe.js
generate records, stringify them and print
them to stdout.
stringify = require('csv-stringify');
generate = require('csv-generate');
generator = generate({objectMode: true, seed: 1, headers: 2});
stringifier = stringify();
generator.pipe(stringifier).pipe(process.stdout);
Most of the generator is imported from its parent project CSV in a effort to split it between the generator, the parser, the transformer and the stringifier.
Tests are executed with mocha. To install it, simple run npm install
followed by npm test
. It will install mocha and its dependencies in your
project "node_modules" directory and run the test suite. The tests run
against the CoffeeScript source files.
To generate the JavaScript files, run make build
.
The test suite is run online with Travis against the versions 0.9, 0.10 and 0.11 of Node.js.
FAQs
CSV stringifier implementing the Node.js `stream.Transform` API
The npm package csv-stringify receives a total of 1,985,192 weekly downloads. As such, csv-stringify popularity was classified as popular.
We found that csv-stringify demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 0 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
GitHub removed 27 malicious pull requests attempting to inject harmful code across multiple open source repositories, in another round of low-effort attacks.
Security News
RubyGems.org has added a new "maintainer" role that allows for publishing new versions of gems. This new permission type is aimed at improving security for gem owners and the service overall.
Security News
Node.js will be enforcing stricter semver-major PR policies a month before major releases to enhance stability and ensure reliable release candidates.