mepcli 2.0.0-beta.2 → 2.0.0-beta.3
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/dist/ansi.d.ts +36 -0
- package/dist/ansi.js +1 -0
- package/dist/base.d.ts +60 -0
- package/dist/base.js +1 -0
- package/dist/{src/core.js → core.d.ts} +175 -345
- package/dist/core.js +1 -0
- package/dist/data/countries.d.ts +2 -0
- package/dist/data/countries.js +1 -0
- package/dist/data/licenses.d.ts +2 -0
- package/dist/data/licenses.js +1 -0
- package/dist/highlight.d.ts +7 -0
- package/dist/highlight.js +1 -0
- package/dist/index.d.ts +48 -0
- package/dist/index.js +1 -0
- package/dist/input.d.ts +14 -0
- package/dist/input.js +1 -0
- package/dist/pipeline.d.ts +90 -0
- package/dist/pipeline.js +1 -0
- package/dist/prompts/autocomplete.d.ts +22 -0
- package/dist/prompts/autocomplete.js +1 -0
- package/dist/prompts/box.d.ts +21 -0
- package/dist/prompts/box.js +4 -0
- package/dist/prompts/breadcrumb-search.d.ts +14 -0
- package/dist/prompts/breadcrumb-search.js +2 -0
- package/dist/prompts/breadcrumb.d.ts +32 -0
- package/dist/prompts/breadcrumb.js +3 -0
- package/dist/prompts/byte.d.ts +13 -0
- package/dist/prompts/byte.js +5 -0
- package/dist/prompts/calculator.d.ts +17 -0
- package/dist/prompts/calculator.js +3 -0
- package/dist/prompts/calendar.d.ts +33 -0
- package/dist/prompts/calendar.js +3 -0
- package/dist/prompts/checkbox.d.ts +13 -0
- package/dist/prompts/checkbox.js +2 -0
- package/dist/prompts/code.d.ts +19 -0
- package/dist/prompts/code.js +4 -0
- package/dist/prompts/color.d.ts +14 -0
- package/dist/prompts/color.js +10 -0
- package/dist/prompts/confirm.d.ts +8 -0
- package/dist/prompts/confirm.js +1 -0
- package/dist/prompts/connection-string.d.ts +18 -0
- package/dist/prompts/connection-string.js +1 -0
- package/dist/prompts/cron.d.ts +13 -0
- package/dist/prompts/cron.js +4 -0
- package/dist/prompts/curl-utils.d.ts +25 -0
- package/dist/prompts/curl-utils.js +1 -0
- package/dist/prompts/curl.d.ts +41 -0
- package/dist/prompts/curl.js +12 -0
- package/dist/prompts/data-inspector.d.ts +22 -0
- package/dist/prompts/data-inspector.js +5 -0
- package/dist/prompts/date.d.ts +12 -0
- package/dist/prompts/date.js +2 -0
- package/dist/prompts/dependency.d.ts +16 -0
- package/dist/prompts/dependency.js +3 -0
- package/dist/prompts/dial.d.ts +10 -0
- package/dist/prompts/dial.js +3 -0
- package/dist/prompts/diff.d.ts +10 -0
- package/dist/prompts/diff.js +10 -0
- package/dist/prompts/draw.d.ts +20 -0
- package/dist/prompts/draw.js +6 -0
- package/dist/prompts/editor.d.ts +14 -0
- package/dist/prompts/editor.js +2 -0
- package/dist/prompts/emoji.d.ts +18 -0
- package/dist/prompts/emoji.js +5 -0
- package/dist/prompts/exec.d.ts +17 -0
- package/dist/prompts/exec.js +1 -0
- package/dist/prompts/file.d.ts +21 -0
- package/dist/prompts/file.js +2 -0
- package/dist/prompts/form.d.ts +18 -0
- package/dist/prompts/form.js +1 -0
- package/dist/prompts/fuzzy-multi-column.d.ts +12 -0
- package/dist/prompts/fuzzy-multi-column.js +2 -0
- package/dist/prompts/fuzzy.d.ts +12 -0
- package/dist/prompts/fuzzy.js +2 -0
- package/dist/prompts/gauge.d.ts +21 -0
- package/dist/prompts/gauge.js +4 -0
- package/dist/prompts/grid.d.ts +14 -0
- package/dist/prompts/grid.js +2 -0
- package/dist/prompts/heatmap.d.ts +13 -0
- package/dist/prompts/heatmap.js +2 -0
- package/dist/prompts/ip.d.ts +11 -0
- package/dist/prompts/ip.js +3 -0
- package/dist/prompts/kanban.d.ts +17 -0
- package/dist/prompts/kanban.js +4 -0
- package/dist/prompts/keypress.d.ts +7 -0
- package/dist/prompts/keypress.js +1 -0
- package/dist/prompts/license.d.ts +9 -0
- package/dist/prompts/license.js +13 -0
- package/dist/prompts/list.d.ts +9 -0
- package/dist/prompts/list.js +1 -0
- package/dist/prompts/map.d.ts +17 -0
- package/dist/prompts/map.js +5 -0
- package/dist/prompts/match.d.ts +19 -0
- package/dist/prompts/match.js +7 -0
- package/dist/prompts/miller.d.ts +15 -0
- package/dist/prompts/miller.js +2 -0
- package/dist/prompts/multi-column-select.d.ts +10 -0
- package/dist/prompts/multi-column-select.js +2 -0
- package/dist/prompts/multi-range.d.ts +9 -0
- package/dist/prompts/multi-range.js +3 -0
- package/dist/prompts/multi-select.d.ts +15 -0
- package/dist/prompts/multi-select.js +4 -0
- package/dist/prompts/number.d.ts +11 -0
- package/dist/prompts/number.js +2 -0
- package/dist/prompts/otp.d.ts +10 -0
- package/dist/prompts/otp.js +2 -0
- package/dist/prompts/pattern.d.ts +22 -0
- package/dist/prompts/pattern.js +4 -0
- package/dist/prompts/phone.d.ts +41 -0
- package/dist/prompts/phone.js +3 -0
- package/dist/prompts/quiz-select.d.ts +10 -0
- package/dist/prompts/quiz-select.js +7 -0
- package/dist/prompts/quiz-text.d.ts +11 -0
- package/dist/prompts/quiz-text.js +8 -0
- package/dist/prompts/range.d.ts +9 -0
- package/dist/prompts/range.js +1 -0
- package/dist/prompts/rating.d.ts +8 -0
- package/dist/prompts/rating.js +1 -0
- package/dist/prompts/regex.d.ts +13 -0
- package/dist/prompts/regex.js +5 -0
- package/dist/prompts/region.d.ts +11 -0
- package/dist/prompts/region.js +5 -0
- package/dist/prompts/schedule.d.ts +20 -0
- package/dist/prompts/schedule.js +5 -0
- package/dist/prompts/scroll.d.ts +13 -0
- package/dist/prompts/scroll.js +1 -0
- package/dist/prompts/seat.d.ts +17 -0
- package/dist/prompts/seat.js +5 -0
- package/dist/prompts/select-range.d.ts +8 -0
- package/dist/prompts/select-range.js +3 -0
- package/dist/prompts/select.d.ts +15 -0
- package/dist/prompts/select.js +2 -0
- package/dist/prompts/semver.d.ts +6 -0
- package/dist/prompts/semver.js +1 -0
- package/dist/prompts/shortcut.d.ts +9 -0
- package/dist/prompts/shortcut.js +1 -0
- package/dist/prompts/slider.d.ts +8 -0
- package/dist/prompts/slider.js +1 -0
- package/dist/prompts/slot.d.ts +16 -0
- package/dist/prompts/slot.js +8 -0
- package/dist/prompts/snippet.d.ts +19 -0
- package/dist/prompts/snippet.js +4 -0
- package/dist/prompts/sort-grid.d.ts +16 -0
- package/dist/prompts/sort-grid.js +2 -0
- package/dist/prompts/sort.d.ts +14 -0
- package/dist/prompts/sort.js +2 -0
- package/dist/prompts/spam.d.ts +17 -0
- package/dist/prompts/spam.js +2 -0
- package/dist/prompts/spreadsheet.d.ts +21 -0
- package/dist/prompts/spreadsheet.js +7 -0
- package/dist/prompts/table.d.ts +14 -0
- package/dist/prompts/table.js +3 -0
- package/dist/prompts/text.d.ts +17 -0
- package/dist/prompts/text.js +2 -0
- package/dist/prompts/time.d.ts +12 -0
- package/dist/prompts/time.js +2 -0
- package/dist/prompts/toggle.d.ts +8 -0
- package/dist/prompts/toggle.js +1 -0
- package/dist/prompts/transfer.d.ts +18 -0
- package/dist/prompts/transfer.js +5 -0
- package/dist/prompts/tree-select.d.ts +31 -0
- package/dist/prompts/tree-select.js +3 -0
- package/dist/prompts/tree.d.ts +20 -0
- package/dist/prompts/tree.js +3 -0
- package/dist/prompts/wait.d.ts +18 -0
- package/dist/prompts/wait.js +1 -0
- package/dist/spinner.d.ts +33 -0
- package/dist/spinner.js +3 -0
- package/dist/symbols.d.ts +33 -0
- package/dist/symbols.js +1 -0
- package/dist/tasks.d.ts +57 -0
- package/dist/tasks.js +1 -0
- package/dist/theme.d.ts +2 -0
- package/dist/theme.js +1 -0
- package/dist/types.d.ts +503 -0
- package/dist/types.js +1 -0
- package/dist/utils.d.ts +81 -0
- package/dist/utils.js +1 -0
- package/package.json +8 -9
- package/dist/src/ansi.js +0 -50
- package/dist/src/ansi.js.map +0 -1
- package/dist/src/base.js +0 -258
- package/dist/src/base.js.map +0 -1
- package/dist/src/core.js.map +0 -1
- package/dist/src/data/countries.js +0 -569
- package/dist/src/data/countries.js.map +0 -1
- package/dist/src/data/licenses.js +0 -480
- package/dist/src/data/licenses.js.map +0 -1
- package/dist/src/highlight.js +0 -185
- package/dist/src/highlight.js.map +0 -1
- package/dist/src/index.js +0 -66
- package/dist/src/index.js.map +0 -1
- package/dist/src/input.js +0 -158
- package/dist/src/input.js.map +0 -1
- package/dist/src/pipeline.js +0 -273
- package/dist/src/pipeline.js.map +0 -1
- package/dist/src/prompts/autocomplete.js +0 -171
- package/dist/src/prompts/autocomplete.js.map +0 -1
- package/dist/src/prompts/box.js +0 -225
- package/dist/src/prompts/box.js.map +0 -1
- package/dist/src/prompts/breadcrumb-search.js +0 -260
- package/dist/src/prompts/breadcrumb-search.js.map +0 -1
- package/dist/src/prompts/breadcrumb.js +0 -307
- package/dist/src/prompts/breadcrumb.js.map +0 -1
- package/dist/src/prompts/byte.js +0 -176
- package/dist/src/prompts/byte.js.map +0 -1
- package/dist/src/prompts/calculator.js +0 -243
- package/dist/src/prompts/calculator.js.map +0 -1
- package/dist/src/prompts/calendar.js +0 -430
- package/dist/src/prompts/calendar.js.map +0 -1
- package/dist/src/prompts/checkbox.js +0 -159
- package/dist/src/prompts/checkbox.js.map +0 -1
- package/dist/src/prompts/code.js +0 -271
- package/dist/src/prompts/code.js.map +0 -1
- package/dist/src/prompts/color.js +0 -165
- package/dist/src/prompts/color.js.map +0 -1
- package/dist/src/prompts/confirm.js +0 -55
- package/dist/src/prompts/confirm.js.map +0 -1
- package/dist/src/prompts/connection-string.js +0 -120
- package/dist/src/prompts/connection-string.js.map +0 -1
- package/dist/src/prompts/cron.js +0 -207
- package/dist/src/prompts/cron.js.map +0 -1
- package/dist/src/prompts/curl-utils.js +0 -71
- package/dist/src/prompts/curl-utils.js.map +0 -1
- package/dist/src/prompts/curl.js +0 -431
- package/dist/src/prompts/curl.js.map +0 -1
- package/dist/src/prompts/data-inspector.js +0 -261
- package/dist/src/prompts/data-inspector.js.map +0 -1
- package/dist/src/prompts/date.js +0 -185
- package/dist/src/prompts/date.js.map +0 -1
- package/dist/src/prompts/dependency.js +0 -283
- package/dist/src/prompts/dependency.js.map +0 -1
- package/dist/src/prompts/dial.js +0 -124
- package/dist/src/prompts/dial.js.map +0 -1
- package/dist/src/prompts/diff.js +0 -118
- package/dist/src/prompts/diff.js.map +0 -1
- package/dist/src/prompts/draw.js +0 -191
- package/dist/src/prompts/draw.js.map +0 -1
- package/dist/src/prompts/editor.js +0 -234
- package/dist/src/prompts/editor.js.map +0 -1
- package/dist/src/prompts/emoji.js +0 -226
- package/dist/src/prompts/emoji.js.map +0 -1
- package/dist/src/prompts/exec.js +0 -151
- package/dist/src/prompts/exec.js.map +0 -1
- package/dist/src/prompts/file.js +0 -217
- package/dist/src/prompts/file.js.map +0 -1
- package/dist/src/prompts/form.js +0 -241
- package/dist/src/prompts/form.js.map +0 -1
- package/dist/src/prompts/fuzzy-multi-column.js +0 -161
- package/dist/src/prompts/fuzzy-multi-column.js.map +0 -1
- package/dist/src/prompts/fuzzy.js +0 -147
- package/dist/src/prompts/fuzzy.js.map +0 -1
- package/dist/src/prompts/gauge.js +0 -137
- package/dist/src/prompts/gauge.js.map +0 -1
- package/dist/src/prompts/grid.js +0 -191
- package/dist/src/prompts/grid.js.map +0 -1
- package/dist/src/prompts/heatmap.js +0 -147
- package/dist/src/prompts/heatmap.js.map +0 -1
- package/dist/src/prompts/ip.js +0 -138
- package/dist/src/prompts/ip.js.map +0 -1
- package/dist/src/prompts/kanban.js +0 -233
- package/dist/src/prompts/kanban.js.map +0 -1
- package/dist/src/prompts/keypress.js +0 -54
- package/dist/src/prompts/keypress.js.map +0 -1
- package/dist/src/prompts/license.js +0 -144
- package/dist/src/prompts/license.js.map +0 -1
- package/dist/src/prompts/list.js +0 -124
- package/dist/src/prompts/list.js.map +0 -1
- package/dist/src/prompts/map.js +0 -262
- package/dist/src/prompts/map.js.map +0 -1
- package/dist/src/prompts/match.js +0 -271
- package/dist/src/prompts/match.js.map +0 -1
- package/dist/src/prompts/miller.js +0 -228
- package/dist/src/prompts/miller.js.map +0 -1
- package/dist/src/prompts/multi-column-select.js +0 -176
- package/dist/src/prompts/multi-column-select.js.map +0 -1
- package/dist/src/prompts/multi-range.js +0 -189
- package/dist/src/prompts/multi-range.js.map +0 -1
- package/dist/src/prompts/multi-select.js +0 -183
- package/dist/src/prompts/multi-select.js.map +0 -1
- package/dist/src/prompts/number.js +0 -166
- package/dist/src/prompts/number.js.map +0 -1
- package/dist/src/prompts/otp.js +0 -107
- package/dist/src/prompts/otp.js.map +0 -1
- package/dist/src/prompts/pattern.js +0 -252
- package/dist/src/prompts/pattern.js.map +0 -1
- package/dist/src/prompts/phone.js +0 -398
- package/dist/src/prompts/phone.js.map +0 -1
- package/dist/src/prompts/quiz-select.js +0 -114
- package/dist/src/prompts/quiz-select.js.map +0 -1
- package/dist/src/prompts/quiz-text.js +0 -98
- package/dist/src/prompts/quiz-text.js.map +0 -1
- package/dist/src/prompts/range.js +0 -164
- package/dist/src/prompts/range.js.map +0 -1
- package/dist/src/prompts/rating.js +0 -83
- package/dist/src/prompts/rating.js.map +0 -1
- package/dist/src/prompts/regex.js +0 -145
- package/dist/src/prompts/regex.js.map +0 -1
- package/dist/src/prompts/region.js +0 -170
- package/dist/src/prompts/region.js.map +0 -1
- package/dist/src/prompts/schedule.js +0 -270
- package/dist/src/prompts/schedule.js.map +0 -1
- package/dist/src/prompts/scroll.js +0 -155
- package/dist/src/prompts/scroll.js.map +0 -1
- package/dist/src/prompts/seat.js +0 -164
- package/dist/src/prompts/seat.js.map +0 -1
- package/dist/src/prompts/select-range.js +0 -148
- package/dist/src/prompts/select-range.js.map +0 -1
- package/dist/src/prompts/select.js +0 -163
- package/dist/src/prompts/select.js.map +0 -1
- package/dist/src/prompts/semver.js +0 -43
- package/dist/src/prompts/semver.js.map +0 -1
- package/dist/src/prompts/shortcut.js +0 -133
- package/dist/src/prompts/shortcut.js.map +0 -1
- package/dist/src/prompts/slider.js +0 -69
- package/dist/src/prompts/slider.js.map +0 -1
- package/dist/src/prompts/slot.js +0 -117
- package/dist/src/prompts/slot.js.map +0 -1
- package/dist/src/prompts/snippet.js +0 -228
- package/dist/src/prompts/snippet.js.map +0 -1
- package/dist/src/prompts/sort-grid.js +0 -151
- package/dist/src/prompts/sort-grid.js.map +0 -1
- package/dist/src/prompts/sort.js +0 -166
- package/dist/src/prompts/sort.js.map +0 -1
- package/dist/src/prompts/spam.js +0 -80
- package/dist/src/prompts/spam.js.map +0 -1
- package/dist/src/prompts/spreadsheet.js +0 -240
- package/dist/src/prompts/spreadsheet.js.map +0 -1
- package/dist/src/prompts/table.js +0 -120
- package/dist/src/prompts/table.js.map +0 -1
- package/dist/src/prompts/text.js +0 -317
- package/dist/src/prompts/text.js.map +0 -1
- package/dist/src/prompts/time.js +0 -211
- package/dist/src/prompts/time.js.map +0 -1
- package/dist/src/prompts/toggle.js +0 -53
- package/dist/src/prompts/toggle.js.map +0 -1
- package/dist/src/prompts/transfer.js +0 -207
- package/dist/src/prompts/transfer.js.map +0 -1
- package/dist/src/prompts/tree-select.js +0 -270
- package/dist/src/prompts/tree-select.js.map +0 -1
- package/dist/src/prompts/tree.js +0 -233
- package/dist/src/prompts/tree.js.map +0 -1
- package/dist/src/prompts/wait.js +0 -79
- package/dist/src/prompts/wait.js.map +0 -1
- package/dist/src/spinner.js +0 -105
- package/dist/src/spinner.js.map +0 -1
- package/dist/src/symbols.js +0 -66
- package/dist/src/symbols.js.map +0 -1
- package/dist/src/tasks.js +0 -231
- package/dist/src/tasks.js.map +0 -1
- package/dist/src/theme.js +0 -29
- package/dist/src/theme.js.map +0 -1
- package/dist/src/types.js +0 -8
- package/dist/src/types.js.map +0 -1
- package/dist/src/utils.js +0 -480
- package/dist/src/utils.js.map +0 -1
package/dist/src/utils.js
DELETED
|
@@ -1,480 +0,0 @@
|
|
|
1
|
-
// src/utils.ts
|
|
2
|
-
/**
|
|
3
|
-
* Detects terminal capabilities.
|
|
4
|
-
*/ "use strict";
|
|
5
|
-
Object.defineProperty(exports, "__esModule", {
|
|
6
|
-
value: true
|
|
7
|
-
});
|
|
8
|
-
function _export(target, all) {
|
|
9
|
-
for(var name in all)Object.defineProperty(target, name, {
|
|
10
|
-
enumerable: true,
|
|
11
|
-
get: Object.getOwnPropertyDescriptor(all, name).get
|
|
12
|
-
});
|
|
13
|
-
}
|
|
14
|
-
_export(exports, {
|
|
15
|
-
get Graph () {
|
|
16
|
-
return Graph;
|
|
17
|
-
},
|
|
18
|
-
get Layout () {
|
|
19
|
-
return Layout;
|
|
20
|
-
},
|
|
21
|
-
get detectCapabilities () {
|
|
22
|
-
return detectCapabilities;
|
|
23
|
-
},
|
|
24
|
-
get fuzzyMatch () {
|
|
25
|
-
return fuzzyMatch;
|
|
26
|
-
},
|
|
27
|
-
get generateProgressBar () {
|
|
28
|
-
return generateProgressBar;
|
|
29
|
-
},
|
|
30
|
-
get safeSplit () {
|
|
31
|
-
return safeSplit;
|
|
32
|
-
},
|
|
33
|
-
get stringWidth () {
|
|
34
|
-
return stringWidth;
|
|
35
|
-
},
|
|
36
|
-
get stripAnsi () {
|
|
37
|
-
return stripAnsi;
|
|
38
|
-
}
|
|
39
|
-
});
|
|
40
|
-
function detectCapabilities() {
|
|
41
|
-
const env = process.env;
|
|
42
|
-
// Check for CI
|
|
43
|
-
const isCI = !!env.CI;
|
|
44
|
-
// Check for True Color support
|
|
45
|
-
const hasTrueColor = env.COLORTERM === 'truecolor' || !!env.WT_SESSION;
|
|
46
|
-
// Check if it is a TTY
|
|
47
|
-
const isTTY = process.stdout.isTTY;
|
|
48
|
-
const isWindows = process.platform === 'win32';
|
|
49
|
-
// Better Unicode detection logic
|
|
50
|
-
const isUnicodeSupported = ()=>{
|
|
51
|
-
// 1. Windows: Check specific environmental variables
|
|
52
|
-
if (isWindows) {
|
|
53
|
-
// Windows Terminal
|
|
54
|
-
if (env.WT_SESSION) return true;
|
|
55
|
-
// VSCode terminal
|
|
56
|
-
if (env.TERM_PROGRAM === 'vscode') return true;
|
|
57
|
-
// Modern terminals setting TERM (e.g. Alacritty, Git Bash, Cygwin)
|
|
58
|
-
if (env.TERM === 'xterm-256color' || env.TERM === 'alacritty') return true;
|
|
59
|
-
// ConEmu / Cmder
|
|
60
|
-
if (env.ConEmuTask) return true;
|
|
61
|
-
// CI on Windows typically supports Unicode.
|
|
62
|
-
if (isCI) return true;
|
|
63
|
-
// Default cmd.exe / old powershell => False (ASCII)
|
|
64
|
-
return false;
|
|
65
|
-
}
|
|
66
|
-
// 2. Non-Windows (Linux/macOS)
|
|
67
|
-
if (env.TERM_PROGRAM === 'Apple_Terminal') return true;
|
|
68
|
-
// Check if the LANG or LC_ALL variable contains UTF-8.
|
|
69
|
-
const lang = env.LANG || '';
|
|
70
|
-
const lcAll = env.LC_ALL || '';
|
|
71
|
-
return lang && lang.toUpperCase().endsWith('UTF-8') || lcAll && lcAll.toUpperCase().endsWith('UTF-8');
|
|
72
|
-
};
|
|
73
|
-
return {
|
|
74
|
-
isCI,
|
|
75
|
-
hasTrueColor,
|
|
76
|
-
// Enable Unicode only if it's TTY and environment supports it.
|
|
77
|
-
hasUnicode: isTTY && isUnicodeSupported(),
|
|
78
|
-
// Check if mouse should be enabled (TTY and not CI, or explicit override)
|
|
79
|
-
// SGR is widely supported in modern terminals
|
|
80
|
-
hasMouse: isTTY && !isCI
|
|
81
|
-
};
|
|
82
|
-
}
|
|
83
|
-
function stripAnsi(str) {
|
|
84
|
-
return str.replace(/\x1b\[[0-9;]*m/g, '');
|
|
85
|
-
}
|
|
86
|
-
/**
|
|
87
|
-
* Sorted array of Unicode ranges that are typically full-width (2 columns).
|
|
88
|
-
* Includes CJK, Emoji, Fullwidth forms, etc.
|
|
89
|
-
* Format: [start, end] inclusive.
|
|
90
|
-
*/ const WIDE_RANGES = [
|
|
91
|
-
[
|
|
92
|
-
0x1100,
|
|
93
|
-
0x11FF
|
|
94
|
-
],
|
|
95
|
-
[
|
|
96
|
-
0x2E80,
|
|
97
|
-
0x2EFF
|
|
98
|
-
],
|
|
99
|
-
[
|
|
100
|
-
0x2F00,
|
|
101
|
-
0x2FDF
|
|
102
|
-
],
|
|
103
|
-
[
|
|
104
|
-
0x3000,
|
|
105
|
-
0x303F
|
|
106
|
-
],
|
|
107
|
-
[
|
|
108
|
-
0x3040,
|
|
109
|
-
0x309F
|
|
110
|
-
],
|
|
111
|
-
[
|
|
112
|
-
0x30A0,
|
|
113
|
-
0x30FF
|
|
114
|
-
],
|
|
115
|
-
[
|
|
116
|
-
0x3100,
|
|
117
|
-
0x312F
|
|
118
|
-
],
|
|
119
|
-
[
|
|
120
|
-
0x3130,
|
|
121
|
-
0x318F
|
|
122
|
-
],
|
|
123
|
-
[
|
|
124
|
-
0x3200,
|
|
125
|
-
0x32FF
|
|
126
|
-
],
|
|
127
|
-
[
|
|
128
|
-
0x3300,
|
|
129
|
-
0x33FF
|
|
130
|
-
],
|
|
131
|
-
[
|
|
132
|
-
0x3400,
|
|
133
|
-
0x4DBF
|
|
134
|
-
],
|
|
135
|
-
[
|
|
136
|
-
0x4E00,
|
|
137
|
-
0x9FFF
|
|
138
|
-
],
|
|
139
|
-
[
|
|
140
|
-
0xA960,
|
|
141
|
-
0xA97F
|
|
142
|
-
],
|
|
143
|
-
[
|
|
144
|
-
0xAC00,
|
|
145
|
-
0xD7AF
|
|
146
|
-
],
|
|
147
|
-
[
|
|
148
|
-
0xD7B0,
|
|
149
|
-
0xD7FF
|
|
150
|
-
],
|
|
151
|
-
[
|
|
152
|
-
0xF900,
|
|
153
|
-
0xFAFF
|
|
154
|
-
],
|
|
155
|
-
[
|
|
156
|
-
0xFE10,
|
|
157
|
-
0xFE1F
|
|
158
|
-
],
|
|
159
|
-
[
|
|
160
|
-
0xFE30,
|
|
161
|
-
0xFE4F
|
|
162
|
-
],
|
|
163
|
-
[
|
|
164
|
-
0xFE50,
|
|
165
|
-
0xFE6F
|
|
166
|
-
],
|
|
167
|
-
[
|
|
168
|
-
0xFF01,
|
|
169
|
-
0xFF60
|
|
170
|
-
],
|
|
171
|
-
[
|
|
172
|
-
0xFFE0,
|
|
173
|
-
0xFFE6
|
|
174
|
-
],
|
|
175
|
-
[
|
|
176
|
-
0x1F300,
|
|
177
|
-
0x1F6FF
|
|
178
|
-
],
|
|
179
|
-
[
|
|
180
|
-
0x1F900,
|
|
181
|
-
0x1F9FF
|
|
182
|
-
]
|
|
183
|
-
];
|
|
184
|
-
/**
|
|
185
|
-
* Binary search to check if a code point is in the wide ranges.
|
|
186
|
-
*/ function isWideCodePoint(cp) {
|
|
187
|
-
let low = 0;
|
|
188
|
-
let high = WIDE_RANGES.length - 1;
|
|
189
|
-
while(low <= high){
|
|
190
|
-
const mid = Math.floor((low + high) / 2);
|
|
191
|
-
const [start, end] = WIDE_RANGES[mid];
|
|
192
|
-
if (cp >= start && cp <= end) {
|
|
193
|
-
return true;
|
|
194
|
-
} else if (cp < start) {
|
|
195
|
-
high = mid - 1;
|
|
196
|
-
} else {
|
|
197
|
-
low = mid + 1;
|
|
198
|
-
}
|
|
199
|
-
}
|
|
200
|
-
return false;
|
|
201
|
-
}
|
|
202
|
-
function stringWidth(str) {
|
|
203
|
-
let width = 0;
|
|
204
|
-
let inAnsi = false;
|
|
205
|
-
for(let i = 0; i < str.length; i++){
|
|
206
|
-
const code = str.charCodeAt(i);
|
|
207
|
-
// Simple ANSI parser state check
|
|
208
|
-
if (str[i] === '\x1b') {
|
|
209
|
-
inAnsi = true;
|
|
210
|
-
continue;
|
|
211
|
-
}
|
|
212
|
-
if (inAnsi) {
|
|
213
|
-
if (str[i] === '[') {
|
|
214
|
-
continue;
|
|
215
|
-
}
|
|
216
|
-
if (str[i] >= '@' && str[i] <= '~') {
|
|
217
|
-
inAnsi = false;
|
|
218
|
-
}
|
|
219
|
-
continue;
|
|
220
|
-
}
|
|
221
|
-
// Handle surrogate pairs for high code points (Emoji)
|
|
222
|
-
let cp = code;
|
|
223
|
-
if (code >= 0xD800 && code <= 0xDBFF && i + 1 < str.length) {
|
|
224
|
-
const next = str.charCodeAt(i + 1);
|
|
225
|
-
if (next >= 0xDC00 && next <= 0xDFFF) {
|
|
226
|
-
// Calculate code point from surrogate pair
|
|
227
|
-
cp = (code - 0xD800) * 0x400 + (next - 0xDC00) + 0x10000;
|
|
228
|
-
i++; // Skip next char
|
|
229
|
-
}
|
|
230
|
-
}
|
|
231
|
-
width += isWideCodePoint(cp) ? 2 : 1;
|
|
232
|
-
}
|
|
233
|
-
return width;
|
|
234
|
-
}
|
|
235
|
-
function safeSplit(str) {
|
|
236
|
-
// @ts-ignore - Intl.Segmenter is available in Node 16+ but TS might complain depending on lib settings
|
|
237
|
-
const segmenter = new Intl.Segmenter(undefined, {
|
|
238
|
-
granularity: 'grapheme'
|
|
239
|
-
});
|
|
240
|
-
const segments = segmenter.segment(str);
|
|
241
|
-
const result = [];
|
|
242
|
-
for (const segment of segments){
|
|
243
|
-
result.push(segment.segment);
|
|
244
|
-
}
|
|
245
|
-
return result;
|
|
246
|
-
}
|
|
247
|
-
function fuzzyMatch(query, target) {
|
|
248
|
-
if (!query) return {
|
|
249
|
-
score: 0,
|
|
250
|
-
indices: []
|
|
251
|
-
};
|
|
252
|
-
const queryLower = query.toLowerCase();
|
|
253
|
-
const targetLower = target.toLowerCase();
|
|
254
|
-
let queryIdx = 0;
|
|
255
|
-
let targetIdx = 0;
|
|
256
|
-
const indices = [];
|
|
257
|
-
let score = 0;
|
|
258
|
-
let consecutive = 0;
|
|
259
|
-
// Track previous match index for consecutive check
|
|
260
|
-
let lastMatchIdx = -1;
|
|
261
|
-
// Simple greedy subsequence match
|
|
262
|
-
while(queryIdx < queryLower.length && targetIdx < targetLower.length){
|
|
263
|
-
const qChar = queryLower[queryIdx];
|
|
264
|
-
const tChar = targetLower[targetIdx];
|
|
265
|
-
if (qChar === tChar) {
|
|
266
|
-
indices.push(targetIdx);
|
|
267
|
-
let charScore = 1;
|
|
268
|
-
// Bonus: Consecutive match
|
|
269
|
-
if (lastMatchIdx !== -1 && targetIdx === lastMatchIdx + 1) {
|
|
270
|
-
consecutive++;
|
|
271
|
-
charScore += consecutive * 2; // Increasing bonus for longer runs
|
|
272
|
-
} else {
|
|
273
|
-
consecutive = 0;
|
|
274
|
-
}
|
|
275
|
-
// Bonus: Match at start of string
|
|
276
|
-
if (targetIdx === 0) {
|
|
277
|
-
charScore += 5;
|
|
278
|
-
} else if (targetIdx > 0) {
|
|
279
|
-
const prevChar = target.charAt(targetIdx - 1);
|
|
280
|
-
if (/[\s_\-.]/.test(prevChar) || prevChar === '/') {
|
|
281
|
-
charScore += 4;
|
|
282
|
-
} else if (prevChar !== prevChar.toUpperCase() && target.charAt(targetIdx) === target.charAt(targetIdx).toUpperCase()) {
|
|
283
|
-
// CamelCase hump
|
|
284
|
-
charScore += 3;
|
|
285
|
-
}
|
|
286
|
-
}
|
|
287
|
-
score += charScore;
|
|
288
|
-
lastMatchIdx = targetIdx;
|
|
289
|
-
queryIdx++;
|
|
290
|
-
}
|
|
291
|
-
targetIdx++;
|
|
292
|
-
}
|
|
293
|
-
// Must match all characters in query
|
|
294
|
-
if (queryIdx < queryLower.length) {
|
|
295
|
-
return null;
|
|
296
|
-
}
|
|
297
|
-
// Penalty for total length (prefer shorter strings)
|
|
298
|
-
score -= target.length * 0.1;
|
|
299
|
-
// Penalty for distance between first and last match (compactness)
|
|
300
|
-
if (indices.length > 1) {
|
|
301
|
-
const spread = indices[indices.length - 1] - indices[0];
|
|
302
|
-
score -= spread * 0.5;
|
|
303
|
-
}
|
|
304
|
-
return {
|
|
305
|
-
score,
|
|
306
|
-
indices
|
|
307
|
-
};
|
|
308
|
-
}
|
|
309
|
-
const Layout = {
|
|
310
|
-
/**
|
|
311
|
-
* Truncates a string to a specific visual width, respecting ANSI codes.
|
|
312
|
-
*/ truncate (str, width) {
|
|
313
|
-
const visualWidth = stringWidth(str);
|
|
314
|
-
if (visualWidth <= width) {
|
|
315
|
-
return str;
|
|
316
|
-
}
|
|
317
|
-
let currentWidth = 0;
|
|
318
|
-
let cutIndex = 0;
|
|
319
|
-
let inAnsi = false;
|
|
320
|
-
for(let i = 0; i < str.length; i++){
|
|
321
|
-
if (str[i] === '\x1b') inAnsi = true;
|
|
322
|
-
if (!inAnsi) {
|
|
323
|
-
const code = str.charCodeAt(i);
|
|
324
|
-
// Handle surrogate pair
|
|
325
|
-
if (code >= 0xD800 && code <= 0xDBFF && i + 1 < str.length) {
|
|
326
|
-
const next = str.charCodeAt(i + 1);
|
|
327
|
-
if (next >= 0xDC00 && next <= 0xDFFF) {
|
|
328
|
-
const cp = (code - 0xD800) * 0x400 + (next - 0xDC00) + 0x10000;
|
|
329
|
-
const w = isWideCodePoint(cp) ? 2 : 1;
|
|
330
|
-
if (currentWidth + w > width) break;
|
|
331
|
-
currentWidth += w;
|
|
332
|
-
cutIndex = i + 2;
|
|
333
|
-
i++; // Skip next
|
|
334
|
-
continue;
|
|
335
|
-
}
|
|
336
|
-
}
|
|
337
|
-
const w = isWideCodePoint(code) ? 2 : 1;
|
|
338
|
-
if (currentWidth + w > width) break;
|
|
339
|
-
currentWidth += w;
|
|
340
|
-
} else {
|
|
341
|
-
if (str[i] === 'm' || str[i] >= 'A' && str[i] <= 'Z') inAnsi = false;
|
|
342
|
-
}
|
|
343
|
-
cutIndex = i + 1;
|
|
344
|
-
}
|
|
345
|
-
return str.substring(0, cutIndex) + '\x1b[0m';
|
|
346
|
-
},
|
|
347
|
-
/**
|
|
348
|
-
* Pads a string to a specific visual length.
|
|
349
|
-
* Respects ANSI codes (does not count them towards length).
|
|
350
|
-
*/ pad (text, length, align = 'left') {
|
|
351
|
-
const visualLen = stringWidth(text);
|
|
352
|
-
if (visualLen >= length) return text;
|
|
353
|
-
const padLen = Math.max(0, length - visualLen);
|
|
354
|
-
if (align === 'left') {
|
|
355
|
-
return text + ' '.repeat(padLen);
|
|
356
|
-
} else if (align === 'right') {
|
|
357
|
-
return ' '.repeat(padLen) + text;
|
|
358
|
-
} else {
|
|
359
|
-
const leftPad = Math.floor(padLen / 2);
|
|
360
|
-
const rightPad = padLen - leftPad;
|
|
361
|
-
return ' '.repeat(leftPad) + text + ' '.repeat(rightPad);
|
|
362
|
-
}
|
|
363
|
-
},
|
|
364
|
-
/**
|
|
365
|
-
* Splits two multi-line strings side-by-side.
|
|
366
|
-
* @param left Content for left column
|
|
367
|
-
* @param right Content for right column
|
|
368
|
-
* @param width Total available width
|
|
369
|
-
* @param options Configuration for ratio and gap
|
|
370
|
-
*/ split (left, right, width, options = {}) {
|
|
371
|
-
const ratio = options.ratio ?? 0.5;
|
|
372
|
-
const gap = options.gap ?? 2;
|
|
373
|
-
let leftWidth = Math.floor((width - gap) * ratio);
|
|
374
|
-
let rightWidth = width - leftWidth - gap;
|
|
375
|
-
if (leftWidth < 1 || rightWidth < 1) {
|
|
376
|
-
leftWidth = Math.max(0, width);
|
|
377
|
-
rightWidth = 0;
|
|
378
|
-
// Fallback to single column if too narrow?
|
|
379
|
-
// For now just prevent crash.
|
|
380
|
-
}
|
|
381
|
-
const leftLines = left.split('\n');
|
|
382
|
-
const rightLines = right.split('\n');
|
|
383
|
-
const maxLines = Math.max(leftLines.length, rightLines.length);
|
|
384
|
-
const result = [];
|
|
385
|
-
for(let i = 0; i < maxLines; i++){
|
|
386
|
-
const leftLine = leftLines[i] || '';
|
|
387
|
-
const rightLine = rightLines[i] || '';
|
|
388
|
-
const l = Layout.pad(Layout.truncate(leftLine, leftWidth), leftWidth);
|
|
389
|
-
const r = Layout.pad(Layout.truncate(rightLine, rightWidth), rightWidth);
|
|
390
|
-
result.push(`${l}${' '.repeat(gap)}${r}`);
|
|
391
|
-
}
|
|
392
|
-
return result.join('\n');
|
|
393
|
-
},
|
|
394
|
-
/**
|
|
395
|
-
* Wraps a string to a specific visual width.
|
|
396
|
-
* Respects word boundaries where possible.
|
|
397
|
-
*/ wrap (str, width) {
|
|
398
|
-
const paragraphs = str.split('\n');
|
|
399
|
-
return paragraphs.map((para)=>{
|
|
400
|
-
const words = para.split(' ');
|
|
401
|
-
let currentLine = '';
|
|
402
|
-
const lines = [];
|
|
403
|
-
for (const word of words){
|
|
404
|
-
const wordWidth = stringWidth(word);
|
|
405
|
-
const currentWidth = stringWidth(currentLine);
|
|
406
|
-
const spaceWidth = currentLine ? 1 : 0;
|
|
407
|
-
if (currentWidth + spaceWidth + wordWidth <= width) {
|
|
408
|
-
currentLine += (currentLine ? ' ' : '') + word;
|
|
409
|
-
} else {
|
|
410
|
-
if (currentLine) lines.push(currentLine);
|
|
411
|
-
currentLine = word;
|
|
412
|
-
}
|
|
413
|
-
}
|
|
414
|
-
if (currentLine) lines.push(currentLine);
|
|
415
|
-
return lines.join('\n');
|
|
416
|
-
}).join('\n');
|
|
417
|
-
}
|
|
418
|
-
};
|
|
419
|
-
const Graph = {
|
|
420
|
-
/**
|
|
421
|
-
* Returns all dependencies (transitive) for an item.
|
|
422
|
-
*/ getDependencies (item, getDeps) {
|
|
423
|
-
const visited = new Set();
|
|
424
|
-
const result = [];
|
|
425
|
-
const visit = (current)=>{
|
|
426
|
-
if (visited.has(current)) return;
|
|
427
|
-
visited.add(current);
|
|
428
|
-
const deps = getDeps(current);
|
|
429
|
-
for (const dep of deps){
|
|
430
|
-
visit(dep);
|
|
431
|
-
}
|
|
432
|
-
if (current !== item) {
|
|
433
|
-
result.push(current);
|
|
434
|
-
}
|
|
435
|
-
};
|
|
436
|
-
visit(item);
|
|
437
|
-
return result;
|
|
438
|
-
},
|
|
439
|
-
/**
|
|
440
|
-
* Topologically sorts items based on dependencies.
|
|
441
|
-
* Returns items in order (dependencies first).
|
|
442
|
-
* Throws error if cycle detected.
|
|
443
|
-
*/ topologicalSort (items, getDeps) {
|
|
444
|
-
const visited = new Set();
|
|
445
|
-
const temp = new Set();
|
|
446
|
-
const order = [];
|
|
447
|
-
const visit = (node)=>{
|
|
448
|
-
if (temp.has(node)) {
|
|
449
|
-
throw new Error('Cyclic dependency detected');
|
|
450
|
-
}
|
|
451
|
-
if (visited.has(node)) return;
|
|
452
|
-
temp.add(node);
|
|
453
|
-
const deps = getDeps(node);
|
|
454
|
-
for (const dep of deps){
|
|
455
|
-
visit(dep);
|
|
456
|
-
}
|
|
457
|
-
temp.delete(node);
|
|
458
|
-
visited.add(node);
|
|
459
|
-
order.push(node);
|
|
460
|
-
};
|
|
461
|
-
for (const item of items){
|
|
462
|
-
if (!visited.has(item)) {
|
|
463
|
-
visit(item);
|
|
464
|
-
}
|
|
465
|
-
}
|
|
466
|
-
return order;
|
|
467
|
-
}
|
|
468
|
-
};
|
|
469
|
-
function generateProgressBar(current, total, width = 20) {
|
|
470
|
-
const percentage = Math.min(Math.max(current / total, 0), 1);
|
|
471
|
-
const barWidth = width;
|
|
472
|
-
const filledWidth = Math.round(barWidth * percentage);
|
|
473
|
-
const emptyWidth = barWidth - filledWidth;
|
|
474
|
-
const filled = '█'.repeat(filledWidth);
|
|
475
|
-
const empty = '-'.repeat(emptyWidth);
|
|
476
|
-
const percentStr = Math.round(percentage * 100) + '%';
|
|
477
|
-
return `[${filled}${empty}] ${percentStr}`;
|
|
478
|
-
}
|
|
479
|
-
|
|
480
|
-
//# sourceMappingURL=utils.js.map
|
package/dist/src/utils.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/utils.ts"],"sourcesContent":["// src/utils.ts\n\n/**\n * Detects terminal capabilities.\n */\nexport function detectCapabilities() {\n const env = process.env;\n\n // Check for CI\n const isCI = !!env.CI;\n\n // Check for True Color support\n const hasTrueColor = env.COLORTERM === 'truecolor' || !!env.WT_SESSION;\n\n // Check if it is a TTY\n const isTTY = process.stdout.isTTY;\n const isWindows = process.platform === 'win32';\n\n // Better Unicode detection logic\n const isUnicodeSupported = () => {\n // 1. Windows: Check specific environmental variables\n if (isWindows) {\n // Windows Terminal\n if (env.WT_SESSION) return true;\n // VSCode terminal\n if (env.TERM_PROGRAM === 'vscode') return true;\n // Modern terminals setting TERM (e.g. Alacritty, Git Bash, Cygwin)\n if (env.TERM === 'xterm-256color' || env.TERM === 'alacritty') return true;\n // ConEmu / Cmder\n if (env.ConEmuTask) return true;\n\n // CI on Windows typically supports Unicode.\n if (isCI) return true;\n\n // Default cmd.exe / old powershell => False (ASCII)\n return false;\n }\n\n // 2. Non-Windows (Linux/macOS)\n if (env.TERM_PROGRAM === 'Apple_Terminal') return true;\n\n // Check if the LANG or LC_ALL variable contains UTF-8.\n const lang = env.LANG || '';\n const lcAll = env.LC_ALL || '';\n\n return (lang && lang.toUpperCase().endsWith('UTF-8')) ||\n (lcAll && lcAll.toUpperCase().endsWith('UTF-8'));\n };\n\n return {\n isCI,\n hasTrueColor,\n // Enable Unicode only if it's TTY and environment supports it.\n hasUnicode: isTTY && isUnicodeSupported(),\n // Check if mouse should be enabled (TTY and not CI, or explicit override)\n // SGR is widely supported in modern terminals\n hasMouse: isTTY && !isCI\n };\n}\n\n/**\n * Strips ANSI escape codes from a string.\n */\nexport function stripAnsi(str: string): string {\n return str.replace(/\\x1b\\[[0-9;]*m/g, '');\n}\n\n/**\n * Sorted array of Unicode ranges that are typically full-width (2 columns).\n * Includes CJK, Emoji, Fullwidth forms, etc.\n * Format: [start, end] inclusive.\n */\nconst WIDE_RANGES: [number, number][] = [\n [0x1100, 0x11FF], // Hangul Jamo\n [0x2E80, 0x2EFF], // CJK Radicals Supplement\n [0x2F00, 0x2FDF], // Kangxi Radicals\n [0x3000, 0x303F], // CJK Symbols and Punctuation\n [0x3040, 0x309F], // Hiragana\n [0x30A0, 0x30FF], // Katakana\n [0x3100, 0x312F], // Bopomofo\n [0x3130, 0x318F], // Hangul Compatibility Jamo\n [0x3200, 0x32FF], // Enclosed CJK Letters and Months\n [0x3300, 0x33FF], // CJK Compatibility\n [0x3400, 0x4DBF], // CJK Unified Ideographs Extension A\n [0x4E00, 0x9FFF], // CJK Unified Ideographs\n [0xA960, 0xA97F], // Hangul Jamo Extended-A\n [0xAC00, 0xD7AF], // Hangul Syllables\n [0xD7B0, 0xD7FF], // Hangul Jamo Extended-B\n [0xF900, 0xFAFF], // CJK Compatibility Ideographs\n [0xFE10, 0xFE1F], // Vertical Forms\n [0xFE30, 0xFE4F], // CJK Compatibility Forms\n [0xFE50, 0xFE6F], // Small Form Variants\n [0xFF01, 0xFF60], // Fullwidth ASCII variants\n [0xFFE0, 0xFFE6], // Fullwidth currency/symbols\n [0x1F300, 0x1F6FF], // Miscellaneous Symbols and Pictographs (Emoji)\n [0x1F900, 0x1F9FF], // Supplemental Symbols and Pictographs\n];\n\n/**\n * Binary search to check if a code point is in the wide ranges.\n */\nfunction isWideCodePoint(cp: number): boolean {\n let low = 0;\n let high = WIDE_RANGES.length - 1;\n\n while (low <= high) {\n const mid = Math.floor((low + high) / 2);\n const [start, end] = WIDE_RANGES[mid];\n\n if (cp >= start && cp <= end) {\n return true;\n } else if (cp < start) {\n high = mid - 1;\n } else {\n low = mid + 1;\n }\n }\n return false;\n}\n\n/**\n * Calculates the visual width of a string.\n * Uses binary search for wide characters.\n * Handles ANSI codes (zero width).\n */\nexport function stringWidth(str: string): number {\n let width = 0;\n let inAnsi = false;\n\n for (let i = 0; i < str.length; i++) {\n const code = str.charCodeAt(i);\n\n // Simple ANSI parser state check\n if (str[i] === '\\x1b') {\n inAnsi = true;\n continue;\n }\n if (inAnsi) {\n if (str[i] === '[') {\n // Continue, this is the start of CSI\n continue;\n }\n if ((str[i] >= '@' && str[i] <= '~')) {\n inAnsi = false;\n }\n continue;\n }\n\n // Handle surrogate pairs for high code points (Emoji)\n let cp = code;\n if (code >= 0xD800 && code <= 0xDBFF && i + 1 < str.length) {\n const next = str.charCodeAt(i + 1);\n if (next >= 0xDC00 && next <= 0xDFFF) {\n // Calculate code point from surrogate pair\n cp = (code - 0xD800) * 0x400 + (next - 0xDC00) + 0x10000;\n i++; // Skip next char\n }\n }\n\n width += isWideCodePoint(cp) ? 2 : 1;\n }\n return width;\n}\n\n/**\n * Safely splits a string into an array of grapheme clusters.\n * Uses Intl.Segmenter (Node 16+).\n */\nexport function safeSplit(str: string): string[] {\n // @ts-ignore - Intl.Segmenter is available in Node 16+ but TS might complain depending on lib settings\n const segmenter = new Intl.Segmenter(undefined, { granularity: 'grapheme' });\n const segments = segmenter.segment(str);\n const result: string[] = [];\n for (const segment of segments) {\n result.push(segment.segment);\n }\n return result;\n}\n\n/**\n * Fuzzy match algorithm (Subsequence matching).\n * Returns score and matched indices, or null if no match.\n */\nexport function fuzzyMatch(query: string, target: string): { score: number; indices: number[] } | null {\n if (!query) return { score: 0, indices: [] };\n\n const queryLower = query.toLowerCase();\n const targetLower = target.toLowerCase();\n\n let queryIdx = 0;\n let targetIdx = 0;\n const indices: number[] = [];\n let score = 0;\n let consecutive = 0;\n // Track previous match index for consecutive check\n let lastMatchIdx = -1;\n\n // Simple greedy subsequence match\n while (queryIdx < queryLower.length && targetIdx < targetLower.length) {\n const qChar = queryLower[queryIdx];\n const tChar = targetLower[targetIdx];\n\n if (qChar === tChar) {\n indices.push(targetIdx);\n\n let charScore = 1;\n\n // Bonus: Consecutive match\n if (lastMatchIdx !== -1 && targetIdx === lastMatchIdx + 1) {\n consecutive++;\n charScore += (consecutive * 2); // Increasing bonus for longer runs\n } else {\n consecutive = 0;\n }\n\n // Bonus: Match at start of string\n if (targetIdx === 0) {\n charScore += 5;\n }\n // Bonus: Match after separator (camelCase or space or special char)\n else if (targetIdx > 0) {\n const prevChar = target.charAt(targetIdx - 1);\n if (/[\\s_\\-.]/.test(prevChar) || prevChar === '/') {\n charScore += 4;\n } else if (prevChar !== prevChar.toUpperCase() && target.charAt(targetIdx) === target.charAt(targetIdx).toUpperCase()) {\n // CamelCase hump\n charScore += 3;\n }\n }\n\n score += charScore;\n lastMatchIdx = targetIdx;\n queryIdx++;\n }\n targetIdx++;\n }\n\n // Must match all characters in query\n if (queryIdx < queryLower.length) {\n return null;\n }\n\n // Penalty for total length (prefer shorter strings)\n score -= target.length * 0.1;\n\n // Penalty for distance between first and last match (compactness)\n if (indices.length > 1) {\n const spread = indices[indices.length - 1] - indices[0];\n score -= spread * 0.5;\n }\n\n return { score, indices };\n}\n\n/**\n * Layout utilities for advanced rendering (Split View, etc.)\n */\nexport const Layout = {\n /**\n * Truncates a string to a specific visual width, respecting ANSI codes.\n */\n truncate(str: string, width: number): string {\n const visualWidth = stringWidth(str);\n if (visualWidth <= width) {\n return str;\n }\n\n let currentWidth = 0;\n let cutIndex = 0;\n let inAnsi = false;\n\n for (let i = 0; i < str.length; i++) {\n if (str[i] === '\\x1b') inAnsi = true;\n\n if (!inAnsi) {\n const code = str.charCodeAt(i);\n\n // Handle surrogate pair\n if (code >= 0xD800 && code <= 0xDBFF && i + 1 < str.length) {\n const next = str.charCodeAt(i + 1);\n if (next >= 0xDC00 && next <= 0xDFFF) {\n const cp = (code - 0xD800) * 0x400 + (next - 0xDC00) + 0x10000;\n const w = isWideCodePoint(cp) ? 2 : 1;\n if (currentWidth + w > width) break;\n currentWidth += w;\n cutIndex = i + 2;\n i++; // Skip next\n continue;\n }\n }\n\n const w = isWideCodePoint(code) ? 2 : 1;\n if (currentWidth + w > width) break;\n currentWidth += w;\n } else {\n if (str[i] === 'm' || (str[i] >= 'A' && str[i] <= 'Z')) inAnsi = false;\n }\n cutIndex = i + 1;\n }\n\n return str.substring(0, cutIndex) + '\\x1b[0m';\n },\n\n /**\n * Pads a string to a specific visual length.\n * Respects ANSI codes (does not count them towards length).\n */\n pad(text: string, length: number, align: 'left' | 'right' | 'center' = 'left'): string {\n const visualLen = stringWidth(text);\n if (visualLen >= length) return text;\n\n const padLen = Math.max(0, length - visualLen);\n if (align === 'left') {\n return text + ' '.repeat(padLen);\n } else if (align === 'right') {\n return ' '.repeat(padLen) + text;\n } else {\n const leftPad = Math.floor(padLen / 2);\n const rightPad = padLen - leftPad;\n return ' '.repeat(leftPad) + text + ' '.repeat(rightPad);\n }\n },\n\n /**\n * Splits two multi-line strings side-by-side.\n * @param left Content for left column\n * @param right Content for right column\n * @param width Total available width\n * @param options Configuration for ratio and gap\n */\n split(left: string, right: string, width: number, options: { ratio?: number, gap?: number } = {}): string {\n const ratio = options.ratio ?? 0.5;\n const gap = options.gap ?? 2;\n\n let leftWidth = Math.floor((width - gap) * ratio);\n let rightWidth = width - leftWidth - gap;\n\n if (leftWidth < 1 || rightWidth < 1) {\n leftWidth = Math.max(0, width);\n rightWidth = 0;\n // Fallback to single column if too narrow? \n // For now just prevent crash.\n }\n\n const leftLines = left.split('\\n');\n const rightLines = right.split('\\n');\n const maxLines = Math.max(leftLines.length, rightLines.length);\n\n const result: string[] = [];\n\n for (let i = 0; i < maxLines; i++) {\n const leftLine = leftLines[i] || '';\n const rightLine = rightLines[i] || '';\n\n const l = Layout.pad(Layout.truncate(leftLine, leftWidth), leftWidth);\n const r = Layout.pad(Layout.truncate(rightLine, rightWidth), rightWidth);\n\n result.push(`${l}${' '.repeat(gap)}${r}`);\n }\n\n return result.join('\\n');\n },\n\n /**\n * Wraps a string to a specific visual width.\n * Respects word boundaries where possible.\n */\n wrap(str: string, width: number): string {\n const paragraphs = str.split('\\n');\n return paragraphs.map(para => {\n const words = para.split(' ');\n let currentLine = '';\n const lines: string[] = [];\n\n for (const word of words) {\n const wordWidth = stringWidth(word);\n const currentWidth = stringWidth(currentLine);\n const spaceWidth = currentLine ? 1 : 0;\n\n if (currentWidth + spaceWidth + wordWidth <= width) {\n currentLine += (currentLine ? ' ' : '') + word;\n } else {\n if (currentLine) lines.push(currentLine);\n currentLine = word;\n }\n }\n if (currentLine) lines.push(currentLine);\n return lines.join('\\n');\n }).join('\\n');\n }\n};\n\n/**\n * Graph utilities for dependency management\n */\nexport const Graph = {\n /**\n * Returns all dependencies (transitive) for an item.\n */\n getDependencies<T>(item: T, getDeps: (i: T) => T[]): T[] {\n const visited = new Set<T>();\n const result: T[] = [];\n\n const visit = (current: T) => {\n if (visited.has(current)) return;\n visited.add(current);\n\n const deps = getDeps(current);\n for (const dep of deps) {\n visit(dep);\n }\n if (current !== item) {\n result.push(current);\n }\n };\n\n visit(item);\n return result;\n },\n\n /**\n * Topologically sorts items based on dependencies.\n * Returns items in order (dependencies first).\n * Throws error if cycle detected.\n */\n topologicalSort<T>(items: T[], getDeps: (i: T) => T[]): T[] {\n const visited = new Set<T>();\n const temp = new Set<T>();\n const order: T[] = [];\n\n const visit = (node: T) => {\n if (temp.has(node)) {\n throw new Error('Cyclic dependency detected');\n }\n if (visited.has(node)) return;\n\n temp.add(node);\n const deps = getDeps(node);\n for (const dep of deps) {\n visit(dep);\n }\n temp.delete(node);\n visited.add(node);\n order.push(node);\n };\n\n for (const item of items) {\n if (!visited.has(item)) {\n visit(item);\n }\n }\n\n return order;\n }\n};\n\n/**\n * Generates a progress bar string.\n */\nexport function generateProgressBar(current: number, total: number, width: number = 20): string {\n const percentage = Math.min(Math.max(current / total, 0), 1);\n const barWidth = width;\n const filledWidth = Math.round(barWidth * percentage);\n const emptyWidth = barWidth - filledWidth;\n\n const filled = '█'.repeat(filledWidth);\n const empty = '-'.repeat(emptyWidth);\n const percentStr = Math.round(percentage * 100) + '%';\n\n return `[${filled}${empty}] ${percentStr}`;\n}\n"],"names":["Graph","Layout","detectCapabilities","fuzzyMatch","generateProgressBar","safeSplit","stringWidth","stripAnsi","env","process","isCI","CI","hasTrueColor","COLORTERM","WT_SESSION","isTTY","stdout","isWindows","platform","isUnicodeSupported","TERM_PROGRAM","TERM","ConEmuTask","lang","LANG","lcAll","LC_ALL","toUpperCase","endsWith","hasUnicode","hasMouse","str","replace","WIDE_RANGES","isWideCodePoint","cp","low","high","length","mid","Math","floor","start","end","width","inAnsi","i","code","charCodeAt","next","segmenter","Intl","Segmenter","undefined","granularity","segments","segment","result","push","query","target","score","indices","queryLower","toLowerCase","targetLower","queryIdx","targetIdx","consecutive","lastMatchIdx","qChar","tChar","charScore","prevChar","charAt","test","spread","truncate","visualWidth","currentWidth","cutIndex","w","substring","pad","text","align","visualLen","padLen","max","repeat","leftPad","rightPad","split","left","right","options","ratio","gap","leftWidth","rightWidth","leftLines","rightLines","maxLines","leftLine","rightLine","l","r","join","wrap","paragraphs","map","para","words","currentLine","lines","word","wordWidth","spaceWidth","getDependencies","item","getDeps","visited","Set","visit","current","has","add","deps","dep","topologicalSort","items","temp","order","node","Error","delete","total","percentage","min","barWidth","filledWidth","round","emptyWidth","filled","empty","percentStr"],"mappings":"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"}
|