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,76 +1,91 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
Object.defineProperty(exports, "BreadcrumbPrompt", {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: function() {
|
|
8
|
+
return BreadcrumbPrompt;
|
|
7
9
|
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
10
|
});
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
11
|
+
const _base = require("../base");
|
|
12
|
+
const _ansi = require("../ansi");
|
|
13
|
+
const _theme = require("../theme");
|
|
14
|
+
const _symbols = require("../symbols");
|
|
15
|
+
const _promises = /*#__PURE__*/ _interop_require_wildcard(require("fs/promises"));
|
|
16
|
+
const _path = /*#__PURE__*/ _interop_require_wildcard(require("path"));
|
|
17
|
+
function _define_property(obj, key, value) {
|
|
18
|
+
if (key in obj) {
|
|
19
|
+
Object.defineProperty(obj, key, {
|
|
20
|
+
value: value,
|
|
21
|
+
enumerable: true,
|
|
22
|
+
configurable: true,
|
|
23
|
+
writable: true
|
|
24
|
+
});
|
|
25
|
+
} else {
|
|
26
|
+
obj[key] = value;
|
|
27
|
+
}
|
|
28
|
+
return obj;
|
|
29
|
+
}
|
|
30
|
+
function _getRequireWildcardCache(nodeInterop) {
|
|
31
|
+
if (typeof WeakMap !== "function") return null;
|
|
32
|
+
var cacheBabelInterop = new WeakMap();
|
|
33
|
+
var cacheNodeInterop = new WeakMap();
|
|
34
|
+
return (_getRequireWildcardCache = function(nodeInterop) {
|
|
35
|
+
return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
|
|
36
|
+
})(nodeInterop);
|
|
37
|
+
}
|
|
38
|
+
function _interop_require_wildcard(obj, nodeInterop) {
|
|
39
|
+
if (!nodeInterop && obj && obj.__esModule) {
|
|
40
|
+
return obj;
|
|
41
|
+
}
|
|
42
|
+
if (obj === null || typeof obj !== "object" && typeof obj !== "function") {
|
|
43
|
+
return {
|
|
44
|
+
default: obj
|
|
24
45
|
};
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
return result;
|
|
46
|
+
}
|
|
47
|
+
var cache = _getRequireWildcardCache(nodeInterop);
|
|
48
|
+
if (cache && cache.has(obj)) {
|
|
49
|
+
return cache.get(obj);
|
|
50
|
+
}
|
|
51
|
+
var newObj = {
|
|
52
|
+
__proto__: null
|
|
33
53
|
};
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
this.cursor = 0;
|
|
49
|
-
this.scrollTop = 0;
|
|
50
|
-
this.isLoading = false;
|
|
51
|
-
this.error = null;
|
|
52
|
-
this.pageSize = 10;
|
|
53
|
-
this.root = path.resolve(options.root || process.cwd());
|
|
54
|
-
this.currentPath = this.root;
|
|
55
|
-
this.separator = options.separator || ' › ';
|
|
56
|
-
this.showHidden = options.showHidden || false;
|
|
57
|
-
this.loadDirectory(this.currentPath);
|
|
54
|
+
var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
|
|
55
|
+
for(var key in obj){
|
|
56
|
+
if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
|
|
57
|
+
var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
|
|
58
|
+
if (desc && (desc.get || desc.set)) {
|
|
59
|
+
Object.defineProperty(newObj, key, desc);
|
|
60
|
+
} else {
|
|
61
|
+
newObj[key] = obj[key];
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
newObj.default = obj;
|
|
66
|
+
if (cache) {
|
|
67
|
+
cache.set(obj, newObj);
|
|
58
68
|
}
|
|
69
|
+
return newObj;
|
|
70
|
+
}
|
|
71
|
+
let BreadcrumbPrompt = class BreadcrumbPrompt extends _base.Prompt {
|
|
59
72
|
async loadDirectory(dir) {
|
|
60
73
|
this.isLoading = true;
|
|
61
74
|
this.error = null;
|
|
62
75
|
this.render(false);
|
|
63
76
|
try {
|
|
64
|
-
await
|
|
65
|
-
const dirents = await
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
77
|
+
await _promises.access(dir);
|
|
78
|
+
const dirents = await _promises.readdir(dir, {
|
|
79
|
+
withFileTypes: true
|
|
80
|
+
});
|
|
81
|
+
let entries = dirents.map((d)=>({
|
|
82
|
+
name: d.name,
|
|
83
|
+
isDirectory: d.isDirectory()
|
|
84
|
+
}));
|
|
70
85
|
if (!this.showHidden) {
|
|
71
|
-
entries = entries.filter(e
|
|
86
|
+
entries = entries.filter((e)=>!e.name.startsWith('.'));
|
|
72
87
|
}
|
|
73
|
-
entries.sort((a, b)
|
|
88
|
+
entries.sort((a, b)=>{
|
|
74
89
|
if (a.isDirectory === b.isDirectory) {
|
|
75
90
|
return a.name.localeCompare(b.name);
|
|
76
91
|
}
|
|
@@ -79,25 +94,21 @@ class BreadcrumbPrompt extends base_1.Prompt {
|
|
|
79
94
|
this.currentEntries = entries;
|
|
80
95
|
if (this.currentEntries.length === 0) {
|
|
81
96
|
this.cursor = 0;
|
|
82
|
-
}
|
|
83
|
-
else if (this.cursor >= this.currentEntries.length) {
|
|
97
|
+
} else if (this.cursor >= this.currentEntries.length) {
|
|
84
98
|
this.cursor = this.currentEntries.length - 1;
|
|
85
99
|
}
|
|
86
|
-
}
|
|
87
|
-
catch (err) {
|
|
100
|
+
} catch (err) {
|
|
88
101
|
this.error = err.message || 'Error reading directory';
|
|
89
102
|
this.currentEntries = [];
|
|
90
|
-
}
|
|
91
|
-
finally {
|
|
103
|
+
} finally{
|
|
92
104
|
this.isLoading = false;
|
|
93
105
|
this.render(false);
|
|
94
106
|
}
|
|
95
107
|
}
|
|
96
108
|
async drillDown() {
|
|
97
109
|
const entry = this.currentEntries[this.cursor];
|
|
98
|
-
if (!entry || !entry.isDirectory)
|
|
99
|
-
|
|
100
|
-
const nextPath = path.join(this.currentPath, entry.name);
|
|
110
|
+
if (!entry || !entry.isDirectory) return;
|
|
111
|
+
const nextPath = _path.join(this.currentPath, entry.name);
|
|
101
112
|
this.stack.push({
|
|
102
113
|
path: this.currentPath,
|
|
103
114
|
cursor: this.cursor,
|
|
@@ -109,8 +120,7 @@ class BreadcrumbPrompt extends base_1.Prompt {
|
|
|
109
120
|
await this.loadDirectory(nextPath);
|
|
110
121
|
}
|
|
111
122
|
async goUp() {
|
|
112
|
-
if (this.stack.length === 0)
|
|
113
|
-
return;
|
|
123
|
+
if (this.stack.length === 0) return;
|
|
114
124
|
const prevState = this.stack.pop();
|
|
115
125
|
if (prevState) {
|
|
116
126
|
this.currentPath = prevState.path;
|
|
@@ -123,13 +133,16 @@ class BreadcrumbPrompt extends base_1.Prompt {
|
|
|
123
133
|
const width = this.stdout.columns || 80;
|
|
124
134
|
let output = '';
|
|
125
135
|
// --- Breadcrumb Line Construction ---
|
|
126
|
-
const relative =
|
|
127
|
-
const parts = relative ? relative.split(
|
|
128
|
-
const rootName =
|
|
129
|
-
const segments = [
|
|
136
|
+
const relative = _path.relative(this.root, this.currentPath);
|
|
137
|
+
const parts = relative ? relative.split(_path.sep) : [];
|
|
138
|
+
const rootName = _path.basename(this.root);
|
|
139
|
+
const segments = [
|
|
140
|
+
rootName,
|
|
141
|
+
...parts
|
|
142
|
+
];
|
|
130
143
|
// Calculate available space for path
|
|
131
144
|
// Prefix: "? Message: "
|
|
132
|
-
const prefix = `${
|
|
145
|
+
const prefix = `${_theme.theme.success}?${_ansi.ANSI.RESET} ${_theme.theme.title}${this.options.message}${_ansi.ANSI.RESET} `;
|
|
133
146
|
const prefixWidth = this.stripAnsi(prefix).length;
|
|
134
147
|
const availableWidth = Math.max(20, width - prefixWidth - 5); // Reserve 5 chars buffer
|
|
135
148
|
let breadcrumbStr = segments.join(this.separator);
|
|
@@ -137,10 +150,9 @@ class BreadcrumbPrompt extends base_1.Prompt {
|
|
|
137
150
|
// Truncate logic: Keep root and tail segments that fit
|
|
138
151
|
// e.g., root > ... > folder > subfolder
|
|
139
152
|
let suffix = segments[segments.length - 1];
|
|
140
|
-
for
|
|
153
|
+
for(let i = segments.length - 2; i >= 1; i--){
|
|
141
154
|
const next = segments[i] + this.separator + suffix;
|
|
142
|
-
if (next.length + 4 > availableWidth)
|
|
143
|
-
break; // +4 for "... "
|
|
155
|
+
if (next.length + 4 > availableWidth) break; // +4 for "... "
|
|
144
156
|
suffix = next;
|
|
145
157
|
}
|
|
146
158
|
breadcrumbStr = `${segments[0]}${this.separator}...${this.separator}${suffix}`;
|
|
@@ -152,20 +164,16 @@ class BreadcrumbPrompt extends base_1.Prompt {
|
|
|
152
164
|
output += `${prefix}${breadcrumbStr}\n`;
|
|
153
165
|
// --- Content / List ---
|
|
154
166
|
if (this.isLoading) {
|
|
155
|
-
output += ` ${
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
else
|
|
161
|
-
output += ` ${theme_1.theme.muted}(Empty directory)${ansi_1.ANSI.RESET}\n ${theme_1.theme.muted}(Backspace to go back)${ansi_1.ANSI.RESET}`;
|
|
162
|
-
}
|
|
163
|
-
else {
|
|
167
|
+
output += ` ${_theme.theme.muted}Loading...${_ansi.ANSI.RESET}`;
|
|
168
|
+
} else if (this.error) {
|
|
169
|
+
output += ` ${_theme.theme.error}${this.error}${_ansi.ANSI.RESET}`;
|
|
170
|
+
} else if (this.currentEntries.length === 0) {
|
|
171
|
+
output += ` ${_theme.theme.muted}(Empty directory)${_ansi.ANSI.RESET}\n ${_theme.theme.muted}(Backspace to go back)${_ansi.ANSI.RESET}`;
|
|
172
|
+
} else {
|
|
164
173
|
// Adjust Scroll Top
|
|
165
174
|
if (this.cursor < this.scrollTop) {
|
|
166
175
|
this.scrollTop = this.cursor;
|
|
167
|
-
}
|
|
168
|
-
else if (this.cursor >= this.scrollTop + this.pageSize) {
|
|
176
|
+
} else if (this.cursor >= this.scrollTop + this.pageSize) {
|
|
169
177
|
this.scrollTop = this.cursor - this.pageSize + 1;
|
|
170
178
|
}
|
|
171
179
|
// Sanity check
|
|
@@ -173,40 +181,34 @@ class BreadcrumbPrompt extends base_1.Prompt {
|
|
|
173
181
|
this.scrollTop = Math.max(0, this.currentEntries.length - this.pageSize);
|
|
174
182
|
}
|
|
175
183
|
const visibleEntries = this.currentEntries.slice(this.scrollTop, this.scrollTop + this.pageSize);
|
|
176
|
-
visibleEntries.forEach((entry, index)
|
|
184
|
+
visibleEntries.forEach((entry, index)=>{
|
|
177
185
|
const absoluteIndex = this.scrollTop + index;
|
|
178
186
|
const isSelected = absoluteIndex === this.cursor;
|
|
179
187
|
const icon = entry.isDirectory ? '📂' : '📄';
|
|
180
188
|
let line = '';
|
|
181
189
|
if (isSelected) {
|
|
182
|
-
line += `${
|
|
183
|
-
}
|
|
184
|
-
else {
|
|
190
|
+
line += `${_theme.theme.main}${_symbols.symbols.pointer} ${icon} ${entry.name}${_ansi.ANSI.RESET}`;
|
|
191
|
+
} else {
|
|
185
192
|
line += ` ${icon} ${entry.name}`;
|
|
186
193
|
}
|
|
187
|
-
if (index > 0 || index === 0)
|
|
188
|
-
|
|
189
|
-
if (index < visibleEntries.length - 1)
|
|
190
|
-
output += '\n';
|
|
194
|
+
if (index > 0 || index === 0) output += line;
|
|
195
|
+
if (index < visibleEntries.length - 1) output += '\n';
|
|
191
196
|
});
|
|
192
|
-
|
|
193
|
-
|
|
197
|
+
// Add a hint about navigation if plenty of space?
|
|
198
|
+
// Optional: output += `\n${theme.muted}(Use Arrow Keys, Enter to Select, Backspace to Up)${ANSI.RESET}`;
|
|
194
199
|
}
|
|
195
200
|
this.renderFrame(output);
|
|
196
201
|
}
|
|
197
202
|
handleInput(char, _key) {
|
|
198
|
-
if (this.isLoading)
|
|
199
|
-
return;
|
|
203
|
+
if (this.isLoading) return;
|
|
200
204
|
// Enter
|
|
201
205
|
if (char === '\r' || char === '\n') {
|
|
202
|
-
if (this.currentEntries.length === 0)
|
|
203
|
-
return;
|
|
206
|
+
if (this.currentEntries.length === 0) return;
|
|
204
207
|
const entry = this.currentEntries[this.cursor];
|
|
205
208
|
if (entry.isDirectory) {
|
|
206
209
|
this.drillDown();
|
|
207
|
-
}
|
|
208
|
-
|
|
209
|
-
const fullPath = path.join(this.currentPath, entry.name);
|
|
210
|
+
} else {
|
|
211
|
+
const fullPath = _path.join(this.currentPath, entry.name);
|
|
210
212
|
this.submit(fullPath);
|
|
211
213
|
}
|
|
212
214
|
return;
|
|
@@ -226,16 +228,14 @@ class BreadcrumbPrompt extends base_1.Prompt {
|
|
|
226
228
|
}
|
|
227
229
|
// Tab (Next)
|
|
228
230
|
if (char === '\t') {
|
|
229
|
-
if (this.currentEntries.length === 0)
|
|
230
|
-
return;
|
|
231
|
+
if (this.currentEntries.length === 0) return;
|
|
231
232
|
this.cursor = (this.cursor + 1) % this.currentEntries.length;
|
|
232
233
|
this.render(false);
|
|
233
234
|
return;
|
|
234
235
|
}
|
|
235
236
|
// Shift+Tab (Prev)
|
|
236
237
|
if (char === '\x1b[Z') {
|
|
237
|
-
if (this.currentEntries.length === 0)
|
|
238
|
-
return;
|
|
238
|
+
if (this.currentEntries.length === 0) return;
|
|
239
239
|
this.cursor = (this.cursor - 1 + this.currentEntries.length) % this.currentEntries.length;
|
|
240
240
|
this.render(false);
|
|
241
241
|
return;
|
|
@@ -245,8 +245,7 @@ class BreadcrumbPrompt extends base_1.Prompt {
|
|
|
245
245
|
if (this.cursor > 0) {
|
|
246
246
|
this.cursor--;
|
|
247
247
|
this.render(false);
|
|
248
|
-
}
|
|
249
|
-
else if (this.currentEntries.length > 0) {
|
|
248
|
+
} else if (this.currentEntries.length > 0) {
|
|
250
249
|
// Cycle to bottom?
|
|
251
250
|
this.cursor = this.currentEntries.length - 1;
|
|
252
251
|
this.render(false);
|
|
@@ -258,8 +257,7 @@ class BreadcrumbPrompt extends base_1.Prompt {
|
|
|
258
257
|
if (this.cursor < this.currentEntries.length - 1) {
|
|
259
258
|
this.cursor++;
|
|
260
259
|
this.render(false);
|
|
261
|
-
}
|
|
262
|
-
else if (this.currentEntries.length > 0) {
|
|
260
|
+
} else if (this.currentEntries.length > 0) {
|
|
263
261
|
// Cycle to top?
|
|
264
262
|
this.cursor = 0;
|
|
265
263
|
this.render(false);
|
|
@@ -281,16 +279,14 @@ class BreadcrumbPrompt extends base_1.Prompt {
|
|
|
281
279
|
}
|
|
282
280
|
handleMouse(_event) {
|
|
283
281
|
// Scroll up and down
|
|
284
|
-
if (this.isLoading)
|
|
285
|
-
return;
|
|
282
|
+
if (this.isLoading) return;
|
|
286
283
|
if (_event.action === 'scroll') {
|
|
287
284
|
if (_event.scroll === 'up') {
|
|
288
285
|
if (this.cursor > 0) {
|
|
289
286
|
this.cursor--;
|
|
290
287
|
this.render(false);
|
|
291
288
|
}
|
|
292
|
-
}
|
|
293
|
-
else if (_event.scroll === 'down') {
|
|
289
|
+
} else if (_event.scroll === 'down') {
|
|
294
290
|
if (this.cursor < this.currentEntries.length - 1) {
|
|
295
291
|
this.cursor++;
|
|
296
292
|
this.render(false);
|
|
@@ -298,5 +294,14 @@ class BreadcrumbPrompt extends base_1.Prompt {
|
|
|
298
294
|
}
|
|
299
295
|
}
|
|
300
296
|
}
|
|
301
|
-
|
|
302
|
-
|
|
297
|
+
constructor(options){
|
|
298
|
+
super(options), _define_property(this, "stack", []), _define_property(this, "currentEntries", []), _define_property(this, "cursor", 0), _define_property(this, "scrollTop", 0), _define_property(this, "root", void 0), _define_property(this, "currentPath", void 0), _define_property(this, "separator", void 0), _define_property(this, "showHidden", void 0), _define_property(this, "isLoading", false), _define_property(this, "error", null), _define_property(this, "pageSize", 10);
|
|
299
|
+
this.root = _path.resolve(options.root || process.cwd());
|
|
300
|
+
this.currentPath = this.root;
|
|
301
|
+
this.separator = options.separator || ' › ';
|
|
302
|
+
this.showHidden = options.showHidden || false;
|
|
303
|
+
this.loadDirectory(this.currentPath);
|
|
304
|
+
}
|
|
305
|
+
};
|
|
306
|
+
|
|
307
|
+
//# sourceMappingURL=breadcrumb.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/prompts/breadcrumb.ts"],"sourcesContent":["import { Prompt } from '../base';\nimport { BreadcrumbOptions, MouseEvent } from '../types';\nimport { ANSI } from '../ansi';\nimport { theme } from '../theme';\nimport { symbols } from '../symbols';\nimport * as fs from 'fs/promises';\nimport * as path from 'path';\n\ninterface StackItem {\n path: string;\n cursor: number;\n scrollTop: number;\n}\n\ninterface DirEntry {\n name: string;\n isDirectory: boolean;\n}\n\nexport class BreadcrumbPrompt extends Prompt<string, BreadcrumbOptions> {\n protected stack: StackItem[] = [];\n protected currentEntries: DirEntry[] = [];\n protected cursor: number = 0;\n protected scrollTop: number = 0;\n protected root: string;\n protected currentPath: string;\n protected separator: string;\n protected showHidden: boolean;\n protected isLoading: boolean = false;\n protected error: string | null = null;\n protected readonly pageSize: number = 10;\n\n constructor(options: BreadcrumbOptions) {\n super(options);\n this.root = path.resolve(options.root || process.cwd());\n this.currentPath = this.root;\n this.separator = options.separator || ' › ';\n this.showHidden = options.showHidden || false;\n\n this.loadDirectory(this.currentPath);\n }\n\n protected async loadDirectory(dir: string) {\n this.isLoading = true;\n this.error = null;\n this.render(false);\n\n try {\n await fs.access(dir);\n\n const dirents = await fs.readdir(dir, { withFileTypes: true });\n let entries = dirents.map(d => ({\n name: d.name,\n isDirectory: d.isDirectory()\n }));\n\n if (!this.showHidden) {\n entries = entries.filter(e => !e.name.startsWith('.'));\n }\n\n entries.sort((a, b) => {\n if (a.isDirectory === b.isDirectory) {\n return a.name.localeCompare(b.name);\n }\n return a.isDirectory ? -1 : 1;\n });\n\n this.currentEntries = entries;\n\n if (this.currentEntries.length === 0) {\n this.cursor = 0;\n } else if (this.cursor >= this.currentEntries.length) {\n this.cursor = this.currentEntries.length - 1;\n }\n } catch (err: any) {\n this.error = err.message || 'Error reading directory';\n this.currentEntries = [];\n } finally {\n this.isLoading = false;\n this.render(false);\n }\n }\n\n protected async drillDown() {\n const entry = this.currentEntries[this.cursor];\n if (!entry || !entry.isDirectory) return;\n\n const nextPath = path.join(this.currentPath, entry.name);\n\n this.stack.push({\n path: this.currentPath,\n cursor: this.cursor,\n scrollTop: this.scrollTop\n });\n\n this.currentPath = nextPath;\n this.cursor = 0;\n this.scrollTop = 0;\n\n await this.loadDirectory(nextPath);\n }\n\n protected async goUp() {\n if (this.stack.length === 0) return;\n\n const prevState = this.stack.pop();\n if (prevState) {\n this.currentPath = prevState.path;\n this.cursor = prevState.cursor;\n this.scrollTop = prevState.scrollTop;\n\n await this.loadDirectory(this.currentPath);\n }\n }\n\n protected render(_firstRender: boolean): void {\n const width = this.stdout.columns || 80;\n let output = '';\n\n // --- Breadcrumb Line Construction ---\n const relative = path.relative(this.root, this.currentPath);\n const parts = relative ? relative.split(path.sep) : [];\n const rootName = path.basename(this.root);\n const segments = [rootName, ...parts];\n\n // Calculate available space for path\n // Prefix: \"? Message: \"\n const prefix = `${theme.success}?${ANSI.RESET} ${theme.title}${this.options.message}${ANSI.RESET} `;\n const prefixWidth = this.stripAnsi(prefix).length;\n const availableWidth = Math.max(20, width - prefixWidth - 5); // Reserve 5 chars buffer\n\n let breadcrumbStr = segments.join(this.separator);\n\n if (breadcrumbStr.length > availableWidth) {\n // Truncate logic: Keep root and tail segments that fit\n // e.g., root > ... > folder > subfolder\n let suffix = segments[segments.length - 1];\n for (let i = segments.length - 2; i >= 1; i--) { // Stop before root (index 0)\n const next = segments[i] + this.separator + suffix;\n if (next.length + 4 > availableWidth) break; // +4 for \"... \"\n suffix = next;\n }\n breadcrumbStr = `${segments[0]}${this.separator}...${this.separator}${suffix}`;\n\n // If even that is too long (extreme case), just truncate tail\n if (breadcrumbStr.length > availableWidth) {\n breadcrumbStr = '...' + breadcrumbStr.slice(-(availableWidth - 3));\n }\n }\n\n output += `${prefix}${breadcrumbStr}\\n`;\n\n // --- Content / List ---\n if (this.isLoading) {\n output += ` ${theme.muted}Loading...${ANSI.RESET}`;\n } else if (this.error) {\n output += ` ${theme.error}${this.error}${ANSI.RESET}`;\n } else if (this.currentEntries.length === 0) {\n output += ` ${theme.muted}(Empty directory)${ANSI.RESET}\\n ${theme.muted}(Backspace to go back)${ANSI.RESET}`;\n } else {\n // Adjust Scroll Top\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 // Sanity check\n if (this.scrollTop > this.currentEntries.length - 1) {\n this.scrollTop = Math.max(0, this.currentEntries.length - this.pageSize);\n }\n\n const visibleEntries = this.currentEntries.slice(this.scrollTop, this.scrollTop + this.pageSize);\n\n visibleEntries.forEach((entry, index) => {\n const absoluteIndex = this.scrollTop + index;\n const isSelected = absoluteIndex === this.cursor;\n const icon = entry.isDirectory ? '📂' : '📄';\n\n let line = '';\n if (isSelected) {\n line += `${theme.main}${symbols.pointer} ${icon} ${entry.name}${ANSI.RESET}`;\n } else {\n line += ` ${icon} ${entry.name}`;\n }\n\n if (index > 0 || index === 0) output += line;\n if (index < visibleEntries.length - 1) output += '\\n';\n });\n\n // Add a hint about navigation if plenty of space? \n // Optional: output += `\\n${theme.muted}(Use Arrow Keys, Enter to Select, Backspace to Up)${ANSI.RESET}`;\n }\n\n this.renderFrame(output);\n }\n\n protected handleInput(char: string, _key: Buffer): void {\n if (this.isLoading) return;\n\n // Enter\n if (char === '\\r' || char === '\\n') {\n if (this.currentEntries.length === 0) return;\n\n const entry = this.currentEntries[this.cursor];\n if (entry.isDirectory) {\n this.drillDown();\n } else {\n const fullPath = path.join(this.currentPath, entry.name);\n this.submit(fullPath);\n }\n return;\n }\n\n // Backspace or Left Arrow\n if (char === '\\x7f' || char === '\\x08' || this.isLeft(char)) {\n this.goUp();\n return;\n }\n\n // Right Arrow\n if (this.isRight(char)) {\n const entry = this.currentEntries[this.cursor];\n if (entry && entry.isDirectory) {\n this.drillDown();\n }\n return;\n }\n\n // Tab (Next)\n if (char === '\\t') {\n if (this.currentEntries.length === 0) return;\n this.cursor = (this.cursor + 1) % this.currentEntries.length;\n this.render(false);\n return;\n }\n\n // Shift+Tab (Prev)\n if (char === '\\x1b[Z') {\n if (this.currentEntries.length === 0) return;\n this.cursor = (this.cursor - 1 + this.currentEntries.length) % this.currentEntries.length;\n this.render(false);\n return;\n }\n\n // Up\n if (this.isUp(char)) {\n if (this.cursor > 0) {\n this.cursor--;\n this.render(false);\n } else if (this.currentEntries.length > 0) {\n // Cycle to bottom?\n this.cursor = this.currentEntries.length - 1;\n this.render(false);\n }\n return;\n }\n\n // Down\n if (this.isDown(char)) {\n if (this.cursor < this.currentEntries.length - 1) {\n this.cursor++;\n this.render(false);\n } else if (this.currentEntries.length > 0) {\n // Cycle to top?\n this.cursor = 0;\n this.render(false);\n }\n return;\n }\n\n // Page Up\n if (char === '\\x1b[5~') {\n this.cursor = Math.max(0, this.cursor - this.pageSize);\n this.render(false);\n return;\n }\n\n // Page Down\n if (char === '\\x1b[6~') {\n this.cursor = Math.min(this.currentEntries.length - 1, this.cursor + this.pageSize);\n this.render(false);\n return;\n }\n }\n\n protected handleMouse(_event: MouseEvent): void {\n // Scroll up and down\n if (this.isLoading) return;\n\n if (_event.action === 'scroll') {\n if (_event.scroll === 'up') {\n if (this.cursor > 0) {\n this.cursor--;\n this.render(false);\n }\n } else if (_event.scroll === 'down') {\n if (this.cursor < this.currentEntries.length - 1) {\n this.cursor++;\n this.render(false);\n }\n }\n }\n }\n}\n"],"names":["BreadcrumbPrompt","Prompt","loadDirectory","dir","isLoading","error","render","fs","access","dirents","readdir","withFileTypes","entries","map","d","name","isDirectory","showHidden","filter","e","startsWith","sort","a","b","localeCompare","currentEntries","length","cursor","err","message","drillDown","entry","nextPath","path","join","currentPath","stack","push","scrollTop","goUp","prevState","pop","_firstRender","width","stdout","columns","output","relative","root","parts","split","sep","rootName","basename","segments","prefix","theme","success","ANSI","RESET","title","options","prefixWidth","stripAnsi","availableWidth","Math","max","breadcrumbStr","separator","suffix","i","next","slice","muted","pageSize","visibleEntries","forEach","index","absoluteIndex","isSelected","icon","line","main","symbols","pointer","renderFrame","handleInput","char","_key","fullPath","submit","isLeft","isRight","isUp","isDown","min","handleMouse","_event","action","scroll","resolve","process","cwd"],"mappings":"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"}
|
|
@@ -1,57 +1,64 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
class BytePrompt extends base_1.Prompt {
|
|
10
|
-
constructor(options) {
|
|
11
|
-
super(options);
|
|
12
|
-
this.inputValue = 0;
|
|
13
|
-
this.buffer = '';
|
|
14
|
-
this.unitIndex = 0;
|
|
15
|
-
this.errorMsg = '';
|
|
16
|
-
// Parse initial bytes to best unit
|
|
17
|
-
// e.g. 1073741824 -> 1.00 GB
|
|
18
|
-
let val = options.initial || 0;
|
|
19
|
-
let idx = 0;
|
|
20
|
-
while (val >= 1024 && idx < UNITS.length - 1) {
|
|
21
|
-
val /= 1024;
|
|
22
|
-
idx++;
|
|
23
|
-
}
|
|
24
|
-
// Round to 2 decimals for display if float
|
|
25
|
-
this.inputValue = Math.round(val * 100) / 100;
|
|
26
|
-
this.buffer = this.inputValue.toString();
|
|
27
|
-
this.unitIndex = idx;
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
Object.defineProperty(exports, "BytePrompt", {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: function() {
|
|
8
|
+
return BytePrompt;
|
|
28
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;
|
|
25
|
+
}
|
|
26
|
+
return obj;
|
|
27
|
+
}
|
|
28
|
+
const UNITS = [
|
|
29
|
+
'B',
|
|
30
|
+
'KB',
|
|
31
|
+
'MB',
|
|
32
|
+
'GB',
|
|
33
|
+
'TB',
|
|
34
|
+
'PB'
|
|
35
|
+
];
|
|
36
|
+
let BytePrompt = class BytePrompt extends _base.Prompt {
|
|
29
37
|
render(_firstRender) {
|
|
30
38
|
const unitStr = UNITS[this.unitIndex];
|
|
31
39
|
// 1. Render Question & Input
|
|
32
|
-
const icon = this.errorMsg ? `${
|
|
33
|
-
let output = `${icon} ${
|
|
40
|
+
const icon = this.errorMsg ? `${_theme.theme.error}${_symbols.symbols.cross}` : `${_theme.theme.success}?`;
|
|
41
|
+
let output = `${icon} ${_ansi.ANSI.BOLD}${_theme.theme.title}${this.options.message}${_ansi.ANSI.RESET} `;
|
|
34
42
|
// Value part
|
|
35
|
-
output += `${
|
|
43
|
+
output += `${_theme.theme.main}${_ansi.ANSI.UNDERLINE}${this.buffer}${_ansi.ANSI.RESET} ${_ansi.ANSI.BOLD}${unitStr}${_ansi.ANSI.RESET}\n`;
|
|
36
44
|
// 2. Render Unit Bar
|
|
37
45
|
// (Unit: B > KB > [MB] > GB)
|
|
38
46
|
let bar = ' ';
|
|
39
|
-
UNITS.forEach((u, i)
|
|
47
|
+
UNITS.forEach((u, i)=>{
|
|
40
48
|
if (i === this.unitIndex) {
|
|
41
|
-
bar += `${
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
bar += `${theme_1.theme.muted} ${u} ${ansi_1.ANSI.RESET}`;
|
|
49
|
+
bar += `${_theme.theme.main}${_ansi.ANSI.REVERSE} ${u} ${_ansi.ANSI.RESET}`;
|
|
50
|
+
} else {
|
|
51
|
+
bar += `${_theme.theme.muted} ${u} ${_ansi.ANSI.RESET}`;
|
|
45
52
|
}
|
|
46
53
|
if (i < UNITS.length - 1) {
|
|
47
|
-
bar += ` ${
|
|
54
|
+
bar += ` ${_theme.theme.muted}›${_ansi.ANSI.RESET} `;
|
|
48
55
|
}
|
|
49
56
|
});
|
|
50
57
|
output += `\n${bar}\n`;
|
|
51
58
|
// 3. Hints & Errors
|
|
52
|
-
output += `${
|
|
59
|
+
output += `${_theme.theme.muted} (Arrows: Adjust | Tab: Switch Unit | Enter: Submit)${_ansi.ANSI.RESET}`;
|
|
53
60
|
if (this.errorMsg) {
|
|
54
|
-
output += `\n${
|
|
61
|
+
output += `\n${_theme.theme.error}>> ${this.errorMsg}${_ansi.ANSI.RESET}`;
|
|
55
62
|
}
|
|
56
63
|
this.renderFrame(output);
|
|
57
64
|
}
|
|
@@ -89,7 +96,7 @@ class BytePrompt extends base_1.Prompt {
|
|
|
89
96
|
}
|
|
90
97
|
return;
|
|
91
98
|
}
|
|
92
|
-
if (char === '\x1b[Z' || this.isLeft(char)) {
|
|
99
|
+
if (char === '\x1b[Z' || this.isLeft(char)) {
|
|
93
100
|
if (this.unitIndex > 0) {
|
|
94
101
|
this.unitIndex--;
|
|
95
102
|
this.render(false);
|
|
@@ -101,14 +108,11 @@ class BytePrompt extends base_1.Prompt {
|
|
|
101
108
|
let val = parseFloat(this.buffer) || 0;
|
|
102
109
|
// Adaptive step: 1 if integer, 0.1 if float
|
|
103
110
|
const step = this.buffer.includes('.') ? 0.1 : 1;
|
|
104
|
-
if (this.isUp(char))
|
|
105
|
-
|
|
106
|
-
if (this.isDown(char))
|
|
107
|
-
val -= step;
|
|
111
|
+
if (this.isUp(char)) val += step;
|
|
112
|
+
if (this.isDown(char)) val -= step;
|
|
108
113
|
// Fix Float Precision
|
|
109
114
|
val = Math.round(val * 100) / 100;
|
|
110
|
-
if (val < 0)
|
|
111
|
-
val = 0; // No negative bytes usually
|
|
115
|
+
if (val < 0) val = 0; // No negative bytes usually
|
|
112
116
|
this.buffer = val.toString();
|
|
113
117
|
this.render(false);
|
|
114
118
|
return;
|
|
@@ -124,16 +128,14 @@ class BytePrompt extends base_1.Prompt {
|
|
|
124
128
|
// Digits & Dot
|
|
125
129
|
if (/^[0-9.]$/.test(char)) {
|
|
126
130
|
// Prevent multiple dots
|
|
127
|
-
if (char === '.' && this.buffer.includes('.'))
|
|
128
|
-
return;
|
|
131
|
+
if (char === '.' && this.buffer.includes('.')) return;
|
|
129
132
|
this.buffer += char;
|
|
130
133
|
this.render(false);
|
|
131
134
|
}
|
|
132
135
|
}
|
|
133
136
|
// Helper for error messages
|
|
134
137
|
formatBytes(bytes) {
|
|
135
|
-
if (bytes === 0)
|
|
136
|
-
return '0 B';
|
|
138
|
+
if (bytes === 0) return '0 B';
|
|
137
139
|
const i = Math.floor(Math.log(bytes) / Math.log(1024));
|
|
138
140
|
return parseFloat((bytes / Math.pow(1024, i)).toFixed(2)) + ' ' + UNITS[i];
|
|
139
141
|
}
|
|
@@ -145,8 +147,7 @@ class BytePrompt extends base_1.Prompt {
|
|
|
145
147
|
val += 1;
|
|
146
148
|
this.buffer = val.toString();
|
|
147
149
|
this.render(false);
|
|
148
|
-
}
|
|
149
|
-
else if (event.scroll === 'down') {
|
|
150
|
+
} else if (event.scroll === 'down') {
|
|
150
151
|
// Scroll down -> Decrease Value
|
|
151
152
|
let val = parseFloat(this.buffer) || 0;
|
|
152
153
|
val = Math.max(0, val - 1);
|
|
@@ -155,5 +156,21 @@ class BytePrompt extends base_1.Prompt {
|
|
|
155
156
|
}
|
|
156
157
|
}
|
|
157
158
|
}
|
|
158
|
-
|
|
159
|
-
|
|
159
|
+
constructor(options){
|
|
160
|
+
super(options), _define_property(this, "inputValue", 0), _define_property(this, "buffer", ''), _define_property(this, "unitIndex", 0), _define_property(this, "errorMsg", '');
|
|
161
|
+
// Parse initial bytes to best unit
|
|
162
|
+
// e.g. 1073741824 -> 1.00 GB
|
|
163
|
+
let val = options.initial || 0;
|
|
164
|
+
let idx = 0;
|
|
165
|
+
while(val >= 1024 && idx < UNITS.length - 1){
|
|
166
|
+
val /= 1024;
|
|
167
|
+
idx++;
|
|
168
|
+
}
|
|
169
|
+
// Round to 2 decimals for display if float
|
|
170
|
+
this.inputValue = Math.round(val * 100) / 100;
|
|
171
|
+
this.buffer = this.inputValue.toString();
|
|
172
|
+
this.unitIndex = idx;
|
|
173
|
+
}
|
|
174
|
+
};
|
|
175
|
+
|
|
176
|
+
//# sourceMappingURL=byte.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/prompts/byte.ts"],"sourcesContent":["import { ANSI } from '../ansi';\nimport { Prompt } from '../base';\nimport { theme } from '../theme';\nimport { symbols } from '../symbols';\nimport { ByteOptions, MouseEvent } from '../types';\n\nconst UNITS = ['B', 'KB', 'MB', 'GB', 'TB', 'PB'];\n\nexport class BytePrompt extends Prompt<number, ByteOptions> {\n private inputValue: number = 0;\n private buffer: string = '';\n private unitIndex: number = 0;\n private errorMsg: string = '';\n\n constructor(options: ByteOptions) {\n super(options);\n // Parse initial bytes to best unit\n // e.g. 1073741824 -> 1.00 GB\n let val = options.initial || 0;\n let idx = 0;\n while (val >= 1024 && idx < UNITS.length - 1) {\n val /= 1024;\n idx++;\n }\n\n // Round to 2 decimals for display if float\n this.inputValue = Math.round(val * 100) / 100;\n this.buffer = this.inputValue.toString();\n this.unitIndex = idx;\n }\n\n protected render(_firstRender: boolean): void {\n const unitStr = UNITS[this.unitIndex];\n\n // 1. Render Question & Input\n const icon = this.errorMsg ? `${theme.error}${symbols.cross}` : `${theme.success}?`;\n let output = `${icon} ${ANSI.BOLD}${theme.title}${this.options.message}${ANSI.RESET} `;\n\n // Value part\n output += `${theme.main}${ANSI.UNDERLINE}${this.buffer}${ANSI.RESET} ${ANSI.BOLD}${unitStr}${ANSI.RESET}\\n`;\n\n // 2. Render Unit Bar\n // (Unit: B > KB > [MB] > GB)\n let bar = ' ';\n UNITS.forEach((u, i) => {\n if (i === this.unitIndex) {\n bar += `${theme.main}${ANSI.REVERSE} ${u} ${ANSI.RESET}`;\n } else {\n bar += `${theme.muted} ${u} ${ANSI.RESET}`;\n }\n\n if (i < UNITS.length - 1) {\n bar += ` ${theme.muted}›${ANSI.RESET} `;\n }\n });\n output += `\\n${bar}\\n`;\n\n // 3. Hints & Errors\n output += `${theme.muted} (Arrows: Adjust | Tab: Switch Unit | Enter: Submit)${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): void {\n this.errorMsg = '';\n\n // Enter\n if (char === '\\r' || char === '\\n') {\n const finalVal = parseFloat(this.buffer);\n if (isNaN(finalVal)) {\n this.errorMsg = 'Invalid number';\n this.render(false);\n return;\n }\n\n // Calculate Bytes: value * 1024^index\n const bytes = finalVal * Math.pow(1024, this.unitIndex);\n\n // Min/Max Validation (in bytes)\n if (this.options.min !== undefined && bytes < this.options.min) {\n this.errorMsg = `Minimum value is ${this.formatBytes(this.options.min)}`;\n this.render(false);\n return;\n }\n if (this.options.max !== undefined && bytes > this.options.max) {\n this.errorMsg = `Maximum value is ${this.formatBytes(this.options.max)}`;\n this.render(false);\n return;\n }\n\n this.submit(Math.round(bytes)); // Return integer bytes? Or float? Usually bytes are int.\n return;\n }\n\n // Tab / Shift+Tab -> Switch Unit\n if (char === '\\t' || this.isRight(char)) {\n if (this.unitIndex < UNITS.length - 1) {\n this.unitIndex++;\n this.render(false);\n }\n return;\n }\n if (char === '\\x1b[Z' || this.isLeft(char)) { // Shift+Tab or Left\n if (this.unitIndex > 0) {\n this.unitIndex--;\n this.render(false);\n }\n return;\n }\n\n // Arrows -> Adjust Value\n if (this.isUp(char) || this.isDown(char)) {\n let val = parseFloat(this.buffer) || 0;\n // Adaptive step: 1 if integer, 0.1 if float\n const step = this.buffer.includes('.') ? 0.1 : 1;\n\n if (this.isUp(char)) val += step;\n if (this.isDown(char)) val -= step;\n\n // Fix Float Precision\n val = Math.round(val * 100) / 100;\n if (val < 0) val = 0; // No negative bytes usually\n\n this.buffer = val.toString();\n this.render(false);\n return;\n }\n\n // Typing / Backspace\n if (char === '\\u0008' || char === '\\x7f') {\n if (this.buffer.length > 0) {\n this.buffer = this.buffer.slice(0, -1);\n this.render(false);\n }\n return;\n }\n\n // Digits & Dot\n if (/^[0-9.]$/.test(char)) {\n // Prevent multiple dots\n if (char === '.' && this.buffer.includes('.')) return;\n\n this.buffer += char;\n this.render(false);\n }\n }\n\n // Helper for error messages\n private formatBytes(bytes: number): string {\n if (bytes === 0) return '0 B';\n const i = Math.floor(Math.log(bytes) / Math.log(1024));\n return parseFloat((bytes / Math.pow(1024, i)).toFixed(2)) + ' ' + UNITS[i];\n }\n\n protected handleMouse(event: MouseEvent) {\n if (event.action === 'scroll') {\n if (event.scroll === 'up') {\n // Scroll up -> Increase Value\n let val = parseFloat(this.buffer) || 0;\n val += 1;\n this.buffer = val.toString();\n this.render(false);\n } else if (event.scroll === 'down') {\n // Scroll down -> Decrease Value\n let val = parseFloat(this.buffer) || 0;\n val = Math.max(0, val - 1);\n this.buffer = val.toString();\n this.render(false);\n }\n }\n }\n}"],"names":["BytePrompt","UNITS","Prompt","render","_firstRender","unitStr","unitIndex","icon","errorMsg","theme","error","symbols","cross","success","output","ANSI","BOLD","title","options","message","RESET","main","UNDERLINE","buffer","bar","forEach","u","i","REVERSE","muted","length","renderFrame","handleInput","char","finalVal","parseFloat","isNaN","bytes","Math","pow","min","undefined","formatBytes","max","submit","round","isRight","isLeft","isUp","isDown","val","step","includes","toString","slice","test","floor","log","toFixed","handleMouse","event","action","scroll","inputValue","initial","idx"],"mappings":"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"}
|