@shell-shock/preset-script 0.1.1 → 0.2.0

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 (134) hide show
  1. package/README.md +1 -1
  2. package/dist/components/args-parser-logic.cjs +678 -0
  3. package/dist/components/args-parser-logic.cjs.map +1 -0
  4. package/dist/components/args-parser-logic.d.cts +45 -0
  5. package/dist/components/args-parser-logic.d.cts.map +1 -0
  6. package/dist/components/args-parser-logic.d.mts +45 -0
  7. package/dist/components/args-parser-logic.d.mts.map +1 -0
  8. package/dist/components/args-parser-logic.mjs +672 -0
  9. package/dist/components/args-parser-logic.mjs.map +1 -0
  10. package/dist/components/bin-entry.cjs +188 -0
  11. package/dist/components/bin-entry.cjs.map +1 -0
  12. package/dist/components/{entry/bin.d.cts → bin-entry.d.cts} +9 -3
  13. package/dist/components/bin-entry.d.cts.map +1 -0
  14. package/dist/components/{entry/bin.d.mts → bin-entry.d.mts} +9 -3
  15. package/dist/components/bin-entry.d.mts.map +1 -0
  16. package/dist/components/bin-entry.mjs +185 -0
  17. package/dist/components/bin-entry.mjs.map +1 -0
  18. package/dist/components/command-entry.cjs +162 -0
  19. package/dist/components/command-entry.cjs.map +1 -0
  20. package/dist/components/command-entry.d.cts +24 -0
  21. package/dist/components/command-entry.d.cts.map +1 -0
  22. package/dist/components/command-entry.d.mts +24 -0
  23. package/dist/components/command-entry.d.mts.map +1 -0
  24. package/dist/components/command-entry.mjs +158 -0
  25. package/dist/components/command-entry.mjs.map +1 -0
  26. package/dist/components/command-router.cjs +129 -74
  27. package/dist/components/command-router.cjs.map +1 -1
  28. package/dist/components/command-router.d.cts +13 -4
  29. package/dist/components/command-router.d.cts.map +1 -0
  30. package/dist/components/command-router.d.mts +13 -4
  31. package/dist/components/command-router.d.mts.map +1 -0
  32. package/dist/components/command-router.mjs +128 -73
  33. package/dist/components/command-router.mjs.map +1 -1
  34. package/dist/components/console-builtin.cjs +2086 -0
  35. package/dist/components/console-builtin.cjs.map +1 -0
  36. package/dist/components/console-builtin.d.cts +56 -0
  37. package/dist/components/console-builtin.d.cts.map +1 -0
  38. package/dist/components/console-builtin.d.mts +56 -0
  39. package/dist/components/console-builtin.d.mts.map +1 -0
  40. package/dist/components/console-builtin.mjs +2077 -0
  41. package/dist/components/console-builtin.mjs.map +1 -0
  42. package/dist/components/help.cjs +130 -0
  43. package/dist/components/help.cjs.map +1 -0
  44. package/dist/components/help.d.cts +57 -0
  45. package/dist/components/help.d.cts.map +1 -0
  46. package/dist/components/help.d.mts +57 -0
  47. package/dist/components/help.d.mts.map +1 -0
  48. package/dist/components/help.mjs +126 -0
  49. package/dist/components/help.mjs.map +1 -0
  50. package/dist/components/index.cjs +39 -15
  51. package/dist/components/index.d.cts +9 -7
  52. package/dist/components/index.d.mts +9 -7
  53. package/dist/components/index.mjs +8 -6
  54. package/dist/components/utils-builtin.cjs +612 -0
  55. package/dist/components/utils-builtin.cjs.map +1 -0
  56. package/dist/components/utils-builtin.d.cts +32 -0
  57. package/dist/components/utils-builtin.d.cts.map +1 -0
  58. package/dist/components/utils-builtin.d.mts +32 -0
  59. package/dist/components/utils-builtin.d.mts.map +1 -0
  60. package/dist/components/utils-builtin.mjs +605 -0
  61. package/dist/components/utils-builtin.mjs.map +1 -0
  62. package/dist/components/virtual-command-entry.cjs +140 -0
  63. package/dist/components/virtual-command-entry.cjs.map +1 -0
  64. package/dist/components/virtual-command-entry.d.cts +21 -0
  65. package/dist/components/virtual-command-entry.d.cts.map +1 -0
  66. package/dist/components/virtual-command-entry.d.mts +21 -0
  67. package/dist/components/virtual-command-entry.d.mts.map +1 -0
  68. package/dist/components/virtual-command-entry.mjs +137 -0
  69. package/dist/components/virtual-command-entry.mjs.map +1 -0
  70. package/dist/contexts/index.cjs +4 -0
  71. package/dist/contexts/index.d.cts +2 -0
  72. package/dist/contexts/index.d.mts +2 -0
  73. package/dist/contexts/index.mjs +3 -0
  74. package/dist/contexts/theme.d.cts +20 -0
  75. package/dist/contexts/theme.d.cts.map +1 -0
  76. package/dist/contexts/theme.d.mts +20 -0
  77. package/dist/contexts/theme.d.mts.map +1 -0
  78. package/dist/helpers/ansi-utils.cjs +28 -4
  79. package/dist/helpers/ansi-utils.cjs.map +1 -1
  80. package/dist/helpers/ansi-utils.d.cts +68 -0
  81. package/dist/helpers/ansi-utils.d.cts.map +1 -0
  82. package/dist/helpers/ansi-utils.d.mts +68 -0
  83. package/dist/helpers/ansi-utils.d.mts.map +1 -0
  84. package/dist/helpers/ansi-utils.mjs +28 -4
  85. package/dist/helpers/ansi-utils.mjs.map +1 -1
  86. package/dist/helpers/get-default-options.cjs +6 -13
  87. package/dist/helpers/get-default-options.cjs.map +1 -1
  88. package/dist/helpers/get-default-options.mjs +6 -13
  89. package/dist/helpers/get-default-options.mjs.map +1 -1
  90. package/dist/index.cjs +117 -29
  91. package/dist/index.cjs.map +1 -1
  92. package/dist/index.d.cts.map +1 -0
  93. package/dist/index.d.mts.map +1 -0
  94. package/dist/index.mjs +118 -28
  95. package/dist/index.mjs.map +1 -1
  96. package/dist/types/plugin.d.cts +1 -6
  97. package/dist/types/plugin.d.cts.map +1 -0
  98. package/dist/types/plugin.d.mts +1 -6
  99. package/dist/types/plugin.d.mts.map +1 -0
  100. package/package.json +163 -71
  101. package/dist/components/builtin/console.cjs +0 -1232
  102. package/dist/components/builtin/console.cjs.map +0 -1
  103. package/dist/components/builtin/console.d.cts +0 -37
  104. package/dist/components/builtin/console.d.mts +0 -37
  105. package/dist/components/builtin/console.mjs +0 -1225
  106. package/dist/components/builtin/console.mjs.map +0 -1
  107. package/dist/components/builtin/index.cjs +0 -9
  108. package/dist/components/builtin/index.d.cts +0 -2
  109. package/dist/components/builtin/index.d.mts +0 -2
  110. package/dist/components/builtin/index.mjs +0 -3
  111. package/dist/components/entry/bin.cjs +0 -92
  112. package/dist/components/entry/bin.cjs.map +0 -1
  113. package/dist/components/entry/bin.mjs +0 -91
  114. package/dist/components/entry/bin.mjs.map +0 -1
  115. package/dist/components/entry/command.cjs +0 -54
  116. package/dist/components/entry/command.cjs.map +0 -1
  117. package/dist/components/entry/command.d.cts +0 -15
  118. package/dist/components/entry/command.d.mts +0 -15
  119. package/dist/components/entry/command.mjs +0 -53
  120. package/dist/components/entry/command.mjs.map +0 -1
  121. package/dist/components/entry/index.cjs +0 -3
  122. package/dist/components/entry/index.d.cts +0 -2
  123. package/dist/components/entry/index.d.mts +0 -2
  124. package/dist/components/entry/index.mjs +0 -3
  125. package/dist/components/shutdown.cjs +0 -93
  126. package/dist/components/shutdown.cjs.map +0 -1
  127. package/dist/components/shutdown.d.cts +0 -14
  128. package/dist/components/shutdown.d.mts +0 -14
  129. package/dist/components/shutdown.mjs +0 -91
  130. package/dist/components/shutdown.mjs.map +0 -1
  131. package/dist/contexts/command.cjs +0 -21
  132. package/dist/contexts/command.cjs.map +0 -1
  133. package/dist/contexts/command.mjs +0 -19
  134. package/dist/contexts/command.mjs.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"args-parser-logic.mjs","names":["code","For","Show","ElseClause","ElseIfClause","IfStatement","InterfaceDeclaration","InterfaceMember","VarDeclaration","ReflectionKind","usePowerlines","getVariableCommandPathName","isVariableCommandPath","camelCase","constantCase","pascalCase","isSetString","VariablePathsParserLogic","props","path","_$createComponent","each","segments","children","segment","index","when","name","type","initializer","variables","default","fallback","_$createIntrinsic","condition","optional","_$memo","ParamsParserLogic","params","context","length","hardline","param","variadic","config","envPrefix","OptionsMember","option","doc","description","title","kind","string","number","boolean","Boolean","isNegativeOf","alias","replace","OptionsMemberParserLogic","equalsRegex","isCaseSensitive","toLowerCase","map","a","join","includes","OptionsMemberParserCondition","OptionsInterfaceDeclaration","command","Object","entries","options","OptionsParserLogic","env","undefined","JSON","stringify","filter","i"],"sources":["../../src/components/args-parser-logic.tsx"],"sourcesContent":["/* -------------------------------------------------------------------\n\n ⚡ Storm Software - Shell Shock\n\n This code was released as part of the Shell Shock project. Shell Shock\n is maintained by Storm Software under the Apache-2.0 license, and is\n free for commercial and private use. For more information, please visit\n our licensing page at https://stormsoftware.com/licenses/projects/shell-shock.\n\n Website: https://stormsoftware.com\n Repository: https://github.com/storm-software/shell-shock\n Documentation: https://docs.stormsoftware.com/projects/shell-shock\n Contact: https://stormsoftware.com/contact\n\n SPDX-License-Identifier: Apache-2.0\n\n ------------------------------------------------------------------- */\n\nimport { code, For, Show } from \"@alloy-js/core\";\nimport {\n ElseClause,\n ElseIfClause,\n IfStatement,\n InterfaceDeclaration,\n InterfaceMember,\n VarDeclaration\n} from \"@alloy-js/typescript\";\nimport { ReflectionKind } from \"@powerlines/deepkit/vendor/type\";\nimport { usePowerlines } from \"@powerlines/plugin-alloy/core/contexts/context\";\n\nimport {\n getVariableCommandPathName,\n isVariableCommandPath\n} from \"@shell-shock/core/plugin-utils/context-helpers\";\nimport type {\n BooleanCommandOption,\n CommandOption,\n CommandParam,\n CommandTree,\n CommandTreePath,\n NumberCommandOption,\n StringCommandOption\n} from \"@shell-shock/core/types/command\";\nimport { camelCase } from \"@stryke/string-format/camel-case\";\nimport { constantCase } from \"@stryke/string-format/constant-case\";\nimport { pascalCase } from \"@stryke/string-format/pascal-case\";\nimport { isSetString } from \"@stryke/type-checks/is-set-string\";\nimport type { ScriptPresetContext } from \"../types/plugin\";\n\nexport function VariablePathsParserLogic(props: { path: CommandTreePath }) {\n const { path } = props;\n\n return (\n <For each={path.segments ?? []}>\n {(segment, index) => (\n <Show when={isVariableCommandPath(segment)}>\n <VarDeclaration\n let\n name={camelCase(getVariableCommandPathName(segment))}\n type=\"string | undefined\"\n initializer={\n <Show\n when={isSetString(\n path.variables[getVariableCommandPathName(segment)]?.default\n )}\n fallback={code`undefined;`}>\n {code` ?? \"${\n path.variables[getVariableCommandPathName(segment)]?.default\n }\";`}\n </Show>\n }\n />\n <hbr />\n <IfStatement\n condition={code`args.length > ${2 + index} && args[${2 + index}]`}>\n {code`${camelCase(getVariableCommandPathName(segment))} = args[${2 + index}];`}\n </IfStatement>\n <hbr />\n <hbr />\n <Show\n when={\n !path.variables[getVariableCommandPathName(segment)]?.optional\n }>\n <IfStatement\n condition={code`!${camelCase(\n getVariableCommandPathName(segment)\n )}`}>\n {code`error(\\`Missing required command path variable: \"${getVariableCommandPathName(\n segment\n )}\".\\`);`}\n {code`return;`}\n </IfStatement>\n </Show>\n <hbr />\n </Show>\n )}\n </For>\n );\n}\n\n/**\n * The command parameter parser logic.\n */\nexport function ParamsParserLogic(props: { params: CommandParam[] }) {\n const { params } = props;\n\n const context = usePowerlines<ScriptPresetContext>();\n\n return (\n <Show when={params && params.length > 0}>\n <For each={params ?? []} hardline>\n {param => (\n <VarDeclaration\n let\n name={camelCase(param.name)}\n type={param.variadic ? \"string[]\" : \"string | undefined\"}\n initializer={\n param.variadic ? (\n code`[]`\n ) : (\n <>\n {code`env.${\n context.config.envPrefix\n }_${constantCase(param.name)} ?? `}\n <Show when={isSetString(param.default)}>\n {code`\"${param.default}\"`}\n </Show>\n {code`undefined;`}\n </>\n )\n }\n />\n )}\n </For>\n <hbr />\n <VarDeclaration\n const\n name={\"argsDiv\"}\n type=\"number\"\n initializer={code` args.findIndex(arg => arg === \"--\");`}\n />\n <hbr />\n <IfStatement condition={code`argsDiv !== -1`}>\n <For each={params ?? []} hardline>\n {(param, index) => (\n <>\n <IfStatement\n condition={code`args.length > argsDiv + ${index + 1} && args[argsDiv + ${index + 1}]`}>\n <Show\n when={param.variadic}\n fallback={code`${camelCase(param.name)} = args[argsDiv + ${index + 1}];`}>{code`${camelCase(param.name)}.push(args[argsDiv + ${index + 1}]);`}</Show>\n </IfStatement>\n <hbr />\n <Show when={!param.optional}>\n <Show\n when={!param.default}\n fallback={\n <ElseClause>\n {code`${camelCase(param.name)} = \"${param.default}\";`}\n </ElseClause>\n }>\n <ElseClause>\n {code`error(\\`Missing required command parameter: \"${param.name}\".\\`);`}\n {code`return;`}\n </ElseClause>\n </Show>\n </Show>\n <hbr />\n </>\n )}\n </For>\n </IfStatement>\n </Show>\n );\n}\n\n/**\n * The command option interface property.\n */\nexport function OptionsMember({\n name,\n option\n}: {\n name: string;\n option: CommandOption;\n}) {\n const doc = option.description || `The ${option.title} command option.`;\n\n return (\n <>\n <Show when={option.kind === ReflectionKind.string}>\n <InterfaceMember\n name={name}\n doc={doc}\n type={\n (option as StringCommandOption).variadic ? \"string[]\" : \"string\"\n }\n optional={option.optional}\n />\n </Show>\n <Show when={option.kind === ReflectionKind.number}>\n <InterfaceMember\n name={name}\n doc={doc}\n type={\n (option as NumberCommandOption).variadic ? \"number[]\" : \"number\"\n }\n optional={option.optional}\n />\n </Show>\n <Show when={option.kind === ReflectionKind.boolean}>\n <InterfaceMember\n name={name}\n doc={doc}\n type=\"boolean\"\n optional={option.optional}\n />\n <Show when={Boolean((option as BooleanCommandOption).isNegativeOf)}>\n <hbr />\n <InterfaceMember\n name={(option as BooleanCommandOption).isNegativeOf!}\n doc={doc}\n type=\"boolean\"\n optional={option.optional}\n />\n </Show>\n </Show>\n <Show when={option.alias && option.alias.length > 0}>\n <hbr />\n <For each={option.alias ?? []} hardline>\n {alias => (\n <OptionsMember\n name={alias}\n option={{\n ...option,\n alias: [],\n description: `${doc.replace(\n /\\.+$/,\n \"\"\n )}. This property is an alias for ${name}.`\n }}\n />\n )}\n </For>\n </Show>\n </>\n );\n}\n\n/**\n * The command option property parser logic.\n */\nexport function OptionsMemberParserLogic({\n name,\n option\n}: {\n name: string;\n option: CommandOption;\n}) {\n const context = usePowerlines<ScriptPresetContext>();\n\n const equalsRegex = `/^--?(${\n context?.config.isCaseSensitive && name.length > 1\n ? name\n : name.toLowerCase()\n }${option.alias && option.alias.length > 0 ? \"|\" : \"\"}${option.alias\n ?.map(a =>\n (context?.config.isCaseSensitive && name.length > 1\n ? a\n : a.toLowerCase()) === \"?\"\n ? \"\\\\?\"\n : context?.config.isCaseSensitive && name.length > 1\n ? a\n : a.toLowerCase()\n )\n .join(\"|\")})=/`;\n\n return (\n <>\n <Show\n when={\n option.kind === ReflectionKind.string ||\n option.kind === ReflectionKind.number\n }>\n <Show\n when={(option as StringCommandOption | NumberCommandOption).variadic}>\n <Show\n when={name.includes(\"?\") || name.includes(\"-\")}\n fallback={code`options.${name} ??= []; `}>\n {code`options[\"${name}\"] ??= []; `}\n </Show>\n <hbr />\n <IfStatement condition={`${equalsRegex}.test(arg)`}>\n <Show\n when={name.includes(\"?\") || name.includes(\"-\")}\n fallback={code`options.${name}.push(`}>\n {code`options[\"${name}\"].push(`}\n </Show>\n <Show when={option.kind === ReflectionKind.string}>\n {code`...arg.replace(${equalsRegex}, \"\").split(\",\").map(item => item.trim().replace(/^(\"|')/, \"\").replace(/(\"|')$/, \"\")).filter(Boolean) `}\n </Show>\n <Show when={option.kind === ReflectionKind.number}>\n {code`...arg.replace(${equalsRegex}, \"\").split(\",\").map(item => item.trim().replace(/^(\"|')/, \"\").replace(/(\"|')$/, \"\")).filter(Boolean).map(Number).filter(value => !Number.isNaN(value)) `}\n </Show>\n {code`); `}\n </IfStatement>\n <ElseIfClause condition={`args.length > i + 1`}>\n <Show\n when={name.includes(\"?\") || name.includes(\"-\")}\n fallback={code`options.${name}.push(`}>\n {code`options[\"${name}\"].push(`}\n </Show>\n <Show when={option.kind === ReflectionKind.string}>\n {code`...args[++i].split(\",\").map(item => item.trim().replace(/^(\"|')/, \"\").replace(/(\"|')$/, \"\")).filter(Boolean) `}\n </Show>\n <Show when={option.kind === ReflectionKind.number}>\n {code`...args[++i].split(\",\").map(item => item.trim().replace(/^(\"|')/, \"\").replace(/(\"|')$/, \"\")).filter(Boolean).map(Number).filter(value => !Number.isNaN(value)) `}\n </Show>\n {code`); `}\n </ElseIfClause>\n </Show>\n <Show\n when={\n !(option as StringCommandOption | NumberCommandOption).variadic\n }>\n <IfStatement condition={`${equalsRegex}.test(arg)`}>\n <Show when={option.kind === ReflectionKind.string}>\n <Show\n when={name.includes(\"?\") || name.includes(\"-\")}\n fallback={code`options.${name}`}>\n {code`options[\"${name}\"]`}\n </Show>\n {code` = arg.replace(${equalsRegex}, \"\").trim().replace(/^(\"|')/, \"\").replace(/(\"|')$/, \"\"); `}\n </Show>\n <Show when={option.kind === ReflectionKind.number}>\n <VarDeclaration\n const\n name=\"value\"\n initializer={code` Number(arg.replace(${equalsRegex}, \"\").trim().replace(/^(\"|')/, \"\").replace(/(\"|')$/, \"\")); `}\n />\n <hbr />\n <IfStatement condition={`!Number.isNaN(value)`}>\n <Show\n when={name.includes(\"?\") || name.includes(\"-\")}\n fallback={code`options.${name}`}>\n {code`options[\"${name}\"]`}\n </Show>\n {code` = value; `}\n </IfStatement>\n <ElseClause>\n {code`warn(\\`Invalid value provided for the ${option.title} option: \"\\${value}\" is not a valid number.\\`); `}\n </ElseClause>\n </Show>\n </IfStatement>\n <ElseIfClause condition={`args.length > i + 1`}>\n <Show when={option.kind === ReflectionKind.string}>\n <Show\n when={name.includes(\"?\") || name.includes(\"-\")}\n fallback={code`options.${name}`}>\n {code`options[\"${name}\"]`}\n </Show>\n {code` = args[++i].trim().replace(/^(\"|')/, \"\").replace(/(\"|')$/, \"\"); `}\n </Show>\n <Show when={option.kind === ReflectionKind.number}>\n <VarDeclaration\n const\n name=\"value\"\n initializer={code` Number(args[++i].trim().replace(/^(\"|')/, \"\").replace(/(\"|')$/, \"\")); `}\n />\n <hbr />\n <IfStatement condition={`!Number.isNaN(value)`}>\n <Show\n when={name.includes(\"?\") || name.includes(\"-\")}\n fallback={code`options.${name}`}>\n {code`options[\"${name}\"]`}\n </Show>\n {code` = value; `}\n </IfStatement>\n <ElseClause>\n {code`warn(\\`Invalid value provided for the ${option.title} option: \"\\${value}\" is not a valid number.\\`); `}\n </ElseClause>\n </Show>\n </ElseIfClause>\n <hbr />\n </Show>\n </Show>\n <Show when={option.kind === ReflectionKind.boolean}>\n <IfStatement condition={`${equalsRegex}.test(arg)`}>\n <VarDeclaration\n const\n name=\"value\"\n initializer={code` arg.replace(${equalsRegex}, \"\").trim().replace(/^(\"|')/, \"\").replace(/(\"|')$/, \"\").toLowerCase(); `}\n />\n <hbr />\n <Show\n when={name.includes(\"?\") || name.includes(\"-\")}\n fallback={code`options.${name}`}>\n {code`options[\"${name}\"]`}\n </Show>\n {code` = value !== \"false\" && value !== \"f\" && value !== \"no\" && value !== \"n\" && value !== \"0\"; `}\n </IfStatement>\n <ElseClause>\n <Show\n when={name.includes(\"?\") || name.includes(\"-\")}\n fallback={code`options.${name} = true; `}>\n {code`options[\"${name}\"] = true; `}\n </Show>\n </ElseClause>\n <Show when={Boolean((option as BooleanCommandOption).isNegativeOf)}>\n <hbr />\n <Show\n when={\n (option as BooleanCommandOption).isNegativeOf!.includes(\"?\") ||\n (option as BooleanCommandOption).isNegativeOf!.includes(\"-\")\n }\n fallback={code`options.${(option as BooleanCommandOption).isNegativeOf} = false; `}>\n {code`options[\"${(option as BooleanCommandOption).isNegativeOf}\"] = false; `}\n </Show>\n </Show>\n </Show>\n <Show when={option.alias && option.alias.length > 0}>\n <hbr />\n <For each={option.alias ?? []} hardline>\n {alias => (\n <>\n <Show\n when={alias.includes(\"?\") || alias.includes(\"-\")}\n fallback={code`options.${alias} `}>\n {code`options[\"${alias}\"] `}\n </Show>\n <Show\n when={name.includes(\"?\") || name.includes(\"-\")}\n fallback={code` = options.${name}; `}>\n {code` = options[\"${name}\"]; `}\n </Show>\n </>\n )}\n </For>\n </Show>\n </>\n );\n}\n\nfunction OptionsMemberParserCondition(props: {\n name: string;\n alias?: string[];\n}) {\n const { name, alias } = props;\n\n const context = usePowerlines<ScriptPresetContext>();\n\n return (\n <>\n {code`arg.startsWith(\"--${\n context?.config.isCaseSensitive ? name : name.toLowerCase()\n }=\") || arg === \"--${\n context?.config.isCaseSensitive ? name : name.toLowerCase()\n }\" || arg.startsWith(\"-${name}=\") || arg === \"-${name}\"`}\n <Show when={alias && alias.length > 0}>\n <For each={alias ?? []}>\n {a =>\n code` || arg.startsWith(\"--${\n context?.config.isCaseSensitive ? a : a.toLowerCase()\n }=\") || arg === \"--${\n context?.config.isCaseSensitive ? a : a.toLowerCase()\n }\" || arg.startsWith(\"-${a}=\") || arg === \"-${a}\"`\n }\n </For>\n </Show>\n </>\n );\n}\n\nexport function OptionsInterfaceDeclaration(props: { command: CommandTree }) {\n const { command } = props;\n\n return (\n <InterfaceDeclaration export name={`${pascalCase(command.name)}Options`}>\n <For each={Object.entries(command.options)}>\n {([name, option]) => <OptionsMember name={name} option={option} />}\n </For>\n </InterfaceDeclaration>\n );\n}\n\n/**\n * The command options parser logic.\n */\nexport function OptionsParserLogic(props: { command: CommandTree }) {\n const { command } = props;\n\n const context = usePowerlines<ScriptPresetContext>();\n\n return (\n <>\n <VarDeclaration\n const\n name=\"options\"\n initializer={code` {\n ${Object.entries(command.options)\n .map(([name, option]) => {\n if (option.kind === ReflectionKind.string) {\n return ` ${name.includes(\"?\") || name.includes(\"-\") ? `\"${name}\"` : `${name}`}: ${\n option.env\n ? `env.${context.config.envPrefix}_${option.env}`\n : \"\"\n }${\n option.variadic\n ? option.default !== undefined\n ? `${\n option.env ? \" ?? \" : \"\"\n }${JSON.stringify(option.default)}`\n : option.env\n ? \" ?? []\"\n : \"\"\n : option.default !== undefined\n ? `${option.env ? \" ?? \" : \"\"}\"${option.default}\"`\n : \"\"\n }, `;\n } else if (option.kind === ReflectionKind.number) {\n return ` ${name.includes(\"?\") || name.includes(\"-\") ? `\"${name}\"` : `${name}`}: ${\n option.env\n ? `env.${context.config.envPrefix}_${option.env}`\n : \"\"\n }${\n option.variadic\n ? option.default !== undefined\n ? `${\n option.env ? \" ?? \" : \"\"\n }${JSON.stringify(option.default)}`\n : option.env\n ? \" ?? []\"\n : \"\"\n : option.default !== undefined\n ? `${option.env ? \" ?? \" : \"\"}${option.default}`\n : \"\"\n }, `;\n } else if (option.kind === ReflectionKind.boolean) {\n return ` ${name.includes(\"?\") || name.includes(\"-\") ? `\"${name}\"` : `${name}`}: ${\n option.env\n ? `env.${context.config.envPrefix}_${option.env} ?? `\n : \"\"\n }${option.default ? \"true\" : \"false\"},`;\n }\n\n return \"\";\n })\n .join(\"\")}\n } as ${pascalCase(command.name)}Options;`}\n />\n <hbr />\n <hbr />\n {code`for (let i = 0; i < args.slice(${\n command.path.segments.filter(segment => isVariableCommandPath(segment))\n .length\n }).length; i++) { `}\n <hbr />\n <VarDeclaration\n const\n name=\"arg\"\n type=\"string\"\n initializer={code` args[i].length > 3 && args[i].startsWith(\"--\")\n ? \\`--\\${args[i].slice(2).replaceAll(\"-\", \"\")${\n context?.config.isCaseSensitive ? \"\" : \".toLowerCase()\"\n }}\\`\n : args[i].length > 2 && args[i].startsWith(\"-\")\n ? \\`-\\${args[i].slice(1).replaceAll(\"-\", \"\")}\\`\n : args[i]; `}\n />\n <hbr />\n <For each={Object.entries(command.options)} hardline>\n {([name, option], i) => (\n <Show\n when={i === 0}\n fallback={\n <ElseIfClause\n condition={\n <OptionsMemberParserCondition\n name={name}\n alias={option.alias}\n />\n }>\n <OptionsMemberParserLogic name={name} option={option} />\n </ElseIfClause>\n }>\n <IfStatement\n condition={\n <OptionsMemberParserCondition\n name={name}\n alias={option.alias}\n />\n }>\n <OptionsMemberParserLogic name={name} option={option} />\n </IfStatement>\n </Show>\n )}\n </For>\n <hbr />\n {code` } `}\n <hbr />\n </>\n );\n}\n"],"mappings":"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"}
