Comments (5)
+1
from cli.
Could it be more intuitive to provide it as follows on cli: -a ["foo","bar"]
, try to detect the enclosing brackets and JSON.parse
the whole token...
Maybe we have to escape the paranthesis.
from cli.
you would then have no matches error on Bash/Zsh.
A better solution would be -a arg1,arg2,"long arg"
from cli.
Pls check out this small piece of code (index.js):
#!/usr/bin/env node
'use strict';
var cli = require('cli');
var path = require('path');
var assert = require('assert');
var usage = path.basename(__filename) + ' [OPTIONS]';
var packagePath = __dirname + '/package.json';
var options = {
a: [ 'a', 'The a', 'string', '[]' ], // of course, there needs to be the native support for Array here later!
b: [ 'b', 'The a', 'string', 'b' ]
};
function main(args, options) {
cli.info(JSON.stringify(options, null, 4));
options.a = JSON.parse(options.a);
cli.info(JSON.stringify(options, null, 4));
assert(Array.isArray(options.a), 'options.a should be array');
}
cli.setUsage(usage);
cli.setApp(packagePath);
cli.parse(options);
cli.main(main);
When I call it like this:
$ ./index.js -a "[\"foo bar\", {\"foo\": 4}]" -b testb
or even unescaped double quotes:
$ ./index.js -a '["foo bar", {"foo": 4}]' -b testb
it prints:
INFO: UNPARSED: {
"a": "[\"foo bar\", {\"foo\": 4}]",
"b": "testb"
}
INFO: ARRAY PARSED: {
"a": [
"foo bar",
{
"foo": 4
}
],
"b": "testb"
}
At least, couldn't that be a starting point to implement in cli? Or am I missing something here...?
BTW, I tried that on Zsh.
from cli.
@coolaj86 Good requirement! I have supported such idea in package commandos with MULTIPLE decorator:
const commandos = require('commandos');
const options0 = commandos.parse('test -a foo', { options: [ '-a MULTIPLE' ] });
// options0 := { $: [] }
const options1 = commandos.parse('test -a foo', { options: [ '-a MULTIPLE' ] });
// options1 := { a: [ 'foo' ], $: [] }
const options2 = commandos.parse('test -a foo -b bar', { options: [ '-a MULTIPLE' ] });
// options2 := { a: [ 'foo', 'bar'], $: [] }
The returned options
will have or not a property named a
. If it has, the property will be an array no matter how many -a <value>
set in CLI.
from cli.
Related Issues (20)
- Undeclared variables in cli.getUsage
- Bug: This eats preceeding zeroes when the input is a string HOT 1
- package breaks in webpack bundle
- Typescript support and tests
- Help on individual options
- Clarify option type in docs
- Is there a way to create 'separator' in the `--help` output?
- Options & Commands HOT 1
- URL not allowing all URLs HOT 1
- Help doesn't work
- [security] Insecure usage of temporary files. HOT 8
- Update to latest version of `glob` HOT 3
- Similar to tj/commander HOT 2
- Provide a way to suppress param data type being output on --help
- Option as string starting with zero is converted to number HOT 1
- please update to glob 7.1.1
- The exit dependency is not needed anymore
- glob is not be used
- options parse, HOT 1
- Options per a command HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from cli.