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
|
@@ -0,0 +1 @@
|
|
|
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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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "mepcli",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "2.0.0-beta.1",
|
|
4
4
|
"description": "Zero-dependency, interactive CLI prompt",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -14,7 +14,8 @@
|
|
|
14
14
|
"LICENSE"
|
|
15
15
|
],
|
|
16
16
|
"scripts": {
|
|
17
|
-
"
|
|
17
|
+
"typecheck": "tsc --noEmit",
|
|
18
|
+
"build": "swc src -d dist --config-file .swcrc",
|
|
18
19
|
"prepublishOnly": "npm run build",
|
|
19
20
|
"test": "jest",
|
|
20
21
|
"demo": "ts-node example.ts",
|
|
@@ -44,15 +45,17 @@
|
|
|
44
45
|
"author": "CodeTease",
|
|
45
46
|
"license": "MIT",
|
|
46
47
|
"devDependencies": {
|
|
47
|
-
"@eslint/js": "^9",
|
|
48
|
-
"@
|
|
49
|
-
"@
|
|
50
|
-
"
|
|
51
|
-
"
|
|
52
|
-
"
|
|
53
|
-
"
|
|
54
|
-
"
|
|
55
|
-
"
|
|
56
|
-
"
|
|
48
|
+
"@eslint/js": "^9.39.3",
|
|
49
|
+
"@swc/cli": "^0.8.0",
|
|
50
|
+
"@swc/core": "^1.15.18",
|
|
51
|
+
"@types/jest": "^30.0.0",
|
|
52
|
+
"@types/node": "^22.19.13",
|
|
53
|
+
"eslint": "^9.39.3",
|
|
54
|
+
"globals": "^17.4.0",
|
|
55
|
+
"jest": "^30.2.0",
|
|
56
|
+
"ts-jest": "^29.4.6",
|
|
57
|
+
"ts-node": "^10.9.2",
|
|
58
|
+
"typescript": "^5.9.3",
|
|
59
|
+
"typescript-eslint": "^8.56.1"
|
|
57
60
|
}
|
|
58
|
-
}
|
|
61
|
+
}
|
package/dist/ansi.d.ts
DELETED
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* ANSI Escape Codes
|
|
3
|
-
* Manual definitions to maintain zero-dependency status.
|
|
4
|
-
*/
|
|
5
|
-
export declare const ANSI: {
|
|
6
|
-
RESET: string;
|
|
7
|
-
BOLD: string;
|
|
8
|
-
DIM: string;
|
|
9
|
-
ITALIC: string;
|
|
10
|
-
UNDERLINE: string;
|
|
11
|
-
REVERSE: string;
|
|
12
|
-
FG_GREEN: string;
|
|
13
|
-
FG_CYAN: string;
|
|
14
|
-
FG_YELLOW: string;
|
|
15
|
-
FG_RED: string;
|
|
16
|
-
FG_GRAY: string;
|
|
17
|
-
FG_WHITE: string;
|
|
18
|
-
FG_BLUE: string;
|
|
19
|
-
FG_MAGENTA: string;
|
|
20
|
-
FG_BLACK: string;
|
|
21
|
-
BG_YELLOW: string;
|
|
22
|
-
BG_BLUE: string;
|
|
23
|
-
BG_CYAN: string;
|
|
24
|
-
BG_GREEN: string;
|
|
25
|
-
BG_RED: string;
|
|
26
|
-
ERASE_LINE: string;
|
|
27
|
-
ERASE_DOWN: string;
|
|
28
|
-
CURSOR_LEFT: string;
|
|
29
|
-
HIDE_CURSOR: string;
|
|
30
|
-
SHOW_CURSOR: string;
|
|
31
|
-
UP: string;
|
|
32
|
-
DOWN: string;
|
|
33
|
-
SET_ANY_EVENT_MOUSE: string;
|
|
34
|
-
SET_SGR_EXT_MODE_MOUSE: string;
|
|
35
|
-
DISABLE_MOUSE: string;
|
|
36
|
-
};
|
package/dist/base.d.ts
DELETED
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
import { MouseEvent } from './types';
|
|
2
|
-
import { detectCapabilities } from './utils';
|
|
3
|
-
/**
|
|
4
|
-
* Abstract base class for all prompts.
|
|
5
|
-
* Implements a Robust Linear Scan Diffing Engine.
|
|
6
|
-
*/
|
|
7
|
-
export declare abstract class Prompt<T, O> {
|
|
8
|
-
protected options: O;
|
|
9
|
-
protected value: any;
|
|
10
|
-
protected stdin: NodeJS.ReadStream;
|
|
11
|
-
protected stdout: NodeJS.WriteStream;
|
|
12
|
-
private _resolve?;
|
|
13
|
-
private _reject?;
|
|
14
|
-
private _inputParser;
|
|
15
|
-
private _onKeyHandler?;
|
|
16
|
-
private _onDataHandler?;
|
|
17
|
-
private static warnedComponents;
|
|
18
|
-
protected lastRenderLines: string[];
|
|
19
|
-
protected lastRenderHeight: number;
|
|
20
|
-
protected capabilities: ReturnType<typeof detectCapabilities>;
|
|
21
|
-
constructor(options: O);
|
|
22
|
-
/**
|
|
23
|
-
* Checks if running on Windows and logs a warning message once per component type.
|
|
24
|
-
* Call this in the constructor of problematic prompts.
|
|
25
|
-
*/
|
|
26
|
-
protected checkWindowsAttention(): void;
|
|
27
|
-
/**
|
|
28
|
-
* Warn about experimental prompts.
|
|
29
|
-
* Call this in the constructor of experimental prompts.
|
|
30
|
-
*/
|
|
31
|
-
protected warnExperimental(): void;
|
|
32
|
-
protected abstract render(firstRender: boolean): void;
|
|
33
|
-
protected abstract handleInput(char: string, key: Buffer): void;
|
|
34
|
-
protected handleMouse(_event: MouseEvent): void;
|
|
35
|
-
protected print(text: string): void;
|
|
36
|
-
run(): Promise<T>;
|
|
37
|
-
/**
|
|
38
|
-
* Pauses the input stream and removes listeners.
|
|
39
|
-
* Useful for yielding control to child processes.
|
|
40
|
-
*/
|
|
41
|
-
protected pauseInput(): void;
|
|
42
|
-
/**
|
|
43
|
-
* Resumes the input stream and re-attaches listeners.
|
|
44
|
-
*/
|
|
45
|
-
protected resumeInput(): void;
|
|
46
|
-
protected cleanup(): void;
|
|
47
|
-
protected submit(result: T): void;
|
|
48
|
-
protected cancel(reason: any): void;
|
|
49
|
-
/**
|
|
50
|
-
* Renders the frame using a linear scan diffing algorithm.
|
|
51
|
-
* Prevents flicker and handles height changes (expand/collapse) robustly.
|
|
52
|
-
*/
|
|
53
|
-
protected renderFrame(content: string): void;
|
|
54
|
-
protected stripAnsi(str: string): string;
|
|
55
|
-
protected truncate(str: string, width: number): string;
|
|
56
|
-
protected isUp(char: string): boolean;
|
|
57
|
-
protected isDown(char: string): boolean;
|
|
58
|
-
protected isRight(char: string): boolean;
|
|
59
|
-
protected isLeft(char: string): boolean;
|
|
60
|
-
}
|