@shell-shock/core 0.10.0 → 0.12.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 (161) hide show
  1. package/dist/components/docs.cjs +4 -4
  2. package/dist/components/docs.cjs.map +1 -1
  3. package/dist/components/docs.d.cts +5 -5
  4. package/dist/components/docs.d.cts.map +1 -1
  5. package/dist/components/docs.d.mts +5 -5
  6. package/dist/components/docs.d.mts.map +1 -1
  7. package/dist/components/helpers.cjs +9 -0
  8. package/dist/components/helpers.cjs.map +1 -1
  9. package/dist/components/helpers.d.cts +15 -7
  10. package/dist/components/helpers.d.cts.map +1 -1
  11. package/dist/components/helpers.d.mts +15 -7
  12. package/dist/components/helpers.d.mts.map +1 -1
  13. package/dist/components/helpers.mjs +9 -1
  14. package/dist/components/helpers.mjs.map +1 -1
  15. package/dist/components/index.cjs +1 -0
  16. package/dist/components/index.d.cts +2 -2
  17. package/dist/components/index.d.mts +2 -2
  18. package/dist/components/index.mjs +2 -2
  19. package/dist/components/options-parser-logic.cjs +167 -87
  20. package/dist/components/options-parser-logic.cjs.map +1 -1
  21. package/dist/components/options-parser-logic.d.cts +15 -15
  22. package/dist/components/options-parser-logic.d.cts.map +1 -1
  23. package/dist/components/options-parser-logic.d.mts +15 -15
  24. package/dist/components/options-parser-logic.d.mts.map +1 -1
  25. package/dist/components/options-parser-logic.mjs +163 -83
  26. package/dist/components/options-parser-logic.mjs.map +1 -1
  27. package/dist/components/usage.cjs +5 -5
  28. package/dist/components/usage.cjs.map +1 -1
  29. package/dist/components/usage.d.cts +2 -2
  30. package/dist/components/usage.d.cts.map +1 -1
  31. package/dist/components/usage.d.mts +2 -2
  32. package/dist/components/usage.mjs +4 -4
  33. package/dist/components/usage.mjs.map +1 -1
  34. package/dist/components/utils-builtin.cjs +2 -2
  35. package/dist/components/utils-builtin.cjs.map +1 -1
  36. package/dist/components/utils-builtin.d.cts +9 -9
  37. package/dist/components/utils-builtin.d.cts.map +1 -1
  38. package/dist/components/utils-builtin.d.mts +9 -9
  39. package/dist/components/utils-builtin.d.mts.map +1 -1
  40. package/dist/components/utils-builtin.mjs +5 -5
  41. package/dist/components/utils-builtin.mjs.map +1 -1
  42. package/dist/contexts/options.cjs +2 -2
  43. package/dist/contexts/options.cjs.map +1 -1
  44. package/dist/contexts/options.d.cts +1 -1
  45. package/dist/contexts/options.d.cts.map +1 -1
  46. package/dist/contexts/options.d.mts +1 -1
  47. package/dist/contexts/options.d.mts.map +1 -1
  48. package/dist/contexts/options.mjs +4 -4
  49. package/dist/contexts/options.mjs.map +1 -1
  50. package/dist/helpers/automd.cjs +2 -2
  51. package/dist/helpers/automd.cjs.map +1 -1
  52. package/dist/helpers/automd.mjs.map +1 -1
  53. package/dist/helpers/paths.cjs +125 -0
  54. package/dist/helpers/paths.cjs.map +1 -0
  55. package/dist/helpers/paths.mjs +121 -0
  56. package/dist/helpers/paths.mjs.map +1 -0
  57. package/dist/helpers/persistence.cjs +68 -116
  58. package/dist/helpers/persistence.cjs.map +1 -1
  59. package/dist/helpers/persistence.mjs +68 -116
  60. package/dist/helpers/persistence.mjs.map +1 -1
  61. package/dist/helpers/update-package-json.cjs +4 -4
  62. package/dist/helpers/update-package-json.cjs.map +1 -1
  63. package/dist/helpers/utilities.cjs +1 -1
  64. package/dist/helpers/utilities.mjs +1 -1
  65. package/dist/helpers/validations.cjs +2 -3
  66. package/dist/helpers/validations.cjs.map +1 -1
  67. package/dist/helpers/validations.mjs +2 -2
  68. package/dist/helpers/validations.mjs.map +1 -1
  69. package/dist/index.cjs +14 -11
  70. package/dist/index.d.cts +2 -2
  71. package/dist/index.d.mts +2 -2
  72. package/dist/index.mjs +3 -3
  73. package/dist/plugin-utils/deepkit.cjs +72 -0
  74. package/dist/plugin-utils/deepkit.cjs.map +1 -0
  75. package/dist/plugin-utils/deepkit.d.cts +24 -0
  76. package/dist/plugin-utils/deepkit.d.cts.map +1 -0
  77. package/dist/plugin-utils/deepkit.d.mts +24 -0
  78. package/dist/plugin-utils/deepkit.d.mts.map +1 -0
  79. package/dist/plugin-utils/deepkit.mjs +70 -0
  80. package/dist/plugin-utils/deepkit.mjs.map +1 -0
  81. package/dist/plugin-utils/description-helpers.cjs +105 -0
  82. package/dist/plugin-utils/description-helpers.cjs.map +1 -0
  83. package/dist/plugin-utils/description-helpers.d.cts +44 -0
  84. package/dist/plugin-utils/description-helpers.d.cts.map +1 -0
  85. package/dist/plugin-utils/description-helpers.d.mts +44 -0
  86. package/dist/plugin-utils/description-helpers.d.mts.map +1 -0
  87. package/dist/plugin-utils/description-helpers.mjs +101 -0
  88. package/dist/plugin-utils/description-helpers.mjs.map +1 -0
  89. package/dist/plugin-utils/get-command-tree.cjs +2 -2
  90. package/dist/plugin-utils/get-command-tree.cjs.map +1 -1
  91. package/dist/plugin-utils/index.cjs +32 -18
  92. package/dist/plugin-utils/index.d.cts +4 -1
  93. package/dist/plugin-utils/index.d.mts +4 -1
  94. package/dist/plugin-utils/index.mjs +4 -1
  95. package/dist/plugin-utils/reflect.cjs +4 -5
  96. package/dist/plugin-utils/reflect.cjs.map +1 -1
  97. package/dist/plugin-utils/reflect.mjs +4 -4
  98. package/dist/plugin-utils/reflect.mjs.map +1 -1
  99. package/dist/plugin-utils/type-checks.cjs +89 -0
  100. package/dist/plugin-utils/type-checks.cjs.map +1 -0
  101. package/dist/plugin-utils/type-checks.d.cts +42 -0
  102. package/dist/plugin-utils/type-checks.d.cts.map +1 -0
  103. package/dist/plugin-utils/type-checks.d.mts +42 -0
  104. package/dist/plugin-utils/type-checks.d.mts.map +1 -0
  105. package/dist/plugin-utils/type-checks.mjs +84 -0
  106. package/dist/plugin-utils/type-checks.mjs.map +1 -0
  107. package/dist/plugin.cjs +31 -29
  108. package/dist/plugin.cjs.map +1 -1
  109. package/dist/plugin.d.cts.map +1 -1
  110. package/dist/plugin.d.mts.map +1 -1
  111. package/dist/plugin.mjs +15 -13
  112. package/dist/plugin.mjs.map +1 -1
  113. package/dist/resolver/deepkit.cjs +132 -0
  114. package/dist/resolver/deepkit.cjs.map +1 -0
  115. package/dist/resolver/deepkit.mjs +131 -0
  116. package/dist/resolver/deepkit.mjs.map +1 -0
  117. package/dist/resolver/helpers.cjs +167 -0
  118. package/dist/resolver/helpers.cjs.map +1 -0
  119. package/dist/resolver/helpers.mjs +162 -0
  120. package/dist/resolver/helpers.mjs.map +1 -0
  121. package/dist/resolver/module.cjs +144 -0
  122. package/dist/resolver/module.cjs.map +1 -0
  123. package/dist/resolver/module.mjs +143 -0
  124. package/dist/resolver/module.mjs.map +1 -0
  125. package/dist/resolver/resolve.cjs +209 -0
  126. package/dist/resolver/resolve.cjs.map +1 -0
  127. package/dist/resolver/resolve.mjs +208 -0
  128. package/dist/resolver/resolve.mjs.map +1 -0
  129. package/dist/types/command.cjs +127 -104
  130. package/dist/types/command.cjs.map +1 -1
  131. package/dist/types/command.d.cts +39 -78
  132. package/dist/types/command.d.cts.map +1 -1
  133. package/dist/types/command.d.mts +39 -78
  134. package/dist/types/command.d.mts.map +1 -1
  135. package/dist/types/command.mjs +115 -95
  136. package/dist/types/command.mjs.map +1 -1
  137. package/dist/types/config.cjs +5 -3
  138. package/dist/types/config.cjs.map +1 -1
  139. package/dist/types/config.d.cts +7 -3
  140. package/dist/types/config.d.cts.map +1 -1
  141. package/dist/types/config.d.mts +7 -3
  142. package/dist/types/config.d.mts.map +1 -1
  143. package/dist/types/config.mjs +5 -3
  144. package/dist/types/config.mjs.map +1 -1
  145. package/dist/types/context.cjs +1 -1
  146. package/dist/types/context.cjs.map +1 -1
  147. package/dist/types/context.d.cts +2 -2
  148. package/dist/types/context.d.cts.map +1 -1
  149. package/dist/types/context.d.mts +2 -2
  150. package/dist/types/context.d.mts.map +1 -1
  151. package/dist/types/context.mjs +1 -1
  152. package/dist/types/context.mjs.map +1 -1
  153. package/dist/types/index.cjs +13 -10
  154. package/dist/types/index.d.cts +2 -2
  155. package/dist/types/index.d.mts +2 -2
  156. package/dist/types/index.mjs +2 -2
  157. package/package.json +24 -75
  158. package/dist/helpers/resolve-command.cjs +0 -430
  159. package/dist/helpers/resolve-command.cjs.map +0 -1
  160. package/dist/helpers/resolve-command.mjs +0 -425
  161. package/dist/helpers/resolve-command.mjs.map +0 -1
