zod-args-parser 1.0.4 → 1.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -234,18 +234,18 @@ export type ParseResult<S extends Partial<Subcommand>[]> = {
234
234
  subcommand: S[K]["name"];
235
235
  } & Positional<S[K]> & Info<S[K]["options"]> & OptionsArr2RecordType<S[K]["options"]> & ArgumentsArr2ArrType<S[K]["arguments"]>>;
236
236
  }[number];
237
- export type PrintMethods<N extends Subcommand["name"] | undefined> = {
237
+ export type PrintMethods<N extends Subcommand["name"]> = {
238
238
  printCliHelp: (options?: PrintHelpOpt) => void;
239
239
  printSubcommandHelp: (subcommand: LiteralUnion<NonNullable<N>>, options?: PrintHelpOpt) => void;
240
240
  };
241
- export type UnSafeParseResult<S extends Partial<Subcommand>[]> = CheckDuplicatedSubcommands<S> extends infer E extends string ? E : Prettify<ParseResult<S> & PrintMethods<S[number]["name"]>>;
241
+ export type UnSafeParseResult<S extends Partial<Subcommand>[]> = CheckDuplicatedSubcommands<S> extends infer E extends string ? E : Prettify<ParseResult<S> & PrintMethods<NonNullable<S[number]["name"]>>>;
242
242
  export type SafeParseResult<S extends Partial<Subcommand>[]> = CheckDuplicatedSubcommands<S> extends infer E extends string ? E : Prettify<({
243
243
  success: false;
244
244
  error: Error;
245
245
  } | {
246
246
  success: true;
247
247
  data: ParseResult<S>;
248
- }) & PrintMethods<S[number]["name"]>>;
248
+ }) & PrintMethods<NonNullable<S[number]["name"]>>>;
249
249
  export type ActionFn<T extends Subcommand | Cli> = {
250
250
  setAction: (actions: (res: UnSafeParseResult<[T]>) => void) => void;
251
251
  };
