1 | import path from 'path'
|
2 | import fs from 'fs'
|
3 | import { Prompter } from './types'
|
4 |
|
5 | const hooksfiles = ['prompt.js', 'index.js']
|
6 | const 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 |
|
20 |
|
21 | const hooksModule = require(hooksfile)
|
22 | if (hooksModule.params) {
|
23 | return hooksModule.params({ args })
|
24 | }
|
25 |
|
26 |
|
27 |
|
28 | const prompter = createPrompter()
|
29 | if (hooksModule.prompt) {
|
30 | return hooksModule.prompt({ prompter, inquirer: prompter, args })
|
31 | }
|
32 |
|
33 | return prompter.prompt(
|
34 |
|
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 |
|
44 | export default prompt
|