args-tokens
Version:
parseArgs tokens compatibility and more high-performance parser
98 lines • 2.79 kB
TypeScript
//#region src/parser.d.ts
/**
* Entry point of argument parser.
*
* @module
*/
/**
* forked from `nodejs/node` (`pkgjs/parseargs`)
* repository url: https://github.com/nodejs/node (https://github.com/pkgjs/parseargs)
* code url: https://github.com/nodejs/node/blob/main/lib/internal/util/parse_args/parse_args.js
*
* @author kazuya kawaguchi (a.k.a. kazupon)
* @license MIT
*/
/**
* Argument token Kind.
*
* - `option`: option token, support short option (e.g. `-x`) and long option (e.g. `--foo`)
* - `option-terminator`: option terminator (`--`) token, see guideline 10 in https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap12.html
* - `positional`: positional token
*/
type ArgTokenKind = 'option' | 'option-terminator' | 'positional';
/**
* Argument token.
*/
interface ArgToken {
/**
* Argument token kind.
*/
kind: ArgTokenKind;
/**
* Argument token index, e.g `--foo bar` => `--foo` index is 0, `bar` index is 1.
*/
index: number;
/**
* Option name, e.g. `--foo` => `foo`, `-x` => `x`.
*/
name?: string;
/**
* Raw option name, e.g. `--foo` => `--foo`, `-x` => `-x`.
*/
rawName?: string;
/**
* Option value, e.g. `--foo=bar` => `bar`, `-x=bar` => `bar`.
* If the `allowCompatible` option is `true`, short option value will be same as Node.js `parseArgs` behavior.
*/
value?: string;
/**
* Inline value, e.g. `--foo=bar` => `true`, `-x=bar` => `true`.
*/
inlineValue?: boolean;
}
/**
* Parser Options.
*/
interface ParserOptions {
/**
* [Node.js parseArgs](https://nodejs.org/api/util.html#parseargs-tokens) tokens compatible mode.
*
* @default false
*/
allowCompatible?: boolean;
}
/**
* Parse command line arguments.
*
* @param args - command line arguments
* @param options - parse options, about details see {@link ParserOptions}
* @returns Argument tokens.
*
* @example
* ```js
* import { parseArgs } from 'args-tokens' // for Node.js and Bun
* // import { parseArgs } from 'jsr:@kazupon/args-tokens' // for Deno
*
* const tokens = parseArgs(['--foo', 'bar', '-x', '--bar=baz'])
* // do something with using tokens
* // ...
* console.log('tokens:', tokens)
* ```
*/
declare function parseArgs(args: string[], options?: ParserOptions): ArgToken[];
/**
* Check if `arg` is a short option (e.g. `-f`).
*
* @param arg - An argument to check
* @returns Whether `arg` is a short option.
*/
declare function isShortOption(arg: string): boolean;
/**
* Check if `arg` is a long option prefix (e.g. `--`).
*
* @param arg - An argument to check
* @returns Whether `arg` is a long option prefix.
*/
declare function hasLongOptionPrefix(arg: string): boolean;
//#endregion
export { ArgToken, ParserOptions, hasLongOptionPrefix, isShortOption, parseArgs };