From b636e4f2d278f27fdf15e9477dee27e7ee51343d Mon Sep 17 00:00:00 2001 From: Vladimir Date: Sat, 23 May 2026 11:28:48 +0200 Subject: [PATCH 1/7] docs: add releases page (#10432) --- .vitepress/config.ts | 7 + .vitepress/theme/SupportedVersions.vue | 172 +++++++++++++++++++++++++ guide/migration.md | 2 +- releases.md | 57 ++++++++ 4 files changed, 237 insertions(+), 1 deletion(-) create mode 100644 .vitepress/theme/SupportedVersions.vue create mode 100644 releases.md diff --git a/.vitepress/config.ts b/.vitepress/config.ts index 3e6405af..0f324f9b 100644 --- a/.vitepress/config.ts +++ b/.vitepress/config.ts @@ -88,6 +88,9 @@ export default ({ mode }: { mode: string }) => { }), llmstxt(), ], + define: { + __VITEST_VERSION__: JSON.stringify(version), + }, }, markdown: { config(md) { @@ -228,6 +231,10 @@ export default ({ mode }: { mode: string }) => { text: 'Team', link: '/team', }, + { + text: 'Releases', + link: '/releases', + }, ], }, { diff --git a/.vitepress/theme/SupportedVersions.vue b/.vitepress/theme/SupportedVersions.vue new file mode 100644 index 00000000..193d2009 --- /dev/null +++ b/.vitepress/theme/SupportedVersions.vue @@ -0,0 +1,172 @@ + + + + + diff --git a/guide/migration.md b/guide/migration.md index 5d4e15ea..abc01785 100644 --- a/guide/migration.md +++ b/guide/migration.md @@ -5,7 +5,7 @@ outline: deep # Migration Guide -[Migrating to Vitest 3.0](https://v3.vitest.dev/guide/migration) | [Migrating to Vitest 2.0](https://v2.vitest.dev/guide/migration) +[Migrating to Vitest 4.0](https://v4.vitest.dev/guide/migration) | [Migrating to Vitest 3.0](https://v3.vitest.dev/guide/migration) ## Migrating to Vitest 5.0 {#vitest-5} diff --git a/releases.md b/releases.md new file mode 100644 index 00000000..664bf97f --- /dev/null +++ b/releases.md @@ -0,0 +1,57 @@ + + +# Releases + +Vitest releases follow [Semantic Versioning](https://semver.org/). You can see the latest stable version of Vitest in the [Vitest npm package page](https://www.npmjs.com/package/vite). + +A full changelog of past releases is [available on GitHub](https://github.com/vitest-dev/vitest/releases). + +## Release Cycle + +Vitest does not have a fixed release cycle. + +- **Patch** releases are released as needed (usually every week). +- **Minor** releases always contain new features and are released as needed. Minor releases always have a beta pre-release phase (usually every two months). +- **Major** releases generally align with [Vite](https://vite.dev/releases) and [Node.js EOL schedule](https://endoflife.date/nodejs), and will be announced ahead of time. These releases will have a long beta pre-release phases (usually every year). + +## Supported Versions + +In summary, the current supported Vitest versions are: + + + +
+ +The supported version ranges are automatically determined by: + +- **Current Minor** gets regular fixes. +- **Previous Major** (only for its latest minor) and **Previous Minor** receives important fixes and security patches. +- All versions before these are no longer supported. + +We recommend updating Vitest regularly. Check out the [Migration Guides](/guide/migration) when you update to each Major. We test new Vitest versions before releasing them through the [vitest-ecosystem-ci project](https://github.com/vitest-dev/vitest-ecosystem-ci). Most projects using Vitest should be able to quickly offer support or migrate to new versions as soon as they are released. + +## Semantic Versioning Edge Cases + +### TypeScript Definitions + +We may ship incompatible changes to TypeScript definitions between minor versions. This is because: + +- Sometimes TypeScript itself ships incompatible changes between minor versions, and we may have to adjust types to support newer versions of TypeScript. +- Occasionally we may need to adopt features that are only available in a newer version of TypeScript, raising the minimum required version of TypeScript. +- If you are using TypeScript, you can use a semver range that locks the current minor and manually upgrade when a new minor version of Vite is released. + +## Pre Releases + +Minor releases typically go through a non-fixed number of beta releases. Major releases will go through a long beta phase. + +Pre-releases allow early adopters and maintainers from the Ecosystem to do integration and stability testing, and provide feedback. Do not use pre-releases in production. All pre-releases are considered unstable and may ship breaking changes in between. Always pin to exact versions when using pre-releases. + +## Deprecations + +We periodically deprecate features that have been superseded by better alternatives in Minor releases. Deprecated features will continue to work with a type or logged warning. They will be removed in the next major release after entering deprecated status. The [Migration Guide](/guide/migration.html) for each major will list these removals and document an upgrade path for them. + +## Experimental Features + +Some features are marked as experimental when released in a stable version of Vite. Experimental features allow us to gather real-world experience to influence their final design. The goal is to let users provide feedback by testing them in production. Experimental features themselves are considered unstable, and should only be used in a controlled manner. These features may change between Minors, so users must pin their Vite version when they rely on them. We will create [a GitHub discussion](https://github.com/vitest-dev/vitest/discussions/categories/feedback?discussions_q=is%3Aopen+label%3Aexperimental+category%3AFeedback) for each experimental feature. From 6ddec4833f583e6d01cf3c3c7f20518eb6ef48fc Mon Sep 17 00:00:00 2001 From: Vladimir Date: Sat, 23 May 2026 13:12:19 +0200 Subject: [PATCH 2/7] feat(browser)!: enable `locators.exact` by default (#10430) --- config/browser/locators.md | 10 +++++----- guide/cli-generated.md | 2 +- guide/migration.md | 11 +++++++++++ 3 files changed, 17 insertions(+), 6 deletions(-) diff --git a/config/browser/locators.md b/config/browser/locators.md index 29ecdd03..f914256d 100644 --- a/config/browser/locators.md +++ b/config/browser/locators.md @@ -14,16 +14,16 @@ Options for built-in [browser locators](/api/browser/locators). Attribute used to find elements with `getByTestId` locator. -## browser.locators.exact 4.1.3 {#browser-locators-exact} +## browser.locators.exact - **Type:** `boolean` -- **Default:** `false` +- **Default:** `true` -When set to `true`, [locators](/api/browser/locators) will match text exactly by default, requiring a full, case-sensitive match. Individual locator calls can override this default via their own `exact` option. +When set to `true`, [locators](/api/browser/locators) match text exactly by default, requiring a full, case-sensitive match. Individual locator calls can override this default via their own `exact` option. ```ts -// With exact: false (default), this matches "Hello, World!", "Say Hello, World", etc. -// With exact: true, this only matches the string "Hello, World" exactly. +// With exact: true (default), this only matches the string "Hello, World" exactly. +// With exact: false, this matches "Hello, World!", "Say Hello, World", etc. const locator = page.getByText('Hello, World', { exact: true }) await locator.click() ``` diff --git a/guide/cli-generated.md b/guide/cli-generated.md index 93cb69c9..32484b6b 100644 --- a/guide/cli-generated.md +++ b/guide/cli-generated.md @@ -462,7 +462,7 @@ Inline loaded image pixels in trace-view snapshots (default: `false`) - **CLI:** `--browser.locators.exact` - **Config:** [browser.locators.exact](/config/browser/locators#locators-exact) -Should locators match the text exactly by default (default: `false`) +Should locators match the text exactly by default (default: `true`) ### pool diff --git a/guide/migration.md b/guide/migration.md index abc01785..2943981a 100644 --- a/guide/migration.md +++ b/guide/migration.md @@ -56,6 +56,17 @@ export async function customClick( } ``` +### Locators are Strict by Default + +Browser locators now match the text exactly by default, requiring a full, case-sensitive match. To keep the previous behaviour, you can set [`browser.locators.exact`](/config/browser/locators#browser-locators-exact) to `false`. + +```ts +// With exact: true (default), this only matches the string "Hello, World" exactly. +// With exact: false, this matches "Hello, World!", "Say Hello, World", etc. +const locator = page.getByText('Hello, World', { exact: true }) +await locator.click() +``` + ### Removed Deprecated Entrypoints Several entry points were marked as deprecated in Vitest 4.1. This release removes them entirely. From 988854f772c8e8fd6f0c5fee0d18f90f58657ea6 Mon Sep 17 00:00:00 2001 From: Patrick Clausen Date: Sat, 23 May 2026 19:26:28 +0200 Subject: [PATCH 3/7] fix: forceRerunTriggers uses directory globs against files (fix #10421) (#10420) Co-authored-by: Patrick Clausen --- config/forcereruntriggers.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/forcereruntriggers.md b/config/forcereruntriggers.md index 9dad489c..7dca49ab 100644 --- a/config/forcereruntriggers.md +++ b/config/forcereruntriggers.md @@ -6,7 +6,7 @@ outline: deep # forceRerunTriggers - **Type:** `string[]` -- **Default:** `['**/package.json/**', '**/vitest.config.*/**', '**/vite.config.*/**']` +- **Default:** `['**/package.json', '**/vitest.config.*', '**/vite.config.*']` Glob pattern of file paths that will trigger the whole suite rerun. When paired with the `--changed` argument will run the whole test suite if the trigger is found in the git diff. From b8458066305a759bf414605c23780c31dccbd917 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Sun, 24 May 2026 19:21:53 +0900 Subject: [PATCH 4/7] docs: update vitest-browser-vue/svelte async render (#10441) Co-authored-by: Codex --- api/browser/svelte.md | 15 +-------------- api/browser/vue.md | 23 +++-------------------- guide/browser/index.md | 4 ++-- 3 files changed, 6 insertions(+), 36 deletions(-) diff --git a/api/browser/svelte.md b/api/browser/svelte.md index 4ae2c964..9db5c707 100644 --- a/api/browser/svelte.md +++ b/api/browser/svelte.md @@ -39,20 +39,11 @@ export function render( Component: ComponentImport, options?: ComponentOptions, renderOptions?: SetupOptions -): RenderResult & PromiseLike> +): Promise> ``` The `render` function records a `svelte.render` trace mark, visible in the [Trace View](/guide/browser/trace-view). -::: warning -Synchronous usage of `render` is deprecated and will be removed in the next major version. Please always `await` the result: - -```ts -const screen = render(Component) // [!code --] -const screen = await render(Component) // [!code ++] -``` -::: - ### Options The `render` function supports either options that you can pass down to [`mount`](https://svelte.dev/docs/svelte/imperative-component-api#mount) or props directly: @@ -174,10 +165,6 @@ function unmount(): Promise Unmount and destroy the Svelte component. Also records a `svelte.unmount` trace mark in the [Trace View](/guide/browser/trace-view). This is useful for testing what happens when your component is removed from the page (like testing that you don't leave event handlers hanging around causing memory leaks). -::: warning -Synchronous usage of `unmount` is deprecated and will be removed in the next major version. Please always `await` the result. -::: - ```ts import { render } from 'vitest-browser-svelte' diff --git a/api/browser/vue.md b/api/browser/vue.md index 4695a47f..af3b47ac 100644 --- a/api/browser/vue.md +++ b/api/browser/vue.md @@ -40,20 +40,11 @@ The package exposes two entry points: `vitest-browser-vue` and `vitest-browser-v export function render( component: Component, options?: ComponentRenderOptions, -): RenderResult & PromiseLike +): Promise ``` The `render` function records a `vue.render` trace mark, visible in the [Trace View](/guide/browser/trace-view). -::: warning -Synchronous usage of `render` is deprecated and will be removed in the next major version. Please always `await` the result: - -```ts -const screen = render(Component) // [!code --] -const screen = await render(Component) // [!code ++] -``` -::: - ### Options The `render` function supports all [`mount` options](https://test-utils.vuejs.org/api/#mount) from `@vue/test-utils` (except `attachTo` - use `container` instead). In addition to them, there are also `container` and `baseElement`. @@ -136,17 +127,13 @@ This method is a shortcut for `console.log(prettyDOM(baseElement))`. It will pri #### rerender ```ts -function rerender(props: Partial): void & PromiseLike +function rerender(props: Partial): Promise ``` Also records a `vue.rerender` trace mark in the [Trace View](/guide/browser/trace-view). It is better if you test the component that's doing the prop updating to ensure that the props are being updated correctly to avoid relying on implementation details in your tests. That said, if you'd prefer to update the props of a rendered component in your test, this function can be used to update props of the rendered component. -::: warning -Synchronous usage of `rerender` is deprecated and will be removed in the next major version. Please always `await` the result. -::: - ```js import { render } from 'vitest-browser-vue' @@ -159,15 +146,11 @@ await rerender({ number: 2 }) #### unmount ```ts -function unmount(): void & PromiseLike +function unmount(): Promise ``` This will cause the rendered component to be unmounted. Also records a `vue.unmount` trace mark in the [Trace View](/guide/browser/trace-view). This is useful for testing what happens when your component is removed from the page (like testing that you don't leave event handlers hanging around causing memory leaks). -::: warning -Synchronous usage of `unmount` is deprecated and will be removed in the next major version. Please always `await` the result. -::: - #### emitted ```ts diff --git a/guide/browser/index.md b/guide/browser/index.md index d13f882c..7f7fee18 100644 --- a/guide/browser/index.md +++ b/guide/browser/index.md @@ -432,7 +432,7 @@ import { render } from 'vitest-browser-vue' import Component from './Component.vue' test('properly handles v-model', async () => { - const screen = render(Component) + const screen = await render(Component) // Asserts initial state. await expect.element(screen.getByText('Hi, my name is Alice')).toBeInTheDocument() @@ -454,7 +454,7 @@ import { expect, test } from 'vitest' import Greeter from './greeter.svelte' test('greeting appears on click', async () => { - const screen = render(Greeter, { name: 'World' }) + const screen = await render(Greeter, { name: 'World' }) const button = screen.getByRole('button') await button.click() From 57422b2409a119ebf2127bd705b1d5b52e46a0a6 Mon Sep 17 00:00:00 2001 From: noise Date: Tue, 26 May 2026 00:31:57 +0800 Subject: [PATCH 5/7] docs(cn): dissolve the conflict --- api/browser/svelte.md | 20 -------------------- api/browser/vue.md | 27 --------------------------- config/browser/locators.md | 17 +++-------------- config/forcereruntriggers.md | 7 +------ guide/cli-generated.md | 6 +----- guide/migration.md | 14 +++----------- 6 files changed, 8 insertions(+), 83 deletions(-) diff --git a/api/browser/svelte.md b/api/browser/svelte.md index da0409d9..e6db3af6 100644 --- a/api/browser/svelte.md +++ b/api/browser/svelte.md @@ -44,20 +44,7 @@ export function render( `render` 函数会记录一个 `svelte.render` 追踪标记,该标记可在 [Trace View](/guide/browser/trace-view) 中查看。 -<<<<<<< HEAD -::: warning -同步调用 `render` 的方式已被弃用,并将在下一个主要版本中移除。请始终使用 `await` 处理其返回结果: - -```ts -const screen = render(Component) // [!code --] -const screen = await render(Component) // [!code ++] -``` -::: - ### 选项 {#options} -======= -### Options ->>>>>>> b8458066305a759bf414605c23780c31dccbd917 `render` 函数支持两种传参方式,一种是向 [`mount`](https://svelte.dev/docs/svelte/imperative-component-api#mount) 传入配置选项,另一种则是直接向组件传入属性: @@ -178,13 +165,6 @@ function unmount(): Promise 卸载并销毁 Svelte 组件。同时会在 [Trace View](/guide/browser/trace-view) 中记录一个 `svelte.unmount` 追踪标记。此功能适用于测试组件从页面中移除时的行为(例如测试是否未遗留事件监听器导致内存泄漏)。 -<<<<<<< HEAD -::: warning -同步调用 `unmount` 的方式已被弃用,并将在下一个主要版本中移除。请始终使用 `await` 处理其返回结果: -::: - -======= ->>>>>>> b8458066305a759bf414605c23780c31dccbd917 ```ts import { render } from 'vitest-browser-svelte' diff --git a/api/browser/vue.md b/api/browser/vue.md index ad022c61..b03eb1a5 100644 --- a/api/browser/vue.md +++ b/api/browser/vue.md @@ -45,20 +45,7 @@ export function render( `render` 函数会记录一个 `vue.render` 追踪标记,该标记可在 [Trace View](/guide/browser/trace-view) 中查看。 -<<<<<<< HEAD -::: warning -同步调用 `render` 的方式已被弃用,并将在下一个主要版本中移除。请始终使用 `await` 处理其返回结果: - -```ts -const screen = render(Component) // [!code --] -const screen = await render(Component) // [!code ++] -``` -::: - ### 选项 {#options} -======= -### Options ->>>>>>> b8458066305a759bf414605c23780c31dccbd917 `render` 函数支持 `@vue/test-utils` 中 [`mount` 选项](https://test-utils.vuejs.org/api/#mount) 的全部参数(除 `attachTo` 外,需改用 `container`)。此外还额外支持 `container` 和 `baseElement` 参数。 @@ -146,13 +133,6 @@ function rerender(props: Partial): Promise 为了更好地确保组件正确地更新属性,建议测试负责属性更新的组件本身,以避免在测试中依赖实现细节。尽管如此,如果你更倾向于在测试中更新已渲染组件的属性,可以使用此函数来实现。 -<<<<<<< HEAD -::: warning -同步调用 `render` 的方式已被弃用,并将在下一个主要版本中移除。请始终使用 `await` 处理其返回结果: -::: - -======= ->>>>>>> b8458066305a759bf414605c23780c31dccbd917 ```js import { render } from 'vitest-browser-vue' @@ -170,13 +150,6 @@ function unmount(): Promise 该操作会触发组件卸载,同时在 [跟踪视图](/guide/browser/trace-view) 中记录 `vue.unmount` 标记点。此功能特别适用于测试组件从页面移除时的行为(例如验证是否残留事件处理器导致内存泄漏)。 -<<<<<<< HEAD -::: warning -同步调用 `unmount` 的方式已被弃用,将在下一主要版本中移除。请使用 `await` 进行异步调用。 -::: - -======= ->>>>>>> b8458066305a759bf414605c23780c31dccbd917 #### emitted ```ts diff --git a/config/browser/locators.md b/config/browser/locators.md index b260e32f..42028721 100644 --- a/config/browser/locators.md +++ b/config/browser/locators.md @@ -16,25 +16,14 @@ outline: deep ## browser.locators.exact -<<<<<<< HEAD - **类型:** `boolean` -- **默认值:** `false` +- **默认值:** `true` 当设置为 `true` 时,[定位器](/api/browser/locators) 默认会执行精确文本匹配,要求完全且区分大小写的匹配。单个定位器调用可通过自身的 `exact` 选项覆盖此默认行为。 ```ts -// 当 exact: false(默认值)时,会匹配 "Hello, World!"、"Say Hello, World" 等文本 -// 当 exact: true 时,仅精确匹配字符串 "Hello, World" -======= -- **Type:** `boolean` -- **Default:** `true` - -When set to `true`, [locators](/api/browser/locators) match text exactly by default, requiring a full, case-sensitive match. Individual locator calls can override this default via their own `exact` option. - -```ts -// With exact: true (default), this only matches the string "Hello, World" exactly. -// With exact: false, this matches "Hello, World!", "Say Hello, World", etc. ->>>>>>> b8458066305a759bf414605c23780c31dccbd917 +// 当 exact: true(默认值)时,仅精确匹配字符串 "Hello, World" +// 当 exact: false 时,会匹配 "Hello, World!"、"Say Hello, World" 等文本 const locator = page.getByText('Hello, World', { exact: true }) await locator.click() ``` diff --git a/config/forcereruntriggers.md b/config/forcereruntriggers.md index 3bca268b..a31878e8 100644 --- a/config/forcereruntriggers.md +++ b/config/forcereruntriggers.md @@ -5,13 +5,8 @@ outline: deep # forceRerunTriggers -<<<<<<< HEAD - **类型:** `string[]` -- **默认值:** `['**/package.json/**', '**/vitest.config.*/**', '**/vite.config.*/**']` -======= -- **Type:** `string[]` -- **Default:** `['**/package.json', '**/vitest.config.*', '**/vite.config.*']` ->>>>>>> b8458066305a759bf414605c23780c31dccbd917 +- **默认值:** `['**/package.json', '**/vitest.config.*', '**/vite.config.*']` 将触发整个测试套件重新运行的文件路径(glob 模式)。当与 `--changed` 参数配合使用时,如果在 git diff 中发现触发文件,就会运行整个测试套件。 diff --git a/guide/cli-generated.md b/guide/cli-generated.md index 002911b4..b3690888 100644 --- a/guide/cli-generated.md +++ b/guide/cli-generated.md @@ -462,11 +462,7 @@ UI 模式和 HTML 报告器中提供的 HTML 覆盖率输出目录。 - **命令行终端:** `--browser.locators.exact` - **配置:** [browser.locators.exact](/config/browser/locators#locators-exact) -<<<<<<< HEAD -定位器是否默认需完全匹配文本内容(默认值:`false`) -======= -Should locators match the text exactly by default (default: `true`) ->>>>>>> b8458066305a759bf414605c23780c31dccbd917 +定位器是否默认需完全匹配文本内容(默认值:`true`) ### pool diff --git a/guide/migration.md b/guide/migration.md index 2aba2081..cea5dae6 100644 --- a/guide/migration.md +++ b/guide/migration.md @@ -5,11 +5,7 @@ outline: deep # 迁移指南 {#migration-guide} -<<<<<<< HEAD -[迁移至 Vitest 3.0](https://v3.vitest.dev/guide/migration) | [迁移至 Vitest 2.0](https://v2.vitest.dev/guide/migration) -======= -[Migrating to Vitest 4.0](https://v4.vitest.dev/guide/migration) | [Migrating to Vitest 3.0](https://v3.vitest.dev/guide/migration) ->>>>>>> b8458066305a759bf414605c23780c31dccbd917 +[迁移至 Vitest 4.0](https://v4.vitest.dev/guide/migration) | [迁移至 Vitest 3.0](https://v3.vitest.dev/guide/migration) ## 迁移至 Vitest 5.0 {#vitest-5} @@ -59,10 +55,7 @@ export async function customClick( await context.page.locator(selector).click() } ``` - -<<<<<<< HEAD -### 移除了已弃用的入口 {#removed-deprecated-entrypoints} -======= + ### Locators are Strict by Default Browser locators now match the text exactly by default, requiring a full, case-sensitive match. To keep the previous behaviour, you can set [`browser.locators.exact`](/config/browser/locators#browser-locators-exact) to `false`. @@ -74,8 +67,7 @@ const locator = page.getByText('Hello, World', { exact: true }) await locator.click() ``` -### Removed Deprecated Entrypoints ->>>>>>> b8458066305a759bf414605c23780c31dccbd917 +### 移除了已弃用的入口 {#removed-deprecated-entrypoints} 多个入口在 Vitest 4.1 中被标记为已弃用。此版本完全移除了它们。 From 7e55c442812866ccb0ad552aec78620d4b4b27ae Mon Sep 17 00:00:00 2001 From: noise Date: Tue, 26 May 2026 00:37:15 +0800 Subject: [PATCH 6/7] fix: lint error --- .vitepress/theme/SupportedVersions.vue | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/.vitepress/theme/SupportedVersions.vue b/.vitepress/theme/SupportedVersions.vue index 193d2009..44f99f2c 100644 --- a/.vitepress/theme/SupportedVersions.vue +++ b/.vitepress/theme/SupportedVersions.vue @@ -3,7 +3,9 @@ import { computed, ref } from 'vue' declare const __VITEST_VERSION__: string -// Constants +const DIGITS_ONLY_RE = /^\d+$/ +const NEGATIVE_VERSION_RE = /-\d/ + const supportedVersionMessage = { color: 'var(--vp-c-brand-1)', text: 'supported', @@ -56,7 +58,7 @@ const checkedResult = computed(() => { function parseVersion(version: string) { let [major, minor, patch] = version.split('.').map((v) => { - const num = /^\d+$/.exec(v)?.[0] + const num = DIGITS_ONLY_RE.exec(v)?.[0] return num ? Number.parseInt(num) : null }) if (!major) { @@ -80,7 +82,7 @@ function computeSupportInfo( return false } // Negative versions are invalid - if (/-\d/.test(version)) { + if (NEGATIVE_VERSION_RE.test(version)) { return false } return true From 06927eae7107bd472a6715f1094543230b7ef122 Mon Sep 17 00:00:00 2001 From: "autofix-ci[bot]" <114827586+autofix-ci[bot]@users.noreply.github.com> Date: Mon, 25 May 2026 16:38:17 +0000 Subject: [PATCH 7/7] [autofix.ci] apply automated fixes --- .vitepress/theme/SupportedVersions.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.vitepress/theme/SupportedVersions.vue b/.vitepress/theme/SupportedVersions.vue index 44f99f2c..dcb948bf 100644 --- a/.vitepress/theme/SupportedVersions.vue +++ b/.vitepress/theme/SupportedVersions.vue @@ -106,7 +106,7 @@ function versionsToText(versions: string[]) { return versions[0] } return ( - `${versions.slice(0, -1).join(', ')} and ${versions[versions.length - 1]}` + `${versions.slice(0, -1).join(', ')} and ${versions.at(-1)}` ) }