@shell-shock/preset-script 0.3.3 → 0.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (60) hide show
  1. package/README.md +1 -1
  2. package/dist/components/banner-function-declaration.cjs +53 -20
  3. package/dist/components/banner-function-declaration.cjs.map +1 -1
  4. package/dist/components/banner-function-declaration.d.cts +20 -4
  5. package/dist/components/banner-function-declaration.d.cts.map +1 -1
  6. package/dist/components/banner-function-declaration.d.mts +20 -4
  7. package/dist/components/banner-function-declaration.d.mts.map +1 -1
  8. package/dist/components/banner-function-declaration.mjs +54 -22
  9. package/dist/components/banner-function-declaration.mjs.map +1 -1
  10. package/dist/components/bin-entry.cjs +12 -2
  11. package/dist/components/bin-entry.cjs.map +1 -1
  12. package/dist/components/bin-entry.d.cts.map +1 -1
  13. package/dist/components/bin-entry.d.mts.map +1 -1
  14. package/dist/components/bin-entry.mjs +12 -2
  15. package/dist/components/bin-entry.mjs.map +1 -1
  16. package/dist/components/command-entry.cjs +22 -16
  17. package/dist/components/command-entry.cjs.map +1 -1
  18. package/dist/components/command-entry.d.cts +10 -8
  19. package/dist/components/command-entry.d.cts.map +1 -1
  20. package/dist/components/command-entry.d.mts +9 -7
  21. package/dist/components/command-entry.d.mts.map +1 -1
  22. package/dist/components/command-entry.mjs +25 -19
  23. package/dist/components/command-entry.mjs.map +1 -1
  24. package/dist/components/command-router.cjs +2 -2
  25. package/dist/components/command-router.cjs.map +1 -1
  26. package/dist/components/command-router.mjs +3 -3
  27. package/dist/components/command-router.mjs.map +1 -1
  28. package/dist/components/help.cjs +70 -13
  29. package/dist/components/help.cjs.map +1 -1
  30. package/dist/components/help.d.cts +36 -10
  31. package/dist/components/help.d.cts.map +1 -1
  32. package/dist/components/help.d.mts +36 -10
  33. package/dist/components/help.d.mts.map +1 -1
  34. package/dist/components/help.mjs +68 -12
  35. package/dist/components/help.mjs.map +1 -1
  36. package/dist/components/index.cjs +4 -2
  37. package/dist/components/index.d.cts +5 -5
  38. package/dist/components/index.d.mts +5 -5
  39. package/dist/components/index.mjs +3 -3
  40. package/dist/components/utils-builtin.cjs +8 -1
  41. package/dist/components/utils-builtin.cjs.map +1 -1
  42. package/dist/components/utils-builtin.d.cts.map +1 -1
  43. package/dist/components/utils-builtin.d.mts.map +1 -1
  44. package/dist/components/utils-builtin.mjs +8 -1
  45. package/dist/components/utils-builtin.mjs.map +1 -1
  46. package/dist/components/virtual-command-entry.cjs +32 -12
  47. package/dist/components/virtual-command-entry.cjs.map +1 -1
  48. package/dist/components/virtual-command-entry.d.cts +9 -7
  49. package/dist/components/virtual-command-entry.d.cts.map +1 -1
  50. package/dist/components/virtual-command-entry.d.mts +8 -6
  51. package/dist/components/virtual-command-entry.d.mts.map +1 -1
  52. package/dist/components/virtual-command-entry.mjs +34 -14
  53. package/dist/components/virtual-command-entry.mjs.map +1 -1
  54. package/dist/index.cjs +6 -1
  55. package/dist/index.cjs.map +1 -1
  56. package/dist/index.d.cts.map +1 -1
  57. package/dist/index.d.mts.map +1 -1
  58. package/dist/index.mjs +7 -2
  59. package/dist/index.mjs.map +1 -1
  60. package/package.json +7 -7
package/README.md CHANGED
@@ -27,7 +27,7 @@ This package is part of the ⚡<b>Shell Shock</b> monorepo. The Shell Shock pack
27
27
 
28
28
  <h3 align="center">💻 Visit <a href="https://stormsoftware.com" target="_blank">stormsoftware.com</a> to stay up to date with this developer</h3><br />
29
29
 
