zod-args-parser 1.0.5 → 1.0.7

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.
@@ -1,11 +1,11 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.generateAutocompleteScript=generateAutocompleteScript;var _utils=require("./utils.js");function generateAutocompleteScript(){for(var _len=arguments.length,params=new Array(_len),_key=0;_key<_len;_key++){params[_key]=arguments[_key];}const[cli,...subcommands]=params;const commandName=cli.cliName;const commands=subcommands.map(subcommand=>subcommand.name);const commandOptions=subcommands.reduce((acc,subcommand)=>{if(!subcommand.name||!subcommand.options?.length)return acc;acc[subcommand.name]=subcommand.options.map(option=>(0,_utils.transformOptionToArg)(option.name));return acc;},{});let switchCase="";for(const[key,value]of Object.entries(commandOptions)){switchCase+=` ${key}|${key[0]})\n`;switchCase+=` opts="${value.join(" ")}"\n`;switchCase+=" ;;\n";}if(cli.options?.length){switchCase+=` "-"*)\n`;switchCase+=` opts="${cli.options.map(option=>(0,_utils.transformOptionToArg)(option.name)).join(" ")}"\n`;switchCase+=" ;;\n";}return`_${commandName}_autocomplete() {
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.generateBashAutocompleteScript=generateBashAutocompleteScript;exports.generatePowerShellAutocompleteScript=generatePowerShellAutocompleteScript;var _utils=require("./utils.js");function generateBashAutocompleteScript(){for(var _len=arguments.length,params=new Array(_len),_key=0;_key<_len;_key++){params[_key]=arguments[_key];}const[cli,...subcommands]=params;const mappedCommands=subcommands.reduce((acc,subcommand)=>{acc[subcommand.name]={options:subcommand.options?.map(option=>(0,_utils.transformOptionToArg)(option.name))??[],aliases:subcommand.aliases??[]};return acc;},{});let switchCase="";for(const[key,{options,aliases}]of Object.entries(mappedCommands)){switchCase+=` ${key}${aliases.length?"|":""}${aliases.join("|")})\n`;switchCase+=` opts="${options.join(" ")}"\n`;switchCase+=" ;;\n";}if(cli.options?.length){switchCase+=` "-"*)\n`;switchCase+=` opts="${cli.options.map(option=>(0,_utils.transformOptionToArg)(option.name)).join(" ")}"\n`;switchCase+=" ;;\n";}return`_${cli.cliName}_autocomplete() {
2
2
  local cur prev commands opts subcommand used_opts filtered_opts
3
3
 
4
4
  cur="\${COMP_WORDS[COMP_CWORD]}"
5
5
  prev="\${COMP_WORDS[COMP_CWORD-1]}"
6
6
  subcommand="\${COMP_WORDS[1]}"
7
7
 
8
- commands="${commands.join(" ")}"
8
+ commands="${Object.keys(mappedCommands).join(" ")}"
9
9
 
10
10
  case "$subcommand" in
11
11
  ${switchCase}
@@ -36,5 +36,33 @@ ${switchCase}
36
36
  fi
37
37
  }
38
38
 
