mepcli 2.0.0-beta.1 → 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/README.md +32 -10
- 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 -347
- 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 +12 -17
- 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/README.md
CHANGED
|
@@ -215,20 +215,42 @@ tasks.success('download', 'Downloaded');
|
|
|
215
215
|
tasks.stop();
|
|
216
216
|
```
|
|
217
217
|
|
|
218
|
-
## Pipeline (Workflow Engine)
|
|
218
|
+
## Pipeline (Workflow Engine)
|
|
219
219
|
|
|
220
|
-
|
|
220
|
+
Pipelines provide a powerful, sequential workflow engine. Based on the philosophy of **Enter-and-Forget (EAF)**, **Zero-Dependency**, and **Method Chaining**, Pipelines allow you to chain actions, prompts, and tasks sequentially, accumulating their results into a Context object.
|
|
221
221
|
|
|
222
222
|
```typescript
|
|
223
|
-
|
|
224
|
-
|
|
223
|
+
import { MepCLI, Pipeline } from 'mepcli';
|
|
224
|
+
import { z } from 'zod';
|
|
225
|
+
|
|
226
|
+
interface Context {
|
|
227
|
+
name: string;
|
|
228
|
+
age: number;
|
|
229
|
+
email?: string;
|
|
230
|
+
parentalConsent?: boolean;
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
const result = await new Pipeline<Context>()
|
|
234
|
+
.step('name', async () => {
|
|
235
|
+
return await MepCLI.text({ message: 'What is your name?' });
|
|
236
|
+
}, {
|
|
237
|
+
validate: (val) => val.length > 0 || 'Name is required'
|
|
238
|
+
})
|
|
239
|
+
.step('age', async () => {
|
|
240
|
+
return await MepCLI.number({ message: 'How old are you?' });
|
|
241
|
+
}, {
|
|
242
|
+
transform: (val) => Number(val),
|
|
243
|
+
validate: z.number().min(0, "Age must be positive")
|
|
244
|
+
})
|
|
225
245
|
.stepIf(
|
|
226
|
-
(ctx) => ctx.
|
|
227
|
-
'
|
|
228
|
-
() =>
|
|
229
|
-
message: '
|
|
230
|
-
|
|
231
|
-
|
|
246
|
+
(ctx) => ctx.age < 18,
|
|
247
|
+
'parentalConsent',
|
|
248
|
+
async () => {
|
|
249
|
+
return await MepCLI.confirm({ message: 'Do you have parental consent?' });
|
|
250
|
+
},
|
|
251
|
+
{
|
|
252
|
+
validate: (val) => val === true || 'Parental consent is required'
|
|
253
|
+
}
|
|
232
254
|
)
|
|
233
255
|
.run();
|
|
234
256
|
```
|
package/dist/ansi.d.ts
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
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/ansi.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:true});Object.defineProperty(exports,"ANSI",{enumerable:true,get:function(){return ANSI}});const ANSI={RESET:"\x1b[0m",BOLD:"\x1b[1m",DIM:"\x1b[2m",ITALIC:"\x1b[3m",UNDERLINE:"\x1b[4m",REVERSE:"\x1b[7m",FG_GREEN:"\x1b[32m",FG_CYAN:"\x1b[36m",FG_YELLOW:"\x1b[33m",FG_RED:"\x1b[31m",FG_GRAY:"\x1b[90m",FG_WHITE:"\x1b[37m",FG_BLUE:"\x1b[34m",FG_MAGENTA:"\x1b[35m",FG_BLACK:"\x1b[30m",BG_YELLOW:"\x1b[43m",BG_BLUE:"\x1b[44m",BG_CYAN:"\x1b[46m",BG_GREEN:"\x1b[42m",BG_RED:"\x1b[41m",ERASE_LINE:"\x1b[2K",ERASE_DOWN:"\x1b[J",CURSOR_LEFT:"\x1b[1000D",HIDE_CURSOR:"\x1b[?25l",SHOW_CURSOR:"\x1b[?25h",UP:"\x1b[A",DOWN:"\x1b[B",SET_ANY_EVENT_MOUSE:"\x1b[?1003h",SET_SGR_EXT_MODE_MOUSE:"\x1b[?1006h",DISABLE_MOUSE:"\x1b[?1003l\x1b[?1006l"};
|
package/dist/base.d.ts
ADDED
|
@@ -0,0 +1,60 @@
|
|
|
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
|
+
}
|
package/dist/base.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:true});Object.defineProperty(exports,"Prompt",{enumerable:true,get:function(){return Prompt}});const _ansi=require("./ansi");const _input=require("./input");const _utils=require("./utils");function _define_property(obj,key,value){if(key in obj){Object.defineProperty(obj,key,{value:value,enumerable:true,configurable:true,writable:true})}else{obj[key]=value}return obj}let Prompt=class Prompt{checkWindowsAttention(){const componentName=this.constructor.name;if(process.platform==="win32"&&!Prompt.warnedComponents.has(componentName)){console.warn(`${_ansi.ANSI.FG_YELLOW}Warning:${_ansi.ANSI.RESET} ${componentName} may hang on Windows TTY after multiple cycles. `+`Press 'Enter' if unresponsive.`);Prompt.warnedComponents.add(componentName)}}warnExperimental(){const componentName=this.constructor.name;if(!Prompt.warnedComponents.has(componentName)){console.warn(`${_ansi.ANSI.FG_YELLOW}Warning:${_ansi.ANSI.RESET} ${componentName} is an experimental prompt and may have bugs or unexpected behavior. `+`Use with caution.`);Prompt.warnedComponents.add(componentName)}}handleMouse(_event){}print(text){this.stdout.write(text)}run(){return new Promise((resolve,reject)=>{this._resolve=resolve;this._reject=reject;if(typeof this.stdin.setRawMode==="function"){this.stdin.setRawMode(true)}this.stdin.resume();this.stdin.setEncoding("utf8");const shouldEnableMouse=this.options.mouse!==false&&this.capabilities.hasMouse;if(shouldEnableMouse){this.print(_ansi.ANSI.SET_ANY_EVENT_MOUSE+_ansi.ANSI.SET_SGR_EXT_MODE_MOUSE)}this.print(_ansi.ANSI.HIDE_CURSOR);this.render(true);this._onKeyHandler=(char,buffer)=>{if(char==="\x03"){this.cleanup();this.print(_ansi.ANSI.SHOW_CURSOR+"\n");if(this._reject)this._reject(new Error("User force closed"));return}this.handleInput(char,buffer)};this._inputParser.on("keypress",this._onKeyHandler);this._inputParser.on("mouse",event=>{this.handleMouse(event)});this._onDataHandler=buffer=>{this._inputParser.feed(buffer)};this.stdin.on("data",this._onDataHandler)})}pauseInput(){if(this._onDataHandler){this.stdin.removeListener("data",this._onDataHandler)}if(typeof this.stdin.setRawMode==="function"){this.stdin.setRawMode(false)}this.stdin.pause()}resumeInput(){if(typeof this.stdin.setRawMode==="function"){this.stdin.setRawMode(true)}this.stdin.resume();if(this._onDataHandler){this.stdin.on("data",this._onDataHandler)}}cleanup(){if(this._onDataHandler){this.stdin.removeListener("data",this._onDataHandler)}if(this._onKeyHandler){this._inputParser.removeListener("keypress",this._onKeyHandler)}this.print(_ansi.ANSI.DISABLE_MOUSE);if(typeof this.stdin.setRawMode==="function"){this.stdin.setRawMode(false)}this.stdin.pause();this.print(_ansi.ANSI.SHOW_CURSOR)}submit(result){this.cleanup();this.print("\n");if(this._resolve)this._resolve(result)}cancel(reason){this.cleanup();this.print("\n");if(this._reject)this._reject(reason)}renderFrame(content){const width=this.stdout.columns||80;const rawLines=content.split("\n");const newLines=rawLines.map(line=>this.truncate(line,width));if(this.lastRenderLines.length===0){this.print(newLines.join("\n"));this.lastRenderLines=newLines;this.lastRenderHeight=newLines.length;return}let outputBuffer="";if(this.lastRenderHeight>1){outputBuffer+=`\x1b[${this.lastRenderHeight-1}A`}outputBuffer+="\r";for(let i=0;i<newLines.length;i++){const newLine=newLines[i];if(i>0){if(i<this.lastRenderLines.length){outputBuffer+="\x1b[B\r"}else{outputBuffer+="\n"}}if(i<this.lastRenderLines.length){const oldLine=this.lastRenderLines[i];if(newLine!==oldLine){outputBuffer+=_ansi.ANSI.ERASE_LINE+newLine}}else{outputBuffer+=newLine}}if(newLines.length<this.lastRenderLines.length){outputBuffer+="\n";outputBuffer+=_ansi.ANSI.ERASE_DOWN;outputBuffer+=`\x1b[A`}this.print(outputBuffer);this.lastRenderLines=newLines;this.lastRenderHeight=newLines.length}stripAnsi(str){return(0,_utils.stripAnsi)(str)}truncate(str,width){const visualWidth=(0,_utils.stringWidth)(str);if(visualWidth<=width){return str}let currentWidth=0;let cutIndex=0;let inAnsi=false;for(let i=0;i<str.length;i++){if(str[i]==="\x1b")inAnsi=true;if(!inAnsi){const code=str.charCodeAt(i);const charWidth=code>255?2:1;if(currentWidth+charWidth>width-3){break}currentWidth+=charWidth}else{if(str[i]==="m"||str[i]>="A"&&str[i]<="Z")inAnsi=false}cutIndex=i+1}return str.substring(0,cutIndex)+"..."+_ansi.ANSI.RESET}isUp(char){return char==="\x1b[A"||char==="\x1bOA"}isDown(char){return char==="\x1b[B"||char==="\x1bOB"}isRight(char){return char==="\x1b[C"||char==="\x1bOC"}isLeft(char){return char==="\x1b[D"||char==="\x1bOD"}constructor(options){_define_property(this,"options",void 0);_define_property(this,"value",void 0);_define_property(this,"stdin",void 0);_define_property(this,"stdout",void 0);_define_property(this,"_resolve",void 0);_define_property(this,"_reject",void 0);_define_property(this,"_inputParser",void 0);_define_property(this,"_onKeyHandler",void 0);_define_property(this,"_onDataHandler",void 0);_define_property(this,"lastRenderLines",[]);_define_property(this,"lastRenderHeight",0);_define_property(this,"capabilities",void 0);this.options=options;this.stdin=process.stdin;this.stdout=process.stdout;this._inputParser=new _input.InputParser;this.capabilities=(0,_utils.detectCapabilities)()}};_define_property(Prompt,"warnedComponents",new Set);
|