mirror of
https://github.com/mermaid-js/mermaid.git
synced 2025-02-04 07:13:25 +08:00
build(docs): hide YAML when building for GitHub
YAML front-matter is currently only used for Vitepress. Because of that, to avoid confusion, we can remove this YAML front-matter when converting the Markdown in packages/mermaid/src/docs to go into the `docs/` folder for GitHub browsing.
This commit is contained in:
parent
76c3716b2d
commit
816f2f512e
@ -1,8 +1,3 @@
|
|||||||
---
|
|
||||||
title: Flowcharts Syntax
|
|
||||||
outline: 'deep' # shows all h3 headings in outline in Vitepress
|
|
||||||
---
|
|
||||||
|
|
||||||
> **Warning**
|
> **Warning**
|
||||||
>
|
>
|
||||||
> ## THIS IS AN AUTOGENERATED FILE. DO NOT EDIT.
|
> ## THIS IS AN AUTOGENERATED FILE. DO NOT EDIT.
|
||||||
|
@ -207,6 +207,11 @@ interface TransformMarkdownAstOptions {
|
|||||||
originalFilename: string;
|
originalFilename: string;
|
||||||
/** If `true`, add a warning that the file is autogenerated */
|
/** If `true`, add a warning that the file is autogenerated */
|
||||||
addAutogeneratedWarning?: boolean;
|
addAutogeneratedWarning?: boolean;
|
||||||
|
/**
|
||||||
|
* If `true`, remove the YAML metadata from the Markdown input.
|
||||||
|
* Generally, YAML metadata is only used for Vitepress.
|
||||||
|
*/
|
||||||
|
removeYAML?: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -224,6 +229,7 @@ interface TransformMarkdownAstOptions {
|
|||||||
export function transformMarkdownAst({
|
export function transformMarkdownAst({
|
||||||
originalFilename,
|
originalFilename,
|
||||||
addAutogeneratedWarning,
|
addAutogeneratedWarning,
|
||||||
|
removeYAML,
|
||||||
}: TransformMarkdownAstOptions) {
|
}: TransformMarkdownAstOptions) {
|
||||||
return (tree: Root, _file?: any): Root => {
|
return (tree: Root, _file?: any): Root => {
|
||||||
const astWithTransformedBlocks = flatmap(tree, (node: Code) => {
|
const astWithTransformedBlocks = flatmap(tree, (node: Code) => {
|
||||||
@ -249,7 +255,7 @@ export function transformMarkdownAst({
|
|||||||
}
|
}
|
||||||
|
|
||||||
return [node]; // default is to do nothing to the node
|
return [node]; // default is to do nothing to the node
|
||||||
});
|
}) as Root;
|
||||||
|
|
||||||
if (addAutogeneratedWarning) {
|
if (addAutogeneratedWarning) {
|
||||||
// Add the header to the start of the file
|
// Add the header to the start of the file
|
||||||
@ -262,6 +268,14 @@ export function transformMarkdownAst({
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (removeYAML) {
|
||||||
|
const firstNode = astWithTransformedBlocks.children[0];
|
||||||
|
if (firstNode.type == 'yaml') {
|
||||||
|
// YAML is currently only used for Vitepress metadata, so we should remove it for GFM output
|
||||||
|
astWithTransformedBlocks.children.shift();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return astWithTransformedBlocks;
|
return astWithTransformedBlocks;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
@ -286,7 +300,12 @@ const transformMarkdown = (file: string) => {
|
|||||||
let transformed = remark()
|
let transformed = remark()
|
||||||
.use(remarkGfm)
|
.use(remarkGfm)
|
||||||
.use(remarkFrontmatter, ['yaml']) // support YAML front-matter in Markdown
|
.use(remarkFrontmatter, ['yaml']) // support YAML front-matter in Markdown
|
||||||
.use(transformMarkdownAst, { originalFilename: file, addAutogeneratedWarning: !noHeader }) // mermaid project specific plugin
|
.use(transformMarkdownAst, {
|
||||||
|
// mermaid project specific plugin
|
||||||
|
originalFilename: file,
|
||||||
|
addAutogeneratedWarning: !noHeader,
|
||||||
|
removeYAML: !noHeader,
|
||||||
|
})
|
||||||
.processSync(doc)
|
.processSync(doc)
|
||||||
.toString();
|
.toString();
|
||||||
|
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
import { transformMarkdownAst, transformToBlockQuote } from './docs.mjs';
|
import { transformMarkdownAst, transformToBlockQuote } from './docs.mjs';
|
||||||
|
|
||||||
import { remark as remarkBuilder } from 'remark'; // import it this way so we can mock it
|
import { remark } from 'remark'; // import it this way so we can mock it
|
||||||
|
import remarkFrontmatter from 'remark-frontmatter';
|
||||||
import { vi, afterEach, describe, it, expect } from 'vitest';
|
import { vi, afterEach, describe, it, expect } from 'vitest';
|
||||||
|
|
||||||
afterEach(() => {
|
afterEach(() => {
|
||||||
@ -8,6 +9,7 @@ afterEach(() => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
const originalFilename = 'example-input-filename.md';
|
const originalFilename = 'example-input-filename.md';
|
||||||
|
const remarkBuilder = remark().use(remarkFrontmatter, ['yaml']); // support YAML front-matter in Markdown
|
||||||
|
|
||||||
describe('docs.mts', () => {
|
describe('docs.mts', () => {
|
||||||
describe('transformMarkdownAst', () => {
|
describe('transformMarkdownAst', () => {
|
||||||
@ -79,6 +81,28 @@ describe('docs.mts', () => {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('should remove YAML if `removeYAML` is true', async () => {
|
||||||
|
const contents = `---
|
||||||
|
title: Flowcharts Syntax
|
||||||
|
---
|
||||||
|
|
||||||
|
This Markdown should be kept.
|
||||||
|
`;
|
||||||
|
const withYaml = (
|
||||||
|
await remarkBuilder().use(transformMarkdownAst, { originalFilename }).process(contents)
|
||||||
|
).toString();
|
||||||
|
// no change
|
||||||
|
expect(withYaml).toEqual(contents);
|
||||||
|
|
||||||
|
const withoutYaml = (
|
||||||
|
await remarkBuilder()
|
||||||
|
.use(transformMarkdownAst, { originalFilename, removeYAML: true })
|
||||||
|
.process(contents)
|
||||||
|
).toString();
|
||||||
|
// no change
|
||||||
|
expect(withoutYaml).toEqual('This Markdown should be kept.\n');
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('transformToBlockQuote', () => {
|
describe('transformToBlockQuote', () => {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user