-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathversionProject.js
More file actions
91 lines (72 loc) · 1.71 KB
/
Copy pathversionProject.js
File metadata and controls
91 lines (72 loc) · 1.71 KB
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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
import fs from "fs-extra"
import { join } from "path"
import semver from "semver"
module.exports = function(dot) {
if (dot.versionProject) {
return
}
dot.any("versionProject", versionProject)
}
async function versionProject(prop, arg, dot) {
const { paths } = arg,
baseProp = prop.slice(0, -1)
let { path } = arg
if (!path.match(/\/package\.json$/)) {
path = join(path, "package.json")
}
var pkg
if (await fs.pathExists(path)) {
pkg = await fs.readJson(path)
}
if (pkg) {
const {
dependencies,
devDependencies,
name,
version,
} = pkg
await Promise.all([
setVersions(dot, { [name]: version }),
setVersions(dot, dependencies),
setVersions(dot, devDependencies),
])
}
await dot.wait(baseProp, "gatherVersions", {
count: paths.length,
})
if (pkg) {
const { dependencies, devDependencies } = pkg
for (const name in dependencies) {
dependencies[name] = dot.get("versions", name)
}
for (const name in devDependencies) {
devDependencies[name] = dot.get("versions", name)
}
await fs.writeJson(path, pkg, { spaces: 2 })
}
}
async function setVersions(dot, deps = {}) {
return Promise.all(
Object.keys(deps).map(name => {
return dot.set("versions", name, current => {
let version = fixDep(deps[name])
if (current) {
version = semver.gt(current, version)
? current
: version
}
return version
})
})
)
}
function fixDep(dep) {
return dep
? semver.coerce(dep).version + depHyphen(dep)
: "0.0.0"
}
function depHyphen(dep) {
return dep && dep.indexOf("-") > -1
? "-" + dep.split(/-/)[1]
: ""
}