mepcli 2.0.0-beta.1 → 2.0.0-beta.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 (357) hide show
  1. package/README.md +32 -10
  2. package/dist/ansi.d.ts +36 -0
  3. package/dist/ansi.js +1 -0
  4. package/dist/base.d.ts +60 -0
  5. package/dist/base.js +1 -0
  6. package/dist/{src/core.js → core.d.ts} +175 -347
  7. package/dist/core.js +1 -0
  8. package/dist/data/countries.d.ts +2 -0
  9. package/dist/data/countries.js +1 -0
  10. package/dist/data/licenses.d.ts +2 -0
  11. package/dist/data/licenses.js +1 -0
  12. package/dist/highlight.d.ts +7 -0
  13. package/dist/highlight.js +1 -0
  14. package/dist/index.d.ts +48 -0
  15. package/dist/index.js +1 -0
  16. package/dist/input.d.ts +14 -0
  17. package/dist/input.js +1 -0
  18. package/dist/pipeline.d.ts +90 -0
  19. package/dist/pipeline.js +1 -0
  20. package/dist/prompts/autocomplete.d.ts +22 -0
  21. package/dist/prompts/autocomplete.js +1 -0
  22. package/dist/prompts/box.d.ts +21 -0
  23. package/dist/prompts/box.js +4 -0
  24. package/dist/prompts/breadcrumb-search.d.ts +14 -0
  25. package/dist/prompts/breadcrumb-search.js +2 -0
  26. package/dist/prompts/breadcrumb.d.ts +32 -0
  27. package/dist/prompts/breadcrumb.js +3 -0
  28. package/dist/prompts/byte.d.ts +13 -0
  29. package/dist/prompts/byte.js +5 -0
  30. package/dist/prompts/calculator.d.ts +17 -0
  31. package/dist/prompts/calculator.js +3 -0
  32. package/dist/prompts/calendar.d.ts +33 -0
  33. package/dist/prompts/calendar.js +3 -0
  34. package/dist/prompts/checkbox.d.ts +13 -0
  35. package/dist/prompts/checkbox.js +2 -0
  36. package/dist/prompts/code.d.ts +19 -0
  37. package/dist/prompts/code.js +4 -0
  38. package/dist/prompts/color.d.ts +14 -0
  39. package/dist/prompts/color.js +10 -0
  40. package/dist/prompts/confirm.d.ts +8 -0
  41. package/dist/prompts/confirm.js +1 -0
  42. package/dist/prompts/connection-string.d.ts +18 -0
  43. package/dist/prompts/connection-string.js +1 -0
  44. package/dist/prompts/cron.d.ts +13 -0
  45. package/dist/prompts/cron.js +4 -0
  46. package/dist/prompts/curl-utils.d.ts +25 -0
  47. package/dist/prompts/curl-utils.js +1 -0
  48. package/dist/prompts/curl.d.ts +41 -0
  49. package/dist/prompts/curl.js +12 -0
  50. package/dist/prompts/data-inspector.d.ts +22 -0
  51. package/dist/prompts/data-inspector.js +5 -0
  52. package/dist/prompts/date.d.ts +12 -0
  53. package/dist/prompts/date.js +2 -0
  54. package/dist/prompts/dependency.d.ts +16 -0
  55. package/dist/prompts/dependency.js +3 -0
  56. package/dist/prompts/dial.d.ts +10 -0
  57. package/dist/prompts/dial.js +3 -0
  58. package/dist/prompts/diff.d.ts +10 -0
  59. package/dist/prompts/diff.js +10 -0
  60. package/dist/prompts/draw.d.ts +20 -0
  61. package/dist/prompts/draw.js +6 -0
  62. package/dist/prompts/editor.d.ts +14 -0
  63. package/dist/prompts/editor.js +2 -0
  64. package/dist/prompts/emoji.d.ts +18 -0
  65. package/dist/prompts/emoji.js +5 -0
  66. package/dist/prompts/exec.d.ts +17 -0
  67. package/dist/prompts/exec.js +1 -0
  68. package/dist/prompts/file.d.ts +21 -0
  69. package/dist/prompts/file.js +2 -0
  70. package/dist/prompts/form.d.ts +18 -0
  71. package/dist/prompts/form.js +1 -0
  72. package/dist/prompts/fuzzy-multi-column.d.ts +12 -0
  73. package/dist/prompts/fuzzy-multi-column.js +2 -0
  74. package/dist/prompts/fuzzy.d.ts +12 -0
  75. package/dist/prompts/fuzzy.js +2 -0
  76. package/dist/prompts/gauge.d.ts +21 -0
  77. package/dist/prompts/gauge.js +4 -0
  78. package/dist/prompts/grid.d.ts +14 -0
  79. package/dist/prompts/grid.js +2 -0
  80. package/dist/prompts/heatmap.d.ts +13 -0
  81. package/dist/prompts/heatmap.js +2 -0
  82. package/dist/prompts/ip.d.ts +11 -0
  83. package/dist/prompts/ip.js +3 -0
  84. package/dist/prompts/kanban.d.ts +17 -0
  85. package/dist/prompts/kanban.js +4 -0
  86. package/dist/prompts/keypress.d.ts +7 -0
  87. package/dist/prompts/keypress.js +1 -0
  88. package/dist/prompts/license.d.ts +9 -0
  89. package/dist/prompts/license.js +13 -0
  90. package/dist/prompts/list.d.ts +9 -0
  91. package/dist/prompts/list.js +1 -0
  92. package/dist/prompts/map.d.ts +17 -0
  93. package/dist/prompts/map.js +5 -0
  94. package/dist/prompts/match.d.ts +19 -0
  95. package/dist/prompts/match.js +7 -0
  96. package/dist/prompts/miller.d.ts +15 -0
  97. package/dist/prompts/miller.js +2 -0
  98. package/dist/prompts/multi-column-select.d.ts +10 -0
  99. package/dist/prompts/multi-column-select.js +2 -0
  100. package/dist/prompts/multi-range.d.ts +9 -0
  101. package/dist/prompts/multi-range.js +3 -0
  102. package/dist/prompts/multi-select.d.ts +15 -0
  103. package/dist/prompts/multi-select.js +4 -0
  104. package/dist/prompts/number.d.ts +11 -0
  105. package/dist/prompts/number.js +2 -0
  106. package/dist/prompts/otp.d.ts +10 -0
  107. package/dist/prompts/otp.js +2 -0
  108. package/dist/prompts/pattern.d.ts +22 -0
  109. package/dist/prompts/pattern.js +4 -0
  110. package/dist/prompts/phone.d.ts +41 -0
  111. package/dist/prompts/phone.js +3 -0
  112. package/dist/prompts/quiz-select.d.ts +10 -0
  113. package/dist/prompts/quiz-select.js +7 -0
  114. package/dist/prompts/quiz-text.d.ts +11 -0
  115. package/dist/prompts/quiz-text.js +8 -0
  116. package/dist/prompts/range.d.ts +9 -0
  117. package/dist/prompts/range.js +1 -0
  118. package/dist/prompts/rating.d.ts +8 -0
  119. package/dist/prompts/rating.js +1 -0
  120. package/dist/prompts/regex.d.ts +13 -0
  121. package/dist/prompts/regex.js +5 -0
  122. package/dist/prompts/region.d.ts +11 -0
  123. package/dist/prompts/region.js +5 -0
  124. package/dist/prompts/schedule.d.ts +20 -0
  125. package/dist/prompts/schedule.js +5 -0
  126. package/dist/prompts/scroll.d.ts +13 -0
  127. package/dist/prompts/scroll.js +1 -0
  128. package/dist/prompts/seat.d.ts +17 -0
  129. package/dist/prompts/seat.js +5 -0
  130. package/dist/prompts/select-range.d.ts +8 -0
  131. package/dist/prompts/select-range.js +3 -0
  132. package/dist/prompts/select.d.ts +15 -0
  133. package/dist/prompts/select.js +2 -0
  134. package/dist/prompts/semver.d.ts +6 -0
  135. package/dist/prompts/semver.js +1 -0
  136. package/dist/prompts/shortcut.d.ts +9 -0
  137. package/dist/prompts/shortcut.js +1 -0
  138. package/dist/prompts/slider.d.ts +8 -0
  139. package/dist/prompts/slider.js +1 -0
  140. package/dist/prompts/slot.d.ts +16 -0
  141. package/dist/prompts/slot.js +8 -0
  142. package/dist/prompts/snippet.d.ts +19 -0
  143. package/dist/prompts/snippet.js +4 -0
  144. package/dist/prompts/sort-grid.d.ts +16 -0
  145. package/dist/prompts/sort-grid.js +2 -0
  146. package/dist/prompts/sort.d.ts +14 -0
  147. package/dist/prompts/sort.js +2 -0
  148. package/dist/prompts/spam.d.ts +17 -0
  149. package/dist/prompts/spam.js +2 -0
  150. package/dist/prompts/spreadsheet.d.ts +21 -0
  151. package/dist/prompts/spreadsheet.js +7 -0
  152. package/dist/prompts/table.d.ts +14 -0
  153. package/dist/prompts/table.js +3 -0
  154. package/dist/prompts/text.d.ts +17 -0
  155. package/dist/prompts/text.js +2 -0
  156. package/dist/prompts/time.d.ts +12 -0
  157. package/dist/prompts/time.js +2 -0
  158. package/dist/prompts/toggle.d.ts +8 -0
  159. package/dist/prompts/toggle.js +1 -0
  160. package/dist/prompts/transfer.d.ts +18 -0
  161. package/dist/prompts/transfer.js +5 -0
  162. package/dist/prompts/tree-select.d.ts +31 -0
  163. package/dist/prompts/tree-select.js +3 -0
  164. package/dist/prompts/tree.d.ts +20 -0
  165. package/dist/prompts/tree.js +3 -0
  166. package/dist/prompts/wait.d.ts +18 -0
  167. package/dist/prompts/wait.js +1 -0
  168. package/dist/spinner.d.ts +33 -0
  169. package/dist/spinner.js +3 -0
  170. package/dist/symbols.d.ts +33 -0
  171. package/dist/symbols.js +1 -0
  172. package/dist/tasks.d.ts +57 -0
  173. package/dist/tasks.js +1 -0
  174. package/dist/theme.d.ts +2 -0
  175. package/dist/theme.js +1 -0
  176. package/dist/types.d.ts +503 -0
  177. package/dist/types.js +1 -0
  178. package/dist/utils.d.ts +81 -0
  179. package/dist/utils.js +1 -0
  180. package/package.json +12 -17
  181. package/dist/src/ansi.js +0 -50
  182. package/dist/src/ansi.js.map +0 -1
  183. package/dist/src/base.js +0 -258
  184. package/dist/src/base.js.map +0 -1
  185. package/dist/src/core.js.map +0 -1
  186. package/dist/src/data/countries.js +0 -569
  187. package/dist/src/data/countries.js.map +0 -1
  188. package/dist/src/data/licenses.js +0 -480
  189. package/dist/src/data/licenses.js.map +0 -1
  190. package/dist/src/highlight.js +0 -185
  191. package/dist/src/highlight.js.map +0 -1
  192. package/dist/src/index.js +0 -66
  193. package/dist/src/index.js.map +0 -1
  194. package/dist/src/input.js +0 -158
  195. package/dist/src/input.js.map +0 -1
  196. package/dist/src/pipeline.js +0 -273
  197. package/dist/src/pipeline.js.map +0 -1
  198. package/dist/src/prompts/autocomplete.js +0 -171
  199. package/dist/src/prompts/autocomplete.js.map +0 -1
  200. package/dist/src/prompts/box.js +0 -225
  201. package/dist/src/prompts/box.js.map +0 -1
  202. package/dist/src/prompts/breadcrumb-search.js +0 -260
  203. package/dist/src/prompts/breadcrumb-search.js.map +0 -1
  204. package/dist/src/prompts/breadcrumb.js +0 -307
  205. package/dist/src/prompts/breadcrumb.js.map +0 -1
  206. package/dist/src/prompts/byte.js +0 -176
  207. package/dist/src/prompts/byte.js.map +0 -1
  208. package/dist/src/prompts/calculator.js +0 -243
  209. package/dist/src/prompts/calculator.js.map +0 -1
  210. package/dist/src/prompts/calendar.js +0 -430
  211. package/dist/src/prompts/calendar.js.map +0 -1
  212. package/dist/src/prompts/checkbox.js +0 -159
  213. package/dist/src/prompts/checkbox.js.map +0 -1
  214. package/dist/src/prompts/code.js +0 -271
  215. package/dist/src/prompts/code.js.map +0 -1
  216. package/dist/src/prompts/color.js +0 -165
  217. package/dist/src/prompts/color.js.map +0 -1
  218. package/dist/src/prompts/confirm.js +0 -55
  219. package/dist/src/prompts/confirm.js.map +0 -1
  220. package/dist/src/prompts/connection-string.js +0 -120
  221. package/dist/src/prompts/connection-string.js.map +0 -1
  222. package/dist/src/prompts/cron.js +0 -207
  223. package/dist/src/prompts/cron.js.map +0 -1
  224. package/dist/src/prompts/curl-utils.js +0 -71
  225. package/dist/src/prompts/curl-utils.js.map +0 -1
  226. package/dist/src/prompts/curl.js +0 -431
  227. package/dist/src/prompts/curl.js.map +0 -1
  228. package/dist/src/prompts/data-inspector.js +0 -261
  229. package/dist/src/prompts/data-inspector.js.map +0 -1
  230. package/dist/src/prompts/date.js +0 -185
  231. package/dist/src/prompts/date.js.map +0 -1
  232. package/dist/src/prompts/dependency.js +0 -283
  233. package/dist/src/prompts/dependency.js.map +0 -1
  234. package/dist/src/prompts/dial.js +0 -124
  235. package/dist/src/prompts/dial.js.map +0 -1
  236. package/dist/src/prompts/diff.js +0 -118
  237. package/dist/src/prompts/diff.js.map +0 -1
  238. package/dist/src/prompts/draw.js +0 -191
  239. package/dist/src/prompts/draw.js.map +0 -1
  240. package/dist/src/prompts/editor.js +0 -234
  241. package/dist/src/prompts/editor.js.map +0 -1
  242. package/dist/src/prompts/emoji.js +0 -226
  243. package/dist/src/prompts/emoji.js.map +0 -1
  244. package/dist/src/prompts/exec.js +0 -151
  245. package/dist/src/prompts/exec.js.map +0 -1
  246. package/dist/src/prompts/file.js +0 -217
  247. package/dist/src/prompts/file.js.map +0 -1
  248. package/dist/src/prompts/form.js +0 -241
  249. package/dist/src/prompts/form.js.map +0 -1
  250. package/dist/src/prompts/fuzzy-multi-column.js +0 -161
  251. package/dist/src/prompts/fuzzy-multi-column.js.map +0 -1
  252. package/dist/src/prompts/fuzzy.js +0 -147
  253. package/dist/src/prompts/fuzzy.js.map +0 -1
  254. package/dist/src/prompts/gauge.js +0 -137
  255. package/dist/src/prompts/gauge.js.map +0 -1
  256. package/dist/src/prompts/grid.js +0 -191
  257. package/dist/src/prompts/grid.js.map +0 -1
  258. package/dist/src/prompts/heatmap.js +0 -147
  259. package/dist/src/prompts/heatmap.js.map +0 -1
  260. package/dist/src/prompts/ip.js +0 -138
  261. package/dist/src/prompts/ip.js.map +0 -1
  262. package/dist/src/prompts/kanban.js +0 -233
  263. package/dist/src/prompts/kanban.js.map +0 -1
  264. package/dist/src/prompts/keypress.js +0 -54
  265. package/dist/src/prompts/keypress.js.map +0 -1
  266. package/dist/src/prompts/license.js +0 -144
  267. package/dist/src/prompts/license.js.map +0 -1
  268. package/dist/src/prompts/list.js +0 -124
  269. package/dist/src/prompts/list.js.map +0 -1
  270. package/dist/src/prompts/map.js +0 -262
  271. package/dist/src/prompts/map.js.map +0 -1
  272. package/dist/src/prompts/match.js +0 -271
  273. package/dist/src/prompts/match.js.map +0 -1
  274. package/dist/src/prompts/miller.js +0 -228
  275. package/dist/src/prompts/miller.js.map +0 -1
  276. package/dist/src/prompts/multi-column-select.js +0 -176
  277. package/dist/src/prompts/multi-column-select.js.map +0 -1
  278. package/dist/src/prompts/multi-range.js +0 -189
  279. package/dist/src/prompts/multi-range.js.map +0 -1
  280. package/dist/src/prompts/multi-select.js +0 -183
  281. package/dist/src/prompts/multi-select.js.map +0 -1
  282. package/dist/src/prompts/number.js +0 -166
  283. package/dist/src/prompts/number.js.map +0 -1
  284. package/dist/src/prompts/otp.js +0 -107
  285. package/dist/src/prompts/otp.js.map +0 -1
  286. package/dist/src/prompts/pattern.js +0 -252
  287. package/dist/src/prompts/pattern.js.map +0 -1
  288. package/dist/src/prompts/phone.js +0 -398
  289. package/dist/src/prompts/phone.js.map +0 -1
  290. package/dist/src/prompts/quiz-select.js +0 -114
  291. package/dist/src/prompts/quiz-select.js.map +0 -1
  292. package/dist/src/prompts/quiz-text.js +0 -98
  293. package/dist/src/prompts/quiz-text.js.map +0 -1
  294. package/dist/src/prompts/range.js +0 -164
  295. package/dist/src/prompts/range.js.map +0 -1
  296. package/dist/src/prompts/rating.js +0 -83
  297. package/dist/src/prompts/rating.js.map +0 -1
  298. package/dist/src/prompts/regex.js +0 -145
  299. package/dist/src/prompts/regex.js.map +0 -1
  300. package/dist/src/prompts/region.js +0 -170
  301. package/dist/src/prompts/region.js.map +0 -1
  302. package/dist/src/prompts/schedule.js +0 -270
  303. package/dist/src/prompts/schedule.js.map +0 -1
  304. package/dist/src/prompts/scroll.js +0 -155
  305. package/dist/src/prompts/scroll.js.map +0 -1
  306. package/dist/src/prompts/seat.js +0 -164
  307. package/dist/src/prompts/seat.js.map +0 -1
  308. package/dist/src/prompts/select-range.js +0 -148
  309. package/dist/src/prompts/select-range.js.map +0 -1
  310. package/dist/src/prompts/select.js +0 -163
  311. package/dist/src/prompts/select.js.map +0 -1
  312. package/dist/src/prompts/semver.js +0 -43
  313. package/dist/src/prompts/semver.js.map +0 -1
  314. package/dist/src/prompts/shortcut.js +0 -133
  315. package/dist/src/prompts/shortcut.js.map +0 -1
  316. package/dist/src/prompts/slider.js +0 -69
  317. package/dist/src/prompts/slider.js.map +0 -1
  318. package/dist/src/prompts/slot.js +0 -117
  319. package/dist/src/prompts/slot.js.map +0 -1
  320. package/dist/src/prompts/snippet.js +0 -228
  321. package/dist/src/prompts/snippet.js.map +0 -1
  322. package/dist/src/prompts/sort-grid.js +0 -151
  323. package/dist/src/prompts/sort-grid.js.map +0 -1
  324. package/dist/src/prompts/sort.js +0 -166
  325. package/dist/src/prompts/sort.js.map +0 -1
  326. package/dist/src/prompts/spam.js +0 -80
  327. package/dist/src/prompts/spam.js.map +0 -1
  328. package/dist/src/prompts/spreadsheet.js +0 -240
  329. package/dist/src/prompts/spreadsheet.js.map +0 -1
  330. package/dist/src/prompts/table.js +0 -120
  331. package/dist/src/prompts/table.js.map +0 -1
  332. package/dist/src/prompts/text.js +0 -317
  333. package/dist/src/prompts/text.js.map +0 -1
  334. package/dist/src/prompts/time.js +0 -211
  335. package/dist/src/prompts/time.js.map +0 -1
  336. package/dist/src/prompts/toggle.js +0 -53
  337. package/dist/src/prompts/toggle.js.map +0 -1
  338. package/dist/src/prompts/transfer.js +0 -207
  339. package/dist/src/prompts/transfer.js.map +0 -1
  340. package/dist/src/prompts/tree-select.js +0 -270
  341. package/dist/src/prompts/tree-select.js.map +0 -1
  342. package/dist/src/prompts/tree.js +0 -233
  343. package/dist/src/prompts/tree.js.map +0 -1
  344. package/dist/src/prompts/wait.js +0 -79
  345. package/dist/src/prompts/wait.js.map +0 -1
  346. package/dist/src/spinner.js +0 -105
  347. package/dist/src/spinner.js.map +0 -1
  348. package/dist/src/symbols.js +0 -66
  349. package/dist/src/symbols.js.map +0 -1
  350. package/dist/src/tasks.js +0 -231
  351. package/dist/src/tasks.js.map +0 -1
  352. package/dist/src/theme.js +0 -29
  353. package/dist/src/theme.js.map +0 -1
  354. package/dist/src/types.js +0 -8
  355. package/dist/src/types.js.map +0 -1
  356. package/dist/src/utils.js +0 -480
  357. package/dist/src/utils.js.map +0 -1