@@ -1,13 +1,13 @@
1
1
  import { getDynamicPathSegmentName, isDynamicPathSegment } from "../plugin-utils/context-helpers.mjs";
2
+ import { CommandParameterKinds } from "../types/command.mjs";
2
3
  import { computedOptions } from "../contexts/options.mjs";
3
- import { BooleanInputParserLogic } from "./helpers.mjs";
4
+ import { BooleanInputParserLogic, CommandParameterType } from "./helpers.mjs";
4
5
  import { createComponent, createIntrinsic, memo } from "@alloy-js/core/jsx-runtime";
5
6
  import { camelCase } from "@stryke/string-format/camel-case";
6
7
  import { constantCase } from "@stryke/string-format/constant-case";
7
8
  import { isSetString } from "@stryke/type-checks/is-set-string";
8
9
  import { For, Show, code, computed } from "@alloy-js/core";
9
10
  import { Spacing } from "@powerlines/plugin-alloy/core/components/spacing";
10
- import { ReflectionKind } from "@powerlines/deepkit/vendor/type";
11
11
  import { ElseClause, ElseIfClause, IfStatement, InterfaceDeclaration, InterfaceMember, VarDeclaration } from "@alloy-js/typescript";
12
12
  import { pascalCase } from "@stryke/string-format/pascal-case";
