mepcli 2.0.0-beta.2 → 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 (356) hide show
  1. package/dist/ansi.d.ts +36 -0
  2. package/dist/ansi.js +1 -0
  3. package/dist/base.d.ts +60 -0
  4. package/dist/base.js +1 -0
  5. package/dist/{src/core.js → core.d.ts} +175 -345
  6. package/dist/core.js +1 -0
  7. package/dist/data/countries.d.ts +2 -0
  8. package/dist/data/countries.js +1 -0
  9. package/dist/data/licenses.d.ts +2 -0
  10. package/dist/data/licenses.js +1 -0
  11. package/dist/highlight.d.ts +7 -0
  12. package/dist/highlight.js +1 -0
  13. package/dist/index.d.ts +48 -0
  14. package/dist/index.js +1 -0
  15. package/dist/input.d.ts +14 -0
  16. package/dist/input.js +1 -0
  17. package/dist/pipeline.d.ts +90 -0
  18. package/dist/pipeline.js +1 -0
  19. package/dist/prompts/autocomplete.d.ts +22 -0
  20. package/dist/prompts/autocomplete.js +1 -0
  21. package/dist/prompts/box.d.ts +21 -0
  22. package/dist/prompts/box.js +4 -0
  23. package/dist/prompts/breadcrumb-search.d.ts +14 -0
  24. package/dist/prompts/breadcrumb-search.js +2 -0
  25. package/dist/prompts/breadcrumb.d.ts +32 -0
  26. package/dist/prompts/breadcrumb.js +3 -0
  27. package/dist/prompts/byte.d.ts +13 -0
  28. package/dist/prompts/byte.js +5 -0
  29. package/dist/prompts/calculator.d.ts +17 -0
  30. package/dist/prompts/calculator.js +3 -0
  31. package/dist/prompts/calendar.d.ts +33 -0
  32. package/dist/prompts/calendar.js +3 -0
  33. package/dist/prompts/checkbox.d.ts +13 -0
  34. package/dist/prompts/checkbox.js +2 -0
  35. package/dist/prompts/code.d.ts +19 -0
  36. package/dist/prompts/code.js +4 -0
  37. package/dist/prompts/color.d.ts +14 -0
  38. package/dist/prompts/color.js +10 -0
  39. package/dist/prompts/confirm.d.ts +8 -0
  40. package/dist/prompts/confirm.js +1 -0
  41. package/dist/prompts/connection-string.d.ts +18 -0
  42. package/dist/prompts/connection-string.js +1 -0
  43. package/dist/prompts/cron.d.ts +13 -0
  44. package/dist/prompts/cron.js +4 -0
  45. package/dist/prompts/curl-utils.d.ts +25 -0
  46. package/dist/prompts/curl-utils.js +1 -0
  47. package/dist/prompts/curl.d.ts +41 -0
  48. package/dist/prompts/curl.js +12 -0
  49. package/dist/prompts/data-inspector.d.ts +22 -0
  50. package/dist/prompts/data-inspector.js +5 -0
  51. package/dist/prompts/date.d.ts +12 -0
  52. package/dist/prompts/date.js +2 -0
  53. package/dist/prompts/dependency.d.ts +16 -0
  54. package/dist/prompts/dependency.js +3 -0
  55. package/dist/prompts/dial.d.ts +10 -0
  56. package/dist/prompts/dial.js +3 -0
  57. package/dist/prompts/diff.d.ts +10 -0
  58. package/dist/prompts/diff.js +10 -0
  59. package/dist/prompts/draw.d.ts +20 -0
  60. package/dist/prompts/draw.js +6 -0
  61. package/dist/prompts/editor.d.ts +14 -0
  62. package/dist/prompts/editor.js +2 -0
  63. package/dist/prompts/emoji.d.ts +18 -0
  64. package/dist/prompts/emoji.js +5 -0
  65. package/dist/prompts/exec.d.ts +17 -0
  66. package/dist/prompts/exec.js +1 -0
  67. package/dist/prompts/file.d.ts +21 -0
  68. package/dist/prompts/file.js +2 -0
  69. package/dist/prompts/form.d.ts +18 -0
  70. package/dist/prompts/form.js +1 -0
  71. package/dist/prompts/fuzzy-multi-column.d.ts +12 -0
  72. package/dist/prompts/fuzzy-multi-column.js +2 -0
  73. package/dist/prompts/fuzzy.d.ts +12 -0
  74. package/dist/prompts/fuzzy.js +2 -0
  75. package/dist/prompts/gauge.d.ts +21 -0
  76. package/dist/prompts/gauge.js +4 -0
  77. package/dist/prompts/grid.d.ts +14 -0
  78. package/dist/prompts/grid.js +2 -0
  79. package/dist/prompts/heatmap.d.ts +13 -0
  80. package/dist/prompts/heatmap.js +2 -0
  81. package/dist/prompts/ip.d.ts +11 -0
  82. package/dist/prompts/ip.js +3 -0
  83. package/dist/prompts/kanban.d.ts +17 -0
  84. package/dist/prompts/kanban.js +4 -0
  85. package/dist/prompts/keypress.d.ts +7 -0
  86. package/dist/prompts/keypress.js +1 -0
  87. package/dist/prompts/license.d.ts +9 -0
  88. package/dist/prompts/license.js +13 -0
  89. package/dist/prompts/list.d.ts +9 -0
  90. package/dist/prompts/list.js +1 -0
  91. package/dist/prompts/map.d.ts +17 -0
  92. package/dist/prompts/map.js +5 -0
  93. package/dist/prompts/match.d.ts +19 -0
  94. package/dist/prompts/match.js +7 -0
  95. package/dist/prompts/miller.d.ts +15 -0
  96. package/dist/prompts/miller.js +2 -0
  97. package/dist/prompts/multi-column-select.d.ts +10 -0
  98. package/dist/prompts/multi-column-select.js +2 -0
  99. package/dist/prompts/multi-range.d.ts +9 -0
  100. package/dist/prompts/multi-range.js +3 -0
  101. package/dist/prompts/multi-select.d.ts +15 -0
  102. package/dist/prompts/multi-select.js +4 -0
  103. package/dist/prompts/number.d.ts +11 -0
  104. package/dist/prompts/number.js +2 -0
  105. package/dist/prompts/otp.d.ts +10 -0
  106. package/dist/prompts/otp.js +2 -0
  107. package/dist/prompts/pattern.d.ts +22 -0
  108. package/dist/prompts/pattern.js +4 -0
  109. package/dist/prompts/phone.d.ts +41 -0
  110. package/dist/prompts/phone.js +3 -0
  111. package/dist/prompts/quiz-select.d.ts +10 -0
  112. package/dist/prompts/quiz-select.js +7 -0
  113. package/dist/prompts/quiz-text.d.ts +11 -0
  114. package/dist/prompts/quiz-text.js +8 -0
  115. package/dist/prompts/range.d.ts +9 -0
  116. package/dist/prompts/range.js +1 -0
  117. package/dist/prompts/rating.d.ts +8 -0
  118. package/dist/prompts/rating.js +1 -0
  119. package/dist/prompts/regex.d.ts +13 -0
  120. package/dist/prompts/regex.js +5 -0
  121. package/dist/prompts/region.d.ts +11 -0
  122. package/dist/prompts/region.js +5 -0
  123. package/dist/prompts/schedule.d.ts +20 -0
  124. package/dist/prompts/schedule.js +5 -0
  125. package/dist/prompts/scroll.d.ts +13 -0
  126. package/dist/prompts/scroll.js +1 -0
  127. package/dist/prompts/seat.d.ts +17 -0
  128. package/dist/prompts/seat.js +5 -0
  129. package/dist/prompts/select-range.d.ts +8 -0
  130. package/dist/prompts/select-range.js +3 -0
  131. package/dist/prompts/select.d.ts +15 -0
  132. package/dist/prompts/select.js +2 -0
  133. package/dist/prompts/semver.d.ts +6 -0
  134. package/dist/prompts/semver.js +1 -0
  135. package/dist/prompts/shortcut.d.ts +9 -0
  136. package/dist/prompts/shortcut.js +1 -0
  137. package/dist/prompts/slider.d.ts +8 -0
  138. package/dist/prompts/slider.js +1 -0
  139. package/dist/prompts/slot.d.ts +16 -0
  140. package/dist/prompts/slot.js +8 -0
  141. package/dist/prompts/snippet.d.ts +19 -0
  142. package/dist/prompts/snippet.js +4 -0
  143. package/dist/prompts/sort-grid.d.ts +16 -0
  144. package/dist/prompts/sort-grid.js +2 -0
  145. package/dist/prompts/sort.d.ts +14 -0
  146. package/dist/prompts/sort.js +2 -0
  147. package/dist/prompts/spam.d.ts +17 -0
  148. package/dist/prompts/spam.js +2 -0
  149. package/dist/prompts/spreadsheet.d.ts +21 -0
  150. package/dist/prompts/spreadsheet.js +7 -0
  151. package/dist/prompts/table.d.ts +14 -0
  152. package/dist/prompts/table.js +3 -0
  153. package/dist/prompts/text.d.ts +17 -0
  154. package/dist/prompts/text.js +2 -0
  155. package/dist/prompts/time.d.ts +12 -0
  156. package/dist/prompts/time.js +2 -0
  157. package/dist/prompts/toggle.d.ts +8 -0
  158. package/dist/prompts/toggle.js +1 -0
  159. package/dist/prompts/transfer.d.ts +18 -0
  160. package/dist/prompts/transfer.js +5 -0
  161. package/dist/prompts/tree-select.d.ts +31 -0
  162. package/dist/prompts/tree-select.js +3 -0
  163. package/dist/prompts/tree.d.ts +20 -0
  164. package/dist/prompts/tree.js +3 -0
  165. package/dist/prompts/wait.d.ts +18 -0
  166. package/dist/prompts/wait.js +1 -0
  167. package/dist/spinner.d.ts +33 -0
  168. package/dist/spinner.js +3 -0
  169. package/dist/symbols.d.ts +33 -0
  170. package/dist/symbols.js +1 -0
  171. package/dist/tasks.d.ts +57 -0
  172. package/dist/tasks.js +1 -0
  173. package/dist/theme.d.ts +2 -0
  174. package/dist/theme.js +1 -0
  175. package/dist/types.d.ts +503 -0
  176. package/dist/types.js +1 -0
  177. package/dist/utils.d.ts +81 -0
  178. package/dist/utils.js +1 -0
  179. package/package.json +8 -9
  180. package/dist/src/ansi.js +0 -50
  181. package/dist/src/ansi.js.map +0 -1
  182. package/dist/src/base.js +0 -258
  183. package/dist/src/base.js.map +0 -1
  184. package/dist/src/core.js.map +0 -1
  185. package/dist/src/data/countries.js +0 -569
  186. package/dist/src/data/countries.js.map +0 -1
  187. package/dist/src/data/licenses.js +0 -480
  188. package/dist/src/data/licenses.js.map +0 -1
  189. package/dist/src/highlight.js +0 -185
  190. package/dist/src/highlight.js.map +0 -1
  191. package/dist/src/index.js +0 -66
  192. package/dist/src/index.js.map +0 -1
  193. package/dist/src/input.js +0 -158
  194. package/dist/src/input.js.map +0 -1
  195. package/dist/src/pipeline.js +0 -273
  196. package/dist/src/pipeline.js.map +0 -1
  197. package/dist/src/prompts/autocomplete.js +0 -171
  198. package/dist/src/prompts/autocomplete.js.map +0 -1
  199. package/dist/src/prompts/box.js +0 -225
  200. package/dist/src/prompts/box.js.map +0 -1
  201. package/dist/src/prompts/breadcrumb-search.js +0 -260
  202. package/dist/src/prompts/breadcrumb-search.js.map +0 -1
  203. package/dist/src/prompts/breadcrumb.js +0 -307
  204. package/dist/src/prompts/breadcrumb.js.map +0 -1
  205. package/dist/src/prompts/byte.js +0 -176
  206. package/dist/src/prompts/byte.js.map +0 -1
  207. package/dist/src/prompts/calculator.js +0 -243
  208. package/dist/src/prompts/calculator.js.map +0 -1
  209. package/dist/src/prompts/calendar.js +0 -430
  210. package/dist/src/prompts/calendar.js.map +0 -1
  211. package/dist/src/prompts/checkbox.js +0 -159
  212. package/dist/src/prompts/checkbox.js.map +0 -1
  213. package/dist/src/prompts/code.js +0 -271
  214. package/dist/src/prompts/code.js.map +0 -1
  215. package/dist/src/prompts/color.js +0 -165
  216. package/dist/src/prompts/color.js.map +0 -1
  217. package/dist/src/prompts/confirm.js +0 -55
  218. package/dist/src/prompts/confirm.js.map +0 -1
  219. package/dist/src/prompts/connection-string.js +0 -120
  220. package/dist/src/prompts/connection-string.js.map +0 -1
  221. package/dist/src/prompts/cron.js +0 -207
  222. package/dist/src/prompts/cron.js.map +0 -1
  223. package/dist/src/prompts/curl-utils.js +0 -71
  224. package/dist/src/prompts/curl-utils.js.map +0 -1
  225. package/dist/src/prompts/curl.js +0 -431
  226. package/dist/src/prompts/curl.js.map +0 -1
  227. package/dist/src/prompts/data-inspector.js +0 -261
  228. package/dist/src/prompts/data-inspector.js.map +0 -1
  229. package/dist/src/prompts/date.js +0 -185
  230. package/dist/src/prompts/date.js.map +0 -1
  231. package/dist/src/prompts/dependency.js +0 -283
  232. package/dist/src/prompts/dependency.js.map +0 -1
  233. package/dist/src/prompts/dial.js +0 -124
  234. package/dist/src/prompts/dial.js.map +0 -1
  235. package/dist/src/prompts/diff.js +0 -118
  236. package/dist/src/prompts/diff.js.map +0 -1
  237. package/dist/src/prompts/draw.js +0 -191
  238. package/dist/src/prompts/draw.js.map +0 -1
  239. package/dist/src/prompts/editor.js +0 -234
  240. package/dist/src/prompts/editor.js.map +0 -1
  241. package/dist/src/prompts/emoji.js +0 -226
  242. package/dist/src/prompts/emoji.js.map +0 -1
  243. package/dist/src/prompts/exec.js +0 -151
  244. package/dist/src/prompts/exec.js.map +0 -1
  245. package/dist/src/prompts/file.js +0 -217
  246. package/dist/src/prompts/file.js.map +0 -1
  247. package/dist/src/prompts/form.js +0 -241
  248. package/dist/src/prompts/form.js.map +0 -1
  249. package/dist/src/prompts/fuzzy-multi-column.js +0 -161
  250. package/dist/src/prompts/fuzzy-multi-column.js.map +0 -1
  251. package/dist/src/prompts/fuzzy.js +0 -147
  252. package/dist/src/prompts/fuzzy.js.map +0 -1
  253. package/dist/src/prompts/gauge.js +0 -137
  254. package/dist/src/prompts/gauge.js.map +0 -1
  255. package/dist/src/prompts/grid.js +0 -191
  256. package/dist/src/prompts/grid.js.map +0 -1
  257. package/dist/src/prompts/heatmap.js +0 -147
  258. package/dist/src/prompts/heatmap.js.map +0 -1
  259. package/dist/src/prompts/ip.js +0 -138
  260. package/dist/src/prompts/ip.js.map +0 -1
  261. package/dist/src/prompts/kanban.js +0 -233
  262. package/dist/src/prompts/kanban.js.map +0 -1
  263. package/dist/src/prompts/keypress.js +0 -54
  264. package/dist/src/prompts/keypress.js.map +0 -1
  265. package/dist/src/prompts/license.js +0 -144
  266. package/dist/src/prompts/license.js.map +0 -1
  267. package/dist/src/prompts/list.js +0 -124
  268. package/dist/src/prompts/list.js.map +0 -1
  269. package/dist/src/prompts/map.js +0 -262
  270. package/dist/src/prompts/map.js.map +0 -1
  271. package/dist/src/prompts/match.js +0 -271
  272. package/dist/src/prompts/match.js.map +0 -1
  273. package/dist/src/prompts/miller.js +0 -228
  274. package/dist/src/prompts/miller.js.map +0 -1
  275. package/dist/src/prompts/multi-column-select.js +0 -176
  276. package/dist/src/prompts/multi-column-select.js.map +0 -1
  277. package/dist/src/prompts/multi-range.js +0 -189
  278. package/dist/src/prompts/multi-range.js.map +0 -1
  279. package/dist/src/prompts/multi-select.js +0 -183
  280. package/dist/src/prompts/multi-select.js.map +0 -1
  281. package/dist/src/prompts/number.js +0 -166
  282. package/dist/src/prompts/number.js.map +0 -1
  283. package/dist/src/prompts/otp.js +0 -107
  284. package/dist/src/prompts/otp.js.map +0 -1
  285. package/dist/src/prompts/pattern.js +0 -252
  286. package/dist/src/prompts/pattern.js.map +0 -1
  287. package/dist/src/prompts/phone.js +0 -398
  288. package/dist/src/prompts/phone.js.map +0 -1
  289. package/dist/src/prompts/quiz-select.js +0 -114
  290. package/dist/src/prompts/quiz-select.js.map +0 -1
  291. package/dist/src/prompts/quiz-text.js +0 -98
  292. package/dist/src/prompts/quiz-text.js.map +0 -1
  293. package/dist/src/prompts/range.js +0 -164
  294. package/dist/src/prompts/range.js.map +0 -1
  295. package/dist/src/prompts/rating.js +0 -83
  296. package/dist/src/prompts/rating.js.map +0 -1
  297. package/dist/src/prompts/regex.js +0 -145
  298. package/dist/src/prompts/regex.js.map +0 -1
  299. package/dist/src/prompts/region.js +0 -170
  300. package/dist/src/prompts/region.js.map +0 -1
  301. package/dist/src/prompts/schedule.js +0 -270
  302. package/dist/src/prompts/schedule.js.map +0 -1
  303. package/dist/src/prompts/scroll.js +0 -155
  304. package/dist/src/prompts/scroll.js.map +0 -1
  305. package/dist/src/prompts/seat.js +0 -164
  306. package/dist/src/prompts/seat.js.map +0 -1
  307. package/dist/src/prompts/select-range.js +0 -148
  308. package/dist/src/prompts/select-range.js.map +0 -1
  309. package/dist/src/prompts/select.js +0 -163
  310. package/dist/src/prompts/select.js.map +0 -1
  311. package/dist/src/prompts/semver.js +0 -43
  312. package/dist/src/prompts/semver.js.map +0 -1
  313. package/dist/src/prompts/shortcut.js +0 -133
  314. package/dist/src/prompts/shortcut.js.map +0 -1
  315. package/dist/src/prompts/slider.js +0 -69
  316. package/dist/src/prompts/slider.js.map +0 -1
  317. package/dist/src/prompts/slot.js +0 -117
  318. package/dist/src/prompts/slot.js.map +0 -1
  319. package/dist/src/prompts/snippet.js +0 -228
  320. package/dist/src/prompts/snippet.js.map +0 -1
  321. package/dist/src/prompts/sort-grid.js +0 -151
  322. package/dist/src/prompts/sort-grid.js.map +0 -1
  323. package/dist/src/prompts/sort.js +0 -166
  324. package/dist/src/prompts/sort.js.map +0 -1
  325. package/dist/src/prompts/spam.js +0 -80
  326. package/dist/src/prompts/spam.js.map +0 -1
  327. package/dist/src/prompts/spreadsheet.js +0 -240
  328. package/dist/src/prompts/spreadsheet.js.map +0 -1
  329. package/dist/src/prompts/table.js +0 -120
  330. package/dist/src/prompts/table.js.map +0 -1
  331. package/dist/src/prompts/text.js +0 -317
  332. package/dist/src/prompts/text.js.map +0 -1
  333. package/dist/src/prompts/time.js +0 -211
  334. package/dist/src/prompts/time.js.map +0 -1
  335. package/dist/src/prompts/toggle.js +0 -53
  336. package/dist/src/prompts/toggle.js.map +0 -1
  337. package/dist/src/prompts/transfer.js +0 -207
  338. package/dist/src/prompts/transfer.js.map +0 -1
  339. package/dist/src/prompts/tree-select.js +0 -270
  340. package/dist/src/prompts/tree-select.js.map +0 -1
  341. package/dist/src/prompts/tree.js +0 -233
  342. package/dist/src/prompts/tree.js.map +0 -1
  343. package/dist/src/prompts/wait.js +0 -79
  344. package/dist/src/prompts/wait.js.map +0 -1
  345. package/dist/src/spinner.js +0 -105
  346. package/dist/src/spinner.js.map +0 -1
  347. package/dist/src/symbols.js +0 -66
  348. package/dist/src/symbols.js.map +0 -1
  349. package/dist/src/tasks.js +0 -231
  350. package/dist/src/tasks.js.map +0 -1
  351. package/dist/src/theme.js +0 -29
  352. package/dist/src/theme.js.map +0 -1
  353. package/dist/src/types.js +0 -8
  354. package/dist/src/types.js.map +0 -1
  355. package/dist/src/utils.js +0 -480
  356. package/dist/src/utils.js.map +0 -1
