fix(editor): avoid bundling unused Shiki languages

This commit is contained in:
t8y2 committed 2026-08-18 21:33:49 +08:00
1 parent 871bd9d21f
commit 3c1813123d
4 files changed
+76 -25

No files matched your search

+23 -5
View File
@@ -4,11 +4,20 @@ export type SqlHighlighter = (content: string, appearance?: AppThemeAppearance)
interface ShikiSqlHighlighterOptions {
appearance: () => AppThemeAppearance;
themePreset?: ShikiSqlThemePreset;
}
type ShikiSqlThemePreset = "default" | "preview";
const SHIKI_THEMES = {
dark: "github-dark",
light: "github-light",
default: {
dark: "github-dark",
light: "github-light",
},
preview: {
dark: "dark-plus",
light: "min-light",
},
} as const;
type ShikiHighlighter = Awaited<ReturnType<typeof import("shiki/core").createHighlighterCore>>;
@@ -29,10 +38,11 @@ export async function createShikiSqlHighlighter(options: ShikiSqlHighlighterOpti
export function createSafeSqlHighlighter(highlighter: ShikiCodeHighlighter, options: ShikiSqlHighlighterOptions): SqlHighlighter {
return (content, appearance = options.appearance()) => {
try {
const themes = SHIKI_THEMES[options.themePreset ?? "default"];
return highlighter.codeToHtml(content, {
lang: "sql",
structure: "inline",
theme: SHIKI_THEMES[appearance],
theme: themes[appearance],
});
} catch (error) {
console.warn("[DBX][sqlHighlighter] Failed to highlight SQL:", error);
@@ -64,11 +74,19 @@ function getShikiSqlHighlighter(): Promise<ShikiHighlighter> {
}
async function loadShikiSqlHighlighter(): Promise<ShikiHighlighter> {
const [{ createHighlighterCore }, { createJavaScriptRegexEngine }, githubDark, githubLight, sql] = await Promise.all([import("shiki/core"), import("shiki/engine/javascript"), import("shiki/themes/github-dark.mjs"), import("shiki/themes/github-light.mjs"), import("shiki/langs/sql.mjs")]);
const [{ createHighlighterCore }, { createJavaScriptRegexEngine }, githubDark, githubLight, darkPlus, minLight, sql] = await Promise.all([
import("shiki/core"),
import("shiki/engine/javascript"),
import("shiki/themes/github-dark.mjs"),
import("shiki/themes/github-light.mjs"),
import("shiki/themes/dark-plus.mjs"),
import("shiki/themes/min-light.mjs"),
import("shiki/langs/sql.mjs"),
]);
return createHighlighterCore({
engine: createJavaScriptRegexEngine(),
langs: [sql.default],
themes: [githubDark.default, githubLight.default],
themes: [githubDark.default, githubLight.default, darkPlus.default, minLight.default],
});
}