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

Commit

Permalink
delimiter: validation refinements
Browse files Browse the repository at this point in the history
  • Loading branch information
wdavidw committed Dec 28, 2018
1 parent 42d3cbd commit d80ac7d
Show file tree
Hide file tree
Showing 4 changed files with 42 additions and 9 deletions.
3 changes: 2 additions & 1 deletion CHANGELOG.md
Expand Up @@ -5,7 +5,8 @@

Enhancements:

* max_record_size: validation refinement
* delimiter: validation refinements
* max_record_size: validation refinements

## Version 4.2.0

Expand Down
18 changes: 14 additions & 4 deletions lib/es5/index.js
Expand Up @@ -50,14 +50,11 @@ var _require = require('stream'),
var ResizeableBuffer = require('./ResizeableBuffer');

var default_options = {
columns: null,
delimiter: Buffer.from(','),
escape: Buffer.from('"'),
from: 1,
from_line: 1,
objname: undefined,
// TODO create a max_comment_size
// max_record_size: 0,
relax: false,
relax_column_count: false,
skip_empty_lines: false,
Expand Down Expand Up @@ -154,8 +151,21 @@ function (_Transform) {
} // Normalize option `delimiter`


if (typeof options.delimiter === 'string') {
if (options.delimiter === undefined || options.delimiter === null || options.delimiter === false) {
options.delimiter = Buffer.from(',');
} else if (Buffer.isBuffer(options.delimiter)) {
if (options.delimiter.length === 0) {
throw new Error("Invalid Option: delimiter must be a non empty buffer");
} // Great, nothing to do

} else if (typeof options.delimiter === 'string') {
if (options.delimiter.length === 0) {
throw new Error("Invalid Option: delimiter must be a non empty string");
}

options.delimiter = Buffer.from(options.delimiter);
} else {
throw new Error("Invalid Option: delimiter must be a string or a buffer, got ".concat(options.delimiter));
} // Normalize option `escape`


Expand Down
17 changes: 13 additions & 4 deletions lib/index.js
Expand Up @@ -10,14 +10,11 @@ const { Transform } = require('stream')
const ResizeableBuffer = require('./ResizeableBuffer')

const default_options = {
columns: null,
delimiter: Buffer.from(','),
escape: Buffer.from('"'),
from: 1,
from_line: 1,
objname: undefined,
// TODO create a max_comment_size
// max_record_size: 0,
relax: false,
relax_column_count: false,
skip_empty_lines: false,
Expand Down Expand Up @@ -94,8 +91,20 @@ class Parser extends Transform {
}
}
// Normalize option `delimiter`
if(typeof options.delimiter === 'string'){
if(options.delimiter === undefined || options.delimiter === null || options.delimiter === false){
options.delimiter = Buffer.from(',')
}else if(Buffer.isBuffer(options.delimiter)){
if(options.delimiter.length === 0){
throw new Error(`Invalid Option: delimiter must be a non empty buffer`)
}
// Great, nothing to do
}else if(typeof options.delimiter === 'string'){
if(options.delimiter.length === 0){
throw new Error(`Invalid Option: delimiter must be a non empty string`)
}
options.delimiter = Buffer.from(options.delimiter)
}else{
throw new Error(`Invalid Option: delimiter must be a string or a buffer, got ${options.delimiter}`)
}
// Normalize option `escape`
if(typeof options.escape === 'string'){
Expand Down
13 changes: 13 additions & 0 deletions test/option.delimiter.coffee
Expand Up @@ -3,6 +3,19 @@ parse = require '../lib'

describe 'Option `delimiter`', ->

it 'validation', ->
parse '', delimiter: ',', (->)
parse '', delimiter: Buffer.from(','), (->)
(->
parse '', delimiter: '', (->)
).should.throw 'Invalid Option: delimiter must be a non empty string'
(->
parse '', delimiter: Buffer.from(''), (->)
).should.throw 'Invalid Option: delimiter must be a non empty buffer'
(->
parse '', delimiter: true, (->)
).should.throw 'Invalid Option: delimiter must be a string or a buffer, got true'

it 'using default comma', (next) ->
parse """
abc,,123,
Expand Down

0 comments on commit d80ac7d

Please sign in to comment.