package/README.md CHANGED
@@ -215,20 +215,42 @@ tasks.success('download', 'Downloaded');
215
215
  tasks.stop();
216
216
  ```
217
217
 
218
- ## Pipeline (Workflow Engine) <sub style="color:orange">(Experimental)</sub>
218
+ ## Pipeline (Workflow Engine)
219
219
 
220
- The **Pipeline** API allows you to orchestrate a sequence of prompts that share a common context. It follows the **Enter-and-Forget** philosophy (exceptions stop the flow) and uses a fluent Builder pattern.
220
+ Pipelines provide a powerful, sequential workflow engine. Based on the philosophy of **Enter-and-Forget (EAF)**, **Zero-Dependency**, and **Method Chaining**, Pipelines allow you to chain actions, prompts, and tasks sequentially, accumulating their results into a Context object.
221
221
 
222
222
  ```typescript
223
- const result = await MepCLI.pipeline()
224
- .step('name', () => MepCLI.text({ message: 'Name:' }))
223
+ import { MepCLI, Pipeline } from 'mepcli';
224
+ import { z } from 'zod';
225
+
226
+ interface Context {
227
+ name: string;
228
+ age: number;
229
+ email?: string;
230
+ parentalConsent?: boolean;
231
+ }
232
+
233
+ const result = await new Pipeline<Context>()
234
+ .step('name', async () => {
235
+ return await MepCLI.text({ message: 'What is your name?' });
236
+ }, {
237
+ validate: (val) => val.length > 0 || 'Name is required'
238
+ })
239
+ .step('age', async () => {
240
+ return await MepCLI.number({ message: 'How old are you?' });
241
+ }, {
242
+ transform: (val) => Number(val),
243
+ validate: z.number().min(0, "Age must be positive")
244
+ })
225
245
  .stepIf(
226
- (ctx) => ctx.name === 'admin',
227
- 'role',
228
- () => MepCLI.select({
229
- message: 'Role:',
230
- choices: ['SuperUser', 'Maintainer']
231
- })
246
+ (ctx) => ctx.age < 18,
247
+ 'parentalConsent',
248
+ async () => {
249
+ return await MepCLI.confirm({ message: 'Do you have parental consent?' });
250
+ },
251
+ {
252
+ validate: (val) => val === true || 'Parental consent is required'
253
+ }
232
254
  )
