/
prompt.js
69 lines (62 loc) 路 1.89 KB
/
prompt.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
const inquirer = require('inquirer');
const { config } = require('./config');
const { format } = require('./util');
const semver = require('semver');
const { options } = config;
const noop = Promise.resolve();
const prompts = {
version: {
type: 'input',
message: () => 'Please enter a valid version (e.g. 1.0.0):',
validate: input => !!semver.valid(input) || 'The version must follow the semver standard.'
},
ready: {
type: 'confirm',
message: (subject, version) => `Ready to release ${format(options[subject].tagName, version)}?`,
executeTaskIf: false
},
status: {
type: 'confirm',
message: () => 'Show staged files?'
},
commit: {
type: 'confirm',
message: (subject, version) => `Commit (${format(options[subject].commitMessage, version)})?`
},
tag: {
type: 'confirm',
message: (subject, version) => `Tag (${format(options[subject].tagName, version)})?`
},
push: {
type: 'confirm',
message: () => 'Push?'
},
release: {
type: 'confirm',
message: (subject, version) => `Create a release on GitHub (${format(options.github.releaseName, version)})?`
},
publish: {
type: 'confirm',
message: () => `Publish ${options.name} to npm?`
},
otp: {
type: 'input',
message: () => `Please enter OTP for npm:`
}
};
module.exports = async (shouldPrompt, subject, promptName, task) => {
if (!shouldPrompt) return noop;
const prompt = Object.assign({}, prompts[promptName], {
name: promptName,
message: prompts[promptName].message(subject, options.version),
default: options.prompt[subject][promptName]
});
const answers = await inquirer.prompt([prompt]);
const doExecute =
prompt.executeTaskIf !== undefined
? prompt.executeTaskIf === answers[promptName]
: prompt.type === 'confirm'
? answers[promptName]
: true;
return doExecute ? await task(answers[promptName]) : noop;
};