mirror of
https://github.com/clash-verge-rev/clash-verge-rev.git
synced 2026-04-13 05:20:28 +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 = 'Changelog.md'
|
|
|
|
// parse the Changelog.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 Changelog.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 Changelog.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 Changelog.md')
|
|
}
|
|
|
|
const data = await fsp.readFile(file, 'utf-8')
|
|
|
|
const reTitle = /^## v[\d.]+/
|
|
const reEnd = /^---/
|
|
|
|
let isCapturing = false
|
|
const 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 Changelog.md')
|
|
}
|
|
|
|
return content.join('\n').trim()
|
|
}
|