1 | 'use strict'
|
2 |
|
3 | const _ = require('lodash')
|
4 | const { spawn } = require('child-process-promise')
|
5 | const inquirer = require('inquirer')
|
6 |
|
7 | const desc = 'Run config initialization wizard'
|
8 |
|
9 | function getPeerDependencies(pkg) {
|
10 | switch (pkg) {
|
11 | case 'eslint-config-concise':
|
12 | return [
|
13 | 'eslint',
|
14 | 'eslint-plugin-eslint-comments',
|
15 | 'eslint-plugin-html',
|
16 | 'eslint-plugin-markdown',
|
17 | 'eslint-plugin-node',
|
18 | 'eslint-plugin-promise',
|
19 | ]
|
20 | case 'eslint-config-concise-esnext':
|
21 | return getPeerDependencies('eslint-config-concise').concat([
|
22 | 'eslint-plugin-babel',
|
23 | ])
|
24 | case 'eslint-config-concise-react':
|
25 | return ['eslint', 'eslint-plugin-react']
|
26 | case 'eslint-config-control-freak':
|
27 | return getPeerDependencies('eslint-config-concise').concat([
|
28 | 'eslint-plugin-filenames',
|
29 | 'eslint-plugin-import',
|
30 | ])
|
31 | default:
|
32 | }
|
33 | return []
|
34 | }
|
35 |
|
36 | async function handler() {
|
37 | const ui = new inquirer.ui.BottomBar()
|
38 | const answers = await inquirer.prompt([
|
39 | {
|
40 | type: 'checkbox',
|
41 | name: 'packages',
|
42 | message: 'Which packages do you want to install?',
|
43 | default: ['eslint-config-concise'],
|
44 | choices: [
|
45 | 'csc',
|
46 | 'eslint-config-concise',
|
47 | 'eslint-config-concise-react',
|
48 | 'eslint-config-concise-style',
|
49 | 'eslint-config-control-freak',
|
50 | ],
|
51 | },
|
52 | ])
|
53 |
|
54 | const installPackages = _.uniq(
|
55 | _.flatMap(answers.packages, pkg => getPeerDependencies(pkg)).concat(
|
56 | answers.packages,
|
57 | ),
|
58 | )
|
59 | const npmArgs = installPackages.reduce((acc, pkg) => [...acc, pkg], [
|
60 | 'install',
|
61 | '--color',
|
62 | 'always',
|
63 | '-D',
|
64 | ])
|
65 | await spawn('npm', npmArgs, { stdio: ['inherit', ui.log, 'inherit'] })
|
66 | }
|
67 |
|
68 | module.exports = {
|
69 | desc,
|
70 | handler,
|
71 | }
|