1.2.1 • Published 3 months ago

args.ts v1.2.1

Weekly downloads
-
License
OSL-3.0
Repository
github
Last release
3 months ago

args.ts

An argument parser, similar to yargs and co, but with superiour typing, extensibility, and ease of use.

Getting started

First, install the package from npm: npm i args.ts. Then, you can get up and running with the following sample:

import { Args, ParserOpts, a } from 'args.ts'


export const parserOpts: ParserOpts = {
  programName: 'program-name',
  programDescription: 'program description',
  programVersion: 'v1.0',
}

const parser = new Args(parserOpts)
    // Short arguments are optional, long arguments are required
    .arg(['--long-arg', '-l'], a.string())
    // You can chain calls to type to change how it is parsed
    // and this will reflect in the parsed types, if appropriate
    .arg(['--optional'], a.string().optional()) 

const result = await parser.parse('-l "hello world"') 

// Make sure we only parsed args, and did not accept a subcommand etc
if (result.mode !== 'args') {
  throw new Error('expected args')
}

const args = result.args
// { 'long-arg': 'hello world', optional: undefined }

args.ts can parse Numbers, Booleans and Strings by default, but you can add your own types with the Custom type, or with a custom argument class:

// Must use "verbose style" returns in callbacks
const myCustomCallback = async (value: string): Promise<CoercionResult<number>> => {
    if (value == 'success') {
      return {
        ok: true,
        passedValue: value,
        returnedValue: 69
      }
    }

    return {
      ok: false,
      passedValue: value,
      error: new Error('error whilst parsing')
    }
}

// Then, use the custom parser:
parser.arg(['--custom'], a.custom(myCustomCallback))
// Can use "compact" returns through the inherited helper
class CustomParseClass extends Argument<number> {
  constructor () {
    super('custom')
  }

  public async coerce (value: string): Promise<CoercionResult<number>> {
    if (value === 'success') {
        return this.ok(value, 69)
    }

    return this.err(value, new Error('error whilst coercing'))
  }
}
// Then, use the custom parser
parser.arg(['--custom'], new CustomParseClass())

These fetchers can both be async, and the parser will await all promises returned.

You can look at the examples/ directory and the tests for a more up to date and feature complete usage guide!

Documentation

The API docs are hosted here, on Github Pages

1.2.1

3 months ago

1.1.1

9 months ago

1.1.0

9 months ago

1.0.4

9 months ago

1.0.2

10 months ago

1.0.1

10 months ago

1.0.0

10 months ago