UNPKG

@kazupon/lerna-changelog

Version:

Generate a changelog for a lerna monorepo

53 lines (52 loc) 1.5 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.listCommits = exports.parseLogMessage = exports.lastTag = exports.listTagNames = exports.changedPaths = void 0; const execa = require('execa'); async function changedPaths(sha) { const result = await execa('git', [ 'show', '-m', '--name-only', '--pretty=format:', '--first-parent', sha ]); return result.stdout.split('\n'); } exports.changedPaths = changedPaths; function listTagNames() { return execa.sync('git', ['tag']).stdout.split('\n').filter(Boolean); } exports.listTagNames = listTagNames; function lastTag() { return execa.sync('git', ['describe', '--abbrev=0', '--tags']).stdout; } exports.lastTag = lastTag; function parseLogMessage(commit) { const parts = commit.match(/hash<(.+)> ref<(.*)> message<(.*)> date<(.*)>/) || []; if (!parts || parts.length === 0) { return null; } return { sha: parts[1], refName: parts[2], summary: parts[3], date: parts[4] }; } exports.parseLogMessage = parseLogMessage; function listCommits(from, to = '') { return execa .sync('git', [ 'log', '--oneline', '--pretty=hash<%h> ref<%D> message<%s> date<%cd>', '--date=short', `${from}..${to}` ]) .stdout.split('\n') .filter(Boolean) .map(parseLogMessage) .filter(Boolean); } exports.listCommits = listCommits;