pull/4326/head
Divyansh Singh 11 months ago
parent c61775a54f
commit 400f1f175b

@ -0,0 +1,10 @@
// @ts-check
import { bundledLanguages } from 'shiki'
import { runAsWorker } from 'synckit'
runAsWorker(async (lang) => {
const fn = bundledLanguages[lang]
if (!fn) return null
return (await fn()).default
})

@ -36,6 +36,9 @@
}, },
"./vue-demi": { "./vue-demi": {
"default": "./lib/vue-demi.mjs" "default": "./lib/vue-demi.mjs"
},
"./shiki-helpers": {
"default": "./lib/shiki-helpers.mjs"
} }
}, },
"main": "dist/node/index.js", "main": "dist/node/index.js",
@ -185,6 +188,7 @@
"sirv": "^3.0.0", "sirv": "^3.0.0",
"sitemap": "^8.0.0", "sitemap": "^8.0.0",
"supports-color": "^9.4.0", "supports-color": "^9.4.0",
"synckit": "^0.9.2",
"tinyglobby": "^0.2.10", "tinyglobby": "^0.2.10",
"typescript": "^5.6.3", "typescript": "^5.6.3",
"vitest": "^2.1.4", "vitest": "^2.1.4",

@ -272,6 +272,9 @@ importers:
supports-color: supports-color:
specifier: ^9.4.0 specifier: ^9.4.0
version: 9.4.0 version: 9.4.0
synckit:
specifier: ^0.9.2
version: 0.9.2
tinyglobby: tinyglobby:
specifier: ^0.2.10 specifier: ^0.2.10
version: 0.2.10 version: 0.2.10
@ -796,6 +799,10 @@ packages:
resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
engines: {node: '>= 8'} engines: {node: '>= 8'}
'@pkgr/core@0.1.1':
resolution: {integrity: sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==}
engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0}
'@polka/compression@1.0.0-next.28': '@polka/compression@1.0.0-next.28':
resolution: {integrity: sha512-aDmrBhgHJtxE+jy145WfhW9WmTAFmES/dNnn1LAs8UnnkFgBUj4T8I4ScQ9+rOkpDZStvnVP5iqhN3tvt7O1NA==} resolution: {integrity: sha512-aDmrBhgHJtxE+jy145WfhW9WmTAFmES/dNnn1LAs8UnnkFgBUj4T8I4ScQ9+rOkpDZStvnVP5iqhN3tvt7O1NA==}
engines: {node: '>=6'} engines: {node: '>=6'}
@ -2569,6 +2576,10 @@ packages:
resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
engines: {node: '>= 0.4'} engines: {node: '>= 0.4'}
synckit@0.9.2:
resolution: {integrity: sha512-vrozgXDQwYO72vHjUb/HnFbQx1exDjoKzqx23aXEg2a9VIg2TSFZ8FmeZpTjUCFMYw7mpX4BE2SFu8wI7asYsw==}
engines: {node: ^14.18.0 || >=16.0.0}
tabbable@6.2.0: tabbable@6.2.0:
resolution: {integrity: sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==} resolution: {integrity: sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==}
@ -3278,6 +3289,8 @@ snapshots:
'@nodelib/fs.scandir': 2.1.5 '@nodelib/fs.scandir': 2.1.5
fastq: 1.17.1 fastq: 1.17.1
'@pkgr/core@0.1.1': {}
'@polka/compression@1.0.0-next.28': {} '@polka/compression@1.0.0-next.28': {}
'@polka/url@1.0.0-next.28': {} '@polka/url@1.0.0-next.28': {}
@ -5095,6 +5108,11 @@ snapshots:
supports-preserve-symlinks-flag@1.0.0: {} supports-preserve-symlinks-flag@1.0.0: {}
synckit@0.9.2:
dependencies:
'@pkgr/core': 0.1.1
tslib: 2.7.0
tabbable@6.2.0: {} tabbable@6.2.0: {}
temp-dir@3.0.0: {} temp-dir@3.0.0: {}

@ -1,7 +1,7 @@
import { customAlphabet } from 'nanoid' import { customAlphabet } from 'nanoid'
import c from 'picocolors' import c from 'picocolors'
import type { ShikiTransformer } from 'shiki' import type { ShikiTransformer } from 'shiki'
import { bundledLanguages, createHighlighter, isSpecialLang } from 'shiki' import { createHighlighter, isSpecialLang } from 'shiki'
import { import {
transformerCompactLineOptions, transformerCompactLineOptions,
transformerNotationDiff, transformerNotationDiff,
@ -12,7 +12,12 @@ import {
} from '@shikijs/transformers' } from '@shikijs/transformers'
import type { Logger } from 'vite' import type { Logger } from 'vite'
import type { MarkdownOptions, ThemeOptions } from '../markdown' import type { MarkdownOptions, ThemeOptions } from '../markdown'
import { createSyncFn } from 'synckit'
import { createRequire } from 'node:module'
const require = createRequire(import.meta.url)
const resolveLang = createSyncFn(require.resolve('vitepress/shiki-helpers'))
const nanoid = customAlphabet('abcdefghijklmnopqrstuvwxyz', 10) const nanoid = customAlphabet('abcdefghijklmnopqrstuvwxyz', 10)
/** /**
@ -62,7 +67,7 @@ export async function highlight(
typeof theme === 'object' && 'light' in theme && 'dark' in theme typeof theme === 'object' && 'light' in theme && 'dark' in theme
? [theme.light, theme.dark] ? [theme.light, theme.dark]
: [theme], : [theme],
langs: [...Object.keys(bundledLanguages), ...(options.languages || [])], langs: options.languages || [],
langAlias: options.languageAlias langAlias: options.languageAlias
}) })
@ -108,14 +113,19 @@ export async function highlight(
if (lang) { if (lang) {
const langLoaded = highlighter.getLoadedLanguages().includes(lang) const langLoaded = highlighter.getLoadedLanguages().includes(lang)
if (!langLoaded && !isSpecialLang(lang)) { if (!langLoaded && !isSpecialLang(lang)) {
logger.warn( const resolvedLang = resolveLang(lang)
c.yellow( if (!resolveLang) {
`\nThe language '${lang}' is not loaded, falling back to '${ logger.warn(
defaultLang || 'txt' c.yellow(
}' for syntax highlighting.` `\nThe language '${lang}' is not loaded, falling back to '${
defaultLang || 'txt'
}' for syntax highlighting.`
)
) )
) lang = defaultLang
lang = defaultLang } else {
highlighter.loadLanguageSync(resolvedLang as any)
}
} }
} }

Loading…
Cancel
Save