Urara-Blog/node_modules/.pnpm-store/v3/files/50/73dd2277c592d362ecc55bc1c2036c6f4851ad30deceba78e4b94d0f69df5ae3b6124f3ae3a48420ea78778cbbfa2a189bc63e561f91e8edd553129bb5b5aa
2022-08-14 01:14:53 +08:00

28 lines
676 B
Text

/**
* @typedef {import('hast').Root} Root
*/
import Slugger from 'github-slugger'
import {hasProperty} from 'hast-util-has-property'
import {headingRank} from 'hast-util-heading-rank'
import {toString} from 'hast-util-to-string'
import {visit} from 'unist-util-visit'
const slugs = new Slugger()
/**
* Plugin to add `id`s to headings.
*
* @type {import('unified').Plugin<Array<void>, Root>}
*/
export default function rehypeSlug() {
return (tree) => {
slugs.reset()
visit(tree, 'element', (node) => {
if (headingRank(node) && node.properties && !hasProperty(node, 'id')) {
node.properties.id = slugs.slug(toString(node))
}
})
}
}