UNPKG

2.27 kBJavaScriptView Raw
1#!/usr/bin/env node
2const fs = require('fs')
3const path = require('path')
4const childProcess = require('child_process')
5const chalk = require('chalk')
6const commander = require('commander')
7
8const pkg = require('./package.json')
9
10commander.version(pkg.version)
11 .option('-g --global', 'upgrade packages globally', false)
12 .parse(process.argv)
13
14const logError = (message) => {
15 console.log(chalk.red('[Error]: ' + message))
16}
17const logInfo = (message) => {
18 console.log(chalk.blue('[Start]: ' + message))
19}
20const logSuccess = (message) => {
21 console.log(chalk.green('[Done]: ' + message))
22}
23
24let packagePath = null
25let global = ''
26if (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
33if (!fs.existsSync(packagePath)) {
34 logError('Cannot find package.json file in the current directory')
35 process.exit(1)
36}
37
38const packageJson = require(packagePath)
39const options = {
40 dependencies: '',
41 devDependencies: ' --dev',
42 peerDependencies: ' --peer'
43}
44let ignorePkgs = []
45if(packageJson['yarn-upgrade-all'] && packageJson['yarn-upgrade-all'].ignore) {
46 ignorePkgs = packageJson['yarn-upgrade-all'].ignore
47}
48for (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}