@@ -270,7 +270,9 @@ type IsDuplicatesInArr<Input extends any[]> = Input extends [infer Item, ...infe
270
270
  * - Return an error message if duplicated is found
271
271
  * - Return `subcommand` if not found
272
272
  */
273
- export type CheckDuplicatedOptions<T extends Subcommand | Cli> = T["options"] extends infer O extends Option[] ? IsDuplicatesInArr<MapNameAndAliases2StrArr<O>> extends infer D extends string ? `>>> Error: Duplicated Options \`${D}\` <<<` : T : T;
273
+ export type CheckDuplicatedOptions<T extends {
274
+ options?: Option[];
275
+ }> = T["options"] extends infer O extends Option[] ? IsDuplicatesInArr<MapNameAndAliases2StrArr<O>> extends infer D extends string ? `>>> Error: Duplicated Options \`${D}\` <<<` : T : T;
274
276
  /**
275
277
  * - Check for duplicated subcommands including aliases
276
278
  * - Return an error message if duplicated is found
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zod-args-parser",
3
- "version": "1.0.4",
3
+ "version": "1.0.6",
4
4
  "description": "A strictly typed command-line arguments parser powered by Zod.",
5
5
  "author": "Ahmed ALABSI <alabsi91@gmail>",
6
6
  "license": "MIT",
@@ -10,7 +10,7 @@
10
10
  },
11
11
  "type": "module",
12
12
  "scripts": {
13
- "dev": "tsx watch example/cli.ts",
13
+ "dev": "tsx watch example/index.ts",
14
14
  "build": "node scripts/build.mjs",
15
15
  "test": "eslint src/** --fix && tsc --noEmit && tsx test/test.ts",
16
16
  "prepare": "npm run test && npm run build"
@@ -0,0 +1,151 @@
1
+ import { transformOptionToArg } from "./utils.js";
2
+
3
+ import type { Cli, Subcommand } from "./types.js";
4
+
5
+ /**
6
+ * - Generate bash autocomplete script for your CLI
7
+ * - The generated script should be added to your `.bash_profile` or `.bashrc` file:
8
+ *
9
+ * - Run: `nano $HOME/.bash_profile` or `nano $HOME/.bashrc`
10
+ * - Add the following line: `source <generated script path>`
11
+ * - Save and reopen bash to take effect
12
+ */
13
+ export function generateBashAutocompleteScript(...params: [Cli, ...Subcommand[]]): string {
14
+ const [cli, ...subcommands] = params;
15
+
16
+ type MappedCommands = Record<string, { options: string[]; aliases: string[] }>;
17
+
18
+ const mappedCommands = subcommands.reduce((acc: MappedCommands, subcommand) => {
19
+ acc[subcommand.name] = {
20
+ options: subcommand.options?.map(option => transformOptionToArg(option.name)) ?? [],
21
+ aliases: subcommand.aliases ?? [],
22
+ };
23
+ return acc;
24
+ }, {});
25
+
26
+ let switchCase = "";
27
+ for (const [key, { options, aliases }] of Object.entries(mappedCommands)) {
28
+ switchCase += ` ${key}${aliases.length ? "|" : ""}${aliases.join("|")})\n`;
29
+ switchCase += ` opts="${options.join(" ")}"\n`;
30
+ switchCase += " ;;\n";
31
+ }
32
+
33
+ if (cli.options?.length) {
34
+ switchCase += ` "-"*)\n`;
35
+ switchCase += ` opts="${cli.options.map(option => transformOptionToArg(option.name)).join(" ")}"\n`;
36
+ switchCase += " ;;\n";
37
+ }
38
+
39
+ return `_${cli.cliName}_autocomplete() {
40
+ local cur prev commands opts subcommand used_opts filtered_opts
41
+
42
+ cur="\${COMP_WORDS[COMP_CWORD]}"
43
+ prev="\${COMP_WORDS[COMP_CWORD-1]}"
44
+ subcommand="\${COMP_WORDS[1]}"
45
+
46
+ commands="${Object.keys(mappedCommands).join(" ")}"
47
+
48
+ case "$subcommand" in
49
+ ${switchCase}
50
+ esac
51
+
52
+ used_opts=""
53
+ if [[ " \${commands[@]} " =~ " $subcommand " ]]; then
54
+ for word in "\${COMP_WORDS[@]:2}"; do
55
+ if [[ "$word" =~ ^- ]]; then
56
+ used_opts+=" $word"
57
+ fi
58
+ done
59
+ fi
60
+
61
+ if [[ -n "$opts" ]]; then
62
+ filtered_opts=""
63
+ for opt in $opts; do
64
+ if [[ ! " $used_opts " =~ " $opt " ]]; then
65
+ filtered_opts+="$opt "
66
+ fi
67
+ done
68
+ COMPREPLY=( $(compgen -W "$filtered_opts" -- "$cur") )
69
+ return
70
+ fi
71
+
72
+ if [[ "\${COMP_CWORD}" -eq 1 ]]; then
73
+ COMPREPLY=( $(compgen -W "$commands" -- "$cur") )
74
+ fi
75
+ }
76
+
77
+ complete -F _${cli.cliName}_autocomplete ${cli.cliName}
78
+ `;
79
+ }
80
+
81
+ /**
82
+ * - Generates a PowerShell autocomplete script for your CLI.
83
+ * - The script assumes that your CLI is available as a `.ps1` file in the environment variable. For example:
84
+ * `cliName.ps1`.
85
+ * - This should return a path to your script: `(Get-Command <cliName>.ps1).Source`
86
+ * - The generated script should be added to your `profile.ps1` file:
87
+ *
88
+ * - Run: `notepad $profile`
89
+ * - Add the following line: `. "<generated script path>"`
90
+ * - Save and reopen powershell to take effect
91
+ */
92
+ export function generatePowerShellAutocompleteScript(...params: [Cli, ...Subcommand[]]): string {
93
+ const [cli, ...subcommands] = params;
94
+
95
+ type MappedCommands = Record<string, { options: string[]; aliases: string[] }>;
96
+
97
+ const mappedCommands = subcommands.reduce((acc: MappedCommands, subcommand) => {
98
+ acc[subcommand.name] = {
99
+ options: subcommand.options?.map(option => transformOptionToArg(option.name)) ?? [],
100
+ aliases: subcommand.aliases ?? [],
101
+ };
102
+ return acc;
103
+ }, {});
104
+
105
+ const subcommandsStr = Object.keys(mappedCommands)
106
+ .map(key => `'${key}'`)
107
+ .join(", ");
108
+ const cliOptionsStr = cli.options?.map(option => `'${transformOptionToArg(option.name)}'`).join(", ") || "";
109
+
110
+ let switchCase = "switch ($subcommand) {\n";
111
+ for (const [key, { options, aliases }] of Object.entries(mappedCommands)) {
112
+ const optionsStr = options.map(option => `'${option}'`).join(", ");
113
+ switchCase += ` '${key}' { @(${optionsStr}) }\n`;
114
+ aliases.forEach(a => (switchCase += ` '${a}' { @(${optionsStr}) }\n`));
115
+ }
116
+ switchCase += ` default { @(${cliOptionsStr}) }\n }`;
117
+
118
+ let functionInfo = "";
119
+ if (cli.description) {
120
+ functionInfo = `<#\n.DESCRIPTION\n${cli.description}\n${cli.example ? `\n.EXAMPLE\n${cli.example}` : ""}\n#>`;
121
+ }
122
+
123
+ return `${functionInfo}
124
+ function ${cli.cliName} {
125
+ param(
126
+ [Parameter(Position = 0, Mandatory = $false)]
127
+ [string]$subcommand,
128
+ [Parameter(Position = 1, ValueFromRemainingArguments = $true)]
129
+ [string[]]$arguments
130
+ )
131
+ $scriptPath = (Get-Command '${cli.cliName}.ps1').Source
132
+ if ($scriptPath) {
133
+ & $scriptPath $subcommand $arguments
134
+ return
135
+ }
136
+ Write-Error "Could not find '${cli.cliName}.ps1' script"
137
+ }
138
+
139
+ Register-ArgumentCompleter -CommandName '${cli.cliName}' -ParameterName 'subcommand' -ScriptBlock {
140
+ param($commandName, $parameterName, $wordToComplete, $commandAst, $fakeBoundParameters)
141
+ $subcommands = @(${subcommandsStr}${subcommandsStr && cliOptionsStr ? ", " : ""}${cliOptionsStr})
142
+ $subcommands | Where-Object { $_ -like "$wordToComplete*" }
143
+ }
144
+
145
+ Register-ArgumentCompleter -CommandName '${cli.cliName}' -ParameterName 'arguments' -ScriptBlock {
146
+ param($commandName, $parameterName, $wordToComplete, $commandAst, $fakeBoundParameters)
147
+ $subcommand = $commandAst.CommandElements[1].Value
148
+ $arguments = ${switchCase}
149
+ $arguments | Where-Object { $_ -like "$wordToComplete*" }
150
+ }`;
151
+ }
package/src/index.ts CHANGED
@@ -1,34 +1,84 @@
1
- import { help } from "./help.js";
2
- import { parse, safeParse } from "./parser.js";
3
-
4
- import type {
5
- ActionFn,
6
- CheckDuplicatedOptions,
7
- Cli,
8
- Option,
9
- Prettify,
10
- Subcommand,
11
- UnSafeParseResult,
12
- } from "./types.js";
13
-
14
- function createSubcommand<const T extends Subcommand>(input: CheckDuplicatedOptions<T>): Prettify<T & ActionFn<T>> {
15
- return Object.assign(input, {
16
- setAction: (action: (res: UnSafeParseResult<[T]>) => void) => (input.action = action),
17
- });
18
- }
19
-
20
- function createCli<const T extends Cli>(input: CheckDuplicatedOptions<T>): Prettify<T & ActionFn<T>> {
21
- return Object.assign(input, {
22
- setAction: (action: (res: UnSafeParseResult<[T]>) => void) => (input.action = action),
23
- });
24
- }
25
-
26
- function createOptions<const T extends [Option, ...Option[]]>(options: T): T {
27
- return options;
28
- }
29
-
30
- const { printCliHelp, printSubcommandHelp } = help;
31
-
32
- export { createCli, createSubcommand, createOptions, parse, printCliHelp, printSubcommandHelp, safeParse };
33
-
34
- export type * from "./types.js";
1
+ import { help } from "./help.js";
2
+
3
+ import type {
4
+ ActionFn,
5
+ Argument,
6
+ CheckDuplicatedOptions,
7
+ Cli,
8
+ Option,
9
+ Prettify,
10
+ Subcommand,
11
+ UnSafeParseResult,
12
+ } from "./types.js";
13
+
14
+ /**
15
+ * - Insures that there is no extra keys in `obj` compared to `shape`
16
+ * - Also checks objects in arrays useful for the keys `options` and `arguments`
17
+ */
18
+ type Exact<Obj extends object, Shape extends object> = {
19
+ [K in keyof Obj]: K extends keyof Shape
20
+ ? Obj[K] extends infer ObjArr extends object[]
21
+ ? Required<Shape>[K] extends infer ShapeArr extends object[]
22
+ ? ExactObjArr<ObjArr, ShapeArr[number]>
23
+ : Obj[K]
24
+ : Obj[K]
25
+ : never;
26
+ };
27
+
28
+ /** - Insures that there is no extra keys in `obj` compared to `shape` */
29
+ type ExactKeys<T extends object, U extends object> = { [K in keyof T]: K extends keyof U ? T[K] : never };
30
+
31
+ /** - Insures that there is no extra keys in the objects in an array compared to `shape` */
32
+ type ExactObjArr<ObjArr extends object[], ShapeObj extends object> = {
33
+ [K in keyof ObjArr]: ExactKeys<ObjArr[K], ShapeObj>;
34
+ };
35
+
36
+ /**
37
+ * - Insures that there are no duplicated options
38
+ * - Disallow extra keys
39
+ */
40
+ type CliInput<T extends Cli> = CheckDuplicatedOptions<T> extends T ? Exact<T, Cli> : CheckDuplicatedOptions<T>;
41
+
42
+ export function createCli<const T extends Cli>(input: CliInput<T>) {
43
+ const setAction = (action: (res: UnSafeParseResult<[T]>) => void) => {
44
+ input.action = action;
45
+ };
46
+
47
+ return Object.assign(input, { setAction }) as Prettify<CliInput<T> & ActionFn<T>>;
48
+ }
49
+
50
+ /**
51
+ * - Insures that there are no duplicated options
52
+ * - Disallow extra keys
53
+ */
54
+ type SubcommandInput<T extends Subcommand> =
55
+ CheckDuplicatedOptions<T> extends T ? Exact<T, Subcommand> : CheckDuplicatedOptions<T>;
56
+
57
+ export function createSubcommand<const T extends Subcommand>(input: SubcommandInput<T>) {
58
+ const setAction = (action: (res: UnSafeParseResult<[T]>) => void) => {
59
+ input.action = action;
60
+ };
61
+
62
+ return Object.assign(input, { setAction }) as Prettify<SubcommandInput<T> & ActionFn<T>>;
63
+ }
64
+
65
+ /** - Insures that there are no duplicated options */
66
+ type CheckOptionsInput<T extends Option[]> =
67
+ CheckDuplicatedOptions<{ options: T }> extends infer Err extends string ? Err : T;
68
+
69
+ export function createOptions<const T extends [Option, ...Option[]]>(options: CheckOptionsInput<T>) {
70
+ return options;
71
+ }
72
+
73
+ export function createArguments<const T extends [Argument, ...Argument[]]>(args: T) {
74
+ return args;
75
+ }
76
+
77
+ const { printCliHelp, printSubcommandHelp } = help;
78
+ export { printCliHelp, printSubcommandHelp };
79
+
80
+ export { parse, safeParse } from "./parser.js";
81
+
82
+ export { generateBashAutocompleteScript, generatePowerShellAutocompleteScript } from "./autocomplete.js";
83
+
84
+ export type * from "./types.js";
package/src/parser.ts CHANGED
@@ -16,18 +16,16 @@ import type {
16
16
  NoSubcommand,
17
17
  Option,
18
18
  PrintHelpOpt,
19
+ PrintMethods,
19
20
  SafeParseResult,
20
21
  Subcommand,
21
- UnSafeParseResult,
22
+ UnSafeParseResult
22
23
  } from "./types.js";
23
24
 
24
- export function parse<T extends Subcommand[]>(argsv: string[], ...params: T): UnSafeParseResult<T>;
25
25
  export function parse<T extends Subcommand[], U extends Cli>(
26
26
  argsv: string[],
27
27
  ...params: [U, ...T]
28
- ): UnSafeParseResult<[...T, NoSubcommand & U]>;
29
-
30
- export function parse<T extends Subcommand[], U extends Cli>(argsv: string[], ...params: [U, ...T]) {
28
+ ): UnSafeParseResult<[...T, NoSubcommand & U]> {
31
29
  const cliOptions = ("cliName" in params[0] ? params[0] : {}) as U;
32
30
  const subcommandArr = params as unknown as T;
33
31
  const allSubcommands = new Set<string>(subcommandArr.flatMap(c => [c.name, ...(c.aliases || [])]));
@@ -280,18 +278,19 @@ export function parse<T extends Subcommand[], U extends Cli>(argsv: string[], ..
280
278
  return results as UnSafeParseResult<[...T, NoSubcommand & U]>;
281
279
  }
282
280
 
283
- export function safeParse<T extends Subcommand[]>(argsv: string[], ...params: T): SafeParseResult<T>;
284
281
  export function safeParse<T extends Subcommand[], U extends Cli>(
285
282
  argsv: string[],
286
283
  ...params: [U, ...T]
287
- ): SafeParseResult<[...T, NoSubcommand & U]>;
288
-
289
- export function safeParse<T extends Subcommand[], U extends Cli>(argsv: string[], ...params: [U, ...T]) {
284
+ ): SafeParseResult<[...T, NoSubcommand & U]> {
290
285
  const cliOptions = ("cliName" in params[0] ? params[0] : {}) as U;
291
286
  const subcommandArr = params as Subcommand[];
292
287
 
293
- const printCliHelp = (opt?: PrintHelpOpt) => help.printCliHelp(params, opt);
294
- const printSubcommandHelp = (subcommandStr: NonNullable<T[number]["name"]>, opt?: PrintHelpOpt) => {
288
+ type PrintTypes = PrintMethods<T[number]["name"]>;
289
+ type PrintCli = PrintTypes["printCliHelp"];
290
+ type PrintSubcommand = PrintTypes["printSubcommandHelp"];
291
+
292
+ const printCliHelp: PrintCli = opt => help.printCliHelp(params, opt);
293
+ const printSubcommandHelp: PrintSubcommand = (subcommandStr, opt) => {
295
294
  const subcommand = subcommandArr.find(c => c.name === subcommandStr);
296
295
  if (!subcommand) return console.error(`Cannot print help for subcommand "${subcommandStr}" as it does not exist`);
297
296
  help.printSubcommandHelp(subcommand, opt, cliOptions.cliName);
@@ -299,9 +298,9 @@ export function safeParse<T extends Subcommand[], U extends Cli>(argsv: string[]
299
298
 
300
299
  try {
301
300
  const data = parse(argsv, ...params);
302
- // @ts-expect-error error
301
+ // @ts-expect-error The operand of a 'delete' operator must be optional.
303
302
  delete data.printCliHelp;
304
- // @ts-expect-error error
303
+ // @ts-expect-errorThe operand of a 'delete' operator must be optional.
305
304
  delete data.printSubcommandHelp;
306
305
 
307
306
  return {
@@ -309,8 +308,13 @@ export function safeParse<T extends Subcommand[], U extends Cli>(argsv: string[]
309
308
  data: data as Omit<typeof data, "printCliHelp" | "printSubcommandHelp">,
310
309
  printCliHelp,
311
310
  printSubcommandHelp,
312
- };
311
+ } as SafeParseResult<[...T, NoSubcommand & U]>;
313
312
  } catch (e) {
314
- return { success: false, error: e as Error, printCliHelp, printSubcommandHelp };
313
+ return {
314
+ success: false,
315
+ error: e as Error,
316
+ printCliHelp,
317
+ printSubcommandHelp,
318
+ } as SafeParseResult<[...T, NoSubcommand & U]>;
315
319
  }
316
320
  }