1.0.1 • Published 9 months ago
hast-util-properties-to-mdx-jsx-attributes v1.0.1
hast-util-properties-to-mdx-jsx-attributes
Transform hast
properties to a list of
mdxJsxAttribute nodes.
Table of Contents
Installation
npm install hast-util-properties-to-mdx-jsx-attributesUsage
propertiesToMdxJsxAttributes takes hast
properties, and transform them to a list of
mdxJsxAttribute nodes. This
is useful when creating an MDX plugin where you want to enhance a hast element with JSX specific
features, but you don’t want to transform all child nodes.
For example, this plugin prefixes all id attributes on hast elements with the id prop passed to
the MDX document.
import { type Root } from 'hast'
import { propertiesToMdxJsxAttributes } from 'hast-util-properties-to-mdx-jsx-attributes'
import { type Plugin } from 'unified'
import { visit } from 'unist-util-visit'
const rehypeMdxPrefixId: Plugin<[], Root> = () => (ast) => {
visit(ast, 'element', (element, index, parent) => {
let hasId = false
const replacement = {
type: 'mdxJsxFlowElement',
name: element.tagName,
attributes: propertiesToMdxJsxAttributes(element.properties, {
transform(name, value) {
hasId = true
return {
type: 'BinaryExpression',
operator: '+',
left: { type: 'Identifier', name: 'id' },
right: {
type: 'MemberExpression',
computed: false,
optional: false,
object: { type: 'Identifier', name: 'props' },
property: { type: 'Literal', value }
}
}
}
}),
children: element.children
}
if (hasId) {
parent!.children[index!] = replacement
}
})
}
export default rehypeMdxPrefixIdAPI
propertiesToMdxJsxAttributes(properties, options?)
Transform hast
properties to a list of
mdxJsxAttribute nodes.
Arguments
properties(Properties) — The hast properties to transform.options(object) — Additional options to pass. The following options are supported:elementAttributeNameCase('html' | 'react') — The casing to use for attribute names. This should match theelementAttributeNameCaseoption specified in the MDX options. (Default:'react')space('html' | 'svg') — The space the hast properties are in. (Default:'html')transform(function) — A function to transform an attribute value. The function gets called with the name of the MDX JSX attribute that’s being generated, the value that would be used if no transform function is passed, and the value as it was in the hast properties. It should return an ESTree expression or string to represent the value, ornullorundefinedto generate an attribute with no value.
Returns
The hast properties as a list of
mdxJsxAttribute nodes.
Compatibility
This project is compatible with Node.js 16 or greater.