@telefonica/markdown-confluence-sync
Version:
Creates/updates/deletes Confluence pages based on markdown files in a directory. Supports Mermaid diagrams and per-page configuration using frontmatter metadata. Works great with Docusaurus
62 lines (61 loc) • 2.33 kB
JavaScript
// SPDX-FileCopyrightText: 2024 Telefónica Innovación Digital
// SPDX-License-Identifier: Apache-2.0
import find from "unist-util-find";
import { replace } from "../../../../../lib/support/unist/unist-util-replace.js";
// FIXME: eslint false positive
// https://github.com/typescript-eslint/typescript-eslint/issues/325
var DocusaurusAdmonitionType;
(function (DocusaurusAdmonitionType) {
DocusaurusAdmonitionType["Note"] = "note";
DocusaurusAdmonitionType["Tip"] = "tip";
DocusaurusAdmonitionType["Info"] = "info";
DocusaurusAdmonitionType["Caution"] = "caution";
DocusaurusAdmonitionType["Danger"] = "danger";
})(DocusaurusAdmonitionType || (DocusaurusAdmonitionType = {}));
const admonitionMessage = {
[DocusaurusAdmonitionType.Note]: "Note",
[DocusaurusAdmonitionType.Tip]: "Tip",
[DocusaurusAdmonitionType.Info]: "Info",
[DocusaurusAdmonitionType.Caution]: "Caution",
[DocusaurusAdmonitionType.Danger]: "Danger",
};
function composeTitle(type, title) {
const typeNode = {
type: "text",
value: `${admonitionMessage[type]}:`,
};
const children = title?.children ?? [];
return {
type: "paragraph",
children: [
{
type: "strong",
children: children.length === 0
? [typeNode]
: [typeNode, { type: "text", value: " " }, ...children],
},
],
};
}
/**
* UnifiedPlugin to replace Docusaurus' Admonitions with block-quotes from tree.
*
* @throws {Error} if the admonitions is not well constructed.
*
* @see {@link https://docusaurus.io/docs/markdown-features/admonitions | Docusaurus Admonitions}
*/
const remarkRemoveAdmonitions = function remarkRemoveAdmonitions() {
return function (tree) {
replace(tree, "containerDirective", (node) => {
const admonitionTitle = find(node, (child) => child.type === "paragraph" && child.data?.directiveLabel);
if (admonitionTitle !== undefined) {
node.children.splice(node.children.indexOf(admonitionTitle), 1);
}
return {
type: "blockquote",
children: [composeTitle(node.name, admonitionTitle), ...node.children],
};
});
};
};
export default remarkRemoveAdmonitions;