@shell-shock/preset-cli 0.7.6 → 0.7.7

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.
@@ -68,6 +68,7 @@ function BannerFunctionDeclaration(props) {
68
68
  variant,
69
69
  consoleFnName,
70
70
  command,
71
+ insertNewlineAfterDescription: true,
71
72
  get children() {
72
73
  return __alloy_js_core.code`const titleLines = [${titleLines.value.map((line) => JSON.stringify(line.trim())).join(", ")}];
73
74
  const title = Math.max(...titleLines.map(line => stripAnsi(line).length)) > Math.max(process.stdout.columns - ${totalPadding.value}, 0) ? "${title.value}" : \`\\n\${titleLines.join("\\n")}\\n\`; `;
@@ -176,7 +177,9 @@ function BannerFunctionDeclaration(props) {
176
177
  }
177
178
  }),
178
179
  (0, __alloy_js_core_jsx_runtime.createComponent)(__alloy_js_typescript.ElseClause, { get children() {
179
- return __alloy_js_core.code`spinner.success("Currently running the latest version of ${(0, __shell_shock_core_plugin_utils_context_helpers.getAppTitle)(context, true)}.");`;
180
+ return __alloy_js_core.code`spinner.success("Currently running the latest version of ${(0, __shell_shock_core_plugin_utils_context_helpers.getAppTitle)(context, true)}.");
181
+ writeLine("");
182
+ `;
180
183
  } })
181
184
  ];
182
185
  }
@@ -1,11 +1,11 @@
1
- import * as _alloy_js_core3 from "@alloy-js/core";
1
+ import * as _alloy_js_core1 from "@alloy-js/core";
2
2
  import { BannerFunctionDeclarationProps } from "@shell-shock/preset-script/components/banner-function-declaration";
3
3
 
4
4
  //#region src/components/banner-function-declaration.d.ts
5
5
  /**
6
6
  * A component to generate the `banner` function in the `shell-shock:console` builtin module.
7
7
  */
8
- declare function BannerFunctionDeclaration(props: BannerFunctionDeclarationProps): _alloy_js_core3.Children;
8
+ declare function BannerFunctionDeclaration(props: BannerFunctionDeclarationProps): _alloy_js_core1.Children;
9
9
  //#endregion
10
10
  export { BannerFunctionDeclaration };
11
11
  //# sourceMappingURL=banner-function-declaration.d.cts.map
@@ -67,6 +67,7 @@ function BannerFunctionDeclaration(props) {
67
67
  variant,
68
68
  consoleFnName,
69
69
  command,
70
+ insertNewlineAfterDescription: true,
70
71
  get children() {
71
72
  return code`const titleLines = [${titleLines.value.map((line) => JSON.stringify(line.trim())).join(", ")}];
72
73
  const title = Math.max(...titleLines.map(line => stripAnsi(line).length)) > Math.max(process.stdout.columns - ${totalPadding.value}, 0) ? "${title.value}" : \`\\n\${titleLines.join("\\n")}\\n\`; `;
@@ -175,7 +176,9 @@ function BannerFunctionDeclaration(props) {
175
176
  }
176
177
  }),
177
178
  createComponent(ElseClause, { get children() {
178
- return code`spinner.success("Currently running the latest version of ${getAppTitle(context, true)}.");`;
179
+ return code`spinner.success("Currently running the latest version of ${getAppTitle(context, true)}.");
180
+ writeLine("");
181
+ `;
179
182
  } })
180
183
  ];
181
184
  }
