zena:args
import {…} from 'zena:args';
Command-line argument parsing with flags, options, positional arguments, subcommands, and help text generation.
Examples ​
import { ArgParser, OptionType } from 'zena:args';
import { getArguments } from 'zena:cli';
let parser = new ArgParser('mytool')
.addOption('verbose', {
type: OptionType.Flag,
abbr: 'v',
help: 'Enable verbose logging',
})
.addOption('output', {
abbr: 'o',
defaultVal: 'out.txt',
help: 'Output file path',
});
let parsed = parser.parse(getArguments(), 1);
let verbose = parsed.getFlag('verbose');
let output = parsed.getOption('output') ?? 'out.txt';
Classes
ParsedValue
sealed class ParsedValue
A parsed command-line option value.
ParsedArgs
class ParsedArgs
The results of parsing command-line arguments.
new()
options: HashMap<String, ParsedValue>
The parsed options by name.
rest: GrowableArray<String>
Positional arguments not consumed as options or subcommands.
commandName: String | null
The subcommand invoked, or null if no subcommand was matched.
commandArgs: ParsedArgs | null
The parsed arguments for the invoked subcommand, or null.
getFlag(name: String): boolean
Returns true if the named boolean flag was set, or its default value.
getOption(name: String): inline (true, String) | inline (false, _)
Returns the value of the named option as an inline tuple:
(true, value) if the option was set, or (false, _) if not.
To fallback to a default value, use getOption(name) ?? fallback.
getInt(name: String): inline (true, i32) | inline (false, _)
Returns the integer value of the named option, or fallback if not set
or not a valid integer.
getMultiOption(name: String): Array<String>
Returns all values passed for a repeatable multi-option.
get(name: String): inline (true, ParsedValue) | inline (false, _)
Returns the parsed value for the named option, or not found.
hasOption(name: String): boolean
Returns true if the option was passed on the command line or has a default.
ArgParser
class ArgParser
Configurable command-line argument parser.
ArgParser defines options, flags, and subcommands, parses raw argument
strings
(e.g. from zena:cli's getArguments()), and formats standard --help
usage messages.
Defining Options & Commands ​
Options and subcommands can be configured either declaratively in the
constructor
(or new ArgParser.fromConfig(config)), or incrementally with addOption
and addCommand:
let parser = new ArgParser('mytool', 'A sample CLI utility', {
'verbose' => {type: OptionType.Flag, abbr: 'v', help: 'Enable verbose
output'},
'output' => {abbr: 'o', help: 'Output file path', defaultVal: 'out.txt'},
'count' => {type: OptionType.Int, abbr: 'n', help: 'Number of items'},
}, {
'build' => {help: 'Build the project', options: {'release' => {type:
OptionType.Flag}}},
});
Supported Argument Syntax ​
- Flags:
--flag, short-f, negated--no-flag, or combined short flags-vfg - Options:
--opt value,--opt=value,-o value,-o=value, or attached-oval - Delimiter:
--treats all subsequent arguments as positional rest values - Subcommands: Dispatched to the matching subcommand's parser
Call parser.parse(args, startIndex) to produce a ParsedArgs instance, or
parser.formatHelp() to generate usage documentation.
addOption(name: String, config: OptionConfig = {}): ArgParser
Adds an option declaratively.
addOptions(options: Map<String, OptionConfig>): ArgParser
Adds multiple options declaratively from a map.
addCommand(name: String, config: CommandConfig = {}): ArgParser
Adds a subcommand with its own parser.
addCommands(commands: Map<String, CommandConfig>): ArgParser
Adds multiple subcommands declaratively from a map.
parse(args: Array<String>, startIndex: i32 = 0): ParsedArgs
Parses the given array of argument strings.
formatHelp(): String
Formats a standard help and usage message.
Enums
OptionType
enum OptionType
The type of a command-line option.
Type aliases
OptionConfig
type OptionConfig = {name?: String, type?: OptionType, abbr?: String, defaultVal?: String | null, allowed?: Array<String> | null, help?: String, description?: String}
Configuration for a single command-line option.
CommandConfig
type CommandConfig = {description?: String, help?: String, options?: Map<String, OptionConfig>}
Configuration for a subcommand.
ParserConfig
type ParserConfig = {name: String, description?: String, help?: String, options?: Map<String, OptionConfig>, commands?: Map<String, CommandConfig>}
Configuration for an entire command-line parser.
Functions
parseArgs
function parseArgs(args: Array<String>, options: Map<String, OptionConfig>, offset: i32 = 0): ParsedArgs
Convenience function to parse arguments using a map of option specifications.