mepcli 1.4.0 → 2.0.0-beta.2

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 (290) hide show
  1. package/README.md +43 -12
  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 -322
  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/{pipeline.js → src/pipeline.js} +120 -93
  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 +15 -16
  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 -90
  193. package/dist/prompts/autocomplete.d.ts +0 -22
  194. package/dist/prompts/box.d.ts +0 -21
  195. package/dist/prompts/breadcrumb-search.d.ts +0 -14
  196. package/dist/prompts/breadcrumb.d.ts +0 -32
  197. package/dist/prompts/byte.d.ts +0 -13
  198. package/dist/prompts/calculator.d.ts +0 -17
  199. package/dist/prompts/calendar.d.ts +0 -33
  200. package/dist/prompts/checkbox.d.ts +0 -13
  201. package/dist/prompts/code.d.ts +0 -19
  202. package/dist/prompts/color.d.ts +0 -14
  203. package/dist/prompts/confirm.d.ts +0 -8
  204. package/dist/prompts/connection-string.d.ts +0 -18
  205. package/dist/prompts/cron.d.ts +0 -13
  206. package/dist/prompts/curl-utils.d.ts +0 -25
  207. package/dist/prompts/curl-utils.js +0 -41
  208. package/dist/prompts/curl.d.ts +0 -41
  209. package/dist/prompts/data-inspector.d.ts +0 -22
  210. package/dist/prompts/date.d.ts +0 -12
  211. package/dist/prompts/dependency.d.ts +0 -16
  212. package/dist/prompts/dial.d.ts +0 -10
  213. package/dist/prompts/diff.d.ts +0 -10
  214. package/dist/prompts/diff.js +0 -101
  215. package/dist/prompts/draw.d.ts +0 -20
  216. package/dist/prompts/editor.d.ts +0 -14
  217. package/dist/prompts/editor.js +0 -203
  218. package/dist/prompts/emoji.d.ts +0 -18
  219. package/dist/prompts/exec.d.ts +0 -17
  220. package/dist/prompts/file.d.ts +0 -21
  221. package/dist/prompts/file.js +0 -210
  222. package/dist/prompts/form.d.ts +0 -18
  223. package/dist/prompts/fuzzy-multi-column.d.ts +0 -12
  224. package/dist/prompts/fuzzy.d.ts +0 -12
  225. package/dist/prompts/gauge.d.ts +0 -21
  226. package/dist/prompts/gauge.js +0 -130
  227. package/dist/prompts/grid.d.ts +0 -14
  228. package/dist/prompts/heatmap.d.ts +0 -13
  229. package/dist/prompts/ip.d.ts +0 -11
  230. package/dist/prompts/kanban.d.ts +0 -17
  231. package/dist/prompts/keypress.d.ts +0 -7
  232. package/dist/prompts/keypress.js +0 -55
  233. package/dist/prompts/license.d.ts +0 -9
  234. package/dist/prompts/license.js +0 -105
  235. package/dist/prompts/list.d.ts +0 -9
  236. package/dist/prompts/map.d.ts +0 -17
  237. package/dist/prompts/match.d.ts +0 -19
  238. package/dist/prompts/miller.d.ts +0 -15
  239. package/dist/prompts/multi-column-select.d.ts +0 -10
  240. package/dist/prompts/multi-range.d.ts +0 -9
  241. package/dist/prompts/multi-select.d.ts +0 -15
  242. package/dist/prompts/number.d.ts +0 -11
  243. package/dist/prompts/otp.d.ts +0 -10
  244. package/dist/prompts/pattern.d.ts +0 -22
  245. package/dist/prompts/phone.d.ts +0 -41
  246. package/dist/prompts/quiz-select.d.ts +0 -10
  247. package/dist/prompts/quiz-select.js +0 -104
  248. package/dist/prompts/quiz-text.d.ts +0 -11
  249. package/dist/prompts/quiz-text.js +0 -82
  250. package/dist/prompts/range.d.ts +0 -9
  251. package/dist/prompts/rating.d.ts +0 -8
  252. package/dist/prompts/regex.d.ts +0 -13
  253. package/dist/prompts/region.d.ts +0 -11
  254. package/dist/prompts/schedule.d.ts +0 -20
  255. package/dist/prompts/scroll.d.ts +0 -13
  256. package/dist/prompts/seat.d.ts +0 -17
  257. package/dist/prompts/seat.js +0 -165
  258. package/dist/prompts/select-range.d.ts +0 -8
  259. package/dist/prompts/select.d.ts +0 -15
  260. package/dist/prompts/semver.d.ts +0 -6
  261. package/dist/prompts/shortcut.d.ts +0 -9
  262. package/dist/prompts/shortcut.js +0 -135
  263. package/dist/prompts/slider.d.ts +0 -8
  264. package/dist/prompts/slot.d.ts +0 -16
  265. package/dist/prompts/slot.js +0 -107
  266. package/dist/prompts/snippet.d.ts +0 -19
  267. package/dist/prompts/sort-grid.d.ts +0 -16
  268. package/dist/prompts/sort.d.ts +0 -14
  269. package/dist/prompts/spam.d.ts +0 -17
  270. package/dist/prompts/spam.js +0 -62
  271. package/dist/prompts/spreadsheet.d.ts +0 -21
  272. package/dist/prompts/table.d.ts +0 -14
  273. package/dist/prompts/text.d.ts +0 -17
  274. package/dist/prompts/time.d.ts +0 -12
  275. package/dist/prompts/toggle.d.ts +0 -8
  276. package/dist/prompts/toggle.js +0 -47
  277. package/dist/prompts/transfer.d.ts +0 -18
  278. package/dist/prompts/tree-select.d.ts +0 -31
  279. package/dist/prompts/tree.d.ts +0 -20
  280. package/dist/prompts/wait.d.ts +0 -18
  281. package/dist/prompts/wait.js +0 -62
  282. package/dist/spinner.d.ts +0 -33
  283. package/dist/spinner.js +0 -89
  284. package/dist/symbols.d.ts +0 -33
  285. package/dist/tasks.d.ts +0 -57
  286. package/dist/theme.d.ts +0 -2
  287. package/dist/theme.js +0 -20
  288. package/dist/types.d.ts +0 -503
  289. package/dist/types.js +0 -5
  290. package/dist/utils.d.ts +0 -81
