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

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

const { count, dryRun, outputFileName, ...positionalArguments } =
parseArguments(
  process.argv.slice(2), 
  {
    count: 0,
    dryRun: false,
    outputFileName: '',
    exclude: [],
  }
)

for (const item of Array.from(positionalArguments)) {
  // ...
}
file1 file2 --count=3 --output-file-name=file3
{
  // From the positional arguments
  '0': 'file1', 
  '1': 'file2',
  length: 2,

  // From the named arguments
  outputFileName: 'file3',
  dryRun: true,

  // From the defaults
  count: 0,
  exclude: [],
}

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).

--something-else
# Error: Unexpected an unknown argument: --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 because dry-run is transformed into a camel case.

--dryRun  # { dryRun: true }
--dry-run # { dryRun: true }

False-like Boolean recognition

The below commands yield the same output.

--dryRun=false # { dryRun: false }
--dryRun=False
--dryRun=FALSE
--dryRun=n
--dryRun=no
--dryRun=0

Negation and clearance

Having no argument prefix negates the Boolean value.

--noDryRun         # { dryRun: false }
--no-dry-run       # { dryRun: false }
--no-dry-run=false # { dryRun: true }

Having no argument prefix clears the string value.

--noOutputFileName    # { outputFileName: '' }
--no-output-file-name # { outputFileName: '' }

Having no argument prefix for an array removes the given value from the output array.

--exclude=file1 --exclude=file2 --no-exclude=file1
# { exclude: ['file2'] }

Duplicate-free guarantee

--exclude=file1 --exclude=file2 --exclude=file1
# { input: ['file2', 'file1'] }

Field aliases

parseArguments(
  process.argv.slice(2), 
  { dryRun: false },
  { aliases: { d: 'dryRun', commit: '!dryRun' } }
)
node myfile --dryRun # { dryRun: true }
node myfile -d       # { dryRun: true }

However, the below commands yield the opposite outputs because ! prefix negates the value from commit.

node myfile --commit    # { dryRun: false }
node myfile --noCommit  # { dryRun: true }
node myfile --no-commit # { dryRun: true }

Mutual exclusive fields

parseArguments(
  process.argv.slice(2), 
  {
    dryRun: false,
    confirmed: true,
  },
  {
    exclusives: [['dryRun', 'confirmed'], ...],
  }
)
--dryRun --confirmed
# Error: Unexpected mutual exclusive arguments: --dryRun --confirmed

Readme

Keywords

Package Sidebar

Install

npm i @thisismanta/pessimist

Weekly Downloads

21,567

Version

3.0.0

License

ISC

Unpacked Size

14 kB

Total Files

8

Last publish

Collaborators

  • thisismanta