@shell-shock/preset-script 0.6.7 → 0.6.9

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 (31) hide show
  1. package/dist/components/banner-function-declaration.cjs +3 -3
  2. package/dist/components/banner-function-declaration.cjs.map +1 -1
  3. package/dist/components/banner-function-declaration.d.cts.map +1 -1
  4. package/dist/components/banner-function-declaration.d.mts.map +1 -1
  5. package/dist/components/banner-function-declaration.mjs +3 -3
  6. package/dist/components/banner-function-declaration.mjs.map +1 -1
  7. package/dist/components/command-entry.cjs +1 -1
  8. package/dist/components/command-entry.cjs.map +1 -1
  9. package/dist/components/command-entry.mjs +1 -1
  10. package/dist/components/command-entry.mjs.map +1 -1
  11. package/dist/components/console-builtin.cjs +21 -5
  12. package/dist/components/console-builtin.cjs.map +1 -1
  13. package/dist/components/console-builtin.d.cts.map +1 -1
  14. package/dist/components/console-builtin.d.mts.map +1 -1
  15. package/dist/components/console-builtin.mjs +21 -5
  16. package/dist/components/console-builtin.mjs.map +1 -1
  17. package/dist/components/helpers.d.cts +5 -5
  18. package/dist/components/helpers.d.cts.map +1 -1
  19. package/dist/components/utils-builtin.cjs +10 -10
  20. package/dist/components/utils-builtin.cjs.map +1 -1
  21. package/dist/components/utils-builtin.d.cts +8 -8
  22. package/dist/components/utils-builtin.mjs +10 -10
  23. package/dist/components/utils-builtin.mjs.map +1 -1
  24. package/dist/helpers/ansi-utils.cjs +4 -0
  25. package/dist/helpers/ansi-utils.cjs.map +1 -1
  26. package/dist/helpers/ansi-utils.d.cts.map +1 -1
  27. package/dist/helpers/ansi-utils.d.mts.map +1 -1
  28. package/dist/helpers/ansi-utils.mjs +4 -0
  29. package/dist/helpers/ansi-utils.mjs.map +1 -1
  30. package/dist/types/plugin.d.mts.map +1 -1
  31. package/package.json +10 -10
