@shell-shock/preset-script 0.6.23 → 0.6.26

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (143) hide show
  1. package/dist/_virtual/{rolldown_runtime.cjs → _rolldown/runtime.cjs} +1 -1
  2. package/dist/_virtual/_rolldown/runtime.mjs +3 -0
  3. package/dist/components/banner-function-declaration.cjs +28 -27
  4. package/dist/components/banner-function-declaration.cjs.map +1 -1
  5. package/dist/components/banner-function-declaration.d.cts.map +1 -1
  6. package/dist/components/banner-function-declaration.d.mts.map +1 -1
  7. package/dist/components/banner-function-declaration.mjs +2 -2
  8. package/dist/components/banner-function-declaration.mjs.map +1 -1
  9. package/dist/components/bin-entry.cjs +54 -45
  10. package/dist/components/bin-entry.cjs.map +1 -1
  11. package/dist/components/bin-entry.d.cts +0 -1
  12. package/dist/components/bin-entry.d.cts.map +1 -1
  13. package/dist/components/bin-entry.d.mts +0 -1
  14. package/dist/components/bin-entry.d.mts.map +1 -1
  15. package/dist/components/bin-entry.mjs +17 -9
  16. package/dist/components/bin-entry.mjs.map +1 -1
  17. package/dist/components/command-entry.cjs +76 -235
  18. package/dist/components/command-entry.cjs.map +1 -1
  19. package/dist/components/command-entry.d.cts +1 -8
  20. package/dist/components/command-entry.d.cts.map +1 -1
  21. package/dist/components/command-entry.d.mts +2 -9
  22. package/dist/components/command-entry.d.mts.map +1 -1
  23. package/dist/components/command-entry.mjs +24 -183
  24. package/dist/components/command-entry.mjs.map +1 -1
  25. package/dist/components/command-router.cjs +85 -83
  26. package/dist/components/command-router.cjs.map +1 -1
  27. package/dist/components/command-router.d.cts.map +1 -1
  28. package/dist/components/command-router.d.mts.map +1 -1
  29. package/dist/components/command-router.mjs +59 -58
  30. package/dist/components/command-router.mjs.map +1 -1
  31. package/dist/components/exit-function-declaration.cjs +38 -37
  32. package/dist/components/exit-function-declaration.cjs.map +1 -1
  33. package/dist/components/exit-function-declaration.d.cts +2 -2
  34. package/dist/components/exit-function-declaration.d.cts.map +1 -1
  35. package/dist/components/exit-function-declaration.d.mts +2 -2
  36. package/dist/components/exit-function-declaration.d.mts.map +1 -1
  37. package/dist/components/exit-function-declaration.mjs +3 -3
  38. package/dist/components/exit-function-declaration.mjs.map +1 -1
  39. package/dist/components/index.cjs +2 -9
  40. package/dist/components/index.d.cts +2 -3
  41. package/dist/components/index.d.mts +2 -3
  42. package/dist/components/index.mjs +2 -3
  43. package/dist/components/virtual-command-entry.cjs +43 -59
  44. package/dist/components/virtual-command-entry.cjs.map +1 -1
  45. package/dist/components/virtual-command-entry.d.cts.map +1 -1
  46. package/dist/components/virtual-command-entry.d.mts.map +1 -1
  47. package/dist/components/virtual-command-entry.mjs +13 -30
  48. package/dist/components/virtual-command-entry.mjs.map +1 -1
  49. package/dist/helpers/get-default-options.cjs +8 -7
  50. package/dist/helpers/get-default-options.cjs.map +1 -1
  51. package/dist/helpers/get-default-options.d.cts +0 -1
  52. package/dist/helpers/get-default-options.d.cts.map +1 -1
  53. package/dist/helpers/get-default-options.d.mts +0 -1
  54. package/dist/helpers/get-default-options.d.mts.map +1 -1
  55. package/dist/helpers/get-default-options.mjs.map +1 -1
  56. package/dist/index.cjs +30 -42
  57. package/dist/index.cjs.map +1 -1
  58. package/dist/index.d.cts +0 -1
  59. package/dist/index.d.cts.map +1 -1
  60. package/dist/index.d.mts +0 -1
  61. package/dist/index.d.mts.map +1 -1
  62. package/dist/index.mjs +8 -20
  63. package/dist/index.mjs.map +1 -1
  64. package/dist/plugin-help/dist/components/display.cjs +260 -0
  65. package/dist/plugin-help/dist/components/display.cjs.map +1 -0
  66. package/dist/{components/help.mjs → plugin-help/dist/components/display.mjs} +26 -30
  67. package/dist/plugin-help/dist/components/display.mjs.map +1 -0
  68. package/dist/plugin-help/dist/components/help-builtin.cjs +86 -0
  69. package/dist/plugin-help/dist/components/help-builtin.cjs.map +1 -0
  70. package/dist/plugin-help/dist/components/help-builtin.mjs +84 -0
  71. package/dist/plugin-help/dist/components/help-builtin.mjs.map +1 -0
  72. package/dist/plugin-help/dist/components/help-command.cjs +97 -0
  73. package/dist/plugin-help/dist/components/help-command.cjs.map +1 -0
  74. package/dist/plugin-help/dist/components/help-command.mjs +96 -0
  75. package/dist/plugin-help/dist/components/help-command.mjs.map +1 -0
  76. package/dist/plugin-help/dist/components/index.cjs +3 -0
  77. package/dist/plugin-help/dist/components/index.mjs +5 -0
  78. package/dist/plugin-help/dist/index.cjs +104 -0
  79. package/dist/plugin-help/dist/index.cjs.map +1 -0
  80. package/dist/plugin-help/dist/index.d.cts +2 -0
  81. package/dist/plugin-help/dist/index.d.mts +2 -0
  82. package/dist/plugin-help/dist/index.mjs +100 -0
  83. package/dist/plugin-help/dist/index.mjs.map +1 -0
  84. package/dist/plugin-help/dist/node_modules/.pnpm/@stryke_string-format@0.17.4/node_modules/@stryke/string-format/dist/constant-case.cjs +18 -0
  85. package/dist/plugin-help/dist/node_modules/.pnpm/@stryke_string-format@0.17.4/node_modules/@stryke/string-format/dist/constant-case.cjs.map +1 -0
  86. package/dist/plugin-help/dist/node_modules/.pnpm/@stryke_string-format@0.17.4/node_modules/@stryke/string-format/dist/constant-case.mjs +17 -0
  87. package/dist/plugin-help/dist/node_modules/.pnpm/@stryke_string-format@0.17.4/node_modules/@stryke/string-format/dist/constant-case.mjs.map +1 -0
  88. package/dist/plugin-help/dist/node_modules/.pnpm/@stryke_string-format@0.17.4/node_modules/@stryke/string-format/dist/get-words.cjs +39 -0
  89. package/dist/plugin-help/dist/node_modules/.pnpm/@stryke_string-format@0.17.4/node_modules/@stryke/string-format/dist/get-words.cjs.map +1 -0
  90. package/dist/plugin-help/dist/node_modules/.pnpm/@stryke_string-format@0.17.4/node_modules/@stryke/string-format/dist/get-words.mjs +38 -0
  91. package/dist/plugin-help/dist/node_modules/.pnpm/@stryke_string-format@0.17.4/node_modules/@stryke/string-format/dist/get-words.mjs.map +1 -0
  92. package/dist/plugin-help/dist/node_modules/.pnpm/@stryke_string-format@0.17.4/node_modules/@stryke/string-format/dist/kebab-case.cjs +34 -0
  93. package/dist/plugin-help/dist/node_modules/.pnpm/@stryke_string-format@0.17.4/node_modules/@stryke/string-format/dist/kebab-case.cjs.map +1 -0
  94. package/dist/plugin-help/dist/node_modules/.pnpm/@stryke_string-format@0.17.4/node_modules/@stryke/string-format/dist/kebab-case.mjs +34 -0
  95. package/dist/plugin-help/dist/node_modules/.pnpm/@stryke_string-format@0.17.4/node_modules/@stryke/string-format/dist/kebab-case.mjs.map +1 -0
  96. package/dist/plugin-help/dist/node_modules/.pnpm/@stryke_string-format@0.17.4/node_modules/@stryke/string-format/dist/snake-case.cjs +41 -0
  97. package/dist/plugin-help/dist/node_modules/.pnpm/@stryke_string-format@0.17.4/node_modules/@stryke/string-format/dist/snake-case.cjs.map +1 -0
  98. package/dist/plugin-help/dist/node_modules/.pnpm/@stryke_string-format@0.17.4/node_modules/@stryke/string-format/dist/snake-case.mjs +41 -0
  99. package/dist/plugin-help/dist/node_modules/.pnpm/@stryke_string-format@0.17.4/node_modules/@stryke/string-format/dist/snake-case.mjs.map +1 -0
  100. package/dist/plugin-help/dist/node_modules/.pnpm/@stryke_string-format@0.17.4/node_modules/@stryke/string-format/dist/upper-case-first.cjs +18 -0
  101. package/dist/plugin-help/dist/node_modules/.pnpm/@stryke_string-format@0.17.4/node_modules/@stryke/string-format/dist/upper-case-first.cjs.map +1 -0
  102. package/dist/plugin-help/dist/node_modules/.pnpm/@stryke_string-format@0.17.4/node_modules/@stryke/string-format/dist/upper-case-first.mjs +17 -0
  103. package/dist/plugin-help/dist/node_modules/.pnpm/@stryke_string-format@0.17.4/node_modules/@stryke/string-format/dist/upper-case-first.mjs.map +1 -0
  104. package/dist/plugin-help/dist/node_modules/.pnpm/@stryke_type-checks@0.5.39/node_modules/@stryke/type-checks/dist/is-empty.cjs +21 -0
  105. package/dist/plugin-help/dist/node_modules/.pnpm/@stryke_type-checks@0.5.39/node_modules/@stryke/type-checks/dist/is-empty.cjs.map +1 -0
  106. package/dist/plugin-help/dist/node_modules/.pnpm/@stryke_type-checks@0.5.39/node_modules/@stryke/type-checks/dist/is-empty.mjs +21 -0
  107. package/dist/plugin-help/dist/node_modules/.pnpm/@stryke_type-checks@0.5.39/node_modules/@stryke/type-checks/dist/is-empty.mjs.map +1 -0
  108. package/dist/plugin-help/dist/node_modules/.pnpm/@stryke_type-checks@0.5.39/node_modules/@stryke/type-checks/dist/is-null.cjs +13 -0
  109. package/dist/plugin-help/dist/node_modules/.pnpm/@stryke_type-checks@0.5.39/node_modules/@stryke/type-checks/dist/is-null.cjs.map +1 -0
  110. package/dist/plugin-help/dist/node_modules/.pnpm/@stryke_type-checks@0.5.39/node_modules/@stryke/type-checks/dist/is-null.mjs +12 -0
  111. package/dist/plugin-help/dist/node_modules/.pnpm/@stryke_type-checks@0.5.39/node_modules/@stryke/type-checks/dist/is-null.mjs.map +1 -0
  112. package/dist/plugin-help/dist/node_modules/.pnpm/@stryke_type-checks@0.5.39/node_modules/@stryke/type-checks/dist/is-set-string.cjs +21 -0
  113. package/dist/plugin-help/dist/node_modules/.pnpm/@stryke_type-checks@0.5.39/node_modules/@stryke/type-checks/dist/is-set-string.cjs.map +1 -0
  114. package/dist/plugin-help/dist/node_modules/.pnpm/@stryke_type-checks@0.5.39/node_modules/@stryke/type-checks/dist/is-set-string.mjs +21 -0
  115. package/dist/plugin-help/dist/node_modules/.pnpm/@stryke_type-checks@0.5.39/node_modules/@stryke/type-checks/dist/is-set-string.mjs.map +1 -0
  116. package/dist/plugin-help/dist/node_modules/.pnpm/@stryke_type-checks@0.5.39/node_modules/@stryke/type-checks/dist/is-set.cjs +20 -0
  117. package/dist/plugin-help/dist/node_modules/.pnpm/@stryke_type-checks@0.5.39/node_modules/@stryke/type-checks/dist/is-set.cjs.map +1 -0
  118. package/dist/plugin-help/dist/node_modules/.pnpm/@stryke_type-checks@0.5.39/node_modules/@stryke/type-checks/dist/is-set.mjs +20 -0
  119. package/dist/plugin-help/dist/node_modules/.pnpm/@stryke_type-checks@0.5.39/node_modules/@stryke/type-checks/dist/is-set.mjs.map +1 -0
  120. package/dist/plugin-help/dist/node_modules/.pnpm/@stryke_type-checks@0.5.39/node_modules/@stryke/type-checks/dist/is-string.cjs +13 -0
  121. package/dist/plugin-help/dist/node_modules/.pnpm/@stryke_type-checks@0.5.39/node_modules/@stryke/type-checks/dist/is-string.cjs.map +1 -0
  122. package/dist/plugin-help/dist/node_modules/.pnpm/@stryke_type-checks@0.5.39/node_modules/@stryke/type-checks/dist/is-string.mjs +12 -0
  123. package/dist/plugin-help/dist/node_modules/.pnpm/@stryke_type-checks@0.5.39/node_modules/@stryke/type-checks/dist/is-string.mjs.map +1 -0
  124. package/dist/plugin-help/dist/node_modules/.pnpm/@stryke_type-checks@0.5.39/node_modules/@stryke/type-checks/dist/is-undefined.cjs +9 -0
  125. package/dist/plugin-help/dist/node_modules/.pnpm/@stryke_type-checks@0.5.39/node_modules/@stryke/type-checks/dist/is-undefined.cjs.map +1 -0
  126. package/dist/plugin-help/dist/node_modules/.pnpm/@stryke_type-checks@0.5.39/node_modules/@stryke/type-checks/dist/is-undefined.mjs +8 -0
  127. package/dist/plugin-help/dist/node_modules/.pnpm/@stryke_type-checks@0.5.39/node_modules/@stryke/type-checks/dist/is-undefined.mjs.map +1 -0
  128. package/dist/plugin-help/dist/types/plugin.d.cts +62 -0
  129. package/dist/plugin-help/dist/types/plugin.d.cts.map +1 -0
  130. package/dist/plugin-help/dist/types/plugin.d.mts +62 -0
  131. package/dist/plugin-help/dist/types/plugin.d.mts.map +1 -0
  132. package/dist/types/plugin.d.cts +9 -9
  133. package/dist/types/plugin.d.cts.map +1 -1
  134. package/dist/types/plugin.d.mts +9 -9
  135. package/dist/types/plugin.d.mts.map +1 -1
  136. package/package.json +15 -29
  137. package/dist/components/help.cjs +0 -264
  138. package/dist/components/help.cjs.map +0 -1
  139. package/dist/components/help.d.cts +0 -105
  140. package/dist/components/help.d.cts.map +0 -1
  141. package/dist/components/help.d.mts +0 -105
  142. package/dist/components/help.d.mts.map +0 -1
  143. package/dist/components/help.mjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"command-entry.cjs","names":["code","computed","For","Show","ElseClause","ElseIfClause","FunctionDeclaration","IfStatement","VarDeclaration","Spacing","usePowerlines","EntryFile","TSDoc","TSDocParam","TSDocRemarks","TSDocTitle","CommandParameterKinds","IsDebug","CommandParserLogic","OptionsInterfaceDeclaration","getAppBin","getDynamicPathSegmentName","isDynamicPathSegment","findFilePath","relativePath","joinPaths","replaceExtension","camelCase","constantCase","kebabCase","pascalCase","defu","BannerFunctionDeclaration","CommandHelp","VirtualCommandEntry","CommandInvocation","props","command","_$createComponent","name","initializer","segments","map","segment","join","_$memo","args","length","arg","_$createIntrinsic","CommandHandlerDeclaration","banner","children","context","heading","title","description","replace","async","parameters","type","default","appSpecificEnvPrefix","config","isCaseSensitive","when","Boolean","condition","Object","values","options","option","CommandValidationLogic","each","doubleHardline","optional","includes","kind","string","number","variadic","fallback","argument","CommandEntry","imports","builtinImports","rest","filePath","filter","commandSourcePath","entryPath","value","entry","input","file","typeDefinition","output","id","_$mergeProps","path","env","console","utils","child","isVirtual"],"sources":["../../src/components/command-entry.tsx"],"sourcesContent":["/* -------------------------------------------------------------------\n\n ⚡ Storm Software - Shell Shock\n\n This code was released as part of the Shell Shock project. Shell Shock\n is maintained by Storm Software under the Apache-2.0 license, and is\n free for commercial and private use. For more information, please visit\n our licensing page at https://stormsoftware.com/licenses/projects/shell-shock.\n\n Website: https://stormsoftware.com\n Repository: https://github.com/storm-software/shell-shock\n Documentation: https://docs.stormsoftware.com/projects/shell-shock\n Contact: https://stormsoftware.com/contact\n\n SPDX-License-Identifier: Apache-2.0\n\n ------------------------------------------------------------------- */\n\nimport type { Children } from \"@alloy-js/core\";\nimport { code, computed, For, Show } from \"@alloy-js/core\";\nimport {\n ElseClause,\n ElseIfClause,\n FunctionDeclaration,\n IfStatement,\n VarDeclaration\n} from \"@alloy-js/typescript\";\nimport { Spacing } from \"@powerlines/plugin-alloy/core/components/spacing\";\nimport { usePowerlines } from \"@powerlines/plugin-alloy/core/contexts/context\";\nimport type { EntryFileProps } from \"@powerlines/plugin-alloy/typescript/components/entry-file\";\nimport { EntryFile } from \"@powerlines/plugin-alloy/typescript/components/entry-file\";\nimport {\n TSDoc,\n TSDocParam,\n TSDocRemarks,\n TSDocTitle\n} from \"@powerlines/plugin-alloy/typescript/components/tsdoc\";\nimport type { CommandTree, NumberCommandParameter } from \"@shell-shock/core\";\nimport { CommandParameterKinds } from \"@shell-shock/core\";\nimport { IsDebug } from \"@shell-shock/core/components/helpers\";\nimport {\n CommandParserLogic,\n OptionsInterfaceDeclaration\n} from \"@shell-shock/core/components/options-parser-logic\";\nimport {\n getAppBin,\n getDynamicPathSegmentName,\n isDynamicPathSegment\n} from \"@shell-shock/core/plugin-utils\";\nimport { findFilePath, relativePath } from \"@stryke/path/find\";\nimport { joinPaths } from \"@stryke/path/join\";\nimport { replaceExtension } from \"@stryke/path/replace\";\nimport { camelCase } from \"@stryke/string-format/camel-case\";\nimport { constantCase } from \"@stryke/string-format/constant-case\";\nimport { kebabCase } from \"@stryke/string-format/kebab-case\";\nimport { pascalCase } from \"@stryke/string-format/pascal-case\";\nimport defu from \"defu\";\nimport type { ScriptPresetContext } from \"../types/plugin\";\nimport { BannerFunctionDeclaration } from \"./banner-function-declaration\";\nimport { CommandHelp } from \"./help\";\nimport { VirtualCommandEntry } from \"./virtual-command-entry\";\n\nexport function CommandInvocation(props: { command: CommandTree }) {\n const { command } = props;\n\n return (\n <>\n <VarDeclaration\n name=\"__context\"\n initializer={code`{ path: \\`${command.segments\n .map(segment =>\n isDynamicPathSegment(segment)\n ? `\\${${camelCase(getDynamicPathSegmentName(segment))}}`\n : segment\n )\n .join(\"/\")}\\`, segments: [${command.segments\n .map(segment =>\n isDynamicPathSegment(segment)\n ? camelCase(getDynamicPathSegmentName(segment))\n : `\"${segment}\"`\n )\n .join(\", \")}] }`}\n />\n <Spacing />\n {code`\n\n return internal_commandContext.run(__context, () => {\n return Promise.resolve(Reflect.apply(handle${pascalCase(\n command.name\n )}, __context, [options${\n command.args.length > 0\n ? `, ${command.args.map(arg => camelCase(arg.name)).join(\", \")}`\n : \"\"\n }]));\n });\n\n `}\n <hbr />\n </>\n );\n}\n\nexport interface CommandHandlerDeclarationProps {\n command: CommandTree;\n banner?: Children;\n children?: Children;\n}\n\n/**\n * A component that generates the `handler` function declaration for a command.\n */\nexport function CommandHandlerDeclaration(\n props: CommandHandlerDeclarationProps\n) {\n const { command, banner, children } = props;\n\n const context = usePowerlines<ScriptPresetContext>();\n\n return (\n <>\n <OptionsInterfaceDeclaration command={command} />\n <Spacing />\n <TSDoc\n heading={`The ${command.title} (${getAppBin(context)} ${command.segments\n .map(segment =>\n isDynamicPathSegment(segment)\n ? `[${constantCase(getDynamicPathSegmentName(segment))}]`\n : segment\n )\n .join(\" \")}) command.`}>\n <TSDocRemarks>{`${command.description.replace(/\\.+$/, \"\")}.`}</TSDocRemarks>\n <hbr />\n <TSDocTitle>{command.title}</TSDocTitle>\n <TSDocParam name=\"args\">{`The command-line arguments passed to the command.`}</TSDocParam>\n </TSDoc>\n <FunctionDeclaration\n export\n async\n name=\"handler\"\n parameters={[{ name: \"args\", type: \"string[]\", default: \"useArgs()\" }]}>\n <CommandParserLogic\n command={command}\n appSpecificEnvPrefix={context.config.appSpecificEnvPrefix}\n isCaseSensitive={context.config.isCaseSensitive}\n />\n <hbr />\n <hbr />\n <Show when={Boolean(banner)}>{banner}</Show>\n <hbr />\n <hbr />\n <IfStatement condition={<IsDebug />}>\n {code`writeLine(\"\");\n writeLine(colors.text.body.tertiary(\"Debug mode is enabled. Additional debug information may be logged to the console.\"));\n debug(\\`Command path: ${command.segments\n .map(segment =>\n isDynamicPathSegment(segment)\n ? `\\${${camelCase(getDynamicPathSegmentName(segment))}}`\n : segment\n )\n .join(\" / \")} \\\\n\\\\nOptions: \\\\n${Object.values(command.options)\n .map(\n option =>\n ` - ${kebabCase(option.name)}: \\${options.${camelCase(\n option.name\n )} === undefined ? \"\" : JSON.stringify(options.${camelCase(\n option.name\n )})}`\n )\n .join(\"\\\\n\")}${\n command.args.length > 0\n ? ` \\\\n\\\\nArguments: \\\\n${command.args\n .map(\n arg =>\n ` - ${kebabCase(arg.name)}: \\${${camelCase(\n arg.name\n )} === undefined ? \"\" : JSON.stringify(${camelCase(\n arg.name\n )})}`\n )\n .join(\"\\\\n\")}`\n : \"\"\n }\\`);\n writeLine(\"\"); `}\n </IfStatement>\n <hbr />\n <hbr />\n {children}\n <hbr />\n <hbr />\n <IfStatement condition={code`options.help`}>\n <CommandHelp command={command} />\n </IfStatement>\n <ElseClause>\n <hbr />\n <CommandInvocation command={command} />\n </ElseClause>\n </FunctionDeclaration>\n </>\n );\n}\n\nexport interface CommandValidationLogicProps {\n command: CommandTree;\n}\n\n/**\n * A component that generates command validation logic for required options and arguments.\n */\nexport function CommandValidationLogic(props: CommandValidationLogicProps) {\n const { command } = props;\n\n return (\n <>\n <VarDeclaration name=\"failures\" type=\"string[]\" initializer={code`[];`} />\n <hbr />\n <For each={Object.values(command.options ?? {})} doubleHardline>\n {option => (\n <>\n <Show when={!option.optional}>\n <IfStatement\n condition={code`!options${\n option.name.includes(\"?\")\n ? `[\"${option.name}\"]`\n : `.${camelCase(option.name)}`\n }`}>\n {code`failures.push(\"Missing required \\\\\"${option.name}\\\\\" option\");`}\n </IfStatement>\n <Show\n when={\n (option.kind === CommandParameterKinds.string ||\n option.kind === CommandParameterKinds.number) &&\n option.variadic\n }>\n <ElseIfClause\n condition={code`options${\n option.name.includes(\"?\")\n ? `[\"${option.name}\"]`\n : `.${camelCase(option.name)}`\n }.length === 0`}>\n {code`failures.push(\"No values were provided to the required \\\\\"${\n option.name\n }\\\\\" array option\");`}\n </ElseIfClause>\n </Show>\n </Show>\n <Show when={option.kind === CommandParameterKinds.number}>\n <Show\n when={(option as NumberCommandParameter).variadic}\n fallback={\n <IfStatement\n condition={code`options${\n option.name.includes(\"?\")\n ? `[\"${option.name}\"]`\n : `.${camelCase(option.name)}`\n } && Number.isNaN(options${\n option.name.includes(\"?\")\n ? `[\"${option.name}\"]`\n : `.${camelCase(option.name)}`\n })`}>\n {code`failures.push(\"Invalid numeric value provided for the \\\\\"${\n option.name\n }\\\\\" option\");`}\n </IfStatement>\n }>\n <IfStatement\n condition={code`options${\n option.name.includes(\"?\")\n ? `[\"${option.name}\"]`\n : `.${camelCase(option.name)}`\n }.some(value => Number.isNaN(value))`}>\n {code`failures.push(\"Invalid numeric value provided in the \\\\\"${\n option.name\n }\\\\\" array option\");`}\n </IfStatement>\n </Show>\n </Show>\n </>\n )}\n </For>\n <Spacing />\n <For each={command.args} doubleHardline>\n {argument => (\n <>\n <Show when={!argument.optional}>\n <IfStatement condition={code`!${camelCase(argument.name)}`}>\n {code`failures.push(\"Missing required \\\\\"${\n argument.name\n }\\\\\" positional argument\");`}\n </IfStatement>\n <Show\n when={\n (argument.kind === CommandParameterKinds.string ||\n argument.kind === CommandParameterKinds.number) &&\n argument.variadic\n }>\n <ElseIfClause\n condition={code`${camelCase(argument.name)}.length === 0`}>\n {code`failures.push(\"No values were provided to the required \\\\\"${\n argument.name\n }\\\\\" array positional argument\");`}\n </ElseIfClause>\n </Show>\n </Show>\n <Show when={argument.kind === CommandParameterKinds.number}>\n <Show\n when={(argument as NumberCommandParameter).variadic}\n fallback={\n <IfStatement\n condition={code`${camelCase(\n argument.name\n )} && Number.isNaN(${camelCase(argument.name)})`}>\n {code`failures.push(\"Invalid numeric value provided for the \\\\\"${\n argument.name\n }\\\\\" positional argument\");`}\n </IfStatement>\n }>\n <IfStatement\n condition={code`${camelCase(argument.name)}.some(value => Number.isNaN(value))`}>\n {code`failures.push(\"Invalid numeric value provided in the \\\\\"${\n argument.name\n }\\\\\" array positional argument\");`}\n </IfStatement>\n </Show>\n </Show>\n </>\n )}\n </For>\n <IfStatement condition={code`failures.length > 0`}>\n {code`error(\"The following validation failures were found while processing the user provided input, and must be corrected before the command-line process can be executed: \\\\n\\\\n\" + failures.map(failure => \" - \" + failure).join(\"\\\\n\"));\n options.help = true; `}\n </IfStatement>\n </>\n );\n}\n\nexport interface CommandEntryProps extends Omit<\n EntryFileProps,\n \"path\" | \"typeDefinition\"\n> {\n command: CommandTree;\n}\n\n/**\n * The command entry point for the Shell Shock project.\n */\nexport function CommandEntry(props: CommandEntryProps) {\n const { command, imports, builtinImports, ...rest } = props;\n\n const context = usePowerlines<ScriptPresetContext>();\n const filePath = computed(() =>\n joinPaths(\n command.segments\n .filter(segment => !isDynamicPathSegment(segment))\n .join(\"/\"),\n \"index.ts\"\n )\n );\n const commandSourcePath = computed(\n () =>\n `./${replaceExtension(\n relativePath(\n joinPaths(context.entryPath, findFilePath(filePath.value)),\n command.entry.input?.file || command.entry.file\n )\n )}`\n );\n const typeDefinition = computed(() => ({\n ...command.entry,\n output: command.id\n }));\n\n return (\n <>\n <EntryFile\n {...rest}\n path={filePath.value}\n typeDefinition={typeDefinition.value}\n imports={defu(imports ?? {}, {\n [commandSourcePath.value]: `handle${pascalCase(command.name)}`\n })}\n builtinImports={defu(builtinImports ?? {}, {\n env: [\"env\", \"isDevelopment\", \"isDebug\"],\n console: [\n \"debug\",\n \"warn\",\n \"error\",\n \"table\",\n \"colors\",\n \"stripAnsi\",\n \"writeLine\",\n \"splitText\"\n ],\n utils: [\n \"useArgs\",\n \"hasFlag\",\n \"isMinimal\",\n \"isUnicodeSupported\",\n \"internal_commandContext\"\n ]\n })}>\n <BannerFunctionDeclaration command={command} />\n <hbr />\n <hbr />\n <OptionsInterfaceDeclaration command={command} />\n <hbr />\n <hbr />\n <CommandHandlerDeclaration command={command} banner={code`banner(); `}>\n <CommandValidationLogic command={command} />\n </CommandHandlerDeclaration>\n </EntryFile>\n <For each={Object.values(command.children)}>\n {child => (\n <Show\n when={child.isVirtual}\n fallback={<CommandEntry command={child} />}>\n <VirtualCommandEntry command={child} />\n </Show>\n )}\n </For>\n </>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"command-entry.cjs","names":[],"sources":["../../src/components/command-entry.tsx"],"sourcesContent":["/* -------------------------------------------------------------------\n\n ⚡ Storm Software - Shell Shock\n\n This code was released as part of the Shell Shock project. Shell Shock\n is maintained by Storm Software under the Apache-2.0 license, and is\n free for commercial and private use. For more information, please visit\n our licensing page at https://stormsoftware.com/licenses/projects/shell-shock.\n\n Website: https://stormsoftware.com\n Repository: https://github.com/storm-software/shell-shock\n Documentation: https://docs.stormsoftware.com/projects/shell-shock\n Contact: https://stormsoftware.com/contact\n\n SPDX-License-Identifier: Apache-2.0\n\n ------------------------------------------------------------------- */\n\nimport type { Children } from \"@alloy-js/core\";\nimport { code, computed, For, Show } from \"@alloy-js/core\";\nimport {\n ElseClause,\n 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 type { EntryFileProps } from \"@powerlines/plugin-alloy/typescript/components/entry-file\";\nimport { EntryFile } from \"@powerlines/plugin-alloy/typescript/components/entry-file\";\nimport {\n TSDoc,\n TSDocParam,\n TSDocRemarks,\n TSDocTitle\n} from \"@powerlines/plugin-alloy/typescript/components/tsdoc\";\nimport type { CommandTree } from \"@shell-shock/core\";\nimport { CommandValidationLogic } from \"@shell-shock/core/components/command-validation-logic\";\nimport { IsDebug } from \"@shell-shock/core/components/helpers\";\nimport {\n CommandParserLogic,\n OptionsInterfaceDeclaration\n} from \"@shell-shock/core/components/options-parser-logic\";\nimport {\n getAppBin,\n getDynamicPathSegmentName,\n isDynamicPathSegment\n} from \"@shell-shock/core/plugin-utils\";\nimport { findFilePath, relativePath } from \"@stryke/path/find\";\nimport { joinPaths } from \"@stryke/path/join\";\nimport { replaceExtension } from \"@stryke/path/replace\";\nimport { camelCase } from \"@stryke/string-format/camel-case\";\nimport { constantCase } from \"@stryke/string-format/constant-case\";\nimport { kebabCase } from \"@stryke/string-format/kebab-case\";\nimport { pascalCase } from \"@stryke/string-format/pascal-case\";\nimport defu from \"defu\";\nimport type { ScriptPresetContext } from \"../types/plugin\";\nimport { BannerFunctionDeclaration } from \"./banner-function-declaration\";\nimport { VirtualCommandEntry } from \"./virtual-command-entry\";\n\nexport function CommandInvocation(props: { command: CommandTree }) {\n const { command } = props;\n\n return (\n <>\n <VarDeclaration\n name=\"__context\"\n initializer={code`{ path: \\`${command.segments\n .map(segment =>\n isDynamicPathSegment(segment)\n ? `\\${${camelCase(getDynamicPathSegmentName(segment))}}`\n : segment\n )\n .join(\"/\")}\\`, segments: [${command.segments\n .map(segment =>\n isDynamicPathSegment(segment)\n ? camelCase(getDynamicPathSegmentName(segment))\n : `\"${segment}\"`\n )\n .join(\", \")}] }`}\n />\n <Spacing />\n {code`\n\n return internal_commandContext.run(__context, () => {\n return Promise.resolve(Reflect.apply(handle${pascalCase(\n command.name\n )}, __context, [options${\n command.args.length > 0\n ? `, ${command.args.map(arg => camelCase(arg.name)).join(\", \")}`\n : \"\"\n }]));\n });\n\n `}\n <hbr />\n </>\n );\n}\n\nexport interface CommandHandlerDeclarationProps {\n command: CommandTree;\n banner?: Children;\n children?: Children;\n}\n\n/**\n * A component that generates the `handler` function declaration for a command.\n */\nexport function CommandHandlerDeclaration(\n props: CommandHandlerDeclarationProps\n) {\n const { command, banner, children } = props;\n\n const context = usePowerlines<ScriptPresetContext>();\n\n return (\n <>\n <OptionsInterfaceDeclaration command={command} />\n <Spacing />\n <TSDoc\n heading={`The ${command.title} (${getAppBin(context)} ${command.segments\n .map(segment =>\n isDynamicPathSegment(segment)\n ? `[${constantCase(getDynamicPathSegmentName(segment))}]`\n : segment\n )\n .join(\" \")}) command.`}>\n <TSDocRemarks>{`${command.description.replace(/\\.+$/, \"\")}.`}</TSDocRemarks>\n <hbr />\n <TSDocTitle>{command.title}</TSDocTitle>\n <TSDocParam name=\"args\">{`The command-line arguments passed to the command.`}</TSDocParam>\n </TSDoc>\n <FunctionDeclaration\n export\n async\n name=\"handler\"\n parameters={[{ name: \"args\", type: \"string[]\", default: \"useArgs()\" }]}>\n <CommandParserLogic\n command={command}\n appSpecificEnvPrefix={context.config.appSpecificEnvPrefix}\n isCaseSensitive={context.config.isCaseSensitive}\n />\n <Spacing />\n <Show when={Boolean(banner)}>{banner}</Show>\n <Spacing />\n <IfStatement condition={<IsDebug />}>\n {code`writeLine(\"\");\n writeLine(colors.text.body.tertiary(\"Debug mode is enabled. Additional debug information may be logged to the console.\"));\n debug(\\`Command path: ${command.segments\n .map(segment =>\n isDynamicPathSegment(segment)\n ? `\\${${camelCase(getDynamicPathSegmentName(segment))}}`\n : segment\n )\n .join(\" / \")} \\\\n\\\\nOptions: \\\\n${Object.values(command.options)\n .map(\n option =>\n ` - ${kebabCase(option.name)}: \\${options.${camelCase(\n option.name\n )} === undefined ? \"\" : JSON.stringify(options.${camelCase(\n option.name\n )})}`\n )\n .join(\"\\\\n\")}${\n command.args.length > 0\n ? ` \\\\n\\\\nArguments: \\\\n${command.args\n .map(\n arg =>\n ` - ${kebabCase(arg.name)}: \\${${camelCase(\n arg.name\n )} === undefined ? \"\" : JSON.stringify(${camelCase(\n arg.name\n )})}`\n )\n .join(\"\\\\n\")}`\n : \"\"\n }\\`);\n writeLine(\"\"); `}\n </IfStatement>\n <Spacing />\n {children}\n <Spacing />\n <IfStatement condition={code`options.help`}>\n {code`return showHelp(); `}\n </IfStatement>\n <ElseClause>\n <hbr />\n <CommandInvocation command={command} />\n </ElseClause>\n </FunctionDeclaration>\n </>\n );\n}\n\nexport interface CommandEntryProps extends Omit<\n EntryFileProps,\n \"path\" | \"typeDefinition\"\n> {\n command: CommandTree;\n}\n\n/**\n * The command entry point for the Shell Shock project.\n */\nexport function CommandEntry(props: CommandEntryProps) {\n const { command, imports, builtinImports, ...rest } = props;\n\n const context = usePowerlines<ScriptPresetContext>();\n const filePath = computed(() =>\n joinPaths(\n command.segments\n .filter(segment => !isDynamicPathSegment(segment))\n .join(\"/\"),\n \"index.ts\"\n )\n );\n const commandSourcePath = computed(() =>\n replaceExtension(\n relativePath(\n joinPaths(context.entryPath, findFilePath(filePath.value)),\n command.entry.input?.file || command.entry.file\n )\n )\n );\n const typeDefinition = computed(() => ({\n ...command.entry,\n output: command.id\n }));\n\n return (\n <>\n <EntryFile\n {...rest}\n path={filePath.value}\n typeDefinition={typeDefinition.value}\n imports={defu(imports ?? {}, {\n [commandSourcePath.value.startsWith(\".\")\n ? commandSourcePath.value\n : `./${commandSourcePath.value}`]:\n `handle${pascalCase(command.name)}`\n })}\n builtinImports={defu(builtinImports ?? {}, {\n env: [\"env\", \"isDevelopment\", \"isDebug\"],\n console: [\"debug\", \"warn\", \"error\", \"colors\", \"writeLine\"],\n utils: [\n \"useArgs\",\n \"hasFlag\",\n \"isMinimal\",\n \"isUnicodeSupported\",\n \"internal_commandContext\"\n ],\n [joinPaths(\n \"help\",\n ...command.segments.filter(\n segment => !isDynamicPathSegment(segment)\n )\n )]: [\"showHelp\"]\n })}>\n <BannerFunctionDeclaration command={command} />\n <Spacing />\n <OptionsInterfaceDeclaration command={command} />\n <Spacing />\n <CommandHandlerDeclaration command={command} banner={code`banner(); `}>\n <CommandValidationLogic command={command} />\n <IfStatement condition={code`failures.length > 0`}>\n {code`error(\"The following validation failures were found while processing the user provided input, and must be corrected before the command-line process can be executed: \\\\n\\\\n\" + failures.map(failure => \" - \" + failure).join(\"\\\\n\"));\n options.help = true; `}\n </IfStatement>\n </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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"}
