Comparing version 15.2.1 to 15.3.0
{ | ||
"name": "sergeant", | ||
"version": "15.2.1", | ||
"version": "15.3.0", | ||
"description": "", | ||
@@ -24,3 +24,3 @@ "main": "main.js", | ||
"nyc": "^10.0.0", | ||
"standard": "^9.0.0", | ||
"standard": "^10.0.0", | ||
"tape": "^4.6.0" | ||
@@ -27,0 +27,0 @@ }, |
16
parse.js
@@ -133,4 +133,5 @@ const chalk = require('chalk') | ||
const parameterKeys = Object.keys(definitions).filter((key) => Number.isInteger(Number(key))) | ||
const hasMultiple = parameterKeys.filter((key) => definitions[key].multiple).length > 0 | ||
if (remainder.length > parameterKeys.length) { | ||
if (!hasMultiple && remainder.length > parameterKeys.length) { | ||
throw new Error('too many arguments') | ||
@@ -141,4 +142,5 @@ } | ||
const definition = definitions[key] | ||
const remainingKeys = parameterKeys.length - 1 - key | ||
if (remainder[key] == null) { | ||
if (!remainder.length) { | ||
if (definition.default != null) { | ||
@@ -151,6 +153,12 @@ args[definition.property] = definition.default | ||
} | ||
} else if (definition.multiple === true) { | ||
args[definition.property] = remainder.splice(0, remainder.length - remainingKeys) | ||
if (definition.type) { | ||
args[definition.property] = args[definition.property].map((v) => definition.type(v)) | ||
} | ||
} else if (definition.type) { | ||
args[definition.property] = definition.type(remainder[key]) | ||
args[definition.property] = definition.type(remainder.shift()) | ||
} else { | ||
args[definition.property] = remainder[key] | ||
args[definition.property] = remainder.shift() | ||
} | ||
@@ -157,0 +165,0 @@ }) |
52
test.js
@@ -13,3 +13,3 @@ const test = require('tape') | ||
t.plan(12) | ||
t.plan(15) | ||
@@ -109,2 +109,52 @@ // test dashdash and parameter | ||
}), {'0': 'testing', '1': 'yes'}) | ||
// test multiple param beginning | ||
t.deepEquals(parse(['1', '2', '3', '4', '5', '6', '7', '8', '9'], { | ||
'0': { | ||
type: Number, | ||
key: 'test0', | ||
multiple: true | ||
}, | ||
'1': { | ||
type: Number, | ||
key: 'test1' | ||
}, | ||
'2': { | ||
type: Number, | ||
key: 'test2' | ||
} | ||
}), {'test0': [1, 2, 3, 4, 5, 6, 7], 'test1': 8, 'test2': 9}) | ||
// test multiple param middle. No type | ||
t.deepEquals(parse(['1', '2', '3', '4', '5', '6', '7', '8', '9'], { | ||
'0': { | ||
type: Number, | ||
key: 'test0' | ||
}, | ||
'1': { | ||
key: 'test1', | ||
multiple: true | ||
}, | ||
'2': { | ||
type: Number, | ||
key: 'test2' | ||
} | ||
}), {'test0': 1, 'test1': ['2', '3', '4', '5', '6', '7', '8'], 'test2': 9}) | ||
// test multiple param end | ||
t.deepEquals(parse(['1', '2', '3', '4', '5', '6', '7', '8', '9'], { | ||
'0': { | ||
type: Number, | ||
key: 'test0' | ||
}, | ||
'1': { | ||
type: Number, | ||
key: 'test1' | ||
}, | ||
'2': { | ||
type: Number, | ||
key: 'test2', | ||
multiple: true | ||
} | ||
}), {'test0': 1, 'test1': 2, 'test2': [3, 4, 5, 6, 7, 8, 9]}) | ||
}) | ||
@@ -111,0 +161,0 @@ |
24986
771