A tiny package to parse CLI flags and arguments into an object.
yarn add arge
# or
npm i arge
const { arge } = require('arge')
// or
import { arge } from 'arge'
Then:
const args = arge(process.argv)
This will return arguments parsed from process.argv
like this:
node app.js --dry-run --mode=development --test=false --retries=100
...into an object similar to below:
{
"dryRun": true,
"mode": "development",
"test": false,
"retries": 100
}
For type safety, arge
will accept a generic for typing the resulting object.
const { foo, bar } = arge(process.argv)
In the above scenario, foo
and bar
will report the following:
Property 'foo' does not exist on type 'unknown'
Property 'bar' does not exist on type 'unknown'
To address this, we can apply a generic:
interface Args {
foo: string
bar: number
}
const { foo, bar } = arge<Args>(process.argv)
Returns a key-value pairs object of flags
Type: string[]
Type: object | undefined
Type: boolean
Default: true
By default, the arge
function assumes that you have passed process.argv
. It does this because:
The first element will be process.execPath.
The second element will be the path to the JavaScript file being executed
https://nodejs.org/docs/latest/api/process.html#processargv
This package will omit those two items from the output.
If you wanted to pass an arbitrary array of flags that don't come from process.argv
, you can set this option to false
.
For example
const flags = [
'--dry-run',
'--mode=development',
'--test=false',
'--retries=100',
]
const args = arge(flags, { isArgv: false })
This would then output:
{
"dryRun": true,
"mode": "development",
"test": false,
"retries": 100
}
Type: boolean
Default: true
This converts hyphen separated keys into camel case. To prevent this behaviour, you can set this value to false
.
const flags = ['--dry-run']
const args = arge(flags, { camelCaseKeys: false })
This would then output:
{
"dry-run": true
}