mepcli 1.3.2 → 2.0.0-beta.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 (291) hide show
  1. package/README.md +11 -2
  2. package/dist/{ansi.js → src/ansi.js} +17 -9
  3. package/dist/src/ansi.js.map +1 -0
  4. package/dist/{base.js → src/base.js} +82 -70
  5. package/dist/src/base.js.map +1 -0
  6. package/dist/{core.js → src/core.js} +266 -320
  7. package/dist/src/core.js.map +1 -0
  8. package/dist/src/data/countries.js +569 -0
  9. package/dist/src/data/countries.js.map +1 -0
  10. package/dist/src/data/licenses.js +480 -0
  11. package/dist/src/data/licenses.js.map +1 -0
  12. package/dist/{highlight.js → src/highlight.js} +77 -69
  13. package/dist/src/highlight.js.map +1 -0
  14. package/dist/src/index.js +66 -0
  15. package/dist/src/index.js.map +1 -0
  16. package/dist/{input.js → src/input.js} +47 -41
  17. package/dist/src/input.js.map +1 -0
  18. package/dist/src/pipeline.js +273 -0
  19. package/dist/src/pipeline.js.map +1 -0
  20. package/dist/{prompts → src/prompts}/autocomplete.js +58 -57
  21. package/dist/src/prompts/autocomplete.js.map +1 -0
  22. package/dist/{prompts → src/prompts}/box.js +86 -53
  23. package/dist/src/prompts/box.js.map +1 -0
  24. package/dist/{prompts → src/prompts}/breadcrumb-search.js +110 -98
  25. package/dist/src/prompts/breadcrumb-search.js.map +1 -0
  26. package/dist/{prompts → src/prompts}/breadcrumb.js +126 -121
  27. package/dist/src/prompts/breadcrumb.js.map +1 -0
  28. package/dist/{prompts → src/prompts}/byte.js +69 -52
  29. package/dist/src/prompts/byte.js.map +1 -0
  30. package/dist/{prompts → src/prompts}/calculator.js +79 -56
  31. package/dist/src/prompts/calculator.js.map +1 -0
  32. package/dist/{prompts → src/prompts}/calendar.js +167 -127
  33. package/dist/src/prompts/calendar.js.map +1 -0
  34. package/dist/{prompts → src/prompts}/checkbox.js +53 -49
  35. package/dist/src/prompts/checkbox.js.map +1 -0
  36. package/dist/{prompts → src/prompts}/code.js +88 -76
  37. package/dist/src/prompts/code.js.map +1 -0
  38. package/dist/{prompts → src/prompts}/color.js +68 -50
  39. package/dist/src/prompts/color.js.map +1 -0
  40. package/dist/{prompts → src/prompts}/confirm.js +22 -15
  41. package/dist/src/prompts/confirm.js.map +1 -0
  42. package/dist/{prompts → src/prompts}/connection-string.js +59 -36
  43. package/dist/src/prompts/connection-string.js.map +1 -0
  44. package/dist/{prompts → src/prompts}/cron.js +90 -59
  45. package/dist/src/prompts/cron.js.map +1 -0
  46. package/dist/src/prompts/curl-utils.js +71 -0
  47. package/dist/src/prompts/curl-utils.js.map +1 -0
  48. package/dist/{prompts → src/prompts}/curl.js +153 -132
  49. package/dist/src/prompts/curl.js.map +1 -0
  50. package/dist/{prompts → src/prompts}/data-inspector.js +96 -91
  51. package/dist/src/prompts/data-inspector.js.map +1 -0
  52. package/dist/{prompts → src/prompts}/date.js +64 -57
  53. package/dist/src/prompts/date.js.map +1 -0
  54. package/dist/{prompts → src/prompts}/dependency.js +84 -80
  55. package/dist/src/prompts/dependency.js.map +1 -0
  56. package/dist/{prompts → src/prompts}/dial.js +49 -35
  57. package/dist/src/prompts/dial.js.map +1 -0
  58. package/dist/src/prompts/diff.js +118 -0
  59. package/dist/src/prompts/diff.js.map +1 -0
  60. package/dist/{prompts → src/prompts}/draw.js +83 -80
  61. package/dist/src/prompts/draw.js.map +1 -0
  62. package/dist/src/prompts/editor.js +234 -0
  63. package/dist/src/prompts/editor.js.map +1 -0
  64. package/dist/{prompts → src/prompts}/emoji.js +80 -82
  65. package/dist/src/prompts/emoji.js.map +1 -0
  66. package/dist/{prompts → src/prompts}/exec.js +60 -46
  67. package/dist/src/prompts/exec.js.map +1 -0
  68. package/dist/src/prompts/file.js +217 -0
  69. package/dist/src/prompts/file.js.map +1 -0
  70. package/dist/{prompts → src/prompts}/form.js +63 -54
  71. package/dist/src/prompts/form.js.map +1 -0
  72. package/dist/{prompts → src/prompts}/fuzzy-multi-column.js +65 -53
  73. package/dist/src/prompts/fuzzy-multi-column.js.map +1 -0
  74. package/dist/{prompts → src/prompts}/fuzzy.js +66 -55
  75. package/dist/src/prompts/fuzzy.js.map +1 -0
  76. package/dist/src/prompts/gauge.js +137 -0
  77. package/dist/src/prompts/gauge.js.map +1 -0
  78. package/dist/{prompts → src/prompts}/grid.js +70 -57
  79. package/dist/src/prompts/grid.js.map +1 -0
  80. package/dist/{prompts → src/prompts}/heatmap.js +70 -64
  81. package/dist/src/prompts/heatmap.js.map +1 -0
  82. package/dist/{prompts → src/prompts}/ip.js +56 -36
  83. package/dist/src/prompts/ip.js.map +1 -0
  84. package/dist/{prompts → src/prompts}/kanban.js +63 -58
  85. package/dist/src/prompts/kanban.js.map +1 -0
  86. package/dist/src/prompts/keypress.js +54 -0
  87. package/dist/src/prompts/keypress.js.map +1 -0
  88. package/dist/src/prompts/license.js +144 -0
  89. package/dist/src/prompts/license.js.map +1 -0
  90. package/dist/{prompts → src/prompts}/list.js +46 -31
  91. package/dist/src/prompts/list.js.map +1 -0
  92. package/dist/{prompts → src/prompts}/map.js +93 -77
  93. package/dist/src/prompts/map.js.map +1 -0
  94. package/dist/{prompts → src/prompts}/match.js +91 -95
  95. package/dist/src/prompts/match.js.map +1 -0
  96. package/dist/{prompts → src/prompts}/miller.js +74 -67
  97. package/dist/src/prompts/miller.js.map +1 -0
  98. package/dist/{prompts → src/prompts}/multi-column-select.js +54 -44
  99. package/dist/src/prompts/multi-column-select.js.map +1 -0
  100. package/dist/{prompts → src/prompts}/multi-range.js +70 -52
  101. package/dist/src/prompts/multi-range.js.map +1 -0
  102. package/dist/{prompts → src/prompts}/multi-select.js +67 -58
  103. package/dist/src/prompts/multi-select.js.map +1 -0
  104. package/dist/{prompts → src/prompts}/number.js +51 -39
  105. package/dist/src/prompts/number.js.map +1 -0
  106. package/dist/{prompts → src/prompts}/otp.js +43 -27
  107. package/dist/src/prompts/otp.js.map +1 -0
  108. package/dist/{prompts → src/prompts}/pattern.js +74 -71
  109. package/dist/src/prompts/pattern.js.map +1 -0
  110. package/dist/{prompts → src/prompts}/phone.js +107 -118
  111. package/dist/src/prompts/phone.js.map +1 -0
  112. package/dist/src/prompts/quiz-select.js +114 -0
  113. package/dist/src/prompts/quiz-select.js.map +1 -0
  114. package/dist/src/prompts/quiz-text.js +98 -0
  115. package/dist/src/prompts/quiz-text.js.map +1 -0
  116. package/dist/{prompts → src/prompts}/range.js +85 -61
  117. package/dist/src/prompts/range.js.map +1 -0
  118. package/dist/{prompts → src/prompts}/rating.js +29 -24
  119. package/dist/src/prompts/rating.js.map +1 -0
  120. package/dist/{prompts → src/prompts}/regex.js +50 -36
  121. package/dist/src/prompts/regex.js.map +1 -0
  122. package/dist/{prompts → src/prompts}/region.js +62 -56
  123. package/dist/src/prompts/region.js.map +1 -0
  124. package/dist/{prompts → src/prompts}/schedule.js +82 -75
  125. package/dist/src/prompts/schedule.js.map +1 -0
  126. package/dist/{prompts → src/prompts}/scroll.js +61 -58
  127. package/dist/src/prompts/scroll.js.map +1 -0
  128. package/dist/src/prompts/seat.js +164 -0
  129. package/dist/src/prompts/seat.js.map +1 -0
  130. package/dist/{prompts → src/prompts}/select-range.js +58 -46
  131. package/dist/src/prompts/select-range.js.map +1 -0
  132. package/dist/{prompts → src/prompts}/select.js +65 -66
  133. package/dist/src/prompts/select.js.map +1 -0
  134. package/dist/{prompts → src/prompts}/semver.js +24 -13
  135. package/dist/src/prompts/semver.js.map +1 -0
  136. package/dist/src/prompts/shortcut.js +133 -0
  137. package/dist/src/prompts/shortcut.js.map +1 -0
  138. package/dist/{prompts → src/prompts}/slider.js +28 -23
  139. package/dist/src/prompts/slider.js.map +1 -0
  140. package/dist/src/prompts/slot.js +117 -0
  141. package/dist/src/prompts/slot.js.map +1 -0
  142. package/dist/{prompts → src/prompts}/snippet.js +82 -61
  143. package/dist/src/prompts/snippet.js.map +1 -0
  144. package/dist/{prompts → src/prompts}/sort-grid.js +64 -59
  145. package/dist/src/prompts/sort-grid.js.map +1 -0
  146. package/dist/{prompts → src/prompts}/sort.js +59 -49
  147. package/dist/src/prompts/sort.js.map +1 -0
  148. package/dist/src/prompts/spam.js +80 -0
  149. package/dist/src/prompts/spam.js.map +1 -0
  150. package/dist/{prompts → src/prompts}/spreadsheet.js +71 -70
  151. package/dist/src/prompts/spreadsheet.js.map +1 -0
  152. package/dist/{prompts → src/prompts}/table.js +52 -38
  153. package/dist/src/prompts/table.js.map +1 -0
  154. package/dist/{prompts → src/prompts}/text.js +74 -70
  155. package/dist/src/prompts/text.js.map +1 -0
  156. package/dist/{prompts → src/prompts}/time.js +105 -96
  157. package/dist/src/prompts/time.js.map +1 -0
  158. package/dist/src/prompts/toggle.js +53 -0
  159. package/dist/src/prompts/toggle.js.map +1 -0
  160. package/dist/{prompts → src/prompts}/transfer.js +71 -67
  161. package/dist/src/prompts/transfer.js.map +1 -0
  162. package/dist/{prompts → src/prompts}/tree-select.js +83 -86
  163. package/dist/src/prompts/tree-select.js.map +1 -0
  164. package/dist/{prompts → src/prompts}/tree.js +69 -67
  165. package/dist/src/prompts/tree.js.map +1 -0
  166. package/dist/src/prompts/wait.js +79 -0
  167. package/dist/src/prompts/wait.js.map +1 -0
  168. package/dist/src/spinner.js +105 -0
  169. package/dist/src/spinner.js.map +1 -0
  170. package/dist/{symbols.js → src/symbols.js} +32 -7
  171. package/dist/src/symbols.js.map +1 -0
  172. package/dist/{tasks.js → src/tasks.js} +104 -79
  173. package/dist/src/tasks.js.map +1 -0
  174. package/dist/src/theme.js +29 -0
  175. package/dist/src/theme.js.map +1 -0
  176. package/dist/src/types.js +8 -0
  177. package/dist/src/types.js.map +1 -0
  178. package/dist/{utils.js → src/utils.js} +196 -152
  179. package/dist/src/utils.js.map +1 -0
  180. package/package.json +16 -13
  181. package/dist/ansi.d.ts +0 -36
  182. package/dist/base.d.ts +0 -60
  183. package/dist/core.d.ts +0 -1072
  184. package/dist/data/countries.d.ts +0 -2
  185. package/dist/data/countries.js +0 -105
  186. package/dist/data/licenses.d.ts +0 -2
  187. package/dist/data/licenses.js +0 -109
  188. package/dist/highlight.d.ts +0 -7
  189. package/dist/index.d.ts +0 -48
  190. package/dist/index.js +0 -64
  191. package/dist/input.d.ts +0 -14
  192. package/dist/pipeline.d.ts +0 -39
  193. package/dist/pipeline.js +0 -54
  194. package/dist/prompts/autocomplete.d.ts +0 -22
  195. package/dist/prompts/box.d.ts +0 -21
  196. package/dist/prompts/breadcrumb-search.d.ts +0 -14
  197. package/dist/prompts/breadcrumb.d.ts +0 -32
  198. package/dist/prompts/byte.d.ts +0 -13
  199. package/dist/prompts/calculator.d.ts +0 -17
  200. package/dist/prompts/calendar.d.ts +0 -33
  201. package/dist/prompts/checkbox.d.ts +0 -13
  202. package/dist/prompts/code.d.ts +0 -19
  203. package/dist/prompts/color.d.ts +0 -14
  204. package/dist/prompts/confirm.d.ts +0 -8
  205. package/dist/prompts/connection-string.d.ts +0 -18
  206. package/dist/prompts/cron.d.ts +0 -13
  207. package/dist/prompts/curl-utils.d.ts +0 -25
  208. package/dist/prompts/curl-utils.js +0 -41
  209. package/dist/prompts/curl.d.ts +0 -41
  210. package/dist/prompts/data-inspector.d.ts +0 -22
  211. package/dist/prompts/date.d.ts +0 -12
  212. package/dist/prompts/dependency.d.ts +0 -16
  213. package/dist/prompts/dial.d.ts +0 -10
  214. package/dist/prompts/diff.d.ts +0 -10
  215. package/dist/prompts/diff.js +0 -101
  216. package/dist/prompts/draw.d.ts +0 -20
  217. package/dist/prompts/editor.d.ts +0 -14
  218. package/dist/prompts/editor.js +0 -203
  219. package/dist/prompts/emoji.d.ts +0 -18
  220. package/dist/prompts/exec.d.ts +0 -17
  221. package/dist/prompts/file.d.ts +0 -21
  222. package/dist/prompts/file.js +0 -210
  223. package/dist/prompts/form.d.ts +0 -18
  224. package/dist/prompts/fuzzy-multi-column.d.ts +0 -12
  225. package/dist/prompts/fuzzy.d.ts +0 -12
  226. package/dist/prompts/gauge.d.ts +0 -21
  227. package/dist/prompts/gauge.js +0 -130
  228. package/dist/prompts/grid.d.ts +0 -14
  229. package/dist/prompts/heatmap.d.ts +0 -13
  230. package/dist/prompts/ip.d.ts +0 -11
  231. package/dist/prompts/kanban.d.ts +0 -17
  232. package/dist/prompts/keypress.d.ts +0 -7
  233. package/dist/prompts/keypress.js +0 -55
  234. package/dist/prompts/license.d.ts +0 -9
  235. package/dist/prompts/license.js +0 -105
  236. package/dist/prompts/list.d.ts +0 -9
  237. package/dist/prompts/map.d.ts +0 -17
  238. package/dist/prompts/match.d.ts +0 -19
  239. package/dist/prompts/miller.d.ts +0 -15
  240. package/dist/prompts/multi-column-select.d.ts +0 -10
  241. package/dist/prompts/multi-range.d.ts +0 -9
  242. package/dist/prompts/multi-select.d.ts +0 -15
  243. package/dist/prompts/number.d.ts +0 -11
  244. package/dist/prompts/otp.d.ts +0 -10
  245. package/dist/prompts/pattern.d.ts +0 -22
  246. package/dist/prompts/phone.d.ts +0 -41
  247. package/dist/prompts/quiz-select.d.ts +0 -10
  248. package/dist/prompts/quiz-select.js +0 -104
  249. package/dist/prompts/quiz-text.d.ts +0 -11
  250. package/dist/prompts/quiz-text.js +0 -82
  251. package/dist/prompts/range.d.ts +0 -9
  252. package/dist/prompts/rating.d.ts +0 -8
  253. package/dist/prompts/regex.d.ts +0 -13
  254. package/dist/prompts/region.d.ts +0 -11
  255. package/dist/prompts/schedule.d.ts +0 -20
  256. package/dist/prompts/scroll.d.ts +0 -13
  257. package/dist/prompts/seat.d.ts +0 -17
  258. package/dist/prompts/seat.js +0 -165
  259. package/dist/prompts/select-range.d.ts +0 -8
  260. package/dist/prompts/select.d.ts +0 -15
  261. package/dist/prompts/semver.d.ts +0 -6
  262. package/dist/prompts/shortcut.d.ts +0 -9
  263. package/dist/prompts/shortcut.js +0 -135
  264. package/dist/prompts/slider.d.ts +0 -8
  265. package/dist/prompts/slot.d.ts +0 -16
  266. package/dist/prompts/slot.js +0 -107
  267. package/dist/prompts/snippet.d.ts +0 -19
  268. package/dist/prompts/sort-grid.d.ts +0 -16
  269. package/dist/prompts/sort.d.ts +0 -14
  270. package/dist/prompts/spam.d.ts +0 -17
  271. package/dist/prompts/spam.js +0 -62
  272. package/dist/prompts/spreadsheet.d.ts +0 -21
  273. package/dist/prompts/table.d.ts +0 -14
  274. package/dist/prompts/text.d.ts +0 -17
  275. package/dist/prompts/time.d.ts +0 -12
  276. package/dist/prompts/toggle.d.ts +0 -8
  277. package/dist/prompts/toggle.js +0 -47
  278. package/dist/prompts/transfer.d.ts +0 -18
  279. package/dist/prompts/tree-select.d.ts +0 -31
  280. package/dist/prompts/tree.d.ts +0 -20
  281. package/dist/prompts/wait.d.ts +0 -18
  282. package/dist/prompts/wait.js +0 -62
  283. package/dist/spinner.d.ts +0 -33
  284. package/dist/spinner.js +0 -89
  285. package/dist/symbols.d.ts +0 -33
  286. package/dist/tasks.d.ts +0 -57
  287. package/dist/theme.d.ts +0 -2
  288. package/dist/theme.js +0 -20
  289. package/dist/types.d.ts +0 -503
  290. package/dist/types.js +0 -5
  291. package/dist/utils.d.ts +0 -81
