@shell-shock/preset-script 0.6.2 → 0.6.4

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 (80) hide show
  1. package/README.md +1 -1
  2. package/dist/components/banner-function-declaration.cjs +15 -8
  3. package/dist/components/banner-function-declaration.cjs.map +1 -1
  4. package/dist/components/banner-function-declaration.d.cts +2 -0
  5. package/dist/components/banner-function-declaration.d.cts.map +1 -1
  6. package/dist/components/banner-function-declaration.d.mts +2 -0
  7. package/dist/components/banner-function-declaration.d.mts.map +1 -1
  8. package/dist/components/banner-function-declaration.mjs +17 -10
  9. package/dist/components/banner-function-declaration.mjs.map +1 -1
  10. package/dist/components/bin-entry.cjs +6 -10
  11. package/dist/components/bin-entry.cjs.map +1 -1
  12. package/dist/components/bin-entry.d.cts.map +1 -1
  13. package/dist/components/bin-entry.d.mts.map +1 -1
  14. package/dist/components/bin-entry.mjs +6 -10
  15. package/dist/components/bin-entry.mjs.map +1 -1
  16. package/dist/components/command-entry.cjs +14 -14
  17. package/dist/components/command-entry.cjs.map +1 -1
  18. package/dist/components/command-entry.d.cts +1 -0
  19. package/dist/components/command-entry.d.cts.map +1 -1
  20. package/dist/components/command-entry.d.mts +1 -0
  21. package/dist/components/command-entry.d.mts.map +1 -1
  22. package/dist/components/command-entry.mjs +14 -14
  23. package/dist/components/command-entry.mjs.map +1 -1
  24. package/dist/components/command-router.cjs +3 -3
  25. package/dist/components/command-router.cjs.map +1 -1
  26. package/dist/components/command-router.d.cts.map +1 -1
  27. package/dist/components/command-router.d.mts.map +1 -1
  28. package/dist/components/command-router.mjs +3 -3
  29. package/dist/components/command-router.mjs.map +1 -1
  30. package/dist/components/console-builtin.cjs +773 -102
  31. package/dist/components/console-builtin.cjs.map +1 -1
  32. package/dist/components/console-builtin.d.cts +2 -2
  33. package/dist/components/console-builtin.d.cts.map +1 -1
  34. package/dist/components/console-builtin.d.mts +2 -2
  35. package/dist/components/console-builtin.d.mts.map +1 -1
  36. package/dist/components/console-builtin.mjs +774 -104
  37. package/dist/components/console-builtin.mjs.map +1 -1
  38. package/dist/components/help.cjs +6 -12
  39. package/dist/components/help.cjs.map +1 -1
  40. package/dist/components/help.d.cts +7 -7
  41. package/dist/components/help.d.cts.map +1 -1
  42. package/dist/components/help.d.mts +7 -7
  43. package/dist/components/help.d.mts.map +1 -1
  44. package/dist/components/help.mjs +6 -12
  45. package/dist/components/help.mjs.map +1 -1
  46. package/dist/components/helpers.d.cts +5 -5
  47. package/dist/components/index.cjs +1 -0
  48. package/dist/components/index.d.cts +2 -2
  49. package/dist/components/index.d.mts +2 -2
  50. package/dist/components/index.mjs +2 -2
  51. package/dist/components/utils-builtin.cjs +19 -36
  52. package/dist/components/utils-builtin.cjs.map +1 -1
  53. package/dist/components/utils-builtin.d.cts +8 -8
  54. package/dist/components/utils-builtin.d.cts.map +1 -1
  55. package/dist/components/utils-builtin.d.mts +8 -8
  56. package/dist/components/utils-builtin.d.mts.map +1 -1
  57. package/dist/components/utils-builtin.mjs +19 -36
  58. package/dist/components/utils-builtin.mjs.map +1 -1
  59. package/dist/components/virtual-command-entry.cjs +8 -3
  60. package/dist/components/virtual-command-entry.cjs.map +1 -1
  61. package/dist/components/virtual-command-entry.d.cts +1 -0
  62. package/dist/components/virtual-command-entry.d.cts.map +1 -1
  63. package/dist/components/virtual-command-entry.d.mts +1 -0
  64. package/dist/components/virtual-command-entry.d.mts.map +1 -1
  65. package/dist/components/virtual-command-entry.mjs +8 -3
  66. package/dist/components/virtual-command-entry.mjs.map +1 -1
  67. package/dist/helpers/ansi-utils.cjs +117 -3
  68. package/dist/helpers/ansi-utils.cjs.map +1 -1
  69. package/dist/helpers/ansi-utils.d.cts.map +1 -1
  70. package/dist/helpers/ansi-utils.d.mts.map +1 -1
  71. package/dist/helpers/ansi-utils.mjs +117 -3
  72. package/dist/helpers/ansi-utils.mjs.map +1 -1
  73. package/dist/index.cjs +1 -2
  74. package/dist/index.cjs.map +1 -1
  75. package/dist/index.d.cts.map +1 -1
  76. package/dist/index.d.mts.map +1 -1
  77. package/dist/index.mjs +1 -2
  78. package/dist/index.mjs.map +1 -1
  79. package/dist/types/plugin.d.cts.map +1 -1
  80. package/package.json +15 -15
