UNPKG

standard-commit

Version:
92 lines (91 loc) 3.04 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.sanitizeCommitMessage = exports.parseCommitMessage = exports.parseIssues = exports.parseBreaking = exports.parseBody = exports.parseCommitHeader = exports.unwrap = void 0; const linewrap_1 = __importDefault(require("linewrap")); const os_1 = require("os"); const wrapLines = (0, linewrap_1.default)(72); const splitLinePattern = /$/gm; const splitWordsPattern = /\s+/gm; const headerPattern = /^(\w*)(?:\(([\w$.\-* ]*)\))?: (.*)/; function unwrap(block) { return block.split(splitWordsPattern).join(' '); } exports.unwrap = unwrap; function parseCommitHeader(message) { const match = message.match(headerPattern); let type, scope, subject; if (match) { type = match[1]; scope = match[2]; subject = match[3]; } else { const header = message.split(splitLinePattern)[0]; subject = header && header.trim(); } const commit = { type, subject }; if (scope) commit.scope = scope; return commit; } exports.parseCommitHeader = parseCommitHeader; function parseBody(message) { const bodyLines = message.split(/\r?\n/); const numlines = bodyLines.length; const body = []; let block = null; for (let i = 1; i < numlines; i++) { const line = bodyLines[i]; if (/^(BREAKING CHANGE|close|closes|fix|fixes|resolve|resolves)./.test(line)) { break; } if (line.match(/^\s*$/)) { block && body.push(unwrap(wrapLines(block))); block = null; } else { block = block ? [block, line].join(os_1.EOL) : line; } } return body.length ? body : undefined; } exports.parseBody = parseBody; function parseBreaking(message) { const match = /^BREAKING CHANGE:(.*)$/gm.exec(message); if (match && match[1]) return match[1].trim(); } exports.parseBreaking = parseBreaking; function parseIssues(message) { const r = /^(close|closes|fix|fixes|resolve|resolves)\s+(.*)$/gm; const issues = []; let match; while ((match = r.exec(message)) !== null) { issues.push(match[2].trim()); } return issues.length ? issues : undefined; } exports.parseIssues = parseIssues; function parseCommitMessage(message) { const text = sanitizeCommitMessage(message); const commit = parseCommitHeader(text); const body = parseBody(text); const breaking = parseBreaking(text); const issues = parseIssues(text); if (breaking) commit.breaking = breaking; if (issues) commit.issues = issues; if (body) commit.body = body; return commit; } exports.parseCommitMessage = parseCommitMessage; function sanitizeCommitMessage(message) { // strip comments return message.replace(/^#.*$/gm, ''); } exports.sanitizeCommitMessage = sanitizeCommitMessage;