@shell-shock/core 0.17.1 → 0.17.3

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 (131) hide show
  1. package/dist/api.cjs +5 -4
  2. package/dist/api.mjs +4 -2
  3. package/dist/api.mjs.map +1 -1
  4. package/dist/components/command-validation-logic.cjs +44 -11
  5. package/dist/components/command-validation-logic.mjs +44 -10
  6. package/dist/components/command-validation-logic.mjs.map +1 -1
  7. package/dist/components/docs.cjs +1 -2
  8. package/dist/components/exec-builtin.cjs +1 -2
  9. package/dist/components/helpers.cjs +1 -2
  10. package/dist/components/options-parser-logic.cjs +1 -2
  11. package/dist/components/state-builtin.cjs +1 -2
  12. package/dist/components/state-builtin.mjs +1 -1
  13. package/dist/components/usage.cjs +1 -2
  14. package/dist/components/utils-builtin.cjs +1 -7
  15. package/dist/components/utils-builtin.mjs +0 -5
  16. package/dist/components/utils-builtin.mjs.map +1 -1
  17. package/dist/config.cjs +3 -3
  18. package/dist/config.mjs +2 -1
  19. package/dist/contexts/command.cjs +6 -3
  20. package/dist/contexts/command.mjs +5 -1
  21. package/dist/contexts/command.mjs.map +1 -1
  22. package/dist/contexts/options.cjs +6 -3
  23. package/dist/contexts/options.mjs +5 -1
  24. package/dist/contexts/options.mjs.map +1 -1
  25. package/dist/helpers/automd.cjs +1 -2
  26. package/dist/helpers/docs-helpers.cjs +3 -3
  27. package/dist/helpers/docs-helpers.mjs +2 -1
  28. package/dist/helpers/docs-helpers.mjs.map +1 -1
  29. package/dist/helpers/paths.cjs +3 -3
  30. package/dist/helpers/paths.mjs +2 -1
  31. package/dist/helpers/paths.mjs.map +1 -1
  32. package/dist/helpers/persistence.cjs +7 -5
  33. package/dist/helpers/persistence.mjs +6 -3
  34. package/dist/helpers/persistence.mjs.map +1 -1
  35. package/dist/helpers/update-package-json.cjs +1 -2
  36. package/dist/helpers/utilities.cjs +3 -3
  37. package/dist/helpers/utilities.mjs +2 -1
  38. package/dist/helpers/utilities.mjs.map +1 -1
  39. package/dist/helpers/validations.cjs +1 -2
  40. package/dist/plugin-utils/context-helpers.cjs +21 -12
  41. package/dist/plugin-utils/context-helpers.mjs +20 -10
  42. package/dist/plugin-utils/context-helpers.mjs.map +1 -1
  43. package/dist/plugin-utils/deepkit.cjs +5 -6
  44. package/dist/plugin-utils/deepkit.mjs +5 -5
  45. package/dist/plugin-utils/deepkit.mjs.map +1 -1
  46. package/dist/plugin-utils/description-helpers.cjs +14 -8
  47. package/dist/plugin-utils/description-helpers.mjs +13 -6
  48. package/dist/plugin-utils/description-helpers.mjs.map +1 -1
  49. package/dist/plugin-utils/get-command-tree.cjs +5 -4
  50. package/dist/plugin-utils/get-command-tree.mjs +4 -2
  51. package/dist/plugin-utils/get-command-tree.mjs.map +1 -1
  52. package/dist/plugin-utils/reflect.cjs +3 -3
  53. package/dist/plugin-utils/reflect.mjs +2 -1
  54. package/dist/plugin-utils/traverse-command-tree.cjs +5 -4
  55. package/dist/plugin-utils/traverse-command-tree.mjs +4 -2
  56. package/dist/plugin-utils/traverse-command-tree.mjs.map +1 -1
  57. package/dist/plugin-utils/type-checks.cjs +11 -7
  58. package/dist/plugin-utils/type-checks.mjs +10 -5
  59. package/dist/plugin-utils/type-checks.mjs.map +1 -1
  60. package/dist/plugin.cjs +5 -5
  61. package/dist/plugin.mjs +5 -4
  62. package/dist/plugin.mjs.map +1 -1
  63. package/dist/resolver/deepkit.cjs +4 -9
  64. package/dist/resolver/deepkit.mjs +4 -8
  65. package/dist/resolver/deepkit.mjs.map +1 -1
  66. package/dist/resolver/helpers.cjs +5 -4
  67. package/dist/resolver/helpers.mjs +4 -2
  68. package/dist/resolver/helpers.mjs.map +1 -1
  69. package/dist/resolver/module.cjs +1 -2
  70. package/dist/resolver/resolve.cjs +8 -5
  71. package/dist/resolver/resolve.mjs +7 -3
  72. package/dist/resolver/resolve.mjs.map +1 -1
  73. package/dist/types/command.cjs +65 -12
  74. package/dist/types/command.d.cts +9 -1
  75. package/dist/types/command.d.cts.map +1 -1
  76. package/dist/types/command.d.mts +9 -1
  77. package/dist/types/command.d.mts.map +1 -1
  78. package/dist/types/command.mjs +64 -10
  79. package/dist/types/command.mjs.map +1 -1
  80. package/dist/types/config.cjs +19 -7
  81. package/dist/types/config.d.cts +1 -1
  82. package/dist/types/config.d.mts +1 -1
  83. package/dist/types/config.mjs +18 -5
  84. package/dist/types/config.mjs.map +1 -1
  85. package/dist/types/context.cjs +6 -3
  86. package/dist/types/context.mjs +5 -1
  87. package/dist/types/env.cjs +8 -3
  88. package/dist/types/env.d.cts +3 -1
  89. package/dist/types/env.d.cts.map +1 -1
  90. package/dist/types/env.d.mts +3 -1
  91. package/dist/types/env.d.mts.map +1 -1
  92. package/dist/types/env.mjs +7 -1
  93. package/dist/types/env.mjs.map +1 -1
  94. package/dist/types/options.cjs +1 -2
  95. package/package.json +11 -11
  96. package/dist/api.cjs.map +0 -1
  97. package/dist/components/command-validation-logic.cjs.map +0 -1
  98. package/dist/components/docs.cjs.map +0 -1
  99. package/dist/components/exec-builtin.cjs.map +0 -1
  100. package/dist/components/helpers.cjs.map +0 -1
  101. package/dist/components/options-parser-logic.cjs.map +0 -1
  102. package/dist/components/state-builtin.cjs.map +0 -1
  103. package/dist/components/usage.cjs.map +0 -1
  104. package/dist/components/utils-builtin.cjs.map +0 -1
  105. package/dist/config.cjs.map +0 -1
  106. package/dist/contexts/command.cjs.map +0 -1
  107. package/dist/contexts/options.cjs.map +0 -1
  108. package/dist/helpers/automd.cjs.map +0 -1
  109. package/dist/helpers/docs-helpers.cjs.map +0 -1
  110. package/dist/helpers/paths.cjs.map +0 -1
  111. package/dist/helpers/persistence.cjs.map +0 -1
  112. package/dist/helpers/update-package-json.cjs.map +0 -1
  113. package/dist/helpers/utilities.cjs.map +0 -1
  114. package/dist/helpers/validations.cjs.map +0 -1
  115. package/dist/plugin-utils/context-helpers.cjs.map +0 -1
  116. package/dist/plugin-utils/deepkit.cjs.map +0 -1
  117. package/dist/plugin-utils/description-helpers.cjs.map +0 -1
  118. package/dist/plugin-utils/get-command-tree.cjs.map +0 -1
  119. package/dist/plugin-utils/reflect.cjs.map +0 -1
  120. package/dist/plugin-utils/traverse-command-tree.cjs.map +0 -1
  121. package/dist/plugin-utils/type-checks.cjs.map +0 -1
  122. package/dist/plugin.cjs.map +0 -1
  123. package/dist/resolver/deepkit.cjs.map +0 -1
  124. package/dist/resolver/helpers.cjs.map +0 -1
  125. package/dist/resolver/module.cjs.map +0 -1
  126. package/dist/resolver/resolve.cjs.map +0 -1
  127. package/dist/types/command.cjs.map +0 -1
  128. package/dist/types/config.cjs.map +0 -1
  129. package/dist/types/context.cjs.map +0 -1
  130. package/dist/types/env.cjs.map +0 -1
  131. package/dist/types/options.cjs.map +0 -1