@@ -0,0 +1,188 @@
1
+ const require_rolldown_runtime = require('../_virtual/rolldown_runtime.cjs');
2
+ let __alloy_js_core_jsx_runtime = require("@alloy-js/core/jsx-runtime");
3
+ let __alloy_js_core = require("@alloy-js/core");
4
+ let __alloy_js_typescript = require("@alloy-js/typescript");
5
+ let __shell_shock_core_plugin_utils_context_helpers = require("@shell-shock/core/plugin-utils/context-helpers");
6
+ let __powerlines_plugin_alloy_core_contexts_context = require("@powerlines/plugin-alloy/core/contexts/context");
7
+ let __powerlines_plugin_alloy_typescript_components_entry_file = require("@powerlines/plugin-alloy/typescript/components/entry-file");
8
+ let __powerlines_plugin_alloy_typescript_components_tsdoc = require("@powerlines/plugin-alloy/typescript/components/tsdoc");
9
+ let __stryke_helpers_get_unique = require("@stryke/helpers/get-unique");
10
+ let __stryke_path_file_path_fns = require("@stryke/path/file-path-fns");
11
+ let __stryke_path_replace = require("@stryke/path/replace");
12
+ let __stryke_string_format_pascal_case = require("@stryke/string-format/pascal-case");
13
+ let defu = require("defu");
14
+ defu = require_rolldown_runtime.__toESM(defu);
15
+
16
+ //#region src/components/bin-entry.tsx
17
+ /**
18
+ * Runs the application main logic with proper exit handling.
19
+ */
20
+ function RunApplication() {
21
+ return [
22
+ (0, __alloy_js_core_jsx_runtime.createIntrinsic)("hbr", {}),
23
+ (0, __alloy_js_core_jsx_runtime.createIntrinsic)("hbr", {}),
24
+ __alloy_js_core.code`// Run the application main logic inside an asynchronous IIFE
25
+ (async () => {
26
+ try {
27
+ process.on("exit", () => exit({
28
+ skipExit: true,
29
+ isSynchronous: true,
30
+ signal: 0
31
+ }));
32
+ process.on("beforeExit", () => exit({
33
+ signal: 0
34
+ }));
35
+ process.on("message", message => {
36
+ if (message === 'shutdown') {
37
+ exit({
38
+ isSynchronous: true,
39
+ signal: -128
40
+ });
41
+ }
42
+ });
43
+
44
+ process.once("SIGTERM", () => exit({
45
+ signal: 15
46
+ }));
47
+ process.once("SIGINT", () => exit({
48
+ signal: 2
49
+ }));
50
+ process.once("SIGUSR2", () => {
51
+ verbose("The application was terminated by the user");
52
+ return exit({
53
+ signal: 12
54
+ });
55
+ });
56
+ process.once("SIGQUIT", () => {
57
+ verbose("The application was terminated by the user");
58
+ return exit({
59
+ signal: 12
60
+ });
61
+ });
62
+
63
+ for (const type of ["unhandledRejection", "uncaughtException"]) {
64
+ process.on(type, err => exit({
65
+ exception: err || new Error(\`An \${type === "unhandledRejection" ? "unhandled promise rejection" : "uncaught exception"} occurred during processing - the application is shutting down.\`)
66
+ }));
67
+ }
68
+
69
+ const result = await main();
70
+ if (result?.error) {
71
+ error(result.error);
72
+ }
73
+
74
+ exit();
75
+ } catch (err) {
76
+ verbose("An exception occurred during processing");
77
+ exit({ exception: err as Error });
78
+ }
79
+ })();
80
+ `,
81
+ (0, __alloy_js_core_jsx_runtime.createIntrinsic)("hbr", {})
82
+ ];
83
+ }
84
+ /**
85
+ * The binary entry point for the Shell Shock project.
86
+ */
87
+ function BinEntry(props) {
88
+ const { prefix, postfix, builtinImports, imports, children, ...rest } = props;
89
+ const context = (0, __powerlines_plugin_alloy_core_contexts_context.usePowerlines)();
90
+ const bins = (0, __alloy_js_core.computed)(() => (0, __stryke_helpers_get_unique.getUnique)(Object.values(context.config.bin)));
91
+ return (0, __alloy_js_core_jsx_runtime.createComponent)(__alloy_js_core.For, {
92
+ get each() {
93
+ return bins.value;
94
+ },
95
+ children: (bin) => (0, __alloy_js_core_jsx_runtime.createComponent)(__powerlines_plugin_alloy_typescript_components_entry_file.EntryFile, (0, __alloy_js_core_jsx_runtime.mergeProps)(rest, {
96
+ get path() {
97
+ return (0, __stryke_path_file_path_fns.findFileName)((0, __stryke_path_replace.replaceExtension)(bin));
98
+ },
99
+ typeDefinition: {
100
+ file: bin,
101
+ output: "bin"
102
+ },
103
+ get imports() {
104
+ return (0, defu.default)({ didyoumean2: [
105
+ {
106
+ name: "didYouMean",
107
+ default: true
108
+ },
109
+ { name: "ReturnTypeEnums" },
110
+ { name: "ThresholdTypeEnums" }
111
+ ] }, imports ?? {}, Object.entries(context.commands).filter(([, command]) => command.isVirtual).reduce((ret, [name, command]) => {
112
+ ret[`./${command.name}`] = [{
113
+ name: "handler",
114
+ alias: `handle${(0, __stryke_string_format_pascal_case.pascalCase)(name)}`
115
+ }];
116
+ return ret;
117
+ }, {}));
118
+ },
119
+ get builtinImports() {
120
+ return (0, defu.default)(builtinImports ?? {}, {
121
+ console: [
122
+ "error",
123
+ "verbose",
124
+ "table"
125
+ ],
126
+ utils: ["hasFlag", "exit"]
127
+ });
128
+ },
129
+ get children() {
130
+ return [
131
+ (0, __alloy_js_core_jsx_runtime.createComponent)(__alloy_js_core.Show, {
132
+ get when() {
133
+ return Boolean(prefix);
134
+ },
135
+ get children() {
136
+ return [
137
+ prefix,
138
+ (0, __alloy_js_core_jsx_runtime.createIntrinsic)("hbr", {}),
139
+ (0, __alloy_js_core_jsx_runtime.createIntrinsic)("hbr", {})
140
+ ];
141
+ }
142
+ }),
143
+ (0, __alloy_js_core_jsx_runtime.createComponent)(__powerlines_plugin_alloy_typescript_components_tsdoc.TSDoc, { get heading() {
144
+ return `Binary entry point for the ${(0, __shell_shock_core_plugin_utils_context_helpers.getAppTitle)(context)} CLI application.`;
145
+ } }),
146
+ (0, __alloy_js_core_jsx_runtime.createComponent)(__alloy_js_typescript.FunctionDeclaration, {
147
+ async: true,
148
+ returnType: "any",
149
+ name: "main",
150
+ get children() {
151
+ return [
152
+ (0, __alloy_js_core_jsx_runtime.createComponent)(__alloy_js_typescript.IfStatement, {
153
+ condition: __alloy_js_core.code`hasFlag(["version", "v"])`,
154
+ get children() {
155
+ return __alloy_js_core.code`console.log(${context?.packageJson.version ? `"${context?.packageJson.version}"` : "0.0.1"});
156
+ return;`;
157
+ }
158
+ }),
159
+ (0, __alloy_js_core_jsx_runtime.createIntrinsic)("hbr", {}),
160
+ (0, __alloy_js_core_jsx_runtime.createIntrinsic)("hbr", {}),
161
+ children,
162
+ (0, __alloy_js_core_jsx_runtime.createIntrinsic)("hbr", {})
163
+ ];
164
+ }
165
+ }),
166
+ (0, __alloy_js_core_jsx_runtime.createIntrinsic)("hbr", {}),
167
+ (0, __alloy_js_core_jsx_runtime.createIntrinsic)("hbr", {}),
168
+ (0, __alloy_js_core_jsx_runtime.createIntrinsic)("hbr", {}),
169
+ (0, __alloy_js_core_jsx_runtime.createComponent)(__alloy_js_core.Show, {
170
+ get when() {
171
+ return Boolean(postfix);
172
+ },
173
+ get fallback() {
174
+ return (0, __alloy_js_core_jsx_runtime.createComponent)(RunApplication, {});
175
+ },
176
+ children: postfix
177
+ }),
178
+ (0, __alloy_js_core_jsx_runtime.createIntrinsic)("hbr", {})
179
+ ];
180
+ }
181
+ }))
182
+ });
183
+ }
184
+
185
+ //#endregion
186
+ exports.BinEntry = BinEntry;
187
+ exports.RunApplication = RunApplication;
188
+ //# sourceMappingURL=bin-entry.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bin-entry.cjs","names":["code","computed","For","Show","FunctionDeclaration","IfStatement","usePowerlines","EntryFile","TSDoc","getAppTitle","getUnique","findFileName","replaceExtension","pascalCase","defu","RunApplication","_$createIntrinsic","BinEntry","props","prefix","postfix","builtinImports","imports","children","rest","context","bins","Object","values","config","bin","_$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 try {\n process.on(\"exit\", () => exit({\n skipExit: true,\n isSynchronous: true,\n signal: 0\n }));\n process.on(\"beforeExit\", () => exit({\n signal: 0\n }));\n process.on(\"message\", message => {\n if (message === 'shutdown') {\n exit({\n isSynchronous: true,\n signal: -128\n });\n }\n });\n\n process.once(\"SIGTERM\", () => exit({\n signal: 15\n }));\n process.once(\"SIGINT\", () => exit({\n signal: 2\n }));\n process.once(\"SIGUSR2\", () => {\n verbose(\"The application was terminated by the user\");\n return exit({\n signal: 12\n });\n });\n process.once(\"SIGQUIT\", () => {\n verbose(\"The application was terminated by the user\");\n return exit({\n signal: 12\n });\n });\n\n for (const type of [\"unhandledRejection\", \"uncaughtException\"]) {\n process.on(type, err => exit({\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 const result = await main();\n if (result?.error) {\n error(result.error);\n }\n\n exit();\n } catch (err) {\n verbose(\"An exception occurred during processing\");\n exit({ 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: [\"hasFlag\", \"exit\"]\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;mDAAA,OAAA,EAAA,CAAA;mDAAA,OAAA,EAAA,CAAA;EAIKf,oBAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mDAwDJ,OAAA,EAAA,CAAA;EAAA;;;;;AAkBP,SAAgBiB,SAASC,OAAsB;CAC7C,MAAM,EAAEC,QAAQC,SAASC,gBAAgBC,SAASC,UAAU,GAAGC,SAASN;CAExE,MAAMO,8EAA8C;CACpD,MAAMC,sFAAgCC,OAAOC,OAAOH,QAAQI,OAAOC,IAAI,CAAC,CAAC;AAEzE,yDACG5B,qBAAG;EAAA,IAAC8B,OAAI;AAAA,UAAEN,KAAKO;;EAAKV,WAClBO,yDACEvB,kHACKiB,MAAI;GAAA,IACRW,OAAI;AAAA,qGAAgCL,IAAI,CAAC;;GACzCM,gBAAgB;IACdC,MAAMP;IACNQ,QAAQ;IACT;GAAA,IACDhB,UAAO;AAAA,6BACL,EACEiB,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,4DAAoBT,KAAK;MAAI,CACxD;AAED,YAAOQ;OACN,EAA2B,CAClC,CAAC;;GAAA,IACD3B,iBAAc;AAAA,6BAAOA,kBAAkB,EAAE,EAAE;KACzC6B,SAAS;MAAC;MAAS;MAAW;MAAQ;KACtCC,OAAO,CAAC,WAAW,OAAM;KAC1B,CAAC;;GAAA,IAAA5B,WAAA;AAAA,WAAA;sDACDpB,sBAAI;MAAA,IAACiD,OAAI;AAAA,cAAEC,QAAQlC,OAAO;;MAAA,IAAAI,WAAA;AAAA,cAAA;QACxBJ;yDAAM,OAAA,EAAA,CAAA;yDAAA,OAAA,EAAA,CAAA;QAAA;;MAAA,CAAA;sDAIRX,6DAAK,EAAA,IACJ8C,UAAO;AAAA,aAAE,+FAA0C7B,QAAQ,CAAA;QAAmB,CAAA;sDAC/ErB,2CAAmB;MAACmD,OAAK;MAACC,YAAU;MAAOhB,MAAI;MAAA,IAAAjB,WAAA;AAAA,cAAA;yDAC7ClB,mCAAW;SAACoD,WAAWzD,oBAAI;SAA2B,IAAAuB,WAAA;AAAA,iBACpDvB,oBAAI,eAAeyB,SAASiC,YAAYC,UAAU,IAAIlC,SAASiC,YAAYC,QAAO,KAAM,QAAO;;;SAC5F,CAAA;yDAAA,OAAA,EAAA,CAAA;yDAAA,OAAA,EAAA,CAAA;QAILpC;yDAAQ,OAAA,EAAA,CAAA;QAAA;;MAAA,CAAA;sDAAA,OAAA,EAAA,CAAA;sDAAA,OAAA,EAAA,CAAA;sDAAA,OAAA,EAAA,CAAA;sDAMVpB,sBAAI;MAAA,IAACiD,OAAI;AAAA,cAAEC,QAAQjC,QAAQ;;MAAA,IAAEwC,WAAQ;AAAA,+DAAG7C,gBAAc,EAAA,CAAA;;MAAAQ,UACpDH;MAAO,CAAA;sDAAA,OAAA,EAAA,CAAA;KAAA;;GAAA,CAAA,CAAA;EAIb,CAAA"}
@@ -1,15 +1,21 @@
1
1
  import { Children } from "@alloy-js/core";
