summaryrefslogtreecommitdiff
path: root/packages/markdown/remark/src
diff options
context:
space:
mode:
Diffstat (limited to 'packages/markdown/remark/src')
-rw-r--r--packages/markdown/remark/src/remark-shiki.ts16
1 files changed, 15 insertions, 1 deletions
diff --git a/packages/markdown/remark/src/remark-shiki.ts b/packages/markdown/remark/src/remark-shiki.ts
index 0b51f07ff..fdc00c2f0 100644
--- a/packages/markdown/remark/src/remark-shiki.ts
+++ b/packages/markdown/remark/src/remark-shiki.ts
@@ -30,7 +30,21 @@ const remarkShiki = async (
return () => (tree: any) => {
visit(tree, 'code', (node) => {
- let html = highlighter!.codeToHtml(node.value, { lang: node.lang ?? 'plaintext' });
+ let lang: string;
+
+ if (typeof node.lang === 'string') {
+ const langExists = highlighter.getLoadedLanguages().includes(node.lang);
+ if (langExists) {
+ lang = node.lang;
+ } else {
+ console.warn(`The language "${node.lang}" doesn't exist, falling back to plaintext.`);
+ lang = 'plaintext';
+ }
+ } else {
+ lang = 'plaintext';
+ }
+
+ let html = highlighter!.codeToHtml(node.value, { lang });
// Q: Couldn't these regexes match on a user's inputted code blocks?
// A: Nope! All rendered HTML is properly escaped.