39
- complete -F _${commandName}_autocomplete ${commandName}
40
- `;}
39
+ complete -F _${cli.cliName}_autocomplete ${cli.cliName}
40
+ `;}function generatePowerShellAutocompleteScript(){for(var _len2=arguments.length,params=new Array(_len2),_key2=0;_key2<_len2;_key2++){params[_key2]=arguments[_key2];}const[cli,...subcommands]=params;const mappedCommands=subcommands.reduce((acc,subcommand)=>{acc[subcommand.name]={options:subcommand.options?.map(option=>(0,_utils.transformOptionToArg)(option.name))??[],aliases:subcommand.aliases??[]};return acc;},{});const subcommandsStr=Object.keys(mappedCommands).map(key=>`'${key}'`).join(", ");const cliOptionsStr=cli.options?.map(option=>`'${(0,_utils.transformOptionToArg)(option.name)}'`).join(", ")||"";let switchCase="switch ($subcommand) {\n";for(const[key,{options,aliases}]of Object.entries(mappedCommands)){const optionsStr=options.map(option=>`'${option}'`).join(", ");switchCase+=` '${key}' { @(${optionsStr}) }\n`;aliases.forEach(a=>switchCase+=` '${a}' { @(${optionsStr}) }\n`);}switchCase+=` default { @(${cliOptionsStr}) }\n }`;let functionInfo="";if(cli.description){functionInfo=`<#\n.DESCRIPTION\n${cli.description}\n${cli.example?`\n.EXAMPLE\n${cli.example}`:""}\n#>`;}return`${functionInfo}
41
+ function ${cli.cliName} {
42
+ param(
43
+ [Parameter(Position = 0, Mandatory = $false)]
44
+ [string]$subcommand,
45
+ [Parameter(Position = 1, ValueFromRemainingArguments = $true)]
46
+ [string[]]$arguments
47
+ )
48
+ $scriptPath = (Get-Command '${cli.cliName}.ps1').Source
49
+ if ($scriptPath) {
50
+ $arguments = $arguments | Where-Object { $_ -notin "--", "--%" }
51
+ & $scriptPath $subcommand @arguments
52
+ return
53
+ }
54
+ Write-Error "Could not find '${cli.cliName}.ps1' script"
55
+ }
56
+
57
+ Register-ArgumentCompleter -CommandName '${cli.cliName}' -ParameterName 'subcommand' -ScriptBlock {
58
+ param($commandName, $parameterName, $wordToComplete, $commandAst, $fakeBoundParameters)
59
+ $subcommands = @(${subcommandsStr}${subcommandsStr&&cliOptionsStr?", ":""}${cliOptionsStr})
60
+ $subcommands | Where-Object { $_ -like "$wordToComplete*" }
61
+ }
62
+
63
+ Register-ArgumentCompleter -CommandName '${cli.cliName}' -ParameterName 'arguments' -ScriptBlock {
64
+ param($commandName, $parameterName, $wordToComplete, $commandAst, $fakeBoundParameters)
65
+ $subcommand = $commandAst.CommandElements[1].Value
66
+ $arguments = ${switchCase}
67
+ $arguments | Where-Object { $_ -like "$wordToComplete*" }
68
+ }`;}
@@ -1 +1 @@
1
- {"version":3,"names":["_utils","require","generateAutocompleteScript","_len","arguments","length","params","Array","_key","cli","subcommands","commandName","cliName","commands","map","subcommand","name","commandOptions","reduce","acc","options","option","transformOptionToArg","switchCase","key","value","Object","entries","join"],"sourceRoot":"../../src","sources":["autocomplete.ts"],"sourcesContent":["import { transformOptionToArg } from \"./utils.js\";\n\nimport type { Cli, Subcommand } from \"./types.js\";\n\n/** - Generate bash autocomplete script for your CLI */\nexport function generateAutocompleteScript(...params: [Cli, ...Subcommand[]]): string {\n const [cli, ...subcommands] = params;\n\n const commandName = cli.cliName;\n const commands = subcommands.map(subcommand => subcommand.name);\n const commandOptions = subcommands.reduce((acc: Record<string, string[]>, subcommand) => {\n if (!subcommand.name || !subcommand.options?.length) return acc;\n acc[subcommand.name] = subcommand.options.map(option => transformOptionToArg(option.name));\n return acc;\n }, {});\n\n let switchCase = \"\";\n for (const [key, value] of Object.entries(commandOptions)) {\n switchCase += ` ${key}|${key[0]})\\n`;\n switchCase += ` opts=\"${value.join(\" \")}\"\\n`;\n switchCase += \" ;;\\n\";\n }\n\n if (cli.options?.length) {\n switchCase += ` \"-\"*)\\n`;\n switchCase += ` opts=\"${cli.options.map(option => transformOptionToArg(option.name)).join(\" \")}\"\\n`;\n switchCase += \" ;;\\n\";\n }\n\n return `_${commandName}_autocomplete() {\n local cur prev commands opts subcommand used_opts filtered_opts\n\n cur=\"\\${COMP_WORDS[COMP_CWORD]}\"\n prev=\"\\${COMP_WORDS[COMP_CWORD-1]}\"\n subcommand=\"\\${COMP_WORDS[1]}\"\n\n commands=\"${commands.join(\" \")}\"\n\n case \"$subcommand\" in\n${switchCase}\n esac\n\n used_opts=\"\"\n if [[ \" \\${commands[@]} \" =~ \" $subcommand \" ]]; then\n for word in \"\\${COMP_WORDS[@]:2}\"; do\n if [[ \"$word\" =~ ^- ]]; then\n used_opts+=\" $word\"\n fi\n done\n fi\n\n if [[ -n \"$opts\" ]]; then\n filtered_opts=\"\"\n for opt in $opts; do\n if [[ ! \" $used_opts \" =~ \" $opt \" ]]; then\n filtered_opts+=\"$opt \"\n fi\n done\n COMPREPLY=( $(compgen -W \"$filtered_opts\" -- \"$cur\") )\n return\n fi\n\n if [[ \"\\${COMP_CWORD}\" -eq 1 ]]; then\n COMPREPLY=( $(compgen -W \"$commands\" -- \"$cur\") )\n fi\n}\n\ncomplete -F _${commandName}_autocomplete ${commandName}\n`;\n}\n"],"mappings":"oIAAA,IAAAA,MAAA,CAAAC,OAAA,eAKO,QAAS,CAAAC,0BAA0BA,CAAA,CAA4C,SAAAC,IAAA,CAAAC,SAAA,CAAAC,MAAA,CAAxCC,MAAM,KAAAC,KAAA,CAAAJ,IAAA,EAAAK,IAAA,GAAAA,IAAA,CAAAL,IAAA,CAAAK,IAAA,IAANF,MAAM,CAAAE,IAAA,EAAAJ,SAAA,CAAAI,IAAA,GAClD,KAAM,CAACC,GAAG,CAAE,GAAGC,WAAW,CAAC,CAAGJ,MAAM,CAEpC,KAAM,CAAAK,WAAW,CAAGF,GAAG,CAACG,OAAO,CAC/B,KAAM,CAAAC,QAAQ,CAAGH,WAAW,CAACI,GAAG,CAACC,UAAU,EAAIA,UAAU,CAACC,IAAI,CAAC,CAC/D,KAAM,CAAAC,cAAc,CAAGP,WAAW,CAACQ,MAAM,CAAC,CAACC,GAA6B,CAAEJ,UAAU,GAAK,CACvF,GAAI,CAACA,UAAU,CAACC,IAAI,EAAI,CAACD,UAAU,CAACK,OAAO,EAAEf,MAAM,CAAE,MAAO,CAAAc,GAAG,CAC/DA,GAAG,CAACJ,UAAU,CAACC,IAAI,CAAC,CAAGD,UAAU,CAACK,OAAO,CAACN,GAAG,CAACO,MAAM,EAAI,GAAAC,2BAAoB,EAACD,MAAM,CAACL,IAAI,CAAC,CAAC,CAC1F,MAAO,CAAAG,GAAG,CACZ,CAAC,CAAE,CAAC,CAAC,CAAC,CAEN,GAAI,CAAAI,UAAU,CAAG,EAAE,CACnB,IAAK,KAAM,CAACC,GAAG,CAAEC,KAAK,CAAC,EAAI,CAAAC,MAAM,CAACC,OAAO,CAACV,cAAc,CAAC,CAAE,CACzDM,UAAU,EAAI,OAAOC,GAAG,IAAIA,GAAG,CAAC,CAAC,CAAC,KAAK,CACvCD,UAAU,EAAI,eAAeE,KAAK,CAACG,IAAI,CAAC,GAAG,CAAC,KAAK,CACjDL,UAAU,EAAI,YAAY,CAC5B,CAEA,GAAId,GAAG,CAACW,OAAO,EAAEf,MAAM,CAAE,CACvBkB,UAAU,EAAI,aAAa,CAC3BA,UAAU,EAAI,eAAed,GAAG,CAACW,OAAO,CAACN,GAAG,CAACO,MAAM,EAAI,GAAAC,2BAAoB,EAACD,MAAM,CAACL,IAAI,CAAC,CAAC,CAACY,IAAI,CAAC,GAAG,CAAC,KAAK,CACxGL,UAAU,EAAI,YAAY,CAC5B,CAEA,MAAO,IAAIZ,WAAW;AACxB;AACA;AACA;AACA;AACA;AACA;AACA,cAAcE,QAAQ,CAACe,IAAI,CAAC,GAAG,CAAC;AAChC;AACA;AACA,EAAEL,UAAU;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAeZ,WAAW,iBAAiBA,WAAW;AACtD,CAAC,CACD","ignoreList":[]}
1
+ {"version":3,"names":["_utils","require","generateBashAutocompleteScript","_len","arguments","length","params","Array","_key","cli","subcommands","mappedCommands","reduce","acc","subcommand","name","options","map","option","transformOptionToArg","aliases","switchCase","key","Object","entries","join","cliName","keys","generatePowerShellAutocompleteScript","_len2","_key2","subcommandsStr","cliOptionsStr","optionsStr","forEach","a","functionInfo","description","example"],"sourceRoot":"../../src","sources":["autocomplete.ts"],"sourcesContent":["import { transformOptionToArg } from \"./utils.js\";\n\nimport type { Cli, Subcommand } from \"./types.js\";\n\n/**\n * - Generate bash autocomplete script for your CLI\n * - The generated script should be added to your `.bash_profile` or `.bashrc` file:\n *\n * - Run: `nano $HOME/.bash_profile` or `nano $HOME/.bashrc`\n * - Add the following line: `source <generated script path>`\n * - Save and reopen bash to take effect\n */\nexport function generateBashAutocompleteScript(...params: [Cli, ...Subcommand[]]): string {\n const [cli, ...subcommands] = params;\n\n type MappedCommands = Record<string, { options: string[]; aliases: string[] }>;\n\n const mappedCommands = subcommands.reduce((acc: MappedCommands, subcommand) => {\n acc[subcommand.name] = {\n options: subcommand.options?.map(option => transformOptionToArg(option.name)) ?? [],\n aliases: subcommand.aliases ?? [],\n };\n return acc;\n }, {});\n\n let switchCase = \"\";\n for (const [key, { options, aliases }] of Object.entries(mappedCommands)) {\n switchCase += ` ${key}${aliases.length ? \"|\" : \"\"}${aliases.join(\"|\")})\\n`;\n switchCase += ` opts=\"${options.join(\" \")}\"\\n`;\n switchCase += \" ;;\\n\";\n }\n\n if (cli.options?.length) {\n switchCase += ` \"-\"*)\\n`;\n switchCase += ` opts=\"${cli.options.map(option => transformOptionToArg(option.name)).join(\" \")}\"\\n`;\n switchCase += \" ;;\\n\";\n }\n\n return `_${cli.cliName}_autocomplete() {\n local cur prev commands opts subcommand used_opts filtered_opts\n\n cur=\"\\${COMP_WORDS[COMP_CWORD]}\"\n prev=\"\\${COMP_WORDS[COMP_CWORD-1]}\"\n subcommand=\"\\${COMP_WORDS[1]}\"\n\n commands=\"${Object.keys(mappedCommands).join(\" \")}\"\n\n case \"$subcommand\" in\n${switchCase}\n esac\n\n used_opts=\"\"\n if [[ \" \\${commands[@]} \" =~ \" $subcommand \" ]]; then\n for word in \"\\${COMP_WORDS[@]:2}\"; do\n if [[ \"$word\" =~ ^- ]]; then\n used_opts+=\" $word\"\n fi\n done\n fi\n\n if [[ -n \"$opts\" ]]; then\n filtered_opts=\"\"\n for opt in $opts; do\n if [[ ! \" $used_opts \" =~ \" $opt \" ]]; then\n filtered_opts+=\"$opt \"\n fi\n done\n COMPREPLY=( $(compgen -W \"$filtered_opts\" -- \"$cur\") )\n return\n fi\n\n if [[ \"\\${COMP_CWORD}\" -eq 1 ]]; then\n COMPREPLY=( $(compgen -W \"$commands\" -- \"$cur\") )\n fi\n}\n\ncomplete -F _${cli.cliName}_autocomplete ${cli.cliName}\n`;\n}\n\n/**\n * - Generates a PowerShell autocomplete script for your CLI.\n * - The script assumes that your CLI is available as a `.ps1` file in the environment variable. For example:\n * `cliName.ps1`.\n * - This should return a path to your script: `(Get-Command <cliName>.ps1).Source`\n * - The generated script should be added to your `profile.ps1` file:\n *\n * - Run: `notepad $profile`\n * - Add the following line: `. \"<generated script path>\"`\n * - Save and reopen powershell to take effect\n */\nexport function generatePowerShellAutocompleteScript(...params: [Cli, ...Subcommand[]]): string {\n const [cli, ...subcommands] = params;\n\n type MappedCommands = Record<string, { options: string[]; aliases: string[] }>;\n\n const mappedCommands = subcommands.reduce((acc: MappedCommands, subcommand) => {\n acc[subcommand.name] = {\n options: subcommand.options?.map(option => transformOptionToArg(option.name)) ?? [],\n aliases: subcommand.aliases ?? [],\n };\n return acc;\n }, {});\n\n const subcommandsStr = Object.keys(mappedCommands)\n .map(key => `'${key}'`)\n .join(\", \");\n const cliOptionsStr = cli.options?.map(option => `'${transformOptionToArg(option.name)}'`).join(\", \") || \"\";\n\n let switchCase = \"switch ($subcommand) {\\n\";\n for (const [key, { options, aliases }] of Object.entries(mappedCommands)) {\n const optionsStr = options.map(option => `'${option}'`).join(\", \");\n switchCase += ` '${key}' { @(${optionsStr}) }\\n`;\n aliases.forEach(a => (switchCase += ` '${a}' { @(${optionsStr}) }\\n`));\n }\n switchCase += ` default { @(${cliOptionsStr}) }\\n }`;\n\n let functionInfo = \"\";\n if (cli.description) {\n functionInfo = `<#\\n.DESCRIPTION\\n${cli.description}\\n${cli.example ? `\\n.EXAMPLE\\n${cli.example}` : \"\"}\\n#>`;\n }\n\n return `${functionInfo}\nfunction ${cli.cliName} {\n param(\n [Parameter(Position = 0, Mandatory = $false)]\n [string]$subcommand,\n [Parameter(Position = 1, ValueFromRemainingArguments = $true)]\n [string[]]$arguments\n )\n $scriptPath = (Get-Command '${cli.cliName}.ps1').Source\n if ($scriptPath) {\n $arguments = $arguments | Where-Object { $_ -notin \"--\", \"--%\" }\n & $scriptPath $subcommand @arguments\n return\n }\n Write-Error \"Could not find '${cli.cliName}.ps1' script\"\n}\n\nRegister-ArgumentCompleter -CommandName '${cli.cliName}' -ParameterName 'subcommand' -ScriptBlock {\n param($commandName, $parameterName, $wordToComplete, $commandAst, $fakeBoundParameters)\n $subcommands = @(${subcommandsStr}${subcommandsStr && cliOptionsStr ? \", \" : \"\"}${cliOptionsStr})\n $subcommands | Where-Object { $_ -like \"$wordToComplete*\" }\n}\n\nRegister-ArgumentCompleter -CommandName '${cli.cliName}' -ParameterName 'arguments' -ScriptBlock {\n param($commandName, $parameterName, $wordToComplete, $commandAst, $fakeBoundParameters)\n $subcommand = $commandAst.CommandElements[1].Value\n $arguments = ${switchCase}\n $arguments | Where-Object { $_ -like \"$wordToComplete*\" }\n}`;\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.createCli=createCli;exports.createOptions=createOptions;exports.createSubcommand=createSubcommand;Object.defineProperty(exports,"generateAutocompleteScript",{enumerable:true,get:function(){return _autocomplete.generateAutocompleteScript;}});Object.defineProperty(exports,"parse",{enumerable:true,get:function(){return _parser.parse;}});exports.printSubcommandHelp=exports.printCliHelp=void 0;Object.defineProperty(exports,"safeParse",{enumerable:true,get:function(){return _parser.safeParse;}});var _help=require("./help.js");var _parser=require("./parser.js");var _autocomplete=require("./autocomplete.js");function createCli(input){return Object.assign(input,{setAction:action=>input.action=action});}function createSubcommand(input){return Object.assign(input,{setAction:action=>input.action=action});}function createOptions(options){return options;}const{printCliHelp,printSubcommandHelp}=_help.help;exports.printSubcommandHelp=printSubcommandHelp;exports.printCliHelp=printCliHelp;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.createArguments=createArguments;exports.createCli=createCli;exports.createOptions=createOptions;exports.createSubcommand=createSubcommand;Object.defineProperty(exports,"generateBashAutocompleteScript",{enumerable:true,get:function(){return _autocomplete.generateBashAutocompleteScript;}});Object.defineProperty(exports,"generatePowerShellAutocompleteScript",{enumerable:true,get:function(){return _autocomplete.generatePowerShellAutocompleteScript;}});Object.defineProperty(exports,"parse",{enumerable:true,get:function(){return _parser.parse;}});exports.printSubcommandHelp=exports.printCliHelp=void 0;Object.defineProperty(exports,"safeParse",{enumerable:true,get:function(){return _parser.safeParse;}});var _help=require("./help.js");var _parser=require("./parser.js");var _autocomplete=require("./autocomplete.js");function createCli(input){const setAction=action=>{input.action=action;};return Object.assign(input,{setAction});}function createSubcommand(input){const setAction=action=>{input.action=action;};return Object.assign(input,{setAction});}function createOptions(options){return options;}function createArguments(args){return args;}const{printCliHelp,printSubcommandHelp}=_help.help;exports.printSubcommandHelp=printSubcommandHelp;exports.printCliHelp=printCliHelp;
@@ -1 +1 @@
1
- {"version":3,"names":["_help","require","_parser","_autocomplete","createCli","input","Object","assign","setAction","action","createSubcommand","createOptions","options","printCliHelp","printSubcommandHelp","help","exports"],"sourceRoot":"../../src","sources":["index.ts"],"sourcesContent":["import { help } from \"./help.js\";\nimport { parse, safeParse } from \"./parser.js\";\nimport { generateAutocompleteScript } from \"./autocomplete.js\";\n\nimport type {\n ActionFn,\n CheckDuplicatedOptions,\n Cli,\n Option,\n Prettify,\n Subcommand,\n UnSafeParseResult,\n} from \"./types.js\";\n\nfunction createCli<const T extends Cli>(input: CheckDuplicatedOptions<T>): Prettify<T & ActionFn<T>> {\n return Object.assign(input, {\n setAction: (action: (res: UnSafeParseResult<[T]>) => void) => (input.action = action),\n });\n}\n\nfunction createSubcommand<const T extends Subcommand>(input: CheckDuplicatedOptions<T>): Prettify<T & ActionFn<T>> {\n return Object.assign(input, {\n setAction: (action: (res: UnSafeParseResult<[T]>) => void) => (input.action = action),\n });\n}\n\nfunction createOptions<const T extends [Option, ...Option[]]>(options: T): T {\n return options;\n}\n\nconst { printCliHelp, printSubcommandHelp } = help;\n\nexport {\n createCli,\n createSubcommand,\n createOptions,\n parse,\n safeParse,\n printCliHelp,\n printSubcommandHelp,\n generateAutocompleteScript,\n};\n\nexport type * from \"./types.js\";\n"],"mappings":"6jBAAA,IAAAA,KAAA,CAAAC,OAAA,cACA,IAAAC,OAAA,CAAAD,OAAA,gBACA,IAAAE,aAAA,CAAAF,OAAA,sBAYA,QAAS,CAAAG,SAASA,CAAsBC,KAAgC,CAA6B,CACnG,MAAO,CAAAC,MAAM,CAACC,MAAM,CAACF,KAAK,CAAE,CAC1BG,SAAS,CAAGC,MAA6C,EAAMJ,KAAK,CAACI,MAAM,CAAGA,MAChF,CAAC,CAAC,CACJ,CAEA,QAAS,CAAAC,gBAAgBA,CAA6BL,KAAgC,CAA6B,CACjH,MAAO,CAAAC,MAAM,CAACC,MAAM,CAACF,KAAK,CAAE,CAC1BG,SAAS,CAAGC,MAA6C,EAAMJ,KAAK,CAACI,MAAM,CAAGA,MAChF,CAAC,CAAC,CACJ,CAEA,QAAS,CAAAE,aAAaA,CAAwCC,OAAU,CAAK,CAC3E,MAAO,CAAAA,OAAO,CAChB,CAEA,KAAM,CAAEC,YAAY,CAAEC,mBAAoB,CAAC,CAAGC,UAAI,CAACC,OAAA,CAAAF,mBAAA,CAAAA,mBAAA,CAAAE,OAAA,CAAAH,YAAA,CAAAA,YAAA","ignoreList":[]}
1
+ {"version":3,"names":["_help","require","_parser","_autocomplete","createCli","input","setAction","action","Object","assign","createSubcommand","createOptions","options","createArguments","args","printCliHelp","printSubcommandHelp","help","exports"],"sourceRoot":"../../src","sources":["index.ts"],"sourcesContent":["import { help } from \"./help.js\";\r\n\r\nimport type {\r\n ActionFn,\r\n Argument,\r\n CheckDuplicatedOptions,\r\n Cli,\r\n Option,\r\n Prettify,\r\n Subcommand,\r\n UnSafeParseResult,\r\n} from \"./types.js\";\r\n\r\n/**\r\n * - Insures that there is no extra keys in `obj` compared to `shape`\r\n * - Also checks objects in arrays useful for the keys `options` and `arguments`\r\n */\r\ntype Exact<Obj extends object, Shape extends object> = {\r\n [K in keyof Obj]: K extends keyof Shape\r\n ? Obj[K] extends infer ObjArr extends object[]\r\n ? Required<Shape>[K] extends infer ShapeArr extends object[]\r\n ? ExactObjArr<ObjArr, ShapeArr[number]>\r\n : Obj[K]\r\n : Obj[K]\r\n : never;\r\n};\r\n\r\n/** - Insures that there is no extra keys in `obj` compared to `shape` */\r\ntype ExactKeys<T extends object, U extends object> = { [K in keyof T]: K extends keyof U ? T[K] : never };\r\n\r\n/** - Insures that there is no extra keys in the objects in an array compared to `shape` */\r\ntype ExactObjArr<ObjArr extends object[], ShapeObj extends object> = {\r\n [K in keyof ObjArr]: ExactKeys<ObjArr[K], ShapeObj>;\r\n};\r\n\r\n/**\r\n * - Insures that there are no duplicated options\r\n * - Disallow extra keys\r\n */\r\ntype CliInput<T extends Cli> = CheckDuplicatedOptions<T> extends T ? Exact<T, Cli> : CheckDuplicatedOptions<T>;\r\n\r\nexport function createCli<const T extends Cli>(input: CliInput<T>) {\r\n const setAction = (action: (res: UnSafeParseResult<[T]>) => void) => {\r\n input.action = action;\r\n };\r\n\r\n return Object.assign(input, { setAction }) as Prettify<CliInput<T> & ActionFn<T>>;\r\n}\r\n\r\n/**\r\n * - Insures that there are no duplicated options\r\n * - Disallow extra keys\r\n */\r\ntype SubcommandInput<T extends Subcommand> =\r\n CheckDuplicatedOptions<T> extends T ? Exact<T, Subcommand> : CheckDuplicatedOptions<T>;\r\n\r\nexport function createSubcommand<const T extends Subcommand>(input: SubcommandInput<T>) {\r\n const setAction = (action: (res: UnSafeParseResult<[T]>) => void) => {\r\n input.action = action;\r\n };\r\n\r\n return Object.assign(input, { setAction }) as Prettify<SubcommandInput<T> & ActionFn<T>>;\r\n}\r\n\r\n/** - Insures that there are no duplicated options */\r\ntype CheckOptionsInput<T extends Option[]> =\r\n CheckDuplicatedOptions<{ options: T }> extends infer Err extends string ? Err : T;\r\n\r\nexport function createOptions<const T extends [Option, ...Option[]]>(options: CheckOptionsInput<T>) {\r\n return options;\r\n}\r\n\r\nexport function createArguments<const T extends [Argument, ...Argument[]]>(args: T) {\r\n return args;\r\n}\r\n\r\nconst { printCliHelp, printSubcommandHelp } = help;\r\nexport { printCliHelp, printSubcommandHelp };\r\n\r\nexport { parse, safeParse } from \"./parser.js\";\r\n\r\nexport { generateBashAutocompleteScript, generatePowerShellAutocompleteScript } from \"./autocomplete.js\";\r\n\r\nexport type * from \"./types.js\";\r\n"],"mappings":"gxBAAA,IAAAA,KAAA,CAAAC,OAAA,cA+EA,IAAAC,OAAA,CAAAD,OAAA,gBAEA,IAAAE,aAAA,CAAAF,OAAA,sBAxCO,QAAS,CAAAG,SAASA,CAAsBC,KAAkB,CAAE,CACjE,KAAM,CAAAC,SAAS,CAAIC,MAA6C,EAAK,CACnEF,KAAK,CAACE,MAAM,CAAGA,MAAM,CACvB,CAAC,CAED,MAAO,CAAAC,MAAM,CAACC,MAAM,CAACJ,KAAK,CAAE,CAAEC,SAAU,CAAC,CAAC,CAC5C,CASO,QAAS,CAAAI,gBAAgBA,CAA6BL,KAAyB,CAAE,CACtF,KAAM,CAAAC,SAAS,CAAIC,MAA6C,EAAK,CACnEF,KAAK,CAACE,MAAM,CAAGA,MAAM,CACvB,CAAC,CAED,MAAO,CAAAC,MAAM,CAACC,MAAM,CAACJ,KAAK,CAAE,CAAEC,SAAU,CAAC,CAAC,CAC5C,CAMO,QAAS,CAAAK,aAAaA,CAAwCC,OAA6B,CAAE,CAClG,MAAO,CAAAA,OAAO,CAChB,CAEO,QAAS,CAAAC,eAAeA,CAA4CC,IAAO,CAAE,CAClF,MAAO,CAAAA,IAAI,CACb,CAEA,KAAM,CAAEC,YAAY,CAAEC,mBAAoB,CAAC,CAAGC,UAAI,CAACC,OAAA,CAAAF,mBAAA,CAAAA,mBAAA,CAAAE,OAAA,CAAAH,YAAA,CAAAA,YAAA","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":["_help","require","_utils","parse","argsv","_len","arguments","length","params","Array","_key","cliOptions","subcommandArr","allSubcommands","Set","flatMap","c","name","aliases","decoupleFlags","results","subcommand","undefined","printCliHelp","opt","help","printSubcommandHelp","subcommandStr","find","includes","console","error","cliName","GetSubcommandProps","cmd","addRawArg","optionName","rawArg","_info","Object","create","addRawValue","rawValue","addSource","source","fillOption","value","assign","i","arg","has","subcommandProps","allowPositional","positional","argAndValue","split","filter","Boolean","argWithEquals","argument","argValue","isOptionArg","isFlagArg","Error","options","msg","transformArg","isNegative","startsWith","option","o","noName","map","isTypeBoolean","isBooleanSchema","type","nextArg","optionValue","parsedBoolean","stringToBoolean","res","safeParse","success","errors","message","data","rawVal","currentArgCount","argType","getOrdinalPlacement","push","isOptional","hasDefault","_def","defaultValue","transformOptionToArg","subcommandArgCount","argumentType","action","_len2","_key2","e"],"sourceRoot":"../../src","sources":["parser.ts"],"sourcesContent":["import { help } from \"./help.js\";\nimport {\n decoupleFlags,\n getOrdinalPlacement,\n isBooleanSchema,\n isFlagArg,\n isOptionArg,\n noName,\n stringToBoolean,\n transformArg,\n transformOptionToArg,\n} from \"./utils.js\";\n\nimport type {\n Cli,\n NoSubcommand,\n Option,\n PrintHelpOpt,\n SafeParseResult,\n Subcommand,\n UnSafeParseResult,\n} from \"./types.js\";\n\nexport function parse<T extends Subcommand[]>(argsv: string[], ...params: T): UnSafeParseResult<T>;\nexport function parse<T extends Subcommand[], U extends Cli>(\n argsv: string[],\n ...params: [U, ...T]\n): UnSafeParseResult<[...T, NoSubcommand & U]>;\n\nexport function parse<T extends Subcommand[], U extends Cli>(argsv: string[], ...params: [U, ...T]) {\n const cliOptions = (\"cliName\" in params[0] ? params[0] : {}) as U;\n const subcommandArr = params as unknown as T;\n const allSubcommands = new Set<string>(subcommandArr.flatMap(c => [c.name, ...(c.aliases || [])]));\n\n // decouple flags E.g. `-rf` -> `-r, -f`\n argsv = decoupleFlags(argsv);\n\n type ResultObj = Record<string, unknown> & {\n subcommand: string | undefined;\n positional?: string[];\n arguments?: unknown[];\n _info?: Record<string, { rawArg?: string; rawValue?: string; source: \"cli\" | \"default\" }>;\n printCliHelp: (options?: PrintHelpOpt) => void;\n printSubcommandHelp: (subcommand: any, options?: PrintHelpOpt) => void;\n };\n\n const results: ResultObj = {\n subcommand: undefined,\n printCliHelp(opt) {\n help.printCliHelp(params, opt);\n },\n printSubcommandHelp(subcommandStr, opt) {\n const subcommand = subcommandArr.find(c => {\n if (c.name === subcommandStr) return true;\n if (!subcommandStr) return false;\n if (!c.aliases?.length) return false;\n return c.aliases.includes(subcommandStr);\n });\n if (!subcommand) return console.error(`Cannot print help for subcommand \"${subcommandStr}\" as it does not exist`);\n help.printSubcommandHelp(subcommand, opt, cliOptions.cliName);\n },\n };\n\n /** - Get current subcommand props */\n const GetSubcommandProps = (cmd = results.subcommand) => {\n return subcommandArr.find(c => {\n if (c.name === cmd) return true;\n if (!cmd) return false;\n if (!c.aliases?.length) return false;\n return c.aliases.includes(cmd);\n });\n };\n\n const addRawArg = (optionName: string, rawArg: string) => {\n if (!results._info) results._info = {};\n if (!results._info[optionName]) results._info[optionName] = Object.create({});\n results._info[optionName].rawArg = rawArg;\n };\n\n const addRawValue = (optionName: string, rawValue: string) => {\n if (!results._info) results._info = {};\n if (!results._info[optionName]) results._info[optionName] = Object.create({});\n results._info[optionName].rawValue = rawValue;\n };\n\n const addSource = (optionName: string, source: \"cli\" | \"default\") => {\n if (!results._info) results._info = {};\n if (!results._info[optionName]) results._info[optionName] = Object.create({});\n results._info[optionName].source = source;\n };\n\n const fillOption = (optionName: string, value: Option) => {\n if (!results._info) results._info = {};\n if (!results._info[optionName]) results._info[optionName] = Object.create({});\n Object.assign(results._info[optionName], value);\n };\n\n for (let i = 0; i < argsv.length; i++) {\n const arg = argsv[i];\n\n // * subcommand\n if (i === 0) {\n results.subcommand = allSubcommands.has(arg) ? arg : undefined;\n\n // add positional and arguments array\n const subcommandProps = GetSubcommandProps();\n if (subcommandProps?.allowPositional) results.positional = [];\n if (subcommandProps?.arguments?.length) results.arguments = [];\n\n if (results.subcommand) continue;\n }\n\n // * option\n const argAndValue = arg.split(\"=\").filter(Boolean);\n const argWithEquals = arg.includes(\"=\");\n const argument = argAndValue[0];\n const argValue: string | undefined = argAndValue[1];\n\n if (isOptionArg(argument)) {\n if (isFlagArg(argument) && argWithEquals) {\n throw new Error(`Flag arguments cannot be assigned using \"=\": \"${arg}\"`);\n }\n\n const subcommandProps = GetSubcommandProps();\n if (!subcommandProps) throw new Error(`Unknown subcommand: \"${results.subcommand}\"`);\n\n if (!subcommandProps.options) {\n const msg = !results.subcommand\n ? \"options are not allowed here\"\n : `subcommand \"${results.subcommand}\" does not allow options`;\n throw new Error(`Error: ${msg}: \"${argument}\"`);\n }\n\n const optionName = transformArg(argument);\n const isNegative = argument.startsWith(\"--no-\");\n\n const option = subcommandProps.options.find(o => {\n if (o.name === optionName) return true;\n if (isNegative && noName(o.name) === optionName) return true;\n\n if (!o.aliases) return false;\n if (o.aliases.includes(optionName)) return true;\n if (isNegative && o.aliases.map(noName).includes(optionName)) return true;\n\n return false;\n });\n\n if (!option) {\n throw new Error(`Unknown option: \"${argument}\"`);\n }\n\n if (option.name in results) {\n throw new Error(`Duplicated option: \"${argument}\"`);\n }\n\n const isTypeBoolean = isBooleanSchema(option.type);\n const nextArg = argsv[i + 1];\n\n let optionValue: string | boolean = argWithEquals ? argValue : nextArg;\n\n if (isTypeBoolean) {\n if (argWithEquals) {\n const parsedBoolean = stringToBoolean(argValue);\n optionValue = isNegative ? !parsedBoolean : parsedBoolean;\n } else {\n optionValue = !isNegative;\n }\n }\n\n if (typeof optionValue === \"undefined\") {\n throw new Error(`Expected a value for \"${argument}\" but got nothing`);\n }\n\n if (!argWithEquals && isOptionArg(optionValue)) {\n throw new Error(`Expected a value for \"${argument}\" but got an argument \"${nextArg}\"`);\n }\n\n const res = option.type.safeParse(optionValue);\n if (!res.success) {\n throw new Error(`Invalid value \"${optionValue}\" for \"${argument}\": ${res.error.errors[0].message}`);\n }\n\n results[option.name] = res.data;\n addRawArg(option.name, argument);\n const rawVal = argWithEquals ? argValue : isTypeBoolean ? \"\" : nextArg;\n addRawValue(option.name, rawVal);\n fillOption(option.name, option);\n\n if (!argWithEquals && !isTypeBoolean) i++;\n continue;\n }\n\n const subcommandProps = GetSubcommandProps();\n\n // * arguments\n if (subcommandProps?.arguments?.length) {\n if (!results.arguments) results.arguments = [];\n\n const currentArgCount = results.arguments.length;\n\n if (currentArgCount < subcommandProps.arguments.length) {\n const argType = subcommandProps.arguments[currentArgCount].type;\n\n let argValue: string | boolean = arg;\n const isTypeBoolean = isBooleanSchema(argType);\n if (isTypeBoolean) argValue = stringToBoolean(argValue);\n\n const res = argType.safeParse(argValue);\n if (!res.success) {\n throw new Error(\n `The ${getOrdinalPlacement(currentArgCount)} argument \"${arg}\" is invalid: ${res.error.errors[0].message}`,\n );\n }\n\n results.arguments.push(res.data);\n continue;\n }\n }\n\n // * positional\n if (subcommandProps?.allowPositional) {\n if (!results.positional) results.positional = [];\n results.positional.push(arg);\n continue;\n }\n\n const msg = !results.subcommand ? \"here\" : `for subcommand \"${results.subcommand}\"`;\n throw new Error(`Unexpected argument \"${arg}\": positional arguments are not allowed ${msg}`);\n }\n\n // check for missing options - set defaults - add _source\n const subcommandProps = GetSubcommandProps();\n if (subcommandProps?.options?.length) {\n for (const option of subcommandProps.options) {\n if (option.name in results) {\n addSource(option.name, \"cli\");\n fillOption(option.name, option);\n continue;\n }\n\n if (option.type.isOptional()) {\n const hasDefault = typeof option.type._def.defaultValue === \"function\";\n if (!hasDefault) continue;\n results[option.name] = option.type._def.defaultValue();\n addSource(option.name, \"default\");\n fillOption(option.name, option);\n continue;\n }\n\n throw new Error(`Missing required option: ${transformOptionToArg(option.name)}`);\n }\n }\n\n // check for arguments - set defaults\n if (subcommandProps?.arguments?.length) {\n const currentArgCount = results.arguments?.length ?? 0;\n const subcommandArgCount = subcommandProps.arguments.length;\n\n // missing arguments\n if (currentArgCount < subcommandArgCount) {\n for (let i = currentArgCount; i < subcommandArgCount; i++) {\n const argumentType = subcommandProps.arguments[i].type;\n const hasDefault = typeof argumentType._def.defaultValue === \"function\";\n if (hasDefault && results.arguments) {\n results.arguments.push(argumentType._def.defaultValue());\n continue;\n }\n\n if (argumentType.isOptional()) continue;\n\n throw new Error(`the ${getOrdinalPlacement(i)} argument is required: \"${subcommandProps.arguments[i].name}\"`);\n }\n }\n }\n\n if (subcommandProps?.action) {\n subcommandProps.action(results);\n }\n\n return results as UnSafeParseResult<[...T, NoSubcommand & U]>;\n}\n\nexport function safeParse<T extends Subcommand[]>(argsv: string[], ...params: T): SafeParseResult<T>;\nexport function safeParse<T extends Subcommand[], U extends Cli>(\n argsv: string[],\n ...params: [U, ...T]\n): SafeParseResult<[...T, NoSubcommand & U]>;\n\nexport function safeParse<T extends Subcommand[], U extends Cli>(argsv: string[], ...params: [U, ...T]) {\n const cliOptions = (\"cliName\" in params[0] ? params[0] : {}) as U;\n const subcommandArr = params as Subcommand[];\n\n const printCliHelp = (opt?: PrintHelpOpt) => help.printCliHelp(params, opt);\n const printSubcommandHelp = (subcommandStr: NonNullable<T[number][\"name\"]>, opt?: PrintHelpOpt) => {\n const subcommand = subcommandArr.find(c => c.name === subcommandStr);\n if (!subcommand) return console.error(`Cannot print help for subcommand \"${subcommandStr}\" as it does not exist`);\n help.printSubcommandHelp(subcommand, opt, cliOptions.cliName);\n };\n\n try {\n const data = parse(argsv, ...params);\n // @ts-expect-error error\n delete data.printCliHelp;\n // @ts-expect-error error\n delete data.printSubcommandHelp;\n\n return {\n success: true,\n data: data as Omit<typeof data, \"printCliHelp\" | \"printSubcommandHelp\">,\n printCliHelp,\n printSubcommandHelp,\n };\n } catch (e) {\n return { success: false, error: e as Error, printCliHelp, printSubcommandHelp };\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_help","require","_utils","parse","argsv","_len","arguments","length","params","Array","_key","cliOptions","subcommandArr","allSubcommands","Set","flatMap","c","name","aliases","decoupleFlags","results","subcommand","undefined","printCliHelp","opt","help","printSubcommandHelp","subcommandStr","find","includes","console","error","cliName","GetSubcommandProps","cmd","addRawArg","optionName","rawArg","_info","Object","create","addRawValue","rawValue","addSource","source","fillOption","value","assign","i","arg","has","subcommandProps","allowPositional","positional","argAndValue","split","filter","Boolean","argWithEquals","argument","argValue","isOptionArg","isFlagArg","Error","options","msg","transformArg","isNegative","startsWith","option","o","noName","map","isTypeBoolean","isBooleanSchema","type","nextArg","optionValue","parsedBoolean","stringToBoolean","res","safeParse","success","errors","message","data","rawVal","currentArgCount","argType","getOrdinalPlacement","push","isOptional","hasDefault","_def","defaultValue","transformOptionToArg","subcommandArgCount","argumentType","action","_len2","_key2","e"],"sourceRoot":"../../src","sources":["parser.ts"],"sourcesContent":["import { help } from \"./help.js\";\nimport {\n decoupleFlags,\n getOrdinalPlacement,\n isBooleanSchema,\n isFlagArg,\n isOptionArg,\n noName,\n stringToBoolean,\n transformArg,\n transformOptionToArg,\n} from \"./utils.js\";\n\nimport type {\n Cli,\n NoSubcommand,\n Option,\n PrintHelpOpt,\n PrintMethods,\n SafeParseResult,\n Subcommand,\n UnSafeParseResult\n} from \"./types.js\";\n\nexport function parse<T extends Subcommand[], U extends Cli>(\n argsv: string[],\n ...params: [U, ...T]\n): UnSafeParseResult<[...T, NoSubcommand & U]> {\n const cliOptions = (\"cliName\" in params[0] ? params[0] : {}) as U;\n const subcommandArr = params as unknown as T;\n const allSubcommands = new Set<string>(subcommandArr.flatMap(c => [c.name, ...(c.aliases || [])]));\n\n // decouple flags E.g. `-rf` -> `-r, -f`\n argsv = decoupleFlags(argsv);\n\n type ResultObj = Record<string, unknown> & {\n subcommand: string | undefined;\n positional?: string[];\n arguments?: unknown[];\n _info?: Record<string, { rawArg?: string; rawValue?: string; source: \"cli\" | \"default\" }>;\n printCliHelp: (options?: PrintHelpOpt) => void;\n printSubcommandHelp: (subcommand: any, options?: PrintHelpOpt) => void;\n };\n\n const results: ResultObj = {\n subcommand: undefined,\n printCliHelp(opt) {\n help.printCliHelp(params, opt);\n },\n printSubcommandHelp(subcommandStr, opt) {\n const subcommand = subcommandArr.find(c => {\n if (c.name === subcommandStr) return true;\n if (!subcommandStr) return false;\n if (!c.aliases?.length) return false;\n return c.aliases.includes(subcommandStr);\n });\n if (!subcommand) return console.error(`Cannot print help for subcommand \"${subcommandStr}\" as it does not exist`);\n help.printSubcommandHelp(subcommand, opt, cliOptions.cliName);\n },\n };\n\n /** - Get current subcommand props */\n const GetSubcommandProps = (cmd = results.subcommand) => {\n return subcommandArr.find(c => {\n if (c.name === cmd) return true;\n if (!cmd) return false;\n if (!c.aliases?.length) return false;\n return c.aliases.includes(cmd);\n });\n };\n\n const addRawArg = (optionName: string, rawArg: string) => {\n if (!results._info) results._info = {};\n if (!results._info[optionName]) results._info[optionName] = Object.create({});\n results._info[optionName].rawArg = rawArg;\n };\n\n const addRawValue = (optionName: string, rawValue: string) => {\n if (!results._info) results._info = {};\n if (!results._info[optionName]) results._info[optionName] = Object.create({});\n results._info[optionName].rawValue = rawValue;\n };\n\n const addSource = (optionName: string, source: \"cli\" | \"default\") => {\n if (!results._info) results._info = {};\n if (!results._info[optionName]) results._info[optionName] = Object.create({});\n results._info[optionName].source = source;\n };\n\n const fillOption = (optionName: string, value: Option) => {\n if (!results._info) results._info = {};\n if (!results._info[optionName]) results._info[optionName] = Object.create({});\n Object.assign(results._info[optionName], value);\n };\n\n for (let i = 0; i < argsv.length; i++) {\n const arg = argsv[i];\n\n // * subcommand\n if (i === 0) {\n results.subcommand = allSubcommands.has(arg) ? arg : undefined;\n\n // add positional and arguments array\n const subcommandProps = GetSubcommandProps();\n if (subcommandProps?.allowPositional) results.positional = [];\n if (subcommandProps?.arguments?.length) results.arguments = [];\n\n if (results.subcommand) continue;\n }\n\n // * option\n const argAndValue = arg.split(\"=\").filter(Boolean);\n const argWithEquals = arg.includes(\"=\");\n const argument = argAndValue[0];\n const argValue: string | undefined = argAndValue[1];\n\n if (isOptionArg(argument)) {\n if (isFlagArg(argument) && argWithEquals) {\n throw new Error(`Flag arguments cannot be assigned using \"=\": \"${arg}\"`);\n }\n\n const subcommandProps = GetSubcommandProps();\n if (!subcommandProps) throw new Error(`Unknown subcommand: \"${results.subcommand}\"`);\n\n if (!subcommandProps.options) {\n const msg = !results.subcommand\n ? \"options are not allowed here\"\n : `subcommand \"${results.subcommand}\" does not allow options`;\n throw new Error(`Error: ${msg}: \"${argument}\"`);\n }\n\n const optionName = transformArg(argument);\n const isNegative = argument.startsWith(\"--no-\");\n\n const option = subcommandProps.options.find(o => {\n if (o.name === optionName) return true;\n if (isNegative && noName(o.name) === optionName) return true;\n\n if (!o.aliases) return false;\n if (o.aliases.includes(optionName)) return true;\n if (isNegative && o.aliases.map(noName).includes(optionName)) return true;\n\n return false;\n });\n\n if (!option) {\n throw new Error(`Unknown option: \"${argument}\"`);\n }\n\n if (option.name in results) {\n throw new Error(`Duplicated option: \"${argument}\"`);\n }\n\n const isTypeBoolean = isBooleanSchema(option.type);\n const nextArg = argsv[i + 1];\n\n let optionValue: string | boolean = argWithEquals ? argValue : nextArg;\n\n if (isTypeBoolean) {\n if (argWithEquals) {\n const parsedBoolean = stringToBoolean(argValue);\n optionValue = isNegative ? !parsedBoolean : parsedBoolean;\n } else {\n optionValue = !isNegative;\n }\n }\n\n if (typeof optionValue === \"undefined\") {\n throw new Error(`Expected a value for \"${argument}\" but got nothing`);\n }\n\n if (!argWithEquals && isOptionArg(optionValue)) {\n throw new Error(`Expected a value for \"${argument}\" but got an argument \"${nextArg}\"`);\n }\n\n const res = option.type.safeParse(optionValue);\n if (!res.success) {\n throw new Error(`Invalid value \"${optionValue}\" for \"${argument}\": ${res.error.errors[0].message}`);\n }\n\n results[option.name] = res.data;\n addRawArg(option.name, argument);\n const rawVal = argWithEquals ? argValue : isTypeBoolean ? \"\" : nextArg;\n addRawValue(option.name, rawVal);\n fillOption(option.name, option);\n\n if (!argWithEquals && !isTypeBoolean) i++;\n continue;\n }\n\n const subcommandProps = GetSubcommandProps();\n\n // * arguments\n if (subcommandProps?.arguments?.length) {\n if (!results.arguments) results.arguments = [];\n\n const currentArgCount = results.arguments.length;\n\n if (currentArgCount < subcommandProps.arguments.length) {\n const argType = subcommandProps.arguments[currentArgCount].type;\n\n let argValue: string | boolean = arg;\n const isTypeBoolean = isBooleanSchema(argType);\n if (isTypeBoolean) argValue = stringToBoolean(argValue);\n\n const res = argType.safeParse(argValue);\n if (!res.success) {\n throw new Error(\n `The ${getOrdinalPlacement(currentArgCount)} argument \"${arg}\" is invalid: ${res.error.errors[0].message}`,\n );\n }\n\n results.arguments.push(res.data);\n continue;\n }\n }\n\n // * positional\n if (subcommandProps?.allowPositional) {\n if (!results.positional) results.positional = [];\n results.positional.push(arg);\n continue;\n }\n\n const msg = !results.subcommand ? \"here\" : `for subcommand \"${results.subcommand}\"`;\n throw new Error(`Unexpected argument \"${arg}\": positional arguments are not allowed ${msg}`);\n }\n\n // check for missing options - set defaults - add _source\n const subcommandProps = GetSubcommandProps();\n if (subcommandProps?.options?.length) {\n for (const option of subcommandProps.options) {\n if (option.name in results) {\n addSource(option.name, \"cli\");\n fillOption(option.name, option);\n continue;\n }\n\n if (option.type.isOptional()) {\n const hasDefault = typeof option.type._def.defaultValue === \"function\";\n if (!hasDefault) continue;\n results[option.name] = option.type._def.defaultValue();\n addSource(option.name, \"default\");\n fillOption(option.name, option);\n continue;\n }\n\n throw new Error(`Missing required option: ${transformOptionToArg(option.name)}`);\n }\n }\n\n // check for arguments - set defaults\n if (subcommandProps?.arguments?.length) {\n const currentArgCount = results.arguments?.length ?? 0;\n const subcommandArgCount = subcommandProps.arguments.length;\n\n // missing arguments\n if (currentArgCount < subcommandArgCount) {\n for (let i = currentArgCount; i < subcommandArgCount; i++) {\n const argumentType = subcommandProps.arguments[i].type;\n const hasDefault = typeof argumentType._def.defaultValue === \"function\";\n if (hasDefault && results.arguments) {\n results.arguments.push(argumentType._def.defaultValue());\n continue;\n }\n\n if (argumentType.isOptional()) continue;\n\n throw new Error(`the ${getOrdinalPlacement(i)} argument is required: \"${subcommandProps.arguments[i].name}\"`);\n }\n }\n }\n\n if (subcommandProps?.action) {\n subcommandProps.action(results);\n }\n\n return results as UnSafeParseResult<[...T, NoSubcommand & U]>;\n}\n\nexport function safeParse<T extends Subcommand[], U extends Cli>(\n argsv: string[],\n ...params: [U, ...T]\n): SafeParseResult<[...T, NoSubcommand & U]> {\n const cliOptions = (\"cliName\" in params[0] ? params[0] : {}) as U;\n const subcommandArr = params as Subcommand[];\n\n type PrintTypes = PrintMethods<T[number][\"name\"]>;\n type PrintCli = PrintTypes[\"printCliHelp\"];\n type PrintSubcommand = PrintTypes[\"printSubcommandHelp\"];\n\n const printCliHelp: PrintCli = opt => help.printCliHelp(params, opt);\n const printSubcommandHelp: PrintSubcommand = (subcommandStr, opt) => {\n const subcommand = subcommandArr.find(c => c.name === subcommandStr);\n if (!subcommand) return console.error(`Cannot print help for subcommand \"${subcommandStr}\" as it does not exist`);\n help.printSubcommandHelp(subcommand, opt, cliOptions.cliName);\n };\n\n try {\n const data = parse(argsv, ...params);\n // @ts-expect-error The operand of a 'delete' operator must be optional.\n delete data.printCliHelp;\n // @ts-expect-errorThe operand of a 'delete' operator must be optional.\n delete data.printSubcommandHelp;\n\n return {\n success: true,\n data: data as Omit<typeof data, \"printCliHelp\" | \"printSubcommandHelp\">,\n printCliHelp,\n printSubcommandHelp,\n } as SafeParseResult<[...T, NoSubcommand & U]>;\n } catch (e) {\n return {\n success: false,\n error: e as Error,\n printCliHelp,\n printSubcommandHelp,\n } as SafeParseResult<[...T, NoSubcommand & U]>;\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1,11 +1,11 @@
1
- import{transformOptionToArg}from"./utils.js";export function generateAutocompleteScript(){for(var _len=arguments.length,params=new Array(_len),_key=0;_key<_len;_key++){params[_key]=arguments[_key];}const[cli,...subcommands]=params;const commandName=cli.cliName;const commands=subcommands.map(subcommand=>subcommand.name);const commandOptions=subcommands.reduce((acc,subcommand)=>{if(!subcommand.name||!subcommand.options?.length)return acc;acc[subcommand.name]=subcommand.options.map(option=>transformOptionToArg(option.name));return acc;},{});let switchCase="";for(const[key,value]of Object.entries(commandOptions)){switchCase+=` ${key}|${key[0]})\n`;switchCase+=` opts="${value.join(" ")}"\n`;switchCase+=" ;;\n";}if(cli.options?.length){switchCase+=` "-"*)\n`;switchCase+=` opts="${cli.options.map(option=>transformOptionToArg(option.name)).join(" ")}"\n`;switchCase+=" ;;\n";}return`_${commandName}_autocomplete() {
1
+ import{transformOptionToArg}from"./utils.js";export function generateBashAutocompleteScript(){for(var _len=arguments.length,params=new Array(_len),_key=0;_key<_len;_key++){params[_key]=arguments[_key];}const[cli,...subcommands]=params;const mappedCommands=subcommands.reduce((acc,subcommand)=>{acc[subcommand.name]={options:subcommand.options?.map(option=>transformOptionToArg(option.name))??[],aliases:subcommand.aliases??[]};return acc;},{});let switchCase="";for(const[key,{options,aliases}]of Object.entries(mappedCommands)){switchCase+=` ${key}${aliases.length?"|":""}${aliases.join("|")})\n`;switchCase+=` opts="${options.join(" ")}"\n`;switchCase+=" ;;\n";}if(cli.options?.length){switchCase+=` "-"*)\n`;switchCase+=` opts="${cli.options.map(option=>transformOptionToArg(option.name)).join(" ")}"\n`;switchCase+=" ;;\n";}return`_${cli.cliName}_autocomplete() {
2
2
  local cur prev commands opts subcommand used_opts filtered_opts
3
3
 
4
4
  cur="\${COMP_WORDS[COMP_CWORD]}"
5
5
  prev="\${COMP_WORDS[COMP_CWORD-1]}"
6
6
  subcommand="\${COMP_WORDS[1]}"
7
7
 
8
- commands="${commands.join(" ")}"
8
+ commands="${Object.keys(mappedCommands).join(" ")}"
9
9
 
10
10
  case "$subcommand" in
11
11
  ${switchCase}
@@ -36,5 +36,33 @@ ${switchCase}
36
36
  fi
37
37
  }
38
38
 
39
- complete -F _${commandName}_autocomplete ${commandName}
40
- `;}
39
+ complete -F _${cli.cliName}_autocomplete ${cli.cliName}
40
+ `;}export function generatePowerShellAutocompleteScript(){for(var _len2=arguments.length,params=new Array(_len2),_key2=0;_key2<_len2;_key2++){params[_key2]=arguments[_key2];}const[cli,...subcommands]=params;const mappedCommands=subcommands.reduce((acc,subcommand)=>{acc[subcommand.name]={options:subcommand.options?.map(option=>transformOptionToArg(option.name))??[],aliases:subcommand.aliases??[]};return acc;},{});const subcommandsStr=Object.keys(mappedCommands).map(key=>`'${key}'`).join(", ");const cliOptionsStr=cli.options?.map(option=>`'${transformOptionToArg(option.name)}'`).join(", ")||"";let switchCase="switch ($subcommand) {\n";for(const[key,{options,aliases}]of Object.entries(mappedCommands)){const optionsStr=options.map(option=>`'${option}'`).join(", ");switchCase+=` '${key}' { @(${optionsStr}) }\n`;aliases.forEach(a=>switchCase+=` '${a}' { @(${optionsStr}) }\n`);}switchCase+=` default { @(${cliOptionsStr}) }\n }`;let functionInfo="";if(cli.description){functionInfo=`<#\n.DESCRIPTION\n${cli.description}\n${cli.example?`\n.EXAMPLE\n${cli.example}`:""}\n#>`;}return`${functionInfo}
41
+ function ${cli.cliName} {
42
+ param(
43
+ [Parameter(Position = 0, Mandatory = $false)]
44
+ [string]$subcommand,
45
+ [Parameter(Position = 1, ValueFromRemainingArguments = $true)]
46
+ [string[]]$arguments
47
+ )
48
+ $scriptPath = (Get-Command '${cli.cliName}.ps1').Source
49
+ if ($scriptPath) {
50
+ $arguments = $arguments | Where-Object { $_ -notin "--", "--%" }
51
+ & $scriptPath $subcommand @arguments
52
+ return
53
+ }
54
+ Write-Error "Could not find '${cli.cliName}.ps1' script"
55
+ }
56
+
57
+ Register-ArgumentCompleter -CommandName '${cli.cliName}' -ParameterName 'subcommand' -ScriptBlock {
58
+ param($commandName, $parameterName, $wordToComplete, $commandAst, $fakeBoundParameters)
59
+ $subcommands = @(${subcommandsStr}${subcommandsStr&&cliOptionsStr?", ":""}${cliOptionsStr})
60
+ $subcommands | Where-Object { $_ -like "$wordToComplete*" }
61
+ }
62
+
63
+ Register-ArgumentCompleter -CommandName '${cli.cliName}' -ParameterName 'arguments' -ScriptBlock {
64
+ param($commandName, $parameterName, $wordToComplete, $commandAst, $fakeBoundParameters)
65
+ $subcommand = $commandAst.CommandElements[1].Value
66
+ $arguments = ${switchCase}
67
+ $arguments | Where-Object { $_ -like "$wordToComplete*" }
68
+ }`;}
@@ -1 +1 @@
1
- {"version":3,"names":["transformOptionToArg","generateAutocompleteScript","_len","arguments","length","params","Array","_key","cli","subcommands","commandName","cliName","commands","map","subcommand","name","commandOptions","reduce","acc","options","option","switchCase","key","value","Object","entries","join"],"sourceRoot":"../../src","sources":["autocomplete.ts"],"sourcesContent":["import { transformOptionToArg } from \"./utils.js\";\n\nimport type { Cli, Subcommand } from \"./types.js\";\n\n/** - Generate bash autocomplete script for your CLI */\nexport function generateAutocompleteScript(...params: [Cli, ...Subcommand[]]): string {\n const [cli, ...subcommands] = params;\n\n const commandName = cli.cliName;\n const commands = subcommands.map(subcommand => subcommand.name);\n const commandOptions = subcommands.reduce((acc: Record<string, string[]>, subcommand) => {\n if (!subcommand.name || !subcommand.options?.length) return acc;\n acc[subcommand.name] = subcommand.options.map(option => transformOptionToArg(option.name));\n return acc;\n }, {});\n\n let switchCase = \"\";\n for (const [key, value] of Object.entries(commandOptions)) {\n switchCase += ` ${key}|${key[0]})\\n`;\n switchCase += ` opts=\"${value.join(\" \")}\"\\n`;\n switchCase += \" ;;\\n\";\n }\n\n if (cli.options?.length) {\n switchCase += ` \"-\"*)\\n`;\n switchCase += ` opts=\"${cli.options.map(option => transformOptionToArg(option.name)).join(\" \")}\"\\n`;\n switchCase += \" ;;\\n\";\n }\n\n return `_${commandName}_autocomplete() {\n local cur prev commands opts subcommand used_opts filtered_opts\n\n cur=\"\\${COMP_WORDS[COMP_CWORD]}\"\n prev=\"\\${COMP_WORDS[COMP_CWORD-1]}\"\n subcommand=\"\\${COMP_WORDS[1]}\"\n\n commands=\"${commands.join(\" \")}\"\n\n case \"$subcommand\" in\n${switchCase}\n esac\n\n used_opts=\"\"\n if [[ \" \\${commands[@]} \" =~ \" $subcommand \" ]]; then\n for word in \"\\${COMP_WORDS[@]:2}\"; do\n if [[ \"$word\" =~ ^- ]]; then\n used_opts+=\" $word\"\n fi\n done\n fi\n\n if [[ -n \"$opts\" ]]; then\n filtered_opts=\"\"\n for opt in $opts; do\n if [[ ! \" $used_opts \" =~ \" $opt \" ]]; then\n filtered_opts+=\"$opt \"\n fi\n done\n COMPREPLY=( $(compgen -W \"$filtered_opts\" -- \"$cur\") )\n return\n fi\n\n if [[ \"\\${COMP_CWORD}\" -eq 1 ]]; then\n COMPREPLY=( $(compgen -W \"$commands\" -- \"$cur\") )\n fi\n}\n\ncomplete -F _${commandName}_autocomplete ${commandName}\n`;\n}\n"],"mappings":"AAAA,OAASA,oBAAoB,KAAQ,YAAY,CAKjD,MAAO,SAAS,CAAAC,0BAA0BA,CAAA,CAA4C,SAAAC,IAAA,CAAAC,SAAA,CAAAC,MAAA,CAAxCC,MAAM,KAAAC,KAAA,CAAAJ,IAAA,EAAAK,IAAA,GAAAA,IAAA,CAAAL,IAAA,CAAAK,IAAA,IAANF,MAAM,CAAAE,IAAA,EAAAJ,SAAA,CAAAI,IAAA,GAClD,KAAM,CAACC,GAAG,CAAE,GAAGC,WAAW,CAAC,CAAGJ,MAAM,CAEpC,KAAM,CAAAK,WAAW,CAAGF,GAAG,CAACG,OAAO,CAC/B,KAAM,CAAAC,QAAQ,CAAGH,WAAW,CAACI,GAAG,CAACC,UAAU,EAAIA,UAAU,CAACC,IAAI,CAAC,CAC/D,KAAM,CAAAC,cAAc,CAAGP,WAAW,CAACQ,MAAM,CAAC,CAACC,GAA6B,CAAEJ,UAAU,GAAK,CACvF,GAAI,CAACA,UAAU,CAACC,IAAI,EAAI,CAACD,UAAU,CAACK,OAAO,EAAEf,MAAM,CAAE,MAAO,CAAAc,GAAG,CAC/DA,GAAG,CAACJ,UAAU,CAACC,IAAI,CAAC,CAAGD,UAAU,CAACK,OAAO,CAACN,GAAG,CAACO,MAAM,EAAIpB,oBAAoB,CAACoB,MAAM,CAACL,IAAI,CAAC,CAAC,CAC1F,MAAO,CAAAG,GAAG,CACZ,CAAC,CAAE,CAAC,CAAC,CAAC,CAEN,GAAI,CAAAG,UAAU,CAAG,EAAE,CACnB,IAAK,KAAM,CAACC,GAAG,CAAEC,KAAK,CAAC,EAAI,CAAAC,MAAM,CAACC,OAAO,CAACT,cAAc,CAAC,CAAE,CACzDK,UAAU,EAAI,OAAOC,GAAG,IAAIA,GAAG,CAAC,CAAC,CAAC,KAAK,CACvCD,UAAU,EAAI,eAAeE,KAAK,CAACG,IAAI,CAAC,GAAG,CAAC,KAAK,CACjDL,UAAU,EAAI,YAAY,CAC5B,CAEA,GAAIb,GAAG,CAACW,OAAO,EAAEf,MAAM,CAAE,CACvBiB,UAAU,EAAI,aAAa,CAC3BA,UAAU,EAAI,eAAeb,GAAG,CAACW,OAAO,CAACN,GAAG,CAACO,MAAM,EAAIpB,oBAAoB,CAACoB,MAAM,CAACL,IAAI,CAAC,CAAC,CAACW,IAAI,CAAC,GAAG,CAAC,KAAK,CACxGL,UAAU,EAAI,YAAY,CAC5B,CAEA,MAAO,IAAIX,WAAW;AACxB;AACA;AACA;AACA;AACA;AACA;AACA,cAAcE,QAAQ,CAACc,IAAI,CAAC,GAAG,CAAC;AAChC;AACA;AACA,EAAEL,UAAU;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAeX,WAAW,iBAAiBA,WAAW;AACtD,CAAC,CACD","ignoreList":[]}
1
+ {"version":3,"names":["transformOptionToArg","generateBashAutocompleteScript","_len","arguments","length","params","Array","_key","cli","subcommands","mappedCommands","reduce","acc","subcommand","name","options","map","option","aliases","switchCase","key","Object","entries","join","cliName","keys","generatePowerShellAutocompleteScript","_len2","_key2","subcommandsStr","cliOptionsStr","optionsStr","forEach","a","functionInfo","description","example"],"sourceRoot":"../../src","sources":["autocomplete.ts"],"sourcesContent":["import { transformOptionToArg } from \"./utils.js\";\n\nimport type { Cli, Subcommand } from \"./types.js\";\n\n/**\n * - Generate bash autocomplete script for your CLI\n * - The generated script should be added to your `.bash_profile` or `.bashrc` file:\n *\n * - Run: `nano $HOME/.bash_profile` or `nano $HOME/.bashrc`\n * - Add the following line: `source <generated script path>`\n * - Save and reopen bash to take effect\n */\nexport function generateBashAutocompleteScript(...params: [Cli, ...Subcommand[]]): string {\n const [cli, ...subcommands] = params;\n\n type MappedCommands = Record<string, { options: string[]; aliases: string[] }>;\n\n const mappedCommands = subcommands.reduce((acc: MappedCommands, subcommand) => {\n acc[subcommand.name] = {\n options: subcommand.options?.map(option => transformOptionToArg(option.name)) ?? [],\n aliases: subcommand.aliases ?? [],\n };\n return acc;\n }, {});\n\n let switchCase = \"\";\n for (const [key, { options, aliases }] of Object.entries(mappedCommands)) {\n switchCase += ` ${key}${aliases.length ? \"|\" : \"\"}${aliases.join(\"|\")})\\n`;\n switchCase += ` opts=\"${options.join(\" \")}\"\\n`;\n switchCase += \" ;;\\n\";\n }\n\n if (cli.options?.length) {\n switchCase += ` \"-\"*)\\n`;\n switchCase += ` opts=\"${cli.options.map(option => transformOptionToArg(option.name)).join(\" \")}\"\\n`;\n switchCase += \" ;;\\n\";\n }\n\n return `_${cli.cliName}_autocomplete() {\n local cur prev commands opts subcommand used_opts filtered_opts\n\n cur=\"\\${COMP_WORDS[COMP_CWORD]}\"\n prev=\"\\${COMP_WORDS[COMP_CWORD-1]}\"\n subcommand=\"\\${COMP_WORDS[1]}\"\n\n commands=\"${Object.keys(mappedCommands).join(\" \")}\"\n\n case \"$subcommand\" in\n${switchCase}\n esac\n\n used_opts=\"\"\n if [[ \" \\${commands[@]} \" =~ \" $subcommand \" ]]; then\n for word in \"\\${COMP_WORDS[@]:2}\"; do\n if [[ \"$word\" =~ ^- ]]; then\n used_opts+=\" $word\"\n fi\n done\n fi\n\n if [[ -n \"$opts\" ]]; then\n filtered_opts=\"\"\n for opt in $opts; do\n if [[ ! \" $used_opts \" =~ \" $opt \" ]]; then\n filtered_opts+=\"$opt \"\n fi\n done\n COMPREPLY=( $(compgen -W \"$filtered_opts\" -- \"$cur\") )\n return\n fi\n\n if [[ \"\\${COMP_CWORD}\" -eq 1 ]]; then\n COMPREPLY=( $(compgen -W \"$commands\" -- \"$cur\") )\n fi\n}\n\ncomplete -F _${cli.cliName}_autocomplete ${cli.cliName}\n`;\n}\n\n/**\n * - Generates a PowerShell autocomplete script for your CLI.\n * - The script assumes that your CLI is available as a `.ps1` file in the environment variable. For example:\n * `cliName.ps1`.\n * - This should return a path to your script: `(Get-Command <cliName>.ps1).Source`\n * - The generated script should be added to your `profile.ps1` file:\n *\n * - Run: `notepad $profile`\n * - Add the following line: `. \"<generated script path>\"`\n * - Save and reopen powershell to take effect\n */\nexport function generatePowerShellAutocompleteScript(...params: [Cli, ...Subcommand[]]): string {\n const [cli, ...subcommands] = params;\n\n type MappedCommands = Record<string, { options: string[]; aliases: string[] }>;\n\n const mappedCommands = subcommands.reduce((acc: MappedCommands, subcommand) => {\n acc[subcommand.name] = {\n options: subcommand.options?.map(option => transformOptionToArg(option.name)) ?? [],\n aliases: subcommand.aliases ?? [],\n };\n return acc;\n }, {});\n\n const subcommandsStr = Object.keys(mappedCommands)\n .map(key => `'${key}'`)\n .join(\", \");\n const cliOptionsStr = cli.options?.map(option => `'${transformOptionToArg(option.name)}'`).join(\", \") || \"\";\n\n let switchCase = \"switch ($subcommand) {\\n\";\n for (const [key, { options, aliases }] of Object.entries(mappedCommands)) {\n const optionsStr = options.map(option => `'${option}'`).join(\", \");\n switchCase += ` '${key}' { @(${optionsStr}) }\\n`;\n aliases.forEach(a => (switchCase += ` '${a}' { @(${optionsStr}) }\\n`));\n }\n switchCase += ` default { @(${cliOptionsStr}) }\\n }`;\n\n let functionInfo = \"\";\n if (cli.description) {\n functionInfo = `<#\\n.DESCRIPTION\\n${cli.description}\\n${cli.example ? `\\n.EXAMPLE\\n${cli.example}` : \"\"}\\n#>`;\n }\n\n return `${functionInfo}\nfunction ${cli.cliName} {\n param(\n [Parameter(Position = 0, Mandatory = $false)]\n [string]$subcommand,\n [Parameter(Position = 1, ValueFromRemainingArguments = $true)]\n [string[]]$arguments\n )\n $scriptPath = (Get-Command '${cli.cliName}.ps1').Source\n if ($scriptPath) {\n $arguments = $arguments | Where-Object { $_ -notin \"--\", \"--%\" }\n & $scriptPath $subcommand @arguments\n return\n }\n Write-Error \"Could not find '${cli.cliName}.ps1' script\"\n}\n\nRegister-ArgumentCompleter -CommandName '${cli.cliName}' -ParameterName 'subcommand' -ScriptBlock {\n param($commandName, $parameterName, $wordToComplete, $commandAst, $fakeBoundParameters)\n $subcommands = @(${subcommandsStr}${subcommandsStr && cliOptionsStr ? \", \" : \"\"}${cliOptionsStr})\n $subcommands | Where-Object { $_ -like \"$wordToComplete*\" }\n}\n\nRegister-ArgumentCompleter -CommandName '${cli.cliName}' -ParameterName 'arguments' -ScriptBlock {\n param($commandName, $parameterName, $wordToComplete, $commandAst, $fakeBoundParameters)\n $subcommand = $commandAst.CommandElements[1].Value\n $arguments = ${switchCase}\n $arguments | Where-Object { $_ -like \"$wordToComplete*\" }\n}`;\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- import{help}from"./help.js";import{parse,safeParse}from"./parser.js";import{generateAutocompleteScript}from"./autocomplete.js";function createCli(input){return Object.assign(input,{setAction:action=>input.action=action});}function createSubcommand(input){return Object.assign(input,{setAction:action=>input.action=action});}function createOptions(options){return options;}const{printCliHelp,printSubcommandHelp}=help;export{createCli,createSubcommand,createOptions,parse,safeParse,printCliHelp,printSubcommandHelp,generateAutocompleteScript};
1
+ import{help}from"./help.js";export function createCli(input){const setAction=action=>{input.action=action;};return Object.assign(input,{setAction});}export function createSubcommand(input){const setAction=action=>{input.action=action;};return Object.assign(input,{setAction});}export function createOptions(options){return options;}export function createArguments(args){return args;}const{printCliHelp,printSubcommandHelp}=help;export{printCliHelp,printSubcommandHelp};export{parse,safeParse}from"./parser.js";export{generateBashAutocompleteScript,generatePowerShellAutocompleteScript}from"./autocomplete.js";
@@ -1 +1 @@
1
- {"version":3,"names":["help","parse","safeParse","generateAutocompleteScript","createCli","input","Object","assign","setAction","action","createSubcommand","createOptions","options","printCliHelp","printSubcommandHelp"],"sourceRoot":"../../src","sources":["index.ts"],"sourcesContent":["import { help } from \"./help.js\";\nimport { parse, safeParse } from \"./parser.js\";\nimport { generateAutocompleteScript } from \"./autocomplete.js\";\n\nimport type {\n ActionFn,\n CheckDuplicatedOptions,\n Cli,\n Option,\n Prettify,\n Subcommand,\n UnSafeParseResult,\n} from \"./types.js\";\n\nfunction createCli<const T extends Cli>(input: CheckDuplicatedOptions<T>): Prettify<T & ActionFn<T>> {\n return Object.assign(input, {\n setAction: (action: (res: UnSafeParseResult<[T]>) => void) => (input.action = action),\n });\n}\n\nfunction createSubcommand<const T extends Subcommand>(input: CheckDuplicatedOptions<T>): Prettify<T & ActionFn<T>> {\n return Object.assign(input, {\n setAction: (action: (res: UnSafeParseResult<[T]>) => void) => (input.action = action),\n });\n}\n\nfunction createOptions<const T extends [Option, ...Option[]]>(options: T): T {\n return options;\n}\n\nconst { printCliHelp, printSubcommandHelp } = help;\n\nexport {\n createCli,\n createSubcommand,\n createOptions,\n parse,\n safeParse,\n printCliHelp,\n printSubcommandHelp,\n generateAutocompleteScript,\n};\n\nexport type * from \"./types.js\";\n"],"mappings":"AAAA,OAASA,IAAI,KAAQ,WAAW,CAChC,OAASC,KAAK,CAAEC,SAAS,KAAQ,aAAa,CAC9C,OAASC,0BAA0B,KAAQ,mBAAmB,CAY9D,QAAS,CAAAC,SAASA,CAAsBC,KAAgC,CAA6B,CACnG,MAAO,CAAAC,MAAM,CAACC,MAAM,CAACF,KAAK,CAAE,CAC1BG,SAAS,CAAGC,MAA6C,EAAMJ,KAAK,CAACI,MAAM,CAAGA,MAChF,CAAC,CAAC,CACJ,CAEA,QAAS,CAAAC,gBAAgBA,CAA6BL,KAAgC,CAA6B,CACjH,MAAO,CAAAC,MAAM,CAACC,MAAM,CAACF,KAAK,CAAE,CAC1BG,SAAS,CAAGC,MAA6C,EAAMJ,KAAK,CAACI,MAAM,CAAGA,MAChF,CAAC,CAAC,CACJ,CAEA,QAAS,CAAAE,aAAaA,CAAwCC,OAAU,CAAK,CAC3E,MAAO,CAAAA,OAAO,CAChB,CAEA,KAAM,CAAEC,YAAY,CAAEC,mBAAoB,CAAC,CAAGd,IAAI,CAElD,OACEI,SAAS,CACTM,gBAAgB,CAChBC,aAAa,CACbV,KAAK,CACLC,SAAS,CACTW,YAAY,CACZC,mBAAmB,CACnBX,0BAA0B","ignoreList":[]}
1
+ {"version":3,"names":["help","createCli","input","setAction","action","Object","assign","createSubcommand","createOptions","options","createArguments","args","printCliHelp","printSubcommandHelp","parse","safeParse","generateBashAutocompleteScript","generatePowerShellAutocompleteScript"],"sourceRoot":"../../src","sources":["index.ts"],"sourcesContent":["import { help } from \"./help.js\";\r\n\r\nimport type {\r\n ActionFn,\r\n Argument,\r\n CheckDuplicatedOptions,\r\n Cli,\r\n Option,\r\n Prettify,\r\n Subcommand,\r\n UnSafeParseResult,\r\n} from \"./types.js\";\r\n\r\n/**\r\n * - Insures that there is no extra keys in `obj` compared to `shape`\r\n * - Also checks objects in arrays useful for the keys `options` and `arguments`\r\n */\r\ntype Exact<Obj extends object, Shape extends object> = {\r\n [K in keyof Obj]: K extends keyof Shape\r\n ? Obj[K] extends infer ObjArr extends object[]\r\n ? Required<Shape>[K] extends infer ShapeArr extends object[]\r\n ? ExactObjArr<ObjArr, ShapeArr[number]>\r\n : Obj[K]\r\n : Obj[K]\r\n : never;\r\n};\r\n\r\n/** - Insures that there is no extra keys in `obj` compared to `shape` */\r\ntype ExactKeys<T extends object, U extends object> = { [K in keyof T]: K extends keyof U ? T[K] : never };\r\n\r\n/** - Insures that there is no extra keys in the objects in an array compared to `shape` */\r\ntype ExactObjArr<ObjArr extends object[], ShapeObj extends object> = {\r\n [K in keyof ObjArr]: ExactKeys<ObjArr[K], ShapeObj>;\r\n};\r\n\r\n/**\r\n * - Insures that there are no duplicated options\r\n * - Disallow extra keys\r\n */\r\ntype CliInput<T extends Cli> = CheckDuplicatedOptions<T> extends T ? Exact<T, Cli> : CheckDuplicatedOptions<T>;\r\n\r\nexport function createCli<const T extends Cli>(input: CliInput<T>) {\r\n const setAction = (action: (res: UnSafeParseResult<[T]>) => void) => {\r\n input.action = action;\r\n };\r\n\r\n return Object.assign(input, { setAction }) as Prettify<CliInput<T> & ActionFn<T>>;\r\n}\r\n\r\n/**\r\n * - Insures that there are no duplicated options\r\n * - Disallow extra keys\r\n */\r\ntype SubcommandInput<T extends Subcommand> =\r\n CheckDuplicatedOptions<T> extends T ? Exact<T, Subcommand> : CheckDuplicatedOptions<T>;\r\n\r\nexport function createSubcommand<const T extends Subcommand>(input: SubcommandInput<T>) {\r\n const setAction = (action: (res: UnSafeParseResult<[T]>) => void) => {\r\n input.action = action;\r\n };\r\n\r\n return Object.assign(input, { setAction }) as Prettify<SubcommandInput<T> & ActionFn<T>>;\r\n}\r\n\r\n/** - Insures that there are no duplicated options */\r\ntype CheckOptionsInput<T extends Option[]> =\r\n CheckDuplicatedOptions<{ options: T }> extends infer Err extends string ? Err : T;\r\n\r\nexport function createOptions<const T extends [Option, ...Option[]]>(options: CheckOptionsInput<T>) {\r\n return options;\r\n}\r\n\r\nexport function createArguments<const T extends [Argument, ...Argument[]]>(args: T) {\r\n return args;\r\n}\r\n\r\nconst { printCliHelp, printSubcommandHelp } = help;\r\nexport { printCliHelp, printSubcommandHelp };\r\n\r\nexport { parse, safeParse } from \"./parser.js\";\r\n\r\nexport { generateBashAutocompleteScript, generatePowerShellAutocompleteScript } from \"./autocomplete.js\";\r\n\r\nexport type * from \"./types.js\";\r\n"],"mappings":"AAAA,OAASA,IAAI,KAAQ,WAAW,CAyChC,MAAO,SAAS,CAAAC,SAASA,CAAsBC,KAAkB,CAAE,CACjE,KAAM,CAAAC,SAAS,CAAIC,MAA6C,EAAK,CACnEF,KAAK,CAACE,MAAM,CAAGA,MAAM,CACvB,CAAC,CAED,MAAO,CAAAC,MAAM,CAACC,MAAM,CAACJ,KAAK,CAAE,CAAEC,SAAU,CAAC,CAAC,CAC5C,CASA,MAAO,SAAS,CAAAI,gBAAgBA,CAA6BL,KAAyB,CAAE,CACtF,KAAM,CAAAC,SAAS,CAAIC,MAA6C,EAAK,CACnEF,KAAK,CAACE,MAAM,CAAGA,MAAM,CACvB,CAAC,CAED,MAAO,CAAAC,MAAM,CAACC,MAAM,CAACJ,KAAK,CAAE,CAAEC,SAAU,CAAC,CAAC,CAC5C,CAMA,MAAO,SAAS,CAAAK,aAAaA,CAAwCC,OAA6B,CAAE,CAClG,MAAO,CAAAA,OAAO,CAChB,CAEA,MAAO,SAAS,CAAAC,eAAeA,CAA4CC,IAAO,CAAE,CAClF,MAAO,CAAAA,IAAI,CACb,CAEA,KAAM,CAAEC,YAAY,CAAEC,mBAAoB,CAAC,CAAGb,IAAI,CAClD,OAASY,YAAY,CAAEC,mBAAmB,EAE1C,OAASC,KAAK,CAAEC,SAAS,KAAQ,aAAa,CAE9C,OAASC,8BAA8B,CAAEC,oCAAoC,KAAQ,mBAAmB","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":["help","decoupleFlags","getOrdinalPlacement","isBooleanSchema","isFlagArg","isOptionArg","noName","stringToBoolean","transformArg","transformOptionToArg","parse","argsv","_len","arguments","length","params","Array","_key","cliOptions","subcommandArr","allSubcommands","Set","flatMap","c","name","aliases","results","subcommand","undefined","printCliHelp","opt","printSubcommandHelp","subcommandStr","find","includes","console","error","cliName","GetSubcommandProps","cmd","addRawArg","optionName","rawArg","_info","Object","create","addRawValue","rawValue","addSource","source","fillOption","value","assign","i","arg","has","subcommandProps","allowPositional","positional","argAndValue","split","filter","Boolean","argWithEquals","argument","argValue","Error","options","msg","isNegative","startsWith","option","o","map","isTypeBoolean","type","nextArg","optionValue","parsedBoolean","res","safeParse","success","errors","message","data","rawVal","currentArgCount","argType","push","isOptional","hasDefault","_def","defaultValue","subcommandArgCount","argumentType","action","_len2","_key2","e"],"sourceRoot":"../../src","sources":["parser.ts"],"sourcesContent":["import { help } from \"./help.js\";\nimport {\n decoupleFlags,\n getOrdinalPlacement,\n isBooleanSchema,\n isFlagArg,\n isOptionArg,\n noName,\n stringToBoolean,\n transformArg,\n transformOptionToArg,\n} from \"./utils.js\";\n\nimport type {\n Cli,\n NoSubcommand,\n Option,\n PrintHelpOpt,\n SafeParseResult,\n Subcommand,\n UnSafeParseResult,\n} from \"./types.js\";\n\nexport function parse<T extends Subcommand[]>(argsv: string[], ...params: T): UnSafeParseResult<T>;\nexport function parse<T extends Subcommand[], U extends Cli>(\n argsv: string[],\n ...params: [U, ...T]\n): UnSafeParseResult<[...T, NoSubcommand & U]>;\n\nexport function parse<T extends Subcommand[], U extends Cli>(argsv: string[], ...params: [U, ...T]) {\n const cliOptions = (\"cliName\" in params[0] ? params[0] : {}) as U;\n const subcommandArr = params as unknown as T;\n const allSubcommands = new Set<string>(subcommandArr.flatMap(c => [c.name, ...(c.aliases || [])]));\n\n // decouple flags E.g. `-rf` -> `-r, -f`\n argsv = decoupleFlags(argsv);\n\n type ResultObj = Record<string, unknown> & {\n subcommand: string | undefined;\n positional?: string[];\n arguments?: unknown[];\n _info?: Record<string, { rawArg?: string; rawValue?: string; source: \"cli\" | \"default\" }>;\n printCliHelp: (options?: PrintHelpOpt) => void;\n printSubcommandHelp: (subcommand: any, options?: PrintHelpOpt) => void;\n };\n\n const results: ResultObj = {\n subcommand: undefined,\n printCliHelp(opt) {\n help.printCliHelp(params, opt);\n },\n printSubcommandHelp(subcommandStr, opt) {\n const subcommand = subcommandArr.find(c => {\n if (c.name === subcommandStr) return true;\n if (!subcommandStr) return false;\n if (!c.aliases?.length) return false;\n return c.aliases.includes(subcommandStr);\n });\n if (!subcommand) return console.error(`Cannot print help for subcommand \"${subcommandStr}\" as it does not exist`);\n help.printSubcommandHelp(subcommand, opt, cliOptions.cliName);\n },\n };\n\n /** - Get current subcommand props */\n const GetSubcommandProps = (cmd = results.subcommand) => {\n return subcommandArr.find(c => {\n if (c.name === cmd) return true;\n if (!cmd) return false;\n if (!c.aliases?.length) return false;\n return c.aliases.includes(cmd);\n });\n };\n\n const addRawArg = (optionName: string, rawArg: string) => {\n if (!results._info) results._info = {};\n if (!results._info[optionName]) results._info[optionName] = Object.create({});\n results._info[optionName].rawArg = rawArg;\n };\n\n const addRawValue = (optionName: string, rawValue: string) => {\n if (!results._info) results._info = {};\n if (!results._info[optionName]) results._info[optionName] = Object.create({});\n results._info[optionName].rawValue = rawValue;\n };\n\n const addSource = (optionName: string, source: \"cli\" | \"default\") => {\n if (!results._info) results._info = {};\n if (!results._info[optionName]) results._info[optionName] = Object.create({});\n results._info[optionName].source = source;\n };\n\n const fillOption = (optionName: string, value: Option) => {\n if (!results._info) results._info = {};\n if (!results._info[optionName]) results._info[optionName] = Object.create({});\n Object.assign(results._info[optionName], value);\n };\n\n for (let i = 0; i < argsv.length; i++) {\n const arg = argsv[i];\n\n // * subcommand\n if (i === 0) {\n results.subcommand = allSubcommands.has(arg) ? arg : undefined;\n\n // add positional and arguments array\n const subcommandProps = GetSubcommandProps();\n if (subcommandProps?.allowPositional) results.positional = [];\n if (subcommandProps?.arguments?.length) results.arguments = [];\n\n if (results.subcommand) continue;\n }\n\n // * option\n const argAndValue = arg.split(\"=\").filter(Boolean);\n const argWithEquals = arg.includes(\"=\");\n const argument = argAndValue[0];\n const argValue: string | undefined = argAndValue[1];\n\n if (isOptionArg(argument)) {\n if (isFlagArg(argument) && argWithEquals) {\n throw new Error(`Flag arguments cannot be assigned using \"=\": \"${arg}\"`);\n }\n\n const subcommandProps = GetSubcommandProps();\n if (!subcommandProps) throw new Error(`Unknown subcommand: \"${results.subcommand}\"`);\n\n if (!subcommandProps.options) {\n const msg = !results.subcommand\n ? \"options are not allowed here\"\n : `subcommand \"${results.subcommand}\" does not allow options`;\n throw new Error(`Error: ${msg}: \"${argument}\"`);\n }\n\n const optionName = transformArg(argument);\n const isNegative = argument.startsWith(\"--no-\");\n\n const option = subcommandProps.options.find(o => {\n if (o.name === optionName) return true;\n if (isNegative && noName(o.name) === optionName) return true;\n\n if (!o.aliases) return false;\n if (o.aliases.includes(optionName)) return true;\n if (isNegative && o.aliases.map(noName).includes(optionName)) return true;\n\n return false;\n });\n\n if (!option) {\n throw new Error(`Unknown option: \"${argument}\"`);\n }\n\n if (option.name in results) {\n throw new Error(`Duplicated option: \"${argument}\"`);\n }\n\n const isTypeBoolean = isBooleanSchema(option.type);\n const nextArg = argsv[i + 1];\n\n let optionValue: string | boolean = argWithEquals ? argValue : nextArg;\n\n if (isTypeBoolean) {\n if (argWithEquals) {\n const parsedBoolean = stringToBoolean(argValue);\n optionValue = isNegative ? !parsedBoolean : parsedBoolean;\n } else {\n optionValue = !isNegative;\n }\n }\n\n if (typeof optionValue === \"undefined\") {\n throw new Error(`Expected a value for \"${argument}\" but got nothing`);\n }\n\n if (!argWithEquals && isOptionArg(optionValue)) {\n throw new Error(`Expected a value for \"${argument}\" but got an argument \"${nextArg}\"`);\n }\n\n const res = option.type.safeParse(optionValue);\n if (!res.success) {\n throw new Error(`Invalid value \"${optionValue}\" for \"${argument}\": ${res.error.errors[0].message}`);\n }\n\n results[option.name] = res.data;\n addRawArg(option.name, argument);\n const rawVal = argWithEquals ? argValue : isTypeBoolean ? \"\" : nextArg;\n addRawValue(option.name, rawVal);\n fillOption(option.name, option);\n\n if (!argWithEquals && !isTypeBoolean) i++;\n continue;\n }\n\n const subcommandProps = GetSubcommandProps();\n\n // * arguments\n if (subcommandProps?.arguments?.length) {\n if (!results.arguments) results.arguments = [];\n\n const currentArgCount = results.arguments.length;\n\n if (currentArgCount < subcommandProps.arguments.length) {\n const argType = subcommandProps.arguments[currentArgCount].type;\n\n let argValue: string | boolean = arg;\n const isTypeBoolean = isBooleanSchema(argType);\n if (isTypeBoolean) argValue = stringToBoolean(argValue);\n\n const res = argType.safeParse(argValue);\n if (!res.success) {\n throw new Error(\n `The ${getOrdinalPlacement(currentArgCount)} argument \"${arg}\" is invalid: ${res.error.errors[0].message}`,\n );\n }\n\n results.arguments.push(res.data);\n continue;\n }\n }\n\n // * positional\n if (subcommandProps?.allowPositional) {\n if (!results.positional) results.positional = [];\n results.positional.push(arg);\n continue;\n }\n\n const msg = !results.subcommand ? \"here\" : `for subcommand \"${results.subcommand}\"`;\n throw new Error(`Unexpected argument \"${arg}\": positional arguments are not allowed ${msg}`);\n }\n\n // check for missing options - set defaults - add _source\n const subcommandProps = GetSubcommandProps();\n if (subcommandProps?.options?.length) {\n for (const option of subcommandProps.options) {\n if (option.name in results) {\n addSource(option.name, \"cli\");\n fillOption(option.name, option);\n continue;\n }\n\n if (option.type.isOptional()) {\n const hasDefault = typeof option.type._def.defaultValue === \"function\";\n if (!hasDefault) continue;\n results[option.name] = option.type._def.defaultValue();\n addSource(option.name, \"default\");\n fillOption(option.name, option);\n continue;\n }\n\n throw new Error(`Missing required option: ${transformOptionToArg(option.name)}`);\n }\n }\n\n // check for arguments - set defaults\n if (subcommandProps?.arguments?.length) {\n const currentArgCount = results.arguments?.length ?? 0;\n const subcommandArgCount = subcommandProps.arguments.length;\n\n // missing arguments\n if (currentArgCount < subcommandArgCount) {\n for (let i = currentArgCount; i < subcommandArgCount; i++) {\n const argumentType = subcommandProps.arguments[i].type;\n const hasDefault = typeof argumentType._def.defaultValue === \"function\";\n if (hasDefault && results.arguments) {\n results.arguments.push(argumentType._def.defaultValue());\n continue;\n }\n\n if (argumentType.isOptional()) continue;\n\n throw new Error(`the ${getOrdinalPlacement(i)} argument is required: \"${subcommandProps.arguments[i].name}\"`);\n }\n }\n }\n\n if (subcommandProps?.action) {\n subcommandProps.action(results);\n }\n\n return results as UnSafeParseResult<[...T, NoSubcommand & U]>;\n}\n\nexport function safeParse<T extends Subcommand[]>(argsv: string[], ...params: T): SafeParseResult<T>;\nexport function safeParse<T extends Subcommand[], U extends Cli>(\n argsv: string[],\n ...params: [U, ...T]\n): SafeParseResult<[...T, NoSubcommand & U]>;\n\nexport function safeParse<T extends Subcommand[], U extends Cli>(argsv: string[], ...params: [U, ...T]) {\n const cliOptions = (\"cliName\" in params[0] ? params[0] : {}) as U;\n const subcommandArr = params as Subcommand[];\n\n const printCliHelp = (opt?: PrintHelpOpt) => help.printCliHelp(params, opt);\n const printSubcommandHelp = (subcommandStr: NonNullable<T[number][\"name\"]>, opt?: PrintHelpOpt) => {\n const subcommand = subcommandArr.find(c => c.name === subcommandStr);\n if (!subcommand) return console.error(`Cannot print help for subcommand \"${subcommandStr}\" as it does not exist`);\n help.printSubcommandHelp(subcommand, opt, cliOptions.cliName);\n };\n\n try {\n const data = parse(argsv, ...params);\n // @ts-expect-error error\n delete data.printCliHelp;\n // @ts-expect-error error\n delete data.printSubcommandHelp;\n\n return {\n success: true,\n data: data as Omit<typeof data, \"printCliHelp\" | \"printSubcommandHelp\">,\n printCliHelp,\n printSubcommandHelp,\n };\n } catch (e) {\n return { success: false, error: e as Error, printCliHelp, printSubcommandHelp };\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["help","decoupleFlags","getOrdinalPlacement","isBooleanSchema","isFlagArg","isOptionArg","noName","stringToBoolean","transformArg","transformOptionToArg","parse","argsv","_len","arguments","length","params","Array","_key","cliOptions","subcommandArr","allSubcommands","Set","flatMap","c","name","aliases","results","subcommand","undefined","printCliHelp","opt","printSubcommandHelp","subcommandStr","find","includes","console","error","cliName","GetSubcommandProps","cmd","addRawArg","optionName","rawArg","_info","Object","create","addRawValue","rawValue","addSource","source","fillOption","value","assign","i","arg","has","subcommandProps","allowPositional","positional","argAndValue","split","filter","Boolean","argWithEquals","argument","argValue","Error","options","msg","isNegative","startsWith","option","o","map","isTypeBoolean","type","nextArg","optionValue","parsedBoolean","res","safeParse","success","errors","message","data","rawVal","currentArgCount","argType","push","isOptional","hasDefault","_def","defaultValue","subcommandArgCount","argumentType","action","_len2","_key2","e"],"sourceRoot":"../../src","sources":["parser.ts"],"sourcesContent":["import { help } from \"./help.js\";\nimport {\n decoupleFlags,\n getOrdinalPlacement,\n isBooleanSchema,\n isFlagArg,\n isOptionArg,\n noName,\n stringToBoolean,\n transformArg,\n transformOptionToArg,\n} from \"./utils.js\";\n\nimport type {\n Cli,\n NoSubcommand,\n Option,\n PrintHelpOpt,\n PrintMethods,\n SafeParseResult,\n Subcommand,\n UnSafeParseResult\n} from \"./types.js\";\n\nexport function parse<T extends Subcommand[], U extends Cli>(\n argsv: string[],\n ...params: [U, ...T]\n): UnSafeParseResult<[...T, NoSubcommand & U]> {\n const cliOptions = (\"cliName\" in params[0] ? params[0] : {}) as U;\n const subcommandArr = params as unknown as T;\n const allSubcommands = new Set<string>(subcommandArr.flatMap(c => [c.name, ...(c.aliases || [])]));\n\n // decouple flags E.g. `-rf` -> `-r, -f`\n argsv = decoupleFlags(argsv);\n\n type ResultObj = Record<string, unknown> & {\n subcommand: string | undefined;\n positional?: string[];\n arguments?: unknown[];\n _info?: Record<string, { rawArg?: string; rawValue?: string; source: \"cli\" | \"default\" }>;\n printCliHelp: (options?: PrintHelpOpt) => void;\n printSubcommandHelp: (subcommand: any, options?: PrintHelpOpt) => void;\n };\n\n const results: ResultObj = {\n subcommand: undefined,\n printCliHelp(opt) {\n help.printCliHelp(params, opt);\n },\n printSubcommandHelp(subcommandStr, opt) {\n const subcommand = subcommandArr.find(c => {\n if (c.name === subcommandStr) return true;\n if (!subcommandStr) return false;\n if (!c.aliases?.length) return false;\n return c.aliases.includes(subcommandStr);\n });\n if (!subcommand) return console.error(`Cannot print help for subcommand \"${subcommandStr}\" as it does not exist`);\n help.printSubcommandHelp(subcommand, opt, cliOptions.cliName);\n },\n };\n\n /** - Get current subcommand props */\n const GetSubcommandProps = (cmd = results.subcommand) => {\n return subcommandArr.find(c => {\n if (c.name === cmd) return true;\n if (!cmd) return false;\n if (!c.aliases?.length) return false;\n return c.aliases.includes(cmd);\n });\n };\n\n const addRawArg = (optionName: string, rawArg: string) => {\n if (!results._info) results._info = {};\n if (!results._info[optionName]) results._info[optionName] = Object.create({});\n results._info[optionName].rawArg = rawArg;\n };\n\n const addRawValue = (optionName: string, rawValue: string) => {\n if (!results._info) results._info = {};\n if (!results._info[optionName]) results._info[optionName] = Object.create({});\n results._info[optionName].rawValue = rawValue;\n };\n\n const addSource = (optionName: string, source: \"cli\" | \"default\") => {\n if (!results._info) results._info = {};\n if (!results._info[optionName]) results._info[optionName] = Object.create({});\n results._info[optionName].source = source;\n };\n\n const fillOption = (optionName: string, value: Option) => {\n if (!results._info) results._info = {};\n if (!results._info[optionName]) results._info[optionName] = Object.create({});\n Object.assign(results._info[optionName], value);\n };\n\n for (let i = 0; i < argsv.length; i++) {\n const arg = argsv[i];\n\n // * subcommand\n if (i === 0) {\n results.subcommand = allSubcommands.has(arg) ? arg : undefined;\n\n // add positional and arguments array\n const subcommandProps = GetSubcommandProps();\n if (subcommandProps?.allowPositional) results.positional = [];\n if (subcommandProps?.arguments?.length) results.arguments = [];\n\n if (results.subcommand) continue;\n }\n\n // * option\n const argAndValue = arg.split(\"=\").filter(Boolean);\n const argWithEquals = arg.includes(\"=\");\n const argument = argAndValue[0];\n const argValue: string | undefined = argAndValue[1];\n\n if (isOptionArg(argument)) {\n if (isFlagArg(argument) && argWithEquals) {\n throw new Error(`Flag arguments cannot be assigned using \"=\": \"${arg}\"`);\n }\n\n const subcommandProps = GetSubcommandProps();\n if (!subcommandProps) throw new Error(`Unknown subcommand: \"${results.subcommand}\"`);\n\n if (!subcommandProps.options) {\n const msg = !results.subcommand\n ? \"options are not allowed here\"\n : `subcommand \"${results.subcommand}\" does not allow options`;\n throw new Error(`Error: ${msg}: \"${argument}\"`);\n }\n\n const optionName = transformArg(argument);\n const isNegative = argument.startsWith(\"--no-\");\n\n const option = subcommandProps.options.find(o => {\n if (o.name === optionName) return true;\n if (isNegative && noName(o.name) === optionName) return true;\n\n if (!o.aliases) return false;\n if (o.aliases.includes(optionName)) return true;\n if (isNegative && o.aliases.map(noName).includes(optionName)) return true;\n\n return false;\n });\n\n if (!option) {\n throw new Error(`Unknown option: \"${argument}\"`);\n }\n\n if (option.name in results) {\n throw new Error(`Duplicated option: \"${argument}\"`);\n }\n\n const isTypeBoolean = isBooleanSchema(option.type);\n const nextArg = argsv[i + 1];\n\n let optionValue: string | boolean = argWithEquals ? argValue : nextArg;\n\n if (isTypeBoolean) {\n if (argWithEquals) {\n const parsedBoolean = stringToBoolean(argValue);\n optionValue = isNegative ? !parsedBoolean : parsedBoolean;\n } else {\n optionValue = !isNegative;\n }\n }\n\n if (typeof optionValue === \"undefined\") {\n throw new Error(`Expected a value for \"${argument}\" but got nothing`);\n }\n\n if (!argWithEquals && isOptionArg(optionValue)) {\n throw new Error(`Expected a value for \"${argument}\" but got an argument \"${nextArg}\"`);\n }\n\n const res = option.type.safeParse(optionValue);\n if (!res.success) {\n throw new Error(`Invalid value \"${optionValue}\" for \"${argument}\": ${res.error.errors[0].message}`);\n }\n\n results[option.name] = res.data;\n addRawArg(option.name, argument);\n const rawVal = argWithEquals ? argValue : isTypeBoolean ? \"\" : nextArg;\n addRawValue(option.name, rawVal);\n fillOption(option.name, option);\n\n if (!argWithEquals && !isTypeBoolean) i++;\n continue;\n }\n\n const subcommandProps = GetSubcommandProps();\n\n // * arguments\n if (subcommandProps?.arguments?.length) {\n if (!results.arguments) results.arguments = [];\n\n const currentArgCount = results.arguments.length;\n\n if (currentArgCount < subcommandProps.arguments.length) {\n const argType = subcommandProps.arguments[currentArgCount].type;\n\n let argValue: string | boolean = arg;\n const isTypeBoolean = isBooleanSchema(argType);\n if (isTypeBoolean) argValue = stringToBoolean(argValue);\n\n const res = argType.safeParse(argValue);\n if (!res.success) {\n throw new Error(\n `The ${getOrdinalPlacement(currentArgCount)} argument \"${arg}\" is invalid: ${res.error.errors[0].message}`,\n );\n }\n\n results.arguments.push(res.data);\n continue;\n }\n }\n\n // * positional\n if (subcommandProps?.allowPositional) {\n if (!results.positional) results.positional = [];\n results.positional.push(arg);\n continue;\n }\n\n const msg = !results.subcommand ? \"here\" : `for subcommand \"${results.subcommand}\"`;\n throw new Error(`Unexpected argument \"${arg}\": positional arguments are not allowed ${msg}`);\n }\n\n // check for missing options - set defaults - add _source\n const subcommandProps = GetSubcommandProps();\n if (subcommandProps?.options?.length) {\n for (const option of subcommandProps.options) {\n if (option.name in results) {\n addSource(option.name, \"cli\");\n fillOption(option.name, option);\n continue;\n }\n\n if (option.type.isOptional()) {\n const hasDefault = typeof option.type._def.defaultValue === \"function\";\n if (!hasDefault) continue;\n results[option.name] = option.type._def.defaultValue();\n addSource(option.name, \"default\");\n fillOption(option.name, option);\n continue;\n }\n\n throw new Error(`Missing required option: ${transformOptionToArg(option.name)}`);\n }\n }\n\n // check for arguments - set defaults\n if (subcommandProps?.arguments?.length) {\n const currentArgCount = results.arguments?.length ?? 0;\n const subcommandArgCount = subcommandProps.arguments.length;\n\n // missing arguments\n if (currentArgCount < subcommandArgCount) {\n for (let i = currentArgCount; i < subcommandArgCount; i++) {\n const argumentType = subcommandProps.arguments[i].type;\n const hasDefault = typeof argumentType._def.defaultValue === \"function\";\n if (hasDefault && results.arguments) {\n results.arguments.push(argumentType._def.defaultValue());\n continue;\n }\n\n if (argumentType.isOptional()) continue;\n\n throw new Error(`the ${getOrdinalPlacement(i)} argument is required: \"${subcommandProps.arguments[i].name}\"`);\n }\n }\n }\n\n if (subcommandProps?.action) {\n subcommandProps.action(results);\n }\n\n return results as UnSafeParseResult<[...T, NoSubcommand & U]>;\n}\n\nexport function safeParse<T extends Subcommand[], U extends Cli>(\n argsv: string[],\n ...params: [U, ...T]\n): SafeParseResult<[...T, NoSubcommand & U]> {\n const cliOptions = (\"cliName\" in params[0] ? params[0] : {}) as U;\n const subcommandArr = params as Subcommand[];\n\n type PrintTypes = PrintMethods<T[number][\"name\"]>;\n type PrintCli = PrintTypes[\"printCliHelp\"];\n type PrintSubcommand = PrintTypes[\"printSubcommandHelp\"];\n\n const printCliHelp: PrintCli = opt => help.printCliHelp(params, opt);\n const printSubcommandHelp: PrintSubcommand = (subcommandStr, opt) => {\n const subcommand = subcommandArr.find(c => c.name === subcommandStr);\n if (!subcommand) return console.error(`Cannot print help for subcommand \"${subcommandStr}\" as it does not exist`);\n help.printSubcommandHelp(subcommand, opt, cliOptions.cliName);\n };\n\n try {\n const data = parse(argsv, ...params);\n // @ts-expect-error The operand of a 'delete' operator must be optional.\n delete data.printCliHelp;\n // @ts-expect-errorThe operand of a 'delete' operator must be optional.\n delete data.printSubcommandHelp;\n\n return {\n success: true,\n data: data as Omit<typeof data, \"printCliHelp\" | \"printSubcommandHelp\">,\n printCliHelp,\n printSubcommandHelp,\n } as SafeParseResult<[...T, NoSubcommand & U]>;\n } catch (e) {\n return {\n success: false,\n error: e as Error,\n printCliHelp,\n printSubcommandHelp,\n } as SafeParseResult<[...T, NoSubcommand & U]>;\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1,4 +1,23 @@
1
1
  import type { Cli, Subcommand } from "./types.js";
2
- /** - Generate bash autocomplete script for your CLI */
3
- export declare function generateAutocompleteScript(...params: [Cli, ...Subcommand[]]): string;
2
+ /**
3
+ * - Generate bash autocomplete script for your CLI
4
+ * - The generated script should be added to your `.bash_profile` or `.bashrc` file:
5
+ *
6
+ * - Run: `nano $HOME/.bash_profile` or `nano $HOME/.bashrc`
7
+ * - Add the following line: `source <generated script path>`
8
+ * - Save and reopen bash to take effect
9
+ */
10
+ export declare function generateBashAutocompleteScript(...params: [Cli, ...Subcommand[]]): string;
11
+ /**
12
+ * - Generates a PowerShell autocomplete script for your CLI.
13
+ * - The script assumes that your CLI is available as a `.ps1` file in the environment variable. For example:
14
+ * `cliName.ps1`.
15
+ * - This should return a path to your script: `(Get-Command <cliName>.ps1).Source`
16
+ * - The generated script should be added to your `profile.ps1` file:
17
+ *
18
+ * - Run: `notepad $profile`
19
+ * - Add the following line: `. "<generated script path>"`
20
+ * - Save and reopen powershell to take effect
21
+ */
22
+ export declare function generatePowerShellAutocompleteScript(...params: [Cli, ...Subcommand[]]): string;
4
23
  //# sourceMappingURL=autocomplete.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"autocomplete.d.ts","sourceRoot":"","sources":["../../src/autocomplete.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAElD,uDAAuD;AACvD,wBAAgB,0BAA0B,CAAC,GAAG,MAAM,EAAE,CAAC,GAAG,EAAE,GAAG,UAAU,EAAE,CAAC,GAAG,MAAM,CAgEpF"}
1
+ {"version":3,"file":"autocomplete.d.ts","sourceRoot":"","sources":["../../src/autocomplete.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAElD;;;;;;;GAOG;AACH,wBAAgB,8BAA8B,CAAC,GAAG,MAAM,EAAE,CAAC,GAAG,EAAE,GAAG,UAAU,EAAE,CAAC,GAAG,MAAM,CAkExF;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,oCAAoC,CAAC,GAAG,MAAM,EAAE,CAAC,GAAG,EAAE,GAAG,UAAU,EAAE,CAAC,GAAG,MAAM,CA4D9F"}
@@ -1,10 +1,40 @@
1
- import { parse, safeParse } from "./parser.js";
2
- import { generateAutocompleteScript } from "./autocomplete.js";
3
- import type { ActionFn, CheckDuplicatedOptions, Cli, Option, Prettify, Subcommand } from "./types.js";
4
- declare function createCli<const T extends Cli>(input: CheckDuplicatedOptions<T>): Prettify<T & ActionFn<T>>;
5
- declare function createSubcommand<const T extends Subcommand>(input: CheckDuplicatedOptions<T>): Prettify<T & ActionFn<T>>;
6
- declare function createOptions<const T extends [Option, ...Option[]]>(options: T): T;
1
+ import type { ActionFn, Argument, CheckDuplicatedOptions, Cli, Option, Prettify, Subcommand } from "./types.js";
2
+ /**
3
+ * - Insures that there is no extra keys in `obj` compared to `shape`
4
+ * - Also checks objects in arrays useful for the keys `options` and `arguments`
5
+ */
6
+ type Exact<Obj extends object, Shape extends object> = {
7
+ [K in keyof Obj]: K extends keyof Shape ? Obj[K] extends infer ObjArr extends object[] ? Required<Shape>[K] extends infer ShapeArr extends object[] ? ExactObjArr<ObjArr, ShapeArr[number]> : Obj[K] : Obj[K] : never;
8
+ };
9
+ /** - Insures that there is no extra keys in `obj` compared to `shape` */
10
+ type ExactKeys<T extends object, U extends object> = {
11
+ [K in keyof T]: K extends keyof U ? T[K] : never;
12
+ };
13
+ /** - Insures that there is no extra keys in the objects in an array compared to `shape` */
14
+ type ExactObjArr<ObjArr extends object[], ShapeObj extends object> = {
15
+ [K in keyof ObjArr]: ExactKeys<ObjArr[K], ShapeObj>;
16
+ };
17
+ /**
18
+ * - Insures that there are no duplicated options
19
+ * - Disallow extra keys
20
+ */
21
+ type CliInput<T extends Cli> = CheckDuplicatedOptions<T> extends T ? Exact<T, Cli> : CheckDuplicatedOptions<T>;
22
+ export declare function createCli<const T extends Cli>(input: CliInput<T>): Prettify<CliInput<T> & ActionFn<T>>;
23
+ /**
24
+ * - Insures that there are no duplicated options
25
+ * - Disallow extra keys
26
+ */
27
+ type SubcommandInput<T extends Subcommand> = CheckDuplicatedOptions<T> extends T ? Exact<T, Subcommand> : CheckDuplicatedOptions<T>;
28
+ export declare function createSubcommand<const T extends Subcommand>(input: SubcommandInput<T>): Prettify<SubcommandInput<T> & ActionFn<T>>;
29
+ /** - Insures that there are no duplicated options */
30
+ type CheckOptionsInput<T extends Option[]> = CheckDuplicatedOptions<{
31
+ options: T;
32
+ }> extends infer Err extends string ? Err : T;
33
+ export declare function createOptions<const T extends [Option, ...Option[]]>(options: CheckOptionsInput<T>): CheckOptionsInput<T>;
34
+ export declare function createArguments<const T extends [Argument, ...Argument[]]>(args: T): T;
7
35
  declare const printCliHelp: (params: [Cli, ...Subcommand[]], printOptions?: import("./types.js").PrintHelpOpt) => void, printSubcommandHelp: (subcommand: Subcommand, printOptions?: import("./types.js").PrintHelpOpt, cliName?: string) => void;
8
- export { createCli, createSubcommand, createOptions, parse, safeParse, printCliHelp, printSubcommandHelp, generateAutocompleteScript, };
36
+ export { printCliHelp, printSubcommandHelp };
37
+ export { parse, safeParse } from "./parser.js";
38
+ export { generateBashAutocompleteScript, generatePowerShellAutocompleteScript } from "./autocomplete.js";
9
39
  export type * from "./types.js";
10
40
  //# sourceMappingURL=index.d.ts.map