package/dist/api.cjs CHANGED
@@ -63,7 +63,8 @@ var ShellShockAPI = class ShellShockAPI {
63
63
  "docs",
64
64
  "finalize",
65
65
  "ShellShockAPI",
66
- "!3!P\"w\"2#&2$8P7%`0&sP!2'\"0(P!2)$`0*P!2)$`0+P!2)$`0,P!2)$`0-P!2)$`0.P$`0/5w0"
66
+ "The Shell Shock API class.",
67
+ "!3!P\"w\"2#&2$8P7%`0&sP!2'\"0(P!2)$`0*P!2)$`0+P!2)$`0,P!2)$`0-P!2)$`0.P$`0/5w0?1"
67
68
  ];
68
69
  };
69
70
  /**
@@ -85,10 +86,10 @@ createShellShock.__type = [
85
86
  () => ({}),
86
87
  () => ShellShockAPI,
87
88
  "createShellShock",
88
- "P\"w\"o!\"2#>$P7%`/&"
89
+ "Creates a new {@link ShellShockAPI} instance.",
90
+ "P\"w\"o!\"2#>$P7%`/&?'"
89
91
  ];
90
92
 
91
93
  //#endregion
92
94
  exports.ShellShockAPI = ShellShockAPI;
93
- exports.createShellShock = createShellShock;
94
- //# sourceMappingURL=api.cjs.map
95
+ exports.createShellShock = createShellShock;
package/dist/api.mjs CHANGED
@@ -61,7 +61,8 @@ var ShellShockAPI = class ShellShockAPI {
61
61
  "docs",
62
62
  "finalize",
63
63
  "ShellShockAPI",
64
- "!3!P\"w\"2#&2$8P7%`0&sP!2'\"0(P!2)$`0*P!2)$`0+P!2)$`0,P!2)$`0-P!2)$`0.P$`0/5w0"
64
+ "The Shell Shock API class.",
65
+ "!3!P\"w\"2#&2$8P7%`0&sP!2'\"0(P!2)$`0*P!2)$`0+P!2)$`0,P!2)$`0-P!2)$`0.P$`0/5w0?1"
65
66
  ];
66
67
  };
67
68
  /**
@@ -83,7 +84,8 @@ createShellShock.__type = [
83
84
  () => ({}),
84
85
  () => ShellShockAPI,
85
86
  "createShellShock",
86
- "P\"w\"o!\"2#>$P7%`/&"
87
+ "Creates a new {@link ShellShockAPI} instance.",
88
+ "P\"w\"o!\"2#>$P7%`/&?'"
87
89
  ];
88
90
 
89
91
  //#endregion
package/dist/api.mjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"api.mjs","names":[],"sources":["../src/api.ts"],"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 {\n BuildInlineConfig,\n CleanInlineConfig,\n DocsInlineConfig,\n LintInlineConfig,\n PluginConfig,\n PrepareInlineConfig\n} from \"powerlines\";\nimport { createPowerlines, PowerlinesAPI } from \"powerlines\";\nimport { plugin } from \"./plugin\";\nimport type { UserConfig } from \"./types/config\";\n\n/**\n * The Shell Shock API class.\n *\n * @remarks\n * This class provides methods to interact with the Shell Shock build system, including cleaning, preparing, linting, building, generating documentation, and finalizing projects.\n */\nexport class ShellShockAPI {\n #powerlines: PowerlinesAPI;\n\n public static async from(\n config: UserConfig,\n workspaceRoot?: string\n ): Promise<ShellShockAPI> {\n const userConfig = {\n framework: \"shell-shock\",\n ...config,\n plugins: [plugin(), ...(config.plugins ?? [])] as PluginConfig<any>[]\n };\n\n const powerlines = await (workspaceRoot\n ? PowerlinesAPI.from(workspaceRoot, userConfig)\n : createPowerlines(userConfig));\n\n return new ShellShockAPI(powerlines);\n }\n\n private constructor(powerlines: PowerlinesAPI) {\n this.#powerlines = powerlines;\n }\n\n public async clean(inlineConfig: CleanInlineConfig): Promise<void> {\n return this.#powerlines.clean(inlineConfig);\n }\n\n public async prepare(inlineConfig: PrepareInlineConfig): Promise<void> {\n return this.#powerlines.prepare(inlineConfig);\n }\n\n public async lint(inlineConfig: LintInlineConfig): Promise<void> {\n return this.#powerlines.lint(inlineConfig);\n }\n\n public async build(inlineConfig: BuildInlineConfig): Promise<void> {\n return this.#powerlines.build(inlineConfig);\n }\n\n public async docs(inlineConfig: DocsInlineConfig): Promise<void> {\n return this.#powerlines.docs(inlineConfig);\n }\n\n public async finalize(): Promise<void> {\n return this.#powerlines.finalize();\n }\n}\n\n/**\n * Creates a new {@link ShellShockAPI} instance.\n *\n * @param options - The user configuration options.\n * @returns A promise that resolves to a {@link ShellShockAPI} instance.\n */\nexport async function createShellShock(\n options: Partial<UserConfig> = {}\n): Promise<ShellShockAPI> {\n return ShellShockAPI.from({ root: process.cwd(), ...options });\n}\n"],"mappings":";;;;AAAA,MAAM,aAAa;CAAC;CAAK;CAAW;CAA2B;;;;;;;AAS/D,IAAa,gBAAb,MAAa,cAAc;CAC1B;CACA,aAAgB,KAAK,QAAK,eAAa;EAChC,MAAM,aAAa;;GAErB,GAAQ;;GAEL;AAIP,SAAA,IAAiB,qCAFP,cAAA,KAAA,eAAA,WAAA,GACV,iBAAiB,WAAA,EACA;;CAEjB,YAAA,YAAgB;AAChB,QAAA,aAAY;;CAEZ,MAAM,MAAA,cAAW;AACX,SAAC,MAAA,WAAkB,MAAA,aAAsB;;CAEjD,MAAO,QAAO,cAAkB;;;CAG7B,MAAI,KAAM,cAAe;AAC3B,SAAA,MAAA,WAAA,KAAA,aAAA;;CAEE,MAAK,MAAM,cAAgB;AAC5B,SAAA,MAAA,WAAA,MAAA,aAAA;;CAEC,MAAA,KAAY,cAAa;;;CAGxB,MAAM,WAAE;AACR,SAAA,MAAgB,WAAA,UAAA;;CAEhB,OAAM,SAAU;EAAC;EAAE;EAAA;EAAA;QAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;;;;;;;;AAQvB,eAAQ,iBAA6B,UAAA,EAAA,EAAA;;;;;;AAGrC,iBAAE,SAAA;OAAA;CAAA;CAAA;QAAA,EAAA;OAAA;CAAA;CAAA;CAAA"}
1
+ {"version":3,"file":"api.mjs","names":[],"sources":["../src/api.ts"],"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 {\n BuildInlineConfig,\n CleanInlineConfig,\n DocsInlineConfig,\n LintInlineConfig,\n PluginConfig,\n PrepareInlineConfig\n} from \"powerlines\";\nimport { createPowerlines, PowerlinesAPI } from \"powerlines\";\nimport { plugin } from \"./plugin\";\nimport type { UserConfig } from \"./types/config\";\n\n/**\n * The Shell Shock API class.\n *\n * @remarks\n * This class provides methods to interact with the Shell Shock build system, including cleaning, preparing, linting, building, generating documentation, and finalizing projects.\n */\nexport class ShellShockAPI {\n #powerlines: PowerlinesAPI;\n\n public static async from(\n config: UserConfig,\n workspaceRoot?: string\n ): Promise<ShellShockAPI> {\n const userConfig = {\n framework: \"shell-shock\",\n ...config,\n plugins: [plugin(), ...(config.plugins ?? [])] as PluginConfig<any>[]\n };\n\n const powerlines = await (workspaceRoot\n ? PowerlinesAPI.from(workspaceRoot, userConfig)\n : createPowerlines(userConfig));\n\n return new ShellShockAPI(powerlines);\n }\n\n private constructor(powerlines: PowerlinesAPI) {\n this.#powerlines = powerlines;\n }\n\n public async clean(inlineConfig: CleanInlineConfig): Promise<void> {\n return this.#powerlines.clean(inlineConfig);\n }\n\n public async prepare(inlineConfig: PrepareInlineConfig): Promise<void> {\n return this.#powerlines.prepare(inlineConfig);\n }\n\n public async lint(inlineConfig: LintInlineConfig): Promise<void> {\n return this.#powerlines.lint(inlineConfig);\n }\n\n public async build(inlineConfig: BuildInlineConfig): Promise<void> {\n return this.#powerlines.build(inlineConfig);\n }\n\n public async docs(inlineConfig: DocsInlineConfig): Promise<void> {\n return this.#powerlines.docs(inlineConfig);\n }\n\n public async finalize(): Promise<void> {\n return this.#powerlines.finalize();\n }\n}\n\n/**\n * Creates a new {@link ShellShockAPI} instance.\n *\n * @param options - The user configuration options.\n * @returns A promise that resolves to a {@link ShellShockAPI} instance.\n */\nexport async function createShellShock(\n options: Partial<UserConfig> = {}\n): Promise<ShellShockAPI> {\n return ShellShockAPI.from({ root: process.cwd(), ...options });\n}\n"],"mappings":";;;;AAAA,MAAM,aAAa;CAAC;CAAK;CAAW;CAA2B;;;;;;;AAS/D,IAAa,gBAAb,MAAa,cAAc;CAC1B;CACA,aAAgB,KAAK,QAAK,eAAa;EAChC,MAAM,aAAa;;GAErB,GAAQ;;GAEL;AAIP,SAAA,IAAiB,qCAFP,cAAA,KAAA,eAAA,WAAA,GACV,iBAAiB,WAAA,EACA;;CAEjB,YAAA,YAAgB;AAChB,QAAA,aAAY;;CAEZ,MAAM,MAAA,cAAW;AACX,SAAC,MAAA,WAAkB,MAAA,aAAsB;;CAEjD,MAAO,QAAO,cAAkB;;;CAG7B,MAAI,KAAM,cAAe;AAC3B,SAAA,MAAA,WAAA,KAAA,aAAA;;CAEE,MAAK,MAAM,cAAgB;AAC5B,SAAA,MAAA,WAAA,MAAA,aAAA;;CAEC,MAAA,KAAY,cAAa;;;CAGxB,MAAM,WAAE;AACR,SAAA,MAAgB,WAAA,UAAA;;CAEhB,OAAM,SAAU;EAAC;EAAE;EAAA;EAAA;QAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;;;;;;;;AAQvB,eAAQ,iBAA6B,UAAA,EAAA,EAAA;;;;;;AAGrC,iBAAE,SAAA;OAAA;CAAA;CAAA;QAAA,EAAA;OAAA;CAAA;CAAA;CAAA;CAAA"}
@@ -41,7 +41,7 @@ function CommandValidationLogic(props) {
41
41
  }
