Skip to content
This repository was archived by the owner on Jun 28, 2021. It is now read-only.

Commit 37027d2

Browse files
committed
delimiter: accept multiple values
1 parent fb3cc3c commit 37027d2

File tree

3 files changed

+50
-21
lines changed

3 files changed

+50
-21
lines changed

CHANGELOG.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,11 @@
1010
* promise: new API module
1111
* errors: finish normalisation of all errors
1212

13+
## Trunk
14+
15+
New Feature:
16+
* delimiter: accept multiple values
17+
1318
## Version 4.8.9
1419

1520
Fix:

lib/es5/index.js

Lines changed: 32 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -147,14 +147,28 @@ var Parser = /*#__PURE__*/function (_Transform) {
147147
} // Normalize option `delimiter`
148148

149149

150-
if (options.delimiter === undefined || options.delimiter === null || options.delimiter === false) {
151-
options.delimiter = Buffer.from(',');
152-
} else if (typeof options.delimiter === 'string' && options.delimiter.length !== 0) {
153-
options.delimiter = Buffer.from(options.delimiter);
154-
} else if (Buffer.isBuffer(options.delimiter) && options.delimiter.length === 0 || typeof options.delimiter === 'string' && options.delimiter.length === 0 || !Buffer.isBuffer(options.delimiter) && typeof options.delimiter !== 'string') {
155-
throw new CsvError('CSV_INVALID_OPTION_DELIMITER', ['Invalid option delimiter:', 'delimiter must be a non empty string or buffer,', "got ".concat(JSON.stringify(options.delimiter))]);
156-
} // Normalize option `escape`
150+
var delimiter_json = JSON.stringify(options.delimiter);
151+
if (!Array.isArray(options.delimiter)) options.delimiter = [options.delimiter];
157152

153+
if (options.delimiter.length === 0) {
154+
throw new CsvError('CSV_INVALID_OPTION_DELIMITER', ['Invalid option delimiter:', 'delimiter must be a non empty string or buffer or array of string|buffer,', "got ".concat(delimiter_json)]);
155+
}
156+
157+
options.delimiter = options.delimiter.map(function (delimiter) {
158+
if (delimiter === undefined || delimiter === null || delimiter === false) {
159+
return Buffer.from(',');
160+
}
161+
162+
if (typeof delimiter === 'string') {
163+
delimiter = Buffer.from(delimiter);
164+
}
165+
166+
if (!Buffer.isBuffer(delimiter) || delimiter.length === 0) {
167+
throw new CsvError('CSV_INVALID_OPTION_DELIMITER', ['Invalid option delimiter:', 'delimiter must be a non empty string or buffer or array of string|buffer,', "got ".concat(delimiter_json)]);
168+
}
169+
170+
return delimiter;
171+
}); // Normalize option `escape`
158172

159173
if (options.escape === undefined || options.escape === null) {
160174
options.escape = Buffer.from('"');
@@ -1118,14 +1132,20 @@ var Parser = /*#__PURE__*/function (_Transform) {
11181132
key: "__isDelimiter",
11191133
value: function __isDelimiter(chr, buf, pos) {
11201134
var delimiter = this.options.delimiter;
1121-
var delLength = delimiter.length;
1122-
if (delimiter[0] !== chr) return 0;
11231135

1124-
for (var i = 1; i < delLength; i++) {
1125-
if (delimiter[i] !== buf[pos + i]) return 0;
1136+
loop1: for (var i = 0; i < delimiter.length; i++) {
1137+
var del = delimiter[i];
1138+
1139+
if (del[0] === chr) {
1140+
for (var j = 1; j < del.length; j++) {
1141+
if (del[j] !== buf[pos + j]) continue loop1;
1142+
}
1143+
1144+
return del.length;
1145+
}
11261146
}
11271147

1128-
return delimiter.length;
1148+
return 0;
11291149
}
11301150
}, {
11311151
key: "__isRecordDelimiter",

lib/index.js

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -104,17 +104,21 @@ class Parser extends Transform {
104104
`got ${delimiter_json}`
105105
])
106106
}
107-
options.delimiter = options.delimiter.map(function(del){
108-
if(del === undefined || del === null || del === false){
107+
options.delimiter = options.delimiter.map(function(delimiter){
108+
if(delimiter === undefined || delimiter === null || delimiter === false){
109109
return Buffer.from(',')
110-
}else if((typeof del === 'string' || Buffer.isBuffer(del)) && del.length !== 0){
111-
return Buffer.from(del)
112110
}
113-
throw new CsvError('CSV_INVALID_OPTION_DELIMITER', [
114-
'Invalid option delimiter:',
115-
'delimiter must be a non empty string or buffer or array of string|buffer,',
116-
`got ${delimiter_json}`
117-
])
111+
if(typeof delimiter === 'string'){
112+
delimiter = Buffer.from(delimiter)
113+
}
114+
if( !Buffer.isBuffer(delimiter) || delimiter.length === 0){
115+
throw new CsvError('CSV_INVALID_OPTION_DELIMITER', [
116+
'Invalid option delimiter:',
117+
'delimiter must be a non empty string or buffer or array of string|buffer,',
118+
`got ${delimiter_json}`
119+
])
120+
}
121+
return delimiter
118122
})
119123
// Normalize option `escape`
120124
if(options.escape === undefined || options.escape === null){

0 commit comments

Comments
 (0)