From 9b5c0377cd3474447c84b2901801287f3caf3d82 Mon Sep 17 00:00:00 2001 From: Divyansh Singh <40380293+brc-dd@users.noreply.github.com> Date: Sun, 26 Jan 2025 11:28:39 +0530 Subject: [PATCH 01/53] fix(build): `--minify` not working as documented closes #4523 --- src/node/build/bundle.ts | 8 +------- src/node/cli.ts | 8 ++++++++ 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/src/node/build/bundle.ts b/src/node/build/bundle.ts index e4d2556c..662e9593 100644 --- a/src/node/build/bundle.ts +++ b/src/node/build/bundle.ts @@ -88,13 +88,7 @@ export async function bundle( ssr, ssrEmitAssets: config.mpa, // minify with esbuild in MPA mode (for CSS) - minify: ssr - ? config.mpa - ? 'esbuild' - : false - : typeof options.minify === 'boolean' - ? options.minify - : !process.env.DEBUG, + minify: ssr ? !!config.mpa : (options.minify ?? !process.env.DEBUG), outDir: ssr ? config.tempDir : config.outDir, cssCodeSplit: false, rollupOptions: { diff --git a/src/node/cli.ts b/src/node/cli.ts index 5e0be858..cf8ce305 100644 --- a/src/node/cli.ts +++ b/src/node/cli.ts @@ -12,6 +12,14 @@ if (process.env.DEBUG) { const argv: any = minimist(process.argv.slice(2)) +Object.keys(argv).forEach((key) => { + if (argv[key] === 'true') { + argv[key] = true + } else if (argv[key] === 'false') { + argv[key] = false + } +}) + const logVersion = (logger: Logger) => { logger.info(`\n ${c.green(`${c.bold('vitepress')} v${version}`)}\n`, { clear: !logger.hasWarned From c2ab5b03a8eb076a39d8117df9ccab7d2ad028f3 Mon Sep 17 00:00:00 2001 From: Divyansh Singh <40380293+brc-dd@users.noreply.github.com> Date: Mon, 27 Jan 2025 15:24:50 +0530 Subject: [PATCH 02/53] fix(build): don't destructure pages as it will be updated onFileAddDelete --- src/node/plugin.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/node/plugin.ts b/src/node/plugin.ts index 563bbdf3..078fd2a6 100644 --- a/src/node/plugin.ts +++ b/src/node/plugin.ts @@ -75,7 +75,6 @@ export async function createVitePressPlugin( site, vue: userVuePluginOptions, vite: userViteConfig, - pages, lastUpdated, cleanUrls } = siteConfig @@ -131,7 +130,7 @@ export async function createVitePressPlugin( markdownToVue = await createMarkdownToVueRenderFn( srcDir, markdown, - pages, + siteConfig.pages, config.command === 'build', config.base, lastUpdated, From 64b33e656d3d2627919dd8a858014688dadf3482 Mon Sep 17 00:00:00 2001 From: Bugo Date: Mon, 3 Feb 2025 09:11:26 +0500 Subject: [PATCH 03/53] docs(ru): update translations (#4536) --- docs/ru/guide/extending-default-theme.md | 8 ++--- docs/ru/guide/using-vue.md | 46 +++++++++++++++++++++--- docs/ru/index.md | 2 +- 3 files changed, 46 insertions(+), 10 deletions(-) diff --git a/docs/ru/guide/extending-default-theme.md b/docs/ru/guide/extending-default-theme.md index d3e5fe8f..a8f0acc7 100644 --- a/docs/ru/guide/extending-default-theme.md +++ b/docs/ru/guide/extending-default-theme.md @@ -123,7 +123,7 @@ export default { ## Слоты макета {#layout-slots} -Компонент `` темы по умолчанию имеет несколько слотов, которые можно использовать для вставки содержимого в определённые места страницы. Вот пример внедрения компонента в структуру before: +Компонент `` темы по умолчанию имеет несколько слотов, которые можно использовать для вставки содержимого в определённые места страницы. Вот пример внедрения компонента перед оглавлением: ```js [.vitepress/theme/index.js] import DefaultTheme from 'vitepress/theme' @@ -131,8 +131,8 @@ import MyLayout from './MyLayout.vue' export default { extends: DefaultTheme, - // переопределяем макет с помощью компонента-обёртки, который - // вводит слоты + // переопределяем макет с помощью компонента-обёртки, + // который внедряет слоты Layout: MyLayout } ``` @@ -147,7 +147,7 @@ const { Layout } = DefaultTheme diff --git a/docs/ru/guide/using-vue.md b/docs/ru/guide/using-vue.md index 8b6051aa..4e801e23 100644 --- a/docs/ru/guide/using-vue.md +++ b/docs/ru/guide/using-vue.md @@ -148,13 +148,13 @@ HTML, обёрнутый ``, будет отображаться как е **Разметка** ```md -Это {{ будет отображаться как есть}}. +Это {{ будет отображаться как есть }}. ``` **Результат**
-

Это {{ будет отображаться как есть}}

+

Это {{ будет отображаться как есть }}

В качестве альтернативы вы можете обернуть весь абзац в пользовательский контейнер `v-pre`: @@ -175,7 +175,7 @@ HTML, обёрнутый ``, будет отображаться как е -## Unescape в блоках кода {#unescape-in-code-blocks} +## Отключение экранирования в блоках кода {#unescape-in-code-blocks} По умолчанию все изолированные блоки кода автоматически оборачиваются `v-pre`, поэтому внутри них не будет обрабатываться синтаксис Vue. Чтобы включить интерполяцию в стиле Vue внутри фигурных скобок, можно добавить к языку суффикс `-vue`, например `js-vue`: @@ -199,7 +199,9 @@ HTML, обёрнутый ``, будет отображаться как е VitePress имеет [встроенную поддержку](https://vitejs.dev/guide/features.html#css-pre-processors) для препроцессоров CSS: файлы `.scss`, `.sass`, `.less`, `.styl` и `.stylus`. Для них не нужно устанавливать специфические для Vite плагины, но сам соответствующий препроцессор должен быть установлен: -``` +::: code-group + +```sh [npm] # .scss и .sass npm install -D sass @@ -210,7 +212,41 @@ npm install -D less npm install -D stylus ``` -Затем вы можете использовать следующее в Markdown и компонентах темы: +```sh [pnpm] +# .scss и .sass +pnpm add -D sass + +# .less +pnpm add -D less + +# .styl и .stylus +pnpm add -D stylus +``` + +```sh [yarn] +# .scss и .sass +yarn add -D sass + +# .less +yarn add -D less + +# .styl и .stylus +yarn add -D stylus +``` + +```sh [bun] +# .scss и .sass +bun add -D sass + +# .less +bun add -D less + +# .styl и .stylus +bun add -D stylus +``` +::: + +Затем вы можете использовать соответствующий атрибут `lang` в Markdown и компонентах темы: ```vue \ No newline at end of file + diff --git a/docs/fa/guide/what-is-vitepress.md b/docs/fa/guide/what-is-vitepress.md index d2884905..1522f603 100644 --- a/docs/fa/guide/what-is-vitepress.md +++ b/docs/fa/guide/what-is-vitepress.md @@ -54,4 +54,4 @@ تفاوت API بین ویت‌پرس و VuePress عمدتاً در زمینه تم‌سازی و سفارشی‌سازی است. اگر از VuePress 1 با تم پیش‌فرض استفاده می‌کنید، باید مهاجرت به ویت‌پرس نسبتاً ساده باشد. -همچنین تلاش‌هایی برای VuePress 2 انجام شده است، که از Vue 3 و Vite با سازگاری بیشتر با VuePress 1 پشتیبانی می‌کند. با این حال، نگهداری دو SSG به صورت موازی پایدار نیست، بنابراین تیم Vue تصمیم گرفته است که در دراز مدت بر روی ویت‌پرس به عنوان SSG اصلی توصیه شده تمرکز کند. \ No newline at end of file +همچنین تلاش‌هایی برای VuePress 2 انجام شده است، که از Vue 3 و Vite با سازگاری بیشتر با VuePress 1 پشتیبانی می‌کند. با این حال، نگهداری دو SSG به صورت موازی پایدار نیست، بنابراین تیم Vue تصمیم گرفته است که در دراز مدت بر روی ویت‌پرس به عنوان SSG اصلی توصیه شده تمرکز کند. diff --git a/docs/fa/reference/default-theme-badge.md b/docs/fa/reference/default-theme-badge.md index f5835832..b399eb90 100644 --- a/docs/fa/reference/default-theme-badge.md +++ b/docs/fa/reference/default-theme-badge.md @@ -69,4 +69,4 @@ interface Props { // پیش‌فرض به `tip`. type?: 'info' | 'tip' | 'warning' | 'danger' } -``` \ No newline at end of file +``` diff --git a/docs/fa/reference/default-theme-carbon-ads.md b/docs/fa/reference/default-theme-carbon-ads.md index 3d059a48..da22258f 100644 --- a/docs/fa/reference/default-theme-carbon-ads.md +++ b/docs/fa/reference/default-theme-carbon-ads.md @@ -19,4 +19,4 @@ export default { `//cdn.carbonads.com/carbon.js?serve=${code}&placement=${placement}` ``` -برای یادگیری بیشتر درباره پیکربندی تبلیغات Carbon، لطفاً به [وب‌سایت Carbon Ads](https://www.carbonads.net/) مراجعه کنید. \ No newline at end of file +برای یادگیری بیشتر درباره پیکربندی تبلیغات Carbon، لطفاً به [وب‌سایت Carbon Ads](https://www.carbonads.net/) مراجعه کنید. diff --git a/docs/fa/reference/default-theme-config.md b/docs/fa/reference/default-theme-config.md index a03cbcaf..1040f79b 100644 --- a/docs/fa/reference/default-theme-config.md +++ b/docs/fa/reference/default-theme-config.md @@ -466,4 +466,4 @@ export interface DocFooter { - نوع: `boolean` - پیش‌فرض: `false` -آیا باید نمایش آیکون لینک خارجی کنار لینک‌های خارجی در مارک‌داون باشد. \ No newline at end of file +آیا باید نمایش آیکون لینک خارجی کنار لینک‌های خارجی در مارک‌داون باشد. diff --git a/docs/fa/reference/default-theme-footer.md b/docs/fa/reference/default-theme-footer.md index 6c9915cf..67faa72c 100644 --- a/docs/fa/reference/default-theme-footer.md +++ b/docs/fa/reference/default-theme-footer.md @@ -50,4 +50,4 @@ export default { --- footer: false --- -``` \ No newline at end of file +``` diff --git a/docs/fa/reference/default-theme-home-page.md b/docs/fa/reference/default-theme-home-page.md index 10f04e41..5503ac0a 100644 --- a/docs/fa/reference/default-theme-home-page.md +++ b/docs/fa/reference/default-theme-home-page.md @@ -190,4 +190,4 @@ npx vitepress init ::: info اطلاعات ویت‌پرس همیشه استایل اضافی محتوای صفحه `layout: home` را خودکار نمی‌کند. برای بازگشت به رفتار قدیمی، می‌توانید `markdownStyles: false` را به frontmatter اضافه کنید. -::: \ No newline at end of file +::: diff --git a/docs/fa/reference/default-theme-last-updated.md b/docs/fa/reference/default-theme-last-updated.md index 08b8641c..5bb286e1 100644 --- a/docs/fa/reference/default-theme-last-updated.md +++ b/docs/fa/reference/default-theme-last-updated.md @@ -24,4 +24,4 @@ lastUpdated: false --- ``` -همچنین به [پیکربندی پیش‌فرض: آخرین بروزرسانی](./default-theme-config#lastupdated) مراجعه کنید تا اطلاعات بیشتری دریافت کنید. هر مقدار حقیقی در سطح تم از ویژگی را فعال خواهد کرد مگر آنکه به صورت صریح در سطح سایت یا صفحه غیرفعال شود. \ No newline at end of file +همچنین به [پیکربندی پیش‌فرض: آخرین بروزرسانی](./default-theme-config#lastupdated) مراجعه کنید تا اطلاعات بیشتری دریافت کنید. هر مقدار حقیقی در سطح تم از ویژگی را فعال خواهد کرد مگر آنکه به صورت صریح در سطح سایت یا صفحه غیرفعال شود. diff --git a/docs/fa/reference/default-theme-layout.md b/docs/fa/reference/default-theme-layout.md index 2d488072..def9bea5 100644 --- a/docs/fa/reference/default-theme-layout.md +++ b/docs/fa/reference/default-theme-layout.md @@ -59,4 +59,4 @@ export default { app.component('foo', Foo) } } -``` \ No newline at end of file +``` diff --git a/docs/fa/reference/default-theme-sidebar.md b/docs/fa/reference/default-theme-sidebar.md index cf5f5e55..cba65dff 100644 --- a/docs/fa/reference/default-theme-sidebar.md +++ b/docs/fa/reference/default-theme-sidebar.md @@ -212,4 +212,4 @@ const { hasSidebar } = useSidebar() مایش داده شود زمانی که نوار کناری وجود دارد -``` \ No newline at end of file +``` diff --git a/docs/fa/reference/runtime-api.md b/docs/fa/reference/runtime-api.md index 31059ef1..67e076cd 100644 --- a/docs/fa/reference/runtime-api.md +++ b/docs/fa/reference/runtime-api.md @@ -165,4 +165,4 @@ title: سلام ```md - نام بسته: {{ $params.pkg }} - نسخه: {{ $params.version }} -``` \ No newline at end of file +``` diff --git a/docs/fa/reference/site-config.md b/docs/fa/reference/site-config.md index 0585f5c2..72343ffa 100644 --- a/docs/fa/reference/site-config.md +++ b/docs/fa/reference/site-config.md @@ -723,4 +723,4 @@ export default { interface TransformPageContext { siteConfig: SiteConfig } -``` \ No newline at end of file +``` diff --git a/docs/ru/guide/using-vue.md b/docs/ru/guide/using-vue.md index 4e801e23..e031c3f7 100644 --- a/docs/ru/guide/using-vue.md +++ b/docs/ru/guide/using-vue.md @@ -320,4 +320,4 @@ Vue предоставляет поддержку IntelliSense из коробк "vue.server.includeLanguages": ["vue", "markdown"] } ``` -::: \ No newline at end of file +::: From b930b8d5310f1691d8d9f009f45b70122e4ce800 Mon Sep 17 00:00:00 2001 From: Divyansh Singh <40380293+brc-dd@users.noreply.github.com> Date: Sat, 15 Feb 2025 23:30:41 +0530 Subject: [PATCH 12/53] fix: deterministic code group ids (#4565) --- __tests__/e2e/.vitepress/config.ts | 8 + package.json | 23 +- pnpm-lock.yaml | 554 ++++++++++++++---------- src/node/markdown/plugins/containers.ts | 10 +- 4 files changed, 352 insertions(+), 243 deletions(-) diff --git a/__tests__/e2e/.vitepress/config.ts b/__tests__/e2e/.vitepress/config.ts index 43dbfa84..121761e7 100644 --- a/__tests__/e2e/.vitepress/config.ts +++ b/__tests__/e2e/.vitepress/config.ts @@ -173,5 +173,13 @@ export default defineConfig({ } } } + }, + vite: { + server: { + watch: { + usePolling: true, + interval: 100 + } + } } }) diff --git a/package.json b/package.json index 3d07a8ab..49cbc7f1 100644 --- a/package.json +++ b/package.json @@ -102,10 +102,10 @@ "@shikijs/transformers": "^2.3.2", "@shikijs/types": "^2.3.2", "@vitejs/plugin-vue": "^5.2.1", - "@vue/devtools-api": "^7.7.1", + "@vue/devtools-api": "^7.7.2", "@vue/shared": "^3.5.13", - "@vueuse/core": "^12.5.0", - "@vueuse/integrations": "^12.5.0", + "@vueuse/core": "^12.7.0", + "@vueuse/integrations": "^12.7.0", "focus-trap": "^7.6.4", "mark.js": "8.11.1", "minisearch": "^7.1.1", @@ -139,7 +139,7 @@ "@types/markdown-it-container": "^2.0.10", "@types/markdown-it-emoji": "^3.0.1", "@types/minimist": "^1.2.5", - "@types/node": "^22.13.1", + "@types/node": "^22.13.4", "@types/picomatch": "^3.0.2", "@types/postcss-prefix-selector": "^1.16.3", "@types/prompts": "^2.4.9", @@ -163,7 +163,7 @@ "markdown-it-emoji": "^3.0.0", "markdown-it-mathjax3": "^4.3.2", "minimist": "^1.2.8", - "nanoid": "^5.0.9", + "nanoid": "^5.1.0", "ora": "^8.2.0", "p-map": "^7.0.3", "path-to-regexp": "^6.3.0", @@ -173,11 +173,11 @@ "playwright-chromium": "^1.50.1", "polka": "^1.0.0-next.28", "postcss-prefix-selector": "^2.1.0", - "prettier": "^3.5.0", + "prettier": "^3.5.1", "prompts": "^2.4.2", "punycode": "^2.3.1", "rimraf": "^6.0.1", - "rollup": "^4.34.6", + "rollup": "^4.34.7", "rollup-plugin-dts": "^6.1.1", "rollup-plugin-esbuild": "^6.2.0", "semver": "^7.7.1", @@ -187,7 +187,7 @@ "tinyglobby": "^0.2.10", "typescript": "^5.7.3", "vitest": "^3.0.5", - "vue-tsc": "^2.2.0", + "vue-tsc": "2.2.0", "wait-on": "^8.0.2" }, "peerDependencies": { @@ -217,6 +217,11 @@ "patchedDependencies": { "@types/mdurl@2.0.0": "patches/@types__mdurl@2.0.0.patch", "markdown-it-anchor@9.2.0": "patches/markdown-it-anchor@9.2.0.patch" - } + }, + "onlyBuiltDependencies": [ + "esbuild", + "playwright-chromium", + "simple-git-hooks" + ] } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9d42b63c..2a7e98c3 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -39,19 +39,19 @@ importers: version: 2.3.2 '@vitejs/plugin-vue': specifier: ^5.2.1 - version: 5.2.1(vite@6.1.0(@types/node@22.13.1)(jiti@1.21.7)(yaml@2.7.0))(vue@3.5.13(typescript@5.7.3)) + 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)) '@vue/devtools-api': - specifier: ^7.7.1 - version: 7.7.1 + specifier: ^7.7.2 + version: 7.7.2 '@vue/shared': specifier: ^3.5.13 version: 3.5.13 '@vueuse/core': - specifier: ^12.5.0 - version: 12.5.0(typescript@5.7.3) + specifier: ^12.7.0 + version: 12.7.0(typescript@5.7.3) '@vueuse/integrations': - specifier: ^12.5.0 - version: 12.5.0(axios@1.7.9(debug@4.4.0))(focus-trap@7.6.4)(typescript@5.7.3) + specifier: ^12.7.0 + version: 12.7.0(axios@1.7.9(debug@4.4.0))(focus-trap@7.6.4)(typescript@5.7.3) focus-trap: specifier: ^7.6.4 version: 7.6.4 @@ -66,7 +66,7 @@ importers: version: 2.3.2 vite: specifier: ^6.1.0 - version: 6.1.0(@types/node@22.13.1)(jiti@1.21.7)(yaml@2.7.0) + version: 6.1.0(@types/node@22.13.4)(jiti@1.21.7)(yaml@2.7.0) vue: specifier: ^3.5.13 version: 3.5.13(typescript@5.7.3) @@ -103,19 +103,19 @@ importers: version: 1.0.0-next.28 '@rollup/plugin-alias': specifier: ^5.1.1 - version: 5.1.1(rollup@4.34.6) + version: 5.1.1(rollup@4.34.7) '@rollup/plugin-commonjs': specifier: ^28.0.2 - version: 28.0.2(rollup@4.34.6) + version: 28.0.2(rollup@4.34.7) '@rollup/plugin-json': specifier: ^6.1.0 - version: 6.1.0(rollup@4.34.6) + version: 6.1.0(rollup@4.34.7) '@rollup/plugin-node-resolve': specifier: ^16.0.0 - version: 16.0.0(rollup@4.34.6) + version: 16.0.0(rollup@4.34.7) '@rollup/plugin-replace': specifier: ^6.0.2 - version: 6.0.2(rollup@4.34.6) + version: 6.0.2(rollup@4.34.7) '@types/cross-spawn': specifier: ^6.0.6 version: 6.0.6 @@ -147,8 +147,8 @@ importers: specifier: ^1.2.5 version: 1.2.5 '@types/node': - specifier: ^22.13.1 - version: 22.13.1 + specifier: ^22.13.4 + version: 22.13.4 '@types/picomatch': specifier: ^3.0.2 version: 3.0.2 @@ -219,8 +219,8 @@ importers: specifier: ^1.2.8 version: 1.2.8 nanoid: - specifier: ^5.0.9 - version: 5.0.9 + specifier: ^5.1.0 + version: 5.1.0 ora: specifier: ^8.2.0 version: 8.2.0 @@ -249,8 +249,8 @@ importers: specifier: ^2.1.0 version: 2.1.0(postcss@8.5.2) prettier: - specifier: ^3.5.0 - version: 3.5.0 + specifier: ^3.5.1 + version: 3.5.1 prompts: specifier: ^2.4.2 version: 2.4.2 @@ -261,14 +261,14 @@ importers: specifier: ^6.0.1 version: 6.0.1 rollup: - specifier: ^4.34.6 - version: 4.34.6 + specifier: ^4.34.7 + version: 4.34.7 rollup-plugin-dts: specifier: ^6.1.1 - version: 6.1.1(rollup@4.34.6)(typescript@5.7.3) + version: 6.1.1(rollup@4.34.7)(typescript@5.7.3) rollup-plugin-esbuild: specifier: ^6.2.0 - version: 6.2.0(esbuild@0.25.0)(rollup@4.34.6) + version: 6.2.0(esbuild@0.25.0)(rollup@4.34.7) semver: specifier: ^7.7.1 version: 7.7.1 @@ -289,9 +289,9 @@ importers: version: 5.7.3 vitest: specifier: ^3.0.5 - version: 3.0.5(@types/debug@4.1.12)(@types/node@22.13.1)(jiti@1.21.7)(yaml@2.7.0) + version: 3.0.5(@types/debug@4.1.12)(@types/node@22.13.4)(jiti@1.21.7)(yaml@2.7.0) vue-tsc: - specifier: ^2.2.0 + specifier: 2.2.0 version: 2.2.0(typescript@5.7.3) wait-on: specifier: ^8.0.2 @@ -407,8 +407,8 @@ packages: '@antfu/install-pkg@1.0.0': resolution: {integrity: sha512-xvX6P/lo1B3ej0OsaErAjqgFYzYVcJpamjLAFLYh9vRJngBrMoUG7aVnrGTeqM7yxbyTD5p3F2+0/QUEh8Vzhw==} - '@antfu/utils@8.1.0': - resolution: {integrity: sha512-XPR7Jfwp0FFl/dFYPX8ZjpmU4/1mIXTjnZ1ba48BLMyKOV62/tiRjdsFcPs2hsYcSud4tzk7w3a3LjX8Fu3huA==} + '@antfu/utils@8.1.1': + resolution: {integrity: sha512-Mex9nXf9vR6AhcXmMrlz/HVgYYZpVGJ6YlPgwl7UnaFpnshXs6EK/oa5Gpf3CzENMjkvEx2tQtntGnb7UtSTOQ==} '@babel/code-frame@7.26.2': resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==} @@ -422,13 +422,13 @@ packages: resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==} engines: {node: '>=6.9.0'} - '@babel/parser@7.26.8': - resolution: {integrity: sha512-TZIQ25pkSoaKEYYaHbbxkfL36GNsQ6iFiBbeuzAkLnXayKR1yP1zFe+NxuZWWsUyvt8icPU9CCq0sgWGXR1GEw==} + '@babel/parser@7.26.9': + resolution: {integrity: sha512-81NWa1njQblgZbQHxWHpxxCzNsa3ZwvFqpUg7P+NNUU6f3UU2jBEg4OlF/J6rl8+PQGh1q6/zWScd001YwcA5A==} engines: {node: '>=6.0.0'} hasBin: true - '@babel/types@7.26.8': - resolution: {integrity: sha512-eUuWapzEGWFEpHFxgEaBG8e3n6S8L3MSu0oda755rOfabWPnh0Our1AozNFVUxGFIhbKgd1ksprsoDGMinTOTA==} + '@babel/types@7.26.9': + resolution: {integrity: sha512-Y3IR1cRnOxOCDvMmNiym7XpXQ93iGDDPHx+Zj+NM+rg0fBaShfQLkg+hKPaZCEvg5N/LeCo4+Rj/i3FuJsIQaw==} engines: {node: '>=6.9.0'} '@clack/core@0.3.5': @@ -791,8 +791,8 @@ packages: '@iconify-json/simple-icons@1.2.24': resolution: {integrity: sha512-06ZWXZx3PHCE+02zn+iIGOKKNgE3kyPd0Yh7IUEIa0bCYI6UmGlsYYghRx8As9TnTNYMCEiy5V0zI4Jb6EY6XA==} - '@iconify-json/vscode-icons@1.2.13': - resolution: {integrity: sha512-mdWIIkV/shSbAlhfQ0tNBSGTWqxjRfCR900svxvYCAMR8ckOYAcWfOTRSgbxdsoFVGz8wiSVm7ed1evVEkT4pg==} + '@iconify-json/vscode-icons@1.2.14': + resolution: {integrity: sha512-DLFEWtKpqpzzWbn8DWQoBb2j/KK8KASLHPKQ7763/F4SJelMZg2xVUPUEWrceLNcTu8OVtKQcd/+3Ysa3WcAsg==} '@iconify/types@2.0.0': resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==} @@ -915,98 +915,98 @@ packages: rollup: optional: true - '@rollup/rollup-android-arm-eabi@4.34.6': - resolution: {integrity: sha512-+GcCXtOQoWuC7hhX1P00LqjjIiS/iOouHXhMdiDSnq/1DGTox4SpUvO52Xm+div6+106r+TcvOeo/cxvyEyTgg==} + '@rollup/rollup-android-arm-eabi@4.34.7': + resolution: {integrity: sha512-l6CtzHYo8D2TQ3J7qJNpp3Q1Iye56ssIAtqbM2H8axxCEEwvN7o8Ze9PuIapbxFL3OHrJU2JBX6FIIVnP/rYyw==} cpu: [arm] os: [android] - '@rollup/rollup-android-arm64@4.34.6': - resolution: {integrity: sha512-E8+2qCIjciYUnCa1AiVF1BkRgqIGW9KzJeesQqVfyRITGQN+dFuoivO0hnro1DjT74wXLRZ7QF8MIbz+luGaJA==} + '@rollup/rollup-android-arm64@4.34.7': + resolution: {integrity: sha512-KvyJpFUueUnSp53zhAa293QBYqwm94TgYTIfXyOTtidhm5V0LbLCJQRGkQClYiX3FXDQGSvPxOTD/6rPStMMDg==} cpu: [arm64] os: [android] - '@rollup/rollup-darwin-arm64@4.34.6': - resolution: {integrity: sha512-z9Ib+OzqN3DZEjX7PDQMHEhtF+t6Mi2z/ueChQPLS/qUMKY7Ybn5A2ggFoKRNRh1q1T03YTQfBTQCJZiepESAg==} + '@rollup/rollup-darwin-arm64@4.34.7': + resolution: {integrity: sha512-jq87CjmgL9YIKvs8ybtIC98s/M3HdbqXhllcy9EdLV0yMg1DpxES2gr65nNy7ObNo/vZ/MrOTxt0bE5LinL6mA==} cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-x64@4.34.6': - resolution: {integrity: sha512-PShKVY4u0FDAR7jskyFIYVyHEPCPnIQY8s5OcXkdU8mz3Y7eXDJPdyM/ZWjkYdR2m0izD9HHWA8sGcXn+Qrsyg==} + '@rollup/rollup-darwin-x64@4.34.7': + resolution: {integrity: sha512-rSI/m8OxBjsdnMMg0WEetu/w+LhLAcCDEiL66lmMX4R3oaml3eXz3Dxfvrxs1FbzPbJMaItQiksyMfv1hoIxnA==} cpu: [x64] os: [darwin] - '@rollup/rollup-freebsd-arm64@4.34.6': - resolution: {integrity: sha512-YSwyOqlDAdKqs0iKuqvRHLN4SrD2TiswfoLfvYXseKbL47ht1grQpq46MSiQAx6rQEN8o8URtpXARCpqabqxGQ==} + '@rollup/rollup-freebsd-arm64@4.34.7': + resolution: {integrity: sha512-oIoJRy3ZrdsXpFuWDtzsOOa/E/RbRWXVokpVrNnkS7npz8GEG++E1gYbzhYxhxHbO2om1T26BZjVmdIoyN2WtA==} cpu: [arm64] os: [freebsd] - '@rollup/rollup-freebsd-x64@4.34.6': - resolution: {integrity: sha512-HEP4CgPAY1RxXwwL5sPFv6BBM3tVeLnshF03HMhJYCNc6kvSqBgTMmsEjb72RkZBAWIqiPUyF1JpEBv5XT9wKQ==} + '@rollup/rollup-freebsd-x64@4.34.7': + resolution: {integrity: sha512-X++QSLm4NZfZ3VXGVwyHdRf58IBbCu9ammgJxuWZYLX0du6kZvdNqPwrjvDfwmi6wFdvfZ/s6K7ia0E5kI7m8Q==} cpu: [x64] os: [freebsd] - '@rollup/rollup-linux-arm-gnueabihf@4.34.6': - resolution: {integrity: sha512-88fSzjC5xeH9S2Vg3rPgXJULkHcLYMkh8faix8DX4h4TIAL65ekwuQMA/g2CXq8W+NJC43V6fUpYZNjaX3+IIg==} + '@rollup/rollup-linux-arm-gnueabihf@4.34.7': + resolution: {integrity: sha512-Z0TzhrsNqukTz3ISzrvyshQpFnFRfLunYiXxlCRvcrb3nvC5rVKI+ZXPFG/Aa4jhQa1gHgH3A0exHaRRN4VmdQ==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm-musleabihf@4.34.6': - resolution: {integrity: sha512-wM4ztnutBqYFyvNeR7Av+reWI/enK9tDOTKNF+6Kk2Q96k9bwhDDOlnCUNRPvromlVXo04riSliMBs/Z7RteEg==} + '@rollup/rollup-linux-arm-musleabihf@4.34.7': + resolution: {integrity: sha512-nkznpyXekFAbvFBKBy4nNppSgneB1wwG1yx/hujN3wRnhnkrYVugMTCBXED4+Ni6thoWfQuHNYbFjgGH0MBXtw==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm64-gnu@4.34.6': - resolution: {integrity: sha512-9RyprECbRa9zEjXLtvvshhw4CMrRa3K+0wcp3KME0zmBe1ILmvcVHnypZ/aIDXpRyfhSYSuN4EPdCCj5Du8FIA==} + '@rollup/rollup-linux-arm64-gnu@4.34.7': + resolution: {integrity: sha512-KCjlUkcKs6PjOcxolqrXglBDcfCuUCTVlX5BgzgoJHw+1rWH1MCkETLkLe5iLLS9dP5gKC7mp3y6x8c1oGBUtA==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-arm64-musl@4.34.6': - resolution: {integrity: sha512-qTmklhCTyaJSB05S+iSovfo++EwnIEZxHkzv5dep4qoszUMX5Ca4WM4zAVUMbfdviLgCSQOu5oU8YoGk1s6M9Q==} + '@rollup/rollup-linux-arm64-musl@4.34.7': + resolution: {integrity: sha512-uFLJFz6+utmpbR313TTx+NpPuAXbPz4BhTQzgaP0tozlLnGnQ6rCo6tLwaSa6b7l6gRErjLicXQ1iPiXzYotjw==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-loongarch64-gnu@4.34.6': - resolution: {integrity: sha512-4Qmkaps9yqmpjY5pvpkfOerYgKNUGzQpFxV6rnS7c/JfYbDSU0y6WpbbredB5cCpLFGJEqYX40WUmxMkwhWCjw==} + '@rollup/rollup-linux-loongarch64-gnu@4.34.7': + resolution: {integrity: sha512-ws8pc68UcJJqCpneDFepnwlsMUFoWvPbWXT/XUrJ7rWUL9vLoIN3GAasgG+nCvq8xrE3pIrd+qLX/jotcLy0Qw==} cpu: [loong64] os: [linux] - '@rollup/rollup-linux-powerpc64le-gnu@4.34.6': - resolution: {integrity: sha512-Zsrtux3PuaxuBTX/zHdLaFmcofWGzaWW1scwLU3ZbW/X+hSsFbz9wDIp6XvnT7pzYRl9MezWqEqKy7ssmDEnuQ==} + '@rollup/rollup-linux-powerpc64le-gnu@4.34.7': + resolution: {integrity: sha512-vrDk9JDa/BFkxcS2PbWpr0C/LiiSLxFbNOBgfbW6P8TBe9PPHx9Wqbvx2xgNi1TOAyQHQJ7RZFqBiEohm79r0w==} cpu: [ppc64] os: [linux] - '@rollup/rollup-linux-riscv64-gnu@4.34.6': - resolution: {integrity: sha512-aK+Zp+CRM55iPrlyKiU3/zyhgzWBxLVrw2mwiQSYJRobCURb781+XstzvA8Gkjg/hbdQFuDw44aUOxVQFycrAg==} + '@rollup/rollup-linux-riscv64-gnu@4.34.7': + resolution: {integrity: sha512-rB+ejFyjtmSo+g/a4eovDD1lHWHVqizN8P0Hm0RElkINpS0XOdpaXloqM4FBkF9ZWEzg6bezymbpLmeMldfLTw==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-s390x-gnu@4.34.6': - resolution: {integrity: sha512-WoKLVrY9ogmaYPXwTH326+ErlCIgMmsoRSx6bO+l68YgJnlOXhygDYSZe/qbUJCSiCiZAQ+tKm88NcWuUXqOzw==} + '@rollup/rollup-linux-s390x-gnu@4.34.7': + resolution: {integrity: sha512-nNXNjo4As6dNqRn7OrsnHzwTgtypfRA3u3AKr0B3sOOo+HkedIbn8ZtFnB+4XyKJojIfqDKmbIzO1QydQ8c+Pw==} cpu: [s390x] os: [linux] - '@rollup/rollup-linux-x64-gnu@4.34.6': - resolution: {integrity: sha512-Sht4aFvmA4ToHd2vFzwMFaQCiYm2lDFho5rPcvPBT5pCdC+GwHG6CMch4GQfmWTQ1SwRKS0dhDYb54khSrjDWw==} + '@rollup/rollup-linux-x64-gnu@4.34.7': + resolution: {integrity: sha512-9kPVf9ahnpOMSGlCxXGv980wXD0zRR3wyk8+33/MXQIpQEOpaNe7dEHm5LMfyRZRNt9lMEQuH0jUKj15MkM7QA==} cpu: [x64] os: [linux] - '@rollup/rollup-linux-x64-musl@4.34.6': - resolution: {integrity: sha512-zmmpOQh8vXc2QITsnCiODCDGXFC8LMi64+/oPpPx5qz3pqv0s6x46ps4xoycfUiVZps5PFn1gksZzo4RGTKT+A==} + '@rollup/rollup-linux-x64-musl@4.34.7': + resolution: {integrity: sha512-7wJPXRWTTPtTFDFezA8sle/1sdgxDjuMoRXEKtx97ViRxGGkVQYovem+Q8Pr/2HxiHp74SSRG+o6R0Yq0shPwQ==} cpu: [x64] os: [linux] - '@rollup/rollup-win32-arm64-msvc@4.34.6': - resolution: {integrity: sha512-3/q1qUsO/tLqGBaD4uXsB6coVGB3usxw3qyeVb59aArCgedSF66MPdgRStUd7vbZOsko/CgVaY5fo2vkvPLWiA==} + '@rollup/rollup-win32-arm64-msvc@4.34.7': + resolution: {integrity: sha512-MN7aaBC7mAjsiMEZcsJvwNsQVNZShgES/9SzWp1HC9Yjqb5OpexYnRjF7RmE4itbeesHMYYQiAtUAQaSKs2Rfw==} cpu: [arm64] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.34.6': - resolution: {integrity: sha512-oLHxuyywc6efdKVTxvc0135zPrRdtYVjtVD5GUm55I3ODxhU/PwkQFD97z16Xzxa1Fz0AEe4W/2hzRtd+IfpOA==} + '@rollup/rollup-win32-ia32-msvc@4.34.7': + resolution: {integrity: sha512-aeawEKYswsFu1LhDM9RIgToobquzdtSc4jSVqHV8uApz4FVvhFl/mKh92wc8WpFc6aYCothV/03UjY6y7yLgbg==} cpu: [ia32] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.34.6': - resolution: {integrity: sha512-0PVwmgzZ8+TZ9oGBmdZoQVXflbvuwzN/HRclujpl4N/q3i+y0lqLw8n1bXA8ru3sApDjlmONaNAuYr38y1Kr9w==} + '@rollup/rollup-win32-x64-msvc@4.34.7': + resolution: {integrity: sha512-4ZedScpxxIrVO7otcZ8kCX1mZArtH2Wfj3uFCxRJ9NO80gg1XV0U/b2f/MKaGwj2X3QopHfoWiDQ917FRpwY3w==} cpu: [x64] os: [win32] @@ -1034,8 +1034,8 @@ packages: '@shikijs/types@2.3.2': resolution: {integrity: sha512-CBaMY+a3pepyC4SETi7+bSzO0f6hxEQJUUuS4uD7zppzjmrN4ZRtBqxaT+wOan26CR9eeJ5iBhc4qvWEwn7Eeg==} - '@shikijs/vscode-textmate@10.0.1': - resolution: {integrity: sha512-fTIQwLF+Qhuws31iw7Ncl1R3HUDtGwIipiJ9iU+UsDUwMhegFcQKQHd51nZjb7CArq0MvON8rbgCGQYWHUKAdg==} + '@shikijs/vscode-textmate@10.0.2': + resolution: {integrity: sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==} '@sideway/address@4.1.5': resolution: {integrity: sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q==} @@ -1113,8 +1113,8 @@ packages: '@types/node@17.0.45': resolution: {integrity: sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==} - '@types/node@22.13.1': - resolution: {integrity: sha512-jK8uzQlrvXqEU91UxiK5J7pKHyzgnI1Qnl0QDHIgVGuolJhRb9EEl28Cj9b3rGR8B2lhFCtvIm5os8lFnO/1Ew==} + '@types/node@22.13.4': + resolution: {integrity: sha512-ywP2X0DYtX3y08eFVx5fNIw7/uIv8hYUKgXoK8oayJlLnKcRfEYCxWMVE1XagUdVtCJlZT1AU4LXEABW+L1Peg==} '@types/normalize-package-data@2.4.4': resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} @@ -1209,14 +1209,14 @@ packages: '@vue/compiler-vue2@2.7.16': resolution: {integrity: sha512-qYC3Psj9S/mfu9uVi5WvNZIzq+xnXMhOwbTFKKDD7b1lhpnn71jXSFdTQ+WsIEk0ONCd7VV2IMm7ONl6tbQ86A==} - '@vue/devtools-api@7.7.1': - resolution: {integrity: sha512-Cexc8GimowoDkJ6eNelOPdYIzsu2mgNyp0scOQ3tiaYSb9iok6LOESSsJvHaI+ib3joRfqRJNLkHFjhNuWA5dg==} + '@vue/devtools-api@7.7.2': + resolution: {integrity: sha512-1syn558KhyN+chO5SjlZIwJ8bV/bQ1nOVTG66t2RbG66ZGekyiYNmRO7X9BJCXQqPsFHlnksqvPhce2qpzxFnA==} - '@vue/devtools-kit@7.7.1': - resolution: {integrity: sha512-yhZ4NPnK/tmxGtLNQxmll90jIIXdb2jAhPF76anvn5M/UkZCiLJy28bYgPIACKZ7FCosyKoaope89/RsFJll1w==} + '@vue/devtools-kit@7.7.2': + resolution: {integrity: sha512-CY0I1JH3Z8PECbn6k3TqM1Bk9ASWxeMtTCvZr7vb+CHi+X/QwQm5F1/fPagraamKMAHVfuuCbdcnNg1A4CYVWQ==} - '@vue/devtools-shared@7.7.1': - resolution: {integrity: sha512-BtgF7kHq4BHG23Lezc/3W2UhK2ga7a8ohAIAGJMBr4BkxUFzhqntQtCiuL1ijo2ztWnmusymkirgqUrXoQKumA==} + '@vue/devtools-shared@7.7.2': + resolution: {integrity: sha512-uBFxnp8gwW2vD6FrJB8JZLUzVb6PNRG0B0jBnHsOH8uKyva2qINY8PTF5Te4QlTbMDqU5K6qtJDr6cNsKWhbOA==} '@vue/language-core@2.2.0': resolution: {integrity: sha512-O1ZZFaaBGkKbsRfnVH1ifOK1/1BUkyK+3SQsfnh6PmMmD4qJcTU8godCeA96jjDRTL6zgnK7YzCHfaUlH2r0Mw==} @@ -1243,11 +1243,11 @@ packages: '@vue/shared@3.5.13': resolution: {integrity: sha512-/hnE/qP5ZoGpol0a5mDi45bOd7t3tjYJBjsgCsivow7D48cJeV5l05RD82lPqi7gRiphZM37rnhW1l6ZoCNNnQ==} - '@vueuse/core@12.5.0': - resolution: {integrity: sha512-GVyH1iYqNANwcahAx8JBm6awaNgvR/SwZ1fjr10b8l1HIgDp82ngNbfzJUgOgWEoxjL+URAggnlilAEXwCOZtg==} + '@vueuse/core@12.7.0': + resolution: {integrity: sha512-jtK5B7YjZXmkGNHjviyGO4s3ZtEhbzSgrbX+s5o+Lr8i2nYqNyHuPVOeTdM1/hZ5Tkxg/KktAuAVDDiHMraMVA==} - '@vueuse/integrations@12.5.0': - resolution: {integrity: sha512-HYLt8M6mjUfcoUOzyBcX2RjpfapIwHPBmQJtTmXOQW845Y/Osu9VuTJ5kPvnmWJ6IUa05WpblfOwZ+P0G4iZsQ==} + '@vueuse/integrations@12.7.0': + resolution: {integrity: sha512-IEq7K4bCl7mn3uKJaWtNXnd1CAPaHLUMuyj5K1/k/pVcItt0VONZW8xiGxdIovJcQjkzOHjImhX5t6gija+0/g==} peerDependencies: async-validator: ^4 axios: ^1 @@ -1287,11 +1287,11 @@ packages: universal-cookie: optional: true - '@vueuse/metadata@12.5.0': - resolution: {integrity: sha512-Ui7Lo2a7AxrMAXRF+fAp9QsXuwTeeZ8fIB9wsLHqzq9MQk+2gMYE2IGJW48VMJ8ecvCB3z3GsGLKLbSasQ5Qlg==} + '@vueuse/metadata@12.7.0': + resolution: {integrity: sha512-4VvTH9mrjXqFN5LYa5YfqHVRI6j7R00Vy4995Rw7PQxyCL3z0Lli86iN4UemWqixxEvYfRjG+hF9wL8oLOn+3g==} - '@vueuse/shared@12.5.0': - resolution: {integrity: sha512-vMpcL1lStUU6O+kdj6YdHDixh0odjPAUM15uJ9f7MY781jcYkIwFA4iv2EfoIPO6vBmvutI1HxxAwmf0cx5ISQ==} + '@vueuse/shared@12.7.0': + resolution: {integrity: sha512-coLlUw2HHKsm7rPN6WqHJQr18WymN4wkA/3ThFaJ4v4gWGWAQQGK+MJxLuJTBs4mojQiazlVWAKNJNpUWGRkNw==} abort-controller@3.0.0: resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} @@ -1388,11 +1388,15 @@ packages: resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} engines: {node: '>=8'} + call-bind-apply-helpers@1.0.2: + resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} + engines: {node: '>= 0.4'} + ccount@2.0.1: resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} - chai@5.1.2: - resolution: {integrity: sha512-aGtmf24DW6MLHHG5gCx4zaI3uBq3KRtxeVs0DjFH6Z0rDNbsvTxFASFvdj79pxjxZ8/5u3PIiN3IwEIQkiiuPw==} + chai@5.2.0: + resolution: {integrity: sha512-mCuXncKXk5iCLhfhwTc0izo0gtEmpz5CtG2y8GiOINBlMVS6v8TMRc5TaLWKS6692m9+dVVfzgeVxR5UxWHTYw==} engines: {node: '>=12'} chalk@5.4.1: @@ -1623,6 +1627,10 @@ packages: resolution: {integrity: sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==} engines: {node: '>=8'} + dunder-proto@1.0.1: + resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} + engines: {node: '>= 0.4'} + eastasianwidth@0.2.0: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} @@ -1649,9 +1657,25 @@ packages: resolution: {integrity: sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==} engines: {node: '>=18'} + es-define-property@1.0.1: + resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} + engines: {node: '>= 0.4'} + + es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} + es-module-lexer@1.6.0: resolution: {integrity: sha512-qqnD1yMU6tk/jnaMosogGySTZP8YtUgAffA9nMN+E/rjxcfRQ6IEk7IiozUjgxKoFHBGjTLnrHB/YC45r/59EQ==} + es-object-atoms@1.1.1: + resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} + engines: {node: '>= 0.4'} + + es-set-tostringtag@2.1.0: + resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} + engines: {node: '>= 0.4'} + esbuild@0.24.2: resolution: {integrity: sha512-+9egpBW8I3CD5XPe0n6BfT5fxLzxrlDzqydF3aviG+9ni1lDC/OvMHcxqEFV0+LANZG5R1bFMWfUrjVsdwxJvA==} engines: {node: '>=18'} @@ -1759,8 +1783,8 @@ packages: resolution: {integrity: sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==} engines: {node: '>=14'} - form-data@4.0.1: - resolution: {integrity: sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==} + form-data@4.0.2: + resolution: {integrity: sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==} engines: {node: '>= 6'} fs-extra@11.3.0: @@ -1779,10 +1803,18 @@ packages: resolution: {integrity: sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ==} engines: {node: '>=18'} + get-intrinsic@1.2.7: + resolution: {integrity: sha512-VW6Pxhsrk0KAOqs3WEd0klDiF/+V7gQOpAvY1jVU/LHmaD/kQO4523aiJuikX/QAKYiW6x8Jh+RJej1almdtCA==} + engines: {node: '>= 0.4'} + get-port@7.1.0: resolution: {integrity: sha512-QB9NKEeDg3xxVwCCwJQ9+xycaz6pBB6iQ76wiWMl1927n0Kir6alPiP+yuiICLLU4jpMe08dXfpebuQppFA2zw==} engines: {node: '>=16'} + get-proto@1.0.1: + resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} + engines: {node: '>= 0.4'} + get-stdin@9.0.0: resolution: {integrity: sha512-dVKBjfWisLAicarI2Sf+JuBE/DghV4UzNAVe9yhEJuzeREd3JhOTE9cUaJTeSa77fsbQUK3pcOpJfM59+VKZaA==} engines: {node: '>=12'} @@ -1817,10 +1849,14 @@ packages: engines: {node: 20 || >=22} hasBin: true - globals@15.14.0: - resolution: {integrity: sha512-OkToC372DtlQeje9/zHIo5CT8lRP/FUgEOKBEhU4e0abL7J7CD24fD9ohiLN5hagG/kWCYj4K5oaxxtj2Z0Dig==} + globals@15.15.0: + resolution: {integrity: sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==} engines: {node: '>=18'} + gopd@1.2.0: + resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} + engines: {node: '>= 0.4'} + graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} @@ -1833,6 +1869,14 @@ packages: engines: {node: '>=0.4.7'} hasBin: true + has-symbols@1.1.0: + resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} + engines: {node: '>= 0.4'} + + has-tostringtag@1.0.2: + resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} + engines: {node: '>= 0.4'} + hasown@2.0.2: resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} engines: {node: '>= 0.4'} @@ -2087,6 +2131,10 @@ packages: resolution: {integrity: sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==} hasBin: true + math-intrinsics@1.1.0: + resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} + engines: {node: '>= 0.4'} + mathjax-full@3.2.2: resolution: {integrity: sha512-+LfG9Fik+OuI8SLwsiR02IVdjcnRCy5MufYLi0C3TdMT56L/pjB0alMVGgoWJF8pN9Rc7FESycZB9BMNWIid5w==} @@ -2199,8 +2247,8 @@ packages: engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true - nanoid@5.0.9: - resolution: {integrity: sha512-Aooyr6MXU6HpvvWXKoVoXwKMs/KyVakWwg7xQfv5/S/RIgJMy0Ifa45H9qqYy7pTCszrHzP21Uk4PZq2HpEM8Q==} + nanoid@5.1.0: + resolution: {integrity: sha512-zDAl/llz8Ue/EblwSYwdxGBYfj46IM1dhjVi8dyp9LQffoIGxJEAHj2oeZ4uNcgycSRcQ83CnfcZqEJzVDLcDw==} engines: {node: ^18 || >=20} hasBin: true @@ -2369,8 +2417,8 @@ packages: preact@10.25.4: resolution: {integrity: sha512-jLdZDb+Q+odkHJ+MpW/9U5cODzqnB+fy2EiHSZES7ldV5LK7yjlVzTp7R8Xy6W6y75kfK8iWYtFVH7lvjwrCMA==} - prettier@3.5.0: - resolution: {integrity: sha512-quyMrVt6svPS7CjQ9gKb3GLEX/rl3BCL2oa/QkNcXv4YNVBC9olt3s+H7ukto06q7B1Qz46PbrKLO34PR6vXcA==} + prettier@3.5.1: + resolution: {integrity: sha512-hPpFQvHwL3Qv5AdRvBFMhnKo4tYxp0ReXiPn2bxkiohEX6mBeBwEpBSQTkD458RaaDKQMYSp4hX4UtfUTA5wDw==} engines: {node: '>=14'} hasBin: true @@ -2415,12 +2463,12 @@ packages: resolution: {integrity: sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - readable-web-to-node-stream@3.0.3: - resolution: {integrity: sha512-In3boYjBnbGVrLuuRu/Ath/H6h1jgk30nAsk/71tCare1dTVoe1oMBGRn5LGf0n3c1BcHwwAqpraxX4AUAP5KA==} + readable-web-to-node-stream@3.0.4: + resolution: {integrity: sha512-9nX56alTf5bwXQ3ZDipHJhusu9NTQJ/CVPtb/XHAJCXihZeitfJvIRS4GqQ/mfIoOE3IelHMrpayVrosdHBuLw==} engines: {node: '>=8'} - readdirp@4.1.1: - resolution: {integrity: sha512-h80JrZu/MHUZCyHu5ciuoI0+WxsCxzxJTILn6Fs8rxSnFPh+UVHYfeIxK1nVGugMqkfC4vJcBOYbkfkwYK0+gw==} + readdirp@4.1.2: + resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==} engines: {node: '>= 14.18.0'} regex-recursion@6.0.2: @@ -2474,8 +2522,8 @@ packages: esbuild: '>=0.18.0' rollup: ^1.20.0 || ^2.0.0 || ^3.0.0 || ^4.0.0 - rollup@4.34.6: - resolution: {integrity: sha512-wc2cBWqJgkU3Iz5oztRkQbfVkbxoz5EhnCGOrnJvnLnQ7O0WhQUYyv18qQI79O8L7DdHrrlJNeCHd4VGpnaXKQ==} + rollup@4.34.7: + resolution: {integrity: sha512-8qhyN0oZ4x0H6wmBgfKxJtxM7qS98YJ0k0kNh5ECVtuchIJ7z9IVVvzpmtQyT10PXKMtBxYr1wQ5Apg8RS8kXQ==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true @@ -3069,7 +3117,7 @@ snapshots: package-manager-detector: 0.2.9 tinyexec: 0.3.2 - '@antfu/utils@8.1.0': {} + '@antfu/utils@8.1.1': {} '@babel/code-frame@7.26.2': dependencies: @@ -3081,11 +3129,11 @@ snapshots: '@babel/helper-validator-identifier@7.25.9': {} - '@babel/parser@7.26.8': + '@babel/parser@7.26.9': dependencies: - '@babel/types': 7.26.8 + '@babel/types': 7.26.9 - '@babel/types@7.26.8': + '@babel/types@7.26.9': dependencies: '@babel/helper-string-parser': 7.25.9 '@babel/helper-validator-identifier': 7.25.9 @@ -3302,7 +3350,7 @@ snapshots: dependencies: '@iconify/types': 2.0.0 - '@iconify-json/vscode-icons@1.2.13': + '@iconify-json/vscode-icons@1.2.14': dependencies: '@iconify/types': 2.0.0 @@ -3311,10 +3359,10 @@ snapshots: '@iconify/utils@2.3.0': dependencies: '@antfu/install-pkg': 1.0.0 - '@antfu/utils': 8.1.0 + '@antfu/utils': 8.1.1 '@iconify/types': 2.0.0 debug: 4.4.0 - globals: 15.14.0 + globals: 15.15.0 kolorist: 1.8.0 local-pkg: 1.0.0 mlly: 1.7.4 @@ -3418,13 +3466,13 @@ snapshots: '@polka/url@1.0.0-next.28': {} - '@rollup/plugin-alias@5.1.1(rollup@4.34.6)': + '@rollup/plugin-alias@5.1.1(rollup@4.34.7)': optionalDependencies: - rollup: 4.34.6 + rollup: 4.34.7 - '@rollup/plugin-commonjs@28.0.2(rollup@4.34.6)': + '@rollup/plugin-commonjs@28.0.2(rollup@4.34.7)': dependencies: - '@rollup/pluginutils': 5.1.4(rollup@4.34.6) + '@rollup/pluginutils': 5.1.4(rollup@4.34.7) commondir: 1.0.1 estree-walker: 2.0.2 fdir: 6.4.3(picomatch@4.0.2) @@ -3432,94 +3480,94 @@ snapshots: magic-string: 0.30.17 picomatch: 4.0.2 optionalDependencies: - rollup: 4.34.6 + rollup: 4.34.7 - '@rollup/plugin-json@6.1.0(rollup@4.34.6)': + '@rollup/plugin-json@6.1.0(rollup@4.34.7)': dependencies: - '@rollup/pluginutils': 5.1.4(rollup@4.34.6) + '@rollup/pluginutils': 5.1.4(rollup@4.34.7) optionalDependencies: - rollup: 4.34.6 + rollup: 4.34.7 - '@rollup/plugin-node-resolve@16.0.0(rollup@4.34.6)': + '@rollup/plugin-node-resolve@16.0.0(rollup@4.34.7)': dependencies: - '@rollup/pluginutils': 5.1.4(rollup@4.34.6) + '@rollup/pluginutils': 5.1.4(rollup@4.34.7) '@types/resolve': 1.20.2 deepmerge: 4.3.1 is-module: 1.0.0 resolve: 1.22.10 optionalDependencies: - rollup: 4.34.6 + rollup: 4.34.7 - '@rollup/plugin-replace@6.0.2(rollup@4.34.6)': + '@rollup/plugin-replace@6.0.2(rollup@4.34.7)': dependencies: - '@rollup/pluginutils': 5.1.4(rollup@4.34.6) + '@rollup/pluginutils': 5.1.4(rollup@4.34.7) magic-string: 0.30.17 optionalDependencies: - rollup: 4.34.6 + rollup: 4.34.7 - '@rollup/pluginutils@5.1.4(rollup@4.34.6)': + '@rollup/pluginutils@5.1.4(rollup@4.34.7)': dependencies: '@types/estree': 1.0.6 estree-walker: 2.0.2 picomatch: 4.0.2 optionalDependencies: - rollup: 4.34.6 + rollup: 4.34.7 - '@rollup/rollup-android-arm-eabi@4.34.6': + '@rollup/rollup-android-arm-eabi@4.34.7': optional: true - '@rollup/rollup-android-arm64@4.34.6': + '@rollup/rollup-android-arm64@4.34.7': optional: true - '@rollup/rollup-darwin-arm64@4.34.6': + '@rollup/rollup-darwin-arm64@4.34.7': optional: true - '@rollup/rollup-darwin-x64@4.34.6': + '@rollup/rollup-darwin-x64@4.34.7': optional: true - '@rollup/rollup-freebsd-arm64@4.34.6': + '@rollup/rollup-freebsd-arm64@4.34.7': optional: true - '@rollup/rollup-freebsd-x64@4.34.6': + '@rollup/rollup-freebsd-x64@4.34.7': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.34.6': + '@rollup/rollup-linux-arm-gnueabihf@4.34.7': optional: true - '@rollup/rollup-linux-arm-musleabihf@4.34.6': + '@rollup/rollup-linux-arm-musleabihf@4.34.7': optional: true - '@rollup/rollup-linux-arm64-gnu@4.34.6': + '@rollup/rollup-linux-arm64-gnu@4.34.7': optional: true - '@rollup/rollup-linux-arm64-musl@4.34.6': + '@rollup/rollup-linux-arm64-musl@4.34.7': optional: true - '@rollup/rollup-linux-loongarch64-gnu@4.34.6': + '@rollup/rollup-linux-loongarch64-gnu@4.34.7': optional: true - '@rollup/rollup-linux-powerpc64le-gnu@4.34.6': + '@rollup/rollup-linux-powerpc64le-gnu@4.34.7': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.34.6': + '@rollup/rollup-linux-riscv64-gnu@4.34.7': optional: true - '@rollup/rollup-linux-s390x-gnu@4.34.6': + '@rollup/rollup-linux-s390x-gnu@4.34.7': optional: true - '@rollup/rollup-linux-x64-gnu@4.34.6': + '@rollup/rollup-linux-x64-gnu@4.34.7': optional: true - '@rollup/rollup-linux-x64-musl@4.34.6': + '@rollup/rollup-linux-x64-musl@4.34.7': optional: true - '@rollup/rollup-win32-arm64-msvc@4.34.6': + '@rollup/rollup-win32-arm64-msvc@4.34.7': optional: true - '@rollup/rollup-win32-ia32-msvc@4.34.6': + '@rollup/rollup-win32-ia32-msvc@4.34.7': optional: true - '@rollup/rollup-win32-x64-msvc@4.34.6': + '@rollup/rollup-win32-x64-msvc@4.34.7': optional: true '@sec-ant/readable-stream@0.4.1': {} @@ -3529,20 +3577,20 @@ snapshots: '@shikijs/engine-javascript': 2.3.2 '@shikijs/engine-oniguruma': 2.3.2 '@shikijs/types': 2.3.2 - '@shikijs/vscode-textmate': 10.0.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': dependencies: '@shikijs/types': 2.3.2 - '@shikijs/vscode-textmate': 10.0.1 + '@shikijs/vscode-textmate': 10.0.2 oniguruma-to-es: 3.1.0 '@shikijs/engine-oniguruma@2.3.2': dependencies: '@shikijs/types': 2.3.2 - '@shikijs/vscode-textmate': 10.0.1 + '@shikijs/vscode-textmate': 10.0.2 '@shikijs/langs@2.3.2': dependencies: @@ -3559,10 +3607,10 @@ snapshots: '@shikijs/types@2.3.2': dependencies: - '@shikijs/vscode-textmate': 10.0.1 + '@shikijs/vscode-textmate': 10.0.2 '@types/hast': 3.0.4 - '@shikijs/vscode-textmate@10.0.1': {} + '@shikijs/vscode-textmate@10.0.2': {} '@sideway/address@4.1.5': dependencies: @@ -3578,7 +3626,7 @@ snapshots: '@types/cross-spawn@6.0.6': dependencies: - '@types/node': 22.13.1 + '@types/node': 22.13.4 '@types/debug@4.1.12': dependencies: @@ -3589,7 +3637,7 @@ snapshots: '@types/fs-extra@11.0.4': dependencies: '@types/jsonfile': 6.1.4 - '@types/node': 22.13.1 + '@types/node': 22.13.4 '@types/hast@3.0.4': dependencies: @@ -3601,7 +3649,7 @@ snapshots: '@types/jsonfile@6.1.4': dependencies: - '@types/node': 22.13.1 + '@types/node': 22.13.4 '@types/linkify-it@5.0.0': {} @@ -3644,7 +3692,7 @@ snapshots: '@types/node@17.0.45': {} - '@types/node@22.13.1': + '@types/node@22.13.4': dependencies: undici-types: 6.20.0 @@ -3658,14 +3706,14 @@ snapshots: '@types/prompts@2.4.9': dependencies: - '@types/node': 22.13.1 + '@types/node': 22.13.4 kleur: 3.0.3 '@types/resolve@1.20.2': {} '@types/sax@1.2.7': dependencies: - '@types/node': 22.13.1 + '@types/node': 22.13.4 '@types/semver@7.5.8': {} @@ -3677,25 +3725,25 @@ snapshots: '@ungap/structured-clone@1.3.0': {} - '@vitejs/plugin-vue@5.2.1(vite@6.1.0(@types/node@22.13.1)(jiti@1.21.7)(yaml@2.7.0))(vue@3.5.13(typescript@5.7.3))': + '@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: - vite: 6.1.0(@types/node@22.13.1)(jiti@1.21.7)(yaml@2.7.0) + 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) '@vitest/expect@3.0.5': dependencies: '@vitest/spy': 3.0.5 '@vitest/utils': 3.0.5 - chai: 5.1.2 + chai: 5.2.0 tinyrainbow: 2.0.0 - '@vitest/mocker@3.0.5(vite@6.1.0(@types/node@22.13.1)(jiti@1.21.7)(yaml@2.7.0))': + '@vitest/mocker@3.0.5(vite@6.1.0(@types/node@22.13.4)(jiti@1.21.7)(yaml@2.7.0))': dependencies: '@vitest/spy': 3.0.5 estree-walker: 3.0.3 magic-string: 0.30.17 optionalDependencies: - vite: 6.1.0(@types/node@22.13.1)(jiti@1.21.7)(yaml@2.7.0) + vite: 6.1.0(@types/node@22.13.4)(jiti@1.21.7)(yaml@2.7.0) '@vitest/pretty-format@3.0.5': dependencies: @@ -3736,7 +3784,7 @@ snapshots: '@vue/compiler-core@3.5.13': dependencies: - '@babel/parser': 7.26.8 + '@babel/parser': 7.26.9 '@vue/shared': 3.5.13 entities: 4.5.0 estree-walker: 2.0.2 @@ -3749,7 +3797,7 @@ snapshots: '@vue/compiler-sfc@3.5.13': dependencies: - '@babel/parser': 7.26.8 + '@babel/parser': 7.26.9 '@vue/compiler-core': 3.5.13 '@vue/compiler-dom': 3.5.13 '@vue/compiler-ssr': 3.5.13 @@ -3769,13 +3817,13 @@ snapshots: de-indent: 1.0.2 he: 1.2.0 - '@vue/devtools-api@7.7.1': + '@vue/devtools-api@7.7.2': dependencies: - '@vue/devtools-kit': 7.7.1 + '@vue/devtools-kit': 7.7.2 - '@vue/devtools-kit@7.7.1': + '@vue/devtools-kit@7.7.2': dependencies: - '@vue/devtools-shared': 7.7.1 + '@vue/devtools-shared': 7.7.2 birpc: 0.2.19 hookable: 5.5.3 mitt: 3.0.1 @@ -3783,7 +3831,7 @@ snapshots: speakingurl: 14.0.1 superjson: 2.2.2 - '@vue/devtools-shared@7.7.1': + '@vue/devtools-shared@7.7.2': dependencies: rfdc: 1.4.1 @@ -3824,19 +3872,19 @@ snapshots: '@vue/shared@3.5.13': {} - '@vueuse/core@12.5.0(typescript@5.7.3)': + '@vueuse/core@12.7.0(typescript@5.7.3)': dependencies: '@types/web-bluetooth': 0.0.20 - '@vueuse/metadata': 12.5.0 - '@vueuse/shared': 12.5.0(typescript@5.7.3) + '@vueuse/metadata': 12.7.0 + '@vueuse/shared': 12.7.0(typescript@5.7.3) vue: 3.5.13(typescript@5.7.3) transitivePeerDependencies: - typescript - '@vueuse/integrations@12.5.0(axios@1.7.9(debug@4.4.0))(focus-trap@7.6.4)(typescript@5.7.3)': + '@vueuse/integrations@12.7.0(axios@1.7.9(debug@4.4.0))(focus-trap@7.6.4)(typescript@5.7.3)': dependencies: - '@vueuse/core': 12.5.0(typescript@5.7.3) - '@vueuse/shared': 12.5.0(typescript@5.7.3) + '@vueuse/core': 12.7.0(typescript@5.7.3) + '@vueuse/shared': 12.7.0(typescript@5.7.3) vue: 3.5.13(typescript@5.7.3) optionalDependencies: axios: 1.7.9(debug@4.4.0) @@ -3844,9 +3892,9 @@ snapshots: transitivePeerDependencies: - typescript - '@vueuse/metadata@12.5.0': {} + '@vueuse/metadata@12.7.0': {} - '@vueuse/shared@12.5.0(typescript@5.7.3)': + '@vueuse/shared@12.7.0(typescript@5.7.3)': dependencies: vue: 3.5.13(typescript@5.7.3) transitivePeerDependencies: @@ -3911,7 +3959,7 @@ snapshots: axios@1.7.9(debug@4.4.0): dependencies: follow-redirects: 1.15.9(debug@4.4.0) - form-data: 4.0.1 + form-data: 4.0.2 proxy-from-env: 1.1.0 transitivePeerDependencies: - debug @@ -3943,9 +3991,14 @@ snapshots: cac@6.7.14: {} + call-bind-apply-helpers@1.0.2: + dependencies: + es-errors: 1.3.0 + function-bind: 1.1.2 + ccount@2.0.1: {} - chai@5.1.2: + chai@5.2.0: dependencies: assertion-error: 2.0.1 check-error: 2.1.1 @@ -3981,7 +4034,7 @@ snapshots: chokidar@4.0.3: dependencies: - readdirp: 4.1.1 + readdirp: 4.1.2 cli-cursor@5.0.0: dependencies: @@ -4182,6 +4235,12 @@ snapshots: dependencies: is-obj: 2.0.0 + dunder-proto@1.0.1: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-errors: 1.3.0 + gopd: 1.2.0 + eastasianwidth@0.2.0: {} emoji-regex-xs@1.0.0: {} @@ -4198,8 +4257,23 @@ snapshots: environment@1.1.0: {} + es-define-property@1.0.1: {} + + es-errors@1.3.0: {} + es-module-lexer@1.6.0: {} + es-object-atoms@1.1.1: + dependencies: + es-errors: 1.3.0 + + es-set-tostringtag@2.1.0: + dependencies: + es-errors: 1.3.0 + get-intrinsic: 1.2.7 + has-tostringtag: 1.0.2 + hasown: 2.0.2 + esbuild@0.24.2: optionalDependencies: '@esbuild/aix-ppc64': 0.24.2 @@ -4331,7 +4405,7 @@ snapshots: file-type@18.7.0: dependencies: - readable-web-to-node-stream: 3.0.3 + readable-web-to-node-stream: 3.0.4 strtok3: 7.1.1 token-types: 5.0.1 @@ -4354,10 +4428,11 @@ snapshots: cross-spawn: 7.0.6 signal-exit: 4.1.0 - form-data@4.0.1: + form-data@4.0.2: dependencies: asynckit: 0.4.0 combined-stream: 1.0.8 + es-set-tostringtag: 2.1.0 mime-types: 2.1.35 fs-extra@11.3.0: @@ -4373,8 +4448,26 @@ snapshots: get-east-asian-width@1.3.0: {} + get-intrinsic@1.2.7: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-define-property: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + function-bind: 1.1.2 + get-proto: 1.0.1 + gopd: 1.2.0 + has-symbols: 1.1.0 + hasown: 2.0.2 + math-intrinsics: 1.1.0 + get-port@7.1.0: {} + get-proto@1.0.1: + dependencies: + dunder-proto: 1.0.1 + es-object-atoms: 1.1.1 + get-stdin@9.0.0: {} get-stream@8.0.1: {} @@ -4417,7 +4510,9 @@ snapshots: package-json-from-dist: 1.0.1 path-scurry: 2.0.0 - globals@15.14.0: {} + globals@15.15.0: {} + + gopd@1.2.0: {} graceful-fs@4.2.11: {} @@ -4437,6 +4532,12 @@ snapshots: optionalDependencies: uglify-js: 3.19.3 + has-symbols@1.1.0: {} + + has-tostringtag@1.0.2: + dependencies: + has-symbols: 1.1.0 + hasown@2.0.2: dependencies: function-bind: 1.1.2 @@ -4697,6 +4798,8 @@ snapshots: punycode.js: 2.3.1 uc.micro: 2.1.0 + math-intrinsics@1.1.0: {} + mathjax-full@3.2.2: dependencies: esm: 3.2.25 @@ -4797,7 +4900,7 @@ snapshots: nanoid@3.3.8: {} - nanoid@5.0.9: {} + nanoid@5.1.0: {} neo-async@2.6.2: {} @@ -4954,7 +5057,7 @@ snapshots: preact@10.25.4: {} - prettier@3.5.0: {} + prettier@3.5.1: {} pretty-ms@9.2.0: dependencies: @@ -4999,12 +5102,11 @@ snapshots: process: 0.11.10 string_decoder: 1.3.0 - readable-web-to-node-stream@3.0.3: + readable-web-to-node-stream@3.0.4: dependencies: - process: 0.11.10 readable-stream: 4.7.0 - readdirp@4.1.1: {} + readdirp@4.1.2: {} regex-recursion@6.0.2: dependencies: @@ -5040,48 +5142,48 @@ snapshots: glob: 11.0.1 package-json-from-dist: 1.0.1 - rollup-plugin-dts@6.1.1(rollup@4.34.6)(typescript@5.7.3): + rollup-plugin-dts@6.1.1(rollup@4.34.7)(typescript@5.7.3): dependencies: magic-string: 0.30.17 - rollup: 4.34.6 + rollup: 4.34.7 typescript: 5.7.3 optionalDependencies: '@babel/code-frame': 7.26.2 - rollup-plugin-esbuild@6.2.0(esbuild@0.25.0)(rollup@4.34.6): + rollup-plugin-esbuild@6.2.0(esbuild@0.25.0)(rollup@4.34.7): dependencies: debug: 4.4.0 es-module-lexer: 1.6.0 esbuild: 0.25.0 get-tsconfig: 4.10.0 - rollup: 4.34.6 + rollup: 4.34.7 unplugin-utils: 0.2.4 transitivePeerDependencies: - supports-color - rollup@4.34.6: + rollup@4.34.7: dependencies: '@types/estree': 1.0.6 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.34.6 - '@rollup/rollup-android-arm64': 4.34.6 - '@rollup/rollup-darwin-arm64': 4.34.6 - '@rollup/rollup-darwin-x64': 4.34.6 - '@rollup/rollup-freebsd-arm64': 4.34.6 - '@rollup/rollup-freebsd-x64': 4.34.6 - '@rollup/rollup-linux-arm-gnueabihf': 4.34.6 - '@rollup/rollup-linux-arm-musleabihf': 4.34.6 - '@rollup/rollup-linux-arm64-gnu': 4.34.6 - '@rollup/rollup-linux-arm64-musl': 4.34.6 - '@rollup/rollup-linux-loongarch64-gnu': 4.34.6 - '@rollup/rollup-linux-powerpc64le-gnu': 4.34.6 - '@rollup/rollup-linux-riscv64-gnu': 4.34.6 - '@rollup/rollup-linux-s390x-gnu': 4.34.6 - '@rollup/rollup-linux-x64-gnu': 4.34.6 - '@rollup/rollup-linux-x64-musl': 4.34.6 - '@rollup/rollup-win32-arm64-msvc': 4.34.6 - '@rollup/rollup-win32-ia32-msvc': 4.34.6 - '@rollup/rollup-win32-x64-msvc': 4.34.6 + '@rollup/rollup-android-arm-eabi': 4.34.7 + '@rollup/rollup-android-arm64': 4.34.7 + '@rollup/rollup-darwin-arm64': 4.34.7 + '@rollup/rollup-darwin-x64': 4.34.7 + '@rollup/rollup-freebsd-arm64': 4.34.7 + '@rollup/rollup-freebsd-x64': 4.34.7 + '@rollup/rollup-linux-arm-gnueabihf': 4.34.7 + '@rollup/rollup-linux-arm-musleabihf': 4.34.7 + '@rollup/rollup-linux-arm64-gnu': 4.34.7 + '@rollup/rollup-linux-arm64-musl': 4.34.7 + '@rollup/rollup-linux-loongarch64-gnu': 4.34.7 + '@rollup/rollup-linux-powerpc64le-gnu': 4.34.7 + '@rollup/rollup-linux-riscv64-gnu': 4.34.7 + '@rollup/rollup-linux-s390x-gnu': 4.34.7 + '@rollup/rollup-linux-x64-gnu': 4.34.7 + '@rollup/rollup-linux-x64-musl': 4.34.7 + '@rollup/rollup-win32-arm64-msvc': 4.34.7 + '@rollup/rollup-win32-ia32-msvc': 4.34.7 + '@rollup/rollup-win32-x64-msvc': 4.34.7 fsevents: 2.3.3 rtlcss@4.3.0: @@ -5126,7 +5228,7 @@ snapshots: '@shikijs/langs': 2.3.2 '@shikijs/themes': 2.3.2 '@shikijs/types': 2.3.2 - '@shikijs/vscode-textmate': 10.0.1 + '@shikijs/vscode-textmate': 10.0.2 '@types/hast': 3.0.4 siginfo@2.0.0: {} @@ -5387,13 +5489,13 @@ snapshots: '@types/unist': 3.0.3 vfile-message: 4.0.2 - vite-node@3.0.5(@types/node@22.13.1)(jiti@1.21.7)(yaml@2.7.0): + vite-node@3.0.5(@types/node@22.13.4)(jiti@1.21.7)(yaml@2.7.0): dependencies: cac: 6.7.14 debug: 4.4.0 es-module-lexer: 1.6.0 pathe: 2.0.3 - vite: 6.1.0(@types/node@22.13.1)(jiti@1.21.7)(yaml@2.7.0) + vite: 6.1.0(@types/node@22.13.4)(jiti@1.21.7)(yaml@2.7.0) transitivePeerDependencies: - '@types/node' - jiti @@ -5408,13 +5510,13 @@ snapshots: - tsx - yaml - vite@6.1.0(@types/node@22.13.1)(jiti@1.21.7)(yaml@2.7.0): + vite@6.1.0(@types/node@22.13.4)(jiti@1.21.7)(yaml@2.7.0): dependencies: esbuild: 0.24.2 postcss: 8.5.2 - rollup: 4.34.6 + rollup: 4.34.7 optionalDependencies: - '@types/node': 22.13.1 + '@types/node': 22.13.4 fsevents: 2.3.3 jiti: 1.21.7 yaml: 2.7.0 @@ -5422,21 +5524,21 @@ snapshots: vitepress-plugin-group-icons@1.3.5: dependencies: '@iconify-json/logos': 1.2.4 - '@iconify-json/vscode-icons': 1.2.13 + '@iconify-json/vscode-icons': 1.2.14 '@iconify/utils': 2.3.0 transitivePeerDependencies: - supports-color - vitest@3.0.5(@types/debug@4.1.12)(@types/node@22.13.1)(jiti@1.21.7)(yaml@2.7.0): + vitest@3.0.5(@types/debug@4.1.12)(@types/node@22.13.4)(jiti@1.21.7)(yaml@2.7.0): dependencies: '@vitest/expect': 3.0.5 - '@vitest/mocker': 3.0.5(vite@6.1.0(@types/node@22.13.1)(jiti@1.21.7)(yaml@2.7.0)) + '@vitest/mocker': 3.0.5(vite@6.1.0(@types/node@22.13.4)(jiti@1.21.7)(yaml@2.7.0)) '@vitest/pretty-format': 3.0.5 '@vitest/runner': 3.0.5 '@vitest/snapshot': 3.0.5 '@vitest/spy': 3.0.5 '@vitest/utils': 3.0.5 - chai: 5.1.2 + chai: 5.2.0 debug: 4.4.0 expect-type: 1.1.0 magic-string: 0.30.17 @@ -5446,12 +5548,12 @@ snapshots: tinyexec: 0.3.2 tinypool: 1.0.2 tinyrainbow: 2.0.0 - vite: 6.1.0(@types/node@22.13.1)(jiti@1.21.7)(yaml@2.7.0) - vite-node: 3.0.5(@types/node@22.13.1)(jiti@1.21.7)(yaml@2.7.0) + vite: 6.1.0(@types/node@22.13.4)(jiti@1.21.7)(yaml@2.7.0) + vite-node: 3.0.5(@types/node@22.13.4)(jiti@1.21.7)(yaml@2.7.0) why-is-node-running: 2.3.0 optionalDependencies: '@types/debug': 4.1.12 - '@types/node': 22.13.1 + '@types/node': 22.13.4 transitivePeerDependencies: - jiti - less diff --git a/src/node/markdown/plugins/containers.ts b/src/node/markdown/plugins/containers.ts index bbed26ae..03be3abc 100644 --- a/src/node/markdown/plugins/containers.ts +++ b/src/node/markdown/plugins/containers.ts @@ -2,9 +2,7 @@ import type MarkdownIt from 'markdown-it' import container from 'markdown-it-container' import type { RenderRule } from 'markdown-it/lib/renderer.mjs' import type Token from 'markdown-it/lib/token.mjs' -import { nanoid } from 'nanoid' import type { MarkdownEnv } from '../../shared' - import { extractTitle, getAdaptiveThemeMarker, @@ -86,7 +84,6 @@ function createCodeGroup(options: Options, md: MarkdownIt): ContainerArgs { { render(tokens, idx) { if (tokens[idx].nesting === 1) { - const name = nanoid(5) let tabs = '' let checked = 'checked' @@ -110,8 +107,7 @@ function createCodeGroup(options: Options, md: MarkdownIt): ContainerArgs { ) if (title) { - const id = nanoid(7) - tabs += `` + tabs += `` if (checked && !isHtml) tokens[i].info += ' active' checked = '' @@ -119,9 +115,7 @@ function createCodeGroup(options: Options, md: MarkdownIt): ContainerArgs { } } - return `
${tabs}
\n` + return `
${tabs}
\n` } return `
\n` } From 1969cf4f3b93ad105595e4e2f8b030b04eb1c975 Mon Sep 17 00:00:00 2001 From: Anthony Fu Date: Sun, 16 Feb 2025 02:27:42 +0800 Subject: [PATCH 13/53] fix: upgrade shiki, remove embedded languages workaround (#4566) --- docs/.vitepress/config/shared.ts | 3 - package.json | 8 +- pnpm-lock.yaml | 102 ++++++++++++------------- src/node/markdown/plugins/highlight.ts | 19 ++--- 4 files changed, 61 insertions(+), 71 deletions(-) diff --git a/docs/.vitepress/config/shared.ts b/docs/.vitepress/config/shared.ts index 0763ce69..1f4961d2 100644 --- a/docs/.vitepress/config/shared.ts +++ b/docs/.vitepress/config/shared.ts @@ -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. { diff --git a/package.json b/package.json index 49cbc7f1..b7f644c7 100644 --- a/package.json +++ b/package.json @@ -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" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 2a7e98c3..99f5817b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -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 diff --git a/src/node/markdown/plugins/highlight.ts b/src/node/markdown/plugins/highlight.ts index f0a0170e..3746fb45 100644 --- a/src/node/markdown/plugins/highlight.ts +++ b/src/node/markdown/plugins/highlight.ts @@ -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: [ From e466910e2b105b9c45d883ff5e52551cf5a109c6 Mon Sep 17 00:00:00 2001 From: Henrikh Kantuni Date: Sat, 15 Feb 2025 13:30:45 -0500 Subject: [PATCH 14/53] chore: fix typo (#4530) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit "a accent" → "an accent" --- template/.vitepress/theme/style.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/template/.vitepress/theme/style.css b/template/.vitepress/theme/style.css index 12ae89a4..9b73b411 100644 --- a/template/.vitepress/theme/style.css +++ b/template/.vitepress/theme/style.css @@ -24,7 +24,7 @@ * * The soft color must be semi transparent alpha channel. This is crucial * because it allows adding multiple "soft" colors on top of each other - * to create a accent, such as when having inline code block inside + * to create an accent, such as when having inline code block inside * custom containers. * * - `default`: The color used purely for subtle indication without any From 5dccaeef055beb109919f8990032975a0d630384 Mon Sep 17 00:00:00 2001 From: Will Hack <18036720+willhack@users.noreply.github.com> Date: Sat, 15 Feb 2025 13:44:19 -0500 Subject: [PATCH 15/53] fix(theme): code block contrast ratio (#4487) --- src/client/theme-default/styles/vars.css | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/client/theme-default/styles/vars.css b/src/client/theme-default/styles/vars.css index 687f9efd..2a974f25 100644 --- a/src/client/theme-default/styles/vars.css +++ b/src/client/theme-default/styles/vars.css @@ -340,10 +340,10 @@ --vp-code-block-bg: var(--vp-c-bg-alt); --vp-code-block-divider-color: var(--vp-c-gutter); - --vp-code-lang-color: var(--vp-c-text-3); + --vp-code-lang-color: var(--vp-c-text-2); --vp-code-line-highlight-color: var(--vp-c-default-soft); - --vp-code-line-number-color: var(--vp-c-text-3); + --vp-code-line-number-color: var(--vp-c-text-2); --vp-code-line-diff-add-color: var(--vp-c-success-soft); --vp-code-line-diff-add-symbol-color: var(--vp-c-success-1); From e5a0ee8161752a77c5bb9546245a940cb5f28fb8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9ban?= Date: Sat, 15 Feb 2025 19:59:22 +0100 Subject: [PATCH 16/53] feat(cli): support custom npm scripts prefix (#4271) --- src/node/init/init.ts | 43 ++++++++++++++++++++++++++++++++++--------- 1 file changed, 34 insertions(+), 9 deletions(-) diff --git a/src/node/init/init.ts b/src/node/init/init.ts index 0cc46af2..6dddee1a 100644 --- a/src/node/init/init.ts +++ b/src/node/init/init.ts @@ -26,6 +26,8 @@ export interface ScaffoldOptions { theme: ScaffoldThemeType useTs: boolean injectNpmScripts: boolean + addNpmScriptsPrefix?: boolean + npmScriptsPrefix?: string } const getPackageManger = () => { @@ -36,7 +38,7 @@ const getPackageManger = () => { export async function init(root: string | undefined) { intro(bold(cyan('Welcome to VitePress!'))) - const options: ScaffoldOptions = await group( + const options: ScaffoldOptions = (await group( { root: async () => { if (root) return root @@ -94,7 +96,25 @@ export async function init(root: string | undefined) { injectNpmScripts: () => confirm({ message: 'Add VitePress npm scripts to package.json?' + }), + + addNpmScriptsPrefix: ({ results }) => { + if (!results.injectNpmScripts) return Promise.resolve(false) + + return confirm({ + message: 'Add a prefix for VitePress npm scripts?', + initialValue: true + }) + }, + + npmScriptsPrefix: ({ results }) => { + if (!results.addNpmScriptsPrefix) return Promise.resolve('docs') + + return text({ + message: 'Prefix for VitePress npm scripts:', + placeholder: 'docs' }) + } }, { onCancel: () => { @@ -102,7 +122,7 @@ export async function init(root: string | undefined) { process.exit(0) } } - ) + )) as ScaffoldOptions outro(scaffold(options)) } @@ -113,7 +133,9 @@ export function scaffold({ description = 'A VitePress Site', theme, useTs, - injectNpmScripts + injectNpmScripts, + addNpmScriptsPrefix = true, + npmScriptsPrefix = 'docs' }: ScaffoldOptions): string { const resolvedRoot = path.resolve(root) const templateDir = path.resolve( @@ -201,15 +223,18 @@ export function scaffold({ const tip = tips.length ? yellow([`\n\nTips:`, ...tips].join('\n- ')) : `` if (injectNpmScripts) { - const scripts = { - 'docs:dev': `vitepress dev${dir}`, - 'docs:build': `vitepress build${dir}`, - 'docs:preview': `vitepress preview${dir}` - } + const scripts: Record = {} + + const prefix = addNpmScriptsPrefix ? `${npmScriptsPrefix}:` : '' + + scripts[`${prefix}dev`] = `vitepress dev${dir}` + scripts[`${prefix}build`] = `vitepress build${dir}` + scripts[`${prefix}preview`] = `vitepress preview${dir}` + Object.assign(userPkg.scripts || (userPkg.scripts = {}), scripts) fs.writeFileSync(pkgPath, JSON.stringify(userPkg, null, 2)) return `Done! Now run ${cyan( - `${getPackageManger()} run docs:dev` + `${getPackageManger()} run ${prefix}dev` )} and start writing.${tip}` } else { const pm = getPackageManger() From 518c0945f159aae679ef710bb48ae3ab3891cc9f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Est=C3=A9ban?= Date: Sat, 15 Feb 2025 20:01:04 +0100 Subject: [PATCH 17/53] feat(cli): support custom `srcDir` (#4270) --- src/node/init/init.ts | 21 +++++++++++++++++++-- template/.vitepress/config.js | 4 +++- 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/src/node/init/init.ts b/src/node/init/init.ts index 6dddee1a..229dd010 100644 --- a/src/node/init/init.ts +++ b/src/node/init/init.ts @@ -21,6 +21,7 @@ export enum ScaffoldThemeType { export interface ScaffoldOptions { root: string + srcDir: string title?: string description?: string theme: ScaffoldThemeType @@ -53,6 +54,13 @@ export async function init(root: string | undefined) { }) }, + srcDir: async () => { + return text({ + message: 'Where should VitePress look for your markdown files?', + initialValue: './' + }) + }, + title: () => text({ message: 'Site title:', @@ -129,6 +137,7 @@ export async function init(root: string | undefined) { export function scaffold({ root = './', + srcDir = './', title = 'My Awesome Project', description = 'A VitePress Site', theme, @@ -138,12 +147,14 @@ export function scaffold({ npmScriptsPrefix = 'docs' }: ScaffoldOptions): string { const resolvedRoot = path.resolve(root) + const resolvedSrcDir = path.resolve(root, srcDir) const templateDir = path.resolve( path.dirname(fileURLToPath(import.meta.url)), '../../template' ) const data = { + srcDir: srcDir === './' ? undefined : JSON.stringify(srcDir), // omit if default title: JSON.stringify(title), description: JSON.stringify(description), useTs, @@ -162,14 +173,20 @@ export function scaffold({ const renderFile = (file: string) => { const filePath = path.resolve(templateDir, file) let targetPath = path.resolve(resolvedRoot, file) + if (useMjs && file === '.vitepress/config.js') { targetPath = targetPath.replace(/\.js$/, '.mjs') } if (useTs) { targetPath = targetPath.replace(/\.(m?)js$/, '.$1ts') } - const src = fs.readFileSync(filePath, 'utf-8') - const compiled = template(src)(data) + if (file.endsWith('.md')) { + targetPath = path.resolve(resolvedSrcDir, file) + } + + const content = fs.readFileSync(filePath, 'utf-8') + const compiled = template(content)(data) + fs.outputFileSync(targetPath, compiled) } diff --git a/template/.vitepress/config.js b/template/.vitepress/config.js index cf26cc23..33711d0b 100644 --- a/template/.vitepress/config.js +++ b/template/.vitepress/config.js @@ -1,7 +1,9 @@ import { defineConfig } from 'vitepress' // https://vitepress.dev/reference/site-config -export default defineConfig({ +export default defineConfig({<% if (srcDir) { %> + srcDir: <%= srcDir %>, + <% } %> title: <%= title %>, description: <%= description %><% if (defaultTheme) { %>, themeConfig: { From 4f3f5eac152560a1efa6053c318fc32cdc8d0d83 Mon Sep 17 00:00:00 2001 From: Divyansh Singh <40380293+brc-dd@users.noreply.github.com> Date: Mon, 17 Feb 2025 00:07:57 +0530 Subject: [PATCH 18/53] chore: resolve srcDir relative to cwd when initializing --- docs/snippets/init.ansi | 46 +++++++++----- src/node/init/init.ts | 130 +++++++++++++++++++++------------------- 2 files changed, 98 insertions(+), 78 deletions(-) diff --git a/docs/snippets/init.ansi b/docs/snippets/init.ansi index 287149f9..5421a3e6 100644 --- a/docs/snippets/init.ansi +++ b/docs/snippets/init.ansi @@ -1,16 +1,30 @@ -┌ Welcome to VitePress! -│ -◇ Where should VitePress initialize the config? -│ ./docs -│ -◇ Site title: -│ My Awesome Project -│ -◇ Site description: -│ A VitePress Site -│ -◆ Theme: -│ ● Default Theme (Out of the box, good-looking docs) -│ ○ Default Theme + Customization -│ ○ Custom Theme -└ \ No newline at end of file +┌ Welcome to VitePress! +│ +◇ Where should VitePress initialize the config? +│ ./docs +│ +◇ Where should VitePress look for your markdown files? +│ ./docs +│ +◇ Site title: +│ My Awesome Project +│ +◇ Site description: +│ A VitePress Site +│ +◇ Theme: +│ Default Theme +│ +◇ Use TypeScript for config and theme files? +│ Yes +│ +◇ Add VitePress npm scripts to package.json? +│ Yes +│ +◇ Add a prefix for VitePress npm scripts? +│ Yes +│ +◇ Prefix for VitePress npm scripts: +│ docs +│ +└ Done! Now run pnpm run docs:dev and start writing. \ No newline at end of file diff --git a/src/node/init/init.ts b/src/node/init/init.ts index 229dd010..6ccfdf09 100644 --- a/src/node/init/init.ts +++ b/src/node/init/init.ts @@ -12,6 +12,7 @@ import template from 'lodash.template' import path from 'node:path' import { fileURLToPath } from 'node:url' import { bold, cyan, yellow } from 'picocolors' +import { slash } from '../shared' export enum ScaffoldThemeType { Default = 'default theme', @@ -20,13 +21,13 @@ export enum ScaffoldThemeType { } export interface ScaffoldOptions { - root: string - srcDir: string + root?: string + srcDir?: string title?: string description?: string - theme: ScaffoldThemeType - useTs: boolean - injectNpmScripts: boolean + theme?: ScaffoldThemeType + useTs?: boolean + injectNpmScripts?: boolean addNpmScriptsPrefix?: boolean npmScriptsPrefix?: string } @@ -36,10 +37,10 @@ const getPackageManger = () => { return name.split('/')[0] } -export async function init(root: string | undefined) { +export async function init(root?: string) { intro(bold(cyan('Welcome to VitePress!'))) - const options: ScaffoldOptions = (await group( + const options = await group( { root: async () => { if (root) return root @@ -47,6 +48,7 @@ export async function init(root: string | undefined) { return text({ message: 'Where should VitePress initialize the config?', initialValue: './', + defaultValue: './', validate(value) { // TODO make sure directory is inside return undefined @@ -54,73 +56,80 @@ export async function init(root: string | undefined) { }) }, - srcDir: async () => { + srcDir: async ({ results }: any) => { return text({ message: 'Where should VitePress look for your markdown files?', - initialValue: './' + initialValue: results.root, + defaultValue: results.root }) }, - title: () => - text({ + title: async () => { + return text({ message: 'Site title:', - placeholder: 'My Awesome Project' - }), + placeholder: 'My Awesome Project', + defaultValue: 'My Awesome Project' + }) + }, - description: () => - text({ + description: async () => { + return text({ message: 'Site description:', - placeholder: 'A VitePress Site' - }), + placeholder: 'A VitePress Site', + defaultValue: 'A VitePress Site' + }) + }, - theme: () => - select({ + theme: async () => { + return select({ message: 'Theme:', options: [ { - // @ts-ignore value: ScaffoldThemeType.Default, label: 'Default Theme', hint: 'Out of the box, good-looking docs' }, { - // @ts-ignore value: ScaffoldThemeType.DefaultCustom, label: 'Default Theme + Customization', hint: 'Add custom CSS and layout slots' }, { - // @ts-ignore value: ScaffoldThemeType.Custom, label: 'Custom Theme', hint: 'Build your own or use external' } ] - }), + }) + }, - useTs: () => - confirm({ message: 'Use TypeScript for config and theme files?' }), + useTs: async () => { + return confirm({ + message: 'Use TypeScript for config and theme files?' + }) + }, - injectNpmScripts: () => - confirm({ + injectNpmScripts: async () => { + return confirm({ message: 'Add VitePress npm scripts to package.json?' - }), + }) + }, - addNpmScriptsPrefix: ({ results }) => { - if (!results.injectNpmScripts) return Promise.resolve(false) + addNpmScriptsPrefix: async ({ results }: any) => { + if (!results.injectNpmScripts) return false return confirm({ - message: 'Add a prefix for VitePress npm scripts?', - initialValue: true + message: 'Add a prefix for VitePress npm scripts?' }) }, - npmScriptsPrefix: ({ results }) => { - if (!results.addNpmScriptsPrefix) return Promise.resolve('docs') + npmScriptsPrefix: async ({ results }: any) => { + if (!results.addNpmScriptsPrefix) return 'docs' return text({ message: 'Prefix for VitePress npm scripts:', - placeholder: 'docs' + placeholder: 'docs', + defaultValue: 'docs' }) } }, @@ -130,31 +139,35 @@ export async function init(root: string | undefined) { process.exit(0) } } - )) as ScaffoldOptions + ) outro(scaffold(options)) } export function scaffold({ - root = './', - srcDir = './', + root: root_ = './', + srcDir: srcDir_ = root_, title = 'My Awesome Project', description = 'A VitePress Site', - theme, - useTs, - injectNpmScripts, + theme = ScaffoldThemeType.Default, + useTs = true, + injectNpmScripts = true, addNpmScriptsPrefix = true, npmScriptsPrefix = 'docs' -}: ScaffoldOptions): string { - const resolvedRoot = path.resolve(root) - const resolvedSrcDir = path.resolve(root, srcDir) +}: ScaffoldOptions) { + const resolvedRoot = path.resolve(root_) + const root = path.relative(process.cwd(), resolvedRoot) + + const resolvedSrcDir = path.resolve(srcDir_) + const srcDir = path.relative(resolvedRoot, resolvedSrcDir) + const templateDir = path.resolve( path.dirname(fileURLToPath(import.meta.url)), '../../template' ) const data = { - srcDir: srcDir === './' ? undefined : JSON.stringify(srcDir), // omit if default + srcDir: srcDir ? JSON.stringify(srcDir) : undefined, // omit if default title: JSON.stringify(title), description: JSON.stringify(description), useTs, @@ -214,34 +227,31 @@ export function scaffold({ renderFile(file) } - const dir = - root === './' ? '' : ` ${root.replace(/^\.\//, '').replace(/[/\\]$/, '')}` - const gitignorePrefix = dir ? `${dir}/.vitepress` : '.vitepress' - const tips = [] + + const gitignorePrefix = root ? `${slash(root)}/.vitepress` : '.vitepress' if (fs.existsSync('.git')) { tips.push( - `Make sure to add ${cyan(`${gitignorePrefix}/dist`)} and ` + - `${cyan(`${gitignorePrefix}/cache`)} to your ` + - `${cyan(`.gitignore`)} file.` + `Make sure to add ${cyan(`${gitignorePrefix}/dist`)} and ${cyan(`${gitignorePrefix}/cache`)} to your ${cyan(`.gitignore`)} file.` ) } + if ( theme !== ScaffoldThemeType.Default && !userPkg.dependencies?.['vue'] && !userPkg.devDependencies?.['vue'] ) { tips.push( - `Since you've chosen to customize the theme, ` + - `you should also explicitly install ${cyan(`vue`)} as a dev dependency.` + `Since you've chosen to customize the theme, you should also explicitly install ${cyan(`vue`)} as a dev dependency.` ) } const tip = tips.length ? yellow([`\n\nTips:`, ...tips].join('\n- ')) : `` + const dir = root ? ' ' + root : '' + const pm = getPackageManger() if (injectNpmScripts) { const scripts: Record = {} - const prefix = addNpmScriptsPrefix ? `${npmScriptsPrefix}:` : '' scripts[`${prefix}dev`] = `vitepress dev${dir}` @@ -250,13 +260,9 @@ export function scaffold({ Object.assign(userPkg.scripts || (userPkg.scripts = {}), scripts) fs.writeFileSync(pkgPath, JSON.stringify(userPkg, null, 2)) - return `Done! Now run ${cyan( - `${getPackageManger()} run ${prefix}dev` - )} and start writing.${tip}` + + return `Done! Now run ${cyan(`${pm} run ${prefix}dev`)} and start writing.${tip}` } else { - const pm = getPackageManger() - return `You're all set! Now run ${cyan( - `${pm === 'npm' ? 'npx' : pm} vitepress dev${dir}` - )} and start writing.${tip}` + return `You're all set! Now run ${cyan(`${pm === 'npm' ? 'npx' : pm} vitepress dev${dir}`)} and start writing.${tip}` } } From 52c2aa178d4b3fa98b863cf28f0ccf6d2aabcd93 Mon Sep 17 00:00:00 2001 From: Anthony Fu Date: Wed, 19 Feb 2025 00:19:19 +0800 Subject: [PATCH 19/53] feat: update to shiki v3 (#4571) --- package.json | 8 +- pnpm-lock.yaml | 418 ++++++++++++------------- src/node/markdown/plugins/highlight.ts | 14 +- 3 files changed, 199 insertions(+), 241 deletions(-) diff --git a/package.json b/package.json index b7f644c7..4790cf2a 100644 --- a/package.json +++ b/package.json @@ -98,9 +98,9 @@ "@docsearch/css": "^3.8.3", "@docsearch/js": "^3.8.3", "@iconify-json/simple-icons": "^1.2.24", - "@shikijs/core": "^2.4.1", - "@shikijs/transformers": "^2.4.1", - "@shikijs/types": "^2.4.1", + "@shikijs/core": "^3.0.0", + "@shikijs/transformers": "^3.0.0", + "@shikijs/types": "^3.0.0", "@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.4.1", + "shiki": "^3.0.0", "vite": "^6.1.0", "vue": "^3.5.13" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 99f5817b..63fbd822 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -24,19 +24,19 @@ importers: version: 3.8.3 '@docsearch/js': specifier: ^3.8.3 - version: 3.8.3(@algolia/client-search@5.20.2) + version: 3.8.3(@algolia/client-search@5.19.0) '@iconify-json/simple-icons': specifier: ^1.2.24 version: 1.2.24 '@shikijs/core': - specifier: ^2.4.1 - version: 2.4.1 + specifier: ^3.0.0 + version: 3.0.0 '@shikijs/transformers': - specifier: ^2.4.1 - version: 2.4.1 + specifier: ^3.0.0 + version: 3.0.0 '@shikijs/types': - specifier: ^2.4.1 - version: 2.4.1 + specifier: ^3.0.0 + version: 3.0.0 '@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.4.1 - version: 2.4.1 + specifier: ^3.0.0 + version: 3.0.0 vite: specifier: ^6.1.0 version: 6.1.0(@types/node@22.13.4)(jiti@1.21.7)(yaml@2.7.0) @@ -352,56 +352,56 @@ packages: '@algolia/client-search': '>= 4.9.1 < 6' algoliasearch: '>= 4.9.1 < 6' - '@algolia/client-abtesting@5.20.2': - resolution: {integrity: sha512-IS8JSFsDD33haaKIIFaL7qj3bEIG9GldZfb3ILW0QF3at7TcrIJYy58hrDvFee5T3p3E2aH/+wqIr0eha8jB/w==} + '@algolia/client-abtesting@5.19.0': + resolution: {integrity: sha512-dMHwy2+nBL0SnIsC1iHvkBao64h4z+roGelOz11cxrDBrAdASxLxmfVMop8gmodQ2yZSacX0Rzevtxa+9SqxCw==} engines: {node: '>= 14.0.0'} - '@algolia/client-analytics@5.20.2': - resolution: {integrity: sha512-k0KxCfcX/HZySqPasKy6GkiiDuebaMh2v/nE0HHg1PbsyeyagLapDi6Ktjkxhz8NlUq6eTJR+ddGJegippKQtQ==} + '@algolia/client-analytics@5.19.0': + resolution: {integrity: sha512-CDW4RwnCHzU10upPJqS6N6YwDpDHno7w6/qXT9KPbPbt8szIIzCHrva4O9KIfx1OhdsHzfGSI5hMAiOOYl4DEQ==} engines: {node: '>= 14.0.0'} - '@algolia/client-common@5.20.2': - resolution: {integrity: sha512-xoZcL/Uu49KYDb3feu2n06gALD17p5CslO8Zk3mZ7+uTurK3lgjLws7LNetZ172Ap/GpzPCRXI83d2iDoYQD6Q==} + '@algolia/client-common@5.19.0': + resolution: {integrity: sha512-2ERRbICHXvtj5kfFpY5r8qu9pJII/NAHsdgUXnUitQFwPdPL7wXiupcvZJC7DSntOnE8AE0lM7oDsPhrJfj5nQ==} engines: {node: '>= 14.0.0'} - '@algolia/client-insights@5.20.2': - resolution: {integrity: sha512-fy7aCbo9y7WHt/9G03EYc471Dd5kIaM8PNP4z6AEQYr9a9X8c4inwNs6tePxAEfRHwVQi0CZ7kuVdn6/MjWx1A==} + '@algolia/client-insights@5.19.0': + resolution: {integrity: sha512-xPOiGjo6I9mfjdJO7Y+p035aWePcbsItizIp+qVyfkfZiGgD+TbNxM12g7QhFAHIkx/mlYaocxPY/TmwPzTe+A==} engines: {node: '>= 14.0.0'} - '@algolia/client-personalization@5.20.2': - resolution: {integrity: sha512-ocL1ZXulfuXzJAwsKw2kMscKMD0rs/f4CFYu6Gjh4mK4um6rGfa1a6u1MSc4swFqRQer0wNP9Pi+kVfKhuKt5A==} + '@algolia/client-personalization@5.19.0': + resolution: {integrity: sha512-B9eoce/fk8NLboGje+pMr72pw+PV7c5Z01On477heTZ7jkxoZ4X92dobeGuEQop61cJ93Gaevd1of4mBr4hu2A==} engines: {node: '>= 14.0.0'} - '@algolia/client-query-suggestions@5.20.2': - resolution: {integrity: sha512-Xjs4Tj1zkLCnmq1ys8RRhLQPy002I6GuT/nbHVdSQmQu4yKCI0gOFbwxHdM6yYPEuE3cJx7A4wSQjCH21mUKsg==} + '@algolia/client-query-suggestions@5.19.0': + resolution: {integrity: sha512-6fcP8d4S8XRDtVogrDvmSM6g5g6DndLc0pEm1GCKe9/ZkAzCmM3ZmW1wFYYPxdjMeifWy1vVEDMJK7sbE4W7MA==} engines: {node: '>= 14.0.0'} - '@algolia/client-search@5.20.2': - resolution: {integrity: sha512-2cD3RGB5byusLS0DAX1Nvl5MLiv7OoGgQrRs+94dTalqjvK8lGKzxxJhXoVojgx2qcROyIUAIDXFdTqv6NIHaA==} + '@algolia/client-search@5.19.0': + resolution: {integrity: sha512-Ctg3xXD/1VtcwmkulR5+cKGOMj4r0wC49Y/KZdGQcqpydKn+e86F6l3tb3utLJQVq4lpEJud6kdRykFgcNsp8Q==} engines: {node: '>= 14.0.0'} - '@algolia/ingestion@1.20.2': - resolution: {integrity: sha512-S593Kmhc98+5zdzGet4GrZEBEBGl4vVtqg/MPfW8dCRf9qDRNYSkhBsIzlhQe9JWiohe9oB9LW5meibwOgRmww==} + '@algolia/ingestion@1.19.0': + resolution: {integrity: sha512-LO7w1MDV+ZLESwfPmXkp+KLeYeFrYEgtbCZG6buWjddhYraPQ9MuQWLhLLiaMlKxZ/sZvFTcZYuyI6Jx4WBhcg==} engines: {node: '>= 14.0.0'} - '@algolia/monitoring@1.20.2': - resolution: {integrity: sha512-bW41aWLYgBv/coJUIT85mkN3kk1VBKsM8tlwB5S/s446Mgc7r8t5TX7kA8kCR2UbwDedOK51i/85/x/rM0ZXbg==} + '@algolia/monitoring@1.19.0': + resolution: {integrity: sha512-Mg4uoS0aIKeTpu6iv6O0Hj81s8UHagi5TLm9k2mLIib4vmMtX7WgIAHAcFIaqIZp5D6s5EVy1BaDOoZ7buuJHA==} engines: {node: '>= 14.0.0'} - '@algolia/recommend@5.20.2': - resolution: {integrity: sha512-wBMf3J1L5ogvU8p8ifHkknDXWn1zdZ2epkqpt2MkUaZynE3G77rrFU9frcO+Pu1FQJQ5xCDTKcYUUcJCDD00rg==} + '@algolia/recommend@5.19.0': + resolution: {integrity: sha512-PbgrMTbUPlmwfJsxjFhal4XqZO2kpBNRjemLVTkUiti4w/+kzcYO4Hg5zaBgVqPwvFDNQ8JS4SS3TBBem88u+g==} engines: {node: '>= 14.0.0'} - '@algolia/requester-browser-xhr@5.20.2': - resolution: {integrity: sha512-w+VMzOkIq2XDGg6Ybzr74RlBZvJQnuIdKpVusQSXCXknvxwAwbO457LmoavhZWl06Lcsk9YDx1X2k0zb+iJQmw==} + '@algolia/requester-browser-xhr@5.19.0': + resolution: {integrity: sha512-GfnhnQBT23mW/VMNs7m1qyEyZzhZz093aY2x8p0era96MMyNv8+FxGek5pjVX0b57tmSCZPf4EqNCpkGcGsmbw==} engines: {node: '>= 14.0.0'} - '@algolia/requester-fetch@5.20.2': - resolution: {integrity: sha512-wpjnbvbi3A13b0DvijE45DRYDvwcP5Ttz7RTMkPWTkF1s6AHuo6O2UcwGyaogMAGa1QOOzFYfp5u4YQwMOQx5g==} + '@algolia/requester-fetch@5.19.0': + resolution: {integrity: sha512-oyTt8ZJ4T4fYvW5avAnuEc6Laedcme9fAFryMD9ndUTIUe/P0kn3BuGcCLFjN3FDmdrETHSFkgPPf1hGy3sLCw==} engines: {node: '>= 14.0.0'} - '@algolia/requester-node-http@5.20.2': - resolution: {integrity: sha512-YuSSdtgUt1dFBTNYUb+2TA5j0Hd0eDXE0bVISjUvTCqmoaGsGLwW+rKI7p1eLQ1r7RESwBAvUwcY1qP2Wl3Lyw==} + '@algolia/requester-node-http@5.19.0': + resolution: {integrity: sha512-p6t8ue0XZNjcRiqNkb5QAM0qQRAKsCiebZ6n9JjWA+p8fWf8BvnhO55y2fO28g3GW0Imj7PrAuyBuxq8aDVQwQ==} engines: {node: '>= 14.0.0'} '@antfu/install-pkg@1.0.0': @@ -1013,26 +1013,26 @@ packages: '@sec-ant/readable-stream@0.4.1': resolution: {integrity: sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==} - '@shikijs/core@2.4.1': - resolution: {integrity: sha512-c7AkRsCpSVjKHsTwuvRVMEAdADq4Z1KoodcS4LaIqMzBTM0+Q572VRk1PIxtzaMtdiHlRPO6mH5iPdJoTV59mQ==} + '@shikijs/core@3.0.0': + resolution: {integrity: sha512-gSm3JQf2J2psiUn5bWokmZwnu5N0jfBtRps4CQ1B+qrFvmZCRAkMVoaxgl9qZgAFK5KisLAS3//XaMFVytYHKw==} - '@shikijs/engine-javascript@2.4.1': - resolution: {integrity: sha512-2DnVilsUCgA81lnxt67dEZf2C6hdRzDYIs7yG33yWQIjljAxlXi3MKt7n0BXKr6uT5sZ0JdtX/+Pq2FN31YVdQ==} + '@shikijs/engine-javascript@3.0.0': + resolution: {integrity: sha512-zoB10hTfvk1iZk1ldt6VaF+0iucQL+4TtSvTdTu5MhOeLPLEf5nZ8Wz6uxlp99y627OLalYa2z4W0iTTwb6oyA==} - '@shikijs/engine-oniguruma@2.4.1': - resolution: {integrity: sha512-PvN76WM2HjmSbNQmLl8Jzm3h8Hsf/g9kKs3jPWKD6uMpCfk+M3HalWONz85zQF4lqrI3lamMTV5pHcOVSswpqg==} + '@shikijs/engine-oniguruma@3.0.0': + resolution: {integrity: sha512-uM9lqwMrlPHPVcdpAN/4pAzTJah1pY7mi9f1MxG887SDkjF/tdiQK+5200Y8N5Hg125sewdMQ1K2agoAo8hDiA==} - '@shikijs/langs@2.4.1': - resolution: {integrity: sha512-MLpCfw8gqWAgYvkV4Qsh/yjJirGhqwBQqtNgNrYOES7IoMTsthQ2x/8+JEO1hIDyS3qJPSooxCGQpX7EXsiFpQ==} + '@shikijs/langs@3.0.0': + resolution: {integrity: sha512-HBsZAukiYz7k3hzttPWa0en3PABEwK3cpxcAcERRwvwuKc5pn0Y+yPxAIYZtN9cFdtNqrbFJNhfcEu/xbG1u/A==} - '@shikijs/themes@2.4.1': - resolution: {integrity: sha512-U+Yt03Qfy9251BjQkPf9IkbiRypCqLcxfeCkk9cjqAuAhgM6G+v8GRHB+7VR1OQu92sWkhmk+zdbJAhgAnnL8g==} + '@shikijs/themes@3.0.0': + resolution: {integrity: sha512-mz63nyVB5nXWsv5H2hifDFIThZEJ/cJhMq1/+0JjMdOuuBq2H2D1Fn8UM5yzUtEvap/ipRltv381+hsHZFs4ug==} - '@shikijs/transformers@2.4.1': - resolution: {integrity: sha512-vTvV4+Fv9LJDWVgB/3o/q7EyYZFiJIEEOsS9KQ/8wyL6jKE+9m0fvuPmpx3SGjmj/MQcqnRBwKaXBW29M5XmLA==} + '@shikijs/transformers@3.0.0': + resolution: {integrity: sha512-N6iwlPt1IN4oQMdwSqWJhveBjfY2eLBjdmGglPngQ9ML1OPAgCPog0hI1lFPl52Rx7+s7GGuvWsSIu4zCUv2XA==} - '@shikijs/types@2.4.1': - resolution: {integrity: sha512-fE73tqCjiHIDUq7SYU8i4d9TyOcJh2u2J8aQGqQs0KkFg6FbBEQoDiBASMM5Vxqag1VS58y+MHLBuSQmwtB4Og==} + '@shikijs/types@3.0.0': + resolution: {integrity: sha512-kh/xgZHxI6m9trVvPw+C47jyVHx190r0F5gkF+VO5vYB54UtcoPJe66dzZmK7GbJbzmtGEGbOwct/jsoPjjUqg==} '@shikijs/vscode-textmate@10.0.2': resolution: {integrity: sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==} @@ -1080,8 +1080,8 @@ packages: '@types/lodash.template@4.5.3': resolution: {integrity: sha512-Mo0UYKLu1oXgkV9TVoXZLlXXjyIXlW7ZQRxi/4gQJmzJr63dmicE8gG0OkPjYTKBrBic852q0JzqrtNUWLBIyA==} - '@types/lodash@4.17.15': - resolution: {integrity: sha512-w/P33JFeySuhN6JLkysYUK2gEmy9kHHFN7E8ro0tkfmlDOgxBDzWEZ/J8cWA+fHqFevpswDTFZnDx+R9lbL6xw==} + '@types/lodash@4.17.14': + resolution: {integrity: sha512-jsxagdikDiDBeIRaPYtArcT8my4tN1og7MtMRquFT3XNA6axxyHDRUemqDz/taRDdOUn0GnGHRCuff4q48sW9A==} '@types/mark.js@8.11.12': resolution: {integrity: sha512-244ZnaIBpz4c6xutliAnYVZp6xJlmC569jZqnR3ElO1Y01ooYASSVQEqpd2x0A2UfrgVMs5V9/9tUAdZaDMytQ==} @@ -1293,10 +1293,6 @@ packages: '@vueuse/shared@12.7.0': resolution: {integrity: sha512-coLlUw2HHKsm7rPN6WqHJQr18WymN4wkA/3ThFaJ4v4gWGWAQQGK+MJxLuJTBs4mojQiazlVWAKNJNpUWGRkNw==} - abort-controller@3.0.0: - resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} - engines: {node: '>=6.5'} - acorn@8.14.0: resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==} engines: {node: '>=0.4.0'} @@ -1305,8 +1301,8 @@ packages: add-stream@1.0.0: resolution: {integrity: sha512-qQLMr+8o0WC4FZGQTcJiKBVC59JylcPSrTtk6usvmIDFUOCKegapy1VHQwRbFMOFyb/inzUVqHs+eMYKDM1YeQ==} - algoliasearch@5.20.2: - resolution: {integrity: sha512-8evxG++iWyWnhng3g5RP+kwn6j+2vKLfew8pVoekn87FcfsDm92zJXKwSrU6pl+m5eAbGFhFF/gCYEQiRdbPlA==} + algoliasearch@5.19.0: + resolution: {integrity: sha512-zrLtGhC63z3sVLDDKGW+SlCRN9eJHFTgdEmoAOpsVh6wgGL1GgTTDou7tpCBjevzgIvi3AIyDAQO3Xjbg5eqZg==} engines: {node: '>= 14.0.0'} alien-signals@0.4.14: @@ -1361,9 +1357,6 @@ packages: balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - base64-js@1.5.1: - resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} - birpc@0.2.19: resolution: {integrity: sha512-5WeXXAvTmitV1RqJFppT5QtUiz2p1mRSYU000Jkft5ZUCLJIk4uQriYNO50HknxKwM6jd8utNc66K1qGIwwWBQ==} @@ -1377,9 +1370,6 @@ packages: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} engines: {node: '>=8'} - buffer@6.0.3: - resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} - bundle-name@4.1.0: resolution: {integrity: sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==} engines: {node: '>=18'} @@ -1709,17 +1699,9 @@ packages: estree-walker@3.0.3: resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} - event-target-shim@5.0.1: - resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==} - engines: {node: '>=6'} - eventemitter3@5.0.1: resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} - events@3.3.0: - resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} - engines: {node: '>=0.8.x'} - execa@8.0.1: resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} engines: {node: '>=16.17'} @@ -1922,6 +1904,9 @@ packages: resolution: {integrity: sha512-MWDKS3AS1bGCHLBA2VLImJz42f7bJh8wQsTGCzI3j519/CASStoDONUBVz2I/VID0MpiX3SGSnbOD2xUalbE5g==} engines: {node: '>=18'} + inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + is-core-module@2.16.1: resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} engines: {node: '>= 0.4'} @@ -2071,7 +2056,6 @@ packages: lodash.template@4.5.0: resolution: {integrity: sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A==} - deprecated: This package is deprecated. Use https://socket.dev/npm/package/eta instead. lodash.templatesettings@4.2.0: resolution: {integrity: sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ==} @@ -2355,8 +2339,8 @@ packages: resolution: {integrity: sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==} engines: {node: '>= 14.16'} - peek-readable@5.4.2: - resolution: {integrity: sha512-peBp3qZyuS6cNIJ2akRNG1uo1WJ1d0wTxg/fxMdZ0BqCVhx242bSFHM9eNqflfJVS9SsgkzgT/1UgnsurBOTMg==} + peek-readable@5.3.1: + resolution: {integrity: sha512-GVlENSDW6KHaXcd9zkZltB7tCLosKB/4Hg0fqBJkAoBgYG2Tn1xtMgXtSUuMU9AK/gCm/tTdT8mgAeF4YNeeqw==} engines: {node: '>=14.16'} perfect-debounce@1.0.0: @@ -2426,10 +2410,6 @@ packages: resolution: {integrity: sha512-4yf0QO/sllf/1zbZWYnvWw3NxCQwLXKzIj0G849LSufP15BXKM0rbD2Z3wVnkMfjdn/CB0Dpp444gYAACdsplg==} engines: {node: '>=18'} - process@0.11.10: - resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} - engines: {node: '>= 0.6.0'} - prompts@2.4.2: resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} engines: {node: '>= 6'} @@ -2459,12 +2439,12 @@ packages: resolution: {integrity: sha512-9viLL4/n1BJUCT1NXVTdS1jtm80yDEgR5T4yCelII49Mbj0v1rZdKqj7zCiYdbB0CuCgdrvHcNogAKTFPBocFA==} engines: {node: '>=18'} - readable-stream@4.7.0: - resolution: {integrity: sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + readable-stream@3.6.2: + resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} + engines: {node: '>= 6'} - readable-web-to-node-stream@3.0.4: - resolution: {integrity: sha512-9nX56alTf5bwXQ3ZDipHJhusu9NTQJ/CVPtb/XHAJCXihZeitfJvIRS4GqQ/mfIoOE3IelHMrpayVrosdHBuLw==} + readable-web-to-node-stream@3.0.2: + resolution: {integrity: sha512-ePeK6cc1EcKLEhJFt/AebMCLL+GgSKhuygrZ/GLaKZYEecIgIECf4UaUuaByiGtzckwR4ain9VzUh95T1exYGw==} engines: {node: '>=8'} readdirp@4.1.2: @@ -2565,8 +2545,8 @@ packages: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} - shiki@2.4.1: - resolution: {integrity: sha512-1MmgQgSSx04OSUPqTg7deJudOL4vXpkNEJHlzKEoVNOLFUmXPB/vRvJoLxzy/Un+UIp4zryXJcWDUAUTOSbDyw==} + shiki@3.0.0: + resolution: {integrity: sha512-x6MMdYN9auPGx7kMFtyKbaj65eCdetfrfkvQZwqisZLnGMnAZsZxOpcWD0ElvLPFWHOSMukVyN9Opm7TxQjnZA==} siginfo@2.0.0: resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} @@ -2838,6 +2818,9 @@ packages: resolution: {integrity: sha512-8U/MtpkPkkk3Atewj1+RcKIjb5WBimZ/WSLhhR3w6SsIj8XJuKTacSP8g+2JhfSGw0Cb125Y+2zA/IzJZDVbhA==} engines: {node: '>=18.12.0'} + util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + valid-data-url@3.0.1: resolution: {integrity: sha512-jOWVmzVceKlVVdwjNSenT4PbGghU0SBIizAev8ofZVgivk/TVHXSbNL8LP6M3spZvkR9/QolkyJavGSX5Cs0UA==} engines: {node: '>=10'} @@ -3000,117 +2983,117 @@ packages: resolution: {integrity: sha512-GQHQqAopRhwU8Kt1DDM8NjibDXHC8eoh1erhGAJPEyveY9qqVeXvVikNKrDz69sHowPMorbPUrH/mx8c50eiBQ==} engines: {node: '>=18'} - zod@3.24.2: - resolution: {integrity: sha512-lY7CDW43ECgW9u1TcT3IoXHflywfVqDYze4waEz812jR/bZ8FHDsl7pFQoSZTz5N+2NqRXs8GBwnAwo3ZNxqhQ==} + zod@3.24.1: + resolution: {integrity: sha512-muH7gBL9sI1nciMZV67X5fTKKBLtwpZ5VBp1vsOQzj1MhrBZ4wlVCm3gedKZWLp0Oyel8sIGfeiz54Su+OVT+A==} zwitch@2.0.4: resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} snapshots: - '@algolia/autocomplete-core@1.17.9(@algolia/client-search@5.20.2)(algoliasearch@5.20.2)': + '@algolia/autocomplete-core@1.17.9(@algolia/client-search@5.19.0)(algoliasearch@5.19.0)': dependencies: - '@algolia/autocomplete-plugin-algolia-insights': 1.17.9(@algolia/client-search@5.20.2)(algoliasearch@5.20.2) - '@algolia/autocomplete-shared': 1.17.9(@algolia/client-search@5.20.2)(algoliasearch@5.20.2) + '@algolia/autocomplete-plugin-algolia-insights': 1.17.9(@algolia/client-search@5.19.0)(algoliasearch@5.19.0) + '@algolia/autocomplete-shared': 1.17.9(@algolia/client-search@5.19.0)(algoliasearch@5.19.0) transitivePeerDependencies: - '@algolia/client-search' - algoliasearch - search-insights - '@algolia/autocomplete-plugin-algolia-insights@1.17.9(@algolia/client-search@5.20.2)(algoliasearch@5.20.2)': + '@algolia/autocomplete-plugin-algolia-insights@1.17.9(@algolia/client-search@5.19.0)(algoliasearch@5.19.0)': dependencies: - '@algolia/autocomplete-shared': 1.17.9(@algolia/client-search@5.20.2)(algoliasearch@5.20.2) + '@algolia/autocomplete-shared': 1.17.9(@algolia/client-search@5.19.0)(algoliasearch@5.19.0) transitivePeerDependencies: - '@algolia/client-search' - algoliasearch - '@algolia/autocomplete-preset-algolia@1.17.9(@algolia/client-search@5.20.2)(algoliasearch@5.20.2)': + '@algolia/autocomplete-preset-algolia@1.17.9(@algolia/client-search@5.19.0)(algoliasearch@5.19.0)': dependencies: - '@algolia/autocomplete-shared': 1.17.9(@algolia/client-search@5.20.2)(algoliasearch@5.20.2) - '@algolia/client-search': 5.20.2 - algoliasearch: 5.20.2 + '@algolia/autocomplete-shared': 1.17.9(@algolia/client-search@5.19.0)(algoliasearch@5.19.0) + '@algolia/client-search': 5.19.0 + algoliasearch: 5.19.0 - '@algolia/autocomplete-shared@1.17.9(@algolia/client-search@5.20.2)(algoliasearch@5.20.2)': + '@algolia/autocomplete-shared@1.17.9(@algolia/client-search@5.19.0)(algoliasearch@5.19.0)': dependencies: - '@algolia/client-search': 5.20.2 - algoliasearch: 5.20.2 + '@algolia/client-search': 5.19.0 + algoliasearch: 5.19.0 - '@algolia/client-abtesting@5.20.2': + '@algolia/client-abtesting@5.19.0': dependencies: - '@algolia/client-common': 5.20.2 - '@algolia/requester-browser-xhr': 5.20.2 - '@algolia/requester-fetch': 5.20.2 - '@algolia/requester-node-http': 5.20.2 + '@algolia/client-common': 5.19.0 + '@algolia/requester-browser-xhr': 5.19.0 + '@algolia/requester-fetch': 5.19.0 + '@algolia/requester-node-http': 5.19.0 - '@algolia/client-analytics@5.20.2': + '@algolia/client-analytics@5.19.0': dependencies: - '@algolia/client-common': 5.20.2 - '@algolia/requester-browser-xhr': 5.20.2 - '@algolia/requester-fetch': 5.20.2 - '@algolia/requester-node-http': 5.20.2 + '@algolia/client-common': 5.19.0 + '@algolia/requester-browser-xhr': 5.19.0 + '@algolia/requester-fetch': 5.19.0 + '@algolia/requester-node-http': 5.19.0 - '@algolia/client-common@5.20.2': {} + '@algolia/client-common@5.19.0': {} - '@algolia/client-insights@5.20.2': + '@algolia/client-insights@5.19.0': dependencies: - '@algolia/client-common': 5.20.2 - '@algolia/requester-browser-xhr': 5.20.2 - '@algolia/requester-fetch': 5.20.2 - '@algolia/requester-node-http': 5.20.2 + '@algolia/client-common': 5.19.0 + '@algolia/requester-browser-xhr': 5.19.0 + '@algolia/requester-fetch': 5.19.0 + '@algolia/requester-node-http': 5.19.0 - '@algolia/client-personalization@5.20.2': + '@algolia/client-personalization@5.19.0': dependencies: - '@algolia/client-common': 5.20.2 - '@algolia/requester-browser-xhr': 5.20.2 - '@algolia/requester-fetch': 5.20.2 - '@algolia/requester-node-http': 5.20.2 + '@algolia/client-common': 5.19.0 + '@algolia/requester-browser-xhr': 5.19.0 + '@algolia/requester-fetch': 5.19.0 + '@algolia/requester-node-http': 5.19.0 - '@algolia/client-query-suggestions@5.20.2': + '@algolia/client-query-suggestions@5.19.0': dependencies: - '@algolia/client-common': 5.20.2 - '@algolia/requester-browser-xhr': 5.20.2 - '@algolia/requester-fetch': 5.20.2 - '@algolia/requester-node-http': 5.20.2 + '@algolia/client-common': 5.19.0 + '@algolia/requester-browser-xhr': 5.19.0 + '@algolia/requester-fetch': 5.19.0 + '@algolia/requester-node-http': 5.19.0 - '@algolia/client-search@5.20.2': + '@algolia/client-search@5.19.0': dependencies: - '@algolia/client-common': 5.20.2 - '@algolia/requester-browser-xhr': 5.20.2 - '@algolia/requester-fetch': 5.20.2 - '@algolia/requester-node-http': 5.20.2 + '@algolia/client-common': 5.19.0 + '@algolia/requester-browser-xhr': 5.19.0 + '@algolia/requester-fetch': 5.19.0 + '@algolia/requester-node-http': 5.19.0 - '@algolia/ingestion@1.20.2': + '@algolia/ingestion@1.19.0': dependencies: - '@algolia/client-common': 5.20.2 - '@algolia/requester-browser-xhr': 5.20.2 - '@algolia/requester-fetch': 5.20.2 - '@algolia/requester-node-http': 5.20.2 + '@algolia/client-common': 5.19.0 + '@algolia/requester-browser-xhr': 5.19.0 + '@algolia/requester-fetch': 5.19.0 + '@algolia/requester-node-http': 5.19.0 - '@algolia/monitoring@1.20.2': + '@algolia/monitoring@1.19.0': dependencies: - '@algolia/client-common': 5.20.2 - '@algolia/requester-browser-xhr': 5.20.2 - '@algolia/requester-fetch': 5.20.2 - '@algolia/requester-node-http': 5.20.2 + '@algolia/client-common': 5.19.0 + '@algolia/requester-browser-xhr': 5.19.0 + '@algolia/requester-fetch': 5.19.0 + '@algolia/requester-node-http': 5.19.0 - '@algolia/recommend@5.20.2': + '@algolia/recommend@5.19.0': dependencies: - '@algolia/client-common': 5.20.2 - '@algolia/requester-browser-xhr': 5.20.2 - '@algolia/requester-fetch': 5.20.2 - '@algolia/requester-node-http': 5.20.2 + '@algolia/client-common': 5.19.0 + '@algolia/requester-browser-xhr': 5.19.0 + '@algolia/requester-fetch': 5.19.0 + '@algolia/requester-node-http': 5.19.0 - '@algolia/requester-browser-xhr@5.20.2': + '@algolia/requester-browser-xhr@5.19.0': dependencies: - '@algolia/client-common': 5.20.2 + '@algolia/client-common': 5.19.0 - '@algolia/requester-fetch@5.20.2': + '@algolia/requester-fetch@5.19.0': dependencies: - '@algolia/client-common': 5.20.2 + '@algolia/client-common': 5.19.0 - '@algolia/requester-node-http@5.20.2': + '@algolia/requester-node-http@5.19.0': dependencies: - '@algolia/client-common': 5.20.2 + '@algolia/client-common': 5.19.0 '@antfu/install-pkg@1.0.0': dependencies: @@ -3164,9 +3147,9 @@ snapshots: '@docsearch/css@3.8.3': {} - '@docsearch/js@3.8.3(@algolia/client-search@5.20.2)': + '@docsearch/js@3.8.3(@algolia/client-search@5.19.0)': dependencies: - '@docsearch/react': 3.8.3(@algolia/client-search@5.20.2) + '@docsearch/react': 3.8.3(@algolia/client-search@5.19.0) preact: 10.25.4 transitivePeerDependencies: - '@algolia/client-search' @@ -3175,12 +3158,12 @@ snapshots: - react-dom - search-insights - '@docsearch/react@3.8.3(@algolia/client-search@5.20.2)': + '@docsearch/react@3.8.3(@algolia/client-search@5.19.0)': dependencies: - '@algolia/autocomplete-core': 1.17.9(@algolia/client-search@5.20.2)(algoliasearch@5.20.2) - '@algolia/autocomplete-preset-algolia': 1.17.9(@algolia/client-search@5.20.2)(algoliasearch@5.20.2) + '@algolia/autocomplete-core': 1.17.9(@algolia/client-search@5.19.0)(algoliasearch@5.19.0) + '@algolia/autocomplete-preset-algolia': 1.17.9(@algolia/client-search@5.19.0)(algoliasearch@5.19.0) '@docsearch/css': 3.8.3 - algoliasearch: 5.20.2 + algoliasearch: 5.19.0 transitivePeerDependencies: - '@algolia/client-search' @@ -3399,7 +3382,7 @@ snapshots: picocolors: 1.1.1 simple-git: 3.27.0 ultramatter: 0.0.4 - zod: 3.24.2 + zod: 3.24.1 transitivePeerDependencies: - supports-color @@ -3572,40 +3555,38 @@ snapshots: '@sec-ant/readable-stream@0.4.1': {} - '@shikijs/core@2.4.1': + '@shikijs/core@3.0.0': dependencies: - '@shikijs/engine-javascript': 2.4.1 - '@shikijs/engine-oniguruma': 2.4.1 - '@shikijs/types': 2.4.1 + '@shikijs/types': 3.0.0 '@shikijs/vscode-textmate': 10.0.2 '@types/hast': 3.0.4 hast-util-to-html: 9.0.4 - '@shikijs/engine-javascript@2.4.1': + '@shikijs/engine-javascript@3.0.0': dependencies: - '@shikijs/types': 2.4.1 + '@shikijs/types': 3.0.0 '@shikijs/vscode-textmate': 10.0.2 oniguruma-to-es: 3.1.0 - '@shikijs/engine-oniguruma@2.4.1': + '@shikijs/engine-oniguruma@3.0.0': dependencies: - '@shikijs/types': 2.4.1 + '@shikijs/types': 3.0.0 '@shikijs/vscode-textmate': 10.0.2 - '@shikijs/langs@2.4.1': + '@shikijs/langs@3.0.0': dependencies: - '@shikijs/types': 2.4.1 + '@shikijs/types': 3.0.0 - '@shikijs/themes@2.4.1': + '@shikijs/themes@3.0.0': dependencies: - '@shikijs/types': 2.4.1 + '@shikijs/types': 3.0.0 - '@shikijs/transformers@2.4.1': + '@shikijs/transformers@3.0.0': dependencies: - '@shikijs/core': 2.4.1 - '@shikijs/types': 2.4.1 + '@shikijs/core': 3.0.0 + '@shikijs/types': 3.0.0 - '@shikijs/types@2.4.1': + '@shikijs/types@3.0.0': dependencies: '@shikijs/vscode-textmate': 10.0.2 '@types/hast': 3.0.4 @@ -3655,9 +3636,9 @@ snapshots: '@types/lodash.template@4.5.3': dependencies: - '@types/lodash': 4.17.15 + '@types/lodash': 4.17.14 - '@types/lodash@4.17.15': {} + '@types/lodash@4.17.14': {} '@types/mark.js@8.11.12': dependencies: @@ -3900,29 +3881,25 @@ snapshots: transitivePeerDependencies: - typescript - abort-controller@3.0.0: - dependencies: - event-target-shim: 5.0.1 - acorn@8.14.0: {} add-stream@1.0.0: {} - algoliasearch@5.20.2: - dependencies: - '@algolia/client-abtesting': 5.20.2 - '@algolia/client-analytics': 5.20.2 - '@algolia/client-common': 5.20.2 - '@algolia/client-insights': 5.20.2 - '@algolia/client-personalization': 5.20.2 - '@algolia/client-query-suggestions': 5.20.2 - '@algolia/client-search': 5.20.2 - '@algolia/ingestion': 1.20.2 - '@algolia/monitoring': 1.20.2 - '@algolia/recommend': 5.20.2 - '@algolia/requester-browser-xhr': 5.20.2 - '@algolia/requester-fetch': 5.20.2 - '@algolia/requester-node-http': 5.20.2 + algoliasearch@5.19.0: + dependencies: + '@algolia/client-abtesting': 5.19.0 + '@algolia/client-analytics': 5.19.0 + '@algolia/client-common': 5.19.0 + '@algolia/client-insights': 5.19.0 + '@algolia/client-personalization': 5.19.0 + '@algolia/client-query-suggestions': 5.19.0 + '@algolia/client-search': 5.19.0 + '@algolia/ingestion': 1.19.0 + '@algolia/monitoring': 1.19.0 + '@algolia/recommend': 5.19.0 + '@algolia/requester-browser-xhr': 5.19.0 + '@algolia/requester-fetch': 5.19.0 + '@algolia/requester-node-http': 5.19.0 alien-signals@0.4.14: {} @@ -3966,8 +3943,6 @@ snapshots: balanced-match@1.0.2: {} - base64-js@1.5.1: {} - birpc@0.2.19: {} boolbase@1.0.0: {} @@ -3980,11 +3955,6 @@ snapshots: dependencies: fill-range: 7.1.1 - buffer@6.0.3: - dependencies: - base64-js: 1.5.1 - ieee754: 1.2.1 - bundle-name@4.1.0: dependencies: run-applescript: 7.0.0 @@ -4344,12 +4314,8 @@ snapshots: dependencies: '@types/estree': 1.0.6 - event-target-shim@5.0.1: {} - eventemitter3@5.0.1: {} - events@3.3.0: {} - execa@8.0.1: dependencies: cross-spawn: 7.0.6 @@ -4405,7 +4371,7 @@ snapshots: file-type@18.7.0: dependencies: - readable-web-to-node-stream: 3.0.4 + readable-web-to-node-stream: 3.0.2 strtok3: 7.1.1 token-types: 5.0.1 @@ -4592,6 +4558,8 @@ snapshots: index-to-position@0.1.2: {} + inherits@2.0.4: {} + is-core-module@2.16.1: dependencies: hasown: 2.0.2 @@ -5007,7 +4975,7 @@ snapshots: pathval@2.0.0: {} - peek-readable@5.4.2: {} + peek-readable@5.3.1: {} perfect-debounce@1.0.0: {} @@ -5063,8 +5031,6 @@ snapshots: dependencies: parse-ms: 4.0.0 - process@0.11.10: {} - prompts@2.4.2: dependencies: kleur: 3.0.3 @@ -5094,17 +5060,15 @@ snapshots: type-fest: 4.34.1 unicorn-magic: 0.1.0 - readable-stream@4.7.0: + readable-stream@3.6.2: dependencies: - abort-controller: 3.0.0 - buffer: 6.0.3 - events: 3.3.0 - process: 0.11.10 + inherits: 2.0.4 string_decoder: 1.3.0 + util-deprecate: 1.0.2 - readable-web-to-node-stream@3.0.4: + readable-web-to-node-stream@3.0.2: dependencies: - readable-stream: 4.7.0 + readable-stream: 3.6.2 readdirp@4.1.2: {} @@ -5220,14 +5184,14 @@ snapshots: shebang-regex@3.0.0: {} - shiki@2.4.1: + shiki@3.0.0: dependencies: - '@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/core': 3.0.0 + '@shikijs/engine-javascript': 3.0.0 + '@shikijs/engine-oniguruma': 3.0.0 + '@shikijs/langs': 3.0.0 + '@shikijs/themes': 3.0.0 + '@shikijs/types': 3.0.0 '@shikijs/vscode-textmate': 10.0.2 '@types/hast': 3.0.4 @@ -5356,7 +5320,7 @@ snapshots: strtok3@7.1.1: dependencies: '@tokenizer/token': 0.3.0 - peek-readable: 5.4.2 + peek-readable: 5.3.1 superjson@2.2.2: dependencies: @@ -5472,6 +5436,8 @@ snapshots: pathe: 2.0.3 picomatch: 4.0.2 + util-deprecate@1.0.2: {} + valid-data-url@3.0.1: {} validate-npm-package-license@3.0.4: @@ -5651,6 +5617,6 @@ snapshots: yoctocolors@2.1.1: {} - zod@3.24.2: {} + zod@3.24.1: {} zwitch@2.0.4: {} diff --git a/src/node/markdown/plugins/highlight.ts b/src/node/markdown/plugins/highlight.ts index 3746fb45..28babad5 100644 --- a/src/node/markdown/plugins/highlight.ts +++ b/src/node/markdown/plugins/highlight.ts @@ -73,22 +73,14 @@ export async function highlight( await options?.shikiSetup?.(highlighter) - // TODO: remove explicit matchAlgorithm in shiki v3 const transformers: ShikiTransformer[] = [ - transformerNotationDiff({ - matchAlgorithm: 'v3' - }), + transformerNotationDiff(), transformerNotationFocus({ - matchAlgorithm: 'v3', classActiveLine: 'has-focus', classActivePre: 'has-focused-lines' }), - transformerNotationHighlight({ - matchAlgorithm: 'v3' - }), - transformerNotationErrorLevel({ - matchAlgorithm: 'v3' - }), + transformerNotationHighlight(), + transformerNotationErrorLevel(), { name: 'vitepress:add-class', pre(node) { From d1f2afdf0fbb022f12cc12295723b3b7c7ef5cb1 Mon Sep 17 00:00:00 2001 From: Bjorn Lu Date: Fri, 21 Feb 2025 23:58:44 +0800 Subject: [PATCH 20/53] fix: set correct oldURL and newURL for hashchange (#4573) --- src/client/app/router.ts | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/client/app/router.ts b/src/client/app/router.ts index 8b09339d..7121464c 100644 --- a/src/client/app/router.ts +++ b/src/client/app/router.ts @@ -325,12 +325,12 @@ async function changeRoute( { smoothScroll = false, initialLoad = false } = {} ): Promise { const loc = normalizeHref(location.href) - const { pathname, hash } = new URL(href, fakeHost) - const currentLoc = new URL(loc, fakeHost) + const nextUrl = new URL(href, location.origin) + const currentUrl = new URL(loc, location.origin) if (href === loc) { if (!initialLoad) { - scrollTo(hash, smoothScroll) + scrollTo(nextUrl.hash, smoothScroll) return false } } else { @@ -338,16 +338,16 @@ async function changeRoute( history.replaceState({ scrollPosition: window.scrollY }, '') history.pushState({}, '', href) - if (pathname === currentLoc.pathname) { + if (nextUrl.pathname === currentUrl.pathname) { // scroll between hash anchors on the same page, avoid duplicate entries - if (hash !== currentLoc.hash) { + if (nextUrl.hash !== currentUrl.hash) { window.dispatchEvent( new HashChangeEvent('hashchange', { - oldURL: currentLoc.href, - newURL: href + oldURL: currentUrl.href, + newURL: nextUrl.href }) ) - scrollTo(hash, smoothScroll) + scrollTo(nextUrl.hash, smoothScroll) } return false From a62ea6a832a33b756642b24ad5d38c248e08b554 Mon Sep 17 00:00:00 2001 From: Divyansh Singh <40380293+brc-dd@users.noreply.github.com> Date: Tue, 25 Feb 2025 01:31:05 +0530 Subject: [PATCH 21/53] feat: dynamic routes plugin overhaul (#4525) BREAKING CHANGES: Internals are modified a bit to better support vite 6 and handle HMR more correctly. For most users this won't need any change on their side. --- __tests__/e2e/dynamic-routes/[id].paths.ts | 20 +- __tests__/e2e/dynamic-routes/paths.ts | 4 + __tests__/unit/node/utils/moduleGraph.test.ts | 72 +++++ src/client/app/data.ts | 2 +- .../components/VPLocalSearchBox.vue | 2 +- src/node/config.ts | 12 +- src/node/index.ts | 5 + src/node/init/init.ts | 14 +- src/node/markdownToVue.ts | 105 ++++--- src/node/plugin.ts | 76 ++--- src/node/plugins/dynamicRoutesPlugin.ts | 289 ++++++++++++------ src/node/plugins/localSearchPlugin.ts | 4 +- src/node/plugins/staticDataPlugin.ts | 62 ++-- src/node/siteConfig.ts | 26 +- src/node/utils/moduleGraph.ts | 115 +++++++ src/node/utils/task.ts | 2 +- 16 files changed, 556 insertions(+), 254 deletions(-) create mode 100644 __tests__/e2e/dynamic-routes/paths.ts create mode 100644 __tests__/unit/node/utils/moduleGraph.test.ts create mode 100644 src/node/utils/moduleGraph.ts diff --git a/__tests__/e2e/dynamic-routes/[id].paths.ts b/__tests__/e2e/dynamic-routes/[id].paths.ts index 3eca4d91..12a8bc32 100644 --- a/__tests__/e2e/dynamic-routes/[id].paths.ts +++ b/__tests__/e2e/dynamic-routes/[id].paths.ts @@ -1,8 +1,14 @@ -export default { - async paths() { - return [ - { params: { id: 'foo' }, content: `# Foo` }, - { params: { id: 'bar' }, content: `# Bar` } - ] +import { defineRoutes } from 'vitepress' +import paths from './paths' + +export default defineRoutes({ + async paths(watchedFiles: string[]) { + // console.log('watchedFiles', watchedFiles) + return paths + }, + watch: ['**/data-loading/**/*.json'], + async transformPageData(pageData) { + // console.log('transformPageData', pageData.filePath) + pageData.title += ' - transformed' } -} +}) diff --git a/__tests__/e2e/dynamic-routes/paths.ts b/__tests__/e2e/dynamic-routes/paths.ts new file mode 100644 index 00000000..5adb0ed4 --- /dev/null +++ b/__tests__/e2e/dynamic-routes/paths.ts @@ -0,0 +1,4 @@ +export default [ + { params: { id: 'foo' }, content: `# Foo` }, + { params: { id: 'bar' }, content: `# Bar` } +] diff --git a/__tests__/unit/node/utils/moduleGraph.test.ts b/__tests__/unit/node/utils/moduleGraph.test.ts new file mode 100644 index 00000000..9b3db9e5 --- /dev/null +++ b/__tests__/unit/node/utils/moduleGraph.test.ts @@ -0,0 +1,72 @@ +import { ModuleGraph } from 'node/utils/moduleGraph' + +describe('node/utils/moduleGraph', () => { + let graph: ModuleGraph + + beforeEach(() => { + graph = new ModuleGraph() + }) + + it('should correctly delete a module and its dependents', () => { + graph.add('A', ['B', 'C']) + graph.add('B', ['D']) + graph.add('C', []) + graph.add('D', []) + + expect(graph.delete('D')).toEqual(new Set(['D', 'B', 'A'])) + }) + + it('should handle shared dependencies correctly', () => { + graph.add('A', ['B', 'C']) + graph.add('B', ['D']) + graph.add('C', ['D']) // Shared dependency + graph.add('D', []) + + expect(graph.delete('D')).toEqual(new Set(['A', 'B', 'C', 'D'])) + }) + + it('merges dependencies correctly', () => { + // Add module A with dependency B + graph.add('A', ['B']) + // Merge new dependency C into module A (B should remain) + graph.add('A', ['C']) + + // Deleting B should remove A as well, since A depends on B. + expect(graph.delete('B')).toEqual(new Set(['B', 'A'])) + }) + + it('handles cycles gracefully', () => { + // Create a cycle: A -> B, B -> C, C -> A. + graph.add('A', ['B']) + graph.add('B', ['C']) + graph.add('C', ['A']) + + // Deleting any module in the cycle should delete all modules in the cycle. + expect(graph.delete('A')).toEqual(new Set(['A', 'B', 'C'])) + }) + + it('cleans up dependencies when deletion', () => { + // Setup A -> B relationship. + graph.add('A', ['B']) + graph.add('B', []) + + // Deleting B should remove both B and A from the graph. + expect(graph.delete('B')).toEqual(new Set(['B', 'A'])) + + // After deletion, add modules again. + graph.add('C', []) + graph.add('A', ['C']) // Now A depends only on C. + + expect(graph.delete('C')).toEqual(new Set(['C', 'A'])) + }) + + it('handles independent modules', () => { + // Modules with no dependencies. + graph.add('X', []) + graph.add('Y', []) + + // Deletion of one should only remove that module. + expect(graph.delete('X')).toEqual(new Set(['X'])) + expect(graph.delete('Y')).toEqual(new Set(['Y'])) + }) +}) diff --git a/src/client/app/data.ts b/src/client/app/data.ts index c99de52f..16288e87 100644 --- a/src/client/app/data.ts +++ b/src/client/app/data.ts @@ -62,7 +62,7 @@ export const siteDataRef: Ref = shallowRef( // hmr if (import.meta.hot) { - import.meta.hot.accept('/@siteData', (m) => { + import.meta.hot.accept('@siteData', (m) => { if (m) { siteDataRef.value = m.default } diff --git a/src/client/theme-default/components/VPLocalSearchBox.vue b/src/client/theme-default/components/VPLocalSearchBox.vue index 951a7536..b348de54 100644 --- a/src/client/theme-default/components/VPLocalSearchBox.vue +++ b/src/client/theme-default/components/VPLocalSearchBox.vue @@ -46,7 +46,7 @@ const searchIndexData = shallowRef(localSearchIndex) // hmr if (import.meta.hot) { - import.meta.hot.accept('/@localSearchIndex', (m) => { + import.meta.hot.accept('@localSearchIndex', (m) => { if (m) { searchIndexData.value = m.default } diff --git a/src/node/config.ts b/src/node/config.ts index 5f1698fe..75740b80 100644 --- a/src/node/config.ts +++ b/src/node/config.ts @@ -97,20 +97,12 @@ export async function resolveConfig( ? userThemeDir : DEFAULT_THEME_PATH - const { pages, dynamicRoutes, rewrites } = await resolvePages( - srcDir, - userConfig, - logger - ) - const config: SiteConfig = { root, srcDir, assetsDir, site, themeDir, - pages, - dynamicRoutes, configPath, configDeps, outDir, @@ -135,10 +127,10 @@ export async function resolveConfig( transformHead: userConfig.transformHead, transformHtml: userConfig.transformHtml, transformPageData: userConfig.transformPageData, - rewrites, userConfig, sitemap: userConfig.sitemap, - buildConcurrency: userConfig.buildConcurrency ?? 64 + buildConcurrency: userConfig.buildConcurrency ?? 64, + ...(await resolvePages(srcDir, userConfig, logger)) } // to be shared with content loaders diff --git a/src/node/index.ts b/src/node/index.ts index 63ee79f8..5f3980be 100644 --- a/src/node/index.ts +++ b/src/node/index.ts @@ -5,6 +5,11 @@ export * from './contentLoader' export * from './init/init' export * from './markdown/markdown' export { defineLoader, type LoaderModule } from './plugins/staticDataPlugin' +export { + defineRoutes, + type ResolvedRouteConfig, + type RouteModule +} from './plugins/dynamicRoutesPlugin' export * from './postcss/isolateStyles' export * from './serve/serve' export * from './server' diff --git a/src/node/init/init.ts b/src/node/init/init.ts index 6ccfdf09..8a6836a1 100644 --- a/src/node/init/init.ts +++ b/src/node/init/init.ts @@ -11,7 +11,7 @@ import fs from 'fs-extra' import template from 'lodash.template' import path from 'node:path' import { fileURLToPath } from 'node:url' -import { bold, cyan, yellow } from 'picocolors' +import c from 'picocolors' import { slash } from '../shared' export enum ScaffoldThemeType { @@ -38,7 +38,7 @@ const getPackageManger = () => { } export async function init(root?: string) { - intro(bold(cyan('Welcome to VitePress!'))) + intro(c.bold(c.cyan('Welcome to VitePress!'))) const options = await group( { @@ -232,7 +232,7 @@ export function scaffold({ const gitignorePrefix = root ? `${slash(root)}/.vitepress` : '.vitepress' if (fs.existsSync('.git')) { tips.push( - `Make sure to add ${cyan(`${gitignorePrefix}/dist`)} and ${cyan(`${gitignorePrefix}/cache`)} to your ${cyan(`.gitignore`)} file.` + `Make sure to add ${c.cyan(`${gitignorePrefix}/dist`)} and ${c.cyan(`${gitignorePrefix}/cache`)} to your ${c.cyan(`.gitignore`)} file.` ) } @@ -242,11 +242,11 @@ export function scaffold({ !userPkg.devDependencies?.['vue'] ) { tips.push( - `Since you've chosen to customize the theme, you should also explicitly install ${cyan(`vue`)} as a dev dependency.` + `Since you've chosen to customize the theme, you should also explicitly install ${c.cyan(`vue`)} as a dev dependency.` ) } - const tip = tips.length ? yellow([`\n\nTips:`, ...tips].join('\n- ')) : `` + const tip = tips.length ? c.yellow([`\n\nTips:`, ...tips].join('\n- ')) : `` const dir = root ? ' ' + root : '' const pm = getPackageManger() @@ -261,8 +261,8 @@ export function scaffold({ Object.assign(userPkg.scripts || (userPkg.scripts = {}), scripts) fs.writeFileSync(pkgPath, JSON.stringify(userPkg, null, 2)) - return `Done! Now run ${cyan(`${pm} run ${prefix}dev`)} and start writing.${tip}` + return `Done! Now run ${c.cyan(`${pm} run ${prefix}dev`)} and start writing.${tip}` } else { - return `You're all set! Now run ${cyan(`${pm === 'npm' ? 'npx' : pm} vitepress dev${dir}`)} and start writing.${tip}` + return `You're all set! Now run ${c.cyan(`${pm === 'npm' ? 'npx' : pm} vitepress dev${dir}`)} and start writing.${tip}` } } diff --git a/src/node/markdownToVue.ts b/src/node/markdownToVue.ts index a4f8a20d..d4576cda 100644 --- a/src/node/markdownToVue.ts +++ b/src/node/markdownToVue.ts @@ -9,6 +9,7 @@ import { type MarkdownOptions, type MarkdownRenderer } from './markdown/markdown' +import { getPageDataTransformer } from './plugins/dynamicRoutesPlugin' import { EXTERNAL_URL_RE, getLocaleForPath, @@ -31,25 +32,62 @@ export interface MarkdownCompileResult { includes: string[] } -export function clearCache(file?: string) { - if (!file) { +export function clearCache(id?: string) { + if (!id) { cache.clear() return } - file = JSON.stringify({ file }).slice(1) - cache.find((_, key) => key.endsWith(file!) && cache.delete(key)) + id = JSON.stringify({ id }).slice(1) + cache.find((_, key) => key.endsWith(id!) && cache.delete(key)) +} + +let __pages: string[] = [] +let __dynamicRoutes = new Map() +let __rewrites = new Map() +let __ts: number + +function getResolutionCache(siteConfig: SiteConfig) { + // @ts-expect-error internal + if (siteConfig.__dirty) { + __pages = siteConfig.pages.map((p) => slash(p.replace(/\.md$/, ''))) + + __dynamicRoutes = new Map( + siteConfig.dynamicRoutes.map((r) => [ + r.fullPath, + [slash(path.join(siteConfig.srcDir, r.route)), r.loaderPath] + ]) + ) + + __rewrites = new Map( + Object.entries(siteConfig.rewrites.map).map(([key, value]) => [ + slash(path.join(siteConfig.srcDir, key)), + slash(path.join(siteConfig.srcDir, value!)) + ]) + ) + + __ts = Date.now() + + // @ts-expect-error internal + siteConfig.__dirty = false + } + + return { + pages: __pages, + dynamicRoutes: __dynamicRoutes, + rewrites: __rewrites, + ts: __ts + } } export async function createMarkdownToVueRenderFn( srcDir: string, options: MarkdownOptions = {}, - pages: string[], isBuild = false, base = '/', includeLastUpdatedData = false, cleanUrls = false, - siteConfig: SiteConfig | null = null + siteConfig: SiteConfig ) { const md = await createMarkdownRenderer( srcDir, @@ -58,32 +96,30 @@ export async function createMarkdownToVueRenderFn( siteConfig?.logger ) - pages = pages.map((p) => slash(p.replace(/\.md$/, ''))) - - const dynamicRoutes = new Map( - siteConfig?.dynamicRoutes?.routes.map((r) => [ - r.fullPath, - slash(path.join(srcDir, r.route)) - ]) || [] - ) - - const rewrites = new Map( - Object.entries(siteConfig?.rewrites.map || {}).map(([key, value]) => [ - slash(path.join(srcDir, key)), - slash(path.join(srcDir, value!)) - ]) || [] - ) - return async ( src: string, file: string, publicDir: string ): Promise => { - const fileOrig = dynamicRoutes.get(file) || file + const { pages, dynamicRoutes, rewrites, ts } = + getResolutionCache(siteConfig) + + const dynamicRoute = dynamicRoutes.get(file) + const fileOrig = dynamicRoute?.[0] || file + const transformPageData = [ + siteConfig?.transformPageData, + getPageDataTransformer(dynamicRoute?.[1]!) + ].filter((fn) => fn != null) + file = rewrites.get(file) || file const relativePath = slash(path.relative(srcDir, file)) - const cacheKey = JSON.stringify({ src, file: relativePath }) + const cacheKey = JSON.stringify({ + src, + ts, + file: relativePath, + id: fileOrig + }) if (isBuild || options.cache !== false) { const cached = cache.get(cacheKey) if (cached) { @@ -205,14 +241,14 @@ export async function createMarkdownToVueRenderFn( } } - if (siteConfig?.transformPageData) { - const dataToMerge = await siteConfig.transformPageData(pageData, { - siteConfig - }) - if (dataToMerge) { - pageData = { - ...pageData, - ...dataToMerge + for (const fn of transformPageData) { + if (fn) { + const dataToMerge = await fn(pageData, { siteConfig }) + if (dataToMerge) { + pageData = { + ...pageData, + ...dataToMerge + } } } } @@ -318,10 +354,7 @@ const inferDescription = (frontmatter: Record) => { return (head && getHeadMetaContent(head, 'description')) || '' } -const getHeadMetaContent = ( - head: HeadConfig[], - name: string -): string | undefined => { +const getHeadMetaContent = (head: HeadConfig[], name: string) => { if (!head || !head.length) { return undefined } diff --git a/src/node/plugin.ts b/src/node/plugin.ts index 078fd2a6..35905912 100644 --- a/src/node/plugin.ts +++ b/src/node/plugin.ts @@ -3,7 +3,6 @@ import c from 'picocolors' import { mergeConfig, searchForWorkspaceRoot, - type ModuleNode, type Plugin, type ResolvedConfig, type Rollup, @@ -96,7 +95,7 @@ export async function createVitePressPlugin( // lazy require plugin-vue to respect NODE_ENV in @vue/compiler-x const vuePlugin = await import('@vitejs/plugin-vue').then((r) => r.default({ - include: [/\.vue$/, /\.md$/], + include: /\.(?:vue|md)$/, ...userVuePluginOptions, template: { ...userVuePluginOptions?.template, @@ -130,7 +129,6 @@ export async function createVitePressPlugin( markdownToVue = await createMarkdownToVueRenderFn( srcDir, markdown, - siteConfig.pages, config.command === 'build', config.base, lastUpdated, @@ -197,9 +195,7 @@ export async function createVitePressPlugin( } } data = serializeFunctions(data) - return `${deserializeFunctions};export default deserializeFunctions(JSON.parse(${JSON.stringify( - JSON.stringify(data) - )}))` + return `${deserializeFunctions};export default deserializeFunctions(JSON.parse(${JSON.stringify(JSON.stringify(data))}))` } }, @@ -208,7 +204,7 @@ export async function createVitePressPlugin( return processClientJS(code, id) } else if (id.endsWith('.md')) { // transform .md files into vueSrc so plugin-vue can handle it - const { vueSrc, deadLinks, includes } = await markdownToVue( + const { vueSrc, deadLinks, includes, pageData } = await markdownToVue( code, id, config.publicDir @@ -220,6 +216,22 @@ export async function createVitePressPlugin( this.addWatchFile(i) }) } + if ( + this.environment.mode === 'dev' && + this.environment.name === 'client' + ) { + const relativePath = path.posix.relative(srcDir, id) + const payload: PageDataPayload = { + path: `/${siteConfig.rewrites.map[relativePath] || relativePath}`, + pageData + } + // notify the client to update page data + this.environment.hot.send({ + type: 'custom', + event: 'vitepress:pageData', + data: payload + }) + } return processClientJS(vueSrc, id) } }, @@ -256,9 +268,7 @@ export async function createVitePressPlugin( if (themeRE.test(file)) { siteConfig.logger.info( c.green( - `${path.relative(process.cwd(), _file)} ${ - added ? 'created' : 'deleted' - }, restarting server...\n` + `${path.relative(process.cwd(), _file)} ${added ? 'created' : 'deleted'}, restarting server...\n` ), { clear: true, timestamp: true } ) @@ -368,15 +378,13 @@ export async function createVitePressPlugin( } }, - async handleHotUpdate(ctx) { - const { file, read, server } = ctx + async hotUpdate({ file }) { + if (this.environment.name !== 'client') return + if (file === configPath || configDeps.includes(file)) { siteConfig.logger.info( c.green( - `${path.relative( - process.cwd(), - file - )} changed, restarting server...\n` + `${path.relative(process.cwd(), file)} changed, restarting server...\n` ), { clear: true, timestamp: true } ) @@ -393,47 +401,23 @@ export async function createVitePressPlugin( await recreateServer?.() return } - - // hot reload .md files as .vue files - if (file.endsWith('.md')) { - const content = await read() - const { pageData, vueSrc } = await markdownToVue( - content, - file, - config.publicDir - ) - - const relativePath = slash(path.relative(srcDir, file)) - const payload: PageDataPayload = { - path: `/${siteConfig.rewrites.map[relativePath] || relativePath}`, - pageData - } - - // notify the client to update page data - server.ws.send({ - type: 'custom', - event: 'vitepress:pageData', - data: payload - }) - - // overwrite src so vue plugin can handle the HMR - ctx.read = () => vueSrc - } } } const hmrFix: Plugin = { name: 'vitepress:hmr-fix', - async handleHotUpdate({ file, server, modules }) { + async hotUpdate({ file, modules }) { + if (this.environment.name !== 'client') return + const importers = [...(importerMap[slash(file)] || [])] if (importers.length > 0) { return [ ...modules, ...importers.map((id) => { - clearCache(slash(path.relative(srcDir, id))) - return server.moduleGraph.getModuleById(id) + clearCache(id) + return this.environment.moduleGraph.getModuleById(id) }) - ].filter(Boolean) as ModuleNode[] + ].filter((mod) => mod !== undefined) } } } diff --git a/src/node/plugins/dynamicRoutesPlugin.ts b/src/node/plugins/dynamicRoutesPlugin.ts index 11f4b64e..a480d898 100644 --- a/src/node/plugins/dynamicRoutesPlugin.ts +++ b/src/node/plugins/dynamicRoutesPlugin.ts @@ -1,24 +1,77 @@ import fs from 'fs-extra' import path from 'node:path' import c from 'picocolors' +import { isMatch } from 'picomatch' import { glob } from 'tinyglobby' import { loadConfigFromFile, normalizePath, + type EnvironmentModuleNode, type Logger, - type Plugin, - type ViteDevServer + type Plugin } from 'vite' +import type { Awaitable } from '../shared' import { type SiteConfig, type UserConfig } from '../siteConfig' +import { ModuleGraph } from '../utils/moduleGraph' import { resolveRewrites } from './rewritesPlugin' -export const dynamicRouteRE = /\[(\w+?)\]/g +interface UserRouteConfig { + params: Record + content?: string +} + +export type ResolvedRouteConfig = UserRouteConfig & { + /** + * the raw route (relative to src root), e.g. foo/[bar].md + */ + route: string + /** + * the actual path with params resolved (relative to src root), e.g. foo/1.md + */ + path: string + /** + * absolute fs path + */ + fullPath: string + /** + * the path to the paths loader module + */ + loaderPath: string +} + +export interface RouteModule { + watch?: string[] | string + paths: + | UserRouteConfig[] + | ((watchedFiles: string[]) => Awaitable) + transformPageData?: UserConfig['transformPageData'] +} + +interface ResolvedRouteModule { + watch: string[] | undefined + routes: ResolvedRouteConfig[] | undefined + loader: RouteModule['paths'] + transformPageData?: RouteModule['transformPageData'] +} + +const dynamicRouteRE = /\[(\w+?)\]/g +const pathLoaderRE = /\.paths\.m?[jt]s$/ + +const routeModuleCache = new Map() +let moduleGraph = new ModuleGraph() + +/** + * Helper for defining routes with type inference + */ +export function defineRoutes(loader: RouteModule) { + return loader +} export async function resolvePages( srcDir: string, userConfig: UserConfig, logger: Logger -) { +): Promise> { // Important: tinyglobby doesn't guarantee order of the returned files. // We must sort the pages so the input list to rollup is stable across // builds - otherwise different input order could result in different exports @@ -26,7 +79,7 @@ export async function resolvePages( // JavaScript built-in sort() is mandated to be stable as of ES2019 and // supported in Node 12+, which is required by Vite. const allMarkdownFiles = ( - await glob(['**.md'], { + await glob(['**/*.md'], { cwd: srcDir, ignore: [ '**/node_modules/**', @@ -50,67 +103,32 @@ export async function resolvePages( dynamicRouteFiles, logger ) - pages.push(...dynamicRoutes.routes.map((r) => r.path)) + + pages.push(...dynamicRoutes.map((r) => r.path)) const rewrites = resolveRewrites(pages, userConfig.rewrites) return { pages, dynamicRoutes, - rewrites + rewrites, + // @ts-expect-error internal flag to reload resolution cache in ../markdownToVue.ts + __dirty: true } } -interface UserRouteConfig { - params: Record - content?: string -} - -interface RouteModule { - path: string - config: { - paths: - | UserRouteConfig[] - | (() => UserRouteConfig[] | Promise) - } - dependencies: string[] -} - -const routeModuleCache = new Map() - -export type ResolvedRouteConfig = UserRouteConfig & { - /** - * the raw route (relative to src root), e.g. foo/[bar].md - */ - route: string - /** - * the actual path with params resolved (relative to src root), e.g. foo/1.md - */ - path: string - /** - * absolute fs path - */ - fullPath: string -} - export const dynamicRoutesPlugin = async ( config: SiteConfig ): Promise => { - let server: ViteDevServer - return { name: 'vitepress:dynamic-routes', - configureServer(_server) { - server = _server - }, - resolveId(id) { if (!id.endsWith('.md')) return const normalizedId = id.startsWith(config.srcDir) ? id : normalizePath(path.resolve(config.srcDir, id.replace(/^\//, ''))) - const matched = config.dynamicRoutes.routes.find( + const matched = config.dynamicRoutes.find( (r) => r.fullPath === normalizedId ) if (matched) { @@ -119,11 +137,13 @@ export const dynamicRoutesPlugin = async ( }, load(id) { - const matched = config.dynamicRoutes.routes.find((r) => r.fullPath === id) + const matched = config.dynamicRoutes.find((r) => r.fullPath === id) if (matched) { const { route, params, content } = matched const routeFile = normalizePath(path.resolve(config.srcDir, route)) - config.dynamicRoutes.fileToModulesMap[routeFile].add(id) + + moduleGraph.add(id, [routeFile]) + moduleGraph.add(routeFile, [matched.loaderPath]) let baseContent = fs.readFileSync(routeFile, 'utf-8') @@ -139,39 +159,65 @@ export const dynamicRoutesPlugin = async ( } // params are injected with special markers and extracted as part of - // __pageData in ../markdownTovue.ts - return `__VP_PARAMS_START${JSON.stringify( - params - )}__VP_PARAMS_END__${baseContent}` + // __pageData in ../markdownToVue.ts + return `__VP_PARAMS_START${JSON.stringify(params)}__VP_PARAMS_END__${baseContent}` } }, - async handleHotUpdate(ctx) { - routeModuleCache.delete(ctx.file) - const mods = config.dynamicRoutes.fileToModulesMap[ctx.file] - if (mods) { - // path loader module or deps updated, reset loaded routes - if (!ctx.file.endsWith('.md')) { - Object.assign( - config, - await resolvePages(config.srcDir, config.userConfig, config.logger) - ) + async hotUpdate({ file, modules: existingMods }) { + if (this.environment.name !== 'client') return + + const modules: EnvironmentModuleNode[] = [] + const normalizedFile = normalizePath(file) + + // Trigger update if a module or its dependencies changed. + for (const id of moduleGraph.delete(normalizedFile)) { + routeModuleCache.delete(id) + const mod = this.environment.moduleGraph.getModuleById(id) + if (mod) { + modules.push(mod) } - for (const id of mods) { - ctx.modules.push(server.moduleGraph.getModuleById(id)!) + } + + // Also check if the file matches any custom watch patterns. + let watchedFileChanged = false + for (const [, route] of routeModuleCache) { + if (route.watch && isMatch(normalizedFile, route.watch)) { + route.routes = undefined + watchedFileChanged = true } } + + if ( + (modules.length && !normalizedFile.endsWith('.md')) || + watchedFileChanged || + pathLoaderRE.test(normalizedFile) + ) { + // path loader module or deps updated, reset loaded routes + Object.assign( + config, + await resolvePages(config.srcDir, config.userConfig, config.logger) + ) + } + + return modules.length ? [...existingMods, ...modules] : undefined } } } -export async function resolveDynamicRoutes( +export function getPageDataTransformer( + loaderPath: string +): UserConfig['transformPageData'] | undefined { + return routeModuleCache.get(loaderPath)?.transformPageData +} + +async function resolveDynamicRoutes( srcDir: string, routes: string[], logger: Logger -): Promise { +): Promise { const pendingResolveRoutes: Promise[] = [] - const routeFileToModulesMap: Record> = {} + const newModuleGraph = moduleGraph.clone() for (const route of routes) { // locate corresponding route paths file @@ -194,50 +240,95 @@ export async function resolveDynamicRoutes( } // load the paths loader module - let mod = routeModuleCache.get(pathsFile) - if (!mod) { + let watch: ResolvedRouteModule['watch'] + let loader: ResolvedRouteModule['loader'] + let extras: Partial + + const loaderPath = normalizePath(pathsFile) + const existing = routeModuleCache.get(loaderPath) + + if (existing) { + // use cached routes if not invalidated by hmr + if (existing.routes) { + pendingResolveRoutes.push(Promise.resolve(existing.routes)) + continue + } + + ;({ watch, loader, ...extras } = existing) + } else { + let mod try { - mod = (await loadConfigFromFile( + mod = await loadConfigFromFile( {} as any, pathsFile, undefined, 'silent' - )) as RouteModule - routeModuleCache.set(pathsFile, mod) + ) } catch (err: any) { logger.warn( `${c.yellow(`Failed to load ${pathsFile}:`)}\n${err.message}\n${err.stack}` ) continue } - } - // this array represents the virtual modules affected by this route - const matchedModuleIds = (routeFileToModulesMap[ - normalizePath(path.resolve(srcDir, route)) - ] = new Set()) + if (!mod) { + logger.warn( + c.yellow( + `Invalid paths file export in ${pathsFile}. ` + + `Missing "default" export.` + ) + ) + continue + } - // each dependency (including the loader module itself) also point to the - // same array - for (const dep of mod.dependencies) { - // deps are resolved relative to cwd - routeFileToModulesMap[normalizePath(path.resolve(dep))] = matchedModuleIds - } + // @ts-ignore + ;({ paths: loader, watch, ...extras } = mod.config) - const loader = mod!.config.paths - if (!loader) { - logger.warn( - c.yellow( - `Invalid paths file export in ${pathsFile}. ` + - `Missing "paths" property from default export.` + if (!loader) { + logger.warn( + c.yellow( + `Invalid paths file export in ${pathsFile}. ` + + `Missing "paths" property from default export.` + ) + ) + continue + } + + watch = typeof watch === 'string' ? [watch] : watch + if (watch) { + watch = watch.map((p) => + p.startsWith('.') + ? normalizePath(path.resolve(path.dirname(pathsFile), p)) + : normalizePath(p) ) + } + + // record deps for hmr + newModuleGraph.add( + loaderPath, + mod.dependencies.map((p) => normalizePath(path.resolve(p))) ) - continue } const resolveRoute = async (): Promise => { - const paths = await (typeof loader === 'function' ? loader() : loader) - return paths.map((userConfig) => { + let pathsData: UserRouteConfig[] + + if (typeof loader === 'function') { + let watchedFiles: string[] = [] + if (watch) { + watchedFiles = ( + await glob(watch, { + ignore: ['**/node_modules/**', '**/dist/**'], + expandDirectories: false + }) + ).sort() + } + pathsData = await loader(watchedFiles) + } else { + pathsData = loader + } + + const routes = pathsData.map((userConfig) => { const resolvedPath = route.replace( dynamicRouteRE, (_, key) => userConfig.params[key] @@ -246,15 +337,21 @@ export async function resolveDynamicRoutes( path: resolvedPath, fullPath: normalizePath(path.resolve(srcDir, resolvedPath)), route, + loaderPath, ...userConfig } }) + + routeModuleCache.set(loaderPath, { ...extras, watch, routes, loader }) + + return routes } + pendingResolveRoutes.push(resolveRoute()) } - return { - routes: (await Promise.all(pendingResolveRoutes)).flat(), - fileToModulesMap: routeFileToModulesMap - } + const resolvedRoutes = (await Promise.all(pendingResolveRoutes)).flat() + moduleGraph = newModuleGraph + + return resolvedRoutes } diff --git a/src/node/plugins/localSearchPlugin.ts b/src/node/plugins/localSearchPlugin.ts index bffe74e8..debc024c 100644 --- a/src/node/plugins/localSearchPlugin.ts +++ b/src/node/plugins/localSearchPlugin.ts @@ -198,7 +198,9 @@ export async function localSearchPlugin( } }, - async handleHotUpdate({ file }) { + async hotUpdate({ file }) { + if (this.environment.name !== 'client') return + if (file.endsWith('.md')) { await indexFile(file) debug('🔍️ Updated', file) diff --git a/src/node/plugins/staticDataPlugin.ts b/src/node/plugins/staticDataPlugin.ts index 6e420ec2..8521603d 100644 --- a/src/node/plugins/staticDataPlugin.ts +++ b/src/node/plugins/staticDataPlugin.ts @@ -1,5 +1,5 @@ +import path from 'node:path' import { isMatch } from 'picomatch' -import path, { dirname, resolve } from 'node:path' import { glob } from 'tinyglobby' import { type EnvironmentModuleNode, @@ -25,10 +25,12 @@ export function defineLoader(loader: LoaderModule) { return loader } +// Map from loader module id to its module info const idToLoaderModulesMap: Record = Object.create(null) -const depToLoaderModuleIdMap: Record = Object.create(null) +// Map from dependency file to a set of loader module ids +const depToLoaderModuleIdsMap: Record> = Object.create(null) // During build, the load hook will be called on the same file twice // once for client and once for server build. Not only is this wasteful, it @@ -62,7 +64,7 @@ export const staticDataPlugin: Plugin = { }) } - const base = dirname(id) + const base = path.dirname(id) let watch: LoaderModule['watch'] let load: LoaderModule['load'] @@ -70,14 +72,18 @@ export const staticDataPlugin: Plugin = { if (existing) { ;({ watch, load } = existing) } else { - // use vite's load config util as a away to load Node.js file with + // use vite's load config util as a way to load Node.js file with // TS & native ESM support const res = await loadConfigFromFile({} as any, id.replace(/\?.*$/, '')) // record deps for hmr if (server && res) { for (const dep of res.dependencies) { - depToLoaderModuleIdMap[normalizePath(path.resolve(dep))] = id + const depPath = normalizePath(path.resolve(dep)) + if (!depToLoaderModuleIdsMap[depPath]) { + depToLoaderModuleIdsMap[depPath] = new Set() + } + depToLoaderModuleIdsMap[depPath].add(id) } } @@ -89,7 +95,7 @@ export const staticDataPlugin: Plugin = { if (watch) { watch = watch.map((p) => { return p.startsWith('.') - ? normalizePath(resolve(base, p)) + ? normalizePath(path.resolve(base, p)) : normalizePath(p) }) } @@ -97,9 +103,8 @@ export const staticDataPlugin: Plugin = { } // load the data - let watchedFiles + let watchedFiles: string[] = [] if (watch) { - if (typeof watch === 'string') watch = [watch] watchedFiles = ( await glob(watch, { ignore: ['**/node_modules/**', '**/dist/**'], @@ -107,41 +112,50 @@ export const staticDataPlugin: Plugin = { }) ).sort() } - const data = await load(watchedFiles || []) + const data = await load(watchedFiles) // record loader module for HMR if (server) { idToLoaderModulesMap[id] = { watch, load } } - const result = `export const data = JSON.parse(${JSON.stringify( - JSON.stringify(data) - )})` + const result = `export const data = JSON.parse(${JSON.stringify(JSON.stringify(data))})` if (_resolve) _resolve(result) return result } }, - hotUpdate(ctx) { - const file = ctx.file + hotUpdate({ file, modules: existingMods }) { + if (this.environment.name !== 'client') return const modules: EnvironmentModuleNode[] = [] - // dependency of data loader changed - // (note the dep array includes the loader file itself) - if (file in depToLoaderModuleIdMap) { - const id = depToLoaderModuleIdMap[file]! - delete idToLoaderModulesMap[id] - modules.push(this.environment.moduleGraph.getModuleById(id)!) + const normalizedFile = normalizePath(file) + + // Trigger update if a dependency (including transitive ones) changed. + if (normalizedFile in depToLoaderModuleIdsMap) { + for (const id of Array.from( + depToLoaderModuleIdsMap[normalizedFile] || [] + )) { + delete idToLoaderModulesMap[id] + const mod = this.environment.moduleGraph.getModuleById(id) + if (mod) { + modules.push(mod) + } + } } + // Also check if the file matches any custom watch patterns. for (const id in idToLoaderModulesMap) { - const { watch } = idToLoaderModulesMap[id]! - if (watch && isMatch(file, watch)) { - modules.push(this.environment.moduleGraph.getModuleById(id)!) + const loader = idToLoaderModulesMap[id] + if (loader && loader.watch && isMatch(normalizedFile, loader.watch)) { + const mod = this.environment.moduleGraph.getModuleById(id) + if (mod && !modules.includes(mod)) { + modules.push(mod) + } } } - return modules.length > 0 ? [...ctx.modules, ...modules] : undefined + return modules.length ? [...existingMods, ...modules] : undefined } } diff --git a/src/node/siteConfig.ts b/src/node/siteConfig.ts index ebd99096..49451cbe 100644 --- a/src/node/siteConfig.ts +++ b/src/node/siteConfig.ts @@ -4,6 +4,7 @@ import type { SitemapStreamOptions } from 'sitemap' import type { Logger, UserConfig as ViteConfig } from 'vite' import type { SitemapItem } from './build/generateSitemap' import type { MarkdownOptions } from './markdown/markdown' +import type { ResolvedRouteConfig } from './plugins/dynamicRoutesPlugin' import type { Awaitable, HeadConfig, @@ -30,26 +31,6 @@ export interface TransformContext { assets: string[] } -interface UserRouteConfig { - params: Record - content?: string -} - -export type ResolvedRouteConfig = UserRouteConfig & { - /** - * the raw route (relative to src root), e.g. foo/[bar].md - */ - route: string - /** - * the actual path with params resolved (relative to src root), e.g. foo/1.md - */ - path: string - /** - * absolute fs path - */ - fullPath: string -} - export interface TransformPageContext { siteConfig: SiteConfig } @@ -240,10 +221,7 @@ export interface SiteConfig cacheDir: string tempDir: string pages: string[] - dynamicRoutes: { - routes: ResolvedRouteConfig[] - fileToModulesMap: Record> - } + dynamicRoutes: ResolvedRouteConfig[] rewrites: { map: Record inv: Record diff --git a/src/node/utils/moduleGraph.ts b/src/node/utils/moduleGraph.ts new file mode 100644 index 00000000..61e5eecf --- /dev/null +++ b/src/node/utils/moduleGraph.ts @@ -0,0 +1,115 @@ +export class ModuleGraph { + // Each module is tracked with its dependencies and dependents. + private nodes: Map< + string, + { dependencies: Set; dependents: Set } + > = new Map() + + /** + * Adds or updates a module by merging the provided dependencies + * with any existing ones. + * + * For every new dependency, the module is added to that dependency's + * 'dependents' set. + * + * @param module - The module to add or update. + * @param dependencies - Array of module names that the module depends on. + */ + add(module: string, dependencies: string[]): void { + // Ensure the module exists in the graph. + if (!this.nodes.has(module)) { + this.nodes.set(module, { + dependencies: new Set(), + dependents: new Set() + }) + } + const moduleNode = this.nodes.get(module)! + + // Merge the new dependencies with any that already exist. + for (const dep of dependencies) { + if (!moduleNode.dependencies.has(dep) && dep !== module) { + moduleNode.dependencies.add(dep) + // Ensure the dependency exists in the graph. + if (!this.nodes.has(dep)) { + this.nodes.set(dep, { + dependencies: new Set(), + dependents: new Set() + }) + } + // Add the module as a dependent of the dependency. + this.nodes.get(dep)!.dependents.add(module) + } + } + } + + /** + * Deletes a module and all modules that (transitively) depend on it. + * + * This method performs a depth-first search from the target module, + * collects all affected modules, and then removes them from the graph, + * cleaning up their references from other nodes. + * + * @param module - The module to delete. + * @returns A Set containing the deleted module and all modules that depend on it. + */ + delete(module: string): Set { + const deleted = new Set() + const stack: string[] = [module] + + // Traverse the reverse dependency graph (using dependents). + while (stack.length) { + const current = stack.pop()! + if (!deleted.has(current)) { + deleted.add(current) + const node = this.nodes.get(current) + if (node) { + for (const dependent of node.dependents) { + stack.push(dependent) + } + } + } + } + + // Remove deleted nodes from the graph. + // For each deleted node, also remove it from its dependencies' dependents. + for (const mod of deleted) { + const node = this.nodes.get(mod) + if (node) { + for (const dep of node.dependencies) { + const depNode = this.nodes.get(dep) + if (depNode) { + depNode.dependents.delete(mod) + } + } + } + this.nodes.delete(mod) + } + + return deleted + } + + /** + * Clears all modules from the graph. + */ + clear(): void { + this.nodes.clear() + } + + /** + * Creates a deep clone of the ModuleGraph instance. + * This is useful for preserving the state of the graph + * before making modifications. + * + * @returns A new ModuleGraph instance with the same state as the original. + */ + clone(): ModuleGraph { + const clone = new ModuleGraph() + for (const [module, { dependencies, dependents }] of this.nodes) { + clone.nodes.set(module, { + dependencies: new Set(dependencies), + dependents: new Set(dependents) + }) + } + return clone + } +} diff --git a/src/node/utils/task.ts b/src/node/utils/task.ts index 1d8a3322..8fd169bf 100644 --- a/src/node/utils/task.ts +++ b/src/node/utils/task.ts @@ -1,7 +1,7 @@ import ora from 'ora' export const okMark = '\x1b[32m✓\x1b[0m' -export const failMark = '\x1b[31m✖\x1b[0m' +export const failMark = '\x1b[31m✗\x1b[0m' export async function task(taskName: string, task: () => Promise) { const spinner = ora({ discardStdin: false }) From d4b01f6e2dc0f11fc8183e532a82dab7387a6137 Mon Sep 17 00:00:00 2001 From: Divyansh Singh <40380293+brc-dd@users.noreply.github.com> Date: Tue, 25 Feb 2025 01:40:12 +0530 Subject: [PATCH 22/53] chore: bump deps --- docs/package.json | 2 +- package.json | 24 +- pnpm-lock.yaml | 937 ++++++++++++++++++++++++---------------------- 3 files changed, 497 insertions(+), 466 deletions(-) diff --git a/docs/package.json b/docs/package.json index d3cc0755..d3c19d0c 100644 --- a/docs/package.json +++ b/docs/package.json @@ -15,6 +15,6 @@ "open-cli": "^8.0.0", "postcss-rtlcss": "^5.6.0", "vitepress": "workspace:*", - "vitepress-plugin-group-icons": "^1.3.5" + "vitepress-plugin-group-icons": "^1.3.6" } } diff --git a/package.json b/package.json index 4790cf2a..86ba1d2d 100644 --- a/package.json +++ b/package.json @@ -95,9 +95,9 @@ "*": "prettier --write --ignore-unknown" }, "dependencies": { - "@docsearch/css": "^3.8.3", - "@docsearch/js": "^3.8.3", - "@iconify-json/simple-icons": "^1.2.24", + "@docsearch/css": "^3.9.0", + "@docsearch/js": "^3.9.0", + "@iconify-json/simple-icons": "^1.2.26", "@shikijs/core": "^3.0.0", "@shikijs/transformers": "^3.0.0", "@shikijs/types": "^3.0.0", @@ -108,9 +108,9 @@ "@vueuse/integrations": "^12.7.0", "focus-trap": "^7.6.4", "mark.js": "8.11.1", - "minisearch": "^7.1.1", + "minisearch": "^7.1.2", "shiki": "^3.0.0", - "vite": "^6.1.0", + "vite": "^6.1.1", "vue": "^3.5.13" }, "devDependencies": { @@ -139,7 +139,7 @@ "@types/markdown-it-container": "^2.0.10", "@types/markdown-it-emoji": "^3.0.1", "@types/minimist": "^1.2.5", - "@types/node": "^22.13.4", + "@types/node": "^22.13.5", "@types/picomatch": "^3.0.2", "@types/postcss-prefix-selector": "^1.16.3", "@types/prompts": "^2.4.9", @@ -163,7 +163,7 @@ "markdown-it-emoji": "^3.0.0", "markdown-it-mathjax3": "^4.3.2", "minimist": "^1.2.8", - "nanoid": "^5.1.0", + "nanoid": "^5.1.2", "ora": "^8.2.0", "p-map": "^7.0.3", "path-to-regexp": "^6.3.0", @@ -173,20 +173,20 @@ "playwright-chromium": "^1.50.1", "polka": "^1.0.0-next.28", "postcss-prefix-selector": "^2.1.0", - "prettier": "^3.5.1", + "prettier": "^3.5.2", "prompts": "^2.4.2", "punycode": "^2.3.1", "rimraf": "^6.0.1", - "rollup": "^4.34.7", + "rollup": "^4.34.8", "rollup-plugin-dts": "^6.1.1", "rollup-plugin-esbuild": "^6.2.0", "semver": "^7.7.1", "simple-git-hooks": "^2.11.1", - "sirv": "^3.0.0", + "sirv": "^3.0.1", "sitemap": "^8.0.0", - "tinyglobby": "^0.2.10", + "tinyglobby": "^0.2.12", "typescript": "^5.7.3", - "vitest": "^3.0.5", + "vitest": "^3.0.7", "vue-tsc": "2.2.0", "wait-on": "^8.0.2" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 63fbd822..4554c3ea 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -20,14 +20,14 @@ importers: .: dependencies: '@docsearch/css': - specifier: ^3.8.3 - version: 3.8.3 + specifier: ^3.9.0 + version: 3.9.0 '@docsearch/js': - specifier: ^3.8.3 - version: 3.8.3(@algolia/client-search@5.19.0) + specifier: ^3.9.0 + version: 3.9.0(@algolia/client-search@5.20.3) '@iconify-json/simple-icons': - specifier: ^1.2.24 - version: 1.2.24 + specifier: ^1.2.26 + version: 1.2.26 '@shikijs/core': specifier: ^3.0.0 version: 3.0.0 @@ -39,7 +39,7 @@ importers: version: 3.0.0 '@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)) + version: 5.2.1(vite@6.1.1(@types/node@22.13.5)(jiti@1.21.7)(yaml@2.7.0))(vue@3.5.13(typescript@5.7.3)) '@vue/devtools-api': specifier: ^7.7.2 version: 7.7.2 @@ -59,14 +59,14 @@ importers: specifier: 8.11.1 version: 8.11.1 minisearch: - specifier: ^7.1.1 - version: 7.1.1 + specifier: ^7.1.2 + version: 7.1.2 shiki: specifier: ^3.0.0 version: 3.0.0 vite: - specifier: ^6.1.0 - version: 6.1.0(@types/node@22.13.4)(jiti@1.21.7)(yaml@2.7.0) + specifier: ^6.1.1 + version: 6.1.1(@types/node@22.13.5)(jiti@1.21.7)(yaml@2.7.0) vue: specifier: ^3.5.13 version: 3.5.13(typescript@5.7.3) @@ -103,19 +103,19 @@ importers: version: 1.0.0-next.28 '@rollup/plugin-alias': specifier: ^5.1.1 - version: 5.1.1(rollup@4.34.7) + version: 5.1.1(rollup@4.34.8) '@rollup/plugin-commonjs': specifier: ^28.0.2 - version: 28.0.2(rollup@4.34.7) + version: 28.0.2(rollup@4.34.8) '@rollup/plugin-json': specifier: ^6.1.0 - version: 6.1.0(rollup@4.34.7) + version: 6.1.0(rollup@4.34.8) '@rollup/plugin-node-resolve': specifier: ^16.0.0 - version: 16.0.0(rollup@4.34.7) + version: 16.0.0(rollup@4.34.8) '@rollup/plugin-replace': specifier: ^6.0.2 - version: 6.0.2(rollup@4.34.7) + version: 6.0.2(rollup@4.34.8) '@types/cross-spawn': specifier: ^6.0.6 version: 6.0.6 @@ -147,8 +147,8 @@ importers: specifier: ^1.2.5 version: 1.2.5 '@types/node': - specifier: ^22.13.4 - version: 22.13.4 + specifier: ^22.13.5 + version: 22.13.5 '@types/picomatch': specifier: ^3.0.2 version: 3.0.2 @@ -219,8 +219,8 @@ importers: specifier: ^1.2.8 version: 1.2.8 nanoid: - specifier: ^5.1.0 - version: 5.1.0 + specifier: ^5.1.2 + version: 5.1.2 ora: specifier: ^8.2.0 version: 8.2.0 @@ -247,10 +247,10 @@ importers: version: 1.0.0-next.28 postcss-prefix-selector: specifier: ^2.1.0 - version: 2.1.0(postcss@8.5.2) + version: 2.1.0(postcss@8.5.3) prettier: - specifier: ^3.5.1 - version: 3.5.1 + specifier: ^3.5.2 + version: 3.5.2 prompts: specifier: ^2.4.2 version: 2.4.2 @@ -261,14 +261,14 @@ importers: specifier: ^6.0.1 version: 6.0.1 rollup: - specifier: ^4.34.7 - version: 4.34.7 + specifier: ^4.34.8 + version: 4.34.8 rollup-plugin-dts: specifier: ^6.1.1 - version: 6.1.1(rollup@4.34.7)(typescript@5.7.3) + version: 6.1.1(rollup@4.34.8)(typescript@5.7.3) rollup-plugin-esbuild: specifier: ^6.2.0 - version: 6.2.0(esbuild@0.25.0)(rollup@4.34.7) + version: 6.2.0(esbuild@0.25.0)(rollup@4.34.8) semver: specifier: ^7.7.1 version: 7.7.1 @@ -276,20 +276,20 @@ importers: specifier: ^2.11.1 version: 2.11.1 sirv: - specifier: ^3.0.0 - version: 3.0.0 + specifier: ^3.0.1 + version: 3.0.1 sitemap: specifier: ^8.0.0 version: 8.0.0 tinyglobby: - specifier: ^0.2.10 - version: 0.2.10 + specifier: ^0.2.12 + version: 0.2.12 typescript: specifier: ^5.7.3 version: 5.7.3 vitest: - specifier: ^3.0.5 - version: 3.0.5(@types/debug@4.1.12)(@types/node@22.13.4)(jiti@1.21.7)(yaml@2.7.0) + specifier: ^3.0.7 + version: 3.0.7(@types/debug@4.1.12)(@types/node@22.13.5)(jiti@1.21.7)(yaml@2.7.0) vue-tsc: specifier: 2.2.0 version: 2.2.0(typescript@5.7.3) @@ -322,13 +322,13 @@ importers: version: 8.0.0 postcss-rtlcss: specifier: ^5.6.0 - version: 5.6.0(postcss@8.5.2) + version: 5.6.0(postcss@8.5.3) vitepress: specifier: workspace:* version: link:.. vitepress-plugin-group-icons: - specifier: ^1.3.5 - version: 1.3.5 + specifier: ^1.3.6 + version: 1.3.6 packages: @@ -352,56 +352,56 @@ packages: '@algolia/client-search': '>= 4.9.1 < 6' algoliasearch: '>= 4.9.1 < 6' - '@algolia/client-abtesting@5.19.0': - resolution: {integrity: sha512-dMHwy2+nBL0SnIsC1iHvkBao64h4z+roGelOz11cxrDBrAdASxLxmfVMop8gmodQ2yZSacX0Rzevtxa+9SqxCw==} + '@algolia/client-abtesting@5.20.3': + resolution: {integrity: sha512-wPOzHYSsW+H97JkBLmnlOdJSpbb9mIiuNPycUCV5DgzSkJFaI/OFxXfZXAh1gqxK+hf0miKue1C9bltjWljrNA==} engines: {node: '>= 14.0.0'} - '@algolia/client-analytics@5.19.0': - resolution: {integrity: sha512-CDW4RwnCHzU10upPJqS6N6YwDpDHno7w6/qXT9KPbPbt8szIIzCHrva4O9KIfx1OhdsHzfGSI5hMAiOOYl4DEQ==} + '@algolia/client-analytics@5.20.3': + resolution: {integrity: sha512-XE3iduH9lA7iTQacDGofBQyIyIgaX8qbTRRdj1bOCmfzc9b98CoiMwhNwdTifmmMewmN0EhVF3hP8KjKWwX7Yw==} engines: {node: '>= 14.0.0'} - '@algolia/client-common@5.19.0': - resolution: {integrity: sha512-2ERRbICHXvtj5kfFpY5r8qu9pJII/NAHsdgUXnUitQFwPdPL7wXiupcvZJC7DSntOnE8AE0lM7oDsPhrJfj5nQ==} + '@algolia/client-common@5.20.3': + resolution: {integrity: sha512-IYRd/A/R3BXeaQVT2805lZEdWo54v39Lqa7ABOxIYnUvX2vvOMW1AyzCuT0U7Q+uPdD4UW48zksUKRixShcWxA==} engines: {node: '>= 14.0.0'} - '@algolia/client-insights@5.19.0': - resolution: {integrity: sha512-xPOiGjo6I9mfjdJO7Y+p035aWePcbsItizIp+qVyfkfZiGgD+TbNxM12g7QhFAHIkx/mlYaocxPY/TmwPzTe+A==} + '@algolia/client-insights@5.20.3': + resolution: {integrity: sha512-QGc/bmDUBgzB71rDL6kihI2e1Mx6G6PxYO5Ks84iL3tDcIel1aFuxtRF14P8saGgdIe1B6I6QkpkeIddZ6vWQw==} engines: {node: '>= 14.0.0'} - '@algolia/client-personalization@5.19.0': - resolution: {integrity: sha512-B9eoce/fk8NLboGje+pMr72pw+PV7c5Z01On477heTZ7jkxoZ4X92dobeGuEQop61cJ93Gaevd1of4mBr4hu2A==} + '@algolia/client-personalization@5.20.3': + resolution: {integrity: sha512-zuM31VNPDJ1LBIwKbYGz/7+CSm+M8EhlljDamTg8AnDilnCpKjBebWZR5Tftv/FdWSro4tnYGOIz1AURQgZ+tQ==} engines: {node: '>= 14.0.0'} - '@algolia/client-query-suggestions@5.19.0': - resolution: {integrity: sha512-6fcP8d4S8XRDtVogrDvmSM6g5g6DndLc0pEm1GCKe9/ZkAzCmM3ZmW1wFYYPxdjMeifWy1vVEDMJK7sbE4W7MA==} + '@algolia/client-query-suggestions@5.20.3': + resolution: {integrity: sha512-Nn872PuOI8qzi1bxMMhJ0t2AzVBqN01jbymBQOkypvZHrrjZPso3iTpuuLLo9gi3yc/08vaaWTAwJfPhxPwJUw==} engines: {node: '>= 14.0.0'} - '@algolia/client-search@5.19.0': - resolution: {integrity: sha512-Ctg3xXD/1VtcwmkulR5+cKGOMj4r0wC49Y/KZdGQcqpydKn+e86F6l3tb3utLJQVq4lpEJud6kdRykFgcNsp8Q==} + '@algolia/client-search@5.20.3': + resolution: {integrity: sha512-9+Fm1ahV8/2goSIPIqZnVitV5yHW5E5xTdKy33xnqGd45A9yVv5tTkudWzEXsbfBB47j9Xb3uYPZjAvV5RHbKA==} engines: {node: '>= 14.0.0'} - '@algolia/ingestion@1.19.0': - resolution: {integrity: sha512-LO7w1MDV+ZLESwfPmXkp+KLeYeFrYEgtbCZG6buWjddhYraPQ9MuQWLhLLiaMlKxZ/sZvFTcZYuyI6Jx4WBhcg==} + '@algolia/ingestion@1.20.3': + resolution: {integrity: sha512-5GHNTiZ3saLjTNyr6WkP5hzDg2eFFAYWomvPcm9eHWskjzXt8R0IOiW9kkTS6I6hXBwN5H9Zna5mZDSqqJdg+g==} engines: {node: '>= 14.0.0'} - '@algolia/monitoring@1.19.0': - resolution: {integrity: sha512-Mg4uoS0aIKeTpu6iv6O0Hj81s8UHagi5TLm9k2mLIib4vmMtX7WgIAHAcFIaqIZp5D6s5EVy1BaDOoZ7buuJHA==} + '@algolia/monitoring@1.20.3': + resolution: {integrity: sha512-KUWQbTPoRjP37ivXSQ1+lWMfaifCCMzTnEcEnXwAmherS5Tp7us6BAqQDMGOD4E7xyaS2I8pto6WlOzxH+CxmA==} engines: {node: '>= 14.0.0'} - '@algolia/recommend@5.19.0': - resolution: {integrity: sha512-PbgrMTbUPlmwfJsxjFhal4XqZO2kpBNRjemLVTkUiti4w/+kzcYO4Hg5zaBgVqPwvFDNQ8JS4SS3TBBem88u+g==} + '@algolia/recommend@5.20.3': + resolution: {integrity: sha512-oo/gG77xTTTclkrdFem0Kmx5+iSRFiwuRRdxZETDjwzCI7svutdbwBgV/Vy4D4QpYaX4nhY/P43k84uEowCE4Q==} engines: {node: '>= 14.0.0'} - '@algolia/requester-browser-xhr@5.19.0': - resolution: {integrity: sha512-GfnhnQBT23mW/VMNs7m1qyEyZzhZz093aY2x8p0era96MMyNv8+FxGek5pjVX0b57tmSCZPf4EqNCpkGcGsmbw==} + '@algolia/requester-browser-xhr@5.20.3': + resolution: {integrity: sha512-BkkW7otbiI/Er1AiEPZs1h7lxbtSO9p09jFhv3/iT8/0Yz0CY79VJ9iq+Wv1+dq/l0OxnMpBy8mozrieGA3mXQ==} engines: {node: '>= 14.0.0'} - '@algolia/requester-fetch@5.19.0': - resolution: {integrity: sha512-oyTt8ZJ4T4fYvW5avAnuEc6Laedcme9fAFryMD9ndUTIUe/P0kn3BuGcCLFjN3FDmdrETHSFkgPPf1hGy3sLCw==} + '@algolia/requester-fetch@5.20.3': + resolution: {integrity: sha512-eAVlXz7UNzTsA1EDr+p0nlIH7WFxo7k3NMxYe8p38DH8YVWLgm2MgOVFUMNg9HCi6ZNOi/A2w/id2ZZ4sKgUOw==} engines: {node: '>= 14.0.0'} - '@algolia/requester-node-http@5.19.0': - resolution: {integrity: sha512-p6t8ue0XZNjcRiqNkb5QAM0qQRAKsCiebZ6n9JjWA+p8fWf8BvnhO55y2fO28g3GW0Imj7PrAuyBuxq8aDVQwQ==} + '@algolia/requester-node-http@5.20.3': + resolution: {integrity: sha512-FqR3pQPfHfQyX1wgcdK6iyqu86yP76MZd4Pzj1y/YLMj9rRmRCY0E0AffKr//nrOFEwv6uY8BQY4fd9/6b0ZCg==} engines: {node: '>= 14.0.0'} '@antfu/install-pkg@1.0.0': @@ -452,18 +452,18 @@ packages: conventional-commits-parser: optional: true - '@docsearch/css@3.8.3': - resolution: {integrity: sha512-1nELpMV40JDLJ6rpVVFX48R1jsBFIQ6RnEQDsLFGmzOjPWTOMlZqUcXcvRx8VmYV/TqnS1l784Ofz+ZEb+wEOQ==} + '@docsearch/css@3.9.0': + resolution: {integrity: sha512-cQbnVbq0rrBwNAKegIac/t6a8nWoUAn8frnkLFW6YARaRmAQr5/Eoe6Ln2fqkUCZ40KpdrKbpSAmgrkviOxuWA==} - '@docsearch/js@3.8.3': - resolution: {integrity: sha512-CQsX1zeoPJIWxN3IGoDSWOqzRc0JsOE9Bclegf9llwjYN2rzzJF93zagGcT3uI3tF31oCqTuUOVGW/mVFb7arw==} + '@docsearch/js@3.9.0': + resolution: {integrity: sha512-4bKHcye6EkLgRE8ze0vcdshmEqxeiJM77M0JXjef7lrYZfSlMunrDOCqyLjiZyo1+c0BhUqA2QpFartIjuHIjw==} - '@docsearch/react@3.8.3': - resolution: {integrity: sha512-6UNrg88K7lJWmuS6zFPL/xgL+n326qXqZ7Ybyy4E8P/6Rcblk3GE8RXxeol4Pd5pFpKMhOhBhzABKKwHtbJCIg==} + '@docsearch/react@3.9.0': + resolution: {integrity: sha512-mb5FOZYZIkRQ6s/NWnM98k879vu5pscWqTLubLFBO87igYYT4VzVazh4h5o/zCvTIZgEt3PvsCOMOswOUo9yHQ==} peerDependencies: - '@types/react': '>= 16.8.0 < 19.0.0' - react: '>= 16.8.0 < 19.0.0' - react-dom: '>= 16.8.0 < 19.0.0' + '@types/react': '>= 16.8.0 < 20.0.0' + react: '>= 16.8.0 < 20.0.0' + react-dom: '>= 16.8.0 < 20.0.0' search-insights: '>= 1 < 3' peerDependenciesMeta: '@types/react': @@ -788,11 +788,11 @@ packages: '@iconify-json/logos@1.2.4': resolution: {integrity: sha512-XC4If5D/hbaZvUkTV8iaZuGlQCyG6CNOlaAaJaGa13V5QMYwYjgtKk3vPP8wz3wtTVNVEVk3LRx1fOJz+YnSMw==} - '@iconify-json/simple-icons@1.2.24': - resolution: {integrity: sha512-06ZWXZx3PHCE+02zn+iIGOKKNgE3kyPd0Yh7IUEIa0bCYI6UmGlsYYghRx8As9TnTNYMCEiy5V0zI4Jb6EY6XA==} + '@iconify-json/simple-icons@1.2.26': + resolution: {integrity: sha512-NvqRuE+5h/tp4boPlnvfs0alD0CvnRE7oeG9Li5NGmZRx2/rhwlNjW/vEVTyhZcR9zqvRPAVh2GXR+PTEpzV+A==} - '@iconify-json/vscode-icons@1.2.14': - resolution: {integrity: sha512-DLFEWtKpqpzzWbn8DWQoBb2j/KK8KASLHPKQ7763/F4SJelMZg2xVUPUEWrceLNcTu8OVtKQcd/+3Ysa3WcAsg==} + '@iconify-json/vscode-icons@1.2.16': + resolution: {integrity: sha512-hstc2yVq2UJ6v6FrgjftzXRvphGZBsKxvSeXoFLP1Hgx89TPZKrGE5SV6vqsoeIlLYaQ7OZbXmAoVGroTfGmVQ==} '@iconify/types@2.0.0': resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==} @@ -915,98 +915,98 @@ packages: rollup: optional: true - '@rollup/rollup-android-arm-eabi@4.34.7': - resolution: {integrity: sha512-l6CtzHYo8D2TQ3J7qJNpp3Q1Iye56ssIAtqbM2H8axxCEEwvN7o8Ze9PuIapbxFL3OHrJU2JBX6FIIVnP/rYyw==} + '@rollup/rollup-android-arm-eabi@4.34.8': + resolution: {integrity: sha512-q217OSE8DTp8AFHuNHXo0Y86e1wtlfVrXiAlwkIvGRQv9zbc6mE3sjIVfwI8sYUyNxwOg0j/Vm1RKM04JcWLJw==} cpu: [arm] os: [android] - '@rollup/rollup-android-arm64@4.34.7': - resolution: {integrity: sha512-KvyJpFUueUnSp53zhAa293QBYqwm94TgYTIfXyOTtidhm5V0LbLCJQRGkQClYiX3FXDQGSvPxOTD/6rPStMMDg==} + '@rollup/rollup-android-arm64@4.34.8': + resolution: {integrity: sha512-Gigjz7mNWaOL9wCggvoK3jEIUUbGul656opstjaUSGC3eT0BM7PofdAJaBfPFWWkXNVAXbaQtC99OCg4sJv70Q==} cpu: [arm64] os: [android] - '@rollup/rollup-darwin-arm64@4.34.7': - resolution: {integrity: sha512-jq87CjmgL9YIKvs8ybtIC98s/M3HdbqXhllcy9EdLV0yMg1DpxES2gr65nNy7ObNo/vZ/MrOTxt0bE5LinL6mA==} + '@rollup/rollup-darwin-arm64@4.34.8': + resolution: {integrity: sha512-02rVdZ5tgdUNRxIUrFdcMBZQoaPMrxtwSb+/hOfBdqkatYHR3lZ2A2EGyHq2sGOd0Owk80oV3snlDASC24He3Q==} cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-x64@4.34.7': - resolution: {integrity: sha512-rSI/m8OxBjsdnMMg0WEetu/w+LhLAcCDEiL66lmMX4R3oaml3eXz3Dxfvrxs1FbzPbJMaItQiksyMfv1hoIxnA==} + '@rollup/rollup-darwin-x64@4.34.8': + resolution: {integrity: sha512-qIP/elwR/tq/dYRx3lgwK31jkZvMiD6qUtOycLhTzCvrjbZ3LjQnEM9rNhSGpbLXVJYQ3rq39A6Re0h9tU2ynw==} cpu: [x64] os: [darwin] - '@rollup/rollup-freebsd-arm64@4.34.7': - resolution: {integrity: sha512-oIoJRy3ZrdsXpFuWDtzsOOa/E/RbRWXVokpVrNnkS7npz8GEG++E1gYbzhYxhxHbO2om1T26BZjVmdIoyN2WtA==} + '@rollup/rollup-freebsd-arm64@4.34.8': + resolution: {integrity: sha512-IQNVXL9iY6NniYbTaOKdrlVP3XIqazBgJOVkddzJlqnCpRi/yAeSOa8PLcECFSQochzqApIOE1GHNu3pCz+BDA==} cpu: [arm64] os: [freebsd] - '@rollup/rollup-freebsd-x64@4.34.7': - resolution: {integrity: sha512-X++QSLm4NZfZ3VXGVwyHdRf58IBbCu9ammgJxuWZYLX0du6kZvdNqPwrjvDfwmi6wFdvfZ/s6K7ia0E5kI7m8Q==} + '@rollup/rollup-freebsd-x64@4.34.8': + resolution: {integrity: sha512-TYXcHghgnCqYFiE3FT5QwXtOZqDj5GmaFNTNt3jNC+vh22dc/ukG2cG+pi75QO4kACohZzidsq7yKTKwq/Jq7Q==} cpu: [x64] os: [freebsd] - '@rollup/rollup-linux-arm-gnueabihf@4.34.7': - resolution: {integrity: sha512-Z0TzhrsNqukTz3ISzrvyshQpFnFRfLunYiXxlCRvcrb3nvC5rVKI+ZXPFG/Aa4jhQa1gHgH3A0exHaRRN4VmdQ==} + '@rollup/rollup-linux-arm-gnueabihf@4.34.8': + resolution: {integrity: sha512-A4iphFGNkWRd+5m3VIGuqHnG3MVnqKe7Al57u9mwgbyZ2/xF9Jio72MaY7xxh+Y87VAHmGQr73qoKL9HPbXj1g==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm-musleabihf@4.34.7': - resolution: {integrity: sha512-nkznpyXekFAbvFBKBy4nNppSgneB1wwG1yx/hujN3wRnhnkrYVugMTCBXED4+Ni6thoWfQuHNYbFjgGH0MBXtw==} + '@rollup/rollup-linux-arm-musleabihf@4.34.8': + resolution: {integrity: sha512-S0lqKLfTm5u+QTxlFiAnb2J/2dgQqRy/XvziPtDd1rKZFXHTyYLoVL58M/XFwDI01AQCDIevGLbQrMAtdyanpA==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm64-gnu@4.34.7': - resolution: {integrity: sha512-KCjlUkcKs6PjOcxolqrXglBDcfCuUCTVlX5BgzgoJHw+1rWH1MCkETLkLe5iLLS9dP5gKC7mp3y6x8c1oGBUtA==} + '@rollup/rollup-linux-arm64-gnu@4.34.8': + resolution: {integrity: sha512-jpz9YOuPiSkL4G4pqKrus0pn9aYwpImGkosRKwNi+sJSkz+WU3anZe6hi73StLOQdfXYXC7hUfsQlTnjMd3s1A==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-arm64-musl@4.34.7': - resolution: {integrity: sha512-uFLJFz6+utmpbR313TTx+NpPuAXbPz4BhTQzgaP0tozlLnGnQ6rCo6tLwaSa6b7l6gRErjLicXQ1iPiXzYotjw==} + '@rollup/rollup-linux-arm64-musl@4.34.8': + resolution: {integrity: sha512-KdSfaROOUJXgTVxJNAZ3KwkRc5nggDk+06P6lgi1HLv1hskgvxHUKZ4xtwHkVYJ1Rep4GNo+uEfycCRRxht7+Q==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-loongarch64-gnu@4.34.7': - resolution: {integrity: sha512-ws8pc68UcJJqCpneDFepnwlsMUFoWvPbWXT/XUrJ7rWUL9vLoIN3GAasgG+nCvq8xrE3pIrd+qLX/jotcLy0Qw==} + '@rollup/rollup-linux-loongarch64-gnu@4.34.8': + resolution: {integrity: sha512-NyF4gcxwkMFRjgXBM6g2lkT58OWztZvw5KkV2K0qqSnUEqCVcqdh2jN4gQrTn/YUpAcNKyFHfoOZEer9nwo6uQ==} cpu: [loong64] os: [linux] - '@rollup/rollup-linux-powerpc64le-gnu@4.34.7': - resolution: {integrity: sha512-vrDk9JDa/BFkxcS2PbWpr0C/LiiSLxFbNOBgfbW6P8TBe9PPHx9Wqbvx2xgNi1TOAyQHQJ7RZFqBiEohm79r0w==} + '@rollup/rollup-linux-powerpc64le-gnu@4.34.8': + resolution: {integrity: sha512-LMJc999GkhGvktHU85zNTDImZVUCJ1z/MbAJTnviiWmmjyckP5aQsHtcujMjpNdMZPT2rQEDBlJfubhs3jsMfw==} cpu: [ppc64] os: [linux] - '@rollup/rollup-linux-riscv64-gnu@4.34.7': - resolution: {integrity: sha512-rB+ejFyjtmSo+g/a4eovDD1lHWHVqizN8P0Hm0RElkINpS0XOdpaXloqM4FBkF9ZWEzg6bezymbpLmeMldfLTw==} + '@rollup/rollup-linux-riscv64-gnu@4.34.8': + resolution: {integrity: sha512-xAQCAHPj8nJq1PI3z8CIZzXuXCstquz7cIOL73HHdXiRcKk8Ywwqtx2wrIy23EcTn4aZ2fLJNBB8d0tQENPCmw==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-s390x-gnu@4.34.7': - resolution: {integrity: sha512-nNXNjo4As6dNqRn7OrsnHzwTgtypfRA3u3AKr0B3sOOo+HkedIbn8ZtFnB+4XyKJojIfqDKmbIzO1QydQ8c+Pw==} + '@rollup/rollup-linux-s390x-gnu@4.34.8': + resolution: {integrity: sha512-DdePVk1NDEuc3fOe3dPPTb+rjMtuFw89gw6gVWxQFAuEqqSdDKnrwzZHrUYdac7A7dXl9Q2Vflxpme15gUWQFA==} cpu: [s390x] os: [linux] - '@rollup/rollup-linux-x64-gnu@4.34.7': - resolution: {integrity: sha512-9kPVf9ahnpOMSGlCxXGv980wXD0zRR3wyk8+33/MXQIpQEOpaNe7dEHm5LMfyRZRNt9lMEQuH0jUKj15MkM7QA==} + '@rollup/rollup-linux-x64-gnu@4.34.8': + resolution: {integrity: sha512-8y7ED8gjxITUltTUEJLQdgpbPh1sUQ0kMTmufRF/Ns5tI9TNMNlhWtmPKKHCU0SilX+3MJkZ0zERYYGIVBYHIA==} cpu: [x64] os: [linux] - '@rollup/rollup-linux-x64-musl@4.34.7': - resolution: {integrity: sha512-7wJPXRWTTPtTFDFezA8sle/1sdgxDjuMoRXEKtx97ViRxGGkVQYovem+Q8Pr/2HxiHp74SSRG+o6R0Yq0shPwQ==} + '@rollup/rollup-linux-x64-musl@4.34.8': + resolution: {integrity: sha512-SCXcP0ZpGFIe7Ge+McxY5zKxiEI5ra+GT3QRxL0pMMtxPfpyLAKleZODi1zdRHkz5/BhueUrYtYVgubqe9JBNQ==} cpu: [x64] os: [linux] - '@rollup/rollup-win32-arm64-msvc@4.34.7': - resolution: {integrity: sha512-MN7aaBC7mAjsiMEZcsJvwNsQVNZShgES/9SzWp1HC9Yjqb5OpexYnRjF7RmE4itbeesHMYYQiAtUAQaSKs2Rfw==} + '@rollup/rollup-win32-arm64-msvc@4.34.8': + resolution: {integrity: sha512-YHYsgzZgFJzTRbth4h7Or0m5O74Yda+hLin0irAIobkLQFRQd1qWmnoVfwmKm9TXIZVAD0nZ+GEb2ICicLyCnQ==} cpu: [arm64] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.34.7': - resolution: {integrity: sha512-aeawEKYswsFu1LhDM9RIgToobquzdtSc4jSVqHV8uApz4FVvhFl/mKh92wc8WpFc6aYCothV/03UjY6y7yLgbg==} + '@rollup/rollup-win32-ia32-msvc@4.34.8': + resolution: {integrity: sha512-r3NRQrXkHr4uWy5TOjTpTYojR9XmF0j/RYgKCef+Ag46FWUTltm5ziticv8LdNsDMehjJ543x/+TJAek/xBA2w==} cpu: [ia32] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.34.7': - resolution: {integrity: sha512-4ZedScpxxIrVO7otcZ8kCX1mZArtH2Wfj3uFCxRJ9NO80gg1XV0U/b2f/MKaGwj2X3QopHfoWiDQ917FRpwY3w==} + '@rollup/rollup-win32-x64-msvc@4.34.8': + resolution: {integrity: sha512-U0FaE5O1BCpZSeE6gBl3c5ObhePQSfk9vDRToMmTkbhCOgW4jqvtS5LGyQ76L1fH8sM0keRp4uDTsbjiUyjk0g==} cpu: [x64] os: [win32] @@ -1080,8 +1080,8 @@ packages: '@types/lodash.template@4.5.3': resolution: {integrity: sha512-Mo0UYKLu1oXgkV9TVoXZLlXXjyIXlW7ZQRxi/4gQJmzJr63dmicE8gG0OkPjYTKBrBic852q0JzqrtNUWLBIyA==} - '@types/lodash@4.17.14': - resolution: {integrity: sha512-jsxagdikDiDBeIRaPYtArcT8my4tN1og7MtMRquFT3XNA6axxyHDRUemqDz/taRDdOUn0GnGHRCuff4q48sW9A==} + '@types/lodash@4.17.15': + resolution: {integrity: sha512-w/P33JFeySuhN6JLkysYUK2gEmy9kHHFN7E8ro0tkfmlDOgxBDzWEZ/J8cWA+fHqFevpswDTFZnDx+R9lbL6xw==} '@types/mark.js@8.11.12': resolution: {integrity: sha512-244ZnaIBpz4c6xutliAnYVZp6xJlmC569jZqnR3ElO1Y01ooYASSVQEqpd2x0A2UfrgVMs5V9/9tUAdZaDMytQ==} @@ -1113,8 +1113,8 @@ packages: '@types/node@17.0.45': resolution: {integrity: sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==} - '@types/node@22.13.4': - resolution: {integrity: sha512-ywP2X0DYtX3y08eFVx5fNIw7/uIv8hYUKgXoK8oayJlLnKcRfEYCxWMVE1XagUdVtCJlZT1AU4LXEABW+L1Peg==} + '@types/node@22.13.5': + resolution: {integrity: sha512-+lTU0PxZXn0Dr1NBtC7Y8cR21AJr87dLLU953CWA6pMxxv/UDc7jYAY90upcrie1nRcD6XNG5HOYEDtgW5TxAg==} '@types/normalize-package-data@2.4.4': resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} @@ -1146,8 +1146,8 @@ packages: '@types/web-bluetooth@0.0.20': resolution: {integrity: sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==} - '@ungap/structured-clone@1.2.1': - resolution: {integrity: sha512-fEzPV3hSkSMltkw152tJKNARhOupqbH96MZWyRjNaYZOMIzbrTeQDG+MTc6Mr2pgzFQzFxAfmhGDNP5QK++2ZA==} + '@ungap/structured-clone@1.3.0': + resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} '@vitejs/plugin-vue@5.2.1': resolution: {integrity: sha512-cxh314tzaWwOLqVes2gnnCtvBDcM1UMdn+iFR+UjAn411dPT3tOmqrJjbMd7koZpMAmBM/GqeV4n9ge7JSiJJQ==} @@ -1156,11 +1156,11 @@ packages: vite: ^5.0.0 || ^6.0.0 vue: ^3.2.25 - '@vitest/expect@3.0.5': - resolution: {integrity: sha512-nNIOqupgZ4v5jWuQx2DSlHLEs7Q4Oh/7AYwNyE+k0UQzG7tSmjPXShUikn1mpNGzYEN2jJbTvLejwShMitovBA==} + '@vitest/expect@3.0.7': + resolution: {integrity: sha512-QP25f+YJhzPfHrHfYHtvRn+uvkCFCqFtW9CktfBxmB+25QqWsx7VB2As6f4GmwllHLDhXNHvqedwhvMmSnNmjw==} - '@vitest/mocker@3.0.5': - resolution: {integrity: sha512-CLPNBFBIE7x6aEGbIjaQAX03ZZlBMaWwAjBdMkIf/cAn6xzLTiM3zYqO/WAbieEjsAZir6tO71mzeHZoodThvw==} + '@vitest/mocker@3.0.7': + resolution: {integrity: sha512-qui+3BLz9Eonx4EAuR/i+QlCX6AUZ35taDQgwGkK/Tw6/WgwodSrjN1X2xf69IA/643ZX5zNKIn2svvtZDrs4w==} peerDependencies: msw: ^2.4.9 vite: ^5.0.0 || ^6.0.0 @@ -1170,20 +1170,20 @@ packages: vite: optional: true - '@vitest/pretty-format@3.0.5': - resolution: {integrity: sha512-CjUtdmpOcm4RVtB+up8r2vVDLR16Mgm/bYdkGFe3Yj/scRfCpbSi2W/BDSDcFK7ohw8UXvjMbOp9H4fByd/cOA==} + '@vitest/pretty-format@3.0.7': + resolution: {integrity: sha512-CiRY0BViD/V8uwuEzz9Yapyao+M9M008/9oMOSQydwbwb+CMokEq3XVaF3XK/VWaOK0Jm9z7ENhybg70Gtxsmg==} - '@vitest/runner@3.0.5': - resolution: {integrity: sha512-BAiZFityFexZQi2yN4OX3OkJC6scwRo8EhRB0Z5HIGGgd2q+Nq29LgHU/+ovCtd0fOfXj5ZI6pwdlUmC5bpi8A==} + '@vitest/runner@3.0.7': + resolution: {integrity: sha512-WeEl38Z0S2ZcuRTeyYqaZtm4e26tq6ZFqh5y8YD9YxfWuu0OFiGFUbnxNynwLjNRHPsXyee2M9tV7YxOTPZl2g==} - '@vitest/snapshot@3.0.5': - resolution: {integrity: sha512-GJPZYcd7v8QNUJ7vRvLDmRwl+a1fGg4T/54lZXe+UOGy47F9yUfE18hRCtXL5aHN/AONu29NGzIXSVFh9K0feA==} + '@vitest/snapshot@3.0.7': + resolution: {integrity: sha512-eqTUryJWQN0Rtf5yqCGTQWsCFOQe4eNz5Twsu21xYEcnFJtMU5XvmG0vgebhdLlrHQTSq5p8vWHJIeJQV8ovsA==} - '@vitest/spy@3.0.5': - resolution: {integrity: sha512-5fOzHj0WbUNqPK6blI/8VzZdkBlQLnT25knX0r4dbZI9qoZDf3qAdjoMmDcLG5A83W6oUUFJgUd0EYBc2P5xqg==} + '@vitest/spy@3.0.7': + resolution: {integrity: sha512-4T4WcsibB0B6hrKdAZTM37ekuyFZt2cGbEGd2+L0P8ov15J1/HUsUaqkXEQPNAWr4BtPPe1gI+FYfMHhEKfR8w==} - '@vitest/utils@3.0.5': - resolution: {integrity: sha512-N9AX0NUoUtVwKwy21JtwzaqR5L5R5A99GAbrHfCCXK1lp593i/3AZAXhSP43wRQuxYsflrdzEfXZFo1reR1Nkg==} + '@vitest/utils@3.0.7': + resolution: {integrity: sha512-xePVpCRfooFX3rANQjwoditoXgWb1MaFbzmGuPP59MK6i13mrnDw/yEIyJudLeW6/38mCNcwCiJIGmpDPibAIg==} '@volar/language-core@2.4.11': resolution: {integrity: sha512-lN2C1+ByfW9/JRPpqScuZt/4OrUUse57GLI6TbLgTIqBVemdl1wNcZ1qYGEo2+Gw8coYLgCy7SuKqn6IrQcQgg==} @@ -1293,6 +1293,10 @@ packages: '@vueuse/shared@12.7.0': resolution: {integrity: sha512-coLlUw2HHKsm7rPN6WqHJQr18WymN4wkA/3ThFaJ4v4gWGWAQQGK+MJxLuJTBs4mojQiazlVWAKNJNpUWGRkNw==} + abort-controller@3.0.0: + resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} + engines: {node: '>=6.5'} + acorn@8.14.0: resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==} engines: {node: '>=0.4.0'} @@ -1301,8 +1305,8 @@ packages: add-stream@1.0.0: resolution: {integrity: sha512-qQLMr+8o0WC4FZGQTcJiKBVC59JylcPSrTtk6usvmIDFUOCKegapy1VHQwRbFMOFyb/inzUVqHs+eMYKDM1YeQ==} - algoliasearch@5.19.0: - resolution: {integrity: sha512-zrLtGhC63z3sVLDDKGW+SlCRN9eJHFTgdEmoAOpsVh6wgGL1GgTTDou7tpCBjevzgIvi3AIyDAQO3Xjbg5eqZg==} + algoliasearch@5.20.3: + resolution: {integrity: sha512-iNC6BGvipaalFfDfDnXUje8GUlW5asj0cTMsZJwO/0rhsyLx1L7GZFAY8wW+eQ6AM4Yge2p5GSE5hrBlfSD90Q==} engines: {node: '>= 14.0.0'} alien-signals@0.4.14: @@ -1357,6 +1361,9 @@ packages: balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + base64-js@1.5.1: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + birpc@0.2.19: resolution: {integrity: sha512-5WeXXAvTmitV1RqJFppT5QtUiz2p1mRSYU000Jkft5ZUCLJIk4uQriYNO50HknxKwM6jd8utNc66K1qGIwwWBQ==} @@ -1370,6 +1377,9 @@ packages: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} engines: {node: '>=8'} + buffer@6.0.3: + resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} + bundle-name@4.1.0: resolution: {integrity: sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==} engines: {node: '>=18'} @@ -1513,8 +1523,8 @@ packages: resolution: {integrity: sha512-SetDSntXLk8Jh1NOAl1Gu5uLiCNSYenB5tm0YVeZKePRIgDW9lQImromTwLa3c/Gae298tsgOM+/CYT9XAl0NA==} engines: {node: '>=18'} - conventional-changelog-writer@8.0.0: - resolution: {integrity: sha512-TQcoYGRatlAnT2qEWDON/XSfnVG38JzA7E0wcGScu7RElQBkg9WWgZd1peCWFcWDh1xfb2CfsrcvOn1bbSzztA==} + conventional-changelog-writer@8.0.1: + resolution: {integrity: sha512-hlqcy3xHred2gyYg/zXSMXraY2mjAYYo0msUCpK+BGyaVJMFCKWVXPIHiaacGO2GGp13kvHWXFhYmxT4QQqW3Q==} engines: {node: '>=18'} hasBin: true @@ -1526,8 +1536,8 @@ packages: resolution: {integrity: sha512-tQMagCOC59EVgNZcC5zl7XqO30Wki9i9J3acbUvkaosCT6JX3EeFwJD7Qqp4MCikRnzS18WXV3BLIQ66ytu6+Q==} engines: {node: '>=18'} - conventional-commits-parser@6.0.0: - resolution: {integrity: sha512-TbsINLp48XeMXR8EvGjTnKGsZqBemisPoyWESlpRyR8lif0lcwzqz+NMtYSj1ooF/WYjSuu7wX0CtdeeMEQAmA==} + conventional-commits-parser@6.1.0: + resolution: {integrity: sha512-5nxDo7TwKB5InYBl4ZC//1g9GRwB/F3TXOGR9hgUjMGfvSP4Vu5NkpNro2+1+TIEy1vwxApl5ircECr2ri5JIw==} engines: {node: '>=18'} hasBin: true @@ -1699,9 +1709,17 @@ packages: estree-walker@3.0.3: resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} + event-target-shim@5.0.1: + resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==} + engines: {node: '>=6'} + eventemitter3@5.0.1: resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} + events@3.3.0: + resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} + engines: {node: '>=0.8.x'} + execa@8.0.1: resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} engines: {node: '>=16.17'} @@ -1761,8 +1779,8 @@ packages: debug: optional: true - foreground-child@3.3.0: - resolution: {integrity: sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==} + foreground-child@3.3.1: + resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==} engines: {node: '>=14'} form-data@4.0.2: @@ -1785,8 +1803,8 @@ packages: resolution: {integrity: sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ==} engines: {node: '>=18'} - get-intrinsic@1.2.7: - resolution: {integrity: sha512-VW6Pxhsrk0KAOqs3WEd0klDiF/+V7gQOpAvY1jVU/LHmaD/kQO4523aiJuikX/QAKYiW6x8Jh+RJej1almdtCA==} + get-intrinsic@1.3.0: + resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} engines: {node: '>= 0.4'} get-port@7.1.0: @@ -1863,8 +1881,8 @@ packages: resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} engines: {node: '>= 0.4'} - hast-util-to-html@9.0.4: - resolution: {integrity: sha512-wxQzXtdbhiwGAUKrnQJXlOPmHnEehzphwkK7aluUPQ+lEc1xefC8pblMgpp2w5ldBTEfveRIrADcrhGIWrlTDA==} + hast-util-to-html@9.0.5: + resolution: {integrity: sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==} hast-util-whitespace@3.0.0: resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==} @@ -1904,9 +1922,6 @@ packages: resolution: {integrity: sha512-MWDKS3AS1bGCHLBA2VLImJz42f7bJh8wQsTGCzI3j519/CASStoDONUBVz2I/VID0MpiX3SGSnbOD2xUalbE5g==} engines: {node: '>=18'} - inherits@2.0.4: - resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - is-core-module@2.16.1: resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} engines: {node: '>= 0.4'} @@ -1994,8 +2009,8 @@ packages: isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - jackspeak@4.0.3: - resolution: {integrity: sha512-oSwM7q8PTHQWuZAlp995iPpPJ4Vkl7qT0ZRD+9duL9j2oBy6KcTfyxc8mEuHJYC+z/kbps80aJLkaNzTOrf/kw==} + jackspeak@4.1.0: + resolution: {integrity: sha512-9DDdhb5j6cpeitCbvLO7n7J4IxnbM6hoF6O1g4HQ5TfhvvKN8ywDM7668ZhMHRqVmxqhps/F6syWK2KcPxYlkw==} engines: {node: 20 || >=22} jiti@1.21.7: @@ -2056,6 +2071,7 @@ packages: lodash.template@4.5.0: resolution: {integrity: sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A==} + deprecated: This package is deprecated. Use https://socket.dev/npm/package/eta instead. lodash.templatesettings@4.2.0: resolution: {integrity: sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ==} @@ -2204,8 +2220,8 @@ packages: resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} engines: {node: '>=16 || 14 >=14.17'} - minisearch@7.1.1: - resolution: {integrity: sha512-b3YZEYCEH4EdCAtYP7OlDyx7FdPwNzuNwLQ34SfJpM9dlbBZzeXndGavTrC+VCiRWomL21SWfMc6SCKO/U2ZNw==} + minisearch@7.1.2: + resolution: {integrity: sha512-R1Pd9eF+MD5JYDDSPAp/q1ougKglm14uEkPMvQ/05RGmx6G9wvmLTrTI/Q5iPNJLYqNdsDQ7qTGIcNWR+FrHmA==} mitt@3.0.1: resolution: {integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==} @@ -2216,8 +2232,8 @@ packages: mlly@1.7.4: resolution: {integrity: sha512-qmdSIPC4bDJXgZTCR7XosJiNKySV7O215tsPtDN9iEO/7q/76b/ijtgRu/+epFXSJhijtTCCGp3DWS549P3xKw==} - mrmime@2.0.0: - resolution: {integrity: sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==} + mrmime@2.0.1: + resolution: {integrity: sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==} engines: {node: '>=10'} ms@2.1.3: @@ -2231,8 +2247,8 @@ packages: engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true - nanoid@5.1.0: - resolution: {integrity: sha512-zDAl/llz8Ue/EblwSYwdxGBYfj46IM1dhjVi8dyp9LQffoIGxJEAHj2oeZ4uNcgycSRcQ83CnfcZqEJzVDLcDw==} + nanoid@5.1.2: + resolution: {integrity: sha512-b+CiXQCNMUGe0Ri64S9SXFcP9hogjAJ2Rd6GdVxhPLRm7mhGaM7VgOvCAJ1ZshfHbqVDI3uqTI5C8/GaKuLI7g==} engines: {node: ^18 || >=20} hasBin: true @@ -2271,8 +2287,8 @@ packages: resolution: {integrity: sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==} engines: {node: '>=18'} - oniguruma-to-es@3.1.0: - resolution: {integrity: sha512-BJ3Jy22YlgejHSO7Fvmz1kKazlaPmRSUH+4adTDUS/dKQ4wLxI+gALZ8updbaux7/m7fIlpgOZ5fp/Inq5jUAw==} + oniguruma-to-es@3.1.1: + resolution: {integrity: sha512-bUH8SDvPkH3ho3dvwJwfonjlQ4R80vjyvrU8YpxuROddv55vAEJrTuCuCVUhhsHbtlD9tGGbaNApGQckXhS8iQ==} open-cli@8.0.0: resolution: {integrity: sha512-3muD3BbfLyzl+aMVSEfn2FfOqGdPYR0O4KNnxXsLEPE2q9OSjBfJAaB6XKbrUzLgymoSMejvb5jpXJfru/Ko2A==} @@ -2339,8 +2355,8 @@ packages: resolution: {integrity: sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==} engines: {node: '>= 14.16'} - peek-readable@5.3.1: - resolution: {integrity: sha512-GVlENSDW6KHaXcd9zkZltB7tCLosKB/4Hg0fqBJkAoBgYG2Tn1xtMgXtSUuMU9AK/gCm/tTdT8mgAeF4YNeeqw==} + peek-readable@5.4.2: + resolution: {integrity: sha512-peBp3qZyuS6cNIJ2akRNG1uo1WJ1d0wTxg/fxMdZ0BqCVhx242bSFHM9eNqflfJVS9SsgkzgT/1UgnsurBOTMg==} engines: {node: '>=14.16'} perfect-debounce@1.0.0: @@ -2394,15 +2410,15 @@ packages: peerDependencies: postcss: ^8.4.21 - postcss@8.5.2: - resolution: {integrity: sha512-MjOadfU3Ys9KYoX0AdkBlFEF1Vx37uCCeN4ZHnmwm9FfpbsGWMZeBLMmmpY+6Ocqod7mkdZ0DT31OlbsFrLlkA==} + postcss@8.5.3: + resolution: {integrity: sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==} engines: {node: ^10 || ^12 || >=14} - preact@10.25.4: - resolution: {integrity: sha512-jLdZDb+Q+odkHJ+MpW/9U5cODzqnB+fy2EiHSZES7ldV5LK7yjlVzTp7R8Xy6W6y75kfK8iWYtFVH7lvjwrCMA==} + preact@10.26.2: + resolution: {integrity: sha512-0gNmv4qpS9HaN3+40CLBAnKe0ZfyE4ZWo5xKlC1rVrr0ckkEvJvAQqKaHANdFKsGstoxrY4AItZ7kZSGVoVjgg==} - prettier@3.5.1: - resolution: {integrity: sha512-hPpFQvHwL3Qv5AdRvBFMhnKo4tYxp0ReXiPn2bxkiohEX6mBeBwEpBSQTkD458RaaDKQMYSp4hX4UtfUTA5wDw==} + prettier@3.5.2: + resolution: {integrity: sha512-lc6npv5PH7hVqozBR7lkBNOGXV9vMwROAPlumdBkX0wTbbzPu/U1hk5yL8p2pt4Xoc+2mkT8t/sow2YrV/M5qg==} engines: {node: '>=14'} hasBin: true @@ -2410,12 +2426,16 @@ packages: resolution: {integrity: sha512-4yf0QO/sllf/1zbZWYnvWw3NxCQwLXKzIj0G849LSufP15BXKM0rbD2Z3wVnkMfjdn/CB0Dpp444gYAACdsplg==} engines: {node: '>=18'} + process@0.11.10: + resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} + engines: {node: '>= 0.6.0'} + prompts@2.4.2: resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} engines: {node: '>= 6'} - property-information@6.5.0: - resolution: {integrity: sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==} + property-information@7.0.0: + resolution: {integrity: sha512-7D/qOz/+Y4X/rzSB6jKxKUsQnphO046ei8qxG59mtM3RG3DHgTK81HrxrmoDVINJb8NKT5ZsRbwHvQ6B68Iyhg==} proxy-from-env@1.1.0: resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} @@ -2439,12 +2459,12 @@ packages: resolution: {integrity: sha512-9viLL4/n1BJUCT1NXVTdS1jtm80yDEgR5T4yCelII49Mbj0v1rZdKqj7zCiYdbB0CuCgdrvHcNogAKTFPBocFA==} engines: {node: '>=18'} - readable-stream@3.6.2: - resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} - engines: {node: '>= 6'} + readable-stream@4.7.0: + resolution: {integrity: sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - readable-web-to-node-stream@3.0.2: - resolution: {integrity: sha512-ePeK6cc1EcKLEhJFt/AebMCLL+GgSKhuygrZ/GLaKZYEecIgIECf4UaUuaByiGtzckwR4ain9VzUh95T1exYGw==} + readable-web-to-node-stream@3.0.4: + resolution: {integrity: sha512-9nX56alTf5bwXQ3ZDipHJhusu9NTQJ/CVPtb/XHAJCXihZeitfJvIRS4GqQ/mfIoOE3IelHMrpayVrosdHBuLw==} engines: {node: '>=8'} readdirp@4.1.2: @@ -2502,8 +2522,8 @@ packages: esbuild: '>=0.18.0' rollup: ^1.20.0 || ^2.0.0 || ^3.0.0 || ^4.0.0 - rollup@4.34.7: - resolution: {integrity: sha512-8qhyN0oZ4x0H6wmBgfKxJtxM7qS98YJ0k0kNh5ECVtuchIJ7z9IVVvzpmtQyT10PXKMtBxYr1wQ5Apg8RS8kXQ==} + rollup@4.34.8: + resolution: {integrity: sha512-489gTVMzAYdiZHFVA/ig/iYFllCcWFHMvUHI1rpFmkoUtRlQxqh6/yiNqnYibjMZ2b/+FUQwldG+aLsEt6bglQ==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true @@ -2519,8 +2539,8 @@ packages: run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} - rxjs@7.8.1: - resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} + rxjs@7.8.2: + resolution: {integrity: sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==} safe-buffer@5.2.1: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} @@ -2562,8 +2582,8 @@ packages: simple-git@3.27.0: resolution: {integrity: sha512-ivHoFS9Yi9GY49ogc6/YAi3Fl9ROnF4VyubNylgCkA+RVqLaKWnDSzXOVzya8csELIaWaYNutsEuAhZrtOjozA==} - sirv@3.0.0: - resolution: {integrity: sha512-BPwJGUeDaDCHihkORDchNyyTvWFhcusy1XMmhEVTQTwGeybFbp8YEmB+njbPnth1FibULBSBVwCQni25XlCUDg==} + sirv@3.0.1: + resolution: {integrity: sha512-FoqMu0NCGBLCcAkS1qA+XJIQTR6/JHfQXl+uGteNCQ76T91DMUjPa9xfmeqMY3z80nLSg9yQmNjK0Px6RWsH/A==} engines: {node: '>=18'} sisteransi@1.0.5: @@ -2708,8 +2728,8 @@ packages: tinyexec@0.3.2: resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==} - tinyglobby@0.2.10: - resolution: {integrity: sha512-Zc+8eJlFMvgatPZTl6A9L/yht8QqdmUNtURHaKZLmKBE12hNPSrqNkUp2cs3M/UKmNVVAMFQYSjYIVHDjW5zew==} + tinyglobby@0.2.12: + resolution: {integrity: sha512-qkf4trmKSIiMTs/E63cxH+ojC2unam7rJ0WrauAzpT3ECNTxGRMlaXxVbfxMUC/w0LaYk6jQ4y/nGR9uBO3tww==} engines: {node: '>=12.0.0'} tinypool@1.0.2: @@ -2757,8 +2777,8 @@ packages: resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} engines: {node: '>=12.20'} - type-fest@4.34.1: - resolution: {integrity: sha512-6kSc32kT0rbwxD6QL1CYe8IqdzN/J/ILMrNK+HMQCKH3insCDRY/3ITb0vcBss0a3t72fzh2YSzj8ko1HgwT3g==} + type-fest@4.35.0: + resolution: {integrity: sha512-2/AwEFQDFEy30iOLjrvHDIH7e4HEWH+f1Yl1bI5XMqzuoCUqwYCdxachgsgv0og/JdVZUhbfjcJAoHj5L1753A==} engines: {node: '>=16'} typescript@5.7.3: @@ -2818,9 +2838,6 @@ packages: resolution: {integrity: sha512-8U/MtpkPkkk3Atewj1+RcKIjb5WBimZ/WSLhhR3w6SsIj8XJuKTacSP8g+2JhfSGw0Cb125Y+2zA/IzJZDVbhA==} engines: {node: '>=18.12.0'} - util-deprecate@1.0.2: - resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} - valid-data-url@3.0.1: resolution: {integrity: sha512-jOWVmzVceKlVVdwjNSenT4PbGghU0SBIizAev8ofZVgivk/TVHXSbNL8LP6M3spZvkR9/QolkyJavGSX5Cs0UA==} engines: {node: '>=10'} @@ -2834,13 +2851,13 @@ packages: vfile@6.0.3: resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==} - vite-node@3.0.5: - resolution: {integrity: sha512-02JEJl7SbtwSDJdYS537nU6l+ktdvcREfLksk/NDAqtdKWGqHl+joXzEubHROmS3E6pip+Xgu2tFezMu75jH7A==} + vite-node@3.0.7: + resolution: {integrity: sha512-2fX0QwX4GkkkpULXdT1Pf4q0tC1i1lFOyseKoonavXUNlQ77KpW2XqBGGNIm/J4Ows4KxgGJzDguYVPKwG/n5A==} engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} hasBin: true - vite@6.1.0: - resolution: {integrity: sha512-RjjMipCKVoR4hVfPY6GQTgveinjNuyLw+qruksLDvA5ktI1150VmcMBKmQaEWJhg/j6Uaf6dNCNA0AfdzUb/hQ==} + vite@6.1.1: + resolution: {integrity: sha512-4GgM54XrwRfrOp297aIYspIti66k56v16ZnqHvrIM7mG+HjDlAwS7p+Srr7J6fGvEdOJ5JcQ/D9T7HhtdXDTzA==} engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} hasBin: true peerDependencies: @@ -2879,19 +2896,19 @@ packages: yaml: optional: true - vitepress-plugin-group-icons@1.3.5: - resolution: {integrity: sha512-1f1NP7osRYlNTR0yS5CAqcaasKHRSAzFKpeCUOfCPwYLAFxhCxsEbRtPBm0U1CfrDVa303MsjX18ngGpFGxIMA==} + vitepress-plugin-group-icons@1.3.6: + resolution: {integrity: sha512-MzUAuMZ43f51dfBKYowW7yv/A2DxIjtN50d8Dcj31nU9RB6GuYBJ48E/Ze88U0bEn4wlnrjMXFh2j2e0rYmGug==} - vitest@3.0.5: - resolution: {integrity: sha512-4dof+HvqONw9bvsYxtkfUp2uHsTN9bV2CZIi1pWgoFpL1Lld8LA1ka9q/ONSsoScAKG7NVGf2stJTI7XRkXb2Q==} + vitest@3.0.7: + resolution: {integrity: sha512-IP7gPK3LS3Fvn44x30X1dM9vtawm0aesAa2yBIZ9vQf+qB69NXC5776+Qmcr7ohUXIQuLhk7xQR0aSUIDPqavg==} engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} hasBin: true peerDependencies: '@edge-runtime/vm': '*' '@types/debug': ^4.1.12 '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 - '@vitest/browser': 3.0.5 - '@vitest/ui': 3.0.5 + '@vitest/browser': 3.0.7 + '@vitest/ui': 3.0.7 happy-dom: '*' jsdom: '*' peerDependenciesMeta: @@ -2983,117 +3000,117 @@ packages: resolution: {integrity: sha512-GQHQqAopRhwU8Kt1DDM8NjibDXHC8eoh1erhGAJPEyveY9qqVeXvVikNKrDz69sHowPMorbPUrH/mx8c50eiBQ==} engines: {node: '>=18'} - zod@3.24.1: - resolution: {integrity: sha512-muH7gBL9sI1nciMZV67X5fTKKBLtwpZ5VBp1vsOQzj1MhrBZ4wlVCm3gedKZWLp0Oyel8sIGfeiz54Su+OVT+A==} + zod@3.24.2: + resolution: {integrity: sha512-lY7CDW43ECgW9u1TcT3IoXHflywfVqDYze4waEz812jR/bZ8FHDsl7pFQoSZTz5N+2NqRXs8GBwnAwo3ZNxqhQ==} zwitch@2.0.4: resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} snapshots: - '@algolia/autocomplete-core@1.17.9(@algolia/client-search@5.19.0)(algoliasearch@5.19.0)': + '@algolia/autocomplete-core@1.17.9(@algolia/client-search@5.20.3)(algoliasearch@5.20.3)': dependencies: - '@algolia/autocomplete-plugin-algolia-insights': 1.17.9(@algolia/client-search@5.19.0)(algoliasearch@5.19.0) - '@algolia/autocomplete-shared': 1.17.9(@algolia/client-search@5.19.0)(algoliasearch@5.19.0) + '@algolia/autocomplete-plugin-algolia-insights': 1.17.9(@algolia/client-search@5.20.3)(algoliasearch@5.20.3) + '@algolia/autocomplete-shared': 1.17.9(@algolia/client-search@5.20.3)(algoliasearch@5.20.3) transitivePeerDependencies: - '@algolia/client-search' - algoliasearch - search-insights - '@algolia/autocomplete-plugin-algolia-insights@1.17.9(@algolia/client-search@5.19.0)(algoliasearch@5.19.0)': + '@algolia/autocomplete-plugin-algolia-insights@1.17.9(@algolia/client-search@5.20.3)(algoliasearch@5.20.3)': dependencies: - '@algolia/autocomplete-shared': 1.17.9(@algolia/client-search@5.19.0)(algoliasearch@5.19.0) + '@algolia/autocomplete-shared': 1.17.9(@algolia/client-search@5.20.3)(algoliasearch@5.20.3) transitivePeerDependencies: - '@algolia/client-search' - algoliasearch - '@algolia/autocomplete-preset-algolia@1.17.9(@algolia/client-search@5.19.0)(algoliasearch@5.19.0)': + '@algolia/autocomplete-preset-algolia@1.17.9(@algolia/client-search@5.20.3)(algoliasearch@5.20.3)': dependencies: - '@algolia/autocomplete-shared': 1.17.9(@algolia/client-search@5.19.0)(algoliasearch@5.19.0) - '@algolia/client-search': 5.19.0 - algoliasearch: 5.19.0 + '@algolia/autocomplete-shared': 1.17.9(@algolia/client-search@5.20.3)(algoliasearch@5.20.3) + '@algolia/client-search': 5.20.3 + algoliasearch: 5.20.3 - '@algolia/autocomplete-shared@1.17.9(@algolia/client-search@5.19.0)(algoliasearch@5.19.0)': + '@algolia/autocomplete-shared@1.17.9(@algolia/client-search@5.20.3)(algoliasearch@5.20.3)': dependencies: - '@algolia/client-search': 5.19.0 - algoliasearch: 5.19.0 + '@algolia/client-search': 5.20.3 + algoliasearch: 5.20.3 - '@algolia/client-abtesting@5.19.0': + '@algolia/client-abtesting@5.20.3': dependencies: - '@algolia/client-common': 5.19.0 - '@algolia/requester-browser-xhr': 5.19.0 - '@algolia/requester-fetch': 5.19.0 - '@algolia/requester-node-http': 5.19.0 + '@algolia/client-common': 5.20.3 + '@algolia/requester-browser-xhr': 5.20.3 + '@algolia/requester-fetch': 5.20.3 + '@algolia/requester-node-http': 5.20.3 - '@algolia/client-analytics@5.19.0': + '@algolia/client-analytics@5.20.3': dependencies: - '@algolia/client-common': 5.19.0 - '@algolia/requester-browser-xhr': 5.19.0 - '@algolia/requester-fetch': 5.19.0 - '@algolia/requester-node-http': 5.19.0 + '@algolia/client-common': 5.20.3 + '@algolia/requester-browser-xhr': 5.20.3 + '@algolia/requester-fetch': 5.20.3 + '@algolia/requester-node-http': 5.20.3 - '@algolia/client-common@5.19.0': {} + '@algolia/client-common@5.20.3': {} - '@algolia/client-insights@5.19.0': + '@algolia/client-insights@5.20.3': dependencies: - '@algolia/client-common': 5.19.0 - '@algolia/requester-browser-xhr': 5.19.0 - '@algolia/requester-fetch': 5.19.0 - '@algolia/requester-node-http': 5.19.0 + '@algolia/client-common': 5.20.3 + '@algolia/requester-browser-xhr': 5.20.3 + '@algolia/requester-fetch': 5.20.3 + '@algolia/requester-node-http': 5.20.3 - '@algolia/client-personalization@5.19.0': + '@algolia/client-personalization@5.20.3': dependencies: - '@algolia/client-common': 5.19.0 - '@algolia/requester-browser-xhr': 5.19.0 - '@algolia/requester-fetch': 5.19.0 - '@algolia/requester-node-http': 5.19.0 + '@algolia/client-common': 5.20.3 + '@algolia/requester-browser-xhr': 5.20.3 + '@algolia/requester-fetch': 5.20.3 + '@algolia/requester-node-http': 5.20.3 - '@algolia/client-query-suggestions@5.19.0': + '@algolia/client-query-suggestions@5.20.3': dependencies: - '@algolia/client-common': 5.19.0 - '@algolia/requester-browser-xhr': 5.19.0 - '@algolia/requester-fetch': 5.19.0 - '@algolia/requester-node-http': 5.19.0 + '@algolia/client-common': 5.20.3 + '@algolia/requester-browser-xhr': 5.20.3 + '@algolia/requester-fetch': 5.20.3 + '@algolia/requester-node-http': 5.20.3 - '@algolia/client-search@5.19.0': + '@algolia/client-search@5.20.3': dependencies: - '@algolia/client-common': 5.19.0 - '@algolia/requester-browser-xhr': 5.19.0 - '@algolia/requester-fetch': 5.19.0 - '@algolia/requester-node-http': 5.19.0 + '@algolia/client-common': 5.20.3 + '@algolia/requester-browser-xhr': 5.20.3 + '@algolia/requester-fetch': 5.20.3 + '@algolia/requester-node-http': 5.20.3 - '@algolia/ingestion@1.19.0': + '@algolia/ingestion@1.20.3': dependencies: - '@algolia/client-common': 5.19.0 - '@algolia/requester-browser-xhr': 5.19.0 - '@algolia/requester-fetch': 5.19.0 - '@algolia/requester-node-http': 5.19.0 + '@algolia/client-common': 5.20.3 + '@algolia/requester-browser-xhr': 5.20.3 + '@algolia/requester-fetch': 5.20.3 + '@algolia/requester-node-http': 5.20.3 - '@algolia/monitoring@1.19.0': + '@algolia/monitoring@1.20.3': dependencies: - '@algolia/client-common': 5.19.0 - '@algolia/requester-browser-xhr': 5.19.0 - '@algolia/requester-fetch': 5.19.0 - '@algolia/requester-node-http': 5.19.0 + '@algolia/client-common': 5.20.3 + '@algolia/requester-browser-xhr': 5.20.3 + '@algolia/requester-fetch': 5.20.3 + '@algolia/requester-node-http': 5.20.3 - '@algolia/recommend@5.19.0': + '@algolia/recommend@5.20.3': dependencies: - '@algolia/client-common': 5.19.0 - '@algolia/requester-browser-xhr': 5.19.0 - '@algolia/requester-fetch': 5.19.0 - '@algolia/requester-node-http': 5.19.0 + '@algolia/client-common': 5.20.3 + '@algolia/requester-browser-xhr': 5.20.3 + '@algolia/requester-fetch': 5.20.3 + '@algolia/requester-node-http': 5.20.3 - '@algolia/requester-browser-xhr@5.19.0': + '@algolia/requester-browser-xhr@5.20.3': dependencies: - '@algolia/client-common': 5.19.0 + '@algolia/client-common': 5.20.3 - '@algolia/requester-fetch@5.19.0': + '@algolia/requester-fetch@5.20.3': dependencies: - '@algolia/client-common': 5.19.0 + '@algolia/client-common': 5.20.3 - '@algolia/requester-node-http@5.19.0': + '@algolia/requester-node-http@5.20.3': dependencies: - '@algolia/client-common': 5.19.0 + '@algolia/client-common': 5.20.3 '@antfu/install-pkg@1.0.0': dependencies: @@ -3137,20 +3154,20 @@ snapshots: picocolors: 1.1.1 sisteransi: 1.0.5 - '@conventional-changelog/git-client@1.0.1(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.0.0)': + '@conventional-changelog/git-client@1.0.1(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.1.0)': dependencies: '@types/semver': 7.5.8 semver: 7.7.1 optionalDependencies: conventional-commits-filter: 5.0.0 - conventional-commits-parser: 6.0.0 + conventional-commits-parser: 6.1.0 - '@docsearch/css@3.8.3': {} + '@docsearch/css@3.9.0': {} - '@docsearch/js@3.8.3(@algolia/client-search@5.19.0)': + '@docsearch/js@3.9.0(@algolia/client-search@5.20.3)': dependencies: - '@docsearch/react': 3.8.3(@algolia/client-search@5.19.0) - preact: 10.25.4 + '@docsearch/react': 3.9.0(@algolia/client-search@5.20.3) + preact: 10.26.2 transitivePeerDependencies: - '@algolia/client-search' - '@types/react' @@ -3158,12 +3175,12 @@ snapshots: - react-dom - search-insights - '@docsearch/react@3.8.3(@algolia/client-search@5.19.0)': + '@docsearch/react@3.9.0(@algolia/client-search@5.20.3)': dependencies: - '@algolia/autocomplete-core': 1.17.9(@algolia/client-search@5.19.0)(algoliasearch@5.19.0) - '@algolia/autocomplete-preset-algolia': 1.17.9(@algolia/client-search@5.19.0)(algoliasearch@5.19.0) - '@docsearch/css': 3.8.3 - algoliasearch: 5.19.0 + '@algolia/autocomplete-core': 1.17.9(@algolia/client-search@5.20.3)(algoliasearch@5.20.3) + '@algolia/autocomplete-preset-algolia': 1.17.9(@algolia/client-search@5.20.3)(algoliasearch@5.20.3) + '@docsearch/css': 3.9.0 + algoliasearch: 5.20.3 transitivePeerDependencies: - '@algolia/client-search' @@ -3329,11 +3346,11 @@ snapshots: dependencies: '@iconify/types': 2.0.0 - '@iconify-json/simple-icons@1.2.24': + '@iconify-json/simple-icons@1.2.26': dependencies: '@iconify/types': 2.0.0 - '@iconify-json/vscode-icons@1.2.14': + '@iconify-json/vscode-icons@1.2.16': dependencies: '@iconify/types': 2.0.0 @@ -3382,7 +3399,7 @@ snapshots: picocolors: 1.1.1 simple-git: 3.27.0 ultramatter: 0.0.4 - zod: 3.24.1 + zod: 3.24.2 transitivePeerDependencies: - supports-color @@ -3449,13 +3466,13 @@ snapshots: '@polka/url@1.0.0-next.28': {} - '@rollup/plugin-alias@5.1.1(rollup@4.34.7)': + '@rollup/plugin-alias@5.1.1(rollup@4.34.8)': optionalDependencies: - rollup: 4.34.7 + rollup: 4.34.8 - '@rollup/plugin-commonjs@28.0.2(rollup@4.34.7)': + '@rollup/plugin-commonjs@28.0.2(rollup@4.34.8)': dependencies: - '@rollup/pluginutils': 5.1.4(rollup@4.34.7) + '@rollup/pluginutils': 5.1.4(rollup@4.34.8) commondir: 1.0.1 estree-walker: 2.0.2 fdir: 6.4.3(picomatch@4.0.2) @@ -3463,94 +3480,94 @@ snapshots: magic-string: 0.30.17 picomatch: 4.0.2 optionalDependencies: - rollup: 4.34.7 + rollup: 4.34.8 - '@rollup/plugin-json@6.1.0(rollup@4.34.7)': + '@rollup/plugin-json@6.1.0(rollup@4.34.8)': dependencies: - '@rollup/pluginutils': 5.1.4(rollup@4.34.7) + '@rollup/pluginutils': 5.1.4(rollup@4.34.8) optionalDependencies: - rollup: 4.34.7 + rollup: 4.34.8 - '@rollup/plugin-node-resolve@16.0.0(rollup@4.34.7)': + '@rollup/plugin-node-resolve@16.0.0(rollup@4.34.8)': dependencies: - '@rollup/pluginutils': 5.1.4(rollup@4.34.7) + '@rollup/pluginutils': 5.1.4(rollup@4.34.8) '@types/resolve': 1.20.2 deepmerge: 4.3.1 is-module: 1.0.0 resolve: 1.22.10 optionalDependencies: - rollup: 4.34.7 + rollup: 4.34.8 - '@rollup/plugin-replace@6.0.2(rollup@4.34.7)': + '@rollup/plugin-replace@6.0.2(rollup@4.34.8)': dependencies: - '@rollup/pluginutils': 5.1.4(rollup@4.34.7) + '@rollup/pluginutils': 5.1.4(rollup@4.34.8) magic-string: 0.30.17 optionalDependencies: - rollup: 4.34.7 + rollup: 4.34.8 - '@rollup/pluginutils@5.1.4(rollup@4.34.7)': + '@rollup/pluginutils@5.1.4(rollup@4.34.8)': dependencies: '@types/estree': 1.0.6 estree-walker: 2.0.2 picomatch: 4.0.2 optionalDependencies: - rollup: 4.34.7 + rollup: 4.34.8 - '@rollup/rollup-android-arm-eabi@4.34.7': + '@rollup/rollup-android-arm-eabi@4.34.8': optional: true - '@rollup/rollup-android-arm64@4.34.7': + '@rollup/rollup-android-arm64@4.34.8': optional: true - '@rollup/rollup-darwin-arm64@4.34.7': + '@rollup/rollup-darwin-arm64@4.34.8': optional: true - '@rollup/rollup-darwin-x64@4.34.7': + '@rollup/rollup-darwin-x64@4.34.8': optional: true - '@rollup/rollup-freebsd-arm64@4.34.7': + '@rollup/rollup-freebsd-arm64@4.34.8': optional: true - '@rollup/rollup-freebsd-x64@4.34.7': + '@rollup/rollup-freebsd-x64@4.34.8': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.34.7': + '@rollup/rollup-linux-arm-gnueabihf@4.34.8': optional: true - '@rollup/rollup-linux-arm-musleabihf@4.34.7': + '@rollup/rollup-linux-arm-musleabihf@4.34.8': optional: true - '@rollup/rollup-linux-arm64-gnu@4.34.7': + '@rollup/rollup-linux-arm64-gnu@4.34.8': optional: true - '@rollup/rollup-linux-arm64-musl@4.34.7': + '@rollup/rollup-linux-arm64-musl@4.34.8': optional: true - '@rollup/rollup-linux-loongarch64-gnu@4.34.7': + '@rollup/rollup-linux-loongarch64-gnu@4.34.8': optional: true - '@rollup/rollup-linux-powerpc64le-gnu@4.34.7': + '@rollup/rollup-linux-powerpc64le-gnu@4.34.8': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.34.7': + '@rollup/rollup-linux-riscv64-gnu@4.34.8': optional: true - '@rollup/rollup-linux-s390x-gnu@4.34.7': + '@rollup/rollup-linux-s390x-gnu@4.34.8': optional: true - '@rollup/rollup-linux-x64-gnu@4.34.7': + '@rollup/rollup-linux-x64-gnu@4.34.8': optional: true - '@rollup/rollup-linux-x64-musl@4.34.7': + '@rollup/rollup-linux-x64-musl@4.34.8': optional: true - '@rollup/rollup-win32-arm64-msvc@4.34.7': + '@rollup/rollup-win32-arm64-msvc@4.34.8': optional: true - '@rollup/rollup-win32-ia32-msvc@4.34.7': + '@rollup/rollup-win32-ia32-msvc@4.34.8': optional: true - '@rollup/rollup-win32-x64-msvc@4.34.7': + '@rollup/rollup-win32-x64-msvc@4.34.8': optional: true '@sec-ant/readable-stream@0.4.1': {} @@ -3560,13 +3577,13 @@ snapshots: '@shikijs/types': 3.0.0 '@shikijs/vscode-textmate': 10.0.2 '@types/hast': 3.0.4 - hast-util-to-html: 9.0.4 + hast-util-to-html: 9.0.5 '@shikijs/engine-javascript@3.0.0': dependencies: '@shikijs/types': 3.0.0 '@shikijs/vscode-textmate': 10.0.2 - oniguruma-to-es: 3.1.0 + oniguruma-to-es: 3.1.1 '@shikijs/engine-oniguruma@3.0.0': dependencies: @@ -3607,7 +3624,7 @@ snapshots: '@types/cross-spawn@6.0.6': dependencies: - '@types/node': 22.13.4 + '@types/node': 22.13.5 '@types/debug@4.1.12': dependencies: @@ -3618,7 +3635,7 @@ snapshots: '@types/fs-extra@11.0.4': dependencies: '@types/jsonfile': 6.1.4 - '@types/node': 22.13.4 + '@types/node': 22.13.5 '@types/hast@3.0.4': dependencies: @@ -3630,15 +3647,15 @@ snapshots: '@types/jsonfile@6.1.4': dependencies: - '@types/node': 22.13.4 + '@types/node': 22.13.5 '@types/linkify-it@5.0.0': {} '@types/lodash.template@4.5.3': dependencies: - '@types/lodash': 4.17.14 + '@types/lodash': 4.17.15 - '@types/lodash@4.17.14': {} + '@types/lodash@4.17.15': {} '@types/mark.js@8.11.12': dependencies: @@ -3673,7 +3690,7 @@ snapshots: '@types/node@17.0.45': {} - '@types/node@22.13.4': + '@types/node@22.13.5': dependencies: undici-types: 6.20.0 @@ -3683,18 +3700,18 @@ snapshots: '@types/postcss-prefix-selector@1.16.3': dependencies: - postcss: 8.5.2 + postcss: 8.5.3 '@types/prompts@2.4.9': dependencies: - '@types/node': 22.13.4 + '@types/node': 22.13.5 kleur: 3.0.3 '@types/resolve@1.20.2': {} '@types/sax@1.2.7': dependencies: - '@types/node': 22.13.4 + '@types/node': 22.13.5 '@types/semver@7.5.8': {} @@ -3704,50 +3721,50 @@ snapshots: '@types/web-bluetooth@0.0.20': {} - '@ungap/structured-clone@1.2.1': {} + '@ungap/structured-clone@1.3.0': {} - '@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))': + '@vitejs/plugin-vue@5.2.1(vite@6.1.1(@types/node@22.13.5)(jiti@1.21.7)(yaml@2.7.0))(vue@3.5.13(typescript@5.7.3))': dependencies: - vite: 6.1.0(@types/node@22.13.4)(jiti@1.21.7)(yaml@2.7.0) + vite: 6.1.1(@types/node@22.13.5)(jiti@1.21.7)(yaml@2.7.0) vue: 3.5.13(typescript@5.7.3) - '@vitest/expect@3.0.5': + '@vitest/expect@3.0.7': dependencies: - '@vitest/spy': 3.0.5 - '@vitest/utils': 3.0.5 + '@vitest/spy': 3.0.7 + '@vitest/utils': 3.0.7 chai: 5.2.0 tinyrainbow: 2.0.0 - '@vitest/mocker@3.0.5(vite@6.1.0(@types/node@22.13.4)(jiti@1.21.7)(yaml@2.7.0))': + '@vitest/mocker@3.0.7(vite@6.1.1(@types/node@22.13.5)(jiti@1.21.7)(yaml@2.7.0))': dependencies: - '@vitest/spy': 3.0.5 + '@vitest/spy': 3.0.7 estree-walker: 3.0.3 magic-string: 0.30.17 optionalDependencies: - vite: 6.1.0(@types/node@22.13.4)(jiti@1.21.7)(yaml@2.7.0) + vite: 6.1.1(@types/node@22.13.5)(jiti@1.21.7)(yaml@2.7.0) - '@vitest/pretty-format@3.0.5': + '@vitest/pretty-format@3.0.7': dependencies: tinyrainbow: 2.0.0 - '@vitest/runner@3.0.5': + '@vitest/runner@3.0.7': dependencies: - '@vitest/utils': 3.0.5 + '@vitest/utils': 3.0.7 pathe: 2.0.3 - '@vitest/snapshot@3.0.5': + '@vitest/snapshot@3.0.7': dependencies: - '@vitest/pretty-format': 3.0.5 + '@vitest/pretty-format': 3.0.7 magic-string: 0.30.17 pathe: 2.0.3 - '@vitest/spy@3.0.5': + '@vitest/spy@3.0.7': dependencies: tinyspy: 3.0.2 - '@vitest/utils@3.0.5': + '@vitest/utils@3.0.7': dependencies: - '@vitest/pretty-format': 3.0.5 + '@vitest/pretty-format': 3.0.7 loupe: 3.1.3 tinyrainbow: 2.0.0 @@ -3785,7 +3802,7 @@ snapshots: '@vue/shared': 3.5.13 estree-walker: 2.0.2 magic-string: 0.30.17 - postcss: 8.5.2 + postcss: 8.5.3 source-map-js: 1.2.1 '@vue/compiler-ssr@3.5.13': @@ -3881,25 +3898,29 @@ snapshots: transitivePeerDependencies: - typescript + abort-controller@3.0.0: + dependencies: + event-target-shim: 5.0.1 + acorn@8.14.0: {} add-stream@1.0.0: {} - algoliasearch@5.19.0: - dependencies: - '@algolia/client-abtesting': 5.19.0 - '@algolia/client-analytics': 5.19.0 - '@algolia/client-common': 5.19.0 - '@algolia/client-insights': 5.19.0 - '@algolia/client-personalization': 5.19.0 - '@algolia/client-query-suggestions': 5.19.0 - '@algolia/client-search': 5.19.0 - '@algolia/ingestion': 1.19.0 - '@algolia/monitoring': 1.19.0 - '@algolia/recommend': 5.19.0 - '@algolia/requester-browser-xhr': 5.19.0 - '@algolia/requester-fetch': 5.19.0 - '@algolia/requester-node-http': 5.19.0 + algoliasearch@5.20.3: + dependencies: + '@algolia/client-abtesting': 5.20.3 + '@algolia/client-analytics': 5.20.3 + '@algolia/client-common': 5.20.3 + '@algolia/client-insights': 5.20.3 + '@algolia/client-personalization': 5.20.3 + '@algolia/client-query-suggestions': 5.20.3 + '@algolia/client-search': 5.20.3 + '@algolia/ingestion': 1.20.3 + '@algolia/monitoring': 1.20.3 + '@algolia/recommend': 5.20.3 + '@algolia/requester-browser-xhr': 5.20.3 + '@algolia/requester-fetch': 5.20.3 + '@algolia/requester-node-http': 5.20.3 alien-signals@0.4.14: {} @@ -3943,6 +3964,8 @@ snapshots: balanced-match@1.0.2: {} + base64-js@1.5.1: {} + birpc@0.2.19: {} boolbase@1.0.0: {} @@ -3955,6 +3978,11 @@ snapshots: dependencies: fill-range: 7.1.1 + buffer@6.0.3: + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + bundle-name@4.1.0: dependencies: run-applescript: 7.0.0 @@ -4071,10 +4099,10 @@ snapshots: dependencies: '@hutson/parse-repository-url': 5.0.0 add-stream: 1.0.0 - conventional-changelog-writer: 8.0.0 - conventional-commits-parser: 6.0.0 - git-raw-commits: 5.0.0(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.0.0) - git-semver-tags: 8.0.0(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.0.0) + conventional-changelog-writer: 8.0.1 + conventional-commits-parser: 6.1.0 + git-raw-commits: 5.0.0(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.1.0) + git-semver-tags: 8.0.0(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.1.0) hosted-git-info: 7.0.2 normalize-package-data: 6.0.2 read-package-up: 11.0.0 @@ -4096,9 +4124,8 @@ snapshots: conventional-changelog-preset-loader@5.0.0: {} - conventional-changelog-writer@8.0.0: + conventional-changelog-writer@8.0.1: dependencies: - '@types/semver': 7.5.8 conventional-commits-filter: 5.0.0 handlebars: 4.7.8 meow: 13.2.0 @@ -4122,7 +4149,7 @@ snapshots: conventional-commits-filter@5.0.0: {} - conventional-commits-parser@6.0.0: + conventional-commits-parser@6.1.0: dependencies: meow: 13.2.0 @@ -4240,7 +4267,7 @@ snapshots: es-set-tostringtag@2.1.0: dependencies: es-errors: 1.3.0 - get-intrinsic: 1.2.7 + get-intrinsic: 1.3.0 has-tostringtag: 1.0.2 hasown: 2.0.2 @@ -4314,8 +4341,12 @@ snapshots: dependencies: '@types/estree': 1.0.6 + event-target-shim@5.0.1: {} + eventemitter3@5.0.1: {} + events@3.3.0: {} + execa@8.0.1: dependencies: cross-spawn: 7.0.6 @@ -4371,7 +4402,7 @@ snapshots: file-type@18.7.0: dependencies: - readable-web-to-node-stream: 3.0.2 + readable-web-to-node-stream: 3.0.4 strtok3: 7.1.1 token-types: 5.0.1 @@ -4389,7 +4420,7 @@ snapshots: optionalDependencies: debug: 4.4.0 - foreground-child@3.3.0: + foreground-child@3.3.1: dependencies: cross-spawn: 7.0.6 signal-exit: 4.1.0 @@ -4414,7 +4445,7 @@ snapshots: get-east-asian-width@1.3.0: {} - get-intrinsic@1.2.7: + get-intrinsic@1.3.0: dependencies: call-bind-apply-helpers: 1.0.2 es-define-property: 1.0.1 @@ -4447,17 +4478,17 @@ snapshots: dependencies: resolve-pkg-maps: 1.0.0 - git-raw-commits@5.0.0(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.0.0): + git-raw-commits@5.0.0(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.1.0): dependencies: - '@conventional-changelog/git-client': 1.0.1(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.0.0) + '@conventional-changelog/git-client': 1.0.1(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.1.0) meow: 13.2.0 transitivePeerDependencies: - conventional-commits-filter - conventional-commits-parser - git-semver-tags@8.0.0(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.0.0): + git-semver-tags@8.0.0(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.1.0): dependencies: - '@conventional-changelog/git-client': 1.0.1(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.0.0) + '@conventional-changelog/git-client': 1.0.1(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.1.0) meow: 13.2.0 transitivePeerDependencies: - conventional-commits-filter @@ -4469,8 +4500,8 @@ snapshots: glob@11.0.1: dependencies: - foreground-child: 3.3.0 - jackspeak: 4.0.3 + foreground-child: 3.3.1 + jackspeak: 4.1.0 minimatch: 10.0.1 minipass: 7.1.2 package-json-from-dist: 1.0.1 @@ -4508,7 +4539,7 @@ snapshots: dependencies: function-bind: 1.1.2 - hast-util-to-html@9.0.4: + hast-util-to-html@9.0.5: dependencies: '@types/hast': 3.0.4 '@types/unist': 3.0.3 @@ -4517,7 +4548,7 @@ snapshots: hast-util-whitespace: 3.0.0 html-void-elements: 3.0.0 mdast-util-to-hast: 13.2.0 - property-information: 6.5.0 + property-information: 7.0.0 space-separated-tokens: 2.0.2 stringify-entities: 4.0.4 zwitch: 2.0.4 @@ -4558,8 +4589,6 @@ snapshots: index-to-position@0.1.2: {} - inherits@2.0.4: {} - is-core-module@2.16.1: dependencies: hasown: 2.0.2 @@ -4616,7 +4645,7 @@ snapshots: isexe@2.0.0: {} - jackspeak@4.0.3: + jackspeak@4.1.0: dependencies: '@isaacs/cliui': 8.0.2 @@ -4779,7 +4808,7 @@ snapshots: dependencies: '@types/hast': 3.0.4 '@types/mdast': 4.0.4 - '@ungap/structured-clone': 1.2.1 + '@ungap/structured-clone': 1.3.0 devlop: 1.1.0 micromark-util-sanitize-uri: 2.0.1 trim-lines: 3.0.1 @@ -4847,7 +4876,7 @@ snapshots: minipass@7.1.2: {} - minisearch@7.1.1: {} + minisearch@7.1.2: {} mitt@3.0.1: {} @@ -4860,7 +4889,7 @@ snapshots: pkg-types: 1.3.1 ufo: 1.5.4 - mrmime@2.0.0: {} + mrmime@2.0.1: {} ms@2.1.3: {} @@ -4868,7 +4897,7 @@ snapshots: nanoid@3.3.8: {} - nanoid@5.1.0: {} + nanoid@5.1.2: {} neo-async@2.6.2: {} @@ -4903,7 +4932,7 @@ snapshots: dependencies: mimic-function: 5.0.1 - oniguruma-to-es@3.1.0: + oniguruma-to-es@3.1.1: dependencies: emoji-regex-xs: 1.0.0 regex: 6.0.1 @@ -4946,7 +4975,7 @@ snapshots: dependencies: '@babel/code-frame': 7.26.2 index-to-position: 0.1.2 - type-fest: 4.34.1 + type-fest: 4.35.0 parse-ms@4.0.0: {} @@ -4975,7 +5004,7 @@ snapshots: pathval@2.0.0: {} - peek-readable@5.3.1: {} + peek-readable@5.4.2: {} perfect-debounce@1.0.0: {} @@ -5008,35 +5037,37 @@ snapshots: '@polka/url': 1.0.0-next.28 trouter: 4.0.0 - postcss-prefix-selector@2.1.0(postcss@8.5.2): + postcss-prefix-selector@2.1.0(postcss@8.5.3): dependencies: - postcss: 8.5.2 + postcss: 8.5.3 - postcss-rtlcss@5.6.0(postcss@8.5.2): + postcss-rtlcss@5.6.0(postcss@8.5.3): dependencies: - postcss: 8.5.2 + postcss: 8.5.3 rtlcss: 4.3.0 - postcss@8.5.2: + postcss@8.5.3: dependencies: nanoid: 3.3.8 picocolors: 1.1.1 source-map-js: 1.2.1 - preact@10.25.4: {} + preact@10.26.2: {} - prettier@3.5.1: {} + prettier@3.5.2: {} pretty-ms@9.2.0: dependencies: parse-ms: 4.0.0 + process@0.11.10: {} + prompts@2.4.2: dependencies: kleur: 3.0.3 sisteransi: 1.0.5 - property-information@6.5.0: {} + property-information@7.0.0: {} proxy-from-env@1.1.0: {} @@ -5050,25 +5081,27 @@ snapshots: dependencies: find-up-simple: 1.0.0 read-pkg: 9.0.1 - type-fest: 4.34.1 + type-fest: 4.35.0 read-pkg@9.0.1: dependencies: '@types/normalize-package-data': 2.4.4 normalize-package-data: 6.0.2 parse-json: 8.1.0 - type-fest: 4.34.1 + type-fest: 4.35.0 unicorn-magic: 0.1.0 - readable-stream@3.6.2: + readable-stream@4.7.0: dependencies: - inherits: 2.0.4 + abort-controller: 3.0.0 + buffer: 6.0.3 + events: 3.3.0 + process: 0.11.10 string_decoder: 1.3.0 - util-deprecate: 1.0.2 - readable-web-to-node-stream@3.0.2: + readable-web-to-node-stream@3.0.4: dependencies: - readable-stream: 3.6.2 + readable-stream: 4.7.0 readdirp@4.1.2: {} @@ -5106,55 +5139,55 @@ snapshots: glob: 11.0.1 package-json-from-dist: 1.0.1 - rollup-plugin-dts@6.1.1(rollup@4.34.7)(typescript@5.7.3): + rollup-plugin-dts@6.1.1(rollup@4.34.8)(typescript@5.7.3): dependencies: magic-string: 0.30.17 - rollup: 4.34.7 + rollup: 4.34.8 typescript: 5.7.3 optionalDependencies: '@babel/code-frame': 7.26.2 - rollup-plugin-esbuild@6.2.0(esbuild@0.25.0)(rollup@4.34.7): + rollup-plugin-esbuild@6.2.0(esbuild@0.25.0)(rollup@4.34.8): dependencies: debug: 4.4.0 es-module-lexer: 1.6.0 esbuild: 0.25.0 get-tsconfig: 4.10.0 - rollup: 4.34.7 + rollup: 4.34.8 unplugin-utils: 0.2.4 transitivePeerDependencies: - supports-color - rollup@4.34.7: + rollup@4.34.8: dependencies: '@types/estree': 1.0.6 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.34.7 - '@rollup/rollup-android-arm64': 4.34.7 - '@rollup/rollup-darwin-arm64': 4.34.7 - '@rollup/rollup-darwin-x64': 4.34.7 - '@rollup/rollup-freebsd-arm64': 4.34.7 - '@rollup/rollup-freebsd-x64': 4.34.7 - '@rollup/rollup-linux-arm-gnueabihf': 4.34.7 - '@rollup/rollup-linux-arm-musleabihf': 4.34.7 - '@rollup/rollup-linux-arm64-gnu': 4.34.7 - '@rollup/rollup-linux-arm64-musl': 4.34.7 - '@rollup/rollup-linux-loongarch64-gnu': 4.34.7 - '@rollup/rollup-linux-powerpc64le-gnu': 4.34.7 - '@rollup/rollup-linux-riscv64-gnu': 4.34.7 - '@rollup/rollup-linux-s390x-gnu': 4.34.7 - '@rollup/rollup-linux-x64-gnu': 4.34.7 - '@rollup/rollup-linux-x64-musl': 4.34.7 - '@rollup/rollup-win32-arm64-msvc': 4.34.7 - '@rollup/rollup-win32-ia32-msvc': 4.34.7 - '@rollup/rollup-win32-x64-msvc': 4.34.7 + '@rollup/rollup-android-arm-eabi': 4.34.8 + '@rollup/rollup-android-arm64': 4.34.8 + '@rollup/rollup-darwin-arm64': 4.34.8 + '@rollup/rollup-darwin-x64': 4.34.8 + '@rollup/rollup-freebsd-arm64': 4.34.8 + '@rollup/rollup-freebsd-x64': 4.34.8 + '@rollup/rollup-linux-arm-gnueabihf': 4.34.8 + '@rollup/rollup-linux-arm-musleabihf': 4.34.8 + '@rollup/rollup-linux-arm64-gnu': 4.34.8 + '@rollup/rollup-linux-arm64-musl': 4.34.8 + '@rollup/rollup-linux-loongarch64-gnu': 4.34.8 + '@rollup/rollup-linux-powerpc64le-gnu': 4.34.8 + '@rollup/rollup-linux-riscv64-gnu': 4.34.8 + '@rollup/rollup-linux-s390x-gnu': 4.34.8 + '@rollup/rollup-linux-x64-gnu': 4.34.8 + '@rollup/rollup-linux-x64-musl': 4.34.8 + '@rollup/rollup-win32-arm64-msvc': 4.34.8 + '@rollup/rollup-win32-ia32-msvc': 4.34.8 + '@rollup/rollup-win32-x64-msvc': 4.34.8 fsevents: 2.3.3 rtlcss@4.3.0: dependencies: escalade: 3.2.0 picocolors: 1.1.1 - postcss: 8.5.2 + postcss: 8.5.3 strip-json-comments: 3.1.1 run-applescript@7.0.0: {} @@ -5163,7 +5196,7 @@ snapshots: dependencies: queue-microtask: 1.2.3 - rxjs@7.8.1: + rxjs@7.8.2: dependencies: tslib: 2.8.1 @@ -5209,10 +5242,10 @@ snapshots: transitivePeerDependencies: - supports-color - sirv@3.0.0: + sirv@3.0.1: dependencies: '@polka/url': 1.0.0-next.28 - mrmime: 2.0.0 + mrmime: 2.0.1 totalist: 3.0.1 sisteransi@1.0.5: {} @@ -5320,7 +5353,7 @@ snapshots: strtok3@7.1.1: dependencies: '@tokenizer/token': 0.3.0 - peek-readable: 5.3.1 + peek-readable: 5.4.2 superjson@2.2.2: dependencies: @@ -5347,7 +5380,7 @@ snapshots: tinyexec@0.3.2: {} - tinyglobby@0.2.10: + tinyglobby@0.2.12: dependencies: fdir: 6.4.3(picomatch@4.0.2) picomatch: 4.0.2 @@ -5383,7 +5416,7 @@ snapshots: type-fest@2.19.0: {} - type-fest@4.34.1: {} + type-fest@4.35.0: {} typescript@5.7.3: {} @@ -5436,8 +5469,6 @@ snapshots: pathe: 2.0.3 picomatch: 4.0.2 - util-deprecate@1.0.2: {} - valid-data-url@3.0.1: {} validate-npm-package-license@3.0.4: @@ -5455,13 +5486,13 @@ snapshots: '@types/unist': 3.0.3 vfile-message: 4.0.2 - vite-node@3.0.5(@types/node@22.13.4)(jiti@1.21.7)(yaml@2.7.0): + vite-node@3.0.7(@types/node@22.13.5)(jiti@1.21.7)(yaml@2.7.0): dependencies: cac: 6.7.14 debug: 4.4.0 es-module-lexer: 1.6.0 pathe: 2.0.3 - vite: 6.1.0(@types/node@22.13.4)(jiti@1.21.7)(yaml@2.7.0) + vite: 6.1.1(@types/node@22.13.5)(jiti@1.21.7)(yaml@2.7.0) transitivePeerDependencies: - '@types/node' - jiti @@ -5476,34 +5507,34 @@ snapshots: - tsx - yaml - vite@6.1.0(@types/node@22.13.4)(jiti@1.21.7)(yaml@2.7.0): + vite@6.1.1(@types/node@22.13.5)(jiti@1.21.7)(yaml@2.7.0): dependencies: esbuild: 0.24.2 - postcss: 8.5.2 - rollup: 4.34.7 + postcss: 8.5.3 + rollup: 4.34.8 optionalDependencies: - '@types/node': 22.13.4 + '@types/node': 22.13.5 fsevents: 2.3.3 jiti: 1.21.7 yaml: 2.7.0 - vitepress-plugin-group-icons@1.3.5: + vitepress-plugin-group-icons@1.3.6: dependencies: '@iconify-json/logos': 1.2.4 - '@iconify-json/vscode-icons': 1.2.14 + '@iconify-json/vscode-icons': 1.2.16 '@iconify/utils': 2.3.0 transitivePeerDependencies: - supports-color - vitest@3.0.5(@types/debug@4.1.12)(@types/node@22.13.4)(jiti@1.21.7)(yaml@2.7.0): + vitest@3.0.7(@types/debug@4.1.12)(@types/node@22.13.5)(jiti@1.21.7)(yaml@2.7.0): dependencies: - '@vitest/expect': 3.0.5 - '@vitest/mocker': 3.0.5(vite@6.1.0(@types/node@22.13.4)(jiti@1.21.7)(yaml@2.7.0)) - '@vitest/pretty-format': 3.0.5 - '@vitest/runner': 3.0.5 - '@vitest/snapshot': 3.0.5 - '@vitest/spy': 3.0.5 - '@vitest/utils': 3.0.5 + '@vitest/expect': 3.0.7 + '@vitest/mocker': 3.0.7(vite@6.1.1(@types/node@22.13.5)(jiti@1.21.7)(yaml@2.7.0)) + '@vitest/pretty-format': 3.0.7 + '@vitest/runner': 3.0.7 + '@vitest/snapshot': 3.0.7 + '@vitest/spy': 3.0.7 + '@vitest/utils': 3.0.7 chai: 5.2.0 debug: 4.4.0 expect-type: 1.1.0 @@ -5514,12 +5545,12 @@ snapshots: tinyexec: 0.3.2 tinypool: 1.0.2 tinyrainbow: 2.0.0 - vite: 6.1.0(@types/node@22.13.4)(jiti@1.21.7)(yaml@2.7.0) - vite-node: 3.0.5(@types/node@22.13.4)(jiti@1.21.7)(yaml@2.7.0) + vite: 6.1.1(@types/node@22.13.5)(jiti@1.21.7)(yaml@2.7.0) + vite-node: 3.0.7(@types/node@22.13.5)(jiti@1.21.7)(yaml@2.7.0) why-is-node-running: 2.3.0 optionalDependencies: '@types/debug': 4.1.12 - '@types/node': 22.13.4 + '@types/node': 22.13.5 transitivePeerDependencies: - jiti - less @@ -5558,7 +5589,7 @@ snapshots: joi: 17.13.3 lodash: 4.17.21 minimist: 1.2.8 - rxjs: 7.8.1 + rxjs: 7.8.2 transitivePeerDependencies: - debug @@ -5617,6 +5648,6 @@ snapshots: yoctocolors@2.1.1: {} - zod@3.24.1: {} + zod@3.24.2: {} zwitch@2.0.4: {} From 58bd3e23dd2175a2e9744bdc0d649126bdd0ea2f Mon Sep 17 00:00:00 2001 From: Divyansh Singh <40380293+brc-dd@users.noreply.github.com> Date: Tue, 25 Feb 2025 01:51:05 +0530 Subject: [PATCH 23/53] release: v2.0.0-alpha.3 --- CHANGELOG.md | 26 ++++++++++++++++++++++++++ package.json | 2 +- 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7d630958..b1b8959d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,29 @@ +# [2.0.0-alpha.3](https://github.com/vuejs/vitepress/compare/v2.0.0-alpha.2...v2.0.0-alpha.3) (2025-02-24) + +### Bug Fixes + +- **build:** `--minify` not working as documented ([9b5c037](https://github.com/vuejs/vitepress/commit/9b5c0377cd3474447c84b2901801287f3caf3d82)), closes [#4523](https://github.com/vuejs/vitepress/issues/4523) +- **build:** deterministic code group ids ([#4565](https://github.com/vuejs/vitepress/issues/4565)) ([b930b8d](https://github.com/vuejs/vitepress/commit/b930b8d5310f1691d8d9f009f45b70122e4ce800)) +- **markdown:** include content of all tokens in heading ids ([68dff2a](https://github.com/vuejs/vitepress/commit/68dff2af8547ae70f6622ac826affd76f2f6378e)), closes [#4561](https://github.com/vuejs/vitepress/issues/4561) +- **client:** set correct oldURL and newURL for hashchange ([#4573](https://github.com/vuejs/vitepress/issues/4573)) ([d1f2afd](https://github.com/vuejs/vitepress/commit/d1f2afdf0fbb022f12cc12295723b3b7c7ef5cb1)) +- **theme:** allow interactions behind scroll shadow ([#4537](https://github.com/vuejs/vitepress/issues/4537)) ([091d584](https://github.com/vuejs/vitepress/commit/091d5840ae15b64e04e8c07fbc0263a2749571bd)) +- **theme:** code block contrast ratio ([#4487](https://github.com/vuejs/vitepress/issues/4487)) ([5dccaee](https://github.com/vuejs/vitepress/commit/5dccaeef055beb109919f8990032975a0d630384)) +- **build:** fix flaky embedded languages highlighting ([#4566](https://github.com/vuejs/vitepress/issues/4566)) ([1969cf4](https://github.com/vuejs/vitepress/commit/1969cf4f3b93ad105595e4e2f8b030b04eb1c975)) + +### Features + +- **cli:** support custom `srcDir` ([#4270](https://github.com/vuejs/vitepress/issues/4270)) ([518c094](https://github.com/vuejs/vitepress/commit/518c0945f159aae679ef710bb48ae3ab3891cc9f)) +- **cli:** support custom npm scripts prefix ([#4271](https://github.com/vuejs/vitepress/issues/4271)) ([e5a0ee8](https://github.com/vuejs/vitepress/commit/e5a0ee8161752a77c5bb9546245a940cb5f28fb8)) +- **build:** dynamic routes plugin overhaul ([#4525](https://github.com/vuejs/vitepress/issues/4525)) ([a62ea6a](https://github.com/vuejs/vitepress/commit/a62ea6a832a33b756642b24ad5d38c248e08b554)) +- **build:** update to shiki v3 ([#4571](https://github.com/vuejs/vitepress/issues/4571)) ([52c2aa1](https://github.com/vuejs/vitepress/commit/52c2aa178d4b3fa98b863cf28f0ccf6d2aabcd93)) +- **build:** use `markdown-it-async`, remove `synckit` ([#4507](https://github.com/vuejs/vitepress/issues/4507)) ([8062235](https://github.com/vuejs/vitepress/commit/80622356f1d648577ee47ee3a44b04bb015ee462)) + +### BREAKING CHANGES + +- markdown-it-async is used instead of markdown-it. If you're using custom content renderer for local search, you'll need to do `await md.renderAsync` instead of `md.render`. +- Internals are modified a bit to better support vite 6 and handle HMR more correctly. For most users this won't need any change on their side. +- shiki is upgraded to v3. There shouldn't be any breaking change but if you see any issue, please report it. + ## [2.0.0-alpha.2](https://github.com/vuejs/vitepress/compare/v2.0.0-alpha.1...v2.0.0-alpha.2) (2025-01-23) ### Bug Fixes diff --git a/package.json b/package.json index 86ba1d2d..9009944a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "vitepress", - "version": "2.0.0-alpha.2", + "version": "2.0.0-alpha.3", "description": "Vite & Vue powered static site generator", "keywords": [ "vite", From 06ae2bf3a4ee02351530b0bd055e577ca6509d62 Mon Sep 17 00:00:00 2001 From: Divyansh Singh <40380293+brc-dd@users.noreply.github.com> Date: Wed, 26 Feb 2025 14:44:12 +0530 Subject: [PATCH 24/53] fix(build/regression): langAlias not working closes #4581 --- CHANGELOG.md | 2 +- src/node/markdown/plugins/highlight.ts | 14 ++++++++++---- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b1b8959d..ec6ee176 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,4 @@ -# [2.0.0-alpha.3](https://github.com/vuejs/vitepress/compare/v2.0.0-alpha.2...v2.0.0-alpha.3) (2025-02-24) +## [2.0.0-alpha.3](https://github.com/vuejs/vitepress/compare/v2.0.0-alpha.2...v2.0.0-alpha.3) (2025-02-24) ### Bug Fixes diff --git a/src/node/markdown/plugins/highlight.ts b/src/node/markdown/plugins/highlight.ts index 28babad5..52e5e84e 100644 --- a/src/node/markdown/plugins/highlight.ts +++ b/src/node/markdown/plugins/highlight.ts @@ -7,11 +7,11 @@ import { type TransformerCompactLineOption } from '@shikijs/transformers' import { customAlphabet } from 'nanoid' -import type { ShikiTransformer, BundledLanguage } from 'shiki' -import { createHighlighter, guessEmbeddedLanguages } from 'shiki' +import c from 'picocolors' +import type { BundledLanguage, ShikiTransformer } from 'shiki' +import { createHighlighter, guessEmbeddedLanguages, isSpecialLang } from 'shiki' import type { Logger } from 'vite' import type { MarkdownOptions, ThemeOptions } from '../markdown' -import c from 'picocolors' const nanoid = customAlphabet('abcdefghijklmnopqrstuvwxyz', 10) @@ -111,7 +111,13 @@ export async function highlight( .toLowerCase() || defaultLang try { - await highlighter.loadLanguage(lang as any) + // https://github.com/shikijs/shiki/issues/952 + if ( + !isSpecialLang(lang) && + !highlighter.getLoadedLanguages().includes(lang) + ) { + await highlighter.loadLanguage(lang as any) + } } catch { logger.warn( c.yellow( From d8a884ed0f754523765058a70149cdbaf6942341 Mon Sep 17 00:00:00 2001 From: Divyansh Singh <40380293+brc-dd@users.noreply.github.com> Date: Wed, 26 Feb 2025 15:06:26 +0530 Subject: [PATCH 25/53] fix: prevent reload on first server start in fresh installations --- src/node/plugin.ts | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/node/plugin.ts b/src/node/plugin.ts index 35905912..498f4c9f 100644 --- a/src/node/plugin.ts +++ b/src/node/plugin.ts @@ -10,6 +10,7 @@ import { } from 'vite' import { APP_PATH, + DEFAULT_THEME_PATH, DIST_CLIENT_PATH, SITE_DATA_REQUEST_PATH, resolveAliases @@ -156,8 +157,11 @@ export async function createVitePressPlugin( include: [ 'vue', 'vitepress > @vue/devtools-api', - 'vitepress > @vueuse/core' - ], + 'vitepress > @vueuse/core', + siteConfig.themeDir === DEFAULT_THEME_PATH + ? '@theme/index' + : undefined + ].filter((d) => d != null), exclude: ['@docsearch/js', 'vitepress'] }, server: { From 7a9ae34a3ace0cd4ac92377cd94786e8864a99fe Mon Sep 17 00:00:00 2001 From: Divyansh Singh <40380293+brc-dd@users.noreply.github.com> Date: Thu, 27 Feb 2025 09:08:41 +0530 Subject: [PATCH 26/53] chore: build docs on node 22 --- netlify.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/netlify.toml b/netlify.toml index ac16ca29..0f6f6ed5 100644 --- a/netlify.toml +++ b/netlify.toml @@ -1,5 +1,5 @@ [build.environment] - NODE_VERSION = "20" + NODE_VERSION = "22" PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD = "1" [build] From 9f54714e7db69fd4902f1917f927456c71b5a292 Mon Sep 17 00:00:00 2001 From: Divyansh Singh <40380293+brc-dd@users.noreply.github.com> Date: Thu, 27 Feb 2025 14:17:42 +0530 Subject: [PATCH 27/53] fix: rebuild dynamic routes cache on server restart follow up on #4525 --- src/node/config.ts | 2 +- src/node/plugins/dynamicRoutesPlugin.ts | 8 +++++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/node/config.ts b/src/node/config.ts index 75740b80..f5e0bb39 100644 --- a/src/node/config.ts +++ b/src/node/config.ts @@ -130,7 +130,7 @@ export async function resolveConfig( userConfig, sitemap: userConfig.sitemap, buildConcurrency: userConfig.buildConcurrency ?? 64, - ...(await resolvePages(srcDir, userConfig, logger)) + ...(await resolvePages(srcDir, userConfig, logger, true)) } // to be shared with content loaders diff --git a/src/node/plugins/dynamicRoutesPlugin.ts b/src/node/plugins/dynamicRoutesPlugin.ts index a480d898..3be663c7 100644 --- a/src/node/plugins/dynamicRoutesPlugin.ts +++ b/src/node/plugins/dynamicRoutesPlugin.ts @@ -70,8 +70,14 @@ export function defineRoutes(loader: RouteModule) { export async function resolvePages( srcDir: string, userConfig: UserConfig, - logger: Logger + logger: Logger, + rebuildCache = false ): Promise> { + if (rebuildCache) { + moduleGraph = new ModuleGraph() + routeModuleCache.clear() + } + // Important: tinyglobby doesn't guarantee order of the returned files. // We must sort the pages so the input list to rollup is stable across // builds - otherwise different input order could result in different exports From e271695d716247455ca620948f814e6c8ca0e3c4 Mon Sep 17 00:00:00 2001 From: Divyansh Singh <40380293+brc-dd@users.noreply.github.com> Date: Thu, 27 Feb 2025 15:11:08 +0530 Subject: [PATCH 28/53] fix: hmr not working for watched files in path loaders follow up on #4525 --- src/node/plugin.ts | 3 ++- src/node/plugins/dynamicRoutesPlugin.ts | 9 ++++++++- src/node/plugins/staticDataPlugin.ts | 2 +- 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/src/node/plugin.ts b/src/node/plugin.ts index 498f4c9f..219c18b6 100644 --- a/src/node/plugin.ts +++ b/src/node/plugin.ts @@ -307,7 +307,8 @@ export async function createVitePressPlugin( if (url?.endsWith('.html')) { res.statusCode = 200 res.setHeader('Content-Type', 'text/html') - let html = ` + let html = `\ + diff --git a/src/node/plugins/dynamicRoutesPlugin.ts b/src/node/plugins/dynamicRoutesPlugin.ts index 3be663c7..eca63a0c 100644 --- a/src/node/plugins/dynamicRoutesPlugin.ts +++ b/src/node/plugins/dynamicRoutesPlugin.ts @@ -187,10 +187,17 @@ export const dynamicRoutesPlugin = async ( // Also check if the file matches any custom watch patterns. let watchedFileChanged = false - for (const [, route] of routeModuleCache) { + for (const [file, route] of routeModuleCache) { if (route.watch && isMatch(normalizedFile, route.watch)) { route.routes = undefined watchedFileChanged = true + + for (const id of moduleGraph.delete(file)) { + const mod = this.environment.moduleGraph.getModuleById(id) + if (mod) { + modules.push(mod) + } + } } } diff --git a/src/node/plugins/staticDataPlugin.ts b/src/node/plugins/staticDataPlugin.ts index 8521603d..b0a7752b 100644 --- a/src/node/plugins/staticDataPlugin.ts +++ b/src/node/plugins/staticDataPlugin.ts @@ -150,7 +150,7 @@ export const staticDataPlugin: Plugin = { const loader = idToLoaderModulesMap[id] if (loader && loader.watch && isMatch(normalizedFile, loader.watch)) { const mod = this.environment.moduleGraph.getModuleById(id) - if (mod && !modules.includes(mod)) { + if (mod) { modules.push(mod) } } From 1a2f81de4d6549dd1adf86ae131d1a861158bd2d Mon Sep 17 00:00:00 2001 From: John Simons Date: Fri, 28 Feb 2025 03:03:36 +1000 Subject: [PATCH 29/53] feat: allow matching region end in snippets without tag (#4287) Co-authored-by: Divyansh Singh <40380293+brc-dd@users.noreply.github.com> --- .../node/markdown/plugins/snippet.test.ts | 230 +++++++++++++++++- src/node/markdown/plugins/snippet.ts | 106 +++++--- 2 files changed, 295 insertions(+), 41 deletions(-) diff --git a/__tests__/unit/node/markdown/plugins/snippet.test.ts b/__tests__/unit/node/markdown/plugins/snippet.test.ts index 0ae97dd2..aa940784 100644 --- a/__tests__/unit/node/markdown/plugins/snippet.test.ts +++ b/__tests__/unit/node/markdown/plugins/snippet.test.ts @@ -1,4 +1,9 @@ -import { dedent, rawPathToToken } from 'node/markdown/plugins/snippet' +import { + dedent, + findRegion, + rawPathToToken +} from 'node/markdown/plugins/snippet' +import { expect } from 'vitest' const removeEmptyKeys = >(obj: T) => { return Object.fromEntries( @@ -94,9 +99,228 @@ describe('node/markdown/plugins/snippet', () => { }) }) - test('rawPathToToken', () => { - rawPathTokenMap.forEach(([rawPath, token]) => { + describe('rawPathToToken', () => { + test.each(rawPathTokenMap)('%s', (rawPath, token) => { expect(removeEmptyKeys(rawPathToToken(rawPath))).toEqual(token) }) }) + + describe('findRegion', () => { + it('returns null when no region markers are present', () => { + const lines = ['function foo() {', ' console.log("hello");', '}'] + expect(findRegion(lines, 'foo')).toBeNull() + }) + + it('ignores non-matching region names', () => { + const lines = [ + '// #region regionA', + 'some code here', + '// #endregion regionA' + ] + expect(findRegion(lines, 'regionC')).toBeNull() + }) + + it('returns null if a region start marker exists without a matching end marker', () => { + const lines = [ + '// #region missingEnd', + 'console.log("inside region");', + 'console.log("still inside");' + ] + expect(findRegion(lines, 'missingEnd')).toBeNull() + }) + + it('returns null if an end marker exists without a preceding start marker', () => { + const lines = [ + '// #endregion ghostRegion', + 'console.log("stray end marker");' + ] + expect(findRegion(lines, 'ghostRegion')).toBeNull() + }) + + it('detects C#/JavaScript style region markers with matching tags', () => { + const lines = [ + 'Console.WriteLine("Before region");', + '#region hello', + 'Console.WriteLine("Hello, World!");', + '#endregion hello', + 'Console.WriteLine("After region");' + ] + const result = findRegion(lines, 'hello') + expect(result).not.toBeNull() + if (result) { + expect(lines.slice(result.start, result.end).join('\n')).toBe( + 'Console.WriteLine("Hello, World!");' + ) + } + }) + + it('detects region markers even when the end marker omits the region name', () => { + const lines = [ + 'Console.WriteLine("Before region");', + '#region hello', + 'Console.WriteLine("Hello, World!");', + '#endregion', + 'Console.WriteLine("After region");' + ] + const result = findRegion(lines, 'hello') + expect(result).not.toBeNull() + if (result) { + expect(lines.slice(result.start, result.end).join('\n')).toBe( + 'Console.WriteLine("Hello, World!");' + ) + } + }) + + it('handles indented region markers correctly', () => { + const lines = [ + ' Console.WriteLine("Before region");', + ' #region hello', + ' Console.WriteLine("Hello, World!");', + ' #endregion hello', + ' Console.WriteLine("After region");' + ] + const result = findRegion(lines, 'hello') + expect(result).not.toBeNull() + if (result) { + expect(lines.slice(result.start, result.end).join('\n')).toBe( + ' Console.WriteLine("Hello, World!");' + ) + } + }) + + it('detects TypeScript style region markers', () => { + const lines = [ + 'let regexp: RegExp[] = [];', + '// #region foo', + 'let start = -1;', + '// #endregion foo' + ] + const result = findRegion(lines, 'foo') + expect(result).not.toBeNull() + if (result) { + expect(lines.slice(result.start, result.end).join('\n')).toBe( + 'let start = -1;' + ) + } + }) + + it('detects CSS style region markers', () => { + const lines = [ + '.body-content {', + '/* #region foo */', + ' padding-left: 15px;', + '/* #endregion foo */', + ' padding-right: 15px;', + '}' + ] + const result = findRegion(lines, 'foo') + expect(result).not.toBeNull() + if (result) { + expect(lines.slice(result.start, result.end).join('\n')).toBe( + ' padding-left: 15px;' + ) + } + }) + + it('detects HTML style region markers', () => { + const lines = [ + '
Some content
', + '', + '

Hello world

', + '', + '
Other content
' + ] + const result = findRegion(lines, 'foo') + expect(result).not.toBeNull() + if (result) { + expect(lines.slice(result.start, result.end).join('\n')).toBe( + '

Hello world

' + ) + } + }) + + it('detects Visual Basic style region markers (with case-insensitive "End")', () => { + const lines = [ + 'Console.WriteLine("VB")', + '#Region VBRegion', + ' Console.WriteLine("Inside region")', + '#End Region VBRegion', + 'Console.WriteLine("Done")' + ] + const result = findRegion(lines, 'VBRegion') + expect(result).not.toBeNull() + if (result) { + expect(lines.slice(result.start, result.end).join('\n')).toBe( + ' Console.WriteLine("Inside region")' + ) + } + }) + + it('detects Bat style region markers', () => { + const lines = ['::#region foo', 'echo off', '::#endregion foo'] + const result = findRegion(lines, 'foo') + expect(result).not.toBeNull() + if (result) { + expect(lines.slice(result.start, result.end).join('\n')).toBe( + 'echo off' + ) + } + }) + + it('detects C/C++ style region markers using #pragma', () => { + const lines = [ + '#pragma region foo', + 'int a = 1;', + '#pragma endregion foo' + ] + const result = findRegion(lines, 'foo') + expect(result).not.toBeNull() + if (result) { + expect(lines.slice(result.start, result.end).join('\n')).toBe( + 'int a = 1;' + ) + } + }) + + it('returns the first complete region when multiple regions exist', () => { + const lines = [ + '// #region foo', + 'first region content', + '// #endregion foo', + '// #region foo', + 'second region content', + '// #endregion foo' + ] + const result = findRegion(lines, 'foo') + expect(result).not.toBeNull() + if (result) { + expect(lines.slice(result.start, result.end).join('\n')).toBe( + 'first region content' + ) + } + }) + + it('handles nested regions with different names properly', () => { + const lines = [ + '// #region foo', + "console.log('line before nested');", + '// #region bar', + "console.log('nested content');", + '// #endregion bar', + '// #endregion foo' + ] + const result = findRegion(lines, 'foo') + expect(result).not.toBeNull() + if (result) { + const extracted = lines.slice(result.start, result.end).join('\n') + const expected = [ + "console.log('line before nested');", + '// #region bar', + "console.log('nested content');", + '// #endregion bar' + ].join('\n') + expect(extracted).toBe(expected) + } + }) + }) }) diff --git a/src/node/markdown/plugins/snippet.ts b/src/node/markdown/plugins/snippet.ts index 37e44901..05356f72 100644 --- a/src/node/markdown/plugins/snippet.ts +++ b/src/node/markdown/plugins/snippet.ts @@ -51,47 +51,71 @@ export function dedent(text: string): string { return text } -function testLine( - line: string, - regexp: RegExp, - regionName: string, - end: boolean = false -) { - const [full, tag, name] = regexp.exec(line.trim()) || [] - - return ( - full && - tag && - name === regionName && - tag.match(end ? /^[Ee]nd ?[rR]egion$/ : /^[rR]egion$/) - ) -} - export function findRegion(lines: Array, regionName: string) { - const regionRegexps = [ - /^\/\/ ?#?((?:end)?region) ([\w*-]+)$/, // javascript, typescript, java - /^\/\* ?#((?:end)?region) ([\w*-]+) ?\*\/$/, // css, less, scss - /^#pragma ((?:end)?region) ([\w*-]+)$/, // C, C++ - /^$/, // HTML, markdown - /^#((?:End )Region) ([\w*-]+)$/, // Visual Basic - /^::#((?:end)region) ([\w*-]+)$/, // Bat - /^# ?((?:end)?region) ([\w*-]+)$/ // C#, PHP, Powershell, Python, perl & misc + const regionRegexps: [RegExp, RegExp][] = [ + [ + /^[ \t]*\/\/ ?#?(region) ([\w*-]+)$/, + /^[ \t]*\/\/ ?#?(endregion) ?([\w*-]*)$/ + ], // javascript, typescript, java + [ + /^\/\* ?#(region) ([\w*-]+) ?\*\/$/, + /^\/\* ?#(endregion) ?([\w*-]*) ?\*\/$/ + ], // css, less, scss + [/^#pragma (region) ([\w*-]+)$/, /^#pragma (endregion) ?([\w*-]*)$/], // C, C++ + [/^$/, /^$/], // HTML, markdown + [/^[ \t]*#(Region) ([\w*-]+)$/, /^[ \t]*#(End Region) ?([\w*-]*)$/], // Visual Basic + [/^::#(region) ([\w*-]+)$/, /^::#(endregion) ?([\w*-]*)$/], // Bat + [/^[ \t]*# ?(region) ([\w*-]+)$/, /^[ \t]*# ?(endregion) ?([\w*-]*)$/] // C#, PHP, Powershell, Python, perl & misc ] - let regexp = null - let start = -1 - - for (const [lineId, line] of lines.entries()) { - if (regexp === null) { - for (const reg of regionRegexps) { - if (testLine(line, reg, regionName)) { - start = lineId + 1 - regexp = reg - break - } + let chosenRegex: [RegExp, RegExp] | null = null + let startLine = -1 + // find the regex pair for a start marker that matches the given region name + for (let i = 0; i < lines.length; i++) { + const line = lines[i].trim() + for (const [startRegex, endRegex] of regionRegexps) { + const startMatch = startRegex.exec(line) + if ( + startMatch && + startMatch[2] === regionName && + /^[rR]egion$/.test(startMatch[1]) + ) { + chosenRegex = [startRegex, endRegex] + startLine = i + 1 + break + } + } + if (chosenRegex) break + } + if (!chosenRegex) return null + + const [startRegex, endRegex] = chosenRegex + let counter = 1 + // scan the rest of the lines to find the matching end marker, handling nested markers + for (let i = startLine; i < lines.length; i++) { + const trimmed = lines[i].trim() + // check for an inner start marker for the same region + const startMatch = startRegex.exec(trimmed) + if ( + startMatch && + startMatch[2] === regionName && + /^[rR]egion$/.test(startMatch[1]) + ) { + counter++ + continue + } + // check for an end marker for the same region + const endMatch = endRegex.exec(trimmed) + if ( + endMatch && + // allow empty region name on the end marker as a fallback + (endMatch[2] === regionName || endMatch[2] === '') && + /^[Ee]nd ?[rR]egion$/.test(endMatch[1]) + ) { + counter-- + if (counter === 0) { + return { start: startLine, end: i, regexp: chosenRegex } } - } else if (testLine(line, regexp, regionName, true)) { - return { start, end: lineId, regexp } } } @@ -181,7 +205,13 @@ export const snippetPlugin = (md: MarkdownIt, srcDir: string) => { content = dedent( lines .slice(region.start, region.end) - .filter((line) => !region.regexp.test(line.trim())) + .filter((line) => { + const trimmed = line.trim() + return ( + !region.regexp[0].test(trimmed) && + !region.regexp[1].test(trimmed) + ) + }) .join('\n') ) } From 1a6684cf1054d326bc1dd6eeb9fb78b150ac2b2a Mon Sep 17 00:00:00 2001 From: Divyansh Singh <40380293+brc-dd@users.noreply.github.com> Date: Sat, 8 Mar 2025 02:41:15 +0530 Subject: [PATCH 30/53] feat: improve region regexes for snippet plugin --- src/node/markdown/markdown.ts | 3 +- src/node/markdown/plugins/containers.ts | 8 +- src/node/markdown/plugins/githubAlerts.ts | 4 +- src/node/markdown/plugins/highlightLines.ts | 4 +- src/node/markdown/plugins/image.ts | 7 +- src/node/markdown/plugins/lineNumbers.ts | 4 +- src/node/markdown/plugins/link.ts | 4 +- src/node/markdown/plugins/preWrapper.ts | 4 +- src/node/markdown/plugins/restoreEntities.ts | 4 +- src/node/markdown/plugins/snippet.ts | 109 +++++++++---------- 10 files changed, 72 insertions(+), 79 deletions(-) diff --git a/src/node/markdown/markdown.ts b/src/node/markdown/markdown.ts index 5050bebd..aca503e2 100644 --- a/src/node/markdown/markdown.ts +++ b/src/node/markdown/markdown.ts @@ -19,9 +19,8 @@ import type { ShikiTransformer, ThemeRegistrationAny } from '@shikijs/types' -import type { Options } from 'markdown-it' -import { MarkdownItAsync } from 'markdown-it-async' import anchorPlugin from 'markdown-it-anchor' +import { MarkdownItAsync, type Options } from 'markdown-it-async' import attrsPlugin from 'markdown-it-attrs' import { full as emojiPlugin } from 'markdown-it-emoji' import type { BuiltinLanguage, BuiltinTheme, Highlighter } from 'shiki' diff --git a/src/node/markdown/plugins/containers.ts b/src/node/markdown/plugins/containers.ts index 03be3abc..6b08fc3d 100644 --- a/src/node/markdown/plugins/containers.ts +++ b/src/node/markdown/plugins/containers.ts @@ -1,4 +1,4 @@ -import type MarkdownIt from 'markdown-it' +import type { MarkdownItAsync } from 'markdown-it-async' import container from 'markdown-it-container' import type { RenderRule } from 'markdown-it/lib/renderer.mjs' import type Token from 'markdown-it/lib/token.mjs' @@ -10,7 +10,7 @@ import { } from './preWrapper' export const containerPlugin = ( - md: MarkdownIt, + md: MarkdownItAsync, options: Options, containerOptions?: ContainerOptions ) => { @@ -54,7 +54,7 @@ type ContainerArgs = [typeof container, string, { render: RenderRule }] function createContainer( klass: string, defaultTitle: string, - md: MarkdownIt + md: MarkdownItAsync ): ContainerArgs { return [ container, @@ -77,7 +77,7 @@ function createContainer( ] } -function createCodeGroup(options: Options, md: MarkdownIt): ContainerArgs { +function createCodeGroup(options: Options, md: MarkdownItAsync): ContainerArgs { return [ container, 'code-group', diff --git a/src/node/markdown/plugins/githubAlerts.ts b/src/node/markdown/plugins/githubAlerts.ts index eab5956d..7e065f7a 100644 --- a/src/node/markdown/plugins/githubAlerts.ts +++ b/src/node/markdown/plugins/githubAlerts.ts @@ -1,11 +1,11 @@ -import type MarkdownIt from 'markdown-it' +import type { MarkdownItAsync } from 'markdown-it-async' import type { ContainerOptions } from './containers' const markerRE = /^\[!(TIP|NOTE|INFO|IMPORTANT|WARNING|CAUTION|DANGER)\]([^\n\r]*)/i export const gitHubAlertsPlugin = ( - md: MarkdownIt, + md: MarkdownItAsync, options?: ContainerOptions ) => { const titleMark = { diff --git a/src/node/markdown/plugins/highlightLines.ts b/src/node/markdown/plugins/highlightLines.ts index f03ae617..a66882ec 100644 --- a/src/node/markdown/plugins/highlightLines.ts +++ b/src/node/markdown/plugins/highlightLines.ts @@ -2,11 +2,11 @@ // Now this plugin is only used to normalize line attrs. // The else part of line highlights logic is in './highlight.ts'. -import type MarkdownIt from 'markdown-it' +import type { MarkdownItAsync } from 'markdown-it-async' const RE = /{([\d,-]+)}/ -export const highlightLinePlugin = (md: MarkdownIt) => { +export const highlightLinePlugin = (md: MarkdownItAsync) => { const fence = md.renderer.rules.fence! md.renderer.rules.fence = (...args) => { const [tokens, idx] = args diff --git a/src/node/markdown/plugins/image.ts b/src/node/markdown/plugins/image.ts index d6f7eb5f..40f0b296 100644 --- a/src/node/markdown/plugins/image.ts +++ b/src/node/markdown/plugins/image.ts @@ -1,6 +1,6 @@ // markdown-it plugin for normalizing image source -import type MarkdownIt from 'markdown-it' +import type { MarkdownItAsync } from 'markdown-it-async' import { EXTERNAL_URL_RE } from '../../shared' export interface Options { @@ -11,7 +11,10 @@ export interface Options { lazyLoading?: boolean } -export const imagePlugin = (md: MarkdownIt, { lazyLoading }: Options = {}) => { +export const imagePlugin = ( + md: MarkdownItAsync, + { lazyLoading }: Options = {} +) => { const imageRule = md.renderer.rules.image! md.renderer.rules.image = (tokens, idx, options, env, self) => { const token = tokens[idx] diff --git a/src/node/markdown/plugins/lineNumbers.ts b/src/node/markdown/plugins/lineNumbers.ts index 15fff082..040963af 100644 --- a/src/node/markdown/plugins/lineNumbers.ts +++ b/src/node/markdown/plugins/lineNumbers.ts @@ -1,9 +1,9 @@ // markdown-it plugin for generating line numbers. // It depends on preWrapper plugin. -import type MarkdownIt from 'markdown-it' +import type { MarkdownItAsync } from 'markdown-it-async' -export const lineNumberPlugin = (md: MarkdownIt, enable = false) => { +export const lineNumberPlugin = (md: MarkdownItAsync, enable = false) => { const fence = md.renderer.rules.fence! md.renderer.rules.fence = (...args) => { const rawCode = fence(...args) diff --git a/src/node/markdown/plugins/link.ts b/src/node/markdown/plugins/link.ts index 4c47eb44..3e48843c 100644 --- a/src/node/markdown/plugins/link.ts +++ b/src/node/markdown/plugins/link.ts @@ -2,7 +2,7 @@ // 1. adding target="_blank" to external links // 2. normalize internal links to end with `.html` -import type MarkdownIt from 'markdown-it' +import type { MarkdownItAsync } from 'markdown-it-async' import { URL } from 'node:url' import { EXTERNAL_URL_RE, @@ -14,7 +14,7 @@ import { const indexRE = /(^|.*\/)index.md(#?.*)$/i export const linkPlugin = ( - md: MarkdownIt, + md: MarkdownItAsync, externalAttrs: Record, base: string ) => { diff --git a/src/node/markdown/plugins/preWrapper.ts b/src/node/markdown/plugins/preWrapper.ts index 906cac2a..bd6b96ba 100644 --- a/src/node/markdown/plugins/preWrapper.ts +++ b/src/node/markdown/plugins/preWrapper.ts @@ -1,11 +1,11 @@ -import type MarkdownIt from 'markdown-it' +import type { MarkdownItAsync } from 'markdown-it-async' export interface Options { codeCopyButtonTitle: string hasSingleTheme: boolean } -export function preWrapperPlugin(md: MarkdownIt, options: Options) { +export function preWrapperPlugin(md: MarkdownItAsync, options: Options) { const fence = md.renderer.rules.fence! md.renderer.rules.fence = (...args) => { const [tokens, idx] = args diff --git a/src/node/markdown/plugins/restoreEntities.ts b/src/node/markdown/plugins/restoreEntities.ts index 07c71e70..0d2bb1d4 100644 --- a/src/node/markdown/plugins/restoreEntities.ts +++ b/src/node/markdown/plugins/restoreEntities.ts @@ -1,9 +1,9 @@ -import type MarkdownIt from 'markdown-it' +import type { MarkdownItAsync } from 'markdown-it-async' import type StateCore from 'markdown-it/lib/rules_core/state_core.mjs' import type Token from 'markdown-it/lib/token.mjs' import { escapeHtml } from '../../shared' -export function restoreEntities(md: MarkdownIt): void { +export function restoreEntities(md: MarkdownItAsync): void { md.core.ruler.at('text_join', text_join) md.renderer.rules.text = (tokens, idx) => escapeHtml(tokens[idx].content) } diff --git a/src/node/markdown/plugins/snippet.ts b/src/node/markdown/plugins/snippet.ts index 05356f72..71e5e76c 100644 --- a/src/node/markdown/plugins/snippet.ts +++ b/src/node/markdown/plugins/snippet.ts @@ -1,5 +1,5 @@ import fs from 'fs-extra' -import type MarkdownIt from 'markdown-it' +import type { MarkdownItAsync } from 'markdown-it-async' import type { RuleBlock } from 'markdown-it/lib/parser_block.mjs' import path from 'node:path' import type { MarkdownEnv } from '../../shared' @@ -51,78 +51,75 @@ export function dedent(text: string): string { return text } +const markers = [ + { + start: /^\s*\/\/\s*#?region\b\s*(.*?)\s*$/, + end: /^\s*\/\/\s*#?endregion\b\s*(.*?)\s*$/ + }, + { + start: /^\s*/, + end: /^\s*/ + }, + { + start: /^\s*\/\*\s*#region\b\s*(.*?)\s*\*\//, + end: /^\s*\/\*\s*#endregion\b\s*(.*?)\s*\*\// + }, + { + start: /^\s*#[rR]egion\b\s*(.*?)\s*$/, + end: /^\s*#[eE]nd ?[rR]egion\b\s*(.*?)\s*$/ + }, + { + start: /^\s*#\s*#?region\b\s*(.*?)\s*$/, + end: /^\s*#\s*#?endregion\b\s*(.*?)\s*$/ + }, + { + start: /^\s*(?:--|::|@?REM)\s*#region\b\s*(.*?)\s*$/, + end: /^\s*(?:--|::|@?REM)\s*#endregion\b\s*(.*?)\s*$/ + }, + { + start: /^\s*#pragma\s+region\b\s*(.*?)\s*$/, + end: /^\s*#pragma\s+endregion\b\s*(.*?)\s*$/ + }, + { + start: /^\s*\(\*\s*#region\b\s*(.*?)\s*\*\)/, + end: /^\s*\(\*\s*#endregion\b\s*(.*?)\s*\*\)/ + } +] + export function findRegion(lines: Array, regionName: string) { - const regionRegexps: [RegExp, RegExp][] = [ - [ - /^[ \t]*\/\/ ?#?(region) ([\w*-]+)$/, - /^[ \t]*\/\/ ?#?(endregion) ?([\w*-]*)$/ - ], // javascript, typescript, java - [ - /^\/\* ?#(region) ([\w*-]+) ?\*\/$/, - /^\/\* ?#(endregion) ?([\w*-]*) ?\*\/$/ - ], // css, less, scss - [/^#pragma (region) ([\w*-]+)$/, /^#pragma (endregion) ?([\w*-]*)$/], // C, C++ - [/^$/, /^$/], // HTML, markdown - [/^[ \t]*#(Region) ([\w*-]+)$/, /^[ \t]*#(End Region) ?([\w*-]*)$/], // Visual Basic - [/^::#(region) ([\w*-]+)$/, /^::#(endregion) ?([\w*-]*)$/], // Bat - [/^[ \t]*# ?(region) ([\w*-]+)$/, /^[ \t]*# ?(endregion) ?([\w*-]*)$/] // C#, PHP, Powershell, Python, perl & misc - ] - - let chosenRegex: [RegExp, RegExp] | null = null - let startLine = -1 + let chosen: { re: (typeof markers)[number]; start: number } | null = null // find the regex pair for a start marker that matches the given region name for (let i = 0; i < lines.length; i++) { - const line = lines[i].trim() - for (const [startRegex, endRegex] of regionRegexps) { - const startMatch = startRegex.exec(line) - if ( - startMatch && - startMatch[2] === regionName && - /^[rR]egion$/.test(startMatch[1]) - ) { - chosenRegex = [startRegex, endRegex] - startLine = i + 1 + for (const re of markers) { + if (re.start.exec(lines[i])?.[1] === regionName) { + chosen = { re, start: i + 1 } break } } - if (chosenRegex) break + if (chosen) break } - if (!chosenRegex) return null + if (!chosen) return null - const [startRegex, endRegex] = chosenRegex let counter = 1 // scan the rest of the lines to find the matching end marker, handling nested markers - for (let i = startLine; i < lines.length; i++) { - const trimmed = lines[i].trim() + for (let i = chosen.start; i < lines.length; i++) { // check for an inner start marker for the same region - const startMatch = startRegex.exec(trimmed) - if ( - startMatch && - startMatch[2] === regionName && - /^[rR]egion$/.test(startMatch[1]) - ) { + if (chosen.re.start.exec(lines[i])?.[1] === regionName) { counter++ continue } // check for an end marker for the same region - const endMatch = endRegex.exec(trimmed) - if ( - endMatch && - // allow empty region name on the end marker as a fallback - (endMatch[2] === regionName || endMatch[2] === '') && - /^[Ee]nd ?[rR]egion$/.test(endMatch[1]) - ) { - counter-- - if (counter === 0) { - return { start: startLine, end: i, regexp: chosenRegex } - } + const endRegion = chosen.re.end.exec(lines[i])?.[1] + // allow empty region name on the end marker as a fallback + if (endRegion === regionName || endRegion === '') { + if (--counter === 0) return { ...chosen, end: i } } } return null } -export const snippetPlugin = (md: MarkdownIt, srcDir: string) => { +export const snippetPlugin = (md: MarkdownItAsync, srcDir: string) => { const parser: RuleBlock = (state, startLine, endLine, silent) => { const CH = '<'.charCodeAt(0) const pos = state.bMarks[startLine] + state.tShift[startLine] @@ -205,13 +202,7 @@ export const snippetPlugin = (md: MarkdownIt, srcDir: string) => { content = dedent( lines .slice(region.start, region.end) - .filter((line) => { - const trimmed = line.trim() - return ( - !region.regexp[0].test(trimmed) && - !region.regexp[1].test(trimmed) - ) - }) + .filter((l) => !(region.re.start.test(l) || region.re.end.test(l))) .join('\n') ) } From 50db6aaa8738151f01d26a4d7d2f938ec2765f90 Mon Sep 17 00:00:00 2001 From: Divyansh Singh <40380293+brc-dd@users.noreply.github.com> Date: Sat, 8 Mar 2025 02:50:25 +0530 Subject: [PATCH 31/53] chore: bump deps --- package.json | 38 +- pnpm-lock.yaml | 1285 ++++++++++++++++++++---------------------------- 2 files changed, 546 insertions(+), 777 deletions(-) diff --git a/package.json b/package.json index 9009944a..5e110096 100644 --- a/package.json +++ b/package.json @@ -97,20 +97,20 @@ "dependencies": { "@docsearch/css": "^3.9.0", "@docsearch/js": "^3.9.0", - "@iconify-json/simple-icons": "^1.2.26", - "@shikijs/core": "^3.0.0", - "@shikijs/transformers": "^3.0.0", - "@shikijs/types": "^3.0.0", + "@iconify-json/simple-icons": "^1.2.27", + "@shikijs/core": "^3.1.0", + "@shikijs/transformers": "^3.1.0", + "@shikijs/types": "^3.1.0", "@vitejs/plugin-vue": "^5.2.1", "@vue/devtools-api": "^7.7.2", "@vue/shared": "^3.5.13", - "@vueuse/core": "^12.7.0", - "@vueuse/integrations": "^12.7.0", + "@vueuse/core": "^12.8.2", + "@vueuse/integrations": "^12.8.2", "focus-trap": "^7.6.4", "mark.js": "8.11.1", "minisearch": "^7.1.2", - "shiki": "^3.0.0", - "vite": "^6.1.1", + "shiki": "^3.1.0", + "vite": "^6.2.1", "vue": "^3.5.13" }, "devDependencies": { @@ -125,7 +125,7 @@ "@mdit-vue/shared": "^2.1.3", "@polka/compression": "^1.0.0-next.28", "@rollup/plugin-alias": "^5.1.1", - "@rollup/plugin-commonjs": "^28.0.2", + "@rollup/plugin-commonjs": "^28.0.3", "@rollup/plugin-json": "^6.1.0", "@rollup/plugin-node-resolve": "^16.0.0", "@rollup/plugin-replace": "^6.0.2", @@ -139,7 +139,7 @@ "@types/markdown-it-container": "^2.0.10", "@types/markdown-it-emoji": "^3.0.1", "@types/minimist": "^1.2.5", - "@types/node": "^22.13.5", + "@types/node": "^22.13.9", "@types/picomatch": "^3.0.2", "@types/postcss-prefix-selector": "^1.16.3", "@types/prompts": "^2.4.9", @@ -157,37 +157,37 @@ "lru-cache": "^11.0.2", "markdown-it": "^14.1.0", "markdown-it-anchor": "^9.2.0", - "markdown-it-async": "^2.0.0", + "markdown-it-async": "^2.2.0", "markdown-it-attrs": "^4.3.1", "markdown-it-container": "^4.0.0", "markdown-it-emoji": "^3.0.0", "markdown-it-mathjax3": "^4.3.2", "minimist": "^1.2.8", - "nanoid": "^5.1.2", + "nanoid": "^5.1.3", "ora": "^8.2.0", "p-map": "^7.0.3", "path-to-regexp": "^6.3.0", "picocolors": "^1.1.1", "picomatch": "^4.0.2", "pkg-dir": "^8.0.0", - "playwright-chromium": "^1.50.1", + "playwright-chromium": "^1.51.0", "polka": "^1.0.0-next.28", "postcss-prefix-selector": "^2.1.0", - "prettier": "^3.5.2", + "prettier": "^3.5.3", "prompts": "^2.4.2", "punycode": "^2.3.1", "rimraf": "^6.0.1", - "rollup": "^4.34.8", + "rollup": "^4.34.9", "rollup-plugin-dts": "^6.1.1", - "rollup-plugin-esbuild": "^6.2.0", + "rollup-plugin-esbuild": "^6.2.1", "semver": "^7.7.1", "simple-git-hooks": "^2.11.1", "sirv": "^3.0.1", "sitemap": "^8.0.0", "tinyglobby": "^0.2.12", - "typescript": "^5.7.3", - "vitest": "^3.0.7", - "vue-tsc": "2.2.0", + "typescript": "^5.8.2", + "vitest": "^3.0.8", + "vue-tsc": "^2.2.8", "wait-on": "^8.0.2" }, "peerDependencies": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4554c3ea..76b395f3 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -24,22 +24,22 @@ importers: version: 3.9.0 '@docsearch/js': specifier: ^3.9.0 - version: 3.9.0(@algolia/client-search@5.20.3) + version: 3.9.0(@algolia/client-search@5.20.4) '@iconify-json/simple-icons': - specifier: ^1.2.26 - version: 1.2.26 + specifier: ^1.2.27 + version: 1.2.27 '@shikijs/core': - specifier: ^3.0.0 - version: 3.0.0 + specifier: ^3.1.0 + version: 3.1.0 '@shikijs/transformers': - specifier: ^3.0.0 - version: 3.0.0 + specifier: ^3.1.0 + version: 3.1.0 '@shikijs/types': - specifier: ^3.0.0 - version: 3.0.0 + specifier: ^3.1.0 + version: 3.1.0 '@vitejs/plugin-vue': specifier: ^5.2.1 - version: 5.2.1(vite@6.1.1(@types/node@22.13.5)(jiti@1.21.7)(yaml@2.7.0))(vue@3.5.13(typescript@5.7.3)) + version: 5.2.1(vite@6.2.1(@types/node@22.13.9)(jiti@1.21.7)(yaml@2.7.0))(vue@3.5.13(typescript@5.8.2)) '@vue/devtools-api': specifier: ^7.7.2 version: 7.7.2 @@ -47,11 +47,11 @@ importers: specifier: ^3.5.13 version: 3.5.13 '@vueuse/core': - specifier: ^12.7.0 - version: 12.7.0(typescript@5.7.3) + specifier: ^12.8.2 + version: 12.8.2(typescript@5.8.2) '@vueuse/integrations': - specifier: ^12.7.0 - version: 12.7.0(axios@1.7.9(debug@4.4.0))(focus-trap@7.6.4)(typescript@5.7.3) + specifier: ^12.8.2 + version: 12.8.2(axios@1.8.2(debug@4.4.0))(focus-trap@7.6.4)(typescript@5.8.2) focus-trap: specifier: ^7.6.4 version: 7.6.4 @@ -62,14 +62,14 @@ importers: specifier: ^7.1.2 version: 7.1.2 shiki: - specifier: ^3.0.0 - version: 3.0.0 + specifier: ^3.1.0 + version: 3.1.0 vite: - specifier: ^6.1.1 - version: 6.1.1(@types/node@22.13.5)(jiti@1.21.7)(yaml@2.7.0) + specifier: ^6.2.1 + version: 6.2.1(@types/node@22.13.9)(jiti@1.21.7)(yaml@2.7.0) vue: specifier: ^3.5.13 - version: 3.5.13(typescript@5.7.3) + version: 3.5.13(typescript@5.8.2) devDependencies: '@clack/prompts': specifier: ^0.10.0 @@ -103,19 +103,19 @@ importers: version: 1.0.0-next.28 '@rollup/plugin-alias': specifier: ^5.1.1 - version: 5.1.1(rollup@4.34.8) + version: 5.1.1(rollup@4.34.9) '@rollup/plugin-commonjs': - specifier: ^28.0.2 - version: 28.0.2(rollup@4.34.8) + specifier: ^28.0.3 + version: 28.0.3(rollup@4.34.9) '@rollup/plugin-json': specifier: ^6.1.0 - version: 6.1.0(rollup@4.34.8) + version: 6.1.0(rollup@4.34.9) '@rollup/plugin-node-resolve': specifier: ^16.0.0 - version: 16.0.0(rollup@4.34.8) + version: 16.0.0(rollup@4.34.9) '@rollup/plugin-replace': specifier: ^6.0.2 - version: 6.0.2(rollup@4.34.8) + version: 6.0.2(rollup@4.34.9) '@types/cross-spawn': specifier: ^6.0.6 version: 6.0.6 @@ -147,8 +147,8 @@ importers: specifier: ^1.2.5 version: 1.2.5 '@types/node': - specifier: ^22.13.5 - version: 22.13.5 + specifier: ^22.13.9 + version: 22.13.9 '@types/picomatch': specifier: ^3.0.2 version: 3.0.2 @@ -201,8 +201,8 @@ importers: specifier: ^9.2.0 version: 9.2.0(patch_hash=ivrlfano2jj27ilcyyknwlzzfu)(@types/markdown-it@14.1.2)(markdown-it@14.1.0) markdown-it-async: - specifier: ^2.0.0 - version: 2.0.0 + specifier: ^2.2.0 + version: 2.2.0 markdown-it-attrs: specifier: ^4.3.1 version: 4.3.1(markdown-it@14.1.0) @@ -219,8 +219,8 @@ importers: specifier: ^1.2.8 version: 1.2.8 nanoid: - specifier: ^5.1.2 - version: 5.1.2 + specifier: ^5.1.3 + version: 5.1.3 ora: specifier: ^8.2.0 version: 8.2.0 @@ -240,8 +240,8 @@ importers: specifier: ^8.0.0 version: 8.0.0 playwright-chromium: - specifier: ^1.50.1 - version: 1.50.1 + specifier: ^1.51.0 + version: 1.51.0 polka: specifier: ^1.0.0-next.28 version: 1.0.0-next.28 @@ -249,8 +249,8 @@ importers: specifier: ^2.1.0 version: 2.1.0(postcss@8.5.3) prettier: - specifier: ^3.5.2 - version: 3.5.2 + specifier: ^3.5.3 + version: 3.5.3 prompts: specifier: ^2.4.2 version: 2.4.2 @@ -261,14 +261,14 @@ importers: specifier: ^6.0.1 version: 6.0.1 rollup: - specifier: ^4.34.8 - version: 4.34.8 + specifier: ^4.34.9 + version: 4.34.9 rollup-plugin-dts: specifier: ^6.1.1 - version: 6.1.1(rollup@4.34.8)(typescript@5.7.3) + version: 6.1.1(rollup@4.34.9)(typescript@5.8.2) rollup-plugin-esbuild: - specifier: ^6.2.0 - version: 6.2.0(esbuild@0.25.0)(rollup@4.34.8) + specifier: ^6.2.1 + version: 6.2.1(esbuild@0.25.0)(rollup@4.34.9) semver: specifier: ^7.7.1 version: 7.7.1 @@ -285,14 +285,14 @@ importers: specifier: ^0.2.12 version: 0.2.12 typescript: - specifier: ^5.7.3 - version: 5.7.3 + specifier: ^5.8.2 + version: 5.8.2 vitest: - specifier: ^3.0.7 - version: 3.0.7(@types/debug@4.1.12)(@types/node@22.13.5)(jiti@1.21.7)(yaml@2.7.0) + specifier: ^3.0.8 + version: 3.0.8(@types/debug@4.1.12)(@types/node@22.13.9)(jiti@1.21.7)(yaml@2.7.0) vue-tsc: - specifier: 2.2.0 - version: 2.2.0(typescript@5.7.3) + specifier: ^2.2.8 + version: 2.2.8(typescript@5.8.2) wait-on: specifier: ^8.0.2 version: 8.0.2(debug@4.4.0) @@ -352,56 +352,56 @@ packages: '@algolia/client-search': '>= 4.9.1 < 6' algoliasearch: '>= 4.9.1 < 6' - '@algolia/client-abtesting@5.20.3': - resolution: {integrity: sha512-wPOzHYSsW+H97JkBLmnlOdJSpbb9mIiuNPycUCV5DgzSkJFaI/OFxXfZXAh1gqxK+hf0miKue1C9bltjWljrNA==} + '@algolia/client-abtesting@5.20.4': + resolution: {integrity: sha512-OZ3Xvvf+k7NMcwmmioIVX+76E/KKtN607NCMNsBEKe+uHqktZ+I5bmi/EVr2m5VF59Gnh9MTlJCdXtBiGjruxw==} engines: {node: '>= 14.0.0'} - '@algolia/client-analytics@5.20.3': - resolution: {integrity: sha512-XE3iduH9lA7iTQacDGofBQyIyIgaX8qbTRRdj1bOCmfzc9b98CoiMwhNwdTifmmMewmN0EhVF3hP8KjKWwX7Yw==} + '@algolia/client-analytics@5.20.4': + resolution: {integrity: sha512-8pM5zQpHonCIBxKmMyBLgQoaSKUNBE5u741VEIjn2ArujolhoKRXempRAlLwEg5hrORKl9XIlit00ff4g6LWvA==} engines: {node: '>= 14.0.0'} - '@algolia/client-common@5.20.3': - resolution: {integrity: sha512-IYRd/A/R3BXeaQVT2805lZEdWo54v39Lqa7ABOxIYnUvX2vvOMW1AyzCuT0U7Q+uPdD4UW48zksUKRixShcWxA==} + '@algolia/client-common@5.20.4': + resolution: {integrity: sha512-OCGa8hKAP6kQKBwi+tu9flTXshz4qeCK5P8J6bI1qq8KYs+/TU1xSotT+E7hO+uyDanGU6dT6soiMSi4A38JgA==} engines: {node: '>= 14.0.0'} - '@algolia/client-insights@5.20.3': - resolution: {integrity: sha512-QGc/bmDUBgzB71rDL6kihI2e1Mx6G6PxYO5Ks84iL3tDcIel1aFuxtRF14P8saGgdIe1B6I6QkpkeIddZ6vWQw==} + '@algolia/client-insights@5.20.4': + resolution: {integrity: sha512-MroyJStJFLf/cYeCbguCRdrA2U6miDVqbi3t9ZGovBWWTef7BZwVQG0mLyInzp4MIjBfwqu3xTrhxsiiOavX3A==} engines: {node: '>= 14.0.0'} - '@algolia/client-personalization@5.20.3': - resolution: {integrity: sha512-zuM31VNPDJ1LBIwKbYGz/7+CSm+M8EhlljDamTg8AnDilnCpKjBebWZR5Tftv/FdWSro4tnYGOIz1AURQgZ+tQ==} + '@algolia/client-personalization@5.20.4': + resolution: {integrity: sha512-bVR5sxFfgCQ+G0ZegGVhBqtaDd7jCfr33m5mGuT43U+bH//xeqAHQyIS4abcmRulwqeIAHNm5Yl2J7grT3z//A==} engines: {node: '>= 14.0.0'} - '@algolia/client-query-suggestions@5.20.3': - resolution: {integrity: sha512-Nn872PuOI8qzi1bxMMhJ0t2AzVBqN01jbymBQOkypvZHrrjZPso3iTpuuLLo9gi3yc/08vaaWTAwJfPhxPwJUw==} + '@algolia/client-query-suggestions@5.20.4': + resolution: {integrity: sha512-ZHsV0vceNDR87wIVaz7VjxilwCUCkzbuy4QnqIdnQs3NnC43is7KKbEtKueuNw+YGMdx+wmD5kRI2XKip1R93A==} engines: {node: '>= 14.0.0'} - '@algolia/client-search@5.20.3': - resolution: {integrity: sha512-9+Fm1ahV8/2goSIPIqZnVitV5yHW5E5xTdKy33xnqGd45A9yVv5tTkudWzEXsbfBB47j9Xb3uYPZjAvV5RHbKA==} + '@algolia/client-search@5.20.4': + resolution: {integrity: sha512-hXM2LpwTzG5kGQSyq3feIijzzl6vkjYPP+LF3ru1relNUIh7fWJ4uYQay2NMNbWX5LWQzF8Vr9qlIA139doQXg==} engines: {node: '>= 14.0.0'} - '@algolia/ingestion@1.20.3': - resolution: {integrity: sha512-5GHNTiZ3saLjTNyr6WkP5hzDg2eFFAYWomvPcm9eHWskjzXt8R0IOiW9kkTS6I6hXBwN5H9Zna5mZDSqqJdg+g==} + '@algolia/ingestion@1.20.4': + resolution: {integrity: sha512-idAe53XsTlLSSQ7pJcjscUEmc67vEM+VohYkr78Ebfb43vtfKH0ik8ux9OGQpLRNGntaHqpe/lfU5PDRi5/92w==} engines: {node: '>= 14.0.0'} - '@algolia/monitoring@1.20.3': - resolution: {integrity: sha512-KUWQbTPoRjP37ivXSQ1+lWMfaifCCMzTnEcEnXwAmherS5Tp7us6BAqQDMGOD4E7xyaS2I8pto6WlOzxH+CxmA==} + '@algolia/monitoring@1.20.4': + resolution: {integrity: sha512-O6HjdSWtyu5LhHR7gdU83oWbl1vVVRwoTxkENHF61Ar7l9C1Ok91VtnK7RtXB9pJL1kpIMDExwZOT5sEN2Ppfw==} engines: {node: '>= 14.0.0'} - '@algolia/recommend@5.20.3': - resolution: {integrity: sha512-oo/gG77xTTTclkrdFem0Kmx5+iSRFiwuRRdxZETDjwzCI7svutdbwBgV/Vy4D4QpYaX4nhY/P43k84uEowCE4Q==} + '@algolia/recommend@5.20.4': + resolution: {integrity: sha512-p8M78pQjPrN6PudO2TnkWiOJbyp/IPhgCFBW8aZrLshhZpPkV9N4u0YsU/w6OoeYDKSxmXntWQrKYiU1dVRWfg==} engines: {node: '>= 14.0.0'} - '@algolia/requester-browser-xhr@5.20.3': - resolution: {integrity: sha512-BkkW7otbiI/Er1AiEPZs1h7lxbtSO9p09jFhv3/iT8/0Yz0CY79VJ9iq+Wv1+dq/l0OxnMpBy8mozrieGA3mXQ==} + '@algolia/requester-browser-xhr@5.20.4': + resolution: {integrity: sha512-Y8GThjDVdhFUurZKKDdzAML/LNKOA/BOydEcaFeb/g4Iv4Iq0qQJs6aIbtdsngUU6cu74qH/2P84kr2h16uVvQ==} engines: {node: '>= 14.0.0'} - '@algolia/requester-fetch@5.20.3': - resolution: {integrity: sha512-eAVlXz7UNzTsA1EDr+p0nlIH7WFxo7k3NMxYe8p38DH8YVWLgm2MgOVFUMNg9HCi6ZNOi/A2w/id2ZZ4sKgUOw==} + '@algolia/requester-fetch@5.20.4': + resolution: {integrity: sha512-OrAUSrvbFi46U7AxOXkyl9QQiaW21XWpixWmcx3D2S65P/DCIGOVE6K2741ZE+WiKIqp+RSYkyDFj3BiFHzLTg==} engines: {node: '>= 14.0.0'} - '@algolia/requester-node-http@5.20.3': - resolution: {integrity: sha512-FqR3pQPfHfQyX1wgcdK6iyqu86yP76MZd4Pzj1y/YLMj9rRmRCY0E0AffKr//nrOFEwv6uY8BQY4fd9/6b0ZCg==} + '@algolia/requester-node-http@5.20.4': + resolution: {integrity: sha512-Jc/bofGBw4P9nBii4oCzCqqusv8DAFFORfUD2Ce1cZk3fvUPk+q/Qnu7i9JpTSHjMc0MWzqApLdq7Nwh1gelLg==} engines: {node: '>= 14.0.0'} '@antfu/install-pkg@1.0.0': @@ -475,300 +475,150 @@ packages: search-insights: optional: true - '@esbuild/aix-ppc64@0.24.2': - resolution: {integrity: sha512-thpVCb/rhxE/BnMLQ7GReQLLN8q9qbHmI55F4489/ByVg2aQaQ6kbcLb6FHkocZzQhxc4gx0sCk0tJkKBFzDhA==} - engines: {node: '>=18'} - cpu: [ppc64] - os: [aix] - '@esbuild/aix-ppc64@0.25.0': resolution: {integrity: sha512-O7vun9Sf8DFjH2UtqK8Ku3LkquL9SZL8OLY1T5NZkA34+wG3OQF7cl4Ql8vdNzM6fzBbYfLaiRLIOZ+2FOCgBQ==} engines: {node: '>=18'} cpu: [ppc64] os: [aix] - '@esbuild/android-arm64@0.24.2': - resolution: {integrity: sha512-cNLgeqCqV8WxfcTIOeL4OAtSmL8JjcN6m09XIgro1Wi7cF4t/THaWEa7eL5CMoMBdjoHOTh/vwTO/o2TRXIyzg==} - engines: {node: '>=18'} - cpu: [arm64] - os: [android] - '@esbuild/android-arm64@0.25.0': resolution: {integrity: sha512-grvv8WncGjDSyUBjN9yHXNt+cq0snxXbDxy5pJtzMKGmmpPxeAmAhWxXI+01lU5rwZomDgD3kJwulEnhTRUd6g==} engines: {node: '>=18'} cpu: [arm64] os: [android] - '@esbuild/android-arm@0.24.2': - resolution: {integrity: sha512-tmwl4hJkCfNHwFB3nBa8z1Uy3ypZpxqxfTQOcHX+xRByyYgunVbZ9MzUUfb0RxaHIMnbHagwAxuTL+tnNM+1/Q==} - engines: {node: '>=18'} - cpu: [arm] - os: [android] - '@esbuild/android-arm@0.25.0': resolution: {integrity: sha512-PTyWCYYiU0+1eJKmw21lWtC+d08JDZPQ5g+kFyxP0V+es6VPPSUhM6zk8iImp2jbV6GwjX4pap0JFbUQN65X1g==} engines: {node: '>=18'} cpu: [arm] os: [android] - '@esbuild/android-x64@0.24.2': - resolution: {integrity: sha512-B6Q0YQDqMx9D7rvIcsXfmJfvUYLoP722bgfBlO5cGvNVb5V/+Y7nhBE3mHV9OpxBf4eAS2S68KZztiPaWq4XYw==} - engines: {node: '>=18'} - cpu: [x64] - os: [android] - '@esbuild/android-x64@0.25.0': resolution: {integrity: sha512-m/ix7SfKG5buCnxasr52+LI78SQ+wgdENi9CqyCXwjVR2X4Jkz+BpC3le3AoBPYTC9NHklwngVXvbJ9/Akhrfg==} engines: {node: '>=18'} cpu: [x64] os: [android] - '@esbuild/darwin-arm64@0.24.2': - resolution: {integrity: sha512-kj3AnYWc+CekmZnS5IPu9D+HWtUI49hbnyqk0FLEJDbzCIQt7hg7ucF1SQAilhtYpIujfaHr6O0UHlzzSPdOeA==} - engines: {node: '>=18'} - cpu: [arm64] - os: [darwin] - '@esbuild/darwin-arm64@0.25.0': resolution: {integrity: sha512-mVwdUb5SRkPayVadIOI78K7aAnPamoeFR2bT5nszFUZ9P8UpK4ratOdYbZZXYSqPKMHfS1wdHCJk1P1EZpRdvw==} engines: {node: '>=18'} cpu: [arm64] os: [darwin] - '@esbuild/darwin-x64@0.24.2': - resolution: {integrity: sha512-WeSrmwwHaPkNR5H3yYfowhZcbriGqooyu3zI/3GGpF8AyUdsrrP0X6KumITGA9WOyiJavnGZUwPGvxvwfWPHIA==} - engines: {node: '>=18'} - cpu: [x64] - os: [darwin] - '@esbuild/darwin-x64@0.25.0': resolution: {integrity: sha512-DgDaYsPWFTS4S3nWpFcMn/33ZZwAAeAFKNHNa1QN0rI4pUjgqf0f7ONmXf6d22tqTY+H9FNdgeaAa+YIFUn2Rg==} engines: {node: '>=18'} cpu: [x64] os: [darwin] - '@esbuild/freebsd-arm64@0.24.2': - resolution: {integrity: sha512-UN8HXjtJ0k/Mj6a9+5u6+2eZ2ERD7Edt1Q9IZiB5UZAIdPnVKDoG7mdTVGhHJIeEml60JteamR3qhsr1r8gXvg==} - engines: {node: '>=18'} - cpu: [arm64] - os: [freebsd] - '@esbuild/freebsd-arm64@0.25.0': resolution: {integrity: sha512-VN4ocxy6dxefN1MepBx/iD1dH5K8qNtNe227I0mnTRjry8tj5MRk4zprLEdG8WPyAPb93/e4pSgi1SoHdgOa4w==} engines: {node: '>=18'} cpu: [arm64] os: [freebsd] - '@esbuild/freebsd-x64@0.24.2': - resolution: {integrity: sha512-TvW7wE/89PYW+IevEJXZ5sF6gJRDY/14hyIGFXdIucxCsbRmLUcjseQu1SyTko+2idmCw94TgyaEZi9HUSOe3Q==} - engines: {node: '>=18'} - cpu: [x64] - os: [freebsd] - '@esbuild/freebsd-x64@0.25.0': resolution: {integrity: sha512-mrSgt7lCh07FY+hDD1TxiTyIHyttn6vnjesnPoVDNmDfOmggTLXRv8Id5fNZey1gl/V2dyVK1VXXqVsQIiAk+A==} engines: {node: '>=18'} cpu: [x64] os: [freebsd] - '@esbuild/linux-arm64@0.24.2': - resolution: {integrity: sha512-7HnAD6074BW43YvvUmE/35Id9/NB7BeX5EoNkK9obndmZBUk8xmJJeU7DwmUeN7tkysslb2eSl6CTrYz6oEMQg==} - engines: {node: '>=18'} - cpu: [arm64] - os: [linux] - '@esbuild/linux-arm64@0.25.0': resolution: {integrity: sha512-9QAQjTWNDM/Vk2bgBl17yWuZxZNQIF0OUUuPZRKoDtqF2k4EtYbpyiG5/Dk7nqeK6kIJWPYldkOcBqjXjrUlmg==} engines: {node: '>=18'} cpu: [arm64] os: [linux] - '@esbuild/linux-arm@0.24.2': - resolution: {integrity: sha512-n0WRM/gWIdU29J57hJyUdIsk0WarGd6To0s+Y+LwvlC55wt+GT/OgkwoXCXvIue1i1sSNWblHEig00GBWiJgfA==} - engines: {node: '>=18'} - cpu: [arm] - os: [linux] - '@esbuild/linux-arm@0.25.0': resolution: {integrity: sha512-vkB3IYj2IDo3g9xX7HqhPYxVkNQe8qTK55fraQyTzTX/fxaDtXiEnavv9geOsonh2Fd2RMB+i5cbhu2zMNWJwg==} engines: {node: '>=18'} cpu: [arm] os: [linux] - '@esbuild/linux-ia32@0.24.2': - resolution: {integrity: sha512-sfv0tGPQhcZOgTKO3oBE9xpHuUqguHvSo4jl+wjnKwFpapx+vUDcawbwPNuBIAYdRAvIDBfZVvXprIj3HA+Ugw==} - engines: {node: '>=18'} - cpu: [ia32] - os: [linux] - '@esbuild/linux-ia32@0.25.0': resolution: {integrity: sha512-43ET5bHbphBegyeqLb7I1eYn2P/JYGNmzzdidq/w0T8E2SsYL1U6un2NFROFRg1JZLTzdCoRomg8Rvf9M6W6Gg==} engines: {node: '>=18'} cpu: [ia32] os: [linux] - '@esbuild/linux-loong64@0.24.2': - resolution: {integrity: sha512-CN9AZr8kEndGooS35ntToZLTQLHEjtVB5n7dl8ZcTZMonJ7CCfStrYhrzF97eAecqVbVJ7APOEe18RPI4KLhwQ==} - engines: {node: '>=18'} - cpu: [loong64] - os: [linux] - '@esbuild/linux-loong64@0.25.0': resolution: {integrity: sha512-fC95c/xyNFueMhClxJmeRIj2yrSMdDfmqJnyOY4ZqsALkDrrKJfIg5NTMSzVBr5YW1jf+l7/cndBfP3MSDpoHw==} engines: {node: '>=18'} cpu: [loong64] os: [linux] - '@esbuild/linux-mips64el@0.24.2': - resolution: {integrity: sha512-iMkk7qr/wl3exJATwkISxI7kTcmHKE+BlymIAbHO8xanq/TjHaaVThFF6ipWzPHryoFsesNQJPE/3wFJw4+huw==} - engines: {node: '>=18'} - cpu: [mips64el] - os: [linux] - '@esbuild/linux-mips64el@0.25.0': resolution: {integrity: sha512-nkAMFju7KDW73T1DdH7glcyIptm95a7Le8irTQNO/qtkoyypZAnjchQgooFUDQhNAy4iu08N79W4T4pMBwhPwQ==} engines: {node: '>=18'} cpu: [mips64el] os: [linux] - '@esbuild/linux-ppc64@0.24.2': - resolution: {integrity: sha512-shsVrgCZ57Vr2L8mm39kO5PPIb+843FStGt7sGGoqiiWYconSxwTiuswC1VJZLCjNiMLAMh34jg4VSEQb+iEbw==} - engines: {node: '>=18'} - cpu: [ppc64] - os: [linux] - '@esbuild/linux-ppc64@0.25.0': resolution: {integrity: sha512-NhyOejdhRGS8Iwv+KKR2zTq2PpysF9XqY+Zk77vQHqNbo/PwZCzB5/h7VGuREZm1fixhs4Q/qWRSi5zmAiO4Fw==} engines: {node: '>=18'} cpu: [ppc64] os: [linux] - '@esbuild/linux-riscv64@0.24.2': - resolution: {integrity: sha512-4eSFWnU9Hhd68fW16GD0TINewo1L6dRrB+oLNNbYyMUAeOD2yCK5KXGK1GH4qD/kT+bTEXjsyTCiJGHPZ3eM9Q==} - engines: {node: '>=18'} - cpu: [riscv64] - os: [linux] - '@esbuild/linux-riscv64@0.25.0': resolution: {integrity: sha512-5S/rbP5OY+GHLC5qXp1y/Mx//e92L1YDqkiBbO9TQOvuFXM+iDqUNG5XopAnXoRH3FjIUDkeGcY1cgNvnXp/kA==} engines: {node: '>=18'} cpu: [riscv64] os: [linux] - '@esbuild/linux-s390x@0.24.2': - resolution: {integrity: sha512-S0Bh0A53b0YHL2XEXC20bHLuGMOhFDO6GN4b3YjRLK//Ep3ql3erpNcPlEFed93hsQAjAQDNsvcK+hV90FubSw==} - engines: {node: '>=18'} - cpu: [s390x] - os: [linux] - '@esbuild/linux-s390x@0.25.0': resolution: {integrity: sha512-XM2BFsEBz0Fw37V0zU4CXfcfuACMrppsMFKdYY2WuTS3yi8O1nFOhil/xhKTmE1nPmVyvQJjJivgDT+xh8pXJA==} engines: {node: '>=18'} cpu: [s390x] os: [linux] - '@esbuild/linux-x64@0.24.2': - resolution: {integrity: sha512-8Qi4nQcCTbLnK9WoMjdC9NiTG6/E38RNICU6sUNqK0QFxCYgoARqVqxdFmWkdonVsvGqWhmm7MO0jyTqLqwj0Q==} - engines: {node: '>=18'} - cpu: [x64] - os: [linux] - '@esbuild/linux-x64@0.25.0': resolution: {integrity: sha512-9yl91rHw/cpwMCNytUDxwj2XjFpxML0y9HAOH9pNVQDpQrBxHy01Dx+vaMu0N1CKa/RzBD2hB4u//nfc+Sd3Cw==} engines: {node: '>=18'} cpu: [x64] os: [linux] - '@esbuild/netbsd-arm64@0.24.2': - resolution: {integrity: sha512-wuLK/VztRRpMt9zyHSazyCVdCXlpHkKm34WUyinD2lzK07FAHTq0KQvZZlXikNWkDGoT6x3TD51jKQ7gMVpopw==} - engines: {node: '>=18'} - cpu: [arm64] - os: [netbsd] - '@esbuild/netbsd-arm64@0.25.0': resolution: {integrity: sha512-RuG4PSMPFfrkH6UwCAqBzauBWTygTvb1nxWasEJooGSJ/NwRw7b2HOwyRTQIU97Hq37l3npXoZGYMy3b3xYvPw==} engines: {node: '>=18'} cpu: [arm64] os: [netbsd] - '@esbuild/netbsd-x64@0.24.2': - resolution: {integrity: sha512-VefFaQUc4FMmJuAxmIHgUmfNiLXY438XrL4GDNV1Y1H/RW3qow68xTwjZKfj/+Plp9NANmzbH5R40Meudu8mmw==} - engines: {node: '>=18'} - cpu: [x64] - os: [netbsd] - '@esbuild/netbsd-x64@0.25.0': resolution: {integrity: sha512-jl+qisSB5jk01N5f7sPCsBENCOlPiS/xptD5yxOx2oqQfyourJwIKLRA2yqWdifj3owQZCL2sn6o08dBzZGQzA==} engines: {node: '>=18'} cpu: [x64] os: [netbsd] - '@esbuild/openbsd-arm64@0.24.2': - resolution: {integrity: sha512-YQbi46SBct6iKnszhSvdluqDmxCJA+Pu280Av9WICNwQmMxV7nLRHZfjQzwbPs3jeWnuAhE9Jy0NrnJ12Oz+0A==} - engines: {node: '>=18'} - cpu: [arm64] - os: [openbsd] - '@esbuild/openbsd-arm64@0.25.0': resolution: {integrity: sha512-21sUNbq2r84YE+SJDfaQRvdgznTD8Xc0oc3p3iW/a1EVWeNj/SdUCbm5U0itZPQYRuRTW20fPMWMpcrciH2EJw==} engines: {node: '>=18'} cpu: [arm64] os: [openbsd] - '@esbuild/openbsd-x64@0.24.2': - resolution: {integrity: sha512-+iDS6zpNM6EnJyWv0bMGLWSWeXGN/HTaF/LXHXHwejGsVi+ooqDfMCCTerNFxEkM3wYVcExkeGXNqshc9iMaOA==} - engines: {node: '>=18'} - cpu: [x64] - os: [openbsd] - '@esbuild/openbsd-x64@0.25.0': resolution: {integrity: sha512-2gwwriSMPcCFRlPlKx3zLQhfN/2WjJ2NSlg5TKLQOJdV0mSxIcYNTMhk3H3ulL/cak+Xj0lY1Ym9ysDV1igceg==} engines: {node: '>=18'} cpu: [x64] os: [openbsd] - '@esbuild/sunos-x64@0.24.2': - resolution: {integrity: sha512-hTdsW27jcktEvpwNHJU4ZwWFGkz2zRJUz8pvddmXPtXDzVKTTINmlmga3ZzwcuMpUvLw7JkLy9QLKyGpD2Yxig==} - engines: {node: '>=18'} - cpu: [x64] - os: [sunos] - '@esbuild/sunos-x64@0.25.0': resolution: {integrity: sha512-bxI7ThgLzPrPz484/S9jLlvUAHYMzy6I0XiU1ZMeAEOBcS0VePBFxh1JjTQt3Xiat5b6Oh4x7UC7IwKQKIJRIg==} engines: {node: '>=18'} cpu: [x64] os: [sunos] - '@esbuild/win32-arm64@0.24.2': - resolution: {integrity: sha512-LihEQ2BBKVFLOC9ZItT9iFprsE9tqjDjnbulhHoFxYQtQfai7qfluVODIYxt1PgdoyQkz23+01rzwNwYfutxUQ==} - engines: {node: '>=18'} - cpu: [arm64] - os: [win32] - '@esbuild/win32-arm64@0.25.0': resolution: {integrity: sha512-ZUAc2YK6JW89xTbXvftxdnYy3m4iHIkDtK3CLce8wg8M2L+YZhIvO1DKpxrd0Yr59AeNNkTiic9YLf6FTtXWMw==} engines: {node: '>=18'} cpu: [arm64] os: [win32] - '@esbuild/win32-ia32@0.24.2': - resolution: {integrity: sha512-q+iGUwfs8tncmFC9pcnD5IvRHAzmbwQ3GPS5/ceCyHdjXubwQWI12MKWSNSMYLJMq23/IUCvJMS76PDqXe1fxA==} - engines: {node: '>=18'} - cpu: [ia32] - os: [win32] - '@esbuild/win32-ia32@0.25.0': resolution: {integrity: sha512-eSNxISBu8XweVEWG31/JzjkIGbGIJN/TrRoiSVZwZ6pkC6VX4Im/WV2cz559/TXLcYbcrDN8JtKgd9DJVIo8GA==} engines: {node: '>=18'} cpu: [ia32] os: [win32] - '@esbuild/win32-x64@0.24.2': - resolution: {integrity: sha512-7VTgWzgMGvup6aSqDPLiW5zHaxYJGTO4OokMjIlrCtf+VpEL+cXKtCvg723iguPYI5oaUNdS+/V7OU2gvXVWEg==} - engines: {node: '>=18'} - cpu: [x64] - os: [win32] - '@esbuild/win32-x64@0.25.0': resolution: {integrity: sha512-ZENoHJBxA20C2zFzh6AI4fT6RraMzjYw4xKWemRTRmRVtN9c5DcH9r/f2ihEkMjOW5eGgrwCslG/+Y/3bL+DHQ==} engines: {node: '>=18'} @@ -788,8 +638,8 @@ packages: '@iconify-json/logos@1.2.4': resolution: {integrity: sha512-XC4If5D/hbaZvUkTV8iaZuGlQCyG6CNOlaAaJaGa13V5QMYwYjgtKk3vPP8wz3wtTVNVEVk3LRx1fOJz+YnSMw==} - '@iconify-json/simple-icons@1.2.26': - resolution: {integrity: sha512-NvqRuE+5h/tp4boPlnvfs0alD0CvnRE7oeG9Li5NGmZRx2/rhwlNjW/vEVTyhZcR9zqvRPAVh2GXR+PTEpzV+A==} + '@iconify-json/simple-icons@1.2.27': + resolution: {integrity: sha512-FtZwp/H7ih5rY9FPfDR+k6toOo/cuwpHWY8faNhxLs5O5uW6Q8TeqdNWfjVfgFtrs5tUUzWysjqNGL234v8EMA==} '@iconify-json/vscode-icons@1.2.16': resolution: {integrity: sha512-hstc2yVq2UJ6v6FrgjftzXRvphGZBsKxvSeXoFLP1Hgx89TPZKrGE5SV6vqsoeIlLYaQ7OZbXmAoVGroTfGmVQ==} @@ -870,8 +720,8 @@ packages: rollup: optional: true - '@rollup/plugin-commonjs@28.0.2': - resolution: {integrity: sha512-BEFI2EDqzl+vA1rl97IDRZ61AIwGH093d9nz8+dThxJNH8oSoB7MjWvPCX3dkaK1/RCJ/1v/R1XB15FuSs0fQw==} + '@rollup/plugin-commonjs@28.0.3': + resolution: {integrity: sha512-pyltgilam1QPdn+Zd9gaCfOLcnjMEJ9gV+bTw6/r73INdvzf1ah9zLIJBm+kW7R6IUFIQ1YO+VqZtYxZNWFPEQ==} engines: {node: '>=16.0.0 || 14 >= 14.17'} peerDependencies: rollup: ^2.68.0||^3.0.0||^4.0.0 @@ -915,124 +765,124 @@ packages: rollup: optional: true - '@rollup/rollup-android-arm-eabi@4.34.8': - resolution: {integrity: sha512-q217OSE8DTp8AFHuNHXo0Y86e1wtlfVrXiAlwkIvGRQv9zbc6mE3sjIVfwI8sYUyNxwOg0j/Vm1RKM04JcWLJw==} + '@rollup/rollup-android-arm-eabi@4.34.9': + resolution: {integrity: sha512-qZdlImWXur0CFakn2BJ2znJOdqYZKiedEPEVNTBrpfPjc/YuTGcaYZcdmNFTkUj3DU0ZM/AElcM8Ybww3xVLzA==} cpu: [arm] os: [android] - '@rollup/rollup-android-arm64@4.34.8': - resolution: {integrity: sha512-Gigjz7mNWaOL9wCggvoK3jEIUUbGul656opstjaUSGC3eT0BM7PofdAJaBfPFWWkXNVAXbaQtC99OCg4sJv70Q==} + '@rollup/rollup-android-arm64@4.34.9': + resolution: {integrity: sha512-4KW7P53h6HtJf5Y608T1ISKvNIYLWRKMvfnG0c44M6In4DQVU58HZFEVhWINDZKp7FZps98G3gxwC1sb0wXUUg==} cpu: [arm64] os: [android] - '@rollup/rollup-darwin-arm64@4.34.8': - resolution: {integrity: sha512-02rVdZ5tgdUNRxIUrFdcMBZQoaPMrxtwSb+/hOfBdqkatYHR3lZ2A2EGyHq2sGOd0Owk80oV3snlDASC24He3Q==} + '@rollup/rollup-darwin-arm64@4.34.9': + resolution: {integrity: sha512-0CY3/K54slrzLDjOA7TOjN1NuLKERBgk9nY5V34mhmuu673YNb+7ghaDUs6N0ujXR7fz5XaS5Aa6d2TNxZd0OQ==} cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-x64@4.34.8': - resolution: {integrity: sha512-qIP/elwR/tq/dYRx3lgwK31jkZvMiD6qUtOycLhTzCvrjbZ3LjQnEM9rNhSGpbLXVJYQ3rq39A6Re0h9tU2ynw==} + '@rollup/rollup-darwin-x64@4.34.9': + resolution: {integrity: sha512-eOojSEAi/acnsJVYRxnMkPFqcxSMFfrw7r2iD9Q32SGkb/Q9FpUY1UlAu1DH9T7j++gZ0lHjnm4OyH2vCI7l7Q==} cpu: [x64] os: [darwin] - '@rollup/rollup-freebsd-arm64@4.34.8': - resolution: {integrity: sha512-IQNVXL9iY6NniYbTaOKdrlVP3XIqazBgJOVkddzJlqnCpRi/yAeSOa8PLcECFSQochzqApIOE1GHNu3pCz+BDA==} + '@rollup/rollup-freebsd-arm64@4.34.9': + resolution: {integrity: sha512-2lzjQPJbN5UnHm7bHIUKFMulGTQwdvOkouJDpPysJS+QFBGDJqcfh+CxxtG23Ik/9tEvnebQiylYoazFMAgrYw==} cpu: [arm64] os: [freebsd] - '@rollup/rollup-freebsd-x64@4.34.8': - resolution: {integrity: sha512-TYXcHghgnCqYFiE3FT5QwXtOZqDj5GmaFNTNt3jNC+vh22dc/ukG2cG+pi75QO4kACohZzidsq7yKTKwq/Jq7Q==} + '@rollup/rollup-freebsd-x64@4.34.9': + resolution: {integrity: sha512-SLl0hi2Ah2H7xQYd6Qaiu01kFPzQ+hqvdYSoOtHYg/zCIFs6t8sV95kaoqjzjFwuYQLtOI0RZre/Ke0nPaQV+g==} cpu: [x64] os: [freebsd] - '@rollup/rollup-linux-arm-gnueabihf@4.34.8': - resolution: {integrity: sha512-A4iphFGNkWRd+5m3VIGuqHnG3MVnqKe7Al57u9mwgbyZ2/xF9Jio72MaY7xxh+Y87VAHmGQr73qoKL9HPbXj1g==} + '@rollup/rollup-linux-arm-gnueabihf@4.34.9': + resolution: {integrity: sha512-88I+D3TeKItrw+Y/2ud4Tw0+3CxQ2kLgu3QvrogZ0OfkmX/DEppehus7L3TS2Q4lpB+hYyxhkQiYPJ6Mf5/dPg==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm-musleabihf@4.34.8': - resolution: {integrity: sha512-S0lqKLfTm5u+QTxlFiAnb2J/2dgQqRy/XvziPtDd1rKZFXHTyYLoVL58M/XFwDI01AQCDIevGLbQrMAtdyanpA==} + '@rollup/rollup-linux-arm-musleabihf@4.34.9': + resolution: {integrity: sha512-3qyfWljSFHi9zH0KgtEPG4cBXHDFhwD8kwg6xLfHQ0IWuH9crp005GfoUUh/6w9/FWGBwEHg3lxK1iHRN1MFlA==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm64-gnu@4.34.8': - resolution: {integrity: sha512-jpz9YOuPiSkL4G4pqKrus0pn9aYwpImGkosRKwNi+sJSkz+WU3anZe6hi73StLOQdfXYXC7hUfsQlTnjMd3s1A==} + '@rollup/rollup-linux-arm64-gnu@4.34.9': + resolution: {integrity: sha512-6TZjPHjKZUQKmVKMUowF3ewHxctrRR09eYyvT5eFv8w/fXarEra83A2mHTVJLA5xU91aCNOUnM+DWFMSbQ0Nxw==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-arm64-musl@4.34.8': - resolution: {integrity: sha512-KdSfaROOUJXgTVxJNAZ3KwkRc5nggDk+06P6lgi1HLv1hskgvxHUKZ4xtwHkVYJ1Rep4GNo+uEfycCRRxht7+Q==} + '@rollup/rollup-linux-arm64-musl@4.34.9': + resolution: {integrity: sha512-LD2fytxZJZ6xzOKnMbIpgzFOuIKlxVOpiMAXawsAZ2mHBPEYOnLRK5TTEsID6z4eM23DuO88X0Tq1mErHMVq0A==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-loongarch64-gnu@4.34.8': - resolution: {integrity: sha512-NyF4gcxwkMFRjgXBM6g2lkT58OWztZvw5KkV2K0qqSnUEqCVcqdh2jN4gQrTn/YUpAcNKyFHfoOZEer9nwo6uQ==} + '@rollup/rollup-linux-loongarch64-gnu@4.34.9': + resolution: {integrity: sha512-dRAgTfDsn0TE0HI6cmo13hemKpVHOEyeciGtvlBTkpx/F65kTvShtY/EVyZEIfxFkV5JJTuQ9tP5HGBS0hfxIg==} cpu: [loong64] os: [linux] - '@rollup/rollup-linux-powerpc64le-gnu@4.34.8': - resolution: {integrity: sha512-LMJc999GkhGvktHU85zNTDImZVUCJ1z/MbAJTnviiWmmjyckP5aQsHtcujMjpNdMZPT2rQEDBlJfubhs3jsMfw==} + '@rollup/rollup-linux-powerpc64le-gnu@4.34.9': + resolution: {integrity: sha512-PHcNOAEhkoMSQtMf+rJofwisZqaU8iQ8EaSps58f5HYll9EAY5BSErCZ8qBDMVbq88h4UxaNPlbrKqfWP8RfJA==} cpu: [ppc64] os: [linux] - '@rollup/rollup-linux-riscv64-gnu@4.34.8': - resolution: {integrity: sha512-xAQCAHPj8nJq1PI3z8CIZzXuXCstquz7cIOL73HHdXiRcKk8Ywwqtx2wrIy23EcTn4aZ2fLJNBB8d0tQENPCmw==} + '@rollup/rollup-linux-riscv64-gnu@4.34.9': + resolution: {integrity: sha512-Z2i0Uy5G96KBYKjeQFKbbsB54xFOL5/y1P5wNBsbXB8yE+At3oh0DVMjQVzCJRJSfReiB2tX8T6HUFZ2k8iaKg==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-s390x-gnu@4.34.8': - resolution: {integrity: sha512-DdePVk1NDEuc3fOe3dPPTb+rjMtuFw89gw6gVWxQFAuEqqSdDKnrwzZHrUYdac7A7dXl9Q2Vflxpme15gUWQFA==} + '@rollup/rollup-linux-s390x-gnu@4.34.9': + resolution: {integrity: sha512-U+5SwTMoeYXoDzJX5dhDTxRltSrIax8KWwfaaYcynuJw8mT33W7oOgz0a+AaXtGuvhzTr2tVKh5UO8GVANTxyQ==} cpu: [s390x] os: [linux] - '@rollup/rollup-linux-x64-gnu@4.34.8': - resolution: {integrity: sha512-8y7ED8gjxITUltTUEJLQdgpbPh1sUQ0kMTmufRF/Ns5tI9TNMNlhWtmPKKHCU0SilX+3MJkZ0zERYYGIVBYHIA==} + '@rollup/rollup-linux-x64-gnu@4.34.9': + resolution: {integrity: sha512-FwBHNSOjUTQLP4MG7y6rR6qbGw4MFeQnIBrMe161QGaQoBQLqSUEKlHIiVgF3g/mb3lxlxzJOpIBhaP+C+KP2A==} cpu: [x64] os: [linux] - '@rollup/rollup-linux-x64-musl@4.34.8': - resolution: {integrity: sha512-SCXcP0ZpGFIe7Ge+McxY5zKxiEI5ra+GT3QRxL0pMMtxPfpyLAKleZODi1zdRHkz5/BhueUrYtYVgubqe9JBNQ==} + '@rollup/rollup-linux-x64-musl@4.34.9': + resolution: {integrity: sha512-cYRpV4650z2I3/s6+5/LONkjIz8MBeqrk+vPXV10ORBnshpn8S32bPqQ2Utv39jCiDcO2eJTuSlPXpnvmaIgRA==} cpu: [x64] os: [linux] - '@rollup/rollup-win32-arm64-msvc@4.34.8': - resolution: {integrity: sha512-YHYsgzZgFJzTRbth4h7Or0m5O74Yda+hLin0irAIobkLQFRQd1qWmnoVfwmKm9TXIZVAD0nZ+GEb2ICicLyCnQ==} + '@rollup/rollup-win32-arm64-msvc@4.34.9': + resolution: {integrity: sha512-z4mQK9dAN6byRA/vsSgQiPeuO63wdiDxZ9yg9iyX2QTzKuQM7T4xlBoeUP/J8uiFkqxkcWndWi+W7bXdPbt27Q==} cpu: [arm64] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.34.8': - resolution: {integrity: sha512-r3NRQrXkHr4uWy5TOjTpTYojR9XmF0j/RYgKCef+Ag46FWUTltm5ziticv8LdNsDMehjJ543x/+TJAek/xBA2w==} + '@rollup/rollup-win32-ia32-msvc@4.34.9': + resolution: {integrity: sha512-KB48mPtaoHy1AwDNkAJfHXvHp24H0ryZog28spEs0V48l3H1fr4i37tiyHsgKZJnCmvxsbATdZGBpbmxTE3a9w==} cpu: [ia32] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.34.8': - resolution: {integrity: sha512-U0FaE5O1BCpZSeE6gBl3c5ObhePQSfk9vDRToMmTkbhCOgW4jqvtS5LGyQ76L1fH8sM0keRp4uDTsbjiUyjk0g==} + '@rollup/rollup-win32-x64-msvc@4.34.9': + resolution: {integrity: sha512-AyleYRPU7+rgkMWbEh71fQlrzRfeP6SyMnRf9XX4fCdDPAJumdSBqYEcWPMzVQ4ScAl7E4oFfK0GUVn77xSwbw==} cpu: [x64] os: [win32] '@sec-ant/readable-stream@0.4.1': resolution: {integrity: sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==} - '@shikijs/core@3.0.0': - resolution: {integrity: sha512-gSm3JQf2J2psiUn5bWokmZwnu5N0jfBtRps4CQ1B+qrFvmZCRAkMVoaxgl9qZgAFK5KisLAS3//XaMFVytYHKw==} + '@shikijs/core@3.1.0': + resolution: {integrity: sha512-1ppAOyg3F18N8Ge9DmJjGqRVswihN33rOgPovR6gUHW17Hw1L4RlRhnmVQcsacSHh0A8IO1FIgNbtTxUFwodmg==} - '@shikijs/engine-javascript@3.0.0': - resolution: {integrity: sha512-zoB10hTfvk1iZk1ldt6VaF+0iucQL+4TtSvTdTu5MhOeLPLEf5nZ8Wz6uxlp99y627OLalYa2z4W0iTTwb6oyA==} + '@shikijs/engine-javascript@3.1.0': + resolution: {integrity: sha512-/LwkhW17jYi7uPcdaaSQQDNW+xgrHXarkrxYPoC6WPzH2xW5mFMw12doHXJBqxmYvtcTbaatcv2MkH9+3PU1FA==} - '@shikijs/engine-oniguruma@3.0.0': - resolution: {integrity: sha512-uM9lqwMrlPHPVcdpAN/4pAzTJah1pY7mi9f1MxG887SDkjF/tdiQK+5200Y8N5Hg125sewdMQ1K2agoAo8hDiA==} + '@shikijs/engine-oniguruma@3.1.0': + resolution: {integrity: sha512-reRgy8VzDPdiDocuGDD60Rk/jLxgcgy+6H4n6jYLeN2Yw5ikasRjQQx8ERXtDM35yg2v/d6KolDBcK8hYYhcmw==} - '@shikijs/langs@3.0.0': - resolution: {integrity: sha512-HBsZAukiYz7k3hzttPWa0en3PABEwK3cpxcAcERRwvwuKc5pn0Y+yPxAIYZtN9cFdtNqrbFJNhfcEu/xbG1u/A==} + '@shikijs/langs@3.1.0': + resolution: {integrity: sha512-hAM//sExPXAXG3ZDWjrmV6Vlw4zlWFOcT1ZXNhFRBwPP27scZu/ZIdZ+TdTgy06zSvyF4KIjnF8j6+ScKGu6ww==} - '@shikijs/themes@3.0.0': - resolution: {integrity: sha512-mz63nyVB5nXWsv5H2hifDFIThZEJ/cJhMq1/+0JjMdOuuBq2H2D1Fn8UM5yzUtEvap/ipRltv381+hsHZFs4ug==} + '@shikijs/themes@3.1.0': + resolution: {integrity: sha512-A4MJmy9+ydLNbNCtkmdTp8a+ON+MMXoUe1KTkELkyu0+pHGOcbouhNuobhZoK59cL4cOST6CCz1x+kUdkp9UZA==} - '@shikijs/transformers@3.0.0': - resolution: {integrity: sha512-N6iwlPt1IN4oQMdwSqWJhveBjfY2eLBjdmGglPngQ9ML1OPAgCPog0hI1lFPl52Rx7+s7GGuvWsSIu4zCUv2XA==} + '@shikijs/transformers@3.1.0': + resolution: {integrity: sha512-Et+agcilvJOmWh/goUczrdM6R35JrEr8B8xZxJVv6rCIpUo2rICtWZF4YBUIILx5mV78455EcYyFPCrk3lJ+nw==} - '@shikijs/types@3.0.0': - resolution: {integrity: sha512-kh/xgZHxI6m9trVvPw+C47jyVHx190r0F5gkF+VO5vYB54UtcoPJe66dzZmK7GbJbzmtGEGbOwct/jsoPjjUqg==} + '@shikijs/types@3.1.0': + resolution: {integrity: sha512-F8e7Fy4ihtcNpJG572BZZC1ErYrBrzJ5Cbc9Zi3REgWry43gIvjJ9lFAoUnuy7Bvy4IFz7grUSxL5edfrrjFEA==} '@shikijs/vscode-textmate@10.0.2': resolution: {integrity: sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==} @@ -1080,8 +930,8 @@ packages: '@types/lodash.template@4.5.3': resolution: {integrity: sha512-Mo0UYKLu1oXgkV9TVoXZLlXXjyIXlW7ZQRxi/4gQJmzJr63dmicE8gG0OkPjYTKBrBic852q0JzqrtNUWLBIyA==} - '@types/lodash@4.17.15': - resolution: {integrity: sha512-w/P33JFeySuhN6JLkysYUK2gEmy9kHHFN7E8ro0tkfmlDOgxBDzWEZ/J8cWA+fHqFevpswDTFZnDx+R9lbL6xw==} + '@types/lodash@4.17.16': + resolution: {integrity: sha512-HX7Em5NYQAXKW+1T+FiuG27NGwzJfCX3s1GjOa7ujxZa52kjJLOr4FUxT+giF6Tgxv1e+/czV/iTtBw27WTU9g==} '@types/mark.js@8.11.12': resolution: {integrity: sha512-244ZnaIBpz4c6xutliAnYVZp6xJlmC569jZqnR3ElO1Y01ooYASSVQEqpd2x0A2UfrgVMs5V9/9tUAdZaDMytQ==} @@ -1113,8 +963,8 @@ packages: '@types/node@17.0.45': resolution: {integrity: sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==} - '@types/node@22.13.5': - resolution: {integrity: sha512-+lTU0PxZXn0Dr1NBtC7Y8cR21AJr87dLLU953CWA6pMxxv/UDc7jYAY90upcrie1nRcD6XNG5HOYEDtgW5TxAg==} + '@types/node@22.13.9': + resolution: {integrity: sha512-acBjXdRJ3A6Pb3tqnw9HZmyR3Fiol3aGxRCK1x3d+6CDAMjl7I649wpSd+yNURCjbOUGu9tqtLKnTGxmK6CyGw==} '@types/normalize-package-data@2.4.4': resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} @@ -1143,8 +993,8 @@ packages: '@types/unist@3.0.3': resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} - '@types/web-bluetooth@0.0.20': - resolution: {integrity: sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==} + '@types/web-bluetooth@0.0.21': + resolution: {integrity: sha512-oIQLCGWtcFZy2JW77j9k8nHzAOpqMHLQejDA48XXMWH6tjCQHz5RCFz1bzsmROyL6PUm+LLnUiI4BCn221inxA==} '@ungap/structured-clone@1.3.0': resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} @@ -1156,11 +1006,11 @@ packages: vite: ^5.0.0 || ^6.0.0 vue: ^3.2.25 - '@vitest/expect@3.0.7': - resolution: {integrity: sha512-QP25f+YJhzPfHrHfYHtvRn+uvkCFCqFtW9CktfBxmB+25QqWsx7VB2As6f4GmwllHLDhXNHvqedwhvMmSnNmjw==} + '@vitest/expect@3.0.8': + resolution: {integrity: sha512-Xu6TTIavTvSSS6LZaA3EebWFr6tsoXPetOWNMOlc7LO88QVVBwq2oQWBoDiLCN6YTvNYsGSjqOO8CAdjom5DCQ==} - '@vitest/mocker@3.0.7': - resolution: {integrity: sha512-qui+3BLz9Eonx4EAuR/i+QlCX6AUZ35taDQgwGkK/Tw6/WgwodSrjN1X2xf69IA/643ZX5zNKIn2svvtZDrs4w==} + '@vitest/mocker@3.0.8': + resolution: {integrity: sha512-n3LjS7fcW1BCoF+zWZxG7/5XvuYH+lsFg+BDwwAz0arIwHQJFUEsKBQ0BLU49fCxuM/2HSeBPHQD8WjgrxMfow==} peerDependencies: msw: ^2.4.9 vite: ^5.0.0 || ^6.0.0 @@ -1170,29 +1020,29 @@ packages: vite: optional: true - '@vitest/pretty-format@3.0.7': - resolution: {integrity: sha512-CiRY0BViD/V8uwuEzz9Yapyao+M9M008/9oMOSQydwbwb+CMokEq3XVaF3XK/VWaOK0Jm9z7ENhybg70Gtxsmg==} + '@vitest/pretty-format@3.0.8': + resolution: {integrity: sha512-BNqwbEyitFhzYMYHUVbIvepOyeQOSFA/NeJMIP9enMntkkxLgOcgABH6fjyXG85ipTgvero6noreavGIqfJcIg==} - '@vitest/runner@3.0.7': - resolution: {integrity: sha512-WeEl38Z0S2ZcuRTeyYqaZtm4e26tq6ZFqh5y8YD9YxfWuu0OFiGFUbnxNynwLjNRHPsXyee2M9tV7YxOTPZl2g==} + '@vitest/runner@3.0.8': + resolution: {integrity: sha512-c7UUw6gEcOzI8fih+uaAXS5DwjlBaCJUo7KJ4VvJcjL95+DSR1kova2hFuRt3w41KZEFcOEiq098KkyrjXeM5w==} - '@vitest/snapshot@3.0.7': - resolution: {integrity: sha512-eqTUryJWQN0Rtf5yqCGTQWsCFOQe4eNz5Twsu21xYEcnFJtMU5XvmG0vgebhdLlrHQTSq5p8vWHJIeJQV8ovsA==} + '@vitest/snapshot@3.0.8': + resolution: {integrity: sha512-x8IlMGSEMugakInj44nUrLSILh/zy1f2/BgH0UeHpNyOocG18M9CWVIFBaXPt8TrqVZWmcPjwfG/ht5tnpba8A==} - '@vitest/spy@3.0.7': - resolution: {integrity: sha512-4T4WcsibB0B6hrKdAZTM37ekuyFZt2cGbEGd2+L0P8ov15J1/HUsUaqkXEQPNAWr4BtPPe1gI+FYfMHhEKfR8w==} + '@vitest/spy@3.0.8': + resolution: {integrity: sha512-MR+PzJa+22vFKYb934CejhR4BeRpMSoxkvNoDit68GQxRLSf11aT6CTj3XaqUU9rxgWJFnqicN/wxw6yBRkI1Q==} - '@vitest/utils@3.0.7': - resolution: {integrity: sha512-xePVpCRfooFX3rANQjwoditoXgWb1MaFbzmGuPP59MK6i13mrnDw/yEIyJudLeW6/38mCNcwCiJIGmpDPibAIg==} + '@vitest/utils@3.0.8': + resolution: {integrity: sha512-nkBC3aEhfX2PdtQI/QwAWp8qZWwzASsU4Npbcd5RdMPBSSLCpkZp52P3xku3s3uA0HIEhGvEcF8rNkBsz9dQ4Q==} - '@volar/language-core@2.4.11': - resolution: {integrity: sha512-lN2C1+ByfW9/JRPpqScuZt/4OrUUse57GLI6TbLgTIqBVemdl1wNcZ1qYGEo2+Gw8coYLgCy7SuKqn6IrQcQgg==} + '@volar/language-core@2.4.12': + resolution: {integrity: sha512-RLrFdXEaQBWfSnYGVxvR2WrO6Bub0unkdHYIdC31HzIEqATIuuhRRzYu76iGPZ6OtA4Au1SnW0ZwIqPP217YhA==} - '@volar/source-map@2.4.11': - resolution: {integrity: sha512-ZQpmafIGvaZMn/8iuvCFGrW3smeqkq/IIh9F1SdSx9aUl0J4Iurzd6/FhmjNO5g2ejF3rT45dKskgXWiofqlZQ==} + '@volar/source-map@2.4.12': + resolution: {integrity: sha512-bUFIKvn2U0AWojOaqf63ER0N/iHIBYZPpNGogfLPQ68F5Eet6FnLlyho7BS0y2HJ1jFhSif7AcuTx1TqsCzRzw==} - '@volar/typescript@2.4.11': - resolution: {integrity: sha512-2DT+Tdh88Spp5PyPbqhyoYavYCPDsqbHLFwcUI9K1NlY1YgUJvujGdrqUp0zWxnW7KWNTr3xSpMuv2WnaTKDAw==} + '@volar/typescript@2.4.12': + resolution: {integrity: sha512-HJB73OTJDgPc80K30wxi3if4fSsZZAOScbj2fcicMuOPoOkcf9NNAINb33o+DzhBdF9xTKC1gnPmIRDous5S0g==} '@vue/compiler-core@3.5.13': resolution: {integrity: sha512-oOdAkwqUfW1WqpwSYJce06wvt6HljgY3fGeM9NcVA1HaYOij3mZG9Rkysn0OHuyUAGMbEbARIpsG+LPVlBJ5/Q==} @@ -1218,8 +1068,8 @@ packages: '@vue/devtools-shared@7.7.2': resolution: {integrity: sha512-uBFxnp8gwW2vD6FrJB8JZLUzVb6PNRG0B0jBnHsOH8uKyva2qINY8PTF5Te4QlTbMDqU5K6qtJDr6cNsKWhbOA==} - '@vue/language-core@2.2.0': - resolution: {integrity: sha512-O1ZZFaaBGkKbsRfnVH1ifOK1/1BUkyK+3SQsfnh6PmMmD4qJcTU8godCeA96jjDRTL6zgnK7YzCHfaUlH2r0Mw==} + '@vue/language-core@2.2.8': + resolution: {integrity: sha512-rrzB0wPGBvcwaSNRriVWdNAbHQWSf0NlGqgKHK5mEkXpefjUlVRP62u03KvwZpvKVjRnBIQ/Lwre+Mx9N6juUQ==} peerDependencies: typescript: '*' peerDependenciesMeta: @@ -1243,11 +1093,11 @@ packages: '@vue/shared@3.5.13': resolution: {integrity: sha512-/hnE/qP5ZoGpol0a5mDi45bOd7t3tjYJBjsgCsivow7D48cJeV5l05RD82lPqi7gRiphZM37rnhW1l6ZoCNNnQ==} - '@vueuse/core@12.7.0': - resolution: {integrity: sha512-jtK5B7YjZXmkGNHjviyGO4s3ZtEhbzSgrbX+s5o+Lr8i2nYqNyHuPVOeTdM1/hZ5Tkxg/KktAuAVDDiHMraMVA==} + '@vueuse/core@12.8.2': + resolution: {integrity: sha512-HbvCmZdzAu3VGi/pWYm5Ut+Kd9mn1ZHnn4L5G8kOQTPs/IwIAmJoBrmYk2ckLArgMXZj0AW3n5CAejLUO+PhdQ==} - '@vueuse/integrations@12.7.0': - resolution: {integrity: sha512-IEq7K4bCl7mn3uKJaWtNXnd1CAPaHLUMuyj5K1/k/pVcItt0VONZW8xiGxdIovJcQjkzOHjImhX5t6gija+0/g==} + '@vueuse/integrations@12.8.2': + resolution: {integrity: sha512-fbGYivgK5uBTRt7p5F3zy6VrETlV9RtZjBqd1/HxGdjdckBgBM4ugP8LHpjolqTj14TXTxSK1ZfgPbHYyGuH7g==} peerDependencies: async-validator: ^4 axios: ^1 @@ -1287,30 +1137,30 @@ packages: universal-cookie: optional: true - '@vueuse/metadata@12.7.0': - resolution: {integrity: sha512-4VvTH9mrjXqFN5LYa5YfqHVRI6j7R00Vy4995Rw7PQxyCL3z0Lli86iN4UemWqixxEvYfRjG+hF9wL8oLOn+3g==} + '@vueuse/metadata@12.8.2': + resolution: {integrity: sha512-rAyLGEuoBJ/Il5AmFHiziCPdQzRt88VxR+Y/A/QhJ1EWtWqPBBAxTAFaSkviwEuOEZNtW8pvkPgoCZQ+HxqW1A==} - '@vueuse/shared@12.7.0': - resolution: {integrity: sha512-coLlUw2HHKsm7rPN6WqHJQr18WymN4wkA/3ThFaJ4v4gWGWAQQGK+MJxLuJTBs4mojQiazlVWAKNJNpUWGRkNw==} + '@vueuse/shared@12.8.2': + resolution: {integrity: sha512-dznP38YzxZoNloI0qpEfpkms8knDtaoQ6Y/sfS0L7Yki4zh40LFHEhur0odJC6xTHG5dxWVPiUWBXn+wCG2s5w==} abort-controller@3.0.0: resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} engines: {node: '>=6.5'} - acorn@8.14.0: - resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==} + acorn@8.14.1: + resolution: {integrity: sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==} engines: {node: '>=0.4.0'} hasBin: true add-stream@1.0.0: resolution: {integrity: sha512-qQLMr+8o0WC4FZGQTcJiKBVC59JylcPSrTtk6usvmIDFUOCKegapy1VHQwRbFMOFyb/inzUVqHs+eMYKDM1YeQ==} - algoliasearch@5.20.3: - resolution: {integrity: sha512-iNC6BGvipaalFfDfDnXUje8GUlW5asj0cTMsZJwO/0rhsyLx1L7GZFAY8wW+eQ6AM4Yge2p5GSE5hrBlfSD90Q==} + algoliasearch@5.20.4: + resolution: {integrity: sha512-wjfzqruxovJyDqga8M6Xk5XtfuVg3igrWjhjgkRya87+WwfEa1kg+IluujBLzgAiMSd6rO6jqRb7czjgeeSYgQ==} engines: {node: '>= 14.0.0'} - alien-signals@0.4.14: - resolution: {integrity: sha512-itUAVzhczTmP2U5yX67xVpsbbOiquusbWVyA9N+sy6+r6YVbFkahXvNCeEPWEOMhwDYwbVbGHFkVL03N9I5g+Q==} + alien-signals@1.0.4: + resolution: {integrity: sha512-DJqqQD3XcsaQcQ1s+iE2jDUZmmQpXwHiR6fCAim/w87luaW+vmLY8fMlrdkmRwzaFXhkxf3rqPCR59tKVv1MDw==} ansi-colors@4.1.3: resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} @@ -1355,8 +1205,8 @@ packages: asynckit@0.4.0: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} - axios@1.7.9: - resolution: {integrity: sha512-LhLcE7Hbiryz8oMDdDptSrWowmB4Bl6RCt6sIJKpRB4XtVf0iEgewX3au/pJqm+Py1kCASkb/FFKjxQaLtxJvw==} + axios@1.8.2: + resolution: {integrity: sha512-ls4GYBm5aig9vWx8AWDSGLpnpDQRtWAfrjU+EuytuODrFBkqesN2RkOQCBzrA1RQNHw1SmRMSDDDSwzNAYQ6Rg==} balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} @@ -1474,6 +1324,9 @@ packages: confbox@0.1.8: resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==} + confbox@0.2.1: + resolution: {integrity: sha512-hkT3yDPFbs95mNCy1+7qNKC6Pro+/ibzYxtM2iqEigpf0sVw+bg4Zh9/snjsBcf990vfIsg5+1U7VyiyBb3etg==} + conventional-changelog-angular@8.0.0: resolution: {integrity: sha512-CLf+zr6St0wIxos4bmaKHRXWAcsCXrJU6F4VdNDrGRK3B8LDLKoX3zuMV5GhtbGkVR/LohZ6MT6im43vZLSjmA==} engines: {node: '>=18'} @@ -1676,11 +1529,6 @@ packages: resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} engines: {node: '>= 0.4'} - esbuild@0.24.2: - resolution: {integrity: sha512-+9egpBW8I3CD5XPe0n6BfT5fxLzxrlDzqydF3aviG+9ni1lDC/OvMHcxqEFV0+LANZG5R1bFMWfUrjVsdwxJvA==} - engines: {node: '>=18'} - hasBin: true - esbuild@0.25.0: resolution: {integrity: sha512-BXq5mqc8ltbaN34cDqWuYKyNhX8D/Z0J1xdtdQ8UcIIIyJyz+ZMKUt58tF3SrZ85jcfN/PZYhjR5uDQAYNVbuw==} engines: {node: '>=18'} @@ -1728,10 +1576,13 @@ packages: resolution: {integrity: sha512-EHlpxMCpHWSAh1dgS6bVeoLAXGnJNdR93aabr4QCGbzOM73o5XmRfM/e5FUqsw3aagP8S8XEWUWFAxnRBnAF0Q==} engines: {node: ^18.19.0 || >=20.5.0} - expect-type@1.1.0: - resolution: {integrity: sha512-bFi65yM+xZgk+u/KRIpekdSYkTB5W1pEf0Lt8Q8Msh7b+eQ7LXVtIB1Bkm4fvclDEL1b2CZkMhv2mOeF8tMdkA==} + expect-type@1.2.0: + resolution: {integrity: sha512-80F22aiJ3GLyVnS/B3HzgR6RelZVumzj9jkL0Rhz4h0xYbNW9PjlQz5h3J/SShErbXBc295vseR4/MIbVmUbeA==} engines: {node: '>=12.0.0'} + exsolve@1.0.2: + resolution: {integrity: sha512-ZEcIMbthn2zeX4/wD/DLxDUjuCltHXT8Htvm/JFlTkdYgWh2+HGppgwwNUnIVxzxP7yJOPtuBAec0dLx6lVY8w==} + extend-shallow@2.0.1: resolution: {integrity: sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==} engines: {node: '>=0.10.0'} @@ -1740,8 +1591,8 @@ packages: resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} engines: {node: '>=8.6.0'} - fastq@1.19.0: - resolution: {integrity: sha512-7SFSRCNjBQIZH/xZR3iy5iQYR8aGBE0h3VG6/cwlbrpdciNYBMotQav8c1XI3HjHH+NikUpP53nPdlZSdWmFzA==} + fastq@1.19.1: + resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==} fdir@6.4.3: resolution: {integrity: sha512-PMXmW2y1hDDfTSRc9gaXIuCCRpuoz3Kaz8cUelp3smouvfT632ozg2vrT6lJsHKKOF59YLbOGfAWGUcKEfRMQw==} @@ -1763,8 +1614,8 @@ packages: resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} engines: {node: '>=8'} - find-up-simple@1.0.0: - resolution: {integrity: sha512-q7Us7kcjj2VMePAa02hDAF6d+MzsdsAWEwYyOpwUtlerRBkOEPBCRZrAV4XfcSN8fHAgaD0hP7miwoay6DCprw==} + find-up-simple@1.0.1: + resolution: {integrity: sha512-afd4O7zpqHeRyg4PfDQsXmlDe2PfdHtJt6Akt8jOWaApLOZk5JXs6VMR29lz03pRe9mpykrRCYIYxaJYcfpncQ==} engines: {node: '>=18'} focus-trap@7.6.4: @@ -2062,8 +1913,8 @@ packages: resolution: {integrity: sha512-iyAZCeyD+c1gPyE9qpFu8af0Y+MRtmKOncdGoA2S5EY8iFq99dmmvkNnHiWo+pj0s7yH7l3KPIgee77tKpXPWQ==} engines: {node: '>=18.0.0'} - local-pkg@1.0.0: - resolution: {integrity: sha512-bbgPw/wmroJsil/GgL4qjDzs5YLTBMQ99weRsok1XCDccQeehbHA/I1oRvk2NPtr7KGZgT/Y5tPRnAtMqeG2Kg==} + local-pkg@1.1.1: + resolution: {integrity: sha512-WunYko2W1NcdfAFpuLUoucsgULmgDBRkdxHxWQ7mK0cQqwPiy8E1enjuRBrhLtZkB5iScJ1XIPdhVEFK8aOLSg==} engines: {node: '>=14'} lodash._reinterpolate@3.0.0: @@ -2109,8 +1960,8 @@ packages: '@types/markdown-it': '*' markdown-it: '*' - markdown-it-async@2.0.0: - resolution: {integrity: sha512-jBthmQR5MwXR9Y8Y0teRoZAenaKQMdjuTfpbNARqMBSRPvyzyXCVduHZHakyyhL3ugIacCobXJrO07t277sIjw==} + markdown-it-async@2.2.0: + resolution: {integrity: sha512-sITME+kf799vMeO/ww/CjH6q+c05f6TLpn6VOmmWCGNqPJzSh+uFgZoMB9s0plNtW6afy63qglNAC3MhrhP/gg==} markdown-it-attrs@4.3.1: resolution: {integrity: sha512-/ko6cba+H6gdZ0DOw7BbNMZtfuJTRp9g/IrGIuz8lYc/EfnmWRpaR3CFPnNbVz0LDvF8Gf1hFGPqrQqq7De0rg==} @@ -2177,8 +2028,8 @@ packages: micromark-util-symbol@2.0.1: resolution: {integrity: sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==} - micromark-util-types@2.0.1: - resolution: {integrity: sha512-534m2WhVTddrcKVepwmVEVnUAmtrx9bfIjNoQHRqfnvdaHQiFytEhJoTgpWJvDEXCO5gLTQh3wYC1PgOJA4NSQ==} + micromark-util-types@2.0.2: + resolution: {integrity: sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==} micromatch@4.0.8: resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} @@ -2242,13 +2093,13 @@ packages: muggle-string@0.4.1: resolution: {integrity: sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==} - nanoid@3.3.8: - resolution: {integrity: sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==} + nanoid@3.3.9: + resolution: {integrity: sha512-SppoicMGpZvbF1l3z4x7No3OlIjP7QJvC9XR7AhZr1kL133KHnKPztkKDc+Ir4aJ/1VhTySrtKhrsycmrMQfvg==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true - nanoid@5.1.2: - resolution: {integrity: sha512-b+CiXQCNMUGe0Ri64S9SXFcP9hogjAJ2Rd6GdVxhPLRm7mhGaM7VgOvCAJ1ZshfHbqVDI3uqTI5C8/GaKuLI7g==} + nanoid@5.1.3: + resolution: {integrity: sha512-zAbEOEr7u2CbxwoMRlz/pNSpRP0FdAU4pRaYunCdEezWohXFs+a0Xw7RfkKaezMsmSM1vttcLthJtwRnVtOfHQ==} engines: {node: ^18 || >=20} hasBin: true @@ -2310,8 +2161,8 @@ packages: package-json-from-dist@1.0.1: resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} - package-manager-detector@0.2.9: - resolution: {integrity: sha512-+vYvA/Y31l8Zk8dwxHhL3JfTuHPm6tlxM2A3GeQyl7ovYnSp1+mzAxClxaOr0qO1TtPxbQxetI7v5XqKLJZk7Q==} + package-manager-detector@0.2.11: + resolution: {integrity: sha512-BEnLolu+yuz22S56CU1SUKq3XC3PkwD5wv4ikR4MfGvnRVcmzXR9DwSlW2fEamyTPyXHomBJRzgapeuBvRNzJQ==} parse-json@8.1.0: resolution: {integrity: sha512-rum1bPifK5SSar35Z6EKZuYPJx85pkNaFrxBK3mwdfSJ1/WKbYrjoW/zTPSjRRamfmVX1ACBIdFAO0VRErW/EA==} @@ -2385,13 +2236,16 @@ packages: pkg-types@1.3.1: resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==} - playwright-chromium@1.50.1: - resolution: {integrity: sha512-0IKyCdwS5dDoGE3EqqfYtX24qF6+ef1UI6OLn2VUi2aHOgsI/KnESRm6/Ws0W78SrwhLi6lLlAL6fQISoO1cfw==} + pkg-types@2.1.0: + resolution: {integrity: sha512-wmJwA+8ihJixSoHKxZJRBQG1oY8Yr9pGLzRmSsNms0iNWyHHAlZCa7mmKiFR10YPZuz/2k169JiS/inOjBCZ2A==} + + playwright-chromium@1.51.0: + resolution: {integrity: sha512-vvTfgpnpy/OHzszS6jtRxvltC0J3x2Eko925FciIC0IN3KC1fg76veqV9AVWIasR+JTq9ZQh9V5Yqz8DPl38Lg==} engines: {node: '>=18'} hasBin: true - playwright-core@1.50.1: - resolution: {integrity: sha512-ra9fsNWayuYumt+NiM069M6OkcRb1FZSK8bgi66AtpFoWkg2+y0bJSNmkFrWhMbEBbVKC/EruAHH3g0zmtwGmQ==} + playwright-core@1.51.0: + resolution: {integrity: sha512-x47yPE3Zwhlil7wlNU/iktF7t2r/URR3VLbH6EknJd/04Qc/PSJ0EY3CMXipmglLG+zyRxW6HNo2EGbKLHPWMg==} engines: {node: '>=18'} hasBin: true @@ -2414,11 +2268,11 @@ packages: resolution: {integrity: sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==} engines: {node: ^10 || ^12 || >=14} - preact@10.26.2: - resolution: {integrity: sha512-0gNmv4qpS9HaN3+40CLBAnKe0ZfyE4ZWo5xKlC1rVrr0ckkEvJvAQqKaHANdFKsGstoxrY4AItZ7kZSGVoVjgg==} + preact@10.26.4: + resolution: {integrity: sha512-KJhO7LBFTjP71d83trW+Ilnjbo+ySsaAgCfXOXUlmGzJ4ygYPWmysm77yg4emwfmoz3b22yvH5IsVFHbhUaH5w==} - prettier@3.5.2: - resolution: {integrity: sha512-lc6npv5PH7hVqozBR7lkBNOGXV9vMwROAPlumdBkX0wTbbzPu/U1hk5yL8p2pt4Xoc+2mkT8t/sow2YrV/M5qg==} + prettier@3.5.3: + resolution: {integrity: sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==} engines: {node: '>=14'} hasBin: true @@ -2448,6 +2302,9 @@ packages: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} + quansync@0.2.8: + resolution: {integrity: sha512-4+saucphJMazjt7iOM27mbFCk+D9dd/zmgMDCzRZ8MEoBfYp7lAvoN38et/phRQF6wOPMy/OROBGgoWeSKyluA==} + queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} @@ -2496,8 +2353,8 @@ packages: resolution: {integrity: sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==} engines: {node: '>=18'} - reusify@1.0.4: - resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} + reusify@1.1.0: + resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} rfdc@1.4.1: @@ -2515,15 +2372,15 @@ packages: rollup: ^3.29.4 || ^4 typescript: ^4.5 || ^5.0 - rollup-plugin-esbuild@6.2.0: - resolution: {integrity: sha512-LbkHaCahA6ceyWzAd6md2yajNS+HfZmZ5o58ShkZp0cQeZOnZECG2D2xWFNBq5SF6X6pfMK2udkZ+wRtvpzyVQ==} + rollup-plugin-esbuild@6.2.1: + resolution: {integrity: sha512-jTNOMGoMRhs0JuueJrJqbW8tOwxumaWYq+V5i+PD+8ecSCVkuX27tGW7BXqDgoULQ55rO7IdNxPcnsWtshz3AA==} engines: {node: '>=14.18.0'} peerDependencies: esbuild: '>=0.18.0' rollup: ^1.20.0 || ^2.0.0 || ^3.0.0 || ^4.0.0 - rollup@4.34.8: - resolution: {integrity: sha512-489gTVMzAYdiZHFVA/ig/iYFllCcWFHMvUHI1rpFmkoUtRlQxqh6/yiNqnYibjMZ2b/+FUQwldG+aLsEt6bglQ==} + rollup@4.34.9: + resolution: {integrity: sha512-nF5XYqWWp9hx/LrpC8sZvvvmq0TeTjQgaZHYmAgwysT9nh8sWnZhBnM8ZyVbbJFIQBLwHDNoMqsBZBbUo4U8sQ==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true @@ -2565,8 +2422,8 @@ packages: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} - shiki@3.0.0: - resolution: {integrity: sha512-x6MMdYN9auPGx7kMFtyKbaj65eCdetfrfkvQZwqisZLnGMnAZsZxOpcWD0ElvLPFWHOSMukVyN9Opm7TxQjnZA==} + shiki@3.1.0: + resolution: {integrity: sha512-LdTNyWQlC5zdCaHdcp1zPA1OVA2ivb+KjGOOnGcy02tGaF5ja+dGibWFH7Ar8YlngUgK/scDqworK18Ys9cbYA==} siginfo@2.0.0: resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} @@ -2642,8 +2499,8 @@ packages: stackback@0.0.2: resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} - std-env@3.8.0: - resolution: {integrity: sha512-Bc3YwwCB+OzldMxOXJIIvC6cPRWr/LxOp48CdQTOkPyk/t4JWWJbrilwBd7RJzKV8QW7tJkcgAmeuLLJugl5/w==} + std-env@3.8.1: + resolution: {integrity: sha512-vj5lIj3Mwf9D79hBkltk5qmkFI+biIKWS2IBxEyEU3AX1tUf7AoL8nSazCOiiqQsGKIq01SClsKEzweu34uwvA==} stdin-discarder@0.2.2: resolution: {integrity: sha512-UhDfHmA92YAlNnCfhmq0VeNL5bDbiZGg7sZ2IvPsXubGkiNa9EC+tUTsjBRsYUAz87btI6/1wf4XoVvQ3uRnmQ==} @@ -2777,12 +2634,12 @@ packages: resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} engines: {node: '>=12.20'} - type-fest@4.35.0: - resolution: {integrity: sha512-2/AwEFQDFEy30iOLjrvHDIH7e4HEWH+f1Yl1bI5XMqzuoCUqwYCdxachgsgv0og/JdVZUhbfjcJAoHj5L1753A==} + type-fest@4.37.0: + resolution: {integrity: sha512-S/5/0kFftkq27FPNye0XM1e2NsnoD/3FS+pBmbjmmtLT6I+i344KoOf7pvXreaFsDamWeaJX55nczA1m5PsBDg==} engines: {node: '>=16'} - typescript@5.7.3: - resolution: {integrity: sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==} + typescript@5.8.2: + resolution: {integrity: sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ==} engines: {node: '>=14.17'} hasBin: true @@ -2851,13 +2708,13 @@ packages: vfile@6.0.3: resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==} - vite-node@3.0.7: - resolution: {integrity: sha512-2fX0QwX4GkkkpULXdT1Pf4q0tC1i1lFOyseKoonavXUNlQ77KpW2XqBGGNIm/J4Ows4KxgGJzDguYVPKwG/n5A==} + vite-node@3.0.8: + resolution: {integrity: sha512-6PhR4H9VGlcwXZ+KWCdMqbtG649xCPZqfI9j2PsK1FcXgEzro5bGHcVKFCTqPLaNKZES8Evqv4LwvZARsq5qlg==} engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} hasBin: true - vite@6.1.1: - resolution: {integrity: sha512-4GgM54XrwRfrOp297aIYspIti66k56v16ZnqHvrIM7mG+HjDlAwS7p+Srr7J6fGvEdOJ5JcQ/D9T7HhtdXDTzA==} + vite@6.2.1: + resolution: {integrity: sha512-n2GnqDb6XPhlt9B8olZPrgMD/es/Nd1RdChF6CBD/fHW6pUyUTt2sQW2fPRX5GiD9XEa6+8A6A4f2vT6pSsE7Q==} engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} hasBin: true peerDependencies: @@ -2899,16 +2756,16 @@ packages: vitepress-plugin-group-icons@1.3.6: resolution: {integrity: sha512-MzUAuMZ43f51dfBKYowW7yv/A2DxIjtN50d8Dcj31nU9RB6GuYBJ48E/Ze88U0bEn4wlnrjMXFh2j2e0rYmGug==} - vitest@3.0.7: - resolution: {integrity: sha512-IP7gPK3LS3Fvn44x30X1dM9vtawm0aesAa2yBIZ9vQf+qB69NXC5776+Qmcr7ohUXIQuLhk7xQR0aSUIDPqavg==} + vitest@3.0.8: + resolution: {integrity: sha512-dfqAsNqRGUc8hB9OVR2P0w8PZPEckti2+5rdZip0WIz9WW0MnImJ8XiR61QhqLa92EQzKP2uPkzenKOAHyEIbA==} engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} hasBin: true peerDependencies: '@edge-runtime/vm': '*' '@types/debug': ^4.1.12 '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 - '@vitest/browser': 3.0.7 - '@vitest/ui': 3.0.7 + '@vitest/browser': 3.0.8 + '@vitest/ui': 3.0.8 happy-dom: '*' jsdom: '*' peerDependenciesMeta: @@ -2930,8 +2787,8 @@ packages: vscode-uri@3.1.0: resolution: {integrity: sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ==} - vue-tsc@2.2.0: - resolution: {integrity: sha512-gtmM1sUuJ8aSb0KoAFmK9yMxb8TxjewmxqTJ1aKphD5Cbu0rULFY6+UQT51zW7SpUcenfPUuflKyVwyx9Qdnxg==} + vue-tsc@2.2.8: + resolution: {integrity: sha512-jBYKBNFADTN+L+MdesNX/TB3XuDSyaWynKMDgR+yCSln0GQ9Tfb7JS2lr46s2LiFUT1WsmfWsSvIElyxzOPqcQ==} hasBin: true peerDependencies: typescript: '>=5.0.0' @@ -3008,113 +2865,113 @@ packages: snapshots: - '@algolia/autocomplete-core@1.17.9(@algolia/client-search@5.20.3)(algoliasearch@5.20.3)': + '@algolia/autocomplete-core@1.17.9(@algolia/client-search@5.20.4)(algoliasearch@5.20.4)': dependencies: - '@algolia/autocomplete-plugin-algolia-insights': 1.17.9(@algolia/client-search@5.20.3)(algoliasearch@5.20.3) - '@algolia/autocomplete-shared': 1.17.9(@algolia/client-search@5.20.3)(algoliasearch@5.20.3) + '@algolia/autocomplete-plugin-algolia-insights': 1.17.9(@algolia/client-search@5.20.4)(algoliasearch@5.20.4) + '@algolia/autocomplete-shared': 1.17.9(@algolia/client-search@5.20.4)(algoliasearch@5.20.4) transitivePeerDependencies: - '@algolia/client-search' - algoliasearch - search-insights - '@algolia/autocomplete-plugin-algolia-insights@1.17.9(@algolia/client-search@5.20.3)(algoliasearch@5.20.3)': + '@algolia/autocomplete-plugin-algolia-insights@1.17.9(@algolia/client-search@5.20.4)(algoliasearch@5.20.4)': dependencies: - '@algolia/autocomplete-shared': 1.17.9(@algolia/client-search@5.20.3)(algoliasearch@5.20.3) + '@algolia/autocomplete-shared': 1.17.9(@algolia/client-search@5.20.4)(algoliasearch@5.20.4) transitivePeerDependencies: - '@algolia/client-search' - algoliasearch - '@algolia/autocomplete-preset-algolia@1.17.9(@algolia/client-search@5.20.3)(algoliasearch@5.20.3)': + '@algolia/autocomplete-preset-algolia@1.17.9(@algolia/client-search@5.20.4)(algoliasearch@5.20.4)': dependencies: - '@algolia/autocomplete-shared': 1.17.9(@algolia/client-search@5.20.3)(algoliasearch@5.20.3) - '@algolia/client-search': 5.20.3 - algoliasearch: 5.20.3 + '@algolia/autocomplete-shared': 1.17.9(@algolia/client-search@5.20.4)(algoliasearch@5.20.4) + '@algolia/client-search': 5.20.4 + algoliasearch: 5.20.4 - '@algolia/autocomplete-shared@1.17.9(@algolia/client-search@5.20.3)(algoliasearch@5.20.3)': + '@algolia/autocomplete-shared@1.17.9(@algolia/client-search@5.20.4)(algoliasearch@5.20.4)': dependencies: - '@algolia/client-search': 5.20.3 - algoliasearch: 5.20.3 + '@algolia/client-search': 5.20.4 + algoliasearch: 5.20.4 - '@algolia/client-abtesting@5.20.3': + '@algolia/client-abtesting@5.20.4': dependencies: - '@algolia/client-common': 5.20.3 - '@algolia/requester-browser-xhr': 5.20.3 - '@algolia/requester-fetch': 5.20.3 - '@algolia/requester-node-http': 5.20.3 + '@algolia/client-common': 5.20.4 + '@algolia/requester-browser-xhr': 5.20.4 + '@algolia/requester-fetch': 5.20.4 + '@algolia/requester-node-http': 5.20.4 - '@algolia/client-analytics@5.20.3': + '@algolia/client-analytics@5.20.4': dependencies: - '@algolia/client-common': 5.20.3 - '@algolia/requester-browser-xhr': 5.20.3 - '@algolia/requester-fetch': 5.20.3 - '@algolia/requester-node-http': 5.20.3 + '@algolia/client-common': 5.20.4 + '@algolia/requester-browser-xhr': 5.20.4 + '@algolia/requester-fetch': 5.20.4 + '@algolia/requester-node-http': 5.20.4 - '@algolia/client-common@5.20.3': {} + '@algolia/client-common@5.20.4': {} - '@algolia/client-insights@5.20.3': + '@algolia/client-insights@5.20.4': dependencies: - '@algolia/client-common': 5.20.3 - '@algolia/requester-browser-xhr': 5.20.3 - '@algolia/requester-fetch': 5.20.3 - '@algolia/requester-node-http': 5.20.3 + '@algolia/client-common': 5.20.4 + '@algolia/requester-browser-xhr': 5.20.4 + '@algolia/requester-fetch': 5.20.4 + '@algolia/requester-node-http': 5.20.4 - '@algolia/client-personalization@5.20.3': + '@algolia/client-personalization@5.20.4': dependencies: - '@algolia/client-common': 5.20.3 - '@algolia/requester-browser-xhr': 5.20.3 - '@algolia/requester-fetch': 5.20.3 - '@algolia/requester-node-http': 5.20.3 + '@algolia/client-common': 5.20.4 + '@algolia/requester-browser-xhr': 5.20.4 + '@algolia/requester-fetch': 5.20.4 + '@algolia/requester-node-http': 5.20.4 - '@algolia/client-query-suggestions@5.20.3': + '@algolia/client-query-suggestions@5.20.4': dependencies: - '@algolia/client-common': 5.20.3 - '@algolia/requester-browser-xhr': 5.20.3 - '@algolia/requester-fetch': 5.20.3 - '@algolia/requester-node-http': 5.20.3 + '@algolia/client-common': 5.20.4 + '@algolia/requester-browser-xhr': 5.20.4 + '@algolia/requester-fetch': 5.20.4 + '@algolia/requester-node-http': 5.20.4 - '@algolia/client-search@5.20.3': + '@algolia/client-search@5.20.4': dependencies: - '@algolia/client-common': 5.20.3 - '@algolia/requester-browser-xhr': 5.20.3 - '@algolia/requester-fetch': 5.20.3 - '@algolia/requester-node-http': 5.20.3 + '@algolia/client-common': 5.20.4 + '@algolia/requester-browser-xhr': 5.20.4 + '@algolia/requester-fetch': 5.20.4 + '@algolia/requester-node-http': 5.20.4 - '@algolia/ingestion@1.20.3': + '@algolia/ingestion@1.20.4': dependencies: - '@algolia/client-common': 5.20.3 - '@algolia/requester-browser-xhr': 5.20.3 - '@algolia/requester-fetch': 5.20.3 - '@algolia/requester-node-http': 5.20.3 + '@algolia/client-common': 5.20.4 + '@algolia/requester-browser-xhr': 5.20.4 + '@algolia/requester-fetch': 5.20.4 + '@algolia/requester-node-http': 5.20.4 - '@algolia/monitoring@1.20.3': + '@algolia/monitoring@1.20.4': dependencies: - '@algolia/client-common': 5.20.3 - '@algolia/requester-browser-xhr': 5.20.3 - '@algolia/requester-fetch': 5.20.3 - '@algolia/requester-node-http': 5.20.3 + '@algolia/client-common': 5.20.4 + '@algolia/requester-browser-xhr': 5.20.4 + '@algolia/requester-fetch': 5.20.4 + '@algolia/requester-node-http': 5.20.4 - '@algolia/recommend@5.20.3': + '@algolia/recommend@5.20.4': dependencies: - '@algolia/client-common': 5.20.3 - '@algolia/requester-browser-xhr': 5.20.3 - '@algolia/requester-fetch': 5.20.3 - '@algolia/requester-node-http': 5.20.3 + '@algolia/client-common': 5.20.4 + '@algolia/requester-browser-xhr': 5.20.4 + '@algolia/requester-fetch': 5.20.4 + '@algolia/requester-node-http': 5.20.4 - '@algolia/requester-browser-xhr@5.20.3': + '@algolia/requester-browser-xhr@5.20.4': dependencies: - '@algolia/client-common': 5.20.3 + '@algolia/client-common': 5.20.4 - '@algolia/requester-fetch@5.20.3': + '@algolia/requester-fetch@5.20.4': dependencies: - '@algolia/client-common': 5.20.3 + '@algolia/client-common': 5.20.4 - '@algolia/requester-node-http@5.20.3': + '@algolia/requester-node-http@5.20.4': dependencies: - '@algolia/client-common': 5.20.3 + '@algolia/client-common': 5.20.4 '@antfu/install-pkg@1.0.0': dependencies: - package-manager-detector: 0.2.9 + package-manager-detector: 0.2.11 tinyexec: 0.3.2 '@antfu/utils@8.1.1': {} @@ -3164,10 +3021,10 @@ snapshots: '@docsearch/css@3.9.0': {} - '@docsearch/js@3.9.0(@algolia/client-search@5.20.3)': + '@docsearch/js@3.9.0(@algolia/client-search@5.20.4)': dependencies: - '@docsearch/react': 3.9.0(@algolia/client-search@5.20.3) - preact: 10.26.2 + '@docsearch/react': 3.9.0(@algolia/client-search@5.20.4) + preact: 10.26.4 transitivePeerDependencies: - '@algolia/client-search' - '@types/react' @@ -3175,162 +3032,87 @@ snapshots: - react-dom - search-insights - '@docsearch/react@3.9.0(@algolia/client-search@5.20.3)': + '@docsearch/react@3.9.0(@algolia/client-search@5.20.4)': dependencies: - '@algolia/autocomplete-core': 1.17.9(@algolia/client-search@5.20.3)(algoliasearch@5.20.3) - '@algolia/autocomplete-preset-algolia': 1.17.9(@algolia/client-search@5.20.3)(algoliasearch@5.20.3) + '@algolia/autocomplete-core': 1.17.9(@algolia/client-search@5.20.4)(algoliasearch@5.20.4) + '@algolia/autocomplete-preset-algolia': 1.17.9(@algolia/client-search@5.20.4)(algoliasearch@5.20.4) '@docsearch/css': 3.9.0 - algoliasearch: 5.20.3 + algoliasearch: 5.20.4 transitivePeerDependencies: - '@algolia/client-search' - '@esbuild/aix-ppc64@0.24.2': - optional: true - '@esbuild/aix-ppc64@0.25.0': optional: true - '@esbuild/android-arm64@0.24.2': - optional: true - '@esbuild/android-arm64@0.25.0': optional: true - '@esbuild/android-arm@0.24.2': - optional: true - '@esbuild/android-arm@0.25.0': optional: true - '@esbuild/android-x64@0.24.2': - optional: true - '@esbuild/android-x64@0.25.0': optional: true - '@esbuild/darwin-arm64@0.24.2': - optional: true - '@esbuild/darwin-arm64@0.25.0': optional: true - '@esbuild/darwin-x64@0.24.2': - optional: true - '@esbuild/darwin-x64@0.25.0': optional: true - '@esbuild/freebsd-arm64@0.24.2': - optional: true - '@esbuild/freebsd-arm64@0.25.0': optional: true - '@esbuild/freebsd-x64@0.24.2': - optional: true - '@esbuild/freebsd-x64@0.25.0': optional: true - '@esbuild/linux-arm64@0.24.2': - optional: true - '@esbuild/linux-arm64@0.25.0': optional: true - '@esbuild/linux-arm@0.24.2': - optional: true - '@esbuild/linux-arm@0.25.0': optional: true - '@esbuild/linux-ia32@0.24.2': - optional: true - '@esbuild/linux-ia32@0.25.0': optional: true - '@esbuild/linux-loong64@0.24.2': - optional: true - '@esbuild/linux-loong64@0.25.0': optional: true - '@esbuild/linux-mips64el@0.24.2': - optional: true - '@esbuild/linux-mips64el@0.25.0': optional: true - '@esbuild/linux-ppc64@0.24.2': - optional: true - '@esbuild/linux-ppc64@0.25.0': optional: true - '@esbuild/linux-riscv64@0.24.2': - optional: true - '@esbuild/linux-riscv64@0.25.0': optional: true - '@esbuild/linux-s390x@0.24.2': - optional: true - '@esbuild/linux-s390x@0.25.0': optional: true - '@esbuild/linux-x64@0.24.2': - optional: true - '@esbuild/linux-x64@0.25.0': optional: true - '@esbuild/netbsd-arm64@0.24.2': - optional: true - '@esbuild/netbsd-arm64@0.25.0': optional: true - '@esbuild/netbsd-x64@0.24.2': - optional: true - '@esbuild/netbsd-x64@0.25.0': optional: true - '@esbuild/openbsd-arm64@0.24.2': - optional: true - '@esbuild/openbsd-arm64@0.25.0': optional: true - '@esbuild/openbsd-x64@0.24.2': - optional: true - '@esbuild/openbsd-x64@0.25.0': optional: true - '@esbuild/sunos-x64@0.24.2': - optional: true - '@esbuild/sunos-x64@0.25.0': optional: true - '@esbuild/win32-arm64@0.24.2': - optional: true - '@esbuild/win32-arm64@0.25.0': optional: true - '@esbuild/win32-ia32@0.24.2': - optional: true - '@esbuild/win32-ia32@0.25.0': optional: true - '@esbuild/win32-x64@0.24.2': - optional: true - '@esbuild/win32-x64@0.25.0': optional: true @@ -3346,7 +3128,7 @@ snapshots: dependencies: '@iconify/types': 2.0.0 - '@iconify-json/simple-icons@1.2.26': + '@iconify-json/simple-icons@1.2.27': dependencies: '@iconify/types': 2.0.0 @@ -3364,7 +3146,7 @@ snapshots: debug: 4.4.0 globals: 15.15.0 kolorist: 1.8.0 - local-pkg: 1.0.0 + local-pkg: 1.1.1 mlly: 1.7.4 transitivePeerDependencies: - supports-color @@ -3460,19 +3242,19 @@ snapshots: '@nodelib/fs.walk@1.2.8': dependencies: '@nodelib/fs.scandir': 2.1.5 - fastq: 1.19.0 + fastq: 1.19.1 '@polka/compression@1.0.0-next.28': {} '@polka/url@1.0.0-next.28': {} - '@rollup/plugin-alias@5.1.1(rollup@4.34.8)': + '@rollup/plugin-alias@5.1.1(rollup@4.34.9)': optionalDependencies: - rollup: 4.34.8 + rollup: 4.34.9 - '@rollup/plugin-commonjs@28.0.2(rollup@4.34.8)': + '@rollup/plugin-commonjs@28.0.3(rollup@4.34.9)': dependencies: - '@rollup/pluginutils': 5.1.4(rollup@4.34.8) + '@rollup/pluginutils': 5.1.4(rollup@4.34.9) commondir: 1.0.1 estree-walker: 2.0.2 fdir: 6.4.3(picomatch@4.0.2) @@ -3480,130 +3262,130 @@ snapshots: magic-string: 0.30.17 picomatch: 4.0.2 optionalDependencies: - rollup: 4.34.8 + rollup: 4.34.9 - '@rollup/plugin-json@6.1.0(rollup@4.34.8)': + '@rollup/plugin-json@6.1.0(rollup@4.34.9)': dependencies: - '@rollup/pluginutils': 5.1.4(rollup@4.34.8) + '@rollup/pluginutils': 5.1.4(rollup@4.34.9) optionalDependencies: - rollup: 4.34.8 + rollup: 4.34.9 - '@rollup/plugin-node-resolve@16.0.0(rollup@4.34.8)': + '@rollup/plugin-node-resolve@16.0.0(rollup@4.34.9)': dependencies: - '@rollup/pluginutils': 5.1.4(rollup@4.34.8) + '@rollup/pluginutils': 5.1.4(rollup@4.34.9) '@types/resolve': 1.20.2 deepmerge: 4.3.1 is-module: 1.0.0 resolve: 1.22.10 optionalDependencies: - rollup: 4.34.8 + rollup: 4.34.9 - '@rollup/plugin-replace@6.0.2(rollup@4.34.8)': + '@rollup/plugin-replace@6.0.2(rollup@4.34.9)': dependencies: - '@rollup/pluginutils': 5.1.4(rollup@4.34.8) + '@rollup/pluginutils': 5.1.4(rollup@4.34.9) magic-string: 0.30.17 optionalDependencies: - rollup: 4.34.8 + rollup: 4.34.9 - '@rollup/pluginutils@5.1.4(rollup@4.34.8)': + '@rollup/pluginutils@5.1.4(rollup@4.34.9)': dependencies: '@types/estree': 1.0.6 estree-walker: 2.0.2 picomatch: 4.0.2 optionalDependencies: - rollup: 4.34.8 + rollup: 4.34.9 - '@rollup/rollup-android-arm-eabi@4.34.8': + '@rollup/rollup-android-arm-eabi@4.34.9': optional: true - '@rollup/rollup-android-arm64@4.34.8': + '@rollup/rollup-android-arm64@4.34.9': optional: true - '@rollup/rollup-darwin-arm64@4.34.8': + '@rollup/rollup-darwin-arm64@4.34.9': optional: true - '@rollup/rollup-darwin-x64@4.34.8': + '@rollup/rollup-darwin-x64@4.34.9': optional: true - '@rollup/rollup-freebsd-arm64@4.34.8': + '@rollup/rollup-freebsd-arm64@4.34.9': optional: true - '@rollup/rollup-freebsd-x64@4.34.8': + '@rollup/rollup-freebsd-x64@4.34.9': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.34.8': + '@rollup/rollup-linux-arm-gnueabihf@4.34.9': optional: true - '@rollup/rollup-linux-arm-musleabihf@4.34.8': + '@rollup/rollup-linux-arm-musleabihf@4.34.9': optional: true - '@rollup/rollup-linux-arm64-gnu@4.34.8': + '@rollup/rollup-linux-arm64-gnu@4.34.9': optional: true - '@rollup/rollup-linux-arm64-musl@4.34.8': + '@rollup/rollup-linux-arm64-musl@4.34.9': optional: true - '@rollup/rollup-linux-loongarch64-gnu@4.34.8': + '@rollup/rollup-linux-loongarch64-gnu@4.34.9': optional: true - '@rollup/rollup-linux-powerpc64le-gnu@4.34.8': + '@rollup/rollup-linux-powerpc64le-gnu@4.34.9': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.34.8': + '@rollup/rollup-linux-riscv64-gnu@4.34.9': optional: true - '@rollup/rollup-linux-s390x-gnu@4.34.8': + '@rollup/rollup-linux-s390x-gnu@4.34.9': optional: true - '@rollup/rollup-linux-x64-gnu@4.34.8': + '@rollup/rollup-linux-x64-gnu@4.34.9': optional: true - '@rollup/rollup-linux-x64-musl@4.34.8': + '@rollup/rollup-linux-x64-musl@4.34.9': optional: true - '@rollup/rollup-win32-arm64-msvc@4.34.8': + '@rollup/rollup-win32-arm64-msvc@4.34.9': optional: true - '@rollup/rollup-win32-ia32-msvc@4.34.8': + '@rollup/rollup-win32-ia32-msvc@4.34.9': optional: true - '@rollup/rollup-win32-x64-msvc@4.34.8': + '@rollup/rollup-win32-x64-msvc@4.34.9': optional: true '@sec-ant/readable-stream@0.4.1': {} - '@shikijs/core@3.0.0': + '@shikijs/core@3.1.0': dependencies: - '@shikijs/types': 3.0.0 + '@shikijs/types': 3.1.0 '@shikijs/vscode-textmate': 10.0.2 '@types/hast': 3.0.4 hast-util-to-html: 9.0.5 - '@shikijs/engine-javascript@3.0.0': + '@shikijs/engine-javascript@3.1.0': dependencies: - '@shikijs/types': 3.0.0 + '@shikijs/types': 3.1.0 '@shikijs/vscode-textmate': 10.0.2 oniguruma-to-es: 3.1.1 - '@shikijs/engine-oniguruma@3.0.0': + '@shikijs/engine-oniguruma@3.1.0': dependencies: - '@shikijs/types': 3.0.0 + '@shikijs/types': 3.1.0 '@shikijs/vscode-textmate': 10.0.2 - '@shikijs/langs@3.0.0': + '@shikijs/langs@3.1.0': dependencies: - '@shikijs/types': 3.0.0 + '@shikijs/types': 3.1.0 - '@shikijs/themes@3.0.0': + '@shikijs/themes@3.1.0': dependencies: - '@shikijs/types': 3.0.0 + '@shikijs/types': 3.1.0 - '@shikijs/transformers@3.0.0': + '@shikijs/transformers@3.1.0': dependencies: - '@shikijs/core': 3.0.0 - '@shikijs/types': 3.0.0 + '@shikijs/core': 3.1.0 + '@shikijs/types': 3.1.0 - '@shikijs/types@3.0.0': + '@shikijs/types@3.1.0': dependencies: '@shikijs/vscode-textmate': 10.0.2 '@types/hast': 3.0.4 @@ -3624,7 +3406,7 @@ snapshots: '@types/cross-spawn@6.0.6': dependencies: - '@types/node': 22.13.5 + '@types/node': 22.13.9 '@types/debug@4.1.12': dependencies: @@ -3635,7 +3417,7 @@ snapshots: '@types/fs-extra@11.0.4': dependencies: '@types/jsonfile': 6.1.4 - '@types/node': 22.13.5 + '@types/node': 22.13.9 '@types/hast@3.0.4': dependencies: @@ -3647,15 +3429,15 @@ snapshots: '@types/jsonfile@6.1.4': dependencies: - '@types/node': 22.13.5 + '@types/node': 22.13.9 '@types/linkify-it@5.0.0': {} '@types/lodash.template@4.5.3': dependencies: - '@types/lodash': 4.17.15 + '@types/lodash': 4.17.16 - '@types/lodash@4.17.15': {} + '@types/lodash@4.17.16': {} '@types/mark.js@8.11.12': dependencies: @@ -3690,7 +3472,7 @@ snapshots: '@types/node@17.0.45': {} - '@types/node@22.13.5': + '@types/node@22.13.9': dependencies: undici-types: 6.20.0 @@ -3704,14 +3486,14 @@ snapshots: '@types/prompts@2.4.9': dependencies: - '@types/node': 22.13.5 + '@types/node': 22.13.9 kleur: 3.0.3 '@types/resolve@1.20.2': {} '@types/sax@1.2.7': dependencies: - '@types/node': 22.13.5 + '@types/node': 22.13.9 '@types/semver@7.5.8': {} @@ -3719,64 +3501,64 @@ snapshots: '@types/unist@3.0.3': {} - '@types/web-bluetooth@0.0.20': {} + '@types/web-bluetooth@0.0.21': {} '@ungap/structured-clone@1.3.0': {} - '@vitejs/plugin-vue@5.2.1(vite@6.1.1(@types/node@22.13.5)(jiti@1.21.7)(yaml@2.7.0))(vue@3.5.13(typescript@5.7.3))': + '@vitejs/plugin-vue@5.2.1(vite@6.2.1(@types/node@22.13.9)(jiti@1.21.7)(yaml@2.7.0))(vue@3.5.13(typescript@5.8.2))': dependencies: - vite: 6.1.1(@types/node@22.13.5)(jiti@1.21.7)(yaml@2.7.0) - vue: 3.5.13(typescript@5.7.3) + vite: 6.2.1(@types/node@22.13.9)(jiti@1.21.7)(yaml@2.7.0) + vue: 3.5.13(typescript@5.8.2) - '@vitest/expect@3.0.7': + '@vitest/expect@3.0.8': dependencies: - '@vitest/spy': 3.0.7 - '@vitest/utils': 3.0.7 + '@vitest/spy': 3.0.8 + '@vitest/utils': 3.0.8 chai: 5.2.0 tinyrainbow: 2.0.0 - '@vitest/mocker@3.0.7(vite@6.1.1(@types/node@22.13.5)(jiti@1.21.7)(yaml@2.7.0))': + '@vitest/mocker@3.0.8(vite@6.2.1(@types/node@22.13.9)(jiti@1.21.7)(yaml@2.7.0))': dependencies: - '@vitest/spy': 3.0.7 + '@vitest/spy': 3.0.8 estree-walker: 3.0.3 magic-string: 0.30.17 optionalDependencies: - vite: 6.1.1(@types/node@22.13.5)(jiti@1.21.7)(yaml@2.7.0) + vite: 6.2.1(@types/node@22.13.9)(jiti@1.21.7)(yaml@2.7.0) - '@vitest/pretty-format@3.0.7': + '@vitest/pretty-format@3.0.8': dependencies: tinyrainbow: 2.0.0 - '@vitest/runner@3.0.7': + '@vitest/runner@3.0.8': dependencies: - '@vitest/utils': 3.0.7 + '@vitest/utils': 3.0.8 pathe: 2.0.3 - '@vitest/snapshot@3.0.7': + '@vitest/snapshot@3.0.8': dependencies: - '@vitest/pretty-format': 3.0.7 + '@vitest/pretty-format': 3.0.8 magic-string: 0.30.17 pathe: 2.0.3 - '@vitest/spy@3.0.7': + '@vitest/spy@3.0.8': dependencies: tinyspy: 3.0.2 - '@vitest/utils@3.0.7': + '@vitest/utils@3.0.8': dependencies: - '@vitest/pretty-format': 3.0.7 + '@vitest/pretty-format': 3.0.8 loupe: 3.1.3 tinyrainbow: 2.0.0 - '@volar/language-core@2.4.11': + '@volar/language-core@2.4.12': dependencies: - '@volar/source-map': 2.4.11 + '@volar/source-map': 2.4.12 - '@volar/source-map@2.4.11': {} + '@volar/source-map@2.4.12': {} - '@volar/typescript@2.4.11': + '@volar/typescript@2.4.12': dependencies: - '@volar/language-core': 2.4.11 + '@volar/language-core': 2.4.12 path-browserify: 1.0.1 vscode-uri: 3.1.0 @@ -3833,18 +3615,18 @@ snapshots: dependencies: rfdc: 1.4.1 - '@vue/language-core@2.2.0(typescript@5.7.3)': + '@vue/language-core@2.2.8(typescript@5.8.2)': dependencies: - '@volar/language-core': 2.4.11 + '@volar/language-core': 2.4.12 '@vue/compiler-dom': 3.5.13 '@vue/compiler-vue2': 2.7.16 '@vue/shared': 3.5.13 - alien-signals: 0.4.14 + alien-signals: 1.0.4 minimatch: 9.0.5 muggle-string: 0.4.1 path-browserify: 1.0.1 optionalDependencies: - typescript: 5.7.3 + typescript: 5.8.2 '@vue/reactivity@3.5.13': dependencies: @@ -3862,39 +3644,39 @@ snapshots: '@vue/shared': 3.5.13 csstype: 3.1.3 - '@vue/server-renderer@3.5.13(vue@3.5.13(typescript@5.7.3))': + '@vue/server-renderer@3.5.13(vue@3.5.13(typescript@5.8.2))': dependencies: '@vue/compiler-ssr': 3.5.13 '@vue/shared': 3.5.13 - vue: 3.5.13(typescript@5.7.3) + vue: 3.5.13(typescript@5.8.2) '@vue/shared@3.5.13': {} - '@vueuse/core@12.7.0(typescript@5.7.3)': + '@vueuse/core@12.8.2(typescript@5.8.2)': dependencies: - '@types/web-bluetooth': 0.0.20 - '@vueuse/metadata': 12.7.0 - '@vueuse/shared': 12.7.0(typescript@5.7.3) - vue: 3.5.13(typescript@5.7.3) + '@types/web-bluetooth': 0.0.21 + '@vueuse/metadata': 12.8.2 + '@vueuse/shared': 12.8.2(typescript@5.8.2) + vue: 3.5.13(typescript@5.8.2) transitivePeerDependencies: - typescript - '@vueuse/integrations@12.7.0(axios@1.7.9(debug@4.4.0))(focus-trap@7.6.4)(typescript@5.7.3)': + '@vueuse/integrations@12.8.2(axios@1.8.2(debug@4.4.0))(focus-trap@7.6.4)(typescript@5.8.2)': dependencies: - '@vueuse/core': 12.7.0(typescript@5.7.3) - '@vueuse/shared': 12.7.0(typescript@5.7.3) - vue: 3.5.13(typescript@5.7.3) + '@vueuse/core': 12.8.2(typescript@5.8.2) + '@vueuse/shared': 12.8.2(typescript@5.8.2) + vue: 3.5.13(typescript@5.8.2) optionalDependencies: - axios: 1.7.9(debug@4.4.0) + axios: 1.8.2(debug@4.4.0) focus-trap: 7.6.4 transitivePeerDependencies: - typescript - '@vueuse/metadata@12.7.0': {} + '@vueuse/metadata@12.8.2': {} - '@vueuse/shared@12.7.0(typescript@5.7.3)': + '@vueuse/shared@12.8.2(typescript@5.8.2)': dependencies: - vue: 3.5.13(typescript@5.7.3) + vue: 3.5.13(typescript@5.8.2) transitivePeerDependencies: - typescript @@ -3902,27 +3684,27 @@ snapshots: dependencies: event-target-shim: 5.0.1 - acorn@8.14.0: {} + acorn@8.14.1: {} add-stream@1.0.0: {} - algoliasearch@5.20.3: + algoliasearch@5.20.4: dependencies: - '@algolia/client-abtesting': 5.20.3 - '@algolia/client-analytics': 5.20.3 - '@algolia/client-common': 5.20.3 - '@algolia/client-insights': 5.20.3 - '@algolia/client-personalization': 5.20.3 - '@algolia/client-query-suggestions': 5.20.3 - '@algolia/client-search': 5.20.3 - '@algolia/ingestion': 1.20.3 - '@algolia/monitoring': 1.20.3 - '@algolia/recommend': 5.20.3 - '@algolia/requester-browser-xhr': 5.20.3 - '@algolia/requester-fetch': 5.20.3 - '@algolia/requester-node-http': 5.20.3 + '@algolia/client-abtesting': 5.20.4 + '@algolia/client-analytics': 5.20.4 + '@algolia/client-common': 5.20.4 + '@algolia/client-insights': 5.20.4 + '@algolia/client-personalization': 5.20.4 + '@algolia/client-query-suggestions': 5.20.4 + '@algolia/client-search': 5.20.4 + '@algolia/ingestion': 1.20.4 + '@algolia/monitoring': 1.20.4 + '@algolia/recommend': 5.20.4 + '@algolia/requester-browser-xhr': 5.20.4 + '@algolia/requester-fetch': 5.20.4 + '@algolia/requester-node-http': 5.20.4 - alien-signals@0.4.14: {} + alien-signals@1.0.4: {} ansi-colors@4.1.3: {} @@ -3954,7 +3736,7 @@ snapshots: asynckit@0.4.0: {} - axios@1.7.9(debug@4.4.0): + axios@1.8.2(debug@4.4.0): dependencies: follow-redirects: 1.15.9(debug@4.4.0) form-data: 4.0.2 @@ -4074,6 +3856,8 @@ snapshots: confbox@0.1.8: {} + confbox@0.2.1: {} + conventional-changelog-angular@8.0.0: dependencies: compare-func: 2.0.0 @@ -4271,34 +4055,6 @@ snapshots: has-tostringtag: 1.0.2 hasown: 2.0.2 - esbuild@0.24.2: - optionalDependencies: - '@esbuild/aix-ppc64': 0.24.2 - '@esbuild/android-arm': 0.24.2 - '@esbuild/android-arm64': 0.24.2 - '@esbuild/android-x64': 0.24.2 - '@esbuild/darwin-arm64': 0.24.2 - '@esbuild/darwin-x64': 0.24.2 - '@esbuild/freebsd-arm64': 0.24.2 - '@esbuild/freebsd-x64': 0.24.2 - '@esbuild/linux-arm': 0.24.2 - '@esbuild/linux-arm64': 0.24.2 - '@esbuild/linux-ia32': 0.24.2 - '@esbuild/linux-loong64': 0.24.2 - '@esbuild/linux-mips64el': 0.24.2 - '@esbuild/linux-ppc64': 0.24.2 - '@esbuild/linux-riscv64': 0.24.2 - '@esbuild/linux-s390x': 0.24.2 - '@esbuild/linux-x64': 0.24.2 - '@esbuild/netbsd-arm64': 0.24.2 - '@esbuild/netbsd-x64': 0.24.2 - '@esbuild/openbsd-arm64': 0.24.2 - '@esbuild/openbsd-x64': 0.24.2 - '@esbuild/sunos-x64': 0.24.2 - '@esbuild/win32-arm64': 0.24.2 - '@esbuild/win32-ia32': 0.24.2 - '@esbuild/win32-x64': 0.24.2 - esbuild@0.25.0: optionalDependencies: '@esbuild/aix-ppc64': 0.25.0 @@ -4374,7 +4130,9 @@ snapshots: strip-final-newline: 4.0.0 yoctocolors: 2.1.1 - expect-type@1.1.0: {} + expect-type@1.2.0: {} + + exsolve@1.0.2: {} extend-shallow@2.0.1: dependencies: @@ -4388,9 +4146,9 @@ snapshots: merge2: 1.4.1 micromatch: 4.0.8 - fastq@1.19.0: + fastq@1.19.1: dependencies: - reusify: 1.0.4 + reusify: 1.1.0 fdir@6.4.3(picomatch@4.0.2): optionalDependencies: @@ -4410,7 +4168,7 @@ snapshots: dependencies: to-regex-range: 5.0.1 - find-up-simple@1.0.0: {} + find-up-simple@1.0.1: {} focus-trap@7.6.4: dependencies: @@ -4718,10 +4476,11 @@ snapshots: rfdc: 1.4.1 wrap-ansi: 9.0.0 - local-pkg@1.0.0: + local-pkg@1.1.1: dependencies: mlly: 1.7.4 - pkg-types: 1.3.1 + pkg-types: 2.1.0 + quansync: 0.2.8 lodash._reinterpolate@3.0.0: {} @@ -4766,7 +4525,7 @@ snapshots: '@types/markdown-it': 14.1.2 markdown-it: 14.1.0 - markdown-it-async@2.0.0: + markdown-it-async@2.2.0: dependencies: '@types/markdown-it': 14.1.2 markdown-it: 14.1.0 @@ -4833,7 +4592,7 @@ snapshots: micromark-util-character@2.1.1: dependencies: micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.1 + micromark-util-types: 2.0.2 micromark-util-encode@2.0.1: {} @@ -4845,7 +4604,7 @@ snapshots: micromark-util-symbol@2.0.1: {} - micromark-util-types@2.0.1: {} + micromark-util-types@2.0.2: {} micromatch@4.0.8: dependencies: @@ -4884,7 +4643,7 @@ snapshots: mlly@1.7.4: dependencies: - acorn: 8.14.0 + acorn: 8.14.1 pathe: 2.0.3 pkg-types: 1.3.1 ufo: 1.5.4 @@ -4895,9 +4654,9 @@ snapshots: muggle-string@0.4.1: {} - nanoid@3.3.8: {} + nanoid@3.3.9: {} - nanoid@5.1.2: {} + nanoid@5.1.3: {} neo-async@2.6.2: {} @@ -4969,13 +4728,15 @@ snapshots: package-json-from-dist@1.0.1: {} - package-manager-detector@0.2.9: {} + package-manager-detector@0.2.11: + dependencies: + quansync: 0.2.8 parse-json@8.1.0: dependencies: '@babel/code-frame': 7.26.2 index-to-position: 0.1.2 - type-fest: 4.35.0 + type-fest: 4.37.0 parse-ms@4.0.0: {} @@ -5018,7 +4779,7 @@ snapshots: pkg-dir@8.0.0: dependencies: - find-up-simple: 1.0.0 + find-up-simple: 1.0.1 pkg-types@1.3.1: dependencies: @@ -5026,11 +4787,17 @@ snapshots: mlly: 1.7.4 pathe: 2.0.3 - playwright-chromium@1.50.1: + pkg-types@2.1.0: dependencies: - playwright-core: 1.50.1 + confbox: 0.2.1 + exsolve: 1.0.2 + pathe: 2.0.3 + + playwright-chromium@1.51.0: + dependencies: + playwright-core: 1.51.0 - playwright-core@1.50.1: {} + playwright-core@1.51.0: {} polka@1.0.0-next.28: dependencies: @@ -5048,13 +4815,13 @@ snapshots: postcss@8.5.3: dependencies: - nanoid: 3.3.8 + nanoid: 3.3.9 picocolors: 1.1.1 source-map-js: 1.2.1 - preact@10.26.2: {} + preact@10.26.4: {} - prettier@3.5.2: {} + prettier@3.5.3: {} pretty-ms@9.2.0: dependencies: @@ -5075,20 +4842,22 @@ snapshots: punycode@2.3.1: {} + quansync@0.2.8: {} + queue-microtask@1.2.3: {} read-package-up@11.0.0: dependencies: - find-up-simple: 1.0.0 + find-up-simple: 1.0.1 read-pkg: 9.0.1 - type-fest: 4.35.0 + type-fest: 4.37.0 read-pkg@9.0.1: dependencies: '@types/normalize-package-data': 2.4.4 normalize-package-data: 6.0.2 parse-json: 8.1.0 - type-fest: 4.35.0 + type-fest: 4.37.0 unicorn-magic: 0.1.0 readable-stream@4.7.0: @@ -5130,7 +4899,7 @@ snapshots: onetime: 7.0.0 signal-exit: 4.1.0 - reusify@1.0.4: {} + reusify@1.1.0: {} rfdc@1.4.1: {} @@ -5139,48 +4908,48 @@ snapshots: glob: 11.0.1 package-json-from-dist: 1.0.1 - rollup-plugin-dts@6.1.1(rollup@4.34.8)(typescript@5.7.3): + rollup-plugin-dts@6.1.1(rollup@4.34.9)(typescript@5.8.2): dependencies: magic-string: 0.30.17 - rollup: 4.34.8 - typescript: 5.7.3 + rollup: 4.34.9 + typescript: 5.8.2 optionalDependencies: '@babel/code-frame': 7.26.2 - rollup-plugin-esbuild@6.2.0(esbuild@0.25.0)(rollup@4.34.8): + rollup-plugin-esbuild@6.2.1(esbuild@0.25.0)(rollup@4.34.9): dependencies: debug: 4.4.0 es-module-lexer: 1.6.0 esbuild: 0.25.0 get-tsconfig: 4.10.0 - rollup: 4.34.8 + rollup: 4.34.9 unplugin-utils: 0.2.4 transitivePeerDependencies: - supports-color - rollup@4.34.8: + rollup@4.34.9: dependencies: '@types/estree': 1.0.6 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.34.8 - '@rollup/rollup-android-arm64': 4.34.8 - '@rollup/rollup-darwin-arm64': 4.34.8 - '@rollup/rollup-darwin-x64': 4.34.8 - '@rollup/rollup-freebsd-arm64': 4.34.8 - '@rollup/rollup-freebsd-x64': 4.34.8 - '@rollup/rollup-linux-arm-gnueabihf': 4.34.8 - '@rollup/rollup-linux-arm-musleabihf': 4.34.8 - '@rollup/rollup-linux-arm64-gnu': 4.34.8 - '@rollup/rollup-linux-arm64-musl': 4.34.8 - '@rollup/rollup-linux-loongarch64-gnu': 4.34.8 - '@rollup/rollup-linux-powerpc64le-gnu': 4.34.8 - '@rollup/rollup-linux-riscv64-gnu': 4.34.8 - '@rollup/rollup-linux-s390x-gnu': 4.34.8 - '@rollup/rollup-linux-x64-gnu': 4.34.8 - '@rollup/rollup-linux-x64-musl': 4.34.8 - '@rollup/rollup-win32-arm64-msvc': 4.34.8 - '@rollup/rollup-win32-ia32-msvc': 4.34.8 - '@rollup/rollup-win32-x64-msvc': 4.34.8 + '@rollup/rollup-android-arm-eabi': 4.34.9 + '@rollup/rollup-android-arm64': 4.34.9 + '@rollup/rollup-darwin-arm64': 4.34.9 + '@rollup/rollup-darwin-x64': 4.34.9 + '@rollup/rollup-freebsd-arm64': 4.34.9 + '@rollup/rollup-freebsd-x64': 4.34.9 + '@rollup/rollup-linux-arm-gnueabihf': 4.34.9 + '@rollup/rollup-linux-arm-musleabihf': 4.34.9 + '@rollup/rollup-linux-arm64-gnu': 4.34.9 + '@rollup/rollup-linux-arm64-musl': 4.34.9 + '@rollup/rollup-linux-loongarch64-gnu': 4.34.9 + '@rollup/rollup-linux-powerpc64le-gnu': 4.34.9 + '@rollup/rollup-linux-riscv64-gnu': 4.34.9 + '@rollup/rollup-linux-s390x-gnu': 4.34.9 + '@rollup/rollup-linux-x64-gnu': 4.34.9 + '@rollup/rollup-linux-x64-musl': 4.34.9 + '@rollup/rollup-win32-arm64-msvc': 4.34.9 + '@rollup/rollup-win32-ia32-msvc': 4.34.9 + '@rollup/rollup-win32-x64-msvc': 4.34.9 fsevents: 2.3.3 rtlcss@4.3.0: @@ -5217,14 +4986,14 @@ snapshots: shebang-regex@3.0.0: {} - shiki@3.0.0: + shiki@3.1.0: dependencies: - '@shikijs/core': 3.0.0 - '@shikijs/engine-javascript': 3.0.0 - '@shikijs/engine-oniguruma': 3.0.0 - '@shikijs/langs': 3.0.0 - '@shikijs/themes': 3.0.0 - '@shikijs/types': 3.0.0 + '@shikijs/core': 3.1.0 + '@shikijs/engine-javascript': 3.1.0 + '@shikijs/engine-oniguruma': 3.1.0 + '@shikijs/langs': 3.1.0 + '@shikijs/themes': 3.1.0 + '@shikijs/types': 3.1.0 '@shikijs/vscode-textmate': 10.0.2 '@types/hast': 3.0.4 @@ -5301,7 +5070,7 @@ snapshots: stackback@0.0.2: {} - std-env@3.8.0: {} + std-env@3.8.1: {} stdin-discarder@0.2.2: {} @@ -5416,9 +5185,9 @@ snapshots: type-fest@2.19.0: {} - type-fest@4.35.0: {} + type-fest@4.37.0: {} - typescript@5.7.3: {} + typescript@5.8.2: {} uc.micro@2.1.0: {} @@ -5486,13 +5255,13 @@ snapshots: '@types/unist': 3.0.3 vfile-message: 4.0.2 - vite-node@3.0.7(@types/node@22.13.5)(jiti@1.21.7)(yaml@2.7.0): + vite-node@3.0.8(@types/node@22.13.9)(jiti@1.21.7)(yaml@2.7.0): dependencies: cac: 6.7.14 debug: 4.4.0 es-module-lexer: 1.6.0 pathe: 2.0.3 - vite: 6.1.1(@types/node@22.13.5)(jiti@1.21.7)(yaml@2.7.0) + vite: 6.2.1(@types/node@22.13.9)(jiti@1.21.7)(yaml@2.7.0) transitivePeerDependencies: - '@types/node' - jiti @@ -5507,13 +5276,13 @@ snapshots: - tsx - yaml - vite@6.1.1(@types/node@22.13.5)(jiti@1.21.7)(yaml@2.7.0): + vite@6.2.1(@types/node@22.13.9)(jiti@1.21.7)(yaml@2.7.0): dependencies: - esbuild: 0.24.2 + esbuild: 0.25.0 postcss: 8.5.3 - rollup: 4.34.8 + rollup: 4.34.9 optionalDependencies: - '@types/node': 22.13.5 + '@types/node': 22.13.9 fsevents: 2.3.3 jiti: 1.21.7 yaml: 2.7.0 @@ -5526,31 +5295,31 @@ snapshots: transitivePeerDependencies: - supports-color - vitest@3.0.7(@types/debug@4.1.12)(@types/node@22.13.5)(jiti@1.21.7)(yaml@2.7.0): + vitest@3.0.8(@types/debug@4.1.12)(@types/node@22.13.9)(jiti@1.21.7)(yaml@2.7.0): dependencies: - '@vitest/expect': 3.0.7 - '@vitest/mocker': 3.0.7(vite@6.1.1(@types/node@22.13.5)(jiti@1.21.7)(yaml@2.7.0)) - '@vitest/pretty-format': 3.0.7 - '@vitest/runner': 3.0.7 - '@vitest/snapshot': 3.0.7 - '@vitest/spy': 3.0.7 - '@vitest/utils': 3.0.7 + '@vitest/expect': 3.0.8 + '@vitest/mocker': 3.0.8(vite@6.2.1(@types/node@22.13.9)(jiti@1.21.7)(yaml@2.7.0)) + '@vitest/pretty-format': 3.0.8 + '@vitest/runner': 3.0.8 + '@vitest/snapshot': 3.0.8 + '@vitest/spy': 3.0.8 + '@vitest/utils': 3.0.8 chai: 5.2.0 debug: 4.4.0 - expect-type: 1.1.0 + expect-type: 1.2.0 magic-string: 0.30.17 pathe: 2.0.3 - std-env: 3.8.0 + std-env: 3.8.1 tinybench: 2.9.0 tinyexec: 0.3.2 tinypool: 1.0.2 tinyrainbow: 2.0.0 - vite: 6.1.1(@types/node@22.13.5)(jiti@1.21.7)(yaml@2.7.0) - vite-node: 3.0.7(@types/node@22.13.5)(jiti@1.21.7)(yaml@2.7.0) + vite: 6.2.1(@types/node@22.13.9)(jiti@1.21.7)(yaml@2.7.0) + vite-node: 3.0.8(@types/node@22.13.9)(jiti@1.21.7)(yaml@2.7.0) why-is-node-running: 2.3.0 optionalDependencies: '@types/debug': 4.1.12 - '@types/node': 22.13.5 + '@types/node': 22.13.9 transitivePeerDependencies: - jiti - less @@ -5567,25 +5336,25 @@ snapshots: vscode-uri@3.1.0: {} - vue-tsc@2.2.0(typescript@5.7.3): + vue-tsc@2.2.8(typescript@5.8.2): dependencies: - '@volar/typescript': 2.4.11 - '@vue/language-core': 2.2.0(typescript@5.7.3) - typescript: 5.7.3 + '@volar/typescript': 2.4.12 + '@vue/language-core': 2.2.8(typescript@5.8.2) + typescript: 5.8.2 - vue@3.5.13(typescript@5.7.3): + vue@3.5.13(typescript@5.8.2): dependencies: '@vue/compiler-dom': 3.5.13 '@vue/compiler-sfc': 3.5.13 '@vue/runtime-dom': 3.5.13 - '@vue/server-renderer': 3.5.13(vue@3.5.13(typescript@5.7.3)) + '@vue/server-renderer': 3.5.13(vue@3.5.13(typescript@5.8.2)) '@vue/shared': 3.5.13 optionalDependencies: - typescript: 5.7.3 + typescript: 5.8.2 wait-on@8.0.2(debug@4.4.0): dependencies: - axios: 1.7.9(debug@4.4.0) + axios: 1.8.2(debug@4.4.0) joi: 17.13.3 lodash: 4.17.21 minimist: 1.2.8 From a8a1800ae578be88027aa4ec7561ada4d055b888 Mon Sep 17 00:00:00 2001 From: Divyansh Singh <40380293+brc-dd@users.noreply.github.com> Date: Sat, 8 Mar 2025 21:35:06 +0530 Subject: [PATCH 32/53] fix: ignore non-text content in permalink generation and fix types of markdown.config --- src/node/markdown/markdown.ts | 46 +++++++++++++++++++++-------------- 1 file changed, 28 insertions(+), 18 deletions(-) diff --git a/src/node/markdown/markdown.ts b/src/node/markdown/markdown.ts index aca503e2..12de0d11 100644 --- a/src/node/markdown/markdown.ts +++ b/src/node/markdown/markdown.ts @@ -25,6 +25,7 @@ import attrsPlugin from 'markdown-it-attrs' import { full as emojiPlugin } from 'markdown-it-emoji' import type { BuiltinLanguage, BuiltinTheme, Highlighter } from 'shiki' import type { Logger } from 'vite' +import type { Awaitable } from '../shared' import { containerPlugin, type ContainerOptions } from './plugins/containers' import { gitHubAlertsPlugin } from './plugins/githubAlerts' import { highlight as createHighlighter } from './plugins/highlight' @@ -52,11 +53,11 @@ export interface MarkdownOptions extends Options { /** * Setup markdown-it instance before applying plugins */ - preConfig?: (md: MarkdownItAsync) => Awaited + preConfig?: (md: MarkdownItAsync) => Awaitable /** * Setup markdown-it instance */ - config?: (md: MarkdownItAsync) => Awaited + config?: (md: MarkdownItAsync) => Awaitable /** * Disable cache (experimental) */ @@ -268,22 +269,31 @@ export async function createMarkdownRenderer( .map((t) => t.content) .join('') }, - permalink: anchorPlugin.permalink.linkInsideHeader({ - symbol: '​', - renderAttrs: (slug, state) => { - // Find `heading_open` with the id identical to slug - const idx = state.tokens.findIndex((token) => { - const attrs = token.attrs - const id = attrs?.find((attr) => attr[0] === 'id') - return id && slug === id[1] - }) - // Get the actual heading content - const title = state.tokens[idx + 1].content - return { - 'aria-label': `Permalink to "${title}"` - } - } - }), + permalink: (slug, _, state, idx) => { + const title = + state.tokens[idx + 1]?.children + ?.filter((token) => ['text', 'code_inline'].includes(token.type)) + .reduce((acc, t) => acc + t.content, '') + .trim() || '' + + const linkTokens = [ + Object.assign(new state.Token('text', '', 0), { content: ' ' }), + Object.assign(new state.Token('link_open', 'a', 1), { + attrs: [ + ['class', 'header-anchor'], + ['href', `#${slug}`], + ['aria-label', `Permalink to “${title}”`] + ] + }), + Object.assign(new state.Token('html_inline', '', 0), { + content: '​', + meta: { isPermalinkSymbol: true } + }), + new state.Token('link_close', 'a', -1) + ] + + state.tokens[idx + 1].children?.push(...linkTokens) + }, ...options.anchor } as anchorPlugin.AnchorOptions).use(frontmatterPlugin, { ...options.frontmatter From aadc517c69fb239bdda99173bbc123ace567484b Mon Sep 17 00:00:00 2001 From: James ZHANG <1631685+TheNorthMemory@users.noreply.github.com> Date: Sun, 9 Mar 2025 02:28:48 +0800 Subject: [PATCH 33/53] fix: don't hardcode `tabindex` attr in table renderer (#4082) Co-authored-by: Divyansh Singh <40380293+brc-dd@users.noreply.github.com> --- src/node/markdown/markdown.ts | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/node/markdown/markdown.ts b/src/node/markdown/markdown.ts index 12de0d11..fd6bf492 100644 --- a/src/node/markdown/markdown.ts +++ b/src/node/markdown/markdown.ts @@ -246,8 +246,13 @@ export async function createMarkdownRenderer( ) .use(lineNumberPlugin, options.lineNumbers) + const tableOpen = md.renderer.rules.table_open md.renderer.rules.table_open = function (tokens, idx, options, env, self) { - return '\n' + const token = tokens[idx] + if (token.attrIndex('tabindex') < 0) token.attrPush(['tabindex', '0']) + return tableOpen + ? tableOpen(tokens, idx, options, env, self) + : self.renderToken(tokens, idx, options) } if (options.gfmAlerts !== false) { From 8aad617446c03d39a65a0b21e9fce43bc484af1e Mon Sep 17 00:00:00 2001 From: James ZHANG <1631685+TheNorthMemory@users.noreply.github.com> Date: Sun, 9 Mar 2025 02:30:51 +0800 Subject: [PATCH 34/53] fix: properly merge classes in custom containers (#4128) --- src/node/markdown/plugins/containers.ts | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/node/markdown/plugins/containers.ts b/src/node/markdown/plugins/containers.ts index 6b08fc3d..073fb38d 100644 --- a/src/node/markdown/plugins/containers.ts +++ b/src/node/markdown/plugins/containers.ts @@ -62,15 +62,16 @@ function createContainer( { render(tokens, idx, _options, env: MarkdownEnv & { references?: any }) { const token = tokens[idx] - const info = token.info.trim().slice(klass.length).trim() - const attrs = md.renderer.renderAttrs(token) if (token.nesting === 1) { + token.attrJoin('class', `${klass} custom-block`) + const attrs = md.renderer.renderAttrs(token) + const info = token.info.trim().slice(klass.length).trim() const title = md.renderInline(info || defaultTitle, { references: env.references }) if (klass === 'details') - return `
${title}\n` - return `

${title}

\n` + return `
${title}\n` + return `

${title}

\n` } else return klass === 'details' ? `
\n` : `
\n` } } From b99d5123c9b2afdc7461089e03476c34d7816faf Mon Sep 17 00:00:00 2001 From: Divyansh Singh <40380293+brc-dd@users.noreply.github.com> Date: Sun, 9 Mar 2025 12:51:36 +0530 Subject: [PATCH 35/53] feat: support using header anchors in markdown file inclusion (#4608) closes #4375 closes #4382 Co-authored-by: btea <2356281422@qq.com> --- .../e2e/markdown-extensions/header-include.md | 27 +++++++++ __tests__/e2e/markdown-extensions/index.md | 6 +- .../markdown-extensions.test.ts | 57 ++++++++++++++++++- docs/en/guide/markdown.md | 47 +++++++++++++++ src/node/markdownToVue.ts | 2 +- src/node/plugins/localSearchPlugin.ts | 2 +- src/node/utils/processIncludes.ts | 52 ++++++++++++++--- 7 files changed, 180 insertions(+), 13 deletions(-) create mode 100644 __tests__/e2e/markdown-extensions/header-include.md diff --git a/__tests__/e2e/markdown-extensions/header-include.md b/__tests__/e2e/markdown-extensions/header-include.md new file mode 100644 index 00000000..70fac23b --- /dev/null +++ b/__tests__/e2e/markdown-extensions/header-include.md @@ -0,0 +1,27 @@ +# header 1 + +header 1 content + +## header 1.1 + +header 1.1 content + +### header 1.1.1 + +header 1.1.1 content + +### header 1.1.2 + +header 1.1.2 content + +## header 1.2 + +header 1.2 content + +### header 1.2.1 + +header 1.2.1 content + +### header 1.2.2 + +header 1.2.2 content diff --git a/__tests__/e2e/markdown-extensions/index.md b/__tests__/e2e/markdown-extensions/index.md index 855803f2..3446b4ef 100644 --- a/__tests__/e2e/markdown-extensions/index.md +++ b/__tests__/e2e/markdown-extensions/index.md @@ -213,6 +213,10 @@ export default config +## Markdown File Inclusion with Header + + + ## Image Lazy Loading -![vitepress logo](/vitepress.png) \ No newline at end of file +![vitepress logo](/vitepress.png) diff --git a/__tests__/e2e/markdown-extensions/markdown-extensions.test.ts b/__tests__/e2e/markdown-extensions/markdown-extensions.test.ts index e49a137f..839f953c 100644 --- a/__tests__/e2e/markdown-extensions/markdown-extensions.test.ts +++ b/__tests__/e2e/markdown-extensions/markdown-extensions.test.ts @@ -64,8 +64,61 @@ describe('Emoji', () => { describe('Table of Contents', () => { test('render toc', async () => { const items = page.locator('#table-of-contents + nav ul li') - const count = await items.count() - expect(count).toBe(44) + expect( + await items.evaluateAll((elements) => + elements.map((el) => el.childNodes[0].textContent) + ) + ).toMatchInlineSnapshot(` + [ + "Links", + "Internal Links", + "External Links", + "GitHub-Style Tables", + "Emoji", + "Table of Contents", + "Custom Containers", + "Default Title", + "Custom Title", + "Line Highlighting in Code Blocks", + "Single Line", + "Multiple single lines, ranges", + "Comment Highlight", + "Line Numbers", + "Import Code Snippets", + "Basic Code Snippet", + "Specify Region", + "With Other Features", + "Code Groups", + "Basic Code Group", + "With Other Features", + "Markdown File Inclusion", + "Region", + "Markdown At File Inclusion", + "Markdown Nested File Inclusion", + "Region", + "After Foo", + "Sub sub", + "Sub sub sub", + "Markdown File Inclusion with Range", + "Region", + "Markdown File Inclusion with Range without Start", + "Region", + "Markdown File Inclusion with Range without End", + "Region", + "Markdown At File Region Snippet", + "Region Snippet", + "Markdown At File Range Region Snippet", + "Range Region Line 2", + "Markdown At File Range Region Snippet without start", + "Range Region Line 1", + "Markdown At File Range Region Snippet without end", + "Range Region Line 3", + "Markdown File Inclusion with Header", + "header 1.1.1", + "header 1.1.2", + "Image Lazy Loading", + ] + `) }) }) diff --git a/docs/en/guide/markdown.md b/docs/en/guide/markdown.md index cf052919..88729f3e 100644 --- a/docs/en/guide/markdown.md +++ b/docs/en/guide/markdown.md @@ -897,6 +897,53 @@ You can also use a [VS Code region](https://code.visualstudio.com/docs/editor/co Note that this does not throw errors if your file is not present. Hence, when using this feature make sure that the contents are being rendered as expected. ::: +Instead of VS Code regions, you can also use header anchors to include a specific section of the file. For example, if you have a header in your markdown file like this: + +```md +## My Base Section + +Some content here. + +### My Sub Section + +Some more content here. + +## Another Section + +Content outside `My Base Section`. +``` + +You can include the `My Base Section` section like this: + +```md +## My Extended Section + +``` + +**Equivalent code** + +```md +## My Extended Section + +Some content here. + +### My Sub Section + +Some more content here. +``` + +Here, `my-base-section` is the generated id of the heading element. In case it's not easily guessable, you can open the part file in your browser and click on the heading anchor (`#` symbol left to the heading when hovered) to see the id in the URL bar. Or use browser dev tools to inspect the element. Alternatively, you can also specify the id to the part file like this: + +```md +## My Base Section {#custom-id} +``` + +and include it like this: + +```md + +``` + ## Math Equations This is currently opt-in. To enable it, you need to install `markdown-it-mathjax3` and set `markdown.math` to `true` in your config file: diff --git a/src/node/markdownToVue.ts b/src/node/markdownToVue.ts index d4576cda..6d2ba98d 100644 --- a/src/node/markdownToVue.ts +++ b/src/node/markdownToVue.ts @@ -142,7 +142,7 @@ export async function createMarkdownToVueRenderFn( // resolve includes let includes: string[] = [] - src = processIncludes(srcDir, src, fileOrig, includes) + src = processIncludes(md, srcDir, src, fileOrig, includes, cleanUrls) const localeIndex = getLocaleForPath(siteConfig?.site, relativePath) diff --git a/src/node/plugins/localSearchPlugin.ts b/src/node/plugins/localSearchPlugin.ts index debc024c..5687ad03 100644 --- a/src/node/plugins/localSearchPlugin.ts +++ b/src/node/plugins/localSearchPlugin.ts @@ -56,7 +56,7 @@ export async function localSearchPlugin( const relativePath = slash(path.relative(srcDir, file)) const env: MarkdownEnv = { path: file, relativePath, cleanUrls } const md_raw = await fs.promises.readFile(file, 'utf-8') - const md_src = processIncludes(srcDir, md_raw, file, []) + const md_src = processIncludes(md, srcDir, md_raw, file, [], cleanUrls) if (options._render) { return await options._render(md_src, env, md) } else { diff --git a/src/node/utils/processIncludes.ts b/src/node/utils/processIncludes.ts index acdccab7..aa98ccbd 100644 --- a/src/node/utils/processIncludes.ts +++ b/src/node/utils/processIncludes.ts @@ -1,18 +1,21 @@ import fs from 'fs-extra' import matter from 'gray-matter' +import type { MarkdownItAsync } from 'markdown-it-async' import path from 'node:path' import c from 'picocolors' import { findRegion } from '../markdown/plugins/snippet' -import { slash } from '../shared' +import { slash, type MarkdownEnv } from '../shared' export function processIncludes( + md: MarkdownItAsync, srcDir: string, src: string, file: string, - includes: string[] + includes: string[], + cleanUrls: boolean ): string { const includesRE = //g - const regionRE = /(#[\w-]+)/ + const regionRE = /(#[^\s\{]+)/ const rangeRE = /\{(\d*),(\d*)\}$/ return src.replace(includesRE, (m: string, m1: string) => { @@ -39,8 +42,34 @@ export function processIncludes( if (region) { const [regionName] = region const lines = content.split(/\r?\n/) - const regionLines = findRegion(lines, regionName.slice(1)) - content = lines.slice(regionLines?.start, regionLines?.end).join('\n') + let { start, end } = findRegion(lines, regionName.slice(1)) ?? {} + + if (start === undefined) { + // region not found, it might be a header + const tokens = md + .parse(content, { + path: includePath, + relativePath: slash(path.relative(srcDir, includePath)), + cleanUrls + } satisfies MarkdownEnv) + .filter((t) => t.type === 'heading_open' && t.map) + const idx = tokens.findIndex( + (t) => t.attrGet('id') === regionName.slice(1) + ) + const token = tokens[idx] + if (token) { + start = token.map![1] + const level = parseInt(token.tag.slice(1)) + for (let i = idx + 1; i < tokens.length; i++) { + if (parseInt(tokens[i].tag.slice(1)) <= level) { + end = tokens[i].map![0] + break + } + } + } + } + + content = lines.slice(start, end).join('\n') } if (range) { @@ -48,8 +77,8 @@ export function processIncludes( const lines = content.split(/\r?\n/) content = lines .slice( - startLine ? parseInt(startLine, 10) - 1 : undefined, - endLine ? parseInt(endLine, 10) : undefined + startLine ? parseInt(startLine) - 1 : undefined, + endLine ? parseInt(endLine) : undefined ) .join('\n') } @@ -60,7 +89,14 @@ export function processIncludes( includes.push(slash(includePath)) // recursively process includes in the content - return processIncludes(srcDir, content, includePath, includes) + return processIncludes( + md, + srcDir, + content, + includePath, + includes, + cleanUrls + ) // } catch (error) { From 5fc2eaa8b6e596db04c8925bfee57ffc684eebf7 Mon Sep 17 00:00:00 2001 From: Divyansh Singh <40380293+brc-dd@users.noreply.github.com> Date: Sun, 9 Mar 2025 12:55:29 +0530 Subject: [PATCH 36/53] release: v2.0.0-alpha.4 --- CHANGELOG.md | 18 ++++++++++++++++++ package.json | 2 +- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ec6ee176..387e81e0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,21 @@ +## [2.0.0-alpha.4](https://github.com/vuejs/vitepress/compare/v2.0.0-alpha.3...v2.0.0-alpha.4) (2025-03-09) + +### Bug Fixes + +- **build/regression:** langAlias not working ([06ae2bf](https://github.com/vuejs/vitepress/commit/06ae2bf3a4ee02351530b0bd055e577ca6509d62)), closes [#4581](https://github.com/vuejs/vitepress/issues/4581) +- don't hardcode `tabindex` attr in table renderer ([#4082](https://github.com/vuejs/vitepress/issues/4082)) ([aadc517](https://github.com/vuejs/vitepress/commit/aadc517c69fb239bdda99173bbc123ace567484b)) +- hmr not working for watched files in path loaders ([e271695](https://github.com/vuejs/vitepress/commit/e271695d716247455ca620948f814e6c8ca0e3c4)), closes [#4525](https://github.com/vuejs/vitepress/issues/4525) +- ignore non-text content in permalink generation and fix types of markdown.config ([a8a1800](https://github.com/vuejs/vitepress/commit/a8a1800ae578be88027aa4ec7561ada4d055b888)) +- prevent reload on first server start in fresh installations ([d8a884e](https://github.com/vuejs/vitepress/commit/d8a884ed0f754523765058a70149cdbaf6942341)) +- properly merge classes in custom containers ([#4128](https://github.com/vuejs/vitepress/issues/4128)) ([8aad617](https://github.com/vuejs/vitepress/commit/8aad617446c03d39a65a0b21e9fce43bc484af1e)) +- rebuild dynamic routes cache on server restart ([9f54714](https://github.com/vuejs/vitepress/commit/9f54714e7db69fd4902f1917f927456c71b5a292)), closes [#4525](https://github.com/vuejs/vitepress/issues/4525) + +### Features + +- allow matching region end in snippets without tag ([#4287](https://github.com/vuejs/vitepress/issues/4287)) ([1a2f81d](https://github.com/vuejs/vitepress/commit/1a2f81de4d6549dd1adf86ae131d1a861158bd2d)) +- improve region regexes for snippet plugin ([1a6684c](https://github.com/vuejs/vitepress/commit/1a6684cf1054d326bc1dd6eeb9fb78b150ac2b2a)) +- support using header anchors in markdown file inclusion ([#4608](https://github.com/vuejs/vitepress/issues/4608)) ([b99d512](https://github.com/vuejs/vitepress/commit/b99d5123c9b2afdc7461089e03476c34d7816faf)), closes [#4375](https://github.com/vuejs/vitepress/issues/4375) [#4382](https://github.com/vuejs/vitepress/issues/4382) + ## [2.0.0-alpha.3](https://github.com/vuejs/vitepress/compare/v2.0.0-alpha.2...v2.0.0-alpha.3) (2025-02-24) ### Bug Fixes diff --git a/package.json b/package.json index 5e110096..f44e3c28 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "vitepress", - "version": "2.0.0-alpha.3", + "version": "2.0.0-alpha.4", "description": "Vite & Vue powered static site generator", "keywords": [ "vite", From e06b83ec0949a0fad712f4059819e737058ca0e7 Mon Sep 17 00:00:00 2001 From: Bugo Date: Sun, 9 Mar 2025 13:30:17 +0500 Subject: [PATCH 37/53] docs(ru): update translations (#4610) --------- Co-authored-by: Divyansh Singh <40380293+brc-dd@users.noreply.github.com> --- docs/ru/guide/i18n.md | 2 +- docs/ru/guide/markdown.md | 51 +++++++++++++++++++++++++++++++++++++-- 2 files changed, 50 insertions(+), 3 deletions(-) diff --git a/docs/ru/guide/i18n.md b/docs/ru/guide/i18n.md index d698f030..b982eece 100644 --- a/docs/ru/guide/i18n.md +++ b/docs/ru/guide/i18n.md @@ -27,7 +27,7 @@ export default defineConfig({ ru: { label: 'Русский', lang: 'ru', // необязательный, будет добавлен как атрибут `lang` в тег `html` - link: '/ru/guide' // по умолчанию /ru/ -- отображается в меню переводов на панели навигации, может быть внешним + link: '/ru/guide' // по умолчанию /ru/ -- ссылка в меню переводов на панели навигации, может быть внешней // другие свойства, специфичные для локали... } diff --git a/docs/ru/guide/markdown.md b/docs/ru/guide/markdown.md index 192bd2f8..b67e1355 100644 --- a/docs/ru/guide/markdown.md +++ b/docs/ru/guide/markdown.md @@ -844,7 +844,7 @@ export default config Может быть создана с помощью `.foorc.json`. ``` -**Эквивалентный код** +**Соответствующий код** ```md # Документация @@ -883,7 +883,7 @@ export default config ``` -**Эквивалентный код** +**Соответствующий код** ```md # Документация @@ -899,6 +899,53 @@ export default config Обратите внимание, что это не приводит к ошибкам, если ваш файл отсутствует. Поэтому при использовании этой функции убедитесь, что содержимое отображается так, как ожидается. ::: +Вместо регионов VS Code вы также можете использовать якоря заголовков, чтобы включить определённый раздел файла. Например, если у вас есть заголовок в вашем markdown-файле, например: + +```md +## Мой основной раздел + +Какой-то контент здесь. + +### Мой подраздел + +Ещё немного контента здесь. + +## Другой раздел + +Контент вне `Моего основного раздела`. +``` + +Вы можете включить раздел `Мой основной раздел` следующим образом: + +```md +## Мой дополнительный раздел + +``` + +**Соответствующий код** + +```md +## Мой дополнительный раздел + +Какой-то контент здесь. + +### Мой подраздел + +Ещё немного контента здесь. +``` + +Здесь `мои-основнои-раздел` — это сгенерированный идентификатор элемента заголовка. Если его нелегко угадать, вы можете открыть файл в браузере и нажать на якорь заголовка (символ `#` слева от заголовка при наведении), чтобы увидеть идентификатор в адресной строке. Или используйте инструменты разработчика браузера для проверки элемента. Кроме того, вы также можете указать идентификатор для файла части следующим образом: + +```md +## Мой основной раздел {#custom-id} +``` + +и включить его следующим образом: + +```md + +``` + ## Математические уравнения {#math-equations} В настоящее время эта фича предоставляется по желанию. Чтобы включить её, вам нужно установить `markdown-it-mathjax3` и установить значение `true` для опции `markdown.math` в вашем файле конфигурации: From e25d0805505db2f1116e99d38a488d5cb39ed426 Mon Sep 17 00:00:00 2001 From: Divyansh Singh <40380293+brc-dd@users.noreply.github.com> Date: Tue, 18 Mar 2025 09:31:13 +0530 Subject: [PATCH 38/53] fix: normalize url fragments in internal links to correctly resolve to anchors (#4628) closes #4605 - Normalizations aren't applied to raw html inside markdown or vue code. - It is assumed `slugify(slugify(something)) === slugify(something)` --- src/node/markdown/markdown.ts | 8 ++++++-- src/node/markdown/plugins/link.ts | 22 +++++++++++++++------- 2 files changed, 21 insertions(+), 9 deletions(-) diff --git a/src/node/markdown/markdown.ts b/src/node/markdown/markdown.ts index fd6bf492..bb56e0cf 100644 --- a/src/node/markdown/markdown.ts +++ b/src/node/markdown/markdown.ts @@ -13,7 +13,7 @@ import { import { sfcPlugin, type SfcPluginOptions } from '@mdit-vue/plugin-sfc' import { titlePlugin } from '@mdit-vue/plugin-title' import { tocPlugin, type TocPluginOptions } from '@mdit-vue/plugin-toc' -import { slugify } from '@mdit-vue/shared' +import { slugify as defaultSlugify } from '@mdit-vue/shared' import type { LanguageInput, ShikiTransformer, @@ -232,6 +232,8 @@ export async function createMarkdownRenderer( await options.preConfig(md) } + const slugify = options.anchor?.slugify ?? defaultSlugify + // custom plugins md.use(componentPlugin, { ...options.component }) .use(highlightLinePlugin) @@ -242,7 +244,8 @@ export async function createMarkdownRenderer( .use( linkPlugin, { target: '_blank', rel: 'noreferrer', ...options.externalLinks }, - base + base, + slugify ) .use(lineNumberPlugin, options.lineNumbers) @@ -317,6 +320,7 @@ export async function createMarkdownRenderer( } as SfcPluginOptions) .use(titlePlugin) .use(tocPlugin, { + slugify, ...options.toc } as TocPluginOptions) diff --git a/src/node/markdown/plugins/link.ts b/src/node/markdown/plugins/link.ts index 3e48843c..2fe2e1ac 100644 --- a/src/node/markdown/plugins/link.ts +++ b/src/node/markdown/plugins/link.ts @@ -16,7 +16,8 @@ const indexRE = /(^|.*\/)index.md(#?.*)$/i export const linkPlugin = ( md: MarkdownItAsync, externalAttrs: Record, - base: string + base: string, + slugify: (str: string) => string ) => { md.renderer.rules.link_open = ( tokens, @@ -27,9 +28,12 @@ export const linkPlugin = ( ) => { const token = tokens[idx] const hrefIndex = token.attrIndex('href') - const targetIndex = token.attrIndex('target') - const downloadIndex = token.attrIndex('download') - if (hrefIndex >= 0 && targetIndex < 0 && downloadIndex < 0) { + if ( + hrefIndex >= 0 && + token.attrIndex('target') < 0 && + token.attrIndex('download') < 0 && + token.attrGet('class') !== 'header-anchor' // header anchors are already normalized + ) { const hrefAttr = token.attrs![hrefIndex] const url = hrefAttr[1] if (isExternal(url)) { @@ -54,7 +58,7 @@ export const linkPlugin = ( ) { normalizeHref(hrefAttr, env) } else if (url.startsWith('#')) { - hrefAttr[1] = decodeURI(hrefAttr[1]) + hrefAttr[1] = decodeURI(normalizeHash(hrefAttr[1])) } // append base to internal (non-relative) urls @@ -72,7 +76,7 @@ export const linkPlugin = ( const indexMatch = url.match(indexRE) if (indexMatch) { const [, path, hash] = indexMatch - url = path + hash + url = path + normalizeHash(hash) } else { let cleanUrl = url.replace(/[?#].*$/, '') // transform foo.md -> foo[.html] @@ -88,7 +92,7 @@ export const linkPlugin = ( cleanUrl += '.html' } const parsed = new URL(url, 'http://a.com') - url = cleanUrl + parsed.search + parsed.hash + url = cleanUrl + parsed.search + normalizeHash(parsed.hash) } // ensure leading . for relative paths @@ -103,6 +107,10 @@ export const linkPlugin = ( hrefAttr[1] = decodeURI(url) } + function normalizeHash(str: string) { + return str ? encodeURI('#' + slugify(decodeURI(str).slice(1))) : '' + } + function pushLink(link: string, env: MarkdownEnv) { const links = env.links || (env.links = []) links.push(link) From a97ae461d4bba64af00444f0cacc62f053cfd97c Mon Sep 17 00:00:00 2001 From: Okinea Dev Date: Wed, 19 Mar 2025 02:31:03 +0100 Subject: [PATCH 39/53] chore: use SVG logo on main website page (#4623) --------- Co-authored-by: Kia King Ishii Co-authored-by: Divyansh Singh <40380293+brc-dd@users.noreply.github.com> --- art/vitepress-logo.svg | 2 +- docs/.vitepress/theme/styles.css | 5 +++++ docs/en/index.md | 2 +- docs/es/index.md | 2 +- docs/fa/index.md | 2 +- docs/ko/index.md | 2 +- docs/pt/index.md | 2 +- docs/public/vitepress-logo-large.svg | 1 + docs/public/vitepress-logo-mini.svg | 22 +--------------------- docs/ru/index.md | 2 +- 10 files changed, 14 insertions(+), 28 deletions(-) create mode 120000 docs/public/vitepress-logo-large.svg mode change 100644 => 120000 docs/public/vitepress-logo-mini.svg diff --git a/art/vitepress-logo.svg b/art/vitepress-logo.svg index 1052015b..0805ed51 100644 --- a/art/vitepress-logo.svg +++ b/art/vitepress-logo.svg @@ -1,4 +1,4 @@ - + diff --git a/docs/.vitepress/theme/styles.css b/docs/.vitepress/theme/styles.css index 1f397744..ce1c75d2 100644 --- a/docs/.vitepress/theme/styles.css +++ b/docs/.vitepress/theme/styles.css @@ -33,6 +33,11 @@ } } +.VPHero .VPImage { + filter: drop-shadow(-2px 4px 6px rgba(0, 0, 0, 0.2)); + padding: 18px; +} + /* used in reference/default-theme-search */ img[src='/search.png'] { width: 100%; diff --git a/docs/en/index.md b/docs/en/index.md index d65ee07b..c91ce953 100644 --- a/docs/en/index.md +++ b/docs/en/index.md @@ -19,7 +19,7 @@ hero: text: GitHub link: https://github.com/vuejs/vitepress image: - src: /vitepress-logo-large.webp + src: /vitepress-logo-large.svg alt: VitePress features: diff --git a/docs/es/index.md b/docs/es/index.md index 6ced6057..04a4c68f 100644 --- a/docs/es/index.md +++ b/docs/es/index.md @@ -19,7 +19,7 @@ hero: text: GitHub link: https://github.com/vuejs/vitepress image: - src: /vitepress-logo-large.webp + src: /vitepress-logo-large.svg alt: VitePress features: diff --git a/docs/fa/index.md b/docs/fa/index.md index 1637397f..cd6552ba 100644 --- a/docs/fa/index.md +++ b/docs/fa/index.md @@ -19,7 +19,7 @@ hero: text: گیت‌هاب link: https://github.com/vuejs/vitepress image: - src: /vitepress-logo-large.webp + src: /vitepress-logo-large.svg alt: ویت‌پرس features: diff --git a/docs/ko/index.md b/docs/ko/index.md index 6a16ff49..3ddaa07d 100644 --- a/docs/ko/index.md +++ b/docs/ko/index.md @@ -19,7 +19,7 @@ hero: text: GitHub link: https://github.com/vuejs/vitepress image: - src: /vitepress-logo-large.webp + src: /vitepress-logo-large.svg alt: VitePress features: diff --git a/docs/pt/index.md b/docs/pt/index.md index fccf03a0..71fff26b 100644 --- a/docs/pt/index.md +++ b/docs/pt/index.md @@ -19,7 +19,7 @@ hero: text: GitHub link: https://github.com/vuejs/vitepress image: - src: /vitepress-logo-large.webp + src: /vitepress-logo-large.svg alt: VitePress features: diff --git a/docs/public/vitepress-logo-large.svg b/docs/public/vitepress-logo-large.svg new file mode 120000 index 00000000..59e331aa --- /dev/null +++ b/docs/public/vitepress-logo-large.svg @@ -0,0 +1 @@ +../../art/vitepress-logo.svg \ No newline at end of file diff --git a/docs/public/vitepress-logo-mini.svg b/docs/public/vitepress-logo-mini.svg deleted file mode 100644 index 47756f7a..00000000 --- a/docs/public/vitepress-logo-mini.svg +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/public/vitepress-logo-mini.svg b/docs/public/vitepress-logo-mini.svg new file mode 120000 index 00000000..f7c9b3af --- /dev/null +++ b/docs/public/vitepress-logo-mini.svg @@ -0,0 +1 @@ +../../art/vitepress-logo-mini.svg \ No newline at end of file diff --git a/docs/ru/index.md b/docs/ru/index.md index 6d5f0de3..77f2072a 100644 --- a/docs/ru/index.md +++ b/docs/ru/index.md @@ -19,7 +19,7 @@ hero: text: GitHub link: https://github.com/vuejs/vitepress image: - src: /vitepress-logo-large.webp + src: /vitepress-logo-large.svg alt: VitePress features: From d07298120b31bd9ddd251d95ce8c2d2c2f919734 Mon Sep 17 00:00:00 2001 From: btea <2356281422@qq.com> Date: Wed, 19 Mar 2025 21:58:45 +0800 Subject: [PATCH 40/53] docs: markdown file inclusion example config line-numbers (#4633) --- docs/en/guide/markdown.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/en/guide/markdown.md b/docs/en/guide/markdown.md index 88729f3e..bbd2b2a3 100644 --- a/docs/en/guide/markdown.md +++ b/docs/en/guide/markdown.md @@ -824,7 +824,7 @@ It also supports selecting a line range: **Input** -```md +```md:line-numbers # Docs ## Basics @@ -834,7 +834,7 @@ It also supports selecting a line range: **Part file** (`parts/basics.md`) -```md +```md:line-numbers Some getting started stuff. ### Configuration @@ -844,7 +844,7 @@ Can be created using `.foorc.json`. **Equivalent code** -```md +```md:line-numbers # Docs ## Basics @@ -860,7 +860,7 @@ You can also use a [VS Code region](https://code.visualstudio.com/docs/editor/co **Input** -```md +```md:line-numbers # Docs ## Basics @@ -871,7 +871,7 @@ You can also use a [VS Code region](https://code.visualstudio.com/docs/editor/co **Part file** (`parts/basics.md`) -```md +```md:line-numbers ## Usage Line 1 @@ -883,7 +883,7 @@ You can also use a [VS Code region](https://code.visualstudio.com/docs/editor/co **Equivalent code** -```md +```md:line-numbers # Docs ## Basics From 9d0145d32dd72bfcc6964afb7c5016668fb57a40 Mon Sep 17 00:00:00 2001 From: GabrielxD Date: Thu, 20 Mar 2025 21:52:00 +0800 Subject: [PATCH 41/53] chore(docs): use SVG logo on zh index page (#4638) --- docs/zh/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/zh/index.md b/docs/zh/index.md index 81f71c16..e07f9136 100644 --- a/docs/zh/index.md +++ b/docs/zh/index.md @@ -19,7 +19,7 @@ hero: text: GitHub link: https://github.com/vuejs/vitepress image: - src: /vitepress-logo-large.webp + src: /vitepress-logo-large.svg alt: VitePress features: From 7d9448192079e59493aa5c1e86cdf6d6deae8e36 Mon Sep 17 00:00:00 2001 From: GabrielxD Date: Fri, 21 Mar 2025 15:42:57 +0800 Subject: [PATCH 42/53] fix(theme-default): ensure proper sizing of SVG hero images (#4639) Co-authored-by: Divyansh Singh <40380293+brc-dd@users.noreply.github.com> --- src/client/theme-default/components/VPHero.vue | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/client/theme-default/components/VPHero.vue b/src/client/theme-default/components/VPHero.vue index b3d527d7..c60a9b46 100644 --- a/src/client/theme-default/components/VPHero.vue +++ b/src/client/theme-default/components/VPHero.vue @@ -322,6 +322,9 @@ const heroImageSlotExists = inject('hero-image-slot-exists') as Ref left: 50%; max-width: 192px; max-height: 192px; + width: 100%; + height: 100%; + object-fit: contain; /*rtl:ignore*/ transform: translate(-50%, -50%); } From 63079bff03b15861d174199f7361a2aff84380e0 Mon Sep 17 00:00:00 2001 From: Shigma Date: Mon, 24 Mar 2025 11:29:14 +0800 Subject: [PATCH 43/53] feat: add `custom-block-title-default` class when default title is used for containers (#4643) --- src/node/markdown/plugins/containers.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/node/markdown/plugins/containers.ts b/src/node/markdown/plugins/containers.ts index 073fb38d..a00b9a85 100644 --- a/src/node/markdown/plugins/containers.ts +++ b/src/node/markdown/plugins/containers.ts @@ -69,9 +69,11 @@ function createContainer( const title = md.renderInline(info || defaultTitle, { references: env.references }) + const titleClass = + 'custom-block-title' + (info ? '' : ' custom-block-title-default') if (klass === 'details') return `
${title}\n` - return `

${title}

\n` + return `

${title}

\n` } else return klass === 'details' ? `
\n` : `\n` } } From ae0d52d9990b48b0bd8a6e2cd6c97182a11c5a8a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=BF=A0=20/=20green?= Date: Tue, 25 Mar 2025 16:41:12 +0900 Subject: [PATCH 44/53] refactor: avoid assigning to bundle object (#4647) --- src/node/plugin.ts | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/src/node/plugin.ts b/src/node/plugin.ts index 219c18b6..748c4da4 100644 --- a/src/node/plugin.ts +++ b/src/node/plugin.ts @@ -366,15 +366,12 @@ export async function createVitePressPlugin( pageToHashMap![chunk.name.toLowerCase()] = hash // inject another chunk with the content stripped - bundle[name + '-lean'] = { - ...chunk, + this.emitFile({ + type: 'asset', + name: name + '-lean', fileName: chunk.fileName.replace(/\.js$/, '.lean.js'), - preliminaryFileName: chunk.preliminaryFileName.replace( - /\.js$/, - '.lean.js' - ), - code: chunk.code.replace(staticStripRE, `""`) - } + source: chunk.code.replace(staticStripRE, `""`) + }) // remove static markers from original code chunk.code = chunk.code.replace(staticRestoreRE, '') From 531a7a19d2fd94522a1dfeb5e996897f3122d0ca Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 25 Mar 2025 20:19:22 +0530 Subject: [PATCH 45/53] chore(deps): bump vite from 6.2.1 to 6.2.3 (#4648) Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 6.2.1 to 6.2.3. - [Release notes](https://github.com/vitejs/vite/releases) - [Changelog](https://github.com/vitejs/vite/blob/v6.2.3/packages/vite/CHANGELOG.md) - [Commits](https://github.com/vitejs/vite/commits/v6.2.3/packages/vite) --- updated-dependencies: - dependency-name: vite dependency-type: direct:production ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pnpm-lock.yaml | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 76b395f3..5e0c5d93 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -39,7 +39,7 @@ importers: version: 3.1.0 '@vitejs/plugin-vue': specifier: ^5.2.1 - version: 5.2.1(vite@6.2.1(@types/node@22.13.9)(jiti@1.21.7)(yaml@2.7.0))(vue@3.5.13(typescript@5.8.2)) + version: 5.2.1(vite@6.2.3(@types/node@22.13.9)(jiti@1.21.7)(yaml@2.7.0))(vue@3.5.13(typescript@5.8.2)) '@vue/devtools-api': specifier: ^7.7.2 version: 7.7.2 @@ -66,7 +66,7 @@ importers: version: 3.1.0 vite: specifier: ^6.2.1 - version: 6.2.1(@types/node@22.13.9)(jiti@1.21.7)(yaml@2.7.0) + version: 6.2.3(@types/node@22.13.9)(jiti@1.21.7)(yaml@2.7.0) vue: specifier: ^3.5.13 version: 3.5.13(typescript@5.8.2) @@ -2093,8 +2093,8 @@ packages: muggle-string@0.4.1: resolution: {integrity: sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==} - nanoid@3.3.9: - resolution: {integrity: sha512-SppoicMGpZvbF1l3z4x7No3OlIjP7QJvC9XR7AhZr1kL133KHnKPztkKDc+Ir4aJ/1VhTySrtKhrsycmrMQfvg==} + nanoid@3.3.11: + resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true @@ -2713,8 +2713,8 @@ packages: engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} hasBin: true - vite@6.2.1: - resolution: {integrity: sha512-n2GnqDb6XPhlt9B8olZPrgMD/es/Nd1RdChF6CBD/fHW6pUyUTt2sQW2fPRX5GiD9XEa6+8A6A4f2vT6pSsE7Q==} + vite@6.2.3: + resolution: {integrity: sha512-IzwM54g4y9JA/xAeBPNaDXiBF8Jsgl3VBQ2YQ/wOY6fyW3xMdSoltIV3Bo59DErdqdE6RxUfv8W69DvUorE4Eg==} engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} hasBin: true peerDependencies: @@ -3505,9 +3505,9 @@ snapshots: '@ungap/structured-clone@1.3.0': {} - '@vitejs/plugin-vue@5.2.1(vite@6.2.1(@types/node@22.13.9)(jiti@1.21.7)(yaml@2.7.0))(vue@3.5.13(typescript@5.8.2))': + '@vitejs/plugin-vue@5.2.1(vite@6.2.3(@types/node@22.13.9)(jiti@1.21.7)(yaml@2.7.0))(vue@3.5.13(typescript@5.8.2))': dependencies: - vite: 6.2.1(@types/node@22.13.9)(jiti@1.21.7)(yaml@2.7.0) + vite: 6.2.3(@types/node@22.13.9)(jiti@1.21.7)(yaml@2.7.0) vue: 3.5.13(typescript@5.8.2) '@vitest/expect@3.0.8': @@ -3517,13 +3517,13 @@ snapshots: chai: 5.2.0 tinyrainbow: 2.0.0 - '@vitest/mocker@3.0.8(vite@6.2.1(@types/node@22.13.9)(jiti@1.21.7)(yaml@2.7.0))': + '@vitest/mocker@3.0.8(vite@6.2.3(@types/node@22.13.9)(jiti@1.21.7)(yaml@2.7.0))': dependencies: '@vitest/spy': 3.0.8 estree-walker: 3.0.3 magic-string: 0.30.17 optionalDependencies: - vite: 6.2.1(@types/node@22.13.9)(jiti@1.21.7)(yaml@2.7.0) + vite: 6.2.3(@types/node@22.13.9)(jiti@1.21.7)(yaml@2.7.0) '@vitest/pretty-format@3.0.8': dependencies: @@ -4654,7 +4654,7 @@ snapshots: muggle-string@0.4.1: {} - nanoid@3.3.9: {} + nanoid@3.3.11: {} nanoid@5.1.3: {} @@ -4815,7 +4815,7 @@ snapshots: postcss@8.5.3: dependencies: - nanoid: 3.3.9 + nanoid: 3.3.11 picocolors: 1.1.1 source-map-js: 1.2.1 @@ -5261,7 +5261,7 @@ snapshots: debug: 4.4.0 es-module-lexer: 1.6.0 pathe: 2.0.3 - vite: 6.2.1(@types/node@22.13.9)(jiti@1.21.7)(yaml@2.7.0) + vite: 6.2.3(@types/node@22.13.9)(jiti@1.21.7)(yaml@2.7.0) transitivePeerDependencies: - '@types/node' - jiti @@ -5276,7 +5276,7 @@ snapshots: - tsx - yaml - vite@6.2.1(@types/node@22.13.9)(jiti@1.21.7)(yaml@2.7.0): + vite@6.2.3(@types/node@22.13.9)(jiti@1.21.7)(yaml@2.7.0): dependencies: esbuild: 0.25.0 postcss: 8.5.3 @@ -5298,7 +5298,7 @@ snapshots: vitest@3.0.8(@types/debug@4.1.12)(@types/node@22.13.9)(jiti@1.21.7)(yaml@2.7.0): dependencies: '@vitest/expect': 3.0.8 - '@vitest/mocker': 3.0.8(vite@6.2.1(@types/node@22.13.9)(jiti@1.21.7)(yaml@2.7.0)) + '@vitest/mocker': 3.0.8(vite@6.2.3(@types/node@22.13.9)(jiti@1.21.7)(yaml@2.7.0)) '@vitest/pretty-format': 3.0.8 '@vitest/runner': 3.0.8 '@vitest/snapshot': 3.0.8 @@ -5314,7 +5314,7 @@ snapshots: tinyexec: 0.3.2 tinypool: 1.0.2 tinyrainbow: 2.0.0 - vite: 6.2.1(@types/node@22.13.9)(jiti@1.21.7)(yaml@2.7.0) + vite: 6.2.3(@types/node@22.13.9)(jiti@1.21.7)(yaml@2.7.0) vite-node: 3.0.8(@types/node@22.13.9)(jiti@1.21.7)(yaml@2.7.0) why-is-node-running: 2.3.0 optionalDependencies: From db58af5c66e563e7663084057a9853d8f2da984c Mon Sep 17 00:00:00 2001 From: Divyansh Singh <40380293+brc-dd@users.noreply.github.com> Date: Thu, 27 Mar 2025 14:28:27 +0530 Subject: [PATCH 46/53] fix!: don't remove shiki styles from `pre` and remove unnecessary transformers (#4652) BREAKING CHANGE: `vp-adaptive-theme` class is no longer added to code blocks when there is single theme. Theme authors supporting single code theme can use `.shiki:not(.shiki-themes)` as selector. Alternatively, it might be better to use the bg/fg variables set on the `.shiki` block to keep things generic. BREAKING CHANGE: `vp-code` class is no longer added to code blocks. Use `.shiki` or `pre.shiki` or `[class*='language-'] pre` instead. People not customizing their themes are not affected. But if you see weird stuff, you know what to change. --- .../styles/components/vp-code.css | 4 +- src/node/markdown/markdown.ts | 5 +-- src/node/markdown/plugins/containers.ts | 43 +++++-------------- src/node/markdown/plugins/highlight.ts | 14 +----- src/node/markdown/plugins/preWrapper.ts | 7 +-- 5 files changed, 16 insertions(+), 57 deletions(-) diff --git a/src/client/theme-default/styles/components/vp-code.css b/src/client/theme-default/styles/components/vp-code.css index 1ff9429b..5c42b9ca 100644 --- a/src/client/theme-default/styles/components/vp-code.css +++ b/src/client/theme-default/styles/components/vp-code.css @@ -1,7 +1,7 @@ -.dark .vp-code span { +.dark .shiki span { color: var(--shiki-dark, inherit); } -html:not(.dark) .vp-code span { +html:not(.dark) .shiki span { color: var(--shiki-light, inherit); } diff --git a/src/node/markdown/markdown.ts b/src/node/markdown/markdown.ts index bb56e0cf..7b006620 100644 --- a/src/node/markdown/markdown.ts +++ b/src/node/markdown/markdown.ts @@ -215,7 +215,6 @@ export async function createMarkdownRenderer( const theme = options.theme ?? { light: 'github-light', dark: 'github-dark' } const codeCopyButtonTitle = options.codeCopyButtonTitle || 'Copy Code' - const hasSingleTheme = typeof theme === 'string' || 'name' in theme let [highlight, dispose] = options.highlight ? [options.highlight, () => {}] @@ -237,9 +236,9 @@ export async function createMarkdownRenderer( // custom plugins md.use(componentPlugin, { ...options.component }) .use(highlightLinePlugin) - .use(preWrapperPlugin, { codeCopyButtonTitle, hasSingleTheme }) + .use(preWrapperPlugin, { codeCopyButtonTitle }) .use(snippetPlugin, srcDir) - .use(containerPlugin, { hasSingleTheme }, options.container) + .use(containerPlugin, options.container) .use(imagePlugin, options.image) .use( linkPlugin, diff --git a/src/node/markdown/plugins/containers.ts b/src/node/markdown/plugins/containers.ts index a00b9a85..39efce17 100644 --- a/src/node/markdown/plugins/containers.ts +++ b/src/node/markdown/plugins/containers.ts @@ -3,40 +3,17 @@ import container from 'markdown-it-container' import type { RenderRule } from 'markdown-it/lib/renderer.mjs' import type Token from 'markdown-it/lib/token.mjs' import type { MarkdownEnv } from '../../shared' -import { - extractTitle, - getAdaptiveThemeMarker, - type Options -} from './preWrapper' +import { extractTitle } from './preWrapper' export const containerPlugin = ( md: MarkdownItAsync, - options: Options, - containerOptions?: ContainerOptions + options?: ContainerOptions ) => { - md.use(...createContainer('tip', containerOptions?.tipLabel || 'TIP', md)) - .use(...createContainer('info', containerOptions?.infoLabel || 'INFO', md)) - .use( - ...createContainer( - 'warning', - containerOptions?.warningLabel || 'WARNING', - md - ) - ) - .use( - ...createContainer( - 'danger', - containerOptions?.dangerLabel || 'DANGER', - md - ) - ) - .use( - ...createContainer( - 'details', - containerOptions?.detailsLabel || 'Details', - md - ) - ) + md.use(...createContainer('tip', options?.tipLabel || 'TIP', md)) + .use(...createContainer('info', options?.infoLabel || 'INFO', md)) + .use(...createContainer('warning', options?.warningLabel || 'WARNING', md)) + .use(...createContainer('danger', options?.dangerLabel || 'DANGER', md)) + .use(...createContainer('details', options?.detailsLabel || 'Details', md)) // explicitly escape Vue syntax .use(container, 'v-pre', { render: (tokens: Token[], idx: number) => @@ -46,7 +23,7 @@ export const containerPlugin = ( render: (tokens: Token[], idx: number) => tokens[idx].nesting === 1 ? `
\n` : `
\n` }) - .use(...createCodeGroup(options, md)) + .use(...createCodeGroup(md)) } type ContainerArgs = [typeof container, string, { render: RenderRule }] @@ -80,7 +57,7 @@ function createContainer( ] } -function createCodeGroup(options: Options, md: MarkdownItAsync): ContainerArgs { +function createCodeGroup(md: MarkdownItAsync): ContainerArgs { return [ container, 'code-group', @@ -118,7 +95,7 @@ function createCodeGroup(options: Options, md: MarkdownItAsync): ContainerArgs { } } - return `
${tabs}
\n` + return `
${tabs}
\n` } return `
\n` } diff --git a/src/node/markdown/plugins/highlight.ts b/src/node/markdown/plugins/highlight.ts index 52e5e84e..eef32b58 100644 --- a/src/node/markdown/plugins/highlight.ts +++ b/src/node/markdown/plugins/highlight.ts @@ -80,19 +80,7 @@ export async function highlight( classActivePre: 'has-focused-lines' }), transformerNotationHighlight(), - transformerNotationErrorLevel(), - { - name: 'vitepress:add-class', - pre(node) { - this.addClassToHast(node, 'vp-code') - } - }, - { - name: 'vitepress:clean-up', - pre(node) { - delete node.properties.style - } - } + transformerNotationErrorLevel() ] const vueRE = /-vue(?=:|$)/ diff --git a/src/node/markdown/plugins/preWrapper.ts b/src/node/markdown/plugins/preWrapper.ts index bd6b96ba..e7d553b3 100644 --- a/src/node/markdown/plugins/preWrapper.ts +++ b/src/node/markdown/plugins/preWrapper.ts @@ -2,7 +2,6 @@ import type { MarkdownItAsync } from 'markdown-it-async' export interface Options { codeCopyButtonTitle: string - hasSingleTheme: boolean } export function preWrapperPlugin(md: MarkdownItAsync, options: Options) { @@ -20,7 +19,7 @@ export function preWrapperPlugin(md: MarkdownItAsync, options: Options) { const lang = extractLang(token.info) return ( - `
` + + `
` + `` + `${lang}` + fence(...args) + @@ -29,10 +28,6 @@ export function preWrapperPlugin(md: MarkdownItAsync, options: Options) { } } -export function getAdaptiveThemeMarker(options: Options) { - return options.hasSingleTheme ? '' : ' vp-adaptive-theme' -} - export function extractTitle(info: string, html = false) { if (html) { return ( From 0267dcafa20beea24ef359d24bb1fa99e1ffda49 Mon Sep 17 00:00:00 2001 From: Yuxuan Zhang Date: Sat, 29 Mar 2025 23:07:36 -0400 Subject: [PATCH 47/53] feat(theme): make "Take me home" button's link customizable (#4658) --- src/client/theme-default/NotFound.vue | 2 +- types/default-theme.d.ts | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/client/theme-default/NotFound.vue b/src/client/theme-default/NotFound.vue index b9665142..f65d3a6d 100644 --- a/src/client/theme-default/NotFound.vue +++ b/src/client/theme-default/NotFound.vue @@ -22,7 +22,7 @@ const { currentLang } = useLangs()
{{ theme.notFound?.linkText ?? 'Take me home' }} diff --git a/types/default-theme.d.ts b/types/default-theme.d.ts index 5a669c49..2e17ce9d 100644 --- a/types/default-theme.d.ts +++ b/types/default-theme.d.ts @@ -480,6 +480,13 @@ export namespace DefaultTheme { */ quote?: string + /** + * Target of the home link. + * + * @default '/' + */ + link?: string + /** * Set aria label for home link. * From 35f36a96bb1cb34f7b2e1f1f3b26d26a9038ef8a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 1 Apr 2025 00:29:39 +0530 Subject: [PATCH 48/53] chore(deps): bump vite from 6.2.3 to 6.2.4 (#4664) Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 6.2.3 to 6.2.4. - [Release notes](https://github.com/vitejs/vite/releases) - [Changelog](https://github.com/vitejs/vite/blob/v6.2.4/packages/vite/CHANGELOG.md) - [Commits](https://github.com/vitejs/vite/commits/v6.2.4/packages/vite) --- updated-dependencies: - dependency-name: vite dependency-type: direct:production ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pnpm-lock.yaml | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 5e0c5d93..17032eee 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -39,7 +39,7 @@ importers: version: 3.1.0 '@vitejs/plugin-vue': specifier: ^5.2.1 - version: 5.2.1(vite@6.2.3(@types/node@22.13.9)(jiti@1.21.7)(yaml@2.7.0))(vue@3.5.13(typescript@5.8.2)) + version: 5.2.1(vite@6.2.4(@types/node@22.13.9)(jiti@1.21.7)(yaml@2.7.0))(vue@3.5.13(typescript@5.8.2)) '@vue/devtools-api': specifier: ^7.7.2 version: 7.7.2 @@ -66,7 +66,7 @@ importers: version: 3.1.0 vite: specifier: ^6.2.1 - version: 6.2.3(@types/node@22.13.9)(jiti@1.21.7)(yaml@2.7.0) + version: 6.2.4(@types/node@22.13.9)(jiti@1.21.7)(yaml@2.7.0) vue: specifier: ^3.5.13 version: 3.5.13(typescript@5.8.2) @@ -2713,8 +2713,8 @@ packages: engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} hasBin: true - vite@6.2.3: - resolution: {integrity: sha512-IzwM54g4y9JA/xAeBPNaDXiBF8Jsgl3VBQ2YQ/wOY6fyW3xMdSoltIV3Bo59DErdqdE6RxUfv8W69DvUorE4Eg==} + vite@6.2.4: + resolution: {integrity: sha512-veHMSew8CcRzhL5o8ONjy8gkfmFJAd5Ac16oxBUjlwgX3Gq2Wqr+qNC3TjPIpy7TPV/KporLga5GT9HqdrCizw==} engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} hasBin: true peerDependencies: @@ -3505,9 +3505,9 @@ snapshots: '@ungap/structured-clone@1.3.0': {} - '@vitejs/plugin-vue@5.2.1(vite@6.2.3(@types/node@22.13.9)(jiti@1.21.7)(yaml@2.7.0))(vue@3.5.13(typescript@5.8.2))': + '@vitejs/plugin-vue@5.2.1(vite@6.2.4(@types/node@22.13.9)(jiti@1.21.7)(yaml@2.7.0))(vue@3.5.13(typescript@5.8.2))': dependencies: - vite: 6.2.3(@types/node@22.13.9)(jiti@1.21.7)(yaml@2.7.0) + vite: 6.2.4(@types/node@22.13.9)(jiti@1.21.7)(yaml@2.7.0) vue: 3.5.13(typescript@5.8.2) '@vitest/expect@3.0.8': @@ -3517,13 +3517,13 @@ snapshots: chai: 5.2.0 tinyrainbow: 2.0.0 - '@vitest/mocker@3.0.8(vite@6.2.3(@types/node@22.13.9)(jiti@1.21.7)(yaml@2.7.0))': + '@vitest/mocker@3.0.8(vite@6.2.4(@types/node@22.13.9)(jiti@1.21.7)(yaml@2.7.0))': dependencies: '@vitest/spy': 3.0.8 estree-walker: 3.0.3 magic-string: 0.30.17 optionalDependencies: - vite: 6.2.3(@types/node@22.13.9)(jiti@1.21.7)(yaml@2.7.0) + vite: 6.2.4(@types/node@22.13.9)(jiti@1.21.7)(yaml@2.7.0) '@vitest/pretty-format@3.0.8': dependencies: @@ -5261,7 +5261,7 @@ snapshots: debug: 4.4.0 es-module-lexer: 1.6.0 pathe: 2.0.3 - vite: 6.2.3(@types/node@22.13.9)(jiti@1.21.7)(yaml@2.7.0) + vite: 6.2.4(@types/node@22.13.9)(jiti@1.21.7)(yaml@2.7.0) transitivePeerDependencies: - '@types/node' - jiti @@ -5276,7 +5276,7 @@ snapshots: - tsx - yaml - vite@6.2.3(@types/node@22.13.9)(jiti@1.21.7)(yaml@2.7.0): + vite@6.2.4(@types/node@22.13.9)(jiti@1.21.7)(yaml@2.7.0): dependencies: esbuild: 0.25.0 postcss: 8.5.3 @@ -5298,7 +5298,7 @@ snapshots: vitest@3.0.8(@types/debug@4.1.12)(@types/node@22.13.9)(jiti@1.21.7)(yaml@2.7.0): dependencies: '@vitest/expect': 3.0.8 - '@vitest/mocker': 3.0.8(vite@6.2.3(@types/node@22.13.9)(jiti@1.21.7)(yaml@2.7.0)) + '@vitest/mocker': 3.0.8(vite@6.2.4(@types/node@22.13.9)(jiti@1.21.7)(yaml@2.7.0)) '@vitest/pretty-format': 3.0.8 '@vitest/runner': 3.0.8 '@vitest/snapshot': 3.0.8 @@ -5314,7 +5314,7 @@ snapshots: tinyexec: 0.3.2 tinypool: 1.0.2 tinyrainbow: 2.0.0 - vite: 6.2.3(@types/node@22.13.9)(jiti@1.21.7)(yaml@2.7.0) + vite: 6.2.4(@types/node@22.13.9)(jiti@1.21.7)(yaml@2.7.0) vite-node: 3.0.8(@types/node@22.13.9)(jiti@1.21.7)(yaml@2.7.0) why-is-node-running: 2.3.0 optionalDependencies: From ea5cbfca395c06fe3d624056eeebf5654e454192 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 4 Apr 2025 21:40:19 +0530 Subject: [PATCH 49/53] chore(deps): bump vite from 6.2.4 to 6.2.5 (#4676) Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 6.2.4 to 6.2.5. - [Release notes](https://github.com/vitejs/vite/releases) - [Changelog](https://github.com/vitejs/vite/blob/v6.2.5/packages/vite/CHANGELOG.md) - [Commits](https://github.com/vitejs/vite/commits/v6.2.5/packages/vite) --- updated-dependencies: - dependency-name: vite dependency-version: 6.2.5 dependency-type: direct:production ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pnpm-lock.yaml | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 17032eee..e61590e7 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -39,7 +39,7 @@ importers: version: 3.1.0 '@vitejs/plugin-vue': specifier: ^5.2.1 - version: 5.2.1(vite@6.2.4(@types/node@22.13.9)(jiti@1.21.7)(yaml@2.7.0))(vue@3.5.13(typescript@5.8.2)) + version: 5.2.1(vite@6.2.5(@types/node@22.13.9)(jiti@1.21.7)(yaml@2.7.0))(vue@3.5.13(typescript@5.8.2)) '@vue/devtools-api': specifier: ^7.7.2 version: 7.7.2 @@ -66,7 +66,7 @@ importers: version: 3.1.0 vite: specifier: ^6.2.1 - version: 6.2.4(@types/node@22.13.9)(jiti@1.21.7)(yaml@2.7.0) + version: 6.2.5(@types/node@22.13.9)(jiti@1.21.7)(yaml@2.7.0) vue: specifier: ^3.5.13 version: 3.5.13(typescript@5.8.2) @@ -2713,8 +2713,8 @@ packages: engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} hasBin: true - vite@6.2.4: - resolution: {integrity: sha512-veHMSew8CcRzhL5o8ONjy8gkfmFJAd5Ac16oxBUjlwgX3Gq2Wqr+qNC3TjPIpy7TPV/KporLga5GT9HqdrCizw==} + vite@6.2.5: + resolution: {integrity: sha512-j023J/hCAa4pRIUH6J9HemwYfjB5llR2Ps0CWeikOtdR8+pAURAk0DoJC5/mm9kd+UgdnIy7d6HE4EAvlYhPhA==} engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} hasBin: true peerDependencies: @@ -3505,9 +3505,9 @@ snapshots: '@ungap/structured-clone@1.3.0': {} - '@vitejs/plugin-vue@5.2.1(vite@6.2.4(@types/node@22.13.9)(jiti@1.21.7)(yaml@2.7.0))(vue@3.5.13(typescript@5.8.2))': + '@vitejs/plugin-vue@5.2.1(vite@6.2.5(@types/node@22.13.9)(jiti@1.21.7)(yaml@2.7.0))(vue@3.5.13(typescript@5.8.2))': dependencies: - vite: 6.2.4(@types/node@22.13.9)(jiti@1.21.7)(yaml@2.7.0) + vite: 6.2.5(@types/node@22.13.9)(jiti@1.21.7)(yaml@2.7.0) vue: 3.5.13(typescript@5.8.2) '@vitest/expect@3.0.8': @@ -3517,13 +3517,13 @@ snapshots: chai: 5.2.0 tinyrainbow: 2.0.0 - '@vitest/mocker@3.0.8(vite@6.2.4(@types/node@22.13.9)(jiti@1.21.7)(yaml@2.7.0))': + '@vitest/mocker@3.0.8(vite@6.2.5(@types/node@22.13.9)(jiti@1.21.7)(yaml@2.7.0))': dependencies: '@vitest/spy': 3.0.8 estree-walker: 3.0.3 magic-string: 0.30.17 optionalDependencies: - vite: 6.2.4(@types/node@22.13.9)(jiti@1.21.7)(yaml@2.7.0) + vite: 6.2.5(@types/node@22.13.9)(jiti@1.21.7)(yaml@2.7.0) '@vitest/pretty-format@3.0.8': dependencies: @@ -5261,7 +5261,7 @@ snapshots: debug: 4.4.0 es-module-lexer: 1.6.0 pathe: 2.0.3 - vite: 6.2.4(@types/node@22.13.9)(jiti@1.21.7)(yaml@2.7.0) + vite: 6.2.5(@types/node@22.13.9)(jiti@1.21.7)(yaml@2.7.0) transitivePeerDependencies: - '@types/node' - jiti @@ -5276,7 +5276,7 @@ snapshots: - tsx - yaml - vite@6.2.4(@types/node@22.13.9)(jiti@1.21.7)(yaml@2.7.0): + vite@6.2.5(@types/node@22.13.9)(jiti@1.21.7)(yaml@2.7.0): dependencies: esbuild: 0.25.0 postcss: 8.5.3 @@ -5298,7 +5298,7 @@ snapshots: vitest@3.0.8(@types/debug@4.1.12)(@types/node@22.13.9)(jiti@1.21.7)(yaml@2.7.0): dependencies: '@vitest/expect': 3.0.8 - '@vitest/mocker': 3.0.8(vite@6.2.4(@types/node@22.13.9)(jiti@1.21.7)(yaml@2.7.0)) + '@vitest/mocker': 3.0.8(vite@6.2.5(@types/node@22.13.9)(jiti@1.21.7)(yaml@2.7.0)) '@vitest/pretty-format': 3.0.8 '@vitest/runner': 3.0.8 '@vitest/snapshot': 3.0.8 @@ -5314,7 +5314,7 @@ snapshots: tinyexec: 0.3.2 tinypool: 1.0.2 tinyrainbow: 2.0.0 - vite: 6.2.4(@types/node@22.13.9)(jiti@1.21.7)(yaml@2.7.0) + vite: 6.2.5(@types/node@22.13.9)(jiti@1.21.7)(yaml@2.7.0) vite-node: 3.0.8(@types/node@22.13.9)(jiti@1.21.7)(yaml@2.7.0) why-is-node-running: 2.3.0 optionalDependencies: From 544cd8125985b9e3af7fee68ea9592d159799e01 Mon Sep 17 00:00:00 2001 From: Yuxuan Zhang Date: Sat, 5 Apr 2025 09:59:32 -0400 Subject: [PATCH 50/53] feat(theme)!: add `isHome` frontmatter option (#4673) BREAKING CHANGE: `useLocalNav` and `useSidebar` are removed in favor of `useLayout`. To migrate, just do find and replace. Sidebar controls are no longer exported, but I didn't find any usage on GitHub. If there is demand, we can export respective composables later. `DefaultTheme.DocSidebar` and `DefaultTheme.DocLocalNav` types are also removed. --------- Co-authored-by: Divyansh Singh <40380293+brc-dd@users.noreply.github.com> Co-authored-by: userquin --- .../theme/components/ApiPreference.vue | 2 +- docs/en/reference/default-theme-config.md | 35 +++++ docs/en/reference/default-theme-sidebar.md | 33 ----- docs/en/reference/default-theme-team-page.md | 8 +- docs/en/reference/frontmatter-config.md | 13 ++ docs/es/reference/default-theme-sidebar.md | 33 ----- docs/es/reference/default-theme-team-page.md | 8 +- docs/fa/reference/default-theme-sidebar.md | 35 ----- docs/fa/reference/default-theme-team-page.md | 8 +- docs/ko/reference/default-theme-sidebar.md | 33 ----- docs/ko/reference/default-theme-team-page.md | 8 +- docs/pt/reference/default-theme-sidebar.md | 33 ----- docs/pt/reference/default-theme-team-page.md | 8 +- docs/ru/reference/default-theme-sidebar.md | 33 ----- docs/ru/reference/default-theme-team-page.md | 6 +- docs/zh/reference/default-theme-sidebar.md | 33 ----- docs/zh/reference/default-theme-team-page.md | 8 +- src/client/app/utils.ts | 11 +- src/client/theme-default/Layout.vue | 19 +-- .../theme-default/components/VPContent.vue | 9 +- src/client/theme-default/components/VPDoc.vue | 4 +- .../components/VPDocAsideOutline.vue | 25 ++-- .../components/VPDocAsideSponsors.vue | 2 +- .../components/VPDocOutlineItem.vue | 8 +- .../theme-default/components/VPFeature.vue | 4 +- .../theme-default/components/VPFlyout.vue | 2 +- .../theme-default/components/VPFooter.vue | 4 +- .../theme-default/components/VPHero.vue | 2 +- .../components/VPHomeSponsors.vue | 2 +- .../theme-default/components/VPLocalNav.vue | 30 +---- .../components/VPLocalNavOutlineDropdown.vue | 9 +- .../theme-default/components/VPMenu.vue | 2 +- .../theme-default/components/VPMenuGroup.vue | 2 +- .../theme-default/components/VPNavBar.vue | 8 +- .../theme-default/components/VPNavBarMenu.vue | 4 +- .../components/VPNavBarSearch.vue | 2 +- .../components/VPNavBarTitle.vue | 8 +- .../components/VPNavScreenMenu.vue | 2 +- .../components/VPNavScreenMenuGroup.vue | 2 +- .../VPNavScreenMenuGroupSection.vue | 6 +- .../theme-default/components/VPSidebar.vue | 6 +- .../components/VPSidebarGroup.vue | 2 +- .../components/VPSidebarItem.vue | 4 +- .../components/VPSocialLinks.vue | 6 +- .../components/VPTeamMembers.vue | 2 +- src/client/theme-default/composables/aside.ts | 4 +- .../theme-default/composables/layout.ts | 85 ++++++++++++ .../theme-default/composables/local-nav.ts | 24 ---- .../theme-default/composables/outline.ts | 27 ++-- .../theme-default/composables/sidebar.ts | 123 ++++-------------- src/client/theme-default/without-fonts.ts | 3 +- theme.d.ts | 27 +++- types/default-theme.d.ts | 43 +----- 53 files changed, 306 insertions(+), 554 deletions(-) create mode 100644 src/client/theme-default/composables/layout.ts delete mode 100644 src/client/theme-default/composables/local-nav.ts diff --git a/__tests__/e2e/.vitepress/theme/components/ApiPreference.vue b/__tests__/e2e/.vitepress/theme/components/ApiPreference.vue index 12207764..c286640b 100644 --- a/__tests__/e2e/.vitepress/theme/components/ApiPreference.vue +++ b/__tests__/e2e/.vitepress/theme/components/ApiPreference.vue @@ -30,7 +30,7 @@ function removeSpaces(str: string) { diff --git a/docs/en/reference/default-theme-config.md b/docs/en/reference/default-theme-config.md index c8afc554..8f71d4af 100644 --- a/docs/en/reference/default-theme-config.md +++ b/docs/en/reference/default-theme-config.md @@ -457,3 +457,38 @@ Can be used to customize the label of the skip to content link. This link is sho - Default: `false` Whether to show an external link icon next to external links in markdown. + +## `useLayout` + +Returns layout-related data. The returned object has the following type: + +```ts +interface { + isHome: ComputedRef + + sidebar: ComputedRef + sidebarGroups: ComputedRef + hasSidebar: ComputedRef + isSidebarEnabled: ComputedRef + + hasAside: ComputedRef + leftAside: ComputedRef + + headers: ShallowRef + hasLocalNav: ComputedRef +} +``` + +**Example:** + +```vue + + + +``` diff --git a/docs/en/reference/default-theme-sidebar.md b/docs/en/reference/default-theme-sidebar.md index 9a64a074..67893cf6 100644 --- a/docs/en/reference/default-theme-sidebar.md +++ b/docs/en/reference/default-theme-sidebar.md @@ -180,36 +180,3 @@ export default { } } ``` - -## `useSidebar` - -Returns sidebar-related data. The returned object has the following type: - -```ts -export interface DocSidebar { - isOpen: Ref - sidebar: ComputedRef - sidebarGroups: ComputedRef - hasSidebar: ComputedRef - hasAside: ComputedRef - leftAside: ComputedRef - isSidebarEnabled: ComputedRef - open: () => void - close: () => void - toggle: () => void -} -``` - -**Example:** - -```vue - - - -``` diff --git a/docs/en/reference/default-theme-team-page.md b/docs/en/reference/default-theme-team-page.md index 29b071ff..6c37c6a7 100644 --- a/docs/en/reference/default-theme-team-page.md +++ b/docs/en/reference/default-theme-team-page.md @@ -53,12 +53,12 @@ const members = [ Say hello to our awesome team. - + ``` The above will display a team member in card looking element. It should display something similar to below. - + `` component comes in 2 different sizes, `small` and `medium`. While it boils down to your preference, usually `small` size should fit better when used in doc page. Also, you may add more properties to each member such as adding "description" or "sponsor" button. Learn more about it in [``](#vpteammembers). @@ -107,9 +107,7 @@ const members = [ team, some of whom have chosen to be featured below. - + ``` diff --git a/docs/en/reference/frontmatter-config.md b/docs/en/reference/frontmatter-config.md index 955d4ad7..4d6f86c0 100644 --- a/docs/en/reference/frontmatter-config.md +++ b/docs/en/reference/frontmatter-config.md @@ -225,3 +225,16 @@ Then you can customize styles of this specific page in `.vitepress/theme/custom. /* page-specific styles */ } ``` + +### isHome + +- Type: `boolean` + +The default theme relies on checks like `frontmatter.layout === 'home'` to determine if the current page is the home page.\ +This is useful when you want to force show the home page elements in a custom layout. + +```yaml +--- +isHome: true +--- +``` diff --git a/docs/es/reference/default-theme-sidebar.md b/docs/es/reference/default-theme-sidebar.md index cf2af04b..41cd5cac 100644 --- a/docs/es/reference/default-theme-sidebar.md +++ b/docs/es/reference/default-theme-sidebar.md @@ -181,36 +181,3 @@ export default { } } ``` - -## `useSidebar` - -Devuelve datos relacionados con la barra lateral. El objeto devuelto tiene el siguiente tipo: - -```ts -export interface DocSidebar { - isOpen: Ref - sidebar: ComputedRef - sidebarGroups: ComputedRef - hasSidebar: ComputedRef - hasAside: ComputedRef - leftAside: ComputedRef - isSidebarEnabled: ComputedRef - open: () => void - close: () => void - toggle: () => void -} -``` - -**Exemplo:** - -```vue - - - -``` diff --git a/docs/es/reference/default-theme-team-page.md b/docs/es/reference/default-theme-team-page.md index 1f6492a8..996e8f18 100644 --- a/docs/es/reference/default-theme-team-page.md +++ b/docs/es/reference/default-theme-team-page.md @@ -53,12 +53,12 @@ const members = [ Saluda a nuestro increible equipo. - + ``` El código anterior mostrará a un miembro del equipo en un elemento similar a una tarjeta. Debería mostrar algo similar a lo siguiente. - + El componente `` viene en dos tamaños diferentes, pequeño `small` y médio `medium`. Si bien es una cuestión de preferencia, generalmente el tamaño `small` debería encajar mejor cuando se use en la página del documento. Además, puede agregar más propiedades a cada miembro, como agregar el botón "descripción" o "patrocinador". Obtenga más información sobre en [``](#vpteammembers). @@ -107,9 +107,7 @@ const members = [ Algunos de los miembros han elegido aparecer a continuación. - + ``` diff --git a/docs/fa/reference/default-theme-sidebar.md b/docs/fa/reference/default-theme-sidebar.md index cba65dff..96433c2d 100644 --- a/docs/fa/reference/default-theme-sidebar.md +++ b/docs/fa/reference/default-theme-sidebar.md @@ -178,38 +178,3 @@ export default { } } ``` - -## `useSidebar` {#usesidebar} - -داده‌های مربوط به نوار کناری را برمی‌گرداند. شیء برگردانده شده دارای نوع‌های زیر است: - -```ts -export interface DocSidebar { - isOpen: Ref - sidebar: ComputedRef - sidebarGroups: ComputedRef - hasSidebar: ComputedRef - hasAside: ComputedRef - leftAside: ComputedRef - isSidebarEnabled: ComputedRef - open: () => void - close: () => void - toggle: () => void -} -``` - -**مثال:** - -```vue - - - -``` diff --git a/docs/fa/reference/default-theme-team-page.md b/docs/fa/reference/default-theme-team-page.md index ccd9738d..57fc2814 100644 --- a/docs/fa/reference/default-theme-team-page.md +++ b/docs/fa/reference/default-theme-team-page.md @@ -53,12 +53,12 @@ const members = [ با سلام به تیم فوق‌العاده‌ی ما خوش آمدید. - + ``` بالا به صورت عنصری با شکل کارتی اعضای تیم را نمایش می‌دهد. باید به شکل زیر نمایش داده شود. - + کامپوننت `` دارای دو اندازه مختلف، `small` و `medium` است. معمولاً اندازه `small` برای استفاده در صفحات مستندات مناسب‌تر است. همچنین می‌توانید ویژگی‌های بیشتری برای هر عضو اضافه کنید مانند "توضیحات" یا "دکمه حامی". جهت کسب اطلاعات بیشتر به [``](#vpteammembers) مراجعه کنید. @@ -106,9 +106,7 @@ const members = [ توسعه ویت‌پرس توسط تیمی بین‌المللی راهنمایی می‌شود، برخی از اعضا که انتخاب کرده‌اند تا در زیر نمایش داده شوند. - + ``` diff --git a/docs/ko/reference/default-theme-sidebar.md b/docs/ko/reference/default-theme-sidebar.md index 21e19ccc..8e4709cd 100644 --- a/docs/ko/reference/default-theme-sidebar.md +++ b/docs/ko/reference/default-theme-sidebar.md @@ -180,36 +180,3 @@ export default { } } ``` - -## `useSidebar` - -사이드바 관련 데이터를 반환합니다. 반환된 객체는 다음과 같은 타입을 가집니다: - -```ts -export interface DocSidebar { - isOpen: Ref - sidebar: ComputedRef - sidebarGroups: ComputedRef - hasSidebar: ComputedRef - hasAside: ComputedRef - leftAside: ComputedRef - isSidebarEnabled: ComputedRef - open: () => void - close: () => void - toggle: () => void -} -``` - -**예제:** - -```vue - - - -``` diff --git a/docs/ko/reference/default-theme-team-page.md b/docs/ko/reference/default-theme-team-page.md index 2123f349..b4fddb0f 100644 --- a/docs/ko/reference/default-theme-team-page.md +++ b/docs/ko/reference/default-theme-team-page.md @@ -53,12 +53,12 @@ const members = [ Say hello to our awesome team. - + ``` 위 코드는 카드 형태의 엘리먼트로 팀 구성원을 표시합니다. 아래와 비슷한 형태로 표시됩니다. - + `` 컴포넌트는 `small`과 `medium` 두 가지 크기로 제공됩니다. 개인의 선호도에 따라 선택할 수 있지만, 일반적으로 `small` 사이즈가 문서 페이지에 더 적합합니다. 또한, 각 구성원에 "설명"이나 "후원" 버튼과 같은 프로퍼티를 추가할 수도 있습니다. 자세한 내용은 [``](#vpteammembers)에서 확인할 수 있습니다. @@ -107,9 +107,7 @@ const members = [ team, some of whom have chosen to be featured below. - + ``` diff --git a/docs/pt/reference/default-theme-sidebar.md b/docs/pt/reference/default-theme-sidebar.md index 62c3b3b1..0d8baf8d 100644 --- a/docs/pt/reference/default-theme-sidebar.md +++ b/docs/pt/reference/default-theme-sidebar.md @@ -180,36 +180,3 @@ export default { } } ``` - -## `useSidebar` - -Retorna dados relacionados à barra lateral. O objeto retornado tem o seguinte tipo: - -```ts -export interface DocSidebar { - isOpen: Ref - sidebar: ComputedRef - sidebarGroups: ComputedRef - hasSidebar: ComputedRef - hasAside: ComputedRef - leftAside: ComputedRef - isSidebarEnabled: ComputedRef - open: () => void - close: () => void - toggle: () => void -} -``` - -**Exemplo:** - -```vue - - - -``` diff --git a/docs/pt/reference/default-theme-team-page.md b/docs/pt/reference/default-theme-team-page.md index 1daa47a5..32a9db0d 100644 --- a/docs/pt/reference/default-theme-team-page.md +++ b/docs/pt/reference/default-theme-team-page.md @@ -53,12 +53,12 @@ const members = [ Diga olá à nossa equipe incrível. - + ``` O código acima exibirá um membro da equipe em um elemento tipo cartão. Ele deve exibir algo semelhante ao abaixo. - + O componente `` vem em 2 tamanhos diferentes, pequeno `small` e médio `medium`. Enquanto é uma questão de preferência, geralmente o tamanho `small` deve encaixar melhor quando usado na página de documento. Além disso, você pode adicionar mais propriedades a cada membro, como adicionar o botão "descrição" ou "patrocinador". Saiba mais sobre em [``](#vpteammembers). @@ -107,9 +107,7 @@ const members = [ alguns dos membros escolheram ser apresentados abaixo. - + ``` diff --git a/docs/ru/reference/default-theme-sidebar.md b/docs/ru/reference/default-theme-sidebar.md index 92fd89c1..bdc6e338 100644 --- a/docs/ru/reference/default-theme-sidebar.md +++ b/docs/ru/reference/default-theme-sidebar.md @@ -178,36 +178,3 @@ export default { } } ``` - -## `useSidebar` {#usesidebar} - -Возвращает данные, связанные с сайдбаром. Возвращаемый объект имеет следующий тип: - -```ts -export interface DocSidebar { - isOpen: Ref - sidebar: ComputedRef - sidebarGroups: ComputedRef - hasSidebar: ComputedRef - hasAside: ComputedRef - leftAside: ComputedRef - isSidebarEnabled: ComputedRef - open: () => void - close: () => void - toggle: () => void -} -``` - -**Пример:** - -```vue - - - -``` diff --git a/docs/ru/reference/default-theme-team-page.md b/docs/ru/reference/default-theme-team-page.md index 0eebaa24..615692bb 100644 --- a/docs/ru/reference/default-theme-team-page.md +++ b/docs/ru/reference/default-theme-team-page.md @@ -51,12 +51,12 @@ const members = [ # Поприветствуйте нашу замечательную команду - + ``` Вышеуказанное отобразит члена команды в виде карточки. Должно отобразиться что-то похожее на то, что показано ниже. - + Компонент `` поставляется в двух различных размерах, `small` и `medium`. Хотя это зависит от ваших предпочтений, обычно размер `small` лучше подходит для использования на странице с макетом `doc`. Кроме того, вы можете добавить дополнительные свойства для карточки члена команды, например, добавить «описание» или кнопку «спонсировать». Подробнее об этом в секции [``](#vpteammembers). @@ -104,7 +104,7 @@ layout: page которой представлены ниже. - + ``` diff --git a/docs/zh/reference/default-theme-sidebar.md b/docs/zh/reference/default-theme-sidebar.md index ba9a9adc..e353ef78 100644 --- a/docs/zh/reference/default-theme-sidebar.md +++ b/docs/zh/reference/default-theme-sidebar.md @@ -178,36 +178,3 @@ export default { } } ``` - -## `useSidebar` - -返回侧边栏相关数据。返回的对象具有以下类型: - -```ts -export interface DocSidebar { - isOpen: Ref - sidebar: ComputedRef - sidebarGroups: ComputedRef - hasSidebar: ComputedRef - hasAside: ComputedRef - leftAside: ComputedRef - isSidebarEnabled: ComputedRef - open: () => void - close: () => void - toggle: () => void -} -``` - -**示例:** - -```vue - - - -``` diff --git a/docs/zh/reference/default-theme-team-page.md b/docs/zh/reference/default-theme-team-page.md index 0341f0f2..9f155cf2 100644 --- a/docs/zh/reference/default-theme-team-page.md +++ b/docs/zh/reference/default-theme-team-page.md @@ -53,12 +53,12 @@ const members = [ Say hello to our awesome team. - + ``` 以上将在卡片外观元素中显示团队成员。它应该显示类似于下面的内容。 - + `` 组件有 2 种不同的尺寸,`small` 和 `medium`。虽然它取决于你的偏好,但通常尺寸在文档页面中使用时 `small` 应该更适合。此外,你可以为每个成员添加更多属性,例如添加“描述”或“赞助”按钮。在 [``](#vpteammembers) 中了解更多信息。 @@ -107,9 +107,7 @@ const members = [ team, some of whom have chosen to be featured below. - + ``` diff --git a/src/client/app/utils.ts b/src/client/app/utils.ts index 53ef6e51..b734179c 100644 --- a/src/client/app/utils.ts +++ b/src/client/app/utils.ts @@ -1,10 +1,5 @@ -import { - h, - onMounted, - onUnmounted, - shallowRef, - type AsyncComponentLoader -} from 'vue' +import { tryOnUnmounted } from '@vueuse/core' +import { h, onMounted, shallowRef, type AsyncComponentLoader } from 'vue' import { EXTERNAL_URL_RE, inBrowser, @@ -81,7 +76,7 @@ export let contentUpdatedCallbacks: (() => any)[] = [] */ export function onContentUpdated(fn: () => any) { contentUpdatedCallbacks.push(fn) - onUnmounted(() => { + tryOnUnmounted(() => { contentUpdatedCallbacks = contentUpdatedCallbacks.filter((f) => f !== fn) }) } diff --git a/src/client/theme-default/Layout.vue b/src/client/theme-default/Layout.vue index 69284148..30ebe491 100644 --- a/src/client/theme-default/Layout.vue +++ b/src/client/theme-default/Layout.vue @@ -1,6 +1,5 @@