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.
- package/README.md +43 -12
- package/dist/{ansi.js → src/ansi.js} +17 -9
- package/dist/src/ansi.js.map +1 -0
- package/dist/{base.js → src/base.js} +82 -70
- package/dist/src/base.js.map +1 -0
- package/dist/{core.js → src/core.js} +266 -322
- package/dist/src/core.js.map +1 -0
- package/dist/src/data/countries.js +569 -0
- package/dist/src/data/countries.js.map +1 -0
- package/dist/src/data/licenses.js +480 -0
- package/dist/src/data/licenses.js.map +1 -0
- package/dist/{highlight.js → src/highlight.js} +77 -69
- package/dist/src/highlight.js.map +1 -0
- package/dist/src/index.js +66 -0
- package/dist/src/index.js.map +1 -0
- package/dist/{input.js → src/input.js} +47 -41
- package/dist/src/input.js.map +1 -0
- package/dist/{pipeline.js → src/pipeline.js} +120 -93
- package/dist/src/pipeline.js.map +1 -0
- package/dist/{prompts → src/prompts}/autocomplete.js +58 -57
- package/dist/src/prompts/autocomplete.js.map +1 -0
- package/dist/{prompts → src/prompts}/box.js +86 -53
- package/dist/src/prompts/box.js.map +1 -0
- package/dist/{prompts → src/prompts}/breadcrumb-search.js +110 -98
- package/dist/src/prompts/breadcrumb-search.js.map +1 -0
- package/dist/{prompts → src/prompts}/breadcrumb.js +126 -121
- package/dist/src/prompts/breadcrumb.js.map +1 -0
- package/dist/{prompts → src/prompts}/byte.js +69 -52
- package/dist/src/prompts/byte.js.map +1 -0
- package/dist/{prompts → src/prompts}/calculator.js +79 -56
- package/dist/src/prompts/calculator.js.map +1 -0
- package/dist/{prompts → src/prompts}/calendar.js +167 -127
- package/dist/src/prompts/calendar.js.map +1 -0
- package/dist/{prompts → src/prompts}/checkbox.js +53 -49
- package/dist/src/prompts/checkbox.js.map +1 -0
- package/dist/{prompts → src/prompts}/code.js +88 -76
- package/dist/src/prompts/code.js.map +1 -0
- package/dist/{prompts → src/prompts}/color.js +68 -50
- package/dist/src/prompts/color.js.map +1 -0
- package/dist/{prompts → src/prompts}/confirm.js +22 -15
- package/dist/src/prompts/confirm.js.map +1 -0
- package/dist/{prompts → src/prompts}/connection-string.js +59 -36
- package/dist/src/prompts/connection-string.js.map +1 -0
- package/dist/{prompts → src/prompts}/cron.js +90 -59
- package/dist/src/prompts/cron.js.map +1 -0
- package/dist/src/prompts/curl-utils.js +71 -0
- package/dist/src/prompts/curl-utils.js.map +1 -0
- package/dist/{prompts → src/prompts}/curl.js +153 -132
- package/dist/src/prompts/curl.js.map +1 -0
- package/dist/{prompts → src/prompts}/data-inspector.js +96 -91
- package/dist/src/prompts/data-inspector.js.map +1 -0
- package/dist/{prompts → src/prompts}/date.js +64 -57
- package/dist/src/prompts/date.js.map +1 -0
- package/dist/{prompts → src/prompts}/dependency.js +84 -80
- package/dist/src/prompts/dependency.js.map +1 -0
- package/dist/{prompts → src/prompts}/dial.js +49 -35
- package/dist/src/prompts/dial.js.map +1 -0
- package/dist/src/prompts/diff.js +118 -0
- package/dist/src/prompts/diff.js.map +1 -0
- package/dist/{prompts → src/prompts}/draw.js +83 -80
- package/dist/src/prompts/draw.js.map +1 -0
- package/dist/src/prompts/editor.js +234 -0
- package/dist/src/prompts/editor.js.map +1 -0
- package/dist/{prompts → src/prompts}/emoji.js +80 -82
- package/dist/src/prompts/emoji.js.map +1 -0
- package/dist/{prompts → src/prompts}/exec.js +60 -46
- package/dist/src/prompts/exec.js.map +1 -0
- package/dist/src/prompts/file.js +217 -0
- package/dist/src/prompts/file.js.map +1 -0
- package/dist/{prompts → src/prompts}/form.js +63 -54
- package/dist/src/prompts/form.js.map +1 -0
- package/dist/{prompts → src/prompts}/fuzzy-multi-column.js +65 -53
- package/dist/src/prompts/fuzzy-multi-column.js.map +1 -0
- package/dist/{prompts → src/prompts}/fuzzy.js +66 -55
- package/dist/src/prompts/fuzzy.js.map +1 -0
- package/dist/src/prompts/gauge.js +137 -0
- package/dist/src/prompts/gauge.js.map +1 -0
- package/dist/{prompts → src/prompts}/grid.js +70 -57
- package/dist/src/prompts/grid.js.map +1 -0
- package/dist/{prompts → src/prompts}/heatmap.js +70 -64
- package/dist/src/prompts/heatmap.js.map +1 -0
- package/dist/{prompts → src/prompts}/ip.js +56 -36
- package/dist/src/prompts/ip.js.map +1 -0
- package/dist/{prompts → src/prompts}/kanban.js +63 -58
- package/dist/src/prompts/kanban.js.map +1 -0
- package/dist/src/prompts/keypress.js +54 -0
- package/dist/src/prompts/keypress.js.map +1 -0
- package/dist/src/prompts/license.js +144 -0
- package/dist/src/prompts/license.js.map +1 -0
- package/dist/{prompts → src/prompts}/list.js +46 -31
- package/dist/src/prompts/list.js.map +1 -0
- package/dist/{prompts → src/prompts}/map.js +93 -77
- package/dist/src/prompts/map.js.map +1 -0
- package/dist/{prompts → src/prompts}/match.js +91 -95
- package/dist/src/prompts/match.js.map +1 -0
- package/dist/{prompts → src/prompts}/miller.js +74 -67
- package/dist/src/prompts/miller.js.map +1 -0
- package/dist/{prompts → src/prompts}/multi-column-select.js +54 -44
- package/dist/src/prompts/multi-column-select.js.map +1 -0
- package/dist/{prompts → src/prompts}/multi-range.js +70 -52
- package/dist/src/prompts/multi-range.js.map +1 -0
- package/dist/{prompts → src/prompts}/multi-select.js +67 -58
- package/dist/src/prompts/multi-select.js.map +1 -0
- package/dist/{prompts → src/prompts}/number.js +51 -39
- package/dist/src/prompts/number.js.map +1 -0
- package/dist/{prompts → src/prompts}/otp.js +43 -27
- package/dist/src/prompts/otp.js.map +1 -0
- package/dist/{prompts → src/prompts}/pattern.js +74 -71
- package/dist/src/prompts/pattern.js.map +1 -0
- package/dist/{prompts → src/prompts}/phone.js +107 -118
- package/dist/src/prompts/phone.js.map +1 -0
- package/dist/src/prompts/quiz-select.js +114 -0
- package/dist/src/prompts/quiz-select.js.map +1 -0
- package/dist/src/prompts/quiz-text.js +98 -0
- package/dist/src/prompts/quiz-text.js.map +1 -0
- package/dist/{prompts → src/prompts}/range.js +85 -61
- package/dist/src/prompts/range.js.map +1 -0
- package/dist/{prompts → src/prompts}/rating.js +29 -24
- package/dist/src/prompts/rating.js.map +1 -0
- package/dist/{prompts → src/prompts}/regex.js +50 -36
- package/dist/src/prompts/regex.js.map +1 -0
- package/dist/{prompts → src/prompts}/region.js +62 -56
- package/dist/src/prompts/region.js.map +1 -0
- package/dist/{prompts → src/prompts}/schedule.js +82 -75
- package/dist/src/prompts/schedule.js.map +1 -0
- package/dist/{prompts → src/prompts}/scroll.js +61 -58
- package/dist/src/prompts/scroll.js.map +1 -0
- package/dist/src/prompts/seat.js +164 -0
- package/dist/src/prompts/seat.js.map +1 -0
- package/dist/{prompts → src/prompts}/select-range.js +58 -46
- package/dist/src/prompts/select-range.js.map +1 -0
- package/dist/{prompts → src/prompts}/select.js +65 -66
- package/dist/src/prompts/select.js.map +1 -0
- package/dist/{prompts → src/prompts}/semver.js +24 -13
- package/dist/src/prompts/semver.js.map +1 -0
- package/dist/src/prompts/shortcut.js +133 -0
- package/dist/src/prompts/shortcut.js.map +1 -0
- package/dist/{prompts → src/prompts}/slider.js +28 -23
- package/dist/src/prompts/slider.js.map +1 -0
- package/dist/src/prompts/slot.js +117 -0
- package/dist/src/prompts/slot.js.map +1 -0
- package/dist/{prompts → src/prompts}/snippet.js +82 -61
- package/dist/src/prompts/snippet.js.map +1 -0
- package/dist/{prompts → src/prompts}/sort-grid.js +64 -59
- package/dist/src/prompts/sort-grid.js.map +1 -0
- package/dist/{prompts → src/prompts}/sort.js +59 -49
- package/dist/src/prompts/sort.js.map +1 -0
- package/dist/src/prompts/spam.js +80 -0
- package/dist/src/prompts/spam.js.map +1 -0
- package/dist/{prompts → src/prompts}/spreadsheet.js +71 -70
- package/dist/src/prompts/spreadsheet.js.map +1 -0
- package/dist/{prompts → src/prompts}/table.js +52 -38
- package/dist/src/prompts/table.js.map +1 -0
- package/dist/{prompts → src/prompts}/text.js +74 -70
- package/dist/src/prompts/text.js.map +1 -0
- package/dist/{prompts → src/prompts}/time.js +105 -96
- package/dist/src/prompts/time.js.map +1 -0
- package/dist/src/prompts/toggle.js +53 -0
- package/dist/src/prompts/toggle.js.map +1 -0
- package/dist/{prompts → src/prompts}/transfer.js +71 -67
- package/dist/src/prompts/transfer.js.map +1 -0
- package/dist/{prompts → src/prompts}/tree-select.js +83 -86
- package/dist/src/prompts/tree-select.js.map +1 -0
- package/dist/{prompts → src/prompts}/tree.js +69 -67
- package/dist/src/prompts/tree.js.map +1 -0
- package/dist/src/prompts/wait.js +79 -0
- package/dist/src/prompts/wait.js.map +1 -0
- package/dist/src/spinner.js +105 -0
- package/dist/src/spinner.js.map +1 -0
- package/dist/{symbols.js → src/symbols.js} +32 -7
- package/dist/src/symbols.js.map +1 -0
- package/dist/{tasks.js → src/tasks.js} +104 -79
- package/dist/src/tasks.js.map +1 -0
- package/dist/src/theme.js +29 -0
- package/dist/src/theme.js.map +1 -0
- package/dist/src/types.js +8 -0
- package/dist/src/types.js.map +1 -0
- package/dist/{utils.js → src/utils.js} +196 -152
- package/dist/src/utils.js.map +1 -0
- package/package.json +15 -16
- package/dist/ansi.d.ts +0 -36
- package/dist/base.d.ts +0 -60
- package/dist/core.d.ts +0 -1072
- package/dist/data/countries.d.ts +0 -2
- package/dist/data/countries.js +0 -105
- package/dist/data/licenses.d.ts +0 -2
- package/dist/data/licenses.js +0 -109
- package/dist/highlight.d.ts +0 -7
- package/dist/index.d.ts +0 -48
- package/dist/index.js +0 -64
- package/dist/input.d.ts +0 -14
- package/dist/pipeline.d.ts +0 -90
- package/dist/prompts/autocomplete.d.ts +0 -22
- package/dist/prompts/box.d.ts +0 -21
- package/dist/prompts/breadcrumb-search.d.ts +0 -14
- package/dist/prompts/breadcrumb.d.ts +0 -32
- package/dist/prompts/byte.d.ts +0 -13
- package/dist/prompts/calculator.d.ts +0 -17
- package/dist/prompts/calendar.d.ts +0 -33
- package/dist/prompts/checkbox.d.ts +0 -13
- package/dist/prompts/code.d.ts +0 -19
- package/dist/prompts/color.d.ts +0 -14
- package/dist/prompts/confirm.d.ts +0 -8
- package/dist/prompts/connection-string.d.ts +0 -18
- package/dist/prompts/cron.d.ts +0 -13
- package/dist/prompts/curl-utils.d.ts +0 -25
- package/dist/prompts/curl-utils.js +0 -41
- package/dist/prompts/curl.d.ts +0 -41
- package/dist/prompts/data-inspector.d.ts +0 -22
- package/dist/prompts/date.d.ts +0 -12
- package/dist/prompts/dependency.d.ts +0 -16
- package/dist/prompts/dial.d.ts +0 -10
- package/dist/prompts/diff.d.ts +0 -10
- package/dist/prompts/diff.js +0 -101
- package/dist/prompts/draw.d.ts +0 -20
- package/dist/prompts/editor.d.ts +0 -14
- package/dist/prompts/editor.js +0 -203
- package/dist/prompts/emoji.d.ts +0 -18
- package/dist/prompts/exec.d.ts +0 -17
- package/dist/prompts/file.d.ts +0 -21
- package/dist/prompts/file.js +0 -210
- package/dist/prompts/form.d.ts +0 -18
- package/dist/prompts/fuzzy-multi-column.d.ts +0 -12
- package/dist/prompts/fuzzy.d.ts +0 -12
- package/dist/prompts/gauge.d.ts +0 -21
- package/dist/prompts/gauge.js +0 -130
- package/dist/prompts/grid.d.ts +0 -14
- package/dist/prompts/heatmap.d.ts +0 -13
- package/dist/prompts/ip.d.ts +0 -11
- package/dist/prompts/kanban.d.ts +0 -17
- package/dist/prompts/keypress.d.ts +0 -7
- package/dist/prompts/keypress.js +0 -55
- package/dist/prompts/license.d.ts +0 -9
- package/dist/prompts/license.js +0 -105
- package/dist/prompts/list.d.ts +0 -9
- package/dist/prompts/map.d.ts +0 -17
- package/dist/prompts/match.d.ts +0 -19
- package/dist/prompts/miller.d.ts +0 -15
- package/dist/prompts/multi-column-select.d.ts +0 -10
- package/dist/prompts/multi-range.d.ts +0 -9
- package/dist/prompts/multi-select.d.ts +0 -15
- package/dist/prompts/number.d.ts +0 -11
- package/dist/prompts/otp.d.ts +0 -10
- package/dist/prompts/pattern.d.ts +0 -22
- package/dist/prompts/phone.d.ts +0 -41
- package/dist/prompts/quiz-select.d.ts +0 -10
- package/dist/prompts/quiz-select.js +0 -104
- package/dist/prompts/quiz-text.d.ts +0 -11
- package/dist/prompts/quiz-text.js +0 -82
- package/dist/prompts/range.d.ts +0 -9
- package/dist/prompts/rating.d.ts +0 -8
- package/dist/prompts/regex.d.ts +0 -13
- package/dist/prompts/region.d.ts +0 -11
- package/dist/prompts/schedule.d.ts +0 -20
- package/dist/prompts/scroll.d.ts +0 -13
- package/dist/prompts/seat.d.ts +0 -17
- package/dist/prompts/seat.js +0 -165
- package/dist/prompts/select-range.d.ts +0 -8
- package/dist/prompts/select.d.ts +0 -15
- package/dist/prompts/semver.d.ts +0 -6
- package/dist/prompts/shortcut.d.ts +0 -9
- package/dist/prompts/shortcut.js +0 -135
- package/dist/prompts/slider.d.ts +0 -8
- package/dist/prompts/slot.d.ts +0 -16
- package/dist/prompts/slot.js +0 -107
- package/dist/prompts/snippet.d.ts +0 -19
- package/dist/prompts/sort-grid.d.ts +0 -16
- package/dist/prompts/sort.d.ts +0 -14
- package/dist/prompts/spam.d.ts +0 -17
- package/dist/prompts/spam.js +0 -62
- package/dist/prompts/spreadsheet.d.ts +0 -21
- package/dist/prompts/table.d.ts +0 -14
- package/dist/prompts/text.d.ts +0 -17
- package/dist/prompts/time.d.ts +0 -12
- package/dist/prompts/toggle.d.ts +0 -8
- package/dist/prompts/toggle.js +0 -47
- package/dist/prompts/transfer.d.ts +0 -18
- package/dist/prompts/tree-select.d.ts +0 -31
- package/dist/prompts/tree.d.ts +0 -20
- package/dist/prompts/wait.d.ts +0 -18
- package/dist/prompts/wait.js +0 -62
- package/dist/spinner.d.ts +0 -33
- package/dist/spinner.js +0 -89
- package/dist/symbols.d.ts +0 -33
- package/dist/tasks.d.ts +0 -57
- package/dist/theme.d.ts +0 -2
- package/dist/theme.js +0 -20
- package/dist/types.d.ts +0 -503
- package/dist/types.js +0 -5
- package/dist/utils.d.ts +0 -81
|
@@ -1,68 +1,67 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
const
|
|
12
|
-
|
|
13
|
-
|
|
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
|
-
|
|
19
|
-
|
|
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',
|
|
22
|
-
'
|
|
23
|
-
'
|
|
24
|
-
'
|
|
25
|
-
'
|
|
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
|
|
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 = [
|
|
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 = `${
|
|
112
|
-
output += `${
|
|
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 ===
|
|
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 ===
|
|
120
|
-
const urlPrefix = urlActive ? `${
|
|
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
|
-
|
|
127
|
-
|
|
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 ===
|
|
136
|
-
const headersPointer = headersActive ? `${
|
|
137
|
-
const headersStyle = headersActive ? `${
|
|
138
|
-
output += `${headersPointer}${headersStyle}HEADERS${
|
|
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 ===
|
|
142
|
-
const bodyPointer = bodyActive ? `${
|
|
143
|
-
const bodyStyle = bodyActive ? `${
|
|
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 = `${
|
|
148
|
-
}
|
|
149
|
-
|
|
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${
|
|
153
|
-
}
|
|
154
|
-
|
|
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${
|
|
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 += `${
|
|
159
|
+
output += `${_ansi.ANSI.FG_CYAN}${cmd}${_ansi.ANSI.RESET}\n`;
|
|
163
160
|
// Instructions
|
|
164
|
-
output += `\n${
|
|
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 ===
|
|
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
|
|
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(
|
|
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
|
|
188
|
-
targetCol += (0,
|
|
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
|
-
|
|
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 !==
|
|
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') {
|
|
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
|
|
223
|
-
case
|
|
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
|
|
230
|
+
case 1:
|
|
237
231
|
this.handleUrlInput(char);
|
|
238
232
|
break;
|
|
239
|
-
case
|
|
233
|
+
case 2:
|
|
240
234
|
if (char === '\r' || char === '\n') {
|
|
241
235
|
this.editHeaders();
|
|
242
236
|
}
|
|
243
237
|
break;
|
|
244
|
-
case
|
|
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
|
|
285
|
-
i--;
|
|
278
|
+
while(i >= 0 && this.urlSegments[i] === ' ')i--;
|
|
286
279
|
// Skip word characters
|
|
287
|
-
while
|
|
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,
|
|
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 >
|
|
340
|
-
|
|
341
|
-
if (next
|
|
342
|
-
next =
|
|
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(
|
|
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
|
|
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
|
-
|
|
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
|
|
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 ? {
|
|
379
|
+
values: this.body ? {
|
|
380
|
+
json: this.body
|
|
381
|
+
} : undefined
|
|
391
382
|
}).run();
|
|
392
383
|
this.body = result;
|
|
393
|
-
}
|
|
394
|
-
|
|
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
|
-
|
|
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":";;;;+BAyCaA;;;eAAAA;;;sBAzCU;sBACF;uBACC;yBACE;qBACE;sBACC;uBACY;2BACiD;;;;;;;;;;;;;;AAkBxF,IAAA,AAAKC,iCAAAA;;;;;WAAAA;EAAAA;AAOL,MAAMC,UAAU;IAAC;IAAO;IAAQ;IAAO;IAAU;IAAS;IAAQ;CAAU;AAC5E,MAAMC,iBAAiB;IACnB;IAAU;IAAmB;IAC7B;IAAiB;IAAiB;IAClC;IAAgB;IAAU;IAC1B;IAAU;IAAU;IACpB;IAAc;CACjB;AAEM,IAAA,AAAMH,aAAN,MAAMA,mBAAmBI,YAAM;IAiDlC,IAAYC,gBAAwB;QAChC,OAAOH,OAAO,CAAC,IAAI,CAACI,WAAW,CAAC;IACpC;IAEA,IAAYC,UAAmB;QAC3B,OAAO,IAAI,CAACF,aAAa,KAAK,SAAS,IAAI,CAACA,aAAa,KAAK;IAClE;IAEA,IAAYG,MAAc;QACtB,OAAO,IAAI,CAACC,WAAW,CAACC,IAAI,CAAC;IACjC;IAEQC,aAAa;QACjB,MAAMC,SAAsB;YAAC;YAAQ;YAAc;SAAM;QACzD,MAAMC,aAAaD,OAAOE,OAAO,CAAC,IAAI,CAACC,KAAK;QAC5C,IAAI,CAACA,KAAK,GAAGH,MAAM,CAAC,AAACC,CAAAA,aAAa,CAAA,IAAKD,OAAOI,MAAM,CAAC;QACrD,IAAI,CAACC,MAAM,CAAC;IAChB;IAEQC,gBAAgBC,YAAqB,KAAK,EAAU;QACxD,4BAA4B;QAC5B,IAAI,IAAI,CAACJ,KAAK,KAAK,OAAO;YACtBI,YAAY;QAChB;QAEA,MAAMC,WAAW,IAAI,CAACC,UAAU,CAAC,IAAI,CAACN,KAAK,CAAC;QAC5C,MAAMO,eAAeH,YAAY,GAAGC,SAASE,YAAY,CAAC,IAAI,CAAC,GAAG;QAClE,IAAIC,MAAM,GAAGH,SAASI,MAAM,CAAC,IAAI,EAAE,IAAI,CAACnB,aAAa,EAAE;QAEvD,UAAU;QACVoB,OAAOC,OAAO,CAAC,IAAI,CAACC,OAAO,EAAEC,OAAO,CAAC,CAAC,CAACC,GAAGC,EAAE;YACxCP,OAAO,GAAGD,aAAa,GAAG,EAAEF,SAASW,MAAM,CAAC,GAAGF,EAAE,EAAE,EAAEC,GAAG,GAAG;QAC/D;QAEA,OAAO;QACP,IAAI,IAAI,CAACvB,OAAO,IAAI,IAAI,CAACyB,IAAI,EAAE;YAC3B,MAAMC,cAAcb,SAASW,MAAM,CAAC,IAAI,CAACC,IAAI;YAC7CT,OAAO,GAAGD,aAAa,GAAG,EAAEW,aAAa;QAC7C;QAEA,MAAM;QACN,MAAMC,SAAS,IAAI,CAAC1B,GAAG;QACvB,MAAM2B,aAAaD,UAAU;QAE7BX,OAAO,GAAGD,eAAeF,SAASW,MAAM,CAACI,aAAa;QAEtD,OAAOZ;IACX;IAEUN,OAAOmB,WAAoB,EAAE;QACnC,IAAI,CAACA,eAAe,IAAI,CAACC,WAAW,GAAG,GAAG;YACtC,IAAI,CAACC,KAAK,CAAC,CAAC,KAAK,EAAE,IAAI,CAACD,WAAW,CAAC,CAAC,CAAC;QAC1C;QACA,IAAI,CAACA,WAAW,GAAG;QAEnB,IAAIE,SAAS;QAEb,QAAQ;QACR,MAAMC,aAAa,GAAGC,YAAK,CAACC,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC3B,KAAK,CAAC4B,WAAW,GAAG,CAAC,EAAEC,UAAI,CAACC,KAAK,EAAE;QACpFN,UAAU,GAAGE,YAAK,CAACK,OAAO,CAAC,EAAE,EAAEF,UAAI,CAACG,IAAI,GAAGN,YAAK,CAACO,KAAK,GAAG,IAAI,CAACC,OAAO,CAACC,OAAO,CAAC,CAAC,EAAEV,aAAaI,UAAI,CAACC,KAAK,CAAC,EAAE,CAAC;QAE5G,YAAY;QACZ,MAAMM,cAAc,IAAI,CAACC,OAAO,SAC1B,GAAGX,YAAK,CAACY,IAAI,GAAGT,UAAI,CAACU,OAAO,CAAC,CAAC,EAAE,IAAI,CAACjD,aAAa,CAAC,CAAC,EAAEuC,UAAI,CAACC,KAAK,EAAE,GAClE,GAAGD,UAAI,CAACG,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC1C,aAAa,CAAC,CAAC,EAAEuC,UAAI,CAACC,KAAK,EAAE;QAExDN,UAAU,CAAC,EAAE,EAAEY,aAAa;QAE5B,SAAS;QACT,MAAMI,YAAY,IAAI,CAACH,OAAO;QAC9B,MAAMI,YAAYD,YAAY,GAAGd,YAAK,CAACY,IAAI,GAAGT,UAAI,CAACG,IAAI,CAAC,MAAM,EAAEH,UAAI,CAACC,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC;QAEvF,IAAIY,aAAa;QACjB,IAAI,IAAI,CAAChD,WAAW,CAACO,MAAM,KAAK,KAAKuC,WAAW;YAC5C,sCAAsC;YACtCE,aAAa;QACjB,OAAO,IAAI,IAAI,CAAChD,WAAW,CAACO,MAAM,KAAK,KAAK,CAACuC,WAAW;YACpDE,aAAa,GAAGhB,YAAK,CAACC,KAAK,CAAC,qBAAqB,EAAEE,UAAI,CAACC,KAAK,EAAE;QACnE,OAAO;YACHY,aAAa,IAAI,CAAChD,WAAW,CAACC,IAAI,CAAC;QACvC;QAEA6B,UAAU,GAAGiB,YAAYC,WAAW,EAAE,CAAC;QAEvC,aAAa;QACb,MAAMC,eAAejC,OAAOkC,IAAI,CAAC,IAAI,CAAChC,OAAO,EAAEX,MAAM;QACrD,MAAM4C,gBAAgB,IAAI,CAACR,OAAO;QAClC,MAAMS,iBAAiBD,gBAAgB,GAAGnB,YAAK,CAACY,IAAI,GAAGS,gBAAO,CAACC,OAAO,CAAC,CAAC,CAAC,GAAG;QAC5E,MAAMC,eAAeJ,gBAAgB,GAAGnB,YAAK,CAACY,IAAI,GAAGT,UAAI,CAACqB,SAAS,EAAE,GAAG;QACxE1B,UAAU,GAAGsB,iBAAiBG,aAAa,OAAO,EAAEpB,UAAI,CAACC,KAAK,CAAC,EAAE,EAAEa,aAAa,WAAW,CAAC;QAE5F,UAAU;QACV,IAAI,IAAI,CAACnD,OAAO,EAAE;YACd,MAAM2D,aAAa,IAAI,CAACd,OAAO;YAC/B,MAAMe,cAAcD,aAAa,GAAGzB,YAAK,CAACY,IAAI,GAAGS,gBAAO,CAACC,OAAO,CAAC,CAAC,CAAC,GAAG;YACtE,MAAMK,YAAYF,aAAa,GAAGzB,YAAK,CAACY,IAAI,GAAGT,UAAI,CAACqB,SAAS,EAAE,GAAG;YAElE,IAAII,cAAc;YAClB,IAAI,IAAI,CAACrC,IAAI,EAAE;gBACX,MAAMsC,WAAW,IAAI,CAACtC,IAAI,CAACuC,OAAO,CAAC,OAAO,KAAKC,SAAS,CAAC,GAAG;gBAC5DH,cAAc,GAAG5B,YAAK,CAACC,KAAK,CAAC,CAAC,EAAE4B,SAAS,GAAG,EAAE1B,UAAI,CAACC,KAAK,EAAE;YAC9D,OAAO;gBACHwB,cAAc,GAAG5B,YAAK,CAACC,KAAK,CAAC,QAAQ,EAAEE,UAAI,CAACC,KAAK,EAAE;YACvD;YAEAN,UAAU,GAAG4B,cAAcC,UAAU,IAAI,EAAExB,UAAI,CAACC,KAAK,GAAGwB,YAAY,EAAE,CAAC;QAC3E,OAAO;YACH9B,UAAU,CAAC,EAAE,EAAEE,YAAK,CAACC,KAAK,CAAC,mBAAmB,EAAE,IAAI,CAACrC,aAAa,CAAC,CAAC,EAAEuC,UAAI,CAACC,KAAK,CAAC,EAAE,CAAC;QACxF;QAEA,UAAU;QACVN,UAAU,CAAC,EAAE,EAAEK,UAAI,CAACG,IAAI,CAAC,QAAQ,EAAEH,UAAI,CAACC,KAAK,CAAC,EAAE,CAAC;QACjD,iCAAiC;QACjC,MAAMtB,MAAM,IAAI,CAACL,eAAe,CAAC;QACjC,mCAAmC;QACnCqB,UAAU,GAAGK,UAAI,CAAC6B,OAAO,GAAGlD,MAAMqB,UAAI,CAACC,KAAK,CAAC,EAAE,CAAC;QAEhD,eAAe;QACfN,UAAU,CAAC,EAAE,EAAEE,YAAK,CAACC,KAAK,CAAC,gEAAgE,EAAEE,UAAI,CAACC,KAAK,EAAE;QAEzG,IAAI,CAAC6B,WAAW,CAACnC;QAEjB,qBAAqB;QACrB,IAAI,IAAI,CAACa,OAAO,QAAkB;YAC9B,MAAMuB,YAAY,GAAG,WAAW;YAEhC,0DAA0D;YAC1D,IAAIC,eAAe,CAAC;YACpB,IAAK,IAAIC,IAAI,GAAGA,IAAI,IAAI,CAACC,eAAe,CAAC9D,MAAM,EAAE6D,IAAK;gBAClD,IAAI,IAAI,CAACC,eAAe,CAACD,EAAE,CAACE,QAAQ,CAAC,WAAW;oBAC5CH,eAAeC;oBACf;gBACJ;YACJ;YAEA,IAAID,iBAAiB,CAAC,GAAG;gBACrB,MAAMI,kBAAkB,IAAI,CAACF,eAAe,CAAC9D,MAAM,GAAG,IAAI4D;gBAE1D,IAAI,CAACtC,KAAK,CAACM,UAAI,CAACqC,WAAW;gBAC3B,IAAID,kBAAkB,GAAG;oBACrB,IAAI,CAAC1C,KAAK,CAAC,CAAC,KAAK,EAAE0C,gBAAgB,CAAC,CAAC;oBACrC,IAAI,CAAC3C,WAAW,GAAG2C;gBACvB;gBAEA,mCAAmC;gBACnC,IAAIE,YAAYP;gBAEhB,qCAAqC;gBACrC,IAAK,IAAIE,IAAI,GAAGA,IAAI,IAAI,CAACM,SAAS,EAAEN,IAAK;oBACrCK,aAAaE,IAAAA,kBAAW,EAAC,IAAI,CAAC3E,WAAW,CAACoE,EAAE;gBAChD;gBAEA,IAAI,CAACvC,KAAK,CAAC,CAAC,OAAO,EAAE4C,UAAU,CAAC,CAAC;YACrC;QACJ,OAAO;YACH,IAAI,CAAC5C,KAAK,CAACM,UAAI,CAACyC,WAAW;QAC/B;IACJ;IAEUC,UAAU;QAChB,IAAI,IAAI,CAACjD,WAAW,GAAG,GAAG;YACtB,IAAI,CAACC,KAAK,CAAC,CAAC,KAAK,EAAE,IAAI,CAACD,WAAW,CAAC,CAAC,CAAC;YACtC,IAAI,CAACA,WAAW,GAAG;QACvB;QACA,KAAK,CAACiD;IACV;IAEUC,YAAYC,IAAY,EAAEC,OAAe,EAAE;QACjD,2CAA2C;QAC3C,IAAID,SAAS,OAAO,IAAI,CAACpC,OAAO,QAAkB;YAC9C,IAAI,CAACzC,UAAU;YACf;QACJ;QAEA,aAAa;QACb,IAAI6E,SAAS,MAAM;YACf,IAAI,CAACE,YAAY,CAAC;YAClB,IAAI,CAACzE,MAAM,CAAC;YACZ;QACJ;QAEA,IAAIuE,SAAS,YAAY;YACrB,IAAI,CAACE,YAAY,CAAC,CAAC;YACnB,IAAI,CAACzE,MAAM,CAAC;YACZ;QACJ;QAEA,oBAAoB;QACpB,OAAQ,IAAI,CAACmC,OAAO;YAChB;gBACI,IAAIoC,SAAS,OAAO,IAAI,CAACG,OAAO,CAACH,SAAS,IAAI,CAACI,MAAM,CAACJ,OAAO;oBACzD,IAAI,CAAClF,WAAW,GAAG,AAAC,CAAA,IAAI,CAACA,WAAW,GAAG,CAAA,IAAKJ,QAAQc,MAAM;oBAC1D,IAAI,CAACC,MAAM,CAAC;gBAChB,OAAO,IAAI,IAAI,CAAC4E,MAAM,CAACL,SAAS,IAAI,CAACM,IAAI,CAACN,OAAO;oBAC7C,IAAI,CAAClF,WAAW,GAAG,AAAC,CAAA,IAAI,CAACA,WAAW,GAAG,IAAIJ,QAAQc,MAAM,AAAD,IAAKd,QAAQc,MAAM;oBAC3E,IAAI,CAACC,MAAM,CAAC;gBAChB,OAAO,IAAIuE,SAAS,QAAQA,SAAS,MAAM;oBACvC,IAAI,CAACO,YAAY;gBACrB;gBACA;YAEJ;gBACI,IAAI,CAACC,cAAc,CAACR;gBACpB;YAEJ;gBACI,IAAIA,SAAS,QAAQA,SAAS,MAAM;oBAChC,IAAI,CAACS,WAAW;gBACpB;gBACA;YAEJ;gBACI,IAAIT,SAAS,QAAQA,SAAS,MAAM;oBAChC,IAAI,CAACU,QAAQ;gBACjB;gBACA;QACR;IACJ;IAEQF,eAAeR,IAAY,EAAE;QACjC,SAAS;QACT,IAAIA,SAAS,QAAQA,SAAS,MAAM;YAChC,IAAI,CAACO,YAAY;YACjB;QACJ;QAEA,OAAO;QACP,IAAIP,SAAS,YAAYA,SAAS,YAAYA,SAAS,WAAW;YAC9D,IAAI,CAACL,SAAS,GAAG;YACjB,IAAI,CAAClE,MAAM,CAAC;YACZ;QACJ;QAEA,MAAM;QACN,IAAIuE,SAAS,YAAYA,SAAS,YAAYA,SAAS,WAAW;YAC9D,IAAI,CAACL,SAAS,GAAG,IAAI,CAAC1E,WAAW,CAACO,MAAM;YACxC,IAAI,CAACC,MAAM,CAAC;YACZ;QACJ;QAEA,2BAA2B;QAC3B,IAAIuE,SAAS,QAAQ;YACjB,IAAI,IAAI,CAACL,SAAS,GAAG,GAAG;gBACpB,IAAI,CAAC1E,WAAW,CAAC0F,MAAM,CAAC,GAAG,IAAI,CAAChB,SAAS;gBACzC,IAAI,CAACA,SAAS,GAAG;gBACjB,IAAI,CAAClE,MAAM,CAAC;YAChB;YACA;QACJ;QAEA,iCAAiC;QACjC,IAAIuE,SAAS,QAAQ;YACjB,IAAI,IAAI,CAACL,SAAS,GAAG,GAAG;gBACpB,8BAA8B;gBAC9B,IAAIN,IAAI,IAAI,CAACM,SAAS,GAAG;gBACzB,uBAAuB;gBACvB,MAAON,KAAK,KAAK,IAAI,CAACpE,WAAW,CAACoE,EAAE,KAAK,IAAKA;gBAC9C,uBAAuB;gBACvB,MAAOA,KAAK,KAAK,IAAI,CAACpE,WAAW,CAACoE,EAAE,KAAK,IAAKA;gBAE9C,MAAMuB,cAAc,IAAI,CAACjB,SAAS,GAAIN,CAAAA,IAAI,CAAA;gBAC1C,IAAI,CAACpE,WAAW,CAAC0F,MAAM,CAACtB,IAAI,GAAGuB;gBAC/B,IAAI,CAACjB,SAAS,GAAGN,IAAI;gBACrB,IAAI,CAAC5D,MAAM,CAAC;YAChB;YACA;QACJ;QAEA,YAAY;QACZ,IAAIuE,SAAS,YAAYA,SAAS,QAAQ;YACtC,IAAI,IAAI,CAACL,SAAS,GAAG,GAAG;gBACpB,IAAI,CAAC1E,WAAW,CAAC0F,MAAM,CAAC,IAAI,CAAChB,SAAS,GAAG,GAAG;gBAC5C,IAAI,CAACA,SAAS;gBACd,IAAI,CAAClE,MAAM,CAAC;YAChB;YACA;QACJ;QAEA,SAAS;QACT,IAAIuE,SAAS,aAAa;YACtB,IAAI,IAAI,CAACL,SAAS,GAAG,IAAI,CAAC1E,WAAW,CAACO,MAAM,EAAE;gBAC1C,IAAI,CAACP,WAAW,CAAC0F,MAAM,CAAC,IAAI,CAAChB,SAAS,EAAE;gBACxC,IAAI,CAAClE,MAAM,CAAC;YAChB;YACA;QACJ;QAEA,OAAO;QACP,IAAI,IAAI,CAAC4E,MAAM,CAACL,OAAO;YACnB,IAAI,IAAI,CAACL,SAAS,GAAG,GAAG;gBACpB,IAAI,CAACA,SAAS;gBACd,IAAI,CAAClE,MAAM,CAAC;YAChB;YACA;QACJ;QAEA,QAAQ;QACR,IAAI,IAAI,CAAC0E,OAAO,CAACH,OAAO;YACpB,IAAI,IAAI,CAACL,SAAS,GAAG,IAAI,CAAC1E,WAAW,CAACO,MAAM,EAAE;gBAC1C,IAAI,CAACmE,SAAS;gBACd,IAAI,CAAClE,MAAM,CAAC;YAChB;YACA;QACJ;QAEA,iBAAiB;QACjB,IAAI,CAAC,eAAeoF,IAAI,CAACb,SAAS,CAACA,KAAKc,UAAU,CAAC,SAAS;YACxD,MAAMC,cAAcC,IAAAA,gBAAS,EAAChB;YAC9B,IAAI,CAAC/E,WAAW,CAAC0F,MAAM,CAAC,IAAI,CAAChB,SAAS,EAAE,MAAMoB;YAC9C,IAAI,CAACpB,SAAS,IAAIoB,YAAYvF,MAAM;YACpC,IAAI,CAACC,MAAM,CAAC;QAChB;IACJ;IAEQyE,aAAae,SAAiB,EAAE;QACpC,IAAIC,OAAO,IAAI,CAACtD,OAAO,GAAGqD;QAC1B,IAAIC,UAAqBA;QACzB,IAAIA,UAAuBA;QAE3B,IAAIA,cAAyB,CAAC,IAAI,CAACnG,OAAO,EAAE;YACxCmG,OAAOD,cAAc;QACzB;QAEA,IAAI,CAACrD,OAAO,GAAGsD;IACnB;IAEQC,QAAQ;QACZ,mEAAmE;QACnE,IAAI,IAAI,CAACtE,WAAW,GAAG,GAAG;YACtB,IAAI,CAACC,KAAK,CAAC,CAAC,KAAK,EAAE,IAAI,CAACD,WAAW,CAAC,CAAC,CAAC;YACtC,IAAI,CAACA,WAAW,GAAG;QACvB;QAEA,8BAA8B;QAC9B,6EAA6E;QAC7E,IAAI,IAAI,CAACuE,gBAAgB,GAAG,GAAG;YAC3B,IAAI,CAACtE,KAAK,CAAC,CAAC,KAAK,EAAE,IAAI,CAACsE,gBAAgB,GAAG,EAAE,CAAC,CAAC,GAAG,iBAAiB;YACnE,IAAI,CAACtE,KAAK,CAAC,OAAO,sBAAsB;YACxC,IAAI,CAACA,KAAK,CAACM,UAAI,CAACiE,UAAU,GAAG,yBAAyB;YAEtD,iDAAiD;YACjD,IAAI,CAAC/B,eAAe,GAAG,EAAE;YACzB,IAAI,CAAC8B,gBAAgB,GAAG;QAC5B;IACJ;IAEA,MAAcX,cAAc;QACxB,IAAI,CAACU,KAAK,IAAI,gCAAgC;QAC9C,IAAI,CAACG,UAAU;QACf,IAAI;YACA,MAAMC,SAAS,MAAM,IAAIC,cAAS,CAAC;gBAC/B9D,SAAS;gBACT+D,SAAS,IAAI,CAACtF,OAAO;gBACrBuF,aAAa/G;YACjB,GAAGgH,GAAG;YACN,IAAI,CAACxF,OAAO,GAAGoF;QACnB,EAAE,OAAOK,IAAI;QACT,YAAY;QAChB;QAEA,IAAI,CAACC,WAAW;QAChB,IAAI,CAACpG,MAAM,CAAC,OAAO,uBAAuB;IAC9C;IAEA,MAAciF,WAAW;QACrB,IAAI,CAACS,KAAK,IAAI,gCAAgC;QAC9C,IAAI,CAACG,UAAU;QAEf,IAAI;YACA,MAAMC,SAAS,MAAM,IAAIO,gBAAU,CAAC;gBAChCpE,SAAS;gBACTqE,UAAU;gBACVC,WAAW;gBACXC,QAAQ,IAAI,CAACzF,IAAI,GAAG;oBAAE0F,MAAM,IAAI,CAAC1F,IAAI;gBAAC,IAAI2F;YAC9C,GAAGR,GAAG;YACN,IAAI,CAACnF,IAAI,GAAG+E;QAChB,EAAE,OAAOK,IAAI;QACT,YAAY;QAChB;QAEA,IAAI,CAACC,WAAW;QAChB,IAAI,CAACpG,MAAM,CAAC,OAAO,uBAAuB;IAC9C;IAEQ8E,eAAe;QACnB,IAAI,CAAC6B,MAAM,CAAC;YACRC,QAAQ,IAAI,CAACxH,aAAa;YAC1BG,KAAK,IAAI,CAACA,GAAG;YACbmB,SAAS,IAAI,CAACA,OAAO;YACrBK,MAAM,IAAI,CAACzB,OAAO,GAAG,IAAI,CAACyB,IAAI,GAAG2F;YACjCG,SAAS,IAAI,CAAC5G,eAAe,CAAC,OAAO,kCAAkC;QAC3E;IACJ;IAnaA,YAAY+B,OAAoB,CAAE;QAC9B,KAAK,CAACA,UAtBV,uBAAQG,eACR,uBAAQ9C,eAAsB,IAE9B,YAAY;QACZ,uBAAQG,eAAwB,EAAE,GAClC,uBAAQ0E,aAAoB,IAE5B,uBAAQxD,WAAkC,CAAC,IAC3C,uBAAQK,QAAe,KAEvB,eAAe;QACf,uBAAQK,eAAsB,IAE9B,cAAc;QACd,uBAAQtB,SAAmB,SAC3B,uBAAQM,cAA+C;YACnD0G,MAAM,IAAIC,uBAAY;YACtBC,YAAY,IAAIC,6BAAkB;YAClC3G,KAAK,IAAI4G,sBAAW;QACxB;QAKI,oBAAoB;QACpB,IAAIC,QAAQC,QAAQ,KAAK,SAAS;YAC9B,IAAI,CAACtH,KAAK,GAAG;QACjB;QAEA,mBAAmB;QACnB,IAAIkC,QAAQqF,aAAa,EAAE;YACvB,MAAMC,MAAMrI,QAAQY,OAAO,CAACmC,QAAQqF,aAAa,CAAC3F,WAAW;YAC7D,IAAI4F,OAAO,GAAG,IAAI,CAACjI,WAAW,GAAGiI;QACrC;QAEA,MAAMC,aAAavF,QAAQwF,UAAU,IAAI;QACzC,IAAI,CAAChI,WAAW,GAAG+F,IAAAA,gBAAS,EAACgC;QAC7B,IAAI,CAACrD,SAAS,GAAG,IAAI,CAAC1E,WAAW,CAACO,MAAM;QAExC,IAAI,CAACW,OAAO,GAAG;YAAE,GAAGsB,QAAQyF,cAAc;QAAC;QAC3C,IAAI,CAAC1G,IAAI,GAAGiB,QAAQ0F,WAAW,IAAI;QAEnC,6CAA6C;QAC7C,IAAI,IAAI,CAACrI,WAAW,KAAK,GAAG;YACxB,IAAI,CAAC8C,OAAO;QAChB;IACJ;AA2YJ"}
|