UNPKG

@eighty4/changelog

Version:
46 lines (45 loc) 1.56 kB
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); }