@@ -1,23 +1,41 @@
1
1
  "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ColorPrompt = void 0;
4
- const ansi_1 = require("../ansi");
5
- const base_1 = require("../base");
6
- const theme_1 = require("../theme");
7
- class ColorPrompt extends base_1.Prompt {
8
- constructor(options) {
9
- super(options);
10
- this.activeChannel = 'r';
11
- this.inputBuffer = '';
12
- this.rgb = this.parseHex(options.initial || '#000000');
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "ColorPrompt", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return ColorPrompt;
9
+ }
10
+ });
11
+ const _ansi = require("../ansi");
12
+ const _base = require("../base");
13
+ const _theme = require("../theme");
14
+ function _define_property(obj, key, value) {
15
+ if (key in obj) {
16
+ Object.defineProperty(obj, key, {
17
+ value: value,
18
+ enumerable: true,
19
+ configurable: true,
20
+ writable: true
21
+ });
22
+ } else {
23
+ obj[key] = value;
13
24
  }
25
+ return obj;
26
+ }
27
+ let ColorPrompt = class ColorPrompt extends _base.Prompt {
14
28
  parseHex(hex) {
15
29
  const result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex);
16
30
  return result ? {
17
31
  r: parseInt(result[1], 16),
18
32
  g: parseInt(result[2], 16),
19
33
  b: parseInt(result[3], 16)
20
- } : { r: 0, g: 0, b: 0 };
34
+ } : {
35
+ r: 0,
36
+ g: 0,
37
+ b: 0
38
+ };
21
39
  }
