UNPKG

1.07 kBPlain TextView Raw
1import path from 'path'
2import fs from 'fs'
3import { Prompter } from './types'
4
5const hooksfiles = ['prompt.js', 'index.js']
6const prompt = <Q, T>(
7 createPrompter: () => Prompter<Q, T>,
8 actionfolder: string,
9 args: Record<string, any>,
10): Promise<T | object> => {
11 const hooksfile = hooksfiles
12 .map(f => path.resolve(path.join(actionfolder, f)))
13 .find(f => fs.existsSync(f))
14
15 if (!hooksfile) {
16 return Promise.resolve({})
17 }
18
19 // shortcircuit without prompter
20 // $FlowFixMe
21 const hooksModule = require(hooksfile)
22 if (hooksModule.params) {
23 return hooksModule.params({ args })
24 }
25
26 // lazy loads prompter
27 // everything below requires it
28 const prompter = createPrompter()
29 if (hooksModule.prompt) {
30 return hooksModule.prompt({ prompter, inquirer: prompter, args })
31 }
32
33 return prompter.prompt(
34 // prompt _only_ for things we've not seen on the CLI
35 hooksModule.filter(
36 p =>
37 args[p.name] === undefined ||
38 args[p.name] === null ||
39 args[p.name].length === 0,
40 ),
41 )
42}
43
44export default prompt