The mighty option parser used by yargs for parsing command-line arguments with extensive configuration options.
npx @tessl/cli install tessl/npm-yargs-parser@22.0.0yargs-parser is the mighty option parser used by yargs for parsing command-line arguments. It provides comprehensive argument parsing capabilities with extensive configuration options, supporting various data types, complex option configurations, and advanced parsing features like dot-notation, camel-case expansion, and configurable parsing behaviors.
npm install yargs-parserESM (ES Modules):
import parser from "yargs-parser";
// Individual utilities (separate import paths)
import { camelCase, decamelize, looksLikeNumber } from "yargs-parser";
import { tokenizeArgString } from "yargs-parser/build/lib/tokenize-arg-string.js";CommonJS:
const parser = require("yargs-parser");
// Access utilities via parser object
const { camelCase, decamelize, looksLikeNumber } = parser;<script type="module">
import parser from "https://unpkg.com/yargs-parser@22.0.0/browser.js";
// Utilities are available on the parser object
const { camelCase, decamelize, looksLikeNumber } = parser;
// Note: tokenizeArgString and config file loading not supported in browser
</script>import parser from "https://deno.land/x/yargs_parser/deno.ts";
// or from specific version:
// import parser from "https://deno.land/x/yargs_parser@v22.0.0/deno.ts";
// Utilities available on parser object
const { camelCase, decamelize, looksLikeNumber } = parser;
// Note: Only .json config files supported in Denoimport parser from "yargs-parser";
// Parse process arguments
const argv = parser(process.argv.slice(2));
console.log(argv);
// Parse string directly
const result = parser("--foo=99 --bar hello -x 33");
console.log(result);
// Output: { _: [], foo: 99, bar: 'hello', x: 33 }
// Parse with options
const parsed = parser(['--name', 'Alice', '--age', '25', '--verbose'], {
string: ['name'],
number: ['age'],
boolean: ['verbose']
});
console.log(parsed);
// Output: { _: [], name: 'Alice', age: 25, verbose: true }yargs-parser is built around several key components:
Main argument parsing functionality that converts command-line arguments into structured JavaScript objects with extensive configuration options.
function parser(args: string | any[], opts?: Partial<Options>): Arguments;
interface Arguments {
_: (string | number)[];
'--'?: (string | number)[];
[argName: string]: any;
}Advanced parsing mode that returns comprehensive information including error details, alias mappings, and parsing metadata.
function parser.detailed(args: string | any[], opts?: Partial<Options>): DetailedArguments;
interface DetailedArguments {
argv: Arguments;
error: Error | null;
aliases: Dictionary<string[]>;
newAliases: Dictionary<boolean>;
defaulted: Dictionary<boolean>;
configuration: Configuration;
}Comprehensive parsing behavior configuration with 18+ options controlling how arguments are interpreted and processed.
interface Configuration {
'boolean-negation': boolean;
'camel-case-expansion': boolean;
'combine-arrays': boolean;
'dot-notation': boolean;
'duplicate-arguments-array': boolean;
'flatten-duplicate-arrays': boolean;
'greedy-arrays': boolean;
'halt-at-non-option': boolean;
'nargs-eats-options': boolean;
'negation-prefix': string;
'parse-positional-numbers': boolean;
'parse-numbers': boolean;
'populate--': boolean;
'set-placeholder-key': boolean;
'short-option-groups': boolean;
'strip-aliased': boolean;
'strip-dashed': boolean;
'unknown-options-as-args': boolean;
}Parsing hints and type specifications that control how individual arguments are processed and coerced.
interface Options {
alias: Dictionary<string | string[]>;
array: ArrayOption | ArrayOption[];
boolean: string | string[];
config: string | string[] | Dictionary<boolean | ConfigCallback>;
configObjects: Dictionary<any>[];
configuration: Partial<Configuration>;
coerce: Dictionary<CoerceCallback>;
count: string | string[];
default: Dictionary<any>;
envPrefix?: string;
narg: Dictionary<number>;
normalize: string | string[];
string: string | string[];
number: string | string[];
__: (format: any, ...param: any[]) => string;
key: Dictionary<any>;
}Built-in utility functions for string manipulation and number detection that are also exposed as part of the public API.
function parser.camelCase(str: string): string;
function parser.decamelize(str: string, joinString?: string): string;
function parser.looksLikeNumber(x: null | undefined | number | string): boolean;Low-level utility for tokenizing argument strings into arrays, handling quoted strings and escape sequences.
function tokenizeArgString(argString: string | any[]): string[];type ArgsInput = string | any[];
type ArgsOutput = (string | number)[];
interface Dictionary<T = any> {
[key: string]: T;
}interface Parser {
(args: ArgsInput, opts?: Partial<Options>): Arguments;
detailed(args: ArgsInput, opts?: Partial<Options>): DetailedArguments;
camelCase(str: string): string;
decamelize(str: string, joinString?: string): string;
looksLikeNumber(x: null | undefined | number | string): boolean;
}type ArrayOption = string | {
key: string;
boolean?: boolean;
string?: boolean;
number?: boolean;
integer?: boolean;
};
type CoerceCallback = (arg: any) => any;
type ConfigCallback = (configPath: string) => { [key: string]: any } | Error;// Utility types for working with keys and values
type KeyOf<T> = {
[K in keyof T]: string extends K ? never : number extends K ? never : K
} extends { [_ in keyof T]: infer U } ? U : never;
type ValueOf<T> = T extends (infer U)[] ? U : T[keyof T];
// Internal flag management types
type StringFlag = Dictionary<string[]>;
type BooleanFlag = Dictionary<boolean>;
type NumberFlag = Dictionary<number>;
type ConfigsFlag = Dictionary<string | string[] | boolean | ConfigCallback>;
type CoercionsFlag = Dictionary<CoerceCallback>;
type KeysFlag = string[];
interface Flags {
aliases: StringFlag;
arrays: BooleanFlag;
bools: BooleanFlag;
strings: BooleanFlag;
numbers: BooleanFlag;
counts: BooleanFlag;
normalize: BooleanFlag;
configs: ConfigsFlag;
nargs: NumberFlag;
coercions: CoercionsFlag;
keys: KeysFlag;
}
type Flag = ValueOf<Omit<Flags, 'keys'>>;
type FlagValue = ValueOf<Flag>;
type FlagsKey = KeyOf<Omit<Flags, 'keys'>>;
type ArrayFlagsKey = Extract<FlagsKey, 'bools' | 'strings' | 'numbers'>;
// Parser mixin interface for platform-specific implementations
interface YargsParserMixin {
cwd: Function;
format: Function;
normalize: Function;
require: Function;
resolve: Function;
env: Function;
}
// Default values configuration
enum DefaultValuesForTypeKey {
BOOLEAN = 'boolean',
STRING = 'string',
NUMBER = 'number',
ARRAY = 'array',
}
interface DefaultValuesForType {
[DefaultValuesForTypeKey.BOOLEAN]: boolean;
[DefaultValuesForTypeKey.STRING]: string;
[DefaultValuesForTypeKey.NUMBER]: undefined;
[DefaultValuesForTypeKey.ARRAY]: any[];
}
type OptionsDefault = ValueOf<Pick<Required<Options>, 'default'>>;