@@ -19,10 +19,10 @@ function BannerFunctionDeclaration(props) {
19
19
  const { consoleFnName = "log", variant = "primary", command, children, insertNewlineBeforeBanner = true } = props;
20
20
  const theme = require_contexts_theme.useTheme();
21
21
  const context = (0, __powerlines_plugin_alloy_core_contexts_context.usePowerlines)();
22
- const header = (0, __alloy_js_core.computed)(() => `${theme.labels.banner.header[variant] || (0, __shell_shock_core_plugin_utils_context_helpers.getAppTitle)(context)} v${context.packageJson.version || "1.0.0"}`);
23
- const description = (0, __alloy_js_core.computed)(() => command?.description || (0, __shell_shock_core_plugin_utils_context_helpers.getAppDescription)(context));
22
+ const header = (0, __alloy_js_core.computed)(() => `${theme.labels.banner.header[variant] || (0, __shell_shock_core_plugin_utils_context_helpers.getAppTitle)(context, false)} v${context.packageJson.version || "1.0.0"}`);
24
23
  const footer = (0, __alloy_js_core.computed)(() => theme.labels.banner.footer[variant]);
25
- const title = (0, __alloy_js_core.computed)(() => (0, __shell_shock_core_plugin_utils_context_helpers.getAppTitle)(context) || /(?:cli|command line|command-line)\s+(?:application|app)?$/.test(header.value.toLowerCase()) ? header.value.replace(`v${context.packageJson.version || "1.0.0"}`, "").trim() : `${header.value.replace(`v${context.packageJson.version || "1.0.0"}`, "").trim()} Command Line Application`);
24
+ const title = (0, __alloy_js_core.computed)(() => (0, __shell_shock_core_plugin_utils_context_helpers.getAppTitle)(context, true).replace(`v${context.packageJson.version || "1.0.0"}`, ""));
25
+ const description = (0, __alloy_js_core.computed)(() => command?.description || (0, __shell_shock_core_plugin_utils_context_helpers.getAppDescription)(context));
26
26
  return [(0, __alloy_js_core_jsx_runtime.createComponent)(__alloy_js_typescript.FunctionDeclaration, {
27
27
  name: "banner",
28
28
  get doc() {
@@ -1 +1 @@
1
- {"version":3,"file":"banner-function-declaration.cjs","names":["code","computed","Show","FunctionDeclaration","Spacing","usePowerlines","getAppDescription","getAppTitle","useTheme","BannerFunctionDeclaration","props","consoleFnName","variant","command","children","insertNewlineBeforeBanner","theme","context","header","labels","banner","packageJson","version","description","footer","title","test","value","toLowerCase","replace","trim","_$createComponent","name","doc","BannerFunctionBodyDeclaration","insertNewlineBeforeCommand","bannerPadding","Math","max","padding","app","borderStyles","outline","left","length","right","totalPadding","when","_$memo","topLeft","icons","top","topRight","icon","bottomLeft","bottom","bottomRight"],"sources":["../../src/components/banner-function-declaration.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, Show } from \"@alloy-js/core\";\nimport { FunctionDeclaration } from \"@alloy-js/typescript\";\nimport { Spacing } from \"@powerlines/plugin-alloy/core/components/spacing\";\nimport { usePowerlines } from \"@powerlines/plugin-alloy/core/contexts/context\";\nimport {\n getAppDescription,\n getAppTitle\n} from \"@shell-shock/core/plugin-utils/context-helpers\";\nimport type { CommandTree } from \"@shell-shock/core/types/command\";\nimport type { ThemeColorVariant } from \"@shell-shock/plugin-theme/types/theme\";\nimport { useTheme } from \"../contexts\";\nimport type { ScriptPresetContext } from \"../types\";\n\nexport interface BannerFunctionDeclarationProps {\n variant?: ThemeColorVariant;\n consoleFnName?: \"log\" | \"info\" | \"warn\" | \"error\" | \"debug\";\n insertNewlineBeforeBanner?: boolean;\n command?: CommandTree;\n children?: Children;\n}\n\n/**\n * A component to generate the `banner` function for a specific command or application.\n *\n * @remarks\n * This function will display a banner in the console with the application's name, version, and description. It can be customized with different variants for styling and supports conditional rendering based on flags or environment variables.\n */\nexport function BannerFunctionDeclaration(\n props: BannerFunctionDeclarationProps\n) {\n const {\n consoleFnName = \"log\",\n variant = \"primary\",\n command,\n children,\n insertNewlineBeforeBanner = true\n } = props;\n\n const theme = useTheme();\n const context = usePowerlines<ScriptPresetContext>();\n\n const header = computed(\n () =>\n `${theme.labels.banner.header[variant] || getAppTitle(context)} v${context.packageJson.version || \"1.0.0\"}`\n );\n const description = computed(\n () => command?.description || getAppDescription(context)\n );\n const footer = computed(() => theme.labels.banner.footer[variant]);\n\n const title = computed(() =>\n getAppTitle(context) ||\n /(?:cli|command line|command-line)\\s+(?:application|app)?$/.test(\n header.value.toLowerCase()\n )\n ? header.value\n .replace(`v${context.packageJson.version || \"1.0.0\"}`, \"\")\n .trim()\n : `${header.value\n .replace(`v${context.packageJson.version || \"1.0.0\"}`, \"\")\n .trim()} Command Line Application`\n );\n\n return (\n <>\n <FunctionDeclaration\n name=\"banner\"\n doc={`Write the ${getAppTitle(context)} application banner ${\n command ? `for the ${command.title} command ` : \"\"\n }to the console.`}>\n <BannerFunctionBodyDeclaration\n title={title.value}\n header={header.value}\n description={description.value}\n footer={footer.value}\n variant={variant}\n consoleFnName={consoleFnName}\n command={command}\n insertNewlineBeforeCommand\n insertNewlineBeforeBanner={insertNewlineBeforeBanner}>\n {children}\n </BannerFunctionBodyDeclaration>\n </FunctionDeclaration>\n </>\n );\n}\n\nexport interface BannerFunctionBodyDeclarationProps extends BannerFunctionDeclarationProps {\n title?: string;\n header?: string;\n footer?: string;\n description: string;\n insertNewlineBeforeCommand?: boolean;\n insertNewlineBeforeBanner?: boolean;\n}\n\n/**\n * A component to generate the `banner` function's body for a specific command or application.\n *\n * @remarks\n * This function will display a banner in the console with the application's name, version, and description. It can be customized with different variants for styling and supports conditional rendering based on flags or environment variables.\n */\nexport function BannerFunctionBodyDeclaration(\n props: BannerFunctionBodyDeclarationProps\n) {\n const {\n consoleFnName = \"log\",\n variant = \"primary\",\n title,\n header,\n footer,\n description,\n command,\n children,\n insertNewlineBeforeCommand = false,\n insertNewlineBeforeBanner = true\n } = props;\n\n const theme = useTheme();\n\n const bannerPadding = computed(\n () =>\n Math.max(theme.padding.app, 0) * 2 +\n theme.borderStyles.banner.outline[variant].left.length +\n theme.borderStyles.banner.outline[variant].right.length\n );\n const totalPadding = computed(\n () => Math.max(theme.padding.banner, 0) * 2 + bannerPadding.value\n );\n\n return (\n <>\n {code`\n if (useApp().get(\"banner\") || hasFlag(\"no-banner\") || hasFlag(\"hide-banner\") || isMinimal) {\n return;\n }\n\n useApp().set(\"banner\", true); `}\n <Spacing />\n {children}\n <Spacing />\n <Show when={insertNewlineBeforeBanner}>{code`writeLine(\"\"); `}</Show>\n <Spacing />\n {code`\n writeLine(colors.border.banner.outline.${variant}(\"${\n theme.borderStyles.banner.outline[variant].topLeft\n }\") + ${\n theme.icons.banner.header[variant]\n ? `colors.border.banner.outline.${variant}(\"${\n theme.borderStyles.banner.outline[variant].top\n }\".repeat(6)) + \" \" + ${\n theme.icons.banner.header[variant]\n ? `colors.text.banner.header.${variant}(\"${\n theme.icons.banner.header[variant]\n }\") + \" \" + colors.border.banner.outline.${variant}(\"${\n theme.borderStyles.banner.outline[variant].top\n }\") + \" \" +`\n : \"\"\n } colors.bold(colors.text.banner.header.${variant}(\"${\n header\n }\")) + \" \" + colors.border.banner.outline.${variant}(\"${\n theme.borderStyles.banner.outline[variant].top\n }\".repeat(Math.max(process.stdout.columns - ${\n 6 +\n (theme.icons.banner.header[variant]\n ? theme.icons.banner.header[variant].length + 3\n : 0) +\n (header ? header.length + 2 : 0) +\n bannerPadding.value\n }, 0)))`\n : `colors.border.banner.outline.${variant}(\"${\n theme.borderStyles.banner.outline[variant].top\n }\".repeat(Math.max(process.stdout.columns - ${\n bannerPadding.value\n }, 0)))`\n } + colors.border.banner.outline.${variant}(\"${\n theme.borderStyles.banner.outline[variant].topRight\n }\"), { consoleFn: console.${consoleFnName} });\n\n splitText(\n ${title ? `\"${title}\"` : \"title\"},\n Math.max(process.stdout.columns - ${totalPadding.value}, 0)\n ).forEach((line) => {\n writeLine(colors.border.banner.outline.${variant}(\"${\n theme.borderStyles.banner.outline[variant].left\n }\") + \" \".repeat(Math.max(Math.floor((process.stdout.columns - (stripAnsi(line).length + ${\n bannerPadding.value\n })) / 2), 0)) + colors.bold(colors.text.banner.title.${variant}(line)) + \" \".repeat(Math.max(Math.ceil((process.stdout.columns - (stripAnsi(line).length + ${\n bannerPadding.value\n })) / 2), 0)) + colors.border.banner.outline.${variant}(\"${\n theme.borderStyles.banner.outline[variant].right\n }\"), { consoleFn: console.${consoleFnName} });\n });\n\n ${\n command?.title\n ? `${\n insertNewlineBeforeCommand\n ? `writeLine(colors.border.banner.outline.${variant}(\"${\n theme.borderStyles.banner.outline[variant].left\n }\") + \" \".repeat(Math.max(process.stdout.columns - ${\n bannerPadding.value\n })) + colors.border.banner.outline.${variant}(\"${\n theme.borderStyles.banner.outline[variant].right\n }\"), { consoleFn: console.${consoleFnName} }); `\n : \"\"\n }\n ${`writeLine(colors.border.banner.outline.${variant}(\"${\n theme.borderStyles.banner.outline[variant].left\n }\") + \" \".repeat(Math.max(Math.floor((process.stdout.columns - (stripAnsi(\"${\n command.title\n }\").length ${command.icon ? \" + 3\" : \"\"} + ${\n bannerPadding.value\n })) / 2), 0)) + colors.bold(colors.text.banner.command.${\n variant\n }(\"${command.icon ? `${command.icon} ` : \"\"}${command.title}\")) + \" \".repeat(Math.max(Math.ceil((process.stdout.columns - (stripAnsi(\"${command.title}\").length ${\n command.icon ? \" + 3\" : \"\"\n } + ${\n bannerPadding.value\n })) / 2), 0)) + colors.border.banner.outline.${variant}(\"${\n theme.borderStyles.banner.outline[variant].right\n }\"), { consoleFn: console.${consoleFnName} }); `} `\n : \"\"\n }\n\n splitText(\n colors.bold(${\n command?.title\n ? \"colors.text.banner.description\"\n : \"colors.text.banner.command\"\n }.${variant}(\"${description.replace(/\"/g, '\\\\\"')}\")),\n Math.max(process.stdout.columns - ${totalPadding.value}, 0)\n ).forEach((line) => {\n writeLine(colors.border.banner.outline.${variant}(\"${\n theme.borderStyles.banner.outline[variant].left\n }\") + \" \".repeat(Math.max(Math.floor((process.stdout.columns - (stripAnsi(line).length + ${\n bannerPadding.value\n })) / 2), 0)) + colors.text.banner.description.${variant}(line) + \" \".repeat(Math.max(Math.ceil((process.stdout.columns - (stripAnsi(line).length + ${\n bannerPadding.value\n })) / 2), 0)) + colors.border.banner.outline.${variant}(\"${\n theme.borderStyles.banner.outline[variant].right\n }\"), { consoleFn: console.${consoleFnName} });\n });\n\n writeLine(colors.border.banner.outline.${variant}(\"${\n theme.borderStyles.banner.outline[variant].bottomLeft\n }\") + ${\n footer\n ? `colors.border.banner.outline.${variant}(\"${\n theme.borderStyles.banner.outline[variant].bottom\n }\".repeat(Math.max(process.stdout.columns - ${\n 8 + (footer ? footer.length : 0) + bannerPadding.value\n }, 0))) + \" \" + ${\n footer\n ? `colors.bold(colors.text.banner.footer.${variant}(\"${footer}\"))`\n : \"\"\n } + \" \" + colors.border.banner.outline.${variant}(\"${\n theme.borderStyles.banner.outline[variant].bottom\n }\".repeat(6))`\n : `colors.border.banner.outline.${variant}(\"${\n theme.borderStyles.banner.outline[variant].bottom\n }\".repeat(Math.max(process.stdout.columns - ${\n bannerPadding.value\n }, 0)))`\n } + colors.border.banner.outline.${variant}(\"${\n theme.borderStyles.banner.outline[variant].bottomRight\n }\"), { consoleFn: console.${consoleFnName} });\n\n writeLine(\"\"); `}\n </>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"banner-function-declaration.cjs","names":["code","computed","Show","FunctionDeclaration","Spacing","usePowerlines","getAppDescription","getAppTitle","useTheme","BannerFunctionDeclaration","props","consoleFnName","variant","command","children","insertNewlineBeforeBanner","theme","context","header","labels","banner","packageJson","version","footer","title","replace","description","_$createComponent","name","doc","BannerFunctionBodyDeclaration","value","insertNewlineBeforeCommand","bannerPadding","Math","max","padding","app","borderStyles","outline","left","length","right","totalPadding","when","_$memo","topLeft","icons","top","topRight","icon","bottomLeft","bottom","bottomRight"],"sources":["../../src/components/banner-function-declaration.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, Show } from \"@alloy-js/core\";\nimport { FunctionDeclaration } from \"@alloy-js/typescript\";\nimport { Spacing } from \"@powerlines/plugin-alloy/core/components/spacing\";\nimport { usePowerlines } from \"@powerlines/plugin-alloy/core/contexts/context\";\nimport {\n getAppDescription,\n getAppTitle\n} from \"@shell-shock/core/plugin-utils/context-helpers\";\nimport type { CommandTree } from \"@shell-shock/core/types/command\";\nimport type { ThemeColorVariant } from \"@shell-shock/plugin-theme/types/theme\";\nimport { useTheme } from \"../contexts\";\nimport type { ScriptPresetContext } from \"../types\";\n\nexport interface BannerFunctionDeclarationProps {\n variant?: ThemeColorVariant;\n consoleFnName?: \"log\" | \"info\" | \"warn\" | \"error\" | \"debug\";\n insertNewlineBeforeBanner?: boolean;\n command?: CommandTree;\n children?: Children;\n}\n\n/**\n * A component to generate the `banner` function for a specific command or application.\n *\n * @remarks\n * This function will display a banner in the console with the application's name, version, and description. It can be customized with different variants for styling and supports conditional rendering based on flags or environment variables.\n */\nexport function BannerFunctionDeclaration(\n props: BannerFunctionDeclarationProps\n) {\n const {\n consoleFnName = \"log\",\n variant = \"primary\",\n command,\n children,\n insertNewlineBeforeBanner = true\n } = props;\n\n const theme = useTheme();\n const context = usePowerlines<ScriptPresetContext>();\n\n const header = computed(\n () =>\n `${theme.labels.banner.header[variant] || getAppTitle(context, false)} v${\n context.packageJson.version || \"1.0.0\"\n }`\n );\n const footer = computed(() => theme.labels.banner.footer[variant]);\n const title = computed(() =>\n getAppTitle(context, true).replace(\n `v${context.packageJson.version || \"1.0.0\"}`,\n \"\"\n )\n );\n const description = computed(\n () => command?.description || getAppDescription(context)\n );\n\n return (\n <>\n <FunctionDeclaration\n name=\"banner\"\n doc={`Write the ${getAppTitle(context)} application banner ${\n command ? `for the ${command.title} command ` : \"\"\n }to the console.`}>\n <BannerFunctionBodyDeclaration\n title={title.value}\n header={header.value}\n description={description.value}\n footer={footer.value}\n variant={variant}\n consoleFnName={consoleFnName}\n command={command}\n insertNewlineBeforeCommand\n insertNewlineBeforeBanner={insertNewlineBeforeBanner}>\n {children}\n </BannerFunctionBodyDeclaration>\n </FunctionDeclaration>\n </>\n );\n}\n\nexport interface BannerFunctionBodyDeclarationProps extends BannerFunctionDeclarationProps {\n title?: string;\n header?: string;\n footer?: string;\n description: string;\n insertNewlineBeforeCommand?: boolean;\n insertNewlineBeforeBanner?: boolean;\n}\n\n/**\n * A component to generate the `banner` function's body for a specific command or application.\n *\n * @remarks\n * This function will display a banner in the console with the application's name, version, and description. It can be customized with different variants for styling and supports conditional rendering based on flags or environment variables.\n */\nexport function BannerFunctionBodyDeclaration(\n props: BannerFunctionBodyDeclarationProps\n) {\n const {\n consoleFnName = \"log\",\n variant = \"primary\",\n title,\n header,\n footer,\n description,\n command,\n children,\n insertNewlineBeforeCommand = false,\n insertNewlineBeforeBanner = true\n } = props;\n\n const theme = useTheme();\n\n const bannerPadding = computed(\n () =>\n Math.max(theme.padding.app, 0) * 2 +\n theme.borderStyles.banner.outline[variant].left.length +\n theme.borderStyles.banner.outline[variant].right.length\n );\n const totalPadding = computed(\n () => Math.max(theme.padding.banner, 0) * 2 + bannerPadding.value\n );\n\n return (\n <>\n {code`\n if (useApp().get(\"banner\") || hasFlag(\"no-banner\") || hasFlag(\"hide-banner\") || isMinimal) {\n return;\n }\n\n useApp().set(\"banner\", true); `}\n <Spacing />\n {children}\n <Spacing />\n <Show when={insertNewlineBeforeBanner}>{code`writeLine(\"\"); `}</Show>\n <Spacing />\n {code`\n writeLine(colors.border.banner.outline.${variant}(\"${\n theme.borderStyles.banner.outline[variant].topLeft\n }\") + ${\n theme.icons.banner.header[variant]\n ? `colors.border.banner.outline.${variant}(\"${\n theme.borderStyles.banner.outline[variant].top\n }\".repeat(6)) + \" \" + ${\n theme.icons.banner.header[variant]\n ? `colors.text.banner.header.${variant}(\"${\n theme.icons.banner.header[variant]\n }\") + \" \" + colors.border.banner.outline.${variant}(\"${\n theme.borderStyles.banner.outline[variant].top\n }\") + \" \" +`\n : \"\"\n } colors.bold(colors.text.banner.header.${variant}(\"${\n header\n }\")) + \" \" + colors.border.banner.outline.${variant}(\"${\n theme.borderStyles.banner.outline[variant].top\n }\".repeat(Math.max(process.stdout.columns - ${\n 6 +\n (theme.icons.banner.header[variant]\n ? theme.icons.banner.header[variant].length + 3\n : 0) +\n (header ? header.length + 2 : 0) +\n bannerPadding.value\n }, 0)))`\n : `colors.border.banner.outline.${variant}(\"${\n theme.borderStyles.banner.outline[variant].top\n }\".repeat(Math.max(process.stdout.columns - ${\n bannerPadding.value\n }, 0)))`\n } + colors.border.banner.outline.${variant}(\"${\n theme.borderStyles.banner.outline[variant].topRight\n }\"), { consoleFn: console.${consoleFnName} });\n\n splitText(\n ${title ? `\"${title}\"` : \"title\"},\n Math.max(process.stdout.columns - ${totalPadding.value}, 0)\n ).forEach((line) => {\n writeLine(colors.border.banner.outline.${variant}(\"${\n theme.borderStyles.banner.outline[variant].left\n }\") + \" \".repeat(Math.max(Math.floor((process.stdout.columns - (stripAnsi(line).length + ${\n bannerPadding.value\n })) / 2), 0)) + colors.bold(colors.text.banner.title.${variant}(line)) + \" \".repeat(Math.max(Math.ceil((process.stdout.columns - (stripAnsi(line).length + ${\n bannerPadding.value\n })) / 2), 0)) + colors.border.banner.outline.${variant}(\"${\n theme.borderStyles.banner.outline[variant].right\n }\"), { consoleFn: console.${consoleFnName} });\n });\n\n ${\n command?.title\n ? `${\n insertNewlineBeforeCommand\n ? `writeLine(colors.border.banner.outline.${variant}(\"${\n theme.borderStyles.banner.outline[variant].left\n }\") + \" \".repeat(Math.max(process.stdout.columns - ${\n bannerPadding.value\n })) + colors.border.banner.outline.${variant}(\"${\n theme.borderStyles.banner.outline[variant].right\n }\"), { consoleFn: console.${consoleFnName} }); `\n : \"\"\n }\n ${`writeLine(colors.border.banner.outline.${variant}(\"${\n theme.borderStyles.banner.outline[variant].left\n }\") + \" \".repeat(Math.max(Math.floor((process.stdout.columns - (stripAnsi(\"${\n command.title\n }\").length ${command.icon ? \" + 3\" : \"\"} + ${\n bannerPadding.value\n })) / 2), 0)) + colors.bold(colors.text.banner.command.${\n variant\n }(\"${command.icon ? `${command.icon} ` : \"\"}${command.title}\")) + \" \".repeat(Math.max(Math.ceil((process.stdout.columns - (stripAnsi(\"${command.title}\").length ${\n command.icon ? \" + 3\" : \"\"\n } + ${\n bannerPadding.value\n })) / 2), 0)) + colors.border.banner.outline.${variant}(\"${\n theme.borderStyles.banner.outline[variant].right\n }\"), { consoleFn: console.${consoleFnName} }); `} `\n : \"\"\n }\n\n splitText(\n colors.bold(${\n command?.title\n ? \"colors.text.banner.description\"\n : \"colors.text.banner.command\"\n }.${variant}(\"${description.replace(/\"/g, '\\\\\"')}\")),\n Math.max(process.stdout.columns - ${totalPadding.value}, 0)\n ).forEach((line) => {\n writeLine(colors.border.banner.outline.${variant}(\"${\n theme.borderStyles.banner.outline[variant].left\n }\") + \" \".repeat(Math.max(Math.floor((process.stdout.columns - (stripAnsi(line).length + ${\n bannerPadding.value\n })) / 2), 0)) + colors.text.banner.description.${variant}(line) + \" \".repeat(Math.max(Math.ceil((process.stdout.columns - (stripAnsi(line).length + ${\n bannerPadding.value\n })) / 2), 0)) + colors.border.banner.outline.${variant}(\"${\n theme.borderStyles.banner.outline[variant].right\n }\"), { consoleFn: console.${consoleFnName} });\n });\n\n writeLine(colors.border.banner.outline.${variant}(\"${\n theme.borderStyles.banner.outline[variant].bottomLeft\n }\") + ${\n footer\n ? `colors.border.banner.outline.${variant}(\"${\n theme.borderStyles.banner.outline[variant].bottom\n }\".repeat(Math.max(process.stdout.columns - ${\n 8 + (footer ? footer.length : 0) + bannerPadding.value\n }, 0))) + \" \" + ${\n footer\n ? `colors.bold(colors.text.banner.footer.${variant}(\"${footer}\"))`\n : \"\"\n } + \" \" + colors.border.banner.outline.${variant}(\"${\n theme.borderStyles.banner.outline[variant].bottom\n }\".repeat(6))`\n : `colors.border.banner.outline.${variant}(\"${\n theme.borderStyles.banner.outline[variant].bottom\n }\".repeat(Math.max(process.stdout.columns - ${\n bannerPadding.value\n }, 0)))`\n } + colors.border.banner.outline.${variant}(\"${\n theme.borderStyles.banner.outline[variant].bottomRight\n }\"), { consoleFn: console.${consoleFnName} });\n\n writeLine(\"\"); `}\n </>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;AA8CA,SAAgBS,0BACdC,OACA;CACA,MAAM,EACJC,gBAAgB,OAChBC,UAAU,WACVC,SACAC,UACAC,4BAA4B,SAC1BL;CAEJ,MAAMM,QAAQR,iCAAU;CACxB,MAAMS,8EAA8C;CAEpD,MAAMC,6CAEF,GAAGF,MAAMG,OAAOC,OAAOF,OAAON,6EAAwBK,SAAS,MAAM,CAAA,IACnEA,QAAQI,YAAYC,WAAW,UAEpC;CACD,MAAMC,6CAAwBP,MAAMG,OAAOC,OAAOG,OAAOX,SAAS;CAClE,MAAMY,6GACQP,SAAS,KAAK,CAACQ,QACzB,IAAIR,QAAQI,YAAYC,WAAW,WACnC,GAEJ,CAAC;CACD,MAAMI,kDACEb,SAASa,sFAAiCT,QAClD,CAAC;AAED,QAAA,kDAEKd,2CAAmB;EAClByB,MAAI;EAAA,IACJC,MAAG;AAAA,UAAE,8EAAyBZ,QAAQ,CAAA,sBACpCJ,UAAU,WAAWA,QAAQW,MAAK,aAAc,GAAE;;EACnC,IAAAV,WAAA;AAAA,2DAChBgB,+BAA6B;IAAA,IAC5BN,QAAK;AAAA,YAAEA,MAAMO;;IAAK,IAClBb,SAAM;AAAA,YAAEA,OAAOa;;IAAK,IACpBL,cAAW;AAAA,YAAEA,YAAYK;;IAAK,IAC9BR,SAAM;AAAA,YAAEA,OAAOQ;;IACNnB;IACMD;IACNE;IACTmB,4BAA0B;IACCjB;IAC1BD;IAAQ,CAAA;;EAAA,CAAA,CAAA;;;;;;;;AAsBnB,SAAgBgB,8BACdpB,OACA;CACA,MAAM,EACJC,gBAAgB,OAChBC,UAAU,WACVY,OACAN,QACAK,QACAG,aACAb,SACAC,UACAkB,6BAA6B,OAC7BjB,4BAA4B,SAC1BL;CAEJ,MAAMM,QAAQR,iCAAU;CAExB,MAAMyB,oDAEFC,KAAKC,IAAInB,MAAMoB,QAAQC,KAAK,EAAE,GAAG,IACjCrB,MAAMsB,aAAalB,OAAOmB,QAAQ3B,SAAS4B,KAAKC,SAChDzB,MAAMsB,aAAalB,OAAOmB,QAAQ3B,SAAS8B,MAAMD,OACpD;CACD,MAAME,mDACET,KAAKC,IAAInB,MAAMoB,QAAQhB,QAAQ,EAAE,GAAG,IAAIa,cAAcF,MAC7D;AAED,QAAA;EAEK/B,oBAAI;;;;;;mDAMJI,2DAAO,EAAA,CAAA;EACPU;mDACAV,2DAAO,EAAA,CAAA;mDACPF,sBAAI;GAAC0C,MAAM7B;GAAyBD,UAAGd,oBAAI;GAAiB,CAAA;mDAC5DI,2DAAO,EAAA,CAAA;8CACPJ,oBAAI;+CACoCY,QAAO,IAC9CI,MAAMsB,aAAalB,OAAOmB,QAAQ3B,SAASkC,QAAO,OAElD9B,MAAM+B,MAAM3B,OAAOF,OAAON,WACtB,gCAAgCA,QAAO,IACrCI,MAAMsB,aAAalB,OAAOmB,QAAQ3B,SAASoC,IAAG,uBAE9ChC,MAAM+B,MAAM3B,OAAOF,OAAON,WACtB,6BAA6BA,QAAO,IAClCI,MAAM+B,MAAM3B,OAAOF,OAAON,SAAQ,0CACOA,QAAO,IAChDI,MAAMsB,aAAalB,OAAOmB,QAAQ3B,SAASoC,IAAG,cAEhD,GAAE,yCACkCpC,QAAO,IAC/CM,OAAM,2CACoCN,QAAO,IACjDI,MAAMsB,aAAalB,OAAOmB,QAAQ3B,SAASoC,IAAG,6CAE9C,KACChC,MAAM+B,MAAM3B,OAAOF,OAAON,WACvBI,MAAM+B,MAAM3B,OAAOF,OAAON,SAAS6B,SAAS,IAC5C,MACHvB,SAASA,OAAOuB,SAAS,IAAI,KAC9BR,cAAcF,MAAK,UAErB,gCAAgCnB,QAAO,IACrCI,MAAMsB,aAAalB,OAAOmB,QAAQ3B,SAASoC,IAAG,6CAE9Cf,cAAcF,MAAK,QACb,kCACqBnB,QAAO,IACxCI,MAAMsB,aAAalB,OAAOmB,QAAQ3B,SAASqC,SAAQ,2BACzBtC,cAAa;;;YAGnCa,QAAQ,IAAIA,MAAK,KAAM,QAAO;8CACImB,aAAaZ,MAAK;;mDAEbnB,QAAO,IAC9CI,MAAMsB,aAAalB,OAAOmB,QAAQ3B,SAAS4B,KAAI,0FAE/CP,cAAcF,MAAK,sDACkCnB,QAAO,8FAC5DqB,cAAcF,MAAK,8CAC0BnB,QAAO,IACpDI,MAAMsB,aAAalB,OAAOmB,QAAQ3B,SAAS8B,MAAK,2BACtB/B,cAAa;;;UAIzCE,SAASW,QACL,GACEQ,6BACI,0CAA0CpB,QAAO,IAC/CI,MAAMsB,aAAalB,OAAOmB,QAAQ3B,SAAS4B,KAAI,oDAE/CP,cAAcF,MAAK,oCACgBnB,QAAO,IAC1CI,MAAMsB,aAAalB,OAAOmB,QAAQ3B,SAAS8B,MAAK,2BACtB/B,cAAa,SACzC,GAAE;cAER,0CAA0CC,QAAO,IACjDI,MAAMsB,aAAalB,OAAOmB,QAAQ3B,SAAS4B,KAAI,4EAE/C3B,QAAQW,MAAK,YACFX,QAAQqC,OAAO,SAAS,GAAE,KACrCjB,cAAcF,MAAK,wDAEnBnB,QAAO,IACJC,QAAQqC,OAAO,GAAGrC,QAAQqC,KAAI,MAAO,KAAKrC,QAAQW,MAAK,4EAA6EX,QAAQW,MAAK,YACpJX,QAAQqC,OAAO,SAAS,GAAE,KAE1BjB,cAAcF,MAAK,8CAC0BnB,QAAO,IACpDI,MAAMsB,aAAalB,OAAOmB,QAAQ3B,SAAS8B,MAAK,2BACtB/B,cAAa,OAAO,KAC9C,GAAE;;;wBAKJE,SAASW,QACL,mCACA,6BAA4B,GAC9BZ,QAAO,IAAKc,YAAYD,QAAQ,MAAM,OAAM,CAAA;8CACZkB,aAAaZ,MAAK;;mDAEbnB,QAAO,IAC9CI,MAAMsB,aAAalB,OAAOmB,QAAQ3B,SAAS4B,KAAI,0FAE/CP,cAAcF,MAAK,gDAC4BnB,QAAO,6FACtDqB,cAAcF,MAAK,8CAC0BnB,QAAO,IACpDI,MAAMsB,aAAalB,OAAOmB,QAAQ3B,SAAS8B,MAAK,2BACtB/B,cAAa;;;iDAGFC,QAAO,IAC9CI,MAAMsB,aAAalB,OAAOmB,QAAQ3B,SAASuC,WAAU,OAErD5B,SACI,gCAAgCX,QAAO,IACrCI,MAAMsB,aAAalB,OAAOmB,QAAQ3B,SAASwC,OAAM,6CAEjD,KAAK7B,SAASA,OAAOkB,SAAS,KAAKR,cAAcF,MAAK,iBAEtDR,SACI,yCAAyCX,QAAO,IAAKW,OAAM,OAC3D,GAAE,wCACiCX,QAAO,IAC9CI,MAAMsB,aAAalB,OAAOmB,QAAQ3B,SAASwC,OAAM,gBAEnD,gCAAgCxC,QAAO,IACrCI,MAAMsB,aAAalB,OAAOmB,QAAQ3B,SAASwC,OAAM,6CAEjDnB,cAAcF,MAAK,QACb,kCACqBnB,QAAO,IACxCI,MAAMsB,aAAalB,OAAOmB,QAAQ3B,SAASyC,YAAW,2BAC5B1C,cAAa;;yBAEzB;EAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"banner-function-declaration.d.cts","names":[],"sources":["../../src/components/banner-function-declaration.tsx"],"sourcesContent":[],"mappings":";;;;;UAgCiB,8BAAA;YACL;EADK,aAAA,CAAA,EAAA,KAAA,GAAA,MAAA,GAA8B,MAAA,GAAA,OAAA,GAAA,OAAA;EACnC,yBAAA,CAAA,EAAA,OAAA;EAGA,OAAA,CAAA,EAAA,WAAA;EACC,QAAA,CAAA,EAAA,QAAA;;AASb;AA4DA;AAeA;;;;iBA3EgB,yBAAA,QACP,iCAA8B;UA2DtB,kCAAA,SAA2C;;;;;;;;;;;;;;iBAe5C,6BAAA,QACP,qCAAkC"}
1
+ {"version":3,"file":"banner-function-declaration.d.cts","names":[],"sources":["../../src/components/banner-function-declaration.tsx"],"sourcesContent":[],"mappings":";;;;;UAgCiB,8BAAA;YACL;EADK,aAAA,CAAA,EAAA,KAAA,GAAA,MAAA,GAA8B,MAAA,GAAA,OAAA,GAAA,OAAA;EACnC,yBAAA,CAAA,EAAA,OAAA;EAGA,OAAA,CAAA,EAAA,WAAA;EACC,QAAA,CAAA,EAAA,QAAA;;AASb;AAuDA;AAeA;;;;iBAtEgB,yBAAA,QACP,iCAA8B;UAsDtB,kCAAA,SAA2C;;;;;;;;;;;;;;iBAe5C,6BAAA,QACP,qCAAkC"}
@@ -1 +1 @@
1
- {"version":3,"file":"banner-function-declaration.d.mts","names":[],"sources":["../../src/components/banner-function-declaration.tsx"],"sourcesContent":[],"mappings":";;;;;UAgCiB,8BAAA;YACL;EADK,aAAA,CAAA,EAAA,KAAA,GAAA,MAAA,GAA8B,MAAA,GAAA,OAAA,GAAA,OAAA;EACnC,yBAAA,CAAA,EAAA,OAAA;EAGA,OAAA,CAAA,EAAA,WAAA;EACC,QAAA,CAAA,EAAA,QAAA;;AASb;AA4DA;AAeA;;;;iBA3EgB,yBAAA,QACP,iCAA8B;UA2DtB,kCAAA,SAA2C;;;;;;;;;;;;;;iBAe5C,6BAAA,QACP,qCAAkC"}
1
+ {"version":3,"file":"banner-function-declaration.d.mts","names":[],"sources":["../../src/components/banner-function-declaration.tsx"],"sourcesContent":[],"mappings":";;;;;UAgCiB,8BAAA;YACL;EADK,aAAA,CAAA,EAAA,KAAA,GAAA,MAAA,GAA8B,MAAA,GAAA,OAAA,GAAA,OAAA;EACnC,yBAAA,CAAA,EAAA,OAAA;EAGA,OAAA,CAAA,EAAA,WAAA;EACC,QAAA,CAAA,EAAA,QAAA;;AASb;AAuDA;AAeA;;;;iBAtEgB,yBAAA,QACP,iCAA8B;UAsDtB,kCAAA,SAA2C;;;;;;;;;;;;;;iBAe5C,6BAAA,QACP,qCAAkC"}
@@ -18,10 +18,10 @@ function BannerFunctionDeclaration(props) {
18
18
  const { consoleFnName = "log", variant = "primary", command, children, insertNewlineBeforeBanner = true } = props;
19
19
  const theme = useTheme();
20
20
  const context = usePowerlines();
21
- const header = computed(() => `${theme.labels.banner.header[variant] || getAppTitle(context)} v${context.packageJson.version || "1.0.0"}`);
22
- const description = computed(() => command?.description || getAppDescription(context));
21
+ const header = computed(() => `${theme.labels.banner.header[variant] || getAppTitle(context, false)} v${context.packageJson.version || "1.0.0"}`);
23
22
  const footer = computed(() => theme.labels.banner.footer[variant]);
24
- const title = computed(() => getAppTitle(context) || /(?:cli|command line|command-line)\s+(?:application|app)?$/.test(header.value.toLowerCase()) ? header.value.replace(`v${context.packageJson.version || "1.0.0"}`, "").trim() : `${header.value.replace(`v${context.packageJson.version || "1.0.0"}`, "").trim()} Command Line Application`);
23
+ const title = computed(() => getAppTitle(context, true).replace(`v${context.packageJson.version || "1.0.0"}`, ""));
24
+ const description = computed(() => command?.description || getAppDescription(context));
25
25
  return [createComponent(FunctionDeclaration, {
26
26
  name: "banner",
27
27
  get doc() {
@@ -1 +1 @@
1
- {"version":3,"file":"banner-function-declaration.mjs","names":["code","computed","Show","FunctionDeclaration","Spacing","usePowerlines","getAppDescription","getAppTitle","useTheme","BannerFunctionDeclaration","props","consoleFnName","variant","command","children","insertNewlineBeforeBanner","theme","context","header","labels","banner","packageJson","version","description","footer","title","test","value","toLowerCase","replace","trim","_$createComponent","name","doc","BannerFunctionBodyDeclaration","insertNewlineBeforeCommand","bannerPadding","Math","max","padding","app","borderStyles","outline","left","length","right","totalPadding","when","_$memo","topLeft","icons","top","topRight","icon","bottomLeft","bottom","bottomRight"],"sources":["../../src/components/banner-function-declaration.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, Show } from \"@alloy-js/core\";\nimport { FunctionDeclaration } from \"@alloy-js/typescript\";\nimport { Spacing } from \"@powerlines/plugin-alloy/core/components/spacing\";\nimport { usePowerlines } from \"@powerlines/plugin-alloy/core/contexts/context\";\nimport {\n getAppDescription,\n getAppTitle\n} from \"@shell-shock/core/plugin-utils/context-helpers\";\nimport type { CommandTree } from \"@shell-shock/core/types/command\";\nimport type { ThemeColorVariant } from \"@shell-shock/plugin-theme/types/theme\";\nimport { useTheme } from \"../contexts\";\nimport type { ScriptPresetContext } from \"../types\";\n\nexport interface BannerFunctionDeclarationProps {\n variant?: ThemeColorVariant;\n consoleFnName?: \"log\" | \"info\" | \"warn\" | \"error\" | \"debug\";\n insertNewlineBeforeBanner?: boolean;\n command?: CommandTree;\n children?: Children;\n}\n\n/**\n * A component to generate the `banner` function for a specific command or application.\n *\n * @remarks\n * This function will display a banner in the console with the application's name, version, and description. It can be customized with different variants for styling and supports conditional rendering based on flags or environment variables.\n */\nexport function BannerFunctionDeclaration(\n props: BannerFunctionDeclarationProps\n) {\n const {\n consoleFnName = \"log\",\n variant = \"primary\",\n command,\n children,\n insertNewlineBeforeBanner = true\n } = props;\n\n const theme = useTheme();\n const context = usePowerlines<ScriptPresetContext>();\n\n const header = computed(\n () =>\n `${theme.labels.banner.header[variant] || getAppTitle(context)} v${context.packageJson.version || \"1.0.0\"}`\n );\n const description = computed(\n () => command?.description || getAppDescription(context)\n );\n const footer = computed(() => theme.labels.banner.footer[variant]);\n\n const title = computed(() =>\n getAppTitle(context) ||\n /(?:cli|command line|command-line)\\s+(?:application|app)?$/.test(\n header.value.toLowerCase()\n )\n ? header.value\n .replace(`v${context.packageJson.version || \"1.0.0\"}`, \"\")\n .trim()\n : `${header.value\n .replace(`v${context.packageJson.version || \"1.0.0\"}`, \"\")\n .trim()} Command Line Application`\n );\n\n return (\n <>\n <FunctionDeclaration\n name=\"banner\"\n doc={`Write the ${getAppTitle(context)} application banner ${\n command ? `for the ${command.title} command ` : \"\"\n }to the console.`}>\n <BannerFunctionBodyDeclaration\n title={title.value}\n header={header.value}\n description={description.value}\n footer={footer.value}\n variant={variant}\n consoleFnName={consoleFnName}\n command={command}\n insertNewlineBeforeCommand\n insertNewlineBeforeBanner={insertNewlineBeforeBanner}>\n {children}\n </BannerFunctionBodyDeclaration>\n </FunctionDeclaration>\n </>\n );\n}\n\nexport interface BannerFunctionBodyDeclarationProps extends BannerFunctionDeclarationProps {\n title?: string;\n header?: string;\n footer?: string;\n description: string;\n insertNewlineBeforeCommand?: boolean;\n insertNewlineBeforeBanner?: boolean;\n}\n\n/**\n * A component to generate the `banner` function's body for a specific command or application.\n *\n * @remarks\n * This function will display a banner in the console with the application's name, version, and description. It can be customized with different variants for styling and supports conditional rendering based on flags or environment variables.\n */\nexport function BannerFunctionBodyDeclaration(\n props: BannerFunctionBodyDeclarationProps\n) {\n const {\n consoleFnName = \"log\",\n variant = \"primary\",\n title,\n header,\n footer,\n description,\n command,\n children,\n insertNewlineBeforeCommand = false,\n insertNewlineBeforeBanner = true\n } = props;\n\n const theme = useTheme();\n\n const bannerPadding = computed(\n () =>\n Math.max(theme.padding.app, 0) * 2 +\n theme.borderStyles.banner.outline[variant].left.length +\n theme.borderStyles.banner.outline[variant].right.length\n );\n const totalPadding = computed(\n () => Math.max(theme.padding.banner, 0) * 2 + bannerPadding.value\n );\n\n return (\n <>\n {code`\n if (useApp().get(\"banner\") || hasFlag(\"no-banner\") || hasFlag(\"hide-banner\") || isMinimal) {\n return;\n }\n\n useApp().set(\"banner\", true); `}\n <Spacing />\n {children}\n <Spacing />\n <Show when={insertNewlineBeforeBanner}>{code`writeLine(\"\"); `}</Show>\n <Spacing />\n {code`\n writeLine(colors.border.banner.outline.${variant}(\"${\n theme.borderStyles.banner.outline[variant].topLeft\n }\") + ${\n theme.icons.banner.header[variant]\n ? `colors.border.banner.outline.${variant}(\"${\n theme.borderStyles.banner.outline[variant].top\n }\".repeat(6)) + \" \" + ${\n theme.icons.banner.header[variant]\n ? `colors.text.banner.header.${variant}(\"${\n theme.icons.banner.header[variant]\n }\") + \" \" + colors.border.banner.outline.${variant}(\"${\n theme.borderStyles.banner.outline[variant].top\n }\") + \" \" +`\n : \"\"\n } colors.bold(colors.text.banner.header.${variant}(\"${\n header\n }\")) + \" \" + colors.border.banner.outline.${variant}(\"${\n theme.borderStyles.banner.outline[variant].top\n }\".repeat(Math.max(process.stdout.columns - ${\n 6 +\n (theme.icons.banner.header[variant]\n ? theme.icons.banner.header[variant].length + 3\n : 0) +\n (header ? header.length + 2 : 0) +\n bannerPadding.value\n }, 0)))`\n : `colors.border.banner.outline.${variant}(\"${\n theme.borderStyles.banner.outline[variant].top\n }\".repeat(Math.max(process.stdout.columns - ${\n bannerPadding.value\n }, 0)))`\n } + colors.border.banner.outline.${variant}(\"${\n theme.borderStyles.banner.outline[variant].topRight\n }\"), { consoleFn: console.${consoleFnName} });\n\n splitText(\n ${title ? `\"${title}\"` : \"title\"},\n Math.max(process.stdout.columns - ${totalPadding.value}, 0)\n ).forEach((line) => {\n writeLine(colors.border.banner.outline.${variant}(\"${\n theme.borderStyles.banner.outline[variant].left\n }\") + \" \".repeat(Math.max(Math.floor((process.stdout.columns - (stripAnsi(line).length + ${\n bannerPadding.value\n })) / 2), 0)) + colors.bold(colors.text.banner.title.${variant}(line)) + \" \".repeat(Math.max(Math.ceil((process.stdout.columns - (stripAnsi(line).length + ${\n bannerPadding.value\n })) / 2), 0)) + colors.border.banner.outline.${variant}(\"${\n theme.borderStyles.banner.outline[variant].right\n }\"), { consoleFn: console.${consoleFnName} });\n });\n\n ${\n command?.title\n ? `${\n insertNewlineBeforeCommand\n ? `writeLine(colors.border.banner.outline.${variant}(\"${\n theme.borderStyles.banner.outline[variant].left\n }\") + \" \".repeat(Math.max(process.stdout.columns - ${\n bannerPadding.value\n })) + colors.border.banner.outline.${variant}(\"${\n theme.borderStyles.banner.outline[variant].right\n }\"), { consoleFn: console.${consoleFnName} }); `\n : \"\"\n }\n ${`writeLine(colors.border.banner.outline.${variant}(\"${\n theme.borderStyles.banner.outline[variant].left\n }\") + \" \".repeat(Math.max(Math.floor((process.stdout.columns - (stripAnsi(\"${\n command.title\n }\").length ${command.icon ? \" + 3\" : \"\"} + ${\n bannerPadding.value\n })) / 2), 0)) + colors.bold(colors.text.banner.command.${\n variant\n }(\"${command.icon ? `${command.icon} ` : \"\"}${command.title}\")) + \" \".repeat(Math.max(Math.ceil((process.stdout.columns - (stripAnsi(\"${command.title}\").length ${\n command.icon ? \" + 3\" : \"\"\n } + ${\n bannerPadding.value\n })) / 2), 0)) + colors.border.banner.outline.${variant}(\"${\n theme.borderStyles.banner.outline[variant].right\n }\"), { consoleFn: console.${consoleFnName} }); `} `\n : \"\"\n }\n\n splitText(\n colors.bold(${\n command?.title\n ? \"colors.text.banner.description\"\n : \"colors.text.banner.command\"\n }.${variant}(\"${description.replace(/\"/g, '\\\\\"')}\")),\n Math.max(process.stdout.columns - ${totalPadding.value}, 0)\n ).forEach((line) => {\n writeLine(colors.border.banner.outline.${variant}(\"${\n theme.borderStyles.banner.outline[variant].left\n }\") + \" \".repeat(Math.max(Math.floor((process.stdout.columns - (stripAnsi(line).length + ${\n bannerPadding.value\n })) / 2), 0)) + colors.text.banner.description.${variant}(line) + \" \".repeat(Math.max(Math.ceil((process.stdout.columns - (stripAnsi(line).length + ${\n bannerPadding.value\n })) / 2), 0)) + colors.border.banner.outline.${variant}(\"${\n theme.borderStyles.banner.outline[variant].right\n }\"), { consoleFn: console.${consoleFnName} });\n });\n\n writeLine(colors.border.banner.outline.${variant}(\"${\n theme.borderStyles.banner.outline[variant].bottomLeft\n }\") + ${\n footer\n ? `colors.border.banner.outline.${variant}(\"${\n theme.borderStyles.banner.outline[variant].bottom\n }\".repeat(Math.max(process.stdout.columns - ${\n 8 + (footer ? footer.length : 0) + bannerPadding.value\n }, 0))) + \" \" + ${\n footer\n ? `colors.bold(colors.text.banner.footer.${variant}(\"${footer}\"))`\n : \"\"\n } + \" \" + colors.border.banner.outline.${variant}(\"${\n theme.borderStyles.banner.outline[variant].bottom\n }\".repeat(6))`\n : `colors.border.banner.outline.${variant}(\"${\n theme.borderStyles.banner.outline[variant].bottom\n }\".repeat(Math.max(process.stdout.columns - ${\n bannerPadding.value\n }, 0)))`\n } + colors.border.banner.outline.${variant}(\"${\n theme.borderStyles.banner.outline[variant].bottomRight\n }\"), { consoleFn: console.${consoleFnName} });\n\n writeLine(\"\"); `}\n </>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"banner-function-declaration.mjs","names":["code","computed","Show","FunctionDeclaration","Spacing","usePowerlines","getAppDescription","getAppTitle","useTheme","BannerFunctionDeclaration","props","consoleFnName","variant","command","children","insertNewlineBeforeBanner","theme","context","header","labels","banner","packageJson","version","footer","title","replace","description","_$createComponent","name","doc","BannerFunctionBodyDeclaration","value","insertNewlineBeforeCommand","bannerPadding","Math","max","padding","app","borderStyles","outline","left","length","right","totalPadding","when","_$memo","topLeft","icons","top","topRight","icon","bottomLeft","bottom","bottomRight"],"sources":["../../src/components/banner-function-declaration.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, Show } from \"@alloy-js/core\";\nimport { FunctionDeclaration } from \"@alloy-js/typescript\";\nimport { Spacing } from \"@powerlines/plugin-alloy/core/components/spacing\";\nimport { usePowerlines } from \"@powerlines/plugin-alloy/core/contexts/context\";\nimport {\n getAppDescription,\n getAppTitle\n} from \"@shell-shock/core/plugin-utils/context-helpers\";\nimport type { CommandTree } from \"@shell-shock/core/types/command\";\nimport type { ThemeColorVariant } from \"@shell-shock/plugin-theme/types/theme\";\nimport { useTheme } from \"../contexts\";\nimport type { ScriptPresetContext } from \"../types\";\n\nexport interface BannerFunctionDeclarationProps {\n variant?: ThemeColorVariant;\n consoleFnName?: \"log\" | \"info\" | \"warn\" | \"error\" | \"debug\";\n insertNewlineBeforeBanner?: boolean;\n command?: CommandTree;\n children?: Children;\n}\n\n/**\n * A component to generate the `banner` function for a specific command or application.\n *\n * @remarks\n * This function will display a banner in the console with the application's name, version, and description. It can be customized with different variants for styling and supports conditional rendering based on flags or environment variables.\n */\nexport function BannerFunctionDeclaration(\n props: BannerFunctionDeclarationProps\n) {\n const {\n consoleFnName = \"log\",\n variant = \"primary\",\n command,\n children,\n insertNewlineBeforeBanner = true\n } = props;\n\n const theme = useTheme();\n const context = usePowerlines<ScriptPresetContext>();\n\n const header = computed(\n () =>\n `${theme.labels.banner.header[variant] || getAppTitle(context, false)} v${\n context.packageJson.version || \"1.0.0\"\n }`\n );\n const footer = computed(() => theme.labels.banner.footer[variant]);\n const title = computed(() =>\n getAppTitle(context, true).replace(\n `v${context.packageJson.version || \"1.0.0\"}`,\n \"\"\n )\n );\n const description = computed(\n () => command?.description || getAppDescription(context)\n );\n\n return (\n <>\n <FunctionDeclaration\n name=\"banner\"\n doc={`Write the ${getAppTitle(context)} application banner ${\n command ? `for the ${command.title} command ` : \"\"\n }to the console.`}>\n <BannerFunctionBodyDeclaration\n title={title.value}\n header={header.value}\n description={description.value}\n footer={footer.value}\n variant={variant}\n consoleFnName={consoleFnName}\n command={command}\n insertNewlineBeforeCommand\n insertNewlineBeforeBanner={insertNewlineBeforeBanner}>\n {children}\n </BannerFunctionBodyDeclaration>\n </FunctionDeclaration>\n </>\n );\n}\n\nexport interface BannerFunctionBodyDeclarationProps extends BannerFunctionDeclarationProps {\n title?: string;\n header?: string;\n footer?: string;\n description: string;\n insertNewlineBeforeCommand?: boolean;\n insertNewlineBeforeBanner?: boolean;\n}\n\n/**\n * A component to generate the `banner` function's body for a specific command or application.\n *\n * @remarks\n * This function will display a banner in the console with the application's name, version, and description. It can be customized with different variants for styling and supports conditional rendering based on flags or environment variables.\n */\nexport function BannerFunctionBodyDeclaration(\n props: BannerFunctionBodyDeclarationProps\n) {\n const {\n consoleFnName = \"log\",\n variant = \"primary\",\n title,\n header,\n footer,\n description,\n command,\n children,\n insertNewlineBeforeCommand = false,\n insertNewlineBeforeBanner = true\n } = props;\n\n const theme = useTheme();\n\n const bannerPadding = computed(\n () =>\n Math.max(theme.padding.app, 0) * 2 +\n theme.borderStyles.banner.outline[variant].left.length +\n theme.borderStyles.banner.outline[variant].right.length\n );\n const totalPadding = computed(\n () => Math.max(theme.padding.banner, 0) * 2 + bannerPadding.value\n );\n\n return (\n <>\n {code`\n if (useApp().get(\"banner\") || hasFlag(\"no-banner\") || hasFlag(\"hide-banner\") || isMinimal) {\n return;\n }\n\n useApp().set(\"banner\", true); `}\n <Spacing />\n {children}\n <Spacing />\n <Show when={insertNewlineBeforeBanner}>{code`writeLine(\"\"); `}</Show>\n <Spacing />\n {code`\n writeLine(colors.border.banner.outline.${variant}(\"${\n theme.borderStyles.banner.outline[variant].topLeft\n }\") + ${\n theme.icons.banner.header[variant]\n ? `colors.border.banner.outline.${variant}(\"${\n theme.borderStyles.banner.outline[variant].top\n }\".repeat(6)) + \" \" + ${\n theme.icons.banner.header[variant]\n ? `colors.text.banner.header.${variant}(\"${\n theme.icons.banner.header[variant]\n }\") + \" \" + colors.border.banner.outline.${variant}(\"${\n theme.borderStyles.banner.outline[variant].top\n }\") + \" \" +`\n : \"\"\n } colors.bold(colors.text.banner.header.${variant}(\"${\n header\n }\")) + \" \" + colors.border.banner.outline.${variant}(\"${\n theme.borderStyles.banner.outline[variant].top\n }\".repeat(Math.max(process.stdout.columns - ${\n 6 +\n (theme.icons.banner.header[variant]\n ? theme.icons.banner.header[variant].length + 3\n : 0) +\n (header ? header.length + 2 : 0) +\n bannerPadding.value\n }, 0)))`\n : `colors.border.banner.outline.${variant}(\"${\n theme.borderStyles.banner.outline[variant].top\n }\".repeat(Math.max(process.stdout.columns - ${\n bannerPadding.value\n }, 0)))`\n } + colors.border.banner.outline.${variant}(\"${\n theme.borderStyles.banner.outline[variant].topRight\n }\"), { consoleFn: console.${consoleFnName} });\n\n splitText(\n ${title ? `\"${title}\"` : \"title\"},\n Math.max(process.stdout.columns - ${totalPadding.value}, 0)\n ).forEach((line) => {\n writeLine(colors.border.banner.outline.${variant}(\"${\n theme.borderStyles.banner.outline[variant].left\n }\") + \" \".repeat(Math.max(Math.floor((process.stdout.columns - (stripAnsi(line).length + ${\n bannerPadding.value\n })) / 2), 0)) + colors.bold(colors.text.banner.title.${variant}(line)) + \" \".repeat(Math.max(Math.ceil((process.stdout.columns - (stripAnsi(line).length + ${\n bannerPadding.value\n })) / 2), 0)) + colors.border.banner.outline.${variant}(\"${\n theme.borderStyles.banner.outline[variant].right\n }\"), { consoleFn: console.${consoleFnName} });\n });\n\n ${\n command?.title\n ? `${\n insertNewlineBeforeCommand\n ? `writeLine(colors.border.banner.outline.${variant}(\"${\n theme.borderStyles.banner.outline[variant].left\n }\") + \" \".repeat(Math.max(process.stdout.columns - ${\n bannerPadding.value\n })) + colors.border.banner.outline.${variant}(\"${\n theme.borderStyles.banner.outline[variant].right\n }\"), { consoleFn: console.${consoleFnName} }); `\n : \"\"\n }\n ${`writeLine(colors.border.banner.outline.${variant}(\"${\n theme.borderStyles.banner.outline[variant].left\n }\") + \" \".repeat(Math.max(Math.floor((process.stdout.columns - (stripAnsi(\"${\n command.title\n }\").length ${command.icon ? \" + 3\" : \"\"} + ${\n bannerPadding.value\n })) / 2), 0)) + colors.bold(colors.text.banner.command.${\n variant\n }(\"${command.icon ? `${command.icon} ` : \"\"}${command.title}\")) + \" \".repeat(Math.max(Math.ceil((process.stdout.columns - (stripAnsi(\"${command.title}\").length ${\n command.icon ? \" + 3\" : \"\"\n } + ${\n bannerPadding.value\n })) / 2), 0)) + colors.border.banner.outline.${variant}(\"${\n theme.borderStyles.banner.outline[variant].right\n }\"), { consoleFn: console.${consoleFnName} }); `} `\n : \"\"\n }\n\n splitText(\n colors.bold(${\n command?.title\n ? \"colors.text.banner.description\"\n : \"colors.text.banner.command\"\n }.${variant}(\"${description.replace(/\"/g, '\\\\\"')}\")),\n Math.max(process.stdout.columns - ${totalPadding.value}, 0)\n ).forEach((line) => {\n writeLine(colors.border.banner.outline.${variant}(\"${\n theme.borderStyles.banner.outline[variant].left\n }\") + \" \".repeat(Math.max(Math.floor((process.stdout.columns - (stripAnsi(line).length + ${\n bannerPadding.value\n })) / 2), 0)) + colors.text.banner.description.${variant}(line) + \" \".repeat(Math.max(Math.ceil((process.stdout.columns - (stripAnsi(line).length + ${\n bannerPadding.value\n })) / 2), 0)) + colors.border.banner.outline.${variant}(\"${\n theme.borderStyles.banner.outline[variant].right\n }\"), { consoleFn: console.${consoleFnName} });\n });\n\n writeLine(colors.border.banner.outline.${variant}(\"${\n theme.borderStyles.banner.outline[variant].bottomLeft\n }\") + ${\n footer\n ? `colors.border.banner.outline.${variant}(\"${\n theme.borderStyles.banner.outline[variant].bottom\n }\".repeat(Math.max(process.stdout.columns - ${\n 8 + (footer ? footer.length : 0) + bannerPadding.value\n }, 0))) + \" \" + ${\n footer\n ? `colors.bold(colors.text.banner.footer.${variant}(\"${footer}\"))`\n : \"\"\n } + \" \" + colors.border.banner.outline.${variant}(\"${\n theme.borderStyles.banner.outline[variant].bottom\n }\".repeat(6))`\n : `colors.border.banner.outline.${variant}(\"${\n theme.borderStyles.banner.outline[variant].bottom\n }\".repeat(Math.max(process.stdout.columns - ${\n bannerPadding.value\n }, 0)))`\n } + colors.border.banner.outline.${variant}(\"${\n theme.borderStyles.banner.outline[variant].bottomRight\n }\"), { consoleFn: console.${consoleFnName} });\n\n writeLine(\"\"); `}\n </>\n );\n}\n"],"mappings":"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"}
@@ -280,7 +280,7 @@ function CommandValidationLogic(props) {
280
280
  }),
281
281
  (0, __alloy_js_core_jsx_runtime.createComponent)(__alloy_js_typescript.IfStatement, {
282
282
  condition: __alloy_js_core.code`failures.length > 0`,
283
- children: __alloy_js_core.code`error("The following validation failures were found while processing the user provided input, and must be corrected before the command line process can be executed: \\n\\n" + failures.map(failure => " - " + failure).join("\\n"));
283
+ children: __alloy_js_core.code`error("The following validation failures were found while processing the user provided input, and must be corrected before the command-line process can be executed: \\n\\n" + failures.map(failure => " - " + failure).join("\\n"));
284
284
  options.help = true; `
285
285
  })
286
286
  ];
@@ -1 +1 @@
1
- {"version":3,"file":"command-entry.cjs","names":["code","computed","For","Show","ElseClause","ElseIfClause","FunctionDeclaration","IfStatement","VarDeclaration","ReflectionKind","Spacing","usePowerlines","EntryFile","TSDoc","TSDocParam","TSDocRemarks","TSDocTitle","CommandParserLogic","OptionsInterfaceDeclaration","getAppBin","getDynamicPathSegmentName","isDynamicPathSegment","findFilePath","relativePath","joinPaths","replaceExtension","camelCase","constantCase","kebabCase","pascalCase","defu","BannerFunctionDeclaration","CommandHelp","IsDebug","VirtualCommandEntry","CommandInvocation","props","command","_$createComponent","name","initializer","segments","map","segment","join","_$memo","arguments","length","argument","_$createIntrinsic","CommandHandlerDeclaration","banner","children","context","heading","title","description","replace","async","parameters","type","default","envPrefix","config","isCaseSensitive","when","Boolean","condition","Object","values","options","option","CommandValidationLogic","each","doubleHardline","optional","includes","kind","string","number","variadic","fallback","CommandEntry","imports","builtinImports","rest","filePath","filter","commandSourcePath","entryPath","value","entry","input","file","typeDefinition","output","id","_$mergeProps","path","env","console","utils","child","isVirtual"],"sources":["../../src/components/command-entry.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 ElseClause,\n ElseIfClause,\n FunctionDeclaration,\n IfStatement,\n VarDeclaration\n} from \"@alloy-js/typescript\";\nimport { ReflectionKind } from \"@powerlines/deepkit/vendor/type\";\nimport { Spacing } from \"@powerlines/plugin-alloy/core/components/spacing\";\nimport { usePowerlines } from \"@powerlines/plugin-alloy/core/contexts/context\";\nimport type { EntryFileProps } from \"@powerlines/plugin-alloy/typescript/components/entry-file\";\nimport { EntryFile } from \"@powerlines/plugin-alloy/typescript/components/entry-file\";\nimport {\n TSDoc,\n TSDocParam,\n TSDocRemarks,\n TSDocTitle\n} from \"@powerlines/plugin-alloy/typescript/components/tsdoc\";\nimport {\n CommandParserLogic,\n OptionsInterfaceDeclaration\n} from \"@shell-shock/core/components/options-parser-logic\";\nimport {\n getAppBin,\n getDynamicPathSegmentName,\n isDynamicPathSegment\n} from \"@shell-shock/core/plugin-utils/context-helpers\";\nimport type {\n CommandTree,\n NumberCommandArgument,\n NumberCommandOption\n} from \"@shell-shock/core/types/command\";\nimport { findFilePath, relativePath } from \"@stryke/path/find\";\nimport { joinPaths } from \"@stryke/path/join\";\nimport { replaceExtension } from \"@stryke/path/replace\";\nimport { camelCase } from \"@stryke/string-format/camel-case\";\nimport { constantCase } from \"@stryke/string-format/constant-case\";\nimport { kebabCase } from \"@stryke/string-format/kebab-case\";\nimport { pascalCase } from \"@stryke/string-format/pascal-case\";\nimport defu from \"defu\";\nimport type { ScriptPresetContext } from \"../types/plugin\";\nimport { BannerFunctionDeclaration } from \"./banner-function-declaration\";\nimport { CommandHelp } from \"./help\";\nimport { IsDebug } from \"./helpers\";\nimport { VirtualCommandEntry } from \"./virtual-command-entry\";\n\nexport function CommandInvocation(props: { command: CommandTree }) {\n const { command } = props;\n\n return (\n <>\n <VarDeclaration\n name=\"__context\"\n initializer={code`{ path: \\`${command.segments\n .map(segment =>\n isDynamicPathSegment(segment)\n ? `\\${${camelCase(getDynamicPathSegmentName(segment))}}`\n : segment\n )\n .join(\"/\")}\\`, segments: [${command.segments\n .map(segment =>\n isDynamicPathSegment(segment)\n ? camelCase(getDynamicPathSegmentName(segment))\n : `\"${segment}\"`\n )\n .join(\", \")}] }`}\n />\n <Spacing />\n {code`\n\n return internal_commandContext.run(__context, () => {\n return Promise.resolve(Reflect.apply(handle${pascalCase(\n command.name\n )}, __context, [options${\n command.arguments.length > 0\n ? `, ${command.arguments\n .map(argument => camelCase(argument.name))\n .join(\", \")}`\n : \"\"\n }]));\n });\n\n `}\n <hbr />\n </>\n );\n}\n\nexport interface CommandHandlerDeclarationProps {\n command: CommandTree;\n banner?: Children;\n children?: Children;\n}\n\n/**\n * A component that generates the `handler` function declaration for a command.\n */\nexport function CommandHandlerDeclaration(\n props: CommandHandlerDeclarationProps\n) {\n const { command, banner, children } = props;\n\n const context = usePowerlines<ScriptPresetContext>();\n\n return (\n <>\n <OptionsInterfaceDeclaration command={command} />\n <Spacing />\n <TSDoc\n heading={`The ${command.title} (${getAppBin(context)} ${command.segments\n .map(segment =>\n isDynamicPathSegment(segment)\n ? `[${constantCase(getDynamicPathSegmentName(segment))}]`\n : segment\n )\n .join(\" \")}) command.`}>\n <TSDocRemarks>{`${command.description.replace(/\\.+$/, \"\")}.`}</TSDocRemarks>\n <hbr />\n <TSDocTitle>{command.title}</TSDocTitle>\n <TSDocParam name=\"args\">{`The command-line arguments passed to the command.`}</TSDocParam>\n </TSDoc>\n <FunctionDeclaration\n export\n async\n name=\"handler\"\n parameters={[{ name: \"args\", type: \"string[]\", default: \"useArgs()\" }]}>\n <CommandParserLogic\n command={command}\n envPrefix={context.config.envPrefix}\n isCaseSensitive={context.config.isCaseSensitive}\n />\n <hbr />\n <hbr />\n <Show when={Boolean(banner)}>{banner}</Show>\n <hbr />\n <hbr />\n <IfStatement condition={<IsDebug />}>\n {code`writeLine(\"\");\n writeLine(colors.text.body.tertiary(\"Debug mode is enabled. Additional debug information may be logged to the console.\"));\n debug(\\`Command path: ${command.segments\n .map(segment =>\n isDynamicPathSegment(segment)\n ? `\\${${camelCase(getDynamicPathSegmentName(segment))}}`\n : segment\n )\n .join(\" / \")} \\\\n\\\\nOptions: \\\\n${Object.values(command.options)\n .map(\n option =>\n ` - ${kebabCase(option.name)}: \\${options.${camelCase(\n option.name\n )} === undefined ? \"\" : JSON.stringify(options.${camelCase(\n option.name\n )})}`\n )\n .join(\"\\\\n\")}${\n command.arguments.length > 0\n ? ` \\\\n\\\\nArguments: \\\\n${command.arguments\n .map(\n argument =>\n ` - ${kebabCase(argument.name)}: \\${${camelCase(\n argument.name\n )} === undefined ? \"\" : JSON.stringify(${camelCase(\n argument.name\n )})}`\n )\n .join(\"\\\\n\")}`\n : \"\"\n }\\`);\n writeLine(\"\"); `}\n </IfStatement>\n <hbr />\n <hbr />\n {children}\n <hbr />\n <hbr />\n <IfStatement condition={code`options.help`}>\n <CommandHelp command={command} />\n </IfStatement>\n <ElseClause>\n <hbr />\n <CommandInvocation command={command} />\n </ElseClause>\n </FunctionDeclaration>\n </>\n );\n}\n\nexport interface CommandValidationLogicProps {\n command: CommandTree;\n}\n\n/**\n * A component that generates command validation logic for required options and arguments.\n */\nexport function CommandValidationLogic(props: CommandValidationLogicProps) {\n const { command } = props;\n\n return (\n <>\n <VarDeclaration name=\"failures\" type=\"string[]\" initializer={code`[];`} />\n <hbr />\n <For each={Object.values(command.options ?? {})} doubleHardline>\n {option => (\n <>\n <Show when={!option.optional}>\n <IfStatement\n condition={code`!options${\n option.name.includes(\"?\")\n ? `[\"${option.name}\"]`\n : `.${camelCase(option.name)}`\n }`}>\n {code`failures.push(\"Missing required \\\\\"${option.name}\\\\\" option\");`}\n </IfStatement>\n <Show\n when={\n (option.kind === ReflectionKind.string ||\n option.kind === ReflectionKind.number) &&\n option.variadic\n }>\n <ElseIfClause\n condition={code`options${\n option.name.includes(\"?\")\n ? `[\"${option.name}\"]`\n : `.${camelCase(option.name)}`\n }.length === 0`}>\n {code`failures.push(\"No values were provided to the required \\\\\"${\n option.name\n }\\\\\" array option\");`}\n </ElseIfClause>\n </Show>\n </Show>\n <Show when={option.kind === ReflectionKind.number}>\n <Show\n when={(option as NumberCommandOption).variadic}\n fallback={\n <IfStatement\n condition={code`options${\n option.name.includes(\"?\")\n ? `[\"${option.name}\"]`\n : `.${camelCase(option.name)}`\n } && Number.isNaN(options${\n option.name.includes(\"?\")\n ? `[\"${option.name}\"]`\n : `.${camelCase(option.name)}`\n })`}>\n {code`failures.push(\"Invalid numeric value provided for the \\\\\"${\n option.name\n }\\\\\" option\");`}\n </IfStatement>\n }>\n <IfStatement\n condition={code`options${\n option.name.includes(\"?\")\n ? `[\"${option.name}\"]`\n : `.${camelCase(option.name)}`\n }.some(value => Number.isNaN(value))`}>\n {code`failures.push(\"Invalid numeric value provided in the \\\\\"${\n option.name\n }\\\\\" array option\");`}\n </IfStatement>\n </Show>\n </Show>\n </>\n )}\n </For>\n <Spacing />\n <For each={command.arguments} doubleHardline>\n {argument => (\n <>\n <Show when={!argument.optional}>\n <IfStatement condition={code`!${camelCase(argument.name)}`}>\n {code`failures.push(\"Missing required \\\\\"${\n argument.name\n }\\\\\" positional argument\");`}\n </IfStatement>\n <Show\n when={\n (argument.kind === ReflectionKind.string ||\n argument.kind === ReflectionKind.number) &&\n argument.variadic\n }>\n <ElseIfClause\n condition={code`${camelCase(argument.name)}.length === 0`}>\n {code`failures.push(\"No values were provided to the required \\\\\"${\n argument.name\n }\\\\\" array positional argument\");`}\n </ElseIfClause>\n </Show>\n </Show>\n <Show when={argument.kind === ReflectionKind.number}>\n <Show\n when={(argument as NumberCommandArgument).variadic}\n fallback={\n <IfStatement\n condition={code`${camelCase(\n argument.name\n )} && Number.isNaN(${camelCase(argument.name)})`}>\n {code`failures.push(\"Invalid numeric value provided for the \\\\\"${\n argument.name\n }\\\\\" positional argument\");`}\n </IfStatement>\n }>\n <IfStatement\n condition={code`${camelCase(argument.name)}.some(value => Number.isNaN(value))`}>\n {code`failures.push(\"Invalid numeric value provided in the \\\\\"${\n argument.name\n }\\\\\" array positional argument\");`}\n </IfStatement>\n </Show>\n </Show>\n </>\n )}\n </For>\n <IfStatement condition={code`failures.length > 0`}>\n {code`error(\"The following validation failures were found while processing the user provided input, and must be corrected before the command line process can be executed: \\\\n\\\\n\" + failures.map(failure => \" - \" + failure).join(\"\\\\n\"));\n options.help = true; `}\n </IfStatement>\n </>\n );\n}\n\nexport interface CommandEntryProps extends Omit<\n EntryFileProps,\n \"path\" | \"typeDefinition\"\n> {\n command: CommandTree;\n}\n\n/**\n * The command entry point for the Shell Shock project.\n */\nexport function CommandEntry(props: CommandEntryProps) {\n const { command, imports, builtinImports, ...rest } = props;\n\n const context = usePowerlines<ScriptPresetContext>();\n const filePath = computed(() =>\n joinPaths(\n command.segments\n .filter(segment => !isDynamicPathSegment(segment))\n .join(\"/\"),\n \"index.ts\"\n )\n );\n const commandSourcePath = computed(() =>\n replaceExtension(\n relativePath(\n joinPaths(context.entryPath, findFilePath(filePath.value)),\n command.entry.input?.file || command.entry.file\n )\n )\n );\n const typeDefinition = computed(() => ({\n ...command.entry,\n output: command.id\n }));\n\n return (\n <>\n <EntryFile\n {...rest}\n path={filePath.value}\n typeDefinition={typeDefinition.value}\n imports={defu(imports ?? {}, {\n [commandSourcePath.value]: `handle${pascalCase(command.name)}`\n })}\n builtinImports={defu(builtinImports ?? {}, {\n env: [\"env\", \"isDevelopment\", \"isDebug\"],\n console: [\n \"debug\",\n \"warn\",\n \"error\",\n \"table\",\n \"colors\",\n \"stripAnsi\",\n \"writeLine\",\n \"splitText\"\n ],\n utils: [\n \"useArgs\",\n \"hasFlag\",\n \"isMinimal\",\n \"isUnicodeSupported\",\n \"internal_commandContext\"\n ]\n })}>\n <BannerFunctionDeclaration command={command} />\n <hbr />\n <hbr />\n <OptionsInterfaceDeclaration command={command} />\n <hbr />\n <hbr />\n <CommandHandlerDeclaration command={command} banner={code`banner(); `}>\n <CommandValidationLogic command={command} />\n </CommandHandlerDeclaration>\n </EntryFile>\n <For each={Object.values(command.children)}>\n {child => (\n <Show\n when={child.isVirtual}\n fallback={<CommandEntry command={child} />}>\n <VirtualCommandEntry command={child} />\n </Show>\n )}\n </For>\n </>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"command-entry.cjs","names":["code","computed","For","Show","ElseClause","ElseIfClause","FunctionDeclaration","IfStatement","VarDeclaration","ReflectionKind","Spacing","usePowerlines","EntryFile","TSDoc","TSDocParam","TSDocRemarks","TSDocTitle","CommandParserLogic","OptionsInterfaceDeclaration","getAppBin","getDynamicPathSegmentName","isDynamicPathSegment","findFilePath","relativePath","joinPaths","replaceExtension","camelCase","constantCase","kebabCase","pascalCase","defu","BannerFunctionDeclaration","CommandHelp","IsDebug","VirtualCommandEntry","CommandInvocation","props","command","_$createComponent","name","initializer","segments","map","segment","join","_$memo","arguments","length","argument","_$createIntrinsic","CommandHandlerDeclaration","banner","children","context","heading","title","description","replace","async","parameters","type","default","envPrefix","config","isCaseSensitive","when","Boolean","condition","Object","values","options","option","CommandValidationLogic","each","doubleHardline","optional","includes","kind","string","number","variadic","fallback","CommandEntry","imports","builtinImports","rest","filePath","filter","commandSourcePath","entryPath","value","entry","input","file","typeDefinition","output","id","_$mergeProps","path","env","console","utils","child","isVirtual"],"sources":["../../src/components/command-entry.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 ElseClause,\n ElseIfClause,\n FunctionDeclaration,\n IfStatement,\n VarDeclaration\n} from \"@alloy-js/typescript\";\nimport { ReflectionKind } from \"@powerlines/deepkit/vendor/type\";\nimport { Spacing } from \"@powerlines/plugin-alloy/core/components/spacing\";\nimport { usePowerlines } from \"@powerlines/plugin-alloy/core/contexts/context\";\nimport type { EntryFileProps } from \"@powerlines/plugin-alloy/typescript/components/entry-file\";\nimport { EntryFile } from \"@powerlines/plugin-alloy/typescript/components/entry-file\";\nimport {\n TSDoc,\n TSDocParam,\n TSDocRemarks,\n TSDocTitle\n} from \"@powerlines/plugin-alloy/typescript/components/tsdoc\";\nimport {\n CommandParserLogic,\n OptionsInterfaceDeclaration\n} from \"@shell-shock/core/components/options-parser-logic\";\nimport {\n getAppBin,\n getDynamicPathSegmentName,\n isDynamicPathSegment\n} from \"@shell-shock/core/plugin-utils/context-helpers\";\nimport type {\n CommandTree,\n NumberCommandArgument,\n NumberCommandOption\n} from \"@shell-shock/core/types/command\";\nimport { findFilePath, relativePath } from \"@stryke/path/find\";\nimport { joinPaths } from \"@stryke/path/join\";\nimport { replaceExtension } from \"@stryke/path/replace\";\nimport { camelCase } from \"@stryke/string-format/camel-case\";\nimport { constantCase } from \"@stryke/string-format/constant-case\";\nimport { kebabCase } from \"@stryke/string-format/kebab-case\";\nimport { pascalCase } from \"@stryke/string-format/pascal-case\";\nimport defu from \"defu\";\nimport type { ScriptPresetContext } from \"../types/plugin\";\nimport { BannerFunctionDeclaration } from \"./banner-function-declaration\";\nimport { CommandHelp } from \"./help\";\nimport { IsDebug } from \"./helpers\";\nimport { VirtualCommandEntry } from \"./virtual-command-entry\";\n\nexport function CommandInvocation(props: { command: CommandTree }) {\n const { command } = props;\n\n return (\n <>\n <VarDeclaration\n name=\"__context\"\n initializer={code`{ path: \\`${command.segments\n .map(segment =>\n isDynamicPathSegment(segment)\n ? `\\${${camelCase(getDynamicPathSegmentName(segment))}}`\n : segment\n )\n .join(\"/\")}\\`, segments: [${command.segments\n .map(segment =>\n isDynamicPathSegment(segment)\n ? camelCase(getDynamicPathSegmentName(segment))\n : `\"${segment}\"`\n )\n .join(\", \")}] }`}\n />\n <Spacing />\n {code`\n\n return internal_commandContext.run(__context, () => {\n return Promise.resolve(Reflect.apply(handle${pascalCase(\n command.name\n )}, __context, [options${\n command.arguments.length > 0\n ? `, ${command.arguments\n .map(argument => camelCase(argument.name))\n .join(\", \")}`\n : \"\"\n }]));\n });\n\n `}\n <hbr />\n </>\n );\n}\n\nexport interface CommandHandlerDeclarationProps {\n command: CommandTree;\n banner?: Children;\n children?: Children;\n}\n\n/**\n * A component that generates the `handler` function declaration for a command.\n */\nexport function CommandHandlerDeclaration(\n props: CommandHandlerDeclarationProps\n) {\n const { command, banner, children } = props;\n\n const context = usePowerlines<ScriptPresetContext>();\n\n return (\n <>\n <OptionsInterfaceDeclaration command={command} />\n <Spacing />\n <TSDoc\n heading={`The ${command.title} (${getAppBin(context)} ${command.segments\n .map(segment =>\n isDynamicPathSegment(segment)\n ? `[${constantCase(getDynamicPathSegmentName(segment))}]`\n : segment\n )\n .join(\" \")}) command.`}>\n <TSDocRemarks>{`${command.description.replace(/\\.+$/, \"\")}.`}</TSDocRemarks>\n <hbr />\n <TSDocTitle>{command.title}</TSDocTitle>\n <TSDocParam name=\"args\">{`The command-line arguments passed to the command.`}</TSDocParam>\n </TSDoc>\n <FunctionDeclaration\n export\n async\n name=\"handler\"\n parameters={[{ name: \"args\", type: \"string[]\", default: \"useArgs()\" }]}>\n <CommandParserLogic\n command={command}\n envPrefix={context.config.envPrefix}\n isCaseSensitive={context.config.isCaseSensitive}\n />\n <hbr />\n <hbr />\n <Show when={Boolean(banner)}>{banner}</Show>\n <hbr />\n <hbr />\n <IfStatement condition={<IsDebug />}>\n {code`writeLine(\"\");\n writeLine(colors.text.body.tertiary(\"Debug mode is enabled. Additional debug information may be logged to the console.\"));\n debug(\\`Command path: ${command.segments\n .map(segment =>\n isDynamicPathSegment(segment)\n ? `\\${${camelCase(getDynamicPathSegmentName(segment))}}`\n : segment\n )\n .join(\" / \")} \\\\n\\\\nOptions: \\\\n${Object.values(command.options)\n .map(\n option =>\n ` - ${kebabCase(option.name)}: \\${options.${camelCase(\n option.name\n )} === undefined ? \"\" : JSON.stringify(options.${camelCase(\n option.name\n )})}`\n )\n .join(\"\\\\n\")}${\n command.arguments.length > 0\n ? ` \\\\n\\\\nArguments: \\\\n${command.arguments\n .map(\n argument =>\n ` - ${kebabCase(argument.name)}: \\${${camelCase(\n argument.name\n )} === undefined ? \"\" : JSON.stringify(${camelCase(\n argument.name\n )})}`\n )\n .join(\"\\\\n\")}`\n : \"\"\n }\\`);\n writeLine(\"\"); `}\n </IfStatement>\n <hbr />\n <hbr />\n {children}\n <hbr />\n <hbr />\n <IfStatement condition={code`options.help`}>\n <CommandHelp command={command} />\n </IfStatement>\n <ElseClause>\n <hbr />\n <CommandInvocation command={command} />\n </ElseClause>\n </FunctionDeclaration>\n </>\n );\n}\n\nexport interface CommandValidationLogicProps {\n command: CommandTree;\n}\n\n/**\n * A component that generates command validation logic for required options and arguments.\n */\nexport function CommandValidationLogic(props: CommandValidationLogicProps) {\n const { command } = props;\n\n return (\n <>\n <VarDeclaration name=\"failures\" type=\"string[]\" initializer={code`[];`} />\n <hbr />\n <For each={Object.values(command.options ?? {})} doubleHardline>\n {option => (\n <>\n <Show when={!option.optional}>\n <IfStatement\n condition={code`!options${\n option.name.includes(\"?\")\n ? `[\"${option.name}\"]`\n : `.${camelCase(option.name)}`\n }`}>\n {code`failures.push(\"Missing required \\\\\"${option.name}\\\\\" option\");`}\n </IfStatement>\n <Show\n when={\n (option.kind === ReflectionKind.string ||\n option.kind === ReflectionKind.number) &&\n option.variadic\n }>\n <ElseIfClause\n condition={code`options${\n option.name.includes(\"?\")\n ? `[\"${option.name}\"]`\n : `.${camelCase(option.name)}`\n }.length === 0`}>\n {code`failures.push(\"No values were provided to the required \\\\\"${\n option.name\n }\\\\\" array option\");`}\n </ElseIfClause>\n </Show>\n </Show>\n <Show when={option.kind === ReflectionKind.number}>\n <Show\n when={(option as NumberCommandOption).variadic}\n fallback={\n <IfStatement\n condition={code`options${\n option.name.includes(\"?\")\n ? `[\"${option.name}\"]`\n : `.${camelCase(option.name)}`\n } && Number.isNaN(options${\n option.name.includes(\"?\")\n ? `[\"${option.name}\"]`\n : `.${camelCase(option.name)}`\n })`}>\n {code`failures.push(\"Invalid numeric value provided for the \\\\\"${\n option.name\n }\\\\\" option\");`}\n </IfStatement>\n }>\n <IfStatement\n condition={code`options${\n option.name.includes(\"?\")\n ? `[\"${option.name}\"]`\n : `.${camelCase(option.name)}`\n }.some(value => Number.isNaN(value))`}>\n {code`failures.push(\"Invalid numeric value provided in the \\\\\"${\n option.name\n }\\\\\" array option\");`}\n </IfStatement>\n </Show>\n </Show>\n </>\n )}\n </For>\n <Spacing />\n <For each={command.arguments} doubleHardline>\n {argument => (\n <>\n <Show when={!argument.optional}>\n <IfStatement condition={code`!${camelCase(argument.name)}`}>\n {code`failures.push(\"Missing required \\\\\"${\n argument.name\n }\\\\\" positional argument\");`}\n </IfStatement>\n <Show\n when={\n (argument.kind === ReflectionKind.string ||\n argument.kind === ReflectionKind.number) &&\n argument.variadic\n }>\n <ElseIfClause\n condition={code`${camelCase(argument.name)}.length === 0`}>\n {code`failures.push(\"No values were provided to the required \\\\\"${\n argument.name\n }\\\\\" array positional argument\");`}\n </ElseIfClause>\n </Show>\n </Show>\n <Show when={argument.kind === ReflectionKind.number}>\n <Show\n when={(argument as NumberCommandArgument).variadic}\n fallback={\n <IfStatement\n condition={code`${camelCase(\n argument.name\n )} && Number.isNaN(${camelCase(argument.name)})`}>\n {code`failures.push(\"Invalid numeric value provided for the \\\\\"${\n argument.name\n }\\\\\" positional argument\");`}\n </IfStatement>\n }>\n <IfStatement\n condition={code`${camelCase(argument.name)}.some(value => Number.isNaN(value))`}>\n {code`failures.push(\"Invalid numeric value provided in the \\\\\"${\n argument.name\n }\\\\\" array positional argument\");`}\n </IfStatement>\n </Show>\n </Show>\n </>\n )}\n </For>\n <IfStatement condition={code`failures.length > 0`}>\n {code`error(\"The following validation failures were found while processing the user provided input, and must be corrected before the command-line process can be executed: \\\\n\\\\n\" + failures.map(failure => \" - \" + failure).join(\"\\\\n\"));\n options.help = true; `}\n </IfStatement>\n </>\n );\n}\n\nexport interface CommandEntryProps extends Omit<\n EntryFileProps,\n \"path\" | \"typeDefinition\"\n> {\n command: CommandTree;\n}\n\n/**\n * The command entry point for the Shell Shock project.\n */\nexport function CommandEntry(props: CommandEntryProps) {\n const { command, imports, builtinImports, ...rest } = props;\n\n const context = usePowerlines<ScriptPresetContext>();\n const filePath = computed(() =>\n joinPaths(\n command.segments\n .filter(segment => !isDynamicPathSegment(segment))\n .join(\"/\"),\n \"index.ts\"\n )\n );\n const commandSourcePath = computed(() =>\n replaceExtension(\n relativePath(\n joinPaths(context.entryPath, findFilePath(filePath.value)),\n command.entry.input?.file || command.entry.file\n )\n )\n );\n const typeDefinition = computed(() => ({\n ...command.entry,\n output: command.id\n }));\n\n return (\n <>\n <EntryFile\n {...rest}\n path={filePath.value}\n typeDefinition={typeDefinition.value}\n imports={defu(imports ?? {}, {\n [commandSourcePath.value]: `handle${pascalCase(command.name)}`\n })}\n builtinImports={defu(builtinImports ?? {}, {\n env: [\"env\", \"isDevelopment\", \"isDebug\"],\n console: [\n \"debug\",\n \"warn\",\n \"error\",\n \"table\",\n \"colors\",\n \"stripAnsi\",\n \"writeLine\",\n \"splitText\"\n ],\n utils: [\n \"useArgs\",\n \"hasFlag\",\n \"isMinimal\",\n \"isUnicodeSupported\",\n \"internal_commandContext\"\n ]\n })}>\n <BannerFunctionDeclaration command={command} />\n <hbr />\n <hbr />\n <OptionsInterfaceDeclaration command={command} />\n <hbr />\n <hbr />\n <CommandHandlerDeclaration command={command} banner={code`banner(); `}>\n <CommandValidationLogic command={command} />\n </CommandHandlerDeclaration>\n </EntryFile>\n <For each={Object.values(command.children)}>\n {child => (\n <Show\n when={child.isVirtual}\n fallback={<CommandEntry command={child} />}>\n <VirtualCommandEntry command={child} />\n </Show>\n )}\n </For>\n </>\n );\n}\n"],"mappings":"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"}
@@ -278,7 +278,7 @@ function CommandValidationLogic(props) {
278
278
  }),
279
279
  createComponent(IfStatement, {
280
280
  condition: code`failures.length > 0`,
281
- children: code`error("The following validation failures were found while processing the user provided input, and must be corrected before the command line process can be executed: \\n\\n" + failures.map(failure => " - " + failure).join("\\n"));
281
+ children: code`error("The following validation failures were found while processing the user provided input, and must be corrected before the command-line process can be executed: \\n\\n" + failures.map(failure => " - " + failure).join("\\n"));
282
282
  options.help = true; `
283
283
  })
284
284
  ];
@@ -1 +1 @@
1
- {"version":3,"file":"command-entry.mjs","names":["code","computed","For","Show","ElseClause","ElseIfClause","FunctionDeclaration","IfStatement","VarDeclaration","ReflectionKind","Spacing","usePowerlines","EntryFile","TSDoc","TSDocParam","TSDocRemarks","TSDocTitle","CommandParserLogic","OptionsInterfaceDeclaration","getAppBin","getDynamicPathSegmentName","isDynamicPathSegment","findFilePath","relativePath","joinPaths","replaceExtension","camelCase","constantCase","kebabCase","pascalCase","defu","BannerFunctionDeclaration","CommandHelp","IsDebug","VirtualCommandEntry","CommandInvocation","props","command","_$createComponent","name","initializer","segments","map","segment","join","_$memo","arguments","length","argument","_$createIntrinsic","CommandHandlerDeclaration","banner","children","context","heading","title","description","replace","async","parameters","type","default","envPrefix","config","isCaseSensitive","when","Boolean","condition","Object","values","options","option","CommandValidationLogic","each","doubleHardline","optional","includes","kind","string","number","variadic","fallback","CommandEntry","imports","builtinImports","rest","filePath","filter","commandSourcePath","entryPath","value","entry","input","file","typeDefinition","output","id","_$mergeProps","path","env","console","utils","child","isVirtual"],"sources":["../../src/components/command-entry.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 ElseClause,\n ElseIfClause,\n FunctionDeclaration,\n IfStatement,\n VarDeclaration\n} from \"@alloy-js/typescript\";\nimport { ReflectionKind } from \"@powerlines/deepkit/vendor/type\";\nimport { Spacing } from \"@powerlines/plugin-alloy/core/components/spacing\";\nimport { usePowerlines } from \"@powerlines/plugin-alloy/core/contexts/context\";\nimport type { EntryFileProps } from \"@powerlines/plugin-alloy/typescript/components/entry-file\";\nimport { EntryFile } from \"@powerlines/plugin-alloy/typescript/components/entry-file\";\nimport {\n TSDoc,\n TSDocParam,\n TSDocRemarks,\n TSDocTitle\n} from \"@powerlines/plugin-alloy/typescript/components/tsdoc\";\nimport {\n CommandParserLogic,\n OptionsInterfaceDeclaration\n} from \"@shell-shock/core/components/options-parser-logic\";\nimport {\n getAppBin,\n getDynamicPathSegmentName,\n isDynamicPathSegment\n} from \"@shell-shock/core/plugin-utils/context-helpers\";\nimport type {\n CommandTree,\n NumberCommandArgument,\n NumberCommandOption\n} from \"@shell-shock/core/types/command\";\nimport { findFilePath, relativePath } from \"@stryke/path/find\";\nimport { joinPaths } from \"@stryke/path/join\";\nimport { replaceExtension } from \"@stryke/path/replace\";\nimport { camelCase } from \"@stryke/string-format/camel-case\";\nimport { constantCase } from \"@stryke/string-format/constant-case\";\nimport { kebabCase } from \"@stryke/string-format/kebab-case\";\nimport { pascalCase } from \"@stryke/string-format/pascal-case\";\nimport defu from \"defu\";\nimport type { ScriptPresetContext } from \"../types/plugin\";\nimport { BannerFunctionDeclaration } from \"./banner-function-declaration\";\nimport { CommandHelp } from \"./help\";\nimport { IsDebug } from \"./helpers\";\nimport { VirtualCommandEntry } from \"./virtual-command-entry\";\n\nexport function CommandInvocation(props: { command: CommandTree }) {\n const { command } = props;\n\n return (\n <>\n <VarDeclaration\n name=\"__context\"\n initializer={code`{ path: \\`${command.segments\n .map(segment =>\n isDynamicPathSegment(segment)\n ? `\\${${camelCase(getDynamicPathSegmentName(segment))}}`\n : segment\n )\n .join(\"/\")}\\`, segments: [${command.segments\n .map(segment =>\n isDynamicPathSegment(segment)\n ? camelCase(getDynamicPathSegmentName(segment))\n : `\"${segment}\"`\n )\n .join(\", \")}] }`}\n />\n <Spacing />\n {code`\n\n return internal_commandContext.run(__context, () => {\n return Promise.resolve(Reflect.apply(handle${pascalCase(\n command.name\n )}, __context, [options${\n command.arguments.length > 0\n ? `, ${command.arguments\n .map(argument => camelCase(argument.name))\n .join(\", \")}`\n : \"\"\n }]));\n });\n\n `}\n <hbr />\n </>\n );\n}\n\nexport interface CommandHandlerDeclarationProps {\n command: CommandTree;\n banner?: Children;\n children?: Children;\n}\n\n/**\n * A component that generates the `handler` function declaration for a command.\n */\nexport function CommandHandlerDeclaration(\n props: CommandHandlerDeclarationProps\n) {\n const { command, banner, children } = props;\n\n const context = usePowerlines<ScriptPresetContext>();\n\n return (\n <>\n <OptionsInterfaceDeclaration command={command} />\n <Spacing />\n <TSDoc\n heading={`The ${command.title} (${getAppBin(context)} ${command.segments\n .map(segment =>\n isDynamicPathSegment(segment)\n ? `[${constantCase(getDynamicPathSegmentName(segment))}]`\n : segment\n )\n .join(\" \")}) command.`}>\n <TSDocRemarks>{`${command.description.replace(/\\.+$/, \"\")}.`}</TSDocRemarks>\n <hbr />\n <TSDocTitle>{command.title}</TSDocTitle>\n <TSDocParam name=\"args\">{`The command-line arguments passed to the command.`}</TSDocParam>\n </TSDoc>\n <FunctionDeclaration\n export\n async\n name=\"handler\"\n parameters={[{ name: \"args\", type: \"string[]\", default: \"useArgs()\" }]}>\n <CommandParserLogic\n command={command}\n envPrefix={context.config.envPrefix}\n isCaseSensitive={context.config.isCaseSensitive}\n />\n <hbr />\n <hbr />\n <Show when={Boolean(banner)}>{banner}</Show>\n <hbr />\n <hbr />\n <IfStatement condition={<IsDebug />}>\n {code`writeLine(\"\");\n writeLine(colors.text.body.tertiary(\"Debug mode is enabled. Additional debug information may be logged to the console.\"));\n debug(\\`Command path: ${command.segments\n .map(segment =>\n isDynamicPathSegment(segment)\n ? `\\${${camelCase(getDynamicPathSegmentName(segment))}}`\n : segment\n )\n .join(\" / \")} \\\\n\\\\nOptions: \\\\n${Object.values(command.options)\n .map(\n option =>\n ` - ${kebabCase(option.name)}: \\${options.${camelCase(\n option.name\n )} === undefined ? \"\" : JSON.stringify(options.${camelCase(\n option.name\n )})}`\n )\n .join(\"\\\\n\")}${\n command.arguments.length > 0\n ? ` \\\\n\\\\nArguments: \\\\n${command.arguments\n .map(\n argument =>\n ` - ${kebabCase(argument.name)}: \\${${camelCase(\n argument.name\n )} === undefined ? \"\" : JSON.stringify(${camelCase(\n argument.name\n )})}`\n )\n .join(\"\\\\n\")}`\n : \"\"\n }\\`);\n writeLine(\"\"); `}\n </IfStatement>\n <hbr />\n <hbr />\n {children}\n <hbr />\n <hbr />\n <IfStatement condition={code`options.help`}>\n <CommandHelp command={command} />\n </IfStatement>\n <ElseClause>\n <hbr />\n <CommandInvocation command={command} />\n </ElseClause>\n </FunctionDeclaration>\n </>\n );\n}\n\nexport interface CommandValidationLogicProps {\n command: CommandTree;\n}\n\n/**\n * A component that generates command validation logic for required options and arguments.\n */\nexport function CommandValidationLogic(props: CommandValidationLogicProps) {\n const { command } = props;\n\n return (\n <>\n <VarDeclaration name=\"failures\" type=\"string[]\" initializer={code`[];`} />\n <hbr />\n <For each={Object.values(command.options ?? {})} doubleHardline>\n {option => (\n <>\n <Show when={!option.optional}>\n <IfStatement\n condition={code`!options${\n option.name.includes(\"?\")\n ? `[\"${option.name}\"]`\n : `.${camelCase(option.name)}`\n }`}>\n {code`failures.push(\"Missing required \\\\\"${option.name}\\\\\" option\");`}\n </IfStatement>\n <Show\n when={\n (option.kind === ReflectionKind.string ||\n option.kind === ReflectionKind.number) &&\n option.variadic\n }>\n <ElseIfClause\n condition={code`options${\n option.name.includes(\"?\")\n ? `[\"${option.name}\"]`\n : `.${camelCase(option.name)}`\n }.length === 0`}>\n {code`failures.push(\"No values were provided to the required \\\\\"${\n option.name\n }\\\\\" array option\");`}\n </ElseIfClause>\n </Show>\n </Show>\n <Show when={option.kind === ReflectionKind.number}>\n <Show\n when={(option as NumberCommandOption).variadic}\n fallback={\n <IfStatement\n condition={code`options${\n option.name.includes(\"?\")\n ? `[\"${option.name}\"]`\n : `.${camelCase(option.name)}`\n } && Number.isNaN(options${\n option.name.includes(\"?\")\n ? `[\"${option.name}\"]`\n : `.${camelCase(option.name)}`\n })`}>\n {code`failures.push(\"Invalid numeric value provided for the \\\\\"${\n option.name\n }\\\\\" option\");`}\n </IfStatement>\n }>\n <IfStatement\n condition={code`options${\n option.name.includes(\"?\")\n ? `[\"${option.name}\"]`\n : `.${camelCase(option.name)}`\n }.some(value => Number.isNaN(value))`}>\n {code`failures.push(\"Invalid numeric value provided in the \\\\\"${\n option.name\n }\\\\\" array option\");`}\n </IfStatement>\n </Show>\n </Show>\n </>\n )}\n </For>\n <Spacing />\n <For each={command.arguments} doubleHardline>\n {argument => (\n <>\n <Show when={!argument.optional}>\n <IfStatement condition={code`!${camelCase(argument.name)}`}>\n {code`failures.push(\"Missing required \\\\\"${\n argument.name\n }\\\\\" positional argument\");`}\n </IfStatement>\n <Show\n when={\n (argument.kind === ReflectionKind.string ||\n argument.kind === ReflectionKind.number) &&\n argument.variadic\n }>\n <ElseIfClause\n condition={code`${camelCase(argument.name)}.length === 0`}>\n {code`failures.push(\"No values were provided to the required \\\\\"${\n argument.name\n }\\\\\" array positional argument\");`}\n </ElseIfClause>\n </Show>\n </Show>\n <Show when={argument.kind === ReflectionKind.number}>\n <Show\n when={(argument as NumberCommandArgument).variadic}\n fallback={\n <IfStatement\n condition={code`${camelCase(\n argument.name\n )} && Number.isNaN(${camelCase(argument.name)})`}>\n {code`failures.push(\"Invalid numeric value provided for the \\\\\"${\n argument.name\n }\\\\\" positional argument\");`}\n </IfStatement>\n }>\n <IfStatement\n condition={code`${camelCase(argument.name)}.some(value => Number.isNaN(value))`}>\n {code`failures.push(\"Invalid numeric value provided in the \\\\\"${\n argument.name\n }\\\\\" array positional argument\");`}\n </IfStatement>\n </Show>\n </Show>\n </>\n )}\n </For>\n <IfStatement condition={code`failures.length > 0`}>\n {code`error(\"The following validation failures were found while processing the user provided input, and must be corrected before the command line process can be executed: \\\\n\\\\n\" + failures.map(failure => \" - \" + failure).join(\"\\\\n\"));\n options.help = true; `}\n </IfStatement>\n </>\n );\n}\n\nexport interface CommandEntryProps extends Omit<\n EntryFileProps,\n \"path\" | \"typeDefinition\"\n> {\n command: CommandTree;\n}\n\n/**\n * The command entry point for the Shell Shock project.\n */\nexport function CommandEntry(props: CommandEntryProps) {\n const { command, imports, builtinImports, ...rest } = props;\n\n const context = usePowerlines<ScriptPresetContext>();\n const filePath = computed(() =>\n joinPaths(\n command.segments\n .filter(segment => !isDynamicPathSegment(segment))\n .join(\"/\"),\n \"index.ts\"\n )\n );\n const commandSourcePath = computed(() =>\n replaceExtension(\n relativePath(\n joinPaths(context.entryPath, findFilePath(filePath.value)),\n command.entry.input?.file || command.entry.file\n )\n )\n );\n const typeDefinition = computed(() => ({\n ...command.entry,\n output: command.id\n }));\n\n return (\n <>\n <EntryFile\n {...rest}\n path={filePath.value}\n typeDefinition={typeDefinition.value}\n imports={defu(imports ?? {}, {\n [commandSourcePath.value]: `handle${pascalCase(command.name)}`\n })}\n builtinImports={defu(builtinImports ?? {}, {\n env: [\"env\", \"isDevelopment\", \"isDebug\"],\n console: [\n \"debug\",\n \"warn\",\n \"error\",\n \"table\",\n \"colors\",\n \"stripAnsi\",\n \"writeLine\",\n \"splitText\"\n ],\n utils: [\n \"useArgs\",\n \"hasFlag\",\n \"isMinimal\",\n \"isUnicodeSupported\",\n \"internal_commandContext\"\n ]\n })}>\n <BannerFunctionDeclaration command={command} />\n <hbr />\n <hbr />\n <OptionsInterfaceDeclaration command={command} />\n <hbr />\n <hbr />\n <CommandHandlerDeclaration command={command} banner={code`banner(); `}>\n <CommandValidationLogic command={command} />\n </CommandHandlerDeclaration>\n </EntryFile>\n <For each={Object.values(command.children)}>\n {child => (\n <Show\n when={child.isVirtual}\n fallback={<CommandEntry command={child} />}>\n <VirtualCommandEntry command={child} />\n </Show>\n )}\n </For>\n </>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"command-entry.mjs","names":["code","computed","For","Show","ElseClause","ElseIfClause","FunctionDeclaration","IfStatement","VarDeclaration","ReflectionKind","Spacing","usePowerlines","EntryFile","TSDoc","TSDocParam","TSDocRemarks","TSDocTitle","CommandParserLogic","OptionsInterfaceDeclaration","getAppBin","getDynamicPathSegmentName","isDynamicPathSegment","findFilePath","relativePath","joinPaths","replaceExtension","camelCase","constantCase","kebabCase","pascalCase","defu","BannerFunctionDeclaration","CommandHelp","IsDebug","VirtualCommandEntry","CommandInvocation","props","command","_$createComponent","name","initializer","segments","map","segment","join","_$memo","arguments","length","argument","_$createIntrinsic","CommandHandlerDeclaration","banner","children","context","heading","title","description","replace","async","parameters","type","default","envPrefix","config","isCaseSensitive","when","Boolean","condition","Object","values","options","option","CommandValidationLogic","each","doubleHardline","optional","includes","kind","string","number","variadic","fallback","CommandEntry","imports","builtinImports","rest","filePath","filter","commandSourcePath","entryPath","value","entry","input","file","typeDefinition","output","id","_$mergeProps","path","env","console","utils","child","isVirtual"],"sources":["../../src/components/command-entry.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 ElseClause,\n ElseIfClause,\n FunctionDeclaration,\n IfStatement,\n VarDeclaration\n} from \"@alloy-js/typescript\";\nimport { ReflectionKind } from \"@powerlines/deepkit/vendor/type\";\nimport { Spacing } from \"@powerlines/plugin-alloy/core/components/spacing\";\nimport { usePowerlines } from \"@powerlines/plugin-alloy/core/contexts/context\";\nimport type { EntryFileProps } from \"@powerlines/plugin-alloy/typescript/components/entry-file\";\nimport { EntryFile } from \"@powerlines/plugin-alloy/typescript/components/entry-file\";\nimport {\n TSDoc,\n TSDocParam,\n TSDocRemarks,\n TSDocTitle\n} from \"@powerlines/plugin-alloy/typescript/components/tsdoc\";\nimport {\n CommandParserLogic,\n OptionsInterfaceDeclaration\n} from \"@shell-shock/core/components/options-parser-logic\";\nimport {\n getAppBin,\n getDynamicPathSegmentName,\n isDynamicPathSegment\n} from \"@shell-shock/core/plugin-utils/context-helpers\";\nimport type {\n CommandTree,\n NumberCommandArgument,\n NumberCommandOption\n} from \"@shell-shock/core/types/command\";\nimport { findFilePath, relativePath } from \"@stryke/path/find\";\nimport { joinPaths } from \"@stryke/path/join\";\nimport { replaceExtension } from \"@stryke/path/replace\";\nimport { camelCase } from \"@stryke/string-format/camel-case\";\nimport { constantCase } from \"@stryke/string-format/constant-case\";\nimport { kebabCase } from \"@stryke/string-format/kebab-case\";\nimport { pascalCase } from \"@stryke/string-format/pascal-case\";\nimport defu from \"defu\";\nimport type { ScriptPresetContext } from \"../types/plugin\";\nimport { BannerFunctionDeclaration } from \"./banner-function-declaration\";\nimport { CommandHelp } from \"./help\";\nimport { IsDebug } from \"./helpers\";\nimport { VirtualCommandEntry } from \"./virtual-command-entry\";\n\nexport function CommandInvocation(props: { command: CommandTree }) {\n const { command } = props;\n\n return (\n <>\n <VarDeclaration\n name=\"__context\"\n initializer={code`{ path: \\`${command.segments\n .map(segment =>\n isDynamicPathSegment(segment)\n ? `\\${${camelCase(getDynamicPathSegmentName(segment))}}`\n : segment\n )\n .join(\"/\")}\\`, segments: [${command.segments\n .map(segment =>\n isDynamicPathSegment(segment)\n ? camelCase(getDynamicPathSegmentName(segment))\n : `\"${segment}\"`\n )\n .join(\", \")}] }`}\n />\n <Spacing />\n {code`\n\n return internal_commandContext.run(__context, () => {\n return Promise.resolve(Reflect.apply(handle${pascalCase(\n command.name\n )}, __context, [options${\n command.arguments.length > 0\n ? `, ${command.arguments\n .map(argument => camelCase(argument.name))\n .join(\", \")}`\n : \"\"\n }]));\n });\n\n `}\n <hbr />\n </>\n );\n}\n\nexport interface CommandHandlerDeclarationProps {\n command: CommandTree;\n banner?: Children;\n children?: Children;\n}\n\n/**\n * A component that generates the `handler` function declaration for a command.\n */\nexport function CommandHandlerDeclaration(\n props: CommandHandlerDeclarationProps\n) {\n const { command, banner, children } = props;\n\n const context = usePowerlines<ScriptPresetContext>();\n\n return (\n <>\n <OptionsInterfaceDeclaration command={command} />\n <Spacing />\n <TSDoc\n heading={`The ${command.title} (${getAppBin(context)} ${command.segments\n .map(segment =>\n isDynamicPathSegment(segment)\n ? `[${constantCase(getDynamicPathSegmentName(segment))}]`\n : segment\n )\n .join(\" \")}) command.`}>\n <TSDocRemarks>{`${command.description.replace(/\\.+$/, \"\")}.`}</TSDocRemarks>\n <hbr />\n <TSDocTitle>{command.title}</TSDocTitle>\n <TSDocParam name=\"args\">{`The command-line arguments passed to the command.`}</TSDocParam>\n </TSDoc>\n <FunctionDeclaration\n export\n async\n name=\"handler\"\n parameters={[{ name: \"args\", type: \"string[]\", default: \"useArgs()\" }]}>\n <CommandParserLogic\n command={command}\n envPrefix={context.config.envPrefix}\n isCaseSensitive={context.config.isCaseSensitive}\n />\n <hbr />\n <hbr />\n <Show when={Boolean(banner)}>{banner}</Show>\n <hbr />\n <hbr />\n <IfStatement condition={<IsDebug />}>\n {code`writeLine(\"\");\n writeLine(colors.text.body.tertiary(\"Debug mode is enabled. Additional debug information may be logged to the console.\"));\n debug(\\`Command path: ${command.segments\n .map(segment =>\n isDynamicPathSegment(segment)\n ? `\\${${camelCase(getDynamicPathSegmentName(segment))}}`\n : segment\n )\n .join(\" / \")} \\\\n\\\\nOptions: \\\\n${Object.values(command.options)\n .map(\n option =>\n ` - ${kebabCase(option.name)}: \\${options.${camelCase(\n option.name\n )} === undefined ? \"\" : JSON.stringify(options.${camelCase(\n option.name\n )})}`\n )\n .join(\"\\\\n\")}${\n command.arguments.length > 0\n ? ` \\\\n\\\\nArguments: \\\\n${command.arguments\n .map(\n argument =>\n ` - ${kebabCase(argument.name)}: \\${${camelCase(\n argument.name\n )} === undefined ? \"\" : JSON.stringify(${camelCase(\n argument.name\n )})}`\n )\n .join(\"\\\\n\")}`\n : \"\"\n }\\`);\n writeLine(\"\"); `}\n </IfStatement>\n <hbr />\n <hbr />\n {children}\n <hbr />\n <hbr />\n <IfStatement condition={code`options.help`}>\n <CommandHelp command={command} />\n </IfStatement>\n <ElseClause>\n <hbr />\n <CommandInvocation command={command} />\n </ElseClause>\n </FunctionDeclaration>\n </>\n );\n}\n\nexport interface CommandValidationLogicProps {\n command: CommandTree;\n}\n\n/**\n * A component that generates command validation logic for required options and arguments.\n */\nexport function CommandValidationLogic(props: CommandValidationLogicProps) {\n const { command } = props;\n\n return (\n <>\n <VarDeclaration name=\"failures\" type=\"string[]\" initializer={code`[];`} />\n <hbr />\n <For each={Object.values(command.options ?? {})} doubleHardline>\n {option => (\n <>\n <Show when={!option.optional}>\n <IfStatement\n condition={code`!options${\n option.name.includes(\"?\")\n ? `[\"${option.name}\"]`\n : `.${camelCase(option.name)}`\n }`}>\n {code`failures.push(\"Missing required \\\\\"${option.name}\\\\\" option\");`}\n </IfStatement>\n <Show\n when={\n (option.kind === ReflectionKind.string ||\n option.kind === ReflectionKind.number) &&\n option.variadic\n }>\n <ElseIfClause\n condition={code`options${\n option.name.includes(\"?\")\n ? `[\"${option.name}\"]`\n : `.${camelCase(option.name)}`\n }.length === 0`}>\n {code`failures.push(\"No values were provided to the required \\\\\"${\n option.name\n }\\\\\" array option\");`}\n </ElseIfClause>\n </Show>\n </Show>\n <Show when={option.kind === ReflectionKind.number}>\n <Show\n when={(option as NumberCommandOption).variadic}\n fallback={\n <IfStatement\n condition={code`options${\n option.name.includes(\"?\")\n ? `[\"${option.name}\"]`\n : `.${camelCase(option.name)}`\n } && Number.isNaN(options${\n option.name.includes(\"?\")\n ? `[\"${option.name}\"]`\n : `.${camelCase(option.name)}`\n })`}>\n {code`failures.push(\"Invalid numeric value provided for the \\\\\"${\n option.name\n }\\\\\" option\");`}\n </IfStatement>\n }>\n <IfStatement\n condition={code`options${\n option.name.includes(\"?\")\n ? `[\"${option.name}\"]`\n : `.${camelCase(option.name)}`\n }.some(value => Number.isNaN(value))`}>\n {code`failures.push(\"Invalid numeric value provided in the \\\\\"${\n option.name\n }\\\\\" array option\");`}\n </IfStatement>\n </Show>\n </Show>\n </>\n )}\n </For>\n <Spacing />\n <For each={command.arguments} doubleHardline>\n {argument => (\n <>\n <Show when={!argument.optional}>\n <IfStatement condition={code`!${camelCase(argument.name)}`}>\n {code`failures.push(\"Missing required \\\\\"${\n argument.name\n }\\\\\" positional argument\");`}\n </IfStatement>\n <Show\n when={\n (argument.kind === ReflectionKind.string ||\n argument.kind === ReflectionKind.number) &&\n argument.variadic\n }>\n <ElseIfClause\n condition={code`${camelCase(argument.name)}.length === 0`}>\n {code`failures.push(\"No values were provided to the required \\\\\"${\n argument.name\n }\\\\\" array positional argument\");`}\n </ElseIfClause>\n </Show>\n </Show>\n <Show when={argument.kind === ReflectionKind.number}>\n <Show\n when={(argument as NumberCommandArgument).variadic}\n fallback={\n <IfStatement\n condition={code`${camelCase(\n argument.name\n )} && Number.isNaN(${camelCase(argument.name)})`}>\n {code`failures.push(\"Invalid numeric value provided for the \\\\\"${\n argument.name\n }\\\\\" positional argument\");`}\n </IfStatement>\n }>\n <IfStatement\n condition={code`${camelCase(argument.name)}.some(value => Number.isNaN(value))`}>\n {code`failures.push(\"Invalid numeric value provided in the \\\\\"${\n argument.name\n }\\\\\" array positional argument\");`}\n </IfStatement>\n </Show>\n </Show>\n </>\n )}\n </For>\n <IfStatement condition={code`failures.length > 0`}>\n {code`error(\"The following validation failures were found while processing the user provided input, and must be corrected before the command-line process can be executed: \\\\n\\\\n\" + failures.map(failure => \" - \" + failure).join(\"\\\\n\"));\n options.help = true; `}\n </IfStatement>\n </>\n );\n}\n\nexport interface CommandEntryProps extends Omit<\n EntryFileProps,\n \"path\" | \"typeDefinition\"\n> {\n command: CommandTree;\n}\n\n/**\n * The command entry point for the Shell Shock project.\n */\nexport function CommandEntry(props: CommandEntryProps) {\n const { command, imports, builtinImports, ...rest } = props;\n\n const context = usePowerlines<ScriptPresetContext>();\n const filePath = computed(() =>\n joinPaths(\n command.segments\n .filter(segment => !isDynamicPathSegment(segment))\n .join(\"/\"),\n \"index.ts\"\n )\n );\n const commandSourcePath = computed(() =>\n replaceExtension(\n relativePath(\n joinPaths(context.entryPath, findFilePath(filePath.value)),\n command.entry.input?.file || command.entry.file\n )\n )\n );\n const typeDefinition = computed(() => ({\n ...command.entry,\n output: command.id\n }));\n\n return (\n <>\n <EntryFile\n {...rest}\n path={filePath.value}\n typeDefinition={typeDefinition.value}\n imports={defu(imports ?? {}, {\n [commandSourcePath.value]: `handle${pascalCase(command.name)}`\n })}\n builtinImports={defu(builtinImports ?? {}, {\n env: [\"env\", \"isDevelopment\", \"isDebug\"],\n console: [\n \"debug\",\n \"warn\",\n \"error\",\n \"table\",\n \"colors\",\n \"stripAnsi\",\n \"writeLine\",\n \"splitText\"\n ],\n utils: [\n \"useArgs\",\n \"hasFlag\",\n \"isMinimal\",\n \"isUnicodeSupported\",\n \"internal_commandContext\"\n ]\n })}>\n <BannerFunctionDeclaration command={command} />\n <hbr />\n <hbr />\n <OptionsInterfaceDeclaration command={command} />\n <hbr />\n <hbr />\n <CommandHandlerDeclaration command={command} banner={code`banner(); `}>\n <CommandValidationLogic command={command} />\n </CommandHandlerDeclaration>\n </EntryFile>\n <For each={Object.values(command.children)}>\n {child => (\n <Show\n when={child.isVirtual}\n fallback={<CommandEntry command={child} />}>\n <VirtualCommandEntry command={child} />\n </Show>\n )}\n </For>\n </>\n );\n}\n"],"mappings":"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"}
@@ -1117,6 +1117,17 @@ function ColorsDeclaration() {
1117
1117
  get ansi16m() {
1118
1118
  return colors.ansi16m.theme.text.prompt.input.disabled;
1119
1119
  }
1120
+ })},
1121
+ placeholder: ${(0, __alloy_js_core_jsx_runtime.createComponent)(ColorFunction, {
1122
+ get ansi16() {
1123
+ return colors.ansi16.theme.text.prompt.input.placeholder;
1124
+ },
1125
+ get ansi256() {
1126
+ return colors.ansi256.theme.text.prompt.input.placeholder;
1127
+ },
1128
+ get ansi16m() {
1129
+ return colors.ansi16m.theme.text.prompt.input.placeholder;
1130
+ }
1120
1131
  })}
1121
1132
  },
1122
1133
  description: {
@@ -2912,14 +2923,19 @@ function ConsoleBuiltin(props) {
2912
2923
  (0, __alloy_js_core_jsx_runtime.createComponent)(__powerlines_plugin_alloy_core_components_spacing.Spacing, {}),
2913
2924
  (0, __alloy_js_core_jsx_runtime.createComponent)(__alloy_js_typescript.IfStatement, {
2914
2925
  condition: __alloy_js_core.code`(err as Error)?.message`,
2926
+ children: __alloy_js_core.code`message = (err as Error).message;`
2927
+ }),
2928
+ (0, __alloy_js_core_jsx_runtime.createComponent)(__alloy_js_typescript.ElseClause, { children: __alloy_js_core.code`message = String(err);` }),
2929
+ (0, __alloy_js_core_jsx_runtime.createComponent)(__powerlines_plugin_alloy_core_components_spacing.Spacing, {}),
2930
+ (0, __alloy_js_core_jsx_runtime.createComponent)(__alloy_js_typescript.IfStatement, {
2931
+ condition: __alloy_js_core.code`env.STACKTRACE`,
2915
2932
  get children() {
2916
- return [__alloy_js_core.code`message = (err as Error).message;`, (0, __alloy_js_core_jsx_runtime.createComponent)(__alloy_js_typescript.IfStatement, {
2917
- condition: __alloy_js_core.code`env.STACKTRACE && (err as Error)?.stack`,
2933
+ return [(0, __alloy_js_core_jsx_runtime.createComponent)(__alloy_js_typescript.IfStatement, {
2934
+ condition: __alloy_js_core.code`(err as Error)?.stack`,
2918
2935
  children: __alloy_js_core.code`message += " \\n\\n" + (err as Error).stack;`
2919
- })];
2936
+ }), (0, __alloy_js_core_jsx_runtime.createComponent)(__alloy_js_typescript.ElseClause, { children: __alloy_js_core.code`message += " \\n\\n" + (new Error(" ")).stack.split("\\n").slice(2).map(line => line.trim()).join("\\n");` })];
2920
2937
  }
2921
- }),
2922
- (0, __alloy_js_core_jsx_runtime.createComponent)(__alloy_js_typescript.ElseClause, { children: __alloy_js_core.code`message = String(err);` })
2938
+ })
2923
2939
  ];
2924
2940
  }
2925
2941
  }),