Skip to content

Commit 605e9ee

Browse files
committed
feat(plugin-api): expose inquirer to prompts.js, allowing custom prompt types
closes vuejs#5167
1 parent 8b01c9e commit 605e9ee

File tree

2 files changed

+22
-8
lines changed

2 files changed

+22
-8
lines changed

packages/@vue/cli/lib/Creator.js

+17-5
Original file line numberDiff line numberDiff line change
@@ -182,7 +182,7 @@ module.exports = class Creator extends EventEmitter {
182182
// run generator
183183
log(`🚀 Invoking generators...`)
184184
this.emit('creation', { event: 'invoking-generators' })
185-
const plugins = await this.resolvePlugins(preset.plugins)
185+
const plugins = await this.resolvePlugins(preset.plugins, pkg)
186186
const generator = new Generator(context, {
187187
pkg,
188188
plugins,
@@ -355,21 +355,33 @@ module.exports = class Creator extends EventEmitter {
355355
}
356356

357357
// { id: options } => [{ id, apply, options }]
358-
async resolvePlugins (rawPlugins) {
358+
async resolvePlugins (rawPlugins, pkg) {
359359
// ensure cli-service is invoked first
360360
rawPlugins = sortObject(rawPlugins, ['@vue/cli-service'], true)
361361
const plugins = []
362362
for (const id of Object.keys(rawPlugins)) {
363363
const apply = loadModule(`${id}/generator`, this.context) || (() => {})
364364
let options = rawPlugins[id] || {}
365+
365366
if (options.prompts) {
366-
const prompts = loadModule(`${id}/prompts`, this.context)
367-
if (prompts) {
367+
let pluginPrompts = loadModule(`${id}/prompts`, this.context)
368+
369+
if (pluginPrompts) {
370+
const prompt = inquirer.createPromptModule()
371+
372+
if (typeof pluginPrompts === 'function') {
373+
pluginPrompts = pluginPrompts(pkg, prompt)
374+
}
375+
if (typeof pluginPrompts.getPrompts === 'function') {
376+
pluginPrompts = pluginPrompts.getPrompts(pkg, prompt)
377+
}
378+
368379
log()
369380
log(`${chalk.cyan(options._isPreset ? `Preset options:` : id)}`)
370-
options = await inquirer.prompt(prompts)
381+
options = await prompt(pluginPrompts)
371382
}
372383
}
384+
373385
plugins.push({ id, apply, options })
374386
}
375387
return plugins

packages/@vue/cli/lib/invoke.js

+5-3
Original file line numberDiff line numberDiff line change
@@ -68,13 +68,15 @@ async function invoke (pluginName, options = {}, context = process.cwd()) {
6868
} else if (!Object.keys(pluginOptions).length) {
6969
let pluginPrompts = loadModule(`${id}/prompts`, context)
7070
if (pluginPrompts) {
71+
const prompt = inquirer.createPromptModule()
72+
7173
if (typeof pluginPrompts === 'function') {
72-
pluginPrompts = pluginPrompts(pkg)
74+
pluginPrompts = pluginPrompts(pkg, prompt)
7375
}
7476
if (typeof pluginPrompts.getPrompts === 'function') {
75-
pluginPrompts = pluginPrompts.getPrompts(pkg)
77+
pluginPrompts = pluginPrompts.getPrompts(pkg, prompt)
7678
}
77-
pluginOptions = await inquirer.prompt(pluginPrompts)
79+
pluginOptions = await prompt(pluginPrompts)
7880
}
7981
}
8082

0 commit comments

Comments
 (0)