/
index.js
90 lines (79 loc) · 1.83 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
"use strict";
const inquirer = require("inquirer");
const log = require("npmlog");
exports.promptConfirmation = promptConfirmation;
exports.promptSelectOne = promptSelectOne;
exports.promptTextInput = promptTextInput;
/**
* Prompt for confirmation
* @param {string} message
* @returns {Promise<boolean>}
*/
function promptConfirmation(message) {
log.pause();
return inquirer
.prompt([
{
type: "expand",
name: "confirm",
message,
default: 2, // default to help in order to avoid clicking straight through
choices: [
{ key: "y", name: "Yes", value: true },
{ key: "n", name: "No", value: false },
],
},
])
.then((answers) => {
log.resume();
return answers.confirm;
});
}
/**
* Prompt for selection
* @param {string} message
* @param {{ choices: import("inquirer").ListChoiceOptions[] } & Pick<import("inquirer").Question, 'filter' | 'validate'>} [options]
* @returns {Promise<string>}
*/
function promptSelectOne(message, { choices, filter, validate } = {}) {
log.pause();
return inquirer
.prompt([
{
type: "list",
name: "prompt",
message,
choices,
pageSize: choices.length,
filter,
validate,
},
])
.then((answers) => {
log.resume();
return answers.prompt;
});
}
/**
* Prompt for input
* @param {string} message
* @param {Pick<import("inquirer").Question, 'filter' | 'validate'>} [options]
* @returns {Promise<string>}
*/
function promptTextInput(message, { filter, validate } = {}) {
log.pause();
return inquirer
.prompt([
{
type: "input",
name: "input",
message,
filter,
validate,
},
])
.then((answers) => {
log.resume();
return answers.input;
});
}