@@ -1 +1 @@
1
- {"version":3,"file":"bin-entry.mjs","names":["code","computed","For","Show","FunctionDeclaration","IfStatement","usePowerlines","EntryFile","TSDoc","getAppTitle","getUnique","findFileName","replaceExtension","pascalCase","defu","RunApplication","_$createIntrinsic","BinEntry","props","prefix","postfix","builtinImports","imports","children","rest","context","bins","Object","values","config","bin","_$createComponent","each","value","_$mergeProps","path","typeDefinition","file","output","didyoumean2","name","default","entries","commands","filter","command","isVirtual","reduce","ret","alias","console","utils","when","Boolean","heading","async","returnType","condition","packageJson","version","fallback"],"sources":["../../src/components/bin-entry.tsx"],"sourcesContent":["/* -------------------------------------------------------------------\n\n ⚡ Storm Software - Shell Shock\n\n This code was released as part of the Shell Shock project. Shell Shock\n is maintained by Storm Software under the Apache-2.0 license, and is\n free for commercial and private use. For more information, please visit\n our licensing page at https://stormsoftware.com/licenses/projects/shell-shock.\n\n Website: https://stormsoftware.com\n Repository: https://github.com/storm-software/shell-shock\n Documentation: https://docs.stormsoftware.com/projects/shell-shock\n Contact: https://stormsoftware.com/contact\n\n SPDX-License-Identifier: Apache-2.0\n\n ------------------------------------------------------------------- */\n\nimport type { Children } from \"@alloy-js/core\";\nimport { code, computed, For, Show } from \"@alloy-js/core\";\nimport { FunctionDeclaration, IfStatement } from \"@alloy-js/typescript\";\nimport { usePowerlines } from \"@powerlines/plugin-alloy/core/contexts/context\";\nimport type { TypescriptFileImports } from \"@powerlines/plugin-alloy/types/components\";\nimport type { EntryFileProps } from \"@powerlines/plugin-alloy/typescript/components/entry-file\";\nimport { EntryFile } from \"@powerlines/plugin-alloy/typescript/components/entry-file\";\nimport { TSDoc } from \"@powerlines/plugin-alloy/typescript/components/tsdoc\";\nimport { getAppTitle } from \"@shell-shock/core/plugin-utils/context-helpers\";\nimport { getUnique } from \"@stryke/helpers/get-unique\";\nimport { findFileName } from \"@stryke/path/file-path-fns\";\nimport { replaceExtension } from \"@stryke/path/replace\";\nimport { pascalCase } from \"@stryke/string-format/pascal-case\";\nimport defu from \"defu\";\nimport type { ScriptPresetContext } from \"../types/plugin\";\n\n/**\n * Runs the application main logic with proper exit handling.\n */\nexport function RunApplication() {\n return (\n <>\n <hbr />\n <hbr />\n {code`// Run the application main logic inside an asynchronous IIFE\n (async () => {\n const startDate = new Date();\n try {\n process.on(\"exit\", () => exit({\n startDate,\n skipExit: true,\n isSynchronous: true,\n signal: 0\n }));\n process.on(\"beforeExit\", () => exit({\n startDate,\n signal: 0\n }));\n process.on(\"message\", message => {\n if (message === 'shutdown') {\n exit({\n startDate,\n isSynchronous: true,\n signal: -128\n });\n }\n });\n\n process.once(\"SIGTERM\", () => exit({\n startDate,\n signal: 15\n }));\n process.once(\"SIGINT\", () => exit({\n startDate,\n signal: 2\n }));\n process.once(\"SIGUSR2\", () => {\n verbose(\"The application was terminated by the user\");\n return exit({\n startDate,\n signal: 12\n });\n });\n process.once(\"SIGQUIT\", () => {\n verbose(\"The application was terminated by the user\");\n return exit({\n startDate,\n signal: 12\n });\n });\n\n for (const type of [\"unhandledRejection\", \"uncaughtException\"]) {\n process.on(type, err => exit({\n startDate,\n exception: err || new Error(\\`An \\${type === \"unhandledRejection\" ? \"unhandled promise rejection\" : \"uncaught exception\"} occurred during processing - the application is shutting down.\\`)\n }));\n }\n\n await internal_appContext.run(new Map([[\"args\", getArgs()]]), async () => {\n const result = await main();\n if (result?.error) {\n error(result.error);\n }\n });\n\n exit({ startDate });\n } catch (err) {\n exit({ startDate, exception: err as Error });\n }\n })();\n `}\n <hbr />\n </>\n );\n}\n\nexport interface BinEntryProps extends Omit<\n EntryFileProps,\n \"path\" | \"hashbang\"\n> {\n prefix?: Children;\n postfix?: Children;\n children: Children;\n}\n\n/**\n * The binary entry point for the Shell Shock project.\n */\nexport function BinEntry(props: BinEntryProps) {\n const { prefix, postfix, builtinImports, imports, children, ...rest } = props;\n\n const context = usePowerlines<ScriptPresetContext>();\n const bins = computed(() => getUnique(Object.values(context.config.bin)));\n\n return (\n <For each={bins.value}>\n {bin => (\n <EntryFile\n {...rest}\n path={findFileName(replaceExtension(bin))}\n typeDefinition={{\n file: bin,\n output: \"bin\"\n }}\n imports={defu(\n {\n didyoumean2: [\n { name: \"didYouMean\", default: true },\n { name: \"ReturnTypeEnums\" },\n { name: \"ThresholdTypeEnums\" }\n ]\n },\n imports ?? {},\n Object.entries(context.commands)\n .filter(([, command]) => command.isVirtual)\n .reduce((ret, [name, command]) => {\n ret[`./${command.name}`] = [\n { name: \"handler\", alias: `handle${pascalCase(name)}` }\n ];\n\n return ret;\n }, {} as TypescriptFileImports)\n )}\n builtinImports={defu(builtinImports ?? {}, {\n console: [\"error\", \"verbose\", \"table\"],\n utils: [\n \"hasFlag\",\n \"exit\",\n \"isUnicodeSupported\",\n \"internal_appContext\",\n \"getArgs\"\n ]\n })}>\n <Show when={Boolean(prefix)}>\n {prefix}\n <hbr />\n <hbr />\n </Show>\n <TSDoc\n heading={`Binary entry point for the ${getAppTitle(context)} CLI application.`}></TSDoc>\n <FunctionDeclaration async returnType=\"any\" name=\"main\">\n <IfStatement condition={code`hasFlag([\"version\", \"v\"])`}>\n {code`console.log(${context?.packageJson.version ? `\"${context?.packageJson.version}\"` : \"0.0.1\"});\n return;`}\n </IfStatement>\n <hbr />\n <hbr />\n {children}\n <hbr />\n </FunctionDeclaration>\n <hbr />\n <hbr />\n <hbr />\n <Show when={Boolean(postfix)} fallback={<RunApplication />}>\n {postfix}\n </Show>\n <hbr />\n </EntryFile>\n )}\n </For>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;AAqCA,SAAgBe,iBAAiB;AAC/B,QAAA;EAAAC,gBAAA,OAAA,EAAA,CAAA;EAAAA,gBAAA,OAAA,EAAA,CAAA;EAIKhB,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAkEJgB,gBAAA,OAAA,EAAA,CAAA;EAAA;;;;;AAkBP,SAAgBC,SAASC,OAAsB;CAC7C,MAAM,EAAEC,QAAQC,SAASC,gBAAgBC,SAASC,UAAU,GAAGC,SAASN;CAExE,MAAMO,UAAUnB,eAAoC;CACpD,MAAMoB,OAAOzB,eAAeS,UAAUiB,OAAOC,OAAOH,QAAQI,OAAOC,IAAI,CAAC,CAAC;AAEzE,QAAAC,gBACG7B,KAAG;EAAA,IAAC8B,OAAI;AAAA,UAAEN,KAAKO;;EAAKV,WAClBO,QAAGC,gBACDxB,WAAS2B,WACJV,MAAI;GAAA,IACRW,OAAI;AAAA,WAAExB,aAAaC,iBAAiBkB,IAAI,CAAC;;GACzCM,gBAAgB;IACdC,MAAMP;IACNQ,QAAQ;IACT;GAAA,IACDhB,UAAO;AAAA,WAAER,KACP,EACEyB,aAAa;KACX;MAAEC,MAAM;MAAcC,SAAS;MAAM;KACrC,EAAED,MAAM,mBAAmB;KAC3B,EAAEA,MAAM,sBAAsB;KAAA,EAEjC,EACDlB,WAAW,EAAE,EACbK,OAAOe,QAAQjB,QAAQkB,SAAS,CAC7BC,QAAQ,GAAGC,aAAaA,QAAQC,UAAU,CAC1CC,QAAQC,KAAK,CAACR,MAAMK,aAAa;AAChCG,SAAI,KAAKH,QAAQL,UAAU,CACzB;MAAEA,MAAM;MAAWS,OAAO,SAASpC,WAAW2B,KAAK;MAAI,CACxD;AAED,YAAOQ;OACN,EAA2B,CAClC,CAAC;;GAAA,IACD3B,iBAAc;AAAA,WAAEP,KAAKO,kBAAkB,EAAE,EAAE;KACzC6B,SAAS;MAAC;MAAS;MAAW;MAAQ;KACtCC,OAAO;MACL;MACA;MACA;MACA;MACA;MAAS;KAEZ,CAAC;;GAAA,IAAA5B,WAAA;AAAA,WAAA;KAAAQ,gBACD5B,MAAI;MAAA,IAACiD,OAAI;AAAA,cAAEC,QAAQlC,OAAO;;MAAA,IAAAI,WAAA;AAAA,cAAA;QACxBJ;QAAMH,gBAAA,OAAA,EAAA,CAAA;QAAAA,gBAAA,OAAA,EAAA,CAAA;QAAA;;MAAA,CAAA;KAAAe,gBAIRvB,OAAK,EAAA,IACJ8C,UAAO;AAAA,aAAE,8BAA8B7C,YAAYgB,QAAQ,CAAA;QAAmB,CAAA;KAAAM,gBAC/E3B,qBAAmB;MAACmD,OAAK;MAACC,YAAU;MAAOhB,MAAI;MAAA,IAAAjB,WAAA;AAAA,cAAA;QAAAQ,gBAC7C1B,aAAW;SAACoD,WAAWzD,IAAI;SAA2B,IAAAuB,WAAA;AAAA,iBACpDvB,IAAI,eAAeyB,SAASiC,YAAYC,UAAU,IAAIlC,SAASiC,YAAYC,QAAO,KAAM,QAAO;;;SAC5F,CAAA;QAAA3C,gBAAA,OAAA,EAAA,CAAA;QAAAA,gBAAA,OAAA,EAAA,CAAA;QAILO;QAAQP,gBAAA,OAAA,EAAA,CAAA;QAAA;;MAAA,CAAA;KAAAA,gBAAA,OAAA,EAAA,CAAA;KAAAA,gBAAA,OAAA,EAAA,CAAA;KAAAA,gBAAA,OAAA,EAAA,CAAA;KAAAe,gBAMV5B,MAAI;MAAA,IAACiD,OAAI;AAAA,cAAEC,QAAQjC,QAAQ;;MAAA,IAAEwC,WAAQ;AAAA,cAAA7B,gBAAGhB,gBAAc,EAAA,CAAA;;MAAAQ,UACpDH;MAAO,CAAA;KAAAJ,gBAAA,OAAA,EAAA,CAAA;KAAA;;GAAA,CAAA,CAAA;EAIb,CAAA"}
1
+ {"version":3,"file":"bin-entry.mjs","names":["code","computed","For","Show","FunctionDeclaration","IfStatement","Spacing","usePowerlines","EntryFile","TSDoc","getAppTitle","getUnique","findFileName","replaceExtension","pascalCase","defu","RunApplication","_$createComponent","_$createIntrinsic","BinEntry","props","prefix","postfix","builtinImports","imports","children","rest","context","bins","Object","values","config","bin","each","value","_$mergeProps","path","typeDefinition","file","output","didyoumean2","name","default","entries","commands","filter","command","isVirtual","reduce","ret","alias","console","utils","when","Boolean","heading","async","returnType","condition","packageJson","version","fallback"],"sources":["../../src/components/bin-entry.tsx"],"sourcesContent":["/* -------------------------------------------------------------------\n\n ⚡ Storm Software - Shell Shock\n\n This code was released as part of the Shell Shock project. Shell Shock\n is maintained by Storm Software under the Apache-2.0 license, and is\n free for commercial and private use. For more information, please visit\n our licensing page at https://stormsoftware.com/licenses/projects/shell-shock.\n\n Website: https://stormsoftware.com\n Repository: https://github.com/storm-software/shell-shock\n Documentation: https://docs.stormsoftware.com/projects/shell-shock\n Contact: https://stormsoftware.com/contact\n\n SPDX-License-Identifier: Apache-2.0\n\n ------------------------------------------------------------------- */\n\nimport type { Children } from \"@alloy-js/core\";\nimport { code, computed, For, Show } from \"@alloy-js/core\";\nimport { FunctionDeclaration, IfStatement } from \"@alloy-js/typescript\";\nimport { Spacing } from \"@powerlines/plugin-alloy/core/components/spacing\";\nimport { usePowerlines } from \"@powerlines/plugin-alloy/core/contexts/context\";\nimport type { TypescriptFileImports } from \"@powerlines/plugin-alloy/types/components\";\nimport type { EntryFileProps } from \"@powerlines/plugin-alloy/typescript/components/entry-file\";\nimport { EntryFile } from \"@powerlines/plugin-alloy/typescript/components/entry-file\";\nimport { TSDoc } from \"@powerlines/plugin-alloy/typescript/components/tsdoc\";\nimport { getAppTitle } from \"@shell-shock/core/plugin-utils/context-helpers\";\nimport { getUnique } from \"@stryke/helpers/get-unique\";\nimport { findFileName } from \"@stryke/path/file-path-fns\";\nimport { replaceExtension } from \"@stryke/path/replace\";\nimport { pascalCase } from \"@stryke/string-format/pascal-case\";\nimport defu from \"defu\";\nimport type { ScriptPresetContext } from \"../types/plugin\";\n\n/**\n * Runs the application main logic with proper exit handling.\n */\nexport function RunApplication() {\n return (\n <>\n <Spacing />\n {code`// Run the application main logic inside an asynchronous IIFE\n (async () => {\n const startDate = new Date();\n try {\n process.on(\"exit\", () => exit({\n startDate,\n skipExit: true,\n isSynchronous: true,\n signal: 0\n }));\n process.on(\"beforeExit\", () => exit({\n startDate,\n signal: 0\n }));\n process.on(\"message\", message => {\n if (message === 'shutdown') {\n exit({\n startDate,\n isSynchronous: true,\n signal: -128\n });\n }\n });\n\n process.once(\"SIGTERM\", () => exit({\n startDate,\n signal: 15\n }));\n process.once(\"SIGINT\", () => exit({\n startDate,\n signal: 2\n }));\n process.once(\"SIGUSR2\", () => {\n verbose(\"The application was terminated by the user\");\n return exit({\n startDate,\n signal: 12\n });\n });\n process.once(\"SIGQUIT\", () => {\n verbose(\"The application was terminated by the user\");\n return exit({\n startDate,\n signal: 12\n });\n });\n\n for (const type of [\"unhandledRejection\", \"uncaughtException\"]) {\n process.on(type, err => exit({\n startDate,\n exception: err || new Error(\\`An \\${type === \"unhandledRejection\" ? \"unhandled promise rejection\" : \"uncaught exception\"} occurred during processing - the application is shutting down.\\`)\n }));\n }\n\n await internal_appContext.run(new Map([[\"args\", getArgs()]]), async () => {\n const result = await main();\n if (result?.error) {\n error(result.error);\n }\n });\n\n exit({ startDate });\n } catch (err) {\n exit({ startDate, exception: err as Error });\n }\n })();\n `}\n <hbr />\n </>\n );\n}\n\nexport interface BinEntryProps\n extends Omit<EntryFileProps, \"path\" | \"hashbang\"> {\n prefix?: Children;\n postfix?: Children;\n children: Children;\n}\n\n/**\n * The binary entry point for the Shell Shock project.\n */\nexport function BinEntry(props: BinEntryProps) {\n const { prefix, postfix, builtinImports, imports, children, ...rest } = props;\n\n const context = usePowerlines<ScriptPresetContext>();\n const bins = computed(() => getUnique(Object.values(context.config.bin)));\n\n return (\n <For each={bins.value}>\n {bin => (\n <EntryFile\n {...rest}\n path={findFileName(replaceExtension(bin))}\n typeDefinition={{\n file: bin,\n output: \"bin\"\n }}\n imports={defu(\n {\n didyoumean2: [\n { name: \"didYouMean\", default: true },\n { name: \"ReturnTypeEnums\" },\n { name: \"ThresholdTypeEnums\" }\n ]\n },\n imports ?? {},\n Object.entries(context.commands)\n .filter(([, command]) => command.isVirtual)\n .reduce((ret, [name, command]) => {\n ret[`./${command.name}`] = [\n { name: \"handler\", alias: `handle${pascalCase(name)}` }\n ];\n\n return ret;\n }, {} as TypescriptFileImports)\n )}\n builtinImports={defu(builtinImports ?? {}, {\n console: [\"error\", \"verbose\", \"table\", \"writeLine\"],\n utils: [\n \"hasFlag\",\n \"exit\",\n \"isUnicodeSupported\",\n \"internal_appContext\",\n \"getArgs\"\n ]\n })}>\n <Show when={Boolean(prefix)}>\n {prefix}\n <Spacing />\n </Show>\n <TSDoc\n heading={`Binary entry point for the ${getAppTitle(\n context\n )} CLI application.`}></TSDoc>\n <FunctionDeclaration async returnType=\"any\" name=\"main\">\n <IfStatement condition={code`hasFlag([\"version\", \"v\"])`}>\n {code`console.log(${\n context?.packageJson.version\n ? `\"${context?.packageJson.version}\"`\n : \"0.0.1\"\n });\n return;`}\n </IfStatement>\n <Spacing />\n {children}\n <hbr />\n </FunctionDeclaration>\n <hbr />\n <hbr />\n <hbr />\n <Show when={Boolean(postfix)} fallback={<RunApplication />}>\n {postfix}\n </Show>\n <hbr />\n </EntryFile>\n )}\n </For>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAsCA,SAAgBgB,iBAAiB;AAC/B,QAAA;EAAAC,gBAEKX,SAAO,EAAA,CAAA;EACPN,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAkEJkB,gBAAA,OAAA,EAAA,CAAA;EAAA;;;;;AAgBP,SAAgBC,SAASC,OAAsB;CAC7C,MAAM,EAAEC,QAAQC,SAASC,gBAAgBC,SAASC,UAAU,GAAGC,SAASN;CAExE,MAAMO,UAAUpB,eAAoC;CACpD,MAAMqB,OAAO3B,eAAeU,UAAUkB,OAAOC,OAAOH,QAAQI,OAAOC,IAAI,CAAC,CAAC;AAEzE,QAAAf,gBACGf,KAAG;EAAA,IAAC+B,OAAI;AAAA,UAAEL,KAAKM;;EAAKT,WAClBO,QAAGf,gBACDT,WAAS2B,WACJT,MAAI;GAAA,IACRU,OAAI;AAAA,WAAExB,aAAaC,iBAAiBmB,IAAI,CAAC;;GACzCK,gBAAgB;IACdC,MAAMN;IACNO,QAAQ;IACT;GAAA,IACDf,UAAO;AAAA,WAAET,KACP,EACEyB,aAAa;KACX;MAAEC,MAAM;MAAcC,SAAS;MAAM;KACrC,EAAED,MAAM,mBAAmB;KAC3B,EAAEA,MAAM,sBAAsB;KAAA,EAEjC,EACDjB,WAAW,EAAE,EACbK,OAAOc,QAAQhB,QAAQiB,SAAS,CAC7BC,QAAQ,GAAGC,aAAaA,QAAQC,UAAU,CAC1CC,QAAQC,KAAK,CAACR,MAAMK,aAAa;AAChCG,SAAI,KAAKH,QAAQL,UAAU,CACzB;MAAEA,MAAM;MAAWS,OAAO,SAASpC,WAAW2B,KAAK;MAAI,CACxD;AAED,YAAOQ;OACN,EAA2B,CAClC,CAAC;;GAAA,IACD1B,iBAAc;AAAA,WAAER,KAAKQ,kBAAkB,EAAE,EAAE;KACzC4B,SAAS;MAAC;MAAS;MAAW;MAAS;MAAY;KACnDC,OAAO;MACL;MACA;MACA;MACA;MACA;MAAS;KAEZ,CAAC;;GAAA,IAAA3B,WAAA;AAAA,WAAA;KAAAR,gBACDd,MAAI;MAAA,IAACkD,OAAI;AAAA,cAAEC,QAAQjC,OAAO;;MAAA,IAAAI,WAAA;AAAA,cAAA,CACxBJ,QAAMJ,gBACNX,SAAO,EAAA,CAAA,CAAA;;MAAA,CAAA;KAAAW,gBAETR,OAAK,EAAA,IACJ8C,UAAO;AAAA,aAAE,8BAA8B7C,YACrCiB,QACD,CAAA;QAAmB,CAAA;KAAAV,gBACrBb,qBAAmB;MAACoD,OAAK;MAACC,YAAU;MAAOhB,MAAI;MAAA,IAAAhB,WAAA;AAAA,cAAA;QAAAR,gBAC7CZ,aAAW;SAACqD,WAAW1D,IAAI;SAA2B,IAAAyB,WAAA;AAAA,iBACpDzB,IAAI,eACH2B,SAASgC,YAAYC,UACjB,IAAIjC,SAASgC,YAAYC,QAAO,KAChC,QAAO;;;SAET,CAAA;QAAA3C,gBAELX,SAAO,EAAA,CAAA;QACPmB;QAAQP,gBAAA,OAAA,EAAA,CAAA;QAAA;;MAAA,CAAA;KAAAA,gBAAA,OAAA,EAAA,CAAA;KAAAA,gBAAA,OAAA,EAAA,CAAA;KAAAA,gBAAA,OAAA,EAAA,CAAA;KAAAD,gBAMVd,MAAI;MAAA,IAACkD,OAAI;AAAA,cAAEC,QAAQhC,QAAQ;;MAAA,IAAEuC,WAAQ;AAAA,cAAA5C,gBAAGD,gBAAc,EAAA,CAAA;;MAAAS,UACpDH;MAAO,CAAA;KAAAJ,gBAAA,OAAA,EAAA,CAAA;KAAA;;GAAA,CAAA,CAAA;EAIb,CAAA"}
@@ -6,6 +6,7 @@ const require_components_virtual_command_entry = require('./virtual-command-entr
6
6
  let __alloy_js_core_jsx_runtime = require("@alloy-js/core/jsx-runtime");
7
7
  let __alloy_js_core = require("@alloy-js/core");
8
8
  let __alloy_js_typescript = require("@alloy-js/typescript");
9
+ let __powerlines_plugin_alloy_core_components_spacing = require("@powerlines/plugin-alloy/core/components/spacing");
9
10
  let __powerlines_plugin_alloy_core_contexts_context = require("@powerlines/plugin-alloy/core/contexts/context");
10
11
  let __shell_shock_core_plugin_utils_context_helpers = require("@shell-shock/core/plugin-utils/context-helpers");
11
12
  let __powerlines_plugin_alloy_typescript_components_entry_file = require("@powerlines/plugin-alloy/typescript/components/entry-file");
@@ -32,11 +33,10 @@ function CommandInvocation(props) {
32
33
  return __alloy_js_core.code`{ path: \`${command.segments.map((segment) => (0, __shell_shock_core_plugin_utils_context_helpers.isDynamicPathSegment)(segment) ? `\${${(0, __stryke_string_format_camel_case.camelCase)((0, __shell_shock_core_plugin_utils_context_helpers.getDynamicPathSegmentName)(segment))}}` : segment).join("/")}\`, segments: [${command.segments.map((segment) => (0, __shell_shock_core_plugin_utils_context_helpers.isDynamicPathSegment)(segment) ? (0, __stryke_string_format_camel_case.camelCase)((0, __shell_shock_core_plugin_utils_context_helpers.getDynamicPathSegmentName)(segment)) : `"${segment}"`).join(", ")}] }`;
33
34
  }
34
35
  }),
35
- (0, __alloy_js_core_jsx_runtime.createIntrinsic)("hbr", {}),
36
- (0, __alloy_js_core_jsx_runtime.createIntrinsic)("hbr", {}),
36
+ (0, __alloy_js_core_jsx_runtime.createComponent)(__powerlines_plugin_alloy_core_components_spacing.Spacing, {}),
37
37
  (0, __alloy_js_core_jsx_runtime.memo)(() => __alloy_js_core.code`
38
38
 
39
- internal_commandContext.run(__context, () => {
39
+ return internal_commandContext.run(__context, () => {
40
40
  return Promise.resolve(Reflect.apply(handle${(0, __stryke_string_format_pascal_case.pascalCase)(command.name)}, __context, [options${command.arguments.length > 0 ? `, ${command.arguments.map((argument) => (0, __stryke_string_format_camel_case.camelCase)(argument.name)).join(", ")}` : ""}]));
41
41
  });
42
42
 
@@ -48,12 +48,11 @@ function CommandInvocation(props) {
48
48
  * A component that generates the `handler` function declaration for a command.
49
49
  */
50
50
  function CommandHandlerDeclaration(props) {
51
- const { command, children } = props;
51
+ const { command, banner, children } = props;
52
52
  const context = (0, __powerlines_plugin_alloy_core_contexts_context.usePowerlines)();
53
53
  return [
54
54
  (0, __alloy_js_core_jsx_runtime.createComponent)(__shell_shock_core_components_options_parser_logic.OptionsInterfaceDeclaration, { command }),
55
- (0, __alloy_js_core_jsx_runtime.createIntrinsic)("hbr", {}),
56
- (0, __alloy_js_core_jsx_runtime.createIntrinsic)("hbr", {}),
55
+ (0, __alloy_js_core_jsx_runtime.createComponent)(__powerlines_plugin_alloy_core_components_spacing.Spacing, {}),
57
56
  (0, __alloy_js_core_jsx_runtime.createComponent)(__powerlines_plugin_alloy_typescript_components_tsdoc.TSDoc, {
58
57
  get heading() {
59
58
  return `The ${command.title} (${(0, __shell_shock_core_plugin_utils_context_helpers.getAppBin)(context)} ${command.segments.map((segment) => (0, __shell_shock_core_plugin_utils_context_helpers.isDynamicPathSegment)(segment) ? `[${(0, __stryke_string_format_constant_case.constantCase)((0, __shell_shock_core_plugin_utils_context_helpers.getDynamicPathSegmentName)(segment))}]` : segment).join(" ")}) command.`;
@@ -96,8 +95,12 @@ function CommandHandlerDeclaration(props) {
96
95
  }),
97
96
  (0, __alloy_js_core_jsx_runtime.createIntrinsic)("hbr", {}),
98
97
  (0, __alloy_js_core_jsx_runtime.createIntrinsic)("hbr", {}),
99
- __alloy_js_core.code`writeLine("");
100
- banner(); `,
98
+ (0, __alloy_js_core_jsx_runtime.createComponent)(__alloy_js_core.Show, {
99
+ get when() {
100
+ return Boolean(banner);
101
+ },
102
+ children: banner
103
+ }),
101
104
  (0, __alloy_js_core_jsx_runtime.createIntrinsic)("hbr", {}),
102
105
  (0, __alloy_js_core_jsx_runtime.createIntrinsic)("hbr", {}),
103
106
  (0, __alloy_js_core_jsx_runtime.createComponent)(__alloy_js_typescript.IfStatement, {
@@ -105,11 +108,8 @@ function CommandHandlerDeclaration(props) {
105
108
  return (0, __alloy_js_core_jsx_runtime.createComponent)(require_components_helpers.IsDebug, {});
106
109
  },
107
110
  get children() {
108
- return __alloy_js_core.code`
109
- writeLine("");
111
+ return __alloy_js_core.code`writeLine("");
110
112
  writeLine(colors.text.body.tertiary("Debug mode is enabled. Additional debug information may be logged to the console."));
111
-
112
- writeLine("");
113
113
  debug(\`Command path: ${command.segments.map((segment) => (0, __shell_shock_core_plugin_utils_context_helpers.isDynamicPathSegment)(segment) ? `\${${(0, __stryke_string_format_camel_case.camelCase)((0, __shell_shock_core_plugin_utils_context_helpers.getDynamicPathSegmentName)(segment))}}` : segment).join(" / ")} \\n\\nOptions: \\n${Object.values(command.options).map((option) => ` - ${(0, __stryke_string_format_kebab_case.kebabCase)(option.name)}: \${options.${(0, __stryke_string_format_camel_case.camelCase)(option.name)} === undefined ? "" : JSON.stringify(options.${(0, __stryke_string_format_camel_case.camelCase)(option.name)})}`).join("\\n")}${command.arguments.length > 0 ? ` \\n\\nArguments: \\n${command.arguments.map((argument) => ` - ${(0, __stryke_string_format_kebab_case.kebabCase)(argument.name)}: \${${(0, __stryke_string_format_camel_case.camelCase)(argument.name)} === undefined ? "" : JSON.stringify(${(0, __stryke_string_format_camel_case.camelCase)(argument.name)})}`).join("\\n")}` : ""}\`);
114
114
  writeLine(""); `;
115
115
  }
@@ -211,8 +211,7 @@ function CommandValidationLogic(props) {
211
211
  }
212
212
  })]
