@hypercli/gen 0.1.1

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 (306) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +24 -0
  3. package/dist/actions/communication.d.ts +201 -0
  4. package/dist/actions/communication.d.ts.map +1 -0
  5. package/dist/actions/communication.js +515 -0
  6. package/dist/actions/communication.js.map +1 -0
  7. package/dist/actions/decorator.d.ts +22 -0
  8. package/dist/actions/decorator.d.ts.map +1 -0
  9. package/dist/actions/decorator.js +110 -0
  10. package/dist/actions/decorator.js.map +1 -0
  11. package/dist/actions/executor.d.ts +85 -0
  12. package/dist/actions/executor.d.ts.map +1 -0
  13. package/dist/actions/executor.js +289 -0
  14. package/dist/actions/executor.js.map +1 -0
  15. package/dist/actions/index.d.ts +14 -0
  16. package/dist/actions/index.d.ts.map +1 -0
  17. package/dist/actions/index.js +15 -0
  18. package/dist/actions/index.js.map +1 -0
  19. package/dist/actions/parameter-resolver.d.ts +54 -0
  20. package/dist/actions/parameter-resolver.d.ts.map +1 -0
  21. package/dist/actions/parameter-resolver.js +300 -0
  22. package/dist/actions/parameter-resolver.js.map +1 -0
  23. package/dist/actions/registry.d.ts +78 -0
  24. package/dist/actions/registry.d.ts.map +1 -0
  25. package/dist/actions/registry.js +221 -0
  26. package/dist/actions/registry.js.map +1 -0
  27. package/dist/actions/types.d.ts +109 -0
  28. package/dist/actions/types.d.ts.map +1 -0
  29. package/dist/actions/types.js +31 -0
  30. package/dist/actions/types.js.map +1 -0
  31. package/dist/actions/utils.d.ts +42 -0
  32. package/dist/actions/utils.d.ts.map +1 -0
  33. package/dist/actions/utils.js +144 -0
  34. package/dist/actions/utils.js.map +1 -0
  35. package/dist/ai/ai-collector.d.ts +52 -0
  36. package/dist/ai/ai-collector.d.ts.map +1 -0
  37. package/dist/ai/ai-collector.js +64 -0
  38. package/dist/ai/ai-collector.js.map +1 -0
  39. package/dist/ai/ai-config.d.ts +230 -0
  40. package/dist/ai/ai-config.d.ts.map +1 -0
  41. package/dist/ai/ai-config.js +8 -0
  42. package/dist/ai/ai-config.js.map +1 -0
  43. package/dist/ai/ai-service.d.ts +66 -0
  44. package/dist/ai/ai-service.d.ts.map +1 -0
  45. package/dist/ai/ai-service.js +198 -0
  46. package/dist/ai/ai-service.js.map +1 -0
  47. package/dist/ai/ai-variable-resolver.d.ts +59 -0
  48. package/dist/ai/ai-variable-resolver.d.ts.map +1 -0
  49. package/dist/ai/ai-variable-resolver.js +219 -0
  50. package/dist/ai/ai-variable-resolver.js.map +1 -0
  51. package/dist/ai/context-collector.d.ts +30 -0
  52. package/dist/ai/context-collector.d.ts.map +1 -0
  53. package/dist/ai/context-collector.js +158 -0
  54. package/dist/ai/context-collector.js.map +1 -0
  55. package/dist/ai/cost-tracker.d.ts +41 -0
  56. package/dist/ai/cost-tracker.d.ts.map +1 -0
  57. package/dist/ai/cost-tracker.js +131 -0
  58. package/dist/ai/cost-tracker.js.map +1 -0
  59. package/dist/ai/env.d.ts +36 -0
  60. package/dist/ai/env.d.ts.map +1 -0
  61. package/dist/ai/env.js +100 -0
  62. package/dist/ai/env.js.map +1 -0
  63. package/dist/ai/index.d.ts +17 -0
  64. package/dist/ai/index.d.ts.map +1 -0
  65. package/dist/ai/index.js +25 -0
  66. package/dist/ai/index.js.map +1 -0
  67. package/dist/ai/model-router.d.ts +32 -0
  68. package/dist/ai/model-router.d.ts.map +1 -0
  69. package/dist/ai/model-router.js +113 -0
  70. package/dist/ai/model-router.js.map +1 -0
  71. package/dist/ai/output-validator.d.ts +24 -0
  72. package/dist/ai/output-validator.d.ts.map +1 -0
  73. package/dist/ai/output-validator.js +279 -0
  74. package/dist/ai/output-validator.js.map +1 -0
  75. package/dist/ai/prompt-assembler.d.ts +30 -0
  76. package/dist/ai/prompt-assembler.d.ts.map +1 -0
  77. package/dist/ai/prompt-assembler.js +93 -0
  78. package/dist/ai/prompt-assembler.js.map +1 -0
  79. package/dist/ai/prompt-pipeline.d.ts +63 -0
  80. package/dist/ai/prompt-pipeline.d.ts.map +1 -0
  81. package/dist/ai/prompt-pipeline.js +119 -0
  82. package/dist/ai/prompt-pipeline.js.map +1 -0
  83. package/dist/ai/prompt-template.jig +88 -0
  84. package/dist/ai/transports/api-transport.d.ts +12 -0
  85. package/dist/ai/transports/api-transport.d.ts.map +1 -0
  86. package/dist/ai/transports/api-transport.js +86 -0
  87. package/dist/ai/transports/api-transport.js.map +1 -0
  88. package/dist/ai/transports/command-transport.d.ts +20 -0
  89. package/dist/ai/transports/command-transport.d.ts.map +1 -0
  90. package/dist/ai/transports/command-transport.js +203 -0
  91. package/dist/ai/transports/command-transport.js.map +1 -0
  92. package/dist/ai/transports/index.d.ts +11 -0
  93. package/dist/ai/transports/index.d.ts.map +1 -0
  94. package/dist/ai/transports/index.js +10 -0
  95. package/dist/ai/transports/index.js.map +1 -0
  96. package/dist/ai/transports/resolve-transport.d.ts +15 -0
  97. package/dist/ai/transports/resolve-transport.d.ts.map +1 -0
  98. package/dist/ai/transports/resolve-transport.js +96 -0
  99. package/dist/ai/transports/resolve-transport.js.map +1 -0
  100. package/dist/ai/transports/stdout-transport.d.ts +14 -0
  101. package/dist/ai/transports/stdout-transport.d.ts.map +1 -0
  102. package/dist/ai/transports/stdout-transport.js +27 -0
  103. package/dist/ai/transports/stdout-transport.js.map +1 -0
  104. package/dist/ai/transports/types.d.ts +77 -0
  105. package/dist/ai/transports/types.d.ts.map +1 -0
  106. package/dist/ai/transports/types.js +8 -0
  107. package/dist/ai/transports/types.js.map +1 -0
  108. package/dist/commands/cookbook/info.d.ts +22 -0
  109. package/dist/commands/cookbook/info.d.ts.map +1 -0
  110. package/dist/commands/cookbook/info.js +217 -0
  111. package/dist/commands/cookbook/info.js.map +1 -0
  112. package/dist/commands/cookbook/list.d.ts +20 -0
  113. package/dist/commands/cookbook/list.d.ts.map +1 -0
  114. package/dist/commands/cookbook/list.js +133 -0
  115. package/dist/commands/cookbook/list.js.map +1 -0
  116. package/dist/commands/gen.d.ts +65 -0
  117. package/dist/commands/gen.d.ts.map +1 -0
  118. package/dist/commands/gen.js +478 -0
  119. package/dist/commands/gen.js.map +1 -0
  120. package/dist/commands/recipe/info.d.ts +18 -0
  121. package/dist/commands/recipe/info.d.ts.map +1 -0
  122. package/dist/commands/recipe/info.js +89 -0
  123. package/dist/commands/recipe/info.js.map +1 -0
  124. package/dist/commands/recipe/list.d.ts +29 -0
  125. package/dist/commands/recipe/list.d.ts.map +1 -0
  126. package/dist/commands/recipe/list.js +215 -0
  127. package/dist/commands/recipe/list.js.map +1 -0
  128. package/dist/commands/recipe/run.d.ts +44 -0
  129. package/dist/commands/recipe/run.d.ts.map +1 -0
  130. package/dist/commands/recipe/run.js +239 -0
  131. package/dist/commands/recipe/run.js.map +1 -0
  132. package/dist/commands/recipe/validate.d.ts +19 -0
  133. package/dist/commands/recipe/validate.d.ts.map +1 -0
  134. package/dist/commands/recipe/validate.js +66 -0
  135. package/dist/commands/recipe/validate.js.map +1 -0
  136. package/dist/discovery/generator-discovery.d.ts +130 -0
  137. package/dist/discovery/generator-discovery.d.ts.map +1 -0
  138. package/dist/discovery/generator-discovery.js +674 -0
  139. package/dist/discovery/generator-discovery.js.map +1 -0
  140. package/dist/discovery/index.d.ts +8 -0
  141. package/dist/discovery/index.d.ts.map +1 -0
  142. package/dist/discovery/index.js +7 -0
  143. package/dist/discovery/index.js.map +1 -0
  144. package/dist/hooks/command-not-found.d.ts +18 -0
  145. package/dist/hooks/command-not-found.d.ts.map +1 -0
  146. package/dist/hooks/command-not-found.js +182 -0
  147. package/dist/hooks/command-not-found.js.map +1 -0
  148. package/dist/hooks/suggest.d.ts +13 -0
  149. package/dist/hooks/suggest.d.ts.map +1 -0
  150. package/dist/hooks/suggest.js +28 -0
  151. package/dist/hooks/suggest.js.map +1 -0
  152. package/dist/index.d.ts +2 -0
  153. package/dist/index.d.ts.map +1 -0
  154. package/dist/index.js +3 -0
  155. package/dist/index.js.map +1 -0
  156. package/dist/lib/base-command.d.ts +26 -0
  157. package/dist/lib/base-command.d.ts.map +1 -0
  158. package/dist/lib/base-command.js +24 -0
  159. package/dist/lib/base-command.js.map +1 -0
  160. package/dist/lib/flags.d.ts +33 -0
  161. package/dist/lib/flags.d.ts.map +1 -0
  162. package/dist/lib/flags.js +64 -0
  163. package/dist/lib/flags.js.map +1 -0
  164. package/dist/ops/add.d.ts +4 -0
  165. package/dist/ops/add.d.ts.map +1 -0
  166. package/dist/ops/add.js +85 -0
  167. package/dist/ops/add.js.map +1 -0
  168. package/dist/ops/inject.d.ts +4 -0
  169. package/dist/ops/inject.d.ts.map +1 -0
  170. package/dist/ops/inject.js +28 -0
  171. package/dist/ops/inject.js.map +1 -0
  172. package/dist/ops/injector.d.ts +4 -0
  173. package/dist/ops/injector.d.ts.map +1 -0
  174. package/dist/ops/injector.js +68 -0
  175. package/dist/ops/injector.js.map +1 -0
  176. package/dist/ops/result.d.ts +3 -0
  177. package/dist/ops/result.d.ts.map +1 -0
  178. package/dist/ops/result.js +8 -0
  179. package/dist/ops/result.js.map +1 -0
  180. package/dist/prompts/interactive-prompts.d.ts +152 -0
  181. package/dist/prompts/interactive-prompts.d.ts.map +1 -0
  182. package/dist/prompts/interactive-prompts.js +574 -0
  183. package/dist/prompts/interactive-prompts.js.map +1 -0
  184. package/dist/recipe-engine/group-executor.d.ts +97 -0
  185. package/dist/recipe-engine/group-executor.d.ts.map +1 -0
  186. package/dist/recipe-engine/group-executor.js +293 -0
  187. package/dist/recipe-engine/group-executor.js.map +1 -0
  188. package/dist/recipe-engine/index.d.ts +112 -0
  189. package/dist/recipe-engine/index.d.ts.map +1 -0
  190. package/dist/recipe-engine/index.js +223 -0
  191. package/dist/recipe-engine/index.js.map +1 -0
  192. package/dist/recipe-engine/output-evaluator.d.ts +28 -0
  193. package/dist/recipe-engine/output-evaluator.d.ts.map +1 -0
  194. package/dist/recipe-engine/output-evaluator.js +78 -0
  195. package/dist/recipe-engine/output-evaluator.js.map +1 -0
  196. package/dist/recipe-engine/recipe-engine.d.ts +227 -0
  197. package/dist/recipe-engine/recipe-engine.d.ts.map +1 -0
  198. package/dist/recipe-engine/recipe-engine.js +1036 -0
  199. package/dist/recipe-engine/recipe-engine.js.map +1 -0
  200. package/dist/recipe-engine/step-executor.d.ts +172 -0
  201. package/dist/recipe-engine/step-executor.d.ts.map +1 -0
  202. package/dist/recipe-engine/step-executor.js +802 -0
  203. package/dist/recipe-engine/step-executor.js.map +1 -0
  204. package/dist/recipe-engine/tools/action-tool.d.ts +103 -0
  205. package/dist/recipe-engine/tools/action-tool.d.ts.map +1 -0
  206. package/dist/recipe-engine/tools/action-tool.js +473 -0
  207. package/dist/recipe-engine/tools/action-tool.js.map +1 -0
  208. package/dist/recipe-engine/tools/ai-tool.d.ts +26 -0
  209. package/dist/recipe-engine/tools/ai-tool.d.ts.map +1 -0
  210. package/dist/recipe-engine/tools/ai-tool.js +233 -0
  211. package/dist/recipe-engine/tools/ai-tool.js.map +1 -0
  212. package/dist/recipe-engine/tools/base.d.ts +214 -0
  213. package/dist/recipe-engine/tools/base.d.ts.map +1 -0
  214. package/dist/recipe-engine/tools/base.js +397 -0
  215. package/dist/recipe-engine/tools/base.js.map +1 -0
  216. package/dist/recipe-engine/tools/codemod-tool.d.ts +130 -0
  217. package/dist/recipe-engine/tools/codemod-tool.d.ts.map +1 -0
  218. package/dist/recipe-engine/tools/codemod-tool.js +786 -0
  219. package/dist/recipe-engine/tools/codemod-tool.js.map +1 -0
  220. package/dist/recipe-engine/tools/ensure-dirs-tool.d.ts +21 -0
  221. package/dist/recipe-engine/tools/ensure-dirs-tool.d.ts.map +1 -0
  222. package/dist/recipe-engine/tools/ensure-dirs-tool.js +130 -0
  223. package/dist/recipe-engine/tools/ensure-dirs-tool.js.map +1 -0
  224. package/dist/recipe-engine/tools/index.d.ts +126 -0
  225. package/dist/recipe-engine/tools/index.d.ts.map +1 -0
  226. package/dist/recipe-engine/tools/index.js +290 -0
  227. package/dist/recipe-engine/tools/index.js.map +1 -0
  228. package/dist/recipe-engine/tools/install-tool.d.ts +20 -0
  229. package/dist/recipe-engine/tools/install-tool.d.ts.map +1 -0
  230. package/dist/recipe-engine/tools/install-tool.js +194 -0
  231. package/dist/recipe-engine/tools/install-tool.js.map +1 -0
  232. package/dist/recipe-engine/tools/parallel-tool.d.ts +21 -0
  233. package/dist/recipe-engine/tools/parallel-tool.d.ts.map +1 -0
  234. package/dist/recipe-engine/tools/parallel-tool.js +134 -0
  235. package/dist/recipe-engine/tools/parallel-tool.js.map +1 -0
  236. package/dist/recipe-engine/tools/patch-tool.d.ts +21 -0
  237. package/dist/recipe-engine/tools/patch-tool.d.ts.map +1 -0
  238. package/dist/recipe-engine/tools/patch-tool.js +248 -0
  239. package/dist/recipe-engine/tools/patch-tool.js.map +1 -0
  240. package/dist/recipe-engine/tools/prompt-tool.d.ts +25 -0
  241. package/dist/recipe-engine/tools/prompt-tool.d.ts.map +1 -0
  242. package/dist/recipe-engine/tools/prompt-tool.js +162 -0
  243. package/dist/recipe-engine/tools/prompt-tool.js.map +1 -0
  244. package/dist/recipe-engine/tools/query-tool.d.ts +21 -0
  245. package/dist/recipe-engine/tools/query-tool.d.ts.map +1 -0
  246. package/dist/recipe-engine/tools/query-tool.js +249 -0
  247. package/dist/recipe-engine/tools/query-tool.js.map +1 -0
  248. package/dist/recipe-engine/tools/recipe-tool.d.ts +103 -0
  249. package/dist/recipe-engine/tools/recipe-tool.d.ts.map +1 -0
  250. package/dist/recipe-engine/tools/recipe-tool.js +617 -0
  251. package/dist/recipe-engine/tools/recipe-tool.js.map +1 -0
  252. package/dist/recipe-engine/tools/registry.d.ts +151 -0
  253. package/dist/recipe-engine/tools/registry.d.ts.map +1 -0
  254. package/dist/recipe-engine/tools/registry.js +244 -0
  255. package/dist/recipe-engine/tools/registry.js.map +1 -0
  256. package/dist/recipe-engine/tools/sequence-tool.d.ts +22 -0
  257. package/dist/recipe-engine/tools/sequence-tool.d.ts.map +1 -0
  258. package/dist/recipe-engine/tools/sequence-tool.js +122 -0
  259. package/dist/recipe-engine/tools/sequence-tool.js.map +1 -0
  260. package/dist/recipe-engine/tools/shell-tool.d.ts +25 -0
  261. package/dist/recipe-engine/tools/shell-tool.d.ts.map +1 -0
  262. package/dist/recipe-engine/tools/shell-tool.js +149 -0
  263. package/dist/recipe-engine/tools/shell-tool.js.map +1 -0
  264. package/dist/recipe-engine/tools/template-tool.d.ts +88 -0
  265. package/dist/recipe-engine/tools/template-tool.d.ts.map +1 -0
  266. package/dist/recipe-engine/tools/template-tool.js +613 -0
  267. package/dist/recipe-engine/tools/template-tool.js.map +1 -0
  268. package/dist/recipe-engine/types.d.ts +963 -0
  269. package/dist/recipe-engine/types.d.ts.map +1 -0
  270. package/dist/recipe-engine/types.js +94 -0
  271. package/dist/recipe-engine/types.js.map +1 -0
  272. package/dist/template-engines/ai-tags.d.ts +26 -0
  273. package/dist/template-engines/ai-tags.d.ts.map +1 -0
  274. package/dist/template-engines/ai-tags.js +233 -0
  275. package/dist/template-engines/ai-tags.js.map +1 -0
  276. package/dist/template-engines/index.d.ts +8 -0
  277. package/dist/template-engines/index.d.ts.map +1 -0
  278. package/dist/template-engines/index.js +8 -0
  279. package/dist/template-engines/index.js.map +1 -0
  280. package/dist/template-engines/jig-engine.d.ts +47 -0
  281. package/dist/template-engines/jig-engine.d.ts.map +1 -0
  282. package/dist/template-engines/jig-engine.js +173 -0
  283. package/dist/template-engines/jig-engine.js.map +1 -0
  284. package/dist/utils/coerce-value.d.ts +7 -0
  285. package/dist/utils/coerce-value.d.ts.map +1 -0
  286. package/dist/utils/coerce-value.js +18 -0
  287. package/dist/utils/coerce-value.js.map +1 -0
  288. package/dist/utils/diff.d.ts +8 -0
  289. package/dist/utils/diff.d.ts.map +1 -0
  290. package/dist/utils/diff.js +10 -0
  291. package/dist/utils/diff.js.map +1 -0
  292. package/dist/utils/global-packages.d.ts +11 -0
  293. package/dist/utils/global-packages.d.ts.map +1 -0
  294. package/dist/utils/global-packages.js +88 -0
  295. package/dist/utils/global-packages.js.map +1 -0
  296. package/dist/utils/pager.d.ts +6 -0
  297. package/dist/utils/pager.d.ts.map +1 -0
  298. package/dist/utils/pager.js +41 -0
  299. package/dist/utils/pager.js.map +1 -0
  300. package/help/cookbook/info.md +35 -0
  301. package/help/cookbook/list.md +37 -0
  302. package/help/gen.md +26 -0
  303. package/help/recipe/run.md +52 -0
  304. package/help/recipe/validate.md +51 -0
  305. package/oclif.manifest.json +580 -0
  306. package/package.json +120 -0
