UNPKG

@thi.ng/args

Version:

Declarative, functional CLI argument/options parser, value coercions, sub-commands etc.

322 lines 9.18 kB
import { type Fn } from "@thi.ng/api/fn"; import type { ArgSpec, KVDict, KVMultiDict, Tuple } from "./api.js"; /** * Returns a full {@link ArgSpec} for a boolean flag. The mere presence of this * arg will enable the flag. * * @param spec - */ export declare const flag: <S extends Partial<ArgSpec<boolean>>>(spec: S) => S & { flag: true; default: boolean; group: string; }; /** * Returns a full {@link ArgSpec} for a string value arg. * * @param spec - */ export declare const string: <S extends Partial<ArgSpec<string>>>(spec: S) => S & { coerce: Fn<string, string>; hint: string; group: string; }; /** * Multi-arg version of {@link string}. Returns a full {@link ArgSpec} for a * multi string value arg. This argument can be provided mutiple times with * values collected into an array. * * @param spec - */ export declare const strings: <S extends Partial<ArgSpec<string[]> & { delim: string; }>>(spec: S) => S & { coerce: Fn<string[], string[]>; hint: string; multi: true; group: string; }; /** * Returns a full {@link ArgSpec} for a floating point value arg. The value * will be autoatically coerced into a number using {@link coerceFloat}. * * @param spec - */ export declare const float: <S extends Partial<ArgSpec<number>>>(spec: S) => S & { coerce: Fn<string, number>; hint: string; group: string; }; /** * Returns a full {@link ArgSpec} for a single hex integer value arg. The value * will be autoatically coerced into a number using {@link coerceHexInt}. * * @param spec - */ export declare const hex: <S extends Partial<ArgSpec<number>>>(spec: S) => S & { coerce: Fn<string, number>; hint: string; group: string; }; /** * Returns a full {@link ArgSpec} for a single integer value arg. The value * will be autoatically coerced into a number using {@link coerceInt}. * * @param spec - */ export declare const int: <S extends Partial<ArgSpec<number>>>(spec: S) => S & { coerce: Fn<string, number>; hint: string; group: string; }; /** * Multi-arg version of {@link float}. Returns a full {@link ArgSpec} for a * multi floating point value arg. This argument can be provided mutiple times * with values being coerced into numbers and collected into an array. * * @param spec - */ export declare const floats: <S extends Partial<ArgSpec<number[]> & { delim: string; }>>(spec: S) => S & { coerce: Fn<string[], number[]>; hint: string; multi: true; group: string; }; /** * Multi-arg version of {@link hex}. Returns a full {@link ArgSpec} for a multi * hex integer value arg. This argument can be provided mutiple times with * values being coerced into numbers and collected into an array. * * @param spec - */ export declare const hexes: <S extends Partial<ArgSpec<number[]> & { delim: string; }>>(spec: S) => S & { coerce: Fn<string[], number[]>; hint: string; multi: true; group: string; }; /** * Multi-arg version of {@link int}. Returns a full {@link ArgSpec} for a multi * integer value arg. This argument can be provided mutiple times with values * being coerced into numbers and collected into an array. * * @param spec - */ export declare const ints: <S extends Partial<ArgSpec<number[]> & { delim: string; }>>(spec: S) => S & { coerce: Fn<string[], number[]>; hint: string; multi: true; group: string; }; /** * Returns full {@link ArgSpec} for a JSON value arg. The raw CLI value string * will be automcatically coerced using {@link coerceJson}. * * @param spec - */ export declare const json: <T, S extends Partial<ArgSpec<T>>>(spec: S) => S & { coerce: Fn<string, T>; hint: string; group: string; }; /** * Returns full {@link ArgSpec} for an enum-like string value arg. The raw CLI * value string will be automcatically validated using {@link coerceOneOf}. * * @param opts - * @param spec - */ export declare const oneOf: <K extends string, S extends Partial<ArgSpec<K>>>(opts: readonly K[], spec: S) => S & { coerce: Fn<string, K>; hint: string; group: string; } & { desc: string; }; /** * Multi-arg version of {@link oneOf}. Returns full {@link ArgSpec} for multiple * enum-like string value args. The raw CLI value strings will be automcatically * validated using {@link coerceOneOf} and collected into an array. * * @param opts - * @param spec - */ export declare const oneOfMulti: <K extends string, S extends Partial<ArgSpec<K[]> & { delim: string; }>>(opts: readonly K[], spec: S) => S & { coerce: Fn<string[], K[]>; hint: string; multi: true; group: string; } & { desc: string; }; /** * Returns a full {@link ArgSpec} for multiple `key=value` pair args, coerced * into a result object. * * @remarks * The default delimiter (`=`) can be overridden. Also by default, key-only args * are allowed and will receive a `"true"` as their value. However, if `strict` * is true, only full KV pairs are allowed. * * @param spec - * @param delim - */ export declare const kvPairs: <S extends Partial<ArgSpec<KVDict>>>(spec: S, delim?: string, strict?: boolean) => S & { coerce: Fn<string[], KVDict>; hint: string; multi: true; group: string; }; /** * Like {@link kvPairs}, but coerces KV pairs into a result {@link KVMultiDict} * which supports multiple values per given key (each key's values are collected * into arrays). * * @param spec - * @param delim - * @param strict - */ export declare const kvPairsMulti: <S extends Partial<ArgSpec<KVMultiDict>>>(spec: S, delim?: string, strict?: boolean) => S & { coerce: Fn<string[], KVMultiDict>; hint: string; multi: true; group: string; }; /** * Returns a full {@link ArgSpec} for a fixed `size` tuple extracted from a * single value string. The individual values are delimited by `delim` and will * be coerced into their target type via `coerce`. The result tuple will be * wrapped in a {@link Tuple} instance. * * @remarks * An error will be thrown if the number of extracted values differs from the * specified tuple size or any value coercion fails. * * @example * ```ts tangle:../export/tuple.ts * import { coerceInt, parse, tuple } from "@thi.ng/args"; * * console.log( * parse({ a: tuple(coerceInt, 2, {})}, ["--a", "1,2"]) * ); * // { * // result: { a: Tuple { value: [1, 2] } }, * // index: 2, * // rest: [], * // done: true * // } * ``` * * @param coerce - * @param size - * @param spec - * @param delim - */ export declare const tuple: <T, S extends Partial<ArgSpec<Tuple<T>>>>(coerce: Fn<string, T>, size: number, spec: S, delim?: string) => S & { coerce: Fn<string, Tuple<T>>; hint: string; group: string; }; /** * Syntax sugar for `tuple(coerceInt, size, {...}, delim)`. * * @param size - * @param spec - * @param delim - */ export declare const size: <S extends Partial<ArgSpec<Tuple<number>>>>(size: number, spec: S, delim?: string) => S & { coerce: Fn<string, Tuple<number>>; hint: string; group: string; }; /** * Syntax sugar for `tuple(coerceFloat, size, {...}, delim)`. * * @param size - * @param spec - * @param delim - */ export declare const vec: <S extends Partial<ArgSpec<Tuple<number>>>>(size: number, spec: S, delim?: string) => S & { coerce: Fn<string, Tuple<number>>; hint: string; group: string; }; /** * Re-usable preset arg spec for a `--dry-run` flag. */ export declare const ARG_DRY_RUN: { dryRun: { desc: string; } & { flag: true; default: boolean; group: string; }; }; /** * Re-usable preset arg spec for a `--quiet` / `-q` flag. */ export declare const ARG_QUIET: { quiet: { alias: string; desc: string; } & { flag: true; default: boolean; group: string; }; }; /** * Re-usable preset arg spec for a `--verbose` / `-v` flag. */ export declare const ARG_VERBOSE: { verbose: { alias: string; desc: string; } & { flag: true; default: boolean; group: string; }; }; /** * Higher-order re-usable preset arg spec for a `--out-dir` / `-O` arg. Accepts * optional default value (e.g. sourced from an env var). If the the * `defaultVal` is defined, the arg is declared as optional, otherwise * mandatory. * * @param defaultVal * @param desc */ export declare const ARG_OUT_DIR: <T extends string | undefined>(defaultVal?: string, desc?: string) => { outDir: ReturnType<typeof string> & (T extends string ? { default: string; } : { optional: false; }); }; /** * Higher-order re-usable preset arg spec for a `--out-file` / `-o` arg. Accepts * optional default value (e.g. sourced from an env var). If the the * `defaultVal` is defined, the arg is declared as optional, otherwise * mandatory. * * @param defaultVal * @param desc */ export declare const ARG_OUT_FILE: <T extends string | undefined>(defaultVal?: T, desc?: string) => { outFile: ReturnType<typeof string> & (T extends string ? { default: string; } : { optional: false; }); }; //# sourceMappingURL=args.d.ts.map