npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

chopsticks

v0.6.0

Published

more greedy argument parser like a minimist!

Downloads

33

Readme

Chopsticks

Installation

npm install chopsticks --save

Usage

chopsticks(args, opts={}) -> argv

  • [x] opts.string
  • [x] opts.boolean
  • [x] opts.alias
  • [x] opts.default
  • [x] opts.stopEarly
  • [x] opts.dash (aka opts['--'])
  • [x] opts.unknown

minimist-v1.2.0 spec completed.

New features

  • [x] Emoji support :+1: - can use emoji to short flags.

    node -e 'console.log(require("minimist")(["-🍣👹👺"]))'
    # { _: [], '�': '�👹👺' }
    
    node -e 'console.log(require("chopsticks")(["-🍣👹👺"]))'
    # { '🍣': true, '👹': true, '👺': true, _: [] }
  • [x] opts.unknown=true - return the detailed object at argv.unknown.

    parse(['-f', 'true', '--no-foo', 'true', 'noop!', '--', 'huh'], { unknown: true });
    // {
    //   "_": [
    //     "huh"
    //   ],
    //   "unknown": [
    //     Flag { type: 'short', name: 'f', value: 'true' },
    //     Flag { type: 'long', name: 'foo', value: false },
    //     "true",
    //     "noop!"
    //   ]
    // }
  • [x] opts.array - the specified flag takes the following argument continually. (like a npm-run-all)

    // $ node program.js -s cover lint report -s foo bar baz -- huh
    parse(process.argv.slice(2), { array: 's' });
    // {
    //   "_": [
    //     "huh"
    //   ],
    //   "s": [
    //     ['cover', 'lint', 'report'],
    //     ['foo', 'bar', 'baz']
    //   ]
    // }
  • [x] opts.object - if specify flag names, the value of the specify flag is handled as key of the object.

    // $ node program.js -x one --y.two foo -z=three.baz
    parse(process.argv.slice(2), { object: ['x', 'y', 'z'] });
    // {
    //   _: [],
    //   x: {
    //     one: true,
    //   },
    //   y: {
    //     two: 'foo',
    //   },
    //   z: {
    //     three: {
    //       baz: true,
    //     },
    //   },
    // },

    if true, will handle all long flag without equal signs as object (e.g. affects --foo, not -f or --foo=bar)

  • [x] opts.sentence - if true, argument with right-comma/right-period, is defined in "sentence". (like an abigail)

    // $ node program.js lorem. cover, lint, report. 'foo bar', baz. huh -- huh
    parse(process.argv.slice(2), { sentence: true });
    // {
    //   "_": [
    //     "huh",
    //     "huh"
    //   ],
    //   "sentence": [
    //     ['lorem'],
    //     ['cover', 'lint', 'report'],
    //     ['foo bar', 'baz']
    //   ]
    // }
  • [x] Relative Filename Flag - if the flag name begins with a dot(e.g. --./path/to/file), it handled as a flag name.

    // $ node program.js --use-popular-plugin --./my-extra-plugin.js customValue
    parse(process.argv.slice(2));
    // {
    //   'use-popular-plugin': true,
    //   './my-extra-plugin.js': 'customValue',
    //   _: []
    // }
  • [x] opts.nest - if true, recursively parsing the inside of brackets ([]). like a browserify syntax(aka subarg)

    // $ node program.js rawr --beep [ boop -a 3 ] -n4 --robots [ -x 8 -y 6 ]
    parse(process.argv.slice(2), { nest: true });
    // { _: [ 'rawr' ],
    // beep: { _: [ 'boop' ], a: 3 },
    // n: 4,
    // robots: { _: [], x: 8, y: 6 } }

Stacktrace was broken

node
> require('chopsticks')('error')
# TypeError: args is not an array
# at n.u.createClass.value (/path/to/chopsticks/lib/index.js:1:59798)

published code is compressed and the source map is provided. sourcemap isn't supported on NodeJS(current v5.10.0). but this resolved in the node-source-map-support.

npm install source-map-support --save-dev
import 'source-map-support/register';

or...

$ mocha --require source-map-support/register

you can check the original line number.

$ node
require('source-map-support/register');
require('chopsticks')('error');
# TypeError: args is not an array
#    at n.u.createClass.value (/Users/59naga/Downloads/chopsticks/src/Chopsticks.js:58:13)

Development

Requirement global

  • NodeJS v5.10.0
  • Npm v3.8.3
git clone https://github.com/59naga/chopsticks
cd chopsticks
npm install

npm test

License

MIT