forked from gatsbyjs/gatsby
-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathupgrade-babel.js
51 lines (44 loc) · 1.32 KB
/
upgrade-babel.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
// Convenience script to bump all @babel dependencies of all packages to the latest version
const fs = require(`fs`)
const execa = require(`execa`)
const packages = fs.readdirSync(`./packages`)
const versions = {}
function getLatestMinor(pkg) {
let version
if (!versions[pkg]) {
version = execa.sync(`npm`, [`show`, pkg, `version`]).stdout
// e.g. 7.14.5 -> 7.14.0
const parts = version.split(`.`)
parts[parts.length - 1] = 0
version = parts.join(`.`)
versions[pkg] = version
console.log(`latest ${pkg} minor: `, version)
} else {
version = versions[pkg]
}
return version
}
function replace(deps, library) {
if (deps && deps[library]) {
deps[library] = `^` + getLatestMinor(library)
}
}
packages.forEach(packageName => {
const path = `${process.cwd()}/packages/${packageName}/package.json`
fs.readFile(path, (err, json) => {
if (err) return
const pkg = JSON.parse(json)
Object.keys(pkg.dependencies || {}).forEach(dep => {
if (dep.startsWith(`@babel/`)) {
replace(pkg.dependencies, dep)
}
})
Object.keys(pkg.devDependencies || {}).forEach(dep => {
if (dep.startsWith(`@babel/`)) {
replace(pkg.devDependencies, dep)
}
})
console.log(`updating ${path}`)
fs.writeFileSync(path, JSON.stringify(pkg, null, 2) + `\n`)
})
})