2
2
  import { EntryFileProps } from "@powerlines/plugin-alloy/typescript/components/entry-file";
3
3
 
4
- //#region src/components/entry/bin.d.ts
4
+ //#region src/components/bin-entry.d.ts
5
+
6
+ /**
7
+ * Runs the application main logic with proper exit handling.
8
+ */
9
+ declare function RunApplication(): Children;
5
10
  interface BinEntryProps extends Omit<EntryFileProps, "path" | "hashbang"> {
6
11
  prefix?: Children;
7
12
  postfix?: Children;
13
+ children: Children;
8
14
  }
9
15
  /**
10
16
  * The binary entry point for the Shell Shock project.
11
17
  */
12
18
  declare function BinEntry(props: BinEntryProps): Children;
13
19
  //#endregion
14
- export { BinEntry, BinEntryProps };
15
- //# sourceMappingURL=bin.d.cts.map
20
+ export { BinEntry, BinEntryProps, RunApplication };
21
+ //# sourceMappingURL=bin-entry.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bin-entry.d.cts","names":[],"sources":["../../src/components/bin-entry.tsx"],"sourcesContent":[],"mappings":";;;;;;;AAqCA;AAmEiB,iBAnED,cAAA,CAAA,CAmEe,EAnED,QAmEC;AAC7B,UADe,aAAA,SAAsB,IACrC,CAAA,cAAA,EAAA,MAAA,GAAA,UAAA,CAAA,CAAA;EAGS,MAAA,CAAA,EAAA,QAAA;EACC,OAAA,CAAA,EAAA,QAAA;EACA,QAAA,EAAA,QAAA;;;AAMZ;;iBAAgB,QAAA,QAAgB,gBAAa"}
@@ -1,15 +1,21 @@
1
1
  import { Children } from "@alloy-js/core";
