import * as ghc from '../index'; import * as fs from 'fs'; async function main() { const store = await ghc.Store.openOrCreate('./changelog.json', './', 'autosave'); const parsedCommits = await ghc.parseUntrackedCommits(store); const formatted = await ghc.formatParsedCommits(store, parsedCommits, async (x) => { const messages = x.message.split(';').map(y => y.trim()); const categorized: ghc.ChangelogMessages = {}; const defaultCategory = 'log'; for (const msg of messages) { const [ category, text ] = msg.includes(':') ? msg.split(':') : [ defaultCategory, msg ]; if (!(category in categorized)) categorized[category] = []; categorized[category].push(text.trim()); } return categorized; }); const formated2 = await Promise.all(formatted.map(async f => { const packageFile = await ghc.fileContentString(store, f.commitHash, 'package.json'); const packageVersion: string = JSON.parse(packageFile).version; return { ...f, messages: { [packageVersion]: f.messages } } })); const grouped = await ghc.reduceUnreleasedCommits(store, formated2); const grouped2 = grouped.map(g => ({ ...g, messages: ghc.groupEveryKeyByKeys(g.messages) })); const changelog = await ghc.toChangelog(store, grouped2); const rendered = (store.data.changelog as typeof changelog).sort((a, b) => b.datetimeUTC - a.datetimeUTC).map(entry => join_markdown([ `Branch: ${entry.branchName}, ${new Date(entry.datetimeUTC * 1000).toLocaleString()}`, '', Object.entries(entry.messages).map(([ packageVersion, categorized ]) => [ `# ${packageVersion}`, Object.entries(categorized).map(([ category, messages ]) => [ `## ${category}`, messages.map(message => `* ${message}`) ]), '' ]) ])).join(' \n--- \n'); fs.writeFile('./changelog.md', rendered, 'utf8', err => { if (err) console.error(err); else console.log('ok'); }); } main(); function join_markdown(x: any): string { if (Array.isArray(x)) { return x.map(join_markdown).join(' \n'); } return x; }