/
index.ts
36 lines (32 loc) · 1.19 KB
/
index.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
import * as args from './args'
import Deps from './deps'
import * as flags from './flags'
import {Parser} from './parse'
import {FlagInput, Input, ParserOutput} from '../interfaces'
import * as Validate from './validate'
export {args}
export {flags}
export {flagUsages} from './help'
// eslint-disable-next-line new-cap
const m = Deps()
// eslint-disable-next-line node/no-missing-require
.add('validate', () => require('./validate').validate as typeof Validate.validate)
export async function parse<TFlags, GFlags, TArgs extends { [name: string]: string }>(argv: string[], options: Input<TFlags, GFlags>): Promise<ParserOutput<TFlags, GFlags, TArgs>> {
const input = {
argv,
context: options.context,
args: (options.args || []).map((a: any) => args.newArg(a as any)),
'--': options['--'],
flags: {
color: flags.defaultFlags.color,
...options.flags,
} as FlagInput<any>,
strict: options.strict !== false,
}
const parser = new Parser(input)
const output = await parser.parse()
m.validate({input, output})
return output as ParserOutput<TFlags, GFlags, TArgs>
}
const {boolean, integer, url, directory, file} = flags
export {boolean, integer, url, directory, file}