@@ -1,68 +1,67 @@
1
1
  "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.CurlPrompt = void 0;
4
- const base_1 = require("../base");
5
- const ansi_1 = require("../ansi");
6
- const theme_1 = require("../theme");
7
- const symbols_1 = require("../symbols");
8
- const map_1 = require("./map");
9
- const code_1 = require("./code");
10
- const utils_1 = require("../utils");
11
- const curl_utils_1 = require("./curl-utils");
12
- var Section;
13
- (function (Section) {
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "CurlPrompt", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return CurlPrompt;
9
+ }
10
+ });
11
+ const _base = require("../base");
12
+ const _ansi = require("../ansi");
13
+ const _theme = require("../theme");
14
+ const _symbols = require("../symbols");
15
+ const _map = require("./map");
16
+ const _code = require("./code");
17
+ const _utils = require("../utils");
18
+ const _curlutils = require("./curl-utils");
19
+ function _define_property(obj, key, value) {
20
+ if (key in obj) {
21
+ Object.defineProperty(obj, key, {
22
+ value: value,
23
+ enumerable: true,
24
+ configurable: true,
25
+ writable: true
26
+ });
27
+ } else {
28
+ obj[key] = value;
29
+ }
30
+ return obj;
31
+ }
32
+ var Section = /*#__PURE__*/ function(Section) {
14
33
  Section[Section["METHOD"] = 0] = "METHOD";
15
34
  Section[Section["URL"] = 1] = "URL";
16
35
  Section[Section["HEADERS"] = 2] = "HEADERS";
17
36
  Section[Section["BODY"] = 3] = "BODY";
18
- })(Section || (Section = {}));
19
- const METHODS = ['GET', 'POST', 'PUT', 'DELETE', 'PATCH', 'HEAD', 'OPTIONS'];
37
+ return Section;
38
+ }(Section || {});
39
+ const METHODS = [
40
+ 'GET',
41
+ 'POST',
42
+ 'PUT',
43
+ 'DELETE',
44
+ 'PATCH',
45
+ 'HEAD',
46
+ 'OPTIONS'
47
+ ];
20
48
  const COMMON_HEADERS = [
21
- 'Accept', 'Accept-Encoding', 'Accept-Language',
22
- 'Authorization', 'Cache-Control', 'Connection',
23
- 'Content-Type', 'Cookie', 'Host',
24
- 'Origin', 'Pragma', 'Referer',
25
- 'User-Agent', 'X-Requested-With'
49
+ 'Accept',
50
+ 'Accept-Encoding',
51
+ 'Accept-Language',
52
+ 'Authorization',
53
+ 'Cache-Control',
54
+ 'Connection',
55
+ 'Content-Type',
56
+ 'Cookie',
57
+ 'Host',
58
+ 'Origin',
59
+ 'Pragma',
60
+ 'Referer',
61
+ 'User-Agent',
62
+ 'X-Requested-With'
26
63
  ];