2
2
  import { EntryFileProps } from "@powerlines/plugin-alloy/typescript/components/entry-file";
3
3
 
4
- //#region src/components/entry/bin.d.ts
4
+ //#region src/components/bin-entry.d.ts
5
+
6
+ /**
7
+ * Runs the application main logic with proper exit handling.
8
+ */
9
+ declare function RunApplication(): Children;
5
10
  interface BinEntryProps extends Omit<EntryFileProps, "path" | "hashbang"> {
6
11
  prefix?: Children;
7
12
  postfix?: Children;
13
+ children: Children;
8
14
  }
9
15
  /**
10
16
  * The binary entry point for the Shell Shock project.
11
17
  */
12
18
  declare function BinEntry(props: BinEntryProps): Children;
13
19
  //#endregion
14
- export { BinEntry, BinEntryProps };
15
- //# sourceMappingURL=bin.d.mts.map
20
+ export { BinEntry, BinEntryProps, RunApplication };
21
+ //# sourceMappingURL=bin-entry.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bin-entry.d.mts","names":[],"sources":["../../src/components/bin-entry.tsx"],"sourcesContent":[],"mappings":";;;;;;;AAqCA;AAmEiB,iBAnED,cAAA,CAAA,CAmEe,EAnED,QAmEC;AAC7B,UADe,aAAA,SAAsB,IACrC,CAAA,cAAA,EAAA,MAAA,GAAA,UAAA,CAAA,CAAA;EAGS,MAAA,CAAA,EAAA,QAAA;EACC,OAAA,CAAA,EAAA,QAAA;EACA,QAAA,EAAA,QAAA;;;AAMZ;;iBAAgB,QAAA,QAAgB,gBAAa"}
@@ -0,0 +1,185 @@
1
+ import { createComponent, createIntrinsic, memo, mergeProps } from "@alloy-js/core/jsx-runtime";
2
+ import { For, Show, code, computed } from "@alloy-js/core";
3
+ import { FunctionDeclaration, IfStatement } from "@alloy-js/typescript";
4
+ import { getAppTitle } from "@shell-shock/core/plugin-utils/context-helpers";
5
+ import { usePowerlines } from "@powerlines/plugin-alloy/core/contexts/context";
6
+ import { EntryFile } from "@powerlines/plugin-alloy/typescript/components/entry-file";
7
+ import { TSDoc } from "@powerlines/plugin-alloy/typescript/components/tsdoc";
8
+ import { getUnique } from "@stryke/helpers/get-unique";
9
+ import { findFileName } from "@stryke/path/file-path-fns";
10
+ import { replaceExtension } from "@stryke/path/replace";
11
+ import { pascalCase } from "@stryke/string-format/pascal-case";
12
+ import defu from "defu";
13
+
14
+ //#region src/components/bin-entry.tsx
15
+ /**
16
+ * Runs the application main logic with proper exit handling.
17
+ */
18
+ function RunApplication() {
19
+ return [
20
+ createIntrinsic("hbr", {}),
21
+ createIntrinsic("hbr", {}),
22
+ code`// Run the application main logic inside an asynchronous IIFE
23
+ (async () => {
24
+ try {
25
+ process.on("exit", () => exit({
26
+ skipExit: true,
27
+ isSynchronous: true,
28
+ signal: 0
29
+ }));
30
+ process.on("beforeExit", () => exit({
31
+ signal: 0
32
+ }));
33
+ process.on("message", message => {
34
+ if (message === 'shutdown') {
35
+ exit({
36
+ isSynchronous: true,
37
+ signal: -128
38
+ });
39
+ }
40
+ });
41
+
42
+ process.once("SIGTERM", () => exit({
43
+ signal: 15
44
+ }));
45
+ process.once("SIGINT", () => exit({
46
+ signal: 2
47
+ }));
48
+ process.once("SIGUSR2", () => {
49
+ verbose("The application was terminated by the user");
50
+ return exit({
51
+ signal: 12
52
+ });
53
+ });
54
+ process.once("SIGQUIT", () => {
55
+ verbose("The application was terminated by the user");
56
+ return exit({
57
+ signal: 12
58
+ });
59
+ });
60
+
61
+ for (const type of ["unhandledRejection", "uncaughtException"]) {
62
+ process.on(type, err => exit({
63
+ exception: err || new Error(\`An \${type === "unhandledRejection" ? "unhandled promise rejection" : "uncaught exception"} occurred during processing - the application is shutting down.\`)
64
+ }));
65
+ }
66
+
67
+ const result = await main();
68
+ if (result?.error) {
69
+ error(result.error);
70
+ }
71
+
72
+ exit();
73
+ } catch (err) {
74
+ verbose("An exception occurred during processing");
75
+ exit({ exception: err as Error });
76
+ }
77
+ })();
78
+ `,
79
+ createIntrinsic("hbr", {})
80
+ ];
81
+ }
82
+ /**
83
+ * The binary entry point for the Shell Shock project.
84
+ */
85
+ function BinEntry(props) {
86
+ const { prefix, postfix, builtinImports, imports, children, ...rest } = props;
87
+ const context = usePowerlines();
88
+ const bins = computed(() => getUnique(Object.values(context.config.bin)));
89
+ return createComponent(For, {
90
+ get each() {
91
+ return bins.value;
92
+ },
93
+ children: (bin) => createComponent(EntryFile, mergeProps(rest, {
94
+ get path() {
95
+ return findFileName(replaceExtension(bin));
96
+ },
97
+ typeDefinition: {
98
+ file: bin,
99
+ output: "bin"
100
+ },
101
+ get imports() {
102
+ return defu({ didyoumean2: [
103
+ {
104
+ name: "didYouMean",
105
+ default: true
106
+ },
107
+ { name: "ReturnTypeEnums" },
108
+ { name: "ThresholdTypeEnums" }
109
+ ] }, imports ?? {}, Object.entries(context.commands).filter(([, command]) => command.isVirtual).reduce((ret, [name, command]) => {
110
+ ret[`./${command.name}`] = [{
111
+ name: "handler",
112
+ alias: `handle${pascalCase(name)}`
113
+ }];
114
+ return ret;
115
+ }, {}));
116
+ },
117
+ get builtinImports() {
118
+ return defu(builtinImports ?? {}, {
119
+ console: [
120
+ "error",
121
+ "verbose",
122
+ "table"
123
+ ],
124
+ utils: ["hasFlag", "exit"]
125
+ });
126
+ },
127
+ get children() {
128
+ return [
129
+ createComponent(Show, {
130
+ get when() {
131
+ return Boolean(prefix);
132
+ },
133
+ get children() {
134
+ return [
135
+ prefix,
136
+ createIntrinsic("hbr", {}),
137
+ createIntrinsic("hbr", {})
138
+ ];
139
+ }
140
+ }),
141
+ createComponent(TSDoc, { get heading() {
142
+ return `Binary entry point for the ${getAppTitle(context)} CLI application.`;
143
+ } }),
144
+ createComponent(FunctionDeclaration, {
145
+ async: true,
146
+ returnType: "any",
147
+ name: "main",
148
+ get children() {
149
+ return [
150
+ createComponent(IfStatement, {
151
+ condition: code`hasFlag(["version", "v"])`,
152
+ get children() {
153
+ return code`console.log(${context?.packageJson.version ? `"${context?.packageJson.version}"` : "0.0.1"});
154
+ return;`;
155
+ }
156
+ }),
157
+ createIntrinsic("hbr", {}),
158
+ createIntrinsic("hbr", {}),
159
+ children,
160
+ createIntrinsic("hbr", {})
161
+ ];
162
+ }
163
+ }),
164
+ createIntrinsic("hbr", {}),
165
+ createIntrinsic("hbr", {}),
166
+ createIntrinsic("hbr", {}),
167
+ createComponent(Show, {
168
+ get when() {
169
+ return Boolean(postfix);
170
+ },
171
+ get fallback() {
172
+ return createComponent(RunApplication, {});
173
+ },
174
+ children: postfix
175
+ }),
176
+ createIntrinsic("hbr", {})
177
+ ];
178
+ }
179
+ }))
180
+ });
181
+ }
182
+
183
+ //#endregion
184
+ export { BinEntry, RunApplication };
185
+ //# sourceMappingURL=bin-entry.mjs.map
@@ -0,0 +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 try {\n process.on(\"exit\", () => exit({\n skipExit: true,\n isSynchronous: true,\n signal: 0\n }));\n process.on(\"beforeExit\", () => exit({\n signal: 0\n }));\n process.on(\"message\", message => {\n if (message === 'shutdown') {\n exit({\n isSynchronous: true,\n signal: -128\n });\n }\n });\n\n process.once(\"SIGTERM\", () => exit({\n signal: 15\n }));\n process.once(\"SIGINT\", () => exit({\n signal: 2\n }));\n process.once(\"SIGUSR2\", () => {\n verbose(\"The application was terminated by the user\");\n return exit({\n signal: 12\n });\n });\n process.once(\"SIGQUIT\", () => {\n verbose(\"The application was terminated by the user\");\n return exit({\n signal: 12\n });\n });\n\n for (const type of [\"unhandledRejection\", \"uncaughtException\"]) {\n process.on(type, err => exit({\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 const result = await main();\n if (result?.error) {\n error(result.error);\n }\n\n exit();\n } catch (err) {\n verbose(\"An exception occurred during processing\");\n exit({ 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: [\"hasFlag\", \"exit\"]\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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAwDJgB,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,CAAC,WAAW,OAAM;KAC1B,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"}