conventional-changelog
Version:
Generate a changelog from git metadata.
118 lines • 11.3 kB
JavaScript
import { createReadStream, createWriteStream } from 'fs';
import { readOptions, option, flag, alias, autocase } from 'argue-cli';
import { parseOptions, parseCommitsOptions, parseTagsOptions } from './options.js';
import { loadDataFile, isFileExists } from './utils.js';
export function readFlags() {
return readOptions(option(alias('infile', 'i'), String), option(alias('outfile', 'o'), String), flag('stdout'), option(alias('preset', 'p'), String), option(alias('pkg', 'k'), String), flag(alias('append', 'a')), option(autocase(alias('releaseCount', 'r')), Number), flag(autocase('skipUnstable')), flag(autocase(alias('outputUnreleased', 'u'))), flag(alias('verbose', 'v')), option(alias('config', 'n'), String), option(alias('context', 'c'), String), flag(autocase(alias('firstRelease', 'f'))), option(autocase(alias('lernaPackage', 'l')), String), option(autocase(alias('tagPrefix', 't')), String), option(autocase('commitPath'), String), option('from', String), option('to', String), flag('help'), flag('version'));
}
export async function runProgram(generator, flags) {
let { infile = 'CHANGELOG.md', outfile, stdout, verbose, pkg, preset, config, context } = flags;
generator.readPackage(pkg);
if (preset) {
generator.loadPreset(preset);
}
if (config) {
const configOptions = await loadDataFile(config);
if (configOptions.tags) {
generator.tags(configOptions.tags);
}
if (configOptions.commits || configOptions.parser) {
generator.commits(configOptions.commits || {}, configOptions.parser);
}
if (configOptions.writer) {
generator.writer(configOptions.writer);
}
}
if (context) {
const writerContext = await loadDataFile(context);
if (writerContext) {
generator.context(writerContext);
}
}
const options = parseOptions(flags);
if (options) {
generator.options(options);
}
const tagsOptions = parseTagsOptions(flags);
if (tagsOptions) {
generator.tags(tagsOptions);
}
const commitsOptions = parseCommitsOptions(flags);
if (commitsOptions) {
generator.commits(commitsOptions);
}
if (verbose) {
generator.options({
debug(namespace, payload) {
console.info(`[${namespace}]:`, payload);
},
warn(namespace, payload) {
console.warn(`[${namespace}]:`, payload);
}
});
}
outfile ||= infile;
const sameFile = !stdout && infile === outfile;
const changelog = generator.write();
const streams = [];
if (infile && options?.releaseCount !== 0) {
const isInfileExists = await isFileExists(infile);
const input = isInfileExists
? createReadStream(infile)
: [];
if (!isInfileExists && verbose) {
console.warn(`"${infile}" does not exist.`);
}
if (sameFile) {
if (options?.append) {
streams.push(changelog);
}
else {
const buffer = [];
for await (const chunk of changelog) {
buffer.push(chunk);
}
let newline = true;
for await (const chunk of input) {
if (newline) {
newline = false;
if (!String(chunk).startsWith('\n')) {
buffer.push('\n');
}
}
buffer.push(chunk);
}
streams.push(buffer);
}
}
else if (options?.append) {
streams.push(input, changelog);
}
else {
streams.push(changelog, input);
}
}
else {
streams.push(changelog);
}
const output = (outfile && !stdout
? createWriteStream(outfile, {
flags: sameFile && options?.append ? 'a' : 'w'
})
: process.stdout);
for (let i = 0, stream, newline; i < streams.length; i++) {
stream = streams[i];
newline = i > 0;
for await (const chunk of stream) {
if (newline) {
newline = false;
if (!String(chunk).startsWith('\n')) {
output.write('\n');
}
}
output.write(chunk);
}
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NsaS9jbGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUNBLE9BQU8sRUFFTCxnQkFBZ0IsRUFDaEIsaUJBQWlCLEVBQ2xCLE1BQU0sSUFBSSxDQUFBO0FBQ1gsT0FBTyxFQUNMLFdBQVcsRUFDWCxNQUFNLEVBQ04sSUFBSSxFQUNKLEtBQUssRUFDTCxRQUFRLEVBQ1QsTUFBTSxXQUFXLENBQUE7QUFLbEIsT0FBTyxFQUNMLFlBQVksRUFDWixtQkFBbUIsRUFDbkIsZ0JBQWdCLEVBQ2pCLE1BQU0sY0FBYyxDQUFBO0FBQ3JCLE9BQU8sRUFDTCxZQUFZLEVBQ1osWUFBWSxFQUNiLE1BQU0sWUFBWSxDQUFBO0FBRW5CLE1BQU0sVUFBVSxTQUFTO0lBQ3ZCLE9BQU8sV0FBVyxDQUNoQixNQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsRUFBRSxNQUFNLENBQUMsRUFDcEMsTUFBTSxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLEVBQUUsTUFBTSxDQUFDLEVBQ3JDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFDZCxNQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsRUFBRSxNQUFNLENBQUMsRUFDcEMsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLEVBQUUsTUFBTSxDQUFDLEVBQ2pDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQzFCLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLGNBQWMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxFQUNwRCxJQUFJLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxDQUFDLEVBQzlCLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLGtCQUFrQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMs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