···
1
-
import type { List, ListItem, PhrasingContent, Root } from 'mdast';
1
+
import type { Heading, List, ListItem, PhrasingContent, Root } from 'mdast';
import { unified } from 'unified';
import { visit } from 'unist-util-visit';
import { defaultSchema as defaultSanitizeSchema } from 'hast-util-sanitize';
···
import remarkGfm from 'remark-gfm';
import remarkParse from 'remark-parse';
import remarkSqueezeParagraphs from 'remark-squeeze-paragraphs';
15
-
import remarkTitle from 'remark-title';
16
+
const toString = (nodes: PhrasingContent[]): string =>
17
+
nodes.map((node) => {
18
+
switch (node.type) {
25
+
return toString(node.children);
27
+
return `\`${node.value}\``;
30
+
case 'footnoteReference':
33
+
case 'imageReference':
34
+
case 'linkReference':
export async function sanitizeHtml(html: string): Promise<string> {
const vfile = await unified()
···
function extractTitle(markdown: string): string | null {
164
-
let depth: number | null = null;
165
-
let title: string | null = null;
166
-
const toString = (nodes: PhrasingContent[]): string =>
167
-
nodes.map((node) => {
168
-
switch (node.type) {
175
-
return toString(node.children);
177
-
return `\`${node.value}\``;
180
-
case 'footnoteReference':
183
-
case 'imageReference':
184
-
case 'linkReference':
.use(remarkParse, { fragment: true })
···
196
-
visit(tree, function (node) {
197
-
if (node.type !== 'heading')
199
-
if (!depth || node.depth < depth)
200
-
title = toString(node.children);
194
+
const node = tree.children[0];
195
+
if (node && node.type === 'heading' && node.depth === 1) {
196
+
return toString(node.children);
202
+
function remarkTitle(opts: { title: string }) {
203
+
return function checkTitleTransformer(root: Root) {
204
+
const node = root.children[0]!;
205
+
const replacement: Heading = {
209
+
{ type: 'text', value: opts.title }
212
+
if (node && node.type === 'heading') {
214
+
node.children = replacement.children;
216
+
root.children?.unshift(replacement);
export async function transferTitle(from: string, to: string): Promise<string> {
···
214
-
.use(remarkTitle, {
230
+
.use(remarkTitle, { title })
incrementListMarker: false,