@thisismanta/pessimist
TypeScript icon, indicating that this package has built-in type declarations

1.2.0 • Public • Published
import { parseArguments } from '@thisismanta/pessimist'

const args = parseArguments(
    process.argv.slice(2), 
    {
        dryRun: false,
        count: 0,
        outputFileName: '',
        exclude: [],
    }
)
node myfile file1 file2--output-file-name=file3 

The above command yields args of the following type.

{
    // From the field-value arguments
    outputFileName: 'file3',

    // From the defaults
    dryRun: false,
    count: 0,
    exclude: [],

    // From the positional arguments
    '0': 'file1', 
    '1': 'file2',
    length: 2,
}

Unknown field rejection

The below commands exit with non-zero code as somethingElse is not defined in the default object (the second parameter of parseArguments function).

node myfile --something-else

Therefore it is important to have all the possible field-value arguments defined in the default object.

Auto camel case conversion

The below commands yield the same output as dry-run is transformed into a camel case.

node myfile --dryRun
node myfile --dry-run

Field aliases

The below commands yield the same output as -d is an alias of --dryRun which is defined in the extra options.

parseArguments(
    process.argv.slice(2), 
    {
        dryRun: false,
    },
    {
        aliases: [['d', 'dryRun'], ...],
    }
)
node myfile --dryRun
node myfile -d

False-like Boolean recognition

The below commands yield the same output.

node myfile --dryRun=false
node myfile --dryRun=False
node myfile --dryRun=FALSE
node myfile --dryRun=n
node myfile --dryRun=no
node myfile --dryRun=0

Negation and clearance

The below commands yield dryRun === false as no prefix negates the Boolean value.

node myfile --noDryRun
node myfile --no-dry-run

The below commands yield outputFileName === '' as no prefix sets the value to an empty string.

node myfile --noOutputFileName
node myfile --no-output-file-name

The below commands yield input == [] as no prefix sets the value to an empty array.

node myfile --noExclude
node myfile --no-exclude

Duplicate-free guarantee

The below commands yield input: ['file2', 'file1'] as it does not keep duplicate values.

node myfile --exclude=file1 --exclude=file2 --exclude=file1

Mutual exclusive fields

The below command throws an error as both fields are defined as mutually exclusive in the extra options.

parseArguments(
    process.argv.slice(2), 
    {
        dryRun: false,
        confirmed: true,
    },
    {
        exclusives: [['dryRun', 'confirmed'], ...],
    }
)
node myfile --dryRun --confirmed

Readme

Keywords

Package Sidebar

Install

npm i @thisismanta/pessimist

Weekly Downloads

28,290

Version

1.2.0

License

ISC

Unpacked Size

9.86 kB

Total Files

6

Last publish

Collaborators

  • thisismanta