Skip to content

Commit 08c0117

Browse files
laggingreflexbcoe
authored andcommitted
feat: also add camelCase array options (#125)
1 parent 2bc395f commit 08c0117

File tree

3 files changed

+42
-1
lines changed

3 files changed

+42
-1
lines changed

index.js

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
var camelCase = require('camelcase')
2+
var decamelize = require('decamelize')
23
var path = require('path')
34
var tokenizeArgString = require('./lib/tokenize-arg-string')
45
var util = require('util')
@@ -674,6 +675,16 @@ function parse (args, opts) {
674675
}
675676
}
676677
})
678+
// For "--optionName", also set argv['option-name']
679+
flags.aliases[key].concat(key).forEach(function (x) {
680+
if (/[A-Z]/.test(x) && configuration['camel-case-expansion']) {
681+
var c = decamelize(x, '-')
682+
if (c !== key && flags.aliases[key].indexOf(c) === -1) {
683+
flags.aliases[key].push(c)
684+
newAliases[c] = true
685+
}
686+
}
687+
})
677688
flags.aliases[key].forEach(function (x) {
678689
flags.aliases[x] = [key].concat(flags.aliases[key].filter(function (y) {
679690
return x !== y

package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,8 @@
3434
"standard-version": "^4.3.0"
3535
},
3636
"dependencies": {
37-
"camelcase": "^4.1.0"
37+
"camelcase": "^4.1.0",
38+
"decamelize": "^2.0.0"
3839
},
3940
"files": [
4041
"lib",

test/yargs-parser.js

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1529,6 +1529,35 @@ describe('yargs-parser', function () {
15291529
var result = parser(['-x', 'val1', '-x', 'val1'])
15301530
result.should.have.property('x').that.is.an('array').and.to.deep.equal(['val1', 'val1'])
15311531
})
1532+
1533+
it('should eat camelCase switch with camelCase array option', function () {
1534+
var result = parser(['--someOption', '1', '2'], {
1535+
array: ['someOption']
1536+
})
1537+
Array.isArray(result.someOption).should.equal(true)
1538+
result.someOption.should.deep.equal([1, 2])
1539+
})
1540+
it('should eat hyphenated switch with hyphenated array option', function () {
1541+
var result = parser(['--some-option', '1', '2'], {
1542+
array: ['some-option']
1543+
})
1544+
Array.isArray(result['some-option']).should.equal(true)
1545+
result['some-option'].should.deep.equal([1, 2])
1546+
})
1547+
it('should eat camelCase switch with hyphenated array option', function () {
1548+
var result = parser(['--someOption', '1', '2'], {
1549+
array: ['some-option']
1550+
})
1551+
Array.isArray(result['some-option']).should.equal(true)
1552+
result['some-option'].should.deep.equal([1, 2])
1553+
})
1554+
it('should eat hyphenated switch with camelCase array option', function () {
1555+
var result = parser(['--some-option', '1', '2'], {
1556+
array: ['someOption']
1557+
})
1558+
Array.isArray(result['someOption']).should.equal(true)
1559+
result['someOption'].should.deep.equal([1, 2])
1560+
})
15321561
})
15331562

15341563
describe('nargs', function () {

0 commit comments

Comments
 (0)