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

getopts

v2.3.0

Published

Parse CLI arguments.

Downloads

7,095,006

Readme

Getopts

Parse CLI arguments.

  • Lightweight drop-in replacement for minimist and clones.
  • Small (180 LOC), focused, no dependencies.
  • Up to 6x faster than alternatives!

Break up command-line arguments into key-value pairs for easy look-up and retrieval. Built upon utility conventions that have been used for decades, Getopts sane defaults help you write CLI tools that look and feel like the real deal.

$ example --type=module -o main.js *.{js,json}
import getopts from "getopts"

const options = getopts(process.argv.slice(2), {
  alias: {
    output: ["o", "f"],
    type: "t",
  },
})

The result is an object populated with all the parsed arguments.

{
  _: ["index.js", "package.json"],
  output: "main.js",
  type: "module",
  o: "main.js",
  f: "main.js",
  t: "module",
}

Installation

npm install getopts

Parsing rules

Short options

A short option consists of a - followed by a single alphabetic character. Multiple options can be grouped together without spaces. Short options are boolean by default unless followed by an operand (non-option) or if adjacent to any non-alphabetic characters:

getopts(["-ab", "-c"]) //=> { _: [], a:true, b:true, c:true }
getopts(["-a", "alpha"]) //=> { _: [], a:"alpha" }
getopts(["-abc1"]) //=> { _: [], a:true, b:true, c:1 }

Use opts.string to parse an option as a string regardless.

getopts(["-kF12"], {
  string: ["k"],
}) //=> { _: [], k:"F12" }

The first operand following an option will be used as its value. Use opts.boolean to specify that an option should be parsed as a boolean regardless, causing the following argument to be treated as an operand instead.

getopts(["-a", "alpha"], {
  boolean: ["a"],
}) //=> { _: ["alpha"], a:true }

Any character listed in the ASCII table can be used as a short option if it's the first character after the dash.

getopts(["-9", "-#10", "-%0.01"]) //=> { _:[], 9:true, #:10, %:0.01 }

Long options

A long option consists of a -- followed by a name and a value separated by an =. Long options without a value are boolean by default.

getopts(["--turbo", "--warp=10"]) //=> { _: [], turbo:true, warp:10 }
getopts(["--warp=e=mc^2"]) //=> { _: [], warp:"e=mc^2" }
getopts(["--@", "alpha"]) //=> { _: [], @:"alpha" }

Negated options start with --no- and are always false.

getopts(["--no-turbo"]) //=> { _: [], turbo:false }

Operands

Every non-option argument is an operand. Operands are saved to the result._ operands array.

getopts(["alpha", "-w9", "bravo"]) //=> { _: ["alpha", "bravo"], w:9 }
getopts(["--code=alpha", "bravo"]) //=> { _: ["bravo"], code:"alpha" }

Everything after a standalone -- is an operand.

getopts(["--alpha", "--", "--bravo", "--turbo"]) //=> { _:["--bravo", "--turbo"], alpha:true }

A single - is also treated as an operand.

getopts(["--turbo", "-"]) //=> { _:["-"], turbo:true }

Other

Options specified as boolean or string will be added to the result object as false or "" (even if missing from the arguments array).

getopts([], {
  string: ["a"],
  boolean: ["b"],
}) //=> { _:[], a:"", b:false }

Repeated options are stored as arrays with every value in order of appearance.

getopts(["-x?alpha=bravo", "-x3.14", "-x"] //=> { _:[], a:["?alpha=bravo", 3.14, true] }

A value may contain newlines or other control characters.

getopts(["--text=top\n\tbottom"]) //=> { _:[], text:"top\n\tbottom" }

="false" is converted to boolean by default.

getopts(["--turbo=false"]) //=> { _:[], turbo:false }

API

getopts(argv, opts)

Parse command-line arguments. Returns an object mapping argument names to their values.

argv[]

An array of arguments, usually process.argv.

opts.alias

An object of option aliases. An alias can be a string or an array of strings. Aliases let you declare substitute names for an option, e.g., the short (abbreviated) and long (canonical) variations.

getopts(["-t"], {
  alias: {
    turbo: ["t", "T"],
  },
}) //=> { _:[], t:true, T:true, turbo:true }

opts.boolean

An array of options to parse as boolean. In the example below, t is parsed as a boolean, causing the following argument to be treated as an operand.

getopts(["-t", "alpha"], {
  boolean: ["t"],
}) //=> { _:["alpha"], t:true }

opts.string

An array of flags to parse as strings. In the example below, t is parsed as a string, causing all adjacent characters to be treated as a single value and not as individual options.

getopts(["-atabc"], {
  string: ["t"],
}) //=> { _:[], a:true, t:"abc" }

opts.default

An object of default values for options not present in the arguments array.

getopts(["--warp=10"], {
  default: {
    warp: 15,
    turbo: true,
  },
}) //=> { _:[], warp:10, turbo:true }

opts.unknown()

We call this function for each unknown option. Return false to discard the option. Unknown options are those that appear in the arguments array, but are not in opts.string, opts.boolean, opts.default, or opts.alias.

getopts(["-abc"], {
  unknown: (option) => "a" === option,
}) //=> { _:[], a:true }

opts.stopEarly

A boolean property. If true, the operands array _ will be populated with all the arguments after the first operand.

getopts(["-w9", "alpha", "--turbo", "bravo"], {
  stopEarly: true,
}) //=> { _:["alpha", "--turbo", "bravo"], w:9 }

This property is useful when implementing sub-commands in a CLI.

import getopts from "getopts"
import { install, update, uninstall } from "./commands.js"

const options = getopts(process.argv.slice(2), {
  stopEarly: true,
})

const [command, subargv] = options._

if (command === "install") {
  install(subargv)
} else if (command === "update") {
  update(subargv)
} else if (command === "uninstall") {
  uninstall(subargv)
}

Benchmarks

npm --prefix bench start

License

MIT