Closed
Description
Initial checklist
- I read the support docs
- I read the contributing guide
- I agree to follow the code of conduct
- I searched issues and couldn’t find anything (or linked relevant results below)
Affected packages and versions
5.0.0
Link to runnable example
No response
Steps to reproduce
This is a weird one as <h1>
, <h3>
, <h4>
, ... tags all work. It's just <h2>
that has a problem.
In the below code, I'm attempting to sanitize the html string <h2 id="foo">Hello, world!</h2>
. I want the id to be retained (or at least sanitized into user-content-foo). However, it is removed entirely.
import deepmerge from "deepmerge"
import { defaultSchema } from "hast-util-sanitize"
import rehypeParse from "rehype-parse"
import rehypeSanitize from "rehype-sanitize"
import rehypeStringify from "rehype-stringify"
import { unified } from "unified"
const schema = deepmerge(defaultSchema, { attributes: { "*": ["id"] } })
const file = await unified()
.use(rehypeParse)
.use(rehypeSanitize, schema)
.use(rehypeStringify)
.process('<h2 id="foo">Hello, world!</h2>')
console.log(String(file)) // <h2>Hello, world!</h2>
Expected behavior
<h2 id="user-content-foo">Hello, world!</h2>
(The id property should not be removed.)
Actual behavior
<h2>Hello, world!</h2>
(The id property is removed.)
Affected runtime and version
node v20.5.1
Affected package manager and version
npm 10.0.0
Affected OS and version
mac os 13.5.2 (22G91)
Build and bundle tools
No response