diff --git a/.vitepress/components/ListItem.vue b/.vitepress/components/ListItem.vue index 4a8b2fbe..95a47d53 100644 --- a/.vitepress/components/ListItem.vue +++ b/.vitepress/components/ListItem.vue @@ -63,3 +63,8 @@ onMounted(async () => { + diff --git a/.vitepress/config.ts b/.vitepress/config.ts index 8ecda97d..ed360a45 100644 --- a/.vitepress/config.ts +++ b/.vitepress/config.ts @@ -123,7 +123,7 @@ export default withPwa( text: '高级 API', items: [ { - text: 'Node API', + text: 'Vitest Node API', link: '/advanced/api', }, { @@ -135,9 +135,13 @@ export default withPwa( link: '/advanced/metadata', }, { - text: 'Extending default reporters', + text: 'Extending Reporters', link: '/advanced/reporters', }, + { + text: 'Custom Pool', + link: '/advanced/pool', + }, ], }, ], diff --git a/.vitepress/contributors.ts b/.vitepress/contributors.ts index 9e6314fb..8347d788 100644 --- a/.vitepress/contributors.ts +++ b/.vitepress/contributors.ts @@ -72,7 +72,7 @@ const plainTeamMembers: CoreTeam[] = [ discord: 'https://chat.antfu.me', youtube: 'antfu', sponsor: 'https://github.com/sponsors/antfu', - title: '狂热的开源者,在 NuxtLabs 工作', + title: '狂热的开源者,工作于', org: 'NuxtLabs', orgLink: 'https://nuxtlabs.com/', desc: 'Vite 和 Vue 的核心团队成员', @@ -81,8 +81,8 @@ const plainTeamMembers: CoreTeam[] = [ avatar: contributorsAvatars.AriPerkkio, name: 'Ari Perkkiö', github: 'AriPerkkio', - title: '全栈开发人员, 在 Cloudamite 工作', - desc: 'Vitest 团队成员', + title: '全栈开发人员, 工作于', + desc: 'Vitest 核心团队成员', org: 'Cloudamite', orgLink: 'https://cloudamite.com/', }, @@ -93,7 +93,7 @@ const plainTeamMembers: CoreTeam[] = [ mastodon: 'https://elk.zone/m.webtoo.ls/@patak', twitter: 'patak_dev', sponsor: 'https://github.com/sponsors/patak-dev', - title: '二当家,在 StackBlitz 工作', + title: '二当家,工作于', org: 'StackBlitz', orgLink: 'https://stackblitz.com/', desc: 'Vite 和 Vue 的核心团队成员', @@ -107,6 +107,14 @@ const plainTeamMembers: CoreTeam[] = [ title: '全栈和安卓开发者', desc: 'Vite 的狂热追随者', }, + { + avatar: contributorsAvatars.Dunqing, + name: 'Dunqing', + github: 'Dunqing', + twitter: '@Dunqingg', + title: '热衷于开源贡献者', + desc: 'Vitest 和 UnoCSS 团队成员', + }, { avatar: contributorsAvatars.Aslemammad, name: 'Mohammad Bagher', @@ -132,7 +140,7 @@ const plainTeamMembers: CoreTeam[] = [ mastodon: 'https://elk.zone/hachyderm.io/@zx', twitter: 'zxch3n', title: '全栈开发人员', - desc: '创建协作工具', + desc: '开发 CRDT 和本地优先软件', }, { avatar: contributorsAvatars.poyoho, diff --git a/.vitepress/scripts/fetch-avatars.ts b/.vitepress/scripts/fetch-avatars.ts index 267a7688..e4c0e1f6 100644 --- a/.vitepress/scripts/fetch-avatars.ts +++ b/.vitepress/scripts/fetch-avatars.ts @@ -1,15 +1,13 @@ import { existsSync, promises as fsp } from 'node:fs' import { fileURLToPath } from 'node:url' import { dirname, join, resolve } from 'pathe' +import { teamMembers } from '../contributors' const docsDir = resolve(dirname(fileURLToPath(import.meta.url)), '../..') -const pathContributors = resolve(docsDir, '.vitepress/contributor-names.json') const dirAvatars = resolve(docsDir, 'public/user-avatars/') const dirSponsors = resolve(docsDir, 'public/sponsors/') -let contributors: string[] = [] - async function download(url: string, fileName: string) { if (existsSync(fileName)) return @@ -25,9 +23,8 @@ async function download(url: string, fileName: string) { async function fetchAvatars() { if (!existsSync(dirAvatars)) await fsp.mkdir(dirAvatars, { recursive: true }) - contributors = JSON.parse(await fsp.readFile(pathContributors, { encoding: 'utf-8' })) - await Promise.all(contributors.map(name => download(`https://github.com/${name}.png?size=100`, join(dirAvatars, `${name}.png`)))) + await Promise.all(teamMembers.map(c => c.github).map(name => download(`https://github.com/${name}.png?size=100`, join(dirAvatars, `${name}.png`)))) } async function fetchSponsors() { diff --git a/.vitepress/style/main.css b/.vitepress/style/main.css index b76a1c0f..7b57691c 100644 --- a/.vitepress/style/main.css +++ b/.vitepress/style/main.css @@ -8,28 +8,6 @@ html:not(.dark) [img-dark] { /* Overrides */ -.vp-doc ul.features-list { - padding: 0; -} -.vp-doc ul.features-list li { - list-style: none; - display: flex; - gap: 0.4rem; - margin: 0; -} -.vp-doc ul.features-list li div:first-of-type { - position: relative; -} -.vp-doc ul.features-list li div:first-of-type div { - position: absolute; -} -.vp-doc ul.features-list li div:first-of-type div.flip { - transform: rotateY(90deg); -} -.vp-doc ul.features-list li div:first-of-type div div { - position: unset; -} - .sp .sp-link.link:hover, .sp .sp-link.link:focus { background-color: var(--vitest-c-sponsor-hover) !important; diff --git a/advanced/pool.md b/advanced/pool.md new file mode 100644 index 00000000..08e84501 --- /dev/null +++ b/advanced/pool.md @@ -0,0 +1,90 @@ +# Custom Pool + +::: warning +这是高级 API。如果你只需要运行测试,你可能不需要这个。它主要被库的作者使用。 +::: + +Vitest 在默认情况下以多种方式运行测试: + +- `threads` 使用 `node:worker_threads` 运行测试(通过新的 worker 上下文提供隔离) +- `forks` 使用 `node:child_process` 运行测试(通过新的 `child_process.fork` 进程提供隔离) +- `vmThreads` 使用 `node:worker_threads` 运行测试(但是通过 `vm` 模块而不是新的 worker 上下文提供隔离) +- `browser` 使用浏览器提供程序运行测试 +- `typescript` 在测试中运行类型检查 + +你可以通过指定文件路径来提供自己的池: + +```ts +export default defineConfig({ + test: { + // 默认情况下,将使用自定义池运行每个文件 + pool: './my-custom-pool.ts', + // 可以使用 `poolOptions` 对象提供选项 + poolOptions: { + myCustomPool: { + customProperty: true, + }, + }, + // 还可以为文件子集指定池 + poolMatchGlobs: [ + ['**/*.custom.test.ts', './my-custom-pool.ts'], + ], + }, +}) +``` + +## API + +在 `pool` 选项中指定的文件应该导出一个函数(可以是异步的),该函数接受 `Vitest` 接口作为其第一个选项。这个函数需要返回一个与 `ProcessPool` 接口匹配的对象: + +```ts +import { ProcessPool, WorkspaceProject } from 'vitest/node' + +export interface ProcessPool { + name: string + runTests: (files: [project: WorkspaceProject, testFile: string][], invalidates?: string[]) => Promise + close?: () => Promise +} +``` + +这个函数只会被调用一次(除非服务器配置被更新),通常最好在这个函数内初始化测试所需的一切,并在调用 `runTests` 时重复使用它。 + +Vitest 在安排运行新测试时调用 `runTest`。如果 `files` 为空,将不会调用它。第一个参数是一个元组数组:第一个元素是对工作区项目的引用,第二个元素是测试文件的绝对路径。在调用 `runTests` 之前,文件将使用 [`sequencer`](/config/#sequence.sequencer) 进行排序。可能(但不太可能)会有相同的文件出现两次,但它们将始终属于不同的项目 - 这是通过 [`vitest.workspace.ts`](/guide/workspace) 配置实现的。 + +Vitest 会等到 `runTests` 执行完毕后才结束运行(即只有在 `runTests` 解决后才会触发 [`onFinished`](/guide/reporters))。 + +如果你正在使用自定义池,需要自行提供测试文件及其结果 - 可以参考 [`vitest.state`](https://github.com/vitest-dev/vitest/blob/feat/custom-pool/packages/vitest/src/node/state.ts)(最重要的是 `collectFiles` 和 `updateTasks`)。Vitest 使用 `@vitest/runner` 包中的 `startTests` 函数来执行这些操作。 + +要在不同进程之间进行通信,可以使用 `vitest/node` 中的 `createMethodsRPC` 创建方法对象,并使用你喜欢的任何通信形式。例如,要使用 `birpc` 的 websockets,可以编写类似以下的内容: + +```ts +import { createBirpc } from 'birpc' +import { parse, stringify } from 'flatted' +import { WorkspaceProject, createMethodsRPC } from 'vitest/node' + +function createRpc(project: WorkspaceProject, wss: WebSocketServer) { + return createBirpc( + createMethodsRPC(project), + { + post: msg => wss.send(msg), + on: fn => wss.on('message', fn), + serialize: stringify, + deserialize: parse, + }, + ) +} +``` + +为了确保收集每个测试,您可以调用 `ctx.state.collectFiles` 并将其交给 Vitest 报告器: + +```ts +async function runTests(project: WorkspaceProject, tests: string[]) { + // ... 运行测试,放入 `files` 和 `tasks` 中 + const methods = createMethodsRPC(project) + await methods.onCollected(files) + // 大多数报告都依赖于在 `onTaskUpdate` 中更新结果 + await methods.onTaskUpdate(tasks) +} +``` + +可以在 [pool/custom-pool.ts](https://github.com/vitest-dev/vitest/blob/feat/custom-pool/test/run/pool-custom-fixtures/pool/custom-pool.ts). 中看到一个简单的示例。 diff --git a/advanced/reporters.md b/advanced/reporters.md index 3bc513c6..44ed9fab 100644 --- a/advanced/reporters.md +++ b/advanced/reporters.md @@ -1,8 +1,8 @@ -# 扩展默认报告器 +# 扩展默认报告器 (Extending Reporters) 你可以从 `vitest/reporters` 导入报告器并扩展它们以创建您的自定义报告器。 -## 扩展内置报告器 +## 扩展内置报告器 (Extending Built-in Reporters) 一般来说,你不需要从头开始创建报告器。`vitest` 附带了几个可以扩展的默认报告程序。 @@ -56,7 +56,7 @@ export default defineConfig({ }) ``` -## 导出报告器 +## 导出报告器 (Exported Reporters) `vitest` 附带了一些[内置报告器](/guide/reporters),你可以开箱即用。 diff --git a/guide/mocking.md b/guide/mocking.md index 11c4bec9..3d5c76e4 100644 --- a/guide/mocking.md +++ b/guide/mocking.md @@ -278,7 +278,7 @@ Mock Service Worker (MSW) 通过拦截测试发出的请求进行工作,允许 ```js import { afterAll, afterEach, beforeAll } from 'vitest' import { setupServer } from 'msw/node' -import { HttpResponse, graphql, rest } from 'msw' +import { HttpResponse, graphql, http } from 'msw' const posts = [ { diff --git a/package.json b/package.json index ae745daf..679b97f0 100644 --- a/package.json +++ b/package.json @@ -46,7 +46,7 @@ "unplugin-vue-components": "^0.25.2", "vite": "^5.0.0-beta.15", "vite-plugin-pwa": "^0.16.7", - "vitepress": "^1.0.0-rc.25", + "vitepress": "^1.0.0-rc.27", "workbox-window": "^7.0.0" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 52ee0e31..281e7554 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -89,8 +89,8 @@ devDependencies: specifier: ^0.16.7 version: 0.16.7(vite@5.0.0-beta.18)(workbox-build@7.0.0)(workbox-window@7.0.0) vitepress: - specifier: ^1.0.0-rc.25 - version: 1.0.0-rc.25(@algolia/client-search@4.20.0)(@types/node@18.15.11)(postcss@8.4.31)(search-insights@2.6.0)(typescript@5.0.4) + specifier: ^1.0.0-rc.27 + version: 1.0.0-rc.28(@algolia/client-search@4.20.0)(@types/node@18.15.11)(postcss@8.4.31)(search-insights@2.6.0)(typescript@5.0.4) workbox-window: specifier: ^7.0.0 version: 7.0.0 @@ -2336,8 +2336,8 @@ packages: resolution: {integrity: sha512-hPpIeeHb/2UuCw06kSNAOVWgehBLXEo0/fUs0mw3W2qhqX89PI2yvok83MnuctYGCPrabGIoi0fFso4DQ+sNUQ==} dev: true - /@types/markdown-it@13.0.5: - resolution: {integrity: sha512-QhJP7hkq3FCrFNx0szMNCT/79CXfcEgUIA3jc5GBfeXqoKsk3R8JZm2wRXJ2DiyjbPE4VMFOSDemLFcUTZmHEQ==} + /@types/markdown-it@13.0.6: + resolution: {integrity: sha512-0VqpvusJn1/lwRegCxcHVdmLfF+wIsprsKMC9xW8UPcTxhFcQtoN/fBU1zMe8pH7D/RuueMh2CaBaNv+GrLqTw==} dependencies: '@types/linkify-it': 3.0.4 '@types/mdurl': 1.0.4 @@ -2379,10 +2379,6 @@ packages: resolution: {integrity: sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ==} dev: true - /@types/web-bluetooth@0.0.18: - resolution: {integrity: sha512-v/ZHEj9xh82usl8LMR3GarzFY1IrbXJw5L4QfQhokjRV91q+SelFqxQWSep1ucXEZ22+dSTwLFkXeur25sPIbw==} - dev: true - /@types/web-bluetooth@0.0.20: resolution: {integrity: sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==} @@ -2746,26 +2742,26 @@ packages: vite-plugin-pwa: 0.16.7(vite@5.0.0-beta.18)(workbox-build@7.0.0)(workbox-window@7.0.0) dev: true - /@vitejs/plugin-vue@4.3.1(vite@4.5.0)(vue@3.3.8): - resolution: {integrity: sha512-tUBEtWcF7wFtII7ayNiLNDTCE1X1afySEo+XNVMNkFXaThENyCowIEX095QqbJZGTgoOcSVDJGlnde2NG4jtbQ==} + /@vitejs/plugin-vue@4.4.0(vite@5.0.0-beta.18)(vue@3.3.7): + resolution: {integrity: sha512-xdguqb+VUwiRpSg+nsc2HtbAUSGak25DXYvpQQi4RVU1Xq1uworyoH/md9Rfd8zMmPR/pSghr309QNcftUVseg==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: vite: ^4.0.0 vue: ^3.2.25 dependencies: - vite: 4.5.0(@types/node@18.15.11) - vue: 3.3.8(typescript@5.0.4) + vite: 5.0.0-beta.18(@types/node@18.15.11) + vue: 3.3.7(typescript@5.0.4) dev: true - /@vitejs/plugin-vue@4.4.0(vite@5.0.0-beta.18)(vue@3.3.7): - resolution: {integrity: sha512-xdguqb+VUwiRpSg+nsc2HtbAUSGak25DXYvpQQi4RVU1Xq1uworyoH/md9Rfd8zMmPR/pSghr309QNcftUVseg==} + /@vitejs/plugin-vue@4.5.0(vite@5.0.0)(vue@3.3.8): + resolution: {integrity: sha512-a2WSpP8X8HTEww/U00bU4mX1QpLINNuz/2KMNpLsdu3BzOpak3AGI1CJYBTXcc4SPhaD0eNRUp7IyQK405L5dQ==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: - vite: ^4.0.0 + vite: ^4.0.0 || ^5.0.0 vue: ^3.2.25 dependencies: - vite: 5.0.0-beta.18(@types/node@18.15.11) - vue: 3.3.7(typescript@5.0.4) + vite: 5.0.0(@types/node@18.15.11) + vue: 3.3.8(typescript@5.0.4) dev: true /@vue/compiler-core@3.3.7: @@ -2928,18 +2924,6 @@ packages: resolution: {integrity: sha512-8PGwybFwM4x8pcfgqEQFy70NaQxASvOC5DJwLQfpArw1UDfUXrJkdxD3BhVTMS+0Lef/TU7YO0Jvr0jJY8T+mw==} dev: true - /@vueuse/core@10.5.0(vue@3.3.8): - resolution: {integrity: sha512-z/tI2eSvxwLRjOhDm0h/SXAjNm8N5ld6/SC/JQs6o6kpJ6Ya50LnEL8g5hoYu005i28L0zqB5L5yAl8Jl26K3A==} - dependencies: - '@types/web-bluetooth': 0.0.18 - '@vueuse/metadata': 10.5.0 - '@vueuse/shared': 10.5.0(vue@3.3.8) - vue-demi: 0.14.6(vue@3.3.8) - transitivePeerDependencies: - - '@vue/composition-api' - - vue - dev: true - /@vueuse/core@10.6.0(vue@3.3.7): resolution: {integrity: sha512-+Yee+g9+9BEbvkyGdn4Bf4yZx9EfocAytpV2ZlrlP7xcz+qznLmZIDqDroTvc5vtMkWZicisgEv8dt3+jL+HQg==} dependencies: @@ -2952,20 +2936,20 @@ packages: - vue dev: false - /@vueuse/core@10.6.0(vue@3.3.8): - resolution: {integrity: sha512-+Yee+g9+9BEbvkyGdn4Bf4yZx9EfocAytpV2ZlrlP7xcz+qznLmZIDqDroTvc5vtMkWZicisgEv8dt3+jL+HQg==} + /@vueuse/core@10.6.1(vue@3.3.8): + resolution: {integrity: sha512-Pc26IJbqgC9VG1u6VY/xrXXfxD33hnvxBnKrLlA2LJlyHII+BSrRoTPJgGYq7qZOu61itITFUnm6QbacwZ4H8Q==} dependencies: '@types/web-bluetooth': 0.0.20 - '@vueuse/metadata': 10.6.0 - '@vueuse/shared': 10.6.0(vue@3.3.8) + '@vueuse/metadata': 10.6.1 + '@vueuse/shared': 10.6.1(vue@3.3.8) vue-demi: 0.14.6(vue@3.3.8) transitivePeerDependencies: - '@vue/composition-api' - vue dev: true - /@vueuse/integrations@10.5.0(focus-trap@7.5.4)(vue@3.3.8): - resolution: {integrity: sha512-fm5sXLCK0Ww3rRnzqnCQRmfjDURaI4xMsx+T+cec0ngQqHx/JgUtm8G0vRjwtonIeTBsH1Q8L3SucE+7K7upJQ==} + /@vueuse/integrations@10.6.1(focus-trap@7.5.4)(vue@3.3.8): + resolution: {integrity: sha512-mPDupuofMJ4DPmtX/FfP1MajmWRzYDv8WSaTCo8LQ5kFznjWgmUQ16ApjYqgMquqffNY6+IRMdMgosLDRZOSZA==} peerDependencies: async-validator: '*' axios: '*' @@ -3005,8 +2989,8 @@ packages: universal-cookie: optional: true dependencies: - '@vueuse/core': 10.5.0(vue@3.3.8) - '@vueuse/shared': 10.5.0(vue@3.3.8) + '@vueuse/core': 10.6.1(vue@3.3.8) + '@vueuse/shared': 10.6.1(vue@3.3.8) focus-trap: 7.5.4 vue-demi: 0.14.6(vue@3.3.8) transitivePeerDependencies: @@ -3014,20 +2998,12 @@ packages: - vue dev: true - /@vueuse/metadata@10.5.0: - resolution: {integrity: sha512-fEbElR+MaIYyCkeM0SzWkdoMtOpIwO72x8WsZHRE7IggiOlILttqttM69AS13nrDxosnDBYdyy3C5mR1LCxHsw==} - dev: true - /@vueuse/metadata@10.6.0: resolution: {integrity: sha512-mzKHkHoiK6xVz01VzQjM2l6ofUanEaofgEGPgDHcAzlvOTccPRTIdEuzneOUTYxgfm1vkDikS6rtrEw/NYlaTQ==} + dev: false - /@vueuse/shared@10.5.0(vue@3.3.8): - resolution: {integrity: sha512-18iyxbbHYLst9MqU1X1QNdMHIjks6wC7XTVf0KNOv5es/Ms6gjVFCAAWTVP2JStuGqydg3DT+ExpFORUEi9yhg==} - dependencies: - vue-demi: 0.14.6(vue@3.3.8) - transitivePeerDependencies: - - '@vue/composition-api' - - vue + /@vueuse/metadata@10.6.1: + resolution: {integrity: sha512-qhdwPI65Bgcj23e5lpGfQsxcy0bMjCAsUGoXkJ7DsoeDUdasbZ2DBa4dinFCOER3lF4gwUv+UD2AlA11zdzMFw==} dev: true /@vueuse/shared@10.6.0(vue@3.3.7): @@ -3039,8 +3015,8 @@ packages: - vue dev: false - /@vueuse/shared@10.6.0(vue@3.3.8): - resolution: {integrity: sha512-0t4MVE18sO+/4Gh0jfeOXBTjKeV4606N9kIrDOLPjFl8Rwnlodn+QC5A4LfJuysK7aOsTMjF3KnzNeueaI0xlQ==} + /@vueuse/shared@10.6.1(vue@3.3.8): + resolution: {integrity: sha512-TECVDTIedFlL0NUfHWncf3zF9Gc4VfdxfQc8JFwoVZQmxpONhLxFrlm0eHQeidHj4rdTPL3KXJa0TZCk1wnc5Q==} dependencies: vue-demi: 0.14.6(vue@3.3.8) transitivePeerDependencies: @@ -5397,8 +5373,8 @@ packages: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} dev: true - /minisearch@6.1.0: - resolution: {integrity: sha512-PNxA/X8pWk+TiqPbsoIYH0GQ5Di7m6326/lwU/S4mlo4wGQddIcf/V//1f9TB0V4j59b57b+HZxt8h3iMROGvg==} + /minisearch@6.2.0: + resolution: {integrity: sha512-BECkorDF1TY2rGKt9XHdSeP9TP29yUbrAaCh/C03wpyf1vx3uYcP/+8XlMcpTkgoU0rBVnHMAOaP83Rc9Tm+TQ==} dev: true /mkdirp-classic@0.5.3: @@ -6013,14 +5989,6 @@ packages: fsevents: 2.3.3 dev: true - /rollup@3.29.4: - resolution: {integrity: sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==} - engines: {node: '>=14.18.0', npm: '>=8.0.0'} - hasBin: true - optionalDependencies: - fsevents: 2.3.3 - dev: true - /rollup@4.4.0: resolution: {integrity: sha512-3L67ubCc1Qm49wUodsQ72FM6JmJ9M37d63rGPjxbcKrzNJrwFipl+lDNHeWd6BId09S6Tb9KiBgYKbWhIuqVyg==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} @@ -6873,12 +6841,12 @@ packages: - supports-color dev: true - /vite@4.5.0(@types/node@18.15.11): - resolution: {integrity: sha512-ulr8rNLA6rkyFAlVWw2q5YJ91v098AFQ2R0PRFwPzREXOUJQPtFUG0t+/ZikhaOCDqFoDhN6/v8Sq0o4araFAw==} - engines: {node: ^14.18.0 || >=16.0.0} + /vite@5.0.0(@types/node@18.15.11): + resolution: {integrity: sha512-ESJVM59mdyGpsiNAeHQOR/0fqNoOyWPYesFto8FFZugfmhdHx8Fzd8sF3Q/xkVhZsyOxHfdM7ieiVAorI9RjFw==} + engines: {node: ^18.0.0 || >=20.0.0} hasBin: true peerDependencies: - '@types/node': '>= 14' + '@types/node': ^18.0.0 || >=20.0.0 less: '*' lightningcss: ^1.21.0 sass: '*' @@ -6902,9 +6870,9 @@ packages: optional: true dependencies: '@types/node': 18.15.11 - esbuild: 0.18.20 + esbuild: 0.19.5 postcss: 8.4.31 - rollup: 3.29.4 + rollup: 4.4.0 optionalDependencies: fsevents: 2.3.3 dev: true @@ -6945,8 +6913,8 @@ packages: fsevents: 2.3.3 dev: true - /vitepress@1.0.0-rc.25(@algolia/client-search@4.20.0)(@types/node@18.15.11)(postcss@8.4.31)(search-insights@2.6.0)(typescript@5.0.4): - resolution: {integrity: sha512-1dqWiHNThNrVZ08ixmfEDBEH+764KOgnev9oXga/x6cN++Vb9pnuu8p3K6DQP+KZrYcG+WiX7jxal0iSNpAWuQ==} + /vitepress@1.0.0-rc.28(@algolia/client-search@4.20.0)(@types/node@18.15.11)(postcss@8.4.31)(search-insights@2.6.0)(typescript@5.0.4): + resolution: {integrity: sha512-cB0DNhX1jgmyZxPSrH5E+YpgpSlLuDL4ec9UjeqTe/Si1+MEvIJRgifB0RjGfojKa+gkSo97nLO6WN+iFgtgXQ==} hasBin: true peerDependencies: markdown-it-mathjax3: ^4.3.2 @@ -6959,17 +6927,18 @@ packages: dependencies: '@docsearch/css': 3.5.2 '@docsearch/js': 3.5.2(@algolia/client-search@4.20.0)(search-insights@2.6.0) - '@types/markdown-it': 13.0.5 - '@vitejs/plugin-vue': 4.3.1(vite@4.5.0)(vue@3.3.8) + '@types/markdown-it': 13.0.6 + '@vitejs/plugin-vue': 4.5.0(vite@5.0.0)(vue@3.3.8) '@vue/devtools-api': 6.5.1 - '@vueuse/core': 10.6.0(vue@3.3.8) - '@vueuse/integrations': 10.5.0(focus-trap@7.5.4)(vue@3.3.8) + '@vueuse/core': 10.6.1(vue@3.3.8) + '@vueuse/integrations': 10.6.1(focus-trap@7.5.4)(vue@3.3.8) focus-trap: 7.5.4 mark.js: 8.11.1 - minisearch: 6.1.0 + minisearch: 6.2.0 + mrmime: 1.0.1 postcss: 8.4.31 shiki: 0.14.5 - vite: 4.5.0(@types/node@18.15.11) + vite: 5.0.0(@types/node@18.15.11) vue: 3.3.8(typescript@5.0.4) transitivePeerDependencies: - '@algolia/client-search'