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

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})`;
};