From 3602ceeeda49119bc91aaff8e37d13f972a6dfdf Mon Sep 17 00:00:00 2001 From: David Worms Date: Sun, 30 Dec 2018 19:35:41 +0100 Subject: [PATCH] from_line: validation refinements --- CHANGELOG.md | 1 + lib/index.js | 14 +++++++++++--- test/option.from_line.coffee | 21 +++++++++++++++++++++ 3 files changed, 33 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9665e94..83765b8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,7 @@ New features: Minor enhancements: +* from_line: validation refinements * objname: validation refinements * from: validation refinements * escape: validation refinements diff --git a/lib/index.js b/lib/index.js index 7873924..e0fb358 100644 --- a/lib/index.js +++ b/lib/index.js @@ -10,8 +10,6 @@ const { Transform } = require('stream') const ResizeableBuffer = require('./ResizeableBuffer') const default_options = { - from_line: 1, - // TODO create a max_comment_size to_line: -1, to: -1, trim: false @@ -121,6 +119,16 @@ class Parser extends Transform { }else{ throw new Error(`Invalid Option: from must be a positive integer, got ${JSON.stringify(options.from)}`) } + // Normalize option `from_line` + if(options.from_line === undefined || options.from_line === null){ + options.from_line = 1 + }else if(Number.isInteger(options.from_line) && options.from_line > 0){ + // Great, nothing to do + }else if(typeof options.from_line === 'string' && /\d+/.test(options.from_line)){ + options.from_line = parseInt(options.from_line) + }else{ + throw new Error(`Invalid Option: from_line must be a positive integer greater than 0, got ${JSON.stringify(options.from_line)}`) + } // Normalize option `info` if(options.info === undefined || options.info === null || options.info === false){ options.info = false @@ -128,7 +136,7 @@ class Parser extends Transform { throw new Error(`Invalid Option: info must be true, got ${JSON.stringify(options.info)}`) } // Normalize option `max_record_size` - if(options.max_record_size === undefined || options.raw === null || options.raw === false){ + if(options.max_record_size === undefined || options.max_record_size === null || options.max_record_size === false){ options.max_record_size = 0 }else if(Number.isInteger(options.max_record_size) && options.max_record_size >= 0){ // Great, nothing to do diff --git a/test/option.from_line.coffee b/test/option.from_line.coffee index 3ca3c75..0484ad8 100644 --- a/test/option.from_line.coffee +++ b/test/option.from_line.coffee @@ -2,6 +2,27 @@ parse = require '../lib' describe 'Option `from_line`', -> + + it 'validation', -> + parse '', from_line: 10, (->) + parse '', from_line: "10", (->) + parse '', from_line: null, (->) + parse '', from_line: undefined, (->) + (-> + parse '', from_line: -1, (->) + ).should.throw 'Invalid Option: from_line must be a positive integer greater than 0, got -1' + (-> + parse '', from_line: 0, (->) + ).should.throw 'Invalid Option: from_line must be a positive integer greater than 0, got 0' + (-> + parse '', from_line: true, (->) + ).should.throw 'Invalid Option: from_line must be a positive integer greater than 0, got true' + (-> + parse '', from_line: false, (->) + ).should.throw 'Invalid Option: from_line must be a positive integer greater than 0, got false' + (-> + parse '', from_line: 'oh no', (->) + ).should.throw 'Invalid Option: from_line must be a positive integer greater than 0, got "oh no"' it 'start at defined position', (next) -> parse """