Never Patronize Mothers

    yargs-lite

    1.1.2 • Public • Published

    yargs-lite

    lite-weight yargs, speed up your cli in some cases

    setup

    1. go to your project directory and create bin folder

    2. create bin/index.js and put #!/usr/bin/env node on the top of the file

    3. (optional) chmod 777 bin/index.js

    4. package.json : {..."scripts":{ "myscript": "./bin/index.js" }, "bin": {"myscript": "bin/index.js"}}

    5. use npm run myscript or call ./bin/index.js directly

    6. under bin/index.js checkout example

    7. (opitonal) link you command, or put it under path variables so you can use your command directly. i.e. sudo -u root ln -s bin/index.js /usr/bin/myscript

    example

    #!/usr/bin/env node
    const yargslite = require("yargs-lite");
    let yargs = new yargslite();
    
    yargs.addHelpDocEntry("--help", "general help page\ndisplay:\tdisplay storage");
    
    yargs.addCommand("display", (storage) => console.log(storage));
    yargs.addHelpDocEntry("display", "display the storage from yargs");
    
    yargs.run();

    ./bin/index.js display

    =>

    {
      origin: { argv: [...]},
      argv: [ 'display' ],
      entry: 'display',
      _: [],
      args: {},
      kwargs: {}
    }
    

    ./bin/index.js --help
    ./bin/index.js display --help

    =>

    general help page
    display:      display storage
    
    display the storage from yargs
    
    ./bin/index.js display 10 -a 11 -cd 12 --e --f 13

    =>

    {
      origin: { argv: [...]},
      argv: [ ... ],
      entry: 'display',
      _: [ '10' ],
      args: { a: [ '11' ], c: [ '12' ], d: [ '12' ] },
      kwargs: { e: [ '13' ], f: [ '13' ] }
    }
    

    Adv.

    Change help doc display

    let fancyLogger = (content) => console.log("---", content, "---");
    yargs.help.helpDocDisplay = (entry, doc) => fancyLogger(doc[entry]);

    Super fast doc loading

    yargs.help.helpDoc = require("pre-defined-doc.json");

    Define your own parser

    yargs.addParser((storage) => {
      storage.args = { "-v": "10" };
      storage.kwargs = { "--value": "ten" };
      storage.extra = "message";
    });
    
    yargs.addCommand("test", (storage) => console.log(storage.args, storage.kwargs, storage.extra));

    and run

    ./bin/index.js test

    =>

    { '-v': '10' } { '--value': 'ten' } message

    pattern and logic

    let's define some parameters as

    ./s a b -c -d --e --f g

    and ignore the entry (full command should be something like ./bin/index.js -c a --e b), and the default result contains {args:{}, kwargs:{}, _:[]}

    straight-forward case example

    # 1 to 1 pair
    ./s -c a -d b       # args:{c:[a], d:[b]}
    ./s --e a --f b     # kwargs:{e:[a], f:[b]}
    
    ./s a               # _:[a]

    ambiguous case example

    # n to 1 pair
    ./s -cd a           # args:{c:[a], d:[a]}
    ./s -c -d a         # args:{c:[a], d:[a]}
    ./s -c -d --f b     # args:{c:[b], d:[b]}, kwargs:{f:[b]}
    
    # other example
    ./s a -cd b g       # _:[a], args:{c:[b,g], d:[b,g]}
    ./s a --f b g       # _:[a], kwargs:{f:[b,g]}
    ./s a b g           # _:[a,b,g]
    ./s a -c abg        # _:[a], args:{c:[a,b,g]}
    ./s a --ef b g      # _:[a], kwargs:{ef:[b,g]}
    
    ./s a -cd           # _:[a], args:{c:[], d:[]}
    ./s a -cd g -cd     # _:[a], args:{c:[], d:[]}
    ./s a ---ef         # _:[a], kwargs:{ef:[]}

    version >= 1.1.0

    ./s -cd=a           # args:{c:[a], d:[a]}

    Keywords

    none

    Install

    npm i yargs-lite

    DownloadsWeekly Downloads

    15

    Version

    1.1.2

    License

    MIT

    Unpacked Size

    9.99 kB

    Total Files

    9

    Last publish

    Collaborators

    • truth1984