{"library":"opt-cli","title":"Opt-in/Opt-out CLI Task Executor","description":"opt-cli is a Node.js utility designed to conditionally execute CLI statements based on opt-in or opt-out rules. Its primary use case, as highlighted in its documentation, is for managing `ghooks` or similar pre-commit/pre-push scripts, allowing developers to enable or disable specific tasks without modifying `package.json` scripts directly. Rules are defined in `.opt-in` or `.opt-out` files in the project root, or via the `config.opt` field in `package.json`. The package has been stable at version 1.6.0 since October 2017, with no further releases or active development observed, indicating an abandoned status. It explicitly supports Node.js versions `>=4` and primarily functions as a CommonJS module, without apparent ESM support.","language":"javascript","status":"abandoned","last_verified":"Wed Apr 22","install":{"commands":["npm install opt-cli"],"cli":{"name":"opt","version":null}},"imports":["const opt = require('opt-cli');","opt.testOptIn('rule-name');","opt.getExplicitOpts();"],"auth":{"required":false,"env_vars":[]},"quickstart":{"code":"const fs = require('fs');\nconst path = require('path');\nconst opt = require('opt-cli');\n\nconst optInFilePath = path.join(process.cwd(), '.opt-in');\nconst optOutFilePath = path.join(process.cwd(), '.opt-out');\n\nasync function runExample() {\n  try {\n    // Create a dummy .opt-in file for demonstration\n    fs.writeFileSync(optInFilePath, 'pre-commit\\nlint-check', 'utf8');\n    console.log(`Created ${optInFilePath} with rules: pre-commit, lint-check`);\n\n    // Test opt-in for 'pre-commit'\n    const shouldRunPreCommit = opt.testOptIn('pre-commit');\n    console.log(`Should 'pre-commit' task run (opt-in)? ${shouldRunPreCommit}`); // Expected: true\n\n    // Test opt-in for 'test-task' (not in .opt-in)\n    const shouldRunTestTask = opt.testOptIn('test-task');\n    console.log(`Should 'test-task' run (opt-in)? ${shouldRunTestTask}`); // Expected: false\n\n    // Create a dummy .opt-out file for demonstration\n    fs.writeFileSync(optOutFilePath, 'pre-push', 'utf8');\n    console.log(`Created ${optOutFilePath} with rule: pre-push`);\n\n    // Test opt-out for 'pre-push' (meaning it is opted out, so it won't run)\n    const shouldRunPrePush = opt.testOptOut('pre-push');\n    console.log(`Should 'pre-push' task run (opt-out)? ${shouldRunPrePush}`); // Expected: false\n\n    // Test opt-out for 'build' (meaning it is not opted out, so it will run)\n    const shouldRunBuild = opt.testOptOut('build');\n    console.log(`Should 'build' task run (opt-out)? ${shouldRunBuild}`); // Expected: true\n\n    // Note: getExplicitOpts primarily reflects 'config.opt' in package.json, not file content directly\n    console.log('\\nDemonstrating CLI usage (run these in your terminal after installing opt-cli):');\n    console.log(`$ npx opt --in pre-commit --exec 'echo \"Pre-commit task ran if opted in!\"'`);\n    console.log(`$ npx opt --out pre-push --exec 'echo \"Pre-push task ran if NOT opted out!\"'`);\n\n  } catch (error) {\n    console.error('An error occurred:', error);\n  } finally {\n    // Clean up dummy files\n    if (fs.existsSync(optInFilePath)) {\n      fs.unlinkSync(optInFilePath);\n      console.log(`Removed ${optInFilePath}`);\n    }\n    if (fs.existsSync(optOutFilePath)) {\n      fs.unlinkSync(optOutFilePath);\n      console.log(`Removed ${optOutFilePath}`);\n    }\n  }\n}\n\nrunExample();","lang":"javascript","description":"This example demonstrates how to use `opt-cli` programmatically to check opt-in and opt-out rules by simulating the creation of `.opt-in` and `.opt-out` files, and then using `testOptIn` and `testOptOut` methods. It also illustrates how to retrieve combined explicit configurations and suggests CLI usage.","tag":null,"tag_description":null,"last_tested":null,"results":[]},"compatibility":null}