213
213
  }),
214
- (0, __alloy_js_core_jsx_runtime.createIntrinsic)("hbr", {}),
215
- (0, __alloy_js_core_jsx_runtime.createIntrinsic)("hbr", {}),
214
+ (0, __alloy_js_core_jsx_runtime.createComponent)(__powerlines_plugin_alloy_core_components_spacing.Spacing, {}),
216
215
  (0, __alloy_js_core_jsx_runtime.createComponent)(__alloy_js_core.For, {
217
216
  get each() {
218
217
  return command.arguments;
@@ -344,6 +343,7 @@ function CommandEntry(props) {
344
343
  (0, __alloy_js_core_jsx_runtime.createIntrinsic)("hbr", {}),
345
344
  (0, __alloy_js_core_jsx_runtime.createComponent)(CommandHandlerDeclaration, {
346
345
  command,
346
+ banner: __alloy_js_core.code`banner(); `,
347
347
  get children() {
348
348
  return (0, __alloy_js_core_jsx_runtime.createComponent)(CommandValidationLogic, { command });
349
349
  }
@@ -1 +1 @@
1
- {"version":3,"file":"command-entry.cjs","names":["code","computed","For","Show","ElseClause","ElseIfClause","FunctionDeclaration","IfStatement","VarDeclaration","ReflectionKind","usePowerlines","EntryFile","TSDoc","TSDocParam","TSDocRemarks","TSDocTitle","CommandParserLogic","OptionsInterfaceDeclaration","getAppBin","getDynamicPathSegmentName","isDynamicPathSegment","findFilePath","relativePath","joinPaths","replaceExtension","camelCase","constantCase","kebabCase","pascalCase","defu","BannerFunctionDeclaration","CommandHelp","IsDebug","VirtualCommandEntry","CommandInvocation","props","command","_$createComponent","name","initializer","segments","map","segment","join","_$createIntrinsic","_$memo","arguments","length","argument","CommandHandlerDeclaration","children","context","heading","title","description","replace","async","parameters","type","default","envPrefix","config","isCaseSensitive","condition","Object","values","options","option","CommandValidationLogic","each","doubleHardline","when","optional","includes","kind","string","number","variadic","fallback","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 { ReflectionKind } from \"@powerlines/deepkit/vendor/type\";\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 {\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/context-helpers\";\nimport type {\n CommandTree,\n NumberCommandArgument,\n NumberCommandOption\n} from \"@shell-shock/core/types/command\";\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 { IsDebug } from \"./helpers\";\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 <hbr />\n <hbr />\n {code`\n\n internal_commandContext.run(__context, () => {\n return Promise.resolve(Reflect.apply(handle${pascalCase(\n command.name\n )}, __context, [options${\n command.arguments.length > 0\n ? `, ${command.arguments\n .map(argument => camelCase(argument.name))\n .join(\", \")}`\n : \"\"\n }]));\n });\n\n `}\n <hbr />\n </>\n );\n}\n\nexport interface CommandHandlerDeclarationProps {\n command: CommandTree;\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, children } = props;\n\n const context = usePowerlines<ScriptPresetContext>();\n\n return (\n <>\n <OptionsInterfaceDeclaration command={command} />\n <hbr />\n <hbr />\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 envPrefix={context.config.envPrefix}\n isCaseSensitive={context.config.isCaseSensitive}\n />\n <hbr />\n <hbr />\n {code`writeLine(\"\");\n banner(); `}\n <hbr />\n <hbr />\n <IfStatement condition={<IsDebug />}>\n {code`\n writeLine(\"\");\n writeLine(colors.text.body.tertiary(\"Debug mode is enabled. Additional debug information may be logged to the console.\"));\n\n writeLine(\"\");\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.arguments.length > 0\n ? ` \\\\n\\\\nArguments: \\\\n${command.arguments\n .map(\n argument =>\n ` - ${kebabCase(argument.name)}: \\${${camelCase(\n argument.name\n )} === undefined ? \"\" : JSON.stringify(${camelCase(\n argument.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 === 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`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 === ReflectionKind.number}>\n <Show\n when={(option as NumberCommandOption).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 <hbr />\n <hbr />\n <For each={command.arguments} 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 === ReflectionKind.string ||\n argument.kind === ReflectionKind.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 === ReflectionKind.number}>\n <Show\n when={(argument as NumberCommandArgument).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 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}>\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":["code","computed","For","Show","ElseClause","ElseIfClause","FunctionDeclaration","IfStatement","VarDeclaration","ReflectionKind","Spacing","usePowerlines","EntryFile","TSDoc","TSDocParam","TSDocRemarks","TSDocTitle","CommandParserLogic","OptionsInterfaceDeclaration","getAppBin","getDynamicPathSegmentName","isDynamicPathSegment","findFilePath","relativePath","joinPaths","replaceExtension","camelCase","constantCase","kebabCase","pascalCase","defu","BannerFunctionDeclaration","CommandHelp","IsDebug","VirtualCommandEntry","CommandInvocation","props","command","_$createComponent","name","initializer","segments","map","segment","join","_$memo","arguments","length","argument","_$createIntrinsic","CommandHandlerDeclaration","banner","children","context","heading","title","description","replace","async","parameters","type","default","envPrefix","config","isCaseSensitive","when","Boolean","condition","Object","values","options","option","CommandValidationLogic","each","doubleHardline","optional","includes","kind","string","number","variadic","fallback","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 { 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 {\n TSDoc,\n TSDocParam,\n TSDocRemarks,\n TSDocTitle\n} from \"@powerlines/plugin-alloy/typescript/components/tsdoc\";\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/context-helpers\";\nimport type {\n CommandTree,\n NumberCommandArgument,\n NumberCommandOption\n} from \"@shell-shock/core/types/command\";\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 { IsDebug } from \"./helpers\";\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.arguments.length > 0\n ? `, ${command.arguments\n .map(argument => camelCase(argument.name))\n .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 envPrefix={context.config.envPrefix}\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.arguments.length > 0\n ? ` \\\\n\\\\nArguments: \\\\n${command.arguments\n .map(\n argument =>\n ` - ${kebabCase(argument.name)}: \\${${camelCase(\n argument.name\n )} === undefined ? \"\" : JSON.stringify(${camelCase(\n argument.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 === 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`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 === ReflectionKind.number}>\n <Show\n when={(option as NumberCommandOption).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.arguments} 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 === ReflectionKind.string ||\n argument.kind === ReflectionKind.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 === ReflectionKind.number}>\n <Show\n when={(argument as NumberCommandArgument).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\n extends Omit<EntryFileProps, \"path\" | \"typeDefinition\"> {\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]: `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":";;;;;;;;;;;;;;;;;;;;;;;;;;AAkEA,SAAgBmC,kBAAkBC,OAAiC;CACjE,MAAM,EAAEC,YAAYD;AAEpB,QAAA;mDAEK5B,sCAAc;GACb+B,MAAI;GAAA,IACJC,cAAW;AAAA,WAAExC,oBAAI,aAAaqC,QAAQI,SACnCC,KAAIC,sFACkBA,QAAQ,GACzB,sIAA0CA,QAAQ,CAAC,CAAA,KACnDA,QACL,CACAC,KAAK,IAAI,CAAA,iBAAkBP,QAAQI,SACnCC,KAAIC,sFACkBA,QAAQ,mIACWA,QAAQ,CAAC,GAC7C,IAAIA,QAAO,GAChB,CACAC,KAAK,KAAK,CAAA;;GAAK,CAAA;mDAEnBlC,2DAAO,EAAA,CAAA;8CACPV,oBAAI;;;wGAIDqC,QAAQE,KACT,CAAA,uBACCF,QAAQS,UAAUC,SAAS,IACvB,KAAKV,QAAQS,UACVJ,KAAIM,8DAAsBA,SAAST,KAAK,CAAC,CACzCK,KAAK,KAAK,KACb,GAAE;;;QAIT;mDAAA,OAAA,EAAA,CAAA;EAAA;;;;;AAeP,SAAgBM,0BACdd,OACA;CACA,MAAM,EAAEC,SAASc,QAAQC,aAAahB;CAEtC,MAAMiB,8EAA8C;AAEpD,QAAA;mDAEKnC,gFAA2B,EAAUmB,SAAO,CAAA;mDAC5C3B,2DAAO,EAAA,CAAA;mDACPG,6DAAK;GAAA,IACJyC,UAAO;AAAA,WAAE,OAAOjB,QAAQkB,MAAK,mEAAeF,QAAQ,CAAA,GAAIhB,QAAQI,SAC7DC,KAAIC,sFACkBA,QAAQ,GACzB,0IAA2CA,QAAQ,CAAC,CAAA,KACpDA,QACL,CACAC,KAAK,IAAI,CAAA;;GAAY,IAAAQ,WAAA;AAAA,WAAA;sDACvBrC,oEAAY,EAAA,IAAAqC,WAAA;AAAA,aAAE,GAAGf,QAAQmB,YAAYC,QAAQ,QAAQ,GAAG,CAAA;QAAG,CAAA;sDAAA,OAAA,EAAA,CAAA;sDAE3DzC,kEAAU,EAAA,IAAAoC,WAAA;AAAA,aAAEf,QAAQkB;QAAK,CAAA;sDACzBzC,kEAAU;MAACyB,MAAI;MAAAa,UAAS;MAAmD,CAAA;KAAA;;GAAA,CAAA;mDAE7E9C,2CAAmB;GAAA,UAAA;GAElBoD,OAAK;GACLnB,MAAI;GACJoB,YAAY,CAAC;IAAEpB,MAAM;IAAQqB,MAAM;IAAYC,SAAS;IAAa,CAAC;GAAA,IAAAT,WAAA;AAAA,WAAA;sDACrEnC,uEAAkB;MACRoB;MAAO,IAChByB,YAAS;AAAA,cAAET,QAAQU,OAAOD;;MAAS,IACnCE,kBAAe;AAAA,cAAEX,QAAQU,OAAOC;;MAAe,CAAA;sDAAA,OAAA,EAAA,CAAA;sDAAA,OAAA,EAAA,CAAA;sDAIhD7D,sBAAI;MAAA,IAAC8D,OAAI;AAAA,cAAEC,QAAQf,OAAO;;MAAAC,UAAGD;MAAM,CAAA;sDAAA,OAAA,EAAA,CAAA;sDAAA,OAAA,EAAA,CAAA;sDAGnC5C,mCAAW;MAAA,IAAC4D,YAAS;AAAA,+DAAGlC,oCAAO,EAAA,CAAA;;MAAA,IAAAmB,WAAA;AAAA,cAC7BpD,oBAAI;;kCAEmBqC,QAAQI,SAC7BC,KAAIC,sFACkBA,QAAQ,GACzB,sIAA0CA,QAAQ,CAAC,CAAA,KACnDA,QACL,CACAC,KAAK,MAAM,CAAA,qBAAsBwB,OAAOC,OAAOhC,QAAQiC,QAAQ,CAC/D5B,KACC6B,WACE,uDAAgBA,OAAOhC,KAAK,CAAA,gEAC1BgC,OAAOhC,KACR,CAAA,gGACCgC,OAAOhC,KACR,CAAA,IACJ,CACAK,KAAK,MAAM,GACZP,QAAQS,UAAUC,SAAS,IACvB,wBAAwBV,QAAQS,UAC7BJ,KACCM,aACE,uDAAgBA,SAAST,KAAK,CAAA,wDAC5BS,SAAST,KACV,CAAA,wFACCS,SAAST,KACV,CAAA,IACJ,CACAK,KAAK,MAAM,KACd,GAAE;;;MAEQ,CAAA;sDAAA,OAAA,EAAA,CAAA;sDAAA,OAAA,EAAA,CAAA;KAIjBQ;sDAAQ,OAAA,EAAA,CAAA;sDAAA,OAAA,EAAA,CAAA;sDAGR7C,mCAAW;MAAC4D,WAAWnE,oBAAI;MAAc,IAAAoD,WAAA;AAAA,+DACvCpB,qCAAW,EAAUK,SAAO,CAAA;;MAAA,CAAA;sDAE9BjC,kCAAU,EAAA,IAAAgD,WAAA;AAAA,aAAA,kDAAA,OAAA,EAAA,CAAA,mDAERjB,mBAAiB,EAAUE,SAAO,CAAA,CAAA;QAAA,CAAA;KAAA;;GAAA,CAAA;EAAA;;;;;AAc7C,SAAgBmC,uBAAuBpC,OAAoC;CACzE,MAAM,EAAEC,YAAYD;AAEpB,QAAA;mDAEK5B,sCAAc;GAAC+B,MAAI;GAAYqB,MAAI;GAAYpB,aAAaxC,oBAAI;GAAK,CAAA;mDAAA,OAAA,EAAA,CAAA;mDAErEE,qBAAG;GAAA,IAACuE,OAAI;AAAA,WAAEL,OAAOC,OAAOhC,QAAQiC,WAAW,EAAE,CAAC;;GAAEI,gBAAc;GAAAtB,WAC5DmB,WAAM,kDAEFpE,sBAAI;IAAA,IAAC8D,OAAI;AAAA,YAAE,CAACM,OAAOI;;IAAQ,IAAAvB,WAAA;AAAA,YAAA,kDACzB7C,mCAAW;MAAA,IACV4D,YAAS;AAAA,cAAEnE,oBAAI,WACbuE,OAAOhC,KAAKqC,SAAS,IAAI,GACrB,KAAKL,OAAOhC,KAAI,MAChB,qDAAcgC,OAAOhC,KAAK;;MAC9B,IAAAa,WAAA;AAAA,cACDpD,oBAAI,sCAAsCuE,OAAOhC,KAAI;;MAAe,CAAA,mDAEtEpC,sBAAI;MAAA,IACH8D,OAAI;AAAA,eACDM,OAAOM,SAASpE,gDAAeqE,UAC9BP,OAAOM,SAASpE,gDAAesE,WACjCR,OAAOS;;MAAQ,IAAA5B,WAAA;AAAA,+DAEhB/C,oCAAY;QAAA,IACX8D,YAAS;AAAA,gBAAEnE,oBAAI,UACbuE,OAAOhC,KAAKqC,SAAS,IAAI,GACrB,KAAKL,OAAOhC,KAAI,MAChB,qDAAcgC,OAAOhC,KAAK,GAAE;;QACnB,IAAAa,WAAA;AAAA,gBACdpD,oBAAI,6DACHuE,OAAOhC,KAAI;;QACQ,CAAA;;MAAA,CAAA,CAAA;;IAAA,CAAA,mDAI1BpC,sBAAI;IAAA,IAAC8D,OAAI;AAAA,YAAEM,OAAOM,SAASpE,gDAAesE;;IAAM,IAAA3B,WAAA;AAAA,6DAC9CjD,sBAAI;MAAA,IACH8D,OAAI;AAAA,cAAGM,OAA+BS;;MAAQ,IAC9CC,WAAQ;AAAA,+DACL1E,mCAAW;QAAA,IACV4D,YAAS;AAAA,gBAAEnE,oBAAI,UACbuE,OAAOhC,KAAKqC,SAAS,IAAI,GACrB,KAAKL,OAAOhC,KAAI,MAChB,qDAAcgC,OAAOhC,KAAK,GAAE,0BAEhCgC,OAAOhC,KAAKqC,SAAS,IAAI,GACrB,KAAKL,OAAOhC,KAAI,MAChB,qDAAcgC,OAAOhC,KAAK,GAAE;;QAC/B,IAAAa,WAAA;AAAA,gBACFpD,oBAAI,4DACHuE,OAAOhC,KAAI;;QACE,CAAA;;MAAA,IAAAa,WAAA;AAAA,+DAGlB7C,mCAAW;QAAA,IACV4D,YAAS;AAAA,gBAAEnE,oBAAI,UACbuE,OAAOhC,KAAKqC,SAAS,IAAI,GACrB,KAAKL,OAAOhC,KAAI,MAChB,qDAAcgC,OAAOhC,KAAK,GAAE;;QACG,IAAAa,WAAA;AAAA,gBACpCpD,oBAAI,2DACHuE,OAAOhC,KAAI;;QACQ,CAAA;;MAAA,CAAA;;IAAA,CAAA,CAAA;GAK9B,CAAA;mDAEF7B,2DAAO,EAAA,CAAA;mDACPR,qBAAG;GAAA,IAACuE,OAAI;AAAA,WAAEpC,QAAQS;;GAAW4B,gBAAc;GAAAtB,WACzCJ,aAAQ,kDAEJ7C,sBAAI;IAAA,IAAC8D,OAAI;AAAA,YAAE,CAACjB,SAAS2B;;IAAQ,IAAAvB,WAAA;AAAA,YAAA,kDAC3B7C,mCAAW;MAAA,IAAC4D,YAAS;AAAA,cAAEnE,oBAAI,qDAAcgD,SAAST,KAAK;;MAAE,IAAAa,WAAA;AAAA,cACvDpD,oBAAI,sCACHgD,SAAST,KAAI;;MACa,CAAA,mDAE7BpC,sBAAI;MAAA,IACH8D,OAAI;AAAA,eACDjB,SAAS6B,SAASpE,gDAAeqE,UAChC9B,SAAS6B,SAASpE,gDAAesE,WACnC/B,SAASgC;;MAAQ,IAAA5B,WAAA;AAAA,+DAElB/C,oCAAY;QAAA,IACX8D,YAAS;AAAA,gBAAEnE,oBAAI,oDAAagD,SAAST,KAAK,CAAA;;QAAe,IAAAa,WAAA;AAAA,gBACxDpD,oBAAI,6DACHgD,SAAST,KAAI;;QACmB,CAAA;;MAAA,CAAA,CAAA;;IAAA,CAAA,mDAIvCpC,sBAAI;IAAA,IAAC8D,OAAI;AAAA,YAAEjB,SAAS6B,SAASpE,gDAAesE;;IAAM,IAAA3B,WAAA;AAAA,6DAChDjD,sBAAI;MAAA,IACH8D,OAAI;AAAA,cAAGjB,SAAmCgC;;MAAQ,IAClDC,WAAQ;AAAA,+DACL1E,mCAAW;QAAA,IACV4D,YAAS;AAAA,gBAAEnE,oBAAI,oDACbgD,SAAST,KACV,CAAA,oEAA8BS,SAAST,KAAK,CAAA;;QAAG,IAAAa,WAAA;AAAA,gBAC/CpD,oBAAI,4DACHgD,SAAST,KAAI;;QACa,CAAA;;MAAA,IAAAa,WAAA;AAAA,+DAG/B7C,mCAAW;QAAA,IACV4D,YAAS;AAAA,gBAAEnE,oBAAI,oDAAagD,SAAST,KAAK,CAAA;;QAAqC,IAAAa,WAAA;AAAA,gBAC9EpD,oBAAI,2DACHgD,SAAST,KAAI;;QACmB,CAAA;;MAAA,CAAA;;IAAA,CAAA,CAAA;GAK3C,CAAA;mDAEFhC,mCAAW;GAAC4D,WAAWnE,oBAAI;GAAqBoD,UAC9CpD,oBAAI;;GACiB,CAAA;EAAA;;;;;AAc9B,SAAgBkF,aAAa9C,OAA0B;CACrD,MAAM,EAAEC,SAAS8C,SAASC,gBAAgB,GAAGC,SAASjD;CAEtD,MAAMiB,8EAA8C;CACpD,MAAMiC,iFAEFjD,QAAQI,SACL8C,QAAO5C,YAAW,2EAAsBA,QAAQ,CAAC,CACjDC,KAAK,IAAI,EACZ,WAEJ,CAAC;CACD,MAAM4C,2KAGUnC,QAAQoC,gDAAwBH,SAASI,MAAM,CAAC,EAC1DrD,QAAQsD,MAAMC,OAAOC,QAAQxD,QAAQsD,MAAME,KAE/C,CACF,CAAC;CACD,MAAMC,sDAAiC;EACrC,GAAGzD,QAAQsD;EACXI,QAAQ1D,QAAQ2D;EACjB,EAAE;AAEH,QAAA,kDAEKpF,kHACKyE,MAAI;EAAA,IACRa,OAAI;AAAA,UAAEZ,SAASI;;EAAK,IACpBI,iBAAc;AAAA,UAAEA,eAAeJ;;EAAK,IACpCP,UAAO;AAAA,4BAAOA,WAAW,EAAE,EAAE,GAC1BK,kBAAkBE,QAAQ,4DAAoBrD,QAAQE,KAAK,IAC7D,CAAC;;EAAA,IACF6C,iBAAc;AAAA,4BAAOA,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,IAAAjD,WAAA;AAAA,UAAA;qDACDrB,0EAAyB,EAAUM,SAAO,CAAA;qDAAA,OAAA,EAAA,CAAA;qDAAA,OAAA,EAAA,CAAA;qDAG1CnB,gFAA2B,EAAUmB,SAAO,CAAA;qDAAA,OAAA,EAAA,CAAA;qDAAA,OAAA,EAAA,CAAA;qDAG5Ca,2BAAyB;KAAUb;KAASc,QAAQnD,oBAAI;KAAY,IAAAoD,WAAA;AAAA,8DAClEoB,wBAAsB,EAAUnC,SAAO,CAAA;;KAAA,CAAA;IAAA;;EAAA,CAAA,CAAA,mDAG3CnC,qBAAG;EAAA,IAACuE,OAAI;AAAA,UAAEL,OAAOC,OAAOhC,QAAQe,SAAS;;EAAAA,WACvCkD,2DACEnG,sBAAI;GAAA,IACH8D,OAAI;AAAA,WAAEqC,MAAMC;;GAAS,IACrBtB,WAAQ;AAAA,4DAAGC,cAAY,EAAC7C,SAASiE,OAAK,CAAA;;GAAA,IAAAlD,WAAA;AAAA,4DACrClB,8DAAmB,EAACG,SAASiE,OAAK,CAAA;;GAAA,CAAA;EAEtC,CAAA,CAAA"}
@@ -8,6 +8,7 @@ declare function CommandInvocation(props: {
8
8
  }): Children;
9
9
  interface CommandHandlerDeclarationProps {
10
10
  command: CommandTree;
11
+ banner?: Children;
11
12
  children?: Children;
12
13
  }
13
14
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"command-entry.d.cts","names":[],"sources":["../../src/components/command-entry.tsx"],"sourcesContent":[],"mappings":";;;;;iBAiEgB,iBAAA;WAAoC;AAApD,CAAA,CAAA,EAAiE,QAAjD;AA2CC,UAAA,8BAAA,CAA8B;EAQ/B,OAAA,EAPL,WAOK;EA+FC,QAAA,CAAA,EArGJ,QAqGI;AAOjB;AAgIA;;;AAA2C,iBAtO3B,yBAAA,CAsO2B,KAAA,EArOlC,8BAqOkC,CAAA,EArOJ,QAqOI;AAAI,UAvI9B,2BAAA,CAuI8B;EAU/B,OAAA,EAhJL,WAgJiB;;;;;iBA1IZ,sBAAA,QAA8B,8BAA2B;UAgIxD,iBAAA,SAA0B,KACzC;WAGS;;;;;iBAMK,YAAA,QAAoB,oBAAiB"}
1
+ {"version":3,"file":"command-entry.d.cts","names":[],"sources":["../../src/components/command-entry.tsx"],"sourcesContent":[],"mappings":";;;;;iBAkEgB,iBAAA;WAAoC;AAApD,CAAA,CAAA,EAAiE,QAAjD;AA0CC,UAAA,8BAAA,CAA8B;EACpC,OAAA,EAAA,WAAA;EACA,MAAA,CAAA,EAAA,QAAA;EACE,QAAA,CAAA,EAAA,QAAA;;AAMb;AA0FA;AAOA;AA+HiB,iBAhOD,yBAAA,CAiOd,KAAA,EAhOO,8BAgOP,CAAA,EAhOqC,QAgOrC;AAAa,UAvIE,2BAAA,CAuIF;EACJ,OAAA,EAvIA,WAuIA;;;AAMX;;iBAvIgB,sBAAA,QAA8B,8BAA2B;UA+HxD,iBAAA,SACP,KAAK;WACJ;;;;;iBAMK,YAAA,QAAoB,oBAAiB"}
@@ -8,6 +8,7 @@ declare function CommandInvocation(props: {
8
8
  }): Children;
9
9
  interface CommandHandlerDeclarationProps {
10
10
  command: CommandTree;
11
+ banner?: Children;
11
12
  children?: Children;
12
13
  }
13
14
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"command-entry.d.mts","names":[],"sources":["../../src/components/command-entry.tsx"],"sourcesContent":[],"mappings":";;;;;iBAiEgB,iBAAA;WAAoC;AAApD,CAAA,CAAA,EAAiE,QAAjD;AA2CC,UAAA,8BAAA,CAA8B;EAQ/B,OAAA,EAPL,WAOK;EA+FC,QAAA,CAAA,EArGJ,QAqGI;AAOjB;AAgIA;;;AAA2C,iBAtO3B,yBAAA,CAsO2B,KAAA,EArOlC,8BAqOkC,CAAA,EArOJ,QAqOI;AAAI,UAvI9B,2BAAA,CAuI8B;EAU/B,OAAA,EAhJL,WAgJiB;;;;;iBA1IZ,sBAAA,QAA8B,8BAA2B;UAgIxD,iBAAA,SAA0B,KACzC;WAGS;;;;;iBAMK,YAAA,QAAoB,oBAAiB"}
1
+ {"version":3,"file":"command-entry.d.mts","names":[],"sources":["../../src/components/command-entry.tsx"],"sourcesContent":[],"mappings":";;;;;iBAkEgB,iBAAA;WAAoC;AAApD,CAAA,CAAA,EAAiE,QAAjD;AA0CC,UAAA,8BAAA,CAA8B;EACpC,OAAA,EAAA,WAAA;EACA,MAAA,CAAA,EAAA,QAAA;EACE,QAAA,CAAA,EAAA,QAAA;;AAMb;AA0FA;AAOA;AA+HiB,iBAhOD,yBAAA,CAiOd,KAAA,EAhOO,8BAgOP,CAAA,EAhOqC,QAgOrC;AAAa,UAvIE,2BAAA,CAuIF;EACJ,OAAA,EAvIA,WAuIA;;;AAMX;;iBAvIgB,sBAAA,QAA8B,8BAA2B;UA+HxD,iBAAA,SACP,KAAK;WACJ;;;;;iBAMK,YAAA,QAAoB,oBAAiB"}
@@ -5,6 +5,7 @@ import { VirtualCommandEntry } from "./virtual-command-entry.mjs";
5
5
  import { createComponent, createIntrinsic, memo, mergeProps } from "@alloy-js/core/jsx-runtime";
6
6
  import { For, Show, code, computed } from "@alloy-js/core";
7
7
  import { ElseClause, ElseIfClause, FunctionDeclaration, IfStatement, VarDeclaration } from "@alloy-js/typescript";
8
+ import { Spacing } from "@powerlines/plugin-alloy/core/components/spacing";
8
9
  import { usePowerlines } from "@powerlines/plugin-alloy/core/contexts/context";
9
10
  import { getAppBin, getDynamicPathSegmentName, isDynamicPathSegment } from "@shell-shock/core/plugin-utils/context-helpers";
10
11
  import { EntryFile } from "@powerlines/plugin-alloy/typescript/components/entry-file";
@@ -30,11 +31,10 @@ function CommandInvocation(props) {
30
31
  return code`{ path: \`${command.segments.map((segment) => isDynamicPathSegment(segment) ? `\${${camelCase(getDynamicPathSegmentName(segment))}}` : segment).join("/")}\`, segments: [${command.segments.map((segment) => isDynamicPathSegment(segment) ? camelCase(getDynamicPathSegmentName(segment)) : `"${segment}"`).join(", ")}] }`;
31
32
  }
32
33
  }),
33
- createIntrinsic("hbr", {}),
34
- createIntrinsic("hbr", {}),
34
+ createComponent(Spacing, {}),
35
35
  memo(() => code`
36
36
 
37
- internal_commandContext.run(__context, () => {
37
+ return internal_commandContext.run(__context, () => {
38
38
  return Promise.resolve(Reflect.apply(handle${pascalCase(command.name)}, __context, [options${command.arguments.length > 0 ? `, ${command.arguments.map((argument) => camelCase(argument.name)).join(", ")}` : ""}]));
39
39
  });
40
40
 
@@ -46,12 +46,11 @@ function CommandInvocation(props) {
46
46
  * A component that generates the `handler` function declaration for a command.
47
47
  */
48
48
  function CommandHandlerDeclaration(props) {
49
- const { command, children } = props;
49
+ const { command, banner, children } = props;
50
50
  const context = usePowerlines();
51
51
  return [
52
52
  createComponent(OptionsInterfaceDeclaration, { command }),
53
- createIntrinsic("hbr", {}),
54
- createIntrinsic("hbr", {}),
53
+ createComponent(Spacing, {}),
55
54
  createComponent(TSDoc, {
56
55
  get heading() {
57
56
  return `The ${command.title} (${getAppBin(context)} ${command.segments.map((segment) => isDynamicPathSegment(segment) ? `[${constantCase(getDynamicPathSegmentName(segment))}]` : segment).join(" ")}) command.`;
@@ -94,8 +93,12 @@ function CommandHandlerDeclaration(props) {
94
93
  }),
95
94
  createIntrinsic("hbr", {}),
96
95
  createIntrinsic("hbr", {}),
97
- code`writeLine("");
98
- banner(); `,
96
+ createComponent(Show, {
97
+ get when() {
98
+ return Boolean(banner);
99
+ },
100
+ children: banner
101
+ }),
99
102
  createIntrinsic("hbr", {}),
100
103
  createIntrinsic("hbr", {}),
101
104
  createComponent(IfStatement, {
@@ -103,11 +106,8 @@ function CommandHandlerDeclaration(props) {
103
106
  return createComponent(IsDebug, {});
104
107
  },
105
108
  get children() {
106
- return code`
107
- writeLine("");
109
+ return code`writeLine("");
108
110
  writeLine(colors.text.body.tertiary("Debug mode is enabled. Additional debug information may be logged to the console."));
109
-
110
- writeLine("");
111
111
  debug(\`Command path: ${command.segments.map((segment) => isDynamicPathSegment(segment) ? `\${${camelCase(getDynamicPathSegmentName(segment))}}` : segment).join(" / ")} \\n\\nOptions: \\n${Object.values(command.options).map((option) => ` - ${kebabCase(option.name)}: \${options.${camelCase(option.name)} === undefined ? "" : JSON.stringify(options.${camelCase(option.name)})}`).join("\\n")}${command.arguments.length > 0 ? ` \\n\\nArguments: \\n${command.arguments.map((argument) => ` - ${kebabCase(argument.name)}: \${${camelCase(argument.name)} === undefined ? "" : JSON.stringify(${camelCase(argument.name)})}`).join("\\n")}` : ""}\`);
112
112
  writeLine(""); `;
113
113
  }
@@ -209,8 +209,7 @@ function CommandValidationLogic(props) {
209
209
  }
210
210
  })]
211
211
  }),
