fix: upgrade shiki, remove embedded languages workaround (#4566)

pull/4571/head
Anthony Fu 7 months ago committed by GitHub
parent b930b8d531
commit 1969cf4f3b
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

@ -24,9 +24,6 @@ export const shared = defineConfig({
markdown: {
math: true,
// Load these languages ahead of time for embedded code highlighting
// TODO: remove this when Shiki fixes markdown embedded language loading
languages: ['js', 'ts', 'html', 'vue-html', 'css', 'yaml', 'sh'],
codeTransformers: [
// We use `[!!code` in demo to prevent transformation, here we revert it back.
{

@ -98,9 +98,9 @@
"@docsearch/css": "^3.8.3",
"@docsearch/js": "^3.8.3",
"@iconify-json/simple-icons": "^1.2.24",
"@shikijs/core": "^2.3.2",
"@shikijs/transformers": "^2.3.2",
"@shikijs/types": "^2.3.2",
"@shikijs/core": "^2.4.1",
"@shikijs/transformers": "^2.4.1",
"@shikijs/types": "^2.4.1",
"@vitejs/plugin-vue": "^5.2.1",
"@vue/devtools-api": "^7.7.2",
"@vue/shared": "^3.5.13",
@ -109,7 +109,7 @@
"focus-trap": "^7.6.4",
"mark.js": "8.11.1",
"minisearch": "^7.1.1",
"shiki": "^2.3.2",
"shiki": "^2.4.1",
"vite": "^6.1.0",
"vue": "^3.5.13"
},

@ -29,14 +29,14 @@ importers:
specifier: ^1.2.24
version: 1.2.24
'@shikijs/core':
specifier: ^2.3.2
version: 2.3.2
specifier: ^2.4.1
version: 2.4.1
'@shikijs/transformers':
specifier: ^2.3.2
version: 2.3.2
specifier: ^2.4.1
version: 2.4.1
'@shikijs/types':
specifier: ^2.3.2
version: 2.3.2
specifier: ^2.4.1
version: 2.4.1
'@vitejs/plugin-vue':
specifier: ^5.2.1
version: 5.2.1(vite@6.1.0(@types/node@22.13.4)(jiti@1.21.7)(yaml@2.7.0))(vue@3.5.13(typescript@5.7.3))
@ -62,8 +62,8 @@ importers:
specifier: ^7.1.1
version: 7.1.1
shiki:
specifier: ^2.3.2
version: 2.3.2
specifier: ^2.4.1
version: 2.4.1
vite:
specifier: ^6.1.0
version: 6.1.0(@types/node@22.13.4)(jiti@1.21.7)(yaml@2.7.0)
@ -1013,26 +1013,26 @@ packages:
'@sec-ant/readable-stream@0.4.1':
resolution: {integrity: sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==}
'@shikijs/core@2.3.2':
resolution: {integrity: sha512-s7vyL3LzUKm3Qwf36zRWlavX9BQMZTIq9B1almM63M5xBuSldnsTHCmsXzoF/Kyw4k7Xgas7yAyJz9VR/vcP1A==}
'@shikijs/core@2.4.1':
resolution: {integrity: sha512-c7AkRsCpSVjKHsTwuvRVMEAdADq4Z1KoodcS4LaIqMzBTM0+Q572VRk1PIxtzaMtdiHlRPO6mH5iPdJoTV59mQ==}
'@shikijs/engine-javascript@2.3.2':
resolution: {integrity: sha512-w3IEMu5HfL/OaJTsMbIfZ1HRPnWVYRANeDtmsdIIEgUOcLjzFJFQwlnkckGjKHekEzNqlMLbgB/twnfZ/EEAGg==}
'@shikijs/engine-javascript@2.4.1':
resolution: {integrity: sha512-2DnVilsUCgA81lnxt67dEZf2C6hdRzDYIs7yG33yWQIjljAxlXi3MKt7n0BXKr6uT5sZ0JdtX/+Pq2FN31YVdQ==}
'@shikijs/engine-oniguruma@2.3.2':
resolution: {integrity: sha512-vikMY1TroyZXUHIXbMnvY/mjtOxMn+tavcfAeQPgWS9FHcgFSUoEtywF5B5sOLb9NXb8P2vb7odkh3nj15/00A==}
'@shikijs/engine-oniguruma@2.4.1':
resolution: {integrity: sha512-PvN76WM2HjmSbNQmLl8Jzm3h8Hsf/g9kKs3jPWKD6uMpCfk+M3HalWONz85zQF4lqrI3lamMTV5pHcOVSswpqg==}
'@shikijs/langs@2.3.2':
resolution: {integrity: sha512-UqI6bSxFzhexIJficZLKeB1L2Sc3xoNiAV0yHpfbg5meck93du+EKQtsGbBv66Ki53XZPhnR/kYkOr85elIuFw==}
'@shikijs/langs@2.4.1':
resolution: {integrity: sha512-MLpCfw8gqWAgYvkV4Qsh/yjJirGhqwBQqtNgNrYOES7IoMTsthQ2x/8+JEO1hIDyS3qJPSooxCGQpX7EXsiFpQ==}
'@shikijs/themes@2.3.2':
resolution: {integrity: sha512-QAh7D/hhfYKHibkG2tti8vxNt3ekAH5EqkXJeJbTh7FGvTCWEI7BHqNCtMdjFvZ0vav5nvUgdvA7/HI7pfsB4w==}
'@shikijs/themes@2.4.1':
resolution: {integrity: sha512-U+Yt03Qfy9251BjQkPf9IkbiRypCqLcxfeCkk9cjqAuAhgM6G+v8GRHB+7VR1OQu92sWkhmk+zdbJAhgAnnL8g==}
'@shikijs/transformers@2.3.2':
resolution: {integrity: sha512-2HDnJumw8A/9GecRpTgvfqSbPjEbJ4DPWq5J++OVP1gNMLvbV0MqFsP4canqRNM1LqB7VmWY45Stipb0ZIJ+0A==}
'@shikijs/transformers@2.4.1':
resolution: {integrity: sha512-vTvV4+Fv9LJDWVgB/3o/q7EyYZFiJIEEOsS9KQ/8wyL6jKE+9m0fvuPmpx3SGjmj/MQcqnRBwKaXBW29M5XmLA==}
'@shikijs/types@2.3.2':
resolution: {integrity: sha512-CBaMY+a3pepyC4SETi7+bSzO0f6hxEQJUUuS4uD7zppzjmrN4ZRtBqxaT+wOan26CR9eeJ5iBhc4qvWEwn7Eeg==}
'@shikijs/types@2.4.1':
resolution: {integrity: sha512-fE73tqCjiHIDUq7SYU8i4d9TyOcJh2u2J8aQGqQs0KkFg6FbBEQoDiBASMM5Vxqag1VS58y+MHLBuSQmwtB4Og==}
'@shikijs/vscode-textmate@10.0.2':
resolution: {integrity: sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==}
@ -1146,8 +1146,8 @@ packages:
'@types/web-bluetooth@0.0.20':
resolution: {integrity: sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==}
'@ungap/structured-clone@1.3.0':
resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==}
'@ungap/structured-clone@1.2.1':
resolution: {integrity: sha512-fEzPV3hSkSMltkw152tJKNARhOupqbH96MZWyRjNaYZOMIzbrTeQDG+MTc6Mr2pgzFQzFxAfmhGDNP5QK++2ZA==}
'@vitejs/plugin-vue@5.2.1':
resolution: {integrity: sha512-cxh314tzaWwOLqVes2gnnCtvBDcM1UMdn+iFR+UjAn411dPT3tOmqrJjbMd7koZpMAmBM/GqeV4n9ge7JSiJJQ==}
@ -2565,8 +2565,8 @@ packages:
resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
engines: {node: '>=8'}
shiki@2.3.2:
resolution: {integrity: sha512-UZhz/gsUz7DHFbQBOJP7eXqvKyYvMGramxQiSDc83M/7OkWm6OdVHAReEc3vMLh6L6TRhgL9dvhXz9XDkCDaaw==}
shiki@2.4.1:
resolution: {integrity: sha512-1MmgQgSSx04OSUPqTg7deJudOL4vXpkNEJHlzKEoVNOLFUmXPB/vRvJoLxzy/Un+UIp4zryXJcWDUAUTOSbDyw==}
siginfo@2.0.0:
resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==}
@ -3572,40 +3572,40 @@ snapshots:
'@sec-ant/readable-stream@0.4.1': {}
'@shikijs/core@2.3.2':
'@shikijs/core@2.4.1':
dependencies:
'@shikijs/engine-javascript': 2.3.2
'@shikijs/engine-oniguruma': 2.3.2
'@shikijs/types': 2.3.2
'@shikijs/engine-javascript': 2.4.1
'@shikijs/engine-oniguruma': 2.4.1
'@shikijs/types': 2.4.1
'@shikijs/vscode-textmate': 10.0.2
'@types/hast': 3.0.4
hast-util-to-html: 9.0.4
'@shikijs/engine-javascript@2.3.2':
'@shikijs/engine-javascript@2.4.1':
dependencies:
'@shikijs/types': 2.3.2
'@shikijs/types': 2.4.1
'@shikijs/vscode-textmate': 10.0.2
oniguruma-to-es: 3.1.0
'@shikijs/engine-oniguruma@2.3.2':
'@shikijs/engine-oniguruma@2.4.1':
dependencies:
'@shikijs/types': 2.3.2
'@shikijs/types': 2.4.1
'@shikijs/vscode-textmate': 10.0.2
'@shikijs/langs@2.3.2':
'@shikijs/langs@2.4.1':
dependencies:
'@shikijs/types': 2.3.2
'@shikijs/types': 2.4.1
'@shikijs/themes@2.3.2':
'@shikijs/themes@2.4.1':
dependencies:
'@shikijs/types': 2.3.2
'@shikijs/types': 2.4.1
'@shikijs/transformers@2.3.2':
'@shikijs/transformers@2.4.1':
dependencies:
'@shikijs/core': 2.3.2
'@shikijs/types': 2.3.2
'@shikijs/core': 2.4.1
'@shikijs/types': 2.4.1
'@shikijs/types@2.3.2':
'@shikijs/types@2.4.1':
dependencies:
'@shikijs/vscode-textmate': 10.0.2
'@types/hast': 3.0.4
@ -3723,7 +3723,7 @@ snapshots:
'@types/web-bluetooth@0.0.20': {}
'@ungap/structured-clone@1.3.0': {}
'@ungap/structured-clone@1.2.1': {}
'@vitejs/plugin-vue@5.2.1(vite@6.1.0(@types/node@22.13.4)(jiti@1.21.7)(yaml@2.7.0))(vue@3.5.13(typescript@5.7.3))':
dependencies:
@ -4811,7 +4811,7 @@ snapshots:
dependencies:
'@types/hast': 3.0.4
'@types/mdast': 4.0.4
'@ungap/structured-clone': 1.3.0
'@ungap/structured-clone': 1.2.1
devlop: 1.1.0
micromark-util-sanitize-uri: 2.0.1
trim-lines: 3.0.1
@ -5220,14 +5220,14 @@ snapshots:
shebang-regex@3.0.0: {}
shiki@2.3.2:
shiki@2.4.1:
dependencies:
'@shikijs/core': 2.3.2
'@shikijs/engine-javascript': 2.3.2
'@shikijs/engine-oniguruma': 2.3.2
'@shikijs/langs': 2.3.2
'@shikijs/themes': 2.3.2
'@shikijs/types': 2.3.2
'@shikijs/core': 2.4.1
'@shikijs/engine-javascript': 2.4.1
'@shikijs/engine-oniguruma': 2.4.1
'@shikijs/langs': 2.4.1
'@shikijs/themes': 2.4.1
'@shikijs/types': 2.4.1
'@shikijs/vscode-textmate': 10.0.2
'@types/hast': 3.0.4

@ -7,8 +7,8 @@ import {
type TransformerCompactLineOption
} from '@shikijs/transformers'
import { customAlphabet } from 'nanoid'
import type { LanguageRegistration, ShikiTransformer } from 'shiki'
import { createHighlighter, isSpecialLang } from 'shiki'
import type { ShikiTransformer, BundledLanguage } from 'shiki'
import { createHighlighter, guessEmbeddedLanguages } from 'shiki'
import type { Logger } from 'vite'
import type { MarkdownOptions, ThemeOptions } from '../markdown'
import c from 'picocolors'
@ -71,16 +71,6 @@ export async function highlight(
langAlias: options.languageAlias
})
async function loadLanguage(name: string | LanguageRegistration) {
const lang = typeof name === 'string' ? name : name.name
if (
!isSpecialLang(lang) &&
!highlighter.getLoadedLanguages().includes(lang)
) {
await highlighter.loadLanguage(lang as any)
}
}
await options?.shikiSetup?.(highlighter)
// TODO: remove explicit matchAlgorithm in shiki v3
@ -129,7 +119,7 @@ export async function highlight(
.toLowerCase() || defaultLang
try {
await loadLanguage(lang)
await highlighter.loadLanguage(lang as any)
} catch {
logger.warn(
c.yellow(
@ -163,6 +153,9 @@ export async function highlight(
str = removeMustache(str).trimEnd()
const embeddedLang = guessEmbeddedLanguages(str, lang, highlighter)
await highlighter.loadLanguage(...(embeddedLang as BundledLanguage[]))
const highlighted = highlighter.codeToHtml(str, {
lang,
transformers: [

Loading…
Cancel
Save