-
Notifications
You must be signed in to change notification settings - Fork 333
/
package-changelog.js
33 lines (26 loc) · 804 Bytes
/
package-changelog.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
/**
* Generates changelog Markdown for pinned npm packages in a package.json diff
*
* Usage: git diff package.json | node package-changelog.js
*/
let fs = require('fs')
let changes = fs.readFileSync(0, 'utf-8')
let re = /^(?<change>[+-])\s*"(?<pkg>[^"]+)"\s*:\s*"(?<version>\d+\.\d+\.\d+)"/gm
let deps = new Map()
Array.from(changes.matchAll(re)).forEach(({groups}) => {
if (!deps.has(groups.pkg)) {
deps.set(groups.pkg, {})
}
deps.get(groups.pkg)[groups.change] = groups.version
})
let changelog = Array.from(deps.keys())
.sort()
.map((pkg) => {
let versions = deps.get(pkg)
if (!versions.hasOwnProperty('-')) {
return `- ${pkg}: v${versions['+']}`
}
return `- ${pkg}: v${versions['-']} → [v${versions['+']}]()`
})
.join('\n')
console.log(changelog)