30
- [![Version](https://img.shields.io/badge/version-0.3.0-1fb2a6.svg?style=for-the-badge&color=1fb2a6)](https://stormsoftware.com/projects/shell-shock/)&nbsp;[![Commitizen friendly](https://img.shields.io/badge/commitizen-friendly-brightgreen.svg?style=for-the-badge&logo=commitlint&color=1fb2a6)](http://commitizen.github.io/cz-cli/)&nbsp;![Semantic-Release](https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg?style=for-the-badge&color=1fb2a6)&nbsp;![GitHub Workflow Status (with event)](https://img.shields.io/github/actions/workflow/status/storm-software/shell-shock/release.yml?style=for-the-badge&logo=github-actions&color=1fb2a6)
30
+ [![Version](https://img.shields.io/badge/version-0.3.3-1fb2a6.svg?style=for-the-badge&color=1fb2a6)](https://stormsoftware.com/projects/shell-shock/)&nbsp;[![Commitizen friendly](https://img.shields.io/badge/commitizen-friendly-brightgreen.svg?style=for-the-badge&logo=commitlint&color=1fb2a6)](http://commitizen.github.io/cz-cli/)&nbsp;![Semantic-Release](https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg?style=for-the-badge&color=1fb2a6)&nbsp;![GitHub Workflow Status (with event)](https://img.shields.io/github/actions/workflow/status/storm-software/shell-shock/release.yml?style=for-the-badge&logo=github-actions&color=1fb2a6)
31
31
 
32
32
  <!-- prettier-ignore-start -->
33
33
  <!-- markdownlint-disable -->
@@ -5,7 +5,6 @@ let __alloy_js_core_jsx_runtime = require("@alloy-js/core/jsx-runtime");
5
5
  let __alloy_js_core = require("@alloy-js/core");
6
6
  let __alloy_js_typescript = require("@alloy-js/typescript");
7
7
  let __powerlines_plugin_alloy_core_contexts_context = require("@powerlines/plugin-alloy/core/contexts/context");
8
- let __shell_shock_core_contexts_command = require("@shell-shock/core/contexts/command");
9
8
  let __shell_shock_core_plugin_utils_context_helpers = require("@shell-shock/core/plugin-utils/context-helpers");
10
9
 
11
10
  //#region src/components/banner-function-declaration.tsx
@@ -16,53 +15,87 @@ let __shell_shock_core_plugin_utils_context_helpers = require("@shell-shock/core
16
15
  * 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.
17
16
  */
18
17
  function BannerFunctionDeclaration(props) {
19
- const { consoleFnName = "log", variant = "primary", title: titleProp } = props;
18
+ const { consoleFnName = "log", variant = "primary", command, children } = props;
20
19
  const theme = require_contexts_theme.useTheme();
21
20
  const context = (0, __powerlines_plugin_alloy_core_contexts_context.usePowerlines)();
22
- const command = (0, __shell_shock_core_contexts_command.useCommand)();
23
21
  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"}`);
24
22
  const description = (0, __alloy_js_core.computed)(() => command?.description || (0, __shell_shock_core_plugin_utils_context_helpers.getAppDescription)(context));
25
23
  const footer = (0, __alloy_js_core.computed)(() => theme.labels.banner.footer[variant]);
26
- const title = (0, __alloy_js_core.computed)(() => titleProp || /(?: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`);
27
- const bannerPadding = (0, __alloy_js_core.computed)(() => Math.max(theme.padding.app, 0) * 2 + theme.borderStyles.banner.outline[variant].left.length + theme.borderStyles.banner.outline[variant].right.length);
28
- const totalPadding = (0, __alloy_js_core.computed)(() => Math.max(theme.padding.banner, 0) * 2 + bannerPadding.value);
24
+ 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`);
29
25
  return [(0, __alloy_js_core_jsx_runtime.createComponent)(__alloy_js_typescript.FunctionDeclaration, {
30
26
  name: "banner",
31
27
  get doc() {
32
28
  return `Write the ${(0, __shell_shock_core_plugin_utils_context_helpers.getAppTitle)(context)} application banner ${command ? `for the ${command.title} command ` : ""}to the console.`;
33
29
  },
34
30
  get children() {
35
- return __alloy_js_core.code`
31
+ return (0, __alloy_js_core_jsx_runtime.createComponent)(BannerFunctionBodyDeclaration, {
32
+ get title() {
33
+ return title.value;
34
+ },
35
+ get header() {
36
+ return header.value;
37
+ },
38
+ get description() {
39
+ return description.value;
40
+ },
41
+ get footer() {
42
+ return footer.value;
43
+ },
44
+ variant,
45
+ consoleFnName,
46
+ command,
47
+ insertNewlineBeforeCommand: true,
48
+ children
49
+ });
50
+ }
51
+ })];
52
+ }
53
+ /**
54
+ * A component to generate the `banner` function's body for a specific command or application.
55
+ *
56
+ * @remarks
57
+ * 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.
58
+ */
59
+ function BannerFunctionBodyDeclaration(props) {
60
+ const { consoleFnName = "log", variant = "primary", title, header, footer, description, command, children, insertNewlineBeforeCommand = false } = props;
61
+ const theme = require_contexts_theme.useTheme();
62
+ const bannerPadding = (0, __alloy_js_core.computed)(() => Math.max(theme.padding.app, 0) * 2 + theme.borderStyles.banner.outline[variant].left.length + theme.borderStyles.banner.outline[variant].right.length);
63
+ const totalPadding = (0, __alloy_js_core.computed)(() => Math.max(theme.padding.banner, 0) * 2 + bannerPadding.value);
64
+ return [
65
+ __alloy_js_core.code`
36
66
  if (hasFlag("no-banner") || hasFlag("hide-banner") || isCI || isMinimal) {
37
67
  return;
38
- }
39
-
40
- writeLine(colors.border.banner.outline.${variant}("${theme.borderStyles.banner.outline[variant].topLeft}") + ${theme.icons.banner.header[variant] ? `colors.border.banner.outline.${variant}("${theme.borderStyles.banner.outline[variant].top}".repeat(4)) + " " + ${theme.icons.banner.header[variant] ? `colors.text.banner.header.${variant}("${theme.icons.banner.header[variant]}") + " " + colors.border.banner.outline.${variant}("${theme.borderStyles.banner.outline[variant].top}") + " " +` : ""} colors.bold(colors.text.banner.header.${variant}("${header.value}")) + " " + colors.border.banner.outline.${variant}("${theme.borderStyles.banner.outline[variant].top}".repeat(Math.max(process.stdout.columns - ${4 + (theme.icons.banner.header[variant] ? theme.icons.banner.header[variant].length + 3 : 0) + (header.value ? header.value.length + 2 : 0) + bannerPadding.value}, 0)))` : `colors.border.banner.outline.${variant}("${theme.borderStyles.banner.outline[variant].top}".repeat(Math.max(process.stdout.columns - ${bannerPadding.value}, 0)))`} + colors.border.banner.outline.${variant}("${theme.borderStyles.banner.outline[variant].topRight}"), { consoleFn: console.${consoleFnName} });
68
+ } `,
69
+ (0, __alloy_js_core_jsx_runtime.createIntrinsic)("hbr", {}),
70
+ (0, __alloy_js_core_jsx_runtime.createIntrinsic)("hbr", {}),
71
+ children,
72
+ (0, __alloy_js_core_jsx_runtime.createIntrinsic)("hbr", {}),
73
+ (0, __alloy_js_core_jsx_runtime.createIntrinsic)("hbr", {}),
74
+ (0, __alloy_js_core_jsx_runtime.memo)(() => __alloy_js_core.code`writeLine(colors.border.banner.outline.${variant}("${theme.borderStyles.banner.outline[variant].topLeft}") + ${theme.icons.banner.header[variant] ? `colors.border.banner.outline.${variant}("${theme.borderStyles.banner.outline[variant].top}".repeat(6)) + " " + ${theme.icons.banner.header[variant] ? `colors.text.banner.header.${variant}("${theme.icons.banner.header[variant]}") + " " + colors.border.banner.outline.${variant}("${theme.borderStyles.banner.outline[variant].top}") + " " +` : ""} colors.bold(colors.text.banner.header.${variant}("${header}")) + " " + colors.border.banner.outline.${variant}("${theme.borderStyles.banner.outline[variant].top}".repeat(Math.max(process.stdout.columns - ${6 + (theme.icons.banner.header[variant] ? theme.icons.banner.header[variant].length + 3 : 0) + (header ? header.length + 2 : 0) + bannerPadding.value}, 0)))` : `colors.border.banner.outline.${variant}("${theme.borderStyles.banner.outline[variant].top}".repeat(Math.max(process.stdout.columns - ${bannerPadding.value}, 0)))`} + colors.border.banner.outline.${variant}("${theme.borderStyles.banner.outline[variant].topRight}"), { consoleFn: console.${consoleFnName} });
41
75
 
42
76
  splitText(
43
- colors.bold(colors.text.banner.title.${variant}("${title.value}")),
77
+ ${title ? `"${title}"` : "title"},
44
78
  Math.max(process.stdout.columns - ${totalPadding.value}, 0)
45
79
  ).forEach((line) => {
46
- writeLine(colors.border.banner.outline.${variant}("${theme.borderStyles.banner.outline[variant].left}") + " ".repeat(Math.max(Math.floor((process.stdout.columns - (stripAnsi(line).length + ${bannerPadding.value})) / 2), 0)) + colors.text.banner.description.${variant}(line) + " ".repeat(Math.max(Math.ceil((process.stdout.columns - (stripAnsi(line).length + ${bannerPadding.value})) / 2), 0)) + colors.border.banner.outline.${variant}("${theme.borderStyles.banner.outline[variant].right}"), { consoleFn: console.${consoleFnName} });
80
+ writeLine(colors.border.banner.outline.${variant}("${theme.borderStyles.banner.outline[variant].left}") + " ".repeat(Math.max(Math.floor((process.stdout.columns - (stripAnsi(line).length + ${bannerPadding.value})) / 2), 0)) + colors.bold(colors.text.banner.title.${variant}(line)) + " ".repeat(Math.max(Math.ceil((process.stdout.columns - (stripAnsi(line).length + ${bannerPadding.value})) / 2), 0)) + colors.border.banner.outline.${variant}("${theme.borderStyles.banner.outline[variant].right}"), { consoleFn: console.${consoleFnName} });
47
81
  });
48
82
 
49
- ${command?.title ? `writeLine(colors.border.banner.outline.${variant}("${theme.borderStyles.banner.outline[variant].bottomLeft}") + " ".repeat(Math.max(process.stdout.columns - ${bannerPadding.value})) + colors.border.banner.outline.${variant}("${theme.borderStyles.banner.outline[variant].bottomRight}"), { consoleFn: console.${consoleFnName} });
50
-
51
- writeLine(colors.border.banner.outline.${variant}("${theme.borderStyles.banner.outline[variant].left}") + " ".repeat(Math.max(Math.floor((process.stdout.columns - (stripAnsi(line).length + ${bannerPadding.value})) / 2), 0)) + colors.bold(colors.text.banner.command.${variant}("${command.title}")) + " ".repeat(Math.max(Math.ceil((process.stdout.columns - (stripAnsi(line).length + ${bannerPadding.value})) / 2), 0)) + colors.border.banner.outline.${variant}("${theme.borderStyles.banner.outline[variant].right}"), { consoleFn: console.${consoleFnName} }); ` : ""}
83
+ ${command?.title ? `${insertNewlineBeforeCommand ? `writeLine(colors.border.banner.outline.${variant}("${theme.borderStyles.banner.outline[variant].left}") + " ".repeat(Math.max(process.stdout.columns - ${bannerPadding.value})) + colors.border.banner.outline.${variant}("${theme.borderStyles.banner.outline[variant].right}"), { consoleFn: console.${consoleFnName} }); ` : ""}
84
+ ${`writeLine(colors.border.banner.outline.${variant}("${theme.borderStyles.banner.outline[variant].left}") + " ".repeat(Math.max(Math.floor((process.stdout.columns - (stripAnsi("${command.title}").length + ${bannerPadding.value})) / 2), 0)) + colors.bold(colors.text.banner.command.${variant}("${command.title}")) + " ".repeat(Math.max(Math.ceil((process.stdout.columns - (stripAnsi("${command.title}").length + ${bannerPadding.value})) / 2), 0)) + colors.border.banner.outline.${variant}("${theme.borderStyles.banner.outline[variant].right}"), { consoleFn: console.${consoleFnName} }); `} ` : ""}
52
85
 
53
86
  splitText(
54
- colors.bold(${command?.title ? "colors.text.banner.description" : "colors.text.banner.command"}.${variant}("${description.value.replace(/"/g, "\\\"")}")),
87
+ colors.bold(${command?.title ? "colors.text.banner.description" : "colors.text.banner.command"}.${variant}("${description.replace(/"/g, "\\\"")}")),
55
88
  Math.max(process.stdout.columns - ${totalPadding.value}, 0)
56
89
  ).forEach((line) => {
57
90
  writeLine(colors.border.banner.outline.${variant}("${theme.borderStyles.banner.outline[variant].left}") + " ".repeat(Math.max(Math.floor((process.stdout.columns - (stripAnsi(line).length + ${bannerPadding.value})) / 2), 0)) + colors.text.banner.description.${variant}(line) + " ".repeat(Math.max(Math.ceil((process.stdout.columns - (stripAnsi(line).length + ${bannerPadding.value})) / 2), 0)) + colors.border.banner.outline.${variant}("${theme.borderStyles.banner.outline[variant].right}"), { consoleFn: console.${consoleFnName} });
58
91
  });
59
92
 
60
- writeLine(colors.border.banner.outline.${variant}("${theme.borderStyles.banner.outline[variant].bottomLeft}") + ${footer.value ? `colors.border.banner.outline.${variant}("${theme.borderStyles.banner.outline[variant].bottom}".repeat(Math.max(process.stdout.columns - ${6 + (footer.value ? footer.value.length : 0) + bannerPadding.value}, 0))) + " " + ${footer.value ? `colors.bold(colors.text.banner.footer.${variant}("${footer.value}"))` : ""} + " " + colors.border.banner.outline.${variant}("${theme.borderStyles.banner.outline[variant].bottom}".repeat(4))` : `colors.border.banner.outline.${variant}("${theme.borderStyles.banner.outline[variant].bottom}".repeat(Math.max(process.stdout.columns - ${bannerPadding.value}, 0)))`} + colors.border.banner.outline.${variant}("${theme.borderStyles.banner.outline[variant].bottomRight}"), { consoleFn: console.${consoleFnName} });
61
- `;
62
- }
63
- })];
93
+ writeLine(colors.border.banner.outline.${variant}("${theme.borderStyles.banner.outline[variant].bottomLeft}") + ${footer ? `colors.border.banner.outline.${variant}("${theme.borderStyles.banner.outline[variant].bottom}".repeat(Math.max(process.stdout.columns - ${8 + (footer ? footer.length : 0) + bannerPadding.value}, 0))) + " " + ${footer ? `colors.bold(colors.text.banner.footer.${variant}("${footer}"))` : ""} + " " + colors.border.banner.outline.${variant}("${theme.borderStyles.banner.outline[variant].bottom}".repeat(6))` : `colors.border.banner.outline.${variant}("${theme.borderStyles.banner.outline[variant].bottom}".repeat(Math.max(process.stdout.columns - ${bannerPadding.value}, 0)))`} + colors.border.banner.outline.${variant}("${theme.borderStyles.banner.outline[variant].bottomRight}"), { consoleFn: console.${consoleFnName} });
94
+ `)
95
+ ];
64
96
  }
65
97
 
66
98
  //#endregion
99
+ exports.BannerFunctionBodyDeclaration = BannerFunctionBodyDeclaration;
67
100
  exports.BannerFunctionDeclaration = BannerFunctionDeclaration;
68
101
  //# sourceMappingURL=banner-function-declaration.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"banner-function-declaration.cjs","names":["code","computed","FunctionDeclaration","usePowerlines","useCommand","getAppDescription","getAppTitle","useTheme","BannerFunctionDeclaration","props","consoleFnName","variant","title","titleProp","theme","context","command","header","labels","banner","packageJson","version","description","footer","test","value","toLowerCase","replace","trim","bannerPadding","Math","max","padding","app","borderStyles","outline","left","length","right","totalPadding","_$createComponent","name","doc","children","topLeft","icons","top","topRight","bottomLeft","bottomRight","bottom"],"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 { code, computed } from \"@alloy-js/core\";\nimport { FunctionDeclaration } from \"@alloy-js/typescript\";\nimport { usePowerlines } from \"@powerlines/plugin-alloy/core/contexts/context\";\nimport { useCommand } from \"@shell-shock/core/contexts/command\";\nimport {\n getAppDescription,\n getAppTitle\n} from \"@shell-shock/core/plugin-utils/context-helpers\";\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 title?: string;\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 title: titleProp\n } = props;\n\n const theme = useTheme();\n\n const context = usePowerlines<ScriptPresetContext>();\n const command = useCommand();\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 titleProp ||\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 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 <FunctionDeclaration\n name=\"banner\"\n doc={`Write the ${getAppTitle(context)} application banner ${\n command ? `for the ${command.title} command ` : \"\"\n }to the console.`}>\n {code`\n if (hasFlag(\"no-banner\") || hasFlag(\"hide-banner\") || isCI || isMinimal) {\n return;\n }\n\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(4)) + \" \" + ${\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.value\n }\")) + \" \" + colors.border.banner.outline.${variant}(\"${\n theme.borderStyles.banner.outline[variant].top\n }\".repeat(Math.max(process.stdout.columns - ${\n 4 +\n (theme.icons.banner.header[variant]\n ? theme.icons.banner.header[variant].length + 3\n : 0) +\n (header.value ? header.value.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 colors.bold(colors.text.banner.title.${variant}(\"${title.value}\")),\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.${\n variant\n }(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 ? `writeLine(colors.border.banner.outline.${variant}(\"${\n theme.borderStyles.banner.outline[variant].bottomLeft\n }\") + \" \".repeat(Math.max(process.stdout.columns - ${\n bannerPadding.value\n })) + colors.border.banner.outline.${variant}(\"${\n theme.borderStyles.banner.outline[variant].bottomRight\n }\"), { consoleFn: console.${consoleFnName} });\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(line).length + ${\n bannerPadding.value\n })) / 2), 0)) + colors.bold(colors.text.banner.command.${\n variant\n }(\"${command.title}\")) + \" \".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 splitText(\n colors.bold(${\n command?.title\n ? \"colors.text.banner.description\"\n : \"colors.text.banner.command\"\n }.${variant}(\"${description.value.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.value\n ? `colors.border.banner.outline.${variant}(\"${\n theme.borderStyles.banner.outline[variant].bottom\n }\".repeat(Math.max(process.stdout.columns - ${\n 6 +\n (footer.value ? footer.value.length : 0) +\n bannerPadding.value\n }, 0))) + \" \" + ${\n footer.value\n ? `colors.bold(colors.text.banner.footer.${variant}(\"${footer.value}\"))`\n : \"\"\n } + \" \" + colors.border.banner.outline.${variant}(\"${\n theme.borderStyles.banner.outline[variant].bottom\n }\".repeat(4))`\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 </FunctionDeclaration>\n </>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"banner-function-declaration.cjs","names":["code","computed","FunctionDeclaration","usePowerlines","getAppDescription","getAppTitle","useTheme","BannerFunctionDeclaration","props","consoleFnName","variant","command","children","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","_$createIntrinsic","_$memo","topLeft","icons","top","topRight","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 } from \"@alloy-js/core\";\nimport { FunctionDeclaration } from \"@alloy-js/typescript\";\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 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 } = 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 {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}\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 } = 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 (hasFlag(\"no-banner\") || hasFlag(\"hide-banner\") || isCI || isMinimal) {\n return;\n } `}\n <hbr />\n <hbr />\n {children}\n <hbr />\n <hbr />\n {code`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(\"${command.title}\").length + ${\n bannerPadding.value\n })) / 2), 0)) + colors.bold(colors.text.banner.command.${\n variant\n }(\"${command.title}\")) + \" \".repeat(Math.max(Math.ceil((process.stdout.columns - (stripAnsi(\"${command.title}\").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 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 </>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;AA4CA,SAAgBO,0BACdC,OACA;CACA,MAAM,EACJC,gBAAgB,OAChBC,UAAU,WACVC,SACAC,aACEJ;CAEJ,MAAMK,QAAQP,iCAAU;CACxB,MAAMQ,8EAA8C;CAEpD,MAAMC,6CAEF,GAAGF,MAAMG,OAAOC,OAAOF,OAAOL,6EAAwBI,QAAQ,CAAA,IAAKA,QAAQI,YAAYC,WAAW,UACrG;CACD,MAAMC,kDACET,SAASS,sFAAiCN,QAClD,CAAC;CACD,MAAMO,6CAAwBR,MAAMG,OAAOC,OAAOI,OAAOX,SAAS;CAElE,MAAMY,6GACQR,QAAQ,IACpB,4DAA4DS,KAC1DR,OAAOS,MAAMC,aACf,CAAC,GACGV,OAAOS,MACJE,QAAQ,IAAIZ,QAAQI,YAAYC,WAAW,WAAW,GAAG,CACzDQ,MAAM,GACT,GAAGZ,OAAOS,MACPE,QAAQ,IAAIZ,QAAQI,YAAYC,WAAW,WAAW,GAAG,CACzDQ,MAAM,CAAA,2BACd;AAED,QAAA,kDAEKzB,2CAAmB;EAClB2B,MAAI;EAAA,IACJC,MAAG;AAAA,UAAE,8EAAyBhB,QAAQ,CAAA,sBACpCH,UAAU,WAAWA,QAAQW,MAAK,aAAc,GAAE;;EACnC,IAAAV,WAAA;AAAA,2DAChBmB,+BAA6B;IAAA,IAC5BT,QAAK;AAAA,YAAEA,MAAME;;IAAK,IAClBT,SAAM;AAAA,YAAEA,OAAOS;;IAAK,IACpBJ,cAAW;AAAA,YAAEA,YAAYI;;IAAK,IAC9BH,SAAM;AAAA,YAAEA,OAAOG;;IACNd;IACMD;IACNE;IACTqB,4BAA0B;IACzBpB;IAAQ,CAAA;;EAAA,CAAA,CAAA;;;;;;;;AAqBnB,SAAgBmB,8BACdvB,OACA;CACA,MAAM,EACJC,gBAAgB,OAChBC,UAAU,WACVY,OACAP,QACAM,QACAD,aACAT,SACAC,UACAoB,6BAA6B,UAC3BxB;CAEJ,MAAMK,QAAQP,iCAAU;CAExB,MAAM2B,oDAEFC,KAAKC,IAAItB,MAAMuB,QAAQC,KAAK,EAAE,GAAG,IACjCxB,MAAMyB,aAAarB,OAAOsB,QAAQ7B,SAAS8B,KAAKC,SAChD5B,MAAMyB,aAAarB,OAAOsB,QAAQ7B,SAASgC,MAAMD,OACpD;CACD,MAAME,mDACET,KAAKC,IAAItB,MAAMuB,QAAQnB,QAAQ,EAAE,GAAG,IAAIgB,cAAcT,MAC7D;AAED,QAAA;EAEKxB,oBAAI;;;;mDAGA,OAAA,EAAA,CAAA;mDAAA,OAAA,EAAA,CAAA;EAGJY;mDAAQ,OAAA,EAAA,CAAA;mDAAA,OAAA,EAAA,CAAA;8CAGRZ,oBAAI,0CAA0CU,QAAO,IACpDG,MAAMyB,aAAarB,OAAOsB,QAAQ7B,SAASoC,QAAO,OAElDjC,MAAMkC,MAAM9B,OAAOF,OAAOL,WACtB,gCAAgCA,QAAO,IACrCG,MAAMyB,aAAarB,OAAOsB,QAAQ7B,SAASsC,IAAG,uBAE9CnC,MAAMkC,MAAM9B,OAAOF,OAAOL,WACtB,6BAA6BA,QAAO,IAClCG,MAAMkC,MAAM9B,OAAOF,OAAOL,SAAQ,0CACOA,QAAO,IAChDG,MAAMyB,aAAarB,OAAOsB,QAAQ7B,SAASsC,IAAG,cAEhD,GAAE,yCACkCtC,QAAO,IAC/CK,OAAM,2CACoCL,QAAO,IACjDG,MAAMyB,aAAarB,OAAOsB,QAAQ7B,SAASsC,IAAG,6CAE9C,KACCnC,MAAMkC,MAAM9B,OAAOF,OAAOL,WACvBG,MAAMkC,MAAM9B,OAAOF,OAAOL,SAAS+B,SAAS,IAC5C,MACH1B,SAASA,OAAO0B,SAAS,IAAI,KAC9BR,cAAcT,MAAK,UAErB,gCAAgCd,QAAO,IACrCG,MAAMyB,aAAarB,OAAOsB,QAAQ7B,SAASsC,IAAG,6CAE9Cf,cAAcT,MAAK,QACb,kCACqBd,QAAO,IACxCG,MAAMyB,aAAarB,OAAOsB,QAAQ7B,SAASuC,SAAQ,2BACzBxC,cAAa;;;YAGnCa,QAAQ,IAAIA,MAAK,KAAM,QAAO;8CACIqB,aAAanB,MAAK;;mDAEbd,QAAO,IAC9CG,MAAMyB,aAAarB,OAAOsB,QAAQ7B,SAAS8B,KAAI,0FAE/CP,cAAcT,MAAK,sDACkCd,QAAO,8FAC5DuB,cAAcT,MAAK,8CAC0Bd,QAAO,IACpDG,MAAMyB,aAAarB,OAAOsB,QAAQ7B,SAASgC,MAAK,2BACtBjC,cAAa;;;UAIzCE,SAASW,QACL,GACEU,6BACI,0CAA0CtB,QAAO,IAC/CG,MAAMyB,aAAarB,OAAOsB,QAAQ7B,SAAS8B,KAAI,oDAE/CP,cAAcT,MAAK,oCACgBd,QAAO,IAC1CG,MAAMyB,aAAarB,OAAOsB,QAAQ7B,SAASgC,MAAK,2BACtBjC,cAAa,SACzC,GAAE;cAER,0CAA0CC,QAAO,IACjDG,MAAMyB,aAAarB,OAAOsB,QAAQ7B,SAAS8B,KAAI,4EAC4B7B,QAAQW,MAAK,cACxFW,cAAcT,MAAK,wDAEnBd,QAAO,IACJC,QAAQW,MAAK,4EAA6EX,QAAQW,MAAK,cAC1GW,cAAcT,MAAK,8CAC0Bd,QAAO,IACpDG,MAAMyB,aAAarB,OAAOsB,QAAQ7B,SAASgC,MAAK,2BACtBjC,cAAa,OAAO,KAC9C,GAAE;;;wBAKJE,SAASW,QACL,mCACA,6BAA4B,GAC9BZ,QAAO,IAAKU,YAAYM,QAAQ,MAAM,OAAM,CAAA;8CACZiB,aAAanB,MAAK;;mDAEbd,QAAO,IAC9CG,MAAMyB,aAAarB,OAAOsB,QAAQ7B,SAAS8B,KAAI,0FAE/CP,cAAcT,MAAK,gDAC4Bd,QAAO,6FACtDuB,cAAcT,MAAK,8CAC0Bd,QAAO,IACpDG,MAAMyB,aAAarB,OAAOsB,QAAQ7B,SAASgC,MAAK,2BACtBjC,cAAa;;;iDAGFC,QAAO,IAC9CG,MAAMyB,aAAarB,OAAOsB,QAAQ7B,SAASwC,WAAU,OAErD7B,SACI,gCAAgCX,QAAO,IACrCG,MAAMyB,aAAarB,OAAOsB,QAAQ7B,SAASyC,OAAM,6CAEjD,KAAK9B,SAASA,OAAOoB,SAAS,KAAKR,cAAcT,MAAK,iBAEtDH,SACI,yCAAyCX,QAAO,IAAKW,OAAM,OAC3D,GAAE,wCACiCX,QAAO,IAC9CG,MAAMyB,aAAarB,OAAOsB,QAAQ7B,SAASyC,OAAM,gBAEnD,gCAAgCzC,QAAO,IACrCG,MAAMyB,aAAarB,OAAOsB,QAAQ7B,SAASyC,OAAM,6CAEjDlB,cAAcT,MAAK,QACb,kCACqBd,QAAO,IACxCG,MAAMyB,aAAarB,OAAOsB,QAAQ7B,SAAS0C,YAAW,2BAC5B3C,cAAa;EAChD;EAAA"}
@@ -1,11 +1,13 @@
1
- import * as _alloy_js_core12 from "@alloy-js/core";
1
+ import { Children } from "@alloy-js/core";
2
+ import { CommandTree } from "@shell-shock/core/types/command";
2
3
  import { ThemeColorVariant } from "@shell-shock/plugin-theme/types/theme";
3
4
 
4
5
  //#region src/components/banner-function-declaration.d.ts
5
6
  interface BannerFunctionDeclarationProps {
6
7
  variant?: ThemeColorVariant;
7
8
  consoleFnName?: "log" | "info" | "warn" | "error" | "debug";
8
- title?: string;
9
+ command?: CommandTree;
10
+ children?: Children;
9
11
  }
10
12
  /**
11
13
  * A component to generate the `banner` function for a specific command or application.
@@ -13,7 +15,21 @@ interface BannerFunctionDeclarationProps {
13
15
  * @remarks
14
16
  * 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.
15
17
  */
16
- declare function BannerFunctionDeclaration(props: BannerFunctionDeclarationProps): _alloy_js_core12.Children;
18
+ declare function BannerFunctionDeclaration(props: BannerFunctionDeclarationProps): Children;
19
+ interface BannerFunctionBodyDeclarationProps extends BannerFunctionDeclarationProps {
20
+ title?: string;
21
+ header?: string;
22
+ footer?: string;
23
+ description: string;
24
+ insertNewlineBeforeCommand?: boolean;
25
+ }
26
+ /**
27
+ * A component to generate the `banner` function's body for a specific command or application.
28
+ *
29
+ * @remarks
30
+ * 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.
31
+ */
32
+ declare function BannerFunctionBodyDeclaration(props: BannerFunctionBodyDeclarationProps): Children;
17
33
  //#endregion
18
- export { BannerFunctionDeclaration, BannerFunctionDeclarationProps };
34
+ export { BannerFunctionBodyDeclaration, BannerFunctionBodyDeclarationProps, BannerFunctionDeclaration, BannerFunctionDeclarationProps };
19
35
  //# sourceMappingURL=banner-function-declaration.d.cts.map
@@ -1 +1 @@
1
- {"version":3,"file":"banner-function-declaration.d.cts","names":[],"sources":["../../src/components/banner-function-declaration.tsx"],"sourcesContent":[],"mappings":";;;;UA8BiB,8BAAA;YACL;;EADK,KAAA,CAAA,EAAA,MAAA;AAYjB;;;;;;;iBAAgB,yBAAA,QACP,iCAA8B,gBAAA,CAAA"}
1
+ {"version":3,"file":"banner-function-declaration.d.cts","names":[],"sources":["../../src/components/banner-function-declaration.tsx"],"sourcesContent":[],"mappings":";;;;;UA+BiB,8BAAA;YACL;EADK,aAAA,CAAA,EAAA,KAAA,GAAA,MAAA,GAA8B,MAAA,GAAA,OAAA,GAAA,OAAA;EACnC,OAAA,CAAA,EAEA,WAFA;EAEA,QAAA,CAAA,EACC,QADD;;;AAUZ;AA0DA;AAcA;;;iBAxEgB,yBAAA,QACP,iCAA8B;UAyDtB,kCAAA,SAA2C;;;;;;;;;;;;;iBAc5C,6BAAA,QACP,qCAAkC"}
@@ -1,11 +1,13 @@
1
- import * as _alloy_js_core15 from "@alloy-js/core";
1
+ import { Children } from "@alloy-js/core";
2
+ import { CommandTree } from "@shell-shock/core/types/command";
2
3
  import { ThemeColorVariant } from "@shell-shock/plugin-theme/types/theme";
3
4
 
4
5
  //#region src/components/banner-function-declaration.d.ts
5
6
  interface BannerFunctionDeclarationProps {
6
7
  variant?: ThemeColorVariant;
7
8
  consoleFnName?: "log" | "info" | "warn" | "error" | "debug";
8
- title?: string;
9
+ command?: CommandTree;
10
+ children?: Children;
9
11
  }
10
12
  /**
11
13
  * A component to generate the `banner` function for a specific command or application.
@@ -13,7 +15,21 @@ interface BannerFunctionDeclarationProps {
13
15
  * @remarks
14
16
  * 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.
15
17
  */
16
- declare function BannerFunctionDeclaration(props: BannerFunctionDeclarationProps): _alloy_js_core15.Children;
18
+ declare function BannerFunctionDeclaration(props: BannerFunctionDeclarationProps): Children;
19
+ interface BannerFunctionBodyDeclarationProps extends BannerFunctionDeclarationProps {
20
+ title?: string;
21
+ header?: string;
22
+ footer?: string;
23
+ description: string;
24
+ insertNewlineBeforeCommand?: boolean;
25
+ }
26
+ /**
27
+ * A component to generate the `banner` function's body for a specific command or application.
28
+ *
29
+ * @remarks
30
+ * 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.
31
+ */
32
+ declare function BannerFunctionBodyDeclaration(props: BannerFunctionBodyDeclarationProps): Children;
17
33
  //#endregion
18
- export { BannerFunctionDeclaration, BannerFunctionDeclarationProps };
34
+ export { BannerFunctionBodyDeclaration, BannerFunctionBodyDeclarationProps, BannerFunctionDeclaration, BannerFunctionDeclarationProps };
19
35
  //# sourceMappingURL=banner-function-declaration.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"banner-function-declaration.d.mts","names":[],"sources":["../../src/components/banner-function-declaration.tsx"],"sourcesContent":[],"mappings":";;;;UA8BiB,8BAAA;YACL;;EADK,KAAA,CAAA,EAAA,MAAA;AAYjB;;;;;;;iBAAgB,yBAAA,QACP,iCAA8B,gBAAA,CAAA"}
1
+ {"version":3,"file":"banner-function-declaration.d.mts","names":[],"sources":["../../src/components/banner-function-declaration.tsx"],"sourcesContent":[],"mappings":";;;;;UA+BiB,8BAAA;YACL;EADK,aAAA,CAAA,EAAA,KAAA,GAAA,MAAA,GAA8B,MAAA,GAAA,OAAA,GAAA,OAAA;EACnC,OAAA,CAAA,EAEA,WAFA;EAEA,QAAA,CAAA,EACC,QADD;;;AAUZ;AA0DA;AAcA;;;iBAxEgB,yBAAA,QACP,iCAA8B;UAyDtB,kCAAA,SAA2C;;;;;;;;;;;;;iBAc5C,6BAAA,QACP,qCAAkC"}
@@ -1,10 +1,9 @@
1
1
  import { useTheme } from "../contexts/theme.mjs";
2
2
  import "../contexts/index.mjs";
3
- import { createComponent, memo } from "@alloy-js/core/jsx-runtime";
3
+ import { createComponent, createIntrinsic, memo } from "@alloy-js/core/jsx-runtime";
4
4
  import { code, computed } from "@alloy-js/core";
5
5
  import { FunctionDeclaration } from "@alloy-js/typescript";
6
6
  import { usePowerlines } from "@powerlines/plugin-alloy/core/contexts/context";
7
- import { useCommand } from "@shell-shock/core/contexts/command";
8
7
  import { getAppDescription, getAppTitle } from "@shell-shock/core/plugin-utils/context-helpers";
9
8
 
10
9
  //#region src/components/banner-function-declaration.tsx
@@ -15,53 +14,86 @@ import { getAppDescription, getAppTitle } from "@shell-shock/core/plugin-utils/c
15
14
  * 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.
16
15
  */
17
16
  function BannerFunctionDeclaration(props) {
18
- const { consoleFnName = "log", variant = "primary", title: titleProp } = props;
17
+ const { consoleFnName = "log", variant = "primary", command, children } = props;
19
18
  const theme = useTheme();
20
19
  const context = usePowerlines();
21
- const command = useCommand();
22
20
  const header = computed(() => `${theme.labels.banner.header[variant] || getAppTitle(context)} v${context.packageJson.version || "1.0.0"}`);
23
21
  const description = computed(() => command?.description || getAppDescription(context));
24
22
  const footer = computed(() => theme.labels.banner.footer[variant]);
25
- const title = computed(() => titleProp || /(?: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`);
26
- const bannerPadding = computed(() => Math.max(theme.padding.app, 0) * 2 + theme.borderStyles.banner.outline[variant].left.length + theme.borderStyles.banner.outline[variant].right.length);
27
- const totalPadding = computed(() => Math.max(theme.padding.banner, 0) * 2 + bannerPadding.value);
23
+ 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`);
28
24
  return [createComponent(FunctionDeclaration, {
29
25
  name: "banner",
30
26
  get doc() {
31
27
  return `Write the ${getAppTitle(context)} application banner ${command ? `for the ${command.title} command ` : ""}to the console.`;
32
28
  },
33
29
  get children() {
34
- return code`
30
+ return createComponent(BannerFunctionBodyDeclaration, {
31
+ get title() {
32
+ return title.value;
33
+ },
34
+ get header() {
35
+ return header.value;
36
+ },
37
+ get description() {
38
+ return description.value;
39
+ },
40
+ get footer() {
41
+ return footer.value;
42
+ },
43
+ variant,
44
+ consoleFnName,
45
+ command,
46
+ insertNewlineBeforeCommand: true,
47
+ children
48
+ });
49
+ }
50
+ })];
51
+ }
52
+ /**
53
+ * A component to generate the `banner` function's body for a specific command or application.
54
+ *
55
+ * @remarks
56
+ * 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.
57
+ */
58
+ function BannerFunctionBodyDeclaration(props) {
59
+ const { consoleFnName = "log", variant = "primary", title, header, footer, description, command, children, insertNewlineBeforeCommand = false } = props;
60
+ const theme = useTheme();
61
+ const bannerPadding = computed(() => Math.max(theme.padding.app, 0) * 2 + theme.borderStyles.banner.outline[variant].left.length + theme.borderStyles.banner.outline[variant].right.length);
62
+ const totalPadding = computed(() => Math.max(theme.padding.banner, 0) * 2 + bannerPadding.value);
63
+ return [
64
+ code`
35
65
  if (hasFlag("no-banner") || hasFlag("hide-banner") || isCI || isMinimal) {
36
66
  return;
37
- }
38
-
39
- writeLine(colors.border.banner.outline.${variant}("${theme.borderStyles.banner.outline[variant].topLeft}") + ${theme.icons.banner.header[variant] ? `colors.border.banner.outline.${variant}("${theme.borderStyles.banner.outline[variant].top}".repeat(4)) + " " + ${theme.icons.banner.header[variant] ? `colors.text.banner.header.${variant}("${theme.icons.banner.header[variant]}") + " " + colors.border.banner.outline.${variant}("${theme.borderStyles.banner.outline[variant].top}") + " " +` : ""} colors.bold(colors.text.banner.header.${variant}("${header.value}")) + " " + colors.border.banner.outline.${variant}("${theme.borderStyles.banner.outline[variant].top}".repeat(Math.max(process.stdout.columns - ${4 + (theme.icons.banner.header[variant] ? theme.icons.banner.header[variant].length + 3 : 0) + (header.value ? header.value.length + 2 : 0) + bannerPadding.value}, 0)))` : `colors.border.banner.outline.${variant}("${theme.borderStyles.banner.outline[variant].top}".repeat(Math.max(process.stdout.columns - ${bannerPadding.value}, 0)))`} + colors.border.banner.outline.${variant}("${theme.borderStyles.banner.outline[variant].topRight}"), { consoleFn: console.${consoleFnName} });
67
+ } `,
68
+ createIntrinsic("hbr", {}),
69
+ createIntrinsic("hbr", {}),
70
+ children,
71
+ createIntrinsic("hbr", {}),
72
+ createIntrinsic("hbr", {}),
73
+ memo(() => code`writeLine(colors.border.banner.outline.${variant}("${theme.borderStyles.banner.outline[variant].topLeft}") + ${theme.icons.banner.header[variant] ? `colors.border.banner.outline.${variant}("${theme.borderStyles.banner.outline[variant].top}".repeat(6)) + " " + ${theme.icons.banner.header[variant] ? `colors.text.banner.header.${variant}("${theme.icons.banner.header[variant]}") + " " + colors.border.banner.outline.${variant}("${theme.borderStyles.banner.outline[variant].top}") + " " +` : ""} colors.bold(colors.text.banner.header.${variant}("${header}")) + " " + colors.border.banner.outline.${variant}("${theme.borderStyles.banner.outline[variant].top}".repeat(Math.max(process.stdout.columns - ${6 + (theme.icons.banner.header[variant] ? theme.icons.banner.header[variant].length + 3 : 0) + (header ? header.length + 2 : 0) + bannerPadding.value}, 0)))` : `colors.border.banner.outline.${variant}("${theme.borderStyles.banner.outline[variant].top}".repeat(Math.max(process.stdout.columns - ${bannerPadding.value}, 0)))`} + colors.border.banner.outline.${variant}("${theme.borderStyles.banner.outline[variant].topRight}"), { consoleFn: console.${consoleFnName} });
40
74
 
41
75
  splitText(
42
- colors.bold(colors.text.banner.title.${variant}("${title.value}")),
76
+ ${title ? `"${title}"` : "title"},
43
77
  Math.max(process.stdout.columns - ${totalPadding.value}, 0)
44
78
  ).forEach((line) => {
45
- writeLine(colors.border.banner.outline.${variant}("${theme.borderStyles.banner.outline[variant].left}") + " ".repeat(Math.max(Math.floor((process.stdout.columns - (stripAnsi(line).length + ${bannerPadding.value})) / 2), 0)) + colors.text.banner.description.${variant}(line) + " ".repeat(Math.max(Math.ceil((process.stdout.columns - (stripAnsi(line).length + ${bannerPadding.value})) / 2), 0)) + colors.border.banner.outline.${variant}("${theme.borderStyles.banner.outline[variant].right}"), { consoleFn: console.${consoleFnName} });
79
+ writeLine(colors.border.banner.outline.${variant}("${theme.borderStyles.banner.outline[variant].left}") + " ".repeat(Math.max(Math.floor((process.stdout.columns - (stripAnsi(line).length + ${bannerPadding.value})) / 2), 0)) + colors.bold(colors.text.banner.title.${variant}(line)) + " ".repeat(Math.max(Math.ceil((process.stdout.columns - (stripAnsi(line).length + ${bannerPadding.value})) / 2), 0)) + colors.border.banner.outline.${variant}("${theme.borderStyles.banner.outline[variant].right}"), { consoleFn: console.${consoleFnName} });
46
80
  });
47
81
 
48
- ${command?.title ? `writeLine(colors.border.banner.outline.${variant}("${theme.borderStyles.banner.outline[variant].bottomLeft}") + " ".repeat(Math.max(process.stdout.columns - ${bannerPadding.value})) + colors.border.banner.outline.${variant}("${theme.borderStyles.banner.outline[variant].bottomRight}"), { consoleFn: console.${consoleFnName} });
49
-
50
- writeLine(colors.border.banner.outline.${variant}("${theme.borderStyles.banner.outline[variant].left}") + " ".repeat(Math.max(Math.floor((process.stdout.columns - (stripAnsi(line).length + ${bannerPadding.value})) / 2), 0)) + colors.bold(colors.text.banner.command.${variant}("${command.title}")) + " ".repeat(Math.max(Math.ceil((process.stdout.columns - (stripAnsi(line).length + ${bannerPadding.value})) / 2), 0)) + colors.border.banner.outline.${variant}("${theme.borderStyles.banner.outline[variant].right}"), { consoleFn: console.${consoleFnName} }); ` : ""}
82
+ ${command?.title ? `${insertNewlineBeforeCommand ? `writeLine(colors.border.banner.outline.${variant}("${theme.borderStyles.banner.outline[variant].left}") + " ".repeat(Math.max(process.stdout.columns - ${bannerPadding.value})) + colors.border.banner.outline.${variant}("${theme.borderStyles.banner.outline[variant].right}"), { consoleFn: console.${consoleFnName} }); ` : ""}
83
+ ${`writeLine(colors.border.banner.outline.${variant}("${theme.borderStyles.banner.outline[variant].left}") + " ".repeat(Math.max(Math.floor((process.stdout.columns - (stripAnsi("${command.title}").length + ${bannerPadding.value})) / 2), 0)) + colors.bold(colors.text.banner.command.${variant}("${command.title}")) + " ".repeat(Math.max(Math.ceil((process.stdout.columns - (stripAnsi("${command.title}").length + ${bannerPadding.value})) / 2), 0)) + colors.border.banner.outline.${variant}("${theme.borderStyles.banner.outline[variant].right}"), { consoleFn: console.${consoleFnName} }); `} ` : ""}
51
84
 
52
85
  splitText(
53
- colors.bold(${command?.title ? "colors.text.banner.description" : "colors.text.banner.command"}.${variant}("${description.value.replace(/"/g, "\\\"")}")),
86
+ colors.bold(${command?.title ? "colors.text.banner.description" : "colors.text.banner.command"}.${variant}("${description.replace(/"/g, "\\\"")}")),
54
87
  Math.max(process.stdout.columns - ${totalPadding.value}, 0)
55
88
  ).forEach((line) => {
56
89
  writeLine(colors.border.banner.outline.${variant}("${theme.borderStyles.banner.outline[variant].left}") + " ".repeat(Math.max(Math.floor((process.stdout.columns - (stripAnsi(line).length + ${bannerPadding.value})) / 2), 0)) + colors.text.banner.description.${variant}(line) + " ".repeat(Math.max(Math.ceil((process.stdout.columns - (stripAnsi(line).length + ${bannerPadding.value})) / 2), 0)) + colors.border.banner.outline.${variant}("${theme.borderStyles.banner.outline[variant].right}"), { consoleFn: console.${consoleFnName} });
57
90
  });
58
91
 
59
- writeLine(colors.border.banner.outline.${variant}("${theme.borderStyles.banner.outline[variant].bottomLeft}") + ${footer.value ? `colors.border.banner.outline.${variant}("${theme.borderStyles.banner.outline[variant].bottom}".repeat(Math.max(process.stdout.columns - ${6 + (footer.value ? footer.value.length : 0) + bannerPadding.value}, 0))) + " " + ${footer.value ? `colors.bold(colors.text.banner.footer.${variant}("${footer.value}"))` : ""} + " " + colors.border.banner.outline.${variant}("${theme.borderStyles.banner.outline[variant].bottom}".repeat(4))` : `colors.border.banner.outline.${variant}("${theme.borderStyles.banner.outline[variant].bottom}".repeat(Math.max(process.stdout.columns - ${bannerPadding.value}, 0)))`} + colors.border.banner.outline.${variant}("${theme.borderStyles.banner.outline[variant].bottomRight}"), { consoleFn: console.${consoleFnName} });
60
- `;
61
- }
62
- })];
92
+ writeLine(colors.border.banner.outline.${variant}("${theme.borderStyles.banner.outline[variant].bottomLeft}") + ${footer ? `colors.border.banner.outline.${variant}("${theme.borderStyles.banner.outline[variant].bottom}".repeat(Math.max(process.stdout.columns - ${8 + (footer ? footer.length : 0) + bannerPadding.value}, 0))) + " " + ${footer ? `colors.bold(colors.text.banner.footer.${variant}("${footer}"))` : ""} + " " + colors.border.banner.outline.${variant}("${theme.borderStyles.banner.outline[variant].bottom}".repeat(6))` : `colors.border.banner.outline.${variant}("${theme.borderStyles.banner.outline[variant].bottom}".repeat(Math.max(process.stdout.columns - ${bannerPadding.value}, 0)))`} + colors.border.banner.outline.${variant}("${theme.borderStyles.banner.outline[variant].bottomRight}"), { consoleFn: console.${consoleFnName} });
93
+ `)
94
+ ];
63
95
  }
64
96
 
65
97
  //#endregion
66
- export { BannerFunctionDeclaration };
98
+ export { BannerFunctionBodyDeclaration, BannerFunctionDeclaration };
67
99
  //# sourceMappingURL=banner-function-declaration.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"banner-function-declaration.mjs","names":["code","computed","FunctionDeclaration","usePowerlines","useCommand","getAppDescription","getAppTitle","useTheme","BannerFunctionDeclaration","props","consoleFnName","variant","title","titleProp","theme","context","command","header","labels","banner","packageJson","version","description","footer","test","value","toLowerCase","replace","trim","bannerPadding","Math","max","padding","app","borderStyles","outline","left","length","right","totalPadding","_$createComponent","name","doc","children","topLeft","icons","top","topRight","bottomLeft","bottomRight","bottom"],"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 { code, computed } from \"@alloy-js/core\";\nimport { FunctionDeclaration } from \"@alloy-js/typescript\";\nimport { usePowerlines } from \"@powerlines/plugin-alloy/core/contexts/context\";\nimport { useCommand } from \"@shell-shock/core/contexts/command\";\nimport {\n getAppDescription,\n getAppTitle\n} from \"@shell-shock/core/plugin-utils/context-helpers\";\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 title?: string;\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 title: titleProp\n } = props;\n\n const theme = useTheme();\n\n const context = usePowerlines<ScriptPresetContext>();\n const command = useCommand();\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 titleProp ||\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 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 <FunctionDeclaration\n name=\"banner\"\n doc={`Write the ${getAppTitle(context)} application banner ${\n command ? `for the ${command.title} command ` : \"\"\n }to the console.`}>\n {code`\n if (hasFlag(\"no-banner\") || hasFlag(\"hide-banner\") || isCI || isMinimal) {\n return;\n }\n\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(4)) + \" \" + ${\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.value\n }\")) + \" \" + colors.border.banner.outline.${variant}(\"${\n theme.borderStyles.banner.outline[variant].top\n }\".repeat(Math.max(process.stdout.columns - ${\n 4 +\n (theme.icons.banner.header[variant]\n ? theme.icons.banner.header[variant].length + 3\n : 0) +\n (header.value ? header.value.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 colors.bold(colors.text.banner.title.${variant}(\"${title.value}\")),\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.${\n variant\n }(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 ? `writeLine(colors.border.banner.outline.${variant}(\"${\n theme.borderStyles.banner.outline[variant].bottomLeft\n }\") + \" \".repeat(Math.max(process.stdout.columns - ${\n bannerPadding.value\n })) + colors.border.banner.outline.${variant}(\"${\n theme.borderStyles.banner.outline[variant].bottomRight\n }\"), { consoleFn: console.${consoleFnName} });\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(line).length + ${\n bannerPadding.value\n })) / 2), 0)) + colors.bold(colors.text.banner.command.${\n variant\n }(\"${command.title}\")) + \" \".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 splitText(\n colors.bold(${\n command?.title\n ? \"colors.text.banner.description\"\n : \"colors.text.banner.command\"\n }.${variant}(\"${description.value.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.value\n ? `colors.border.banner.outline.${variant}(\"${\n theme.borderStyles.banner.outline[variant].bottom\n }\".repeat(Math.max(process.stdout.columns - ${\n 6 +\n (footer.value ? footer.value.length : 0) +\n bannerPadding.value\n }, 0))) + \" \" + ${\n footer.value\n ? `colors.bold(colors.text.banner.footer.${variant}(\"${footer.value}\"))`\n : \"\"\n } + \" \" + colors.border.banner.outline.${variant}(\"${\n theme.borderStyles.banner.outline[variant].bottom\n }\".repeat(4))`\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 </FunctionDeclaration>\n </>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"banner-function-declaration.mjs","names":["code","computed","FunctionDeclaration","usePowerlines","getAppDescription","getAppTitle","useTheme","BannerFunctionDeclaration","props","consoleFnName","variant","command","children","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","_$createIntrinsic","_$memo","topLeft","icons","top","topRight","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 } from \"@alloy-js/core\";\nimport { FunctionDeclaration } from \"@alloy-js/typescript\";\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 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 } = 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 {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}\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 } = 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 (hasFlag(\"no-banner\") || hasFlag(\"hide-banner\") || isCI || isMinimal) {\n return;\n } `}\n <hbr />\n <hbr />\n {children}\n <hbr />\n <hbr />\n {code`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(\"${command.title}\").length + ${\n bannerPadding.value\n })) / 2), 0)) + colors.bold(colors.text.banner.command.${\n variant\n }(\"${command.title}\")) + \" \".repeat(Math.max(Math.ceil((process.stdout.columns - (stripAnsi(\"${command.title}\").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 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 </>\n );\n}\n"],"mappings":"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"}
@@ -24,17 +24,22 @@ function RunApplication() {
24
24
  __alloy_js_core.code`// Run the application main logic inside an asynchronous IIFE
25
25
  (async () => {
26
26
  try {
27
+ const startDate = new Date();
28
+
27
29
  process.on("exit", () => exit({
30
+ startDate,
28
31
  skipExit: true,
29
32
  isSynchronous: true,
30
33
  signal: 0
31
34
  }));
32
35
  process.on("beforeExit", () => exit({
36
+ startDate,
33
37
  signal: 0
34
38
  }));
35
39
  process.on("message", message => {
36
40
  if (message === 'shutdown') {
37
41
  exit({
42
+ startDate,
38
43
  isSynchronous: true,
39
44
  signal: -128
40
45
  });
@@ -42,26 +47,31 @@ function RunApplication() {
42
47
  });
43
48
 
44
49
  process.once("SIGTERM", () => exit({
50
+ startDate,
45
51
  signal: 15
46
52
  }));
47
53
  process.once("SIGINT", () => exit({
54
+ startDate,
48
55
  signal: 2
49
56
  }));
50
57
  process.once("SIGUSR2", () => {
51
58
  verbose("The application was terminated by the user");
52
59
  return exit({
60
+ startDate,
53
61
  signal: 12
54
62
  });
55
63
  });
56
64
  process.once("SIGQUIT", () => {
57
65
  verbose("The application was terminated by the user");
58
66
  return exit({
67
+ startDate,
59
68
  signal: 12
60
69
  });
61
70
  });
62
71
 
63
72
  for (const type of ["unhandledRejection", "uncaughtException"]) {
64
73
  process.on(type, err => exit({
74
+ startDate,
65
75
  exception: err || new Error(\`An \${type === "unhandledRejection" ? "unhandled promise rejection" : "uncaught exception"} occurred during processing - the application is shutting down.\`)
66
76
  }));
67
77
  }
@@ -71,9 +81,9 @@ function RunApplication() {
71
81
  error(result.error);
72
82
  }
73
83
 
74
- exit();
84
+ exit({ startDate });
75
85
  } catch (err) {
76
- exit({ exception: err as Error });
86
+ exit({ startDate, exception: err as Error });
77
87
  }
78
88
  })();
79
89
  `,