Files
react.dev/beta/plugins/remark-header-custom-ids.js
Strek 49a552c1c1 Fix prettier CI and add it to pre commit (#4100)
* Add prettier before commit and during CI

* Add workflow

* Reverse merge main to branch

* dry run prettier

* dry run prettier

* [warn] jsxBracketSameLine is deprecated so replaced it to bracketSameLine

* Revert "[warn] jsxBracketSameLine is deprecated so replaced it to bracketSameLine"

This reverts commit 43dbe9ed3f.

* Revert "dry run prettier"

This reverts commit b62948042c.

* Revert "dry run prettier"

This reverts commit 382f9a4691.

* Revert "Reverse merge main to branch"

This reverts commit 43667eaf29.

* [warn] jsxBracketSameLine is deprecated so replaced it to bracketSameLine
2021-11-15 18:23:25 +00:00

71 lines
2.2 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
* Copyright (c) Facebook, Inc. and its affiliates.
*/
/*!
* Based on 'gatsby-remark-autolink-headers'
* Original Author: Kyle Mathews <mathews.kyle@gmail.com>
* Updated by Jared Palmer;
* Copyright (c) 2015 Gatsbyjs
*/
const toString = require('mdast-util-to-string');
const visit = require('unist-util-visit');
const slugs = require('github-slugger')();
function patch(context, key, value) {
if (!context[key]) {
context[key] = value;
}
return context[key];
}
const svgIcon = `<svg aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg>`;
module.exports = ({
icon = svgIcon,
className = `anchor`,
maintainCase = false,
} = {}) => {
slugs.reset();
return function transformer(tree) {
visit(tree, 'heading', (node) => {
const children = node.children;
let tail = children[children.length - 1];
// A bit weird: this is to support MDX 2 comments in expressions,
// while were still on MDX 1, which doesnt support them.
if (!tail || tail.type !== 'text' || tail.value !== '/}') {
return;
}
tail = children[children.length - 2];
if (!tail && tail.type !== 'emphasis') {
return;
}
const id = toString(tail);
tail = children[children.length - 3];
if (!tail || tail.type !== 'text' || !tail.value.endsWith('{/')) {
return;
}
// Remove the emphasis and trailing `/}`
children.splice(children.length - 2, 2);
// Remove the `{/`
tail.value = tail.value.replace(/[ \t]*\{\/$/, '');
const data = patch(node, 'data', {});
patch(data, 'id', id);
patch(data, 'htmlAttributes', {});
patch(data, 'hProperties', {});
patch(data.htmlAttributes, 'id', id);
patch(data.hProperties, 'id', id);
});
};
};