13
13
 
@@ -46,10 +46,10 @@ function DynamicSegmentsParserLogic(props) {
46
46
  });
47
47
  }
48
48
  function ArgumentsParserLogic(props) {
49
- const { command, envPrefix, isCaseSensitive } = props;
49
+ const { command, appSpecificEnvPrefix, isCaseSensitive } = props;
50
50
  return createComponent(Show, {
51
51
  get when() {
52
- return command.arguments && command.arguments.length > 0;
52
+ return command.args && command.args.length > 0;
53
53
  },
54
54
  get children() {
55
55
  return [
@@ -73,37 +73,51 @@ function ArgumentsParserLogic(props) {
73
73
  createComponent(Spacing, {}),
74
74
  createComponent(For, {
75
75
  get each() {
76
- return command.arguments ?? [];
76
+ return command.args ?? [];
77
77
  },
78
78
  hardline: true,
79
79
  children: (arg, index) => [
80
- createComponent(VarDeclaration, {
81
- "let": true,
82
- get name() {
83
- return camelCase(arg.name);
80
+ createComponent(Show, {
81
+ get when() {
82
+ return isSetString(arg.env) || arg.default !== void 0 || (arg.kind === CommandParameterKinds.string || arg.kind === CommandParameterKinds.number) && arg.variadic;
84
83
  },
85
- get type() {
86
- return `${arg.kind === ReflectionKind.boolean ? "boolean" : arg.kind === ReflectionKind.number ? "number" : "string"}${(arg.kind === ReflectionKind.string || arg.kind === ReflectionKind.number) && arg.variadic ? "[]" : ""}${arg.optional ? " | undefined" : ""}`;
84
+ get fallback() {
85
+ return [
86
+ memo(() => code`let ${camelCase(arg.name)}!: `),
87
+ createComponent(CommandParameterType, { parameter: arg }),
88
+ code`; `
89
+ ];
87
90
  },
88
- get initializer() {
89
- return [createComponent(Show, {
90
- get when() {
91
- return isSetString(arg.env);
91
+ get children() {
92
+ return createComponent(VarDeclaration, {
93
+ "let": true,
94
+ get name() {
95
+ return camelCase(arg.name);
92
96
  },
93
- get children() {
94
- return code`env.${envPrefix}_${constantCase(String(arg.env))} ?? `;
95
- }
96
- }), createComponent(Show, {
97
- get when() {
98
- return arg.default !== void 0;
97
+ get type() {
98
+ return createComponent(CommandParameterType, { parameter: arg });
99
99
  },
100
- get fallback() {
101
- return (arg.kind === ReflectionKind.string || arg.kind === ReflectionKind.number) && arg.variadic ? code`[]` : code`undefined;`;
102
- },
103
- get children() {
104
- return arg.kind === ReflectionKind.string ? code`"${arg.default}"` : code`${arg.default}`;
100
+ get initializer() {
101
+ return [createComponent(Show, {
102
+ get when() {
103
+ return isSetString(arg.env);
104
+ },
105
+ get children() {
106
+ return code`env.${appSpecificEnvPrefix}_${constantCase(String(arg.env))} ?? `;
107
+ }
108
+ }), createComponent(Show, {
109
+ get when() {
110
+ return arg.default !== void 0;
111
+ },
112
+ get fallback() {
113
+ return (arg.kind === CommandParameterKinds.string || arg.kind === CommandParameterKinds.number) && arg.variadic ? code`[]` : code`undefined;`;
114
+ },
115
+ get children() {
116
+ return arg.kind === CommandParameterKinds.string ? code`"${arg.default}"` : code`${arg.default}`;
117
+ }
118
+ })];
105
119
  }
106
- })];
120
+ });
107
121
  }
108
122
  }),
109
123
  createComponent(Spacing, {}),
@@ -112,7 +126,7 @@ function ArgumentsParserLogic(props) {
112
126
  get children() {
113
127
  return [memo(() => code`${camelCase(arg.name)} = `), createComponent(Show, {
114
128
  get when() {
115
- return arg.kind === ReflectionKind.string || arg.kind === ReflectionKind.number;
129
+ return arg.kind === CommandParameterKinds.string || arg.kind === CommandParameterKinds.number;
116
130
  },
117
131
  get fallback() {
118
132
  return createComponent(BooleanInputParserLogic, { name: `args[argsIndex + ${index}] ` });
@@ -120,19 +134,19 @@ function ArgumentsParserLogic(props) {
120
134
  get children() {
121
135
  return createComponent(Show, {
122
136
  get when() {
123
- return (arg.kind === ReflectionKind.string || arg.kind === ReflectionKind.number) && arg.variadic;
137
+ return (arg.kind === CommandParameterKinds.string || arg.kind === CommandParameterKinds.number) && arg.variadic;
124
138
  },
125
139
  get fallback() {
126
140
  return createComponent(Show, {
127
141
  get when() {
128
- return arg.kind === ReflectionKind.number;
142
+ return arg.kind === CommandParameterKinds.number;
129
143
  },
130
144
  fallback: code`args[argsIndex + ${index}]; `,
131
145
  children: code`Number(args[argsIndex + ${index}]); `
132
146
  });
133
147
  },
134
148
  get children() {
135
- return code`args.slice(argsIndex + ${index}, (optionsIndex > argsIndex ? optionsIndex : args.length) - ${command.arguments.length - index}).join(" ").split(",").map(item => item.trim().replace(/^("|')/, "").replace(/("|')$/, "")).filter(Boolean)`;
149
+ return code`args.slice(argsIndex + ${index}, (optionsIndex > argsIndex ? optionsIndex : args.length) - ${command.args.length - index}).join(" ").split(",").map(item => item.trim().replace(/^("|')/, "").replace(/("|')$/, "")).filter(Boolean)`;
136
150
  }
137
151
  });
138
152
  }
@@ -159,7 +173,7 @@ function OptionsMember({ option }) {
159
173
  return [
160
174
  createComponent(Show, {
161
175
  get when() {
162
- return option.kind === ReflectionKind.string;
176
+ return option.kind === CommandParameterKinds.string;
163
177
  },
164
178
  get children() {
165
179
  return createComponent(InterfaceMember, {
@@ -168,7 +182,7 @@ function OptionsMember({ option }) {
168
182
  },
169
183
  doc,
170
184
  get type() {
171
- return option.variadic ? "string[]" : "string";
185
+ return createComponent(CommandParameterType, { parameter: option });
172
186
  },
173
187
  get optional() {
174
188
  return option.optional;
@@ -178,7 +192,7 @@ function OptionsMember({ option }) {
178
192
  }),
179
193
  createComponent(Show, {
180
194
  get when() {
181
- return option.kind === ReflectionKind.number;
195
+ return option.kind === CommandParameterKinds.number;
182
196
  },
183
197
  get children() {
184
198
  return createComponent(InterfaceMember, {
@@ -187,7 +201,7 @@ function OptionsMember({ option }) {
187
201
  },
188
202
  doc,
189
203
  get type() {
190
- return option.variadic ? "number[]" : "number";
204
+ return createComponent(CommandParameterType, { parameter: option });
191
205
  },
192
206
  get optional() {
193
207
  return option.optional;
@@ -197,7 +211,7 @@ function OptionsMember({ option }) {
197
211
  }),
198
212
  createComponent(Show, {
199
213
  get when() {
200
- return option.kind === ReflectionKind.boolean;
214
+ return option.kind === CommandParameterKinds.boolean;
201
215
  },
202
216
  get children() {
203
217
  return createComponent(InterfaceMember, {
@@ -205,7 +219,9 @@ function OptionsMember({ option }) {
205
219
  return option.name;
206
220
  },
207
221
  doc,
208
- type: "boolean",
222
+ get type() {
223
+ return createComponent(CommandParameterType, { parameter: option });
224
+ },
209
225
  get optional() {
210
226
  return option.optional;
211
227
  }
@@ -224,7 +240,7 @@ function OptionsMemberParserLogic(props) {
224
240
  const equalsRegex = `/^--?(${isCaseSensitive || name.length === 1 ? name : name.toLowerCase().replaceAll("-", "").replaceAll("_", "")}${option.alias && option.alias.length > 0 ? "|" : ""}${option.alias?.map((a) => (isCaseSensitive || name.length === 1 ? a : a.toLowerCase().replaceAll("-", "").replaceAll("_", "")) === "?" ? "\\?" : isCaseSensitive || name.length === 1 ? a : a.toLowerCase().replaceAll("-", "").replaceAll("_", "")).join("|")})=/`;
225
241
  return [createComponent(Show, {
226
242
  get when() {
227
- return option.kind === ReflectionKind.string || option.kind === ReflectionKind.number;
243
+ return option.kind === CommandParameterKinds.string || option.kind === CommandParameterKinds.number;
228
244
  },
229
245
  get children() {
230
246
  return [createComponent(Show, {
@@ -254,16 +270,24 @@ function OptionsMemberParserLogic(props) {
254
270
  }),
255
271
  createComponent(Show, {
256
272
  get when() {
257
- return option.kind === ReflectionKind.string;
273
+ return option.kind === CommandParameterKinds.string;
258
274
  },
259
275
  children: code`...arg.replace(${equalsRegex}, "").split(",").map(item => item.trim().replace(/^("|')/, "").replace(/("|')$/, "")).filter(Boolean) `
260
276
  }),
261
277
  createComponent(Show, {
262
278
  get when() {
263
- return option.kind === ReflectionKind.number;
279
+ return option.kind === CommandParameterKinds.number;
264
280
  },
265
281
  children: code`...arg.replace(${equalsRegex}, "").split(",").map(item => item.trim().replace(/^("|')/, "").replace(/("|')$/, "")).filter(Boolean).map(Number).filter(value => !Number.isNaN(value)) `
266
282
  }),
283
+ createComponent(Show, {
284
+ get when() {
285
+ return (option.kind === CommandParameterKinds.string || option.kind === CommandParameterKinds.number) && option.choices && option.choices.length > 0;
286
+ },
287
+ get children() {
288
+ return code` as ${option.choices?.map((choice) => isSetString(choice) ? `"${choice}"` : choice).join(" | ")} `;
289
+ }
290
+ }),
267
291
  code`); `
268
292
  ];
269
293
  }
@@ -281,16 +305,24 @@ function OptionsMemberParserLogic(props) {
281
305
  }),
282
306
  createComponent(Show, {
283
307
  get when() {
284
- return option.kind === ReflectionKind.string;
308
+ return option.kind === CommandParameterKinds.string;
285
309
  },
286
310
  children: code`...args[++i].split(",").map(item => item.trim().replace(/^("|')/, "").replace(/("|')$/, "")).filter(Boolean) `
287
311
  }),
288
312
  createComponent(Show, {
289
313
  get when() {
290
- return option.kind === ReflectionKind.number;
314
+ return option.kind === CommandParameterKinds.number;
291
315
  },
292
316
  children: code`...args[++i].split(",").map(item => item.trim().replace(/^("|')/, "").replace(/("|')$/, "")).filter(Boolean).map(Number).filter(value => !Number.isNaN(value)) `
293
317
  }),
318
+ createComponent(Show, {
319
+ get when() {
320
+ return (option.kind === CommandParameterKinds.string || option.kind === CommandParameterKinds.number) && option.choices && option.choices.length > 0;
321
+ },
322
+ get children() {
323
+ return code` as ${option.choices?.map((choice) => isSetString(choice) ? `"${choice}"` : choice).join(" | ")} `;
324
+ }
325
+ }),
294
326
  code`); `
295
327
  ];
296
328
  }
@@ -308,20 +340,32 @@ function OptionsMemberParserLogic(props) {
308
340
  get children() {
309
341
  return [createComponent(Show, {
310
342
  get when() {
311
- return option.kind === ReflectionKind.string;
343
+ return option.kind === CommandParameterKinds.string;
312
344
  },
313
345
  get children() {
314
- return [createComponent(Show, {
315
- get when() {
316
- return name.includes("?") || name.includes("-");
317
- },
318
- fallback: code`options.${name}`,
319
- children: code`options["${name}"]`
320
- }), code` = arg.replace(${equalsRegex}, "").trim().replace(/^("|')/, "").replace(/("|')$/, ""); `];
346
+ return [
347
+ createComponent(Show, {
348
+ get when() {
349
+ return name.includes("?") || name.includes("-");
350
+ },
351
+ fallback: code`options.${name}`,
352
+ children: code`options["${name}"]`
353
+ }),
354
+ code` = arg.replace(${equalsRegex}, "").trim().replace(/^("|')/, "").replace(/("|')$/, "")`,
355
+ createComponent(Show, {
356
+ get when() {
357
+ return option.choices && option.choices.length > 0;
358
+ },
359
+ get children() {
360
+ return code` as ${option.choices?.map((choice) => `"${choice}"`).join(" | ")}`;
361
+ }
362
+ }),
363
+ code`; `
364
+ ];
321
365
  }
322
366
  }), createComponent(Show, {
323
367
  get when() {
324
- return option.kind === ReflectionKind.number;
368
+ return option.kind === CommandParameterKinds.number;
325
369
  },
326
370
  get children() {
327
371
  return [
@@ -334,13 +378,25 @@ function OptionsMemberParserLogic(props) {
334
378
  createComponent(IfStatement, {
335
379
  condition: `!Number.isNaN(value)`,
336
380
  get children() {
337
- return [createComponent(Show, {
338
- get when() {
339
- return name.includes("?") || name.includes("-");
340
- },
341
- fallback: code`options.${name}`,
342
- children: code`options["${name}"]`
343
- }), code` = value; `];
381
+ return [
382
+ createComponent(Show, {
383
+ get when() {
384
+ return name.includes("?") || name.includes("-");
385
+ },
386
+ fallback: code`options.${name}`,
387
+ children: code`options["${name}"]`
388
+ }),
389
+ code` = value`,
390
+ createComponent(Show, {
391
+ get when() {
392
+ return option.choices && option.choices.length > 0;
393
+ },
394
+ get children() {
395
+ return code` as ${option.choices?.join(" | ")}`;
396
+ }
397
+ }),
398
+ code`; `
399
+ ];
344
400
  }
345
401
  })
346
402
  ];
@@ -353,20 +409,32 @@ function OptionsMemberParserLogic(props) {
353
409
  get children() {
354
410
  return [createComponent(Show, {
355
411
  get when() {
356
- return option.kind === ReflectionKind.string;
412
+ return option.kind === CommandParameterKinds.string;
357
413
  },
358
414
  get children() {
359
- return [createComponent(Show, {
360
- get when() {
361
- return name.includes("?") || name.includes("-");
362
- },
363
- fallback: code`options.${name}`,
364
- children: code`options["${name}"]`
365
- }), code` = args[++i].trim().replace(/^("|')/, "").replace(/("|')$/, ""); `];
415
+ return [
416
+ createComponent(Show, {
417
+ get when() {
418
+ return name.includes("?") || name.includes("-");
419
+ },
420
+ fallback: code`options.${name}`,
421
+ children: code`options["${name}"]`
422
+ }),
423
+ code` = args[++i].trim().replace(/^("|')/, "").replace(/("|')$/, "")`,
424
+ createComponent(Show, {
425
+ get when() {
426
+ return option.choices && option.choices.length > 0;
427
+ },
428
+ get children() {
429
+ return code` as ${option.choices?.map((choice) => `"${choice}"`).join(" | ")}`;
430
+ }
431
+ }),
432
+ code`; `
433
+ ];
366
434
  }
367
435
  }), createComponent(Show, {
368
436
  get when() {
369
- return option.kind === ReflectionKind.number;
437
+ return option.kind === CommandParameterKinds.number;
370
438
  },
371
439
  get children() {
372
440
  return [
@@ -379,13 +447,25 @@ function OptionsMemberParserLogic(props) {
379
447
  createComponent(IfStatement, {
380
448
  condition: `!Number.isNaN(value)`,
381
449
  get children() {
382
- return [createComponent(Show, {
383
- get when() {
384
- return name.includes("?") || name.includes("-");
385
- },
386
- fallback: code`options.${name}`,
387
- children: code`options["${name}"]`
388
- }), code` = value; `];
450
+ return [
451
+ createComponent(Show, {
452
+ get when() {
453
+ return name.includes("?") || name.includes("-");
454
+ },
455
+ fallback: code`options.${name}`,
456
+ children: code`options["${name}"]`
457
+ }),
458
+ code` = value`,
459
+ createComponent(Show, {
460
+ get when() {
461
+ return option.choices && option.choices.length > 0;
462
+ },
463
+ get children() {
464
+ return code` as ${option.choices?.join(" | ")}`;
465
+ }
466
+ }),
467
+ code`; `
468
+ ];
389
469
  }
390
470
  })
391
471
  ];
@@ -400,7 +480,7 @@ function OptionsMemberParserLogic(props) {
400
480
  }
401
481
  }), createComponent(Show, {
402
482
  get when() {
403
- return option.kind === ReflectionKind.boolean;
483
+ return option.kind === CommandParameterKinds.boolean;
404
484
  },
405
485
  get children() {
406
486
  return [
@@ -493,7 +573,7 @@ function OptionsInterfaceDeclaration(props) {
493
573
  * The command options parser logic.
494
574
  */
495
575
  function OptionsParserLogic(props) {
496
- const { command, envPrefix, isCaseSensitive = false } = props;
576
+ const { command, appSpecificEnvPrefix, isCaseSensitive = false } = props;
497
577
  const options = computed(() => computedOptions(command));
498
578
  return [
499
579
  createComponent(VarDeclaration, {
@@ -501,10 +581,10 @@ function OptionsParserLogic(props) {
501
581
  name: "options",
502
582
  get initializer() {
503
583
  return code` {
504
- ${Object.entries(options.value).map(([name, option]) => {
505
- if (option.kind === ReflectionKind.string) return ` ${name.includes("?") || name.includes("-") ? `"${name}"` : `${name}`}: ${option.env ? `env.${envPrefix}_${option.env}` : ""}${option.variadic ? option.default !== void 0 ? `${option.env ? " ?? " : ""}${JSON.stringify(option.default)}` : option.env ? " ?? []" : "" : option.default !== void 0 ? `${option.env ? " ?? " : ""}"${option.default}"` : ""}, `;
506
- else if (option.kind === ReflectionKind.number) return ` ${name.includes("?") || name.includes("-") ? `"${name}"` : `${name}`}: ${option.env ? `env.${envPrefix}_${option.env}` : ""}${option.variadic ? option.default !== void 0 ? `${option.env ? " ?? " : ""}${JSON.stringify(option.default)}` : option.env ? " ?? []" : "" : option.default !== void 0 ? `${option.env ? " ?? " : ""}${option.default}` : ""}, `;
507
- else if (option.kind === ReflectionKind.boolean) return ` ${name.includes("?") || name.includes("-") ? `"${name}"` : `${name}`}: ${option.env ? `env.${envPrefix}_${option.env} ?? ` : ""}${option.default ? "true" : "false"},`;
584
+ ${Object.entries(options.value).filter(([, option]) => option.env || option.default !== void 0 || (option.kind === CommandParameterKinds.string || option.kind === CommandParameterKinds.number) && option.variadic).map(([name, option]) => {
585
+ if (option.kind === CommandParameterKinds.string) return ` ${name.includes("?") || name.includes("-") ? `"${name}"` : `${name}`}: ${option.env ? `env.${appSpecificEnvPrefix}_${option.env}` : ""}${option.variadic ? option.default !== void 0 ? `${option.env ? " ?? " : ""}${JSON.stringify(option.default)}` : option.env ? " ?? []" : "[]" : option.default !== void 0 ? `${option.env ? " ?? " : ""}"${option.default}"` : ""}, `;
586
+ else if (option.kind === CommandParameterKinds.number) return ` ${name.includes("?") || name.includes("-") ? `"${name}"` : `${name}`}: ${option.env ? `env.${appSpecificEnvPrefix}_${option.env}` : ""}${option.variadic ? option.default && Array.isArray(option.default) ? `${option.env ? " ?? " : ""}${JSON.stringify(option.default)}` : option.env ? " ?? []" : "[]" : option.default !== void 0 ? `${option.env ? " ?? " : ""}${option.default}` : ""}, `;
587
+ else if (option.kind === CommandParameterKinds.boolean) return ` ${name.includes("?") || name.includes("-") ? `"${name}"` : `${name}`}: ${option.env ? `env.${appSpecificEnvPrefix}_${option.env} ?? ` : ""}${option.default ? "true" : "false"},`;
508
588
  return "";
509
589
  }).join("")}
510
590
  } as ${pascalCase(command.name)}Options;`;
@@ -582,7 +662,7 @@ function OptionsParserLogic(props) {
582
662
  * The command parser logic, which includes parsing dynamic path segments, positional parameters, and options.
583
663
  */
584
664
  function CommandParserLogic(props) {
585
- const { command, envPrefix, isCaseSensitive = false } = props;
665
+ const { command, appSpecificEnvPrefix, isCaseSensitive = false } = props;
586
666
  return [
587
667
  createComponent(DynamicSegmentsParserLogic, {
588
668
  command,
@@ -591,13 +671,13 @@ function CommandParserLogic(props) {
591
671
  createComponent(Spacing, {}),
592
672
  createComponent(OptionsParserLogic, {
593
673
  command,
594
- envPrefix,
674
+ appSpecificEnvPrefix,
595
675
  isCaseSensitive
596
676
  }),
597
677
  createComponent(Spacing, {}),
598
678
  createComponent(ArgumentsParserLogic, {
599
679
  command,
600
- envPrefix,
680
+ appSpecificEnvPrefix,
601
681
  isCaseSensitive
602
682
  }),
603
683
  createComponent(Spacing, {})