Skip to content

Instantly share code, notes, and snippets.

@insin
Last active June 27, 2020 23:54
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save insin/ab3aadcbb2e823dc22f11348fcd95ef1 to your computer and use it in GitHub Desktop.
Save insin/ab3aadcbb2e823dc22f11348fcd95ef1 to your computer and use it in GitHub Desktop.
Generate changelog Markdown for pinned npm packages in a package.json diff
/**
* 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)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment