Skip to content

Commit 2b677ac

Browse files
authored
Merge pull request #192 from brucejo75/master
Added 'header' event. Emit the header values.
2 parents 93b9569 + 4c58ce8 commit 2b677ac

4 files changed

Lines changed: 36 additions & 1 deletion

File tree

libs/core/Converter.js

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ function Converter(params, options) {
3636
this._needJson = null;
3737
this._needEmitResult = null;
3838
this._needEmitFinalResult = null;
39+
this._needEmitHeader = null;
3940
this._needEmitJson = null;
4041
this._needPush = null;
4142
this._needEmitCsv = null;
@@ -55,6 +56,9 @@ function Converter(params, options) {
5556
if (this._needEmitJson === null) {
5657
this._needEmitJson = this.listeners("json").length > 0;
5758
}
59+
if (this._needEmitHeader === null) {
60+
this._needEmitHeader = this.listeners("header").length > 0;
61+
}
5862
if (this._needEmitCsv === null) {
5963
this._needEmitCsv = this.listeners("csv").length > 0;
6064
}
@@ -297,6 +301,8 @@ Converter.prototype.processHead = function (fileLine, cb) {
297301
this.workerMgr.setParams(params);
298302
}
299303
var res = linesToJson(lines.lines, params, 0);
304+
// Put the header with the first row
305+
if(res.length > 0) res[0].header = params._headers;
300306
this.processResult(res);
301307
this.lastIndex += res.length;
302308
this.recordNum += res.length;
@@ -348,6 +354,7 @@ Converter.prototype.processResult = function (result) {
348354

349355
Converter.prototype.emitResult = function (r) {
350356
var index = r.index;
357+
var header = r.header;
351358
var row = r.row;
352359
var result = r.json;
353360
var resultJson = null;
@@ -367,6 +374,9 @@ Converter.prototype.emitResult = function (r) {
367374
this.transform(resultJson, row, index);
368375
resultStr = null;
369376
}
377+
if (this._needEmitHeader && header) {
378+
this.emit("header", header);
379+
}
370380
if (this._needEmitJson) {
371381
this.emit("json", resultJson, index);
372382
}

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -190,7 +190,7 @@
190190
"hireable": true
191191
}
192192
],
193-
"version": "1.1.7",
193+
"version": "1.1.8",
194194
"keywords": [
195195
"csv",
196196
"csv parser",

readme.md

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -272,6 +272,22 @@ All parameters can be used in Command Line tool.
272272

273273
`Converter` class defined a series of events.
274274

275+
### header
276+
277+
`header` event is emitted for each CSV file. It passes an array object which contains the names of the header row.
278+
279+
```js
280+
const csv=require('csvtojson')
281+
csv()
282+
.on('header',(header)=>{
283+
//header=> [header1, header2, header3]
284+
})
285+
```
286+
287+
`header` is always an array of strings without types.
288+
289+
`header` event will be emitted regardless of the `noHeaders` parameter setting.
290+
275291
### json
276292

277293
`json` event is emitted for each parsed CSV line. It passes JSON object and the row number of the CSV line in its callback function.

test/testCSVConverter2.js

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -434,6 +434,10 @@ describe("CSV Converter", function () {
434434
ignoreColumns:[0]
435435
})
436436
.fromStream(rs)
437+
.on("header", function(header) {
438+
assert.equal(header.indexOf("TIMESTAMP"), -1);
439+
assert.equal(header.indexOf("UPDATE"), 0);
440+
})
437441
.on("csv", function(row, idx) {
438442
assert(idx >= 0);
439443
if (idx ===1){
@@ -455,6 +459,11 @@ describe("CSV Converter", function () {
455459
includeColumns:[0]
456460
})
457461
.fromStream(rs)
462+
.on("header", function(header) {
463+
assert.equal(header.indexOf("TIMESTAMP"), 0);
464+
assert.equal(header.indexOf("UPDATE"), -1);
465+
assert.equal(header.length, 1);
466+
})
458467
.on("csv", function(row, idx) {
459468
assert(idx >= 0);
460469
assert.equal(row.length, 1);

0 commit comments

Comments
 (0)