42
42
  }), (0, _alloy_js_core_jsx_runtime.createComponent)(_alloy_js_core.Show, {
43
43
  get when() {
44
- return (option.kind === require_types_command.CommandParameterKinds.string || option.kind === require_types_command.CommandParameterKinds.number) && option.variadic;
44
+ return option.variadic;
45
45
  },
46
46
  get children() {
47
47
  return (0, _alloy_js_core_jsx_runtime.createComponent)(_alloy_js_typescript.ElseIfClause, {
@@ -98,22 +98,56 @@ function CommandValidationLogic(props) {
98
98
  return !option.variadic;
99
99
  },
100
100
  get fallback() {
101
- return (0, _alloy_js_core_jsx_runtime.createComponent)(_alloy_js_typescript.ElseIfClause, {
102
- get condition() {
103
- return _alloy_js_core.code`!options${option.name.includes("?") ? `["${option.name}"]` : `.${(0, _stryke_string_format_camel_case.camelCase)(option.name)}`}.every(value => [${option.choices?.map((choice) => option.kind === require_types_command.CommandParameterKinds.string ? `"${choice}"` : choice).join(", ")}].includes(value))`;
101
+ return (0, _alloy_js_core_jsx_runtime.createComponent)(_alloy_js_core.Show, {
102
+ get when() {
103
+ return !option.optional;
104
+ },
105
+ get fallback() {
106
+ return (0, _alloy_js_core_jsx_runtime.createComponent)(_alloy_js_typescript.IfStatement, {
107
+ get condition() {
108
+ return _alloy_js_core.code`!options${option.name.includes("?") ? `["${option.name}"]` : `.${(0, _stryke_string_format_camel_case.camelCase)(option.name)}`}.every(value => [${option.choices?.map((choice) => option.kind === require_types_command.CommandParameterKinds.string ? `"${choice}"` : choice).join(", ")}].includes(value))`;
109
+ },
110
+ get children() {
111
+ return _alloy_js_core.code`failures.push(\`Invalid value provided for the ${option.name} option - valid values include: ${(0, _stryke_string_format_list.list)(option?.choices?.map((choice) => String(choice)) ?? [])}; provided: \${options${option.name.includes("?") ? `["${option.name}"]` : `.${(0, _stryke_string_format_camel_case.camelCase)(option.name)}`}}\`);`;
112
+ }
113
+ });
104
114
  },
105
115
  get children() {
106
- return _alloy_js_core.code`failures.push(\`Invalid value provided for the ${option.name} option - valid values include: ${(0, _stryke_string_format_list.list)(option?.choices?.map((choice) => String(choice)) ?? [])}; provided: \${options${option.name.includes("?") ? `["${option.name}"]` : `.${(0, _stryke_string_format_camel_case.camelCase)(option.name)}`}}\`);`;
116
+ return (0, _alloy_js_core_jsx_runtime.createComponent)(_alloy_js_typescript.ElseIfClause, {
117
+ get condition() {
118
+ return _alloy_js_core.code`!options${option.name.includes("?") ? `["${option.name}"]` : `.${(0, _stryke_string_format_camel_case.camelCase)(option.name)}`}.every(value => [${option.choices?.map((choice) => option.kind === require_types_command.CommandParameterKinds.string ? `"${choice}"` : choice).join(", ")}].includes(value))`;
119
+ },
120
+ get children() {
121
+ return _alloy_js_core.code`failures.push(\`Invalid value provided for the ${option.name} option - valid values include: ${(0, _stryke_string_format_list.list)(option?.choices?.map((choice) => String(choice)) ?? [])}; provided: \${options${option.name.includes("?") ? `["${option.name}"]` : `.${(0, _stryke_string_format_camel_case.camelCase)(option.name)}`}}\`);`;
122
+ }
123
+ });
107
124
  }
108
125
  });
109
126
  },
110
127
  get children() {
111
- return (0, _alloy_js_core_jsx_runtime.createComponent)(_alloy_js_typescript.ElseIfClause, {
112
- get condition() {
113
- return _alloy_js_core.code`![${option.choices?.map((choice) => option.kind === require_types_command.CommandParameterKinds.string ? `"${choice}"` : choice).join(", ")}].includes(options${option.name.includes("?") ? `["${option.name}"]` : `.${(0, _stryke_string_format_camel_case.camelCase)(option.name)}`})`;
128
+ return (0, _alloy_js_core_jsx_runtime.createComponent)(_alloy_js_core.Show, {
129
+ get when() {
130
+ return !option.optional;
131
+ },
132
+ get fallback() {
133
+ return (0, _alloy_js_core_jsx_runtime.createComponent)(_alloy_js_typescript.IfStatement, {
134
+ get condition() {
135
+ return _alloy_js_core.code`![${option.choices?.map((choice) => option.kind === require_types_command.CommandParameterKinds.string ? `"${choice}"` : choice).join(", ")}].includes(options${option.name.includes("?") ? `["${option.name}"]` : `.${(0, _stryke_string_format_camel_case.camelCase)(option.name)}`})`;
136
+ },
137
+ get children() {
138
+ return _alloy_js_core.code`failures.push(\`Invalid value provided for the ${option.name} option - valid values include: ${(0, _stryke_string_format_list.list)(option?.choices?.map((choice) => String(choice)) ?? [])}; provided: \${options${option.name.includes("?") ? `["${option.name}"]` : `.${(0, _stryke_string_format_camel_case.camelCase)(option.name)}`}}\`);`;
139
+ }
140
+ });
114
141
  },
115
142
  get children() {
116
- return _alloy_js_core.code`failures.push(\`Invalid value provided for the ${option.name} option - valid values include: ${(0, _stryke_string_format_list.list)(option?.choices?.map((choice) => String(choice)) ?? [])}; provided: \${options${option.name.includes("?") ? `["${option.name}"]` : `.${(0, _stryke_string_format_camel_case.camelCase)(option.name)}`}}\`);`;
143
+ return (0, _alloy_js_core_jsx_runtime.createComponent)(_alloy_js_typescript.ElseIfClause, {
144
+ get condition() {
145
+ return _alloy_js_core.code`![${option.choices?.map((choice) => option.kind === require_types_command.CommandParameterKinds.string ? `"${choice}"` : choice).join(", ")}].includes(options${option.name.includes("?") ? `["${option.name}"]` : `.${(0, _stryke_string_format_camel_case.camelCase)(option.name)}`})`;
146
+ },
147
+ get children() {
148
+ return _alloy_js_core.code`failures.push(\`Invalid value provided for the ${option.name} option - valid values include: ${(0, _stryke_string_format_list.list)(option?.choices?.map((choice) => String(choice)) ?? [])}; provided: \${options${option.name.includes("?") ? `["${option.name}"]` : `.${(0, _stryke_string_format_camel_case.camelCase)(option.name)}`}}\`);`;
149
+ }
150
+ });
117
151
  }
118
152
  });
119
153
  }
@@ -193,5 +227,4 @@ function CommandValidationLogic(props) {
193
227
  }
194
228
 
195
229
  //#endregion
196
- exports.CommandValidationLogic = CommandValidationLogic;
197
- //# sourceMappingURL=command-validation-logic.cjs.map
230
+ exports.CommandValidationLogic = CommandValidationLogic;
@@ -1,5 +1,5 @@
1
1
  import { CommandParameterKinds } from "../types/command.mjs";
2
- import { createComponent, createIntrinsic, memo } from "@alloy-js/core/jsx-runtime";
2
+ import { createComponent, createIntrinsic } from "@alloy-js/core/jsx-runtime";
3
3
  import { camelCase } from "@stryke/string-format/camel-case";
4
4
  import { For, Show, code } from "@alloy-js/core";
5
5
  import { Spacing } from "@powerlines/plugin-alloy/core/components/spacing";
@@ -39,7 +39,7 @@ function CommandValidationLogic(props) {
39
39
  }
40
40
  }), createComponent(Show, {
41
41
  get when() {
42
- return (option.kind === CommandParameterKinds.string || option.kind === CommandParameterKinds.number) && option.variadic;
42
+ return option.variadic;
43
43
  },
44
44
  get children() {
45
45
  return createComponent(ElseIfClause, {
@@ -96,22 +96,56 @@ function CommandValidationLogic(props) {
96
96
  return !option.variadic;
97
97
  },
98
98
  get fallback() {
99
- return createComponent(ElseIfClause, {
100
- get condition() {
101
- return code`!options${option.name.includes("?") ? `["${option.name}"]` : `.${camelCase(option.name)}`}.every(value => [${option.choices?.map((choice) => option.kind === CommandParameterKinds.string ? `"${choice}"` : choice).join(", ")}].includes(value))`;
99
+ return createComponent(Show, {
100
+ get when() {
101
+ return !option.optional;
102
+ },
103
+ get fallback() {
104
+ return createComponent(IfStatement, {
105
+ get condition() {
106
+ return code`!options${option.name.includes("?") ? `["${option.name}"]` : `.${camelCase(option.name)}`}.every(value => [${option.choices?.map((choice) => option.kind === CommandParameterKinds.string ? `"${choice}"` : choice).join(", ")}].includes(value))`;
107
+ },
108
+ get children() {
109
+ return code`failures.push(\`Invalid value provided for the ${option.name} option - valid values include: ${list(option?.choices?.map((choice) => String(choice)) ?? [])}; provided: \${options${option.name.includes("?") ? `["${option.name}"]` : `.${camelCase(option.name)}`}}\`);`;
110
+ }
111
+ });
102
112
  },
103
113
  get children() {
104
- return code`failures.push(\`Invalid value provided for the ${option.name} option - valid values include: ${list(option?.choices?.map((choice) => String(choice)) ?? [])}; provided: \${options${option.name.includes("?") ? `["${option.name}"]` : `.${camelCase(option.name)}`}}\`);`;
114
+ return createComponent(ElseIfClause, {
115
+ get condition() {
116
+ return code`!options${option.name.includes("?") ? `["${option.name}"]` : `.${camelCase(option.name)}`}.every(value => [${option.choices?.map((choice) => option.kind === CommandParameterKinds.string ? `"${choice}"` : choice).join(", ")}].includes(value))`;
117
+ },
118
+ get children() {
119
+ return code`failures.push(\`Invalid value provided for the ${option.name} option - valid values include: ${list(option?.choices?.map((choice) => String(choice)) ?? [])}; provided: \${options${option.name.includes("?") ? `["${option.name}"]` : `.${camelCase(option.name)}`}}\`);`;
120
+ }
121
+ });
105
122
  }
106
123
  });
107
124
  },
108
125
  get children() {
109
- return createComponent(ElseIfClause, {
110
- get condition() {
111
- return code`![${option.choices?.map((choice) => option.kind === CommandParameterKinds.string ? `"${choice}"` : choice).join(", ")}].includes(options${option.name.includes("?") ? `["${option.name}"]` : `.${camelCase(option.name)}`})`;
126
+ return createComponent(Show, {
127
+ get when() {
128
+ return !option.optional;
129
+ },
130
+ get fallback() {
131
+ return createComponent(IfStatement, {
132
+ get condition() {
133
+ return code`![${option.choices?.map((choice) => option.kind === CommandParameterKinds.string ? `"${choice}"` : choice).join(", ")}].includes(options${option.name.includes("?") ? `["${option.name}"]` : `.${camelCase(option.name)}`})`;
134
+ },
135
+ get children() {
136
+ return code`failures.push(\`Invalid value provided for the ${option.name} option - valid values include: ${list(option?.choices?.map((choice) => String(choice)) ?? [])}; provided: \${options${option.name.includes("?") ? `["${option.name}"]` : `.${camelCase(option.name)}`}}\`);`;
137
+ }
138
+ });
112
139
  },
113
140
  get children() {
114
- return code`failures.push(\`Invalid value provided for the ${option.name} option - valid values include: ${list(option?.choices?.map((choice) => String(choice)) ?? [])}; provided: \${options${option.name.includes("?") ? `["${option.name}"]` : `.${camelCase(option.name)}`}}\`);`;
141
+ return createComponent(ElseIfClause, {
142
+ get condition() {
143
+ return code`![${option.choices?.map((choice) => option.kind === CommandParameterKinds.string ? `"${choice}"` : choice).join(", ")}].includes(options${option.name.includes("?") ? `["${option.name}"]` : `.${camelCase(option.name)}`})`;
144
+ },
145
+ get children() {
146
+ return code`failures.push(\`Invalid value provided for the ${option.name} option - valid values include: ${list(option?.choices?.map((choice) => String(choice)) ?? [])}; provided: \${options${option.name.includes("?") ? `["${option.name}"]` : `.${camelCase(option.name)}`}}\`);`;
147
+ }
148
+ });
115
149
  }
116
150
  });
117
151
  }
@@ -1 +1 @@
1
- {"version":3,"file":"command-validation-logic.mjs","names":[],"sources":["../../src/components/command-validation-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 ElseIfClause,\n IfStatement,\n VarDeclaration\n} from \"@alloy-js/typescript\";\nimport { Spacing } from \"@powerlines/plugin-alloy/core/components/spacing\";\nimport { camelCase } from \"@stryke/string-format/camel-case\";\nimport { list } from \"@stryke/string-format/list\";\nimport type {\n CommandTree,\n NumberCommandParameter,\n StringCommandParameter\n} from \"../types\";\nimport { CommandParameterKinds } from \"../types\";\n\nexport interface CommandValidationLogicProps {\n command: CommandTree;\n}\n\n/**\n * A component that generates command validation logic for required options and arguments.\n */\nexport function CommandValidationLogic(props: CommandValidationLogicProps) {\n const { command } = props;\n\n return (\n <>\n <VarDeclaration name=\"failures\" type=\"string[]\" initializer={code`[];`} />\n <hbr />\n <For each={Object.values(command.options ?? {})} doubleHardline>\n {option => (\n <>\n <Show when={!option.optional}>\n <IfStatement\n condition={code`!options${\n option.name.includes(\"?\")\n ? `[\"${option.name}\"]`\n : `.${camelCase(option.name)}`\n }`}>\n {code`failures.push(\"Missing required ${option.name} option\");`}\n </IfStatement>\n <Show\n when={\n (option.kind === CommandParameterKinds.string ||\n option.kind === CommandParameterKinds.number) &&\n option.variadic\n }>\n <ElseIfClause\n condition={code`options${\n option.name.includes(\"?\")\n ? `[\"${option.name}\"]`\n : `.${camelCase(option.name)}`\n }.length === 0`}>\n {code`failures.push(\"No values were provided to the required ${\n option.name\n } array option\");`}\n </ElseIfClause>\n </Show>\n </Show>\n <Show when={option.kind === CommandParameterKinds.number}>\n <Show\n when={(option as NumberCommandParameter).variadic}\n fallback={\n <IfStatement\n condition={code`options${\n option.name.includes(\"?\")\n ? `[\"${option.name}\"]`\n : `.${camelCase(option.name)}`\n } && Number.isNaN(options${\n option.name.includes(\"?\")\n ? `[\"${option.name}\"]`\n : `.${camelCase(option.name)}`\n })`}>\n {code`failures.push(\"Invalid numeric value provided for the ${\n option.name\n } option\");`}\n </IfStatement>\n }>\n <IfStatement\n condition={code`options${\n option.name.includes(\"?\")\n ? `[\"${option.name}\"]`\n : `.${camelCase(option.name)}`\n }.some(value => Number.isNaN(value))`}>\n {code`failures.push(\"Invalid numeric value provided in the ${\n option.name\n } array option\");`}\n </IfStatement>\n </Show>\n </Show>\n <Show\n when={\n (option.kind === CommandParameterKinds.string ||\n option.kind === CommandParameterKinds.number) &&\n option.choices &&\n option.choices.length > 0\n }>\n <Show\n when={!option.variadic}\n fallback={\n <ElseIfClause\n condition={code`!options${\n option.name.includes(\"?\")\n ? `[\"${option.name}\"]`\n : `.${camelCase(option.name)}`\n }.every(value => [${(\n option as StringCommandParameter | NumberCommandParameter\n ).choices\n ?.map(choice =>\n option.kind === CommandParameterKinds.string\n ? `\"${choice}\"`\n : choice\n )\n .join(\", \")}].includes(value))`}>\n {code`failures.push(\\`Invalid value provided for the ${\n option.name\n } option - valid values include: ${list(\n (\n option as\n | StringCommandParameter\n | NumberCommandParameter\n )?.choices?.map(choice => String(choice)) ?? []\n )}; provided: \\${options${\n option.name.includes(\"?\")\n ? `[\"${option.name}\"]`\n : `.${camelCase(option.name)}`\n }}\\`);`}\n </ElseIfClause>\n }>\n <ElseIfClause\n condition={code`![${(\n option as StringCommandParameter | NumberCommandParameter\n ).choices\n ?.map(choice =>\n option.kind === CommandParameterKinds.string\n ? `\"${choice}\"`\n : choice\n )\n .join(\", \")}].includes(options${\n option.name.includes(\"?\")\n ? `[\"${option.name}\"]`\n : `.${camelCase(option.name)}`\n })`}>\n {code`failures.push(\\`Invalid value provided for the ${\n option.name\n } option - valid values include: ${list(\n (\n option as StringCommandParameter | NumberCommandParameter\n )?.choices?.map(choice => String(choice)) ?? []\n )}; provided: \\${options${\n option.name.includes(\"?\")\n ? `[\"${option.name}\"]`\n : `.${camelCase(option.name)}`\n }}\\`);`}\n </ElseIfClause>\n </Show>\n </Show>\n </>\n )}\n </For>\n <Spacing />\n <For each={command.args} doubleHardline>\n {argument => (\n <>\n <Show when={!argument.optional}>\n <IfStatement condition={code`!${camelCase(argument.name)}`}>\n {code`failures.push(\"Missing required \\\\\"${\n argument.name\n }\\\\\" positional argument\");`}\n </IfStatement>\n <Show\n when={\n (argument.kind === CommandParameterKinds.string ||\n argument.kind === CommandParameterKinds.number) &&\n argument.variadic\n }>\n <ElseIfClause\n condition={code`${camelCase(argument.name)}.length === 0`}>\n {code`failures.push(\"No values were provided to the required ${\n argument.name\n } array positional argument\");`}\n </ElseIfClause>\n </Show>\n </Show>\n <Show when={argument.kind === CommandParameterKinds.number}>\n <Show\n when={(argument as NumberCommandParameter).variadic}\n fallback={\n <IfStatement\n condition={code`${camelCase(\n argument.name\n )} && Number.isNaN(${camelCase(argument.name)})`}>\n {code`failures.push(\"Invalid numeric value provided for the ${\n argument.name\n } positional argument\");`}\n </IfStatement>\n }>\n <IfStatement\n condition={code`${camelCase(argument.name)}.some(value => Number.isNaN(value))`}>\n {code`failures.push(\"Invalid numeric value provided in the ${\n argument.name\n } array positional argument\");`}\n </IfStatement>\n </Show>\n </Show>\n </>\n )}\n </For>\n </>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"command-validation-logic.mjs","names":[],"sources":["../../src/components/command-validation-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 ElseIfClause,\n IfStatement,\n VarDeclaration\n} from \"@alloy-js/typescript\";\nimport { Spacing } from \"@powerlines/plugin-alloy/core/components/spacing\";\nimport { camelCase } from \"@stryke/string-format/camel-case\";\nimport { list } from \"@stryke/string-format/list\";\nimport type {\n CommandTree,\n NumberCommandParameter,\n StringCommandParameter\n} from \"../types\";\nimport { CommandParameterKinds } from \"../types\";\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 when={option.variadic}>\n <ElseIfClause\n condition={code`options${\n option.name.includes(\"?\")\n ? `[\"${option.name}\"]`\n : `.${camelCase(option.name)}`\n }.length === 0`}>\n {code`failures.push(\"No values were provided to the required ${\n option.name\n } array option\");`}\n </ElseIfClause>\n </Show>\n </Show>\n <Show when={option.kind === CommandParameterKinds.number}>\n <Show\n when={option.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 <Show\n when={\n (option.kind === CommandParameterKinds.string ||\n option.kind === CommandParameterKinds.number) &&\n option.choices &&\n option.choices.length > 0\n }>\n <Show\n when={!option.variadic}\n fallback={\n <Show\n when={!option.optional}\n fallback={\n <IfStatement\n condition={code`!options${\n option.name.includes(\"?\")\n ? `[\"${option.name}\"]`\n : `.${camelCase(option.name)}`\n }.every(value => [${(\n option as\n | StringCommandParameter\n | NumberCommandParameter\n ).choices\n ?.map(choice =>\n option.kind === CommandParameterKinds.string\n ? `\"${choice}\"`\n : choice\n )\n .join(\", \")}].includes(value))`}>\n {code`failures.push(\\`Invalid value provided for the ${\n option.name\n } option - valid values include: ${list(\n (\n option as\n | StringCommandParameter\n | NumberCommandParameter\n )?.choices?.map(choice => String(choice)) ?? []\n )}; provided: \\${options${\n option.name.includes(\"?\")\n ? `[\"${option.name}\"]`\n : `.${camelCase(option.name)}`\n }}\\`);`}\n </IfStatement>\n }>\n <ElseIfClause\n condition={code`!options${\n option.name.includes(\"?\")\n ? `[\"${option.name}\"]`\n : `.${camelCase(option.name)}`\n }.every(value => [${(\n option as\n | StringCommandParameter\n | NumberCommandParameter\n ).choices\n ?.map(choice =>\n option.kind === CommandParameterKinds.string\n ? `\"${choice}\"`\n : choice\n )\n .join(\", \")}].includes(value))`}>\n {code`failures.push(\\`Invalid value provided for the ${\n option.name\n } option - valid values include: ${list(\n (\n option as\n | StringCommandParameter\n | NumberCommandParameter\n )?.choices?.map(choice => String(choice)) ?? []\n )}; provided: \\${options${\n option.name.includes(\"?\")\n ? `[\"${option.name}\"]`\n : `.${camelCase(option.name)}`\n }}\\`);`}\n </ElseIfClause>\n </Show>\n }>\n <Show\n when={!option.optional}\n fallback={\n <IfStatement\n condition={code`![${(\n option as\n | StringCommandParameter\n | NumberCommandParameter\n ).choices\n ?.map(choice =>\n option.kind === CommandParameterKinds.string\n ? `\"${choice}\"`\n : choice\n )\n .join(\", \")}].includes(options${\n option.name.includes(\"?\")\n ? `[\"${option.name}\"]`\n : `.${camelCase(option.name)}`\n })`}>\n {code`failures.push(\\`Invalid value provided for the ${\n option.name\n } option - valid values include: ${list(\n (\n option as\n | StringCommandParameter\n | NumberCommandParameter\n )?.choices?.map(choice => String(choice)) ?? []\n )}; provided: \\${options${\n option.name.includes(\"?\")\n ? `[\"${option.name}\"]`\n : `.${camelCase(option.name)}`\n }}\\`);`}\n </IfStatement>\n }>\n <ElseIfClause\n condition={code`![${(\n option as StringCommandParameter | NumberCommandParameter\n ).choices\n ?.map(choice =>\n option.kind === CommandParameterKinds.string\n ? `\"${choice}\"`\n : choice\n )\n .join(\", \")}].includes(options${\n option.name.includes(\"?\")\n ? `[\"${option.name}\"]`\n : `.${camelCase(option.name)}`\n })`}>\n {code`failures.push(\\`Invalid value provided for the ${\n option.name\n } option - valid values include: ${list(\n (\n option as\n | StringCommandParameter\n | NumberCommandParameter\n )?.choices?.map(choice => String(choice)) ?? []\n )}; provided: \\${options${\n option.name.includes(\"?\")\n ? `[\"${option.name}\"]`\n : `.${camelCase(option.name)}`\n }}\\`);`}\n </ElseIfClause>\n </Show>\n </Show>\n </Show>\n </>\n )}\n </For>\n <Spacing />\n <For each={command.args} doubleHardline>\n {argument => (\n <>\n <Show when={!argument.optional}>\n <IfStatement condition={code`!${camelCase(argument.name)}`}>\n {code`failures.push(\"Missing required \\\\\"${\n argument.name\n }\\\\\" positional argument\");`}\n </IfStatement>\n <Show\n when={\n (argument.kind === CommandParameterKinds.string ||\n argument.kind === CommandParameterKinds.number) &&\n argument.variadic\n }>\n <ElseIfClause\n condition={code`${camelCase(argument.name)}.length === 0`}>\n {code`failures.push(\"No values were provided to the required ${\n argument.name\n } array positional argument\");`}\n </ElseIfClause>\n </Show>\n </Show>\n <Show when={argument.kind === CommandParameterKinds.number}>\n <Show\n when={(argument as NumberCommandParameter).variadic}\n fallback={\n <IfStatement\n condition={code`${camelCase(\n argument.name\n )} && Number.isNaN(${camelCase(argument.name)})`}>\n {code`failures.push(\"Invalid numeric value provided for the ${\n argument.name\n } positional argument\");`}\n </IfStatement>\n }>\n <IfStatement\n condition={code`${camelCase(argument.name)}.some(value => Number.isNaN(value))`}>\n {code`failures.push(\"Invalid numeric value provided in the ${\n argument.name\n } array positional argument\");`}\n </IfStatement>\n </Show>\n </Show>\n </>\n )}\n </For>\n </>\n );\n}\n"],"mappings":";;;;;;;;;;;;;CAkCA,MAAO,EACL,YACF;;;GAEE,MAAA;GACE,MAAC;GACH,aAAA,IAAA;GACF,CAAA;EAAM,gBAAU,OAAA,EAAA,CAAA;EAAA,gBAA8B,KAAA;GAC5C,IAAM,OAAE;;;GAGN,gBAAC;GACD,WAAG,WAAe;IAAA,gBAAqB,MAAC;KACtC,IAAI,OAAE;AACL,aAAQ,CAAC,OAAO;;KAEjB,IAAI,WAAC;AACH,aAAK,CAAA,gBAAmB,aAAS;OAC/B,IAAI,YAAC;AACH,eAAI,IAAA,WAAiB,OAAQ,KAAA,SAAA,IAAA,GAAA,KAAA,OAAA,KAAA,MAAA,IAAA,UAAA,OAAA,KAAA;;OAE/B,IAAI,WAAW;AACb,eAAO,IAAI,mCAA0B,OAAA,KAAA;;OAExC,CAAC,EAAE,gBAAkB,MAAM;OAC1B,IAAI,OAAE;AACJ,eAAO,OAAO;;OAEhB,IAAI,WAAI;AACN,eAAO,gBAAa,cAAY;SAC9B,IAAI,YAAW;AACb,iBAAO,IAAI,UAAU,OAAO,KAAK,SAAE,IAAA,GAAA,KAAA,OAAA,KAAA,MAAA,IAAA,UAAA,OAAA,KAAA,GAAA;;SAErC,IAAI,WAAM;AACR,iBAAI,IAAO,0DAAA,OAAA,KAAA;;SAEd,CAAC;;OAEL,CAAC,CAAC;;KAEN,CAAC;IAAE,gBAAO,MAAA;KACT,IAAI,OAAM;AACR,aAAO,OAAC,SAAS,sBAAA;;KAEnB,IAAI,WAAU;AACZ,aAAO,gBAAkB,MAAC;OACxB,IAAI,OAAO;AACT,eAAO,OAAO;;OAEhB,IAAI,WAAQ;AACV,eAAO,gBAAkB,aAAQ;SAC/B,IAAI,YAAY;AACd,iBAAO,IAAC,UAAA,OAAA,KAAA,SAAA,IAAA,GAAA,KAAA,OAAA,KAAA,MAAA,IAAA,UAAA,OAAA,KAAA,GAAA,0BAAA,OAAA,KAAA,SAAA,IAAA,GAAA,KAAA,OAAA,KAAA,MAAA,IAAA,UAAA,OAAA,KAAA,GAAA;;SAEV,IAAI,WAAW;AACb,iBAAM,IAAA,yDAAU,OAAA,KAAA;;SAEnB,CAAC;;OAEJ,IAAI,WAAI;AACN,eAAO,gBAAa,aAAY;SAC9B,IAAI,YAAW;AACb,iBAAO,IAAI,UAAU,OAAO,KAAK,SAAE,IAAA,GAAA,KAAA,OAAA,KAAA,MAAA,IAAA,UAAA,OAAA,KAAA,GAAA;;SAErC,IAAI,WAAM;AACR,iBAAI,IAAO,wDAAA,OAAA,KAAA;;SAEd,CAAC;;OAEL,CAAC;;KAEL,CAAC;IAAE,gBAAW,MAAA;KACb,IAAI,OAAO;AACT,cAAQ,OAAE,SAAc,sBAAE,UAA8B,OAAC,SAAA,sBAAA,WAAA,OAAA,WAAA,OAAA,QAAA,SAAA;;KAE3D,IAAI,WAAM;AACR,aAAO,gBAAA,MAAA;OACL,IAAI,OAAC;AACH,eAAI,CAAI,OAAG;;OAEb,IAAI,WAAK;AACP,eAAO,gBAAe,MAAQ;SAC5B,IAAI,OAAE;AACJ,iBAAO,CAAA,OAAA;;SAET,IAAI,WAAQ;AACV,iBAAO,gBAAkB,aAAQ;WAC/B,IAAI,YAAY;AACd,mBAAM,IAAK,WAAW,OAAE,KAAA,SAAA,IAAA,GAAA,KAAA,OAAA,KAAA,MAAA,IAAA,UAAA,OAAA,KAAA,GAAA,mBAAA,OAAA,SAAA,KAAA,WAAA,OAAA,SAAA,sBAAA,SAAA,IAAA,OAAA,KAAA,OAAA,CAAA,KAAA,KAAA,CAAA;;WAE1B,IAAI,WAAQ;AACV,mBAAO,IAAG,kDAAA,OAAA,KAAA,kCAAA,KAAA,QAAA,SAAA,KAAA,WAAA,OAAA,OAAA,CAAA,IAAA,EAAA,CAAA,CAAA,wBAAA,OAAA,KAAA,SAAA,IAAA,GAAA,KAAA,OAAA,KAAA,MAAA,IAAA,UAAA,OAAA,KAAA,GAAA;;WAEb,CAAC;;SAEJ,IAAI,WAAW;AACb,iBAAO,gBAAS,cAAA;WACd,IAAI,YAAI;AACN,mBAAO,IAAI,WAAS,OAAS,KAAK,SAAI,IAAA,GAAA,KAAA,OAAA,KAAA,MAAA,IAAA,UAAA,OAAA,KAAA,GAAA,mBAAA,OAAA,SAAA,KAAA,WAAA,OAAA,SAAA,sBAAA,SAAA,IAAA,OAAA,KAAA,OAAA,CAAA,KAAA,KAAA,CAAA;;WAExC,IAAI,WAAW;AACb,mBAAM,IAAA,kDAAqC,OAAA,KAAA,kCAAA,KAAA,QAAA,SAAA,KAAA,WAAA,OAAA,OAAA,CAAA,IAAA,EAAA,CAAA,CAAA,wBAAA,OAAA,KAAA,SAAA,IAAA,GAAA,KAAA,OAAA,KAAA,MAAA,IAAA,UAAA,OAAA,KAAA,GAAA;;WAE9C,CAAC;;SAEL,CAAC;;OAEJ,IAAI,WAAW;AACb,eAAO,gBAAkB,MAAC;SACxB,IAAI,OAAO;AACT,iBAAO,CAAC,OAAO;;SAEjB,IAAI,WAAM;AACR,iBAAK,gBAAA,aAAA;WACH,IAAG,YAAA;AACD,mBAAE,IAAS,KAAM,OAAU,SAAA,KAAA,WAAA,OAAA,SAAA,sBAAA,SAAA,IAAA,OAAA,KAAA,OAAA,CAAA,KAAA,KAAA,CAAA,oBAAA,OAAA,KAAA,SAAA,IAAA,GAAA,KAAA,OAAA,KAAA,MAAA,IAAA,UAAA,OAAA,KAAA,GAAA;;WAE7B,IAAI,WAAW;AACb,mBAAO,IAAI,kDAAwB,OAAA,KAAA,kCAAA,KAAA,QAAA,SAAA,KAAA,WAAA,OAAA,OAAA,CAAA,IAAA,EAAA,CAAA,CAAA,wBAAA,OAAA,KAAA,SAAA,IAAA,GAAA,KAAA,OAAA,KAAA,MAAA,IAAA,UAAA,OAAA,KAAA,GAAA;;WAEtC,CAAC;;SAEJ,IAAI,WAAU;AACZ,iBAAO,gBAAC,cAAA;WACN,IAAI,YAAQ;AACV,mBAAM,IAAA,KAAW,OAA2B,SAAA,KAAA,WAAA,OAAA,SAAA,sBAAA,SAAA,IAAA,OAAA,KAAA,OAAA,CAAA,KAAA,KAAA,CAAA,oBAAA,OAAA,KAAA,SAAA,IAAA,GAAA,KAAA,OAAA,KAAA,MAAA,IAAA,UAAA,OAAA,KAAA,GAAA;;WAE9C,IAAI,WAAQ;AACV,mBAAI,IAAA,kDAAA,OAAA,KAAA,kCAAA,KAAA,QAAA,SAAA,KAAA,WAAA,OAAA,OAAA,CAAA,IAAA,EAAA,CAAA,CAAA,wBAAA,OAAA,KAAA,SAAA,IAAA,GAAA,KAAA,OAAA,KAAA,MAAA,IAAA,UAAA,OAAA,KAAA,GAAA;;WAEP,CAAC;;SAEL,CAAC;;OAEL,CAAC;;KAEL,CAAC;IAAC;GACJ,CAAC;EAAE,gBAAkB,SAAG,EAAQ,CAAC;EAAA,gBAAoB,KAAC;GACrD,IAAI,OAAO;AACT,WAAO,QAAQ;;GAEjB,gBAAgB;GAChB,WAAU,aAAY,CAAC,gBAAE,MAAA;IACvB,IAAI,OAAO;AACT,YAAO,CAAC,SAAQ;;IAElB,IAAI,WAAO;AACT,YAAO,CAAC,gBAAgB,aAAQ;MAC9B,IAAI,YAAY;AACd,cAAO,IAAE,IAAA,UAAA,SAAA,KAAA;;MAEX,IAAI,WAAU;AACZ,cAAO,IAAI,sCAAK,SAAA,KAAA;;MAEnB,CAAC,EAAE,gBAAY,MAAA;MACd,IAAI,OAAO;AACT,eAAQ,SAAM,SAAY,sBAAI,UAAsB,SAAA,SAAA,sBAAA,WAAA,SAAA;;MAEtD,IAAI,WAAW;AACb,cAAO,gBAAK,cAAA;QACV,IAAI,YAAY;AACd,gBAAO,IAAC,GAAM,UAAM,SAAY,KAAA,CAAA;;QAElC,IAAI,WAAW;AACb,gBAAO,IAAG,0DAAA,SAAA,KAAA;;QAEb,CAAC;;MAEL,CAAC,CAAC;;IAEN,CAAC,EAAE,gBAAkB,MAAI;IACxB,IAAI,OAAO;AACT,YAAO,SAAS,SAAG,sBAAuB;;IAE5C,IAAI,WAAW;AACb,YAAO,gBAAkB,MAAM;MAC7B,IAAI,OAAO;AACT,cAAQ,SAAS;;MAEnB,IAAI,WAAK;AACP,cAAO,gBAAA,aAAA;QACL,IAAI,YAAY;AACd,gBAAM,IAAA,GAAO,UAAG,SAAA,KAAsB,CAAC,mBAAE,UAAA,SAAA,KAAA,CAAA;;QAE3C,IAAI,WAAU;AACZ,gBAAO,IAAC,yDAAsC,SAAA,KAAA;;QAEjD,CAAC;;MAEJ,IAAI,WAAS;AACX,cAAO,gBAAe,aAAY;QAChC,IAAI,YAAY;AACd,gBAAO,IAAI,GAAG,UAAU,SAAO,KAAM,CAAA;;QAEvC,IAAI,WAAQ;AACV,gBAAM,IAAA,wDAAO,SAAA,KAAA;;QAEhB,CAAC;;MAEL,CAAC;;IAEL,CAAC,CAAC;GACJ,CAAC;EAAC"}
@@ -158,5 +158,4 @@ function CommandDocsFile(props) {
158
158
  exports.CommandDocs = CommandDocs;
159
159
  exports.CommandDocsFile = CommandDocsFile;
160
160
  exports.CommandDocsUsageExample = CommandDocsUsageExample;
161
- exports.CommandOptionsDocs = CommandOptionsDocs;
162
- //# sourceMappingURL=docs.cjs.map
161
+ exports.CommandOptionsDocs = CommandOptionsDocs;
@@ -717,5 +717,4 @@ return new Promise((resolve, reject) => {
717
717
  }
718
718
 
719
719
  //#endregion
720
- exports.ExecBuiltin = ExecBuiltin;
721
- //# sourceMappingURL=exec-builtin.cjs.map
720
+ exports.ExecBuiltin = ExecBuiltin;
@@ -68,5 +68,4 @@ exports.CommandParameterType = CommandParameterType;
68
68
  exports.IsDebug = IsDebug;
69
69
  exports.IsNotDebug = IsNotDebug;
70
70
  exports.IsNotVerbose = IsNotVerbose;
71
- exports.IsVerbose = IsVerbose;
72
- //# sourceMappingURL=helpers.cjs.map
71
+ exports.IsVerbose = IsVerbose;
@@ -722,5 +722,4 @@ exports.OptionsInterfaceDeclaration = OptionsInterfaceDeclaration;
722
722
  exports.OptionsMember = OptionsMember;
723
723
  exports.OptionsMemberParserCondition = OptionsMemberParserCondition;
724
724
  exports.OptionsMemberParserLogic = OptionsMemberParserLogic;
725
- exports.OptionsParserLogic = OptionsParserLogic;
726
- //# sourceMappingURL=options-parser-logic.cjs.map
725
+ exports.OptionsParserLogic = OptionsParserLogic;
@@ -590,5 +590,4 @@ function StateBuiltin(props) {
590
590
  exports.ArgsUtilities = ArgsUtilities;
591
591
  exports.ContextUtilities = ContextUtilities;
592
592
  exports.GlobalTypeDefinitions = GlobalTypeDefinitions;
593
- exports.StateBuiltin = StateBuiltin;
594
- //# sourceMappingURL=state-builtin.cjs.map
593
+ exports.StateBuiltin = StateBuiltin;
@@ -2,7 +2,7 @@ import { getAppBin, getAppTitle } from "../plugin-utils/context-helpers.mjs";
2
2
  import { computedOptions } from "../contexts/options.mjs";
3
3
  import "../plugin-utils/index.mjs";
4
4
  import { OptionsMember, OptionsParserLogic } from "./options-parser-logic.mjs";
5
- import { createComponent, createIntrinsic, memo, mergeProps } from "@alloy-js/core/jsx-runtime";
5
+ import { createComponent, createIntrinsic, mergeProps } from "@alloy-js/core/jsx-runtime";
6
6
  import defu$1 from "defu";
7
7
  import { For, Show, code, computed, splitProps } from "@alloy-js/core";
8
8
  import { Spacing } from "@powerlines/plugin-alloy/core/components/spacing";
@@ -71,5 +71,4 @@ function Usage(props) {
71
71
  }
72
72
 
73
73
  //#endregion
74
- exports.Usage = Usage;
75
- //# sourceMappingURL=usage.cjs.map
74
+ exports.Usage = Usage;
@@ -1725,11 +1725,6 @@ function UtilsBuiltin(props) {
1725
1725
  },
1726
1726
  get builtinImports() {
1727
1727
  return (0, defu.default)(rest.builtinImports ?? {}, {
1728
- console: [
1729
- "error",
1730
- "verbose",
1731
- "writeLine"
1732
- ],
1733
1728
  env: [
1734
1729
  "env",
1735
1730
  "isCI",
@@ -1796,5 +1791,4 @@ exports.FindSuggestionsDeclaration = FindSuggestionsDeclaration;
1796
1791
  exports.HyperlinkSupportUtilities = HyperlinkSupportUtilities;
1797
1792
  exports.ResolveModuleFunctionDeclaration = ResolveModuleFunctionDeclaration;
1798
1793
  exports.TerminalSizeDeclaration = TerminalSizeDeclaration;
1799
- exports.UtilsBuiltin = UtilsBuiltin;
1800
- //# sourceMappingURL=utils-builtin.cjs.map
1794
+ exports.UtilsBuiltin = UtilsBuiltin;
@@ -1722,11 +1722,6 @@ function UtilsBuiltin(props) {
1722
1722
  },
1723
1723
  get builtinImports() {
1724
1724
  return defu$1(rest.builtinImports ?? {}, {
1725
- console: [
1726
- "error",
1727
- "verbose",
1728
- "writeLine"
1729
- ],
1730
1725
  env: [
1731
1726
  "env",
1732
1727
  "isCI",