27
- class CurlPrompt extends base_1.Prompt {
28
- constructor(options) {
29
- super(options);
30
- this.section = Section.METHOD;
31
- this.methodIndex = 0;
32
- // URL State
33
- this.urlSegments = [];
34
- this.urlCursor = 0;
35
- this.headers = {};
36
- this.body = '';
37
- // Render State
38
- this.lastLinesUp = 0;
39
- // Shell State
40
- this.shell = 'bash';
41
- this.strategies = {
42
- bash: new curl_utils_1.BashStrategy(),
43
- powershell: new curl_utils_1.PowerShellStrategy(),
44
- cmd: new curl_utils_1.CmdStrategy()
45
- };
46
- // Auto-detect shell
47
- if (process.platform === 'win32') {
48
- this.shell = 'powershell';
49
- }
50
- // Initialize state
51
- if (options.defaultMethod) {
52
- const idx = METHODS.indexOf(options.defaultMethod.toUpperCase());
53
- if (idx >= 0)
54
- this.methodIndex = idx;
55
- }
56
- const initialUrl = options.defaultUrl || '';
57
- this.urlSegments = (0, utils_1.safeSplit)(initialUrl);
58
- this.urlCursor = this.urlSegments.length;
59
- this.headers = { ...options.defaultHeaders };
60
- this.body = options.defaultBody || '';
61
- // Auto-select URL if method is GET (default)
62
- if (this.methodIndex === 0) {
63
- this.section = Section.URL;
64
- }
65
- }
64
+ let CurlPrompt = class CurlPrompt extends _base.Prompt {
66
65
  get currentMethod() {
67
66
  return METHODS[this.methodIndex];
68
67
  }
@@ -73,7 +72,11 @@ class CurlPrompt extends base_1.Prompt {
73
72
  return this.urlSegments.join('');
74
73
  }
75
74
  cycleShell() {
76
- const shells = ['bash', 'powershell', 'cmd'];
75
+ const shells = [
76
+ 'bash',
77
+ 'powershell',
78
+ 'cmd'
79
+ ];
77
80
  const currentIdx = shells.indexOf(this.shell);
78
81
  this.shell = shells[(currentIdx + 1) % shells.length];
79
82
  this.render(false);
@@ -87,7 +90,7 @@ class CurlPrompt extends base_1.Prompt {
87
90
  const continuation = multiline ? `${strategy.continuation}\n ` : ' ';
88
91
  let cmd = `${strategy.binary} -X ${this.currentMethod}`;
89
92
  // Headers
90
- Object.entries(this.headers).forEach(([k, v]) => {
93
+ Object.entries(this.headers).forEach(([k, v])=>{
91
94
  cmd += `${continuation}-H ${strategy.escape(`${k}: ${v}`)}`;
92
95
  });
93
96
  // Body
@@ -108,67 +111,61 @@ class CurlPrompt extends base_1.Prompt {
108
111
  this.lastLinesUp = 0;
109
112
  let output = '';
110
113
  // Title
111
- const shellLabel = `${theme_1.theme.muted}[Shell: ${this.shell.toUpperCase()}]${ansi_1.ANSI.RESET}`;
112
- output += `${theme_1.theme.success}? ${ansi_1.ANSI.BOLD}${theme_1.theme.title}${this.options.message} ${shellLabel}${ansi_1.ANSI.RESET}\n`;
114
+ const shellLabel = `${_theme.theme.muted}[Shell: ${this.shell.toUpperCase()}]${_ansi.ANSI.RESET}`;
115
+ output += `${_theme.theme.success}? ${_ansi.ANSI.BOLD}${_theme.theme.title}${this.options.message} ${shellLabel}${_ansi.ANSI.RESET}\n`;
113
116
  // 1. Method
114
- const methodLabel = this.section === Section.METHOD
115
- ? `${theme_1.theme.main}${ansi_1.ANSI.REVERSE} ${this.currentMethod} ${ansi_1.ANSI.RESET}`
116
- : `${ansi_1.ANSI.BOLD}[${this.currentMethod}]${ansi_1.ANSI.RESET}`;
117
+ const methodLabel = this.section === 0 ? `${_theme.theme.main}${_ansi.ANSI.REVERSE} ${this.currentMethod} ${_ansi.ANSI.RESET}` : `${_ansi.ANSI.BOLD}[${this.currentMethod}]${_ansi.ANSI.RESET}`;
117
118
  output += `\n${methodLabel}`;
118
119
  // 2. URL
119
- const urlActive = this.section === Section.URL;
120
- const urlPrefix = urlActive ? `${theme_1.theme.main}${ansi_1.ANSI.BOLD} URL: ${ansi_1.ANSI.RESET}` : ` URL: `;
120
+ const urlActive = this.section === 1;
121
+ const urlPrefix = urlActive ? `${_theme.theme.main}${_ansi.ANSI.BOLD} URL: ${_ansi.ANSI.RESET}` : ` URL: `;
121
122
  let urlDisplay = '';
122
123
  if (this.urlSegments.length === 0 && urlActive) {
123
124
  // Placeholder/Empty state when active
124
125
  urlDisplay = '';
125
- }
126
- else if (this.urlSegments.length === 0 && !urlActive) {
127
- urlDisplay = `${theme_1.theme.muted}http://localhost:3000${ansi_1.ANSI.RESET}`;
128
- }
129
- else {
126
+ } else if (this.urlSegments.length === 0 && !urlActive) {
127
+ urlDisplay = `${_theme.theme.muted}http://localhost:3000${_ansi.ANSI.RESET}`;
128
+ } else {
130
129
  urlDisplay = this.urlSegments.join('');
131
130
  }
132
131
  output += `${urlPrefix}${urlDisplay}\n`;
133
132
  // 3. Headers
134
133
  const headersCount = Object.keys(this.headers).length;
135
- const headersActive = this.section === Section.HEADERS;
136
- const headersPointer = headersActive ? `${theme_1.theme.main}${symbols_1.symbols.pointer} ` : ' ';
137
- const headersStyle = headersActive ? `${theme_1.theme.main}${ansi_1.ANSI.UNDERLINE}` : '';
138
- output += `${headersPointer}${headersStyle}HEADERS${ansi_1.ANSI.RESET} (${headersCount} defined)\n`;
134
+ const headersActive = this.section === 2;
135
+ const headersPointer = headersActive ? `${_theme.theme.main}${_symbols.symbols.pointer} ` : ' ';
136
+ const headersStyle = headersActive ? `${_theme.theme.main}${_ansi.ANSI.UNDERLINE}` : '';
137
+ output += `${headersPointer}${headersStyle}HEADERS${_ansi.ANSI.RESET} (${headersCount} defined)\n`;
139
138
  // 4. Body
140
139
  if (this.hasBody) {
141
- const bodyActive = this.section === Section.BODY;
142
- const bodyPointer = bodyActive ? `${theme_1.theme.main}${symbols_1.symbols.pointer} ` : ' ';
143
- const bodyStyle = bodyActive ? `${theme_1.theme.main}${ansi_1.ANSI.UNDERLINE}` : '';
140
+ const bodyActive = this.section === 3;
141
+ const bodyPointer = bodyActive ? `${_theme.theme.main}${_symbols.symbols.pointer} ` : ' ';
142
+ const bodyStyle = bodyActive ? `${_theme.theme.main}${_ansi.ANSI.UNDERLINE}` : '';
144
143
  let bodyPreview = '';
145
144
  if (this.body) {
146
145
  const oneLiner = this.body.replace(/\n/g, ' ').substring(0, 40);
147
- bodyPreview = `${theme_1.theme.muted} ${oneLiner}...${ansi_1.ANSI.RESET}`;
148
- }
149
- else {
150
- bodyPreview = `${theme_1.theme.muted} (empty)${ansi_1.ANSI.RESET}`;
146
+ bodyPreview = `${_theme.theme.muted} ${oneLiner}...${_ansi.ANSI.RESET}`;
147
+ } else {
148
+ bodyPreview = `${_theme.theme.muted} (empty)${_ansi.ANSI.RESET}`;
151
149
  }
152
- output += `${bodyPointer}${bodyStyle}BODY${ansi_1.ANSI.RESET}${bodyPreview}\n`;
153
- }
154
- else {
155
- output += ` ${theme_1.theme.muted}BODY (Disabled for ${this.currentMethod})${ansi_1.ANSI.RESET}\n`;
150
+ output += `${bodyPointer}${bodyStyle}BODY${_ansi.ANSI.RESET}${bodyPreview}\n`;
151
+ } else {
152
+ output += ` ${_theme.theme.muted}BODY (Disabled for ${this.currentMethod})${_ansi.ANSI.RESET}\n`;
156
153
  }
157
154
  // Preview
158
- output += `\n${ansi_1.ANSI.BOLD}Preview:${ansi_1.ANSI.RESET}\n`;
155
+ output += `\n${_ansi.ANSI.BOLD}Preview:${_ansi.ANSI.RESET}\n`;
159
156
  // Use multiline mode for preview
160
157
  const cmd = this.generateCommand(true);
161
158
  // Syntax highlight command (basic)
162
- output += `${ansi_1.ANSI.FG_CYAN}${cmd}${ansi_1.ANSI.RESET}\n`;
159
+ output += `${_ansi.ANSI.FG_CYAN}${cmd}${_ansi.ANSI.RESET}\n`;
163
160
  // Instructions
164
- output += `\n${theme_1.theme.muted}(Tab: Nav, 's': Shell, Space: Toggle Method, Enter: Edit/Submit)${ansi_1.ANSI.RESET}`;
161
+ output += `\n${_theme.theme.muted}(Tab: Nav, 's': Shell, Space: Toggle Method, Enter: Edit/Submit)${_ansi.ANSI.RESET}`;
165
162
  this.renderFrame(output);
166
163
  // Cursor Positioning
167
- if (this.section === Section.URL) {
164
+ if (this.section === 1) {
168
165
  const prefixLen = 6; // " URL: "
169
166
  // Use lastRenderLines to find the exact visual line index
170
167
  let urlLineIndex = -1;
171
- for (let i = 0; i < this.lastRenderLines.length; i++) {
168
+ for(let i = 0; i < this.lastRenderLines.length; i++){
172
169
  if (this.lastRenderLines[i].includes(' URL: ')) {
173
170
  urlLineIndex = i;
174
171
  break;
@@ -176,7 +173,7 @@ class CurlPrompt extends base_1.Prompt {
176
173
  }
177
174
  if (urlLineIndex !== -1) {
178
175
  const linesFromBottom = this.lastRenderLines.length - 1 - urlLineIndex;
179
- this.print(ansi_1.ANSI.SHOW_CURSOR);
176
+ this.print(_ansi.ANSI.SHOW_CURSOR);
180
177
  if (linesFromBottom > 0) {
181
178
  this.print(`\x1b[${linesFromBottom}A`);
182
179
  this.lastLinesUp = linesFromBottom;
@@ -184,14 +181,13 @@ class CurlPrompt extends base_1.Prompt {
184
181
  // Calculate visual cursor position
185
182
  let targetCol = prefixLen;
186
183
  // Add width of segments up to cursor
187
- for (let i = 0; i < this.urlCursor; i++) {
188
- targetCol += (0, utils_1.stringWidth)(this.urlSegments[i]);
184
+ for(let i = 0; i < this.urlCursor; i++){
185
+ targetCol += (0, _utils.stringWidth)(this.urlSegments[i]);
189
186
  }
190
187
  this.print(`\r\x1b[${targetCol}C`);
191
188
  }
192
- }
193
- else {
194
- this.print(ansi_1.ANSI.HIDE_CURSOR);
189
+ } else {
190
+ this.print(_ansi.ANSI.HIDE_CURSOR);
195
191
  }
196
192
  }
197
193
  cleanup() {
@@ -203,7 +199,7 @@ class CurlPrompt extends base_1.Prompt {
203
199
  }
204
200
  handleInput(char, _buffer) {
205
201
  // Toggle Shell (only when not editing URL)
206
- if (char === 's' && this.section !== Section.URL) {
202
+ if (char === 's' && this.section !== 1) {
207
203
  this.cycleShell();
208
204
  return;
209
205
  }
@@ -213,35 +209,33 @@ class CurlPrompt extends base_1.Prompt {
213
209
  this.render(false);
214
210
  return;
215
211
  }
216
- if (char === '\u001b[Z') { // Shift+Tab
212
+ if (char === '\u001b[Z') {
217
213
  this.cycleSection(-1);
218
214
  this.render(false);
219
215
  return;
220
216
  }
221
217
  // Section Specifics
222
- switch (this.section) {
223
- case Section.METHOD:
218
+ switch(this.section){
219
+ case 0:
224
220
  if (char === ' ' || this.isRight(char) || this.isDown(char)) {
225
221
  this.methodIndex = (this.methodIndex + 1) % METHODS.length;
226
222
  this.render(false);
227
- }
228
- else if (this.isLeft(char) || this.isUp(char)) {
223
+ } else if (this.isLeft(char) || this.isUp(char)) {
229
224
  this.methodIndex = (this.methodIndex - 1 + METHODS.length) % METHODS.length;
230
225
  this.render(false);
231
- }
232
- else if (char === '\r' || char === '\n') {
226
+ } else if (char === '\r' || char === '\n') {
233
227
  this.submitResult();
234
228
  }
235
229
  break;
236
- case Section.URL:
230
+ case 1:
237
231
  this.handleUrlInput(char);
238
232
  break;
239
- case Section.HEADERS:
233
+ case 2:
240
234
  if (char === '\r' || char === '\n') {
241
235
  this.editHeaders();
242
236
  }
243
237
  break;
244
- case Section.BODY:
238
+ case 3:
245
239
  if (char === '\r' || char === '\n') {
246
240
  this.editBody();
247
241
  }
@@ -281,11 +275,9 @@ class CurlPrompt extends base_1.Prompt {
281
275
  // Find previous word boundary
282
276
  let i = this.urlCursor - 1;
283
277
  // Skip trailing spaces
284
- while (i >= 0 && this.urlSegments[i] === ' ')
285
- i--;
278
+ while(i >= 0 && this.urlSegments[i] === ' ')i--;
286
279
  // Skip word characters
287
- while (i >= 0 && this.urlSegments[i] !== ' ')
288
- i--;
280
+ while(i >= 0 && this.urlSegments[i] !== ' ')i--;
289
281
  const deleteCount = this.urlCursor - (i + 1);
290
282
  this.urlSegments.splice(i + 1, deleteCount);
291
283
  this.urlCursor = i + 1;
@@ -328,7 +320,7 @@ class CurlPrompt extends base_1.Prompt {
328
320
  }
329
321
  // Regular Typing
330
322
  if (!/^[\x00-\x1F]/.test(char) && !char.startsWith('\x1b')) {
331
- const newSegments = (0, utils_1.safeSplit)(char);
323
+ const newSegments = (0, _utils.safeSplit)(char);
332
324
  this.urlSegments.splice(this.urlCursor, 0, ...newSegments);
333
325
  this.urlCursor += newSegments.length;
334
326
  this.render(false);
@@ -336,12 +328,10 @@ class CurlPrompt extends base_1.Prompt {
336
328
  }
337
329
  cycleSection(direction) {
338
330
  let next = this.section + direction;
339
- if (next > Section.BODY)
340
- next = Section.METHOD;
341
- if (next < Section.METHOD)
342
- next = Section.BODY;
343
- if (next === Section.BODY && !this.hasBody) {
344
- next = direction === 1 ? Section.METHOD : Section.HEADERS;
331
+ if (next > 3) next = 0;
332
+ if (next < 0) next = 3;
333
+ if (next === 3 && !this.hasBody) {
334
+ next = direction === 1 ? 0 : 2;
345
335
  }
346
336
  this.section = next;
347
337
  }
@@ -356,7 +346,7 @@ class CurlPrompt extends base_1.Prompt {
356
346
  if (this.lastRenderHeight > 0) {
357
347
  this.print(`\x1b[${this.lastRenderHeight - 1}A`); // Go to top line
358
348
  this.print('\r'); // Go to start of line
359
- this.print(ansi_1.ANSI.ERASE_DOWN); // Erase everything below
349
+ this.print(_ansi.ANSI.ERASE_DOWN); // Erase everything below
360
350
  // Reset state so next render is treated as fresh
361
351
  this.lastRenderLines = [];
362
352
  this.lastRenderHeight = 0;
@@ -366,15 +356,14 @@ class CurlPrompt extends base_1.Prompt {
366
356
  this.clear(); // Clear UI to prevent artifacts
367
357
  this.pauseInput();
368
358
  try {
369
- const result = await new map_1.MapPrompt({
359
+ const result = await new _map.MapPrompt({
370
360
  message: 'Edit Headers',
371
361
  initial: this.headers,
372
362
  suggestions: COMMON_HEADERS
373
363
  }).run();
374
364
  this.headers = result;
375
- }
376
- catch (_e) {
377
- // Cancelled
365
+ } catch (_e) {
366
+ // Cancelled
378
367
  }
379
368
  this.resumeInput();
380
369
  this.render(true); // Force full re-render
@@ -383,16 +372,17 @@ class CurlPrompt extends base_1.Prompt {
383
372
  this.clear(); // Clear UI to prevent artifacts
384
373
  this.pauseInput();
385
374
  try {
386
- const result = await new code_1.CodePrompt({
375
+ const result = await new _code.CodePrompt({
387
376
  message: 'Edit Body (JSON)',
388
377
  template: '${json}',
389
378
  highlight: true,
390
- values: this.body ? { json: this.body } : undefined
379
+ values: this.body ? {
380
+ json: this.body
381
+ } : undefined
391
382
  }).run();
392
383
  this.body = result;
393
- }
394
- catch (_e) {
395
- // Cancelled
384
+ } catch (_e) {
385
+ // Cancelled
396
386
  }
397
387
  this.resumeInput();
398
388
  this.render(true); // Force full re-render
@@ -406,5 +396,36 @@ class CurlPrompt extends base_1.Prompt {
406
396
  command: this.generateCommand(false) // Single line for clipboard/usage
407
397
  });
408
398
  }
409
- }
410
- exports.CurlPrompt = CurlPrompt;
399
+ constructor(options){
400
+ super(options), _define_property(this, "section", 0), _define_property(this, "methodIndex", 0), // URL State
401
+ _define_property(this, "urlSegments", []), _define_property(this, "urlCursor", 0), _define_property(this, "headers", {}), _define_property(this, "body", ''), // Render State
402
+ _define_property(this, "lastLinesUp", 0), // Shell State
403
+ _define_property(this, "shell", 'bash'), _define_property(this, "strategies", {
404
+ bash: new _curlutils.BashStrategy(),
405
+ powershell: new _curlutils.PowerShellStrategy(),
406
+ cmd: new _curlutils.CmdStrategy()
407
+ });
408
+ // Auto-detect shell
409
+ if (process.platform === 'win32') {
410
+ this.shell = 'powershell';
411
+ }
412
+ // Initialize state
413
+ if (options.defaultMethod) {
414
+ const idx = METHODS.indexOf(options.defaultMethod.toUpperCase());
415
+ if (idx >= 0) this.methodIndex = idx;
416
+ }
417
+ const initialUrl = options.defaultUrl || '';
418
+ this.urlSegments = (0, _utils.safeSplit)(initialUrl);
419
+ this.urlCursor = this.urlSegments.length;
420
+ this.headers = {
421
+ ...options.defaultHeaders
422
+ };
423
+ this.body = options.defaultBody || '';
424
+ // Auto-select URL if method is GET (default)
425
+ if (this.methodIndex === 0) {
426
+ this.section = 1;
427
+ }
428
+ }
429
+ };
430
+
431
+ //# sourceMappingURL=curl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/prompts/curl.ts"],"sourcesContent":["import { Prompt } from '../base';\nimport { ANSI } from '../ansi';\nimport { theme } from '../theme';\nimport { symbols } from '../symbols';\nimport { MapPrompt } from './map';\nimport { CodePrompt } from './code';\nimport { safeSplit, stringWidth } from '../utils';\nimport { ShellType, ShellStrategy, BashStrategy, PowerShellStrategy, CmdStrategy } from './curl-utils';\n\nexport interface CurlOptions {\n message: string;\n defaultMethod?: string;\n defaultUrl?: string;\n defaultHeaders?: Record<string, string>;\n defaultBody?: string;\n}\n\nexport interface CurlResult {\n method: string;\n url: string;\n headers: Record<string, string>;\n body?: string;\n command: string;\n}\n\nenum Section {\n METHOD = 0,\n URL = 1,\n HEADERS = 2,\n BODY = 3,\n}\n\nconst METHODS = ['GET', 'POST', 'PUT', 'DELETE', 'PATCH', 'HEAD', 'OPTIONS'];\nconst COMMON_HEADERS = [\n 'Accept', 'Accept-Encoding', 'Accept-Language',\n 'Authorization', 'Cache-Control', 'Connection',\n 'Content-Type', 'Cookie', 'Host',\n 'Origin', 'Pragma', 'Referer',\n 'User-Agent', 'X-Requested-With'\n];\n\nexport class CurlPrompt extends Prompt<CurlResult, CurlOptions> {\n private section: Section = Section.METHOD;\n private methodIndex: number = 0;\n \n // URL State\n private urlSegments: string[] = [];\n private urlCursor: number = 0;\n\n private headers: Record<string, string> = {};\n private body: string = '';\n\n // Render State\n private lastLinesUp: number = 0;\n\n // Shell State\n private shell: ShellType = 'bash';\n private strategies: Record<ShellType, ShellStrategy> = {\n bash: new BashStrategy(),\n powershell: new PowerShellStrategy(),\n cmd: new CmdStrategy()\n };\n\n constructor(options: CurlOptions) {\n super(options);\n\n // Auto-detect shell\n if (process.platform === 'win32') {\n this.shell = 'powershell';\n }\n\n // Initialize state\n if (options.defaultMethod) {\n const idx = METHODS.indexOf(options.defaultMethod.toUpperCase());\n if (idx >= 0) this.methodIndex = idx;\n }\n\n const initialUrl = options.defaultUrl || '';\n this.urlSegments = safeSplit(initialUrl);\n this.urlCursor = this.urlSegments.length;\n\n this.headers = { ...options.defaultHeaders };\n this.body = options.defaultBody || '';\n\n // Auto-select URL if method is GET (default)\n if (this.methodIndex === 0) {\n this.section = Section.URL;\n }\n }\n\n private get currentMethod(): string {\n return METHODS[this.methodIndex];\n }\n\n private get hasBody(): boolean {\n return this.currentMethod !== 'GET' && this.currentMethod !== 'HEAD';\n }\n\n private get url(): string {\n return this.urlSegments.join('');\n }\n\n private cycleShell() {\n const shells: ShellType[] = ['bash', 'powershell', 'cmd'];\n const currentIdx = shells.indexOf(this.shell);\n this.shell = shells[(currentIdx + 1) % shells.length];\n this.render(false);\n }\n\n private generateCommand(multiline: boolean = false): string {\n // Force single line for CMD\n if (this.shell === 'cmd') {\n multiline = false;\n }\n\n const strategy = this.strategies[this.shell];\n const continuation = multiline ? `${strategy.continuation}\\n ` : ' ';\n let cmd = `${strategy.binary} -X ${this.currentMethod}`;\n\n // Headers\n Object.entries(this.headers).forEach(([k, v]) => {\n cmd += `${continuation}-H ${strategy.escape(`${k}: ${v}`)}`;\n });\n\n // Body\n if (this.hasBody && this.body) {\n const escapedBody = strategy.escape(this.body);\n cmd += `${continuation}-d ${escapedBody}`;\n }\n\n // URL\n const urlStr = this.url;\n const displayUrl = urlStr || 'http://localhost...';\n \n cmd += `${continuation}${strategy.escape(displayUrl)}`;\n\n return cmd;\n }\n\n protected render(firstRender: boolean) {\n if (!firstRender && this.lastLinesUp > 0) {\n this.print(`\\x1b[${this.lastLinesUp}B`);\n }\n this.lastLinesUp = 0;\n\n let output = '';\n\n // Title\n const shellLabel = `${theme.muted}[Shell: ${this.shell.toUpperCase()}]${ANSI.RESET}`;\n output += `${theme.success}? ${ANSI.BOLD}${theme.title}${this.options.message} ${shellLabel}${ANSI.RESET}\\n`;\n\n // 1. Method\n const methodLabel = this.section === Section.METHOD\n ? `${theme.main}${ANSI.REVERSE} ${this.currentMethod} ${ANSI.RESET}`\n : `${ANSI.BOLD}[${this.currentMethod}]${ANSI.RESET}`;\n\n output += `\\n${methodLabel}`;\n\n // 2. URL\n const urlActive = this.section === Section.URL;\n const urlPrefix = urlActive ? `${theme.main}${ANSI.BOLD} URL: ${ANSI.RESET}` : ` URL: `;\n \n let urlDisplay = '';\n if (this.urlSegments.length === 0 && urlActive) {\n // Placeholder/Empty state when active\n urlDisplay = ''; \n } else if (this.urlSegments.length === 0 && !urlActive) {\n urlDisplay = `${theme.muted}http://localhost:3000${ANSI.RESET}`;\n } else {\n urlDisplay = this.urlSegments.join('');\n }\n \n output += `${urlPrefix}${urlDisplay}\\n`;\n\n // 3. Headers\n const headersCount = Object.keys(this.headers).length;\n const headersActive = this.section === Section.HEADERS;\n const headersPointer = headersActive ? `${theme.main}${symbols.pointer} ` : ' ';\n const headersStyle = headersActive ? `${theme.main}${ANSI.UNDERLINE}` : '';\n output += `${headersPointer}${headersStyle}HEADERS${ANSI.RESET} (${headersCount} defined)\\n`;\n\n // 4. Body\n if (this.hasBody) {\n const bodyActive = this.section === Section.BODY;\n const bodyPointer = bodyActive ? `${theme.main}${symbols.pointer} ` : ' ';\n const bodyStyle = bodyActive ? `${theme.main}${ANSI.UNDERLINE}` : '';\n\n let bodyPreview = '';\n if (this.body) {\n const oneLiner = this.body.replace(/\\n/g, ' ').substring(0, 40);\n bodyPreview = `${theme.muted} ${oneLiner}...${ANSI.RESET}`;\n } else {\n bodyPreview = `${theme.muted} (empty)${ANSI.RESET}`;\n }\n\n output += `${bodyPointer}${bodyStyle}BODY${ANSI.RESET}${bodyPreview}\\n`;\n } else {\n output += ` ${theme.muted}BODY (Disabled for ${this.currentMethod})${ANSI.RESET}\\n`;\n }\n\n // Preview\n output += `\\n${ANSI.BOLD}Preview:${ANSI.RESET}\\n`;\n // Use multiline mode for preview\n const cmd = this.generateCommand(true);\n // Syntax highlight command (basic)\n output += `${ANSI.FG_CYAN}${cmd}${ANSI.RESET}\\n`;\n\n // Instructions\n output += `\\n${theme.muted}(Tab: Nav, 's': Shell, Space: Toggle Method, Enter: Edit/Submit)${ANSI.RESET}`;\n\n this.renderFrame(output);\n\n // Cursor Positioning\n if (this.section === Section.URL) {\n const prefixLen = 6; // \" URL: \"\n\n // Use lastRenderLines to find the exact visual line index\n let urlLineIndex = -1;\n for (let i = 0; i < this.lastRenderLines.length; i++) {\n if (this.lastRenderLines[i].includes(' URL: ')) {\n urlLineIndex = i;\n break;\n }\n }\n\n if (urlLineIndex !== -1) {\n const linesFromBottom = this.lastRenderLines.length - 1 - urlLineIndex;\n\n this.print(ANSI.SHOW_CURSOR);\n if (linesFromBottom > 0) {\n this.print(`\\x1b[${linesFromBottom}A`);\n this.lastLinesUp = linesFromBottom;\n }\n\n // Calculate visual cursor position\n let targetCol = prefixLen;\n \n // Add width of segments up to cursor\n for (let i = 0; i < this.urlCursor; i++) {\n targetCol += stringWidth(this.urlSegments[i]);\n }\n\n this.print(`\\r\\x1b[${targetCol}C`);\n }\n } else {\n this.print(ANSI.HIDE_CURSOR);\n }\n }\n\n protected cleanup() {\n if (this.lastLinesUp > 0) {\n this.print(`\\x1b[${this.lastLinesUp}B`);\n this.lastLinesUp = 0;\n }\n super.cleanup();\n }\n\n protected handleInput(char: string, _buffer: Buffer) {\n // Toggle Shell (only when not editing URL)\n if (char === 's' && this.section !== Section.URL) {\n this.cycleShell();\n return;\n }\n\n // Navigation\n if (char === '\\t') {\n this.cycleSection(1);\n this.render(false);\n return;\n }\n\n if (char === '\\u001b[Z') { // Shift+Tab\n this.cycleSection(-1);\n this.render(false);\n return;\n }\n\n // Section Specifics\n switch (this.section) {\n case Section.METHOD:\n if (char === ' ' || this.isRight(char) || this.isDown(char)) {\n this.methodIndex = (this.methodIndex + 1) % METHODS.length;\n this.render(false);\n } else if (this.isLeft(char) || this.isUp(char)) {\n this.methodIndex = (this.methodIndex - 1 + METHODS.length) % METHODS.length;\n this.render(false);\n } else if (char === '\\r' || char === '\\n') {\n this.submitResult();\n }\n break;\n\n case Section.URL:\n this.handleUrlInput(char);\n break;\n\n case Section.HEADERS:\n if (char === '\\r' || char === '\\n') {\n this.editHeaders();\n }\n break;\n\n case Section.BODY:\n if (char === '\\r' || char === '\\n') {\n this.editBody();\n }\n break;\n }\n }\n\n private handleUrlInput(char: string) {\n // Submit\n if (char === '\\r' || char === '\\n') {\n this.submitResult();\n return;\n }\n\n // Home\n if (char === '\\x1b[H' || char === '\\x1bOH' || char === '\\x1b[1~') {\n this.urlCursor = 0;\n this.render(false);\n return;\n }\n\n // End\n if (char === '\\x1b[F' || char === '\\x1bOF' || char === '\\x1b[4~') {\n this.urlCursor = this.urlSegments.length;\n this.render(false);\n return;\n }\n\n // Ctrl+U (Delete to start)\n if (char === '\\x15') {\n if (this.urlCursor > 0) {\n this.urlSegments.splice(0, this.urlCursor);\n this.urlCursor = 0;\n this.render(false);\n }\n return;\n }\n\n // Ctrl+W (Delete word backwards)\n if (char === '\\x17') {\n if (this.urlCursor > 0) {\n // Find previous word boundary\n let i = this.urlCursor - 1;\n // Skip trailing spaces\n while (i >= 0 && this.urlSegments[i] === ' ') i--;\n // Skip word characters\n while (i >= 0 && this.urlSegments[i] !== ' ') i--;\n \n const deleteCount = this.urlCursor - (i + 1);\n this.urlSegments.splice(i + 1, deleteCount);\n this.urlCursor = i + 1;\n this.render(false);\n }\n return;\n }\n\n // Backspace\n if (char === '\\u0008' || char === '\\x7f') {\n if (this.urlCursor > 0) {\n this.urlSegments.splice(this.urlCursor - 1, 1);\n this.urlCursor--;\n this.render(false);\n }\n return;\n }\n\n // Delete\n if (char === '\\u001b[3~') {\n if (this.urlCursor < this.urlSegments.length) {\n this.urlSegments.splice(this.urlCursor, 1);\n this.render(false);\n }\n return;\n }\n\n // Left\n if (this.isLeft(char)) {\n if (this.urlCursor > 0) {\n this.urlCursor--;\n this.render(false);\n }\n return;\n }\n\n // Right\n if (this.isRight(char)) {\n if (this.urlCursor < this.urlSegments.length) {\n this.urlCursor++;\n this.render(false);\n }\n return;\n }\n\n // Regular Typing\n if (!/^[\\x00-\\x1F]/.test(char) && !char.startsWith('\\x1b')) {\n const newSegments = safeSplit(char);\n this.urlSegments.splice(this.urlCursor, 0, ...newSegments);\n this.urlCursor += newSegments.length;\n this.render(false);\n }\n }\n\n private cycleSection(direction: 1 | -1) {\n let next = this.section + direction;\n if (next > Section.BODY) next = Section.METHOD;\n if (next < Section.METHOD) next = Section.BODY;\n\n if (next === Section.BODY && !this.hasBody) {\n next = direction === 1 ? Section.METHOD : Section.HEADERS;\n }\n\n this.section = next;\n }\n\n private clear() {\n // 1. Restore cursor to bottom if it was moved up (for URL editing)\n if (this.lastLinesUp > 0) {\n this.print(`\\x1b[${this.lastLinesUp}B`);\n this.lastLinesUp = 0;\n }\n\n // 2. Erase the prompt content\n // We move up (height - 1) lines to the top line, then erase everything below\n if (this.lastRenderHeight > 0) {\n this.print(`\\x1b[${this.lastRenderHeight - 1}A`); // Go to top line\n this.print('\\r'); // Go to start of line\n this.print(ANSI.ERASE_DOWN); // Erase everything below\n\n // Reset state so next render is treated as fresh\n this.lastRenderLines = [];\n this.lastRenderHeight = 0;\n }\n }\n\n private async editHeaders() {\n this.clear(); // Clear UI to prevent artifacts\n this.pauseInput();\n try {\n const result = await new MapPrompt({\n message: 'Edit Headers',\n initial: this.headers,\n suggestions: COMMON_HEADERS\n }).run();\n this.headers = result;\n } catch (_e) {\n // Cancelled\n }\n\n this.resumeInput();\n this.render(true); // Force full re-render\n }\n\n private async editBody() {\n this.clear(); // Clear UI to prevent artifacts\n this.pauseInput();\n\n try {\n const result = await new CodePrompt({\n message: 'Edit Body (JSON)',\n template: '${json}',\n highlight: true,\n values: this.body ? { json: this.body } : undefined\n }).run();\n this.body = result;\n } catch (_e) {\n // Cancelled\n }\n\n this.resumeInput();\n this.render(true); // Force full re-render\n }\n\n private submitResult() {\n this.submit({\n method: this.currentMethod,\n url: this.url,\n headers: this.headers,\n body: this.hasBody ? this.body : undefined,\n command: this.generateCommand(false) // Single line for clipboard/usage\n });\n }\n}\n"],"names":["CurlPrompt","Section","METHODS","COMMON_HEADERS","Prompt","currentMethod","methodIndex","hasBody","url","urlSegments","join","cycleShell","shells","currentIdx","indexOf","shell","length","render","generateCommand","multiline","strategy","strategies","continuation","cmd","binary","Object","entries","headers","forEach","k","v","escape","body","escapedBody","urlStr","displayUrl","firstRender","lastLinesUp","print","output","shellLabel","theme","muted","toUpperCase","ANSI","RESET","success","BOLD","title","options","message","methodLabel","section","main","REVERSE","urlActive","urlPrefix","urlDisplay","headersCount","keys","headersActive","headersPointer","symbols","pointer","headersStyle","UNDERLINE","bodyActive","bodyPointer","bodyStyle","bodyPreview","oneLiner","replace","substring","FG_CYAN","renderFrame","prefixLen","urlLineIndex","i","lastRenderLines","includes","linesFromBottom","SHOW_CURSOR","targetCol","urlCursor","stringWidth","HIDE_CURSOR","cleanup","handleInput","char","_buffer","cycleSection","isRight","isDown","isLeft","isUp","submitResult","handleUrlInput","editHeaders","editBody","splice","deleteCount","test","startsWith","newSegments","safeSplit","direction","next","clear","lastRenderHeight","ERASE_DOWN","pauseInput","result","MapPrompt","initial","suggestions","run","_e","resumeInput","CodePrompt","template","highlight","values","json","undefined","submit","method","command","bash","BashStrategy","powershell","PowerShellStrategy","CmdStrategy","process","platform","defaultMethod","idx","initialUrl","defaultUrl","defaultHeaders","defaultBody"],"mappings":"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"}