@transformation/csv

Reading and writing CSV files from a transformation pipeline

Usage no npm install needed!

<script type="module">
  import transformationCsv from 'https://cdn.skypack.dev/@transformation/csv';
</script>

README

@transformation/csv

A package for reading and writing CSV files.

readCSV

Streams the rows of a CSV file using csv-parser and emits objects.

const { readCSV } = require("transformation/csv");
await expect(readCSV(csvFilePath), "to yield items", [
  {
    time: "2015-12-22T18:45:11.000Z",
    latitude: "59.9988",
    longitude: "-152.7191",
  },
  {
    time: "2015-12-22T18:38:34.000Z",
    latitude: "62.9616",
    longitude: "-148.7532",
  },
  {
    time: "2015-12-22T18:38:01.820Z",
    latitude: "19.2129993",
    longitude: "-155.4179993",
  },
  {
    time: "2015-12-22T18:38:00.000Z",
    latitude: "63.7218",
    longitude: "-147.083",
  },
  {
    time: "2015-12-22T18:28:57.000Z",
    latitude: "64.0769",
    longitude: "-148.8226",
  },
  {
    time: "2015-12-22T18:25:40.000Z",
    latitude: "61.4715",
    longitude: "-150.7697",
  },
]);

You can provide options to the parser the following way. It just forwards the options to csv-parser.

readCSV(csvFilePath, {
  maxRowBytes: 10,
});

writeCSV

Writes objects to one or more CSV files using csv-writer.

const { writeCSV } = require("transformation/csv");

Simplest case is just to write objects into a single file.

await program(
  emitItems(
    { symbol: "GOOG", price: 1349 },
    { symbol: "AAPL", price: 274 },
    { symbol: "AAPL", price: 275 },
    { symbol: "GOOG", price: 1351 },
    { symbol: "AAPL", price: 279 }
  ),
  writeCSV("stocks.csv")
);

You can also route the objects to multiple files.

await program(
  emitItems(
    { symbol: "GOOG", price: 1349 },
    { symbol: "AAPL", price: 274 },
    { symbol: "AAPL", price: 275 },
    { symbol: "GOOG", price: 1351 },
    { symbol: "AAPL", price: 279 }
  ),
  writeCSV(({ symbol }) => path.join(testPath, `stocks-${symbol}.csv`))
);

You can provide options to the parser the following way. It just forwards the options to csv-writer.

await program(
  emitItems(
    { symbol: "GOOG", price: 1349 },
    { symbol: "AAPL", price: 274 },
    { symbol: "AAPL", price: 275 },
    { symbol: "GOOG", price: 1351 },
    { symbol: "AAPL", price: 279 }
  ),
  writeCSV("stocks.csv", {
    headers: [
      { id: "symbol", title: "Symbol" },
      { id: "price", title: "Price quot; },
    ],
  })
);

Notice it is usually easier to just map the keys of the objects using the map transform.