@shell-shock/preset-script 0.6.0 → 0.6.2

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 (63) hide show
  1. package/README.md +1 -1
  2. package/dist/components/banner-function-declaration.cjs +4 -2
  3. package/dist/components/banner-function-declaration.cjs.map +1 -1
  4. package/dist/components/banner-function-declaration.mjs +4 -2
  5. package/dist/components/banner-function-declaration.mjs.map +1 -1
  6. package/dist/components/bin-entry.cjs +9 -5
  7. package/dist/components/bin-entry.cjs.map +1 -1
  8. package/dist/components/bin-entry.d.cts.map +1 -1
  9. package/dist/components/bin-entry.d.mts.map +1 -1
  10. package/dist/components/bin-entry.mjs +9 -5
  11. package/dist/components/bin-entry.mjs.map +1 -1
  12. package/dist/components/command-entry.cjs +160 -155
  13. package/dist/components/command-entry.cjs.map +1 -1
  14. package/dist/components/command-entry.d.cts +8 -1
  15. package/dist/components/command-entry.d.cts.map +1 -1
  16. package/dist/components/command-entry.d.mts +8 -1
  17. package/dist/components/command-entry.d.mts.map +1 -1
  18. package/dist/components/command-entry.mjs +160 -156
  19. package/dist/components/command-entry.mjs.map +1 -1
  20. package/dist/components/command-router.cjs +90 -61
  21. package/dist/components/command-router.cjs.map +1 -1
  22. package/dist/components/command-router.d.cts +5 -1
  23. package/dist/components/command-router.d.cts.map +1 -1
  24. package/dist/components/command-router.d.mts +5 -1
  25. package/dist/components/command-router.d.mts.map +1 -1
  26. package/dist/components/command-router.mjs +90 -62
  27. package/dist/components/command-router.mjs.map +1 -1
  28. package/dist/components/console-builtin.cjs +27 -19
  29. package/dist/components/console-builtin.cjs.map +1 -1
  30. package/dist/components/console-builtin.d.cts +4 -2
  31. package/dist/components/console-builtin.d.cts.map +1 -1
  32. package/dist/components/console-builtin.d.mts +4 -2
  33. package/dist/components/console-builtin.d.mts.map +1 -1
  34. package/dist/components/console-builtin.mjs +27 -19
  35. package/dist/components/console-builtin.mjs.map +1 -1
  36. package/dist/components/help.d.cts +7 -7
  37. package/dist/components/help.d.cts.map +1 -1
  38. package/dist/components/helpers.d.cts +5 -5
  39. package/dist/components/index.cjs +2 -0
  40. package/dist/components/index.d.cts +4 -4
  41. package/dist/components/index.d.mts +4 -4
  42. package/dist/components/index.mjs +3 -3
  43. package/dist/components/utils-builtin.cjs +59 -92
  44. package/dist/components/utils-builtin.cjs.map +1 -1
  45. package/dist/components/utils-builtin.d.cts +8 -8
  46. package/dist/components/utils-builtin.d.cts.map +1 -1
  47. package/dist/components/utils-builtin.d.mts.map +1 -1
  48. package/dist/components/utils-builtin.mjs +60 -93
  49. package/dist/components/utils-builtin.mjs.map +1 -1
  50. package/dist/components/virtual-command-entry.cjs +16 -12
  51. package/dist/components/virtual-command-entry.cjs.map +1 -1
  52. package/dist/components/virtual-command-entry.d.cts.map +1 -1
  53. package/dist/components/virtual-command-entry.d.mts.map +1 -1
  54. package/dist/components/virtual-command-entry.mjs +16 -12
  55. package/dist/components/virtual-command-entry.mjs.map +1 -1
  56. package/dist/index.cjs +2 -3
  57. package/dist/index.cjs.map +1 -1
  58. package/dist/index.d.cts.map +1 -1
  59. package/dist/index.d.mts.map +1 -1
  60. package/dist/index.mjs +2 -3
  61. package/dist/index.mjs.map +1 -1
  62. package/dist/types/plugin.d.cts.map +1 -1
  63. package/package.json +8 -8
