UNPKG

1.78 kBJavaScriptView Raw
1'use strict'
2
3const _ = require('lodash')
4const { spawn } = require('child-process-promise')
5const inquirer = require('inquirer')
6
7const desc = 'Run config initialization wizard'
8
9function 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
36async 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
68module.exports = {
69 desc,
70 handler,
71}