@@ -1 +1 @@
1
- {"version":3,"file":"banner-function-declaration.mjs","names":["code","computed","Show","ElseClause","ElseIfClause","FunctionDeclaration","IfStatement","VarDeclaration","Spacing","usePowerlines","getAppBin","getAppDescription","getAppTitle","useTheme","BannerFunctionBodyDeclaration","render","BannerFunctionDeclaration","props","consoleFnName","variant","command","theme","context","header","labels","banner","packageJson","version","footer","title","replace","description","titleLines","result","font","align","background","letterSpacing","lineHeight","gradient","transitionGradient","env","array","bannerPadding","Math","max","padding","app","borderStyles","outline","left","length","right","totalPadding","value","_$createComponent","async","name","doc","parameters","type","default","config","upgrade","children","map","line","JSON","stringify","trim","join","condition","when","initializer","fallback","_$memo"],"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, Show } from \"@alloy-js/core\";\nimport {\n ElseClause,\n ElseIfClause,\n FunctionDeclaration,\n IfStatement,\n VarDeclaration\n} from \"@alloy-js/typescript\";\nimport { Spacing } from \"@powerlines/plugin-alloy/core/components/spacing\";\nimport { usePowerlines } from \"@powerlines/plugin-alloy/core/contexts/context\";\nimport {\n getAppBin,\n getAppDescription,\n getAppTitle\n} from \"@shell-shock/core/plugin-utils/context-helpers\";\nimport { useTheme } from \"@shell-shock/plugin-theme/contexts/theme\";\nimport type { BannerFunctionDeclarationProps } from \"@shell-shock/preset-script/components/banner-function-declaration\";\nimport { BannerFunctionBodyDeclaration } from \"@shell-shock/preset-script/components/banner-function-declaration\";\nimport { render } from \"cfonts\";\nimport type { CLIPresetContext } from \"../types/plugin\";\n\n/**\n * A component to generate the `banner` function in the `shell-shock:console` builtin module.\n */\nexport function BannerFunctionDeclaration(\n props: BannerFunctionDeclarationProps\n) {\n const { consoleFnName = \"log\", variant = \"primary\", command } = props;\n\n const theme = useTheme();\n\n const context = usePowerlines<CLIPresetContext>();\n\n const header = computed(\n () =>\n `${theme.labels.banner.header[variant] || getAppTitle(context)} v${\n context.packageJson.version || \"1.0.0\"\n }`\n );\n const footer = computed(() => theme.labels.banner.footer[variant]);\n const title = computed(() =>\n getAppTitle(context, true).replace(\n `v${context.packageJson.version || \"1.0.0\"}`,\n \"\"\n )\n );\n const description = computed(\n () => command?.description || getAppDescription(context)\n );\n\n const titleLines = computed(() => {\n const result = render(getAppTitle(context, true), {\n font: \"tiny\",\n align: \"left\",\n background: \"transparent\",\n letterSpacing: 1,\n lineHeight: 1,\n gradient: false,\n transitionGradient: false,\n env: \"node\"\n });\n if (!result) {\n return [`${getAppTitle(context, true)} Command-Line Interface`];\n }\n\n return result.array;\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 async\n name=\"banner\"\n doc={`Write the ${getAppTitle(context, true)} application banner ${\n command ? `for the ${command.title} command ` : \"\"\n }to the console.`}\n parameters={[\n { name: \"pause\", type: \"number\", default: 500 },\n {\n name: \"upgradeCheck\",\n default: context.config.upgrade !== false ? \"true\" : \"false\"\n }\n ]}>\n <BannerFunctionBodyDeclaration\n header={header.value}\n description={description.value}\n footer={footer.value}\n variant={variant}\n consoleFnName={consoleFnName}\n command={command}>\n {code`const titleLines = [${titleLines.value\n .map(line => JSON.stringify(line.trim()))\n .join(\", \")}];\n const title = Math.max(...titleLines.map(line => stripAnsi(line).length)) > Math.max(process.stdout.columns - ${\n totalPadding.value\n }, 0) ? \"${title.value}\" : \\`\\\\n\\${titleLines.join(\"\\\\n\")}\\\\n\\`; `}\n </BannerFunctionBodyDeclaration>\n <IfStatement condition={code`isInteractive && !isHelp`}>\n {code`await sleep(pause);`}\n </IfStatement>\n <Show when={context.config.upgrade !== false}>\n <IfStatement\n condition={code`upgradeCheck && (await isCheckForUpdatesRequired())`}>\n <VarDeclaration\n const\n name=\"spinner\"\n initializer={code`createSpinner({\n message: \"Checking for updates...\"\n }).start(); `}\n />\n <VarDeclaration\n const\n name=\"result\"\n initializer={code`await checkForUpdates({ force: true }); `}\n />\n <IfStatement condition={code`!result.isUpToDate`}>\n <Show\n when={\n context.config.upgrade !== false &&\n (context.config.upgrade.type === \"confirm\" ||\n context.config.upgrade.type === \"manual\")\n }\n fallback={\n <>\n {code`spinner.stop();\n info(\\`A new version of ${getAppTitle(\n context,\n true\n )} is available: \\${colors.red(\\`v\\${result.currentVersion}\\`)} \\${colors.text.body.tertiary(\"➜\")} \\${colors.green(\\`v\\${result.latestVersion}\\`)}\\${result.package.date ? colors.text.body.tertiary(\\` (updated on \\${result.package.date})\\`) : \"\"}\\`);\n\n try {\n await upgrade();\n spinner.success(\"Update successful! Please restart the application to apply the update.\");\n\n writeLine(\"\");\n writeLine(\"Press any key to exit application...\");\n\n await waitForKeyPress();\n return;\n } catch (err) {\n spinner.error(\\`An error occurred while updating ${getAppTitle(\n context,\n true\n )} to v\\${result.latestVersion}. Please try again later - if the problem persists, please contact support.\\`);\n debug(err);\n } `}\n <Spacing />\n </>\n }>\n {code`spinner.stop();\n warn(\\`A new version of ${getAppTitle(\n context,\n true\n )} is available: \\${colors.red(\\`v\\${result.currentVersion}\\`)} \\${colors.text.body.tertiary(\"➜\")} \\${colors.green(\\`v\\${result.latestVersion}\\`)}\\${result.package.date ? colors.text.body.tertiary(\\` (updated on \\${result.package.date})\\`) : \"\"}${\n context.config.upgrade !== false &&\n context.config.upgrade.type === \"manual\"\n ? ` \\\\nPlease run \\`${getAppBin(\n context\n )} update\\` to upgrade to the latest version.`\n : \"\"\n }\\`); `}\n <Spacing />\n <Show\n when={\n context.config.upgrade !== false &&\n context.config.upgrade.type === \"confirm\"\n }>\n {code`const willUpgradeNow = await confirm({\n message: \\`Would you like to update to v\\${result.latestVersion} now?\\`,\n initialValue: true\n });\n if (isCancel(willUpgradeNow)) {\n return;\n }\n\n if (willUpgradeNow) {\n spinner.text = \\`Updating ${getAppTitle(\n context,\n true\n )} to v\\${result.latestVersion}...\\`;\n spinner.start();\n\n try {\n await upgrade();\n spinner.success(\"Update successful! Please restart the application to apply the update.\");\n\n writeLine(\"\");\n writeLine(\"Press any key to exit application...\");\n\n await waitForKeyPress();\n return;\n } catch (err) {\n spinner.error(\\`An error occurred while updating ${getAppTitle(\n context,\n true\n )} to v\\${result.latestVersion}. Please try again later - if the problem persists, please contact support.\\`);\n return { error: err };\n }\n } else {\n help(\"Updates can be performed at any time by running the \\`${getAppBin(\n context\n )} update\\` command. Please remember that keeping your application up to date is important for ensuring you have the latest features, performance improvements, and security patches.\");\n } `}\n </Show>\n </Show>\n </IfStatement>\n <ElseIfClause condition={code`result.isError`}>\n {code`spinner.error(\\`An error occurred while checking for ${getAppTitle(\n context,\n true\n )} application updates. Please try again later - if the problem persists, please contact support.\\`);\n debug(result.error); `}\n </ElseIfClause>\n <ElseClause>{code`spinner.success(\"Currently running the latest version of ${getAppTitle(\n context,\n true\n )}.\");`}</ElseClause>\n </IfStatement>\n </Show>\n </FunctionDeclaration>\n </>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"banner-function-declaration.mjs","names":["code","computed","Show","ElseClause","ElseIfClause","FunctionDeclaration","IfStatement","VarDeclaration","Spacing","usePowerlines","getAppBin","getAppDescription","getAppTitle","useTheme","BannerFunctionBodyDeclaration","render","BannerFunctionDeclaration","props","consoleFnName","variant","command","theme","context","header","labels","banner","packageJson","version","footer","title","replace","description","titleLines","result","font","align","background","letterSpacing","lineHeight","gradient","transitionGradient","env","array","bannerPadding","Math","max","padding","app","borderStyles","outline","left","length","right","totalPadding","value","_$createComponent","async","name","doc","parameters","type","default","config","upgrade","children","insertNewlineAfterDescription","map","line","JSON","stringify","trim","join","condition","when","initializer","fallback","_$memo"],"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, Show } from \"@alloy-js/core\";\nimport {\n ElseClause,\n ElseIfClause,\n FunctionDeclaration,\n IfStatement,\n VarDeclaration\n} from \"@alloy-js/typescript\";\nimport { Spacing } from \"@powerlines/plugin-alloy/core/components/spacing\";\nimport { usePowerlines } from \"@powerlines/plugin-alloy/core/contexts/context\";\nimport {\n getAppBin,\n getAppDescription,\n getAppTitle\n} from \"@shell-shock/core/plugin-utils/context-helpers\";\nimport { useTheme } from \"@shell-shock/plugin-theme/contexts/theme\";\nimport type { BannerFunctionDeclarationProps } from \"@shell-shock/preset-script/components/banner-function-declaration\";\nimport { BannerFunctionBodyDeclaration } from \"@shell-shock/preset-script/components/banner-function-declaration\";\nimport { render } from \"cfonts\";\nimport type { CLIPresetContext } from \"../types/plugin\";\n\n/**\n * A component to generate the `banner` function in the `shell-shock:console` builtin module.\n */\nexport function BannerFunctionDeclaration(\n props: BannerFunctionDeclarationProps\n) {\n const { consoleFnName = \"log\", variant = \"primary\", command } = props;\n\n const theme = useTheme();\n\n const context = usePowerlines<CLIPresetContext>();\n\n const header = computed(\n () =>\n `${theme.labels.banner.header[variant] || getAppTitle(context)} v${\n context.packageJson.version || \"1.0.0\"\n }`\n );\n const footer = computed(() => theme.labels.banner.footer[variant]);\n const title = computed(() =>\n getAppTitle(context, true).replace(\n `v${context.packageJson.version || \"1.0.0\"}`,\n \"\"\n )\n );\n const description = computed(\n () => command?.description || getAppDescription(context)\n );\n\n const titleLines = computed(() => {\n const result = render(getAppTitle(context, true), {\n font: \"tiny\",\n align: \"left\",\n background: \"transparent\",\n letterSpacing: 1,\n lineHeight: 1,\n gradient: false,\n transitionGradient: false,\n env: \"node\"\n });\n if (!result) {\n return [`${getAppTitle(context, true)} Command-Line Interface`];\n }\n\n return result.array;\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 async\n name=\"banner\"\n doc={`Write the ${getAppTitle(context, true)} application banner ${\n command ? `for the ${command.title} command ` : \"\"\n }to the console.`}\n parameters={[\n { name: \"pause\", type: \"number\", default: 500 },\n {\n name: \"upgradeCheck\",\n default: context.config.upgrade !== false ? \"true\" : \"false\"\n }\n ]}>\n <BannerFunctionBodyDeclaration\n header={header.value}\n description={description.value}\n footer={footer.value}\n variant={variant}\n consoleFnName={consoleFnName}\n command={command}\n insertNewlineAfterDescription>\n {code`const titleLines = [${titleLines.value\n .map(line => JSON.stringify(line.trim()))\n .join(\", \")}];\n const title = Math.max(...titleLines.map(line => stripAnsi(line).length)) > Math.max(process.stdout.columns - ${\n totalPadding.value\n }, 0) ? \"${title.value}\" : \\`\\\\n\\${titleLines.join(\"\\\\n\")}\\\\n\\`; `}\n </BannerFunctionBodyDeclaration>\n <IfStatement condition={code`isInteractive && !isHelp`}>\n {code`await sleep(pause);`}\n </IfStatement>\n <Show when={context.config.upgrade !== false}>\n <IfStatement\n condition={code`upgradeCheck && (await isCheckForUpdatesRequired())`}>\n <VarDeclaration\n const\n name=\"spinner\"\n initializer={code`createSpinner({\n message: \"Checking for updates...\"\n }).start(); `}\n />\n <VarDeclaration\n const\n name=\"result\"\n initializer={code`await checkForUpdates({ force: true }); `}\n />\n <IfStatement condition={code`!result.isUpToDate`}>\n <Show\n when={\n context.config.upgrade !== false &&\n (context.config.upgrade.type === \"confirm\" ||\n context.config.upgrade.type === \"manual\")\n }\n fallback={\n <>\n {code`spinner.stop();\n info(\\`A new version of ${getAppTitle(\n context,\n true\n )} is available: \\${colors.red(\\`v\\${result.currentVersion}\\`)} \\${colors.text.body.tertiary(\"➜\")} \\${colors.green(\\`v\\${result.latestVersion}\\`)}\\${result.package.date ? colors.text.body.tertiary(\\` (updated on \\${result.package.date})\\`) : \"\"}\\`);\n\n try {\n await upgrade();\n spinner.success(\"Update successful! Please restart the application to apply the update.\");\n\n writeLine(\"\");\n writeLine(\"Press any key to exit application...\");\n\n await waitForKeyPress();\n return;\n } catch (err) {\n spinner.error(\\`An error occurred while updating ${getAppTitle(\n context,\n true\n )} to v\\${result.latestVersion}. Please try again later - if the problem persists, please contact support.\\`);\n debug(err);\n } `}\n <Spacing />\n </>\n }>\n {code`spinner.stop();\n warn(\\`A new version of ${getAppTitle(\n context,\n true\n )} is available: \\${colors.red(\\`v\\${result.currentVersion}\\`)} \\${colors.text.body.tertiary(\"➜\")} \\${colors.green(\\`v\\${result.latestVersion}\\`)}\\${result.package.date ? colors.text.body.tertiary(\\` (updated on \\${result.package.date})\\`) : \"\"}${\n context.config.upgrade !== false &&\n context.config.upgrade.type === \"manual\"\n ? ` \\\\nPlease run \\`${getAppBin(\n context\n )} update\\` to upgrade to the latest version.`\n : \"\"\n }\\`); `}\n <Spacing />\n <Show\n when={\n context.config.upgrade !== false &&\n context.config.upgrade.type === \"confirm\"\n }>\n {code`const willUpgradeNow = await confirm({\n message: \\`Would you like to update to v\\${result.latestVersion} now?\\`,\n initialValue: true\n });\n if (isCancel(willUpgradeNow)) {\n return;\n }\n\n if (willUpgradeNow) {\n spinner.text = \\`Updating ${getAppTitle(\n context,\n true\n )} to v\\${result.latestVersion}...\\`;\n spinner.start();\n\n try {\n await upgrade();\n spinner.success(\"Update successful! Please restart the application to apply the update.\");\n\n writeLine(\"\");\n writeLine(\"Press any key to exit application...\");\n\n await waitForKeyPress();\n return;\n } catch (err) {\n spinner.error(\\`An error occurred while updating ${getAppTitle(\n context,\n true\n )} to v\\${result.latestVersion}. Please try again later - if the problem persists, please contact support.\\`);\n return { error: err };\n }\n } else {\n help(\"Updates can be performed at any time by running the \\`${getAppBin(\n context\n )} update\\` command. Please remember that keeping your application up to date is important for ensuring you have the latest features, performance improvements, and security patches.\");\n } `}\n </Show>\n </Show>\n </IfStatement>\n <ElseIfClause condition={code`result.isError`}>\n {code`spinner.error(\\`An error occurred while checking for ${getAppTitle(\n context,\n true\n )} application updates. Please try again later - if the problem persists, please contact support.\\`);\n debug(result.error); `}\n </ElseIfClause>\n <ElseClause>{code`spinner.success(\"Currently running the latest version of ${getAppTitle(\n context,\n true\n )}.\");\n writeLine(\"\");\n `}</ElseClause>\n </IfStatement>\n </Show>\n </FunctionDeclaration>\n </>\n );\n}\n"],"mappings":"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"}
@@ -49,7 +49,8 @@ function CommandEntry(props) {
49
49
  env: [
50
50
  "env",
51
51
  "isDevelopment",
52
- "isDebug"
52
+ "isDebug",
53
+ "paths"
53
54
  ],
54
55
  console: [
55
56
  "debug",
@@ -61,7 +62,8 @@ function CommandEntry(props) {
61
62
  "colors",
62
63
  "stripAnsi",
63
64
  "writeLine",
64
- "splitText"
65
+ "splitText",
66
+ "createSpinner"
65
67
  ],
66
68
  utils: [
67
69
  "useApp",
@@ -1,4 +1,4 @@
1
- import * as _alloy_js_core2 from "@alloy-js/core";
1
+ import * as _alloy_js_core3 from "@alloy-js/core";
2
2
  import { EntryFileProps } from "@powerlines/plugin-alloy/typescript/components/entry-file";
3
3
  import { CommandTree } from "@shell-shock/core/types/command";
4
4
 
@@ -9,7 +9,7 @@ interface CommandEntryProps extends Omit<EntryFileProps, "path" | "typeDefinitio
9
9
  /**
10
10
  * The command entry point for the Shell Shock project.
11
11
  */
12
- declare function CommandEntry(props: CommandEntryProps): _alloy_js_core2.Children;
12
+ declare function CommandEntry(props: CommandEntryProps): _alloy_js_core3.Children;
13
13
  //#endregion
14
14
  export { CommandEntry, CommandEntryProps };
15
15
  //# sourceMappingURL=command-entry.d.cts.map
@@ -47,7 +47,8 @@ function CommandEntry(props) {
47
47
  env: [
48
48
  "env",
49
49
  "isDevelopment",
50
- "isDebug"
50
+ "isDebug",
51
+ "paths"
51
52
  ],
52
53
  console: [
53
54
  "debug",
@@ -59,7 +60,8 @@ function CommandEntry(props) {
59
60
  "colors",
60
61
  "stripAnsi",
61
62
  "writeLine",
62
- "splitText"
63
+ "splitText",
64
+ "createSpinner"
63
65
  ],
64
66
  utils: [
65
67
  "useApp",
@@ -1 +1 @@
1
- {"version":3,"file":"command-entry.mjs","names":["code","computed","For","Match","Show","Switch","ElseIfClause","IfStatement","ReflectionKind","Spacing","usePowerlines","EntryFile","isDynamicPathSegment","CommandHandlerDeclaration","CommandValidationLogic","findFilePath","relativePath","joinPaths","replaceExtension","camelCase","pascalCase","defu","BannerFunctionDeclaration","VirtualCommandEntry","CommandEntry","props","command","imports","builtinImports","rest","context","filePath","segments","filter","segment","join","commandSourcePath","entryPath","value","entry","input","file","typeDefinition","output","id","_$createComponent","_$mergeProps","path","name","prompts","env","console","utils","upgrade","children","_$createIntrinsic","banner","condition","when","Object","values","options","option","optional","length","arguments","argument","map","kind","string","number","variadic","includes","each","doubleHardline","description","boolean","child","isVirtual","fallback"],"sources":["../../src/components/command-entry.tsx"],"sourcesContent":["/* -------------------------------------------------------------------\n\n ⚡ Storm Software - Shell Shock\n\n This code was released as part of the Shell Shock project. Shell Shock\n is maintained by Storm Software under the Apache-2.0 license, and is\n free for commercial and private use. For more information, please visit\n our licensing page at https://stormsoftware.com/licenses/projects/shell-shock.\n\n Website: https://stormsoftware.com\n Repository: https://github.com/storm-software/shell-shock\n Documentation: https://docs.stormsoftware.com/projects/shell-shock\n Contact: https://stormsoftware.com/contact\n\n SPDX-License-Identifier: Apache-2.0\n\n ------------------------------------------------------------------- */\n\nimport { code, computed, For, Match, Show, Switch } from \"@alloy-js/core\";\nimport { ElseIfClause, IfStatement } from \"@alloy-js/typescript\";\nimport { ReflectionKind } from \"@powerlines/deepkit/vendor/type\";\nimport { Spacing } from \"@powerlines/plugin-alloy/core/components/spacing\";\nimport { usePowerlines } from \"@powerlines/plugin-alloy/core/contexts/context\";\nimport type { EntryFileProps } from \"@powerlines/plugin-alloy/typescript/components/entry-file\";\nimport { EntryFile } from \"@powerlines/plugin-alloy/typescript/components/entry-file\";\nimport { isDynamicPathSegment } from \"@shell-shock/core/plugin-utils/context-helpers\";\nimport type { CommandTree } from \"@shell-shock/core/types/command\";\nimport {\n CommandHandlerDeclaration,\n CommandValidationLogic\n} from \"@shell-shock/preset-script/components/command-entry\";\nimport { findFilePath, relativePath } from \"@stryke/path/find\";\nimport { joinPaths } from \"@stryke/path/join\";\nimport { replaceExtension } from \"@stryke/path/replace\";\nimport { camelCase } from \"@stryke/string-format/camel-case\";\nimport { pascalCase } from \"@stryke/string-format/pascal-case\";\nimport defu from \"defu\";\nimport type { CLIPresetContext } from \"../types/plugin\";\nimport { BannerFunctionDeclaration } from \"./banner-function-declaration\";\nimport { VirtualCommandEntry } from \"./virtual-command-entry\";\n\nexport interface CommandEntryProps extends Omit<\n EntryFileProps,\n \"path\" | \"typeDefinition\"\n> {\n command: CommandTree;\n}\n\n/**\n * The command entry point for the Shell Shock project.\n */\nexport function CommandEntry(props: CommandEntryProps) {\n const { command, imports, builtinImports, ...rest } = props;\n\n const context = usePowerlines<CLIPresetContext>();\n const filePath = computed(() =>\n joinPaths(\n command.segments\n .filter(segment => !isDynamicPathSegment(segment))\n .join(\"/\"),\n \"index.ts\"\n )\n );\n const commandSourcePath = computed(() =>\n replaceExtension(\n relativePath(\n joinPaths(context.entryPath, findFilePath(filePath.value)),\n command.entry.input?.file || command.entry.file\n )\n )\n );\n const typeDefinition = computed(() => ({\n ...command.entry,\n output: command.id\n }));\n\n return (\n <>\n <EntryFile\n {...rest}\n path={filePath.value}\n typeDefinition={typeDefinition.value}\n imports={defu(imports ?? {}, {\n [commandSourcePath.value]: `handle${pascalCase(command.name)}`,\n prompts: \"prompts\"\n })}\n builtinImports={defu(builtinImports ?? {}, {\n env: [\"env\", \"isDevelopment\", \"isDebug\"],\n console: [\n \"debug\",\n \"info\",\n \"help\",\n \"warn\",\n \"error\",\n \"table\",\n \"colors\",\n \"stripAnsi\",\n \"writeLine\",\n \"splitText\"\n ],\n utils: [\n \"useApp\",\n \"useArgs\",\n \"hasFlag\",\n \"isMinimal\",\n \"isInteractive\",\n \"isHelp\",\n \"isUnicodeSupported\",\n \"internal_commandContext\"\n ],\n prompts: [\n \"text\",\n \"numeric\",\n \"toggle\",\n \"select\",\n \"confirm\",\n \"waitForKeyPress\",\n \"isCancel\",\n \"sleep\"\n ],\n upgrade: [\"checkForUpdates\", \"isCheckForUpdatesRequired\", \"upgrade\"]\n })}>\n <BannerFunctionDeclaration command={command} />\n <hbr />\n <hbr />\n <CommandHandlerDeclaration\n command={command}\n banner={code`await banner(); `}>\n <IfStatement condition={code`!isInteractive`}>\n <CommandValidationLogic command={command} />\n </IfStatement>\n <Show\n when={\n Object.values(command.options ?? {}).filter(\n option => !option.optional\n ).length > 0 ||\n Object.values(command.arguments ?? {}).filter(\n argument => !argument.optional\n ).length > 0\n }>\n <ElseIfClause\n condition={code`!isHelp && (${Object.values(command.options ?? {})\n .filter(option => !option.optional)\n .map(option =>\n (option.kind === ReflectionKind.string ||\n option.kind === ReflectionKind.number) &&\n option.variadic\n ? `(!options${\n option.name.includes(\"?\")\n ? `[\"${option.name}\"]`\n : `.${camelCase(option.name)}`\n } || options${\n option.name.includes(\"?\")\n ? `[\"${option.name}\"]`\n : `.${camelCase(option.name)}`\n }.length === 0)`\n : `options${\n option.name.includes(\"?\")\n ? `[\"${option.name}\"]`\n : `.${camelCase(option.name)}`\n } === undefined`\n )\n .join(\" || \")}${\n Object.values(command.options ?? {}).filter(\n option => !option.optional\n ).length > 0 &&\n Object.values(command.arguments ?? {}).filter(\n argument => !argument.optional\n ).length > 0\n ? \" || \"\n : \"\"\n }${Object.values(command.arguments ?? {})\n .filter(argument => !argument.optional)\n .map(argument =>\n (argument.kind === ReflectionKind.string ||\n argument.kind === ReflectionKind.number) &&\n argument.variadic\n ? `(!${camelCase(\n argument.name\n )} || ${camelCase(argument.name)}.length === 0)`\n : `${camelCase(argument.name)} === undefined`\n )\n .join(\" || \")}) `}>\n {code`writeLine(\"\"); `}\n <Spacing />\n <For each={Object.values(command.options ?? {})} doubleHardline>\n {option => (\n <>\n <Show when={!option.optional}>\n <IfStatement\n condition={code`!options${\n option.name.includes(\"?\")\n ? `[\"${option.name}\"]`\n : `.${camelCase(option.name)}`\n }`}>\n <Switch>\n <Match\n when={option.kind === ReflectionKind.string}>{code`\n const value = await text({\n message: \"Please provide a value for the \\\\\"${option.name}\\\\\" option\",\n ${\n option.description\n ? `description: \"${option.description}\",\n `\n : \"\"\n }validate(val) {\n if (!val || val.trim() === \"\") {\n return \"A value must be provided for this option\";\n }\n\n return null;\n }\n });\n if (isCancel(value)) {\n return;\n }\n\n options${\n option.name.includes(\"?\")\n ? `[\"${option.name}\"]`\n : `.${camelCase(option.name)}`\n } = value;\n `}</Match>\n <Match\n when={option.kind === ReflectionKind.number}>{code`\n const value = await numeric({\n message: \"Please provide a numeric value for the \\\\\"${option.name}\\\\\" option\",\n ${\n option.description\n ? `description: \"${option.description}\",\n `\n : \"\"\n }\n });\n if (isCancel(value)) {\n return;\n }\n\n options${\n option.name.includes(\"?\")\n ? `[\"${option.name}\"]`\n : `.${camelCase(option.name)}`\n } = value;\n `}</Match>\n <Match\n when={option.kind === ReflectionKind.boolean}>{code`\n const value = await toggle({\n message: \"Please select a value for the \\\\\"${\n option.name\n }\\\\\" option\",\n ${\n option.description\n ? `description: \"${option.description}\",\n `\n : \"\"\n }\n });\n if (isCancel(value)) {\n return;\n }\n\n options${\n option.name.includes(\"?\")\n ? `[\"${option.name}\"]`\n : `.${camelCase(option.name)}`\n } = value;\n `}</Match>\n </Switch>\n </IfStatement>\n <Show\n when={\n (option.kind === ReflectionKind.string ||\n option.kind === ReflectionKind.number) &&\n option.variadic\n }>\n <ElseIfClause\n condition={code`options${\n option.name.includes(\"?\")\n ? `[\"${option.name}\"]`\n : `.${camelCase(option.name)}`\n }.length === 0`}>\n {code`\n const value = await text({\n message: \"Please provide one or more${\n option.kind === ReflectionKind.number\n ? \" numeric\"\n : \"\"\n } values for the \\\\\"${option.name}\\\\\" option (values are separated by a \\\\\",\\\\\" character)\",\n ${\n option.description\n ? `description: \"${option.description}\",\n `\n : \"\"\n }validate(val) {\n if (!val || val.trim() === \"\") {\n return \"A value must be provided for this option\";\n }\n if (val.split(\",\").map(v => v.trim()).filter(Boolean).length === 0) {\n return \"At least one value must be provided for this option\";\n }\n ${\n option.kind === ReflectionKind.number\n ? `const invalidIndex = val.split(\",\").map(v => v.trim()).filter(Boolean).findIndex(v => Number.isNaN(Number(v));\n if (invalidIndex !== -1) {\n return \\`Invalid numeric value provided for item #\\${invalidIndex + 1} - all provided items must be a valid number\\`;\n } `\n : \"\"\n }\n return undefined;\n }\n });\n if (isCancel(value)) {\n return;\n }\n\n options${\n option.name.includes(\"?\")\n ? `[\"${option.name}\"]`\n : `.${camelCase(option.name)}`\n } = value.split(\",\").map(value => value.trim()).filter(Boolean)${\n option.kind === ReflectionKind.number\n ? `.map(Number)`\n : \"\"\n } ;\n `}\n </ElseIfClause>\n </Show>\n </Show>\n </>\n )}\n </For>\n <Spacing />\n <For each={command.arguments} doubleHardline>\n {argument => (\n <>\n <Show when={!argument.optional}>\n <IfStatement\n condition={code`!${camelCase(argument.name)}`}>\n <Switch>\n <Match\n when={\n argument.kind === ReflectionKind.string\n }>{code`\n const value = await text({\n message: \"Please provide a value for the \\\\\"${argument.name}\\\\\" argument\",\n ${\n argument.description\n ? `description: \"${argument.description}\",\n `\n : \"\"\n }validate(val) {\n if (!val || val.trim() === \"\") {\n return \"A value must be provided for this argument\";\n }\n\n return null;\n }\n });\n if (isCancel(value)) {\n return;\n }\n\n ${camelCase(argument.name)} = value;\n `}</Match>\n <Match\n when={\n argument.kind === ReflectionKind.number\n }>{code`\n const value = await numeric({\n message: \"Please provide a numeric value for the \\\\\"${argument.name}\\\\\" argument\",\n ${\n argument.description\n ? `description: \"${argument.description}\",\n `\n : \"\"\n }\n });\n if (isCancel(value)) {\n return;\n }\n\n ${camelCase(argument.name)} = value;\n `}</Match>\n <Match\n when={\n argument.kind === ReflectionKind.boolean\n }>{code`\n const value = await toggle({\n message: \"Please select a value for the \\\\\"${argument.name}\\\\\" argument\",\n ${\n argument.description\n ? `description: \"${argument.description}\",\n `\n : \"\"\n }\n });\n if (isCancel(value)) {\n return;\n }\n\n ${camelCase(argument.name)} = value;\n `}</Match>\n </Switch>\n </IfStatement>\n <Show\n when={\n (argument.kind === ReflectionKind.string ||\n argument.kind === ReflectionKind.number) &&\n argument.variadic\n }>\n <ElseIfClause\n condition={code`${camelCase(argument.name)}.length === 0`}>\n {code`\n const value = await text({\n message: \"Please provide one or more${\n argument.kind === ReflectionKind.number\n ? \" numeric\"\n : \"\"\n } (values are separated by a \\\\\",\\\\\" character)\",\n ${\n argument.description\n ? `description: \"${argument.description}\",\n `\n : \"\"\n }validate(val) {\n if (!val || val.trim() === \"\") {\n return \"A value must be provided for this argument\";\n }\n if (val.split(\",\").map(v => v.trim()).filter(Boolean).length === 0) {\n return \"At least one value must be provided for this argument\";\n }\n ${\n argument.kind === ReflectionKind.number\n ? `const invalidIndex = val.split(\",\").map(v => v.trim()).filter(Boolean).findIndex(v => Number.isNaN(Number(v));\n if (invalidIndex !== -1) {\n return \\`Invalid numeric value provided for item #\\${invalidIndex + 1} - all provided items must be a valid number\\`;\n } `\n : \"\"\n }\n\n return undefined;\n }\n });\n if (isCancel(value)) {\n return;\n }\n\n ${camelCase(argument.name)} = value.split(\",\").map(value => value.trim()).filter(Boolean)${\n argument.kind === ReflectionKind.number\n ? `.map(Number)`\n : \"\"\n } ;\n `}\n </ElseIfClause>\n </Show>\n </Show>\n </>\n )}\n </For>\n {code`writeLine(\"\"); `}\n <Spacing />\n </ElseIfClause>\n </Show>\n </CommandHandlerDeclaration>\n </EntryFile>\n <For each={Object.values(command.children)}>\n {child => (\n <Show\n when={child.isVirtual}\n fallback={<CommandEntry command={child} />}>\n <VirtualCommandEntry command={child} />\n </Show>\n )}\n </For>\n </>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"command-entry.mjs","names":["code","computed","For","Match","Show","Switch","ElseIfClause","IfStatement","ReflectionKind","Spacing","usePowerlines","EntryFile","isDynamicPathSegment","CommandHandlerDeclaration","CommandValidationLogic","findFilePath","relativePath","joinPaths","replaceExtension","camelCase","pascalCase","defu","BannerFunctionDeclaration","VirtualCommandEntry","CommandEntry","props","command","imports","builtinImports","rest","context","filePath","segments","filter","segment","join","commandSourcePath","entryPath","value","entry","input","file","typeDefinition","output","id","_$createComponent","_$mergeProps","path","name","prompts","env","console","utils","upgrade","children","_$createIntrinsic","banner","condition","when","Object","values","options","option","optional","length","arguments","argument","map","kind","string","number","variadic","includes","each","doubleHardline","description","boolean","child","isVirtual","fallback"],"sources":["../../src/components/command-entry.tsx"],"sourcesContent":["/* -------------------------------------------------------------------\n\n ⚡ Storm Software - Shell Shock\n\n This code was released as part of the Shell Shock project. Shell Shock\n is maintained by Storm Software under the Apache-2.0 license, and is\n free for commercial and private use. For more information, please visit\n our licensing page at https://stormsoftware.com/licenses/projects/shell-shock.\n\n Website: https://stormsoftware.com\n Repository: https://github.com/storm-software/shell-shock\n Documentation: https://docs.stormsoftware.com/projects/shell-shock\n Contact: https://stormsoftware.com/contact\n\n SPDX-License-Identifier: Apache-2.0\n\n ------------------------------------------------------------------- */\n\nimport { code, computed, For, Match, Show, Switch } from \"@alloy-js/core\";\nimport { ElseIfClause, IfStatement } from \"@alloy-js/typescript\";\nimport { ReflectionKind } from \"@powerlines/deepkit/vendor/type\";\nimport { Spacing } from \"@powerlines/plugin-alloy/core/components/spacing\";\nimport { usePowerlines } from \"@powerlines/plugin-alloy/core/contexts/context\";\nimport type { EntryFileProps } from \"@powerlines/plugin-alloy/typescript/components/entry-file\";\nimport { EntryFile } from \"@powerlines/plugin-alloy/typescript/components/entry-file\";\nimport { isDynamicPathSegment } from \"@shell-shock/core/plugin-utils/context-helpers\";\nimport type { CommandTree } from \"@shell-shock/core/types/command\";\nimport {\n CommandHandlerDeclaration,\n CommandValidationLogic\n} from \"@shell-shock/preset-script/components/command-entry\";\nimport { findFilePath, relativePath } from \"@stryke/path/find\";\nimport { joinPaths } from \"@stryke/path/join\";\nimport { replaceExtension } from \"@stryke/path/replace\";\nimport { camelCase } from \"@stryke/string-format/camel-case\";\nimport { pascalCase } from \"@stryke/string-format/pascal-case\";\nimport defu from \"defu\";\nimport type { CLIPresetContext } from \"../types/plugin\";\nimport { BannerFunctionDeclaration } from \"./banner-function-declaration\";\nimport { VirtualCommandEntry } from \"./virtual-command-entry\";\n\nexport interface CommandEntryProps extends Omit<\n EntryFileProps,\n \"path\" | \"typeDefinition\"\n> {\n command: CommandTree;\n}\n\n/**\n * The command entry point for the Shell Shock project.\n */\nexport function CommandEntry(props: CommandEntryProps) {\n const { command, imports, builtinImports, ...rest } = props;\n\n const context = usePowerlines<CLIPresetContext>();\n const filePath = computed(() =>\n joinPaths(\n command.segments\n .filter(segment => !isDynamicPathSegment(segment))\n .join(\"/\"),\n \"index.ts\"\n )\n );\n const commandSourcePath = computed(() =>\n replaceExtension(\n relativePath(\n joinPaths(context.entryPath, findFilePath(filePath.value)),\n command.entry.input?.file || command.entry.file\n )\n )\n );\n const typeDefinition = computed(() => ({\n ...command.entry,\n output: command.id\n }));\n\n return (\n <>\n <EntryFile\n {...rest}\n path={filePath.value}\n typeDefinition={typeDefinition.value}\n imports={defu(imports ?? {}, {\n [commandSourcePath.value]: `handle${pascalCase(command.name)}`,\n prompts: \"prompts\"\n })}\n builtinImports={defu(builtinImports ?? {}, {\n env: [\"env\", \"isDevelopment\", \"isDebug\", \"paths\"],\n console: [\n \"debug\",\n \"info\",\n \"help\",\n \"warn\",\n \"error\",\n \"table\",\n \"colors\",\n \"stripAnsi\",\n \"writeLine\",\n \"splitText\",\n \"createSpinner\"\n ],\n utils: [\n \"useApp\",\n \"useArgs\",\n \"hasFlag\",\n \"isMinimal\",\n \"isInteractive\",\n \"isHelp\",\n \"isUnicodeSupported\",\n \"internal_commandContext\"\n ],\n prompts: [\n \"text\",\n \"numeric\",\n \"toggle\",\n \"select\",\n \"confirm\",\n \"waitForKeyPress\",\n \"isCancel\",\n \"sleep\"\n ],\n upgrade: [\"checkForUpdates\", \"isCheckForUpdatesRequired\", \"upgrade\"]\n })}>\n <BannerFunctionDeclaration command={command} />\n <hbr />\n <hbr />\n <CommandHandlerDeclaration\n command={command}\n banner={code`await banner(); `}>\n <IfStatement condition={code`!isInteractive`}>\n <CommandValidationLogic command={command} />\n </IfStatement>\n <Show\n when={\n Object.values(command.options ?? {}).filter(\n option => !option.optional\n ).length > 0 ||\n Object.values(command.arguments ?? {}).filter(\n argument => !argument.optional\n ).length > 0\n }>\n <ElseIfClause\n condition={code`!isHelp && (${Object.values(command.options ?? {})\n .filter(option => !option.optional)\n .map(option =>\n (option.kind === ReflectionKind.string ||\n option.kind === ReflectionKind.number) &&\n option.variadic\n ? `(!options${\n option.name.includes(\"?\")\n ? `[\"${option.name}\"]`\n : `.${camelCase(option.name)}`\n } || options${\n option.name.includes(\"?\")\n ? `[\"${option.name}\"]`\n : `.${camelCase(option.name)}`\n }.length === 0)`\n : `options${\n option.name.includes(\"?\")\n ? `[\"${option.name}\"]`\n : `.${camelCase(option.name)}`\n } === undefined`\n )\n .join(\" || \")}${\n Object.values(command.options ?? {}).filter(\n option => !option.optional\n ).length > 0 &&\n Object.values(command.arguments ?? {}).filter(\n argument => !argument.optional\n ).length > 0\n ? \" || \"\n : \"\"\n }${Object.values(command.arguments ?? {})\n .filter(argument => !argument.optional)\n .map(argument =>\n (argument.kind === ReflectionKind.string ||\n argument.kind === ReflectionKind.number) &&\n argument.variadic\n ? `(!${camelCase(\n argument.name\n )} || ${camelCase(argument.name)}.length === 0)`\n : `${camelCase(argument.name)} === undefined`\n )\n .join(\" || \")}) `}>\n {code`writeLine(\"\"); `}\n <Spacing />\n <For each={Object.values(command.options ?? {})} doubleHardline>\n {option => (\n <>\n <Show when={!option.optional}>\n <IfStatement\n condition={code`!options${\n option.name.includes(\"?\")\n ? `[\"${option.name}\"]`\n : `.${camelCase(option.name)}`\n }`}>\n <Switch>\n <Match\n when={option.kind === ReflectionKind.string}>{code`\n const value = await text({\n message: \"Please provide a value for the \\\\\"${option.name}\\\\\" option\",\n ${\n option.description\n ? `description: \"${option.description}\",\n `\n : \"\"\n }validate(val) {\n if (!val || val.trim() === \"\") {\n return \"A value must be provided for this option\";\n }\n\n return null;\n }\n });\n if (isCancel(value)) {\n return;\n }\n\n options${\n option.name.includes(\"?\")\n ? `[\"${option.name}\"]`\n : `.${camelCase(option.name)}`\n } = value;\n `}</Match>\n <Match\n when={option.kind === ReflectionKind.number}>{code`\n const value = await numeric({\n message: \"Please provide a numeric value for the \\\\\"${option.name}\\\\\" option\",\n ${\n option.description\n ? `description: \"${option.description}\",\n `\n : \"\"\n }\n });\n if (isCancel(value)) {\n return;\n }\n\n options${\n option.name.includes(\"?\")\n ? `[\"${option.name}\"]`\n : `.${camelCase(option.name)}`\n } = value;\n `}</Match>\n <Match\n when={option.kind === ReflectionKind.boolean}>{code`\n const value = await toggle({\n message: \"Please select a value for the \\\\\"${\n option.name\n }\\\\\" option\",\n ${\n option.description\n ? `description: \"${option.description}\",\n `\n : \"\"\n }\n });\n if (isCancel(value)) {\n return;\n }\n\n options${\n option.name.includes(\"?\")\n ? `[\"${option.name}\"]`\n : `.${camelCase(option.name)}`\n } = value;\n `}</Match>\n </Switch>\n </IfStatement>\n <Show\n when={\n (option.kind === ReflectionKind.string ||\n option.kind === ReflectionKind.number) &&\n option.variadic\n }>\n <ElseIfClause\n condition={code`options${\n option.name.includes(\"?\")\n ? `[\"${option.name}\"]`\n : `.${camelCase(option.name)}`\n }.length === 0`}>\n {code`\n const value = await text({\n message: \"Please provide one or more${\n option.kind === ReflectionKind.number\n ? \" numeric\"\n : \"\"\n } values for the \\\\\"${option.name}\\\\\" option (values are separated by a \\\\\",\\\\\" character)\",\n ${\n option.description\n ? `description: \"${option.description}\",\n `\n : \"\"\n }validate(val) {\n if (!val || val.trim() === \"\") {\n return \"A value must be provided for this option\";\n }\n if (val.split(\",\").map(v => v.trim()).filter(Boolean).length === 0) {\n return \"At least one value must be provided for this option\";\n }\n ${\n option.kind === ReflectionKind.number\n ? `const invalidIndex = val.split(\",\").map(v => v.trim()).filter(Boolean).findIndex(v => Number.isNaN(Number(v));\n if (invalidIndex !== -1) {\n return \\`Invalid numeric value provided for item #\\${invalidIndex + 1} - all provided items must be a valid number\\`;\n } `\n : \"\"\n }\n return undefined;\n }\n });\n if (isCancel(value)) {\n return;\n }\n\n options${\n option.name.includes(\"?\")\n ? `[\"${option.name}\"]`\n : `.${camelCase(option.name)}`\n } = value.split(\",\").map(value => value.trim()).filter(Boolean)${\n option.kind === ReflectionKind.number\n ? `.map(Number)`\n : \"\"\n } ;\n `}\n </ElseIfClause>\n </Show>\n </Show>\n </>\n )}\n </For>\n <Spacing />\n <For each={command.arguments} doubleHardline>\n {argument => (\n <>\n <Show when={!argument.optional}>\n <IfStatement\n condition={code`!${camelCase(argument.name)}`}>\n <Switch>\n <Match\n when={\n argument.kind === ReflectionKind.string\n }>{code`\n const value = await text({\n message: \"Please provide a value for the \\\\\"${argument.name}\\\\\" argument\",\n ${\n argument.description\n ? `description: \"${argument.description}\",\n `\n : \"\"\n }validate(val) {\n if (!val || val.trim() === \"\") {\n return \"A value must be provided for this argument\";\n }\n\n return null;\n }\n });\n if (isCancel(value)) {\n return;\n }\n\n ${camelCase(argument.name)} = value;\n `}</Match>\n <Match\n when={\n argument.kind === ReflectionKind.number\n }>{code`\n const value = await numeric({\n message: \"Please provide a numeric value for the \\\\\"${argument.name}\\\\\" argument\",\n ${\n argument.description\n ? `description: \"${argument.description}\",\n `\n : \"\"\n }\n });\n if (isCancel(value)) {\n return;\n }\n\n ${camelCase(argument.name)} = value;\n `}</Match>\n <Match\n when={\n argument.kind === ReflectionKind.boolean\n }>{code`\n const value = await toggle({\n message: \"Please select a value for the \\\\\"${argument.name}\\\\\" argument\",\n ${\n argument.description\n ? `description: \"${argument.description}\",\n `\n : \"\"\n }\n });\n if (isCancel(value)) {\n return;\n }\n\n ${camelCase(argument.name)} = value;\n `}</Match>\n </Switch>\n </IfStatement>\n <Show\n when={\n (argument.kind === ReflectionKind.string ||\n argument.kind === ReflectionKind.number) &&\n argument.variadic\n }>\n <ElseIfClause\n condition={code`${camelCase(argument.name)}.length === 0`}>\n {code`\n const value = await text({\n message: \"Please provide one or more${\n argument.kind === ReflectionKind.number\n ? \" numeric\"\n : \"\"\n } (values are separated by a \\\\\",\\\\\" character)\",\n ${\n argument.description\n ? `description: \"${argument.description}\",\n `\n : \"\"\n }validate(val) {\n if (!val || val.trim() === \"\") {\n return \"A value must be provided for this argument\";\n }\n if (val.split(\",\").map(v => v.trim()).filter(Boolean).length === 0) {\n return \"At least one value must be provided for this argument\";\n }\n ${\n argument.kind === ReflectionKind.number\n ? `const invalidIndex = val.split(\",\").map(v => v.trim()).filter(Boolean).findIndex(v => Number.isNaN(Number(v));\n if (invalidIndex !== -1) {\n return \\`Invalid numeric value provided for item #\\${invalidIndex + 1} - all provided items must be a valid number\\`;\n } `\n : \"\"\n }\n\n return undefined;\n }\n });\n if (isCancel(value)) {\n return;\n }\n\n ${camelCase(argument.name)} = value.split(\",\").map(value => value.trim()).filter(Boolean)${\n argument.kind === ReflectionKind.number\n ? `.map(Number)`\n : \"\"\n } ;\n `}\n </ElseIfClause>\n </Show>\n </Show>\n </>\n )}\n </For>\n {code`writeLine(\"\"); `}\n <Spacing />\n </ElseIfClause>\n </Show>\n </CommandHandlerDeclaration>\n </EntryFile>\n <For each={Object.values(command.children)}>\n {child => (\n <Show\n when={child.isVirtual}\n fallback={<CommandEntry command={child} />}>\n <VirtualCommandEntry command={child} />\n </Show>\n )}\n </For>\n </>\n );\n}\n"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import * as _alloy_js_core1 from "@alloy-js/core";
1
+ import * as _alloy_js_core2 from "@alloy-js/core";
2
2
  import { EntryFileProps } from "@powerlines/plugin-alloy/typescript/components/entry-file";
3
3
  import { CommandTree } from "@shell-shock/core/types/command";
4
4
 
@@ -9,7 +9,7 @@ interface VirtualCommandEntryProps extends Omit<EntryFileProps, "path" | "typeDe
9
9
  /**
10
10
  * The virtual command entry point for the Shell Shock project.
11
11
  */
12
- declare function VirtualCommandEntry(props: VirtualCommandEntryProps): _alloy_js_core1.Children;
12
+ declare function VirtualCommandEntry(props: VirtualCommandEntryProps): _alloy_js_core2.Children;
13
13
  //#endregion
14
14
  export { VirtualCommandEntry, VirtualCommandEntryProps };
15
15
  //# sourceMappingURL=virtual-command-entry.d.cts.map
package/dist/index.cjs CHANGED
@@ -55,6 +55,7 @@ const plugin = (options = {}) => {
55
55
  builtinImports: {
56
56
  console: [
57
57
  "info",
58
+ "debug",
58
59
  "warn",
59
60
  "help",
60
61
  "error",
@@ -65,7 +66,8 @@ const plugin = (options = {}) => {
65
66
  "colors",
66
67
  "writeLine",
67
68
  "splitText",
68
- "stripAnsi"
69
+ "stripAnsi",
70
+ "createSpinner"
69
71
  ],
70
72
  utils: [
71
73
  "useApp",
@@ -88,7 +90,8 @@ const plugin = (options = {}) => {
88
90
  "checkForUpdates",
89
91
  "isCheckForUpdatesRequired",
90
92
  "upgrade"
91
- ]
93
+ ],
94
+ env: ["env", "paths"]
92
95
  },
93
96
  get prefix() {
94
97
  return [
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.cts","names":[],"sources":["../src/index.tsx"],"sourcesContent":[],"mappings":";;;;;;;AAwCA;;;;AAsHc,cAtHD,MAsHC,EAAA,CAAA,iBAtH0B,gBAsH1B,GAtH6C,gBAsH7C,CAAA,CAAA,OAAA,CAAA,EArHH,gBAqHG,EAAA,GAAP,MAAO,CAAA,QAAA,CAAA,EAAA"}
1
+ {"version":3,"file":"index.d.cts","names":[],"sources":["../src/index.tsx"],"sourcesContent":[],"mappings":";;;;;;;AAwCA;;;;AAyHc,cAzHD,MAyHC,EAAA,CAAA,iBAzH0B,gBAyH1B,GAzH6C,gBAyH7C,CAAA,CAAA,OAAA,CAAA,EAxHH,gBAwHG,EAAA,GAAP,MAAO,CAAA,QAAA,CAAA,EAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.mts","names":[],"sources":["../src/index.tsx"],"sourcesContent":[],"mappings":";;;;;;;AAwCA;;;;AAsHc,cAtHD,MAsHC,EAAA,CAAA,iBAtH0B,gBAsH1B,GAtH6C,gBAsH7C,CAAA,CAAA,OAAA,CAAA,EArHH,gBAqHG,EAAA,GAAP,MAAO,CAAA,QAAA,CAAA,EAAA"}
1
+ {"version":3,"file":"index.d.mts","names":[],"sources":["../src/index.tsx"],"sourcesContent":[],"mappings":";;;;;;;AAwCA;;;;AAyHc,cAzHD,MAyHC,EAAA,CAAA,iBAzH0B,gBAyH1B,GAzH6C,gBAyH7C,CAAA,CAAA,OAAA,CAAA,EAxHH,gBAwHG,EAAA,GAAP,MAAO,CAAA,QAAA,CAAA,EAAA"}
package/dist/index.mjs CHANGED
@@ -50,6 +50,7 @@ const plugin = (options = {}) => {
50
50
  builtinImports: {
51
51
  console: [
52
52
  "info",
53
+ "debug",
53
54
  "warn",
54
55
  "help",
55
56
  "error",
@@ -60,7 +61,8 @@ const plugin = (options = {}) => {
60
61
  "colors",
61
62
  "writeLine",
62
63
  "splitText",
63
- "stripAnsi"
64
+ "stripAnsi",
65
+ "createSpinner"
64
66
  ],
65
67
  utils: [
66
68
  "useApp",
@@ -83,7 +85,8 @@ const plugin = (options = {}) => {
83
85
  "checkForUpdates",
84
86
  "isCheckForUpdatesRequired",
85
87
  "upgrade"
86
- ]
88
+ ],
89
+ env: ["env", "paths"]
87
90
  },
88
91
  get prefix() {
89
92
  return [
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","names":["code","For","Show","VarDeclaration","render","console","prompts","upgrade","BinEntry","VirtualHelp","BannerFunctionDeclaration","CommandEntry","CommandRouter","VirtualCommandEntry","getDefaultOptions","plugin","options","name","config","debug","defaultOptions","isCaseSensitive","configResolved","dependencies","didyoumean2","prepare","order","handler","_self$","_$createComponent","builtinImports","utils","prefix","_$createIntrinsic","children","when","Object","keys","commands","length","type","initializer","segments","values","each","doubleHardline","child","isVirtual","fallback","command"],"sources":["../src/index.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, For, Show } from \"@alloy-js/core\";\nimport { VarDeclaration } from \"@alloy-js/typescript\";\nimport { render } from \"@powerlines/plugin-alloy/render\";\nimport console from \"@shell-shock/plugin-console\";\nimport prompts from \"@shell-shock/plugin-prompts\";\nimport upgrade from \"@shell-shock/plugin-upgrade\";\nimport { BinEntry } from \"@shell-shock/preset-script/components/bin-entry\";\nimport { VirtualHelp } from \"@shell-shock/preset-script/components/help\";\nimport type { Plugin } from \"powerlines/types/plugin\";\nimport { BannerFunctionDeclaration } from \"./components/banner-function-declaration\";\nimport { CommandEntry } from \"./components/command-entry\";\nimport { CommandRouter } from \"./components/command-router\";\nimport { VirtualCommandEntry } from \"./components/virtual-command-entry\";\nimport { getDefaultOptions } from \"./helpers/get-default-options\";\nimport type { CLIPresetContext, CLIPresetOptions } from \"./types/plugin\";\n\n/**\n * The Shell Shock CLI Preset plugin.\n *\n * @remarks\n * This preset includes a set of built-in modules and commands to create a CLI application, as well as configuration options to customize the generated code. It also includes the `prompts` plugin to provide interactive prompts in the CLI application, and the `upgrade` plugin to manage upgrading the local application's version.\n */\nexport const plugin = <TContext extends CLIPresetContext = CLIPresetContext>(\n options: CLIPresetOptions = {}\n) => {\n return [\n console(options),\n prompts(options),\n options.upgrade !== false && upgrade(options.upgrade),\n {\n name: \"shell-shock:cli-preset\",\n config() {\n this.debug(\n \"Providing default configuration for the Shell Shock `cli` preset.\"\n );\n\n return {\n defaultOptions: getDefaultOptions,\n isCaseSensitive: false,\n ...options\n };\n },\n configResolved() {\n this.dependencies.didyoumean2 = \"^7.0.4\";\n }\n },\n {\n name: \"shell-shock:cli-preset:generate-entrypoint\",\n prepare: {\n order: \"post\",\n async handler() {\n this.debug(\n \"Rendering entrypoint modules for the Shell Shock `cli` preset.\"\n );\n\n return render(\n this,\n <>\n <BinEntry\n builtinImports={{\n console: [\n \"info\",\n \"warn\",\n \"help\",\n \"error\",\n \"divider\",\n \"stripAnsi\",\n \"writeLine\",\n \"splitText\",\n \"colors\",\n \"writeLine\",\n \"splitText\",\n \"stripAnsi\"\n ],\n utils: [\n \"useApp\",\n \"useArgs\",\n \"isMinimal\",\n \"isInteractive\",\n \"isHelp\"\n ],\n prompts: [\n \"text\",\n \"numeric\",\n \"toggle\",\n \"select\",\n \"confirm\",\n \"waitForKeyPress\",\n \"isCancel\",\n \"sleep\"\n ],\n upgrade: [\n \"checkForUpdates\",\n \"isCheckForUpdatesRequired\",\n \"upgrade\"\n ]\n }}\n prefix={\n <>\n <BannerFunctionDeclaration />\n <hbr />\n <hbr />\n </>\n }>\n <Show when={Object.keys(this.commands).length > 0}>\n <VarDeclaration\n let\n name=\"args\"\n type=\"string[]\"\n initializer={code`useArgs();`}\n />\n <hbr />\n <CommandRouter segments={[]} commands={this.commands ?? {}} />\n <hbr />\n </Show>\n <hbr />\n {code`await banner(0, false);`}\n <hbr />\n <hbr />\n <VirtualHelp\n options={this.options}\n commands={this.commands ?? {}}\n />\n </BinEntry>\n <Show when={Object.values(this.commands).length > 0}>\n <For each={Object.values(this.commands)} doubleHardline>\n {child => (\n <Show\n when={child.isVirtual}\n fallback={<CommandEntry command={child} />}>\n <VirtualCommandEntry command={child} />\n </Show>\n )}\n </For>\n </Show>\n </>\n );\n }\n }\n }\n ] as Plugin<TContext>[];\n};\n\nexport default plugin;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAwCA,MAAae,UACXC,UAA4B,EAAE,KAC3B;AACH,QAAO;EACLX,QAAQW,QAAQ;EAChBV,QAAQU,QAAQ;EAChBA,QAAQT,YAAY,SAASA,QAAQS,QAAQT,QAAQ;EACrD;GACEU,MAAM;GACNC,SAAS;AACP,SAAKC,MACH,oEACD;AAED,WAAO;KACLC,gBAAgBN;KAChBO,iBAAiB;KACjB,GAAGL;KACJ;;GAEHM,iBAAiB;AACf,SAAKC,aAAaC,cAAc;;GAEnC;EACD;GACEP,MAAM;GACNQ,SAAS;IACPC,OAAO;IACP,MAAMC,UAAU;KAAA,MAAAC,SAAA;AACd,UAAKT,MACH,iEACD;AAED,YAAOf,OACL,MAAI,CAAAyB,gBAEDrB,UAAQ;MACPsB,gBAAgB;OACdzB,SAAS;QACP;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACD;OACD0B,OAAO;QACL;QACA;QACA;QACA;QACA;QACD;OACDzB,SAAS;QACP;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACD;OACDC,SAAS;QACP;QACA;QACA;QAAS;OAEZ;MAAA,IACDyB,SAAM;AAAA,cAAA;QAAAH,gBAEDnB,2BAAyB,EAAA,CAAA;QAAAuB,gBAAA,OAAA,EAAA,CAAA;QAAAA,gBAAA,OAAA,EAAA,CAAA;QAAA;;MAAA,IAAAC,WAAA;AAAA,cAAA;QAAAL,gBAK7B3B,MAAI;SAAA,IAACiC,OAAI;AAAA,iBAAEC,OAAOC,KAAKT,OAAKU,SAAS,CAACC,SAAS;;SAAC,IAAAL,WAAA;AAAA,iBAAA;WAAAL,gBAC9C1B,gBAAc;YAAA,OAAA;YAEbc,MAAI;YACJuB,MAAI;YACJC,aAAazC,IAAI;YAAY,CAAA;WAAAiC,gBAAA,OAAA,EAAA,CAAA;WAAAJ,gBAG9BjB,eAAa;YAAC8B,UAAU,EAAE;YAAA,IAAEJ,WAAQ;AAAA,oBAAEV,OAAKU,YAAY,EAAE;;YAAA,CAAA;WAAAL,gBAAA,OAAA,EAAA,CAAA;WAAA;;SAAA,CAAA;QAAAA,gBAAA,OAAA,EAAA,CAAA;QAI3DjC,IAAI;QAAyBiC,gBAAA,OAAA,EAAA,CAAA;QAAAA,gBAAA,OAAA,EAAA,CAAA;QAAAJ,gBAG7BpB,aAAW;SAAA,IACVO,UAAO;AAAA,iBAAEY,OAAKZ;;SAAO,IACrBsB,WAAQ;AAAA,iBAAEV,OAAKU,YAAY,EAAE;;SAAA,CAAA;QAAA;;MAAA,CAAA,EAAAT,gBAGhC3B,MAAI;MAAA,IAACiC,OAAI;AAAA,cAAEC,OAAOO,OAAOf,OAAKU,SAAS,CAACC,SAAS;;MAAC,IAAAL,WAAA;AAAA,cAAAL,gBAChD5B,KAAG;QAAA,IAAC2C,OAAI;AAAA,gBAAER,OAAOO,OAAOf,OAAKU,SAAS;;QAAEO,gBAAc;QAAAX,WACpDY,UAAKjB,gBACH3B,MAAI;SAAA,IACHiC,OAAI;AAAA,iBAAEW,MAAMC;;SAAS,IACrBC,WAAQ;AAAA,iBAAAnB,gBAAGlB,cAAY,EAACsC,SAASH,OAAK,CAAA;;SAAA,IAAAZ,WAAA;AAAA,iBAAAL,gBACrChB,qBAAmB,EAACoC,SAASH,OAAK,CAAA;;SAAA,CAAA;QAEtC,CAAA;;MAAA,CAAA,CAIT,CAAC;;IAEL;GACD;EACF;;AAGH,kBAAe/B"}
1
+ {"version":3,"file":"index.mjs","names":["code","For","Show","VarDeclaration","render","console","prompts","upgrade","BinEntry","VirtualHelp","BannerFunctionDeclaration","CommandEntry","CommandRouter","VirtualCommandEntry","getDefaultOptions","plugin","options","name","config","debug","defaultOptions","isCaseSensitive","configResolved","dependencies","didyoumean2","prepare","order","handler","_self$","_$createComponent","builtinImports","utils","env","prefix","_$createIntrinsic","children","when","Object","keys","commands","length","type","initializer","segments","values","each","doubleHardline","child","isVirtual","fallback","command"],"sources":["../src/index.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, For, Show } from \"@alloy-js/core\";\nimport { VarDeclaration } from \"@alloy-js/typescript\";\nimport { render } from \"@powerlines/plugin-alloy/render\";\nimport console from \"@shell-shock/plugin-console\";\nimport prompts from \"@shell-shock/plugin-prompts\";\nimport upgrade from \"@shell-shock/plugin-upgrade\";\nimport { BinEntry } from \"@shell-shock/preset-script/components/bin-entry\";\nimport { VirtualHelp } from \"@shell-shock/preset-script/components/help\";\nimport type { Plugin } from \"powerlines/types/plugin\";\nimport { BannerFunctionDeclaration } from \"./components/banner-function-declaration\";\nimport { CommandEntry } from \"./components/command-entry\";\nimport { CommandRouter } from \"./components/command-router\";\nimport { VirtualCommandEntry } from \"./components/virtual-command-entry\";\nimport { getDefaultOptions } from \"./helpers/get-default-options\";\nimport type { CLIPresetContext, CLIPresetOptions } from \"./types/plugin\";\n\n/**\n * The Shell Shock CLI Preset plugin.\n *\n * @remarks\n * This preset includes a set of built-in modules and commands to create a CLI application, as well as configuration options to customize the generated code. It also includes the `prompts` plugin to provide interactive prompts in the CLI application, and the `upgrade` plugin to manage upgrading the local application's version.\n */\nexport const plugin = <TContext extends CLIPresetContext = CLIPresetContext>(\n options: CLIPresetOptions = {}\n) => {\n return [\n console(options),\n prompts(options),\n options.upgrade !== false && upgrade(options.upgrade),\n {\n name: \"shell-shock:cli-preset\",\n config() {\n this.debug(\n \"Providing default configuration for the Shell Shock `cli` preset.\"\n );\n\n return {\n defaultOptions: getDefaultOptions,\n isCaseSensitive: false,\n ...options\n };\n },\n configResolved() {\n this.dependencies.didyoumean2 = \"^7.0.4\";\n }\n },\n {\n name: \"shell-shock:cli-preset:generate-entrypoint\",\n prepare: {\n order: \"post\",\n async handler() {\n this.debug(\n \"Rendering entrypoint modules for the Shell Shock `cli` preset.\"\n );\n\n return render(\n this,\n <>\n <BinEntry\n builtinImports={{\n console: [\n \"info\",\n \"debug\",\n \"warn\",\n \"help\",\n \"error\",\n \"divider\",\n \"stripAnsi\",\n \"writeLine\",\n \"splitText\",\n \"colors\",\n \"writeLine\",\n \"splitText\",\n \"stripAnsi\",\n \"createSpinner\"\n ],\n utils: [\n \"useApp\",\n \"useArgs\",\n \"isMinimal\",\n \"isInteractive\",\n \"isHelp\"\n ],\n prompts: [\n \"text\",\n \"numeric\",\n \"toggle\",\n \"select\",\n \"confirm\",\n \"waitForKeyPress\",\n \"isCancel\",\n \"sleep\"\n ],\n upgrade: [\n \"checkForUpdates\",\n \"isCheckForUpdatesRequired\",\n \"upgrade\"\n ],\n env: [\"env\", \"paths\"]\n }}\n prefix={\n <>\n <BannerFunctionDeclaration />\n <hbr />\n <hbr />\n </>\n }>\n <Show when={Object.keys(this.commands).length > 0}>\n <VarDeclaration\n let\n name=\"args\"\n type=\"string[]\"\n initializer={code`useArgs();`}\n />\n <hbr />\n <CommandRouter segments={[]} commands={this.commands ?? {}} />\n <hbr />\n </Show>\n <hbr />\n {code`await banner(0, false);`}\n <hbr />\n <hbr />\n <VirtualHelp\n options={this.options}\n commands={this.commands ?? {}}\n />\n </BinEntry>\n <Show when={Object.values(this.commands).length > 0}>\n <For each={Object.values(this.commands)} doubleHardline>\n {child => (\n <Show\n when={child.isVirtual}\n fallback={<CommandEntry command={child} />}>\n <VirtualCommandEntry command={child} />\n </Show>\n )}\n </For>\n </Show>\n </>\n );\n }\n }\n }\n ] as Plugin<TContext>[];\n};\n\nexport default plugin;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAwCA,MAAae,UACXC,UAA4B,EAAE,KAC3B;AACH,QAAO;EACLX,QAAQW,QAAQ;EAChBV,QAAQU,QAAQ;EAChBA,QAAQT,YAAY,SAASA,QAAQS,QAAQT,QAAQ;EACrD;GACEU,MAAM;GACNC,SAAS;AACP,SAAKC,MACH,oEACD;AAED,WAAO;KACLC,gBAAgBN;KAChBO,iBAAiB;KACjB,GAAGL;KACJ;;GAEHM,iBAAiB;AACf,SAAKC,aAAaC,cAAc;;GAEnC;EACD;GACEP,MAAM;GACNQ,SAAS;IACPC,OAAO;IACP,MAAMC,UAAU;KAAA,MAAAC,SAAA;AACd,UAAKT,MACH,iEACD;AAED,YAAOf,OACL,MAAI,CAAAyB,gBAEDrB,UAAQ;MACPsB,gBAAgB;OACdzB,SAAS;QACP;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACD;OACD0B,OAAO;QACL;QACA;QACA;QACA;QACA;QACD;OACDzB,SAAS;QACP;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACD;OACDC,SAAS;QACP;QACA;QACA;QACD;OACDyB,KAAK,CAAC,OAAO,QAAO;OACrB;MAAA,IACDC,SAAM;AAAA,cAAA;QAAAJ,gBAEDnB,2BAAyB,EAAA,CAAA;QAAAwB,gBAAA,OAAA,EAAA,CAAA;QAAAA,gBAAA,OAAA,EAAA,CAAA;QAAA;;MAAA,IAAAC,WAAA;AAAA,cAAA;QAAAN,gBAK7B3B,MAAI;SAAA,IAACkC,OAAI;AAAA,iBAAEC,OAAOC,KAAKV,OAAKW,SAAS,CAACC,SAAS;;SAAC,IAAAL,WAAA;AAAA,iBAAA;WAAAN,gBAC9C1B,gBAAc;YAAA,OAAA;YAEbc,MAAI;YACJwB,MAAI;YACJC,aAAa1C,IAAI;YAAY,CAAA;WAAAkC,gBAAA,OAAA,EAAA,CAAA;WAAAL,gBAG9BjB,eAAa;YAAC+B,UAAU,EAAE;YAAA,IAAEJ,WAAQ;AAAA,oBAAEX,OAAKW,YAAY,EAAE;;YAAA,CAAA;WAAAL,gBAAA,OAAA,EAAA,CAAA;WAAA;;SAAA,CAAA;QAAAA,gBAAA,OAAA,EAAA,CAAA;QAI3DlC,IAAI;QAAyBkC,gBAAA,OAAA,EAAA,CAAA;QAAAA,gBAAA,OAAA,EAAA,CAAA;QAAAL,gBAG7BpB,aAAW;SAAA,IACVO,UAAO;AAAA,iBAAEY,OAAKZ;;SAAO,IACrBuB,WAAQ;AAAA,iBAAEX,OAAKW,YAAY,EAAE;;SAAA,CAAA;QAAA;;MAAA,CAAA,EAAAV,gBAGhC3B,MAAI;MAAA,IAACkC,OAAI;AAAA,cAAEC,OAAOO,OAAOhB,OAAKW,SAAS,CAACC,SAAS;;MAAC,IAAAL,WAAA;AAAA,cAAAN,gBAChD5B,KAAG;QAAA,IAAC4C,OAAI;AAAA,gBAAER,OAAOO,OAAOhB,OAAKW,SAAS;;QAAEO,gBAAc;QAAAX,WACpDY,UAAKlB,gBACH3B,MAAI;SAAA,IACHkC,OAAI;AAAA,iBAAEW,MAAMC;;SAAS,IACrBC,WAAQ;AAAA,iBAAApB,gBAAGlB,cAAY,EAACuC,SAASH,OAAK,CAAA;;SAAA,IAAAZ,WAAA;AAAA,iBAAAN,gBACrChB,qBAAmB,EAACqC,SAASH,OAAK,CAAA;;SAAA,CAAA;QAEtC,CAAA;;MAAA,CAAA,CAIT,CAAC;;IAEL;GACD;EACF;;AAGH,kBAAehC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@shell-shock/preset-cli",
3
- "version": "0.7.6",
3
+ "version": "0.7.7",
4
4
  "type": "module",
5
5
  "description": "A package containing a Shell Shock plugin to generate source code given a list design tokens.",
6
6
  "repository": {
@@ -167,20 +167,20 @@
167
167
  "dependencies": {
168
168
  "@alloy-js/core": "0.23.0-dev.8",
169
169
  "@alloy-js/typescript": "0.23.0-dev.4",
170
- "@powerlines/deepkit": "^0.6.68",
171
- "@powerlines/plugin-alloy": "^0.23.18",
172
- "@powerlines/plugin-plugin": "^0.12.239",
173
- "@shell-shock/core": "^0.9.2",
174
- "@shell-shock/plugin-console": "^0.1.0",
175
- "@shell-shock/plugin-prompts": "^0.3.1",
176
- "@shell-shock/plugin-theme": "^0.3.4",
177
- "@shell-shock/plugin-upgrade": "^0.1.6",
178
- "@shell-shock/preset-script": "^0.6.15",
170
+ "@powerlines/deepkit": "^0.6.69",
171
+ "@powerlines/plugin-alloy": "^0.23.19",
172
+ "@powerlines/plugin-plugin": "^0.12.240",
173
+ "@shell-shock/core": "^0.9.3",
174
+ "@shell-shock/plugin-console": "^0.1.1",
175
+ "@shell-shock/plugin-prompts": "^0.3.2",
176
+ "@shell-shock/plugin-theme": "^0.3.5",
177
+ "@shell-shock/plugin-upgrade": "^0.1.7",
178
+ "@shell-shock/preset-script": "^0.6.16",
179
179
  "@stryke/path": "0.26.6",
180
180
  "@stryke/string-format": "0.14.2",
181
181
  "cfonts": "^3.3.1",
182
182
  "defu": "6.1.4",
183
- "powerlines": "^0.38.55"
183
+ "powerlines": "^0.38.56"
184
184
  },
185
185
  "devDependencies": {
186
186
  "@babel/core": "^7.29.0",
@@ -210,5 +210,5 @@
210
210
  "./package.json": "./package.json"
211
211
  }
212
212
  },
213
- "gitHead": "a31a7a7e812f31a59f19cf31f8175d9c15a50e82"
213
+ "gitHead": "4cf65f37aca1c43ffac57a86bf21e184134437f1"
214
214
  }