@hypercli/cli 0.1.1

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.
Files changed (89) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +26 -0
  3. package/bin/run.js +13 -0
  4. package/dist/autocomplete/base.d.ts +17 -0
  5. package/dist/autocomplete/base.d.ts.map +1 -0
  6. package/dist/autocomplete/base.js +58 -0
  7. package/dist/autocomplete/base.js.map +1 -0
  8. package/dist/autocomplete/completions/bash.d.ts +3 -0
  9. package/dist/autocomplete/completions/bash.d.ts.map +1 -0
  10. package/dist/autocomplete/completions/bash.js +94 -0
  11. package/dist/autocomplete/completions/bash.js.map +1 -0
  12. package/dist/autocomplete/completions/powershell.d.ts +9 -0
  13. package/dist/autocomplete/completions/powershell.d.ts.map +1 -0
  14. package/dist/autocomplete/completions/powershell.js +307 -0
  15. package/dist/autocomplete/completions/powershell.js.map +1 -0
  16. package/dist/autocomplete/completions/shared.d.ts +19 -0
  17. package/dist/autocomplete/completions/shared.d.ts.map +1 -0
  18. package/dist/autocomplete/completions/shared.js +89 -0
  19. package/dist/autocomplete/completions/shared.js.map +1 -0
  20. package/dist/autocomplete/completions/types.d.ts +20 -0
  21. package/dist/autocomplete/completions/types.d.ts.map +1 -0
  22. package/dist/autocomplete/completions/types.js +2 -0
  23. package/dist/autocomplete/completions/types.js.map +1 -0
  24. package/dist/autocomplete/completions/zsh.d.ts +15 -0
  25. package/dist/autocomplete/completions/zsh.d.ts.map +1 -0
  26. package/dist/autocomplete/completions/zsh.js +276 -0
  27. package/dist/autocomplete/completions/zsh.js.map +1 -0
  28. package/dist/autocomplete/dynamic/cache.d.ts +35 -0
  29. package/dist/autocomplete/dynamic/cache.d.ts.map +1 -0
  30. package/dist/autocomplete/dynamic/cache.js +163 -0
  31. package/dist/autocomplete/dynamic/cache.js.map +1 -0
  32. package/dist/autocomplete/dynamic/index.d.ts +10 -0
  33. package/dist/autocomplete/dynamic/index.d.ts.map +1 -0
  34. package/dist/autocomplete/dynamic/index.js +9 -0
  35. package/dist/autocomplete/dynamic/index.js.map +1 -0
  36. package/dist/autocomplete/dynamic/resolver.d.ts +40 -0
  37. package/dist/autocomplete/dynamic/resolver.d.ts.map +1 -0
  38. package/dist/autocomplete/dynamic/resolver.js +164 -0
  39. package/dist/autocomplete/dynamic/resolver.js.map +1 -0
  40. package/dist/autocomplete/dynamic/types.d.ts +39 -0
  41. package/dist/autocomplete/dynamic/types.d.ts.map +1 -0
  42. package/dist/autocomplete/dynamic/types.js +2 -0
  43. package/dist/autocomplete/dynamic/types.js.map +1 -0
  44. package/dist/commands/autocomplete/create.d.ts +30 -0
  45. package/dist/commands/autocomplete/create.d.ts.map +1 -0
  46. package/dist/commands/autocomplete/create.js +141 -0
  47. package/dist/commands/autocomplete/create.js.map +1 -0
  48. package/dist/commands/autocomplete/generate.d.ts +16 -0
  49. package/dist/commands/autocomplete/generate.d.ts.map +1 -0
  50. package/dist/commands/autocomplete/generate.js +59 -0
  51. package/dist/commands/autocomplete/generate.js.map +1 -0
  52. package/dist/commands/autocomplete/index.d.ts +14 -0
  53. package/dist/commands/autocomplete/index.d.ts.map +1 -0
  54. package/dist/commands/autocomplete/index.js +66 -0
  55. package/dist/commands/autocomplete/index.js.map +1 -0
  56. package/dist/commands/autocomplete/script.d.ts +12 -0
  57. package/dist/commands/autocomplete/script.d.ts.map +1 -0
  58. package/dist/commands/autocomplete/script.js +32 -0
  59. package/dist/commands/autocomplete/script.js.map +1 -0
  60. package/dist/commands/config/show.d.ts +12 -0
  61. package/dist/commands/config/show.d.ts.map +1 -0
  62. package/dist/commands/config/show.js +64 -0
  63. package/dist/commands/config/show.js.map +1 -0
  64. package/dist/commands/init.d.ts +11 -0
  65. package/dist/commands/init.d.ts.map +1 -0
  66. package/dist/commands/init.js +76 -0
  67. package/dist/commands/init.js.map +1 -0
  68. package/dist/help/custom-help.d.ts +14 -0
  69. package/dist/help/custom-help.d.ts.map +1 -0
  70. package/dist/help/custom-help.js +110 -0
  71. package/dist/help/custom-help.js.map +1 -0
  72. package/dist/help/theme.d.ts +7 -0
  73. package/dist/help/theme.d.ts.map +1 -0
  74. package/dist/help/theme.js +50 -0
  75. package/dist/help/theme.js.map +1 -0
  76. package/dist/hooks/refresh-cache.d.ts +4 -0
  77. package/dist/hooks/refresh-cache.d.ts.map +1 -0
  78. package/dist/hooks/refresh-cache.js +10 -0
  79. package/dist/hooks/refresh-cache.js.map +1 -0
  80. package/dist/index.d.ts +2 -0
  81. package/dist/index.d.ts.map +1 -0
  82. package/dist/index.js +6 -0
  83. package/dist/index.js.map +1 -0
  84. package/help/config/show.md +27 -0
  85. package/help/cookbook.md +19 -0
  86. package/help/recipe.md +32 -0
  87. package/help/root.md +49 -0
  88. package/oclif.manifest.json +214 -0
  89. package/package.json +126 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2024 Saulo Vallory
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,26 @@
1
+ # @hypercli/cli
2
+
3
+ The `hyper` command — a modern, scalable code generator with AI integration.
4
+
5
+ ## Install
6
+
7
+ ```sh
8
+ npm install -g @hypercli/cli
9
+ ```
10
+
11
+ ## Usage
12
+
13
+ ```sh
14
+ hyper --help
15
+ hyper gen <recipe>
16
+ hyper kit install <kit>
17
+ hyper hq start
18
+ ```
19
+
20
+ ## Documentation
21
+
22
+ Full documentation at [hyperdev.saulo.engineer](https://hyperdev.saulo.engineer).
23
+
24
+ ## License
25
+
26
+ MIT
package/bin/run.js ADDED
@@ -0,0 +1,13 @@
1
+ #!/usr/bin/env node
2
+
3
+ // Disable TypeScript auto-transpilation BEFORE importing oclif
4
+ // This is critical for production to prevent loading .ts files when .js files exist
5
+ // The global must be initialized as an object first, then the property set
6
+ if (!globalThis.oclif) {
7
+ globalThis.oclif = {};
8
+ }
9
+ globalThis.oclif.enableAutoTranspile = false;
10
+
11
+ import { execute } from "@oclif/core";
12
+
13
+ await execute({ dir: import.meta.url });
@@ -0,0 +1,17 @@
1
+ import { Command } from "@oclif/core";
2
+ export declare abstract class AutocompleteBase extends Command {
3
+ get acLogfilePath(): string;
4
+ get autocompleteCacheDir(): string;
5
+ get cliBin(): string;
6
+ get cliBinEnvVar(): string;
7
+ determineShell(shell: string): string;
8
+ /**
9
+ * Walk up from cwd to find a directory containing a `.hyper/` folder.
10
+ * Returns the directory path, or null if none found.
11
+ */
12
+ findHyperRoot(): string | null;
13
+ getSetupEnvVar(shell: string): string;
14
+ writeLogFile(msg: string): void;
15
+ private isBashOnWindows;
16
+ }
17
+ //# sourceMappingURL=base.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../src/autocomplete/base.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAEtC,8BAAsB,gBAAiB,SAAQ,OAAO;IACrD,IAAI,aAAa,IAAI,MAAM,CAE1B;IAED,IAAI,oBAAoB,IAAI,MAAM,CAEjC;IAED,IAAI,MAAM,IAAI,MAAM,CAEnB;IAED,IAAI,YAAY,IAAI,MAAM,CAEzB;IAED,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAUrC;;;OAGG;IACH,aAAa,IAAI,MAAM,GAAG,IAAI;IAY9B,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAIrC,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAO/B,OAAO,CAAC,eAAe;CAGvB"}
@@ -0,0 +1,58 @@
1
+ import { existsSync } from "node:fs";
2
+ import { mkdirSync, openSync, writeSync } from "node:fs";
3
+ import { dirname, join, parse } from "node:path";
4
+ import path from "node:path";
5
+ import { Command } from "@oclif/core";
6
+ export class AutocompleteBase extends Command {
7
+ get acLogfilePath() {
8
+ return path.join(this.config.cacheDir, "autocomplete.log");
9
+ }
10
+ get autocompleteCacheDir() {
11
+ return path.join(this.config.cacheDir, "autocomplete");
12
+ }
13
+ get cliBin() {
14
+ return this.config.bin;
15
+ }
16
+ get cliBinEnvVar() {
17
+ return this.config.bin.toUpperCase().replaceAll("-", "_");
18
+ }
19
+ determineShell(shell) {
20
+ if (!shell) {
21
+ this.error("Missing required argument shell");
22
+ }
23
+ else if (this.isBashOnWindows(shell)) {
24
+ return "bash";
25
+ }
26
+ else {
27
+ return shell;
28
+ }
29
+ }
30
+ /**
31
+ * Walk up from cwd to find a directory containing a `.hyper/` folder.
32
+ * Returns the directory path, or null if none found.
33
+ */
34
+ findHyperRoot() {
35
+ let dir = process.cwd();
36
+ const { root } = parse(dir);
37
+ while (dir !== root) {
38
+ if (existsSync(join(dir, ".hyper"))) {
39
+ return dir;
40
+ }
41
+ dir = dirname(dir);
42
+ }
43
+ return null;
44
+ }
45
+ getSetupEnvVar(shell) {
46
+ return `${this.cliBinEnvVar}_AC_${shell.toUpperCase()}_SETUP_PATH`;
47
+ }
48
+ writeLogFile(msg) {
49
+ mkdirSync(this.config.cacheDir, { recursive: true });
50
+ const entry = `[${new Date().toISOString()}] ${msg}\n`;
51
+ const fd = openSync(this.acLogfilePath, "a");
52
+ writeSync(fd, entry);
53
+ }
54
+ isBashOnWindows(shell) {
55
+ return shell.endsWith("\\bash.exe");
56
+ }
57
+ }
58
+ //# sourceMappingURL=base.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.js","sourceRoot":"","sources":["../../src/autocomplete/base.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACzD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AACjD,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAEtC,MAAM,OAAgB,gBAAiB,SAAQ,OAAO;IACrD,IAAI,aAAa;QAChB,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,kBAAkB,CAAC,CAAC;IAC5D,CAAC;IAED,IAAI,oBAAoB;QACvB,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;IACxD,CAAC;IAED,IAAI,MAAM;QACT,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC;IACxB,CAAC;IAED,IAAI,YAAY;QACf,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAC3D,CAAC;IAED,cAAc,CAAC,KAAa;QAC3B,IAAI,CAAC,KAAK,EAAE,CAAC;YACZ,IAAI,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAC;QAC/C,CAAC;aAAM,IAAI,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC;YACxC,OAAO,MAAM,CAAC;QACf,CAAC;aAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACd,CAAC;IACF,CAAC;IAED;;;OAGG;IACH,aAAa;QACZ,IAAI,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;QACxB,MAAM,EAAE,IAAI,EAAE,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;QAC5B,OAAO,GAAG,KAAK,IAAI,EAAE,CAAC;YACrB,IAAI,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,EAAE,CAAC;gBACrC,OAAO,GAAG,CAAC;YACZ,CAAC;YACD,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;QACpB,CAAC;QACD,OAAO,IAAI,CAAC;IACb,CAAC;IAED,cAAc,CAAC,KAAa;QAC3B,OAAO,GAAG,IAAI,CAAC,YAAY,OAAO,KAAK,CAAC,WAAW,EAAE,aAAa,CAAC;IACpE,CAAC;IAED,YAAY,CAAC,GAAW;QACvB,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACrD,MAAM,KAAK,GAAG,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,GAAG,IAAI,CAAC;QACvD,MAAM,EAAE,GAAG,QAAQ,CAAC,IAAI,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC;QAC7C,SAAS,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;IACtB,CAAC;IAEO,eAAe,CAAC,KAAa;QACpC,OAAO,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;IACrC,CAAC;CACD"}
@@ -0,0 +1,3 @@
1
+ declare const script = "#!/usr/bin/env bash\n\n# This function joins an array using a character passed in\n# e.g. ARRAY=(one two three) -> join_by \":\" ${ARRAY[@]} -> \"one:two:three\"\nfunction join_by { local IFS=\"$1\"; shift; echo \"$*\"; }\n\n_<CLI_BIN>_autocomplete()\n{\n\n local cur=\"${COMP_WORDS[COMP_CWORD]}\" opts normalizedCommand colonPrefix IFS=$' \\t\\n'\n COMPREPLY=()\n\n local commands=\"\n<BASH_COMMANDS_WITH_FLAGS_LIST>\n\"\n\n function __trim_colon_commands()\n {\n # Turn $commands into an array\n commands=(\"${commands[@]}\")\n\n if [[ -z \"$colonPrefix\" ]]; then\n colonPrefix=\"$normalizedCommand:\"\n fi\n\n # Remove colon-word prefix from $commands\n commands=( \"${commands[@]/$colonPrefix}\" )\n\n for i in \"${!commands[@]}\"; do\n if [[ \"${commands[$i]}\" == \"$normalizedCommand\" ]]; then\n # If the currently typed in command is a topic command we need to remove it to avoid suggesting it again\n unset \"${commands[$i]}\"\n else\n # Trim subcommands from each command\n commands[$i]=\"${commands[$i]%%:*}\"\n fi\n done\n }\n\n if [[ \"$cur\" != \"-\"* ]]; then\n # Command\n __COMP_WORDS=( \"${COMP_WORDS[@]:1}\" )\n\n # The command typed by the user but separated by colons (e.g. \"mycli command subcom\" -> \"command:subcom\")\n normalizedCommand=\"$( printf \"%s\" \"$(join_by \":\" \"${__COMP_WORDS[@]}\")\" )\"\n\n # The command hirarchy, with colons, leading up to the last subcommand entered (e.g. \"mycli com subcommand subsubcom\" -> \"com:subcommand:\")\n colonPrefix=\"${normalizedCommand%\"${normalizedCommand##*:}\"}\"\n\n if [[ -z \"$normalizedCommand\" ]]; then\n # If there is no normalizedCommand yet the user hasn't typed in a full command\n # So we should trim all subcommands & flags from $commands so we can suggest all top level commands\n opts=$(printf \"%s \" \"${commands[@]}\" | grep -Eo '^[a-zA-Z0-9_-]+')\n else\n # Filter $commands to just the ones that match the $normalizedCommand and turn into an array\n commands=( $(compgen -W \"$commands\" -- \"${normalizedCommand}\") )\n # Trim higher level and subcommands from the subcommands to suggest\n __trim_colon_commands \"$colonPrefix\"\n\n opts=$(printf \"%s \" \"${commands[@]}\") # | grep -Eo '^[a-zA-Z0-9_-]+'\n fi\n\n # Dynamic completions (kit/cookbook/recipe names)\n local dynamic_opts\n dynamic_opts=$(<CLI_BIN> autocomplete generate -- \"${COMP_WORDS[@]:1}\" 2>/dev/null)\n if [[ -n \"$dynamic_opts\" ]]; then\n opts=\"$opts $dynamic_opts\"\n fi\n else\n # Flag\n\n # The full CLI command separated by colons (e.g. \"mycli command subcommand --fl\" -> \"command:subcommand\")\n # This needs to be defined with $COMP_CWORD-1 as opposed to above because the current \"word\" on the command line is a flag and the command is everything before the flag\n normalizedCommand=\"$( printf \"%s\" \"$(join_by \":\" \"${COMP_WORDS[@]:1:($COMP_CWORD - 1)}\")\" )\"\n\n # The line below finds the command in $commands using grep\n # Then, using sed, it removes everything from the found command before the --flags (e.g. \"command:subcommand:subsubcom --flag1 --flag2\" -> \"--flag1 --flag2\")\n opts=$(printf \"%s \" \"${commands[@]}\" | grep \"${normalizedCommand}\" | sed -n \"s/^${normalizedCommand} //p\")\n\n # Dynamic flag completions\n local dynamic_flag_opts\n dynamic_flag_opts=$(<CLI_BIN> autocomplete generate -- \"${COMP_WORDS[@]:1}\" 2>/dev/null)\n if [[ -n \"$dynamic_flag_opts\" ]]; then\n opts=\"$opts $dynamic_flag_opts\"\n fi\n fi\n\n COMPREPLY=($(compgen -W \"$opts\" -- \"${cur}\"))\n}\n\ncomplete -F _<CLI_BIN>_autocomplete <CLI_BIN>\n";
2
+ export default script;
3
+ //# sourceMappingURL=bash.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bash.d.ts","sourceRoot":"","sources":["../../../src/autocomplete/completions/bash.ts"],"names":[],"mappings":"AAAA,QAAA,MAAM,MAAM,qrHA2FX,CAAC;AAEF,eAAe,MAAM,CAAC"}
@@ -0,0 +1,94 @@
1
+ const script = `#!/usr/bin/env bash
2
+
3
+ # This function joins an array using a character passed in
4
+ # e.g. ARRAY=(one two three) -> join_by ":" \${ARRAY[@]} -> "one:two:three"
5
+ function join_by { local IFS="$1"; shift; echo "$*"; }
6
+
7
+ _<CLI_BIN>_autocomplete()
8
+ {
9
+
10
+ local cur="\${COMP_WORDS[COMP_CWORD]}" opts normalizedCommand colonPrefix IFS=$' \\t\\n'
11
+ COMPREPLY=()
12
+
13
+ local commands="
14
+ <BASH_COMMANDS_WITH_FLAGS_LIST>
15
+ "
16
+
17
+ function __trim_colon_commands()
18
+ {
19
+ # Turn $commands into an array
20
+ commands=("\${commands[@]}")
21
+
22
+ if [[ -z "$colonPrefix" ]]; then
23
+ colonPrefix="$normalizedCommand:"
24
+ fi
25
+
26
+ # Remove colon-word prefix from $commands
27
+ commands=( "\${commands[@]/$colonPrefix}" )
28
+
29
+ for i in "\${!commands[@]}"; do
30
+ if [[ "\${commands[$i]}" == "$normalizedCommand" ]]; then
31
+ # If the currently typed in command is a topic command we need to remove it to avoid suggesting it again
32
+ unset "\${commands[$i]}"
33
+ else
34
+ # Trim subcommands from each command
35
+ commands[$i]="\${commands[$i]%%:*}"
36
+ fi
37
+ done
38
+ }
39
+
40
+ if [[ "$cur" != "-"* ]]; then
41
+ # Command
42
+ __COMP_WORDS=( "\${COMP_WORDS[@]:1}" )
43
+
44
+ # The command typed by the user but separated by colons (e.g. "mycli command subcom" -> "command:subcom")
45
+ normalizedCommand="$( printf "%s" "$(join_by ":" "\${__COMP_WORDS[@]}")" )"
46
+
47
+ # The command hirarchy, with colons, leading up to the last subcommand entered (e.g. "mycli com subcommand subsubcom" -> "com:subcommand:")
48
+ colonPrefix="\${normalizedCommand%"\${normalizedCommand##*:}"}"
49
+
50
+ if [[ -z "$normalizedCommand" ]]; then
51
+ # If there is no normalizedCommand yet the user hasn't typed in a full command
52
+ # So we should trim all subcommands & flags from $commands so we can suggest all top level commands
53
+ opts=$(printf "%s " "\${commands[@]}" | grep -Eo '^[a-zA-Z0-9_-]+')
54
+ else
55
+ # Filter $commands to just the ones that match the $normalizedCommand and turn into an array
56
+ commands=( $(compgen -W "$commands" -- "\${normalizedCommand}") )
57
+ # Trim higher level and subcommands from the subcommands to suggest
58
+ __trim_colon_commands "$colonPrefix"
59
+
60
+ opts=$(printf "%s " "\${commands[@]}") # | grep -Eo '^[a-zA-Z0-9_-]+'
61
+ fi
62
+
63
+ # Dynamic completions (kit/cookbook/recipe names)
64
+ local dynamic_opts
65
+ dynamic_opts=$(<CLI_BIN> autocomplete generate -- "\${COMP_WORDS[@]:1}" 2>/dev/null)
66
+ if [[ -n "$dynamic_opts" ]]; then
67
+ opts="$opts $dynamic_opts"
68
+ fi
69
+ else
70
+ # Flag
71
+
72
+ # The full CLI command separated by colons (e.g. "mycli command subcommand --fl" -> "command:subcommand")
73
+ # This needs to be defined with $COMP_CWORD-1 as opposed to above because the current "word" on the command line is a flag and the command is everything before the flag
74
+ normalizedCommand="$( printf "%s" "$(join_by ":" "\${COMP_WORDS[@]:1:($COMP_CWORD - 1)}")" )"
75
+
76
+ # The line below finds the command in $commands using grep
77
+ # Then, using sed, it removes everything from the found command before the --flags (e.g. "command:subcommand:subsubcom --flag1 --flag2" -> "--flag1 --flag2")
78
+ opts=$(printf "%s " "\${commands[@]}" | grep "\${normalizedCommand}" | sed -n "s/^\${normalizedCommand} //p")
79
+
80
+ # Dynamic flag completions
81
+ local dynamic_flag_opts
82
+ dynamic_flag_opts=$(<CLI_BIN> autocomplete generate -- "\${COMP_WORDS[@]:1}" 2>/dev/null)
83
+ if [[ -n "$dynamic_flag_opts" ]]; then
84
+ opts="$opts $dynamic_flag_opts"
85
+ fi
86
+ fi
87
+
88
+ COMPREPLY=($(compgen -W "$opts" -- "\${cur}"))
89
+ }
90
+
91
+ complete -F _<CLI_BIN>_autocomplete <CLI_BIN>
92
+ `;
93
+ export default script;
94
+ //# sourceMappingURL=bash.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bash.js","sourceRoot":"","sources":["../../../src/autocomplete/completions/bash.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2Fd,CAAC;AAEF,eAAe,MAAM,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { CompletionScriptBase } from "./shared.js";
2
+ import type { CommandCompletion } from "./types.js";
3
+ export default class PowerShellComp extends CompletionScriptBase {
4
+ generate(): string;
5
+ genCmdHashtable(cmd: CommandCompletion): string;
6
+ genHashtable(key: string, node: Record<string, Record<string, unknown>>, leafTpl?: string): string;
7
+ sanitizeSummary(summary: string | undefined): string;
8
+ }
9
+ //# sourceMappingURL=powershell.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"powershell.d.ts","sourceRoot":"","sources":["../../../src/autocomplete/completions/powershell.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAEpD,MAAM,CAAC,OAAO,OAAO,cAAe,SAAQ,oBAAoB;IAC/D,QAAQ,IAAI,MAAM;IAqOlB,eAAe,CAAC,GAAG,EAAE,iBAAiB,GAAG,MAAM;IAoC/C,YAAY,CACX,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EAC7C,OAAO,CAAC,EAAE,MAAM,GACd,MAAM;IAwDT,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM;CAWpD"}
@@ -0,0 +1,307 @@
1
+ import { EOL } from "node:os";
2
+ import { format } from "node:util";
3
+ import { CompletionScriptBase } from "./shared.js";
4
+ export default class PowerShellComp extends CompletionScriptBase {
5
+ generate() {
6
+ const genNode = (partialId) => {
7
+ const node = {};
8
+ const nextArgs = [];
9
+ const depth = partialId.split(":").length;
10
+ for (const t of this.topics) {
11
+ const topicNameSplit = t.name.split(":");
12
+ if (t.name.startsWith(`${partialId}:`) && topicNameSplit.length === depth + 1) {
13
+ nextArgs.push(topicNameSplit[depth]);
14
+ node[topicNameSplit[depth]] = this.coTopics.includes(t.name)
15
+ ? {
16
+ ...genNode(`${partialId}:${topicNameSplit[depth]}`),
17
+ }
18
+ : {
19
+ _summary: t.description,
20
+ ...genNode(`${partialId}:${topicNameSplit[depth]}`),
21
+ };
22
+ }
23
+ }
24
+ for (const c of this.commands) {
25
+ const cmdIdSplit = c.id.split(":");
26
+ if (partialId === c.id && this.coTopics.includes(c.id)) {
27
+ node._command = c.id;
28
+ }
29
+ if (c.id.startsWith(`${partialId}:`) &&
30
+ cmdIdSplit.length === depth + 1 &&
31
+ !nextArgs.includes(cmdIdSplit[depth])) {
32
+ node[cmdIdSplit[depth]] = {
33
+ _command: c.id,
34
+ };
35
+ }
36
+ }
37
+ return node;
38
+ };
39
+ const commandTree = {};
40
+ const topLevelArgs = [];
41
+ for (const t of this.topics) {
42
+ if (!t.name.includes(":")) {
43
+ commandTree[t.name] = this.coTopics.includes(t.name)
44
+ ? {
45
+ ...genNode(t.name),
46
+ }
47
+ : {
48
+ _summary: t.description,
49
+ ...genNode(t.name),
50
+ };
51
+ topLevelArgs.push(t.name);
52
+ }
53
+ }
54
+ for (const c of this.commands) {
55
+ if (!c.id.includes(":") && !this.coTopics.includes(c.id)) {
56
+ commandTree[c.id] = {
57
+ _command: c.id,
58
+ };
59
+ topLevelArgs.push(c.id);
60
+ }
61
+ }
62
+ const hashtables = [];
63
+ for (const topLevelArg of topLevelArgs) {
64
+ hashtables.push(this.genHashtable(topLevelArg, commandTree));
65
+ }
66
+ const commandsHashtable = `
67
+ @{
68
+ ${hashtables.join("\n")}
69
+ }`;
70
+ const compRegister = `
71
+ using namespace System.Management.Automation
72
+ using namespace System.Management.Automation.Language
73
+
74
+ $scriptblock = {
75
+ param($WordToComplete, $CommandAst, $CursorPosition)
76
+
77
+ $Commands =${commandsHashtable}
78
+
79
+ # Get the current mode
80
+ $Mode = (Get-PSReadLineKeyHandler | Where-Object {$_.Key -eq "Tab" }).Function
81
+
82
+ # Everything in the current line except the CLI executable name.
83
+ $CurrentLine = $commandAst.CommandElements[1..$commandAst.CommandElements.Count] -split " "
84
+
85
+ # Remove $WordToComplete from the current line.
86
+ if ($WordToComplete -ne "") {
87
+ if ($CurrentLine.Count -eq 1) {
88
+ $CurrentLine = @()
89
+ } else {
90
+ $CurrentLine = $CurrentLine[0..$CurrentLine.Count]
91
+ }
92
+ }
93
+
94
+ # Save flags in current line without the \`--\` prefix.
95
+ $Flags = $CurrentLine | Where-Object {
96
+ $_ -Match "^-{1,2}(\\w+)"
97
+ } | ForEach-Object {
98
+ $_.trim("-")
99
+ }
100
+ # Set $flags to an empty hashtable if there are no flags in the current line.
101
+ if ($Flags -eq $null) {
102
+ $Flags = @{}
103
+ }
104
+
105
+ # No command in the current line, suggest top-level args.
106
+ if ($CurrentLine.Count -eq 0) {
107
+ $Commands.GetEnumerator() | Where-Object {
108
+ $_.Key.StartsWith("$WordToComplete")
109
+ } | Sort-Object -Property key | ForEach-Object {
110
+ New-Object -Type CompletionResult -ArgumentList \`
111
+ $($Mode -eq "MenuComplete" ? "$($_.Key) " : "$($_.Key)"),
112
+ $_.Key,
113
+ "ParameterValue",
114
+ "$($_.Value._summary ?? $_.Value._command.summary ?? " ")"
115
+ }
116
+
117
+ # Dynamic completion for kit/cookbook/recipe names
118
+ $DynamicOutput = & ${this.config.bin} autocomplete generate -- $WordToComplete 2>$null
119
+ if ($DynamicOutput) {
120
+ $DynamicOutput | ForEach-Object {
121
+ New-Object -Type CompletionResult -ArgumentList \`
122
+ $($Mode -eq "MenuComplete" ? "$_ " : "$_"),
123
+ $_,
124
+ "ParameterValue",
125
+ " "
126
+ }
127
+ }
128
+ } else {
129
+ # Start completing command/topic/coTopic
130
+
131
+ $NextArg = $null
132
+ $PrevNode = $null
133
+
134
+ # Iterate over the current line to find the command/topic/coTopic hashtable
135
+ $CurrentLine | ForEach-Object {
136
+ if ($NextArg -eq $null) {
137
+ $NextArg = $Commands[$_]
138
+ } elseif ($PrevNode[$_] -ne $null) {
139
+ $NextArg = $PrevNode[$_]
140
+ } elseif ($_.StartsWith('-')) {
141
+ return
142
+ } else {
143
+ $NextArg = $PrevNode
144
+ }
145
+
146
+ $PrevNode = $NextArg
147
+ }
148
+
149
+ # Start completing command.
150
+ if ($NextArg._command -ne $null) {
151
+ # Complete flags
152
+ # \`cli config list -<TAB>\`
153
+ if ($WordToComplete -like '-*') {
154
+ $NextArg._command.flags.GetEnumerator() | Sort-Object -Property key
155
+ | Where-Object {
156
+ # Filter out already used flags (unless \`flag.multiple = true\`).
157
+ $_.Key.StartsWith("$($WordToComplete.Trim("-"))") -and ($_.Value.multiple -eq $true -or !$flags.Contains($_.Key))
158
+ }
159
+ | ForEach-Object {
160
+ New-Object -Type CompletionResult -ArgumentList \`
161
+ $($Mode -eq "MenuComplete" ? "--$($_.Key) " : "--$($_.Key)"),
162
+ $_.Key,
163
+ "ParameterValue",
164
+ "$($NextArg._command.flags[$_.Key].summary ?? " ")"
165
+ }
166
+ } else {
167
+ # This could be a coTopic. We remove the "_command" hashtable
168
+ # from $NextArg and check if there's a command under the current partial ID.
169
+ $NextArg.remove("_command")
170
+
171
+ if ($NextArg.keys -gt 0) {
172
+ $NextArg.GetEnumerator() | Where-Object {
173
+ $_.Key.StartsWith("$WordToComplete")
174
+ } | Sort-Object -Property key | ForEach-Object {
175
+ New-Object -Type CompletionResult -ArgumentList \`
176
+ $($Mode -eq "MenuComplete" ? "$($_.Key) " : "$($_.Key)"),
177
+ $_.Key,
178
+ "ParameterValue",
179
+ "$($NextArg[$_.Key]._summary ?? " ")"
180
+ }
181
+ }
182
+ }
183
+ } else {
184
+ # Start completing topic.
185
+
186
+ # Topic summary is stored as "_summary" in the hashtable.
187
+ # At this stage it is no longer needed so we remove it
188
+ # so that $NextArg contains only commands/topics hashtables
189
+
190
+ $NextArg.remove("_summary")
191
+
192
+ $NextArg.GetEnumerator() | Where-Object {
193
+ $_.Key.StartsWith("$WordToComplete")
194
+ } | Sort-Object -Property key | ForEach-Object {
195
+ New-Object -Type CompletionResult -ArgumentList \`
196
+ $($Mode -eq "MenuComplete" ? "$($_.Key) " : "$($_.Key)"),
197
+ $_.Key,
198
+ "ParameterValue",
199
+ "$($NextArg[$_.Key]._summary ?? $NextArg[$_.Key]._command.summary ?? " ")"
200
+ }
201
+ }
202
+
203
+ # Dynamic completion fallback for kit/cookbook/recipe names
204
+ $DynamicOutput = & ${this.config.bin} autocomplete generate -- @($CurrentLine) $WordToComplete 2>$null
205
+ if ($DynamicOutput) {
206
+ $DynamicOutput | ForEach-Object {
207
+ New-Object -Type CompletionResult -ArgumentList \`
208
+ $($Mode -eq "MenuComplete" ? "$_ " : "$_"),
209
+ $_,
210
+ "ParameterValue",
211
+ " "
212
+ }
213
+ }
214
+ }
215
+ }
216
+ Register-ArgumentCompleter -Native -CommandName ${this.config.binAliases ? `@(${[...this.config.binAliases, this.config.bin].map((alias) => `"${alias}"`).join(",")})` : this.config.bin} -ScriptBlock $scriptblock
217
+ `;
218
+ return compRegister;
219
+ }
220
+ genCmdHashtable(cmd) {
221
+ const flaghHashtables = [];
222
+ const flagNames = Object.keys(cmd.flags);
223
+ if (!flagNames.includes("help")) {
224
+ flaghHashtables.push(' "help" = @{ "summary" = "Show help for command" }');
225
+ }
226
+ if (flagNames.length > 0) {
227
+ for (const flagName of flagNames) {
228
+ const f = cmd.flags[flagName];
229
+ if (f.hidden)
230
+ continue;
231
+ const flagSummary = this.sanitizeSummary(f.summary ?? f.description);
232
+ if (f.type === "option" && f.multiple) {
233
+ flaghHashtables.push(` "${f.name}" = @{
234
+ "summary" = "${flagSummary}"
235
+ "multiple" = $true
236
+ }`);
237
+ }
238
+ else {
239
+ flaghHashtables.push(` "${f.name}" = @{ "summary" = "${flagSummary}" }`);
240
+ }
241
+ }
242
+ }
243
+ const cmdHashtable = `@{
244
+ "summary" = "${cmd.summary}"
245
+ "flags" = @{
246
+ ${flaghHashtables.join("\n")}
247
+ }
248
+ }`;
249
+ return cmdHashtable;
250
+ }
251
+ genHashtable(key, node, leafTpl) {
252
+ if (!leafTpl) {
253
+ leafTpl = `"${key}" = @{
254
+ %s
255
+ }
256
+ `;
257
+ }
258
+ const nodeKeys = Object.keys(node[key]);
259
+ if (nodeKeys.includes("_summary")) {
260
+ let childTpl = `"_summary" = "${node[key]._summary}"\n%s`;
261
+ const newKeys = nodeKeys.filter((k) => k !== "_summary");
262
+ if (newKeys.length > 0) {
263
+ const childNodes = [];
264
+ for (const newKey of newKeys) {
265
+ childNodes.push(this.genHashtable(newKey, node[key]));
266
+ }
267
+ childTpl = format(childTpl, childNodes.join("\n"));
268
+ return format(leafTpl, childTpl);
269
+ }
270
+ return format(leafTpl, childTpl);
271
+ }
272
+ const childNodes = [];
273
+ for (const k of nodeKeys) {
274
+ if (k === "_command") {
275
+ const cmd = this.commands.find((c) => c.id === node[key][k]);
276
+ if (!cmd)
277
+ throw new Error("no command");
278
+ childNodes.push(format('"_command" = %s', this.genCmdHashtable(cmd)));
279
+ }
280
+ else if (node[key][k]?._command) {
281
+ const cmd = this.commands.find((c) => c.id === node[key][k]._command);
282
+ if (!cmd)
283
+ throw new Error("no command");
284
+ childNodes.push(format(`"${k}" = @{\n"_command" = %s\n}`, this.genCmdHashtable(cmd)));
285
+ }
286
+ else {
287
+ const childTpl = `"summary" = "${node[key][k]._summary}"\n"${k}" = @{ \n %s\n }`;
288
+ childNodes.push(this.genHashtable(k, node[key], childTpl));
289
+ }
290
+ }
291
+ if (childNodes.length > 0) {
292
+ return format(leafTpl, childNodes.join("\n"));
293
+ }
294
+ return leafTpl;
295
+ }
296
+ sanitizeSummary(summary) {
297
+ if (summary === undefined) {
298
+ return " ";
299
+ }
300
+ return summary
301
+ .replace(/<%= config\.bin %>/g, this.config.bin)
302
+ .replaceAll('"', '""')
303
+ .replaceAll("`", "``")
304
+ .split(EOL)[0];
305
+ }
306
+ }
307
+ //# sourceMappingURL=powershell.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"powershell.js","sourceRoot":"","sources":["../../../src/autocomplete/completions/powershell.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import type { Config } from "@oclif/core";
2
+ import type { CommandCompletion, TopicCompletion } from "./types.js";
3
+ /**
4
+ * Base class for shell completion script generators.
5
+ * Contains shared logic for extracting commands and topics from oclif config.
6
+ */
7
+ export declare abstract class CompletionScriptBase {
8
+ config: Config;
9
+ commands: CommandCompletion[];
10
+ topics: TopicCompletion[];
11
+ private _coTopics;
12
+ constructor(config: Config);
13
+ get coTopics(): string[];
14
+ abstract generate(): string;
15
+ abstract sanitizeSummary(summary: string | undefined): string;
16
+ getCommands(): CommandCompletion[];
17
+ getTopics(): TopicCompletion[];
18
+ }
19
+ //# sourceMappingURL=shared.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../../src/autocomplete/completions/shared.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C,OAAO,KAAK,EAAE,iBAAiB,EAAkB,eAAe,EAAE,MAAM,YAAY,CAAC;AAErF;;;GAGG;AACH,8BAAsB,oBAAoB;IACzC,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,iBAAiB,EAAE,CAAC;IAC9B,MAAM,EAAE,eAAe,EAAE,CAAC;IAE1B,OAAO,CAAC,SAAS,CAAuB;gBAE5B,MAAM,EAAE,MAAM;IAM1B,IAAI,QAAQ,IAAI,MAAM,EAAE,CAcvB;IAED,QAAQ,CAAC,QAAQ,IAAI,MAAM;IAC3B,QAAQ,CAAC,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM;IAE7D,WAAW,IAAI,iBAAiB,EAAE;IA2ClC,SAAS,IAAI,eAAe,EAAE;CAyB9B"}