@eighty4/changelog
Version:
Changelog utilities for CICD
46 lines (45 loc) • 1.56 kB
JavaScript
import { BadChangelogError, CliError } from "./errors.js";
import { inspectChangelog } from "./inspect.js";
import { readChangelogFile } from "./readChangelog.js";
export function parseArgs(args) {
const opts = {
changelogFile: 'CHANGELOG.md',
};
let shifted;
while ((shifted = args.shift())) {
switch (shifted) {
case '--changelog-file':
if (typeof (shifted = args.shift()) === 'undefined') {
throw new CliError('--changelog-file value is missing');
}
opts.changelogFile = shifted;
break;
default:
throw new CliError(`bad arg \`${shifted}\``);
}
}
return opts;
}
export async function checkUnreleasedFromCliArgs(args) {
return await checkUnreleased(parseArgs(args));
}
export async function checkUnreleased(opts) {
const changelogContent = await readChangelogFile(opts.changelogFile);
const inspectResult = inspectChangelog(changelogContent);
if (inspectResult.errors.length) {
throw new BadChangelogError(opts.changelogFile, inspectResult.errors);
}
const notes = /## \[Unreleased\](?<notes>[\s\S]+?)(?=\s+(## |\[))/
.exec(changelogContent)
?.groups?.notes?.trim();
if (!notes?.length) {
return false;
}
return (notes.split(/\r?\n/).filter(l => {
if (l.startsWith('### ')) {
return false;
}
l = l.trim();
return l.length && !/^(\*|\-|\+)\s\?\?\?$/.test(l);
}).length > 0);
}