233
255
  .run();
234
256
  ```
package/dist/ansi.d.ts ADDED
@@ -0,0 +1,36 @@
1
+ /**
2
+ * ANSI Escape Codes
3
+ * Manual definitions to maintain zero-dependency status.
4
+ */
5
+ export declare const ANSI: {
6
+ RESET: string;
7
+ BOLD: string;
8
+ DIM: string;
9
+ ITALIC: string;
10
+ UNDERLINE: string;
11
+ REVERSE: string;
12
+ FG_GREEN: string;
13
+ FG_CYAN: string;
14
+ FG_YELLOW: string;
15
+ FG_RED: string;
16
+ FG_GRAY: string;
17
+ FG_WHITE: string;
18
+ FG_BLUE: string;
19
+ FG_MAGENTA: string;
20
+ FG_BLACK: string;
21
+ BG_YELLOW: string;
22
+ BG_BLUE: string;
23
+ BG_CYAN: string;
24
+ BG_GREEN: string;
25
+ BG_RED: string;
26
+ ERASE_LINE: string;
27
+ ERASE_DOWN: string;
28
+ CURSOR_LEFT: string;
29
+ HIDE_CURSOR: string;
30
+ SHOW_CURSOR: string;
31
+ UP: string;
32
+ DOWN: string;
33
+ SET_ANY_EVENT_MOUSE: string;
34
+ SET_SGR_EXT_MODE_MOUSE: string;
35
+ DISABLE_MOUSE: string;
36
+ };
package/dist/ansi.js ADDED
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});Object.defineProperty(exports,"ANSI",{enumerable:true,get:function(){return ANSI}});const ANSI={RESET:"\x1b[0m",BOLD:"\x1b[1m",DIM:"\x1b[2m",ITALIC:"\x1b[3m",UNDERLINE:"\x1b[4m",REVERSE:"\x1b[7m",FG_GREEN:"\x1b[32m",FG_CYAN:"\x1b[36m",FG_YELLOW:"\x1b[33m",FG_RED:"\x1b[31m",FG_GRAY:"\x1b[90m",FG_WHITE:"\x1b[37m",FG_BLUE:"\x1b[34m",FG_MAGENTA:"\x1b[35m",FG_BLACK:"\x1b[30m",BG_YELLOW:"\x1b[43m",BG_BLUE:"\x1b[44m",BG_CYAN:"\x1b[46m",BG_GREEN:"\x1b[42m",BG_RED:"\x1b[41m",ERASE_LINE:"\x1b[2K",ERASE_DOWN:"\x1b[J",CURSOR_LEFT:"\x1b[1000D",HIDE_CURSOR:"\x1b[?25l",SHOW_CURSOR:"\x1b[?25h",UP:"\x1b[A",DOWN:"\x1b[B",SET_ANY_EVENT_MOUSE:"\x1b[?1003h",SET_SGR_EXT_MODE_MOUSE:"\x1b[?1006h",DISABLE_MOUSE:"\x1b[?1003l\x1b[?1006l"};
package/dist/base.d.ts ADDED
@@ -0,0 +1,60 @@
1
+ import { MouseEvent } from './types';
2
+ import { detectCapabilities } from './utils';
3
+ /**
4
+ * Abstract base class for all prompts.
5
+ * Implements a Robust Linear Scan Diffing Engine.
6
+ */
7
+ export declare abstract class Prompt<T, O> {
8
+ protected options: O;
9
+ protected value: any;
10
+ protected stdin: NodeJS.ReadStream;
11
+ protected stdout: NodeJS.WriteStream;
12
+ private _resolve?;
13
+ private _reject?;
14
+ private _inputParser;
15
+ private _onKeyHandler?;
16
+ private _onDataHandler?;
17
+ private static warnedComponents;
18
+ protected lastRenderLines: string[];
19
+ protected lastRenderHeight: number;
20
+ protected capabilities: ReturnType<typeof detectCapabilities>;
21
+ constructor(options: O);
22
+ /**
23
+ * Checks if running on Windows and logs a warning message once per component type.
24
+ * Call this in the constructor of problematic prompts.
25
+ */
26
+ protected checkWindowsAttention(): void;
27
+ /**
28
+ * Warn about experimental prompts.
29
+ * Call this in the constructor of experimental prompts.
30
+ */
31
+ protected warnExperimental(): void;
32
+ protected abstract render(firstRender: boolean): void;
33
+ protected abstract handleInput(char: string, key: Buffer): void;
34
+ protected handleMouse(_event: MouseEvent): void;
35
+ protected print(text: string): void;
36
+ run(): Promise<T>;
37
+ /**
38
+ * Pauses the input stream and removes listeners.
39
+ * Useful for yielding control to child processes.
40
+ */
41
+ protected pauseInput(): void;
42
+ /**
43
+ * Resumes the input stream and re-attaches listeners.
44
+ */
45
+ protected resumeInput(): void;
46
+ protected cleanup(): void;
47
+ protected submit(result: T): void;
48
+ protected cancel(reason: any): void;
49
+ /**
50
+ * Renders the frame using a linear scan diffing algorithm.
51
+ * Prevents flicker and handles height changes (expand/collapse) robustly.
52
+ */
53
+ protected renderFrame(content: string): void;
54
+ protected stripAnsi(str: string): string;
55
+ protected truncate(str: string, width: number): string;
56
+ protected isUp(char: string): boolean;
57
+ protected isDown(char: string): boolean;
58
+ protected isRight(char: string): boolean;
59
+ protected isLeft(char: string): boolean;
60
+ }
package/dist/base.js ADDED
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});Object.defineProperty(exports,"Prompt",{enumerable:true,get:function(){return Prompt}});const _ansi=require("./ansi");const _input=require("./input");const _utils=require("./utils");function _define_property(obj,key,value){if(key in obj){Object.defineProperty(obj,key,{value:value,enumerable:true,configurable:true,writable:true})}else{obj[key]=value}return obj}let Prompt=class Prompt{checkWindowsAttention(){const componentName=this.constructor.name;if(process.platform==="win32"&&!Prompt.warnedComponents.has(componentName)){console.warn(`${_ansi.ANSI.FG_YELLOW}Warning:${_ansi.ANSI.RESET} ${componentName} may hang on Windows TTY after multiple cycles. `+`Press 'Enter' if unresponsive.`);Prompt.warnedComponents.add(componentName)}}warnExperimental(){const componentName=this.constructor.name;if(!Prompt.warnedComponents.has(componentName)){console.warn(`${_ansi.ANSI.FG_YELLOW}Warning:${_ansi.ANSI.RESET} ${componentName} is an experimental prompt and may have bugs or unexpected behavior. `+`Use with caution.`);Prompt.warnedComponents.add(componentName)}}handleMouse(_event){}print(text){this.stdout.write(text)}run(){return new Promise((resolve,reject)=>{this._resolve=resolve;this._reject=reject;if(typeof this.stdin.setRawMode==="function"){this.stdin.setRawMode(true)}this.stdin.resume();this.stdin.setEncoding("utf8");const shouldEnableMouse=this.options.mouse!==false&&this.capabilities.hasMouse;if(shouldEnableMouse){this.print(_ansi.ANSI.SET_ANY_EVENT_MOUSE+_ansi.ANSI.SET_SGR_EXT_MODE_MOUSE)}this.print(_ansi.ANSI.HIDE_CURSOR);this.render(true);this._onKeyHandler=(char,buffer)=>{if(char==="\x03"){this.cleanup();this.print(_ansi.ANSI.SHOW_CURSOR+"\n");if(this._reject)this._reject(new Error("User force closed"));return}this.handleInput(char,buffer)};this._inputParser.on("keypress",this._onKeyHandler);this._inputParser.on("mouse",event=>{this.handleMouse(event)});this._onDataHandler=buffer=>{this._inputParser.feed(buffer)};this.stdin.on("data",this._onDataHandler)})}pauseInput(){if(this._onDataHandler){this.stdin.removeListener("data",this._onDataHandler)}if(typeof this.stdin.setRawMode==="function"){this.stdin.setRawMode(false)}this.stdin.pause()}resumeInput(){if(typeof this.stdin.setRawMode==="function"){this.stdin.setRawMode(true)}this.stdin.resume();if(this._onDataHandler){this.stdin.on("data",this._onDataHandler)}}cleanup(){if(this._onDataHandler){this.stdin.removeListener("data",this._onDataHandler)}if(this._onKeyHandler){this._inputParser.removeListener("keypress",this._onKeyHandler)}this.print(_ansi.ANSI.DISABLE_MOUSE);if(typeof this.stdin.setRawMode==="function"){this.stdin.setRawMode(false)}this.stdin.pause();this.print(_ansi.ANSI.SHOW_CURSOR)}submit(result){this.cleanup();this.print("\n");if(this._resolve)this._resolve(result)}cancel(reason){this.cleanup();this.print("\n");if(this._reject)this._reject(reason)}renderFrame(content){const width=this.stdout.columns||80;const rawLines=content.split("\n");const newLines=rawLines.map(line=>this.truncate(line,width));if(this.lastRenderLines.length===0){this.print(newLines.join("\n"));this.lastRenderLines=newLines;this.lastRenderHeight=newLines.length;return}let outputBuffer="";if(this.lastRenderHeight>1){outputBuffer+=`\x1b[${this.lastRenderHeight-1}A`}outputBuffer+="\r";for(let i=0;i<newLines.length;i++){const newLine=newLines[i];if(i>0){if(i<this.lastRenderLines.length){outputBuffer+="\x1b[B\r"}else{outputBuffer+="\n"}}if(i<this.lastRenderLines.length){const oldLine=this.lastRenderLines[i];if(newLine!==oldLine){outputBuffer+=_ansi.ANSI.ERASE_LINE+newLine}}else{outputBuffer+=newLine}}if(newLines.length<this.lastRenderLines.length){outputBuffer+="\n";outputBuffer+=_ansi.ANSI.ERASE_DOWN;outputBuffer+=`\x1b[A`}this.print(outputBuffer);this.lastRenderLines=newLines;this.lastRenderHeight=newLines.length}stripAnsi(str){return(0,_utils.stripAnsi)(str)}truncate(str,width){const visualWidth=(0,_utils.stringWidth)(str);if(visualWidth<=width){return str}let currentWidth=0;let cutIndex=0;let inAnsi=false;for(let i=0;i<str.length;i++){if(str[i]==="\x1b")inAnsi=true;if(!inAnsi){const code=str.charCodeAt(i);const charWidth=code>255?2:1;if(currentWidth+charWidth>width-3){break}currentWidth+=charWidth}else{if(str[i]==="m"||str[i]>="A"&&str[i]<="Z")inAnsi=false}cutIndex=i+1}return str.substring(0,cutIndex)+"..."+_ansi.ANSI.RESET}isUp(char){return char==="\x1b[A"||char==="\x1bOA"}isDown(char){return char==="\x1b[B"||char==="\x1bOB"}isRight(char){return char==="\x1b[C"||char==="\x1bOC"}isLeft(char){return char==="\x1b[D"||char==="\x1bOD"}constructor(options){_define_property(this,"options",void 0);_define_property(this,"value",void 0);_define_property(this,"stdin",void 0);_define_property(this,"stdout",void 0);_define_property(this,"_resolve",void 0);_define_property(this,"_reject",void 0);_define_property(this,"_inputParser",void 0);_define_property(this,"_onKeyHandler",void 0);_define_property(this,"_onDataHandler",void 0);_define_property(this,"lastRenderLines",[]);_define_property(this,"lastRenderHeight",0);_define_property(this,"capabilities",void 0);this.options=options;this.stdin=process.stdin;this.stdout=process.stdout;this._inputParser=new _input.InputParser;this.capabilities=(0,_utils.detectCapabilities)()}};_define_property(Prompt,"warnedComponents",new Set);