3933905d66
Remove use server from stream helper to fix RSC errors; support OPENAI_API_BASE alias; render HTML tables via rehype-raw with gua-image API; expand regions to 356 prefecture-level cities. Co-authored-by: Cursor <cursoragent@cursor.com>
62 lines
1.5 KiB
TypeScript
62 lines
1.5 KiB
TypeScript
/** 客户端/服务端均可用的卦名工具(不含 fs) */
|
|
|
|
export type LearnVariant = "traditional" | "simplified";
|
|
|
|
export function guaNumFromMark(guaMark: string): string {
|
|
return guaMark.split(".")[0];
|
|
}
|
|
|
|
export function getGuaNumber(guaMark: string): number {
|
|
return parseInt(guaMark.split(".")[0], 10);
|
|
}
|
|
|
|
export function getGuaName(guaMark: string): string {
|
|
return guaMark.split(".").slice(1).join(".");
|
|
}
|
|
|
|
export function stripFrontmatter(content: string): string {
|
|
if (!content.startsWith("---")) {
|
|
return content;
|
|
}
|
|
const end = content.indexOf("---", 3);
|
|
if (end === -1) {
|
|
return content;
|
|
}
|
|
return content.slice(end + 3).trimStart();
|
|
}
|
|
|
|
export function extractZhangMingRen(guaDetail: string): string | undefined {
|
|
return guaDetail
|
|
.match(/(\*\*台灣張銘仁[\s\S]*?)(?=周易第\d+卦)/)?.[1]
|
|
?.replaceAll("\n\n", "\n");
|
|
}
|
|
|
|
export function extractChangeDetails(
|
|
guaDetail: string,
|
|
guaChange: string,
|
|
guaTitle: string,
|
|
): string[] {
|
|
const changeList: string[] = [];
|
|
if (guaChange === "无变爻") {
|
|
return changeList;
|
|
}
|
|
|
|
const changePart = guaChange.includes(":")
|
|
? guaChange.split(":").slice(1).join(":").trim()
|
|
: guaChange.trim();
|
|
if (!changePart) {
|
|
return changeList;
|
|
}
|
|
|
|
changePart.split(",").forEach((change) => {
|
|
const detail = guaDetail
|
|
.match(`(\\*\\*${change}變卦[\\s\\S]*?)(?=${guaTitle}|$)`)?.[1]
|
|
?.replaceAll("\n\n", "\n");
|
|
if (detail) {
|
|
changeList.push(detail.trim());
|
|
}
|
|
});
|
|
|
|
return changeList;
|
|
}
|