| 
									
										
										
										
											2017-07-21 17:18:47 +02:00
										 |  |  | // Import node modules.
 | 
					
						
							|  |  |  | const { exec } = require('child_process'); | 
					
						
							|  |  |  | const path = require('path'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | const _ = require('lodash'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | const addCheckMark = require('./helpers/checkmark'); | 
					
						
							|  |  |  | const animateProgress = require('./helpers/progress'); | 
					
						
							|  |  |  | const pkg = require(path.resolve(__dirname, '..', '..', '..', 'package.json')); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | process.stdin.resume(); | 
					
						
							|  |  |  | process.stdin.setEncoding('utf8'); | 
					
						
							|  |  |  | let interval; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // List of necessary dependencies.
 | 
					
						
							|  |  |  | const helperDependencies = [ | 
					
						
							|  |  |  |   'cross-env', | 
					
						
							|  |  |  |   'plop', | 
					
						
							|  |  |  |   'prettier', | 
					
						
							|  |  |  |   'rimraf', | 
					
						
							|  |  |  |   'webpack', | 
					
						
							|  |  |  | ]; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /** | 
					
						
							|  |  |  |  * Define the list of necessary dependencies, with their respective versions. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | const necessaryDependencies = _.map( | 
					
						
							|  |  |  |   _.pickBy(pkg.dependencies, (version, devDependency) => | 
					
						
							|  |  |  |     _.includes(helperDependencies, devDependency) || _.startsWith(devDependency, 'eslint') | 
					
						
							|  |  |  |   ), (version, devDependency) => | 
					
						
							|  |  |  |     `${devDependency}@${version}` | 
					
						
							|  |  |  | ); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /** | 
					
						
							|  |  |  |  * Install necessary dependencies. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | const installNecessaryDeps = () => { | 
					
						
							|  |  |  |   process.stdout.write('\nInstalling necessary dependencies'); | 
					
						
							|  |  |  |   interval = animateProgress('Installing necessary dependencies'); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-07-24 21:14:07 +02:00
										 |  |  |   // Exec installation.
 | 
					
						
							|  |  |  |   exec(`npm install ${necessaryDependencies.join(' ')} --save-dev`, addCheckMark.bind(null, installDepsCallback)); | 
					
						
							| 
									
										
										
										
											2017-07-21 17:18:47 +02:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /** | 
					
						
							|  |  |  |  * Callback function after installing dependencies. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | const installDepsCallback = (error) => { | 
					
						
							|  |  |  |   clearInterval(interval); | 
					
						
							|  |  |  |   process.stdout.write('\n'); | 
					
						
							|  |  |  |   if (error) { | 
					
						
							|  |  |  |     process.stderr.write(error); | 
					
						
							|  |  |  |     process.stdout.write('\n'); | 
					
						
							|  |  |  |     process.exit(1); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   process.exit(0); | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | installNecessaryDeps(); |