[Pkg-javascript-commits] [node-commander] 01/05: New upstream version 2.12.2
Jérémy Lal
kapouer at moszumanska.debian.org
Fri Dec 29 23:20:40 UTC 2017
This is an automated email from the git hooks/post-receive script.
kapouer pushed a commit to branch master
in repository node-commander.
commit d0b894ebe29b9c5a5349e3309bd80a3a40ed4367
Author: Jérémy Lal <kapouer at melix.org>
Date: Sat Dec 30 00:15:15 2017 +0100
New upstream version 2.12.2
---
History.md => CHANGELOG.md | 28 ++++
Readme.md | 25 ++-
Readme_zh-CN.md | 2 +-
index.js | 35 ++++-
package-lock.json | 154 ++++++++++++------
package.json | 21 ++-
test/test.command.failOnSameAlias.js | 14 ++
test/test.command.nohelp.js | 12 +-
tsconfig.json | 20 +++
typings/commander-tests.ts | 99 ++++++++++++
typings/index.d.ts | 295 +++++++++++++++++++++++++++++++++++
11 files changed, 635 insertions(+), 70 deletions(-)
diff --git a/History.md b/CHANGELOG.md
similarity index 90%
rename from History.md
rename to CHANGELOG.md
index d60418e..e558132 100644
--- a/History.md
+++ b/CHANGELOG.md
@@ -1,4 +1,32 @@
+2.12.2 / 2017-11-28
+==================
+
+ * fix: typings are not shipped
+
+2.12.1 / 2017-11-23
+==================
+
+ * Move @types/node to dev dependency
+
+2.12.0 / 2017-11-22
+==================
+
+ * add attributeName() method to Option objects
+ * Documentation updated for options with --no prefix
+ * typings: `outputHelp` takes a string as the first parameter
+ * typings: use overloads
+ * feat(typings): update to match js api
+ * Print default value in option help
+ * Fix translation error
+ * Fail when using same command and alias (#491)
+ * feat(typings): add help callback
+ * fix bug when description is add after command with options (#662)
+ * Format js code
+ * Rename History.md to CHANGELOG.md (#668)
+ * feat(typings): add typings to support TypeScript (#646)
+ * use current node
+
2.11.0 / 2017-07-03
==================
diff --git a/Readme.md b/Readme.md
index 3135a94..acd31c6 100644
--- a/Readme.md
+++ b/Readme.md
@@ -44,6 +44,25 @@ console.log(' - %s cheese', program.cheese);
Short flags may be passed as a single arg, for example `-abc` is equivalent to `-a -b -c`. Multi-word options such as "--template-engine" are camel-cased, becoming `program.templateEngine` etc.
+Note that multi-word options starting with `--no` prefix negate the boolean value of the following word. For example, `--no-sauce` sets the value of `program.sauce` to false.
+
+```js
+#!/usr/bin/env node
+
+/**
+ * Module dependencies.
+ */
+
+var program = require('commander');
+
+program
+ .option('--no-sauce', 'Remove sauce')
+ .parse(process.argv);
+
+console.log('you ordered a pizza');
+if (program.sauce) console.log(' with sauce');
+else console.log(' without sauce');
+```
## Coercion
@@ -285,9 +304,9 @@ program
.command('getstream [url]', 'get stream URL')
.parse(process.argv);
- if (!process.argv.slice(2).length) {
- program.outputHelp(make_red);
- }
+if (!process.argv.slice(2).length) {
+ program.outputHelp(make_red);
+}
function make_red(txt) {
return colors.red(txt); //display the help text in red on the console
diff --git a/Readme_zh-CN.md b/Readme_zh-CN.md
index f1f1efd..87c3a87 100644
--- a/Readme_zh-CN.md
+++ b/Readme_zh-CN.md
@@ -15,7 +15,7 @@
$ npm install commander
## 参数解析
- `.option()` 方法用来定义带选项的 commander,同时也作为这些选项的文档。下面的例子会解析来自 `progress.argv` 指定的参数和选项,没有匹配任何选项的参数将会放到 `program.args` 数组中。
+ `.option()` 方法用来定义带选项的 commander,同时也作为这些选项的文档。下面的例子会解析来自 `process.argv` 指定的参数和选项,没有匹配任何选项的参数将会放到 `program.args` 数组中。
```js
#!/usr/bin/env node
diff --git a/index.js b/index.js
index d5dbe18..cb82f55 100644
--- a/index.js
+++ b/index.js
@@ -60,6 +60,18 @@ Option.prototype.name = function() {
};
/**
+ * Return option name, in a camelcase format that can be used
+ * as a object attribute key.
+ *
+ * @return {String}
+ * @api private
+ */
+
+Option.prototype.attributeName = function() {
+ return camelcase( this.name() );
+};
+
+/**
* Check if `arg` matches the short or long flag.
*
* @param {String} arg
@@ -155,6 +167,10 @@ Command.prototype.__proto__ = EventEmitter.prototype;
*/
Command.prototype.command = function(name, desc, opts) {
+ if(typeof desc === 'object' && desc !== null){
+ opts = desc;
+ desc = null;
+ }
opts = opts || {};
var args = name.split(/ +/);
var cmd = new Command(args.shift());
@@ -165,7 +181,6 @@ Command.prototype.command = function(name, desc, opts) {
this._execs[cmd._name] = true;
if (opts.isDefault) this.defaultExecutable = cmd._name;
}
-
cmd._noHelp = !!opts.noHelp;
this.commands.push(cmd);
cmd.parseExpectedArgs(args);
@@ -359,7 +374,7 @@ Command.prototype.option = function(flags, description, fn, defaultValue) {
var self = this
, option = new Option(flags, description)
, oname = option.name()
- , name = camelcase(oname);
+ , name = option.attributeName();
// default as 3rd arg
if (typeof fn != 'function') {
@@ -381,7 +396,10 @@ Command.prototype.option = function(flags, description, fn, defaultValue) {
// when --no-* we make sure default is true
if (false == option.bool) defaultValue = true;
// preassign only if we have a default
- if (undefined !== defaultValue) self[name] = defaultValue;
+ if (undefined !== defaultValue) {
+ self[name] = defaultValue;
+ option.defaultValue = defaultValue;
+ }
}
// register the option
@@ -541,7 +559,7 @@ Command.prototype.executeSubCommand = function(argv, args, unknown) {
// add executable arguments to spawn
args = (process.execArgv || []).concat(args);
- proc = spawn('node', args, { stdio: 'inherit', customFds: [0, 1, 2] });
+ proc = spawn(process.argv[0], args, { stdio: 'inherit', customFds: [0, 1, 2] });
} else {
proc = spawn(bin, args, { stdio: 'inherit', customFds: [0, 1, 2] });
}
@@ -755,7 +773,7 @@ Command.prototype.opts = function() {
, len = this.options.length;
for (var i = 0 ; i < len; i++) {
- var key = camelcase(this.options[i].name());
+ var key = this.options[i].attributeName();
result[key] = key === 'version' ? this._version : this[key];
}
return result;
@@ -877,6 +895,8 @@ Command.prototype.alias = function(alias) {
if (arguments.length === 0) return command._alias;
+ if (alias === command._name) throw new Error('Command alias can\'t be the same as its name');
+
command._alias = alias;
return this;
};
@@ -943,8 +963,9 @@ Command.prototype.optionHelp = function() {
// Append the help information
return this.options.map(function(option) {
- return pad(option.flags, width) + ' ' + option.description;
- }).concat([pad('-h, --help', width) + ' ' + 'output usage information'])
+ return pad(option.flags, width) + ' ' + option.description
+ + (option.defaultValue !== undefined ? ' (default: ' + option.defaultValue + ')' : '');
+ }).concat([pad('-h, --help', width) + ' ' + 'output usage information'])
.join('\n');
};
diff --git a/package-lock.json b/package-lock.json
index 5924df1..d9f0ea0 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,41 +1,13 @@
{
"name": "commander",
- "version": "2.10.0",
+ "version": "2.12.2",
"lockfileVersion": 1,
+ "requires": true,
"dependencies": {
- "diff": {
- "version": "https://registry.npmjs.org/diff/-/diff-3.2.0.tgz",
- "integrity": "sha1-yc45Okt8vQsFinJck98pkCeGj/k=",
- "dev": true
- },
- "formatio": {
- "version": "https://registry.npmjs.org/formatio/-/formatio-1.2.0.tgz",
- "integrity": "sha1-87IWfZBoxGmKjVH092CjmlTYGOs=",
- "dev": true
- },
- "isarray": {
- "version": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
- "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
- "dev": true
- },
- "lolex": {
- "version": "https://registry.npmjs.org/lolex/-/lolex-1.6.0.tgz",
- "integrity": "sha1-OpoCg0UqR9dDnnJzG54H1zhuSfY=",
- "dev": true
- },
- "native-promise-only": {
- "version": "https://registry.npmjs.org/native-promise-only/-/native-promise-only-0.8.1.tgz",
- "integrity": "sha1-IKMYwwy0X3H+et+/eyHJnBRy7xE=",
- "dev": true
- },
- "path-to-regexp": {
- "version": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.7.0.tgz",
- "integrity": "sha1-Wf3g9DW62suhA6hOnTvGTpa5k30=",
- "dev": true
- },
- "samsam": {
- "version": "https://registry.npmjs.org/samsam/-/samsam-1.2.1.tgz",
- "integrity": "sha1-7dOQk6MYQ3DLhZJDsr3yVefY6mc=",
+ "@types/node": {
+ "version": "7.0.48",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-7.0.48.tgz",
+ "integrity": "sha512-LLlXafM3BD52MH056tHxTXO8JFCnpJJQkdzIU3+m8ew+CXJY/5zIXgDNb4TK/QFvlI8QexLS5tL+sE0Qhegr1w==",
"dev": true
},
"should": {
@@ -43,18 +15,32 @@
"resolved": "https://registry.npmjs.org/should/-/should-11.2.1.tgz",
"integrity": "sha1-kPVRRVUtAc/CAGZuToGKHJZw7aI=",
"dev": true,
+ "requires": {
+ "should-equal": "1.0.1",
+ "should-format": "3.0.3",
+ "should-type": "1.4.0",
+ "should-type-adaptors": "1.0.1",
+ "should-util": "1.0.0"
+ },
"dependencies": {
"should-equal": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/should-equal/-/should-equal-1.0.1.tgz",
"integrity": "sha1-C26VFvJgGp+wuy3MNpr6HH4gCvc=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "should-type": "1.4.0"
+ }
},
"should-format": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/should-format/-/should-format-3.0.3.tgz",
"integrity": "sha1-m/yPdPo5IFxT04w01xcwPidxJPE=",
- "dev": true
+ "dev": true,
+ "requires": {
+ "should-type": "1.4.0",
+ "should-type-adaptors": "1.0.1"
+ }
},
"should-type": {
"version": "1.4.0",
@@ -69,6 +55,10 @@
"resolved": "https://registry.npmjs.org/should-type-adaptors/-/should-type-adaptors-1.0.1.tgz",
"integrity": "sha1-7+VVPN9oz/ZuXF9RtxLcNRx3vqo=",
"dev": true,
+ "requires": {
+ "should-type": "1.4.0",
+ "should-util": "1.0.0"
+ },
"dependencies": {
"should-type": {
"version": "1.4.0",
@@ -85,19 +75,87 @@
"dev": true
},
"sinon": {
- "version": "2.3.5",
- "resolved": "https://registry.npmjs.org/sinon/-/sinon-2.3.5.tgz",
- "integrity": "sha1-mi/A/41SbacW8wlTqixl1RiRf2w=",
- "dev": true
- },
- "text-encoding": {
- "version": "https://registry.npmjs.org/text-encoding/-/text-encoding-0.6.4.tgz",
- "integrity": "sha1-45mpgiV6J22uQou5KEXLcb3CbRk=",
- "dev": true
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/sinon/-/sinon-2.4.1.tgz",
+ "integrity": "sha512-vFTrO9Wt0ECffDYIPSP/E5bBugt0UjcBQOfQUMh66xzkyPEnhl/vM2LRZi2ajuTdkH07sA6DzrM6KvdvGIH8xw==",
+ "dev": true,
+ "requires": {
+ "diff": "3.4.0",
+ "formatio": "1.2.0",
+ "lolex": "1.6.0",
+ "native-promise-only": "0.8.1",
+ "path-to-regexp": "1.7.0",
+ "samsam": "1.3.0",
+ "text-encoding": "0.6.4",
+ "type-detect": "4.0.5"
+ },
+ "dependencies": {
+ "diff": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/diff/-/diff-3.4.0.tgz",
+ "integrity": "sha512-QpVuMTEoJMF7cKzi6bvWhRulU1fZqZnvyVQgNhPaxxuTYwyjn/j1v9falseQ/uXWwPnO56RBfwtg4h/EQXmucA==",
+ "dev": true
+ },
+ "formatio": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/formatio/-/formatio-1.2.0.tgz",
+ "integrity": "sha1-87IWfZBoxGmKjVH092CjmlTYGOs=",
+ "dev": true,
+ "requires": {
+ "samsam": "1.3.0"
+ }
+ },
+ "isarray": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+ "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
+ "dev": true
+ },
+ "lolex": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/lolex/-/lolex-1.6.0.tgz",
+ "integrity": "sha1-OpoCg0UqR9dDnnJzG54H1zhuSfY=",
+ "dev": true
+ },
+ "native-promise-only": {
+ "version": "0.8.1",
+ "resolved": "https://registry.npmjs.org/native-promise-only/-/native-promise-only-0.8.1.tgz",
+ "integrity": "sha1-IKMYwwy0X3H+et+/eyHJnBRy7xE=",
+ "dev": true
+ },
+ "path-to-regexp": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.7.0.tgz",
+ "integrity": "sha1-Wf3g9DW62suhA6hOnTvGTpa5k30=",
+ "dev": true,
+ "requires": {
+ "isarray": "0.0.1"
+ }
+ },
+ "samsam": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/samsam/-/samsam-1.3.0.tgz",
+ "integrity": "sha512-1HwIYD/8UlOtFS3QO3w7ey+SdSDFE4HRNLZoZRYVQefrOY3l17epswImeB1ijgJFQJodIaHcwkp3r/myBjFVbg==",
+ "dev": true
+ },
+ "text-encoding": {
+ "version": "0.6.4",
+ "resolved": "https://registry.npmjs.org/text-encoding/-/text-encoding-0.6.4.tgz",
+ "integrity": "sha1-45mpgiV6J22uQou5KEXLcb3CbRk=",
+ "dev": true
+ },
+ "type-detect": {
+ "version": "4.0.5",
+ "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.5.tgz",
+ "integrity": "sha512-N9IvkQslUGYGC24RkJk1ba99foK6TkwC2FHAEBlQFBP0RxQZS8ZpJuAZcwiY/w9ZJHFQb1aOXBI60OdxhTrwEQ==",
+ "dev": true
+ }
+ }
},
- "type-detect": {
- "version": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.0.tgz",
- "integrity": "sha1-YgU4g1QqMh8veyV0bcaWR4sY/2s=",
+ "typescript": {
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.6.2.tgz",
+ "integrity": "sha1-PFtv1/beCRQmkCfwPAlGdY92c6Q=",
"dev": true
}
}
diff --git a/package.json b/package.json
index 708f223..04b3c69 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "commander",
- "version": "2.11.0",
+ "version": "2.12.2",
"description": "the complete solution for node.js command-line programs",
"keywords": [
"commander",
@@ -14,16 +14,21 @@
"type": "git",
"url": "https://github.com/tj/commander.js.git"
},
- "devDependencies": {
- "should": "^11.2.1",
- "sinon": "^2.3.5"
- },
"scripts": {
- "test": "make test"
+ "test": "make test && npm run test-typings",
+ "test-typings": "node_modules/typescript/bin/tsc -p tsconfig.json"
},
"main": "index",
"files": [
- "index.js"
+ "index.js",
+ "typings/index.d.ts"
],
- "dependencies": {}
+ "dependencies": {},
+ "devDependencies": {
+ "@types/node": "^7.0.48",
+ "should": "^11.2.1",
+ "sinon": "^2.4.1",
+ "typescript": "^2.6.2"
+ },
+ "typings": "typings/index.d.ts"
}
diff --git a/test/test.command.failOnSameAlias.js b/test/test.command.failOnSameAlias.js
new file mode 100644
index 0000000..6b75276
--- /dev/null
+++ b/test/test.command.failOnSameAlias.js
@@ -0,0 +1,14 @@
+var program = require('../')
+ , should = require('should');
+
+var error;
+
+try {
+ program
+ .command('fail')
+ .alias('fail');
+} catch (e) {
+ error = e;
+}
+
+error.should.deepEqual(new Error('Command alias can\'t be the same as its name'));
diff --git a/test/test.command.nohelp.js b/test/test.command.nohelp.js
index e8f3d27..247d675 100644
--- a/test/test.command.nohelp.js
+++ b/test/test.command.nohelp.js
@@ -17,19 +17,25 @@ program
.command('hideagain [options]', null, { noHelp: true })
.action(function() { return; });
+program.command('hiddencommandwithoutdescription [options]', { noHelp: true });
+
program.parse(['node', 'test']);
-program.name.should.be.a.Function;
+program.name.should.be.a.Function();
program.name().should.equal('test');
program.commands[0].name().should.equal('mycommand');
program.commands[0]._noHelp.should.be.false();
program.commands[1].name().should.equal('anothercommand');
program.commands[1]._noHelp.should.be.false();
program.commands[2].name().should.equal('hiddencommand');
-program.commands[2]._noHelp.should.be.true;
+program.commands[2]._noHelp.should.be.true();
program.commands[3].name().should.equal('hideagain');
program.commands[3]._noHelp.should.be.true();
-program.commands[4].name().should.equal('help');
+program.commands[4].name().should.equal('hiddencommandwithoutdescription');
+program.commands[4]._noHelp.should.be.true();
+program.commands[5].name().should.equal('help');
+
+
sinon.restore();
sinon.stub(process.stdout, 'write');
diff --git a/tsconfig.json b/tsconfig.json
new file mode 100644
index 0000000..dee4c88
--- /dev/null
+++ b/tsconfig.json
@@ -0,0 +1,20 @@
+{
+ "compilerOptions": {
+ "module": "commonjs",
+ "lib": [
+ "es6"
+ ],
+ "noImplicitAny": true,
+ "noImplicitThis": true,
+ "strictNullChecks": false,
+ "types": [
+ "node"
+ ],
+ "noEmit": true,
+ "forceConsistentCasingInFileNames": true
+ },
+ "files": [
+ "typings/index.d.ts",
+ "typings/commander-tests.ts"
+ ]
+}
\ No newline at end of file
diff --git a/typings/commander-tests.ts b/typings/commander-tests.ts
new file mode 100644
index 0000000..474db4e
--- /dev/null
+++ b/typings/commander-tests.ts
@@ -0,0 +1,99 @@
+import * as program from './index';
+
+interface ExtendedOptions extends program.CommandOptions {
+ isNew: any;
+}
+
+const commandInstance = new program.Command('-f');
+const optionsInstance = new program.Option('-f');
+
+const name = program.name();
+
+program
+ .name('set name')
+ .version('0.0.1')
+ .option('-p, --peppers', 'Add peppers')
+ .option('-P, --pineapple', 'Add pineapple')
+ .option('-b, --bbq', 'Add bbq sauce')
+ .option('-c, --cheese [type]', 'Add the specified type of cheese [marble]', 'marble')
+ .parse(process.argv);
+
+console.log('you ordered a pizza with:');
+if (program['peppers']) console.log(' - peppers');
+if (program['pineapple']) console.log(' - pineapple');
+if (program['bbq']) console.log(' - bbq');
+console.log(' - %s cheese', program['cheese']);
+
+function range(val: string) {
+ return val.split('..').map(Number);
+}
+
+function list(val: string) {
+ return val.split(',');
+}
+
+function collect(val: string, memo: string[]) {
+ memo.push(val);
+ return memo;
+}
+
+function increaseVerbosity(v: any, total: number) {
+ return total + 1;
+}
+
+program
+ .version('0.0.1')
+ .usage('[options] <file ...>')
+ .option('-i, --integer <n>', 'An integer argument', parseInt)
+ .option('-f, --float <n>', 'A float argument', parseFloat)
+ .option('-r, --range <a>..<b>', 'A range', range)
+ .option('-l, --list <items>', 'A list', list)
+ .option('-o, --optional [value]', 'An optional value')
+ .option('-c, --collect [value]', 'A repeatable value', collect, [])
+ .option('-v, --verbose', 'A value that can be increased', increaseVerbosity, 0)
+ .parse(process.argv);
+
+console.log(' int: %j', program['integer']);
+console.log(' float: %j', program['float']);
+console.log(' optional: %j', program['optional']);
+program['range'] = program['range'] || [];
+console.log(' range: %j..%j', program['range'][0], program['range'][1]);
+console.log(' list: %j', program['list']);
+console.log(' collect: %j', program['collect']);
+console.log(' verbosity: %j', program['verbose']);
+console.log(' args: %j', program['args']);
+
+program
+ .version('0.0.1')
+ .option('-f, --foo', 'enable some foo')
+ .option('-b, --bar', 'enable some bar')
+ .option('-B, --baz', 'enable some baz');
+
+// must be before .parse() since
+// node's emit() is immediate
+
+program.on('--help', () => {
+ console.log(' Examples:');
+ console.log('');
+ console.log(' $ custom-help --help');
+ console.log(' $ custom-help -h');
+ console.log('');
+});
+
+program
+ .command('allow-unknown-option')
+ .allowUnknownOption()
+ .action(() => {
+ console.log('unknown option is allowed');
+ });
+
+program
+ .version('0.0.1')
+ .arguments('<cmd> [env]')
+ .action((cmd, env) => {
+ console.log(cmd, env);
+ });
+
+program.parse(process.argv);
+
+console.log('stuff');
\ No newline at end of file
diff --git a/typings/index.d.ts b/typings/index.d.ts
new file mode 100644
index 0000000..f36f5a7
--- /dev/null
+++ b/typings/index.d.ts
@@ -0,0 +1,295 @@
+// Project: https://github.com/visionmedia/commander.js
+// Definitions by: Alan Agius <https://github.com/alan-agius4>, Marcelo Dezem <https://github.com/mdezem>, vvakame <https://github.com/vvakame>
+
+declare class Option {
+ flags: string;
+ required: boolean;
+ optional: boolean;
+ bool: boolean;
+ short?: string;
+ long: string;
+ description: string;
+
+ /**
+ * Initialize a new `Option` with the given `flags` and `description`.
+ *
+ * @param {string} flags
+ * @param {string} [description]
+ */
+ constructor(flags: string, description?: string);
+}
+
+declare class Command extends NodeJS.EventEmitter {
+ [key: string]: any;
+
+ args: string[];
+
+ /**
+ * Initialize a new `Command`.
+ *
+ * @param {string} [name]
+ */
+ constructor(name?: string);
+
+ /**
+ * Set the program version to `str`.
+ *
+ * This method auto-registers the "-V, --version" flag
+ * which will print the version number when passed.
+ *
+ * @param {string} str
+ * @param {string} [flags]
+ * @returns {Command} for chaining
+ */
+ version(str: string, flags?: string): Command;
+
+ /**
+ * Add command `name`.
+ *
+ * The `.action()` callback is invoked when the
+ * command `name` is specified via __ARGV__,
+ * and the remaining arguments are applied to the
+ * function for access.
+ *
+ * When the `name` is "*" an un-matched command
+ * will be passed as the first arg, followed by
+ * the rest of __ARGV__ remaining.
+ *
+ * @example
+ * program
+ * .version('0.0.1')
+ * .option('-C, --chdir <path>', 'change the working directory')
+ * .option('-c, --config <path>', 'set config path. defaults to ./deploy.conf')
+ * .option('-T, --no-tests', 'ignore test hook')
+ *
+ * program
+ * .command('setup')
+ * .description('run remote setup commands')
+ * .action(function() {
+ * console.log('setup');
+ * });
+ *
+ * program
+ * .command('exec <cmd>')
+ * .description('run the given remote command')
+ * .action(function(cmd) {
+ * console.log('exec "%s"', cmd);
+ * });
+ *
+ * program
+ * .command('teardown <dir> [otherDirs...]')
+ * .description('run teardown commands')
+ * .action(function(dir, otherDirs) {
+ * console.log('dir "%s"', dir);
+ * if (otherDirs) {
+ * otherDirs.forEach(function (oDir) {
+ * console.log('dir "%s"', oDir);
+ * });
+ * }
+ * });
+ *
+ * program
+ * .command('*')
+ * .description('deploy the given env')
+ * .action(function(env) {
+ * console.log('deploying "%s"', env);
+ * });
+ *
+ * program.parse(process.argv);
+ *
+ * @param {string} name
+ * @param {string} [desc] for git-style sub-commands
+ * @param {CommandOptions} [opts] command options
+ * @returns {Command} the new command
+ */
+ command(name: string, desc?: string, opts?: commander.CommandOptions): Command;
+
+ /**
+ * Define argument syntax for the top-level command.
+ *
+ * @param {string} desc
+ * @returns {Command} for chaining
+ */
+ arguments(desc: string): Command;
+
+ /**
+ * Parse expected `args`.
+ *
+ * For example `["[type]"]` becomes `[{ required: false, name: 'type' }]`.
+ *
+ * @param {string[]} args
+ * @returns {Command} for chaining
+ */
+ parseExpectedArgs(args: string[]): Command;
+ /**
+ * Register callback `fn` for the command.
+ *
+ * @example
+ * program
+ * .command('help')
+ * .description('display verbose help')
+ * .action(function() {
+ * // output help here
+ * });
+ *
+ * @param {(...args: any[]) => void} fn
+ * @returns {Command} for chaining
+ */
+ action(fn: (...args: any[]) => void): Command;
+
+ /**
+ * Define option with `flags`, `description` and optional
+ * coercion `fn`.
+ *
+ * The `flags` string should contain both the short and long flags,
+ * separated by comma, a pipe or space. The following are all valid
+ * all will output this way when `--help` is used.
+ *
+ * "-p, --pepper"
+ * "-p|--pepper"
+ * "-p --pepper"
+ *
+ * @example
+ * // simple boolean defaulting to false
+ * program.option('-p, --pepper', 'add pepper');
+ *
+ * --pepper
+ * program.pepper
+ * // => Boolean
+ *
+ * // simple boolean defaulting to true
+ * program.option('-C, --no-cheese', 'remove cheese');
+ *
+ * program.cheese
+ * // => true
+ *
+ * --no-cheese
+ * program.cheese
+ * // => false
+ *
+ * // required argument
+ * program.option('-C, --chdir <path>', 'change the working directory');
+ *
+ * --chdir /tmp
+ * program.chdir
+ * // => "/tmp"
+ *
+ * // optional argument
+ * program.option('-c, --cheese [type]', 'add cheese [marble]');
+ *
+ * @param {string} flags
+ * @param {string} [description]
+ * @param {((arg1: any, arg2: any) => void) | RegExp} [fn] function or default
+ * @param {*} [defaultValue]
+ * @returns {Command} for chaining
+ */
+ option(flags: string, description?: string, fn?: ((arg1: any, arg2: any) => void) | RegExp, defaultValue?: any): Command;
+ option(flags: string, description?: string, defaultValue?: any): Command;
+
+ /**
+ * Allow unknown options on the command line.
+ *
+ * @param {boolean} [arg] if `true` or omitted, no error will be thrown for unknown options.
+ * @returns {Command} for chaining
+ */
+ allowUnknownOption(arg?: boolean): Command;
+
+ /**
+ * Parse `argv`, settings options and invoking commands when defined.
+ *
+ * @param {string[]} argv
+ * @returns {Command} for chaining
+ */
+ parse(argv: string[]): Command;
+
+ /**
+ * Parse options from `argv` returning `argv` void of these options.
+ *
+ * @param {string[]} argv
+ * @returns {ParseOptionsResult}
+ */
+ parseOptions(argv: string[]): commander.ParseOptionsResult;
+
+ /**
+ * Return an object containing options as key-value pairs
+ *
+ * @returns {{[key: string]: string}}
+ */
+ opts(): { [key: string]: string };
+
+ /**
+ * Set the description to `str`.
+ *
+ * @param {string} str
+ * @return {(Command | string)}
+ */
+ description(str: string): Command;
+ description(): string;
+
+ /**
+ * Set an alias for the command.
+ *
+ * @param {string} alias
+ * @return {(Command | string)}
+ */
+ alias(alias: string): Command;
+ alias(): string;
+
+ /**
+ * Set or get the command usage.
+ *
+ * @param {string} str
+ * @return {(Command | string)}
+ */
+ usage(str: string): Command;
+ usage(): string;
+
+ /**
+ * Set the name of the command.
+ *
+ * @param {string} str
+ * @return {Command}
+ */
+ name(str: string): Command;
+
+ /**
+ * Get the name of the command.
+ *
+ * @return {string}
+ */
+ name(): string;
+
+ /**
+ * Output help information for this command.
+ *
+ * @param {(str: string) => string} [cb]
+ */
+ outputHelp(cb?: (str: string) => string): void;
+
+ /** Output help information and exit. */
+ help(): void;
+}
+
+declare namespace commander {
+
+ interface CommandOptions {
+ noHelp?: boolean;
+ isDefault?: boolean;
+ }
+
+ interface ParseOptionsResult {
+ args: string[];
+ unknown: string[];
+ }
+
+ interface CommanderStatic extends Command {
+ Command: typeof Command;
+ Option: typeof Option;
+ CommandOptions: CommandOptions;
+ ParseOptionsResult: ParseOptionsResult;
+ }
+
+}
+
+declare const commander: commander.CommanderStatic;
+export = commander;
\ No newline at end of file
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-javascript/node-commander.git
More information about the Pkg-javascript-commits
mailing list