mepcli 1.3.2 → 2.0.0-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +11 -2
- 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 -320
- 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/src/pipeline.js +273 -0
- 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 +16 -13
- 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 -39
- package/dist/pipeline.js +0 -54
- 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,35 +1,37 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
Object.defineProperty(exports, "DataInspectorPrompt", {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: function() {
|
|
8
|
+
return DataInspectorPrompt;
|
|
9
|
+
}
|
|
10
|
+
});
|
|
11
|
+
const _ansi = require("../ansi");
|
|
12
|
+
const _base = require("../base");
|
|
13
|
+
const _theme = require("../theme");
|
|
14
|
+
const _utils = require("../utils");
|
|
15
|
+
const _symbols = require("../symbols");
|
|
16
|
+
function _define_property(obj, key, value) {
|
|
17
|
+
if (key in obj) {
|
|
18
|
+
Object.defineProperty(obj, key, {
|
|
19
|
+
value: value,
|
|
20
|
+
enumerable: true,
|
|
21
|
+
configurable: true,
|
|
22
|
+
writable: true
|
|
23
|
+
});
|
|
24
|
+
} else {
|
|
25
|
+
obj[key] = value;
|
|
23
26
|
}
|
|
27
|
+
return obj;
|
|
28
|
+
}
|
|
29
|
+
let DataInspectorPrompt = class DataInspectorPrompt extends _base.Prompt {
|
|
24
30
|
getType(value) {
|
|
25
|
-
if (value === null)
|
|
26
|
-
|
|
27
|
-
if (value
|
|
28
|
-
|
|
29
|
-
if (Array.isArray(value))
|
|
30
|
-
return 'array';
|
|
31
|
-
if (value instanceof Date)
|
|
32
|
-
return 'date';
|
|
31
|
+
if (value === null) return 'null';
|
|
32
|
+
if (value === undefined) return 'undefined';
|
|
33
|
+
if (Array.isArray(value)) return 'array';
|
|
34
|
+
if (value instanceof Date) return 'date';
|
|
33
35
|
return typeof value;
|
|
34
36
|
}
|
|
35
37
|
recalculateFlatList() {
|
|
@@ -38,7 +40,10 @@ class DataInspectorPrompt extends base_1.Prompt {
|
|
|
38
40
|
}
|
|
39
41
|
traverse(data, key, depth, parentRef, currentPath) {
|
|
40
42
|
const type = this.getType(data);
|
|
41
|
-
const isLeaf = ![
|
|
43
|
+
const isLeaf = ![
|
|
44
|
+
'object',
|
|
45
|
+
'array'
|
|
46
|
+
].includes(type) || data === null;
|
|
42
47
|
const node = {
|
|
43
48
|
key: String(key),
|
|
44
49
|
value: data,
|
|
@@ -52,90 +57,86 @@ class DataInspectorPrompt extends base_1.Prompt {
|
|
|
52
57
|
this.flatList.push(node);
|
|
53
58
|
if (!isLeaf && this.expandedPaths.has(currentPath)) {
|
|
54
59
|
const keys = Object.keys(data);
|
|
55
|
-
keys.forEach(k
|
|
60
|
+
keys.forEach((k)=>{
|
|
56
61
|
this.traverse(data[k], k, depth + 1, data, `${currentPath}.${k}`);
|
|
57
62
|
});
|
|
58
63
|
}
|
|
59
64
|
}
|
|
60
65
|
getValueColor(type) {
|
|
61
|
-
switch
|
|
62
|
-
case 'string':
|
|
63
|
-
|
|
64
|
-
case '
|
|
66
|
+
switch(type){
|
|
67
|
+
case 'string':
|
|
68
|
+
return _ansi.ANSI.FG_GREEN;
|
|
69
|
+
case 'number':
|
|
70
|
+
return _ansi.ANSI.FG_YELLOW;
|
|
71
|
+
case 'boolean':
|
|
72
|
+
return _ansi.ANSI.FG_MAGENTA;
|
|
65
73
|
case 'null':
|
|
66
|
-
case 'undefined':
|
|
67
|
-
|
|
68
|
-
|
|
74
|
+
case 'undefined':
|
|
75
|
+
return _ansi.ANSI.FG_GRAY;
|
|
76
|
+
case 'date':
|
|
77
|
+
return _ansi.ANSI.FG_BLUE;
|
|
78
|
+
default:
|
|
79
|
+
return _ansi.ANSI.RESET;
|
|
69
80
|
}
|
|
70
81
|
}
|
|
71
82
|
formatValue(value, type) {
|
|
72
|
-
if (type === 'string')
|
|
73
|
-
|
|
74
|
-
if (type === '
|
|
75
|
-
|
|
76
|
-
if (type === 'array')
|
|
77
|
-
return `Array(${value.length})`;
|
|
78
|
-
if (type === 'object')
|
|
79
|
-
return `Object{${Object.keys(value).length}}`;
|
|
83
|
+
if (type === 'string') return `"${value}"`;
|
|
84
|
+
if (type === 'date') return value.toISOString();
|
|
85
|
+
if (type === 'array') return `Array(${value.length})`;
|
|
86
|
+
if (type === 'object') return `Object{${Object.keys(value).length}}`;
|
|
80
87
|
return String(value);
|
|
81
88
|
}
|
|
82
89
|
render(_firstRender) {
|
|
83
|
-
let output = `${
|
|
90
|
+
let output = `${_theme.theme.success}?${_ansi.ANSI.RESET} ${_ansi.ANSI.BOLD}${_theme.theme.title}${this.options.message}${_ansi.ANSI.RESET}\n`;
|
|
84
91
|
if (this.cursor < this.scrollTop) {
|
|
85
92
|
this.scrollTop = this.cursor;
|
|
86
|
-
}
|
|
87
|
-
else if (this.cursor >= this.scrollTop + this.pageSize) {
|
|
93
|
+
} else if (this.cursor >= this.scrollTop + this.pageSize) {
|
|
88
94
|
this.scrollTop = this.cursor - this.pageSize + 1;
|
|
89
95
|
}
|
|
90
96
|
const visible = this.flatList.slice(this.scrollTop, this.scrollTop + this.pageSize);
|
|
91
|
-
visible.forEach((node, index)
|
|
97
|
+
visible.forEach((node, index)=>{
|
|
92
98
|
const actualIndex = this.scrollTop + index;
|
|
93
99
|
const isSelected = actualIndex === this.cursor;
|
|
94
100
|
// Indentation & Tree Lines
|
|
95
101
|
const indent = ' '.repeat(node.depth);
|
|
96
|
-
const prefix = isSelected ? `${
|
|
102
|
+
const prefix = isSelected ? `${_theme.theme.main}${_symbols.symbols.pointer} ` : ' ';
|
|
97
103
|
// Icon
|
|
98
104
|
let icon = '';
|
|
99
105
|
if (!node.isLeaf) {
|
|
100
106
|
icon = this.expandedPaths.has(node.path) ? '▾ ' : '▸ ';
|
|
101
|
-
}
|
|
102
|
-
else {
|
|
107
|
+
} else {
|
|
103
108
|
icon = '• '; // Leaf
|
|
104
109
|
}
|
|
105
110
|
// Key
|
|
106
111
|
let keyStr = node.key;
|
|
107
|
-
if (node.path === 'root')
|
|
108
|
-
keyStr = 'ROOT';
|
|
112
|
+
if (node.path === 'root') keyStr = 'ROOT';
|
|
109
113
|
// Value Representation
|
|
110
114
|
let valueStr = '';
|
|
111
115
|
if (isSelected && this.editMode) {
|
|
112
116
|
// Editing View
|
|
113
|
-
valueStr = `${
|
|
114
|
-
}
|
|
115
|
-
else {
|
|
117
|
+
valueStr = `${_ansi.ANSI.BG_BLUE}${_ansi.ANSI.FG_WHITE} ${this.editBuffer}_ ${_ansi.ANSI.RESET}`;
|
|
118
|
+
} else {
|
|
116
119
|
// Normal View
|
|
117
120
|
const color = this.getValueColor(node.type);
|
|
118
121
|
const formatted = this.formatValue(node.value, node.type);
|
|
119
|
-
valueStr = `${color}${formatted}${
|
|
122
|
+
valueStr = `${color}${formatted}${_ansi.ANSI.RESET}`;
|
|
120
123
|
}
|
|
121
124
|
// Type Label (Right aligned or just dimmed next to key)
|
|
122
|
-
const typeLabel = `${
|
|
123
|
-
let line = `${indent}${icon}${
|
|
125
|
+
const typeLabel = `${_ansi.ANSI.FG_GRAY}(${node.type})${_ansi.ANSI.RESET}`;
|
|
126
|
+
let line = `${indent}${icon}${_ansi.ANSI.BOLD}${keyStr}${_ansi.ANSI.RESET}: ${valueStr} ${typeLabel}`;
|
|
124
127
|
if (isSelected && !this.editMode) {
|
|
125
|
-
line = `${
|
|
126
|
-
}
|
|
127
|
-
else if (isSelected && this.editMode) {
|
|
128
|
+
line = `${_theme.theme.main}${(0, _utils.stripAnsi)(line)}${_ansi.ANSI.RESET}`; // Highlight whole line
|
|
129
|
+
} else if (isSelected && this.editMode) {
|
|
128
130
|
// In edit mode, we don't highlight the whole line, just the input box
|
|
129
|
-
line = `${indent}${icon}${
|
|
131
|
+
line = `${indent}${icon}${_ansi.ANSI.BOLD}${keyStr}${_ansi.ANSI.RESET}: ${valueStr} ${typeLabel}`;
|
|
130
132
|
}
|
|
131
133
|
output += `${prefix}${line}\n`;
|
|
132
134
|
});
|
|
133
135
|
// Footer
|
|
134
136
|
if (this.editMode) {
|
|
135
|
-
output += `\n${
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
output += `\n${theme_1.theme.muted}(Arrows: Nav, Space: Toggle, Enter: Edit/Submit)${ansi_1.ANSI.RESET}`;
|
|
137
|
+
output += `\n${_theme.theme.main}EDIT MODE${_ansi.ANSI.RESET} Enter: Save, Esc: Cancel`;
|
|
138
|
+
} else {
|
|
139
|
+
output += `\n${_theme.theme.muted}(Arrows: Nav, Space: Toggle, Enter: Edit/Submit)${_ansi.ANSI.RESET}`;
|
|
139
140
|
}
|
|
140
141
|
this.renderFrame(output);
|
|
141
142
|
}
|
|
@@ -161,19 +162,14 @@ class DataInspectorPrompt extends base_1.Prompt {
|
|
|
161
162
|
const isExpanded = this.expandedPaths.has(node.path);
|
|
162
163
|
if (this.isRight(char) && !isExpanded) {
|
|
163
164
|
this.expandedPaths.add(node.path);
|
|
164
|
-
}
|
|
165
|
-
else if (this.isLeft(char) && isExpanded) {
|
|
165
|
+
} else if (this.isLeft(char) && isExpanded) {
|
|
166
166
|
this.expandedPaths.delete(node.path);
|
|
167
|
-
}
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
}
|
|
174
|
-
else if (this.isLeft(char) && !isExpanded && node.parentRef) {
|
|
175
|
-
// Jump to parent
|
|
176
|
-
// This requires finding parent index, but simplification: just do nothing or standard logic
|
|
167
|
+
} else if (char === ' ') {
|
|
168
|
+
if (isExpanded) this.expandedPaths.delete(node.path);
|
|
169
|
+
else this.expandedPaths.add(node.path);
|
|
170
|
+
} else if (this.isLeft(char) && !isExpanded && node.parentRef) {
|
|
171
|
+
// Jump to parent
|
|
172
|
+
// This requires finding parent index, but simplification: just do nothing or standard logic
|
|
177
173
|
}
|
|
178
174
|
this.recalculateFlatList();
|
|
179
175
|
this.render(false);
|
|
@@ -195,7 +191,10 @@ class DataInspectorPrompt extends base_1.Prompt {
|
|
|
195
191
|
return;
|
|
196
192
|
}
|
|
197
193
|
// Enter Edit Mode for String/Number
|
|
198
|
-
if ([
|
|
194
|
+
if ([
|
|
195
|
+
'string',
|
|
196
|
+
'number'
|
|
197
|
+
].includes(node.type)) {
|
|
199
198
|
this.editMode = true;
|
|
200
199
|
this.editBuffer = String(node.value);
|
|
201
200
|
this.render(false);
|
|
@@ -211,8 +210,7 @@ class DataInspectorPrompt extends base_1.Prompt {
|
|
|
211
210
|
let newValue = this.editBuffer;
|
|
212
211
|
if (node.type === 'number') {
|
|
213
212
|
newValue = Number(this.editBuffer);
|
|
214
|
-
if (isNaN(newValue))
|
|
215
|
-
newValue = 0; // Fallback
|
|
213
|
+
if (isNaN(newValue)) newValue = 0; // Fallback
|
|
216
214
|
}
|
|
217
215
|
// Update Data
|
|
218
216
|
node.parentRef[node.refKey] = newValue;
|
|
@@ -222,7 +220,7 @@ class DataInspectorPrompt extends base_1.Prompt {
|
|
|
222
220
|
return;
|
|
223
221
|
}
|
|
224
222
|
// Esc: Cancel
|
|
225
|
-
if (key[0] === 27 && key.length === 1) {
|
|
223
|
+
if (key[0] === 27 && key.length === 1) {
|
|
226
224
|
this.editMode = false;
|
|
227
225
|
this.render(false);
|
|
228
226
|
return;
|
|
@@ -240,17 +238,24 @@ class DataInspectorPrompt extends base_1.Prompt {
|
|
|
240
238
|
}
|
|
241
239
|
}
|
|
242
240
|
handleMouse(event) {
|
|
243
|
-
if (this.editMode)
|
|
244
|
-
return; // Disable scroll in edit mode for now
|
|
241
|
+
if (this.editMode) return; // Disable scroll in edit mode for now
|
|
245
242
|
if (event.action === 'scroll') {
|
|
246
243
|
if (event.scroll === 'up') {
|
|
247
244
|
this.cursor = (this.cursor - 1 + this.flatList.length) % this.flatList.length;
|
|
248
|
-
}
|
|
249
|
-
else if (event.scroll === 'down') {
|
|
245
|
+
} else if (event.scroll === 'down') {
|
|
250
246
|
this.cursor = (this.cursor + 1) % this.flatList.length;
|
|
251
247
|
}
|
|
252
248
|
this.render(false);
|
|
253
249
|
}
|
|
254
250
|
}
|
|
255
|
-
|
|
256
|
-
|
|
251
|
+
constructor(options){
|
|
252
|
+
super(options), _define_property(this, "cursor", 0), _define_property(this, "flatList", []), _define_property(this, "expandedPaths", new Set()), _define_property(this, "scrollTop", 0), _define_property(this, "pageSize", 15), // Edit Mode State
|
|
253
|
+
_define_property(this, "editMode", false), _define_property(this, "editBuffer", ''), // Config
|
|
254
|
+
_define_property(this, "rootData", void 0);
|
|
255
|
+
this.rootData = options.data; // We mutate this directly
|
|
256
|
+
this.expandedPaths.add('root'); // Always expand root if it's an object
|
|
257
|
+
this.recalculateFlatList();
|
|
258
|
+
}
|
|
259
|
+
};
|
|
260
|
+
|
|
261
|
+
//# sourceMappingURL=data-inspector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/prompts/data-inspector.ts"],"sourcesContent":["import { ANSI } from '../ansi';\nimport { Prompt } from '../base';\nimport { theme } from '../theme';\nimport { DataInspectorOptions, MouseEvent } from '../types';\nimport { stripAnsi } from '../utils';\nimport { symbols } from '../symbols';\n\ninterface InspectorNode {\n key: string;\n value: any;\n type: 'string' | 'number' | 'boolean' | 'object' | 'array' | 'null' | 'undefined' | 'date' | 'function';\n depth: number;\n path: string; // Unique ID for expansion\n parentRef: any; // Reference to parent object/array for mutation\n refKey: string | number; // Key in parent\n isLeaf: boolean;\n}\n\nexport class DataInspectorPrompt extends Prompt<any, DataInspectorOptions> {\n private cursor: number = 0;\n private flatList: InspectorNode[] = [];\n private expandedPaths: Set<string> = new Set();\n private scrollTop: number = 0;\n private readonly pageSize: number = 15;\n\n // Edit Mode State\n private editMode: boolean = false;\n private editBuffer: string = '';\n\n // Config\n private rootData: any;\n\n constructor(options: DataInspectorOptions) {\n super(options);\n this.rootData = options.data; // We mutate this directly\n this.expandedPaths.add('root'); // Always expand root if it's an object\n this.recalculateFlatList();\n }\n\n private getType(value: any): InspectorNode['type'] {\n if (value === null) return 'null';\n if (value === undefined) return 'undefined';\n if (Array.isArray(value)) return 'array';\n if (value instanceof Date) return 'date';\n return typeof value as InspectorNode['type'];\n }\n\n private recalculateFlatList() {\n this.flatList = [];\n this.traverse(this.rootData, 'root', 0, null, 'root');\n }\n\n private traverse(data: any, key: string | number, depth: number, parentRef: any, currentPath: string) {\n const type = this.getType(data);\n const isLeaf = !['object', 'array'].includes(type) || data === null;\n\n const node: InspectorNode = {\n key: String(key),\n value: data,\n type,\n depth,\n path: currentPath,\n parentRef,\n refKey: key,\n isLeaf\n };\n\n this.flatList.push(node);\n\n if (!isLeaf && this.expandedPaths.has(currentPath)) {\n const keys = Object.keys(data);\n keys.forEach(k => {\n this.traverse(data[k], k, depth + 1, data, `${currentPath}.${k}`);\n });\n }\n }\n\n private getValueColor(type: string): string {\n switch (type) {\n case 'string': return ANSI.FG_GREEN;\n case 'number': return ANSI.FG_YELLOW;\n case 'boolean': return ANSI.FG_MAGENTA;\n case 'null':\n case 'undefined': return ANSI.FG_GRAY;\n case 'date': return ANSI.FG_BLUE;\n default: return ANSI.RESET;\n }\n }\n\n private formatValue(value: any, type: string): string {\n if (type === 'string') return `\"${value}\"`;\n if (type === 'date') return value.toISOString();\n if (type === 'array') return `Array(${value.length})`;\n if (type === 'object') return `Object{${Object.keys(value).length}}`;\n return String(value);\n }\n\n protected render(_firstRender: boolean) {\n let output = `${theme.success}?${ANSI.RESET} ${ANSI.BOLD}${theme.title}${this.options.message}${ANSI.RESET}\\n`;\n\n if (this.cursor < this.scrollTop) {\n this.scrollTop = this.cursor;\n } else if (this.cursor >= this.scrollTop + this.pageSize) {\n this.scrollTop = this.cursor - this.pageSize + 1;\n }\n\n const visible = this.flatList.slice(this.scrollTop, this.scrollTop + this.pageSize);\n\n visible.forEach((node, index) => {\n const actualIndex = this.scrollTop + index;\n const isSelected = actualIndex === this.cursor;\n\n // Indentation & Tree Lines\n const indent = ' '.repeat(node.depth);\n const prefix = isSelected ? `${theme.main}${symbols.pointer} ` : ' ';\n\n // Icon\n let icon = '';\n if (!node.isLeaf) {\n icon = this.expandedPaths.has(node.path) ? '▾ ' : '▸ ';\n } else {\n icon = '• '; // Leaf\n }\n\n // Key\n let keyStr = node.key;\n if (node.path === 'root') keyStr = 'ROOT';\n\n // Value Representation\n let valueStr = '';\n\n if (isSelected && this.editMode) {\n // Editing View\n valueStr = `${ANSI.BG_BLUE}${ANSI.FG_WHITE} ${this.editBuffer}_ ${ANSI.RESET}`;\n } else {\n // Normal View\n const color = this.getValueColor(node.type);\n const formatted = this.formatValue(node.value, node.type);\n valueStr = `${color}${formatted}${ANSI.RESET}`;\n }\n\n // Type Label (Right aligned or just dimmed next to key)\n const typeLabel = `${ANSI.FG_GRAY}(${node.type})${ANSI.RESET}`;\n\n let line = `${indent}${icon}${ANSI.BOLD}${keyStr}${ANSI.RESET}: ${valueStr} ${typeLabel}`;\n\n if (isSelected && !this.editMode) {\n line = `${theme.main}${stripAnsi(line)}${ANSI.RESET}`; // Highlight whole line\n } else if (isSelected && this.editMode) {\n // In edit mode, we don't highlight the whole line, just the input box\n line = `${indent}${icon}${ANSI.BOLD}${keyStr}${ANSI.RESET}: ${valueStr} ${typeLabel}`;\n }\n\n output += `${prefix}${line}\\n`;\n });\n\n // Footer\n if (this.editMode) {\n output += `\\n${theme.main}EDIT MODE${ANSI.RESET} Enter: Save, Esc: Cancel`;\n } else {\n output += `\\n${theme.muted}(Arrows: Nav, Space: Toggle, Enter: Edit/Submit)${ANSI.RESET}`;\n }\n\n this.renderFrame(output);\n }\n\n protected handleInput(char: string, key: Buffer) {\n if (this.editMode) {\n this.handleEditInput(char, key);\n return;\n }\n\n const node = this.flatList[this.cursor];\n\n if (this.isUp(char)) {\n this.cursor = (this.cursor - 1 + this.flatList.length) % this.flatList.length;\n this.render(false);\n return;\n }\n if (this.isDown(char)) {\n this.cursor = (this.cursor + 1) % this.flatList.length;\n this.render(false);\n return;\n }\n\n // Expand/Collapse\n if (char === ' ' || this.isRight(char) || this.isLeft(char)) {\n if (!node.isLeaf) {\n const isExpanded = this.expandedPaths.has(node.path);\n\n if (this.isRight(char) && !isExpanded) {\n this.expandedPaths.add(node.path);\n } else if (this.isLeft(char) && isExpanded) {\n this.expandedPaths.delete(node.path);\n } else if (char === ' ') {\n if (isExpanded) this.expandedPaths.delete(node.path);\n else this.expandedPaths.add(node.path);\n } else if (this.isLeft(char) && !isExpanded && node.parentRef) {\n // Jump to parent\n // This requires finding parent index, but simplification: just do nothing or standard logic\n }\n\n this.recalculateFlatList();\n this.render(false);\n }\n return;\n }\n\n // Enter: Edit or Submit\n if (char === '\\r' || char === '\\n') {\n if (node.path === 'root') {\n this.submit(this.rootData);\n return;\n }\n\n // Toggle Boolean immediately\n if (node.type === 'boolean') {\n const newVal = !node.value;\n node.parentRef[node.refKey] = newVal;\n this.recalculateFlatList(); // Value changed\n this.render(false);\n return;\n }\n\n // Enter Edit Mode for String/Number\n if (['string', 'number'].includes(node.type)) {\n this.editMode = true;\n this.editBuffer = String(node.value);\n this.render(false);\n return;\n }\n\n this.submit(this.rootData);\n }\n }\n\n private handleEditInput(char: string, key: Buffer) {\n const node = this.flatList[this.cursor];\n\n // Enter: Save\n if (char === '\\r' || char === '\\n') {\n let newValue: any = this.editBuffer;\n if (node.type === 'number') {\n newValue = Number(this.editBuffer);\n if (isNaN(newValue)) newValue = 0; // Fallback\n }\n\n // Update Data\n node.parentRef[node.refKey] = newValue;\n\n this.editMode = false;\n this.recalculateFlatList();\n this.render(false);\n return;\n }\n\n // Esc: Cancel\n if (key[0] === 27 && key.length === 1) { // Standard ESC\n this.editMode = false;\n this.render(false);\n return;\n }\n\n // Backspace\n if (key.toString() === '\\x7f' || char === '\\b') {\n this.editBuffer = this.editBuffer.slice(0, -1);\n this.render(false);\n return;\n }\n\n // Typing\n if (char && char.length === 1 && char.charCodeAt(0) >= 32) {\n this.editBuffer += char;\n this.render(false);\n }\n }\n\n protected handleMouse(event: MouseEvent) {\n if (this.editMode) return; // Disable scroll in edit mode for now\n\n if (event.action === 'scroll') {\n if (event.scroll === 'up') {\n this.cursor = (this.cursor - 1 + this.flatList.length) % this.flatList.length;\n } else if (event.scroll === 'down') {\n this.cursor = (this.cursor + 1) % this.flatList.length;\n }\n this.render(false);\n }\n }\n}\n"],"names":["DataInspectorPrompt","Prompt","getType","value","undefined","Array","isArray","Date","recalculateFlatList","flatList","traverse","rootData","data","key","depth","parentRef","currentPath","type","isLeaf","includes","node","String","path","refKey","push","expandedPaths","has","keys","Object","forEach","k","getValueColor","ANSI","FG_GREEN","FG_YELLOW","FG_MAGENTA","FG_GRAY","FG_BLUE","RESET","formatValue","toISOString","length","render","_firstRender","output","theme","success","BOLD","title","options","message","cursor","scrollTop","pageSize","visible","slice","index","actualIndex","isSelected","indent","repeat","prefix","main","symbols","pointer","icon","keyStr","valueStr","editMode","BG_BLUE","FG_WHITE","editBuffer","color","formatted","typeLabel","line","stripAnsi","muted","renderFrame","handleInput","char","handleEditInput","isUp","isDown","isRight","isLeft","isExpanded","add","delete","submit","newVal","newValue","Number","isNaN","toString","charCodeAt","handleMouse","event","action","scroll","Set"],"mappings":"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"}
|
|
@@ -1,19 +1,31 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
Object.defineProperty(exports, "DatePrompt", {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: function() {
|
|
8
|
+
return DatePrompt;
|
|
9
|
+
}
|
|
10
|
+
});
|
|
11
|
+
const _ansi = require("../ansi");
|
|
12
|
+
const _base = require("../base");
|
|
13
|
+
const _theme = require("../theme");
|
|
14
|
+
const _symbols = require("../symbols");
|
|
15
|
+
function _define_property(obj, key, value) {
|
|
16
|
+
if (key in obj) {
|
|
17
|
+
Object.defineProperty(obj, key, {
|
|
18
|
+
value: value,
|
|
19
|
+
enumerable: true,
|
|
20
|
+
configurable: true,
|
|
21
|
+
writable: true
|
|
22
|
+
});
|
|
23
|
+
} else {
|
|
24
|
+
obj[key] = value;
|
|
16
25
|
}
|
|
26
|
+
return obj;
|
|
27
|
+
}
|
|
28
|
+
let DatePrompt = class DatePrompt extends _base.Prompt {
|
|
17
29
|
render(_firstRender) {
|
|
18
30
|
// Date formatting
|
|
19
31
|
const y = this.value.getFullYear();
|
|
@@ -21,17 +33,22 @@ class DatePrompt extends base_1.Prompt {
|
|
|
21
33
|
const d = this.value.getDate().toString().padStart(2, '0');
|
|
22
34
|
const h = this.value.getHours().toString().padStart(2, '0');
|
|
23
35
|
const min = this.value.getMinutes().toString().padStart(2, '0');
|
|
24
|
-
const fields = [
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
36
|
+
const fields = [
|
|
37
|
+
y,
|
|
38
|
+
m,
|
|
39
|
+
d,
|
|
40
|
+
h,
|
|
41
|
+
min
|
|
42
|
+
];
|
|
43
|
+
const display = fields.map((val, i)=>{
|
|
44
|
+
if (i === this.selectedField) return `${_theme.theme.main}${_ansi.ANSI.UNDERLINE}${val}${_ansi.ANSI.RESET}`;
|
|
28
45
|
return val;
|
|
29
46
|
});
|
|
30
|
-
const icon = this.errorMsg ? `${
|
|
47
|
+
const icon = this.errorMsg ? `${_theme.theme.error}${_symbols.symbols.cross}` : `${_theme.theme.success}?`;
|
|
31
48
|
const dateStr = `${display[0]}-${display[1]}-${display[2]} ${display[3]}:${display[4]}`;
|
|
32
|
-
let output = `${icon} ${
|
|
49
|
+
let output = `${icon} ${_ansi.ANSI.BOLD}${_theme.theme.title}${this.options.message}${_ansi.ANSI.RESET} ${dateStr} ${_theme.theme.muted}(Use arrows or type)${_ansi.ANSI.RESET}`;
|
|
33
50
|
if (this.errorMsg) {
|
|
34
|
-
output += `\n${
|
|
51
|
+
output += `\n${_theme.theme.error}>> ${this.errorMsg}${_ansi.ANSI.RESET}`;
|
|
35
52
|
}
|
|
36
53
|
this.renderFrame(output);
|
|
37
54
|
}
|
|
@@ -52,11 +69,10 @@ class DatePrompt extends base_1.Prompt {
|
|
|
52
69
|
this.submit(this.value);
|
|
53
70
|
return;
|
|
54
71
|
}
|
|
55
|
-
if (char === '\t' || this.isRight(char)) {
|
|
72
|
+
if (char === '\t' || this.isRight(char)) {
|
|
56
73
|
if (char === '\t') {
|
|
57
74
|
this.selectedField = (this.selectedField + 1) % 5;
|
|
58
|
-
}
|
|
59
|
-
else {
|
|
75
|
+
} else {
|
|
60
76
|
this.selectedField = Math.min(4, this.selectedField + 1);
|
|
61
77
|
}
|
|
62
78
|
this.inputBuffer = ''; // Reset buffer on move
|
|
@@ -64,11 +80,10 @@ class DatePrompt extends base_1.Prompt {
|
|
|
64
80
|
this.render(false);
|
|
65
81
|
return;
|
|
66
82
|
}
|
|
67
|
-
if (char === '\x1b[Z' || this.isLeft(char)) {
|
|
83
|
+
if (char === '\x1b[Z' || this.isLeft(char)) {
|
|
68
84
|
if (char === '\x1b[Z') {
|
|
69
85
|
this.selectedField = (this.selectedField - 1 + 5) % 5;
|
|
70
|
-
}
|
|
71
|
-
else {
|
|
86
|
+
} else {
|
|
72
87
|
this.selectedField = Math.max(0, this.selectedField - 1);
|
|
73
88
|
}
|
|
74
89
|
this.inputBuffer = ''; // Reset buffer on move
|
|
@@ -85,14 +100,10 @@ class DatePrompt extends base_1.Prompt {
|
|
|
85
100
|
}
|
|
86
101
|
const val = parseInt(nextBuffer, 10);
|
|
87
102
|
let valid = true;
|
|
88
|
-
if (this.selectedField === 1 && (val < 1 || val > 12))
|
|
89
|
-
|
|
90
|
-
if (this.selectedField ===
|
|
91
|
-
|
|
92
|
-
if (this.selectedField === 3 && (val > 23))
|
|
93
|
-
valid = false; // Hour
|
|
94
|
-
if (this.selectedField === 4 && (val > 59))
|
|
95
|
-
valid = false; // Minute
|
|
103
|
+
if (this.selectedField === 1 && (val < 1 || val > 12)) valid = false; // Month
|
|
104
|
+
if (this.selectedField === 2 && (val < 1 || val > 31)) valid = false; // Day (rough check)
|
|
105
|
+
if (this.selectedField === 3 && val > 23) valid = false; // Hour
|
|
106
|
+
if (this.selectedField === 4 && val > 59) valid = false; // Minute
|
|
96
107
|
if (!valid) {
|
|
97
108
|
nextBuffer = char;
|
|
98
109
|
}
|
|
@@ -101,24 +112,17 @@ class DatePrompt extends base_1.Prompt {
|
|
|
101
112
|
const d = new Date(this.value);
|
|
102
113
|
if (this.selectedField === 0) {
|
|
103
114
|
d.setFullYear(finalVal);
|
|
104
|
-
}
|
|
105
|
-
else if (this.selectedField === 1)
|
|
106
|
-
|
|
107
|
-
else if (this.selectedField ===
|
|
108
|
-
d.setDate(Math.max(1, Math.min(31, finalVal)));
|
|
109
|
-
else if (this.selectedField === 3)
|
|
110
|
-
d.setHours(Math.max(0, Math.min(23, finalVal)));
|
|
111
|
-
else if (this.selectedField === 4)
|
|
112
|
-
d.setMinutes(Math.max(0, Math.min(59, finalVal)));
|
|
115
|
+
} else if (this.selectedField === 1) d.setMonth(Math.max(0, Math.min(11, finalVal - 1)));
|
|
116
|
+
else if (this.selectedField === 2) d.setDate(Math.max(1, Math.min(31, finalVal)));
|
|
117
|
+
else if (this.selectedField === 3) d.setHours(Math.max(0, Math.min(23, finalVal)));
|
|
118
|
+
else if (this.selectedField === 4) d.setMinutes(Math.max(0, Math.min(59, finalVal)));
|
|
113
119
|
this.value = d;
|
|
114
120
|
// Check immediately after updating the value to display an error message (but still allow further input)
|
|
115
121
|
if (this.options.min && this.value < this.options.min) {
|
|
116
122
|
this.errorMsg = 'Warning: Date is before minimum.';
|
|
117
|
-
}
|
|
118
|
-
else if (this.options.max && this.value > this.options.max) {
|
|
123
|
+
} else if (this.options.max && this.value > this.options.max) {
|
|
119
124
|
this.errorMsg = 'Warning: Date is after maximum.';
|
|
120
|
-
}
|
|
121
|
-
else {
|
|
125
|
+
} else {
|
|
122
126
|
this.errorMsg = '';
|
|
123
127
|
}
|
|
124
128
|
this.render(false);
|
|
@@ -137,15 +141,14 @@ class DatePrompt extends base_1.Prompt {
|
|
|
137
141
|
if (event.action === 'scroll') {
|
|
138
142
|
if (event.scroll === 'up') {
|
|
139
143
|
this.adjustDate(1);
|
|
140
|
-
}
|
|
141
|
-
else if (event.scroll === 'down') {
|
|
144
|
+
} else if (event.scroll === 'down') {
|
|
142
145
|
this.adjustDate(-1);
|
|
143
146
|
}
|
|
144
147
|
}
|
|
145
148
|
}
|
|
146
149
|
adjustDate(dir) {
|
|
147
150
|
const d = new Date(this.value);
|
|
148
|
-
switch
|
|
151
|
+
switch(this.selectedField){
|
|
149
152
|
case 0:
|
|
150
153
|
d.setFullYear(d.getFullYear() + dir);
|
|
151
154
|
break;
|
|
@@ -165,14 +168,18 @@ class DatePrompt extends base_1.Prompt {
|
|
|
165
168
|
this.value = d;
|
|
166
169
|
if (this.options.min && this.value < this.options.min) {
|
|
167
170
|
this.errorMsg = 'Date cannot be before minimum allowed.';
|
|
168
|
-
}
|
|
169
|
-
else if (this.options.max && this.value > this.options.max) {
|
|
171
|
+
} else if (this.options.max && this.value > this.options.max) {
|
|
170
172
|
this.errorMsg = 'Date cannot be after maximum allowed.';
|
|
171
|
-
}
|
|
172
|
-
else {
|
|
173
|
+
} else {
|
|
173
174
|
this.errorMsg = '';
|
|
174
175
|
}
|
|
175
176
|
this.render(false);
|
|
176
177
|
}
|
|
177
|
-
|
|
178
|
-
|
|
178
|
+
constructor(options){
|
|
179
|
+
super(options), _define_property(this, "selectedField", 0) // 0: Year, 1: Month, 2: Day, 3: Hour, 4: Minute
|
|
180
|
+
, _define_property(this, "errorMsg", ''), _define_property(this, "inputBuffer", '');
|
|
181
|
+
this.value = options.initial || new Date();
|
|
182
|
+
}
|
|
183
|
+
};
|
|
184
|
+
|
|
185
|
+
//# sourceMappingURL=date.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/prompts/date.ts"],"sourcesContent":["import { ANSI } from '../ansi';\nimport { Prompt } from '../base';\nimport { theme } from '../theme';\nimport { symbols } from '../symbols';\nimport { DateOptions, MouseEvent } from '../types';\n\n// --- Implementation: Date Prompt ---\nexport class DatePrompt extends Prompt<Date, DateOptions> {\n private selectedField: number = 0; // 0: Year, 1: Month, 2: Day, 3: Hour, 4: Minute\n private errorMsg: string = '';\n private inputBuffer: string = '';\n\n constructor(options: DateOptions) {\n super(options);\n this.value = options.initial || new Date();\n }\n\n protected render(_firstRender: boolean) {\n // Date formatting\n const y = this.value.getFullYear();\n const m = (this.value.getMonth() + 1).toString().padStart(2, '0');\n const d = this.value.getDate().toString().padStart(2, '0');\n const h = this.value.getHours().toString().padStart(2, '0');\n const min = this.value.getMinutes().toString().padStart(2, '0');\n\n const fields = [y, m, d, h, min];\n const display = fields.map((val, i) => {\n if (i === this.selectedField) return `${theme.main}${ANSI.UNDERLINE}${val}${ANSI.RESET}`;\n return val;\n });\n\n const icon = this.errorMsg ? `${theme.error}${symbols.cross}` : `${theme.success}?`;\n const dateStr = `${display[0]}-${display[1]}-${display[2]} ${display[3]}:${display[4]}`;\n\n let output = `${icon} ${ANSI.BOLD}${theme.title}${this.options.message}${ANSI.RESET} ${dateStr} ${theme.muted}(Use arrows or type)${ANSI.RESET}`;\n\n if (this.errorMsg) {\n output += `\\n${theme.error}>> ${this.errorMsg}${ANSI.RESET}`;\n }\n\n this.renderFrame(output);\n }\n\n protected handleInput(char: string) {\n if (char === '\\r' || char === '\\n') {\n // Min constraint check\n if (this.options.min && this.value < this.options.min) {\n this.errorMsg = 'Date cannot be before minimum allowed.';\n this.render(false);\n return;\n }\n // Max constraint check\n if (this.options.max && this.value > this.options.max) {\n this.errorMsg = 'Date cannot be after maximum allowed.';\n this.render(false);\n return;\n }\n\n this.submit(this.value);\n return;\n }\n\n if (char === '\\t' || this.isRight(char)) { // Right / Tab\n if (char === '\\t') {\n this.selectedField = (this.selectedField + 1) % 5;\n } else {\n this.selectedField = Math.min(4, this.selectedField + 1);\n }\n this.inputBuffer = ''; // Reset buffer on move\n this.errorMsg = '';\n this.render(false);\n return;\n }\n\n if (char === '\\x1b[Z' || this.isLeft(char)) { // Left / Shift+Tab\n if (char === '\\x1b[Z') {\n this.selectedField = (this.selectedField - 1 + 5) % 5;\n } else {\n this.selectedField = Math.max(0, this.selectedField - 1);\n }\n this.inputBuffer = ''; // Reset buffer on move\n this.errorMsg = '';\n this.render(false);\n return;\n }\n\n // Support numeric input\n if (/^\\d$/.test(char)) {\n const maxLen = this.selectedField === 0 ? 4 : 2;\n let nextBuffer = this.inputBuffer + char;\n\n if (nextBuffer.length > maxLen) {\n nextBuffer = char;\n }\n\n const val = parseInt(nextBuffer, 10);\n let valid = true;\n\n if (this.selectedField === 1 && (val < 1 || val > 12)) valid = false; // Month\n if (this.selectedField === 2 && (val < 1 || val > 31)) valid = false; // Day (rough check)\n if (this.selectedField === 3 && (val > 23)) valid = false; // Hour\n if (this.selectedField === 4 && (val > 59)) valid = false; // Minute\n\n if (!valid) {\n nextBuffer = char;\n }\n\n this.inputBuffer = nextBuffer;\n const finalVal = parseInt(this.inputBuffer, 10);\n\n const d = new Date(this.value);\n\n if (this.selectedField === 0) {\n d.setFullYear(finalVal);\n }\n else if (this.selectedField === 1) d.setMonth(Math.max(0, Math.min(11, finalVal - 1)));\n else if (this.selectedField === 2) d.setDate(Math.max(1, Math.min(31, finalVal)));\n else if (this.selectedField === 3) d.setHours(Math.max(0, Math.min(23, finalVal)));\n else if (this.selectedField === 4) d.setMinutes(Math.max(0, Math.min(59, finalVal)));\n\n this.value = d;\n\n // Check immediately after updating the value to display an error message (but still allow further input)\n if (this.options.min && this.value < this.options.min) {\n this.errorMsg = 'Warning: Date is before minimum.';\n } else if (this.options.max && this.value > this.options.max) {\n this.errorMsg = 'Warning: Date is after maximum.';\n } else {\n this.errorMsg = '';\n }\n\n this.render(false);\n return;\n }\n\n // Support standard and application cursor keys\n const isUp = this.isUp(char);\n const isDown = this.isDown(char);\n\n if (isUp || isDown) {\n this.inputBuffer = ''; // Reset buffer on arrow move\n const dir = isUp ? 1 : -1;\n this.adjustDate(dir);\n }\n }\n\n protected handleMouse(event: MouseEvent) {\n if (event.action === 'scroll') {\n if (event.scroll === 'up') {\n this.adjustDate(1);\n } else if (event.scroll === 'down') {\n this.adjustDate(-1);\n }\n }\n }\n\n private adjustDate(dir: number) {\n const d = new Date(this.value);\n\n switch (this.selectedField) {\n case 0: d.setFullYear(d.getFullYear() + dir); break;\n case 1: d.setMonth(d.getMonth() + dir); break;\n case 2: d.setDate(d.getDate() + dir); break;\n case 3: d.setHours(d.getHours() + dir); break;\n case 4: d.setMinutes(d.getMinutes() + dir); break;\n }\n\n this.value = d;\n\n if (this.options.min && this.value < this.options.min) {\n this.errorMsg = 'Date cannot be before minimum allowed.';\n } else if (this.options.max && this.value > this.options.max) {\n this.errorMsg = 'Date cannot be after maximum allowed.';\n } else {\n this.errorMsg = '';\n }\n\n this.render(false);\n }\n}"],"names":["DatePrompt","Prompt","render","_firstRender","y","value","getFullYear","m","getMonth","toString","padStart","d","getDate","h","getHours","min","getMinutes","fields","display","map","val","i","selectedField","theme","main","ANSI","UNDERLINE","RESET","icon","errorMsg","error","symbols","cross","success","dateStr","output","BOLD","title","options","message","muted","renderFrame","handleInput","char","max","submit","isRight","Math","inputBuffer","isLeft","test","maxLen","nextBuffer","length","parseInt","valid","finalVal","Date","setFullYear","setMonth","setDate","setHours","setMinutes","isUp","isDown","dir","adjustDate","handleMouse","event","action","scroll","initial"],"mappings":"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"}
|