@wgoo/cli
Version:
Wgoo Cli 是一个 React 组件库构建工具,通过 Wgoo Cli 可以快速搭建一套功能完备的 React 组件库。
75 lines (63 loc) • 1.89 kB
JavaScript
const { join } = require('path');
const { ROOT } = require('../common/constant');
const { ora, slimPath } = require('../common/logger');
const { createWriteStream, readFileSync } = require('fs-extra');
const conventionalChangelog = require('conventional-changelog');
const DIST_FILE = join(ROOT, './changelog.generated.md');
const MAIN_TEMPLATE = join(__dirname, '../../template/changelog-main.hbs');
const HEADER_TEMPALTE = join(__dirname, '../../template/changelog-header.hbs');
const COMMIT_TEMPALTE = join(__dirname, '../../template/changelog-commit.hbs');
const mainTemplate = readFileSync(MAIN_TEMPLATE, 'utf-8');
const headerPartial = readFileSync(HEADER_TEMPALTE, 'utf-8');
const commitPartial = readFileSync(COMMIT_TEMPALTE, 'utf-8');
function formatType(type) {
const MAP = {
fix: 'Bug Fixes',
feat: 'Feature',
docs: 'Document',
types: 'Types',
};
return MAP[type] || type;
}
function transform(item) {
if (item.type === 'chore' || item.type === 'test') {
return null;
}
item.type = formatType(item.type);
if (item.hash) {
item.shortHash = item.hash.slice(0, 6);
}
if (item.references.length) {
item.references.forEach((ref) => {
if (ref.issue && item.subject) {
item.subject = item.subject.replace(` (#${ref.issue})`, '');
}
});
}
return item;
}
async function changelog() {
const spinner = ora('Generating changelog...').start();
return new Promise(resolve => {
conventionalChangelog(
{
preset: 'angular',
},
null,
null,
null,
{
mainTemplate,
headerPartial,
commitPartial,
transform,
}
)
.pipe(createWriteStream(DIST_FILE))
.on('close', () => {
spinner.succeed(`Changelog generated at ${slimPath(DIST_FILE)}`);
resolve();
});
});
}
module.exports = { changelog }