tailwind-nextjs-blog/lib/remark-code-title.ts
Ivan Li 2ed23c4327
Some checks failed
continuous-integration/drone/push Build is failing
fix: js 执行崩溃
- deps and types.
- use pnpm instead of npm.
- fix cpu 100%.
2022-10-08 22:45:31 +08:00

33 lines
939 B
TypeScript

import { visit, Parent } from 'unist-util-visit'
export default function remarkCodeTitles() {
return (tree: Parent & { lang?: string }) =>
visit(tree, 'code', (node: Parent & { lang?: string }, index, parent: Parent) => {
const nodeLang = node.lang || ''
let language = ''
let title = ''
if (nodeLang.includes(':')) {
language = nodeLang.slice(0, nodeLang.search(':'))
title = nodeLang.slice(nodeLang.search(':') + 1, nodeLang.length)
}
if (!title) {
return
}
const className = 'remark-code-title'
const titleNode = {
type: 'mdxJsxFlowElement',
name: 'div',
attributes: [{ type: 'mdxJsxAttribute', name: 'className', value: className }],
children: [{ type: 'text', value: title }],
data: { _xdmExplicitJsx: true },
}
parent.children.splice(index, 0, titleNode)
node.lang = language
})
}