opt-cli
Execute CLI Statements based upon opt-in / out-out Rules.
Installation
Simply install locally as a development dependency to your project's package:
npm install --save-dev opt-cliIntended usage
Opting in/out of a configured tasks, best use case is for ghooks. This discussion is the main motivation behind this module.
You can check out the eslint-find-new-rules/package.json for reference.
opt --in
"config": {
  "ghooks": {
    "pre-commit": "opt --in pre-commit --exec 'npm run validate'"
  }
},While commiting, npm run validate will not be executed by default.
However, one can opt in by creating a .opt-in file in the root of the project, with the content pre-commit
.opt-in
Each line in the .opt-in file, is the keyword used after the opt --in rule.
So for the above example, it's pre-commit
cat .opt-in
# "ghooks": {
#   "pre-commit": "opt --in pre-commit --exec 'npm run validate'"
# }
pre-commit # the keyword used after the opt --in commandopt --out
opt --out works exactly, the opposite way of opt --in.
"config": {
  "ghooks": {
    "pre-commit": "opt --out pre-commit --exec 'npm run validate'"
  }
},In this case, npm run validate will be executed before any changes can be commited.
In order to opt out, you have to create a .opt-out file in the root of the project, with the content pre-commit
.opt-out
Similar to .opt-in file, each line in .opt-out file, is the keyword used after the opt --out rule.
So for the above example, it's pre-commit
cat .opt-out
# "ghooks": {
#   "pre-commit": "opt --out pre-commit --exec 'npm run validate'"
# }
pre-commit # the keyword used after the opt --out command- don't forget to update .gitignoreto ignore this file.
- opt-in,- opt-outfiles can contain multiple rules
- every line must contain only a single rule.
- #can be used to comment any rule.
Use As Library
You may also include opt-cli as a library:
var opt = require( 'opt-cli' );Given the example setup from above, usage would be as follows:
opt.testOptIn( 'pre-commit' ) === true
opt.testOptOut( 'pre-push' ) === trueUsing opt.getExplicitOpts() you would receive:
{
  'pre-commit': true,
  'pre-push': false
}Advanced Usage
Rules to opt-into or opt-out of can also be specified using ...
- ... an inoroutarray of apackage.json'sconfig.optfield:
"config": {
  "opt": {
    "in": [ "pre-commit" ],
    "out": [ "pre-push" ]
  }
},- ... the environment variables OPT_INandOPT_OUT:
# Delimit multiple rules with ":" on *nix / ";" on Win
export OPT_IN="pre-commit"
export OPT_OUT="pre-push"Contributors
| Kent C. Dodds 💻 👀 | Guilherme J. Tramontina 💻 | Andreas Windt 💻 📖 ⚠️ | Sarbbottam Bandyopadhyay 📖 | Suhas Karanth 🐛 💻 | 
|---|---|---|---|---|
This project follows the all-contributors specification (emoji key). Contributions of any kind welcome!
Special thanks to @kentcdodds for encouraging to engage in oss, for the wonderful resources (check out the Egghead videos!) and — together with gtramontina — for coming up with the original idea to this module!
 ta2edchimp
ta2edchimp