@@ -1,273 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- function _export(target, all) {
6
- for(var name in all)Object.defineProperty(target, name, {
7
- enumerable: true,
8
- get: Object.getOwnPropertyDescriptor(all, name).get
9
- });
10
- }
11
- _export(exports, {
12
- get Pipeline () {
13
- return Pipeline;
14
- },
15
- get PipelineAbortError () {
16
- return PipelineAbortError;
17
- },
18
- get PipelineExit () {
19
- return PipelineExit;
20
- },
21
- get PipelineTimeoutError () {
22
- return PipelineTimeoutError;
23
- },
24
- get PipelineValidationError () {
25
- return PipelineValidationError;
26
- }
27
- });
28
- function _define_property(obj, key, value) {
29
- if (key in obj) {
30
- Object.defineProperty(obj, key, {
31
- value: value,
32
- enumerable: true,
33
- configurable: true,
34
- writable: true
35
- });
36
- } else {
37
- obj[key] = value;
38
- }
39
- return obj;
40
- }
41
- const PipelineExit = Symbol.for('PipelineExit');
42
- let PipelineValidationError = class PipelineValidationError extends Error {
43
- constructor(message, step, context){
44
- super(message), _define_property(this, "step", void 0), _define_property(this, "context", void 0);
45
- this.name = 'PipelineValidationError';
46
- this.step = step;
47
- this.context = context;
48
- }
49
- };
50
- let PipelineTimeoutError = class PipelineTimeoutError extends Error {
51
- constructor(message, step, context){
52
- super(message), _define_property(this, "step", void 0), _define_property(this, "context", void 0);
53
- this.name = 'PipelineTimeoutError';
54
- this.step = step;
55
- this.context = context;
56
- }
57
- };
58
- let PipelineAbortError = class PipelineAbortError extends Error {
59
- constructor(message = 'Pipeline aborted'){
60
- super(message);
61
- this.name = 'PipelineAbortError';
62
- }
63
- };
64
- let Pipeline = class Pipeline {
65
- step(nameOrAction, actionOrConfig, config) {
66
- if (typeof nameOrAction === 'function' || nameOrAction instanceof Pipeline) {
67
- const action = nameOrAction instanceof Pipeline ? (ctx, tasks)=>nameOrAction.run(ctx, tasks) : nameOrAction;
68
- this.steps.push({
69
- action: action,
70
- ...actionOrConfig || {}
71
- });
72
- } else {
73
- const action = actionOrConfig instanceof Pipeline ? (ctx, tasks)=>actionOrConfig.run(ctx, tasks) : actionOrConfig;
74
- this.steps.push({
75
- name: nameOrAction,
76
- action: action,
77
- ...config || {}
78
- });
79
- }
80
- return this;
81
- }
82
- stepIf(condition, nameOrAction, actionOrConfig, config) {
83
- if (typeof nameOrAction === 'function' || nameOrAction instanceof Pipeline) {
84
- const action = nameOrAction instanceof Pipeline ? (ctx, tasks)=>nameOrAction.run(ctx, tasks) : nameOrAction;
85
- this.steps.push({
86
- condition,
87
- action: action,
88
- ...actionOrConfig || {}
89
- });
90
- } else {
91
- const action = actionOrConfig instanceof Pipeline ? (ctx, tasks)=>actionOrConfig.run(ctx, tasks) : actionOrConfig;
92
- this.steps.push({
93
- condition,
94
- name: nameOrAction,
95
- action: action,
96
- ...config || {}
97
- });
98
- }
99
- return this;
100
- }
101
- /**
102
- * Executes the pipeline steps sequentially.
103
- * @param initialContext Optional initial context.
104
- * @param tasks Optional TaskRunner instance to pass to steps.
105
- */ async run(initialContext = {}, tasks) {
106
- const context = {
107
- ...initialContext
108
- };
109
- if (this.options.onPipelineStart) {
110
- await this.options.onPipelineStart({
111
- ...context
112
- });
113
- }
114
- try {
115
- for(let i = 0; i < this.steps.length; i++){
116
- if (this.options.signal?.aborted) {
117
- throw new PipelineAbortError();
118
- }
119
- const step = this.steps[i];
120
- const meta = {
121
- index: i,
122
- name: step.name,
123
- type: step.name ? 'named' : 'anonymous'
124
- };
125
- if (step.condition && !step.condition(context)) {
126
- continue;
127
- }
128
- if (this.options.onStepStart) {
129
- await this.options.onStepStart(meta, {
130
- ...context
131
- });
132
- }
133
- try {
134
- let result;
135
- if (step.timeout && step.timeout > 0) {
136
- const timeoutPromise = new Promise((_, reject)=>{
137
- setTimeout(()=>{
138
- reject(new PipelineTimeoutError(`Step timed out after ${step.timeout}ms`, meta, context));
139
- }, step.timeout);
140
- });
141
- result = await Promise.race([
142
- step.action(context, tasks),
143
- timeoutPromise
144
- ]);
145
- } else {
146
- result = await step.action(context, tasks);
147
- }
148
- if (result === PipelineExit) {
149
- break;
150
- }
151
- if (!step.name) {
152
- // Anonymous action
153
- if (result && typeof result === 'object' && !Array.isArray(result)) {
154
- Object.assign(context, result);
155
- }
156
- } else {
157
- // Named action
158
- if (step.transform) {
159
- result = await step.transform(result, {
160
- ...context
161
- });
162
- }
163
- if (step.validate) {
164
- const validator = step.validate;
165
- if (typeof validator === 'function') {
166
- const valid = await validator(result);
167
- if (valid === false) {
168
- throw new PipelineValidationError(`Validation failed for step at index ${i} (${String(step.name)})`, meta, context);
169
- }
170
- if (typeof valid === 'string') {
171
- throw new PipelineValidationError(valid, meta, context);
172
- }
173
- } else if (typeof validator === 'object') {
174
- if (typeof validator.safeParse === 'function') {
175
- const res = validator.safeParse(result);
176
- if (!res.success) {
177
- const errorMsg = res.error?.message || res.issues?.[0]?.message || 'Schema validation failed';
178
- throw new PipelineValidationError(`Validation failed: ${errorMsg}`, meta, context);
179
- }
180
- result = res.data !== undefined ? res.data : result;
181
- } else if (typeof validator.parse === 'function') {
182
- try {
183
- const parsed = validator.parse(result);
184
- result = parsed !== undefined ? parsed : result;
185
- } catch (err) {
186
- throw new PipelineValidationError(`Validation failed: ${err.message || 'Schema parsing error'}`, meta, context);
187
- }
188
- }
189
- }
190
- }
191
- context[step.name] = result;
192
- }
193
- if (this.options.onStepComplete) {
194
- await this.options.onStepComplete(meta, {
195
- ...context
196
- });
197
- }
198
- } catch (err) {
199
- let handled = false;
200
- if (step.onError) {
201
- await step.onError(err, {
202
- ...context
203
- });
204
- }
205
- if ('fallback' in step) {
206
- const fallbackValue = typeof step.fallback === 'function' ? await step.fallback(err, {
207
- ...context
208
- }) : step.fallback;
209
- if (step.name) {
210
- context[step.name] = fallbackValue;
211
- }
212
- handled = true;
213
- } else if (step.optional) {
214
- if (step.name) {
215
- context[step.name] = undefined;
216
- }
217
- handled = true;
218
- }
219
- if (!handled) {
220
- if (this.options.onError) {
221
- await this.options.onError(err, meta, {
222
- ...context
223
- });
224
- }
225
- throw err;
226
- }
227
- }
228
- }
229
- if (this.options.validate) {
230
- const validator = this.options.validate;
231
- if (typeof validator === 'function') {
232
- const valid = await validator(context);
233
- if (valid === false) {
234
- throw new PipelineValidationError(`Final validation failed`);
235
- }
236
- if (typeof valid === 'string') {
237
- throw new PipelineValidationError(valid);
238
- }
239
- } else if (typeof validator === 'object') {
240
- if (typeof validator.safeParse === 'function') {
241
- const res = validator.safeParse(context);
242
- if (!res.success) {
243
- const errorMsg = res.error?.message || res.issues?.[0]?.message || 'Schema validation failed';
244
- throw new PipelineValidationError(`Final validation failed: ${errorMsg}`);
245
- }
246
- Object.assign(context, res.data !== undefined ? res.data : context);
247
- } else if (typeof validator.parse === 'function') {
248
- try {
249
- const parsed = validator.parse(context);
250
- Object.assign(context, parsed !== undefined ? parsed : context);
251
- } catch (err) {
252
- throw new PipelineValidationError(`Final validation failed: ${err.message || 'Schema parsing error'}`);
253
- }
254
- }
255
- }
256
- }
257
- } finally{
258
- if (this.options.onPipelineComplete) {
259
- await this.options.onPipelineComplete({
260
- ...context
261
- });
262
- }
263
- }
264
- return context;
265
- }
266
- constructor(options){
267
- _define_property(this, "steps", []);
268
- _define_property(this, "options", void 0);
269
- this.options = options || {};
270
- }
271
- };
272
-
273
- //# sourceMappingURL=pipeline.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/pipeline.ts"],"sourcesContent":["import { TaskRunner } from './tasks';\n\nexport const PipelineExit = Symbol.for('PipelineExit');\n\nexport type PipelineAction<Ctx, T> = (context: Ctx, tasks?: TaskRunner) => Promise<T | typeof PipelineExit> | T | typeof PipelineExit;\nexport type PipelineCondition<Ctx> = (context: Readonly<Ctx>) => boolean;\n\nexport interface ValidationSchema {\n parse?: (data: any) => any;\n safeParse?: (data: any) => { success: boolean; error?: any; issues?: any; data?: any };\n}\n\nexport type Validator = ((value: any) => boolean | string | Promise<boolean | string>) | ValidationSchema;\nexport type Transformer<Ctx> = (value: any, context: Readonly<Ctx>) => any | Promise<any>;\n\nexport interface PipelineStep<Ctx> extends StepConfig<Ctx> {\n name?: keyof Ctx;\n action: PipelineAction<Ctx, any>;\n condition?: PipelineCondition<Ctx>;\n}\n\nexport interface StepConfig<Ctx> {\n validate?: Validator;\n transform?: Transformer<Ctx>;\n onError?: (error: unknown, context: Readonly<Ctx>) => void | Promise<void>;\n fallback?: any | ((error: unknown, context: Readonly<Ctx>) => any | Promise<any>);\n optional?: boolean;\n timeout?: number;\n}\n\nexport interface StepMetadata {\n index: number;\n name?: string;\n type: 'named' | 'anonymous';\n}\n\nexport interface PipelineOptions<Ctx> {\n onStepStart?: (meta: StepMetadata, context: Readonly<Ctx>) => void | Promise<void>;\n onStepComplete?: (meta: StepMetadata, context: Readonly<Ctx>) => void | Promise<void>;\n onError?: (error: unknown, meta: StepMetadata, context: Readonly<Ctx>) => void | Promise<void>;\n validate?: Validator;\n onPipelineStart?: (context: Readonly<Ctx>) => void | Promise<void>;\n onPipelineComplete?: (context: Readonly<Ctx>) => void | Promise<void>;\n signal?: AbortSignal;\n}\n\nexport class PipelineValidationError<Ctx = any> extends Error {\n public step?: StepMetadata;\n public context?: Ctx;\n\n constructor(message: string, step?: StepMetadata, context?: Ctx) {\n super(message);\n this.name = 'PipelineValidationError';\n this.step = step;\n this.context = context;\n }\n}\n\nexport class PipelineTimeoutError<Ctx = any> extends Error {\n public step?: StepMetadata;\n public context?: Ctx;\n\n constructor(message: string, step?: StepMetadata, context?: Ctx) {\n super(message);\n this.name = 'PipelineTimeoutError';\n this.step = step;\n this.context = context;\n }\n}\n\nexport class PipelineAbortError extends Error {\n constructor(message: string = 'Pipeline aborted') {\n super(message);\n this.name = 'PipelineAbortError';\n }\n}\n\n/**\n * Pipeline (Workflow Engine)\n * \n * Implements a sequential workflow where steps are executed one by one,\n * accumulating results into a Context object.\n * \n * Philosophy: Enter-and-Forget (EAF), Zero-Dependency, Method Chaining.\n */\nexport class Pipeline<Ctx extends Record<string, any> = Record<string, any>> {\n private steps: PipelineStep<Ctx>[] = [];\n private options: PipelineOptions<Ctx>;\n\n constructor(options?: PipelineOptions<Ctx>) {\n this.options = options || {};\n }\n\n /**\n * Adds a named step to the pipeline. The result of the action is stored in the context under the given name.\n */\n public step<K extends keyof Ctx>(name: K, action: PipelineAction<Ctx, Ctx[K]> | Pipeline<any>, config?: StepConfig<Ctx>): this;\n /**\n * Adds an anonymous step to the pipeline. The action can mutate the context directly or return a partial context to merge in.\n */\n public step(action: PipelineAction<Ctx, void | Partial<Ctx>> | Pipeline<any>, config?: StepConfig<Ctx>): this;\n public step(\n nameOrAction: keyof Ctx | PipelineAction<Ctx, any> | Pipeline<any>,\n actionOrConfig?: PipelineAction<Ctx, any> | Pipeline<any> | StepConfig<Ctx>,\n config?: StepConfig<Ctx>\n ): this {\n if (typeof nameOrAction === 'function' || nameOrAction instanceof Pipeline) {\n const action = nameOrAction instanceof Pipeline\n ? ((ctx: Ctx, tasks?: TaskRunner) => nameOrAction.run(ctx, tasks))\n : nameOrAction;\n this.steps.push({\n action: action as PipelineAction<Ctx, any>,\n ...(actionOrConfig as StepConfig<Ctx> || {})\n });\n } else {\n const action = actionOrConfig instanceof Pipeline\n ? ((ctx: Ctx, tasks?: TaskRunner) => actionOrConfig.run(ctx, tasks))\n : actionOrConfig as PipelineAction<Ctx, any>;\n this.steps.push({\n name: nameOrAction as keyof Ctx,\n action: action,\n ...(config || {})\n });\n }\n return this;\n }\n\n /**\n * Adds a conditional named step to the pipeline.\n */\n public stepIf<K extends keyof Ctx>(condition: PipelineCondition<Ctx>, name: K, action: PipelineAction<Ctx, Ctx[K]> | Pipeline<any>, config?: StepConfig<Ctx>): this;\n /**\n * Adds a conditional anonymous step to the pipeline.\n */\n public stepIf(condition: PipelineCondition<Ctx>, action: PipelineAction<Ctx, void | Partial<Ctx>> | Pipeline<any>, config?: StepConfig<Ctx>): this;\n public stepIf(\n condition: PipelineCondition<Ctx>,\n nameOrAction: keyof Ctx | PipelineAction<Ctx, any> | Pipeline<any>,\n actionOrConfig?: PipelineAction<Ctx, any> | Pipeline<any> | StepConfig<Ctx>,\n config?: StepConfig<Ctx>\n ): this {\n if (typeof nameOrAction === 'function' || nameOrAction instanceof Pipeline) {\n const action = nameOrAction instanceof Pipeline\n ? ((ctx: Ctx, tasks?: TaskRunner) => nameOrAction.run(ctx, tasks))\n : nameOrAction;\n this.steps.push({\n condition,\n action: action as PipelineAction<Ctx, any>,\n ...(actionOrConfig as StepConfig<Ctx> || {})\n });\n } else {\n const action = actionOrConfig instanceof Pipeline\n ? ((ctx: Ctx, tasks?: TaskRunner) => actionOrConfig.run(ctx, tasks))\n : actionOrConfig as PipelineAction<Ctx, any>;\n this.steps.push({\n condition,\n name: nameOrAction as keyof Ctx,\n action: action,\n ...(config || {})\n });\n }\n return this;\n }\n\n /**\n * Executes the pipeline steps sequentially.\n * @param initialContext Optional initial context.\n * @param tasks Optional TaskRunner instance to pass to steps.\n */\n public async run(initialContext: Partial<Ctx> = {}, tasks?: TaskRunner): Promise<Ctx> {\n const context: Ctx = { ...initialContext } as Ctx;\n\n if (this.options.onPipelineStart) {\n await this.options.onPipelineStart({ ...context });\n }\n\n try {\n for (let i = 0; i < this.steps.length; i++) {\n if (this.options.signal?.aborted) {\n throw new PipelineAbortError();\n }\n\n const step = this.steps[i];\n const meta: StepMetadata = {\n index: i,\n name: step.name as string | undefined,\n type: step.name ? 'named' : 'anonymous'\n };\n\n if (step.condition && !step.condition(context)) {\n continue;\n }\n\n if (this.options.onStepStart) {\n await this.options.onStepStart(meta, { ...context });\n }\n\n try {\n let result: any;\n if (step.timeout && step.timeout > 0) {\n const timeoutPromise = new Promise<never>((_, reject) => {\n setTimeout(() => {\n reject(new PipelineTimeoutError(`Step timed out after ${step.timeout}ms`, meta, context));\n }, step.timeout);\n });\n result = await Promise.race([step.action(context, tasks), timeoutPromise]);\n } else {\n result = await step.action(context, tasks);\n }\n\n if (result === PipelineExit) {\n break;\n }\n\n if (!step.name) {\n // Anonymous action\n if (result && typeof result === 'object' && !Array.isArray(result)) {\n Object.assign(context, result);\n }\n } else {\n // Named action\n if (step.transform) {\n result = await step.transform(result, { ...context });\n }\n\n if (step.validate) {\n const validator = step.validate;\n if (typeof validator === 'function') {\n const valid = await validator(result);\n if (valid === false) {\n throw new PipelineValidationError(`Validation failed for step at index ${i} (${String(step.name)})`, meta, context);\n }\n if (typeof valid === 'string') {\n throw new PipelineValidationError(valid, meta, context);\n }\n } else if (typeof validator === 'object') {\n if (typeof validator.safeParse === 'function') {\n const res = validator.safeParse(result);\n if (!res.success) {\n const errorMsg = res.error?.message || res.issues?.[0]?.message || 'Schema validation failed';\n throw new PipelineValidationError(`Validation failed: ${errorMsg}`, meta, context);\n }\n result = res.data !== undefined ? res.data : result;\n } else if (typeof validator.parse === 'function') {\n try {\n const parsed = validator.parse(result);\n result = parsed !== undefined ? parsed : result;\n } catch (err: any) {\n throw new PipelineValidationError(`Validation failed: ${err.message || 'Schema parsing error'}`, meta, context);\n }\n }\n }\n }\n\n context[step.name] = result;\n }\n\n if (this.options.onStepComplete) {\n await this.options.onStepComplete(meta, { ...context });\n }\n } catch (err) {\n let handled = false;\n\n if (step.onError) {\n await step.onError(err, { ...context });\n }\n\n if ('fallback' in step) {\n const fallbackValue = typeof step.fallback === 'function' ? await step.fallback(err, { ...context }) : step.fallback;\n if (step.name) {\n context[step.name] = fallbackValue;\n }\n handled = true;\n } else if (step.optional) {\n if (step.name) {\n context[step.name] = undefined as any;\n }\n handled = true;\n }\n\n if (!handled) {\n if (this.options.onError) {\n await this.options.onError(err, meta, { ...context });\n }\n throw err;\n }\n }\n }\n\n if (this.options.validate) {\n const validator = this.options.validate;\n if (typeof validator === 'function') {\n const valid = await validator(context);\n if (valid === false) {\n throw new PipelineValidationError(`Final validation failed`);\n }\n if (typeof valid === 'string') {\n throw new PipelineValidationError(valid);\n }\n } else if (typeof validator === 'object') {\n if (typeof validator.safeParse === 'function') {\n const res = validator.safeParse(context);\n if (!res.success) {\n const errorMsg = res.error?.message || res.issues?.[0]?.message || 'Schema validation failed';\n throw new PipelineValidationError(`Final validation failed: ${errorMsg}`);\n }\n Object.assign(context, res.data !== undefined ? res.data : context);\n } else if (typeof validator.parse === 'function') {\n try {\n const parsed = validator.parse(context);\n Object.assign(context, parsed !== undefined ? parsed : context);\n } catch (err: any) {\n throw new PipelineValidationError(`Final validation failed: ${err.message || 'Schema parsing error'}`);\n }\n }\n }\n }\n } finally {\n if (this.options.onPipelineComplete) {\n await this.options.onPipelineComplete({ ...context });\n }\n }\n\n return context;\n }\n}\n\n"],"names":["Pipeline","PipelineAbortError","PipelineExit","PipelineTimeoutError","PipelineValidationError","Symbol","for","Error","message","step","context","name","nameOrAction","actionOrConfig","config","action","ctx","tasks","run","steps","push","stepIf","condition","initialContext","options","onPipelineStart","i","length","signal","aborted","meta","index","type","onStepStart","result","timeout","timeoutPromise","Promise","_","reject","setTimeout","race","Array","isArray","Object","assign","transform","validate","validator","valid","String","safeParse","res","success","errorMsg","error","issues","data","undefined","parse","parsed","err","onStepComplete","handled","onError","fallbackValue","fallback","optional","onPipelineComplete"],"mappings":"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"}
@@ -1,171 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- Object.defineProperty(exports, "AutocompletePrompt", {
6
- enumerable: true,
7
- get: function() {
8
- return AutocompletePrompt;
9
- }
10
- });
11
- const _ansi = require("../ansi");
12
- const _base = require("../base");
13
- const _theme = require("../theme");
14
- const _symbols = require("../symbols");
15
- const _utils = require("../utils");
16
- function _define_property(obj, key, value) {
17
- if (key in obj) {
18
- Object.defineProperty(obj, key, {
19
- value: value,
20
- enumerable: true,
21
- configurable: true,
22
- writable: true
23
- });
24
- } else {
25
- obj[key] = value;
26
- }
27
- return obj;
28
- }
29
- let AutocompletePrompt = class AutocompletePrompt extends _base.Prompt {
30
- search(query) {
31
- if (this.debounceTimer) clearTimeout(this.debounceTimer);
32
- this.loading = true;
33
- this.startSpinner();
34
- this.render(false);
35
- this.debounceTimer = setTimeout(async ()=>{
36
- try {
37
- const results = await this.options.suggest(query);
38
- if (query !== this.input) return;
39
- this.choices = results.slice(0, this.options.limit || 10);
40
- this.selectedIndex = 0;
41
- this.scrollTop = 0;
42
- this.hasSearched = true;
43
- } catch (_err) {
44
- this.choices = [];
45
- } finally{
46
- this.loading = false;
47
- this.stopSpinner();
48
- this.render(false);
49
- }
50
- }, 300); // 300ms debounce
51
- }
52
- startSpinner() {
53
- if (this.spinnerTimer) return;
54
- this.spinnerTimer = setInterval(()=>{
55
- this.spinnerFrame = (this.spinnerFrame + 1) % _symbols.symbols.spinner.length;
56
- this.render(false);
57
- }, 80);
58
- }
59
- stopSpinner() {
60
- if (this.spinnerTimer) {
61
- clearInterval(this.spinnerTimer);
62
- this.spinnerTimer = undefined;
63
- }
64
- }
65
- cleanup() {
66
- this.stopSpinner();
67
- super.cleanup();
68
- }
69
- render(_firstRender) {
70
- if (this.lastRenderHeight > 1) {
71
- this.print(`\x1b[${this.lastRenderHeight - 1}B`); // Move down
72
- }
73
- let output = '';
74
- // Header
75
- const icon = this.loading ? `${_theme.theme.main}${_symbols.symbols.spinner[this.spinnerFrame]}${_ansi.ANSI.RESET}` : `${_theme.theme.success}?${_ansi.ANSI.RESET}`;
76
- output += `${icon} ${_ansi.ANSI.BOLD}${_theme.theme.title}${this.options.message}${_ansi.ANSI.RESET} ${this.input}`;
77
- output += '\n';
78
- if (this.loading) {
79
- output += ` ${_theme.theme.muted}Searching...${_ansi.ANSI.RESET}`;
80
- } else if (this.choices.length === 0 && this.hasSearched) {
81
- output += ` ${_theme.theme.muted}${this.options.fallback || 'No results found.'}${_ansi.ANSI.RESET}`;
82
- } else if (this.choices.length > 0) {
83
- // Render list similar to SelectPrompt
84
- if (this.selectedIndex < this.scrollTop) {
85
- this.scrollTop = this.selectedIndex;
86
- } else if (this.selectedIndex >= this.scrollTop + this.pageSize) {
87
- this.scrollTop = this.selectedIndex - this.pageSize + 1;
88
- }
89
- const visibleChoices = this.choices.slice(this.scrollTop, this.scrollTop + this.pageSize);
90
- visibleChoices.forEach((choice, index)=>{
91
- const actualIndex = this.scrollTop + index;
92
- if (index > 0) output += '\n';
93
- if (actualIndex === this.selectedIndex) {
94
- output += `${_theme.theme.main}${_symbols.symbols.pointer} ${choice.title}${_ansi.ANSI.RESET}`;
95
- } else {
96
- output += ` ${choice.title}`;
97
- }
98
- });
99
- }
100
- this.renderFrame(output);
101
- // Position cursor at the end of the input string on the first line
102
- const lines = output.split('\n');
103
- const height = lines.length;
104
- // Move up (height - 1)
105
- if (height > 1) {
106
- this.print(`\x1b[${height - 1}A`);
107
- }
108
- this.print(`\r`);
109
- const firstLine = lines[0];
110
- const visualLen = (0, _utils.stringWidth)(this.stripAnsi(firstLine));
111
- this.print(`\x1b[${visualLen}C`);
112
- this.print(_ansi.ANSI.SHOW_CURSOR);
113
- }
114
- handleInput(char) {
115
- // Enter
116
- if (char === '\r' || char === '\n') {
117
- if (this.choices.length > 0) {
118
- this.submit(this.choices[this.selectedIndex].value);
119
- }
120
- return;
121
- }
122
- // Backspace
123
- if (char === '\u0008' || char === '\x7f') {
124
- if (this.input.length > 0) {
125
- this.input = this.input.slice(0, -1);
126
- this.search(this.input);
127
- }
128
- return;
129
- }
130
- // Up
131
- if (this.isUp(char)) {
132
- if (this.choices.length > 0) {
133
- this.selectedIndex = this.selectedIndex > 0 ? this.selectedIndex - 1 : this.choices.length - 1;
134
- this.render(false);
135
- }
136
- return;
137
- }
138
- // Down
139
- if (this.isDown(char)) {
140
- if (this.choices.length > 0) {
141
- this.selectedIndex = this.selectedIndex < this.choices.length - 1 ? this.selectedIndex + 1 : 0;
142
- this.render(false);
143
- }
144
- return;
145
- }
146
- // Typing
147
- if (char.length === 1 && !/^[\x00-\x1F]/.test(char)) {
148
- this.input += char;
149
- this.search(this.input);
150
- }
151
- }
152
- handleMouse(event) {
153
- if (this.choices.length === 0) return;
154
- if (event.action === 'scroll') {
155
- if (event.scroll === 'up') {
156
- this.selectedIndex = this.selectedIndex > 0 ? this.selectedIndex - 1 : this.choices.length - 1;
157
- this.render(false);
158
- } else if (event.scroll === 'down') {
159
- this.selectedIndex = this.selectedIndex < this.choices.length - 1 ? this.selectedIndex + 1 : 0;
160
- this.render(false);
161
- }
162
- }
163
- }
164
- constructor(options){
165
- super(options), _define_property(this, "input", ''), _define_property(this, "choices", []), _define_property(this, "selectedIndex", 0), _define_property(this, "loading", false), _define_property(this, "debounceTimer", void 0), _define_property(this, "spinnerFrame", 0), _define_property(this, "spinnerTimer", void 0), _define_property(this, "scrollTop", 0), _define_property(this, "pageSize", 7), _define_property(this, "hasSearched", false);
166
- this.input = options.initial || '';
167
- this.search(this.input);
168
- }
169
- };
170
-
171
- //# sourceMappingURL=autocomplete.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/prompts/autocomplete.ts"],"sourcesContent":["import { ANSI } from '../ansi';\nimport { Prompt } from '../base';\nimport { theme } from '../theme';\nimport { symbols } from '../symbols';\nimport { AutocompleteOptions, SelectChoice, MouseEvent } from '../types';\nimport { stringWidth } from '../utils';\n\nexport class AutocompletePrompt<V> extends Prompt<V, AutocompleteOptions<V>> {\n private input: string = '';\n private choices: SelectChoice<V>[] = [];\n private selectedIndex: number = 0;\n private loading: boolean = false;\n private debounceTimer?: any;\n private spinnerFrame: number = 0;\n private spinnerTimer?: any;\n private scrollTop: number = 0;\n private readonly pageSize: number = 7;\n private hasSearched: boolean = false;\n\n constructor(options: AutocompleteOptions<V>) {\n super(options);\n this.input = options.initial || '';\n this.search(this.input);\n }\n\n private search(query: string) {\n if (this.debounceTimer) clearTimeout(this.debounceTimer);\n\n this.loading = true;\n this.startSpinner();\n this.render(false);\n\n this.debounceTimer = setTimeout(async () => {\n try {\n const results = await this.options.suggest(query);\n if (query !== this.input) return;\n\n this.choices = results.slice(0, this.options.limit || 10);\n this.selectedIndex = 0;\n this.scrollTop = 0;\n this.hasSearched = true;\n } catch (_err) {\n this.choices = [];\n } finally {\n this.loading = false;\n this.stopSpinner();\n this.render(false);\n }\n }, 300); // 300ms debounce\n }\n\n private startSpinner() {\n if (this.spinnerTimer) return;\n this.spinnerTimer = setInterval(() => {\n this.spinnerFrame = (this.spinnerFrame + 1) % symbols.spinner.length;\n this.render(false);\n }, 80);\n }\n\n private stopSpinner() {\n if (this.spinnerTimer) {\n clearInterval(this.spinnerTimer);\n this.spinnerTimer = undefined;\n }\n }\n\n protected cleanup() {\n this.stopSpinner();\n super.cleanup();\n }\n\n protected render(_firstRender: boolean) {\n if (this.lastRenderHeight > 1) {\n this.print(`\\x1b[${this.lastRenderHeight - 1}B`); // Move down\n }\n\n let output = '';\n\n // Header\n const icon = this.loading ? `${theme.main}${symbols.spinner[this.spinnerFrame]}${ANSI.RESET}` : `${theme.success}?${ANSI.RESET}`;\n output += `${icon} ${ANSI.BOLD}${theme.title}${this.options.message}${ANSI.RESET} ${this.input}`;\n\n output += '\\n';\n\n if (this.loading) {\n output += ` ${theme.muted}Searching...${ANSI.RESET}`;\n } else if (this.choices.length === 0 && this.hasSearched) {\n output += ` ${theme.muted}${this.options.fallback || 'No results found.'}${ANSI.RESET}`;\n } else if (this.choices.length > 0) {\n // Render list similar to SelectPrompt\n if (this.selectedIndex < this.scrollTop) {\n this.scrollTop = this.selectedIndex;\n } else if (this.selectedIndex >= this.scrollTop + this.pageSize) {\n this.scrollTop = this.selectedIndex - this.pageSize + 1;\n }\n\n const visibleChoices = this.choices.slice(this.scrollTop, this.scrollTop + this.pageSize);\n\n visibleChoices.forEach((choice, index) => {\n const actualIndex = this.scrollTop + index;\n if (index > 0) output += '\\n';\n\n if (actualIndex === this.selectedIndex) {\n output += `${theme.main}${symbols.pointer} ${choice.title}${ANSI.RESET}`;\n } else {\n output += ` ${choice.title}`;\n }\n });\n }\n\n this.renderFrame(output);\n\n // Position cursor at the end of the input string on the first line\n const lines = output.split('\\n');\n const height = lines.length;\n\n // Move up (height - 1)\n if (height > 1) {\n this.print(`\\x1b[${height - 1}A`);\n }\n\n this.print(`\\r`);\n\n const firstLine = lines[0];\n const visualLen = stringWidth(this.stripAnsi(firstLine));\n\n this.print(`\\x1b[${visualLen}C`);\n this.print(ANSI.SHOW_CURSOR);\n }\n\n protected handleInput(char: string) {\n // Enter\n if (char === '\\r' || char === '\\n') {\n if (this.choices.length > 0) {\n this.submit(this.choices[this.selectedIndex].value);\n }\n return;\n }\n\n // Backspace\n if (char === '\\u0008' || char === '\\x7f') {\n if (this.input.length > 0) {\n this.input = this.input.slice(0, -1);\n this.search(this.input);\n }\n return;\n }\n\n // Up\n if (this.isUp(char)) {\n if (this.choices.length > 0) {\n this.selectedIndex = this.selectedIndex > 0 ? this.selectedIndex - 1 : this.choices.length - 1;\n this.render(false);\n }\n return;\n }\n\n // Down\n if (this.isDown(char)) {\n if (this.choices.length > 0) {\n this.selectedIndex = this.selectedIndex < this.choices.length - 1 ? this.selectedIndex + 1 : 0;\n this.render(false);\n }\n return;\n }\n\n // Typing\n if (char.length === 1 && !/^[\\x00-\\x1F]/.test(char)) {\n this.input += char;\n this.search(this.input);\n }\n }\n\n protected handleMouse(event: MouseEvent) {\n if (this.choices.length === 0) return;\n\n if (event.action === 'scroll') {\n if (event.scroll === 'up') {\n this.selectedIndex = this.selectedIndex > 0 ? this.selectedIndex - 1 : this.choices.length - 1;\n this.render(false);\n } else if (event.scroll === 'down') {\n this.selectedIndex = this.selectedIndex < this.choices.length - 1 ? this.selectedIndex + 1 : 0;\n this.render(false);\n }\n }\n }\n}\n"],"names":["AutocompletePrompt","Prompt","search","query","debounceTimer","clearTimeout","loading","startSpinner","render","setTimeout","results","options","suggest","input","choices","slice","limit","selectedIndex","scrollTop","hasSearched","_err","stopSpinner","spinnerTimer","setInterval","spinnerFrame","symbols","spinner","length","clearInterval","undefined","cleanup","_firstRender","lastRenderHeight","print","output","icon","theme","main","ANSI","RESET","success","BOLD","title","message","muted","fallback","pageSize","visibleChoices","forEach","choice","index","actualIndex","pointer","renderFrame","lines","split","height","firstLine","visualLen","stringWidth","stripAnsi","SHOW_CURSOR","handleInput","char","submit","value","isUp","isDown","test","handleMouse","event","action","scroll","initial"],"mappings":"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"}