mirror of
https://github.com/clash-verge-rev/clash-verge-rev
synced 2025-05-05 03:03:46 +08:00
85 lines
1.7 KiB
JavaScript
85 lines
1.7 KiB
JavaScript
import fs from "fs";
|
|
import fsp from "fs/promises";
|
|
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 (!fs.existsSync(file)) {
|
|
throw new Error("could not found UPDATELOG.md");
|
|
}
|
|
|
|
const data = await fsp.readFile(file, "utf-8");
|
|
|
|
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();
|
|
}
|
|
|
|
export async function resolveUpdateLogDefault() {
|
|
const cwd = process.cwd();
|
|
const file = path.join(cwd, UPDATE_LOG);
|
|
|
|
if (!fs.existsSync(file)) {
|
|
throw new Error("could not found UPDATELOG.md");
|
|
}
|
|
|
|
const data = await fsp.readFile(file, "utf-8");
|
|
|
|
const reTitle = /^## v[\d\.]+/;
|
|
const reEnd = /^---/;
|
|
|
|
let isCapturing = false;
|
|
let content = [];
|
|
let firstTag = "";
|
|
|
|
for (const line of data.split("\n")) {
|
|
if (reTitle.test(line) && !isCapturing) {
|
|
isCapturing = true;
|
|
firstTag = line.slice(3).trim();
|
|
continue;
|
|
}
|
|
|
|
if (isCapturing) {
|
|
if (reEnd.test(line)) {
|
|
break;
|
|
}
|
|
content.push(line);
|
|
}
|
|
}
|
|
|
|
if (!firstTag) {
|
|
throw new Error("could not found any version tag in UPDATELOG.md");
|
|
}
|
|
|
|
return content.join("\n").trim();
|
|
}
|