summaryrefslogtreecommitdiff
path: root/packages/frontend/src/scripts/code-highlighter.ts
diff options
context:
space:
mode:
authordakkar <dakkar@thenautilus.net>2024-06-18 14:25:04 +0000
committerdakkar <dakkar@thenautilus.net>2024-06-18 14:25:04 +0000
commitb7805adc85653d8d789728dfaaa6a7e80d1440b8 (patch)
tree0109695430a1e604e68ddc2b7137f1fa7e354e4c /packages/frontend/src/scripts/code-highlighter.ts
parentmerge: feat: add an option to collapse replies (!545) (diff)
parentmerge: merge up to 2024.5.0 (!537) (diff)
downloadsharkey-b7805adc85653d8d789728dfaaa6a7e80d1440b8.tar.gz
sharkey-b7805adc85653d8d789728dfaaa6a7e80d1440b8.tar.bz2
sharkey-b7805adc85653d8d789728dfaaa6a7e80d1440b8.zip
merge: prepare for 2024.5, 2nd try (!554)
View MR for information: https://activitypub.software/TransFem-org/Sharkey/-/merge_requests/554 Closes #494 Approved-by: Tess K <me@thvxl.se> Approved-by: Marie <marie@kaifa.ch>
Diffstat (limited to 'packages/frontend/src/scripts/code-highlighter.ts')
-rw-r--r--packages/frontend/src/scripts/code-highlighter.ts23
1 files changed, 14 insertions, 9 deletions
diff --git a/packages/frontend/src/scripts/code-highlighter.ts b/packages/frontend/src/scripts/code-highlighter.ts
index 2733897bab..e94027d302 100644
--- a/packages/frontend/src/scripts/code-highlighter.ts
+++ b/packages/frontend/src/scripts/code-highlighter.ts
@@ -1,15 +1,21 @@
-import { bundledThemesInfo } from 'shiki';
+/*
+ * SPDX-FileCopyrightText: syuilo and misskey-project
+ * SPDX-License-Identifier: AGPL-3.0-only
+ */
+
import { getHighlighterCore, loadWasm } from 'shiki/core';
import darkPlus from 'shiki/themes/dark-plus.mjs';
+import { bundledThemesInfo } from 'shiki/themes';
+import { bundledLanguagesInfo } from 'shiki/langs';
import { unique } from './array.js';
import { deepClone } from './clone.js';
import { deepMerge } from './merge.js';
-import type { Highlighter, LanguageRegistration, ThemeRegistration, ThemeRegistrationRaw } from 'shiki';
+import type { HighlighterCore, LanguageRegistration, ThemeRegistration, ThemeRegistrationRaw } from 'shiki/core';
import { ColdDeviceStorage } from '@/store.js';
import lightTheme from '@/themes/_light.json5';
import darkTheme from '@/themes/_dark.json5';
-let _highlighter: Highlighter | null = null;
+let _highlighter: HighlighterCore | null = null;
export async function getTheme(mode: 'light' | 'dark', getName: true): Promise<string>;
export async function getTheme(mode: 'light' | 'dark', getName?: false): Promise<ThemeRegistration | ThemeRegistrationRaw>;
@@ -46,16 +52,14 @@ export async function getTheme(mode: 'light' | 'dark', getName = false): Promise
return darkPlus;
}
-export async function getHighlighter(): Promise<Highlighter> {
+export async function getHighlighter(): Promise<HighlighterCore> {
if (!_highlighter) {
return await initHighlighter();
}
return _highlighter;
}
-export async function initHighlighter() {
- const aiScriptGrammar = await import('aiscript-vscode/aiscript/syntaxes/aiscript.tmLanguage.json');
-
+async function initHighlighter() {
await loadWasm(import('shiki/onig.wasm?init'));
// テーマの重複を消す
@@ -64,11 +68,12 @@ export async function initHighlighter() {
...(await Promise.all([getTheme('light'), getTheme('dark')])),
]);
+ const jsLangInfo = bundledLanguagesInfo.find(t => t.id === 'javascript');
const highlighter = await getHighlighterCore({
themes,
langs: [
- import('shiki/langs/javascript.mjs'),
- aiScriptGrammar.default as unknown as LanguageRegistration,
+ ...(jsLangInfo ? [async () => await jsLangInfo.import()] : []),
+ async () => (await import('aiscript-vscode/aiscript/syntaxes/aiscript.tmLanguage.json')).default as unknown as LanguageRegistration,
],
});