diff --git a/package.json b/package.json index 414d1215..a812adf1 100644 --- a/package.json +++ b/package.json @@ -101,9 +101,9 @@ "mark.js": "8.11.1", "minisearch": "^6.3.0", "mrmime": "^2.0.0", - "shikiji": "0.9.12", - "shikiji-core": "0.9.12", - "shikiji-transformers": "0.9.12", + "shikiji": "^0.9.15", + "shikiji-core": "^0.9.15", + "shikiji-transformers": "^0.9.15", "vite": "^5.0.10", "vue": "^3.4.3" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 553816cf..13c8f4d2 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -45,14 +45,14 @@ importers: specifier: ^2.0.0 version: 2.0.0 shikiji: - specifier: 0.9.12 - version: 0.9.12 + specifier: ^0.9.15 + version: 0.9.15 shikiji-core: - specifier: 0.9.12 - version: 0.9.12 + specifier: ^0.9.15 + version: 0.9.15 shikiji-transformers: - specifier: 0.9.12 - version: 0.9.12 + specifier: ^0.9.15 + version: 0.9.15 vite: specifier: ^5.0.10 version: 5.0.10(@types/node@20.10.6) @@ -3982,20 +3982,20 @@ packages: resolution: {integrity: sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==} dev: true - /shikiji-core@0.9.12: - resolution: {integrity: sha512-AYsAtsbZuq0FPT3mdskNMa+yxD5VwXrFC2sH7R2ELmncVGNYvSzR6Zlfq8iEzINq7/kKL5prtt81UFzFWTTbxQ==} + /shikiji-core@0.9.15: + resolution: {integrity: sha512-7hqIcUKS15OMs/61Qp2GvO1fSajBB36bDqi8vexIg5kp80V6v6SGtBrlq+nLlo7erMG2d1kvIuTIq1bwKI6fEg==} dev: false - /shikiji-transformers@0.9.12: - resolution: {integrity: sha512-ge+47j4MLTbKAnTnhTTolD9DKGW2Fhp80MV7Tb2E+p4HsJixu4slq2SDV/eFR34iH/egtyi/cjGMD8vJbNLBUA==} + /shikiji-transformers@0.9.15: + resolution: {integrity: sha512-k0sQ6tX26/cdb8QV9CCwwr7QjRp6/AVP9C0oNIXNld3of+xCrpf74kD74piybG6vMfzBoHGsz/s60RVBJOUaYQ==} dependencies: - shikiji: 0.9.12 + shikiji: 0.9.15 dev: false - /shikiji@0.9.12: - resolution: {integrity: sha512-jYbulSGcPKYKu2uFZOSg4lgrF7s9s8/ITFzRvczE6633wypMjnnTcRnG/mCFe6v1Dbov7bRCMsXVINBUD2FV9w==} + /shikiji@0.9.15: + resolution: {integrity: sha512-+inN4cN+nY7b0uCPOiqFHAk+cn2DEdM3AIQgPhAV7QKqhww/o7OGS5xvLh3SNnjke9C/HispALqGOQGYHVq7KQ==} dependencies: - shikiji-core: 0.9.12 + shikiji-core: 0.9.15 dev: false /side-channel@1.0.4: diff --git a/src/node/markdown/markdown.ts b/src/node/markdown/markdown.ts index e64a1bde..f1ccb14d 100644 --- a/src/node/markdown/markdown.ts +++ b/src/node/markdown/markdown.ts @@ -19,6 +19,13 @@ import anchorPlugin from 'markdown-it-anchor' import attrsPlugin from 'markdown-it-attrs' // @ts-ignore import { full as emojiPlugin } from 'markdown-it-emoji' +import type { + BuiltinTheme, + Highlighter, + LanguageInput, + ShikijiTransformer, + ThemeRegistrationAny +} from 'shikiji' import type { Logger } from 'vite' import { containerPlugin, type ContainerOptions } from './plugins/containers' import { highlight } from './plugins/highlight' @@ -28,22 +35,15 @@ import { lineNumberPlugin } from './plugins/lineNumbers' import { linkPlugin } from './plugins/link' import { preWrapperPlugin } from './plugins/preWrapper' import { snippetPlugin } from './plugins/snippet' -import type { - ThemeRegistration, - BuiltinTheme, - LanguageInput, - ShikijiTransformer, - Highlighter -} from 'shikiji' export type { Header } from '../shared' export type ThemeOptions = - | ThemeRegistration + | ThemeRegistrationAny | BuiltinTheme | { - light: ThemeRegistration | BuiltinTheme - dark: ThemeRegistration | BuiltinTheme + light: ThemeRegistrationAny | BuiltinTheme + dark: ThemeRegistrationAny | BuiltinTheme } export interface MarkdownOptions extends MarkdownIt.Options { diff --git a/src/node/markdown/plugins/highlight.ts b/src/node/markdown/plugins/highlight.ts index 84d999e6..f95a78b0 100644 --- a/src/node/markdown/plugins/highlight.ts +++ b/src/node/markdown/plugins/highlight.ts @@ -2,14 +2,12 @@ import { customAlphabet } from 'nanoid' import c from 'picocolors' import type { ShikijiTransformer } from 'shikiji' import { + addClassToHast, bundledLanguages, getHighlighter, - addClassToHast, isPlaintext as isPlainLang, isSpecialLang } from 'shikiji' -import type { Logger } from 'vite' -import type { MarkdownOptions, ThemeOptions } from '../markdown' import { transformerCompactLineOptions, transformerNotationDiff, @@ -18,6 +16,8 @@ import { transformerNotationHighlight, type TransformerCompactLineOption } from 'shikiji-transformers' +import type { Logger } from 'vite' +import type { MarkdownOptions, ThemeOptions } from '../markdown' const nanoid = customAlphabet('abcdefghijklmnopqrstuvwxyz', 10) @@ -65,9 +65,9 @@ export async function highlight( const highlighter = await getHighlighter({ themes: - typeof theme === 'string' || 'name' in theme - ? [theme] - : [theme.light, theme.dark], + typeof theme === 'object' && 'light' in theme && 'dark' in theme + ? [theme.light, theme.dark] + : [theme], langs: [...Object.keys(bundledLanguages), ...(options.languages || [])], langAlias: options.languageAlias }) @@ -169,15 +169,10 @@ export async function highlight( }, ...userTransformers ], - meta: { - __raw: attrs - }, - ...(typeof theme === 'string' || 'name' in theme - ? { theme } - : { - themes: theme, - defaultColor: false - }) + meta: { __raw: attrs }, + ...(typeof theme === 'object' && 'light' in theme && 'dark' in theme + ? { themes: theme, defaultColor: false } + : { theme }) }) return fillEmptyHighlightedLine(restoreMustache(highlighted))