1 | #!/usr/bin/env node
|
2 | const fs = require('fs')
|
3 | const path = require('path')
|
4 | const childProcess = require('child_process')
|
5 | const chalk = require('chalk')
|
6 | const commander = require('commander')
|
7 |
|
8 | const pkg = require('./package.json')
|
9 |
|
10 | commander.version(pkg.version)
|
11 | .option('-g --global', 'upgrade packages globally', false)
|
12 | .parse(process.argv)
|
13 |
|
14 | const logError = (message) => {
|
15 | console.log(chalk.red('[Error]: ' + message))
|
16 | }
|
17 | const logInfo = (message) => {
|
18 | console.log(chalk.blue('[Start]: ' + message))
|
19 | }
|
20 | const logSuccess = (message) => {
|
21 | console.log(chalk.green('[Done]: ' + message))
|
22 | }
|
23 |
|
24 | let packagePath = null
|
25 | let global = ''
|
26 | if (commander.global) {
|
27 | global = ' global'
|
28 | packagePath = path.resolve(process.env[process.platform === 'win32' ? 'USERPROFILE' : 'HOME'], '.config', 'yarn', 'global', 'package.json')
|
29 | } else {
|
30 | packagePath = path.resolve(process.cwd(), 'package.json')
|
31 | }
|
32 |
|
33 | if (!fs.existsSync(packagePath)) {
|
34 | logError('Cannot find package.json file in the current directory')
|
35 | process.exit(1)
|
36 | }
|
37 |
|
38 | const packageJson = require(packagePath)
|
39 | const options = {
|
40 | dependencies: '',
|
41 | devDependencies: ' --dev',
|
42 | peerDependencies: ' --peer'
|
43 | }
|
44 | let ignorePkgs = []
|
45 | if(packageJson['yarn-upgrade-all'] && packageJson['yarn-upgrade-all'].ignore) {
|
46 | ignorePkgs = packageJson['yarn-upgrade-all'].ignore
|
47 | }
|
48 | for (let element of ['dependencies', 'devDependencies', 'peerDependencies']) {
|
49 | if (packageJson[element]) {
|
50 | const option = options[element]
|
51 | const packages = Object.keys(packageJson[element])
|
52 | for (let pkg of packages) {
|
53 | if(ignorePkgs.indexOf(pkg) > -1) {
|
54 | continue
|
55 | }
|
56 | if(element === 'peerDependencies' && packageJson.devDependencies && packageJson.devDependencies[pkg]) {
|
57 | continue
|
58 | }
|
59 | let command = `yarn${global} remove ${pkg} && yarn${global} add${option} ${pkg}`
|
60 | if(element === 'devDependencies' && packageJson.peerDependencies && packageJson.peerDependencies[pkg]) {
|
61 | command = `yarn${global} remove ${pkg} && yarn${global} add --peer ${pkg} && yarn${global} add --dev ${pkg}`
|
62 | }
|
63 | try {
|
64 | logInfo(command)
|
65 | childProcess.execSync(command, { stdio: [] })
|
66 | logSuccess(command)
|
67 | } catch (e) {
|
68 | logError(`${command} - ${e}`)
|
69 | }
|
70 | }
|
71 | }
|
72 | }
|