@shell-shock/preset-script 0.6.3 → 0.6.5
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.
- package/README.md +1 -1
- package/dist/components/banner-function-declaration.cjs +13 -7
- package/dist/components/banner-function-declaration.cjs.map +1 -1
- package/dist/components/banner-function-declaration.d.cts +2 -0
- package/dist/components/banner-function-declaration.d.cts.map +1 -1
- package/dist/components/banner-function-declaration.d.mts +2 -0
- package/dist/components/banner-function-declaration.d.mts.map +1 -1
- package/dist/components/banner-function-declaration.mjs +15 -9
- package/dist/components/banner-function-declaration.mjs.map +1 -1
- package/dist/components/bin-entry.cjs +4 -10
- package/dist/components/bin-entry.cjs.map +1 -1
- package/dist/components/bin-entry.d.cts.map +1 -1
- package/dist/components/bin-entry.d.mts.map +1 -1
- package/dist/components/bin-entry.mjs +4 -10
- package/dist/components/bin-entry.mjs.map +1 -1
- package/dist/components/command-entry.cjs +13 -12
- package/dist/components/command-entry.cjs.map +1 -1
- package/dist/components/command-entry.d.cts +1 -0
- package/dist/components/command-entry.d.cts.map +1 -1
- package/dist/components/command-entry.d.mts +1 -0
- package/dist/components/command-entry.d.mts.map +1 -1
- package/dist/components/command-entry.mjs +13 -12
- package/dist/components/command-entry.mjs.map +1 -1
- package/dist/components/command-router.cjs +2 -2
- package/dist/components/command-router.cjs.map +1 -1
- package/dist/components/command-router.d.cts.map +1 -1
- package/dist/components/command-router.d.mts.map +1 -1
- package/dist/components/command-router.mjs +2 -2
- package/dist/components/command-router.mjs.map +1 -1
- package/dist/components/console-builtin.cjs +773 -102
- package/dist/components/console-builtin.cjs.map +1 -1
- package/dist/components/console-builtin.d.cts +2 -2
- package/dist/components/console-builtin.d.cts.map +1 -1
- package/dist/components/console-builtin.d.mts +2 -2
- package/dist/components/console-builtin.d.mts.map +1 -1
- package/dist/components/console-builtin.mjs +774 -104
- package/dist/components/console-builtin.mjs.map +1 -1
- package/dist/components/help.cjs +6 -9
- package/dist/components/help.cjs.map +1 -1
- package/dist/components/help.d.cts +7 -7
- package/dist/components/help.d.cts.map +1 -1
- package/dist/components/help.d.mts +7 -7
- package/dist/components/help.d.mts.map +1 -1
- package/dist/components/help.mjs +6 -9
- package/dist/components/help.mjs.map +1 -1
- package/dist/components/helpers.d.cts +5 -5
- package/dist/components/helpers.d.mts +5 -5
- package/dist/components/index.cjs +1 -0
- package/dist/components/index.d.cts +2 -2
- package/dist/components/index.d.mts +2 -2
- package/dist/components/index.mjs +2 -2
- package/dist/components/utils-builtin.cjs +19 -36
- package/dist/components/utils-builtin.cjs.map +1 -1
- package/dist/components/utils-builtin.d.cts.map +1 -1
- package/dist/components/utils-builtin.d.mts +8 -8
- package/dist/components/utils-builtin.d.mts.map +1 -1
- package/dist/components/utils-builtin.mjs +19 -36
- package/dist/components/utils-builtin.mjs.map +1 -1
- package/dist/components/virtual-command-entry.cjs +8 -3
- package/dist/components/virtual-command-entry.cjs.map +1 -1
- package/dist/components/virtual-command-entry.d.cts +1 -0
- package/dist/components/virtual-command-entry.d.cts.map +1 -1
- package/dist/components/virtual-command-entry.d.mts +1 -0
- package/dist/components/virtual-command-entry.d.mts.map +1 -1
- package/dist/components/virtual-command-entry.mjs +8 -3
- package/dist/components/virtual-command-entry.mjs.map +1 -1
- package/dist/helpers/ansi-utils.cjs +117 -3
- package/dist/helpers/ansi-utils.cjs.map +1 -1
- package/dist/helpers/ansi-utils.d.cts.map +1 -1
- package/dist/helpers/ansi-utils.d.mts.map +1 -1
- package/dist/helpers/ansi-utils.mjs +117 -3
- package/dist/helpers/ansi-utils.mjs.map +1 -1
- package/dist/index.cjs +1 -2
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +1 -2
- package/dist/index.mjs.map +1 -1
- package/dist/types/plugin.d.cts.map +1 -1
- package/package.json +12 -12
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
|
-
[](https://stormsoftware.com/projects/shell-shock/) [](http://commitizen.github.io/cz-cli/)  
|
|
31
31
|
|
|
32
32
|
<!-- prettier-ignore-start -->
|
|
33
33
|
<!-- markdownlint-disable -->
|
|
@@ -4,6 +4,7 @@ require('../contexts/index.cjs');
|
|
|
4
4
|
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
|
+
let __powerlines_plugin_alloy_core_components_spacing = require("@powerlines/plugin-alloy/core/components/spacing");
|
|
7
8
|
let __powerlines_plugin_alloy_core_contexts_context = require("@powerlines/plugin-alloy/core/contexts/context");
|
|
8
9
|
let __shell_shock_core_plugin_utils_context_helpers = require("@shell-shock/core/plugin-utils/context-helpers");
|
|
9
10
|
|
|
@@ -15,7 +16,7 @@ let __shell_shock_core_plugin_utils_context_helpers = require("@shell-shock/core
|
|
|
15
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.
|
|
16
17
|
*/
|
|
17
18
|
function BannerFunctionDeclaration(props) {
|
|
18
|
-
const { consoleFnName = "log", variant = "primary", command, children } = props;
|
|
19
|
+
const { consoleFnName = "log", variant = "primary", command, children, insertNewlineBeforeBanner = true } = props;
|
|
19
20
|
const theme = require_contexts_theme.useTheme();
|
|
20
21
|
const context = (0, __powerlines_plugin_alloy_core_contexts_context.usePowerlines)();
|
|
21
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"}`);
|
|
@@ -45,6 +46,7 @@ function BannerFunctionDeclaration(props) {
|
|
|
45
46
|
consoleFnName,
|
|
46
47
|
command,
|
|
47
48
|
insertNewlineBeforeCommand: true,
|
|
49
|
+
insertNewlineBeforeBanner,
|
|
48
50
|
children
|
|
49
51
|
});
|
|
50
52
|
}
|
|
@@ -57,7 +59,7 @@ function BannerFunctionDeclaration(props) {
|
|
|
57
59
|
* 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
60
|
*/
|
|
59
61
|
function BannerFunctionBodyDeclaration(props) {
|
|
60
|
-
const { consoleFnName = "log", variant = "primary", title, header, footer, description, command, children, insertNewlineBeforeCommand = false } = props;
|
|
62
|
+
const { consoleFnName = "log", variant = "primary", title, header, footer, description, command, children, insertNewlineBeforeCommand = false, insertNewlineBeforeBanner = true } = props;
|
|
61
63
|
const theme = require_contexts_theme.useTheme();
|
|
62
64
|
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
65
|
const totalPadding = (0, __alloy_js_core.computed)(() => Math.max(theme.padding.banner, 0) * 2 + bannerPadding.value);
|
|
@@ -68,12 +70,16 @@ function BannerFunctionBodyDeclaration(props) {
|
|
|
68
70
|
}
|
|
69
71
|
|
|
70
72
|
useApp().set("banner", true); `,
|
|
71
|
-
(0, __alloy_js_core_jsx_runtime.
|
|
72
|
-
(0, __alloy_js_core_jsx_runtime.createIntrinsic)("hbr", {}),
|
|
73
|
+
(0, __alloy_js_core_jsx_runtime.createComponent)(__powerlines_plugin_alloy_core_components_spacing.Spacing, {}),
|
|
73
74
|
children,
|
|
74
|
-
(0, __alloy_js_core_jsx_runtime.
|
|
75
|
-
(0, __alloy_js_core_jsx_runtime.
|
|
76
|
-
|
|
75
|
+
(0, __alloy_js_core_jsx_runtime.createComponent)(__powerlines_plugin_alloy_core_components_spacing.Spacing, {}),
|
|
76
|
+
(0, __alloy_js_core_jsx_runtime.createComponent)(__alloy_js_core.Show, {
|
|
77
|
+
when: insertNewlineBeforeBanner,
|
|
78
|
+
children: __alloy_js_core.code`writeLine(""); `
|
|
79
|
+
}),
|
|
80
|
+
(0, __alloy_js_core_jsx_runtime.createComponent)(__powerlines_plugin_alloy_core_components_spacing.Spacing, {}),
|
|
81
|
+
(0, __alloy_js_core_jsx_runtime.memo)(() => __alloy_js_core.code`
|
|
82
|
+
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} });
|
|
77
83
|
|
|
78
84
|
splitText(
|
|
79
85
|
${title ? `"${title}"` : "title"},
|
|
@@ -1 +1 @@
|
|
|
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","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 } 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 (useApp().get(\"banner\") || hasFlag(\"no-banner\") || hasFlag(\"hide-banner\") || isMinimal) {\n return;\n }\n\n useApp().set(\"banner\", true); `}\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(\"${\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","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\n 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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"}
|
|
@@ -6,6 +6,7 @@ import { ThemeColorVariant } from "@shell-shock/plugin-theme/types/theme";
|
|
|
6
6
|
interface BannerFunctionDeclarationProps {
|
|
7
7
|
variant?: ThemeColorVariant;
|
|
8
8
|
consoleFnName?: "log" | "info" | "warn" | "error" | "debug";
|
|
9
|
+
insertNewlineBeforeBanner?: boolean;
|
|
9
10
|
command?: CommandTree;
|
|
10
11
|
children?: Children;
|
|
11
12
|
}
|
|
@@ -22,6 +23,7 @@ interface BannerFunctionBodyDeclarationProps extends BannerFunctionDeclarationPr
|
|
|
22
23
|
footer?: string;
|
|
23
24
|
description: string;
|
|
24
25
|
insertNewlineBeforeCommand?: boolean;
|
|
26
|
+
insertNewlineBeforeBanner?: boolean;
|
|
25
27
|
}
|
|
26
28
|
/**
|
|
27
29
|
* A component to generate the `banner` function's body for a specific command or application.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"banner-function-declaration.d.cts","names":[],"sources":["../../src/components/banner-function-declaration.tsx"],"sourcesContent":[],"mappings":";;;;;
|
|
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;AAgBA;;;;iBA5EgB,yBAAA,QACP,iCAA8B;UA2DtB,kCAAA,SACP;;;;;;;;;;;;;;iBAeM,6BAAA,QACP,qCAAkC"}
|
|
@@ -6,6 +6,7 @@ import { ThemeColorVariant } from "@shell-shock/plugin-theme/types/theme";
|
|
|
6
6
|
interface BannerFunctionDeclarationProps {
|
|
7
7
|
variant?: ThemeColorVariant;
|
|
8
8
|
consoleFnName?: "log" | "info" | "warn" | "error" | "debug";
|
|
9
|
+
insertNewlineBeforeBanner?: boolean;
|
|
9
10
|
command?: CommandTree;
|
|
10
11
|
children?: Children;
|
|
11
12
|
}
|
|
@@ -22,6 +23,7 @@ interface BannerFunctionBodyDeclarationProps extends BannerFunctionDeclarationPr
|
|
|
22
23
|
footer?: string;
|
|
23
24
|
description: string;
|
|
24
25
|
insertNewlineBeforeCommand?: boolean;
|
|
26
|
+
insertNewlineBeforeBanner?: boolean;
|
|
25
27
|
}
|
|
26
28
|
/**
|
|
27
29
|
* A component to generate the `banner` function's body for a specific command or application.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"banner-function-declaration.d.mts","names":[],"sources":["../../src/components/banner-function-declaration.tsx"],"sourcesContent":[],"mappings":";;;;;
|
|
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;AAgBA;;;;iBA5EgB,yBAAA,QACP,iCAA8B;UA2DtB,kCAAA,SACP;;;;;;;;;;;;;;iBAeM,6BAAA,QACP,qCAAkC"}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { useTheme } from "../contexts/theme.mjs";
|
|
2
2
|
import "../contexts/index.mjs";
|
|
3
|
-
import { createComponent,
|
|
4
|
-
import { code, computed } from "@alloy-js/core";
|
|
3
|
+
import { createComponent, memo } from "@alloy-js/core/jsx-runtime";
|
|
4
|
+
import { Show, code, computed } from "@alloy-js/core";
|
|
5
5
|
import { FunctionDeclaration } from "@alloy-js/typescript";
|
|
6
|
+
import { Spacing } from "@powerlines/plugin-alloy/core/components/spacing";
|
|
6
7
|
import { usePowerlines } from "@powerlines/plugin-alloy/core/contexts/context";
|
|
7
8
|
import { getAppDescription, getAppTitle } from "@shell-shock/core/plugin-utils/context-helpers";
|
|
8
9
|
|
|
@@ -14,7 +15,7 @@ import { getAppDescription, getAppTitle } from "@shell-shock/core/plugin-utils/c
|
|
|
14
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.
|
|
15
16
|
*/
|
|
16
17
|
function BannerFunctionDeclaration(props) {
|
|
17
|
-
const { consoleFnName = "log", variant = "primary", command, children } = props;
|
|
18
|
+
const { consoleFnName = "log", variant = "primary", command, children, insertNewlineBeforeBanner = true } = props;
|
|
18
19
|
const theme = useTheme();
|
|
19
20
|
const context = usePowerlines();
|
|
20
21
|
const header = computed(() => `${theme.labels.banner.header[variant] || getAppTitle(context)} v${context.packageJson.version || "1.0.0"}`);
|
|
@@ -44,6 +45,7 @@ function BannerFunctionDeclaration(props) {
|
|
|
44
45
|
consoleFnName,
|
|
45
46
|
command,
|
|
46
47
|
insertNewlineBeforeCommand: true,
|
|
48
|
+
insertNewlineBeforeBanner,
|
|
47
49
|
children
|
|
48
50
|
});
|
|
49
51
|
}
|
|
@@ -56,7 +58,7 @@ function BannerFunctionDeclaration(props) {
|
|
|
56
58
|
* 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
59
|
*/
|
|
58
60
|
function BannerFunctionBodyDeclaration(props) {
|
|
59
|
-
const { consoleFnName = "log", variant = "primary", title, header, footer, description, command, children, insertNewlineBeforeCommand = false } = props;
|
|
61
|
+
const { consoleFnName = "log", variant = "primary", title, header, footer, description, command, children, insertNewlineBeforeCommand = false, insertNewlineBeforeBanner = true } = props;
|
|
60
62
|
const theme = useTheme();
|
|
61
63
|
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
64
|
const totalPadding = computed(() => Math.max(theme.padding.banner, 0) * 2 + bannerPadding.value);
|
|
@@ -67,12 +69,16 @@ function BannerFunctionBodyDeclaration(props) {
|
|
|
67
69
|
}
|
|
68
70
|
|
|
69
71
|
useApp().set("banner", true); `,
|
|
70
|
-
|
|
71
|
-
createIntrinsic("hbr", {}),
|
|
72
|
+
createComponent(Spacing, {}),
|
|
72
73
|
children,
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
74
|
+
createComponent(Spacing, {}),
|
|
75
|
+
createComponent(Show, {
|
|
76
|
+
when: insertNewlineBeforeBanner,
|
|
77
|
+
children: code`writeLine(""); `
|
|
78
|
+
}),
|
|
79
|
+
createComponent(Spacing, {}),
|
|
80
|
+
memo(() => code`
|
|
81
|
+
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} });
|
|
76
82
|
|
|
77
83
|
splitText(
|
|
78
84
|
${title ? `"${title}"` : "title"},
|
|
@@ -1 +1 @@
|
|
|
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","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 } 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 (useApp().get(\"banner\") || hasFlag(\"no-banner\") || hasFlag(\"hide-banner\") || isMinimal) {\n return;\n }\n\n useApp().set(\"banner\", true); `}\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(\"${\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","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\n 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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"}
|
|
@@ -2,6 +2,7 @@ const require_rolldown_runtime = require('../_virtual/rolldown_runtime.cjs');
|
|
|
2
2
|
let __alloy_js_core_jsx_runtime = require("@alloy-js/core/jsx-runtime");
|
|
3
3
|
let __alloy_js_core = require("@alloy-js/core");
|
|
4
4
|
let __alloy_js_typescript = require("@alloy-js/typescript");
|
|
5
|
+
let __powerlines_plugin_alloy_core_components_spacing = require("@powerlines/plugin-alloy/core/components/spacing");
|
|
5
6
|
let __powerlines_plugin_alloy_core_contexts_context = require("@powerlines/plugin-alloy/core/contexts/context");
|
|
6
7
|
let __shell_shock_core_plugin_utils_context_helpers = require("@shell-shock/core/plugin-utils/context-helpers");
|
|
7
8
|
let __powerlines_plugin_alloy_typescript_components_entry_file = require("@powerlines/plugin-alloy/typescript/components/entry-file");
|
|
@@ -19,8 +20,7 @@ defu = require_rolldown_runtime.__toESM(defu);
|
|
|
19
20
|
*/
|
|
20
21
|
function RunApplication() {
|
|
21
22
|
return [
|
|
22
|
-
(0, __alloy_js_core_jsx_runtime.
|
|
23
|
-
(0, __alloy_js_core_jsx_runtime.createIntrinsic)("hbr", {}),
|
|
23
|
+
(0, __alloy_js_core_jsx_runtime.createComponent)(__powerlines_plugin_alloy_core_components_spacing.Spacing, {}),
|
|
24
24
|
__alloy_js_core.code`// Run the application main logic inside an asynchronous IIFE
|
|
25
25
|
(async () => {
|
|
26
26
|
const startDate = new Date();
|
|
@@ -132,7 +132,6 @@ function BinEntry(props) {
|
|
|
132
132
|
"error",
|
|
133
133
|
"verbose",
|
|
134
134
|
"table",
|
|
135
|
-
"text",
|
|
136
135
|
"writeLine"
|
|
137
136
|
],
|
|
138
137
|
utils: [
|
|
@@ -151,11 +150,7 @@ function BinEntry(props) {
|
|
|
151
150
|
return Boolean(prefix);
|
|
152
151
|
},
|
|
153
152
|
get children() {
|
|
154
|
-
return [
|
|
155
|
-
prefix,
|
|
156
|
-
(0, __alloy_js_core_jsx_runtime.createIntrinsic)("hbr", {}),
|
|
157
|
-
(0, __alloy_js_core_jsx_runtime.createIntrinsic)("hbr", {})
|
|
158
|
-
];
|
|
153
|
+
return [prefix, (0, __alloy_js_core_jsx_runtime.createComponent)(__powerlines_plugin_alloy_core_components_spacing.Spacing, {})];
|
|
159
154
|
}
|
|
160
155
|
}),
|
|
161
156
|
(0, __alloy_js_core_jsx_runtime.createComponent)(__powerlines_plugin_alloy_typescript_components_tsdoc.TSDoc, { get heading() {
|
|
@@ -174,8 +169,7 @@ function BinEntry(props) {
|
|
|
174
169
|
return;`;
|
|
175
170
|
}
|
|
176
171
|
}),
|
|
177
|
-
(0, __alloy_js_core_jsx_runtime.
|
|
178
|
-
(0, __alloy_js_core_jsx_runtime.createIntrinsic)("hbr", {}),
|
|
172
|
+
(0, __alloy_js_core_jsx_runtime.createComponent)(__powerlines_plugin_alloy_core_components_spacing.Spacing, {}),
|
|
179
173
|
children,
|
|
180
174
|
(0, __alloy_js_core_jsx_runtime.createIntrinsic)("hbr", {})
|
|
181
175
|
];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bin-entry.cjs","names":["code","computed","For","Show","FunctionDeclaration","IfStatement","usePowerlines","EntryFile","TSDoc","getAppTitle","getUnique","findFileName","replaceExtension","pascalCase","defu","RunApplication","_$createIntrinsic","BinEntry","props","prefix","postfix","builtinImports","imports","children","rest","context","bins","Object","values","config","bin","
|
|
1
|
+
{"version":3,"file":"bin-entry.cjs","names":["code","computed","For","Show","FunctionDeclaration","IfStatement","Spacing","usePowerlines","EntryFile","TSDoc","getAppTitle","getUnique","findFileName","replaceExtension","pascalCase","defu","RunApplication","_$createComponent","_$createIntrinsic","BinEntry","props","prefix","postfix","builtinImports","imports","children","rest","context","bins","Object","values","config","bin","each","value","_$mergeProps","path","typeDefinition","file","output","didyoumean2","name","default","entries","commands","filter","command","isVirtual","reduce","ret","alias","console","utils","when","Boolean","heading","async","returnType","condition","packageJson","version","fallback"],"sources":["../../src/components/bin-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 { FunctionDeclaration, IfStatement } from \"@alloy-js/typescript\";\nimport { Spacing } from \"@powerlines/plugin-alloy/core/components/spacing\";\nimport { usePowerlines } from \"@powerlines/plugin-alloy/core/contexts/context\";\nimport type { TypescriptFileImports } from \"@powerlines/plugin-alloy/types/components\";\nimport type { EntryFileProps } from \"@powerlines/plugin-alloy/typescript/components/entry-file\";\nimport { EntryFile } from \"@powerlines/plugin-alloy/typescript/components/entry-file\";\nimport { TSDoc } from \"@powerlines/plugin-alloy/typescript/components/tsdoc\";\nimport { getAppTitle } from \"@shell-shock/core/plugin-utils/context-helpers\";\nimport { getUnique } from \"@stryke/helpers/get-unique\";\nimport { findFileName } from \"@stryke/path/file-path-fns\";\nimport { replaceExtension } from \"@stryke/path/replace\";\nimport { pascalCase } from \"@stryke/string-format/pascal-case\";\nimport defu from \"defu\";\nimport type { ScriptPresetContext } from \"../types/plugin\";\n\n/**\n * Runs the application main logic with proper exit handling.\n */\nexport function RunApplication() {\n return (\n <>\n <Spacing />\n {code`// Run the application main logic inside an asynchronous IIFE\n (async () => {\n const startDate = new Date();\n try {\n process.on(\"exit\", () => exit({\n startDate,\n skipExit: true,\n isSynchronous: true,\n signal: 0\n }));\n process.on(\"beforeExit\", () => exit({\n startDate,\n signal: 0\n }));\n process.on(\"message\", message => {\n if (message === 'shutdown') {\n exit({\n startDate,\n isSynchronous: true,\n signal: -128\n });\n }\n });\n\n process.once(\"SIGTERM\", () => exit({\n startDate,\n signal: 15\n }));\n process.once(\"SIGINT\", () => exit({\n startDate,\n signal: 2\n }));\n process.once(\"SIGUSR2\", () => {\n verbose(\"The application was terminated by the user\");\n return exit({\n startDate,\n signal: 12\n });\n });\n process.once(\"SIGQUIT\", () => {\n verbose(\"The application was terminated by the user\");\n return exit({\n startDate,\n signal: 12\n });\n });\n\n for (const type of [\"unhandledRejection\", \"uncaughtException\"]) {\n process.on(type, err => exit({\n startDate,\n exception: err || new Error(\\`An \\${type === \"unhandledRejection\" ? \"unhandled promise rejection\" : \"uncaught exception\"} occurred during processing - the application is shutting down.\\`)\n }));\n }\n\n await internal_appContext.run(new Map([[\"args\", getArgs()]]), async () => {\n const result = await main();\n if (result?.error) {\n error(result.error);\n }\n });\n\n exit({ startDate });\n } catch (err) {\n exit({ startDate, exception: err as Error });\n }\n })();\n `}\n <hbr />\n </>\n );\n}\n\nexport interface BinEntryProps\n extends Omit<EntryFileProps, \"path\" | \"hashbang\"> {\n prefix?: Children;\n postfix?: Children;\n children: Children;\n}\n\n/**\n * The binary entry point for the Shell Shock project.\n */\nexport function BinEntry(props: BinEntryProps) {\n const { prefix, postfix, builtinImports, imports, children, ...rest } = props;\n\n const context = usePowerlines<ScriptPresetContext>();\n const bins = computed(() => getUnique(Object.values(context.config.bin)));\n\n return (\n <For each={bins.value}>\n {bin => (\n <EntryFile\n {...rest}\n path={findFileName(replaceExtension(bin))}\n typeDefinition={{\n file: bin,\n output: \"bin\"\n }}\n imports={defu(\n {\n didyoumean2: [\n { name: \"didYouMean\", default: true },\n { name: \"ReturnTypeEnums\" },\n { name: \"ThresholdTypeEnums\" }\n ]\n },\n imports ?? {},\n Object.entries(context.commands)\n .filter(([, command]) => command.isVirtual)\n .reduce((ret, [name, command]) => {\n ret[`./${command.name}`] = [\n { name: \"handler\", alias: `handle${pascalCase(name)}` }\n ];\n\n return ret;\n }, {} as TypescriptFileImports)\n )}\n builtinImports={defu(builtinImports ?? {}, {\n console: [\"error\", \"verbose\", \"table\", \"writeLine\"],\n utils: [\n \"hasFlag\",\n \"exit\",\n \"isUnicodeSupported\",\n \"internal_appContext\",\n \"getArgs\"\n ]\n })}>\n <Show when={Boolean(prefix)}>\n {prefix}\n <Spacing />\n </Show>\n <TSDoc\n heading={`Binary entry point for the ${getAppTitle(\n context\n )} CLI application.`}></TSDoc>\n <FunctionDeclaration async returnType=\"any\" name=\"main\">\n <IfStatement condition={code`hasFlag([\"version\", \"v\"])`}>\n {code`console.log(${\n context?.packageJson.version\n ? `\"${context?.packageJson.version}\"`\n : \"0.0.1\"\n });\n return;`}\n </IfStatement>\n <Spacing />\n {children}\n <hbr />\n </FunctionDeclaration>\n <hbr />\n <hbr />\n <hbr />\n <Show when={Boolean(postfix)} fallback={<RunApplication />}>\n {postfix}\n </Show>\n <hbr />\n </EntryFile>\n )}\n </For>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAsCA,SAAgBgB,iBAAiB;AAC/B,QAAA;mDAEKV,2DAAO,EAAA,CAAA;EACPN,oBAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mDAkEJ,OAAA,EAAA,CAAA;EAAA;;;;;AAgBP,SAAgBmB,SAASC,OAAsB;CAC7C,MAAM,EAAEC,QAAQC,SAASC,gBAAgBC,SAASC,UAAU,GAAGC,SAASN;CAExE,MAAMO,8EAA8C;CACpD,MAAMC,sFAAgCC,OAAOC,OAAOH,QAAQI,OAAOC,IAAI,CAAC,CAAC;AAEzE,yDACG9B,qBAAG;EAAA,IAAC+B,OAAI;AAAA,UAAEL,KAAKM;;EAAKT,WAClBO,yDACExB,kHACKkB,MAAI;GAAA,IACRU,OAAI;AAAA,qGAAgCJ,IAAI,CAAC;;GACzCK,gBAAgB;IACdC,MAAMN;IACNO,QAAQ;IACT;GAAA,IACDf,UAAO;AAAA,6BACL,EACEgB,aAAa;KACX;MAAEC,MAAM;MAAcC,SAAS;MAAM;KACrC,EAAED,MAAM,mBAAmB;KAC3B,EAAEA,MAAM,sBAAsB;KAAA,EAEjC,EACDjB,WAAW,EAAE,EACbK,OAAOc,QAAQhB,QAAQiB,SAAS,CAC7BC,QAAQ,GAAGC,aAAaA,QAAQC,UAAU,CAC1CC,QAAQC,KAAK,CAACR,MAAMK,aAAa;AAChCG,SAAI,KAAKH,QAAQL,UAAU,CACzB;MAAEA,MAAM;MAAWS,OAAO,4DAAoBT,KAAK;MAAI,CACxD;AAED,YAAOQ;OACN,EAA2B,CAClC,CAAC;;GAAA,IACD1B,iBAAc;AAAA,6BAAOA,kBAAkB,EAAE,EAAE;KACzC4B,SAAS;MAAC;MAAS;MAAW;MAAS;MAAY;KACnDC,OAAO;MACL;MACA;MACA;MACA;MACA;MAAS;KAEZ,CAAC;;GAAA,IAAA3B,WAAA;AAAA,WAAA;sDACDtB,sBAAI;MAAA,IAACkD,OAAI;AAAA,cAAEC,QAAQjC,OAAO;;MAAA,IAAAI,WAAA;AAAA,cAAA,CACxBJ,yDACAf,2DAAO,EAAA,CAAA,CAAA;;MAAA,CAAA;sDAETG,6DAAK,EAAA,IACJ8C,UAAO;AAAA,aAAE,+FACP5B,QACD,CAAA;QAAmB,CAAA;sDACrBvB,2CAAmB;MAACoD,OAAK;MAACC,YAAU;MAAOhB,MAAI;MAAA,IAAAhB,WAAA;AAAA,cAAA;yDAC7CpB,mCAAW;SAACqD,WAAW1D,oBAAI;SAA2B,IAAAyB,WAAA;AAAA,iBACpDzB,oBAAI,eACH2B,SAASgC,YAAYC,UACjB,IAAIjC,SAASgC,YAAYC,QAAO,KAChC,QAAO;;;SAET,CAAA;yDAELtD,2DAAO,EAAA,CAAA;QACPmB;yDAAQ,OAAA,EAAA,CAAA;QAAA;;MAAA,CAAA;sDAAA,OAAA,EAAA,CAAA;sDAAA,OAAA,EAAA,CAAA;sDAAA,OAAA,EAAA,CAAA;sDAMVtB,sBAAI;MAAA,IAACkD,OAAI;AAAA,cAAEC,QAAQhC,QAAQ;;MAAA,IAAEuC,WAAQ;AAAA,+DAAG7C,gBAAc,EAAA,CAAA;;MAAAS,UACpDH;MAAO,CAAA;sDAAA,OAAA,EAAA,CAAA;KAAA;;GAAA,CAAA,CAAA;EAIb,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bin-entry.d.cts","names":[],"sources":["../../src/components/bin-entry.tsx"],"sourcesContent":[],"mappings":";;;;;;;
|
|
1
|
+
{"version":3,"file":"bin-entry.d.cts","names":[],"sources":["../../src/components/bin-entry.tsx"],"sourcesContent":[],"mappings":";;;;;;;AAsCA;AA4EiB,iBA5ED,cAAA,CAAA,CA6Ed,EA7E4B,QA6E5B;AAAa,UADE,aAAA,SACP,IAAK,CAAA,cAAA,EAAA,MAAA,GAAA,UAAA,CAAA,CAAA;EACJ,MAAA,CAAA,EAAA,QAAA;EACC,OAAA,CAAA,EAAA,QAAA;EACA,QAAA,EAAA,QAAA;;;AAMZ;;iBAAgB,QAAA,QAAgB,gBAAa"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bin-entry.d.mts","names":[],"sources":["../../src/components/bin-entry.tsx"],"sourcesContent":[],"mappings":";;;;;;;
|
|
1
|
+
{"version":3,"file":"bin-entry.d.mts","names":[],"sources":["../../src/components/bin-entry.tsx"],"sourcesContent":[],"mappings":";;;;;;;AAsCA;AA4EiB,iBA5ED,cAAA,CAAA,CA6Ed,EA7E4B,QA6E5B;AAAa,UADE,aAAA,SACP,IAAK,CAAA,cAAA,EAAA,MAAA,GAAA,UAAA,CAAA,CAAA;EACJ,MAAA,CAAA,EAAA,QAAA;EACC,OAAA,CAAA,EAAA,QAAA;EACA,QAAA,EAAA,QAAA;;;AAMZ;;iBAAgB,QAAA,QAAgB,gBAAa"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { createComponent, createIntrinsic, memo, mergeProps } from "@alloy-js/core/jsx-runtime";
|
|
2
2
|
import { For, Show, code, computed } from "@alloy-js/core";
|
|
3
3
|
import { FunctionDeclaration, IfStatement } from "@alloy-js/typescript";
|
|
4
|
+
import { Spacing } from "@powerlines/plugin-alloy/core/components/spacing";
|
|
4
5
|
import { usePowerlines } from "@powerlines/plugin-alloy/core/contexts/context";
|
|
5
6
|
import { getAppTitle } from "@shell-shock/core/plugin-utils/context-helpers";
|
|
6
7
|
import { EntryFile } from "@powerlines/plugin-alloy/typescript/components/entry-file";
|
|
@@ -17,8 +18,7 @@ import defu from "defu";
|
|
|
17
18
|
*/
|
|
18
19
|
function RunApplication() {
|
|
19
20
|
return [
|
|
20
|
-
|
|
21
|
-
createIntrinsic("hbr", {}),
|
|
21
|
+
createComponent(Spacing, {}),
|
|
22
22
|
code`// Run the application main logic inside an asynchronous IIFE
|
|
23
23
|
(async () => {
|
|
24
24
|
const startDate = new Date();
|
|
@@ -130,7 +130,6 @@ function BinEntry(props) {
|
|
|
130
130
|
"error",
|
|
131
131
|
"verbose",
|
|
132
132
|
"table",
|
|
133
|
-
"text",
|
|
134
133
|
"writeLine"
|
|
135
134
|
],
|
|
136
135
|
utils: [
|
|
@@ -149,11 +148,7 @@ function BinEntry(props) {
|
|
|
149
148
|
return Boolean(prefix);
|
|
150
149
|
},
|
|
151
150
|
get children() {
|
|
152
|
-
return [
|
|
153
|
-
prefix,
|
|
154
|
-
createIntrinsic("hbr", {}),
|
|
155
|
-
createIntrinsic("hbr", {})
|
|
156
|
-
];
|
|
151
|
+
return [prefix, createComponent(Spacing, {})];
|
|
157
152
|
}
|
|
158
153
|
}),
|
|
159
154
|
createComponent(TSDoc, { get heading() {
|
|
@@ -172,8 +167,7 @@ function BinEntry(props) {
|
|
|
172
167
|
return;`;
|
|
173
168
|
}
|
|
174
169
|
}),
|
|
175
|
-
|
|
176
|
-
createIntrinsic("hbr", {}),
|
|
170
|
+
createComponent(Spacing, {}),
|
|
177
171
|
children,
|
|
178
172
|
createIntrinsic("hbr", {})
|
|
179
173
|
];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bin-entry.mjs","names":["code","computed","For","Show","FunctionDeclaration","IfStatement","usePowerlines","EntryFile","TSDoc","getAppTitle","getUnique","findFileName","replaceExtension","pascalCase","defu","RunApplication","_$createIntrinsic","BinEntry","props","prefix","postfix","builtinImports","imports","children","rest","context","bins","Object","values","config","bin","
|
|
1
|
+
{"version":3,"file":"bin-entry.mjs","names":["code","computed","For","Show","FunctionDeclaration","IfStatement","Spacing","usePowerlines","EntryFile","TSDoc","getAppTitle","getUnique","findFileName","replaceExtension","pascalCase","defu","RunApplication","_$createComponent","_$createIntrinsic","BinEntry","props","prefix","postfix","builtinImports","imports","children","rest","context","bins","Object","values","config","bin","each","value","_$mergeProps","path","typeDefinition","file","output","didyoumean2","name","default","entries","commands","filter","command","isVirtual","reduce","ret","alias","console","utils","when","Boolean","heading","async","returnType","condition","packageJson","version","fallback"],"sources":["../../src/components/bin-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 { FunctionDeclaration, IfStatement } from \"@alloy-js/typescript\";\nimport { Spacing } from \"@powerlines/plugin-alloy/core/components/spacing\";\nimport { usePowerlines } from \"@powerlines/plugin-alloy/core/contexts/context\";\nimport type { TypescriptFileImports } from \"@powerlines/plugin-alloy/types/components\";\nimport type { EntryFileProps } from \"@powerlines/plugin-alloy/typescript/components/entry-file\";\nimport { EntryFile } from \"@powerlines/plugin-alloy/typescript/components/entry-file\";\nimport { TSDoc } from \"@powerlines/plugin-alloy/typescript/components/tsdoc\";\nimport { getAppTitle } from \"@shell-shock/core/plugin-utils/context-helpers\";\nimport { getUnique } from \"@stryke/helpers/get-unique\";\nimport { findFileName } from \"@stryke/path/file-path-fns\";\nimport { replaceExtension } from \"@stryke/path/replace\";\nimport { pascalCase } from \"@stryke/string-format/pascal-case\";\nimport defu from \"defu\";\nimport type { ScriptPresetContext } from \"../types/plugin\";\n\n/**\n * Runs the application main logic with proper exit handling.\n */\nexport function RunApplication() {\n return (\n <>\n <Spacing />\n {code`// Run the application main logic inside an asynchronous IIFE\n (async () => {\n const startDate = new Date();\n try {\n process.on(\"exit\", () => exit({\n startDate,\n skipExit: true,\n isSynchronous: true,\n signal: 0\n }));\n process.on(\"beforeExit\", () => exit({\n startDate,\n signal: 0\n }));\n process.on(\"message\", message => {\n if (message === 'shutdown') {\n exit({\n startDate,\n isSynchronous: true,\n signal: -128\n });\n }\n });\n\n process.once(\"SIGTERM\", () => exit({\n startDate,\n signal: 15\n }));\n process.once(\"SIGINT\", () => exit({\n startDate,\n signal: 2\n }));\n process.once(\"SIGUSR2\", () => {\n verbose(\"The application was terminated by the user\");\n return exit({\n startDate,\n signal: 12\n });\n });\n process.once(\"SIGQUIT\", () => {\n verbose(\"The application was terminated by the user\");\n return exit({\n startDate,\n signal: 12\n });\n });\n\n for (const type of [\"unhandledRejection\", \"uncaughtException\"]) {\n process.on(type, err => exit({\n startDate,\n exception: err || new Error(\\`An \\${type === \"unhandledRejection\" ? \"unhandled promise rejection\" : \"uncaught exception\"} occurred during processing - the application is shutting down.\\`)\n }));\n }\n\n await internal_appContext.run(new Map([[\"args\", getArgs()]]), async () => {\n const result = await main();\n if (result?.error) {\n error(result.error);\n }\n });\n\n exit({ startDate });\n } catch (err) {\n exit({ startDate, exception: err as Error });\n }\n })();\n `}\n <hbr />\n </>\n );\n}\n\nexport interface BinEntryProps\n extends Omit<EntryFileProps, \"path\" | \"hashbang\"> {\n prefix?: Children;\n postfix?: Children;\n children: Children;\n}\n\n/**\n * The binary entry point for the Shell Shock project.\n */\nexport function BinEntry(props: BinEntryProps) {\n const { prefix, postfix, builtinImports, imports, children, ...rest } = props;\n\n const context = usePowerlines<ScriptPresetContext>();\n const bins = computed(() => getUnique(Object.values(context.config.bin)));\n\n return (\n <For each={bins.value}>\n {bin => (\n <EntryFile\n {...rest}\n path={findFileName(replaceExtension(bin))}\n typeDefinition={{\n file: bin,\n output: \"bin\"\n }}\n imports={defu(\n {\n didyoumean2: [\n { name: \"didYouMean\", default: true },\n { name: \"ReturnTypeEnums\" },\n { name: \"ThresholdTypeEnums\" }\n ]\n },\n imports ?? {},\n Object.entries(context.commands)\n .filter(([, command]) => command.isVirtual)\n .reduce((ret, [name, command]) => {\n ret[`./${command.name}`] = [\n { name: \"handler\", alias: `handle${pascalCase(name)}` }\n ];\n\n return ret;\n }, {} as TypescriptFileImports)\n )}\n builtinImports={defu(builtinImports ?? {}, {\n console: [\"error\", \"verbose\", \"table\", \"writeLine\"],\n utils: [\n \"hasFlag\",\n \"exit\",\n \"isUnicodeSupported\",\n \"internal_appContext\",\n \"getArgs\"\n ]\n })}>\n <Show when={Boolean(prefix)}>\n {prefix}\n <Spacing />\n </Show>\n <TSDoc\n heading={`Binary entry point for the ${getAppTitle(\n context\n )} CLI application.`}></TSDoc>\n <FunctionDeclaration async returnType=\"any\" name=\"main\">\n <IfStatement condition={code`hasFlag([\"version\", \"v\"])`}>\n {code`console.log(${\n context?.packageJson.version\n ? `\"${context?.packageJson.version}\"`\n : \"0.0.1\"\n });\n return;`}\n </IfStatement>\n <Spacing />\n {children}\n <hbr />\n </FunctionDeclaration>\n <hbr />\n <hbr />\n <hbr />\n <Show when={Boolean(postfix)} fallback={<RunApplication />}>\n {postfix}\n </Show>\n <hbr />\n </EntryFile>\n )}\n </For>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAsCA,SAAgBgB,iBAAiB;AAC/B,QAAA;EAAAC,gBAEKX,SAAO,EAAA,CAAA;EACPN,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAkEJkB,gBAAA,OAAA,EAAA,CAAA;EAAA;;;;;AAgBP,SAAgBC,SAASC,OAAsB;CAC7C,MAAM,EAAEC,QAAQC,SAASC,gBAAgBC,SAASC,UAAU,GAAGC,SAASN;CAExE,MAAMO,UAAUpB,eAAoC;CACpD,MAAMqB,OAAO3B,eAAeU,UAAUkB,OAAOC,OAAOH,QAAQI,OAAOC,IAAI,CAAC,CAAC;AAEzE,QAAAf,gBACGf,KAAG;EAAA,IAAC+B,OAAI;AAAA,UAAEL,KAAKM;;EAAKT,WAClBO,QAAGf,gBACDT,WAAS2B,WACJT,MAAI;GAAA,IACRU,OAAI;AAAA,WAAExB,aAAaC,iBAAiBmB,IAAI,CAAC;;GACzCK,gBAAgB;IACdC,MAAMN;IACNO,QAAQ;IACT;GAAA,IACDf,UAAO;AAAA,WAAET,KACP,EACEyB,aAAa;KACX;MAAEC,MAAM;MAAcC,SAAS;MAAM;KACrC,EAAED,MAAM,mBAAmB;KAC3B,EAAEA,MAAM,sBAAsB;KAAA,EAEjC,EACDjB,WAAW,EAAE,EACbK,OAAOc,QAAQhB,QAAQiB,SAAS,CAC7BC,QAAQ,GAAGC,aAAaA,QAAQC,UAAU,CAC1CC,QAAQC,KAAK,CAACR,MAAMK,aAAa;AAChCG,SAAI,KAAKH,QAAQL,UAAU,CACzB;MAAEA,MAAM;MAAWS,OAAO,SAASpC,WAAW2B,KAAK;MAAI,CACxD;AAED,YAAOQ;OACN,EAA2B,CAClC,CAAC;;GAAA,IACD1B,iBAAc;AAAA,WAAER,KAAKQ,kBAAkB,EAAE,EAAE;KACzC4B,SAAS;MAAC;MAAS;MAAW;MAAS;MAAY;KACnDC,OAAO;MACL;MACA;MACA;MACA;MACA;MAAS;KAEZ,CAAC;;GAAA,IAAA3B,WAAA;AAAA,WAAA;KAAAR,gBACDd,MAAI;MAAA,IAACkD,OAAI;AAAA,cAAEC,QAAQjC,OAAO;;MAAA,IAAAI,WAAA;AAAA,cAAA,CACxBJ,QAAMJ,gBACNX,SAAO,EAAA,CAAA,CAAA;;MAAA,CAAA;KAAAW,gBAETR,OAAK,EAAA,IACJ8C,UAAO;AAAA,aAAE,8BAA8B7C,YACrCiB,QACD,CAAA;QAAmB,CAAA;KAAAV,gBACrBb,qBAAmB;MAACoD,OAAK;MAACC,YAAU;MAAOhB,MAAI;MAAA,IAAAhB,WAAA;AAAA,cAAA;QAAAR,gBAC7CZ,aAAW;SAACqD,WAAW1D,IAAI;SAA2B,IAAAyB,WAAA;AAAA,iBACpDzB,IAAI,eACH2B,SAASgC,YAAYC,UACjB,IAAIjC,SAASgC,YAAYC,QAAO,KAChC,QAAO;;;SAET,CAAA;QAAA3C,gBAELX,SAAO,EAAA,CAAA;QACPmB;QAAQP,gBAAA,OAAA,EAAA,CAAA;QAAA;;MAAA,CAAA;KAAAA,gBAAA,OAAA,EAAA,CAAA;KAAAA,gBAAA,OAAA,EAAA,CAAA;KAAAA,gBAAA,OAAA,EAAA,CAAA;KAAAD,gBAMVd,MAAI;MAAA,IAACkD,OAAI;AAAA,cAAEC,QAAQhC,QAAQ;;MAAA,IAAEuC,WAAQ;AAAA,cAAA5C,gBAAGD,gBAAc,EAAA,CAAA;;MAAAS,UACpDH;MAAO,CAAA;KAAAJ,gBAAA,OAAA,EAAA,CAAA;KAAA;;GAAA,CAAA,CAAA;EAIb,CAAA"}
|