diff options
author | 2022-07-13 16:31:59 -0300 | |
---|---|---|
committer | 2022-07-13 19:31:59 +0000 | |
commit | ca45c0c270f5ca3f7d2fb113a235d415cecdb333 (patch) | |
tree | 68c0db8c9f7bc36420c1faa3e6164df3666e4c93 /packages/markdown/remark/src | |
parent | d8af02a9443de5fa4cfe8e3ef7beddde9ef8cf09 (diff) | |
download | astro-ca45c0c270f5ca3f7d2fb113a235d415cecdb333.tar.gz astro-ca45c0c270f5ca3f7d2fb113a235d415cecdb333.tar.zst astro-ca45c0c270f5ca3f7d2fb113a235d415cecdb333.zip |
fix: don't throw when Shiki doesn't recognize a language (#3911)
* Don't throw when Shiki doesn't recognise a language
* Changeset
Diffstat (limited to 'packages/markdown/remark/src')
-rw-r--r-- | packages/markdown/remark/src/remark-shiki.ts | 16 |
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. |