@shell-shock/preset-cli 0.7.8 → 0.7.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,11 +1,11 @@
1
- import * as _alloy_js_core3 from "@alloy-js/core";
1
+ import * as _alloy_js_core2 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_core2.Children;
9
9
  //#endregion
10
10
  export { BannerFunctionDeclaration };
11
11
  //# sourceMappingURL=banner-function-declaration.d.cts.map
@@ -144,7 +144,7 @@ function CommandEntry(props) {
144
144
  get children() {
145
145
  return __alloy_js_core.code`
146
146
  const value = await text({
147
- message: "Please provide a value for the \\"${option.name}\\" option",
147
+ message: \`Please provide a value for the \${colors.italic("${option.name}")} option\`,
148
148
  ${option.description ? `description: "${option.description}",
149
149
  ` : ""}validate(val) {
150
150
  if (!val || val.trim() === "") {
@@ -169,7 +169,7 @@ function CommandEntry(props) {
169
169
  get children() {
170
170
  return __alloy_js_core.code`
171
171
  const value = await numeric({
172
- message: "Please provide a numeric value for the \\"${option.name}\\" option",
172
+ message: \`Please provide a numeric value for the \${colors.italic("${option.name}")} option\`,
173
173
  ${option.description ? `description: "${option.description}",
174
174
  ` : ""}
175
175
  });
@@ -188,7 +188,7 @@ function CommandEntry(props) {
188
188
  get children() {
189
189
  return __alloy_js_core.code`
190
190
  const value = await toggle({
191
- message: "Please select a value for the \\"${option.name}\\" option",
191
+ message: \`Please select a value for the \${colors.italic("${option.name}")} option\`,
192
192
  ${option.description ? `description: "${option.description}",
193
193
  ` : ""}
194
194
  });
@@ -215,7 +215,7 @@ function CommandEntry(props) {
215
215
  get children() {
216
216
  return __alloy_js_core.code`
217
217
  const value = await text({
218
- message: "Please provide one or more${option.kind === __powerlines_deepkit_vendor_type.ReflectionKind.number ? " numeric" : ""} values for the \\"${option.name}\\" option (values are separated by a \\",\\" character)",
218
+ message: \`Please provide one or more${option.kind === __powerlines_deepkit_vendor_type.ReflectionKind.number ? " numeric" : ""} values for the \${colors.italic("${option.name}")} option (values are separated by a \\",\\" character)\`,
219
219
  ${option.description ? `description: "${option.description}",
220
220
  ` : ""}validate(val) {
221
221
  if (!val || val.trim() === "") {
@@ -269,7 +269,7 @@ function CommandEntry(props) {
269
269
  get children() {
270
270
  return __alloy_js_core.code`
271
271
  const value = await text({
272
- message: "Please provide a value for the \\"${argument.name}\\" argument",
272
+ message: \`Please provide a value for the \${colors.italic("${argument.name}")} argument\`,
273
273
  ${argument.description ? `description: "${argument.description}",
274
274
  ` : ""}validate(val) {
275
275
  if (!val || val.trim() === "") {
@@ -294,7 +294,7 @@ function CommandEntry(props) {
294
294
  get children() {
295
295
  return __alloy_js_core.code`
296
296
  const value = await numeric({
297
- message: "Please provide a numeric value for the \\"${argument.name}\\" argument",
297
+ message: \`Please provide a numeric value for the \${colors.italic("${argument.name}")} argument\`,
298
298
  ${argument.description ? `description: "${argument.description}",
299
299
  ` : ""}
300
300
  });
@@ -313,7 +313,7 @@ function CommandEntry(props) {
313
313
  get children() {
314
314
  return __alloy_js_core.code`
315
315
  const value = await toggle({
316
- message: "Please select a value for the \\"${argument.name}\\" argument",
316
+ message: \`Please select a value for the \${colors.italic("${argument.name}")} argument\`,
317
317
  ${argument.description ? `description: "${argument.description}",
318
318
  ` : ""}
319
319
  });
@@ -340,7 +340,7 @@ function CommandEntry(props) {
340
340
  get children() {
341
341
  return __alloy_js_core.code`
342
342
  const value = await text({
343
- message: "Please provide one or more${argument.kind === __powerlines_deepkit_vendor_type.ReflectionKind.number ? " numeric" : ""} (values are separated by a \\",\\" character)",
343
+ message: \`Please provide one or more${argument.kind === __powerlines_deepkit_vendor_type.ReflectionKind.number ? " numeric" : ""} values for the \${colors.italic("${argument.name}")} argument (values are separated by a \\",\\" character)\`,
344
344
  ${argument.description ? `description: "${argument.description}",
345
345
  ` : ""}validate(val) {
346
346
  if (!val || val.trim() === "") {
@@ -1,4 +1,4 @@
1
- import * as _alloy_js_core0 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_core0.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
@@ -142,7 +142,7 @@ function CommandEntry(props) {
142
142
  get children() {
143
143
  return code`
144
144
  const value = await text({
145
- message: "Please provide a value for the \\"${option.name}\\" option",
145
+ message: \`Please provide a value for the \${colors.italic("${option.name}")} option\`,
146
146
  ${option.description ? `description: "${option.description}",
147
147
  ` : ""}validate(val) {
148
148
  if (!val || val.trim() === "") {
@@ -167,7 +167,7 @@ function CommandEntry(props) {
167
167
  get children() {
168
168
  return code`
169
169
  const value = await numeric({
170
- message: "Please provide a numeric value for the \\"${option.name}\\" option",
170
+ message: \`Please provide a numeric value for the \${colors.italic("${option.name}")} option\`,
171
171
  ${option.description ? `description: "${option.description}",
172
172
  ` : ""}
173
173
  });
@@ -186,7 +186,7 @@ function CommandEntry(props) {
186
186
  get children() {
187
187
  return code`
188
188
  const value = await toggle({
189
- message: "Please select a value for the \\"${option.name}\\" option",
189
+ message: \`Please select a value for the \${colors.italic("${option.name}")} option\`,
190
190
  ${option.description ? `description: "${option.description}",
191
191
  ` : ""}
192
192
  });
@@ -213,7 +213,7 @@ function CommandEntry(props) {
213
213
  get children() {
214
214
  return code`
215
215
  const value = await text({
216
- message: "Please provide one or more${option.kind === ReflectionKind.number ? " numeric" : ""} values for the \\"${option.name}\\" option (values are separated by a \\",\\" character)",
216
+ message: \`Please provide one or more${option.kind === ReflectionKind.number ? " numeric" : ""} values for the \${colors.italic("${option.name}")} option (values are separated by a \\",\\" character)\`,
217
217
  ${option.description ? `description: "${option.description}",
218
218
  ` : ""}validate(val) {
219
219
  if (!val || val.trim() === "") {
@@ -267,7 +267,7 @@ function CommandEntry(props) {
267
267
  get children() {
268
268
  return code`
269
269
  const value = await text({
270
- message: "Please provide a value for the \\"${argument.name}\\" argument",
270
+ message: \`Please provide a value for the \${colors.italic("${argument.name}")} argument\`,
271
271
  ${argument.description ? `description: "${argument.description}",
272
272
  ` : ""}validate(val) {
273
273
  if (!val || val.trim() === "") {
@@ -292,7 +292,7 @@ function CommandEntry(props) {
292
292
  get children() {
293
293
  return code`
294
294
  const value = await numeric({
295
- message: "Please provide a numeric value for the \\"${argument.name}\\" argument",
295
+ message: \`Please provide a numeric value for the \${colors.italic("${argument.name}")} argument\`,
296
296
  ${argument.description ? `description: "${argument.description}",
297
297
  ` : ""}
298
298
  });
@@ -311,7 +311,7 @@ function CommandEntry(props) {
311
311
  get children() {
312
312
  return code`
313
313
  const value = await toggle({
314
- message: "Please select a value for the \\"${argument.name}\\" argument",
314
+ message: \`Please select a value for the \${colors.italic("${argument.name}")} argument\`,
315
315
  ${argument.description ? `description: "${argument.description}",
316
316
  ` : ""}
317
317
  });
@@ -338,7 +338,7 @@ function CommandEntry(props) {
338
338
  get children() {
339
339
  return code`
340
340
  const value = await text({
341
- message: "Please provide one or more${argument.kind === ReflectionKind.number ? " numeric" : ""} (values are separated by a \\",\\" character)",
341
+ message: \`Please provide one or more${argument.kind === ReflectionKind.number ? " numeric" : ""} values for the \${colors.italic("${argument.name}")} argument (values are separated by a \\",\\" character)\`,
342
342
  ${argument.description ? `description: "${argument.description}",
343
343
  ` : ""}validate(val) {
344
344
  if (!val || val.trim() === "") {
@@ -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\", \"paths\"],\n console: [\n \"debug\",\n \"info\",\n \"help\",\n \"warn\",\n \"error\",\n \"table\",\n \"colors\",\n \"cursor\",\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
+ {"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 \"cursor\",\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 \\${colors.italic(\"${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 \\${colors.italic(\"${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 \\${colors.italic(\"${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 </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 \\${colors.italic(\"${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 \\${colors.italic(\"${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 \\${colors.italic(\"${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 \\${colors.italic(\"${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 for the \\${colors.italic(\"${argument.name}\")} argument (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_core2 from "@alloy-js/core";
1
+ import * as _alloy_js_core0 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_core2.Children;
12
+ declare function VirtualCommandEntry(props: VirtualCommandEntryProps): _alloy_js_core0.Children;
13
13
  //#endregion
14
14
  export { VirtualCommandEntry, VirtualCommandEntryProps };
15
15
  //# sourceMappingURL=virtual-command-entry.d.cts.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@shell-shock/preset-cli",
3
- "version": "0.7.8",
3
+ "version": "0.7.9",
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": {
@@ -170,12 +170,12 @@
170
170
  "@powerlines/deepkit": "^0.6.69",
171
171
  "@powerlines/plugin-alloy": "^0.23.19",
172
172
  "@powerlines/plugin-plugin": "^0.12.240",
173
- "@shell-shock/core": "^0.9.4",
174
- "@shell-shock/plugin-console": "^0.1.2",
175
- "@shell-shock/plugin-prompts": "^0.3.3",
176
- "@shell-shock/plugin-theme": "^0.3.6",
177
- "@shell-shock/plugin-upgrade": "^0.1.8",
178
- "@shell-shock/preset-script": "^0.6.17",
173
+ "@shell-shock/core": "^0.9.5",
174
+ "@shell-shock/plugin-console": "^0.1.3",
175
+ "@shell-shock/plugin-prompts": "^0.3.4",
176
+ "@shell-shock/plugin-theme": "^0.3.7",
177
+ "@shell-shock/plugin-upgrade": "^0.1.9",
178
+ "@shell-shock/preset-script": "^0.6.18",
179
179
  "@stryke/path": "0.26.6",
180
180
  "@stryke/string-format": "0.14.2",
181
181
  "cfonts": "^3.3.1",
@@ -184,7 +184,7 @@
184
184
  },
185
185
  "devDependencies": {
186
186
  "@babel/core": "^7.29.0",
187
- "@types/node": "^25.3.0",
187
+ "@types/node": "^25.3.1",
188
188
  "@types/react": "^19.2.14"
189
189
  },
190
190
  "publishConfig": {
@@ -210,5 +210,5 @@
210
210
  "./package.json": "./package.json"
211
211
  }
212
212
  },
213
- "gitHead": "bd869b58fe1c78d739013c652b1ebebaa1360ac8"
213
+ "gitHead": "603cb61e0a2c4c8a1e86beb4b3d8dc2882ea207f"
214
214
  }