45 lines
938 B
JavaScript
45 lines
938 B
JavaScript
|
import fs from "fs-extra";
|
||
|
import path from "path";
|
||
|
|
||
|
const UPDATE_LOG = "UPDATELOG.md";
|
||
|
|
||
|
// parse the UPDATELOG.md
|
||
|
export async function resolveUpdateLog(tag) {
|
||
|
const cwd = process.cwd();
|
||
|
|
||
|
const reTitle = /^## v[\d\.]+/;
|
||
|
const reEnd = /^---/;
|
||
|
|
||
|
const file = path.join(cwd, UPDATE_LOG);
|
||
|
|
||
|
if (!(await fs.pathExists(file))) {
|
||
|
throw new Error("could not found UPDATELOG.md");
|
||
|
}
|
||
|
|
||
|
const data = await fs.readFile(file).then((d) => d.toString("utf8"));
|
||
|
|
||
|
const map = {};
|
||
|
let p = "";
|
||
|
|
||
|
data.split("\n").forEach((line) => {
|
||
|
if (reTitle.test(line)) {
|
||
|
p = line.slice(3).trim();
|
||
|
if (!map[p]) {
|
||
|
map[p] = [];
|
||
|
} else {
|
||
|
throw new Error(`Tag ${p} dup`);
|
||
|
}
|
||
|
} else if (reEnd.test(line)) {
|
||
|
p = "";
|
||
|
} else if (p) {
|
||
|
map[p].push(line);
|
||
|
}
|
||
|
});
|
||
|
|
||
|
if (!map[tag]) {
|
||
|
throw new Error(`could not found "${tag}" in UPDATELOG.md`);
|
||
|
}
|
||
|
|
||
|
return map[tag].join("\n").trim();
|
||
|
}
|