{"_id":"@iarna/cli","_rev":"60411","name":"@iarna/cli","description":"Some simple CLI scaffolding for promise returning applications.","dist-tags":{"latest":"2.1.0"},"maintainers":[{"name":"iarna","email":""},{"name":"npm:iarna","email":""}],"time":{"modified":"2023-01-23T20:03:54.000Z","created":"2017-07-15T22:13:58.596Z","2.1.0":"2019-07-06T22:55:20.780Z","2.0.2":"2018-06-11T09:58:10.147Z","2.0.1":"2018-06-08T08:02:33.197Z","2.0.0":"2018-06-08T07:09:27.106Z","1.2.0":"2017-09-02T00:55:36.564Z","1.1.0":"2017-07-16T02:57:02.704Z","1.0.0":"2017-07-15T22:13:58.596Z"},"users":{},"author":{"name":"Rebecca Turner","email":"me@re-becca.org","url":"http://re-becca.org/"},"repository":{"type":"git","url":"git+https://github.com/iarna/cli.git"},"versions":{"2.1.0":{"name":"@iarna/cli","version":"2.1.0","description":"Some simple CLI scaffolding for promise returning applications.","main":"app.js","scripts":{"test":"tap --100 test/scenarios.js"},"keywords":[],"author":{"name":"Rebecca Turner","email":"me@re-becca.org","url":"http://re-becca.org/"},"license":"ISC","dependencies":{"signal-exit":"^3.0.2","glob":"^7.1.2"},"devDependencies":{"@perl/qr":"^1.2.0","@perl/qx":"^1.0.2","require-inject":"^1.4.4","tap":"^12.0.1","update-notifier":"^2.2.0","yargs":"^8.0.2"},"repository":{"type":"git","url":"git+https://github.com/iarna/cli.git"},"bugs":{"url":"https://github.com/iarna/cli/issues"},"homepage":"https://github.com/iarna/cli#readme","gitHead":"b9c53a62aee1a99014dee0813b4870b2d07cdd2f","_id":"@iarna/cli@2.1.0","_nodeVersion":"12.3.1","_npmVersion":"6.10.0","_npmUser":{"name":"iarna","email":"me@re-becca.org"},"dist":{"shasum":"f830356d54c72c804bd7afc43999de31e40fc3d6","size":4206,"noattachment":false,"key":"/@iarna/cli/-/@iarna/cli-2.1.0.tgz","tarball":"http://name.csiicloud.com:7001/@iarna/cli/download/@iarna/cli-2.1.0.tgz"},"maintainers":[{"name":"iarna","email":""},{"name":"npm:iarna","email":""}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cli_2.1.0_1562453720667_0.6529373107418062"},"_hasShrinkwrap":false,"publish_time":1562453720780,"_cnpm_publish_time":1562453720780},"2.0.2":{"name":"@iarna/cli","version":"2.0.2","description":"Some simple CLI scaffolding for promise returning applications.","main":"app.js","scripts":{"test":"tap --100 test/scenarios.js"},"keywords":[],"author":{"name":"Rebecca Turner","email":"me@re-becca.org","url":"http://re-becca.org/"},"license":"ISC","dependencies":{"signal-exit":"^3.0.2"},"files":["app.js"],"devDependencies":{"@perl/qr":"^1.2.0","@perl/qx":"^1.0.2","glob":"^7.1.2","tap":"^12.0.1","update-notifier":"^2.2.0","yargs":"^8.0.2"},"repository":{"type":"git","url":"git+https://github.com/iarna/cli.git"},"bugs":{"url":"https://github.com/iarna/cli/issues"},"homepage":"https://github.com/iarna/cli#readme","gitHead":"d058447dd4401d424c4d76bcc11186d0ddb05adc","_id":"@iarna/cli@2.0.2","_npmVersion":"6.1.0","_nodeVersion":"9.3.0","_npmUser":{"name":"iarna","email":"me@re-becca.org"},"dist":{"shasum":"2c25baa14f3c2822d6428685e1af4785aee2d930","size":4002,"noattachment":false,"key":"/@iarna/cli/-/@iarna/cli-2.0.2.tgz","tarball":"http://name.csiicloud.com:7001/@iarna/cli/download/@iarna/cli-2.0.2.tgz"},"maintainers":[{"name":"iarna","email":""},{"name":"npm:iarna","email":""}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cli_2.0.2_1528711089967_0.40584147481827637"},"publish_time":1528711090147,"_hasShrinkwrap":false,"_cnpm_publish_time":1528711090147},"2.0.1":{"name":"@iarna/cli","version":"2.0.1","description":"Some simple CLI scaffolding for promise returning applications.","main":"app.js","scripts":{"test":"tap --100 test/scenarios.js"},"keywords":[],"author":{"name":"Rebecca Turner","email":"me@re-becca.org","url":"http://re-becca.org/"},"license":"ISC","dependencies":{"signal-exit":"^3.0.2"},"files":["app.js"],"devDependencies":{"@perl/qr":"^1.2.0","@perl/qx":"^1.0.2","glob":"^7.1.2","tap":"^12.0.1","update-notifier":"^2.2.0","yargs":"^8.0.2"},"repository":{"type":"git","url":"git+https://github.com/iarna/cli.git"},"bugs":{"url":"https://github.com/iarna/cli/issues"},"homepage":"https://github.com/iarna/cli#readme","gitHead":"810365aa2fd9cd09d266dacb9ad1fed15016e859","_id":"@iarna/cli@2.0.1","_npmVersion":"6.1.0","_nodeVersion":"10.4.0","_npmUser":{"name":"iarna","email":"me@re-becca.org"},"dist":{"shasum":"7ba8f72119aaeec805e86a88952cc51421db2ab5","size":3954,"noattachment":false,"key":"/@iarna/cli/-/@iarna/cli-2.0.1.tgz","tarball":"http://name.csiicloud.com:7001/@iarna/cli/download/@iarna/cli-2.0.1.tgz"},"maintainers":[{"name":"iarna","email":""},{"name":"npm:iarna","email":""}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cli_2.0.1_1528444953114_0.1953496965815289"},"_hasShrinkwrap":false,"publish_time":1528444953197,"_cnpm_publish_time":1528444953197},"2.0.0":{"name":"@iarna/cli","version":"2.0.0","description":"Some simple CLI scaffolding for promise returning applications.","main":"app.js","scripts":{"test":"tap --100 test/scenarios.js"},"keywords":[],"author":{"name":"Rebecca Turner","email":"me@re-becca.org","url":"http://re-becca.org/"},"license":"ISC","dependencies":{"signal-exit":"^3.0.2"},"files":["app.js"],"devDependencies":{"@perl/qr":"^1.2.0","@perl/qx":"^1.0.2","glob":"^7.1.2","tap":"^12.0.1","update-notifier":"^2.2.0","yargs":"^8.0.2"},"repository":{"type":"git","url":"git+https://github.com/iarna/cli.git"},"bugs":{"url":"https://github.com/iarna/cli/issues"},"homepage":"https://github.com/iarna/cli#readme","gitHead":"5fcfab67ff2a3a077c199e6fbd688a5d21533b12","_id":"@iarna/cli@2.0.0","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"iarna","email":"me@re-becca.org"},"dist":{"shasum":"c77d9bdb6abd04549a69e0f347a24ca26866ea8e","size":4078,"noattachment":false,"key":"/@iarna/cli/-/@iarna/cli-2.0.0.tgz","tarball":"http://name.csiicloud.com:7001/@iarna/cli/download/@iarna/cli-2.0.0.tgz"},"maintainers":[{"name":"iarna","email":""},{"name":"npm:iarna","email":""}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cli_2.0.0_1528441767056_0.5829210466535097"},"_hasShrinkwrap":false,"publish_time":1528441767106,"_cnpm_publish_time":1528441767106},"1.2.0":{"name":"@iarna/cli","version":"1.2.0","description":"Some simple CLI scaffolding for promise returning applications.","main":"app.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"keywords":[],"author":{"name":"Rebecca Turner","email":"me@re-becca.org","url":"http://re-becca.org/"},"license":"ISC","dependencies":{"signal-exit":"^3.0.2","update-notifier":"^2.2.0","yargs":"^8.0.2"},"files":["app.js"],"devDependencies":{},"repository":{"type":"git","url":"git+https://github.com/iarna/cli.git"},"bugs":{"url":"https://github.com/iarna/cli/issues"},"homepage":"https://github.com/iarna/cli#readme","gitHead":"35eb84e40cf269da67e45fe31a4da6141462653c","_id":"@iarna/cli@1.2.0","_npmVersion":"5.4.0","_nodeVersion":"8.3.0","_npmUser":{"name":"iarna","email":"me@re-becca.org"},"dist":{"shasum":"0f7af5e851afe895104583c4ca07377a8094d641","size":3059,"noattachment":false,"key":"/@iarna/cli/-/@iarna/cli-1.2.0.tgz","tarball":"http://name.csiicloud.com:7001/@iarna/cli/download/@iarna/cli-1.2.0.tgz"},"maintainers":[{"name":"iarna","email":""},{"name":"npm:iarna","email":""}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cli-1.2.0.tgz_1504313736400_0.23531205276958644"},"directories":{},"publish_time":1504313736564,"_hasShrinkwrap":false,"_cnpm_publish_time":1504313736564},"1.1.0":{"name":"@iarna/cli","version":"1.1.0","description":"Some simple CLI scaffolding for promise returning applications.","main":"app.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"keywords":[],"author":{"name":"Rebecca Turner","email":"me@re-becca.org","url":"http://re-becca.org/"},"license":"ISC","dependencies":{"signal-exit":"^3.0.2","update-notifier":"^2.2.0","yargs":"^8.0.2"},"files":["app.js"],"devDependencies":{},"repository":{"type":"git","url":"git+https://github.com/iarna/cli.git"},"bugs":{"url":"https://github.com/iarna/cli/issues"},"homepage":"https://github.com/iarna/cli#readme","gitHead":"fadf2cc6275e937a5ddfa8d8a354be1a4e3d7d75","_id":"@iarna/cli@1.1.0","_npmVersion":"5.2.0","_nodeVersion":"8.1.4","_npmUser":{"name":"iarna","email":"me@re-becca.org"},"dist":{"shasum":"c39e48b4de732ebc0a46863982cbe8028df0df9f","size":3097,"noattachment":false,"key":"/@iarna/cli/-/@iarna/cli-1.1.0.tgz","tarball":"http://name.csiicloud.com:7001/@iarna/cli/download/@iarna/cli-1.1.0.tgz"},"maintainers":[{"name":"iarna","email":""},{"name":"npm:iarna","email":""}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cli-1.1.0.tgz_1500173822453_0.7932127849198878"},"directories":{},"publish_time":1500173822704,"_hasShrinkwrap":false,"_cnpm_publish_time":1500173822704},"1.0.0":{"name":"@iarna/cli","version":"1.0.0","description":"Some simple CLI scaffolding for promise returning applications.","main":"app.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"keywords":[],"author":{"name":"Rebecca Turner","email":"me@re-becca.org","url":"http://re-becca.org/"},"license":"ISC","dependencies":{"signal-exit":"^3.0.2","update-notifier":"^2.2.0","yargs":"^8.0.2"},"files":["app.js"],"gitHead":"deb4c26f6619e39cbdbde3387ba9cfbb233b93c0","_id":"@iarna/cli@1.0.0","_npmVersion":"5.2.0","_nodeVersion":"8.1.4","_npmUser":{"name":"iarna","email":"me@re-becca.org"},"dist":{"shasum":"c1534695175fb2f0305161cd532105f700e32487","size":2111,"noattachment":false,"key":"/@iarna/cli/-/@iarna/cli-1.0.0.tgz","tarball":"http://name.csiicloud.com:7001/@iarna/cli/download/@iarna/cli-1.0.0.tgz"},"maintainers":[{"name":"iarna","email":""},{"name":"npm:iarna","email":""}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cli-1.0.0.tgz_1500156838078_0.5926348359789699"},"directories":{},"publish_time":1500156838596,"_hasShrinkwrap":false,"_cnpm_publish_time":1500156838596}},"readme":"# @iarna/cli\n\nSome simple CLI scaffolding for promise returning applications.\n\n[![Coverage Status](https://coveralls.io/repos/github/iarna/cli/badge.svg?branch=latest)](https://coveralls.io/github/iarna/cli?branch=latest)\n\n## EXAMPLE\n\n`example.js`\n```js\nrequire('@iarna/cli')(main)\n\nconst util = require('util');\nconst sleep = util.promisify(setTimeout);\n\n// opts will only contain the _ var, for compatibility with yargs\nasync function main (opts, arg1, arg2, arg3) {\n  console.log('Got:', arg1, arg2, arg3)\n  await sleep(40)\n}\n```\n\n## WHAT YOU GET\n\n* Automatic glob parsing on Windows so that your passing `*.foo` works the\n  same on Mac/Linux/Windows.\n* Error detetion and handling:\n  * _exit without resolving warnings_ - If your program finishes without\n    resolving its promises (like if it crashes hard or you process.exit, or\n    you just don't resolve the promise) then we warn about that.\n  * If your entry point function rejects then that's reported with a stack\n    trace (if the rejected value has `.stack`) else with the rejected value\n    and your process will exit with an error code.\n* Optional `yargs` support.  If `yargs` is requirable then it will be used. \n  The wrapper around the main function returns a yargs object, so you can\n  configure it as usual.  The `argv` object is passed in as the first\n  argument of your entry point function.  The rest of your positional\n  arguments are passed in as the remaining function arguments.\n* Optional `update-notifier` support.  If `update-notifier` is requirable\n  then it will be used.  A default update notifier is setup for your app so\n  users will learn about new versions when you publish them.  Your app needs\n  to have a name, version and bin entry in its `package.json`.  (The bin\n  entry needs to have the script using `@iarna/cli` in it for the update\n  notifier to trigger.)\n\n## With Yargs\n\nIf you have yargs installed as a dependency you can customize it further by\nchaining off the require in the usual yargsish way.\n\n`example.js`\n```js\nrequire('@iarna/cli')(main)\n  .boolean('silent')\n  .boolean('exit')\n  .boolean('error')\n  .boolean('reject')\n  .boolean('code50')\n  .version()\n  .help()\n\nconst util = require('util');\nconst sleep = util.promisify(setTimeout);\n\nfunction main (opts, arg1, arg2, arg3) {\n  if (!opts.silent) console.error('Starting up!')\n  console.log('Got:', arg1, arg2, arg3)\n  if (opts.exit) process.exit()\n  if (opts.error) throw new Error('throw')\n  if (opts.reject) return Promise.reject(new Error('reject'))\n  if (opts.code50) return Promise.reject(50)\n  return sleep(10000)\n}\n\n// alternatively use:\n// function main (opts, ...args) {\n```\n\n```console\n$ node example hello there world\nStarting up!\nGot: hello there world\n$ node example hello there world\nStarting up!\nGot: hello there world\n^C\nAbnormal exit: SIGINT\n$ node example --silent hello there world\nGot: hello there world\n$ node example --silent hello there world --exit\nGot: hello there world\nAbnormal exit: Promises not resolved\n$ node example --silent hello there world --error\nGot: hello there world\nError: throw\n    at main (/Users/rebecca/code/cli/example.js:11:25)\n    at Immediate.setImmediate (/Users/rebecca/code/cli/app.js:38:32)\n    at runCallback (timers.js:800:20)\n    at tryOnImmediate (timers.js:762:5)\n    at processImmediate [as _immediateCallback] (timers.js:733:5)\n$ node example --silent hello there world --reject\nGot: hello there world\nError: reject\n    at main (/Users/rebecca/code/cli/example.js:12:42)\n    at Immediate.setImmediate [as _onImmediate] (/Users/rebecca/code/cli/app.js:38:32)\n    at runCallback (timers.js:800:20)\n    at tryOnImmediate (timers.js:762:5)\n    at processImmediate [as _immediateCallback] (timers.js:733:5)\n$ node example --silent hello there world --code50\nGot: hello there world\n$ echo $?\n50\n```\n\n## WHAT ITS NOT\n\nA full framework for writing cli apps.  You'll likely outgrow the error\nhandling pretty fast if this is anything beyond a little one off.  This\nmostly exists to scratch my own itch.  I kept on writing this code and I\nwanted to stop.  =D\n\nIt's designed to be only be as heavy as it needs to be.  It only has one\ndirect dependency, but it can provide enhanced functionality if you depend on\n`yargs` or `update-notifier`.\n\n## USAGE\n\n### require('@iarna/cli')(entryPointFunction) → [yargs]\n\nThe module itself exports a function that you need to call with the name of\nyour main function.  Your main function is like `main` in C, it's the entry\npoint for your program.  It needs to return a promise that resolves when\nyour program completes.\n\nThe return value from the call is, if you have `yargs` installed, a `yargs`\nobject you can use to configure what options your script takes. If you\ndon't have yargs installed then it's a proxy that throws if you try to do\nanything with it.\n\nYour entry point function can be named anything, but it needs to return a\npromise and it takes arguments like this:\n\n`main(opts, arg1, arg2, …, argn) → Promise`\n\nIf you have `yargs` installed then the `opts` argument is `yargs.argv`\nand the additional arguments are from `argv._`, so `arg1 === argv._[0]`,\n`arg2 === argv._[1]` and so on.\n\nIf you don't have `yargs` installed then `opts` argument is an object with\nan `_` property containing all arguments, for compatibility with the `yargs`\nmode.  As with that mode `arg1 === argv._[0]`, `arg2 === argv._[1]` and so\non.\n","_attachments":{},"homepage":"https://github.com/iarna/cli#readme","bugs":{"url":"https://github.com/iarna/cli/issues"},"license":"ISC"}