@jwpkg/gitversion
Version:
Gitversion is a complete customizable git-based release management system
79 lines • 6.62 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.ConventionalCommitFooterType = void 0;
exports.parseConventionalCommits = parseConventionalCommits;
exports.parseConventionalCommit = parseConventionalCommit;
exports.isFooterStart = isFooterStart;
var ConventionalCommitFooterType;
(function (ConventionalCommitFooterType) {
ConventionalCommitFooterType[ConventionalCommitFooterType["note"] = 0] = "note";
ConventionalCommitFooterType[ConventionalCommitFooterType["ref"] = 1] = "ref";
})(ConventionalCommitFooterType || (exports.ConventionalCommitFooterType = ConventionalCommitFooterType = {}));
function parseConventionalCommits(commits, platform) {
const sanitizedCommits = commits.map(platform.stripMergeMessage);
return sanitizedCommits.map(parseConventionalCommit).filter((c) => !!c);
}
function parseConventionalCommit(commit) {
const headerRegex = /^([a-zA-Z]+)(\([\w\-\\/.]+\))?(!)?:\s(.+)([\s\S]*)/i;
const lines = commit.message.split('\n');
const header = lines.splice(0, 1).join('\n').trim();
const result = headerRegex.exec(header);
if (!result) {
return undefined;
}
const currentCommit = {
type: result[1].toLowerCase(),
scope: result[2]?.replace(/[()]/g, ''),
breaking: result[3] === '!',
message: result[4],
body: '',
hash: commit.hash,
shortHash: commit.hash.substring(0, 7),
footers: [],
};
const footers = [];
let isBody = true;
let currentElement = '';
while (lines.length > 0) {
if (isFooterStart(lines[0])) {
if (isBody) {
currentCommit.body = currentElement.trim();
}
else {
footers.push(currentElement.trim());
}
currentElement = '';
isBody = false;
}
currentElement += `\n${lines.splice(0, 1)}`;
}
if (isBody) {
currentCommit.body = currentElement.trim();
}
else {
footers.push(currentElement.trim());
}
for (const footer of footers) {
if (footer.startsWith('BREAKING CHANGE: ')) {
currentCommit.breaking = true;
currentCommit.breakingReason = footer.replace(/^BREAKING CHANGE: /, '');
}
else {
const regex = /(^[\w-]+)(:\s|\s#)/i;
const footerStart = regex.exec(footer);
if (footerStart) {
currentCommit.footers.push({
type: footerStart[2].startsWith(':') ? ConventionalCommitFooterType.note : ConventionalCommitFooterType.ref,
name: footerStart[1],
value: footer.replace(footerStart[0], ''),
});
}
}
}
return currentCommit;
}
function isFooterStart(line) {
const footerRegex = /^[\w-]+(:\s|\s#)\w+|^BREAKING CHANGE:\s/i;
return footerRegex.test(line);
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udmVudGlvbmFsLWNvbW1taXQtdXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29yZS9jb252ZW50aW9uYWwtY29tbW1pdC11dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUEyQkEsNERBR0M7QUFFRCwwREErREM7QUFFRCxzQ0FHQztBQWpHRCxJQUFZLDRCQUdYO0FBSEQsV0FBWSw0QkFBNEI7SUFDdEMsK0VBQUksQ0FBQTtJQUNKLDZFQUFHLENBQUE7QUFDTCxDQUFDLEVBSFcsNEJBQTRCLDRDQUE1Qiw0QkFBNEIsUUFHdkM7QUFxQkQsU0FBZ0Isd0JBQXdCLENBQUMsT0FBb0IsRUFBRSxRQUFzQjtJQUNuRixNQUFNLGdCQUFnQixHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDakUsT0FBTyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQTJCLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkcsQ0FBQztBQUVELFNBQWdCLHVCQUF1QixDQUFDLE1BQWlCO0lBQ3ZELE1BQU0sV0FBVyxHQUFHLHFEQUFxRCxDQUFDO0lBQzFFLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBRXpDLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNwRCxNQUFNLE1BQU0sR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBRXhDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNaLE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFFRCxNQUFNLGFBQWEsR0FB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