@@ -0,0 +1,574 @@
1
+ /**
2
+ * Interactive Prompts System
3
+ *
4
+ * Uses @clack/prompts for beautiful interactive prompts when parameters are missing
5
+ */
6
+ import { setTimeout } from "node:timers/promises";
7
+ import * as p from "@clack/prompts";
8
+ const DEFAULT_INTRO = "⚙️ Let's customize this!";
9
+ const DEFAULT_OUTRO = "✅ Configuration complete!";
10
+ export class InteractivePrompter {
11
+ defaultOptions = {
12
+ interactive: true,
13
+ skipOptional: false,
14
+ timeout: 300000, // 5 minutes
15
+ intro: DEFAULT_INTRO,
16
+ outro: DEFAULT_OUTRO,
17
+ };
18
+ /**
19
+ * Prompt for missing parameters
20
+ */
21
+ async promptForParameters(variables, providedValues = {}, options = {}) {
22
+ const opts = { ...this.defaultOptions, ...options };
23
+ if (!opts.interactive) {
24
+ return {
25
+ completed: false,
26
+ cancelled: false,
27
+ values: providedValues,
28
+ errors: ["Interactive prompts disabled"],
29
+ };
30
+ }
31
+ const result = {
32
+ completed: false,
33
+ cancelled: false,
34
+ values: { ...providedValues },
35
+ errors: [],
36
+ };
37
+ try {
38
+ // Start the prompt session
39
+ p.intro(opts.intro || this.defaultOptions.intro);
40
+ // Get missing parameters
41
+ const missingParams = this.getMissingParameters(variables, providedValues, opts.skipOptional);
42
+ if (missingParams.length === 0) {
43
+ p.outro("All parameters already provided!");
44
+ result.completed = true;
45
+ return result;
46
+ }
47
+ // Create timeout promise
48
+ const timeoutPromise = opts.timeout
49
+ ? setTimeout(opts.timeout).then(() => {
50
+ throw new Error("Prompt timeout");
51
+ })
52
+ : new Promise(() => { }); // Never resolves
53
+ // Create prompts
54
+ const promptsPromise = this.createPrompts(missingParams, variables);
55
+ // Race between prompts and timeout
56
+ const promptResults = (await Promise.race([promptsPromise, timeoutPromise]));
57
+ // Handle cancellation
58
+ if (p.isCancel(promptResults)) {
59
+ p.cancel("Operation cancelled");
60
+ result.cancelled = true;
61
+ return result;
62
+ }
63
+ // Merge results
64
+ result.values = { ...result.values, ...promptResults };
65
+ result.completed = true;
66
+ // Validate all parameters
67
+ const validation = this.validateParameters(variables, result.values);
68
+ if (!validation.valid) {
69
+ result.errors = validation.errors;
70
+ p.outro(`❌ Validation failed: ${validation.errors.join(", ")}`);
71
+ return result;
72
+ }
73
+ p.outro(opts.outro || this.defaultOptions.outro);
74
+ return result;
75
+ }
76
+ catch (error) {
77
+ if (error.message === "Prompt timeout") {
78
+ p.cancel("⏰ Prompt timeout - operation cancelled");
79
+ result.cancelled = true;
80
+ result.errors.push("Prompt timeout");
81
+ }
82
+ else {
83
+ p.cancel(`❌ Error: ${error.message}`);
84
+ result.errors.push(error.message);
85
+ }
86
+ return result;
87
+ }
88
+ }
89
+ /**
90
+ * Get parameters that need to be prompted for
91
+ */
92
+ getMissingParameters(variables, providedValues, skipOptional = false) {
93
+ const missing = [];
94
+ for (const [name, variable] of Object.entries(variables)) {
95
+ const hasValue = providedValues[name] !== undefined &&
96
+ providedValues[name] !== null &&
97
+ providedValues[name] !== "";
98
+ if (!hasValue) {
99
+ if (variable.required || (!skipOptional && variable.default === undefined)) {
100
+ missing.push(name);
101
+ }
102
+ }
103
+ }
104
+ return missing;
105
+ }
106
+ /**
107
+ * Create prompts for missing parameters
108
+ */
109
+ async createPrompts(parameterNames, variables) {
110
+ const prompts = {};
111
+ for (const name of parameterNames) {
112
+ const variable = variables[name];
113
+ if (!variable)
114
+ continue;
115
+ const prompt = await this.createPromptForVariable(name, variable);
116
+ prompts[name] = prompt;
117
+ }
118
+ return p.group(prompts, {
119
+ onCancel: () => {
120
+ p.cancel("Operation cancelled");
121
+ process.exit(0);
122
+ },
123
+ });
124
+ }
125
+ /**
126
+ * Create a prompt for a specific variable
127
+ */
128
+ async createPromptForVariable(name, variable) {
129
+ const message = variable.description || `Enter ${name}`;
130
+ switch (variable.type) {
131
+ case "string":
132
+ return p.text({
133
+ message,
134
+ placeholder: variable.default?.toString() || `Enter ${name}`,
135
+ defaultValue: variable.default?.toString(),
136
+ validate: (value) => this.validateStringInput(value, variable),
137
+ });
138
+ case "number":
139
+ return p.text({
140
+ message,
141
+ placeholder: variable.default?.toString() || "Enter number",
142
+ defaultValue: variable.default?.toString(),
143
+ validate: (value) => this.validateNumberInput(value, variable),
144
+ });
145
+ case "boolean":
146
+ return p.confirm({
147
+ message,
148
+ initialValue: variable.default ?? false,
149
+ });
150
+ case "enum": {
151
+ if (!variable.values || variable.values.length === 0) {
152
+ throw new Error(`Enum variable '${name}' has no values defined`);
153
+ }
154
+ // Check if this should be a multi-select based on default value or naming
155
+ const isMultiSelect = Array.isArray(variable.default) ||
156
+ name.toLowerCase().includes("methods") ||
157
+ name.toLowerCase().includes("tags") ||
158
+ name.toLowerCase().includes("features") ||
159
+ name.toLowerCase().includes("options");
160
+ if (isMultiSelect) {
161
+ const options = variable.values.map((value) => ({
162
+ value,
163
+ label: value,
164
+ hint: this.getEnumValueHint(value),
165
+ }));
166
+ return p.multiselect({
167
+ message,
168
+ options,
169
+ initialValues: Array.isArray(variable.default) ? variable.default : [],
170
+ required: variable.required,
171
+ });
172
+ }
173
+ const options = variable.values.map((value) => ({
174
+ value,
175
+ label: value,
176
+ hint: this.getEnumValueHint(value),
177
+ }));
178
+ return p.select({
179
+ message,
180
+ options,
181
+ initialValue: variable.default,
182
+ });
183
+ }
184
+ case "array":
185
+ return p.text({
186
+ message: `${message} (comma-separated)`,
187
+ placeholder: Array.isArray(variable.default)
188
+ ? variable.default.join(", ")
189
+ : "item1, item2, item3",
190
+ defaultValue: Array.isArray(variable.default) ? variable.default.join(", ") : "",
191
+ validate: (value) => this.validateArrayInput(value, variable),
192
+ });
193
+ default:
194
+ return p.text({
195
+ message,
196
+ placeholder: variable.default?.toString() || `Enter ${name}`,
197
+ defaultValue: variable.default?.toString(),
198
+ });
199
+ }
200
+ }
201
+ /**
202
+ * Get hint text for enum values
203
+ */
204
+ getEnumValueHint(value) {
205
+ // Common enum value hints
206
+ const hints = {
207
+ GET: "Retrieve data",
208
+ POST: "Create new resource",
209
+ PUT: "Update entire resource",
210
+ PATCH: "Update partial resource",
211
+ DELETE: "Remove resource",
212
+ react: "React framework",
213
+ vue: "Vue.js framework",
214
+ angular: "Angular framework",
215
+ svelte: "Svelte framework",
216
+ typescript: "TypeScript language",
217
+ javascript: "JavaScript language",
218
+ small: "Small size variant",
219
+ medium: "Medium size variant",
220
+ large: "Large size variant",
221
+ true: "Enable feature",
222
+ false: "Disable feature",
223
+ };
224
+ return hints[value.toLowerCase()];
225
+ }
226
+ /**
227
+ * Validate string input
228
+ */
229
+ validateStringInput(value, variable) {
230
+ if (variable.required && (!value || value.trim() === "")) {
231
+ return "This field is required";
232
+ }
233
+ if (value && variable.pattern) {
234
+ const regex = new RegExp(variable.pattern);
235
+ if (!regex.test(value)) {
236
+ return `Must match pattern: ${variable.pattern}`;
237
+ }
238
+ }
239
+ if (value && variable.min !== undefined && value.length < variable.min) {
240
+ return `Must be at least ${variable.min} characters`;
241
+ }
242
+ if (value && variable.max !== undefined && value.length > variable.max) {
243
+ return `Must be no more than ${variable.max} characters`;
244
+ }
245
+ return undefined;
246
+ }
247
+ /**
248
+ * Validate number input
249
+ */
250
+ validateNumberInput(value, variable) {
251
+ if (variable.required && (!value || value.trim() === "")) {
252
+ return "This field is required";
253
+ }
254
+ if (value) {
255
+ const num = Number(value);
256
+ if (Number.isNaN(num)) {
257
+ return "Must be a valid number";
258
+ }
259
+ if (variable.min !== undefined && num < variable.min) {
260
+ return `Must be at least ${variable.min}`;
261
+ }
262
+ if (variable.max !== undefined && num > variable.max) {
263
+ return `Must be no more than ${variable.max}`;
264
+ }
265
+ }
266
+ return undefined;
267
+ }
268
+ /**
269
+ * Validate array input
270
+ */
271
+ validateArrayInput(value, variable) {
272
+ if (variable.required && (!value || value.trim() === "")) {
273
+ return "This field is required";
274
+ }
275
+ if (value) {
276
+ const items = value
277
+ .split(",")
278
+ .map((item) => item.trim())
279
+ .filter((item) => item);
280
+ if (variable.min !== undefined && items.length < variable.min) {
281
+ return `Must have at least ${variable.min} items`;
282
+ }
283
+ if (variable.max !== undefined && items.length > variable.max) {
284
+ return `Must have no more than ${variable.max} items`;
285
+ }
286
+ }
287
+ return undefined;
288
+ }
289
+ /**
290
+ * Validate all parameters
291
+ */
292
+ validateParameters(variables, values) {
293
+ const errors = [];
294
+ for (const [name, variable] of Object.entries(variables)) {
295
+ const value = values[name];
296
+ // Check required
297
+ if (variable.required && (value === undefined || value === null || value === "")) {
298
+ errors.push(`${name} is required`);
299
+ continue;
300
+ }
301
+ // Skip validation for undefined optional values
302
+ if (value === undefined || value === null || value === "") {
303
+ continue;
304
+ }
305
+ // Type-specific validation
306
+ switch (variable.type) {
307
+ case "string":
308
+ if (typeof value !== "string") {
309
+ errors.push(`${name} must be a string`);
310
+ }
311
+ else if (variable.pattern) {
312
+ const regex = new RegExp(variable.pattern);
313
+ if (!regex.test(value)) {
314
+ errors.push(`${name} must match pattern: ${variable.pattern}`);
315
+ }
316
+ }
317
+ break;
318
+ case "number": {
319
+ const num = typeof value === "string" ? Number(value) : value;
320
+ if (Number.isNaN(num)) {
321
+ errors.push(`${name} must be a number`);
322
+ }
323
+ else {
324
+ if (variable.min !== undefined && num < variable.min) {
325
+ errors.push(`${name} must be at least ${variable.min}`);
326
+ }
327
+ if (variable.max !== undefined && num > variable.max) {
328
+ errors.push(`${name} must be no more than ${variable.max}`);
329
+ }
330
+ }
331
+ break;
332
+ }
333
+ case "boolean":
334
+ if (typeof value !== "boolean") {
335
+ errors.push(`${name} must be a boolean`);
336
+ }
337
+ break;
338
+ case "enum":
339
+ if (variable.values) {
340
+ if (Array.isArray(value)) {
341
+ // Multi-select enum
342
+ const invalidValues = value.filter((v) => !variable.values?.includes(v));
343
+ if (invalidValues.length > 0) {
344
+ errors.push(`${name} contains invalid values: ${invalidValues.join(", ")}`);
345
+ }
346
+ }
347
+ else {
348
+ // Single-select enum
349
+ if (!variable.values.includes(value)) {
350
+ errors.push(`${name} must be one of: ${variable.values.join(", ")}`);
351
+ }
352
+ }
353
+ }
354
+ break;
355
+ case "array":
356
+ if (!Array.isArray(value)) {
357
+ // Try to parse comma-separated string
358
+ if (typeof value === "string") {
359
+ const items = value
360
+ .split(",")
361
+ .map((item) => item.trim())
362
+ .filter((item) => item);
363
+ values[name] = items; // Update the value
364
+ }
365
+ else {
366
+ errors.push(`${name} must be an array`);
367
+ }
368
+ }
369
+ break;
370
+ }
371
+ }
372
+ return {
373
+ valid: errors.length === 0,
374
+ errors,
375
+ };
376
+ }
377
+ /**
378
+ * Create a spinner for long-running operations
379
+ */
380
+ static createSpinner(message = "Working...") {
381
+ return p.spinner();
382
+ }
383
+ /**
384
+ * Show a note to the user
385
+ */
386
+ static note(message, title) {
387
+ p.note(message, title);
388
+ }
389
+ /**
390
+ * Show a log message
391
+ */
392
+ static log(message) {
393
+ p.log.message(message);
394
+ }
395
+ /**
396
+ * Show an error message
397
+ */
398
+ static error(message) {
399
+ p.log.error(message);
400
+ }
401
+ /**
402
+ * Show a warning message
403
+ */
404
+ static warn(message) {
405
+ p.log.warn(message);
406
+ }
407
+ /**
408
+ * Show a success message
409
+ */
410
+ static success(message) {
411
+ p.log.success(message);
412
+ }
413
+ /**
414
+ * Show an info message
415
+ */
416
+ static info(message) {
417
+ p.log.info(message);
418
+ }
419
+ /**
420
+ * Create a simple confirmation prompt
421
+ */
422
+ static async confirm(message, initialValue = false) {
423
+ const result = await p.confirm({
424
+ message,
425
+ initialValue,
426
+ });
427
+ if (p.isCancel(result)) {
428
+ p.cancel("Operation cancelled");
429
+ process.exit(0);
430
+ }
431
+ return result;
432
+ }
433
+ /**
434
+ * Create a simple text input prompt
435
+ */
436
+ static async text(message, placeholder, defaultValue, validate) {
437
+ const result = await p.text({
438
+ message,
439
+ placeholder,
440
+ defaultValue,
441
+ validate,
442
+ });
443
+ if (p.isCancel(result)) {
444
+ p.cancel("Operation cancelled");
445
+ process.exit(0);
446
+ }
447
+ return result;
448
+ }
449
+ /**
450
+ * Create a simple select prompt
451
+ */
452
+ static async select(message, options, initialValue) {
453
+ const result = await p.select({
454
+ message,
455
+ options,
456
+ initialValue,
457
+ });
458
+ if (p.isCancel(result)) {
459
+ p.cancel("Operation cancelled");
460
+ process.exit(0);
461
+ }
462
+ return result;
463
+ }
464
+ /**
465
+ * Create a multi-select prompt
466
+ */
467
+ static async multiselect(message, options, initialValues = [], required = false) {
468
+ const result = await p.multiselect({
469
+ message,
470
+ options,
471
+ initialValues,
472
+ required,
473
+ });
474
+ if (p.isCancel(result)) {
475
+ p.cancel("Operation cancelled");
476
+ process.exit(0);
477
+ }
478
+ return result;
479
+ }
480
+ }
481
+ /**
482
+ * Perform interactive prompting for a set of prompts
483
+ *
484
+ * @param prompts Array of prompt configurations
485
+ * @param logger Optional logger for output
486
+ * @returns Promise resolving to answers object
487
+ */
488
+ export async function performInteractivePrompting(prompts, logger) {
489
+ const answers = {};
490
+ // Show intro message
491
+ p.intro(DEFAULT_INTRO);
492
+ try {
493
+ for (const prompt of prompts) {
494
+ let result;
495
+ switch (prompt.type) {
496
+ case "confirm":
497
+ result = await p.confirm({
498
+ message: prompt.message,
499
+ initialValue: prompt.default ?? false,
500
+ });
501
+ break;
502
+ case "list": {
503
+ const options = prompt.choices?.map((choice) => ({
504
+ value: choice,
505
+ label: choice,
506
+ })) || [];
507
+ result = await p.select({
508
+ message: prompt.message,
509
+ options,
510
+ initialValue: prompt.default,
511
+ });
512
+ break;
513
+ }
514
+ case "number":
515
+ result = await p.text({
516
+ message: prompt.message,
517
+ placeholder: prompt.default?.toString() || "Enter number",
518
+ defaultValue: prompt.default?.toString(),
519
+ validate: (value) => {
520
+ if (!value && prompt.default !== undefined)
521
+ return undefined;
522
+ const num = Number(value);
523
+ if (Number.isNaN(num))
524
+ return "Must be a valid number";
525
+ if (prompt.validate) {
526
+ const validation = prompt.validate(num);
527
+ if (validation === false) {
528
+ return "Invalid input";
529
+ }
530
+ return validation === true ? undefined : validation;
531
+ }
532
+ return undefined;
533
+ },
534
+ });
535
+ // Convert to number
536
+ result = result ? Number(result) : prompt.default;
537
+ break;
538
+ default:
539
+ result = await p.text({
540
+ message: prompt.message,
541
+ placeholder: prompt.default?.toString() || `Enter ${prompt.name}`,
542
+ defaultValue: prompt.default?.toString(),
543
+ validate: prompt.validate
544
+ ? (value) => {
545
+ if (!value && prompt.default !== undefined)
546
+ return undefined;
547
+ const validation = prompt.validate?.(value);
548
+ if (validation === false) {
549
+ return "Invalid input";
550
+ }
551
+ return validation === true ? undefined : validation;
552
+ }
553
+ : undefined,
554
+ });
555
+ break;
556
+ }
557
+ // Handle cancellation
558
+ if (p.isCancel(result)) {
559
+ p.cancel("Operation cancelled");
560
+ throw new Error("User cancelled prompts");
561
+ }
562
+ answers[prompt.name] = result;
563
+ }
564
+ p.outro(DEFAULT_OUTRO);
565
+ return answers;
566
+ }
567
+ catch (error) {
568
+ if (error instanceof Error && error.message !== "User cancelled prompts") {
569
+ p.cancel(`❌ Error: ${error.message}`);
570
+ }
571
+ throw error;
572
+ }
573
+ }
574
+ //# sourceMappingURL=interactive-prompts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interactive-prompts.js","sourceRoot":"","sources":["../../src/prompts/interactive-prompts.ts"],"names":[],"mappings":"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"}