You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
39 lines
1.1 KiB
TypeScript
39 lines
1.1 KiB
TypeScript
import { readFileSync, writeFileSync } from 'node:fs';
|
|
import remarkGfm from 'remark-gfm';
|
|
import remarkParse from 'remark-parse';
|
|
import { unified } from 'unified';
|
|
import { visit } from 'unist-util-visit';
|
|
|
|
import { SPLIT } from './const';
|
|
|
|
export const updateDocs = (path: string, content: string) => {
|
|
const md = readFileSync(path, 'utf8');
|
|
const mds = md.split(SPLIT);
|
|
mds[1] = [' ', content, ' '].join('\n\n');
|
|
const result = mds.join(SPLIT);
|
|
writeFileSync(path, result, 'utf8');
|
|
};
|
|
|
|
export const convertMarkdownToMdast = async (md: string) => {
|
|
// @ts-ignore
|
|
return unified().use(remarkParse).use(remarkGfm).parse(md.trim());
|
|
};
|
|
|
|
export const getTitle = async (path: string) => {
|
|
const md = readFileSync(path, 'utf8');
|
|
const mdast: any = await convertMarkdownToMdast(md);
|
|
|
|
let title = '';
|
|
visit(mdast, 'heading', (node) => {
|
|
if (node.depth !== 1) return;
|
|
visit(node, 'text', (heading) => {
|
|
title += heading.value;
|
|
});
|
|
});
|
|
return title;
|
|
};
|
|
|
|
export const genMdLink = (title: string, url: string) => {
|
|
return `[${title}](${url})`;
|
|
};
|