diff --git a/.changeset/vite-8-minimum.md b/.changeset/vite-8-minimum.md
new file mode 100644
index 0000000..0d278c1
--- /dev/null
+++ b/.changeset/vite-8-minimum.md
@@ -0,0 +1,5 @@
+---
+'@solidjs/vite-plugin': patch
+---
+
+Require Vite 8 or newer and remove the Vite 6 and 7 compatibility paths.
diff --git a/.github/workflows/vitest.yml b/.github/workflows/vitest.yml
index 4bf1117..6c93794 100644
--- a/.github/workflows/vitest.yml
+++ b/.github/workflows/vitest.yml
@@ -12,7 +12,7 @@ jobs:
strategy:
fail-fast: false
matrix:
- example: [vite-6, vite-7, vite-8]
+ example: [vite-8]
runs-on: ubuntu-22.04
steps:
diff --git a/README.md b/README.md
index fddf63c..f6bf925 100644
--- a/README.md
+++ b/README.md
@@ -27,13 +27,13 @@ Join [solid discord](https://discord.com/invite/solidjs) and check the [troubles
## Requirements
-This module is 100% ESM compatible and requires NodeJS `14.18.0` or later.
+This module is 100% ESM compatible and requires Node.js `^20.19.0 || >=22.12.0`.
-You can check your current version of NodeJS by typing `node -v` in your terminal. If your version is below that one version I'd encourage you to either do an update globally or use a NodeJS version management tool such as [Volta](https://volta.sh/) or [nvm](https://github.com/nvm-sh/nvm).
+You can check your current Node.js version by running `node -v`. Use a version
+manager such as [Volta](https://volta.sh/) or [nvm](https://github.com/nvm-sh/nvm)
+to update it.
-Supported Vite versions: **Vite 6, 7 and 8**. Support for Vite 3–5 was
-dropped; if you are on an older Vite, stay on an earlier release of this
-plugin (2.x) or upgrade Vite.
+Supported Vite versions: **Vite 8 and 9**.
## Quickstart
@@ -230,7 +230,7 @@ With `ssr: true` — **SSR start mode**:
classic `vite build` + `vite build --ssr` two-step, work too.)
- **Build ordering**: server builds read the client manifest, so with `ssr`
enabled the plugin also orders builder-mode (environments API) app builds
- client-first via a `buildApp` hook (Vite 7.1+). That covers composed
+ client-first via a `buildApp` hook. That covers composed
setups whose own orchestrator builds server environments before the
client — e.g. @cloudflare/vite-plugin — with no hand-written ordering
plugin; setups without another orchestrator keep Vite's stock
diff --git a/examples/css-matrix/server.js b/examples/css-matrix/server.js
index 650fa2c..b51b484 100644
--- a/examples/css-matrix/server.js
+++ b/examples/css-matrix/server.js
@@ -59,7 +59,7 @@ async function start() {
let render;
if (!isProduction) {
- ({ render } = await vite.ssrLoadModule('/src/entry-server.tsx'));
+ ({ render } = await vite.environments.ssr.runner.import('/src/entry-server.tsx'));
} else {
({ render } = await import('./dist/server/entry-server.js'));
}
@@ -86,7 +86,6 @@ async function start() {
},
});
} catch (e) {
- if (!isProduction) vite.ssrFixStacktrace(e);
console.error(e);
res.statusCode = 500;
res.end(e.message);
diff --git a/examples/css-matrix/test/bridge.mjs b/examples/css-matrix/test/bridge.mjs
index c56b049..d30d3a5 100644
--- a/examples/css-matrix/test/bridge.mjs
+++ b/examples/css-matrix/test/bridge.mjs
@@ -71,7 +71,7 @@ try {
const loadManifestModule = async () => {
const node = ssrEnv.moduleGraph.getModuleById('\0virtual:solid-manifest');
if (node) ssrEnv.moduleGraph.invalidateModule(node);
- return (await server.ssrLoadModule('virtual:solid-manifest')).default;
+ return (await ssrEnv.runner.import('virtual:solid-manifest')).default;
};
// ---- Protocol over plain HTTP ------------------------------------------
diff --git a/examples/ssr/server.js b/examples/ssr/server.js
index be06f6b..5f88425 100644
--- a/examples/ssr/server.js
+++ b/examples/ssr/server.js
@@ -58,7 +58,7 @@ async function start() {
let render;
if (!isProduction) {
- ({ render } = await vite.ssrLoadModule('/src/entry-server.tsx'));
+ ({ render } = await vite.environments.ssr.runner.import('/src/entry-server.tsx'));
} else {
({ render } = await import('./dist/server/entry-server.js'));
}
@@ -90,7 +90,6 @@ async function start() {
},
});
} catch (e) {
- if (!isProduction) vite.ssrFixStacktrace(e);
console.error(e);
res.statusCode = 500;
res.end(e.message);
diff --git a/examples/start-env/vite.config.ts b/examples/start-env/vite.config.ts
index ca1433e..24df58c 100644
--- a/examples/start-env/vite.config.ts
+++ b/examples/start-env/vite.config.ts
@@ -20,6 +20,11 @@ import solidPlugin from '@solidjs/vite-plugin';
// server key (config-time error — boot validation is synchronous so the
// server chunk carries no top-level await).
export default defineConfig({
+ future: {
+ removePluginHookHandleHotUpdate: 'warn',
+ removePluginHookSsrArgument: 'warn',
+ removeSsrLoadModule: 'warn',
+ },
plugins: [
solidPlugin({
start: {
diff --git a/examples/start-ssr/test/host-dispatch.mjs b/examples/start-ssr/test/host-dispatch.mjs
index 763bb6f..c7292be 100644
--- a/examples/start-ssr/test/host-dispatch.mjs
+++ b/examples/start-ssr/test/host-dispatch.mjs
@@ -26,8 +26,9 @@ try {
const match = /createServerReference\w*\("([^"]*-getServerMessage)"/.exec(transformed?.code || '');
if (!match) throw new Error('could not extract function id from transformed module');
- await server.ssrLoadModule('virtual:solid-server-function-manifest');
- const handler = await server.ssrLoadModule('virtual:solid-server-function-handler');
+ const runner = server.environments.ssr.runner;
+ await runner.import('virtual:solid-server-function-manifest');
+ const handler = await runner.import('virtual:solid-server-function-handler');
const response = await handler.handleServerFunctionRequest(
new Request(
`http://localhost${handler.endpoint}?id=${encodeURIComponent(match[1])}&args=${encodeURIComponent('["host"]')}`,
diff --git a/examples/start-ssr/test/http-bridge.mjs b/examples/start-ssr/test/http-bridge.mjs
index a47710e..a6ddb4c 100644
--- a/examples/start-ssr/test/http-bridge.mjs
+++ b/examples/start-ssr/test/http-bridge.mjs
@@ -193,8 +193,7 @@ try {
);
// ---- Abort propagation ----------------------------------------------------
- // The middleware runs in-process (ssrLoadModule), so the probe global it
- // records on is this very globalThis.
+ // The middleware shares this process, including the probe global.
const probe = () => globalThis.__solidBridgeProbe ?? { aborts: 0, cancels: 0 };
{
const abortsBefore = probe().aborts;
diff --git a/examples/start-ssr/test/run.mjs b/examples/start-ssr/test/run.mjs
index 047c75c..c32ef6b 100644
--- a/examples/start-ssr/test/run.mjs
+++ b/examples/start-ssr/test/run.mjs
@@ -40,7 +40,7 @@
// - `serverFunctions.devMiddleware: false` keeps compilation on while the
// middleware no longer intercepts `/_server` (a dev POST 404s), and a
// host emulation (test/host-dispatch.mjs) proves the manifest + handler
-// virtual modules still dispatch through `ssrLoadModule`,
+// virtual modules still dispatch through the SSR module runner,
// - builder-order: with an adversarial `builder.buildApp` that builds the
// ssr environment first (mimicking e.g. @cloudflare/vite-plugin), the
// plugin's client-build-first hook still gets the client manifest baked
@@ -1791,7 +1791,7 @@ async function runConfigureMode() {
// 404. Then test/host-dispatch.mjs emulates the host that owns dispatch
// instead (a metaframework or an environment plugin like
// @cloudflare/vite-plugin): manifest + handler virtual modules loaded
-// through `ssrLoadModule`, request dispatched like production.
+// through the SSR module runner, request dispatched like production.
async function runNoMiddlewareMode() {
const mode = 'no-middleware';
console.log(`\n=== ${mode.toUpperCase()} ===`);
@@ -2721,7 +2721,9 @@ async function runMiddlewareMode() {
// middleware route reading getRequestEvent()) carries exactly those
// fields — createRequestEvent(request, options.event) spreads them
// over the event defaults.
- const handlerModule = await probe.ssrLoadModule('virtual:solid-ssr-handler');
+ const handlerModule = await probe.environments.ssr.runner.import(
+ 'virtual:solid-ssr-handler',
+ );
const seamResponse = await handlerModule.handleRequest(
new Request('http://localhost/api/native', { headers: { accept: 'application/json' } }),
{ event: { nativeEvent: { socket: { remoteAddress: '203.0.113.7' } } } },
@@ -3193,7 +3195,7 @@ async function runExternalMode() {
server = await createServer({ root: exampleDir, server: { middlewareMode: true } });
const clientModule = await server.environments.client.transformRequest('/src/api.ts');
const functionId = extractFunctionId(clientModule?.code || '', 'getServerMessage');
- const handler = await server.ssrLoadModule('virtual:solid-ssr-handler');
+ const handler = await server.environments.ssr.runner.import('virtual:solid-ssr-handler');
const response = await handler.handleRequest(new Request('http://localhost/'));
const html = await response.text();
record(
diff --git a/examples/start-ssr/vite.config.ts b/examples/start-ssr/vite.config.ts
index 00aefd9..6b069f8 100644
--- a/examples/start-ssr/vite.config.ts
+++ b/examples/start-ssr/vite.config.ts
@@ -54,6 +54,11 @@ const jsxCompiler =
const serverComponents = !!process.env.SOLID_SERVER_COMPONENTS;
export default defineConfig({
+ future: {
+ removePluginHookHandleHotUpdate: 'warn',
+ removePluginHookSsrArgument: 'warn',
+ removeSsrLoadModule: 'warn',
+ },
// SOLID_BASE (base mode) serves and builds the app under a non-root Vite
// `base` (e.g. /app/): preview endpoint mounting, dev lazy asset URLs, and
// request-URL shapes must all stay base-correct.
diff --git a/examples/vite-6/index.html b/examples/vite-6/index.html
deleted file mode 100644
index d9e5a65..0000000
--- a/examples/vite-6/index.html
+++ /dev/null
@@ -1,11 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
diff --git a/examples/vite-6/package.json b/examples/vite-6/package.json
deleted file mode 100644
index 6063f94..0000000
--- a/examples/vite-6/package.json
+++ /dev/null
@@ -1,26 +0,0 @@
-{
- "name": "example",
- "private": "true",
- "type": "module",
- "scripts": {
- "dev": "vite",
- "build": "vite build",
- "preview": "vite preview",
- "test": "vitest --browser.headless --run",
- "test-dev": "vitest"
- },
- "devDependencies": {
- "@solidjs/testing-library": "^1.0.0-beta.2",
- "@testing-library/jest-dom": "^6.6.3",
- "@testing-library/user-event": "^14.6.1",
- "@vitest/browser": "^3.0.7",
- "playwright": "^1.50.1",
- "vite": "^6.4.3",
- "@solidjs/vite-plugin": "workspace:*",
- "vitest": "^3.0.7"
- },
- "dependencies": {
- "solid-js": "catalog:",
- "@solidjs/web": "catalog:"
- }
-}
diff --git a/examples/vite-6/src/App.tsx b/examples/vite-6/src/App.tsx
deleted file mode 100644
index 86a85c7..0000000
--- a/examples/vite-6/src/App.tsx
+++ /dev/null
@@ -1,56 +0,0 @@
-import { onSettled } from "solid-js";
-import { CounterProvider, useCounter } from "./CounterContext";
-
-const title = 'Count';
-
-function Count() {
- const counter = useCounter();
- onSettled(() => {
- console.log('Mounted Count');
- return () => console.log('Unmounted Count');
- });
- return (
- {title}: {counter.value()}
- );
-}
-
-function Increment() {
- const counter = useCounter();
- onSettled(() => {
- console.log('Mounted Increment');
- return () => console.log('Unmounted Increment');
- });
- return (
-
- );
-}
-
-function Decrement() {
- const counter = useCounter();
- onSettled(() => {
- console.log('Mounted Decrement');
- return () => console.log('Unmounted Decrement');
- });
- return (
-
- );
-}
-
-export default function App() {
- onSettled(() => {
- console.log('Mounted App');
- return () => console.log('Unmounted App');
- });
-
- return (
-
-
-
-
-
- );
-}
diff --git a/examples/vite-6/src/CounterContext.tsx b/examples/vite-6/src/CounterContext.tsx
deleted file mode 100644
index edf682c..0000000
--- a/examples/vite-6/src/CounterContext.tsx
+++ /dev/null
@@ -1,41 +0,0 @@
-import { createContext, createSignal, onSettled, useContext } from "solid-js";
-import type { JSX } from "@solidjs/web";
-
-interface CounterContext {
- value(): number;
- increment(): void;
- decrement(): void;
-}
-
-const CounterContext = createContext();
-
-export function useCounter() {
- const ctx = useContext(CounterContext);
- if (!ctx) {
- throw new Error('Missing CounterContext');
- }
- return ctx;
-}
-
-export function CounterProvider(props: { children: JSX.Element }) {
- const [value, setValue] = createSignal(0);
-
- function increment() {
- setValue((c) => c + 1);
- }
-
- function decrement() {
- setValue((c) => c - 1);
- }
- onSettled(() => {
- console.log('Mounted CounterProvider');
- return () => console.log('Unmounted CounterProvider');
- });
-
- return (
-
- Counter
- {props.children}
-
- );
-}
diff --git a/examples/vite-6/src/main.tsx b/examples/vite-6/src/main.tsx
deleted file mode 100644
index 0a6fd92..0000000
--- a/examples/vite-6/src/main.tsx
+++ /dev/null
@@ -1,8 +0,0 @@
-import { render } from '@solidjs/web';
-import App from './App';
-
-const app = document.getElementById('app');
-
-if (app) {
- render(() => , app);
-}
\ No newline at end of file
diff --git a/examples/vite-6/tests/App.test.tsx b/examples/vite-6/tests/App.test.tsx
deleted file mode 100644
index efe51d3..0000000
--- a/examples/vite-6/tests/App.test.tsx
+++ /dev/null
@@ -1,21 +0,0 @@
-///
-import { render } from '@solidjs/testing-library';
-import { page } from '@vitest/browser/context';
-import { expect, test } from 'vitest';
-
-import App from '../src/App.jsx';
-
-test('App', async () => {
- const root = page.elementLocator(render(() => ).baseElement);
-
- const count = root.getByText('Count:');
- await expect.element(count).toHaveTextContent('Count: 0');
-
- const incrementButton = root.getByText('Increment');
- await incrementButton.click();
- await expect.element(count).toHaveTextContent('Count: 1');
-
- const decrementButton = root.getByText('Decrement');
- await decrementButton.click();
- await expect.element(count).toHaveTextContent('Count: 0');
-});
diff --git a/examples/vite-6/tests/tsconfig.json b/examples/vite-6/tests/tsconfig.json
deleted file mode 100644
index 416b900..0000000
--- a/examples/vite-6/tests/tsconfig.json
+++ /dev/null
@@ -1,12 +0,0 @@
-{
- "extends": "../tsconfig.json",
- "compilerOptions": {
- "types": [
- "@testing-library/jest-dom"
- ]
- },
- "include": [
- "**/*.ts",
- "**/*.tsx"
- ]
-}
diff --git a/examples/vite-6/tsconfig.json b/examples/vite-6/tsconfig.json
deleted file mode 100644
index 5aa5dd8..0000000
--- a/examples/vite-6/tsconfig.json
+++ /dev/null
@@ -1,18 +0,0 @@
-{
- "compilerOptions": {
- "target": "ESNext",
- "module": "ESNext",
- "allowSyntheticDefaultImports": true,
- "esModuleInterop": true,
- "resolveJsonModule": true,
- "moduleResolution": "bundler",
- "jsx": "preserve",
- "jsxImportSource": "@solidjs/web",
- "types": ["vite/client"],
- "baseUrl": ".",
- "paths": {
- "@/*": ["./pages/*"],
- "@@/*": ["./assets/*"]
- }
- }
-}
diff --git a/examples/vite-6/vite.config.ts b/examples/vite-6/vite.config.ts
deleted file mode 100644
index 7a7f16b..0000000
--- a/examples/vite-6/vite.config.ts
+++ /dev/null
@@ -1,10 +0,0 @@
-import { defineConfig } from 'vite';
-import solidPlugin from '@solidjs/vite-plugin';
-
-export default defineConfig({
- plugins: [
- // Explicit babel mode: keeps CI coverage of the Babel JSX backend now
- // that the plugin defaults to the native compiler.
- solidPlugin({ compiler: 'babel' }),
- ],
-});
\ No newline at end of file
diff --git a/examples/vite-6/vitest.config.ts b/examples/vite-6/vitest.config.ts
deleted file mode 100644
index eb10c0e..0000000
--- a/examples/vite-6/vitest.config.ts
+++ /dev/null
@@ -1,17 +0,0 @@
-import { defineConfig } from 'vitest/config';
-import solidPlugin from '../../src/index.js';
-
-export default defineConfig({
- plugins: [solidPlugin()],
- resolve: {
- conditions: ['development', 'browser'],
- },
- test: {
- environment: 'node',
- browser: {
- enabled: true,
- provider: 'playwright',
- instances: [{ browser: 'chromium' }],
- },
- },
-});
diff --git a/examples/vite-7/index.html b/examples/vite-7/index.html
deleted file mode 100644
index d9e5a65..0000000
--- a/examples/vite-7/index.html
+++ /dev/null
@@ -1,11 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
diff --git a/examples/vite-7/package.json b/examples/vite-7/package.json
deleted file mode 100644
index 58a8bf1..0000000
--- a/examples/vite-7/package.json
+++ /dev/null
@@ -1,26 +0,0 @@
-{
- "name": "example",
- "private": "true",
- "type": "module",
- "scripts": {
- "dev": "vite",
- "build": "vite build",
- "preview": "vite preview",
- "test": "vitest --browser.headless --run",
- "test-dev": "vitest"
- },
- "devDependencies": {
- "@solidjs/testing-library": "^1.0.0-beta.2",
- "@testing-library/jest-dom": "^6.6.3",
- "@testing-library/user-event": "^14.6.1",
- "@vitest/browser": "^3.0.7",
- "playwright": "^1.50.1",
- "vite": "^7.3.6",
- "@solidjs/vite-plugin": "workspace:*",
- "vitest": "^3.0.7"
- },
- "dependencies": {
- "solid-js": "catalog:",
- "@solidjs/web": "catalog:"
- }
-}
diff --git a/examples/vite-7/src/App.tsx b/examples/vite-7/src/App.tsx
deleted file mode 100644
index 84029bf..0000000
--- a/examples/vite-7/src/App.tsx
+++ /dev/null
@@ -1,56 +0,0 @@
-import { onSettled } from "solid-js";
-import { CounterProvider, useCounter } from "./CounterContext";
-
-const title = 'Counter';
-
-function Count() {
- const counter = useCounter();
- onSettled(() => {
- console.log('Mounted Count');
- return () => console.log('Unmounted Count');
- });
- return (
- {title}: {counter.value()}
- );
-}
-
-function Increment() {
- const counter = useCounter();
- onSettled(() => {
- console.log('Mounted Increment');
- return () => console.log('Unmounted Increment');
- });
- return (
-
- );
-}
-
-function Decrement() {
- const counter = useCounter();
- onSettled(() => {
- console.log('Mounted Decrement');
- return () => console.log('Unmounted Decrement');
- });
- return (
-
- );
-}
-
-export default function App() {
- onSettled(() => {
- console.log('Mounted App');
- return () => console.log('Unmounted App');
- });
-
- return (
-
-
-
-
-
- );
-}
diff --git a/examples/vite-7/src/CounterContext.tsx b/examples/vite-7/src/CounterContext.tsx
deleted file mode 100644
index edf682c..0000000
--- a/examples/vite-7/src/CounterContext.tsx
+++ /dev/null
@@ -1,41 +0,0 @@
-import { createContext, createSignal, onSettled, useContext } from "solid-js";
-import type { JSX } from "@solidjs/web";
-
-interface CounterContext {
- value(): number;
- increment(): void;
- decrement(): void;
-}
-
-const CounterContext = createContext();
-
-export function useCounter() {
- const ctx = useContext(CounterContext);
- if (!ctx) {
- throw new Error('Missing CounterContext');
- }
- return ctx;
-}
-
-export function CounterProvider(props: { children: JSX.Element }) {
- const [value, setValue] = createSignal(0);
-
- function increment() {
- setValue((c) => c + 1);
- }
-
- function decrement() {
- setValue((c) => c - 1);
- }
- onSettled(() => {
- console.log('Mounted CounterProvider');
- return () => console.log('Unmounted CounterProvider');
- });
-
- return (
-
- Counter
- {props.children}
-
- );
-}
diff --git a/examples/vite-7/src/main.tsx b/examples/vite-7/src/main.tsx
deleted file mode 100644
index 0a6fd92..0000000
--- a/examples/vite-7/src/main.tsx
+++ /dev/null
@@ -1,8 +0,0 @@
-import { render } from '@solidjs/web';
-import App from './App';
-
-const app = document.getElementById('app');
-
-if (app) {
- render(() => , app);
-}
\ No newline at end of file
diff --git a/examples/vite-7/tests/App.test.tsx b/examples/vite-7/tests/App.test.tsx
deleted file mode 100644
index 628607c..0000000
--- a/examples/vite-7/tests/App.test.tsx
+++ /dev/null
@@ -1,21 +0,0 @@
-///
-import { render } from '@solidjs/testing-library';
-import { page } from '@vitest/browser/context';
-import { expect, test } from 'vitest';
-
-import App from '../src/App.jsx';
-
-test('App', async () => {
- const root = page.elementLocator(render(() => ).baseElement);
-
- const count = root.getByText('Counter:');
- await expect.element(count).toHaveTextContent('Counter: 0');
-
- const incrementButton = root.getByText('Increment');
- await incrementButton.click();
- await expect.element(count).toHaveTextContent('Counter: 1');
-
- const decrementButton = root.getByText('Decrement');
- await decrementButton.click();
- await expect.element(count).toHaveTextContent('Counter: 0');
-});
diff --git a/examples/vite-7/tests/tsconfig.json b/examples/vite-7/tests/tsconfig.json
deleted file mode 100644
index 416b900..0000000
--- a/examples/vite-7/tests/tsconfig.json
+++ /dev/null
@@ -1,12 +0,0 @@
-{
- "extends": "../tsconfig.json",
- "compilerOptions": {
- "types": [
- "@testing-library/jest-dom"
- ]
- },
- "include": [
- "**/*.ts",
- "**/*.tsx"
- ]
-}
diff --git a/examples/vite-7/tsconfig.json b/examples/vite-7/tsconfig.json
deleted file mode 100644
index 5aa5dd8..0000000
--- a/examples/vite-7/tsconfig.json
+++ /dev/null
@@ -1,18 +0,0 @@
-{
- "compilerOptions": {
- "target": "ESNext",
- "module": "ESNext",
- "allowSyntheticDefaultImports": true,
- "esModuleInterop": true,
- "resolveJsonModule": true,
- "moduleResolution": "bundler",
- "jsx": "preserve",
- "jsxImportSource": "@solidjs/web",
- "types": ["vite/client"],
- "baseUrl": ".",
- "paths": {
- "@/*": ["./pages/*"],
- "@@/*": ["./assets/*"]
- }
- }
-}
diff --git a/examples/vite-7/vite.config.ts b/examples/vite-7/vite.config.ts
deleted file mode 100644
index 7a7f16b..0000000
--- a/examples/vite-7/vite.config.ts
+++ /dev/null
@@ -1,10 +0,0 @@
-import { defineConfig } from 'vite';
-import solidPlugin from '@solidjs/vite-plugin';
-
-export default defineConfig({
- plugins: [
- // Explicit babel mode: keeps CI coverage of the Babel JSX backend now
- // that the plugin defaults to the native compiler.
- solidPlugin({ compiler: 'babel' }),
- ],
-});
\ No newline at end of file
diff --git a/examples/vite-7/vitest.config.ts b/examples/vite-7/vitest.config.ts
deleted file mode 100644
index eb10c0e..0000000
--- a/examples/vite-7/vitest.config.ts
+++ /dev/null
@@ -1,17 +0,0 @@
-import { defineConfig } from 'vitest/config';
-import solidPlugin from '../../src/index.js';
-
-export default defineConfig({
- plugins: [solidPlugin()],
- resolve: {
- conditions: ['development', 'browser'],
- },
- test: {
- environment: 'node',
- browser: {
- enabled: true,
- provider: 'playwright',
- instances: [{ browser: 'chromium' }],
- },
- },
-});
diff --git a/examples/vite-8/vite.config.ts b/examples/vite-8/vite.config.ts
index b91b775..e0fb779 100644
--- a/examples/vite-8/vite.config.ts
+++ b/examples/vite-8/vite.config.ts
@@ -3,7 +3,9 @@ import solidPlugin from '@solidjs/vite-plugin';
export default defineConfig({
future: {
+ removePluginHookHandleHotUpdate: 'warn',
removePluginHookSsrArgument: 'warn',
+ removeSsrLoadModule: 'warn',
},
plugins: [
{
diff --git a/package.json b/package.json
index 920ac81..22b1dee 100644
--- a/package.json
+++ b/package.json
@@ -3,6 +3,9 @@
"version": "3.0.0-next.31",
"description": "solid-js integration plugin for Vite",
"type": "module",
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ },
"files": [
"dist",
"virtual-solid-manifest.d.ts",
@@ -90,7 +93,7 @@
"@solidjs/web": "^2.0.0-rc.0",
"@testing-library/jest-dom": "^5.16.6 || ^5.17.0 || ^6.*",
"solid-js": "^2.0.0-rc.0",
- "vite": "^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0"
+ "vite": "^8.0.0 || ^9.0.0"
},
"peerDependenciesMeta": {
"@solidjs/start-devtools": {
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 3a145dd..c68402e 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -198,74 +198,6 @@ importers:
specifier: ^4.1.11
version: 4.1.11(@types/node@24.13.3)(@vitest/browser-playwright@4.1.11)(jsdom@26.1.0)(vite@8.2.1(@types/node@24.13.3)(esbuild@0.28.2))
- examples/vite-6:
- dependencies:
- '@solidjs/web':
- specifier: 'catalog:'
- version: 2.0.0-rc.0(solid-js@2.0.0-rc.0)
- solid-js:
- specifier: 'catalog:'
- version: 2.0.0-rc.0
- devDependencies:
- '@solidjs/testing-library':
- specifier: ^1.0.0-beta.2
- version: 1.0.0-beta.2(@solidjs/web@2.0.0-rc.0(solid-js@2.0.0-rc.0))(solid-js@2.0.0-rc.0)
- '@solidjs/vite-plugin':
- specifier: workspace:*
- version: link:../..
- '@testing-library/jest-dom':
- specifier: ^6.6.3
- version: 6.10.0(@testing-library/dom@10.4.1)
- '@testing-library/user-event':
- specifier: ^14.6.1
- version: 14.6.1(@testing-library/dom@10.4.1)
- '@vitest/browser':
- specifier: ^3.0.7
- version: 3.2.7(playwright@1.61.1)(vite@6.4.3(@types/node@24.13.3)(lightningcss@1.33.0))(vitest@3.2.7)
- playwright:
- specifier: ^1.50.1
- version: 1.61.1
- vite:
- specifier: ^6.4.3
- version: 6.4.3(@types/node@24.13.3)(lightningcss@1.33.0)
- vitest:
- specifier: ^3.0.7
- version: 3.2.7(@types/node@24.13.3)(@vitest/browser@3.2.7)(jsdom@26.1.0)(lightningcss@1.33.0)
-
- examples/vite-7:
- dependencies:
- '@solidjs/web':
- specifier: 'catalog:'
- version: 2.0.0-rc.0(solid-js@2.0.0-rc.0)
- solid-js:
- specifier: 'catalog:'
- version: 2.0.0-rc.0
- devDependencies:
- '@solidjs/testing-library':
- specifier: ^1.0.0-beta.2
- version: 1.0.0-beta.2(@solidjs/web@2.0.0-rc.0(solid-js@2.0.0-rc.0))(solid-js@2.0.0-rc.0)
- '@solidjs/vite-plugin':
- specifier: workspace:*
- version: link:../..
- '@testing-library/jest-dom':
- specifier: ^6.6.3
- version: 6.10.0(@testing-library/dom@10.4.1)
- '@testing-library/user-event':
- specifier: ^14.6.1
- version: 14.6.1(@testing-library/dom@10.4.1)
- '@vitest/browser':
- specifier: ^3.0.7
- version: 3.2.7(playwright@1.61.1)(vite@7.3.6(@types/node@24.13.3)(lightningcss@1.33.0))(vitest@3.2.7)
- playwright:
- specifier: ^1.50.1
- version: 1.61.1
- vite:
- specifier: ^7.3.6
- version: 7.3.6(@types/node@24.13.3)(lightningcss@1.33.0)
- vitest:
- specifier: ^3.0.7
- version: 3.2.7(@types/node@24.13.3)(@vitest/browser@3.2.7)(jsdom@26.1.0)(lightningcss@1.33.0)
-
examples/vite-8:
dependencies:
'@solidjs/web':
@@ -987,312 +919,156 @@ packages:
'@emnapi/wasi-threads@1.2.2':
resolution: {integrity: sha512-c95qOXkHdydNKhscBTebqEC1CVAZpyqOfVfBzQ1qgzyl3gfeldUjIggDbIZgDKsHLgnsM+igH7TJ/eAasaVuMA==}
- '@esbuild/aix-ppc64@0.25.12':
- resolution: {integrity: sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==}
- engines: {node: '>=18'}
- cpu: [ppc64]
- os: [aix]
-
'@esbuild/aix-ppc64@0.28.2':
resolution: {integrity: sha512-XExcO+dvLKvVtNTibSTBej1NCAbaGhWn9Ww1ZPx80qsahhPFe/8jgWP0IchNe0F3HwkU7n8ejhH8bjonqht8mQ==}
engines: {node: '>=18'}
cpu: [ppc64]
os: [aix]
- '@esbuild/android-arm64@0.25.12':
- resolution: {integrity: sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==}
- engines: {node: '>=18'}
- cpu: [arm64]
- os: [android]
-
'@esbuild/android-arm64@0.28.2':
resolution: {integrity: sha512-5YfKeeI8qWfBZIX+u2xZC3Zlb3Os/gLS2sbEKM+I4ZOcsWmHS2WLysCcQZDAFRslDUU5Oiq44gf6PYN1vGwG5A==}
engines: {node: '>=18'}
cpu: [arm64]
os: [android]
- '@esbuild/android-arm@0.25.12':
- resolution: {integrity: sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==}
- engines: {node: '>=18'}
- cpu: [arm]
- os: [android]
-
'@esbuild/android-arm@0.28.2':
resolution: {integrity: sha512-kXXoiPVVGQcnIYGOeaovwOURpniDBpSq4A03qkQ+BMQqtGG6HYap3xne9C1O1yo4TR3qxlCX5IqqmX6fFo2Lqg==}
engines: {node: '>=18'}
cpu: [arm]
os: [android]
- '@esbuild/android-x64@0.25.12':
- resolution: {integrity: sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==}
- engines: {node: '>=18'}
- cpu: [x64]
- os: [android]
-
'@esbuild/android-x64@0.28.2':
resolution: {integrity: sha512-O387ite7SzUyCcy3JQX4P4bLtEA7bLLkx+esve5JHnyYfNTxcVpXZo9jhdB0lTKN44gztELTdU7nS8Nr16Fs1Q==}
engines: {node: '>=18'}
cpu: [x64]
os: [android]
- '@esbuild/darwin-arm64@0.25.12':
- resolution: {integrity: sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==}
- engines: {node: '>=18'}
- cpu: [arm64]
- os: [darwin]
-
'@esbuild/darwin-arm64@0.28.2':
resolution: {integrity: sha512-n4KqkOQrraxHJcgjM1RvwbigfQKIKJVpM7xp+KsxiyUSrRdIXnt73VhrPAx0fV44hgfmIVKjxMN9J1t5jySVkw==}
engines: {node: '>=18'}
cpu: [arm64]
os: [darwin]
- '@esbuild/darwin-x64@0.25.12':
- resolution: {integrity: sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==}
- engines: {node: '>=18'}
- cpu: [x64]
- os: [darwin]
-
'@esbuild/darwin-x64@0.28.2':
resolution: {integrity: sha512-uq6suIWYP37qzGddBKPw5QEQPi6HiLGsO7UmkpfyaYNQ3D+rN6w6WfwH+nuqcGXWvawGwxOEroO4YGnFh95azw==}
engines: {node: '>=18'}
cpu: [x64]
os: [darwin]
- '@esbuild/freebsd-arm64@0.25.12':
- resolution: {integrity: sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==}
- engines: {node: '>=18'}
- cpu: [arm64]
- os: [freebsd]
-
'@esbuild/freebsd-arm64@0.28.2':
resolution: {integrity: sha512-n+I0BTSRIoy+d6RPKnEVwql5UwBJolytvY4mAOIEJorKlqgPII8ix6slVVrfZ5Tnj7glIZvloylbB/EJPMWEXw==}
engines: {node: '>=18'}
cpu: [arm64]
os: [freebsd]
- '@esbuild/freebsd-x64@0.25.12':
- resolution: {integrity: sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==}
- engines: {node: '>=18'}
- cpu: [x64]
- os: [freebsd]
-
'@esbuild/freebsd-x64@0.28.2':
resolution: {integrity: sha512-78XJTJkvPs0kz2w61301PJjXl4g7q3JqiYMZ/M/yVI73EHBrCRTgkhu9oqG7vPqq+a/yadEW8aD+agKlk5xrmg==}
engines: {node: '>=18'}
cpu: [x64]
os: [freebsd]
- '@esbuild/linux-arm64@0.25.12':
- resolution: {integrity: sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==}
- engines: {node: '>=18'}
- cpu: [arm64]
- os: [linux]
-
'@esbuild/linux-arm64@0.28.2':
resolution: {integrity: sha512-pW4AC0P3it8c7do9MVM4p51FzHzdM/TZrerurgRcHJ2WTa1VQ1CIq18xncfpBJw4ojkiZZrKW2yIBWBP92j6Ug==}
engines: {node: '>=18'}
cpu: [arm64]
os: [linux]
- '@esbuild/linux-arm@0.25.12':
- resolution: {integrity: sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==}
- engines: {node: '>=18'}
- cpu: [arm]
- os: [linux]
-
'@esbuild/linux-arm@0.28.2':
resolution: {integrity: sha512-XlDnu2q5yoqems+xay6wSAcg9DDD7K9RLKZEBOMZm3ckNpJBvOX20tSfby8KfrrhINDyv9V2YVZKY/SpoGJI8w==}
engines: {node: '>=18'}
cpu: [arm]
os: [linux]
- '@esbuild/linux-ia32@0.25.12':
- resolution: {integrity: sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==}
- engines: {node: '>=18'}
- cpu: [ia32]
- os: [linux]
-
'@esbuild/linux-ia32@0.28.2':
resolution: {integrity: sha512-CYbnj78HsIeA+DhgUKgFCfvNsTHFhMMrinUrMZpDXJXKN8T3XViTZ/+wtHeVxEWY8ewSzTFN+nRmSwO2tZaLUQ==}
engines: {node: '>=18'}
cpu: [ia32]
os: [linux]
- '@esbuild/linux-loong64@0.25.12':
- resolution: {integrity: sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==}
- engines: {node: '>=18'}
- cpu: [loong64]
- os: [linux]
-
'@esbuild/linux-loong64@0.28.2':
resolution: {integrity: sha512-buwkd8nsph4R+ajRvw0qM5Hja/TXQow3ptzWO2EbG/cqcIkHloRrdlBtQlshyYGTNFvfkfJ5tpPLVkY4DtsPfQ==}
engines: {node: '>=18'}
cpu: [loong64]
os: [linux]
- '@esbuild/linux-mips64el@0.25.12':
- resolution: {integrity: sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==}
- engines: {node: '>=18'}
- cpu: [mips64el]
- os: [linux]
-
'@esbuild/linux-mips64el@0.28.2':
resolution: {integrity: sha512-ZVykbDyk7519VwiNb9Lcj9m8XM6v5V9uKPvrEMkkEedVewf+0itkhahp4HDpgERXhwLRpWFypsGbG/J8s0QjJA==}
engines: {node: '>=18'}
cpu: [mips64el]
os: [linux]
- '@esbuild/linux-ppc64@0.25.12':
- resolution: {integrity: sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==}
- engines: {node: '>=18'}
- cpu: [ppc64]
- os: [linux]
-
'@esbuild/linux-ppc64@0.28.2':
resolution: {integrity: sha512-CAXl+Dtd9UUuJd8pKKdwh6MLm3MUMiqMPmhZ3tTSXPqfyQ3vDl6R5hZdZ/kYojK4ofXtdfSv1tFq8XzWx3heNQ==}
engines: {node: '>=18'}
cpu: [ppc64]
os: [linux]
- '@esbuild/linux-riscv64@0.25.12':
- resolution: {integrity: sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==}
- engines: {node: '>=18'}
- cpu: [riscv64]
- os: [linux]
-
'@esbuild/linux-riscv64@0.28.2':
resolution: {integrity: sha512-GeXCej4IQtU1B+QlDV8W/RRvbzI3O/Stss+/bCXv4lZls5WGRtu2a+3JkA3i4qIUlMXpcHebWpF8AkJhATowuA==}
engines: {node: '>=18'}
cpu: [riscv64]
os: [linux]
- '@esbuild/linux-s390x@0.25.12':
- resolution: {integrity: sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==}
- engines: {node: '>=18'}
- cpu: [s390x]
- os: [linux]
-
'@esbuild/linux-s390x@0.28.2':
resolution: {integrity: sha512-3H1weTYZPxt/WOhByszQZybS9w5lKzUn1FDMsgEChbHWQwHYQQRfBxgCcZvPhjHfKyJjIievvMmEUawJrdY9Dg==}
engines: {node: '>=18'}
cpu: [s390x]
os: [linux]
- '@esbuild/linux-x64@0.25.12':
- resolution: {integrity: sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==}
- engines: {node: '>=18'}
- cpu: [x64]
- os: [linux]
-
'@esbuild/linux-x64@0.28.2':
resolution: {integrity: sha512-4xTZr1FUmSoQW4XIWmit3tzQrUTZM+N3P0XV8xROKYF50XfI7xeO90+1bZvNwxIufQ9hDQVRJH5YhgPVF8A/HQ==}
engines: {node: '>=18'}
cpu: [x64]
os: [linux]
- '@esbuild/netbsd-arm64@0.25.12':
- resolution: {integrity: sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==}
- engines: {node: '>=18'}
- cpu: [arm64]
- os: [netbsd]
-
'@esbuild/netbsd-arm64@0.28.2':
resolution: {integrity: sha512-sSATRjPeDBg3pdgHoQfoYBob11Kk1FGa9lui5RIHZCoCkJa9QKlvl3/vKz2usCmYYjs7ymJR/2Nnsqe+Hjt5nw==}
engines: {node: '>=18'}
cpu: [arm64]
os: [netbsd]
- '@esbuild/netbsd-x64@0.25.12':
- resolution: {integrity: sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==}
- engines: {node: '>=18'}
- cpu: [x64]
- os: [netbsd]
-
'@esbuild/netbsd-x64@0.28.2':
resolution: {integrity: sha512-lqnzCV+mM0gIADaKihiCg6ifgfU2L3h5E33rNQBN1Y4MaVGnzryzmvvf7UHxprpQdE8hpqLolJ9Rl+SkIRDpyw==}
engines: {node: '>=18'}
cpu: [x64]
os: [netbsd]
- '@esbuild/openbsd-arm64@0.25.12':
- resolution: {integrity: sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==}
- engines: {node: '>=18'}
- cpu: [arm64]
- os: [openbsd]
-
'@esbuild/openbsd-arm64@0.28.2':
resolution: {integrity: sha512-AL2qJILH7lNjrDmCQDvdxMfAUIv8KMNZOvrwAQ8i8//ntL9FflhOyMJ8OZSMBb8/AWXe3/5v5S20y3zCoZWKoQ==}
engines: {node: '>=18'}
cpu: [arm64]
os: [openbsd]
- '@esbuild/openbsd-x64@0.25.12':
- resolution: {integrity: sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==}
- engines: {node: '>=18'}
- cpu: [x64]
- os: [openbsd]
-
'@esbuild/openbsd-x64@0.28.2':
resolution: {integrity: sha512-QtiuPytchRyC4rwUKhexJdQKvDuZ6hWloi3igqPQNUJCS1/v9EiO3UTOXR6A3FoMo4fnAKbWJdqaIwhOzh8qEw==}
engines: {node: '>=18'}
cpu: [x64]
os: [openbsd]
- '@esbuild/openharmony-arm64@0.25.12':
- resolution: {integrity: sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==}
- engines: {node: '>=18'}
- cpu: [arm64]
- os: [openharmony]
-
'@esbuild/openharmony-arm64@0.28.2':
resolution: {integrity: sha512-WkhYDmpTjLvGlScA1rwjRUmhl4k8oXR3cIbtqWmELgU/dFeHHlEllxDvdWcNJV9rbzCexB5vz8gtNewWLgCT7Q==}
engines: {node: '>=18'}
cpu: [arm64]
os: [openharmony]
- '@esbuild/sunos-x64@0.25.12':
- resolution: {integrity: sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==}
- engines: {node: '>=18'}
- cpu: [x64]
- os: [sunos]
-
'@esbuild/sunos-x64@0.28.2':
resolution: {integrity: sha512-GPMSkTOtMnv2U2F8gxe4Io6qmVs+YKyp832Etqqxr0hFngmXQ3rzwytelm3GIn7T4VviRUlf3sOgBOiTdvaf7g==}
engines: {node: '>=18'}
cpu: [x64]
os: [sunos]
- '@esbuild/win32-arm64@0.25.12':
- resolution: {integrity: sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==}
- engines: {node: '>=18'}
- cpu: [arm64]
- os: [win32]
-
'@esbuild/win32-arm64@0.28.2':
resolution: {integrity: sha512-PIhhEkE9uPBleRBrQEJpUn7MBnibZzbGzYWPmY3x+YoVg/95zbjB4CxPPOQ8l5tYYM4mMaCthF8/1DIfBQQyWQ==}
engines: {node: '>=18'}
cpu: [arm64]
os: [win32]
- '@esbuild/win32-ia32@0.25.12':
- resolution: {integrity: sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==}
- engines: {node: '>=18'}
- cpu: [ia32]
- os: [win32]
-
'@esbuild/win32-ia32@0.28.2':
resolution: {integrity: sha512-YmJbfTlvU7Sdn9BB+4PRES4oB6pxgS37MAONj+hBr/cpXS1aBPKXxNnDbu+QCWPj0o9dgyxeq79g6c5P8KeuYA==}
engines: {node: '>=18'}
cpu: [ia32]
os: [win32]
- '@esbuild/win32-x64@0.25.12':
- resolution: {integrity: sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==}
- engines: {node: '>=18'}
- cpu: [x64]
- os: [win32]
-
'@esbuild/win32-x64@0.28.2':
resolution: {integrity: sha512-5ebpxr3nWMzrL/rnUI755Jkuee0bHL/Gq0WTF9lvcpv73wAp5eu8MfBUgWK9bhWvZjj7yX8etf/8tI8Ney695g==}
engines: {node: '>=18'}
@@ -1708,43 +1484,14 @@ packages:
playwright: '*'
vitest: 4.1.11
- '@vitest/browser@3.2.7':
- resolution: {integrity: sha512-gIzazUkbQfv6T1rJHOLhMMKQnplKAvvQ7QNGaFwI6oCsp4z2aSDZCojGpX3QX3+MYsvJdyy/8BRIYVEbAkMkEA==}
- peerDependencies:
- playwright: '*'
- safaridriver: '*'
- vitest: 3.2.7
- webdriverio: ^7.0.0 || ^8.0.0 || ^9.0.0
- peerDependenciesMeta:
- playwright:
- optional: true
- safaridriver:
- optional: true
- webdriverio:
- optional: true
-
'@vitest/browser@4.1.11':
resolution: {integrity: sha512-bwMovvAeuTFOK5kIFevw4VEf+1gVEICv4SYK4k3knJOxl6b1zEWud8mYKD73e1B0odAn174h1MofURy2TPWf3w==}
peerDependencies:
vitest: 4.1.11
- '@vitest/expect@3.2.7':
- resolution: {integrity: sha512-E8eBXaKibuvH2pSZErOjdVb5vF4PbKYcrnluBTYxEk1l/VhhwZg1kZQsdtjq+CsF5CFydf2Rdkz7jDHKSisi3w==}
-
'@vitest/expect@4.1.11':
resolution: {integrity: sha512-VX2x5vNJXET47KAFzwERI+KRMtTTCSWTfSMKsW7JsUsXV4psq++e3DvZpuTDOpHcxytiDs6p2nhVb2tVDiiUYw==}
- '@vitest/mocker@3.2.7':
- resolution: {integrity: sha512-Trr0hYO9CM3Wj6ksWHRhK9IZpIY6wTMO5u/MqXurMxT57sWBaOPEtP3Oq60ihZuh5JsiagKfz95OcxdEP6dBrA==}
- peerDependencies:
- msw: ^2.4.9
- vite: ^5.0.0 || ^6.0.0 || ^7.0.0-0
- peerDependenciesMeta:
- msw:
- optional: true
- vite:
- optional: true
-
'@vitest/mocker@4.1.11':
resolution: {integrity: sha512-2XJVD55d1o5AZous5CCGKS74g/riOj9odEt2bQpCVZeblHyHdnMeFl4jl0XjU21stf4mbjUkew2eXQZt65g5CQ==}
peerDependencies:
@@ -1756,33 +1503,18 @@ packages:
vite:
optional: true
- '@vitest/pretty-format@3.2.7':
- resolution: {integrity: sha512-KUHlwqVu0sRlhCdyPdQ/wBoTfRahjUky1MubOmYw9fWfIZy1gNoHpuaaQBPAaMaVYdQYHJLurzj8ECCj5OwTqA==}
-
'@vitest/pretty-format@4.1.11':
resolution: {integrity: sha512-yiZzPbGTS9Sr/JpFl8zHrcIkAofNbFV6k21vIgQN/cY/oxZeXhJv5sc/MBJ5jFKWmWs+oJHw0UXLZjmf931+Vw==}
- '@vitest/runner@3.2.7':
- resolution: {integrity: sha512-sB9y4ovltoQP+WaUPwmSxO9WIg9Ig694Di5PalVPsYHklAdE027mehpWF2SQSVq+k6sFgaivbTjTJwZLSHbedA==}
-
'@vitest/runner@4.1.11':
resolution: {integrity: sha512-LztvUgdwMNJMIkj3hQnnxiC2Xy1zNxq928W/xhjCLaNCzqTZOudjwbQf6v9IntZGPw132i2Lq2rgTRZHD3JHNw==}
- '@vitest/snapshot@3.2.7':
- resolution: {integrity: sha512-7C+MwShwtBSI5Buwoyg3s/iY1eHL9PKAf+O1wVh/TdnjXUtkoL/9YQtre90i4MtNXM6edP1wJ2zOBpfCyhIS7g==}
-
'@vitest/snapshot@4.1.11':
resolution: {integrity: sha512-pN7ikn1ON7h8ee4gIAp4AzyK+zBtJPzVbqOgu5LCEh4VaJVbPQcgYQYJIMGQPXVeJJq1fnfazis7a5pFNPahog==}
- '@vitest/spy@3.2.7':
- resolution: {integrity: sha512-Q2eQGI6d2L/hBtZ0qNuKcAGid68XK6cv1xsoaIma6PaJhHPoqcEJhYpXZ/5myCMqkNgtP6UKuBhbc0nHKnrkuQ==}
-
'@vitest/spy@4.1.11':
resolution: {integrity: sha512-apNa/prQy2qCeywhnixOHPRCgGNhvg7T4Dapfl1GahLp/R+uhBm5cPyFoNVyqsNd2h1nJxL6BqqdIjiABL60YA==}
- '@vitest/utils@3.2.7':
- resolution: {integrity: sha512-x6BDOd7dyo3PFLY3I9/HJ25X/6OurhGXk2/B9gOZNPF7XDVjeBK4k01lQE5uvDpbuheErh91qYuE1E2OEjK3Rw==}
-
'@vitest/utils@4.1.11':
resolution: {integrity: sha512-zTCVGpyFsGWBhllOyKlTw/vnr6D9qxsfSDyfbyZmTyjHw5N/VuvzHpHoQjm2ZJzn4RJgx5w4r7V0er69CmLgPQ==}
@@ -1934,10 +1666,6 @@ packages:
buffer@5.7.1:
resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==}
- cac@6.7.14:
- resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==}
- engines: {node: '>=8'}
-
cachedir@2.4.0:
resolution: {integrity: sha512-9EtFOZR8g22CL7BWjJ9BUx1+A/djkofnyW3aOXZORNW2kxoUpx2h+uN2cOqwPmFhnpVmxg+KW2OjOSgChTEvsQ==}
engines: {node: '>=6'}
@@ -1956,10 +1684,6 @@ packages:
caseless@0.12.0:
resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==}
- chai@5.3.3:
- resolution: {integrity: sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw==}
- engines: {node: '>=18'}
-
chai@6.2.2:
resolution: {integrity: sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==}
engines: {node: '>=18'}
@@ -1971,10 +1695,6 @@ packages:
chardet@2.2.0:
resolution: {integrity: sha512-rddelWYNPRrXq6PtNEN2S3f6t9ILzvqaN5pVgi4kqt9jHQaXIial9PznB5iSPVlQSLNaaH22ItWz3EJtQ10+OA==}
- check-error@2.1.3:
- resolution: {integrity: sha512-PAJdDJusoxnwm1VwW07VWwUN1sl7smmC3OKggvndJFadxxDRyFJBX/ggnu/KE4kQAB7a3Dp8f/YXC1FlUprWmA==}
- engines: {node: '>= 16'}
-
check-more-types@2.24.0:
resolution: {integrity: sha512-Pj779qHxV2tuapviy1bSZNEL1maXr13bPYpsvSDB68HlYcYuhlDrmGd63i0JHMCLKzc7rUSNIrpdJlhVlNwrxA==}
engines: {node: '>= 0.8.0'}
@@ -2110,10 +1830,6 @@ packages:
decimal.js@10.6.0:
resolution: {integrity: sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==}
- deep-eql@5.0.2:
- resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==}
- engines: {node: '>=6'}
-
deepmerge@4.3.1:
resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==}
engines: {node: '>=0.10.0'}
@@ -2176,9 +1892,6 @@ packages:
resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==}
engines: {node: '>= 0.4'}
- es-module-lexer@1.7.0:
- resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==}
-
es-module-lexer@2.3.2:
resolution: {integrity: sha512-poHGpORABojJJucnV9KbOavETW8lBVnphkW77ER5/BQ5Fz7oXSoCNek7IH3vR5nRjdsEz926ibFYX8KtLQmdyw==}
@@ -2190,11 +1903,6 @@ packages:
resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==}
engines: {node: '>= 0.4'}
- esbuild@0.25.12:
- resolution: {integrity: sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==}
- engines: {node: '>=18'}
- hasBin: true
-
esbuild@0.28.2:
resolution: {integrity: sha512-HKVLS8dvII+xoKW9kmqxbRKrnWEXfJJr/FZhhJmiqIB0e053QNYFqOBouTMO/k5sID4MvCiUCvv8b9M4h32wIA==}
engines: {node: '>=18'}
@@ -2515,9 +2223,6 @@ packages:
js-tokens@4.0.0:
resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
- js-tokens@9.0.1:
- resolution: {integrity: sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==}
-
js-yaml@3.15.0:
resolution: {integrity: sha512-ttBQIIQPDeLjpPOohtUdXuXUVoA2uIB6fEH9HyJ7234s5mBJ5wTx20njxplLZQgLaOfpmPQA7X2t5AX6tIPbog==}
hasBin: true
@@ -2675,9 +2380,6 @@ packages:
resolution: {integrity: sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==}
engines: {node: '>=10'}
- loupe@3.2.1:
- resolution: {integrity: sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ==}
-
lru-cache@10.4.3:
resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==}
@@ -2747,11 +2449,6 @@ packages:
ms@2.1.3:
resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
- nanoid@3.3.16:
- resolution: {integrity: sha512-bzlKTyNJ7+LdGIIwy8ijFpIqEQIvafahV7eYykJ8Cvh42EdJeODoJ6gUJXpQJvej1BddH8OqTXZNE/KfbWAu8Q==}
- engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
- hasBin: true
-
nanoid@3.3.18:
resolution: {integrity: sha512-DTg4MJbGMWkfi6VZFdNt2/caMbQy4Ou+Op/hJQvGEWcnVfoA1QA+xzRKAzw9jD6+GVOOeYr/mIcuDSdug6F6+w==}
engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
@@ -2841,10 +2538,6 @@ packages:
pathe@2.0.3:
resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==}
- pathval@2.0.1:
- resolution: {integrity: sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ==}
- engines: {node: '>= 14.16'}
-
pend@1.2.0:
resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==}
@@ -2892,10 +2585,6 @@ packages:
resolution: {integrity: sha512-LKWqWJRhstyYo9pGvgor/ivk2w94eSjE3RGVuzLGlr3NmD8bf7RcYGze1mNdEHRP6TRP6rMuDHk5t44hnTRyow==}
engines: {node: '>=14.19.0'}
- postcss@8.5.22:
- resolution: {integrity: sha512-KBDEIpLrvpv16pp3K0Fw+UCoZfopFjjgeB+0tA/aaThfEE74kKDLrgg603YvOWJyg3+WYtyq3xYsQWsIyZlPqQ==}
- engines: {node: ^10 || ^12 || >=14}
-
postcss@8.5.26:
resolution: {integrity: sha512-u82N74LFzG8ca+dD8puPnplTXoGH4fTPpVGuIbt36G3qvNlkvfD0lEAZSxaly3KX8TS/L1A1gsCEmvKmBcVbkQ==}
engines: {node: ^10 || ^12 || >=14}
@@ -3131,9 +2820,6 @@ packages:
stackback@0.0.2:
resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==}
- std-env@3.10.0:
- resolution: {integrity: sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==}
-
std-env@4.2.0:
resolution: {integrity: sha512-oCUKSupKTHX53EyjDtuZQ64pjLJ6yYCtpmEw0goYxtjG9KpbRe8KAsl2tBUGU9DyMcJ0RwJ8GqJAFzMXcXW1Rw==}
@@ -3157,9 +2843,6 @@ packages:
resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==}
engines: {node: '>=8'}
- strip-literal@3.1.0:
- resolution: {integrity: sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg==}
-
supports-color@7.2.0:
resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
engines: {node: '>=8'}
@@ -3188,9 +2871,6 @@ packages:
tinybench@2.9.0:
resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==}
- tinyexec@0.3.2:
- resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==}
-
tinyexec@1.3.0:
resolution: {integrity: sha512-QKAl9m8gWWGHV8jZcPeym6j+XULi6tOf1mT83WYJ4Lk2ytW/uwAWkrP0uFsdoYMdueVJ0qs26wZ+23xeB4ibNQ==}
engines: {node: '>=18'}
@@ -3199,22 +2879,10 @@ packages:
resolution: {integrity: sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==}
engines: {node: '>=12.0.0'}
- tinypool@1.1.1:
- resolution: {integrity: sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg==}
- engines: {node: ^18.0.0 || >=20.0.0}
-
- tinyrainbow@2.0.0:
- resolution: {integrity: sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==}
- engines: {node: '>=14.0.0'}
-
tinyrainbow@3.1.1:
resolution: {integrity: sha512-yau8yJdTt989Mm0Bd/236QnzEiPf2xLLTqUZRUJOo/3CB078LSwzei343DgtJVmfJKJE3TMINY1u42SQsP6mXw==}
engines: {node: '>=14.0.0'}
- tinyspy@4.0.4:
- resolution: {integrity: sha512-azl+t0z7pw/z958Gy9svOTuzqIk6xq+NSheJzn5MMWtWTFywIacg2wUlzKFGtt3cthx0r2SxMK0yzJOR0IES7Q==}
- engines: {node: '>=14.0.0'}
-
tldts-core@6.1.86:
resolution: {integrity: sha512-Je6p7pkk+KMzMv2XXKmAE3McmolOQFdxkKw0R8EYNr7sELW46JqnNeTX8ybPiQgvg1ymCoF8LXs5fzFaZvJPTA==}
@@ -3331,91 +2999,6 @@ packages:
resolution: {integrity: sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==}
engines: {'0': node >=0.6.0}
- vite-node@3.2.4:
- resolution: {integrity: sha512-EbKSKh+bh1E1IFxeO0pg1n4dvoOTt0UDiXMd/qn++r98+jPO1xtJilvXldeuQ8giIB5IkpjCgMleHMNEsGH6pg==}
- engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0}
- hasBin: true
-
- vite@6.4.3:
- resolution: {integrity: sha512-NTKlcQjlAK7MlQoyb6LgaqHc8sso/pVyUJYWMws3jg21uTJw/LddqIFPcPqP6PzpgbIcZyKI85sFE4HBrQDA8A==}
- engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0}
- hasBin: true
- peerDependencies:
- '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0
- jiti: '>=1.21.0'
- less: '*'
- lightningcss: ^1.21.0
- sass: '*'
- sass-embedded: '*'
- stylus: '*'
- sugarss: '*'
- terser: ^5.16.0
- tsx: ^4.8.1
- yaml: ^2.4.2
- peerDependenciesMeta:
- '@types/node':
- optional: true
- jiti:
- optional: true
- less:
- optional: true
- lightningcss:
- optional: true
- sass:
- optional: true
- sass-embedded:
- optional: true
- stylus:
- optional: true
- sugarss:
- optional: true
- terser:
- optional: true
- tsx:
- optional: true
- yaml:
- optional: true
-
- vite@7.3.6:
- resolution: {integrity: sha512-4XP60spRGjSZFf1qYH+dJIkK2znL3zQfl9KkOV9MkkRR/3Dls0dxaBsQPTloEc5BLXWPL9vsOxopxyKoMmDueg==}
- engines: {node: ^20.19.0 || >=22.12.0}
- hasBin: true
- peerDependencies:
- '@types/node': ^20.19.0 || >=22.12.0
- jiti: '>=1.21.0'
- less: ^4.0.0
- lightningcss: ^1.21.0
- sass: ^1.70.0
- sass-embedded: ^1.70.0
- stylus: '>=0.54.8'
- sugarss: ^5.0.0
- terser: ^5.16.0
- tsx: ^4.8.1
- yaml: ^2.4.2
- peerDependenciesMeta:
- '@types/node':
- optional: true
- jiti:
- optional: true
- less:
- optional: true
- lightningcss:
- optional: true
- sass:
- optional: true
- sass-embedded:
- optional: true
- stylus:
- optional: true
- sugarss:
- optional: true
- terser:
- optional: true
- tsx:
- optional: true
- yaml:
- optional: true
-
vite@8.2.1:
resolution: {integrity: sha512-EU/eS7BH3XROHh2YnBefjM6DBKA6ZeMZEYQbj7NLWg5wHYlhB8B/Mayd5XsgWq+NFYccDOTemRpdETWR6Ka/lw==}
engines: {node: ^20.19.0 || >=22.12.0}
@@ -3467,34 +3050,6 @@ packages:
vite:
optional: true
- vitest@3.2.7:
- resolution: {integrity: sha512-KrxIJ62Fd89gfysR4WotlgZABiz2dqFPgqGzX7s+CwsqLFomRH7777ZcrOD6+WVAh7khPQP41A+BKbpcJFrdEg==}
- engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0}
- hasBin: true
- peerDependencies:
- '@edge-runtime/vm': '*'
- '@types/debug': ^4.1.12
- '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0
- '@vitest/browser': 3.2.7
- '@vitest/ui': 3.2.7
- happy-dom: '*'
- jsdom: '*'
- peerDependenciesMeta:
- '@edge-runtime/vm':
- optional: true
- '@types/debug':
- optional: true
- '@types/node':
- optional: true
- '@vitest/browser':
- optional: true
- '@vitest/ui':
- optional: true
- happy-dom:
- optional: true
- jsdom:
- optional: true
-
vitest@4.1.11:
resolution: {integrity: sha512-fhACrNXUidIbGSBr5FlbuBkO7VWC1ZyLl0DO4CU2DrQoAPxX84Ysxs+HeGQpii5lZWV1Q4gBZTTu49mF+A6Edw==}
engines: {node: ^20.0.0 || ^22.0.0 || >=24.0.0}
@@ -4593,159 +4148,81 @@ snapshots:
tslib: 2.8.1
optional: true
- '@esbuild/aix-ppc64@0.25.12':
- optional: true
-
'@esbuild/aix-ppc64@0.28.2':
optional: true
- '@esbuild/android-arm64@0.25.12':
- optional: true
-
'@esbuild/android-arm64@0.28.2':
optional: true
- '@esbuild/android-arm@0.25.12':
- optional: true
-
'@esbuild/android-arm@0.28.2':
optional: true
- '@esbuild/android-x64@0.25.12':
- optional: true
-
'@esbuild/android-x64@0.28.2':
optional: true
- '@esbuild/darwin-arm64@0.25.12':
- optional: true
-
'@esbuild/darwin-arm64@0.28.2':
optional: true
- '@esbuild/darwin-x64@0.25.12':
- optional: true
-
'@esbuild/darwin-x64@0.28.2':
optional: true
- '@esbuild/freebsd-arm64@0.25.12':
- optional: true
-
'@esbuild/freebsd-arm64@0.28.2':
optional: true
- '@esbuild/freebsd-x64@0.25.12':
- optional: true
-
'@esbuild/freebsd-x64@0.28.2':
optional: true
- '@esbuild/linux-arm64@0.25.12':
- optional: true
-
'@esbuild/linux-arm64@0.28.2':
optional: true
- '@esbuild/linux-arm@0.25.12':
- optional: true
-
'@esbuild/linux-arm@0.28.2':
optional: true
- '@esbuild/linux-ia32@0.25.12':
- optional: true
-
'@esbuild/linux-ia32@0.28.2':
optional: true
- '@esbuild/linux-loong64@0.25.12':
- optional: true
-
'@esbuild/linux-loong64@0.28.2':
optional: true
- '@esbuild/linux-mips64el@0.25.12':
- optional: true
-
'@esbuild/linux-mips64el@0.28.2':
optional: true
- '@esbuild/linux-ppc64@0.25.12':
- optional: true
-
'@esbuild/linux-ppc64@0.28.2':
optional: true
- '@esbuild/linux-riscv64@0.25.12':
- optional: true
-
'@esbuild/linux-riscv64@0.28.2':
optional: true
- '@esbuild/linux-s390x@0.25.12':
- optional: true
-
'@esbuild/linux-s390x@0.28.2':
optional: true
- '@esbuild/linux-x64@0.25.12':
- optional: true
-
'@esbuild/linux-x64@0.28.2':
optional: true
- '@esbuild/netbsd-arm64@0.25.12':
- optional: true
-
'@esbuild/netbsd-arm64@0.28.2':
optional: true
- '@esbuild/netbsd-x64@0.25.12':
- optional: true
-
'@esbuild/netbsd-x64@0.28.2':
optional: true
- '@esbuild/openbsd-arm64@0.25.12':
- optional: true
-
'@esbuild/openbsd-arm64@0.28.2':
optional: true
- '@esbuild/openbsd-x64@0.25.12':
- optional: true
-
'@esbuild/openbsd-x64@0.28.2':
optional: true
- '@esbuild/openharmony-arm64@0.25.12':
- optional: true
-
'@esbuild/openharmony-arm64@0.28.2':
optional: true
- '@esbuild/sunos-x64@0.25.12':
- optional: true
-
'@esbuild/sunos-x64@0.28.2':
optional: true
- '@esbuild/win32-arm64@0.25.12':
- optional: true
-
'@esbuild/win32-arm64@0.28.2':
optional: true
- '@esbuild/win32-ia32@0.25.12':
- optional: true
-
'@esbuild/win32-ia32@0.28.2':
optional: true
- '@esbuild/win32-x64@0.25.12':
- optional: true
-
'@esbuild/win32-x64@0.28.2':
optional: true
@@ -5094,44 +4571,6 @@ snapshots:
- utf-8-validate
- vite
- '@vitest/browser@3.2.7(playwright@1.61.1)(vite@6.4.3(@types/node@24.13.3)(lightningcss@1.33.0))(vitest@3.2.7)':
- dependencies:
- '@testing-library/dom': 10.4.1
- '@testing-library/user-event': 14.6.1(@testing-library/dom@10.4.1)
- '@vitest/mocker': 3.2.7(vite@6.4.3(@types/node@24.13.3)(lightningcss@1.33.0))
- '@vitest/utils': 3.2.7
- magic-string: 0.30.21
- sirv: 3.0.2
- tinyrainbow: 2.0.0
- vitest: 3.2.7(@types/node@24.13.3)(@vitest/browser@3.2.7)(jsdom@26.1.0)(lightningcss@1.33.0)
- ws: 8.21.1
- optionalDependencies:
- playwright: 1.61.1
- transitivePeerDependencies:
- - bufferutil
- - msw
- - utf-8-validate
- - vite
-
- '@vitest/browser@3.2.7(playwright@1.61.1)(vite@7.3.6(@types/node@24.13.3)(lightningcss@1.33.0))(vitest@3.2.7)':
- dependencies:
- '@testing-library/dom': 10.4.1
- '@testing-library/user-event': 14.6.1(@testing-library/dom@10.4.1)
- '@vitest/mocker': 3.2.7(vite@7.3.6(@types/node@24.13.3)(lightningcss@1.33.0))
- '@vitest/utils': 3.2.7
- magic-string: 0.30.21
- sirv: 3.0.2
- tinyrainbow: 2.0.0
- vitest: 3.2.7(@types/node@24.13.3)(@vitest/browser@3.2.7)(jsdom@26.1.0)(lightningcss@1.33.0)
- ws: 8.21.1
- optionalDependencies:
- playwright: 1.61.1
- transitivePeerDependencies:
- - bufferutil
- - msw
- - utf-8-validate
- - vite
-
'@vitest/browser@4.1.11(vite@8.2.1(@types/node@24.13.3)(esbuild@0.28.2))(vitest@4.1.11)':
dependencies:
'@blazediff/core': 1.9.1
@@ -5149,14 +4588,6 @@ snapshots:
- utf-8-validate
- vite
- '@vitest/expect@3.2.7':
- dependencies:
- '@types/chai': 5.2.3
- '@vitest/spy': 3.2.7
- '@vitest/utils': 3.2.7
- chai: 5.3.3
- tinyrainbow: 2.0.0
-
'@vitest/expect@4.1.11':
dependencies:
'@standard-schema/spec': 1.1.0
@@ -5166,22 +4597,6 @@ snapshots:
chai: 6.2.2
tinyrainbow: 3.1.1
- '@vitest/mocker@3.2.7(vite@6.4.3(@types/node@24.13.3)(lightningcss@1.33.0))':
- dependencies:
- '@vitest/spy': 3.2.7
- estree-walker: 3.0.3
- magic-string: 0.30.21
- optionalDependencies:
- vite: 6.4.3(@types/node@24.13.3)(lightningcss@1.33.0)
-
- '@vitest/mocker@3.2.7(vite@7.3.6(@types/node@24.13.3)(lightningcss@1.33.0))':
- dependencies:
- '@vitest/spy': 3.2.7
- estree-walker: 3.0.3
- magic-string: 0.30.21
- optionalDependencies:
- vite: 7.3.6(@types/node@24.13.3)(lightningcss@1.33.0)
-
'@vitest/mocker@4.1.11(vite@8.2.1(@types/node@24.13.3)(esbuild@0.28.2))':
dependencies:
'@vitest/spy': 4.1.11
@@ -5190,31 +4605,15 @@ snapshots:
optionalDependencies:
vite: 8.2.1(@types/node@24.13.3)(esbuild@0.28.2)
- '@vitest/pretty-format@3.2.7':
- dependencies:
- tinyrainbow: 2.0.0
-
'@vitest/pretty-format@4.1.11':
dependencies:
tinyrainbow: 3.1.1
- '@vitest/runner@3.2.7':
- dependencies:
- '@vitest/utils': 3.2.7
- pathe: 2.0.3
- strip-literal: 3.1.0
-
'@vitest/runner@4.1.11':
dependencies:
'@vitest/utils': 4.1.11
pathe: 2.0.3
- '@vitest/snapshot@3.2.7':
- dependencies:
- '@vitest/pretty-format': 3.2.7
- magic-string: 0.30.21
- pathe: 2.0.3
-
'@vitest/snapshot@4.1.11':
dependencies:
'@vitest/pretty-format': 4.1.11
@@ -5222,18 +4621,8 @@ snapshots:
magic-string: 0.30.21
pathe: 2.0.3
- '@vitest/spy@3.2.7':
- dependencies:
- tinyspy: 4.0.4
-
'@vitest/spy@4.1.11': {}
- '@vitest/utils@3.2.7':
- dependencies:
- '@vitest/pretty-format': 3.2.7
- loupe: 3.2.1
- tinyrainbow: 2.0.0
-
'@vitest/utils@4.1.11':
dependencies:
'@vitest/pretty-format': 4.1.11
@@ -5374,8 +4763,6 @@ snapshots:
base64-js: 1.5.1
ieee754: 1.2.1
- cac@6.7.14: {}
-
cachedir@2.4.0: {}
call-bind-apply-helpers@1.0.2:
@@ -5392,14 +4779,6 @@ snapshots:
caseless@0.12.0: {}
- chai@5.3.3:
- dependencies:
- assertion-error: 2.0.1
- check-error: 2.1.3
- deep-eql: 5.0.2
- loupe: 3.2.1
- pathval: 2.0.1
-
chai@6.2.2: {}
chalk@4.1.2:
@@ -5409,8 +4788,6 @@ snapshots:
chardet@2.2.0: {}
- check-error@2.1.3: {}
-
check-more-types@2.24.0: {}
chokidar@5.0.0:
@@ -5570,8 +4947,6 @@ snapshots:
decimal.js@10.6.0: {}
- deep-eql@5.0.2: {}
-
deepmerge@4.3.1: {}
delayed-stream@1.0.0: {}
@@ -5620,8 +4995,6 @@ snapshots:
es-errors@1.3.0: {}
- es-module-lexer@1.7.0: {}
-
es-module-lexer@2.3.2: {}
es-object-atoms@1.1.2:
@@ -5635,35 +5008,6 @@ snapshots:
has-tostringtag: 1.0.2
hasown: 2.0.4
- esbuild@0.25.12:
- optionalDependencies:
- '@esbuild/aix-ppc64': 0.25.12
- '@esbuild/android-arm': 0.25.12
- '@esbuild/android-arm64': 0.25.12
- '@esbuild/android-x64': 0.25.12
- '@esbuild/darwin-arm64': 0.25.12
- '@esbuild/darwin-x64': 0.25.12
- '@esbuild/freebsd-arm64': 0.25.12
- '@esbuild/freebsd-x64': 0.25.12
- '@esbuild/linux-arm': 0.25.12
- '@esbuild/linux-arm64': 0.25.12
- '@esbuild/linux-ia32': 0.25.12
- '@esbuild/linux-loong64': 0.25.12
- '@esbuild/linux-mips64el': 0.25.12
- '@esbuild/linux-ppc64': 0.25.12
- '@esbuild/linux-riscv64': 0.25.12
- '@esbuild/linux-s390x': 0.25.12
- '@esbuild/linux-x64': 0.25.12
- '@esbuild/netbsd-arm64': 0.25.12
- '@esbuild/netbsd-x64': 0.25.12
- '@esbuild/openbsd-arm64': 0.25.12
- '@esbuild/openbsd-x64': 0.25.12
- '@esbuild/openharmony-arm64': 0.25.12
- '@esbuild/sunos-x64': 0.25.12
- '@esbuild/win32-arm64': 0.25.12
- '@esbuild/win32-ia32': 0.25.12
- '@esbuild/win32-x64': 0.25.12
-
esbuild@0.28.2:
optionalDependencies:
'@esbuild/aix-ppc64': 0.28.2
@@ -6004,8 +5348,6 @@ snapshots:
js-tokens@4.0.0: {}
- js-tokens@9.0.1: {}
-
js-yaml@3.15.0:
dependencies:
argparse: 1.0.10
@@ -6159,8 +5501,6 @@ snapshots:
slice-ansi: 4.0.0
wrap-ansi: 6.2.0
- loupe@3.2.1: {}
-
lru-cache@10.4.3: {}
lru-cache@5.1.1:
@@ -6214,8 +5554,6 @@ snapshots:
ms@2.1.3: {}
- nanoid@3.3.16: {}
-
nanoid@3.3.18: {}
node-releases@2.0.52: {}
@@ -6282,8 +5620,6 @@ snapshots:
pathe@2.0.3: {}
- pathval@2.0.1: {}
-
pend@1.2.0: {}
performance-now@2.1.0: {}
@@ -6314,12 +5650,6 @@ snapshots:
pngjs@7.0.0: {}
- postcss@8.5.22:
- dependencies:
- nanoid: 3.3.16
- picocolors: 1.1.1
- source-map-js: 1.2.1
-
postcss@8.5.26:
dependencies:
nanoid: 3.3.18
@@ -6599,8 +5929,6 @@ snapshots:
stackback@0.0.2: {}
- std-env@3.10.0: {}
-
std-env@4.2.0: {}
string-width@4.2.3:
@@ -6621,10 +5949,6 @@ snapshots:
dependencies:
min-indent: 1.0.1
- strip-literal@3.1.0:
- dependencies:
- js-tokens: 9.0.1
-
supports-color@7.2.0:
dependencies:
has-flag: 4.0.0
@@ -6645,8 +5969,6 @@ snapshots:
tinybench@2.9.0: {}
- tinyexec@0.3.2: {}
-
tinyexec@1.3.0: {}
tinyglobby@0.2.17:
@@ -6654,14 +5976,8 @@ snapshots:
fdir: 6.5.0(picomatch@4.0.5)
picomatch: 4.0.5
- tinypool@1.1.1: {}
-
- tinyrainbow@2.0.0: {}
-
tinyrainbow@3.1.1: {}
- tinyspy@4.0.4: {}
-
tldts-core@6.1.86: {}
tldts@6.1.86:
@@ -6745,53 +6061,6 @@ snapshots:
core-util-is: 1.0.2
extsprintf: 1.3.0
- vite-node@3.2.4(@types/node@24.13.3)(lightningcss@1.33.0):
- dependencies:
- cac: 6.7.14
- debug: 4.4.3(supports-color@8.1.1)
- es-module-lexer: 1.7.0
- pathe: 2.0.3
- vite: 7.3.6(@types/node@24.13.3)(lightningcss@1.33.0)
- transitivePeerDependencies:
- - '@types/node'
- - jiti
- - less
- - lightningcss
- - sass
- - sass-embedded
- - stylus
- - sugarss
- - supports-color
- - terser
- - tsx
- - yaml
-
- vite@6.4.3(@types/node@24.13.3)(lightningcss@1.33.0):
- dependencies:
- esbuild: 0.25.12
- fdir: 6.5.0(picomatch@4.0.5)
- picomatch: 4.0.5
- postcss: 8.5.22
- rollup: 4.62.2
- tinyglobby: 0.2.17
- optionalDependencies:
- '@types/node': 24.13.3
- fsevents: 2.3.3
- lightningcss: 1.33.0
-
- vite@7.3.6(@types/node@24.13.3)(lightningcss@1.33.0):
- dependencies:
- esbuild: 0.28.2
- fdir: 6.5.0(picomatch@4.0.5)
- picomatch: 4.0.5
- postcss: 8.5.22
- rollup: 4.62.2
- tinyglobby: 0.2.17
- optionalDependencies:
- '@types/node': 24.13.3
- fsevents: 2.3.3
- lightningcss: 1.33.0
-
vite@8.2.1(@types/node@24.13.3)(esbuild@0.28.2):
dependencies:
lightningcss: 1.33.0
@@ -6808,49 +6077,6 @@ snapshots:
optionalDependencies:
vite: 8.2.1(@types/node@24.13.3)(esbuild@0.28.2)
- vitest@3.2.7(@types/node@24.13.3)(@vitest/browser@3.2.7)(jsdom@26.1.0)(lightningcss@1.33.0):
- dependencies:
- '@types/chai': 5.2.3
- '@vitest/expect': 3.2.7
- '@vitest/mocker': 3.2.7(vite@7.3.6(@types/node@24.13.3)(lightningcss@1.33.0))
- '@vitest/pretty-format': 3.2.7
- '@vitest/runner': 3.2.7
- '@vitest/snapshot': 3.2.7
- '@vitest/spy': 3.2.7
- '@vitest/utils': 3.2.7
- chai: 5.3.3
- debug: 4.4.3(supports-color@8.1.1)
- expect-type: 1.4.0
- magic-string: 0.30.21
- pathe: 2.0.3
- picomatch: 4.0.5
- std-env: 3.10.0
- tinybench: 2.9.0
- tinyexec: 0.3.2
- tinyglobby: 0.2.17
- tinypool: 1.1.1
- tinyrainbow: 2.0.0
- vite: 7.3.6(@types/node@24.13.3)(lightningcss@1.33.0)
- vite-node: 3.2.4(@types/node@24.13.3)(lightningcss@1.33.0)
- why-is-node-running: 2.3.0
- optionalDependencies:
- '@types/node': 24.13.3
- '@vitest/browser': 3.2.7(playwright@1.61.1)(vite@6.4.3(@types/node@24.13.3)(lightningcss@1.33.0))(vitest@3.2.7)
- jsdom: 26.1.0
- transitivePeerDependencies:
- - jiti
- - less
- - lightningcss
- - msw
- - sass
- - sass-embedded
- - stylus
- - sugarss
- - supports-color
- - terser
- - tsx
- - yaml
-
vitest@4.1.11(@types/node@24.13.3)(@vitest/browser-playwright@4.1.11)(jsdom@26.1.0)(vite@8.2.1(@types/node@24.13.3)(esbuild@0.28.2)):
dependencies:
'@vitest/expect': 4.1.11
diff --git a/scripts/test-examples.ts b/scripts/test-examples.ts
index 5718a99..b468139 100644
--- a/scripts/test-examples.ts
+++ b/scripts/test-examples.ts
@@ -2,9 +2,12 @@ import { spawn, exec, ChildProcess } from 'node:child_process';
import { promisify } from 'node:util';
const execAsync = promisify(exec);
-const examples = ['vite-6', 'vite-7', 'vite-8'];
-const pluginHookSsrDeprecation =
- "Plugin hook `options.ssr` is replaced with `this.environment.config.consumer === 'server'`.";
+const examples = ['vite-8'];
+const futureDeprecations = [
+ "Plugin hook `options.ssr` is replaced with `this.environment.config.consumer === 'server'`.",
+ 'Plugin hook `handleHotUpdate()` is replaced with `hotUpdate()`.',
+ 'The `server.ssrLoadModule` is replaced with Environment Runner.',
+];
const PORT = 4173;
const TEST_TIMEOUT = 5 * 60 * 1000; // 5 minutes
const cypressEnv = { ...process.env, ELECTRON_RUN_AS_NODE: undefined };
@@ -32,8 +35,10 @@ async function runExample(example) {
// Install and build
await execAsync('pnpm install', { cwd: examplePath });
const { stdout, stderr } = await execAsync('pnpm run build', { cwd: examplePath });
- if (`${stdout}\n${stderr}`.includes(pluginHookSsrDeprecation)) {
- throw new Error(`Vite's deprecated plugin hook SSR argument was used in ${example}`);
+ const output = `${stdout}\n${stderr}`;
+ const deprecation = futureDeprecations.find((message) => output.includes(message));
+ if (deprecation) {
+ throw new Error(`Vite future deprecation in ${example}: ${deprecation}`);
}
// Start preview server with timeout
diff --git a/src/boundary-modules.ts b/src/boundary-modules.ts
index ce9029f..9ace97f 100644
--- a/src/boundary-modules.ts
+++ b/src/boundary-modules.ts
@@ -27,16 +27,16 @@ export function boundaryModules(): Plugin {
// import graph — no directive transforms have run, so it walks
// straight through 'use server' modules into genuinely server-only
// code. That graph is legal once transforms split it, so the guard
- // must not fire on the scan pass (`options.scan`, the flag Vite's
- // scanner sets on plugin-container resolves in v6/7 and the rolldown
- // scanner in v8). Still claim the specifier: resolving to the empty
+ // must not fire on the scan pass (`options.scan`, set by Rolldown's
+ // dependency scanner). Still claim the specifier: resolving to the empty
// virtual module keeps the scanner from chasing `server-only` /
// `client-only` as missing bare dependencies, which would abort the
// scan all the same. Real dev/build module graphs resolve without
// the flag and stay fully guarded.
const scan = !!(options as { scan?: boolean } | undefined)?.scan;
+ const server = this.environment.config.consumer === 'server';
if (id === 'server-only') {
- if (!options?.ssr && !scan)
+ if (!server && !scan)
this.error(
`[@solidjs/vite-plugin] Attempt to import 'server-only' in a client module: ${importer}. ` +
`Code that uses this module must run only on the server — make sure it is only ` +
@@ -44,7 +44,7 @@ export function boundaryModules(): Plugin {
`reached exclusively from them).`,
);
} else if (id === 'client-only') {
- if (options?.ssr && !scan)
+ if (server && !scan)
this.error(
`[@solidjs/vite-plugin] Attempt to import 'client-only' in a server module: ${importer}. ` +
`Code that uses this module must run only in the browser — make sure it is only ` +
diff --git a/src/environment.ts b/src/environment.ts
index 392b2d9..a973f0a 100644
--- a/src/environment.ts
+++ b/src/environment.ts
@@ -1,3 +1,5 @@
+import type { RunnableDevEnvironment } from 'vite';
+
/**
* Cross-instance-safe stand-in for vite's `isRunnableDevEnvironment`.
*
@@ -10,7 +12,9 @@
* member (`RunnableDevEnvironment` is exactly "a DevEnvironment with a
* runner"), so presence-check it instead of trusting class identity.
*/
-export function isRunnableEnvironment(environment: unknown): boolean {
+export function isRunnableEnvironment(
+ environment: unknown,
+): environment is RunnableDevEnvironment {
return !!environment && typeof environment === 'object' && 'runner' in environment;
}
diff --git a/src/index.ts b/src/index.ts
index 002eba5..faf34f9 100644
--- a/src/index.ts
+++ b/src/index.ts
@@ -25,7 +25,7 @@ export type { ServerFunctionsFilter } from './server-functions/index.js';
export type { StartOptions };
import path from 'path';
import type { FilterPattern, Plugin, ViteDevServer } from 'vite';
-import { createFilter, version } from 'vite';
+import { createFilter, defaultClientConditions, defaultServerConditions } from 'vite';
import { getEnvironmentConsumer, isRunnableEnvironment } from './environment.js';
import { crawlFrameworkPkgs } from 'vitefu';
@@ -50,8 +50,6 @@ const LAZY_PLACEHOLDER_PREFIX = '__SOLID_LAZY_MODULE__:';
*/
const REFRESH_RUNTIME_SOURCE = 'solid-js/refresh';
-const viteVersionMajor = +version.split('.')[0];
-const isVite8 = viteVersionMajor >= 8;
const DEFAULT_STYLE_EXCLUDE = /node_modules/;
const VIRTUAL_MANIFEST_ID = 'virtual:solid-manifest';
@@ -803,30 +801,17 @@ export default function solidPlugin(options: Partial = {}): Plugin[] {
...solidPkgsConfig.optimizeDeps.include,
],
exclude: solidPkgsConfig.optimizeDeps.exclude,
- // Vite 8+ uses Rolldown for dependency scanning. Rolldown defaults to
- // React's automatic JSX runtime for .tsx files, injecting a
- // react/jsx-dev-runtime import that fails to resolve and aborts the
- // scan. 'preserve' is no fix: the scanner re-parses the transformed
- // output as plain JS, so any preserved JSX is a hard parse error
- // (issue #262). The classic runtime is the only scan-safe lowering:
- // it emits bare `React.createElement` calls without injecting any
- // import, and the scan output is never executed — it only exists so
- // rolldown can walk the import graph.
- ...(isVite8
- ? { rolldownOptions: { transform: { jsx: { runtime: 'classic' as const } } } }
- : {}),
+ // Keep Solid TSX from injecting React's automatic runtime during scanning.
+ rolldownOptions: { transform: { jsx: { runtime: 'classic' as const } } },
},
...(Object.keys(test).length ? { test } : {}),
};
},
- // @ts-ignore This hook only works in Vite 6
- async configEnvironment(name, config, opts) {
+ configEnvironment(name, config, opts) {
config.resolve ??= {};
// Emulate Vite default fallback for `resolve.conditions` if not set
if (config.resolve.conditions == null) {
- // @ts-ignore These exports only exist in Vite 6
- const { defaultClientConditions, defaultServerConditions } = await import('vite');
if (config.consumer === 'client' || name === 'client' || opts.isSsrTargetWebworker) {
config.resolve.conditions = [...defaultClientConditions];
} else {
@@ -1230,8 +1215,7 @@ export default function solidPlugin(options: Partial = {}): Plugin[] {
// would bake a manifest-less fallback into the server bundle. Every user
// of such a setup had to hand-write this ordering plugin; absorb it.
//
- // Semantics (Vite 7.1+; Vite 6 has no plugin `buildApp` hook and ignores
- // these, keeping its build-everything default):
+ // Semantics:
// - The first hook builds the client environment first, but only where
// the ordering matters: a client build that emits a manifest and
// actually has an input. It runs at *normal* order, deliberately not
diff --git a/src/server-functions/index.ts b/src/server-functions/index.ts
index 5d1f813..faeac2f 100644
--- a/src/server-functions/index.ts
+++ b/src/server-functions/index.ts
@@ -285,8 +285,6 @@ function invalidateModules(
result: ReturnType,
manifest: string,
): void {
- // `environments` requires Vite 6+; older versions just miss the eager
- // manifest invalidation (the debounced reload still converges).
if (server?.environments && result.invalidPreload) {
invalidateModule(server.environments.client.moduleGraph, manifest);
invalidateModule(server.environments.ssr.moduleGraph, manifest);
@@ -514,10 +512,7 @@ export function serverFunctions(
apply: 'serve',
configureServer(server) {
const ssrEnvironment = server.environments.ssr;
- if (
- internal.externalDevServer ||
- (ssrEnvironment && !isRunnableEnvironment(ssrEnvironment))
- ) {
+ if (internal.externalDevServer || !isRunnableEnvironment(ssrEnvironment)) {
return;
}
server.middlewares.use((req, res, next) => {
@@ -543,7 +538,7 @@ export function serverFunctions(
url.searchParams.get('id');
if (functionId) {
const entry = moduleForFunctionId(functionId);
- if (entry) await server.ssrLoadModule(moduleDevUrl(entry));
+ if (entry) await ssrEnvironment.runner.import(moduleDevUrl(entry));
}
// Dispatch through a module evaluated in the SSR environment so
// the handler shares the registry instance with the app modules.
@@ -551,7 +546,7 @@ export function serverFunctions(
// in, and dispatch goes through `handleRequest` instead — one
// middleware chain and one stub-backed request event front the
// endpoint exactly as they front page SSR.
- const handler = await server.ssrLoadModule(internal.ssrHandler ?? HANDLER_ID);
+ const handler = await ssrEnvironment.runner.import(internal.ssrHandler ?? HANDLER_ID);
// Both dispatch shapes carry the raw Node request on the event
// (the `options.event` seam), matching the SSR dev middleware
// and what a production Node entry passes.
@@ -567,7 +562,6 @@ export function serverFunctions(
);
await sendWebResponse(res, response);
})().catch((error) => {
- if (error instanceof Error) server.ssrFixStacktrace(error);
next(error);
});
});
diff --git a/src/ssr/index.ts b/src/ssr/index.ts
index 6cb53de..39125b6 100644
--- a/src/ssr/index.ts
+++ b/src/ssr/index.ts
@@ -12,7 +12,7 @@
// Both paths inject the Vite client, dev style patch, and entry CSS as
// `