@@ -37,7 +37,6 @@ function CommandRouterRoute() {
37
37
  */
38
38
  function CommandRouter(props) {
39
39
  const { segments, commands, route } = props;
40
- const context = (0, __powerlines_plugin_alloy_core_contexts_context.usePowerlines)();
41
40
  const index = (0, __alloy_js_core.computed)(() => 2 + (segments.length ?? 0));
42
41
  return (0, __alloy_js_core_jsx_runtime.createComponent)(__alloy_js_core.Show, {
43
42
  get when() {
@@ -52,84 +51,114 @@ function CommandRouter(props) {
52
51
  initializer: __alloy_js_core.code`"";`
53
52
  }),
54
53
  (0, __alloy_js_core_jsx_runtime.createIntrinsic)("hbr", {}),
55
- (0, __alloy_js_core_jsx_runtime.createComponent)(__alloy_js_typescript.IfStatement, {
56
- get condition() {
57
- return __alloy_js_core.code`args.length > ${index.value} && args[${index.value}]`;
58
- },
59
- get children() {
60
- return __alloy_js_core.code`command = args[${index.value}];`;
61
- }
62
- }),
63
54
  (0, __alloy_js_core_jsx_runtime.createIntrinsic)("hbr", {}),
64
- (0, __alloy_js_core_jsx_runtime.createComponent)(__alloy_js_core.For, {
65
- get each() {
66
- return Object.values(commands ?? {});
55
+ (0, __alloy_js_core_jsx_runtime.createComponent)(__alloy_js_core.Show, {
56
+ get when() {
57
+ return commands && Object.keys(commands).length > 0;
67
58
  },
68
- children: (subcommand, idx) => (0, __alloy_js_core_jsx_runtime.createComponent)(__shell_shock_core_contexts_command.CommandContext.Provider, {
69
- value: subcommand,
70
- get children() {
71
- return (0, __alloy_js_core_jsx_runtime.createComponent)(__alloy_js_core.Show, {
72
- get when() {
73
- return Boolean(idx);
74
- },
75
- get fallback() {
76
- return (0, __alloy_js_core_jsx_runtime.createComponent)(__alloy_js_typescript.IfStatement, {
77
- get condition() {
78
- return __alloy_js_core.code`${context.config.isCaseSensitive ? "command" : "command.toLowerCase().replaceAll(\"-\", \"\").replaceAll(\"_\", \"\")"} === "${context.config.isCaseSensitive ? subcommand.name : subcommand.name.toLowerCase().replaceAll("-", "").replaceAll("_", "")}"${subcommand.alias && subcommand.alias.length > 0 ? ` || ${subcommand.alias.map((alias) => `${context.config.isCaseSensitive ? "command" : "command.toLowerCase().replaceAll(\"-\", \"\").replaceAll(\"_\", \"\")"} === "${context.config.isCaseSensitive ? alias : alias.toLowerCase().replaceAll("-", "").replaceAll("_", "")}"`).join(" || ")}` : ""}`;
79
- },
80
- get children() {
81
- return (0, __alloy_js_core_jsx_runtime.createComponent)(__alloy_js_core.Show, {
82
- get when() {
83
- return Boolean(route);
84
- },
85
- get fallback() {
86
- return (0, __alloy_js_core_jsx_runtime.createComponent)(CommandRouterRoute, {});
87
- },
88
- children: route
89
- });
90
- }
91
- });
59
+ get children() {
60
+ return [
61
+ (0, __alloy_js_core_jsx_runtime.createComponent)(__alloy_js_typescript.IfStatement, {
62
+ get condition() {
63
+ return __alloy_js_core.code`args.length > ${index.value} && args[${index.value}]`;
92
64
  },
93
65
  get children() {
94
- return (0, __alloy_js_core_jsx_runtime.createComponent)(__alloy_js_typescript.ElseIfClause, {
95
- get condition() {
96
- return __alloy_js_core.code`${context.config.isCaseSensitive ? "command" : "command.toLowerCase().replaceAll(\"-\", \"\").replaceAll(\"_\", \"\")"} === "${context.config.isCaseSensitive ? subcommand.name : subcommand.name.toLowerCase().replaceAll("-", "").replaceAll("_", "")}"${subcommand.alias && subcommand.alias.length > 0 ? ` || ${subcommand.alias.map((alias) => `${context.config.isCaseSensitive ? "command" : "command.toLowerCase().replaceAll(\"-\", \"\").replaceAll(\"_\", \"\")"} === "${context.config.isCaseSensitive ? alias : alias.toLowerCase().replaceAll("-", "").replaceAll("_", "")}"`).join(" || ")}` : ""}`;
97
- },
98
- get children() {
99
- return (0, __alloy_js_core_jsx_runtime.createComponent)(__alloy_js_core.Show, {
100
- get when() {
101
- return Boolean(route);
102
- },
103
- get fallback() {
104
- return (0, __alloy_js_core_jsx_runtime.createComponent)(CommandRouterRoute, {});
105
- },
106
- children: route
107
- });
108
- }
109
- });
66
+ return __alloy_js_core.code`command = args[${index.value}];`;
110
67
  }
111
- });
112
- }
113
- })
68
+ }),
69
+ (0, __alloy_js_core_jsx_runtime.createIntrinsic)("hbr", {}),
70
+ (0, __alloy_js_core_jsx_runtime.createIntrinsic)("hbr", {})
71
+ ];
72
+ }
114
73
  }),
115
- (0, __alloy_js_core_jsx_runtime.createComponent)(__alloy_js_typescript.ElseIfClause, {
116
- condition: __alloy_js_core.code`Boolean(command)`,
74
+ (0, __alloy_js_core_jsx_runtime.createComponent)(CommandRouterBody, {
75
+ segments,
76
+ commands,
77
+ route
78
+ })
79
+ ];
80
+ }
81
+ });
82
+ }
83
+ /**
84
+ * The internal command router body logic component.
85
+ */
86
+ function CommandRouterBody(props) {
87
+ const { commands, route } = props;
88
+ const context = (0, __powerlines_plugin_alloy_core_contexts_context.usePowerlines)();
89
+ return (0, __alloy_js_core_jsx_runtime.createComponent)(__alloy_js_core.Show, {
90
+ get when() {
91
+ return commands && Object.keys(commands).length > 0;
92
+ },
93
+ get children() {
94
+ return [(0, __alloy_js_core_jsx_runtime.createComponent)(__alloy_js_core.For, {
95
+ get each() {
96
+ return Object.values(commands ?? {});
97
+ },
98
+ children: (subcommand, idx) => (0, __alloy_js_core_jsx_runtime.createComponent)(__shell_shock_core_contexts_command.CommandContext.Provider, {
99
+ value: subcommand,
117
100
  get children() {
118
- return __alloy_js_core.code`const suggestions = didYouMean(command, [${Object.values(commands ?? {}).map((cmd) => `"${cmd.name}"${(cmd.alias ?? []).map((alias, i) => i === 0 ? `, "${alias}"` : ` "${alias}"`).join("")}`).join(", ")}], {
101
+ return (0, __alloy_js_core_jsx_runtime.createComponent)(__alloy_js_core.Show, {
102
+ get when() {
103
+ return Boolean(idx);
104
+ },
105
+ get fallback() {
106
+ return (0, __alloy_js_core_jsx_runtime.createComponent)(__alloy_js_typescript.IfStatement, {
107
+ get condition() {
108
+ return __alloy_js_core.code`${context.config.isCaseSensitive ? "command" : "command.toLowerCase().replaceAll(\"-\", \"\").replaceAll(\"_\", \"\")"} === "${context.config.isCaseSensitive ? subcommand.name : subcommand.name.toLowerCase().replaceAll("-", "").replaceAll("_", "")}"${subcommand.alias && subcommand.alias.length > 0 ? ` || ${subcommand.alias.map((alias) => `${context.config.isCaseSensitive ? "command" : "command.toLowerCase().replaceAll(\"-\", \"\").replaceAll(\"_\", \"\")"} === "${context.config.isCaseSensitive ? alias : alias.toLowerCase().replaceAll("-", "").replaceAll("_", "")}"`).join(" || ")}` : ""}`;
109
+ },
110
+ get children() {
111
+ return (0, __alloy_js_core_jsx_runtime.createComponent)(__alloy_js_core.Show, {
112
+ get when() {
113
+ return Boolean(route);
114
+ },
115
+ get fallback() {
116
+ return (0, __alloy_js_core_jsx_runtime.createComponent)(CommandRouterRoute, {});
117
+ },
118
+ children: route
119
+ });
120
+ }
121
+ });
122
+ },
123
+ get children() {
124
+ return (0, __alloy_js_core_jsx_runtime.createComponent)(__alloy_js_typescript.ElseIfClause, {
125
+ get condition() {
126
+ return __alloy_js_core.code`${context.config.isCaseSensitive ? "command" : "command.toLowerCase().replaceAll(\"-\", \"\").replaceAll(\"_\", \"\")"} === "${context.config.isCaseSensitive ? subcommand.name : subcommand.name.toLowerCase().replaceAll("-", "").replaceAll("_", "")}"${subcommand.alias && subcommand.alias.length > 0 ? ` || ${subcommand.alias.map((alias) => `${context.config.isCaseSensitive ? "command" : "command.toLowerCase().replaceAll(\"-\", \"\").replaceAll(\"_\", \"\")"} === "${context.config.isCaseSensitive ? alias : alias.toLowerCase().replaceAll("-", "").replaceAll("_", "")}"`).join(" || ")}` : ""}`;
127
+ },
128
+ get children() {
129
+ return (0, __alloy_js_core_jsx_runtime.createComponent)(__alloy_js_core.Show, {
130
+ get when() {
131
+ return Boolean(route);
132
+ },
133
+ get fallback() {
134
+ return (0, __alloy_js_core_jsx_runtime.createComponent)(CommandRouterRoute, {});
135
+ },
136
+ children: route
137
+ });
138
+ }
139
+ });
140
+ }
141
+ });
142
+ }
143
+ })
144
+ }), (0, __alloy_js_core_jsx_runtime.createComponent)(__alloy_js_typescript.ElseIfClause, {
145
+ condition: __alloy_js_core.code`Boolean(command) && !command.startsWith("-")`,
146
+ get children() {
147
+ return __alloy_js_core.code`const suggestions = didYouMean(command, [${Object.values(commands ?? {}).map((cmd) => `"${cmd.name}"${(cmd.alias ?? []).map((alias, i) => i === 0 ? `, "${alias}"` : ` "${alias}"`).join("")}`).join(", ")}], {
119
148
  caseSensitive: ${JSON.stringify(context.config.isCaseSensitive)},
120
149
  returnType: ReturnTypeEnums.ALL_CLOSEST_MATCHES,
121
150
  thresholdType: ThresholdTypeEnums.SIMILARITY,
122
151
  threshold: 0.75
123
152
  });
124
153
  error(\`Unknown command: "\${command}"\${suggestions && suggestions.length > 0 ? \`, did you mean: \${suggestions.length === 1 ? \`"\${suggestions[0]}"\` : suggestions.map((suggestion, i) => i < suggestions.length - 1 ? \`"\${suggestion}", \` : \`or "\${suggestion}"\`)}?\` : ""} \`);`;
125
- }
126
- })
127
- ];
154
+ }
155
+ })];
128
156
  }
129
157
  });
130
158
  }
131
159
 
132
160
  //#endregion
133
161
  exports.CommandRouter = CommandRouter;
162
+ exports.CommandRouterBody = CommandRouterBody;
134
163
  exports.CommandRouterRoute = CommandRouterRoute;
135
164
  //# sourceMappingURL=command-router.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"command-router.cjs","names":["code","computed","For","Show","ElseIfClause","IfStatement","VarDeclaration","usePowerlines","DynamicImportStatement","CommandContext","useCommand","isDynamicPathSegment","pascalCase","CommandRouterRoute","command","_$createComponent","when","isVirtual","children","name","importPath","segments","filter","segment","length","exportName","_$createIntrinsic","_$memo","CommandRouter","props","commands","route","context","index","Object","keys","type","initializer","condition","value","each","values","subcommand","idx","Provider","Boolean","fallback","config","isCaseSensitive","toLowerCase","replaceAll","alias","map","join","cmd","i","JSON","stringify"],"sources":["../../src/components/command-router.tsx"],"sourcesContent":["/* -------------------------------------------------------------------\n\n ⚡ Storm Software - Shell Shock\n\n This code was released as part of the Shell Shock project. Shell Shock\n is maintained by Storm Software under the Apache-2.0 license, and is\n free for commercial and private use. For more information, please visit\n our licensing page at https://stormsoftware.com/licenses/projects/shell-shock.\n\n Website: https://stormsoftware.com\n Repository: https://github.com/storm-software/shell-shock\n Documentation: https://docs.stormsoftware.com/projects/shell-shock\n Contact: https://stormsoftware.com/contact\n\n SPDX-License-Identifier: Apache-2.0\n\n ------------------------------------------------------------------- */\n\nimport type { Children } from \"@alloy-js/core\";\nimport { code, computed, For, Show } from \"@alloy-js/core\";\nimport {\n ElseIfClause,\n IfStatement,\n VarDeclaration\n} from \"@alloy-js/typescript\";\nimport { usePowerlines } from \"@powerlines/plugin-alloy/core/contexts/context\";\nimport { DynamicImportStatement } from \"@powerlines/plugin-alloy/typescript/components/dynamic-import-statement\";\nimport { CommandContext, useCommand } from \"@shell-shock/core/contexts/command\";\nimport { isDynamicPathSegment } from \"@shell-shock/core/plugin-utils/context-helpers\";\nimport type { CommandTree } from \"@shell-shock/core/types/command\";\nimport { pascalCase } from \"@stryke/string-format/pascal-case\";\nimport type { ScriptPresetContext } from \"../types/plugin\";\n\nexport function CommandRouterRoute() {\n const command = useCommand();\n\n return (\n <>\n <Show when={!command.isVirtual}>\n <DynamicImportStatement\n name={`handle${pascalCase(command.name)}`}\n importPath={`./${\n command.segments.filter(segment => !isDynamicPathSegment(segment))[\n command.segments.filter(segment => !isDynamicPathSegment(segment))\n .length - 1\n ]\n }`}\n exportName=\"handler\"\n />\n </Show>\n <hbr />\n {code`return handle${pascalCase(command.name)}(args);`}\n </>\n );\n}\n\nexport interface CommandRouterProps {\n segments: string[];\n commands?: Record<string, CommandTree>;\n route?: Children;\n}\n\n/**\n * The command router component.\n */\nexport function CommandRouter(props: CommandRouterProps) {\n const { segments, commands, route } = props;\n\n const context = usePowerlines<ScriptPresetContext>();\n const index = computed(() => 2 + (segments.length ?? 0));\n\n return (\n <Show when={commands && Object.keys(commands).length > 0}>\n <VarDeclaration\n let\n name=\"command\"\n type=\"string\"\n initializer={code`\"\";`}\n />\n <hbr />\n <IfStatement\n condition={code`args.length > ${\n index.value\n } && args[${index.value}]`}>{code`command = args[${\n index.value\n }];`}</IfStatement>\n <hbr />\n <For each={Object.values(commands ?? {})}>\n {(subcommand, idx) => (\n <CommandContext.Provider value={subcommand}>\n <Show\n when={Boolean(idx)}\n fallback={\n <IfStatement\n condition={code`${\n context.config.isCaseSensitive\n ? \"command\"\n : 'command.toLowerCase().replaceAll(\"-\", \"\").replaceAll(\"_\", \"\")'\n } === \"${\n context.config.isCaseSensitive\n ? subcommand.name\n : subcommand.name\n .toLowerCase()\n .replaceAll(\"-\", \"\")\n .replaceAll(\"_\", \"\")\n }\"${\n subcommand.alias && subcommand.alias.length > 0\n ? ` || ${subcommand.alias\n .map(\n alias =>\n `${context.config.isCaseSensitive ? \"command\" : 'command.toLowerCase().replaceAll(\"-\", \"\").replaceAll(\"_\", \"\")'} === \"${\n context.config.isCaseSensitive\n ? alias\n : alias\n .toLowerCase()\n .replaceAll(\"-\", \"\")\n .replaceAll(\"_\", \"\")\n }\"`\n )\n .join(\" || \")}`\n : \"\"\n }`}>\n <Show when={Boolean(route)} fallback={<CommandRouterRoute />}>\n {route}\n </Show>\n </IfStatement>\n }>\n <ElseIfClause\n condition={code`${\n context.config.isCaseSensitive\n ? \"command\"\n : 'command.toLowerCase().replaceAll(\"-\", \"\").replaceAll(\"_\", \"\")'\n } === \"${\n context.config.isCaseSensitive\n ? subcommand.name\n : subcommand.name\n .toLowerCase()\n .replaceAll(\"-\", \"\")\n .replaceAll(\"_\", \"\")\n }\"${\n subcommand.alias && subcommand.alias.length > 0\n ? ` || ${subcommand.alias\n .map(\n alias =>\n `${context.config.isCaseSensitive ? \"command\" : 'command.toLowerCase().replaceAll(\"-\", \"\").replaceAll(\"_\", \"\")'} === \"${\n context.config.isCaseSensitive\n ? alias\n : alias\n .toLowerCase()\n .replaceAll(\"-\", \"\")\n .replaceAll(\"_\", \"\")\n }\"`\n )\n .join(\" || \")}`\n : \"\"\n }`}>\n <Show when={Boolean(route)} fallback={<CommandRouterRoute />}>\n {route}\n </Show>\n </ElseIfClause>\n </Show>\n </CommandContext.Provider>\n )}\n </For>\n <ElseIfClause\n condition={code`Boolean(command)`}>{code`const suggestions = didYouMean(command, [${Object.values(\n commands ?? {}\n )\n .map(\n cmd =>\n `\"${cmd.name}\"${(cmd.alias ?? []).map((alias, i) => (i === 0 ? `, \"${alias}\"` : ` \"${alias}\"`)).join(\"\")}`\n )\n .join(\", \")}], {\n caseSensitive: ${JSON.stringify(context.config.isCaseSensitive)},\n returnType: ReturnTypeEnums.ALL_CLOSEST_MATCHES,\n thresholdType: ThresholdTypeEnums.SIMILARITY,\n threshold: 0.75\n });\n error(\\`Unknown command: \"\\${command}\"\\${suggestions && suggestions.length > 0 ? \\`, did you mean: \\${suggestions.length === 1 ? \\`\"\\${suggestions[0]}\"\\` : suggestions.map((suggestion, i) => i < suggestions.length - 1 ? \\`\"\\${suggestion}\", \\` : \\`or \"\\${suggestion}\"\\`)}?\\` : \"\"} \\`);`}</ElseIfClause>\n </Show>\n );\n}\n"],"mappings":";;;;;;;;;;;AAiCA,SAAgBa,qBAAqB;CACnC,MAAMC,+DAAsB;AAE5B,QAAA;mDAEKX,sBAAI;GAAA,IAACa,OAAI;AAAA,WAAE,CAACF,QAAQG;;GAAS,IAAAC,WAAA;AAAA,4DAC3BV,iGAAsB;KAAA,IACrBW,OAAI;AAAA,aAAE,4DAAoBL,QAAQK,KAAK;;KAAE,IACzCC,aAAU;AAAA,aAAE,KACVN,QAAQO,SAASC,QAAOC,YAAW,2EAAsBA,QAAQ,CAAC,CAChET,QAAQO,SAASC,QAAOC,YAAW,2EAAsBA,QAAQ,CAAC,CAC/DC,SAAS;;KAGhBC,YAAU;KAAA,CAAA;;GAAA,CAAA;mDAAA,OAAA,EAAA,CAAA;8CAIbzB,oBAAI,mEAA2Bc,QAAQK,KAAK,CAAA,SAAS;EAAA;;;;;AAc5D,SAAgBS,cAAcC,OAA2B;CACvD,MAAM,EAAER,UAAUS,UAAUC,UAAUF;CAEtC,MAAMG,8EAA8C;CACpD,MAAMC,4CAAuB,KAAKZ,SAASG,UAAU,GAAG;AAExD,yDACGrB,sBAAI;EAAA,IAACa,OAAI;AAAA,UAAEc,YAAYI,OAAOC,KAAKL,SAAS,CAACN,SAAS;;EAAC,IAAAN,WAAA;AAAA,UAAA;qDACrDZ,sCAAc;KAAA,OAAA;KAEba,MAAI;KACJiB,MAAI;KACJC,aAAarC,oBAAI;KAAK,CAAA;qDAAA,OAAA,EAAA,CAAA;qDAGvBK,mCAAW;KAAA,IACViC,YAAS;AAAA,aAAEtC,oBAAI,iBACbiC,MAAMM,MAAK,WACDN,MAAMM,MAAK;;KAAG,IAAArB,WAAA;AAAA,aAAGlB,oBAAI,kBACjCiC,MAAMM,MAAK;;KACT,CAAA;qDAAA,OAAA,EAAA,CAAA;qDAEHrC,qBAAG;KAAA,IAACsC,OAAI;AAAA,aAAEN,OAAOO,OAAOX,YAAY,EAAE,CAAC;;KAAAZ,WACpCwB,YAAYC,yDACXlC,mDAAemC,UAAQ;MAACL,OAAOG;MAAU,IAAAxB,WAAA;AAAA,+DACvCf,sBAAI;QAAA,IACHa,OAAI;AAAA,gBAAE6B,QAAQF,IAAI;;QAAA,IAClBG,WAAQ;AAAA,iEACLzC,mCAAW;UAAA,IACViC,YAAS;AAAA,kBAAEtC,oBAAI,GACbgC,QAAQe,OAAOC,kBACX,YACA,wEAA+D,QAEnEhB,QAAQe,OAAOC,kBACXN,WAAWvB,OACXuB,WAAWvB,KACR8B,aAAa,CACbC,WAAW,KAAK,GAAG,CACnBA,WAAW,KAAK,GAAG,CAAA,GAE1BR,WAAWS,SAAST,WAAWS,MAAM3B,SAAS,IAC1C,OAAOkB,WAAWS,MACfC,KACCD,UACE,GAAGnB,QAAQe,OAAOC,kBAAkB,YAAY,wEAA+D,QAC7GhB,QAAQe,OAAOC,kBACXG,QACAA,MACGF,aAAa,CACbC,WAAW,KAAK,GAAG,CACnBA,WAAW,KAAK,GAAG,CAAA,GAE/B,CACAG,KAAK,OAAO,KACf;;UACJ,IAAAnC,WAAA;AAAA,mEACDf,sBAAI;YAAA,IAACa,OAAI;AAAA,oBAAE6B,QAAQd,MAAM;;YAAA,IAAEe,WAAQ;AAAA,qEAAGjC,oBAAkB,EAAA,CAAA;;YAAAK,UACtDa;YAAK,CAAA;;UAAA,CAAA;;QAAA,IAAAb,WAAA;AAAA,iEAIXd,oCAAY;UAAA,IACXkC,YAAS;AAAA,kBAAEtC,oBAAI,GACbgC,QAAQe,OAAOC,kBACX,YACA,wEAA+D,QAEnEhB,QAAQe,OAAOC,kBACXN,WAAWvB,OACXuB,WAAWvB,KACR8B,aAAa,CACbC,WAAW,KAAK,GAAG,CACnBA,WAAW,KAAK,GAAG,CAAA,GAE1BR,WAAWS,SAAST,WAAWS,MAAM3B,SAAS,IAC1C,OAAOkB,WAAWS,MACfC,KACCD,UACE,GAAGnB,QAAQe,OAAOC,kBAAkB,YAAY,wEAA+D,QAC7GhB,QAAQe,OAAOC,kBACXG,QACAA,MACGF,aAAa,CACbC,WAAW,KAAK,GAAG,CACnBA,WAAW,KAAK,GAAG,CAAA,GAE/B,CACAG,KAAK,OAAO,KACf;;UACJ,IAAAnC,WAAA;AAAA,mEACDf,sBAAI;YAAA,IAACa,OAAI;AAAA,oBAAE6B,QAAQd,MAAM;;YAAA,IAAEe,WAAQ;AAAA,qEAAGjC,oBAAkB,EAAA,CAAA;;YAAAK,UACtDa;YAAK,CAAA;;UAAA,CAAA;;QAAA,CAAA;;MAAA,CAAA;KAKf,CAAA;qDAEF3B,oCAAY;KACXkC,WAAWtC,oBAAI;KAAkB,IAAAkB,WAAA;AAAA,aAAGlB,oBAAI,4CAA4CkC,OAAOO,OAC3FX,YAAY,EACd,CAAC,CACEsB,KACCE,QACE,IAAIA,IAAInC,KAAI,IAAKmC,IAAIH,SAAS,EAAE,EAAEC,KAAKD,OAAOI,MAAOA,MAAM,IAAI,MAAMJ,MAAK,KAAM,KAAKA,MAAK,GAAK,CAACE,KAAK,GAAG,GAC3G,CACAA,KAAK,KAAK,CAAA;2BACQG,KAAKC,UAAUzB,QAAQe,OAAOC,gBAAgB,CAAA;;;;;;;KAK4N,CAAA;IAAA;;EAAA,CAAA"}
1
+ {"version":3,"file":"command-router.cjs","names":["code","computed","For","Show","ElseIfClause","IfStatement","VarDeclaration","usePowerlines","DynamicImportStatement","CommandContext","useCommand","isDynamicPathSegment","pascalCase","CommandRouterRoute","command","_$createComponent","when","isVirtual","children","name","importPath","segments","filter","segment","length","exportName","_$createIntrinsic","_$memo","CommandRouter","props","commands","route","index","Object","keys","type","initializer","condition","value","CommandRouterBody","context","each","values","subcommand","idx","Provider","Boolean","fallback","config","isCaseSensitive","toLowerCase","replaceAll","alias","map","join","cmd","i","JSON","stringify"],"sources":["../../src/components/command-router.tsx"],"sourcesContent":["/* -------------------------------------------------------------------\n\n ⚡ Storm Software - Shell Shock\n\n This code was released as part of the Shell Shock project. Shell Shock\n is maintained by Storm Software under the Apache-2.0 license, and is\n free for commercial and private use. For more information, please visit\n our licensing page at https://stormsoftware.com/licenses/projects/shell-shock.\n\n Website: https://stormsoftware.com\n Repository: https://github.com/storm-software/shell-shock\n Documentation: https://docs.stormsoftware.com/projects/shell-shock\n Contact: https://stormsoftware.com/contact\n\n SPDX-License-Identifier: Apache-2.0\n\n ------------------------------------------------------------------- */\n\nimport type { Children } from \"@alloy-js/core\";\nimport { code, computed, For, Show } from \"@alloy-js/core\";\nimport {\n ElseIfClause,\n IfStatement,\n VarDeclaration\n} from \"@alloy-js/typescript\";\nimport { usePowerlines } from \"@powerlines/plugin-alloy/core/contexts/context\";\nimport { DynamicImportStatement } from \"@powerlines/plugin-alloy/typescript/components/dynamic-import-statement\";\nimport { CommandContext, useCommand } from \"@shell-shock/core/contexts/command\";\nimport { isDynamicPathSegment } from \"@shell-shock/core/plugin-utils/context-helpers\";\nimport type { CommandTree } from \"@shell-shock/core/types/command\";\nimport { pascalCase } from \"@stryke/string-format/pascal-case\";\nimport type { ScriptPresetContext } from \"../types/plugin\";\n\nexport function CommandRouterRoute() {\n const command = useCommand();\n\n return (\n <>\n <Show when={!command.isVirtual}>\n <DynamicImportStatement\n name={`handle${pascalCase(command.name)}`}\n importPath={`./${\n command.segments.filter(segment => !isDynamicPathSegment(segment))[\n command.segments.filter(segment => !isDynamicPathSegment(segment))\n .length - 1\n ]\n }`}\n exportName=\"handler\"\n />\n </Show>\n <hbr />\n {code`return handle${pascalCase(command.name)}(args);`}\n </>\n );\n}\n\nexport interface CommandRouterProps {\n segments: string[];\n commands?: Record<string, CommandTree>;\n route?: Children;\n}\n\n/**\n * The command router component.\n */\nexport function CommandRouter(props: CommandRouterProps) {\n const { segments, commands, route } = props;\n\n const index = computed(() => 2 + (segments.length ?? 0));\n\n return (\n <Show when={commands && Object.keys(commands).length > 0}>\n <VarDeclaration\n let\n name=\"command\"\n type=\"string\"\n initializer={code`\"\";`}\n />\n <hbr />\n <hbr />\n <Show when={commands && Object.keys(commands).length > 0}>\n <IfStatement\n condition={code`args.length > ${\n index.value\n } && args[${index.value}]`}>{code`command = args[${\n index.value\n }];`}</IfStatement>\n <hbr />\n <hbr />\n </Show>\n <CommandRouterBody\n segments={segments}\n commands={commands}\n route={route}\n />\n </Show>\n );\n}\n\n/**\n * The internal command router body logic component.\n */\nexport function CommandRouterBody(props: CommandRouterProps) {\n const { commands, route } = props;\n\n const context = usePowerlines<ScriptPresetContext>();\n\n return (\n <Show when={commands && Object.keys(commands).length > 0}>\n <For each={Object.values(commands ?? {})}>\n {(subcommand, idx) => (\n <CommandContext.Provider value={subcommand}>\n <Show\n when={Boolean(idx)}\n fallback={\n <IfStatement\n condition={code`${\n context.config.isCaseSensitive\n ? \"command\"\n : 'command.toLowerCase().replaceAll(\"-\", \"\").replaceAll(\"_\", \"\")'\n } === \"${\n context.config.isCaseSensitive\n ? subcommand.name\n : subcommand.name\n .toLowerCase()\n .replaceAll(\"-\", \"\")\n .replaceAll(\"_\", \"\")\n }\"${\n subcommand.alias && subcommand.alias.length > 0\n ? ` || ${subcommand.alias\n .map(\n alias =>\n `${context.config.isCaseSensitive ? \"command\" : 'command.toLowerCase().replaceAll(\"-\", \"\").replaceAll(\"_\", \"\")'} === \"${\n context.config.isCaseSensitive\n ? alias\n : alias\n .toLowerCase()\n .replaceAll(\"-\", \"\")\n .replaceAll(\"_\", \"\")\n }\"`\n )\n .join(\" || \")}`\n : \"\"\n }`}>\n <Show when={Boolean(route)} fallback={<CommandRouterRoute />}>\n {route}\n </Show>\n </IfStatement>\n }>\n <ElseIfClause\n condition={code`${\n context.config.isCaseSensitive\n ? \"command\"\n : 'command.toLowerCase().replaceAll(\"-\", \"\").replaceAll(\"_\", \"\")'\n } === \"${\n context.config.isCaseSensitive\n ? subcommand.name\n : subcommand.name\n .toLowerCase()\n .replaceAll(\"-\", \"\")\n .replaceAll(\"_\", \"\")\n }\"${\n subcommand.alias && subcommand.alias.length > 0\n ? ` || ${subcommand.alias\n .map(\n alias =>\n `${context.config.isCaseSensitive ? \"command\" : 'command.toLowerCase().replaceAll(\"-\", \"\").replaceAll(\"_\", \"\")'} === \"${\n context.config.isCaseSensitive\n ? alias\n : alias\n .toLowerCase()\n .replaceAll(\"-\", \"\")\n .replaceAll(\"_\", \"\")\n }\"`\n )\n .join(\" || \")}`\n : \"\"\n }`}>\n <Show when={Boolean(route)} fallback={<CommandRouterRoute />}>\n {route}\n </Show>\n </ElseIfClause>\n </Show>\n </CommandContext.Provider>\n )}\n </For>\n <ElseIfClause\n condition={code`Boolean(command) && !command.startsWith(\"-\")`}>{code`const suggestions = didYouMean(command, [${Object.values(\n commands ?? {}\n )\n .map(\n cmd =>\n `\"${cmd.name}\"${(cmd.alias ?? []).map((alias, i) => (i === 0 ? `, \"${alias}\"` : ` \"${alias}\"`)).join(\"\")}`\n )\n .join(\", \")}], {\n caseSensitive: ${JSON.stringify(context.config.isCaseSensitive)},\n returnType: ReturnTypeEnums.ALL_CLOSEST_MATCHES,\n thresholdType: ThresholdTypeEnums.SIMILARITY,\n threshold: 0.75\n });\n error(\\`Unknown command: \"\\${command}\"\\${suggestions && suggestions.length > 0 ? \\`, did you mean: \\${suggestions.length === 1 ? \\`\"\\${suggestions[0]}\"\\` : suggestions.map((suggestion, i) => i < suggestions.length - 1 ? \\`\"\\${suggestion}\", \\` : \\`or \"\\${suggestion}\"\\`)}?\\` : \"\"} \\`);`}</ElseIfClause>\n </Show>\n );\n}\n"],"mappings":"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"}
@@ -12,6 +12,10 @@ interface CommandRouterProps {
12
12
  * The command router component.
13
13
  */
14
14
  declare function CommandRouter(props: CommandRouterProps): Children;
15
+ /**
16
+ * The internal command router body logic component.
17
+ */
18
+ declare function CommandRouterBody(props: CommandRouterProps): Children;
15
19
  //#endregion
16
- export { CommandRouter, CommandRouterProps, CommandRouterRoute };
20
+ export { CommandRouter, CommandRouterBody, CommandRouterProps, CommandRouterRoute };
17
21
  //# sourceMappingURL=command-router.d.cts.map
@@ -1 +1 @@
1
- {"version":3,"file":"command-router.d.cts","names":[],"sources":["../../src/components/command-router.tsx"],"sourcesContent":[],"mappings":";;;;iBAiCgB,kBAAA,CAAA,GAAkB;UAuBjB,kBAAA;EAvBD,QAAA,EAAA,MAAA,EAAA;EAuBC,QAAA,CAAA,EAEJ,MAFI,CAAA,MAAkB,EAEP,WAFO,CAAA;EAEP,KAAA,CAAA,EAClB,QADkB;;;;AAO5B;iBAAgB,aAAA,QAAqB,qBAAkB"}
1
+ {"version":3,"file":"command-router.d.cts","names":[],"sources":["../../src/components/command-router.tsx"],"sourcesContent":[],"mappings":";;;;iBAiCgB,kBAAA,CAAA,GAAkB;UAuBjB,kBAAA;EAvBD,QAAA,EAAA,MAAA,EAAA;EAuBC,QAAA,CAAA,EAEJ,MAFI,CAAA,MAAkB,EAEP,WAFO,CAAA;EAEP,KAAA,CAAA,EAClB,QADkB;;;;AAO5B;AAqCgB,iBArCA,aAAA,CAqCyB,KAAA,EArCJ,kBAqCsB,CAAA,EArCJ,QAqCI;;;;iBAA3C,iBAAA,QAAyB,qBAAkB"}
@@ -12,6 +12,10 @@ interface CommandRouterProps {
12
12
  * The command router component.
13
13
  */
14
14
  declare function CommandRouter(props: CommandRouterProps): Children;
15
+ /**
16
+ * The internal command router body logic component.
17
+ */
18
+ declare function CommandRouterBody(props: CommandRouterProps): Children;
15
19
  //#endregion
16
- export { CommandRouter, CommandRouterProps, CommandRouterRoute };
20
+ export { CommandRouter, CommandRouterBody, CommandRouterProps, CommandRouterRoute };
17
21
  //# sourceMappingURL=command-router.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"command-router.d.mts","names":[],"sources":["../../src/components/command-router.tsx"],"sourcesContent":[],"mappings":";;;;iBAiCgB,kBAAA,CAAA,GAAkB;UAuBjB,kBAAA;EAvBD,QAAA,EAAA,MAAA,EAAA;EAuBC,QAAA,CAAA,EAEJ,MAFI,CAAA,MAAkB,EAEP,WAFO,CAAA;EAEP,KAAA,CAAA,EAClB,QADkB;;;;AAO5B;iBAAgB,aAAA,QAAqB,qBAAkB"}
1
+ {"version":3,"file":"command-router.d.mts","names":[],"sources":["../../src/components/command-router.tsx"],"sourcesContent":[],"mappings":";;;;iBAiCgB,kBAAA,CAAA,GAAkB;UAuBjB,kBAAA;EAvBD,QAAA,EAAA,MAAA,EAAA;EAuBC,QAAA,CAAA,EAEJ,MAFI,CAAA,MAAkB,EAEP,WAFO,CAAA;EAEP,KAAA,CAAA,EAClB,QADkB;;;;AAO5B;AAqCgB,iBArCA,aAAA,CAqCyB,KAAA,EArCJ,kBAqCsB,CAAA,EArCJ,QAqCI;;;;iBAA3C,iBAAA,QAAyB,qBAAkB"}
@@ -36,7 +36,6 @@ function CommandRouterRoute() {
36
36
  */
37
37
  function CommandRouter(props) {
38
38
  const { segments, commands, route } = props;
39
- const context = usePowerlines();
40
39
  const index = computed(() => 2 + (segments.length ?? 0));
41
40
  return createComponent(Show, {
42
41
  get when() {
@@ -51,83 +50,112 @@ function CommandRouter(props) {
51
50
  initializer: code`"";`
52
51
  }),
53
52
  createIntrinsic("hbr", {}),
54
- createComponent(IfStatement, {
55
- get condition() {
56
- return code`args.length > ${index.value} && args[${index.value}]`;
57
- },
58
- get children() {
59
- return code`command = args[${index.value}];`;
60
- }
61
- }),
62
53
  createIntrinsic("hbr", {}),
63
- createComponent(For, {
64
- get each() {
65
- return Object.values(commands ?? {});
54
+ createComponent(Show, {
55
+ get when() {
56
+ return commands && Object.keys(commands).length > 0;
66
57
  },
67
- children: (subcommand, idx) => createComponent(CommandContext.Provider, {
68
- value: subcommand,
69
- get children() {
70
- return createComponent(Show, {
71
- get when() {
72
- return Boolean(idx);
73
- },
74
- get fallback() {
75
- return createComponent(IfStatement, {
76
- get condition() {
77
- return code`${context.config.isCaseSensitive ? "command" : "command.toLowerCase().replaceAll(\"-\", \"\").replaceAll(\"_\", \"\")"} === "${context.config.isCaseSensitive ? subcommand.name : subcommand.name.toLowerCase().replaceAll("-", "").replaceAll("_", "")}"${subcommand.alias && subcommand.alias.length > 0 ? ` || ${subcommand.alias.map((alias) => `${context.config.isCaseSensitive ? "command" : "command.toLowerCase().replaceAll(\"-\", \"\").replaceAll(\"_\", \"\")"} === "${context.config.isCaseSensitive ? alias : alias.toLowerCase().replaceAll("-", "").replaceAll("_", "")}"`).join(" || ")}` : ""}`;
78
- },
79
- get children() {
80
- return createComponent(Show, {
81
- get when() {
82
- return Boolean(route);
83
- },
84
- get fallback() {
85
- return createComponent(CommandRouterRoute, {});
86
- },
87
- children: route
88
- });
89
- }
90
- });
58
+ get children() {
59
+ return [
60
+ createComponent(IfStatement, {
61
+ get condition() {
62
+ return code`args.length > ${index.value} && args[${index.value}]`;
91
63
  },
92
64
  get children() {
93
- return createComponent(ElseIfClause, {
94
- get condition() {
95
- return code`${context.config.isCaseSensitive ? "command" : "command.toLowerCase().replaceAll(\"-\", \"\").replaceAll(\"_\", \"\")"} === "${context.config.isCaseSensitive ? subcommand.name : subcommand.name.toLowerCase().replaceAll("-", "").replaceAll("_", "")}"${subcommand.alias && subcommand.alias.length > 0 ? ` || ${subcommand.alias.map((alias) => `${context.config.isCaseSensitive ? "command" : "command.toLowerCase().replaceAll(\"-\", \"\").replaceAll(\"_\", \"\")"} === "${context.config.isCaseSensitive ? alias : alias.toLowerCase().replaceAll("-", "").replaceAll("_", "")}"`).join(" || ")}` : ""}`;
96
- },
97
- get children() {
98
- return createComponent(Show, {
99
- get when() {
100
- return Boolean(route);
101
- },
102
- get fallback() {
103
- return createComponent(CommandRouterRoute, {});
104
- },
105
- children: route
106
- });
107
- }
108
- });
65
+ return code`command = args[${index.value}];`;
109
66
  }
110
- });
111
- }
112
- })
67
+ }),
68
+ createIntrinsic("hbr", {}),
69
+ createIntrinsic("hbr", {})
70
+ ];
71
+ }
113
72
  }),
114
- createComponent(ElseIfClause, {
115
- condition: code`Boolean(command)`,
73
+ createComponent(CommandRouterBody, {
74
+ segments,
75
+ commands,
76
+ route
77
+ })
78
+ ];
79
+ }
80
+ });
81
+ }
82
+ /**
83
+ * The internal command router body logic component.
84
+ */
85
+ function CommandRouterBody(props) {
86
+ const { commands, route } = props;
87
+ const context = usePowerlines();
88
+ return createComponent(Show, {
89
+ get when() {
90
+ return commands && Object.keys(commands).length > 0;
91
+ },
92
+ get children() {
93
+ return [createComponent(For, {
94
+ get each() {
95
+ return Object.values(commands ?? {});
96
+ },
97
+ children: (subcommand, idx) => createComponent(CommandContext.Provider, {
98
+ value: subcommand,
116
99
  get children() {
117
- return code`const suggestions = didYouMean(command, [${Object.values(commands ?? {}).map((cmd) => `"${cmd.name}"${(cmd.alias ?? []).map((alias, i) => i === 0 ? `, "${alias}"` : ` "${alias}"`).join("")}`).join(", ")}], {
100
+ return createComponent(Show, {
101
+ get when() {
102
+ return Boolean(idx);
103
+ },
104
+ get fallback() {
105
+ return createComponent(IfStatement, {
106
+ get condition() {
107
+ return code`${context.config.isCaseSensitive ? "command" : "command.toLowerCase().replaceAll(\"-\", \"\").replaceAll(\"_\", \"\")"} === "${context.config.isCaseSensitive ? subcommand.name : subcommand.name.toLowerCase().replaceAll("-", "").replaceAll("_", "")}"${subcommand.alias && subcommand.alias.length > 0 ? ` || ${subcommand.alias.map((alias) => `${context.config.isCaseSensitive ? "command" : "command.toLowerCase().replaceAll(\"-\", \"\").replaceAll(\"_\", \"\")"} === "${context.config.isCaseSensitive ? alias : alias.toLowerCase().replaceAll("-", "").replaceAll("_", "")}"`).join(" || ")}` : ""}`;
108
+ },
109
+ get children() {
110
+ return createComponent(Show, {
111
+ get when() {
112
+ return Boolean(route);
113
+ },
114
+ get fallback() {
115
+ return createComponent(CommandRouterRoute, {});
116
+ },
117
+ children: route
118
+ });
119
+ }
120
+ });
121
+ },
122
+ get children() {
123
+ return createComponent(ElseIfClause, {
124
+ get condition() {
125
+ return code`${context.config.isCaseSensitive ? "command" : "command.toLowerCase().replaceAll(\"-\", \"\").replaceAll(\"_\", \"\")"} === "${context.config.isCaseSensitive ? subcommand.name : subcommand.name.toLowerCase().replaceAll("-", "").replaceAll("_", "")}"${subcommand.alias && subcommand.alias.length > 0 ? ` || ${subcommand.alias.map((alias) => `${context.config.isCaseSensitive ? "command" : "command.toLowerCase().replaceAll(\"-\", \"\").replaceAll(\"_\", \"\")"} === "${context.config.isCaseSensitive ? alias : alias.toLowerCase().replaceAll("-", "").replaceAll("_", "")}"`).join(" || ")}` : ""}`;
126
+ },
127
+ get children() {
128
+ return createComponent(Show, {
129
+ get when() {
130
+ return Boolean(route);
131
+ },
132
+ get fallback() {
133
+ return createComponent(CommandRouterRoute, {});
134
+ },
135
+ children: route
136
+ });
137
+ }
138
+ });
139
+ }
140
+ });
141
+ }
142
+ })
143
+ }), createComponent(ElseIfClause, {
144
+ condition: code`Boolean(command) && !command.startsWith("-")`,
145
+ get children() {
146
+ return code`const suggestions = didYouMean(command, [${Object.values(commands ?? {}).map((cmd) => `"${cmd.name}"${(cmd.alias ?? []).map((alias, i) => i === 0 ? `, "${alias}"` : ` "${alias}"`).join("")}`).join(", ")}], {
118
147
  caseSensitive: ${JSON.stringify(context.config.isCaseSensitive)},
119
148
  returnType: ReturnTypeEnums.ALL_CLOSEST_MATCHES,
120
149
  thresholdType: ThresholdTypeEnums.SIMILARITY,
121
150
  threshold: 0.75
122
151
  });
123
152
  error(\`Unknown command: "\${command}"\${suggestions && suggestions.length > 0 ? \`, did you mean: \${suggestions.length === 1 ? \`"\${suggestions[0]}"\` : suggestions.map((suggestion, i) => i < suggestions.length - 1 ? \`"\${suggestion}", \` : \`or "\${suggestion}"\`)}?\` : ""} \`);`;
124
- }
125
- })
126
- ];
153
+ }
154
+ })];
127
155
  }
128
156
  });
129
157
  }
130
158
 
131
159
  //#endregion
132
- export { CommandRouter, CommandRouterRoute };
160
+ export { CommandRouter, CommandRouterBody, CommandRouterRoute };
133
161
  //# sourceMappingURL=command-router.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"command-router.mjs","names":["code","computed","For","Show","ElseIfClause","IfStatement","VarDeclaration","usePowerlines","DynamicImportStatement","CommandContext","useCommand","isDynamicPathSegment","pascalCase","CommandRouterRoute","command","_$createComponent","when","isVirtual","children","name","importPath","segments","filter","segment","length","exportName","_$createIntrinsic","_$memo","CommandRouter","props","commands","route","context","index","Object","keys","type","initializer","condition","value","each","values","subcommand","idx","Provider","Boolean","fallback","config","isCaseSensitive","toLowerCase","replaceAll","alias","map","join","cmd","i","JSON","stringify"],"sources":["../../src/components/command-router.tsx"],"sourcesContent":["/* -------------------------------------------------------------------\n\n ⚡ Storm Software - Shell Shock\n\n This code was released as part of the Shell Shock project. Shell Shock\n is maintained by Storm Software under the Apache-2.0 license, and is\n free for commercial and private use. For more information, please visit\n our licensing page at https://stormsoftware.com/licenses/projects/shell-shock.\n\n Website: https://stormsoftware.com\n Repository: https://github.com/storm-software/shell-shock\n Documentation: https://docs.stormsoftware.com/projects/shell-shock\n Contact: https://stormsoftware.com/contact\n\n SPDX-License-Identifier: Apache-2.0\n\n ------------------------------------------------------------------- */\n\nimport type { Children } from \"@alloy-js/core\";\nimport { code, computed, For, Show } from \"@alloy-js/core\";\nimport {\n ElseIfClause,\n IfStatement,\n VarDeclaration\n} from \"@alloy-js/typescript\";\nimport { usePowerlines } from \"@powerlines/plugin-alloy/core/contexts/context\";\nimport { DynamicImportStatement } from \"@powerlines/plugin-alloy/typescript/components/dynamic-import-statement\";\nimport { CommandContext, useCommand } from \"@shell-shock/core/contexts/command\";\nimport { isDynamicPathSegment } from \"@shell-shock/core/plugin-utils/context-helpers\";\nimport type { CommandTree } from \"@shell-shock/core/types/command\";\nimport { pascalCase } from \"@stryke/string-format/pascal-case\";\nimport type { ScriptPresetContext } from \"../types/plugin\";\n\nexport function CommandRouterRoute() {\n const command = useCommand();\n\n return (\n <>\n <Show when={!command.isVirtual}>\n <DynamicImportStatement\n name={`handle${pascalCase(command.name)}`}\n importPath={`./${\n command.segments.filter(segment => !isDynamicPathSegment(segment))[\n command.segments.filter(segment => !isDynamicPathSegment(segment))\n .length - 1\n ]\n }`}\n exportName=\"handler\"\n />\n </Show>\n <hbr />\n {code`return handle${pascalCase(command.name)}(args);`}\n </>\n );\n}\n\nexport interface CommandRouterProps {\n segments: string[];\n commands?: Record<string, CommandTree>;\n route?: Children;\n}\n\n/**\n * The command router component.\n */\nexport function CommandRouter(props: CommandRouterProps) {\n const { segments, commands, route } = props;\n\n const context = usePowerlines<ScriptPresetContext>();\n const index = computed(() => 2 + (segments.length ?? 0));\n\n return (\n <Show when={commands && Object.keys(commands).length > 0}>\n <VarDeclaration\n let\n name=\"command\"\n type=\"string\"\n initializer={code`\"\";`}\n />\n <hbr />\n <IfStatement\n condition={code`args.length > ${\n index.value\n } && args[${index.value}]`}>{code`command = args[${\n index.value\n }];`}</IfStatement>\n <hbr />\n <For each={Object.values(commands ?? {})}>\n {(subcommand, idx) => (\n <CommandContext.Provider value={subcommand}>\n <Show\n when={Boolean(idx)}\n fallback={\n <IfStatement\n condition={code`${\n context.config.isCaseSensitive\n ? \"command\"\n : 'command.toLowerCase().replaceAll(\"-\", \"\").replaceAll(\"_\", \"\")'\n } === \"${\n context.config.isCaseSensitive\n ? subcommand.name\n : subcommand.name\n .toLowerCase()\n .replaceAll(\"-\", \"\")\n .replaceAll(\"_\", \"\")\n }\"${\n subcommand.alias && subcommand.alias.length > 0\n ? ` || ${subcommand.alias\n .map(\n alias =>\n `${context.config.isCaseSensitive ? \"command\" : 'command.toLowerCase().replaceAll(\"-\", \"\").replaceAll(\"_\", \"\")'} === \"${\n context.config.isCaseSensitive\n ? alias\n : alias\n .toLowerCase()\n .replaceAll(\"-\", \"\")\n .replaceAll(\"_\", \"\")\n }\"`\n )\n .join(\" || \")}`\n : \"\"\n }`}>\n <Show when={Boolean(route)} fallback={<CommandRouterRoute />}>\n {route}\n </Show>\n </IfStatement>\n }>\n <ElseIfClause\n condition={code`${\n context.config.isCaseSensitive\n ? \"command\"\n : 'command.toLowerCase().replaceAll(\"-\", \"\").replaceAll(\"_\", \"\")'\n } === \"${\n context.config.isCaseSensitive\n ? subcommand.name\n : subcommand.name\n .toLowerCase()\n .replaceAll(\"-\", \"\")\n .replaceAll(\"_\", \"\")\n }\"${\n subcommand.alias && subcommand.alias.length > 0\n ? ` || ${subcommand.alias\n .map(\n alias =>\n `${context.config.isCaseSensitive ? \"command\" : 'command.toLowerCase().replaceAll(\"-\", \"\").replaceAll(\"_\", \"\")'} === \"${\n context.config.isCaseSensitive\n ? alias\n : alias\n .toLowerCase()\n .replaceAll(\"-\", \"\")\n .replaceAll(\"_\", \"\")\n }\"`\n )\n .join(\" || \")}`\n : \"\"\n }`}>\n <Show when={Boolean(route)} fallback={<CommandRouterRoute />}>\n {route}\n </Show>\n </ElseIfClause>\n </Show>\n </CommandContext.Provider>\n )}\n </For>\n <ElseIfClause\n condition={code`Boolean(command)`}>{code`const suggestions = didYouMean(command, [${Object.values(\n commands ?? {}\n )\n .map(\n cmd =>\n `\"${cmd.name}\"${(cmd.alias ?? []).map((alias, i) => (i === 0 ? `, \"${alias}\"` : ` \"${alias}\"`)).join(\"\")}`\n )\n .join(\", \")}], {\n caseSensitive: ${JSON.stringify(context.config.isCaseSensitive)},\n returnType: ReturnTypeEnums.ALL_CLOSEST_MATCHES,\n thresholdType: ThresholdTypeEnums.SIMILARITY,\n threshold: 0.75\n });\n error(\\`Unknown command: \"\\${command}\"\\${suggestions && suggestions.length > 0 ? \\`, did you mean: \\${suggestions.length === 1 ? \\`\"\\${suggestions[0]}\"\\` : suggestions.map((suggestion, i) => i < suggestions.length - 1 ? \\`\"\\${suggestion}\", \\` : \\`or \"\\${suggestion}\"\\`)}?\\` : \"\"} \\`);`}</ElseIfClause>\n </Show>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"command-router.mjs","names":["code","computed","For","Show","ElseIfClause","IfStatement","VarDeclaration","usePowerlines","DynamicImportStatement","CommandContext","useCommand","isDynamicPathSegment","pascalCase","CommandRouterRoute","command","_$createComponent","when","isVirtual","children","name","importPath","segments","filter","segment","length","exportName","_$createIntrinsic","_$memo","CommandRouter","props","commands","route","index","Object","keys","type","initializer","condition","value","CommandRouterBody","context","each","values","subcommand","idx","Provider","Boolean","fallback","config","isCaseSensitive","toLowerCase","replaceAll","alias","map","join","cmd","i","JSON","stringify"],"sources":["../../src/components/command-router.tsx"],"sourcesContent":["/* -------------------------------------------------------------------\n\n ⚡ Storm Software - Shell Shock\n\n This code was released as part of the Shell Shock project. Shell Shock\n is maintained by Storm Software under the Apache-2.0 license, and is\n free for commercial and private use. For more information, please visit\n our licensing page at https://stormsoftware.com/licenses/projects/shell-shock.\n\n Website: https://stormsoftware.com\n Repository: https://github.com/storm-software/shell-shock\n Documentation: https://docs.stormsoftware.com/projects/shell-shock\n Contact: https://stormsoftware.com/contact\n\n SPDX-License-Identifier: Apache-2.0\n\n ------------------------------------------------------------------- */\n\nimport type { Children } from \"@alloy-js/core\";\nimport { code, computed, For, Show } from \"@alloy-js/core\";\nimport {\n ElseIfClause,\n IfStatement,\n VarDeclaration\n} from \"@alloy-js/typescript\";\nimport { usePowerlines } from \"@powerlines/plugin-alloy/core/contexts/context\";\nimport { DynamicImportStatement } from \"@powerlines/plugin-alloy/typescript/components/dynamic-import-statement\";\nimport { CommandContext, useCommand } from \"@shell-shock/core/contexts/command\";\nimport { isDynamicPathSegment } from \"@shell-shock/core/plugin-utils/context-helpers\";\nimport type { CommandTree } from \"@shell-shock/core/types/command\";\nimport { pascalCase } from \"@stryke/string-format/pascal-case\";\nimport type { ScriptPresetContext } from \"../types/plugin\";\n\nexport function CommandRouterRoute() {\n const command = useCommand();\n\n return (\n <>\n <Show when={!command.isVirtual}>\n <DynamicImportStatement\n name={`handle${pascalCase(command.name)}`}\n importPath={`./${\n command.segments.filter(segment => !isDynamicPathSegment(segment))[\n command.segments.filter(segment => !isDynamicPathSegment(segment))\n .length - 1\n ]\n }`}\n exportName=\"handler\"\n />\n </Show>\n <hbr />\n {code`return handle${pascalCase(command.name)}(args);`}\n </>\n );\n}\n\nexport interface CommandRouterProps {\n segments: string[];\n commands?: Record<string, CommandTree>;\n route?: Children;\n}\n\n/**\n * The command router component.\n */\nexport function CommandRouter(props: CommandRouterProps) {\n const { segments, commands, route } = props;\n\n const index = computed(() => 2 + (segments.length ?? 0));\n\n return (\n <Show when={commands && Object.keys(commands).length > 0}>\n <VarDeclaration\n let\n name=\"command\"\n type=\"string\"\n initializer={code`\"\";`}\n />\n <hbr />\n <hbr />\n <Show when={commands && Object.keys(commands).length > 0}>\n <IfStatement\n condition={code`args.length > ${\n index.value\n } && args[${index.value}]`}>{code`command = args[${\n index.value\n }];`}</IfStatement>\n <hbr />\n <hbr />\n </Show>\n <CommandRouterBody\n segments={segments}\n commands={commands}\n route={route}\n />\n </Show>\n );\n}\n\n/**\n * The internal command router body logic component.\n */\nexport function CommandRouterBody(props: CommandRouterProps) {\n const { commands, route } = props;\n\n const context = usePowerlines<ScriptPresetContext>();\n\n return (\n <Show when={commands && Object.keys(commands).length > 0}>\n <For each={Object.values(commands ?? {})}>\n {(subcommand, idx) => (\n <CommandContext.Provider value={subcommand}>\n <Show\n when={Boolean(idx)}\n fallback={\n <IfStatement\n condition={code`${\n context.config.isCaseSensitive\n ? \"command\"\n : 'command.toLowerCase().replaceAll(\"-\", \"\").replaceAll(\"_\", \"\")'\n } === \"${\n context.config.isCaseSensitive\n ? subcommand.name\n : subcommand.name\n .toLowerCase()\n .replaceAll(\"-\", \"\")\n .replaceAll(\"_\", \"\")\n }\"${\n subcommand.alias && subcommand.alias.length > 0\n ? ` || ${subcommand.alias\n .map(\n alias =>\n `${context.config.isCaseSensitive ? \"command\" : 'command.toLowerCase().replaceAll(\"-\", \"\").replaceAll(\"_\", \"\")'} === \"${\n context.config.isCaseSensitive\n ? alias\n : alias\n .toLowerCase()\n .replaceAll(\"-\", \"\")\n .replaceAll(\"_\", \"\")\n }\"`\n )\n .join(\" || \")}`\n : \"\"\n }`}>\n <Show when={Boolean(route)} fallback={<CommandRouterRoute />}>\n {route}\n </Show>\n </IfStatement>\n }>\n <ElseIfClause\n condition={code`${\n context.config.isCaseSensitive\n ? \"command\"\n : 'command.toLowerCase().replaceAll(\"-\", \"\").replaceAll(\"_\", \"\")'\n } === \"${\n context.config.isCaseSensitive\n ? subcommand.name\n : subcommand.name\n .toLowerCase()\n .replaceAll(\"-\", \"\")\n .replaceAll(\"_\", \"\")\n }\"${\n subcommand.alias && subcommand.alias.length > 0\n ? ` || ${subcommand.alias\n .map(\n alias =>\n `${context.config.isCaseSensitive ? \"command\" : 'command.toLowerCase().replaceAll(\"-\", \"\").replaceAll(\"_\", \"\")'} === \"${\n context.config.isCaseSensitive\n ? alias\n : alias\n .toLowerCase()\n .replaceAll(\"-\", \"\")\n .replaceAll(\"_\", \"\")\n }\"`\n )\n .join(\" || \")}`\n : \"\"\n }`}>\n <Show when={Boolean(route)} fallback={<CommandRouterRoute />}>\n {route}\n </Show>\n </ElseIfClause>\n </Show>\n </CommandContext.Provider>\n )}\n </For>\n <ElseIfClause\n condition={code`Boolean(command) && !command.startsWith(\"-\")`}>{code`const suggestions = didYouMean(command, [${Object.values(\n commands ?? {}\n )\n .map(\n cmd =>\n `\"${cmd.name}\"${(cmd.alias ?? []).map((alias, i) => (i === 0 ? `, \"${alias}\"` : ` \"${alias}\"`)).join(\"\")}`\n )\n .join(\", \")}], {\n caseSensitive: ${JSON.stringify(context.config.isCaseSensitive)},\n returnType: ReturnTypeEnums.ALL_CLOSEST_MATCHES,\n thresholdType: ThresholdTypeEnums.SIMILARITY,\n threshold: 0.75\n });\n error(\\`Unknown command: \"\\${command}\"\\${suggestions && suggestions.length > 0 ? \\`, did you mean: \\${suggestions.length === 1 ? \\`\"\\${suggestions[0]}\"\\` : suggestions.map((suggestion, i) => i < suggestions.length - 1 ? \\`\"\\${suggestion}\", \\` : \\`or \"\\${suggestion}\"\\`)}?\\` : \"\"} \\`);`}</ElseIfClause>\n </Show>\n );\n}\n"],"mappings":"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"}
@@ -5,6 +5,7 @@ let __alloy_js_core_jsx_runtime = require("@alloy-js/core/jsx-runtime");
5
5
  let __alloy_js_core = require("@alloy-js/core");
6
6
  let __alloy_js_typescript = require("@alloy-js/typescript");
7
7
  let __powerlines_plugin_alloy_typescript_components_tsdoc = require("@powerlines/plugin-alloy/typescript/components/tsdoc");
8
+ let defu = require("defu");
8
9
  let __powerlines_deepkit_vendor_type = require("@powerlines/deepkit/vendor/type");
9
10
  let __powerlines_plugin_alloy_typescript_components_builtin_file = require("@powerlines/plugin-alloy/typescript/components/builtin-file");
10
11
  let __stryke_string_format_vowels = require("@stryke/string-format/vowels");
@@ -2094,28 +2095,32 @@ cells.forEach((row, rowIndex) => {
2094
2095
  /**
2095
2096
  * A built-in console utilities module for Shell Shock.
2096
2097
  */
2097
- function ConsoleBuiltin() {
2098
+ function ConsoleBuiltin(props) {
2099
+ const { children, imports, builtinImports } = props;
2098
2100
  return (0, __alloy_js_core_jsx_runtime.createComponent)(__powerlines_plugin_alloy_typescript_components_builtin_file.BuiltinFile, {
2099
2101
  id: "console",
2100
2102
  description: "A collection of helper utilities to assist in generating content meant for display in the console.",
2101
- imports: { "@shell-shock/plugin-theme/types/theme": [{
2102
- name: "ThemeColorsResolvedConfig",
2103
- type: true
2104
- }] },
2105
- builtinImports: {
2106
- utils: [
2107
- "hasFlag",
2108
- "isMinimal",
2109
- "isColorSupported",
2110
- "colorSupportLevels",
2111
- "isHyperlinkSupported"
2112
- ],
2113
- env: [
2114
- "env",
2115
- "isDevelopment",
2116
- "isDebug",
2117
- "isCI"
2118
- ]
2103
+ get imports() {
2104
+ return (0, defu.defu)(imports, { "@shell-shock/plugin-theme/types/theme": [{
2105
+ name: "ThemeColorsResolvedConfig",
2106
+ type: true
2107
+ }] });
2108
+ },
2109
+ get builtinImports() {
2110
+ return (0, defu.defu)(builtinImports, {
2111
+ utils: [
2112
+ "hasFlag",
2113
+ "isMinimal",
2114
+ "isColorSupported",
2115
+ "colorSupportLevels",
2116
+ "isHyperlinkSupported"
2117
+ ],
2118
+ env: [
2119
+ "env",
2120
+ "isDevelopment",
2121
+ "isDebug"
2122
+ ]
2123
+ });
2119
2124
  },
2120
2125
  get children() {
2121
2126
  return [
@@ -2249,6 +2254,9 @@ function ConsoleBuiltin() {
2249
2254
  (0, __alloy_js_core_jsx_runtime.createIntrinsic)("hbr", {}),
2250
2255
  (0, __alloy_js_core_jsx_runtime.createComponent)(TableFunctionDeclaration, {}),
2251
2256
  (0, __alloy_js_core_jsx_runtime.createIntrinsic)("hbr", {}),
2257
+ (0, __alloy_js_core_jsx_runtime.createIntrinsic)("hbr", {}),
2258
+ children,
2259
+ (0, __alloy_js_core_jsx_runtime.createIntrinsic)("hbr", {}),
2252
2260
  (0, __alloy_js_core_jsx_runtime.createIntrinsic)("hbr", {})
2253
2261
  ];
2254
2262
  }