UNPKG

750 BJavaScriptView Raw
1'use strict'
2
3const { createReadStream } = require('fs')
4const readline = require('readline')
5
6const unescape = value => {
7 if (value.startsWith('"') && value.endsWith('"')) {
8 return JSON.parse(value)
9 }
10 return value
11}
12
13async function * buildCsvReader (fileName) {
14 const fileStream = createReadStream(fileName)
15 const rl = readline.createInterface({
16 input: fileStream,
17 crlfDelay: Infinity
18 })
19 let headers
20 for await (const line of rl) {
21 const fields = line.split('\t')
22 if (headers === undefined) {
23 headers = fields
24 continue
25 }
26 const record = {}
27 headers.forEach((field, index) => {
28 record[field] = unescape(fields[index])
29 })
30 yield record
31 }
32}
33
34module.exports = {
35 buildCsvReader
36}