@anycli/parser
Advanced tools
Comparing version 3.0.2 to 3.0.3
@@ -0,1 +1,9 @@ | ||
<a name="3.0.3"></a> | ||
## [3.0.3](https://github.com/anycli/parser/compare/7696da86d829776267d2a41f02c4fdad41a8cbc4...v3.0.3) (2018-02-01) | ||
### Bug Fixes | ||
* added options to flags/args ([6a33b06](https://github.com/anycli/parser/commit/6a33b06)) | ||
<a name="3.0.2"></a> | ||
@@ -2,0 +10,0 @@ ## [3.0.2](https://github.com/anycli/parser/compare/014b773c2ef72cd23e4d2aef03f3584aaf5cf9cc...v3.0.2) (2018-02-01) |
@@ -9,2 +9,3 @@ export declare type ParseFn<T> = (input: string) => T; | ||
default?: T | (() => T); | ||
options?: string[]; | ||
} | ||
@@ -18,2 +19,3 @@ export interface ArgBase<T> { | ||
input?: string; | ||
options?: string[]; | ||
} | ||
@@ -20,0 +22,0 @@ export declare type RequiredArg<T> = ArgBase<T> & { |
import { Arg } from './args'; | ||
import { IFlag } from './flags'; | ||
import * as flags from './flags'; | ||
import { ParserInput, ParserOutput } from './parse'; | ||
export interface ICLIParseErrorOptions { | ||
parse: { | ||
input: ParserInput; | ||
output: ParserOutput<any, any>; | ||
input?: ParserInput; | ||
output?: ParserOutput<any, any>; | ||
}; | ||
@@ -23,5 +23,5 @@ } | ||
export declare class RequiredFlagError extends CLIParseError { | ||
flags: IFlag<any>[]; | ||
flags: flags.IFlag<any>[]; | ||
constructor({flags, parse}: ICLIParseErrorOptions & { | ||
flags: IFlag<any>[]; | ||
flags: flags.IFlag<any>[]; | ||
}); | ||
@@ -35,1 +35,9 @@ } | ||
} | ||
export declare class FlagInvalidOptionError extends CLIParseError { | ||
args: string[]; | ||
constructor(flag: flags.IOptionFlag<any>, input: string); | ||
} | ||
export declare class ArgInvalidOptionError extends CLIParseError { | ||
args: string[]; | ||
constructor(arg: Arg<any>, input: string); | ||
} |
@@ -43,1 +43,15 @@ "use strict"; | ||
exports.UnexpectedArgsError = UnexpectedArgsError; | ||
class FlagInvalidOptionError extends CLIParseError { | ||
constructor(flag, input) { | ||
const message = `Expected --${flag.name}=${input} to be one of: ${flag.options.join(', ')}`; | ||
super({ parse: {}, message }); | ||
} | ||
} | ||
exports.FlagInvalidOptionError = FlagInvalidOptionError; | ||
class ArgInvalidOptionError extends CLIParseError { | ||
constructor(arg, input) { | ||
const message = `Expected ${input} to be one of: ${arg.options.join(', ')}`; | ||
super({ parse: {}, message }); | ||
} | ||
} | ||
exports.ArgInvalidOptionError = ArgInvalidOptionError; |
@@ -27,2 +27,3 @@ import { AlphabetLowercase, AlphabetUppercase } from './alphabet'; | ||
input: string[]; | ||
options?: string[]; | ||
}; | ||
@@ -48,4 +49,2 @@ export declare type Definition<T> = { | ||
export declare const integer: Definition<number>; | ||
declare const _enum: <T = string>(opts: EnumFlagOptions<T>) => Definition<T>; | ||
export { _enum as enum }; | ||
export declare function option<T>(options: { | ||
@@ -52,0 +51,0 @@ parse: IOptionFlag<T>['parse']; |
@@ -22,8 +22,2 @@ "use strict"; | ||
}); | ||
const _enum = (opts) => build(Object.assign({ parse(input) { | ||
if (!opts.options.includes(input)) | ||
throw new Error(`Expected --${this.name}=${input} to be one of: ${opts.options.join(', ')}`); | ||
return input; | ||
}, helpValue: `(${opts.options.join('|')})` }, opts, { optionType: 'enum' })); | ||
exports.enum = _enum; | ||
function option(options) { | ||
@@ -30,0 +24,0 @@ return build(Object.assign({ optionType: 'custom' }, options))(); |
@@ -32,3 +32,3 @@ import { Arg } from './args'; | ||
export declare class Parser<T extends ParserInput, TFlags extends OutputFlags<T['flags']>, TArgs extends OutputArgs<T['args']>> { | ||
readonly input: T; | ||
private readonly input; | ||
private readonly argv; | ||
@@ -35,0 +35,0 @@ private readonly raw; |
@@ -5,2 +5,3 @@ "use strict"; | ||
const _ = require("lodash"); | ||
const Errors = require("./errors"); | ||
let debug; | ||
@@ -136,3 +137,7 @@ try { | ||
else { | ||
const value = flag.parse ? flag.parse(token.input) : token.input; | ||
const input = token.input; | ||
if (flag.options && !flag.options.includes(input)) { | ||
throw new Errors.FlagInvalidOptionError(flag, input); | ||
} | ||
const value = flag.parse ? flag.parse(input) : input; | ||
if (flag.multiple) { | ||
@@ -170,2 +175,5 @@ flags[token.flag] = flags[token.flag] || []; | ||
if (arg) { | ||
if (arg.options && !arg.options.includes(token.input)) { | ||
throw new Errors.ArgInvalidOptionError(arg, token.input); | ||
} | ||
args[i] = arg.parse(token.input); | ||
@@ -172,0 +180,0 @@ } |
{ | ||
"name": "@anycli/parser", | ||
"description": "arg and flag parser for anycli", | ||
"version": "3.0.2", | ||
"version": "3.0.3", | ||
"author": "Jeff Dickey @jdxcode", | ||
@@ -6,0 +6,0 @@ "bugs": "https://github.com/anycli/parser/issues", |
30072
699