1 | const path = require('path')
|
2 | const inquirer = require('inquirer')
|
3 |
|
4 | const { logger, util } = require('../common')
|
5 |
|
6 |
|
7 |
|
8 |
|
9 |
|
10 |
|
11 | module.exports = async (project = '.', force = false) => {
|
12 | const dest = path.resolve(project)
|
13 |
|
14 |
|
15 | if (!await util.exists(dest)) return dest
|
16 |
|
17 |
|
18 | if (force) {
|
19 | await util.rimraf(dest)
|
20 | return dest
|
21 | }
|
22 |
|
23 |
|
24 | if (await util.isFile(dest)) throw new Error(`Cannot init ${project}: File exists.`)
|
25 |
|
26 |
|
27 | logger.clear()
|
28 |
|
29 |
|
30 | const { sure } = await inquirer.prompt({
|
31 | name: 'sure',
|
32 | type: 'confirm',
|
33 | default: false,
|
34 | message: dest === process.cwd()
|
35 | ? 'Generate project in current directory?'
|
36 | : 'Target directory already exists. Continue?'
|
37 | })
|
38 |
|
39 |
|
40 | if (!sure) throw new Error('You have to cancel the init task.')
|
41 |
|
42 |
|
43 | if (await util.isEmpty(dest)) return dest
|
44 |
|
45 |
|
46 | const { choose } = await inquirer.prompt({
|
47 | name: 'choose',
|
48 | type: 'list',
|
49 | message: `Target directory is not empty. Pick an action:`,
|
50 | choices: [
|
51 | { name: 'Merge', value: 'merge' },
|
52 | { name: 'Overwrite', value: 'overwrite' },
|
53 | { name: 'Cancel', value: 'cancel' }
|
54 | ]
|
55 | })
|
56 |
|
57 |
|
58 | if (choose === 'cancel') throw new Error('You have to cancel the init task.')
|
59 |
|
60 |
|
61 | if (choose === 'overwrite') {
|
62 | await util.rimraf(dest)
|
63 | }
|
64 |
|
65 | return dest
|
66 | }
|