From 3960cfcace6650c94bf1ef4d4dd9f7a9e4d98ac7 Mon Sep 17 00:00:00 2001 From: Tee Ming Chew Date: Fri, 28 Aug 2026 16:45:19 +0800 Subject: [PATCH 1/8] fix: use command Vite instance for runner checks Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> --- packages/kit/src/exports/vite/index.js | 11 ++--------- packages/kit/src/runner.js | 2 +- packages/kit/types/index.d.ts | 2 +- 3 files changed, 4 insertions(+), 11 deletions(-) diff --git a/packages/kit/src/exports/vite/index.js b/packages/kit/src/exports/vite/index.js index f46915e1068e..a6c009ade5d0 100644 --- a/packages/kit/src/exports/vite/index.js +++ b/packages/kit/src/exports/vite/index.js @@ -7,6 +7,7 @@ import fs from 'node:fs'; import path from 'node:path'; import process from 'node:process'; import { styleText } from 'node:util'; +import * as vite from 'vite'; import { resolve_entry } from '../../utils/filesystem.js'; import { posixify } from '../../utils/os.js'; @@ -237,9 +238,6 @@ function resolve_root(vite_config) { * @return {Plugin[]} */ function kit({ svelte_config }) { - /** @type {typeof import('vite')} */ - let vite; - /** * The posix-ified root of the project based on the Vite configuration. * @type {string} @@ -344,8 +342,6 @@ function kit({ svelte_config }) { service_worker_entry_file = resolve_entry(kit.files.serviceWorker); service_worker_entry_file &&= posixify(service_worker_entry_file); - vite = await import_peer('vite', root); - normalized_aliases = get_import_aliases(root, vite.normalizePath.bind(vite)); // Add `#`-prefixed import keys to the enforced config so users are warned @@ -645,10 +641,7 @@ function kit({ svelte_config }) { plugin_remote_guard(svelte_config), plugin_remote( svelte_config, - () => ({ - root, - vite - }), + () => ({ root, vite }), () => build_metadata, (metadata) => { remote_metadata = metadata; diff --git a/packages/kit/src/runner.js b/packages/kit/src/runner.js index 6c8791594de6..8b6f1ee2211a 100644 --- a/packages/kit/src/runner.js +++ b/packages/kit/src/runner.js @@ -1,7 +1,7 @@ /** @import { ViteDevServer } from 'vite' */ /** - * @param {typeof import('vite')} vite the peer resolved vite module + * @param {typeof import('vite')} vite the vite module that created the server * @param {ViteDevServer} server */ export function get_runner(vite, server) { diff --git a/packages/kit/types/index.d.ts b/packages/kit/types/index.d.ts index 6ad1b0c12309..cb4982e739d2 100644 --- a/packages/kit/types/index.d.ts +++ b/packages/kit/types/index.d.ts @@ -1556,7 +1556,7 @@ declare module '@sveltejs/kit/params' { declare module '@sveltejs/kit/vite' { import type { Adapter } from '@sveltejs/kit'; import type { Options } from '@sveltejs/vite-plugin-svelte'; - import type { Plugin } from 'vite'; + import * as vite from 'vite'; // this indirection helps make the docs look pretty type VitePluginSvelteOptions = Omit; type VitePluginSvelteOptionsExperimental = Options['experimental']; From eac5f0cec4e0b9f3577562df132b11d84a36521f Mon Sep 17 00:00:00 2001 From: Tee Ming Chew Date: Fri, 28 Aug 2026 16:52:11 +0800 Subject: [PATCH 2/8] remove async --- packages/kit/src/exports/vite/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/kit/src/exports/vite/index.js b/packages/kit/src/exports/vite/index.js index a6c009ade5d0..8c44dae3f70d 100644 --- a/packages/kit/src/exports/vite/index.js +++ b/packages/kit/src/exports/vite/index.js @@ -328,7 +328,7 @@ function kit({ svelte_config }) { */ config: { order: 'pre', - async handler(config, config_env) { + handler(config, config_env) { initial_config = config; is_build = config_env.command === 'build'; From 4e6f8446c6ed2313ae880c7e0bc6f0d405629498 Mon Sep 17 00:00:00 2001 From: Tee Ming Chew Date: Fri, 28 Aug 2026 16:56:51 +0800 Subject: [PATCH 3/8] fix types --- packages/kit/src/exports/vite/index.js | 8 ++++---- packages/kit/types/index.d.ts | 3 +-- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/packages/kit/src/exports/vite/index.js b/packages/kit/src/exports/vite/index.js index 8c44dae3f70d..47b1f9bfcf2d 100644 --- a/packages/kit/src/exports/vite/index.js +++ b/packages/kit/src/exports/vite/index.js @@ -2,7 +2,7 @@ /** @import { Options } from '@sveltejs/vite-plugin-svelte' */ /** @import { PreprocessorGroup } from 'svelte/compiler' */ /** @import { ManifestData, RemoteChunk, ServerMetadata, ValidatedConfig } from 'types' */ -/** @import { CorsOptions, Plugin, ResolvedConfig, Rolldown, UserConfig } from 'vite' */ +/** @import { CorsOptions, ResolvedConfig, Rolldown, UserConfig } from 'vite' */ import fs from 'node:fs'; import path from 'node:path'; import process from 'node:process'; @@ -174,7 +174,7 @@ let vite_plugin_svelte; * > Prior to SvelteKit 3, config lived in a `svelte.config.js` file, which is no longer supported. The ability to configure SvelteKit via `vite.config.js` was added in version 2.62. * * @param {import('./public.js').Config} [config] - * @returns {Promise} + * @returns {Promise} */ export async function sveltekit(config) { const cwd = process.cwd(); @@ -274,7 +274,7 @@ function kit({ svelte_config }) { /** @type {string} name for `globalThis.__sveltekit_xxx` */ let kit_global; - /** @type {Plugin} */ + /** @type {import('vite').Plugin} */ const plugin_resolve_root = { name: 'vite-plugin-sveltekit-resolve-root', // make sure it runs first @@ -295,7 +295,7 @@ function kit({ svelte_config }) { } }; - /** @type {Plugin} */ + /** @type {import('vite').Plugin} */ const plugin_setup = { name: 'vite-plugin-sveltekit-setup', api: { diff --git a/packages/kit/types/index.d.ts b/packages/kit/types/index.d.ts index cb4982e739d2..416c84babb86 100644 --- a/packages/kit/types/index.d.ts +++ b/packages/kit/types/index.d.ts @@ -1556,7 +1556,6 @@ declare module '@sveltejs/kit/params' { declare module '@sveltejs/kit/vite' { import type { Adapter } from '@sveltejs/kit'; import type { Options } from '@sveltejs/vite-plugin-svelte'; - import * as vite from 'vite'; // this indirection helps make the docs look pretty type VitePluginSvelteOptions = Omit; type VitePluginSvelteOptionsExperimental = Options['experimental']; @@ -2166,7 +2165,7 @@ declare module '@sveltejs/kit/vite' { * > Prior to SvelteKit 3, config lived in a `svelte.config.js` file, which is no longer supported. The ability to configure SvelteKit via `vite.config.js` was added in version 2.62. * * */ - export function sveltekit(config?: Config): Promise; + export function sveltekit(config?: Config): Promise; // Based on https://github.com/josh-hemphill/csp-typed-directives/blob/latest/src/csp.types.ts // // MIT License From 946515da793cd254b279b80c0683141a85187ea7 Mon Sep 17 00:00:00 2001 From: Tee Ming Chew Date: Tue, 1 Sep 2026 08:13:19 +0800 Subject: [PATCH 4/8] Update runner.js --- packages/kit/src/runner.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/kit/src/runner.js b/packages/kit/src/runner.js index 8b6f1ee2211a..d9c01c028250 100644 --- a/packages/kit/src/runner.js +++ b/packages/kit/src/runner.js @@ -1,8 +1,8 @@ -/** @import { ViteDevServer } from 'vite' */ +/** @import * as vite from 'vite' */ /** - * @param {typeof import('vite')} vite the vite module that created the server - * @param {ViteDevServer} server + * @param {typeof vite} vite the vite module that created the server + * @param {vite.ViteDevServer} server */ export function get_runner(vite, server) { // `isRunnableDevEnvironment` does an `instanceof` check and will fail if From 8485857a0c585ad420d9f672dd7d3b7b44b0e08b Mon Sep 17 00:00:00 2001 From: Tee Ming Chew Date: Tue, 1 Sep 2026 08:16:41 +0800 Subject: [PATCH 5/8] import statement --- packages/kit/src/exports/vite/index.js | 10 +++++----- packages/kit/types/index.d.ts | 3 ++- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/packages/kit/src/exports/vite/index.js b/packages/kit/src/exports/vite/index.js index 47b1f9bfcf2d..2cafd83df3e7 100644 --- a/packages/kit/src/exports/vite/index.js +++ b/packages/kit/src/exports/vite/index.js @@ -1,8 +1,8 @@ /** @import { EnvVarConfig } from '@sveltejs/kit/env' */ /** @import { Options } from '@sveltejs/vite-plugin-svelte' */ /** @import { PreprocessorGroup } from 'svelte/compiler' */ -/** @import { ManifestData, RemoteChunk, ServerMetadata, ValidatedConfig } from 'types' */ -/** @import { CorsOptions, ResolvedConfig, Rolldown, UserConfig } from 'vite' */ +/** @import { ManifestData, RemoteChunk, ServerMetadata, ValidatedConfig } from 'types' */ +/** @import { CorsOptions, Plugin, ResolvedConfig, Rolldown, UserConfig } from 'vite' */ import fs from 'node:fs'; import path from 'node:path'; import process from 'node:process'; @@ -174,7 +174,7 @@ let vite_plugin_svelte; * > Prior to SvelteKit 3, config lived in a `svelte.config.js` file, which is no longer supported. The ability to configure SvelteKit via `vite.config.js` was added in version 2.62. * * @param {import('./public.js').Config} [config] - * @returns {Promise} + * @returns {Promise} */ export async function sveltekit(config) { const cwd = process.cwd(); @@ -274,7 +274,7 @@ function kit({ svelte_config }) { /** @type {string} name for `globalThis.__sveltekit_xxx` */ let kit_global; - /** @type {import('vite').Plugin} */ + /** @type {Plugin} */ const plugin_resolve_root = { name: 'vite-plugin-sveltekit-resolve-root', // make sure it runs first @@ -295,7 +295,7 @@ function kit({ svelte_config }) { } }; - /** @type {import('vite').Plugin} */ + /** @type {Plugin} */ const plugin_setup = { name: 'vite-plugin-sveltekit-setup', api: { diff --git a/packages/kit/types/index.d.ts b/packages/kit/types/index.d.ts index 416c84babb86..cb4982e739d2 100644 --- a/packages/kit/types/index.d.ts +++ b/packages/kit/types/index.d.ts @@ -1556,6 +1556,7 @@ declare module '@sveltejs/kit/params' { declare module '@sveltejs/kit/vite' { import type { Adapter } from '@sveltejs/kit'; import type { Options } from '@sveltejs/vite-plugin-svelte'; + import * as vite from 'vite'; // this indirection helps make the docs look pretty type VitePluginSvelteOptions = Omit; type VitePluginSvelteOptionsExperimental = Options['experimental']; @@ -2165,7 +2166,7 @@ declare module '@sveltejs/kit/vite' { * > Prior to SvelteKit 3, config lived in a `svelte.config.js` file, which is no longer supported. The ability to configure SvelteKit via `vite.config.js` was added in version 2.62. * * */ - export function sveltekit(config?: Config): Promise; + export function sveltekit(config?: Config): Promise; // Based on https://github.com/josh-hemphill/csp-typed-directives/blob/latest/src/csp.types.ts // // MIT License From d0152a07c6d7ad51e310e1f3d1b85e4fd1818120 Mon Sep 17 00:00:00 2001 From: Tee Ming Chew Date: Tue, 1 Sep 2026 08:25:12 +0800 Subject: [PATCH 6/8] Update runner.js --- packages/kit/src/runner.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/kit/src/runner.js b/packages/kit/src/runner.js index d9c01c028250..4acd20384cc6 100644 --- a/packages/kit/src/runner.js +++ b/packages/kit/src/runner.js @@ -1,8 +1,8 @@ -/** @import * as vite from 'vite' */ +/** @import * as vite_types from 'vite' */ /** - * @param {typeof vite} vite the vite module that created the server - * @param {vite.ViteDevServer} server + * @param {typeof vite_types} vite the vite module that created the server + * @param {vite_types.ViteDevServer} server */ export function get_runner(vite, server) { // `isRunnableDevEnvironment` does an `instanceof` check and will fail if From 77bee6c88f413f5271237ac433b3352544f28dec Mon Sep 17 00:00:00 2001 From: Tee Ming Chew Date: Tue, 1 Sep 2026 08:27:58 +0800 Subject: [PATCH 7/8] Update runner.js --- packages/kit/src/runner.js | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/packages/kit/src/runner.js b/packages/kit/src/runner.js index 4acd20384cc6..aecbce46ab1b 100644 --- a/packages/kit/src/runner.js +++ b/packages/kit/src/runner.js @@ -1,13 +1,14 @@ -/** @import * as vite_types from 'vite' */ +/** @import * as vite from 'vite' */ +/** @import { ViteDevServer } from 'vite' */ /** - * @param {typeof vite_types} vite the vite module that created the server - * @param {vite_types.ViteDevServer} server + * @param {typeof vite} vite_mod the vite module that created the server + * @param {ViteDevServer} server */ -export function get_runner(vite, server) { +export function get_runner({ isRunnableDevEnvironment }, server) { // `isRunnableDevEnvironment` does an `instanceof` check and will fail if // we're using different instances of Vite - if (!vite.isRunnableDevEnvironment(server.environments.ssr)) { + if (!isRunnableDevEnvironment(server.environments.ssr)) { throw new Error('The configured Vite SSR environment must be a RunnableDevEnvironment'); } From 82d2454fc48faed4f6c400b49cc79da7ea0520af Mon Sep 17 00:00:00 2001 From: Tee Ming Chew Date: Tue, 1 Sep 2026 08:28:59 +0800 Subject: [PATCH 8/8] Update runner.js --- packages/kit/src/runner.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/kit/src/runner.js b/packages/kit/src/runner.js index aecbce46ab1b..e166f9d7205f 100644 --- a/packages/kit/src/runner.js +++ b/packages/kit/src/runner.js @@ -2,7 +2,7 @@ /** @import { ViteDevServer } from 'vite' */ /** - * @param {typeof vite} vite_mod the vite module that created the server + * @param {typeof vite} vite the vite module that created the server * @param {ViteDevServer} server */ export function get_runner({ isRunnableDevEnvironment }, server) {