UNPKG

1.54 kBJavaScriptView Raw
1const path = require('path')
2const inquirer = require('inquirer')
3
4const { logger, util } = require('../common')
5
6/**
7 * Confirm destination path
8 * @param {String} project project name
9 * @param {Boolean} force overwrite force, default: false
10 */
11module.exports = async (project = '.', force = false) => {
12 const dest = path.resolve(project)
13
14 // not exists
15 if (!await util.exists(dest)) return dest
16
17 // force mode
18 if (force) {
19 await util.rimraf(dest)
20 return dest
21 }
22
23 // already exist file
24 if (await util.isFile(dest)) throw new Error(`Cannot init ${project}: File exists.`)
25
26 // clear console
27 logger.clear()
28
29 // confirm
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 // cancel
40 if (!sure) throw new Error('You have to cancel the init task.')
41
42 // empty dir
43 if (await util.isEmpty(dest)) return dest
44
45 // choose
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 // cancel
58 if (choose === 'cancel') throw new Error('You have to cancel the init task.')
59
60 // overwrite
61 if (choose === 'overwrite') {
62 await util.rimraf(dest)
63 }
64
65 return dest
66}