Skip to content

Commit ddc4de5

Browse files
authored
feat(shiki): add support for all languages on the server (#9102)
* feat(shiki): add support for all languages on the server Signed-off-by: Aviv Keller <me@aviv.sh> * Create shiki-more-more.md Signed-off-by: Aviv Keller <me@aviv.sh> --------- Signed-off-by: Aviv Keller <me@aviv.sh>
1 parent 828ad65 commit ddc4de5

2 files changed

Lines changed: 16 additions & 33 deletions

File tree

.changeset/shiki-more-more.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'@node-core/rehype-shiki': minor
3+
---
4+
5+
Add support for all Shiki languages when the `minimal` preset is not selected.

packages/rehype-shiki/src/index.mjs

Lines changed: 11 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,4 @@
1-
// Keep all imports at the top
2-
import cLanguage from 'shiki/langs/c.mjs';
3-
import coffeeScriptLanguage from 'shiki/langs/coffeescript.mjs';
4-
import cPlusPlusLanguage from 'shiki/langs/cpp.mjs';
5-
import diffLanguage from 'shiki/langs/diff.mjs';
6-
import dockerLanguage from 'shiki/langs/docker.mjs';
7-
import httpLanguage from 'shiki/langs/http.mjs';
8-
import iniLanguage from 'shiki/langs/ini.mjs';
9-
import javaScriptLanguage from 'shiki/langs/javascript.mjs';
10-
import jsonLanguage from 'shiki/langs/json.mjs';
11-
import powershellLanguage from 'shiki/langs/powershell.mjs';
12-
import shellScriptLanguage from 'shiki/langs/shellscript.mjs';
13-
import shellSessionLanguage from 'shiki/langs/shellsession.mjs';
14-
import typeScriptLanguage from 'shiki/langs/typescript.mjs';
15-
import yamlLanguage from 'shiki/langs/yaml.mjs';
1+
import { bundledLanguagesInfo } from 'shiki/langs';
162

173
import createHighlighter, { getLanguageByName } from '#rs/highlighter.mjs';
184

@@ -37,7 +23,10 @@ async function getEngine({ wasm = false }) {
3723

3824
const { createJavaScriptRegexEngine } =
3925
await import('@shikijs/engine-javascript');
40-
return createJavaScriptRegexEngine();
26+
27+
// Not every bundled grammar compiles under the JavaScript engine,
28+
// so skip the patterns it cannot handle instead of throwing.
29+
return createJavaScriptRegexEngine({ forgiving: true });
4130
}
4231

4332
/**
@@ -55,24 +44,13 @@ async function getTransformers({ twoslash = false, twoslashOptions }) {
5544
return transformers;
5645
}
5746

47+
// Every language, since this is meant for SSR-ed highlighting :-)
5848
export const LANGS = [
59-
...cLanguage,
60-
...coffeeScriptLanguage,
61-
...cPlusPlusLanguage,
62-
...diffLanguage,
63-
...dockerLanguage,
64-
...httpLanguage,
65-
...iniLanguage,
66-
{
67-
...javaScriptLanguage[0],
68-
aliases: javaScriptLanguage[0].aliases.concat('cjs', 'mjs'),
69-
},
70-
...jsonLanguage,
71-
...powershellLanguage,
72-
...shellScriptLanguage,
73-
...shellSessionLanguage,
74-
...typeScriptLanguage,
75-
...yamlLanguage,
49+
...new Set(
50+
(
51+
await Promise.all(bundledLanguagesInfo.map(language => language.import()))
52+
).flatMap(language => language.default)
53+
),
7654
];
7755

7856
export const getLanguageDisplayName = language =>

0 commit comments

Comments
 (0)