@@ -15,13 +15,6 @@ interface CommandHandlerDeclarationProps {
15
15
  * A component that generates the `handler` function declaration for a command.
16
16
  */
17
17
  declare function CommandHandlerDeclaration(props: CommandHandlerDeclarationProps): Children;
18
- interface CommandValidationLogicProps {
19
- command: CommandTree;
20
- }
21
- /**
22
- * A component that generates command validation logic for required options and arguments.
23
- */
24
- declare function CommandValidationLogic(props: CommandValidationLogicProps): Children;
25
18
  interface CommandEntryProps extends Omit<EntryFileProps, "path" | "typeDefinition"> {
26
19
  command: CommandTree;
27
20
  }
@@ -30,5 +23,5 @@ interface CommandEntryProps extends Omit<EntryFileProps, "path" | "typeDefinitio
30
23
  */
31
24
  declare function CommandEntry(props: CommandEntryProps): Children;
32
25
  //#endregion
33
- export { CommandEntry, CommandEntryProps, CommandHandlerDeclaration, CommandHandlerDeclarationProps, CommandInvocation, CommandValidationLogic, CommandValidationLogicProps };
26
+ export { CommandEntry, CommandEntryProps, CommandHandlerDeclaration, CommandHandlerDeclarationProps, CommandInvocation };
34
27
  //# sourceMappingURL=command-entry.d.cts.map
@@ -1 +1 @@
1
- {"version":3,"file":"command-entry.d.cts","names":[],"sources":["../../src/components/command-entry.tsx"],"sourcesContent":[],"mappings":";;;;;iBA8DgB,iBAAA;WAAoC;AAApD,CAAA,CAAA,EAAiE,QAAjD;AAwCC,UAAA,8BAAA,CAA8B;EACpC,OAAA,EAAA,WAAA;EACA,MAAA,CAAA,EAAA,QAAA;EACE,QAAA,CAAA,EAAA,QAAA;;AAMb;AA0FA;AAOA;AA+HiB,iBAhOD,yBAAA,CAgOmB,KAAA,EA/N1B,8BA+N0B,CAAA,EA/NI,QA+NJ;AACjC,UAvIe,2BAAA,CAuIf;EAGS,OAAA,EAzIA,WAyIA;;;AAMX;;iBAzIgB,sBAAA,QAA8B,8BAA2B;UA+HxD,iBAAA,SAA0B,KACzC;WAGS;;;;;iBAMK,YAAA,QAAoB,oBAAiB"}
1
+ {"version":3,"file":"command-entry.d.cts","names":[],"sources":["../../src/components/command-entry.tsx"],"mappings":";;;;;iBA4DgB,iBAAA,CAAkB,KAAA;EAAS,OAAA,EAAS,WAAA;AAAA,IAAa,QAAA;AAAA,UAwChD,8BAAA;EACf,OAAA,EAAS,WAAA;EACT,MAAA,GAAS,QAAA;EACT,QAAA,GAAW,QAAA;AAAA;;;;iBAMG,yBAAA,CACd,KAAA,EAAO,8BAAA,GAA8B,QAAA;AAAA,UAqFtB,iBAAA,SAA0B,IAAA,CACzC,cAAA;EAGA,OAAA,EAAS,WAAA;AAAA;;;;iBAMK,YAAA,CAAa,KAAA,EAAO,iBAAA,GAAiB,QAAA"}
@@ -1,6 +1,6 @@
1
1
  import { Children } from "@alloy-js/core";
2
- import { EntryFileProps } from "@powerlines/plugin-alloy/typescript/components/entry-file";
3
2
  import { CommandTree } from "@shell-shock/core";
3
+ import { EntryFileProps } from "@powerlines/plugin-alloy/typescript/components/entry-file";
4
4
 
5
5
  //#region src/components/command-entry.d.ts
6
6
  declare function CommandInvocation(props: {
@@ -15,13 +15,6 @@ interface CommandHandlerDeclarationProps {
15
15
  * A component that generates the `handler` function declaration for a command.
16
16
  */
17
17
  declare function CommandHandlerDeclaration(props: CommandHandlerDeclarationProps): Children;
18
- interface CommandValidationLogicProps {
19
- command: CommandTree;
20
- }
21
- /**
22
- * A component that generates command validation logic for required options and arguments.
23
- */
24
- declare function CommandValidationLogic(props: CommandValidationLogicProps): Children;
25
18
  interface CommandEntryProps extends Omit<EntryFileProps, "path" | "typeDefinition"> {
26
19
  command: CommandTree;
27
20
  }
@@ -30,5 +23,5 @@ interface CommandEntryProps extends Omit<EntryFileProps, "path" | "typeDefinitio
30
23
  */
31
24
  declare function CommandEntry(props: CommandEntryProps): Children;
32
25
  //#endregion
33
- export { CommandEntry, CommandEntryProps, CommandHandlerDeclaration, CommandHandlerDeclarationProps, CommandInvocation, CommandValidationLogic, CommandValidationLogicProps };
26
+ export { CommandEntry, CommandEntryProps, CommandHandlerDeclaration, CommandHandlerDeclarationProps, CommandInvocation };
34
27
  //# sourceMappingURL=command-entry.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"command-entry.d.mts","names":[],"sources":["../../src/components/command-entry.tsx"],"sourcesContent":[],"mappings":";;;;;iBA8DgB,iBAAA;WAAoC;AAApD,CAAA,CAAA,EAAiE,QAAjD;AAwCC,UAAA,8BAAA,CAA8B;EACpC,OAAA,EAAA,WAAA;EACA,MAAA,CAAA,EAAA,QAAA;EACE,QAAA,CAAA,EAAA,QAAA;;AAMb;AA0FA;AAOA;AA+HiB,iBAhOD,yBAAA,CAgOmB,KAAA,EA/N1B,8BA+N0B,CAAA,EA/NI,QA+NJ;AACjC,UAvIe,2BAAA,CAuIf;EAGS,OAAA,EAzIA,WAyIA;;;AAMX;;iBAzIgB,sBAAA,QAA8B,8BAA2B;UA+HxD,iBAAA,SAA0B,KACzC;WAGS;;;;;iBAMK,YAAA,QAAoB,oBAAiB"}
1
+ {"version":3,"file":"command-entry.d.mts","names":[],"sources":["../../src/components/command-entry.tsx"],"mappings":";;;;;iBA4DgB,iBAAA,CAAkB,KAAA;EAAS,OAAA,EAAS,WAAA;AAAA,IAAa,QAAA;AAAA,UAwChD,8BAAA;EACf,OAAA,EAAS,WAAA;EACT,MAAA,GAAS,QAAA;EACT,QAAA,GAAW,QAAA;AAAA;;;;iBAMG,yBAAA,CACd,KAAA,EAAO,8BAAA,GAA8B,QAAA;AAAA,UAqFtB,iBAAA,SAA0B,IAAA,CACzC,cAAA;EAGA,OAAA,EAAS,WAAA;AAAA;;;;iBAMK,YAAA,CAAa,KAAA,EAAO,iBAAA,GAAiB,QAAA"}
@@ -1,22 +1,21 @@
1
1
  import { BannerFunctionDeclaration } from "./banner-function-declaration.mjs";
2
- import { CommandHelp } from "./help.mjs";
3
2
  import { VirtualCommandEntry } from "./virtual-command-entry.mjs";
4
3
  import { createComponent, createIntrinsic, memo, mergeProps } from "@alloy-js/core/jsx-runtime";
5
4
  import { For, Show, code, computed } from "@alloy-js/core";
6
- import { ElseClause, ElseIfClause, FunctionDeclaration, IfStatement, VarDeclaration } from "@alloy-js/typescript";
5
+ import { ElseClause, FunctionDeclaration, IfStatement, VarDeclaration } from "@alloy-js/typescript";
6
+ import { getAppBin, getDynamicPathSegmentName, isDynamicPathSegment } from "@shell-shock/core/plugin-utils";
7
7
  import { Spacing } from "@powerlines/plugin-alloy/core/components/spacing";
8
8
  import { usePowerlines } from "@powerlines/plugin-alloy/core/contexts/context";
9
- import { getAppBin, getDynamicPathSegmentName, isDynamicPathSegment } from "@shell-shock/core/plugin-utils";
10
- import { EntryFile } from "@powerlines/plugin-alloy/typescript/components/entry-file";
9
+ import defu from "defu";
11
10
  import { TSDoc, TSDocParam, TSDocRemarks, TSDocTitle } from "@powerlines/plugin-alloy/typescript/components/tsdoc";
11
+ import { joinPaths } from "@stryke/path/join";
12
+ import { EntryFile } from "@powerlines/plugin-alloy/typescript/components/entry-file";
12
13
  import { replaceExtension } from "@stryke/path/replace";
13
14
  import { pascalCase } from "@stryke/string-format/pascal-case";
14
- import defu from "defu";
15
15
  import { IsDebug } from "@shell-shock/core/components/helpers";
16
- import { CommandParameterKinds } from "@shell-shock/core";
16
+ import { CommandValidationLogic } from "@shell-shock/core/components/command-validation-logic";
17
17
  import { CommandParserLogic, OptionsInterfaceDeclaration } from "@shell-shock/core/components/options-parser-logic";
18
18
  import { findFilePath, relativePath } from "@stryke/path/find";
19
- import { joinPaths } from "@stryke/path/join";
20
19
  import { camelCase } from "@stryke/string-format/camel-case";
21
20
  import { constantCase } from "@stryke/string-format/constant-case";
22
21
  import { kebabCase } from "@stryke/string-format/kebab-case";
@@ -91,16 +90,14 @@ function CommandHandlerDeclaration(props) {
91
90
  return context.config.isCaseSensitive;
92
91
  }
93
92
  }),
94
- createIntrinsic("hbr", {}),
95
- createIntrinsic("hbr", {}),
93
+ createComponent(Spacing, {}),
96
94
  createComponent(Show, {
97
95
  get when() {
98
96
  return Boolean(banner);
99
97
  },
100
98
  children: banner
101
99
  }),
102
- createIntrinsic("hbr", {}),
103
- createIntrinsic("hbr", {}),
100
+ createComponent(Spacing, {}),
104
101
  createComponent(IfStatement, {
105
102
  get condition() {
106
103
  return createComponent(IsDebug, {});
@@ -112,16 +109,12 @@ function CommandHandlerDeclaration(props) {
112
109
  writeLine(""); `;
113
110
  }
114
111
  }),
115
- createIntrinsic("hbr", {}),
116
- createIntrinsic("hbr", {}),
112
+ createComponent(Spacing, {}),
117
113
  children,
118
- createIntrinsic("hbr", {}),
119
- createIntrinsic("hbr", {}),
114
+ createComponent(Spacing, {}),
120
115
  createComponent(IfStatement, {
121
116
  condition: code`options.help`,
122
- get children() {
123
- return createComponent(CommandHelp, { command });
124
- }
117
+ children: code`return showHelp(); `
125
118
  }),
126
119
  createComponent(ElseClause, { get children() {
127
120
  return [createIntrinsic("hbr", {}), createComponent(CommandInvocation, { command })];
@@ -132,165 +125,13 @@ function CommandHandlerDeclaration(props) {
132
125
  ];
133
126
  }
134
127
  /**
135
- * A component that generates command validation logic for required options and arguments.
136
- */
137
- function CommandValidationLogic(props) {
138
- const { command } = props;
139
- return [
140
- createComponent(VarDeclaration, {
141
- name: "failures",
142
- type: "string[]",
143
- initializer: code`[];`
144
- }),
145
- createIntrinsic("hbr", {}),
146
- createComponent(For, {
147
- get each() {
148
- return Object.values(command.options ?? {});
149
- },
150
- doubleHardline: true,
151
- children: (option) => [createComponent(Show, {
152
- get when() {
153
- return !option.optional;
154
- },
155
- get children() {
156
- return [createComponent(IfStatement, {
157
- get condition() {
158
- return code`!options${option.name.includes("?") ? `["${option.name}"]` : `.${camelCase(option.name)}`}`;
159
- },
160
- get children() {
161
- return code`failures.push("Missing required \\"${option.name}\\" option");`;
162
- }
163
- }), createComponent(Show, {
164
- get when() {
165
- return (option.kind === CommandParameterKinds.string || option.kind === CommandParameterKinds.number) && option.variadic;
166
- },
167
- get children() {
168
- return createComponent(ElseIfClause, {
169
- get condition() {
170
- return code`options${option.name.includes("?") ? `["${option.name}"]` : `.${camelCase(option.name)}`}.length === 0`;
171
- },
172
- get children() {
173
- return code`failures.push("No values were provided to the required \\"${option.name}\\" array option");`;
174
- }
175
- });
176
- }
177
- })];
178
- }
179
- }), createComponent(Show, {
180
- get when() {
181
- return option.kind === CommandParameterKinds.number;
182
- },
183
- get children() {
184
- return createComponent(Show, {
185
- get when() {
186
- return option.variadic;
187
- },
188
- get fallback() {
189
- return createComponent(IfStatement, {
190
- get condition() {
191
- return code`options${option.name.includes("?") ? `["${option.name}"]` : `.${camelCase(option.name)}`} && Number.isNaN(options${option.name.includes("?") ? `["${option.name}"]` : `.${camelCase(option.name)}`})`;
192
- },
193
- get children() {
194
- return code`failures.push("Invalid numeric value provided for the \\"${option.name}\\" option");`;
195
- }
196
- });
197
- },
198
- get children() {
199
- return createComponent(IfStatement, {
200
- get condition() {
201
- return code`options${option.name.includes("?") ? `["${option.name}"]` : `.${camelCase(option.name)}`}.some(value => Number.isNaN(value))`;
202
- },
203
- get children() {
204
- return code`failures.push("Invalid numeric value provided in the \\"${option.name}\\" array option");`;
205
- }
206
- });
207
- }
208
- });
209
- }
210
- })]
211
- }),
212
- createComponent(Spacing, {}),
213
- createComponent(For, {
214
- get each() {
215
- return command.args;
216
- },
217
- doubleHardline: true,
218
- children: (argument) => [createComponent(Show, {
219
- get when() {
220
- return !argument.optional;
221
- },
222
- get children() {
223
- return [createComponent(IfStatement, {
224
- get condition() {
225
- return code`!${camelCase(argument.name)}`;
226
- },
227
- get children() {
228
- return code`failures.push("Missing required \\"${argument.name}\\" positional argument");`;
229
- }
230
- }), createComponent(Show, {
231
- get when() {
232
- return (argument.kind === CommandParameterKinds.string || argument.kind === CommandParameterKinds.number) && argument.variadic;
233
- },
234
- get children() {
235
- return createComponent(ElseIfClause, {
236
- get condition() {
237
- return code`${camelCase(argument.name)}.length === 0`;
238
- },
239
- get children() {
240
- return code`failures.push("No values were provided to the required \\"${argument.name}\\" array positional argument");`;
241
- }
242
- });
243
- }
244
- })];
245
- }
246
- }), createComponent(Show, {
247
- get when() {
248
- return argument.kind === CommandParameterKinds.number;
249
- },
250
- get children() {
251
- return createComponent(Show, {
252
- get when() {
253
- return argument.variadic;
254
- },
255
- get fallback() {
256
- return createComponent(IfStatement, {
257
- get condition() {
258
- return code`${camelCase(argument.name)} && Number.isNaN(${camelCase(argument.name)})`;
259
- },
260
- get children() {
261
- return code`failures.push("Invalid numeric value provided for the \\"${argument.name}\\" positional argument");`;
262
- }
263
- });
264
- },
265
- get children() {
266
- return createComponent(IfStatement, {
267
- get condition() {
268
- return code`${camelCase(argument.name)}.some(value => Number.isNaN(value))`;
269
- },
270
- get children() {
271
- return code`failures.push("Invalid numeric value provided in the \\"${argument.name}\\" array positional argument");`;
272
- }
273
- });
274
- }
275
- });
276
- }
277
- })]
278
- }),
279
- createComponent(IfStatement, {
280
- condition: code`failures.length > 0`,
281
- children: code`error("The following validation failures were found while processing the user provided input, and must be corrected before the command-line process can be executed: \\n\\n" + failures.map(failure => " - " + failure).join("\\n"));
282
- options.help = true; `
283
- })
284
- ];
285
- }
286
- /**
287
128
  * The command entry point for the Shell Shock project.
288
129
  */
289
130
  function CommandEntry(props) {
290
131
  const { command, imports, builtinImports, ...rest } = props;
291
132
  const context = usePowerlines();
292
133
  const filePath = computed(() => joinPaths(command.segments.filter((segment) => !isDynamicPathSegment(segment)).join("/"), "index.ts"));
293
- const commandSourcePath = computed(() => `./${replaceExtension(relativePath(joinPaths(context.entryPath, findFilePath(filePath.value)), command.entry.input?.file || command.entry.file))}`);
134
+ const commandSourcePath = computed(() => replaceExtension(relativePath(joinPaths(context.entryPath, findFilePath(filePath.value)), command.entry.input?.file || command.entry.file)));
294
135
  const typeDefinition = computed(() => ({
295
136
  ...command.entry,
296
137
  output: command.id
@@ -303,7 +144,7 @@ function CommandEntry(props) {
303
144
  return typeDefinition.value;
304
145
  },
305
146
  get imports() {
306
- return defu(imports ?? {}, { [commandSourcePath.value]: `handle${pascalCase(command.name)}` });
147
+ return defu(imports ?? {}, { [commandSourcePath.value.startsWith(".") ? commandSourcePath.value : `./${commandSourcePath.value}`]: `handle${pascalCase(command.name)}` });
307
148
  },
308
149
  get builtinImports() {
309
150
  return defu(builtinImports ?? {}, {
@@ -316,11 +157,8 @@ function CommandEntry(props) {
316
157
  "debug",
317
158
  "warn",
318
159
  "error",
319
- "table",
320
160
  "colors",
321
- "stripAnsi",
322
- "writeLine",
323
- "splitText"
161
+ "writeLine"
324
162
  ],
325
163
  utils: [
326
164
  "useArgs",
@@ -328,22 +166,25 @@ function CommandEntry(props) {
328
166
  "isMinimal",
329
167
  "isUnicodeSupported",
330
168
  "internal_commandContext"
331
- ]
169
+ ],
170
+ [joinPaths("help", ...command.segments.filter((segment) => !isDynamicPathSegment(segment)))]: ["showHelp"]
332
171
  });
333
172
  },
334
173
  get children() {
335
174
  return [
336
175
  createComponent(BannerFunctionDeclaration, { command }),
337
- createIntrinsic("hbr", {}),
338
- createIntrinsic("hbr", {}),
176
+ createComponent(Spacing, {}),
339
177
  createComponent(OptionsInterfaceDeclaration, { command }),
340
- createIntrinsic("hbr", {}),
341
- createIntrinsic("hbr", {}),
178
+ createComponent(Spacing, {}),
342
179
  createComponent(CommandHandlerDeclaration, {
343
180
  command,
344
181
  banner: code`banner(); `,
345
182
  get children() {
346
- return createComponent(CommandValidationLogic, { command });
183
+ return [createComponent(CommandValidationLogic, { command }), createComponent(IfStatement, {
184
+ condition: code`failures.length > 0`,
185
+ children: code`error("The following validation failures were found while processing the user provided input, and must be corrected before the command-line process can be executed: \\n\\n" + failures.map(failure => " - " + failure).join("\\n"));
186
+ options.help = true; `
187
+ })];
347
188
  }
348
189
  })
349
190
  ];
@@ -367,5 +208,5 @@ function CommandEntry(props) {
367
208
  }
368
209
 
369
210
  //#endregion
370
- export { CommandEntry, CommandHandlerDeclaration, CommandInvocation, CommandValidationLogic };
211
+ export { CommandEntry, CommandHandlerDeclaration, CommandInvocation };
371
212
  //# sourceMappingURL=command-entry.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"command-entry.mjs","names":["code","computed","For","Show","ElseClause","ElseIfClause","FunctionDeclaration","IfStatement","VarDeclaration","Spacing","usePowerlines","EntryFile","TSDoc","TSDocParam","TSDocRemarks","TSDocTitle","CommandParameterKinds","IsDebug","CommandParserLogic","OptionsInterfaceDeclaration","getAppBin","getDynamicPathSegmentName","isDynamicPathSegment","findFilePath","relativePath","joinPaths","replaceExtension","camelCase","constantCase","kebabCase","pascalCase","defu","BannerFunctionDeclaration","CommandHelp","VirtualCommandEntry","CommandInvocation","props","command","_$createComponent","name","initializer","segments","map","segment","join","_$memo","args","length","arg","_$createIntrinsic","CommandHandlerDeclaration","banner","children","context","heading","title","description","replace","async","parameters","type","default","appSpecificEnvPrefix","config","isCaseSensitive","when","Boolean","condition","Object","values","options","option","CommandValidationLogic","each","doubleHardline","optional","includes","kind","string","number","variadic","fallback","argument","CommandEntry","imports","builtinImports","rest","filePath","filter","commandSourcePath","entryPath","value","entry","input","file","typeDefinition","output","id","_$mergeProps","path","env","console","utils","child","isVirtual"],"sources":["../../src/components/command-entry.tsx"],"sourcesContent":["/* -------------------------------------------------------------------\n\n ⚡ Storm Software - Shell Shock\n\n This code was released as part of the Shell Shock project. Shell Shock\n is maintained by Storm Software under the Apache-2.0 license, and is\n free for commercial and private use. For more information, please visit\n our licensing page at https://stormsoftware.com/licenses/projects/shell-shock.\n\n Website: https://stormsoftware.com\n Repository: https://github.com/storm-software/shell-shock\n Documentation: https://docs.stormsoftware.com/projects/shell-shock\n Contact: https://stormsoftware.com/contact\n\n SPDX-License-Identifier: Apache-2.0\n\n ------------------------------------------------------------------- */\n\nimport type { Children } from \"@alloy-js/core\";\nimport { code, computed, For, Show } from \"@alloy-js/core\";\nimport {\n ElseClause,\n ElseIfClause,\n FunctionDeclaration,\n IfStatement,\n VarDeclaration\n} from \"@alloy-js/typescript\";\nimport { Spacing } from \"@powerlines/plugin-alloy/core/components/spacing\";\nimport { usePowerlines } from \"@powerlines/plugin-alloy/core/contexts/context\";\nimport type { EntryFileProps } from \"@powerlines/plugin-alloy/typescript/components/entry-file\";\nimport { EntryFile } from \"@powerlines/plugin-alloy/typescript/components/entry-file\";\nimport {\n TSDoc,\n TSDocParam,\n TSDocRemarks,\n TSDocTitle\n} from \"@powerlines/plugin-alloy/typescript/components/tsdoc\";\nimport type { CommandTree, NumberCommandParameter } from \"@shell-shock/core\";\nimport { CommandParameterKinds } from \"@shell-shock/core\";\nimport { IsDebug } from \"@shell-shock/core/components/helpers\";\nimport {\n CommandParserLogic,\n OptionsInterfaceDeclaration\n} from \"@shell-shock/core/components/options-parser-logic\";\nimport {\n getAppBin,\n getDynamicPathSegmentName,\n isDynamicPathSegment\n} from \"@shell-shock/core/plugin-utils\";\nimport { findFilePath, relativePath } from \"@stryke/path/find\";\nimport { joinPaths } from \"@stryke/path/join\";\nimport { replaceExtension } from \"@stryke/path/replace\";\nimport { camelCase } from \"@stryke/string-format/camel-case\";\nimport { constantCase } from \"@stryke/string-format/constant-case\";\nimport { kebabCase } from \"@stryke/string-format/kebab-case\";\nimport { pascalCase } from \"@stryke/string-format/pascal-case\";\nimport defu from \"defu\";\nimport type { ScriptPresetContext } from \"../types/plugin\";\nimport { BannerFunctionDeclaration } from \"./banner-function-declaration\";\nimport { CommandHelp } from \"./help\";\nimport { VirtualCommandEntry } from \"./virtual-command-entry\";\n\nexport function CommandInvocation(props: { command: CommandTree }) {\n const { command } = props;\n\n return (\n <>\n <VarDeclaration\n name=\"__context\"\n initializer={code`{ path: \\`${command.segments\n .map(segment =>\n isDynamicPathSegment(segment)\n ? `\\${${camelCase(getDynamicPathSegmentName(segment))}}`\n : segment\n )\n .join(\"/\")}\\`, segments: [${command.segments\n .map(segment =>\n isDynamicPathSegment(segment)\n ? camelCase(getDynamicPathSegmentName(segment))\n : `\"${segment}\"`\n )\n .join(\", \")}] }`}\n />\n <Spacing />\n {code`\n\n return internal_commandContext.run(__context, () => {\n return Promise.resolve(Reflect.apply(handle${pascalCase(\n command.name\n )}, __context, [options${\n command.args.length > 0\n ? `, ${command.args.map(arg => camelCase(arg.name)).join(\", \")}`\n : \"\"\n }]));\n });\n\n `}\n <hbr />\n </>\n );\n}\n\nexport interface CommandHandlerDeclarationProps {\n command: CommandTree;\n banner?: Children;\n children?: Children;\n}\n\n/**\n * A component that generates the `handler` function declaration for a command.\n */\nexport function CommandHandlerDeclaration(\n props: CommandHandlerDeclarationProps\n) {\n const { command, banner, children } = props;\n\n const context = usePowerlines<ScriptPresetContext>();\n\n return (\n <>\n <OptionsInterfaceDeclaration command={command} />\n <Spacing />\n <TSDoc\n heading={`The ${command.title} (${getAppBin(context)} ${command.segments\n .map(segment =>\n isDynamicPathSegment(segment)\n ? `[${constantCase(getDynamicPathSegmentName(segment))}]`\n : segment\n )\n .join(\" \")}) command.`}>\n <TSDocRemarks>{`${command.description.replace(/\\.+$/, \"\")}.`}</TSDocRemarks>\n <hbr />\n <TSDocTitle>{command.title}</TSDocTitle>\n <TSDocParam name=\"args\">{`The command-line arguments passed to the command.`}</TSDocParam>\n </TSDoc>\n <FunctionDeclaration\n export\n async\n name=\"handler\"\n parameters={[{ name: \"args\", type: \"string[]\", default: \"useArgs()\" }]}>\n <CommandParserLogic\n command={command}\n appSpecificEnvPrefix={context.config.appSpecificEnvPrefix}\n isCaseSensitive={context.config.isCaseSensitive}\n />\n <hbr />\n <hbr />\n <Show when={Boolean(banner)}>{banner}</Show>\n <hbr />\n <hbr />\n <IfStatement condition={<IsDebug />}>\n {code`writeLine(\"\");\n writeLine(colors.text.body.tertiary(\"Debug mode is enabled. Additional debug information may be logged to the console.\"));\n debug(\\`Command path: ${command.segments\n .map(segment =>\n isDynamicPathSegment(segment)\n ? `\\${${camelCase(getDynamicPathSegmentName(segment))}}`\n : segment\n )\n .join(\" / \")} \\\\n\\\\nOptions: \\\\n${Object.values(command.options)\n .map(\n option =>\n ` - ${kebabCase(option.name)}: \\${options.${camelCase(\n option.name\n )} === undefined ? \"\" : JSON.stringify(options.${camelCase(\n option.name\n )})}`\n )\n .join(\"\\\\n\")}${\n command.args.length > 0\n ? ` \\\\n\\\\nArguments: \\\\n${command.args\n .map(\n arg =>\n ` - ${kebabCase(arg.name)}: \\${${camelCase(\n arg.name\n )} === undefined ? \"\" : JSON.stringify(${camelCase(\n arg.name\n )})}`\n )\n .join(\"\\\\n\")}`\n : \"\"\n }\\`);\n writeLine(\"\"); `}\n </IfStatement>\n <hbr />\n <hbr />\n {children}\n <hbr />\n <hbr />\n <IfStatement condition={code`options.help`}>\n <CommandHelp command={command} />\n </IfStatement>\n <ElseClause>\n <hbr />\n <CommandInvocation command={command} />\n </ElseClause>\n </FunctionDeclaration>\n </>\n );\n}\n\nexport interface CommandValidationLogicProps {\n command: CommandTree;\n}\n\n/**\n * A component that generates command validation logic for required options and arguments.\n */\nexport function CommandValidationLogic(props: CommandValidationLogicProps) {\n const { command } = props;\n\n return (\n <>\n <VarDeclaration name=\"failures\" type=\"string[]\" initializer={code`[];`} />\n <hbr />\n <For each={Object.values(command.options ?? {})} doubleHardline>\n {option => (\n <>\n <Show when={!option.optional}>\n <IfStatement\n condition={code`!options${\n option.name.includes(\"?\")\n ? `[\"${option.name}\"]`\n : `.${camelCase(option.name)}`\n }`}>\n {code`failures.push(\"Missing required \\\\\"${option.name}\\\\\" option\");`}\n </IfStatement>\n <Show\n when={\n (option.kind === CommandParameterKinds.string ||\n option.kind === CommandParameterKinds.number) &&\n option.variadic\n }>\n <ElseIfClause\n condition={code`options${\n option.name.includes(\"?\")\n ? `[\"${option.name}\"]`\n : `.${camelCase(option.name)}`\n }.length === 0`}>\n {code`failures.push(\"No values were provided to the required \\\\\"${\n option.name\n }\\\\\" array option\");`}\n </ElseIfClause>\n </Show>\n </Show>\n <Show when={option.kind === CommandParameterKinds.number}>\n <Show\n when={(option as NumberCommandParameter).variadic}\n fallback={\n <IfStatement\n condition={code`options${\n option.name.includes(\"?\")\n ? `[\"${option.name}\"]`\n : `.${camelCase(option.name)}`\n } && Number.isNaN(options${\n option.name.includes(\"?\")\n ? `[\"${option.name}\"]`\n : `.${camelCase(option.name)}`\n })`}>\n {code`failures.push(\"Invalid numeric value provided for the \\\\\"${\n option.name\n }\\\\\" option\");`}\n </IfStatement>\n }>\n <IfStatement\n condition={code`options${\n option.name.includes(\"?\")\n ? `[\"${option.name}\"]`\n : `.${camelCase(option.name)}`\n }.some(value => Number.isNaN(value))`}>\n {code`failures.push(\"Invalid numeric value provided in the \\\\\"${\n option.name\n }\\\\\" array option\");`}\n </IfStatement>\n </Show>\n </Show>\n </>\n )}\n </For>\n <Spacing />\n <For each={command.args} doubleHardline>\n {argument => (\n <>\n <Show when={!argument.optional}>\n <IfStatement condition={code`!${camelCase(argument.name)}`}>\n {code`failures.push(\"Missing required \\\\\"${\n argument.name\n }\\\\\" positional argument\");`}\n </IfStatement>\n <Show\n when={\n (argument.kind === CommandParameterKinds.string ||\n argument.kind === CommandParameterKinds.number) &&\n argument.variadic\n }>\n <ElseIfClause\n condition={code`${camelCase(argument.name)}.length === 0`}>\n {code`failures.push(\"No values were provided to the required \\\\\"${\n argument.name\n }\\\\\" array positional argument\");`}\n </ElseIfClause>\n </Show>\n </Show>\n <Show when={argument.kind === CommandParameterKinds.number}>\n <Show\n when={(argument as NumberCommandParameter).variadic}\n fallback={\n <IfStatement\n condition={code`${camelCase(\n argument.name\n )} && Number.isNaN(${camelCase(argument.name)})`}>\n {code`failures.push(\"Invalid numeric value provided for the \\\\\"${\n argument.name\n }\\\\\" positional argument\");`}\n </IfStatement>\n }>\n <IfStatement\n condition={code`${camelCase(argument.name)}.some(value => Number.isNaN(value))`}>\n {code`failures.push(\"Invalid numeric value provided in the \\\\\"${\n argument.name\n }\\\\\" array positional argument\");`}\n </IfStatement>\n </Show>\n </Show>\n </>\n )}\n </For>\n <IfStatement condition={code`failures.length > 0`}>\n {code`error(\"The following validation failures were found while processing the user provided input, and must be corrected before the command-line process can be executed: \\\\n\\\\n\" + failures.map(failure => \" - \" + failure).join(\"\\\\n\"));\n options.help = true; `}\n </IfStatement>\n </>\n );\n}\n\nexport interface CommandEntryProps extends Omit<\n EntryFileProps,\n \"path\" | \"typeDefinition\"\n> {\n command: CommandTree;\n}\n\n/**\n * The command entry point for the Shell Shock project.\n */\nexport function CommandEntry(props: CommandEntryProps) {\n const { command, imports, builtinImports, ...rest } = props;\n\n const context = usePowerlines<ScriptPresetContext>();\n const filePath = computed(() =>\n joinPaths(\n command.segments\n .filter(segment => !isDynamicPathSegment(segment))\n .join(\"/\"),\n \"index.ts\"\n )\n );\n const commandSourcePath = computed(\n () =>\n `./${replaceExtension(\n relativePath(\n joinPaths(context.entryPath, findFilePath(filePath.value)),\n command.entry.input?.file || command.entry.file\n )\n )}`\n );\n const typeDefinition = computed(() => ({\n ...command.entry,\n output: command.id\n }));\n\n return (\n <>\n <EntryFile\n {...rest}\n path={filePath.value}\n typeDefinition={typeDefinition.value}\n imports={defu(imports ?? {}, {\n [commandSourcePath.value]: `handle${pascalCase(command.name)}`\n })}\n builtinImports={defu(builtinImports ?? {}, {\n env: [\"env\", \"isDevelopment\", \"isDebug\"],\n console: [\n \"debug\",\n \"warn\",\n \"error\",\n \"table\",\n \"colors\",\n \"stripAnsi\",\n \"writeLine\",\n \"splitText\"\n ],\n utils: [\n \"useArgs\",\n \"hasFlag\",\n \"isMinimal\",\n \"isUnicodeSupported\",\n \"internal_commandContext\"\n ]\n })}>\n <BannerFunctionDeclaration command={command} />\n <hbr />\n <hbr />\n <OptionsInterfaceDeclaration command={command} />\n <hbr />\n <hbr />\n <CommandHandlerDeclaration command={command} banner={code`banner(); `}>\n <CommandValidationLogic command={command} />\n </CommandHandlerDeclaration>\n </EntryFile>\n <For each={Object.values(command.children)}>\n {child => (\n <Show\n when={child.isVirtual}\n fallback={<CommandEntry command={child} />}>\n <VirtualCommandEntry command={child} />\n </Show>\n )}\n </For>\n </>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AA8DA,SAAgBmC,kBAAkBC,OAAiC;CACjE,MAAM,EAAEC,YAAYD;AAEpB,QAAA;EAAAE,gBAEK9B,gBAAc;GACb+B,MAAI;GAAA,IACJC,cAAW;AAAA,WAAExC,IAAI,aAAaqC,QAAQI,SACnCC,KAAIC,YACHrB,qBAAqBqB,QAAQ,GACzB,MAAMhB,UAAUN,0BAA0BsB,QAAQ,CAAC,CAAA,KACnDA,QACL,CACAC,KAAK,IAAI,CAAA,iBAAkBP,QAAQI,SACnCC,KAAIC,YACHrB,qBAAqBqB,QAAQ,GACzBhB,UAAUN,0BAA0BsB,QAAQ,CAAC,GAC7C,IAAIA,QAAO,GAChB,CACAC,KAAK,KAAK,CAAA;;GAAK,CAAA;EAAAN,gBAEnB7B,SAAO,EAAA,CAAA;EAAAoC,WACP7C,IAAI;;;qDAG0C8B,WAC3CO,QAAQE,KACT,CAAA,uBACCF,QAAQS,KAAKC,SAAS,IAClB,KAAKV,QAAQS,KAAKJ,KAAIM,QAAOrB,UAAUqB,IAAIT,KAAK,CAAC,CAACK,KAAK,KAAK,KAC5D,GAAE;;;QAIT;EAAAK,gBAAA,OAAA,EAAA,CAAA;EAAA;;;;;AAeP,SAAgBC,0BACdd,OACA;CACA,MAAM,EAAEC,SAASc,QAAQC,aAAahB;CAEtC,MAAMiB,UAAU3C,eAAoC;AAEpD,QAAA;EAAA4B,gBAEKnB,6BAA2B,EAAUkB,SAAO,CAAA;EAAAC,gBAC5C7B,SAAO,EAAA,CAAA;EAAA6B,gBACP1B,OAAK;GAAA,IACJ0C,UAAO;AAAA,WAAE,OAAOjB,QAAQkB,MAAK,IAAKnC,UAAUiC,QAAQ,CAAA,GAAIhB,QAAQI,SAC7DC,KAAIC,YACHrB,qBAAqBqB,QAAQ,GACzB,IAAIf,aAAaP,0BAA0BsB,QAAQ,CAAC,CAAA,KACpDA,QACL,CACAC,KAAK,IAAI,CAAA;;GAAY,IAAAQ,WAAA;AAAA,WAAA;KAAAd,gBACvBxB,cAAY,EAAA,IAAAsC,WAAA;AAAA,aAAE,GAAGf,QAAQmB,YAAYC,QAAQ,QAAQ,GAAG,CAAA;QAAG,CAAA;KAAAR,gBAAA,OAAA,EAAA,CAAA;KAAAX,gBAE3DvB,YAAU,EAAA,IAAAqC,WAAA;AAAA,aAAEf,QAAQkB;QAAK,CAAA;KAAAjB,gBACzBzB,YAAU;MAAC0B,MAAI;MAAAa,UAAS;MAAmD,CAAA;KAAA;;GAAA,CAAA;EAAAd,gBAE7EhC,qBAAmB;GAAA,UAAA;GAElBoD,OAAK;GACLnB,MAAI;GACJoB,YAAY,CAAC;IAAEpB,MAAM;IAAQqB,MAAM;IAAYC,SAAS;IAAa,CAAC;GAAA,IAAAT,WAAA;AAAA,WAAA;KAAAd,gBACrEpB,oBAAkB;MACRmB;MAAO,IAChByB,uBAAoB;AAAA,cAAET,QAAQU,OAAOD;;MAAoB,IACzDE,kBAAe;AAAA,cAAEX,QAAQU,OAAOC;;MAAe,CAAA;KAAAf,gBAAA,OAAA,EAAA,CAAA;KAAAA,gBAAA,OAAA,EAAA,CAAA;KAAAX,gBAIhDnC,MAAI;MAAA,IAAC8D,OAAI;AAAA,cAAEC,QAAQf,OAAO;;MAAAC,UAAGD;MAAM,CAAA;KAAAF,gBAAA,OAAA,EAAA,CAAA;KAAAA,gBAAA,OAAA,EAAA,CAAA;KAAAX,gBAGnC/B,aAAW;MAAA,IAAC4D,YAAS;AAAA,cAAA7B,gBAAGrB,SAAO,EAAA,CAAA;;MAAA,IAAAmC,WAAA;AAAA,cAC7BpD,IAAI;;kCAEmBqC,QAAQI,SAC7BC,KAAIC,YACHrB,qBAAqBqB,QAAQ,GACzB,MAAMhB,UAAUN,0BAA0BsB,QAAQ,CAAC,CAAA,KACnDA,QACL,CACAC,KAAK,MAAM,CAAA,qBAAsBwB,OAAOC,OAAOhC,QAAQiC,QAAQ,CAC/D5B,KACC6B,WACE,MAAM1C,UAAU0C,OAAOhC,KAAK,CAAA,eAAgBZ,UAC1C4C,OAAOhC,KACR,CAAA,+CAAgDZ,UAC/C4C,OAAOhC,KACR,CAAA,IACJ,CACAK,KAAK,MAAM,GACZP,QAAQS,KAAKC,SAAS,IAClB,wBAAwBV,QAAQS,KAC7BJ,KACCM,QACE,MAAMnB,UAAUmB,IAAIT,KAAK,CAAA,OAAQZ,UAC/BqB,IAAIT,KACL,CAAA,uCAAwCZ,UACvCqB,IAAIT,KACL,CAAA,IACJ,CACAK,KAAK,MAAM,KACd,GAAE;;;MAEQ,CAAA;KAAAK,gBAAA,OAAA,EAAA,CAAA;KAAAA,gBAAA,OAAA,EAAA,CAAA;KAIjBG;KAAQH,gBAAA,OAAA,EAAA,CAAA;KAAAA,gBAAA,OAAA,EAAA,CAAA;KAAAX,gBAGR/B,aAAW;MAAC4D,WAAWnE,IAAI;MAAc,IAAAoD,WAAA;AAAA,cAAAd,gBACvCL,aAAW,EAAUI,SAAO,CAAA;;MAAA,CAAA;KAAAC,gBAE9BlC,YAAU,EAAA,IAAAgD,WAAA;AAAA,aAAA,CAAAH,gBAAA,OAAA,EAAA,CAAA,EAAAX,gBAERH,mBAAiB,EAAUE,SAAO,CAAA,CAAA;QAAA,CAAA;KAAA;;GAAA,CAAA;EAAA;;;;;AAc7C,SAAgBmC,uBAAuBpC,OAAoC;CACzE,MAAM,EAAEC,YAAYD;AAEpB,QAAA;EAAAE,gBAEK9B,gBAAc;GAAC+B,MAAI;GAAYqB,MAAI;GAAYpB,aAAaxC,IAAI;GAAK,CAAA;EAAAiD,gBAAA,OAAA,EAAA,CAAA;EAAAX,gBAErEpC,KAAG;GAAA,IAACuE,OAAI;AAAA,WAAEL,OAAOC,OAAOhC,QAAQiC,WAAW,EAAE,CAAC;;GAAEI,gBAAc;GAAAtB,WAC5DmB,WAAM,CAAAjC,gBAEFnC,MAAI;IAAA,IAAC8D,OAAI;AAAA,YAAE,CAACM,OAAOI;;IAAQ,IAAAvB,WAAA;AAAA,YAAA,CAAAd,gBACzB/B,aAAW;MAAA,IACV4D,YAAS;AAAA,cAAEnE,IAAI,WACbuE,OAAOhC,KAAKqC,SAAS,IAAI,GACrB,KAAKL,OAAOhC,KAAI,MAChB,IAAIZ,UAAU4C,OAAOhC,KAAK;;MAC9B,IAAAa,WAAA;AAAA,cACDpD,IAAI,sCAAsCuE,OAAOhC,KAAI;;MAAe,CAAA,EAAAD,gBAEtEnC,MAAI;MAAA,IACH8D,OAAI;AAAA,eACDM,OAAOM,SAAS7D,sBAAsB8D,UACrCP,OAAOM,SAAS7D,sBAAsB+D,WACxCR,OAAOS;;MAAQ,IAAA5B,WAAA;AAAA,cAAAd,gBAEhBjC,cAAY;QAAA,IACX8D,YAAS;AAAA,gBAAEnE,IAAI,UACbuE,OAAOhC,KAAKqC,SAAS,IAAI,GACrB,KAAKL,OAAOhC,KAAI,MAChB,IAAIZ,UAAU4C,OAAOhC,KAAK,GAAE;;QACnB,IAAAa,WAAA;AAAA,gBACdpD,IAAI,6DACHuE,OAAOhC,KAAI;;QACQ,CAAA;;MAAA,CAAA,CAAA;;IAAA,CAAA,EAAAD,gBAI1BnC,MAAI;IAAA,IAAC8D,OAAI;AAAA,YAAEM,OAAOM,SAAS7D,sBAAsB+D;;IAAM,IAAA3B,WAAA;AAAA,YAAAd,gBACrDnC,MAAI;MAAA,IACH8D,OAAI;AAAA,cAAGM,OAAkCS;;MAAQ,IACjDC,WAAQ;AAAA,cAAA3C,gBACL/B,aAAW;QAAA,IACV4D,YAAS;AAAA,gBAAEnE,IAAI,UACbuE,OAAOhC,KAAKqC,SAAS,IAAI,GACrB,KAAKL,OAAOhC,KAAI,MAChB,IAAIZ,UAAU4C,OAAOhC,KAAK,GAAE,0BAEhCgC,OAAOhC,KAAKqC,SAAS,IAAI,GACrB,KAAKL,OAAOhC,KAAI,MAChB,IAAIZ,UAAU4C,OAAOhC,KAAK,GAAE;;QAC/B,IAAAa,WAAA;AAAA,gBACFpD,IAAI,4DACHuE,OAAOhC,KAAI;;QACE,CAAA;;MAAA,IAAAa,WAAA;AAAA,cAAAd,gBAGlB/B,aAAW;QAAA,IACV4D,YAAS;AAAA,gBAAEnE,IAAI,UACbuE,OAAOhC,KAAKqC,SAAS,IAAI,GACrB,KAAKL,OAAOhC,KAAI,MAChB,IAAIZ,UAAU4C,OAAOhC,KAAK,GAAE;;QACG,IAAAa,WAAA;AAAA,gBACpCpD,IAAI,2DACHuE,OAAOhC,KAAI;;QACQ,CAAA;;MAAA,CAAA;;IAAA,CAAA,CAAA;GAK9B,CAAA;EAAAD,gBAEF7B,SAAO,EAAA,CAAA;EAAA6B,gBACPpC,KAAG;GAAA,IAACuE,OAAI;AAAA,WAAEpC,QAAQS;;GAAM4B,gBAAc;GAAAtB,WACpC8B,aAAQ,CAAA5C,gBAEJnC,MAAI;IAAA,IAAC8D,OAAI;AAAA,YAAE,CAACiB,SAASP;;IAAQ,IAAAvB,WAAA;AAAA,YAAA,CAAAd,gBAC3B/B,aAAW;MAAA,IAAC4D,YAAS;AAAA,cAAEnE,IAAI,IAAI2B,UAAUuD,SAAS3C,KAAK;;MAAE,IAAAa,WAAA;AAAA,cACvDpD,IAAI,sCACHkF,SAAS3C,KAAI;;MACa,CAAA,EAAAD,gBAE7BnC,MAAI;MAAA,IACH8D,OAAI;AAAA,eACDiB,SAASL,SAAS7D,sBAAsB8D,UACvCI,SAASL,SAAS7D,sBAAsB+D,WAC1CG,SAASF;;MAAQ,IAAA5B,WAAA;AAAA,cAAAd,gBAElBjC,cAAY;QAAA,IACX8D,YAAS;AAAA,gBAAEnE,IAAI,GAAG2B,UAAUuD,SAAS3C,KAAK,CAAA;;QAAe,IAAAa,WAAA;AAAA,gBACxDpD,IAAI,6DACHkF,SAAS3C,KAAI;;QACmB,CAAA;;MAAA,CAAA,CAAA;;IAAA,CAAA,EAAAD,gBAIvCnC,MAAI;IAAA,IAAC8D,OAAI;AAAA,YAAEiB,SAASL,SAAS7D,sBAAsB+D;;IAAM,IAAA3B,WAAA;AAAA,YAAAd,gBACvDnC,MAAI;MAAA,IACH8D,OAAI;AAAA,cAAGiB,SAAoCF;;MAAQ,IACnDC,WAAQ;AAAA,cAAA3C,gBACL/B,aAAW;QAAA,IACV4D,YAAS;AAAA,gBAAEnE,IAAI,GAAG2B,UAChBuD,SAAS3C,KACV,CAAA,mBAAoBZ,UAAUuD,SAAS3C,KAAK,CAAA;;QAAG,IAAAa,WAAA;AAAA,gBAC/CpD,IAAI,4DACHkF,SAAS3C,KAAI;;QACa,CAAA;;MAAA,IAAAa,WAAA;AAAA,cAAAd,gBAG/B/B,aAAW;QAAA,IACV4D,YAAS;AAAA,gBAAEnE,IAAI,GAAG2B,UAAUuD,SAAS3C,KAAK,CAAA;;QAAqC,IAAAa,WAAA;AAAA,gBAC9EpD,IAAI,2DACHkF,SAAS3C,KAAI;;QACmB,CAAA;;MAAA,CAAA;;IAAA,CAAA,CAAA;GAK3C,CAAA;EAAAD,gBAEF/B,aAAW;GAAC4D,WAAWnE,IAAI;GAAqBoD,UAC9CpD,IAAI;;GACiB,CAAA;EAAA;;;;;AAgB9B,SAAgBmF,aAAa/C,OAA0B;CACrD,MAAM,EAAEC,SAAS+C,SAASC,gBAAgB,GAAGC,SAASlD;CAEtD,MAAMiB,UAAU3C,eAAoC;CACpD,MAAM6E,WAAWtF,eACfwB,UACEY,QAAQI,SACL+C,QAAO7C,YAAW,CAACrB,qBAAqBqB,QAAQ,CAAC,CACjDC,KAAK,IAAI,EACZ,WAEJ,CAAC;CACD,MAAM6C,oBAAoBxF,eAEtB,KAAKyB,iBACHF,aACEC,UAAU4B,QAAQqC,WAAWnE,aAAagE,SAASI,MAAM,CAAC,EAC1DtD,QAAQuD,MAAMC,OAAOC,QAAQzD,QAAQuD,MAAME,KAE/C,CAAC,GACJ;CACD,MAAMC,iBAAiB9F,gBAAgB;EACrC,GAAGoC,QAAQuD;EACXI,QAAQ3D,QAAQ4D;EACjB,EAAE;AAEH,QAAA,CAAA3D,gBAEK3B,WAASuF,WACJZ,MAAI;EAAA,IACRa,OAAI;AAAA,UAAEZ,SAASI;;EAAK,IACpBI,iBAAc;AAAA,UAAEA,eAAeJ;;EAAK,IACpCP,UAAO;AAAA,UAAErD,KAAKqD,WAAW,EAAE,EAAE,GAC1BK,kBAAkBE,QAAQ,SAAS7D,WAAWO,QAAQE,KAAK,IAC7D,CAAC;;EAAA,IACF8C,iBAAc;AAAA,UAAEtD,KAAKsD,kBAAkB,EAAE,EAAE;IACzCe,KAAK;KAAC;KAAO;KAAiB;KAAU;IACxCC,SAAS;KACP;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACD;IACDC,OAAO;KACL;KACA;KACA;KACA;KACA;KAAyB;IAE5B,CAAC;;EAAA,IAAAlD,WAAA;AAAA,UAAA;IAAAd,gBACDN,2BAAyB,EAAUK,SAAO,CAAA;IAAAY,gBAAA,OAAA,EAAA,CAAA;IAAAA,gBAAA,OAAA,EAAA,CAAA;IAAAX,gBAG1CnB,6BAA2B,EAAUkB,SAAO,CAAA;IAAAY,gBAAA,OAAA,EAAA,CAAA;IAAAA,gBAAA,OAAA,EAAA,CAAA;IAAAX,gBAG5CY,2BAAyB;KAAUb;KAASc,QAAQnD,IAAI;KAAY,IAAAoD,WAAA;AAAA,aAAAd,gBAClEkC,wBAAsB,EAAUnC,SAAO,CAAA;;KAAA,CAAA;IAAA;;EAAA,CAAA,CAAA,EAAAC,gBAG3CpC,KAAG;EAAA,IAACuE,OAAI;AAAA,UAAEL,OAAOC,OAAOhC,QAAQe,SAAS;;EAAAA,WACvCmD,UAAKjE,gBACHnC,MAAI;GAAA,IACH8D,OAAI;AAAA,WAAEsC,MAAMC;;GAAS,IACrBvB,WAAQ;AAAA,WAAA3C,gBAAG6C,cAAY,EAAC9C,SAASkE,OAAK,CAAA;;GAAA,IAAAnD,WAAA;AAAA,WAAAd,gBACrCJ,qBAAmB,EAACG,SAASkE,OAAK,CAAA;;GAAA,CAAA;EAEtC,CAAA,CAAA"}
1
+ {"version":3,"file":"command-entry.mjs","names":[],"sources":["../../src/components/command-entry.tsx"],"sourcesContent":["/* -------------------------------------------------------------------\n\n ⚡ Storm Software - Shell Shock\n\n This code was released as part of the Shell Shock project. Shell Shock\n is maintained by Storm Software under the Apache-2.0 license, and is\n free for commercial and private use. For more information, please visit\n our licensing page at https://stormsoftware.com/licenses/projects/shell-shock.\n\n Website: https://stormsoftware.com\n Repository: https://github.com/storm-software/shell-shock\n Documentation: https://docs.stormsoftware.com/projects/shell-shock\n Contact: https://stormsoftware.com/contact\n\n SPDX-License-Identifier: Apache-2.0\n\n ------------------------------------------------------------------- */\n\nimport type { Children } from \"@alloy-js/core\";\nimport { code, computed, For, Show } from \"@alloy-js/core\";\nimport {\n ElseClause,\n 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 type { EntryFileProps } from \"@powerlines/plugin-alloy/typescript/components/entry-file\";\nimport { EntryFile } from \"@powerlines/plugin-alloy/typescript/components/entry-file\";\nimport {\n TSDoc,\n TSDocParam,\n TSDocRemarks,\n TSDocTitle\n} from \"@powerlines/plugin-alloy/typescript/components/tsdoc\";\nimport type { CommandTree } from \"@shell-shock/core\";\nimport { CommandValidationLogic } from \"@shell-shock/core/components/command-validation-logic\";\nimport { IsDebug } from \"@shell-shock/core/components/helpers\";\nimport {\n CommandParserLogic,\n OptionsInterfaceDeclaration\n} from \"@shell-shock/core/components/options-parser-logic\";\nimport {\n getAppBin,\n getDynamicPathSegmentName,\n isDynamicPathSegment\n} from \"@shell-shock/core/plugin-utils\";\nimport { findFilePath, relativePath } from \"@stryke/path/find\";\nimport { joinPaths } from \"@stryke/path/join\";\nimport { replaceExtension } from \"@stryke/path/replace\";\nimport { camelCase } from \"@stryke/string-format/camel-case\";\nimport { constantCase } from \"@stryke/string-format/constant-case\";\nimport { kebabCase } from \"@stryke/string-format/kebab-case\";\nimport { pascalCase } from \"@stryke/string-format/pascal-case\";\nimport defu from \"defu\";\nimport type { ScriptPresetContext } from \"../types/plugin\";\nimport { BannerFunctionDeclaration } from \"./banner-function-declaration\";\nimport { VirtualCommandEntry } from \"./virtual-command-entry\";\n\nexport function CommandInvocation(props: { command: CommandTree }) {\n const { command } = props;\n\n return (\n <>\n <VarDeclaration\n name=\"__context\"\n initializer={code`{ path: \\`${command.segments\n .map(segment =>\n isDynamicPathSegment(segment)\n ? `\\${${camelCase(getDynamicPathSegmentName(segment))}}`\n : segment\n )\n .join(\"/\")}\\`, segments: [${command.segments\n .map(segment =>\n isDynamicPathSegment(segment)\n ? camelCase(getDynamicPathSegmentName(segment))\n : `\"${segment}\"`\n )\n .join(\", \")}] }`}\n />\n <Spacing />\n {code`\n\n return internal_commandContext.run(__context, () => {\n return Promise.resolve(Reflect.apply(handle${pascalCase(\n command.name\n )}, __context, [options${\n command.args.length > 0\n ? `, ${command.args.map(arg => camelCase(arg.name)).join(\", \")}`\n : \"\"\n }]));\n });\n\n `}\n <hbr />\n </>\n );\n}\n\nexport interface CommandHandlerDeclarationProps {\n command: CommandTree;\n banner?: Children;\n children?: Children;\n}\n\n/**\n * A component that generates the `handler` function declaration for a command.\n */\nexport function CommandHandlerDeclaration(\n props: CommandHandlerDeclarationProps\n) {\n const { command, banner, children } = props;\n\n const context = usePowerlines<ScriptPresetContext>();\n\n return (\n <>\n <OptionsInterfaceDeclaration command={command} />\n <Spacing />\n <TSDoc\n heading={`The ${command.title} (${getAppBin(context)} ${command.segments\n .map(segment =>\n isDynamicPathSegment(segment)\n ? `[${constantCase(getDynamicPathSegmentName(segment))}]`\n : segment\n )\n .join(\" \")}) command.`}>\n <TSDocRemarks>{`${command.description.replace(/\\.+$/, \"\")}.`}</TSDocRemarks>\n <hbr />\n <TSDocTitle>{command.title}</TSDocTitle>\n <TSDocParam name=\"args\">{`The command-line arguments passed to the command.`}</TSDocParam>\n </TSDoc>\n <FunctionDeclaration\n export\n async\n name=\"handler\"\n parameters={[{ name: \"args\", type: \"string[]\", default: \"useArgs()\" }]}>\n <CommandParserLogic\n command={command}\n appSpecificEnvPrefix={context.config.appSpecificEnvPrefix}\n isCaseSensitive={context.config.isCaseSensitive}\n />\n <Spacing />\n <Show when={Boolean(banner)}>{banner}</Show>\n <Spacing />\n <IfStatement condition={<IsDebug />}>\n {code`writeLine(\"\");\n writeLine(colors.text.body.tertiary(\"Debug mode is enabled. Additional debug information may be logged to the console.\"));\n debug(\\`Command path: ${command.segments\n .map(segment =>\n isDynamicPathSegment(segment)\n ? `\\${${camelCase(getDynamicPathSegmentName(segment))}}`\n : segment\n )\n .join(\" / \")} \\\\n\\\\nOptions: \\\\n${Object.values(command.options)\n .map(\n option =>\n ` - ${kebabCase(option.name)}: \\${options.${camelCase(\n option.name\n )} === undefined ? \"\" : JSON.stringify(options.${camelCase(\n option.name\n )})}`\n )\n .join(\"\\\\n\")}${\n command.args.length > 0\n ? ` \\\\n\\\\nArguments: \\\\n${command.args\n .map(\n arg =>\n ` - ${kebabCase(arg.name)}: \\${${camelCase(\n arg.name\n )} === undefined ? \"\" : JSON.stringify(${camelCase(\n arg.name\n )})}`\n )\n .join(\"\\\\n\")}`\n : \"\"\n }\\`);\n writeLine(\"\"); `}\n </IfStatement>\n <Spacing />\n {children}\n <Spacing />\n <IfStatement condition={code`options.help`}>\n {code`return showHelp(); `}\n </IfStatement>\n <ElseClause>\n <hbr />\n <CommandInvocation command={command} />\n </ElseClause>\n </FunctionDeclaration>\n </>\n );\n}\n\nexport interface CommandEntryProps extends Omit<\n EntryFileProps,\n \"path\" | \"typeDefinition\"\n> {\n command: CommandTree;\n}\n\n/**\n * The command entry point for the Shell Shock project.\n */\nexport function CommandEntry(props: CommandEntryProps) {\n const { command, imports, builtinImports, ...rest } = props;\n\n const context = usePowerlines<ScriptPresetContext>();\n const filePath = computed(() =>\n joinPaths(\n command.segments\n .filter(segment => !isDynamicPathSegment(segment))\n .join(\"/\"),\n \"index.ts\"\n )\n );\n const commandSourcePath = computed(() =>\n replaceExtension(\n relativePath(\n joinPaths(context.entryPath, findFilePath(filePath.value)),\n command.entry.input?.file || command.entry.file\n )\n )\n );\n const typeDefinition = computed(() => ({\n ...command.entry,\n output: command.id\n }));\n\n return (\n <>\n <EntryFile\n {...rest}\n path={filePath.value}\n typeDefinition={typeDefinition.value}\n imports={defu(imports ?? {}, {\n [commandSourcePath.value.startsWith(\".\")\n ? commandSourcePath.value\n : `./${commandSourcePath.value}`]:\n `handle${pascalCase(command.name)}`\n })}\n builtinImports={defu(builtinImports ?? {}, {\n env: [\"env\", \"isDevelopment\", \"isDebug\"],\n console: [\"debug\", \"warn\", \"error\", \"colors\", \"writeLine\"],\n utils: [\n \"useArgs\",\n \"hasFlag\",\n \"isMinimal\",\n \"isUnicodeSupported\",\n \"internal_commandContext\"\n ],\n [joinPaths(\n \"help\",\n ...command.segments.filter(\n segment => !isDynamicPathSegment(segment)\n )\n )]: [\"showHelp\"]\n })}>\n <BannerFunctionDeclaration command={command} />\n <Spacing />\n <OptionsInterfaceDeclaration command={command} />\n <Spacing />\n <CommandHandlerDeclaration command={command} banner={code`banner(); `}>\n <CommandValidationLogic command={command} />\n <IfStatement condition={code`failures.length > 0`}>\n {code`error(\"The following validation failures were found while processing the user provided input, and must be corrected before the command-line process can be executed: \\\\n\\\\n\" + failures.map(failure => \" - \" + failure).join(\"\\\\n\"));\n options.help = true; `}\n </IfStatement>\n </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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"}