212
- createIntrinsic("hbr", {}),
213
- createIntrinsic("hbr", {}),
212
+ createComponent(Spacing, {}),
214
213
  createComponent(For, {
215
214
  get each() {
216
215
  return command.arguments;
@@ -342,6 +341,7 @@ function CommandEntry(props) {
342
341
  createIntrinsic("hbr", {}),
343
342
  createComponent(CommandHandlerDeclaration, {
344
343
  command,
344
+ banner: code`banner(); `,
345
345
  get children() {
346
346
  return createComponent(CommandValidationLogic, { command });
347
347
  }
@@ -1 +1 @@
1
- {"version":3,"file":"command-entry.mjs","names":["code","computed","For","Show","ElseClause","ElseIfClause","FunctionDeclaration","IfStatement","VarDeclaration","ReflectionKind","usePowerlines","EntryFile","TSDoc","TSDocParam","TSDocRemarks","TSDocTitle","CommandParserLogic","OptionsInterfaceDeclaration","getAppBin","getDynamicPathSegmentName","isDynamicPathSegment","findFilePath","relativePath","joinPaths","replaceExtension","camelCase","constantCase","kebabCase","pascalCase","defu","BannerFunctionDeclaration","CommandHelp","IsDebug","VirtualCommandEntry","CommandInvocation","props","command","_$createComponent","name","initializer","segments","map","segment","join","_$createIntrinsic","_$memo","arguments","length","argument","CommandHandlerDeclaration","children","context","heading","title","description","replace","async","parameters","type","default","envPrefix","config","isCaseSensitive","condition","Object","values","options","option","CommandValidationLogic","each","doubleHardline","when","optional","includes","kind","string","number","variadic","fallback","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 { ReflectionKind } from \"@powerlines/deepkit/vendor/type\";\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 {\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/context-helpers\";\nimport type {\n CommandTree,\n NumberCommandArgument,\n NumberCommandOption\n} from \"@shell-shock/core/types/command\";\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 { IsDebug } from \"./helpers\";\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 <hbr />\n <hbr />\n {code`\n\n internal_commandContext.run(__context, () => {\n return Promise.resolve(Reflect.apply(handle${pascalCase(\n command.name\n )}, __context, [options${\n command.arguments.length > 0\n ? `, ${command.arguments\n .map(argument => camelCase(argument.name))\n .join(\", \")}`\n : \"\"\n }]));\n });\n\n `}\n <hbr />\n </>\n );\n}\n\nexport interface CommandHandlerDeclarationProps {\n command: CommandTree;\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, children } = props;\n\n const context = usePowerlines<ScriptPresetContext>();\n\n return (\n <>\n <OptionsInterfaceDeclaration command={command} />\n <hbr />\n <hbr />\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 envPrefix={context.config.envPrefix}\n isCaseSensitive={context.config.isCaseSensitive}\n />\n <hbr />\n <hbr />\n {code`writeLine(\"\");\n banner(); `}\n <hbr />\n <hbr />\n <IfStatement condition={<IsDebug />}>\n {code`\n writeLine(\"\");\n writeLine(colors.text.body.tertiary(\"Debug mode is enabled. Additional debug information may be logged to the console.\"));\n\n writeLine(\"\");\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.arguments.length > 0\n ? ` \\\\n\\\\nArguments: \\\\n${command.arguments\n .map(\n argument =>\n ` - ${kebabCase(argument.name)}: \\${${camelCase(\n argument.name\n )} === undefined ? \"\" : JSON.stringify(${camelCase(\n argument.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 === 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`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 === ReflectionKind.number}>\n <Show\n when={(option as NumberCommandOption).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 <hbr />\n <hbr />\n <For each={command.arguments} 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 === ReflectionKind.string ||\n argument.kind === ReflectionKind.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 === ReflectionKind.number}>\n <Show\n when={(argument as NumberCommandArgument).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 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}>\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.mjs","names":["code","computed","For","Show","ElseClause","ElseIfClause","FunctionDeclaration","IfStatement","VarDeclaration","ReflectionKind","Spacing","usePowerlines","EntryFile","TSDoc","TSDocParam","TSDocRemarks","TSDocTitle","CommandParserLogic","OptionsInterfaceDeclaration","getAppBin","getDynamicPathSegmentName","isDynamicPathSegment","findFilePath","relativePath","joinPaths","replaceExtension","camelCase","constantCase","kebabCase","pascalCase","defu","BannerFunctionDeclaration","CommandHelp","IsDebug","VirtualCommandEntry","CommandInvocation","props","command","_$createComponent","name","initializer","segments","map","segment","join","_$memo","arguments","length","argument","_$createIntrinsic","CommandHandlerDeclaration","banner","children","context","heading","title","description","replace","async","parameters","type","default","envPrefix","config","isCaseSensitive","when","Boolean","condition","Object","values","options","option","CommandValidationLogic","each","doubleHardline","optional","includes","kind","string","number","variadic","fallback","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 { 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 {\n TSDoc,\n TSDocParam,\n TSDocRemarks,\n TSDocTitle\n} from \"@powerlines/plugin-alloy/typescript/components/tsdoc\";\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/context-helpers\";\nimport type {\n CommandTree,\n NumberCommandArgument,\n NumberCommandOption\n} from \"@shell-shock/core/types/command\";\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 { IsDebug } from \"./helpers\";\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.arguments.length > 0\n ? `, ${command.arguments\n .map(argument => camelCase(argument.name))\n .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 envPrefix={context.config.envPrefix}\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.arguments.length > 0\n ? ` \\\\n\\\\nArguments: \\\\n${command.arguments\n .map(\n argument =>\n ` - ${kebabCase(argument.name)}: \\${${camelCase(\n argument.name\n )} === undefined ? \"\" : JSON.stringify(${camelCase(\n argument.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 === 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`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 === ReflectionKind.number}>\n <Show\n when={(option as NumberCommandOption).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.arguments} 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 === ReflectionKind.string ||\n argument.kind === ReflectionKind.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 === ReflectionKind.number}>\n <Show\n when={(argument as NumberCommandArgument).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\n extends Omit<EntryFileProps, \"path\" | \"typeDefinition\"> {\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]: `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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"}
@@ -2,6 +2,7 @@ const require_rolldown_runtime = require('../_virtual/rolldown_runtime.cjs');
2
2
  let __alloy_js_core_jsx_runtime = require("@alloy-js/core/jsx-runtime");
3
3
  let __alloy_js_core = require("@alloy-js/core");
4
4
  let __alloy_js_typescript = require("@alloy-js/typescript");
5
+ let __powerlines_plugin_alloy_core_components_spacing = require("@powerlines/plugin-alloy/core/components/spacing");
5
6
  let __powerlines_plugin_alloy_core_contexts_context = require("@powerlines/plugin-alloy/core/contexts/context");
6
7
  let __shell_shock_core_plugin_utils_context_helpers = require("@shell-shock/core/plugin-utils/context-helpers");
7
8
  let __stryke_string_format_pascal_case = require("@stryke/string-format/pascal-case");
@@ -50,8 +51,7 @@ function CommandRouter(props) {
50
51
  type: "string",
51
52
  initializer: __alloy_js_core.code`"";`
52
53
  }),
53
- (0, __alloy_js_core_jsx_runtime.createIntrinsic)("hbr", {}),
54
- (0, __alloy_js_core_jsx_runtime.createIntrinsic)("hbr", {}),
54
+ (0, __alloy_js_core_jsx_runtime.createComponent)(__powerlines_plugin_alloy_core_components_spacing.Spacing, {}),
55
55
  (0, __alloy_js_core_jsx_runtime.createComponent)(__alloy_js_core.Show, {
56
56
  get when() {
57
57
  return commands && Object.keys(commands).length > 0;
@@ -148,7 +148,7 @@ function CommandRouterBody(props) {
148
148
  caseSensitive: ${JSON.stringify(context.config.isCaseSensitive)},
149
149
  returnType: ReturnTypeEnums.ALL_CLOSEST_MATCHES,
150
150
  thresholdType: ThresholdTypeEnums.SIMILARITY,
151
- threshold: 0.75
151
+ threshold: 0.25
152
152
  });
153
153
  error(\`Unknown command: "\${command}"\${suggestions && suggestions.length > 0 ? \`, did you mean: \${suggestions.length === 1 ? \`"\${suggestions[0]}"\` : suggestions.map((suggestion, i) => i < suggestions.length - 1 ? \`"\${suggestion}", \` : \`or "\${suggestion}"\`)}?\` : ""} \`);`;
154
154
  }