22
40
  rgbToHex(r, g, b) {
23
41
  return "#" + ((1 << 24) + (r << 16) + (g << 8) + b).toString(16).slice(1).toUpperCase();
@@ -29,45 +47,51 @@ class ColorPrompt extends base_1.Prompt {
29
47
  render(_firstRender) {
30
48
  const { r, g, b } = this.rgb;
31
49
  const hex = this.rgbToHex(r, g, b);
32
- let output = `${theme_1.theme.title}${this.options.message}${ansi_1.ANSI.RESET} `;
33
- output += `${ansi_1.ANSI.BOLD}${hex}${ansi_1.ANSI.RESET}\n\n`;
50
+ let output = `${_theme.theme.title}${this.options.message}${_ansi.ANSI.RESET} `;
51
+ output += `${_ansi.ANSI.BOLD}${hex}${_ansi.ANSI.RESET}\n\n`;
34
52
  // Preview Block
35
53
  if (this.capabilities.hasTrueColor) {
36
54
  const bg = this.getBgColorCode(r, g, b);
37
- const block = `${bg} ${ansi_1.ANSI.RESET}`; // 8 spaces
55
+ const block = `${bg} ${_ansi.ANSI.RESET}`; // 8 spaces
38
56
  output += ` ${block}\n`;
39
57
  output += ` ${block}\n`;
40
58
  output += ` ${block}\n\n`;
41
- }
42
- else {
59
+ } else {
43
60
  // Fallback for no true color?
44
61
  // Maybe just show text or use closest 256 color?
45
62
  // For now, simpler fallback:
46
63
  output += ` (Preview unavailable in this terminal)\n\n`;
47
64
  }
48
65
  // Sliders
49
- const channels = ['r', 'g', 'b'];
50
- const labels = { r: 'Red ', g: 'Green', b: 'Blue ' };
51
- channels.forEach(ch => {
66
+ const channels = [
67
+ 'r',
68
+ 'g',
69
+ 'b'
70
+ ];
71
+ const labels = {
72
+ r: 'Red ',
73
+ g: 'Green',
74
+ b: 'Blue '
75
+ };
76
+ channels.forEach((ch)=>{
52
77
  const val = this.rgb[ch];
53
78
  const isActive = this.activeChannel === ch;
54
79
  // Render slider track
55
80
  // Width 20 chars for 0-255
56
81
  const width = 20;
57
- const pos = Math.floor((val / 255) * width);
82
+ const pos = Math.floor(val / 255 * width);
58
83
  // Wait, '⚪' might be wide. using simpler char if needed. 'O' or ANSI reverse space.
59
84
  // Let's use standard chars.
60
85
  const trackSimple = '━'.repeat(pos) + (isActive ? '●' : '○') + '─'.repeat(width - pos);
61
86
  let line = `${labels[ch]}: ${val.toString().padStart(3)} [${trackSimple}]`;
62
87
  if (isActive) {
63
- line = `${theme_1.theme.main}${ansi_1.ANSI.REVERSE} ${line} ${ansi_1.ANSI.RESET}`;
64
- }
65
- else {
88
+ line = `${_theme.theme.main}${_ansi.ANSI.REVERSE} ${line} ${_ansi.ANSI.RESET}`;
89
+ } else {
66
90
  line = ` ${line} `;
67
91
  }
68
92
  output += line + '\n';
69
93
  });
70
- output += `\n${theme_1.theme.muted}Arrows: Adjust/Switch | Shift+Arrows: Adjust fast | Enter: Submit${ansi_1.ANSI.RESET}`;
94
+ output += `\n${_theme.theme.muted}Arrows: Adjust/Switch | Shift+Arrows: Adjust fast | Enter: Submit${_ansi.ANSI.RESET}`;
71
95
  this.renderFrame(output);
72
96
  }
73
97
  handleInput(char, _key) {
@@ -82,32 +106,24 @@ class ColorPrompt extends base_1.Prompt {
82
106
  const isShiftLeft = char === '\x1b[1;2D';
83
107
  // Channel Switching (Up/Down)
84
108
  if (isUp) {
85
- if (this.activeChannel === 'g')
86
- this.activeChannel = 'r';
87
- else if (this.activeChannel === 'b')
88
- this.activeChannel = 'g';
109
+ if (this.activeChannel === 'g') this.activeChannel = 'r';
110
+ else if (this.activeChannel === 'b') this.activeChannel = 'g';
89
111
  this.render(false);
90
112
  return;
91
113
  }
92
114
  if (isDown) {
93
- if (this.activeChannel === 'r')
94
- this.activeChannel = 'g';
95
- else if (this.activeChannel === 'g')
96
- this.activeChannel = 'b';
115
+ if (this.activeChannel === 'r') this.activeChannel = 'g';
116
+ else if (this.activeChannel === 'g') this.activeChannel = 'b';
97
117
  this.render(false);
98
118
  return;
99
119
  }
100
120
  // Value Adjustment (Left/Right)
101
121
  if (isLeft || isRight || isShiftLeft || isShiftRight) {
102
122
  let change = 0;
103
- if (isRight)
104
- change = 1;
105
- if (isLeft)
106
- change = -1;
107
- if (isShiftRight)
108
- change = 10;
109
- if (isShiftLeft)
110
- change = -10;
123
+ if (isRight) change = 1;
124
+ if (isLeft) change = -1;
125
+ if (isShiftRight) change = 10;
126
+ if (isShiftLeft) change = -10;
111
127
  const val = this.rgb[this.activeChannel] + change;
112
128
  this.rgb[this.activeChannel] = Math.max(0, Math.min(255, val));
113
129
  this.render(false);
@@ -115,12 +131,9 @@ class ColorPrompt extends base_1.Prompt {
115
131
  }
116
132
  // Tab to cycle channels
117
133
  if (char === '\t') {
118
- if (this.activeChannel === 'r')
119
- this.activeChannel = 'g';
120
- else if (this.activeChannel === 'g')
121
- this.activeChannel = 'b';
122
- else
123
- this.activeChannel = 'r';
134
+ if (this.activeChannel === 'r') this.activeChannel = 'g';
135
+ else if (this.activeChannel === 'g') this.activeChannel = 'b';
136
+ else this.activeChannel = 'r';
124
137
  this.render(false);
125
138
  return;
126
139
  }
@@ -135,7 +148,7 @@ class ColorPrompt extends base_1.Prompt {
135
148
  // If Ctrl is held, adjust by a larger step (fast adjust).
136
149
  const fast = !!event.ctrl;
137
150
  const step = fast ? 10 : 1;
138
- const change = event.scroll === 'up' ? step : (event.scroll === 'down' ? -step : 0);
151
+ const change = event.scroll === 'up' ? step : event.scroll === 'down' ? -step : 0;
139
152
  if (change !== 0) {
140
153
  const val = this.rgb[this.activeChannel] + change;
141
154
  this.rgb[this.activeChannel] = Math.max(0, Math.min(255, val));
@@ -143,5 +156,10 @@ class ColorPrompt extends base_1.Prompt {
143
156
  }
144
157
  }
145
158
  }
146
- }
147
- exports.ColorPrompt = ColorPrompt;
159
+ constructor(options){
160
+ super(options), _define_property(this, "rgb", void 0), _define_property(this, "activeChannel", 'r'), _define_property(this, "inputBuffer", '');
161
+ this.rgb = this.parseHex(options.initial || '#000000');
162
+ }
163
+ };
164
+
165
+ //# sourceMappingURL=color.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/prompts/color.ts"],"sourcesContent":["import { ANSI } from '../ansi';\nimport { Prompt } from '../base';\nimport { theme } from '../theme';\nimport { ColorOptions, MouseEvent } from '../types';\n\ninterface RGB {\n r: number;\n g: number;\n b: number;\n}\n\nexport class ColorPrompt extends Prompt<string, ColorOptions> {\n private rgb: RGB;\n private activeChannel: 'r' | 'g' | 'b' = 'r';\n private inputBuffer: string = '';\n\n constructor(options: ColorOptions) {\n super(options);\n this.rgb = this.parseHex(options.initial || '#000000');\n }\n\n private parseHex(hex: string): RGB {\n const result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\n return result ? {\n r: parseInt(result[1], 16),\n g: parseInt(result[2], 16),\n b: parseInt(result[3], 16)\n } : { r: 0, g: 0, b: 0 };\n }\n\n private rgbToHex(r: number, g: number, b: number): string {\n return \"#\" + ((1 << 24) + (r << 16) + (g << 8) + b).toString(16).slice(1).toUpperCase();\n }\n\n // Helper to format ANSI TrueColor background\n private getBgColorCode(r: number, g: number, b: number): string {\n return `\\x1b[48;2;${r};${g};${b}m`;\n }\n\n protected render(_firstRender: boolean): void {\n const { r, g, b } = this.rgb;\n const hex = this.rgbToHex(r, g, b);\n\n let output = `${theme.title}${this.options.message}${ANSI.RESET} `;\n output += `${ANSI.BOLD}${hex}${ANSI.RESET}\\n\\n`;\n\n // Preview Block\n if (this.capabilities.hasTrueColor) {\n const bg = this.getBgColorCode(r, g, b);\n const block = `${bg} ${ANSI.RESET}`; // 8 spaces\n output += ` ${block}\\n`;\n output += ` ${block}\\n`;\n output += ` ${block}\\n\\n`;\n } else {\n // Fallback for no true color?\n // Maybe just show text or use closest 256 color?\n // For now, simpler fallback:\n output += ` (Preview unavailable in this terminal)\\n\\n`;\n }\n\n // Sliders\n const channels: ('r' | 'g' | 'b')[] = ['r', 'g', 'b'];\n const labels = { r: 'Red ', g: 'Green', b: 'Blue ' };\n\n channels.forEach(ch => {\n const val = this.rgb[ch];\n const isActive = this.activeChannel === ch;\n\n // Render slider track\n // Width 20 chars for 0-255\n const width = 20;\n const pos = Math.floor((val / 255) * width);\n // Wait, '⚪' might be wide. using simpler char if needed. 'O' or ANSI reverse space.\n // Let's use standard chars.\n const trackSimple = '━'.repeat(pos) + (isActive ? '●' : '○') + '─'.repeat(width - pos);\n\n let line = `${labels[ch]}: ${val.toString().padStart(3)} [${trackSimple}]`;\n\n if (isActive) {\n line = `${theme.main}${ANSI.REVERSE} ${line} ${ANSI.RESET}`;\n } else {\n line = ` ${line} `;\n }\n output += line + '\\n';\n });\n\n output += `\\n${theme.muted}Arrows: Adjust/Switch | Shift+Arrows: Adjust fast | Enter: Submit${ANSI.RESET}`;\n\n this.renderFrame(output);\n }\n\n protected handleInput(char: string, _key: Buffer): void {\n const isUp = this.isUp(char);\n const isDown = this.isDown(char);\n const isLeft = this.isLeft(char);\n const isRight = this.isRight(char);\n\n // Detect Shift key for faster movement (generic check if possible, or mapping specific codes)\n // \\x1b[1;2C is Shift+Right usually. \\x1b[1;2D is Shift+Left.\n // It varies by terminal.\n const isShiftRight = char === '\\x1b[1;2C';\n const isShiftLeft = char === '\\x1b[1;2D';\n\n // Channel Switching (Up/Down)\n if (isUp) {\n if (this.activeChannel === 'g') this.activeChannel = 'r';\n else if (this.activeChannel === 'b') this.activeChannel = 'g';\n this.render(false);\n return;\n }\n if (isDown) {\n if (this.activeChannel === 'r') this.activeChannel = 'g';\n else if (this.activeChannel === 'g') this.activeChannel = 'b';\n this.render(false);\n return;\n }\n\n // Value Adjustment (Left/Right)\n if (isLeft || isRight || isShiftLeft || isShiftRight) {\n let change = 0;\n if (isRight) change = 1;\n if (isLeft) change = -1;\n if (isShiftRight) change = 10;\n if (isShiftLeft) change = -10;\n\n const val = this.rgb[this.activeChannel] + change;\n this.rgb[this.activeChannel] = Math.max(0, Math.min(255, val));\n this.render(false);\n return;\n }\n\n // Tab to cycle channels\n if (char === '\\t') {\n if (this.activeChannel === 'r') this.activeChannel = 'g';\n else if (this.activeChannel === 'g') this.activeChannel = 'b';\n else this.activeChannel = 'r';\n this.render(false);\n return;\n }\n\n if (char === '\\r' || char === '\\n') {\n this.submit(this.rgbToHex(this.rgb.r, this.rgb.g, this.rgb.b));\n return;\n }\n }\n\n protected handleMouse(event: MouseEvent): void {\n if (event.action === 'scroll') {\n // On scroll, adjust the currently active channel's value.\n // If Ctrl is held, adjust by a larger step (fast adjust).\n const fast = !!event.ctrl;\n const step = fast ? 10 : 1;\n const change = event.scroll === 'up' ? step : (event.scroll === 'down' ? -step : 0);\n if (change !== 0) {\n const val = this.rgb[this.activeChannel] + change;\n this.rgb[this.activeChannel] = Math.max(0, Math.min(255, val));\n this.render(false);\n }\n }\n }\n}\n"],"names":["ColorPrompt","Prompt","parseHex","hex","result","exec","r","parseInt","g","b","rgbToHex","toString","slice","toUpperCase","getBgColorCode","render","_firstRender","rgb","output","theme","title","options","message","ANSI","RESET","BOLD","capabilities","hasTrueColor","bg","block","channels","labels","forEach","ch","val","isActive","activeChannel","width","pos","Math","floor","trackSimple","repeat","line","padStart","main","REVERSE","muted","renderFrame","handleInput","char","_key","isUp","isDown","isLeft","isRight","isShiftRight","isShiftLeft","change","max","min","submit","handleMouse","event","action","fast","ctrl","step","scroll","inputBuffer","initial"],"mappings":";;;;+BAWaA;;;eAAAA;;;sBAXQ;sBACE;uBACD;;;;;;;;;;;;;;AASf,IAAA,AAAMA,cAAN,MAAMA,oBAAoBC,YAAM;IAU3BC,SAASC,GAAW,EAAO;QAC/B,MAAMC,SAAS,4CAA4CC,IAAI,CAACF;QAChE,OAAOC,SAAS;YACZE,GAAGC,SAASH,MAAM,CAAC,EAAE,EAAE;YACvBI,GAAGD,SAASH,MAAM,CAAC,EAAE,EAAE;YACvBK,GAAGF,SAASH,MAAM,CAAC,EAAE,EAAE;QAC3B,IAAI;YAAEE,GAAG;YAAGE,GAAG;YAAGC,GAAG;QAAE;IAC3B;IAEQC,SAASJ,CAAS,EAAEE,CAAS,EAAEC,CAAS,EAAU;QACtD,OAAO,MAAM,AAAC,CAAA,AAAC,CAAA,KAAK,EAAC,IAAMH,CAAAA,KAAK,EAAC,IAAME,CAAAA,KAAK,CAAA,IAAKC,CAAAA,EAAGE,QAAQ,CAAC,IAAIC,KAAK,CAAC,GAAGC,WAAW;IACzF;IAEA,6CAA6C;IACrCC,eAAeR,CAAS,EAAEE,CAAS,EAAEC,CAAS,EAAU;QAC5D,OAAO,CAAC,UAAU,EAAEH,EAAE,CAAC,EAAEE,EAAE,CAAC,EAAEC,EAAE,CAAC,CAAC;IACtC;IAEUM,OAAOC,YAAqB,EAAQ;QAC1C,MAAM,EAAEV,CAAC,EAAEE,CAAC,EAAEC,CAAC,EAAE,GAAG,IAAI,CAACQ,GAAG;QAC5B,MAAMd,MAAM,IAAI,CAACO,QAAQ,CAACJ,GAAGE,GAAGC;QAEhC,IAAIS,SAAS,GAAGC,YAAK,CAACC,KAAK,GAAG,IAAI,CAACC,OAAO,CAACC,OAAO,GAAGC,UAAI,CAACC,KAAK,CAAC,CAAC,CAAC;QAClEN,UAAU,GAAGK,UAAI,CAACE,IAAI,GAAGtB,MAAMoB,UAAI,CAACC,KAAK,CAAC,IAAI,CAAC;QAE/C,gBAAgB;QAChB,IAAI,IAAI,CAACE,YAAY,CAACC,YAAY,EAAE;YAChC,MAAMC,KAAK,IAAI,CAACd,cAAc,CAACR,GAAGE,GAAGC;YACrC,MAAMoB,QAAQ,GAAGD,GAAG,QAAQ,EAAEL,UAAI,CAACC,KAAK,EAAE,EAAE,WAAW;YACvDN,UAAU,CAAC,EAAE,EAAEW,MAAM,EAAE,CAAC;YACxBX,UAAU,CAAC,EAAE,EAAEW,MAAM,EAAE,CAAC;YACxBX,UAAU,CAAC,EAAE,EAAEW,MAAM,IAAI,CAAC;QAC9B,OAAO;YACH,8BAA8B;YAC9B,iDAAiD;YACjD,6BAA6B;YAC7BX,UAAU,CAAC,4CAA4C,CAAC;QAC5D;QAEA,UAAU;QACV,MAAMY,WAAgC;YAAC;YAAK;YAAK;SAAI;QACrD,MAAMC,SAAS;YAAEzB,GAAG;YAASE,GAAG;YAASC,GAAG;QAAQ;QAEpDqB,SAASE,OAAO,CAACC,CAAAA;YACb,MAAMC,MAAM,IAAI,CAACjB,GAAG,CAACgB,GAAG;YACxB,MAAME,WAAW,IAAI,CAACC,aAAa,KAAKH;YAExC,sBAAsB;YACtB,2BAA2B;YAC3B,MAAMI,QAAQ;YACd,MAAMC,MAAMC,KAAKC,KAAK,CAAC,AAACN,MAAM,MAAOG;YACrC,oFAAoF;YACpF,4BAA4B;YAC5B,MAAMI,cAAc,IAAIC,MAAM,CAACJ,OAAQH,CAAAA,WAAW,MAAM,GAAE,IAAK,IAAIO,MAAM,CAACL,QAAQC;YAElF,IAAIK,OAAO,GAAGZ,MAAM,CAACE,GAAG,CAAC,EAAE,EAAEC,IAAIvB,QAAQ,GAAGiC,QAAQ,CAAC,GAAG,EAAE,EAAEH,YAAY,CAAC,CAAC;YAE1E,IAAIN,UAAU;gBACVQ,OAAO,GAAGxB,YAAK,CAAC0B,IAAI,GAAGtB,UAAI,CAACuB,OAAO,CAAC,CAAC,EAAEH,KAAK,CAAC,EAAEpB,UAAI,CAACC,KAAK,EAAE;YAC/D,OAAO;gBACHmB,OAAO,CAAC,CAAC,EAAEA,KAAK,CAAC,CAAC;YACtB;YACAzB,UAAUyB,OAAO;QACrB;QAEAzB,UAAU,CAAC,EAAE,EAAEC,YAAK,CAAC4B,KAAK,CAAC,iEAAiE,EAAExB,UAAI,CAACC,KAAK,EAAE;QAE1G,IAAI,CAACwB,WAAW,CAAC9B;IACrB;IAEU+B,YAAYC,IAAY,EAAEC,IAAY,EAAQ;QACpD,MAAMC,OAAO,IAAI,CAACA,IAAI,CAACF;QACvB,MAAMG,SAAS,IAAI,CAACA,MAAM,CAACH;QAC3B,MAAMI,SAAS,IAAI,CAACA,MAAM,CAACJ;QAC3B,MAAMK,UAAU,IAAI,CAACA,OAAO,CAACL;QAE7B,8FAA8F;QAC9F,6DAA6D;QAC7D,yBAAyB;QACzB,MAAMM,eAAeN,SAAS;QAC9B,MAAMO,cAAcP,SAAS;QAE7B,8BAA8B;QAC9B,IAAIE,MAAM;YACN,IAAI,IAAI,CAAChB,aAAa,KAAK,KAAK,IAAI,CAACA,aAAa,GAAG;iBAChD,IAAI,IAAI,CAACA,aAAa,KAAK,KAAK,IAAI,CAACA,aAAa,GAAG;YAC1D,IAAI,CAACrB,MAAM,CAAC;YACZ;QACJ;QACA,IAAIsC,QAAQ;YACR,IAAI,IAAI,CAACjB,aAAa,KAAK,KAAK,IAAI,CAACA,aAAa,GAAG;iBAChD,IAAI,IAAI,CAACA,aAAa,KAAK,KAAK,IAAI,CAACA,aAAa,GAAG;YAC1D,IAAI,CAACrB,MAAM,CAAC;YACZ;QACJ;QAEA,gCAAgC;QAChC,IAAIuC,UAAUC,WAAWE,eAAeD,cAAc;YAClD,IAAIE,SAAS;YACb,IAAIH,SAASG,SAAS;YACtB,IAAIJ,QAAQI,SAAS,CAAC;YACtB,IAAIF,cAAcE,SAAS;YAC3B,IAAID,aAAaC,SAAS,CAAC;YAE3B,MAAMxB,MAAM,IAAI,CAACjB,GAAG,CAAC,IAAI,CAACmB,aAAa,CAAC,GAAGsB;YAC3C,IAAI,CAACzC,GAAG,CAAC,IAAI,CAACmB,aAAa,CAAC,GAAGG,KAAKoB,GAAG,CAAC,GAAGpB,KAAKqB,GAAG,CAAC,KAAK1B;YACzD,IAAI,CAACnB,MAAM,CAAC;YACZ;QACJ;QAEA,wBAAwB;QACxB,IAAImC,SAAS,MAAM;YACf,IAAI,IAAI,CAACd,aAAa,KAAK,KAAK,IAAI,CAACA,aAAa,GAAG;iBAChD,IAAI,IAAI,CAACA,aAAa,KAAK,KAAK,IAAI,CAACA,aAAa,GAAG;iBACrD,IAAI,CAACA,aAAa,GAAG;YAC1B,IAAI,CAACrB,MAAM,CAAC;YACZ;QACJ;QAEA,IAAImC,SAAS,QAAQA,SAAS,MAAM;YAChC,IAAI,CAACW,MAAM,CAAC,IAAI,CAACnD,QAAQ,CAAC,IAAI,CAACO,GAAG,CAACX,CAAC,EAAE,IAAI,CAACW,GAAG,CAACT,CAAC,EAAE,IAAI,CAACS,GAAG,CAACR,CAAC;YAC5D;QACJ;IACJ;IAEUqD,YAAYC,KAAiB,EAAQ;QAC3C,IAAIA,MAAMC,MAAM,KAAK,UAAU;YAC3B,0DAA0D;YAC1D,0DAA0D;YAC1D,MAAMC,OAAO,CAAC,CAACF,MAAMG,IAAI;YACzB,MAAMC,OAAOF,OAAO,KAAK;YACzB,MAAMP,SAASK,MAAMK,MAAM,KAAK,OAAOD,OAAQJ,MAAMK,MAAM,KAAK,SAAS,CAACD,OAAO;YACjF,IAAIT,WAAW,GAAG;gBACd,MAAMxB,MAAM,IAAI,CAACjB,GAAG,CAAC,IAAI,CAACmB,aAAa,CAAC,GAAGsB;gBAC3C,IAAI,CAACzC,GAAG,CAAC,IAAI,CAACmB,aAAa,CAAC,GAAGG,KAAKoB,GAAG,CAAC,GAAGpB,KAAKqB,GAAG,CAAC,KAAK1B;gBACzD,IAAI,CAACnB,MAAM,CAAC;YAChB;QACJ;IACJ;IA/IA,YAAYM,OAAqB,CAAE;QAC/B,KAAK,CAACA,UALV,uBAAQJ,OAAR,KAAA,IACA,uBAAQmB,iBAAiC,MACzC,uBAAQiC,eAAsB;QAI1B,IAAI,CAACpD,GAAG,GAAG,IAAI,CAACf,QAAQ,CAACmB,QAAQiD,OAAO,IAAI;IAChD;AA6IJ"}
@@ -1,21 +1,23 @@
1
1
  "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ConfirmPrompt = void 0;
4
- const ansi_1 = require("../ansi");
5
- const base_1 = require("../base");
6
- const theme_1 = require("../theme");
7
- // --- Implementation: Confirm Prompt ---
8
- class ConfirmPrompt extends base_1.Prompt {
9
- constructor(options) {
10
- super(options);
11
- this.value = options.initial ?? true;
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "ConfirmPrompt", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return ConfirmPrompt;
12
9
  }
10
+ });
11
+ const _ansi = require("../ansi");
12
+ const _base = require("../base");
13
+ const _theme = require("../theme");
14
+ let ConfirmPrompt = class ConfirmPrompt extends _base.Prompt {
13
15
  render(_firstRender) {
14
16
  // Prepare content
15
- const hint = this.value ? `${ansi_1.ANSI.BOLD}Yes${ansi_1.ANSI.RESET}/no` : `yes/${ansi_1.ANSI.BOLD}No${ansi_1.ANSI.RESET}`;
16
- let output = `${theme_1.theme.success}?${ansi_1.ANSI.RESET} ${ansi_1.ANSI.BOLD}${theme_1.theme.title}${this.options.message}${ansi_1.ANSI.RESET} ${theme_1.theme.muted}(${hint})${ansi_1.ANSI.RESET} `;
17
+ const hint = this.value ? `${_ansi.ANSI.BOLD}Yes${_ansi.ANSI.RESET}/no` : `yes/${_ansi.ANSI.BOLD}No${_ansi.ANSI.RESET}`;
18
+ let output = `${_theme.theme.success}?${_ansi.ANSI.RESET} ${_ansi.ANSI.BOLD}${_theme.theme.title}${this.options.message}${_ansi.ANSI.RESET} ${_theme.theme.muted}(${hint})${_ansi.ANSI.RESET} `;
17
19
  const text = this.value ? 'Yes' : 'No';
18
- output += `${theme_1.theme.main}${text}${ansi_1.ANSI.RESET}`;
20
+ output += `${_theme.theme.main}${text}${_ansi.ANSI.RESET}`;
19
21
  this.renderFrame(output);
20
22
  }
21
23
  handleInput(char) {
@@ -44,5 +46,10 @@ class ConfirmPrompt extends base_1.Prompt {
44
46
  this.render(false);
45
47
  }
46
48
  }
47
- }
48
- exports.ConfirmPrompt = ConfirmPrompt;
49
+ constructor(options){
50
+ super(options);
51
+ this.value = options.initial ?? true;
52
+ }
53
+ };
54
+
55
+ //# sourceMappingURL=confirm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/prompts/confirm.ts"],"sourcesContent":["import { ANSI } from '../ansi';\nimport { Prompt } from '../base';\nimport { theme } from '../theme';\nimport { ConfirmOptions, MouseEvent } from '../types';\n\n// --- Implementation: Confirm Prompt ---\nexport class ConfirmPrompt extends Prompt<boolean, ConfirmOptions> {\n constructor(options: ConfirmOptions) {\n super(options);\n this.value = options.initial ?? true;\n }\n\n protected render(_firstRender: boolean) {\n // Prepare content\n const hint = this.value ? `${ANSI.BOLD}Yes${ANSI.RESET}/no` : `yes/${ANSI.BOLD}No${ANSI.RESET}`;\n let output = `${theme.success}?${ANSI.RESET} ${ANSI.BOLD}${theme.title}${this.options.message}${ANSI.RESET} ${theme.muted}(${hint})${ANSI.RESET} `;\n const text = this.value ? 'Yes' : 'No';\n output += `${theme.main}${text}${ANSI.RESET}`;\n\n this.renderFrame(output);\n }\n\n protected handleInput(char: string) {\n const c = char.toLowerCase();\n if (c === '\\r' || c === '\\n') {\n this.submit(this.value);\n return;\n }\n if (c === 'y') { this.value = true; this.render(false); }\n if (c === 'n') { this.value = false; this.render(false); }\n\n // Allow left/right to toggle as well for better UX\n if (this.isLeft(char) || this.isRight(char)) {\n this.value = !this.value;\n this.render(false);\n }\n }\n\n protected handleMouse(event: MouseEvent) {\n if (event.action === 'scroll') {\n this.value = !this.value;\n this.render(false);\n }\n }\n}\n"],"names":["ConfirmPrompt","Prompt","render","_firstRender","hint","value","ANSI","BOLD","RESET","output","theme","success","title","options","message","muted","text","main","renderFrame","handleInput","char","c","toLowerCase","submit","isLeft","isRight","handleMouse","event","action","initial"],"mappings":";;;;+BAMaA;;;eAAAA;;;sBANQ;sBACE;uBACD;AAIf,IAAA,AAAMA,gBAAN,MAAMA,sBAAsBC,YAAM;IAM3BC,OAAOC,YAAqB,EAAE;QACpC,kBAAkB;QAClB,MAAMC,OAAO,IAAI,CAACC,KAAK,GAAG,GAAGC,UAAI,CAACC,IAAI,CAAC,GAAG,EAAED,UAAI,CAACE,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAEF,UAAI,CAACC,IAAI,CAAC,EAAE,EAAED,UAAI,CAACE,KAAK,EAAE;QAC/F,IAAIC,SAAS,GAAGC,YAAK,CAACC,OAAO,CAAC,CAAC,EAAEL,UAAI,CAACE,KAAK,CAAC,CAAC,EAAEF,UAAI,CAACC,IAAI,GAAGG,YAAK,CAACE,KAAK,GAAG,IAAI,CAACC,OAAO,CAACC,OAAO,GAAGR,UAAI,CAACE,KAAK,CAAC,CAAC,EAAEE,YAAK,CAACK,KAAK,CAAC,CAAC,EAAEX,KAAK,CAAC,EAAEE,UAAI,CAACE,KAAK,CAAC,CAAC,CAAC;QAClJ,MAAMQ,OAAO,IAAI,CAACX,KAAK,GAAG,QAAQ;QAClCI,UAAU,GAAGC,YAAK,CAACO,IAAI,GAAGD,OAAOV,UAAI,CAACE,KAAK,EAAE;QAE7C,IAAI,CAACU,WAAW,CAACT;IACrB;IAEUU,YAAYC,IAAY,EAAE;QAChC,MAAMC,IAAID,KAAKE,WAAW;QAC1B,IAAID,MAAM,QAAQA,MAAM,MAAM;YAC1B,IAAI,CAACE,MAAM,CAAC,IAAI,CAAClB,KAAK;YACtB;QACJ;QACA,IAAIgB,MAAM,KAAK;YAAE,IAAI,CAAChB,KAAK,GAAG;YAAM,IAAI,CAACH,MAAM,CAAC;QAAQ;QACxD,IAAImB,MAAM,KAAK;YAAE,IAAI,CAAChB,KAAK,GAAG;YAAO,IAAI,CAACH,MAAM,CAAC;QAAQ;QAEzD,mDAAmD;QACnD,IAAI,IAAI,CAACsB,MAAM,CAACJ,SAAS,IAAI,CAACK,OAAO,CAACL,OAAO;YACzC,IAAI,CAACf,KAAK,GAAG,CAAC,IAAI,CAACA,KAAK;YACxB,IAAI,CAACH,MAAM,CAAC;QAChB;IACJ;IAEUwB,YAAYC,KAAiB,EAAE;QACrC,IAAIA,MAAMC,MAAM,KAAK,UAAU;YAC3B,IAAI,CAACvB,KAAK,GAAG,CAAC,IAAI,CAACA,KAAK;YACxB,IAAI,CAACH,MAAM,CAAC;QAChB;IACJ;IApCA,YAAYW,OAAuB,CAAE;QACjC,KAAK,CAACA;QACN,IAAI,CAACR,KAAK,GAAGQ,QAAQgB,OAAO,IAAI;IACpC;AAkCJ"}
@@ -1,88 +1,106 @@
1
1
  "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.connectionString = connectionString;
4
- const select_1 = require("./select");
5
- const text_1 = require("./text");
6
- const number_1 = require("./number");
7
- const confirm_1 = require("./confirm");
8
- const file_1 = require("./file");
9
- const DEFAULT_PROTOCOLS = ['postgres', 'mysql', 'mongodb', 'redis', 'amqp', 'sqlite'];
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "connectionString", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return connectionString;
9
+ }
10
+ });
11
+ const _select = require("./select");
12
+ const _text = require("./text");
13
+ const _number = require("./number");
14
+ const _confirm = require("./confirm");
15
+ const _file = require("./file");
16
+ const DEFAULT_PROTOCOLS = [
17
+ 'postgres',
18
+ 'mysql',
19
+ 'mongodb',
20
+ 'redis',
21
+ 'amqp',
22
+ 'sqlite'
23
+ ];
10
24
  const DEFAULT_PORTS = {
11
25
  postgres: 5432,
12
26
  mysql: 3306,
13
27
  mongodb: 27017,
14
28
  redis: 6379,
15
- amqp: 5672,
29
+ amqp: 5672
16
30
  };
