From 094afcecb21726da5125499847d1fc3185b623fc Mon Sep 17 00:00:00 2001 From: sapphi-red <49056869+sapphi-red@users.noreply.github.com> Date: Fri, 7 Mar 2025 17:43:36 +0900 Subject: [PATCH 01/25] feat: use rolldown to bundle config --- _data/blog.data.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/_data/blog.data.ts b/_data/blog.data.ts index 39d45ec2..9cd7af16 100644 --- a/_data/blog.data.ts +++ b/_data/blog.data.ts @@ -9,8 +9,8 @@ interface Post { } } -declare const data: Post[] -export { data } +// NOTE: https://github.com/rolldown/rolldown/issues/3048, https://github.com/oxc-project/oxc/issues/7951 +export declare const data: Post[] export default createContentLoader('blog/*.md', { // excerpt: true, From dc2721a71b153f4f0c32c729111f1db47a5a884d Mon Sep 17 00:00:00 2001 From: sapphi-red <49056869+sapphi-red@users.noreply.github.com> Date: Mon, 10 Mar 2025 18:46:37 +0900 Subject: [PATCH 02/25] chore: set `ROLLDOWN_OPTIONS_VALIDATION=loose` for vitepress --- .vitepress/config.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.vitepress/config.ts b/.vitepress/config.ts index 405d8690..c1f4c6df 100644 --- a/.vitepress/config.ts +++ b/.vitepress/config.ts @@ -7,6 +7,9 @@ import { } from 'vitepress-plugin-group-icons' import { buildEnd } from './buildEnd.config' +// NOTE: allow additional options to be passed to rolldown for now +process.env.ROLLDOWN_OPTIONS_VALIDATION = 'loose' + const ogDescription = 'Next Generation Frontend Tooling' const ogImage = 'https://vite.dev/og-image.jpg' const ogTitle = 'Vite' From 8fd367f7745a3dd0c37e3f8302895be790698fa5 Mon Sep 17 00:00:00 2001 From: sapphi-red <49056869+sapphi-red@users.noreply.github.com> Date: Mon, 21 Apr 2025 11:42:40 +0900 Subject: [PATCH 03/25] chore: remove unnecessary workaround --- _data/blog.data.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/_data/blog.data.ts b/_data/blog.data.ts index 9cd7af16..39d45ec2 100644 --- a/_data/blog.data.ts +++ b/_data/blog.data.ts @@ -9,8 +9,8 @@ interface Post { } } -// NOTE: https://github.com/rolldown/rolldown/issues/3048, https://github.com/oxc-project/oxc/issues/7951 -export declare const data: Post[] +declare const data: Post[] +export { data } export default createContentLoader('blog/*.md', { // excerpt: true, From 6b5516e7eb0b2bc2bb1eb56019011e12400f57b5 Mon Sep 17 00:00:00 2001 From: sapphi-red <49056869+sapphi-red@users.noreply.github.com> Date: Wed, 25 Jun 2025 19:35:45 +0900 Subject: [PATCH 04/25] chore: fix docs build --- package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/package.json b/package.json index 44c2384f..1b3b3864 100644 --- a/package.json +++ b/package.json @@ -12,6 +12,7 @@ "@types/express": "^5.0.3", "feed": "^5.1.0", "gsap": "^3.13.0", + "oxc-minify": "^0.74.0", "vitepress": "^2.0.0-alpha.6", "vitepress-plugin-group-icons": "^1.6.0", "vitepress-plugin-llms": "^1.5.1", From 303e85029aac390850417ded32128b1589ecc496 Mon Sep 17 00:00:00 2001 From: sapphi-red <49056869+sapphi-red@users.noreply.github.com> Date: Fri, 4 Jul 2025 19:37:21 +0900 Subject: [PATCH 05/25] chore: remove `ROLLDOWN_OPTIONS_VALIDATION=loose` from vitepress config --- .vitepress/config.ts | 3 --- 1 file changed, 3 deletions(-) diff --git a/.vitepress/config.ts b/.vitepress/config.ts index b68248ec..5d77ff48 100644 --- a/.vitepress/config.ts +++ b/.vitepress/config.ts @@ -9,9 +9,6 @@ import llmstxt from 'vitepress-plugin-llms' import type { PluginOption } from 'vite' import { buildEnd } from './buildEnd.config' -// NOTE: allow additional options to be passed to rolldown for now -process.env.ROLLDOWN_OPTIONS_VALIDATION = 'loose' - const ogDescription = 'Next Generation Frontend Tooling' const ogImage = 'https://vite.dev/og-image.jpg' const ogTitle = 'Vite' From a1194880652e270999af366e2f4f6de6de52adc6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=BF=A0?= Date: Mon, 4 Aug 2025 18:17:04 +0900 Subject: [PATCH 06/25] feat: enable native resolver by default (#346) --- index.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/index.md b/index.md index 1fc560b0..16c3a2e5 100644 --- a/index.md +++ b/index.md @@ -15,12 +15,12 @@ markdownStyles: false import { useData } from 'vitepress' import { onBeforeUnmount, onMounted, ref } from 'vue' -import Hero from '.vitepress/theme/components/landing/1. hero-section/HeroSection.vue' +import Hero from './.vitepress/theme/components/landing/1. hero-section/HeroSection.vue' import FeatureSection from './.vitepress/theme/components/landing/2. feature-section/FeatureSection.vue' import FrameworksSection from './.vitepress/theme/components/landing/3. frameworks-section/FrameworksSection.vue' import CommunitySection from './.vitepress/theme/components/landing/4. community-section/CommunitySection.vue' import SponsorSection from './.vitepress/theme/components/landing/5. sponsor-section/SponsorSection.vue' -import GetStartedSection from '.vitepress/theme/components/landing/6. get-started-section/GetStartedSection.vue' +import GetStartedSection from './.vitepress/theme/components/landing/6. get-started-section/GetStartedSection.vue' import FeatureInstantServerStart from './.vitepress/theme/components/landing/2. feature-section/FeatureInstantServerStart.vue' import FeatureHMR from './.vitepress/theme/components/landing/2. feature-section/FeatureHMR.vue' import FeatureRichFeatures from './.vitepress/theme/components/landing/2. feature-section/FeatureRichFeatures.vue' From 024748a5e861a98638fc6fb0cd7fff00013b2357 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=BF=A0?= Date: Mon, 20 Oct 2025 16:34:17 +0900 Subject: [PATCH 07/25] feat: update rolldown (#456) --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 94ef044e..1456ecf7 100644 --- a/package.json +++ b/package.json @@ -14,7 +14,7 @@ "feed": "^5.1.0", "gsap": "^3.13.0", "markdown-it-image-size": "^15.0.1", - "oxc-minify": "^0.87.0", + "oxc-minify": "^0.95.0", "vitepress": "^2.0.0-alpha.12", "vitepress-plugin-group-icons": "^1.6.4", "vitepress-plugin-llms": "^1.8.0", From 82aafa3e17ad9f1039b8da216bee2b83af0fe4b6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=BF=A0?= Date: Tue, 4 Nov 2025 13:16:54 +0900 Subject: [PATCH 08/25] feat: update rolldown (#481) --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 635b1bfa..e3689cc0 100644 --- a/package.json +++ b/package.json @@ -14,7 +14,7 @@ "feed": "^5.1.0", "gsap": "^3.13.0", "markdown-it-image-size": "^15.0.1", - "oxc-minify": "^0.95.0", + "oxc-minify": "^0.96.0", "vitepress": "^2.0.0-alpha.12", "vitepress-plugin-group-icons": "^1.6.5", "vitepress-plugin-llms": "^1.8.1", From 220fc89bcd2f6d85e8015b82b115bc7ce3132b60 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=BF=A0?= Date: Wed, 12 Nov 2025 20:16:47 +0900 Subject: [PATCH 09/25] feat: update rolldown to 1.0.0-beta.50 (#508) --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index e3689cc0..4900af64 100644 --- a/package.json +++ b/package.json @@ -14,7 +14,7 @@ "feed": "^5.1.0", "gsap": "^3.13.0", "markdown-it-image-size": "^15.0.1", - "oxc-minify": "^0.96.0", + "oxc-minify": "^0.97.0", "vitepress": "^2.0.0-alpha.12", "vitepress-plugin-group-icons": "^1.6.5", "vitepress-plugin-llms": "^1.8.1", From 996709ecc7837a2edf4bf13eb7eefa3fe4e38566 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=BF=A0?= Date: Fri, 14 Nov 2025 20:26:19 +0900 Subject: [PATCH 10/25] docs: migration guide (#469) Co-authored-by: Alexander Lichter --- config/build-options.md | 17 +- config/dep-optimization-options.md | 25 +- config/shared-options.md | 30 ++- guide/migration.md | 393 ++++++++++++++++++++++++++--- 4 files changed, 402 insertions(+), 63 deletions(-) diff --git a/config/build-options.md b/config/build-options.md index 59282616..858abc4f 100644 --- a/config/build-options.md +++ b/config/build-options.md @@ -129,10 +129,10 @@ In this case, you need to set `build.cssTarget` to `chrome61` to prevent vite fr ## build.cssMinify -- **Type:** `boolean | 'esbuild' | 'lightningcss'` -- **Default:** the same as [`build.minify`](#build-minify) for client, `'esbuild'` for SSR +- **Type:** `boolean | 'lightningcss' | 'esbuild'` +- **Default:** the same as [`build.minify`](#build-minify) for client, `'lightningcss'` for SSR -This option allows users to override CSS minification specifically instead of defaulting to `build.minify`, so you can configure minification for JS and CSS separately. Vite uses `esbuild` by default to minify CSS. Set the option to `'lightningcss'` to use [Lightning CSS](https://lightningcss.dev/minification.html) instead. If selected, it can be configured using [`css.lightningcss`](./shared-options.md#css-lightningcss). +This option allows users to override CSS minification specifically instead of defaulting to `build.minify`, so you can configure minification for JS and CSS separately. Vite uses [Lightning CSS](https://lightningcss.dev/minification.html) by default to minify CSS. It can be configured using [`css.lightningcss`](./shared-options.md#css-lightningcss). Set the option to `'esbuild'` to use esbuild instead. ## build.sourcemap @@ -277,16 +277,19 @@ During the SSR build, static assets aren't emitted as it is assumed they would b ## build.minify -- **Type:** `boolean | 'terser' | 'esbuild'` -- **Default:** `'esbuild'` for client build, `false` for SSR build +- **Type:** `boolean | 'oxc' | 'terser' | 'esbuild'` +- **Default:** `'oxc'` for client build, `false` for SSR build -Set to `false` to disable minification, or specify the minifier to use. The default is [esbuild](https://github.com/evanw/esbuild) which is 20 ~ 40x faster than terser and only 1 ~ 2% worse compression. [Benchmarks](https://github.com/privatenumber/minification-benchmarks) +Set to `false` to disable minification, or specify the minifier to use. The default is [Oxc Minifier](https://oxc.rs/docs/guide/usage/minifier) which is 30 ~ 90x faster than terser and only 0.5 ~ 2% worse compression. [Benchmarks](https://github.com/privatenumber/minification-benchmarks) + +`build.minify: 'esbuild'` is deprecated and will be removed in the future. Note the `build.minify` option does not minify whitespaces when using the `'es'` format in lib mode, as it removes pure annotations and breaks tree-shaking. -Terser must be installed when it is set to `'terser'`. +esbuild or Terser must be installed when it is set to `'esbuild'` or `'terser'` respectively. ```sh +npm add -D esbuild npm add -D terser ``` diff --git a/config/dep-optimization-options.md b/config/dep-optimization-options.md index deddba9e..b22795f0 100644 --- a/config/dep-optimization-options.md +++ b/config/dep-optimization-options.md @@ -51,6 +51,23 @@ export default defineConfig({ }) ``` +## optimizeDeps.rolldownOptions + +- **Type:** [`Omit`](https://www.typescriptlang.org/docs/handbook/utility-types.html#omittype-keys)`<``RolldownOptions`, `'input' | 'logLevel' | 'output'> & { + output?: [`Omit`](https://www.typescriptlang.org/docs/handbook/utility-types.html#omittype-keys)`<` + `RolldownOutputOptions`, + `'format' | 'sourcemap' | 'dir' | 'banner'>` +`}` + + + + +Options to pass to Rolldown during the dep scanning and optimization. + +Certain options are omitted since changing them would not be compatible with Vite's dep optimization. + +- `plugins` are merged with Vite's dep plugin + ## optimizeDeps.esbuildOptions - **Type:** [`Omit`](https://www.typescriptlang.org/docs/handbook/utility-types.html#omittype-keys)`<`[`EsbuildBuildOptions`](https://esbuild.github.io/api/#general-options)`, @@ -64,13 +81,9 @@ export default defineConfig({ | 'outbase' | 'outExtension' | 'metafile'>` +- **Deprecated** -Options to pass to esbuild during the dep scanning and optimization. - -Certain options are omitted since changing them would not be compatible with Vite's dep optimization. - -- `external` is also omitted, use Vite's `optimizeDeps.exclude` option -- `plugins` are merged with Vite's dep plugin +This option is converted to `optimizeDeps.rolldownOptions` internally. Use `optimizeDeps.rolldownOptions` instead. ## optimizeDeps.force diff --git a/config/shared-options.md b/config/shared-options.md index b2da7523..00b2b934 100644 --- a/config/shared-options.md +++ b/config/shared-options.md @@ -353,36 +353,44 @@ If set to `true`, imported JSON will be transformed into `export default JSON.pa If set to `'auto'`, the data will be stringified only if [the data is bigger than 10kB](https://v8.dev/blog/cost-of-javascript-2019#json:~:text=A%20good%20rule%20of%20thumb%20is%20to%20apply%20this%20technique%20for%20objects%20of%2010%20kB%20or%20larger). -## esbuild +## oxc -- **Type:** `ESBuildOptions | false` +- **Type:** `OxcOptions | false` -`ESBuildOptions` extends [esbuild's own transform options](https://esbuild.github.io/api/#transform). The most common use case is customizing JSX: +`OxcOptions` extends [Oxc Transformer's options](https://oxc.rs/docs/guide/usage/transformer). The most common use case is customizing JSX: ```js export default defineConfig({ - esbuild: { - jsxFactory: 'h', - jsxFragment: 'Fragment', + oxc: { + jsx: { + runtime: 'classic', + pragma: 'h', + pragmaFrag: 'Fragment', + }, }, }) ``` -By default, esbuild is applied to `ts`, `jsx` and `tsx` files. You can customize this with `esbuild.include` and `esbuild.exclude`, which can be a regex, a [picomatch](https://github.com/micromatch/picomatch#globbing-features) pattern, or an array of either. +By default, transformation by Oxc is applied to `ts`, `jsx` and `tsx` files. You can customize this with `oxc.include` and `oxc.exclude`, which can be a regex, a [picomatch](https://github.com/micromatch/picomatch#globbing-features) pattern, or an array of either. -In addition, you can also use `esbuild.jsxInject` to automatically inject JSX helper imports for every file transformed by esbuild: +In addition, you can also use `oxc.jsxInject` to automatically inject JSX helper imports for every file transformed by Oxc: ```js export default defineConfig({ - esbuild: { + oxc: { jsxInject: `import React from 'react'`, }, }) ``` -When [`build.minify`](./build-options.md#build-minify) is `true`, all minify optimizations are applied by default. To disable [certain aspects](https://esbuild.github.io/api/#minify) of it, set any of `esbuild.minifyIdentifiers`, `esbuild.minifySyntax`, or `esbuild.minifyWhitespace` options to `false`. Note the `esbuild.minify` option can't be used to override `build.minify`. +Set to `false` to disable transformation by Oxc. + +## esbuild + +- **Type:** `ESBuildOptions | false` +- **Deprecated** -Set to `false` to disable esbuild transforms. +This option is converted to `oxc` option internally. Use `oxc` option instead. ## assetsInclude diff --git a/guide/migration.md b/guide/migration.md index 42daebc4..c2c2d369 100644 --- a/guide/migration.md +++ b/guide/migration.md @@ -1,58 +1,373 @@ -# Migration from v6 +# Migration from v7 -## Node.js Support +## New Features -Vite no longer supports Node.js 18, which reached its EOL. Node.js 20.19+ / 22.12+ is now required. +::: tip Temporary section + +This section will be moved to the release post before the stable release. + +::: + +### Built-in tsconfig `paths` Support + +Vite 8 now has built-in tsconfig `paths` support, thanks to [Oxc Resolver](https://oxc.rs/docs/guide/usage/resolver). This is not enabled by default, because it has a performance cost and is [discouraged by the TypeScript team to use this option to change the behavior of the external tools](https://www.typescriptlang.org/tsconfig/#paths:~:text=Note%20that%20this%20feature%20does%20not%20change%20how%20import%20paths%20are%20emitted%20by%20tsc%2C%20so%20paths%20should%20only%20be%20used%20to%20inform%20TypeScript%20that%20another%20tool%20has%20this%20mapping%20and%20will%20use%20it%20at%20runtime%20or%20when%20bundling.). While having that caveat, you can enable it by setting `resolve.tsconfigPaths` to `true`. + +**_[TODO: fix before stable release] currently this feature only supports basic cases. If the tsconfig.json uses references/include/exclude, it won't work as expected._** + +### `emitDecoratorMetadata` Support + +Vite 8 now has built-in support for TypeScript's [`emitDecoratorMetadata` option](https://www.typescriptlang.org/tsconfig/#emitDecoratorMetadata), thanks to [Oxc Transformer](https://oxc.rs/docs/guide/usage/transformer). If you have `emitDecoratorMetadata` set to `true` in your tsconfig, this feature will be enabled automatically. + +Note that this transformation has some limitations as the full support requires the full type inference by TypeScript compiler, which is not supported. See [Oxc Transformer's documentation](https://oxc.rs/docs/guide/usage/transformer/typescript#decorators) for more details. ## Default Browser Target change -The default browser value of `build.target` is updated to a newer browser. +**_TODO: implement this change later_** -- Chrome 87 → 107 -- Edge 88 → 107 -- Firefox 78 → 104 -- Safari 14.0 → 16.0 +The default browser value of `build.target`, `'baseline-widely-available'`, is updated to a newer browser. -These browser versions align with [Baseline](https://web-platform-dx.github.io/web-features/) Widely Available feature sets as of 2025-05-01. In other words, they were all released before 2022-11-01. +- Chrome 107 → 111 +- Edge 107 → 111 +- Firefox 104 → 114 +- Safari 16.0 → 16.4 -In Vite 5, the default target was named `'modules'`, but this is no longer available. Instead, a new default target `'baseline-widely-available'` is introduced. +These browser versions align with [Baseline](https://web-platform-dx.github.io/web-features/) Widely Available feature sets as of 2026-01-01. In other words, they were all released before 2026-01-01. -## General Changes +## Rolldown Integration + +Vite 8 uses Oxc based tools instead of esbuild and Rollup. + +### Gradual migration + +`rolldown-vite` package implements Vite 7 with Rolldown integration, but without the other Vite 8 changes. This can be used as a intermediate step to migrate to Vite 8. See [the Rolldown Integration guide](https://v7.vite.dev/guide/rolldown) in the Vite 7 docs to switch to `rolldown-vite` from Vite 7. + + + +For users migrating from `rolldown-vite` to Vite 8, you can undo the dependencies changes in `package.json` and update to Vite 8. + +```json +{ + "dependencies": { + "vite": "npm:rolldown-vite@7.2.2" // [!code --] + "vite": "^8.0.0" // [!code ++] + } +} +``` + +### Dependency Optimizer now uses Rolldown + +Rolldown is now used for dependency optimization instead of esbuild. Vite still supports the [`optimizeDeps.esbuildOptions`](/config/dep-optimization-options#optimizedeps-esbuildoptions) option for backward compatibility by converting it to [`optimizeDeps.rolldownOptions`](/config/dep-optimization-options#optimizedeps-rolldownoptions) internally. But `optimizeDeps.esbuildOptions` is deprecated and will be removed in the future and we encourage you to migrate to `optimizeDeps.rolldownOptions`. + +The following options are converted: + +- [`esbuildOptions.minify`](https://esbuild.github.io/api/#minify) -> `rolldownOptions.output.minify` +- [`esbuildOptions.treeShaking`](https://esbuild.github.io/api/#tree-shaking) -> `rolldownOptions.treeshake` +- [`esbuildOptions.define`](https://esbuild.github.io/api/#define) -> `rolldownOptions.transform.define` +- [`esbuildOptions.loader`](https://esbuild.github.io/api/#loader) -> `rolldownOptions.moduleTypes` +- [`esbuildOptions.preserveSymlinks`](https://esbuild.github.io/api/#preserve-symlinks) -> `!rolldownOptions.resolve.symlinks` +- [`esbuildOptions.resolveExtensions`](https://esbuild.github.io/api/#resolve-extensions) -> `rolldownOptions.resolve.extensions` +- [`esbuildOptions.mainFields`](https://esbuild.github.io/api/#main-fields) -> `rolldownOptions.resolve.mainFields` +- [`esbuildOptions.conditions`](https://esbuild.github.io/api/#conditions) -> `rolldownOptions.resolve.conditionNames` +- [`esbuildOptions.keepNames`](https://esbuild.github.io/api/#keep-names) -> `rolldownOptions.output.keepNames` +- [`esbuildOptions.platform`](https://esbuild.github.io/api/#platform) -> `rolldownOptions.platform` +- [`esbuildOptions.plugins`](https://esbuild.github.io/plugins/) -> `rolldownOptions.plugins` (partial support) + + + +You can also get the options set by the compatibility layer from the `configResolved` hook: + +```js +const plugin = { + name: 'log-config', + configResolved(config) { + console.log('options', config.optimizeDeps.esbuildOptions) + }, +}, +``` + +### JS Transformation by Oxc + +Oxc is now used for JS transformation instead of esbuild. Vite still supports the [`esbuild`](/config/shared-options#esbuild) option for backward compatibility by converting it to [`oxc`](/config/shared-options#oxc) internally. But `esbuild` is deprecated and will be removed in the future and we encourage you to migrate to `oxc`. + +The following options are converted: + +- `esbuild.jsxInject` -> `oxc.jsxInject` +- `esbuild.include` -> `oxc.include` +- `esbuild.exclude` -> `oxc.exclude` +- [`esbuild.jsx`](https://esbuild.github.io/api/#jsx) -> [`oxc.jsx`](https://oxc.rs/docs/guide/usage/transformer/jsx) + - `esbuild.jsx: 'preserve'` -> `oxc.jsx: 'preserve'` + - `esbuild.jsx: 'automatic'` -> `oxc.jsx: { runtime: 'automatic' }` + - [`esbuild.jsxImportSource`](https://esbuild.github.io/api/#jsx-import-source) -> `oxc.jsx.importSource` + - `esbuild.jsx: 'transform'` -> `oxc.jsx: { runtime: 'classic' }` + - [`esbuild.jsxFactory`](https://esbuild.github.io/api/#jsx-factory) -> `oxc.jsx.pragma` + - [`esbuild.jsxFragment`](https://esbuild.github.io/api/#jsx-fragment) -> `oxc.jsx.pragmaFrag` + - [`esbuild.jsxDev`](https://esbuild.github.io/api/#jsx-dev) -> `oxc.jsx.development` + - [`esbuild.jsxSideEffects`](https://esbuild.github.io/api/#jsx-side-effects) -> `oxc.jsx.pure` +- [`esbuild.define`](https://esbuild.github.io/api/#define) -> [`oxc.define`](https://oxc.rs/docs/guide/usage/transformer/global-variable-replacement#define) +- [`esbuild.banner`](https://esbuild.github.io/api/#banner) -> custom plugin using transform hook +- [`esbuild.footer`](https://esbuild.github.io/api/#footer) -> custom plugin using transform hook + +[`esbuild.supported`](https://esbuild.github.io/api/#supported) option is not supported by Oxc. If you need these options, please check [oxc-project/oxc#15373](https://github.com/oxc-project/oxc/issues/15373). + +You can also get the options set by the compatibility layer from the `configResolved` hook: + +```js +const plugin = { + name: 'log-config', + configResolved(config) { + console.log('options', config.oxc) + }, +}, +``` + + + +Currently, Oxc transformer does not support lowering native decorators ([oxc-project/oxc#9170](https://github.com/oxc-project/oxc/issues/9170)). + +:::: details Workaround for lowering native decorators + +You can use [Babel](https://babeljs.io/) or [SWC](https://swc.rs/) to lower native decorators for the time being. While SWC is faster than Babel, it does **not support the latest decorator spec** that esbuild supports. + +The decorator spec has been updated multiple times since it reached stage 3 and the versions supported by each tools are (the version names are same with [babel's options](https://babeljs.io/docs/babel-plugin-proposal-decorators#version)): + +- `"2023-11"` (esbuild and TS5.4+ and babel supports this version) +- `"2023-05"` (TS5.2+ supports this version) +- `"2023-01"` (TS5.0+ supports this version) +- `"2022-03"` (SWC supports this version) + +**If you want to use babel:** + +::: code-group + +```bash [npm] +$ npm install -D @rollup/plugin-babel @babel/plugin-proposal-decorators +``` + +```bash [Yarn] +$ yarn add -D @rollup/plugin-babel @babel/plugin-proposal-decorators +``` + +```bash [pnpm] +$ pnpm add -D @rollup/plugin-babel @babel/plugin-proposal-decorators +``` + +```bash [Bun] +$ bun add -D @rollup/plugin-babel @babel/plugin-proposal-decorators +``` + +```bash [Deno] +$ deno add -D npm:@rollup/plugin-babel npm:@babel/plugin-proposal-decorators +``` + +::: + +```ts [vite.config.ts] +import { defineConfig, withFilter } from 'vite' +import { babel } from '@rollup/plugin-babel' + +export default defineConfig({ + plugins: [ + withFilter( + babel({ + configFile: false, + plugins: [ + ['@babel/plugin-proposal-decorators', { version: '2023-11' }], + ], + }), + // only run this transform if the file contains a decorator + { transform: { code: '@' } }, + ), + ], +}) +``` + +**If you want to use SWC:** + +::: code-group + +```bash [npm] +$ npm install -D @rollup/plugin-swc @swc/core +``` + +```bash [Yarn] +$ yarn add -D @rollup/plugin-swc @swc/core +``` + +```bash [pnpm] +$ pnpm add -D @rollup/plugin-swc @swc/core +``` -### Removed Sass legacy API support +```bash [Bun] +$ bun add -D @rollup/plugin-swc @swc/core +``` -As planned, support for the Sass legacy API is removed. Vite now only supports the modern API. You can remove the `css.preprocessorOptions.sass.api` / `css.preprocessorOptions.scss.api` option. +```bash [Deno] +$ deno add -D npm:@rollup/plugin-swc npm:@swc/core +``` + +::: + +```js +import { defineConfig, withFilter } from 'vite' + +export default defineConfig({ + // ... + plugins: [ + withFilter( + swc({ + swc: { + jsc: { + parser: { decorators: true, decoratorsBeforeExport: true }, + // NOTE: SWC doesn't support '2023-11' version yet + transform: { decoratorVersion: '2022-03' }, + }, + }, + }), + // only run this transform if the file contains a decorator + { transform: { code: '@' } }, + ), + ], +}) +``` + +:::: + +Note that if you use a plugin that uses `transformWithEsbuild` function, you need to install `esbuild` as a dev dependency as it's now an optional dependency. `transformWithEsbuild` function is now deprecated and will be removed in the future. We recommend to use the new `transformWithOxc` function instead. + +### JS Minification by Oxc + +Oxc Minifier is now used for JS minification by default instead of esbuild. You can use [`build.minify: 'esbuild'`](/config/build-options#minify) option to switch back to esbuild, but this is deprecated and will be removed in the future. Note that you need to install `esbuild` as a dev dependency as it's now an optional dependency. + +If you were using `esbuild.minify*` options to control the minification behavior, you can use `build.rolldownOptions.output.minify` option instead. If you were using `esbuild.drop` option, you can use [`build.rolldownOptions.output.minify.compress.drop*` options](https://oxc.rs/docs/guide/usage/minifier/dead-code-elimination) instead. + +Property mangling feature is not supported by Oxc and the related options ([`mangleProps`, `reserveProps`, `mangleQuoted`, `mangleCache`](https://esbuild.github.io/api/#mangle-props)) are not supported. If you need these options, please check [oxc-project/oxc#15375](https://github.com/oxc-project/oxc/issues/15375). + +Note that esbuild and Oxc Minifier have a slightly different assumptions about the input code. While this would not affect most projects, you can compare the assumptions if the minifier breaks your code ([esbuild assumptions](https://esbuild.github.io/api/#minify-considerations), [Oxc Minifier assumptions](https://oxc.rs/docs/guide/usage/minifier.html#assumptions)). + +### CSS Minification by Lightning CSS + +[Lightning CSS](https://lightningcss.dev/) is now used for CSS minification by default. You can use [`build.cssMinify: 'esbuild'`](/config/build-options#cssminify) option to switch back to esbuild. Note that you need to install `esbuild` as a dev dependency as it's now an optional dependency. + +Lightning CSS supports more syntax lowering, so you may see a bigger CSS bundle size. + +### Consistent CJS Interop + +The `default` import from a CJS module is now handled in a consistent way. + +If it matches one of the following conditions, the `default` import is the `module.exports` value of the importee CJS module. Otherwise, the `default` import is the `module.exports.default` value of the importee CJS module. + +- The importer is `.mjs` or `.mts` +- The closest `package.json` for the importer has a `type` field set to `module` +- The `module.exports.__esModule` value of the importee CJS module is not set to true + +::: details The previous behaviors + +In dev, if it matches one of the following conditions, the `default` import is the `module.exports` value of the importee CJS module. Otherwise, the `default` import is the `module.exports.default` value of the importee CJS module. + +- _The importer is included in the dependency optimization_ and `.mjs` or `.mts` +- _The importer is included in the dependency optimization_ and the closest `package.json` for the importer has a `type` field set to `module` +- The `module.exports.__esModule` value of the importee CJS module is not set to true + +In build, the conditions were: + +- The `module.exports.__esModule` value of the importee CJS module is not set to true +- _`default` property of `module.exports` does not exist_ + +(assuming [`build.commonjsOptions.defaultIsModuleExports`](https://github.com/rollup/plugins/tree/master/packages/commonjs#defaultismoduleexports) is not changed from the default `'auto'`) + +::: + +See Rolldown's document about this problem for more details: [Ambiguous `default` import from CJS modules - Bundling CJS | Rolldown](https://rolldown.rs/in-depth/bundling-cjs#ambiguous-default-import-from-cjs-modules). + +This change may break some existing code importing CJS modules. You can use the `legacy.inconsistentCjsInterop: true` option to temporary restore the previous behavior. Note that this option will be removed in the future. If you find a package that is affected by this change, please report it to the package author. Make sure to link to the Rolldown document above so that the author can understand the context. + +### Removed Module Resolution Using Format Sniffing + +When both `browser` and `module` fields are present in `package.json`, Vite used to resolve the field based on the content of the file, trying to pick the ESM file for browsers. This was introduced because some packages were using the `module` field to point to ESM files for Node.js and some other packages were using the `browser` field to point to UMD files for browsers. Given that the modern `exports` field solved this problem and is now adopted by many packages, Vite no longer uses this heuristic and always respects the order of the [`resolve.mainFields`](/config/shared-options#resolve-mainfields) option. If you were relying on this behavior, you can use the [`resolve.alias`](/config/shared-options#resolve-alias) option to map the field to the desired file or apply a patch with your package manager (e.g. `patch-package`, `pnpm patch`). + +### Require Calls For Externalized Modules + +`require` calls for externalized modules are now preserved as `require` calls and not converted to `import` statements. This is to preserve the semantics of `require` calls. + +If you want to convert them to `import` statements, you can use Rolldown's built-in `esmExternalRequirePlugin`, which is re-exported from `vite`. + +```js +import { defineConfig, esmExternalRequirePlugin } from 'vite' + +export default defineConfig({ + // ... + plugins: [ + esmExternalRequirePlugin({ + external: ['react', 'vue', /^node:/], + }), + ], +}) +``` + +See Rolldown's document for more details: [`require` external modules - Bundling CJS | Rolldown](https://rolldown.rs/in-depth/bundling-cjs#require-external-modules). + +### `import.meta.url` in UMD / IIFE + +`import.meta.url` is not polyfilled in UMD / IIFE output formats. It will be replaced with `undefined` by default. If you prefer the previous behavior, you can use the `define` option with `build.rolldownOptions.output.intro` option. See Rolldown's document for more details: [Well-known `import.meta` properties - Non ESM Output Formats | Rolldown](https://rolldown.rs/in-depth/non-esm-output-formats#well-known-import-meta-properties). + +### Removed `build.rollupOptions.watch.chokidar` option + +`build.rollupOptions.watch.chokidar` option is removed. Please migrate to `build.rolldownOptions.watch.notify` option. + + + +### Deprecate `build.rollupOptions.output.manualChunks` + +`output.manualChunks` option is deprecated. Rolldown has `advacedChunks` option, which is more flexible. Please migrate to `output.advancedChunks` option. See Rolldown's document for more details about `advancedChunks`: [Advanced Chunks - Rolldown](https://rolldown.rs/in-depth/advanced-chunks). + + + +### Other Related Deprecations + +The following options are deprecated and will be removed in the future: + +- `build.rollupOptions`: renamed to `build.rolldownOptions` +- `worker.rollupOptions`: renamed to `worker.rolldownOptions` + +## General Changes ## Removed deprecated features -- `splitVendorChunkPlugin` (deprecated in v5.2.7) - - This plugin was originally provided to ease migration to Vite v2.9. - - The `build.rollupOptions.output.manualChunks` option can be used to control the chunking behavior if needed. -- Hook-level `enforce` / `transform` for `transformIndexHtml` (deprecated in v4.0.0) - - It was changed to align the interface with [Rollup's object hooks](https://rollupjs.org/plugin-development/#build-hooks:~:text=Instead%20of%20a%20function%2C%20hooks%20can%20also%20be%20objects.). - - `order` should be used instead of `enforce`, and `handler` should be used instead of `transform`. +**_TODO: implement these changes later_** ## Advanced There are other breaking changes which only affect few users. -- [[#19979] chore: declare version range for peer dependencies](https://github.com/vitejs/vite/pull/19979) - - Specified the peer dependencies version range for CSS preprocessors. -- [[#20013] refactor: remove no-op `legacy.proxySsrExternalModules`](https://github.com/vitejs/vite/pull/20013) - - `legacy.proxySsrExternalModules` property had no effect since Vite 6. It is now removed. -- [[#19985] refactor!: remove deprecated no-op type only properties](https://github.com/vitejs/vite/pull/19985) - - The following unused properties are now removed: `ModuleRunnerOptions.root`, `ViteDevServer._importGlobMap`, `ResolvePluginOptions.isFromTsImporter`, `ResolvePluginOptions.getDepsOptimizer`, `ResolvePluginOptions.shouldExternalize`, `ResolvePluginOptions.ssrConfig` -- [[#19986] refactor: remove deprecated env api properties](https://github.com/vitejs/vite/pull/19986) - - These properties were deprecated from the beginning. It is now removed. -- [[#19987] refactor!: remove deprecated `HotBroadcaster` related types](https://github.com/vitejs/vite/pull/19987) - - These types were introduced as part of the now-deprecated Runtime API. It is now removed: `HMRBroadcaster`, `HMRBroadcasterClient`, `ServerHMRChannel`, `HMRChannel` -- [[#19996] fix(ssr)!: don't access `Object` variable in ssr transformed code](https://github.com/vitejs/vite/pull/19996) - - `__vite_ssr_exportName__` is now required for the module runner runtime context. -- [[#20045] fix: treat all `optimizeDeps.entries` values as globs](https://github.com/vitejs/vite/pull/20045) - - `optimizeDeps.entries` now does not receive literal string paths. Instead, it always receives globs. -- [[#20222] feat: apply some middlewares before `configureServer` hook](https://github.com/vitejs/vite/pull/20222), [[#20224] feat: apply some middlewares before `configurePreviewServer` hook](https://github.com/vitejs/vite/pull/20224) - - Some middlewares are now applied before the `configureServer` / `configurePreviewServer` hook. Note that if you don't expect a certain route to apply the [`server.cors`](../config/server-options.md#server-cors) / [`preview.cors`](../config/preview-options.md#preview-cors) option, make sure to remove the related headers from the response. - -## Migration from v5 - -Check the [Migration from v5 Guide](https://v6.vite.dev/guide/migration.html) in the Vite v6 docs first to see the needed changes to port your app to Vite 6, and then proceed with the changes on this page. +- **[TODO: fix before stable release (better if it's fixed before first beta)]** https://github.com/rolldown/rolldown/issues/5867 +- **[TODO: fix before stable release]** https://github.com/rolldown/rolldown/issues/5726 (affects nuxt, qwik) +- **[TODO: fix before stable release]** https://github.com/rolldown/rolldown/issues/3403 (affects sveltekit) +- **[TODO: fix before stable release]** Legacy chunks are emitted as an asset file instead of a chunk file due to the lack of prebuilt chunk emit feature ([rolldown#4304](https://github.com/rolldown/rolldown/issues/4034)). This means the chunk related options does not apply to legacy chunks and the manifest file will not include legacy chunks as a chunk file. +- **[TODO: fix before stable release]** resolver cache breaks minor cases in Vitest ([rolldown-vite#466](https://github.com/vitejs/rolldown-vite/issues/466), [vitest#8754](https://github.com/vitest-dev/vitest/issues/8754#issuecomment-3441115032)) +- **[TODO: fix before stable release]** The resolver does not work with yarn pnp ([rolldown-vite#324](https://github.com/vitejs/rolldown-vite/issues/324), [rolldown-vite#392](https://github.com/vitejs/rolldown-vite/issues/392)) +- **[TODO: fix before stable release]** native plugin ordering issue ([rolldown-vite#373](https://github.com/vitejs/rolldown-vite/issues/373)) +- **[TODO: fix before stable release]** `@vite-ignore` comment edge case ([rolldown-vite#426](https://github.com/vitejs/rolldown-vite/issues/426)) +- **[TODO: fix before stable release]** https://github.com/rolldown/rolldown/issues/3403 +- **[TODO: clarify this here a bit more]** ext glob support ([rolldown-vite#365](https://github.com/vitejs/rolldown-vite/issues/365)) +- `define` does not share reference for objects: When you pass an object as a value to `define`, each variable will have a separate copy of the object. See [Oxc Transformer document](https://oxc.rs/docs/guide/usage/transformer/global-variable-replacement#define) for more details. +- `bundle` object changes (`bundle` is an object passed in `generateBundle` / `writeBundle` hooks, returned by `build` function): + - Assigning to `bundle[foo]` is not supported. This is discouraged by Rollup as well. Please use `this.emitFile()` instead. + - the reference is not shared across the hooks ([rolldown-vite#410](https://github.com/vitejs/rolldown-vite/issues/410)) + - `structuredClone(bundle)` errors with `DataCloneError: # could not be cloned`. This is not supported anymore. Please clone it with `structuredClone({ ...bundle })`. ([rolldown-vite#128](https://github.com/vitejs/rolldown-vite/issues/128)) +- **[TODO: clarify this in Rolldown's docs and link it from here]** All parallel hooks in Rollup works as sequential hooks. +- `"use strict";` is not injected sometimes. See [Rolldown's documentation](https://rolldown.rs/in-depth/directives) for more details. +- Transforming to lower than ES5 with plugin-legacy is not supported ([rolldown-vite#452](https://github.com/vitejs/rolldown-vite/issues/452)) +- Passing the same browser with multiple versions of it to `build.target` option now errors: esbuild selects the latest version of it, which was probably not what you intended. +- Missing support by Rolldown: The following features are not supported by Rolldown and is no longer supported by Vite. + - `build.rollupOptions.output.format: 'system'` ([rolldown#2387](https://github.com/rolldown/rolldown/issues/2387)) + - `build.rollupOptions.output.format: 'amd'` ([rolldown#2387](https://github.com/rolldown/rolldown/issues/2528)) + - Complete support for TypeScript legacy namespace ([oxc-project/oxc#14227](https://github.com/oxc-project/oxc/issues/14227)) + - `shouldTransformCachedModule` hook ([rolldown#4389](https://github.com/rolldown/rolldown/issues/4389)) + - `resolveImportMeta` hook ([rolldown#1010](https://github.com/rolldown/rolldown/issues/1010)) + - `renderDynamicImport` hook ([rolldown#4532](https://github.com/rolldown/rolldown/issues/4532)) + - `resolveFileUrl` hook +- `parseAst` / `parseAstAsync` functions are now deprecated in favor of `parse` / `parseAsync` functions which has more features. + +## Migration from v6 + +Check the [Migration from v6 Guide](https://v7.vite.dev/guide/migration) in the Vite v7 docs first to see the needed changes to port your app to Vite 7, and then proceed with the changes on this page. From b0f2c874074f6942e5f808d356bef1d846759bf0 Mon Sep 17 00:00:00 2001 From: dalaoshu <165626830+shulaoda@users.noreply.github.com> Date: Wed, 26 Nov 2025 18:42:56 +0800 Subject: [PATCH 11/25] feat: update rolldown to 1.0.0-beta.52 (#522) --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 1c978a9a..5a2c2b55 100644 --- a/package.json +++ b/package.json @@ -14,7 +14,7 @@ "feed": "^5.1.0", "gsap": "^3.13.0", "markdown-it-image-size": "^15.0.1", - "oxc-minify": "^0.97.0", + "oxc-minify": "^0.99.0", "vitepress": "^2.0.0-alpha.15", "vitepress-plugin-group-icons": "^1.6.5", "vitepress-plugin-llms": "^1.9.3", From d3e337c4bdb1a3f97f3458effb5e5096063540b4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=BF=A0?= Date: Tue, 2 Dec 2025 15:19:45 +0900 Subject: [PATCH 12/25] docs: update content for beta (#529) --- config/build-options.md | 29 +++++--- config/index.md | 2 +- config/shared-options.md | 4 +- config/worker-options.md | 11 ++- guide/api-javascript.md | 17 +++++ guide/api-plugin.md | 2 + guide/build.md | 20 +++--- guide/cli.md | 142 +++++++++++++++++++------------------- guide/dep-pre-bundling.md | 15 ++-- guide/features.md | 8 +++ guide/migration.md | 51 ++++++++++---- guide/philosophy.md | 2 +- guide/troubleshooting.md | 2 +- plugins/index.md | 10 ++- releases.md | 4 -- 15 files changed, 198 insertions(+), 121 deletions(-) diff --git a/config/build-options.md b/config/build-options.md index 3939261e..4d620a91 100644 --- a/config/build-options.md +++ b/config/build-options.md @@ -12,9 +12,9 @@ Browser compatibility target for the final bundle. The default value is a Vite s Another special value is `'esnext'` - which assumes native dynamic imports support and will only perform minimal transpiling. -The transform is performed with esbuild and the value should be a valid [esbuild target option](https://esbuild.github.io/api/#target). Custom targets can either be an ES version (e.g. `es2015`), a browser with version (e.g. `chrome58`), or an array of multiple target strings. +The transform is performed with Oxc Transformer and the value should be a valid [Oxc Transformer target option](https://oxc.rs/docs/guide/usage/transformer/lowering#target). Custom targets can either be an ES version (e.g. `es2015`), a browser with version (e.g. `chrome58`), or an array of multiple target strings. -Note the build will fail if the code contains features that cannot be safely transpiled by esbuild. See [esbuild docs](https://esbuild.github.io/content-types/#javascript) for more details. +Note the build will output a warning if the code contains features that cannot be safely transpiled by Oxc. See [Oxc docs](https://oxc.rs/docs/guide/usage/transformer/lowering#warnings) for more details. ## build.modulePreload @@ -134,6 +134,12 @@ In this case, you need to set `build.cssTarget` to `chrome61` to prevent vite fr This option allows users to override CSS minification specifically instead of defaulting to `build.minify`, so you can configure minification for JS and CSS separately. Vite uses [Lightning CSS](https://lightningcss.dev/minification.html) by default to minify CSS. It can be configured using [`css.lightningcss`](./shared-options.md#css-lightningcss). Set the option to `'esbuild'` to use esbuild instead. +esbuild must be installed when it is set to `'esbuild'`. + +```sh +npm add -D esbuild +``` + ## build.sourcemap - **Type:** `boolean | 'inline' | 'hidden'` @@ -141,17 +147,20 @@ This option allows users to override CSS minification specifically instead of de Generate production source maps. If `true`, a separate sourcemap file will be created. If `'inline'`, the sourcemap will be appended to the resulting output file as a data URI. `'hidden'` works like `true` except that the corresponding sourcemap comments in the bundled files are suppressed. -## build.rollupOptions +## build.rolldownOptions + +- **Type:** [`RolldownOptions`](https://rollupjs.org/configuration-options/) -- **Type:** [`RollupOptions`](https://rollupjs.org/configuration-options/) + -Directly customize the underlying Rollup bundle. This is the same as options that can be exported from a Rollup config file and will be merged with Vite's internal Rollup options. See [Rollup options docs](https://rollupjs.org/configuration-options/) for more details. +Directly customize the underlying Rolldown bundle. This is the same as options that can be exported from a Rolldown config file and will be merged with Vite's internal Rolldown options. See [Rolldown options docs](https://rollupjs.org/configuration-options/) for more details. -## build.commonjsOptions +## build.rollupOptions -- **Type:** [`RollupCommonJSOptions`](https://github.com/rollup/plugins/tree/master/packages/commonjs#options) +- **Type:** `RolldownOptions` +- **Deprecated** -Options to pass on to [@rollup/plugin-commonjs](https://github.com/rollup/plugins/tree/master/packages/commonjs). +This option is an alias of `build.rolldownOptions` option. Use `build.rolldownOptions` option instead. ## build.dynamicImportVarsOptions @@ -160,6 +169,8 @@ Options to pass on to [@rollup/plugin-commonjs](https://github.com/rollup/plugin Options to pass on to [@rollup/plugin-dynamic-import-vars](https://github.com/rollup/plugins/tree/master/packages/dynamic-import-vars). + + ## build.lib - **Type:** `{ entry: string | string[] | { [entryAlias: string]: string }, name?: string, formats?: ('es' | 'cjs' | 'umd' | 'iife')[], fileName?: string | ((format: ModuleFormat, entryName: string) => string), cssFileName?: string }` @@ -317,6 +328,8 @@ Limit for chunk size warnings (in kB). It is compared against the uncompressed c ## build.watch + + - **Type:** [`WatcherOptions`](https://rollupjs.org/configuration-options/#watch)`| null` - **Default:** `null` diff --git a/config/index.md b/config/index.md index 71f7bdbd..17321316 100644 --- a/config/index.md +++ b/config/index.md @@ -23,7 +23,7 @@ vite --config my-config.js ``` ::: tip CONFIG LOADING -By default, Vite uses `esbuild` to bundle the config into a temporary file and load it. This may cause issues when importing TypeScript files in a monorepo. If you encounter any issues with this approach, you can specify `--configLoader runner` to use the [module runner](/guide/api-environment-runtimes.html#modulerunner) instead, which will not create a temporary config and will transform any files on the fly. Note that module runner doesn't support CJS in config files, but external CJS packages should work as usual. +By default, Vite uses [Rolldown](https://rolldown.rs/) to bundle the config into a temporary file and load it. This may cause issues when importing TypeScript files in a monorepo. If you encounter any issues with this approach, you can specify `--configLoader runner` to use the [module runner](/guide/api-environment-runtimes.html#modulerunner) instead, which will not create a temporary config and will transform any files on the fly. Note that module runner doesn't support CJS in config files, but external CJS packages should work as usual. Alternatively, if you're using an environment that supports TypeScript (e.g. `node --experimental-strip-types`), or if you're only writing plain JavaScript, you can specify `--configLoader native` to use the environment's native runtime to load the config file. Note that updates to modules imported by the config file are not detected and hence would not auto-restart the Vite server. ::: diff --git a/config/shared-options.md b/config/shared-options.md index 00b2b934..23e0808f 100644 --- a/config/shared-options.md +++ b/config/shared-options.md @@ -40,7 +40,7 @@ See [Env Variables and Modes](/guide/env-and-mode) for more details. Define global constant replacements. Entries will be defined as globals during dev and statically replaced during build. -Vite uses [esbuild defines](https://esbuild.github.io/api/#define) to perform replacements, so value expressions must be a string that contains a JSON-serializable value (null, boolean, number, string, array, or object) or a single identifier. For non-string values, Vite will automatically convert it to a string with `JSON.stringify`. +Vite uses [Oxc's define feature](https://oxc.rs/docs/guide/usage/transformer/global-variable-replacement#define) to perform replacements, so value expressions must be a string that contains a JSON-serializable value (null, boolean, number, string, array, or object) or a single identifier. For non-string values, Vite will automatically convert it to a string with `JSON.stringify`. **Example:** @@ -96,6 +96,8 @@ Directory to save cache files. Files in this directory are pre-bundled deps or s Will be passed to `@rollup/plugin-alias` as its [entries option](https://github.com/rollup/plugins/tree/master/packages/alias#entries). Can either be an object, or an array of `{ find, replacement, customResolver }` pairs. + + When aliasing to file system paths, always use absolute paths. Relative alias values will be used as-is and will not be resolved into file system paths. More advanced custom resolution can be achieved through [plugins](/guide/api-plugin). diff --git a/config/worker-options.md b/config/worker-options.md index 91edfe17..dc257c2b 100644 --- a/config/worker-options.md +++ b/config/worker-options.md @@ -18,6 +18,15 @@ The function should return new plugin instances as they are used in parallel rol ## worker.rollupOptions -- **Type:** [`RollupOptions`](https://rollupjs.org/configuration-options/) + + +- **Type:** [`RolldownOptions`](https://rollupjs.org/configuration-options/) Rollup options to build worker bundle. + +## worker.rollupOptions + +- **Type:** `RolldownOptions` +- **Deprecated** + +This option is an alias of `worker.rolldownOptions` option. Use `build.rolldownOptions` option instead. diff --git a/guide/api-javascript.md b/guide/api-javascript.md index 3816a307..a3a87f9e 100644 --- a/guide/api-javascript.md +++ b/guide/api-javascript.md @@ -389,6 +389,21 @@ function normalizePath(id: string): string Normalizes a path to interoperate between Vite plugins. +## `transformWithOxc` + +**Type Signature:** + +```ts +async function transformWithOxc( + code: string, + filename: string, + options?: OxcTransformOptions, + inMap?: object, +): Promise & { warnings: string[] }> +``` + +Transform JavaScript or TypeScript with [Oxc Transformer](https://oxc.rs/docs/guide/usage/transformer). Useful for plugins that prefer matching Vite's internal Oxc Transformer transform. + ## `transformWithEsbuild` **Type Signature:** @@ -402,6 +417,8 @@ async function transformWithEsbuild( ): Promise ``` +**Deprecated:** Use `transformWithOxc` instead. + Transform JavaScript or TypeScript with esbuild. Useful for plugins that prefer matching Vite's internal esbuild transform. ## `loadConfigFromFile` diff --git a/guide/api-plugin.md b/guide/api-plugin.md index d6f79703..e3715749 100644 --- a/guide/api-plugin.md +++ b/guide/api-plugin.md @@ -4,6 +4,8 @@ Vite plugins extends Rollup's well-designed plugin interface with a few extra Vi **It is recommended to go through [Rollup's plugin documentation](https://rollupjs.org/plugin-development/) first before reading the sections below.** + + ## Authoring a Plugin Vite strives to offer established patterns out of the box, so before creating a new plugin make sure that you check the [Features guide](/guide/features) to see if your need is covered. Also review available community plugins, both in the form of a [compatible Rollup plugin](https://github.com/rollup/awesome) and [Vite Specific plugins](https://github.com/vitejs/awesome-vite#plugins) diff --git a/guide/build.md b/guide/build.md index 03fbf649..a71ee013 100644 --- a/guide/build.md +++ b/guide/build.md @@ -50,23 +50,25 @@ If you don't know the base path in advance, you may set a relative base path wit ## Customizing the Build -The build can be customized via various [build config options](/config/build-options.md). Specifically, you can directly adjust the underlying [Rollup options](https://rollupjs.org/configuration-options/) via `build.rollupOptions`: +The build can be customized via various [build config options](/config/build-options.md). Specifically, you can directly adjust the underlying [Rolldown options](https://rollupjs.org/configuration-options/) via `build.rolldownOptions`: + + ```js [vite.config.js] export default defineConfig({ build: { - rollupOptions: { + rolldownOptions: { // https://rollupjs.org/configuration-options/ }, }, }) ``` -For example, you can specify multiple Rollup outputs with plugins that are only applied during build. +For example, you can specify multiple Rolldown outputs with plugins that are only applied during build. ## Chunking Strategy -You can configure how chunks are split using `build.rollupOptions.output.manualChunks` (see [Rollup docs](https://rollupjs.org/configuration-options/#output-manualchunks)). If you use a framework, refer to their documentation for configuring how chunks are split. +You can configure how chunks are split using `build.rolldownOptions.output.advancedChunks` (see [Rolldown docs](https://rolldown.rs/in-depth/advanced-chunks)). If you use a framework, refer to their documentation for configuring how chunks are split. ## Load Error Handling @@ -84,6 +86,8 @@ When a new deployment occurs, the hosting service may delete the assets from pre You can enable rollup watcher with `vite build --watch`. Or, you can directly adjust the underlying [`WatcherOptions`](https://rollupjs.org/configuration-options/#watch) via `build.watch`: + + ```js [vite.config.js] export default defineConfig({ build: { @@ -123,7 +127,7 @@ const __dirname = dirname(fileURLToPath(import.meta.url)) export default defineConfig({ build: { - rollupOptions: { + rolldownOptions: { input: { main: resolve(__dirname, 'index.html'), nested: resolve(__dirname, 'nested/index.html'), @@ -135,7 +139,7 @@ export default defineConfig({ If you specify a different root, remember that `__dirname` will still be the folder of your vite.config.js file when resolving the input paths. Therefore, you will need to add your `root` entry to the arguments for `resolve`. -Note that for HTML files, Vite ignores the name given to the entry in the `rollupOptions.input` object and instead respects the resolved id of the file when generating the HTML asset in the dist folder. This ensures a consistent structure with the way the dev server works. +Note that for HTML files, Vite ignores the name given to the entry in the `rolldownOptions.input` object and instead respects the resolved id of the file when generating the HTML asset in the dist folder. This ensures a consistent structure with the way the dev server works. ## Library Mode @@ -160,7 +164,7 @@ export default defineConfig({ // the proper extensions will be added fileName: 'my-lib', }, - rollupOptions: { + rolldownOptions: { // make sure to externalize deps that shouldn't be bundled // into your library external: ['vue'], @@ -306,7 +310,7 @@ In library mode, all [`import.meta.env.*`](./env-and-mode.md) usage are statical ::: ::: warning Advanced Usage -Library mode includes a simple and opinionated configuration for browser-oriented and JS framework libraries. If you are building non-browser libraries, or require advanced build flows, you can use [Rollup](https://rollupjs.org) or [esbuild](https://esbuild.github.io) directly. +Library mode includes a simple and opinionated configuration for browser-oriented and JS framework libraries. If you are building non-browser libraries, or require advanced build flows, you can use [tsdown](https://tsdown.dev/) or [Rolldown](https://rolldown.rs/) directly. ::: ## Advanced Base Options diff --git a/guide/cli.md b/guide/cli.md index a65b672f..7b6a2eef 100644 --- a/guide/cli.md +++ b/guide/cli.md @@ -14,25 +14,25 @@ vite [root] #### Options -| Options | | -| ------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| `--host [host]` | Specify hostname (`string`) | -| `--port ` | Specify port (`number`) | -| `--open [path]` | Open browser on startup (`boolean \| string`) | -| `--cors` | Enable CORS (`boolean`) | -| `--strictPort` | Exit if specified port is already in use (`boolean`) | -| `--force` | Force the optimizer to ignore the cache and re-bundle (`boolean`) | -| `-c, --config ` | Use specified config file (`string`) | -| `--base ` | Public base path (default: `/`) (`string`) | -| `-l, --logLevel ` | info \| warn \| error \| silent (`string`) | -| `--clearScreen` | Allow/disable clear screen when logging (`boolean`) | -| `--configLoader ` | Use `bundle` to bundle the config with esbuild, or `runner` (experimental) to process it on the fly, or `native` (experimental) to load using the native runtime (default: `bundle`) | -| `--profile` | Start built-in Node.js inspector (check [Performance bottlenecks](/guide/troubleshooting#performance-bottlenecks)) | -| `-d, --debug [feat]` | Show debug logs (`string \| boolean`) | -| `-f, --filter ` | Filter debug logs (`string`) | -| `-m, --mode ` | Set env mode (`string`) | -| `-h, --help` | Display available CLI options | -| `-v, --version` | Display version number | +| Options | | +| ------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `--host [host]` | Specify hostname (`string`) | +| `--port ` | Specify port (`number`) | +| `--open [path]` | Open browser on startup (`boolean \| string`) | +| `--cors` | Enable CORS (`boolean`) | +| `--strictPort` | Exit if specified port is already in use (`boolean`) | +| `--force` | Force the optimizer to ignore the cache and re-bundle (`boolean`) | +| `-c, --config ` | Use specified config file (`string`) | +| `--base ` | Public base path (default: `/`) (`string`) | +| `-l, --logLevel ` | info \| warn \| error \| silent (`string`) | +| `--clearScreen` | Allow/disable clear screen when logging (`boolean`) | +| `--configLoader ` | Use `bundle` to bundle the config with Rolldown, or `runner` (experimental) to process it on the fly, or `native` (experimental) to load using the native runtime (default: `bundle`) | +| `--profile` | Start built-in Node.js inspector (check [Performance bottlenecks](/guide/troubleshooting#performance-bottlenecks)) | +| `-d, --debug [feat]` | Show debug logs (`string \| boolean`) | +| `-f, --filter ` | Filter debug logs (`string`) | +| `-m, --mode ` | Set env mode (`string`) | +| `-h, --help` | Display available CLI options | +| `-v, --version` | Display version number | ## Build @@ -48,30 +48,30 @@ vite build [root] #### Options -| Options | | -| ------------------------------ | ---------------------------------------------------------------------------------------------------------------------- | -| `--target ` | Transpile target (default: `"modules"`) (`string`) | -| `--outDir ` | Output directory (default: `dist`) (`string`) | -| `--assetsDir ` | Directory under outDir to place assets in (default: `"assets"`) (`string`) | -| `--assetsInlineLimit ` | Static asset base64 inline threshold in bytes (default: `4096`) (`number`) | -| `--ssr [entry]` | Build specified entry for server-side rendering (`string`) | -| `--sourcemap [output]` | Output source maps for build (default: `false`) (`boolean \| "inline" \| "hidden"`) | -| `--minify [minifier]` | Enable/disable minification, or specify minifier to use (default: `"esbuild"`) (`boolean \| "terser" \| "esbuild"`) | -| `--manifest [name]` | Emit build manifest json (`boolean \| string`) | -| `--ssrManifest [name]` | Emit ssr manifest json (`boolean \| string`) | -| `--emptyOutDir` | Force empty outDir when it's outside of root (`boolean`) | -| `-w, --watch` | Rebuilds when modules have changed on disk (`boolean`) | -| `-c, --config ` | Use specified config file (`string`) | -| `--base ` | Public base path (default: `/`) (`string`) | -| `-l, --logLevel ` | Info \| warn \| error \| silent (`string`) | -| `--clearScreen` | Allow/disable clear screen when logging (`boolean`) | -| `--configLoader ` | Use `bundle` to bundle the config with esbuild or `runner` (experimental) to process it on the fly (default: `bundle`) | -| `--profile` | Start built-in Node.js inspector (check [Performance bottlenecks](/guide/troubleshooting#performance-bottlenecks)) | -| `-d, --debug [feat]` | Show debug logs (`string \| boolean`) | -| `-f, --filter ` | Filter debug logs (`string`) | -| `-m, --mode ` | Set env mode (`string`) | -| `-h, --help` | Display available CLI options | -| `--app` | Build all environments, same as `builder: {}` (`boolean`, experimental) | +| Options | | +| ------------------------------ | ----------------------------------------------------------------------------------------------------------------------- | +| `--target ` | Transpile target (default: `"modules"`) (`string`) | +| `--outDir ` | Output directory (default: `dist`) (`string`) | +| `--assetsDir ` | Directory under outDir to place assets in (default: `"assets"`) (`string`) | +| `--assetsInlineLimit ` | Static asset base64 inline threshold in bytes (default: `4096`) (`number`) | +| `--ssr [entry]` | Build specified entry for server-side rendering (`string`) | +| `--sourcemap [output]` | Output source maps for build (default: `false`) (`boolean \| "inline" \| "hidden"`) | +| `--minify [minifier]` | Enable/disable minification, or specify minifier to use (default: `"esbuild"`) (`boolean \| "terser" \| "esbuild"`) | +| `--manifest [name]` | Emit build manifest json (`boolean \| string`) | +| `--ssrManifest [name]` | Emit ssr manifest json (`boolean \| string`) | +| `--emptyOutDir` | Force empty outDir when it's outside of root (`boolean`) | +| `-w, --watch` | Rebuilds when modules have changed on disk (`boolean`) | +| `-c, --config ` | Use specified config file (`string`) | +| `--base ` | Public base path (default: `/`) (`string`) | +| `-l, --logLevel ` | Info \| warn \| error \| silent (`string`) | +| `--clearScreen` | Allow/disable clear screen when logging (`boolean`) | +| `--configLoader ` | Use `bundle` to bundle the config with Rolldown or `runner` (experimental) to process it on the fly (default: `bundle`) | +| `--profile` | Start built-in Node.js inspector (check [Performance bottlenecks](/guide/troubleshooting#performance-bottlenecks)) | +| `-d, --debug [feat]` | Show debug logs (`string \| boolean`) | +| `-f, --filter ` | Filter debug logs (`string`) | +| `-m, --mode ` | Set env mode (`string`) | +| `-h, --help` | Display available CLI options | +| `--app` | Build all environments, same as `builder: {}` (`boolean`, experimental) | ## Others @@ -89,18 +89,18 @@ vite optimize [root] #### Options -| Options | | -| ------------------------- | ---------------------------------------------------------------------------------------------------------------------- | -| `--force` | Force the optimizer to ignore the cache and re-bundle (`boolean`) | -| `-c, --config ` | Use specified config file (`string`) | -| `--base ` | Public base path (default: `/`) (`string`) | -| `-l, --logLevel ` | Info \| warn \| error \| silent (`string`) | -| `--clearScreen` | Allow/disable clear screen when logging (`boolean`) | -| `--configLoader ` | Use `bundle` to bundle the config with esbuild or `runner` (experimental) to process it on the fly (default: `bundle`) | -| `-d, --debug [feat]` | Show debug logs (`string \| boolean`) | -| `-f, --filter ` | Filter debug logs (`string`) | -| `-m, --mode ` | Set env mode (`string`) | -| `-h, --help` | Display available CLI options | +| Options | | +| ------------------------- | ----------------------------------------------------------------------------------------------------------------------- | +| `--force` | Force the optimizer to ignore the cache and re-bundle (`boolean`) | +| `-c, --config ` | Use specified config file (`string`) | +| `--base ` | Public base path (default: `/`) (`string`) | +| `-l, --logLevel ` | Info \| warn \| error \| silent (`string`) | +| `--clearScreen` | Allow/disable clear screen when logging (`boolean`) | +| `--configLoader ` | Use `bundle` to bundle the config with Rolldown or `runner` (experimental) to process it on the fly (default: `bundle`) | +| `-d, --debug [feat]` | Show debug logs (`string \| boolean`) | +| `-f, --filter ` | Filter debug logs (`string`) | +| `-m, --mode ` | Set env mode (`string`) | +| `-h, --help` | Display available CLI options | ### `vite preview` @@ -116,19 +116,19 @@ vite preview [root] #### Options -| Options | | -| ------------------------- | ---------------------------------------------------------------------------------------------------------------------- | -| `--host [host]` | Specify hostname (`string`) | -| `--port ` | Specify port (`number`) | -| `--strictPort` | Exit if specified port is already in use (`boolean`) | -| `--open [path]` | Open browser on startup (`boolean \| string`) | -| `--outDir ` | Output directory (default: `dist`)(`string`) | -| `-c, --config ` | Use specified config file (`string`) | -| `--base ` | Public base path (default: `/`) (`string`) | -| `-l, --logLevel ` | Info \| warn \| error \| silent (`string`) | -| `--clearScreen` | Allow/disable clear screen when logging (`boolean`) | -| `--configLoader ` | Use `bundle` to bundle the config with esbuild or `runner` (experimental) to process it on the fly (default: `bundle`) | -| `-d, --debug [feat]` | Show debug logs (`string \| boolean`) | -| `-f, --filter ` | Filter debug logs (`string`) | -| `-m, --mode ` | Set env mode (`string`) | -| `-h, --help` | Display available CLI options | +| Options | | +| ------------------------- | ----------------------------------------------------------------------------------------------------------------------- | +| `--host [host]` | Specify hostname (`string`) | +| `--port ` | Specify port (`number`) | +| `--strictPort` | Exit if specified port is already in use (`boolean`) | +| `--open [path]` | Open browser on startup (`boolean \| string`) | +| `--outDir ` | Output directory (default: `dist`)(`string`) | +| `-c, --config ` | Use specified config file (`string`) | +| `--base ` | Public base path (default: `/`) (`string`) | +| `-l, --logLevel ` | Info \| warn \| error \| silent (`string`) | +| `--clearScreen` | Allow/disable clear screen when logging (`boolean`) | +| `--configLoader ` | Use `bundle` to bundle the config with Rolldown or `runner` (experimental) to process it on the fly (default: `bundle`) | +| `-d, --debug [feat]` | Show debug logs (`string \| boolean`) | +| `-f, --filter ` | Filter debug logs (`string`) | +| `-m, --mode ` | Set env mode (`string`) | +| `-h, --help` | Display available CLI options | diff --git a/guide/dep-pre-bundling.md b/guide/dep-pre-bundling.md index 4a76d2a7..ce5dac20 100644 --- a/guide/dep-pre-bundling.md +++ b/guide/dep-pre-bundling.md @@ -22,12 +22,12 @@ This is Vite performing what we call "dependency pre-bundling". This process ser By pre-bundling `lodash-es` into a single module, we now only need one HTTP request instead! ::: tip NOTE -Dependency pre-bundling only applies in development mode, and uses `esbuild` to convert dependencies to ESM. In production builds, `@rollup/plugin-commonjs` is used instead. +Dependency pre-bundling only applies in development mode. ::: ## Automatic Dependency Discovery -If an existing cache is not found, Vite will crawl your source code and automatically discover dependency imports (i.e. "bare imports" that expect to be resolved from `node_modules`) and use these found imports as entry points for the pre-bundle. The pre-bundling is performed with `esbuild` so it's typically very fast. +If an existing cache is not found, Vite will crawl your source code and automatically discover dependency imports (i.e. "bare imports" that expect to be resolved from `node_modules`) and use these found imports as entry points for the pre-bundle. The pre-bundling is performed with [Rolldown](https://rolldown.rs/) so it's typically very fast. After the server has already started, if a new dependency import is encountered that isn't already in the cache, Vite will re-run the dep bundling process and reload the page if needed. @@ -35,7 +35,7 @@ After the server has already started, if a new dependency import is encountered In a monorepo setup, a dependency may be a linked package from the same repo. Vite automatically detects dependencies that are not resolved from `node_modules` and treats the linked dep as source code. It will not attempt to bundle the linked dep, and will analyze the linked dep's dependency list instead. -However, this requires the linked dep to be exported as ESM. If not, you can add the dependency to [`optimizeDeps.include`](/config/dep-optimization-options.md#optimizedeps-include) and [`build.commonjsOptions.include`](/config/build-options.md#build-commonjsoptions) in your config. +However, this requires the linked dep to be exported as ESM. If not, you can add the dependency to [`optimizeDeps.include`](/config/dep-optimization-options.md#optimizedeps-include) in your config. ```js twoslash [vite.config.js] import { defineConfig } from 'vite' @@ -44,11 +44,6 @@ export default defineConfig({ optimizeDeps: { include: ['linked-dep'], }, - build: { - commonjsOptions: { - include: [/linked-dep/, /node_modules/], - }, - }, }) ``` @@ -62,7 +57,9 @@ A typical use case for `optimizeDeps.include` or `optimizeDeps.exclude` is when Both `include` and `exclude` can be used to deal with this. If the dependency is large (with many internal modules) or is CommonJS, then you should include it; If the dependency is small and is already valid ESM, you can exclude it and let the browser load it directly. -You can further customize esbuild too with the [`optimizeDeps.esbuildOptions` option](/config/dep-optimization-options.md#optimizedeps-esbuildoptions). For example, adding an esbuild plugin to handle special files in dependencies or changing the [build `target`](https://esbuild.github.io/api/#target). +You can further customize esbuild too with the [`optimizeDeps.rolldownOptions` option](/config/dep-optimization-options.md#optimizedeps-rolldownoptions). For example, adding an Rolldown plugin to handle special files in dependencies or changing the [build `target`](https://esbuild.github.io/api/#target). + + ## Caching diff --git a/guide/features.md b/guide/features.md index c7caead3..f3419083 100644 --- a/guide/features.md +++ b/guide/features.md @@ -94,6 +94,14 @@ If `target` in `tsconfig.json` is not `ESNext` or `ES2022` or newer, or if there As such, it is recommended to set `target` to `ESNext` or `ES2022` or newer, or set `useDefineForClassFields` to `true` explicitly when configuring `tsconfig.json`. ::: +#### `paths` + +- [TypeScript documentation](https://www.typescriptlang.org/tsconfig/#paths) + +`resolve.tsconfigPaths: true` can be specified to tell Vite to use the `paths` option in `tsconfig.json` to resolve imports. + +Note that this feature has a performance cost and is [discouraged by the TypeScript team to use this option to change the behavior of the external tools](https://www.typescriptlang.org/tsconfig/#paths:~:text=Note%20that%20this%20feature%20does%20not%20change%20how%20import%20paths%20are%20emitted%20by%20tsc%2C%20so%20paths%20should%20only%20be%20used%20to%20inform%20TypeScript%20that%20another%20tool%20has%20this%20mapping%20and%20will%20use%20it%20at%20runtime%20or%20when%20bundling.). + #### Other Compiler Options Affecting the Build Result - [`extends`](https://www.typescriptlang.org/tsconfig#extends) diff --git a/guide/migration.md b/guide/migration.md index c2c2d369..d0453de9 100644 --- a/guide/migration.md +++ b/guide/migration.md @@ -12,7 +12,7 @@ This section will be moved to the release post before the stable release. Vite 8 now has built-in tsconfig `paths` support, thanks to [Oxc Resolver](https://oxc.rs/docs/guide/usage/resolver). This is not enabled by default, because it has a performance cost and is [discouraged by the TypeScript team to use this option to change the behavior of the external tools](https://www.typescriptlang.org/tsconfig/#paths:~:text=Note%20that%20this%20feature%20does%20not%20change%20how%20import%20paths%20are%20emitted%20by%20tsc%2C%20so%20paths%20should%20only%20be%20used%20to%20inform%20TypeScript%20that%20another%20tool%20has%20this%20mapping%20and%20will%20use%20it%20at%20runtime%20or%20when%20bundling.). While having that caveat, you can enable it by setting `resolve.tsconfigPaths` to `true`. -**_[TODO: fix before stable release] currently this feature only supports basic cases. If the tsconfig.json uses references/include/exclude, it won't work as expected._** +The tsconfig.json in the closest parent directory will be used. For more details about what tsconfig.json is used, see [the Features page](/guide/features#typescript-compiler-options). ### `emitDecoratorMetadata` Support @@ -22,7 +22,7 @@ Note that this transformation has some limitations as the full support requires ## Default Browser Target change -**_TODO: implement this change later_** +**_TODO: This change is not implemented yet, but will be implemented before stable release._** The default browser value of `build.target`, `'baseline-widely-available'`, is updated to a newer browser. @@ -281,6 +281,29 @@ See Rolldown's document about this problem for more details: [Ambiguous `default This change may break some existing code importing CJS modules. You can use the `legacy.inconsistentCjsInterop: true` option to temporary restore the previous behavior. Note that this option will be removed in the future. If you find a package that is affected by this change, please report it to the package author. Make sure to link to the Rolldown document above so that the author can understand the context. +### Module Type Support and Auto Detection + +This change only affects plugin authors. + +Rolldown has an experimental [Module type support](https://rolldown.rs/guide/notable-features#module-types), which is similar to [esbuild's `loader` option](https://esbuild.github.io/api/#loader). Due to this, Rolldown automatically sets a module type based on the extension of the resolved id. + +If you are converting the content to JavaScript from other types in `load` or `transform` hooks, you may need to add `moduleType: 'js'` to the returned value. + +```js +const plugin = { + name: 'txt-loader', + load(id) { + if (id.endsWith('.txt')) { + const content = fs.readFile(id, 'utf-8') + return { + code: `export default ${JSON.stringify(content)}`, + moduleType: 'js', // [!code ++] + } + } + }, +} +``` + ### Removed Module Resolution Using Format Sniffing When both `browser` and `module` fields are present in `package.json`, Vite used to resolve the field based on the content of the file, trying to pick the ESM file for browsers. This was introduced because some packages were using the `module` field to point to ESM files for Node.js and some other packages were using the `browser` field to point to UMD files for browsers. Given that the modern `exports` field solved this problem and is now adopted by many packages, Vite no longer uses this heuristic and always respects the order of the [`resolve.mainFields`](/config/shared-options#resolve-mainfields) option. If you were relying on this behavior, you can use the [`resolve.alias`](/config/shared-options#resolve-alias) option to map the field to the desired file or apply a patch with your package manager (e.g. `patch-package`, `pnpm patch`). @@ -328,33 +351,33 @@ The following options are deprecated and will be removed in the future: - `build.rollupOptions`: renamed to `build.rolldownOptions` - `worker.rollupOptions`: renamed to `worker.rolldownOptions` +- `build.commonjsOptions`: it is now no-op ## General Changes ## Removed deprecated features -**_TODO: implement these changes later_** +**_TODO: This change is not implemented yet, but will be implemented before stable release._** ## Advanced There are other breaking changes which only affect few users. -- **[TODO: fix before stable release (better if it's fixed before first beta)]** https://github.com/rolldown/rolldown/issues/5867 -- **[TODO: fix before stable release]** https://github.com/rolldown/rolldown/issues/5726 (affects nuxt, qwik) -- **[TODO: fix before stable release]** https://github.com/rolldown/rolldown/issues/3403 (affects sveltekit) -- **[TODO: fix before stable release]** Legacy chunks are emitted as an asset file instead of a chunk file due to the lack of prebuilt chunk emit feature ([rolldown#4304](https://github.com/rolldown/rolldown/issues/4034)). This means the chunk related options does not apply to legacy chunks and the manifest file will not include legacy chunks as a chunk file. -- **[TODO: fix before stable release]** resolver cache breaks minor cases in Vitest ([rolldown-vite#466](https://github.com/vitejs/rolldown-vite/issues/466), [vitest#8754](https://github.com/vitest-dev/vitest/issues/8754#issuecomment-3441115032)) -- **[TODO: fix before stable release]** The resolver does not work with yarn pnp ([rolldown-vite#324](https://github.com/vitejs/rolldown-vite/issues/324), [rolldown-vite#392](https://github.com/vitejs/rolldown-vite/issues/392)) -- **[TODO: fix before stable release]** native plugin ordering issue ([rolldown-vite#373](https://github.com/vitejs/rolldown-vite/issues/373)) -- **[TODO: fix before stable release]** `@vite-ignore` comment edge case ([rolldown-vite#426](https://github.com/vitejs/rolldown-vite/issues/426)) -- **[TODO: fix before stable release]** https://github.com/rolldown/rolldown/issues/3403 -- **[TODO: clarify this here a bit more]** ext glob support ([rolldown-vite#365](https://github.com/vitejs/rolldown-vite/issues/365)) +- **[TODO: this will be fixed before stable release]** https://github.com/rolldown/rolldown/issues/5726 (affects nuxt, qwik) +- **[TODO: this will be fixed before stable release]** https://github.com/rolldown/rolldown/issues/3403 (affects sveltekit) +- **[TODO: this will be fixed before stable release]** Legacy chunks are emitted as an asset file instead of a chunk file due to the lack of prebuilt chunk emit feature ([rolldown#4304](https://github.com/rolldown/rolldown/issues/4034)). This means the chunk related options does not apply to legacy chunks and the manifest file will not include legacy chunks as a chunk file. +- **[TODO: this will be fixed before stable release]** resolver cache breaks minor cases in Vitest ([rolldown-vite#466](https://github.com/vitejs/rolldown-vite/issues/466), [vitest#8754](https://github.com/vitest-dev/vitest/issues/8754#issuecomment-3441115032)) +- **[TODO: this will be fixed before stable release]** The resolver does not work with yarn pnp ([rolldown-vite#324](https://github.com/vitejs/rolldown-vite/issues/324), [rolldown-vite#392](https://github.com/vitejs/rolldown-vite/issues/392)) +- **[TODO: this will be fixed before stable release]** native plugin ordering issue ([rolldown-vite#373](https://github.com/vitejs/rolldown-vite/issues/373)) +- **[TODO: this will be fixed before stable release]** `@vite-ignore` comment edge case ([rolldown-vite#426](https://github.com/vitejs/rolldown-vite/issues/426)) +- **[TODO: this will be fixed before stable release]** https://github.com/rolldown/rolldown/issues/3403 +- [Extglobs](https://github.com/micromatch/picomatch/blob/master/README.md#extglobs) are not supported yet ([rolldown-vite#365](https://github.com/vitejs/rolldown-vite/issues/365)) - `define` does not share reference for objects: When you pass an object as a value to `define`, each variable will have a separate copy of the object. See [Oxc Transformer document](https://oxc.rs/docs/guide/usage/transformer/global-variable-replacement#define) for more details. - `bundle` object changes (`bundle` is an object passed in `generateBundle` / `writeBundle` hooks, returned by `build` function): - Assigning to `bundle[foo]` is not supported. This is discouraged by Rollup as well. Please use `this.emitFile()` instead. - the reference is not shared across the hooks ([rolldown-vite#410](https://github.com/vitejs/rolldown-vite/issues/410)) - `structuredClone(bundle)` errors with `DataCloneError: # could not be cloned`. This is not supported anymore. Please clone it with `structuredClone({ ...bundle })`. ([rolldown-vite#128](https://github.com/vitejs/rolldown-vite/issues/128)) -- **[TODO: clarify this in Rolldown's docs and link it from here]** All parallel hooks in Rollup works as sequential hooks. +- All parallel hooks in Rollup works as sequential hooks. See [Rolldown's documentation](https://rolldown.rs/apis/plugin-api#sequential-hook-execution) for more details. - `"use strict";` is not injected sometimes. See [Rolldown's documentation](https://rolldown.rs/in-depth/directives) for more details. - Transforming to lower than ES5 with plugin-legacy is not supported ([rolldown-vite#452](https://github.com/vitejs/rolldown-vite/issues/452)) - Passing the same browser with multiple versions of it to `build.target` option now errors: esbuild selects the latest version of it, which was probably not what you intended. diff --git a/guide/philosophy.md b/guide/philosophy.md index fd2b8668..15b091c7 100644 --- a/guide/philosophy.md +++ b/guide/philosophy.md @@ -16,7 +16,7 @@ When adding new features, these patterns are followed to create a future-proof A ## A Pragmatic Approach to Performance -Vite has been focused on performance since its [origins](./why.md). Its dev server architecture allows HMR that stays fast as projects scale. Vite uses native tools like [esbuild](https://esbuild.github.io/) and [SWC](https://github.com/vitejs/vite-plugin-react/tree/main/packages/plugin-react-swc) to implement intensive tasks but keeps the rest of the code in JS to balance speed with flexibility. When needed, framework plugins will tap into [Babel](https://babeljs.io/) to compile user code. And during build time Vite currently uses [Rollup](https://rollupjs.org/) where bundling size and having access to a wide ecosystem of plugins are more important than raw speed. Vite will continue to evolve internally, using new libraries as they appear to improve DX while keeping its API stable. +Vite has been focused on performance since its [origins](./why.md). Its dev server architecture allows HMR that stays fast as projects scale. Vite is based on native tools that includes [Oxc toolchain](https://oxc.rs/) and [Rolldown](https://rolldown.rs/) to implement intensive tasks but keeps the rest of the code in JS to balance speed with flexibility. When needed, framework plugins will tap into [Babel](https://babeljs.io/) to compile user code. Thanks to Rolldown's Rollup plugin compatibility, Vite has access to a wide ecosystem of plugins. ## Building Frameworks on Top of Vite diff --git a/guide/troubleshooting.md b/guide/troubleshooting.md index d8fc7c27..d83b2f51 100644 --- a/guide/troubleshooting.md +++ b/guide/troubleshooting.md @@ -187,7 +187,7 @@ Note that you cannot retry the dynamic import due to browser limitations ([whatw The error may also occur if the browser extensions (like ad-blockers) are blocking that request. -It might be possible to work around by selecting a different chunk name by [`build.rollupOptions.output.chunkFileNames`](../config/build-options.md#build-rollupoptions), as these extensions often block requests based on file names (e.g. names containing `ad`, `track`). +It might be possible to work around by selecting a different chunk name by [`build.rolldownOptions.output.chunkFileNames`](../config/build-options.md#build-rolldownoptions), as these extensions often block requests based on file names (e.g. names containing `ad`, `track`). ## Optimized Dependencies diff --git a/plugins/index.md b/plugins/index.md index 041e91db..36f25c00 100644 --- a/plugins/index.md +++ b/plugins/index.md @@ -18,11 +18,11 @@ Provides Vue 3 JSX support (via [dedicated Babel transform](https://github.com/v ### [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/tree/main/packages/plugin-react) -Uses esbuild and Babel, achieving fast HMR with a small package footprint and the flexibility of being able to use the Babel transform pipeline. Without additional Babel plugins, only esbuild is used during builds. +Uses [Oxc Transformer](https://oxc.rs/docs/guide/usage/transformer) and [Babel](https://babeljs.io/), achieving fast HMR with a small package footprint and the flexibility of being able to use the Babel transform pipeline. Without additional Babel plugins, only Oxc Transformer is used. ### [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react/tree/main/packages/plugin-react-swc) -Replaces Babel with SWC during development. During production builds, SWC+esbuild are used when using plugins, and esbuild only otherwise. For big projects that don't require non-standard React extensions, cold start and Hot Module Replacement (HMR) can be significantly faster. +Replaces Babel with [SWC](https://swc.rs/) during development. During production builds, SWC+Oxc Transformer are used when using plugins, and Oxc Transformer only otherwise. For big projects that requires custom plugins, cold start and Hot Module Replacement (HMR) can be significantly faster, if the plugin is also available for SWC. ### [@vitejs/plugin-rsc](https://github.com/vitejs/vite-plugin-react/tree/main/packages/plugin-rsc) @@ -42,6 +42,12 @@ Provides legacy browsers support for the production build. Check out [awesome-vite](https://github.com/vitejs/awesome-vite#plugins) - you can also submit a PR to list your plugins there. +## Rolldown Builtin Plugins + +Vite uses [Rolldown](https://rolldown.rs/) under the hood and it provides a few builtin plugins for common use cases. + +Read the [Rolldown Builtin Plugins section](https://rolldown.rs/builtin-plugins/) for more information. + ## Rollup Plugins [Vite plugins](../guide/api-plugin) are an extension of Rollup's plugin interface. Check out the [Rollup Plugin Compatibility section](../guide/api-plugin#rollup-plugin-compatibility) for more information. diff --git a/releases.md b/releases.md index 83271f97..4491eeac 100644 --- a/releases.md +++ b/releases.md @@ -43,10 +43,6 @@ We may ship incompatible changes to TypeScript definitions between minor version - 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. -### esbuild - -[esbuild](https://esbuild.github.io/) is pre-1.0.0 and sometimes it has a breaking change we may need to include to have access to newer features and performance improvements. We may bump the esbuild's version in a Vite Minor. - ### Node.js non-LTS versions Non-LTS Node.js versions (odd-numbered) are not tested as part of Vite's CI, but they should still work before their [EOL](https://endoflife.date/nodejs). From f3375110cf5675ed1c5a4d049a4d0504c72afe3b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=BF=A0?= Date: Tue, 2 Dec 2025 15:21:01 +0900 Subject: [PATCH 13/25] docs: remove rolldown page (#528) --- .vitepress/config.ts | 4 - guide/migration.md | 2 - guide/performance.md | 1 - guide/rolldown.md | 348 ------------------------------------------- public/_redirects | 2 + 5 files changed, 2 insertions(+), 355 deletions(-) delete mode 100644 guide/rolldown.md diff --git a/.vitepress/config.ts b/.vitepress/config.ts index 0b73017a..2190c387 100644 --- a/.vitepress/config.ts +++ b/.vitepress/config.ts @@ -301,10 +301,6 @@ export default defineConfig({ text: 'Performance', link: '/guide/performance', }, - { - text: 'Rolldown', - link: '/guide/rolldown', - }, { text: `Migration from v${viteMajorVersion - 1}`, link: '/guide/migration', diff --git a/guide/migration.md b/guide/migration.md index d0453de9..eff3d6f8 100644 --- a/guide/migration.md +++ b/guide/migration.md @@ -41,8 +41,6 @@ Vite 8 uses Oxc based tools instead of esbuild and Rollup. `rolldown-vite` package implements Vite 7 with Rolldown integration, but without the other Vite 8 changes. This can be used as a intermediate step to migrate to Vite 8. See [the Rolldown Integration guide](https://v7.vite.dev/guide/rolldown) in the Vite 7 docs to switch to `rolldown-vite` from Vite 7. - - For users migrating from `rolldown-vite` to Vite 8, you can undo the dependencies changes in `package.json` and update to Vite 8. ```json diff --git a/guide/performance.md b/guide/performance.md index 702e10fd..790658f8 100644 --- a/guide/performance.md +++ b/guide/performance.md @@ -122,6 +122,5 @@ Examples of using native tooling: Using native tooling often brings larger installation size and as so is not the default when starting a new Vite project. But it may be worth the cost for larger applications. -- Use [Rolldown instead of Rollup and esbuild](./rolldown) for faster builds and a more aligned experience between dev and build. - Try out the experimental support for [LightningCSS](https://github.com/vitejs/vite/discussions/13835) - Use [`@vitejs/plugin-react-swc`](https://github.com/vitejs/vite-plugin-react-swc) in place of `@vitejs/plugin-react`. diff --git a/guide/rolldown.md b/guide/rolldown.md deleted file mode 100644 index 7413c19e..00000000 --- a/guide/rolldown.md +++ /dev/null @@ -1,348 +0,0 @@ -# Rolldown Integration - -Vite is planning to integrate [Rolldown](https://rolldown.rs), a Rust-powered JavaScript bundler, to improve build performance and capabilities. - - - -## What is Rolldown? - -Rolldown is a modern, high-performance JavaScript bundler written in Rust. It's designed as a drop-in replacement for Rollup, aiming to provide significant performance improvements while maintaining compatibility with the existing ecosystem. - -Rolldown focuses on three key principles: - -- **Speed**: Built with Rust for maximum performance -- **Compatibility**: Works with existing Rollup plugins -- **Optimization**: Comes with features that go beyond what esbuild and Rollup implement - -## Why Vite is Migrating to Rolldown - -1. **Unification**: Vite currently uses esbuild for dependency pre-bundling and Rollup for production builds. Rolldown aims to unify these into a single, high-performance bundler that can be used for both purposes, reducing complexity. - -2. **Performance**: Rolldown's Rust-based implementation offers significant performance improvements over JavaScript-based bundlers. While specific benchmarks may vary by project size and complexity, early tests show promising speed increases compared to Rollup. - -3. **Additional Features**: Rolldown introduces features that are not available in Rollup or esbuild, such as advanced chunk splitting control, built-in HMR, and Module Federation. - -For additional insights on the motivations behind Rolldown, see the [reasons why Rolldown is being built](https://rolldown.rs/guide/introduction#why-rolldown). - -## Benefits of Trying `rolldown-vite` - -- Experience significantly faster build times, especially for larger projects -- Provide valuable feedback to help shape the future of Vite's bundling experience -- Prepare your projects for the eventual official Rolldown integration - -## How to Try Rolldown - -The rolldown-powered version of Vite is currently available as a separate package called `rolldown-vite`. If you have `vite` as a direct dependency, you can alias the `vite` package to `rolldown-vite` in your project's `package.json`, which should result in a drop-in replacement. - -```json -{ - "devDependencies": { - "vite": "^7.0.0" // [!code --] - "vite": "npm:rolldown-vite@latest" // [!code ++] - } -} -``` - -::: tip Please pin the version! - -While these examples use `@latest`, we recommend using a specific version number to avoid unexpected breaking changes as [`rolldown-vite` is considered experimental](#versioning-policy). - -::: - -If you use a Vitepress or a meta framework that has Vite as peer dependency, you have to override the `vite` dependency in your `package.json`, which works slightly different depending on your package manager: - -:::code-group - -```json [npm] -{ - "overrides": { - "vite": "npm:rolldown-vite@latest" - } -} -``` - -```json [Yarn] -{ - "resolutions": { - "vite": "npm:rolldown-vite@latest" - } -} -``` - -```json [pnpm] -{ - "pnpm": { - "overrides": { - "vite": "npm:rolldown-vite@latest" - } - } -} -``` - -```json [Bun] -{ - "overrides": { - "vite": "npm:rolldown-vite@latest" - } -} -``` - -::: - -After adding these overrides, reinstall your dependencies and start your development server or build your project as usual. No further configuration changes are required. - -If you are starting a new project, you can use `create-vite` as normal for rolldown-vite, too. The latest version will ask you whether to use `rolldown-vite` or not. - -## Known Limitations - -While Rolldown aims to be a drop-in replacement for Rollup, there are features that are still being implemented and minor intentional behavior differences. For a comprehensive list, please refer to [this GitHub PR](https://github.com/vitejs/rolldown-vite/pull/84#issue-2903144667) which is regularly updated. - -### Option Validation Warnings - -Rolldown outputs an warning when unknown or invalid options are passed. Because some options available in Rollup are not supported by Rolldown, you may encounter warnings based on the options you or the meta framework you use set. Below, you can find an example of such an warning message: - -> Warning validate output options. -> -> - For the "generatedCode". Invalid key: Expected never but received "generatedCode". - -If you don't pass the option in yourself, this must be fixed by the utilized framework. - -### API Differences - -#### `manualChunks` to `advancedChunks` - -While Rolldown has support for the `manualChunks` option that is also exposed by Rollup, it is marked deprecated. Instead of it, Rolldown offers a more fine-grained setting via the [`advancedChunks` option](https://rolldown.rs/in-depth/advanced-chunks), which is more similar to webpack's `splitChunk`: - -```js -// Old configuration (Rollup) -export default { - build: { - rollupOptions: { - output: { - manualChunks(id) { - if (/\/react(?:-dom)?/.test(id)) { - return 'vendor' - } - } - } - } - } -} - -// New configuration (Rolldown) -export default { - build: { - rollupOptions: { - output: { - advancedChunks: { - groups: [{ name: 'vendor', test: /\/react(?:-dom)?/ }] - } - } - } - } -} -``` - -## Performance - -`rolldown-vite` is focused on ensuring compatibility with the existing ecosystem, so defaults are geared towards a smooth transition. You can get further performance gains by switching over to faster Rust-based internal plugins and other customizations. - -### Enabling Native Plugins - -Thanks to Rolldown and Oxc, various internal Vite plugins, such as the alias or resolve plugin, have been converted to Rust. Native plugins are now enabled by default, with the default value set to `'v1'`. - -If you encounter any issues, you can change the `experimental.enableNativePlugin` option in your Vite config to `'resolver'` or `false` as a workaround. Note that this option will be removed in the future. - -### Utilizing Oxc's React refresh transform - -`@vitejs/plugin-react` v5.0.0+ uses Oxc's React refresh transform. If you are not using any Babel plugins (including the React compiler), the full transform would now be done by Oxc and will improve the build performance without any changes other than updating `@vitejs/plugin-react`. - -If you are using `@vitejs/plugin-react-swc` without SWC plugins and custom SWC options, you can switch to the `@vitejs/plugin-react` plugin to utilize Oxc. - -::: details `@vitejs/plugin-react-oxc` plugin is deprecated - -Previously, we recommended using `@vitejs/plugin-react-oxc` to utilize Oxc's React refresh transform. However, we have merged the implementation into `@vitejs/plugin-react` so that it is easier to switch to `rolldown-vite`. `@vitejs/plugin-react-oxc` is now deprecated and will no longer be updated. - -::: - -### `withFilter` Wrapper - -Plugin authors have the option to use the [hook filter feature](#hook-filter-feature) to reduce the communication overhead between the Rust and JavaScript runtimes. -But in case some of the used plugins are not using this feature (yet) but you still want to benefit from it, you can use the `withFilter` wrapper to wrap the plugin with a filter yourself. - -```js -// In your vite.config.ts -import { withFilter, defineConfig } from 'vite' -import svgr from 'vite-plugin-svgr' - -export default defineConfig({ - plugins: [ - // Load the `svgr` plugin only for files which end in `.svg?react` - withFilter( - svgr({ - /*...*/ - }), - { load: { id: /\.svg\?react$/ } }, - ), - ], -}) -``` - -## Reporting Issues - -Since this is an experimental integration, you may encounter issues. If you do, please report them in the [`vitejs/rolldown-vite`](https://github.com/vitejs/rolldown-vite) repository, **not the main Vite repository**. - -When [reporting issues](https://github.com/vitejs/rolldown-vite/issues/new), please follow the appropriate issue template and provide what is requested there, commonly including: - -- A minimal reproduction of the issue -- Your environment details (OS, Node version, package manager) -- Any relevant error messages or logs - -For real-time discussions and troubleshooting, make sure to join the [Rolldown Discord](https://chat.rolldown.rs/). - -## Versioning Policy - -The versioning policy for `rolldown-vite` aligns its major and minor versions with those of the normal Vite package. This synchronization ensures that features present in a specific normal Vite minor release are also included in the corresponding `rolldown-vite` minor release. However, it's important to note that patch versions are not synchronized between the two projects. If you're wondering whether a specific change from normal Vite has been included in `rolldown-vite`, you can always check [`rolldown-vite`'s separate changelog](https://github.com/vitejs/rolldown-vite/blob/rolldown-vite/packages/vite/CHANGELOG.md) for confirmation. - -Furthermore, please be aware that `rolldown-vite` itself is considered experimental. Due to its experimental nature, breaking changes might be introduced even within its patch versions. Additionally, please note that `rolldown-vite` only receives updates for its most recent minor version. Even for important security or bug fixes, patches are not created for older major or minor versions. - -## Future Plans - -The `rolldown-vite` package is a temporary solution to gather feedback and stabilize the Rolldown integration. In the future, this functionality will be merged back into the main Vite repository. - -We encourage you to try out `rolldown-vite` and contribute to its development through feedback and issue reports. - -In the future, we will also introduce a "Full Bundle Mode" for Vite, which will serve bundled files in production _and development mode_. - -### Why introducing a Full Bundle Mode? - -Vite is known for its unbundled dev server approach, which is a main reason for Vite's speed and popularity when it was first introduced. This approach was initially an experiment to see just how far we could push the boundaries of development server performance without traditional bundling. - -However, as projects scale in size and complexity, two main challenges have emerged: - -1. **Development/Production inconsistency**: The unbundled JavaScript served in development versus the bundled production build creates different runtime behaviors. This can lead to issues that only manifest in production, making debugging more difficult. - -2. **Performance degradation during development**: The unbundled approach results in each module being fetched separately, which creates a large number of network requests. While this has _no impact in production_, it causes significant overhead during dev server startup and when refreshing the page in development. The impact is especially noticeable in large applications where hundreds or even thousands of separate requests must be processed. These bottlenecks become even more severe when developers use network proxy, resulting in slower refresh times and degraded developer experience. - -With the Rolldown integration, we have an opportunity to unify the development and production experiences while maintaining Vite's signature performance. A Full Bundle Mode would allow serving bundled files not only in production but also during development, combining the best of both worlds: - -- Fast startup times even for large applications -- Consistent behavior between development and production -- Reduced network overhead on page refreshes -- Maintained efficient HMR on top of ESM output - -When the Full Bundle Mode is introduced, it will be an opt-in feature at first. Similar to the Rolldown integration, we are aiming to make it the default after gathering feedback and ensuring stability. - -## Plugin / Framework Authors Guide - -::: tip -This section is mostly relevant for plugin and framework authors. If you are a user, you can skip this section. -::: - -### Overview of Major Changes - -- Rolldown is used for build (Rollup was used before) -- Rolldown is used for the optimizer (esbuild was used before) -- CommonJS support is handled by Rolldown (@rollup/plugin-commonjs was used before) -- Oxc is used for syntax lowering (esbuild was used before) -- Lightning CSS is used for CSS minification by default (esbuild was used before) -- Oxc minifier is used for JS minification by default (esbuild was used before) -- Rolldown is used for bundling the config (esbuild was used before) - -### Detecting `rolldown-vite` - -::: warning -In most cases, you don't need to detect whether your plugin runs with `rolldown-vite` or `vite` and you should aim for consistent behavior across both, without conditional branching. -::: - -In case you need different behavior with `rolldown-vite`, you have two ways to detect if `rolldown-vite` is used: - -Checking the existence of `this.meta.rolldownVersion`: - -```js -const plugin = { - resolveId() { - if (this.meta.rolldownVersion) { - // logic for rolldown-vite - } else { - // logic for rollup-vite - } - }, -} -``` - -::: tip - -Since Vite 7.0.0, `this.meta` is available in all hooks. In previous versions, `this.meta` was not available in Vite-specific hooks, such as the `config` hook. - -::: - -
- -Checking the existence of the `rolldownVersion` export: - -```js -import * as vite from 'vite' - -if (vite.rolldownVersion) { - // logic for rolldown-vite -} else { - // logic for rollup-vite -} -``` - -If you have `vite` as a dependency (not a peer dependency), the `rolldownVersion` export is useful as it can be used from anywhere in your code. - -### Ignoring option validation in Rolldown - -As [mentioned above](#option-validation-errors), Rolldown outputs a warning when unknown or invalid options are passed. - -This can be fixed by conditionally passing the option by checking whether it's running with `rolldown-vite` as [shown above](#detecting-rolldown-vite). - -### `transformWithEsbuild` requires `esbuild` to be installed separately - -Since Vite itself does not use `esbuild` any more, `esbuild` is now an optional peer dependency. If your plugin uses `transformWithEsbuild`, the plugin needs to add `esbuild` to its dependencies or the user needs to install it manually. - -The recommended migration is to use the newly exported `transformWithOxc` function, which utilizes Oxc instead of `esbuild`. - -### Compatibility layer for `esbuild` options - -Rolldown-Vite has a compatibility layer to convert options for `esbuild` to the respective Oxc or `rolldown` ones. As tested in [the ecosystem-ci](https://github.com/vitejs/vite-ecosystem-ci/blob/rolldown-vite/README-temp.md), this works in many cases, including simple `esbuild` plugins. -That said, **we'll be removing the `esbuild` options support in the future** and encourage you to try the corresponding Oxc or `rolldown` options. -You can get the options set by the compatibility layer from the `configResolved` hook. - -```js -const plugin = { - name: 'log-config', - configResolved(config) { - console.log('options', config.optimizeDeps, config.oxc) - }, -}, -``` - -### Hook filter feature - -Rolldown introduced a [hook filter feature](https://rolldown.rs/apis/plugin-hook-filters) to reduce the communication overhead between the Rust and JavaScript runtimes. This feature allows plugins to specify patterns that determine when hooks should be called, improving performance by avoiding unnecessary hook invocations. - -See the [Hook Filters guide](/guide/api-plugin#hook-filters) for more information. - -### Converting content to JavaScript in `load` or `transform` hooks - -If you are converting the content to JavaScript from other types in `load` or `transform` hooks, you may need to add `moduleType: 'js'` to the returned value. - -```js -const plugin = { - name: 'txt-loader', - load(id) { - if (id.endsWith('.txt')) { - const content = fs.readFile(id, 'utf-8') - return { - code: `export default ${JSON.stringify(content)}`, - moduleType: 'js', // [!code ++] - } - } - }, -} -``` - -This is because [Rolldown supports non-JavaScript modules](https://rolldown.rs/in-depth/module-types) and infers the module type from extensions unless specified. diff --git a/public/_redirects b/public/_redirects index da5acd46..1c62c409 100644 --- a/public/_redirects +++ b/public/_redirects @@ -7,6 +7,8 @@ https://vitejs.dev/* https://vite.dev/:splat 301! /guide/api-vite-environment.html /guide/api-environment 301 /guide/comparisons /guide/why#how-vite-relates-to-other-unbundled-build-tools 301 /guide/comparisons.html /guide/why#how-vite-relates-to-other-unbundled-build-tools 301 +/guide/rolldown https://v7.vite.dev/guide/rolldown 301 +/guide/rolldown.html https://v7.vite.dev/guide/rolldown 301 # llms.txt /*.txt /:splat.md 301 From 21e1d457c8f98e4e11183ef748c4a8c283d1226d Mon Sep 17 00:00:00 2001 From: Christoph Nakazawa Date: Wed, 3 Dec 2025 12:46:18 +0900 Subject: [PATCH 14/25] docs: update migration guide. (#538) --- guide/migration.md | 177 +++++++++++++++++++++++---------------------- 1 file changed, 90 insertions(+), 87 deletions(-) diff --git a/guide/migration.md b/guide/migration.md index eff3d6f8..c0cbc573 100644 --- a/guide/migration.md +++ b/guide/migration.md @@ -10,38 +10,36 @@ This section will be moved to the release post before the stable release. ### Built-in tsconfig `paths` Support -Vite 8 now has built-in tsconfig `paths` support, thanks to [Oxc Resolver](https://oxc.rs/docs/guide/usage/resolver). This is not enabled by default, because it has a performance cost and is [discouraged by the TypeScript team to use this option to change the behavior of the external tools](https://www.typescriptlang.org/tsconfig/#paths:~:text=Note%20that%20this%20feature%20does%20not%20change%20how%20import%20paths%20are%20emitted%20by%20tsc%2C%20so%20paths%20should%20only%20be%20used%20to%20inform%20TypeScript%20that%20another%20tool%20has%20this%20mapping%20and%20will%20use%20it%20at%20runtime%20or%20when%20bundling.). While having that caveat, you can enable it by setting `resolve.tsconfigPaths` to `true`. +Vite 8 now has built-in support for TypeScript's `paths` option, based on [Oxc Resolver](https://oxc.rs/docs/guide/usage/resolver). This feature has a small performance cost and is [discouraged by the TypeScript team](https://www.typescriptlang.org/tsconfig/#paths:~:text=Note%20that%20this%20feature%20does%20not%20change%20how%20import%20paths%20are%20emitted%20by%20tsc%2C%20so%20paths%20should%20only%20be%20used%20to%20inform%20TypeScript%20that%20another%20tool%20has%20this%20mapping%20and%20will%20use%20it%20at%20runtime%20or%20when%20bundling.), so it is not enabled by default. You can enable it by setting `resolve.tsconfigPaths` to `true`. -The tsconfig.json in the closest parent directory will be used. For more details about what tsconfig.json is used, see [the Features page](/guide/features#typescript-compiler-options). +The `tsconfig.json` in the closest parent directory will be used. For more details about resolving `tsconfig.json`, see [the Features page](/guide/features#typescript-compiler-options). ### `emitDecoratorMetadata` Support -Vite 8 now has built-in support for TypeScript's [`emitDecoratorMetadata` option](https://www.typescriptlang.org/tsconfig/#emitDecoratorMetadata), thanks to [Oxc Transformer](https://oxc.rs/docs/guide/usage/transformer). If you have `emitDecoratorMetadata` set to `true` in your tsconfig, this feature will be enabled automatically. +Vite 8 now has built-in support for TypeScript's [`emitDecoratorMetadata` option](https://www.typescriptlang.org/tsconfig/#emitDecoratorMetadata), based on [Oxc Transformer](https://oxc.rs/docs/guide/usage/transformer). This feature will be enabled automatically if you have `emitDecoratorMetadata` set to `true` in your `tsconfig.json`. -Note that this transformation has some limitations as the full support requires the full type inference by TypeScript compiler, which is not supported. See [Oxc Transformer's documentation](https://oxc.rs/docs/guide/usage/transformer/typescript#decorators) for more details. +This transform has some limitations. Full support for decorator metadata requires type inference by the TypeScript compiler, which is not supported. See [Oxc Transformer's documentation](https://oxc.rs/docs/guide/usage/transformer/typescript#decorators) for details. ## Default Browser Target change -**_TODO: This change is not implemented yet, but will be implemented before stable release._** - -The default browser value of `build.target`, `'baseline-widely-available'`, is updated to a newer browser. +The default browser value of `build.target` and `'baseline-widely-available'`, is updated to newer browser version: - Chrome 107 → 111 - Edge 107 → 111 - Firefox 104 → 114 - Safari 16.0 → 16.4 -These browser versions align with [Baseline](https://web-platform-dx.github.io/web-features/) Widely Available feature sets as of 2026-01-01. In other words, they were all released before 2026-01-01. +These browser versions align with [Baseline Widely Available](https://web-platform-dx.github.io/web-features/) feature sets as of 2026-01-01. In other words, they were all released about two and a half years ago. -## Rolldown Integration +## Rolldown -Vite 8 uses Oxc based tools instead of esbuild and Rollup. +Vite 8 uses Rolldown and Oxc based tools instead of esbuild and Rollup. -### Gradual migration +### Gradual Migration -`rolldown-vite` package implements Vite 7 with Rolldown integration, but without the other Vite 8 changes. This can be used as a intermediate step to migrate to Vite 8. See [the Rolldown Integration guide](https://v7.vite.dev/guide/rolldown) in the Vite 7 docs to switch to `rolldown-vite` from Vite 7. +The `rolldown-vite` package implements Vite 7 with Rolldown, without other Vite 8 changes. This can be used as a intermediate step to migrate to Vite 8. See [the Rolldown Integration guide](https://v7.vite.dev/guide/rolldown) in the Vite 7 docs to switch to `rolldown-vite` from Vite 7. -For users migrating from `rolldown-vite` to Vite 8, you can undo the dependencies changes in `package.json` and update to Vite 8. +For users migrating from `rolldown-vite` to Vite 8, you can undo the dependency changes in `package.json` and update to Vite 8: ```json { @@ -54,9 +52,9 @@ For users migrating from `rolldown-vite` to Vite 8, you can undo the dependencie ### Dependency Optimizer now uses Rolldown -Rolldown is now used for dependency optimization instead of esbuild. Vite still supports the [`optimizeDeps.esbuildOptions`](/config/dep-optimization-options#optimizedeps-esbuildoptions) option for backward compatibility by converting it to [`optimizeDeps.rolldownOptions`](/config/dep-optimization-options#optimizedeps-rolldownoptions) internally. But `optimizeDeps.esbuildOptions` is deprecated and will be removed in the future and we encourage you to migrate to `optimizeDeps.rolldownOptions`. +Rolldown is now used for dependency optimization instead of esbuild. Vite still supports [`optimizeDeps.esbuildOptions`](/config/dep-optimization-options#optimizedeps-esbuildoptions) for backward compatibility by converting it to [`optimizeDeps.rolldownOptions`](/config/dep-optimization-options#optimizedeps-rolldownoptions) automatically. `optimizeDeps.esbuildOptions` is now deprecated and will be removed in the future and we encourage you to migrate to `optimizeDeps.rolldownOptions`. -The following options are converted: +The following options are converted automatically: - [`esbuildOptions.minify`](https://esbuild.github.io/api/#minify) -> `rolldownOptions.output.minify` - [`esbuildOptions.treeShaking`](https://esbuild.github.io/api/#tree-shaking) -> `rolldownOptions.treeshake` @@ -72,22 +70,22 @@ The following options are converted: -You can also get the options set by the compatibility layer from the `configResolved` hook: +You can get the options set by the compatibility layer from the `configResolved` hook: ```js const plugin = { name: 'log-config', configResolved(config) { - console.log('options', config.optimizeDeps.esbuildOptions) + console.log('options', config.optimizeDeps.rolldownOptions) }, }, ``` -### JS Transformation by Oxc +### JavaScript Transforms by Oxc -Oxc is now used for JS transformation instead of esbuild. Vite still supports the [`esbuild`](/config/shared-options#esbuild) option for backward compatibility by converting it to [`oxc`](/config/shared-options#oxc) internally. But `esbuild` is deprecated and will be removed in the future and we encourage you to migrate to `oxc`. +Oxc is now used for JavaScript transformation instead of esbuild. Vite still supports the [`esbuild`](/config/shared-options#esbuild) option for backward compatibility by converting it to [`oxc`](/config/shared-options#oxc) automatically. `esbuild` is now deprecated and will be removed in the future and we encourage you to migrate to `oxc`. -The following options are converted: +The following options are converted automatically: - `esbuild.jsxInject` -> `oxc.jsxInject` - `esbuild.include` -> `oxc.include` @@ -105,9 +103,9 @@ The following options are converted: - [`esbuild.banner`](https://esbuild.github.io/api/#banner) -> custom plugin using transform hook - [`esbuild.footer`](https://esbuild.github.io/api/#footer) -> custom plugin using transform hook -[`esbuild.supported`](https://esbuild.github.io/api/#supported) option is not supported by Oxc. If you need these options, please check [oxc-project/oxc#15373](https://github.com/oxc-project/oxc/issues/15373). +The [`esbuild.supported`](https://esbuild.github.io/api/#supported) option is not supported by Oxc. If you need this option, please see [oxc-project/oxc#15373](https://github.com/oxc-project/oxc/issues/15373). -You can also get the options set by the compatibility layer from the `configResolved` hook: +You can get the options set by the compatibility layer from the `configResolved` hook: ```js const plugin = { @@ -120,20 +118,22 @@ const plugin = { -Currently, Oxc transformer does not support lowering native decorators ([oxc-project/oxc#9170](https://github.com/oxc-project/oxc/issues/9170)). +Currently, the Oxc transformer does not support lowering native decorators as we are waiting for the specification to progress, see ([oxc-project/oxc#9170](https://github.com/oxc-project/oxc/issues/9170)). :::: details Workaround for lowering native decorators You can use [Babel](https://babeljs.io/) or [SWC](https://swc.rs/) to lower native decorators for the time being. While SWC is faster than Babel, it does **not support the latest decorator spec** that esbuild supports. -The decorator spec has been updated multiple times since it reached stage 3 and the versions supported by each tools are (the version names are same with [babel's options](https://babeljs.io/docs/babel-plugin-proposal-decorators#version)): +The decorator spec has been updated multiple times since it reached stage 3. The versions supported by each tool are: -- `"2023-11"` (esbuild and TS5.4+ and babel supports this version) -- `"2023-05"` (TS5.2+ supports this version) -- `"2023-01"` (TS5.0+ supports this version) +- `"2023-11"` (esbuild, TypeScript 5.4+ and Babel support this version) +- `"2023-05"` (TypeScript 5.2+ supports this version) +- `"2023-01"` (TypeScript 5.0+ supports this version) - `"2022-03"` (SWC supports this version) -**If you want to use babel:** +See the [Babel decorators versions guide](https://babeljs.io/docs/babel-plugin-proposal-decorators#version) for differences between each version. + +**Using Babel:** ::: code-group @@ -172,14 +172,14 @@ export default defineConfig({ ['@babel/plugin-proposal-decorators', { version: '2023-11' }], ], }), - // only run this transform if the file contains a decorator + // Only run this transform if the file contains a decorator. { transform: { code: '@' } }, ), ], }) ``` -**If you want to use SWC:** +**Using SWC:** ::: code-group @@ -216,12 +216,12 @@ export default defineConfig({ swc: { jsc: { parser: { decorators: true, decoratorsBeforeExport: true }, - // NOTE: SWC doesn't support '2023-11' version yet + // NOTE: SWC doesn't support the '2023-11' version yet. transform: { decoratorVersion: '2022-03' }, }, }, }), - // only run this transform if the file contains a decorator + // Only run this transform if the file contains a decorator. { transform: { code: '@' } }, ), ], @@ -230,87 +230,69 @@ export default defineConfig({ :::: -Note that if you use a plugin that uses `transformWithEsbuild` function, you need to install `esbuild` as a dev dependency as it's now an optional dependency. `transformWithEsbuild` function is now deprecated and will be removed in the future. We recommend to use the new `transformWithOxc` function instead. +#### esbuild Fallbacks + +`esbuild` is no longer directly used by Vite and is now an optional dependency. If you are using a plugin that uses the `transformWithEsbuild` function, you need to install `esbuild` as a `devDependency`. The `transformWithEsbuild` function is deprecated and will be removed in the future. We recommend migrating to the new `transformWithOxc` function instead. + +### JavaScript Minification by Oxc + +The Oxc Minifier is now used for JavaScript minification instead of esbuild. You can use the deprecated [`build.minify: 'esbuild'`](/config/build-options#minify) option to switch back to esbuild. This configuration option will be removed in the future and you need install `esbuild` as a `devDependency` as Vite no longer relies on esbuild directly. -### JS Minification by Oxc +If you were using the `esbuild.minify*` options to control minification behavior, you can now use `build.rolldownOptions.output.minify` instead. If you were using the `esbuild.drop` option, you can now use [`build.rolldownOptions.output.minify.compress.drop*` options](https://oxc.rs/docs/guide/usage/minifier/dead-code-elimination). -Oxc Minifier is now used for JS minification by default instead of esbuild. You can use [`build.minify: 'esbuild'`](/config/build-options#minify) option to switch back to esbuild, but this is deprecated and will be removed in the future. Note that you need to install `esbuild` as a dev dependency as it's now an optional dependency. +Property mangling and its related options ([`mangleProps`, `reserveProps`, `mangleQuoted`, `mangleCache`](https://esbuild.github.io/api/#mangle-props)) are not supported by Oxc. If you need these options, please see [oxc-project/oxc#15375](https://github.com/oxc-project/oxc/issues/15375). -If you were using `esbuild.minify*` options to control the minification behavior, you can use `build.rolldownOptions.output.minify` option instead. If you were using `esbuild.drop` option, you can use [`build.rolldownOptions.output.minify.compress.drop*` options](https://oxc.rs/docs/guide/usage/minifier/dead-code-elimination) instead. +esbuild and Oxc Minifier make slightly different assumptions about source code. In case you suspect the minifier is causing breakage in your code, you can compare these assumptions here: -Property mangling feature is not supported by Oxc and the related options ([`mangleProps`, `reserveProps`, `mangleQuoted`, `mangleCache`](https://esbuild.github.io/api/#mangle-props)) are not supported. If you need these options, please check [oxc-project/oxc#15375](https://github.com/oxc-project/oxc/issues/15375). +- [esbuild minify assumptions](https://esbuild.github.io/api/#minify-considerations) +- [Oxc Minifier assumptions](https://oxc.rs/docs/guide/usage/minifier.html#assumptions) -Note that esbuild and Oxc Minifier have a slightly different assumptions about the input code. While this would not affect most projects, you can compare the assumptions if the minifier breaks your code ([esbuild assumptions](https://esbuild.github.io/api/#minify-considerations), [Oxc Minifier assumptions](https://oxc.rs/docs/guide/usage/minifier.html#assumptions)). +Please report any issues you find related to minification in your JavaScript apps. ### CSS Minification by Lightning CSS -[Lightning CSS](https://lightningcss.dev/) is now used for CSS minification by default. You can use [`build.cssMinify: 'esbuild'`](/config/build-options#cssminify) option to switch back to esbuild. Note that you need to install `esbuild` as a dev dependency as it's now an optional dependency. +[Lightning CSS](https://lightningcss.dev/) is now used for CSS minification by default. You can use the [`build.cssMinify: 'esbuild'`](/config/build-options#cssminify) option to switch back to esbuild. Note that you need to install `esbuild` as a `devDependency`. -Lightning CSS supports more syntax lowering, so you may see a bigger CSS bundle size. +Lightning CSS supports better syntax lowering and your CSS bundle size might increase slightly. -### Consistent CJS Interop +### Consistent CommonJS Interop -The `default` import from a CJS module is now handled in a consistent way. +The `default` import from a CommonJS (CJS) module is now handled in a consistent way. -If it matches one of the following conditions, the `default` import is the `module.exports` value of the importee CJS module. Otherwise, the `default` import is the `module.exports.default` value of the importee CJS module. +If it matches one of the following conditions, the `default` import is the `module.exports` value of the importee CJS module. Otherwise, the `default` import is the `module.exports.default` value of the importee CJS module: -- The importer is `.mjs` or `.mts` -- The closest `package.json` for the importer has a `type` field set to `module` -- The `module.exports.__esModule` value of the importee CJS module is not set to true +- The importer is `.mjs` or `.mts`. +- The closest `package.json` for the importer has a `type` field set to `module`. +- The `module.exports.__esModule` value of the importee CJS module is not set to true. -::: details The previous behaviors +::: details The previous behavior -In dev, if it matches one of the following conditions, the `default` import is the `module.exports` value of the importee CJS module. Otherwise, the `default` import is the `module.exports.default` value of the importee CJS module. +In development, if it matches one of the following conditions, the `default` import is the `module.exports` value of the importee CJS module. Otherwise, the `default` import is the `module.exports.default` value of the importee CJS module: -- _The importer is included in the dependency optimization_ and `.mjs` or `.mts` -- _The importer is included in the dependency optimization_ and the closest `package.json` for the importer has a `type` field set to `module` -- The `module.exports.__esModule` value of the importee CJS module is not set to true +- _The importer is included in the dependency optimization_ and `.mjs` or `.mts`. +- _The importer is included in the dependency optimization_ and the closest `package.json` for the importer has a `type` field set to `module`. +- The `module.exports.__esModule` value of the importee CJS module is not set to true. In build, the conditions were: -- The `module.exports.__esModule` value of the importee CJS module is not set to true -- _`default` property of `module.exports` does not exist_ +- The `module.exports.__esModule` value of the importee CJS module is not set to true. +- _`default` property of `module.exports` does not exist_. (assuming [`build.commonjsOptions.defaultIsModuleExports`](https://github.com/rollup/plugins/tree/master/packages/commonjs#defaultismoduleexports) is not changed from the default `'auto'`) ::: -See Rolldown's document about this problem for more details: [Ambiguous `default` import from CJS modules - Bundling CJS | Rolldown](https://rolldown.rs/in-depth/bundling-cjs#ambiguous-default-import-from-cjs-modules). - -This change may break some existing code importing CJS modules. You can use the `legacy.inconsistentCjsInterop: true` option to temporary restore the previous behavior. Note that this option will be removed in the future. If you find a package that is affected by this change, please report it to the package author. Make sure to link to the Rolldown document above so that the author can understand the context. - -### Module Type Support and Auto Detection - -This change only affects plugin authors. - -Rolldown has an experimental [Module type support](https://rolldown.rs/guide/notable-features#module-types), which is similar to [esbuild's `loader` option](https://esbuild.github.io/api/#loader). Due to this, Rolldown automatically sets a module type based on the extension of the resolved id. - -If you are converting the content to JavaScript from other types in `load` or `transform` hooks, you may need to add `moduleType: 'js'` to the returned value. +See Rolldown's docs about this problem for more details: [Ambiguous `default` import from CJS modules - Bundling CJS | Rolldown](https://rolldown.rs/in-depth/bundling-cjs#ambiguous-default-import-from-cjs-modules). -```js -const plugin = { - name: 'txt-loader', - load(id) { - if (id.endsWith('.txt')) { - const content = fs.readFile(id, 'utf-8') - return { - code: `export default ${JSON.stringify(content)}`, - moduleType: 'js', // [!code ++] - } - } - }, -} -``` +This change may break some existing code importing CJS modules. You can use the deprecated `legacy.inconsistentCjsInterop: true` option to temporarily restore the previous behavior. If you find a package that is affected by this change, please report it to the package author or send them a pull request. Make sure to link to the Rolldown document above so that the author can understand the context. ### Removed Module Resolution Using Format Sniffing -When both `browser` and `module` fields are present in `package.json`, Vite used to resolve the field based on the content of the file, trying to pick the ESM file for browsers. This was introduced because some packages were using the `module` field to point to ESM files for Node.js and some other packages were using the `browser` field to point to UMD files for browsers. Given that the modern `exports` field solved this problem and is now adopted by many packages, Vite no longer uses this heuristic and always respects the order of the [`resolve.mainFields`](/config/shared-options#resolve-mainfields) option. If you were relying on this behavior, you can use the [`resolve.alias`](/config/shared-options#resolve-alias) option to map the field to the desired file or apply a patch with your package manager (e.g. `patch-package`, `pnpm patch`). +When both `browser` and `module` fields are present in `package.json`, Vite used to resolve the field based on the content of the file and it used to pick the ESM file for browsers. This was introduced because some packages were using the `module` field to point to ESM files for Node.js and some other packages were using the `browser` field to point to UMD files for browsers. Given that the modern `exports` field solved this problem and is now adopted by many packages, Vite no longer uses this heuristic and always respects the order of the [`resolve.mainFields`](/config/shared-options#resolve-mainfields) option. If you were relying on this behavior, you can use the [`resolve.alias`](/config/shared-options#resolve-alias) option to map the field to the desired file or apply a patch with your package manager (e.g. `patch-package`, `pnpm patch`). ### Require Calls For Externalized Modules -`require` calls for externalized modules are now preserved as `require` calls and not converted to `import` statements. This is to preserve the semantics of `require` calls. - -If you want to convert them to `import` statements, you can use Rolldown's built-in `esmExternalRequirePlugin`, which is re-exported from `vite`. +`require` calls for externalized modules are now preserved as `require` calls and not converted to `import` statements. This is to preserve the semantics of `require` calls. If you want to convert them to `import` statements, you can use Rolldown's built-in `esmExternalRequirePlugin`, which is re-exported from `vite`. ```js import { defineConfig, esmExternalRequirePlugin } from 'vite' @@ -325,24 +307,45 @@ export default defineConfig({ }) ``` -See Rolldown's document for more details: [`require` external modules - Bundling CJS | Rolldown](https://rolldown.rs/in-depth/bundling-cjs#require-external-modules). +See Rolldown's docs for more details: [`require` external modules - Bundling CJS | Rolldown](https://rolldown.rs/in-depth/bundling-cjs#require-external-modules). ### `import.meta.url` in UMD / IIFE -`import.meta.url` is not polyfilled in UMD / IIFE output formats. It will be replaced with `undefined` by default. If you prefer the previous behavior, you can use the `define` option with `build.rolldownOptions.output.intro` option. See Rolldown's document for more details: [Well-known `import.meta` properties - Non ESM Output Formats | Rolldown](https://rolldown.rs/in-depth/non-esm-output-formats#well-known-import-meta-properties). +`import.meta.url` is no longer polyfilled in UMD / IIFE output formats. It will be replaced with `undefined` by default. If you prefer the previous behavior, you can use the `define` option with `build.rolldownOptions.output.intro` option. See Rolldown's docs for more details: [Well-known `import.meta` properties - Non ESM Output Formats | Rolldown](https://rolldown.rs/in-depth/non-esm-output-formats#well-known-import-meta-properties). ### Removed `build.rollupOptions.watch.chokidar` option -`build.rollupOptions.watch.chokidar` option is removed. Please migrate to `build.rolldownOptions.watch.notify` option. +The `build.rollupOptions.watch.chokidar` option was removed. Please migrate to the `build.rolldownOptions.watch.notify` option. ### Deprecate `build.rollupOptions.output.manualChunks` -`output.manualChunks` option is deprecated. Rolldown has `advacedChunks` option, which is more flexible. Please migrate to `output.advancedChunks` option. See Rolldown's document for more details about `advancedChunks`: [Advanced Chunks - Rolldown](https://rolldown.rs/in-depth/advanced-chunks). +The `output.manualChunks` option is deprecated. Rolldown has the more flexible `advancedChunks` option. See Rolldown's docs for more details about `advancedChunks`: [Advanced Chunks - Rolldown](https://rolldown.rs/in-depth/advanced-chunks). +### Module Type Support and Auto Detection + +_This change only affects plugin authors._ + +Rolldown has experimental support for [Module types](https://rolldown.rs/guide/notable-features#module-types), similar to [esbuild's `loader` option](https://esbuild.github.io/api/#loader). Due to this, Rolldown automatically sets a module type based on the extension of the resolved id. If you are converting content from other module types to JavaScript in `load` or `transform` hooks, you may need to add `moduleType: 'js'` to the returned value: + +```js +const plugin = { + name: 'txt-loader', + load(id) { + if (id.endsWith('.txt')) { + const content = fs.readFile(id, 'utf-8') + return { + code: `export default ${JSON.stringify(content)}`, + moduleType: 'js', // [!code ++] + } + } + }, +} +``` + ### Other Related Deprecations The following options are deprecated and will be removed in the future: @@ -359,7 +362,7 @@ The following options are deprecated and will be removed in the future: ## Advanced -There are other breaking changes which only affect few users. +These breaking changes are expected to only affect a minority of use cases: - **[TODO: this will be fixed before stable release]** https://github.com/rolldown/rolldown/issues/5726 (affects nuxt, qwik) - **[TODO: this will be fixed before stable release]** https://github.com/rolldown/rolldown/issues/3403 (affects sveltekit) From bf15e077808be28708c6be2f1effc17a6bf1460e Mon Sep 17 00:00:00 2001 From: dalaoshu <165626830+shulaoda@users.noreply.github.com> Date: Wed, 3 Dec 2025 15:18:08 +0800 Subject: [PATCH 15/25] feat: update rolldown to 1.0.0-beta.53 (#537) Co-authored-by: sapphi-red <49056869+sapphi-red@users.noreply.github.com> --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index ad2681e7..da7be657 100644 --- a/package.json +++ b/package.json @@ -14,7 +14,7 @@ "feed": "^5.1.0", "gsap": "^3.13.0", "markdown-it-image-size": "^15.0.1", - "oxc-minify": "^0.99.0", + "oxc-minify": "^0.101.0", "vitepress": "^2.0.0-alpha.15", "vitepress-plugin-group-icons": "^1.6.5", "vitepress-plugin-llms": "^1.9.3", From 283a277805ba0e5886d6ddc21786626fce1f8258 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=BF=A0?= Date: Wed, 3 Dec 2025 17:05:06 +0900 Subject: [PATCH 16/25] feat!: update default browser target (#21193) --- config/build-options.md | 2 +- guide/build.md | 8 ++++---- guide/index.md | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/config/build-options.md b/config/build-options.md index 4d620a91..1a837b32 100644 --- a/config/build-options.md +++ b/config/build-options.md @@ -8,7 +8,7 @@ Unless noted, the options in this section are only applied to build. - **Default:** `'baseline-widely-available'` - **Related:** [Browser Compatibility](/guide/build#browser-compatibility) -Browser compatibility target for the final bundle. The default value is a Vite special value, `'baseline-widely-available'`, which targets browsers that are included in the [Baseline](https://web-platform-dx.github.io/web-features/) Widely Available on 2025-05-01. Specifically, it is `['chrome107', 'edge107', 'firefox104', 'safari16']`. +Browser compatibility target for the final bundle. The default value is a Vite special value, `'baseline-widely-available'`, which targets browsers that are included in the [Baseline](https://web-platform-dx.github.io/web-features/) Widely Available on 2026-01-01. Specifically, it is `['chrome111', 'edge111', 'firefox114', 'safari16.4']`. Another special value is `'esnext'` - which assumes native dynamic imports support and will only perform minimal transpiling. diff --git a/guide/build.md b/guide/build.md index a71ee013..66da5281 100644 --- a/guide/build.md +++ b/guide/build.md @@ -8,10 +8,10 @@ By default, the production bundle assumes a modern browser that is included in t -- Chrome >=107 -- Edge >=107 -- Firefox >=104 -- Safari >=16 +- Chrome >=111 +- Edge >=111 +- Firefox >=114 +- Safari >=16.4 You can specify custom targets via the [`build.target` config option](/config/build-options.md#build-target), where the lowest target is `es2015`. If a lower target is set, Vite will still require these minimum browser support ranges as it relies on [native ESM dynamic import](https://caniuse.com/es6-module-dynamic-import), and [`import.meta`](https://caniuse.com/mdn-javascript_operators_import_meta): diff --git a/guide/index.md b/guide/index.md index 841d77d6..eedc92f9 100644 --- a/guide/index.md +++ b/guide/index.md @@ -20,7 +20,7 @@ You can learn more about the rationale behind the project in the [Why Vite](./wh ## Browser Support -During development, Vite assumes that a modern browser is used. This means the browser supports most of the latest JavaScript and CSS features. For that reason, Vite sets [`esnext` as the transform target](https://esbuild.github.io/api/#target). This prevents syntax lowering, letting Vite serve modules as close as possible to the original source code. Vite injects some runtime code to make the development server work. These code use features included in [Baseline](https://web-platform-dx.github.io/web-features/) Newly Available at the time of each major release (2025-05-01 for this major). +During development, Vite assumes that a modern browser is used. This means the browser supports most of the latest JavaScript and CSS features. For that reason, Vite sets [`esnext` as the transform target](https://esbuild.github.io/api/#target). This prevents syntax lowering, letting Vite serve modules as close as possible to the original source code. Vite injects some runtime code to make the development server work. These code use features included in [Baseline](https://web-platform-dx.github.io/web-features/) Newly Available at the time of each major release (2026-01-01 for this major). For production builds, Vite by default targets [Baseline](https://web-platform-dx.github.io/web-features/) Widely Available browsers. These are browsers that were released at least 2.5 years ago. The target can be lowered via configuration. Additionally, legacy browsers can be supported via the official [@vitejs/plugin-legacy](https://github.com/vitejs/vite/tree/main/packages/plugin-legacy). See the [Building for Production](./build) section for more details. From cba1f6242c44cd5788a5c7aa10addb00166dc624 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=BF=A0?= Date: Wed, 3 Dec 2025 18:13:22 +0900 Subject: [PATCH 17/25] docs: add `resolve.tsconfigPaths` option docs (#21197) --- config/shared-options.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/config/shared-options.md b/config/shared-options.md index 23e0808f..05ba4cb2 100644 --- a/config/shared-options.md +++ b/config/shared-options.md @@ -166,6 +166,13 @@ Enabling this setting causes vite to determine file identity by the original fil - **Related:** [esbuild#preserve-symlinks](https://esbuild.github.io/api/#preserve-symlinks), [webpack#resolve.symlinks ](https://webpack.js.org/configuration/resolve/#resolvesymlinks) +## resolve.tsconfigPaths + +- **Type:** `boolean` +- **Default:** `false` + +Enables the tsconfig paths resolution feature. `paths` option in `tsconfig.json` will be used to resolve imports. See [Features](/guide/features.md#paths) for more details. + ## html.cspNonce - **Type:** `string` From 526217ab772e1bd0913a769cd8ba4e8c53b80333 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=BF=A0?= Date: Wed, 3 Dec 2025 18:15:16 +0900 Subject: [PATCH 18/25] docs: add `emitDecoratorMetadata` description (#21198) --- guide/features.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/guide/features.md b/guide/features.md index fe6539ef..466c4e25 100644 --- a/guide/features.md +++ b/guide/features.md @@ -98,6 +98,12 @@ If `target` in `tsconfig.json` is not `ESNext` or `ES2022` or newer, or if there As such, it is recommended to set `target` to `ESNext` or `ES2022` or newer, or set `useDefineForClassFields` to `true` explicitly when configuring `tsconfig.json`. ::: +#### `emitDecoratorMetadata` + +- [TypeScript documentation](https://www.typescriptlang.org/tsconfig#emitDecoratorMetadata) + +This option is only partially supported. Full support requires type inference by the TypeScript compiler, which is not supported. See [Oxc Transformer's documentation](https://oxc.rs/docs/guide/usage/transformer/typescript#decorators) for details. + #### `paths` - [TypeScript documentation](https://www.typescriptlang.org/tsconfig/#paths) From eedd9bc78f142827cb4d9f2ef9ba908b791f9798 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=BF=A0?= Date: Wed, 3 Dec 2025 18:15:46 +0900 Subject: [PATCH 19/25] docs: `alwaysStrict` does not affect the build result anymore (#21199) --- guide/features.md | 1 - 1 file changed, 1 deletion(-) diff --git a/guide/features.md b/guide/features.md index 466c4e25..7e7770e5 100644 --- a/guide/features.md +++ b/guide/features.md @@ -123,7 +123,6 @@ Note that this feature has a performance cost and is [discouraged by the TypeScr - [`jsxFragmentFactory`](https://www.typescriptlang.org/tsconfig#jsxFragmentFactory) - [`jsxImportSource`](https://www.typescriptlang.org/tsconfig#jsxImportSource) - [`experimentalDecorators`](https://www.typescriptlang.org/tsconfig#experimentalDecorators) -- [`alwaysStrict`](https://www.typescriptlang.org/tsconfig#alwaysStrict) ::: tip `skipLibCheck` Vite starter templates have `"skipLibCheck": "true"` by default to avoid typechecking dependencies, as they may choose to only support specific versions and configurations of TypeScript. You can learn more at [vuejs/vue-cli#5688](https://github.com/vuejs/vue-cli/pull/5688). From db800bec860dafe18b74e0e80b6edb1a736f5add Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=BF=A0?= Date: Wed, 3 Dec 2025 18:41:41 +0900 Subject: [PATCH 20/25] docs: vite 8 beta announcement (#21196) Co-authored-by: mdong1909 --- blog/announcing-vite8-beta.md | 121 +++++++++++++++++++++ guide/migration.md | 20 ---- public/og-image-announcing-vite8-beta.webp | Bin 0 -> 276056 bytes 3 files changed, 121 insertions(+), 20 deletions(-) create mode 100644 blog/announcing-vite8-beta.md create mode 100644 public/og-image-announcing-vite8-beta.webp diff --git a/blog/announcing-vite8-beta.md b/blog/announcing-vite8-beta.md new file mode 100644 index 00000000..dbdc4ce9 --- /dev/null +++ b/blog/announcing-vite8-beta.md @@ -0,0 +1,121 @@ +--- +title: 'Vite 8 Beta: The Rolldown-powered Vite' +author: + name: The Vite Team +date: 2025-12-03 +sidebar: false +head: + - - meta + - property: og:type + content: website + - - meta + - property: og:title + content: Announcing Vite 8 Beta + - - meta + - property: og:image + content: https://vite.dev/og-image-announcing-vite8-beta.webp + - - meta + - property: og:url + content: https://vite.dev/blog/announcing-vite8-beta + - - meta + - property: og:description + content: Vite 8 Beta Release Announcement + - - meta + - name: twitter:card + content: summary_large_image +--- + +# Vite 8 Beta: The Rolldown-powered Vite + +_December 3, 2025_ + +![Vite 8 Beta Announcement Cover Image](/og-image-announcing-vite8-beta.webp) + +TL;DR: The first beta of Vite 8, powered by [Rolldown](https://rolldown.rs/), is now available. Vite 8 ships significantly faster production builds and unlocks future improvement possibilities. You can try the new release by upgrading `vite` to version `8.0.0-beta.0` and reading the [migration guide](/guide/migration). + +--- + +We're excited to release the first beta of Vite 8. This release unifies the underlying toolchain and brings better consistent behaviors, alongside significant build performance improvements. Vite now uses [Rolldown](https://rolldown.rs/) as its bundler, replacing the previous combination of esbuild and Rollup. + +## A new bundler for the web + +Vite previously relied on two bundlers to meet differing requirements for development and production builds: + +1. esbuild for fast compilation during development +2. Rollup for bundling, chunking, and optimizing production builds + +This approach lets Vite focus on developer experience and orchestration instead of reinventing parsing and bundling. However, maintaining two separate bundling pipelines introduced inconsistencies: separate transformation pipelines, different plugin systems and a growing amount of glue code to keep bundling behavior aligned between development and production. + +To solve this, [VoidZero team](https://voidzero.dev) has built **Rolldown**, the next-generation bundler with the goal to be used in Vite. It is designed for: + +- **Performance**: Rolldown is written in Rust and operates at native speed. It matches esbuild’s performance level and is [**10–30× faster than Rollup**](https://github.com/rolldown/benchmarks). +- **Compatibility**: Rolldown supports the same plugin API as Rollup and Vite. Most Vite plugins work out of the box with Vite 8. +- **More Features**: Rolldown unlocks more advanced features for Vite, including full bundle mode, more flexible chunk split control, module-level persistent cache, Module Federation, and more. + +## Unifying the toolchain + +The impact of Vite’s bundler swap goes beyond performance. Bundlers leverage parsers, resolvers, transformers, and minifiers. Rolldown uses Oxc, another project led by VoidZero, for these purposes. + +**That makes Vite the entry point to an end-to-end toolchain maintained by the same team: The build tool (Vite), the bundler (Rolldown) and the compiler (Oxc).** + +This alignment ensures behavior consistency across the stack, and allows us to rapidly adopt and align with new language specifications as JavaScript continues to evolve. It also unlocks a wide range of improvements that previously couldn’t be done by Vite alone. For example, we can leverage Oxc’s semantic analysis to perform better tree-shaking in Rolldown. + +## How Vite migrated to Rolldown + +The migration to a Rolldown-powered Vite is a foundational change. Therefore, our team took deliberate steps to implement it without sacrificing stability or ecosystem compatibility. + +First, a separate `rolldown-vite` package was [released as a technical preview](https://voidzero.dev/posts/announcing-rolldown-vite). This allowed us to work with early adopters without affecting the stable version of Vite. Early adopters benefited from Rolldown’s performance gains while providing valuable feedback. Highlights: + +- Linear's production build times were reduced from 46s to 6s +- Mercedes-Benz.io cut their build time down by up to 38% +- Beehiiv reduced their build time by 64% + +Next, we set up a test suite for validating key Vite plugins against `rolldown-vite`. This CI job helped us catch regressions and compatibility issues early, especially for frameworks and meta-frameworks such as SvelteKit, react-router and Storybook. + +Lastly, we built a compatibility layer to help migrate developers from Rollup and esbuild options to the corresponding Rolldown options. + +As a result, there is a smooth migration path to Vite 8 for everyone. + +## Migrating to Vite 8 Beta + +Since Vite 8 touches the core build behavior, we focused on keeping the configuration API and plugin hooks unchanged. We created a [migration guide](/guide/migration) to help you upgrade. + +There are two available upgrade paths: + +1. **Direct Upgrade:** Update `vite` in `package.json` and run the usual dev and build commands. +2. **Gradual Migration:** Migrate from Vite 7 to the `rolldown-vite` package, and then to Vite 8. This allows you to identify incompatibilities or issues isolated to Rolldown without other changes to Vite. (Recommended for larger or complex projects) + +> [!IMPORTANT] +> If you are relying on specific Rollup or esbuild options, you might need to make some adjustments to your Vite config. Please refer to the [migration guide](/guide/migration) for detailed instructions and examples. +> As with all non-stable, major releases, thorough testing is recommended after upgrading to ensure everything works as expected. Please make sure to report any [issues](https://github.com/vitejs/rolldown-vite/issues). + +## Additional Features in Vite 8 + +In addition to shipping with Rolldown, Vite 8 comes with: + +- **Built-in tsconfig `paths` support:** Developers can enable it by setting [`resolve.tsconfigPaths`](/config/shared-options.md#resolve-tsconfigpaths) to `true`. This feature has a small performance cost and is not enabled by default. +- **`emitDecoratorMetadata` support:** Vite 8 now has built-in automatic support for TypeScript's [`emitDecoratorMetadata` option](https://www.typescriptlang.org/tsconfig/#emitDecoratorMetadata). See the [Features](/guide/features.md#emitdecoratormetadata) page for more details. + +## Looking Ahead + +Speed has always been a defining feature for Vite. The integration with Rolldown and, by extension, Oxc means JavaScript developers benefit from Rust’s speed. Upgrading to Vite 8 should result in performance gains simply from using Rust. + +We are also excited to ship Vite’s Full Bundle Mode soon, which drastically improves Vite’s dev server speed for large projects. Preliminary results show 3× faster dev server startup, 40% faster full reloads, and 10× fewer network requests. + +Another defining Vite feature is the plugin ecosystem. We want JavaScript developers to continue extending and customizing Vite in JavaScript, the language they’re familiar with, while benefiting from Rust’s performance gains. Our team is collaborating with VoidZero team to accelerate JavaScript plugin usage in these Rust-based systems. + +Upcoming optimizations that are currently experimental: + +- [**Raw AST transfer**](https://github.com/oxc-project/oxc/issues/2409). Allow JavaScript plugins to access the Rust-produced AST with minimal overhead. +- [**Native MagicString transforms**](https://rolldown.rs/in-depth/native-magic-string#native-magicstring). Simple custom transforms with logic in JavaScript but computation in Rust. + +## **Connect with us** + +If you've tried Vite 8 beta, then we'd love to hear your feedback! Please report any issues or share your experience: + +- **Discord**: Join our [community server](https://chat.vite.dev/) for real-time discussions +- **GitHub**: Share feedback on [GitHub discussions](https://github.com/vitejs/vite/discussions) +- **Issues**: Report issues on the [rolldown-vite repository](https://github.com/vitejs/rolldown-vite/issues) for bugs and regressions +- **Wins**: Share your improved build times in the [rolldown-vite-perf-wins repository](https://github.com/vitejs/rolldown-vite-perf-wins) + +We appreciate all reports and reproduction cases. They help guide us towards the release of a stable 8.0.0. diff --git a/guide/migration.md b/guide/migration.md index c0cbc573..03ecece2 100644 --- a/guide/migration.md +++ b/guide/migration.md @@ -1,25 +1,5 @@ # Migration from v7 -## New Features - -::: tip Temporary section - -This section will be moved to the release post before the stable release. - -::: - -### Built-in tsconfig `paths` Support - -Vite 8 now has built-in support for TypeScript's `paths` option, based on [Oxc Resolver](https://oxc.rs/docs/guide/usage/resolver). This feature has a small performance cost and is [discouraged by the TypeScript team](https://www.typescriptlang.org/tsconfig/#paths:~:text=Note%20that%20this%20feature%20does%20not%20change%20how%20import%20paths%20are%20emitted%20by%20tsc%2C%20so%20paths%20should%20only%20be%20used%20to%20inform%20TypeScript%20that%20another%20tool%20has%20this%20mapping%20and%20will%20use%20it%20at%20runtime%20or%20when%20bundling.), so it is not enabled by default. You can enable it by setting `resolve.tsconfigPaths` to `true`. - -The `tsconfig.json` in the closest parent directory will be used. For more details about resolving `tsconfig.json`, see [the Features page](/guide/features#typescript-compiler-options). - -### `emitDecoratorMetadata` Support - -Vite 8 now has built-in support for TypeScript's [`emitDecoratorMetadata` option](https://www.typescriptlang.org/tsconfig/#emitDecoratorMetadata), based on [Oxc Transformer](https://oxc.rs/docs/guide/usage/transformer). This feature will be enabled automatically if you have `emitDecoratorMetadata` set to `true` in your `tsconfig.json`. - -This transform has some limitations. Full support for decorator metadata requires type inference by the TypeScript compiler, which is not supported. See [Oxc Transformer's documentation](https://oxc.rs/docs/guide/usage/transformer/typescript#decorators) for details. - ## Default Browser Target change The default browser value of `build.target` and `'baseline-widely-available'`, is updated to newer browser version: diff --git a/public/og-image-announcing-vite8-beta.webp b/public/og-image-announcing-vite8-beta.webp new file mode 100644 index 0000000000000000000000000000000000000000..f36747571bd407bcac6ff93b22c8fd342025e2db GIT binary patch literal 276056 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 z za6JIG`iUnD>yqHg@0huK7#lVOgXr~~ub_yuE_ihrqtE}y#tcl{P-QqPodf4bO8L{x zqhy}8@b9gknr9sg#BrX9f0^fhIiX(%1R#1o8jL;K;W1@@tF_DA5#y0&WqQI%s`Dgp z80y)uN4|oG#eyLLQCa5_I8(4cKeAa386;)e%% zE;R)rp|DM!%;&vBLRXGGIF!al3G$oQw)o_Rwm%u4T4dYT- z@2+)04sMX;olA!*&TW05<+_Ro{Ys}}((G#Zun_mA8r^nY7Z80=dr=*tK+%=(#{aS? z)r4e_4TMw}(C_K<4_=Zpe1IuIS=8sGWn*W!ry_CqrvhLm^G}_e|8@u&NzeKSm}zKE z_{FL5^6cpCUvf@W&kj)g>+@zttWF}$q0(}GgzDVcI;1y@nKB(S86p=$)%T1;g!;6=o~7o5Q=o3%t-N0 zyX0V?IM&K`(Z2b)q%=JaWRJ>o%3zBCU`4OfEN73)@6B%*@#%oDTl-;)lw9gWing|~ zT6({fZE!tU7)%1MbJ}h@luwHEVlxId+H8+PdGI_@1{nRC5&>lfZrVP|p3M70sWC)2P3x6}3XTMb!L- zjMuxq&gB_rikXh#DgOe)TA%0eSiVnnmoxH8(GP_u@Z}rJRQoL?uhQhTsw5leN6SH4 zvv=dgYo-K?KeRKU>M43moS$w?;J=rOyiyxW=5hAaq!3v+Do7R5F3;bsBHG+F@hLg` zcf4-0XSt}T%5gx2cO2;TIh+q_9>*D?Qzv;ZHm%>wB(-jEZ`_4r9|c^0}|a}JkQcdf@l(wxCAU|rp&mrgV*@GlYD z;sJhF;)AuE#$cb+TOZSY_|1ZZ_Kk#XN$Xb_61e8*1tKamX%xh1DxO{e&bQ1D)mh1c4e zGMwa}ukvEpxswP>RX2b9OnGzeq}-yTCiiFC*?3dXt&pnjQ06>kmGM zekMOMHsQH!NFKLl6}+D2Me%iS!YbT7%laB70(eca*1JiHepUl|4>VZu{k3_le+aYE zYTry7cOqmDm^rA-bFZvSOOw7sqfR*a8yJF(TJH|3^-Lrh3d~-4BPF1!Z5Osm$1t6e z(3N&dro2IW-6n69?c|6lO1E+SSt;j#gS^U2kv9uDZp)M4W*grF&=xZR|4`QbQPZW@ zP1@26rmHVFz#oFkg#&uGImsNS|79F^`}Lku$Y;3Blr$XMTNw3+nu8e?(YBbhr1M6v z&Rm2{ zFX~niNmFO&v>E)0XhZHA?(BdgWg1&d8hT4E5?qppk?)09TC3xC4&fi#Xp0(;nGZQ9 zhGtNf)1EGK=FhEsoD3+uY8?WYh)konPanJY`PjM>c2}k;J&cAcMA!EXt&8)$SX`Au zJCsyhJOiVQUPc>e>dkf~K#CXT+{J!ZQT|VL2nci7S1-Ah=3NAJ>jpCYkWD!SU&X|* zpl%RzYsQsc5eVVWkHwa~cg8|=s6S8yf`aK+)*!Ww$G1o?O0SGKZ#5>zPDWX) zD0_tLlvERw{@5BtBEKIG&{Mo9FWtZRrvVr5ST_~>%Ebmzko^6TpMA{pmMP8kZbZK!aIjkomwqGtRt8SQSlxWC@{EYwsif6klmED=j^Ij zn2~bz$=cIfwOWbaTAMtzRU`>tvtYFl-|1@pDNN0Q4=k+nwG0xsIVm?wA4~zqvHooT zkiyvQ=2=5}n)eLm0zoo*`Y&!LFQx1>R7PyMQR0LeZMR96O>HI zw^l6v8PlOIkF*!nKvo8MO7$-g|35M`25v7&%?Vkc{Rv8aX#{LoDn&URUAs6Ay%%aVfP$_62j7o z&Rl>z8~(8CR(0}~UzYV8KQ`!fb2xTK? zNUSy6r$xPr&~^eEGhWxqK*B6>rOOeTd+Ft(rNygX<%h?Yma=TQ`t9@)U-qWpt!J25 zWX@!pKm{qBxSOsgjQ@l<{*fs-5`#3nnh6nUY6dOavlbJ&Rby1XC|{B%9XI;}ELMI# z&l_RTAgPVmIFA(d=-mh=T+22vfcb;okJaM_*utk3&?4@_5bGyEsOyuz3kUt>$x6Xg z0mWBli$p~btO_id>hXsF3Xu{|lH|n{(}s1s9;mo%zToRYtJEFsa;#Zf)2lpiDwR=| z`X&kbrUYqtY*!Uze>@LrGSZJU_~xti*ngDL|Ags+YQ#9ov!3W$p$Hp=2B+#Yl3sD8 z5NU?3dFplR{rgCbOxmumY}o@H_1`fDy-oeOv12DEukKpXvbO`6D{CCr=!L4!8aFE0 z#F8J_aS)wa{!NqnCqVOm&kjR|Cu1y^fAJ4fI#2N9_%J)`R6}3@+6TTVrnL*vM)bMN zgzm|M^M~6Y8679Dg$LRPW~6fuD-=s-jm2QQlGTCJXXeTQ^bKS)ODOWNAp*FFKM~%T zkOm61*OU8D-ht#@h42t0ug+Xk#+eSF;?ly7;Q}$NeCG3QXma*O0^y(Qm8r2|-DGBX~)^ z83oPUtco)Xa*0Ye`lty7gmC-;yveMd>Uy=GH5BiEyF}${>H%_@b>1O2La7UeGjWK(K#>i9F(dS0gE1LwR?mJ;cYU zpg`GOFK@$#@wr7%8UNo<*Z&XymA#P@5&sBjH_zn0coBa-gOSTn1gC9+_|9j07-JAy zg&bP5(_s5;&UF|RrR7RZ&8Rhw26 zc+Y;NxT5^9Tj$PXY(vql;;e5!UAI1{ojxWk@695lgsiCm-Y&+v#`w;8O8&z;hQO&f z`3+h+>s)fa$n1<6Zj=Y`3kJA4@IUA6evwnxsY(lAL-TdyfxwgW3!up+Xmc-cI973>c_phcMbk9C%FtsV@yRHC;Ln;sC##n_^>&jX>)(MRu zx@Y6{MD`YxMap+(MGUVQTqB$0l!tnWM)1tm4>mP`1$;j%$_k2?N3TFWb}hb`nTh-u zd%Aj@h}gV;O8~I`sBtF=C!x*hVutrmJc0LoAV-RU*E#cTR$FP}=8W8tIdblvU+Cd@ z$n^;Lsc}ApuRa3u7D|gE9yL;DSoh&2tjM<=@!>uzxHn+`<(*-?e}^we`P{xyuCn^^ zKE{MXe-)Vu;gVHLU?kdqfRLo@6O-(AU)2)exv^)q^zA?h>U&?V_)l~t!h#Ufl$4tk z`xN@GCSOALW$4ySmchS?wg207VU%0!-vktYu*T|!^4Q0IM0*K7JUv!wof9+QiOen+JnFfqMF^;3uwZ@^H7C!%5r%a z4coC-@Otolur7j%<7BuM;spSznOy}P5^*GkEQ(Zkq8-V)!*v0i6C!#4_Tw0JZcT$% z{Zr0oq#5Y>V!R&slD4*6Op(@&mdaz(4Yn$LQZ$>*34PXsXjLvW5yw5lcY74K?-RRP zON;y^9j7}IL4}7)B2?g1&0NS-e;w5|(^us<7_O=d3d2x4dn12W%zWA;?xE=ZNq&x^ zG9n_|Tn;6VL@^oX%FzC*+N(!!&>3r7MfQcwlWQp1p?C5|6%J*cul9?Z&p4{j=jIBN z{uQm?`IvviS`CqzxmvnqL3NWV#phWr%3JCtH>f?LJiWgD?MfxS;aiKB>k6X>hF`K_ zX{!J>Gw`LDcJ)9&aJ5S*mi&tLjV$6;z7S| zi`)B%bD;g}R}8fN;n2NJj*#hTkfK`W0`O&m_k!=g=?i|Nq?6{+!mGcGe7>=xBE)YmbW;z~u0shVdhYFxM4a}N3I~(2S>^cD|h;VYiv6EoA%}_arqgq zSeXS8#MZ)e*|Xok9Iie&pdCkuT@D72{;|dXLDHXL*yWknqgY=Yfj>K*#}`Yc^C8+% z`F#@WAbQ1OJ=Z=!K^J$*$j1>`hVvuh?XKJya35xEtb&zM>L+=OYPD(;N(<~vmwI}E zEbexbqJkCVffUgsYj}}|`jn<_E?oXAvY|ryPJi`kx%UwM_BW`z@Id)KKKDoh9Paf$ zy-`F7Z8TB&OVxh5ks_|>p86d(rUQkdk`j|aR)`b5!P9J_9x}?Esggi#Mk7;GFRVI@ z$0A>TLKeaJ(&lS9mS8CtOJy-U5?jUkf<%uu`s9}PZ4Fn?hC2Uz+vxE>iqvs{Z$|n$ zX@-(Z+lb1%zEX1*e8gTxXS|nE(XDzw;=X*nZ7<8pJUBN~gh)X|b{)6_15&~-N(K2F zR#7nowL~Jp4M$e|b}p;jIT`mYMFH~4uEeVc*=EDpb9)UVv|iRuH?S|YG3UX|L%UK1 zJKXw}qH!fDm_@%=$g$?)OWqOk3{ia=HksL1%shaE9)?-tL~_+?49GX#NUhODwH+u@ z)K8TzLK>pCWbcp7;9%YW&s$gk%=9s)k``+&H*K#{< z4)Z1EUPk#&MhzY`-eL;D8O&y#3YNWkC1A`nN0aSdG6Hb4d4~*7Ahsrnq+8XBF0H@X ztYl=iMK=>J2}qj)q9CqVKWMAjkeSS46!P4QEK8h!$W>SbFxMIw)09GxxhTCCExNF@ zjt~c8@uYXm0o}_=_uCNPF7(pYBheD%KQE}1p2|UvAHV+}$+crtYWE^3U&s1_JVX4U`oY?V=8 z92pB5a!;uo>G4ex?GN@fVBEOHdzO_u_dB-=00nGQHKgA?z&s8G2=7NWQLA?OkAk!P zuew(1l%6#8Be|bfyIFAA!C;B@iQ>DV#~_j`o}>Lf&{DHob-g9?e9Wt@uv z3Wze|dgn+(TN-{gfC5K5*r9*kPI^LDx>9O2+rgq*1Hn-eNC0{KaB&V!oJS(^C-xH$g8Z z4*j^UrbhIiO%eYKIsU&UO#gT5R9dWD@nSdbRrQfc_$b^|PeBJiRUzHz7dMDv2fH8z zWE(+fr5QRBi8BS6j8r*28aP??*asdU$KW>0(PF_wx{77}{Yqv8B zDQDX|`W7TC95B9W#(&SFEC1a}3P27Uh4FuW3&Hd&$xr^eT#dtUPl;u~?E}!Wcwnd< zH7&5A3N1jhA_}HlSl(aw_!q#AoPfNX)HFI5cF=&N%anPJ?jyB@LDk@x;KXPW75H#Y zubKmmGMa9q+=e$Jutc2<;?$~cT+NnqmxS&MivOlO{vS~PKYFbH-AyRXC|r3Jd)^ta zl#XG0`Q?`0cj~VE8wvtFXMN}IfY*e$N}{C&5zUT=lq$mP`BO=Ky0az6rvLozXDZ-d zVoN7l?3AEd+U53see4Z)8Yf{z=K!?5hy>31`>;bQvy^6w~mh!SR9e zn`sEst6x!xUicSGd*aAU(;I`{uKO+|lkaLf?{iB}ycX+?KVs4_8pdEKCM;qbO;W!80I4j*d`I}4@--@y zRjby?u6GdGH`s~?QhTs{!`FLE2pk0dzcZ!(`yl>%Q~zJ$n5JUlD=hBk$%G;u16@hCaGdwDj?g58?DPMUpCA;`P(|rK| zz|XIy>F@rGcLs@D-MEiF>hgM}1HiveE#eFQK%2xiP=@~FTltP%g4hZK06OFE3J&`v z%*L(Hib_h(tcSlZEt;#eM4c)G^J>&0hQddD9spo}0HCytCx^2z4@+sxXT(b|E%wdA z7eGIYn>(spf1y%jh%hw7`J86c?C;hHUZx#mL}~&(x13HwqMvrNTeelqCE(;Qe(w!$ z7i&f7pGPgfPpsi>z=n#QrQ2-XCCKIbds^ScC%_=E*X-gy$kzwlo2f)MC0rn1-)HIXHoY4mC{6(DA*qDe>hZt4qK%>>?vkxL5qaHlESMKgC>BOd% z8~4N&)jwS+wc8!TOL3|Jd6Ui&3SizOq25WLZxuk}7?y4lN-OHKuXeePK_ms&wOm;G z@$5}l=LjfNS}_1`0FC_&eo(W0~lj)2`J^83XX!K z^bSN4SPw^4%>@q|DoJV`nx|V1G^W<-hflXIf5)ZuvX61#Hnp%S$b!ix9TgXi5vU@C zF*s_?2Qwbnm?($y;a zggZPBkVn0`)W)T;;xm(m2}pEF4H)`hwctptWfR{t!)|-GZOwdNFU1$NOIkjV>R+q8 zKOJbQ0N!;2YN1$(UV>Q8CS72#pUwW#L_d-6c`9YP3{E|3PNOx?s~>Ab2P3f0&IAYL zcjnAgRL2|8S6n7wi$wD2!VF3R-tC}BNH3kUVu4MQiLXFI4y6REquw(M0)5by49XF7 zj@XM=E}1La7|{?Uz%V7i_kMtfA+*DTc+O^_9#DLT)!}vdpSh31z0d}L*|ru%2r=7E z4-Blq6M_D6DIlXsz5U6=#-&`4cCUZA?EAY9TjBhjW*-j))u z9pE!kb7OyF?%UT(1%`Qw(!jD!5Fh}yd1Cczl zN2M_sOzh`Skq{-cB7`>blLY_NT*1+KcFf`84P4X5;3U@@1I z03P^D{4IyVB|8hkpn`AW9fza`B&-4p4$9QdSSjw;t9Najm4o zA#m)xJQO{t%;^?iWyVpNr` zVEGY*Cb)CmxgKFybo$U^LB$v!t=xUz%JgUv_gc&nct%hA1kn6`m1_7%ivFk4xcW)5 z`2g7O73B6)5B<`EHDSrnrWL9^7=GCFV#2kl~TyY9mH=loyAh zw(Z^IZSwVx&2nB_e*6P#vT&XWr>8AT$}~xk%oTDaP@=G8N~ex3XRYA*rspe+T563G z3pVG+sAHgqDxo+5jGmKzv8lp`ny@>+V8~y2K+bhIhNfMqki6QuERLOfz+TA?i(3ob21ZFU-t7X#s)xEY1qF z2Z5C2?iN8_3Jgx^_7y+2neUztbo? zHP4;Qu{)7zusF3s{Gz7FsVBFZHo2Y-TES)a_6!M8nl(MGI0c;Gp z{@${u=smAi8okx{2v(NKpEsz+4ATU zwsga1F&5TU_Qs|eq#Hxe8wlm6jN7heWZn#G-JJZm)UG#cioxf=TF6p8$o;;()Q`dsF?DFFrI9rj52F7r*(y%(VyYp;WG)S7DYY%I|x7-J! z9<66A5dk!r&Fa_74y12HjQ9lr426rjdz9%G?9d5A_~cl)QTaRjR=<Lf$yx6j+vr=Zb~D&8bsWy|MRGxcmHC1MZHB>|Pw>VNUj3yW zUoF)UDnne+TPBqtyL-bUb!`3iKy%*$Gsfx5Nj=i1KL9zULtNJ)sPBaaw$Zy%wvbruyr4Q2-16I#gVhJ;y}zL+`6$=NU}5L| zi9jG}(8U<_My$7is)^B^f0=o8M2ssS&`(R{v7|9}G@V1lh4?s~m~=K6;3xp!_HF-o zOc#q^2pBX?Z#Fx3T2m*+;jiTd6*zL8J>815`p3ooZ+?u+F5MQLpY%3Wtzig)$LhE? zvCYdo3|rBh5eB8Rl<&1Gmq`H=wz-^&vVw?y>|pIgdN4q z1bu#KO#~-O@p?gL&mcG2G0naMFzTHwF>Q!IrRc1EuSW0*o!1TOuuXM+0sxl@q-NWIjsT9ObFXmv{oO_1FF zrD4KVL%^aOvv-E1nqZ^d_6vmJjdT|$6{M0)!479R{?Y?K2ni{-Sm&Q4a0ssAM9J<S?@MJ57=$YG7X}g(zso*Igw7BF<0DlN z-gR}WMc*E1?kYG=k|lsE*i79z?RE$bOauvTEWVoJ*3t^d$CLfYE#U%_|DC?IR5h97 zfg-UC$drdKa3*918JM=J*m*)TGEKb)GA~?$%*B_-9^?2}y@y{qZfkKviTaUz3MHa# zlegf;w{9$^DKM;uaY@H7$ZvTQ zEYYbpt*R6&n7tOpB?e`}y*~_2rMuP{NW4656LA*GUO4WoeMn=i^DcM`_Yq~fB5N_g z>0UCK>YBxjA(cmC36P{z)%p;fkRR#xEX-G~kpMSAHRdVlYxC_mj4g~tWVsi>=|Q6y z&n6y^PP!4(P@j%1<@@NEKUMM|XkT%O@bD;CW0xsIMU(rnZd|o8E=8Z-eGl}1>>(2q zs1lar1!%h=51C^70)9T3FUCcSA%D?Lm9ut2fhMkv=z;eio_xcD1_}lyzA5XfutJ<8 zsl57*sy5YOxROVY_JlxU%vC1`z1*iI=GOYdk2n~XVfoeHJcS19o{v&N4x&+s>1Zjz zQ@m?7B2)tR1aUxy3(}KN$Z1mP6B0>r$D94~0=sy?%D%f8*{u;yr!Tn_F`pvHX?{RNo(ev-7mk&M|702HBt3z(dHx&&Np0}wWMBYGpmnEv zHx*PlAYG)Zqs2-{tH?v|`U8=<)kqC~8j5PWa47k$nC+=>? zkQb+e^9RT+4#hMqsgX@pA$A+n4=zjq^dOkKDxed~@^XW+h?&s$U_w(YOJg{fdf|a< zwYZ6^IN1~O?+?-K3qZZVkTH;YxR{EJzL=>==m3Pt=hH;D1r(SD3Wa#`bGT~67J}-G zVgu^i?aeT0rTbpjI-G{08@FvPizOZ>lnR|3PEj~~ML}W*1;`}Izm0?J%&~dk`76DY zBOwtq*zG+JE=SrS4hXB5b$Xu2ltulJXpvfVKraXRnsVC&^MA~5#f$^<;+14JEH}sW z21;Ebe7%Ss3l_=lPshc@#x{FW?EJW5b=itkn>tsL2Y3U-Pdvnh!bserk&S3}^AM4K z50;(Fq4!^{jv(7EW*B68j!^mnQp7iNYbi5BcV;1me>A24!+ii`&`IaWelb^Y5+b-}4i65O`!PvnXjvXp->rR8rRe!ss19ks` zG3e~i`PUS+@mj+pa5LM1VeWz`ND0u(V~!L5$WKXGVRS0Mpxmw*GW6rGQKbp zhcb6}^u)SBNK8aFno1qZ|BOR*mJ09KE6+iBw8sSHQJTDam2(CmR0GMynZH8z-;#TY z9EvCpnE}Y?!CmZ`x;^OJ$w@(Pe{vTUWNaXW4$)9^7=g8KF)Wj-NSJJ%9(W_g4Orsi z29CU$pR$NH5iLv_%KUo40{62jGwX|pfwHiJmn@Pz(BMZrNHaIkfyy^#)Oc7Z#1En0 z5$i4)H>rC2alb*+G*q6tn6LW|b#n{Nrokoiov2{Ga=xn|H~5frZbxYynV#~&-BrX7 z)dHUxLSAc~;jGN&>V!OA0Kd5Hn5|&^Ts_33!ehv+&3C57xGbxc9Yc`S`b zK}GsG*sLs>)6A9q9VHhC0|c(x3B}bHpc2ZAZ0!?KJoWB`STe{CaZ7T{=h8kC_zgtV zpF9MY6bTLi7CHv3PajaNmbMoi#2;ngHVAQ%4|SV{x$b#uOCu#ubN1X4y@HY#27n)U z{DcDxOwrP%7gVq8bH_3)^*Qjnmg^3>9z{X>t&666sZR>g+r;Eev>z zIU;rDN{wV~r~d9`kOa8Y<$p^Rp9l+Jvw=}eyHdt0CPt1*zhnkmLZ&PiydgdAcPHRj zy!pFS8e4IJJ{|Bd?7P}CG{^CJ)rCsIv)#Hi}|1gv@`?C zd))2`(P(*5FJl1Em}q!Z$$k{Fqsdv>9IJ#n({ytkyh*Sglc^1`v{i3ym%eub;vJU6 z@H_8zN6KB-4$KX}I*?RCHeYNo47-pkK`ogvkS>5ii){(66_4tZiJ0tj`;(9Oz!Dez zrzTMW$aUywg3AfBmY;CZ7-Pfi9ti8)2b%@%EUDf=LFa?o>6jPr#C-#0=}zimzW#CK z4nYXG!L0z50@)$mL|EI{rQK-SQB#@GFzHJnKoU>=O@Oy4I|8F!`R51ME7^$W{oDFb zpdHa@(8(%J`f)xGRK`}~Q%;O#$ z*aLuRIe-$KJxkb!L?8gwcNOUgjcWd5CN3K?rj6VLN8?%SXKKx*YUkacu797bade62 zN2BxP8SEz2-Ttubs>!boKz~`{s#7%76M|OK7BwE^=^lEgMn1zWqk`R-KbUOg#ehI% zLZlBeBkZHF>o}(CZfZ}jbg|KD)#gu0J#x2zLQRf?&N>~9t_$=aO$H4c1FLZ~F0|n% zTw416~8kB8@)IRo<#u`?I|9i=$PwUPb)XA%ZX{7DCjIEd8v zXx&JAJipHllb6F*D_h2KRs;s3`IA60UqJ4jVhBQIY<*NP#kzJnR(=#P0-b-bItLBn zMeyL9gUG9=6pHe=vBxZL`Y~lx_nD~6sB!u%&vS)#7jwK0DwYy#&U>Wut7AC(boG%B zBPHF2(>3OYij)?dNTc3D|Jp<63L2uPnH>#bPvw($g8 zufjiBV}5~M-t>2?#|651YFcI>lm`G02Js`n|EP*#QYHN_P5=!PxCG>{W#OT-lBBnZ z@Kv3~z|gwdpUOq|a{6YKkw(Tz)l~fo-{XhZl$19SmWVWb+E0NZ_ ze-9sJzi8w*>ADoKYJ+V98b!*nn`Nn?2juYkGHqOMq#;k(hT=vdg_Eg*g*U6s=IAUQ=8-p$#G;?D4-s0aQpgAjd~~M2jw_bY35%( z{SA)&SMNGkCrMzKO6ScDLrqq7^Lc$rsN$N<9PzbK#MDlH=XUVx)pwk}Ha^oj8l?YR z;EWd#pxR6(;_14owtIqiXebS{!D=;uKo`e#y4=M&?a`qTEdz0C<)XF2S zgo(0RlCBh~iHKVF(4>+-$O8_vBRfHwGrYAb z1cb}JV38h4^G`G)ND4(4z0)D14axR{2tKK6I9@Zb>)yumKiJXr&lq`g~4 z>0zo17YvVPZtGjtB5kWN{}Xi`N^<59ME~s7beHy)yG%*tZ9zxafF%XvPvZRgJ z)H)~|8%UHE99-VCxUdFbL)9fIKK_XAA|zbs9;dzi<)kj0bF4U)W+xrF6ftj-L-QyUV0dPc=aoZ zx4Qb}=3GmcRI|)SsjK1+M{^4qt`rB7RqKAumDZ#ec0HYYj{^?|)JhHqFxE8CiBQnb z0Mo(Lg+Xc71!H=hmz0g2AJ+UyrllOAy}mn3aPB(2tM$qfsaZl3i42BHL3Ipe2MeJZ zu3@HZM=XPvjoAlgLPRxs7GWH+>(Wu5<G*t z9XhU)zkqpUN)?y)zRaYT`uTw9PeIY&RoR010q>It8M^?R5|WwT(%hIn8`)HU--1R# ztm@bruAwz##CJC3@nNei?sqS5mR42OuDhmUT;Ze#{*dO~&f4B+i@`cZY8hd(?X7$K zxbn2`1~iLti1|EV*?}$)loA#GcMh=AXZ+}W3sivND09}admUCbD|T4%iE(I(WH(pm zA)5in+BbyN=vI3SeKkvNDiz*cl7k83yNJM-7+P~`=q@I z^4O5irT$gY!c9>b=iH?`3V+?#iYL~`x0vw}4+TXkE62^{dZ4MY2@qX^A?Xd*2oY>7 z-=bB~q~hpYrtMKH;z;UeRqh**5@eRO(t7oJy!UAQGa95trD(`h2EfFxC2;I*=sz-n z&6IU)n_kWzq((YZ$3FF3_n^r0NCy2;Ha#@V>S>0JcaER)*856*eQmYX&$Y~3BW|G} zp{1gPJIjQp$3HxV2JJ}(;SrfO2_`b}Jx%F50hB(R4!TDaJt+zrMvKz? z`N-kC{`sKEvG-hX!Ki&7icF%oI2?7^)&-G(5DB)eD$9)Esr7p%vsajs7|_y(Ac3Oz zP`G1$d7MZiwqFnbh!WtxV)P+f#QJs`8bsCA-<%l21IZh_fd5llT`!H&^rS>o3a zSye}gn2mxL{orRMyI4$MhFVH+DlJkJIS`RZ(JJ-)W5iBzSmjOcQ`BM@<2~RRoB8-_ zQn(&3dKtd!9ZBInb3I3rd)_+w;T>GIAfo7d^(1A+q8O;*<#&X{nCtczu>)L)1O1;? zUVK}}kX!lkc6bg_-3v^#D)SS*Glx8MLcOB{fsP~d15$B>GPIo^BqQqB2%7Dpnid92 zv2X?KIylJmu(_9dK-+oXKx1mz0Y`g0{~T)$oD#AvJt}yk`hjrHCL?ttKMEY-G#;*) zY@Iy%nuN995|$P+8ZyDV9>fI4NvQTDbg&ikSgS*5B?QChb2Fr(=`eZ_i&20`)q!^c z@}hBPNJ5EvE6Yq^$t=(8PBBYa5LYP;rr623t;A>JZ5FnI$aV-G&nVoosXCcgWytt; z;;$tnm|}ac;Mh`!uLI^feM>8whQdbbAo87I_@etiytQm_@k0Kc zdTH1AbLZe1lsr}N z+8AK{9@Q~T%(ca_rs$QTw|HQd4KxFyflLcW~ z6MwgWMNRpC`S*dU0}v`j&DoSR-~I9D*`_^hB&ZGg!_2aZtf598-(g%SaZGuSZ2AGi zk=257px~i-c~Z8s^`7Z;iZZln@!bYR42LwAV(1B^|nadkN7ol3ys8;X3HY` z@?>fF_0TPgHbL2IF%P^Q4D3UKG(wGIj)LU_q1!g33D7*(>gimIgiNa}PiJ5bE4(>A zQ+{U2b6kccWy2_4pU)mDKXDn+Y4HN4?@myQQS{InvIl!(o+pteF}cm{)uHdIM?zGl z&9PH;L+;%26J1ucAkriUwCzJ>dAbhSd3*Zm7!3fU*be3}odtTlK7;XvzNjk+@XL}T z??&4>sddmX-)b3@jBh9kBS1@Eqwn=4AD6{lt}WhKqo*ZXV3(?6_K-`-UL6V}{Lw!J zPY2K^(;FqZs1B2oY$|ThmYpMXozsQ{J+P08$Q;?T!v|vEM;nW|7@6W&6~f5m^=6O& z2=9-aY-RfNSJXJT_%Q07T0rVW&DUSeJ-DP5@(eKbW9gU*=+!4#PjS7eS4v`cp>z0n z=W+0XO<1&%Ih&HF>T(q_GRxqE>y!84R^pN#K}}I!!)a^UJ^9zEgjlcEbP>c$N7UcQ z<^z|KMqRiK*31~T`z1vKH!()M9?(W+vp}IN;uMezfA`HuD+m0ET`xLeQHJP87e*?jg%YMZf5+(jH^zuF*-NsdPfD)pMpSNsrElfM9SXV9&InlRh?)`BI}8 z@K^$&Ba8q!ot=FAo`7>W-CKu#w{RO4r`_p!mzC?7^XOia07ONFVfp zPQC`3;>rqKtV9`PQI%ds!;knYYibT1$U#@h`pCqE%#;Q`%MvjqaepiKQu1U|QyeS; z437d;UM$M=X7c40Y~-p|)uc(k@7GrzP9foe44;HJSx(`<%Q`6t|o z6d3C>Qh{u}1i=G87arKtUE2Xafv>>ih)gGlelENdSRnRy@T@a}FB*jtJ}uz+Lk%x2D#zGDnt%XHFPoVexd*svTkmD8FYNTZRAd>^rCxLtrh((}z0ak7@^;d`h0S7xfGWTf+SCN+7Xd3 zi{#4#^fW2am+ApwPy&*CT&RTWvYoEtdQXCfvIybWGFk_nPO0@e7Z}G3o?v0c%3r~; z=e&1EfZ0ap>SGy$u9^eR?Rn05T28X27FT$!IS9dMaGqQx*%{c;Yd%xuM#zyaZC&jX zeqjC2P40PvnRo2j4S!nznqY2^ftuUk{XirjzQ9G%cu^!@T&~q~_YM2SqB&1M40~R} zh^GC7d2R_2st`Z|Vf%D*#tVOiPkdWHt?Syhj2G-`UZq4b^4Ss}*6tziys*6%5E@5k zfSkniMHO4w*q!WvZh#v;4}3;90p3Q7QwP!bM|Zb0P>`=xZgw0-F0U{7#!&bFOvIZ5!Z&Y!lmyrh2)byb%INxq@3mxuog*6cbJabv>Da2N zmpw`W7a~%tNKKB6VxPwxd|B+kgYUuCnRTxLLDh!uHOe@V5-|H4lhjMr3$rhf26bR!+Nxqf8!1vxV^Zp)3HHp;SW`6*#|F=B#s;Vkn@JS zVBq-?inLbB2Yx(C;B_$H(0rHV1;a$-x9TutrPhAhIA$g;C_9qdg2H8zR1iiidll~LvIF2bxZmP#y{klO~O3FNGUTp$T`GP~bW)-H<}Byq}$2gXfg0Mz2#;{2JcsL1VA zuUZ`AbME308MMHAq#b#oV|8S4wmVn+9F^k2j{=bm{~W0`NhsGV_eW9UJR@P(Fk;9N zh031V9vIVQUs*WLmv3I6+LtaU;wpF~|E8`Y)(MM93KuO4V1p}a7f6WE_#Jgvs{KXR zG5?fecs+%p9}BXn`xR*1ekXYJUvLYF^oJmixvMrSv=?;Rig*AJP_If=$uY$lc_Jdb zqow0R+NQ~lvo0L%A+5J14v8>CmRv&udBqZecQpBS8|o^B4X>v9M%ko-jfiMg+4SBd zL9^5#VBmB1=UXfSSK!uBBJ@5fkd7VJQj|d3Unj1DdpAKWym!T!gQi=JuPR3Nj%KIR zvcGL9NqA=^z;i&>EvzE_fK^8dohB#GDU=I0o$@ zCWJ0z}qpu4+7~n<=OOGPZ-cI zn-z?7SY|YEWh_` zM`^9g_3%f*%ZA1lk3y|#GWT4OFZ!5bjP^EiYAB_Ni|{Q12@#V25RHa z6QEUUjCn69A2!7j$c_5>ZT78kD@s6_H3yW5A8C71T(};8Na(RT>M&MimG`%&HLHM5 zW}!|Uc4&X-ifOzxG&mB>&2_?+Yk@3XWTsrxn@ z1;c5-ldxOjBBl9N@}d*rqOB?9O`vP)f7y{sDSQ#5X*dr>G_O#-5sH=2LyyF{GzI3x zWSp)#)1wOJtbBe$uuZ^uFVu-rCYMh8HKWYD)p9a83#AfzLT#ZDw9b~3h2pOh3MnYj zZV_C3U`y?iaW~^h6Uf6=-{6rzr}n_0PR5{;FJ z${)wRQ(dEcZ4c)NLr_8otl;GY9rJQEjm`Uvzb^+TrkDHGsZM@vAr$>>v{EZ6U*3O4 z;e=%{DCrkltoLki3AeRmB%G-`qJ><*R+u3c&GSSbQR#Pg9rTWbp*bX@>*C*P2!lI< zAdNZa-?-~Q#sH>qP}yCeynq+~rj`A2h%_8UoA$!sgL3U~j~9=gR7dz{!z9<2NimP( ze~5u8&5B)Li@&LRs$M^DoUwWColw~zku<*{73>8BT~x(}cG>|AHkuzYglWt|EfVMZ zCx`@p@DJ&^V{kvp_oxzyN$4}`)dTIp`8eg1MUQvH`p`wE)Hbf|$}u?G%2(I~N1+Kb zAOmEacwM_thxf1BKIA^=tq4gP5FQH*yWSX9$4Ch58Q+#CI|c-ET!jjgnD~*n8NqlH z_vdg7PUwitl~vH$e!yt-Ry`@IeE7)=k!eR_QJaDJCwUtR9CyD}@aJ3y$*mgC6>&~Y zoZC;kmKfAelxXV9PzP}gXddbf`jFgD)!;~esmZL*tWm8*e?Cl-zACT^h=u*Z4QKqM zA@7qPIY5(df5<$UfUSSAFY&@6-WGS}p?6Cey%mvOP#&3YrZsRzsE_>{U_Z`2BK!-D zdsgON4awWzWD18KaD}OYUGhkoVG7-~yJ2nbQjKM5gw|1;`+=s>`601X6n_wOszHiq z@Nbd}Q~j<}cBabLiO2n+%`=JXq;nk-f^;7SFZl_J+wh_5#)AnI01@7Xqf$pRNl#6D z|4n%%iWRM$*X=kPz1s{}MYE*VnKh(F>jvWbgrA{43rb5RiBdYSnn4ufn2=ze&rmI1 zslah1AR3oyuc;j1jEnx`^2J0q6Q$vHep7L)Mmui0$-z%E#li+?!;X+BlRc&QZrOQ- zb!5kkI>hm2{Sm)j&V8 z^w?-wkw5J|Cpjy^og_@jg-) z+PV_5opu-+@@KI$hi+DZ2ATrfCefySZ&#Ao`b zx2=JpC^OM`<69Cm5pKs`=S_=M0;@o!^e@&F})1wi|p{c6too=Dkq(F zX*1zrbP4Owy8<-T1NuW=L%1r!9UtI#B?w)JH9X-G!500GVg`}6ZIQQ?41?yR`{v#| zxIKNl5Zf`50S0I<`X=;hpFcOTeO_alRx0yuu}S}4-meE&7T|t&+uwW zrJfQEOXhumARdTUYKiN{ELKYp8meS%XH9dSm|9T3J*UVkuaaB{oOVuWEEO~!uj;$f zdVob$j3u>bGdde|J7478EHhp_+~rm5;IcSy#qFS@hb{kSoc#`78!&x`N)9^z&Bh5| zYzP|uBw>Lws9?|AJh_cAuVay9?`M>)Uf|D*jk5*Y5+1793J2Q4FVmAA;R3lvur<*+ z5bdo?eP7?aakVt(eHpwJSdd?Lj=PzO#--;^Se7oIeNq>K+~*+ulO1-FT7{JCJRZOGC(I!q(Nu$*CZ7!`TPYH#WyQtBZ~+fMGvNKLG3dvYfOhHhkq=-Cj)$Dj>)S~Xh= z6WpAsa|$8*$Sr@S)x2|fIg}up`RTj5I++XUVheSFIp_P|YV56%IrW49B!h4CU@%1} z$Vy-&Flz{6=|c@wy!0^r>c~LXT43pWy<%tpoOFk|zD$#@l(dm6?c`GEs2J;o5()+n z77}JPZ2|Twq2qwNn?rBA`C7s>m2%m(Jh&>7>m=K*+S#OVitBih2sbe5C>?bk9L77n zpEiq%Ibh6&&aKDJd{{w>r%C}GKpEO7-`)MGSx~mVGGK-+987oRL%;mKv6klYXWVjE za2>Z&p^o84qhvVKf@)<^A|??^L)0`QSoF~HG3n&P00v}F=>>KwIE7GOB= z0VJtiH(|Tp`e+YEqDf>?K&XB%B({m&k1%GYYP*gA=@>>YK!NDu5D3E@SNT00Yy7m| zPIdgR<3hV3{Sy4&*_~M=9PPiopbTz)iS|^{#b)oNy1*ge4Izr&u%AQcoSmb!unRX4 zmF*I3_rvmn{l~vF=)?g1X_Oa$j$e`!y+%9;0G>rX+ipq#mP=W7Q1aoI7O}`#5+A9c z*O|j2Y7~nGv_T7F>v~erkM^7WWX@VwyAR74c&^E1`m;S?5Z^u}x#e7%r~m z&!)&Gn*EbJrL-ZcM>_Gwz+WJC5*xh6Jx)&NZg${OH=fR5ya}3g)Gy3ib*jx$8TV8i z95giNM?!BW)EHY())P()`7#bJKq~sfYoWd$%B|Ej=RJZ#LvO&K07a7WmW|;Cc$$zc zMzNKuF^#kKzXIbVLxByuIQ$}Iq9b7iCEB5 zXQ}Qc6spn0yjoQx4yEML3RcsuSd@4a*gxCt)Fv^Y-yaEUSS>;Q-KWuhEez*!@(i;H zGA9gM9?EMsyXzVjzh{wd zVU@^q^+bF;;0-U0d;$NAxO~74Sk2gG3TaqdKIJ||M=#`oq^e6Iquv1Mz|oK@BaMuT zPOXqDNd`QWy$kugGoV1mmOvVcc@PC_O+s&b&cyg~Y8P4^#+`dXhD?A_M|}Xf9jf^Z zEZo>Bpe_>qAh}6}mMa~V5MO&o`R5tEKD^=FQX@9;Gg7wNY;6w9;5CEEBiaWXDYZUAusbzfrvk=AVEch|s+qRXb!=7Q5jqrRkd67MD#E z>f;SMkn``dL-=V3Bw0i4qq38^?uf8|Mx1v1aXw-TmlCYI7!hdhgtsI)OR9N=k>!@9 z^d7!8e}tin!<2mkusXB>IZhD?jEzL0gAZdgyT%?GmF~W!c7nWi_BK#&0^5k>Sw=a^ z4x|Ri^V9%jAhx~qlp9H!KZSQ|{A$?XS$lxPi6$o|4Qxa<`Fl8VmlF@nrr|_Xv;pl3 z>w3`UwJutf9;SO$4L+DYkuWWmbt>a!(@>5&@}<9C2Zc`ckarq>_nmY0IOHEcy-LBX zQO#?(WH;x=nSp)$T#aD^6E@GGzyZ=}`%^$j<4o4=1Wp=j#)(oHmP>>rt$&dYU5RL z&A-B!Y)qqC6$1t+0tnS~9(MLK1?I2x-B9L}&TO(^VDhDi`m^C+E17c)$n|r~a&F05 zq17(mE4fN+#$7zrw`H0^s5u67edeV!s>j#f!nbFN0^d=X0STlv3OeRceMR?)yKl<; z$@Mtl@~*NyxwI6r42?<53zZuS)+0HAC+uXC+f4p}NNjWvkSIdf9q29K`&n46wv$`)1VW=c@_H`M5dGrHEft2TTlZfV@R=6=)oYa8@9s0 z=|erIw%pU-8s}0Vr@Nn#JjvXV?j3-U&1?=ZlLfggppkp>(ZdJ{(ZFgcRYf0|SE0|L z>pL|?7M^Yys_*K|a#SioV?3!6E63Zl)}3`KGX$5N#U&1&{PWIx9+cgmgnY6>H^uao zedJmF1jze=OfOs1ZeaT0_MN-QCF^DC=7v(hR^`PZ@2XZT)`fVA+XmW7e~hS!Q&l=? zMv)hZc~LCrBNuw1XN}A>QqaE$m$YVQf@el&vq*NyUlxW&8vhpnMnJj0lwvepA@oO1 zJtzCw0gx|MoGVi|RwscCpQHR*m=IWbU)TB<{1s4u00004eAx$A?3?nU zyrOi+Iu^;^*bE0fPYLl^VG-0_T=e|>ZMiutS%cPYip9Tsa82N@jRT-yzrhrfh7@cPJIX|AP5N05+?bSFGm+RSu+UC6C$USzPv2G zcQ5l>bz+0s8Sb9lO$QjJuocnO1h}F{jQ1!eZK0J$mW@iW)h;Mh!L67**1qk)nLg2)0@7!nIVzWO~mS|S;7P~2ny3`&* zsL_b4b*e!Ni%ApEoz}^Lk{o_MpU-bJ$qGXiDf3_T0@g~Zqb6iL;_ZQ1Y8C=ETg1cf zhvJxROydno{UE0=NTLW0d?3VFmP$--3bXZnhB z${!_VeNmzoeqK^b1R$xWCrs-KF;m)?bD!&^g$rS)38#vQ_B52hAZ{w^ttdJ} zHI6zD#&>hC!wVnlId37v4C44Rj7!OE*vABsR$-ohlq}jBO-5Ou&l8h^8W|Kif+*#X zh};=BN8H>uvrltY(*-;xFt#{4X5hv<0-JsWH~=1WHrwg<3%}pQAFj*zbYy9KWk(vl z4I3ZEfjx8PRlF(MZVA*6%j+?7p^=T&m)#;K!O-mpH^H;WY020D{T|T`b{r}T`SaAM z2r2x&A(ii~+q2}xS#9yj1!rKL5h)nJa+<{SYRwi~U_$hgBc=SLZ@Z%7DqnyNaKsYC zi)few!;5G2{WrDL&r($JQoQl9Ci6sZK_`43fhIsf3zUowMlyH{PTk~;@Jrvt9xk`^ z_XQUyO(tnyeutQNiksqK_ZHhg9tBSiy;KQY7fL9m*#I@l+zxAFmzemEFD4L6F!<~L zBmp?^c>xj+_h7OJ3_s3F5rn(eBf?A)$#COnZni3J46+q!M6KhrN$t;)03FriO29CZ z2c)k;l!mk-CeI=#ms`0a7z14^DC=w8jKDB>6;EvOd@hnY&H+vfnuDM_(?rncr~thS z`_Ba$i{FugMjwCDda1GHlZGap^4GfsxTk|Gf$?$EcWXT)!_5U0{7xwn=LP{8dcTVt zBZ{1q<3(D&QSu{}#L1H+eU!ilnRy!_2v@@mMWn94))WQgdr%<#&zY1&U^X)s07x6n zDVY=0-H*%44*;P`*fnLKYGC6r$E^nA_gMI!?_?q%C=bYb#7d&uC_<7=LQ>hQD?3dj zIfZO6sQU=u$v;-M496Hl)PD35B_Pqdj_%A%a9r0`t|d_35{4}AZIvcR7muNlJ&>WF zAOURuVFd!hmj^pl_e%70GB|d!>h20>mq9pC|K(W>e4KESHW8NYv>Awi`bA5<^f~#n z(uU_=0v_&R2K&p7=HpH@nWM|XYi@6M59TfQ*HfD&^9j9cF;ak1z{Cb1Uk%iZcup+|JT9GUDc+(u4YOrmz&qoh73uDvhhyWq+_8RO*VS7a3P*?qaI^f5+ z@j)z6yRtZ#CPbKe7=~x~Aqq)M2UENL@lyTi(+{_l+~sfkn*Z!N|LhkU|Ng(DY)WDd zknYg65iPGoCi4I#w41I*%Cc!`c)c!A$Pt0Ow%wnBdR&7(r@ixDUol;%=I2E zED#he?8{Kx1*oLewp2Ku1Lc}>tx?YnuFyFVa=N6%h4cWFxzeZE{+_`bOm~vKRC?1@;c_ zR|TXd3P)mnM%e+#e)+(?0qxn?*l=}t+5>YkyP6g#zud5s%509Twt(?HSC9xpG5a`( zuwXzUfQp?`2I~pSFU^3jAOf?!f4mU%>Z><}G5oaPvSbpijJ@F?nz_Rkci$DT5G(Pycquz5`^b z8y424ia5cc8!0exoa7)?PWE28ow&0dCD$kP2f(H%z1Oyu2V{dOs11GZsJ!#OBKUn6 zVj0qMwX;MK!@oI0ea=L}$<)EHcSTsIj*C5Mgm*zOnjWcQK$$G3yrv~aB4cxh-rr9jxV~HSes|DtyOaX6GocTq38!d z%fYZ60Upvwh|_S3m*Gs{3KLt8&#-@^~yYlqRR(R+ZtQ4D~5$URyD` zv5uv08#a|uw496s}tddkF#q49!$On7Sok#L zP3g8?3)D|YUboZOOM)3Lt?XELq*SY%^6ipiVONzqb=KgwItvOab-1=52U)I;aWQ%F zplYvDdHB}g>5$mNBjC9jJ}OX=t(5?et=&Vq!UaOzwqWZ;;qxD@eMzjnz%D5DVn8KQWXp#>F$Ksy17V#P^=cd!}^|C_sDx zl;(A`%;GtC@BbZ(Wk3K-9$fk~8+Pc^paPU@jSRZ1fI<33#cdYI00002Fz=cS zs}bvJx@EzhprKG7piqzC00v*#Ng4*b9T4Wsjpo+W#kT77eQu-H^^!oNC~tdVMY|_0~}N;o%r} zHTU5`n&2LH7|ItcB4#bd=G2&toeTH?yukL7ocIjy4~yMlndm>o@ftkkw3r^r?j&GfWeFcywP(zTA3(#Pd zC>y$#y$7hVofQJ&gZ2WSOchE0#-r1Elieh{qry`%NG|GP%A^x2Qwi9qp9PCuK}Vww zDWWPv#@VxRUgKt0Az1?ZeyW9gL7VeRWt?TKtF!vxQs8<4VB+jKH6`OS|9!dL;>bVt zKkT=Wj<4E_&HIK%J0$AcZ(knd@x5d+lJNa;^reE&JmVupoNjH~Tktc|X0@xHFdwB| zC#ZS$DYAtl&bt#Yo4G4NGBq8hnt0_zcg^GEcB}_!kz7@^)9TGeQWic)*}B8(tLmCvJ4yo6!e`6S zN(ikWAob^4o>vKF$NFHQ#H-+3BO)r5Lo1i4>aJh!M3ZJF16?u_*(K4M_P;r_+pUGJ_O+a5p0gk4e5M8xhyp`i%7PY__>L!@4!1bXp21&Zr8Z*6E(%`#2xSQw}PmRuq2%sN@9FKc$OG`TY zOds#e15ykKnT7JLqn6bFFy&~ z!_<;|n|C|RD3i5|j4{>XaI#?uDwnNo{O@|!q4)=%Qv!qR5k3@FY8_(@wuB+-9FFWN zvr=H(&ENxGMiy6YLeH-c0!xM{zIfigMtMiuJkF{ipC96(sRtPunX$s2(g{L0#`p(4 ze;VF_JYl;#=`1H=6M0INE)BPeD;kZcNPLhdNTgWX7Ot_KnJd5*n}Q(@I>=NvOHVVq z*@`r5=;*d*Dk4)3*bKy1*`AmLBWTLWS7&Bu#DK8fUfsMgK0S;#*Fj0;Z`SzyWRr!Z1PO*AZS4j@UG z--7!l@>C$T!yH4_!5fG&g?1@phhHo=Pbp%=+(tVF<(YF|1>>zVK9bc84CCI*1CU3J0AB8sq?3`@hYG`xXGLv@2Yz z<)?GkEK>(ru=zQqRalZijW_bWIfsfbF}_JkFs%3CIO7AvjKSK8;?7u@Qs# znL*r)j?hm>0!b{gi2Et{@vQgEH;4cL02ic__|Cg_0%0?j&q+jm(`N2GMKFFBJ-F0$O2Jjwu+N4V*}Kvpd&abSI=}t)Iep9fk_@)UUb+S3p2YZWn(dqVeTL}(8cS1>2e}>0`1XorZr%OGzllKHeM9zx(a@F`_FvbD{XqGle z+)Wvc4s&pajFPZs`1JqAm*)-}3vrF97!yW)PL8Eh3Chl*6jTxEC95;k3w7L-Nb(X5 z^gEbM;x;2m%(n(FI&mGA%jwjnUQq2Yk6 zSFnW~(4&E!L-2v9?C-+SX2M=H%!wZy@I6YM{Kl~bmYzk?{TOwWiU56&pO{x@MGAmG zAuFEF)1vy8l6@Q-46w$&s=r`zN?tj_A)xogf1P$|5m~a_x&BdR0{dj?mJXN-43c<{ z_uwX)_cMClL>34l?4$6MU$mS$0~Bv6-Xh=Dn`k+3F$~y$wm!&xRR=fG2|s*|#L$0^ zF~m*<1SvG$UCHH}%Y)eTgs(-WGxkDD+KF8!p={q6O0ZF_Cvex*)1oc@&CMmzQFpw1 zcX-i|Ou?HuSBa;<6g{Xt^BJXFhT(2ox?I{x9f@*g59ACKu+!?#ZH{pV2Q*|4Hegi& z#PIFLn;QF}Il%I3cBO65r`))KIP5j% z%ksEAin5*fFVBwZm;m2&5NJWN2%SSe%G||2(ZS0O0*QS&Mt(D9W4{%|WcOG2;ih}%#`$=2+ z@e3{5Bm_5E%Cb%>SHq!Mc18EAHWx~)BM;(Y7WLw}OtQ*9F!%gMk}9>_^4LZ&AoJTy z)Og^*5`Mp&Hgkq!)@Px?!TI*Q0?f&BGDt&_s_+p{oCkUN$obw}KQV0>oP0 zu$F7;>5l|an+i$9A}+3#h6efeSVrbq+Uv!s0^`wJr`oDX;3D^_-5MBP{-WZZM7EUf zS)(fdLKFZ3Bnj&5q$4rl+)LiravE{FnN}}jy_y&W2t$S@ zbmXMcFy8}N>}zVeEs;tRyzQ9+xRN`Nrk`aqPZ;^^r-{p%0wkkDT}k%G|M26_N))TMC|L?Hf`w zH}^k62r3!aCop24>w@jb=rDcK6cW-<*_?fsOMqm42IK#Ug~?ZIykv_?VVl#wQO0%Q zR^W7J=S06}4Pu4WzMUDBQ8swhr*exM$ujhmK8Tbj+7=T$O2;iHPOqO$WO}8{|M;uN zXz(Lw%na^_2ak4o95Tl|uccI8?oK2~HN4k(fw3-3;E}fpZ@B+iyDfK|7n(D-!&4Sj z?1y7B-^^Y%^A6Bry4@@+gQnm=(RU=7(D67svsIgqDvGy=l72+A!E+AAwBCO*?0HnX_vM>r7R>2e28l6@(*~Vuf;FFJ}fr z^86|(?zfeH-R+B3;ptK0Uic&|Jnhj0mr6g@Yr8so`kM5dI zK)6dvuzpG8^nzGKk*tc`=1eC!r{LqW`~Q+2ytfC3L_TN|!Vzs9Y4?XdEuVuTBQ|pq zJag75zn+GXm1vslcxXj7shi>|J<)*6$NwlUSL+#ZY8BoKyW9&z>-qCOJ7_vBSM5}J zZXWUxsPwU;?vpcoQ$}sUKRL=SJ%|dKSMSsn3k7^AK#e0X;On571gaF$#0)D=rdk;j zq0=QM-1Qg5b;z}FH%Ca;P|%lOg)~7zC!kZOnU027P~6LWP4KA&Fq5|&m?;oW#~`(C zpdn~CQg~yvwqO(R3yNjlu$mPvje}Sy$U5(o0{YQhFa7IBQgk!;w|`FAaxLCkR5T)6WYgLh^EzdfSU}U!Rkf^WP%1%3v6anX!}ekIuXPS z*MJJc0Hi2b!#DT`B*BdYiF@|+s!lu|u30rHXb$&`2MWYo=K5fVhsdH-FXjy@tg1*y zyfjX5csw zGGfhaf`%@1{@M9vR6+aAh0hGLd5n*lfaGo^dLpeMSpWb4I?q~|<)kySMt_R#jHCzv ze0A0a$->N!jtxq@^nxa=Sd=sK4qWGfyVwEDH0_5?w^JczmHr?xnse5b8bRtmd|l|7 znf5(nUx8UcHg;baX3%I^zR-I6tns_Pp%DvFDn-gZW$*x%!VInqSfMBv zBEp-|6}}170F=?ult;_0>lub7tY;D7#OSn{drAIhx9<<5AhXO; z2#eLkI+-FS@pASqc~>l~>x%%9>zjOWC2D;@-HN=D1q+w$?m8J$v`XNK7X6X>bz@`z zitFr@kN1u9to>5Lm(Yhrtq4P}>JC$Sp+_TG_y&LWI6GfZBE4jz!Kufq&E_vs$kts|=nXw0wk zd_qv*gUZqkwf`WCqwJehn1yl?6@ou%@Y5K050e=xIvu;aRg z&%6Jp6HiB6H8@#-vy%4P>;~iI@^jUM2JahKq8+^&0?d(>PZc?W$i*z=mIVq*q)}X9 z08Ch|iV?a_apbicF~V4RE$bQHcXa1Lg%5c2jsz6F8YhG_A$4OXxjziYzID#gBT*~= ze25mOo>AG2%Aiq|bzhXkcbJRfHei&M;qvAibQ|;VdYK?Q?S+kD6MqGz~;82mXX_%?wGW$n#P;h z_l*CfQXMUy@5@9bXznnmB=_D^T$8>?nEj)n`2(fHnIwNxq3jKS+T+vc_S8x`-&qu- z)V@=kh)#)4&}&G3XxZE4RYDq1WnNE%5R%z^jo`|* zYdjx~3u+5B5MM~vZ#N+jWA1f1emfM$QtnK})S$^+8@JRtog`5plBUByqsjaPV#0{{ zA6bXhn^H`6fG|VSDlL^`7VJ$ZIcOqdQ`MYc9C^JXM_}bU$K}{%j3wyB=h^hEBcpT| z(Uy&H&}>m+HaqZ7w;+lp$p7dlUA#=|$idO_a&N5o`iV*eXa~YS1v$o_|IlBn{aFgu@u2)nq!ni6L(A}zyuU2QP5Z3nBK(!eX}^~ zQ|845zw|(YyTB}Cg9MF^%N#jJw*}W9oyaGu5k%e@S-7g=DV{!2N~G)$nax07$|2W}Q{2UkC=)GoM}eT?b3uK70g!*o(tDQ+w-~6x zB8YubFRhjz3ucwK7`!AL{olV~6le3(x%A?vfG9nq+p;nzYhw0Ln$?_KnT}Z|bszd~ zCg5LM;SokzxEvplh4`SnB&2TQ{Lz)z42MW>-)lfEWnbIg5@cgYD_>#8!jXxu-lQjo zr5gsXZ6J0E5-CYl0hCb^FyLa%>z1)E1CcSvM`KnwmNW_f0bT+tX{t?wr>zr@Dli*H#C zXi%{pd9=WhU2xriiW*lpw;ixebawG-+J2V?!ufXSzGz7+`8s=K0h5W)n1=}ib#9z5 z`jCdya1JM|kE{i*Old&E?R_p|j_n}R+sb*F+gyLCb+iYIm!sBj2O-JFj6Q)(eWv`1 z0Q)$;vAmi?5P4cNb2wen4)b8G4TaljB-~B9OhmNMizi;YjkyD$>HQ9$YEDdmhS?pZ zwAEthlt|V@;Dw`HOjP4ccTXHDwWc2z-H;UD0SQ)|a%P0m;|jk7Ar^t`&H?&k?R|<1 zGxGy^=M}PTxbgcGRn)v#(npJy&U+7FX)cg=m3=!a%++fMp+Wi2&Vs3T~<( z=;qm9PpB*Ewb-gp12Ux>flC;bZPrr@_B+;hkB&VHEY&cnmKqNpf?5PDrS(vSKcEfh zXkSU^^I%{lA%vyGh6fLzJD=_+R?8{Gantj+48k-(&grdH>5|loDP{k&)R2fgac-pZ zHNL^jDu+NTxGKUc9JHItcq>X`oVH2`(Mxx1R_1E|XWhTIhk+N8Lh#i-V#Y(%ZFY@I zJu{Z6W%^aVxjU@WZG`x>&!*-xQSu=L?ZJd1`G0qu^0W-d05(RcG_Zg%e%COJKnj@M zPV%_o_v5z`aX&Lk3cyU-f;kK7m#T}O~NW`4PfPS)Ukr)3UDCnU9q{BWi0T( ztypvT;tKTQ;G_$X!79q4|Hw>0PF!jw%bwC@g8kfJ}9xr&_AUI#_zZRPcvlghd3;Et?m3`wC7sEA4Czh51HKYqP%7dfXQ5S z5no*2J;1I|UaLVaDjO_WNwQ6x%b=oEY^GV-5MFu^fpd6wjY|Cby!s(Ca`<0<-Uj*e zkY+pw#WPmz>xkmw)F%w7T~W|6bMyJ7M_^u$Hk@QW%Ido-zDF#M)80|Ly4*43p7bvS zTutEyBS?Wa!jf~C{FNc6yy{!%B3xZt zp^hJ7hN^vX80b@_sdZ>#;=#!|v}KuDxay1;yd6N@Eq58SHNB~NKP?goV2@)(KO_bLmcCS>gaUL9g62fza4x&0TJ~ULySFbGSHd<66 zCf^uA_Xj-EJ|HBOJ7Rsc7iL(4(B#{vOLv4;h!eL+LIB zIe5TIAdZ2d&zVFIS=5%!`(ZA8=WEit7@BodH9Z|4+$vbVmEudVsv^j^HpxCWKFD}# zTiLJ+|4|i)bX(rZd9v-{~4zI@113F{p=g&-W7@c#aFfL5px*8C0e#S6VE>8q!UMwaL%K}Ra~VW?8mO%mO9_2hvM(hEzs=bz z1m7kH0-ux^CW}J~6%$K6=_(}jmS>_L>>9ol1OR>%hx2~ui6Q6276*ikik6DPTj?KG z2mvk7U|6yNC#wfvp^rYR`*FK?%Sf5Fa6o4n?if>moyI{WsSqr>hh41p5?FgNW56s6Algrc_0RHxqqXdq`548`Hlnn93b)`|H9(#QOTjjGtW^Ky1Sj6ulq_M z__n}1l_!J!y}-gV60rmkId|GVB=1-;6V}2spx%9{%(|7Y|FN?KHEIzkTUhP7znena zM1L3qNqbS?7oyfE*!Z8S!Q%6UM5>jLbs!UM-U!6p;%0hk2{6*VqI&c1XJR(J`69=l z6MYw_D7t8`p)gG!Tmxi!OkWz^>Tf>D8FNHPWj4iI&T#7_fu6q+WL`i zTrs73VA5J*Petb@Ebkd zg0@wz!XdXjupgYO!WM-fb5W_nU!<)>-yH0S-U{ot&rnUh-~>V7W}9M;7TIf6XzX=X z?^{4#V>V-92Pyb(P zepo?U$(;a@bD#iDNvEF!yp+66vyAi3^ygvhZD!h{1ShDhh_^IDs-z-McwzPOSF&c| zRNUbO^4b^Df>0L2r&vm-R3(-LO=;8P%8~<$Z_I8{NXg?345P>}NR^$xh>Z>M0)2`= zz+=tKX9N+|x=V&;*rNqOOf~NJ}xlyu%i!>7*oWUJq%u@bp)h3kQJ>iN1N)@2fO+d zM(%q^g$+xMoyY{BWd|R93eUW;F==R^lQ9GPVVs|@gu-H0QuISi@V+Mi8pJeppq#^w zks!OCw)U2+9FnsC92v*fCfrcZayXtNvPqYCxi-kt@#SMYstl^%&)LIUD<`CKzu#*E zVvA%z5eX$}m+YZ8djVa_S2q%33xXYHygU&^!*_g3Kt_v*6K@=qR^yD1K)UtWS64IR zysacPiZih^a)%;j6SEFIv1PvfIO?X~!tSENR|qr~^ey;Uuaj0+Lce)pTQD6eFrjg# z2LuTQd#Gmnr_a$^XVn~C=-mJkZ&(>hK2mZ;e*Sn@^5V(V;&e5%_?T1vr8flH)$bnF zC;HkA{p&9V z8mA90=^(j<-2aJmcCg}w`oy`Ma{?(hQ6Hp#5jOes=;c4vj()$H#r=V*)`)8W03QAu zhK|OLHe3nu!~&VQuJ|KGibSe9X>oopw2XhjTsbRSF2})qD=VHXg;!B@0=1sR0>YFj z7O@r;f$vwuJ_4Hn^6%P68z);~uApO0T-Uqo6Q#+{5b*bd5@Y3_vg6Dx-@U7w?dUJug%NC$Ce zM&)ag5Xet-{7O`|j#e*7e(Q}%*)-H?=SPDj&1z*pIIYi?182l1L? zf1Hp=z=y;IAFnz|1f>l)d46oC1owc^X99N9;amPk1o|PIAp^$iTWfr|c5v*#Mp#Sh zgxx&F`AmaxJWc$Z(jgXNzl^!bbYs|s<({lrVLURCg|HD~mxWk$94m^h;(`&l`DG@H zn1)4NC<<@=^z$;kQz?jp?TSVgn?$Ubu&xx$67IBwmS2o&^&+FK4Jp4pDv|g5o80JA zUCmcAAA#+NI>e4j9}$7z16drbtx-=+640 z`_Skm@I2{;)x5Qd2Jii7|85W9Upv1qY{f^#xi~0r1~hhSLsKi((R3wR_!G+dr#0by z44Fub@Lt_z*W|V!c+-n0+3cWY@m!jvt2~D5^yC7G1}`F!L>~t`G`^z&Adn^9i)oi< zdV}KMCaQP{oPwGW*5{}1lcO3fh3Xxj0>2%rTx6bg{V9ybE0ZYTR>phQJi@}d+kUlW zB>o#3^xfEh$O`c9od}BB*mRx&+ZUf2p%MZ^xani%eTZA{6*Edb%(L_F@^mH5aaTB^ zdN`Jx3ZIo?^WNN4SXqd~5N@W!U5n{F{C*(R2J1`qCyg+3{7?zIa)xRH$kLF~A89z%9 z=%5^$daQe@osB>s+o9L#w&oWT(0`SwSlx^PluFQp-|OMFK#7<+vmK5Tcp&&>*9R6D zg6WYVa2d<4VN0Iep%!HF5r8rMTI^|aC8oaULh&j~N7*H`gCpEd;>wk{T$ zKahp6NZ?l{^567fiH;XGwEij`f3@A-xALZ@Q!G7v9pjKDX@>3WxA45|el1D4wnZo0 znIQ~i@r`pvgO7Q(9pgdPmZH+^nl8bF80*PfCTH{vSIeTAo4O=`kDthuH+q22ZHgYT z$NUSqU(5w1X}Nl91k}ug05vpKL3FK$QdiLnjx^L{V7QQ*(a-;GxILLbxROX`QX6|H zW44(cxHpy~fV_vE^Zo=m000000(bxdlxEEVFQFkg^c`Ro zHy&ko8_ZCwB_Xf1ZtQQh8x&#X=St+yc8)*umn5D4O4_Dw>cVEb^C86~XaFD{Fd2I>uWZc{K{x7HHdc0`Z*F-ojEz|Hm_H z1Qh2Kag}b8YqodJ*xHfvge_9Q?noMXP)EdaIR)7TD2V2fk}$JN_wP~}pKc_#o*8@W z$8+|9Mc{;NxIs1OvOYO87T~9Zf8$fdl1PcR-rPG>U(fheHzY}!s($v`^7;s&t7x2A z+)=SR9H4}R`P=e@if@|S;i%hftZDE3}Z!ItsGq9c_`HURitvEc~Ecg zDWmK^FxfQAWFeyVR2>)8UL7|7Wfz@qV4F;FcC{<*>E}_tw}%})S*jKr?ByvY5XwO* z_ToNy7#50~do&g8G`yjr0;Xia-RNFH1iLn5Q|TOY`}OUAbP#PBZN-dLqMKAKf?O0; zq5Zkv1TxCXK_dOnciu<~CHUHAO9KhJPVAzM_uS$$KsfLHTvlIpqmlDGT{dH;0H|P?)FHTPPYRlHGS?rdt@S#i3!5dTVvbPrD~4q2%UK z>W8+6=PD2wSiZqakc)q91Sf=~Wj>NPx-H`uX|JMZ?3Uh-LHlT2<-R9wX|!sU@#Moy z1d3?V@Uy=c*=0lGrl?p}nK=!?3?FFfupF$+grj2N^iVEW7PlSp8GCa0Dx)2%|G|*m#Qu&{296OIXTN_giRig1M9sUt$aMSEExsio_ zUces}Y-x>H0KzEtc4J^XYuFUuIl78tpGZ8GUzADv_UrBYWK(ae3mPY~ql;LJBa~TZ z37YDZ@{;-@u+R=rDO|l;Dq~H9B4h0VwrK4-oOJSSIe@3Fy6(Q zw9W?g#TXk#p)YjKu5wJ!hAYdPJMXY73XpXSc{7xAr5e%~METa@H?8-|M-iSBTdDj~zjIiLDDm?U4|w zfY|dKGL0z+rTmI2gze&s4eD5V|LZ3=R_gmmaXPSh)u5O+g73q+eVwS!%TLnWafo^&69fQqTxO&qXrzD1*hv0-WQlLjZdVztCoWq@?EOF8*JP=_@xV zBn0~yV5Gy_LX>C~0+ceS001BpZeG%=Cq>gqu;raEnY$JPK?Ev*00+PT0n!*8(GBVR zJU0=`;JLPmdk%em4x-uFSI$EwZY?|bGX)Tl>U~Jj;C@5tTO#((m~usK5fUi%Eh+L7_Otip=k3aJwNEqhSjT}mDQ@-PE=yq+t2w^Q1W=lv(N z225Z%QABcFn!WKnX<172`Xu-CRYA!u`d0#%_+kG~fSuEyMs>)VLpAJ!J3Z2J_Ep?J zi9#Vs2sckB2LfPttA6Z7b%y!`UOsfr#csY^WX`i#UzdWWIZyHF%^^y9G#!R=URKqQ zlMRY0K4q!#tJtC+p!0PE86gr!sdKxSv!{TQ=D=)AeHsT@GN*CoNht&0g%D~E?^Qzf zNUhi)pU-K3qjE$pu0jK#2w)D2$&xqGRK-x()lu0kx?cFaVL>~*lqgx<6nZ`M!cG5M z$zr0Rlh5bSQZxDW>Xx207zarUTA(n9e|r~9WRoHXG>d{(5;Yej(Qq_Vuu0j|rBa$L znibH`8i^d{If|k~9nZWSN5$4&aYke2e`1w#NI?|B^$gGPft&b$-?Tp(a)B`a@5ZCP z`{at}t(1oAzq$jWqgJ_A{RV4(zQxUO2HG8UvVcC708ZKOXi@ScKN*<*0%O4$Kw8aVsFCPhTZ(H<{urGKF0Y3PMQbb85272Y(Tw_7_3n%lO; z4xs)p0h`mdn6sW+Tu~{Y+ura3(W#@3eCikj_PU zCjUON(}Xr$0skRY3Lo0~g#-Y_BM}sD;yI5DzyBituQDdc2rt*lugCQZ?663=io}&_ zET}5{6kpVeg$P%gP#$30sx2UsViJ)b;pOgXSTYZ44wlG zUG+VVQRDKtjQnFq!IT1x(oeZA&nB`ubdK=Kf!!@=LKJX^-v7Ng_WYm3SH3(mo`n!I znyLC#um{STcqn^@Q?^I>x#~h(l55jS5@7kP$LBsMq~Yq8mMABCao3&H4e_8a9dM$G zewINdXl{-EsvV#f91KO9{@@9SmNgg(m(NRFF?Z;41(4@D0}8(I55vVKyr(=a+PiAF zoUVyHc8EDEX@R-Df9)D}*TaTP6scMq2pQ{HovB7`M!NjbHq8}#t5C2HGXXG_P6*XX zdjA*{K=n#O@?k~@LI0%FvHs$nAq1zzl>l>LbM(YFCL1C8(Ac#I3CBatV1_NjMwLW1 z^?noGvumpZXGt`G$2G7hauOres$iNL%FidR6ujA|sd8$u5M<9J#6B}SyfL%-4Gv>_ zfn}(!wIO)D*0<%o7e7InpF&|be#v?mpL?7AL8JqhO!Kk4Zj~MdfeIAbXJMuK>-7$i zBN%lVvtxM_)r6GjN!dW}0@k?o0zqk`^8px1RlG0&000EA_oKilDw#SbsYRRs_aAM7ac`s33Liaw^yvXQ zGLiJE;IG_JW-+8@SHdB;{#+ty>Yvo4P0wha?{z_ZdJfe{pFRVz(Nv-9{l zszn&}WRYv)sAT-!a6tI%PvUoq2o;|gc;udgtOT$AG^7qyi@}7FG`;lnX6h;YIkY=c z@O1>p#h)P|qDp!SKpYNs5zotWCy0uT8tpNSk+R$okDBJ!Lb+?LDvHjv)VKuep#C^@ zAHlYe%kNDLnnnu|s*ul?YxTD3uKMIo0^sXOU?<9aW@;`Vym)Zdl&taqRN_rP9geX^ z<+J{y4}8QwC24gvKYV7UCL2qOGWbz0YIP{U=i_I2;<$YPhVLQ_eNwxDvEhgv z{*-ey#lh3#bl^PLJzx}x)VRFq)u&>8QB(MzVr>)Qt#RAs-B-u3FR$%Qu_-P4d|8sRT*A}t~hd+VC)U#bExGH!6XV< zTON@HpVv=N0EQWf8CTQ`gMEH*5kDB*HMqG2`@|jz+NneW5`GTytJM3bTb$lQ%YVWE z^(Xdt1!S_F9Mr016-a@_pnI*Q&@RlRMQW+V`pQ7qfd6HMu+MChAGO!-#(z6rHzbbu zsXmsnIb8Az+v6YvwmpHOzD+l{>oyn9JUj9T>Z4fX^uZiavb^wYIO6L5L%_3w2>)p> z*|@*V*$S!4R?Ha`V`}_=3^yGL&>Gwws%_XH^xKm3aV0j5y1kY%TG7mZ{C}n^Fei;* z=_rTYF}z2{fK|}8uF$-=F??U`cX`WwQNW*|aE@yF z0*cyE`DRwe@YUkks2+27WT~q?(Do)S1Y5Omg93ZWPdqm506WmGnI^+OM0h!Ll~bL~u%PlB2VH7bzkOv7s1WWpyKDnYQ?0 z4K`>$M;=e7bT4;8Pw8` zZ;f{|LOn-Tfa{F)<*~^J5qjFQUjqq}&t(oJ(3A@G)*RwG6H1f~KL-7_m>vKhImePc zFPf+daY=(59g8sHjfnONXNj2=3bxF7C!6BTVg@#nh+V+>9LEg$TeNg5EAZd3kx?3p zQoEL_IRdu4^bH3$J2h*A(*?podyc>Xh=uhYBasDm!8-GbqRGbLRxJ|H003=W;;2RC ztmu+Gd4K|$=gVoFeNF2I{JZ;J1jHXGiI&wiAZt=75rqL^yFK!(hv&CdM=PLbl_%}G zI+UNQG%SRA6cMM&H%H(}tSYlpO9N7J1Nu8Cg|XM8p%h5i2TL^E?cb=}z;u)2n7UQR z#uCuKQNi{1Uj`nkd6i-e6GbSeh>gR}?}<;HLnNG%Vp1JCwGq7PWZAJKD#VXP&cOcU z@@TWIE8ZYEAeFo*Uy#t^Q5iN7I$t#8^)URSXWU%fCbPOgt5ON_Z6@U3C2sV@(x(Ps zGE77a8;hP+dXHF0j6rEW?NXS~FNV=BQC`GaVGZW(@=)wkOE-6{S#AyBvxx!xIIIhx zPE<+=`=q(XrHa-`Bv(b7*9~-#kgLvE62wIE;D7cvXVfi7cR1J4Igwhzb@#eU8kLEJ7bq38WuV z#aFZw^sl3O@~rWc8PpbQH_z1d1~N`pq(FR*!2=GXAf4M$)q^j8&sP1DcDg@xq}vkV zk%u%BM~)gfy{fLOqwM$>9=Bw0PL9FvcvV&CZwH^uEG?{o>l3g7u&Ta31o8;+_0VTgGO_sq1h!V*e@N8b> zXEh3B+#hG-p!Ic}kHEc(5%gzKCrx>*2*hie8`u@WXUJhnjcwfhO+(CE7+WP0WSxg? z>_T03PdKRQvYx13b~eCn0^ond=4S<)L{$#}I6;F{M(TKBuJUM<7`_c*icKHV=D3zv7^ zcOt#bH<6B+5(M2AnpS)kGUS)ih@0z)Z{f z#q?qM?!+~O_|R9JA={InRtQcm3621ENpGk=%2b5MTh6KWt!BQb{E;tQX!Q#&Chn*$ zTX2x$4yW(w{Oe)pjUI}zoR$0tP;PTGFY+r`5bGGuUZ0)cgKm1_NTcX9F8GRMJ(JKtEM9%(Ev7*eqlrd0irb$-Qgi$EOCTg$j_ROwRnZwhrlL~OZN)j?b zlRpxzoc;q+(GrDK_IdtzzlJ?bh5Fy$Bw3o@dZ##+;s}-U$unUYKN#m1|0C& zwjFl$)QU0D2YEkzbub()*Dadx~?tq~!1D@{XbaRdeyWiW7`Q-A;f01sdQEe=>kYY(GmZk)Xt zUM&H(u~*>^8=^ofZN@nrCFrpRXK0>CjwCcnY7NWc17=i9JgCGgaZjAAsMI%T?6#4a zixwrD))bj`TJ&yTvy}`{XcH}wVtu=1uf)3l0Cj=%t&ir(c~HmBZy~%BY^7ge=;N^{ z-iHTaUofk!)#FIwBtOZKIr@49q5A`ZJupDMETzELca@HYNB--}!CO&vx`v|_Ko}sv zipO>y#+-BO#+~q_VSd?i;dmnOQU>MTsSVk+i2_Kpiq|VC6)tE2{bqx9livTa(AMkg z0W8HGO+H9xat?C$B+Xp`V$xgzN!cP-rjrSJVT$LJ^9h0vrh1(4abqYLxv2+6qhmE6 z9KFECQ0VzSITRwUyOeuBDs#dA@@*+(x*6(%m;V1)v1YzWA(FZdE6r&f@0MNaF;qUA zx7gP`S-S1>7L@5m$I(5GJy?$p$Iov0%Aep9dk1V5xT%os|1(L_o${79kE$LLjRqGP^ew13AwCNJKNsM>z~Q`erLaR8E%}<1A)+2!5ZGG zlnuRuYUef+F?=Rh>KKS8Qdyh3Y=)V0-)>&;<8n^X(R!Y&tRC4XVZ>5A{~^BUTCB<09vT4*reD54%_q-0;=A2|9Ar&<66I zG4B8CK*yf7tE{$#9Ir%-koc&PgUM6lNb{eZQoeY+7?^~+feLK`wr$2veNW;SHty)kDNWYVf4g$p^)9E~Z@T`QK+1Pb zwZROcxIzUCG(*ZPAoqXO{ni@&q0@RxGpB^m`8Z?UBYl^Q|HI;68V&7GK>$V}G>iUU zYmUtqp#O(9M?eb@JwB~t*NE3dDb@2N10-nf?1l}~MKaMZ+hkBVy1=m%h6zGQlaY%p zpqKD#c->u9Ow<1`?*qIRlSj`2n!HrGuU;`{4B zj7-MfkH-DN9;V2sRtCh=uVc_!_`oILbDSNh-C4^B!*wvdBKLfx7=iH$Cp5R9V4+!2Zl8&PrZGK>$y^Xk@vWbLTHK1BST^J`sE zq-{X?07>|~R24Ga8N98enE<9cU-QU8C5JoSa!c?dl$nJ#f0>OAWoE^0zwpgn zRL2|yZo)GvaMy{uvE!OD6dS{-v*TjtU9rXL37QMYz64U7J(w6Vrj#=yt*HRT+2iK) zfnz@*AYe9^mo#Qp4^TPpFw+UBqhZu6I3(JhR-8-ghZNoa^XP{IG5$g}JV^rLwy*!} zTGIqu|3*!KZRxjN_5#k`X|=_k!K+O;C|(+QoI9X(l_WZ9)LTH&7T*cOP94e$JFoVj zOej6T|IMR=*y?9|ZjcMqyxZa4loDG|%KQ<-bU-6YR$HQuN5qbl)mIunzkQgN#2^nmD}ee;yv4@JQ^y#VJMBo~3xIs}#- zCa%F7O^uQpppf`iJ92~jS=NxoP?e3R@!-a1?_z6bprLDmQlz)!V?<3+>2e&;-*Xfe z%{goY1xKz67hVjRe%CY}+;uzp)fcnH92z5Z^efGBbM71`IsA>R&R6GUU9DWxTjY#u z8OFY%eR4`R)ZKW*oB@@FQ0}|Yy@}c=Z^c_WG@S4@y=IY+4WiUO4q4G^y#Z8xuCFnn z=O!{a(FqDHM|36749Qt0uNjGl1f$3Kih8#5>FUCNkvok-y+P1<)6#r(c~BkC!#QS% zVU)b2UWyqthKpIQY+BK34H4&UgPUe5DT!A=Yd3!t5LeA`1{QEyLx?Kbl*p4fLA|v- z5n5PWUDr~uX3QJ8BC?~%)Bbw!)iqU&Xy2&dG#z{gNa;%;yp`cT1Aiqu4^1Q^cbLUE z`CL)8+ev&`1`d8bAl*l&1Uokj`-rcKv^-C-6re-4tTy6bK*#f!GwloYI%W>Bjn|QI zvGqMt^5g4rhf|XkcC8K&OS@JNG*qz|;EIa@r~rP?L+*Xbl(Sv2d;3pSx#>!>ZtZtuG7_hAK3IpOC+UpnO<@OYGJr^V#E0cJ(%TiRQBQAZ zA{#svEQ1)8jagu?g)%@sT!b4{{QzP%be#hKDJ_BF^B66jEvOXd>n2wtmENU`iR&7Y z;>5X(hK&0M`X_n!aoRPLy{Q_#dki9BOjxDhs0yT&3XRZToHr;cv%XBgAmz`t(T7EXtU*2=*rGqoxg zt1bUrOe+derFT8Oce*zkGkZ09^5b$Z-Ue949Lj6K3*s+;04|`;qcUNEAE$PYnV!D9 zNJqPprE@!WxwY=s-@2DI&Ee!J&Izv_f9le{qtuKmiyD@VFtBS5bece4OsxOnwTzj8 zc52v{pYT05`)j{*;OqV`Y+3v{QsTyxFKM$IG{ABWAQ~VqpFm_bZHXbf(u^A^-mS@f z2?jK`K2>EQ}yHdjq;GPNUyamaJF=&>MpeEIzD)ZDJGD%r+3!{;ih=!gJQa{#KNVYZD9vQIH*}NHz3Rl6>V_WtnHx*@ zckSfI#$_2z3=s582p1i{(Cm;@@xdFYd7&SG00000FH;h-1w)_*`7)(Q+Fb?(CLS6? z?sWzY?3AXa!%ENo-s_U(-}+3w=h5i^1#03)X(h{aOL9wgV7S9sV&?9wJxp*IVL|kj zOSJE(e{Z@qa?oZw)JM%>HfVsannGis0&0W#ux9H?WuY?z3fy(I*`muKe{OQsj|j0DIv&XrGNpz>rQ#TtIA z)@R|qL|yCnKG>ov^5M|`10+$FR3yXX8^Oxn>68wqtC%1|)vgVxgpq|TtzuxOM3sjd zaqXxfRRYV$2OH#AEX!X;(!k)K&heF|D)?Mn3E>HI4V&}KD4dcPD}el5W<7FM=dPp6 z!27q(e`5i|67FHiAhn97PypWG8(zxkn9NqE`E8`DLe|X*U|Z^QM`z*unm~iI&^` z^Z6q6)niq-eOdrrx2ZXsl_7D4VJ@#lyFNsxvA?Fdv6h?sw!mC__hRFTW_gEj6ObQ` zHr((OX|o&f!@m+;*$c>J{9&QS*#XQyrx~3Km#6|&Oqxac0`0EIaN4V$u$$;Gou!;o zvlDHwg_o$!hLs*=i$YKU5U~u{Z!Rypnrj=A4g7dFLc%iMm}7m`SFa3GTiEfuNY}!yD1tW^M}PQ zCr;NJ5{cJq9jM24Kohbx`voePE+xIc;=F zMtV1blYseIE%9tSJe$FRn8ds90R^X+4kA9tL~H!5CGY{6Yg46S(C_5HT?>y4u&2n9 zyN+)!C=G)@Ff(Yt%1sHvz_P7EiKkQ>C=ftA*Y&Xq*Z;enY&0%xu-$yF^zkVJ%@C?# z9%WV>sfdZZNjAV&<32U?b#E14AtzRAkWIIHdUe!|n0AqFWN5~T3N%)9T7J2b^*T?+B&krf<~tvB#X6|W#aoU>p?mQvNsL#ALh9#j$SjX@u`-{;h5FDTow-BgC&_bDOwXQ+jP+7;9B#Nbz->@8wok<}r#= zE-F^#ozZ_Hs-(lzG(WBpR~HyjlPHkIQr?#^@ISOw);`D8ZX5%}4;AgHO0lkN8r`PV zh8!TwMVK>2tSB!NP?d8;P23b913;dMsQXK2=75!}i!uc->HG01S@b`Ivb^zx~p;TeJ*ckTF&55TbE9l~i ziw!D}^w~rT1!4iU4pMp|HcUR9+1)u`ZjQ8#_4u`PhSpG=xnWQ;IRR;x%qO?rw_<#- z%h28Jo@a|P?4arn(~j_qat?-G1W5CCZdD^W`sN!v8^ofjRud(Kv;j1+l3_x!&6Ht- zgmUe6rK#$G$LqFEa9C1(Wk&SogXNYRzz6*@`Pp)lzN%Pknh6<#4B<>vt^^64+UItu zZboC$Owj!(QED%ewVK0ve86q!)x#z9BvK#x${#kCJEBlA^?qg)u2pf7%TOdb^dGO9 z*FJ`WM^hP@O5U5tn?azUs(F+{K|o|L=Jw%|xh3`0UEF+j~oaYu5ET(Zbx9+s!jb zTNzSwb5NNQ3%(H;hX73RcL22)QDuJ@m86FM*loLZx>A733u_vTX3skFb+k&9_Hwbw zB-+{;X@LTF`zzM3L2m(pA=qYBGfGd;PUk)lBwpvSnmU3|2#8^#*6%-BVHx`uU{#h} z!X@L&Y{jO#mJf@wiGAJ+#ikI+SG5kOFcQ<2^QyX!ObXUW4?xo0t%xDSboloax(o@3Aiq_3XTfv z%dHiHwp2x@{l?V%W5WYCc}Kv`Yt02FA&iPt9j1%6G&0kapkP@? zMoS7p`a~*)MLyT<4II(4&;fb`T`{<1RExH%6F4NTLhUmRvKOp-;QBk2pN!a0>WP~! zkUCarfELIu@DATDW}Q4_&jYGZ zjvxR4004pvp_LD%Y(xuJh?hYQbG8m7jFWEI<0cpBVcey)>Pd^P{Ij4xnKPpbgU6ku zE*w~4Lf5#30Kep+R_|(o+Tc_r7mND3d4OM?(H9uFLBy9s9(o*y;PiKo#LFYZkjW(g z-uMmgRZ(q=amJo}A84(hrZTRH=*g5WwlQO9oynV(g(;s}(q(k1=+R*$&@S-~(&5Fv zw0y>?WS9At>020T&T;d9X@q`nbNlR@a#ZG-1~&SoVbs zM6tt%ID*H&v>h@ECVtXW@Dzs!*`W^tD9vdfnn$X+!U;hIAfRF6qOkY}D~MxY>4bvS z;!qn(tqgpQvE7pQFP=X24Y?V38Mv)2%#bmv&Y4}tRSs#)RzU4s%D+9uzxe5G(~}&3 zS4Sjw%1w(%QC~eL+W6kE*E!_v+CX1a#7?-y27+{d5_~&`staQ}&Gn)Y3N8G=;7#BN zpt(YwHMO*qyz=eNYY>+vi0n^#&ExyVbTY8?i2Xcyj#~|>`cJHhq<7um#l@!Unv~`0 zbO9t|8R}2*AAkhG^yK^gUm4_hhQW}BjQRm1Xu7A%M*XM8mMyH_W$!eX<#N%?aS8+qZp9>i#K)}D zu5)IH<#sgT6UWkfC(3PV??!cThE`H!;zGEIOBkj;N3dSHEerr@zv%M(Tl|8tP+kvtoi8m0G}1%KN8z>*RruV z>2q*HiS+CGw0g;e*8_{VAH^=E7%<}7&#B*Om-&+M;9beTKSTtyQ}rBs^k|Y1OfG0Q zPFg4$151YnYY{Nk7Hog{A_BO4R~N7oHJR;*k!P+V6s`R^HKsr&AyGAx!lH9=f*I$-3kU^ zQIT(5eSn~m;t!aW@ia1h2lXW?dZLSikv5I8s8#HT)7aeXLAgEh%9TQJm^~**-7V}} zL7B12X~fQE2nn(nCluzXRr$qSYpVp+OrP;o|M$m{n))ujP0WKO?F7-e7Siy& zsCA1_O0WMlcxsfCgxD%v&jb7;Xcvma+e;M<1LIGo;7}JHFcuqSb0obI77^zb^)NF( zW%_xa>~NH=={k8n-gfVt5yvmKT6>W&P-H_GBtmA!5X;_-ZJ*QaLFN^(G zaNL4_o7-RHnjJPX3<~Mq z7`cV5Bs&MHfUWeYugneb@&TSqy^rqzJIJ=$lhgG*hDu_Ga{bbp${{NDq8gX(^(bL~ zF2j)GtimRXGq6*QpnEYN7{Uw(UF+FfR*?l2M4hp((i1ST`z7BAGvcKB>ze!u_-F zTVv3+6QwDV*j(pRVH?O~g6Xbwo5AgYQgV~+rR+Z0?D+jbmgil6>@GnjY00u3Aa-)Q zJvWYXL{hOe{N6dERq3?bqe6-(@Pd24<((T9P5vhXXuXPEHP6k&M2opXn(SCu>gdc4 zE5H{!iCwF;&P<#N#n+FT<-sq+9-d;Y2wW}V8!#=^xXJ>W%5wy0bzuPk7`2)fZx!PU zgXioZa9gIuH)cbf7zAc2)zJPa#7A!po*IoqBXa=4(@c${@5jCAv5fshLN0ZTcX9(wTPh%Amp0qjyfo7+)dI05jppg~mJ^yCWFxfJA zz~Lsb!tyH%=;5q~!I*U2e?kQwh`Fo&S-p6vF~dM1^8(w_tqn|I;&Vw+T?r)a(XC66 z2moFe9aO4mmYh*B#&XIqR7%c))d6E;>DJiYIL}*1_AV!EMX$|`AE**(0 zCG>Svvz(md`nsA>cgUV42gD_5+SJ9Ic@8+0N3*SR$Ci{CV^^561ui0010B zK~eEj@4?(ab3%v{Cbg8L5Z+a}F|@(-_pP4LEgpsF>+=%7WxvPY@w;&J2Irm9!4xEr$v1D zOC<+`9~&&knR}Wc*aHsCnkx+|r$aO%g;{Vs%Y*Vr1fWMIE9e^@_phvKeG`ogpv>D*HKnrlUan*rbZ;<|(9GAx45ZB?K)Z z1NO$@$#-_4+uareb)V5I_F;4J5XImW&`Wzo}Q-;OuaO(2A;AGaU5P6Jf14J6f3)VW1@; z9{Xw|!Z2nDk>7!uc_fUN;9O;i+4HZ2ww>Kk;Nd{zQa{Abj8>#3ISOn>8B8Nh31G0| zt^q=6fUqFP4g=Sl^F(o&-+1wH5G#frKrG7kE-^@AzzJzb+ADf2BeY7ftAqGZkV^=h zL3NbXC^~hei={F|BUbRTh#=Ou=M)!hDu<&3!KgC?(;!3MV zcESgFrxcwZnpHf)TIHqWbDa(huknDx5_Q;fBkg%S3jv&q;dm6@CD1^9vf4-4?9zl0 zhk<7f+B-UeFjUTpcDM9a&7YL;YZ!*6{Y}|5=3*!1Nlpr2Q>%r^{M@C9EZ5~)h(3qa7O3~_u*@qi1ndLhN60@IA&=nQ2k>R zdMZFG;{?+Ev|wuOV%VL0lUrnKLNB*Q#uoG}saW8u=W_pf6P+XEAvihCc`8u7+t$%; zk&AJ1RjhSVH+o86YRsnI)l(K9Q^~%ORhFLy#sWBc#2fTwL7M4^??bpas#Q`Hx@l;; z{|scZka16JWgHHr?5YHzjzta7hwkSm1+%h56_&^rkiW2cYsJ6??kxJO!jzK%rZue) zI17w4@H3)vO?F^@(#kllrC#h5py7N*SMmRkr)*J@zNIYP2f1E!&J#bnfQHvibc}3A zcI2}`!8)n5ghVXAkGnSlbyi~^Wzmxv>v@}|Ve1kqzP~XoMQA<0)e8z`q~%+Lx)j_? zvJRTTYUF&b_xzq#lAngInJeP}$)IiWfTgop?2B;lb{@OmdNMLTUTr9LrQ6iU#B8KW z6aX>NMqIRXHwKXwQ+XFe$;b*(f|==mU3*qss5C=kV%lnl?KK%X;rX0Q`y ziK9YWzPVsFW@;WX+`8!MCk0VUvtuFA736}&j;WUsmn*E5_yPTB3J~DG zCG$(uzqq^X@i@VBTrXx7DuX04pz{oJlI=uxmeAC@fI|r3#YLL5w9zI41E}D}?L*Rv zzvZ2a2h|39K;3k0K%j9(NoWVYh`>@f*)1Hezy#;Rxkjm&g1Y#5y%+n}KXFB$Ar4+z z%Q+Rs%%VP>mgI(dad1IloQ)q=2Ug0Yfb^fQU|TSQ1Mc+e1$5pX7_8Y+xBtDP=EVI> zZu?qi0%RTM=N?P_7VT8F3bg@w&~fyg7-PJmJnT2ZSQ>=`=}oP0dXMYX=`IaG#jgsr zG9`54+r_EKt^cQ~uH#W7F-u_PeW7)6xc5Ro8gODkFY0X7ZZ`B_%iE94!H*eL3~xYG z6Db_^k*PW^Iw7<=8A90O>cMe5+V?*}8N15qlu&?+F0Gc``b=^8Cpd1q8y`x5F+)A& zm@hO7eS}VOJM!)x>fh(+Im+OkGS?N|NuDMQG__TmU4)WeB-iPmfN8gOHm?n!CN_$~ z1;5{@{N<9+V&PJYMqRt1+rkYz5xM6?-Id+}WbsE2s~Mz1>#($a#U%y2h^xws*+mKw z`sVU$q?5AEmU{wQ{0ASmi4G|=@zSF!LruDrIH>oJJ|0}6(A9fkbc}g9&XT;4Hx}XiiQnE# z>GKJn)H4|)O6Y`dRFeN9JyyyaJ_UYQ;rUvlH8>9vW{B?q?d{g+ee)~4#3@XdD;Jm< zG35dHjF+Paxk9`9?*y{hGlZT6{a|QCVq(I9xeg;j*NR6NNNpJa6trqHY=YWDZD-s@ zw7l;1(!zWiFHK5!$?J^NK%mU@Tu~ecSgWUQ#%KB;W&ng zWHDuBw)?t{&)i>J^*zHSB4iAWq{Er+gPg#$NPxLc^2HpOulqwiiQEC;5X`mT6p_VC zc9&!&o1cS|S{E4h8BH&#Ksmc8=}ngz6@_9frK;V|b?8YOtjw4OmG|1iVVfqt$nBx7 zQV6}w*b$tOn=mI`OHUL40004niIy5~c0Ug9e2-|o{VH3LF-=BAz>HxyhgR*?9 z{OS{}wC8HVKo5E-qLOvGNBYq?!=GQ|c)(`M%_W4+!N~_~gWt6y#GfEi3BKOVW3ao* zyNLd~T+C~Z|BPpq4lW8Tl4y(;Pa{$rWOD zX@ftG4<%R!XIqPBgM=kW|3dP1b^$_79R`Dw(w z7P1L`?AofVeoSQw+xaUI14)-t_x5!_B5m1wfGS8|Zw8c6t3;s^%ue^z2={FY*qhvb z>FHrc@obwFO=LQxgRH{Da6-PhMKSxUu7!pKXPxAytmrh@(R}@Euq3r?Ajc_|unY{! zZ4;JE$<`)GL(5G~xI11WBr$e$j@ii>rWj=IoFsPF$A*p6s3$b0_Z-a z<3{9DiQ&gugH-@|lMwote37=AmA*(Gfrz!IPY7?#3=h>#^J3}I_DdG_Wk$LJNM;C4*OE~W%3 zVr5Zn)WwZS$KF{J9V1O7B=aX=nnfiviHCQUlsEhE3q$@O9#VQL7B(8xzS7i-o8i*{ zaCPnkOu>JK(Dk`PUKkITMpyRs2%Mq+{`!57<`fF_PB>MOpOLf=-(ay+k3gBuY?qr& z>bDPGs-eCKLtEEO?RXX0UI!#rlY@``Dg8L%eN+k`;yfo(TK!~)v@iM)>+mo3IeG5Z zS_U(I{=9Y(x}gbGsh+F>X!AnWS1z{X4CRbWA5~boU7#Cr$=CwiKbM!M{OrYZlZIC$BMJX#gyL6sC?sqlhQK;e@I(@f9$Jg>K2c3ShXPU9?d3z#Q^$+rd7H$J{ZVj0|m@#`rBdua- zHjm(bFm3J+`AqXhkQ2I;wqm093mvBAm}4BV)oQ9VLeiN~>+W+~htTRdaY#Ese)<#{ z&ocf?)7*$4%>c%FCB9LFrU4P2piYtYrfB^~8V{X3k7h^+DRl!`K1txPbyTM|-9MaS zdE#MIc_hx?NG|8^UzDFN_~49#GOh_ohO`xra1G$Zi9+Lf`Ug)j!xTx*jkum>PdEoW z-rem5Ge@swYf7!YeoZ`{b2RWlrdX>?m!cW9Y<%*W3W=QQKDhR6t#gTJwem-mACU^> z)h_)#t)*r@$N*dRFSwVoWGnZmx)W@cOLN~& zPv9D8YHA5tFJ=*-QoF)shOI4_{>>urQW>6%lw`bssavMvEiAe!E4v8qk zcnuC8=NT833Hib$HTDzk7d=QDTvi{>=W?o4&Hcy zi2bQ27@T>Lam-Ylx5jWgR87pIsqVP8n&ZpP3|YAC&OM@#I>{Ms(m*M-yJZ<-etqMP%1|+!Qag>MS#GE#E>5933S8m4;cfI zRqKEFev0zws55zY-O-)&6h?Y1S!))eE9J%d1OO><3&An{&8vq1QvgmtvA^mz5l)X? zsuuQ7Tv^}nJn20lYmPC;_}&s7wdj3mf&u)-s7}Wwq#Bdp`y+W13>!{4COK+x6jHRbg@7#d*gE=?n=Rg}8A^ zwi~T&UKz!;jM3^&eI$3I`kfP}nvhV+FXs&6FR;tGW3(-mr3e9#`K;lsp4H5F6=L^k zP0T|Qj8}u_e(_Io*gK(16_sbWMrt&tAq;j#`$DBNjS4YoyQW#Mx8}5+;i3>3wHbH$tG2-FngE2CP$gdCA12KE+SLL0Wc+!J1zh4wlW=At8a)$Qzk3{NU zLA~u`V+Zf9mq2zKDVM`3Cwb{v7;bvzmm~rjARLP) z&XFhBNysY9RQB|)Y_fb8-c_@=Mq16fG~Jms`C>GANRG3Lq3~RxJGxfGd2xQS-Ivuq z>Sy=>pc<76VnDC|&&%6^MsO~%T{Y|O;4SwE*W;z2U00;k*!DWJcJwd`dM@inZPM_& zZiA`L1l^1&oQIrfPr7;L?peE|+L-n0{`z1}O4&;f?Iv@_p?5yFvFk!2g3MZB0?+$}{qWX3L(YxO>hxDzJE zR2_{BKl)4BC4ACjjnqb;6_uo2I+1@(kK%N;&5{@Pn^At}vLks?lBTDf`l%`%s>Ss; zblrFIf1xznAj~}hdqC~{%H>M=6!=xa#()DQWag8XPirIFRp%@(UCYJxNt1jjC$xN0 z6w*MSX4S*e-eiu0SskOX3uAjb(vqVefTTvrhcV1fo+`xSjI$9k*yzh_{V;ZE!#>@} zsaFH%S%0IZ*_I|$QmV%x8<##wQ3H5ED53oJ%O~2H0H{Hc`jE9a8-*09yk}aFl)4oS z+&}V|7J9I0cUk|&Zf_uG%xf=xWw1_&&Zd_tVVvPU-j#!LB(v4hm!Ho=YugMza30_1 z5v9-Ck{x|EX_!FYZe9LO3g>8;tPB{1)FVd$N>XNb@Bjb+1LH_QT;md;B!I@9+yHt> zA(shVjK6PNVOPjI*Hh3`(HZk5R=r~!bg7UH0QH>%MkEpkkuC7t7J-zc=P?v>VLo$HH7yuWHJ)_h zCCp8)8=)UjcijD#re~%8o9!#i-#RR0C89=?RN*q#`V9yYTM`UGa|CHn;<>y)M&UB+ zrGPljnr`47w^gICZdX$l%+VCBbtX1#_f{hqKurj*s@T<0Kt zSq*P}x4Sp9Ju1!b+ElGIVaBS83|8-#mmme!HRJ^XpeZs4nW)YJ*Mxs=wcV%>h+t)6 zhS4#0N8vqXjdSN-rtpy_wBjq0_>z{~OAkYC>>N#(vYqd{5a7{o@sqccL=>#-M<~Or z@1DitaWPe5A$ogwauz(k3a>+Jbx10uv~e0&oSjCu$UlT?lzNJbC%jDO>aJz%;wu%7 zcqG~bw(Znh7kG=fFvS)P9n-;z-LGj$8Y{)g#-}xJYX3k@r<^yDwal#mIY655&Y^nS zuq#j8eF3^(hx6M_7~O{zy59 z(^3f_{~GsKaIAb0jI|)a#l>VOu*AfqvvYDUweZIwHo7QEdzEn+C_b{P3W()C=Hr*j z7Ww)qpYJ*8sfo?A4GQdI$cxCkoSw`+)rtR#rrZ`+p24m@kb_D@Dw&#?l|yqd3wULd zT{`BIwbjlX58E5OIn({Aw*&gfW9^?@6I~O3Kv}DC)xe>+JVRWZ4XI3ojcmpwI*o0HYKg|so}IgDIa$tmxBGS1&9W%zPs0Ylu*R}E>@;;}Ne!3B7d zLsMO%2{%u%0Np0Wv^oSZH-k{sgJ9$lTiL#nw{m^LAgTZWr_@ECfQKnh7<^WAgpdAQ zFpZAFcG_r9a{uW36?E{FlN=vAOaiMwgb%t^Lx2Q^;7yYDju_vyg}IXqBzdahDoeR; z*%_`wQaE^WCr<-h1q-+9K3o@U2}Upk#)HxlhQ7^{Sn_;NBV;Yq-Bu)3IdD)k{IlB? zOMN3-f2yqg$!#3!koa`K;1`koqudpLL(idAdYDcIEyvrR1;|P6Rnc!kK`;Px*$aHl z=yG}-FH@<(br!W1YO3P`6Ek*X?}$adL%zA)b$ELJgdB|1ukR8ns-oq$^$*I|u2#K0&e3OKDU&5!jPm z9)68J2YaSNtjvi8P0(Z(v7SU=Hd6}mWc@O9eGZ-$zjZ1%+G%=L?WI#PSBvw9Qm-2j z^?1+p0|sQ{A<;zIoGJucFdluO(4~lQK`~WzP~3Hsj^1P=lD8*CZiuEI%5Fk((h9ej zk=~j~iPT`o-ZfknkW5(6F(Z`D6W^`YtTfP}t>_e#s0o7_d{?_#Li_8EnN9v8x^=4U zr0C*Spfp6!&fGLwvk=j&LhZ_fF(m6q)DmK3-pwZZTE#D5-va}3K-nPs+J^v8FEfqT z_XASO6I5G}=Rc6r{5(pHqn65~Y^dpO0)k5I@x2U4)@u}cb4d2ImdFOGT`{<1TsoC{ z_L4J`*7p10A?Zaz?A;5R)9>ja<~YuO`n~utgCNbM9zi%%Y$hUG zBhf_gNPssci+vi`tP32yG`Ub_GvkQBHG}LFfV|U!dwXe5vH{FimI^Pn5Y1A2>N+Ds zMB6KppWO#p65@|2uI)Cbo3ncTf3j=k_mm$mdRc^1J$cd~+_(GHM?L19!6I>JYV$M< zhdN|%&%+A{W#Vmug1_bl*kvsO&Le|WHHlL;F@vB^Vr9~AttX8@MQ@7F4%Yc9Vah{NAD)NziN=5h)?=wI4XaYctBkA zQMk(ffIW!^w$pMbH;^w|V_Kd(8F?f- zC*@4b@>FrT7RJd8ApHp87u$e>hLbc7Kq&WxjZjFxRq!rKy7Hv@Ez*ZsF;-B{{zllk z?`LI_X;Rn4I`4-ql2GS9B#L|I3u75jw<;yp#{3PuH5 zy-~GPz}`6;vf7{w&9Xw=v8E`*lJmXYUu`IvJ3LU-K6T_Z%~t?dUg8gP0-WJiE6NY# zR0|P~#93+kZ*RxqC-tybABHNqjP@XvG=pH(YyAnT(9J+@K+C>u zSeb5^wdx^nMpNj21ppO&vJ?9$Y(xEnt<1HAI2G4^q-(rW^`zp*P5fmo%`0o`$%$kawk7k4mmIepercvKGm&BYLb47dqwe&MIAD?syeLmJlhQ9&0G|Q1_#;~mg&TII>ojIeC?Km5(Ja(wAz2z+2RqOk4>%zC z&v3<)$h>}KtQr?%x_>SguK#CQz52DLH~~7(&J?A3#0ZyJablwtDrJ=%bYdpP1YK#u zj87y8RIRy7ZcL-~ccM>6qiboUMuKz%V_*8Wra)SV;IG}`v-iMJx)?cC;;HncG%`au zJC|*0dQk@Hnqeaj)5miF0)UHix9c&TBoO@yDwgr{Hos#3|JT}LSjgb)X$v8^UOXd_ z>con}h>vKPZRe6?lM2GMq9a4!TE6Y7iEo;W3iEY%8bghYyzQlH!Exm;4 z^}FGt$%xSbpX51W*8+9e^QNloID9h<029KWyR>l)BdVD4?=|RlOp;!QV>n^4mzEPg%{MBlo9r{%6(F%j4Di5zd`0vIzTz+#AydTv#l@%xU2{iAhO!ty`0@}DGJL{@E)0C%84=Dc0mxDXqI_XTXOx9kB7B` zYq&IgtMyZiR6E*!M)blXK=(-st?f@v-jn6{@er5N+=KTJ(t+Iy?k4x#xtT}@&f4EK zib*a7Y5@WQh$TxS2*<)ybTS}Z{~5G~7I6~eI`B5dIwJTu<)~j;z*Z2MKeEuEQ2=3e{5~bsl zMzhZ^8?ae;JZrGEDQASe)1RcWaiBj)LBI2a;AI1xlFXP%-KTvgmh)D8mjXnonS&b- zBKBt0Uo+A}d$Ba5JF=8jXjX7FX+-NrjHcmeXn6M9F^EJxveLV5t+gt-7OZF^G4!It z`aWL^QvA8w-7YX5KgK`NJPKE1K7A>DTu z2lh#(}q1ch08(Tkb&%3^=%M;$WUKrW4LAPk zkoi;OWQHDl^RKVlL&EKOED$ZIy8Sj#t;S82{pA!9_c>i>3hqr1AZxaj!FBL+2Dj&^ zWm9j70*eQ5^{b+-&|a(G24zmb^(j9Z?HVBoLfU^H@YntGmJq>M?iBEFj@f4o*I!xk z&~H~>EHnE;SN{XwIpjNc1`(nxW(3uAE0f{C;18NA~4Zz@{~gW3}ED!+(W3s zp1B#4QK!ROP0m!8Hf@lCC0U94wQ82M$-!UB$vlA!7g}+s60);efT+ZB9{JC{x}uoh zY}eVof;!-Gx2{ex^dFG_o*y$60chn%6w-=s_^xmO!%Mlqyg`$G2_D9f$$1c;ORgsC z%_Cb}`NB(;5q4w#Cob(Z4at7G?h5lty52WzdXT}UWnfrDj4U*=tO?pVrkoh<#s_r= zgSqH8@Klh`z3spy9Pa9XVNx^RtJP$tSjA8NxSA`^afO0b*&oZ6XBr{<*tf|N&2h-i zlO9ELKrNNF5ZFLxGiI=r_7>@5kB#CxM)|Bqf1%!xv}sF__GxZz&27tP{Hm~raZj%} z?uZs-SjOS~WT?*!X_XZiB{{a9MDP`BpTULAqb`EykzLyAaowD6!7FG)Q(RPzc>YB8;M>$0+Io0Sc*9SZn1J4%0g_+#}X=v%8fx1Vxj>!St zy?DI0a=r=nIRB+g??^ZF%lU4sEf7Gqlil|toE5KMRmJU{>>4&r>;Ai65;#=pk1R}K zio-S&7`@G6I##3k)w1lqInEZanQhTonb{kz=?28ja7C%%fv87lC;Gm2%wB}IB#utF zqY)I-SBSpa|DUc`-oyAAkMoxjrlDN1Rq8@AWl`0RBxy~N_ttxDORiyUs728-(BRDF zySZ5uo<50-E$=Db?p}m!4nD4oRlXH!$~Nb7_d**_eQ|W~H1@C0M!2n#Oi+e>kw1w& zOEN{t=8=C*Dj^g-rASy{sZx@h2L;A0`sbyi(@O3gC%tULab(b&dV)WzyVWY(1*otw z$;E1s()@LyqoB$p?1!@F#+uF7Os4@>{Q&$b9 zqHE1ax*nC+r)_SMsnd(F|DW*U1tEpXjXPJuo)$Y($m0R7?ZZ${(EVR+3I-jkCG zrUM@;j)gt8XVWh3eeY}I?MHSU^x!xjwO6%;UcK=WgP#z(k3?y;Zo0L->+o|XJyRHl zI?aKa8dWkbRM-`*@hA=GL`Kv@J&^y^L}(ofH(NiE%@3Gv@?PVTdc1;cGGgmG<3J_Z z4~{MsXzwlAvumimGHqGu`uH^h+xpESYQBy+u$8sXpMX-VHmhZKMys4Kchq&N{qrzAD+Cq15Wd}lRSSq9>$8h{>*0D_=IP4 z`jEU-cv#az>1bN7rfph1MNKDd{RX0Kvo_qi17`Mohyn}}fY|QGlJLF(6?G&($-~t* zd|f9*TVp|tNUzgY(;Z~lG8H}*hOz>0T9aWtB*8O@(kniFP;5=VD(w>AXi?RhijIc) zfbxZFPw8?NV_V4rx|QiV4&eO-Qbc>OS6g&dY6j_HsPQu%?s%++QR)j+uVO~y>rraA zD&^szpDqPC(fD0vg7jO5O6?7EUA#n4GzeZ+t5mSSsTPQ^K5yOo5^f2A7XyusKlP9R z000Cq*@u8^10AF#N(+)h#qvU`TkTbB?i?6_kz>oJOMB~N82b8ACAn5T1 zzr>Y>IU>5?+3S0=f8HS5DYytVO)nQ)!IEwSMm~aKi?9$Qc;}xJT@4DH z3Q{H=H0$mCGARM6XR{6IyuVQshrwj(lu>b4wdlwxwev&54&WkaXrBbg4kF~Vi}0?O zUZfN7xiouKE;m&jR93v%CRhMU#0u2=!g98uJW~dlSpX=xI0%y+o}5J|ySYn< zTSiGVovn1jnI^9}&D$@q)~(T^iyzHqkj1pQbSmECj(#AEEb@r=7$$Lyvv^%xa_YRS z|08~3C@_FuvHK!=7W$3B6h-f#DNcJIyk=ta#||)se&(}opTp6v({VrR>^^IKImIcV z$_r6LO$^7`9TW3!vJugbK8dQMXlsr^3Zz+TU`HAIdY!LLM1Ms=d8I?=q`=%`J}aw) zo_N$Xkn-CnO$=qtVoByU<2R$)yH@#WdL+m92?RkN?J&eGl+8i?xHxDVzyiuVB-M=( zj>65?d_XlrlV985f1a+cq&NgPX@^HxF)}JEof%r<-EBH$*;6Oi#fus3y!Jy*fI%NV ztVnqQBay^^Tp9$a0~gGW!?`rTJ2FPYnVeYuRdJMoh3|v5W zai3pFiwuoHDX`X{KFA9B=cE&2({8K2FX7Enn%`~ohdYP&6eSD)qUJaZLi#Eb0GF^e zW%w@wP*iafxf>t*2qGB=tyYs>ME2sDy^OH3AAp zJ*(hJlL;w8?nEZAlTzY&EPEM!raOp!svIID9Flpq6g2k3gO>Fqr$`Vy8{f8DpPRa2 zhLVTF@in>SVp=~;WR*Sv4nlD(f@+-aqJ&c{y+Rn@kV=aX`JLaRrPF$!?uF6PO#N&%3t$m3VRXv$@>`AWaEy zPZ7`!QSSknQTfxuez;Jc%TqdvcVr&u<|ik`+GcL|dXN7^NC(wis|l)PIfOksuE#yZ z7vJN`l4VH|KcH1#NN8Z^z{)0>;f{`HIITwm4hn<@0W6%pWY1PaM8!ms+sm&o-mUs? zGw5Gf5PJQl86MYr8!*bxqIRE z%HHl2hjU?NCgtzbTX$t^F!bLWKj6i2Y?vVzz5)7-LE0Z-Hpg9SHqdBOs)Z6k?-vqg zyY~e8oA_Uz-S`vmtWI_0byOLHnzqV_RXJHLe>7ZenQeFwQNEYjCW3kmjYH|u;)+w@bdA_;rtX}o0SJC=TbcML7 zciO8+RA_~*g46WOP_AWMsf*6Ndz(|2ofHJH1}&t9RoebDtBqpt1JSql*8vS4LOJE* z^bH!}>}tCjOc6vF z>O!6(2x~Spb#iT&;QgS}=uD{DfC_mb)_>@W9w+tVyUu}>lv<30l21Lo~znq;DM5{yr10< zP9Q|zkXCa_QbTBNIsWk~YoEehUI0$p2S!bUq#X$Uu@l&t58LaDAm|3J1IrVMY`;W-G6;4s)2whD4yg?J#aea5)6T-q*6*U4i+s!IV}^TYPj zM_BdQri;+t6O!&}3tE2v^7qF)mFAKe_!QUutGt*`J~gmgtV}&_O)#y{oEY&mBpQqb znnK)A;%3wyD$r=-U@TZ;1iTpivu08UKjAAKcYTS~YJ6?sEgTvdW!r_jkxRH-P=6R> zWx_df z4w~KWDh2yf4x8xRB49~VPuU@b4VkRI8&@=CuD1fo%=Z>8^fFT`Qb8XN*#@xRT2H8; zOjozO<$`bmmXk~lH-pQAD_=tnQ$!Bz(3U`@(*Fi#?B^nN&AV_^3^?N*EefL?GE%;^ z+h!Xo6~Zo5Wb}cdle~Etc3)@CXE`ZM4$RKJxRbz(#U!C41`npU8#hHzrRN2uSWSi$ zXDu}*=%iBFNzO^`PJ0|JKmLjm{U#c|cx|%p~U}cc6!vdF%%L;BCLUp&aGkjv z)$w_@<}F?QbWPC;LB6ssh^r`}tx)!#dR?VJ0H?};0YjWbn*v8L*R?2jfNw!0N~3kN zD=C7(PHGOZ)W*v`h$rfpTJ)$Ey4GG#_afj9I49zK5BiDK|MtaIPKJj7v1!m?koOo9 z`j%WxsTIliws7DVIQ|V7#w)H$?#B|8%t!9Tlq4QwW4%u`76!L=$;Z#J&lJy7qR}tz z(arpQuQz{Qau5*Pr}4q>-r&^$XUYvF>L}PZd-dS8YxsWq6Aw%nVWXeeo;rdRm!95^) zXsv)uP@A!lh2$|Bj|CAxjGjgU!Li`Y4cE~Njfa)!HpfGjDouLMm5xE|>T{=!A;*__ zZi;od2=O+iRl2RZ)*ht4s!Fh^r)0Q<7zt>RaQ_d*p6Q^1ZuQm65R10~m&kzF-?<7= zK>LfMm-j%0MSJ67t;H_H@cUH(rvG}@w`r9a0ALorD#f*{l|TLq7A***&sL0#EbvLf z70u=&ldx=0`=n^XueIH92C7Q%kpFF*l4dq*%`$on^k85TAgWsCtpRCL9oHC!7S*mu1750Xn8R-3N z7g8LGPK>xdA#II-BF>GN&j%Y67el?|PO*c7dX?sTbfm9;iw1Ib+lBy`Z~&uM|2)Cn z-8gqU6WPp9<9yBVCOnRA@Ke;}OVWq}DQ-dmZ3RI}6h;IE@=L`Fwz|_N&kgq?5$~WN z0S5zwv}(j5ig1b4OT`z~j|39a5YO+=1r$0q(n%JulhpK|TF_ARW^7w|)Bq6Cc=L<- zpt3QyT8i2)Iou>$n-a--{f+OZ1x{siNU9bnBgu$;9Xv+XUR(!?{cx?xp%h^HHaff# zYG-UgqJ4*xsT!okyAcNDJgA=6H@5_Ry1ZaRa|+0T1V|8I?gRDo=7S|?-O7cC{6(hx z$$5hp2J&v!o{n0`ln5CBP4zmuZO#fiBwEGis?r%YZrv^e@Z*SroHGVv`-k(87ohFS z_Q6(PyRqA{6#s5Prv|D_`liS9WCF;pjVz~Z& zfA@|RZj!TU}xu@&4M1)s%|V|IT!k;>v{gk+iry-3sQ&J zvEN)fB|HntHQ+xJNLgkh$sc|NsN|6;DQqu5f9Lzb{Xoe9u9lIwI-QWQDw5VXYfj+3 znM?;Q1@Kxr1Yo)A(Vs$V1`6wmSHeeFbr;(|8f7BeuG78N&~A{wXECA0nvQdxf`6Ct ze9&AuG`vdqYG5t8!?_I8x|YB1GP6uFANwBz>>HW4&`&Ybx|vk7I2n{i`q>{4qP0> zN8O}l$iOB`LS`SXw`~#P+wx!2>uhXe+#52#T&xM6oR| z&8lp4KwaR7#0CP#*|i@E-*H2#hg@_v4?}K^?_9O@cG36@RK$dL1OuP+IT;y+XQaQJ zeaoyiVJb3D2_LIwyt~p{1b_+3PnMu@Ht*=|aR%*%XvMe6ve(gU`8I+8hU$GSM%bC2 zS5AFPE$_RXj@mgr+5LItS3Of6a_o4Pu`g}f(8WjKsklLy$CC9}#p3e~$`H!ME|S=d zNx~k~LTzNq%TFn5SycJgxpU(;QB|DnOH5QJAaU9+N&DB#!BFHAh|r-~jNQwY4t-ax z$ROdE{0#}CDn-%23kKR!1Wexnqvd(VDWQl)^c$@)z}xZkTY`Px4$~5ZgKtbIqg739 zb@Ju3;6kx49I^7Lo}Kk#mePg|*nDCJ@zqaHaT4Lg8p0o>x>_lbQ5%r(e`@9P%Zx1Hg4*D zI5@f~FH*|%oH>`D=mA|8a<{u=yr*5lRjvXgKNJ7$<66!4^dw}8+1g0MsA}G!oY-)$ zJtdu3xA$ua|EuYoLy}AY`x)M_48rUBWsK2qrEc)3KmY&$KQ;~!yM0$GER_=DvR&$N zHIh_)it!foct%7gE1MWNv$iyWBIaSLIQjSgJjY~O2Zj101!=)zt5X7tZ&d_wC}X_Q z4A@f~emRq0+%fV5LK7kahrvIlbqW6XvcPAfY{rgvMn9W}?}y@x8~Ye!Sheu{yVDC} z_6GNpvdzyds`_Qr$f4tb+~Pc|%_S&I9{aD%W`S9BemCR1nYtQ=K7xJUq?{F3crSHi z$`|=sj0bd8$i0c3M~N;{Fy6lnpZq&7OEeg*HYhK?HRP024%^gc6Z>hp&2cZi&k4Oi zqwXSKs>Pg3-eEv}ZP_*exnF9toyj#$O>EUr_l7NyjOr-n9&m@UNys)Q-7||YC#zUaT+PZ{b;eCSo`KtjMDJX(IueN-N;gqZtTCw(XSp6a z0C|1CjRZfFJ8CxX4*Q3ao9x2yBi)u~i}=t@a;mK@}IGB_4L^;@;pH z#75I<9E6jl!W}h>Kpwd5k}MylR4f#XG^0T1dJ@>wfq;znbMrs16Uph3h;uNB+-)CY zBkg}kI<|M+)hH>vbyaibv`XoJ!zpyylN#a%4N!wGaykoHIP2TmK*v$XJTK9E-S}p; zQWAZY5#m&xhMXBF!4z$Eq%mtZQxH)sMV}{v{+mCeNC~$oV27MJeTQi%uGh^bJrP6- znDf0`>J8*LZab2tgQlkTGy1%pk3W=5|ULOS&q@Krmy`93; zl-O6k93RlQEnL5{ASWOcH_-^v%{`isRGbF*E;_Mjf@UFYlpC5)x}ou*L|G{wQ1-;` zcUe)eubh;uaF83-|D~f0n%;7W(7z^X18qk8TRx|hCchqAa?!EL`;mtC$+Qf5ir~jD z7P06r^P;FmD4HAH%7+{CjZ=?71hct+P31#ge35ht%m!N&H8KN&2f?N>__m%JDT-IJ z^}OKvL9ru|p%P+LU4CQOc&dQpu&SO~WsN=Qg9%q+oe`?|z@%8`xpD2|Kl72*8cWaw zvRtxd())I+8x@RP_VmiAQO^?88*dZ6_so5Vh;&ToWb#AShcrhizgw*>8RKjzi4P#v zVv6Z@9PRud_xpfh@47c~v03k0Z7v0Y2&yFtj7tcfJ>hejS+V>1Hvu7~GO%K_cmBBg zO%4Gpw6oXt<*mzABuP4enN~`t&2)%AlB~=ihv1hKT^c6P34V5bTu+U=N%Bs3i|pto z-Yj)8L96;Y+|2u~bpRv?vMJl^@G>crE{%IytY6tS;kU<9_Hu zf~rSf^?hOeF&kHiWpAQvPLPP?>Mn!NpWGfw+JP?2hx=s1)ptNdwtqOu*|=K zPAd+}#p=$~nbEn3B3?l0M0hl@?O2f$RPz($|U;EB4}6np^%L7m;eat08&cEcSP=VGwUgwe&kvj}nd=c|w>oUU2+GAEd>(wq^F^Pa)&Hwl zzB9o=CN}A+Sf0%pE%!YY^6u<>H#aRa1MVgtB~dli6pd2r)gdiuYI;p@kd8s?fL#*r zr49D;q7~hlg_4TI%nRv-R5MwU(yj^U>WX%lFjN6n3NmF$=aa%C4(#- z6G+X3&~^`r6<=hT&`&tFS1k0?(j%qq%aqJ8oC968ItmBS@a>MO!3N1D`;_DuxOFKT#KAXSs;VwrH!>ODHFq3A7C#FRg5lE?OG*#*9qYceh@wfHZqY4Zt zlb9*3X4CBg0*EhD!7-64!-|5yJm2-)w{Es+9^lWXJBS>V+ZDy(q-NNsrsA5nt4} z=r6y&!83xCnLqail4i9Iwp<#Q!>|GTuT|1^)fIn|2Sdqrg;P&<`BcAu(!F!xrx%1B z;6#Rc4Zx}g%W}pyOkva3sl#FpsDW6Gy}uA_g{1VyUJ>~QXa~4xlwRtG=YWy@m~V3K zS{Q`iFpQx6bBHnTPuieiI$DcRxUK&~c@SB#D!{xJ?Ak>QbTsAW^|R^Ud0cVqiv=pn ztaJb93Y;mY@@4agd71g<@sqj|wj5RSEsLGHVT`@ltebUO$2#ftkq26TLX?f`Qpy-H^ zQ^lky(5mEh0sYZ4cLvhOX2cRLGoFIO>PDZ9e0vbsgBxTuPd-*85^)XpVP^gEM~(^!3t)?PsS)LIHs4`) zTJt2MqMJL&`#5*E(JU_Dy+& zNdOWu%X(kpt6qJ5?(CTh14(0LOe}t$i1j)o3MnK}v0hx~yIw9ABLBZ&y9qnBj;O@I z$vcy2T>jBr0&Jcolq9EP3g&JxG~=ohhQ+-@E_=nB{U!3G)JtErUs%9XseXWyHwa(x zu*v;BpcB|Ldva6<+EHV+mK>-(G>`n4{IThc6Y|eDoO0LN(FHUP>qA?8&m<@h2@daE z6s+kMq_+d%&P%LJiqLh2oXOM(zL)wk1&`Jd)r3*Ur37OBt^Jq z=Pa|#;&CHL{@@f}*mN!L9+NXTG*@|+Qi8WF3P@%jaX_AfCFk(LqPg%_*j-tY+xqj6 zWy9Tm0G&{kRa%p78$^#5L#HS2UJB$kndDfj6nD1x`E<^{0>50ebC(g$n_fE(o^7zb zQBIJzsG_Ml$Hzo-oNpXj3F$I*B7^5l*ML*so2V^`d6kPldJ}$C;!=ziF{) zUT`dLFlAHh^c8>8LSRU(sjLT?O$I<70$2j|agHX{N27}<1MpNY)HTfTg8Xt*7p9>? zmN1+Vj8tK0#c4|3l2Y@w+Nh4e^bISS9U&OymV|^cIx*_r>hmlemA2!A!OJd88iYa| zGF0HpAdxj#IiA7wx&k^A(&Uz$p7BAf+z;p?+4@Syv=TA(VX9yn206rRVzfYDf3xA2Upl3qvoEpO(Q&op#kRv1z z4xUKQYO}LoQ~BdMA)c$WuK|2>#74-fOB|nxk&|jufx-m}>6>r1ypOq@r#SEB=0r&5 zjM1Q?S1R*kx!-uOJ3o|Bh!Ht}WS*BK>jAYF6r#FocX(ea8G+*8*U#rb_L`Nzm|;)0 z8T^5$r`MDeId&e>vza^99|nr#>L^f2@US&qo5p9qv*g)9TeX5>-D+g_L!1UYgFgk~ zy|$qJX)vk;D7|#HFC}{8CT>7arDScBRTwrM{W`U_Uc^8{fZBK5l)feWb`f55jZoao zy?nu<5}A-uYcSzC+g0WL6e$-@CH7ohdtz;-pNsPEoyJip5C7%=Djb~Zv3b-h+4wHZ z{-q;vWElWo@4ZLRMx%t;JPWFaMv5thD~vA=Z$$vI;AhP>s6C9;TDpRduglOr`F|Yj z->?HvIH7cop=T8vMtbLT}(l*%!!2-JjYjD$4 z!A^(&JLZfRjvz!u^A{p+Sq;{rk(6wkt;Z`%P@1Hp=^`a72odUEGXYWVLgswKF`kZR zgL9+|IOj;b|20|&{@Dcdvxe0+$mm`yU1UrjNcXlr!h`qMj}S0I#%98; zOB}32W(2m^nqVp~1z2Au{wM;e$-b-Ki;xv0Rs*JxQZ%b;L~U^@rX{4hrAyHZ0nrjp(-MJQWrqzHG|p=~|} z?6o5Xdwex)^GMK3m##%zR2O>qG7|tG{6ummV*V!isucV2Ew(h2%vQX&^9vAEL?&9j zS+oDdu{OSKNdXQ(j>TZdo@Z)CWk4fYH-vCjfmomAG`aUrHg*1xLZ|}yqOfx z{W*@vU6t$Wjci4;2<9=K2R|6~0WGABWuO~r2YB)J*%)#x)q9OE^h2C7Cl))zStRms zxr5?t6VpCx^>e0T;vHEnT3KG4R45t42innEELdCOTS(Em4P4vNI?Ctvj8_u2{M?-Q zV(oov-MAf7FL5~OJ}V4C`*|0(gH81N!_Vo`4{1M%bA(OyVET?yVUl2lkVABmYhT3Q z38=Ia{H$E~ahk_h+M9i$zV;Y#vL2Xqh0QaOyQL?x;9pk}I&-wplu2fP3j$JI1Ap0U6$ zJnvOVOx?J#W;Ss8SNdk+Q$u^U-ZN2_V9)^sBJS-`N1oC8S1V3`<8S0R7!u@WR`JkG zS2}KvAeWa}uM6v8bZTfBU8$e9#*Q?X{jDGqA^md07clxUYJQ33FLK#SnE2Jn;ik@15v$r zS=&s?y=~r|7WBf1S*Zn(dn0!#{&9H8+946_0W819I?M!{D1%0J!&wr`@UC#BtpJAJCCOIF^#pgE9KLhoc>h4u7&I>P;HQhikNIo zzm#@1%5q%<0aR@nO%D*Q{A4&HYUiPjUIAimc;WbCu9idKtcpYx=-XQ60SXVc?C zObo{6)W_X@K@S5(iFuW~p33!cW+ku4ErF#IFdXp~)79pCzg5>|#zVBfeV)ywOB*yE zAoWJbmIQv?xQwxEc}Nvkj}p>5&y?J9j!gwRJtYcC_)Eqbz!QS0@%S@#?Gw~%dvCeh5d1@WsJ54>N2JbPQVlSp zOmmLCO)GvUPBAMgE< zzCkvr{89o>V=P;y6KJAhjKH;F{=XJOBOqF$X5)IPJ_L7@(mfd?_FvlS$iBj8Uh<2o zoFe&q6Yizcf{2g7&bBW7c!iMVbQA0G_Su&S7zt{4TpinHzhl-;c^LxS((R}#lp5*p zqXO~12reJ`$0ptwM@5+XYM5}etECG-a<^obf@A59ir@u0oXAOi|3tTflp@^5qqo1R zshW-=@^k<>c+NLv1dx8mz$)pUF*3={GtCeEl6t!CieM#d$Kmv1tdcRl9_p=&w3#pz ziyuG@_37=JMm%Jp`ckBhFA@tl-~a-9VQ|ljcxDGtF+Ll8X!d9jfn|BQG{wY-f@iP9 z3|8s>g{JRXd~$R`P#Utq*Wh@6=xsnH08>D$znVQDxo_a4`|xFWJUQ6)r=71Pd@F|$ zh9zVbM6uHQaz_?m;llGP>>vj{ZJ2adnbb0(e!36)? zB%5Tqv~10BuIC#ALyEZnE-XQm_V(!CGx5*J_~|d7pifcrY#CA=kCaUT!>%yF&#UF? z^eQ9O{8k-RpEglG8?K=j8Mr{EAO;U)p)0rM9$d8~tQSjI;`}$Mj$ z)x#S~S(~-JR?K}^1b0GC5Wa!g7^u&1(<*9`8|o- z*p<}nKrR%)DTX+viQNy*aZEL*S^mfD5|-qF4c^s{Vlt!wYkS5>Rp?aQ#H9H zRYqb2erD@q3WvfD_;(JwzSm}}v}~xsXYn371A#Us9p{-1@2-_Ey*gc4*{|D?*C4Y} z-3PGa-|XP-@fQMa!`*FzvO%A_7PDwQ%N&Ei+%QrR*7%s}EEJ*7a^f=s_YtggE{k(} z-0mZHY!2@!fELk4F6Mr{1lV7YSiDcpmL_9QeD&p2I%YkXY!TRW$mbxh0DwCD&R&th zI$*IU-Ajoc2ca8qbk@J;uwRA*(10dfkK5B6x#Ru=m@4?@Q5L4cF2*)iKJXlG24(20 zF|M|QMw8uE#h4m7o3Y9(09=CnifAB{z^sXkO7L^?3Rfrm!M8@<97y3;?W)1{&r{ho zazT&0Qmza>J9KJu`9f4b`iI<~R|x8Z{_WU|K54=`!jt zrzgCkd<|fZrArmoSEGV6uaLn0VfD0@CyI8^$KA3SWNu>` z0^HY%WxxOc00@uYRk->DY~`Ti1<+ozjTEdY7*Mk*@8PK4S0Tq0Wqr_%{glIi0y+ks z+PRJMZ&#>i_jHj)rF?;pK&k-T^rbq>vwAaz{Ic3F9K1We5{O#ZEiU|uJERJ$xD7gc z=q7gYq4uU*bY(J^`#xjo7e+3vOsKiqmkJK-bggpGS(n*i^==S!Vy4UN_4*Y~?7Fkl|Y8;fQALZPaQHfz;lo z)BJ|XCDaiM<`@-nmw7Lu!Wa+D*6vB0%)hAQ%0MXOy0Ko0{`Y$e!_aZ~$3i@}Uf~iv z5No9Zg5t=1qFW=G0VQe8(w#wRb1!vVzu!<#HM3$mjm$A(otSA%QgVdtZSm+*fD#sQ1&x%cNaen+oGah8>(8AJDWrOEBnl1X z{i%YQwv}n$J6gE3!6u}Wc;#s~sS5tNLT^kG2*(ofSRB&uWKJO`$A5@^nJ0bY2j!Sk z2k0RjXzGBB6Wr@&MR>ANus2WqAjM1x+1T9LL2_``6#NS-MHsV`-!d(ro4Drj05l>Zjqn;*mD_f z-A2~f7&BJtactE1^!JGHlOAxrDDq>*xh#N!xUqZj+IbwYskWi)8A0H!l|!i7ausjA z7xLL>0X1D=s&GsU<45|=3!9zwB>=-Qh81m0hj;0*_ zjr4E*w|Dfa=g~9)Rqf046-30_3ZTD>2?3|G%71MUMNb_pOJVQAS8Dl1M&)$VJZ(&K zkF#rh;O<-D+LLSmo9zo=IvxyX%6vGQC-v$CiZ1-D>+XXKY%A8}Mv_CT2V?hAX@%>3 zC&2dbsxaYzZX3G&HR_=+=5fv2tJpnjo;=F))nv)3nl5efIR&#%YV-r3RWur+(e6Aa;66mLGdAw&hkImz&t3*m0c++%A)C~hY~mfz9Q=VW6q(F_GlVu z?{diw7fgulYm8OLlJf^Qn1^(K*wA|&?=~;TTTN%J*m7L6_dHgMj92o7G$BDe;p+Sq z=(8swNHU6)(_aOLQ_E$!c{#A#2k2IB6>qH_<}8}uV4eLtsfX8^>pY?Y`L2Dz!Dd`3 z?0T=1y7Vc2MdU-(QauZw!rWh-GLVc)8BoZ)?;-a$6?ZgA-Nu+TJsN6m<|@lTN?8Dt zsyLb8-7tAAik=^C;Q`;pqDK4h(PUB@zQ7#MX{q1)Q7&qj(THLUIp(`ay0EQu_x=`k zMDb{(h74rJCHBqxr2?)vq3d~mS zIMd2S2fVZA1xTa$ubh9c1%+4OpYbWqM4?Q%7&iG|aO-pj*&SCotv8YjMi^kK7Eb|j zyzu{Q*L|Y@`e}VQjt*4y_cTii`#x*c$KYfvnS3~)aRxT@C;U^`DH^ySZ0;ntZ|`K! zS9fypy#WxO$o_(5VG4lKG>~p(DJ0GdmOs~&c%+Omc;nArCCkumvp(`sGgu*rW4e+M zPY$5NX+InL$7p)@dKu>RMPouswh5{gtFK52k4h=w6|=1*j(pY-af%e_qY9n@(WQ&= z2I?PWs9@x%)v+^{;z4I{3mT}93vn@XlKLNk^%!X=Gr=N$LkKLehEV|y) zN`g6Jj3$i7ff?A|yt7vBCgkpEEeE3uiTqxt@4JgzGhi8M&;V(&3_c{a;L;P_6Df*> z>C0pwCha^^81T&}NrB{h+7dzIH};H(#j5ov)b&xq_4&pL^k@qKBzCg?GxQ%e;}C>% z%@{I3U}55_m8X|^zk!0vnhynuBKqHZE_8$tq}l8(29%`z=0+$N&S0R-DTbz{fXliH zCsPDMxqC>II#*m?a#h0)Y*2aO&Dn*V4GNmndA^L2Jz!0jBw>ZWxd`HXl6ey1=~vlC zGf8!ag&XHP7kDFn(N(rKWRJr#8r(?FJl?wT=Yg>iaQ_FN3ui(&M95D#EUXdH_?F&T zv5!JE)T}PX0J?wbhfQ+^?{)>1!tXxkn@o9Ydy~^}Jh!wmmv+kc@g|2vby0~xFfNuK z8Q?eMl|WTJ0$kO&mL+@09W0NtEO^bDXyGtJx9h@xL02v|a6pA0iA6Ha-#&J}y*mR` z($MCh00001Gs%jz)(1sGXT}j#97y&&j+zXfyC#!`@iW0p(DRg@<=bk59||(cTqVw; zhI*+ypY2bl*^RZy`twi$v}9O$;-6;k)R)H{+1B60if9#0WAqPQA-qgtye43_@3os6 zt`{s&xfWbCn4?3VEGGU>n9rd~r+^ItM?a!@QI>aW}# zry=nZ+b`GaSe=%lM+xV};!_oepV0nN2zRVd3a=;1?P=R&DzTAO)yO1pmqRUJZ9Fe| zoA-orQ-z%vXw0K{xoXNe-1nhM%?05RG*cmFN7bQF%lNfd#{i(IJF&yf%*q5;P1C|iwFe#Y0%hbtMiufGXQ#dl0&dp&*&i$_ z|)@|E_ak*~QFb(VQX0e^?dK2PTk#*7% z3tg5=ba=E_b~P>Jos-ry8l75bseg5QN%K!4t6nFX9#6oQ!28LkoreXur_Dz$FlYFh zu~0Bg1DbLM`@}JiKX8&3MwmDaKAe@|{hNc;8~{+3tVCqbBBRf%AY684eQ>=wo;v82 zJL`=?;G!D2 z`Z+;k+hAl%-{vTd6uQ5xk>G1&AD&30ZV|w4*^we1x8wokV7WmfysF`C6o)ohAL$l$ zsbg#zcDp8G{U2h84^Zg6MG191w9uoAj4yFx29DC4nNy$}5s%KfRk@JT;LbMv4U@k%Kg$;q!`eX2nJ-(5UnP#LMz1ecYXcLy*v+NF60|qq_+C1tM z{0t_vg82eaYUz@(LG;ZW5Oy`J2P7uej&J@z=Vyh*yoI9d8x}1|J(%IS)Osb}+V7Y{ zi|geWqa(J=5fsZ0EGu{8bjzK7dJ*~ZDu;}Jncv={NmxT+^-Dn#%LR-8#R|tEcpBE% zke~n|M>za%i-R|}A*Q!%lE1&||G8Fq=6*1}->z7A{h{r;hlmk2UjpAO*+UA|irju- zd6M!9HAcpsQR`C+)&d*LHP+H6N;Hv5wHz-no1Qv<2=7K9FNwErV9n{z#lZ_VFOwZv z7PH}^0C3B+nb=f+PrvMe^IvrbZriY^sN&zSq>$nTFgm{{3y7P}RP)T4*AmzIu# zA>ygZa7sL8hj0|vWIk7j-!M5Ki8ObwNJ38Vc+|3dDUuLqYd9$Q=QsZ%dg8{JApf?B zM+y=WWc&L?$8Fl9qj4SL?L=I}c7HWJ8)DY+T6niD<0&v?}lf1QVH+8dKR73`){5dk(JKs0sNyLQQkx42A8 zmANa=R6**B z!?oE#_|zPetX^zmV}gOT6*(r^V}IH#$vfo&ij3M(Nh2F-kY8k#i64=19=fEO2Ajan zE3#UpyK^OpzxY#OU9h|6 zLbcjWEb;`r{;S04(L&ahL>d5f?p#L%xLNym`fDFDXqmj>F=s$W7%5vrB|?yc_|d!q z+L?9pad7?mCOI0k1@7?CDIX=vU!s(!Qm=(QZ=)#m{?dC4@HUKr+^;*H-oU(v-Xqn9 zPJ@@*q#mD#Azv0h%h|nL^Er0GxuN9*vCFU53j&opg59jEyiSC{Z{{rc6KJUt=F1P` zU1m(Xb!&)UJ^|jeLpg`?O~}evacSEOArNkOhVLfxYJamcqd$HWnvms{pkjeEeg21=Z32rOBC>)|udzZVgLv8t=DKz`|p$A{hEQDW4z&XPce_6;C?t|^Qz#oXb z>9X$>qh7N0!GUFf*Z8I_QE;^ONGM(8^_1*Wc{a6U__4xorrWwNku@)F$bwOvNV9xD z;b<{GOAKPFz}x@;wOIG0^@Q%(AOHl9Bp^=v0P8mlJZ)kZ4z0jn?x~T;#!%Tn5=|Bq zfB*mh1f4s3*6DA7D)q-szzE-!IzE@Inm=ax>+u~Di?iMptao~y9P@?UijkU)Z~=3@ zUT3(I@%W_8AWe7iJ#8_yI#`>K5GE~64)Q}viL4>Qo6Weohv8-8^kH#!4DIvdRLpn!Xl z8h96L8tjSqm|$!X_&$99psO4E_w} z=sT>BVv8!`gQMpYkuE=duH&?R9YmfL$3JY>3QpT+r-!{=Y0<3uZTdN2oYOEMBHxHf*;R@DZu%R;pzIYSW5-FT;?3dL6_kXGPJ9gUU z65KX(3bt@Ped&q)mY_OW$ustPEyy^u3L3>c4Vl7&@qS-jOG};Dle^9_m;?e*;nvel zDCjN2_EJ5QRR7SA+mZDahdD?ob#mL7$OP;-ZjK44FAja??A)a-!lOO2M?wL1 zrI}{k*QGi{9wM86ur4#Yz|a6}0G^k_psU!OxAynKu-5?f1OuD}CR@?TxUK$X?jB7x z+{_YVkh$0aPx8EHq$~0m3a>A{3L18*Vx{hXmUK>_en7hU(4h61>Z>SB!UAKT=BeE- zG_Cz>|esvBptXSdmb@BG*8PXEcG?Z>~M1g;RVArSVWx%wDs35k)FT zdzb#jr`oLpqcI{@km^<8s$l!Sr(Xha{ydn~Gif z+Cqw{^^F$OYmEw0FTi*lYArF*#OV0QKLIE+uM!CtfxPzrQ8eP>Ik9TLAuJn2D{OT_ z$8uozZYO2wTVtp8I(b@Too>i?(Ixir@~_9xHPW;cBCy-fR&u^eeLVTMYJAm-d)c7& zFF)O%{)sw9y<4~?Q?{{YAF4P4(odb zoV;0W>7`Sxlcm%@U_dwOEYraN+#+uUr_J9nRr)RK$H@f9L4%YVDEPORoxv3!B+oI2 z{qVkpjl!8dQhU@5->TsrTLoMUHZWDWm7rek%07crcH3}~ZzGEdP09lL-A^BC1Td0z zQde3}7Nk=CuWszc7Q8_uJ6kb|EtBMZkI739Up4LQ{@(P%_@6rgYiI3^!X;!8SoTX9 zWKzRfb?H~!)rq{T8#Tf04QTT}6nNBQ0sv)7>%Y*u4QkwV#N+?VVfO{ct3W*xWwv2) z15J=<6!Ua;yj_@StWq+7^lUxkT|uZ@xVFrb*BriyJAin0ZL2vc2S@{8Za;cFAU}tp zFde!zD-hsb-uE}NbEkSRyPW|oV>P0>KKkO@-yOK|EpxpD`M;R9Chj2yX1BJ4lb+^B zl^Ek=azJ)KkE=xWx@2ArOdele*V^KRswc)qvVKM*_xDv9{ z&7W5F(!?j=>=o+{4|k~Hdox`ozlR9*=|G{_h^Y;AY<+e-jMaF`&#*gQSOuJepqj|! z*ncdOax91I!&C+|@M(vXL0-BlO+Xj7=A00o$XflTKOwh8f^dHB6@h6kjXo55 z8fW#pzOwB^v3T`n1QKS?g+9|iuspU3izEiw&*qAmp!#xK*15x`rlNmO`3Mc$Zcmbi zpq#0bY14vC2lXC<^V6{8Z57dbzfUTS5~rVwsYBe<#h(Oh&?0i7l1g%U z9~}Vg8>1G13Q4`>J78PiuHiPjrUESjd3-5hU*vRe73}o>1tOj28NIwf=X8X%jGf3VWsLil2m zr4ni6u{hl>Cfr&C=QQklgtW61@)2lt8{4vpAJg9HO2fsxehNnx5F+&$2Pz+CxQXj9DJUkj(1+CDC z&M-*;uONnyI!pfdzPW%J3XgEGT)_lha#ju=`wHUK@2DU~;#eAP5j#f&g7mjN;~90Q zA<8S->;k$;Xc331cs>a6z7SQAqcAJX(%vArd$=wh)D^H$0rF(68l`o!1Ru)g+tG- z#M0gS(B*pdkJ_>x-BMuV#Q*>R0007JQnp?LAEYzu@o-4MDJS$bZC;o+lOi6w$uUqJ zti{xpUo>5BG$#j*&9qLg$y;kId9b5ha>$j~ot@8m?Q9I}Bn#h~)1apOa(4IfyS&tLbg5#x+HNr$C}ryWQ6u@R zo)y2=@k5CC0FQQ>Ajs6>3)~2yP6pK2nth5o4pDa&CExY*Q6Rj75R4t~==7>{5$c1R z^iot5L{9a0RccAEt2k!Ug#0p;v#73AuGmLw!TNEXw*Iaf=*TE;$ zh?GM$#9yu&PL3iwlMHyPaa{*}>lVlxYQIw!E5WSu-VHN2Mo87z&`QHEEfdy0txGfQ zBfOBb7S@|{b?y(-?r~V*;i7GWWwRJKO_;#tPO;WGh;@#Gl!|4bR zGi$yVi)OTWhxAopT^;h8Os3Id9a0hf94IKkY1Fkm@vtXoG_z5+PsM5R{sglGlPMXh zj4!}@t^D{8&xy|2DAcNN@Z4d(kA2i&co4u#1V_+i*9<|{_*y^t&NVzyRON}X`)>6E zTFg>%m~iOthNo(DH01&%AUdFXGQI|sdiT_uDN7y)d?%u4feZgATPSm9+hp3?D;bKw z*7MTYM97uMUB_~c(QjW$QyY#nOjiYxo%7}oUdu481}k2`f3-7+DTzV%UDODT`sj5p z5}F-CO$d7c`&b}dIK6`D<@C`#uH)dI>!Pe_9?bds?yK@j@&WgnJXCE9eXdoA?>CIg zKJgI;dd2JTb_L2||Bs8Xj9Z#>)RWiW#r&>^!UYIQhc_Y%4AptFp1(p}nT4`RAOHavm&~x zNM5i_i~PkN`eMIA0-H}XF^NE!%8Lc&)AH4MSFgoezk{?$%4U@y0BbsDX7EOz$&M1k zJQ;w29~+9c7e@sUmO;hN8YEs~kL>pr+=dmc2*;fvVA7bT&Q)mbUToJ3I?>)gxgpshnNqqZ{@NUFr{o*1vk`+s2L>n)qCtoe|@#3|*5`_-3 zN^e5x`NY4cw^4_=nC=Ov6w2ydlIN>BWN8U9*J7z$Hm2Qosd%*zK%RubR5N{1opwH2 z!!Smip=sx$3+l%09dmEygJnI%Snqd~HR6PCy|$#|%%g!JJk-lVS+OLg_(J|r@!c#- zmDCtNIM>&$rJ;qw3>h;oPbJYJfx6>N7xc+*SwKti1R@Jo?9|GC={}xiL@T93_d0c5L3D z2_K-lF@1jPc<#GW3B!+B-||oey@~*VI4^bcgm0DT)B8_lu?b*uu?zdQp@#PAYh(zt z*vFT2{7iTynC9zR=9MlMRyV9rNs=~BZu5&+gW8C^oZ(klI(2R0D6lil)g@4*1n7Rf zuwguo?AbcLF|hp#;BXD?HkFG}&y z7+x92j4A&qny!}?=IED60CBQwGQ6Eio3oJG=2CJSM8SJ3&Enelrg3Z_hIl5@xBmy* ziKPy*Erxv9!!Km&c+>lo^6$aELxn zk`QcC>8SR3offskm|kZa-~fzlw565tN7Pk4Gym?O*;vZ?ND?WT7NIGa6LW<*0xa>J zesVp4OLonFJ~mN-38QspCsV@dg=WchrwrPh#Co{2Gri+=F`mTip3TVkcDbI^@~>1l z5Q(ZwWVbYR-7phpM%c4fJ-4Dtfi>)8<)y#%v`a^p8?OA9-!8`v1) zYrR@C-nv(C2`uMiR&=@nahbckw(IfCImqC&PVWl%xrpEEJ=CcI-98_?I;M=;XJqR5 zOZpukQGv9%x_*NyUK;$*p7B)LzzbXGL5{-bBn-Jjb~%t4R5OyQo|>tk>UbGq*KRO$JPEf{=09y(>h4ea2b zv{9m7Nfc^qNtSV_VDN@)b-XE5?R?GM6}@4f)ts;+4?$Gjs6m9RH6l{xZONi?la4w$;>b!k*~ z(gSUR*#QuPgT6~qdPnEkdI5Y6Va+NGw`net43Y3$`7!g!9SCxYG&ykY*OiAc)t+5> ziv@J_vd{aLA>WI^6@NO+fe})ej~v8GY%1eq3s0zUM6$-3n90#ZtYE?!IfKp5Jip(O zxPy=Wk!G=*y%WS^9!_mpFJgd69K2?K;d3YMh?_4-Eoy=7%$E634awQ9(&fUUdbFRp zs(;%zAQed{pY*(+$U|uTVJW9Fz=DbW$;Kc<8E0N0M?Fojc3vtgjokj4f!(jAmroXjo^ry$%yTuXd>gX-#5yn{-u7uI{%b>r&Gk_8HYj9mVPmJeGm@?Q$ZAe4MQbn0#9lo@-D zQA^CKmpmTJ^8?gzgtAl&>&k#i2$XkA|D^9f|MY9#OPJ;e!*w?DAC>xNuDVg@ znm~Kdrnv^e>M@3Viqobi`{`R$-2~TYVOG3$pD)2 zFM7Ro#1hbbRn9Z!1cPE?(Gjoh7-IcRcuU$6JcC(RhgAU3;PDEG>JxB}&6AHUQ^}U) z#yOD5t#(H>{{7|!oo89{gRzogetPV*p?F}Q=vR>dFA#08o8lybmQEt>A$-6dS7u~L43-pfn ztqoNQj*1rpZp7n2i4DKQJMr%8@Hj2!MCFRiO6E=+1 zN9UZg#j#-oqh+*t0A{2gTGmQUTz^)$8(qIW3K%Q-Y!C8pMyF&$;uLe&V>S7Jcr*gs zW@BEivuGZIJuu)FDF+5}I!7?${}{-Kh@$V;m)*M`FaDxH%}=}p!uu)GxLJ{oKrUnrO89S zmd`4>N3&(_(EPVpMH?LAgAgWNrwx${;5b`42fdlle2U<-8Jc~7l{m2K#@?@H7s1yO zG}Ce-;D2{qSFQa?#k{GWD&v>6pRLZKpMdq-o<5+YO^}!hHD|pECAa`z?x#z-22<+? z@!$JfEu$S>Y+uv$tR4OyR799@T_^<1OyN8gmGk4t55x|6A)w=s4G02zn*j_s-ObSC>xnj zqxOOy{opb~%=<*AIeHF<-FX=$4K~sLo}L-alo|ZQ$@F}j=NC{h{q$A5z);!Cn}y(U zbgEF(8=NkZW5u%2`c)VN<3i1nZj_m+Hey|bJ5NI85giAIb7zAqz=k2EkwnixD>i!^ z^FJq}=y20=@%{MM9litgWSEoI78Z+(pAJh0uX<7(OigRARU=~*KBYIjJpq9lpaA{) z&nvK#Uk_|EB>&iTll!^${O3R?0JnuvW1xhBk|y7n)Y)V z98F$zLy>7fTrKv(LLfMOR-n~UYzIRV+@Yd&zbR~5u(|}+up+517*7bwZGQS zL}hGgMQbd}j@duUk(7h3qH};PFL&mrrLI3*A78i{6q&#gCY6a4&qZ4aszXM`YdRvM z&DARV?LdR6Ru66fQhZZwF}jx6g_fr2bWSHCeBk7r(UR11rKzk2*FEo|!GN}(rfRgK zisS#g3E^!Yy7h~98j7-Mu1E=|`ZiCIUm8LWsU&)1U6@(Qz7webQ~m2@AY>(HX~!!b zw`(_XZg538wnx6aew;YfM(@-+`&;zzRblgF+Nn}HU$a?BEn3bf9TYait>;r~?3oPG z!7X_UHg7r}M5BH>;5WnSiy%}Nm#Pfd&th9+bOTwMev9D)6p>@?=u;t2S^>9?Ay1_> zT5ahC);cR5mRj+J^Bh4*ocU2~&~`NYcs0mFJLRUE9UoMJktZ!zIL=?oSbAZxHk3Jc z_@$HN--Woa?^Vp5hI`RGFCk3-gak#`~+NF$S?OAQdGt6^TK}6ha1zEhjiua!Aaoom33<<-~b{1{~UxU(h84>^c_{(_6?rSMue6dX>D;* zEKz#9vxiJxmGiy;2>~ANqAsE#@Zhz@3V-zg00003a}Jv>N33wnE zFfDaKei@5~q*P=oaR*X~JIF7D1Q4OvK3ia#e)Iz^ED4xap(J9_S_?X(HO@M$dFtBE zpef8-|)54idr;9zfe7f=(S)c2-6pS))HAwr@&epos~aL zf&o59mi4Ml^Mjp0vsQlP%2YYLCb@v9&A~(H7!l7|lXVD;{tKoWrZ%OQKoU=l_K@g_ z%oaNU=77S#)Ctwhy^#lmg5@3%^Zk+TGkPB6UQKNcWif1{xZg-Gi*t!Zc?eM6XLlRI z_vI5y&y(IiatHbAo1Ahw2~ymmCMmwRDqhE4Kz;eAnb{b)!$=E@F4eNWk46}?@v1h<9h)$l582MyBfTsOB<_2v10%T&5qZ19G{?s4}uG$^A_Baf0i+Ck;?& z-Wkf`LD&*O+-A1}&VTnlm1;k*pX}{7;)DtGr}EH8lbO6F5&ZQd7@w{Jk8*d5jSZ*( zaoTYCe1~8-)Cx?aB*7O0@7-r=Ho=sr)C8OsqJMoHlGV?;SQ~wt@zTZvir`qti8m}v zP!7=xVp2AnPP&mktcmxI}Cep3?gkWhq_F z&v>xNn@AyygWg*KqMg{r_#+g(*5Sk*5t-uq{a}|w5>Q=qc3nok26*7(roq>F{c#f4 zHy|0tXGpog$*ABluB@UM+eKaXthe?-P+4+i@Ho~Y=>1aZsx0H{1{64IXS2_7aF5w4 z&|FSsByoGC*~^BD7#QCoY3n2k^TzqAl{l0Qq+}2oLKtoNkT;pI4gYtWd$1jrwz#+R z2TF*lA1q(cpz!JS_>u;BVa4xg`E@bP`y`mbF2F_q?Sp*1tXc^P`r~2{V7iUripwiGY^XY`eJLH6^#Y~CK(RF zk4!Pl$f(SvW*X}D!>B10PCM=$a1ZS2%#fr+|MJURX@`a1dHAFsB6=eWh#g5gdDg`K zk>nOd13-%Is0W-?AnbM@y4S?|nxJG93jV^AB_v3w(t3er5ZEX_Ffpj4&tT4VZ~||4z07^}En=I{Ak|fVvn` zP0+vDL8E&-=pd+aK9Mj95i>bqNr~n1TfE7RE$E*9S)$9(E zcwK7%5u!0b0pVbQLYU#mrE%>Xr<|_TV~Qw@rf9EO6yBsdHiwpaH7|R>0^yQXQyDRc z{hDOenT8MRKh5i7!XZ{ykg7XcrF8l4a>dLvr4ewV=!t>ONYgsX$yDI*<_B+5cM`F7bt2oQ5^A(H$KsN+ z9#^Ic?B?*Y^RhET0FRGxDH$M-+d$8Xlf`MzOJ)oP;I&W#l|#rbMm!kNl51fW-_F*L zecg8X+o{YJg*sXU6uyt9r;;_UeoZxfS$Omj##S5#+({&Af}S}chYOmrV+`WkmL>w? z!^$vGnTgRXGVWSmQb0SCNV-jX1H(z)q@OAa9fp_rW*r^ltYjVp=u7x_Lb`T!Yy#N- z$ZqHltB4(Segp6^Fi)iQbr6N>kG##8>AuH=lb4wH_0t%drpDouV2^NQln1g5&7QkZ z)Mxa##LyCe=&CACNEsGZGnc^^mGY55xb#-PS9`W;LRMm4xkY3I+c!=XIDcw!hVc$V znD>_UzJp|qh7(DpH-daw(H*wrn8au-mi%3!JF=VHzq}6Y!N~xT_tZaBkH#t68yc0w zDruoHr|Waca7d?(+c)p~R{At?e5au_FE(l9&~_7dK2CI{dGA%n)Q5$R%=>V@1p2rTf3uzOC0hth9gh$}bJ4QK&hbgr__Cw?SnipOF+t??);d08itJymHWg;-yCjhR%gq9kCY-}?-k?h1?ca|*e4^RqUMDJ>!UV4dDxT7^P&Hm z&(5wBhW#;&(<~%(&op#ClLu~i);9=Lb#%;i0y+zT?HJtMh;s_wsGb&1puaVtHz&G) zF2Pp1zn|)r`as9mN~KG2&Xskb{#8qgF_RA4S2JRazG9>vDjU0^k5y1E)`&v(Aq~r$ z1bB7v9-EXF=QUyV6Wg_}tzBEsgwX&wPh($U^Z^f~UF??#CP#7rr1^}4F_ztb=?%B2 zh>|YtMKqKvlK^dYm2EZh{0@BQ_xPV07IuLPW#R0Sw?m=NV@&A6m2_DeDz}v-X|vRO zE{g{ob_gPvkEh*64=}OEEx)H|aCkXWmR8x!)*h69p>9NPVqDUgagjL6=hGM-iH*US zvY6Pv?o2;9z2L9KT=nVta{0E^<7M`rOuw6Lr`W&ss83yIVL7MFUm7PHeZjJ#6Bn}S zJ={;e*ZNwmiD#?%+ApMgfBW{}@vn*$gBdvvUBTS{G@86x5eiC|1ynA;As}4{bW04Xp7Gj%Qw3~a58MAyozq3|1*;lVhqJ{@t|oDB1(bS2hq6rcbVFhX66 z!v!Z|q)X4nHQiP5&1TlJA^$OFpUuXVB77+A9839rC05euDjn5=oVy(x2C}gD&YoKs z!#HjnFc1slf*w34{PwnH>5pB}C$Cklhiv|0%A0x*UW$Ghc3^SNAOHyFj9FTOp&Mql zfp>;9eu$qtYSB{74cE`000KJzMm2yxc?cnrGU2rAQuZG2jRF`_dpQuz9wRERQ7z** zIDauIHPRC&^Q$l*W($D0AG7N(k(UF*#^W9}d76~3IO?Htkk)2x1NGl1SP+%*{%diX zCm(bQ1D~r3ia6!4O z+x~k=7`KC~K>6KLOg$8vfH7=QRcAlHzwpQ$UlpuY zIV9n$iFu3T?WGFDw(PEZ3LCeL$QlYE?oS-E-k*d2?X2gZdcapJ5cbMrsSvo5@_cij zC~7G_vi0`~6MUtJfRjLS8gFQ%L7B!WU76q6VwcZJZ0HL={DfJN$oTUQV1Hjsu9UwT zdmUO!3waW{An*@Y?JXmcBVNTwBo@82uH4(JV%(?CbI2oq{zegQ!?R{!C?Zq?4g58W zOe^gjwZf*)`IAsg98I_52K&4^_#`Xq+SbJx`!yCN_b#c9>G~-}$kYUv70ESn^wb-{ zgUo!I#iie;H<)=q`r1Phxq76lsC^+Z5kgN zYIj|@X_MFfx9SwU$c5Wjig(B#{y24_Nt|_&7-GT4PgoiAWqCi069R$zZW-5a_oZD^aD2n)Z=KmuLV&j7`>^sRQ|lcEKe-6Y83)5 z1ieUYfT~<6WwY%!tXaW651dMj#S0;uXifa2p{~^PDjmoAQa@3f5-hZK&?_=U5iCYK zHm0T*>A{(@wonVou-z)Fb#BlUQVP6ie;KPFKAGw;tPn9FlBFK=R^%NOQA@2w*unow z%yn4wzE849|!4(r1!4jg&093a#bEH_Y8c)S}}728g)|k5|QJqzJL>`tl>~ zH7-C`TY1FZCWu31?Hy9%PQn^Up~}8ROfjy>v2nG&?eizHo~=Zy;*)94Gc$T9ZvP-+ zT)^u;^_UX;9{W6(%<$A)1L=+#zuxt1@>^!Nt0|w-T%c`%JiIL!QEJTD7Y24jJud_e zBwifHgdJPe1*3NKsyu)+<8;D7R8|w&gsO3Kegh zv4bk8Si(%20iXpMiap8a)gRYyuJZsUvKcBlRN`Z3wSXA5dgVRQ1Sp;8JMppsJ#Yw$ z-egqv9Ftkip(r)+tKByJ-~kWg>o_C-XNj?u2{JoyL3hw)xBibRfuRPEerSSwB_xlv zt~|NreMI%z_PQ7EiqutjeJ@L11m41S&)PHSt0?4AnfIh9uvS+;oyn2DfSWx56MVP; zuztas)PI~KM?q5*!cE}TOu;$yeAJ0xkEP#@5Sy#|J>LM>OA?wei1=(#SM%Ub@dC3O zTCTLq-F@DAts;EK-3T|ei0F9e)Vd!!Q|aqnju-2T3`Q|NckgYM8#z0nFR-|4VtEg@ zoSOl=G$S_oea8Ztuhvi+JR++VeXaWWuf9-&G4+Q9I)@a`D-S|*hO$5fa+p{OcAUgG z=FF^^H13DtVja93DCnwk@ccB}FSKYkw5r=g007a4T>znxyQ#nPdq1FcZR3NkY&nF2 zL!8;TqMvWwT|CL<+y7p>f3FH~n|`GX zKmZZkwyfqTM(_XtOn0*Wyh$Xcdv;0m$VRnrEHIkLkl49$O?**Fr9mQTZ&1G^C3Ki3 z_}oCi1Zl7fOYVe`;`F zrC9*2q7K^dbrlBCI?cS#BoG^W!;e`8UhEMsRLWhl5`AU5%-YJ)rhJeKE#j=tTL>Ee zQWH55lXNbi;Og}9M~GdAV~suEqm3MqwGBmIsPR8vTUonZM{!=b_rbY`R7GNPl!EG^ zgFDMlf#90@rsfL!PNKzHekZTV#g-;Gm zA5(JkGKw@3fHU=4ks@efSA+VWinJ=sl;~UD?l|rA;AAu{E?4&%qkE^yh8)c;tlYBK z&1~hYDM&Oj^s+yx)32oV$?V-~|~gf2w5lOX&eng&cJjAQXG zR?7akG_MWs#trPi6Ud6z$>#Jc_gadzk8=C8+ovjjwg(wI`Lmhr0&MgIZsty5+r(LF zQl4#R9gmuPW84Npo!|_J5bIxVCyBBqi-|2dNa10dL04tDA&LQNm`(XARh?gtd?52& z1oQY%ya%P+GFxQnGXNvSQMicK6OxSUkjI%qkTg8N?yYMG9%7V3By2907;J?`BD#U|i*uilH;W(AjXB#olK`p5$y6mw0EugO z!y0inJ_X)-q!#betVXYwrj$7Xq(yDMMr@C?yFkx|RllMA3f(g8bBfVqf(jsJ4v^UWWO9V1fK&r$(YPZm>6LdECLB`~$vW0A%Zkxu%? z)Z4-WG(%~*HRpKf^yX-=uEo64GO2sv=%u0W-t5UAsJlFKR+_5$Cs1=3AY`=D=!DV2lO@Q0pl$8DEQO9aKmi zK}1BPT57q4Cy__VIkTcNUbH-xJ6d#gFMO%ssZ;j=K5*@p0a&fwboAWtAdXZO@;t#{ zLs=34Z*VVslz6xnnj%~VK8p0SlHp{0%js!mdVKC&05xhFtVEOB(wf!ycXk80@J8`Z$wi*kZLh+9^l!_ev$%tgt}X03q*4 z13Fw9exN=jR{?gOk}597zf2r<#L^Cm2j_P9X`_;Dm4v$+WGW&5{7ZV* zZFK^)2tRcgV4~@wQCnHC2}Z2^Q(YQ-W5}NxS?Qmiqj7 zbE@eQ30mps2fkxW-pKQB%T!ymVO}N9q2Icd8sr-pNZM#fpt~`!$P7Avb(!W&*(`%! zA7@{eezrNE-0^~4GkKH+w9NimZB+9Mzx>TEys`i+8uGUrbXI=_z~Qg}<;zzkiF?-* zG5nF^XYB7kH zwwlj>-#lC{&{fCL;ufJ7KqSyj@Ki zlw+GO{wK#y;CnV(x=)FYLb_P=nPWo00G0p(+xLy{zmg&P>eeS0ILAQJ_*C& zTO9`s00G9^Vj^e<6%`YGUxd%bAu*&U{G7q?fZH1d*g!Sy$#;moSo(xu{?8@ULWR|* zAEQpG1D_e_W9G%Nnys+;S3H6&sl1rK= z7HxE0ql5vo!b=VLhVd`8YKKqXXwQB0$|%;;vJUJ4 zdG5(Wgx4oYSERRM&5=8&@ZwB=D5W}*l^Hj^CG;|dOnLLFZZ%z2hYMt{vXw!j%zf@b ztEpL8AfFKQMS$}=iG#YUDSJRib5~$e zaFp6$mBIvd4EZPK39|NlgTwK03mmH(9zRZpr!#itjO+54w|&kfUrKtews@*0mQ0zv zsQFT@3>z~xCLd*NCR#NeqL!RXt`7?t8l^J=Ev+fR*A0n8!&2ODS(^I+m~Z24*==V;YNIif3g9w{3mTW- z2bE1z=(%OcG@zxe#m#7%c?D>|phi?{mG*{6yMQaTy5#TkD4;Q!Cf4j&`K|n`=1hRk zqjG5Dbaq+n0H~Y96a;^)NzoH}lp4SB37rYa9yxvN^k%b>*Ae+9kH8CLn$Hq?IVWJ2 z;B&)h(_hAwnzAPByxu8-C;gX<1d-tUHce2sYq}pjvoKykWvl$x8DI3Ss?jTt+~$Aq z^NWESe>{G)QNp5S=^A;i^Z*z?aM_mD+iH!^EOlm9%KdEiVrj~HKi9X0sb!2$xEiV2 z6!d3MJ8Yb(hAw%s(*5W?CbMLyN=vscha10e8eV|JqMn7+@RtawBMn+jy0-7}Gmr^s z#}!Mnl1xcWjsULeFuV;-2CS#)d0O2C=Vb}T?_vm zE)c1~x+Tr0jjkc@>OMm`s}kE3a)6#&6O7q1`Vx;M8+_gqb3Mku8;J&-t_8^^5N<`Y zAQNmKnw|&`>YA)P!=WAc?0rg48|qDfTFieqfS1H-`6wMc;`1Fll62vnw!1MJXjk^- zg=MqT2_73BZd4?4J(MVtyqjNFwQzSDdreYm2JvAXbIf6nM#H-lk-;1YIY1x_CZ-qL z4hCe&_Jlk`3I%J&g2FpgbEg)ml!3@SKndMp73v<;o^$U|e+8`?{cW#2+c+0J%3JS&0>6v4RJD9=--JX?tKxJ7gBiyDzpmmE(K`QPHo5 z%Va=zEU5^iucDn*t_p>Kh#D*avig@i=(|P=Vi_~lG9WR8HvxpXzUg`?n)~JRnJ~LF z-WD+-c4Ubh4k6ye;Qk^>bm_rM?O0yrvou`A|86sLviaWE@M+68Xpab+00+)R6t3kP zHcCjKOUl4*I~aYp9HXpe+T&|L>}pnI#4u@&R4c^jGLmP+Vf=lj8JwZXUL#OT{5HlW zg9f-O#~&)WCv7`L3*L(IA+Jl?b} z=BUdEi+f>%xy|J=QiYYYwB4*Cp6YWd=A=A~^)s?(+o<=EU@@^u6QIle$8dvrseS8| zNn8=}fdDoqNJff3fj4RiMN@YR_PF=r%UAxHTb~XA0BJ|tprbr-R_mxH49kaWa0fxt zmxKcZO6N^Z=1Pds<~rk@;)K+9It||Cu%8QXLJI=*#u($H8ksLm4laT`E}Fw`8d8ah zC(nx*dHBE$5c$wm9^CJ76zQdDE=n&n`>E3Pk&u^y7KUeCXQ&Eruv2?4)_-e(hYsUs zG&~s()e}31pg=L;PBoJ86FjKvgZjW+O&J~vj)_xc&gA(+^06efC|GH+X^#f9UZs1b0<>|!~>vOKLEF4r-Yh4myKy|I= zha|t}25Kr09H6;<^$(uajKfi$rxR7HwmEKC%kesSoQs;P2@^OJgAAMgMecdN4E*Oa z3Hr{a3#8iKkQjREkLn*ZGI`Mem#~=3rDKXFj_UCumOeL9Y^E@%sqh@_)TC5ji%&k zNj}d1=!Ze6ASJij9FnV@?WjdUv{#xCHEHMwj)E>>i$$MXon8Dj;W;tKTxt=TiIgvH zBePGV>)<{3V%aWhUQ1ijn zL9c>is{9{6BmX5j4^Odz@igL_{~Tio0tmdMj|0K+k`leSJI6X=c{j>~Z4Mgf&q|~1 zicdK$Xqi{10lg+QEvjNm$}+Ze{#qX;OuVLfNjydO+SqqCVmZqjYEYGz5Nw;il^ zlg>k|rv3mRt|E+l_9~z&6hSX~Xn|9qxU0Z4iV8YxsJH0h4g+K9hS@ z@L`BI7_@rXFhz2I_E&>`SHi!;Vi*iwn1)sLSYS8_KK%n=vh|V9;FPyc4&D3PB)MTj zcP_YUtr>WCSJZI8>-H*8`oQO09h}CYc^J)DB0BSdFLVsprjW_ANK#a2T# ze|+F`dcNqBgUE6I@MSe+cM;=!24x|^6Q1CF3j%{n+9eLY;_?^}!(8qClZ4b#sgbFb z?txGVRO&6s^B}=?!DMk%2o_#VI{b_!2F3kW-(O$vh3Leh01ixS#j|0KRK?=^6OMFA zi?xD&oo-Y^C6w7}H&_lW3g*e#4@!IfgY`P>kfn_^qc}E7v{GaNBBw}(cagO1oPWR^ zEdIaZvCzoUDW@>~wY)Bb@Hj<()h%`_u-qcD8=i>ZiY6|dv7-7w`8C@>H*1JvH%PCL z=9-FJvnUpLz|G?|KsuRx59ZjYLVC+i-FKt94&NIzJjM_Q66^y;dk{wGK!mbZ=oCH( zNH1!t?Cy^BPQlK=FaE@Z3HtNIxd8c;hq!ch;lhMPgt~2D!G*ONEb86LN+t={vUPlT zcz&C~J?lKra z0t|wDGJewC!gbfe#Gj+{Fz_48J(`ZNiqBgSL`&g{rDk;ei1yuVEtffu6; z3sw&spRS8g&YXvI$=;K(#s^K41V&PW0b$w7zoXX>SCEH!W9Q59VC*IJ(%`4<(o&C= zFspC?8^F$Yoo@gLf~_bcq3CW1#hH8WG9iR`dz6L^NgY=%r1#%g=bQk51KHE8_JnF8 zz*l&EvJuMqAy?Zs0RQ6$Zrc(GAP4VZt5)JdAFdE??wvsg@xt{iob6Jo+=Ok5;1J)8 z^XS6em-WHZr4Sv;+!3QSmx;-rW%bcO(};w`p%%kao4H{E?fseN2$8jsh6YDPFfeO1H&j@rnWh)+Y$|Bm&)E6$ zH2pGB;~tXdm~P?55j50PvV{F{6P)q8pTMk=|$^aw9?&*(HvqiW{z5eu46 zpPM)WmxptFUjNo*XeNCocsQ3b7z-D2!De)xOaKQ=SHieVLz8KW_c)1v7wFc26Y=l0 zCH9~I+HV-qRCYF#Wf5Y;b%RSrYRdos51;@8NOFxr$&ujm^#9b^pJcC8KEo|24z2J4 zB%k0v8x3WeqU$)zjc%UTU3*O*YRVq(dD82SxGIK*@Iv$voeP!#0oDL5td^g5$}HN4 z@4e`>ni|p}^8+9&HXYc;Ag8i(C`oAv5C8&251!auME$P3t+S(&E3G1DG~ON4VI}{i zIY!v8e?^P-nlc=U2Dee&Q*&`=@CFe%#HM>i>z{%jCJ@$Ne&s%vNe~6e>Lw!jrPu4jMt@W$)p(yB#k zm9BLrb~CZQ;=DPyqWjoj05O|uOw5Mz6#(3|3_3h4tIv@;&c@a~fT zx8?$tdcG&PcSr^P{W;sfO_acXb!n-pNpCNm8@5~#5fldR!QX8Z6loKv@9l^pKmZbR zE_M}c?@aOTw_335n$mm~W_kBKNM*q2>4lnO1BE=j=#xz;7&>x2ft?zAqy{O}@C z!-LWQL8hvXudA9VnCtBC-8X`gc+53uyI>Voa*$t6931MbZa~QG<{}`tYk|c-oy=WV zYbl*Dto*)6g@Do+Q?JmeEA(e%0rJu|elE>t(Y=qw{&G`4g8ngz~lwj0pW-Zn4c2`wY2jV}Hj335JUsOlLB=$~2G84V?a zbYUX(hXA);(LpvZEC0Y&Z1DgYvE0QRIh?^7^eah?b#H+}QYD@;QN*%8qzZaJ|iBVd5YIS*h* z(oR$X0*$vhZU3(#Fhqj*zB^l8u#Iu)0yFnCKj;+()EKOKtudcyaQ?yVY)Xa0f55YS z>ASO@VD3(;heb2*nXTAy5UQ*?8Tg``q`(Gx{~8)Y_X6Y2spw5WO|;jcwQ~rv_hU{V ziTeO>uI^!+9E!#$xNA}?93cNtFt7OT1av@3(`jHq9ocoO1m-*N;ZCl_jcpFr2)?Z( z=aA-_KqeWi5W`(6@ohJ~9ub|*ixLlJ@OW3P`met}M(P;;)t^l7*#Xjygt=_`)!6uO zt&-1JkeEXR*z4cm+6C;}UG$eiAn5yOR_Cj){%nwvBd#S}`NO~N=+cR=D>_*ACVDmp z)w*Xtwy3g2cPNVn(w#(p$guhI#t!sBIF@-?f&Jn9bn5gqH|NzY31rD z37y3JiCmEdlwo3_AX0_1&U?kUnbD(&l9B6)?$dtx;>pV1y?M}j&Vfy;3GM1Lad*pY z{X8_K#J4#wn*&^Co904kti^w^t+m$0qpLt`O_#d`Sm4(&s__lE*crVJ6+Q1TH|etA zqA;54CW$ta|J$K`q{Hq~WY%;Wrg1N2=Eui zm|9+lzV8oYRHo9j4;hZsp_H6FOG^lSBe^$u6I&HTuAZfadQBJ_qTMhugK{Sq*Rwj^ z4Jn>9!&Yrg6kxnubT-z$gNbXx-p6w9_;XH9-!)R`U!bM8iDNcT!8eLzuFVX(dvO z5@d`oBV$!*(QUx>GM_E&7~OhUxYM9xD;QZnD`}EHZNRNWaM1Qh*7I*GWdpyE^q2(Iqf z-@O;s@}rO1Q=tP2HYd2Z7+%Y52-fT1h=WK#{hB;GYY{s*MSXygmjd6frhtdZ+sZ~@ z0Ber5%erUNswJNEaRG$%^(I|L$N2)>3%}srdzhQ)Bq}%NwiKKu2Dd~hfWs#t0rOWN zl=HB)2{ZQf5@}4TaqAr{ix%UMPgGDA`boe4V`Y1Iv|qYVyWC8L7^I^I#BD#)TcO#0$p*~ z0*5Qh7gRAtwCCAARL%>cE~1Iv{&mzgmTfw%Bsp7w5atHQSQrAorD%I_0z&U$e7m_m z=*lG9|BQwH+{?mv-QNak{T44AUA2fq+LJN9E-;i|f^6O7)nntK++wlQ^8!s~XK1Ns zvp~P}Km_rC12Yr&hKOpi60z8;D!&nlTi^M6$r}aAWe2OcR;g+mzXLp#IGw&b048`$ zKOKH{{y}c|lm#nKK>i8)-CfRp&6&vhi|4(Ri5$v=4fj6j>i;3PT&yjc?bJf(uju-n zs$$)YkG=9ahZN^mFVk%R7{yAt8O-VBX!L=zdQSGlv?2aL3@bfCjK;Soj;dDFM_0}J z@?z=X&h}0P3R2idgoGn1+!Ck{ZBt%k&KuNYH<>fvDA5)@)A+8LO@usCwTXA6sK{1V55@}n96LX_kH{Nw@YXmyEjl|T`x z{_>-fV}@N!aFcCM-j?;D9+s)8Xff|x?mUzGW}6l0UJTwus6cqaK{NMk?D{vEET_Xe zi++K>Y=^SUdfL6OQZr4T;%jj~tF6asB>;<;lQTu-W_Nc~WD!P!MhM-YSA65Gv7;(o z?0Gy=04_N?;CDwJM{be4TBoVOmXqC@i@jt|AWqh;>S!RhM((xF6JDQ;ODStwN8PJk z^~)49x|OWoeIoO1_o)@!r5)&Y-2ex`@Q$=-o!f@|?zL=qn#q)6W;DZEoP(Nzk$J*|!Wss`07N>fU#*pl3d9aPrJ zHli8;<;Q5nBeF0s%93*hvm`kWJyba=)H33(NyPDhu+T%0$JiV>C(}8=R5}1Z9y_K25UW2AIB($abE<)R8#X^vLQ8n3yknTy$SFfIXLSjRNwBw5*jHraiT%d%> z3&P+ng9bnj=Y!=n4|sK0lkfKw(5DAUov>V6i&Q|nzW4Ryp!##zfFE|82!Z^?Q}v;e zGiTo7ol0Ez=G?kcoXkJU5@SoCUoAlR1P_a8=p7@3Gw0^XdVQSyGufv{;t~}S!v-F` zfDQwmJ-2JQCX*RcR;B@-L1m|S=)NwLcMbBb8;qm-#wY{m1Z_|?B3AM68!GH2kXI2O zPSE0?A~W2iw8xobWo9Z^2l*i&!muZKRmmfe*A*E2u1Rm;ZVA6zyjZ|N1$@fOcw)uu zlF}%!++UG2L~dHWcn_Q^(kkQatjXO+=QE{_yAOAL_{-ljc(k+5;{jcZybn1?ZTu@C z_;VO1HBi@pXIGk1X@s$LbO*7G9{9W9#a1pvnF0Av)m6`;aklLBv9(WDD z%!$!$I7oe+0bTCrYTMuzPye#i-gNJKMv|w55qB8bGUBWW8ALn;PD{j=^m;M9GaNVU@kg1J#ES%5^kJ)Af7cMf!OMJLrm5_~4=-`+J$oi@cgJU_M?6oP5s;j7} z1XK1`KS7QF%N*H{Q<_R@m;y=T&Qn>d#D|gli#>0N++A%h_>7G?G`)?p-Qv%Lmjjee z$t>-i@>T4Y5ENCim??8zaZ^1FS)?9m*fwQ~W6;{h2!c?C(xm?HU84*ASG^yNTlL4X zabg!G)^)$sT7oZ`G+M1`GN7G>$)=>adBd~D^ zgV9~^u=Hf=r6+oj_%%o6a+Q6$^|=riQ2`bgl*TO&aQ7Sl1U>)_KRxDC@V@8(Yg%OP zi5(RiKON15sF6E@_OR)uK>cfrMUnskXR&w*LR#6t04Qq!k6k;<3vFmrfTN~KehGc! zc7Or`00$V$#^L`}Fv|bQ3|gz&m&OzTL2VmH->c|QsZ#31*Gv(p%z^47g3AI`iNio4s_{OiaI9)?^m9duKEn81r{>{Obb^(a~zPm5Me10Cf)Q5IG={h5Rqur$i*_ z?MQI?4D^gSdE>UqKz0^#ya48u8o^Z-8U0auEjlk_Fm49+11nIC0eCS9;@#HU)=WWh z-WuOGNXB2kt%_E}XqVJd(pY`~bPPTl)1$addIuT-fcQUwSmWpsGa~>`0G*&&iJunr z1wN|L>`ja5Pv#35Qw|vK{7n4Kmp{R%&Di!2%`A+WsvzcUi!qaPz6b6!p#!2pFhTB@ z$Po_#%sM#f9Atb~;bB$)0%NxTUiH>l00Up5Sqeu`Pg6%>f--u)F?G(fr;pJ(Nq|+c zTo!9(=!|bgrtv7rT>xZMX`USxG2QY?F)9gMLcbpv`#$z3PK`>KM12 zr>CPs;%Zx~h@`p%EGxnC(L&^b)IB$5u>{Aap~c`{-&5ZJ&dE6>Q--)X(Vk8#_Ue8E zrT#}zqjU$b00O_PbF}m5S(fe7e{ljHHJ)8=S|=r5+a;UrkPrcBCqs5Yvg})Y36&IB z007}#@Ebq!ZS+zuc?8%Xpb_#3olH955Brlv$7@SujHJc|a`s0jddc(uWHKtr#=oS; zpCD<0f0J#C@FFd}-u*+4LUUER(G0Ekz&Hv>Od>RE>3yQXrK%`Ud6Jhbaf}jH8II(a z#r@R3Qu+#+OZErSxwU=igTZ8j;7yvpl3x<_%%H>GvKsxkB_XVX@>f^GlAY~m>L-vX zlI|6cGUsu|wS?{i+l9e+5T@RzhVY@C{9dzQI}?%M|3i1u?=6*O22Z+~2EyV*RXC5k zuGN4Mrt-j$WZ0)i|L;Ouf73sgRpWUBUxk-vf%E$gGO5E^^{g(yN05<+=KBjmhmgKb zVfX)}ho&9L$?jt>qaepV&_8ce7*A8-tzcuFaA)v1b61hp{CvH0MzT2FRL~Rtp5MOU ze)a7(Mby(MJujxRvjh7m`|k;;^s!k){|}$tB`px%dSzr8KWu&tAOORF00)ym!1hkub`u!| zR?Tj0@Bk@;!Ua}FhD(2d$ZY2yGyLO-6P6tV)~c!)>jm?X;GmvK(cCU?fVjrpXTEEjThfYdr>|YA zI7fDwwi9X{y(*rpI7h7fIacC>Z+@3+evtOW|5x>*hflXh7-j&wb8sUWRaS$?t7W>L zYBR7@)vO4&zGFPq8q%a?GESe@>6i8A;fM&?`p6g|uiPU1W&!}IR|Yo+{{ThaJ`gmbpL|rm$pG>Z+YyDk znl@=fpZXpTq9~BtvZArWH2%;t$6Vhz=7=V7CYNWP$c{! z+LfFC_Z*&hx9D*Ez#MfWgyT}@=B3{Y)~LhiLaV5_e8qayNTrF?aJ=_Hv}uF~E~Nqj z(fP`!?ypOPd-&)0Sc?hUugMOu0^(Cbr@uCnpit$vf{jmnhQU%lfI)Ki#dYUBV$fRpB*eDjxluYOt)7 zYwPl{-H{#n-~TrWWeh98kQSEgz*+Y^$)){ix#fZuAL;rr)AY!p^K9tNIq|yHUTdAU zY9(8>(KueXTUoIo>=+l;DhjN^aZB2(v2UHnG*V$t|z`b0=UCf~68=%4uJTHx4^K+ea1bZ9lgM)>bvchq35 zzY}DnZD}&FelndAm@%Jnw9E;d@flL*ZAB2&fhq1k(S}b&)p#wwUkH5oEeI-;uM0d8 zc+t`OQW&M~jcYL*iv&+R!#3fZ`?Y^U$r~E0+1mm!{x8hE^Ey?!G>TlCCyv09Bff)q0xrC+N)i5SM* z$Xp@c@tbp-qLlav!99YmdVzJD8OjI9cs$AgA@#IV1Mp6{>%=xlO~?v>9hQNq?Sn1`WM~CtttU>{lbUh)}Yp+tHKg0DUOP zfdz!9NAcf99m^FOsGaML_1kcXCPv3rTgtg0C~Z-~XChX#vb6r^Mol^t15-qh?rL+g zuI(6wl~+Rwt%LQF+Oq>=vIwC!JJ#V|Nkfm+o)E1zYniiZn!ndc90*mD2rSb85jg4= z0qFjTsF=SKS&Hbsobbl&$gHhMk=lrYNKEcN`dvh2hVsTk0UMiycV?T@f;>j!9!W%9 zGuZrV&3#NDcV!3j39-ALdlY>!jPd&>s$j#4qcr&jCM!i0)0F}(T}bL$&~esZHJ&Tv zOg!v^DllvYX6wiN3``2%D!JK8L@wUsBq9phaF)8J!9S~O?*bzzq0PV?04KzR$O?{t zMfAl+tZG!1Qqp~)65;pkHPrdGXFxIhUOIXEe0|#2vL4Hwkj4!x!|WHx6N4FarLh!O z(`i*}EBhOfJ+NFM!_Hpg8XcD0r3OwCyBaZ%o>oqkhowTv0aVonGp^d%1V+K*#kSEu zYd+#0zP$#USb4S>4&Ja`B8z{%miA2e4mvPoL5akLNAEDc6|HXN%sG;d@dr8vPc2p7 zpPpfkDcjE`!KeJ5tQ;o^`o<)o^nc>a#c$VOnvY|MdkLe%xeO z;$1{S_u&)lED&BHPL!3nfBqE}g_tk+%v@w@a%Pk;MX#RY`IXCs;-%0#B6V!RsQb)a zmxm!`Q7AbRWAOpSEeT~fgn7b%z{s%A96BZ^9=;Dn*$WG*g4xP^y)^#uNKQ{a@gI1I zV?tbY1(1l7F>E4xP0cg3MuawD?p~8PrNV7Pw76`Fq+sP>ovsfRL|vKytPY^|7(ynm z1p3A}g>QZwkSJg+j1Hf6m^4;^J)agV5b7VoD8&+jZ=(raa&!vD9~!d#dtpUl-J7;A z*JvxYw`${Xb0{$~r?Y@%wHqDO*r@m{*0z|L17f1Tx#`<&Ie}nTYaHno_z;^;~fd zA}KX|25#w1z5m0yo1yr?4RY{z*IDMYrpLz^{9cY-I@p15229S!yqLo8h!l)zvtP^h zd_N%ofL-4O_RZ~9O}UIch3y0Er|T9!6xS<-M2j24_SVckRUuNVmOv^_Uu|iE z4!zU2Vzc`l8o%&};gGVG3Qjy5hBZy)`UGO1i7g_s;K3*1zS<%(M+s(#zkrh2t z@oG|m$|-i(=e zj!Bn^hE;jrHG?DLQb?3|)XMfg$gQ2~H`X~oGl~w|KzG4mnK5k$-i@2_%2>NrAQZgQ zn-q~AL#B#_{yz4jo$ej*zc{FmS53lzrBTCU>3A2n|DMywKt5hV`rYUDtqy$}has>` zrYh=&aFsA3bVTB;Es3$@O6n8~qdYobco+zxe4Y976x#4Oj6gegN=bum{T;?2hpHeOy^51->(e5Wl2`o{zwVfCyY zTEt)4-3cJU+<1+_e8MN>P1J}_@s@gutoh6sZqqV{1dh;GB2h=LV+gQtB3TsU*c@X< zMXm70`IJ*r8vdXh=w7-g#-+OGe$k(~1q+kjT=VQ)^5W=X=WPmv-yW4lBolLL#{ zBFLYkFyg9^xAd=Tc0j0-v}pLYhDjmDu3{HQ?{h~Z3=o`Sg6#T_0M$g%BQx-0>+cxV zCmTJwBUwW1v3T)X!%VL!ttk(au02%#w)62nesw zdRQ!3S8D292>OQ497^Q}QmOGCsvo>mrL&qJ3Fd++zNmlLeqE9{&Y?82fx68M&dJ-4u} z?*WbnES+MROIGCz$3D*-E@<-uK*Bejqi9TW_RD;Kz(i81*bE;_PN>pExwNnc=Yc=< zz!_SGv0RN1kcn`d%n9|3(@N0=1FuNrR;3~RZ@eYHVOOUj;jx50LsX)jnUU$7MM7MA z#x)Gg2IS%ln)Oe_QTMqU$8+;lyl)Kq8ZE0H^a-M@c9Ns*P#$|7 zQ@j-)8Ge?$dGPO`pmN?%_4IvVG$@hzz^pSy2~7^F+(SYDX|4G8DS6IADlmZiwwFU1 z295b0g}OTDy~uhVnzsjlc&+iDOJ!}!-99A7iW0iFlh;({&mZml0@xma0Nfzn=@w3m zR%E+`^B)0q+*K*z=cwoCxk)pKwHxA?|K8+-)wh+lNh*qvuqinRvUBN|a87KhcIO2t zb59^#?0I9@P=`n7jNVkZq==BMApJ}H;~$|LtUF$Bef!A`ie&yo2FF+aO=$xF1Bm}w z<)gfhylb!EH}#<5j*+D0TnB7yNkQHdhXc{toW$`APyhmUlU<_{JFqtoJNf_rm4D*T zzyI{O%CY?K_peNlWZC*Y?jrbQHlP3iT)%IN|7^4JPvd%ScpMws1ZfBW153(lt^G1X zxUd29r+S-g7jN!a{vL#TT&V$UG7*Su$tP*=~2eBW&Z}$7w4VZ1<({8XiVby5j!^E9ZYy>xv4|! zo@#dNTb3Eqt70`5c?Mk=7|4s+$9ZC9gL{{w~)cN z%oonv3?CcyFvZfHQdjf`1&3!>dy9!~=&@UC%F!_^dV09y3+7BL;(-8nG8iyB7N{?Y zpg|IE4%*&7SQ*)BykR`XOG8N9tuZjSfCDk%WlI`r2s)Wkv{db(+0<7)-!ilMJQe~e zx&$W#YNSmmLTCMpeTElLHywU+ZtNbE*6oYNCE~%C;U56|hhq&DEdTY9gB+kSyYM-( zP-mz-YR+3R-BNVhKxwWkWpjC|pilq_LOwm7MK)W<2}HS%70Vg`5cvN{!lx_g7dj|) zW;y}1s;F|3N)brMn2kd^3DjS}mFWa0t5X=6hyWsXz#h2*HZ&*v1M=cuA18Wu)7EVw z_Hxju8xbj^bJ8>FtL#{SvdW?uBG>7F2YUPc2p=|&^npJf!kPTY7AcNc0q8vShIOaU zs=INN#r6e5fB*=-fCdeCyzFAZ?jPOrl3*Eg2SC*5+!zNwz%MpOX@i<}P$T^Q+=Bow z&=3Ptrq&7Djsjkx9@EA!9?A1lSW|3Vpoa&BYKYC1m7?4avbH3j0$qJ&1#gEkZc-Rk0`p6*_91EI5^6H){RD2 zxguLT{e3_|6ajb%4*Ok^Qqv{rL$r)>fIRpb{C!=%#P@4U)-vlDfBHXbe;$_G1?00| zN&@Nrb)I>EGyqEkO=@CskRhIdiE!l0b|)ts9$VTmT_nJt9Avz_t-tC(u9u zuCM|Th*_jM59y+y06%jiIpl$VH~6pU?VbgJ(TAVXd(I~{D7_AW0#%K$k?uQV`I=V^Kmf~7Tyghf2&MGkR|KdvzyK$i zWSsQ?AClBtOPg*00jDmi7@Bx*!NJ{6nIEC}5bwM_Hom#B7!jTE3<*KR_~r&u!Ct-& zzxzd~1p`K*uL&|%cOtieEO15ce71G2?qD2ByLe+I$Pw{h%z}LD zbOjpV0r{~eAQ$6=jhi6KcK`!C@g0>mu|ftgX`KL}A^vjGU<`Dp{oU)|pzEuQUZ}wI zjPdo#gn=ICN?cLM0037-Ys1%N!~K}*tn2!xUAbH9EG%BG^DRlhQyn$h(dc3`tk3sf zvX@G4SfBz}Z>9gg*_C@qjT~b!tCu3c02Y+D6fhay>ug$ZyRgjux{pu0?WyZt;D~Yh zu6}z6py0LX)W+&OoAy$*0)$8+01(<^IH|qI_0y5|_>zKI)KgnDYrjnR>{I6h^+&=1kqN?{lPP z3L9@rqgSLEXUvOn!Ulqyr~m;d3`aL;@O|-unCB98A1oSy+sM)|-(TQAFw~xD7|pB4 zXP!B^HSXi$Mf-M`MK)<-^#*GSBoT} z>X40so?6PVD*#K`5K4{qfG!HI0Cn}XWHrCj9@~aqINWU3BVYgnRqGU>`@Opw+4C%j z($WvGECxYW&oTX2b$=5e$aGzIme%^A$%E{(S1fp_gwQMdxQ<^Mh7?Dq5-AEB#5DZFD#8@Uja z>TIB}Je6j{D?9csomDj-i+eHI^4!bkXVJh=jc!(z9oP9Px{~(Ht9c>y-vSx2(9J<|osy>O%i2WBQC#b6TtIxw>m;{{|G?&b(b% zyk`(>`7oF+%WpjfZ=GZuZLnl?l2ITjg)#1b^8TR*B&HXwCMLQ-eTjv+|VlC9q5i?Q{8@sZ^pqSc)}ymSKW#Q5EJ`p#kRNj z&w!TdD59M$lc_U<*ernreDlV@oBNMakA(>o6AaOE9aEZdsbcK4VZ9u{n~dYe$${E< zll=N4G^@f3_XrS{yzQT0QX!yjW8?_c7F_AvqocNEE%7+eQGRwhaYZHOci9wQ@Gh)N zePr@Y!F+j?oVq(50Xvp^091r3mtQZ5c*7p6JeyI%SI0)Y`8whwp{-UgAWYM~=eUG{ z-f163kO$-$$)fQf&vP?GFXR+h7fUD7ph6z&2n1jWHifKLwkfXGzTJsS=xi>qk?A4A zeGe<1c57??MeJqChP^ktiRGcw;u#VGeFcboZ?@eL(Pzwv5F+9cYX#D#2Mjidg0?g!F2-_hoL*L7zY7r^`nH>%0A^_=R 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

dl#}xU)~#08i-2B00W$L#)fCf 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 F004N`{wM$d literal 0 HcmV?d00001 From 73dbb45ac3897badbc6247a346ce69584eca0be1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=BF=A0?= Date: Wed, 3 Dec 2025 20:05:05 +0900 Subject: [PATCH 21/25] docs: add overrides note in vite 8 beta post (#21201) --- blog/announcing-vite8-beta.md | 42 +++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/blog/announcing-vite8-beta.md b/blog/announcing-vite8-beta.md index dbdc4ce9..a6c9314e 100644 --- a/blog/announcing-vite8-beta.md +++ b/blog/announcing-vite8-beta.md @@ -89,6 +89,48 @@ There are two available upgrade paths: > If you are relying on specific Rollup or esbuild options, you might need to make some adjustments to your Vite config. Please refer to the [migration guide](/guide/migration) for detailed instructions and examples. > As with all non-stable, major releases, thorough testing is recommended after upgrading to ensure everything works as expected. Please make sure to report any [issues](https://github.com/vitejs/rolldown-vite/issues). +If you use a metaframework or Vitest, in order to use Vite 8 beta, you have to override the `vite` dependency in your `package.json`, which works slightly different depending on your package manager: + +:::code-group + +```json [npm] +{ + "overrides": { + "vite": "8.0.0-beta.0" + } +} +``` + +```json [Yarn] +{ + "resolutions": { + "vite": "8.0.0-beta.0" + } +} +``` + +```json [pnpm] +{ + "pnpm": { + "overrides": { + "vite": "8.0.0-beta.0" + } + } +} +``` + +```json [Bun] +{ + "overrides": { + "vite": "8.0.0-beta.0" + } +} +``` + +::: + +After adding these overrides, reinstall your dependencies and start your development server or build your project as usual. + ## Additional Features in Vite 8 In addition to shipping with Rolldown, Vite 8 comes with: From 9d1e98c998121f033ff1f30dbc9a68b8b6603763 Mon Sep 17 00:00:00 2001 From: Alexander Lichter Date: Wed, 3 Dec 2025 12:25:37 +0100 Subject: [PATCH 22/25] docs: update override instructions in release post (#21204) --- blog/announcing-vite8-beta.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/blog/announcing-vite8-beta.md b/blog/announcing-vite8-beta.md index a6c9314e..007167fb 100644 --- a/blog/announcing-vite8-beta.md +++ b/blog/announcing-vite8-beta.md @@ -89,7 +89,7 @@ There are two available upgrade paths: > If you are relying on specific Rollup or esbuild options, you might need to make some adjustments to your Vite config. Please refer to the [migration guide](/guide/migration) for detailed instructions and examples. > As with all non-stable, major releases, thorough testing is recommended after upgrading to ensure everything works as expected. Please make sure to report any [issues](https://github.com/vitejs/rolldown-vite/issues). -If you use a metaframework or Vitest, in order to use Vite 8 beta, you have to override the `vite` dependency in your `package.json`, which works slightly different depending on your package manager: +If you use a framework or tool that uses Vite as dependency, for example Astro, Nuxt, or Vitest, you have to override the `vite` dependency in your `package.json`, which works slightly different depending on your package manager: :::code-group From c64b5093a9d48f38c98112e4e83c399b16c520d4 Mon Sep 17 00:00:00 2001 From: Kylin <1159469891@qq.com> Date: Thu, 4 Dec 2025 20:43:33 +0800 Subject: [PATCH 23/25] docs: update content --- .vitepress/config.ts | 7 - config/build-options.md | 95 +++------- config/dep-optimization-options.md | 29 +-- config/index.md | 7 +- config/shared-options.md | 52 ++---- config/worker-options.md | 16 +- guide/api-javascript.md | 10 +- guide/api-plugin.md | 6 +- guide/build.md | 44 +---- guide/cli.md | 91 +--------- guide/dep-pre-bundling.md | 23 +-- guide/features.md | 20 +-- guide/index.md | 6 +- guide/migration-from-v6.md | 58 ++++++ guide/migration.md | 272 ++++++++++++----------------- guide/performance.md | 6 - guide/philosophy.md | 6 +- guide/troubleshooting.md | 6 +- package.json | 25 --- plugins/index.md | 24 +-- releases.md | 8 - 21 files changed, 247 insertions(+), 564 deletions(-) create mode 100644 guide/migration-from-v6.md diff --git a/.vitepress/config.ts b/.vitepress/config.ts index 8305b593..422c1b40 100644 --- a/.vitepress/config.ts +++ b/.vitepress/config.ts @@ -287,13 +287,6 @@ export default defineConfig({ link: '/guide/performance' }, { -<<<<<<< HEAD - text: 'Rolldown', - link: '/guide/rolldown' - }, - { -======= ->>>>>>> 9d1e98c998121f033ff1f30dbc9a68b8b6603763 text: `Migration from v${viteMajorVersion - 1}`, link: '/guide/migration' }, diff --git a/config/build-options.md b/config/build-options.md index 9a1cf7f2..88f8bc6c 100644 --- a/config/build-options.md +++ b/config/build-options.md @@ -8,23 +8,13 @@ - **默认:** `'baseline-widely-available'` - **相关内容:** [浏览器兼容性](/guide/build#browser-compatibility) -<<<<<<< HEAD -最终软件包的浏览器兼容性目标。默认值是 Vite 的一个特殊值 `'baseline-widely-available'`,该值针对的是包含在 2025 年 5 月 1 日广泛可用的 [Baseline](https://web-platform-dx.github.io/web-features/) 中的浏览器。具体来说,它是 `['chrome107', 'edge107', 'firefox104', 'safari16']`。 -======= -Browser compatibility target for the final bundle. The default value is a Vite special value, `'baseline-widely-available'`, which targets browsers that are included in the [Baseline](https://web-platform-dx.github.io/web-features/) Widely Available on 2026-01-01. Specifically, it is `['chrome111', 'edge111', 'firefox114', 'safari16.4']`. ->>>>>>> 9d1e98c998121f033ff1f30dbc9a68b8b6603763 +最终软件包的浏览器兼容性目标。默认值是 Vite 的一个特殊值 `'baseline-widely-available'`,该值针对的是包含在 2026 年 1 月 1 日广泛可用的 [Baseline](https://web-platform-dx.github.io/web-features/) 中的浏览器。具体来说,它是 `['chrome111', 'edge111', 'firefox114', 'safari16.4']`。 另一个特殊值是 `'esnext'` —— 即假设有原生动态导入支持,并只执行最低限度的转译。 -<<<<<<< HEAD -转换过程将会由 esbuild 执行,并且此值应该是一个合法的 [esbuild 目标选项](https://esbuild.github.io/api/#target)。自定义目标也可以是一个 ES 版本(例如:`es2015`)、一个浏览器版本(例如:`chrome58`)或是多个目标组成的一个数组。 +转换过程将会由 Oxc Transformer 执行,并且此值应该是一个合法的 [Oxc Transformer 目标选项](https://oxc.rs/docs/guide/usage/transformer/lowering#target)。自定义目标也可以是一个 ES 版本(例如:`es2015`)、一个浏览器版本(例如:`chrome58`)或是多个目标组成的一个数组。 -注意:如果代码包含不能被 `esbuild` 安全地编译的特性,那么构建将会失败。查看 [esbuild 文档](https://esbuild.github.io/content-types/#javascript) 获取更多细节。 -======= -The transform is performed with Oxc Transformer and the value should be a valid [Oxc Transformer target option](https://oxc.rs/docs/guide/usage/transformer/lowering#target). Custom targets can either be an ES version (e.g. `es2015`), a browser with version (e.g. `chrome58`), or an array of multiple target strings. - -Note the build will output a warning if the code contains features that cannot be safely transpiled by Oxc. See [Oxc docs](https://oxc.rs/docs/guide/usage/transformer/lowering#warnings) for more details. ->>>>>>> 9d1e98c998121f033ff1f30dbc9a68b8b6603763 +注意:如果代码包含不能被 `Oxc` 安全地编译的特性,那么构建将会输出警告。查看 [Oxc 文档](https://oxc.rs/docs/guide/usage/transformer/lowering#warnings) 获取更多细节。 ## build.modulePreload {#build-modulepreload} @@ -139,23 +129,16 @@ Git LFS 占位符会自动排除在内联之外,因为它们不包含其所表 ## build.cssMinify {#build-cssminify} -<<<<<<< HEAD -- **类型:** `boolean | 'esbuild' | 'lightningcss'` -- **默认:** 对于客户端,与 [`build.minify`](#build-minify) 相同;对于 SSR,为 `'esbuild'` - -此选项允许用户覆盖 CSS 最小化压缩的配置,而不是使用默认的 `build.minify`,这样你就可以单独配置 JS 和 CSS 的最小化压缩方式。Vite 默认使用 `esbuild` 来最小化 CSS。将此选项设置为 `'lightningcss'` 可以改用 [Lightning CSS](https://lightningcss.dev/minification.html) 进行压缩。设置为该项,便可以使用 [`css.lightningcss`](./shared-options.md#css-lightningcss) 选项来进行配置。 -======= -- **Type:** `boolean | 'lightningcss' | 'esbuild'` -- **Default:** the same as [`build.minify`](#build-minify) for client, `'lightningcss'` for SSR +- **类型:** `boolean | 'lightningcss' | 'esbuild'` +- **默认:** 对于客户端,与 [`build.minify`](#build-minify) 相同;对于 SSR,为 `'lightningcss'` -This option allows users to override CSS minification specifically instead of defaulting to `build.minify`, so you can configure minification for JS and CSS separately. Vite uses [Lightning CSS](https://lightningcss.dev/minification.html) by default to minify CSS. It can be configured using [`css.lightningcss`](./shared-options.md#css-lightningcss). Set the option to `'esbuild'` to use esbuild instead. +此选项允许用户覆盖 CSS 最小化压缩的配置,而不是使用默认的 `build.minify`,这样你就可以单独配置 JS 和 CSS 的最小压缩方式。Vite 默认使用 [Lightning CSS](https://lightningcss.dev/minification.html) 来压缩 CSS。可以通过 [`css.lightningcss`](./shared-options.md#css-lightningcss) 进行配置。将此选项设置为 `'esbuild'` 可以改用 esbuild 进行压缩。 -esbuild must be installed when it is set to `'esbuild'`. +当设置为 `'esbuild'` 时,必须安装 esbuild。 ```sh npm add -D esbuild ``` ->>>>>>> 9d1e98c998121f033ff1f30dbc9a68b8b6603763 ## build.sourcemap {#build-sourcemap} @@ -164,34 +147,20 @@ npm add -D esbuild 构建后是否生成 source map 文件。如果为 `true`,将会创建一个独立的 source map 文件。如果为 `'inline'`,source map 将作为一个 data URI 附加在输出文件中。`'hidden'` 的工作原理与 `true` 相似,只是 bundle 文件中相应的注释将不被保留。 -<<<<<<< HEAD -## build.rollupOptions {#build-rollupoptions} - -- **类型:** [`RollupOptions`](https://cn.rollupjs.org/configuration-options/) - -自定义底层的 Rollup 打包配置。这与从 Rollup 配置文件导出的选项相同,并将与 Vite 的内部 Rollup 选项合并。查看 [Rollup 选项文档](https://cn.rollupjs.org/configuration-options/) 获取更多细节。 - -## build.commonjsOptions {#build-commonjsoptions} - -- **类型:** [`RollupCommonJSOptions`](https://github.com/rollup/plugins/tree/master/packages/commonjs#options) +## build.rolldownOptions {#build-rolldownoptions} -传递给 [@rollup/plugin-commonjs](https://github.com/rollup/plugins/tree/master/packages/commonjs) 插件的选项。 -======= -## build.rolldownOptions - -- **Type:** [`RolldownOptions`](https://rollupjs.org/configuration-options/) +- **类型:** [`RolldownOptions`](https://rollupjs.org/configuration-options/) -Directly customize the underlying Rolldown bundle. This is the same as options that can be exported from a Rolldown config file and will be merged with Vite's internal Rolldown options. See [Rolldown options docs](https://rollupjs.org/configuration-options/) for more details. +自定义底层的 Rolldown 打包配置。这与从 Rolldown 配置文件导出的选项相同,并将与 Vite 的内部 Rolldown 选项合并。查看 [Rolldown 选项文档](https://cn.rollupjs.org/configuration-options/) 获取更多细节。 -## build.rollupOptions +## build.rollupOptions {#build-rollupoptions} -- **Type:** `RolldownOptions` -- **Deprecated** +- **类型:** `RolldownOptions` +- **已弃用** -This option is an alias of `build.rolldownOptions` option. Use `build.rolldownOptions` option instead. ->>>>>>> 9d1e98c998121f033ff1f30dbc9a68b8b6603763 +此选项是 `build.rolldownOptions` 选项的别名。请使用 `build.rolldownOptions` 选项代替。 ## build.dynamicImportVarsOptions {#build-dynamicimportvarsoptions} @@ -200,13 +169,9 @@ This option is an alias of `build.rolldownOptions` option. Use `build.rolldownOp 传递给 [@rollup/plugin-dynamic-import-vars](https://github.com/rollup/plugins/tree/master/packages/dynamic-import-vars) 的选项。 -<<<<<<< HEAD -## build.lib {#build-lib} -======= -## build.lib ->>>>>>> 9d1e98c998121f033ff1f30dbc9a68b8b6603763 +## build.lib {#build-lib} - **类型:** `{ entry: string | string[] | { [entryAlias: string]: string }, name?: string, formats?: ('es' | 'cjs' | 'umd' | 'iife')[], fileName?: string | ((format: ModuleFormat, entryName: string) => string), cssFileName?: string }` - **相关内容:** [库模式](/guide/build#library-mode) @@ -302,27 +267,16 @@ export default defineConfig({ ## build.minify {#build-minify} -<<<<<<< HEAD -- **类型:** `boolean | 'terser' | 'esbuild'` -- **默认:** 客户端构建默认为`'esbuild'`,SSR构建默认为 `false` +- **类型:** `boolean | 'oxc' | 'terser' | 'esbuild'` +- **默认:** 客户端构建默认为`'oxc'`,SSR构建默认为 `false` -设置为 `false` 可以禁用最小化混淆,或是用来指定使用哪种混淆器。默认为 [Esbuild](https://github.com/evanw/esbuild),它比 terser 快 20-40 倍,压缩率只差 1%-2%。[Benchmarks](https://github.com/privatenumber/minification-benchmarks) -======= -- **Type:** `boolean | 'oxc' | 'terser' | 'esbuild'` -- **Default:** `'oxc'` for client build, `false` for SSR build +设置为 `false` 可以禁用最小化混淆,或是用来指定使用哪种混淆器。默认使用 [Oxc Minifier](https://oxc.rs/docs/guide/usage/minifier),它比 terser 快 30~90 倍,但压缩率仅差 0.5~2%。[基准测试](https://github.com/privatenumber/minification-benchmarks) -Set to `false` to disable minification, or specify the minifier to use. The default is [Oxc Minifier](https://oxc.rs/docs/guide/usage/minifier) which is 30 ~ 90x faster than terser and only 0.5 ~ 2% worse compression. [Benchmarks](https://github.com/privatenumber/minification-benchmarks) - -`build.minify: 'esbuild'` is deprecated and will be removed in the future. ->>>>>>> 9d1e98c998121f033ff1f30dbc9a68b8b6603763 +`build.minify: 'esbuild'` 已弃用,将在未来版本中移除。 注意,在 lib 模式下使用 `'es'` 时,`build.minify` 选项不会缩减空格,因为会移除掉 pure 标注,导致破坏 tree-shaking。 -<<<<<<< HEAD -当设置为 `'terser'` 时必须先安装 Terser。 -======= -esbuild or Terser must be installed when it is set to `'esbuild'` or `'terser'` respectively. ->>>>>>> 9d1e98c998121f033ff1f30dbc9a68b8b6603763 +当设置为 `'esbuild'` 或 `'terser'` 时,必须分别安装 esbuild 或 Terser。 ```sh npm add -D esbuild @@ -374,15 +328,10 @@ npm add -D terser ## build.watch {#build-watch} -<<<<<<< HEAD -- **类型:** [`WatcherOptions`](https://cn.rollupjs.org/configuration-options/#watch)`| null` -- **默认:** `null` -======= -- **Type:** [`WatcherOptions`](https://rollupjs.org/configuration-options/#watch)`| null` -- **Default:** `null` ->>>>>>> 9d1e98c998121f033ff1f30dbc9a68b8b6603763 +- **类型:** [`WatcherOptions`](https://rollupjs.org/configuration-options/#watch)`| null` +- **默认:** `null` 设置为 `{}` 则会启用 rollup 的监听器。对于只在构建阶段或者集成流程使用的插件很常用。 diff --git a/config/dep-optimization-options.md b/config/dep-optimization-options.md index 0e38d8fa..deca92ec 100644 --- a/config/dep-optimization-options.md +++ b/config/dep-optimization-options.md @@ -51,12 +51,9 @@ export default defineConfig({ }) ``` -<<<<<<< HEAD -## optimizeDeps.esbuildOptions {#optimizedeps-esbuildoptions} -======= -## optimizeDeps.rolldownOptions +## optimizeDeps.rolldownOptions {#optimizedeps-rolldownoptions} -- **Type:** [`Omit`](https://www.typescriptlang.org/docs/handbook/utility-types.html#omittype-keys)`<``RolldownOptions`, `'input' | 'logLevel' | 'output'> & { +- **类型:** [`Omit`](https://www.typescriptlang.org/docs/handbook/utility-types.html#omittype-keys)`<``RolldownOptions`, `'input' | 'logLevel' | 'output'> & { output?: [`Omit`](https://www.typescriptlang.org/docs/handbook/utility-types.html#omittype-keys)`<` `RolldownOutputOptions`, `'format' | 'sourcemap' | 'dir' | 'banner'>` @@ -65,14 +62,13 @@ export default defineConfig({ -Options to pass to Rolldown during the dep scanning and optimization. +在依赖扫描和优化过程中传递给 Rolldown 的选项。 -Certain options are omitted since changing them would not be compatible with Vite's dep optimization. +某些选项进行了省略,因为修改它们与 Vite 的优化方案并不兼容。 -- `plugins` are merged with Vite's dep plugin +- `plugins` 与 Vite 的 dep 插件合并 -## optimizeDeps.esbuildOptions ->>>>>>> 9d1e98c998121f033ff1f30dbc9a68b8b6603763 +## optimizeDeps.esbuildOptions {#optimizedeps-esbuildoptions} - **类型:** [`Omit`](https://www.typescriptlang.org/docs/handbook/utility-types.html#omittype-keys)`<`[`EsbuildBuildOptions`](https://esbuild.github.io/api/#general-options)`, | 'bundle' @@ -85,18 +81,9 @@ Certain options are omitted since changing them would not be compatible with Vit | 'outbase' | 'outExtension' | 'metafile'>` -- **Deprecated** +- **已弃用** -<<<<<<< HEAD -在依赖扫描和优化过程中传递给 esbuild 的选项。 - -某些选项进行了省略,因为修改它们与 Vite 的优化方案并不兼容。 - -- 忽略了 `external` 选项,请使用 Vite 的 `optimizeDeps.exclude` 选项 -- `plugins` 与 Vite 的 dep 插件合并 -======= -This option is converted to `optimizeDeps.rolldownOptions` internally. Use `optimizeDeps.rolldownOptions` instead. ->>>>>>> 9d1e98c998121f033ff1f30dbc9a68b8b6603763 +此选项在内部被转换为 `optimizeDeps.rolldownOptions`。请使用 `optimizeDeps.rolldownOptions` 代替。 ## optimizeDeps.force {#optimizedeps-force} diff --git a/config/index.md b/config/index.md index 859be556..77573552 100644 --- a/config/index.md +++ b/config/index.md @@ -22,13 +22,8 @@ export default { vite --config my-config.js ``` -<<<<<<< HEAD ::: tip 加载配置文件 -默认情况下,Vite 使用 `esbuild` 将配置文件打包到临时文件中并加载它。这可能会在 monorepo 中导入 TypeScript 文件时引发问题。如果你遇到了这种方法问题,可以通过指定 `--configLoader runner` 以改用 [module runner](/guide/api-environment-runtimes.html#modulerunner),它不会创建临时配置并将动态转换任何文件。请注意,module runner 不支持配置文件中的 CJS,但外部 CJS 包应该可以正常工作。 -======= -::: tip CONFIG LOADING -By default, Vite uses [Rolldown](https://rolldown.rs/) to bundle the config into a temporary file and load it. This may cause issues when importing TypeScript files in a monorepo. If you encounter any issues with this approach, you can specify `--configLoader runner` to use the [module runner](/guide/api-environment-runtimes.html#modulerunner) instead, which will not create a temporary config and will transform any files on the fly. Note that module runner doesn't support CJS in config files, but external CJS packages should work as usual. ->>>>>>> 9d1e98c998121f033ff1f30dbc9a68b8b6603763 +默认情况下,Vite 使用 [Rolldown](https://rolldown.rs/) 将配置文件打包到临时文件中并加载它。这可能会在 monorepo 中导入 TypeScript 文件时引发问题。如果你遇到了这种方法问题,可以通过指定 `--configLoader runner` 以改用 [module runner](/guide/api-environment-runtimes.html#modulerunner),它不会创建临时配置并将动态转换任何文件。请注意,module runner 不支持配置文件中的 CJS,但外部 CJS 包应该可以正常工作。 另外,如果你正在使用支持TypeScript的环境(例如 `node --experimental-strip-types`),或者只编写纯 JavaScript 代码,你可以指定 `--configLoader native` 以使用环境的本机运行时加载配置文件。请注意,配置文件导入的模块的更新不会被检测到,因此不会自动重启 Vite 服务器。 ::: diff --git a/config/shared-options.md b/config/shared-options.md index c0f0c721..b7fcfab2 100644 --- a/config/shared-options.md +++ b/config/shared-options.md @@ -40,11 +40,7 @@ 定义全局常量替换方式。其中每项在开发环境下会被定义在全局,而在构建时被静态替换。 -<<<<<<< HEAD -Vite 使用 [esbuild define](https://esbuild.github.io/api/#define) 来进行替换,因此值的表达式必须是一个包含 JSON 可序列化值(null、boolean、number、string、array 或 object)或单一标识符的字符串。对于非字符串值,Vite 将自动使用 `JSON.stringify` 将其转换为字符串。 -======= -Vite uses [Oxc's define feature](https://oxc.rs/docs/guide/usage/transformer/global-variable-replacement#define) to perform replacements, so value expressions must be a string that contains a JSON-serializable value (null, boolean, number, string, array, or object) or a single identifier. For non-string values, Vite will automatically convert it to a string with `JSON.stringify`. ->>>>>>> 9d1e98c998121f033ff1f30dbc9a68b8b6603763 +Vite 使用 [Oxc's define feature](https://oxc.rs/docs/guide/usage/transformer/global-variable-replacement#define) 来进行替换,因此值的表达式必须是一个包含 JSON 可序列化值(null、boolean、number、string、array 或 object)或单一标识符的字符串。对于非字符串值,Vite 将自动使用 `JSON.stringify` 将其转换为字符串。 **示例:** @@ -100,13 +96,9 @@ declare const __APP_VERSION__: string 将会被传递到 `@rollup/plugin-alias` 作为 [entries 的选项](https://github.com/rollup/plugins/tree/master/packages/alias#entries)。也可以是一个对象,或一个 `{ find, replacement, customResolver }` 的数组。 -<<<<<<< HEAD -当使用文件系统路径的别名时,请始终使用绝对路径。相对路径的别名值会原封不动地被使用,因此无法被正常解析。 -======= -When aliasing to file system paths, always use absolute paths. Relative alias values will be used as-is and will not be resolved into file system paths. ->>>>>>> 9d1e98c998121f033ff1f30dbc9a68b8b6603763 +当使用文件系统路径的别名时,请始终使用绝对路径。相对路径的别名值会原封不动地被使用,因此无法被正常解析。 更高级的自定义解析方法可以通过 [插件](/guide/api-plugin) 实现。 @@ -370,19 +362,11 @@ import type { 如果设置为 `'auto'`,只有当 [数据大于 10kB 时](https://v8.dev/blog/cost-of-javascript-2019#json:~:text=A%20good%20rule%20of%20thumb%20is%20to%20apply%20this%20technique%20for%20objects%20of%2010%20kB%20or%20larger),才会对数据进行字符串化处理。 -<<<<<<< HEAD -## esbuild {#esbuild} - -- **类型:** `ESBuildOptions | false` - -`ESBuildOptions` 继承自 [esbuild 转换选项](https://esbuild.github.io/api/#transform)。最常见的用例是自定义 JSX: -======= -## oxc +## oxc {#oxc} -- **Type:** `OxcOptions | false` +- **类型:** `OxcOptions | false` -`OxcOptions` extends [Oxc Transformer's options](https://oxc.rs/docs/guide/usage/transformer). The most common use case is customizing JSX: ->>>>>>> 9d1e98c998121f033ff1f30dbc9a68b8b6603763 +`OxcOptions` 继承自 [Oxc 转换选项](https://oxc.rs/docs/guide/usage/transformer)。最常见的用例是自定义 JSX: ```js export default defineConfig({ @@ -396,15 +380,9 @@ export default defineConfig({ }) ``` -<<<<<<< HEAD -默认情况下,esbuild 会被应用在 `ts`、`jsx`、`tsx` 文件。你可以通过 `esbuild.include` 和 `esbuild.exclude` 对要处理的文件类型进行配置,这两个配置的值可以是一个正则表达式、一个 [picomatch](https://github.com/micromatch/picomatch#globbing-features) 模式,或是一个值为这两种类型的数组。 - -此外,你还可以通过 `esbuild.jsxInject` 来自动为每一个被 esbuild 转换的文件注入 JSX helper。 -======= -By default, transformation by Oxc is applied to `ts`, `jsx` and `tsx` files. You can customize this with `oxc.include` and `oxc.exclude`, which can be a regex, a [picomatch](https://github.com/micromatch/picomatch#globbing-features) pattern, or an array of either. +默认情况下,Oxc转换 会被应用在 `ts`、`jsx`、`tsx` 文件。你可以通过 `oxc.include` 和 `oxc.exclude` 对要处理的文件类型进行配置,这两个配置的值可以是一个正则表达式、一个 [picomatch](https://github.com/micromatch/picomatch#globbing-features) 模式,或是一个值为这两种类型的数组。 -In addition, you can also use `oxc.jsxInject` to automatically inject JSX helper imports for every file transformed by Oxc: ->>>>>>> 9d1e98c998121f033ff1f30dbc9a68b8b6603763 +此外,你还可以通过 `oxc.jsxInject` 来自动为每一个被 Oxc 转换的文件注入 JSX helper。 ```js export default defineConfig({ @@ -414,20 +392,14 @@ export default defineConfig({ }) ``` -<<<<<<< HEAD -当 [`build.minify`](./build-options.md#build-minify) 为 `true` 时,所有最小化的优化过程都会被默认应用,要禁用它的 [某些特定方面](https://esbuild.github.io/api/#minify),请设置 `esbuild.minifyIdentifiers`、`esbuild.minifySyntax` 或 `esbuild.minifyWhitespace` 三种选项其中任意一种为 `false`。注意 `esbuild.minify` 选项无法用于覆盖 `build.minify`。 - -设置为 `false` 来禁用 esbuild 转换。 -======= -Set to `false` to disable transformation by Oxc. +设置为 `false` 来禁用 Oxc 转换。 -## esbuild +## esbuild {#esbuild} -- **Type:** `ESBuildOptions | false` -- **Deprecated** +- **类型:** `ESBuildOptions | false` +- **已弃用** -This option is converted to `oxc` option internally. Use `oxc` option instead. ->>>>>>> 9d1e98c998121f033ff1f30dbc9a68b8b6603763 +此选项在内部被转换为 `oxc` 选项。请使用 `oxc` 选项代替。 ## assetsInclude {#assetsinclude} diff --git a/config/worker-options.md b/config/worker-options.md index 87a4fa85..280038f8 100644 --- a/config/worker-options.md +++ b/config/worker-options.md @@ -18,21 +18,15 @@ worker 打包时的输出类型。 ## worker.rollupOptions -<<<<<<< HEAD -- **类型:** [`RollupOptions`](https://cn.rollupjs.org/configuration-options/) - -用于打包 worker 的 Rollup 配置项。 -======= -- **Type:** [`RolldownOptions`](https://rollupjs.org/configuration-options/) +- **类型:** [`RolldownOptions`](https://rollupjs.org/configuration-options/) -Rollup options to build worker bundle. +用于打包 worker 的 Rollup 配置项。 ## worker.rollupOptions -- **Type:** `RolldownOptions` -- **Deprecated** +- **类型:** `RolldownOptions` +- **已弃用** -This option is an alias of `worker.rolldownOptions` option. Use `build.rolldownOptions` option instead. ->>>>>>> 9d1e98c998121f033ff1f30dbc9a68b8b6603763 +此选项是 `worker.rolldownOptions` 选项的别名。请使用 `build.rolldownOptions` 选项代替。 diff --git a/guide/api-javascript.md b/guide/api-javascript.md index 937d5da6..6bda0e09 100644 --- a/guide/api-javascript.md +++ b/guide/api-javascript.md @@ -400,7 +400,7 @@ async function transformWithOxc( ): Promise & { warnings: string[] }> ``` -Transform JavaScript or TypeScript with [Oxc Transformer](https://oxc.rs/docs/guide/usage/transformer). Useful for plugins that prefer matching Vite's internal Oxc Transformer transform. +使用 [Oxc Transformer](https://oxc.rs/docs/guide/usage/transformer) 转换 JavaScript 或 TypeScript 文件。对于希望与 Vite 内部的 Oxc Transformer 转换相匹配的插件非常有用。 ## `transformWithEsbuild` @@ -415,13 +415,9 @@ async function transformWithEsbuild( ): Promise ``` -<<<<<<< HEAD -通过 esbuild 转换 JavaScript 或 TypeScript 文件。对于更想要匹配 Vite 内部 esbuild 转换的插件很有用。 -======= -**Deprecated:** Use `transformWithOxc` instead. +**已弃用:** 请使用 `transformWithOxc` 代替。 -Transform JavaScript or TypeScript with esbuild. Useful for plugins that prefer matching Vite's internal esbuild transform. ->>>>>>> 9d1e98c998121f033ff1f30dbc9a68b8b6603763 +通过 esbuild 转换 JavaScript 或 TypeScript 文件。对于更想要匹配 Vite 内部 esbuild 转换的插件很有用。 ## `loadConfigFromFile` diff --git a/guide/api-plugin.md b/guide/api-plugin.md index 6cbc6c8a..ba34bfaf 100644 --- a/guide/api-plugin.md +++ b/guide/api-plugin.md @@ -4,13 +4,9 @@ Vite 插件扩展了设计出色的 Rollup 接口,带有一些 Vite 独有的 **推荐在阅读下面的章节之前,首先阅读下 [Rollup 插件文档](https://cn.rollupjs.org/plugin-development/)** -<<<<<<< HEAD -## 致插件创作者 {#authoring-a-plugin} -======= -## Authoring a Plugin ->>>>>>> 9d1e98c998121f033ff1f30dbc9a68b8b6603763 +## 致插件创作者 {#authoring-a-plugin} Vite 努力秉承开箱即用的原则,因此在创作一款新插件前,请确保已经阅读过 [Vite 的功能指南](/guide/features),避免重复劳作。同时还应查看社区是否存在可用插件,包括 [兼容 Rollup 的插件](https://github.com/rollup/awesome) 以及 [Vite 的专属插件](https://github.com/vitejs/awesome-vite#plugins)。 diff --git a/guide/build.md b/guide/build.md index 388d5a48..9211ce72 100644 --- a/guide/build.md +++ b/guide/build.md @@ -50,42 +50,25 @@ ## 自定义构建 {#customizing-the-build} -<<<<<<< HEAD -构建过程可以通过多种 [构建配置选项](/config/#build-options) 来自定义构建。具体来说,你可以通过 `build.rollupOptions` 直接调整底层的 [Rollup 选项](https://cn.rollupjs.org/configuration-options/): -======= -The build can be customized via various [build config options](/config/build-options.md). Specifically, you can directly adjust the underlying [Rolldown options](https://rollupjs.org/configuration-options/) via `build.rolldownOptions`: +构建过程可以通过多种 [构建配置选项](/config/#build-options) 来自定义构建。具体来说,你可以通过 `build.rolldownOptions` 直接调整底层的 [Rolldown 选项](https://cn.rollupjs.org/configuration-options/): ->>>>>>> 9d1e98c998121f033ff1f30dbc9a68b8b6603763 ```js [vite.config.js] export default defineConfig({ build: { -<<<<<<< HEAD - rollupOptions: { - // https://cn.rollupjs.org/configuration-options/ -======= rolldownOptions: { // https://rollupjs.org/configuration-options/ ->>>>>>> 9d1e98c998121f033ff1f30dbc9a68b8b6603763 }, }, }) ``` -<<<<<<< HEAD -例如,你可以使用仅在构建期间应用的插件来指定多个 Rollup 输出。 -======= -For example, you can specify multiple Rolldown outputs with plugins that are only applied during build. ->>>>>>> 9d1e98c998121f033ff1f30dbc9a68b8b6603763 +例如,你可以使用仅在构建期间应用的插件来指定多个 Rolldown 输出。 ## 产物分块策略 {#chunking-strategy} -<<<<<<< HEAD -你可以通过配置 `build.rollupOptions.output.manualChunks` 来自定义 chunk 分割策略(查看 [Rollup 相应文档](https://cn.rollupjs.org/configuration-options/#output-manualchunks))。如果你使用的是一个框架,那么请参考他们的文档来了解如何配置分割 chunk。 -======= -You can configure how chunks are split using `build.rolldownOptions.output.advancedChunks` (see [Rolldown docs](https://rolldown.rs/in-depth/advanced-chunks)). If you use a framework, refer to their documentation for configuring how chunks are split. ->>>>>>> 9d1e98c998121f033ff1f30dbc9a68b8b6603763 +你可以通过配置 `build.rolldownOptions.output.advancedChunks` 来自定义 chunk 分割策略(查看 [Rolldown 相应文档](https://rolldown.rs/in-depth/advanced-chunks))。如果你使用的是一个框架,那么请参考他们的文档来了解如何配置分割 chunk。 ## 处理加载报错 {#load-error-handling} @@ -156,11 +139,7 @@ export default defineConfig({ 如果你指定了另一个根目录,请记住,在解析输入路径时,`__dirname` 的值将仍然是 vite.config.js 文件所在的目录。因此,你需要把对应入口文件的 `root` 的路径添加到 `resolve` 的参数中。 -<<<<<<< HEAD -请注意,在 HTML 文件中,Vite 忽略了 `rollupOptions.input` 对象中给定的入口名称,而是在生成 dist 文件夹中的 HTML 资源文件时,使用了文件已解析的路径 ID。这确保了与开发服务器的工作方式保持一致的结构。 -======= -Note that for HTML files, Vite ignores the name given to the entry in the `rolldownOptions.input` object and instead respects the resolved id of the file when generating the HTML asset in the dist folder. This ensures a consistent structure with the way the dev server works. ->>>>>>> 9d1e98c998121f033ff1f30dbc9a68b8b6603763 +请注意,在 HTML 文件中,Vite 忽略了 `rolldownOptions.input` 对象中给定的入口名称,而是在生成 dist 文件夹中的 HTML 资源文件时,使用了文件已解析的路径 ID。这确保了与开发服务器的工作方式保持一致的结构。 ## 库模式 {#library-mode} @@ -185,15 +164,9 @@ export default defineConfig({ // 将添加适当的扩展名后缀 fileName: 'my-lib', }, -<<<<<<< HEAD - rollupOptions: { + rolldownOptions: { // 确保外部化处理那些 // 你不想打包进库的依赖 -======= - rolldownOptions: { - // make sure to externalize deps that shouldn't be bundled - // into your library ->>>>>>> 9d1e98c998121f033ff1f30dbc9a68b8b6603763 external: ['vue'], output: { // 在 UMD 构建模式下为这些外部化的依赖 @@ -336,13 +309,8 @@ dist/my-lib.umd.cjs 0.30 kB / gzip: 0.16 kB 在库模式中,所有 [`import.meta.env.*`](./env-and-mode.md) 的使用都会在构建生产版本时被静态替换。但是,`process.env.*` 的使用不会,这样你的库的使用者就可以动态地改变它。如果这是不可取的,你可以使用 `define: { 'process.env.NODE_ENV': '"production"' }` 来静态替换它们,或者使用 [`esm-env`](https://github.com/benmccann/esm-env) 来更好地兼容打包工具和运行时。 ::: -<<<<<<< HEAD ::: warning 进阶用法 -库模式包括了一种简单而又有见地的配置,适用于面向浏览器和 JS 框架的库。如果你正在构建非面向浏览器的库,或需要高级构建流程,可以直接使用 [Rollup](https://cn.rollupjs.org) 或 [esbuild](https://esbuild.github.io)。 -======= -::: warning Advanced Usage -Library mode includes a simple and opinionated configuration for browser-oriented and JS framework libraries. If you are building non-browser libraries, or require advanced build flows, you can use [tsdown](https://tsdown.dev/) or [Rolldown](https://rolldown.rs/) directly. ->>>>>>> 9d1e98c998121f033ff1f30dbc9a68b8b6603763 +库模式包括了一种简单而又有见地的配置,适用于面向浏览器和 JS 框架的库。如果你正在构建非面向浏览器的库,或需要高级构建流程,可以直接使用 [tsdown](https://tsdown.dev/) 或 [Rolldown](https://rolldown.rs/)。 ::: ## 进阶基础路径选项 {#advanced-base-options} diff --git a/guide/cli.md b/guide/cli.md index 32687812..b987156e 100644 --- a/guide/cli.md +++ b/guide/cli.md @@ -14,7 +14,6 @@ vite [root] #### 选项 {#options} -<<<<<<< HEAD | 选项 | | | ------------------------- | --------------------------------------------------------------------------------------------- | | `--host [host]` | 指定主机名称 (`string`) | @@ -27,34 +26,13 @@ vite [root] | `--base ` | 公共基础路径(默认为:`/`)(`string`) | | `-l, --logLevel ` | info \| warn \| error \| silent (`string`) | | `--clearScreen` | 允许或禁用打印日志时清除屏幕 (`boolean`) | -| `--configLoader ` | 使用 `bundle` 来采用 esbuild 打包配置,或是 `runner`(实验性)来在运行时处理,默认是 `bundle` | +| `--configLoader ` | 使用 `bundle` 来采用 Rolldown 打包配置,或是 `runner`(实验性)来在运行时处理,默认是 `bundle` | | `--profile` | 启动内置的 Node.js 调试器(查看 [性能瓶颈](/guide/troubleshooting#performance-bottlenecks)) | | `-d, --debug [feat]` | 显示调试日志 (`string \| boolean`) | | `-f, --filter ` | 过滤调试日志 (`string`) | | `-m, --mode ` | 设置环境模式 (`string`) | | `-h, --help` | 显示可用的 CLI 选项 | | `-v, --version` | 显示版本号 | -======= -| Options | | -| ------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `--host [host]` | Specify hostname (`string`) | -| `--port ` | Specify port (`number`) | -| `--open [path]` | Open browser on startup (`boolean \| string`) | -| `--cors` | Enable CORS (`boolean`) | -| `--strictPort` | Exit if specified port is already in use (`boolean`) | -| `--force` | Force the optimizer to ignore the cache and re-bundle (`boolean`) | -| `-c, --config ` | Use specified config file (`string`) | -| `--base ` | Public base path (default: `/`) (`string`) | -| `-l, --logLevel ` | info \| warn \| error \| silent (`string`) | -| `--clearScreen` | Allow/disable clear screen when logging (`boolean`) | -| `--configLoader ` | Use `bundle` to bundle the config with Rolldown, or `runner` (experimental) to process it on the fly, or `native` (experimental) to load using the native runtime (default: `bundle`) | -| `--profile` | Start built-in Node.js inspector (check [Performance bottlenecks](/guide/troubleshooting#performance-bottlenecks)) | -| `-d, --debug [feat]` | Show debug logs (`string \| boolean`) | -| `-f, --filter ` | Filter debug logs (`string`) | -| `-m, --mode ` | Set env mode (`string`) | -| `-h, --help` | Display available CLI options | -| `-v, --version` | Display version number | ->>>>>>> 9d1e98c998121f033ff1f30dbc9a68b8b6603763 ## 构建 {#build} @@ -70,7 +48,6 @@ vite build [root] #### 选项 {#options-1} -<<<<<<< HEAD | 选项 | | | ------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------- | | `--target ` | 编译目标(默认为:`"modules"`)(`string`) | @@ -88,39 +65,13 @@ vite build [root] | `--base ` | 公共基础路径(默认为:`/`)(`string`) | | `-l, --logLevel ` | Info \| warn \| error \| silent (`string`) | | `--clearScreen` | 允许或禁用打印日志时清除屏幕 (`boolean`) | -| `--configLoader ` | 使用 `bundle` 来采用 esbuild 打包配置,或是 `runner`(实验性)来在运行时处理,或者使用原生运行时加载 `native`(实验性),默认是 `bundle` | +| `--configLoader ` | 使用 `bundle` 来采用 Rolldown 打包配置,或是 `runner`(实验性)来在运行时处理,或者使用原生运行时加载 `native`(实验性),默认是 `bundle` | | `--profile` | 启动内置的 Node.js 调试器(查看 [性能瓶颈](/guide/troubleshooting#performance-bottlenecks)) | | `-d, --debug [feat]` | 显示调试日志 (`string \| boolean`) | | `-f, --filter ` | 过滤调试日志 (`string`) | | `-m, --mode ` | 设置环境模式 (`string`) | | `-h, --help` | 显示可用的 CLI 选项 | | `--app` | 构建所有环境,这与 `builder: {}` 是一样的(`boolean`,实验性) | -======= -| Options | | -| ------------------------------ | ----------------------------------------------------------------------------------------------------------------------- | -| `--target ` | Transpile target (default: `"modules"`) (`string`) | -| `--outDir

` | Output directory (default: `dist`) (`string`) | -| `--assetsDir ` | Directory under outDir to place assets in (default: `"assets"`) (`string`) | -| `--assetsInlineLimit ` | Static asset base64 inline threshold in bytes (default: `4096`) (`number`) | -| `--ssr [entry]` | Build specified entry for server-side rendering (`string`) | -| `--sourcemap [output]` | Output source maps for build (default: `false`) (`boolean \| "inline" \| "hidden"`) | -| `--minify [minifier]` | Enable/disable minification, or specify minifier to use (default: `"esbuild"`) (`boolean \| "terser" \| "esbuild"`) | -| `--manifest [name]` | Emit build manifest json (`boolean \| string`) | -| `--ssrManifest [name]` | Emit ssr manifest json (`boolean \| string`) | -| `--emptyOutDir` | Force empty outDir when it's outside of root (`boolean`) | -| `-w, --watch` | Rebuilds when modules have changed on disk (`boolean`) | -| `-c, --config ` | Use specified config file (`string`) | -| `--base ` | Public base path (default: `/`) (`string`) | -| `-l, --logLevel ` | Info \| warn \| error \| silent (`string`) | -| `--clearScreen` | Allow/disable clear screen when logging (`boolean`) | -| `--configLoader ` | Use `bundle` to bundle the config with Rolldown or `runner` (experimental) to process it on the fly (default: `bundle`) | -| `--profile` | Start built-in Node.js inspector (check [Performance bottlenecks](/guide/troubleshooting#performance-bottlenecks)) | -| `-d, --debug [feat]` | Show debug logs (`string \| boolean`) | -| `-f, --filter ` | Filter debug logs (`string`) | -| `-m, --mode ` | Set env mode (`string`) | -| `-h, --help` | Display available CLI options | -| `--app` | Build all environments, same as `builder: {}` (`boolean`, experimental) | ->>>>>>> 9d1e98c998121f033ff1f30dbc9a68b8b6603763 ## 其他 {#others} @@ -138,7 +89,6 @@ vite optimize [root] #### 选项 {#options-2} -<<<<<<< HEAD | 选项 | | | ------------------------- | --------------------------------------------------------------------------------------------- | | `--force` | 强制优化器忽略缓存并重新构建 (`boolean`) | @@ -146,25 +96,11 @@ vite optimize [root] | `--base ` | 公共基础路径(默认为:`/`)(`string`) | | `-l, --logLevel ` | Info \| warn \| error \| silent (`string`) | | `--clearScreen` | 允许或禁用打印日志时清除屏幕 (`boolean`) | -| `--configLoader ` | 使用 `bundle` 来采用 esbuild 打包配置,或是 `runner`(实验性)来在运行时处理,默认是 `bundle` | +| `--configLoader ` | 使用 `bundle` 来采用 Rolldown 打包配置,或是 `runner`(实验性)来在运行时处理,默认是 `bundle` | | `-d, --debug [feat]` | 显示调试日志 (`string \| boolean`) | | `-f, --filter ` | 过滤调试日志 (`string`) | | `-m, --mode ` | 设置环境模式 (`string`) | | `-h, --help` | 显示可用的 CLI 选项 | -======= -| Options | | -| ------------------------- | ----------------------------------------------------------------------------------------------------------------------- | -| `--force` | Force the optimizer to ignore the cache and re-bundle (`boolean`) | -| `-c, --config ` | Use specified config file (`string`) | -| `--base ` | Public base path (default: `/`) (`string`) | -| `-l, --logLevel ` | Info \| warn \| error \| silent (`string`) | -| `--clearScreen` | Allow/disable clear screen when logging (`boolean`) | -| `--configLoader ` | Use `bundle` to bundle the config with Rolldown or `runner` (experimental) to process it on the fly (default: `bundle`) | -| `-d, --debug [feat]` | Show debug logs (`string \| boolean`) | -| `-f, --filter ` | Filter debug logs (`string`) | -| `-m, --mode ` | Set env mode (`string`) | -| `-h, --help` | Display available CLI options | ->>>>>>> 9d1e98c998121f033ff1f30dbc9a68b8b6603763 ### `vite preview` {#vite-preview} @@ -180,7 +116,6 @@ vite preview [root] #### 选项 {#options-3} -<<<<<<< HEAD | 选项 | | | ------------------------- | --------------------------------------------------------------------------------------------- | | `--host [host]` | 指定主机名称 (`string`) | @@ -192,26 +127,8 @@ vite preview [root] | `--base ` | 公共基础路径(默认为:`/`)(`string`) | | `-l, --logLevel ` | Info \| warn \| error \| silent (`string`) | | `--clearScreen` | 允许或禁用打印日志时清除屏幕 (`boolean`) | -| `--configLoader ` | 使用 `bundle` 来采用 esbuild 打包配置,或是 `runner`(实验性)来在运行时处理,默认是 `bundle` | +| `--configLoader ` | 使用 `bundle` 来采用 Rolldown 打包配置,或是 `runner`(实验性)来在运行时处理,默认是 `bundle` | | `-d, --debug [feat]` | 显示调试日志 (`string \| boolean`) | | `-f, --filter ` | 过滤调试日志 (`string`) | | `-m, --mode ` | 设置环境模式 (`string`) | | `-h, --help` | 显示可用的 CLI 选项 | -======= -| Options | | -| ------------------------- | ----------------------------------------------------------------------------------------------------------------------- | -| `--host [host]` | Specify hostname (`string`) | -| `--port ` | Specify port (`number`) | -| `--strictPort` | Exit if specified port is already in use (`boolean`) | -| `--open [path]` | Open browser on startup (`boolean \| string`) | -| `--outDir ` | Output directory (default: `dist`)(`string`) | -| `-c, --config ` | Use specified config file (`string`) | -| `--base ` | Public base path (default: `/`) (`string`) | -| `-l, --logLevel ` | Info \| warn \| error \| silent (`string`) | -| `--clearScreen` | Allow/disable clear screen when logging (`boolean`) | -| `--configLoader ` | Use `bundle` to bundle the config with Rolldown or `runner` (experimental) to process it on the fly (default: `bundle`) | -| `-d, --debug [feat]` | Show debug logs (`string \| boolean`) | -| `-f, --filter ` | Filter debug logs (`string`) | -| `-m, --mode ` | Set env mode (`string`) | -| `-h, --help` | Display available CLI options | ->>>>>>> 9d1e98c998121f033ff1f30dbc9a68b8b6603763 diff --git a/guide/dep-pre-bundling.md b/guide/dep-pre-bundling.md index 089fbb9f..bce80d89 100644 --- a/guide/dep-pre-bundling.md +++ b/guide/dep-pre-bundling.md @@ -21,22 +21,13 @@ 通过将 `lodash-es` 预构建成单个模块,现在我们只需要一个HTTP请求! -<<<<<<< HEAD ::: tip 注意 -依赖预构建仅适用于开发模式,并使用 `esbuild` 将依赖项转换为 ES 模块。在生产构建中,将使用 `@rollup/plugin-commonjs`。 -======= -::: tip NOTE -Dependency pre-bundling only applies in development mode. ->>>>>>> 9d1e98c998121f033ff1f30dbc9a68b8b6603763 +依赖预构建仅适用于开发模式。 ::: ## 自动依赖搜寻 {#automatic-dependency-discovery} -<<<<<<< HEAD -如果没有找到现有的缓存,Vite 会扫描您的源代码,并自动寻找引入的依赖项(即 "bare import",表示期望从 `node_modules` 中解析),并将这些依赖项作为预构建的入口点。预打包使用 `esbuild` 执行,因此通常速度非常快。 -======= -If an existing cache is not found, Vite will crawl your source code and automatically discover dependency imports (i.e. "bare imports" that expect to be resolved from `node_modules`) and use these found imports as entry points for the pre-bundle. The pre-bundling is performed with [Rolldown](https://rolldown.rs/) so it's typically very fast. ->>>>>>> 9d1e98c998121f033ff1f30dbc9a68b8b6603763 +如果没有找到现有的缓存,Vite 会扫描您的源代码,并自动寻找引入的依赖项(即 "bare import",表示期望从 `node_modules` 中解析),并将这些依赖项作为预构建的入口点。预打包使用 [Rolldown](https://rolldown.rs/) 执行,因此通常速度非常快。 在服务器已经启动后,如果遇到尚未在缓存中的新依赖项导入,则 Vite 将重新运行依赖项构建过程,并在需要时重新加载页面。 @@ -44,11 +35,7 @@ If an existing cache is not found, Vite will crawl your source code and automati 在一个 monorepo 启动中,该仓库中的某个包可能会成为另一个包的依赖。Vite 会自动侦测没有从 `node_modules` 解析的依赖项,并将链接的依赖视为源码。它不会尝试打包被链接的依赖,而是会分析被链接依赖的依赖列表。 -<<<<<<< HEAD -然而,这需要被链接的依赖被导出为 ESM 格式。如果不是,那么你可以在配置里将此依赖添加到 [`optimizeDeps.include`](/config/dep-optimization-options.md#optimizedeps-include) 和 [`build.commonjsOptions.include`](/config/build-options.md#build-commonjsoptions) 这两项中。 -======= -However, this requires the linked dep to be exported as ESM. If not, you can add the dependency to [`optimizeDeps.include`](/config/dep-optimization-options.md#optimizedeps-include) in your config. ->>>>>>> 9d1e98c998121f033ff1f30dbc9a68b8b6603763 +然而,这需要被链接的依赖被导出为 ESM 格式。如果不是,那么你可以在配置里将此依赖添加到 [`optimizeDeps.include`](/config/dep-optimization-options.md#optimizedeps-include) 中。 ```js twoslash [vite.config.js] import { defineConfig } from 'vite' @@ -70,13 +57,9 @@ export default defineConfig({ `include` 和 `exclude` 都可以用来处理这个问题。如果依赖项很大(包含很多内部模块)或者是 CommonJS,那么你应该包含它;如果依赖项很小,并且已经是有效的 ESM,则可以排除它,让浏览器直接加载它。 -<<<<<<< HEAD 你可以通过 [`optimizeDeps.esbuildOptions` 选项](/config/dep-optimization-options.md#optimizedeps-esbuildoptions) 进一步自定义 esbuild。例如,添加一个 esbuild 插件来处理依赖项中的特殊文件,或者更改 [build `target`](https://esbuild.github.io/api/#target)。 -======= -You can further customize esbuild too with the [`optimizeDeps.rolldownOptions` option](/config/dep-optimization-options.md#optimizedeps-rolldownoptions). For example, adding an Rolldown plugin to handle special files in dependencies or changing the [build `target`](https://esbuild.github.io/api/#target). ->>>>>>> 9d1e98c998121f033ff1f30dbc9a68b8b6603763 ## 缓存 {#caching} diff --git a/guide/features.md b/guide/features.md index 2949f8a8..0efc9e94 100644 --- a/guide/features.md +++ b/guide/features.md @@ -98,25 +98,21 @@ Vite 忽略 `tsconfig.json` 中的 `target` 值,遵循与 `esbuild` 相同的 因此,建议将 `target` 设置为 `ESNext` 或 `ES2022` 或更新版本,或者在配置 `tsconfig.json` 时将 `useDefineForClassFields` 显式设置为 `true`。 ::: -<<<<<<< HEAD -#### 影响构建结果的其他编译器选项 {#other-compiler-options-affecting-the-build-result} -======= -#### `emitDecoratorMetadata` +#### `emitDecoratorMetadata` {#emitDecoratorMetadata} -- [TypeScript documentation](https://www.typescriptlang.org/tsconfig#emitDecoratorMetadata) +- [TypeScript 文档](https://www.typescriptlang.org/tsconfig#emitDecoratorMetadata) -This option is only partially supported. Full support requires type inference by the TypeScript compiler, which is not supported. See [Oxc Transformer's documentation](https://oxc.rs/docs/guide/usage/transformer/typescript#decorators) for details. +此选项仅被部分支持。完全支持需要 TypeScript 编译器进行类型推断,而这是不受支持的。详情请参见 [Oxc Transformer 的文档](https://oxc.rs/docs/guide/usage/transformer/typescript#decorators)。 -#### `paths` +#### `paths` {#paths} -- [TypeScript documentation](https://www.typescriptlang.org/tsconfig/#paths) +- [TypeScript 文档](https://www.typescriptlang.org/tsconfig/#paths) -`resolve.tsconfigPaths: true` can be specified to tell Vite to use the `paths` option in `tsconfig.json` to resolve imports. +可以指定 `resolve.tsconfigPaths: true` 来告诉 Vite 使用 [tsconfig.json](file:///Users/liuxin/Project/开源/vite-docs-cn/tsconfig.json) 中的 `paths` 选项来解析导入。 -Note that this feature has a performance cost and is [discouraged by the TypeScript team to use this option to change the behavior of the external tools](https://www.typescriptlang.org/tsconfig/#paths:~:text=Note%20that%20this%20feature%20does%20not%20change%20how%20import%20paths%20are%20emitted%20by%20tsc%2C%20so%20paths%20should%20only%20be%20used%20to%20inform%20TypeScript%20that%20another%20tool%20has%20this%20mapping%20and%20will%20use%20it%20at%20runtime%20or%20when%20bundling.). +需要注意的是,这个功能会有性能损耗,并且 [TypeScript 团队不建议使用这个选项来改变外部工具的行为](https://www.typescriptlang.org/tsconfig/#paths:~:text=Note%20that%20this%20feature%20does%20not%20change%20how%20import%20paths%20are%20emitted%20by%20tsc%2C%20so%20paths%20should%20only%20be%20used%20to%20inform%20TypeScript%20that%20another%20tool%20has%20this%20mapping%20and%20will%20use%20it%20at%20runtime%20or%20when%20bundling.)。 -#### Other Compiler Options Affecting the Build Result ->>>>>>> 9d1e98c998121f033ff1f30dbc9a68b8b6603763 +#### 影响构建结果的其他编译器选项 {#other-compiler-options-affecting-the-build-result} - [`extends`](https://www.typescriptlang.org/tsconfig#extends) - [`importsNotUsedAsValues`](https://www.typescriptlang.org/tsconfig#importsNotUsedAsValues) diff --git a/guide/index.md b/guide/index.md index eb1a7512..b20ae6e2 100644 --- a/guide/index.md +++ b/guide/index.md @@ -20,11 +20,7 @@ Vite 还提供了强大的扩展性,可通过其 [插件 API](./api-plugin) ## 浏览器支持 {#browser-support} -<<<<<<< HEAD -在开发过程中,Vite 假设使用的是现代浏览器。这意味着该浏览器支持大多数最新的 JavaScript 和 CSS 功能。因此,Vite 将 [`esnext` 设置为转换目标](https://esbuild.github.io/api/#target)。这可以防止语法降低,使 Vite 能够尽可能接近原始源代码提供模块。Vite 会注入一些运行时代码以使开发服务器正常工作。这些代码使用了 [Baseline](https://web-platform-dx.github.io/web-features/) 中包含的功能,该功能在每个主要版本发布时(此主要版本为 2025-05-01)新增。 -======= -During development, Vite assumes that a modern browser is used. This means the browser supports most of the latest JavaScript and CSS features. For that reason, Vite sets [`esnext` as the transform target](https://esbuild.github.io/api/#target). This prevents syntax lowering, letting Vite serve modules as close as possible to the original source code. Vite injects some runtime code to make the development server work. These code use features included in [Baseline](https://web-platform-dx.github.io/web-features/) Newly Available at the time of each major release (2026-01-01 for this major). ->>>>>>> 9d1e98c998121f033ff1f30dbc9a68b8b6603763 +在开发过程中,Vite 假设使用的是现代浏览器。这意味着该浏览器支持大多数最新的 JavaScript 和 CSS 功能。因此,Vite 将 [`esnext` 设置为转换目标](https://esbuild.github.io/api/#target)。这可以防止语法降低,使 Vite 能够尽可能接近原始源代码提供模块。Vite 会注入一些运行时代码以使开发服务器正常工作。这些代码使用了 [Baseline](https://web-platform-dx.github.io/web-features/) 中包含的功能,该功能在每个主要版本发布时(此主要版本为 2026-01-01)新增。 对于生产环境构建,Vite 默认以 [Baseline](https://web-platform-dx.github.io/web-features/) 广泛可用的浏览器为目标平台。这些浏览器至少发布于两年半之前。您可以通过配置降低目标浏览器版本。此外,可以通过官方 [@vitejs/plugin-legacy](https://github.com/vitejs/vite/tree/main/packages/plugin-legacy) 支持旧版浏览器。更多详情,请参阅 [构建生产环境](./build) 部分。 diff --git a/guide/migration-from-v6.md b/guide/migration-from-v6.md new file mode 100644 index 00000000..da8ad761 --- /dev/null +++ b/guide/migration-from-v6.md @@ -0,0 +1,58 @@ +# 从 v6 迁移 {#migration-from-v6} + +## Node.js 支持 {#node-js-support} + +Vite 不再支持已结束生命周期(EOL)的 Node.js 18。现在需要使用 Node.js 20.19+ 或 22.12+。 + +## 浏览器兼容性目标变更 {#default-browser-target-change} + +`build.target` 的默认浏览器值已更新为较新的浏览器版本。 + +- Chrome 107 → 111 +- Edge 107 → 111 +- Firefox 104 → 114 +- Safari 16.0 → 16.4 + +这些浏览器版本符合 [Baseline](https://web-platform-dx.github.io/web-features/) 在 2025-05-01 时定义的“广泛可用”功能集标准。换句话说,它们的发布日期都在 2022-11-01 之前。 + +在 Vite 5 中,默认目标名为 `'modules'`,但现在该选项已不再可用。取而代之的是引入了一个新的默认目标 `'baseline-widely-available'`。 + +## 总体变化 {#general-changes} + +### 移除了 Sass 旧版 API 支持 {#removed-sass-legacy-api-support} + +如计划所述,Sass 旧版 API 的支持已被移除。Vite 现在仅支持现代 API。你可以移除 `css.preprocessorOptions.sass.api` 和 `css.preprocessorOptions.scss.api` 配置选项。 + +## 移除了已弃用的功能 {#removed-deprecated-features} + +- `splitVendorChunkPlugin`(在 v5.2.7 中弃用) + - 该插件最初是为了方便迁移到 Vite v2.9 而提供的。 + - 如有需要,可以使用 `build.rollupOptions.output.manualChunks` 选项来控制分块行为。 +- `transformIndexHtml` 的 hook 级别 `enforce` / `transform`(在 v4.0.0 中弃用) + - 此更改是为了与 [Rollup 的对象型 hooks](https://rollupjs.org/plugin-development/#build-hooks:~:text=Instead%20of%20a%20function%2C%20hooks%20can%20also%20be%20objects.) 接口保持一致。 + - 应使用 `order` 替代 `enforce`,使用 `handler` 替代 `transform`。 + +## 进阶 {#advanced} + +还有其他一些只影响少数用户的破坏性更改。 + +- [[#19979] chore: declare version range for peer dependencies](https://github.com/vitejs/vite/pull/19979) + - 为 CSS 预处理器指定了 peerDependencies 的版本范围。 +- [[#20013] refactor: remove no-op `legacy.proxySsrExternalModules`](https://github.com/vitejs/vite/pull/20013) + - `legacy.proxySsrExternalModules` 属性自 Vite 6 起已无实际作用,现已移除。 +- [[#19985] refactor!: remove deprecated no-op type only properties](https://github.com/vitejs/vite/pull/19985) + - 以下未使用的属性现已移除:`ModuleRunnerOptions.root`、`ViteDevServer._importGlobMap`、`ResolvePluginOptions.isFromTsImporter`、`ResolvePluginOptions.getDepsOptimizer`、`ResolvePluginOptions.shouldExternalize`、`ResolvePluginOptions.ssrConfig` +- [[#19986] refactor: remove deprecated env api properties](https://github.com/vitejs/vite/pull/19986) + - 这些属性从一开始就被标记为弃用,现已移除。 +- [[#19987] refactor!: remove deprecated `HotBroadcaster` related types](https://github.com/vitejs/vite/pull/19987) + - 这些类型是作为现已弃用的 Runtime API 的一部分引入的,现已被移除:`HMRBroadcaster`、`HMRBroadcasterClient`、`ServerHMRChannel`、`HMRChannel`。 +- [[#19996] fix(ssr)!: don't access `Object` variable in ssr transformed code](https://github.com/vitejs/vite/pull/19996) + - `__vite_ssr_exportName__` 现在是模块运行时上下文中的必需字段。 +- [[#20045] fix: treat all `optimizeDeps.entries` values as globs](https://github.com/vitejs/vite/pull/20045) + - `optimizeDeps.entries` 不再接收字面量字符串路径,而是始终接收 glob 模式。 +- [[#20222] feat: apply some middlewares before `configureServer` hook](https://github.com/vitejs/vite/pull/20222), [[#20224] feat: apply some middlewares before `configurePreviewServer` hook](https://github.com/vitejs/vite/pull/20224) + - 某些中间件现在会在 `configureServer` / `configurePreviewServer` 钩子之前被应用。请注意,如果你不希望某个路由应用 [`server.cors`](../config/server-options.md#server-cors) / [`preview.cors`](../config/preview-options.md#preview-cors) 配置,请务必从响应中移除相关的请求头。 + +## 从 v5 迁移 {#migration-from-v5} + +请先查阅 Vite v6 文档中的 [从 v5 迁移指南](https://v6.vite.dev/guide/migration.html)([中文版](/guide/migration-from-v5.md)),了解如何将你的应用迁移到 Vite 6 所需的变更,然后再继续执行本页中的相关更改。 diff --git a/guide/migration.md b/guide/migration.md index ed14564a..dc65194a 100644 --- a/guide/migration.md +++ b/guide/migration.md @@ -1,42 +1,25 @@ -<<<<<<< HEAD -# 从 v6 迁移 {#migration-from-v6} - -## Node.js 支持 {#node-js-support} - -Vite 不再支持已结束生命周期(EOL)的 Node.js 18。现在需要使用 Node.js 20.19+ 或 22.12+。 -======= -# Migration from v7 ->>>>>>> 9d1e98c998121f033ff1f30dbc9a68b8b6603763 +# 从 v7 迁移 {#migration-from-v7} ## 浏览器兼容性目标变更 {#default-browser-target-change} -<<<<<<< HEAD -`build.target` 的默认浏览器值已更新为较新的浏览器版本。 -======= -The default browser value of `build.target` and `'baseline-widely-available'`, is updated to newer browser version: ->>>>>>> 9d1e98c998121f033ff1f30dbc9a68b8b6603763 +`build.target` 和 `'baseline-widely-available'` 的默认浏览器值已更新为较新的浏览器版本: - Chrome 107 → 111 - Edge 107 → 111 - Firefox 104 → 114 - Safari 16.0 → 16.4 -<<<<<<< HEAD -这些浏览器版本符合 [Baseline](https://web-platform-dx.github.io/web-features/) 在 2025-05-01 时定义的“广泛可用”功能集标准。换句话说,它们的发布日期都在 2022-11-01 之前。 - -在 Vite 5 中,默认目标名为 `'modules'`,但现在该选项已不再可用。取而代之的是引入了一个新的默认目标 `'baseline-widely-available'`。 -======= -These browser versions align with [Baseline Widely Available](https://web-platform-dx.github.io/web-features/) feature sets as of 2026-01-01. In other words, they were all released about two and a half years ago. +这些浏览器版本符合 [Baseline](https://web-platform-dx.github.io/web-features/) 在 2026-01-01 时定义的“广泛可用”功能集标准。换句话说,它们都是大约两年半前发布的。 -## Rolldown +## Rolldown {#rolldown} -Vite 8 uses Rolldown and Oxc based tools instead of esbuild and Rollup. +Vite 8 使用基于 Rolldown 和 Oxc 的工具,而不是 esbuild 和 Rollup。 -### Gradual Migration +### 渐进式迁移 {#gradual-migration} -The `rolldown-vite` package implements Vite 7 with Rolldown, without other Vite 8 changes. This can be used as a intermediate step to migrate to Vite 8. See [the Rolldown Integration guide](https://v7.vite.dev/guide/rolldown) in the Vite 7 docs to switch to `rolldown-vite` from Vite 7. +`rolldown-vite` 包实现了使用 Rolldown 的 Vite 7,但不包含其他 Vite 8 的变更。这可以作为迁移到 Vite 8 的中间步骤。请参阅 Vite 7 文档中的 [Rolldown 集成指南](https://v7.vite.dev/guide/rolldown) 了解如何从 Vite 7 切换到 `rolldown-vite`。 -For users migrating from `rolldown-vite` to Vite 8, you can undo the dependency changes in `package.json` and update to Vite 8: +对于从 `rolldown-vite` 迁移到 Vite 8 的用户,你可以撤销 `package.json` 中的依赖变更并更新到 Vite 8: ```json { @@ -47,11 +30,11 @@ For users migrating from `rolldown-vite` to Vite 8, you can undo the dependency } ``` -### Dependency Optimizer now uses Rolldown +### 依赖优化器现在使用 Rolldown {#dependency-optimizer-now-uses-rolldown} -Rolldown is now used for dependency optimization instead of esbuild. Vite still supports [`optimizeDeps.esbuildOptions`](/config/dep-optimization-options#optimizedeps-esbuildoptions) for backward compatibility by converting it to [`optimizeDeps.rolldownOptions`](/config/dep-optimization-options#optimizedeps-rolldownoptions) automatically. `optimizeDeps.esbuildOptions` is now deprecated and will be removed in the future and we encourage you to migrate to `optimizeDeps.rolldownOptions`. +现在依赖优化使用 Rolldown 而不是 esbuild。Vite 仍然通过自动将 [`optimizeDeps.esbuildOptions`](/config/dep-optimization-options#optimizedeps-esbuildoptions) 转换为 [`optimizeDeps.rolldownOptions`](/config/dep-optimization-options#optimizedeps-rolldownoptions) 来支持向后兼容。`optimizeDeps.esbuildOptions` 现在已被弃用,将来会被移除,我们鼓励您迁移到 `optimizeDeps.rolldownOptions`。 -The following options are converted automatically: +以下选项会自动转换: - [`esbuildOptions.minify`](https://esbuild.github.io/api/#minify) -> `rolldownOptions.output.minify` - [`esbuildOptions.treeShaking`](https://esbuild.github.io/api/#tree-shaking) -> `rolldownOptions.treeshake` @@ -67,7 +50,7 @@ The following options are converted automatically: -You can get the options set by the compatibility layer from the `configResolved` hook: +你可以从 `configResolved` 钩子中获取由兼容层设置的选项: ```js const plugin = { @@ -78,11 +61,11 @@ const plugin = { }, ``` -### JavaScript Transforms by Oxc +### 使用 Oxc 转换 JavaScript {#javascript-transforms-by-oxc} -Oxc is now used for JavaScript transformation instead of esbuild. Vite still supports the [`esbuild`](/config/shared-options#esbuild) option for backward compatibility by converting it to [`oxc`](/config/shared-options#oxc) automatically. `esbuild` is now deprecated and will be removed in the future and we encourage you to migrate to `oxc`. +现在使用 Oxc 进行 JavaScript 转换,而不是 esbuild。Vite 仍然通过自动将 [`esbuild`](/config/shared-options#esbuild) 选项转换为 [`oxc`](/config/shared-options#oxc) 来支持向后兼容。`esbuild` 现在已被弃用,将来会被移除,我们鼓励您迁移到 `oxc`。 -The following options are converted automatically: +以下选项会自动转换: - `esbuild.jsxInject` -> `oxc.jsxInject` - `esbuild.include` -> `oxc.include` @@ -97,12 +80,12 @@ The following options are converted automatically: - [`esbuild.jsxDev`](https://esbuild.github.io/api/#jsx-dev) -> `oxc.jsx.development` - [`esbuild.jsxSideEffects`](https://esbuild.github.io/api/#jsx-side-effects) -> `oxc.jsx.pure` - [`esbuild.define`](https://esbuild.github.io/api/#define) -> [`oxc.define`](https://oxc.rs/docs/guide/usage/transformer/global-variable-replacement#define) -- [`esbuild.banner`](https://esbuild.github.io/api/#banner) -> custom plugin using transform hook -- [`esbuild.footer`](https://esbuild.github.io/api/#footer) -> custom plugin using transform hook +- [`esbuild.banner`](https://esbuild.github.io/api/#banner) -> 使用 transform 钩子的自定义插件 +- [`esbuild.footer`](https://esbuild.github.io/api/#footer) -> 使用 transform 钩子的自定义插件 -The [`esbuild.supported`](https://esbuild.github.io/api/#supported) option is not supported by Oxc. If you need this option, please see [oxc-project/oxc#15373](https://github.com/oxc-project/oxc/issues/15373). +[`esbuild.supported`](https://esbuild.github.io/api/#supported) 选项不被 Oxc 支持。如果你需要这个选项,请查看 [oxc-project/oxc#15373](https://github.com/oxc-project/oxc/issues/15373)。 -You can get the options set by the compatibility layer from the `configResolved` hook: +你可以从 `configResolved` 钩子中获取由兼容层设置的选项: ```js const plugin = { @@ -115,22 +98,22 @@ const plugin = { -Currently, the Oxc transformer does not support lowering native decorators as we are waiting for the specification to progress, see ([oxc-project/oxc#9170](https://github.com/oxc-project/oxc/issues/9170)). +目前,Oxc 转换器不支持降低原生装饰器,因为我们正在等待规范的进展,参见 ([oxc-project/oxc#9170](https://github.com/oxc-project/oxc/issues/9170))。 -:::: details Workaround for lowering native decorators +:::: details 降低原生装饰器的解决方法 -You can use [Babel](https://babeljs.io/) or [SWC](https://swc.rs/) to lower native decorators for the time being. While SWC is faster than Babel, it does **not support the latest decorator spec** that esbuild supports. +目前你可以使用 [Babel](https://babeljs.io/) 或 [SWC](https://swc.rs/) 来降低原生装饰器。虽然 SWC 比 Babel 更快,但它**不支持 esbuild 支持的最新装饰器规范**。 -The decorator spec has been updated multiple times since it reached stage 3. The versions supported by each tool are: +自从装饰器规范达到第 3 阶段以来,已经更新了多次。每个工具支持的版本如下: -- `"2023-11"` (esbuild, TypeScript 5.4+ and Babel support this version) -- `"2023-05"` (TypeScript 5.2+ supports this version) -- `"2023-01"` (TypeScript 5.0+ supports this version) -- `"2022-03"` (SWC supports this version) +- `"2023-11"`(esbuild、TypeScript 5.4+ 和 Babel 支持此版本) +- `"2023-05"`(TypeScript 5.2+ 支持此版本) +- `"2023-01"`(TypeScript 5.0+ 支持此版本) +- `"2022-03"`(SWC 支持此版本) -See the [Babel decorators versions guide](https://babeljs.io/docs/babel-plugin-proposal-decorators#version) for differences between each version. +请参阅 [Babel 装饰器版本指南](https://babeljs.io/docs/babel-plugin-proposal-decorators#version) 了解各版本之间的差异。 -**Using Babel:** +**使用 Babel:** ::: code-group @@ -176,7 +159,7 @@ export default defineConfig({ }) ``` -**Using SWC:** +**使用 SWC:** ::: code-group @@ -227,69 +210,69 @@ export default defineConfig({ :::: -#### esbuild Fallbacks +#### esbuild 回退机制 {#esbuild-fallbacks} -`esbuild` is no longer directly used by Vite and is now an optional dependency. If you are using a plugin that uses the `transformWithEsbuild` function, you need to install `esbuild` as a `devDependency`. The `transformWithEsbuild` function is deprecated and will be removed in the future. We recommend migrating to the new `transformWithOxc` function instead. +`esbuild` 不再被 Vite 直接使用,现在是一个可选依赖。如果你正在使用一个使用 `transformWithEsbuild` 函数的插件,你需要将 `esbuild` 安装为 `devDependency`。`transformWithEsbuild` 函数已被弃用,将来会被移除。我们建议迁移到新的 `transformWithOxc` 函数。 -### JavaScript Minification by Oxc +### 使用 Oxc 进行 JavaScript 压缩 {#javascript-minification-by-oxc} -The Oxc Minifier is now used for JavaScript minification instead of esbuild. You can use the deprecated [`build.minify: 'esbuild'`](/config/build-options#minify) option to switch back to esbuild. This configuration option will be removed in the future and you need install `esbuild` as a `devDependency` as Vite no longer relies on esbuild directly. +现在使用 Oxc 压缩器进行 JavaScript 压缩,而不是 esbuild。你可以使用已弃用的 [`build.minify: 'esbuild'`](/config/build-options#minify) 选项切换回 esbuild。这个配置选项将来会被移除,你需要将 `esbuild` 安装为 `devDependency`,因为 Vite 不再直接依赖 esbuild。 -If you were using the `esbuild.minify*` options to control minification behavior, you can now use `build.rolldownOptions.output.minify` instead. If you were using the `esbuild.drop` option, you can now use [`build.rolldownOptions.output.minify.compress.drop*` options](https://oxc.rs/docs/guide/usage/minifier/dead-code-elimination). +如果你之前使用 `esbuild.minify*` 选项来控制压缩行为,现在可以改用 `build.rolldownOptions.output.minify`。如果你之前使用 `esbuild.drop` 选项,现在可以改用 [`build.rolldownOptions.output.minify.compress.drop*` 选项](https://oxc.rs/docs/guide/usage/minifier/dead-code-elimination)。 -Property mangling and its related options ([`mangleProps`, `reserveProps`, `mangleQuoted`, `mangleCache`](https://esbuild.github.io/api/#mangle-props)) are not supported by Oxc. If you need these options, please see [oxc-project/oxc#15375](https://github.com/oxc-project/oxc/issues/15375). +Oxc 不支持属性混淆及其相关选项([`mangleProps`、`reserveProps`、`mangleQuoted`、`mangleCache`](https://esbuild.github.io/api/#mangle-props))。如果你需要这些选项,请查看 [oxc-project/oxc#15375](https://github.com/oxc-project/oxc/issues/15375)。 -esbuild and Oxc Minifier make slightly different assumptions about source code. In case you suspect the minifier is causing breakage in your code, you can compare these assumptions here: +esbuild 和 Oxc 压缩器对源代码做出了略微不同的假设。如果你怀疑压缩器导致了代码损坏,可以在此处比较这些假设: -- [esbuild minify assumptions](https://esbuild.github.io/api/#minify-considerations) -- [Oxc Minifier assumptions](https://oxc.rs/docs/guide/usage/minifier.html#assumptions) +- [esbuild 压缩假设](https://esbuild.github.io/api/#minify-considerations) +- [Oxc 压缩器假设](https://oxc.rs/docs/guide/usage/minifier.html#assumptions) -Please report any issues you find related to minification in your JavaScript apps. +请报告你在 JavaScript 应用程序中发现的任何与压缩相关的问题。 -### CSS Minification by Lightning CSS +### 使用 Lightning CSS 进行 CSS 压缩 {#css-minification-by-lightning-css} -[Lightning CSS](https://lightningcss.dev/) is now used for CSS minification by default. You can use the [`build.cssMinify: 'esbuild'`](/config/build-options#cssminify) option to switch back to esbuild. Note that you need to install `esbuild` as a `devDependency`. +现在默认使用 [Lightning CSS](https://lightningcss.dev/) 进行 CSS 压缩。你可以使用 [`build.cssMinify: 'esbuild'`](/config/build-options#cssminify) 选项切换回 esbuild。请注意,你需要将 `esbuild` 安装为 `devDependency`。 -Lightning CSS supports better syntax lowering and your CSS bundle size might increase slightly. +Lightning CSS 支持更好的语法降级,你的 CSS 包大小可能会略有增加。 -### Consistent CommonJS Interop +### 一致的 CommonJS 互操作性 {#consistent-commonjs-interop} -The `default` import from a CommonJS (CJS) module is now handled in a consistent way. +现在以一致的方式处理来自 CommonJS (CJS) 模块的 `default` 导入。 -If it matches one of the following conditions, the `default` import is the `module.exports` value of the importee CJS module. Otherwise, the `default` import is the `module.exports.default` value of the importee CJS module: +如果符合以下条件之一,则 `default` 导入是被导入的 CJS 模块的 `module.exports` 值。否则,`default` 导入是被导入的 CJS 模块的 `module.exports.default` 值: -- The importer is `.mjs` or `.mts`. -- The closest `package.json` for the importer has a `type` field set to `module`. -- The `module.exports.__esModule` value of the importee CJS module is not set to true. +- 导入者是 `.mjs` 或 `.mts` 文件。 +- 导入者最近的 `package.json` 文件中 `type` 字段设置为 `module`。 +- 被导入的 CJS 模块的 `module.exports.__esModule` 值未设置为 true。 -::: details The previous behavior +::: details 之前的行为 -In development, if it matches one of the following conditions, the `default` import is the `module.exports` value of the importee CJS module. Otherwise, the `default` import is the `module.exports.default` value of the importee CJS module: +在开发环境中,如果符合以下条件之一,则 `default` 导入是被导入的 CJS 模块的 `module.exports` 值。否则,`default` 导入是被导入的 CJS 模块的 `module.exports.default` 值: -- _The importer is included in the dependency optimization_ and `.mjs` or `.mts`. -- _The importer is included in the dependency optimization_ and the closest `package.json` for the importer has a `type` field set to `module`. -- The `module.exports.__esModule` value of the importee CJS module is not set to true. +- _导入者包含在依赖优化中_ 且为 `.mjs` 或 `.mts` 文件。 +- _导入者包含在依赖优化中_ 且导入者最近的 `package.json` 文件中 `type` 字段设置为 `module`。 +- 被导入的 CJS 模块的 `module.exports.__esModule` 值未设置为 true。 -In build, the conditions were: +在构建时,条件为: -- The `module.exports.__esModule` value of the importee CJS module is not set to true. -- _`default` property of `module.exports` does not exist_. +- 被导入的 CJS 模块的 `module.exports.__esModule` 值未设置为 true。 +- _`module.exports` 的 `default` 属性不存在_。 -(assuming [`build.commonjsOptions.defaultIsModuleExports`](https://github.com/rollup/plugins/tree/master/packages/commonjs#defaultismoduleexports) is not changed from the default `'auto'`) +(假设 [`build.commonjsOptions.defaultIsModuleExports`](https://github.com/rollup/plugins/tree/master/packages/commonjs#defaultismoduleexports) 未从默认的 `'auto'` 更改) ::: -See Rolldown's docs about this problem for more details: [Ambiguous `default` import from CJS modules - Bundling CJS | Rolldown](https://rolldown.rs/in-depth/bundling-cjs#ambiguous-default-import-from-cjs-modules). +有关此问题的更多详细信息,请参阅 Rolldown 的文档:[CJS 模块中不明确的 `default` 导入 - 打包 CJS | Rolldown](https://rolldown.rs/in-depth/bundling-cjs#ambiguous-default-import-from-cjs-modules)。 -This change may break some existing code importing CJS modules. You can use the deprecated `legacy.inconsistentCjsInterop: true` option to temporarily restore the previous behavior. If you find a package that is affected by this change, please report it to the package author or send them a pull request. Make sure to link to the Rolldown document above so that the author can understand the context. +此更改可能会破坏一些现有的导入 CJS 模块的代码。你可以使用已弃用的 `legacy.inconsistentCjsInterop: true` 选项临时恢复之前的行为。如果你发现某个包受此更改影响,请向包作者报告或发送拉取请求。请确保链接上面的 Rolldown 文档,以便作者能够理解上下文。 -### Removed Module Resolution Using Format Sniffing +### 使用格式嗅探移除模块解析 {#removed-module-resolution-using-format-sniffing} -When both `browser` and `module` fields are present in `package.json`, Vite used to resolve the field based on the content of the file and it used to pick the ESM file for browsers. This was introduced because some packages were using the `module` field to point to ESM files for Node.js and some other packages were using the `browser` field to point to UMD files for browsers. Given that the modern `exports` field solved this problem and is now adopted by many packages, Vite no longer uses this heuristic and always respects the order of the [`resolve.mainFields`](/config/shared-options#resolve-mainfields) option. If you were relying on this behavior, you can use the [`resolve.alias`](/config/shared-options#resolve-alias) option to map the field to the desired file or apply a patch with your package manager (e.g. `patch-package`, `pnpm patch`). +当 `package.json` 中同时存在 `browser` 和 `module` 字段时,Vite 以前会根据文件内容来解析字段,并为浏览器选择 ESM 文件。引入这一机制是因为一些包使用 `module` 字段指向 Node.js 的 ESM 文件,而其他包使用 `browser` 字段指向浏览器的 UMD 文件。鉴于现代 `exports` 字段解决了这个问题并且现在被许多包采用,Vite 不再使用这种启发式方法,而是始终遵循 [`resolve.mainFields`](/config/shared-options#resolve-mainfields) 选项的顺序。如果你依赖此行为,可以使用 [`resolve.alias`](/config/shared-options#resolve-alias) 选项将字段映射到所需的文件,或使用包管理器应用补丁(例如 `patch-package`、`pnpm patch`)。 -### Require Calls For Externalized Modules +### 外部化模块的 Require 调用 {#require-calls-for-externalized-modules} -`require` calls for externalized modules are now preserved as `require` calls and not converted to `import` statements. This is to preserve the semantics of `require` calls. If you want to convert them to `import` statements, you can use Rolldown's built-in `esmExternalRequirePlugin`, which is re-exported from `vite`. +现在外部化模块的 `require` 调用会被保留为 `require` 调用,而不会被转换为 `import` 语句。这是为了保持 `require` 调用的语义。如果你想将它们转换为 `import` 语句,可以使用 Rolldown 内置的 `esmExternalRequirePlugin`,该插件由 `vite` 重新导出。 ```js import { defineConfig, esmExternalRequirePlugin } from 'vite' @@ -304,29 +287,29 @@ export default defineConfig({ }) ``` -See Rolldown's docs for more details: [`require` external modules - Bundling CJS | Rolldown](https://rolldown.rs/in-depth/bundling-cjs#require-external-modules). +有关更多详细信息,请参阅 Rolldown 的文档:[`require` 外部模块 - 打包 CJS | Rolldown](https://rolldown.rs/in-depth/bundling-cjs#require-external-modules)。 -### `import.meta.url` in UMD / IIFE +### `import.meta.url` in UMD / IIFE {#import-meta-url-in-umd-iife} -`import.meta.url` is no longer polyfilled in UMD / IIFE output formats. It will be replaced with `undefined` by default. If you prefer the previous behavior, you can use the `define` option with `build.rolldownOptions.output.intro` option. See Rolldown's docs for more details: [Well-known `import.meta` properties - Non ESM Output Formats | Rolldown](https://rolldown.rs/in-depth/non-esm-output-formats#well-known-import-meta-properties). +在 UMD / IIFE 输出格式中不再对 `import.meta.url` 进行 polyfill。默认情况下它将被替换为 `undefined`。如果你更喜欢之前的行为,可以使用 `define` 选项配合 `build.rolldownOptions.output.intro` 选项。有关更多详细信息,请参阅 Rolldown 的文档:[知名的 `import.meta` 属性 - 非 ESM 输出格式 | Rolldown](https://rolldown.rs/in-depth/non-esm-output-formats#well-known-import-meta-properties)。 -### Removed `build.rollupOptions.watch.chokidar` option +### 移除了 `build.rollupOptions.watch.chokidar` 选项 {#removed-build-rollupoptions-watch-chokidar-option} -The `build.rollupOptions.watch.chokidar` option was removed. Please migrate to the `build.rolldownOptions.watch.notify` option. +`build.rollupOptions.watch.chokidar` 选项已被移除。请迁移到 `build.rolldownOptions.watch.notify` 选项。 -### Deprecate `build.rollupOptions.output.manualChunks` +### 弃用 `build.rollupOptions.output.manualChunks` {#deprecate-build-rollupoptions-output-manualchunks} -The `output.manualChunks` option is deprecated. Rolldown has the more flexible `advancedChunks` option. See Rolldown's docs for more details about `advancedChunks`: [Advanced Chunks - Rolldown](https://rolldown.rs/in-depth/advanced-chunks). +`output.manualChunks` 选项已被弃用。Rolldown 提供了更灵活的 `advancedChunks` 选项。有关 `advancedChunks` 的更多详情,请参阅 Rolldown 的文档:[高级分块 - Rolldown](https://rolldown.rs/in-depth/advanced-chunks)。 -### Module Type Support and Auto Detection +### 模块类型支持和自动检测 {#module-type-support-and-auto-detection} -_This change only affects plugin authors._ +_此更改仅影响插件作者。_ -Rolldown has experimental support for [Module types](https://rolldown.rs/guide/notable-features#module-types), similar to [esbuild's `loader` option](https://esbuild.github.io/api/#loader). Due to this, Rolldown automatically sets a module type based on the extension of the resolved id. If you are converting content from other module types to JavaScript in `load` or `transform` hooks, you may need to add `moduleType: 'js'` to the returned value: +Rolldown 对[模块类型](https://rolldown.rs/guide/notable-features#module-types)提供了实验性支持,类似于[esbuild 的 `loader` 选项](https://esbuild.github.io/api/#loader)。因此,Rolldown 会根据解析后的 ID 扩展名自动设置模块类型。如果你在 `load` 或 `transform` 钩子中将其他模块类型的内容转换为 JavaScript,你可能需要在返回值中添加 `moduleType: 'js'`: ```js const plugin = { @@ -343,93 +326,52 @@ const plugin = { } ``` -### Other Related Deprecations +### 其他相关弃用 {#other-related-deprecations} -The following options are deprecated and will be removed in the future: +以下选项已被弃用,将在未来被移除: -- `build.rollupOptions`: renamed to `build.rolldownOptions` -- `worker.rollupOptions`: renamed to `worker.rolldownOptions` -- `build.commonjsOptions`: it is now no-op ->>>>>>> 9d1e98c998121f033ff1f30dbc9a68b8b6603763 +- `build.rollupOptions`:重命名为 `build.rolldownOptions` +- `worker.rollupOptions`:重命名为 `worker.rolldownOptions` +- `build.commonjsOptions`:现在无操作效果 ## 总体变化 {#general-changes} -<<<<<<< HEAD -### 移除了 Sass 旧版 API 支持 {#removed-sass-legacy-api-support} - -如计划所述,Sass 旧版 API 的支持已被移除。Vite 现在仅支持现代 API。你可以移除 `css.preprocessorOptions.sass.api` 和 `css.preprocessorOptions.scss.api` 配置选项。 - ## 移除了已弃用的功能 {#removed-deprecated-features} -- `splitVendorChunkPlugin`(在 v5.2.7 中弃用) - - 该插件最初是为了方便迁移到 Vite v2.9 而提供的。 - - 如有需要,可以使用 `build.rollupOptions.output.manualChunks` 选项来控制分块行为。 -- `transformIndexHtml` 的 hook 级别 `enforce` / `transform`(在 v4.0.0 中弃用) - - 此更改是为了与 [Rollup 的对象型 hooks](https://rollupjs.org/plugin-development/#build-hooks:~:text=Instead%20of%20a%20function%2C%20hooks%20can%20also%20be%20objects.) 接口保持一致。 - - 应使用 `order` 替代 `enforce`,使用 `handler` 替代 `transform`。 -======= -## Removed deprecated features - -**_TODO: This change is not implemented yet, but will be implemented before stable release._** ->>>>>>> 9d1e98c998121f033ff1f30dbc9a68b8b6603763 +**_TODO:此更改尚未实现,但将在稳定版发布前实现。_** ## 进阶 {#advanced} -<<<<<<< HEAD 还有其他一些只影响少数用户的破坏性更改。 -- [[#19979] chore: declare version range for peer dependencies](https://github.com/vitejs/vite/pull/19979) - - 为 CSS 预处理器指定了 peerDependencies 的版本范围。 -- [[#20013] refactor: remove no-op `legacy.proxySsrExternalModules`](https://github.com/vitejs/vite/pull/20013) - - `legacy.proxySsrExternalModules` 属性自 Vite 6 起已无实际作用,现已移除。 -- [[#19985] refactor!: remove deprecated no-op type only properties](https://github.com/vitejs/vite/pull/19985) - - 以下未使用的属性现已移除:`ModuleRunnerOptions.root`、`ViteDevServer._importGlobMap`、`ResolvePluginOptions.isFromTsImporter`、`ResolvePluginOptions.getDepsOptimizer`、`ResolvePluginOptions.shouldExternalize`、`ResolvePluginOptions.ssrConfig` -- [[#19986] refactor: remove deprecated env api properties](https://github.com/vitejs/vite/pull/19986) - - 这些属性从一开始就被标记为弃用,现已移除。 -- [[#19987] refactor!: remove deprecated `HotBroadcaster` related types](https://github.com/vitejs/vite/pull/19987) - - 这些类型是作为现已弃用的 Runtime API 的一部分引入的,现已被移除:`HMRBroadcaster`、`HMRBroadcasterClient`、`ServerHMRChannel`、`HMRChannel`。 -- [[#19996] fix(ssr)!: don't access `Object` variable in ssr transformed code](https://github.com/vitejs/vite/pull/19996) - - `__vite_ssr_exportName__` 现在是模块运行时上下文中的必需字段。 -- [[#20045] fix: treat all `optimizeDeps.entries` values as globs](https://github.com/vitejs/vite/pull/20045) - - `optimizeDeps.entries` 不再接收字面量字符串路径,而是始终接收 glob 模式。 -- [[#20222] feat: apply some middlewares before `configureServer` hook](https://github.com/vitejs/vite/pull/20222), [[#20224] feat: apply some middlewares before `configurePreviewServer` hook](https://github.com/vitejs/vite/pull/20224) - - 某些中间件现在会在 `configureServer` / `configurePreviewServer` 钩子之前被应用。请注意,如果你不希望某个路由应用 [`server.cors`](../config/server-options.md#server-cors) / [`preview.cors`](../config/preview-options.md#preview-cors) 配置,请务必从响应中移除相关的请求头。 - -## 从 v5 迁移 {#migration-from-v5} - -请先查阅 Vite v6 文档中的 [从 v5 迁移指南](https://v6.vite.dev/guide/migration.html)([中文版](/guide/migration-from-v5.md)),了解如何将你的应用迁移到 Vite 6 所需的变更,然后再继续执行本页中的相关更改。 -======= -These breaking changes are expected to only affect a minority of use cases: - -- **[TODO: this will be fixed before stable release]** https://github.com/rolldown/rolldown/issues/5726 (affects nuxt, qwik) -- **[TODO: this will be fixed before stable release]** https://github.com/rolldown/rolldown/issues/3403 (affects sveltekit) -- **[TODO: this will be fixed before stable release]** Legacy chunks are emitted as an asset file instead of a chunk file due to the lack of prebuilt chunk emit feature ([rolldown#4304](https://github.com/rolldown/rolldown/issues/4034)). This means the chunk related options does not apply to legacy chunks and the manifest file will not include legacy chunks as a chunk file. -- **[TODO: this will be fixed before stable release]** resolver cache breaks minor cases in Vitest ([rolldown-vite#466](https://github.com/vitejs/rolldown-vite/issues/466), [vitest#8754](https://github.com/vitest-dev/vitest/issues/8754#issuecomment-3441115032)) -- **[TODO: this will be fixed before stable release]** The resolver does not work with yarn pnp ([rolldown-vite#324](https://github.com/vitejs/rolldown-vite/issues/324), [rolldown-vite#392](https://github.com/vitejs/rolldown-vite/issues/392)) -- **[TODO: this will be fixed before stable release]** native plugin ordering issue ([rolldown-vite#373](https://github.com/vitejs/rolldown-vite/issues/373)) -- **[TODO: this will be fixed before stable release]** `@vite-ignore` comment edge case ([rolldown-vite#426](https://github.com/vitejs/rolldown-vite/issues/426)) -- **[TODO: this will be fixed before stable release]** https://github.com/rolldown/rolldown/issues/3403 -- [Extglobs](https://github.com/micromatch/picomatch/blob/master/README.md#extglobs) are not supported yet ([rolldown-vite#365](https://github.com/vitejs/rolldown-vite/issues/365)) -- `define` does not share reference for objects: When you pass an object as a value to `define`, each variable will have a separate copy of the object. See [Oxc Transformer document](https://oxc.rs/docs/guide/usage/transformer/global-variable-replacement#define) for more details. -- `bundle` object changes (`bundle` is an object passed in `generateBundle` / `writeBundle` hooks, returned by `build` function): - - Assigning to `bundle[foo]` is not supported. This is discouraged by Rollup as well. Please use `this.emitFile()` instead. - - the reference is not shared across the hooks ([rolldown-vite#410](https://github.com/vitejs/rolldown-vite/issues/410)) - - `structuredClone(bundle)` errors with `DataCloneError: # could not be cloned`. This is not supported anymore. Please clone it with `structuredClone({ ...bundle })`. ([rolldown-vite#128](https://github.com/vitejs/rolldown-vite/issues/128)) -- All parallel hooks in Rollup works as sequential hooks. See [Rolldown's documentation](https://rolldown.rs/apis/plugin-api#sequential-hook-execution) for more details. -- `"use strict";` is not injected sometimes. See [Rolldown's documentation](https://rolldown.rs/in-depth/directives) for more details. -- Transforming to lower than ES5 with plugin-legacy is not supported ([rolldown-vite#452](https://github.com/vitejs/rolldown-vite/issues/452)) -- Passing the same browser with multiple versions of it to `build.target` option now errors: esbuild selects the latest version of it, which was probably not what you intended. -- Missing support by Rolldown: The following features are not supported by Rolldown and is no longer supported by Vite. +- **[TODO: 这将在稳定版发布前修复]** https://github.com/rolldown/rolldown/issues/5726 (affects nuxt, qwik) +- **[TODO: 这将在稳定版发布前修复]** https://github.com/rolldown/rolldown/issues/3403 (affects sveltekit) +- **[TODO: 这将在稳定版发布前修复]** 由于缺少预构建块输出功能([rolldown#4304](https://github.com/rolldown/rolldown/issues/4034)),旧版块现在作为资源文件而不是块文件输出。这意味着块相关选项不适用于旧版块,清单文件也不会将旧版块包含为块文件。 +- **[TODO: 这将在稳定版发布前修复]** 解析器缓存在 Vitest 中破坏了一些边缘情况 ([rolldown-vite#466](https://github.com/vitejs/rolldown-vite/issues/466), [vitest#8754](https://github.com/vitest-dev/vitest/issues/8754#issuecomment-3441115032)) +- **[TODO: 这将在稳定版发布前修复]** 解析器无法与 yarn pnp 配合使用 ([rolldown-vite#324](https://github.com/vitejs/rolldown-vite/issues/324), [rolldown-vite#392](https://github.com/vitejs/rolldown-vite/issues/392)) +- **[TODO: 这将在稳定版发布前修复]** 原生插件排序问题 ([rolldown-vite#373](https://github.com/vitejs/rolldown-vite/issues/373)) +- **[TODO: 这将在稳定版发布前修复]** `@vite-ignore` 注释边缘情况 ([rolldown-vite#426](https://github.com/vitejs/rolldown-vite/issues/426)) +- **[TODO: 这将在稳定版发布前修复]** https://github.com/rolldown/rolldown/issues/3403 +- [Extglobs](https://github.com/micromatch/picomatch/blob/master/README.md#extglobs) 尚未得到支持 ([rolldown-vite#365](https://github.com/vitejs/rolldown-vite/issues/365)) +- `define` 不共享对象引用:当你传递一个对象作为 `define` 的值时,每个变量都会有一个单独的对象副本。详见 [Oxc 转换器文档](https://oxc.rs/docs/guide/usage/transformer/global-variable-replacement#define)。 +- `bundle` 对象变更(`bundle` 是在 `generateBundle` / `writeBundle` 钩子中传递的对象,由 `build` 函数返回): + - 不支持赋值给 `bundle[foo]`。Rollup 也不鼓励这样做。请使用 `this.emitFile()` 代替。 + - 引用在钩子之间不共享 ([rolldown-vite#410](https://github.com/vitejs/rolldown-vite/issues/410)) + - `structuredClone(bundle)` 会出现 `DataCloneError: # could not be cloned` 错误。这不再被支持。请使用 `structuredClone({ ...bundle })` 来克隆。([rolldown-vite#128](https://github.com/vitejs/rolldown-vite/issues/128)) +- Rollup 中的所有并行钩子现在都作为串行钩子工作。详见 [Rolldown 的文档](https://rolldown.rs/apis/plugin-api#sequential-hook-execution)。 +- `"use strict";` 有时不会被注入。详见 [Rolldown 的文档](https://rolldown.rs/in-depth/directives)。 +- 使用 plugin-legacy 转换到低于 ES5 的版本不受支持 ([rolldown-vite#452](https://github.com/vitejs/rolldown-vite/issues/452)) +- 向 `build.target` 选项传递同一浏览器的多个版本现在会报错:esbuild 会选择最新的版本,这可能不是你的本意。 +- Rolldown 缺少支持:以下功能不受 Rolldown 支持,Vite 也不再支持这些功能。 - `build.rollupOptions.output.format: 'system'` ([rolldown#2387](https://github.com/rolldown/rolldown/issues/2387)) - `build.rollupOptions.output.format: 'amd'` ([rolldown#2387](https://github.com/rolldown/rolldown/issues/2528)) - - Complete support for TypeScript legacy namespace ([oxc-project/oxc#14227](https://github.com/oxc-project/oxc/issues/14227)) - - `shouldTransformCachedModule` hook ([rolldown#4389](https://github.com/rolldown/rolldown/issues/4389)) - - `resolveImportMeta` hook ([rolldown#1010](https://github.com/rolldown/rolldown/issues/1010)) - - `renderDynamicImport` hook ([rolldown#4532](https://github.com/rolldown/rolldown/issues/4532)) - - `resolveFileUrl` hook -- `parseAst` / `parseAstAsync` functions are now deprecated in favor of `parse` / `parseAsync` functions which has more features. + - 完整的 TypeScript 遗留命名空间支持 ([oxc-project/oxc#14227](https://github.com/oxc-project/oxc/issues/14227)) + - `shouldTransformCachedModule` 钩子 ([rolldown#4389](https://github.com/rolldown/rolldown/issues/4389)) + - `resolveImportMeta` 钩子 ([rolldown#1010](https://github.com/rolldown/rolldown/issues/1010)) + - `renderDynamicImport` 钩子 ([rolldown#4532](https://github.com/rolldown/rolldown/issues/4532)) + - `resolveFileUrl` 钩子 +- `parseAst` / `parseAstAsync` 函数现在已被弃用,推荐使用功能更多的 `parse` / `parseAsync` 函数。 -## Migration from v6 +## 从 v6 迁移 {#migration-from-v6} -Check the [Migration from v6 Guide](https://v7.vite.dev/guide/migration) in the Vite v7 docs first to see the needed changes to port your app to Vite 7, and then proceed with the changes on this page. ->>>>>>> 9d1e98c998121f033ff1f30dbc9a68b8b6603763 +请先查阅 Vite v7 文档中的 [从 v6 迁移指南](https://v7.vite.dev/guide/migration)([中文版](/guide/migration-from-v6.md)),了解如何将你的应用迁移到 Vite 7 所需的变更,然后再继续执行本页中的相关更改。 diff --git a/guide/performance.md b/guide/performance.md index 5a42ca94..fb826bbb 100644 --- a/guide/performance.md +++ b/guide/performance.md @@ -122,11 +122,5 @@ export default defineConfig({ 使用更原生化的工具链往往会带来更大的安装大小,因此在启动新的 Vite 项目时不是默认的。但对于较大的应用程序来说,这可能是值得的。 -<<<<<<< HEAD -- 使用 [Rolldown 而不是 Rollup 和 esbuild](./rolldown) 以获得更快的构建速度和在开发和构建之间更一致的体验。 - 尝试实验性的 [LightningCSS](https://github.com/vitejs/vite/discussions/13835) - 使用 [`@vitejs/plugin-react-swc`](https://github.com/vitejs/vite-plugin-react-swc) 代替 `@vitejs/plugin-react`。 -======= -- Try out the experimental support for [LightningCSS](https://github.com/vitejs/vite/discussions/13835) -- Use [`@vitejs/plugin-react-swc`](https://github.com/vitejs/vite-plugin-react-swc) in place of `@vitejs/plugin-react`. ->>>>>>> 9d1e98c998121f033ff1f30dbc9a68b8b6603763 diff --git a/guide/philosophy.md b/guide/philosophy.md index 6974aa00..6b55c50f 100644 --- a/guide/philosophy.md +++ b/guide/philosophy.md @@ -16,11 +16,7 @@ Vite 提供了一系列推动编写现代代码的特定功能。例如: ## 旨在高性能的实用解决方案 {#a-pragmatic-approach-to-performance} -<<<<<<< HEAD -Vite 自其诞生之初(详见:[为什么选 Vite](./why.md))就一直致力于性能优化。其开发服务器架构设计确保了随着项目规模扩大,模块热替换(HMR)仍能保持高速运行。Vite 采用类似 [esbuild](https://esbuild.github.io/) 和 [SWC](https://github.com/vitejs/vite-plugin-react/tree/main/packages/plugin-react-swc) 这样的原生工具处理复杂的任务,同时将其他部分代码保留在 JavaScript 中,以实现速度与灵活性之间的平衡。在需要时,框架插件会利用 [Babel](https://babeljs.io/) 来编译用户代码。构建阶段,Vite 当前使用的是 [Rollup](https://cn.rollupjs.org/) ,此时包体积大小以及能够接入广泛生态系统的插件比原始速度更重要。Vite 将持续内部改进和发展,在新库出现时适时采用以提升开发者体验(DX),同时保持 API 的稳定性。 -======= -Vite has been focused on performance since its [origins](./why.md). Its dev server architecture allows HMR that stays fast as projects scale. Vite is based on native tools that includes [Oxc toolchain](https://oxc.rs/) and [Rolldown](https://rolldown.rs/) to implement intensive tasks but keeps the rest of the code in JS to balance speed with flexibility. When needed, framework plugins will tap into [Babel](https://babeljs.io/) to compile user code. Thanks to Rolldown's Rollup plugin compatibility, Vite has access to a wide ecosystem of plugins. ->>>>>>> 9d1e98c998121f033ff1f30dbc9a68b8b6603763 +Vite 自其诞生之初(详见:[为什么选 Vite](./why.md))就一直致力于性能优化。其开发服务器架构设计确保了随着项目规模扩大,模块热替换(HMR)仍能保持高速运行。Vite 基于 [Oxc toolchain](https://oxc.rs/) 和 [Rolldown](https://rolldown.rs/) 这样的原生工具处理复杂的任务,同时将其他部分代码保留在 JavaScript 中,以实现速度与灵活性之间的平衡。在需要时,框架插件会利用 [Babel](https://babeljs.io/) 来编译用户代码。得益于 Rolldown 对 Rollup 插件的兼容性,Vite 能够访问广泛的插件生态系统。 ## 基于 Vite 构建框架 {#building-frameworks-on-top-of-vite} diff --git a/guide/troubleshooting.md b/guide/troubleshooting.md index aaa1a3e1..7b4e1080 100644 --- a/guide/troubleshooting.md +++ b/guide/troubleshooting.md @@ -187,11 +187,7 @@ import './Foo.js' // 应该为 './foo.js' 该错误也可能由浏览器扩展程序(如广告拦截器)阻止该请求导致。 -<<<<<<< HEAD -可以通过修改 [`build.rollupOptions.output.chunkFileNames`](../config/build-options.md#build-rollupoptions) 中的块文件名来绕过此问题,因为这些扩展程序通常会根据文件名(例如包含 `ad` 或 `track` 的文件名)来阻止请求。 -======= -It might be possible to work around by selecting a different chunk name by [`build.rolldownOptions.output.chunkFileNames`](../config/build-options.md#build-rolldownoptions), as these extensions often block requests based on file names (e.g. names containing `ad`, `track`). ->>>>>>> 9d1e98c998121f033ff1f30dbc9a68b8b6603763 +可以通过修改 [`build.rolldownOptions.output.chunkFileNames`](../config/build-options.md#build-rolldownoptions) 中的块文件名来绕过此问题,因为这些扩展程序通常会根据文件名(例如包含 `ad` 或 `track` 的文件名)来阻止请求。 ## 优化依赖 {#optimized-dependencies} diff --git a/package.json b/package.json index 8c8dce30..240a7608 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,4 @@ { -<<<<<<< HEAD "name": "vite-docs-cn", "version": "7.2.0", "description": "Vite.js documentation Chinese translation.", @@ -39,28 +38,4 @@ "gitHooks": { "commit-msg": "node scripts/verifyCommit.js" } -======= - "name": "@vitejs/monorepo-docs", - "private": true, - "type": "module", - "scripts": { - "typecheck": "vue-tsc", - "docs": "vitepress dev", - "docs-build": "vitepress build", - "docs-serve": "vitepress serve" - }, - "devDependencies": { - "@shikijs/vitepress-twoslash": "^3.17.0", - "@types/express": "^5.0.5", - "feed": "^5.1.0", - "gsap": "^3.13.0", - "markdown-it-image-size": "^15.0.1", - "oxc-minify": "^0.101.0", - "vitepress": "^2.0.0-alpha.15", - "vitepress-plugin-group-icons": "^1.6.5", - "vitepress-plugin-llms": "^1.9.3", - "vue": "^3.5.25", - "vue-tsc": "^3.1.5" - } ->>>>>>> 9d1e98c998121f033ff1f30dbc9a68b8b6603763 } diff --git a/plugins/index.md b/plugins/index.md index b8b7234f..eb1b24ad 100644 --- a/plugins/index.md +++ b/plugins/index.md @@ -18,19 +18,11 @@ Vite 旨在为常见的 web 开发工作提供开箱即用的支持。在搜索 ### [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/tree/main/packages/plugin-react) {#vitejs-plugin-react} -<<<<<<< HEAD -使用 esbuild 和 Babel,以较小的软件包占用空间和使用 Babel 转换管道的灵活性实现快速 HMR。如果没有额外的 Babel 插件,在构建过程中只能使用 esbuild。 +使用 [Oxc 转换器](https://oxc.rs/docs/guide/usage/transformer) and [Babel](https://babeljs.io/),以较小的软件包占用空间和使用 Babel 转换管道的灵活性实现快速 HMR。如果没有额外的 Babel 插件,在构建过程中只能使用 Oxc 转换器 ### [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react/tree/main/packages/plugin-react-swc) -在开发时会将 Babel 替换为 SWC。在生产环境构建期间,若使用了插件则会使用 SWC+esbuild,若没有使用插件则仅会用到 esbuild。对不需要非标准 React 扩展的大型项目,冷启动和模块热替换(HMR)将会有显著提升。 -======= -Uses [Oxc Transformer](https://oxc.rs/docs/guide/usage/transformer) and [Babel](https://babeljs.io/), achieving fast HMR with a small package footprint and the flexibility of being able to use the Babel transform pipeline. Without additional Babel plugins, only Oxc Transformer is used. - -### [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react/tree/main/packages/plugin-react-swc) - -Replaces Babel with [SWC](https://swc.rs/) during development. During production builds, SWC+Oxc Transformer are used when using plugins, and Oxc Transformer only otherwise. For big projects that requires custom plugins, cold start and Hot Module Replacement (HMR) can be significantly faster, if the plugin is also available for SWC. ->>>>>>> 9d1e98c998121f033ff1f30dbc9a68b8b6603763 +在开发时会将 Babel 替换为 [SWC](https://swc.rs/)。在生产环境构建期间,若使用了插件则会使用 SWC+Oxc 转换器,若没有使用插件则仅会用到 Oxc 转换器。对于需要自定义插件的大型项目,如果该插件在 SWC 中也可用,冷启动和模块热替换(HMR)将会有显著提升。 ### [@vitejs/plugin-rsc](https://github.com/vitejs/vite-plugin-react/tree/main/packages/plugin-rsc) @@ -50,16 +42,12 @@ npm create vite@latest -- --template rsc 查看 [awesome-vite](https://github.com/vitejs/awesome-vite#plugins) - 你也可以通过 PR 的方式将你的插件添加到此列表中。 -<<<<<<< HEAD -## Rollup 插件 {#rollup-plugins} -======= -## Rolldown Builtin Plugins +## Rolldown Builtin Plugins {#rolldown-builtin-plugins} -Vite uses [Rolldown](https://rolldown.rs/) under the hood and it provides a few builtin plugins for common use cases. +Vite 在底层使用 [Rolldown](https://rolldown.rs/),它为常见用例提供了一些内置插件。 -Read the [Rolldown Builtin Plugins section](https://rolldown.rs/builtin-plugins/) for more information. +阅读 [Rolldown 内置插件章节](https://rolldown.rs/builtin-plugins/) 了解更多信息。 -## Rollup Plugins ->>>>>>> 9d1e98c998121f033ff1f30dbc9a68b8b6603763 +## Rollup 插件 {#rollup-plugins} [Vite 插件](../guide/api-plugin) 是 Rollup 插件接口的一种扩展。查看 [Rollup 插件兼容性章节](../guide/api-plugin#rollup-plugin-compatibility) 获取更多信息。 diff --git a/releases.md b/releases.md index 0f0c1714..60605462 100644 --- a/releases.md +++ b/releases.md @@ -43,15 +43,7 @@ Vite 没有固定的发布周期。 - 偶尔我们可能需要采用仅在更新版本的 TypeScript 中可用的功能,这会提高最低要求的 TypeScript 版本。 - 如果你使用 TypeScript,可以使用一个锁定当前次要版本的 semver 范围,并在 Vite 发布新次要版本时手动升级。 -<<<<<<< HEAD -### esbuild - -[esbuild](https://esbuild.github.io/) 目前是 pre-1.0.0,有时它会有主要版本更新,我们可能需要包含这些变化以使用新的功能和性能改进,并可能会在 Vite 次要版本中提升 esbuild 的版本。 - ### Node.js 非 LTS 版本 {#node-js-non-lts-versions} -======= -### Node.js non-LTS versions ->>>>>>> 9d1e98c998121f033ff1f30dbc9a68b8b6603763 非 LTS 的 Node.js 版本(奇数版本)不在 Vite 的 CI 测试范围内,但在其 [生命周期终止](https://endoflife.date/nodejs) 之前应该仍然可以工作。 From bb62f465ac93b8a01bdcae219ecc59efa98b8ada Mon Sep 17 00:00:00 2001 From: Kylin <1159469891@qq.com> Date: Thu, 4 Dec 2025 21:01:09 +0800 Subject: [PATCH 24/25] docs: update announcing-vite8-beta.md --- blog/announcing-vite8-beta.md | 106 +++++++++++++++++----------------- 1 file changed, 53 insertions(+), 53 deletions(-) diff --git a/blog/announcing-vite8-beta.md b/blog/announcing-vite8-beta.md index 007167fb..57172287 100644 --- a/blog/announcing-vite8-beta.md +++ b/blog/announcing-vite8-beta.md @@ -25,71 +25,71 @@ head: content: summary_large_image --- -# Vite 8 Beta: The Rolldown-powered Vite +# Vite 8 Beta:由 Rolldown 驱动的 Vite {#vite-8-beta} -_December 3, 2025_ +_2025年12月3日_ ![Vite 8 Beta Announcement Cover Image](/og-image-announcing-vite8-beta.webp) -TL;DR: The first beta of Vite 8, powered by [Rolldown](https://rolldown.rs/), is now available. Vite 8 ships significantly faster production builds and unlocks future improvement possibilities. You can try the new release by upgrading `vite` to version `8.0.0-beta.0` and reading the [migration guide](/guide/migration). +摘要:由 [Rolldown](https://rolldown.rs/) 驱动的 Vite 8 首个测试版现已发布。Vite 8 提供了显著更快的生产构建速度,并开启了未来的改进可能性。你可以通过将 `vite` 升级到 `8.0.0-beta.0` 版本并阅读[迁移指南](/guide/migration)来试用这个新版本。 --- -We're excited to release the first beta of Vite 8. This release unifies the underlying toolchain and brings better consistent behaviors, alongside significant build performance improvements. Vite now uses [Rolldown](https://rolldown.rs/) as its bundler, replacing the previous combination of esbuild and Rollup. +我们很高兴发布 Vite 8 的首个测试版。这个版本统一了底层工具链,带来了更好的一致性行为,以及显著的构建性能提升。Vite 现在使用 [Rolldown](https://rolldown.rs/) 作为其打包器,取代了之前 esbuild 和 Rollup 的组合。 -## A new bundler for the web +## 面向 Web 的全新打包器 {#a-new-bundler-for-the-web} -Vite previously relied on two bundlers to meet differing requirements for development and production builds: +Vite 之前依赖两个打包器来满足开发和生产构建的不同需求: -1. esbuild for fast compilation during development -2. Rollup for bundling, chunking, and optimizing production builds +1. 开发期间使用 esbuild 进行快速编译 +2. 生产构建使用 Rollup 进行打包、分块和优化 -This approach lets Vite focus on developer experience and orchestration instead of reinventing parsing and bundling. However, maintaining two separate bundling pipelines introduced inconsistencies: separate transformation pipelines, different plugin systems and a growing amount of glue code to keep bundling behavior aligned between development and production. +这种方法让 Vite 能够专注于开发者体验和协调,而无需重新发明解析和打包功能。然而,维护两个独立的打包流水线引入了不一致性:独立的转换流水线、不同的插件系统,以及越来越多的粘合代码来保持开发和生产之间打包行为的一致性。 -To solve this, [VoidZero team](https://voidzero.dev) has built **Rolldown**, the next-generation bundler with the goal to be used in Vite. It is designed for: +为了解决这个问题,[VoidZero 团队](https://voidzero.dev) 构建了 **Rolldown**,这是一个下一代打包器,目标是在 Vite 中使用。它的设计特点包括: -- **Performance**: Rolldown is written in Rust and operates at native speed. It matches esbuild’s performance level and is [**10–30× faster than Rollup**](https://github.com/rolldown/benchmarks). -- **Compatibility**: Rolldown supports the same plugin API as Rollup and Vite. Most Vite plugins work out of the box with Vite 8. -- **More Features**: Rolldown unlocks more advanced features for Vite, including full bundle mode, more flexible chunk split control, module-level persistent cache, Module Federation, and more. +- **性能**:Rolldown 使用 Rust 编写,以原生速度运行。它的性能水平与 esbuild 相匹配,并且比 Rollup [快 10-30 倍](https://github.com/rolldown/benchmarks)。 +- **兼容性**:Rolldown 支持与 Rollup 和 Vite 相同的插件 API。大多数 Vite 插件在 Vite 8 中可以开箱即用。 +- **更多功能**:Rolldown 为 Vite 解锁了更多高级功能,包括完整打包模式、更灵活的分块控制、模块级持久缓存、模块联邦等。 -## Unifying the toolchain +## 统一工具链 {#unifying-the-toolchain} -The impact of Vite’s bundler swap goes beyond performance. Bundlers leverage parsers, resolvers, transformers, and minifiers. Rolldown uses Oxc, another project led by VoidZero, for these purposes. +Vite 打包器更换的影响超越了性能范畴。打包器利用解析器、解析器、转换器和压缩器。Rolldown 为此目的使用了由 VoidZero 团队主导的另一个项目 Oxc。 -**That makes Vite the entry point to an end-to-end toolchain maintained by the same team: The build tool (Vite), the bundler (Rolldown) and the compiler (Oxc).** +**这使得 Vite 成为由同一团队维护的端到端工具链的入口:构建工具(Vite)、打包器(Rolldown)和编译器(Oxc)。** -This alignment ensures behavior consistency across the stack, and allows us to rapidly adopt and align with new language specifications as JavaScript continues to evolve. It also unlocks a wide range of improvements that previously couldn’t be done by Vite alone. For example, we can leverage Oxc’s semantic analysis to perform better tree-shaking in Rolldown. +这种一致性确保了整个堆栈中的行为一致性,并且随着 JavaScript 的不断发展,使我们能够快速采用并与新的语言规范保持一致。这也解锁了以前仅凭 Vite 无法实现的广泛改进。例如,我们可以利用 Oxc 的语义分析在 Rolldown 中实现更好的 tree-shaking。 -## How Vite migrated to Rolldown +## Vite 如何迁移到 Rolldown {#how-vite-migrated-to-rolldown} -The migration to a Rolldown-powered Vite is a foundational change. Therefore, our team took deliberate steps to implement it without sacrificing stability or ecosystem compatibility. +迁移到由 Rolldown 驱动的 Vite 是一项基础性变革。因此,我们的团队采取了深思熟虑的步骤来实施这一变革,同时不牺牲稳定性和生态系统兼容性。 -First, a separate `rolldown-vite` package was [released as a technical preview](https://voidzero.dev/posts/announcing-rolldown-vite). This allowed us to work with early adopters without affecting the stable version of Vite. Early adopters benefited from Rolldown’s performance gains while providing valuable feedback. Highlights: +首先,我们发布了独立的 `rolldown-vite` 包作为[技术预览版](https://voidzero.dev/posts/announcing-rolldown-vite)。这让我们能够在不影响 Vite 稳定版本的情况下与早期采用者合作。早期采用者从 Rolldown 的性能提升中受益,同时提供了宝贵的反馈。亮点包括: -- Linear's production build times were reduced from 46s to 6s -- Mercedes-Benz.io cut their build time down by up to 38% -- Beehiiv reduced their build time by 64% +- Linear 的生产构建时间从 46 秒减少到 6 秒 +- Mercedes-Benz.io 将构建时间减少了高达 38% +- Beehiiv 将构建时间减少了 64% -Next, we set up a test suite for validating key Vite plugins against `rolldown-vite`. This CI job helped us catch regressions and compatibility issues early, especially for frameworks and meta-frameworks such as SvelteKit, react-router and Storybook. +接下来,我们建立了一套测试套件,用于验证关键的 Vite 插件与 `rolldown-vite` 的兼容性。这项 CI 任务帮助我们及早发现回归问题和兼容性问题,特别是对于 SvelteKit、react-router 和 Storybook 等框架和元框架。 -Lastly, we built a compatibility layer to help migrate developers from Rollup and esbuild options to the corresponding Rolldown options. +最后,我们构建了一个兼容层,帮助开发者从 Rollup 和 esbuild 选项迁移到相应的 Rolldown 选项。 -As a result, there is a smooth migration path to Vite 8 for everyone. +因此,每个人都能顺利迁移到 Vite 8。 -## Migrating to Vite 8 Beta +## 迁移到 Vite 8 Beta {#migrating-to-vite-8-beta} -Since Vite 8 touches the core build behavior, we focused on keeping the configuration API and plugin hooks unchanged. We created a [migration guide](/guide/migration) to help you upgrade. +由于 Vite 8 涉及核心构建行为,我们专注于保持配置 API 和插件钩子不变。我们创建了[迁移指南](/guide/migration)来帮助您升级。 -There are two available upgrade paths: +有两种可用的升级路径: -1. **Direct Upgrade:** Update `vite` in `package.json` and run the usual dev and build commands. -2. **Gradual Migration:** Migrate from Vite 7 to the `rolldown-vite` package, and then to Vite 8. This allows you to identify incompatibilities or issues isolated to Rolldown without other changes to Vite. (Recommended for larger or complex projects) +1. **直接升级**:更新 `package.json` 并运行常规的开发和构建命令。 +2. **渐进式迁移**:从 Vite 7 迁移到 `rolldown-vite` 包,然后再到 Vite 8。这样您可以识别出与 Rolldown 相关的不兼容性或问题,而不会对 Vite 造成其他更改。(推荐用于较大或复杂的项目) > [!IMPORTANT] -> If you are relying on specific Rollup or esbuild options, you might need to make some adjustments to your Vite config. Please refer to the [migration guide](/guide/migration) for detailed instructions and examples. -> As with all non-stable, major releases, thorough testing is recommended after upgrading to ensure everything works as expected. Please make sure to report any [issues](https://github.com/vitejs/rolldown-vite/issues). +> 如果你依赖特定的 Rollup 或 esbuild 选项,你可能需要对 Vite 配置进行一些调整。请参考[迁移指南](/guide/migration)获取详细的说明和示例。 +> 与所有非稳定的主版本一样,升级后建议进行全面测试以确保一切按预期工作。请务必报告任何[问题](https://github.com/vitejs/rolldown-vite/issues)。 -If you use a framework or tool that uses Vite as dependency, for example Astro, Nuxt, or Vitest, you have to override the `vite` dependency in your `package.json`, which works slightly different depending on your package manager: +如果你使用的框架或工具将 Vite 作为依赖项,例如 Astro、Nuxt 或 Vitest,你必须在 `package.json` 中覆盖 `vite` 依赖项,这根据你使用的包管理器略有不同: :::code-group @@ -129,35 +129,35 @@ If you use a framework or tool that uses Vite as dependency, for example Astro, ::: -After adding these overrides, reinstall your dependencies and start your development server or build your project as usual. +添加这些覆盖后,重新安装你的依赖项,然后像往常一样启动开发服务器或构建你的项目。 -## Additional Features in Vite 8 +## Vite 8 的附加功能 {#additional-features-in-vite-8} -In addition to shipping with Rolldown, Vite 8 comes with: +除了搭载 Rolldown 之外,Vite 8 还带来了以下功能: -- **Built-in tsconfig `paths` support:** Developers can enable it by setting [`resolve.tsconfigPaths`](/config/shared-options.md#resolve-tsconfigpaths) to `true`. This feature has a small performance cost and is not enabled by default. -- **`emitDecoratorMetadata` support:** Vite 8 now has built-in automatic support for TypeScript's [`emitDecoratorMetadata` option](https://www.typescriptlang.org/tsconfig/#emitDecoratorMetadata). See the [Features](/guide/features.md#emitdecoratormetadata) page for more details. +- **内置 tsconfig `paths` 支持**:开发者可以通过将 [`resolve.tsconfigPaths`](/config/shared-options.md#resolve-tsconfigpaths) 设置为 `true` 来启用此功能。此功能会带来轻微的性能成本,默认情况下未启用。 +- **`emitDecoratorMetadata` 支持**:Vite 8 现在内置了对 TypeScript [`emitDecoratorMetadata` 选项](https://www.typescriptlang.org/tsconfig/#emitDecoratorMetadata)的自动支持。更多详情请参见[功能](/guide/features.md#emitdecoratormetadata)页面。 -## Looking Ahead +## 展望未来 {#looking-ahead} -Speed has always been a defining feature for Vite. The integration with Rolldown and, by extension, Oxc means JavaScript developers benefit from Rust’s speed. Upgrading to Vite 8 should result in performance gains simply from using Rust. +速度一直是 Vite 的标志性特性。与 Rolldown 的集成,以及延伸至 Oxc,意味着 JavaScript 开发者可以从 Rust 的速度中获益。升级到 Vite 8 应该会仅仅因为使用 Rust 而带来性能提升。 -We are also excited to ship Vite’s Full Bundle Mode soon, which drastically improves Vite’s dev server speed for large projects. Preliminary results show 3× faster dev server startup, 40% faster full reloads, and 10× fewer network requests. +我们也即将推出 Vite 的完整打包模式,这将大幅提高大型项目的开发服务器速度。初步结果显示,开发服务器启动速度快了 3 倍,完全重新加载快了 40%,网络请求减少了 10 倍。 -Another defining Vite feature is the plugin ecosystem. We want JavaScript developers to continue extending and customizing Vite in JavaScript, the language they’re familiar with, while benefiting from Rust’s performance gains. Our team is collaborating with VoidZero team to accelerate JavaScript plugin usage in these Rust-based systems. +另一个标志性的 Vite 特性是插件生态系统。我们希望 JavaScript 开发者能够继续使用他们熟悉的 JavaScript 语言来扩展和定制 Vite,同时从 Rust 的性能提升中受益。我们的团队正在与 VoidZero 团队合作,以加速这些基于 Rust 系统中的 JavaScript 插件使用。 -Upcoming optimizations that are currently experimental: +目前正在试验的即将到来的优化包括: -- [**Raw AST transfer**](https://github.com/oxc-project/oxc/issues/2409). Allow JavaScript plugins to access the Rust-produced AST with minimal overhead. -- [**Native MagicString transforms**](https://rolldown.rs/in-depth/native-magic-string#native-magicstring). Simple custom transforms with logic in JavaScript but computation in Rust. +- [**原始 AST 传输**](https://github.com/oxc-project/oxc/issues/2409)。允许 JavaScript 插件以最小的开销访问 Rust 生成的 AST。 +- [**原生 MagicString 转换**](https://rolldown.rs/in-depth/native-magic-string#native-magicstring)。简单的自定义转换,逻辑在 JavaScript 中但计算在 Rust 中进行。 -## **Connect with us** +## **联系我们** {#connect-with-us} -If you've tried Vite 8 beta, then we'd love to hear your feedback! Please report any issues or share your experience: +如果你已经尝试过 Vite 8 测试版,我们很希望听到你的反馈!请报告任何问题或分享你的使用体验: -- **Discord**: Join our [community server](https://chat.vite.dev/) for real-time discussions -- **GitHub**: Share feedback on [GitHub discussions](https://github.com/vitejs/vite/discussions) -- **Issues**: Report issues on the [rolldown-vite repository](https://github.com/vitejs/rolldown-vite/issues) for bugs and regressions -- **Wins**: Share your improved build times in the [rolldown-vite-perf-wins repository](https://github.com/vitejs/rolldown-vite-perf-wins) +- **Discord**:加入我们的[社区服务器](https://chat.vite.dev/)进行实时讨论 +- **GitHub**:在 [GitHub 讨论区](https://github.com/vitejs/vite/discussions)分享反馈 +- **问题报告**:在 [rolldown-vite 仓库](https://github.com/vitejs/rolldown-vite/issues)报告 bug 和回归问题 +- **成果分享**:在 [rolldown-vite-perf-wins 仓库](https://github.com/vitejs/rolldown-vite-perf-wins)分享你改善的构建时间 -We appreciate all reports and reproduction cases. They help guide us towards the release of a stable 8.0.0. +我们感谢所有的报告和复现案例。它们帮助我们朝着发布稳定版 8.0.0 的目标前进。 From 5ae61275f7d668dbe87eaaaa520eb909b874c1e1 Mon Sep 17 00:00:00 2001 From: Kylin <1159469891@qq.com> Date: Thu, 4 Dec 2025 21:06:20 +0800 Subject: [PATCH 25/25] docs: update content --- config/shared-options.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/config/shared-options.md b/config/shared-options.md index b7fcfab2..9554a29a 100644 --- a/config/shared-options.md +++ b/config/shared-options.md @@ -168,10 +168,10 @@ declare const __APP_VERSION__: string ## resolve.tsconfigPaths -- **Type:** `boolean` -- **Default:** `false` +- **类型:** `boolean` +- **默认:** `false` -Enables the tsconfig paths resolution feature. `paths` option in `tsconfig.json` will be used to resolve imports. See [Features](/guide/features.md#paths) for more details. +启用 tsconfig 路径解析功能。[tsconfig.json](file:///Users/liuxin/Project/开源/vite-docs-cn/tsconfig.json) 中的 `paths` 选项将用于解析导入。更多详情请参见[功能](/guide/features.md#paths)。 ## html.cspNonce