lobe-chat
38 строк · 1.1 Кб
1import { readFileSync, writeFileSync } from 'node:fs';
2import remarkGfm from 'remark-gfm';
3import remarkParse from 'remark-parse';
4import { unified } from 'unified';
5import { visit } from 'unist-util-visit';
6
7import { SPLIT } from './const';
8
9export const updateDocs = (path: string, content: string) => {
10const md = readFileSync(path, 'utf8');
11const mds = md.split(SPLIT);
12mds[1] = [' ', content, ' '].join('\n\n');
13const result = mds.join(SPLIT);
14writeFileSync(path, result, 'utf8');
15};
16
17export const convertMarkdownToMdast = async (md: string) => {
18// @ts-ignore
19return unified().use(remarkParse).use(remarkGfm).parse(md.trim());
20};
21
22export const getTitle = async (path: string) => {
23const md = readFileSync(path, 'utf8');
24const mdast: any = await convertMarkdownToMdast(md);
25
26let title = '';
27visit(mdast, 'heading', (node) => {
28if (node.depth !== 1) return;
29visit(node, 'text', (heading) => {
30title += heading.value;
31});
32});
33return title;
34};
35
36export const genMdLink = (title: string, url: string) => {
37return `[${title}](${url})`;
38};
39