17
31
  async function connectionString(options) {
18
32
  const protocols = options.protocols || DEFAULT_PROTOCOLS;
19
- const defaults = { ...DEFAULT_PORTS, ...options.defaults };
33
+ const defaults = {
34
+ ...DEFAULT_PORTS,
35
+ ...options.defaults
36
+ };
20
37
  // 1. Protocol Selection
21
- const protocol = await new select_1.SelectPrompt({
38
+ const protocol = await new _select.SelectPrompt({
22
39
  message: options.message,
23
- choices: protocols.map(p => ({ title: p, value: p })),
40
+ choices: protocols.map((p)=>({
41
+ title: p,
42
+ value: p
43
+ }))
24
44
  }).run();
25
- const parts = { protocol };
45
+ const parts = {
46
+ protocol
47
+ };
26
48
  let raw = '';
27
49
  if (protocol === 'sqlite') {
28
50
  // SQLite: File Path
29
- const filePath = await new file_1.FilePrompt({
30
- message: 'Database file path',
51
+ const filePath = await new _file.FilePrompt({
52
+ message: 'Database file path'
31
53
  }).run();
32
54
  parts.filePath = filePath;
33
55
  // Construct SQLite URI
34
56
  raw = `sqlite://${filePath}`;
35
- }
36
- else {
57
+ } else {
37
58
  // Network Database
38
59
  // 2. Host
39
- const host = await new text_1.TextPrompt({
60
+ const host = await new _text.TextPrompt({
40
61
  message: 'Host',
41
62
  initial: 'localhost',
42
- placeholder: 'localhost',
63
+ placeholder: 'localhost'
43
64
  }).run();
44
65
  parts.host = host;
45
66
  // 3. Port
46
67
  const defaultPort = defaults[protocol];
47
- const port = await new number_1.NumberPrompt({
68
+ const port = await new _number.NumberPrompt({
48
69
  message: 'Port',
49
- initial: defaultPort,
70
+ initial: defaultPort
50
71
  }).run();
51
72
  parts.port = port;
52
73
  // 4. Auth
53
- const hasAuth = await new confirm_1.ConfirmPrompt({
74
+ const hasAuth = await new _confirm.ConfirmPrompt({
54
75
  message: 'Authentication required?',
55
- initial: true,
76
+ initial: true
56
77
  }).run();
57
78
  if (hasAuth) {
58
- const user = await new text_1.TextPrompt({
79
+ const user = await new _text.TextPrompt({
59
80
  message: 'Username',
60
- initial: 'root', // Common default
81
+ initial: 'root'
61
82
  }).run();
62
83
  parts.user = user;
63
84
  // Use TextPrompt with empty mask for secret handling
64
- const password = await new text_1.TextPrompt({
85
+ const password = await new _text.TextPrompt({
65
86
  message: 'Password',
66
- mask: '*', // Mask with asterisks
87
+ mask: '*'
67
88
  }).run();
68
89
  parts.password = password;
69
90
  }
70
91
  // 5. Database
71
- const database = await new text_1.TextPrompt({
72
- message: 'Database name',
92
+ const database = await new _text.TextPrompt({
93
+ message: 'Database name'
73
94
  }).run();
74
95
  parts.database = database;
75
96
  // Construct URL
76
97
  try {
77
98
  // Use URL object for safe construction and encoding
78
99
  const u = new URL(`${protocol}://${host}:${port}/${database}`);
79
- if (parts.user)
80
- u.username = parts.user;
81
- if (parts.password)
82
- u.password = parts.password;
100
+ if (parts.user) u.username = parts.user;
101
+ if (parts.password) u.password = parts.password;
83
102
  raw = u.toString();
84
- }
85
- catch (_e) {
103
+ } catch (_e) {
86
104
  // Fallback manual construction with encoding
87
105
  const userEncoded = parts.user ? encodeURIComponent(parts.user) : '';
88
106
  const passEncoded = parts.password ? encodeURIComponent(parts.password) : '';
@@ -93,5 +111,10 @@ async function connectionString(options) {
93
111
  raw = `${protocol}://${authPart}${host}:${port}/${parts.database}`;
94
112
  }
95
113
  }
96
- return { raw, parts };
114
+ return {
115
+ raw,
116
+ parts
117
+ };
97
118
  }
119
+
120
+ //# sourceMappingURL=connection-string.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/prompts/connection-string.ts"],"sourcesContent":["import { SelectPrompt } from './select';\nimport { TextPrompt } from './text';\nimport { NumberPrompt } from './number';\nimport { ConfirmPrompt } from './confirm';\nimport { FilePrompt } from './file';\n\nexport interface ConnectionStringOptions {\n message: string;\n protocols?: string[];\n defaults?: Record<string, number>;\n}\n\nexport interface ConnectionStringResult {\n raw: string;\n parts: {\n protocol: string;\n host?: string;\n port?: number;\n user?: string;\n password?: string;\n database?: string;\n filePath?: string;\n };\n}\n\nconst DEFAULT_PROTOCOLS = ['postgres', 'mysql', 'mongodb', 'redis', 'amqp', 'sqlite'];\n\nconst DEFAULT_PORTS: Record<string, number> = {\n postgres: 5432,\n mysql: 3306,\n mongodb: 27017,\n redis: 6379,\n amqp: 5672,\n};\n\nexport async function connectionString(options: ConnectionStringOptions): Promise<ConnectionStringResult> {\n const protocols = options.protocols || DEFAULT_PROTOCOLS;\n const defaults = { ...DEFAULT_PORTS, ...options.defaults };\n\n // 1. Protocol Selection\n const protocol = await new SelectPrompt({\n message: options.message,\n choices: protocols.map(p => ({ title: p, value: p })),\n }).run();\n\n const parts: ConnectionStringResult['parts'] = { protocol };\n let raw = '';\n\n if (protocol === 'sqlite') {\n // SQLite: File Path\n const filePath = await new FilePrompt({\n message: 'Database file path',\n }).run();\n parts.filePath = filePath;\n // Construct SQLite URI\n raw = `sqlite://${filePath}`;\n } else {\n // Network Database\n // 2. Host\n const host = await new TextPrompt({\n message: 'Host',\n initial: 'localhost',\n placeholder: 'localhost',\n }).run();\n parts.host = host;\n\n // 3. Port\n const defaultPort = defaults[protocol];\n const port = await new NumberPrompt({\n message: 'Port',\n initial: defaultPort,\n }).run();\n parts.port = port;\n\n // 4. Auth\n const hasAuth = await new ConfirmPrompt({\n message: 'Authentication required?',\n initial: true,\n }).run();\n\n if (hasAuth) {\n const user = await new TextPrompt({\n message: 'Username',\n initial: 'root', // Common default\n }).run();\n parts.user = user;\n\n // Use TextPrompt with empty mask for secret handling\n const password = await new TextPrompt({\n message: 'Password',\n mask: '*', // Mask with asterisks\n }).run();\n parts.password = password;\n }\n\n // 5. Database\n const database = await new TextPrompt({\n message: 'Database name',\n }).run();\n parts.database = database;\n\n // Construct URL\n try {\n // Use URL object for safe construction and encoding\n const u = new URL(`${protocol}://${host}:${port}/${database}`);\n if (parts.user) u.username = parts.user;\n if (parts.password) u.password = parts.password;\n raw = u.toString();\n } catch (_e) {\n // Fallback manual construction with encoding\n const userEncoded = parts.user ? encodeURIComponent(parts.user) : '';\n const passEncoded = parts.password ? encodeURIComponent(parts.password) : '';\n let authPart = '';\n if (userEncoded || passEncoded) {\n authPart = `${userEncoded}:${passEncoded}@`;\n }\n raw = `${protocol}://${authPart}${host}:${port}/${parts.database}`;\n }\n }\n\n return { raw, parts };\n}\n"],"names":["connectionString","DEFAULT_PROTOCOLS","DEFAULT_PORTS","postgres","mysql","mongodb","redis","amqp","options","protocols","defaults","protocol","SelectPrompt","message","choices","map","p","title","value","run","parts","raw","filePath","FilePrompt","host","TextPrompt","initial","placeholder","defaultPort","port","NumberPrompt","hasAuth","ConfirmPrompt","user","password","mask","database","u","URL","username","toString","_e","userEncoded","encodeURIComponent","passEncoded","authPart"],"mappings":"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"}