1 | import path from 'path'
|
2 | import yargs from 'yargs-parser'
|
3 | import { RunnerConfig, ParamsResult } from './types'
|
4 | import prompt from './prompt'
|
5 |
|
6 | const params = async (
|
7 | { templates, createPrompter }: RunnerConfig,
|
8 | externalArgv: string[],
|
9 | ): Promise<ParamsResult> => {
|
10 | const argv = yargs(externalArgv)
|
11 |
|
12 | const [generator, action, name] = argv._
|
13 | if (!generator || !action) {
|
14 | return { generator, action, templates }
|
15 | }
|
16 | const [mainAction, subaction] = action.split(':')
|
17 |
|
18 | const actionfolder = path.join(templates, generator, mainAction)
|
19 |
|
20 | const { _, ...cleanArgv } = argv
|
21 | const promptArgs = await prompt(createPrompter, actionfolder, {
|
22 |
|
23 |
|
24 | ...(name ? { name } : {}),
|
25 | ...cleanArgv,
|
26 | })
|
27 |
|
28 | const args = Object.assign(
|
29 | {
|
30 | templates,
|
31 | actionfolder,
|
32 | generator,
|
33 | action,
|
34 | subaction,
|
35 | },
|
36 | promptArgs,
|
37 | cleanArgv,
|
38 | name && { name },
|
39 | )
|
40 |
|
41 | return args
|
42 | }
|
43 |
|
44 | export default params
|