function parseChangelog(text) {
let version = null;
let category = null;
const entries = [];
for(const line of text.split(/\n+/).filter(d => d.trim())) {
switch(line.match(/^[^ ]+ /)?.[0]) {
case "# ": continue;
case "## ": version = line.slice(3); category = null; continue;
case "### ": category = line.slice(4); continue;
case "- ": {
const _line = line.slice(2);
const split = _line.match(/^[a-z\s]+: /)?.[0].length;
const type = split ? _line.slice(0, split - 2).trim() : null;
const content = split ? _line.slice(split) : _line;
entries.push({version, category, type, content});
break;
}
default:
entries.push({version, category, type: null, content: line});
}
}
return entries;
}