From 272adb5070d7eec61beab09af06beeb7c18e3173 Mon Sep 17 00:00:00 2001 From: Ben McCann <322311+benmccann@users.noreply.github.com> Date: Thu, 12 Feb 2026 16:06:00 -0800 Subject: [PATCH 001/545] chore: enter pre-release mode for SvelteKit 3 (#15302) --- .changeset/config.json | 2 +- .changeset/pre.json | 54 +++++++++++++++++++++++++++++++++++ .github/workflows/ci.yml | 2 +- .github/workflows/release.yml | 2 +- 4 files changed, 57 insertions(+), 3 deletions(-) create mode 100644 .changeset/pre.json diff --git a/.changeset/config.json b/.changeset/config.json index b5a4060d1a52..d81c3e9bb053 100644 --- a/.changeset/config.json +++ b/.changeset/config.json @@ -4,7 +4,7 @@ "commit": false, "linked": [], "access": "public", - "baseBranch": "main", + "baseBranch": "version-3", "bumpVersionsWithWorkspaceProtocolOnly": true, "ignore": ["!(@sveltejs/*)"] } diff --git a/.changeset/pre.json b/.changeset/pre.json new file mode 100644 index 000000000000..095075f16771 --- /dev/null +++ b/.changeset/pre.json @@ -0,0 +1,54 @@ +{ + "mode": "pre", + "tag": "next", + "initialVersions": { + "@sveltejs/adapter-auto": "7.0.1", + "@sveltejs/adapter-cloudflare": "7.2.7", + "test-cloudflare-pages": "0.0.1", + "test-cloudflare-workers": "0.0.1", + "@sveltejs/adapter-netlify": "6.0.0", + "test-netlify-basic": "0.0.1", + "test-netlify-edge": "0.0.1", + "@sveltejs/adapter-node": "5.5.3", + "@sveltejs/adapter-static": "3.0.10", + "~TODO~": "0.0.1", + "@sveltejs/adapter-vercel": "6.3.1", + "@sveltejs/amp": "1.1.5", + "@sveltejs/enhanced-img": "0.10.2", + "enhanced-img-basics": "0.0.1", + "@sveltejs/kit": "2.51.0", + "test-amp": "0.0.1", + "test-async": "0.0.1", + "test-basics": "0.0.2-next.0", + "test-dev-only": "0.0.2-next.0", + "test-embed": "0.0.1", + "test-hash-based-routing": "0.0.1", + "test-no-ssr": "0.0.1", + "test-options": "0.0.1", + "test-options-2": "0.0.1", + "test-options-3": "0.0.1", + "test-prerendered-app-error-pages": "0.0.1", + "test-writes": "0.0.2-next.0", + "prerenderable-incorrect-fragment": "0.0.1", + "prerenderable-remote-function-error": "0.0.1", + "prerenderable-not-prerendered": "0.0.1", + "private-dynamic-env": "0.0.1", + "private-dynamic-env-dynamic-import": "0.0.1", + "private-static-env": "0.0.1", + "private-static-env-dynamic-import": "0.0.1", + "server-only-folder": "0.0.1", + "server-only-folder-dynamic-import": "0.0.1", + "server-only-module": "0.0.1", + "server-only-module-dynamic-import": "0.0.1", + "service-worker-dynamic-public-env": "0.0.1", + "service-worker-private-env": "0.0.1", + "syntax-error": "0.0.1", + "prerendering-test-basics": "0.0.2-next.0", + "prerendering-test-options": "0.0.1", + "prerendering-test-paths-base": "0.0.1", + "@sveltejs/package": "2.5.7", + "test-redirect-importer": "0.0.1", + "playground-basic": "0.0.0" + }, + "changesets": [] +} diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 6411dd2d5116..8f54dbac9157 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -3,7 +3,7 @@ name: CI on: push: branches: - - main + - version-3 pull_request: env: diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index b23fd398fc37..8bf648af281d 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -3,7 +3,7 @@ name: Release on: push: branches: - - main + - version-3 concurrency: # prevent two release workflows from running at once From cb9d416d05266b6237f2856fb94df5b8a9b04279 Mon Sep 17 00:00:00 2001 From: Conduitry Date: Thu, 12 Feb 2026 19:06:27 -0500 Subject: [PATCH 002/545] breaking: upgrade to cookie v1 (#13386) Co-authored-by: Ben McCann <322311+benmccann@users.noreply.github.com> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .changeset/chilly-berries-press.md | 5 + packages/kit/package.json | 3 +- packages/kit/src/exports/public.d.ts | 10 +- packages/kit/src/runtime/server/cookie.js | 33 +- packages/kit/src/runtime/server/fetch.js | 2 +- .../kit/src/runtime/server/page/types.d.ts | 4 +- packages/kit/types/index.d.ts | 10 +- pnpm-lock.yaml | 762 +++++++++--------- pnpm-workspace.yaml | 2 +- 9 files changed, 411 insertions(+), 420 deletions(-) create mode 100644 .changeset/chilly-berries-press.md diff --git a/.changeset/chilly-berries-press.md b/.changeset/chilly-berries-press.md new file mode 100644 index 000000000000..9932af210b54 --- /dev/null +++ b/.changeset/chilly-berries-press.md @@ -0,0 +1,5 @@ +--- +'@sveltejs/kit': major +--- + +breaking: upgrade to cookie v1. Cookie names must now contain only ASCII characters diff --git a/packages/kit/package.json b/packages/kit/package.json index 8e31472de265..4fdd78c277ce 100644 --- a/packages/kit/package.json +++ b/packages/kit/package.json @@ -20,9 +20,8 @@ "dependencies": { "@standard-schema/spec": "^1.0.0", "@sveltejs/acorn-typescript": "^1.0.5", - "@types/cookie": "^0.6.0", "acorn": "^8.14.1", - "cookie": "^0.6.0", + "cookie": "^1.1.1", "devalue": "^5.6.2", "esm-env": "^1.2.2", "kleur": "^4.1.5", diff --git a/packages/kit/src/exports/public.d.ts b/packages/kit/src/exports/public.d.ts index c6bc1dcce8df..a3fa18376ee5 100644 --- a/packages/kit/src/exports/public.d.ts +++ b/packages/kit/src/exports/public.d.ts @@ -265,13 +265,13 @@ export interface Cookies { * @param name the name of the cookie * @param opts the options, passed directly to `cookie.parse`. See documentation [here](https://github.com/jshttp/cookie#cookieparsestr-options) */ - get: (name: string, opts?: import('cookie').CookieParseOptions) => string | undefined; + get: (name: string, opts?: import('cookie').ParseOptions) => string | undefined; /** * Gets all cookies that were previously set with `cookies.set`, or from the request headers. * @param opts the options, passed directly to `cookie.parse`. See documentation [here](https://github.com/jshttp/cookie#cookieparsestr-options) */ - getAll: (opts?: import('cookie').CookieParseOptions) => Array<{ name: string; value: string }>; + getAll: (opts?: import('cookie').ParseOptions) => Array<{ name: string; value: string }>; /** * Sets a cookie. This will add a `set-cookie` header to the response, but also make the cookie available via `cookies.get` or `cookies.getAll` during the current request. @@ -286,7 +286,7 @@ export interface Cookies { set: ( name: string, value: string, - opts: import('cookie').CookieSerializeOptions & { path: string } + opts: import('cookie').SerializeOptions & { path: string } ) => void; /** @@ -296,7 +296,7 @@ export interface Cookies { * @param name the name of the cookie * @param opts the options, passed directly to `cookie.serialize`. The `path` must match the path of the cookie you want to delete. See documentation [here](https://github.com/jshttp/cookie#cookieserializename-value-options) */ - delete: (name: string, opts: import('cookie').CookieSerializeOptions & { path: string }) => void; + delete: (name: string, opts: import('cookie').SerializeOptions & { path: string }) => void; /** * Serialize a cookie name-value pair into a `Set-Cookie` header string, but don't apply it to the response. @@ -312,7 +312,7 @@ export interface Cookies { serialize: ( name: string, value: string, - opts: import('cookie').CookieSerializeOptions & { path: string } + opts: import('cookie').SerializeOptions & { path: string } ) => string; } diff --git a/packages/kit/src/runtime/server/cookie.js b/packages/kit/src/runtime/server/cookie.js index 1816ecd9ed0d..fe816df010c8 100644 --- a/packages/kit/src/runtime/server/cookie.js +++ b/packages/kit/src/runtime/server/cookie.js @@ -4,9 +4,6 @@ import { normalize_path, resolve } from '../../utils/url.js'; import { add_data_suffix } from '../pathname.js'; import { text_encoder } from '../utils.js'; -// eslint-disable-next-line no-control-regex -- control characters are invalid in cookie names -const INVALID_COOKIE_CHARACTER_REGEX = /[\x00-\x1F\x7F()<>@,;:"/[\]?={} \t]/; - /** * Tracks all cookies set during dev mode so we can emit warnings * when we detect that there's likely cookie misusage due to wrong paths @@ -49,7 +46,9 @@ function generate_cookie_key(domain, path, name) { */ export function get_cookies(request, url) { const header = request.headers.get('cookie') ?? ''; - const initial_cookies = parse(header, { decode: (value) => value }); + const initial_cookies = /** @type {Record} */ ( + parse(header, { decode: (value) => value }) + ); /** @type {string | undefined} */ let normalized_url; @@ -57,7 +56,7 @@ export function get_cookies(request, url) { /** @type {Map} */ const new_cookies = new Map(); - /** @type {import('cookie').CookieSerializeOptions} */ + /** @type {import('cookie').SerializeOptions} */ const defaults = { httpOnly: true, sameSite: 'lax', @@ -73,7 +72,7 @@ export function get_cookies(request, url) { /** * @param {string} name - * @param {import('cookie').CookieParseOptions} [opts] + * @param {import('cookie').ParseOptions} [opts] */ get(name, opts) { // Look for the most specific matching cookie from new_cookies @@ -115,7 +114,7 @@ export function get_cookies(request, url) { }, /** - * @param {import('cookie').CookieParseOptions} [opts] + * @param {import('cookie').ParseOptions} [opts] */ getAll(opts) { const cookies = parse(header, { decode: opts?.decode }); @@ -142,7 +141,11 @@ export function get_cookies(request, url) { cookies[c.name] = c.value; } - return Object.entries(cookies).map(([name, value]) => ({ name, value })); + return /** @type {Array<{ name: string; value: string }>} */ ( + Object.entries(cookies) + .filter(([, value]) => value != null) + .map(([name, value]) => ({ name, value })) + ); }, /** @@ -151,16 +154,6 @@ export function get_cookies(request, url) { * @param {import('./page/types.js').Cookie['options']} options */ set(name, value, options) { - // TODO: remove this check in 3.0 - const illegal_characters = name.match(INVALID_COOKIE_CHARACTER_REGEX); - if (illegal_characters) { - console.warn( - `The cookie name "${name}" will be invalid in SvelteKit 3.0 as it contains ${illegal_characters.join( - ' and ' - )}. See RFC 2616 for more details https://datatracker.ietf.org/doc/html/rfc2616#section-2.2` - ); - } - validate_options(options); set_internal(name, value, { ...defaults, ...options }); }, @@ -217,7 +210,9 @@ export function get_cookies(request, url) { // explicit header has highest precedence if (header) { - const parsed = parse(header, { decode: (value) => value }); + const parsed = /** @type {Record} */ ( + parse(header, { decode: (value) => value }) + ); for (const name in parsed) { combined_cookies[name] = parsed[name]; } diff --git a/packages/kit/src/runtime/server/fetch.js b/packages/kit/src/runtime/server/fetch.js index ee35cd5d36a9..41a12dd8cd89 100644 --- a/packages/kit/src/runtime/server/fetch.js +++ b/packages/kit/src/runtime/server/fetch.js @@ -164,7 +164,7 @@ export function create_fetch({ event, options, manifest, state, get_cookie_heade set_internal(name, value, { path, encode: (value) => value, - .../** @type {import('cookie').CookieSerializeOptions} */ (options) + .../** @type {import('cookie').SerializeOptions} */ (options) }); } } diff --git a/packages/kit/src/runtime/server/page/types.d.ts b/packages/kit/src/runtime/server/page/types.d.ts index f0d094d122c2..036114b5cf6e 100644 --- a/packages/kit/src/runtime/server/page/types.d.ts +++ b/packages/kit/src/runtime/server/page/types.d.ts @@ -1,4 +1,4 @@ -import { CookieSerializeOptions } from 'cookie'; +import { SerializeOptions } from 'cookie'; import { CspDirectives, ServerDataNode, @@ -39,7 +39,7 @@ export interface CspOpts { export interface Cookie { name: string; value: string; - options: CookieSerializeOptions & { path: string }; + options: SerializeOptions & { path: string }; } export type ServerDataSerializer = { diff --git a/packages/kit/types/index.d.ts b/packages/kit/types/index.d.ts index 9db4119631ea..2cce8b7592fe 100644 --- a/packages/kit/types/index.d.ts +++ b/packages/kit/types/index.d.ts @@ -240,13 +240,13 @@ declare module '@sveltejs/kit' { * @param name the name of the cookie * @param opts the options, passed directly to `cookie.parse`. See documentation [here](https://github.com/jshttp/cookie#cookieparsestr-options) */ - get: (name: string, opts?: import('cookie').CookieParseOptions) => string | undefined; + get: (name: string, opts?: import('cookie').ParseOptions) => string | undefined; /** * Gets all cookies that were previously set with `cookies.set`, or from the request headers. * @param opts the options, passed directly to `cookie.parse`. See documentation [here](https://github.com/jshttp/cookie#cookieparsestr-options) */ - getAll: (opts?: import('cookie').CookieParseOptions) => Array<{ name: string; value: string }>; + getAll: (opts?: import('cookie').ParseOptions) => Array<{ name: string; value: string }>; /** * Sets a cookie. This will add a `set-cookie` header to the response, but also make the cookie available via `cookies.get` or `cookies.getAll` during the current request. @@ -261,7 +261,7 @@ declare module '@sveltejs/kit' { set: ( name: string, value: string, - opts: import('cookie').CookieSerializeOptions & { path: string } + opts: import('cookie').SerializeOptions & { path: string } ) => void; /** @@ -271,7 +271,7 @@ declare module '@sveltejs/kit' { * @param name the name of the cookie * @param opts the options, passed directly to `cookie.serialize`. The `path` must match the path of the cookie you want to delete. See documentation [here](https://github.com/jshttp/cookie#cookieserializename-value-options) */ - delete: (name: string, opts: import('cookie').CookieSerializeOptions & { path: string }) => void; + delete: (name: string, opts: import('cookie').SerializeOptions & { path: string }) => void; /** * Serialize a cookie name-value pair into a `Set-Cookie` header string, but don't apply it to the response. @@ -287,7 +287,7 @@ declare module '@sveltejs/kit' { serialize: ( name: string, value: string, - opts: import('cookie').CookieSerializeOptions & { path: string } + opts: import('cookie').SerializeOptions & { path: string } ) => string; } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 78328efb810f..27f142487080 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -22,11 +22,11 @@ catalogs: specifier: ^5.0.0 version: 5.1.2 '@opentelemetry/sdk-node': - specifier: ^0.211.0 - version: 0.211.0 + specifier: ^0.212.0 + version: 0.212.0 '@opentelemetry/sdk-trace-node': specifier: ^2.0.1 - version: 2.5.0 + version: 2.5.1 '@playwright/test': specifier: 1.58.2 version: 1.58.2 @@ -92,7 +92,7 @@ catalogs: version: 3.0.0 svelte: specifier: ^5.48.4 - version: 5.48.4 + version: 5.49.2 svelte-check: specifier: ^4.3.4 version: 4.3.4 @@ -127,7 +127,7 @@ importers: version: 1.58.2 '@sveltejs/eslint-config': specifier: 'catalog:' - version: 8.2.0(@stylistic/eslint-plugin-js@2.1.0(eslint@9.34.0(jiti@2.4.2)))(eslint-config-prettier@9.1.0(eslint@9.34.0(jiti@2.4.2)))(eslint-plugin-n@17.16.1(eslint@9.34.0(jiti@2.4.2))(typescript@5.8.3))(eslint-plugin-svelte@3.9.3(eslint@9.34.0(jiti@2.4.2))(svelte@5.48.4)(ts-node@10.9.2(@types/node@18.19.119)(typescript@5.8.3)))(eslint@9.34.0(jiti@2.4.2))(typescript-eslint@8.43.0(eslint@9.34.0(jiti@2.4.2))(typescript@5.8.3))(typescript@5.8.3) + version: 8.2.0(@stylistic/eslint-plugin-js@2.1.0(eslint@9.34.0(jiti@2.4.2)))(eslint-config-prettier@9.1.0(eslint@9.34.0(jiti@2.4.2)))(eslint-plugin-n@17.16.1(eslint@9.34.0(jiti@2.4.2))(typescript@5.8.3))(eslint-plugin-svelte@3.9.3(eslint@9.34.0(jiti@2.4.2))(svelte@5.49.2)(ts-node@10.9.2(@types/node@18.19.119)(typescript@5.8.3)))(eslint@9.34.0(jiti@2.4.2))(typescript-eslint@8.43.0(eslint@9.34.0(jiti@2.4.2))(typescript@5.8.3))(typescript@5.8.3) '@svitejs/changesets-changelog-github-compact': specifier: 'catalog:' version: 1.2.0 @@ -139,7 +139,7 @@ importers: version: 3.6.0 prettier-plugin-svelte: specifier: ^3.4.0 - version: 3.4.0(prettier@3.6.0)(svelte@5.48.4) + version: 3.4.0(prettier@3.6.0)(svelte@5.49.2) typescript-eslint: specifier: 'catalog:' version: 8.43.0(eslint@9.34.0(jiti@2.4.2))(typescript@5.8.3) @@ -151,7 +151,7 @@ importers: version: link:../kit '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 6.2.4(svelte@5.48.4)(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) + version: 6.2.4(svelte@5.49.2)(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) '@types/node': specifier: 'catalog:' version: 18.19.119 @@ -200,13 +200,13 @@ importers: version: link:../../../../kit '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 6.2.4(svelte@5.48.4)(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) + version: 6.2.4(svelte@5.49.2)(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) server-side-dep: specifier: file:server-side-dep version: file:packages/adapter-cloudflare/test/apps/pages/server-side-dep svelte: specifier: 'catalog:' - version: 5.48.4 + version: 5.49.2 vite: specifier: 'catalog:' version: 6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) @@ -221,13 +221,13 @@ importers: version: link:../../../../kit '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 6.2.4(svelte@5.48.4)(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) + version: 6.2.4(svelte@5.49.2)(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) server-side-dep: specifier: file:server-side-dep version: file:packages/adapter-cloudflare/test/apps/workers/server-side-dep svelte: specifier: 'catalog:' - version: 5.48.4 + version: 5.49.2 vite: specifier: 'catalog:' version: 6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) @@ -273,7 +273,7 @@ importers: version: link:../kit '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 6.2.4(svelte@5.48.4)(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) + version: 6.2.4(svelte@5.49.2)(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) '@types/node': specifier: 'catalog:' version: 18.19.119 @@ -294,10 +294,10 @@ importers: version: link:../../../../kit '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 6.2.4(svelte@5.48.4)(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) + version: 6.2.4(svelte@5.49.2)(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) svelte: specifier: 'catalog:' - version: 5.48.4 + version: 5.49.2 vite: specifier: 'catalog:' version: 6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) @@ -309,10 +309,10 @@ importers: version: link:../../../../kit '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 6.2.4(svelte@5.48.4)(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) + version: 6.2.4(svelte@5.49.2)(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) svelte: specifier: 'catalog:' - version: 5.48.4 + version: 5.49.2 vite: specifier: 'catalog:' version: 6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) @@ -340,7 +340,7 @@ importers: version: link:../kit '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 6.2.4(svelte@5.48.4)(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) + version: 6.2.4(svelte@5.49.2)(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) '@types/node': specifier: 'catalog:' version: 18.19.119 @@ -367,7 +367,7 @@ importers: version: link:../kit '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 6.2.4(svelte@5.48.4)(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) + version: 6.2.4(svelte@5.49.2)(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) '@types/node': specifier: 'catalog:' version: 18.19.119 @@ -376,7 +376,7 @@ importers: version: 3.0.2 svelte: specifier: 'catalog:' - version: 5.48.4 + version: 5.49.2 typescript: specifier: ^5.3.3 version: 5.8.3 @@ -391,13 +391,13 @@ importers: version: link:../../../../kit '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 6.2.4(svelte@5.48.4)(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) + version: 6.2.4(svelte@5.49.2)(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) sirv-cli: specifier: 'catalog:' version: 3.0.0 svelte: specifier: 'catalog:' - version: 5.48.4 + version: 5.49.2 vite: specifier: 'catalog:' version: 6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) @@ -409,13 +409,13 @@ importers: version: link:../../../../kit '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 6.2.4(svelte@5.48.4)(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) + version: 6.2.4(svelte@5.49.2)(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) sirv-cli: specifier: 'catalog:' version: 3.0.0 svelte: specifier: 'catalog:' - version: 5.48.4 + version: 5.49.2 vite: specifier: 'catalog:' version: 6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) @@ -434,7 +434,7 @@ importers: version: link:../kit '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 6.2.4(svelte@5.48.4)(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) + version: 6.2.4(svelte@5.49.2)(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) '@types/node': specifier: 'catalog:' version: 18.19.119 @@ -464,7 +464,7 @@ importers: version: 0.34.4 svelte-parse-markup: specifier: ^0.1.5 - version: 0.1.5(svelte@5.48.4) + version: 0.1.5(svelte@5.49.2) vite-imagetools: specifier: ^9.0.3 version: 9.0.3(rollup@4.57.1) @@ -474,7 +474,7 @@ importers: devDependencies: '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 6.2.4(svelte@5.48.4)(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) + version: 6.2.4(svelte@5.49.2)(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) '@types/estree': specifier: 'catalog:' version: 1.0.8 @@ -486,7 +486,7 @@ importers: version: 4.57.1 svelte: specifier: 'catalog:' - version: 5.48.4 + version: 5.49.2 typescript: specifier: ^5.6.3 version: 5.8.3 @@ -507,10 +507,10 @@ importers: version: link:../../../../kit '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 6.2.4(svelte@5.48.4)(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) + version: 6.2.4(svelte@5.49.2)(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) svelte: specifier: 'catalog:' - version: 5.48.4 + version: 5.49.2 vite: specifier: 'catalog:' version: 6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) @@ -523,15 +523,12 @@ importers: '@sveltejs/acorn-typescript': specifier: ^1.0.5 version: 1.0.5(acorn@8.15.0) - '@types/cookie': - specifier: ^0.6.0 - version: 0.6.0 acorn: specifier: ^8.14.1 version: 8.15.0 cookie: - specifier: ^0.6.0 - version: 0.6.0 + specifier: ^1.1.1 + version: 1.1.1 devalue: specifier: ^5.6.2 version: 5.6.2 @@ -565,7 +562,7 @@ importers: version: 1.58.2 '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 6.2.4(svelte@5.48.4)(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) + version: 6.2.4(svelte@5.49.2)(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) '@types/connect': specifier: 'catalog:' version: 3.4.38 @@ -583,10 +580,10 @@ importers: version: 4.57.1 svelte: specifier: 'catalog:' - version: 5.48.4 + version: 5.49.2 svelte-preprocess: specifier: 'catalog:' - version: 6.0.0(postcss-load-config@3.1.4(postcss@8.5.6)(ts-node@10.9.2(@types/node@18.19.119)(typescript@5.8.3)))(postcss@8.5.6)(svelte@5.48.4)(typescript@5.8.3) + version: 6.0.0(postcss-load-config@3.1.4(postcss@8.5.6)(ts-node@10.9.2(@types/node@18.19.119)(typescript@5.8.3)))(postcss@8.5.6)(svelte@5.49.2)(typescript@5.8.3) typescript: specifier: ^5.3.3 version: 5.8.3 @@ -607,16 +604,16 @@ importers: version: link:../../.. '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 6.2.4(svelte@5.48.4)(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) + version: 6.2.4(svelte@5.49.2)(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) dropcss: specifier: 'catalog:' version: 1.0.16 svelte: specifier: 'catalog:' - version: 5.48.4 + version: 5.49.2 svelte-check: specifier: 'catalog:' - version: 4.3.4(picomatch@4.0.3)(svelte@5.48.4)(typescript@5.8.3) + version: 4.3.4(picomatch@4.0.3)(svelte@5.49.2)(typescript@5.8.3) typescript: specifier: ^5.5.4 version: 5.8.3 @@ -631,13 +628,13 @@ importers: version: link:../../.. '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 6.2.4(svelte@5.48.4)(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) + version: 6.2.4(svelte@5.49.2)(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) svelte: specifier: 'catalog:' - version: 5.48.4 + version: 5.49.2 svelte-check: specifier: 'catalog:' - version: 4.3.4(picomatch@4.0.3)(svelte@5.48.4)(typescript@5.8.3) + version: 4.3.4(picomatch@4.0.3)(svelte@5.49.2)(typescript@5.8.3) typescript: specifier: ^5.5.4 version: 5.8.3 @@ -655,25 +652,25 @@ importers: version: 1.9.0 '@opentelemetry/sdk-node': specifier: 'catalog:' - version: 0.211.0(@opentelemetry/api@1.9.0) + version: 0.212.0(@opentelemetry/api@1.9.0) '@opentelemetry/sdk-trace-node': specifier: 'catalog:' - version: 2.5.0(@opentelemetry/api@1.9.0) + version: 2.5.1(@opentelemetry/api@1.9.0) '@sveltejs/kit': specifier: workspace:^ version: link:../../.. '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 6.2.4(svelte@5.48.4)(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) + version: 6.2.4(svelte@5.49.2)(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) '@vitest/browser-playwright': specifier: 'catalog:' version: 4.0.16(playwright@1.58.2)(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0))(vitest@4.0.16) svelte: specifier: 'catalog:' - version: 5.48.4 + version: 5.49.2 svelte-check: specifier: 'catalog:' - version: 4.3.4(picomatch@4.0.3)(svelte@5.48.4)(typescript@5.8.3) + version: 4.3.4(picomatch@4.0.3)(svelte@5.49.2)(typescript@5.8.3) test-redirect-importer: specifier: workspace:* version: link:../../../../test-redirect-importer @@ -697,7 +694,7 @@ importers: version: link:../../.. '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 6.2.4(svelte@5.48.4)(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) + version: 6.2.4(svelte@5.49.2)(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) e2e-test-dep-error: specifier: file:./_test_dependencies/cjs-only version: e2e-test-dep-cjs-only@file:packages/kit/test/apps/dev-only/_test_dependencies/cjs-only @@ -730,10 +727,10 @@ importers: version: e2e-test-dep-cjs-only@file:packages/kit/test/apps/dev-only/_test_dependencies/cjs-only svelte: specifier: 'catalog:' - version: 5.48.4 + version: 5.49.2 svelte-check: specifier: 'catalog:' - version: 4.3.4(picomatch@4.0.3)(svelte@5.48.4)(typescript@5.8.3) + version: 4.3.4(picomatch@4.0.3)(svelte@5.49.2)(typescript@5.8.3) typescript: specifier: ^5.5.4 version: 5.8.3 @@ -748,13 +745,13 @@ importers: version: link:../../.. '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 6.2.4(svelte@5.48.4)(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) + version: 6.2.4(svelte@5.49.2)(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) svelte: specifier: 'catalog:' - version: 5.48.4 + version: 5.49.2 svelte-check: specifier: 'catalog:' - version: 4.3.4(picomatch@4.0.3)(svelte@5.48.4)(typescript@5.8.3) + version: 4.3.4(picomatch@4.0.3)(svelte@5.49.2)(typescript@5.8.3) typescript: specifier: ^5.5.4 version: 5.8.3 @@ -769,13 +766,13 @@ importers: version: link:../../.. '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 6.2.4(svelte@5.48.4)(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) + version: 6.2.4(svelte@5.49.2)(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) svelte: specifier: 'catalog:' - version: 5.48.4 + version: 5.49.2 svelte-check: specifier: 'catalog:' - version: 4.3.4(picomatch@4.0.3)(svelte@5.48.4)(typescript@5.8.3) + version: 4.3.4(picomatch@4.0.3)(svelte@5.49.2)(typescript@5.8.3) typescript: specifier: ^5.5.4 version: 5.8.3 @@ -790,13 +787,13 @@ importers: version: link:../../.. '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 6.2.4(svelte@5.48.4)(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) + version: 6.2.4(svelte@5.49.2)(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) svelte: specifier: 'catalog:' - version: 5.48.4 + version: 5.49.2 svelte-check: specifier: 'catalog:' - version: 4.3.4(picomatch@4.0.3)(svelte@5.48.4)(typescript@5.8.3) + version: 4.3.4(picomatch@4.0.3)(svelte@5.49.2)(typescript@5.8.3) typescript: specifier: ^5.5.4 version: 5.8.3 @@ -814,13 +811,13 @@ importers: version: link:../../.. '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 6.2.4(svelte@5.48.4)(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) + version: 6.2.4(svelte@5.49.2)(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) svelte: specifier: 'catalog:' - version: 5.48.4 + version: 5.49.2 svelte-check: specifier: 'catalog:' - version: 4.3.4(picomatch@4.0.3)(svelte@5.48.4)(typescript@5.8.3) + version: 4.3.4(picomatch@4.0.3)(svelte@5.49.2)(typescript@5.8.3) typescript: specifier: ^5.5.4 version: 5.8.3 @@ -838,13 +835,13 @@ importers: version: link:../../.. '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 6.2.4(svelte@5.48.4)(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) + version: 6.2.4(svelte@5.49.2)(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) svelte: specifier: 'catalog:' - version: 5.48.4 + version: 5.49.2 svelte-check: specifier: 'catalog:' - version: 4.3.4(picomatch@4.0.3)(svelte@5.48.4)(typescript@5.8.3) + version: 4.3.4(picomatch@4.0.3)(svelte@5.49.2)(typescript@5.8.3) typescript: specifier: ^5.5.4 version: 5.8.3 @@ -865,13 +862,13 @@ importers: version: link:../../.. '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 6.2.4(svelte@5.48.4)(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) + version: 6.2.4(svelte@5.49.2)(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) svelte: specifier: 'catalog:' - version: 5.48.4 + version: 5.49.2 svelte-check: specifier: 'catalog:' - version: 4.3.4(picomatch@4.0.3)(svelte@5.48.4)(typescript@5.8.3) + version: 4.3.4(picomatch@4.0.3)(svelte@5.49.2)(typescript@5.8.3) typescript: specifier: ^5.5.4 version: 5.8.3 @@ -886,13 +883,13 @@ importers: version: link:../../.. '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 6.2.4(svelte@5.48.4)(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) + version: 6.2.4(svelte@5.49.2)(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) svelte: specifier: 'catalog:' - version: 5.48.4 + version: 5.49.2 svelte-check: specifier: 'catalog:' - version: 4.3.4(picomatch@4.0.3)(svelte@5.48.4)(typescript@5.8.3) + version: 4.3.4(picomatch@4.0.3)(svelte@5.49.2)(typescript@5.8.3) typescript: specifier: ^5.5.4 version: 5.8.3 @@ -907,13 +904,13 @@ importers: version: link:../../.. '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 6.2.4(svelte@5.48.4)(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) + version: 6.2.4(svelte@5.49.2)(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) svelte: specifier: 'catalog:' - version: 5.48.4 + version: 5.49.2 svelte-check: specifier: 'catalog:' - version: 4.3.4(picomatch@4.0.3)(svelte@5.48.4)(typescript@5.8.3) + version: 4.3.4(picomatch@4.0.3)(svelte@5.49.2)(typescript@5.8.3) typescript: specifier: ^5.5.4 version: 5.8.3 @@ -937,13 +934,13 @@ importers: version: link:../../../.. '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 6.2.4(svelte@5.48.4)(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) + version: 6.2.4(svelte@5.49.2)(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) svelte: specifier: 'catalog:' - version: 5.48.4 + version: 5.49.2 svelte-check: specifier: 'catalog:' - version: 4.3.4(picomatch@4.0.3)(svelte@5.48.4)(typescript@5.8.3) + version: 4.3.4(picomatch@4.0.3)(svelte@5.49.2)(typescript@5.8.3) typescript: specifier: ^5.5.4 version: 5.8.3 @@ -961,13 +958,13 @@ importers: version: link:../../../.. '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 6.2.4(svelte@5.48.4)(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) + version: 6.2.4(svelte@5.49.2)(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) svelte: specifier: 'catalog:' - version: 5.48.4 + version: 5.49.2 svelte-check: specifier: 'catalog:' - version: 4.3.4(picomatch@4.0.3)(svelte@5.48.4)(typescript@5.8.3) + version: 4.3.4(picomatch@4.0.3)(svelte@5.49.2)(typescript@5.8.3) typescript: specifier: ^5.5.4 version: 5.8.3 @@ -985,13 +982,13 @@ importers: version: link:../../../.. '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 6.2.4(svelte@5.48.4)(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) + version: 6.2.4(svelte@5.49.2)(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) svelte: specifier: 'catalog:' - version: 5.48.4 + version: 5.49.2 svelte-check: specifier: 'catalog:' - version: 4.3.4(picomatch@4.0.3)(svelte@5.48.4)(typescript@5.8.3) + version: 4.3.4(picomatch@4.0.3)(svelte@5.49.2)(typescript@5.8.3) typescript: specifier: ^5.5.4 version: 5.8.3 @@ -1009,13 +1006,13 @@ importers: version: link:../../../.. '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 6.2.4(svelte@5.48.4)(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) + version: 6.2.4(svelte@5.49.2)(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) svelte: specifier: 'catalog:' - version: 5.48.4 + version: 5.49.2 svelte-check: specifier: 'catalog:' - version: 4.3.4(picomatch@4.0.3)(svelte@5.48.4)(typescript@5.8.3) + version: 4.3.4(picomatch@4.0.3)(svelte@5.49.2)(typescript@5.8.3) typescript: specifier: ^5.5.4 version: 5.8.3 @@ -1030,13 +1027,13 @@ importers: version: link:../../../.. '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 6.2.4(svelte@5.48.4)(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) + version: 6.2.4(svelte@5.49.2)(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) svelte: specifier: 'catalog:' - version: 5.48.4 + version: 5.49.2 svelte-check: specifier: 'catalog:' - version: 4.3.4(picomatch@4.0.3)(svelte@5.48.4)(typescript@5.8.3) + version: 4.3.4(picomatch@4.0.3)(svelte@5.49.2)(typescript@5.8.3) typescript: specifier: ^5.5.4 version: 5.8.3 @@ -1051,13 +1048,13 @@ importers: version: link:../../../.. '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 6.2.4(svelte@5.48.4)(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) + version: 6.2.4(svelte@5.49.2)(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) svelte: specifier: 'catalog:' - version: 5.48.4 + version: 5.49.2 svelte-check: specifier: 'catalog:' - version: 4.3.4(picomatch@4.0.3)(svelte@5.48.4)(typescript@5.8.3) + version: 4.3.4(picomatch@4.0.3)(svelte@5.49.2)(typescript@5.8.3) typescript: specifier: ^5.5.4 version: 5.8.3 @@ -1072,13 +1069,13 @@ importers: version: link:../../../.. '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 6.2.4(svelte@5.48.4)(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) + version: 6.2.4(svelte@5.49.2)(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) svelte: specifier: 'catalog:' - version: 5.48.4 + version: 5.49.2 svelte-check: specifier: 'catalog:' - version: 4.3.4(picomatch@4.0.3)(svelte@5.48.4)(typescript@5.8.3) + version: 4.3.4(picomatch@4.0.3)(svelte@5.49.2)(typescript@5.8.3) typescript: specifier: ^5.5.4 version: 5.8.3 @@ -1093,13 +1090,13 @@ importers: version: link:../../../.. '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 6.2.4(svelte@5.48.4)(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) + version: 6.2.4(svelte@5.49.2)(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) svelte: specifier: 'catalog:' - version: 5.48.4 + version: 5.49.2 svelte-check: specifier: 'catalog:' - version: 4.3.4(picomatch@4.0.3)(svelte@5.48.4)(typescript@5.8.3) + version: 4.3.4(picomatch@4.0.3)(svelte@5.49.2)(typescript@5.8.3) typescript: specifier: ^5.5.4 version: 5.8.3 @@ -1114,13 +1111,13 @@ importers: version: link:../../../.. '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 6.2.4(svelte@5.48.4)(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) + version: 6.2.4(svelte@5.49.2)(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) svelte: specifier: 'catalog:' - version: 5.48.4 + version: 5.49.2 svelte-check: specifier: 'catalog:' - version: 4.3.4(picomatch@4.0.3)(svelte@5.48.4)(typescript@5.8.3) + version: 4.3.4(picomatch@4.0.3)(svelte@5.49.2)(typescript@5.8.3) typescript: specifier: ^5.5.4 version: 5.8.3 @@ -1135,13 +1132,13 @@ importers: version: link:../../../.. '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 6.2.4(svelte@5.48.4)(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) + version: 6.2.4(svelte@5.49.2)(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) svelte: specifier: 'catalog:' - version: 5.48.4 + version: 5.49.2 svelte-check: specifier: 'catalog:' - version: 4.3.4(picomatch@4.0.3)(svelte@5.48.4)(typescript@5.8.3) + version: 4.3.4(picomatch@4.0.3)(svelte@5.49.2)(typescript@5.8.3) typescript: specifier: ^5.5.4 version: 5.8.3 @@ -1156,13 +1153,13 @@ importers: version: link:../../../.. '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 6.2.4(svelte@5.48.4)(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) + version: 6.2.4(svelte@5.49.2)(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) svelte: specifier: 'catalog:' - version: 5.48.4 + version: 5.49.2 svelte-check: specifier: 'catalog:' - version: 4.3.4(picomatch@4.0.3)(svelte@5.48.4)(typescript@5.8.3) + version: 4.3.4(picomatch@4.0.3)(svelte@5.49.2)(typescript@5.8.3) typescript: specifier: ^5.5.4 version: 5.8.3 @@ -1177,13 +1174,13 @@ importers: version: link:../../../.. '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 6.2.4(svelte@5.48.4)(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) + version: 6.2.4(svelte@5.49.2)(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) svelte: specifier: 'catalog:' - version: 5.48.4 + version: 5.49.2 svelte-check: specifier: 'catalog:' - version: 4.3.4(picomatch@4.0.3)(svelte@5.48.4)(typescript@5.8.3) + version: 4.3.4(picomatch@4.0.3)(svelte@5.49.2)(typescript@5.8.3) typescript: specifier: ^5.5.4 version: 5.8.3 @@ -1198,13 +1195,13 @@ importers: version: link:../../../.. '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 6.2.4(svelte@5.48.4)(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) + version: 6.2.4(svelte@5.49.2)(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) svelte: specifier: 'catalog:' - version: 5.48.4 + version: 5.49.2 svelte-check: specifier: 'catalog:' - version: 4.3.4(picomatch@4.0.3)(svelte@5.48.4)(typescript@5.8.3) + version: 4.3.4(picomatch@4.0.3)(svelte@5.49.2)(typescript@5.8.3) typescript: specifier: ^5.5.4 version: 5.8.3 @@ -1219,13 +1216,13 @@ importers: version: link:../../../.. '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 6.2.4(svelte@5.48.4)(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) + version: 6.2.4(svelte@5.49.2)(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) svelte: specifier: 'catalog:' - version: 5.48.4 + version: 5.49.2 svelte-check: specifier: 'catalog:' - version: 4.3.4(picomatch@4.0.3)(svelte@5.48.4)(typescript@5.8.3) + version: 4.3.4(picomatch@4.0.3)(svelte@5.49.2)(typescript@5.8.3) typescript: specifier: ^5.5.4 version: 5.8.3 @@ -1240,13 +1237,13 @@ importers: version: link:../../../.. '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 6.2.4(svelte@5.48.4)(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) + version: 6.2.4(svelte@5.49.2)(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) svelte: specifier: 'catalog:' - version: 5.48.4 + version: 5.49.2 svelte-check: specifier: 'catalog:' - version: 4.3.4(picomatch@4.0.3)(svelte@5.48.4)(typescript@5.8.3) + version: 4.3.4(picomatch@4.0.3)(svelte@5.49.2)(typescript@5.8.3) typescript: specifier: ^5.5.4 version: 5.8.3 @@ -1261,13 +1258,13 @@ importers: version: link:../../.. '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 6.2.4(svelte@5.48.4)(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) + version: 6.2.4(svelte@5.49.2)(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) svelte: specifier: 'catalog:' - version: 5.48.4 + version: 5.49.2 svelte-check: specifier: 'catalog:' - version: 4.3.4(picomatch@4.0.3)(svelte@5.48.4)(typescript@5.8.3) + version: 4.3.4(picomatch@4.0.3)(svelte@5.49.2)(typescript@5.8.3) typescript: specifier: ^5.5.4 version: 5.8.3 @@ -1285,13 +1282,13 @@ importers: version: link:../../.. '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 6.2.4(svelte@5.48.4)(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) + version: 6.2.4(svelte@5.49.2)(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) svelte: specifier: 'catalog:' - version: 5.48.4 + version: 5.49.2 svelte-check: specifier: 'catalog:' - version: 4.3.4(picomatch@4.0.3)(svelte@5.48.4)(typescript@5.8.3) + version: 4.3.4(picomatch@4.0.3)(svelte@5.49.2)(typescript@5.8.3) typescript: specifier: ^5.5.4 version: 5.8.3 @@ -1309,13 +1306,13 @@ importers: version: link:../../.. '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 6.2.4(svelte@5.48.4)(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) + version: 6.2.4(svelte@5.49.2)(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) svelte: specifier: 'catalog:' - version: 5.48.4 + version: 5.49.2 svelte-check: specifier: 'catalog:' - version: 4.3.4(picomatch@4.0.3)(svelte@5.48.4)(typescript@5.8.3) + version: 4.3.4(picomatch@4.0.3)(svelte@5.49.2)(typescript@5.8.3) typescript: specifier: ^5.5.4 version: 5.8.3 @@ -1342,11 +1339,11 @@ importers: version: 7.7.3 svelte2tsx: specifier: ~0.7.33 - version: 0.7.33(svelte@5.48.4)(typescript@5.8.3) + version: 0.7.33(svelte@5.49.2)(typescript@5.8.3) devDependencies: '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 6.2.4(svelte@5.48.4)(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) + version: 6.2.4(svelte@5.49.2)(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) '@types/node': specifier: 'catalog:' version: 18.19.119 @@ -1358,10 +1355,10 @@ importers: version: 3.6.0 svelte: specifier: 'catalog:' - version: 5.48.4 + version: 5.49.2 svelte-preprocess: specifier: 'catalog:' - version: 6.0.0(postcss-load-config@3.1.4(postcss@8.5.6)(ts-node@10.9.2(@types/node@18.19.119)(typescript@5.8.3)))(postcss@8.5.6)(svelte@5.48.4)(typescript@5.8.3) + version: 6.0.0(postcss-load-config@3.1.4(postcss@8.5.6)(ts-node@10.9.2(@types/node@18.19.119)(typescript@5.8.3)))(postcss@8.5.6)(svelte@5.49.2)(typescript@5.8.3) typescript: specifier: ^5.3.3 version: 5.8.3 @@ -1409,22 +1406,22 @@ importers: version: link:../../packages/package '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 6.2.4(svelte@5.48.4)(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) + version: 6.2.4(svelte@5.49.2)(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) prettier: specifier: ^3.3.2 version: 3.6.0 prettier-plugin-svelte: specifier: ^3.2.6 - version: 3.4.0(prettier@3.6.0)(svelte@5.48.4) + version: 3.4.0(prettier@3.6.0)(svelte@5.49.2) publint: specifier: 'catalog:' version: 0.3.0 svelte: specifier: 'catalog:' - version: 5.48.4 + version: 5.49.2 svelte-check: specifier: 'catalog:' - version: 4.3.4(picomatch@4.0.3)(svelte@5.48.4)(typescript@5.8.3) + version: 4.3.4(picomatch@4.0.3)(svelte@5.49.2)(typescript@5.8.3) typescript: specifier: ^5.5.0 version: 5.8.3 @@ -2105,12 +2102,12 @@ packages: '@fontsource/libre-barcode-128-text@5.1.0': resolution: {integrity: sha512-MC7foQFRT0NDcsqBWQua2T3gs/fh/uTowTxfoPqGQWjqroiMxRZhQh7jerjnpcI+Xi3yR5bwCo6W2uwCza1FRw==} - '@grpc/grpc-js@1.13.4': - resolution: {integrity: sha512-GsFaMXCkMqkKIvwCQjCrwH+GHbPKBjhwo/8ZuUkWHqbI73Kky9I+pQltrlT0+MWpedCoosda53lgjYfyEPgxBg==} + '@grpc/grpc-js@1.14.3': + resolution: {integrity: sha512-Iq8QQQ/7X3Sac15oB6p0FmUg/klxQvXLeileoqrTRGJYLV+/9tubbr9ipz0GKHjmXVsgFPo/+W+2cA8eNcR+XA==} engines: {node: '>=12.10.0'} - '@grpc/proto-loader@0.7.15': - resolution: {integrity: sha512-tMXdRCfYVixjuFK+Hk0Q1s38gV9zDiDJfWL3h1rv4Qc39oILCu1TRTDt7+fGUI8K4G1Fj125Hx/ru3azECWTyQ==} + '@grpc/proto-loader@0.8.0': + resolution: {integrity: sha512-rc1hOQtjIWGxcxpb9aHAfLpIctjEnsDehj0DAiVfBlmT84uvR0uUtN2hEi/ecvWVjXUGf5qPF4qEgiLOx1YIMQ==} engines: {node: '>=6'} hasBin: true @@ -2597,16 +2594,16 @@ packages: resolution: {integrity: sha512-9B9RU0H7Ya1Dx/Rkyc4stuBZSGVQF27WigitInx2QQoj6KUpEFYPKoWjdFTunJYxmXmh17HeBvbMa1EhGyPmqQ==} engines: {node: '>=8.0.0'} - '@opentelemetry/api-logs@0.211.0': - resolution: {integrity: sha512-swFdZq8MCdmdR22jTVGQDhwqDzcI4M10nhjXkLr1EsIzXgZBqm4ZlmmcWsg3TSNf+3mzgOiqveXmBLZuDi2Lgg==} + '@opentelemetry/api-logs@0.212.0': + resolution: {integrity: sha512-TEEVrLbNROUkYY51sBJGk7lO/OLjuepch8+hmpM6ffMJQ2z/KVCjdHuCFX6fJj8OkJP2zckPjrJzQtXU3IAsFg==} engines: {node: '>=8.0.0'} '@opentelemetry/api@1.9.0': resolution: {integrity: sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==} engines: {node: '>=8.0.0'} - '@opentelemetry/configuration@0.211.0': - resolution: {integrity: sha512-PNsCkzsYQKyv8wiUIsH+loC4RYyblOaDnVASBtKS22hK55ToWs2UP6IsrcfSWWn54wWTvVe2gnfwz67Pvrxf2Q==} + '@opentelemetry/configuration@0.212.0': + resolution: {integrity: sha512-D8sAY6RbqMa1W8lCeiaSL2eMCW2MF87QI3y+I6DQE1j+5GrDMwiKPLdzpa/2/+Zl9v1//74LmooCTCJBvWR8Iw==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': ^1.9.0 @@ -2617,8 +2614,8 @@ packages: peerDependencies: '@opentelemetry/api': '>=1.0.0 <1.10.0' - '@opentelemetry/context-async-hooks@2.5.0': - resolution: {integrity: sha512-uOXpVX0ZjO7heSVjhheW2XEPrhQAWr2BScDPoZ9UDycl5iuHG+Usyc3AIfG6kZeC1GyLpMInpQ6X5+9n69yOFw==} + '@opentelemetry/context-async-hooks@2.5.1': + resolution: {integrity: sha512-MHbu8XxCHcBn6RwvCt2Vpn1WnLMNECfNKYB14LI5XypcgH4IE0/DiVifVR9tAkwPMyLXN8dOoPJfya3IryLQVw==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': '>=1.0.0 <1.10.0' @@ -2629,74 +2626,74 @@ packages: peerDependencies: '@opentelemetry/api': '>=1.0.0 <1.10.0' - '@opentelemetry/core@2.5.0': - resolution: {integrity: sha512-ka4H8OM6+DlUhSAZpONu0cPBtPPTQKxbxVzC4CzVx5+K4JnroJVBtDzLAMx4/3CDTJXRvVFhpFjtl4SaiTNoyQ==} + '@opentelemetry/core@2.5.1': + resolution: {integrity: sha512-Dwlc+3HAZqpgTYq0MUyZABjFkcrKTePwuiFVLjahGD8cx3enqihmpAmdgNFO1R4m/sIe5afjJrA25Prqy4NXlA==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': '>=1.0.0 <1.10.0' - '@opentelemetry/exporter-logs-otlp-grpc@0.211.0': - resolution: {integrity: sha512-UhOoWENNqyaAMP/dL1YXLkXt6ZBtovkDDs1p4rxto9YwJX1+wMjwg+Obfyg2kwpcMoaiIFT3KQIcLNW8nNGNfQ==} + '@opentelemetry/exporter-logs-otlp-grpc@0.212.0': + resolution: {integrity: sha512-/0bk6fQG+eSFZ4L6NlckGTgUous/ib5+OVdg0x4OdwYeHzV3lTEo3it1HgnPY6UKpmX7ki+hJvxjsOql8rCeZA==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/exporter-logs-otlp-http@0.211.0': - resolution: {integrity: sha512-c118Awf1kZirHkqxdcF+rF5qqWwNjJh+BB1CmQvN9AQHC/DUIldy6dIkJn3EKlQnQ3HmuNRKc/nHHt5IusN7mA==} + '@opentelemetry/exporter-logs-otlp-http@0.212.0': + resolution: {integrity: sha512-JidJasLwG/7M9RTxV/64xotDKmFAUSBc9SNlxI32QYuUMK5rVKhHNWMPDzC7E0pCAL3cu+FyiKvsTwLi2KqPYw==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/exporter-logs-otlp-proto@0.211.0': - resolution: {integrity: sha512-kMvfKMtY5vJDXeLnwhrZMEwhZ2PN8sROXmzacFU/Fnl4Z79CMrOaL7OE+5X3SObRYlDUa7zVqaXp9ZetYCxfDQ==} + '@opentelemetry/exporter-logs-otlp-proto@0.212.0': + resolution: {integrity: sha512-RpKB5UVfxc7c6Ta1UaCrxXDTQ0OD7BCGT66a97Q5zR1x3+9fw4dSaiqMXT/6FAWj2HyFbem6Rcu1UzPZikGTWQ==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/exporter-metrics-otlp-grpc@0.211.0': - resolution: {integrity: sha512-D/U3G8L4PzZp8ot5hX9wpgbTymgtLZCiwR7heMe4LsbGV4OdctS1nfyvaQHLT6CiGZ6FjKc1Vk9s6kbo9SWLXQ==} + '@opentelemetry/exporter-metrics-otlp-grpc@0.212.0': + resolution: {integrity: sha512-/6Gqf9wpBq22XsomR1i0iPGnbQtCq2Vwnrq5oiDPjYSqveBdK1jtQbhGfmpK2mLLxk4cPDtD1ZEYdIou5K8EaA==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/exporter-metrics-otlp-http@0.211.0': - resolution: {integrity: sha512-lfHXElPAoDSPpPO59DJdN5FLUnwi1wxluLTWQDayqrSPfWRnluzxRhD+g7rF8wbj1qCz0sdqABl//ug1IZyWvA==} + '@opentelemetry/exporter-metrics-otlp-http@0.212.0': + resolution: {integrity: sha512-8hgBw3aTTRpSTkU4b9MLf/2YVLnfWp+hfnLq/1Fa2cky+vx6HqTodo+Zv1GTIrAKMOOwgysOjufy0gTxngqeBg==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/exporter-metrics-otlp-proto@0.211.0': - resolution: {integrity: sha512-61iNbffEpyZv/abHaz3BQM3zUtA2kVIDBM+0dS9RK68ML0QFLRGYa50xVMn2PYMToyfszEPEgFC3ypGae2z8FA==} + '@opentelemetry/exporter-metrics-otlp-proto@0.212.0': + resolution: {integrity: sha512-C7I4WN+ghn3g7SnxXm2RK3/sRD0k/BYcXaK6lGU3yPjiM7a1M25MLuM6zY3PeVPPzzTZPfuS7+wgn/tHk768Xw==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/exporter-prometheus@0.211.0': - resolution: {integrity: sha512-cD0WleEL3TPqJbvxwz5MVdVJ82H8jl8mvMad4bNU24cB5SH2mRW5aMLDTuV4614ll46R//R3RMmci26mc2L99g==} + '@opentelemetry/exporter-prometheus@0.212.0': + resolution: {integrity: sha512-hJFLhCJba5MW5QHexZMHZdMhBfNqNItxOsN0AZojwD1W2kU9xM+BEICowFGJFo/vNV+I2BJvTtmuKafeDSAo7Q==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/exporter-trace-otlp-grpc@0.211.0': - resolution: {integrity: sha512-eFwx4Gvu6LaEiE1rOd4ypgAiWEdZu7Qzm2QNN2nJqPW1XDeAVH1eNwVcVQl+QK9HR/JCDZ78PZgD7xD/DBDqbw==} + '@opentelemetry/exporter-trace-otlp-grpc@0.212.0': + resolution: {integrity: sha512-9xTuYWp8ClBhljDGAoa0NSsJcsxJsC9zCFKMSZJp1Osb9pjXCMRdA6fwXtlubyqe7w8FH16EWtQNKx/FWi+Ghw==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/exporter-trace-otlp-http@0.211.0': - resolution: {integrity: sha512-F1Rv3JeMkgS//xdVjbQMrI3+26e5SXC7vXA6trx8SWEA0OUhw4JHB+qeHtH0fJn46eFItrYbL5m8j4qi9Sfaxw==} + '@opentelemetry/exporter-trace-otlp-http@0.212.0': + resolution: {integrity: sha512-v/0wMozNoiEPRolzC4YoPo4rAT0q8r7aqdnRw3Nu7IDN0CGFzNQazkfAlBJ6N5y0FYJkban7Aw5WnN73//6YlA==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/exporter-trace-otlp-proto@0.211.0': - resolution: {integrity: sha512-DkjXwbPiqpcPlycUojzG2RmR0/SIK8Gi9qWO9znNvSqgzrnAIE9x2n6yPfpZ+kWHZGafvsvA1lVXucTyyQa5Kg==} + '@opentelemetry/exporter-trace-otlp-proto@0.212.0': + resolution: {integrity: sha512-d1ivqPT0V+i0IVOOdzGaLqonjtlk5jYrW7ItutWzXL/Mk+PiYb59dymy/i2reot9dDnBFWfrsvxyqdutGF5Vig==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/exporter-zipkin@2.5.0': - resolution: {integrity: sha512-bk9VJgFgUAzkZzU8ZyXBSWiUGLOM3mZEgKJ1+jsZclhRnAoDNf+YBdq+G9R3cP0+TKjjWad+vVrY/bE/vRR9lA==} + '@opentelemetry/exporter-zipkin@2.5.1': + resolution: {integrity: sha512-Me6JVO7WqXGXsgr4+7o+B7qwKJQbt0c8WamFnxpkR43avgG9k/niTntwCaXiXUTjonWy0+61ZuX6CGzj9nn8CQ==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': ^1.0.0 @@ -2707,26 +2704,26 @@ packages: peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/instrumentation@0.211.0': - resolution: {integrity: sha512-h0nrZEC/zvI994nhg7EgQ8URIHt0uDTwN90r3qQUdZORS455bbx+YebnGeEuFghUT0HlJSrLF4iHw67f+odY+Q==} + '@opentelemetry/instrumentation@0.212.0': + resolution: {integrity: sha512-IyXmpNnifNouMOe0I/gX7ENfv2ZCNdYTF0FpCsoBcpbIHzk81Ww9rQTYTnvghszCg7qGrIhNvWC8dhEifgX9Jg==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/otlp-exporter-base@0.211.0': - resolution: {integrity: sha512-bp1+63V8WPV+bRI9EQG6E9YID1LIHYSZVbp7f+44g9tRzCq+rtw/o4fpL5PC31adcUsFiz/oN0MdLISSrZDdrg==} + '@opentelemetry/otlp-exporter-base@0.212.0': + resolution: {integrity: sha512-HoMv5pQlzbuxiMS0hN7oiUtg8RsJR5T7EhZccumIWxYfNo/f4wFc7LPDfFK6oHdG2JF/+qTocfqIHoom+7kLpw==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/otlp-grpc-exporter-base@0.211.0': - resolution: {integrity: sha512-mR5X+N4SuphJeb7/K7y0JNMC8N1mB6gEtjyTLv+TSAhl0ZxNQzpSKP8S5Opk90fhAqVYD4R0SQSAirEBlH1KSA==} + '@opentelemetry/otlp-grpc-exporter-base@0.212.0': + resolution: {integrity: sha512-YidOSlzpsun9uw0iyIWrQp6HxpMtBlECE3tiHGAsnpEqJWbAUWcMnIffvIuvTtTQ1OyRtwwaE79dWSQ8+eiB7g==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/otlp-transformer@0.211.0': - resolution: {integrity: sha512-julhCJ9dXwkOg9svuuYqqjXLhVaUgyUvO2hWbTxwjvLXX2rG3VtAaB0SzxMnGTuoCZizBT7Xqqm2V7+ggrfCXA==} + '@opentelemetry/otlp-transformer@0.212.0': + resolution: {integrity: sha512-bj7zYFOg6Db7NUwsRZQ/WoVXpAf41WY2gsd3kShSfdpZQDRKHWJiRZIg7A8HvWsf97wb05rMFzPbmSHyjEl9tw==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': ^1.3.0 @@ -2737,8 +2734,8 @@ packages: peerDependencies: '@opentelemetry/api': '>=1.0.0 <1.10.0' - '@opentelemetry/propagator-b3@2.5.0': - resolution: {integrity: sha512-g10m4KD73RjHrSvUge+sUxUl8m4VlgnGc6OKvo68a4uMfaLjdFU+AULfvMQE/APq38k92oGUxEzBsAZ8RN/YHg==} + '@opentelemetry/propagator-b3@2.5.1': + resolution: {integrity: sha512-AU6sZgunZrZv/LTeHP+9IQsSSH5p3PtOfDPe8VTdwYH69nZCfvvvXehhzu+9fMW2mgJMh5RVpiH8M9xuYOu5Dg==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': '>=1.0.0 <1.10.0' @@ -2749,8 +2746,8 @@ packages: peerDependencies: '@opentelemetry/api': '>=1.0.0 <1.10.0' - '@opentelemetry/propagator-jaeger@2.5.0': - resolution: {integrity: sha512-t70ErZCncAR/zz5AcGkL0TF25mJiK1FfDPEQCgreyAHZ+mRJ/bNUiCnImIBDlP3mSDXy6N09DbUEKq0ktW98Hg==} + '@opentelemetry/propagator-jaeger@2.5.1': + resolution: {integrity: sha512-8+SB94/aSIOVGDUPRFSBRHVUm2A8ye1vC6/qcf/D+TF4qat7PC6rbJhRxiUGDXZtMtKEPM/glgv5cBGSJQymSg==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': '>=1.0.0 <1.10.0' @@ -2761,26 +2758,26 @@ packages: peerDependencies: '@opentelemetry/api': '>=1.0.0 <1.10.0' - '@opentelemetry/resources@2.5.0': - resolution: {integrity: sha512-F8W52ApePshpoSrfsSk1H2yJn9aKjCrbpQF1M9Qii0GHzbfVeFUB+rc3X4aggyZD8x9Gu3Slua+s6krmq6Dt8g==} + '@opentelemetry/resources@2.5.1': + resolution: {integrity: sha512-BViBCdE/GuXRlp9k7nS1w6wJvY5fnFX5XvuEtWsTAOQFIO89Eru7lGW3WbfbxtCuZ/GbrJfAziXG0w0dpxL7eQ==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': '>=1.3.0 <1.10.0' - '@opentelemetry/sdk-logs@0.211.0': - resolution: {integrity: sha512-O5nPwzgg2JHzo59kpQTPUOTzFi0Nv5LxryG27QoXBciX3zWM3z83g+SNOHhiQVYRWFSxoWn1JM2TGD5iNjOwdA==} + '@opentelemetry/sdk-logs@0.212.0': + resolution: {integrity: sha512-qglb5cqTf0mOC1sDdZ7nfrPjgmAqs2OxkzOPIf2+Rqx8yKBK0pS7wRtB1xH30rqahBIut9QJDbDePyvtyqvH/Q==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': '>=1.4.0 <1.10.0' - '@opentelemetry/sdk-metrics@2.5.0': - resolution: {integrity: sha512-BeJLtU+f5Gf905cJX9vXFQorAr6TAfK3SPvTFqP+scfIpDQEJfRaGJWta7sJgP+m4dNtBf9y3yvBKVAZZtJQVA==} + '@opentelemetry/sdk-metrics@2.5.1': + resolution: {integrity: sha512-RKMn3QKi8nE71ULUo0g/MBvq1N4icEBo7cQSKnL3URZT16/YH3nSVgWegOjwx7FRBTrjOIkMJkCUn/ZFIEfn4A==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': '>=1.9.0 <1.10.0' - '@opentelemetry/sdk-node@0.211.0': - resolution: {integrity: sha512-+s1eGjoqmPCMptNxcJJD4IxbWJKNLOQFNKhpwkzi2gLkEbCj6LzSHJNhPcLeBrBlBLtlSpibM+FuS7fjZ8SSFQ==} + '@opentelemetry/sdk-node@0.212.0': + resolution: {integrity: sha512-tJzVDk4Lo44MdgJLlP+gdYdMnjxSNsjC/IiTxj5CFSnsjzpHXwifgl3BpUX67Ty3KcdubNVfedeBc/TlqHXwwg==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': '>=1.3.0 <1.10.0' @@ -2791,8 +2788,8 @@ packages: peerDependencies: '@opentelemetry/api': '>=1.0.0 <1.10.0' - '@opentelemetry/sdk-trace-base@2.5.0': - resolution: {integrity: sha512-VzRf8LzotASEyNDUxTdaJ9IRJ1/h692WyArDBInf5puLCjxbICD6XkHgpuudis56EndyS7LYFmtTMny6UABNdQ==} + '@opentelemetry/sdk-trace-base@2.5.1': + resolution: {integrity: sha512-iZH3Gw8cxQn0gjpOjJMmKLd9GIaNh/E3v3ST67vyzLSxHBs14HsG4dy7jMYyC5WXGdBVEcM7U/XTF5hCQxjDMw==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': '>=1.3.0 <1.10.0' @@ -2803,8 +2800,8 @@ packages: peerDependencies: '@opentelemetry/api': '>=1.0.0 <1.10.0' - '@opentelemetry/sdk-trace-node@2.5.0': - resolution: {integrity: sha512-O6N/ejzburFm2C84aKNrwJVPpt6HSTSq8T0ZUMq3xT2XmqT4cwxUItcL5UWGThYuq8RTcbH8u1sfj6dmRci0Ow==} + '@opentelemetry/sdk-trace-node@2.5.1': + resolution: {integrity: sha512-9lopQ6ZoElETOEN0csgmtEV5/9C7BMfA7VtF4Jape3i954b6sTY2k3Xw3CxUTKreDck/vpAuJM+EDo4zheUw+A==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': '>=1.0.0 <1.10.0' @@ -3193,9 +3190,6 @@ packages: '@types/connect@3.4.38': resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} - '@types/cookie@0.6.0': - resolution: {integrity: sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==} - '@types/deep-eql@4.0.2': resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==} @@ -3638,6 +3632,9 @@ packages: cjs-module-lexer@1.4.3: resolution: {integrity: sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q==} + cjs-module-lexer@2.2.0: + resolution: {integrity: sha512-4bHTS2YuzUvtoLjdy+98ykbNB5jS0+07EvFNXerqZQJ89F7DI6ET7OQo/HJuW6K0aVsKA9hj9/RVb2kQVOrPDQ==} + clipboardy@4.0.0: resolution: {integrity: sha512-5mOlNS0mhX0707P2I0aZ2V/cmHUEO/fL7VFLqszkhUsxt7RwnmrInf/eEQKlf5GzvYeHIjT+Ov1HRfNmymlG0w==} engines: {node: '>=18'} @@ -3718,16 +3715,12 @@ packages: cookie-es@1.2.2: resolution: {integrity: sha512-+W7VmiVINB+ywl1HGXJXmrqkOhpKrIiVZV6tQuV54ZyQC7MMuBt81Vc336GMLoHBq5hV/F9eXgt5Mnx0Rha5Fg==} - cookie@0.6.0: - resolution: {integrity: sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==} - engines: {node: '>= 0.6'} - cookie@0.7.2: resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==} engines: {node: '>= 0.6'} - cookie@1.0.2: - resolution: {integrity: sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA==} + cookie@1.1.1: + resolution: {integrity: sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==} engines: {node: '>=18'} copy-file@11.0.0: @@ -4073,8 +4066,8 @@ packages: resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} engines: {node: '>=0.10'} - esrap@2.2.1: - resolution: {integrity: sha512-GiYWG34AN/4CUyaWAgunGt0Rxvr1PTMlGC0vvEov/uOQYWne2bpN03Um+k8jT+q3op33mKouP2zeJ6OlM+qeUg==} + esrap@2.2.2: + resolution: {integrity: sha512-zA6497ha+qKvoWIK+WM9NAh5ni17sKZKhbS5B3PoYbBvaYHZWoS33zmFybmyqpn07RLUxSmn+RCls2/XF+d0oQ==} esrecurse@4.3.0: resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} @@ -4392,8 +4385,8 @@ packages: import-in-the-middle@1.15.0: resolution: {integrity: sha512-bpQy+CrsRmYmoPMAE/0G33iwRqwW4ouqdRg8jgbH3aKuCtOc8lxgmYXg2dMM92CRiGP660EtBcymH/eVUpCSaA==} - import-in-the-middle@2.0.0: - resolution: {integrity: sha512-yNZhyQYqXpkT0AKq3F3KLasUSK4fHvebNH5hOsKQw2dhGSALvQ4U0BqUc5suziKvydO5u5hgN2hy1RJaho8U5A==} + import-in-the-middle@2.0.6: + resolution: {integrity: sha512-3vZV3jX0XRFW3EJDTwzWoZa+RH1b8eTTx6YOCjglrLyPuepwoBti1k3L2dKwdCUrnVEfc5CuRuGstaC/uQJJaw==} imurmurhash@0.1.4: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} @@ -5588,8 +5581,8 @@ packages: svelte: ^3.55 || ^4.0.0-next.0 || ^4.0 || ^5.0.0-next.0 typescript: ^4.9.4 || ^5.0.0 - svelte@5.48.4: - resolution: {integrity: sha512-JV3E7ckuQwxGVm9GbECVtgrs57E9uDz95H2mYpo38QIJd+ET2aR8zDK/iWI8J7VJtib4bwnJ3MMc6FKBJ0hGrQ==} + svelte@5.49.2: + resolution: {integrity: sha512-PYLwnngYzyhKzqDlGVlCH4z+NVI8mC0/bTv15vw25CcdOhxENsOHIbQ36oj5DIf3oBazM+STbCAvaskpxtBmWA==} engines: {node: '>=18'} svgo@4.0.0: @@ -6614,12 +6607,12 @@ snapshots: '@fontsource/libre-barcode-128-text@5.1.0': {} - '@grpc/grpc-js@1.13.4': + '@grpc/grpc-js@1.14.3': dependencies: - '@grpc/proto-loader': 0.7.15 + '@grpc/proto-loader': 0.8.0 '@js-sdsl/ordered-map': 4.4.2 - '@grpc/proto-loader@0.7.15': + '@grpc/proto-loader@0.8.0': dependencies: lodash.camelcase: 4.3.0 long: 5.3.2 @@ -7128,7 +7121,7 @@ snapshots: dependencies: '@netlify/dev-utils': 4.3.3 '@netlify/redirect-parser': 15.0.3 - cookie: 1.0.2 + cookie: 1.1.1 jsonwebtoken: 9.0.2 netlify-redirector: 0.5.0 @@ -7206,23 +7199,23 @@ snapshots: dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/api-logs@0.211.0': + '@opentelemetry/api-logs@0.212.0': dependencies: '@opentelemetry/api': 1.9.0 '@opentelemetry/api@1.9.0': {} - '@opentelemetry/configuration@0.211.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/configuration@0.212.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.5.0(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 2.5.1(@opentelemetry/api@1.9.0) yaml: 2.8.0 '@opentelemetry/context-async-hooks@1.30.1(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/context-async-hooks@2.5.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/context-async-hooks@2.5.1(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -7231,114 +7224,115 @@ snapshots: '@opentelemetry/api': 1.9.0 '@opentelemetry/semantic-conventions': 1.28.0 - '@opentelemetry/core@2.5.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/core@2.5.1(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 '@opentelemetry/semantic-conventions': 1.36.0 - '@opentelemetry/exporter-logs-otlp-grpc@0.211.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/exporter-logs-otlp-grpc@0.212.0(@opentelemetry/api@1.9.0)': dependencies: - '@grpc/grpc-js': 1.13.4 + '@grpc/grpc-js': 1.14.3 '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.5.0(@opentelemetry/api@1.9.0) - '@opentelemetry/otlp-exporter-base': 0.211.0(@opentelemetry/api@1.9.0) - '@opentelemetry/otlp-grpc-exporter-base': 0.211.0(@opentelemetry/api@1.9.0) - '@opentelemetry/otlp-transformer': 0.211.0(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-logs': 0.211.0(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 2.5.1(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-exporter-base': 0.212.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-grpc-exporter-base': 0.212.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-transformer': 0.212.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-logs': 0.212.0(@opentelemetry/api@1.9.0) - '@opentelemetry/exporter-logs-otlp-http@0.211.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/exporter-logs-otlp-http@0.212.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/api-logs': 0.211.0 - '@opentelemetry/core': 2.5.0(@opentelemetry/api@1.9.0) - '@opentelemetry/otlp-exporter-base': 0.211.0(@opentelemetry/api@1.9.0) - '@opentelemetry/otlp-transformer': 0.211.0(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-logs': 0.211.0(@opentelemetry/api@1.9.0) + '@opentelemetry/api-logs': 0.212.0 + '@opentelemetry/core': 2.5.1(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-exporter-base': 0.212.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-transformer': 0.212.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-logs': 0.212.0(@opentelemetry/api@1.9.0) - '@opentelemetry/exporter-logs-otlp-proto@0.211.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/exporter-logs-otlp-proto@0.212.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/api-logs': 0.211.0 - '@opentelemetry/core': 2.5.0(@opentelemetry/api@1.9.0) - '@opentelemetry/otlp-exporter-base': 0.211.0(@opentelemetry/api@1.9.0) - '@opentelemetry/otlp-transformer': 0.211.0(@opentelemetry/api@1.9.0) - '@opentelemetry/resources': 2.5.0(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-logs': 0.211.0(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-trace-base': 2.5.0(@opentelemetry/api@1.9.0) + '@opentelemetry/api-logs': 0.212.0 + '@opentelemetry/core': 2.5.1(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-exporter-base': 0.212.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-transformer': 0.212.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 2.5.1(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-logs': 0.212.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': 2.5.1(@opentelemetry/api@1.9.0) - '@opentelemetry/exporter-metrics-otlp-grpc@0.211.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/exporter-metrics-otlp-grpc@0.212.0(@opentelemetry/api@1.9.0)': dependencies: - '@grpc/grpc-js': 1.13.4 + '@grpc/grpc-js': 1.14.3 '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.5.0(@opentelemetry/api@1.9.0) - '@opentelemetry/exporter-metrics-otlp-http': 0.211.0(@opentelemetry/api@1.9.0) - '@opentelemetry/otlp-exporter-base': 0.211.0(@opentelemetry/api@1.9.0) - '@opentelemetry/otlp-grpc-exporter-base': 0.211.0(@opentelemetry/api@1.9.0) - '@opentelemetry/otlp-transformer': 0.211.0(@opentelemetry/api@1.9.0) - '@opentelemetry/resources': 2.5.0(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-metrics': 2.5.0(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 2.5.1(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-metrics-otlp-http': 0.212.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-exporter-base': 0.212.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-grpc-exporter-base': 0.212.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-transformer': 0.212.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 2.5.1(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-metrics': 2.5.1(@opentelemetry/api@1.9.0) - '@opentelemetry/exporter-metrics-otlp-http@0.211.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/exporter-metrics-otlp-http@0.212.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.5.0(@opentelemetry/api@1.9.0) - '@opentelemetry/otlp-exporter-base': 0.211.0(@opentelemetry/api@1.9.0) - '@opentelemetry/otlp-transformer': 0.211.0(@opentelemetry/api@1.9.0) - '@opentelemetry/resources': 2.5.0(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-metrics': 2.5.0(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 2.5.1(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-exporter-base': 0.212.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-transformer': 0.212.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 2.5.1(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-metrics': 2.5.1(@opentelemetry/api@1.9.0) - '@opentelemetry/exporter-metrics-otlp-proto@0.211.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/exporter-metrics-otlp-proto@0.212.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.5.0(@opentelemetry/api@1.9.0) - '@opentelemetry/exporter-metrics-otlp-http': 0.211.0(@opentelemetry/api@1.9.0) - '@opentelemetry/otlp-exporter-base': 0.211.0(@opentelemetry/api@1.9.0) - '@opentelemetry/otlp-transformer': 0.211.0(@opentelemetry/api@1.9.0) - '@opentelemetry/resources': 2.5.0(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-metrics': 2.5.0(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 2.5.1(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-metrics-otlp-http': 0.212.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-exporter-base': 0.212.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-transformer': 0.212.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 2.5.1(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-metrics': 2.5.1(@opentelemetry/api@1.9.0) - '@opentelemetry/exporter-prometheus@0.211.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/exporter-prometheus@0.212.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.5.0(@opentelemetry/api@1.9.0) - '@opentelemetry/resources': 2.5.0(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-metrics': 2.5.0(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 2.5.1(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 2.5.1(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-metrics': 2.5.1(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.36.0 - '@opentelemetry/exporter-trace-otlp-grpc@0.211.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/exporter-trace-otlp-grpc@0.212.0(@opentelemetry/api@1.9.0)': dependencies: - '@grpc/grpc-js': 1.13.4 + '@grpc/grpc-js': 1.14.3 '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.5.0(@opentelemetry/api@1.9.0) - '@opentelemetry/otlp-exporter-base': 0.211.0(@opentelemetry/api@1.9.0) - '@opentelemetry/otlp-grpc-exporter-base': 0.211.0(@opentelemetry/api@1.9.0) - '@opentelemetry/otlp-transformer': 0.211.0(@opentelemetry/api@1.9.0) - '@opentelemetry/resources': 2.5.0(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-trace-base': 2.5.0(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 2.5.1(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-exporter-base': 0.212.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-grpc-exporter-base': 0.212.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-transformer': 0.212.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 2.5.1(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': 2.5.1(@opentelemetry/api@1.9.0) - '@opentelemetry/exporter-trace-otlp-http@0.211.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/exporter-trace-otlp-http@0.212.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.5.0(@opentelemetry/api@1.9.0) - '@opentelemetry/otlp-exporter-base': 0.211.0(@opentelemetry/api@1.9.0) - '@opentelemetry/otlp-transformer': 0.211.0(@opentelemetry/api@1.9.0) - '@opentelemetry/resources': 2.5.0(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-trace-base': 2.5.0(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 2.5.1(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-exporter-base': 0.212.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-transformer': 0.212.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 2.5.1(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': 2.5.1(@opentelemetry/api@1.9.0) - '@opentelemetry/exporter-trace-otlp-proto@0.211.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/exporter-trace-otlp-proto@0.212.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.5.0(@opentelemetry/api@1.9.0) - '@opentelemetry/otlp-exporter-base': 0.211.0(@opentelemetry/api@1.9.0) - '@opentelemetry/otlp-transformer': 0.211.0(@opentelemetry/api@1.9.0) - '@opentelemetry/resources': 2.5.0(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-trace-base': 2.5.0(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 2.5.1(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-exporter-base': 0.212.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-transformer': 0.212.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 2.5.1(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': 2.5.1(@opentelemetry/api@1.9.0) - '@opentelemetry/exporter-zipkin@2.5.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/exporter-zipkin@2.5.1(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.5.0(@opentelemetry/api@1.9.0) - '@opentelemetry/resources': 2.5.0(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-trace-base': 2.5.0(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 2.5.1(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 2.5.1(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': 2.5.1(@opentelemetry/api@1.9.0) '@opentelemetry/semantic-conventions': 1.36.0 '@opentelemetry/instrumentation@0.203.0(@opentelemetry/api@1.9.0)': @@ -7350,38 +7344,38 @@ snapshots: transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation@0.211.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/instrumentation@0.212.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/api-logs': 0.211.0 - import-in-the-middle: 2.0.0 + '@opentelemetry/api-logs': 0.212.0 + import-in-the-middle: 2.0.6 require-in-the-middle: 8.0.0 transitivePeerDependencies: - supports-color - '@opentelemetry/otlp-exporter-base@0.211.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/otlp-exporter-base@0.212.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.5.0(@opentelemetry/api@1.9.0) - '@opentelemetry/otlp-transformer': 0.211.0(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 2.5.1(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-transformer': 0.212.0(@opentelemetry/api@1.9.0) - '@opentelemetry/otlp-grpc-exporter-base@0.211.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/otlp-grpc-exporter-base@0.212.0(@opentelemetry/api@1.9.0)': dependencies: - '@grpc/grpc-js': 1.13.4 + '@grpc/grpc-js': 1.14.3 '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.5.0(@opentelemetry/api@1.9.0) - '@opentelemetry/otlp-exporter-base': 0.211.0(@opentelemetry/api@1.9.0) - '@opentelemetry/otlp-transformer': 0.211.0(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 2.5.1(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-exporter-base': 0.212.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-transformer': 0.212.0(@opentelemetry/api@1.9.0) - '@opentelemetry/otlp-transformer@0.211.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/otlp-transformer@0.212.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/api-logs': 0.211.0 - '@opentelemetry/core': 2.5.0(@opentelemetry/api@1.9.0) - '@opentelemetry/resources': 2.5.0(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-logs': 0.211.0(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-metrics': 2.5.0(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-trace-base': 2.5.0(@opentelemetry/api@1.9.0) + '@opentelemetry/api-logs': 0.212.0 + '@opentelemetry/core': 2.5.1(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 2.5.1(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-logs': 0.212.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-metrics': 2.5.1(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': 2.5.1(@opentelemetry/api@1.9.0) protobufjs: 8.0.0 '@opentelemetry/propagator-b3@1.30.1(@opentelemetry/api@1.9.0)': @@ -7389,20 +7383,20 @@ snapshots: '@opentelemetry/api': 1.9.0 '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.0) - '@opentelemetry/propagator-b3@2.5.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/propagator-b3@2.5.1(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.5.0(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 2.5.1(@opentelemetry/api@1.9.0) '@opentelemetry/propagator-jaeger@1.30.1(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.0) - '@opentelemetry/propagator-jaeger@2.5.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/propagator-jaeger@2.5.1(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.5.0(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 2.5.1(@opentelemetry/api@1.9.0) '@opentelemetry/resources@1.30.1(@opentelemetry/api@1.9.0)': dependencies: @@ -7410,51 +7404,51 @@ snapshots: '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.0) '@opentelemetry/semantic-conventions': 1.28.0 - '@opentelemetry/resources@2.5.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/resources@2.5.1(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.5.0(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 2.5.1(@opentelemetry/api@1.9.0) '@opentelemetry/semantic-conventions': 1.36.0 - '@opentelemetry/sdk-logs@0.211.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/sdk-logs@0.212.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/api-logs': 0.211.0 - '@opentelemetry/core': 2.5.0(@opentelemetry/api@1.9.0) - '@opentelemetry/resources': 2.5.0(@opentelemetry/api@1.9.0) + '@opentelemetry/api-logs': 0.212.0 + '@opentelemetry/core': 2.5.1(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 2.5.1(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-metrics@2.5.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/sdk-metrics@2.5.1(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.5.0(@opentelemetry/api@1.9.0) - '@opentelemetry/resources': 2.5.0(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 2.5.1(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 2.5.1(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-node@0.211.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/sdk-node@0.212.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/api-logs': 0.211.0 - '@opentelemetry/configuration': 0.211.0(@opentelemetry/api@1.9.0) - '@opentelemetry/context-async-hooks': 2.5.0(@opentelemetry/api@1.9.0) - '@opentelemetry/core': 2.5.0(@opentelemetry/api@1.9.0) - '@opentelemetry/exporter-logs-otlp-grpc': 0.211.0(@opentelemetry/api@1.9.0) - '@opentelemetry/exporter-logs-otlp-http': 0.211.0(@opentelemetry/api@1.9.0) - '@opentelemetry/exporter-logs-otlp-proto': 0.211.0(@opentelemetry/api@1.9.0) - '@opentelemetry/exporter-metrics-otlp-grpc': 0.211.0(@opentelemetry/api@1.9.0) - '@opentelemetry/exporter-metrics-otlp-http': 0.211.0(@opentelemetry/api@1.9.0) - '@opentelemetry/exporter-metrics-otlp-proto': 0.211.0(@opentelemetry/api@1.9.0) - '@opentelemetry/exporter-prometheus': 0.211.0(@opentelemetry/api@1.9.0) - '@opentelemetry/exporter-trace-otlp-grpc': 0.211.0(@opentelemetry/api@1.9.0) - '@opentelemetry/exporter-trace-otlp-http': 0.211.0(@opentelemetry/api@1.9.0) - '@opentelemetry/exporter-trace-otlp-proto': 0.211.0(@opentelemetry/api@1.9.0) - '@opentelemetry/exporter-zipkin': 2.5.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation': 0.211.0(@opentelemetry/api@1.9.0) - '@opentelemetry/propagator-b3': 2.5.0(@opentelemetry/api@1.9.0) - '@opentelemetry/propagator-jaeger': 2.5.0(@opentelemetry/api@1.9.0) - '@opentelemetry/resources': 2.5.0(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-logs': 0.211.0(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-metrics': 2.5.0(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-trace-base': 2.5.0(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-trace-node': 2.5.0(@opentelemetry/api@1.9.0) + '@opentelemetry/api-logs': 0.212.0 + '@opentelemetry/configuration': 0.212.0(@opentelemetry/api@1.9.0) + '@opentelemetry/context-async-hooks': 2.5.1(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 2.5.1(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-logs-otlp-grpc': 0.212.0(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-logs-otlp-http': 0.212.0(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-logs-otlp-proto': 0.212.0(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-metrics-otlp-grpc': 0.212.0(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-metrics-otlp-http': 0.212.0(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-metrics-otlp-proto': 0.212.0(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-prometheus': 0.212.0(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-trace-otlp-grpc': 0.212.0(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-trace-otlp-http': 0.212.0(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-trace-otlp-proto': 0.212.0(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-zipkin': 2.5.1(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.212.0(@opentelemetry/api@1.9.0) + '@opentelemetry/propagator-b3': 2.5.1(@opentelemetry/api@1.9.0) + '@opentelemetry/propagator-jaeger': 2.5.1(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 2.5.1(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-logs': 0.212.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-metrics': 2.5.1(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': 2.5.1(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-node': 2.5.1(@opentelemetry/api@1.9.0) '@opentelemetry/semantic-conventions': 1.36.0 transitivePeerDependencies: - supports-color @@ -7466,11 +7460,11 @@ snapshots: '@opentelemetry/resources': 1.30.1(@opentelemetry/api@1.9.0) '@opentelemetry/semantic-conventions': 1.28.0 - '@opentelemetry/sdk-trace-base@2.5.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/sdk-trace-base@2.5.1(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.5.0(@opentelemetry/api@1.9.0) - '@opentelemetry/resources': 2.5.0(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 2.5.1(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 2.5.1(@opentelemetry/api@1.9.0) '@opentelemetry/semantic-conventions': 1.36.0 '@opentelemetry/sdk-trace-node@1.30.1(@opentelemetry/api@1.9.0)': @@ -7483,12 +7477,12 @@ snapshots: '@opentelemetry/sdk-trace-base': 1.30.1(@opentelemetry/api@1.9.0) semver: 7.7.3 - '@opentelemetry/sdk-trace-node@2.5.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/sdk-trace-node@2.5.1(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/context-async-hooks': 2.5.0(@opentelemetry/api@1.9.0) - '@opentelemetry/core': 2.5.0(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-trace-base': 2.5.0(@opentelemetry/api@1.9.0) + '@opentelemetry/context-async-hooks': 2.5.1(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 2.5.1(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': 2.5.1(@opentelemetry/api@1.9.0) '@opentelemetry/semantic-conventions@1.28.0': {} @@ -7718,31 +7712,31 @@ snapshots: dependencies: acorn: 8.15.0 - '@sveltejs/eslint-config@8.2.0(@stylistic/eslint-plugin-js@2.1.0(eslint@9.34.0(jiti@2.4.2)))(eslint-config-prettier@9.1.0(eslint@9.34.0(jiti@2.4.2)))(eslint-plugin-n@17.16.1(eslint@9.34.0(jiti@2.4.2))(typescript@5.8.3))(eslint-plugin-svelte@3.9.3(eslint@9.34.0(jiti@2.4.2))(svelte@5.48.4)(ts-node@10.9.2(@types/node@18.19.119)(typescript@5.8.3)))(eslint@9.34.0(jiti@2.4.2))(typescript-eslint@8.43.0(eslint@9.34.0(jiti@2.4.2))(typescript@5.8.3))(typescript@5.8.3)': + '@sveltejs/eslint-config@8.2.0(@stylistic/eslint-plugin-js@2.1.0(eslint@9.34.0(jiti@2.4.2)))(eslint-config-prettier@9.1.0(eslint@9.34.0(jiti@2.4.2)))(eslint-plugin-n@17.16.1(eslint@9.34.0(jiti@2.4.2))(typescript@5.8.3))(eslint-plugin-svelte@3.9.3(eslint@9.34.0(jiti@2.4.2))(svelte@5.49.2)(ts-node@10.9.2(@types/node@18.19.119)(typescript@5.8.3)))(eslint@9.34.0(jiti@2.4.2))(typescript-eslint@8.43.0(eslint@9.34.0(jiti@2.4.2))(typescript@5.8.3))(typescript@5.8.3)': dependencies: '@stylistic/eslint-plugin-js': 2.1.0(eslint@9.34.0(jiti@2.4.2)) eslint: 9.34.0(jiti@2.4.2) eslint-config-prettier: 9.1.0(eslint@9.34.0(jiti@2.4.2)) eslint-plugin-n: 17.16.1(eslint@9.34.0(jiti@2.4.2))(typescript@5.8.3) - eslint-plugin-svelte: 3.9.3(eslint@9.34.0(jiti@2.4.2))(svelte@5.48.4)(ts-node@10.9.2(@types/node@18.19.119)(typescript@5.8.3)) + eslint-plugin-svelte: 3.9.3(eslint@9.34.0(jiti@2.4.2))(svelte@5.49.2)(ts-node@10.9.2(@types/node@18.19.119)(typescript@5.8.3)) globals: 15.15.0 typescript: 5.8.3 typescript-eslint: 8.43.0(eslint@9.34.0(jiti@2.4.2))(typescript@5.8.3) - '@sveltejs/vite-plugin-svelte-inspector@5.0.2(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.48.4)(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)))(svelte@5.48.4)(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0))': + '@sveltejs/vite-plugin-svelte-inspector@5.0.2(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.49.2)(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)))(svelte@5.49.2)(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0))': dependencies: - '@sveltejs/vite-plugin-svelte': 6.2.4(svelte@5.48.4)(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) + '@sveltejs/vite-plugin-svelte': 6.2.4(svelte@5.49.2)(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) obug: 2.1.1 - svelte: 5.48.4 + svelte: 5.49.2 vite: 6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) - '@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.48.4)(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0))': + '@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.49.2)(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0))': dependencies: - '@sveltejs/vite-plugin-svelte-inspector': 5.0.2(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.48.4)(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)))(svelte@5.48.4)(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) + '@sveltejs/vite-plugin-svelte-inspector': 5.0.2(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.49.2)(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)))(svelte@5.49.2)(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) deepmerge: 4.3.1 magic-string: 0.30.21 obug: 2.1.1 - svelte: 5.48.4 + svelte: 5.49.2 vite: 6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) vitefu: 1.1.1(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) @@ -7773,8 +7767,6 @@ snapshots: dependencies: '@types/node': 18.19.119 - '@types/cookie@0.6.0': {} - '@types/deep-eql@4.0.2': {} '@types/eslint@8.56.12': @@ -8321,6 +8313,8 @@ snapshots: cjs-module-lexer@1.4.3: {} + cjs-module-lexer@2.2.0: {} + clipboardy@4.0.0: dependencies: execa: 8.0.1 @@ -8398,11 +8392,9 @@ snapshots: cookie-es@1.2.2: {} - cookie@0.6.0: {} - cookie@0.7.2: {} - cookie@1.0.2: {} + cookie@1.1.1: {} copy-file@11.0.0: dependencies: @@ -8767,7 +8759,7 @@ snapshots: - supports-color - typescript - eslint-plugin-svelte@3.9.3(eslint@9.34.0(jiti@2.4.2))(svelte@5.48.4)(ts-node@10.9.2(@types/node@18.19.119)(typescript@5.8.3)): + eslint-plugin-svelte@3.9.3(eslint@9.34.0(jiti@2.4.2))(svelte@5.49.2)(ts-node@10.9.2(@types/node@18.19.119)(typescript@5.8.3)): dependencies: '@eslint-community/eslint-utils': 4.9.1(eslint@9.34.0(jiti@2.4.2)) '@jridgewell/sourcemap-codec': 1.5.5 @@ -8779,9 +8771,9 @@ snapshots: postcss-load-config: 3.1.4(postcss@8.5.6)(ts-node@10.9.2(@types/node@18.19.119)(typescript@5.8.3)) postcss-safe-parser: 7.0.1(postcss@8.5.6) semver: 7.7.3 - svelte-eslint-parser: 1.4.1(svelte@5.48.4) + svelte-eslint-parser: 1.4.1(svelte@5.49.2) optionalDependencies: - svelte: 5.48.4 + svelte: 5.49.2 transitivePeerDependencies: - ts-node @@ -8850,7 +8842,7 @@ snapshots: dependencies: estraverse: 5.3.0 - esrap@2.2.1: + esrap@2.2.2: dependencies: '@jridgewell/sourcemap-codec': 1.5.5 @@ -9154,11 +9146,11 @@ snapshots: cjs-module-lexer: 1.4.3 module-details-from-path: 1.0.4 - import-in-the-middle@2.0.0: + import-in-the-middle@2.0.6: dependencies: acorn: 8.15.0 acorn-import-attributes: 1.9.5(acorn@8.15.0) - cjs-module-lexer: 1.4.3 + cjs-module-lexer: 2.2.0 module-details-from-path: 1.0.4 imurmurhash@0.1.4: {} @@ -9899,10 +9891,10 @@ snapshots: prelude-ls@1.2.1: {} - prettier-plugin-svelte@3.4.0(prettier@3.6.0)(svelte@5.48.4): + prettier-plugin-svelte@3.4.0(prettier@3.6.0)(svelte@5.49.2): dependencies: prettier: 3.6.0 - svelte: 5.48.4 + svelte: 5.49.2 prettier@2.8.8: {} @@ -10310,19 +10302,19 @@ snapshots: supports-preserve-symlinks-flag@1.0.0: {} - svelte-check@4.3.4(picomatch@4.0.3)(svelte@5.48.4)(typescript@5.8.3): + svelte-check@4.3.4(picomatch@4.0.3)(svelte@5.49.2)(typescript@5.8.3): dependencies: '@jridgewell/trace-mapping': 0.3.25 chokidar: 4.0.3 fdir: 6.5.0(picomatch@4.0.3) picocolors: 1.1.1 sade: 1.8.1 - svelte: 5.48.4 + svelte: 5.49.2 typescript: 5.8.3 transitivePeerDependencies: - picomatch - svelte-eslint-parser@1.4.1(svelte@5.48.4): + svelte-eslint-parser@1.4.1(svelte@5.49.2): dependencies: eslint-scope: 8.4.0 eslint-visitor-keys: 4.2.1 @@ -10331,30 +10323,30 @@ snapshots: postcss-scss: 4.0.9(postcss@8.5.6) postcss-selector-parser: 7.1.1 optionalDependencies: - svelte: 5.48.4 + svelte: 5.49.2 - svelte-parse-markup@0.1.5(svelte@5.48.4): + svelte-parse-markup@0.1.5(svelte@5.49.2): dependencies: - svelte: 5.48.4 + svelte: 5.49.2 - svelte-preprocess@6.0.0(postcss-load-config@3.1.4(postcss@8.5.6)(ts-node@10.9.2(@types/node@18.19.119)(typescript@5.8.3)))(postcss@8.5.6)(svelte@5.48.4)(typescript@5.8.3): + svelte-preprocess@6.0.0(postcss-load-config@3.1.4(postcss@8.5.6)(ts-node@10.9.2(@types/node@18.19.119)(typescript@5.8.3)))(postcss@8.5.6)(svelte@5.49.2)(typescript@5.8.3): dependencies: detect-indent: 6.1.0 strip-indent: 3.0.0 - svelte: 5.48.4 + svelte: 5.49.2 optionalDependencies: postcss: 8.5.6 postcss-load-config: 3.1.4(postcss@8.5.6)(ts-node@10.9.2(@types/node@18.19.119)(typescript@5.8.3)) typescript: 5.8.3 - svelte2tsx@0.7.33(svelte@5.48.4)(typescript@5.8.3): + svelte2tsx@0.7.33(svelte@5.49.2)(typescript@5.8.3): dependencies: dedent-js: 1.0.1 pascal-case: 3.1.2 - svelte: 5.48.4 + svelte: 5.49.2 typescript: 5.8.3 - svelte@5.48.4: + svelte@5.49.2: dependencies: '@jridgewell/remapping': 2.3.5 '@jridgewell/sourcemap-codec': 1.5.5 @@ -10366,7 +10358,7 @@ snapshots: clsx: 2.1.1 devalue: 5.6.2 esm-env: 1.2.2 - esrap: 2.2.1 + esrap: 2.2.2 is-reference: 3.0.3 locate-character: 3.0.0 magic-string: 0.30.21 diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 0be1fffbfa37..13157ffbcf9c 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -19,7 +19,7 @@ catalog: '@netlify/dev': ^4.8.8 '@netlify/edge-functions': ^3.0.0 '@netlify/functions': ^5.0.0 - '@opentelemetry/sdk-node': ^0.211.0 + '@opentelemetry/sdk-node': ^0.212.0 '@opentelemetry/sdk-trace-node': ^2.0.1 '@playwright/test': 1.58.2 '@polka/url': ^1.0.0-next.28 From caf3a18de6581ab7d454d6fa8ad37ebdbdef95e6 Mon Sep 17 00:00:00 2001 From: Sidharth Vinod Date: Fri, 13 Feb 2026 05:48:55 +0530 Subject: [PATCH 003/545] breaking: require Node 22 (#12548) Co-authored-by: Ben McCann <322311+benmccann@users.noreply.github.com> --- .changeset/cold-carrots-raise.md | 6 + .changeset/salty-chefs-sleep.md | 6 + .github/workflows/ci.yml | 12 +- packages/adapter-cloudflare/tsconfig.json | 7 +- packages/adapter-vercel/package.json | 3 - packages/kit/package.json | 3 +- packages/kit/src/cli.js | 6 +- packages/kit/src/core/adapt/builder.js | 12 +- packages/kit/src/core/adapt/index.js | 4 +- packages/kit/src/core/config/options.js | 4 +- .../core/sync/create_manifest_data/index.js | 19 +- .../src/core/sync/write_client_manifest.js | 13 +- packages/kit/src/core/sync/write_server.js | 13 +- packages/kit/src/core/sync/write_tsconfig.js | 20 +- packages/kit/src/core/utils.js | 11 +- packages/kit/src/exports/vite/dev/index.js | 10 +- packages/kit/src/exports/vite/index.js | 23 +- .../vite/static_analysis/utils.spec.js | 9 +- packages/package/package.json | 3 +- packages/package/src/cli.js | 6 +- packages/package/src/index.js | 9 +- packages/package/src/validate.js | 11 +- pnpm-lock.yaml | 340 +++++++++--------- pnpm-workspace.yaml | 2 +- 24 files changed, 266 insertions(+), 286 deletions(-) create mode 100644 .changeset/cold-carrots-raise.md create mode 100644 .changeset/salty-chefs-sleep.md diff --git a/.changeset/cold-carrots-raise.md b/.changeset/cold-carrots-raise.md new file mode 100644 index 000000000000..b715e26dbc8e --- /dev/null +++ b/.changeset/cold-carrots-raise.md @@ -0,0 +1,6 @@ +--- +'@sveltejs/package': major +'@sveltejs/kit': major +--- + +breaking: require Node 22 or newer diff --git a/.changeset/salty-chefs-sleep.md b/.changeset/salty-chefs-sleep.md new file mode 100644 index 000000000000..1f2cb46beafb --- /dev/null +++ b/.changeset/salty-chefs-sleep.md @@ -0,0 +1,6 @@ +--- +'@sveltejs/package': patch +'@sveltejs/kit': patch +--- + +chore: remove dependency on kleur diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 8f54dbac9157..3fd095c9133a 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -51,14 +51,6 @@ jobs: fail-fast: false matrix: include: - - node-version: 18 - os: ubuntu-latest - e2e-browser: 'chromium' - vite: 'baseline' - - node-version: 20 - os: ubuntu-latest - e2e-browser: 'chromium' - vite: 'current' - node-version: 22 os: ubuntu-latest e2e-browser: 'chromium' @@ -238,7 +230,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - node-version: [18, 20, 22, 24] + node-version: [22, 24] steps: - uses: actions/checkout@v6 - uses: pnpm/action-setup@v4.2.0 @@ -261,5 +253,3 @@ jobs: - run: pnpm playwright install chromium --no-shell - run: cd packages/kit && pnpm prepublishOnly - run: pnpm run test:others - env: - NODE_OPTIONS: ${{matrix.node-version == 22 && '--experimental-strip-types' || ''}} # allows loading svelte.config.ts diff --git a/packages/adapter-cloudflare/tsconfig.json b/packages/adapter-cloudflare/tsconfig.json index 7421129f0c56..14cf70a313f9 100644 --- a/packages/adapter-cloudflare/tsconfig.json +++ b/packages/adapter-cloudflare/tsconfig.json @@ -5,15 +5,14 @@ "noEmit": true, "noImplicitAny": true, "strictNullChecks": true, - "target": "es2022", - "module": "node16", - "moduleResolution": "node16", + "module": "nodenext", "baseUrl": ".", "paths": { "@sveltejs/kit": ["../kit/types/index"] }, // taken from the Cloudflare Workers TypeScript template https://github.com/cloudflare/workers-sdk/blob/main/packages/create-cloudflare/templates/hello-world/ts/tsconfig.json - "lib": ["es2021"], + "target": "es2024", + "lib": ["es2024"], "types": ["@cloudflare/workers-types"] }, "include": [ diff --git a/packages/adapter-vercel/package.json b/packages/adapter-vercel/package.json index 8c61fcf09393..c1b00cf6152e 100644 --- a/packages/adapter-vercel/package.json +++ b/packages/adapter-vercel/package.json @@ -52,8 +52,5 @@ }, "peerDependencies": { "@sveltejs/kit": "^2.4.0" - }, - "engines": { - "node": ">=20.0" } } diff --git a/packages/kit/package.json b/packages/kit/package.json index 4fdd78c277ce..003ea468d6b1 100644 --- a/packages/kit/package.json +++ b/packages/kit/package.json @@ -24,7 +24,6 @@ "cookie": "^1.1.1", "devalue": "^5.6.2", "esm-env": "^1.2.2", - "kleur": "^4.1.5", "magic-string": "^0.30.5", "mrmime": "^2.0.0", "sade": "^1.8.1", @@ -131,6 +130,6 @@ }, "types": "types/index.d.ts", "engines": { - "node": ">=18.13" + "node": ">=22" } } diff --git a/packages/kit/src/cli.js b/packages/kit/src/cli.js index 9f56e2e17814..e09ee98cc10b 100755 --- a/packages/kit/src/cli.js +++ b/packages/kit/src/cli.js @@ -1,6 +1,6 @@ import fs from 'node:fs'; import process from 'node:process'; -import colors from 'kleur'; +import { styleText } from 'node:util'; import sade from 'sade'; import { load_config } from './core/config/index.js'; import { coalesce_to_error } from './utils/error.js'; @@ -11,9 +11,9 @@ function handle_error(e) { if (error.name === 'SyntaxError') throw error; - console.error(colors.bold().red(`> ${error.message}`)); + console.error(styleText(['bold', 'red'], `> ${error.message}`)); if (error.stack) { - console.error(colors.gray(error.stack.split('\n').slice(1).join('\n'))); + console.error(styleText('grey', error.stack.split('\n').slice(1).join('\n'))); } process.exit(1); diff --git a/packages/kit/src/core/adapt/builder.js b/packages/kit/src/core/adapt/builder.js index 20124e43e334..4ed068f7ada1 100644 --- a/packages/kit/src/core/adapt/builder.js +++ b/packages/kit/src/core/adapt/builder.js @@ -2,11 +2,10 @@ /** @import { ResolvedConfig } from 'vite' */ /** @import { RouteDefinition } from '@sveltejs/kit' */ /** @import { RouteData, ValidatedConfig, BuildData, ServerMetadata, ServerMetadataRoute, Prerendered, PrerenderMap, Logger, RemoteChunk } from 'types' */ -import colors from 'kleur'; import { createReadStream, createWriteStream, existsSync, statSync } from 'node:fs'; import { extname, resolve, join, dirname, relative } from 'node:path'; import { pipeline } from 'node:stream'; -import { promisify } from 'node:util'; +import { promisify, styleText } from 'node:util'; import zlib from 'node:zlib'; import { copy, rimraf, mkdirp, posixify } from '../../utils/filesystem.js'; import { generate_manifest } from '../generate_manifest/index.js'; @@ -173,11 +172,10 @@ export function create_builder({ if (existsSync(dest)) { console.log( - colors - .bold() - .yellow( - `Overwriting ${dest} with fallback page. Consider using a different name for the fallback.` - ) + styleText( + ['bold', 'yellow'], + `Overwriting ${dest} with fallback page. Consider using a different name for the fallback.` + ) ); } diff --git a/packages/kit/src/core/adapt/index.js b/packages/kit/src/core/adapt/index.js index 48d14116369e..d50a57e36060 100644 --- a/packages/kit/src/core/adapt/index.js +++ b/packages/kit/src/core/adapt/index.js @@ -1,4 +1,4 @@ -import colors from 'kleur'; +import { styleText } from 'node:util'; import { create_builder } from './builder.js'; /** @@ -24,7 +24,7 @@ export async function adapt( // This is only called when adapter is truthy, so the cast is safe const { name, adapt } = /** @type {import('@sveltejs/kit').Adapter} */ (config.kit.adapter); - console.log(colors.bold().cyan(`\n> Using ${name}`)); + console.log(styleText(['bold', 'cyan'], `\n> Using ${name}`)); const builder = create_builder({ config, diff --git a/packages/kit/src/core/config/options.js b/packages/kit/src/core/config/options.js index d16ba4253582..62d8a291eab2 100644 --- a/packages/kit/src/core/config/options.js +++ b/packages/kit/src/core/config/options.js @@ -1,5 +1,5 @@ import process from 'node:process'; -import colors from 'kleur'; +import { styleText } from 'node:util'; /** @typedef {import('./types.js').Validator} Validator */ @@ -329,7 +329,7 @@ function deprecate( ) { return (input, keypath) => { if (input !== undefined) { - console.warn(colors.bold().yellow(get_message(keypath))); + console.warn(styleText(['bold', 'yellow'], get_message(keypath))); } return fn(input, keypath); diff --git a/packages/kit/src/core/sync/create_manifest_data/index.js b/packages/kit/src/core/sync/create_manifest_data/index.js index b7c5e93d658d..9eb5707c8eb9 100644 --- a/packages/kit/src/core/sync/create_manifest_data/index.js +++ b/packages/kit/src/core/sync/create_manifest_data/index.js @@ -1,13 +1,13 @@ +import { lookup } from 'mrmime'; import fs from 'node:fs'; import path from 'node:path'; import process from 'node:process'; -import colors from 'kleur'; -import { lookup } from 'mrmime'; -import { list_files, runtime_directory } from '../../utils.js'; +import { styleText } from 'node:util'; import { posixify, resolve_entry } from '../../../utils/filesystem.js'; import { parse_route_id } from '../../../utils/routing.js'; -import { sort_routes } from './sort.js'; +import { list_files, runtime_directory } from '../../utils.js'; import { isSvelte5Plus } from '../utils.js'; +import { sort_routes } from './sort.js'; /** * Generates the manifest data used for the client-side manifest and types generation. @@ -236,12 +236,11 @@ function create_routes_and_nodes(cwd, config, fallback) { ); if (typo) { console.log( - colors - .bold() - .yellow( - `Missing route file prefix. Did you mean +${file.name}?` + - ` at ${path.join(dir, file.name)}` - ) + styleText( + ['bold', 'yellow'], + `Missing route file prefix. Did you mean +${file.name}?` + + ` at ${path.join(dir, file.name)}` + ) ); } diff --git a/packages/kit/src/core/sync/write_client_manifest.js b/packages/kit/src/core/sync/write_client_manifest.js index 7495e3134854..06789ab95c80 100644 --- a/packages/kit/src/core/sync/write_client_manifest.js +++ b/packages/kit/src/core/sync/write_client_manifest.js @@ -1,8 +1,8 @@ import path from 'node:path'; +import { styleText } from 'node:util'; import { relative_path, resolve_entry } from '../../utils/filesystem.js'; import { s } from '../../utils/misc.js'; import { dedent, isSvelte5Plus, write_if_changed } from './utils.js'; -import colors from 'kleur'; /** * Writes the client manifest to disk. The manifest is used to power the router. It contains the @@ -126,12 +126,11 @@ export function write_client_manifest(kit, manifest_data, output, metadata) { const typo = resolve_entry('src/+hooks.client'); if (typo) { console.log( - colors - .bold() - .yellow( - `Unexpected + prefix. Did you mean ${typo.split('/').at(-1)?.slice(1)}?` + - ` at ${path.resolve(typo)}` - ) + styleText( + ['bold', 'yellow'], + `Unexpected + prefix. Did you mean ${typo.split('/').at(-1)?.slice(1)}?` + + ` at ${path.resolve(typo)}` + ) ); } diff --git a/packages/kit/src/core/sync/write_server.js b/packages/kit/src/core/sync/write_server.js index ea7d9dfe0c99..0e9b1dcb868f 100644 --- a/packages/kit/src/core/sync/write_server.js +++ b/packages/kit/src/core/sync/write_server.js @@ -1,12 +1,12 @@ import path from 'node:path'; import process from 'node:process'; +import { styleText } from 'node:util'; import { hash } from '../../utils/hash.js'; import { posixify, resolve_entry } from '../../utils/filesystem.js'; import { s } from '../../utils/misc.js'; import { load_error_page, load_template } from '../config/index.js'; import { runtime_directory } from '../utils.js'; import { isSvelte5Plus, write_if_changed } from './utils.js'; -import colors from 'kleur'; import { escape_html } from '../../utils/escape.js'; /** @@ -110,12 +110,11 @@ export function write_server(config, output) { const typo = resolve_entry('src/+hooks.server'); if (typo) { console.log( - colors - .bold() - .yellow( - `Unexpected + prefix. Did you mean ${typo.split('/').at(-1)?.slice(1)}?` + - ` at ${path.resolve(typo)}` - ) + styleText( + ['bold', 'yellow'], + `Unexpected + prefix. Did you mean ${typo.split('/').at(-1)?.slice(1)}?` + + ` at ${path.resolve(typo)}` + ) ); } diff --git a/packages/kit/src/core/sync/write_tsconfig.js b/packages/kit/src/core/sync/write_tsconfig.js index 9451c8aefac5..0e8ef261f5c1 100644 --- a/packages/kit/src/core/sync/write_tsconfig.js +++ b/packages/kit/src/core/sync/write_tsconfig.js @@ -1,7 +1,7 @@ import fs from 'node:fs'; import path from 'node:path'; import process from 'node:process'; -import colors from 'kleur'; +import { styleText } from 'node:util'; import { posixify } from '../../utils/filesystem.js'; import { write_if_changed } from './utils.js'; @@ -167,12 +167,11 @@ function validate_user_config(cwd, out, config) { if (baseUrl || paths) { console.warn( - colors - .bold() - .yellow( - `You have specified a baseUrl and/or paths in your ${config.kind} which interferes with SvelteKit's auto-generated tsconfig.json. ` + - 'Remove it to avoid problems with intellisense. For path aliases, use `kit.alias` instead: https://svelte.dev/docs/kit/configuration#alias' - ) + styleText( + ['bold', 'yellow'], + `You have specified a baseUrl and/or paths in your ${config.kind} which interferes with SvelteKit's auto-generated tsconfig.json. ` + + 'Remove it to avoid problems with intellisense. For path aliases, use `kit.alias` instead: https://svelte.dev/docs/kit/configuration#alias' + ) ); } } else { @@ -180,9 +179,10 @@ function validate_user_config(cwd, out, config) { if (!relative.startsWith('./')) relative = './' + relative; console.warn( - colors - .bold() - .yellow(`Your ${config.kind} should extend the configuration generated by SvelteKit:`) + styleText( + ['bold', 'yellow'], + `Your ${config.kind} should extend the configuration generated by SvelteKit:` + ) ); console.warn(`{\n "extends": "${relative}"\n}`); } diff --git a/packages/kit/src/core/utils.js b/packages/kit/src/core/utils.js index 668306e9e70f..ff6b7a460639 100644 --- a/packages/kit/src/core/utils.js +++ b/packages/kit/src/core/utils.js @@ -2,7 +2,7 @@ import fs from 'node:fs'; import path from 'node:path'; import process from 'node:process'; import { fileURLToPath } from 'node:url'; -import colors from 'kleur'; +import { styleText } from 'node:util'; import { posixify, to_fs } from '../utils/filesystem.js'; /** @@ -34,11 +34,10 @@ export function logger({ verbose }) { /** @param {string} msg */ const err = (msg) => console.error(msg.replace(/^/gm, ' ')); - log.success = (msg) => log(colors.green(`✔ ${msg}`)); - log.error = (msg) => err(colors.bold().red(msg)); - log.warn = (msg) => log(colors.bold().yellow(msg)); - - log.minor = verbose ? (msg) => log(colors.grey(msg)) : noop; + log.success = (msg) => log(styleText('green', `✔ ${msg}`)); + log.error = (msg) => err(styleText(['bold', 'red'], msg)); + log.warn = (msg) => log(styleText(['bold', 'yellow'], msg)); + log.minor = verbose ? (msg) => log(styleText('grey', msg)) : noop; log.info = verbose ? log : noop; return log; diff --git a/packages/kit/src/exports/vite/dev/index.js b/packages/kit/src/exports/vite/dev/index.js index 31c13c1ead8b..83e984501536 100644 --- a/packages/kit/src/exports/vite/dev/index.js +++ b/packages/kit/src/exports/vite/dev/index.js @@ -3,7 +3,7 @@ import path from 'node:path'; import process from 'node:process'; import { URL } from 'node:url'; import { AsyncLocalStorage } from 'node:async_hooks'; -import colors from 'kleur'; +import { styleText } from 'node:util'; import sirv from 'sirv'; import { isCSSRequest, loadEnv, buildErrorMessage } from 'vite'; import { createReadableStream, getRequest, setResponse } from '../../../exports/node/index.js'; @@ -70,7 +70,9 @@ export async function dev(vite, vite_config, svelte_config, get_remotes) { try { return await vite.ssrLoadModule(url, { fixStacktrace: true }); } catch (/** @type {any} */ err) { - const msg = buildErrorMessage(err, [colors.red(`Internal server error: ${err.message}`)]); + const msg = buildErrorMessage(err, [ + styleText('red', `Internal server error: ${err.message}`) + ]); if (!vite.config.logger.hasErrorLogged(err)) { vite.config.logger.error(msg, { error: err }); @@ -117,7 +119,7 @@ export async function dev(vite, vite_config, svelte_config, get_remotes) { } catch (error) { manifest_error = /** @type {Error} */ (error); - console.error(colors.bold().red(manifest_error.message)); + console.error(styleText(['bold', 'red'], manifest_error.message)); vite.ws.send({ type: 'error', err: { @@ -538,7 +540,7 @@ export async function dev(vite, vite_config, svelte_config, get_remotes) { }); if (manifest_error) { - console.error(colors.bold().red(manifest_error.message)); + console.error(styleText(['bold', 'red'], manifest_error.message)); const error_page = load_error_page(svelte_config); diff --git a/packages/kit/src/exports/vite/index.js b/packages/kit/src/exports/vite/index.js index 1f1adb8aa312..de09e4304930 100644 --- a/packages/kit/src/exports/vite/index.js +++ b/packages/kit/src/exports/vite/index.js @@ -1,8 +1,7 @@ import fs from 'node:fs'; import path from 'node:path'; import process from 'node:process'; - -import colors from 'kleur'; +import { styleText } from 'node:util'; import { copy, mkdirp, posixify, read, resolve_entry, rimraf } from '../../utils/filesystem.js'; import { create_static_module, create_dynamic_module } from '../../core/env.js'; @@ -98,7 +97,7 @@ const warning_preprocessor = { const fixed = basename.replace('.svelte', '(.server).js/ts'); const message = - `\n${colors.bold().red(path.relative('.', filename))}\n` + + `\n${styleText(['bold', 'red'], path.relative('.', filename))}\n` + `\`${match[1]}\` will be ignored — move it to ${fixed} instead. See https://svelte.dev/docs/kit/page-options for more information.`; if (!warned.has(message)) { @@ -115,7 +114,7 @@ const warning_preprocessor = { if (basename.startsWith('+layout.') && !has_children(content, isSvelte5Plus())) { const message = - `\n${colors.bold().red(path.relative('.', filename))}\n` + + `\n${styleText(['bold', 'red'], path.relative('.', filename))}\n` + `\`\`${isSvelte5Plus() ? ' or `{@render ...}` tag' : ''}` + ' missing — inner content will not be rendered'; @@ -934,7 +933,7 @@ async function kit({ svelte_config }) { } }, ssrEmitAssets: true, - target: ssr ? 'node18.13' : undefined + target: ssr ? 'node20.12' : undefined }, publicDir: kit.files.assets, worker: { @@ -1325,9 +1324,7 @@ async function kit({ svelte_config }) { // created by other Vite plugins finalise = async () => { console.log( - `\nRun ${colors - .bold() - .cyan('npm run preview')} to preview your production build locally.` + `\nRun ${styleText(['bold', 'cyan'], 'npm run preview')} to preview your production build locally.` ); if (kit.adapter) { @@ -1343,9 +1340,9 @@ async function kit({ svelte_config }) { vite_config ); } else { - console.log(colors.bold().yellow('\nNo adapter specified')); + console.log(styleText(['bold', 'yellow'], '\nNo adapter specified')); - const link = colors.bold().cyan('https://svelte.dev/docs/kit/adapters'); + const link = styleText(['bold', 'cyan'], 'https://svelte.dev/docs/kit/adapters'); console.log( `See ${link} to learn how to configure your app to run on the platform of your choosing` ); @@ -1386,8 +1383,10 @@ function warn_overridden_config(config, resolved_config) { if (overridden.length > 0) { console.error( - colors.bold().red('The following Vite config options will be overridden by SvelteKit:') + - overridden.map((key) => `\n - ${key}`).join('') + styleText( + ['bold', 'red'], + 'The following Vite config options will be overridden by SvelteKit:' + ) + overridden.map((key) => `\n - ${key}`).join('') ); } } diff --git a/packages/kit/src/exports/vite/static_analysis/utils.spec.js b/packages/kit/src/exports/vite/static_analysis/utils.spec.js index 1b65daba559c..67ee5d2f8900 100644 --- a/packages/kit/src/exports/vite/static_analysis/utils.spec.js +++ b/packages/kit/src/exports/vite/static_analysis/utils.spec.js @@ -1,14 +1,7 @@ -import { expect, test, vi } from 'vitest'; +import { expect, test } from 'vitest'; import path from 'node:path'; import { should_ignore, has_children } from './utils.js'; -// Mock the colors module to avoid issues in tests -vi.mock('kleur', () => ({ - default: { - bold: () => ({ red: (/** @type {string} */ str) => str }) - } -})); - // We need to test the warning_preprocessor functionality // Since it's not exported, we'll recreate the relevant parts for testing const options_regex = /(export\s+const\s+(prerender|csr|ssr|trailingSlash))\s*=/s; diff --git a/packages/package/package.json b/packages/package/package.json index 4d534d715aa9..5c5211d5dd6d 100644 --- a/packages/package/package.json +++ b/packages/package/package.json @@ -21,7 +21,6 @@ "type": "module", "dependencies": { "chokidar": "^5.0.0", - "kleur": "^4.1.5", "sade": "^1.8.1", "semver": "^7.5.4", "svelte2tsx": "~0.7.33" @@ -56,6 +55,6 @@ "./package.json": "./package.json" }, "engines": { - "node": "^16.14 || >=18" + "node": ">=22" } } diff --git a/packages/package/src/cli.js b/packages/package/src/cli.js index ca28b1ee1464..9cca67d4005a 100644 --- a/packages/package/src/cli.js +++ b/packages/package/src/cli.js @@ -1,6 +1,6 @@ import fs from 'node:fs'; import process from 'node:process'; -import colors from 'kleur'; +import { styleText } from 'node:util'; import sade from 'sade'; import { load_config } from './config.js'; @@ -8,9 +8,9 @@ import { load_config } from './config.js'; function handle_error(error) { if (error.name === 'SyntaxError') throw error; - console.error(colors.bold().red(`> ${error.message}`)); + console.error(styleText(['bold', 'red'], `> ${error.message}`)); if (error.stack) { - console.error(colors.gray(error.stack.split('\n').slice(1).join('\n'))); + console.error(styleText('grey', error.stack.split('\n').slice(1).join('\n'))); } process.exit(1); diff --git a/packages/package/src/index.js b/packages/package/src/index.js index b91aa92a2b93..62494f85d328 100644 --- a/packages/package/src/index.js +++ b/packages/package/src/index.js @@ -1,6 +1,6 @@ import * as fs from 'node:fs'; import * as path from 'node:path'; -import colors from 'kleur'; +import { styleText } from 'node:util'; import chokidar from 'chokidar'; import { preprocess } from 'svelte/compiler'; import { copy, mkdirp, posixify, rimraf } from './filesystem.js'; @@ -68,9 +68,10 @@ async function do_build(options, analyse_code) { copy(temp, output); console.log( - colors - .bold() - .green(`${path.relative(options.cwd, input)} -> ${path.relative(options.cwd, output)}`) + styleText( + ['bold', 'green'], + `${path.relative(options.cwd, input)} -> ${path.relative(options.cwd, output)}` + ) ); } diff --git a/packages/package/src/validate.js b/packages/package/src/validate.js index 24fedf37c401..20d01080642a 100644 --- a/packages/package/src/validate.js +++ b/packages/package/src/validate.js @@ -1,4 +1,4 @@ -import colors from 'kleur'; +import { styleText } from 'node:util'; import { load_pkg_json } from './config.js'; /** @@ -31,12 +31,13 @@ export function create_validator(options) { // - maybe there's a custom post-build script that fixes some of these if (warnings.length) { console.log( - colors - .bold() - .yellow('@sveltejs/package found the following issues while packaging your library:') + styleText( + ['bold', 'yellow'], + '@sveltejs/package found the following issues while packaging your library:' + ) ); for (const warning of warnings) { - console.log(colors.yellow(`${warning}\n`)); + console.log(styleText('yellow', `${warning}\n`)); } } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 27f142487080..6c88c975c671 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -58,8 +58,8 @@ catalogs: specifier: ^1.0.5 version: 1.0.8 '@types/node': - specifier: ^18.19.119 - version: 18.19.119 + specifier: ^24.1.0 + version: 24.10.11 '@types/semver': specifier: ^7.5.6 version: 7.5.8 @@ -121,13 +121,13 @@ importers: devDependencies: '@changesets/cli': specifier: 'catalog:' - version: 2.29.6(@types/node@18.19.119) + version: 2.29.6(@types/node@24.10.11) '@playwright/test': specifier: 'catalog:' version: 1.58.2 '@sveltejs/eslint-config': specifier: 'catalog:' - version: 8.2.0(@stylistic/eslint-plugin-js@2.1.0(eslint@9.34.0(jiti@2.4.2)))(eslint-config-prettier@9.1.0(eslint@9.34.0(jiti@2.4.2)))(eslint-plugin-n@17.16.1(eslint@9.34.0(jiti@2.4.2))(typescript@5.8.3))(eslint-plugin-svelte@3.9.3(eslint@9.34.0(jiti@2.4.2))(svelte@5.49.2)(ts-node@10.9.2(@types/node@18.19.119)(typescript@5.8.3)))(eslint@9.34.0(jiti@2.4.2))(typescript-eslint@8.43.0(eslint@9.34.0(jiti@2.4.2))(typescript@5.8.3))(typescript@5.8.3) + version: 8.2.0(@stylistic/eslint-plugin-js@2.1.0(eslint@9.34.0(jiti@2.4.2)))(eslint-config-prettier@9.1.0(eslint@9.34.0(jiti@2.4.2)))(eslint-plugin-n@17.16.1(eslint@9.34.0(jiti@2.4.2))(typescript@5.8.3))(eslint-plugin-svelte@3.9.3(eslint@9.34.0(jiti@2.4.2))(svelte@5.49.2)(ts-node@10.9.2(@types/node@24.10.11)(typescript@5.8.3)))(eslint@9.34.0(jiti@2.4.2))(typescript-eslint@8.43.0(eslint@9.34.0(jiti@2.4.2))(typescript@5.8.3))(typescript@5.8.3) '@svitejs/changesets-changelog-github-compact': specifier: 'catalog:' version: 1.2.0 @@ -151,16 +151,16 @@ importers: version: link:../kit '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 6.2.4(svelte@5.49.2)(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) + version: 6.2.4(svelte@5.49.2)(vite@6.4.1(@types/node@24.10.11)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) '@types/node': specifier: 'catalog:' - version: 18.19.119 + version: 24.10.11 typescript: specifier: ^5.3.3 version: 5.8.3 vitest: specifier: 'catalog:' - version: 4.0.16(@opentelemetry/api@1.9.0)(@types/node@18.19.119)(@vitest/browser-playwright@4.0.16)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) + version: 4.0.16(@opentelemetry/api@1.9.0)(@types/node@24.10.11)(@vitest/browser-playwright@4.0.16)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) packages/adapter-cloudflare: dependencies: @@ -182,7 +182,7 @@ importers: version: link:../kit '@types/node': specifier: 'catalog:' - version: 18.19.119 + version: 24.10.11 esbuild: specifier: 'catalog:' version: 0.25.12 @@ -191,7 +191,7 @@ importers: version: 5.8.3 vitest: specifier: 'catalog:' - version: 4.0.16(@opentelemetry/api@1.9.0)(@types/node@18.19.119)(@vitest/browser-playwright@4.0.16)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) + version: 4.0.16(@opentelemetry/api@1.9.0)(@types/node@24.10.11)(@vitest/browser-playwright@4.0.16)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) packages/adapter-cloudflare/test/apps/pages: devDependencies: @@ -200,7 +200,7 @@ importers: version: link:../../../../kit '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 6.2.4(svelte@5.49.2)(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) + version: 6.2.4(svelte@5.49.2)(vite@6.4.1(@types/node@24.10.11)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) server-side-dep: specifier: file:server-side-dep version: file:packages/adapter-cloudflare/test/apps/pages/server-side-dep @@ -209,7 +209,7 @@ importers: version: 5.49.2 vite: specifier: 'catalog:' - version: 6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) + version: 6.4.1(@types/node@24.10.11)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) wrangler: specifier: 'catalog:' version: 4.14.4(@cloudflare/workers-types@4.20250508.0) @@ -221,7 +221,7 @@ importers: version: link:../../../../kit '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 6.2.4(svelte@5.49.2)(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) + version: 6.2.4(svelte@5.49.2)(vite@6.4.1(@types/node@24.10.11)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) server-side-dep: specifier: file:server-side-dep version: file:packages/adapter-cloudflare/test/apps/workers/server-side-dep @@ -230,7 +230,7 @@ importers: version: 5.49.2 vite: specifier: 'catalog:' - version: 6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) + version: 6.4.1(@types/node@24.10.11)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) wrangler: specifier: 'catalog:' version: 4.14.4(@cloudflare/workers-types@4.20250508.0) @@ -273,10 +273,10 @@ importers: version: link:../kit '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 6.2.4(svelte@5.49.2)(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) + version: 6.2.4(svelte@5.49.2)(vite@6.4.1(@types/node@24.10.11)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) '@types/node': specifier: 'catalog:' - version: 18.19.119 + version: 24.10.11 rollup: specifier: ^4.14.2 version: 4.57.1 @@ -285,7 +285,7 @@ importers: version: 5.8.3 vitest: specifier: 'catalog:' - version: 4.0.16(@opentelemetry/api@1.9.0)(@types/node@18.19.119)(@vitest/browser-playwright@4.0.16)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) + version: 4.0.16(@opentelemetry/api@1.9.0)(@types/node@24.10.11)(@vitest/browser-playwright@4.0.16)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) packages/adapter-netlify/test/apps/basic: devDependencies: @@ -294,13 +294,13 @@ importers: version: link:../../../../kit '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 6.2.4(svelte@5.49.2)(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) + version: 6.2.4(svelte@5.49.2)(vite@6.4.1(@types/node@24.10.11)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) svelte: specifier: 'catalog:' version: 5.49.2 vite: specifier: 'catalog:' - version: 6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) + version: 6.4.1(@types/node@24.10.11)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) packages/adapter-netlify/test/apps/edge: devDependencies: @@ -309,13 +309,13 @@ importers: version: link:../../../../kit '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 6.2.4(svelte@5.49.2)(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) + version: 6.2.4(svelte@5.49.2)(vite@6.4.1(@types/node@24.10.11)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) svelte: specifier: 'catalog:' version: 5.49.2 vite: specifier: 'catalog:' - version: 6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) + version: 6.4.1(@types/node@24.10.11)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) packages/adapter-node: dependencies: @@ -340,10 +340,10 @@ importers: version: link:../kit '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 6.2.4(svelte@5.49.2)(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) + version: 6.2.4(svelte@5.49.2)(vite@6.4.1(@types/node@24.10.11)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) '@types/node': specifier: 'catalog:' - version: 18.19.119 + version: 24.10.11 polka: specifier: 'catalog:' version: 1.0.0-next.28 @@ -355,7 +355,7 @@ importers: version: 5.8.3 vitest: specifier: 'catalog:' - version: 4.0.16(@opentelemetry/api@1.9.0)(@types/node@18.19.119)(@vitest/browser-playwright@4.0.16)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) + version: 4.0.16(@opentelemetry/api@1.9.0)(@types/node@24.10.11)(@vitest/browser-playwright@4.0.16)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) packages/adapter-static: devDependencies: @@ -367,10 +367,10 @@ importers: version: link:../kit '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 6.2.4(svelte@5.49.2)(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) + version: 6.2.4(svelte@5.49.2)(vite@6.4.1(@types/node@24.10.11)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) '@types/node': specifier: 'catalog:' - version: 18.19.119 + version: 24.10.11 sirv: specifier: ^3.0.0 version: 3.0.2 @@ -382,7 +382,7 @@ importers: version: 5.8.3 vite: specifier: 'catalog:' - version: 6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) + version: 6.4.1(@types/node@24.10.11)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) packages/adapter-static/test/apps/prerendered: devDependencies: @@ -391,7 +391,7 @@ importers: version: link:../../../../kit '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 6.2.4(svelte@5.49.2)(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) + version: 6.2.4(svelte@5.49.2)(vite@6.4.1(@types/node@24.10.11)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) sirv-cli: specifier: 'catalog:' version: 3.0.0 @@ -400,7 +400,7 @@ importers: version: 5.49.2 vite: specifier: 'catalog:' - version: 6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) + version: 6.4.1(@types/node@24.10.11)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) packages/adapter-static/test/apps/spa: devDependencies: @@ -409,7 +409,7 @@ importers: version: link:../../../../kit '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 6.2.4(svelte@5.49.2)(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) + version: 6.2.4(svelte@5.49.2)(vite@6.4.1(@types/node@24.10.11)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) sirv-cli: specifier: 'catalog:' version: 3.0.0 @@ -418,7 +418,7 @@ importers: version: 5.49.2 vite: specifier: 'catalog:' - version: 6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) + version: 6.4.1(@types/node@24.10.11)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) packages/adapter-vercel: dependencies: @@ -434,16 +434,16 @@ importers: version: link:../kit '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 6.2.4(svelte@5.49.2)(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) + version: 6.2.4(svelte@5.49.2)(vite@6.4.1(@types/node@24.10.11)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) '@types/node': specifier: 'catalog:' - version: 18.19.119 + version: 24.10.11 typescript: specifier: ^5.3.3 version: 5.8.3 vitest: specifier: 'catalog:' - version: 4.0.16(@opentelemetry/api@1.9.0)(@types/node@18.19.119)(@vitest/browser-playwright@4.0.16)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) + version: 4.0.16(@opentelemetry/api@1.9.0)(@types/node@24.10.11)(@vitest/browser-playwright@4.0.16)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) packages/amp: devDependencies: @@ -474,13 +474,13 @@ importers: devDependencies: '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 6.2.4(svelte@5.49.2)(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) + version: 6.2.4(svelte@5.49.2)(vite@6.4.1(@types/node@24.10.11)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) '@types/estree': specifier: 'catalog:' version: 1.0.8 '@types/node': specifier: 'catalog:' - version: 18.19.119 + version: 24.10.11 rollup: specifier: ^4.27.4 version: 4.57.1 @@ -492,10 +492,10 @@ importers: version: 5.8.3 vite: specifier: 'catalog:' - version: 6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) + version: 6.4.1(@types/node@24.10.11)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) vitest: specifier: 'catalog:' - version: 4.0.16(@opentelemetry/api@1.9.0)(@types/node@18.19.119)(@vitest/browser-playwright@4.0.16)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) + version: 4.0.16(@opentelemetry/api@1.9.0)(@types/node@24.10.11)(@vitest/browser-playwright@4.0.16)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) packages/enhanced-img/test/apps/basics: devDependencies: @@ -507,13 +507,13 @@ importers: version: link:../../../../kit '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 6.2.4(svelte@5.49.2)(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) + version: 6.2.4(svelte@5.49.2)(vite@6.4.1(@types/node@24.10.11)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) svelte: specifier: 'catalog:' version: 5.49.2 vite: specifier: 'catalog:' - version: 6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) + version: 6.4.1(@types/node@24.10.11)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) packages/kit: dependencies: @@ -535,9 +535,6 @@ importers: esm-env: specifier: ^1.2.2 version: 1.2.2 - kleur: - specifier: ^4.1.5 - version: 4.1.5 magic-string: specifier: ^0.30.5 version: 0.30.21 @@ -562,13 +559,13 @@ importers: version: 1.58.2 '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 6.2.4(svelte@5.49.2)(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) + version: 6.2.4(svelte@5.49.2)(vite@6.4.1(@types/node@24.10.11)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) '@types/connect': specifier: 'catalog:' version: 3.4.38 '@types/node': specifier: 'catalog:' - version: 18.19.119 + version: 24.10.11 '@types/set-cookie-parser': specifier: 'catalog:' version: 2.4.7 @@ -583,16 +580,16 @@ importers: version: 5.49.2 svelte-preprocess: specifier: 'catalog:' - version: 6.0.0(postcss-load-config@3.1.4(postcss@8.5.6)(ts-node@10.9.2(@types/node@18.19.119)(typescript@5.8.3)))(postcss@8.5.6)(svelte@5.49.2)(typescript@5.8.3) + version: 6.0.0(postcss-load-config@3.1.4(postcss@8.5.6)(ts-node@10.9.2(@types/node@24.10.11)(typescript@5.8.3)))(postcss@8.5.6)(svelte@5.49.2)(typescript@5.8.3) typescript: specifier: ^5.3.3 version: 5.8.3 vite: specifier: 'catalog:' - version: 6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) + version: 6.4.1(@types/node@24.10.11)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) vitest: specifier: 'catalog:' - version: 4.0.16(@opentelemetry/api@1.9.0)(@types/node@18.19.119)(@vitest/browser-playwright@4.0.16)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) + version: 4.0.16(@opentelemetry/api@1.9.0)(@types/node@24.10.11)(@vitest/browser-playwright@4.0.16)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) packages/kit/test/apps/amp: devDependencies: @@ -604,7 +601,7 @@ importers: version: link:../../.. '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 6.2.4(svelte@5.49.2)(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) + version: 6.2.4(svelte@5.49.2)(vite@6.4.1(@types/node@24.10.11)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) dropcss: specifier: 'catalog:' version: 1.0.16 @@ -619,7 +616,7 @@ importers: version: 5.8.3 vite: specifier: 'catalog:' - version: 6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) + version: 6.4.1(@types/node@24.10.11)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) packages/kit/test/apps/async: devDependencies: @@ -628,7 +625,7 @@ importers: version: link:../../.. '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 6.2.4(svelte@5.49.2)(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) + version: 6.2.4(svelte@5.49.2)(vite@6.4.1(@types/node@24.10.11)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) svelte: specifier: 'catalog:' version: 5.49.2 @@ -643,7 +640,7 @@ importers: version: 1.2.0(typescript@5.8.3) vite: specifier: 'catalog:' - version: 6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) + version: 6.4.1(@types/node@24.10.11)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) packages/kit/test/apps/basics: devDependencies: @@ -661,10 +658,10 @@ importers: version: link:../../.. '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 6.2.4(svelte@5.49.2)(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) + version: 6.2.4(svelte@5.49.2)(vite@6.4.1(@types/node@24.10.11)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) '@vitest/browser-playwright': specifier: 'catalog:' - version: 4.0.16(playwright@1.58.2)(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0))(vitest@4.0.16) + version: 4.0.16(playwright@1.58.2)(vite@6.4.1(@types/node@24.10.11)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0))(vitest@4.0.16) svelte: specifier: 'catalog:' version: 5.49.2 @@ -682,10 +679,10 @@ importers: version: 1.2.0(typescript@5.8.3) vite: specifier: 'catalog:' - version: 6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) + version: 6.4.1(@types/node@24.10.11)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) vitest: specifier: 'catalog:' - version: 4.0.16(@opentelemetry/api@1.9.0)(@types/node@18.19.119)(@vitest/browser-playwright@4.0.16)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) + version: 4.0.16(@opentelemetry/api@1.9.0)(@types/node@24.10.11)(@vitest/browser-playwright@4.0.16)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) packages/kit/test/apps/dev-only: devDependencies: @@ -694,7 +691,7 @@ importers: version: link:../../.. '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 6.2.4(svelte@5.49.2)(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) + version: 6.2.4(svelte@5.49.2)(vite@6.4.1(@types/node@24.10.11)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) e2e-test-dep-error: specifier: file:./_test_dependencies/cjs-only version: e2e-test-dep-cjs-only@file:packages/kit/test/apps/dev-only/_test_dependencies/cjs-only @@ -736,7 +733,7 @@ importers: version: 5.8.3 vite: specifier: 'catalog:' - version: 6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) + version: 6.4.1(@types/node@24.10.11)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) packages/kit/test/apps/embed: devDependencies: @@ -745,7 +742,7 @@ importers: version: link:../../.. '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 6.2.4(svelte@5.49.2)(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) + version: 6.2.4(svelte@5.49.2)(vite@6.4.1(@types/node@24.10.11)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) svelte: specifier: 'catalog:' version: 5.49.2 @@ -757,7 +754,7 @@ importers: version: 5.8.3 vite: specifier: 'catalog:' - version: 6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) + version: 6.4.1(@types/node@24.10.11)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) packages/kit/test/apps/hash-based-routing: devDependencies: @@ -766,7 +763,7 @@ importers: version: link:../../.. '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 6.2.4(svelte@5.49.2)(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) + version: 6.2.4(svelte@5.49.2)(vite@6.4.1(@types/node@24.10.11)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) svelte: specifier: 'catalog:' version: 5.49.2 @@ -778,7 +775,7 @@ importers: version: 5.8.3 vite: specifier: 'catalog:' - version: 6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) + version: 6.4.1(@types/node@24.10.11)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) packages/kit/test/apps/no-ssr: devDependencies: @@ -787,7 +784,7 @@ importers: version: link:../../.. '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 6.2.4(svelte@5.49.2)(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) + version: 6.2.4(svelte@5.49.2)(vite@6.4.1(@types/node@24.10.11)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) svelte: specifier: 'catalog:' version: 5.49.2 @@ -799,7 +796,7 @@ importers: version: 5.8.3 vite: specifier: 'catalog:' - version: 6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) + version: 6.4.1(@types/node@24.10.11)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) packages/kit/test/apps/options: devDependencies: @@ -811,7 +808,7 @@ importers: version: link:../../.. '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 6.2.4(svelte@5.49.2)(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) + version: 6.2.4(svelte@5.49.2)(vite@6.4.1(@types/node@24.10.11)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) svelte: specifier: 'catalog:' version: 5.49.2 @@ -823,7 +820,7 @@ importers: version: 5.8.3 vite: specifier: 'catalog:' - version: 6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) + version: 6.4.1(@types/node@24.10.11)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) packages/kit/test/apps/options-2: devDependencies: @@ -835,7 +832,7 @@ importers: version: link:../../.. '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 6.2.4(svelte@5.49.2)(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) + version: 6.2.4(svelte@5.49.2)(vite@6.4.1(@types/node@24.10.11)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) svelte: specifier: 'catalog:' version: 5.49.2 @@ -850,7 +847,7 @@ importers: version: 1.2.0(typescript@5.8.3) vite: specifier: 'catalog:' - version: 6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) + version: 6.4.1(@types/node@24.10.11)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) packages/kit/test/apps/options-3: devDependencies: @@ -862,7 +859,7 @@ importers: version: link:../../.. '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 6.2.4(svelte@5.49.2)(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) + version: 6.2.4(svelte@5.49.2)(vite@6.4.1(@types/node@24.10.11)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) svelte: specifier: 'catalog:' version: 5.49.2 @@ -874,7 +871,7 @@ importers: version: 5.8.3 vite: specifier: 'catalog:' - version: 6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) + version: 6.4.1(@types/node@24.10.11)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) packages/kit/test/apps/prerendered-app-error-pages: devDependencies: @@ -883,7 +880,7 @@ importers: version: link:../../.. '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 6.2.4(svelte@5.49.2)(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) + version: 6.2.4(svelte@5.49.2)(vite@6.4.1(@types/node@24.10.11)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) svelte: specifier: 'catalog:' version: 5.49.2 @@ -895,7 +892,7 @@ importers: version: 5.8.3 vite: specifier: 'catalog:' - version: 6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) + version: 6.4.1(@types/node@24.10.11)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) packages/kit/test/apps/writes: devDependencies: @@ -904,7 +901,7 @@ importers: version: link:../../.. '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 6.2.4(svelte@5.49.2)(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) + version: 6.2.4(svelte@5.49.2)(vite@6.4.1(@types/node@24.10.11)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) svelte: specifier: 'catalog:' version: 5.49.2 @@ -916,13 +913,13 @@ importers: version: 5.8.3 vite: specifier: 'catalog:' - version: 6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) + version: 6.4.1(@types/node@24.10.11)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) packages/kit/test/build-errors: devDependencies: vitest: specifier: 'catalog:' - version: 4.0.16(@opentelemetry/api@1.9.0)(@types/node@18.19.119)(@vitest/browser-playwright@4.0.16)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) + version: 4.0.16(@opentelemetry/api@1.9.0)(@types/node@24.10.11)(@vitest/browser-playwright@4.0.16)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) packages/kit/test/build-errors/apps/prerender-entry-generator-mismatch: devDependencies: @@ -934,7 +931,7 @@ importers: version: link:../../../.. '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 6.2.4(svelte@5.49.2)(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) + version: 6.2.4(svelte@5.49.2)(vite@6.4.1(@types/node@24.10.11)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) svelte: specifier: 'catalog:' version: 5.49.2 @@ -946,7 +943,7 @@ importers: version: 5.8.3 vite: specifier: 'catalog:' - version: 6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) + version: 6.4.1(@types/node@24.10.11)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) packages/kit/test/build-errors/apps/prerender-remote-function-error: devDependencies: @@ -958,7 +955,7 @@ importers: version: link:../../../.. '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 6.2.4(svelte@5.49.2)(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) + version: 6.2.4(svelte@5.49.2)(vite@6.4.1(@types/node@24.10.11)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) svelte: specifier: 'catalog:' version: 5.49.2 @@ -970,7 +967,7 @@ importers: version: 5.8.3 vite: specifier: 'catalog:' - version: 6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) + version: 6.4.1(@types/node@24.10.11)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) packages/kit/test/build-errors/apps/prerenderable-incorrect-fragment: devDependencies: @@ -982,7 +979,7 @@ importers: version: link:../../../.. '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 6.2.4(svelte@5.49.2)(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) + version: 6.2.4(svelte@5.49.2)(vite@6.4.1(@types/node@24.10.11)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) svelte: specifier: 'catalog:' version: 5.49.2 @@ -994,7 +991,7 @@ importers: version: 5.8.3 vite: specifier: 'catalog:' - version: 6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) + version: 6.4.1(@types/node@24.10.11)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) packages/kit/test/build-errors/apps/prerenderable-not-prerendered: devDependencies: @@ -1006,7 +1003,7 @@ importers: version: link:../../../.. '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 6.2.4(svelte@5.49.2)(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) + version: 6.2.4(svelte@5.49.2)(vite@6.4.1(@types/node@24.10.11)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) svelte: specifier: 'catalog:' version: 5.49.2 @@ -1018,7 +1015,7 @@ importers: version: 5.8.3 vite: specifier: 'catalog:' - version: 6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) + version: 6.4.1(@types/node@24.10.11)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) packages/kit/test/build-errors/apps/private-dynamic-env: devDependencies: @@ -1027,7 +1024,7 @@ importers: version: link:../../../.. '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 6.2.4(svelte@5.49.2)(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) + version: 6.2.4(svelte@5.49.2)(vite@6.4.1(@types/node@24.10.11)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) svelte: specifier: 'catalog:' version: 5.49.2 @@ -1039,7 +1036,7 @@ importers: version: 5.8.3 vite: specifier: 'catalog:' - version: 6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) + version: 6.4.1(@types/node@24.10.11)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) packages/kit/test/build-errors/apps/private-dynamic-env-dynamic-import: devDependencies: @@ -1048,7 +1045,7 @@ importers: version: link:../../../.. '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 6.2.4(svelte@5.49.2)(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) + version: 6.2.4(svelte@5.49.2)(vite@6.4.1(@types/node@24.10.11)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) svelte: specifier: 'catalog:' version: 5.49.2 @@ -1060,7 +1057,7 @@ importers: version: 5.8.3 vite: specifier: 'catalog:' - version: 6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) + version: 6.4.1(@types/node@24.10.11)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) packages/kit/test/build-errors/apps/private-static-env: devDependencies: @@ -1069,7 +1066,7 @@ importers: version: link:../../../.. '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 6.2.4(svelte@5.49.2)(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) + version: 6.2.4(svelte@5.49.2)(vite@6.4.1(@types/node@24.10.11)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) svelte: specifier: 'catalog:' version: 5.49.2 @@ -1081,7 +1078,7 @@ importers: version: 5.8.3 vite: specifier: 'catalog:' - version: 6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) + version: 6.4.1(@types/node@24.10.11)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) packages/kit/test/build-errors/apps/private-static-env-dynamic-import: devDependencies: @@ -1090,7 +1087,7 @@ importers: version: link:../../../.. '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 6.2.4(svelte@5.49.2)(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) + version: 6.2.4(svelte@5.49.2)(vite@6.4.1(@types/node@24.10.11)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) svelte: specifier: 'catalog:' version: 5.49.2 @@ -1102,7 +1099,7 @@ importers: version: 5.8.3 vite: specifier: 'catalog:' - version: 6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) + version: 6.4.1(@types/node@24.10.11)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) packages/kit/test/build-errors/apps/server-only-folder: devDependencies: @@ -1111,7 +1108,7 @@ importers: version: link:../../../.. '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 6.2.4(svelte@5.49.2)(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) + version: 6.2.4(svelte@5.49.2)(vite@6.4.1(@types/node@24.10.11)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) svelte: specifier: 'catalog:' version: 5.49.2 @@ -1123,7 +1120,7 @@ importers: version: 5.8.3 vite: specifier: 'catalog:' - version: 6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) + version: 6.4.1(@types/node@24.10.11)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) packages/kit/test/build-errors/apps/server-only-folder-dynamic-import: devDependencies: @@ -1132,7 +1129,7 @@ importers: version: link:../../../.. '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 6.2.4(svelte@5.49.2)(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) + version: 6.2.4(svelte@5.49.2)(vite@6.4.1(@types/node@24.10.11)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) svelte: specifier: 'catalog:' version: 5.49.2 @@ -1144,7 +1141,7 @@ importers: version: 5.8.3 vite: specifier: 'catalog:' - version: 6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) + version: 6.4.1(@types/node@24.10.11)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) packages/kit/test/build-errors/apps/server-only-module: devDependencies: @@ -1153,7 +1150,7 @@ importers: version: link:../../../.. '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 6.2.4(svelte@5.49.2)(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) + version: 6.2.4(svelte@5.49.2)(vite@6.4.1(@types/node@24.10.11)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) svelte: specifier: 'catalog:' version: 5.49.2 @@ -1165,7 +1162,7 @@ importers: version: 5.8.3 vite: specifier: 'catalog:' - version: 6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) + version: 6.4.1(@types/node@24.10.11)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) packages/kit/test/build-errors/apps/server-only-module-dynamic-import: devDependencies: @@ -1174,7 +1171,7 @@ importers: version: link:../../../.. '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 6.2.4(svelte@5.49.2)(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) + version: 6.2.4(svelte@5.49.2)(vite@6.4.1(@types/node@24.10.11)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) svelte: specifier: 'catalog:' version: 5.49.2 @@ -1186,7 +1183,7 @@ importers: version: 5.8.3 vite: specifier: 'catalog:' - version: 6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) + version: 6.4.1(@types/node@24.10.11)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) packages/kit/test/build-errors/apps/service-worker-dynamic-public-env: devDependencies: @@ -1195,7 +1192,7 @@ importers: version: link:../../../.. '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 6.2.4(svelte@5.49.2)(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) + version: 6.2.4(svelte@5.49.2)(vite@6.4.1(@types/node@24.10.11)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) svelte: specifier: 'catalog:' version: 5.49.2 @@ -1207,7 +1204,7 @@ importers: version: 5.8.3 vite: specifier: 'catalog:' - version: 6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) + version: 6.4.1(@types/node@24.10.11)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) packages/kit/test/build-errors/apps/service-worker-private-env: devDependencies: @@ -1216,7 +1213,7 @@ importers: version: link:../../../.. '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 6.2.4(svelte@5.49.2)(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) + version: 6.2.4(svelte@5.49.2)(vite@6.4.1(@types/node@24.10.11)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) svelte: specifier: 'catalog:' version: 5.49.2 @@ -1228,7 +1225,7 @@ importers: version: 5.8.3 vite: specifier: 'catalog:' - version: 6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) + version: 6.4.1(@types/node@24.10.11)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) packages/kit/test/build-errors/apps/syntax-error: devDependencies: @@ -1237,7 +1234,7 @@ importers: version: link:../../../.. '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 6.2.4(svelte@5.49.2)(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) + version: 6.2.4(svelte@5.49.2)(vite@6.4.1(@types/node@24.10.11)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) svelte: specifier: 'catalog:' version: 5.49.2 @@ -1249,7 +1246,7 @@ importers: version: 5.8.3 vite: specifier: 'catalog:' - version: 6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) + version: 6.4.1(@types/node@24.10.11)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) packages/kit/test/prerendering/basics: devDependencies: @@ -1258,7 +1255,7 @@ importers: version: link:../../.. '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 6.2.4(svelte@5.49.2)(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) + version: 6.2.4(svelte@5.49.2)(vite@6.4.1(@types/node@24.10.11)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) svelte: specifier: 'catalog:' version: 5.49.2 @@ -1270,10 +1267,10 @@ importers: version: 5.8.3 vite: specifier: 'catalog:' - version: 6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) + version: 6.4.1(@types/node@24.10.11)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) vitest: specifier: 'catalog:' - version: 4.0.16(@opentelemetry/api@1.9.0)(@types/node@18.19.119)(@vitest/browser-playwright@4.0.16)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) + version: 4.0.16(@opentelemetry/api@1.9.0)(@types/node@24.10.11)(@vitest/browser-playwright@4.0.16)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) packages/kit/test/prerendering/options: devDependencies: @@ -1282,7 +1279,7 @@ importers: version: link:../../.. '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 6.2.4(svelte@5.49.2)(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) + version: 6.2.4(svelte@5.49.2)(vite@6.4.1(@types/node@24.10.11)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) svelte: specifier: 'catalog:' version: 5.49.2 @@ -1294,10 +1291,10 @@ importers: version: 5.8.3 vite: specifier: 'catalog:' - version: 6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) + version: 6.4.1(@types/node@24.10.11)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) vitest: specifier: 'catalog:' - version: 4.0.16(@opentelemetry/api@1.9.0)(@types/node@18.19.119)(@vitest/browser-playwright@4.0.16)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) + version: 4.0.16(@opentelemetry/api@1.9.0)(@types/node@24.10.11)(@vitest/browser-playwright@4.0.16)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) packages/kit/test/prerendering/paths-base: devDependencies: @@ -1306,7 +1303,7 @@ importers: version: link:../../.. '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 6.2.4(svelte@5.49.2)(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) + version: 6.2.4(svelte@5.49.2)(vite@6.4.1(@types/node@24.10.11)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) svelte: specifier: 'catalog:' version: 5.49.2 @@ -1318,19 +1315,16 @@ importers: version: 5.8.3 vite: specifier: 'catalog:' - version: 6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) + version: 6.4.1(@types/node@24.10.11)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) vitest: specifier: 'catalog:' - version: 4.0.16(@opentelemetry/api@1.9.0)(@types/node@18.19.119)(@vitest/browser-playwright@4.0.16)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) + version: 4.0.16(@opentelemetry/api@1.9.0)(@types/node@24.10.11)(@vitest/browser-playwright@4.0.16)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) packages/package: dependencies: chokidar: specifier: ^5.0.0 version: 5.0.0 - kleur: - specifier: ^4.1.5 - version: 4.1.5 sade: specifier: ^1.8.1 version: 1.8.1 @@ -1343,10 +1337,10 @@ importers: devDependencies: '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 6.2.4(svelte@5.49.2)(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) + version: 6.2.4(svelte@5.49.2)(vite@6.4.1(@types/node@24.10.11)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) '@types/node': specifier: 'catalog:' - version: 18.19.119 + version: 24.10.11 '@types/semver': specifier: 'catalog:' version: 7.5.8 @@ -1358,13 +1352,13 @@ importers: version: 5.49.2 svelte-preprocess: specifier: 'catalog:' - version: 6.0.0(postcss-load-config@3.1.4(postcss@8.5.6)(ts-node@10.9.2(@types/node@18.19.119)(typescript@5.8.3)))(postcss@8.5.6)(svelte@5.49.2)(typescript@5.8.3) + version: 6.0.0(postcss-load-config@3.1.4(postcss@8.5.6)(ts-node@10.9.2(@types/node@24.10.11)(typescript@5.8.3)))(postcss@8.5.6)(svelte@5.49.2)(typescript@5.8.3) typescript: specifier: ^5.3.3 version: 5.8.3 vitest: specifier: 'catalog:' - version: 4.0.16(@opentelemetry/api@1.9.0)(@types/node@18.19.119)(@vitest/browser-playwright@4.0.16)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) + version: 4.0.16(@opentelemetry/api@1.9.0)(@types/node@24.10.11)(@vitest/browser-playwright@4.0.16)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) packages/test-redirect-importer: dependencies: @@ -1406,7 +1400,7 @@ importers: version: link:../../packages/package '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 6.2.4(svelte@5.49.2)(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) + version: 6.2.4(svelte@5.49.2)(vite@6.4.1(@types/node@24.10.11)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) prettier: specifier: ^3.3.2 version: 3.6.0 @@ -1430,7 +1424,7 @@ importers: version: 1.2.0(typescript@5.8.3) vite: specifier: 'catalog:' - version: 6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) + version: 6.4.1(@types/node@24.10.11)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) packages: @@ -3205,8 +3199,8 @@ packages: '@types/node@12.20.55': resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} - '@types/node@18.19.119': - resolution: {integrity: sha512-d0F6m9itIPaKnrvEMlzE48UjwZaAnFW7Jwibacw9MNdqadjKNpUm9tfJYDwmShJmgqcoqYUX3EMKO1+RWiuuNg==} + '@types/node@24.10.11': + resolution: {integrity: sha512-/Af7O8r1frCVgOz0I62jWUtMohJ0/ZQU/ZoketltOJPZpnb17yoNc9BSoVuV9qlaIXJiPNOpsfq4ByFajSArNQ==} '@types/normalize-package-data@2.4.4': resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} @@ -5730,8 +5724,8 @@ packages: uncrypto@0.1.3: resolution: {integrity: sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q==} - undici-types@5.26.5: - resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + undici-types@7.16.0: + resolution: {integrity: sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==} undici@5.29.0: resolution: {integrity: sha512-raqeBD6NQK4SkWhQzeYKd1KmIG6dllBOTt55Rmkt4HtI9mwdWtJljnrXjAFUBLTSN67HWrOIZ3EPF4kjUw80Bg==} @@ -6148,7 +6142,7 @@ snapshots: dependencies: '@changesets/types': 6.1.0 - '@changesets/cli@2.29.6(@types/node@18.19.119)': + '@changesets/cli@2.29.6(@types/node@24.10.11)': dependencies: '@changesets/apply-release-plan': 7.0.12 '@changesets/assemble-release-plan': 6.0.9 @@ -6164,7 +6158,7 @@ snapshots: '@changesets/should-skip-package': 0.1.2 '@changesets/types': 6.1.0 '@changesets/write': 0.4.0 - '@inquirer/external-editor': 1.0.1(@types/node@18.19.119) + '@inquirer/external-editor': 1.0.1(@types/node@24.10.11) '@manypkg/get-packages': 1.1.3 ansi-colors: 4.1.3 ci-info: 3.9.0 @@ -6801,12 +6795,12 @@ snapshots: '@import-maps/resolve@2.0.0': {} - '@inquirer/external-editor@1.0.1(@types/node@18.19.119)': + '@inquirer/external-editor@1.0.1(@types/node@24.10.11)': dependencies: chardet: 2.1.0 iconv-lite: 0.6.3 optionalDependencies: - '@types/node': 18.19.119 + '@types/node': 24.10.11 '@isaacs/balanced-match@4.0.1': {} @@ -7712,33 +7706,33 @@ snapshots: dependencies: acorn: 8.15.0 - '@sveltejs/eslint-config@8.2.0(@stylistic/eslint-plugin-js@2.1.0(eslint@9.34.0(jiti@2.4.2)))(eslint-config-prettier@9.1.0(eslint@9.34.0(jiti@2.4.2)))(eslint-plugin-n@17.16.1(eslint@9.34.0(jiti@2.4.2))(typescript@5.8.3))(eslint-plugin-svelte@3.9.3(eslint@9.34.0(jiti@2.4.2))(svelte@5.49.2)(ts-node@10.9.2(@types/node@18.19.119)(typescript@5.8.3)))(eslint@9.34.0(jiti@2.4.2))(typescript-eslint@8.43.0(eslint@9.34.0(jiti@2.4.2))(typescript@5.8.3))(typescript@5.8.3)': + '@sveltejs/eslint-config@8.2.0(@stylistic/eslint-plugin-js@2.1.0(eslint@9.34.0(jiti@2.4.2)))(eslint-config-prettier@9.1.0(eslint@9.34.0(jiti@2.4.2)))(eslint-plugin-n@17.16.1(eslint@9.34.0(jiti@2.4.2))(typescript@5.8.3))(eslint-plugin-svelte@3.9.3(eslint@9.34.0(jiti@2.4.2))(svelte@5.49.2)(ts-node@10.9.2(@types/node@24.10.11)(typescript@5.8.3)))(eslint@9.34.0(jiti@2.4.2))(typescript-eslint@8.43.0(eslint@9.34.0(jiti@2.4.2))(typescript@5.8.3))(typescript@5.8.3)': dependencies: '@stylistic/eslint-plugin-js': 2.1.0(eslint@9.34.0(jiti@2.4.2)) eslint: 9.34.0(jiti@2.4.2) eslint-config-prettier: 9.1.0(eslint@9.34.0(jiti@2.4.2)) eslint-plugin-n: 17.16.1(eslint@9.34.0(jiti@2.4.2))(typescript@5.8.3) - eslint-plugin-svelte: 3.9.3(eslint@9.34.0(jiti@2.4.2))(svelte@5.49.2)(ts-node@10.9.2(@types/node@18.19.119)(typescript@5.8.3)) + eslint-plugin-svelte: 3.9.3(eslint@9.34.0(jiti@2.4.2))(svelte@5.49.2)(ts-node@10.9.2(@types/node@24.10.11)(typescript@5.8.3)) globals: 15.15.0 typescript: 5.8.3 typescript-eslint: 8.43.0(eslint@9.34.0(jiti@2.4.2))(typescript@5.8.3) - '@sveltejs/vite-plugin-svelte-inspector@5.0.2(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.49.2)(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)))(svelte@5.49.2)(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0))': + '@sveltejs/vite-plugin-svelte-inspector@5.0.2(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.49.2)(vite@6.4.1(@types/node@24.10.11)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)))(svelte@5.49.2)(vite@6.4.1(@types/node@24.10.11)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0))': dependencies: - '@sveltejs/vite-plugin-svelte': 6.2.4(svelte@5.49.2)(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) + '@sveltejs/vite-plugin-svelte': 6.2.4(svelte@5.49.2)(vite@6.4.1(@types/node@24.10.11)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) obug: 2.1.1 svelte: 5.49.2 - vite: 6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) + vite: 6.4.1(@types/node@24.10.11)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) - '@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.49.2)(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0))': + '@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.49.2)(vite@6.4.1(@types/node@24.10.11)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0))': dependencies: - '@sveltejs/vite-plugin-svelte-inspector': 5.0.2(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.49.2)(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)))(svelte@5.49.2)(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) + '@sveltejs/vite-plugin-svelte-inspector': 5.0.2(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.49.2)(vite@6.4.1(@types/node@24.10.11)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)))(svelte@5.49.2)(vite@6.4.1(@types/node@24.10.11)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) deepmerge: 4.3.1 magic-string: 0.30.21 obug: 2.1.1 svelte: 5.49.2 - vite: 6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) - vitefu: 1.1.1(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) + vite: 6.4.1(@types/node@24.10.11)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) + vitefu: 1.1.1(vite@6.4.1(@types/node@24.10.11)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) '@svitejs/changesets-changelog-github-compact@1.2.0': dependencies: @@ -7765,7 +7759,7 @@ snapshots: '@types/connect@3.4.38': dependencies: - '@types/node': 18.19.119 + '@types/node': 24.10.11 '@types/deep-eql@4.0.2': {} @@ -7780,9 +7774,9 @@ snapshots: '@types/node@12.20.55': {} - '@types/node@18.19.119': + '@types/node@24.10.11': dependencies: - undici-types: 5.26.5 + undici-types: 7.16.0 '@types/normalize-package-data@2.4.4': {} @@ -7794,13 +7788,13 @@ snapshots: '@types/set-cookie-parser@2.4.7': dependencies: - '@types/node': 18.19.119 + '@types/node': 24.10.11 '@types/triple-beam@1.3.5': {} '@types/yauzl@2.10.3': dependencies: - '@types/node': 18.19.119 + '@types/node': 24.10.11 optional: true '@typescript-eslint/eslint-plugin@8.43.0(@typescript-eslint/parser@8.43.0(eslint@9.34.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.34.0(jiti@2.4.2))(typescript@5.8.3)': @@ -7985,29 +7979,29 @@ snapshots: - rollup - supports-color - '@vitest/browser-playwright@4.0.16(playwright@1.58.2)(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0))(vitest@4.0.16)': + '@vitest/browser-playwright@4.0.16(playwright@1.58.2)(vite@6.4.1(@types/node@24.10.11)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0))(vitest@4.0.16)': dependencies: - '@vitest/browser': 4.0.16(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0))(vitest@4.0.16) - '@vitest/mocker': 4.0.16(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) + '@vitest/browser': 4.0.16(vite@6.4.1(@types/node@24.10.11)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0))(vitest@4.0.16) + '@vitest/mocker': 4.0.16(vite@6.4.1(@types/node@24.10.11)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) playwright: 1.58.2 tinyrainbow: 3.0.3 - vitest: 4.0.16(@opentelemetry/api@1.9.0)(@types/node@18.19.119)(@vitest/browser-playwright@4.0.16)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) + vitest: 4.0.16(@opentelemetry/api@1.9.0)(@types/node@24.10.11)(@vitest/browser-playwright@4.0.16)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) transitivePeerDependencies: - bufferutil - msw - utf-8-validate - vite - '@vitest/browser@4.0.16(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0))(vitest@4.0.16)': + '@vitest/browser@4.0.16(vite@6.4.1(@types/node@24.10.11)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0))(vitest@4.0.16)': dependencies: - '@vitest/mocker': 4.0.16(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) + '@vitest/mocker': 4.0.16(vite@6.4.1(@types/node@24.10.11)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) '@vitest/utils': 4.0.16 magic-string: 0.30.21 pixelmatch: 7.1.0 pngjs: 7.0.0 sirv: 3.0.2 tinyrainbow: 3.0.3 - vitest: 4.0.16(@opentelemetry/api@1.9.0)(@types/node@18.19.119)(@vitest/browser-playwright@4.0.16)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) + vitest: 4.0.16(@opentelemetry/api@1.9.0)(@types/node@24.10.11)(@vitest/browser-playwright@4.0.16)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) ws: 8.18.3 transitivePeerDependencies: - bufferutil @@ -8024,13 +8018,13 @@ snapshots: chai: 6.2.2 tinyrainbow: 3.0.3 - '@vitest/mocker@4.0.16(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0))': + '@vitest/mocker@4.0.16(vite@6.4.1(@types/node@24.10.11)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0))': dependencies: '@vitest/spy': 4.0.16 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - vite: 6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) + vite: 6.4.1(@types/node@24.10.11)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) '@vitest/pretty-format@4.0.16': dependencies: @@ -8759,7 +8753,7 @@ snapshots: - supports-color - typescript - eslint-plugin-svelte@3.9.3(eslint@9.34.0(jiti@2.4.2))(svelte@5.49.2)(ts-node@10.9.2(@types/node@18.19.119)(typescript@5.8.3)): + eslint-plugin-svelte@3.9.3(eslint@9.34.0(jiti@2.4.2))(svelte@5.49.2)(ts-node@10.9.2(@types/node@24.10.11)(typescript@5.8.3)): dependencies: '@eslint-community/eslint-utils': 4.9.1(eslint@9.34.0(jiti@2.4.2)) '@jridgewell/sourcemap-codec': 1.5.5 @@ -8768,7 +8762,7 @@ snapshots: globals: 16.5.0 known-css-properties: 0.37.0 postcss: 8.5.6 - postcss-load-config: 3.1.4(postcss@8.5.6)(ts-node@10.9.2(@types/node@18.19.119)(typescript@5.8.3)) + postcss-load-config: 3.1.4(postcss@8.5.6)(ts-node@10.9.2(@types/node@24.10.11)(typescript@5.8.3)) postcss-safe-parser: 7.0.1(postcss@8.5.6) semver: 7.7.3 svelte-eslint-parser: 1.4.1(svelte@5.49.2) @@ -9835,13 +9829,13 @@ snapshots: '@polka/url': 1.0.0-next.28 trouter: 4.0.0 - postcss-load-config@3.1.4(postcss@8.5.6)(ts-node@10.9.2(@types/node@18.19.119)(typescript@5.8.3)): + postcss-load-config@3.1.4(postcss@8.5.6)(ts-node@10.9.2(@types/node@24.10.11)(typescript@5.8.3)): dependencies: lilconfig: 2.1.0 yaml: 1.10.2 optionalDependencies: postcss: 8.5.6 - ts-node: 10.9.2(@types/node@18.19.119)(typescript@5.8.3) + ts-node: 10.9.2(@types/node@24.10.11)(typescript@5.8.3) postcss-safe-parser@7.0.1(postcss@8.5.6): dependencies: @@ -9918,7 +9912,7 @@ snapshots: '@protobufjs/path': 1.1.2 '@protobufjs/pool': 1.1.0 '@protobufjs/utf8': 1.1.0 - '@types/node': 18.19.119 + '@types/node': 24.10.11 long: 5.3.2 protobufjs@8.0.0: @@ -9933,7 +9927,7 @@ snapshots: '@protobufjs/path': 1.1.2 '@protobufjs/pool': 1.1.0 '@protobufjs/utf8': 1.1.0 - '@types/node': 18.19.119 + '@types/node': 24.10.11 long: 5.3.2 publint@0.3.0: @@ -10329,14 +10323,14 @@ snapshots: dependencies: svelte: 5.49.2 - svelte-preprocess@6.0.0(postcss-load-config@3.1.4(postcss@8.5.6)(ts-node@10.9.2(@types/node@18.19.119)(typescript@5.8.3)))(postcss@8.5.6)(svelte@5.49.2)(typescript@5.8.3): + svelte-preprocess@6.0.0(postcss-load-config@3.1.4(postcss@8.5.6)(ts-node@10.9.2(@types/node@24.10.11)(typescript@5.8.3)))(postcss@8.5.6)(svelte@5.49.2)(typescript@5.8.3): dependencies: detect-indent: 6.1.0 strip-indent: 3.0.0 svelte: 5.49.2 optionalDependencies: postcss: 8.5.6 - postcss-load-config: 3.1.4(postcss@8.5.6)(ts-node@10.9.2(@types/node@18.19.119)(typescript@5.8.3)) + postcss-load-config: 3.1.4(postcss@8.5.6)(ts-node@10.9.2(@types/node@24.10.11)(typescript@5.8.3)) typescript: 5.8.3 svelte2tsx@0.7.33(svelte@5.49.2)(typescript@5.8.3): @@ -10450,14 +10444,14 @@ snapshots: picomatch: 4.0.3 typescript: 5.8.3 - ts-node@10.9.2(@types/node@18.19.119)(typescript@5.8.3): + ts-node@10.9.2(@types/node@24.10.11)(typescript@5.8.3): dependencies: '@cspotcode/source-map-support': 0.8.1 '@tsconfig/node10': 1.0.12 '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 - '@types/node': 18.19.119 + '@types/node': 24.10.11 acorn: 8.15.0 acorn-walk: 8.3.4 arg: 4.1.3 @@ -10496,7 +10490,7 @@ snapshots: uncrypto@0.1.3: {} - undici-types@5.26.5: {} + undici-types@7.16.0: {} undici@5.29.0: dependencies: @@ -10575,7 +10569,7 @@ snapshots: transitivePeerDependencies: - rollup - vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0): + vite@6.4.1(@types/node@24.10.11)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0): dependencies: esbuild: 0.25.12 fdir: 6.5.0(picomatch@4.0.3) @@ -10584,20 +10578,20 @@ snapshots: rollup: 4.57.1 tinyglobby: 0.2.15 optionalDependencies: - '@types/node': 18.19.119 + '@types/node': 24.10.11 fsevents: 2.3.3 jiti: 2.4.2 lightningcss: 1.30.1 yaml: 2.8.0 - vitefu@1.1.1(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)): + vitefu@1.1.1(vite@6.4.1(@types/node@24.10.11)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)): optionalDependencies: - vite: 6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) + vite: 6.4.1(@types/node@24.10.11)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) - vitest@4.0.16(@opentelemetry/api@1.9.0)(@types/node@18.19.119)(@vitest/browser-playwright@4.0.16)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0): + vitest@4.0.16(@opentelemetry/api@1.9.0)(@types/node@24.10.11)(@vitest/browser-playwright@4.0.16)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0): dependencies: '@vitest/expect': 4.0.16 - '@vitest/mocker': 4.0.16(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) + '@vitest/mocker': 4.0.16(vite@6.4.1(@types/node@24.10.11)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) '@vitest/pretty-format': 4.0.16 '@vitest/runner': 4.0.16 '@vitest/snapshot': 4.0.16 @@ -10614,12 +10608,12 @@ snapshots: tinyexec: 1.0.2 tinyglobby: 0.2.15 tinyrainbow: 3.0.3 - vite: 6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) + vite: 6.4.1(@types/node@24.10.11)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) why-is-node-running: 2.3.0 optionalDependencies: '@opentelemetry/api': 1.9.0 - '@types/node': 18.19.119 - '@vitest/browser-playwright': 4.0.16(playwright@1.58.2)(vite@6.4.1(@types/node@18.19.119)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0))(vitest@4.0.16) + '@types/node': 24.10.11 + '@vitest/browser-playwright': 4.0.16(playwright@1.58.2)(vite@6.4.1(@types/node@24.10.11)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0))(vitest@4.0.16) transitivePeerDependencies: - jiti - less diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 13157ffbcf9c..c50511b24eab 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -31,7 +31,7 @@ catalog: '@svitejs/changesets-changelog-github-compact': ^1.2.0 '@types/connect': ^3.4.38 '@types/estree': ^1.0.5 - '@types/node': ^18.19.119 + '@types/node': ^24.1.0 '@types/semver': ^7.5.6 '@types/set-cookie-parser': ^2.4.7 '@vitest/browser-playwright': ^4.0.0 From 71e82053ace295607290b5c719f57b6f17ef9bd8 Mon Sep 17 00:00:00 2001 From: Tee Ming Date: Fri, 13 Feb 2026 08:20:33 +0800 Subject: [PATCH 004/545] fix: add svelte.config.js to tsconfig.json `includes` (#12090) Co-authored-by: Ben McCann <322311+benmccann@users.noreply.github.com> --- .changeset/shaggy-walls-wave.md | 5 +++++ packages/kit/src/core/sync/write_tsconfig.js | 1 + packages/kit/src/core/sync/write_tsconfig.spec.js | 1 + 3 files changed, 7 insertions(+) create mode 100644 .changeset/shaggy-walls-wave.md diff --git a/.changeset/shaggy-walls-wave.md b/.changeset/shaggy-walls-wave.md new file mode 100644 index 000000000000..cb7cffae3a95 --- /dev/null +++ b/.changeset/shaggy-walls-wave.md @@ -0,0 +1,5 @@ +--- +"@sveltejs/kit": major +--- + +breaking: `svelte.config.js` will now be included in type checking \ No newline at end of file diff --git a/packages/kit/src/core/sync/write_tsconfig.js b/packages/kit/src/core/sync/write_tsconfig.js index 0e8ef261f5c1..9782950bd2a3 100644 --- a/packages/kit/src/core/sync/write_tsconfig.js +++ b/packages/kit/src/core/sync/write_tsconfig.js @@ -59,6 +59,7 @@ export function get_tsconfig(kit) { 'ambient.d.ts', // careful: changing this name would be a breaking change, because it's referenced in the service-workers documentation 'non-ambient.d.ts', './types/**/$types.d.ts', + config_relative('svelte.config.js'), config_relative('vite.config.js'), config_relative('vite.config.ts') ]); diff --git a/packages/kit/src/core/sync/write_tsconfig.spec.js b/packages/kit/src/core/sync/write_tsconfig.spec.js index b8fe6eadbca8..90cec2d223b1 100644 --- a/packages/kit/src/core/sync/write_tsconfig.spec.js +++ b/packages/kit/src/core/sync/write_tsconfig.spec.js @@ -81,6 +81,7 @@ test('Creates tsconfig include from kit.files', () => { 'ambient.d.ts', 'non-ambient.d.ts', './types/**/$types.d.ts', + '../svelte.config.js', '../vite.config.js', '../vite.config.ts', '../app/**/*.js', From 4777827246727045cf0209399751377564e7951d Mon Sep 17 00:00:00 2001 From: Ben McCann <322311+benmccann@users.noreply.github.com> Date: Fri, 13 Feb 2026 10:47:43 -0800 Subject: [PATCH 005/545] breaking: remove the `preloadStrategy` option (#15256) Closes https://github.com/sveltejs/kit/issues/11190 `modulepreload` is now baseline 2023: https://caniuse.com/?search=modulepreload I left the type so that it will show up in the docs still for users on older versions of Kit Removed the test from the options app because `modulepreload` only gets written when not prerendering --- .changeset/cuddly-radios-brush.md | 5 +++++ packages/kit/src/core/config/index.spec.js | 2 +- packages/kit/src/core/config/options.js | 1 - packages/kit/src/core/sync/write_server.js | 1 - packages/kit/src/exports/public.d.ts | 1 + packages/kit/src/exports/vite/index.js | 7 ++----- .../kit/src/runtime/server/page/render.js | 15 +-------------- packages/kit/src/types/internal.d.ts | 1 - .../kit/test/apps/options/svelte.config.js | 3 --- .../apps/options/test/paths-assets.test.js | 19 ------------------- packages/kit/test/apps/options/test/test.js | 4 ++-- packages/kit/types/index.d.ts | 1 + 12 files changed, 13 insertions(+), 47 deletions(-) create mode 100644 .changeset/cuddly-radios-brush.md diff --git a/.changeset/cuddly-radios-brush.md b/.changeset/cuddly-radios-brush.md new file mode 100644 index 000000000000..96091fec4f61 --- /dev/null +++ b/.changeset/cuddly-radios-brush.md @@ -0,0 +1,5 @@ +--- +'@sveltejs/kit': major +--- + +breaking: remove the `preloadStrategy` option. `modulepreload` will always be used diff --git a/packages/kit/src/core/config/index.spec.js b/packages/kit/src/core/config/index.spec.js index 14ac3361701b..549538e20d18 100644 --- a/packages/kit/src/core/config/index.spec.js +++ b/packages/kit/src/core/config/index.spec.js @@ -100,7 +100,7 @@ const get_defaults = (prefix = '') => ({ }, inlineStyleThreshold: 0, moduleExtensions: ['.js', '.ts'], - output: { preloadStrategy: 'modulepreload', bundleStrategy: 'split' }, + output: { bundleStrategy: 'split' }, outDir: join(prefix, '.svelte-kit'), router: { type: 'pathname', diff --git a/packages/kit/src/core/config/options.js b/packages/kit/src/core/config/options.js index 62d8a291eab2..26cb922ff89c 100644 --- a/packages/kit/src/core/config/options.js +++ b/packages/kit/src/core/config/options.js @@ -159,7 +159,6 @@ const options = object( outDir: string('.svelte-kit'), output: object({ - preloadStrategy: list(['modulepreload', 'preload-js', 'preload-mjs']), bundleStrategy: list(['split', 'single', 'inline']) }), diff --git a/packages/kit/src/core/sync/write_server.js b/packages/kit/src/core/sync/write_server.js index 0e9b1dcb868f..096c0f6c8d3c 100644 --- a/packages/kit/src/core/sync/write_server.js +++ b/packages/kit/src/core/sync/write_server.js @@ -46,7 +46,6 @@ export const options = { env_private_prefix: '${config.kit.env.privatePrefix}', hash_routing: ${s(config.kit.router.type === 'hash')}, hooks: null, // added lazily, via \`get_hooks\` - preload_strategy: ${s(config.kit.output.preloadStrategy)}, root, service_worker: ${has_service_worker}, service_worker_options: ${config.kit.serviceWorker.register ? s(config.kit.serviceWorker.options) : 'null'}, diff --git a/packages/kit/src/exports/public.d.ts b/packages/kit/src/exports/public.d.ts index a3fa18376ee5..6baf0d6f0b0f 100644 --- a/packages/kit/src/exports/public.d.ts +++ b/packages/kit/src/exports/public.d.ts @@ -618,6 +618,7 @@ export interface KitConfig { * - `preload-mjs` - uses `` but with the `.mjs` extension which prevents double-parsing in Chromium. Some static webservers will fail to serve .mjs files with a `Content-Type: application/javascript` header, which will cause your application to break. If that doesn't apply to you, this is the option that will deliver the best performance for the largest number of users, until `modulepreload` is more widely supported. * @default "modulepreload" * @since 1.8.4 + * @deprecated removed in 3.0.0 */ preloadStrategy?: 'modulepreload' | 'preload-js' | 'preload-mjs'; /** diff --git a/packages/kit/src/exports/vite/index.js b/packages/kit/src/exports/vite/index.js index de09e4304930..cabd359a51ac 100644 --- a/packages/kit/src/exports/vite/index.js +++ b/packages/kit/src/exports/vite/index.js @@ -883,9 +883,6 @@ async function kit({ svelte_config }) { }); } - // see the kit.output.preloadStrategy option for details on why we have multiple options here - const ext = kit.output.preloadStrategy === 'preload-mjs' ? 'mjs' : 'js'; - // We could always use a relative asset base path here, but it's better for performance not to. // E.g. Vite generates `new URL('/asset.png', import.meta).href` for a relative path vs just '/asset.png'. // That's larger and takes longer to run and also causes an HTML diff between SSR and client @@ -909,8 +906,8 @@ async function kit({ svelte_config }) { output: { format: inline ? 'iife' : 'esm', name: `__sveltekit_${version_hash}.app`, - entryFileNames: ssr ? '[name].js' : `${prefix}/[name].[hash].${ext}`, - chunkFileNames: ssr ? 'chunks/[name].js' : `${prefix}/chunks/[hash].${ext}`, + entryFileNames: ssr ? '[name].js' : `${prefix}/[name].[hash].js`, + chunkFileNames: ssr ? 'chunks/[name].js' : `${prefix}/chunks/[hash].js`, assetFileNames: `${prefix}/assets/[name].[hash][extname]`, hoistTransitiveImports: false, sourcemapIgnoreList, diff --git a/packages/kit/src/runtime/server/page/render.js b/packages/kit/src/runtime/server/page/render.js index 4a6b80be0373..256e86470855 100644 --- a/packages/kit/src/runtime/server/page/render.js +++ b/packages/kit/src/runtime/server/page/render.js @@ -346,14 +346,8 @@ export async function render_response({ ); for (const path of included_modulepreloads) { - // see the kit.output.preloadStrategy option for details on why we have multiple options here link_headers.add(`<${encodeURI(path)}>; rel="modulepreload"; nopush`); - - if (options.preload_strategy !== 'modulepreload') { - head.add_script_preload(path); - } else { - head.add_link_tag(path, ['rel="modulepreload"']); - } + head.add_link_tag(path, ['rel="modulepreload"']); } } @@ -711,13 +705,6 @@ class Head { this.#stylesheet_links.push(``); } - /** @param {string} href */ - add_script_preload(href) { - this.#script_preloads.push( - `` - ); - } - /** * @param {string} href * @param {string[]} attributes diff --git a/packages/kit/src/types/internal.d.ts b/packages/kit/src/types/internal.d.ts index 66f4fb30a3ea..9dfa66cdd086 100644 --- a/packages/kit/src/types/internal.d.ts +++ b/packages/kit/src/types/internal.d.ts @@ -459,7 +459,6 @@ export interface SSROptions { env_private_prefix: string; hash_routing: boolean; hooks: ServerHooks; - preload_strategy: ValidatedConfig['kit']['output']['preloadStrategy']; root: SSRComponent['default']; service_worker: boolean; service_worker_options: RegistrationOptions; diff --git a/packages/kit/test/apps/options/svelte.config.js b/packages/kit/test/apps/options/svelte.config.js index 4852cc71596d..9a80be89163d 100644 --- a/packages/kit/test/apps/options/svelte.config.js +++ b/packages/kit/test/apps/options/svelte.config.js @@ -26,9 +26,6 @@ const config = { appDir: '_wheee/nested', inlineStyleThreshold: 1024, outDir: '.custom-out-dir', - output: { - preloadStrategy: 'preload-mjs' - }, paths: { base: '/path-base', // @ts-expect-error our env var string can't match the https template literal diff --git a/packages/kit/test/apps/options/test/paths-assets.test.js b/packages/kit/test/apps/options/test/paths-assets.test.js index 8292404084be..472bf68ee8c8 100644 --- a/packages/kit/test/apps/options/test/paths-assets.test.js +++ b/packages/kit/test/apps/options/test/paths-assets.test.js @@ -212,23 +212,4 @@ test.describe('inlineStyleThreshold', () => { await expect(page.locator('#conditionally')).toBeVisible(); expect(await get_computed_style('#conditionally', 'color')).toBe('rgb(0, 0, 255)'); }); - - test('places preload links before inlined styles', async ({ request }) => { - // Skip in dev mode since inlineStyleThreshold works differently there - test.skip(!!process.env.DEV); - - const response = await request.get('/path-base/base/'); - const html = await response.text(); - - const preloadMatch = html.match(/]+rel="preload"/); - const styleMatch = html.match(/]*>/); - - expect(preloadMatch).not.toBeNull(); - expect(styleMatch).not.toBeNull(); - - const preloadIndex = html.indexOf(preloadMatch[0]); - const styleIndex = html.indexOf(styleMatch[0]); - - expect(preloadIndex).toBeLessThan(styleIndex); - }); }); diff --git a/packages/kit/test/apps/options/test/test.js b/packages/kit/test/apps/options/test/test.js index f401c759078f..0cb5c6c027c5 100644 --- a/packages/kit/test/apps/options/test/test.js +++ b/packages/kit/test/apps/options/test/test.js @@ -175,7 +175,7 @@ test.describe('trailingSlash', () => { if (process.env.DEV) { expect(requests.filter((req) => req.endsWith('.svelte')).length).toBe(1); } else { - expect(requests.filter((req) => req.endsWith('.mjs')).length).toBeGreaterThan(0); + expect(requests.filter((req) => req.endsWith('.js')).length).toBeGreaterThan(0); } requests = []; @@ -207,7 +207,7 @@ test.describe('trailingSlash', () => { if (process.env.DEV) { expect(requests.filter((req) => req.endsWith('.svelte')).length).toBe(1); } else { - expect(requests.filter((req) => req.endsWith('.mjs')).length).toBeGreaterThan(0); + expect(requests.filter((req) => req.endsWith('.js')).length).toBeGreaterThan(0); } requests = []; diff --git a/packages/kit/types/index.d.ts b/packages/kit/types/index.d.ts index 2cce8b7592fe..3a9f8149c63c 100644 --- a/packages/kit/types/index.d.ts +++ b/packages/kit/types/index.d.ts @@ -593,6 +593,7 @@ declare module '@sveltejs/kit' { * - `preload-mjs` - uses `` but with the `.mjs` extension which prevents double-parsing in Chromium. Some static webservers will fail to serve .mjs files with a `Content-Type: application/javascript` header, which will cause your application to break. If that doesn't apply to you, this is the option that will deliver the best performance for the largest number of users, until `modulepreload` is more widely supported. * @default "modulepreload" * @since 1.8.4 + * @deprecated removed in 3.0.0 */ preloadStrategy?: 'modulepreload' | 'preload-js' | 'preload-mjs'; /** From df6cf793be013339c88ecf57e59c62a9d504ac7a Mon Sep 17 00:00:00 2001 From: Ben McCann <322311+benmccann@users.noreply.github.com> Date: Fri, 13 Feb 2026 11:51:26 -0800 Subject: [PATCH 006/545] chore: update wrangler (#15316) --- pnpm-lock.yaml | 1254 +++++++++++++++++-------------------------- pnpm-workspace.yaml | 2 +- 2 files changed, 496 insertions(+), 760 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 6c88c975c671..d96ae9e16e0e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -112,8 +112,8 @@ catalogs: specifier: ^4.0.0 version: 4.0.16 wrangler: - specifier: ^4.14.3 - version: 4.14.4 + specifier: ^4.65.0 + version: 4.65.0 importers: @@ -172,7 +172,7 @@ importers: version: 0.8.0-next.18 wrangler: specifier: ^4.0.0 - version: 4.14.4(@cloudflare/workers-types@4.20250508.0) + version: 4.65.0(@cloudflare/workers-types@4.20250508.0) devDependencies: '@playwright/test': specifier: 'catalog:' @@ -212,7 +212,7 @@ importers: version: 6.4.1(@types/node@24.10.11)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) wrangler: specifier: 'catalog:' - version: 4.14.4(@cloudflare/workers-types@4.20250508.0) + version: 4.65.0(@cloudflare/workers-types@4.20250508.0) packages/adapter-cloudflare/test/apps/workers: devDependencies: @@ -233,7 +233,7 @@ importers: version: 6.4.1(@types/node@24.10.11)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) wrangler: specifier: 'catalog:' - version: 4.14.4(@cloudflare/workers-types@4.20250508.0) + version: 4.65.0(@cloudflare/workers-types@4.20250508.0) packages/adapter-netlify: dependencies: @@ -461,7 +461,7 @@ importers: version: 0.30.21 sharp: specifier: ^0.34.1 - version: 0.34.4 + version: 0.34.5 svelte-parse-markup: specifier: ^0.1.5 version: 0.1.5(svelte@5.49.2) @@ -1330,7 +1330,7 @@ importers: version: 1.8.1 semver: specifier: ^7.5.4 - version: 7.7.3 + version: 7.7.4 svelte2tsx: specifier: ~0.7.33 version: 0.7.33(svelte@5.49.2)(typescript@5.8.3) @@ -1515,45 +1515,45 @@ packages: '@changesets/write@0.4.0': resolution: {integrity: sha512-CdTLvIOPiCNuH71pyDu3rA+Q0n65cmAbXnwWH84rKGiFumFzkmHNT8KHTMEchcxN+Kl8I54xGUhJ7l3E7X396Q==} - '@cloudflare/kv-asset-handler@0.4.0': - resolution: {integrity: sha512-+tv3z+SPp+gqTIcImN9o0hqE9xyfQjI1XD9pL6NuKjua9B1y7mNYv0S9cP+QEbA4ppVgGZEmKOvHX5G5Ei1CVA==} + '@cloudflare/kv-asset-handler@0.4.2': + resolution: {integrity: sha512-SIOD2DxrRRwQ+jgzlXCqoEFiKOFqaPjhnNTGKXSRLvp1HiOvapLaFG2kEr9dYQTYe8rKrd9uvDUzmAITeNyaHQ==} engines: {node: '>=18.0.0'} - '@cloudflare/unenv-preset@2.3.1': - resolution: {integrity: sha512-Xq57Qd+ADpt6hibcVBO0uLG9zzRgyRhfCUgBT9s+g3+3Ivg5zDyVgLFy40ES1VdNcu8rPNSivm9A+kGP5IVaPg==} + '@cloudflare/unenv-preset@2.12.1': + resolution: {integrity: sha512-tP/Wi+40aBJovonSNJSsS7aFJY0xjuckKplmzDs2Xat06BJ68B6iG7YDUWXJL8gNn0gqW7YC5WhlYhO3QbugQA==} peerDependencies: - unenv: 2.0.0-rc.15 - workerd: ^1.20250320.0 + unenv: 2.0.0-rc.24 + workerd: ^1.20260115.0 peerDependenciesMeta: workerd: optional: true - '@cloudflare/workerd-darwin-64@1.20250507.0': - resolution: {integrity: sha512-xC+8hmQuOUUNCVT9DWpLMfxhR4Xs4kI8v7Bkybh4pzGC85moH6fMfCBNaP0YQCNAA/BR56aL/AwfvMVGskTK/A==} + '@cloudflare/workerd-darwin-64@1.20260212.0': + resolution: {integrity: sha512-kLxuYutk88Wlo7edp8mlkN68TgZZ9237SUnuX9kNaD5jcOdblUqiBctMRZeRcPsuoX/3g2t0vS4ga02NBEVRNg==} engines: {node: '>=16'} cpu: [x64] os: [darwin] - '@cloudflare/workerd-darwin-arm64@1.20250507.0': - resolution: {integrity: sha512-Oynff5H8yM4trfUFaKdkOvPV3jac8mg7QC19ILZluCVgLx/JGEVLEJ7do1Na9rLqV8CK4gmUXPrUMX7uerhQgg==} + '@cloudflare/workerd-darwin-arm64@1.20260212.0': + resolution: {integrity: sha512-fqoqQWMA1D0ZzDOD8sp0allREM2M8GHdpxMXQ8EdZpZ70z5bJbJ9Vr4qe35++FNIZJspsDHfTw3Xm/M4ELm/dQ==} engines: {node: '>=16'} cpu: [arm64] os: [darwin] - '@cloudflare/workerd-linux-64@1.20250507.0': - resolution: {integrity: sha512-/HAA+Zg/R7Q/Smyl835FUFKjotZN1UzN9j/BHBd0xKmKov97QkXAX8gsyGnyKqRReIOinp8x/8+UebTICR7VJw==} + '@cloudflare/workerd-linux-64@1.20260212.0': + resolution: {integrity: sha512-bCSQoZzDzV5MSh4ueWo1DgmOn4Hf3QBu4Yo3eQFXA2llYFIu/sZgRtkEehw1X2/SY5Sn6O0EMCqxJYRf82Wdeg==} engines: {node: '>=16'} cpu: [x64] os: [linux] - '@cloudflare/workerd-linux-arm64@1.20250507.0': - resolution: {integrity: sha512-NMPibSdOYeycU0IrKkgOESFJQy7dEpHvuatZxQxlT+mIQK0INzI3irp2kKxhF99s25kPC4p+xg9bU3ugTrs3VQ==} + '@cloudflare/workerd-linux-arm64@1.20260212.0': + resolution: {integrity: sha512-GPvp1iiKQodtbUDi6OmR5I0vD75lawB54tdYGtmypuHC7ZOI2WhBmhb3wCxgnQNOG1z7mhCQrzRCoqrKwYbVWQ==} engines: {node: '>=16'} cpu: [arm64] os: [linux] - '@cloudflare/workerd-windows-64@1.20250507.0': - resolution: {integrity: sha512-c91fhNP8ufycdIDqjVyKTqeb4ewkbAYXFQbLreMVgh4LLQQPDDEte8wCdmaFy5bIL0M9d85PpdCq51RCzq/FaQ==} + '@cloudflare/workerd-windows-64@1.20260212.0': + resolution: {integrity: sha512-wHRI218Xn4ndgWJCUHH4Zx0YlU5q/o6OmcxXkcw95tJOsQn4lDrhppioPh4eScxJZALf2X+ODeZcyQTCq5exGw==} engines: {node: '>=16'} cpu: [x64] os: [win32] @@ -1576,8 +1576,8 @@ packages: resolution: {integrity: sha512-Y6+WUMsTFWE5jb20IFP4YGa5IrGY/+a/FbOSjDF/wz9gepU2hwCYSXRHP/vPwBvwcY3SVMASt4yXxbXNXigmZQ==} engines: {node: '>=18'} - '@emnapi/runtime@1.5.0': - resolution: {integrity: sha512-97/BJ3iXHww3djw6hYIfErCZFee7qCtrneuLa20UXFCOTCfBM2cvQHjWJ2EG0s0MtdNwInarqCTz35i4wWXHsQ==} + '@emnapi/runtime@1.8.1': + resolution: {integrity: sha512-mehfKSMWjjNol8659Z8KxEMrdSJDDot5SXMq00dM8BN4o+CLNXQ0xH2V7EchNHV4RmbZLmmPdEaXZc5H2FXmDg==} '@envelop/instrumentation@1.0.0': resolution: {integrity: sha512-cxgkB66RQB95H3X27jlnxCRNTmPuSTgmBAq6/4n2Dtv4hsk4yz8FadA1ggmd0uZzvKqWD6CR+WFgTjhDqg7eyw==} @@ -1589,14 +1589,14 @@ packages: cpu: [ppc64] os: [aix] - '@esbuild/aix-ppc64@0.25.4': - resolution: {integrity: sha512-1VCICWypeQKhVbE9oW/sJaAmjLxhVqacdkvPLEjwlttjfwENRSClS8EjBz0KzRyFSCPDIkuXW34Je/vk7zdB7Q==} + '@esbuild/aix-ppc64@0.27.2': + resolution: {integrity: sha512-GZMB+a0mOMZs4MpDbj8RJp4cw+w1WV5NYD6xzgvzUJ5Ek2jerwfO2eADyI6ExDSUED+1X8aMbegahsJi+8mgpw==} engines: {node: '>=18'} cpu: [ppc64] os: [aix] - '@esbuild/aix-ppc64@0.27.2': - resolution: {integrity: sha512-GZMB+a0mOMZs4MpDbj8RJp4cw+w1WV5NYD6xzgvzUJ5Ek2jerwfO2eADyI6ExDSUED+1X8aMbegahsJi+8mgpw==} + '@esbuild/aix-ppc64@0.27.3': + resolution: {integrity: sha512-9fJMTNFTWZMh5qwrBItuziu834eOCUcEqymSH7pY+zoMVEZg3gcPuBNxH1EvfVYe9h0x/Ptw8KBzv7qxb7l8dg==} engines: {node: '>=18'} cpu: [ppc64] os: [aix] @@ -1607,14 +1607,14 @@ packages: cpu: [arm64] os: [android] - '@esbuild/android-arm64@0.25.4': - resolution: {integrity: sha512-bBy69pgfhMGtCnwpC/x5QhfxAz/cBgQ9enbtwjf6V9lnPI/hMyT9iWpR1arm0l3kttTr4L0KSLpKmLp/ilKS9A==} + '@esbuild/android-arm64@0.27.2': + resolution: {integrity: sha512-pvz8ZZ7ot/RBphf8fv60ljmaoydPU12VuXHImtAs0XhLLw+EXBi2BLe3OYSBslR4rryHvweW5gmkKFwTiFy6KA==} engines: {node: '>=18'} cpu: [arm64] os: [android] - '@esbuild/android-arm64@0.27.2': - resolution: {integrity: sha512-pvz8ZZ7ot/RBphf8fv60ljmaoydPU12VuXHImtAs0XhLLw+EXBi2BLe3OYSBslR4rryHvweW5gmkKFwTiFy6KA==} + '@esbuild/android-arm64@0.27.3': + resolution: {integrity: sha512-YdghPYUmj/FX2SYKJ0OZxf+iaKgMsKHVPF1MAq/P8WirnSpCStzKJFjOjzsW0QQ7oIAiccHdcqjbHmJxRb/dmg==} engines: {node: '>=18'} cpu: [arm64] os: [android] @@ -1625,14 +1625,14 @@ packages: cpu: [arm] os: [android] - '@esbuild/android-arm@0.25.4': - resolution: {integrity: sha512-QNdQEps7DfFwE3hXiU4BZeOV68HHzYwGd0Nthhd3uCkkEKK7/R6MTgM0P7H7FAs5pU/DIWsviMmEGxEoxIZ+ZQ==} + '@esbuild/android-arm@0.27.2': + resolution: {integrity: sha512-DVNI8jlPa7Ujbr1yjU2PfUSRtAUZPG9I1RwW4F4xFB1Imiu2on0ADiI/c3td+KmDtVKNbi+nffGDQMfcIMkwIA==} engines: {node: '>=18'} cpu: [arm] os: [android] - '@esbuild/android-arm@0.27.2': - resolution: {integrity: sha512-DVNI8jlPa7Ujbr1yjU2PfUSRtAUZPG9I1RwW4F4xFB1Imiu2on0ADiI/c3td+KmDtVKNbi+nffGDQMfcIMkwIA==} + '@esbuild/android-arm@0.27.3': + resolution: {integrity: sha512-i5D1hPY7GIQmXlXhs2w8AWHhenb00+GxjxRncS2ZM7YNVGNfaMxgzSGuO8o8SJzRc/oZwU2bcScvVERk03QhzA==} engines: {node: '>=18'} cpu: [arm] os: [android] @@ -1643,14 +1643,14 @@ packages: cpu: [x64] os: [android] - '@esbuild/android-x64@0.25.4': - resolution: {integrity: sha512-TVhdVtQIFuVpIIR282btcGC2oGQoSfZfmBdTip2anCaVYcqWlZXGcdcKIUklfX2wj0JklNYgz39OBqh2cqXvcQ==} + '@esbuild/android-x64@0.27.2': + resolution: {integrity: sha512-z8Ank4Byh4TJJOh4wpz8g2vDy75zFL0TlZlkUkEwYXuPSgX8yzep596n6mT7905kA9uHZsf/o2OJZubl2l3M7A==} engines: {node: '>=18'} cpu: [x64] os: [android] - '@esbuild/android-x64@0.27.2': - resolution: {integrity: sha512-z8Ank4Byh4TJJOh4wpz8g2vDy75zFL0TlZlkUkEwYXuPSgX8yzep596n6mT7905kA9uHZsf/o2OJZubl2l3M7A==} + '@esbuild/android-x64@0.27.3': + resolution: {integrity: sha512-IN/0BNTkHtk8lkOM8JWAYFg4ORxBkZQf9zXiEOfERX/CzxW3Vg1ewAhU7QSWQpVIzTW+b8Xy+lGzdYXV6UZObQ==} engines: {node: '>=18'} cpu: [x64] os: [android] @@ -1661,14 +1661,14 @@ packages: cpu: [arm64] os: [darwin] - '@esbuild/darwin-arm64@0.25.4': - resolution: {integrity: sha512-Y1giCfM4nlHDWEfSckMzeWNdQS31BQGs9/rouw6Ub91tkK79aIMTH3q9xHvzH8d0wDru5Ci0kWB8b3up/nl16g==} + '@esbuild/darwin-arm64@0.27.2': + resolution: {integrity: sha512-davCD2Zc80nzDVRwXTcQP/28fiJbcOwvdolL0sOiOsbwBa72kegmVU0Wrh1MYrbuCL98Omp5dVhQFWRKR2ZAlg==} engines: {node: '>=18'} cpu: [arm64] os: [darwin] - '@esbuild/darwin-arm64@0.27.2': - resolution: {integrity: sha512-davCD2Zc80nzDVRwXTcQP/28fiJbcOwvdolL0sOiOsbwBa72kegmVU0Wrh1MYrbuCL98Omp5dVhQFWRKR2ZAlg==} + '@esbuild/darwin-arm64@0.27.3': + resolution: {integrity: sha512-Re491k7ByTVRy0t3EKWajdLIr0gz2kKKfzafkth4Q8A5n1xTHrkqZgLLjFEHVD+AXdUGgQMq+Godfq45mGpCKg==} engines: {node: '>=18'} cpu: [arm64] os: [darwin] @@ -1679,14 +1679,14 @@ packages: cpu: [x64] os: [darwin] - '@esbuild/darwin-x64@0.25.4': - resolution: {integrity: sha512-CJsry8ZGM5VFVeyUYB3cdKpd/H69PYez4eJh1W/t38vzutdjEjtP7hB6eLKBoOdxcAlCtEYHzQ/PJ/oU9I4u0A==} + '@esbuild/darwin-x64@0.27.2': + resolution: {integrity: sha512-ZxtijOmlQCBWGwbVmwOF/UCzuGIbUkqB1faQRf5akQmxRJ1ujusWsb3CVfk/9iZKr2L5SMU5wPBi1UWbvL+VQA==} engines: {node: '>=18'} cpu: [x64] os: [darwin] - '@esbuild/darwin-x64@0.27.2': - resolution: {integrity: sha512-ZxtijOmlQCBWGwbVmwOF/UCzuGIbUkqB1faQRf5akQmxRJ1ujusWsb3CVfk/9iZKr2L5SMU5wPBi1UWbvL+VQA==} + '@esbuild/darwin-x64@0.27.3': + resolution: {integrity: sha512-vHk/hA7/1AckjGzRqi6wbo+jaShzRowYip6rt6q7VYEDX4LEy1pZfDpdxCBnGtl+A5zq8iXDcyuxwtv3hNtHFg==} engines: {node: '>=18'} cpu: [x64] os: [darwin] @@ -1697,14 +1697,14 @@ packages: cpu: [arm64] os: [freebsd] - '@esbuild/freebsd-arm64@0.25.4': - resolution: {integrity: sha512-yYq+39NlTRzU2XmoPW4l5Ifpl9fqSk0nAJYM/V/WUGPEFfek1epLHJIkTQM6bBs1swApjO5nWgvr843g6TjxuQ==} + '@esbuild/freebsd-arm64@0.27.2': + resolution: {integrity: sha512-lS/9CN+rgqQ9czogxlMcBMGd+l8Q3Nj1MFQwBZJyoEKI50XGxwuzznYdwcav6lpOGv5BqaZXqvBSiB/kJ5op+g==} engines: {node: '>=18'} cpu: [arm64] os: [freebsd] - '@esbuild/freebsd-arm64@0.27.2': - resolution: {integrity: sha512-lS/9CN+rgqQ9czogxlMcBMGd+l8Q3Nj1MFQwBZJyoEKI50XGxwuzznYdwcav6lpOGv5BqaZXqvBSiB/kJ5op+g==} + '@esbuild/freebsd-arm64@0.27.3': + resolution: {integrity: sha512-ipTYM2fjt3kQAYOvo6vcxJx3nBYAzPjgTCk7QEgZG8AUO3ydUhvelmhrbOheMnGOlaSFUoHXB6un+A7q4ygY9w==} engines: {node: '>=18'} cpu: [arm64] os: [freebsd] @@ -1715,14 +1715,14 @@ packages: cpu: [x64] os: [freebsd] - '@esbuild/freebsd-x64@0.25.4': - resolution: {integrity: sha512-0FgvOJ6UUMflsHSPLzdfDnnBBVoCDtBTVyn/MrWloUNvq/5SFmh13l3dvgRPkDihRxb77Y17MbqbCAa2strMQQ==} + '@esbuild/freebsd-x64@0.27.2': + resolution: {integrity: sha512-tAfqtNYb4YgPnJlEFu4c212HYjQWSO/w/h/lQaBK7RbwGIkBOuNKQI9tqWzx7Wtp7bTPaGC6MJvWI608P3wXYA==} engines: {node: '>=18'} cpu: [x64] os: [freebsd] - '@esbuild/freebsd-x64@0.27.2': - resolution: {integrity: sha512-tAfqtNYb4YgPnJlEFu4c212HYjQWSO/w/h/lQaBK7RbwGIkBOuNKQI9tqWzx7Wtp7bTPaGC6MJvWI608P3wXYA==} + '@esbuild/freebsd-x64@0.27.3': + resolution: {integrity: sha512-dDk0X87T7mI6U3K9VjWtHOXqwAMJBNN2r7bejDsc+j03SEjtD9HrOl8gVFByeM0aJksoUuUVU9TBaZa2rgj0oA==} engines: {node: '>=18'} cpu: [x64] os: [freebsd] @@ -1733,14 +1733,14 @@ packages: cpu: [arm64] os: [linux] - '@esbuild/linux-arm64@0.25.4': - resolution: {integrity: sha512-+89UsQTfXdmjIvZS6nUnOOLoXnkUTB9hR5QAeLrQdzOSWZvNSAXAtcRDHWtqAUtAmv7ZM1WPOOeSxDzzzMogiQ==} + '@esbuild/linux-arm64@0.27.2': + resolution: {integrity: sha512-hYxN8pr66NsCCiRFkHUAsxylNOcAQaxSSkHMMjcpx0si13t1LHFphxJZUiGwojB1a/Hd5OiPIqDdXONia6bhTw==} engines: {node: '>=18'} cpu: [arm64] os: [linux] - '@esbuild/linux-arm64@0.27.2': - resolution: {integrity: sha512-hYxN8pr66NsCCiRFkHUAsxylNOcAQaxSSkHMMjcpx0si13t1LHFphxJZUiGwojB1a/Hd5OiPIqDdXONia6bhTw==} + '@esbuild/linux-arm64@0.27.3': + resolution: {integrity: sha512-sZOuFz/xWnZ4KH3YfFrKCf1WyPZHakVzTiqji3WDc0BCl2kBwiJLCXpzLzUBLgmp4veFZdvN5ChW4Eq/8Fc2Fg==} engines: {node: '>=18'} cpu: [arm64] os: [linux] @@ -1751,14 +1751,14 @@ packages: cpu: [arm] os: [linux] - '@esbuild/linux-arm@0.25.4': - resolution: {integrity: sha512-kro4c0P85GMfFYqW4TWOpvmF8rFShbWGnrLqlzp4X1TNWjRY3JMYUfDCtOxPKOIY8B0WC8HN51hGP4I4hz4AaQ==} + '@esbuild/linux-arm@0.27.2': + resolution: {integrity: sha512-vWfq4GaIMP9AIe4yj1ZUW18RDhx6EPQKjwe7n8BbIecFtCQG4CfHGaHuh7fdfq+y3LIA2vGS/o9ZBGVxIDi9hw==} engines: {node: '>=18'} cpu: [arm] os: [linux] - '@esbuild/linux-arm@0.27.2': - resolution: {integrity: sha512-vWfq4GaIMP9AIe4yj1ZUW18RDhx6EPQKjwe7n8BbIecFtCQG4CfHGaHuh7fdfq+y3LIA2vGS/o9ZBGVxIDi9hw==} + '@esbuild/linux-arm@0.27.3': + resolution: {integrity: sha512-s6nPv2QkSupJwLYyfS+gwdirm0ukyTFNl3KTgZEAiJDd+iHZcbTPPcWCcRYH+WlNbwChgH2QkE9NSlNrMT8Gfw==} engines: {node: '>=18'} cpu: [arm] os: [linux] @@ -1769,14 +1769,14 @@ packages: cpu: [ia32] os: [linux] - '@esbuild/linux-ia32@0.25.4': - resolution: {integrity: sha512-yTEjoapy8UP3rv8dB0ip3AfMpRbyhSN3+hY8mo/i4QXFeDxmiYbEKp3ZRjBKcOP862Ua4b1PDfwlvbuwY7hIGQ==} + '@esbuild/linux-ia32@0.27.2': + resolution: {integrity: sha512-MJt5BRRSScPDwG2hLelYhAAKh9imjHK5+NE/tvnRLbIqUWa+0E9N4WNMjmp/kXXPHZGqPLxggwVhz7QP8CTR8w==} engines: {node: '>=18'} cpu: [ia32] os: [linux] - '@esbuild/linux-ia32@0.27.2': - resolution: {integrity: sha512-MJt5BRRSScPDwG2hLelYhAAKh9imjHK5+NE/tvnRLbIqUWa+0E9N4WNMjmp/kXXPHZGqPLxggwVhz7QP8CTR8w==} + '@esbuild/linux-ia32@0.27.3': + resolution: {integrity: sha512-yGlQYjdxtLdh0a3jHjuwOrxQjOZYD/C9PfdbgJJF3TIZWnm/tMd/RcNiLngiu4iwcBAOezdnSLAwQDPqTmtTYg==} engines: {node: '>=18'} cpu: [ia32] os: [linux] @@ -1787,14 +1787,14 @@ packages: cpu: [loong64] os: [linux] - '@esbuild/linux-loong64@0.25.4': - resolution: {integrity: sha512-NeqqYkrcGzFwi6CGRGNMOjWGGSYOpqwCjS9fvaUlX5s3zwOtn1qwg1s2iE2svBe4Q/YOG1q6875lcAoQK/F4VA==} + '@esbuild/linux-loong64@0.27.2': + resolution: {integrity: sha512-lugyF1atnAT463aO6KPshVCJK5NgRnU4yb3FUumyVz+cGvZbontBgzeGFO1nF+dPueHD367a2ZXe1NtUkAjOtg==} engines: {node: '>=18'} cpu: [loong64] os: [linux] - '@esbuild/linux-loong64@0.27.2': - resolution: {integrity: sha512-lugyF1atnAT463aO6KPshVCJK5NgRnU4yb3FUumyVz+cGvZbontBgzeGFO1nF+dPueHD367a2ZXe1NtUkAjOtg==} + '@esbuild/linux-loong64@0.27.3': + resolution: {integrity: sha512-WO60Sn8ly3gtzhyjATDgieJNet/KqsDlX5nRC5Y3oTFcS1l0KWba+SEa9Ja1GfDqSF1z6hif/SkpQJbL63cgOA==} engines: {node: '>=18'} cpu: [loong64] os: [linux] @@ -1805,14 +1805,14 @@ packages: cpu: [mips64el] os: [linux] - '@esbuild/linux-mips64el@0.25.4': - resolution: {integrity: sha512-IcvTlF9dtLrfL/M8WgNI/qJYBENP3ekgsHbYUIzEzq5XJzzVEV/fXY9WFPfEEXmu3ck2qJP8LG/p3Q8f7Zc2Xg==} + '@esbuild/linux-mips64el@0.27.2': + resolution: {integrity: sha512-nlP2I6ArEBewvJ2gjrrkESEZkB5mIoaTswuqNFRv/WYd+ATtUpe9Y09RnJvgvdag7he0OWgEZWhviS1OTOKixw==} engines: {node: '>=18'} cpu: [mips64el] os: [linux] - '@esbuild/linux-mips64el@0.27.2': - resolution: {integrity: sha512-nlP2I6ArEBewvJ2gjrrkESEZkB5mIoaTswuqNFRv/WYd+ATtUpe9Y09RnJvgvdag7he0OWgEZWhviS1OTOKixw==} + '@esbuild/linux-mips64el@0.27.3': + resolution: {integrity: sha512-APsymYA6sGcZ4pD6k+UxbDjOFSvPWyZhjaiPyl/f79xKxwTnrn5QUnXR5prvetuaSMsb4jgeHewIDCIWljrSxw==} engines: {node: '>=18'} cpu: [mips64el] os: [linux] @@ -1823,14 +1823,14 @@ packages: cpu: [ppc64] os: [linux] - '@esbuild/linux-ppc64@0.25.4': - resolution: {integrity: sha512-HOy0aLTJTVtoTeGZh4HSXaO6M95qu4k5lJcH4gxv56iaycfz1S8GO/5Jh6X4Y1YiI0h7cRyLi+HixMR+88swag==} + '@esbuild/linux-ppc64@0.27.2': + resolution: {integrity: sha512-C92gnpey7tUQONqg1n6dKVbx3vphKtTHJaNG2Ok9lGwbZil6DrfyecMsp9CrmXGQJmZ7iiVXvvZH6Ml5hL6XdQ==} engines: {node: '>=18'} cpu: [ppc64] os: [linux] - '@esbuild/linux-ppc64@0.27.2': - resolution: {integrity: sha512-C92gnpey7tUQONqg1n6dKVbx3vphKtTHJaNG2Ok9lGwbZil6DrfyecMsp9CrmXGQJmZ7iiVXvvZH6Ml5hL6XdQ==} + '@esbuild/linux-ppc64@0.27.3': + resolution: {integrity: sha512-eizBnTeBefojtDb9nSh4vvVQ3V9Qf9Df01PfawPcRzJH4gFSgrObw+LveUyDoKU3kxi5+9RJTCWlj4FjYXVPEA==} engines: {node: '>=18'} cpu: [ppc64] os: [linux] @@ -1841,14 +1841,14 @@ packages: cpu: [riscv64] os: [linux] - '@esbuild/linux-riscv64@0.25.4': - resolution: {integrity: sha512-i8JUDAufpz9jOzo4yIShCTcXzS07vEgWzyX3NH2G7LEFVgrLEhjwL3ajFE4fZI3I4ZgiM7JH3GQ7ReObROvSUA==} + '@esbuild/linux-riscv64@0.27.2': + resolution: {integrity: sha512-B5BOmojNtUyN8AXlK0QJyvjEZkWwy/FKvakkTDCziX95AowLZKR6aCDhG7LeF7uMCXEJqwa8Bejz5LTPYm8AvA==} engines: {node: '>=18'} cpu: [riscv64] os: [linux] - '@esbuild/linux-riscv64@0.27.2': - resolution: {integrity: sha512-B5BOmojNtUyN8AXlK0QJyvjEZkWwy/FKvakkTDCziX95AowLZKR6aCDhG7LeF7uMCXEJqwa8Bejz5LTPYm8AvA==} + '@esbuild/linux-riscv64@0.27.3': + resolution: {integrity: sha512-3Emwh0r5wmfm3ssTWRQSyVhbOHvqegUDRd0WhmXKX2mkHJe1SFCMJhagUleMq+Uci34wLSipf8Lagt4LlpRFWQ==} engines: {node: '>=18'} cpu: [riscv64] os: [linux] @@ -1859,14 +1859,14 @@ packages: cpu: [s390x] os: [linux] - '@esbuild/linux-s390x@0.25.4': - resolution: {integrity: sha512-jFnu+6UbLlzIjPQpWCNh5QtrcNfMLjgIavnwPQAfoGx4q17ocOU9MsQ2QVvFxwQoWpZT8DvTLooTvmOQXkO51g==} + '@esbuild/linux-s390x@0.27.2': + resolution: {integrity: sha512-p4bm9+wsPwup5Z8f4EpfN63qNagQ47Ua2znaqGH6bqLlmJ4bx97Y9JdqxgGZ6Y8xVTixUnEkoKSHcpRlDnNr5w==} engines: {node: '>=18'} cpu: [s390x] os: [linux] - '@esbuild/linux-s390x@0.27.2': - resolution: {integrity: sha512-p4bm9+wsPwup5Z8f4EpfN63qNagQ47Ua2znaqGH6bqLlmJ4bx97Y9JdqxgGZ6Y8xVTixUnEkoKSHcpRlDnNr5w==} + '@esbuild/linux-s390x@0.27.3': + resolution: {integrity: sha512-pBHUx9LzXWBc7MFIEEL0yD/ZVtNgLytvx60gES28GcWMqil8ElCYR4kvbV2BDqsHOvVDRrOxGySBM9Fcv744hw==} engines: {node: '>=18'} cpu: [s390x] os: [linux] @@ -1877,14 +1877,14 @@ packages: cpu: [x64] os: [linux] - '@esbuild/linux-x64@0.25.4': - resolution: {integrity: sha512-6e0cvXwzOnVWJHq+mskP8DNSrKBr1bULBvnFLpc1KY+d+irZSgZ02TGse5FsafKS5jg2e4pbvK6TPXaF/A6+CA==} + '@esbuild/linux-x64@0.27.2': + resolution: {integrity: sha512-uwp2Tip5aPmH+NRUwTcfLb+W32WXjpFejTIOWZFw/v7/KnpCDKG66u4DLcurQpiYTiYwQ9B7KOeMJvLCu/OvbA==} engines: {node: '>=18'} cpu: [x64] os: [linux] - '@esbuild/linux-x64@0.27.2': - resolution: {integrity: sha512-uwp2Tip5aPmH+NRUwTcfLb+W32WXjpFejTIOWZFw/v7/KnpCDKG66u4DLcurQpiYTiYwQ9B7KOeMJvLCu/OvbA==} + '@esbuild/linux-x64@0.27.3': + resolution: {integrity: sha512-Czi8yzXUWIQYAtL/2y6vogER8pvcsOsk5cpwL4Gk5nJqH5UZiVByIY8Eorm5R13gq+DQKYg0+JyQoytLQas4dA==} engines: {node: '>=18'} cpu: [x64] os: [linux] @@ -1895,14 +1895,14 @@ packages: cpu: [arm64] os: [netbsd] - '@esbuild/netbsd-arm64@0.25.4': - resolution: {integrity: sha512-vUnkBYxZW4hL/ie91hSqaSNjulOnYXE1VSLusnvHg2u3jewJBz3YzB9+oCw8DABeVqZGg94t9tyZFoHma8gWZQ==} + '@esbuild/netbsd-arm64@0.27.2': + resolution: {integrity: sha512-Kj6DiBlwXrPsCRDeRvGAUb/LNrBASrfqAIok+xB0LxK8CHqxZ037viF13ugfsIpePH93mX7xfJp97cyDuTZ3cw==} engines: {node: '>=18'} cpu: [arm64] os: [netbsd] - '@esbuild/netbsd-arm64@0.27.2': - resolution: {integrity: sha512-Kj6DiBlwXrPsCRDeRvGAUb/LNrBASrfqAIok+xB0LxK8CHqxZ037viF13ugfsIpePH93mX7xfJp97cyDuTZ3cw==} + '@esbuild/netbsd-arm64@0.27.3': + resolution: {integrity: sha512-sDpk0RgmTCR/5HguIZa9n9u+HVKf40fbEUt+iTzSnCaGvY9kFP0YKBWZtJaraonFnqef5SlJ8/TiPAxzyS+UoA==} engines: {node: '>=18'} cpu: [arm64] os: [netbsd] @@ -1913,14 +1913,14 @@ packages: cpu: [x64] os: [netbsd] - '@esbuild/netbsd-x64@0.25.4': - resolution: {integrity: sha512-XAg8pIQn5CzhOB8odIcAm42QsOfa98SBeKUdo4xa8OvX8LbMZqEtgeWE9P/Wxt7MlG2QqvjGths+nq48TrUiKw==} + '@esbuild/netbsd-x64@0.27.2': + resolution: {integrity: sha512-HwGDZ0VLVBY3Y+Nw0JexZy9o/nUAWq9MlV7cahpaXKW6TOzfVno3y3/M8Ga8u8Yr7GldLOov27xiCnqRZf0tCA==} engines: {node: '>=18'} cpu: [x64] os: [netbsd] - '@esbuild/netbsd-x64@0.27.2': - resolution: {integrity: sha512-HwGDZ0VLVBY3Y+Nw0JexZy9o/nUAWq9MlV7cahpaXKW6TOzfVno3y3/M8Ga8u8Yr7GldLOov27xiCnqRZf0tCA==} + '@esbuild/netbsd-x64@0.27.3': + resolution: {integrity: sha512-P14lFKJl/DdaE00LItAukUdZO5iqNH7+PjoBm+fLQjtxfcfFE20Xf5CrLsmZdq5LFFZzb5JMZ9grUwvtVYzjiA==} engines: {node: '>=18'} cpu: [x64] os: [netbsd] @@ -1931,14 +1931,14 @@ packages: cpu: [arm64] os: [openbsd] - '@esbuild/openbsd-arm64@0.25.4': - resolution: {integrity: sha512-Ct2WcFEANlFDtp1nVAXSNBPDxyU+j7+tId//iHXU2f/lN5AmO4zLyhDcpR5Cz1r08mVxzt3Jpyt4PmXQ1O6+7A==} + '@esbuild/openbsd-arm64@0.27.2': + resolution: {integrity: sha512-DNIHH2BPQ5551A7oSHD0CKbwIA/Ox7+78/AWkbS5QoRzaqlev2uFayfSxq68EkonB+IKjiuxBFoV8ESJy8bOHA==} engines: {node: '>=18'} cpu: [arm64] os: [openbsd] - '@esbuild/openbsd-arm64@0.27.2': - resolution: {integrity: sha512-DNIHH2BPQ5551A7oSHD0CKbwIA/Ox7+78/AWkbS5QoRzaqlev2uFayfSxq68EkonB+IKjiuxBFoV8ESJy8bOHA==} + '@esbuild/openbsd-arm64@0.27.3': + resolution: {integrity: sha512-AIcMP77AvirGbRl/UZFTq5hjXK+2wC7qFRGoHSDrZ5v5b8DK/GYpXW3CPRL53NkvDqb9D+alBiC/dV0Fb7eJcw==} engines: {node: '>=18'} cpu: [arm64] os: [openbsd] @@ -1949,14 +1949,14 @@ packages: cpu: [x64] os: [openbsd] - '@esbuild/openbsd-x64@0.25.4': - resolution: {integrity: sha512-xAGGhyOQ9Otm1Xu8NT1ifGLnA6M3sJxZ6ixylb+vIUVzvvd6GOALpwQrYrtlPouMqd/vSbgehz6HaVk4+7Afhw==} + '@esbuild/openbsd-x64@0.27.2': + resolution: {integrity: sha512-/it7w9Nb7+0KFIzjalNJVR5bOzA9Vay+yIPLVHfIQYG/j+j9VTH84aNB8ExGKPU4AzfaEvN9/V4HV+F+vo8OEg==} engines: {node: '>=18'} cpu: [x64] os: [openbsd] - '@esbuild/openbsd-x64@0.27.2': - resolution: {integrity: sha512-/it7w9Nb7+0KFIzjalNJVR5bOzA9Vay+yIPLVHfIQYG/j+j9VTH84aNB8ExGKPU4AzfaEvN9/V4HV+F+vo8OEg==} + '@esbuild/openbsd-x64@0.27.3': + resolution: {integrity: sha512-DnW2sRrBzA+YnE70LKqnM3P+z8vehfJWHXECbwBmH/CU51z6FiqTQTHFenPlHmo3a8UgpLyH3PT+87OViOh1AQ==} engines: {node: '>=18'} cpu: [x64] os: [openbsd] @@ -1973,20 +1973,26 @@ packages: cpu: [arm64] os: [openharmony] + '@esbuild/openharmony-arm64@0.27.3': + resolution: {integrity: sha512-NinAEgr/etERPTsZJ7aEZQvvg/A6IsZG/LgZy+81wON2huV7SrK3e63dU0XhyZP4RKGyTm7aOgmQk0bGp0fy2g==} + 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.25.4': - resolution: {integrity: sha512-Mw+tzy4pp6wZEK0+Lwr76pWLjrtjmJyUB23tHKqEDP74R3q95luY/bXqXZeYl4NYlvwOqoRKlInQialgCKy67Q==} + '@esbuild/sunos-x64@0.27.2': + resolution: {integrity: sha512-kMtx1yqJHTmqaqHPAzKCAkDaKsffmXkPHThSfRwZGyuqyIeBvf08KSsYXl+abf5HDAPMJIPnbBfXvP2ZC2TfHg==} engines: {node: '>=18'} cpu: [x64] os: [sunos] - '@esbuild/sunos-x64@0.27.2': - resolution: {integrity: sha512-kMtx1yqJHTmqaqHPAzKCAkDaKsffmXkPHThSfRwZGyuqyIeBvf08KSsYXl+abf5HDAPMJIPnbBfXvP2ZC2TfHg==} + '@esbuild/sunos-x64@0.27.3': + resolution: {integrity: sha512-PanZ+nEz+eWoBJ8/f8HKxTTD172SKwdXebZ0ndd953gt1HRBbhMsaNqjTyYLGLPdoWHy4zLU7bDVJztF5f3BHA==} engines: {node: '>=18'} cpu: [x64] os: [sunos] @@ -1997,14 +2003,14 @@ packages: cpu: [arm64] os: [win32] - '@esbuild/win32-arm64@0.25.4': - resolution: {integrity: sha512-AVUP428VQTSddguz9dO9ngb+E5aScyg7nOeJDrF1HPYu555gmza3bDGMPhmVXL8svDSoqPCsCPjb265yG/kLKQ==} + '@esbuild/win32-arm64@0.27.2': + resolution: {integrity: sha512-Yaf78O/B3Kkh+nKABUF++bvJv5Ijoy9AN1ww904rOXZFLWVc5OLOfL56W+C8F9xn5JQZa3UX6m+IktJnIb1Jjg==} engines: {node: '>=18'} cpu: [arm64] os: [win32] - '@esbuild/win32-arm64@0.27.2': - resolution: {integrity: sha512-Yaf78O/B3Kkh+nKABUF++bvJv5Ijoy9AN1ww904rOXZFLWVc5OLOfL56W+C8F9xn5JQZa3UX6m+IktJnIb1Jjg==} + '@esbuild/win32-arm64@0.27.3': + resolution: {integrity: sha512-B2t59lWWYrbRDw/tjiWOuzSsFh1Y/E95ofKz7rIVYSQkUYBjfSgf6oeYPNWHToFRr2zx52JKApIcAS/D5TUBnA==} engines: {node: '>=18'} cpu: [arm64] os: [win32] @@ -2015,14 +2021,14 @@ packages: cpu: [ia32] os: [win32] - '@esbuild/win32-ia32@0.25.4': - resolution: {integrity: sha512-i1sW+1i+oWvQzSgfRcxxG2k4I9n3O9NRqy8U+uugaT2Dy7kLO9Y7wI72haOahxceMX8hZAzgGou1FhndRldxRg==} + '@esbuild/win32-ia32@0.27.2': + resolution: {integrity: sha512-Iuws0kxo4yusk7sw70Xa2E2imZU5HoixzxfGCdxwBdhiDgt9vX9VUCBhqcwY7/uh//78A1hMkkROMJq9l27oLQ==} engines: {node: '>=18'} cpu: [ia32] os: [win32] - '@esbuild/win32-ia32@0.27.2': - resolution: {integrity: sha512-Iuws0kxo4yusk7sw70Xa2E2imZU5HoixzxfGCdxwBdhiDgt9vX9VUCBhqcwY7/uh//78A1hMkkROMJq9l27oLQ==} + '@esbuild/win32-ia32@0.27.3': + resolution: {integrity: sha512-QLKSFeXNS8+tHW7tZpMtjlNb7HKau0QDpwm49u0vUp9y1WOF+PEzkU84y9GqYaAVW8aH8f3GcBck26jh54cX4Q==} engines: {node: '>=18'} cpu: [ia32] os: [win32] @@ -2033,14 +2039,14 @@ packages: cpu: [x64] os: [win32] - '@esbuild/win32-x64@0.25.4': - resolution: {integrity: sha512-nOT2vZNw6hJ+z43oP1SPea/G/6AbN6X+bGNhNuq8NtRHy4wsMhw765IKLNmnjek7GvjWBYQ8Q5VBoYTFg9y1UQ==} + '@esbuild/win32-x64@0.27.2': + resolution: {integrity: sha512-sRdU18mcKf7F+YgheI/zGf5alZatMUTKj/jNS6l744f9u3WFu4v7twcUI9vu4mknF4Y9aDlblIie0IM+5xxaqQ==} engines: {node: '>=18'} cpu: [x64] os: [win32] - '@esbuild/win32-x64@0.27.2': - resolution: {integrity: sha512-sRdU18mcKf7F+YgheI/zGf5alZatMUTKj/jNS6l744f9u3WFu4v7twcUI9vu4mknF4Y9aDlblIie0IM+5xxaqQ==} + '@esbuild/win32-x64@0.27.3': + resolution: {integrity: sha512-4uJGhsxuptu3OcpVAzli+/gWusVGwZZHTlS63hh++ehExkVT8SgiEf7/uC/PclrPPkLhZqGgCTjd0VWLo6xMqA==} engines: {node: '>=18'} cpu: [x64] os: [win32] @@ -2086,10 +2092,6 @@ packages: '@fastify/accept-negotiator@2.0.1': resolution: {integrity: sha512-/c/TW2bO/v9JeEgoD/g1G5GxGeCF1Hafdf79WPmUlgYiBXummY0oX3VVq4yFkKKVBKDNlaDUYoab7g38RpPqCQ==} - '@fastify/busboy@2.1.1': - resolution: {integrity: sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==} - engines: {node: '>=14'} - '@fastify/busboy@3.1.1': resolution: {integrity: sha512-5DGmA8FTdB2XbDeEwc/5ZXBl6UbBAyBOOLlPuBnZ/N1SwdH9Ii+cOX3tBROlDgcTXxjOYnLMVoKk9+FXAw0CJw==} @@ -2136,255 +2138,151 @@ packages: resolution: {integrity: sha512-A5P/LfWGFSl6nsckYtjw9da+19jB8hkJ6ACTGcDfEJ0aE+l2n2El7dsVM7UVHZQ9s2lmYMWlrS21YLy2IR1LUw==} engines: {node: '>=18'} - '@img/sharp-darwin-arm64@0.33.5': - resolution: {integrity: sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [arm64] - os: [darwin] - - '@img/sharp-darwin-arm64@0.34.4': - resolution: {integrity: sha512-sitdlPzDVyvmINUdJle3TNHl+AG9QcwiAMsXmccqsCOMZNIdW2/7S26w0LyU8euiLVzFBL3dXPwVCq/ODnf2vA==} + '@img/sharp-darwin-arm64@0.34.5': + resolution: {integrity: sha512-imtQ3WMJXbMY4fxb/Ndp6HBTNVtWCUI0WdobyheGf5+ad6xX8VIDO8u2xE4qc/fr08CKG/7dDseFtn6M6g/r3w==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [darwin] - '@img/sharp-darwin-x64@0.33.5': - resolution: {integrity: sha512-fyHac4jIc1ANYGRDxtiqelIbdWkIuQaI84Mv45KvGRRxSAa7o7d1ZKAOBaYbnepLC1WqxfpimdeWfvqqSGwR2Q==} + '@img/sharp-darwin-x64@0.34.5': + resolution: {integrity: sha512-YNEFAF/4KQ/PeW0N+r+aVVsoIY0/qxxikF2SWdp+NRkmMB7y9LBZAVqQ4yhGCm/H3H270OSykqmQMKLBhBJDEw==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [darwin] - '@img/sharp-darwin-x64@0.34.4': - resolution: {integrity: sha512-rZheupWIoa3+SOdF/IcUe1ah4ZDpKBGWcsPX6MT0lYniH9micvIU7HQkYTfrx5Xi8u+YqwLtxC/3vl8TQN6rMg==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [x64] - os: [darwin] - - '@img/sharp-libvips-darwin-arm64@1.0.4': - resolution: {integrity: sha512-XblONe153h0O2zuFfTAbQYAX2JhYmDHeWikp1LM9Hul9gVPjFY427k6dFEcOL72O01QxQsWi761svJ/ev9xEDg==} - cpu: [arm64] - os: [darwin] - - '@img/sharp-libvips-darwin-arm64@1.2.3': - resolution: {integrity: sha512-QzWAKo7kpHxbuHqUC28DZ9pIKpSi2ts2OJnoIGI26+HMgq92ZZ4vk8iJd4XsxN+tYfNJxzH6W62X5eTcsBymHw==} + '@img/sharp-libvips-darwin-arm64@1.2.4': + resolution: {integrity: sha512-zqjjo7RatFfFoP0MkQ51jfuFZBnVE2pRiaydKJ1G/rHZvnsrHAOcQALIi9sA5co5xenQdTugCvtb1cuf78Vf4g==} cpu: [arm64] os: [darwin] - '@img/sharp-libvips-darwin-x64@1.0.4': - resolution: {integrity: sha512-xnGR8YuZYfJGmWPvmlunFaWJsb9T/AO2ykoP3Fz/0X5XV2aoYBPkX6xqCQvUTKKiLddarLaxpzNe+b1hjeWHAQ==} - cpu: [x64] - os: [darwin] - - '@img/sharp-libvips-darwin-x64@1.2.3': - resolution: {integrity: sha512-Ju+g2xn1E2AKO6YBhxjj+ACcsPQRHT0bhpglxcEf+3uyPY+/gL8veniKoo96335ZaPo03bdDXMv0t+BBFAbmRA==} + '@img/sharp-libvips-darwin-x64@1.2.4': + resolution: {integrity: sha512-1IOd5xfVhlGwX+zXv2N93k0yMONvUlANylbJw1eTah8K/Jtpi15KC+WSiaX/nBmbm2HxRM1gZ0nSdjSsrZbGKg==} cpu: [x64] os: [darwin] - '@img/sharp-libvips-linux-arm64@1.0.4': - resolution: {integrity: sha512-9B+taZ8DlyyqzZQnoeIvDVR/2F4EbMepXMc/NdVbkzsJbzkUjhXv/70GQJ7tdLA4YJgNP25zukcxpX2/SueNrA==} - cpu: [arm64] - os: [linux] - libc: [glibc] - - '@img/sharp-libvips-linux-arm64@1.2.3': - resolution: {integrity: sha512-I4RxkXU90cpufazhGPyVujYwfIm9Nk1QDEmiIsaPwdnm013F7RIceaCc87kAH+oUB1ezqEvC6ga4m7MSlqsJvQ==} + '@img/sharp-libvips-linux-arm64@1.2.4': + resolution: {integrity: sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==} cpu: [arm64] os: [linux] libc: [glibc] - '@img/sharp-libvips-linux-arm@1.0.5': - resolution: {integrity: sha512-gvcC4ACAOPRNATg/ov8/MnbxFDJqf/pDePbBnuBDcjsI8PssmjoKMAz4LtLaVi+OnSb5FK/yIOamqDwGmXW32g==} + '@img/sharp-libvips-linux-arm@1.2.4': + resolution: {integrity: sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==} cpu: [arm] os: [linux] libc: [glibc] - '@img/sharp-libvips-linux-arm@1.2.3': - resolution: {integrity: sha512-x1uE93lyP6wEwGvgAIV0gP6zmaL/a0tGzJs/BIDDG0zeBhMnuUPm7ptxGhUbcGs4okDJrk4nxgrmxpib9g6HpA==} - cpu: [arm] - os: [linux] - libc: [glibc] - - '@img/sharp-libvips-linux-ppc64@1.2.3': - resolution: {integrity: sha512-Y2T7IsQvJLMCBM+pmPbM3bKT/yYJvVtLJGfCs4Sp95SjvnFIjynbjzsa7dY1fRJX45FTSfDksbTp6AGWudiyCg==} + '@img/sharp-libvips-linux-ppc64@1.2.4': + resolution: {integrity: sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==} cpu: [ppc64] os: [linux] libc: [glibc] - '@img/sharp-libvips-linux-s390x@1.0.4': - resolution: {integrity: sha512-u7Wz6ntiSSgGSGcjZ55im6uvTrOxSIS8/dgoVMoiGE9I6JAfU50yH5BoDlYA1tcuGS7g/QNtetJnxA6QEsCVTA==} - cpu: [s390x] + '@img/sharp-libvips-linux-riscv64@1.2.4': + resolution: {integrity: sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==} + cpu: [riscv64] os: [linux] libc: [glibc] - '@img/sharp-libvips-linux-s390x@1.2.3': - resolution: {integrity: sha512-RgWrs/gVU7f+K7P+KeHFaBAJlNkD1nIZuVXdQv6S+fNA6syCcoboNjsV2Pou7zNlVdNQoQUpQTk8SWDHUA3y/w==} + '@img/sharp-libvips-linux-s390x@1.2.4': + resolution: {integrity: sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==} cpu: [s390x] os: [linux] libc: [glibc] - '@img/sharp-libvips-linux-x64@1.0.4': - resolution: {integrity: sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw==} + '@img/sharp-libvips-linux-x64@1.2.4': + resolution: {integrity: sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==} cpu: [x64] os: [linux] libc: [glibc] - '@img/sharp-libvips-linux-x64@1.2.3': - resolution: {integrity: sha512-3JU7LmR85K6bBiRzSUc/Ff9JBVIFVvq6bomKE0e63UXGeRw2HPVEjoJke1Yx+iU4rL7/7kUjES4dZ/81Qjhyxg==} - cpu: [x64] - os: [linux] - libc: [glibc] - - '@img/sharp-libvips-linuxmusl-arm64@1.0.4': - resolution: {integrity: sha512-9Ti+BbTYDcsbp4wfYib8Ctm1ilkugkA/uscUn6UXK1ldpC1JjiXbLfFZtRlBhjPZ5o1NCLiDbg8fhUPKStHoTA==} - cpu: [arm64] - os: [linux] - libc: [musl] - - '@img/sharp-libvips-linuxmusl-arm64@1.2.3': - resolution: {integrity: sha512-F9q83RZ8yaCwENw1GieztSfj5msz7GGykG/BA+MOUefvER69K/ubgFHNeSyUu64amHIYKGDs4sRCMzXVj8sEyw==} + '@img/sharp-libvips-linuxmusl-arm64@1.2.4': + resolution: {integrity: sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==} cpu: [arm64] os: [linux] libc: [musl] - '@img/sharp-libvips-linuxmusl-x64@1.0.4': - resolution: {integrity: sha512-viYN1KX9m+/hGkJtvYYp+CCLgnJXwiQB39damAO7WMdKWlIhmYTfHjwSbQeUK/20vY154mwezd9HflVFM1wVSw==} + '@img/sharp-libvips-linuxmusl-x64@1.2.4': + resolution: {integrity: sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==} cpu: [x64] os: [linux] libc: [musl] - '@img/sharp-libvips-linuxmusl-x64@1.2.3': - resolution: {integrity: sha512-U5PUY5jbc45ANM6tSJpsgqmBF/VsL6LnxJmIf11kB7J5DctHgqm0SkuXzVWtIY90GnJxKnC/JT251TDnk1fu/g==} - cpu: [x64] - os: [linux] - libc: [musl] - - '@img/sharp-linux-arm64@0.33.5': - resolution: {integrity: sha512-JMVv+AMRyGOHtO1RFBiJy/MBsgz0x4AWrT6QoEVVTyh1E39TrCUpTRI7mx9VksGX4awWASxqCYLCV4wBZHAYxA==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [arm64] - os: [linux] - libc: [glibc] - - '@img/sharp-linux-arm64@0.34.4': - resolution: {integrity: sha512-YXU1F/mN/Wu786tl72CyJjP/Ngl8mGHN1hST4BGl+hiW5jhCnV2uRVTNOcaYPs73NeT/H8Upm3y9582JVuZHrQ==} + '@img/sharp-linux-arm64@0.34.5': + resolution: {integrity: sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [linux] libc: [glibc] - '@img/sharp-linux-arm@0.33.5': - resolution: {integrity: sha512-JTS1eldqZbJxjvKaAkxhZmBqPRGmxgu+qFKSInv8moZ2AmT5Yib3EQ1c6gp493HvrvV8QgdOXdyaIBrhvFhBMQ==} + '@img/sharp-linux-arm@0.34.5': + resolution: {integrity: sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm] os: [linux] libc: [glibc] - '@img/sharp-linux-arm@0.34.4': - resolution: {integrity: sha512-Xyam4mlqM0KkTHYVSuc6wXRmM7LGN0P12li03jAnZ3EJWZqj83+hi8Y9UxZUbxsgsK1qOEwg7O0Bc0LjqQVtxA==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [arm] - os: [linux] - libc: [glibc] - - '@img/sharp-linux-ppc64@0.34.4': - resolution: {integrity: sha512-F4PDtF4Cy8L8hXA2p3TO6s4aDt93v+LKmpcYFLAVdkkD3hSxZzee0rh6/+94FpAynsuMpLX5h+LRsSG3rIciUQ==} + '@img/sharp-linux-ppc64@0.34.5': + resolution: {integrity: sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [ppc64] os: [linux] libc: [glibc] - '@img/sharp-linux-s390x@0.33.5': - resolution: {integrity: sha512-y/5PCd+mP4CA/sPDKl2961b+C9d+vPAveS33s6Z3zfASk2j5upL6fXVPZi7ztePZ5CuH+1kW8JtvxgbuXHRa4Q==} + '@img/sharp-linux-riscv64@0.34.5': + resolution: {integrity: sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [s390x] + cpu: [riscv64] os: [linux] libc: [glibc] - '@img/sharp-linux-s390x@0.34.4': - resolution: {integrity: sha512-qVrZKE9Bsnzy+myf7lFKvng6bQzhNUAYcVORq2P7bDlvmF6u2sCmK2KyEQEBdYk+u3T01pVsPrkj943T1aJAsw==} + '@img/sharp-linux-s390x@0.34.5': + resolution: {integrity: sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [s390x] os: [linux] libc: [glibc] - '@img/sharp-linux-x64@0.33.5': - resolution: {integrity: sha512-opC+Ok5pRNAzuvq1AG0ar+1owsu842/Ab+4qvU879ippJBHvyY5n2mxF1izXqkPYlGuP/M556uh53jRLJmzTWA==} + '@img/sharp-linux-x64@0.34.5': + resolution: {integrity: sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [linux] libc: [glibc] - '@img/sharp-linux-x64@0.34.4': - resolution: {integrity: sha512-ZfGtcp2xS51iG79c6Vhw9CWqQC8l2Ot8dygxoDoIQPTat/Ov3qAa8qpxSrtAEAJW+UjTXc4yxCjNfxm4h6Xm2A==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [x64] - os: [linux] - libc: [glibc] - - '@img/sharp-linuxmusl-arm64@0.33.5': - resolution: {integrity: sha512-XrHMZwGQGvJg2V/oRSUfSAfjfPxO+4DkiRh6p2AFjLQztWUuY/o8Mq0eMQVIY7HJ1CDQUJlxGGZRw1a5bqmd1g==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [arm64] - os: [linux] - libc: [musl] - - '@img/sharp-linuxmusl-arm64@0.34.4': - resolution: {integrity: sha512-8hDVvW9eu4yHWnjaOOR8kHVrew1iIX+MUgwxSuH2XyYeNRtLUe4VNioSqbNkB7ZYQJj9rUTT4PyRscyk2PXFKA==} + '@img/sharp-linuxmusl-arm64@0.34.5': + resolution: {integrity: sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [linux] libc: [musl] - '@img/sharp-linuxmusl-x64@0.33.5': - resolution: {integrity: sha512-WT+d/cgqKkkKySYmqoZ8y3pxx7lx9vVejxW/W4DOFMYVSkErR+w7mf2u8m/y4+xHe7yY9DAXQMWQhpnMuFfScw==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [x64] - os: [linux] - libc: [musl] - - '@img/sharp-linuxmusl-x64@0.34.4': - resolution: {integrity: sha512-lU0aA5L8QTlfKjpDCEFOZsTYGn3AEiO6db8W5aQDxj0nQkVrZWmN3ZP9sYKWJdtq3PWPhUNlqehWyXpYDcI9Sg==} + '@img/sharp-linuxmusl-x64@0.34.5': + resolution: {integrity: sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [linux] libc: [musl] - '@img/sharp-wasm32@0.33.5': - resolution: {integrity: sha512-ykUW4LVGaMcU9lu9thv85CbRMAwfeadCJHRsg2GmeRa/cJxsVY9Rbd57JcMxBkKHag5U/x7TSBpScF4U8ElVzg==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [wasm32] - - '@img/sharp-wasm32@0.34.4': - resolution: {integrity: sha512-33QL6ZO/qpRyG7woB/HUALz28WnTMI2W1jgX3Nu2bypqLIKx/QKMILLJzJjI+SIbvXdG9fUnmrxR7vbi1sTBeA==} + '@img/sharp-wasm32@0.34.5': + resolution: {integrity: sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [wasm32] - '@img/sharp-win32-arm64@0.34.4': - resolution: {integrity: sha512-2Q250do/5WXTwxW3zjsEuMSv5sUU4Tq9VThWKlU2EYLm4MB7ZeMwF+SFJutldYODXF6jzc6YEOC+VfX0SZQPqA==} + '@img/sharp-win32-arm64@0.34.5': + resolution: {integrity: sha512-WQ3AgWCWYSb2yt+IG8mnC6Jdk9Whs7O0gxphblsLvdhSpSTtmu69ZG1Gkb6NuvxsNACwiPV6cNSZNzt0KPsw7g==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [win32] - '@img/sharp-win32-ia32@0.33.5': - resolution: {integrity: sha512-T36PblLaTwuVJ/zw/LaH0PdZkRz5rd3SmMHX8GSmR7vtNSP5Z6bQkExdSK7xGWyxLw4sUknBuugTelgw2faBbQ==} + '@img/sharp-win32-ia32@0.34.5': + resolution: {integrity: sha512-FV9m/7NmeCmSHDD5j4+4pNI8Cp3aW+JvLoXcTUo0IqyjSfAZJ8dIUmijx1qaJsIiU+Hosw6xM5KijAWRJCSgNg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [ia32] os: [win32] - '@img/sharp-win32-ia32@0.34.4': - resolution: {integrity: sha512-3ZeLue5V82dT92CNL6rsal6I2weKw1cYu+rGKm8fOCCtJTR2gYeUfY3FqUnIJsMUPIH68oS5jmZ0NiJ508YpEw==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [ia32] - os: [win32] - - '@img/sharp-win32-x64@0.33.5': - resolution: {integrity: sha512-MpY/o8/8kj+EcnxwvrP4aTJSWw/aZ7JIGR4aBeZkZw5B7/Jn+tY9/VNwtcoGmdT7GfggGIU4kygOMSbYnOrAbg==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [x64] - os: [win32] - - '@img/sharp-win32-x64@0.34.4': - resolution: {integrity: sha512-xIyj4wpYs8J18sVN3mSQjwrw7fKUqRw+Z5rnHNCy5fYTxigBz81u5mOMPmFumwjcn8+ld1ppptMBCLic1nz6ig==} + '@img/sharp-win32-x64@0.34.5': + resolution: {integrity: sha512-+29YMsqY2/9eFEiW93eqWnuLcWcufowXewwSNIT6UwZdUUCrM3oFjMWH/Z6/TMmb4hlFenmfAVbpWeup2jryCw==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [win32] @@ -2914,6 +2812,15 @@ packages: '@polka/url@1.0.0-next.28': resolution: {integrity: sha512-8LduaNlMZGwdZ6qWrKlfa+2M4gahzFkprZiAt2TF8uS0qQgBizKXpXURqvTJ4WtmupWxaLqjRb2UCTe72mu+Aw==} + '@poppinss/colors@4.1.6': + resolution: {integrity: sha512-H9xkIdFswbS8n1d6vmRd8+c10t2Qe+rZITbbDHHkQixH5+2x1FDGmi/0K+WgWiqQFKPSlIYB7jlH6Kpfn6Fleg==} + + '@poppinss/dumper@0.6.5': + resolution: {integrity: sha512-NBdYIb90J7LfOI32dOewKI1r7wnkiH6m920puQ3qHUeZkxNkQiFnXVWoE6YtFSv6QOiPPf7ys6i+HWWecDz7sw==} + + '@poppinss/exception@1.2.3': + resolution: {integrity: sha512-dCED+QRChTVatE9ibtoaxc+WkdzOSjYTKi/+uacHWIsfodVfpsueo3+DKpgU5Px8qXjgmXkSvhXvSCz3fnP9lw==} + '@protobufjs/aspromise@1.1.2': resolution: {integrity: sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==} @@ -3122,6 +3029,13 @@ packages: cpu: [x64] os: [win32] + '@sindresorhus/is@7.2.0': + resolution: {integrity: sha512-P1Cz1dWaFfR4IR+U13mqqiGsLFf1KbayybWwdd2vfctdV6hDpUkgCY0nKOLLTMSoRd/jJNjtbqzf13K8DCCXQw==} + engines: {node: '>=18'} + + '@speed-highlight/core@1.2.14': + resolution: {integrity: sha512-G4ewlBNhUtlLvrJTb88d2mdy2KRijzs4UhnlrOSRT4bmjh/IqNElZa3zkrZ+TC47TwtlDWzVLFADljF1Ijp5hA==} + '@standard-schema/spec@1.0.0': resolution: {integrity: sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA==} @@ -3244,8 +3158,8 @@ packages: peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/project-service@8.54.0': - resolution: {integrity: sha512-YPf+rvJ1s7MyiWM4uTRhE4DvBXrEV+d8oC3P9Y2eT7S+HBS0clybdMIPnhiATi9vZOYDc7OQ1L/i6ga6NFYK/g==} + '@typescript-eslint/project-service@8.55.0': + resolution: {integrity: sha512-zRcVVPFUYWa3kNnjaZGXSu3xkKV1zXy8M4nO/pElzQhFweb7PPtluDLQtKArEOGmjXoRjnUZ29NjOiF0eCDkcQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' @@ -3254,8 +3168,8 @@ packages: resolution: {integrity: sha512-daSWlQ87ZhsjrbMLvpuuMAt3y4ba57AuvadcR7f3nl8eS3BjRc8L9VLxFLk92RL5xdXOg6IQ+qKjjqNEimGuAg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/scope-manager@8.54.0': - resolution: {integrity: sha512-27rYVQku26j/PbHYcVfRPonmOlVI6gihHtXFbTdB5sb6qA0wdAQAbyXFVarQ5t4HRojIz64IV90YtsjQSSGlQg==} + '@typescript-eslint/scope-manager@8.55.0': + resolution: {integrity: sha512-fVu5Omrd3jeqeQLiB9f1YsuK/iHFOwb04bCtY4BSCLgjNbOD33ZdV6KyEqplHr+IlpgT0QTZ/iJ+wT7hvTx49Q==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@typescript-eslint/tsconfig-utils@8.43.0': @@ -3264,8 +3178,8 @@ packages: peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/tsconfig-utils@8.54.0': - resolution: {integrity: sha512-dRgOyT2hPk/JwxNMZDsIXDgyl9axdJI3ogZ2XWhBPsnZUv+hPesa5iuhdYt2gzwA9t8RE5ytOJ6xB0moV0Ujvw==} + '@typescript-eslint/tsconfig-utils@8.55.0': + resolution: {integrity: sha512-1R9cXqY7RQd7WuqSN47PK9EDpgFUK3VqdmbYrvWJZYDd0cavROGn+74ktWBlmJ13NXUQKlZ/iAEQHI/V0kKe0Q==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' @@ -3281,8 +3195,8 @@ packages: resolution: {integrity: sha512-vQ2FZaxJpydjSZJKiSW/LJsabFFvV7KgLC5DiLhkBcykhQj8iK9BOaDmQt74nnKdLvceM5xmhaTF+pLekrxEkw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/types@8.54.0': - resolution: {integrity: sha512-PDUI9R1BVjqu7AUDsRBbKMtwmjWcn4J3le+5LpcFgWULN3LvHC5rkc9gCVxbrsrGmO1jfPybN5s6h4Jy+OnkAA==} + '@typescript-eslint/types@8.55.0': + resolution: {integrity: sha512-ujT0Je8GI5BJWi+/mMoR0wxwVEQaxM+pi30xuMiJETlX80OPovb2p9E8ss87gnSVtYXtJoU9U1Cowcr6w2FE0w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@typescript-eslint/typescript-estree@8.43.0': @@ -3291,8 +3205,8 @@ packages: peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/typescript-estree@8.54.0': - resolution: {integrity: sha512-BUwcskRaPvTk6fzVWgDPdUndLjB87KYDrN5EYGetnktoeAvPtO4ONHlAZDnj5VFnUANg0Sjm7j4usBlnoVMHwA==} + '@typescript-eslint/typescript-estree@8.55.0': + resolution: {integrity: sha512-EwrH67bSWdx/3aRQhCoxDaHM+CrZjotc2UCCpEDVqfCE+7OjKAGWNY2HsCSTEVvWH2clYQK8pdeLp42EVs+xQw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' @@ -3304,8 +3218,8 @@ packages: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/utils@8.54.0': - resolution: {integrity: sha512-9Cnda8GS57AQakvRyG0PTejJNlA2xhvyNtEVIMlDWOOeEyBkYWhGPnfrIAnqxLMTSTo6q8g12XVjjev5l1NvMA==} + '@typescript-eslint/utils@8.55.0': + resolution: {integrity: sha512-BqZEsnPGdYpgyEIkDC1BadNY8oMwckftxBT+C8W0g1iKPdeqKZBtTfnvcq0nf60u7MkjFO8RBvpRGZBPw4L2ow==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -3315,8 +3229,8 @@ packages: resolution: {integrity: sha512-T+S1KqRD4sg/bHfLwrpF/K3gQLBM1n7Rp7OjjikjTEssI2YJzQpi5WXoynOaQ93ERIuq3O8RBTOUYDKszUCEHw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/visitor-keys@8.54.0': - resolution: {integrity: sha512-VFlhGSl4opC0bprJiItPQ1RfUhGDIBokcPwaFH4yiBCaNPeld/9VeXbiPO1cLyorQi1G1vL+ecBk1x8o1axORA==} + '@typescript-eslint/visitor-keys@8.55.0': + resolution: {integrity: sha512-AxNRwEie8Nn4eFS1FzDMJWIISMGoXMb037sgCBJ3UR6o0fQTzr2tqN9WT+DkWJPhIdQCfV7T6D387566VtnCJA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@vercel/nft@0.29.4': @@ -3422,19 +3336,10 @@ packages: peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - acorn-walk@8.3.2: - resolution: {integrity: sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==} - engines: {node: '>=0.4.0'} - acorn-walk@8.3.4: resolution: {integrity: sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==} engines: {node: '>=0.4.0'} - acorn@8.14.0: - resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==} - engines: {node: '>=0.4.0'} - hasBin: true - acorn@8.15.0: resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==} engines: {node: '>=0.4.0'} @@ -3508,9 +3413,6 @@ packages: resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} engines: {node: '>=8'} - as-table@1.0.55: - resolution: {integrity: sha512-xvsWESUJn0JN421Xb9MQw6AsMHRCUknCe0Wjlxvjud80mU4E6hQf1A6NzQKcYNmYw62MfzEtXc+badstZP3JpQ==} - ast-module-types@6.0.1: resolution: {integrity: sha512-WHw67kLXYbZuHTmcdbIrVArCq5wxo6NEuj3hiYAWr8mwJeC+C2mMCIBIWCiDoCye/OF/xelc+teJ1ERoWmnEIA==} engines: {node: '>=18'} @@ -3660,10 +3562,6 @@ packages: color@3.2.1: resolution: {integrity: sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==} - color@4.2.3: - resolution: {integrity: sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==} - engines: {node: '>=12.5.0'} - colorspace@1.1.4: resolution: {integrity: sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w==} @@ -3709,10 +3607,6 @@ packages: cookie-es@1.2.2: resolution: {integrity: sha512-+W7VmiVINB+ywl1HGXJXmrqkOhpKrIiVZV6tQuV54ZyQC7MMuBt81Vc336GMLoHBq5hV/F9eXgt5Mnx0Rha5Fg==} - cookie@0.7.2: - resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==} - engines: {node: '>= 0.6'} - cookie@1.1.1: resolution: {integrity: sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==} engines: {node: '>=18'} @@ -3774,9 +3668,6 @@ packages: resolution: {integrity: sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==} engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'} - data-uri-to-buffer@2.0.2: - resolution: {integrity: sha512-ND9qDTLc6diwj+Xe5cdAgVTbLVdXbtxTJRXRhli8Mowuaan+0EJOtdqJ0QCHNSSPyoXGx9HX2/VMnKeC34AChA==} - data-uri-to-buffer@4.0.1: resolution: {integrity: sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==} engines: {node: '>= 12'} @@ -3953,6 +3844,9 @@ packages: resolution: {integrity: sha512-dtJUTepzMW3Lm/NPxRf3wP4642UWhjL2sQxc+ym2YMj1m/H2zDNQOlezafzkHwn6sMstjHTwG6iQQsctDW/b1A==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + error-stack-parser-es@1.0.5: + resolution: {integrity: sha512-5qucVt2XcuGMcEGgWI7i+yZpmpByQ8J1lHhcL7PwqCwu9FPP3VUXzT4ltHe5i2z9dePwEHcDVOAfSnHsOlCXRA==} + es-module-lexer@1.7.0: resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==} @@ -3961,13 +3855,13 @@ packages: engines: {node: '>=18'} hasBin: true - esbuild@0.25.4: - resolution: {integrity: sha512-8pgjLUcUjcgDg+2Q4NYXnPbo/vncAY4UmyaCm0jZevERqCHZIaWwdJHkf8XQtu4AxSKCdvrUbT0XUr1IdZzI8Q==} + esbuild@0.27.2: + resolution: {integrity: sha512-HyNQImnsOC7X9PMNaCIeAm4ISCQXs5a5YasTXVliKv4uuBo1dKrG0A+uQS8M5eXjVMnLg3WgXaKvprHlFJQffw==} engines: {node: '>=18'} hasBin: true - esbuild@0.27.2: - resolution: {integrity: sha512-HyNQImnsOC7X9PMNaCIeAm4ISCQXs5a5YasTXVliKv4uuBo1dKrG0A+uQS8M5eXjVMnLg3WgXaKvprHlFJQffw==} + esbuild@0.27.3: + resolution: {integrity: sha512-8VwMnyGCONIs6cWue2IdpHxHnAjzxnw2Zr7MkVxB2vjmQ2ivqGFb4LEG3SMnv0Gb2F/G/2yA8zUaiL1gywDCCg==} engines: {node: '>=18'} hasBin: true @@ -4097,17 +3991,10 @@ packages: resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} engines: {node: '>=16.17'} - exit-hook@2.2.1: - resolution: {integrity: sha512-eNTPlAD67BmP31LDINZ3U7HSF8l57TxOY2PmBJ1shpCvpnxBF93mWCE8YHBnXs8qiUZJc9WDcWIeC3a2HIAMfw==} - engines: {node: '>=6'} - expect-type@1.3.0: resolution: {integrity: sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==} engines: {node: '>=12.0.0'} - exsolve@1.0.4: - resolution: {integrity: sha512-xsZH6PXaER4XoV+NiT7JHp1bJodJVT+cxeSH1G0f0tlT0lJqYuHUP3bUx2HtfTDvOagMINYp8rsqusxud3RXhw==} - extendable-error@0.1.7: resolution: {integrity: sha512-UOiS2in6/Q0FK0R0q6UY9vYpQ21mr/Qn1KOnte7vsACuNJf514WvCCUHSRCPcgjPT2bAhNIJdlE6bVap1GKmeg==} @@ -4253,9 +4140,6 @@ packages: resolution: {integrity: sha512-QB9NKEeDg3xxVwCCwJQ9+xycaz6pBB6iQ76wiWMl1927n0Kir6alPiP+yuiICLLU4jpMe08dXfpebuQppFA2zw==} engines: {node: '>=16'} - get-source@2.0.12: - resolution: {integrity: sha512-X5+4+iD+HoSeEED+uwrQ07BOQr0kEDFMVqqpBuI+RaZBpBpHCuXxo70bjar6f0b0u/DQJsJ7ssurpP0V60Az+w==} - get-stream@5.2.0: resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} engines: {node: '>=8'} @@ -4264,8 +4148,8 @@ packages: resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} engines: {node: '>=16'} - get-tsconfig@4.13.1: - resolution: {integrity: sha512-EoY1N2xCn44xU6750Sx7OjOIT59FkmstNc3X6y5xpz7D5cBtZRe/3pSlTkDJgqsOk3WwZPkWfonhhUJfttQo3w==} + get-tsconfig@4.13.6: + resolution: {integrity: sha512-shZT/QMiSHc/YBLxxOkMtgSid5HFoauqCE3/exfsEcwg1WkeqjG+V40yBbBrsD+jW2HDXcs28xOfcbm2jI8Ddw==} glob-parent@5.1.2: resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} @@ -4275,9 +4159,6 @@ packages: resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} engines: {node: '>=10.13.0'} - glob-to-regexp@0.4.1: - resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} - glob@10.5.0: resolution: {integrity: sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==} deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me @@ -4785,11 +4666,6 @@ packages: resolution: {integrity: sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==} engines: {node: '>=18'} - mime@3.0.0: - resolution: {integrity: sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==} - engines: {node: '>=10.0.0'} - hasBin: true - mimic-fn@4.0.0: resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} engines: {node: '>=12'} @@ -4798,8 +4674,8 @@ packages: resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} engines: {node: '>=4'} - miniflare@4.20250507.0: - resolution: {integrity: sha512-EgbQRt/Hnr8HCmW2J/4LRNE3yOzJTdNd98XJ8gnGXFKcimXxUFPiWP3k1df+ZPCtEHp6cXxi8+jP7v9vuIbIsg==} + miniflare@4.20260212.0: + resolution: {integrity: sha512-Lgxq83EuR2q/0/DAVOSGXhXS1V7GDB04HVggoPsenQng8sqEDR3hO4FigIw5ZI2Sv2X7kIc30NCzGHJlCFIYWg==} engines: {node: '>=18.0.0'} hasBin: true @@ -4851,10 +4727,6 @@ packages: ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - mustache@4.2.0: - resolution: {integrity: sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==} - hasBin: true - nanoid@3.3.11: resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} @@ -4942,9 +4814,6 @@ packages: ofetch@1.4.1: resolution: {integrity: sha512-QZj2DfGplQAr2oj9KzceK9Hwz6Whxazmn85yYeVuS3u9XTMOGMRx0kO95MQ+vLsj/S/NwBDMMLU5hpxvI6Tklw==} - ohash@2.0.11: - resolution: {integrity: sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==} - omit.js@2.0.2: resolution: {integrity: sha512-hJmu9D+bNB40YpL9jYebQl4lsTW6yEHRTroJzNLqQJYHm7c+NQnJGfZmIWh8S3q3KoaxV1aLhV6B3+0N0/kyJg==} @@ -5199,9 +5068,6 @@ packages: engines: {node: '>=14'} hasBin: true - printable-characters@1.0.42: - resolution: {integrity: sha512-dKp+C4iXWK4vVYZmYSd0KBH5F/h1HoZRsbJ82AVKRO3PEo8L4lBS/vLwhVtpwwuYcoIsVY+1JYKR268yn480uQ==} - process-nextick-args@2.0.1: resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} @@ -5360,8 +5226,8 @@ packages: resolution: {integrity: sha512-QNI2ChmuioGC1/xjyYwyZYADILWyW6AmS1UH6gDj/SFUUUS4MBAWs/7mxnkRPc/F4iHezDP+O8t0dO8WHiEOdg==} engines: {node: '>=6'} - semver@7.7.3: - resolution: {integrity: sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==} + semver@7.7.4: + resolution: {integrity: sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==} engines: {node: '>=10'} hasBin: true @@ -5374,12 +5240,8 @@ packages: set-cookie-parser@3.0.1: resolution: {integrity: sha512-n7Z7dXZhJbwuAHhNzkTti6Aw9QDDjZtm3JTpTGATIdNzdQz5GuFs22w90BcvF4INfnrL5xrX3oGsuqO5Dx3A1Q==} - sharp@0.33.5: - resolution: {integrity: sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - - sharp@0.34.4: - resolution: {integrity: sha512-FUH39xp3SBPnxWvd5iib1X8XY7J0K0X7d93sie9CJg2PO8/7gmg89Nve6OjItK53/MlAushNNxteBYfM6DEuoA==} + sharp@0.34.5: + resolution: {integrity: sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} shebang-command@2.0.0: @@ -5451,16 +5313,9 @@ packages: stackback@0.0.2: resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} - stacktracey@2.1.8: - resolution: {integrity: sha512-Kpij9riA+UNg7TnphqjH7/CzctQ/owJGNbFkfEeve4Z4uxT5+JapVLFXcsurIfN34gnTWZNJ/f7NMG0E8JDzTw==} - std-env@3.10.0: resolution: {integrity: sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==} - stoppable@1.1.0: - resolution: {integrity: sha512-KXDYZ9dszj6bzvnEMRYvxgeTHU74QBFL54XKtP3nyMuJ81CFYtABZ3bAzL2EdFUaEwJOBOgENyFj3R7oTzDyyw==} - engines: {node: '>=4', npm: '>=6'} - streamx@2.22.1: resolution: {integrity: sha512-znKXEBxfatz2GBNK02kRnCXjV+AA4kjZIUxeWSr3UGirZMJfTE9uiwKHobnbgxWyL/JWro8tTq+vOqAK1/qbSA==} @@ -5502,6 +5357,10 @@ packages: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} + supports-color@10.2.2: + resolution: {integrity: sha512-SS+jx45GF1QjgEXQx4NJZV9ImqmO2NPz5FNsIHrsDjh2YsHnawpan7SNQ1o8NuhrbHZy9AZhIoCUiCeaW/C80g==} + engines: {node: '>=18'} + supports-color@7.2.0: resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} engines: {node: '>=8'} @@ -5727,12 +5586,12 @@ packages: undici-types@7.16.0: resolution: {integrity: sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==} - undici@5.29.0: - resolution: {integrity: sha512-raqeBD6NQK4SkWhQzeYKd1KmIG6dllBOTt55Rmkt4HtI9mwdWtJljnrXjAFUBLTSN67HWrOIZ3EPF4kjUw80Bg==} - engines: {node: '>=14.0'} + undici@7.18.2: + resolution: {integrity: sha512-y+8YjDFzWdQlSE9N5nzKMT3g4a5UBX1HKowfdXh0uvAnTaqqwqB92Jt4UXBAeKekDs5IaDKyJFR4X1gYVCgXcw==} + engines: {node: '>=20.18.1'} - unenv@2.0.0-rc.15: - resolution: {integrity: sha512-J/rEIZU8w6FOfLNz/hNKsnY+fFHWnu9MH4yRbSZF3xbbGHovcetXPs7sD+9p8L6CeNC//I9bhRYAOsBt2u7/OA==} + unenv@2.0.0-rc.24: + resolution: {integrity: sha512-i7qRCmY42zmCwnYlh9H2SvLEypEFGye5iRmEMKjcGi7zk9UquigRjFtTLz0TYqr0ZGLZhaMHl/foy1bZR+Cwlw==} unicorn-magic@0.1.0: resolution: {integrity: sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==} @@ -5964,8 +5823,8 @@ packages: resolution: {integrity: sha512-DLiFIXYC5fMPxaRg832S6F5mJYvePtmO5G9v9IgUFPhXm9/GkXarH/TUrBAVzhTCzAj9anE/+GjrgXp/54nOgw==} engines: {node: '>= 12.0.0'} - workerd@1.20250507.0: - resolution: {integrity: sha512-OXaGjEh5THT9iblwWIyPrYBoaPe/d4zN03Go7/w8CmS8sma7//O9hjbk43sboWkc89taGPmU0/LNyZUUiUlHeQ==} + workerd@1.20260212.0: + resolution: {integrity: sha512-4B9BoZUzKSRv3pVZGEPh7OX+Q817hpUqAUtz5O0TxJVqo4OsYJAUA/sY177Q5ha/twjT9KaJt2DtQzE+oyCOzw==} engines: {node: '>=16'} hasBin: true @@ -5973,12 +5832,12 @@ packages: resolution: {integrity: sha512-+TvsA6VAVoMC3XDKR5MoC/qlLqDixEfOBysDEKnPIPou/NvoPWCAuXHXMsswwlvmEuvX56lQjvELLyLuzTKvRw==} engines: {node: '>=12'} - wrangler@4.14.4: - resolution: {integrity: sha512-HIdOdiMIcJV5ymw80RKsr3Uzen/p1kRX4jnCEmR2XVeoEhV2Qw6GABxS5WMTlSES2/vEX0Y+ezUAdsprcUhJ5g==} - engines: {node: '>=18.0.0'} + wrangler@4.65.0: + resolution: {integrity: sha512-R+n3o3tlGzLK9I4fGocPReOuvcnjhtOL2aCVKkHMeuEwt9pPbOO4FxJtx/ec5cIUG/otRyJnfQGCAr9DplBVng==} + engines: {node: '>=20.0.0'} hasBin: true peerDependencies: - '@cloudflare/workers-types': ^4.20250507.0 + '@cloudflare/workers-types': ^4.20260212.0 peerDependenciesMeta: '@cloudflare/workers-types': optional: true @@ -6067,8 +5926,11 @@ packages: resolution: {integrity: sha512-AyeEbWOu/TAXdxlV9wmGcR0+yh2j3vYPGOECcIj2S7MkrLyC7ne+oye2BKTItt0ii2PHk4cDy+95+LshzbXnGg==} engines: {node: '>=12.20'} - youch@3.3.4: - resolution: {integrity: sha512-UeVBXie8cA35DS6+nBkls68xaBBXCye0CNznrhszZjTbRVnJKQuNsyLKBTTL4ln1o1rh2PKtv35twV7irj5SEg==} + youch-core@0.3.3: + resolution: {integrity: sha512-ho7XuGjLaJ2hWHoK8yFnsUGy2Y5uDpqSTq1FkHLK4/oqKtyUU1AFbOOxY4IpC9f0fTLjwYbslUz0Po5BpD1wrA==} + + youch@4.1.0-beta.10: + resolution: {integrity: sha512-rLfVLB4FgQneDr0dv1oddCVZmKjcJ6yX6mS4pU82Mq/Dt9a3cLZQ62pDBL4AUO+uVrCvtWz3ZFUL2HFAFJ/BXQ==} zimmerframe@1.1.2: resolution: {integrity: sha512-rAbqEGa8ovJy4pyBxZM70hg4pE6gDgaQ0Sl9M3enG3I0d6H4XSAM3GeNGLKnsBpuijUow064sf7ww1nutC5/3w==} @@ -6077,9 +5939,6 @@ packages: resolution: {integrity: sha512-zK7YHHz4ZXpW89AHXUPbQVGKI7uvkd3hzusTdotCg1UxyaVtg0zFJSTfW/Dq5f7OBBVnq6cZIaC8Ti4hb6dtCA==} engines: {node: '>= 14'} - zod@3.22.3: - resolution: {integrity: sha512-EjIevzuJRiRPbVH4mGc8nApb/lVLKVpmUhAaR5R5doKGfAnGJ6Gr3CViAVjP+4FWSxCsybeWQdcgCtbX+7oZug==} - zod@3.25.76: resolution: {integrity: sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==} @@ -6127,7 +5986,7 @@ snapshots: outdent: 0.5.0 prettier: 2.8.8 resolve-from: 5.0.0 - semver: 7.7.3 + semver: 7.7.4 '@changesets/assemble-release-plan@6.0.9': dependencies: @@ -6136,7 +5995,7 @@ snapshots: '@changesets/should-skip-package': 0.1.2 '@changesets/types': 6.1.0 '@manypkg/get-packages': 1.1.3 - semver: 7.7.3 + semver: 7.7.4 '@changesets/changelog-git@0.2.1': dependencies: @@ -6169,7 +6028,7 @@ snapshots: package-manager-detector: 0.2.8 picocolors: 1.1.1 resolve-from: 5.0.0 - semver: 7.7.3 + semver: 7.7.4 spawndamnit: 3.0.1 term-size: 2.2.1 transitivePeerDependencies: @@ -6194,7 +6053,7 @@ snapshots: '@changesets/types': 6.1.0 '@manypkg/get-packages': 1.1.3 picocolors: 1.1.1 - semver: 7.7.3 + semver: 7.7.4 '@changesets/get-github-info@0.6.0': dependencies: @@ -6264,29 +6123,27 @@ snapshots: human-id: 4.1.1 prettier: 2.8.8 - '@cloudflare/kv-asset-handler@0.4.0': - dependencies: - mime: 3.0.0 + '@cloudflare/kv-asset-handler@0.4.2': {} - '@cloudflare/unenv-preset@2.3.1(unenv@2.0.0-rc.15)(workerd@1.20250507.0)': + '@cloudflare/unenv-preset@2.12.1(unenv@2.0.0-rc.24)(workerd@1.20260212.0)': dependencies: - unenv: 2.0.0-rc.15 + unenv: 2.0.0-rc.24 optionalDependencies: - workerd: 1.20250507.0 + workerd: 1.20260212.0 - '@cloudflare/workerd-darwin-64@1.20250507.0': + '@cloudflare/workerd-darwin-64@1.20260212.0': optional: true - '@cloudflare/workerd-darwin-arm64@1.20250507.0': + '@cloudflare/workerd-darwin-arm64@1.20260212.0': optional: true - '@cloudflare/workerd-linux-64@1.20250507.0': + '@cloudflare/workerd-linux-64@1.20260212.0': optional: true - '@cloudflare/workerd-linux-arm64@1.20250507.0': + '@cloudflare/workerd-linux-arm64@1.20260212.0': optional: true - '@cloudflare/workerd-windows-64@1.20250507.0': + '@cloudflare/workerd-windows-64@1.20260212.0': optional: true '@cloudflare/workers-types@4.20250508.0': {} @@ -6308,7 +6165,7 @@ snapshots: gonzales-pe: 4.3.0 node-source-walk: 7.0.1 - '@emnapi/runtime@1.5.0': + '@emnapi/runtime@1.8.1': dependencies: tslib: 2.8.1 optional: true @@ -6321,190 +6178,190 @@ snapshots: '@esbuild/aix-ppc64@0.25.12': optional: true - '@esbuild/aix-ppc64@0.25.4': + '@esbuild/aix-ppc64@0.27.2': optional: true - '@esbuild/aix-ppc64@0.27.2': + '@esbuild/aix-ppc64@0.27.3': optional: true '@esbuild/android-arm64@0.25.12': optional: true - '@esbuild/android-arm64@0.25.4': + '@esbuild/android-arm64@0.27.2': optional: true - '@esbuild/android-arm64@0.27.2': + '@esbuild/android-arm64@0.27.3': optional: true '@esbuild/android-arm@0.25.12': optional: true - '@esbuild/android-arm@0.25.4': + '@esbuild/android-arm@0.27.2': optional: true - '@esbuild/android-arm@0.27.2': + '@esbuild/android-arm@0.27.3': optional: true '@esbuild/android-x64@0.25.12': optional: true - '@esbuild/android-x64@0.25.4': + '@esbuild/android-x64@0.27.2': optional: true - '@esbuild/android-x64@0.27.2': + '@esbuild/android-x64@0.27.3': optional: true '@esbuild/darwin-arm64@0.25.12': optional: true - '@esbuild/darwin-arm64@0.25.4': + '@esbuild/darwin-arm64@0.27.2': optional: true - '@esbuild/darwin-arm64@0.27.2': + '@esbuild/darwin-arm64@0.27.3': optional: true '@esbuild/darwin-x64@0.25.12': optional: true - '@esbuild/darwin-x64@0.25.4': + '@esbuild/darwin-x64@0.27.2': optional: true - '@esbuild/darwin-x64@0.27.2': + '@esbuild/darwin-x64@0.27.3': optional: true '@esbuild/freebsd-arm64@0.25.12': optional: true - '@esbuild/freebsd-arm64@0.25.4': + '@esbuild/freebsd-arm64@0.27.2': optional: true - '@esbuild/freebsd-arm64@0.27.2': + '@esbuild/freebsd-arm64@0.27.3': optional: true '@esbuild/freebsd-x64@0.25.12': optional: true - '@esbuild/freebsd-x64@0.25.4': + '@esbuild/freebsd-x64@0.27.2': optional: true - '@esbuild/freebsd-x64@0.27.2': + '@esbuild/freebsd-x64@0.27.3': optional: true '@esbuild/linux-arm64@0.25.12': optional: true - '@esbuild/linux-arm64@0.25.4': + '@esbuild/linux-arm64@0.27.2': optional: true - '@esbuild/linux-arm64@0.27.2': + '@esbuild/linux-arm64@0.27.3': optional: true '@esbuild/linux-arm@0.25.12': optional: true - '@esbuild/linux-arm@0.25.4': + '@esbuild/linux-arm@0.27.2': optional: true - '@esbuild/linux-arm@0.27.2': + '@esbuild/linux-arm@0.27.3': optional: true '@esbuild/linux-ia32@0.25.12': optional: true - '@esbuild/linux-ia32@0.25.4': + '@esbuild/linux-ia32@0.27.2': optional: true - '@esbuild/linux-ia32@0.27.2': + '@esbuild/linux-ia32@0.27.3': optional: true '@esbuild/linux-loong64@0.25.12': optional: true - '@esbuild/linux-loong64@0.25.4': + '@esbuild/linux-loong64@0.27.2': optional: true - '@esbuild/linux-loong64@0.27.2': + '@esbuild/linux-loong64@0.27.3': optional: true '@esbuild/linux-mips64el@0.25.12': optional: true - '@esbuild/linux-mips64el@0.25.4': + '@esbuild/linux-mips64el@0.27.2': optional: true - '@esbuild/linux-mips64el@0.27.2': + '@esbuild/linux-mips64el@0.27.3': optional: true '@esbuild/linux-ppc64@0.25.12': optional: true - '@esbuild/linux-ppc64@0.25.4': + '@esbuild/linux-ppc64@0.27.2': optional: true - '@esbuild/linux-ppc64@0.27.2': + '@esbuild/linux-ppc64@0.27.3': optional: true '@esbuild/linux-riscv64@0.25.12': optional: true - '@esbuild/linux-riscv64@0.25.4': + '@esbuild/linux-riscv64@0.27.2': optional: true - '@esbuild/linux-riscv64@0.27.2': + '@esbuild/linux-riscv64@0.27.3': optional: true '@esbuild/linux-s390x@0.25.12': optional: true - '@esbuild/linux-s390x@0.25.4': + '@esbuild/linux-s390x@0.27.2': optional: true - '@esbuild/linux-s390x@0.27.2': + '@esbuild/linux-s390x@0.27.3': optional: true '@esbuild/linux-x64@0.25.12': optional: true - '@esbuild/linux-x64@0.25.4': + '@esbuild/linux-x64@0.27.2': optional: true - '@esbuild/linux-x64@0.27.2': + '@esbuild/linux-x64@0.27.3': optional: true '@esbuild/netbsd-arm64@0.25.12': optional: true - '@esbuild/netbsd-arm64@0.25.4': + '@esbuild/netbsd-arm64@0.27.2': optional: true - '@esbuild/netbsd-arm64@0.27.2': + '@esbuild/netbsd-arm64@0.27.3': optional: true '@esbuild/netbsd-x64@0.25.12': optional: true - '@esbuild/netbsd-x64@0.25.4': + '@esbuild/netbsd-x64@0.27.2': optional: true - '@esbuild/netbsd-x64@0.27.2': + '@esbuild/netbsd-x64@0.27.3': optional: true '@esbuild/openbsd-arm64@0.25.12': optional: true - '@esbuild/openbsd-arm64@0.25.4': + '@esbuild/openbsd-arm64@0.27.2': optional: true - '@esbuild/openbsd-arm64@0.27.2': + '@esbuild/openbsd-arm64@0.27.3': optional: true '@esbuild/openbsd-x64@0.25.12': optional: true - '@esbuild/openbsd-x64@0.25.4': + '@esbuild/openbsd-x64@0.27.2': optional: true - '@esbuild/openbsd-x64@0.27.2': + '@esbuild/openbsd-x64@0.27.3': optional: true '@esbuild/openharmony-arm64@0.25.12': @@ -6513,42 +6370,45 @@ snapshots: '@esbuild/openharmony-arm64@0.27.2': optional: true - '@esbuild/sunos-x64@0.25.12': + '@esbuild/openharmony-arm64@0.27.3': optional: true - '@esbuild/sunos-x64@0.25.4': + '@esbuild/sunos-x64@0.25.12': optional: true '@esbuild/sunos-x64@0.27.2': optional: true - '@esbuild/win32-arm64@0.25.12': + '@esbuild/sunos-x64@0.27.3': optional: true - '@esbuild/win32-arm64@0.25.4': + '@esbuild/win32-arm64@0.25.12': optional: true '@esbuild/win32-arm64@0.27.2': optional: true - '@esbuild/win32-ia32@0.25.12': + '@esbuild/win32-arm64@0.27.3': optional: true - '@esbuild/win32-ia32@0.25.4': + '@esbuild/win32-ia32@0.25.12': optional: true '@esbuild/win32-ia32@0.27.2': optional: true - '@esbuild/win32-x64@0.25.12': + '@esbuild/win32-ia32@0.27.3': optional: true - '@esbuild/win32-x64@0.25.4': + '@esbuild/win32-x64@0.25.12': optional: true '@esbuild/win32-x64@0.27.2': optional: true + '@esbuild/win32-x64@0.27.3': + optional: true + '@eslint-community/eslint-utils@4.9.1(eslint@9.34.0(jiti@2.4.2))': dependencies: eslint: 9.34.0(jiti@2.4.2) @@ -6595,8 +6455,6 @@ snapshots: '@fastify/accept-negotiator@2.0.1': {} - '@fastify/busboy@2.1.1': {} - '@fastify/busboy@3.1.1': {} '@fontsource/libre-barcode-128-text@5.1.0': {} @@ -6632,165 +6490,98 @@ snapshots: '@img/colour@1.0.0': {} - '@img/sharp-darwin-arm64@0.33.5': - optionalDependencies: - '@img/sharp-libvips-darwin-arm64': 1.0.4 - optional: true - - '@img/sharp-darwin-arm64@0.34.4': - optionalDependencies: - '@img/sharp-libvips-darwin-arm64': 1.2.3 - optional: true - - '@img/sharp-darwin-x64@0.33.5': + '@img/sharp-darwin-arm64@0.34.5': optionalDependencies: - '@img/sharp-libvips-darwin-x64': 1.0.4 + '@img/sharp-libvips-darwin-arm64': 1.2.4 optional: true - '@img/sharp-darwin-x64@0.34.4': + '@img/sharp-darwin-x64@0.34.5': optionalDependencies: - '@img/sharp-libvips-darwin-x64': 1.2.3 - optional: true - - '@img/sharp-libvips-darwin-arm64@1.0.4': - optional: true - - '@img/sharp-libvips-darwin-arm64@1.2.3': - optional: true - - '@img/sharp-libvips-darwin-x64@1.0.4': - optional: true - - '@img/sharp-libvips-darwin-x64@1.2.3': - optional: true - - '@img/sharp-libvips-linux-arm64@1.0.4': - optional: true - - '@img/sharp-libvips-linux-arm64@1.2.3': - optional: true - - '@img/sharp-libvips-linux-arm@1.0.5': - optional: true - - '@img/sharp-libvips-linux-arm@1.2.3': + '@img/sharp-libvips-darwin-x64': 1.2.4 optional: true - '@img/sharp-libvips-linux-ppc64@1.2.3': + '@img/sharp-libvips-darwin-arm64@1.2.4': optional: true - '@img/sharp-libvips-linux-s390x@1.0.4': + '@img/sharp-libvips-darwin-x64@1.2.4': optional: true - '@img/sharp-libvips-linux-s390x@1.2.3': + '@img/sharp-libvips-linux-arm64@1.2.4': optional: true - '@img/sharp-libvips-linux-x64@1.0.4': + '@img/sharp-libvips-linux-arm@1.2.4': optional: true - '@img/sharp-libvips-linux-x64@1.2.3': + '@img/sharp-libvips-linux-ppc64@1.2.4': optional: true - '@img/sharp-libvips-linuxmusl-arm64@1.0.4': + '@img/sharp-libvips-linux-riscv64@1.2.4': optional: true - '@img/sharp-libvips-linuxmusl-arm64@1.2.3': + '@img/sharp-libvips-linux-s390x@1.2.4': optional: true - '@img/sharp-libvips-linuxmusl-x64@1.0.4': + '@img/sharp-libvips-linux-x64@1.2.4': optional: true - '@img/sharp-libvips-linuxmusl-x64@1.2.3': + '@img/sharp-libvips-linuxmusl-arm64@1.2.4': optional: true - '@img/sharp-linux-arm64@0.33.5': - optionalDependencies: - '@img/sharp-libvips-linux-arm64': 1.0.4 - optional: true - - '@img/sharp-linux-arm64@0.34.4': - optionalDependencies: - '@img/sharp-libvips-linux-arm64': 1.2.3 - optional: true - - '@img/sharp-linux-arm@0.33.5': - optionalDependencies: - '@img/sharp-libvips-linux-arm': 1.0.5 - optional: true - - '@img/sharp-linux-arm@0.34.4': - optionalDependencies: - '@img/sharp-libvips-linux-arm': 1.2.3 + '@img/sharp-libvips-linuxmusl-x64@1.2.4': optional: true - '@img/sharp-linux-ppc64@0.34.4': + '@img/sharp-linux-arm64@0.34.5': optionalDependencies: - '@img/sharp-libvips-linux-ppc64': 1.2.3 + '@img/sharp-libvips-linux-arm64': 1.2.4 optional: true - '@img/sharp-linux-s390x@0.33.5': + '@img/sharp-linux-arm@0.34.5': optionalDependencies: - '@img/sharp-libvips-linux-s390x': 1.0.4 + '@img/sharp-libvips-linux-arm': 1.2.4 optional: true - '@img/sharp-linux-s390x@0.34.4': + '@img/sharp-linux-ppc64@0.34.5': optionalDependencies: - '@img/sharp-libvips-linux-s390x': 1.2.3 + '@img/sharp-libvips-linux-ppc64': 1.2.4 optional: true - '@img/sharp-linux-x64@0.33.5': + '@img/sharp-linux-riscv64@0.34.5': optionalDependencies: - '@img/sharp-libvips-linux-x64': 1.0.4 + '@img/sharp-libvips-linux-riscv64': 1.2.4 optional: true - '@img/sharp-linux-x64@0.34.4': + '@img/sharp-linux-s390x@0.34.5': optionalDependencies: - '@img/sharp-libvips-linux-x64': 1.2.3 + '@img/sharp-libvips-linux-s390x': 1.2.4 optional: true - '@img/sharp-linuxmusl-arm64@0.33.5': + '@img/sharp-linux-x64@0.34.5': optionalDependencies: - '@img/sharp-libvips-linuxmusl-arm64': 1.0.4 + '@img/sharp-libvips-linux-x64': 1.2.4 optional: true - '@img/sharp-linuxmusl-arm64@0.34.4': + '@img/sharp-linuxmusl-arm64@0.34.5': optionalDependencies: - '@img/sharp-libvips-linuxmusl-arm64': 1.2.3 + '@img/sharp-libvips-linuxmusl-arm64': 1.2.4 optional: true - '@img/sharp-linuxmusl-x64@0.33.5': + '@img/sharp-linuxmusl-x64@0.34.5': optionalDependencies: - '@img/sharp-libvips-linuxmusl-x64': 1.0.4 + '@img/sharp-libvips-linuxmusl-x64': 1.2.4 optional: true - '@img/sharp-linuxmusl-x64@0.34.4': - optionalDependencies: - '@img/sharp-libvips-linuxmusl-x64': 1.2.3 - optional: true - - '@img/sharp-wasm32@0.33.5': - dependencies: - '@emnapi/runtime': 1.5.0 - optional: true - - '@img/sharp-wasm32@0.34.4': + '@img/sharp-wasm32@0.34.5': dependencies: - '@emnapi/runtime': 1.5.0 - optional: true - - '@img/sharp-win32-arm64@0.34.4': + '@emnapi/runtime': 1.8.1 optional: true - '@img/sharp-win32-ia32@0.33.5': + '@img/sharp-win32-arm64@0.34.5': optional: true - '@img/sharp-win32-ia32@0.34.4': + '@img/sharp-win32-ia32@0.34.5': optional: true - '@img/sharp-win32-x64@0.33.5': - optional: true - - '@img/sharp-win32-x64@0.34.4': + '@img/sharp-win32-x64@0.34.5': optional: true '@import-maps/resolve@2.0.0': {} @@ -6878,7 +6669,7 @@ snapshots: https-proxy-agent: 7.0.6 node-fetch: 2.7.0 nopt: 8.0.0 - semver: 7.7.3 + semver: 7.7.4 tar: 7.5.7 transitivePeerDependencies: - encoding @@ -6950,7 +6741,7 @@ snapshots: image-size: 2.0.2 js-image-generator: 1.0.4 parse-gitignore: 2.0.0 - semver: 7.7.3 + semver: 7.7.4 tmp-promise: 3.0.3 uuid: 13.0.0 write-file-atomic: 5.0.1 @@ -7009,7 +6800,7 @@ snapshots: p-wait-for: 5.0.2 parse-imports: 2.2.1 path-key: 4.0.0 - semver: 7.7.3 + semver: 7.7.4 tar: 7.5.7 tmp-promise: 3.0.3 urlpattern-polyfill: 8.0.2 @@ -7043,7 +6834,7 @@ snapshots: jwt-decode: 4.0.0 lambda-local: 2.2.0 read-package-up: 11.0.0 - semver: 7.7.3 + semver: 7.7.4 source-map-support: 0.5.21 transitivePeerDependencies: - encoding @@ -7165,7 +6956,7 @@ snapshots: precinct: 12.2.0 require-package-name: 2.0.1 resolve: 2.0.0-next.5 - semver: 7.7.3 + semver: 7.7.4 tmp-promise: 3.0.3 toml: 3.0.0 unixify: 1.0.0 @@ -7469,7 +7260,7 @@ snapshots: '@opentelemetry/propagator-b3': 1.30.1(@opentelemetry/api@1.9.0) '@opentelemetry/propagator-jaeger': 1.30.1(@opentelemetry/api@1.9.0) '@opentelemetry/sdk-trace-base': 1.30.1(@opentelemetry/api@1.9.0) - semver: 7.7.3 + semver: 7.7.4 '@opentelemetry/sdk-trace-node@2.5.1(@opentelemetry/api@1.9.0)': dependencies: @@ -7556,6 +7347,18 @@ snapshots: '@polka/url@1.0.0-next.28': {} + '@poppinss/colors@4.1.6': + dependencies: + kleur: 4.1.5 + + '@poppinss/dumper@0.6.5': + dependencies: + '@poppinss/colors': 4.1.6 + '@sindresorhus/is': 7.2.0 + supports-color: 10.2.2 + + '@poppinss/exception@1.2.3': {} + '@protobufjs/aspromise@1.1.2': {} '@protobufjs/base64@1.1.2': {} @@ -7692,6 +7495,10 @@ snapshots: '@rollup/rollup-win32-x64-msvc@4.57.1': optional: true + '@sindresorhus/is@7.2.0': {} + + '@speed-highlight/core@1.2.14': {} + '@standard-schema/spec@1.0.0': {} '@stylistic/eslint-plugin-js@2.1.0(eslint@9.34.0(jiti@2.4.2))': @@ -7828,17 +7635,17 @@ snapshots: '@typescript-eslint/project-service@8.43.0(typescript@5.8.3)': dependencies: - '@typescript-eslint/tsconfig-utils': 8.54.0(typescript@5.8.3) - '@typescript-eslint/types': 8.54.0 + '@typescript-eslint/tsconfig-utils': 8.55.0(typescript@5.8.3) + '@typescript-eslint/types': 8.55.0 debug: 4.4.3 typescript: 5.8.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/project-service@8.54.0(typescript@5.8.3)': + '@typescript-eslint/project-service@8.55.0(typescript@5.8.3)': dependencies: - '@typescript-eslint/tsconfig-utils': 8.54.0(typescript@5.8.3) - '@typescript-eslint/types': 8.54.0 + '@typescript-eslint/tsconfig-utils': 8.55.0(typescript@5.8.3) + '@typescript-eslint/types': 8.55.0 debug: 4.4.3 typescript: 5.8.3 transitivePeerDependencies: @@ -7849,16 +7656,16 @@ snapshots: '@typescript-eslint/types': 8.43.0 '@typescript-eslint/visitor-keys': 8.43.0 - '@typescript-eslint/scope-manager@8.54.0': + '@typescript-eslint/scope-manager@8.55.0': dependencies: - '@typescript-eslint/types': 8.54.0 - '@typescript-eslint/visitor-keys': 8.54.0 + '@typescript-eslint/types': 8.55.0 + '@typescript-eslint/visitor-keys': 8.55.0 '@typescript-eslint/tsconfig-utils@8.43.0(typescript@5.8.3)': dependencies: typescript: 5.8.3 - '@typescript-eslint/tsconfig-utils@8.54.0(typescript@5.8.3)': + '@typescript-eslint/tsconfig-utils@8.55.0(typescript@5.8.3)': dependencies: typescript: 5.8.3 @@ -7876,7 +7683,7 @@ snapshots: '@typescript-eslint/types@8.43.0': {} - '@typescript-eslint/types@8.54.0': {} + '@typescript-eslint/types@8.55.0': {} '@typescript-eslint/typescript-estree@8.43.0(typescript@5.8.3)': dependencies: @@ -7888,21 +7695,21 @@ snapshots: fast-glob: 3.3.3 is-glob: 4.0.3 minimatch: 9.0.5 - semver: 7.7.3 + semver: 7.7.4 ts-api-utils: 2.4.0(typescript@5.8.3) typescript: 5.8.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/typescript-estree@8.54.0(typescript@5.8.3)': + '@typescript-eslint/typescript-estree@8.55.0(typescript@5.8.3)': dependencies: - '@typescript-eslint/project-service': 8.54.0(typescript@5.8.3) - '@typescript-eslint/tsconfig-utils': 8.54.0(typescript@5.8.3) - '@typescript-eslint/types': 8.54.0 - '@typescript-eslint/visitor-keys': 8.54.0 + '@typescript-eslint/project-service': 8.55.0(typescript@5.8.3) + '@typescript-eslint/tsconfig-utils': 8.55.0(typescript@5.8.3) + '@typescript-eslint/types': 8.55.0 + '@typescript-eslint/visitor-keys': 8.55.0 debug: 4.4.3 minimatch: 9.0.5 - semver: 7.7.3 + semver: 7.7.4 tinyglobby: 0.2.15 ts-api-utils: 2.4.0(typescript@5.8.3) typescript: 5.8.3 @@ -7920,12 +7727,12 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.54.0(eslint@9.34.0(jiti@2.4.2))(typescript@5.8.3)': + '@typescript-eslint/utils@8.55.0(eslint@9.34.0(jiti@2.4.2))(typescript@5.8.3)': dependencies: '@eslint-community/eslint-utils': 4.9.1(eslint@9.34.0(jiti@2.4.2)) - '@typescript-eslint/scope-manager': 8.54.0 - '@typescript-eslint/types': 8.54.0 - '@typescript-eslint/typescript-estree': 8.54.0(typescript@5.8.3) + '@typescript-eslint/scope-manager': 8.55.0 + '@typescript-eslint/types': 8.55.0 + '@typescript-eslint/typescript-estree': 8.55.0(typescript@5.8.3) eslint: 9.34.0(jiti@2.4.2) typescript: 5.8.3 transitivePeerDependencies: @@ -7936,9 +7743,9 @@ snapshots: '@typescript-eslint/types': 8.43.0 eslint-visitor-keys: 4.2.1 - '@typescript-eslint/visitor-keys@8.54.0': + '@typescript-eslint/visitor-keys@8.55.0': dependencies: - '@typescript-eslint/types': 8.54.0 + '@typescript-eslint/types': 8.55.0 eslint-visitor-keys: 4.2.1 '@vercel/nft@0.29.4(rollup@4.57.1)': @@ -8123,15 +7930,11 @@ snapshots: dependencies: acorn: 8.15.0 - acorn-walk@8.3.2: {} - acorn-walk@8.3.4: dependencies: acorn: 8.15.0 optional: true - acorn@8.14.0: {} - acorn@8.15.0: {} agent-base@7.1.3: {} @@ -8206,10 +8009,6 @@ snapshots: array-union@2.1.0: {} - as-table@1.0.55: - dependencies: - printable-characters: 1.0.42 - ast-module-types@6.0.1: {} async-sema@3.1.1: {} @@ -8345,12 +8144,6 @@ snapshots: color-convert: 1.9.3 color-string: 1.9.1 - color@4.2.3: - dependencies: - color-convert: 2.0.1 - color-string: 1.9.1 - optional: true - colorspace@1.1.4: dependencies: color: 3.2.1 @@ -8386,8 +8179,6 @@ snapshots: cookie-es@1.2.2: {} - cookie@0.7.2: {} - cookie@1.1.1: {} copy-file@11.0.0: @@ -8449,8 +8240,6 @@ snapshots: dependencies: css-tree: 2.2.1 - data-uri-to-buffer@2.0.2: {} - data-uri-to-buffer@4.0.1: {} dataloader@1.4.0: {} @@ -8515,7 +8304,7 @@ snapshots: detective-typescript@14.0.0(typescript@5.8.3): dependencies: - '@typescript-eslint/typescript-estree': 8.54.0(typescript@5.8.3) + '@typescript-eslint/typescript-estree': 8.55.0(typescript@5.8.3) ast-module-types: 6.0.1 node-source-walk: 7.0.1 typescript: 5.8.3 @@ -8618,6 +8407,8 @@ snapshots: env-paths@3.0.0: {} + error-stack-parser-es@1.0.5: {} + es-module-lexer@1.7.0: {} esbuild@0.25.12: @@ -8649,34 +8440,6 @@ snapshots: '@esbuild/win32-ia32': 0.25.12 '@esbuild/win32-x64': 0.25.12 - esbuild@0.25.4: - optionalDependencies: - '@esbuild/aix-ppc64': 0.25.4 - '@esbuild/android-arm': 0.25.4 - '@esbuild/android-arm64': 0.25.4 - '@esbuild/android-x64': 0.25.4 - '@esbuild/darwin-arm64': 0.25.4 - '@esbuild/darwin-x64': 0.25.4 - '@esbuild/freebsd-arm64': 0.25.4 - '@esbuild/freebsd-x64': 0.25.4 - '@esbuild/linux-arm': 0.25.4 - '@esbuild/linux-arm64': 0.25.4 - '@esbuild/linux-ia32': 0.25.4 - '@esbuild/linux-loong64': 0.25.4 - '@esbuild/linux-mips64el': 0.25.4 - '@esbuild/linux-ppc64': 0.25.4 - '@esbuild/linux-riscv64': 0.25.4 - '@esbuild/linux-s390x': 0.25.4 - '@esbuild/linux-x64': 0.25.4 - '@esbuild/netbsd-arm64': 0.25.4 - '@esbuild/netbsd-x64': 0.25.4 - '@esbuild/openbsd-arm64': 0.25.4 - '@esbuild/openbsd-x64': 0.25.4 - '@esbuild/sunos-x64': 0.25.4 - '@esbuild/win32-arm64': 0.25.4 - '@esbuild/win32-ia32': 0.25.4 - '@esbuild/win32-x64': 0.25.4 - esbuild@0.27.2: optionalDependencies: '@esbuild/aix-ppc64': 0.27.2 @@ -8706,6 +8469,35 @@ snapshots: '@esbuild/win32-ia32': 0.27.2 '@esbuild/win32-x64': 0.27.2 + esbuild@0.27.3: + optionalDependencies: + '@esbuild/aix-ppc64': 0.27.3 + '@esbuild/android-arm': 0.27.3 + '@esbuild/android-arm64': 0.27.3 + '@esbuild/android-x64': 0.27.3 + '@esbuild/darwin-arm64': 0.27.3 + '@esbuild/darwin-x64': 0.27.3 + '@esbuild/freebsd-arm64': 0.27.3 + '@esbuild/freebsd-x64': 0.27.3 + '@esbuild/linux-arm': 0.27.3 + '@esbuild/linux-arm64': 0.27.3 + '@esbuild/linux-ia32': 0.27.3 + '@esbuild/linux-loong64': 0.27.3 + '@esbuild/linux-mips64el': 0.27.3 + '@esbuild/linux-ppc64': 0.27.3 + '@esbuild/linux-riscv64': 0.27.3 + '@esbuild/linux-s390x': 0.27.3 + '@esbuild/linux-x64': 0.27.3 + '@esbuild/netbsd-arm64': 0.27.3 + '@esbuild/netbsd-x64': 0.27.3 + '@esbuild/openbsd-arm64': 0.27.3 + '@esbuild/openbsd-x64': 0.27.3 + '@esbuild/openharmony-arm64': 0.27.3 + '@esbuild/sunos-x64': 0.27.3 + '@esbuild/win32-arm64': 0.27.3 + '@esbuild/win32-ia32': 0.27.3 + '@esbuild/win32-x64': 0.27.3 + escalade@3.2.0: {} escape-string-regexp@4.0.0: {} @@ -8723,7 +8515,7 @@ snapshots: eslint-compat-utils@0.5.1(eslint@9.34.0(jiti@2.4.2)): dependencies: eslint: 9.34.0(jiti@2.4.2) - semver: 7.7.3 + semver: 7.7.4 eslint-config-prettier@9.1.0(eslint@9.34.0(jiti@2.4.2)): dependencies: @@ -8739,15 +8531,15 @@ snapshots: eslint-plugin-n@17.16.1(eslint@9.34.0(jiti@2.4.2))(typescript@5.8.3): dependencies: '@eslint-community/eslint-utils': 4.9.1(eslint@9.34.0(jiti@2.4.2)) - '@typescript-eslint/utils': 8.54.0(eslint@9.34.0(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/utils': 8.55.0(eslint@9.34.0(jiti@2.4.2))(typescript@5.8.3) enhanced-resolve: 5.19.0 eslint: 9.34.0(jiti@2.4.2) eslint-plugin-es-x: 7.8.0(eslint@9.34.0(jiti@2.4.2)) - get-tsconfig: 4.13.1 + get-tsconfig: 4.13.6 globals: 15.15.0 ignore: 5.3.2 minimatch: 9.0.5 - semver: 7.7.3 + semver: 7.7.4 ts-declaration-location: 1.0.7(typescript@5.8.3) transitivePeerDependencies: - supports-color @@ -8764,7 +8556,7 @@ snapshots: postcss: 8.5.6 postcss-load-config: 3.1.4(postcss@8.5.6)(ts-node@10.9.2(@types/node@24.10.11)(typescript@5.8.3)) postcss-safe-parser: 7.0.1(postcss@8.5.6) - semver: 7.7.3 + semver: 7.7.4 svelte-eslint-parser: 1.4.1(svelte@5.49.2) optionalDependencies: svelte: 5.49.2 @@ -8872,12 +8664,8 @@ snapshots: signal-exit: 4.1.0 strip-final-newline: 3.0.0 - exit-hook@2.2.1: {} - expect-type@1.3.0: {} - exsolve@1.0.4: {} - extendable-error@0.1.7: {} extract-zip@2.0.1: @@ -9014,18 +8802,13 @@ snapshots: get-port@7.1.0: {} - get-source@2.0.12: - dependencies: - data-uri-to-buffer: 2.0.2 - source-map: 0.6.1 - get-stream@5.2.0: dependencies: pump: 3.0.2 get-stream@8.0.1: {} - get-tsconfig@4.13.1: + get-tsconfig@4.13.6: dependencies: resolve-pkg-maps: 1.0.0 @@ -9037,8 +8820,6 @@ snapshots: dependencies: is-glob: 4.0.3 - glob-to-regexp@0.4.1: {} - glob@10.5.0: dependencies: foreground-child: 3.3.0 @@ -9168,7 +8949,7 @@ snapshots: listhen: 1.9.0 ofetch: 1.4.1 pathe: 2.0.3 - sharp: 0.34.4 + sharp: 0.34.5 svgo: 4.0.0 ufo: 1.6.3 unstorage: 1.16.1(@netlify/blobs@10.5.0) @@ -9315,7 +9096,7 @@ snapshots: lodash.isstring: 4.0.1 lodash.once: 4.1.1 ms: 2.1.3 - semver: 7.7.3 + semver: 7.7.4 junk@4.0.1: {} @@ -9519,25 +9300,18 @@ snapshots: dependencies: mime-db: 1.54.0 - mime@3.0.0: {} - mimic-fn@4.0.0: {} min-indent@1.0.1: {} - miniflare@4.20250507.0: + miniflare@4.20260212.0: dependencies: '@cspotcode/source-map-support': 0.8.1 - acorn: 8.14.0 - acorn-walk: 8.3.2 - exit-hook: 2.2.1 - glob-to-regexp: 0.4.1 - stoppable: 1.1.0 - undici: 5.29.0 - workerd: 1.20250507.0 + sharp: 0.34.5 + undici: 7.18.2 + workerd: 1.20260212.0 ws: 8.18.0 - youch: 3.3.4 - zod: 3.22.3 + youch: 4.1.0-beta.10 transitivePeerDependencies: - bufferutil - utf-8-validate @@ -9586,8 +9360,6 @@ snapshots: ms@2.1.3: {} - mustache@4.2.0: {} - nanoid@3.3.11: {} natural-compare@1.4.0: {} @@ -9634,7 +9406,7 @@ snapshots: normalize-package-data@6.0.2: dependencies: hosted-git-info: 7.0.2 - semver: 7.7.3 + semver: 7.7.4 validate-npm-package-license: 3.0.4 normalize-path@2.1.1: @@ -9659,8 +9431,6 @@ snapshots: node-fetch-native: 1.6.6 ufo: 1.6.3 - ohash@2.0.11: {} - omit.js@2.0.2: {} once@1.4.0: @@ -9894,8 +9664,6 @@ snapshots: prettier@3.6.0: {} - printable-characters@1.0.42: {} - process-nextick-args@2.0.1: {} process@0.11.10: {} @@ -10103,7 +9871,7 @@ snapshots: semiver@1.1.0: {} - semver@7.7.3: {} + semver@7.7.4: {} server-side-dep@file:packages/adapter-cloudflare/test/apps/pages/server-side-dep: {} @@ -10111,61 +9879,36 @@ snapshots: set-cookie-parser@3.0.1: {} - sharp@0.33.5: - dependencies: - color: 4.2.3 - detect-libc: 2.1.2 - semver: 7.7.3 - optionalDependencies: - '@img/sharp-darwin-arm64': 0.33.5 - '@img/sharp-darwin-x64': 0.33.5 - '@img/sharp-libvips-darwin-arm64': 1.0.4 - '@img/sharp-libvips-darwin-x64': 1.0.4 - '@img/sharp-libvips-linux-arm': 1.0.5 - '@img/sharp-libvips-linux-arm64': 1.0.4 - '@img/sharp-libvips-linux-s390x': 1.0.4 - '@img/sharp-libvips-linux-x64': 1.0.4 - '@img/sharp-libvips-linuxmusl-arm64': 1.0.4 - '@img/sharp-libvips-linuxmusl-x64': 1.0.4 - '@img/sharp-linux-arm': 0.33.5 - '@img/sharp-linux-arm64': 0.33.5 - '@img/sharp-linux-s390x': 0.33.5 - '@img/sharp-linux-x64': 0.33.5 - '@img/sharp-linuxmusl-arm64': 0.33.5 - '@img/sharp-linuxmusl-x64': 0.33.5 - '@img/sharp-wasm32': 0.33.5 - '@img/sharp-win32-ia32': 0.33.5 - '@img/sharp-win32-x64': 0.33.5 - optional: true - - sharp@0.34.4: + sharp@0.34.5: dependencies: '@img/colour': 1.0.0 detect-libc: 2.1.2 - semver: 7.7.3 + semver: 7.7.4 optionalDependencies: - '@img/sharp-darwin-arm64': 0.34.4 - '@img/sharp-darwin-x64': 0.34.4 - '@img/sharp-libvips-darwin-arm64': 1.2.3 - '@img/sharp-libvips-darwin-x64': 1.2.3 - '@img/sharp-libvips-linux-arm': 1.2.3 - '@img/sharp-libvips-linux-arm64': 1.2.3 - '@img/sharp-libvips-linux-ppc64': 1.2.3 - '@img/sharp-libvips-linux-s390x': 1.2.3 - '@img/sharp-libvips-linux-x64': 1.2.3 - '@img/sharp-libvips-linuxmusl-arm64': 1.2.3 - '@img/sharp-libvips-linuxmusl-x64': 1.2.3 - '@img/sharp-linux-arm': 0.34.4 - '@img/sharp-linux-arm64': 0.34.4 - '@img/sharp-linux-ppc64': 0.34.4 - '@img/sharp-linux-s390x': 0.34.4 - '@img/sharp-linux-x64': 0.34.4 - '@img/sharp-linuxmusl-arm64': 0.34.4 - '@img/sharp-linuxmusl-x64': 0.34.4 - '@img/sharp-wasm32': 0.34.4 - '@img/sharp-win32-arm64': 0.34.4 - '@img/sharp-win32-ia32': 0.34.4 - '@img/sharp-win32-x64': 0.34.4 + '@img/sharp-darwin-arm64': 0.34.5 + '@img/sharp-darwin-x64': 0.34.5 + '@img/sharp-libvips-darwin-arm64': 1.2.4 + '@img/sharp-libvips-darwin-x64': 1.2.4 + '@img/sharp-libvips-linux-arm': 1.2.4 + '@img/sharp-libvips-linux-arm64': 1.2.4 + '@img/sharp-libvips-linux-ppc64': 1.2.4 + '@img/sharp-libvips-linux-riscv64': 1.2.4 + '@img/sharp-libvips-linux-s390x': 1.2.4 + '@img/sharp-libvips-linux-x64': 1.2.4 + '@img/sharp-libvips-linuxmusl-arm64': 1.2.4 + '@img/sharp-libvips-linuxmusl-x64': 1.2.4 + '@img/sharp-linux-arm': 0.34.5 + '@img/sharp-linux-arm64': 0.34.5 + '@img/sharp-linux-ppc64': 0.34.5 + '@img/sharp-linux-riscv64': 0.34.5 + '@img/sharp-linux-s390x': 0.34.5 + '@img/sharp-linux-x64': 0.34.5 + '@img/sharp-linuxmusl-arm64': 0.34.5 + '@img/sharp-linuxmusl-x64': 0.34.5 + '@img/sharp-wasm32': 0.34.5 + '@img/sharp-win32-arm64': 0.34.5 + '@img/sharp-win32-ia32': 0.34.5 + '@img/sharp-win32-x64': 0.34.5 shebang-command@2.0.0: dependencies: @@ -10236,15 +9979,8 @@ snapshots: stackback@0.0.2: {} - stacktracey@2.1.8: - dependencies: - as-table: 1.0.55 - get-source: 2.0.12 - std-env@3.10.0: {} - stoppable@1.1.0: {} - streamx@2.22.1: dependencies: fast-fifo: 1.3.2 @@ -10290,6 +10026,8 @@ snapshots: strip-json-comments@3.1.1: {} + supports-color@10.2.2: {} + supports-color@7.2.0: dependencies: has-flag: 4.0.0 @@ -10492,17 +10230,11 @@ snapshots: undici-types@7.16.0: {} - undici@5.29.0: - dependencies: - '@fastify/busboy': 2.1.1 + undici@7.18.2: {} - unenv@2.0.0-rc.15: + unenv@2.0.0-rc.24: dependencies: - defu: 6.1.4 - exsolve: 1.0.4 - ohash: 2.0.11 pathe: 2.0.3 - ufo: 1.6.3 unicorn-magic@0.1.0: {} @@ -10565,7 +10297,7 @@ snapshots: dependencies: '@rollup/pluginutils': 5.1.3(rollup@4.57.1) imagetools-core: 9.1.0 - sharp: 0.34.4 + sharp: 0.34.5 transitivePeerDependencies: - rollup @@ -10665,33 +10397,32 @@ snapshots: triple-beam: 1.4.1 winston-transport: 4.9.0 - workerd@1.20250507.0: + workerd@1.20260212.0: optionalDependencies: - '@cloudflare/workerd-darwin-64': 1.20250507.0 - '@cloudflare/workerd-darwin-arm64': 1.20250507.0 - '@cloudflare/workerd-linux-64': 1.20250507.0 - '@cloudflare/workerd-linux-arm64': 1.20250507.0 - '@cloudflare/workerd-windows-64': 1.20250507.0 + '@cloudflare/workerd-darwin-64': 1.20260212.0 + '@cloudflare/workerd-darwin-arm64': 1.20260212.0 + '@cloudflare/workerd-linux-64': 1.20260212.0 + '@cloudflare/workerd-linux-arm64': 1.20260212.0 + '@cloudflare/workerd-windows-64': 1.20260212.0 worktop@0.8.0-next.18: dependencies: mrmime: 2.0.0 regexparam: 3.0.0 - wrangler@4.14.4(@cloudflare/workers-types@4.20250508.0): + wrangler@4.65.0(@cloudflare/workers-types@4.20250508.0): dependencies: - '@cloudflare/kv-asset-handler': 0.4.0 - '@cloudflare/unenv-preset': 2.3.1(unenv@2.0.0-rc.15)(workerd@1.20250507.0) + '@cloudflare/kv-asset-handler': 0.4.2 + '@cloudflare/unenv-preset': 2.12.1(unenv@2.0.0-rc.24)(workerd@1.20260212.0) blake3-wasm: 2.1.5 - esbuild: 0.25.4 - miniflare: 4.20250507.0 + esbuild: 0.27.3 + miniflare: 4.20260212.0 path-to-regexp: 6.3.0 - unenv: 2.0.0-rc.15 - workerd: 1.20250507.0 + unenv: 2.0.0-rc.24 + workerd: 1.20260212.0 optionalDependencies: '@cloudflare/workers-types': 4.20250508.0 fsevents: 2.3.3 - sharp: 0.33.5 transitivePeerDependencies: - bufferutil - utf-8-validate @@ -10756,11 +10487,18 @@ snapshots: yocto-queue@1.2.1: {} - youch@3.3.4: + youch-core@0.3.3: dependencies: - cookie: 0.7.2 - mustache: 4.2.0 - stacktracey: 2.1.8 + '@poppinss/exception': 1.2.3 + error-stack-parser-es: 1.0.5 + + youch@4.1.0-beta.10: + dependencies: + '@poppinss/colors': 4.1.6 + '@poppinss/dumper': 0.6.5 + '@speed-highlight/core': 1.2.14 + cookie: 1.1.1 + youch-core: 0.3.3 zimmerframe@1.1.2: {} @@ -10770,8 +10508,6 @@ snapshots: compress-commons: 6.0.2 readable-stream: 4.7.0 - zod@3.22.3: {} - zod@3.25.76: {} zod@4.0.14: {} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index c50511b24eab..39358a63d673 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -50,7 +50,7 @@ catalog: valibot: ^1.1.0 vite: ^6.3.5 vitest: ^4.0.0 - wrangler: ^4.14.3 + wrangler: ^4.65.0 catalogs: vite-baseline: vite: ^5.4.21 # should be 5.0.3 but older versions cause errors in some tests From d06affc9246c676fc32b644efc0bbf53b42bc67d Mon Sep 17 00:00:00 2001 From: Tee Ming Date: Tue, 17 Feb 2026 18:15:11 +0800 Subject: [PATCH 007/545] chore: change error helpers to use public interface types (#13036) closes https://github.com/sveltejs/kit/issues/12986 This PR changes the `error`, `isHttpError`, `redirect`, and `isRedirect` functions to use the public interface version of the `HttpError` and `Redirect` errors instead of our internal classes. --- ### Please don't delete this checklist! Before submitting the PR, please make sure you do the following: - [x] It's really useful if your PR references an issue where it is discussed ahead of time. In many cases, features are absent for a reason. For large changes, please create an RFC: https://github.com/sveltejs/rfcs - [x] This message body should clearly illustrate what problems it solves. - [ ] Ideally, include a test that fails without this PR but passes with it. ### Tests - [ ] Run the tests with `pnpm test` and lint the project with `pnpm lint` and `pnpm check` ### Changesets - [x] If your PR makes a change that should be noted in one or more packages' changelogs, generate a changeset by running `pnpm changeset` and following the prompts. Changesets that add features should be `minor` and those that fix bugs should be `patch`. Please prefix changeset messages with `feat:`, `fix:`, or `chore:`. ### Edits - [x] Please ensure that 'Allow edits from maintainers' is checked. PRs without this option may be closed. --------- Co-authored-by: Chew Tee Ming Co-authored-by: Rich Harris Co-authored-by: Ben McCann <322311+benmccann@users.noreply.github.com> --- .changeset/light-singers-lie.md | 5 +++++ packages/kit/src/exports/index.js | 12 ++++++------ packages/kit/types/index.d.ts | 25 +++++-------------------- 3 files changed, 16 insertions(+), 26 deletions(-) create mode 100644 .changeset/light-singers-lie.md diff --git a/.changeset/light-singers-lie.md b/.changeset/light-singers-lie.md new file mode 100644 index 000000000000..745edec0deb3 --- /dev/null +++ b/.changeset/light-singers-lie.md @@ -0,0 +1,5 @@ +--- +'@sveltejs/kit': major +--- + +chore: change `error`, `isHttpError`, `redirect`, and `isRedirect` to refer to public type instead of internal class diff --git a/packages/kit/src/exports/index.js b/packages/kit/src/exports/index.js index 8923ea96a3a6..2378d41009c1 100644 --- a/packages/kit/src/exports/index.js +++ b/packages/kit/src/exports/index.js @@ -44,7 +44,7 @@ export { VERSION } from '../version.js'; * @param {number} status * @param {App.Error} body * @return {never} - * @throws {HttpError} This error instructs SvelteKit to initiate HTTP error handling. + * @throws {import('./public.js').HttpError} This error instructs SvelteKit to initiate HTTP error handling. * @throws {Error} If the provided status is invalid (not between 400 and 599). */ /** @@ -58,7 +58,7 @@ export { VERSION } from '../version.js'; * @param {number} status * @param {{ message: string } extends App.Error ? App.Error | string | undefined : never} [body] * @return {never} - * @throws {HttpError} This error instructs SvelteKit to initiate HTTP error handling. + * @throws {import('./public.js').HttpError} This error instructs SvelteKit to initiate HTTP error handling. * @throws {Error} If the provided status is invalid (not between 400 and 599). */ /** @@ -69,7 +69,7 @@ export { VERSION } from '../version.js'; * @param {number} status The [HTTP status code](https://developer.mozilla.org/en-US/docs/Web/HTTP/Status#client_error_responses). Must be in the range 400-599. * @param {{ message: string } extends App.Error ? App.Error | string | undefined : never} body An object that conforms to the App.Error type. If a string is passed, it will be used as the message property. * @return {never} - * @throws {HttpError} This error instructs SvelteKit to initiate HTTP error handling. + * @throws {import('./public.js').HttpError} This error instructs SvelteKit to initiate HTTP error handling. * @throws {Error} If the provided status is invalid (not between 400 and 599). */ export function error(status, body) { @@ -85,7 +85,7 @@ export function error(status, body) { * @template {number} T * @param {unknown} e * @param {T} [status] The status to filter for. - * @return {e is (HttpError & { status: T extends undefined ? never : T })} + * @return {e is (import('./public.js').HttpError & { status: T extends undefined ? never : T })} */ export function isHttpError(e, status) { if (!(e instanceof HttpError)) return false; @@ -105,7 +105,7 @@ export function isHttpError(e, status) { * * @param {300 | 301 | 302 | 303 | 304 | 305 | 306 | 307 | 308 | ({} & number)} status The [HTTP status code](https://developer.mozilla.org/en-US/docs/Web/HTTP/Status#redirection_messages). Must be in the range 300-308. * @param {string | URL} location The location to redirect to. - * @throws {Redirect} This error instructs SvelteKit to redirect to the specified location. + * @throws {import('./public.js').Redirect} This error instructs SvelteKit to redirect to the specified location. * @throws {Error} If the provided status is invalid. * @return {never} */ @@ -124,7 +124,7 @@ export function redirect(status, location) { /** * Checks whether this is a redirect thrown by {@link redirect}. * @param {unknown} e The object to check. - * @return {e is Redirect} + * @return {e is import('./public.js').Redirect} */ export function isRedirect(e) { return e instanceof Redirect; diff --git a/packages/kit/types/index.d.ts b/packages/kit/types/index.d.ts index 3a9f8149c63c..241047b57951 100644 --- a/packages/kit/types/index.d.ts +++ b/packages/kit/types/index.d.ts @@ -2640,7 +2640,7 @@ declare module '@sveltejs/kit' { * Make sure you're not catching the thrown error, which would prevent SvelteKit from handling it. * @param status The [HTTP status code](https://developer.mozilla.org/en-US/docs/Web/HTTP/Status#client_error_responses). Must be in the range 400-599. * @param body An object that conforms to the App.Error type. If a string is passed, it will be used as the message property. - * @throws {HttpError} This error instructs SvelteKit to initiate HTTP error handling. + * @throws {import('./public.js').HttpError} This error instructs SvelteKit to initiate HTTP error handling. * @throws {Error} If the provided status is invalid (not between 400 and 599). */ export function error(status: number, body: App.Error): never; @@ -2651,7 +2651,7 @@ declare module '@sveltejs/kit' { * Make sure you're not catching the thrown error, which would prevent SvelteKit from handling it. * @param status The [HTTP status code](https://developer.mozilla.org/en-US/docs/Web/HTTP/Status#client_error_responses). Must be in the range 400-599. * @param body An object that conforms to the App.Error type. If a string is passed, it will be used as the message property. - * @throws {HttpError} This error instructs SvelteKit to initiate HTTP error handling. + * @throws {import('./public.js').HttpError} This error instructs SvelteKit to initiate HTTP error handling. * @throws {Error} If the provided status is invalid (not between 400 and 599). */ export function error(status: number, body?: { @@ -2661,7 +2661,7 @@ declare module '@sveltejs/kit' { * Checks whether this is an error thrown by {@link error}. * @param status The status to filter for. * */ - export function isHttpError(e: unknown, status?: T): e is (HttpError_1 & { + export function isHttpError(e: unknown, status?: T): e is (HttpError & { status: T extends undefined ? never : T; }); /** @@ -2677,7 +2677,7 @@ declare module '@sveltejs/kit' { * * @param status The [HTTP status code](https://developer.mozilla.org/en-US/docs/Web/HTTP/Status#redirection_messages). Must be in the range 300-308. * @param location The location to redirect to. - * @throws {Redirect} This error instructs SvelteKit to redirect to the specified location. + * @throws {import('./public.js').Redirect} This error instructs SvelteKit to redirect to the specified location. * @throws {Error} If the provided status is invalid. * */ export function redirect(status: 300 | 301 | 302 | 303 | 304 | 305 | 306 | 307 | 308 | ({} & number), location: string | URL): never; @@ -2685,7 +2685,7 @@ declare module '@sveltejs/kit' { * Checks whether this is a redirect thrown by {@link redirect}. * @param e The object to check. * */ - export function isRedirect(e: unknown): e is Redirect_1; + export function isRedirect(e: unknown): e is Redirect; /** * Create a JSON `Response` object from the supplied data. * @param data The value that will be serialized as JSON. @@ -2767,21 +2767,6 @@ declare module '@sveltejs/kit' { export type LessThan = TNumber extends TArray["length"] ? TArray[number] : LessThan; export type NumericRange = Exclude, LessThan>; export const VERSION: string; - class HttpError_1 { - - constructor(status: number, body: { - message: string; - } extends App.Error ? (App.Error | string | undefined) : App.Error); - status: number; - body: App.Error; - toString(): string; - } - class Redirect_1 { - - constructor(status: 300 | 301 | 302 | 303 | 304 | 305 | 306 | 307 | 308, location: string); - status: 300 | 301 | 302 | 303 | 304 | 305 | 306 | 307 | 308; - location: string; - } export {}; } From 62eae5e732595ba727f8e72ef76670344cb6d26d Mon Sep 17 00:00:00 2001 From: Ben McCann <322311+benmccann@users.noreply.github.com> Date: Thu, 19 Feb 2026 10:05:40 -0700 Subject: [PATCH 008/545] chore: migrate from rollup to rolldown (#15297) closes https://github.com/sveltejs/kit/issues/13845 --------- Co-authored-by: Tee Ming --- .changeset/large-onions-attack.md | 5 + .../25-build-and-deploy/40-adapter-node.md | 2 +- eslint.config.js | 1 - packages/adapter-node/index.js | 21 +- packages/adapter-node/package.json | 9 +- .../{rollup.config.js => rolldown.config.js} | 45 +-- packages/adapter-node/tsconfig.json | 1 + pnpm-lock.yaml | 287 ++++++++++++------ 8 files changed, 229 insertions(+), 142 deletions(-) create mode 100644 .changeset/large-onions-attack.md rename packages/adapter-node/{rollup.config.js => rolldown.config.js} (52%) diff --git a/.changeset/large-onions-attack.md b/.changeset/large-onions-attack.md new file mode 100644 index 000000000000..aef0217173b9 --- /dev/null +++ b/.changeset/large-onions-attack.md @@ -0,0 +1,5 @@ +--- +'@sveltejs/adapter-node': major +--- + +chore: migrate from rollup to rolldown diff --git a/documentation/docs/25-build-and-deploy/40-adapter-node.md b/documentation/docs/25-build-and-deploy/40-adapter-node.md index 347396904790..70f3ce553af5 100644 --- a/documentation/docs/25-build-and-deploy/40-adapter-node.md +++ b/documentation/docs/25-build-and-deploy/40-adapter-node.md @@ -33,7 +33,7 @@ You will need the output directory, the project's `package.json`, and the produc node build ``` -Development dependencies will be bundled into your app using [Rollup](https://rollupjs.org). To control whether a given package is bundled or externalised, place it in `devDependencies` or `dependencies` respectively in your `package.json`. +Development dependencies will be bundled into your app using [Rolldown](https://rolldown.rs/). To control whether a given package is bundled or externalised, place it in `devDependencies` or `dependencies` respectively in your `package.json`. ### Compressing responses diff --git a/eslint.config.js b/eslint.config.js index e8b6daf86615..0060a6f55620 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -54,7 +54,6 @@ export default [ ignores: [ 'packages/adapter-cloudflare/test/apps/**/*', 'packages/adapter-netlify/test/apps/**/*', - 'packages/adapter-node/rollup.config.js', 'packages/adapter-node/tests/smoke.spec_disabled.js', 'packages/adapter-static/test/apps/**/*', 'packages/kit/src/core/sync/create_manifest_data/test/samples/**/*', diff --git a/packages/adapter-node/index.js b/packages/adapter-node/index.js index f6efaf07b991..9ed74124b9bb 100644 --- a/packages/adapter-node/index.js +++ b/packages/adapter-node/index.js @@ -1,9 +1,6 @@ import { readFileSync, writeFileSync } from 'node:fs'; import { fileURLToPath } from 'node:url'; -import { rollup } from 'rollup'; -import { nodeResolve } from '@rollup/plugin-node-resolve'; -import commonjs from '@rollup/plugin-commonjs'; -import json from '@rollup/plugin-json'; +import { rolldown } from 'rolldown'; /** * @template T @@ -72,22 +69,16 @@ export default function (opts = {}) { // we bundle the Vite output so that deployments only need // their production dependencies. Anything in devDependencies // will get included in the bundled code - const bundle = await rollup({ + const bundle = await rolldown({ input, external: [ // dependencies could have deep exports, so we need a regex ...Object.keys(pkg.dependencies || {}).map((d) => new RegExp(`^${d}(\\/.*)?$`)) ], - plugins: [ - nodeResolve({ - preferBuiltins: true, - exportConditions: ['node'] - }), - // @ts-ignore https://github.com/rollup/plugins/issues/1329 - commonjs({ strictRequires: true }), - // @ts-ignore https://github.com/rollup/plugins/issues/1329 - json() - ] + platform: 'node', + resolve: { + conditionNames: ['node'] + } }); await bundle.write({ diff --git a/packages/adapter-node/package.json b/packages/adapter-node/package.json index 0ff39a6cb9ad..09da0782e5ae 100644 --- a/packages/adapter-node/package.json +++ b/packages/adapter-node/package.json @@ -33,8 +33,8 @@ "ambient.d.ts" ], "scripts": { - "dev": "rollup -cw", - "build": "rollup -c", + "dev": "rolldown -cw", + "build": "rolldown -c", "test": "vitest run", "check": "tsc", "lint": "prettier --check .", @@ -52,10 +52,7 @@ "vitest": "catalog:" }, "dependencies": { - "@rollup/plugin-commonjs": "^29.0.0", - "@rollup/plugin-json": "^6.1.0", - "@rollup/plugin-node-resolve": "^16.0.0", - "rollup": "^4.9.5" + "rolldown": "^1.0.0-rc.5" }, "peerDependencies": { "@sveltejs/kit": "^2.4.0" diff --git a/packages/adapter-node/rollup.config.js b/packages/adapter-node/rolldown.config.js similarity index 52% rename from packages/adapter-node/rollup.config.js rename to packages/adapter-node/rolldown.config.js index 40f8e07558aa..45167575c67d 100644 --- a/packages/adapter-node/rollup.config.js +++ b/packages/adapter-node/rolldown.config.js @@ -1,12 +1,9 @@ -import { nodeResolve } from '@rollup/plugin-node-resolve'; -import commonjs from '@rollup/plugin-commonjs'; -import json from '@rollup/plugin-json'; import { builtinModules } from 'node:module'; import { rmSync } from 'node:fs'; /** * @param {string} filepath - * @returns {import('rollup').Plugin} + * @returns {import('rolldown').Plugin} */ function clearOutput(filepath) { return { @@ -22,7 +19,7 @@ function clearOutput(filepath) { } /** - * @returns {import('rollup').Plugin} + * @returns {import('rolldown').Plugin} */ function prefixBuiltinModules() { return { @@ -42,14 +39,9 @@ export default [ file: 'files/index.js', format: 'esm' }, - plugins: [ - clearOutput('files/index.js'), - nodeResolve({ preferBuiltins: true }), - commonjs(), - json(), - prefixBuiltinModules() - ], - external: ['ENV', 'HANDLER'] + plugins: [clearOutput('files/index.js'), prefixBuiltinModules()], + external: ['ENV', 'HANDLER'], + platform: 'node' }, { input: 'src/env.js', @@ -57,30 +49,20 @@ export default [ file: 'files/env.js', format: 'esm' }, - plugins: [ - clearOutput('files/env.js'), - nodeResolve(), - commonjs(), - json(), - prefixBuiltinModules() - ], - external: ['HANDLER'] + plugins: [clearOutput('files/env.js'), prefixBuiltinModules()], + external: ['HANDLER'], + platform: 'node' }, { input: 'src/handler.js', output: { file: 'files/handler.js', format: 'esm', - inlineDynamicImports: true + codeSplitting: false }, - plugins: [ - clearOutput('files/handler.js'), - nodeResolve(), - commonjs(), - json(), - prefixBuiltinModules() - ], - external: ['ENV', 'MANIFEST', 'SERVER', 'SHIMS'] + plugins: [clearOutput('files/handler.js'), prefixBuiltinModules()], + external: ['ENV', 'MANIFEST', 'SERVER', 'SHIMS'], + platform: 'node' }, { input: 'src/shims.js', @@ -88,6 +70,7 @@ export default [ file: 'files/shims.js', format: 'esm' }, - plugins: [clearOutput('files/shims.js'), nodeResolve(), commonjs(), prefixBuiltinModules()] + plugins: [clearOutput('files/shims.js'), prefixBuiltinModules()], + platform: 'node' } ]; diff --git a/packages/adapter-node/tsconfig.json b/packages/adapter-node/tsconfig.json index 4234750243cc..f97ac86855b3 100644 --- a/packages/adapter-node/tsconfig.json +++ b/packages/adapter-node/tsconfig.json @@ -16,6 +16,7 @@ }, "include": [ "index.js", + "rolldown.config.js", "src/**/*.js", "tests/**/*.js", "tests/**/*.ts", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index dcbcf0e4960c..71812a380c12 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -26,7 +26,7 @@ catalogs: version: 0.212.0 '@opentelemetry/sdk-trace-node': specifier: ^2.0.1 - version: 2.5.0 + version: 2.5.1 '@playwright/test': specifier: 1.58.2 version: 1.58.2 @@ -334,18 +334,9 @@ importers: packages/adapter-node: dependencies: - '@rollup/plugin-commonjs': - specifier: ^29.0.0 - version: 29.0.0(rollup@4.57.1) - '@rollup/plugin-json': - specifier: ^6.1.0 - version: 6.1.0(rollup@4.57.1) - '@rollup/plugin-node-resolve': - specifier: ^16.0.0 - version: 16.0.0(rollup@4.57.1) - rollup: - specifier: ^4.9.5 - version: 4.57.1 + rolldown: + specifier: ^1.0.0-rc.5 + version: 1.0.0-rc.5 devDependencies: '@polka/url': specifier: 'catalog:' @@ -664,7 +655,7 @@ importers: version: 0.212.0(@opentelemetry/api@1.9.0) '@opentelemetry/sdk-trace-node': specifier: 'catalog:' - version: 2.5.0(@opentelemetry/api@1.9.0) + version: 2.5.1(@opentelemetry/api@1.9.0) '@sveltejs/kit': specifier: workspace:^ version: link:../../.. @@ -1631,12 +1622,18 @@ packages: resolution: {integrity: sha512-Y6+WUMsTFWE5jb20IFP4YGa5IrGY/+a/FbOSjDF/wz9gepU2hwCYSXRHP/vPwBvwcY3SVMASt4yXxbXNXigmZQ==} engines: {node: '>=18'} + '@emnapi/core@1.8.1': + resolution: {integrity: sha512-AvT9QFpxK0Zd8J0jopedNm+w/2fIzvtPKPjqyw9jwvBaReTTqPBk9Hixaz7KbjimP+QNz605/XnjFcDAL2pqBg==} + '@emnapi/runtime@1.5.0': resolution: {integrity: sha512-97/BJ3iXHww3djw6hYIfErCZFee7qCtrneuLa20UXFCOTCfBM2cvQHjWJ2EG0s0MtdNwInarqCTz35i4wWXHsQ==} '@emnapi/runtime@1.8.1': resolution: {integrity: sha512-mehfKSMWjjNol8659Z8KxEMrdSJDDot5SXMq00dM8BN4o+CLNXQ0xH2V7EchNHV4RmbZLmmPdEaXZc5H2FXmDg==} + '@emnapi/wasi-threads@1.1.0': + resolution: {integrity: sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==} + '@envelop/instrumentation@1.0.0': resolution: {integrity: sha512-cxgkB66RQB95H3X27jlnxCRNTmPuSTgmBAq6/4n2Dtv4hsk4yz8FadA1ggmd0uZzvKqWD6CR+WFgTjhDqg7eyw==} engines: {node: '>=18.0.0'} @@ -2821,6 +2818,9 @@ packages: engines: {node: '>=18'} hasBin: true + '@napi-rs/wasm-runtime@1.1.1': + resolution: {integrity: sha512-p64ah1M1ld8xjWv3qbvFwHiFVWrq1yFvV4f7w+mzaqiR4IlSgkqhcRdHwsGgomwzBH51sRY4NEowLxnaBjcW/A==} + '@netlify/ai@0.3.5': resolution: {integrity: sha512-7suwHOBy9s14yeWRxt+w3Zh6Rrx8gX7zP/xmsxqxLyJlcBykWm6siBJs2mMtJgbWvcrgI5BEgNLh5qfXlTCsRQ==} engines: {node: '>=20.6.1'} @@ -2971,12 +2971,6 @@ packages: peerDependencies: '@opentelemetry/api': '>=1.0.0 <1.10.0' - '@opentelemetry/context-async-hooks@2.5.0': - resolution: {integrity: sha512-uOXpVX0ZjO7heSVjhheW2XEPrhQAWr2BScDPoZ9UDycl5iuHG+Usyc3AIfG6kZeC1GyLpMInpQ6X5+9n69yOFw==} - engines: {node: ^18.19.0 || >=20.6.0} - peerDependencies: - '@opentelemetry/api': '>=1.0.0 <1.10.0' - '@opentelemetry/context-async-hooks@2.5.1': resolution: {integrity: sha512-MHbu8XxCHcBn6RwvCt2Vpn1WnLMNECfNKYB14LI5XypcgH4IE0/DiVifVR9tAkwPMyLXN8dOoPJfya3IryLQVw==} engines: {node: ^18.19.0 || >=20.6.0} @@ -2989,12 +2983,6 @@ packages: peerDependencies: '@opentelemetry/api': '>=1.0.0 <1.10.0' - '@opentelemetry/core@2.5.0': - resolution: {integrity: sha512-ka4H8OM6+DlUhSAZpONu0cPBtPPTQKxbxVzC4CzVx5+K4JnroJVBtDzLAMx4/3CDTJXRvVFhpFjtl4SaiTNoyQ==} - engines: {node: ^18.19.0 || >=20.6.0} - peerDependencies: - '@opentelemetry/api': '>=1.0.0 <1.10.0' - '@opentelemetry/core@2.5.1': resolution: {integrity: sha512-Dwlc+3HAZqpgTYq0MUyZABjFkcrKTePwuiFVLjahGD8cx3enqihmpAmdgNFO1R4m/sIe5afjJrA25Prqy4NXlA==} engines: {node: ^18.19.0 || >=20.6.0} @@ -3127,12 +3115,6 @@ packages: peerDependencies: '@opentelemetry/api': '>=1.0.0 <1.10.0' - '@opentelemetry/resources@2.5.0': - resolution: {integrity: sha512-F8W52ApePshpoSrfsSk1H2yJn9aKjCrbpQF1M9Qii0GHzbfVeFUB+rc3X4aggyZD8x9Gu3Slua+s6krmq6Dt8g==} - engines: {node: ^18.19.0 || >=20.6.0} - peerDependencies: - '@opentelemetry/api': '>=1.3.0 <1.10.0' - '@opentelemetry/resources@2.5.1': resolution: {integrity: sha512-BViBCdE/GuXRlp9k7nS1w6wJvY5fnFX5XvuEtWsTAOQFIO89Eru7lGW3WbfbxtCuZ/GbrJfAziXG0w0dpxL7eQ==} engines: {node: ^18.19.0 || >=20.6.0} @@ -3163,12 +3145,6 @@ packages: peerDependencies: '@opentelemetry/api': '>=1.0.0 <1.10.0' - '@opentelemetry/sdk-trace-base@2.5.0': - resolution: {integrity: sha512-VzRf8LzotASEyNDUxTdaJ9IRJ1/h692WyArDBInf5puLCjxbICD6XkHgpuudis56EndyS7LYFmtTMny6UABNdQ==} - engines: {node: ^18.19.0 || >=20.6.0} - peerDependencies: - '@opentelemetry/api': '>=1.3.0 <1.10.0' - '@opentelemetry/sdk-trace-base@2.5.1': resolution: {integrity: sha512-iZH3Gw8cxQn0gjpOjJMmKLd9GIaNh/E3v3ST67vyzLSxHBs14HsG4dy7jMYyC5WXGdBVEcM7U/XTF5hCQxjDMw==} engines: {node: ^18.19.0 || >=20.6.0} @@ -3181,12 +3157,6 @@ packages: peerDependencies: '@opentelemetry/api': '>=1.0.0 <1.10.0' - '@opentelemetry/sdk-trace-node@2.5.0': - resolution: {integrity: sha512-O6N/ejzburFm2C84aKNrwJVPpt6HSTSq8T0ZUMq3xT2XmqT4cwxUItcL5UWGThYuq8RTcbH8u1sfj6dmRci0Ow==} - engines: {node: ^18.19.0 || >=20.6.0} - peerDependencies: - '@opentelemetry/api': '>=1.0.0 <1.10.0' - '@opentelemetry/sdk-trace-node@2.5.1': resolution: {integrity: sha512-9lopQ6ZoElETOEN0csgmtEV5/9C7BMfA7VtF4Jape3i954b6sTY2k3Xw3CxUTKreDck/vpAuJM+EDo4zheUw+A==} engines: {node: ^18.19.0 || >=20.6.0} @@ -3201,6 +3171,9 @@ packages: resolution: {integrity: sha512-TtxJSRD8Ohxp6bKkhrm27JRHAxPczQA7idtcTOMYI+wQRRrfgqxHv1cFbCApcSnNjtXkmzFozn6jQtFrOmbjPQ==} engines: {node: '>=14'} + '@oxc-project/types@0.114.0': + resolution: {integrity: sha512-//nBfbzHQHvJs8oFIjv6coZ6uxQ4alLfiPe6D5vit6c4pmxATHHlVwgB1k+Hv4yoAMyncdxgRBF5K4BYWUCzvA==} + '@parcel/watcher-android-arm64@2.5.1': resolution: {integrity: sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA==} engines: {node: '>= 10.0.0'} @@ -3350,6 +3323,90 @@ packages: resolution: {integrity: sha512-NvV5jPAQIMCoHvaJ0ZhfouBJ2woFYYf+o6B7dCHGh/tLKSPVoxhjffi35xPuMHgOv65aTOKUzML5XwQF9EkDAA==} engines: {node: '>=18'} + '@rolldown/binding-android-arm64@1.0.0-rc.5': + resolution: {integrity: sha512-zCEmUrt1bggwgBgeKLxNj217J1OrChrp3jJt24VK9jAharSTeVaHODNL+LpcQVhRz+FktYWfT9cjo5oZ99ZLpg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [android] + + '@rolldown/binding-darwin-arm64@1.0.0-rc.5': + resolution: {integrity: sha512-ZP9xb9lPAex36pvkNWCjSEJW/Gfdm9I3ssiqOFLmpZ/vosPXgpoGxCmh+dX1Qs+/bWQE6toNFXWWL8vYoKoK9Q==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [darwin] + + '@rolldown/binding-darwin-x64@1.0.0-rc.5': + resolution: {integrity: sha512-7IdrPunf6dp9mywMgTOKMMGDnMHQ6+h5gRl6LW8rhD8WK2kXX0IwzcM5Zc0B5J7xQs8QWOlKjv8BJsU/1CD3pg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [darwin] + + '@rolldown/binding-freebsd-x64@1.0.0-rc.5': + resolution: {integrity: sha512-o/JCk+dL0IN68EBhZ4DqfsfvxPfMeoM6cJtxORC1YYoxGHZyth2Kb2maXDb4oddw2wu8iIbnYXYPEzBtAF5CAg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [freebsd] + + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.5': + resolution: {integrity: sha512-IIBwTtA6VwxQLcEgq2mfrUgam7VvPZjhd/jxmeS1npM+edWsrrpRLHUdze+sk4rhb8/xpP3flemgcZXXUW6ukw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] + + '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.5': + resolution: {integrity: sha512-KSol1De1spMZL+Xg7K5IBWXIvRWv7+pveaxFWXpezezAG7CS6ojzRjtCGCiLxQricutTAi/LkNWKMsd2wNhMKQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@rolldown/binding-linux-arm64-musl@1.0.0-rc.5': + resolution: {integrity: sha512-WFljyDkxtXRlWxMjxeegf7xMYXxUr8u7JdXlOEWKYgDqEgxUnSEsVDxBiNWQ1D5kQKwf8Wo4sVKEYPRhCdsjwA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@rolldown/binding-linux-x64-gnu@1.0.0-rc.5': + resolution: {integrity: sha512-CUlplTujmbDWp2gamvrqVKi2Or8lmngXT1WxsizJfts7JrvfGhZObciaY/+CbdbS9qNnskvwMZNEhTPrn7b+WA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@rolldown/binding-linux-x64-musl@1.0.0-rc.5': + resolution: {integrity: sha512-wdf7g9NbVZCeAo2iGhsjJb7I8ZFfs6X8bumfrWg82VK+8P6AlLXwk48a1ASiJQDTS7Svq2xVzZg3sGO2aXpHRA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [musl] + + '@rolldown/binding-openharmony-arm64@1.0.0-rc.5': + resolution: {integrity: sha512-0CWY7ubu12nhzz+tkpHjoG3IRSTlWYe0wrfJRf4qqjqQSGtAYgoL9kwzdvlhaFdZ5ffVeyYw9qLsChcjUMEloQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [openharmony] + + '@rolldown/binding-wasm32-wasi@1.0.0-rc.5': + resolution: {integrity: sha512-LztXnGzv6t2u830mnZrFLRVqT/DPJ9DL4ZTz/y93rqUVkeHjMMYIYaFj+BUthiYxbVH9dH0SZYufETspKY/NhA==} + engines: {node: '>=14.0.0'} + cpu: [wasm32] + + '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.5': + resolution: {integrity: sha512-jUct1XVeGtyjqJXEAfvdFa8xoigYZ2rge7nYEm70ppQxpfH9ze2fbIrpHmP2tNM2vL/F6Dd0CpXhpjPbC6bSxQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [win32] + + '@rolldown/binding-win32-x64-msvc@1.0.0-rc.5': + resolution: {integrity: sha512-VQ8F9ld5gw29epjnVGdrx8ugiLTe8BMqmhDYy7nGbdeDo4HAt4bgdZvLbViEhg7DZyHLpiEUlO5/jPSUrIuxRQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [win32] + + '@rolldown/pluginutils@1.0.0-rc.5': + resolution: {integrity: sha512-RxlLX/DPoarZ9PtxVrQgZhPoor987YtKQqCo5zkjX+0S0yLJ7Vv515Wk6+xtTL67VONKJKxETWZwuZjss2idYw==} + '@rollup/plugin-commonjs@29.0.0': resolution: {integrity: sha512-U2YHaxR2cU/yAiwKJtJRhnyLk7cifnQw0zUpISsocBDoHDJn+HTV74ABqnwr5bEgWUwFZC9oFL6wLe21lHu5eQ==} engines: {node: '>=16.0.0 || 14 >= 14.17'} @@ -3587,6 +3644,9 @@ packages: '@tsconfig/node16@1.0.4': resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} + '@tybys/wasm-util@0.10.1': + resolution: {integrity: sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==} + '@types/chai@5.2.2': resolution: {integrity: sha512-8kB30R7Hwqf40JPiKhVzodJs2Qc1ZJ5zuT3uzw5Hq/dhNCl3G3l83jfpdI1e20BP348+fV7VIL/+FxaXkqBmWg==} @@ -3608,9 +3668,6 @@ packages: '@types/node@12.20.55': resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} - '@types/node@18.19.119': - resolution: {integrity: sha512-d0F6m9itIPaKnrvEMlzE48UjwZaAnFW7Jwibacw9MNdqadjKNpUm9tfJYDwmShJmgqcoqYUX3EMKO1+RWiuuNg==} - '@types/node@24.10.13': resolution: {integrity: sha512-oH72nZRfDv9lADUBSo104Aq7gPHpQZc4BTx38r9xf9pg5LfP6EzSyH2n7qFmmxRQXh7YlUXODcYsg6PuTDSxGg==} @@ -5756,6 +5813,11 @@ packages: resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + rolldown@1.0.0-rc.5: + resolution: {integrity: sha512-0AdalTs6hNTioaCYIkAa7+xsmHBfU5hCNclZnM/lp7lGGDuUOb6N4BVNtwiomybbencDjq/waKjTImqiGCs5sw==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + rollup@4.57.1: resolution: {integrity: sha512-oQL6lgK3e2QZeQ7gcgIkS2YZPg5slw37hYufJ3edKlfQSGGm8ICoxswK15ntSzF/a8+h7ekRy7k7oWc3BQ7y8A==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} @@ -6160,9 +6222,6 @@ packages: uncrypto@0.1.3: resolution: {integrity: sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q==} - undici-types@5.26.5: - resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} - undici-types@7.16.0: resolution: {integrity: sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==} @@ -6798,6 +6857,12 @@ snapshots: gonzales-pe: 4.3.0 node-source-walk: 7.0.1 + '@emnapi/core@1.8.1': + dependencies: + '@emnapi/wasi-threads': 1.1.0 + tslib: 2.8.1 + optional: true + '@emnapi/runtime@1.5.0': dependencies: tslib: 2.8.1 @@ -6808,6 +6873,11 @@ snapshots: tslib: 2.8.1 optional: true + '@emnapi/wasi-threads@1.1.0': + dependencies: + tslib: 2.8.1 + optional: true + '@envelop/instrumentation@1.0.0': dependencies: '@whatwg-node/promise-helpers': 1.3.2 @@ -7551,6 +7621,13 @@ snapshots: - encoding - supports-color + '@napi-rs/wasm-runtime@1.1.1': + dependencies: + '@emnapi/core': 1.8.1 + '@emnapi/runtime': 1.8.1 + '@tybys/wasm-util': 0.10.1 + optional: true + '@netlify/ai@0.3.5(@netlify/api@14.0.12)': dependencies: '@netlify/api': 14.0.12 @@ -7876,10 +7953,6 @@ snapshots: dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/context-async-hooks@2.5.0(@opentelemetry/api@1.9.0)': - dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/context-async-hooks@2.5.1(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -7889,11 +7962,6 @@ snapshots: '@opentelemetry/api': 1.9.0 '@opentelemetry/semantic-conventions': 1.28.0 - '@opentelemetry/core@2.5.0(@opentelemetry/api@1.9.0)': - dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/semantic-conventions': 1.36.0 - '@opentelemetry/core@2.5.1(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -8074,12 +8142,6 @@ snapshots: '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.0) '@opentelemetry/semantic-conventions': 1.28.0 - '@opentelemetry/resources@2.5.0(@opentelemetry/api@1.9.0)': - dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.5.0(@opentelemetry/api@1.9.0) - '@opentelemetry/semantic-conventions': 1.36.0 - '@opentelemetry/resources@2.5.1(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -8136,13 +8198,6 @@ snapshots: '@opentelemetry/resources': 1.30.1(@opentelemetry/api@1.9.0) '@opentelemetry/semantic-conventions': 1.28.0 - '@opentelemetry/sdk-trace-base@2.5.0(@opentelemetry/api@1.9.0)': - dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.5.0(@opentelemetry/api@1.9.0) - '@opentelemetry/resources': 2.5.0(@opentelemetry/api@1.9.0) - '@opentelemetry/semantic-conventions': 1.36.0 - '@opentelemetry/sdk-trace-base@2.5.1(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -8160,13 +8215,6 @@ snapshots: '@opentelemetry/sdk-trace-base': 1.30.1(@opentelemetry/api@1.9.0) semver: 7.7.3 - '@opentelemetry/sdk-trace-node@2.5.0(@opentelemetry/api@1.9.0)': - dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/context-async-hooks': 2.5.0(@opentelemetry/api@1.9.0) - '@opentelemetry/core': 2.5.0(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-trace-base': 2.5.0(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-trace-node@2.5.1(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -8178,6 +8226,8 @@ snapshots: '@opentelemetry/semantic-conventions@1.36.0': {} + '@oxc-project/types@0.114.0': {} + '@parcel/watcher-android-arm64@2.5.1': optional: true @@ -8289,6 +8339,49 @@ snapshots: '@publint/pack@0.1.0': {} + '@rolldown/binding-android-arm64@1.0.0-rc.5': + optional: true + + '@rolldown/binding-darwin-arm64@1.0.0-rc.5': + optional: true + + '@rolldown/binding-darwin-x64@1.0.0-rc.5': + optional: true + + '@rolldown/binding-freebsd-x64@1.0.0-rc.5': + optional: true + + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.5': + optional: true + + '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.5': + optional: true + + '@rolldown/binding-linux-arm64-musl@1.0.0-rc.5': + optional: true + + '@rolldown/binding-linux-x64-gnu@1.0.0-rc.5': + optional: true + + '@rolldown/binding-linux-x64-musl@1.0.0-rc.5': + optional: true + + '@rolldown/binding-openharmony-arm64@1.0.0-rc.5': + optional: true + + '@rolldown/binding-wasm32-wasi@1.0.0-rc.5': + dependencies: + '@napi-rs/wasm-runtime': 1.1.1 + optional: true + + '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.5': + optional: true + + '@rolldown/binding-win32-x64-msvc@1.0.0-rc.5': + optional: true + + '@rolldown/pluginutils@1.0.0-rc.5': {} + '@rollup/plugin-commonjs@29.0.0(rollup@4.57.1)': dependencies: '@rollup/pluginutils': 5.1.3(rollup@4.57.1) @@ -8465,6 +8558,11 @@ snapshots: '@tsconfig/node16@1.0.4': optional: true + '@tybys/wasm-util@0.10.1': + dependencies: + tslib: 2.8.1 + optional: true + '@types/chai@5.2.2': dependencies: '@types/deep-eql': 4.0.2 @@ -8486,10 +8584,6 @@ snapshots: '@types/node@12.20.55': {} - '@types/node@18.19.119': - dependencies: - undici-types: 5.26.5 - '@types/node@24.10.13': dependencies: undici-types: 7.16.0 @@ -9917,7 +10011,7 @@ snapshots: listhen: 1.9.0 ofetch: 1.4.1 pathe: 2.0.3 - sharp: 0.34.4 + sharp: 0.34.5 svgo: 4.0.0 ufo: 1.6.3 unstorage: 1.16.1(@netlify/blobs@10.5.0) @@ -10673,7 +10767,7 @@ snapshots: '@protobufjs/path': 1.1.2 '@protobufjs/pool': 1.1.0 '@protobufjs/utf8': 1.1.0 - '@types/node': 18.19.119 + '@types/node': 24.10.13 long: 5.3.2 protobufjs@8.0.0: @@ -10688,7 +10782,7 @@ snapshots: '@protobufjs/path': 1.1.2 '@protobufjs/pool': 1.1.0 '@protobufjs/utf8': 1.1.0 - '@types/node': 18.19.119 + '@types/node': 24.10.13 long: 5.3.2 publint@0.3.0: @@ -10813,6 +10907,25 @@ snapshots: reusify@1.0.4: {} + rolldown@1.0.0-rc.5: + dependencies: + '@oxc-project/types': 0.114.0 + '@rolldown/pluginutils': 1.0.0-rc.5 + optionalDependencies: + '@rolldown/binding-android-arm64': 1.0.0-rc.5 + '@rolldown/binding-darwin-arm64': 1.0.0-rc.5 + '@rolldown/binding-darwin-x64': 1.0.0-rc.5 + '@rolldown/binding-freebsd-x64': 1.0.0-rc.5 + '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-rc.5 + '@rolldown/binding-linux-arm64-gnu': 1.0.0-rc.5 + '@rolldown/binding-linux-arm64-musl': 1.0.0-rc.5 + '@rolldown/binding-linux-x64-gnu': 1.0.0-rc.5 + '@rolldown/binding-linux-x64-musl': 1.0.0-rc.5 + '@rolldown/binding-openharmony-arm64': 1.0.0-rc.5 + '@rolldown/binding-wasm32-wasi': 1.0.0-rc.5 + '@rolldown/binding-win32-arm64-msvc': 1.0.0-rc.5 + '@rolldown/binding-win32-x64-msvc': 1.0.0-rc.5 + rollup@4.57.1: dependencies: '@types/estree': 1.0.8 @@ -11285,8 +11398,6 @@ snapshots: uncrypto@0.1.3: {} - undici-types@5.26.5: {} - undici-types@7.16.0: {} undici@5.29.0: From 63b4df3a0440b7a03e6f5e178669f186bbb12bc2 Mon Sep 17 00:00:00 2001 From: Tee Ming Date: Fri, 20 Feb 2026 09:44:05 +0800 Subject: [PATCH 009/545] chore: upgrade wrangler and remove deprecated `event.platform.context` (#15347) This PR upgrades wrangler to a newer version without vulnerabilities. Bumps the peer version too. Additionally, we remove the deprecated `platform.context` property. Also ran `pnpm dedupe` to try to get rid of as many older unused transitive dependencies that were setting off dependabot security alerts. --- Co-authored-by: Ben McCann <322311+benmccann@users.noreply.github.com> --- .changeset/five-readers-march.md | 5 + .changeset/fluffy-tires-judge.md | 5 + .changeset/forty-ducks-fly.md | 5 + packages/adapter-cloudflare/ambient.d.ts | 2 - packages/adapter-cloudflare/package.json | 4 +- packages/adapter-cloudflare/src/worker.js | 1 - pnpm-lock.yaml | 1239 ++------------------- pnpm-workspace.yaml | 2 +- 8 files changed, 137 insertions(+), 1126 deletions(-) create mode 100644 .changeset/five-readers-march.md create mode 100644 .changeset/fluffy-tires-judge.md create mode 100644 .changeset/forty-ducks-fly.md diff --git a/.changeset/five-readers-march.md b/.changeset/five-readers-march.md new file mode 100644 index 000000000000..e9fb4707d606 --- /dev/null +++ b/.changeset/five-readers-march.md @@ -0,0 +1,5 @@ +--- +'@sveltejs/adapter-cloudflare': major +--- + +breaking: upgrade `@cloudflare/workers-types` to 4.20260219.0 diff --git a/.changeset/fluffy-tires-judge.md b/.changeset/fluffy-tires-judge.md new file mode 100644 index 000000000000..f5a5e090b2f9 --- /dev/null +++ b/.changeset/fluffy-tires-judge.md @@ -0,0 +1,5 @@ +--- +'@sveltejs/adapter-cloudflare': major +--- + +breaking: upgrade minimum `wrangler` version to ^4.67.0 diff --git a/.changeset/forty-ducks-fly.md b/.changeset/forty-ducks-fly.md new file mode 100644 index 000000000000..98c98783ee29 --- /dev/null +++ b/.changeset/forty-ducks-fly.md @@ -0,0 +1,5 @@ +--- +'@sveltejs/adapter-cloudflare': major +--- + +breaking: remove `platform.context` in favour of `platform.ctx` diff --git a/packages/adapter-cloudflare/ambient.d.ts b/packages/adapter-cloudflare/ambient.d.ts index d99dd15ab6cc..c485bb610945 100644 --- a/packages/adapter-cloudflare/ambient.d.ts +++ b/packages/adapter-cloudflare/ambient.d.ts @@ -9,8 +9,6 @@ declare global { export interface Platform { env: unknown; ctx: ExecutionContext; - /** @deprecated Use `ctx` instead */ - context: ExecutionContext; caches: CacheStorage; cf?: IncomingRequestCfProperties; } diff --git a/packages/adapter-cloudflare/package.json b/packages/adapter-cloudflare/package.json index 4df44ed1c37e..ae46453ce50b 100644 --- a/packages/adapter-cloudflare/package.json +++ b/packages/adapter-cloudflare/package.json @@ -44,7 +44,7 @@ "prepublishOnly": "pnpm build" }, "dependencies": { - "@cloudflare/workers-types": "^4.20250507.0", + "@cloudflare/workers-types": "^4.20260219.0", "worktop": "0.8.0-next.18" }, "devDependencies": { @@ -57,6 +57,6 @@ }, "peerDependencies": { "@sveltejs/kit": "^2.0.0", - "wrangler": "^4.0.0" + "wrangler": "^4.67.0" } } diff --git a/packages/adapter-cloudflare/src/worker.js b/packages/adapter-cloudflare/src/worker.js index bcee34b882e2..f34f099bb759 100644 --- a/packages/adapter-cloudflare/src/worker.js +++ b/packages/adapter-cloudflare/src/worker.js @@ -100,7 +100,6 @@ export default { platform: { env, ctx, - context: ctx, // deprecated in favor of ctx // @ts-expect-error webworker types from worktop are not compatible with Cloudflare Workers types caches, // @ts-expect-error the type is correct but ts is confused because platform.cf uses the type from index.ts while req.cf uses the type from index.d.ts diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 71812a380c12..ee9a9cafe354 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -14,7 +14,7 @@ catalogs: version: 5.1.0 '@netlify/dev': specifier: ^4.8.8 - version: 4.8.8 + version: 4.11.2 '@netlify/edge-functions': specifier: ^3.0.0 version: 3.0.3 @@ -112,7 +112,7 @@ catalogs: specifier: ^4.0.0 version: 4.0.16 wrangler: - specifier: ^4.65.0 + specifier: ^4.67.0 version: 4.67.0 importers: @@ -165,14 +165,14 @@ importers: packages/adapter-cloudflare: dependencies: '@cloudflare/workers-types': - specifier: ^4.20250507.0 - version: 4.20250508.0 + specifier: ^4.20260219.0 + version: 4.20260219.0 worktop: specifier: 0.8.0-next.18 version: 0.8.0-next.18 wrangler: - specifier: ^4.0.0 - version: 4.14.4(@cloudflare/workers-types@4.20250508.0) + specifier: ^4.67.0 + version: 4.67.0(@cloudflare/workers-types@4.20260219.0) devDependencies: '@playwright/test': specifier: 'catalog:' @@ -212,7 +212,7 @@ importers: version: 6.4.1(@types/node@24.10.13)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) wrangler: specifier: 'catalog:' - version: 4.67.0 + version: 4.67.0(@cloudflare/workers-types@4.20260219.0) packages/adapter-cloudflare/test/apps/workers: devDependencies: @@ -233,7 +233,7 @@ importers: version: 6.4.1(@types/node@24.10.13)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) wrangler: specifier: 'catalog:' - version: 4.67.0 + version: 4.67.0(@cloudflare/workers-types@4.20260219.0) packages/adapter-netlify: dependencies: @@ -246,7 +246,7 @@ importers: devDependencies: '@netlify/dev': specifier: 'catalog:' - version: 4.8.8(@netlify/api@14.0.12)(rollup@4.57.1) + version: 4.11.2(rollup@4.57.1) '@netlify/edge-functions': specifier: 'catalog:' version: 3.0.3 @@ -467,7 +467,7 @@ importers: version: 0.30.21 sharp: specifier: ^0.34.1 - version: 0.34.4 + version: 0.34.5 svelte-parse-markup: specifier: ^0.1.5 version: 0.1.5(svelte@5.51.5) @@ -1518,10 +1518,6 @@ packages: '@changesets/write@0.4.0': resolution: {integrity: sha512-CdTLvIOPiCNuH71pyDu3rA+Q0n65cmAbXnwWH84rKGiFumFzkmHNT8KHTMEchcxN+Kl8I54xGUhJ7l3E7X396Q==} - '@cloudflare/kv-asset-handler@0.4.0': - resolution: {integrity: sha512-+tv3z+SPp+gqTIcImN9o0hqE9xyfQjI1XD9pL6NuKjua9B1y7mNYv0S9cP+QEbA4ppVgGZEmKOvHX5G5Ei1CVA==} - engines: {node: '>=18.0.0'} - '@cloudflare/kv-asset-handler@0.4.2': resolution: {integrity: sha512-SIOD2DxrRRwQ+jgzlXCqoEFiKOFqaPjhnNTGKXSRLvp1HiOvapLaFG2kEr9dYQTYe8rKrd9uvDUzmAITeNyaHQ==} engines: {node: '>=18.0.0'} @@ -1535,77 +1531,38 @@ packages: workerd: optional: true - '@cloudflare/unenv-preset@2.3.1': - resolution: {integrity: sha512-Xq57Qd+ADpt6hibcVBO0uLG9zzRgyRhfCUgBT9s+g3+3Ivg5zDyVgLFy40ES1VdNcu8rPNSivm9A+kGP5IVaPg==} - peerDependencies: - unenv: 2.0.0-rc.15 - workerd: ^1.20250320.0 - peerDependenciesMeta: - workerd: - optional: true - - '@cloudflare/workerd-darwin-64@1.20250507.0': - resolution: {integrity: sha512-xC+8hmQuOUUNCVT9DWpLMfxhR4Xs4kI8v7Bkybh4pzGC85moH6fMfCBNaP0YQCNAA/BR56aL/AwfvMVGskTK/A==} - engines: {node: '>=16'} - cpu: [x64] - os: [darwin] - '@cloudflare/workerd-darwin-64@1.20260219.0': resolution: {integrity: sha512-k+xM+swQBQnkrvwobjRPxyeYwjLSludJusR0PqeHe+h6X9QIRGgw3s1AO38lXQsqzMSgG5709oOXSF19NKVVaQ==} engines: {node: '>=16'} cpu: [x64] os: [darwin] - '@cloudflare/workerd-darwin-arm64@1.20250507.0': - resolution: {integrity: sha512-Oynff5H8yM4trfUFaKdkOvPV3jac8mg7QC19ILZluCVgLx/JGEVLEJ7do1Na9rLqV8CK4gmUXPrUMX7uerhQgg==} - engines: {node: '>=16'} - cpu: [arm64] - os: [darwin] - '@cloudflare/workerd-darwin-arm64@1.20260219.0': resolution: {integrity: sha512-EyfQdsG1KcIVAf4qndT00LZly7sLFm1VxMWHBvOFB/EVYF2sE5HZ0dPbe+yrax5p3eS0oLZthR8ynhz4UulMUQ==} engines: {node: '>=16'} cpu: [arm64] os: [darwin] - '@cloudflare/workerd-linux-64@1.20250507.0': - resolution: {integrity: sha512-/HAA+Zg/R7Q/Smyl835FUFKjotZN1UzN9j/BHBd0xKmKov97QkXAX8gsyGnyKqRReIOinp8x/8+UebTICR7VJw==} - engines: {node: '>=16'} - cpu: [x64] - os: [linux] - '@cloudflare/workerd-linux-64@1.20260219.0': resolution: {integrity: sha512-N0UHXILYYa6htFO/uC92uAqusvynbSbOcHcrVXMKqP9Jy7eqXGMovyKIrNgzYnKIszNB+0lfUYdGI3Wci07LuA==} engines: {node: '>=16'} cpu: [x64] os: [linux] - '@cloudflare/workerd-linux-arm64@1.20250507.0': - resolution: {integrity: sha512-NMPibSdOYeycU0IrKkgOESFJQy7dEpHvuatZxQxlT+mIQK0INzI3irp2kKxhF99s25kPC4p+xg9bU3ugTrs3VQ==} - engines: {node: '>=16'} - cpu: [arm64] - os: [linux] - '@cloudflare/workerd-linux-arm64@1.20260219.0': resolution: {integrity: sha512-835pjQ9uuAtwPBOAkPf+oxH3mNE5mqWuE3H7hJsul7WZsRD2FDcariyoT2AW6xyOePILrn4uMnmG1KGc9m/8Pg==} engines: {node: '>=16'} cpu: [arm64] os: [linux] - '@cloudflare/workerd-windows-64@1.20250507.0': - resolution: {integrity: sha512-c91fhNP8ufycdIDqjVyKTqeb4ewkbAYXFQbLreMVgh4LLQQPDDEte8wCdmaFy5bIL0M9d85PpdCq51RCzq/FaQ==} - engines: {node: '>=16'} - cpu: [x64] - os: [win32] - '@cloudflare/workerd-windows-64@1.20260219.0': resolution: {integrity: sha512-i7qcuOsuAxqqn1n5Ar3Rh1dHUL9vNmpF9FcdMTT84jIrdm5UNrPZz5grJthPmpB9LTcreT9iiP6qKbzGjnCwPA==} engines: {node: '>=16'} cpu: [x64] os: [win32] - '@cloudflare/workers-types@4.20250508.0': - resolution: {integrity: sha512-Gr7NLsHy5BFXbWVMMO+1mf/DwxT30tNw5LGhC86S+CXErM2a2eJ0HJHqgAs0Y8Lt/XEUSrH9QrUFDvJWNhE4Rg==} + '@cloudflare/workers-types@4.20260219.0': + resolution: {integrity: sha512-jL2BNnDqbKXDrxhtKx+wVmQpv/P6w8J4WVFiuT9OMEPsw8V2TfTozoWTcCZ2AhE09yK406xQFE4mBq9IIgobuw==} '@colors/colors@1.6.0': resolution: {integrity: sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==} @@ -1625,9 +1582,6 @@ packages: '@emnapi/core@1.8.1': resolution: {integrity: sha512-AvT9QFpxK0Zd8J0jopedNm+w/2fIzvtPKPjqyw9jwvBaReTTqPBk9Hixaz7KbjimP+QNz605/XnjFcDAL2pqBg==} - '@emnapi/runtime@1.5.0': - resolution: {integrity: sha512-97/BJ3iXHww3djw6hYIfErCZFee7qCtrneuLa20UXFCOTCfBM2cvQHjWJ2EG0s0MtdNwInarqCTz35i4wWXHsQ==} - '@emnapi/runtime@1.8.1': resolution: {integrity: sha512-mehfKSMWjjNol8659Z8KxEMrdSJDDot5SXMq00dM8BN4o+CLNXQ0xH2V7EchNHV4RmbZLmmPdEaXZc5H2FXmDg==} @@ -1644,12 +1598,6 @@ packages: cpu: [ppc64] os: [aix] - '@esbuild/aix-ppc64@0.25.4': - resolution: {integrity: sha512-1VCICWypeQKhVbE9oW/sJaAmjLxhVqacdkvPLEjwlttjfwENRSClS8EjBz0KzRyFSCPDIkuXW34Je/vk7zdB7Q==} - engines: {node: '>=18'} - cpu: [ppc64] - os: [aix] - '@esbuild/aix-ppc64@0.27.2': resolution: {integrity: sha512-GZMB+a0mOMZs4MpDbj8RJp4cw+w1WV5NYD6xzgvzUJ5Ek2jerwfO2eADyI6ExDSUED+1X8aMbegahsJi+8mgpw==} engines: {node: '>=18'} @@ -1668,12 +1616,6 @@ packages: cpu: [arm64] os: [android] - '@esbuild/android-arm64@0.25.4': - resolution: {integrity: sha512-bBy69pgfhMGtCnwpC/x5QhfxAz/cBgQ9enbtwjf6V9lnPI/hMyT9iWpR1arm0l3kttTr4L0KSLpKmLp/ilKS9A==} - engines: {node: '>=18'} - cpu: [arm64] - os: [android] - '@esbuild/android-arm64@0.27.2': resolution: {integrity: sha512-pvz8ZZ7ot/RBphf8fv60ljmaoydPU12VuXHImtAs0XhLLw+EXBi2BLe3OYSBslR4rryHvweW5gmkKFwTiFy6KA==} engines: {node: '>=18'} @@ -1692,12 +1634,6 @@ packages: cpu: [arm] os: [android] - '@esbuild/android-arm@0.25.4': - resolution: {integrity: sha512-QNdQEps7DfFwE3hXiU4BZeOV68HHzYwGd0Nthhd3uCkkEKK7/R6MTgM0P7H7FAs5pU/DIWsviMmEGxEoxIZ+ZQ==} - engines: {node: '>=18'} - cpu: [arm] - os: [android] - '@esbuild/android-arm@0.27.2': resolution: {integrity: sha512-DVNI8jlPa7Ujbr1yjU2PfUSRtAUZPG9I1RwW4F4xFB1Imiu2on0ADiI/c3td+KmDtVKNbi+nffGDQMfcIMkwIA==} engines: {node: '>=18'} @@ -1716,12 +1652,6 @@ packages: cpu: [x64] os: [android] - '@esbuild/android-x64@0.25.4': - resolution: {integrity: sha512-TVhdVtQIFuVpIIR282btcGC2oGQoSfZfmBdTip2anCaVYcqWlZXGcdcKIUklfX2wj0JklNYgz39OBqh2cqXvcQ==} - engines: {node: '>=18'} - cpu: [x64] - os: [android] - '@esbuild/android-x64@0.27.2': resolution: {integrity: sha512-z8Ank4Byh4TJJOh4wpz8g2vDy75zFL0TlZlkUkEwYXuPSgX8yzep596n6mT7905kA9uHZsf/o2OJZubl2l3M7A==} engines: {node: '>=18'} @@ -1740,12 +1670,6 @@ packages: cpu: [arm64] os: [darwin] - '@esbuild/darwin-arm64@0.25.4': - resolution: {integrity: sha512-Y1giCfM4nlHDWEfSckMzeWNdQS31BQGs9/rouw6Ub91tkK79aIMTH3q9xHvzH8d0wDru5Ci0kWB8b3up/nl16g==} - engines: {node: '>=18'} - cpu: [arm64] - os: [darwin] - '@esbuild/darwin-arm64@0.27.2': resolution: {integrity: sha512-davCD2Zc80nzDVRwXTcQP/28fiJbcOwvdolL0sOiOsbwBa72kegmVU0Wrh1MYrbuCL98Omp5dVhQFWRKR2ZAlg==} engines: {node: '>=18'} @@ -1764,12 +1688,6 @@ packages: cpu: [x64] os: [darwin] - '@esbuild/darwin-x64@0.25.4': - resolution: {integrity: sha512-CJsry8ZGM5VFVeyUYB3cdKpd/H69PYez4eJh1W/t38vzutdjEjtP7hB6eLKBoOdxcAlCtEYHzQ/PJ/oU9I4u0A==} - engines: {node: '>=18'} - cpu: [x64] - os: [darwin] - '@esbuild/darwin-x64@0.27.2': resolution: {integrity: sha512-ZxtijOmlQCBWGwbVmwOF/UCzuGIbUkqB1faQRf5akQmxRJ1ujusWsb3CVfk/9iZKr2L5SMU5wPBi1UWbvL+VQA==} engines: {node: '>=18'} @@ -1788,12 +1706,6 @@ packages: cpu: [arm64] os: [freebsd] - '@esbuild/freebsd-arm64@0.25.4': - resolution: {integrity: sha512-yYq+39NlTRzU2XmoPW4l5Ifpl9fqSk0nAJYM/V/WUGPEFfek1epLHJIkTQM6bBs1swApjO5nWgvr843g6TjxuQ==} - engines: {node: '>=18'} - cpu: [arm64] - os: [freebsd] - '@esbuild/freebsd-arm64@0.27.2': resolution: {integrity: sha512-lS/9CN+rgqQ9czogxlMcBMGd+l8Q3Nj1MFQwBZJyoEKI50XGxwuzznYdwcav6lpOGv5BqaZXqvBSiB/kJ5op+g==} engines: {node: '>=18'} @@ -1812,12 +1724,6 @@ packages: cpu: [x64] os: [freebsd] - '@esbuild/freebsd-x64@0.25.4': - resolution: {integrity: sha512-0FgvOJ6UUMflsHSPLzdfDnnBBVoCDtBTVyn/MrWloUNvq/5SFmh13l3dvgRPkDihRxb77Y17MbqbCAa2strMQQ==} - engines: {node: '>=18'} - cpu: [x64] - os: [freebsd] - '@esbuild/freebsd-x64@0.27.2': resolution: {integrity: sha512-tAfqtNYb4YgPnJlEFu4c212HYjQWSO/w/h/lQaBK7RbwGIkBOuNKQI9tqWzx7Wtp7bTPaGC6MJvWI608P3wXYA==} engines: {node: '>=18'} @@ -1836,12 +1742,6 @@ packages: cpu: [arm64] os: [linux] - '@esbuild/linux-arm64@0.25.4': - resolution: {integrity: sha512-+89UsQTfXdmjIvZS6nUnOOLoXnkUTB9hR5QAeLrQdzOSWZvNSAXAtcRDHWtqAUtAmv7ZM1WPOOeSxDzzzMogiQ==} - engines: {node: '>=18'} - cpu: [arm64] - os: [linux] - '@esbuild/linux-arm64@0.27.2': resolution: {integrity: sha512-hYxN8pr66NsCCiRFkHUAsxylNOcAQaxSSkHMMjcpx0si13t1LHFphxJZUiGwojB1a/Hd5OiPIqDdXONia6bhTw==} engines: {node: '>=18'} @@ -1860,12 +1760,6 @@ packages: cpu: [arm] os: [linux] - '@esbuild/linux-arm@0.25.4': - resolution: {integrity: sha512-kro4c0P85GMfFYqW4TWOpvmF8rFShbWGnrLqlzp4X1TNWjRY3JMYUfDCtOxPKOIY8B0WC8HN51hGP4I4hz4AaQ==} - engines: {node: '>=18'} - cpu: [arm] - os: [linux] - '@esbuild/linux-arm@0.27.2': resolution: {integrity: sha512-vWfq4GaIMP9AIe4yj1ZUW18RDhx6EPQKjwe7n8BbIecFtCQG4CfHGaHuh7fdfq+y3LIA2vGS/o9ZBGVxIDi9hw==} engines: {node: '>=18'} @@ -1884,12 +1778,6 @@ packages: cpu: [ia32] os: [linux] - '@esbuild/linux-ia32@0.25.4': - resolution: {integrity: sha512-yTEjoapy8UP3rv8dB0ip3AfMpRbyhSN3+hY8mo/i4QXFeDxmiYbEKp3ZRjBKcOP862Ua4b1PDfwlvbuwY7hIGQ==} - engines: {node: '>=18'} - cpu: [ia32] - os: [linux] - '@esbuild/linux-ia32@0.27.2': resolution: {integrity: sha512-MJt5BRRSScPDwG2hLelYhAAKh9imjHK5+NE/tvnRLbIqUWa+0E9N4WNMjmp/kXXPHZGqPLxggwVhz7QP8CTR8w==} engines: {node: '>=18'} @@ -1908,12 +1796,6 @@ packages: cpu: [loong64] os: [linux] - '@esbuild/linux-loong64@0.25.4': - resolution: {integrity: sha512-NeqqYkrcGzFwi6CGRGNMOjWGGSYOpqwCjS9fvaUlX5s3zwOtn1qwg1s2iE2svBe4Q/YOG1q6875lcAoQK/F4VA==} - engines: {node: '>=18'} - cpu: [loong64] - os: [linux] - '@esbuild/linux-loong64@0.27.2': resolution: {integrity: sha512-lugyF1atnAT463aO6KPshVCJK5NgRnU4yb3FUumyVz+cGvZbontBgzeGFO1nF+dPueHD367a2ZXe1NtUkAjOtg==} engines: {node: '>=18'} @@ -1932,12 +1814,6 @@ packages: cpu: [mips64el] os: [linux] - '@esbuild/linux-mips64el@0.25.4': - resolution: {integrity: sha512-IcvTlF9dtLrfL/M8WgNI/qJYBENP3ekgsHbYUIzEzq5XJzzVEV/fXY9WFPfEEXmu3ck2qJP8LG/p3Q8f7Zc2Xg==} - engines: {node: '>=18'} - cpu: [mips64el] - os: [linux] - '@esbuild/linux-mips64el@0.27.2': resolution: {integrity: sha512-nlP2I6ArEBewvJ2gjrrkESEZkB5mIoaTswuqNFRv/WYd+ATtUpe9Y09RnJvgvdag7he0OWgEZWhviS1OTOKixw==} engines: {node: '>=18'} @@ -1956,12 +1832,6 @@ packages: cpu: [ppc64] os: [linux] - '@esbuild/linux-ppc64@0.25.4': - resolution: {integrity: sha512-HOy0aLTJTVtoTeGZh4HSXaO6M95qu4k5lJcH4gxv56iaycfz1S8GO/5Jh6X4Y1YiI0h7cRyLi+HixMR+88swag==} - engines: {node: '>=18'} - cpu: [ppc64] - os: [linux] - '@esbuild/linux-ppc64@0.27.2': resolution: {integrity: sha512-C92gnpey7tUQONqg1n6dKVbx3vphKtTHJaNG2Ok9lGwbZil6DrfyecMsp9CrmXGQJmZ7iiVXvvZH6Ml5hL6XdQ==} engines: {node: '>=18'} @@ -1980,12 +1850,6 @@ packages: cpu: [riscv64] os: [linux] - '@esbuild/linux-riscv64@0.25.4': - resolution: {integrity: sha512-i8JUDAufpz9jOzo4yIShCTcXzS07vEgWzyX3NH2G7LEFVgrLEhjwL3ajFE4fZI3I4ZgiM7JH3GQ7ReObROvSUA==} - engines: {node: '>=18'} - cpu: [riscv64] - os: [linux] - '@esbuild/linux-riscv64@0.27.2': resolution: {integrity: sha512-B5BOmojNtUyN8AXlK0QJyvjEZkWwy/FKvakkTDCziX95AowLZKR6aCDhG7LeF7uMCXEJqwa8Bejz5LTPYm8AvA==} engines: {node: '>=18'} @@ -2004,12 +1868,6 @@ packages: cpu: [s390x] os: [linux] - '@esbuild/linux-s390x@0.25.4': - resolution: {integrity: sha512-jFnu+6UbLlzIjPQpWCNh5QtrcNfMLjgIavnwPQAfoGx4q17ocOU9MsQ2QVvFxwQoWpZT8DvTLooTvmOQXkO51g==} - engines: {node: '>=18'} - cpu: [s390x] - os: [linux] - '@esbuild/linux-s390x@0.27.2': resolution: {integrity: sha512-p4bm9+wsPwup5Z8f4EpfN63qNagQ47Ua2znaqGH6bqLlmJ4bx97Y9JdqxgGZ6Y8xVTixUnEkoKSHcpRlDnNr5w==} engines: {node: '>=18'} @@ -2028,12 +1886,6 @@ packages: cpu: [x64] os: [linux] - '@esbuild/linux-x64@0.25.4': - resolution: {integrity: sha512-6e0cvXwzOnVWJHq+mskP8DNSrKBr1bULBvnFLpc1KY+d+irZSgZ02TGse5FsafKS5jg2e4pbvK6TPXaF/A6+CA==} - engines: {node: '>=18'} - cpu: [x64] - os: [linux] - '@esbuild/linux-x64@0.27.2': resolution: {integrity: sha512-uwp2Tip5aPmH+NRUwTcfLb+W32WXjpFejTIOWZFw/v7/KnpCDKG66u4DLcurQpiYTiYwQ9B7KOeMJvLCu/OvbA==} engines: {node: '>=18'} @@ -2052,12 +1904,6 @@ packages: cpu: [arm64] os: [netbsd] - '@esbuild/netbsd-arm64@0.25.4': - resolution: {integrity: sha512-vUnkBYxZW4hL/ie91hSqaSNjulOnYXE1VSLusnvHg2u3jewJBz3YzB9+oCw8DABeVqZGg94t9tyZFoHma8gWZQ==} - engines: {node: '>=18'} - cpu: [arm64] - os: [netbsd] - '@esbuild/netbsd-arm64@0.27.2': resolution: {integrity: sha512-Kj6DiBlwXrPsCRDeRvGAUb/LNrBASrfqAIok+xB0LxK8CHqxZ037viF13ugfsIpePH93mX7xfJp97cyDuTZ3cw==} engines: {node: '>=18'} @@ -2076,12 +1922,6 @@ packages: cpu: [x64] os: [netbsd] - '@esbuild/netbsd-x64@0.25.4': - resolution: {integrity: sha512-XAg8pIQn5CzhOB8odIcAm42QsOfa98SBeKUdo4xa8OvX8LbMZqEtgeWE9P/Wxt7MlG2QqvjGths+nq48TrUiKw==} - engines: {node: '>=18'} - cpu: [x64] - os: [netbsd] - '@esbuild/netbsd-x64@0.27.2': resolution: {integrity: sha512-HwGDZ0VLVBY3Y+Nw0JexZy9o/nUAWq9MlV7cahpaXKW6TOzfVno3y3/M8Ga8u8Yr7GldLOov27xiCnqRZf0tCA==} engines: {node: '>=18'} @@ -2100,12 +1940,6 @@ packages: cpu: [arm64] os: [openbsd] - '@esbuild/openbsd-arm64@0.25.4': - resolution: {integrity: sha512-Ct2WcFEANlFDtp1nVAXSNBPDxyU+j7+tId//iHXU2f/lN5AmO4zLyhDcpR5Cz1r08mVxzt3Jpyt4PmXQ1O6+7A==} - engines: {node: '>=18'} - cpu: [arm64] - os: [openbsd] - '@esbuild/openbsd-arm64@0.27.2': resolution: {integrity: sha512-DNIHH2BPQ5551A7oSHD0CKbwIA/Ox7+78/AWkbS5QoRzaqlev2uFayfSxq68EkonB+IKjiuxBFoV8ESJy8bOHA==} engines: {node: '>=18'} @@ -2124,12 +1958,6 @@ packages: cpu: [x64] os: [openbsd] - '@esbuild/openbsd-x64@0.25.4': - resolution: {integrity: sha512-xAGGhyOQ9Otm1Xu8NT1ifGLnA6M3sJxZ6ixylb+vIUVzvvd6GOALpwQrYrtlPouMqd/vSbgehz6HaVk4+7Afhw==} - engines: {node: '>=18'} - cpu: [x64] - os: [openbsd] - '@esbuild/openbsd-x64@0.27.2': resolution: {integrity: sha512-/it7w9Nb7+0KFIzjalNJVR5bOzA9Vay+yIPLVHfIQYG/j+j9VTH84aNB8ExGKPU4AzfaEvN9/V4HV+F+vo8OEg==} engines: {node: '>=18'} @@ -2166,12 +1994,6 @@ packages: cpu: [x64] os: [sunos] - '@esbuild/sunos-x64@0.25.4': - resolution: {integrity: sha512-Mw+tzy4pp6wZEK0+Lwr76pWLjrtjmJyUB23tHKqEDP74R3q95luY/bXqXZeYl4NYlvwOqoRKlInQialgCKy67Q==} - engines: {node: '>=18'} - cpu: [x64] - os: [sunos] - '@esbuild/sunos-x64@0.27.2': resolution: {integrity: sha512-kMtx1yqJHTmqaqHPAzKCAkDaKsffmXkPHThSfRwZGyuqyIeBvf08KSsYXl+abf5HDAPMJIPnbBfXvP2ZC2TfHg==} engines: {node: '>=18'} @@ -2190,12 +2012,6 @@ packages: cpu: [arm64] os: [win32] - '@esbuild/win32-arm64@0.25.4': - resolution: {integrity: sha512-AVUP428VQTSddguz9dO9ngb+E5aScyg7nOeJDrF1HPYu555gmza3bDGMPhmVXL8svDSoqPCsCPjb265yG/kLKQ==} - engines: {node: '>=18'} - cpu: [arm64] - os: [win32] - '@esbuild/win32-arm64@0.27.2': resolution: {integrity: sha512-Yaf78O/B3Kkh+nKABUF++bvJv5Ijoy9AN1ww904rOXZFLWVc5OLOfL56W+C8F9xn5JQZa3UX6m+IktJnIb1Jjg==} engines: {node: '>=18'} @@ -2214,12 +2030,6 @@ packages: cpu: [ia32] os: [win32] - '@esbuild/win32-ia32@0.25.4': - resolution: {integrity: sha512-i1sW+1i+oWvQzSgfRcxxG2k4I9n3O9NRqy8U+uugaT2Dy7kLO9Y7wI72haOahxceMX8hZAzgGou1FhndRldxRg==} - engines: {node: '>=18'} - cpu: [ia32] - os: [win32] - '@esbuild/win32-ia32@0.27.2': resolution: {integrity: sha512-Iuws0kxo4yusk7sw70Xa2E2imZU5HoixzxfGCdxwBdhiDgt9vX9VUCBhqcwY7/uh//78A1hMkkROMJq9l27oLQ==} engines: {node: '>=18'} @@ -2238,12 +2048,6 @@ packages: cpu: [x64] os: [win32] - '@esbuild/win32-x64@0.25.4': - resolution: {integrity: sha512-nOT2vZNw6hJ+z43oP1SPea/G/6AbN6X+bGNhNuq8NtRHy4wsMhw765IKLNmnjek7GvjWBYQ8Q5VBoYTFg9y1UQ==} - engines: {node: '>=18'} - cpu: [x64] - os: [win32] - '@esbuild/win32-x64@0.27.2': resolution: {integrity: sha512-sRdU18mcKf7F+YgheI/zGf5alZatMUTKj/jNS6l744f9u3WFu4v7twcUI9vu4mknF4Y9aDlblIie0IM+5xxaqQ==} engines: {node: '>=18'} @@ -2297,10 +2101,6 @@ packages: '@fastify/accept-negotiator@2.0.1': resolution: {integrity: sha512-/c/TW2bO/v9JeEgoD/g1G5GxGeCF1Hafdf79WPmUlgYiBXummY0oX3VVq4yFkKKVBKDNlaDUYoab7g38RpPqCQ==} - '@fastify/busboy@2.1.1': - resolution: {integrity: sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==} - engines: {node: '>=14'} - '@fastify/busboy@3.1.1': resolution: {integrity: sha512-5DGmA8FTdB2XbDeEwc/5ZXBl6UbBAyBOOLlPuBnZ/N1SwdH9Ii+cOX3tBROlDgcTXxjOYnLMVoKk9+FXAw0CJw==} @@ -2347,114 +2147,40 @@ packages: resolution: {integrity: sha512-A5P/LfWGFSl6nsckYtjw9da+19jB8hkJ6ACTGcDfEJ0aE+l2n2El7dsVM7UVHZQ9s2lmYMWlrS21YLy2IR1LUw==} engines: {node: '>=18'} - '@img/sharp-darwin-arm64@0.33.5': - resolution: {integrity: sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [arm64] - os: [darwin] - - '@img/sharp-darwin-arm64@0.34.4': - resolution: {integrity: sha512-sitdlPzDVyvmINUdJle3TNHl+AG9QcwiAMsXmccqsCOMZNIdW2/7S26w0LyU8euiLVzFBL3dXPwVCq/ODnf2vA==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [arm64] - os: [darwin] - '@img/sharp-darwin-arm64@0.34.5': resolution: {integrity: sha512-imtQ3WMJXbMY4fxb/Ndp6HBTNVtWCUI0WdobyheGf5+ad6xX8VIDO8u2xE4qc/fr08CKG/7dDseFtn6M6g/r3w==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [darwin] - '@img/sharp-darwin-x64@0.33.5': - resolution: {integrity: sha512-fyHac4jIc1ANYGRDxtiqelIbdWkIuQaI84Mv45KvGRRxSAa7o7d1ZKAOBaYbnepLC1WqxfpimdeWfvqqSGwR2Q==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [x64] - os: [darwin] - - '@img/sharp-darwin-x64@0.34.4': - resolution: {integrity: sha512-rZheupWIoa3+SOdF/IcUe1ah4ZDpKBGWcsPX6MT0lYniH9micvIU7HQkYTfrx5Xi8u+YqwLtxC/3vl8TQN6rMg==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [x64] - os: [darwin] - '@img/sharp-darwin-x64@0.34.5': resolution: {integrity: sha512-YNEFAF/4KQ/PeW0N+r+aVVsoIY0/qxxikF2SWdp+NRkmMB7y9LBZAVqQ4yhGCm/H3H270OSykqmQMKLBhBJDEw==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [darwin] - '@img/sharp-libvips-darwin-arm64@1.0.4': - resolution: {integrity: sha512-XblONe153h0O2zuFfTAbQYAX2JhYmDHeWikp1LM9Hul9gVPjFY427k6dFEcOL72O01QxQsWi761svJ/ev9xEDg==} - cpu: [arm64] - os: [darwin] - - '@img/sharp-libvips-darwin-arm64@1.2.3': - resolution: {integrity: sha512-QzWAKo7kpHxbuHqUC28DZ9pIKpSi2ts2OJnoIGI26+HMgq92ZZ4vk8iJd4XsxN+tYfNJxzH6W62X5eTcsBymHw==} - cpu: [arm64] - os: [darwin] - '@img/sharp-libvips-darwin-arm64@1.2.4': resolution: {integrity: sha512-zqjjo7RatFfFoP0MkQ51jfuFZBnVE2pRiaydKJ1G/rHZvnsrHAOcQALIi9sA5co5xenQdTugCvtb1cuf78Vf4g==} cpu: [arm64] os: [darwin] - '@img/sharp-libvips-darwin-x64@1.0.4': - resolution: {integrity: sha512-xnGR8YuZYfJGmWPvmlunFaWJsb9T/AO2ykoP3Fz/0X5XV2aoYBPkX6xqCQvUTKKiLddarLaxpzNe+b1hjeWHAQ==} - cpu: [x64] - os: [darwin] - - '@img/sharp-libvips-darwin-x64@1.2.3': - resolution: {integrity: sha512-Ju+g2xn1E2AKO6YBhxjj+ACcsPQRHT0bhpglxcEf+3uyPY+/gL8veniKoo96335ZaPo03bdDXMv0t+BBFAbmRA==} - cpu: [x64] - os: [darwin] - '@img/sharp-libvips-darwin-x64@1.2.4': resolution: {integrity: sha512-1IOd5xfVhlGwX+zXv2N93k0yMONvUlANylbJw1eTah8K/Jtpi15KC+WSiaX/nBmbm2HxRM1gZ0nSdjSsrZbGKg==} cpu: [x64] os: [darwin] - '@img/sharp-libvips-linux-arm64@1.0.4': - resolution: {integrity: sha512-9B+taZ8DlyyqzZQnoeIvDVR/2F4EbMepXMc/NdVbkzsJbzkUjhXv/70GQJ7tdLA4YJgNP25zukcxpX2/SueNrA==} - cpu: [arm64] - os: [linux] - libc: [glibc] - - '@img/sharp-libvips-linux-arm64@1.2.3': - resolution: {integrity: sha512-I4RxkXU90cpufazhGPyVujYwfIm9Nk1QDEmiIsaPwdnm013F7RIceaCc87kAH+oUB1ezqEvC6ga4m7MSlqsJvQ==} - cpu: [arm64] - os: [linux] - libc: [glibc] - '@img/sharp-libvips-linux-arm64@1.2.4': resolution: {integrity: sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==} cpu: [arm64] os: [linux] libc: [glibc] - '@img/sharp-libvips-linux-arm@1.0.5': - resolution: {integrity: sha512-gvcC4ACAOPRNATg/ov8/MnbxFDJqf/pDePbBnuBDcjsI8PssmjoKMAz4LtLaVi+OnSb5FK/yIOamqDwGmXW32g==} - cpu: [arm] - os: [linux] - libc: [glibc] - - '@img/sharp-libvips-linux-arm@1.2.3': - resolution: {integrity: sha512-x1uE93lyP6wEwGvgAIV0gP6zmaL/a0tGzJs/BIDDG0zeBhMnuUPm7ptxGhUbcGs4okDJrk4nxgrmxpib9g6HpA==} - cpu: [arm] - os: [linux] - libc: [glibc] - '@img/sharp-libvips-linux-arm@1.2.4': resolution: {integrity: sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==} cpu: [arm] os: [linux] libc: [glibc] - '@img/sharp-libvips-linux-ppc64@1.2.3': - resolution: {integrity: sha512-Y2T7IsQvJLMCBM+pmPbM3bKT/yYJvVtLJGfCs4Sp95SjvnFIjynbjzsa7dY1fRJX45FTSfDksbTp6AGWudiyCg==} - cpu: [ppc64] - os: [linux] - libc: [glibc] - '@img/sharp-libvips-linux-ppc64@1.2.4': resolution: {integrity: sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==} cpu: [ppc64] @@ -2467,92 +2193,30 @@ packages: os: [linux] libc: [glibc] - '@img/sharp-libvips-linux-s390x@1.0.4': - resolution: {integrity: sha512-u7Wz6ntiSSgGSGcjZ55im6uvTrOxSIS8/dgoVMoiGE9I6JAfU50yH5BoDlYA1tcuGS7g/QNtetJnxA6QEsCVTA==} - cpu: [s390x] - os: [linux] - libc: [glibc] - - '@img/sharp-libvips-linux-s390x@1.2.3': - resolution: {integrity: sha512-RgWrs/gVU7f+K7P+KeHFaBAJlNkD1nIZuVXdQv6S+fNA6syCcoboNjsV2Pou7zNlVdNQoQUpQTk8SWDHUA3y/w==} - cpu: [s390x] - os: [linux] - libc: [glibc] - '@img/sharp-libvips-linux-s390x@1.2.4': resolution: {integrity: sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==} cpu: [s390x] os: [linux] libc: [glibc] - '@img/sharp-libvips-linux-x64@1.0.4': - resolution: {integrity: sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw==} - cpu: [x64] - os: [linux] - libc: [glibc] - - '@img/sharp-libvips-linux-x64@1.2.3': - resolution: {integrity: sha512-3JU7LmR85K6bBiRzSUc/Ff9JBVIFVvq6bomKE0e63UXGeRw2HPVEjoJke1Yx+iU4rL7/7kUjES4dZ/81Qjhyxg==} - cpu: [x64] - os: [linux] - libc: [glibc] - '@img/sharp-libvips-linux-x64@1.2.4': resolution: {integrity: sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==} cpu: [x64] os: [linux] libc: [glibc] - '@img/sharp-libvips-linuxmusl-arm64@1.0.4': - resolution: {integrity: sha512-9Ti+BbTYDcsbp4wfYib8Ctm1ilkugkA/uscUn6UXK1ldpC1JjiXbLfFZtRlBhjPZ5o1NCLiDbg8fhUPKStHoTA==} - cpu: [arm64] - os: [linux] - libc: [musl] - - '@img/sharp-libvips-linuxmusl-arm64@1.2.3': - resolution: {integrity: sha512-F9q83RZ8yaCwENw1GieztSfj5msz7GGykG/BA+MOUefvER69K/ubgFHNeSyUu64amHIYKGDs4sRCMzXVj8sEyw==} - cpu: [arm64] - os: [linux] - libc: [musl] - '@img/sharp-libvips-linuxmusl-arm64@1.2.4': resolution: {integrity: sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==} cpu: [arm64] os: [linux] libc: [musl] - '@img/sharp-libvips-linuxmusl-x64@1.0.4': - resolution: {integrity: sha512-viYN1KX9m+/hGkJtvYYp+CCLgnJXwiQB39damAO7WMdKWlIhmYTfHjwSbQeUK/20vY154mwezd9HflVFM1wVSw==} - cpu: [x64] - os: [linux] - libc: [musl] - - '@img/sharp-libvips-linuxmusl-x64@1.2.3': - resolution: {integrity: sha512-U5PUY5jbc45ANM6tSJpsgqmBF/VsL6LnxJmIf11kB7J5DctHgqm0SkuXzVWtIY90GnJxKnC/JT251TDnk1fu/g==} - cpu: [x64] - os: [linux] - libc: [musl] - '@img/sharp-libvips-linuxmusl-x64@1.2.4': resolution: {integrity: sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==} cpu: [x64] os: [linux] libc: [musl] - '@img/sharp-linux-arm64@0.33.5': - resolution: {integrity: sha512-JMVv+AMRyGOHtO1RFBiJy/MBsgz0x4AWrT6QoEVVTyh1E39TrCUpTRI7mx9VksGX4awWASxqCYLCV4wBZHAYxA==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [arm64] - os: [linux] - libc: [glibc] - - '@img/sharp-linux-arm64@0.34.4': - resolution: {integrity: sha512-YXU1F/mN/Wu786tl72CyJjP/Ngl8mGHN1hST4BGl+hiW5jhCnV2uRVTNOcaYPs73NeT/H8Upm3y9582JVuZHrQ==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [arm64] - os: [linux] - libc: [glibc] - '@img/sharp-linux-arm64@0.34.5': resolution: {integrity: sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} @@ -2560,20 +2224,6 @@ packages: os: [linux] libc: [glibc] - '@img/sharp-linux-arm@0.33.5': - resolution: {integrity: sha512-JTS1eldqZbJxjvKaAkxhZmBqPRGmxgu+qFKSInv8moZ2AmT5Yib3EQ1c6gp493HvrvV8QgdOXdyaIBrhvFhBMQ==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [arm] - os: [linux] - libc: [glibc] - - '@img/sharp-linux-arm@0.34.4': - resolution: {integrity: sha512-Xyam4mlqM0KkTHYVSuc6wXRmM7LGN0P12li03jAnZ3EJWZqj83+hi8Y9UxZUbxsgsK1qOEwg7O0Bc0LjqQVtxA==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [arm] - os: [linux] - libc: [glibc] - '@img/sharp-linux-arm@0.34.5': resolution: {integrity: sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} @@ -2581,13 +2231,6 @@ packages: os: [linux] libc: [glibc] - '@img/sharp-linux-ppc64@0.34.4': - resolution: {integrity: sha512-F4PDtF4Cy8L8hXA2p3TO6s4aDt93v+LKmpcYFLAVdkkD3hSxZzee0rh6/+94FpAynsuMpLX5h+LRsSG3rIciUQ==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [ppc64] - os: [linux] - libc: [glibc] - '@img/sharp-linux-ppc64@0.34.5': resolution: {integrity: sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} @@ -2602,20 +2245,6 @@ packages: os: [linux] libc: [glibc] - '@img/sharp-linux-s390x@0.33.5': - resolution: {integrity: sha512-y/5PCd+mP4CA/sPDKl2961b+C9d+vPAveS33s6Z3zfASk2j5upL6fXVPZi7ztePZ5CuH+1kW8JtvxgbuXHRa4Q==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [s390x] - os: [linux] - libc: [glibc] - - '@img/sharp-linux-s390x@0.34.4': - resolution: {integrity: sha512-qVrZKE9Bsnzy+myf7lFKvng6bQzhNUAYcVORq2P7bDlvmF6u2sCmK2KyEQEBdYk+u3T01pVsPrkj943T1aJAsw==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [s390x] - os: [linux] - libc: [glibc] - '@img/sharp-linux-s390x@0.34.5': resolution: {integrity: sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} @@ -2623,20 +2252,6 @@ packages: os: [linux] libc: [glibc] - '@img/sharp-linux-x64@0.33.5': - resolution: {integrity: sha512-opC+Ok5pRNAzuvq1AG0ar+1owsu842/Ab+4qvU879ippJBHvyY5n2mxF1izXqkPYlGuP/M556uh53jRLJmzTWA==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [x64] - os: [linux] - libc: [glibc] - - '@img/sharp-linux-x64@0.34.4': - resolution: {integrity: sha512-ZfGtcp2xS51iG79c6Vhw9CWqQC8l2Ot8dygxoDoIQPTat/Ov3qAa8qpxSrtAEAJW+UjTXc4yxCjNfxm4h6Xm2A==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [x64] - os: [linux] - libc: [glibc] - '@img/sharp-linux-x64@0.34.5': resolution: {integrity: sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} @@ -2644,20 +2259,6 @@ packages: os: [linux] libc: [glibc] - '@img/sharp-linuxmusl-arm64@0.33.5': - resolution: {integrity: sha512-XrHMZwGQGvJg2V/oRSUfSAfjfPxO+4DkiRh6p2AFjLQztWUuY/o8Mq0eMQVIY7HJ1CDQUJlxGGZRw1a5bqmd1g==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [arm64] - os: [linux] - libc: [musl] - - '@img/sharp-linuxmusl-arm64@0.34.4': - resolution: {integrity: sha512-8hDVvW9eu4yHWnjaOOR8kHVrew1iIX+MUgwxSuH2XyYeNRtLUe4VNioSqbNkB7ZYQJj9rUTT4PyRscyk2PXFKA==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [arm64] - os: [linux] - libc: [musl] - '@img/sharp-linuxmusl-arm64@0.34.5': resolution: {integrity: sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} @@ -2665,20 +2266,6 @@ packages: os: [linux] libc: [musl] - '@img/sharp-linuxmusl-x64@0.33.5': - resolution: {integrity: sha512-WT+d/cgqKkkKySYmqoZ8y3pxx7lx9vVejxW/W4DOFMYVSkErR+w7mf2u8m/y4+xHe7yY9DAXQMWQhpnMuFfScw==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [x64] - os: [linux] - libc: [musl] - - '@img/sharp-linuxmusl-x64@0.34.4': - resolution: {integrity: sha512-lU0aA5L8QTlfKjpDCEFOZsTYGn3AEiO6db8W5aQDxj0nQkVrZWmN3ZP9sYKWJdtq3PWPhUNlqehWyXpYDcI9Sg==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [x64] - os: [linux] - libc: [musl] - '@img/sharp-linuxmusl-x64@0.34.5': resolution: {integrity: sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} @@ -2686,63 +2273,23 @@ packages: os: [linux] libc: [musl] - '@img/sharp-wasm32@0.33.5': - resolution: {integrity: sha512-ykUW4LVGaMcU9lu9thv85CbRMAwfeadCJHRsg2GmeRa/cJxsVY9Rbd57JcMxBkKHag5U/x7TSBpScF4U8ElVzg==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [wasm32] - - '@img/sharp-wasm32@0.34.4': - resolution: {integrity: sha512-33QL6ZO/qpRyG7woB/HUALz28WnTMI2W1jgX3Nu2bypqLIKx/QKMILLJzJjI+SIbvXdG9fUnmrxR7vbi1sTBeA==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [wasm32] - '@img/sharp-wasm32@0.34.5': resolution: {integrity: sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [wasm32] - '@img/sharp-win32-arm64@0.34.4': - resolution: {integrity: sha512-2Q250do/5WXTwxW3zjsEuMSv5sUU4Tq9VThWKlU2EYLm4MB7ZeMwF+SFJutldYODXF6jzc6YEOC+VfX0SZQPqA==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [arm64] - os: [win32] - '@img/sharp-win32-arm64@0.34.5': resolution: {integrity: sha512-WQ3AgWCWYSb2yt+IG8mnC6Jdk9Whs7O0gxphblsLvdhSpSTtmu69ZG1Gkb6NuvxsNACwiPV6cNSZNzt0KPsw7g==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [win32] - '@img/sharp-win32-ia32@0.33.5': - resolution: {integrity: sha512-T36PblLaTwuVJ/zw/LaH0PdZkRz5rd3SmMHX8GSmR7vtNSP5Z6bQkExdSK7xGWyxLw4sUknBuugTelgw2faBbQ==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [ia32] - os: [win32] - - '@img/sharp-win32-ia32@0.34.4': - resolution: {integrity: sha512-3ZeLue5V82dT92CNL6rsal6I2weKw1cYu+rGKm8fOCCtJTR2gYeUfY3FqUnIJsMUPIH68oS5jmZ0NiJ508YpEw==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [ia32] - os: [win32] - '@img/sharp-win32-ia32@0.34.5': resolution: {integrity: sha512-FV9m/7NmeCmSHDD5j4+4pNI8Cp3aW+JvLoXcTUo0IqyjSfAZJ8dIUmijx1qaJsIiU+Hosw6xM5KijAWRJCSgNg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [ia32] os: [win32] - '@img/sharp-win32-x64@0.33.5': - resolution: {integrity: sha512-MpY/o8/8kj+EcnxwvrP4aTJSWw/aZ7JIGR4aBeZkZw5B7/Jn+tY9/VNwtcoGmdT7GfggGIU4kygOMSbYnOrAbg==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [x64] - os: [win32] - - '@img/sharp-win32-x64@0.34.4': - resolution: {integrity: sha512-xIyj4wpYs8J18sVN3mSQjwrw7fKUqRw+Z5rnHNCy5fYTxigBz81u5mOMPmFumwjcn8+ld1ppptMBCLic1nz6ig==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [x64] - os: [win32] - '@img/sharp-win32-x64@0.34.5': resolution: {integrity: sha512-+29YMsqY2/9eFEiW93eqWnuLcWcufowXewwSNIT6UwZdUUCrM3oFjMWH/Z6/TMmb4hlFenmfAVbpWeup2jryCw==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} @@ -2821,29 +2368,27 @@ packages: '@napi-rs/wasm-runtime@1.1.1': resolution: {integrity: sha512-p64ah1M1ld8xjWv3qbvFwHiFVWrq1yFvV4f7w+mzaqiR4IlSgkqhcRdHwsGgomwzBH51sRY4NEowLxnaBjcW/A==} - '@netlify/ai@0.3.5': - resolution: {integrity: sha512-7suwHOBy9s14yeWRxt+w3Zh6Rrx8gX7zP/xmsxqxLyJlcBykWm6siBJs2mMtJgbWvcrgI5BEgNLh5qfXlTCsRQ==} + '@netlify/ai@0.3.8': + resolution: {integrity: sha512-qz8XDb/82UzsUMKn+sB84V3ZGqeNQOvGwNo840nHIV9saJwLPTd+FOqSUoKUIxZphNA7kQ0uGeadSUkJzDz7og==} engines: {node: '>=20.6.1'} - peerDependencies: - '@netlify/api': '>=14.0.12' - '@netlify/api@14.0.12': - resolution: {integrity: sha512-4xSfHAj9PIZZ78YOPby6TBHxYnf6sOE1/jpkHSDyt2oRxF94qJ0fhp96Fo2kq/rIhvgTlU5Ce3HARi8BDY4mLw==} + '@netlify/api@14.0.14': + resolution: {integrity: sha512-/YwcFbI0RsKXof+e+f48pVqmELzkGWOrhqZuL5xCUNdHYhvUd9El0jQDv7fBjdhxHSrflnZfXFUW56xaI69k4A==} engines: {node: '>=18.14.0'} '@netlify/binary-info@1.0.0': resolution: {integrity: sha512-4wMPu9iN3/HL97QblBsBay3E1etIciR84izI3U+4iALY+JHCrI+a2jO0qbAZ/nxKoegypYEaiiqWXylm+/zfrw==} - '@netlify/blobs@10.5.0': - resolution: {integrity: sha512-yrdt6H1X56DYz7pS3exU/iHO+iOW5sVzseaQwRQQ9OYChB/pVjXQzkBKAjS9dHIecSpv0oynkLxd/mwSJfAJLQ==} + '@netlify/blobs@10.7.0': + resolution: {integrity: sha512-wuiaKRbRLG/L049yR+7/p7xSKa4jx6JRBnweRYwP6mMYn9D+x/wccPgsxEMtKqthmow6frs7ZSrNYTt9U3yUdQ==} engines: {node: ^14.16.0 || >=16.0.0} - '@netlify/cache@3.3.4': - resolution: {integrity: sha512-Fl4/KxP8NS7+skjfRixgekuqBNvLPay/J6qC2mxvHjkkZNu1oUs8QOc+T3Nvt4n+UMrltnt9ggg0q/q4hmBIVw==} + '@netlify/cache@3.3.5': + resolution: {integrity: sha512-u4wx2se/wRvLsU/sQlT5ruofEwMjo5kg6ybEdQLuIswH6+6+9BCFF8VX4ByBP3MZJl3/pxExmcPiFqo0TBP3tg==} engines: {node: '>=20.6.1'} - '@netlify/config@24.2.0': - resolution: {integrity: sha512-idc1D6kdQOFjG70aZC06crqElTyaSulVlnOEDZX2+5/vcmfFCBu8CJSEd5YzC6VCCXBgOW3Hw0cVxDTl5X6+CQ==} + '@netlify/config@24.4.0': + resolution: {integrity: sha512-Dg5JQQjGb2biCvxu6Ryv+KUrgVP2iTrxSVb2pYLiUgKXqx12FeUX4/gFhERNYh1ncK1mJdN1SB3+gP5WxUAFEA==} engines: {node: '>=18.14.0'} hasBin: true @@ -2851,27 +2396,32 @@ packages: resolution: {integrity: sha512-qziF8R9kf7mRNgSpmUH96O0aV1ZiwK4c9ZecFQbDSQuYhgy9GY1WTjiQF0oQnohjTjWNtXhrU39LAeXWNLaBJg==} engines: {node: ^18.14.0 || >=20} - '@netlify/dev@4.8.8': - resolution: {integrity: sha512-tvucXIB5t0R6nSC+L/W9xPX1uV4588pwfCcSqPstkQhS8tHg6cYrnzjUTvxfUL3lPUm1zVFGDz39ExK9tqiL1Q==} + '@netlify/dev@4.11.2': + resolution: {integrity: sha512-quIKbuG7xD3yiWExuZA1Xl/b3Wc+/V3QjrNT4XX5m+dA/D54J61dABf1IGwQYNZHKiF5rVL7D3AwHNAojVQzuw==} engines: {node: '>=20.6.1'} + peerDependencies: + '@netlify/db-dev': 0.2.0 + peerDependenciesMeta: + '@netlify/db-dev': + optional: true - '@netlify/edge-bundler@14.9.3': - resolution: {integrity: sha512-NaIIsjGfl6YcnZKRa5/BOpbBi4MK1B4U1E/ekH8VaAIy0I7aYwnWg45SZSkTrMOeHzZPGXTAwjyKqzPi8HBQ4A==} + '@netlify/edge-bundler@14.9.10': + resolution: {integrity: sha512-Ja5FQuerrDzgiEKwpCF2zHCNDz3pTfMOTE6qyicZc9EmLkKcT9d8M/Pjvv9v7XbqZidN1474EBv2IE8Yuf8d5Q==} engines: {node: '>=18.14.0'} '@netlify/edge-functions-bootstrap@2.16.0': resolution: {integrity: sha512-v8QQihSbBHj3JxtJsHoepXALpNumD9M7egHoc8z62FYl5it34dWczkaJoFFopEyhiBVKi4K/n0ZYpdzwfujd6g==} - '@netlify/edge-functions-dev@1.0.8': - resolution: {integrity: sha512-SvOWcPqKjDjhOKKpp5VFCgONKgRPNM3YsssVG3s2xi5OvNGSw+1KPAlzGplM+MqOfv+3oIs7N+6pULk0MtaimA==} + '@netlify/edge-functions-dev@1.0.11': + resolution: {integrity: sha512-ASybM6fkopOKHorwI1TwsbBlF+eZQCMmlddWtSpyWDunKc4P7i/FEkzdTinNQvcLX7RIGOwjrxanTMEOen/Zvg==} engines: {node: '>=20.6.1'} '@netlify/edge-functions@3.0.3': resolution: {integrity: sha512-grElRK+rTBdYrPsULPKrhcHhrW+fwpDRLPbGByqa6Xrz0fhzcFJ2D9ijxEQ/onFcSVPYHT1u1mI48GhS5bZ/Ag==} engines: {node: '>=18.0.0'} - '@netlify/functions-dev@1.1.8': - resolution: {integrity: sha512-zl5IWvs5B4ck1w8KcV6NUsdkVF1BmW2deF5FwZj14jy5yiF6Errska+lSr9S5tZZ0vJUSs75is7vauP2AxewDA==} + '@netlify/functions-dev@1.1.12': + resolution: {integrity: sha512-rWFCthzhKiuM62yPd2upDY9+y/Ww5ahEKA8+E8WS8dgQKg+5/G/Yka6zfPNpkkFM3/oNi0R7LffWn2DMxrTMPQ==} engines: {node: '>=20.6.1'} '@netlify/functions@5.1.2': @@ -2894,8 +2444,8 @@ packages: resolution: {integrity: sha512-OAs1xG+FfLX0LoRASpqzVntVV/RpYkgpI0VrUnw2u0Q1qiZUzcPffxRK8HF3gc4GjuhG5ahOEMJ9bswBiZPq0g==} engines: {node: ^14.16.0 || >=16.0.0} - '@netlify/open-api@2.46.0': - resolution: {integrity: sha512-ONTAnExC2fX4luhAQ91DD3ORbh+YFMmzk9ebrheVg+W4cTHmNnGxLbiYbmd44IqnLQjgqn4xrmmDULEMZcMdfw==} + '@netlify/open-api@2.49.1': + resolution: {integrity: sha512-4jFX59dqSBJIlFK/qXrEmWsMDHBErS9cFSFweWmPFKRNCuIVlkeibQrRQcVtqKfek3al1UuXscVVIZEYM05LMA==} engines: {node: '>=14.8.0'} '@netlify/otel@5.1.1': @@ -2906,20 +2456,20 @@ packages: resolution: {integrity: sha512-/HB3fcRRNgf6O/pbLn4EYNDHrU2kiadMMnazg8/OjvQK2S9i4y61vQcrICvDxYKUKQdgeEaABUuaCNAJFnfD9w==} engines: {node: '>=18.14.0'} - '@netlify/redirects@3.1.4': - resolution: {integrity: sha512-2FcF/0Q24JA+VmpWlVRp835UvhBHQe3XGVaxAQfHiDd5aXztaz2U5Y4VEZyrZJOubY5xnxr2yqumDfClAiCKxw==} + '@netlify/redirects@3.1.5': + resolution: {integrity: sha512-yU4YBqRYoqPobg/u96QI07IuevAc8+tVLAcnty6/vBJAlo5d7E72r+U6dez48EPGIJHY5hEQK4jT0m9SmKg8mg==} engines: {node: '>=20.6.1'} - '@netlify/runtime-utils@2.2.1': - resolution: {integrity: sha512-dyJeuggzQM8+Dsi0T8Z9UjfLJ6vCmNC36W6WE2aqzfTdTw4wPkh2xlEu4LoD75+TGuYK7jIhEoU2QcCXOzfyAQ==} + '@netlify/runtime-utils@2.3.0': + resolution: {integrity: sha512-cW8weDvsKV7zfia2m5EcBy6KILGoPD+eYZ3qWNGnIo05DGF28goPES0xKSDkNYgAF/2rRSIhie2qcBhbGVgSRg==} engines: {node: ^18.14.0 || >=20} - '@netlify/runtime@4.1.13': - resolution: {integrity: sha512-pnexwAHckodyApbNaHiEzNyVlw+zx33wIwUSAopkq7qU8YYUQbDWIMi5gpGE6FsIvv/CCR8uxMgeIPOBLuVk5Q==} + '@netlify/runtime@4.1.15': + resolution: {integrity: sha512-drX5NYNnqAMKnYsStRT8Q1ruNqd68QdMGdakdMtMb/aTaAtPCIug66BPP98YSWvgv9r7O5eO4NX/Ma7UkMVwvQ==} engines: {node: '>=20.6.1'} - '@netlify/serverless-functions-api@2.8.3': - resolution: {integrity: sha512-RJGKH85YeUFVvRgHz3ArNPiTwIx9w8Da9fDPqS3G40tI+keaNG3UdTVMm8HQvIAB4RS6N8Gu4oVPiU2Lqb4IIg==} + '@netlify/serverless-functions-api@2.9.0': + resolution: {integrity: sha512-D1y8y0orn/n0cdLp16pP6oJ4f+4Gc52pf+FMXNKhlJ97bLRKNce3NgSr3mbgxHUtuNd27f8Mgc4D3scJlnC4uQ==} engines: {node: '>=18.0.0'} '@netlify/static@3.1.3': @@ -2930,8 +2480,8 @@ packages: resolution: {integrity: sha512-5gxMWh/S7wr0uHKSTbMv4bjWmWSpwpeLYvErWeVNAPll5/QNFo9aWimMAUuh8ReLY3/fg92XAroVVu7+z27Snw==} engines: {node: ^18.14.0 || >=20} - '@netlify/zip-it-and-ship-it@14.2.0': - resolution: {integrity: sha512-yM69tB71nhvl7L7orfq5fGEonmSVzi2G12/BAV8O+El7ISpkkjFz+8S8qZVxsEK3IbW4EFO+3L8l6jHJHZtxeQ==} + '@netlify/zip-it-and-ship-it@14.4.0': + resolution: {integrity: sha512-Mi0Kg71CAMH9YsErbCqBWFfKyTim67wT7nmmPLYxFM672Mzu4KNArXmDMWAqmR6Fes2t0uXnnHBVNUfDM1ajqw==} engines: {node: '>=18.14.0'} hasBin: true @@ -3602,6 +3152,11 @@ packages: peerDependencies: acorn: ^8.9.0 + '@sveltejs/acorn-typescript@1.0.9': + resolution: {integrity: sha512-lVJX6qEgs/4DOcRTpo56tmKzVPtoWAaVbL4hfO7t7NVwl9AAXzQR6cihesW1BmNMPl+bK6dreu2sOKBP2Q9CIA==} + peerDependencies: + acorn: ^8.9.0 + '@sveltejs/eslint-config@8.2.0': resolution: {integrity: sha512-5ab8AXjLoY+H0dsYTGB+9L8AnOvOzd9NZkECj40VAk6Uh9u7+5d8jVk+YYW6NGsEQ+HwHBUi19yij+q+5Pm+aQ==} peerDependencies: @@ -3894,19 +3449,10 @@ packages: peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - acorn-walk@8.3.2: - resolution: {integrity: sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==} - engines: {node: '>=0.4.0'} - acorn-walk@8.3.4: resolution: {integrity: sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==} engines: {node: '>=0.4.0'} - acorn@8.14.0: - resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==} - engines: {node: '>=0.4.0'} - hasBin: true - acorn@8.15.0: resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==} engines: {node: '>=0.4.0'} @@ -3980,9 +3526,6 @@ packages: resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} engines: {node: '>=8'} - as-table@1.0.55: - resolution: {integrity: sha512-xvsWESUJn0JN421Xb9MQw6AsMHRCUknCe0Wjlxvjud80mU4E6hQf1A6NzQKcYNmYw62MfzEtXc+badstZP3JpQ==} - ast-module-types@6.0.1: resolution: {integrity: sha512-WHw67kLXYbZuHTmcdbIrVArCq5wxo6NEuj3hiYAWr8mwJeC+C2mMCIBIWCiDoCye/OF/xelc+teJ1ERoWmnEIA==} engines: {node: '>=18'} @@ -4132,10 +3675,6 @@ packages: color@3.2.1: resolution: {integrity: sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==} - color@4.2.3: - resolution: {integrity: sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==} - engines: {node: '>=12.5.0'} - colorspace@1.1.4: resolution: {integrity: sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w==} @@ -4181,10 +3720,6 @@ packages: cookie-es@1.2.2: resolution: {integrity: sha512-+W7VmiVINB+ywl1HGXJXmrqkOhpKrIiVZV6tQuV54ZyQC7MMuBt81Vc336GMLoHBq5hV/F9eXgt5Mnx0Rha5Fg==} - cookie@0.7.2: - resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==} - engines: {node: '>= 0.6'} - cookie@1.1.1: resolution: {integrity: sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==} engines: {node: '>=18'} @@ -4246,9 +3781,6 @@ packages: resolution: {integrity: sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==} engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'} - data-uri-to-buffer@2.0.2: - resolution: {integrity: sha512-ND9qDTLc6diwj+Xe5cdAgVTbLVdXbtxTJRXRhli8Mowuaan+0EJOtdqJ0QCHNSSPyoXGx9HX2/VMnKeC34AChA==} - data-uri-to-buffer@4.0.1: resolution: {integrity: sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==} engines: {node: '>= 12'} @@ -4436,11 +3968,6 @@ packages: engines: {node: '>=18'} hasBin: true - esbuild@0.25.4: - resolution: {integrity: sha512-8pgjLUcUjcgDg+2Q4NYXnPbo/vncAY4UmyaCm0jZevERqCHZIaWwdJHkf8XQtu4AxSKCdvrUbT0XUr1IdZzI8Q==} - engines: {node: '>=18'} - hasBin: true - esbuild@0.27.2: resolution: {integrity: sha512-HyNQImnsOC7X9PMNaCIeAm4ISCQXs5a5YasTXVliKv4uuBo1dKrG0A+uQS8M5eXjVMnLg3WgXaKvprHlFJQffw==} engines: {node: '>=18'} @@ -4577,17 +4104,10 @@ packages: resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} engines: {node: '>=16.17'} - exit-hook@2.2.1: - resolution: {integrity: sha512-eNTPlAD67BmP31LDINZ3U7HSF8l57TxOY2PmBJ1shpCvpnxBF93mWCE8YHBnXs8qiUZJc9WDcWIeC3a2HIAMfw==} - engines: {node: '>=6'} - expect-type@1.3.0: resolution: {integrity: sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==} engines: {node: '>=12.0.0'} - exsolve@1.0.4: - resolution: {integrity: sha512-xsZH6PXaER4XoV+NiT7JHp1bJodJVT+cxeSH1G0f0tlT0lJqYuHUP3bUx2HtfTDvOagMINYp8rsqusxud3RXhw==} - extendable-error@0.1.7: resolution: {integrity: sha512-UOiS2in6/Q0FK0R0q6UY9vYpQ21mr/Qn1KOnte7vsACuNJf514WvCCUHSRCPcgjPT2bAhNIJdlE6bVap1GKmeg==} @@ -4733,9 +4253,6 @@ packages: resolution: {integrity: sha512-QB9NKEeDg3xxVwCCwJQ9+xycaz6pBB6iQ76wiWMl1927n0Kir6alPiP+yuiICLLU4jpMe08dXfpebuQppFA2zw==} engines: {node: '>=16'} - get-source@2.0.12: - resolution: {integrity: sha512-X5+4+iD+HoSeEED+uwrQ07BOQr0kEDFMVqqpBuI+RaZBpBpHCuXxo70bjar6f0b0u/DQJsJ7ssurpP0V60Az+w==} - get-stream@5.2.0: resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} engines: {node: '>=8'} @@ -4755,9 +4272,6 @@ packages: resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} engines: {node: '>=10.13.0'} - glob-to-regexp@0.4.1: - resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} - glob@10.5.0: resolution: {integrity: sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==} deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me @@ -5029,19 +4543,19 @@ packages: resolution: {integrity: sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==} engines: {node: '>=0.10.0'} - jsonwebtoken@9.0.2: - resolution: {integrity: sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==} + jsonwebtoken@9.0.3: + resolution: {integrity: sha512-MT/xP0CrubFRNLNKvxJ2BYfy53Zkm++5bX9dtuPbqAeQpTVe0MQTFhao8+Cp//EmJp244xt6Drw/GVEGCUj40g==} engines: {node: '>=12', npm: '>=6'} junk@4.0.1: resolution: {integrity: sha512-Qush0uP+G8ZScpGMZvHUiRfI0YBWuB3gVBYlI0v0vvOJt5FLicco+IkP0a50LqTTQhmts/m6tP5SWE+USyIvcQ==} engines: {node: '>=12.20'} - jwa@1.4.2: - resolution: {integrity: sha512-eeH5JO+21J78qMvTIDdBXidBd6nG2kZjg5Ohz/1fpa28Z4CcsWUzJ1ZZyFq/3z3N17aZy+ZuBoHljASbL1WfOw==} + jwa@2.0.1: + resolution: {integrity: sha512-hRF04fqJIP8Abbkq5NKGN0Bbr3JxlQ+qhZufXVr0DvujKy93ZCbXZMHDL4EOtodSbCWxOqR8MS1tXA5hwqCXDg==} - jws@3.2.3: - resolution: {integrity: sha512-byiJ0FLRdLdSVSReO/U4E7RoEyOCKnEnEPMjq3HxWtvzLsV08/i5RQKsFVNkCldrCaPr2vDNAOMsfs8T/Hze7g==} + jws@4.0.1: + resolution: {integrity: sha512-EKI/M/yqPncGUUh44xz0PxSidXFr/+r0pA70+gIYhjv+et7yxM+s29Y+VGDkovRofQem0fs7Uvf4+YmAdyRduA==} jwt-decode@4.0.0: resolution: {integrity: sha512-+KJGIyHgkGuIq3IEBNftfhW/LfWhXUIY6OmyVWjliu5KH1y0fw7VQ8YndE2O4qZdMSd9SqbnC8GOcZEy0Om7sA==} @@ -5265,11 +4779,6 @@ packages: resolution: {integrity: sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==} engines: {node: '>=18'} - mime@3.0.0: - resolution: {integrity: sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==} - engines: {node: '>=10.0.0'} - hasBin: true - mimic-fn@4.0.0: resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} engines: {node: '>=12'} @@ -5278,11 +4787,6 @@ packages: resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} engines: {node: '>=4'} - miniflare@4.20250507.0: - resolution: {integrity: sha512-EgbQRt/Hnr8HCmW2J/4LRNE3yOzJTdNd98XJ8gnGXFKcimXxUFPiWP3k1df+ZPCtEHp6cXxi8+jP7v9vuIbIsg==} - engines: {node: '>=18.0.0'} - hasBin: true - miniflare@4.20260219.0: resolution: {integrity: sha512-EIb5wXbWUnnC60XU2aiFOPNd4fgTXzECkwRSOXZ1vdcY9WZaEE9rVf+h+Apw+WkOHRkp3Dr9/ZhQ5y1R+9iZ4Q==} engines: {node: '>=18.0.0'} @@ -5336,10 +4840,6 @@ packages: ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - mustache@4.2.0: - resolution: {integrity: sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==} - hasBin: true - nanoid@3.3.11: resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} @@ -5427,9 +4927,6 @@ packages: ofetch@1.4.1: resolution: {integrity: sha512-QZj2DfGplQAr2oj9KzceK9Hwz6Whxazmn85yYeVuS3u9XTMOGMRx0kO95MQ+vLsj/S/NwBDMMLU5hpxvI6Tklw==} - ohash@2.0.11: - resolution: {integrity: sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==} - omit.js@2.0.2: resolution: {integrity: sha512-hJmu9D+bNB40YpL9jYebQl4lsTW6yEHRTroJzNLqQJYHm7c+NQnJGfZmIWh8S3q3KoaxV1aLhV6B3+0N0/kyJg==} @@ -5684,9 +5181,6 @@ packages: engines: {node: '>=14'} hasBin: true - printable-characters@1.0.42: - resolution: {integrity: sha512-dKp+C4iXWK4vVYZmYSd0KBH5F/h1HoZRsbJ82AVKRO3PEo8L4lBS/vLwhVtpwwuYcoIsVY+1JYKR268yn480uQ==} - process-nextick-args@2.0.1: resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} @@ -5864,14 +5358,6 @@ packages: set-cookie-parser@3.0.1: resolution: {integrity: sha512-n7Z7dXZhJbwuAHhNzkTti6Aw9QDDjZtm3JTpTGATIdNzdQz5GuFs22w90BcvF4INfnrL5xrX3oGsuqO5Dx3A1Q==} - sharp@0.33.5: - resolution: {integrity: sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - - sharp@0.34.4: - resolution: {integrity: sha512-FUH39xp3SBPnxWvd5iib1X8XY7J0K0X7d93sie9CJg2PO8/7gmg89Nve6OjItK53/MlAushNNxteBYfM6DEuoA==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - sharp@0.34.5: resolution: {integrity: sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} @@ -5945,16 +5431,9 @@ packages: stackback@0.0.2: resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} - stacktracey@2.1.8: - resolution: {integrity: sha512-Kpij9riA+UNg7TnphqjH7/CzctQ/owJGNbFkfEeve4Z4uxT5+JapVLFXcsurIfN34gnTWZNJ/f7NMG0E8JDzTw==} - std-env@3.10.0: resolution: {integrity: sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==} - stoppable@1.1.0: - resolution: {integrity: sha512-KXDYZ9dszj6bzvnEMRYvxgeTHU74QBFL54XKtP3nyMuJ81CFYtABZ3bAzL2EdFUaEwJOBOgENyFj3R7oTzDyyw==} - engines: {node: '>=4', npm: '>=6'} - streamx@2.22.1: resolution: {integrity: sha512-znKXEBxfatz2GBNK02kRnCXjV+AA4kjZIUxeWSr3UGirZMJfTE9uiwKHobnbgxWyL/JWro8tTq+vOqAK1/qbSA==} @@ -6096,6 +5575,7 @@ packages: tar@7.5.7: resolution: {integrity: sha512-fov56fJiRuThVFXD6o6/Q354S7pnWMJIVlDBYijsTNx6jKSE4pvrDTs6lUnmGvNyfJwFQQwWy3owKz1ucIhveQ==} engines: {node: '>=18'} + deprecated: Old versions of tar are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me term-size@2.2.1: resolution: {integrity: sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==} @@ -6225,17 +5705,10 @@ packages: undici-types@7.16.0: resolution: {integrity: sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==} - undici@5.29.0: - resolution: {integrity: sha512-raqeBD6NQK4SkWhQzeYKd1KmIG6dllBOTt55Rmkt4HtI9mwdWtJljnrXjAFUBLTSN67HWrOIZ3EPF4kjUw80Bg==} - engines: {node: '>=14.0'} - undici@7.18.2: resolution: {integrity: sha512-y+8YjDFzWdQlSE9N5nzKMT3g4a5UBX1HKowfdXh0uvAnTaqqwqB92Jt4UXBAeKekDs5IaDKyJFR4X1gYVCgXcw==} engines: {node: '>=20.18.1'} - unenv@2.0.0-rc.15: - resolution: {integrity: sha512-J/rEIZU8w6FOfLNz/hNKsnY+fFHWnu9MH4yRbSZF3xbbGHovcetXPs7sD+9p8L6CeNC//I9bhRYAOsBt2u7/OA==} - unenv@2.0.0-rc.24: resolution: {integrity: sha512-i7qRCmY42zmCwnYlh9H2SvLEypEFGye5iRmEMKjcGi7zk9UquigRjFtTLz0TYqr0ZGLZhaMHl/foy1bZR+Cwlw==} @@ -6469,11 +5942,6 @@ packages: resolution: {integrity: sha512-DLiFIXYC5fMPxaRg832S6F5mJYvePtmO5G9v9IgUFPhXm9/GkXarH/TUrBAVzhTCzAj9anE/+GjrgXp/54nOgw==} engines: {node: '>= 12.0.0'} - workerd@1.20250507.0: - resolution: {integrity: sha512-OXaGjEh5THT9iblwWIyPrYBoaPe/d4zN03Go7/w8CmS8sma7//O9hjbk43sboWkc89taGPmU0/LNyZUUiUlHeQ==} - engines: {node: '>=16'} - hasBin: true - workerd@1.20260219.0: resolution: {integrity: sha512-l4U4iT5H8jNV6+EK23ExnUV2z6JvqQtQPrT8XCm4G8RpwC9EPpYTOO9s/ImMPJKe1WSbQUQoJ4k8Nd83fz8skQ==} engines: {node: '>=16'} @@ -6483,16 +5951,6 @@ packages: resolution: {integrity: sha512-+TvsA6VAVoMC3XDKR5MoC/qlLqDixEfOBysDEKnPIPou/NvoPWCAuXHXMsswwlvmEuvX56lQjvELLyLuzTKvRw==} engines: {node: '>=12'} - wrangler@4.14.4: - resolution: {integrity: sha512-HIdOdiMIcJV5ymw80RKsr3Uzen/p1kRX4jnCEmR2XVeoEhV2Qw6GABxS5WMTlSES2/vEX0Y+ezUAdsprcUhJ5g==} - engines: {node: '>=18.0.0'} - hasBin: true - peerDependencies: - '@cloudflare/workers-types': ^4.20250507.0 - peerDependenciesMeta: - '@cloudflare/workers-types': - optional: true - wrangler@4.67.0: resolution: {integrity: sha512-58OoVth7bqm0nqsRgcI67gHbpp0IfR1JIBqDY0XR1FzRu9Qkjn6v2iJAdFf82QcVBFhaMBYQi88WqYGswq5wlQ==} engines: {node: '>=20.0.0'} @@ -6590,9 +6048,6 @@ packages: youch-core@0.3.3: resolution: {integrity: sha512-ho7XuGjLaJ2hWHoK8yFnsUGy2Y5uDpqSTq1FkHLK4/oqKtyUU1AFbOOxY4IpC9f0fTLjwYbslUz0Po5BpD1wrA==} - youch@3.3.4: - resolution: {integrity: sha512-UeVBXie8cA35DS6+nBkls68xaBBXCye0CNznrhszZjTbRVnJKQuNsyLKBTTL4ln1o1rh2PKtv35twV7irj5SEg==} - youch@4.1.0-beta.10: resolution: {integrity: sha512-rLfVLB4FgQneDr0dv1oddCVZmKjcJ6yX6mS4pU82Mq/Dt9a3cLZQ62pDBL4AUO+uVrCvtWz3ZFUL2HFAFJ/BXQ==} @@ -6603,9 +6058,6 @@ packages: resolution: {integrity: sha512-zK7YHHz4ZXpW89AHXUPbQVGKI7uvkd3hzusTdotCg1UxyaVtg0zFJSTfW/Dq5f7OBBVnq6cZIaC8Ti4hb6dtCA==} engines: {node: '>= 14'} - zod@3.22.3: - resolution: {integrity: sha512-EjIevzuJRiRPbVH4mGc8nApb/lVLKVpmUhAaR5R5doKGfAnGJ6Gr3CViAVjP+4FWSxCsybeWQdcgCtbX+7oZug==} - zod@3.25.76: resolution: {integrity: sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==} @@ -6790,10 +6242,6 @@ snapshots: human-id: 4.1.1 prettier: 2.8.8 - '@cloudflare/kv-asset-handler@0.4.0': - dependencies: - mime: 3.0.0 - '@cloudflare/kv-asset-handler@0.4.2': {} '@cloudflare/unenv-preset@2.14.0(unenv@2.0.0-rc.24)(workerd@1.20260219.0)': @@ -6802,43 +6250,22 @@ snapshots: optionalDependencies: workerd: 1.20260219.0 - '@cloudflare/unenv-preset@2.3.1(unenv@2.0.0-rc.15)(workerd@1.20250507.0)': - dependencies: - unenv: 2.0.0-rc.15 - optionalDependencies: - workerd: 1.20250507.0 - - '@cloudflare/workerd-darwin-64@1.20250507.0': - optional: true - '@cloudflare/workerd-darwin-64@1.20260219.0': optional: true - '@cloudflare/workerd-darwin-arm64@1.20250507.0': - optional: true - '@cloudflare/workerd-darwin-arm64@1.20260219.0': optional: true - '@cloudflare/workerd-linux-64@1.20250507.0': - optional: true - '@cloudflare/workerd-linux-64@1.20260219.0': optional: true - '@cloudflare/workerd-linux-arm64@1.20250507.0': - optional: true - '@cloudflare/workerd-linux-arm64@1.20260219.0': optional: true - '@cloudflare/workerd-windows-64@1.20250507.0': - optional: true - '@cloudflare/workerd-windows-64@1.20260219.0': optional: true - '@cloudflare/workers-types@4.20250508.0': {} + '@cloudflare/workers-types@4.20260219.0': {} '@colors/colors@1.6.0': {} @@ -6863,11 +6290,6 @@ snapshots: tslib: 2.8.1 optional: true - '@emnapi/runtime@1.5.0': - dependencies: - tslib: 2.8.1 - optional: true - '@emnapi/runtime@1.8.1': dependencies: tslib: 2.8.1 @@ -6886,9 +6308,6 @@ snapshots: '@esbuild/aix-ppc64@0.25.12': optional: true - '@esbuild/aix-ppc64@0.25.4': - optional: true - '@esbuild/aix-ppc64@0.27.2': optional: true @@ -6898,9 +6317,6 @@ snapshots: '@esbuild/android-arm64@0.25.12': optional: true - '@esbuild/android-arm64@0.25.4': - optional: true - '@esbuild/android-arm64@0.27.2': optional: true @@ -6910,9 +6326,6 @@ snapshots: '@esbuild/android-arm@0.25.12': optional: true - '@esbuild/android-arm@0.25.4': - optional: true - '@esbuild/android-arm@0.27.2': optional: true @@ -6922,9 +6335,6 @@ snapshots: '@esbuild/android-x64@0.25.12': optional: true - '@esbuild/android-x64@0.25.4': - optional: true - '@esbuild/android-x64@0.27.2': optional: true @@ -6934,9 +6344,6 @@ snapshots: '@esbuild/darwin-arm64@0.25.12': optional: true - '@esbuild/darwin-arm64@0.25.4': - optional: true - '@esbuild/darwin-arm64@0.27.2': optional: true @@ -6946,9 +6353,6 @@ snapshots: '@esbuild/darwin-x64@0.25.12': optional: true - '@esbuild/darwin-x64@0.25.4': - optional: true - '@esbuild/darwin-x64@0.27.2': optional: true @@ -6958,9 +6362,6 @@ snapshots: '@esbuild/freebsd-arm64@0.25.12': optional: true - '@esbuild/freebsd-arm64@0.25.4': - optional: true - '@esbuild/freebsd-arm64@0.27.2': optional: true @@ -6970,9 +6371,6 @@ snapshots: '@esbuild/freebsd-x64@0.25.12': optional: true - '@esbuild/freebsd-x64@0.25.4': - optional: true - '@esbuild/freebsd-x64@0.27.2': optional: true @@ -6982,9 +6380,6 @@ snapshots: '@esbuild/linux-arm64@0.25.12': optional: true - '@esbuild/linux-arm64@0.25.4': - optional: true - '@esbuild/linux-arm64@0.27.2': optional: true @@ -6994,9 +6389,6 @@ snapshots: '@esbuild/linux-arm@0.25.12': optional: true - '@esbuild/linux-arm@0.25.4': - optional: true - '@esbuild/linux-arm@0.27.2': optional: true @@ -7006,9 +6398,6 @@ snapshots: '@esbuild/linux-ia32@0.25.12': optional: true - '@esbuild/linux-ia32@0.25.4': - optional: true - '@esbuild/linux-ia32@0.27.2': optional: true @@ -7018,9 +6407,6 @@ snapshots: '@esbuild/linux-loong64@0.25.12': optional: true - '@esbuild/linux-loong64@0.25.4': - optional: true - '@esbuild/linux-loong64@0.27.2': optional: true @@ -7030,9 +6416,6 @@ snapshots: '@esbuild/linux-mips64el@0.25.12': optional: true - '@esbuild/linux-mips64el@0.25.4': - optional: true - '@esbuild/linux-mips64el@0.27.2': optional: true @@ -7042,9 +6425,6 @@ snapshots: '@esbuild/linux-ppc64@0.25.12': optional: true - '@esbuild/linux-ppc64@0.25.4': - optional: true - '@esbuild/linux-ppc64@0.27.2': optional: true @@ -7054,9 +6434,6 @@ snapshots: '@esbuild/linux-riscv64@0.25.12': optional: true - '@esbuild/linux-riscv64@0.25.4': - optional: true - '@esbuild/linux-riscv64@0.27.2': optional: true @@ -7066,9 +6443,6 @@ snapshots: '@esbuild/linux-s390x@0.25.12': optional: true - '@esbuild/linux-s390x@0.25.4': - optional: true - '@esbuild/linux-s390x@0.27.2': optional: true @@ -7078,9 +6452,6 @@ snapshots: '@esbuild/linux-x64@0.25.12': optional: true - '@esbuild/linux-x64@0.25.4': - optional: true - '@esbuild/linux-x64@0.27.2': optional: true @@ -7090,9 +6461,6 @@ snapshots: '@esbuild/netbsd-arm64@0.25.12': optional: true - '@esbuild/netbsd-arm64@0.25.4': - optional: true - '@esbuild/netbsd-arm64@0.27.2': optional: true @@ -7102,9 +6470,6 @@ snapshots: '@esbuild/netbsd-x64@0.25.12': optional: true - '@esbuild/netbsd-x64@0.25.4': - optional: true - '@esbuild/netbsd-x64@0.27.2': optional: true @@ -7114,9 +6479,6 @@ snapshots: '@esbuild/openbsd-arm64@0.25.12': optional: true - '@esbuild/openbsd-arm64@0.25.4': - optional: true - '@esbuild/openbsd-arm64@0.27.2': optional: true @@ -7126,9 +6488,6 @@ snapshots: '@esbuild/openbsd-x64@0.25.12': optional: true - '@esbuild/openbsd-x64@0.25.4': - optional: true - '@esbuild/openbsd-x64@0.27.2': optional: true @@ -7147,9 +6506,6 @@ snapshots: '@esbuild/sunos-x64@0.25.12': optional: true - '@esbuild/sunos-x64@0.25.4': - optional: true - '@esbuild/sunos-x64@0.27.2': optional: true @@ -7159,9 +6515,6 @@ snapshots: '@esbuild/win32-arm64@0.25.12': optional: true - '@esbuild/win32-arm64@0.25.4': - optional: true - '@esbuild/win32-arm64@0.27.2': optional: true @@ -7171,9 +6524,6 @@ snapshots: '@esbuild/win32-ia32@0.25.12': optional: true - '@esbuild/win32-ia32@0.25.4': - optional: true - '@esbuild/win32-ia32@0.27.2': optional: true @@ -7183,9 +6533,6 @@ snapshots: '@esbuild/win32-x64@0.25.12': optional: true - '@esbuild/win32-x64@0.25.4': - optional: true - '@esbuild/win32-x64@0.27.2': optional: true @@ -7238,8 +6585,6 @@ snapshots: '@fastify/accept-negotiator@2.0.1': {} - '@fastify/busboy@2.1.1': {} - '@fastify/busboy@3.1.1': {} '@fontsource/libre-barcode-128-text@5.1.0': {} @@ -7275,152 +6620,56 @@ snapshots: '@img/colour@1.0.0': {} - '@img/sharp-darwin-arm64@0.33.5': - optionalDependencies: - '@img/sharp-libvips-darwin-arm64': 1.0.4 - optional: true - - '@img/sharp-darwin-arm64@0.34.4': - optionalDependencies: - '@img/sharp-libvips-darwin-arm64': 1.2.3 - optional: true - '@img/sharp-darwin-arm64@0.34.5': optionalDependencies: '@img/sharp-libvips-darwin-arm64': 1.2.4 optional: true - '@img/sharp-darwin-x64@0.33.5': - optionalDependencies: - '@img/sharp-libvips-darwin-x64': 1.0.4 - optional: true - - '@img/sharp-darwin-x64@0.34.4': - optionalDependencies: - '@img/sharp-libvips-darwin-x64': 1.2.3 - optional: true - '@img/sharp-darwin-x64@0.34.5': optionalDependencies: '@img/sharp-libvips-darwin-x64': 1.2.4 optional: true - '@img/sharp-libvips-darwin-arm64@1.0.4': - optional: true - - '@img/sharp-libvips-darwin-arm64@1.2.3': - optional: true - '@img/sharp-libvips-darwin-arm64@1.2.4': optional: true - '@img/sharp-libvips-darwin-x64@1.0.4': - optional: true - - '@img/sharp-libvips-darwin-x64@1.2.3': - optional: true - '@img/sharp-libvips-darwin-x64@1.2.4': optional: true - '@img/sharp-libvips-linux-arm64@1.0.4': - optional: true - - '@img/sharp-libvips-linux-arm64@1.2.3': - optional: true - '@img/sharp-libvips-linux-arm64@1.2.4': optional: true - '@img/sharp-libvips-linux-arm@1.0.5': - optional: true - - '@img/sharp-libvips-linux-arm@1.2.3': - optional: true - '@img/sharp-libvips-linux-arm@1.2.4': optional: true - '@img/sharp-libvips-linux-ppc64@1.2.3': - optional: true - '@img/sharp-libvips-linux-ppc64@1.2.4': optional: true '@img/sharp-libvips-linux-riscv64@1.2.4': optional: true - '@img/sharp-libvips-linux-s390x@1.0.4': - optional: true - - '@img/sharp-libvips-linux-s390x@1.2.3': - optional: true - '@img/sharp-libvips-linux-s390x@1.2.4': optional: true - '@img/sharp-libvips-linux-x64@1.0.4': - optional: true - - '@img/sharp-libvips-linux-x64@1.2.3': - optional: true - '@img/sharp-libvips-linux-x64@1.2.4': optional: true - '@img/sharp-libvips-linuxmusl-arm64@1.0.4': - optional: true - - '@img/sharp-libvips-linuxmusl-arm64@1.2.3': - optional: true - '@img/sharp-libvips-linuxmusl-arm64@1.2.4': optional: true - '@img/sharp-libvips-linuxmusl-x64@1.0.4': - optional: true - - '@img/sharp-libvips-linuxmusl-x64@1.2.3': - optional: true - '@img/sharp-libvips-linuxmusl-x64@1.2.4': optional: true - '@img/sharp-linux-arm64@0.33.5': - optionalDependencies: - '@img/sharp-libvips-linux-arm64': 1.0.4 - optional: true - - '@img/sharp-linux-arm64@0.34.4': - optionalDependencies: - '@img/sharp-libvips-linux-arm64': 1.2.3 - optional: true - '@img/sharp-linux-arm64@0.34.5': optionalDependencies: '@img/sharp-libvips-linux-arm64': 1.2.4 optional: true - '@img/sharp-linux-arm@0.33.5': - optionalDependencies: - '@img/sharp-libvips-linux-arm': 1.0.5 - optional: true - - '@img/sharp-linux-arm@0.34.4': - optionalDependencies: - '@img/sharp-libvips-linux-arm': 1.2.3 - optional: true - '@img/sharp-linux-arm@0.34.5': optionalDependencies: '@img/sharp-libvips-linux-arm': 1.2.4 optional: true - '@img/sharp-linux-ppc64@0.34.4': - optionalDependencies: - '@img/sharp-libvips-linux-ppc64': 1.2.3 - optional: true - '@img/sharp-linux-ppc64@0.34.5': optionalDependencies: '@img/sharp-libvips-linux-ppc64': 1.2.4 @@ -7431,102 +6680,37 @@ snapshots: '@img/sharp-libvips-linux-riscv64': 1.2.4 optional: true - '@img/sharp-linux-s390x@0.33.5': - optionalDependencies: - '@img/sharp-libvips-linux-s390x': 1.0.4 - optional: true - - '@img/sharp-linux-s390x@0.34.4': - optionalDependencies: - '@img/sharp-libvips-linux-s390x': 1.2.3 - optional: true - '@img/sharp-linux-s390x@0.34.5': optionalDependencies: '@img/sharp-libvips-linux-s390x': 1.2.4 optional: true - '@img/sharp-linux-x64@0.33.5': - optionalDependencies: - '@img/sharp-libvips-linux-x64': 1.0.4 - optional: true - - '@img/sharp-linux-x64@0.34.4': - optionalDependencies: - '@img/sharp-libvips-linux-x64': 1.2.3 - optional: true - '@img/sharp-linux-x64@0.34.5': optionalDependencies: '@img/sharp-libvips-linux-x64': 1.2.4 optional: true - '@img/sharp-linuxmusl-arm64@0.33.5': - optionalDependencies: - '@img/sharp-libvips-linuxmusl-arm64': 1.0.4 - optional: true - - '@img/sharp-linuxmusl-arm64@0.34.4': - optionalDependencies: - '@img/sharp-libvips-linuxmusl-arm64': 1.2.3 - optional: true - '@img/sharp-linuxmusl-arm64@0.34.5': optionalDependencies: '@img/sharp-libvips-linuxmusl-arm64': 1.2.4 optional: true - '@img/sharp-linuxmusl-x64@0.33.5': - optionalDependencies: - '@img/sharp-libvips-linuxmusl-x64': 1.0.4 - optional: true - - '@img/sharp-linuxmusl-x64@0.34.4': - optionalDependencies: - '@img/sharp-libvips-linuxmusl-x64': 1.2.3 - optional: true - '@img/sharp-linuxmusl-x64@0.34.5': optionalDependencies: '@img/sharp-libvips-linuxmusl-x64': 1.2.4 optional: true - '@img/sharp-wasm32@0.33.5': - dependencies: - '@emnapi/runtime': 1.5.0 - optional: true - - '@img/sharp-wasm32@0.34.4': - dependencies: - '@emnapi/runtime': 1.5.0 - optional: true - '@img/sharp-wasm32@0.34.5': dependencies: '@emnapi/runtime': 1.8.1 optional: true - '@img/sharp-win32-arm64@0.34.4': - optional: true - '@img/sharp-win32-arm64@0.34.5': optional: true - '@img/sharp-win32-ia32@0.33.5': - optional: true - - '@img/sharp-win32-ia32@0.34.4': - optional: true - '@img/sharp-win32-ia32@0.34.5': optional: true - '@img/sharp-win32-x64@0.33.5': - optional: true - - '@img/sharp-win32-x64@0.34.4': - optional: true - '@img/sharp-win32-x64@0.34.5': optional: true @@ -7628,35 +6812,35 @@ snapshots: '@tybys/wasm-util': 0.10.1 optional: true - '@netlify/ai@0.3.5(@netlify/api@14.0.12)': + '@netlify/ai@0.3.8': dependencies: - '@netlify/api': 14.0.12 + '@netlify/api': 14.0.14 - '@netlify/api@14.0.12': + '@netlify/api@14.0.14': dependencies: - '@netlify/open-api': 2.46.0 + '@netlify/open-api': 2.49.1 node-fetch: 3.3.2 p-wait-for: 5.0.2 picoquery: 2.5.0 '@netlify/binary-info@1.0.0': {} - '@netlify/blobs@10.5.0': + '@netlify/blobs@10.7.0': dependencies: '@netlify/dev-utils': 4.3.3 '@netlify/otel': 5.1.1 - '@netlify/runtime-utils': 2.2.1 + '@netlify/runtime-utils': 2.3.0 transitivePeerDependencies: - supports-color - '@netlify/cache@3.3.4': + '@netlify/cache@3.3.5': dependencies: - '@netlify/runtime-utils': 2.2.1 + '@netlify/runtime-utils': 2.3.0 - '@netlify/config@24.2.0': + '@netlify/config@24.4.0': dependencies: '@iarna/toml': 2.2.5 - '@netlify/api': 14.0.12 + '@netlify/api': 14.0.14 '@netlify/headers-parser': 9.0.2 '@netlify/redirect-parser': 15.0.3 chalk: 5.6.0 @@ -7699,18 +6883,18 @@ snapshots: uuid: 13.0.0 write-file-atomic: 5.0.1 - '@netlify/dev@4.8.8(@netlify/api@14.0.12)(rollup@4.57.1)': + '@netlify/dev@4.11.2(rollup@4.57.1)': dependencies: - '@netlify/ai': 0.3.5(@netlify/api@14.0.12) - '@netlify/blobs': 10.5.0 - '@netlify/config': 24.2.0 + '@netlify/ai': 0.3.8 + '@netlify/blobs': 10.7.0 + '@netlify/config': 24.4.0 '@netlify/dev-utils': 4.3.3 - '@netlify/edge-functions-dev': 1.0.8 - '@netlify/functions-dev': 1.1.8(rollup@4.57.1) + '@netlify/edge-functions-dev': 1.0.11 + '@netlify/functions-dev': 1.1.12(rollup@4.57.1) '@netlify/headers': 2.1.3 - '@netlify/images': 1.3.3(@netlify/blobs@10.5.0) - '@netlify/redirects': 3.1.4 - '@netlify/runtime': 4.1.13 + '@netlify/images': 1.3.3(@netlify/blobs@10.7.0) + '@netlify/redirects': 3.1.5 + '@netlify/runtime': 4.1.15 '@netlify/static': 3.1.3 ulid: 3.0.1 transitivePeerDependencies: @@ -7722,7 +6906,6 @@ snapshots: - '@azure/storage-blob' - '@capacitor/preferences' - '@deno/kv' - - '@netlify/api' - '@planetscale/database' - '@upstash/redis' - '@vercel/blob' @@ -7736,9 +6919,12 @@ snapshots: - supports-color - uploadthing - '@netlify/edge-bundler@14.9.3': + '@netlify/edge-bundler@14.9.10': dependencies: '@import-maps/resolve': 2.0.0 + '@sveltejs/acorn-typescript': 1.0.9(acorn@8.15.0) + acorn: 8.15.0 + acorn-walk: 8.3.4 ajv: 8.17.1 ajv-errors: 3.0.0(ajv@8.17.1) better-ajv-errors: 1.2.0(ajv@8.17.1) @@ -7761,25 +6947,25 @@ snapshots: '@netlify/edge-functions-bootstrap@2.16.0': {} - '@netlify/edge-functions-dev@1.0.8': + '@netlify/edge-functions-dev@1.0.11': dependencies: '@netlify/dev-utils': 4.3.3 - '@netlify/edge-bundler': 14.9.3 + '@netlify/edge-bundler': 14.9.10 '@netlify/edge-functions': 3.0.3 '@netlify/edge-functions-bootstrap': 2.16.0 - '@netlify/runtime-utils': 2.2.1 + '@netlify/runtime-utils': 2.3.0 get-port: 7.1.0 '@netlify/edge-functions@3.0.3': dependencies: '@netlify/types': 2.3.0 - '@netlify/functions-dev@1.1.8(rollup@4.57.1)': + '@netlify/functions-dev@1.1.12(rollup@4.57.1)': dependencies: - '@netlify/blobs': 10.5.0 + '@netlify/blobs': 10.7.0 '@netlify/dev-utils': 4.3.3 '@netlify/functions': 5.1.2 - '@netlify/zip-it-and-ship-it': 14.2.0(rollup@4.57.1) + '@netlify/zip-it-and-ship-it': 14.4.0(rollup@4.57.1) cron-parser: 4.9.0 decache: 4.6.2 extract-zip: 2.0.1 @@ -7811,9 +6997,9 @@ snapshots: dependencies: '@netlify/headers-parser': 9.0.2 - '@netlify/images@1.3.3(@netlify/blobs@10.5.0)': + '@netlify/images@1.3.3(@netlify/blobs@10.7.0)': dependencies: - ipx: 3.1.1(@netlify/blobs@10.5.0) + ipx: 3.1.1(@netlify/blobs@10.7.0) transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -7836,7 +7022,7 @@ snapshots: '@netlify/node-cookies@0.1.0': {} - '@netlify/open-api@2.46.0': {} + '@netlify/open-api@2.49.1': {} '@netlify/otel@5.1.1': dependencies: @@ -7855,26 +7041,26 @@ snapshots: is-plain-obj: 4.1.0 path-exists: 5.0.0 - '@netlify/redirects@3.1.4': + '@netlify/redirects@3.1.5': dependencies: '@netlify/dev-utils': 4.3.3 '@netlify/redirect-parser': 15.0.3 cookie: 1.1.1 - jsonwebtoken: 9.0.2 + jsonwebtoken: 9.0.3 netlify-redirector: 0.5.0 - '@netlify/runtime-utils@2.2.1': {} + '@netlify/runtime-utils@2.3.0': {} - '@netlify/runtime@4.1.13': + '@netlify/runtime@4.1.15': dependencies: - '@netlify/blobs': 10.5.0 - '@netlify/cache': 3.3.4 - '@netlify/runtime-utils': 2.2.1 + '@netlify/blobs': 10.7.0 + '@netlify/cache': 3.3.5 + '@netlify/runtime-utils': 2.3.0 '@netlify/types': 2.3.0 transitivePeerDependencies: - supports-color - '@netlify/serverless-functions-api@2.8.3': {} + '@netlify/serverless-functions-api@2.9.0': {} '@netlify/static@3.1.3': dependencies: @@ -7882,12 +7068,12 @@ snapshots: '@netlify/types@2.3.0': {} - '@netlify/zip-it-and-ship-it@14.2.0(rollup@4.57.1)': + '@netlify/zip-it-and-ship-it@14.4.0(rollup@4.57.1)': dependencies: '@babel/parser': 7.27.5 '@babel/types': 7.28.6 '@netlify/binary-info': 1.0.0 - '@netlify/serverless-functions-api': 2.8.3 + '@netlify/serverless-functions-api': 2.9.0 '@vercel/nft': 0.29.4(rollup@4.57.1) archiver: 7.0.1 common-path-prefix: 3.0.0 @@ -8511,6 +7697,10 @@ snapshots: dependencies: acorn: 8.15.0 + '@sveltejs/acorn-typescript@1.0.9(acorn@8.15.0)': + dependencies: + acorn: 8.15.0 + '@sveltejs/eslint-config@8.2.0(@stylistic/eslint-plugin-js@2.1.0(eslint@9.34.0(jiti@2.4.2)))(eslint-config-prettier@9.1.0(eslint@9.34.0(jiti@2.4.2)))(eslint-plugin-n@17.16.1(eslint@9.34.0(jiti@2.4.2))(typescript@5.8.3))(eslint-plugin-svelte@3.9.3(eslint@9.34.0(jiti@2.4.2))(svelte@5.51.5)(ts-node@10.9.2(@types/node@24.10.13)(typescript@5.8.3)))(eslint@9.34.0(jiti@2.4.2))(typescript-eslint@8.43.0(eslint@9.34.0(jiti@2.4.2))(typescript@5.8.3))(typescript@5.8.3)': dependencies: '@stylistic/eslint-plugin-js': 2.1.0(eslint@9.34.0(jiti@2.4.2)) @@ -8935,14 +8125,9 @@ snapshots: dependencies: acorn: 8.15.0 - acorn-walk@8.3.2: {} - acorn-walk@8.3.4: dependencies: acorn: 8.15.0 - optional: true - - acorn@8.14.0: {} acorn@8.15.0: {} @@ -9018,10 +8203,6 @@ snapshots: array-union@2.1.0: {} - as-table@1.0.55: - dependencies: - printable-characters: 1.0.42 - ast-module-types@6.0.1: {} async-sema@3.1.1: {} @@ -9157,12 +8338,6 @@ snapshots: color-convert: 1.9.3 color-string: 1.9.1 - color@4.2.3: - dependencies: - color-convert: 2.0.1 - color-string: 1.9.1 - optional: true - colorspace@1.1.4: dependencies: color: 3.2.1 @@ -9198,8 +8373,6 @@ snapshots: cookie-es@1.2.2: {} - cookie@0.7.2: {} - cookie@1.1.1: {} copy-file@11.0.0: @@ -9261,8 +8434,6 @@ snapshots: dependencies: css-tree: 2.2.1 - data-uri-to-buffer@2.0.2: {} - data-uri-to-buffer@4.0.1: {} dataloader@1.4.0: {} @@ -9463,34 +8634,6 @@ snapshots: '@esbuild/win32-ia32': 0.25.12 '@esbuild/win32-x64': 0.25.12 - esbuild@0.25.4: - optionalDependencies: - '@esbuild/aix-ppc64': 0.25.4 - '@esbuild/android-arm': 0.25.4 - '@esbuild/android-arm64': 0.25.4 - '@esbuild/android-x64': 0.25.4 - '@esbuild/darwin-arm64': 0.25.4 - '@esbuild/darwin-x64': 0.25.4 - '@esbuild/freebsd-arm64': 0.25.4 - '@esbuild/freebsd-x64': 0.25.4 - '@esbuild/linux-arm': 0.25.4 - '@esbuild/linux-arm64': 0.25.4 - '@esbuild/linux-ia32': 0.25.4 - '@esbuild/linux-loong64': 0.25.4 - '@esbuild/linux-mips64el': 0.25.4 - '@esbuild/linux-ppc64': 0.25.4 - '@esbuild/linux-riscv64': 0.25.4 - '@esbuild/linux-s390x': 0.25.4 - '@esbuild/linux-x64': 0.25.4 - '@esbuild/netbsd-arm64': 0.25.4 - '@esbuild/netbsd-x64': 0.25.4 - '@esbuild/openbsd-arm64': 0.25.4 - '@esbuild/openbsd-x64': 0.25.4 - '@esbuild/sunos-x64': 0.25.4 - '@esbuild/win32-arm64': 0.25.4 - '@esbuild/win32-ia32': 0.25.4 - '@esbuild/win32-x64': 0.25.4 - esbuild@0.27.2: optionalDependencies: '@esbuild/aix-ppc64': 0.27.2 @@ -9715,12 +8858,8 @@ snapshots: signal-exit: 4.1.0 strip-final-newline: 3.0.0 - exit-hook@2.2.1: {} - expect-type@1.3.0: {} - exsolve@1.0.4: {} - extendable-error@0.1.7: {} extract-zip@2.0.1: @@ -9857,11 +8996,6 @@ snapshots: get-port@7.1.0: {} - get-source@2.0.12: - dependencies: - data-uri-to-buffer: 2.0.2 - source-map: 0.6.1 - get-stream@5.2.0: dependencies: pump: 3.0.2 @@ -9880,8 +9014,6 @@ snapshots: dependencies: is-glob: 4.0.3 - glob-to-regexp@0.4.1: {} - glob@10.5.0: dependencies: foreground-child: 3.3.0 @@ -9998,7 +9130,7 @@ snapshots: inherits@2.0.4: {} - ipx@3.1.1(@netlify/blobs@10.5.0): + ipx@3.1.1(@netlify/blobs@10.7.0): dependencies: '@fastify/accept-negotiator': 2.0.1 citty: 0.1.6 @@ -10014,7 +9146,7 @@ snapshots: sharp: 0.34.5 svgo: 4.0.0 ufo: 1.6.3 - unstorage: 1.16.1(@netlify/blobs@10.5.0) + unstorage: 1.16.1(@netlify/blobs@10.7.0) xss: 1.0.15 transitivePeerDependencies: - '@azure/app-configuration' @@ -10147,9 +9279,9 @@ snapshots: jsonpointer@5.0.1: {} - jsonwebtoken@9.0.2: + jsonwebtoken@9.0.3: dependencies: - jws: 3.2.3 + jws: 4.0.1 lodash.includes: 4.3.0 lodash.isboolean: 3.0.3 lodash.isinteger: 4.0.4 @@ -10162,15 +9294,15 @@ snapshots: junk@4.0.1: {} - jwa@1.4.2: + jwa@2.0.1: dependencies: buffer-equal-constant-time: 1.0.1 ecdsa-sig-formatter: 1.0.11 safe-buffer: 5.2.1 - jws@3.2.3: + jws@4.0.1: dependencies: - jwa: 1.4.2 + jwa: 2.0.1 safe-buffer: 5.2.1 jwt-decode@4.0.0: {} @@ -10362,29 +9494,10 @@ snapshots: dependencies: mime-db: 1.54.0 - mime@3.0.0: {} - mimic-fn@4.0.0: {} min-indent@1.0.1: {} - miniflare@4.20250507.0: - dependencies: - '@cspotcode/source-map-support': 0.8.1 - acorn: 8.14.0 - acorn-walk: 8.3.2 - exit-hook: 2.2.1 - glob-to-regexp: 0.4.1 - stoppable: 1.1.0 - undici: 5.29.0 - workerd: 1.20250507.0 - ws: 8.18.0 - youch: 3.3.4 - zod: 3.22.3 - transitivePeerDependencies: - - bufferutil - - utf-8-validate - miniflare@4.20260219.0: dependencies: '@cspotcode/source-map-support': 0.8.1 @@ -10441,8 +9554,6 @@ snapshots: ms@2.1.3: {} - mustache@4.2.0: {} - nanoid@3.3.11: {} natural-compare@1.4.0: {} @@ -10514,8 +9625,6 @@ snapshots: node-fetch-native: 1.6.6 ufo: 1.6.3 - ohash@2.0.11: {} - omit.js@2.0.2: {} once@1.4.0: @@ -10749,8 +9858,6 @@ snapshots: prettier@3.6.0: {} - printable-characters@1.0.42: {} - process-nextick-args@2.0.1: {} process@0.11.10: {} @@ -10985,62 +10092,6 @@ snapshots: set-cookie-parser@3.0.1: {} - sharp@0.33.5: - dependencies: - color: 4.2.3 - detect-libc: 2.1.2 - semver: 7.7.3 - optionalDependencies: - '@img/sharp-darwin-arm64': 0.33.5 - '@img/sharp-darwin-x64': 0.33.5 - '@img/sharp-libvips-darwin-arm64': 1.0.4 - '@img/sharp-libvips-darwin-x64': 1.0.4 - '@img/sharp-libvips-linux-arm': 1.0.5 - '@img/sharp-libvips-linux-arm64': 1.0.4 - '@img/sharp-libvips-linux-s390x': 1.0.4 - '@img/sharp-libvips-linux-x64': 1.0.4 - '@img/sharp-libvips-linuxmusl-arm64': 1.0.4 - '@img/sharp-libvips-linuxmusl-x64': 1.0.4 - '@img/sharp-linux-arm': 0.33.5 - '@img/sharp-linux-arm64': 0.33.5 - '@img/sharp-linux-s390x': 0.33.5 - '@img/sharp-linux-x64': 0.33.5 - '@img/sharp-linuxmusl-arm64': 0.33.5 - '@img/sharp-linuxmusl-x64': 0.33.5 - '@img/sharp-wasm32': 0.33.5 - '@img/sharp-win32-ia32': 0.33.5 - '@img/sharp-win32-x64': 0.33.5 - optional: true - - sharp@0.34.4: - dependencies: - '@img/colour': 1.0.0 - detect-libc: 2.1.2 - semver: 7.7.3 - optionalDependencies: - '@img/sharp-darwin-arm64': 0.34.4 - '@img/sharp-darwin-x64': 0.34.4 - '@img/sharp-libvips-darwin-arm64': 1.2.3 - '@img/sharp-libvips-darwin-x64': 1.2.3 - '@img/sharp-libvips-linux-arm': 1.2.3 - '@img/sharp-libvips-linux-arm64': 1.2.3 - '@img/sharp-libvips-linux-ppc64': 1.2.3 - '@img/sharp-libvips-linux-s390x': 1.2.3 - '@img/sharp-libvips-linux-x64': 1.2.3 - '@img/sharp-libvips-linuxmusl-arm64': 1.2.3 - '@img/sharp-libvips-linuxmusl-x64': 1.2.3 - '@img/sharp-linux-arm': 0.34.4 - '@img/sharp-linux-arm64': 0.34.4 - '@img/sharp-linux-ppc64': 0.34.4 - '@img/sharp-linux-s390x': 0.34.4 - '@img/sharp-linux-x64': 0.34.4 - '@img/sharp-linuxmusl-arm64': 0.34.4 - '@img/sharp-linuxmusl-x64': 0.34.4 - '@img/sharp-wasm32': 0.34.4 - '@img/sharp-win32-arm64': 0.34.4 - '@img/sharp-win32-ia32': 0.34.4 - '@img/sharp-win32-x64': 0.34.4 - sharp@0.34.5: dependencies: '@img/colour': 1.0.0 @@ -11141,15 +10192,8 @@ snapshots: stackback@0.0.2: {} - stacktracey@2.1.8: - dependencies: - as-table: 1.0.55 - get-source: 2.0.12 - std-env@3.10.0: {} - stoppable@1.1.0: {} - streamx@2.22.1: dependencies: fast-fifo: 1.3.2 @@ -11251,7 +10295,7 @@ snapshots: dependencies: '@jridgewell/remapping': 2.3.5 '@jridgewell/sourcemap-codec': 1.5.5 - '@sveltejs/acorn-typescript': 1.0.5(acorn@8.15.0) + '@sveltejs/acorn-typescript': 1.0.9(acorn@8.15.0) '@types/estree': 1.0.8 '@types/trusted-types': 2.0.7 acorn: 8.15.0 @@ -11400,20 +10444,8 @@ snapshots: undici-types@7.16.0: {} - undici@5.29.0: - dependencies: - '@fastify/busboy': 2.1.1 - undici@7.18.2: {} - unenv@2.0.0-rc.15: - dependencies: - defu: 6.1.4 - exsolve: 1.0.4 - ohash: 2.0.11 - pathe: 2.0.3 - ufo: 1.6.3 - unenv@2.0.0-rc.24: dependencies: pathe: 2.0.3 @@ -11426,7 +10458,7 @@ snapshots: dependencies: normalize-path: 2.1.1 - unstorage@1.16.1(@netlify/blobs@10.5.0): + unstorage@1.16.1(@netlify/blobs@10.7.0): dependencies: anymatch: 3.1.3 chokidar: 4.0.3 @@ -11437,7 +10469,7 @@ snapshots: ofetch: 1.4.1 ufo: 1.6.3 optionalDependencies: - '@netlify/blobs': 10.5.0 + '@netlify/blobs': 10.7.0 untun@0.1.3: dependencies: @@ -11479,7 +10511,7 @@ snapshots: dependencies: '@rollup/pluginutils': 5.1.3(rollup@4.57.1) imagetools-core: 9.1.0 - sharp: 0.34.4 + sharp: 0.34.5 transitivePeerDependencies: - rollup @@ -11579,14 +10611,6 @@ snapshots: triple-beam: 1.4.1 winston-transport: 4.9.0 - workerd@1.20250507.0: - optionalDependencies: - '@cloudflare/workerd-darwin-64': 1.20250507.0 - '@cloudflare/workerd-darwin-arm64': 1.20250507.0 - '@cloudflare/workerd-linux-64': 1.20250507.0 - '@cloudflare/workerd-linux-arm64': 1.20250507.0 - '@cloudflare/workerd-windows-64': 1.20250507.0 - workerd@1.20260219.0: optionalDependencies: '@cloudflare/workerd-darwin-64': 1.20260219.0 @@ -11600,25 +10624,7 @@ snapshots: mrmime: 2.0.0 regexparam: 3.0.0 - wrangler@4.14.4(@cloudflare/workers-types@4.20250508.0): - dependencies: - '@cloudflare/kv-asset-handler': 0.4.0 - '@cloudflare/unenv-preset': 2.3.1(unenv@2.0.0-rc.15)(workerd@1.20250507.0) - blake3-wasm: 2.1.5 - esbuild: 0.25.4 - miniflare: 4.20250507.0 - path-to-regexp: 6.3.0 - unenv: 2.0.0-rc.15 - workerd: 1.20250507.0 - optionalDependencies: - '@cloudflare/workers-types': 4.20250508.0 - fsevents: 2.3.3 - sharp: 0.33.5 - transitivePeerDependencies: - - bufferutil - - utf-8-validate - - wrangler@4.67.0: + wrangler@4.67.0(@cloudflare/workers-types@4.20260219.0): dependencies: '@cloudflare/kv-asset-handler': 0.4.2 '@cloudflare/unenv-preset': 2.14.0(unenv@2.0.0-rc.24)(workerd@1.20260219.0) @@ -11629,6 +10635,7 @@ snapshots: unenv: 2.0.0-rc.24 workerd: 1.20260219.0 optionalDependencies: + '@cloudflare/workers-types': 4.20260219.0 fsevents: 2.3.3 transitivePeerDependencies: - bufferutil @@ -11699,12 +10706,6 @@ snapshots: '@poppinss/exception': 1.2.3 error-stack-parser-es: 1.0.5 - youch@3.3.4: - dependencies: - cookie: 0.7.2 - mustache: 4.2.0 - stacktracey: 2.1.8 - youch@4.1.0-beta.10: dependencies: '@poppinss/colors': 4.1.6 @@ -11721,8 +10722,6 @@ snapshots: compress-commons: 6.0.2 readable-stream: 4.7.0 - zod@3.22.3: {} - zod@3.25.76: {} zod@4.0.14: {} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 713eff7e6421..2bcb9a7a1d19 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -50,7 +50,7 @@ catalog: valibot: ^1.1.0 vite: ^6.3.5 vitest: ^4.0.0 - wrangler: ^4.65.0 + wrangler: ^4.67.0 catalogs: vite-baseline: vite: ^5.4.21 # should be 5.0.3 but older versions cause errors in some tests From 0a194a04e7ee0e3d329dae8fd5bd4700ed6dcbd5 Mon Sep 17 00:00:00 2001 From: Philippe Serhal Date: Fri, 20 Feb 2026 09:30:19 -0500 Subject: [PATCH 010/545] fix(adapter-netlify)!: write output conforming to Netlify Frameworks API (#15294) ~~(Stacked on top of https://github.com/sveltejs/kit/pull/15203)~~ closes #15169 The current implementation of the Netlify adapter writes output to paths and config files that are under-documented and in some cases entirely undocumented. 18 months ago, Netlify addressed this by releasing the stable, documented Netlify Frameworks API](https://docs.netlify.com/build/frameworks/frameworks-api/). This PR migrates the adapter to write output that conforms to this spec. POTENTIALLY BREAKING CHANGE: Deploying and previewing with Netlify CLI now requires [v17.31.0](https://github.com/netlify/cli/releases/tag/v17.31.0) or later. Run `npm i -g netlify-cli@latest` to upgrade. --- ### Please don't delete this checklist! Before submitting the PR, please make sure you do the following: - [x] It's really useful if your PR references an issue where it is discussed ahead of time. In many cases, features are absent for a reason. For large changes, please create an RFC: https://github.com/sveltejs/rfcs - [x] This message body should clearly illustrate what problems it solves. - [x] Ideally, include a test that fails without this PR but passes with it. ### Tests - [x] Run the tests with `pnpm test` and lint the project with `pnpm lint` and `pnpm check` ### Changesets - [x] If your PR makes a change that should be noted in one or more packages' changelogs, generate a changeset by running `pnpm changeset` and following the prompts. Changesets that add features should be `minor` and those that fix bugs should be `patch`. Please prefix changeset messages with `feat:`, `fix:`, or `chore:`. ### Edits - [x] Please ensure that 'Allow edits from maintainers' is checked. PRs without this option may be closed. --------- Co-authored-by: Tee Ming Co-authored-by: Ben McCann <322311+benmccann@users.noreply.github.com> --- .changeset/fine-ghosts-camp.md | 7 + packages/adapter-netlify/index.js | 184 +++++++++--------- .../test/apps/basic/netlify.toml | 7 +- .../test/apps/edge/netlify.toml | 13 +- .../test/apps/split/netlify.toml | 7 +- packages/adapter-netlify/utils.js | 70 +++++++ packages/adapter-netlify/utils.spec.js | 161 +++++++++++++++ 7 files changed, 341 insertions(+), 108 deletions(-) create mode 100644 .changeset/fine-ghosts-camp.md create mode 100644 packages/adapter-netlify/utils.js create mode 100644 packages/adapter-netlify/utils.spec.js diff --git a/.changeset/fine-ghosts-camp.md b/.changeset/fine-ghosts-camp.md new file mode 100644 index 000000000000..6eacab83c095 --- /dev/null +++ b/.changeset/fine-ghosts-camp.md @@ -0,0 +1,7 @@ +--- +'@sveltejs/adapter-netlify': major +--- + +breaking: write output that conforms to the stable [Netlify Frameworks API](https://docs.netlify.com/build/frameworks/frameworks-api/). + +Deploying and previewing with Netlify CLI now requires [v17.31.0](https://github.com/netlify/cli/releases/tag/v17.31.0) or later. Run `npm i -g netlify-cli@latest` to upgrade. diff --git a/packages/adapter-netlify/index.js b/packages/adapter-netlify/index.js index 32413fc586d3..fa82803e6cd5 100644 --- a/packages/adapter-netlify/index.js +++ b/packages/adapter-netlify/index.js @@ -1,11 +1,15 @@ /** @import { BuildOptions } from 'esbuild' */ -import { appendFileSync, existsSync, readdirSync, readFileSync, writeFileSync } from 'node:fs'; -import { join, resolve, posix } from 'node:path'; +import { existsSync, readdirSync, readFileSync, writeFileSync } from 'node:fs'; +import { join, posix } from 'node:path'; import { fileURLToPath } from 'node:url'; import { builtinModules } from 'node:module'; import process from 'node:process'; import esbuild from 'esbuild'; import toml from '@iarna/toml'; +import { matches, get_publish_directory } from './utils.js'; + +const pkg = JSON.parse(readFileSync(new URL('./package.json', import.meta.url), 'utf-8')); +const adapter_version = pkg.version; /** * @typedef {{ @@ -55,11 +59,13 @@ export default function ({ split = false, edge = edge_set_in_env_var } = {}) { // empty out existing build directories builder.rimraf(publish); + builder.rimraf('.netlify/v1'); + + // clean up legacy directories from older adapter versions builder.rimraf('.netlify/edge-functions'); builder.rimraf('.netlify/server'); builder.rimraf('.netlify/package.json'); builder.rimraf('.netlify/serverless.js'); - if (existsSync('.netlify/functions-internal')) { for (const file of readdirSync('.netlify/functions-internal')) { if (file.startsWith(FUNCTION_PREFIX)) { @@ -75,13 +81,13 @@ export default function ({ split = false, edge = edge_set_in_env_var } = {}) { builder.writeClient(publish_dir); builder.writePrerendered(publish_dir); - builder.log.minor('Writing custom headers...'); - const headers_file = join(publish, '_headers'); - builder.copy('_headers', headers_file); - appendFileSync( - headers_file, - `\n\n/${builder.getAppPath()}/immutable/*\n cache-control: public\n cache-control: immutable\n cache-control: max-age=31536000\n` - ); + // Copy user's custom _headers file if it exists + if (existsSync('_headers')) { + builder.copy('_headers', join(publish, '_headers')); + } + + builder.log.minor('Writing Netlify config...'); + write_frameworks_config({ builder }); if (edge) { if (split) { @@ -109,7 +115,8 @@ async function generate_edge_functions({ builder }) { builder.rimraf(tmp); builder.mkdirp(tmp); - builder.mkdirp('.netlify/edge-functions'); + // https://docs.netlify.com/build/frameworks/frameworks-api/#edge-functions + builder.mkdirp('.netlify/v1/edge-functions'); builder.log.minor('Generating Edge Function...'); const relativePath = posix.relative(tmp, builder.getServerDirectory()); @@ -134,7 +141,7 @@ async function generate_edge_functions({ builder }) { const path = '/*'; // We only need to specify paths without the trailing slash because // Netlify will handle the optional trailing slash for us - const excluded = [ + const excluded_paths = [ // Contains static files `/${builder.getAppPath()}/immutable/*`, `/${builder.getAppPath()}/version.json`, @@ -153,18 +160,6 @@ async function generate_edge_functions({ builder }) { '/.netlify/*' ]; - /** @type {import('@netlify/edge-functions').Manifest} */ - const edge_manifest = { - functions: [ - { - function: 'render', - path, - excludedPath: /** @type {`/${string}`[]} */ (excluded) - } - ], - version: 1 - }; - /** @type {BuildOptions} */ const esbuild_config = { bundle: true, @@ -185,29 +180,34 @@ async function generate_edge_functions({ builder }) { external: builtinModules.map((id) => `node:${id}`), alias: Object.fromEntries(builtinModules.map((id) => [id, `node:${id}`])) }; + await Promise.all([ esbuild.build({ entryPoints: [`${tmp}/entry.js`], - outfile: '.netlify/edge-functions/render.js', + outfile: `.netlify/v1/edge-functions/${FUNCTION_PREFIX}render.js`, ...esbuild_config }), builder.hasServerInstrumentationFile() && esbuild.build({ - entryPoints: [`${builder.getServerDirectory()}/instrumentation.server.js`], - outfile: '.netlify/edge/instrumentation.server.js', + entryPoints: [ + `${builder.getServerDirectory()}/${FUNCTION_PREFIX}instrumentation.server.js` + ], + outfile: `.netlify/v1/edge-functions/${FUNCTION_PREFIX}instrumentation.server.js`, ...esbuild_config }) ]); if (builder.hasServerInstrumentationFile()) { builder.instrument({ - entrypoint: '.netlify/edge-functions/render.js', - instrumentation: '.netlify/edge/instrumentation.server.js', - start: '.netlify/edge/start.js' + entrypoint: `.netlify/v1/edge-functions/${FUNCTION_PREFIX}render.js`, + instrumentation: `.netlify/v1/edge-functions/${FUNCTION_PREFIX}instrumentation.server.js`, + start: `.netlify/v1/edge-functions/${FUNCTION_PREFIX}start.js` }); } - writeFileSync('.netlify/edge-functions/manifest.json', JSON.stringify(edge_manifest)); + // https://docs.netlify.com/build/frameworks/frameworks-api/#edge-functions + // Edge function config goes in config.json + add_edge_function_config({ builder, path, excluded_paths }); } /** * @param { object } params @@ -216,15 +216,16 @@ async function generate_edge_functions({ builder }) { * @param { boolean } params.split */ function generate_lambda_functions({ builder, publish, split }) { - builder.mkdirp('.netlify/functions-internal/.svelte-kit'); + // https://docs.netlify.com/build/frameworks/frameworks-api/#netlifyv1functions + builder.mkdirp('.netlify/v1/functions'); - builder.writeServer('.netlify/server'); + builder.writeServer('.netlify/v1/server'); const replace = { '0SERVER': './server/index.js' // digit prefix prevents CJS build from using this as a variable name, which would also get replaced }; - builder.copy(files, '.netlify', { replace, filter: (name) => !name.endsWith('edge.js') }); + builder.copy(files, '.netlify/v1', { replace, filter: (file) => !file.endsWith('edge.js') }); builder.log.minor('Generating serverless functions...'); @@ -279,17 +280,17 @@ function generate_lambda_functions({ builder, publish, split }) { const config = generate_config_export(pattern); if (builder.hasServerInstrumentationFile()) { - writeFileSync(`.netlify/functions-internal/${name}.mjs`, fn); + writeFileSync(`.netlify/v1/functions/${name}.mjs`, fn); builder.instrument({ - entrypoint: `.netlify/functions-internal/${name}.mjs`, - instrumentation: '.netlify/server/instrumentation.server.js', - start: `.netlify/functions-start/${name}.start.mjs`, + entrypoint: `.netlify/v1/functions/${name}.mjs`, + instrumentation: '.netlify/v1/server/instrumentation.server.js', + start: `.netlify/v1/functions/${name}.start.mjs`, module: { generateText: generate_traced_module(config) } }); } else { - writeFileSync(`.netlify/functions-internal/${name}.mjs`, `${fn}\n${config}`); + writeFileSync(`.netlify/v1/functions/${name}.mjs`, `${fn}\n${config}`); } } } else { @@ -301,17 +302,17 @@ function generate_lambda_functions({ builder, publish, split }) { const config = generate_config_export('/*'); if (builder.hasServerInstrumentationFile()) { - writeFileSync(`.netlify/functions-internal/${FUNCTION_PREFIX}render.mjs`, fn); + writeFileSync(`.netlify/v1/functions/${FUNCTION_PREFIX}render.mjs`, fn); builder.instrument({ - entrypoint: `.netlify/functions-internal/${FUNCTION_PREFIX}render.mjs`, - instrumentation: '.netlify/server/instrumentation.server.js', - start: `.netlify/functions-start/${FUNCTION_PREFIX}render.start.mjs`, + entrypoint: `.netlify/v1/functions/${FUNCTION_PREFIX}render.mjs`, + instrumentation: '.netlify/v1/server/instrumentation.server.js', + start: `.netlify/v1/functions/${FUNCTION_PREFIX}render.start.mjs`, module: { generateText: generate_traced_module(config) } }); } else { - writeFileSync(`.netlify/functions-internal/${FUNCTION_PREFIX}render.mjs`, `${fn}\n${config}`); + writeFileSync(`.netlify/v1/functions/${FUNCTION_PREFIX}render.mjs`, `${fn}\n${config}`); } } @@ -335,66 +336,61 @@ function get_netlify_config() { } /** - * @param {NetlifyConfig | null} netlify_config - * @param {import('@sveltejs/kit').Builder} builder - **/ -function get_publish_directory(netlify_config, builder) { - if (netlify_config) { - if (!netlify_config.build?.publish) { - builder.log.minor('No publish directory specified in netlify.toml, using default'); - return; - } - - if (resolve(netlify_config.build.publish) === process.cwd()) { - throw new Error( - 'The publish directory cannot be set to the site root. Please change it to another value such as "build" in netlify.toml.' - ); - } - return netlify_config.build.publish; - } + * Writes the Netlify Frameworks API config file + * https://docs.netlify.com/build/frameworks/frameworks-api/ + * @param {{ builder: import('@sveltejs/kit').Builder }} params + */ +function write_frameworks_config({ builder }) { + // https://docs.netlify.com/build/frameworks/frameworks-api/#headers + /** @type {{ headers: Array<{ for: string, values: Record }> }} */ + const config = { + headers: [ + { + for: `/${builder.getAppPath()}/immutable/*`, + values: { + 'cache-control': 'public, immutable, max-age=31536000' + } + } + ] + }; - builder.log.warn( - 'No netlify.toml found. Using default publish directory. Consult https://svelte.dev/docs/kit/adapter-netlify#usage for more details' - ); + builder.mkdirp('.netlify/v1'); + writeFileSync('.netlify/v1/config.json', JSON.stringify(config, null, '\t')); } /** - * @typedef {{ rest: boolean, dynamic: boolean, content: string }} RouteSegment - */ - -/** - * @param {RouteSegment[]} a - * @param {RouteSegment[]} b - * @returns {boolean} + * Adds edge function configuration to the Frameworks API config file + * https://docs.netlify.com/build/frameworks/frameworks-api/#edge-functions + * @param {{ builder: import('@sveltejs/kit').Builder, path: string, excluded_paths: string[] }} params */ -function matches(a, b) { - if (a[0] && b[0]) { - if (b[0].rest) { - if (b.length === 1) return true; - - const next_b = b.slice(1); - - for (let i = 0; i < a.length; i += 1) { - if (matches(a.slice(i), next_b)) return true; - } - - return false; +function add_edge_function_config({ path, excluded_paths }) { + const config_path = '.netlify/v1/config.json'; + const config = JSON.parse(readFileSync(config_path, 'utf-8')); + + // https://docs.netlify.com/build/frameworks/frameworks-api/#edge-functions + config.edge_functions = [ + { + function: `${FUNCTION_PREFIX}render`, + name: 'SvelteKit', + generator: get_generator_string(), + path, + excludedPath: excluded_paths } + ]; - if (!b[0].dynamic) { - if (!a[0].dynamic && a[0].content !== b[0].content) return false; - } + writeFileSync(config_path, JSON.stringify(config, null, '\t')); +} - if (a.length === 1 && b.length === 1) return true; - return matches(a.slice(1), b.slice(1)); - } else if (a[0]) { - return a.length === 1 && a[0].rest; - } else { - return b.length === 1 && b[0].rest; - } +/** + * Gets the generator string for Netlify function metadata + * @returns {string} + */ +function get_generator_string() { + return `@sveltejs/adapter-netlify@${adapter_version}`; } /** + * https://docs.netlify.com/functions/get-started/?fn-language=ts#response * @param {string} manifest * @returns {string} */ @@ -413,6 +409,8 @@ export default init(${manifest}); function generate_config_export(pattern) { return `\ export const config = { + name: "SvelteKit server", + generator: "${get_generator_string()}", path: "${pattern}", excludedPath: "/.netlify/*", preferStatic: true diff --git a/packages/adapter-netlify/test/apps/basic/netlify.toml b/packages/adapter-netlify/test/apps/basic/netlify.toml index 5bd2fc95156c..00917ab74a18 100644 --- a/packages/adapter-netlify/test/apps/basic/netlify.toml +++ b/packages/adapter-netlify/test/apps/basic/netlify.toml @@ -1,9 +1,8 @@ [build] publish = "build" -# TODO: remove this after we refactor to the Netlify frameworks API +# TODO: remove this once @netlify/dev works with the Netlify frameworks API # we are purposely misusing the user functions config to discover our framework -# build output because our adapter still outputs using an older API but the new -# Netlify dev server adheres to the new API +# build output because the Netlify dev plugin doesn't currently detect it [functions] -directory = ".netlify/functions-internal" +directory = ".netlify/v1/functions" diff --git a/packages/adapter-netlify/test/apps/edge/netlify.toml b/packages/adapter-netlify/test/apps/edge/netlify.toml index fba5510330d6..5ea18d6abd4e 100644 --- a/packages/adapter-netlify/test/apps/edge/netlify.toml +++ b/packages/adapter-netlify/test/apps/edge/netlify.toml @@ -1,14 +1,13 @@ [build] publish = "build" -# TODO: remove these once we overhaul the Netlify adapter to use the new edge declarations https://docs.netlify.com/build/edge-functions/declarations/#declare-edge-functions-inline +# TODO: remove this once @netlify/dev works with the Netlify frameworks API +# we are purposely misusing the edge functions config to discover our framework +# build output because the Netlify dev plugin doesn't currently detect it +edge_functions = ".netlify/v1/edge-functions" -# defaults to "netlify/edge-functions" (without the . prefix) -edge_functions = ".netlify/edge-functions" - -# the dev server doesn't read the manifest.json in edge-functions so we need -# to explicitly declare this here +# Netlify dev plugin doesn't detect .netlify/v1/config.json [[edge_functions]] +function = "sveltekit-render" path = "/*" -function = "render" excludedPath = ["/_app/immutable/*", "/_app/version.json", "/.netlify/*"] diff --git a/packages/adapter-netlify/test/apps/split/netlify.toml b/packages/adapter-netlify/test/apps/split/netlify.toml index 5bd2fc95156c..00917ab74a18 100644 --- a/packages/adapter-netlify/test/apps/split/netlify.toml +++ b/packages/adapter-netlify/test/apps/split/netlify.toml @@ -1,9 +1,8 @@ [build] publish = "build" -# TODO: remove this after we refactor to the Netlify frameworks API +# TODO: remove this once @netlify/dev works with the Netlify frameworks API # we are purposely misusing the user functions config to discover our framework -# build output because our adapter still outputs using an older API but the new -# Netlify dev server adheres to the new API +# build output because the Netlify dev plugin doesn't currently detect it [functions] -directory = ".netlify/functions-internal" +directory = ".netlify/v1/functions" diff --git a/packages/adapter-netlify/utils.js b/packages/adapter-netlify/utils.js new file mode 100644 index 000000000000..27d37aab9d2d --- /dev/null +++ b/packages/adapter-netlify/utils.js @@ -0,0 +1,70 @@ +import { resolve } from 'node:path'; +import process from 'node:process'; + +/** + * @typedef {{ rest: boolean, dynamic: boolean, content: string }} RouteSegment + */ + +/** + * @typedef {{ + * build?: { publish?: string } + * functions?: { node_bundler?: 'zisi' | 'esbuild' } + * }} NetlifyConfig + */ + +/** + * @param {RouteSegment[]} a + * @param {RouteSegment[]} b + * @returns {boolean} + */ +export function matches(a, b) { + if (a[0] && b[0]) { + if (b[0].rest) { + if (b.length === 1) return true; + + const next_b = b.slice(1); + + for (let i = 0; i < a.length; i += 1) { + if (matches(a.slice(i), next_b)) return true; + } + + return false; + } + + if (!b[0].dynamic) { + if (!a[0].dynamic && a[0].content !== b[0].content) return false; + } + + if (a.length === 1 && b.length === 1) return true; + return matches(a.slice(1), b.slice(1)); + } else if (a[0]) { + return a.length === 1 && a[0].rest; + } else { + return b.length === 1 && b[0].rest; + } +} + +/** + * @param {NetlifyConfig | null} netlify_config + * @param {import('@sveltejs/kit').Builder} builder + * @returns {string | undefined} + */ +export function get_publish_directory(netlify_config, builder) { + if (netlify_config) { + if (!netlify_config.build?.publish) { + builder.log.minor('No publish directory specified in netlify.toml, using default'); + return; + } + + if (resolve(netlify_config.build.publish) === process.cwd()) { + throw new Error( + 'The publish directory cannot be set to the site root. Please change it to another value such as "build" in netlify.toml.' + ); + } + return netlify_config.build.publish; + } + + builder.log.warn( + 'No netlify.toml found. Using default publish directory. Consult https://svelte.dev/docs/kit/adapter-netlify#usage for more details' + ); +} diff --git a/packages/adapter-netlify/utils.spec.js b/packages/adapter-netlify/utils.spec.js new file mode 100644 index 000000000000..60da6beda5cd --- /dev/null +++ b/packages/adapter-netlify/utils.spec.js @@ -0,0 +1,161 @@ +import process from 'node:process'; +import { describe, test, expect, vi } from 'vitest'; +import { matches, get_publish_directory } from './utils.js'; + +/** + * Helper to create a static route segment + * @param {string} content + * @returns {{ rest: boolean, dynamic: boolean, content: string }} + */ +function static_segment(content) { + return { rest: false, dynamic: false, content }; +} + +/** + * Helper to create a dynamic route segment + * @param {string} content + * @returns {{ rest: boolean, dynamic: boolean, content: string }} + */ +function dynamic_segment(content) { + return { rest: false, dynamic: true, content }; +} + +/** + * Helper to create a rest route segment + * @param {string} content + * @returns {{ rest: boolean, dynamic: boolean, content: string }} + */ +function rest_segment(content) { + return { rest: true, dynamic: true, content }; +} + +describe('matches', () => { + test('two identical static routes match', () => { + expect( + matches( + [static_segment('blog'), static_segment('post')], + [static_segment('blog'), static_segment('post')] + ) + ).toBe(true); + }); + + test('static segment mismatch returns false', () => { + expect(matches([static_segment('blog')], [static_segment('about')])).toBe(false); + }); + + test('dynamic segment matches any static segment', () => { + expect(matches([static_segment('blog')], [dynamic_segment('[slug]')])).toBe(true); + }); + + test('rest segment at end matches everything', () => { + expect( + matches([static_segment('blog'), static_segment('post')], [rest_segment('[...rest]')]) + ).toBe(true); + }); + + test('rest-only route matches any route', () => { + expect( + matches( + [static_segment('a'), static_segment('b'), static_segment('c')], + [rest_segment('[...rest]')] + ) + ).toBe(true); + }); + + test('rest segment matches remaining segments', () => { + expect( + matches( + [static_segment('blog'), static_segment('2024'), static_segment('post')], + [static_segment('blog'), rest_segment('[...rest]')] + ) + ).toBe(true); + }); + + test('empty segments (index routes)', () => { + expect(matches([], [])).toBe(false); + }); + + test('mismatched lengths without rest return false', () => { + expect( + matches([static_segment('blog'), static_segment('post')], [static_segment('blog')]) + ).toBe(false); + }); + + test('rest with following segments', () => { + expect( + matches( + [static_segment('a'), static_segment('b'), static_segment('page')], + [rest_segment('[...rest]'), static_segment('page')] + ) + ).toBe(true); + }); + + test('rest with following segments that do not match', () => { + expect( + matches( + [static_segment('a'), static_segment('b'), static_segment('other')], + [rest_segment('[...rest]'), static_segment('page')] + ) + ).toBe(false); + }); + + test('a has trailing rest and b is shorter', () => { + expect(matches([rest_segment('[...rest]')], [static_segment('blog')])).toBe(true); + }); + + test('a is longer without rest in b', () => { + expect(matches([static_segment('a'), static_segment('b')], [static_segment('a')])).toBe(false); + }); + + test('b is longer without rest in a', () => { + expect(matches([static_segment('a')], [static_segment('a'), static_segment('b')])).toBe(false); + }); + + test('dynamic in a matches static in b', () => { + expect(matches([dynamic_segment('[id]')], [static_segment('blog')])).toBe(true); + }); + + test('both dynamic segments match', () => { + expect(matches([dynamic_segment('[id]')], [dynamic_segment('[slug]')])).toBe(true); + }); +}); + +describe('get_publish_directory', () => { + test('returns undefined when no netlify.toml, with warning logged', () => { + const warn = vi.fn(); + const builder = /** @type {any} */ ({ log: { warn, minor: vi.fn() } }); + + const result = get_publish_directory(null, builder); + + expect(result).toBeUndefined(); + expect(warn).toHaveBeenCalledOnce(); + expect(warn).toHaveBeenCalledWith(expect.stringContaining('No netlify.toml found')); + }); + + test('returns undefined when config has no build.publish, with minor log', () => { + const minor = vi.fn(); + const builder = /** @type {any} */ ({ log: { warn: vi.fn(), minor } }); + + const result = get_publish_directory({ build: {} }, builder); + + expect(result).toBeUndefined(); + expect(minor).toHaveBeenCalledOnce(); + expect(minor).toHaveBeenCalledWith(expect.stringContaining('No publish directory specified')); + }); + + test('returns the publish value when specified', () => { + const builder = /** @type {any} */ ({ log: { warn: vi.fn(), minor: vi.fn() } }); + + const result = get_publish_directory({ build: { publish: 'dist' } }, builder); + + expect(result).toBe('dist'); + }); + + test('throws when publish is site root', () => { + const builder = /** @type {any} */ ({ log: { warn: vi.fn(), minor: vi.fn() } }); + + expect(() => get_publish_directory({ build: { publish: process.cwd() } }, builder)).toThrow( + 'The publish directory cannot be set to the site root' + ); + }); +}); From a7cfab6b7eb9ce6a9941e9420f2a6f21b2848b5d Mon Sep 17 00:00:00 2001 From: Ben McCann <322311+benmccann@users.noreply.github.com> Date: Sat, 21 Feb 2026 08:51:43 -0700 Subject: [PATCH 011/545] chore: build with rolldown (#15373) --- packages/adapter-netlify/package.json | 9 +- .../{rollup.config.js => rolldown.config.js} | 13 +- packages/enhanced-img/package.json | 2 +- packages/kit/package.json | 2 +- pnpm-lock.yaml | 113 ++---------------- pnpm-workspace.yaml | 3 - 6 files changed, 19 insertions(+), 123 deletions(-) rename packages/adapter-netlify/{rollup.config.js => rolldown.config.js} (56%) diff --git a/packages/adapter-netlify/package.json b/packages/adapter-netlify/package.json index 1b8851c4542f..cab0690b79e6 100644 --- a/packages/adapter-netlify/package.json +++ b/packages/adapter-netlify/package.json @@ -33,8 +33,8 @@ "ambient.d.ts" ], "scripts": { - "dev": "rollup -cw", - "build": "rollup -c", + "dev": "rolldown -cw", + "build": "rolldown -c", "check": "tsc", "lint": "prettier --check .", "format": "pnpm lint --write", @@ -53,13 +53,10 @@ "@netlify/functions": "catalog:", "@netlify/node-cookies": "^0.1.0", "@netlify/types": "^2.1.0", - "@rollup/plugin-commonjs": "catalog:", - "@rollup/plugin-json": "catalog:", - "@rollup/plugin-node-resolve": "catalog:", "@sveltejs/kit": "workspace:^", "@sveltejs/vite-plugin-svelte": "catalog:", "@types/node": "catalog:", - "rollup": "^4.14.2", + "rolldown": "^1.0.0-rc.5", "typescript": "^5.3.3", "vitest": "catalog:" }, diff --git a/packages/adapter-netlify/rollup.config.js b/packages/adapter-netlify/rolldown.config.js similarity index 56% rename from packages/adapter-netlify/rollup.config.js rename to packages/adapter-netlify/rolldown.config.js index 82d61b85d29d..e9be35048264 100644 --- a/packages/adapter-netlify/rollup.config.js +++ b/packages/adapter-netlify/rolldown.config.js @@ -1,11 +1,8 @@ -import { nodeResolve } from '@rollup/plugin-node-resolve'; -import commonjs from '@rollup/plugin-commonjs'; -import json from '@rollup/plugin-json'; import { rmSync } from 'node:fs'; /** * @param {string} filepath - * @returns {import('rollup').Plugin} + * @returns {import('rolldown').Plugin} */ function clearOutput(filepath) { return { @@ -20,7 +17,7 @@ function clearOutput(filepath) { }; } -/** @type {import('rollup').RollupOptions} */ +/** @type {import('rolldown').RolldownOptions} */ const config = { input: { serverless: 'src/serverless.js', @@ -31,10 +28,10 @@ const config = { dir: 'files', format: 'esm' }, - // @ts-ignore https://github.com/rollup/plugins/issues/1329 - plugins: [clearOutput('files'), nodeResolve({ preferBuiltins: true }), commonjs(), json()], + plugins: [clearOutput('files')], external: (id) => id === '0SERVER' || id === 'MANIFEST' || id.startsWith('node:'), - preserveEntrySignatures: 'exports-only' + preserveEntrySignatures: 'exports-only', + platform: 'node' }; export default config; diff --git a/packages/enhanced-img/package.json b/packages/enhanced-img/package.json index 4fe935949b77..08c9e1cd2f85 100644 --- a/packages/enhanced-img/package.json +++ b/packages/enhanced-img/package.json @@ -48,7 +48,7 @@ "@sveltejs/vite-plugin-svelte": "catalog:", "@types/estree": "catalog:", "@types/node": "catalog:", - "rollup": "^4.27.4", + "rolldown": "^1.0.0-rc.5", "svelte": "catalog:", "typescript": "^5.6.3", "vite": "catalog:", diff --git a/packages/kit/package.json b/packages/kit/package.json index 7caa7db73178..6e0c69e5c71a 100644 --- a/packages/kit/package.json +++ b/packages/kit/package.json @@ -37,7 +37,7 @@ "@types/node": "catalog:", "@types/set-cookie-parser": "catalog:", "dts-buddy": "catalog:", - "rollup": "^4.14.2", + "rolldown": "^1.0.0-rc.5", "svelte": "catalog:", "svelte-preprocess": "catalog:", "typescript": "^5.3.3", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e1a69e36e226..29a5822e9ae4 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -33,15 +33,6 @@ catalogs: '@polka/url': specifier: ^1.0.0-next.28 version: 1.0.0-next.28 - '@rollup/plugin-commonjs': - specifier: ^29.0.0 - version: 29.0.0 - '@rollup/plugin-json': - specifier: ^6.1.0 - version: 6.1.0 - '@rollup/plugin-node-resolve': - specifier: ^16.0.0 - version: 16.0.0 '@sveltejs/eslint-config': specifier: ^9.0.0 version: 9.0.0 @@ -253,15 +244,6 @@ importers: '@netlify/types': specifier: ^2.1.0 version: 2.3.0 - '@rollup/plugin-commonjs': - specifier: 'catalog:' - version: 29.0.0(rollup@4.57.1) - '@rollup/plugin-json': - specifier: 'catalog:' - version: 6.1.0(rollup@4.57.1) - '@rollup/plugin-node-resolve': - specifier: 'catalog:' - version: 16.0.0(rollup@4.57.1) '@sveltejs/kit': specifier: workspace:^ version: link:../kit @@ -271,9 +253,9 @@ importers: '@types/node': specifier: 'catalog:' version: 24.10.13 - rollup: - specifier: ^4.14.2 - version: 4.57.1 + rolldown: + specifier: ^1.0.0-rc.5 + version: 1.0.0-rc.5 typescript: specifier: ^5.3.3 version: 5.8.3 @@ -481,9 +463,9 @@ importers: '@types/node': specifier: 'catalog:' version: 24.10.13 - rollup: - specifier: ^4.27.4 - version: 4.57.1 + rolldown: + specifier: ^1.0.0-rc.5 + version: 1.0.0-rc.5 svelte: specifier: 'catalog:' version: 5.51.5 @@ -569,9 +551,9 @@ importers: dts-buddy: specifier: 'catalog:' version: 0.6.2(typescript@5.8.3) - rollup: - specifier: ^4.14.2 - version: 4.57.1 + rolldown: + specifier: ^1.0.0-rc.5 + version: 1.0.0-rc.5 svelte: specifier: 'catalog:' version: 5.51.5 @@ -2944,33 +2926,6 @@ packages: '@rolldown/pluginutils@1.0.0-rc.5': resolution: {integrity: sha512-RxlLX/DPoarZ9PtxVrQgZhPoor987YtKQqCo5zkjX+0S0yLJ7Vv515Wk6+xtTL67VONKJKxETWZwuZjss2idYw==} - '@rollup/plugin-commonjs@29.0.0': - resolution: {integrity: sha512-U2YHaxR2cU/yAiwKJtJRhnyLk7cifnQw0zUpISsocBDoHDJn+HTV74ABqnwr5bEgWUwFZC9oFL6wLe21lHu5eQ==} - engines: {node: '>=16.0.0 || 14 >= 14.17'} - peerDependencies: - rollup: ^2.68.0||^3.0.0||^4.0.0 - peerDependenciesMeta: - rollup: - optional: true - - '@rollup/plugin-json@6.1.0': - resolution: {integrity: sha512-EGI2te5ENk1coGeADSIwZ7G2Q8CJS2sF120T7jLw4xFw9n7wIOXHo+kIYRAoVpJAN+kmqZSoO3Fp4JtoNF4ReA==} - engines: {node: '>=14.0.0'} - peerDependencies: - rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 - peerDependenciesMeta: - rollup: - optional: true - - '@rollup/plugin-node-resolve@16.0.0': - resolution: {integrity: sha512-0FPvAeVUT/zdWoO0jnb/V5BlBsUSNfkIOtFHzMO4H9MOklrmQFY6FduVHKucNb/aTFxvnGhj4MNj/T1oNdDfNg==} - engines: {node: '>=14.0.0'} - peerDependencies: - rollup: ^2.78.0||^3.0.0||^4.0.0 - peerDependenciesMeta: - rollup: - optional: true - '@rollup/pluginutils@5.1.3': resolution: {integrity: sha512-Pnsb6f32CD2W3uCaLZIzDmeFyQ2b8UWMFI7xtwUezpcGBDVDW6y9XgAWIlARiGAo6eNF5FK5aQTr0LFyNyqq5A==} engines: {node: '>=14.0.0'} @@ -3215,9 +3170,6 @@ packages: '@types/normalize-package-data@2.4.4': resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} - '@types/resolve@1.20.2': - resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==} - '@types/retry@0.12.2': resolution: {integrity: sha512-XISRgDJ2Tc5q4TRqvgJtzsRkFYNJzZrhTdtMoGVBttwzzQJkPnS3WWTFc7kuDRoPtPakl+T+OfdEUjYJj7Jbow==} @@ -3643,9 +3595,6 @@ packages: common-path-prefix@3.0.0: resolution: {integrity: sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==} - commondir@1.0.1: - resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} - compress-commons@6.0.2: resolution: {integrity: sha512-6FqVXeETqWPoGcfzrXb37E50NP0LXT8kAMu5ooZayhWWdgEY4lBEEcbQNXtkuKQsGduxiIcI4gOTsxTmuq/bSg==} engines: {node: '>= 14'} @@ -4378,9 +4327,6 @@ packages: engines: {node: '>=14.16'} hasBin: true - is-module@1.0.0: - resolution: {integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==} - is-network-error@1.1.0: resolution: {integrity: sha512-tUdRRAnhT+OtCZR/LxZelH/C7QtjtFrTu5tXCA8pl55eTUElUHT+GPYV8MBMBvea/j+NxQqVt3LbWMRir7Gx9g==} engines: {node: '>=16'} @@ -4401,9 +4347,6 @@ packages: resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} engines: {node: '>=12'} - is-reference@1.2.1: - resolution: {integrity: sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==} - is-reference@3.0.3: resolution: {integrity: sha512-ixkJoqQvAP88E6wLydLGGqCJsrFUnqoH6HnaczB8XmDH1oaWU+xxdptvikTgaEhtZ53Ky6YXiBuUI2WXLMCwjw==} @@ -7482,34 +7425,6 @@ snapshots: '@rolldown/pluginutils@1.0.0-rc.5': {} - '@rollup/plugin-commonjs@29.0.0(rollup@4.57.1)': - dependencies: - '@rollup/pluginutils': 5.1.3(rollup@4.57.1) - commondir: 1.0.1 - estree-walker: 2.0.2 - fdir: 6.5.0(picomatch@4.0.3) - is-reference: 1.2.1 - magic-string: 0.30.21 - picomatch: 4.0.3 - optionalDependencies: - rollup: 4.57.1 - - '@rollup/plugin-json@6.1.0(rollup@4.57.1)': - dependencies: - '@rollup/pluginutils': 5.1.3(rollup@4.57.1) - optionalDependencies: - rollup: 4.57.1 - - '@rollup/plugin-node-resolve@16.0.0(rollup@4.57.1)': - dependencies: - '@rollup/pluginutils': 5.1.3(rollup@4.57.1) - '@types/resolve': 1.20.2 - deepmerge: 4.3.1 - is-module: 1.0.0 - resolve: 1.22.8 - optionalDependencies: - rollup: 4.57.1 - '@rollup/pluginutils@5.1.3(rollup@4.57.1)': dependencies: '@types/estree': 1.0.8 @@ -7693,8 +7608,6 @@ snapshots: '@types/normalize-package-data@2.4.4': {} - '@types/resolve@1.20.2': {} - '@types/retry@0.12.2': {} '@types/semver@7.5.8': {} @@ -8210,8 +8123,6 @@ snapshots: common-path-prefix@3.0.0: {} - commondir@1.0.1: {} - compress-commons@6.0.2: dependencies: crc-32: 1.2.2 @@ -9048,8 +8959,6 @@ snapshots: dependencies: is-docker: 3.0.0 - is-module@1.0.0: {} - is-network-error@1.1.0: {} is-number@7.0.0: {} @@ -9060,10 +8969,6 @@ snapshots: is-plain-obj@4.1.0: {} - is-reference@1.2.1: - dependencies: - '@types/estree': 1.0.8 - is-reference@3.0.3: dependencies: '@types/estree': 1.0.8 diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index c0d099e6b769..d368a8e11f21 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -23,9 +23,6 @@ catalog: '@opentelemetry/sdk-trace-node': ^2.0.1 '@playwright/test': 1.58.2 '@polka/url': ^1.0.0-next.28 - '@rollup/plugin-commonjs': ^29.0.0 - '@rollup/plugin-json': ^6.1.0 - '@rollup/plugin-node-resolve': ^16.0.0 '@sveltejs/eslint-config': ^9.0.0 '@sveltejs/vite-plugin-svelte': ^6.0.0-next.3 '@svitejs/changesets-changelog-github-compact': ^1.2.0 From e2f3075ef299b91175fae116e6a76269002029cf Mon Sep 17 00:00:00 2001 From: Ben McCann <322311+benmccann@users.noreply.github.com> Date: Sat, 21 Feb 2026 09:16:23 -0700 Subject: [PATCH 012/545] breaking: require newer versions of Svelte and Vite (#15371) --- .changeset/early-worlds-slide.md | 5 +++++ .changeset/heavy-showers-leave.md | 5 +++++ .changeset/nine-coins-cheer.md | 5 +++++ packages/kit/package.json | 6 +++--- 4 files changed, 18 insertions(+), 3 deletions(-) create mode 100644 .changeset/early-worlds-slide.md create mode 100644 .changeset/heavy-showers-leave.md create mode 100644 .changeset/nine-coins-cheer.md diff --git a/.changeset/early-worlds-slide.md b/.changeset/early-worlds-slide.md new file mode 100644 index 000000000000..f9280d7ee391 --- /dev/null +++ b/.changeset/early-worlds-slide.md @@ -0,0 +1,5 @@ +--- +'@sveltejs/kit': major +--- + +breaking: require `@sveltejs/vite-plugin-svelte` v7 diff --git a/.changeset/heavy-showers-leave.md b/.changeset/heavy-showers-leave.md new file mode 100644 index 000000000000..413aa29ab325 --- /dev/null +++ b/.changeset/heavy-showers-leave.md @@ -0,0 +1,5 @@ +--- +'@sveltejs/kit': major +--- + +breaking: require Svelte 5 diff --git a/.changeset/nine-coins-cheer.md b/.changeset/nine-coins-cheer.md new file mode 100644 index 000000000000..8f78036d0edd --- /dev/null +++ b/.changeset/nine-coins-cheer.md @@ -0,0 +1,5 @@ +--- +'@sveltejs/kit': major +--- + +breaking: require Vite 8 diff --git a/packages/kit/package.json b/packages/kit/package.json index 6e0c69e5c71a..7a3f2d7b0cd1 100644 --- a/packages/kit/package.json +++ b/packages/kit/package.json @@ -45,11 +45,11 @@ "vitest": "catalog:" }, "peerDependencies": { - "@sveltejs/vite-plugin-svelte": "^3.0.0 || ^4.0.0-next.1 || ^5.0.0 || ^6.0.0-next.0 || ^7.0.0", + "@sveltejs/vite-plugin-svelte": "^7.0.0", "@opentelemetry/api": "^1.0.0", - "svelte": "^4.0.0 || ^5.0.0-next.0", + "svelte": "^5.0.0", "typescript": "^5.3.3", - "vite": "^5.0.3 || ^6.0.0 || ^7.0.0-beta.0 || ^8.0.0" + "vite": "^8.0.0" }, "peerDependenciesMeta": { "@opentelemetry/api": { From 6670c6778369c72a2e8627c36fb0fb9043bc2459 Mon Sep 17 00:00:00 2001 From: Ben McCann <322311+benmccann@users.noreply.github.com> Date: Sun, 22 Feb 2026 21:27:29 -0800 Subject: [PATCH 013/545] chore: fix TODO in cookie code (#15388) --- packages/kit/src/runtime/server/cookie.js | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/packages/kit/src/runtime/server/cookie.js b/packages/kit/src/runtime/server/cookie.js index fe816df010c8..48434d26f709 100644 --- a/packages/kit/src/runtime/server/cookie.js +++ b/packages/kit/src/runtime/server/cookie.js @@ -17,14 +17,6 @@ const cookie_paths = {}; */ const MAX_COOKIE_SIZE = 4129; -// TODO 3.0 remove this check -/** @param {import('./page/types.js').Cookie['options']} options */ -function validate_options(options) { - if (options?.path === undefined) { - throw new Error('You must specify a `path` when setting, deleting or serializing cookies'); - } -} - /** * Generates a unique key for a cookie based on its domain, path, and name in * the format: `/?`. @@ -154,7 +146,6 @@ export function get_cookies(request, url) { * @param {import('./page/types.js').Cookie['options']} options */ set(name, value, options) { - validate_options(options); set_internal(name, value, { ...defaults, ...options }); }, @@ -163,7 +154,6 @@ export function get_cookies(request, url) { * @param {import('./page/types.js').Cookie['options']} options */ delete(name, options) { - validate_options(options); cookies.set(name, '', { ...options, maxAge: 0 }); }, @@ -173,8 +163,6 @@ export function get_cookies(request, url) { * @param {import('./page/types.js').Cookie['options']} options */ serialize(name, value, options) { - validate_options(options); - let path = options.path; if (!options.domain || options.domain === url.hostname) { From d10eae5e6a66f80969c22ace0ff8c0e9ff573fd6 Mon Sep 17 00:00:00 2001 From: Philippe Serhal Date: Mon, 23 Feb 2026 01:30:17 -0500 Subject: [PATCH 014/545] test(adapter-netlify): add more integration test coverage (#15386) This PR adds more integration test coverage for `@sveltejs/adapter-netlify`. --- ### Please don't delete this checklist! Before submitting the PR, please make sure you do the following: - [ ] It's really useful if your PR references an issue where it is discussed ahead of time. In many cases, features are absent for a reason. For large changes, please create an RFC: https://github.com/sveltejs/rfcs - [x] This message body should clearly illustrate what problems it solves. - [x] Ideally, include a test that fails without this PR but passes with it. ### Tests - [x] Run the tests with `pnpm test` and lint the project with `pnpm lint` and `pnpm check` ### Changesets - [ ] If your PR makes a change that should be noted in one or more packages' changelogs, generate a changeset by running `pnpm changeset` and following the prompts. Changesets that add features should be `minor` and those that fix bugs should be `patch`. Please prefix changeset messages with `feat:`, `fix:`, or `chore:`. ### Edits - [x] Please ensure that 'Allow edits from maintainers' is checked. PRs without this option may be closed. --------- Co-authored-by: Tee Ming --- packages/adapter-netlify/index.js | 7 +++--- packages/adapter-netlify/package.json | 2 +- .../test/apps/basic/.gitignore | 2 +- .../adapter-netlify/test/apps/basic/_headers | 2 ++ .../test/apps/basic/_redirects | 1 + .../test/apps/basic/netlify.toml | 6 ++--- .../apps/basic/src/instrumentation.server.js | 1 - .../test/apps/basic/src/routes/+page.svelte | 1 + .../routes/greeting/[name]/+page.server.js | 4 ++++ .../src/routes/greeting/[name]/+page.svelte | 5 +++++ .../test/apps/basic/svelte.config.js | 7 +----- .../test/apps/basic/test/test.js | 22 +++++++++++++++++++ .../adapter-netlify/test/apps/edge/_headers | 2 ++ .../adapter-netlify/test/apps/edge/_redirects | 1 + .../test/apps/edge/netlify.toml | 8 +++---- .../test/apps/edge/src/routes/+page.svelte | 1 + .../routes/greeting/[name]/+page.server.js | 4 ++++ .../src/routes/greeting/[name]/+page.svelte | 5 +++++ .../test/apps/edge/test/test.js | 17 ++++++++++++++ .../test/apps/instrumentation/.gitignore | 6 +++++ .../test/apps/instrumentation/netlify.toml | 8 +++++++ .../test/apps/instrumentation/package.json | 19 ++++++++++++++++ .../apps/instrumentation/playwright.config.js | 1 + .../test/apps/instrumentation/src/app.html | 12 ++++++++++ .../src/instrumentation.server.js | 1 + .../instrumentation/src/routes/+page.svelte | 1 + .../src/routes/instrumented/+server.js | 3 +++ .../apps/instrumentation/svelte.config.js | 15 +++++++++++++ .../test/apps/instrumentation/test/test.js | 13 +++++++++++ .../test/apps/instrumentation/tsconfig.json | 14 ++++++++++++ .../test/apps/instrumentation/vite.config.ts | 11 ++++++++++ .../test/apps/split/.gitignore | 2 +- .../test/apps/split/_redirects | 1 + .../test/apps/split/netlify.toml | 6 ++--- .../apps/split/src/instrumentation.server.js | 1 - .../test/apps/split/src/routes/+page.svelte | 1 + .../routes/greeting/[name]/+page.server.js | 4 ++++ .../src/routes/greeting/[name]/+page.svelte | 5 +++++ .../test/apps/split/svelte.config.js | 3 --- .../test/apps/split/test/test.js | 16 ++++++++++++++ packages/adapter-netlify/test/preview.js | 13 ++++++----- pnpm-lock.yaml | 15 +++++++++++++ 42 files changed, 235 insertions(+), 34 deletions(-) create mode 100644 packages/adapter-netlify/test/apps/basic/_headers create mode 100644 packages/adapter-netlify/test/apps/basic/_redirects delete mode 100644 packages/adapter-netlify/test/apps/basic/src/instrumentation.server.js create mode 100644 packages/adapter-netlify/test/apps/basic/src/routes/+page.svelte create mode 100644 packages/adapter-netlify/test/apps/basic/src/routes/greeting/[name]/+page.server.js create mode 100644 packages/adapter-netlify/test/apps/basic/src/routes/greeting/[name]/+page.svelte create mode 100644 packages/adapter-netlify/test/apps/edge/_headers create mode 100644 packages/adapter-netlify/test/apps/edge/_redirects create mode 100644 packages/adapter-netlify/test/apps/edge/src/routes/+page.svelte create mode 100644 packages/adapter-netlify/test/apps/edge/src/routes/greeting/[name]/+page.server.js create mode 100644 packages/adapter-netlify/test/apps/edge/src/routes/greeting/[name]/+page.svelte create mode 100644 packages/adapter-netlify/test/apps/instrumentation/.gitignore create mode 100644 packages/adapter-netlify/test/apps/instrumentation/netlify.toml create mode 100644 packages/adapter-netlify/test/apps/instrumentation/package.json create mode 100644 packages/adapter-netlify/test/apps/instrumentation/playwright.config.js create mode 100644 packages/adapter-netlify/test/apps/instrumentation/src/app.html create mode 100644 packages/adapter-netlify/test/apps/instrumentation/src/instrumentation.server.js create mode 100644 packages/adapter-netlify/test/apps/instrumentation/src/routes/+page.svelte create mode 100644 packages/adapter-netlify/test/apps/instrumentation/src/routes/instrumented/+server.js create mode 100644 packages/adapter-netlify/test/apps/instrumentation/svelte.config.js create mode 100644 packages/adapter-netlify/test/apps/instrumentation/test/test.js create mode 100644 packages/adapter-netlify/test/apps/instrumentation/tsconfig.json create mode 100644 packages/adapter-netlify/test/apps/instrumentation/vite.config.ts create mode 100644 packages/adapter-netlify/test/apps/split/_redirects delete mode 100644 packages/adapter-netlify/test/apps/split/src/instrumentation.server.js create mode 100644 packages/adapter-netlify/test/apps/split/src/routes/+page.svelte create mode 100644 packages/adapter-netlify/test/apps/split/src/routes/greeting/[name]/+page.server.js create mode 100644 packages/adapter-netlify/test/apps/split/src/routes/greeting/[name]/+page.svelte diff --git a/packages/adapter-netlify/index.js b/packages/adapter-netlify/index.js index 337392a3c29e..627c64a5a8f4 100644 --- a/packages/adapter-netlify/index.js +++ b/packages/adapter-netlify/index.js @@ -65,7 +65,8 @@ export default function ({ split = false, edge = edge_set_in_env_var } = {}) { builder.rimraf(publish); builder.rimraf('.netlify/v1'); - // clean up legacy directories from older adapter versions + // clean up legacy directories from older adapter versions to avoid + // gnarly edge cases when an existing project is upgraded to this version builder.rimraf('.netlify/edge-functions'); builder.rimraf('.netlify/server'); builder.rimraf('.netlify/package.json'); @@ -100,7 +101,7 @@ export default function ({ split = false, edge = edge_set_in_env_var } = {}) { await generate_edge_functions({ builder }); } else { - generate_lambda_functions({ builder, split, publish }); + generate_serverless_functions({ builder, split, publish }); } }, @@ -117,7 +118,7 @@ export default function ({ split = false, edge = edge_set_in_env_var } = {}) { * @param { string } params.publish * @param { boolean } params.split */ -function generate_lambda_functions({ builder, publish, split }) { +function generate_serverless_functions({ builder, publish, split }) { // https://docs.netlify.com/build/frameworks/frameworks-api/#netlifyv1functions builder.mkdirp(netlify_framework_serverless_path); diff --git a/packages/adapter-netlify/package.json b/packages/adapter-netlify/package.json index 76edec12df6f..ffff6c149acf 100644 --- a/packages/adapter-netlify/package.json +++ b/packages/adapter-netlify/package.json @@ -38,7 +38,7 @@ "check": "tsc", "lint": "prettier --check .", "format": "pnpm lint --write", - "test": "pnpm test:integration", + "test": "pnpm test:unit && pnpm test:integration", "test:unit": "vitest run", "test:integration": "pnpm build && pnpm -r --workspace-concurrency 1 --filter=\"./test/**\" test", "prepublishOnly": "pnpm build" diff --git a/packages/adapter-netlify/test/apps/basic/.gitignore b/packages/adapter-netlify/test/apps/basic/.gitignore index 88f661c765c6..4150a3674e3a 100644 --- a/packages/adapter-netlify/test/apps/basic/.gitignore +++ b/packages/adapter-netlify/test/apps/basic/.gitignore @@ -3,4 +3,4 @@ node_modules /.svelte-kit /.netlify /build -deno.lock \ No newline at end of file +deno.lock diff --git a/packages/adapter-netlify/test/apps/basic/_headers b/packages/adapter-netlify/test/apps/basic/_headers new file mode 100644 index 000000000000..01c0aab8e046 --- /dev/null +++ b/packages/adapter-netlify/test/apps/basic/_headers @@ -0,0 +1,2 @@ +/custom-header-path + X-Custom-Header: test-value diff --git a/packages/adapter-netlify/test/apps/basic/_redirects b/packages/adapter-netlify/test/apps/basic/_redirects new file mode 100644 index 000000000000..fd5703a26e6a --- /dev/null +++ b/packages/adapter-netlify/test/apps/basic/_redirects @@ -0,0 +1 @@ +/redirect-me /greeting/redirected 301 diff --git a/packages/adapter-netlify/test/apps/basic/netlify.toml b/packages/adapter-netlify/test/apps/basic/netlify.toml index 00917ab74a18..a19ca0df6798 100644 --- a/packages/adapter-netlify/test/apps/basic/netlify.toml +++ b/packages/adapter-netlify/test/apps/basic/netlify.toml @@ -1,8 +1,8 @@ [build] publish = "build" -# TODO: remove this once @netlify/dev works with the Netlify frameworks API -# we are purposely misusing the user functions config to discover our framework -# build output because the Netlify dev plugin doesn't currently detect it +# TODO(serhalp): remove this when @netlify/dev supports serve/preview. +# @netlify/dev does not yet have explicit support for a "serve" mode, but this funky workaround is +# sufficient for our purposes for now. NOTE: do not do this in real apps; this is only for testing. [functions] directory = ".netlify/v1/functions" diff --git a/packages/adapter-netlify/test/apps/basic/src/instrumentation.server.js b/packages/adapter-netlify/test/apps/basic/src/instrumentation.server.js deleted file mode 100644 index acc9022e1d64..000000000000 --- a/packages/adapter-netlify/test/apps/basic/src/instrumentation.server.js +++ /dev/null @@ -1 +0,0 @@ -// this is just here to make sure the changes resulting from it work diff --git a/packages/adapter-netlify/test/apps/basic/src/routes/+page.svelte b/packages/adapter-netlify/test/apps/basic/src/routes/+page.svelte new file mode 100644 index 000000000000..03c350d48255 --- /dev/null +++ b/packages/adapter-netlify/test/apps/basic/src/routes/+page.svelte @@ -0,0 +1 @@ +

Hello from SvelteKit

diff --git a/packages/adapter-netlify/test/apps/basic/src/routes/greeting/[name]/+page.server.js b/packages/adapter-netlify/test/apps/basic/src/routes/greeting/[name]/+page.server.js new file mode 100644 index 000000000000..31e005a89bad --- /dev/null +++ b/packages/adapter-netlify/test/apps/basic/src/routes/greeting/[name]/+page.server.js @@ -0,0 +1,4 @@ +/** @type {import('./$types').PageServerLoad} */ +export function load({ params }) { + return { name: params.name }; +} diff --git a/packages/adapter-netlify/test/apps/basic/src/routes/greeting/[name]/+page.svelte b/packages/adapter-netlify/test/apps/basic/src/routes/greeting/[name]/+page.svelte new file mode 100644 index 000000000000..4dcbba568369 --- /dev/null +++ b/packages/adapter-netlify/test/apps/basic/src/routes/greeting/[name]/+page.svelte @@ -0,0 +1,5 @@ + + +

Hello {data.name}

diff --git a/packages/adapter-netlify/test/apps/basic/svelte.config.js b/packages/adapter-netlify/test/apps/basic/svelte.config.js index 050579db13ba..20cd2b3ff5b8 100644 --- a/packages/adapter-netlify/test/apps/basic/svelte.config.js +++ b/packages/adapter-netlify/test/apps/basic/svelte.config.js @@ -3,12 +3,7 @@ import adapter from '../../../index.js'; /** @type {import('@sveltejs/kit').Config} */ const config = { kit: { - adapter: adapter(), - experimental: { - instrumentation: { - server: true - } - } + adapter: adapter() } }; diff --git a/packages/adapter-netlify/test/apps/basic/test/test.js b/packages/adapter-netlify/test/apps/basic/test/test.js index 50329932eb04..89d91598c165 100644 --- a/packages/adapter-netlify/test/apps/basic/test/test.js +++ b/packages/adapter-netlify/test/apps/basic/test/test.js @@ -5,8 +5,30 @@ import { expect, test } from '@playwright/test'; const __dirname = path.dirname(fileURLToPath(import.meta.url)); +test('page renders', async ({ request }) => { + const response = await request.get('/'); + expect(response.status()).toBe(200); + expect(await response.text()).toContain('Hello from SvelteKit'); +}); + +test('dynamic route works', async ({ request }) => { + const response = await request.get('/greeting/world'); + expect(response.status()).toBe(200); + expect(await response.text()).toContain('Hello world'); +}); + test('read from $app/server works', async ({ request }) => { const content = fs.readFileSync(path.resolve(__dirname, '../src/routes/read/file.txt'), 'utf-8'); const response = await request.get('/read'); expect(await response.text()).toBe(content); }); + +test('_redirects are copied to publish directory', () => { + const redirects = fs.readFileSync(path.resolve(__dirname, '../build/_redirects'), 'utf-8'); + expect(redirects).toContain('/redirect-me /greeting/redirected 301'); +}); + +test('_headers are copied to publish directory', () => { + const headers = fs.readFileSync(path.resolve(__dirname, '../build/_headers'), 'utf-8'); + expect(headers).toContain('X-Custom-Header: test-value'); +}); diff --git a/packages/adapter-netlify/test/apps/edge/_headers b/packages/adapter-netlify/test/apps/edge/_headers new file mode 100644 index 000000000000..01c0aab8e046 --- /dev/null +++ b/packages/adapter-netlify/test/apps/edge/_headers @@ -0,0 +1,2 @@ +/custom-header-path + X-Custom-Header: test-value diff --git a/packages/adapter-netlify/test/apps/edge/_redirects b/packages/adapter-netlify/test/apps/edge/_redirects new file mode 100644 index 000000000000..fd5703a26e6a --- /dev/null +++ b/packages/adapter-netlify/test/apps/edge/_redirects @@ -0,0 +1 @@ +/redirect-me /greeting/redirected 301 diff --git a/packages/adapter-netlify/test/apps/edge/netlify.toml b/packages/adapter-netlify/test/apps/edge/netlify.toml index 5ea18d6abd4e..cc05e8c07a1d 100644 --- a/packages/adapter-netlify/test/apps/edge/netlify.toml +++ b/packages/adapter-netlify/test/apps/edge/netlify.toml @@ -1,13 +1,11 @@ [build] publish = "build" -# TODO: remove this once @netlify/dev works with the Netlify frameworks API -# we are purposely misusing the edge functions config to discover our framework -# build output because the Netlify dev plugin doesn't currently detect it +# TODO(serhalp): remove this when @netlify/dev supports serve/preview. +# @netlify/dev does not yet have explicit support for a "serve" mode, but this funky workaround is +# sufficient for our purposes for now. NOTE: do not do this in real apps; this is only for testing. edge_functions = ".netlify/v1/edge-functions" -# Netlify dev plugin doesn't detect .netlify/v1/config.json [[edge_functions]] function = "sveltekit-render" path = "/*" -excludedPath = ["/_app/immutable/*", "/_app/version.json", "/.netlify/*"] diff --git a/packages/adapter-netlify/test/apps/edge/src/routes/+page.svelte b/packages/adapter-netlify/test/apps/edge/src/routes/+page.svelte new file mode 100644 index 000000000000..03c350d48255 --- /dev/null +++ b/packages/adapter-netlify/test/apps/edge/src/routes/+page.svelte @@ -0,0 +1 @@ +

Hello from SvelteKit

diff --git a/packages/adapter-netlify/test/apps/edge/src/routes/greeting/[name]/+page.server.js b/packages/adapter-netlify/test/apps/edge/src/routes/greeting/[name]/+page.server.js new file mode 100644 index 000000000000..31e005a89bad --- /dev/null +++ b/packages/adapter-netlify/test/apps/edge/src/routes/greeting/[name]/+page.server.js @@ -0,0 +1,4 @@ +/** @type {import('./$types').PageServerLoad} */ +export function load({ params }) { + return { name: params.name }; +} diff --git a/packages/adapter-netlify/test/apps/edge/src/routes/greeting/[name]/+page.svelte b/packages/adapter-netlify/test/apps/edge/src/routes/greeting/[name]/+page.svelte new file mode 100644 index 000000000000..4dcbba568369 --- /dev/null +++ b/packages/adapter-netlify/test/apps/edge/src/routes/greeting/[name]/+page.svelte @@ -0,0 +1,5 @@ + + +

Hello {data.name}

diff --git a/packages/adapter-netlify/test/apps/edge/test/test.js b/packages/adapter-netlify/test/apps/edge/test/test.js index 50329932eb04..8053aaa563a2 100644 --- a/packages/adapter-netlify/test/apps/edge/test/test.js +++ b/packages/adapter-netlify/test/apps/edge/test/test.js @@ -5,8 +5,25 @@ import { expect, test } from '@playwright/test'; const __dirname = path.dirname(fileURLToPath(import.meta.url)); +test('page renders', async ({ request }) => { + const response = await request.get('/'); + expect(response.status()).toBe(200); + expect(await response.text()).toContain('Hello from SvelteKit'); +}); + +test('dynamic route works', async ({ request }) => { + const response = await request.get('/greeting/world'); + expect(response.status()).toBe(200); + expect(await response.text()).toContain('Hello world'); +}); + test('read from $app/server works', async ({ request }) => { const content = fs.readFileSync(path.resolve(__dirname, '../src/routes/read/file.txt'), 'utf-8'); const response = await request.get('/read'); expect(await response.text()).toBe(content); }); + +test('_headers are copied to publish directory', () => { + const headers = fs.readFileSync(path.resolve(__dirname, '../build/_headers'), 'utf-8'); + expect(headers).toContain('X-Custom-Header: test-value'); +}); diff --git a/packages/adapter-netlify/test/apps/instrumentation/.gitignore b/packages/adapter-netlify/test/apps/instrumentation/.gitignore new file mode 100644 index 000000000000..88f661c765c6 --- /dev/null +++ b/packages/adapter-netlify/test/apps/instrumentation/.gitignore @@ -0,0 +1,6 @@ +.DS_Store +node_modules +/.svelte-kit +/.netlify +/build +deno.lock \ No newline at end of file diff --git a/packages/adapter-netlify/test/apps/instrumentation/netlify.toml b/packages/adapter-netlify/test/apps/instrumentation/netlify.toml new file mode 100644 index 000000000000..d2d45458b84f --- /dev/null +++ b/packages/adapter-netlify/test/apps/instrumentation/netlify.toml @@ -0,0 +1,8 @@ +[build] +publish = "build" + +# TODO(serhalp): remove this when @netlify/dev supports serve/preview. +# @netlify/dev does not yet have explicit support for a "serve" mode, but this funky workaround is +# sufficient for our purposes for now. NOTE: do not do this in real apps; this is only for testing. +[functions] +directory = "./.netlify/v1/functions" diff --git a/packages/adapter-netlify/test/apps/instrumentation/package.json b/packages/adapter-netlify/test/apps/instrumentation/package.json new file mode 100644 index 000000000000..e2f181b4503a --- /dev/null +++ b/packages/adapter-netlify/test/apps/instrumentation/package.json @@ -0,0 +1,19 @@ +{ + "name": "test-netlify-instrumentation", + "version": "0.0.1", + "private": true, + "scripts": { + "dev": "vite dev", + "build": "vite build", + "preview": "node ../../preview.js", + "prepare": "svelte-kit sync || echo ''", + "test": "playwright test" + }, + "devDependencies": { + "@sveltejs/kit": "workspace:^", + "@sveltejs/vite-plugin-svelte": "catalog:", + "svelte": "catalog:", + "vite": "catalog:" + }, + "type": "module" +} diff --git a/packages/adapter-netlify/test/apps/instrumentation/playwright.config.js b/packages/adapter-netlify/test/apps/instrumentation/playwright.config.js new file mode 100644 index 000000000000..33d36b651014 --- /dev/null +++ b/packages/adapter-netlify/test/apps/instrumentation/playwright.config.js @@ -0,0 +1 @@ +export { config as default } from '../../utils.js'; diff --git a/packages/adapter-netlify/test/apps/instrumentation/src/app.html b/packages/adapter-netlify/test/apps/instrumentation/src/app.html new file mode 100644 index 000000000000..26bc25de4e52 --- /dev/null +++ b/packages/adapter-netlify/test/apps/instrumentation/src/app.html @@ -0,0 +1,12 @@ + + + + + + %sveltekit.head% + + + +
%sveltekit.body%
+ + diff --git a/packages/adapter-netlify/test/apps/instrumentation/src/instrumentation.server.js b/packages/adapter-netlify/test/apps/instrumentation/src/instrumentation.server.js new file mode 100644 index 000000000000..00368839194c --- /dev/null +++ b/packages/adapter-netlify/test/apps/instrumentation/src/instrumentation.server.js @@ -0,0 +1 @@ +globalThis.__INSTRUMENTATION_RAN__ = true; diff --git a/packages/adapter-netlify/test/apps/instrumentation/src/routes/+page.svelte b/packages/adapter-netlify/test/apps/instrumentation/src/routes/+page.svelte new file mode 100644 index 000000000000..03c350d48255 --- /dev/null +++ b/packages/adapter-netlify/test/apps/instrumentation/src/routes/+page.svelte @@ -0,0 +1 @@ +

Hello from SvelteKit

diff --git a/packages/adapter-netlify/test/apps/instrumentation/src/routes/instrumented/+server.js b/packages/adapter-netlify/test/apps/instrumentation/src/routes/instrumented/+server.js new file mode 100644 index 000000000000..def88b135b5f --- /dev/null +++ b/packages/adapter-netlify/test/apps/instrumentation/src/routes/instrumented/+server.js @@ -0,0 +1,3 @@ +export function GET() { + return new Response(String(globalThis.__INSTRUMENTATION_RAN__ === true)); +} diff --git a/packages/adapter-netlify/test/apps/instrumentation/svelte.config.js b/packages/adapter-netlify/test/apps/instrumentation/svelte.config.js new file mode 100644 index 000000000000..050579db13ba --- /dev/null +++ b/packages/adapter-netlify/test/apps/instrumentation/svelte.config.js @@ -0,0 +1,15 @@ +import adapter from '../../../index.js'; + +/** @type {import('@sveltejs/kit').Config} */ +const config = { + kit: { + adapter: adapter(), + experimental: { + instrumentation: { + server: true + } + } + } +}; + +export default config; diff --git a/packages/adapter-netlify/test/apps/instrumentation/test/test.js b/packages/adapter-netlify/test/apps/instrumentation/test/test.js new file mode 100644 index 000000000000..452b099714a3 --- /dev/null +++ b/packages/adapter-netlify/test/apps/instrumentation/test/test.js @@ -0,0 +1,13 @@ +import { expect, test } from '@playwright/test'; + +test('page renders', async ({ request }) => { + const response = await request.get('/'); + expect(response.status()).toBe(200); + expect(await response.text()).toContain('Hello from SvelteKit'); +}); + +test('instrumentation.server.js runs at startup', async ({ request }) => { + const response = await request.get('/instrumented'); + expect(response.status()).toBe(200); + expect(await response.text()).toBe('true'); +}); diff --git a/packages/adapter-netlify/test/apps/instrumentation/tsconfig.json b/packages/adapter-netlify/test/apps/instrumentation/tsconfig.json new file mode 100644 index 000000000000..34380ebc986e --- /dev/null +++ b/packages/adapter-netlify/test/apps/instrumentation/tsconfig.json @@ -0,0 +1,14 @@ +{ + "compilerOptions": { + "allowJs": true, + "checkJs": true, + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "resolveJsonModule": true, + "skipLibCheck": true, + "sourceMap": true, + "strict": true, + "moduleResolution": "bundler" + }, + "extends": "./.svelte-kit/tsconfig.json" +} diff --git a/packages/adapter-netlify/test/apps/instrumentation/vite.config.ts b/packages/adapter-netlify/test/apps/instrumentation/vite.config.ts new file mode 100644 index 000000000000..72a307cc0e56 --- /dev/null +++ b/packages/adapter-netlify/test/apps/instrumentation/vite.config.ts @@ -0,0 +1,11 @@ +import { sveltekit } from '@sveltejs/kit/vite'; +import type { UserConfig } from 'vite'; + +const config: UserConfig = { + build: { + minify: false + }, + plugins: [sveltekit()] +}; + +export default config; diff --git a/packages/adapter-netlify/test/apps/split/.gitignore b/packages/adapter-netlify/test/apps/split/.gitignore index 88f661c765c6..4150a3674e3a 100644 --- a/packages/adapter-netlify/test/apps/split/.gitignore +++ b/packages/adapter-netlify/test/apps/split/.gitignore @@ -3,4 +3,4 @@ node_modules /.svelte-kit /.netlify /build -deno.lock \ No newline at end of file +deno.lock diff --git a/packages/adapter-netlify/test/apps/split/_redirects b/packages/adapter-netlify/test/apps/split/_redirects new file mode 100644 index 000000000000..fd5703a26e6a --- /dev/null +++ b/packages/adapter-netlify/test/apps/split/_redirects @@ -0,0 +1 @@ +/redirect-me /greeting/redirected 301 diff --git a/packages/adapter-netlify/test/apps/split/netlify.toml b/packages/adapter-netlify/test/apps/split/netlify.toml index 00917ab74a18..a19ca0df6798 100644 --- a/packages/adapter-netlify/test/apps/split/netlify.toml +++ b/packages/adapter-netlify/test/apps/split/netlify.toml @@ -1,8 +1,8 @@ [build] publish = "build" -# TODO: remove this once @netlify/dev works with the Netlify frameworks API -# we are purposely misusing the user functions config to discover our framework -# build output because the Netlify dev plugin doesn't currently detect it +# TODO(serhalp): remove this when @netlify/dev supports serve/preview. +# @netlify/dev does not yet have explicit support for a "serve" mode, but this funky workaround is +# sufficient for our purposes for now. NOTE: do not do this in real apps; this is only for testing. [functions] directory = ".netlify/v1/functions" diff --git a/packages/adapter-netlify/test/apps/split/src/instrumentation.server.js b/packages/adapter-netlify/test/apps/split/src/instrumentation.server.js deleted file mode 100644 index acc9022e1d64..000000000000 --- a/packages/adapter-netlify/test/apps/split/src/instrumentation.server.js +++ /dev/null @@ -1 +0,0 @@ -// this is just here to make sure the changes resulting from it work diff --git a/packages/adapter-netlify/test/apps/split/src/routes/+page.svelte b/packages/adapter-netlify/test/apps/split/src/routes/+page.svelte new file mode 100644 index 000000000000..03c350d48255 --- /dev/null +++ b/packages/adapter-netlify/test/apps/split/src/routes/+page.svelte @@ -0,0 +1 @@ +

Hello from SvelteKit

diff --git a/packages/adapter-netlify/test/apps/split/src/routes/greeting/[name]/+page.server.js b/packages/adapter-netlify/test/apps/split/src/routes/greeting/[name]/+page.server.js new file mode 100644 index 000000000000..31e005a89bad --- /dev/null +++ b/packages/adapter-netlify/test/apps/split/src/routes/greeting/[name]/+page.server.js @@ -0,0 +1,4 @@ +/** @type {import('./$types').PageServerLoad} */ +export function load({ params }) { + return { name: params.name }; +} diff --git a/packages/adapter-netlify/test/apps/split/src/routes/greeting/[name]/+page.svelte b/packages/adapter-netlify/test/apps/split/src/routes/greeting/[name]/+page.svelte new file mode 100644 index 000000000000..4dcbba568369 --- /dev/null +++ b/packages/adapter-netlify/test/apps/split/src/routes/greeting/[name]/+page.svelte @@ -0,0 +1,5 @@ + + +

Hello {data.name}

diff --git a/packages/adapter-netlify/test/apps/split/svelte.config.js b/packages/adapter-netlify/test/apps/split/svelte.config.js index f9615fced0bc..d8a8964901c7 100644 --- a/packages/adapter-netlify/test/apps/split/svelte.config.js +++ b/packages/adapter-netlify/test/apps/split/svelte.config.js @@ -5,9 +5,6 @@ const config = { kit: { adapter: adapter({ split: true }), experimental: { - instrumentation: { - server: true - }, remoteFunctions: true } } diff --git a/packages/adapter-netlify/test/apps/split/test/test.js b/packages/adapter-netlify/test/apps/split/test/test.js index 1e502c5c559a..9ab80a929fb5 100644 --- a/packages/adapter-netlify/test/apps/split/test/test.js +++ b/packages/adapter-netlify/test/apps/split/test/test.js @@ -1,5 +1,10 @@ +import fs from 'node:fs'; +import path from 'node:path'; +import { fileURLToPath } from 'node:url'; import { expect, test } from '@playwright/test'; +const __dirname = path.dirname(fileURLToPath(import.meta.url)); + test('routes to routes with dynamic params', async ({ page }) => { await page.goto('/dynamic/123'); await expect(page.locator('p')).toHaveText('id: 123'); @@ -20,3 +25,14 @@ test('client-side fetch for query remote function data', async ({ page }) => { await page.goto('/remote/query'); await expect(page.locator('p')).toHaveText('a: 1'); }); + +test('split generates multiple function files', () => { + const functions_dir = path.resolve(__dirname, '../.netlify/v1/functions'); + const files = fs.readdirSync(functions_dir).filter((f) => f.startsWith('sveltekit-')); + expect(files.length).toBeGreaterThan(1); +}); + +test('_redirects are copied to publish directory', () => { + const redirects = fs.readFileSync(path.resolve(__dirname, '../build/_redirects'), 'utf-8'); + expect(redirects).toContain('/redirect-me /greeting/redirected 301'); +}); diff --git a/packages/adapter-netlify/test/preview.js b/packages/adapter-netlify/test/preview.js index 603d47741d82..c142137e9663 100644 --- a/packages/adapter-netlify/test/preview.js +++ b/packages/adapter-netlify/test/preview.js @@ -6,19 +6,20 @@ import process from 'node:process'; import { getRequest, setResponse } from '@sveltejs/kit/node'; const netlifyDev = new NetlifyDev({}); - -const serverReady = netlifyDev.start(); +await netlifyDev.start(); const port = process.env.PORT ? +process.env.PORT : 8888; const base = `http://localhost:${port}`; http .createServer(async (req, res) => { - await serverReady; const request = await getRequest({ request: req, base }); - const response = - (await netlifyDev.handle(request)) ?? new Response('Not Found', { status: 404 }); - await setResponse(res, response); + const response = await netlifyDev.handle(request); + if (response) { + await setResponse(res, response); + return; + } + await setResponse(res, new Response('Not Found', { status: 404 })); }) .listen(port); console.log(`Netlify Dev listening on http://localhost:${port}`); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 8a0e39e69800..31b78ed6c4cf 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -293,6 +293,21 @@ importers: specifier: 'catalog:' version: 6.4.1(@types/node@24.10.13)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) + packages/adapter-netlify/test/apps/instrumentation: + devDependencies: + '@sveltejs/kit': + specifier: workspace:^ + version: link:../../../../kit + '@sveltejs/vite-plugin-svelte': + specifier: 'catalog:' + version: 6.2.4(svelte@5.51.5)(vite@6.4.1(@types/node@24.10.13)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) + svelte: + specifier: 'catalog:' + version: 5.51.5 + vite: + specifier: 'catalog:' + version: 6.4.1(@types/node@24.10.13)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) + packages/adapter-netlify/test/apps/split: devDependencies: '@sveltejs/kit': From 1f87a79b1837e68c668492cd4c2e169fd053b389 Mon Sep 17 00:00:00 2001 From: Ben McCann <322311+benmccann@users.noreply.github.com> Date: Mon, 23 Feb 2026 12:07:13 -0800 Subject: [PATCH 015/545] chore: remove Svelte 4 code (#15387) --- .../core/sync/create_manifest_data/index.js | 3 +- packages/kit/src/core/sync/utils.js | 8 -- .../src/core/sync/write_client_manifest.js | 4 +- packages/kit/src/core/sync/write_root.js | 116 ++++++------------ packages/kit/src/core/sync/write_server.js | 4 +- packages/kit/src/exports/vite/index.js | 12 +- .../components/{svelte-5 => }/error.svelte | 0 .../components/{svelte-5 => }/layout.svelte | 2 +- .../runtime/components/svelte-4/error.svelte | 6 - .../runtime/components/svelte-4/layout.svelte | 1 - scripts/print-flaky-test-report.js | 2 + scripts/sync-all.js | 9 +- tsconfig.json | 2 +- 13 files changed, 57 insertions(+), 112 deletions(-) rename packages/kit/src/runtime/components/{svelte-5 => }/error.svelte (100%) rename packages/kit/src/runtime/components/{svelte-5 => }/layout.svelte (56%) delete mode 100644 packages/kit/src/runtime/components/svelte-4/error.svelte delete mode 100644 packages/kit/src/runtime/components/svelte-4/layout.svelte diff --git a/packages/kit/src/core/sync/create_manifest_data/index.js b/packages/kit/src/core/sync/create_manifest_data/index.js index 721de50391ba..27dc4f8cba5d 100644 --- a/packages/kit/src/core/sync/create_manifest_data/index.js +++ b/packages/kit/src/core/sync/create_manifest_data/index.js @@ -6,7 +6,6 @@ import { styleText } from 'node:util'; import { posixify, resolve_entry } from '../../../utils/filesystem.js'; import { parse_route_id } from '../../../utils/routing.js'; import { list_files, runtime_directory } from '../../utils.js'; -import { isSvelte5Plus } from '../utils.js'; import { sort_routes } from './sort.js'; import { create_node_analyser, @@ -24,7 +23,7 @@ import { */ export default function create_manifest_data({ config, - fallback = `${runtime_directory}/components/${isSvelte5Plus() ? 'svelte-5' : 'svelte-4'}`, + fallback = `${runtime_directory}/components`, cwd = process.cwd() }) { const assets = create_assets(config); diff --git a/packages/kit/src/core/sync/utils.js b/packages/kit/src/core/sync/utils.js index be3ecc22b347..0e0181366f9d 100644 --- a/packages/kit/src/core/sync/utils.js +++ b/packages/kit/src/core/sync/utils.js @@ -1,10 +1,6 @@ import fs from 'node:fs'; import path from 'node:path'; import { mkdirp } from '../../utils/filesystem.js'; -import { import_peer } from '../../utils/import.js'; - -/** @type {{ VERSION: string }} */ -const { VERSION } = await import_peer('svelte/compiler'); /** @type {Map} */ const previous_contents = new Map(); @@ -72,7 +68,3 @@ export function dedent(strings, ...values) { return str; } - -export function isSvelte5Plus() { - return Number(VERSION[0]) >= 5; -} diff --git a/packages/kit/src/core/sync/write_client_manifest.js b/packages/kit/src/core/sync/write_client_manifest.js index 06789ab95c80..f47f21991ee4 100644 --- a/packages/kit/src/core/sync/write_client_manifest.js +++ b/packages/kit/src/core/sync/write_client_manifest.js @@ -2,7 +2,7 @@ import path from 'node:path'; import { styleText } from 'node:util'; import { relative_path, resolve_entry } from '../../utils/filesystem.js'; import { s } from '../../utils/misc.js'; -import { dedent, isSvelte5Plus, write_if_changed } from './utils.js'; +import { dedent, write_if_changed } from './utils.js'; /** * Writes the client manifest to disk. The manifest is used to power the router. It contains the @@ -176,7 +176,7 @@ export function write_client_manifest(kit, manifest_data, output, metadata) { export const decode = (type, value) => decoders[type](value); - export { default as root } from '../root.${isSvelte5Plus() ? 'js' : 'svelte'}'; + export { default as root } from '../root.js'; ` ); diff --git a/packages/kit/src/core/sync/write_root.js b/packages/kit/src/core/sync/write_root.js index 5866b3d8e783..a9da7e2e8106 100644 --- a/packages/kit/src/core/sync/write_root.js +++ b/packages/kit/src/core/sync/write_root.js @@ -1,4 +1,4 @@ -import { dedent, isSvelte5Plus, write_if_changed } from './utils.js'; +import { dedent, write_if_changed } from './utils.js'; /** * @param {import('types').ManifestData} manifest_data @@ -22,38 +22,24 @@ export function write_root(manifest_data, output) { let l = max_depth; let pyramid = dedent` - ${ - isSvelte5Plus() - ? ` - ` - : `` - }`; + + `; while (l--) { pyramid = dedent` {#if constructors[${l + 1}]} - ${ - isSvelte5Plus() - ? dedent`{@const Pyramid_${l} = constructors[${l}]} + ${dedent`{@const Pyramid_${l} = constructors[${l}]} ${pyramid} - ` - : dedent` - ${pyramid} - ` - } + `} {:else} - ${ - isSvelte5Plus() - ? dedent` + ${dedent` {@const Pyramid_${l} = constructors[${l}]} - ` - : dedent`` - } + `} {/if} `; @@ -63,61 +49,41 @@ export function write_root(manifest_data, output) { `${output}/root.svelte`, dedent` - ${isSvelte5Plus() ? '' : ''} + ${pyramid} @@ -148,14 +114,12 @@ export function write_root(manifest_data, output) { ` ); - if (isSvelte5Plus()) { - write_if_changed( - `${output}/root.js`, - dedent` - import { asClassComponent } from 'svelte/legacy'; - import Root from './root.svelte'; - export default asClassComponent(Root); - ` - ); - } + write_if_changed( + `${output}/root.js`, + dedent` + import { asClassComponent } from 'svelte/legacy'; + import Root from './root.svelte'; + export default asClassComponent(Root); + ` + ); } diff --git a/packages/kit/src/core/sync/write_server.js b/packages/kit/src/core/sync/write_server.js index 096c0f6c8d3c..64ca62d1f0c0 100644 --- a/packages/kit/src/core/sync/write_server.js +++ b/packages/kit/src/core/sync/write_server.js @@ -6,7 +6,7 @@ import { posixify, resolve_entry } from '../../utils/filesystem.js'; import { s } from '../../utils/misc.js'; import { load_error_page, load_template } from '../config/index.js'; import { runtime_directory } from '../utils.js'; -import { isSvelte5Plus, write_if_changed } from './utils.js'; +import { write_if_changed } from './utils.js'; import { escape_html } from '../../utils/escape.js'; /** @@ -29,7 +29,7 @@ const server_template = ({ template, error_page }) => ` -import root from '../root.${isSvelte5Plus() ? 'js' : 'svelte'}'; +import root from '../root.js'; import { set_building, set_prerendering } from '__sveltekit/environment'; import { set_assets } from '$app/paths/internal/server'; import { set_manifest, set_read_implementation } from '__sveltekit/server'; diff --git a/packages/kit/src/exports/vite/index.js b/packages/kit/src/exports/vite/index.js index 282dc99b6b6a..11f5b3f9e96d 100644 --- a/packages/kit/src/exports/vite/index.js +++ b/packages/kit/src/exports/vite/index.js @@ -27,7 +27,7 @@ import prerender from '../../core/postbuild/prerender.js'; import analyse from '../../core/postbuild/analyse.js'; import { s } from '../../utils/misc.js'; import { hash } from '../../utils/hash.js'; -import { dedent, isSvelte5Plus } from '../../core/sync/utils.js'; +import { dedent } from '../../core/sync/utils.js'; import { env_dynamic_private, env_dynamic_public, @@ -112,10 +112,10 @@ const warning_preprocessor = { const basename = path.basename(filename); - if (basename.startsWith('+layout.') && !has_children(content, isSvelte5Plus())) { + if (basename.startsWith('+layout.') && !has_children(content, true)) { const message = `\n${styleText(['bold', 'red'], path.relative('.', filename))}\n` + - `\`\`${isSvelte5Plus() ? ' or `{@render ...}` tag' : ''}` + + '`` or `{@render ...}` tag' + ' missing — inner content will not be rendered'; if (!warned.has(message)) { @@ -149,11 +149,7 @@ export async function sveltekit() { extensions: svelte_config.extensions, preprocess, onwarn: svelte_config.onwarn, - compilerOptions: { - // @ts-ignore - ignore this property when running `pnpm check` against Svelte 5 in the ecosystem CI - hydratable: isSvelte5Plus() ? undefined : true, - ...svelte_config.compilerOptions - }, + compilerOptions: { ...svelte_config.compilerOptions }, ...svelte_config.vitePlugin }; diff --git a/packages/kit/src/runtime/components/svelte-5/error.svelte b/packages/kit/src/runtime/components/error.svelte similarity index 100% rename from packages/kit/src/runtime/components/svelte-5/error.svelte rename to packages/kit/src/runtime/components/error.svelte diff --git a/packages/kit/src/runtime/components/svelte-5/layout.svelte b/packages/kit/src/runtime/components/layout.svelte similarity index 56% rename from packages/kit/src/runtime/components/svelte-5/layout.svelte rename to packages/kit/src/runtime/components/layout.svelte index 4b7cb066e5aa..17d34e7cf6aa 100644 --- a/packages/kit/src/runtime/components/svelte-5/layout.svelte +++ b/packages/kit/src/runtime/components/layout.svelte @@ -1,5 +1,5 @@ {@render children()} diff --git a/packages/kit/src/runtime/components/svelte-4/error.svelte b/packages/kit/src/runtime/components/svelte-4/error.svelte deleted file mode 100644 index b82ddfaed4b4..000000000000 --- a/packages/kit/src/runtime/components/svelte-4/error.svelte +++ /dev/null @@ -1,6 +0,0 @@ - - -

{$page.status}

-

{$page.error?.message}

diff --git a/packages/kit/src/runtime/components/svelte-4/layout.svelte b/packages/kit/src/runtime/components/svelte-4/layout.svelte deleted file mode 100644 index 4fa864ce7aa9..000000000000 --- a/packages/kit/src/runtime/components/svelte-4/layout.svelte +++ /dev/null @@ -1 +0,0 @@ - diff --git a/scripts/print-flaky-test-report.js b/scripts/print-flaky-test-report.js index d37e73ae978b..ebad60355bc1 100644 --- a/scripts/print-flaky-test-report.js +++ b/scripts/print-flaky-test-report.js @@ -1,3 +1,5 @@ +import * as process from 'node:process'; + // pnpm captures stdout and prefixes it with the package name which breaks the annotations // so save it in a file and print it out at the end // ideally we'd just use cat, but that doesn't work on Windows hence this script diff --git a/scripts/sync-all.js b/scripts/sync-all.js index 7e12ca05b561..08cf8bcf808c 100644 --- a/scripts/sync-all.js +++ b/scripts/sync-all.js @@ -1,6 +1,8 @@ import fs from 'node:fs'; import path from 'node:path'; +import { chdir } from 'node:process'; import { load_config } from '../packages/kit/src/core/config/index.js'; +import { all as syncAll } from '../packages/kit/src/core/sync/sync.js'; // This isn't strictly necessary, but it eliminates some annoying warnings in CI @@ -16,11 +18,8 @@ for (const directories of [ continue; } - process.chdir(cwd); + chdir(cwd); - // we defer this import so that we don't try and resolve `svelte` from - // the root via `isSvelte5Plus`, which would blow up - const sync = await import('../packages/kit/src/core/sync/sync.js'); - await sync.all(await load_config({ cwd }), 'development'); + syncAll(await load_config({ cwd }), 'development'); } } diff --git a/tsconfig.json b/tsconfig.json index a16cc63c8b86..d7ccc88d75da 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -6,5 +6,5 @@ "target": "ESNext", "moduleResolution": "bundler" }, - "include": ["eslint.config.js", ".eslint/*.js"] + "include": ["eslint.config.js", ".eslint/*.js", "scripts"] } From e802ae907c18a997f333a1ab07bdc32f4b473014 Mon Sep 17 00:00:00 2001 From: Ben McCann <322311+benmccann@users.noreply.github.com> Date: Tue, 24 Feb 2026 14:41:19 -0800 Subject: [PATCH 016/545] chore: upgrade to Vite 8 beta (#15376) removes some stuff for testing Node 18 since we don't support it anymore Already separately bumped the peer dependency in another PR for a cleaner PR and changeset --- .github/workflows/ci.yml | 16 +- packages/adapter-auto/package.json | 1 + packages/adapter-cloudflare/package.json | 1 + packages/adapter-netlify/package.json | 1 + packages/adapter-node/package.json | 1 + packages/adapter-vercel/package.json | 1 + .../enhanced-img/test/markup-plugin.spec.js | 2 +- packages/kit/src/exports/vite/index.js | 67 +- packages/package/package.json | 1 + pnpm-lock.yaml | 680 ++++++++++-------- pnpm-workspace.yaml | 21 +- 11 files changed, 440 insertions(+), 352 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 4656da31d7ae..b7d972edf15d 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -75,10 +75,10 @@ jobs: os: ubuntu-latest e2e-browser: 'chromium' vite: 'current' - - node-version: 24 - os: ubuntu-latest - e2e-browser: 'chromium' - vite: 'beta' +# - node-version: 24 +# os: ubuntu-latest +# e2e-browser: 'chromium' +# vite: 'beta' env: KIT_E2E_BROWSER: ${{matrix.e2e-browser}} MATRIX_VITE: ${{matrix.vite}} @@ -260,14 +260,6 @@ jobs: with: deno-version: ^2.2.4 - run: pnpm install --frozen-lockfile - - name: setup overrides for matrix.node - if: matrix.node-version == 18 - run: - | # copies catalogs.node-xx to overrides in pnpm-workspace.yaml so the subsequent `pnpm install` enforces them - yq -i '.overrides =.catalogs."node-18"' pnpm-workspace.yaml - pnpm install --no-frozen-lockfile - git checkout pnpm-lock.yaml pnpm-workspace.yaml # revert changes to pnpm files to avoid cache key changes - pnpm --dir packages/kit ls vite @sveltejs/vite-plugin-svelte - run: pnpm playwright install chromium --no-shell - run: cd packages/kit && pnpm prepublishOnly - run: pnpm run test:others diff --git a/packages/adapter-auto/package.json b/packages/adapter-auto/package.json index c9bec56fcf5a..c9e3ed1982c4 100644 --- a/packages/adapter-auto/package.json +++ b/packages/adapter-auto/package.json @@ -44,6 +44,7 @@ "@sveltejs/vite-plugin-svelte": "catalog:", "@types/node": "catalog:", "typescript": "^5.3.3", + "vite": "catalog:", "vitest": "catalog:" }, "peerDependencies": { diff --git a/packages/adapter-cloudflare/package.json b/packages/adapter-cloudflare/package.json index ae46453ce50b..7945963a18f7 100644 --- a/packages/adapter-cloudflare/package.json +++ b/packages/adapter-cloudflare/package.json @@ -53,6 +53,7 @@ "@types/node": "catalog:", "esbuild": "catalog:", "typescript": "^5.3.3", + "vite": "catalog:", "vitest": "catalog:" }, "peerDependencies": { diff --git a/packages/adapter-netlify/package.json b/packages/adapter-netlify/package.json index d052e0545bcb..2f00c5c00571 100644 --- a/packages/adapter-netlify/package.json +++ b/packages/adapter-netlify/package.json @@ -58,6 +58,7 @@ "@types/node": "catalog:", "rolldown": "^1.0.0-rc.5", "typescript": "^5.3.3", + "vite": "catalog:", "vitest": "catalog:" }, "peerDependencies": { diff --git a/packages/adapter-node/package.json b/packages/adapter-node/package.json index 09da0782e5ae..aa131586cd87 100644 --- a/packages/adapter-node/package.json +++ b/packages/adapter-node/package.json @@ -49,6 +49,7 @@ "polka": "catalog:", "sirv": "^3.0.2", "typescript": "^5.3.3", + "vite": "catalog:", "vitest": "catalog:" }, "dependencies": { diff --git a/packages/adapter-vercel/package.json b/packages/adapter-vercel/package.json index 2c17bfd02398..a87fa3de7f43 100644 --- a/packages/adapter-vercel/package.json +++ b/packages/adapter-vercel/package.json @@ -48,6 +48,7 @@ "@sveltejs/vite-plugin-svelte": "catalog:", "@types/node": "catalog:", "typescript": "^5.3.3", + "vite": "catalog:", "vitest": "catalog:" }, "peerDependencies": { diff --git a/packages/enhanced-img/test/markup-plugin.spec.js b/packages/enhanced-img/test/markup-plugin.spec.js index 1da359e91cff..b6dacafe3ec1 100644 --- a/packages/enhanced-img/test/markup-plugin.spec.js +++ b/packages/enhanced-img/test/markup-plugin.spec.js @@ -41,7 +41,7 @@ it('Image preprocess snapshot test', async () => { if (!transformed.code) throw new Error('transform did not return any code'); // Make imports readable - const ouput = transformed.code.replace(/import/g, '\n\timport'); + const ouput = transformed.code.toString().replace(/import/g, '\n\timport'); await expect(ouput).toMatchFileSnapshot('./Output.svelte'); }); diff --git a/packages/kit/src/exports/vite/index.js b/packages/kit/src/exports/vite/index.js index 5939ea81bdc0..f8eb5801f0ee 100644 --- a/packages/kit/src/exports/vite/index.js +++ b/packages/kit/src/exports/vite/index.js @@ -185,9 +185,6 @@ async function kit({ svelte_config }) { /** @type {import('vite')} */ const vite = await import_peer('vite'); - // @ts-ignore `vite.rolldownVersion` only exists in `vite 8` - const is_rolldown = !!vite.rolldownVersion; - const { kit } = svelte_config; const out = `${kit.outDir}/output`; @@ -299,7 +296,27 @@ async function kit({ svelte_config }) { // this does not affect app code, just handling of imported libraries that use $app or $env '$app', '$env' - ] + ], + rolldownOptions: kit.experimental.remoteFunctions + ? { + plugins: [ + { + name: 'vite-plugin-sveltekit-setup:optimize-remote-functions', + load: { + filter: { + // treat .remote.js files as empty for the purposes of prebundling + id: new RegExp( + `.remote(${kit.moduleExtensions.join('|')})$`.replaceAll('.', '\\.') + ) + }, + handler() { + return ''; + } + } + } + ] + } + : undefined }, ssr: { noExternal: [ @@ -318,40 +335,6 @@ async function kit({ svelte_config }) { } }; - if (kit.experimental.remoteFunctions) { - // treat .remote.js files as empty for the purposes of prebundling - // detects rolldown to avoid a warning message in vite 8 beta - const remote_id_filter = new RegExp( - `.remote(${kit.moduleExtensions.join('|')})$`.replaceAll('.', '\\.') - ); - new_config.optimizeDeps ??= {}; // for some reason ts says this could be undefined even though it was set above - if (is_rolldown) { - // @ts-ignore - new_config.optimizeDeps.rolldownOptions ??= {}; - // @ts-ignore - new_config.optimizeDeps.rolldownOptions.plugins ??= []; - // @ts-ignore - new_config.optimizeDeps.rolldownOptions.plugins.push({ - name: 'vite-plugin-sveltekit-setup:optimize-remote-functions', - load: { - filter: { id: remote_id_filter }, - handler() { - return ''; - } - } - }); - } else { - new_config.optimizeDeps.esbuildOptions ??= {}; - new_config.optimizeDeps.esbuildOptions.plugins ??= []; - new_config.optimizeDeps.esbuildOptions.plugins.push({ - name: 'vite-plugin-sveltekit-setup:optimize-remote-functions', - setup(build) { - build.onLoad({ filter: remote_id_filter }, () => ({ contents: '' })); - } - }); - } - } - const define = { __SVELTEKIT_APP_DIR__: s(kit.appDir), __SVELTEKIT_EMBEDDED__: s(kit.embedded), @@ -924,16 +907,12 @@ async function kit({ svelte_config }) { assetFileNames: `${prefix}/assets/[name].[hash][extname]`, hoistTransitiveImports: false, sourcemapIgnoreList, - inlineDynamicImports: is_rolldown ? undefined : !split, - // @ts-ignore: only available in Vite 8 - codeSplitting: is_rolldown ? split : undefined + codeSplitting: split }, preserveEntrySignatures: 'strict', onwarn(warning, handler) { if ( - (is_rolldown - ? warning.code === 'IMPORT_IS_UNDEFINED' - : warning.code === 'MISSING_EXPORT') && + warning.code === 'IMPORT_IS_UNDEFINED' && warning.id === `${kit.outDir}/generated/client-optimized/app.js` ) { // ignore e.g. undefined `handleError` hook when diff --git a/packages/package/package.json b/packages/package/package.json index 5c5211d5dd6d..d5bb18b34915 100644 --- a/packages/package/package.json +++ b/packages/package/package.json @@ -33,6 +33,7 @@ "svelte": "catalog:", "svelte-preprocess": "catalog:", "typescript": "^5.3.3", + "vite": "catalog:", "vitest": "catalog:" }, "peerDependencies": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 378bc6502425..a29710313837 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -37,8 +37,8 @@ catalogs: specifier: ^9.0.0 version: 9.0.0 '@sveltejs/vite-plugin-svelte': - specifier: ^6.0.0-next.3 - version: 6.2.4 + specifier: ^7.0.0 + version: 7.0.0 '@svitejs/changesets-changelog-github-compact': specifier: ^1.2.0 version: 1.2.0 @@ -58,8 +58,8 @@ catalogs: specifier: ^2.4.7 version: 2.4.7 '@vitest/browser-playwright': - specifier: ^4.0.0 - version: 4.0.16 + specifier: ^4.1.0-beta.4 + version: 4.1.0-beta.4 dropcss: specifier: ^1.0.16 version: 1.0.16 @@ -94,11 +94,11 @@ catalogs: specifier: ^1.1.0 version: 1.2.0 vite: - specifier: ^6.3.5 - version: 6.4.1 + specifier: ^8.0.0-beta.15 + version: 8.0.0-beta.15 vitest: - specifier: ^4.0.0 - version: 4.0.16 + specifier: ^4.1.0-beta.4 + version: 4.1.0-beta.4 wrangler: specifier: ^4.67.0 version: 4.67.0 @@ -136,16 +136,19 @@ importers: version: link:../kit '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 6.2.4(svelte@5.51.5)(vite@6.4.1(@types/node@24.10.13)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) + version: 7.0.0(svelte@5.51.5)(vite@8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0)) '@types/node': specifier: 'catalog:' version: 24.10.13 typescript: specifier: ^5.3.3 version: 5.8.3 + vite: + specifier: 'catalog:' + version: 8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0) vitest: specifier: 'catalog:' - version: 4.0.16(@opentelemetry/api@1.9.0)(@types/node@24.10.13)(@vitest/browser-playwright@4.0.16)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) + version: 4.1.0-beta.4(@opentelemetry/api@1.9.0)(@types/node@24.10.13)(@vitest/browser-playwright@4.1.0-beta.4)(vite@8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0)) packages/adapter-cloudflare: dependencies: @@ -174,9 +177,12 @@ importers: typescript: specifier: ^5.3.3 version: 5.8.3 + vite: + specifier: 'catalog:' + version: 8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.25.12)(jiti@2.4.2)(yaml@2.8.0) vitest: specifier: 'catalog:' - version: 4.0.16(@opentelemetry/api@1.9.0)(@types/node@24.10.13)(@vitest/browser-playwright@4.0.16)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) + version: 4.1.0-beta.4(@opentelemetry/api@1.9.0)(@types/node@24.10.13)(@vitest/browser-playwright@4.1.0-beta.4)(vite@8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.25.12)(jiti@2.4.2)(yaml@2.8.0)) packages/adapter-cloudflare/test/apps/pages: devDependencies: @@ -185,7 +191,7 @@ importers: version: link:../../../../kit '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 6.2.4(svelte@5.51.5)(vite@6.4.1(@types/node@24.10.13)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) + version: 7.0.0(svelte@5.51.5)(vite@8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0)) server-side-dep: specifier: file:server-side-dep version: file:packages/adapter-cloudflare/test/apps/pages/server-side-dep @@ -194,7 +200,7 @@ importers: version: 5.51.5 vite: specifier: 'catalog:' - version: 6.4.1(@types/node@24.10.13)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) + version: 8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0) wrangler: specifier: 'catalog:' version: 4.67.0(@cloudflare/workers-types@4.20260227.0) @@ -206,7 +212,7 @@ importers: version: link:../../../../kit '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 6.2.4(svelte@5.51.5)(vite@6.4.1(@types/node@24.10.13)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) + version: 7.0.0(svelte@5.51.5)(vite@8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0)) server-side-dep: specifier: file:server-side-dep version: file:packages/adapter-cloudflare/test/apps/workers/server-side-dep @@ -215,7 +221,7 @@ importers: version: 5.51.5 vite: specifier: 'catalog:' - version: 6.4.1(@types/node@24.10.13)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) + version: 8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0) wrangler: specifier: 'catalog:' version: 4.67.0(@cloudflare/workers-types@4.20260227.0) @@ -249,7 +255,7 @@ importers: version: link:../kit '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 6.2.4(svelte@5.51.5)(vite@6.4.1(@types/node@24.10.13)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) + version: 7.0.0(svelte@5.51.5)(vite@8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.25.12)(jiti@2.4.2)(yaml@2.8.0)) '@types/node': specifier: 'catalog:' version: 24.10.13 @@ -259,9 +265,12 @@ importers: typescript: specifier: ^5.3.3 version: 5.8.3 + vite: + specifier: 'catalog:' + version: 8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.25.12)(jiti@2.4.2)(yaml@2.8.0) vitest: specifier: 'catalog:' - version: 4.0.16(@opentelemetry/api@1.9.0)(@types/node@24.10.13)(@vitest/browser-playwright@4.0.16)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) + version: 4.1.0-beta.4(@opentelemetry/api@1.9.0)(@types/node@24.10.13)(@vitest/browser-playwright@4.1.0-beta.4)(vite@8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.25.12)(jiti@2.4.2)(yaml@2.8.0)) packages/adapter-netlify/test/apps/basic: devDependencies: @@ -270,13 +279,13 @@ importers: version: link:../../../../kit '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 6.2.4(svelte@5.51.5)(vite@6.4.1(@types/node@24.10.13)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) + version: 7.0.0(svelte@5.51.5)(vite@8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0)) svelte: specifier: 'catalog:' version: 5.51.5 vite: specifier: 'catalog:' - version: 6.4.1(@types/node@24.10.13)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) + version: 8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0) packages/adapter-netlify/test/apps/edge: devDependencies: @@ -285,13 +294,13 @@ importers: version: link:../../../../kit '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 6.2.4(svelte@5.51.5)(vite@6.4.1(@types/node@24.10.13)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) + version: 7.0.0(svelte@5.51.5)(vite@8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0)) svelte: specifier: 'catalog:' version: 5.51.5 vite: specifier: 'catalog:' - version: 6.4.1(@types/node@24.10.13)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) + version: 8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0) packages/adapter-netlify/test/apps/instrumentation: devDependencies: @@ -300,13 +309,13 @@ importers: version: link:../../../../kit '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 6.2.4(svelte@5.51.5)(vite@6.4.1(@types/node@24.10.13)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) + version: 7.0.0(svelte@5.51.5)(vite@8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0)) svelte: specifier: 'catalog:' version: 5.51.5 vite: specifier: 'catalog:' - version: 6.4.1(@types/node@24.10.13)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) + version: 8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0) packages/adapter-netlify/test/apps/split: devDependencies: @@ -315,13 +324,13 @@ importers: version: link:../../../../kit '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 6.2.4(svelte@5.51.5)(vite@6.4.1(@types/node@24.10.13)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) + version: 7.0.0(svelte@5.51.5)(vite@8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0)) svelte: specifier: 'catalog:' version: 5.51.5 vite: specifier: 'catalog:' - version: 6.4.1(@types/node@24.10.13)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) + version: 8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0) packages/adapter-node: dependencies: @@ -337,7 +346,7 @@ importers: version: link:../kit '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 6.2.4(svelte@5.51.5)(vite@6.4.1(@types/node@24.10.13)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) + version: 7.0.0(svelte@5.51.5)(vite@8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0)) '@types/node': specifier: 'catalog:' version: 24.10.13 @@ -350,9 +359,12 @@ importers: typescript: specifier: ^5.3.3 version: 5.8.3 + vite: + specifier: 'catalog:' + version: 8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0) vitest: specifier: 'catalog:' - version: 4.0.16(@opentelemetry/api@1.9.0)(@types/node@24.10.13)(@vitest/browser-playwright@4.0.16)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) + version: 4.1.0-beta.4(@opentelemetry/api@1.9.0)(@types/node@24.10.13)(@vitest/browser-playwright@4.1.0-beta.4)(vite@8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0)) packages/adapter-static: devDependencies: @@ -364,7 +376,7 @@ importers: version: link:../kit '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 6.2.4(svelte@5.51.5)(vite@6.4.1(@types/node@24.10.13)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) + version: 7.0.0(svelte@5.51.5)(vite@8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0)) '@types/node': specifier: 'catalog:' version: 24.10.13 @@ -379,7 +391,7 @@ importers: version: 5.8.3 vite: specifier: 'catalog:' - version: 6.4.1(@types/node@24.10.13)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) + version: 8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0) packages/adapter-static/test/apps/prerendered: devDependencies: @@ -388,7 +400,7 @@ importers: version: link:../../../../kit '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 6.2.4(svelte@5.51.5)(vite@6.4.1(@types/node@24.10.13)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) + version: 7.0.0(svelte@5.51.5)(vite@8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0)) sirv-cli: specifier: 'catalog:' version: 3.0.0 @@ -397,7 +409,7 @@ importers: version: 5.51.5 vite: specifier: 'catalog:' - version: 6.4.1(@types/node@24.10.13)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) + version: 8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0) packages/adapter-static/test/apps/spa: devDependencies: @@ -406,7 +418,7 @@ importers: version: link:../../../../kit '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 6.2.4(svelte@5.51.5)(vite@6.4.1(@types/node@24.10.13)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) + version: 7.0.0(svelte@5.51.5)(vite@8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0)) sirv-cli: specifier: 'catalog:' version: 3.0.0 @@ -415,7 +427,7 @@ importers: version: 5.51.5 vite: specifier: 'catalog:' - version: 6.4.1(@types/node@24.10.13)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) + version: 8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0) packages/adapter-vercel: dependencies: @@ -431,16 +443,19 @@ importers: version: link:../kit '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 6.2.4(svelte@5.51.5)(vite@6.4.1(@types/node@24.10.13)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) + version: 7.0.0(svelte@5.51.5)(vite@8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.25.12)(jiti@2.4.2)(yaml@2.8.0)) '@types/node': specifier: 'catalog:' version: 24.10.13 typescript: specifier: ^5.3.3 version: 5.8.3 + vite: + specifier: 'catalog:' + version: 8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.25.12)(jiti@2.4.2)(yaml@2.8.0) vitest: specifier: 'catalog:' - version: 4.0.16(@opentelemetry/api@1.9.0)(@types/node@24.10.13)(@vitest/browser-playwright@4.0.16)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) + version: 4.1.0-beta.4(@opentelemetry/api@1.9.0)(@types/node@24.10.13)(@vitest/browser-playwright@4.1.0-beta.4)(vite@8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.25.12)(jiti@2.4.2)(yaml@2.8.0)) packages/adapter-vercel/test/apps/basic: devDependencies: @@ -449,7 +464,7 @@ importers: version: link:../../../../kit '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 6.2.4(svelte@5.51.5)(vite@6.4.1(@types/node@24.10.13)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) + version: 7.0.0(svelte@5.51.5)(vite@8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0)) svelte: specifier: 'catalog:' version: 5.51.5 @@ -458,7 +473,7 @@ importers: version: 5.8.3 vite: specifier: 'catalog:' - version: 6.4.1(@types/node@24.10.13)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) + version: 8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0) packages/amp: devDependencies: @@ -489,7 +504,7 @@ importers: devDependencies: '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 6.2.4(svelte@5.51.5)(vite@6.4.1(@types/node@24.10.13)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) + version: 7.0.0(svelte@5.51.5)(vite@8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0)) '@types/estree': specifier: 'catalog:' version: 1.0.8 @@ -507,10 +522,10 @@ importers: version: 5.8.3 vite: specifier: 'catalog:' - version: 6.4.1(@types/node@24.10.13)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) + version: 8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0) vitest: specifier: 'catalog:' - version: 4.0.16(@opentelemetry/api@1.9.0)(@types/node@24.10.13)(@vitest/browser-playwright@4.0.16)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) + version: 4.1.0-beta.4(@opentelemetry/api@1.9.0)(@types/node@24.10.13)(@vitest/browser-playwright@4.1.0-beta.4)(vite@8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0)) packages/enhanced-img/test/apps/basics: devDependencies: @@ -522,19 +537,19 @@ importers: version: link:../../../../kit '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 6.2.4(svelte@5.51.5)(vite@6.4.1(@types/node@24.10.13)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) + version: 7.0.0(svelte@5.51.5)(vite@8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0)) svelte: specifier: 'catalog:' version: 5.51.5 vite: specifier: 'catalog:' - version: 6.4.1(@types/node@24.10.13)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) + version: 8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0) packages/kit: dependencies: '@standard-schema/spec': specifier: ^1.0.0 - version: 1.0.0 + version: 1.1.0 '@sveltejs/acorn-typescript': specifier: ^1.0.5 version: 1.0.9(acorn@8.16.0) @@ -571,7 +586,7 @@ importers: version: 1.58.2 '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 6.2.4(svelte@5.51.5)(vite@6.4.1(@types/node@24.10.13)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) + version: 7.0.0(svelte@5.51.5)(vite@8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0)) '@types/connect': specifier: 'catalog:' version: 3.4.38 @@ -598,10 +613,10 @@ importers: version: 5.8.3 vite: specifier: 'catalog:' - version: 6.4.1(@types/node@24.10.13)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) + version: 8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0) vitest: specifier: 'catalog:' - version: 4.0.16(@opentelemetry/api@1.9.0)(@types/node@24.10.13)(@vitest/browser-playwright@4.0.16)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) + version: 4.1.0-beta.4(@opentelemetry/api@1.9.0)(@types/node@24.10.13)(@vitest/browser-playwright@4.1.0-beta.4)(vite@8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0)) packages/kit/test/apps/amp: devDependencies: @@ -613,7 +628,7 @@ importers: version: link:../../.. '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 6.2.4(svelte@5.51.5)(vite@6.4.1(@types/node@24.10.13)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) + version: 7.0.0(svelte@5.51.5)(vite@8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0)) dropcss: specifier: 'catalog:' version: 1.0.16 @@ -628,7 +643,7 @@ importers: version: 5.8.3 vite: specifier: 'catalog:' - version: 6.4.1(@types/node@24.10.13)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) + version: 8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0) packages/kit/test/apps/async: devDependencies: @@ -637,7 +652,7 @@ importers: version: link:../../.. '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 6.2.4(svelte@5.51.5)(vite@6.4.1(@types/node@24.10.13)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) + version: 7.0.0(svelte@5.51.5)(vite@8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0)) svelte: specifier: 'catalog:' version: 5.51.5 @@ -652,7 +667,7 @@ importers: version: 1.2.0(typescript@5.8.3) vite: specifier: 'catalog:' - version: 6.4.1(@types/node@24.10.13)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) + version: 8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0) packages/kit/test/apps/basics: devDependencies: @@ -670,10 +685,10 @@ importers: version: link:../../.. '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 6.2.4(svelte@5.51.5)(vite@6.4.1(@types/node@24.10.13)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) + version: 7.0.0(svelte@5.51.5)(vite@8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0)) '@vitest/browser-playwright': specifier: 'catalog:' - version: 4.0.16(playwright@1.58.2)(vite@6.4.1(@types/node@24.10.13)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0))(vitest@4.0.16) + version: 4.1.0-beta.4(playwright@1.58.2)(vite@8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0))(vitest@4.1.0-beta.4) svelte: specifier: 'catalog:' version: 5.51.5 @@ -691,10 +706,10 @@ importers: version: 1.2.0(typescript@5.8.3) vite: specifier: 'catalog:' - version: 6.4.1(@types/node@24.10.13)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) + version: 8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0) vitest: specifier: 'catalog:' - version: 4.0.16(@opentelemetry/api@1.9.0)(@types/node@24.10.13)(@vitest/browser-playwright@4.0.16)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) + version: 4.1.0-beta.4(@opentelemetry/api@1.9.0)(@types/node@24.10.13)(@vitest/browser-playwright@4.1.0-beta.4)(vite@8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0)) packages/kit/test/apps/dev-only: devDependencies: @@ -703,7 +718,7 @@ importers: version: link:../../.. '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 6.2.4(svelte@5.51.5)(vite@6.4.1(@types/node@24.10.13)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) + version: 7.0.0(svelte@5.51.5)(vite@8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0)) e2e-test-dep-error: specifier: file:./_test_dependencies/cjs-only version: e2e-test-dep-cjs-only@file:packages/kit/test/apps/dev-only/_test_dependencies/cjs-only @@ -745,7 +760,7 @@ importers: version: 5.8.3 vite: specifier: 'catalog:' - version: 6.4.1(@types/node@24.10.13)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) + version: 8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0) packages/kit/test/apps/embed: devDependencies: @@ -754,7 +769,7 @@ importers: version: link:../../.. '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 6.2.4(svelte@5.51.5)(vite@6.4.1(@types/node@24.10.13)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) + version: 7.0.0(svelte@5.51.5)(vite@8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0)) svelte: specifier: 'catalog:' version: 5.51.5 @@ -766,7 +781,7 @@ importers: version: 5.8.3 vite: specifier: 'catalog:' - version: 6.4.1(@types/node@24.10.13)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) + version: 8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0) packages/kit/test/apps/hash-based-routing: devDependencies: @@ -775,7 +790,7 @@ importers: version: link:../../.. '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 6.2.4(svelte@5.51.5)(vite@6.4.1(@types/node@24.10.13)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) + version: 7.0.0(svelte@5.51.5)(vite@8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0)) svelte: specifier: 'catalog:' version: 5.51.5 @@ -787,7 +802,7 @@ importers: version: 5.8.3 vite: specifier: 'catalog:' - version: 6.4.1(@types/node@24.10.13)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) + version: 8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0) packages/kit/test/apps/no-ssr: devDependencies: @@ -796,7 +811,7 @@ importers: version: link:../../.. '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 6.2.4(svelte@5.51.5)(vite@6.4.1(@types/node@24.10.13)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) + version: 7.0.0(svelte@5.51.5)(vite@8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0)) svelte: specifier: 'catalog:' version: 5.51.5 @@ -808,7 +823,7 @@ importers: version: 5.8.3 vite: specifier: 'catalog:' - version: 6.4.1(@types/node@24.10.13)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) + version: 8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0) packages/kit/test/apps/options: devDependencies: @@ -820,7 +835,7 @@ importers: version: link:../../.. '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 6.2.4(svelte@5.51.5)(vite@6.4.1(@types/node@24.10.13)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) + version: 7.0.0(svelte@5.51.5)(vite@8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0)) svelte: specifier: 'catalog:' version: 5.51.5 @@ -832,7 +847,7 @@ importers: version: 5.8.3 vite: specifier: 'catalog:' - version: 6.4.1(@types/node@24.10.13)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) + version: 8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0) packages/kit/test/apps/options-2: devDependencies: @@ -844,7 +859,7 @@ importers: version: link:../../.. '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 6.2.4(svelte@5.51.5)(vite@6.4.1(@types/node@24.10.13)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) + version: 7.0.0(svelte@5.51.5)(vite@8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0)) svelte: specifier: 'catalog:' version: 5.51.5 @@ -859,7 +874,7 @@ importers: version: 1.2.0(typescript@5.8.3) vite: specifier: 'catalog:' - version: 6.4.1(@types/node@24.10.13)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) + version: 8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0) packages/kit/test/apps/options-3: devDependencies: @@ -871,7 +886,7 @@ importers: version: link:../../.. '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 6.2.4(svelte@5.51.5)(vite@6.4.1(@types/node@24.10.13)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) + version: 7.0.0(svelte@5.51.5)(vite@8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0)) svelte: specifier: 'catalog:' version: 5.51.5 @@ -883,7 +898,7 @@ importers: version: 5.8.3 vite: specifier: 'catalog:' - version: 6.4.1(@types/node@24.10.13)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) + version: 8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0) packages/kit/test/apps/prerendered-app-error-pages: devDependencies: @@ -892,7 +907,7 @@ importers: version: link:../../.. '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 6.2.4(svelte@5.51.5)(vite@6.4.1(@types/node@24.10.13)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) + version: 7.0.0(svelte@5.51.5)(vite@8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0)) svelte: specifier: 'catalog:' version: 5.51.5 @@ -904,7 +919,7 @@ importers: version: 5.8.3 vite: specifier: 'catalog:' - version: 6.4.1(@types/node@24.10.13)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) + version: 8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0) packages/kit/test/apps/writes: devDependencies: @@ -913,7 +928,7 @@ importers: version: link:../../.. '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 6.2.4(svelte@5.51.5)(vite@6.4.1(@types/node@24.10.13)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) + version: 7.0.0(svelte@5.51.5)(vite@8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0)) svelte: specifier: 'catalog:' version: 5.51.5 @@ -925,13 +940,13 @@ importers: version: 5.8.3 vite: specifier: 'catalog:' - version: 6.4.1(@types/node@24.10.13)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) + version: 8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0) packages/kit/test/build-errors: devDependencies: vitest: specifier: 'catalog:' - version: 4.0.16(@opentelemetry/api@1.9.0)(@types/node@24.10.13)(@vitest/browser-playwright@4.0.16)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) + version: 4.1.0-beta.4(@opentelemetry/api@1.9.0)(@types/node@24.10.13)(@vitest/browser-playwright@4.1.0-beta.4)(vite@8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0)) packages/kit/test/build-errors/apps/prerender-entry-generator-mismatch: devDependencies: @@ -943,7 +958,7 @@ importers: version: link:../../../.. '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 6.2.4(svelte@5.51.5)(vite@6.4.1(@types/node@24.10.13)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) + version: 7.0.0(svelte@5.51.5)(vite@8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0)) svelte: specifier: 'catalog:' version: 5.51.5 @@ -955,7 +970,7 @@ importers: version: 5.8.3 vite: specifier: 'catalog:' - version: 6.4.1(@types/node@24.10.13)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) + version: 8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0) packages/kit/test/build-errors/apps/prerender-remote-function-error: devDependencies: @@ -967,7 +982,7 @@ importers: version: link:../../../.. '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 6.2.4(svelte@5.51.5)(vite@6.4.1(@types/node@24.10.13)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) + version: 7.0.0(svelte@5.51.5)(vite@8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0)) svelte: specifier: 'catalog:' version: 5.51.5 @@ -979,7 +994,7 @@ importers: version: 5.8.3 vite: specifier: 'catalog:' - version: 6.4.1(@types/node@24.10.13)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) + version: 8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0) packages/kit/test/build-errors/apps/prerenderable-incorrect-fragment: devDependencies: @@ -991,7 +1006,7 @@ importers: version: link:../../../.. '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 6.2.4(svelte@5.51.5)(vite@6.4.1(@types/node@24.10.13)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) + version: 7.0.0(svelte@5.51.5)(vite@8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0)) svelte: specifier: 'catalog:' version: 5.51.5 @@ -1003,7 +1018,7 @@ importers: version: 5.8.3 vite: specifier: 'catalog:' - version: 6.4.1(@types/node@24.10.13)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) + version: 8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0) packages/kit/test/build-errors/apps/prerenderable-not-prerendered: devDependencies: @@ -1015,7 +1030,7 @@ importers: version: link:../../../.. '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 6.2.4(svelte@5.51.5)(vite@6.4.1(@types/node@24.10.13)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) + version: 7.0.0(svelte@5.51.5)(vite@8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0)) svelte: specifier: 'catalog:' version: 5.51.5 @@ -1027,7 +1042,7 @@ importers: version: 5.8.3 vite: specifier: 'catalog:' - version: 6.4.1(@types/node@24.10.13)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) + version: 8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0) packages/kit/test/build-errors/apps/private-dynamic-env: devDependencies: @@ -1036,7 +1051,7 @@ importers: version: link:../../../.. '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 6.2.4(svelte@5.51.5)(vite@6.4.1(@types/node@24.10.13)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) + version: 7.0.0(svelte@5.51.5)(vite@8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0)) svelte: specifier: 'catalog:' version: 5.51.5 @@ -1048,7 +1063,7 @@ importers: version: 5.8.3 vite: specifier: 'catalog:' - version: 6.4.1(@types/node@24.10.13)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) + version: 8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0) packages/kit/test/build-errors/apps/private-dynamic-env-dynamic-import: devDependencies: @@ -1057,7 +1072,7 @@ importers: version: link:../../../.. '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 6.2.4(svelte@5.51.5)(vite@6.4.1(@types/node@24.10.13)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) + version: 7.0.0(svelte@5.51.5)(vite@8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0)) svelte: specifier: 'catalog:' version: 5.51.5 @@ -1069,7 +1084,7 @@ importers: version: 5.8.3 vite: specifier: 'catalog:' - version: 6.4.1(@types/node@24.10.13)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) + version: 8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0) packages/kit/test/build-errors/apps/private-static-env: devDependencies: @@ -1078,7 +1093,7 @@ importers: version: link:../../../.. '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 6.2.4(svelte@5.51.5)(vite@6.4.1(@types/node@24.10.13)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) + version: 7.0.0(svelte@5.51.5)(vite@8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0)) svelte: specifier: 'catalog:' version: 5.51.5 @@ -1090,7 +1105,7 @@ importers: version: 5.8.3 vite: specifier: 'catalog:' - version: 6.4.1(@types/node@24.10.13)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) + version: 8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0) packages/kit/test/build-errors/apps/private-static-env-dynamic-import: devDependencies: @@ -1099,7 +1114,7 @@ importers: version: link:../../../.. '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 6.2.4(svelte@5.51.5)(vite@6.4.1(@types/node@24.10.13)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) + version: 7.0.0(svelte@5.51.5)(vite@8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0)) svelte: specifier: 'catalog:' version: 5.51.5 @@ -1111,7 +1126,7 @@ importers: version: 5.8.3 vite: specifier: 'catalog:' - version: 6.4.1(@types/node@24.10.13)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) + version: 8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0) packages/kit/test/build-errors/apps/server-only-folder: devDependencies: @@ -1120,7 +1135,7 @@ importers: version: link:../../../.. '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 6.2.4(svelte@5.51.5)(vite@6.4.1(@types/node@24.10.13)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) + version: 7.0.0(svelte@5.51.5)(vite@8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0)) svelte: specifier: 'catalog:' version: 5.51.5 @@ -1132,7 +1147,7 @@ importers: version: 5.8.3 vite: specifier: 'catalog:' - version: 6.4.1(@types/node@24.10.13)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) + version: 8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0) packages/kit/test/build-errors/apps/server-only-folder-dynamic-import: devDependencies: @@ -1141,7 +1156,7 @@ importers: version: link:../../../.. '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 6.2.4(svelte@5.51.5)(vite@6.4.1(@types/node@24.10.13)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) + version: 7.0.0(svelte@5.51.5)(vite@8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0)) svelte: specifier: 'catalog:' version: 5.51.5 @@ -1153,7 +1168,7 @@ importers: version: 5.8.3 vite: specifier: 'catalog:' - version: 6.4.1(@types/node@24.10.13)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) + version: 8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0) packages/kit/test/build-errors/apps/server-only-module: devDependencies: @@ -1162,7 +1177,7 @@ importers: version: link:../../../.. '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 6.2.4(svelte@5.51.5)(vite@6.4.1(@types/node@24.10.13)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) + version: 7.0.0(svelte@5.51.5)(vite@8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0)) svelte: specifier: 'catalog:' version: 5.51.5 @@ -1174,7 +1189,7 @@ importers: version: 5.8.3 vite: specifier: 'catalog:' - version: 6.4.1(@types/node@24.10.13)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) + version: 8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0) packages/kit/test/build-errors/apps/server-only-module-dynamic-import: devDependencies: @@ -1183,7 +1198,7 @@ importers: version: link:../../../.. '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 6.2.4(svelte@5.51.5)(vite@6.4.1(@types/node@24.10.13)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) + version: 7.0.0(svelte@5.51.5)(vite@8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0)) svelte: specifier: 'catalog:' version: 5.51.5 @@ -1195,7 +1210,7 @@ importers: version: 5.8.3 vite: specifier: 'catalog:' - version: 6.4.1(@types/node@24.10.13)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) + version: 8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0) packages/kit/test/build-errors/apps/service-worker-dynamic-public-env: devDependencies: @@ -1204,7 +1219,7 @@ importers: version: link:../../../.. '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 6.2.4(svelte@5.51.5)(vite@6.4.1(@types/node@24.10.13)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) + version: 7.0.0(svelte@5.51.5)(vite@8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0)) svelte: specifier: 'catalog:' version: 5.51.5 @@ -1216,7 +1231,7 @@ importers: version: 5.8.3 vite: specifier: 'catalog:' - version: 6.4.1(@types/node@24.10.13)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) + version: 8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0) packages/kit/test/build-errors/apps/service-worker-private-env: devDependencies: @@ -1225,7 +1240,7 @@ importers: version: link:../../../.. '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 6.2.4(svelte@5.51.5)(vite@6.4.1(@types/node@24.10.13)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) + version: 7.0.0(svelte@5.51.5)(vite@8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0)) svelte: specifier: 'catalog:' version: 5.51.5 @@ -1237,7 +1252,7 @@ importers: version: 5.8.3 vite: specifier: 'catalog:' - version: 6.4.1(@types/node@24.10.13)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) + version: 8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0) packages/kit/test/build-errors/apps/syntax-error: devDependencies: @@ -1246,7 +1261,7 @@ importers: version: link:../../../.. '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 6.2.4(svelte@5.51.5)(vite@6.4.1(@types/node@24.10.13)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) + version: 7.0.0(svelte@5.51.5)(vite@8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0)) svelte: specifier: 'catalog:' version: 5.51.5 @@ -1258,7 +1273,7 @@ importers: version: 5.8.3 vite: specifier: 'catalog:' - version: 6.4.1(@types/node@24.10.13)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) + version: 8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0) packages/kit/test/prerendering/basics: devDependencies: @@ -1267,7 +1282,7 @@ importers: version: link:../../.. '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 6.2.4(svelte@5.51.5)(vite@6.4.1(@types/node@24.10.13)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) + version: 7.0.0(svelte@5.51.5)(vite@8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0)) svelte: specifier: 'catalog:' version: 5.51.5 @@ -1279,10 +1294,10 @@ importers: version: 5.8.3 vite: specifier: 'catalog:' - version: 6.4.1(@types/node@24.10.13)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) + version: 8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0) vitest: specifier: 'catalog:' - version: 4.0.16(@opentelemetry/api@1.9.0)(@types/node@24.10.13)(@vitest/browser-playwright@4.0.16)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) + version: 4.1.0-beta.4(@opentelemetry/api@1.9.0)(@types/node@24.10.13)(@vitest/browser-playwright@4.1.0-beta.4)(vite@8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0)) packages/kit/test/prerendering/options: devDependencies: @@ -1291,7 +1306,7 @@ importers: version: link:../../.. '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 6.2.4(svelte@5.51.5)(vite@6.4.1(@types/node@24.10.13)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) + version: 7.0.0(svelte@5.51.5)(vite@8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0)) svelte: specifier: 'catalog:' version: 5.51.5 @@ -1303,10 +1318,10 @@ importers: version: 5.8.3 vite: specifier: 'catalog:' - version: 6.4.1(@types/node@24.10.13)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) + version: 8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0) vitest: specifier: 'catalog:' - version: 4.0.16(@opentelemetry/api@1.9.0)(@types/node@24.10.13)(@vitest/browser-playwright@4.0.16)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) + version: 4.1.0-beta.4(@opentelemetry/api@1.9.0)(@types/node@24.10.13)(@vitest/browser-playwright@4.1.0-beta.4)(vite@8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0)) packages/kit/test/prerendering/paths-base: devDependencies: @@ -1315,7 +1330,7 @@ importers: version: link:../../.. '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 6.2.4(svelte@5.51.5)(vite@6.4.1(@types/node@24.10.13)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) + version: 7.0.0(svelte@5.51.5)(vite@8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0)) svelte: specifier: 'catalog:' version: 5.51.5 @@ -1327,10 +1342,10 @@ importers: version: 5.8.3 vite: specifier: 'catalog:' - version: 6.4.1(@types/node@24.10.13)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) + version: 8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0) vitest: specifier: 'catalog:' - version: 4.0.16(@opentelemetry/api@1.9.0)(@types/node@24.10.13)(@vitest/browser-playwright@4.0.16)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) + version: 4.1.0-beta.4(@opentelemetry/api@1.9.0)(@types/node@24.10.13)(@vitest/browser-playwright@4.1.0-beta.4)(vite@8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0)) packages/package: dependencies: @@ -1349,7 +1364,7 @@ importers: devDependencies: '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 6.2.4(svelte@5.51.5)(vite@6.4.1(@types/node@24.10.13)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) + version: 7.0.0(svelte@5.51.5)(vite@8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0)) '@types/node': specifier: 'catalog:' version: 24.10.13 @@ -1368,9 +1383,12 @@ importers: typescript: specifier: ^5.3.3 version: 5.8.3 + vite: + specifier: 'catalog:' + version: 8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0) vitest: specifier: 'catalog:' - version: 4.0.16(@opentelemetry/api@1.9.0)(@types/node@24.10.13)(@vitest/browser-playwright@4.0.16)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) + version: 4.1.0-beta.4(@opentelemetry/api@1.9.0)(@types/node@24.10.13)(@vitest/browser-playwright@4.1.0-beta.4)(vite@8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0)) packages/test-redirect-importer: dependencies: @@ -1412,7 +1430,7 @@ importers: version: link:../../packages/package '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 6.2.4(svelte@5.51.5)(vite@6.4.1(@types/node@24.10.13)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) + version: 7.0.0(svelte@5.51.5)(vite@8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0)) prettier: specifier: ^3.3.2 version: 3.6.0 @@ -1436,7 +1454,7 @@ importers: version: 1.2.0(typescript@5.8.3) vite: specifier: 'catalog:' - version: 6.4.1(@types/node@24.10.13)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) + version: 8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0) packages: @@ -2723,6 +2741,10 @@ packages: resolution: {integrity: sha512-TtxJSRD8Ohxp6bKkhrm27JRHAxPczQA7idtcTOMYI+wQRRrfgqxHv1cFbCApcSnNjtXkmzFozn6jQtFrOmbjPQ==} engines: {node: '>=14'} + '@oxc-project/runtime@0.114.0': + resolution: {integrity: sha512-mVGQvr/uFJGQ3hsvgQ1sJfh79t5owyZZZtw+VaH+WhtvsmtgjT6imznB9sz2Q67Q0/4obM9mOOtQscU4aJteSg==} + engines: {node: ^20.19.0 || >=22.12.0} + '@oxc-project/types@0.114.0': resolution: {integrity: sha512-//nBfbzHQHvJs8oFIjv6coZ6uxQ4alLfiPe6D5vit6c4pmxATHHlVwgB1k+Hv4yoAMyncdxgRBF5K4BYWUCzvA==} @@ -3113,8 +3135,8 @@ packages: '@speed-highlight/core@1.2.14': resolution: {integrity: sha512-G4ewlBNhUtlLvrJTb88d2mdy2KRijzs4UhnlrOSRT4bmjh/IqNElZa3zkrZ+TC47TwtlDWzVLFADljF1Ijp5hA==} - '@standard-schema/spec@1.0.0': - resolution: {integrity: sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA==} + '@standard-schema/spec@1.1.0': + resolution: {integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==} '@stylistic/eslint-plugin-js@2.1.0': resolution: {integrity: sha512-gdXUjGNSsnY6nPyqxu6lmDTtVrwCOjun4x8PUn0x04d5ucLI74N3MT1Q0UhdcOR9No3bo5PGDyBgXK+KmD787A==} @@ -3139,20 +3161,12 @@ packages: typescript: '>= 5' typescript-eslint: '>= 8' - '@sveltejs/vite-plugin-svelte-inspector@5.0.2': - resolution: {integrity: sha512-TZzRTcEtZffICSAoZGkPSl6Etsj2torOVrx6Uw0KpXxrec9Gg6jFWQ60Q3+LmNGfZSxHRCZL7vXVZIWmuV50Ig==} - engines: {node: ^20.19 || ^22.12 || >=24} - peerDependencies: - '@sveltejs/vite-plugin-svelte': ^6.0.0-next.0 - svelte: ^5.0.0 - vite: ^6.3.0 || ^7.0.0 - - '@sveltejs/vite-plugin-svelte@6.2.4': - resolution: {integrity: sha512-ou/d51QSdTyN26D7h6dSpusAKaZkAiGM55/AKYi+9AGZw7q85hElbjK3kEyzXHhLSnRISHOYzVge6x0jRZ7DXA==} + '@sveltejs/vite-plugin-svelte@7.0.0': + resolution: {integrity: sha512-ILXmxC7HAsnkK2eslgPetrqqW1BKSL7LktsFgqzNj83MaivMGZzluWq32m25j2mDOjmSKX7GGWahePhuEs7P/g==} engines: {node: ^20.19 || ^22.12 || >=24} peerDependencies: - svelte: ^5.0.0 - vite: ^6.3.0 || ^7.0.0 + svelte: ^5.46.4 + vite: ^8.0.0-beta.7 || ^8.0.0 '@svitejs/changesets-changelog-github-compact@1.2.0': resolution: {integrity: sha512-08eKiDAjj4zLug1taXSIJ0kGL5cawjVCyJkBb6EWSg5fEPX6L+Wtr0CH2If4j5KYylz85iaZiFlUItvgJvll5g==} @@ -3290,22 +3304,22 @@ packages: engines: {node: '>=20'} hasBin: true - '@vitest/browser-playwright@4.0.16': - resolution: {integrity: sha512-I2Fy/ANdphi1yI46d15o0M1M4M0UJrUiVKkH5oKeRZZCdPg0fw/cfTKZzv9Ge9eobtJYp4BGblMzXdXH0vcl5g==} + '@vitest/browser-playwright@4.1.0-beta.4': + resolution: {integrity: sha512-tjNmV3jz09UmyivfpLRbSrRpYILkwSpwfQmwDB314LiDg2+clTj8mlSYQxPuX+Mmg+p9ozt6+D9sikhVgQtY2w==} peerDependencies: playwright: '*' - vitest: 4.0.16 + vitest: 4.1.0-beta.4 - '@vitest/browser@4.0.16': - resolution: {integrity: sha512-t4toy8X/YTnjYEPoY0pbDBg3EvDPg1elCDrfc+VupPHwoN/5/FNQ8Z+xBYIaEnOE2vVEyKwqYBzZ9h9rJtZVcg==} + '@vitest/browser@4.1.0-beta.4': + resolution: {integrity: sha512-/YdjpNjNL2cq7cB6fDrJE/V0jDViHZS+M92iN5h/ZilARGIPMU+vt/p94oGI8qPRYYA7D+SnJpLlK1iqFi5RTw==} peerDependencies: - vitest: 4.0.16 + vitest: 4.1.0-beta.4 - '@vitest/expect@4.0.16': - resolution: {integrity: sha512-eshqULT2It7McaJkQGLkPjPjNph+uevROGuIMJdG3V+0BSR2w9u6J9Lwu+E8cK5TETlfou8GRijhafIMhXsimA==} + '@vitest/expect@4.1.0-beta.4': + resolution: {integrity: sha512-50CzsTy9kVrlI7V0Ot63jPb5q069r1Xn/z489q/pWmFImEUC30oiO9gaRInkWUmgHpSZTO8E9rSdu6jFZwRHjg==} - '@vitest/mocker@4.0.16': - resolution: {integrity: sha512-yb6k4AZxJTB+q9ycAvsoxGn+j/po0UaPgajllBgt1PzoMAAmJGYFdDk0uCcRcxb3BrME34I6u8gHZTQlkqSZpg==} + '@vitest/mocker@4.1.0-beta.4': + resolution: {integrity: sha512-JIHUUrevhes/tP8U3TqPHo/n8lmruITvC9YdnbYyA+L0Y9zyYZ5zW/07+i/aXpmabtxIiJG7eKIv2ootcBu4Vw==} peerDependencies: msw: ^2.4.9 vite: ^6.0.0 || ^7.0.0-0 @@ -3315,20 +3329,20 @@ packages: vite: optional: true - '@vitest/pretty-format@4.0.16': - resolution: {integrity: sha512-eNCYNsSty9xJKi/UdVD8Ou16alu7AYiS2fCPRs0b1OdhJiV89buAXQLpTbe+X8V9L6qrs9CqyvU7OaAopJYPsA==} + '@vitest/pretty-format@4.1.0-beta.4': + resolution: {integrity: sha512-rAJOtUSRzgobQtuW98WV3bSkomdILArhgSc4JQ5G6Et0eaD6DTeMpr+k7B//F/xYG7oVeuabOTx3EWu06ILCgA==} - '@vitest/runner@4.0.16': - resolution: {integrity: sha512-VWEDm5Wv9xEo80ctjORcTQRJ539EGPB3Pb9ApvVRAY1U/WkHXmmYISqU5E79uCwcW7xYUV38gwZD+RV755fu3Q==} + '@vitest/runner@4.1.0-beta.4': + resolution: {integrity: sha512-/uhv354dTwbqiDCAk9IUCVXNBGByn40Xh8DkJ5EdzqEYN3aw5x25OmmpxpSjxlkBkoxQEUP3zg6WOUGeTYKoOw==} - '@vitest/snapshot@4.0.16': - resolution: {integrity: sha512-sf6NcrYhYBsSYefxnry+DR8n3UV4xWZwWxYbCJUt2YdvtqzSPR7VfGrY0zsv090DAbjFZsi7ZaMi1KnSRyK1XA==} + '@vitest/snapshot@4.1.0-beta.4': + resolution: {integrity: sha512-ukET4KPzUZgCD1flrQFuhuXS9J2/c6bzMoRCCmjB12+JwwgYvxCEE6wURZXRUjwcA6jD2HCpxeKiVq/4Ojz0EQ==} - '@vitest/spy@4.0.16': - resolution: {integrity: sha512-4jIOWjKP0ZUaEmJm00E0cOBLU+5WE0BpeNr3XN6TEF05ltro6NJqHWxXD0kA8/Zc8Nh23AT8WQxwNG+WeROupw==} + '@vitest/spy@4.1.0-beta.4': + resolution: {integrity: sha512-aRsQ3vLSKbEifcMufUXAp1OCBcLEWDDmGAItaVa2WDwh08pxcpoDCCfchCDDYjftajq5Mi22ZNN9Afy9IW4ZJw==} - '@vitest/utils@4.0.16': - resolution: {integrity: sha512-h8z9yYhV3e1LEfaQ3zdypIrnAg/9hguReGZoS7Gl0aBG5xgA410zBqECqmaF/+RkTggRsfnzc1XaAHA6bmUufA==} + '@vitest/utils@4.1.0-beta.4': + resolution: {integrity: sha512-c6oj0FpdLwmOisNpeVwhXqwe9Harehj+n9Pfz4/Iv45dSR32VHDzK2uosqT2ocCZhgzXwX4xpL8thl2Wr/wyrw==} '@vue/compiler-core@3.5.16': resolution: {integrity: sha512-AOQS2eaQOaaZQoL1u+2rCJIKDruNXVBZSiUD3chnUrsoX5ZTQMaCvXlWNIfxBJuU15r1o7+mpo5223KVtIhAgQ==} @@ -3889,6 +3903,9 @@ packages: es-module-lexer@1.7.0: resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==} + es-module-lexer@2.0.0: + resolution: {integrity: sha512-5POEcUuZybH7IdmGsD8wlf0AI55wMecM9rVBTI/qEAy2c1kTOm3DjFYjrBdI2K3BaJjJYfYFeRtM0t9ssnRuxw==} + esbuild@0.25.12: resolution: {integrity: sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==} engines: {node: '>=18'} @@ -4515,72 +4532,78 @@ packages: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} - lightningcss-darwin-arm64@1.30.1: - resolution: {integrity: sha512-c8JK7hyE65X1MHMN+Viq9n11RRC7hgin3HhYKhrMyaXflk5GVplZ60IxyoVtzILeKr+xAJwg6zK6sjTBJ0FKYQ==} + lightningcss-android-arm64@1.31.1: + resolution: {integrity: sha512-HXJF3x8w9nQ4jbXRiNppBCqeZPIAfUo8zE/kOEGbW5NZvGc/K7nMxbhIr+YlFlHW5mpbg/YFPdbnCh1wAXCKFg==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [android] + + lightningcss-darwin-arm64@1.31.1: + resolution: {integrity: sha512-02uTEqf3vIfNMq3h/z2cJfcOXnQ0GRwQrkmPafhueLb2h7mqEidiCzkE4gBMEH65abHRiQvhdcQ+aP0D0g67sg==} engines: {node: '>= 12.0.0'} cpu: [arm64] os: [darwin] - lightningcss-darwin-x64@1.30.1: - resolution: {integrity: sha512-k1EvjakfumAQoTfcXUcHQZhSpLlkAuEkdMBsI/ivWw9hL+7FtilQc0Cy3hrx0AAQrVtQAbMI7YjCgYgvn37PzA==} + lightningcss-darwin-x64@1.31.1: + resolution: {integrity: sha512-1ObhyoCY+tGxtsz1lSx5NXCj3nirk0Y0kB/g8B8DT+sSx4G9djitg9ejFnjb3gJNWo7qXH4DIy2SUHvpoFwfTA==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [darwin] - lightningcss-freebsd-x64@1.30.1: - resolution: {integrity: sha512-kmW6UGCGg2PcyUE59K5r0kWfKPAVy4SltVeut+umLCFoJ53RdCUWxcRDzO1eTaxf/7Q2H7LTquFHPL5R+Gjyig==} + lightningcss-freebsd-x64@1.31.1: + resolution: {integrity: sha512-1RINmQKAItO6ISxYgPwszQE1BrsVU5aB45ho6O42mu96UiZBxEXsuQ7cJW4zs4CEodPUioj/QrXW1r9pLUM74A==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [freebsd] - lightningcss-linux-arm-gnueabihf@1.30.1: - resolution: {integrity: sha512-MjxUShl1v8pit+6D/zSPq9S9dQ2NPFSQwGvxBCYaBYLPlCWuPh9/t1MRS8iUaR8i+a6w7aps+B4N0S1TYP/R+Q==} + lightningcss-linux-arm-gnueabihf@1.31.1: + resolution: {integrity: sha512-OOCm2//MZJ87CdDK62rZIu+aw9gBv4azMJuA8/KB74wmfS3lnC4yoPHm0uXZ/dvNNHmnZnB8XLAZzObeG0nS1g==} engines: {node: '>= 12.0.0'} cpu: [arm] os: [linux] - lightningcss-linux-arm64-gnu@1.30.1: - resolution: {integrity: sha512-gB72maP8rmrKsnKYy8XUuXi/4OctJiuQjcuqWNlJQ6jZiWqtPvqFziskH3hnajfvKB27ynbVCucKSm2rkQp4Bw==} + lightningcss-linux-arm64-gnu@1.31.1: + resolution: {integrity: sha512-WKyLWztD71rTnou4xAD5kQT+982wvca7E6QoLpoawZ1gP9JM0GJj4Tp5jMUh9B3AitHbRZ2/H3W5xQmdEOUlLg==} engines: {node: '>= 12.0.0'} cpu: [arm64] os: [linux] libc: [glibc] - lightningcss-linux-arm64-musl@1.30.1: - resolution: {integrity: sha512-jmUQVx4331m6LIX+0wUhBbmMX7TCfjF5FoOH6SD1CttzuYlGNVpA7QnrmLxrsub43ClTINfGSYyHe2HWeLl5CQ==} + lightningcss-linux-arm64-musl@1.31.1: + resolution: {integrity: sha512-mVZ7Pg2zIbe3XlNbZJdjs86YViQFoJSpc41CbVmKBPiGmC4YrfeOyz65ms2qpAobVd7WQsbW4PdsSJEMymyIMg==} engines: {node: '>= 12.0.0'} cpu: [arm64] os: [linux] libc: [musl] - lightningcss-linux-x64-gnu@1.30.1: - resolution: {integrity: sha512-piWx3z4wN8J8z3+O5kO74+yr6ze/dKmPnI7vLqfSqI8bccaTGY5xiSGVIJBDd5K5BHlvVLpUB3S2YCfelyJ1bw==} + lightningcss-linux-x64-gnu@1.31.1: + resolution: {integrity: sha512-xGlFWRMl+0KvUhgySdIaReQdB4FNudfUTARn7q0hh/V67PVGCs3ADFjw+6++kG1RNd0zdGRlEKa+T13/tQjPMA==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [linux] libc: [glibc] - lightningcss-linux-x64-musl@1.30.1: - resolution: {integrity: sha512-rRomAK7eIkL+tHY0YPxbc5Dra2gXlI63HL+v1Pdi1a3sC+tJTcFrHX+E86sulgAXeI7rSzDYhPSeHHjqFhqfeQ==} + lightningcss-linux-x64-musl@1.31.1: + resolution: {integrity: sha512-eowF8PrKHw9LpoZii5tdZwnBcYDxRw2rRCyvAXLi34iyeYfqCQNA9rmUM0ce62NlPhCvof1+9ivRaTY6pSKDaA==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [linux] libc: [musl] - lightningcss-win32-arm64-msvc@1.30.1: - resolution: {integrity: sha512-mSL4rqPi4iXq5YVqzSsJgMVFENoa4nGTT/GjO2c0Yl9OuQfPsIfncvLrEW6RbbB24WtZ3xP/2CCmI3tNkNV4oA==} + lightningcss-win32-arm64-msvc@1.31.1: + resolution: {integrity: sha512-aJReEbSEQzx1uBlQizAOBSjcmr9dCdL3XuC/6HLXAxmtErsj2ICo5yYggg1qOODQMtnjNQv2UHb9NpOuFtYe4w==} engines: {node: '>= 12.0.0'} cpu: [arm64] os: [win32] - lightningcss-win32-x64-msvc@1.30.1: - resolution: {integrity: sha512-PVqXh48wh4T53F/1CCu8PIPCxLzWyCnn/9T5W1Jpmdy5h9Cwd+0YQS6/LwhHXSafuc61/xg9Lv5OrCby6a++jg==} + lightningcss-win32-x64-msvc@1.31.1: + resolution: {integrity: sha512-I9aiFrbd7oYHwlnQDqr1Roz+fTz61oDDJX7n9tYF9FJymH1cIN1DtKw3iYt6b8WZgEjoNwVSncwF4wx/ZedMhw==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [win32] - lightningcss@1.30.1: - resolution: {integrity: sha512-xi6IyHML+c9+Q3W0S4fCQJOym42pyurFiJUHEcEyHS0CeKzia4yZDEsLlqOFykxOdHpNy0NmvVO31vcSqAxJCg==} + lightningcss@1.31.1: + resolution: {integrity: sha512-l51N2r93WmGUye3WuFoN5k10zyvrVs0qfKBhyC5ogUQ6Ew6JUSswh78mbSO+IU3nTWsyOArqPCcShdQSadghBQ==} engines: {node: '>= 12.0.0'} lilconfig@2.1.0: @@ -5478,10 +5501,9 @@ packages: tar-stream@3.1.7: resolution: {integrity: sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==} - tar@7.5.7: - resolution: {integrity: sha512-fov56fJiRuThVFXD6o6/Q354S7pnWMJIVlDBYijsTNx6jKSE4pvrDTs6lUnmGvNyfJwFQQwWy3owKz1ucIhveQ==} + tar@7.5.9: + resolution: {integrity: sha512-BTLcK0xsDh2+PUe9F6c2TlRp4zOOBMTkoQHQIWSIzI0R7KG46uEwq4OPk2W7bZcprBMsuaeFsqwYr7pjh6CuHg==} engines: {node: '>=18'} - deprecated: Old versions of tar are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me term-size@2.2.1: resolution: {integrity: sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==} @@ -5738,31 +5760,34 @@ packages: resolution: {integrity: sha512-FwjApRNZyN+RucPW9Z9kf0dyzyi3r3zlDfrTnzHXNaYpmT3pZ5w//d6QkApy1iypbDm+3fq+Gwfv+PYA4j4uYw==} engines: {node: '>=20.0.0'} - vite@6.4.1: - resolution: {integrity: sha512-+Oxm7q9hDoLMyJOYfUYBuHQo+dkAloi33apOPP56pzj+vsdJDzr+j1NISE5pyaAuKL4A3UD34qd0lx5+kfKp2g==} - engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} + vite@8.0.0-beta.15: + resolution: {integrity: sha512-RHX7IvsJlEfjyA1rS7MY0UsmF91etdLAamslHR5lfuO3W/BXRdXm2tRE64ztpSPZbKqB4wAAZ0AwtF6QzfKZLA==} + engines: {node: ^20.19.0 || >=22.12.0} hasBin: true peerDependencies: - '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 + '@types/node': ^20.19.0 || >=22.12.0 + '@vitejs/devtools': ^0.0.0-alpha.31 + esbuild: ^0.27.0 jiti: '>=1.21.0' - less: '*' - lightningcss: ^1.21.0 - sass: '*' - sass-embedded: '*' - stylus: '*' - sugarss: '*' + less: ^4.0.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 + '@vitejs/devtools': + optional: true + esbuild: + optional: true jiti: optional: true less: optional: true - lightningcss: - optional: true sass: optional: true sass-embedded: @@ -5778,28 +5803,29 @@ packages: yaml: optional: true - vitefu@1.1.1: - resolution: {integrity: sha512-B/Fegf3i8zh0yFbpzZ21amWzHmuNlLlmJT6n7bu5e+pCHUKQIfXSYokrqOBGEMMe9UG2sostKQF9mml/vYaWJQ==} + vitefu@1.1.2: + resolution: {integrity: sha512-zpKATdUbzbsycPFBN71nS2uzBUQiVnFoOrr2rvqv34S1lcAgMKKkjWleLGeiJlZ8lwCXvtWaRn7R3ZC16SYRuw==} peerDependencies: - vite: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0-beta.0 + vite: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-beta.0 peerDependenciesMeta: vite: optional: true - vitest@4.0.16: - resolution: {integrity: sha512-E4t7DJ9pESL6E3I8nFjPa4xGUd3PmiWDLsDztS2qXSJWfHtbQnwAWylaBvSNY48I3vr8PTqIZlyK8TE3V3CA4Q==} + vitest@4.1.0-beta.4: + resolution: {integrity: sha512-MimZ9YLGPFhLGVR+WWQdSvc2vmOwH75f5SDRttg+cnlBJ0XNs6mTvrV4Oi6xIF3FOsH3LPs2f/LM1WyCGy40qA==} engines: {node: ^20.0.0 || ^22.0.0 || >=24.0.0} hasBin: true peerDependencies: '@edge-runtime/vm': '*' '@opentelemetry/api': ^1.9.0 '@types/node': ^20.0.0 || ^22.0.0 || >=24.0.0 - '@vitest/browser-playwright': 4.0.16 - '@vitest/browser-preview': 4.0.16 - '@vitest/browser-webdriverio': 4.0.16 - '@vitest/ui': 4.0.16 + '@vitest/browser-playwright': 4.1.0-beta.4 + '@vitest/browser-preview': 4.1.0-beta.4 + '@vitest/browser-webdriverio': 4.1.0-beta.4 + '@vitest/ui': 4.1.0-beta.4 happy-dom: '*' jsdom: '*' + vite: ^6.0.0 || ^7.0.0 || ^8.0.0-0 peerDependenciesMeta: '@edge-runtime/vm': optional: true @@ -5894,8 +5920,8 @@ packages: utf-8-validate: optional: true - ws@8.18.3: - resolution: {integrity: sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==} + ws@8.19.0: + resolution: {integrity: sha512-blAT2mjOEIi0ZzruJfIhb3nps74PRWTCz1IjglWEEpQl5XS/UNama6u2/rjFkDDouqr4L67ry+1aGIALViWjDg==} engines: {node: '>=10.0.0'} peerDependencies: bufferutil: ^4.0.1 @@ -6690,7 +6716,7 @@ snapshots: node-fetch: 2.7.0 nopt: 8.0.0 semver: 7.7.4 - tar: 7.5.7 + tar: 7.5.9 transitivePeerDependencies: - encoding - supports-color @@ -6830,7 +6856,7 @@ snapshots: parse-imports: 2.2.1 path-key: 4.0.0 semver: 7.7.4 - tar: 7.5.7 + tar: 7.5.9 tmp-promise: 3.0.3 urlpattern-polyfill: 8.0.2 uuid: 11.1.0 @@ -7302,6 +7328,8 @@ snapshots: '@opentelemetry/semantic-conventions@1.36.0': {} + '@oxc-project/runtime@0.114.0': {} + '@oxc-project/types@0.114.0': {} '@parcel/watcher-android-arm64@2.5.1': @@ -7545,7 +7573,7 @@ snapshots: '@speed-highlight/core@1.2.14': {} - '@standard-schema/spec@1.0.0': {} + '@standard-schema/spec@1.1.0': {} '@stylistic/eslint-plugin-js@2.1.0(eslint@10.0.0(jiti@2.4.2))': dependencies: @@ -7571,22 +7599,23 @@ snapshots: typescript: 5.8.3 typescript-eslint: 8.56.0(eslint@10.0.0(jiti@2.4.2))(typescript@5.8.3) - '@sveltejs/vite-plugin-svelte-inspector@5.0.2(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.51.5)(vite@6.4.1(@types/node@24.10.13)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)))(svelte@5.51.5)(vite@6.4.1(@types/node@24.10.13)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0))': + '@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.51.5)(vite@8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.25.12)(jiti@2.4.2)(yaml@2.8.0))': dependencies: - '@sveltejs/vite-plugin-svelte': 6.2.4(svelte@5.51.5)(vite@6.4.1(@types/node@24.10.13)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) + deepmerge: 4.3.1 + magic-string: 0.30.21 obug: 2.1.1 svelte: 5.51.5 - vite: 6.4.1(@types/node@24.10.13)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) + vite: 8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.25.12)(jiti@2.4.2)(yaml@2.8.0) + vitefu: 1.1.2(vite@8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.25.12)(jiti@2.4.2)(yaml@2.8.0)) - '@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.51.5)(vite@6.4.1(@types/node@24.10.13)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0))': + '@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.51.5)(vite@8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0))': dependencies: - '@sveltejs/vite-plugin-svelte-inspector': 5.0.2(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.51.5)(vite@6.4.1(@types/node@24.10.13)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)))(svelte@5.51.5)(vite@6.4.1(@types/node@24.10.13)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) deepmerge: 4.3.1 magic-string: 0.30.21 obug: 2.1.1 svelte: 5.51.5 - vite: 6.4.1(@types/node@24.10.13)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) - vitefu: 1.1.1(vite@6.4.1(@types/node@24.10.13)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) + vite: 8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0) + vitefu: 1.1.2(vite@8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0)) '@svitejs/changesets-changelog-github-compact@1.2.0': dependencies: @@ -7787,73 +7816,114 @@ snapshots: - rollup - supports-color - '@vitest/browser-playwright@4.0.16(playwright@1.58.2)(vite@6.4.1(@types/node@24.10.13)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0))(vitest@4.0.16)': + '@vitest/browser-playwright@4.1.0-beta.4(playwright@1.58.2)(vite@8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.25.12)(jiti@2.4.2)(yaml@2.8.0))(vitest@4.1.0-beta.4)': + dependencies: + '@vitest/browser': 4.1.0-beta.4(vite@8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.25.12)(jiti@2.4.2)(yaml@2.8.0))(vitest@4.1.0-beta.4) + '@vitest/mocker': 4.1.0-beta.4(vite@8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.25.12)(jiti@2.4.2)(yaml@2.8.0)) + playwright: 1.58.2 + tinyrainbow: 3.0.3 + vitest: 4.1.0-beta.4(@opentelemetry/api@1.9.0)(@types/node@24.10.13)(@vitest/browser-playwright@4.1.0-beta.4)(vite@8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.25.12)(jiti@2.4.2)(yaml@2.8.0)) + transitivePeerDependencies: + - bufferutil + - msw + - utf-8-validate + - vite + optional: true + + '@vitest/browser-playwright@4.1.0-beta.4(playwright@1.58.2)(vite@8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0))(vitest@4.1.0-beta.4)': dependencies: - '@vitest/browser': 4.0.16(vite@6.4.1(@types/node@24.10.13)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0))(vitest@4.0.16) - '@vitest/mocker': 4.0.16(vite@6.4.1(@types/node@24.10.13)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) + '@vitest/browser': 4.1.0-beta.4(vite@8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0))(vitest@4.1.0-beta.4) + '@vitest/mocker': 4.1.0-beta.4(vite@8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0)) playwright: 1.58.2 tinyrainbow: 3.0.3 - vitest: 4.0.16(@opentelemetry/api@1.9.0)(@types/node@24.10.13)(@vitest/browser-playwright@4.0.16)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) + vitest: 4.1.0-beta.4(@opentelemetry/api@1.9.0)(@types/node@24.10.13)(@vitest/browser-playwright@4.1.0-beta.4)(vite@8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0)) transitivePeerDependencies: - bufferutil - msw - utf-8-validate - vite - '@vitest/browser@4.0.16(vite@6.4.1(@types/node@24.10.13)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0))(vitest@4.0.16)': + '@vitest/browser@4.1.0-beta.4(vite@8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.25.12)(jiti@2.4.2)(yaml@2.8.0))(vitest@4.1.0-beta.4)': dependencies: - '@vitest/mocker': 4.0.16(vite@6.4.1(@types/node@24.10.13)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) - '@vitest/utils': 4.0.16 + '@vitest/mocker': 4.1.0-beta.4(vite@8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.25.12)(jiti@2.4.2)(yaml@2.8.0)) + '@vitest/utils': 4.1.0-beta.4 magic-string: 0.30.21 pixelmatch: 7.1.0 pngjs: 7.0.0 sirv: 3.0.2 tinyrainbow: 3.0.3 - vitest: 4.0.16(@opentelemetry/api@1.9.0)(@types/node@24.10.13)(@vitest/browser-playwright@4.0.16)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) - ws: 8.18.3 + vitest: 4.1.0-beta.4(@opentelemetry/api@1.9.0)(@types/node@24.10.13)(@vitest/browser-playwright@4.1.0-beta.4)(vite@8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.25.12)(jiti@2.4.2)(yaml@2.8.0)) + ws: 8.19.0 transitivePeerDependencies: - bufferutil - msw - utf-8-validate - vite + optional: true - '@vitest/expect@4.0.16': + '@vitest/browser@4.1.0-beta.4(vite@8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0))(vitest@4.1.0-beta.4)': dependencies: - '@standard-schema/spec': 1.0.0 + '@vitest/mocker': 4.1.0-beta.4(vite@8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0)) + '@vitest/utils': 4.1.0-beta.4 + magic-string: 0.30.21 + pixelmatch: 7.1.0 + pngjs: 7.0.0 + sirv: 3.0.2 + tinyrainbow: 3.0.3 + vitest: 4.1.0-beta.4(@opentelemetry/api@1.9.0)(@types/node@24.10.13)(@vitest/browser-playwright@4.1.0-beta.4)(vite@8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0)) + ws: 8.19.0 + transitivePeerDependencies: + - bufferutil + - msw + - utf-8-validate + - vite + + '@vitest/expect@4.1.0-beta.4': + dependencies: + '@standard-schema/spec': 1.1.0 '@types/chai': 5.2.2 - '@vitest/spy': 4.0.16 - '@vitest/utils': 4.0.16 + '@vitest/spy': 4.1.0-beta.4 + '@vitest/utils': 4.1.0-beta.4 chai: 6.2.2 tinyrainbow: 3.0.3 - '@vitest/mocker@4.0.16(vite@6.4.1(@types/node@24.10.13)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0))': + '@vitest/mocker@4.1.0-beta.4(vite@8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.25.12)(jiti@2.4.2)(yaml@2.8.0))': + dependencies: + '@vitest/spy': 4.1.0-beta.4 + estree-walker: 3.0.3 + magic-string: 0.30.21 + optionalDependencies: + vite: 8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.25.12)(jiti@2.4.2)(yaml@2.8.0) + + '@vitest/mocker@4.1.0-beta.4(vite@8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0))': dependencies: - '@vitest/spy': 4.0.16 + '@vitest/spy': 4.1.0-beta.4 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - vite: 6.4.1(@types/node@24.10.13)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) + vite: 8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0) - '@vitest/pretty-format@4.0.16': + '@vitest/pretty-format@4.1.0-beta.4': dependencies: tinyrainbow: 3.0.3 - '@vitest/runner@4.0.16': + '@vitest/runner@4.1.0-beta.4': dependencies: - '@vitest/utils': 4.0.16 + '@vitest/utils': 4.1.0-beta.4 pathe: 2.0.3 - '@vitest/snapshot@4.0.16': + '@vitest/snapshot@4.1.0-beta.4': dependencies: - '@vitest/pretty-format': 4.0.16 + '@vitest/pretty-format': 4.1.0-beta.4 + '@vitest/utils': 4.1.0-beta.4 magic-string: 0.30.21 pathe: 2.0.3 - '@vitest/spy@4.0.16': {} + '@vitest/spy@4.1.0-beta.4': {} - '@vitest/utils@4.0.16': + '@vitest/utils@4.1.0-beta.4': dependencies: - '@vitest/pretty-format': 4.0.16 + '@vitest/pretty-format': 4.1.0-beta.4 tinyrainbow: 3.0.3 '@vue/compiler-core@3.5.16': @@ -8404,6 +8474,8 @@ snapshots: es-module-lexer@1.7.0: {} + es-module-lexer@2.0.0: {} + esbuild@0.25.12: optionalDependencies: '@esbuild/aix-ppc64': 0.25.12 @@ -9126,51 +9198,54 @@ snapshots: prelude-ls: 1.2.1 type-check: 0.4.0 - lightningcss-darwin-arm64@1.30.1: + lightningcss-android-arm64@1.31.1: + optional: true + + lightningcss-darwin-arm64@1.31.1: optional: true - lightningcss-darwin-x64@1.30.1: + lightningcss-darwin-x64@1.31.1: optional: true - lightningcss-freebsd-x64@1.30.1: + lightningcss-freebsd-x64@1.31.1: optional: true - lightningcss-linux-arm-gnueabihf@1.30.1: + lightningcss-linux-arm-gnueabihf@1.31.1: optional: true - lightningcss-linux-arm64-gnu@1.30.1: + lightningcss-linux-arm64-gnu@1.31.1: optional: true - lightningcss-linux-arm64-musl@1.30.1: + lightningcss-linux-arm64-musl@1.31.1: optional: true - lightningcss-linux-x64-gnu@1.30.1: + lightningcss-linux-x64-gnu@1.31.1: optional: true - lightningcss-linux-x64-musl@1.30.1: + lightningcss-linux-x64-musl@1.31.1: optional: true - lightningcss-win32-arm64-msvc@1.30.1: + lightningcss-win32-arm64-msvc@1.31.1: optional: true - lightningcss-win32-x64-msvc@1.30.1: + lightningcss-win32-x64-msvc@1.31.1: optional: true - lightningcss@1.30.1: + lightningcss@1.31.1: dependencies: detect-libc: 2.1.2 optionalDependencies: - lightningcss-darwin-arm64: 1.30.1 - lightningcss-darwin-x64: 1.30.1 - lightningcss-freebsd-x64: 1.30.1 - lightningcss-linux-arm-gnueabihf: 1.30.1 - lightningcss-linux-arm64-gnu: 1.30.1 - lightningcss-linux-arm64-musl: 1.30.1 - lightningcss-linux-x64-gnu: 1.30.1 - lightningcss-linux-x64-musl: 1.30.1 - lightningcss-win32-arm64-msvc: 1.30.1 - lightningcss-win32-x64-msvc: 1.30.1 - optional: true + lightningcss-android-arm64: 1.31.1 + lightningcss-darwin-arm64: 1.31.1 + lightningcss-darwin-x64: 1.31.1 + lightningcss-freebsd-x64: 1.31.1 + lightningcss-linux-arm-gnueabihf: 1.31.1 + lightningcss-linux-arm64-gnu: 1.31.1 + lightningcss-linux-arm64-musl: 1.31.1 + lightningcss-linux-x64-gnu: 1.31.1 + lightningcss-linux-x64-musl: 1.31.1 + lightningcss-win32-arm64-msvc: 1.31.1 + lightningcss-win32-x64-msvc: 1.31.1 lilconfig@2.1.0: {} @@ -9843,6 +9918,7 @@ snapshots: '@rollup/rollup-win32-x64-gnu': 4.57.1 '@rollup/rollup-win32-x64-msvc': 4.57.1 fsevents: 2.3.3 + optional: true run-parallel@1.2.0: dependencies: @@ -10108,7 +10184,7 @@ snapshots: fast-fifo: 1.3.2 streamx: 2.22.1 - tar@7.5.7: + tar@7.5.9: dependencies: '@isaacs/fs-minipass': 4.0.1 chownr: 3.0.0 @@ -10293,35 +10369,83 @@ snapshots: transitivePeerDependencies: - rollup - vite@6.4.1(@types/node@24.10.13)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0): + vite@8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.25.12)(jiti@2.4.2)(yaml@2.8.0): dependencies: + '@oxc-project/runtime': 0.114.0 + lightningcss: 1.31.1 + picomatch: 4.0.3 + postcss: 8.5.6 + rolldown: 1.0.0-rc.5 + tinyglobby: 0.2.15 + optionalDependencies: + '@types/node': 24.10.13 esbuild: 0.25.12 - fdir: 6.5.0(picomatch@4.0.3) + fsevents: 2.3.3 + jiti: 2.4.2 + yaml: 2.8.0 + + vite@8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0): + dependencies: + '@oxc-project/runtime': 0.114.0 + lightningcss: 1.31.1 picomatch: 4.0.3 postcss: 8.5.6 - rollup: 4.57.1 + rolldown: 1.0.0-rc.5 tinyglobby: 0.2.15 optionalDependencies: '@types/node': 24.10.13 + esbuild: 0.27.3 fsevents: 2.3.3 jiti: 2.4.2 - lightningcss: 1.30.1 yaml: 2.8.0 - vitefu@1.1.1(vite@6.4.1(@types/node@24.10.13)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)): + vitefu@1.1.2(vite@8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.25.12)(jiti@2.4.2)(yaml@2.8.0)): optionalDependencies: - vite: 6.4.1(@types/node@24.10.13)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) + vite: 8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.25.12)(jiti@2.4.2)(yaml@2.8.0) - vitest@4.0.16(@opentelemetry/api@1.9.0)(@types/node@24.10.13)(@vitest/browser-playwright@4.0.16)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0): + vitefu@1.1.2(vite@8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0)): + optionalDependencies: + vite: 8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0) + + vitest@4.1.0-beta.4(@opentelemetry/api@1.9.0)(@types/node@24.10.13)(@vitest/browser-playwright@4.1.0-beta.4)(vite@8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.25.12)(jiti@2.4.2)(yaml@2.8.0)): + dependencies: + '@vitest/expect': 4.1.0-beta.4 + '@vitest/mocker': 4.1.0-beta.4(vite@8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.25.12)(jiti@2.4.2)(yaml@2.8.0)) + '@vitest/pretty-format': 4.1.0-beta.4 + '@vitest/runner': 4.1.0-beta.4 + '@vitest/snapshot': 4.1.0-beta.4 + '@vitest/spy': 4.1.0-beta.4 + '@vitest/utils': 4.1.0-beta.4 + es-module-lexer: 2.0.0 + expect-type: 1.3.0 + magic-string: 0.30.21 + obug: 2.1.1 + pathe: 2.0.3 + picomatch: 4.0.3 + std-env: 3.10.0 + tinybench: 2.9.0 + tinyexec: 1.0.2 + tinyglobby: 0.2.15 + tinyrainbow: 3.0.3 + vite: 8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.25.12)(jiti@2.4.2)(yaml@2.8.0) + why-is-node-running: 2.3.0 + optionalDependencies: + '@opentelemetry/api': 1.9.0 + '@types/node': 24.10.13 + '@vitest/browser-playwright': 4.1.0-beta.4(playwright@1.58.2)(vite@8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.25.12)(jiti@2.4.2)(yaml@2.8.0))(vitest@4.1.0-beta.4) + transitivePeerDependencies: + - msw + + vitest@4.1.0-beta.4(@opentelemetry/api@1.9.0)(@types/node@24.10.13)(@vitest/browser-playwright@4.1.0-beta.4)(vite@8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0)): dependencies: - '@vitest/expect': 4.0.16 - '@vitest/mocker': 4.0.16(vite@6.4.1(@types/node@24.10.13)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0)) - '@vitest/pretty-format': 4.0.16 - '@vitest/runner': 4.0.16 - '@vitest/snapshot': 4.0.16 - '@vitest/spy': 4.0.16 - '@vitest/utils': 4.0.16 - es-module-lexer: 1.7.0 + '@vitest/expect': 4.1.0-beta.4 + '@vitest/mocker': 4.1.0-beta.4(vite@8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0)) + '@vitest/pretty-format': 4.1.0-beta.4 + '@vitest/runner': 4.1.0-beta.4 + '@vitest/snapshot': 4.1.0-beta.4 + '@vitest/spy': 4.1.0-beta.4 + '@vitest/utils': 4.1.0-beta.4 + es-module-lexer: 2.0.0 expect-type: 1.3.0 magic-string: 0.30.21 obug: 2.1.1 @@ -10332,24 +10456,14 @@ snapshots: tinyexec: 1.0.2 tinyglobby: 0.2.15 tinyrainbow: 3.0.3 - vite: 6.4.1(@types/node@24.10.13)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0) + vite: 8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0) why-is-node-running: 2.3.0 optionalDependencies: '@opentelemetry/api': 1.9.0 '@types/node': 24.10.13 - '@vitest/browser-playwright': 4.0.16(playwright@1.58.2)(vite@6.4.1(@types/node@24.10.13)(jiti@2.4.2)(lightningcss@1.30.1)(yaml@2.8.0))(vitest@4.0.16) + '@vitest/browser-playwright': 4.1.0-beta.4(playwright@1.58.2)(vite@8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0))(vitest@4.1.0-beta.4) transitivePeerDependencies: - - jiti - - less - - lightningcss - msw - - sass - - sass-embedded - - stylus - - sugarss - - terser - - tsx - - yaml web-streams-polyfill@3.3.3: {} @@ -10440,7 +10554,7 @@ snapshots: ws@8.18.0: {} - ws@8.18.3: {} + ws@8.19.0: {} xss@1.0.15: dependencies: diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 8effca56d178..b92e6b2362a9 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -25,14 +25,14 @@ catalog: '@playwright/test': 1.58.2 '@polka/url': ^1.0.0-next.28 '@sveltejs/eslint-config': ^9.0.0 - '@sveltejs/vite-plugin-svelte': ^6.0.0-next.3 + '@sveltejs/vite-plugin-svelte': ^7.0.0 '@svitejs/changesets-changelog-github-compact': ^1.2.0 '@types/connect': ^3.4.38 '@types/estree': ^1.0.5 '@types/node': ^24.1.0 '@types/semver': ^7.5.6 '@types/set-cookie-parser': ^2.4.7 - '@vitest/browser-playwright': ^4.0.0 + '@vitest/browser-playwright': ^4.1.0-beta.4 dropcss: ^1.0.16 dts-buddy: ^0.7.0 esbuild: ^0.25.4 @@ -45,20 +45,17 @@ catalog: svelte-check: ^4.3.4 svelte-preprocess: ^6.0.0 valibot: ^1.1.0 - vite: ^6.3.5 - vitest: ^4.0.0 + vite: ^8.0.0-beta.15 + vitest: ^4.1.0-beta.4 wrangler: ^4.67.0 catalogs: + # these show up in the ci.yml like `vite: 'beta'`, etc. vite-baseline: - vite: ^5.4.21 # should be 5.0.3 but older versions cause errors in some tests - '@sveltejs/vite-plugin-svelte': ^4.0.0 - 'vitest>vite': ^6.0.0 # vitest@4 doesn't work with vite@5, vite@7 doesn't work on node18 + vite: ^8.0.0-beta.15 + '@sveltejs/vite-plugin-svelte': ^7.0.0 vite-beta: - vite: ^8.0.0-beta.9 - '@sveltejs/vite-plugin-svelte': ^7.0.0-next.0 - node-18: - vite: ^6.0.0 # vite7 requires node20 - '@sveltejs/vite-plugin-svelte': ^5.0.0 #vps6 requires node20 + vite: ^9.0.0-beta.0 + '@sveltejs/vite-plugin-svelte': ^7.0.0 overrides: # ci script replaces all overrides with the vite-xxx or node-xx catalogs above. # if you want to introduce an override, make sure to add it to all of them too From a2792e2cdc2dee91c20c7bfd921a104b539abae5 Mon Sep 17 00:00:00 2001 From: Ben McCann <322311+benmccann@users.noreply.github.com> Date: Tue, 24 Feb 2026 21:07:22 -0800 Subject: [PATCH 017/545] breaking: default the cookie `path` option to `"/"` (#15398) I should have done this as part of https://github.com/sveltejs/kit/pull/15388 Closes https://github.com/sveltejs/kit/issues/11799 --- .changeset/cuddly-tigers-attend.md | 5 +++ .../docs/20-core-concepts/20-load.md | 2 +- packages/kit/src/exports/public.d.ts | 37 ++++++++----------- packages/kit/src/runtime/server/cookie.js | 13 ++++--- .../kit/src/runtime/server/page/types.d.ts | 4 +- packages/kit/types/index.d.ts | 37 ++++++++----------- 6 files changed, 46 insertions(+), 52 deletions(-) create mode 100644 .changeset/cuddly-tigers-attend.md diff --git a/.changeset/cuddly-tigers-attend.md b/.changeset/cuddly-tigers-attend.md new file mode 100644 index 000000000000..2d1d9c4b5929 --- /dev/null +++ b/.changeset/cuddly-tigers-attend.md @@ -0,0 +1,5 @@ +--- +'@sveltejs/kit': major +--- + +breaking: default the cookie `path` option to `'/'` diff --git a/documentation/docs/20-core-concepts/20-load.md b/documentation/docs/20-core-concepts/20-load.md index d6a1ccc21825..85078b92bf0f 100644 --- a/documentation/docs/20-core-concepts/20-load.md +++ b/documentation/docs/20-core-concepts/20-load.md @@ -296,7 +296,7 @@ export async function load({ fetch, params }) { ## Cookies -A server `load` function can get and set [`cookies`](@sveltejs-kit#Cookies). +A server `load` function can get [`cookies`](@sveltejs-kit#Cookies) as shown below. When setting cookies, SvelteKit provides default values for `httpOnly`, `secure`, and `path` — as described in [the API documentation](@sveltejs-kit#Cookies) — in order to improve security and developer experience. ```js /// file: src/routes/+layout.server.js diff --git a/packages/kit/src/exports/public.d.ts b/packages/kit/src/exports/public.d.ts index 6baf0d6f0b0f..d4913f1dd488 100644 --- a/packages/kit/src/exports/public.d.ts +++ b/packages/kit/src/exports/public.d.ts @@ -263,57 +263,50 @@ export interface Cookies { /** * Gets a cookie that was previously set with `cookies.set`, or from the request headers. * @param name the name of the cookie - * @param opts the options, passed directly to `cookie.parse`. See documentation [here](https://github.com/jshttp/cookie#cookieparsestr-options) + * @param opts the options, passed directly to `cookie.parse`. See documentation [here](https://github.com/jshttp/cookie?tab=readme-ov-file#cookieparsecookiestr-options) */ get: (name: string, opts?: import('cookie').ParseOptions) => string | undefined; /** * Gets all cookies that were previously set with `cookies.set`, or from the request headers. - * @param opts the options, passed directly to `cookie.parse`. See documentation [here](https://github.com/jshttp/cookie#cookieparsestr-options) + * @param opts the options, passed directly to `cookie.parse`. See documentation [here](https://github.com/jshttp/cookie?tab=readme-ov-file#cookieparsecookiestr-options) */ getAll: (opts?: import('cookie').ParseOptions) => Array<{ name: string; value: string }>; /** * Sets a cookie. This will add a `set-cookie` header to the response, but also make the cookie available via `cookies.get` or `cookies.getAll` during the current request. * - * The `httpOnly` and `secure` options are `true` by default (except on http://localhost, where `secure` is `false`), and must be explicitly disabled if you want cookies to be readable by client-side JavaScript and/or transmitted over HTTP. The `sameSite` option defaults to `lax`. + * The `httpOnly` and `secure` options are `true` by default (except on http://localhost, where `secure` is `false`), and must be explicitly disabled if you want cookies to be readable by client-side JavaScript and/or transmitted over HTTP. * - * You must specify a `path` for the cookie. In most cases you should explicitly set `path: '/'` to make the cookie available throughout your app. You can use relative paths, or set `path: ''` to make the cookie only available on the current path and its children + * The `path` option is `'/'` by default. You can use relative paths, or set `path: ''` to make the cookie only available on the current path and its children. * @param name the name of the cookie * @param value the cookie value - * @param opts the options, passed directly to `cookie.serialize`. See documentation [here](https://github.com/jshttp/cookie#cookieserializename-value-options) + * @param opts the options passed to `cookie.serialize` with the SvelteKit defaults described above. See documentation [here](https://github.com/jshttp/cookie?tab=readme-ov-file#cookiestringifysetcookiesetcookieobj-options) */ - set: ( - name: string, - value: string, - opts: import('cookie').SerializeOptions & { path: string } - ) => void; + set: (name: string, value: string, opts: import('cookie').SerializeOptions) => void; /** * Deletes a cookie by setting its value to an empty string and setting the expiry date in the past. * - * You must specify a `path` for the cookie. In most cases you should explicitly set `path: '/'` to make the cookie available throughout your app. You can use relative paths, or set `path: ''` to make the cookie only available on the current path and its children + * The `httpOnly` and `secure` options are `true` by default (except on http://localhost, where `secure` is `false`), and must be explicitly disabled if you want cookies to be readable by client-side JavaScript and/or transmitted over HTTP. + * + * The `path` option is `'/'` by default. You can use relative paths, or set `path: ''` to make the cookie only available on the current path and its children. * @param name the name of the cookie - * @param opts the options, passed directly to `cookie.serialize`. The `path` must match the path of the cookie you want to delete. See documentation [here](https://github.com/jshttp/cookie#cookieserializename-value-options) + * @param opts the options passed to `cookie.serialize` with the SvelteKit defaults described above. See documentation [here](https://github.com/jshttp/cookie?tab=readme-ov-file#cookiestringifysetcookiesetcookieobj-options) */ - delete: (name: string, opts: import('cookie').SerializeOptions & { path: string }) => void; + delete: (name: string, opts: import('cookie').SerializeOptions) => void; /** * Serialize a cookie name-value pair into a `Set-Cookie` header string, but don't apply it to the response. * - * The `httpOnly` and `secure` options are `true` by default (except on http://localhost, where `secure` is `false`), and must be explicitly disabled if you want cookies to be readable by client-side JavaScript and/or transmitted over HTTP. The `sameSite` option defaults to `lax`. - * - * You must specify a `path` for the cookie. In most cases you should explicitly set `path: '/'` to make the cookie available throughout your app. You can use relative paths, or set `path: ''` to make the cookie only available on the current path and its children + * The `httpOnly` and `secure` options are `true` by default (except on http://localhost, where `secure` is `false`), and must be explicitly disabled if you want cookies to be readable by client-side JavaScript and/or transmitted over HTTP. * + * The `path` option is `'/'` by default. You can use relative paths, or set `path: ''` to make the cookie only available on the current path and its children. * @param name the name of the cookie * @param value the cookie value - * @param opts the options, passed directly to `cookie.serialize`. See documentation [here](https://github.com/jshttp/cookie#cookieserializename-value-options) + * @param opts the options passed to `cookie.serialize` with the SvelteKit defaults described above. See documentation [here](https://github.com/jshttp/cookie?tab=readme-ov-file#cookiestringifysetcookiesetcookieobj-options) */ - serialize: ( - name: string, - value: string, - opts: import('cookie').SerializeOptions & { path: string } - ) => string; + serialize: (name: string, value: string, opts: import('cookie').SerializeOptions) => string; } /** diff --git a/packages/kit/src/runtime/server/cookie.js b/packages/kit/src/runtime/server/cookie.js index 48434d26f709..bd36e86f0653 100644 --- a/packages/kit/src/runtime/server/cookie.js +++ b/packages/kit/src/runtime/server/cookie.js @@ -51,6 +51,7 @@ export function get_cookies(request, url) { /** @type {import('cookie').SerializeOptions} */ const defaults = { httpOnly: true, + path: '/', sameSite: 'lax', secure: url.hostname === 'localhost' && url.protocol === 'http:' ? false : true }; @@ -143,7 +144,7 @@ export function get_cookies(request, url) { /** * @param {string} name * @param {string} value - * @param {import('./page/types.js').Cookie['options']} options + * @param {import('cookie').SerializeOptions} options */ set(name, value, options) { set_internal(name, value, { ...defaults, ...options }); @@ -151,7 +152,7 @@ export function get_cookies(request, url) { /** * @param {string} name - * @param {import('./page/types.js').Cookie['options']} options + * @param {import('cookie').SerializeOptions} options */ delete(name, options) { cookies.set(name, '', { ...options, maxAge: 0 }); @@ -160,10 +161,10 @@ export function get_cookies(request, url) { /** * @param {string} name * @param {string} value - * @param {import('./page/types.js').Cookie['options']} options + * @param {import('cookie').SerializeOptions} options */ serialize(name, value, options) { - let path = options.path; + let path = options.path ?? '/'; if (!options.domain || options.domain === url.hostname) { if (!normalized_url) { @@ -217,7 +218,7 @@ export function get_cookies(request, url) { /** * @param {string} name * @param {string} value - * @param {import('./page/types.js').Cookie['options']} options + * @param {import('cookie').SerializeOptions} options */ function set_internal(name, value, options) { if (!normalized_url) { @@ -225,7 +226,7 @@ export function get_cookies(request, url) { return; } - let path = options.path; + let path = options.path ?? '/'; if (!options.domain || options.domain === url.hostname) { path = resolve(normalized_url, path); diff --git a/packages/kit/src/runtime/server/page/types.d.ts b/packages/kit/src/runtime/server/page/types.d.ts index 036114b5cf6e..7eaa50b9a814 100644 --- a/packages/kit/src/runtime/server/page/types.d.ts +++ b/packages/kit/src/runtime/server/page/types.d.ts @@ -39,7 +39,9 @@ export interface CspOpts { export interface Cookie { name: string; value: string; - options: SerializeOptions & { path: string }; + options: SerializeOptions & { + path: string; + }; } export type ServerDataSerializer = { diff --git a/packages/kit/types/index.d.ts b/packages/kit/types/index.d.ts index ec24fe0fcd59..9daaba850d42 100644 --- a/packages/kit/types/index.d.ts +++ b/packages/kit/types/index.d.ts @@ -238,57 +238,50 @@ declare module '@sveltejs/kit' { /** * Gets a cookie that was previously set with `cookies.set`, or from the request headers. * @param name the name of the cookie - * @param opts the options, passed directly to `cookie.parse`. See documentation [here](https://github.com/jshttp/cookie#cookieparsestr-options) + * @param opts the options, passed directly to `cookie.parse`. See documentation [here](https://github.com/jshttp/cookie?tab=readme-ov-file#cookieparsecookiestr-options) */ get: (name: string, opts?: import('cookie').ParseOptions) => string | undefined; /** * Gets all cookies that were previously set with `cookies.set`, or from the request headers. - * @param opts the options, passed directly to `cookie.parse`. See documentation [here](https://github.com/jshttp/cookie#cookieparsestr-options) + * @param opts the options, passed directly to `cookie.parse`. See documentation [here](https://github.com/jshttp/cookie?tab=readme-ov-file#cookieparsecookiestr-options) */ getAll: (opts?: import('cookie').ParseOptions) => Array<{ name: string; value: string }>; /** * Sets a cookie. This will add a `set-cookie` header to the response, but also make the cookie available via `cookies.get` or `cookies.getAll` during the current request. * - * The `httpOnly` and `secure` options are `true` by default (except on http://localhost, where `secure` is `false`), and must be explicitly disabled if you want cookies to be readable by client-side JavaScript and/or transmitted over HTTP. The `sameSite` option defaults to `lax`. + * The `httpOnly` and `secure` options are `true` by default (except on http://localhost, where `secure` is `false`), and must be explicitly disabled if you want cookies to be readable by client-side JavaScript and/or transmitted over HTTP. * - * You must specify a `path` for the cookie. In most cases you should explicitly set `path: '/'` to make the cookie available throughout your app. You can use relative paths, or set `path: ''` to make the cookie only available on the current path and its children + * The `path` option is `'/'` by default. You can use relative paths, or set `path: ''` to make the cookie only available on the current path and its children. * @param name the name of the cookie * @param value the cookie value - * @param opts the options, passed directly to `cookie.serialize`. See documentation [here](https://github.com/jshttp/cookie#cookieserializename-value-options) + * @param opts the options passed to `cookie.serialize` with the SvelteKit defaults described above. See documentation [here](https://github.com/jshttp/cookie?tab=readme-ov-file#cookiestringifysetcookiesetcookieobj-options) */ - set: ( - name: string, - value: string, - opts: import('cookie').SerializeOptions & { path: string } - ) => void; + set: (name: string, value: string, opts: import('cookie').SerializeOptions) => void; /** * Deletes a cookie by setting its value to an empty string and setting the expiry date in the past. * - * You must specify a `path` for the cookie. In most cases you should explicitly set `path: '/'` to make the cookie available throughout your app. You can use relative paths, or set `path: ''` to make the cookie only available on the current path and its children + * The `httpOnly` and `secure` options are `true` by default (except on http://localhost, where `secure` is `false`), and must be explicitly disabled if you want cookies to be readable by client-side JavaScript and/or transmitted over HTTP. + * + * The `path` option is `'/'` by default. You can use relative paths, or set `path: ''` to make the cookie only available on the current path and its children. * @param name the name of the cookie - * @param opts the options, passed directly to `cookie.serialize`. The `path` must match the path of the cookie you want to delete. See documentation [here](https://github.com/jshttp/cookie#cookieserializename-value-options) + * @param opts the options passed to `cookie.serialize` with the SvelteKit defaults described above. See documentation [here](https://github.com/jshttp/cookie?tab=readme-ov-file#cookiestringifysetcookiesetcookieobj-options) */ - delete: (name: string, opts: import('cookie').SerializeOptions & { path: string }) => void; + delete: (name: string, opts: import('cookie').SerializeOptions) => void; /** * Serialize a cookie name-value pair into a `Set-Cookie` header string, but don't apply it to the response. * - * The `httpOnly` and `secure` options are `true` by default (except on http://localhost, where `secure` is `false`), and must be explicitly disabled if you want cookies to be readable by client-side JavaScript and/or transmitted over HTTP. The `sameSite` option defaults to `lax`. - * - * You must specify a `path` for the cookie. In most cases you should explicitly set `path: '/'` to make the cookie available throughout your app. You can use relative paths, or set `path: ''` to make the cookie only available on the current path and its children + * The `httpOnly` and `secure` options are `true` by default (except on http://localhost, where `secure` is `false`), and must be explicitly disabled if you want cookies to be readable by client-side JavaScript and/or transmitted over HTTP. * + * The `path` option is `'/'` by default. You can use relative paths, or set `path: ''` to make the cookie only available on the current path and its children. * @param name the name of the cookie * @param value the cookie value - * @param opts the options, passed directly to `cookie.serialize`. See documentation [here](https://github.com/jshttp/cookie#cookieserializename-value-options) + * @param opts the options passed to `cookie.serialize` with the SvelteKit defaults described above. See documentation [here](https://github.com/jshttp/cookie?tab=readme-ov-file#cookiestringifysetcookiesetcookieobj-options) */ - serialize: ( - name: string, - value: string, - opts: import('cookie').SerializeOptions & { path: string } - ) => string; + serialize: (name: string, value: string, opts: import('cookie').SerializeOptions) => string; } /** From 84dda6d483904ece9a4aade6650b50aa028dbc08 Mon Sep 17 00:00:00 2001 From: Ben McCann <322311+benmccann@users.noreply.github.com> Date: Tue, 24 Feb 2026 22:54:31 -0800 Subject: [PATCH 018/545] chore: remove another rolldown check (#15415) I missed this one since it wasn't snake_case like the others --- .../src/exports/vite/build/build_service_worker.js | 12 +----------- 1 file changed, 1 insertion(+), 11 deletions(-) diff --git a/packages/kit/src/exports/vite/build/build_service_worker.js b/packages/kit/src/exports/vite/build/build_service_worker.js index a90c62dd1a4a..9e591946d595 100644 --- a/packages/kit/src/exports/vite/build/build_service_worker.js +++ b/packages/kit/src/exports/vite/build/build_service_worker.js @@ -1,4 +1,3 @@ -import fs from 'node:fs'; import * as vite from 'vite'; import { dedent } from '../../../core/sync/utils.js'; import { s } from '../../../utils/misc.js'; @@ -6,9 +5,6 @@ import { get_config_aliases, strip_virtual_prefix, get_env, normalize_id } from import { create_static_module } from '../../../core/env.js'; import { env_static_public, service_worker } from '../module_ids.js'; -// @ts-ignore `vite.rolldownVersion` only exists in `rolldown-vite` -const isRolldown = !!vite.rolldownVersion; - /** * @param {string} out * @param {import('types').ValidatedKitConfig} kit @@ -105,8 +101,7 @@ export async function build_service_worker( 'service-worker': service_worker_entry_file }, output: { - // .mjs so that esbuild doesn't incorrectly inject `export` https://github.com/vitejs/vite/issues/15379 - entryFileNames: `service-worker.${isRolldown ? 'js' : 'mjs'}`, + entryFileNames: 'service-worker.js', assetFileNames: `${kit.appDir}/immutable/assets/[name].[hash][extname]`, inlineDynamicImports: true } @@ -130,9 +125,4 @@ export async function build_service_worker( } } }); - - // rename .mjs to .js to avoid incorrect MIME types with ancient webservers - if (!isRolldown) { - fs.renameSync(`${out}/client/service-worker.mjs`, `${out}/client/service-worker.js`); - } } From 1d76212740f59ed58839ef569899c653870834fd Mon Sep 17 00:00:00 2001 From: Copilot <198982749+Copilot@users.noreply.github.com> Date: Wed, 25 Feb 2026 15:35:53 +0800 Subject: [PATCH 019/545] chore: remove dependency on `set-cookie-parser` (#15384) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Drops the `set-cookie-parser` dependency (and its `@types/*` package) by using `parseSetCookie` from the already-bundled `cookie@1.x` package and the standard `Headers.prototype.getSetCookie()` API (Node.js ≥ 18). ### Key changes - **`server/fetch.js`**: Replace `splitCookiesString` + `parseString` with `response.headers.getSetCookie()` (returns individual Set-Cookie headers as an array) + `parseSetCookie(str, { decode: (v) => v })` - **`exports/node/index.js`**: Replace `splitCookiesString(response.headers.get('set-cookie'))` workaround with `response.headers.getSetCookie()` directly - **`exports/vite/index.js`**: Remove `set-cookie-parser` from SSR externals list - **`package.json` / `pnpm-workspace.yaml`**: Remove `set-cookie-parser` and `@types/set-cookie-parser` ```js // Before for (const str of set_cookie_parser.splitCookiesString(response.headers.get('set-cookie'))) { const { name, value, ...options } = set_cookie_parser.parseString(str, { decodeValues: false }); // ... } // After for (const str of response.headers.getSetCookie()) { const { name, value, ...options } = parseSetCookie(str, { decode: (v) => v }); // ... } ```
Original prompt > > ---- > > *This section details on the original issue you should resolve* > > Various cookie upgrades and package removals > ### Describe the problem > > Upgrade to cookie 1.x > Allows dropping types package > Next release will allow dropping set-cookie-parser (https://github.com/jshttp/cookie/pull/244) > > ### Describe the proposed solution > > Update to latest cookie package > > ### Alternatives considered > > _No response_ > > ### Importance > > nice to have > > ### Additional Information > > _No response_ > > use `parseSetCookie` from the `cookie` package to replace the `set-cookie-parser` package > > ## Comments on the Issue (you are @copilot in this section) > > > @Conduitry > We don't want to work on this until we're ready to start making the push to SvelteKit 3.0 as it's going to be a breaking change. > @benmccann > We tried to upgrade cookie earlier, but had to roll it back due to breaking changes. SvelteKit 3 will happen soon and will upgrade to the latest > @benmccann > @copilot use `parseSetCookie` from the `cookie` package to replace the `set-cookie-parser` package in the `version-3` branch > >
- Fixes sveltejs/kit#14553 --- ✨ Let Copilot coding agent [set things up for you](https://github.com/sveltejs/kit/issues/new?title=✨+Set+up+Copilot+instructions&body=Configure%20instructions%20for%20this%20repository%20as%20documented%20in%20%5BBest%20practices%20for%20Copilot%20coding%20agent%20in%20your%20repository%5D%28https://gh.io/copilot-coding-agent-tips%29%2E%0A%0A%3COnboard%20this%20repo%3E&assignees=copilot) — coding agent works faster and does higher quality work when set up for your repo. --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: benmccann <322311+benmccann@users.noreply.github.com> Co-authored-by: Tee Ming --- .changeset/spicy-drinks-build.md | 5 +++++ packages/kit/package.json | 2 -- packages/kit/src/exports/node/index.js | 11 +---------- packages/kit/src/exports/vite/index.js | 3 +-- packages/kit/src/runtime/server/fetch.js | 25 ++++++++++-------------- pnpm-lock.yaml | 21 -------------------- pnpm-workspace.yaml | 1 - 7 files changed, 17 insertions(+), 51 deletions(-) create mode 100644 .changeset/spicy-drinks-build.md diff --git a/.changeset/spicy-drinks-build.md b/.changeset/spicy-drinks-build.md new file mode 100644 index 000000000000..453c6dc1b288 --- /dev/null +++ b/.changeset/spicy-drinks-build.md @@ -0,0 +1,5 @@ +--- +"@sveltejs/kit": patch +--- + +chore: remove dependency on `set-cookie-parser` diff --git a/packages/kit/package.json b/packages/kit/package.json index 7a3f2d7b0cd1..11b4e5fdc1e9 100644 --- a/packages/kit/package.json +++ b/packages/kit/package.json @@ -26,7 +26,6 @@ "esm-env": "^1.2.2", "magic-string": "^0.30.5", "mrmime": "^2.0.0", - "set-cookie-parser": "^3.0.0", "sirv": "^3.0.0" }, "devDependencies": { @@ -35,7 +34,6 @@ "@sveltejs/vite-plugin-svelte": "catalog:", "@types/connect": "catalog:", "@types/node": "catalog:", - "@types/set-cookie-parser": "catalog:", "dts-buddy": "catalog:", "rolldown": "^1.0.0-rc.5", "svelte": "catalog:", diff --git a/packages/kit/src/exports/node/index.js b/packages/kit/src/exports/node/index.js index ae2cae9ab3f8..35bd3564cc55 100644 --- a/packages/kit/src/exports/node/index.js +++ b/packages/kit/src/exports/node/index.js @@ -1,6 +1,5 @@ import { createReadStream } from 'node:fs'; import { Readable } from 'node:stream'; -import * as set_cookie_parser from 'set-cookie-parser'; import { SvelteKitError } from '../internal/index.js'; /** @@ -156,15 +155,7 @@ export async function getRequest({ request, base, bodySizeLimit }) { export async function setResponse(res, response) { for (const [key, value] of response.headers) { try { - res.setHeader( - key, - key === 'set-cookie' - ? set_cookie_parser.splitCookiesString( - // This is absurd but necessary, TODO: investigate why - /** @type {string}*/ (response.headers.get(key)) - ) - : value - ); + res.setHeader(key, key === 'set-cookie' ? response.headers.getSetCookie() : value); } catch (error) { res.getHeaderNames().forEach((name) => res.removeHeader(name)); res.writeHead(500).end(String(error)); diff --git a/packages/kit/src/exports/vite/index.js b/packages/kit/src/exports/vite/index.js index f8eb5801f0ee..dd742f0b0511 100644 --- a/packages/kit/src/exports/vite/index.js +++ b/packages/kit/src/exports/vite/index.js @@ -394,8 +394,7 @@ async function kit({ svelte_config }) { // These Kit dependencies are packaged as CommonJS, which means they must always be externalized. // Without this, the tests will still pass but `pnpm dev` will fail in projects that link `@sveltejs/kit`. /** @type {NonNullable} */ (new_config.ssr).external = [ - 'cookie', - 'set-cookie-parser' + 'cookie' ]; } diff --git a/packages/kit/src/runtime/server/fetch.js b/packages/kit/src/runtime/server/fetch.js index 41a12dd8cd89..52d4c1f64a4c 100644 --- a/packages/kit/src/runtime/server/fetch.js +++ b/packages/kit/src/runtime/server/fetch.js @@ -1,4 +1,4 @@ -import * as set_cookie_parser from 'set-cookie-parser'; +import { parseSetCookie } from 'cookie'; import { respond } from './respond.js'; import * as paths from '$app/paths/internal/server'; import { read_implementation } from '__sveltekit/server'; @@ -151,22 +151,17 @@ export function create_fetch({ event, options, manifest, state, get_cookie_heade const response = await internal_fetch(request, options, manifest, state); - const set_cookie = response.headers.get('set-cookie'); - if (set_cookie) { - for (const str of set_cookie_parser.splitCookiesString(set_cookie)) { - const { name, value, ...options } = set_cookie_parser.parseString(str, { - decodeValues: false - }); + for (const str of response.headers.getSetCookie()) { + const { name, value, ...options } = parseSetCookie(str, { decode: (v) => v }); - const path = options.path ?? (url.pathname.split('/').slice(0, -1).join('/') || '/'); + const path = options.path ?? (url.pathname.split('/').slice(0, -1).join('/') || '/'); - // options.sameSite is string, something more specific is required - type cast is safe - set_internal(name, value, { - path, - encode: (value) => value, - .../** @type {import('cookie').SerializeOptions} */ (options) - }); - } + // options.sameSite is string, something more specific is required - type cast is safe + set_internal(name, /** @type {string} */ (value), { + path, + encode: (value) => value, + .../** @type {import('cookie').SerializeOptions} */ (options) + }); } return response; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a29710313837..bb1f4fdd29d0 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -54,9 +54,6 @@ catalogs: '@types/semver': specifier: ^7.5.6 version: 7.5.8 - '@types/set-cookie-parser': - specifier: ^2.4.7 - version: 2.4.7 '@vitest/browser-playwright': specifier: ^4.1.0-beta.4 version: 4.1.0-beta.4 @@ -571,9 +568,6 @@ importers: mrmime: specifier: ^2.0.0 version: 2.0.0 - set-cookie-parser: - specifier: ^3.0.0 - version: 3.0.1 sirv: specifier: ^3.0.0 version: 3.0.2 @@ -593,9 +587,6 @@ importers: '@types/node': specifier: 'catalog:' version: 24.10.13 - '@types/set-cookie-parser': - specifier: 'catalog:' - version: 2.4.7 dts-buddy: specifier: 'catalog:' version: 0.7.0(typescript@5.8.3) @@ -3223,9 +3214,6 @@ packages: '@types/semver@7.5.8': resolution: {integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==} - '@types/set-cookie-parser@2.4.7': - resolution: {integrity: sha512-+ge/loa0oTozxip6zmhRIk8Z/boU51wl9Q6QdLZcokIGMzY5lFXYy/x7Htj2HTC6/KZP1hUbZ1ekx8DYXICvWg==} - '@types/triple-beam@1.3.5': resolution: {integrity: sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw==} @@ -5288,9 +5276,6 @@ packages: server-side-dep@file:packages/adapter-cloudflare/test/apps/workers/server-side-dep: resolution: {directory: packages/adapter-cloudflare/test/apps/workers/server-side-dep, type: directory} - set-cookie-parser@3.0.1: - resolution: {integrity: sha512-n7Z7dXZhJbwuAHhNzkTti6Aw9QDDjZtm3JTpTGATIdNzdQz5GuFs22w90BcvF4INfnrL5xrX3oGsuqO5Dx3A1Q==} - sharp@0.34.5: resolution: {integrity: sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} @@ -7674,10 +7659,6 @@ snapshots: '@types/semver@7.5.8': {} - '@types/set-cookie-parser@2.4.7': - dependencies: - '@types/node': 24.10.13 - '@types/triple-beam@1.3.5': {} '@types/trusted-types@2.0.7': {} @@ -9946,8 +9927,6 @@ snapshots: server-side-dep@file:packages/adapter-cloudflare/test/apps/workers/server-side-dep: {} - set-cookie-parser@3.0.1: {} - sharp@0.34.5: dependencies: '@img/colour': 1.0.0 diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index b92e6b2362a9..fd75b2114a13 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -31,7 +31,6 @@ catalog: '@types/estree': ^1.0.5 '@types/node': ^24.1.0 '@types/semver': ^7.5.6 - '@types/set-cookie-parser': ^2.4.7 '@vitest/browser-playwright': ^4.1.0-beta.4 dropcss: ^1.0.16 dts-buddy: ^0.7.0 From 7ea8afe53ebc17861b74a10c5346c476f7737333 Mon Sep 17 00:00:00 2001 From: Ben McCann <322311+benmccann@users.noreply.github.com> Date: Tue, 24 Feb 2026 23:40:06 -0800 Subject: [PATCH 020/545] chore: upgrade to TypeScript 5.9 (#15370) Didn't bump the peer dependency or create a changelog entry yet because we'll probably upgrade to TypeScript 6 before a final release. I created an issue to ensure we don't lose track of that --------- Co-authored-by: Tee Ming --- packages/adapter-auto/package.json | 2 +- packages/adapter-cloudflare/package.json | 2 +- packages/adapter-netlify/package.json | 2 +- packages/adapter-node/package.json | 2 +- packages/adapter-static/package.json | 2 +- packages/adapter-vercel/package.json | 2 +- packages/amp/package.json | 2 +- packages/enhanced-img/package.json | 2 +- packages/kit/package.json | 2 +- .../telemetry/record_span.enabled.spec.js | 16 +- packages/package/package.json | 2 +- pnpm-lock.yaml | 339 +++++++++--------- pnpm-workspace.yaml | 1 + 13 files changed, 191 insertions(+), 185 deletions(-) diff --git a/packages/adapter-auto/package.json b/packages/adapter-auto/package.json index c9e3ed1982c4..b10e4a1d4912 100644 --- a/packages/adapter-auto/package.json +++ b/packages/adapter-auto/package.json @@ -43,7 +43,7 @@ "@sveltejs/kit": "workspace:^", "@sveltejs/vite-plugin-svelte": "catalog:", "@types/node": "catalog:", - "typescript": "^5.3.3", + "typescript": "catalog:", "vite": "catalog:", "vitest": "catalog:" }, diff --git a/packages/adapter-cloudflare/package.json b/packages/adapter-cloudflare/package.json index 7945963a18f7..8133bcdec436 100644 --- a/packages/adapter-cloudflare/package.json +++ b/packages/adapter-cloudflare/package.json @@ -52,7 +52,7 @@ "@sveltejs/kit": "workspace:^", "@types/node": "catalog:", "esbuild": "catalog:", - "typescript": "^5.3.3", + "typescript": "catalog:", "vite": "catalog:", "vitest": "catalog:" }, diff --git a/packages/adapter-netlify/package.json b/packages/adapter-netlify/package.json index 2f00c5c00571..2ff69f788cb3 100644 --- a/packages/adapter-netlify/package.json +++ b/packages/adapter-netlify/package.json @@ -57,7 +57,7 @@ "@sveltejs/vite-plugin-svelte": "catalog:", "@types/node": "catalog:", "rolldown": "^1.0.0-rc.5", - "typescript": "^5.3.3", + "typescript": "catalog:", "vite": "catalog:", "vitest": "catalog:" }, diff --git a/packages/adapter-node/package.json b/packages/adapter-node/package.json index aa131586cd87..2c7bfc788423 100644 --- a/packages/adapter-node/package.json +++ b/packages/adapter-node/package.json @@ -48,7 +48,7 @@ "@types/node": "catalog:", "polka": "catalog:", "sirv": "^3.0.2", - "typescript": "^5.3.3", + "typescript": "catalog:", "vite": "catalog:", "vitest": "catalog:" }, diff --git a/packages/adapter-static/package.json b/packages/adapter-static/package.json index 99ce29a0392f..3b42bc57735e 100644 --- a/packages/adapter-static/package.json +++ b/packages/adapter-static/package.json @@ -45,7 +45,7 @@ "@types/node": "catalog:", "sirv": "^3.0.0", "svelte": "catalog:", - "typescript": "^5.3.3", + "typescript": "catalog:", "vite": "catalog:" }, "peerDependencies": { diff --git a/packages/adapter-vercel/package.json b/packages/adapter-vercel/package.json index a87fa3de7f43..770d85b93d39 100644 --- a/packages/adapter-vercel/package.json +++ b/packages/adapter-vercel/package.json @@ -47,7 +47,7 @@ "@sveltejs/kit": "workspace:^", "@sveltejs/vite-plugin-svelte": "catalog:", "@types/node": "catalog:", - "typescript": "^5.3.3", + "typescript": "catalog:", "vite": "catalog:", "vitest": "catalog:" }, diff --git a/packages/amp/package.json b/packages/amp/package.json index 64057390ddd1..71a625e1c479 100644 --- a/packages/amp/package.json +++ b/packages/amp/package.json @@ -35,7 +35,7 @@ }, "devDependencies": { "@sveltejs/kit": "workspace:^", - "typescript": "^5.3.3" + "typescript": "catalog:" }, "peerDependencies": { "@sveltejs/kit": "^1.0.0 || ^2.0.0" diff --git a/packages/enhanced-img/package.json b/packages/enhanced-img/package.json index 08c9e1cd2f85..e1625c5c976d 100644 --- a/packages/enhanced-img/package.json +++ b/packages/enhanced-img/package.json @@ -50,7 +50,7 @@ "@types/node": "catalog:", "rolldown": "^1.0.0-rc.5", "svelte": "catalog:", - "typescript": "^5.6.3", + "typescript": "catalog:", "vite": "catalog:", "vitest": "catalog:" }, diff --git a/packages/kit/package.json b/packages/kit/package.json index 11b4e5fdc1e9..53fc661155f7 100644 --- a/packages/kit/package.json +++ b/packages/kit/package.json @@ -38,7 +38,7 @@ "rolldown": "^1.0.0-rc.5", "svelte": "catalog:", "svelte-preprocess": "catalog:", - "typescript": "^5.3.3", + "typescript": "catalog:", "vite": "catalog:", "vitest": "catalog:" }, diff --git a/packages/kit/src/runtime/telemetry/record_span.enabled.spec.js b/packages/kit/src/runtime/telemetry/record_span.enabled.spec.js index b85a70b812d4..75fd31dd7de3 100644 --- a/packages/kit/src/runtime/telemetry/record_span.enabled.spec.js +++ b/packages/kit/src/runtime/telemetry/record_span.enabled.spec.js @@ -17,14 +17,16 @@ const { tracer, span } = vi.hoisted(() => { }) ); - const mock_tracer = /** @type {Tracer} */ ({ - startActiveSpan: vi.fn((_name, _options, fn) => { - return fn(span); - }), - startSpan: vi.fn((_name, _options, fn) => { - return fn(span); + const mock_tracer = /** @type {Tracer} */ ( + /** @type {unknown} */ ({ + startActiveSpan: vi.fn((_name, _options, fn) => { + return fn(span); + }), + startSpan: vi.fn((_name, _options, fn) => { + return fn(span); + }) }) - }); + ); return { tracer: mock_tracer, span: mock_span }; }); diff --git a/packages/package/package.json b/packages/package/package.json index d5bb18b34915..84b5f1663b6b 100644 --- a/packages/package/package.json +++ b/packages/package/package.json @@ -32,7 +32,7 @@ "prettier": "^3.1.1", "svelte": "catalog:", "svelte-preprocess": "catalog:", - "typescript": "^5.3.3", + "typescript": "catalog:", "vite": "catalog:", "vitest": "catalog:" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index bb1f4fdd29d0..b3ae18975ffa 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -87,6 +87,9 @@ catalogs: svelte-preprocess: specifier: ^6.0.0 version: 6.0.0 + typescript: + specifier: 5.9.3 + version: 5.9.3 valibot: specifier: ^1.1.0 version: 1.2.0 @@ -112,7 +115,7 @@ importers: version: 1.58.2 '@sveltejs/eslint-config': specifier: 'catalog:' - version: 9.0.0(@eslint/js@10.0.1(eslint@10.0.0(jiti@2.4.2)))(@stylistic/eslint-plugin-js@2.1.0(eslint@10.0.0(jiti@2.4.2)))(eslint-config-prettier@9.1.0(eslint@10.0.0(jiti@2.4.2)))(eslint-plugin-n@17.24.0(eslint@10.0.0(jiti@2.4.2))(typescript@5.8.3))(eslint-plugin-svelte@3.15.0(eslint@10.0.0(jiti@2.4.2))(svelte@5.51.5)(ts-node@10.9.2(@types/node@24.10.13)(typescript@5.8.3)))(eslint@10.0.0(jiti@2.4.2))(typescript-eslint@8.56.0(eslint@10.0.0(jiti@2.4.2))(typescript@5.8.3))(typescript@5.8.3) + version: 9.0.0(@eslint/js@10.0.1(eslint@10.0.0(jiti@2.4.2)))(@stylistic/eslint-plugin-js@2.1.0(eslint@10.0.0(jiti@2.4.2)))(eslint-config-prettier@9.1.0(eslint@10.0.0(jiti@2.4.2)))(eslint-plugin-n@17.24.0(eslint@10.0.0(jiti@2.4.2))(typescript@5.9.3))(eslint-plugin-svelte@3.15.0(eslint@10.0.0(jiti@2.4.2))(svelte@5.51.5)(ts-node@10.9.2(@types/node@24.10.13)(typescript@5.9.3)))(eslint@10.0.0(jiti@2.4.2))(typescript-eslint@8.56.0(eslint@10.0.0(jiti@2.4.2))(typescript@5.9.3))(typescript@5.9.3) '@svitejs/changesets-changelog-github-compact': specifier: 'catalog:' version: 1.2.0 @@ -138,8 +141,8 @@ importers: specifier: 'catalog:' version: 24.10.13 typescript: - specifier: ^5.3.3 - version: 5.8.3 + specifier: 'catalog:' + version: 5.9.3 vite: specifier: 'catalog:' version: 8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0) @@ -172,8 +175,8 @@ importers: specifier: 'catalog:' version: 0.25.12 typescript: - specifier: ^5.3.3 - version: 5.8.3 + specifier: 'catalog:' + version: 5.9.3 vite: specifier: 'catalog:' version: 8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.25.12)(jiti@2.4.2)(yaml@2.8.0) @@ -260,8 +263,8 @@ importers: specifier: ^1.0.0-rc.5 version: 1.0.0-rc.5 typescript: - specifier: ^5.3.3 - version: 5.8.3 + specifier: 'catalog:' + version: 5.9.3 vite: specifier: 'catalog:' version: 8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.25.12)(jiti@2.4.2)(yaml@2.8.0) @@ -354,8 +357,8 @@ importers: specifier: ^3.0.2 version: 3.0.2 typescript: - specifier: ^5.3.3 - version: 5.8.3 + specifier: 'catalog:' + version: 5.9.3 vite: specifier: 'catalog:' version: 8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0) @@ -384,8 +387,8 @@ importers: specifier: 'catalog:' version: 5.51.5 typescript: - specifier: ^5.3.3 - version: 5.8.3 + specifier: 'catalog:' + version: 5.9.3 vite: specifier: 'catalog:' version: 8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0) @@ -445,8 +448,8 @@ importers: specifier: 'catalog:' version: 24.10.13 typescript: - specifier: ^5.3.3 - version: 5.8.3 + specifier: 'catalog:' + version: 5.9.3 vite: specifier: 'catalog:' version: 8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.25.12)(jiti@2.4.2)(yaml@2.8.0) @@ -467,7 +470,7 @@ importers: version: 5.51.5 typescript: specifier: ^5.3.3 - version: 5.8.3 + version: 5.9.3 vite: specifier: 'catalog:' version: 8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0) @@ -478,8 +481,8 @@ importers: specifier: workspace:^ version: link:../kit typescript: - specifier: ^5.3.3 - version: 5.8.3 + specifier: 'catalog:' + version: 5.9.3 packages/enhanced-img: dependencies: @@ -515,8 +518,8 @@ importers: specifier: 'catalog:' version: 5.51.5 typescript: - specifier: ^5.6.3 - version: 5.8.3 + specifier: 'catalog:' + version: 5.9.3 vite: specifier: 'catalog:' version: 8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0) @@ -589,7 +592,7 @@ importers: version: 24.10.13 dts-buddy: specifier: 'catalog:' - version: 0.7.0(typescript@5.8.3) + version: 0.7.0(typescript@5.9.3) rolldown: specifier: ^1.0.0-rc.5 version: 1.0.0-rc.5 @@ -598,10 +601,10 @@ importers: version: 5.51.5 svelte-preprocess: specifier: 'catalog:' - version: 6.0.0(postcss-load-config@3.1.4(postcss@8.5.6)(ts-node@10.9.2(@types/node@24.10.13)(typescript@5.8.3)))(postcss@8.5.6)(svelte@5.51.5)(typescript@5.8.3) + version: 6.0.0(postcss-load-config@3.1.4(postcss@8.5.6)(ts-node@10.9.2(@types/node@24.10.13)(typescript@5.9.3)))(postcss@8.5.6)(svelte@5.51.5)(typescript@5.9.3) typescript: - specifier: ^5.3.3 - version: 5.8.3 + specifier: 'catalog:' + version: 5.9.3 vite: specifier: 'catalog:' version: 8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0) @@ -628,10 +631,10 @@ importers: version: 5.51.5 svelte-check: specifier: 'catalog:' - version: 4.3.4(picomatch@4.0.3)(svelte@5.51.5)(typescript@5.8.3) + version: 4.3.4(picomatch@4.0.3)(svelte@5.51.5)(typescript@5.9.3) typescript: specifier: ^5.5.4 - version: 5.8.3 + version: 5.9.3 vite: specifier: 'catalog:' version: 8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0) @@ -649,13 +652,13 @@ importers: version: 5.51.5 svelte-check: specifier: 'catalog:' - version: 4.3.4(picomatch@4.0.3)(svelte@5.51.5)(typescript@5.8.3) + version: 4.3.4(picomatch@4.0.3)(svelte@5.51.5)(typescript@5.9.3) typescript: specifier: ^5.5.4 - version: 5.8.3 + version: 5.9.3 valibot: specifier: 'catalog:' - version: 1.2.0(typescript@5.8.3) + version: 1.2.0(typescript@5.9.3) vite: specifier: 'catalog:' version: 8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0) @@ -685,16 +688,16 @@ importers: version: 5.51.5 svelte-check: specifier: 'catalog:' - version: 4.3.4(picomatch@4.0.3)(svelte@5.51.5)(typescript@5.8.3) + version: 4.3.4(picomatch@4.0.3)(svelte@5.51.5)(typescript@5.9.3) test-redirect-importer: specifier: workspace:* version: link:../../../../test-redirect-importer typescript: specifier: ^5.5.4 - version: 5.8.3 + version: 5.9.3 valibot: specifier: 'catalog:' - version: 1.2.0(typescript@5.8.3) + version: 1.2.0(typescript@5.9.3) vite: specifier: 'catalog:' version: 8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0) @@ -745,10 +748,10 @@ importers: version: 5.51.5 svelte-check: specifier: 'catalog:' - version: 4.3.4(picomatch@4.0.3)(svelte@5.51.5)(typescript@5.8.3) + version: 4.3.4(picomatch@4.0.3)(svelte@5.51.5)(typescript@5.9.3) typescript: specifier: ^5.5.4 - version: 5.8.3 + version: 5.9.3 vite: specifier: 'catalog:' version: 8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0) @@ -766,10 +769,10 @@ importers: version: 5.51.5 svelte-check: specifier: 'catalog:' - version: 4.3.4(picomatch@4.0.3)(svelte@5.51.5)(typescript@5.8.3) + version: 4.3.4(picomatch@4.0.3)(svelte@5.51.5)(typescript@5.9.3) typescript: specifier: ^5.5.4 - version: 5.8.3 + version: 5.9.3 vite: specifier: 'catalog:' version: 8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0) @@ -787,10 +790,10 @@ importers: version: 5.51.5 svelte-check: specifier: 'catalog:' - version: 4.3.4(picomatch@4.0.3)(svelte@5.51.5)(typescript@5.8.3) + version: 4.3.4(picomatch@4.0.3)(svelte@5.51.5)(typescript@5.9.3) typescript: specifier: ^5.5.4 - version: 5.8.3 + version: 5.9.3 vite: specifier: 'catalog:' version: 8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0) @@ -808,10 +811,10 @@ importers: version: 5.51.5 svelte-check: specifier: 'catalog:' - version: 4.3.4(picomatch@4.0.3)(svelte@5.51.5)(typescript@5.8.3) + version: 4.3.4(picomatch@4.0.3)(svelte@5.51.5)(typescript@5.9.3) typescript: specifier: ^5.5.4 - version: 5.8.3 + version: 5.9.3 vite: specifier: 'catalog:' version: 8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0) @@ -832,10 +835,10 @@ importers: version: 5.51.5 svelte-check: specifier: 'catalog:' - version: 4.3.4(picomatch@4.0.3)(svelte@5.51.5)(typescript@5.8.3) + version: 4.3.4(picomatch@4.0.3)(svelte@5.51.5)(typescript@5.9.3) typescript: specifier: ^5.5.4 - version: 5.8.3 + version: 5.9.3 vite: specifier: 'catalog:' version: 8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0) @@ -856,13 +859,13 @@ importers: version: 5.51.5 svelte-check: specifier: 'catalog:' - version: 4.3.4(picomatch@4.0.3)(svelte@5.51.5)(typescript@5.8.3) + version: 4.3.4(picomatch@4.0.3)(svelte@5.51.5)(typescript@5.9.3) typescript: specifier: ^5.5.4 - version: 5.8.3 + version: 5.9.3 valibot: specifier: 'catalog:' - version: 1.2.0(typescript@5.8.3) + version: 1.2.0(typescript@5.9.3) vite: specifier: 'catalog:' version: 8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0) @@ -883,10 +886,10 @@ importers: version: 5.51.5 svelte-check: specifier: 'catalog:' - version: 4.3.4(picomatch@4.0.3)(svelte@5.51.5)(typescript@5.8.3) + version: 4.3.4(picomatch@4.0.3)(svelte@5.51.5)(typescript@5.9.3) typescript: specifier: ^5.5.4 - version: 5.8.3 + version: 5.9.3 vite: specifier: 'catalog:' version: 8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0) @@ -904,10 +907,10 @@ importers: version: 5.51.5 svelte-check: specifier: 'catalog:' - version: 4.3.4(picomatch@4.0.3)(svelte@5.51.5)(typescript@5.8.3) + version: 4.3.4(picomatch@4.0.3)(svelte@5.51.5)(typescript@5.9.3) typescript: specifier: ^5.5.4 - version: 5.8.3 + version: 5.9.3 vite: specifier: 'catalog:' version: 8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0) @@ -925,10 +928,10 @@ importers: version: 5.51.5 svelte-check: specifier: 'catalog:' - version: 4.3.4(picomatch@4.0.3)(svelte@5.51.5)(typescript@5.8.3) + version: 4.3.4(picomatch@4.0.3)(svelte@5.51.5)(typescript@5.9.3) typescript: specifier: ^5.5.4 - version: 5.8.3 + version: 5.9.3 vite: specifier: 'catalog:' version: 8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0) @@ -955,10 +958,10 @@ importers: version: 5.51.5 svelte-check: specifier: 'catalog:' - version: 4.3.4(picomatch@4.0.3)(svelte@5.51.5)(typescript@5.8.3) + version: 4.3.4(picomatch@4.0.3)(svelte@5.51.5)(typescript@5.9.3) typescript: specifier: ^5.5.4 - version: 5.8.3 + version: 5.9.3 vite: specifier: 'catalog:' version: 8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0) @@ -979,10 +982,10 @@ importers: version: 5.51.5 svelte-check: specifier: 'catalog:' - version: 4.3.4(picomatch@4.0.3)(svelte@5.51.5)(typescript@5.8.3) + version: 4.3.4(picomatch@4.0.3)(svelte@5.51.5)(typescript@5.9.3) typescript: specifier: ^5.5.4 - version: 5.8.3 + version: 5.9.3 vite: specifier: 'catalog:' version: 8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0) @@ -1003,10 +1006,10 @@ importers: version: 5.51.5 svelte-check: specifier: 'catalog:' - version: 4.3.4(picomatch@4.0.3)(svelte@5.51.5)(typescript@5.8.3) + version: 4.3.4(picomatch@4.0.3)(svelte@5.51.5)(typescript@5.9.3) typescript: specifier: ^5.5.4 - version: 5.8.3 + version: 5.9.3 vite: specifier: 'catalog:' version: 8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0) @@ -1027,10 +1030,10 @@ importers: version: 5.51.5 svelte-check: specifier: 'catalog:' - version: 4.3.4(picomatch@4.0.3)(svelte@5.51.5)(typescript@5.8.3) + version: 4.3.4(picomatch@4.0.3)(svelte@5.51.5)(typescript@5.9.3) typescript: specifier: ^5.5.4 - version: 5.8.3 + version: 5.9.3 vite: specifier: 'catalog:' version: 8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0) @@ -1048,10 +1051,10 @@ importers: version: 5.51.5 svelte-check: specifier: 'catalog:' - version: 4.3.4(picomatch@4.0.3)(svelte@5.51.5)(typescript@5.8.3) + version: 4.3.4(picomatch@4.0.3)(svelte@5.51.5)(typescript@5.9.3) typescript: specifier: ^5.5.4 - version: 5.8.3 + version: 5.9.3 vite: specifier: 'catalog:' version: 8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0) @@ -1069,10 +1072,10 @@ importers: version: 5.51.5 svelte-check: specifier: 'catalog:' - version: 4.3.4(picomatch@4.0.3)(svelte@5.51.5)(typescript@5.8.3) + version: 4.3.4(picomatch@4.0.3)(svelte@5.51.5)(typescript@5.9.3) typescript: specifier: ^5.5.4 - version: 5.8.3 + version: 5.9.3 vite: specifier: 'catalog:' version: 8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0) @@ -1090,10 +1093,10 @@ importers: version: 5.51.5 svelte-check: specifier: 'catalog:' - version: 4.3.4(picomatch@4.0.3)(svelte@5.51.5)(typescript@5.8.3) + version: 4.3.4(picomatch@4.0.3)(svelte@5.51.5)(typescript@5.9.3) typescript: specifier: ^5.5.4 - version: 5.8.3 + version: 5.9.3 vite: specifier: 'catalog:' version: 8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0) @@ -1111,10 +1114,10 @@ importers: version: 5.51.5 svelte-check: specifier: 'catalog:' - version: 4.3.4(picomatch@4.0.3)(svelte@5.51.5)(typescript@5.8.3) + version: 4.3.4(picomatch@4.0.3)(svelte@5.51.5)(typescript@5.9.3) typescript: specifier: ^5.5.4 - version: 5.8.3 + version: 5.9.3 vite: specifier: 'catalog:' version: 8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0) @@ -1132,10 +1135,10 @@ importers: version: 5.51.5 svelte-check: specifier: 'catalog:' - version: 4.3.4(picomatch@4.0.3)(svelte@5.51.5)(typescript@5.8.3) + version: 4.3.4(picomatch@4.0.3)(svelte@5.51.5)(typescript@5.9.3) typescript: specifier: ^5.5.4 - version: 5.8.3 + version: 5.9.3 vite: specifier: 'catalog:' version: 8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0) @@ -1153,10 +1156,10 @@ importers: version: 5.51.5 svelte-check: specifier: 'catalog:' - version: 4.3.4(picomatch@4.0.3)(svelte@5.51.5)(typescript@5.8.3) + version: 4.3.4(picomatch@4.0.3)(svelte@5.51.5)(typescript@5.9.3) typescript: specifier: ^5.5.4 - version: 5.8.3 + version: 5.9.3 vite: specifier: 'catalog:' version: 8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0) @@ -1174,10 +1177,10 @@ importers: version: 5.51.5 svelte-check: specifier: 'catalog:' - version: 4.3.4(picomatch@4.0.3)(svelte@5.51.5)(typescript@5.8.3) + version: 4.3.4(picomatch@4.0.3)(svelte@5.51.5)(typescript@5.9.3) typescript: specifier: ^5.5.4 - version: 5.8.3 + version: 5.9.3 vite: specifier: 'catalog:' version: 8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0) @@ -1195,10 +1198,10 @@ importers: version: 5.51.5 svelte-check: specifier: 'catalog:' - version: 4.3.4(picomatch@4.0.3)(svelte@5.51.5)(typescript@5.8.3) + version: 4.3.4(picomatch@4.0.3)(svelte@5.51.5)(typescript@5.9.3) typescript: specifier: ^5.5.4 - version: 5.8.3 + version: 5.9.3 vite: specifier: 'catalog:' version: 8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0) @@ -1216,10 +1219,10 @@ importers: version: 5.51.5 svelte-check: specifier: 'catalog:' - version: 4.3.4(picomatch@4.0.3)(svelte@5.51.5)(typescript@5.8.3) + version: 4.3.4(picomatch@4.0.3)(svelte@5.51.5)(typescript@5.9.3) typescript: specifier: ^5.5.4 - version: 5.8.3 + version: 5.9.3 vite: specifier: 'catalog:' version: 8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0) @@ -1237,10 +1240,10 @@ importers: version: 5.51.5 svelte-check: specifier: 'catalog:' - version: 4.3.4(picomatch@4.0.3)(svelte@5.51.5)(typescript@5.8.3) + version: 4.3.4(picomatch@4.0.3)(svelte@5.51.5)(typescript@5.9.3) typescript: specifier: ^5.5.4 - version: 5.8.3 + version: 5.9.3 vite: specifier: 'catalog:' version: 8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0) @@ -1258,10 +1261,10 @@ importers: version: 5.51.5 svelte-check: specifier: 'catalog:' - version: 4.3.4(picomatch@4.0.3)(svelte@5.51.5)(typescript@5.8.3) + version: 4.3.4(picomatch@4.0.3)(svelte@5.51.5)(typescript@5.9.3) typescript: specifier: ^5.5.4 - version: 5.8.3 + version: 5.9.3 vite: specifier: 'catalog:' version: 8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0) @@ -1279,10 +1282,10 @@ importers: version: 5.51.5 svelte-check: specifier: 'catalog:' - version: 4.3.4(picomatch@4.0.3)(svelte@5.51.5)(typescript@5.8.3) + version: 4.3.4(picomatch@4.0.3)(svelte@5.51.5)(typescript@5.9.3) typescript: specifier: ^5.5.4 - version: 5.8.3 + version: 5.9.3 vite: specifier: 'catalog:' version: 8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0) @@ -1303,10 +1306,10 @@ importers: version: 5.51.5 svelte-check: specifier: 'catalog:' - version: 4.3.4(picomatch@4.0.3)(svelte@5.51.5)(typescript@5.8.3) + version: 4.3.4(picomatch@4.0.3)(svelte@5.51.5)(typescript@5.9.3) typescript: specifier: ^5.5.4 - version: 5.8.3 + version: 5.9.3 vite: specifier: 'catalog:' version: 8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0) @@ -1327,10 +1330,10 @@ importers: version: 5.51.5 svelte-check: specifier: 'catalog:' - version: 4.3.4(picomatch@4.0.3)(svelte@5.51.5)(typescript@5.8.3) + version: 4.3.4(picomatch@4.0.3)(svelte@5.51.5)(typescript@5.9.3) typescript: specifier: ^5.5.4 - version: 5.8.3 + version: 5.9.3 vite: specifier: 'catalog:' version: 8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0) @@ -1351,7 +1354,7 @@ importers: version: 7.7.4 svelte2tsx: specifier: ~0.7.33 - version: 0.7.33(svelte@5.51.5)(typescript@5.8.3) + version: 0.7.33(svelte@5.51.5)(typescript@5.9.3) devDependencies: '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' @@ -1370,10 +1373,10 @@ importers: version: 5.51.5 svelte-preprocess: specifier: 'catalog:' - version: 6.0.0(postcss-load-config@3.1.4(postcss@8.5.6)(ts-node@10.9.2(@types/node@24.10.13)(typescript@5.8.3)))(postcss@8.5.6)(svelte@5.51.5)(typescript@5.8.3) + version: 6.0.0(postcss-load-config@3.1.4(postcss@8.5.6)(ts-node@10.9.2(@types/node@24.10.13)(typescript@5.9.3)))(postcss@8.5.6)(svelte@5.51.5)(typescript@5.9.3) typescript: - specifier: ^5.3.3 - version: 5.8.3 + specifier: 'catalog:' + version: 5.9.3 vite: specifier: 'catalog:' version: 8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0) @@ -1436,13 +1439,13 @@ importers: version: 5.51.5 svelte-check: specifier: 'catalog:' - version: 4.3.4(picomatch@4.0.3)(svelte@5.51.5)(typescript@5.8.3) + version: 4.3.4(picomatch@4.0.3)(svelte@5.51.5)(typescript@5.9.3) typescript: specifier: ^5.5.0 - version: 5.8.3 + version: 5.9.3 valibot: specifier: 'catalog:' - version: 1.2.0(typescript@5.8.3) + version: 1.2.0(typescript@5.9.3) vite: specifier: 'catalog:' version: 8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0) @@ -5600,8 +5603,8 @@ packages: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.0.0' - typescript@5.8.3: - resolution: {integrity: sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==} + typescript@5.9.3: + resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} engines: {node: '>=14.17'} hasBin: true @@ -7572,17 +7575,17 @@ snapshots: dependencies: acorn: 8.16.0 - '@sveltejs/eslint-config@9.0.0(@eslint/js@10.0.1(eslint@10.0.0(jiti@2.4.2)))(@stylistic/eslint-plugin-js@2.1.0(eslint@10.0.0(jiti@2.4.2)))(eslint-config-prettier@9.1.0(eslint@10.0.0(jiti@2.4.2)))(eslint-plugin-n@17.24.0(eslint@10.0.0(jiti@2.4.2))(typescript@5.8.3))(eslint-plugin-svelte@3.15.0(eslint@10.0.0(jiti@2.4.2))(svelte@5.51.5)(ts-node@10.9.2(@types/node@24.10.13)(typescript@5.8.3)))(eslint@10.0.0(jiti@2.4.2))(typescript-eslint@8.56.0(eslint@10.0.0(jiti@2.4.2))(typescript@5.8.3))(typescript@5.8.3)': + '@sveltejs/eslint-config@9.0.0(@eslint/js@10.0.1(eslint@10.0.0(jiti@2.4.2)))(@stylistic/eslint-plugin-js@2.1.0(eslint@10.0.0(jiti@2.4.2)))(eslint-config-prettier@9.1.0(eslint@10.0.0(jiti@2.4.2)))(eslint-plugin-n@17.24.0(eslint@10.0.0(jiti@2.4.2))(typescript@5.9.3))(eslint-plugin-svelte@3.15.0(eslint@10.0.0(jiti@2.4.2))(svelte@5.51.5)(ts-node@10.9.2(@types/node@24.10.13)(typescript@5.9.3)))(eslint@10.0.0(jiti@2.4.2))(typescript-eslint@8.56.0(eslint@10.0.0(jiti@2.4.2))(typescript@5.9.3))(typescript@5.9.3)': dependencies: '@eslint/js': 10.0.1(eslint@10.0.0(jiti@2.4.2)) '@stylistic/eslint-plugin-js': 2.1.0(eslint@10.0.0(jiti@2.4.2)) eslint: 10.0.0(jiti@2.4.2) eslint-config-prettier: 9.1.0(eslint@10.0.0(jiti@2.4.2)) - eslint-plugin-n: 17.24.0(eslint@10.0.0(jiti@2.4.2))(typescript@5.8.3) - eslint-plugin-svelte: 3.15.0(eslint@10.0.0(jiti@2.4.2))(svelte@5.51.5)(ts-node@10.9.2(@types/node@24.10.13)(typescript@5.8.3)) + eslint-plugin-n: 17.24.0(eslint@10.0.0(jiti@2.4.2))(typescript@5.9.3) + eslint-plugin-svelte: 3.15.0(eslint@10.0.0(jiti@2.4.2))(svelte@5.51.5)(ts-node@10.9.2(@types/node@24.10.13)(typescript@5.9.3)) globals: 17.3.0 - typescript: 5.8.3 - typescript-eslint: 8.56.0(eslint@10.0.0(jiti@2.4.2))(typescript@5.8.3) + typescript: 5.9.3 + typescript-eslint: 8.56.0(eslint@10.0.0(jiti@2.4.2))(typescript@5.9.3) '@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.51.5)(vite@8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.25.12)(jiti@2.4.2)(yaml@2.8.0))': dependencies: @@ -7668,40 +7671,40 @@ snapshots: '@types/node': 24.10.13 optional: true - '@typescript-eslint/eslint-plugin@8.56.0(@typescript-eslint/parser@8.56.0(eslint@10.0.0(jiti@2.4.2))(typescript@5.8.3))(eslint@10.0.0(jiti@2.4.2))(typescript@5.8.3)': + '@typescript-eslint/eslint-plugin@8.56.0(@typescript-eslint/parser@8.56.0(eslint@10.0.0(jiti@2.4.2))(typescript@5.9.3))(eslint@10.0.0(jiti@2.4.2))(typescript@5.9.3)': dependencies: '@eslint-community/regexpp': 4.12.2 - '@typescript-eslint/parser': 8.56.0(eslint@10.0.0(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/parser': 8.56.0(eslint@10.0.0(jiti@2.4.2))(typescript@5.9.3) '@typescript-eslint/scope-manager': 8.56.0 - '@typescript-eslint/type-utils': 8.56.0(eslint@10.0.0(jiti@2.4.2))(typescript@5.8.3) - '@typescript-eslint/utils': 8.56.0(eslint@10.0.0(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/type-utils': 8.56.0(eslint@10.0.0(jiti@2.4.2))(typescript@5.9.3) + '@typescript-eslint/utils': 8.56.0(eslint@10.0.0(jiti@2.4.2))(typescript@5.9.3) '@typescript-eslint/visitor-keys': 8.56.0 eslint: 10.0.0(jiti@2.4.2) ignore: 7.0.5 natural-compare: 1.4.0 - ts-api-utils: 2.4.0(typescript@5.8.3) - typescript: 5.8.3 + ts-api-utils: 2.4.0(typescript@5.9.3) + typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.56.0(eslint@10.0.0(jiti@2.4.2))(typescript@5.8.3)': + '@typescript-eslint/parser@8.56.0(eslint@10.0.0(jiti@2.4.2))(typescript@5.9.3)': dependencies: '@typescript-eslint/scope-manager': 8.56.0 '@typescript-eslint/types': 8.56.0 - '@typescript-eslint/typescript-estree': 8.56.0(typescript@5.8.3) + '@typescript-eslint/typescript-estree': 8.56.0(typescript@5.9.3) '@typescript-eslint/visitor-keys': 8.56.0 debug: 4.4.3 eslint: 10.0.0(jiti@2.4.2) - typescript: 5.8.3 + typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/project-service@8.56.0(typescript@5.8.3)': + '@typescript-eslint/project-service@8.56.0(typescript@5.9.3)': dependencies: - '@typescript-eslint/tsconfig-utils': 8.56.0(typescript@5.8.3) + '@typescript-eslint/tsconfig-utils': 8.56.0(typescript@5.9.3) '@typescript-eslint/types': 8.56.0 debug: 4.4.3 - typescript: 5.8.3 + typescript: 5.9.3 transitivePeerDependencies: - supports-color @@ -7710,47 +7713,47 @@ snapshots: '@typescript-eslint/types': 8.56.0 '@typescript-eslint/visitor-keys': 8.56.0 - '@typescript-eslint/tsconfig-utils@8.56.0(typescript@5.8.3)': + '@typescript-eslint/tsconfig-utils@8.56.0(typescript@5.9.3)': dependencies: - typescript: 5.8.3 + typescript: 5.9.3 - '@typescript-eslint/type-utils@8.56.0(eslint@10.0.0(jiti@2.4.2))(typescript@5.8.3)': + '@typescript-eslint/type-utils@8.56.0(eslint@10.0.0(jiti@2.4.2))(typescript@5.9.3)': dependencies: '@typescript-eslint/types': 8.56.0 - '@typescript-eslint/typescript-estree': 8.56.0(typescript@5.8.3) - '@typescript-eslint/utils': 8.56.0(eslint@10.0.0(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/typescript-estree': 8.56.0(typescript@5.9.3) + '@typescript-eslint/utils': 8.56.0(eslint@10.0.0(jiti@2.4.2))(typescript@5.9.3) debug: 4.4.3 eslint: 10.0.0(jiti@2.4.2) - ts-api-utils: 2.4.0(typescript@5.8.3) - typescript: 5.8.3 + ts-api-utils: 2.4.0(typescript@5.9.3) + typescript: 5.9.3 transitivePeerDependencies: - supports-color '@typescript-eslint/types@8.56.0': {} - '@typescript-eslint/typescript-estree@8.56.0(typescript@5.8.3)': + '@typescript-eslint/typescript-estree@8.56.0(typescript@5.9.3)': dependencies: - '@typescript-eslint/project-service': 8.56.0(typescript@5.8.3) - '@typescript-eslint/tsconfig-utils': 8.56.0(typescript@5.8.3) + '@typescript-eslint/project-service': 8.56.0(typescript@5.9.3) + '@typescript-eslint/tsconfig-utils': 8.56.0(typescript@5.9.3) '@typescript-eslint/types': 8.56.0 '@typescript-eslint/visitor-keys': 8.56.0 debug: 4.4.3 minimatch: 9.0.5 semver: 7.7.4 tinyglobby: 0.2.15 - ts-api-utils: 2.4.0(typescript@5.8.3) - typescript: 5.8.3 + ts-api-utils: 2.4.0(typescript@5.9.3) + typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.56.0(eslint@10.0.0(jiti@2.4.2))(typescript@5.8.3)': + '@typescript-eslint/utils@8.56.0(eslint@10.0.0(jiti@2.4.2))(typescript@5.9.3)': dependencies: '@eslint-community/eslint-utils': 4.9.1(eslint@10.0.0(jiti@2.4.2)) '@typescript-eslint/scope-manager': 8.56.0 '@typescript-eslint/types': 8.56.0 - '@typescript-eslint/typescript-estree': 8.56.0(typescript@5.8.3) + '@typescript-eslint/typescript-estree': 8.56.0(typescript@5.9.3) eslint: 10.0.0(jiti@2.4.2) - typescript: 5.8.3 + typescript: 5.9.3 transitivePeerDependencies: - supports-color @@ -8346,16 +8349,16 @@ snapshots: detective-stylus@5.0.1: {} - detective-typescript@14.0.0(typescript@5.8.3): + detective-typescript@14.0.0(typescript@5.9.3): dependencies: - '@typescript-eslint/typescript-estree': 8.56.0(typescript@5.8.3) + '@typescript-eslint/typescript-estree': 8.56.0(typescript@5.9.3) ast-module-types: 6.0.1 node-source-walk: 7.0.1 - typescript: 5.8.3 + typescript: 5.9.3 transitivePeerDependencies: - supports-color - detective-vue2@2.2.0(typescript@5.8.3): + detective-vue2@2.2.0(typescript@5.9.3): dependencies: '@dependents/detective-less': 5.0.1 '@vue/compiler-sfc': 3.5.16 @@ -8363,8 +8366,8 @@ snapshots: detective-sass: 6.0.1 detective-scss: 5.0.1 detective-stylus: 5.0.1 - detective-typescript: 14.0.0(typescript@5.8.3) - typescript: 5.8.3 + detective-typescript: 14.0.0(typescript@5.9.3) + typescript: 5.9.3 transitivePeerDependencies: - supports-color @@ -8405,7 +8408,7 @@ snapshots: dropcss@1.0.16: {} - dts-buddy@0.7.0(typescript@5.8.3): + dts-buddy@0.7.0(typescript@5.9.3): dependencies: '@jridgewell/source-map': 0.3.6 '@jridgewell/sourcemap-codec': 1.5.5 @@ -8414,8 +8417,8 @@ snapshots: magic-string: 0.30.21 sade: 1.8.1 tinyglobby: 0.2.15 - ts-api-utils: 1.3.0(typescript@5.8.3) - typescript: 5.8.3 + ts-api-utils: 1.3.0(typescript@5.9.3) + typescript: 5.9.3 e2e-test-dep-cjs-only@file:packages/kit/test/apps/dev-only/_test_dependencies/cjs-only: {} @@ -8574,7 +8577,7 @@ snapshots: eslint: 10.0.0(jiti@2.4.2) eslint-compat-utils: 0.5.1(eslint@10.0.0(jiti@2.4.2)) - eslint-plugin-n@17.24.0(eslint@10.0.0(jiti@2.4.2))(typescript@5.8.3): + eslint-plugin-n@17.24.0(eslint@10.0.0(jiti@2.4.2))(typescript@5.9.3): dependencies: '@eslint-community/eslint-utils': 4.9.1(eslint@10.0.0(jiti@2.4.2)) enhanced-resolve: 5.19.0 @@ -8585,11 +8588,11 @@ snapshots: globrex: 0.1.2 ignore: 5.3.2 semver: 7.7.4 - ts-declaration-location: 1.0.7(typescript@5.8.3) + ts-declaration-location: 1.0.7(typescript@5.9.3) transitivePeerDependencies: - typescript - eslint-plugin-svelte@3.15.0(eslint@10.0.0(jiti@2.4.2))(svelte@5.51.5)(ts-node@10.9.2(@types/node@24.10.13)(typescript@5.8.3)): + eslint-plugin-svelte@3.15.0(eslint@10.0.0(jiti@2.4.2))(svelte@5.51.5)(ts-node@10.9.2(@types/node@24.10.13)(typescript@5.9.3)): dependencies: '@eslint-community/eslint-utils': 4.9.1(eslint@10.0.0(jiti@2.4.2)) '@jridgewell/sourcemap-codec': 1.5.5 @@ -8598,7 +8601,7 @@ snapshots: globals: 16.5.0 known-css-properties: 0.37.0 postcss: 8.5.6 - postcss-load-config: 3.1.4(postcss@8.5.6)(ts-node@10.9.2(@types/node@24.10.13)(typescript@5.8.3)) + postcss-load-config: 3.1.4(postcss@8.5.6)(ts-node@10.9.2(@types/node@24.10.13)(typescript@5.9.3)) postcss-safe-parser: 7.0.1(postcss@8.5.6) semver: 7.7.4 svelte-eslint-parser: 1.4.1(svelte@5.51.5) @@ -9631,13 +9634,13 @@ snapshots: '@polka/url': 1.0.0-next.28 trouter: 4.0.0 - postcss-load-config@3.1.4(postcss@8.5.6)(ts-node@10.9.2(@types/node@24.10.13)(typescript@5.8.3)): + postcss-load-config@3.1.4(postcss@8.5.6)(ts-node@10.9.2(@types/node@24.10.13)(typescript@5.9.3)): dependencies: lilconfig: 2.1.0 yaml: 1.10.2 optionalDependencies: postcss: 8.5.6 - ts-node: 10.9.2(@types/node@24.10.13)(typescript@5.8.3) + ts-node: 10.9.2(@types/node@24.10.13)(typescript@5.9.3) postcss-safe-parser@7.0.1(postcss@8.5.6): dependencies: @@ -9676,12 +9679,12 @@ snapshots: detective-sass: 6.0.1 detective-scss: 5.0.1 detective-stylus: 5.0.1 - detective-typescript: 14.0.0(typescript@5.8.3) - detective-vue2: 2.2.0(typescript@5.8.3) + detective-typescript: 14.0.0(typescript@5.9.3) + detective-vue2: 2.2.0(typescript@5.9.3) module-definition: 6.0.1 node-source-walk: 7.0.1 postcss: 8.5.6 - typescript: 5.8.3 + typescript: 5.9.3 transitivePeerDependencies: - supports-color @@ -10080,7 +10083,7 @@ snapshots: supports-preserve-symlinks-flag@1.0.0: {} - svelte-check@4.3.4(picomatch@4.0.3)(svelte@5.51.5)(typescript@5.8.3): + svelte-check@4.3.4(picomatch@4.0.3)(svelte@5.51.5)(typescript@5.9.3): dependencies: '@jridgewell/trace-mapping': 0.3.25 chokidar: 4.0.3 @@ -10088,7 +10091,7 @@ snapshots: picocolors: 1.1.1 sade: 1.8.1 svelte: 5.51.5 - typescript: 5.8.3 + typescript: 5.9.3 transitivePeerDependencies: - picomatch @@ -10107,22 +10110,22 @@ snapshots: dependencies: svelte: 5.51.5 - svelte-preprocess@6.0.0(postcss-load-config@3.1.4(postcss@8.5.6)(ts-node@10.9.2(@types/node@24.10.13)(typescript@5.8.3)))(postcss@8.5.6)(svelte@5.51.5)(typescript@5.8.3): + svelte-preprocess@6.0.0(postcss-load-config@3.1.4(postcss@8.5.6)(ts-node@10.9.2(@types/node@24.10.13)(typescript@5.9.3)))(postcss@8.5.6)(svelte@5.51.5)(typescript@5.9.3): dependencies: detect-indent: 6.1.0 strip-indent: 3.0.0 svelte: 5.51.5 optionalDependencies: postcss: 8.5.6 - postcss-load-config: 3.1.4(postcss@8.5.6)(ts-node@10.9.2(@types/node@24.10.13)(typescript@5.8.3)) - typescript: 5.8.3 + postcss-load-config: 3.1.4(postcss@8.5.6)(ts-node@10.9.2(@types/node@24.10.13)(typescript@5.9.3)) + typescript: 5.9.3 - svelte2tsx@0.7.33(svelte@5.51.5)(typescript@5.8.3): + svelte2tsx@0.7.33(svelte@5.51.5)(typescript@5.9.3): dependencies: dedent-js: 1.0.1 pascal-case: 3.1.2 svelte: 5.51.5 - typescript: 5.8.3 + typescript: 5.9.3 svelte@5.51.5: dependencies: @@ -10216,20 +10219,20 @@ snapshots: dependencies: regexparam: 3.0.0 - ts-api-utils@1.3.0(typescript@5.8.3): + ts-api-utils@1.3.0(typescript@5.9.3): dependencies: - typescript: 5.8.3 + typescript: 5.9.3 - ts-api-utils@2.4.0(typescript@5.8.3): + ts-api-utils@2.4.0(typescript@5.9.3): dependencies: - typescript: 5.8.3 + typescript: 5.9.3 - ts-declaration-location@1.0.7(typescript@5.8.3): + ts-declaration-location@1.0.7(typescript@5.9.3): dependencies: picomatch: 4.0.3 - typescript: 5.8.3 + typescript: 5.9.3 - ts-node@10.9.2(@types/node@24.10.13)(typescript@5.8.3): + ts-node@10.9.2(@types/node@24.10.13)(typescript@5.9.3): dependencies: '@cspotcode/source-map-support': 0.8.1 '@tsconfig/node10': 1.0.12 @@ -10243,7 +10246,7 @@ snapshots: create-require: 1.1.1 diff: 4.0.4 make-error: 1.3.6 - typescript: 5.8.3 + typescript: 5.9.3 v8-compile-cache-lib: 3.0.1 yn: 3.1.1 optional: true @@ -10256,18 +10259,18 @@ snapshots: type-fest@4.41.0: {} - typescript-eslint@8.56.0(eslint@10.0.0(jiti@2.4.2))(typescript@5.8.3): + typescript-eslint@8.56.0(eslint@10.0.0(jiti@2.4.2))(typescript@5.9.3): dependencies: - '@typescript-eslint/eslint-plugin': 8.56.0(@typescript-eslint/parser@8.56.0(eslint@10.0.0(jiti@2.4.2))(typescript@5.8.3))(eslint@10.0.0(jiti@2.4.2))(typescript@5.8.3) - '@typescript-eslint/parser': 8.56.0(eslint@10.0.0(jiti@2.4.2))(typescript@5.8.3) - '@typescript-eslint/typescript-estree': 8.56.0(typescript@5.8.3) - '@typescript-eslint/utils': 8.56.0(eslint@10.0.0(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/eslint-plugin': 8.56.0(@typescript-eslint/parser@8.56.0(eslint@10.0.0(jiti@2.4.2))(typescript@5.9.3))(eslint@10.0.0(jiti@2.4.2))(typescript@5.9.3) + '@typescript-eslint/parser': 8.56.0(eslint@10.0.0(jiti@2.4.2))(typescript@5.9.3) + '@typescript-eslint/typescript-estree': 8.56.0(typescript@5.9.3) + '@typescript-eslint/utils': 8.56.0(eslint@10.0.0(jiti@2.4.2))(typescript@5.9.3) eslint: 10.0.0(jiti@2.4.2) - typescript: 5.8.3 + typescript: 5.9.3 transitivePeerDependencies: - supports-color - typescript@5.8.3: {} + typescript@5.9.3: {} ufo@1.6.3: {} @@ -10329,9 +10332,9 @@ snapshots: v8-compile-cache-lib@3.0.1: optional: true - valibot@1.2.0(typescript@5.8.3): + valibot@1.2.0(typescript@5.9.3): optionalDependencies: - typescript: 5.8.3 + typescript: 5.9.3 validate-npm-package-license@3.0.4: dependencies: diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index fd75b2114a13..2ebd3de31f40 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -43,6 +43,7 @@ catalog: svelte: ^5.51.5 svelte-check: ^4.3.4 svelte-preprocess: ^6.0.0 + typescript: 5.9.3 valibot: ^1.1.0 vite: ^8.0.0-beta.15 vitest: ^4.1.0-beta.4 From d9209803924206eed99f69d872b4d3c87a3a4f56 Mon Sep 17 00:00:00 2001 From: Tee Ming Date: Wed, 25 Feb 2026 15:48:01 +0800 Subject: [PATCH 021/545] chore: check `WORKERS_CI` env variable to determine if we're building for Cloudflare Workers (#13733) Inspired by https://github.com/unjs/std-env/pull/156 ~This PR detects the `WORKERS_CI` environment variable so that `adapter-auto` and `adapter-cloudflare` can work with Cloudflare's [Workers Git integration](https://developers.cloudflare.com/workers/ci-cd/builds/) to build the app without requiring a wrangler configuration from the user.~ I've changed the scope of the PR to focus on only the Cloudflare adapter because we'll may end up deprecating adapter-auto. Also, it doesn't work well with adapter-auto since it requires a wrangler config file. --- ### Please don't delete this checklist! Before submitting the PR, please make sure you do the following: - [x] It's really useful if your PR references an issue where it is discussed ahead of time. In many cases, features are absent for a reason. For large changes, please create an RFC: https://github.com/sveltejs/rfcs - [x] This message body should clearly illustrate what problems it solves. - [x] Ideally, include a test that fails without this PR but passes with it. ### Tests - [ ] Run the tests with `pnpm test` and lint the project with `pnpm lint` and `pnpm check` ### Changesets - [x] If your PR makes a change that should be noted in one or more packages' changelogs, generate a changeset by running `pnpm changeset` and following the prompts. Changesets that add features should be `minor` and those that fix bugs should be `patch`. Please prefix changeset messages with `feat:`, `fix:`, or `chore:`. ### Edits - [x] Please ensure that 'Allow edits from maintainers' is checked. PRs without this option may be closed. --------- Co-authored-by: Chew Tee Ming Co-authored-by: Ben McCann <322311+benmccann@users.noreply.github.com> --- .changeset/plenty-cougars-wave.md | 5 +++++ packages/adapter-cloudflare/utils.js | 2 +- packages/adapter-cloudflare/utils.spec.js | 9 +++++++++ 3 files changed, 15 insertions(+), 1 deletion(-) create mode 100644 .changeset/plenty-cougars-wave.md diff --git a/.changeset/plenty-cougars-wave.md b/.changeset/plenty-cougars-wave.md new file mode 100644 index 000000000000..03d6b75dd276 --- /dev/null +++ b/.changeset/plenty-cougars-wave.md @@ -0,0 +1,5 @@ +--- +'@sveltejs/adapter-cloudflare': patch +--- + +chore: check the `WORKERS_CI` environment variable to determine if we're building for Cloudflare Workers diff --git a/packages/adapter-cloudflare/utils.js b/packages/adapter-cloudflare/utils.js index 28d83691b12a..f4b27e98d50f 100644 --- a/packages/adapter-cloudflare/utils.js +++ b/packages/adapter-cloudflare/utils.js @@ -9,7 +9,7 @@ export function is_building_for_cloudflare_pages(wrangler_config) { return true; } - if (wrangler_config.main || wrangler_config.assets) { + if (!!process.env.WORKERS_CI || wrangler_config.main || wrangler_config.assets) { return false; } diff --git a/packages/adapter-cloudflare/utils.spec.js b/packages/adapter-cloudflare/utils.spec.js index f6059a96609f..7d3755559376 100644 --- a/packages/adapter-cloudflare/utils.spec.js +++ b/packages/adapter-cloudflare/utils.spec.js @@ -68,6 +68,15 @@ describe('detects Cloudflare Workers project', () => { ) ).toBe(false); }); + + test('WORKERS_CI environment variable', () => { + vi.stubEnv('WORKERS_CI', '1'); + const result = is_building_for_cloudflare_pages( + /** @type {import('wrangler').Unstable_Config} */ ({}) + ); + vi.unstubAllEnvs(); + expect(result).toBe(false); + }); }); describe('validates Wrangler config', () => { From cb0a1ceba2fecfbe22342992a2a2e6181b93a515 Mon Sep 17 00:00:00 2001 From: Tee Ming Date: Wed, 25 Feb 2026 19:31:56 +0800 Subject: [PATCH 022/545] whitespace --- packages/kit/types/index.d.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/kit/types/index.d.ts b/packages/kit/types/index.d.ts index 1574b988ea49..7d7b33a81863 100644 --- a/packages/kit/types/index.d.ts +++ b/packages/kit/types/index.d.ts @@ -2409,7 +2409,7 @@ declare module '@sveltejs/kit' { : T[K]; } : T | undefined; - + type IsAny = 0 extends 1 & T ? true : false; interface Asset { file: string; From d54597018308068aea5268e6c45b26398cd57607 Mon Sep 17 00:00:00 2001 From: Ben McCann <322311+benmccann@users.noreply.github.com> Date: Wed, 25 Feb 2026 22:11:03 -0800 Subject: [PATCH 023/545] breaking: remove deprecated 'pragma' header (#15428) closes https://github.com/sveltejs/kit/issues/14576 --- .changeset/giant-numbers-care.md | 5 +++++ packages/kit/src/runtime/client/utils.js | 1 - 2 files changed, 5 insertions(+), 1 deletion(-) create mode 100644 .changeset/giant-numbers-care.md diff --git a/.changeset/giant-numbers-care.md b/.changeset/giant-numbers-care.md new file mode 100644 index 000000000000..e033cd7e2d28 --- /dev/null +++ b/.changeset/giant-numbers-care.md @@ -0,0 +1,5 @@ +--- +'@sveltejs/kit': major +--- + +breaking: remove deprecated `pragma` header in version polling for improved CORS support diff --git a/packages/kit/src/runtime/client/utils.js b/packages/kit/src/runtime/client/utils.js index 4a62702b9389..5bfe038747ce 100644 --- a/packages/kit/src/runtime/client/utils.js +++ b/packages/kit/src/runtime/client/utils.js @@ -270,7 +270,6 @@ export function create_updated_store() { try { const res = await fetch(`${assets}/${__SVELTEKIT_APP_VERSION_FILE__}`, { headers: { - pragma: 'no-cache', 'cache-control': 'no-cache' } }); From c696d52e41c38d6f460b28393490df8e9ad57cd4 Mon Sep 17 00:00:00 2001 From: Tee Ming Date: Thu, 26 Feb 2026 18:43:35 +0800 Subject: [PATCH 024/545] code begone --- .../docs/25-build-and-deploy/99-writing-adapters.md | 1 - .../98-reference/15-@sveltejs-kit-node-polyfills.md | 5 ----- packages/adapter-netlify/rolldown.config.js | 1 - packages/adapter-netlify/src/serverless.js | 1 - packages/adapter-netlify/src/shims.js | 2 -- packages/adapter-node/index.js | 1 - packages/adapter-node/rolldown.config.js | 11 +---------- packages/adapter-node/src/handler.js | 1 - packages/adapter-node/src/shims.js | 2 -- packages/kit/package.json | 4 ---- packages/kit/scripts/generate-dts.js | 1 - packages/kit/src/core/postbuild/analyse.js | 3 --- packages/kit/src/core/postbuild/fallback.js | 3 --- packages/kit/src/core/postbuild/prerender.js | 3 --- packages/kit/src/exports/hooks/sequence.spec.js | 3 --- packages/kit/src/exports/vite/dev/index.js | 3 --- packages/kit/src/exports/vite/preview/index.js | 3 --- packages/kit/src/runtime/server/cookie.spec.js | 3 --- packages/kit/tsconfig.json | 1 - packages/kit/types/index.d.ts | 11 ----------- 20 files changed, 1 insertion(+), 62 deletions(-) delete mode 100644 documentation/docs/98-reference/15-@sveltejs-kit-node-polyfills.md delete mode 100644 packages/adapter-netlify/src/shims.js delete mode 100644 packages/adapter-node/src/shims.js diff --git a/documentation/docs/25-build-and-deploy/99-writing-adapters.md b/documentation/docs/25-build-and-deploy/99-writing-adapters.md index 931420b8fb8f..823e2ffea350 100644 --- a/documentation/docs/25-build-and-deploy/99-writing-adapters.md +++ b/documentation/docs/25-build-and-deploy/99-writing-adapters.md @@ -57,7 +57,6 @@ Within the `adapt` method, there are a number of things that an adapter should d - Instantiates the app with a manifest generated with `builder.generateManifest({ relativePath })` - Listens for requests from the platform, converts them to a standard [`Request`](https://developer.mozilla.org/en-US/docs/Web/API/Request) if necessary, calls the `server.respond(request, { getClientAddress })` function to generate a [`Response`](https://developer.mozilla.org/en-US/docs/Web/API/Response) and responds with it - expose any platform-specific information to SvelteKit via the `platform` option passed to `server.respond` - - Globally shims `fetch` to work on the target platform, if necessary. SvelteKit provides a `@sveltejs/kit/node/polyfills` helper for platforms that can use `undici` - Bundle the output to avoid needing to install dependencies on the target platform, if necessary - Put the user's static files and the generated JS/CSS in the correct location for the target platform diff --git a/documentation/docs/98-reference/15-@sveltejs-kit-node-polyfills.md b/documentation/docs/98-reference/15-@sveltejs-kit-node-polyfills.md deleted file mode 100644 index a80c80ab3139..000000000000 --- a/documentation/docs/98-reference/15-@sveltejs-kit-node-polyfills.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: @sveltejs/kit/node/polyfills ---- - -> MODULE: @sveltejs/kit/node/polyfills diff --git a/packages/adapter-netlify/rolldown.config.js b/packages/adapter-netlify/rolldown.config.js index e9be35048264..9230e1b5fb01 100644 --- a/packages/adapter-netlify/rolldown.config.js +++ b/packages/adapter-netlify/rolldown.config.js @@ -21,7 +21,6 @@ function clearOutput(filepath) { const config = { input: { serverless: 'src/serverless.js', - shims: 'src/shims.js', edge: 'src/edge.js' }, output: { diff --git a/packages/adapter-netlify/src/serverless.js b/packages/adapter-netlify/src/serverless.js index c8a6447b6ad9..d783fe09ec2b 100644 --- a/packages/adapter-netlify/src/serverless.js +++ b/packages/adapter-netlify/src/serverless.js @@ -1,4 +1,3 @@ -import './shims'; import { Server } from '0SERVER'; import { createReadableStream } from '@sveltejs/kit/node'; import process from 'node:process'; diff --git a/packages/adapter-netlify/src/shims.js b/packages/adapter-netlify/src/shims.js deleted file mode 100644 index 2490311daa1e..000000000000 --- a/packages/adapter-netlify/src/shims.js +++ /dev/null @@ -1,2 +0,0 @@ -import { installPolyfills } from '@sveltejs/kit/node/polyfills'; -installPolyfills(); diff --git a/packages/adapter-node/index.js b/packages/adapter-node/index.js index 9ed74124b9bb..a6b3358d4a5a 100644 --- a/packages/adapter-node/index.js +++ b/packages/adapter-node/index.js @@ -94,7 +94,6 @@ export default function (opts = {}) { HANDLER: './handler.js', MANIFEST: './server/manifest.js', SERVER: './server/index.js', - SHIMS: './shims.js', ENV_PREFIX: JSON.stringify(envPrefix), PRECOMPRESS: JSON.stringify(precompress) } diff --git a/packages/adapter-node/rolldown.config.js b/packages/adapter-node/rolldown.config.js index 45167575c67d..d84faba8ae5a 100644 --- a/packages/adapter-node/rolldown.config.js +++ b/packages/adapter-node/rolldown.config.js @@ -61,16 +61,7 @@ export default [ codeSplitting: false }, plugins: [clearOutput('files/handler.js'), prefixBuiltinModules()], - external: ['ENV', 'MANIFEST', 'SERVER', 'SHIMS'], - platform: 'node' - }, - { - input: 'src/shims.js', - output: { - file: 'files/shims.js', - format: 'esm' - }, - plugins: [clearOutput('files/shims.js'), prefixBuiltinModules()], + external: ['ENV', 'MANIFEST', 'SERVER'], platform: 'node' } ]; diff --git a/packages/adapter-node/src/handler.js b/packages/adapter-node/src/handler.js index b8fd2f38cbe5..72e5a105a73b 100644 --- a/packages/adapter-node/src/handler.js +++ b/packages/adapter-node/src/handler.js @@ -1,4 +1,3 @@ -import 'SHIMS'; import fs from 'node:fs'; import path from 'node:path'; import process from 'node:process'; diff --git a/packages/adapter-node/src/shims.js b/packages/adapter-node/src/shims.js deleted file mode 100644 index 2490311daa1e..000000000000 --- a/packages/adapter-node/src/shims.js +++ /dev/null @@ -1,2 +0,0 @@ -import { installPolyfills } from '@sveltejs/kit/node/polyfills'; -installPolyfills(); diff --git a/packages/kit/package.json b/packages/kit/package.json index c7b871f19160..457b8a990bbb 100644 --- a/packages/kit/package.json +++ b/packages/kit/package.json @@ -112,10 +112,6 @@ "types": "./types/index.d.ts", "import": "./src/exports/node/index.js" }, - "./node/polyfills": { - "types": "./types/index.d.ts", - "import": "./src/exports/node/polyfills.js" - }, "./hooks": { "types": "./types/index.d.ts", "import": "./src/exports/hooks/index.js" diff --git a/packages/kit/scripts/generate-dts.js b/packages/kit/scripts/generate-dts.js index b470d6d63494..60c7fe7d103f 100644 --- a/packages/kit/scripts/generate-dts.js +++ b/packages/kit/scripts/generate-dts.js @@ -7,7 +7,6 @@ await createBundle({ '@sveltejs/kit': 'src/exports/public.d.ts', '@sveltejs/kit/hooks': 'src/exports/hooks/index.js', '@sveltejs/kit/node': 'src/exports/node/index.js', - '@sveltejs/kit/node/polyfills': 'src/exports/node/polyfills.js', '@sveltejs/kit/vite': 'src/exports/vite/index.js', '$app/environment': 'src/runtime/app/environment/types.d.ts', '$app/forms': 'src/runtime/app/forms.js', diff --git a/packages/kit/src/core/postbuild/analyse.js b/packages/kit/src/core/postbuild/analyse.js index aa99609e6a04..76936b253e24 100644 --- a/packages/kit/src/core/postbuild/analyse.js +++ b/packages/kit/src/core/postbuild/analyse.js @@ -4,7 +4,6 @@ import { pathToFileURL } from 'node:url'; import { validate_server_exports } from '../../utils/exports.js'; import { load_config } from '../config/index.js'; import { forked } from '../../utils/fork.js'; -import { installPolyfills } from '../../exports/node/polyfills.js'; import { ENDPOINT_METHODS } from '../../constants.js'; import { filter_env } from '../../utils/env.js'; import { has_server_load, resolve_route } from '../../utils/routing.js'; @@ -50,8 +49,6 @@ async function analyse({ /** @type {import('types').ServerInternalModule} */ const internal = await import(pathToFileURL(`${server_root}/server/internal.js`).href); - installPolyfills(); - // configure `import { building } from '$app/environment'` — // essential we do this before analysing the code internal.set_building(); diff --git a/packages/kit/src/core/postbuild/fallback.js b/packages/kit/src/core/postbuild/fallback.js index 39356887a289..ef0d0530955f 100644 --- a/packages/kit/src/core/postbuild/fallback.js +++ b/packages/kit/src/core/postbuild/fallback.js @@ -1,7 +1,6 @@ import { readFileSync } from 'node:fs'; import { join } from 'node:path'; import { pathToFileURL } from 'node:url'; -import { installPolyfills } from '../../exports/node/polyfills.js'; import { load_config } from '../config/index.js'; import { forked } from '../../utils/fork.js'; @@ -17,8 +16,6 @@ async function generate_fallback({ manifest_path, env }) { /** @type {import('types').ValidatedKitConfig} */ const config = (await load_config()).kit; - installPolyfills(); - const server_root = join(config.outDir, 'output'); /** @type {import('types').ServerInternalModule} */ diff --git a/packages/kit/src/core/postbuild/prerender.js b/packages/kit/src/core/postbuild/prerender.js index 8caa68fdfe85..6acf8e47dff4 100644 --- a/packages/kit/src/core/postbuild/prerender.js +++ b/packages/kit/src/core/postbuild/prerender.js @@ -1,7 +1,6 @@ import { existsSync, readFileSync, statSync, writeFileSync } from 'node:fs'; import { dirname, join } from 'node:path'; import { pathToFileURL } from 'node:url'; -import { installPolyfills } from '../../exports/node/polyfills.js'; import { mkdirp, posixify, walk } from '../../utils/filesystem.js'; import { decode_uri, is_root_relative, resolve } from '../../utils/url.js'; import { escape_html } from '../../utils/escape.js'; @@ -124,8 +123,6 @@ async function prerender({ hash, out, manifest_path, metadata, verbose, env }) { /** @type {import('types').Logger} */ const log = logger({ verbose }); - installPolyfills(); - /** @type {Map} */ const saved = new Map(); diff --git a/packages/kit/src/exports/hooks/sequence.spec.js b/packages/kit/src/exports/hooks/sequence.spec.js index e3ccc1cf930e..a6516f445f4a 100644 --- a/packages/kit/src/exports/hooks/sequence.spec.js +++ b/packages/kit/src/exports/hooks/sequence.spec.js @@ -2,7 +2,6 @@ /** @import { RequestState } from 'types' */ import { assert, expect, test, vi } from 'vitest'; import { sequence } from './sequence.js'; -import { installPolyfills } from '../node/polyfills.js'; import { noop_span } from '../../runtime/telemetry/noop.js'; const dummy_event = vi.hoisted( @@ -29,8 +28,6 @@ vi.mock(import('@sveltejs/kit/internal/server'), async (actualPromise) => { }; }); -installPolyfills(); - test('applies handlers in sequence', async () => { /** @type {string[]} */ const order = []; diff --git a/packages/kit/src/exports/vite/dev/index.js b/packages/kit/src/exports/vite/dev/index.js index cc116bac0792..7313f237d353 100644 --- a/packages/kit/src/exports/vite/dev/index.js +++ b/packages/kit/src/exports/vite/dev/index.js @@ -7,7 +7,6 @@ import { styleText } from 'node:util'; import sirv from 'sirv'; import { isCSSRequest, loadEnv, buildErrorMessage } from 'vite'; import { createReadableStream, getRequest, setResponse } from '../../../exports/node/index.js'; -import { installPolyfills } from '../../../exports/node/polyfills.js'; import { coalesce_to_error } from '../../../utils/error.js'; import { from_fs, posixify, resolve_entry, to_fs } from '../../../utils/filesystem.js'; import { load_error_page } from '../../../core/config/index.js'; @@ -32,8 +31,6 @@ const vite_css_query_regex = /(?:\?|&)(?:raw|url|inline)(?:&|$)/; * @return {Promise void>>} */ export async function dev(vite, vite_config, svelte_config, get_remotes) { - installPolyfills(); - const async_local_storage = new AsyncLocalStorage(); globalThis.__SVELTEKIT_TRACK__ = (label) => { diff --git a/packages/kit/src/exports/vite/preview/index.js b/packages/kit/src/exports/vite/preview/index.js index 02a89e9e6dd4..54c856418d63 100644 --- a/packages/kit/src/exports/vite/preview/index.js +++ b/packages/kit/src/exports/vite/preview/index.js @@ -5,7 +5,6 @@ import { lookup } from 'mrmime'; import sirv from 'sirv'; import { loadEnv, normalizePath } from 'vite'; import { createReadableStream, getRequest, setResponse } from '../../../exports/node/index.js'; -import { installPolyfills } from '../../../exports/node/polyfills.js'; import { SVELTE_KIT_ASSETS } from '../../../constants.js'; import { not_found } from '../utils.js'; @@ -19,8 +18,6 @@ import { not_found } from '../utils.js'; * @param {import('types').ValidatedConfig} svelte_config */ export async function preview(vite, vite_config, svelte_config) { - installPolyfills(); - const { paths } = svelte_config.kit; const base = paths.base; const assets = paths.assets ? SVELTE_KIT_ASSETS : paths.base; diff --git a/packages/kit/src/runtime/server/cookie.spec.js b/packages/kit/src/runtime/server/cookie.spec.js index 658697aebac5..efcb8c531458 100644 --- a/packages/kit/src/runtime/server/cookie.spec.js +++ b/packages/kit/src/runtime/server/cookie.spec.js @@ -1,9 +1,6 @@ import process from 'node:process'; import { assert, expect, test, describe } from 'vitest'; import { domain_matches, path_matches, get_cookies } from './cookie.js'; -import { installPolyfills } from '@sveltejs/kit/node/polyfills'; - -installPolyfills(); const domains = { positive: [ diff --git a/packages/kit/tsconfig.json b/packages/kit/tsconfig.json index f94a6a9ec71c..952ee7b30d3f 100644 --- a/packages/kit/tsconfig.json +++ b/packages/kit/tsconfig.json @@ -11,7 +11,6 @@ "paths": { "@sveltejs/kit": ["./src/exports/public.d.ts"], "@sveltejs/kit/node": ["./src/exports/node/index.js"], - "@sveltejs/kit/node/polyfills": ["./src/exports/node/polyfills.js"], "@sveltejs/kit/internal": ["./src/exports/internal/index.js"], "@sveltejs/kit/internal/server": ["./src/exports/internal/server.js"], "$app/paths": ["./src/runtime/app/paths/public.d.ts"], diff --git a/packages/kit/types/index.d.ts b/packages/kit/types/index.d.ts index e9fcea6e04f4..0815489c9c08 100644 --- a/packages/kit/types/index.d.ts +++ b/packages/kit/types/index.d.ts @@ -2878,17 +2878,6 @@ declare module '@sveltejs/kit/node' { export {}; } -declare module '@sveltejs/kit/node/polyfills' { - /** - * Make various web APIs available as globals: - * - `crypto` - * - `File` - */ - export function installPolyfills(): void; - - export {}; -} - declare module '@sveltejs/kit/vite' { /** * Returns the SvelteKit Vite plugins. From d333c41cba66ce3027aa98a15831867863d9481c Mon Sep 17 00:00:00 2001 From: Tee Ming Date: Thu, 26 Feb 2026 18:45:00 +0800 Subject: [PATCH 025/545] changesets --- .changeset/cyan-zoos-love.md | 5 +++++ .changeset/many-jeans-feel.md | 6 ++++++ 2 files changed, 11 insertions(+) create mode 100644 .changeset/cyan-zoos-love.md create mode 100644 .changeset/many-jeans-feel.md diff --git a/.changeset/cyan-zoos-love.md b/.changeset/cyan-zoos-love.md new file mode 100644 index 000000000000..391ee6403465 --- /dev/null +++ b/.changeset/cyan-zoos-love.md @@ -0,0 +1,5 @@ +--- +'@sveltejs/kit': major +--- + +breaking: remove `@sveltejs/kit/node/polyfills` diff --git a/.changeset/many-jeans-feel.md b/.changeset/many-jeans-feel.md new file mode 100644 index 000000000000..e8f56a7afb9c --- /dev/null +++ b/.changeset/many-jeans-feel.md @@ -0,0 +1,6 @@ +--- +'@sveltejs/adapter-netlify': major +'@sveltejs/adapter-node': major +--- + +breaking: remove Node 18 polyfills From 732e691b2c3b85a4d8a6ba83b3bdac838d3df5dc Mon Sep 17 00:00:00 2001 From: Tee Ming Date: Thu, 26 Feb 2026 18:48:14 +0800 Subject: [PATCH 026/545] Revert "changesets" This reverts commit d333c41cba66ce3027aa98a15831867863d9481c. --- .changeset/cyan-zoos-love.md | 5 ----- .changeset/many-jeans-feel.md | 6 ------ 2 files changed, 11 deletions(-) delete mode 100644 .changeset/cyan-zoos-love.md delete mode 100644 .changeset/many-jeans-feel.md diff --git a/.changeset/cyan-zoos-love.md b/.changeset/cyan-zoos-love.md deleted file mode 100644 index 391ee6403465..000000000000 --- a/.changeset/cyan-zoos-love.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@sveltejs/kit': major ---- - -breaking: remove `@sveltejs/kit/node/polyfills` diff --git a/.changeset/many-jeans-feel.md b/.changeset/many-jeans-feel.md deleted file mode 100644 index e8f56a7afb9c..000000000000 --- a/.changeset/many-jeans-feel.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -'@sveltejs/adapter-netlify': major -'@sveltejs/adapter-node': major ---- - -breaking: remove Node 18 polyfills From 73291741753e7dbcc3dbd88deb042f0ab2404e97 Mon Sep 17 00:00:00 2001 From: Tee Ming Date: Thu, 26 Feb 2026 18:48:22 +0800 Subject: [PATCH 027/545] Revert "code begone" This reverts commit c696d52e41c38d6f460b28393490df8e9ad57cd4. --- .../docs/25-build-and-deploy/99-writing-adapters.md | 1 + .../98-reference/15-@sveltejs-kit-node-polyfills.md | 5 +++++ packages/adapter-netlify/rolldown.config.js | 1 + packages/adapter-netlify/src/serverless.js | 1 + packages/adapter-netlify/src/shims.js | 2 ++ packages/adapter-node/index.js | 1 + packages/adapter-node/rolldown.config.js | 11 ++++++++++- packages/adapter-node/src/handler.js | 1 + packages/adapter-node/src/shims.js | 2 ++ packages/kit/package.json | 4 ++++ packages/kit/scripts/generate-dts.js | 1 + packages/kit/src/core/postbuild/analyse.js | 3 +++ packages/kit/src/core/postbuild/fallback.js | 3 +++ packages/kit/src/core/postbuild/prerender.js | 3 +++ packages/kit/src/exports/hooks/sequence.spec.js | 3 +++ packages/kit/src/exports/vite/dev/index.js | 3 +++ packages/kit/src/exports/vite/preview/index.js | 3 +++ packages/kit/src/runtime/server/cookie.spec.js | 3 +++ packages/kit/tsconfig.json | 1 + packages/kit/types/index.d.ts | 11 +++++++++++ 20 files changed, 62 insertions(+), 1 deletion(-) create mode 100644 documentation/docs/98-reference/15-@sveltejs-kit-node-polyfills.md create mode 100644 packages/adapter-netlify/src/shims.js create mode 100644 packages/adapter-node/src/shims.js diff --git a/documentation/docs/25-build-and-deploy/99-writing-adapters.md b/documentation/docs/25-build-and-deploy/99-writing-adapters.md index 823e2ffea350..931420b8fb8f 100644 --- a/documentation/docs/25-build-and-deploy/99-writing-adapters.md +++ b/documentation/docs/25-build-and-deploy/99-writing-adapters.md @@ -57,6 +57,7 @@ Within the `adapt` method, there are a number of things that an adapter should d - Instantiates the app with a manifest generated with `builder.generateManifest({ relativePath })` - Listens for requests from the platform, converts them to a standard [`Request`](https://developer.mozilla.org/en-US/docs/Web/API/Request) if necessary, calls the `server.respond(request, { getClientAddress })` function to generate a [`Response`](https://developer.mozilla.org/en-US/docs/Web/API/Response) and responds with it - expose any platform-specific information to SvelteKit via the `platform` option passed to `server.respond` + - Globally shims `fetch` to work on the target platform, if necessary. SvelteKit provides a `@sveltejs/kit/node/polyfills` helper for platforms that can use `undici` - Bundle the output to avoid needing to install dependencies on the target platform, if necessary - Put the user's static files and the generated JS/CSS in the correct location for the target platform diff --git a/documentation/docs/98-reference/15-@sveltejs-kit-node-polyfills.md b/documentation/docs/98-reference/15-@sveltejs-kit-node-polyfills.md new file mode 100644 index 000000000000..a80c80ab3139 --- /dev/null +++ b/documentation/docs/98-reference/15-@sveltejs-kit-node-polyfills.md @@ -0,0 +1,5 @@ +--- +title: @sveltejs/kit/node/polyfills +--- + +> MODULE: @sveltejs/kit/node/polyfills diff --git a/packages/adapter-netlify/rolldown.config.js b/packages/adapter-netlify/rolldown.config.js index 9230e1b5fb01..e9be35048264 100644 --- a/packages/adapter-netlify/rolldown.config.js +++ b/packages/adapter-netlify/rolldown.config.js @@ -21,6 +21,7 @@ function clearOutput(filepath) { const config = { input: { serverless: 'src/serverless.js', + shims: 'src/shims.js', edge: 'src/edge.js' }, output: { diff --git a/packages/adapter-netlify/src/serverless.js b/packages/adapter-netlify/src/serverless.js index d783fe09ec2b..c8a6447b6ad9 100644 --- a/packages/adapter-netlify/src/serverless.js +++ b/packages/adapter-netlify/src/serverless.js @@ -1,3 +1,4 @@ +import './shims'; import { Server } from '0SERVER'; import { createReadableStream } from '@sveltejs/kit/node'; import process from 'node:process'; diff --git a/packages/adapter-netlify/src/shims.js b/packages/adapter-netlify/src/shims.js new file mode 100644 index 000000000000..2490311daa1e --- /dev/null +++ b/packages/adapter-netlify/src/shims.js @@ -0,0 +1,2 @@ +import { installPolyfills } from '@sveltejs/kit/node/polyfills'; +installPolyfills(); diff --git a/packages/adapter-node/index.js b/packages/adapter-node/index.js index a6b3358d4a5a..9ed74124b9bb 100644 --- a/packages/adapter-node/index.js +++ b/packages/adapter-node/index.js @@ -94,6 +94,7 @@ export default function (opts = {}) { HANDLER: './handler.js', MANIFEST: './server/manifest.js', SERVER: './server/index.js', + SHIMS: './shims.js', ENV_PREFIX: JSON.stringify(envPrefix), PRECOMPRESS: JSON.stringify(precompress) } diff --git a/packages/adapter-node/rolldown.config.js b/packages/adapter-node/rolldown.config.js index d84faba8ae5a..45167575c67d 100644 --- a/packages/adapter-node/rolldown.config.js +++ b/packages/adapter-node/rolldown.config.js @@ -61,7 +61,16 @@ export default [ codeSplitting: false }, plugins: [clearOutput('files/handler.js'), prefixBuiltinModules()], - external: ['ENV', 'MANIFEST', 'SERVER'], + external: ['ENV', 'MANIFEST', 'SERVER', 'SHIMS'], + platform: 'node' + }, + { + input: 'src/shims.js', + output: { + file: 'files/shims.js', + format: 'esm' + }, + plugins: [clearOutput('files/shims.js'), prefixBuiltinModules()], platform: 'node' } ]; diff --git a/packages/adapter-node/src/handler.js b/packages/adapter-node/src/handler.js index 72e5a105a73b..b8fd2f38cbe5 100644 --- a/packages/adapter-node/src/handler.js +++ b/packages/adapter-node/src/handler.js @@ -1,3 +1,4 @@ +import 'SHIMS'; import fs from 'node:fs'; import path from 'node:path'; import process from 'node:process'; diff --git a/packages/adapter-node/src/shims.js b/packages/adapter-node/src/shims.js new file mode 100644 index 000000000000..2490311daa1e --- /dev/null +++ b/packages/adapter-node/src/shims.js @@ -0,0 +1,2 @@ +import { installPolyfills } from '@sveltejs/kit/node/polyfills'; +installPolyfills(); diff --git a/packages/kit/package.json b/packages/kit/package.json index 457b8a990bbb..c7b871f19160 100644 --- a/packages/kit/package.json +++ b/packages/kit/package.json @@ -112,6 +112,10 @@ "types": "./types/index.d.ts", "import": "./src/exports/node/index.js" }, + "./node/polyfills": { + "types": "./types/index.d.ts", + "import": "./src/exports/node/polyfills.js" + }, "./hooks": { "types": "./types/index.d.ts", "import": "./src/exports/hooks/index.js" diff --git a/packages/kit/scripts/generate-dts.js b/packages/kit/scripts/generate-dts.js index 60c7fe7d103f..b470d6d63494 100644 --- a/packages/kit/scripts/generate-dts.js +++ b/packages/kit/scripts/generate-dts.js @@ -7,6 +7,7 @@ await createBundle({ '@sveltejs/kit': 'src/exports/public.d.ts', '@sveltejs/kit/hooks': 'src/exports/hooks/index.js', '@sveltejs/kit/node': 'src/exports/node/index.js', + '@sveltejs/kit/node/polyfills': 'src/exports/node/polyfills.js', '@sveltejs/kit/vite': 'src/exports/vite/index.js', '$app/environment': 'src/runtime/app/environment/types.d.ts', '$app/forms': 'src/runtime/app/forms.js', diff --git a/packages/kit/src/core/postbuild/analyse.js b/packages/kit/src/core/postbuild/analyse.js index 76936b253e24..aa99609e6a04 100644 --- a/packages/kit/src/core/postbuild/analyse.js +++ b/packages/kit/src/core/postbuild/analyse.js @@ -4,6 +4,7 @@ import { pathToFileURL } from 'node:url'; import { validate_server_exports } from '../../utils/exports.js'; import { load_config } from '../config/index.js'; import { forked } from '../../utils/fork.js'; +import { installPolyfills } from '../../exports/node/polyfills.js'; import { ENDPOINT_METHODS } from '../../constants.js'; import { filter_env } from '../../utils/env.js'; import { has_server_load, resolve_route } from '../../utils/routing.js'; @@ -49,6 +50,8 @@ async function analyse({ /** @type {import('types').ServerInternalModule} */ const internal = await import(pathToFileURL(`${server_root}/server/internal.js`).href); + installPolyfills(); + // configure `import { building } from '$app/environment'` — // essential we do this before analysing the code internal.set_building(); diff --git a/packages/kit/src/core/postbuild/fallback.js b/packages/kit/src/core/postbuild/fallback.js index ef0d0530955f..39356887a289 100644 --- a/packages/kit/src/core/postbuild/fallback.js +++ b/packages/kit/src/core/postbuild/fallback.js @@ -1,6 +1,7 @@ import { readFileSync } from 'node:fs'; import { join } from 'node:path'; import { pathToFileURL } from 'node:url'; +import { installPolyfills } from '../../exports/node/polyfills.js'; import { load_config } from '../config/index.js'; import { forked } from '../../utils/fork.js'; @@ -16,6 +17,8 @@ async function generate_fallback({ manifest_path, env }) { /** @type {import('types').ValidatedKitConfig} */ const config = (await load_config()).kit; + installPolyfills(); + const server_root = join(config.outDir, 'output'); /** @type {import('types').ServerInternalModule} */ diff --git a/packages/kit/src/core/postbuild/prerender.js b/packages/kit/src/core/postbuild/prerender.js index 6acf8e47dff4..8caa68fdfe85 100644 --- a/packages/kit/src/core/postbuild/prerender.js +++ b/packages/kit/src/core/postbuild/prerender.js @@ -1,6 +1,7 @@ import { existsSync, readFileSync, statSync, writeFileSync } from 'node:fs'; import { dirname, join } from 'node:path'; import { pathToFileURL } from 'node:url'; +import { installPolyfills } from '../../exports/node/polyfills.js'; import { mkdirp, posixify, walk } from '../../utils/filesystem.js'; import { decode_uri, is_root_relative, resolve } from '../../utils/url.js'; import { escape_html } from '../../utils/escape.js'; @@ -123,6 +124,8 @@ async function prerender({ hash, out, manifest_path, metadata, verbose, env }) { /** @type {import('types').Logger} */ const log = logger({ verbose }); + installPolyfills(); + /** @type {Map} */ const saved = new Map(); diff --git a/packages/kit/src/exports/hooks/sequence.spec.js b/packages/kit/src/exports/hooks/sequence.spec.js index a6516f445f4a..e3ccc1cf930e 100644 --- a/packages/kit/src/exports/hooks/sequence.spec.js +++ b/packages/kit/src/exports/hooks/sequence.spec.js @@ -2,6 +2,7 @@ /** @import { RequestState } from 'types' */ import { assert, expect, test, vi } from 'vitest'; import { sequence } from './sequence.js'; +import { installPolyfills } from '../node/polyfills.js'; import { noop_span } from '../../runtime/telemetry/noop.js'; const dummy_event = vi.hoisted( @@ -28,6 +29,8 @@ vi.mock(import('@sveltejs/kit/internal/server'), async (actualPromise) => { }; }); +installPolyfills(); + test('applies handlers in sequence', async () => { /** @type {string[]} */ const order = []; diff --git a/packages/kit/src/exports/vite/dev/index.js b/packages/kit/src/exports/vite/dev/index.js index 7313f237d353..cc116bac0792 100644 --- a/packages/kit/src/exports/vite/dev/index.js +++ b/packages/kit/src/exports/vite/dev/index.js @@ -7,6 +7,7 @@ import { styleText } from 'node:util'; import sirv from 'sirv'; import { isCSSRequest, loadEnv, buildErrorMessage } from 'vite'; import { createReadableStream, getRequest, setResponse } from '../../../exports/node/index.js'; +import { installPolyfills } from '../../../exports/node/polyfills.js'; import { coalesce_to_error } from '../../../utils/error.js'; import { from_fs, posixify, resolve_entry, to_fs } from '../../../utils/filesystem.js'; import { load_error_page } from '../../../core/config/index.js'; @@ -31,6 +32,8 @@ const vite_css_query_regex = /(?:\?|&)(?:raw|url|inline)(?:&|$)/; * @return {Promise void>>} */ export async function dev(vite, vite_config, svelte_config, get_remotes) { + installPolyfills(); + const async_local_storage = new AsyncLocalStorage(); globalThis.__SVELTEKIT_TRACK__ = (label) => { diff --git a/packages/kit/src/exports/vite/preview/index.js b/packages/kit/src/exports/vite/preview/index.js index 54c856418d63..02a89e9e6dd4 100644 --- a/packages/kit/src/exports/vite/preview/index.js +++ b/packages/kit/src/exports/vite/preview/index.js @@ -5,6 +5,7 @@ import { lookup } from 'mrmime'; import sirv from 'sirv'; import { loadEnv, normalizePath } from 'vite'; import { createReadableStream, getRequest, setResponse } from '../../../exports/node/index.js'; +import { installPolyfills } from '../../../exports/node/polyfills.js'; import { SVELTE_KIT_ASSETS } from '../../../constants.js'; import { not_found } from '../utils.js'; @@ -18,6 +19,8 @@ import { not_found } from '../utils.js'; * @param {import('types').ValidatedConfig} svelte_config */ export async function preview(vite, vite_config, svelte_config) { + installPolyfills(); + const { paths } = svelte_config.kit; const base = paths.base; const assets = paths.assets ? SVELTE_KIT_ASSETS : paths.base; diff --git a/packages/kit/src/runtime/server/cookie.spec.js b/packages/kit/src/runtime/server/cookie.spec.js index efcb8c531458..658697aebac5 100644 --- a/packages/kit/src/runtime/server/cookie.spec.js +++ b/packages/kit/src/runtime/server/cookie.spec.js @@ -1,6 +1,9 @@ import process from 'node:process'; import { assert, expect, test, describe } from 'vitest'; import { domain_matches, path_matches, get_cookies } from './cookie.js'; +import { installPolyfills } from '@sveltejs/kit/node/polyfills'; + +installPolyfills(); const domains = { positive: [ diff --git a/packages/kit/tsconfig.json b/packages/kit/tsconfig.json index 952ee7b30d3f..f94a6a9ec71c 100644 --- a/packages/kit/tsconfig.json +++ b/packages/kit/tsconfig.json @@ -11,6 +11,7 @@ "paths": { "@sveltejs/kit": ["./src/exports/public.d.ts"], "@sveltejs/kit/node": ["./src/exports/node/index.js"], + "@sveltejs/kit/node/polyfills": ["./src/exports/node/polyfills.js"], "@sveltejs/kit/internal": ["./src/exports/internal/index.js"], "@sveltejs/kit/internal/server": ["./src/exports/internal/server.js"], "$app/paths": ["./src/runtime/app/paths/public.d.ts"], diff --git a/packages/kit/types/index.d.ts b/packages/kit/types/index.d.ts index 0815489c9c08..e9fcea6e04f4 100644 --- a/packages/kit/types/index.d.ts +++ b/packages/kit/types/index.d.ts @@ -2878,6 +2878,17 @@ declare module '@sveltejs/kit/node' { export {}; } +declare module '@sveltejs/kit/node/polyfills' { + /** + * Make various web APIs available as globals: + * - `crypto` + * - `File` + */ + export function installPolyfills(): void; + + export {}; +} + declare module '@sveltejs/kit/vite' { /** * Returns the SvelteKit Vite plugins. From ac46f8fb82718be81a856751f3d735f78a90ad15 Mon Sep 17 00:00:00 2001 From: Tee Ming Date: Thu, 26 Feb 2026 18:50:08 +0800 Subject: [PATCH 028/545] push --- .changeset/cyan-zoos-love.md | 5 +++++ .changeset/many-jeans-feel.md | 6 ++++++ .../docs/25-build-and-deploy/99-writing-adapters.md | 1 - .../98-reference/15-@sveltejs-kit-node-polyfills.md | 5 ----- packages/adapter-netlify/rolldown.config.js | 1 - packages/adapter-netlify/src/serverless.js | 1 - packages/adapter-netlify/src/shims.js | 2 -- packages/adapter-node/index.js | 1 - packages/adapter-node/rolldown.config.js | 11 +---------- packages/adapter-node/src/handler.js | 1 - packages/adapter-node/src/shims.js | 2 -- packages/kit/package.json | 4 ---- packages/kit/scripts/generate-dts.js | 1 - packages/kit/src/core/postbuild/analyse.js | 3 --- packages/kit/src/core/postbuild/fallback.js | 3 --- packages/kit/src/core/postbuild/prerender.js | 3 --- packages/kit/src/exports/hooks/sequence.spec.js | 3 --- packages/kit/src/exports/vite/dev/index.js | 3 --- packages/kit/src/exports/vite/preview/index.js | 3 --- packages/kit/src/runtime/server/cookie.spec.js | 3 --- packages/kit/tsconfig.json | 1 - packages/kit/types/index.d.ts | 11 ----------- 22 files changed, 12 insertions(+), 62 deletions(-) create mode 100644 .changeset/cyan-zoos-love.md create mode 100644 .changeset/many-jeans-feel.md delete mode 100644 documentation/docs/98-reference/15-@sveltejs-kit-node-polyfills.md delete mode 100644 packages/adapter-netlify/src/shims.js delete mode 100644 packages/adapter-node/src/shims.js diff --git a/.changeset/cyan-zoos-love.md b/.changeset/cyan-zoos-love.md new file mode 100644 index 000000000000..391ee6403465 --- /dev/null +++ b/.changeset/cyan-zoos-love.md @@ -0,0 +1,5 @@ +--- +'@sveltejs/kit': major +--- + +breaking: remove `@sveltejs/kit/node/polyfills` diff --git a/.changeset/many-jeans-feel.md b/.changeset/many-jeans-feel.md new file mode 100644 index 000000000000..e8f56a7afb9c --- /dev/null +++ b/.changeset/many-jeans-feel.md @@ -0,0 +1,6 @@ +--- +'@sveltejs/adapter-netlify': major +'@sveltejs/adapter-node': major +--- + +breaking: remove Node 18 polyfills diff --git a/documentation/docs/25-build-and-deploy/99-writing-adapters.md b/documentation/docs/25-build-and-deploy/99-writing-adapters.md index 931420b8fb8f..823e2ffea350 100644 --- a/documentation/docs/25-build-and-deploy/99-writing-adapters.md +++ b/documentation/docs/25-build-and-deploy/99-writing-adapters.md @@ -57,7 +57,6 @@ Within the `adapt` method, there are a number of things that an adapter should d - Instantiates the app with a manifest generated with `builder.generateManifest({ relativePath })` - Listens for requests from the platform, converts them to a standard [`Request`](https://developer.mozilla.org/en-US/docs/Web/API/Request) if necessary, calls the `server.respond(request, { getClientAddress })` function to generate a [`Response`](https://developer.mozilla.org/en-US/docs/Web/API/Response) and responds with it - expose any platform-specific information to SvelteKit via the `platform` option passed to `server.respond` - - Globally shims `fetch` to work on the target platform, if necessary. SvelteKit provides a `@sveltejs/kit/node/polyfills` helper for platforms that can use `undici` - Bundle the output to avoid needing to install dependencies on the target platform, if necessary - Put the user's static files and the generated JS/CSS in the correct location for the target platform diff --git a/documentation/docs/98-reference/15-@sveltejs-kit-node-polyfills.md b/documentation/docs/98-reference/15-@sveltejs-kit-node-polyfills.md deleted file mode 100644 index a80c80ab3139..000000000000 --- a/documentation/docs/98-reference/15-@sveltejs-kit-node-polyfills.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: @sveltejs/kit/node/polyfills ---- - -> MODULE: @sveltejs/kit/node/polyfills diff --git a/packages/adapter-netlify/rolldown.config.js b/packages/adapter-netlify/rolldown.config.js index e9be35048264..9230e1b5fb01 100644 --- a/packages/adapter-netlify/rolldown.config.js +++ b/packages/adapter-netlify/rolldown.config.js @@ -21,7 +21,6 @@ function clearOutput(filepath) { const config = { input: { serverless: 'src/serverless.js', - shims: 'src/shims.js', edge: 'src/edge.js' }, output: { diff --git a/packages/adapter-netlify/src/serverless.js b/packages/adapter-netlify/src/serverless.js index c8a6447b6ad9..d783fe09ec2b 100644 --- a/packages/adapter-netlify/src/serverless.js +++ b/packages/adapter-netlify/src/serverless.js @@ -1,4 +1,3 @@ -import './shims'; import { Server } from '0SERVER'; import { createReadableStream } from '@sveltejs/kit/node'; import process from 'node:process'; diff --git a/packages/adapter-netlify/src/shims.js b/packages/adapter-netlify/src/shims.js deleted file mode 100644 index 2490311daa1e..000000000000 --- a/packages/adapter-netlify/src/shims.js +++ /dev/null @@ -1,2 +0,0 @@ -import { installPolyfills } from '@sveltejs/kit/node/polyfills'; -installPolyfills(); diff --git a/packages/adapter-node/index.js b/packages/adapter-node/index.js index 9ed74124b9bb..a6b3358d4a5a 100644 --- a/packages/adapter-node/index.js +++ b/packages/adapter-node/index.js @@ -94,7 +94,6 @@ export default function (opts = {}) { HANDLER: './handler.js', MANIFEST: './server/manifest.js', SERVER: './server/index.js', - SHIMS: './shims.js', ENV_PREFIX: JSON.stringify(envPrefix), PRECOMPRESS: JSON.stringify(precompress) } diff --git a/packages/adapter-node/rolldown.config.js b/packages/adapter-node/rolldown.config.js index 45167575c67d..d84faba8ae5a 100644 --- a/packages/adapter-node/rolldown.config.js +++ b/packages/adapter-node/rolldown.config.js @@ -61,16 +61,7 @@ export default [ codeSplitting: false }, plugins: [clearOutput('files/handler.js'), prefixBuiltinModules()], - external: ['ENV', 'MANIFEST', 'SERVER', 'SHIMS'], - platform: 'node' - }, - { - input: 'src/shims.js', - output: { - file: 'files/shims.js', - format: 'esm' - }, - plugins: [clearOutput('files/shims.js'), prefixBuiltinModules()], + external: ['ENV', 'MANIFEST', 'SERVER'], platform: 'node' } ]; diff --git a/packages/adapter-node/src/handler.js b/packages/adapter-node/src/handler.js index b8fd2f38cbe5..72e5a105a73b 100644 --- a/packages/adapter-node/src/handler.js +++ b/packages/adapter-node/src/handler.js @@ -1,4 +1,3 @@ -import 'SHIMS'; import fs from 'node:fs'; import path from 'node:path'; import process from 'node:process'; diff --git a/packages/adapter-node/src/shims.js b/packages/adapter-node/src/shims.js deleted file mode 100644 index 2490311daa1e..000000000000 --- a/packages/adapter-node/src/shims.js +++ /dev/null @@ -1,2 +0,0 @@ -import { installPolyfills } from '@sveltejs/kit/node/polyfills'; -installPolyfills(); diff --git a/packages/kit/package.json b/packages/kit/package.json index c7b871f19160..457b8a990bbb 100644 --- a/packages/kit/package.json +++ b/packages/kit/package.json @@ -112,10 +112,6 @@ "types": "./types/index.d.ts", "import": "./src/exports/node/index.js" }, - "./node/polyfills": { - "types": "./types/index.d.ts", - "import": "./src/exports/node/polyfills.js" - }, "./hooks": { "types": "./types/index.d.ts", "import": "./src/exports/hooks/index.js" diff --git a/packages/kit/scripts/generate-dts.js b/packages/kit/scripts/generate-dts.js index b470d6d63494..60c7fe7d103f 100644 --- a/packages/kit/scripts/generate-dts.js +++ b/packages/kit/scripts/generate-dts.js @@ -7,7 +7,6 @@ await createBundle({ '@sveltejs/kit': 'src/exports/public.d.ts', '@sveltejs/kit/hooks': 'src/exports/hooks/index.js', '@sveltejs/kit/node': 'src/exports/node/index.js', - '@sveltejs/kit/node/polyfills': 'src/exports/node/polyfills.js', '@sveltejs/kit/vite': 'src/exports/vite/index.js', '$app/environment': 'src/runtime/app/environment/types.d.ts', '$app/forms': 'src/runtime/app/forms.js', diff --git a/packages/kit/src/core/postbuild/analyse.js b/packages/kit/src/core/postbuild/analyse.js index aa99609e6a04..76936b253e24 100644 --- a/packages/kit/src/core/postbuild/analyse.js +++ b/packages/kit/src/core/postbuild/analyse.js @@ -4,7 +4,6 @@ import { pathToFileURL } from 'node:url'; import { validate_server_exports } from '../../utils/exports.js'; import { load_config } from '../config/index.js'; import { forked } from '../../utils/fork.js'; -import { installPolyfills } from '../../exports/node/polyfills.js'; import { ENDPOINT_METHODS } from '../../constants.js'; import { filter_env } from '../../utils/env.js'; import { has_server_load, resolve_route } from '../../utils/routing.js'; @@ -50,8 +49,6 @@ async function analyse({ /** @type {import('types').ServerInternalModule} */ const internal = await import(pathToFileURL(`${server_root}/server/internal.js`).href); - installPolyfills(); - // configure `import { building } from '$app/environment'` — // essential we do this before analysing the code internal.set_building(); diff --git a/packages/kit/src/core/postbuild/fallback.js b/packages/kit/src/core/postbuild/fallback.js index 39356887a289..ef0d0530955f 100644 --- a/packages/kit/src/core/postbuild/fallback.js +++ b/packages/kit/src/core/postbuild/fallback.js @@ -1,7 +1,6 @@ import { readFileSync } from 'node:fs'; import { join } from 'node:path'; import { pathToFileURL } from 'node:url'; -import { installPolyfills } from '../../exports/node/polyfills.js'; import { load_config } from '../config/index.js'; import { forked } from '../../utils/fork.js'; @@ -17,8 +16,6 @@ async function generate_fallback({ manifest_path, env }) { /** @type {import('types').ValidatedKitConfig} */ const config = (await load_config()).kit; - installPolyfills(); - const server_root = join(config.outDir, 'output'); /** @type {import('types').ServerInternalModule} */ diff --git a/packages/kit/src/core/postbuild/prerender.js b/packages/kit/src/core/postbuild/prerender.js index 8caa68fdfe85..6acf8e47dff4 100644 --- a/packages/kit/src/core/postbuild/prerender.js +++ b/packages/kit/src/core/postbuild/prerender.js @@ -1,7 +1,6 @@ import { existsSync, readFileSync, statSync, writeFileSync } from 'node:fs'; import { dirname, join } from 'node:path'; import { pathToFileURL } from 'node:url'; -import { installPolyfills } from '../../exports/node/polyfills.js'; import { mkdirp, posixify, walk } from '../../utils/filesystem.js'; import { decode_uri, is_root_relative, resolve } from '../../utils/url.js'; import { escape_html } from '../../utils/escape.js'; @@ -124,8 +123,6 @@ async function prerender({ hash, out, manifest_path, metadata, verbose, env }) { /** @type {import('types').Logger} */ const log = logger({ verbose }); - installPolyfills(); - /** @type {Map} */ const saved = new Map(); diff --git a/packages/kit/src/exports/hooks/sequence.spec.js b/packages/kit/src/exports/hooks/sequence.spec.js index e3ccc1cf930e..a6516f445f4a 100644 --- a/packages/kit/src/exports/hooks/sequence.spec.js +++ b/packages/kit/src/exports/hooks/sequence.spec.js @@ -2,7 +2,6 @@ /** @import { RequestState } from 'types' */ import { assert, expect, test, vi } from 'vitest'; import { sequence } from './sequence.js'; -import { installPolyfills } from '../node/polyfills.js'; import { noop_span } from '../../runtime/telemetry/noop.js'; const dummy_event = vi.hoisted( @@ -29,8 +28,6 @@ vi.mock(import('@sveltejs/kit/internal/server'), async (actualPromise) => { }; }); -installPolyfills(); - test('applies handlers in sequence', async () => { /** @type {string[]} */ const order = []; diff --git a/packages/kit/src/exports/vite/dev/index.js b/packages/kit/src/exports/vite/dev/index.js index cc116bac0792..7313f237d353 100644 --- a/packages/kit/src/exports/vite/dev/index.js +++ b/packages/kit/src/exports/vite/dev/index.js @@ -7,7 +7,6 @@ import { styleText } from 'node:util'; import sirv from 'sirv'; import { isCSSRequest, loadEnv, buildErrorMessage } from 'vite'; import { createReadableStream, getRequest, setResponse } from '../../../exports/node/index.js'; -import { installPolyfills } from '../../../exports/node/polyfills.js'; import { coalesce_to_error } from '../../../utils/error.js'; import { from_fs, posixify, resolve_entry, to_fs } from '../../../utils/filesystem.js'; import { load_error_page } from '../../../core/config/index.js'; @@ -32,8 +31,6 @@ const vite_css_query_regex = /(?:\?|&)(?:raw|url|inline)(?:&|$)/; * @return {Promise void>>} */ export async function dev(vite, vite_config, svelte_config, get_remotes) { - installPolyfills(); - const async_local_storage = new AsyncLocalStorage(); globalThis.__SVELTEKIT_TRACK__ = (label) => { diff --git a/packages/kit/src/exports/vite/preview/index.js b/packages/kit/src/exports/vite/preview/index.js index 02a89e9e6dd4..54c856418d63 100644 --- a/packages/kit/src/exports/vite/preview/index.js +++ b/packages/kit/src/exports/vite/preview/index.js @@ -5,7 +5,6 @@ import { lookup } from 'mrmime'; import sirv from 'sirv'; import { loadEnv, normalizePath } from 'vite'; import { createReadableStream, getRequest, setResponse } from '../../../exports/node/index.js'; -import { installPolyfills } from '../../../exports/node/polyfills.js'; import { SVELTE_KIT_ASSETS } from '../../../constants.js'; import { not_found } from '../utils.js'; @@ -19,8 +18,6 @@ import { not_found } from '../utils.js'; * @param {import('types').ValidatedConfig} svelte_config */ export async function preview(vite, vite_config, svelte_config) { - installPolyfills(); - const { paths } = svelte_config.kit; const base = paths.base; const assets = paths.assets ? SVELTE_KIT_ASSETS : paths.base; diff --git a/packages/kit/src/runtime/server/cookie.spec.js b/packages/kit/src/runtime/server/cookie.spec.js index 658697aebac5..efcb8c531458 100644 --- a/packages/kit/src/runtime/server/cookie.spec.js +++ b/packages/kit/src/runtime/server/cookie.spec.js @@ -1,9 +1,6 @@ import process from 'node:process'; import { assert, expect, test, describe } from 'vitest'; import { domain_matches, path_matches, get_cookies } from './cookie.js'; -import { installPolyfills } from '@sveltejs/kit/node/polyfills'; - -installPolyfills(); const domains = { positive: [ diff --git a/packages/kit/tsconfig.json b/packages/kit/tsconfig.json index f94a6a9ec71c..952ee7b30d3f 100644 --- a/packages/kit/tsconfig.json +++ b/packages/kit/tsconfig.json @@ -11,7 +11,6 @@ "paths": { "@sveltejs/kit": ["./src/exports/public.d.ts"], "@sveltejs/kit/node": ["./src/exports/node/index.js"], - "@sveltejs/kit/node/polyfills": ["./src/exports/node/polyfills.js"], "@sveltejs/kit/internal": ["./src/exports/internal/index.js"], "@sveltejs/kit/internal/server": ["./src/exports/internal/server.js"], "$app/paths": ["./src/runtime/app/paths/public.d.ts"], diff --git a/packages/kit/types/index.d.ts b/packages/kit/types/index.d.ts index e9fcea6e04f4..0815489c9c08 100644 --- a/packages/kit/types/index.d.ts +++ b/packages/kit/types/index.d.ts @@ -2878,17 +2878,6 @@ declare module '@sveltejs/kit/node' { export {}; } -declare module '@sveltejs/kit/node/polyfills' { - /** - * Make various web APIs available as globals: - * - `crypto` - * - `File` - */ - export function installPolyfills(): void; - - export {}; -} - declare module '@sveltejs/kit/vite' { /** * Returns the SvelteKit Vite plugins. From d58c0e24be864740c1875561e61602e734514143 Mon Sep 17 00:00:00 2001 From: Tee Ming Date: Thu, 26 Feb 2026 18:50:42 +0800 Subject: [PATCH 029/545] Revert "push" This reverts commit ac46f8fb82718be81a856751f3d735f78a90ad15. --- .changeset/cyan-zoos-love.md | 5 ----- .changeset/many-jeans-feel.md | 6 ------ .../docs/25-build-and-deploy/99-writing-adapters.md | 1 + .../98-reference/15-@sveltejs-kit-node-polyfills.md | 5 +++++ packages/adapter-netlify/rolldown.config.js | 1 + packages/adapter-netlify/src/serverless.js | 1 + packages/adapter-netlify/src/shims.js | 2 ++ packages/adapter-node/index.js | 1 + packages/adapter-node/rolldown.config.js | 11 ++++++++++- packages/adapter-node/src/handler.js | 1 + packages/adapter-node/src/shims.js | 2 ++ packages/kit/package.json | 4 ++++ packages/kit/scripts/generate-dts.js | 1 + packages/kit/src/core/postbuild/analyse.js | 3 +++ packages/kit/src/core/postbuild/fallback.js | 3 +++ packages/kit/src/core/postbuild/prerender.js | 3 +++ packages/kit/src/exports/hooks/sequence.spec.js | 3 +++ packages/kit/src/exports/vite/dev/index.js | 3 +++ packages/kit/src/exports/vite/preview/index.js | 3 +++ packages/kit/src/runtime/server/cookie.spec.js | 3 +++ packages/kit/tsconfig.json | 1 + packages/kit/types/index.d.ts | 11 +++++++++++ 22 files changed, 62 insertions(+), 12 deletions(-) delete mode 100644 .changeset/cyan-zoos-love.md delete mode 100644 .changeset/many-jeans-feel.md create mode 100644 documentation/docs/98-reference/15-@sveltejs-kit-node-polyfills.md create mode 100644 packages/adapter-netlify/src/shims.js create mode 100644 packages/adapter-node/src/shims.js diff --git a/.changeset/cyan-zoos-love.md b/.changeset/cyan-zoos-love.md deleted file mode 100644 index 391ee6403465..000000000000 --- a/.changeset/cyan-zoos-love.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@sveltejs/kit': major ---- - -breaking: remove `@sveltejs/kit/node/polyfills` diff --git a/.changeset/many-jeans-feel.md b/.changeset/many-jeans-feel.md deleted file mode 100644 index e8f56a7afb9c..000000000000 --- a/.changeset/many-jeans-feel.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -'@sveltejs/adapter-netlify': major -'@sveltejs/adapter-node': major ---- - -breaking: remove Node 18 polyfills diff --git a/documentation/docs/25-build-and-deploy/99-writing-adapters.md b/documentation/docs/25-build-and-deploy/99-writing-adapters.md index 823e2ffea350..931420b8fb8f 100644 --- a/documentation/docs/25-build-and-deploy/99-writing-adapters.md +++ b/documentation/docs/25-build-and-deploy/99-writing-adapters.md @@ -57,6 +57,7 @@ Within the `adapt` method, there are a number of things that an adapter should d - Instantiates the app with a manifest generated with `builder.generateManifest({ relativePath })` - Listens for requests from the platform, converts them to a standard [`Request`](https://developer.mozilla.org/en-US/docs/Web/API/Request) if necessary, calls the `server.respond(request, { getClientAddress })` function to generate a [`Response`](https://developer.mozilla.org/en-US/docs/Web/API/Response) and responds with it - expose any platform-specific information to SvelteKit via the `platform` option passed to `server.respond` + - Globally shims `fetch` to work on the target platform, if necessary. SvelteKit provides a `@sveltejs/kit/node/polyfills` helper for platforms that can use `undici` - Bundle the output to avoid needing to install dependencies on the target platform, if necessary - Put the user's static files and the generated JS/CSS in the correct location for the target platform diff --git a/documentation/docs/98-reference/15-@sveltejs-kit-node-polyfills.md b/documentation/docs/98-reference/15-@sveltejs-kit-node-polyfills.md new file mode 100644 index 000000000000..a80c80ab3139 --- /dev/null +++ b/documentation/docs/98-reference/15-@sveltejs-kit-node-polyfills.md @@ -0,0 +1,5 @@ +--- +title: @sveltejs/kit/node/polyfills +--- + +> MODULE: @sveltejs/kit/node/polyfills diff --git a/packages/adapter-netlify/rolldown.config.js b/packages/adapter-netlify/rolldown.config.js index 9230e1b5fb01..e9be35048264 100644 --- a/packages/adapter-netlify/rolldown.config.js +++ b/packages/adapter-netlify/rolldown.config.js @@ -21,6 +21,7 @@ function clearOutput(filepath) { const config = { input: { serverless: 'src/serverless.js', + shims: 'src/shims.js', edge: 'src/edge.js' }, output: { diff --git a/packages/adapter-netlify/src/serverless.js b/packages/adapter-netlify/src/serverless.js index d783fe09ec2b..c8a6447b6ad9 100644 --- a/packages/adapter-netlify/src/serverless.js +++ b/packages/adapter-netlify/src/serverless.js @@ -1,3 +1,4 @@ +import './shims'; import { Server } from '0SERVER'; import { createReadableStream } from '@sveltejs/kit/node'; import process from 'node:process'; diff --git a/packages/adapter-netlify/src/shims.js b/packages/adapter-netlify/src/shims.js new file mode 100644 index 000000000000..2490311daa1e --- /dev/null +++ b/packages/adapter-netlify/src/shims.js @@ -0,0 +1,2 @@ +import { installPolyfills } from '@sveltejs/kit/node/polyfills'; +installPolyfills(); diff --git a/packages/adapter-node/index.js b/packages/adapter-node/index.js index a6b3358d4a5a..9ed74124b9bb 100644 --- a/packages/adapter-node/index.js +++ b/packages/adapter-node/index.js @@ -94,6 +94,7 @@ export default function (opts = {}) { HANDLER: './handler.js', MANIFEST: './server/manifest.js', SERVER: './server/index.js', + SHIMS: './shims.js', ENV_PREFIX: JSON.stringify(envPrefix), PRECOMPRESS: JSON.stringify(precompress) } diff --git a/packages/adapter-node/rolldown.config.js b/packages/adapter-node/rolldown.config.js index d84faba8ae5a..45167575c67d 100644 --- a/packages/adapter-node/rolldown.config.js +++ b/packages/adapter-node/rolldown.config.js @@ -61,7 +61,16 @@ export default [ codeSplitting: false }, plugins: [clearOutput('files/handler.js'), prefixBuiltinModules()], - external: ['ENV', 'MANIFEST', 'SERVER'], + external: ['ENV', 'MANIFEST', 'SERVER', 'SHIMS'], + platform: 'node' + }, + { + input: 'src/shims.js', + output: { + file: 'files/shims.js', + format: 'esm' + }, + plugins: [clearOutput('files/shims.js'), prefixBuiltinModules()], platform: 'node' } ]; diff --git a/packages/adapter-node/src/handler.js b/packages/adapter-node/src/handler.js index 72e5a105a73b..b8fd2f38cbe5 100644 --- a/packages/adapter-node/src/handler.js +++ b/packages/adapter-node/src/handler.js @@ -1,3 +1,4 @@ +import 'SHIMS'; import fs from 'node:fs'; import path from 'node:path'; import process from 'node:process'; diff --git a/packages/adapter-node/src/shims.js b/packages/adapter-node/src/shims.js new file mode 100644 index 000000000000..2490311daa1e --- /dev/null +++ b/packages/adapter-node/src/shims.js @@ -0,0 +1,2 @@ +import { installPolyfills } from '@sveltejs/kit/node/polyfills'; +installPolyfills(); diff --git a/packages/kit/package.json b/packages/kit/package.json index 457b8a990bbb..c7b871f19160 100644 --- a/packages/kit/package.json +++ b/packages/kit/package.json @@ -112,6 +112,10 @@ "types": "./types/index.d.ts", "import": "./src/exports/node/index.js" }, + "./node/polyfills": { + "types": "./types/index.d.ts", + "import": "./src/exports/node/polyfills.js" + }, "./hooks": { "types": "./types/index.d.ts", "import": "./src/exports/hooks/index.js" diff --git a/packages/kit/scripts/generate-dts.js b/packages/kit/scripts/generate-dts.js index 60c7fe7d103f..b470d6d63494 100644 --- a/packages/kit/scripts/generate-dts.js +++ b/packages/kit/scripts/generate-dts.js @@ -7,6 +7,7 @@ await createBundle({ '@sveltejs/kit': 'src/exports/public.d.ts', '@sveltejs/kit/hooks': 'src/exports/hooks/index.js', '@sveltejs/kit/node': 'src/exports/node/index.js', + '@sveltejs/kit/node/polyfills': 'src/exports/node/polyfills.js', '@sveltejs/kit/vite': 'src/exports/vite/index.js', '$app/environment': 'src/runtime/app/environment/types.d.ts', '$app/forms': 'src/runtime/app/forms.js', diff --git a/packages/kit/src/core/postbuild/analyse.js b/packages/kit/src/core/postbuild/analyse.js index 76936b253e24..aa99609e6a04 100644 --- a/packages/kit/src/core/postbuild/analyse.js +++ b/packages/kit/src/core/postbuild/analyse.js @@ -4,6 +4,7 @@ import { pathToFileURL } from 'node:url'; import { validate_server_exports } from '../../utils/exports.js'; import { load_config } from '../config/index.js'; import { forked } from '../../utils/fork.js'; +import { installPolyfills } from '../../exports/node/polyfills.js'; import { ENDPOINT_METHODS } from '../../constants.js'; import { filter_env } from '../../utils/env.js'; import { has_server_load, resolve_route } from '../../utils/routing.js'; @@ -49,6 +50,8 @@ async function analyse({ /** @type {import('types').ServerInternalModule} */ const internal = await import(pathToFileURL(`${server_root}/server/internal.js`).href); + installPolyfills(); + // configure `import { building } from '$app/environment'` — // essential we do this before analysing the code internal.set_building(); diff --git a/packages/kit/src/core/postbuild/fallback.js b/packages/kit/src/core/postbuild/fallback.js index ef0d0530955f..39356887a289 100644 --- a/packages/kit/src/core/postbuild/fallback.js +++ b/packages/kit/src/core/postbuild/fallback.js @@ -1,6 +1,7 @@ import { readFileSync } from 'node:fs'; import { join } from 'node:path'; import { pathToFileURL } from 'node:url'; +import { installPolyfills } from '../../exports/node/polyfills.js'; import { load_config } from '../config/index.js'; import { forked } from '../../utils/fork.js'; @@ -16,6 +17,8 @@ async function generate_fallback({ manifest_path, env }) { /** @type {import('types').ValidatedKitConfig} */ const config = (await load_config()).kit; + installPolyfills(); + const server_root = join(config.outDir, 'output'); /** @type {import('types').ServerInternalModule} */ diff --git a/packages/kit/src/core/postbuild/prerender.js b/packages/kit/src/core/postbuild/prerender.js index 6acf8e47dff4..8caa68fdfe85 100644 --- a/packages/kit/src/core/postbuild/prerender.js +++ b/packages/kit/src/core/postbuild/prerender.js @@ -1,6 +1,7 @@ import { existsSync, readFileSync, statSync, writeFileSync } from 'node:fs'; import { dirname, join } from 'node:path'; import { pathToFileURL } from 'node:url'; +import { installPolyfills } from '../../exports/node/polyfills.js'; import { mkdirp, posixify, walk } from '../../utils/filesystem.js'; import { decode_uri, is_root_relative, resolve } from '../../utils/url.js'; import { escape_html } from '../../utils/escape.js'; @@ -123,6 +124,8 @@ async function prerender({ hash, out, manifest_path, metadata, verbose, env }) { /** @type {import('types').Logger} */ const log = logger({ verbose }); + installPolyfills(); + /** @type {Map} */ const saved = new Map(); diff --git a/packages/kit/src/exports/hooks/sequence.spec.js b/packages/kit/src/exports/hooks/sequence.spec.js index a6516f445f4a..e3ccc1cf930e 100644 --- a/packages/kit/src/exports/hooks/sequence.spec.js +++ b/packages/kit/src/exports/hooks/sequence.spec.js @@ -2,6 +2,7 @@ /** @import { RequestState } from 'types' */ import { assert, expect, test, vi } from 'vitest'; import { sequence } from './sequence.js'; +import { installPolyfills } from '../node/polyfills.js'; import { noop_span } from '../../runtime/telemetry/noop.js'; const dummy_event = vi.hoisted( @@ -28,6 +29,8 @@ vi.mock(import('@sveltejs/kit/internal/server'), async (actualPromise) => { }; }); +installPolyfills(); + test('applies handlers in sequence', async () => { /** @type {string[]} */ const order = []; diff --git a/packages/kit/src/exports/vite/dev/index.js b/packages/kit/src/exports/vite/dev/index.js index 7313f237d353..cc116bac0792 100644 --- a/packages/kit/src/exports/vite/dev/index.js +++ b/packages/kit/src/exports/vite/dev/index.js @@ -7,6 +7,7 @@ import { styleText } from 'node:util'; import sirv from 'sirv'; import { isCSSRequest, loadEnv, buildErrorMessage } from 'vite'; import { createReadableStream, getRequest, setResponse } from '../../../exports/node/index.js'; +import { installPolyfills } from '../../../exports/node/polyfills.js'; import { coalesce_to_error } from '../../../utils/error.js'; import { from_fs, posixify, resolve_entry, to_fs } from '../../../utils/filesystem.js'; import { load_error_page } from '../../../core/config/index.js'; @@ -31,6 +32,8 @@ const vite_css_query_regex = /(?:\?|&)(?:raw|url|inline)(?:&|$)/; * @return {Promise void>>} */ export async function dev(vite, vite_config, svelte_config, get_remotes) { + installPolyfills(); + const async_local_storage = new AsyncLocalStorage(); globalThis.__SVELTEKIT_TRACK__ = (label) => { diff --git a/packages/kit/src/exports/vite/preview/index.js b/packages/kit/src/exports/vite/preview/index.js index 54c856418d63..02a89e9e6dd4 100644 --- a/packages/kit/src/exports/vite/preview/index.js +++ b/packages/kit/src/exports/vite/preview/index.js @@ -5,6 +5,7 @@ import { lookup } from 'mrmime'; import sirv from 'sirv'; import { loadEnv, normalizePath } from 'vite'; import { createReadableStream, getRequest, setResponse } from '../../../exports/node/index.js'; +import { installPolyfills } from '../../../exports/node/polyfills.js'; import { SVELTE_KIT_ASSETS } from '../../../constants.js'; import { not_found } from '../utils.js'; @@ -18,6 +19,8 @@ import { not_found } from '../utils.js'; * @param {import('types').ValidatedConfig} svelte_config */ export async function preview(vite, vite_config, svelte_config) { + installPolyfills(); + const { paths } = svelte_config.kit; const base = paths.base; const assets = paths.assets ? SVELTE_KIT_ASSETS : paths.base; diff --git a/packages/kit/src/runtime/server/cookie.spec.js b/packages/kit/src/runtime/server/cookie.spec.js index efcb8c531458..658697aebac5 100644 --- a/packages/kit/src/runtime/server/cookie.spec.js +++ b/packages/kit/src/runtime/server/cookie.spec.js @@ -1,6 +1,9 @@ import process from 'node:process'; import { assert, expect, test, describe } from 'vitest'; import { domain_matches, path_matches, get_cookies } from './cookie.js'; +import { installPolyfills } from '@sveltejs/kit/node/polyfills'; + +installPolyfills(); const domains = { positive: [ diff --git a/packages/kit/tsconfig.json b/packages/kit/tsconfig.json index 952ee7b30d3f..f94a6a9ec71c 100644 --- a/packages/kit/tsconfig.json +++ b/packages/kit/tsconfig.json @@ -11,6 +11,7 @@ "paths": { "@sveltejs/kit": ["./src/exports/public.d.ts"], "@sveltejs/kit/node": ["./src/exports/node/index.js"], + "@sveltejs/kit/node/polyfills": ["./src/exports/node/polyfills.js"], "@sveltejs/kit/internal": ["./src/exports/internal/index.js"], "@sveltejs/kit/internal/server": ["./src/exports/internal/server.js"], "$app/paths": ["./src/runtime/app/paths/public.d.ts"], diff --git a/packages/kit/types/index.d.ts b/packages/kit/types/index.d.ts index 0815489c9c08..e9fcea6e04f4 100644 --- a/packages/kit/types/index.d.ts +++ b/packages/kit/types/index.d.ts @@ -2878,6 +2878,17 @@ declare module '@sveltejs/kit/node' { export {}; } +declare module '@sveltejs/kit/node/polyfills' { + /** + * Make various web APIs available as globals: + * - `crypto` + * - `File` + */ + export function installPolyfills(): void; + + export {}; +} + declare module '@sveltejs/kit/vite' { /** * Returns the SvelteKit Vite plugins. From ba36148577ed0bc2675034a3d57001d71d328cd1 Mon Sep 17 00:00:00 2001 From: Tee Ming Date: Thu, 26 Feb 2026 21:38:54 +0800 Subject: [PATCH 030/545] breaking: remove Node polyfills (#15430) closes https://github.com/sveltejs/kit/issues/15258 This PR removes the export `@sveltejs/kit/node/polyfills` and the shims from the node and netlify adapter. They were only needed while we still supported Node 18 --- ### Please don't delete this checklist! Before submitting the PR, please make sure you do the following: - [x] It's really useful if your PR references an issue where it is discussed ahead of time. In many cases, features are absent for a reason. For large changes, please create an RFC: https://github.com/sveltejs/rfcs - [x] This message body should clearly illustrate what problems it solves. - [ ] Ideally, include a test that fails without this PR but passes with it. ### Tests - [ ] Run the tests with `pnpm test` and lint the project with `pnpm lint` and `pnpm check` ### Changesets - [x] If your PR makes a change that should be noted in one or more packages' changelogs, generate a changeset by running `pnpm changeset` and following the prompts. Changesets that add features should be `minor` and those that fix bugs should be `patch`. Please prefix changeset messages with `feat:`, `fix:`, or `chore:`. ### Edits - [x] Please ensure that 'Allow edits from maintainers' is checked. PRs without this option may be closed. --- .changeset/cyan-zoos-love.md | 5 +++++ .../docs/25-build-and-deploy/99-writing-adapters.md | 1 - .../98-reference/15-@sveltejs-kit-node-polyfills.md | 5 ----- packages/adapter-netlify/rolldown.config.js | 1 - packages/adapter-netlify/src/serverless.js | 1 - packages/adapter-netlify/src/shims.js | 2 -- packages/adapter-node/index.js | 1 - packages/adapter-node/rolldown.config.js | 11 +---------- packages/adapter-node/src/handler.js | 1 - packages/adapter-node/src/shims.js | 2 -- packages/kit/package.json | 4 ---- packages/kit/scripts/generate-dts.js | 1 - packages/kit/src/core/postbuild/analyse.js | 3 --- packages/kit/src/core/postbuild/fallback.js | 3 --- packages/kit/src/core/postbuild/prerender.js | 3 --- packages/kit/src/exports/hooks/sequence.spec.js | 3 --- packages/kit/src/exports/vite/dev/index.js | 3 --- packages/kit/src/exports/vite/preview/index.js | 3 --- packages/kit/src/runtime/server/cookie.spec.js | 3 --- packages/kit/tsconfig.json | 1 - packages/kit/types/index.d.ts | 11 ----------- 21 files changed, 6 insertions(+), 62 deletions(-) create mode 100644 .changeset/cyan-zoos-love.md delete mode 100644 documentation/docs/98-reference/15-@sveltejs-kit-node-polyfills.md delete mode 100644 packages/adapter-netlify/src/shims.js delete mode 100644 packages/adapter-node/src/shims.js diff --git a/.changeset/cyan-zoos-love.md b/.changeset/cyan-zoos-love.md new file mode 100644 index 000000000000..391ee6403465 --- /dev/null +++ b/.changeset/cyan-zoos-love.md @@ -0,0 +1,5 @@ +--- +'@sveltejs/kit': major +--- + +breaking: remove `@sveltejs/kit/node/polyfills` diff --git a/documentation/docs/25-build-and-deploy/99-writing-adapters.md b/documentation/docs/25-build-and-deploy/99-writing-adapters.md index 931420b8fb8f..823e2ffea350 100644 --- a/documentation/docs/25-build-and-deploy/99-writing-adapters.md +++ b/documentation/docs/25-build-and-deploy/99-writing-adapters.md @@ -57,7 +57,6 @@ Within the `adapt` method, there are a number of things that an adapter should d - Instantiates the app with a manifest generated with `builder.generateManifest({ relativePath })` - Listens for requests from the platform, converts them to a standard [`Request`](https://developer.mozilla.org/en-US/docs/Web/API/Request) if necessary, calls the `server.respond(request, { getClientAddress })` function to generate a [`Response`](https://developer.mozilla.org/en-US/docs/Web/API/Response) and responds with it - expose any platform-specific information to SvelteKit via the `platform` option passed to `server.respond` - - Globally shims `fetch` to work on the target platform, if necessary. SvelteKit provides a `@sveltejs/kit/node/polyfills` helper for platforms that can use `undici` - Bundle the output to avoid needing to install dependencies on the target platform, if necessary - Put the user's static files and the generated JS/CSS in the correct location for the target platform diff --git a/documentation/docs/98-reference/15-@sveltejs-kit-node-polyfills.md b/documentation/docs/98-reference/15-@sveltejs-kit-node-polyfills.md deleted file mode 100644 index a80c80ab3139..000000000000 --- a/documentation/docs/98-reference/15-@sveltejs-kit-node-polyfills.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: @sveltejs/kit/node/polyfills ---- - -> MODULE: @sveltejs/kit/node/polyfills diff --git a/packages/adapter-netlify/rolldown.config.js b/packages/adapter-netlify/rolldown.config.js index e9be35048264..9230e1b5fb01 100644 --- a/packages/adapter-netlify/rolldown.config.js +++ b/packages/adapter-netlify/rolldown.config.js @@ -21,7 +21,6 @@ function clearOutput(filepath) { const config = { input: { serverless: 'src/serverless.js', - shims: 'src/shims.js', edge: 'src/edge.js' }, output: { diff --git a/packages/adapter-netlify/src/serverless.js b/packages/adapter-netlify/src/serverless.js index c8a6447b6ad9..d783fe09ec2b 100644 --- a/packages/adapter-netlify/src/serverless.js +++ b/packages/adapter-netlify/src/serverless.js @@ -1,4 +1,3 @@ -import './shims'; import { Server } from '0SERVER'; import { createReadableStream } from '@sveltejs/kit/node'; import process from 'node:process'; diff --git a/packages/adapter-netlify/src/shims.js b/packages/adapter-netlify/src/shims.js deleted file mode 100644 index 2490311daa1e..000000000000 --- a/packages/adapter-netlify/src/shims.js +++ /dev/null @@ -1,2 +0,0 @@ -import { installPolyfills } from '@sveltejs/kit/node/polyfills'; -installPolyfills(); diff --git a/packages/adapter-node/index.js b/packages/adapter-node/index.js index 9ed74124b9bb..a6b3358d4a5a 100644 --- a/packages/adapter-node/index.js +++ b/packages/adapter-node/index.js @@ -94,7 +94,6 @@ export default function (opts = {}) { HANDLER: './handler.js', MANIFEST: './server/manifest.js', SERVER: './server/index.js', - SHIMS: './shims.js', ENV_PREFIX: JSON.stringify(envPrefix), PRECOMPRESS: JSON.stringify(precompress) } diff --git a/packages/adapter-node/rolldown.config.js b/packages/adapter-node/rolldown.config.js index 45167575c67d..d84faba8ae5a 100644 --- a/packages/adapter-node/rolldown.config.js +++ b/packages/adapter-node/rolldown.config.js @@ -61,16 +61,7 @@ export default [ codeSplitting: false }, plugins: [clearOutput('files/handler.js'), prefixBuiltinModules()], - external: ['ENV', 'MANIFEST', 'SERVER', 'SHIMS'], - platform: 'node' - }, - { - input: 'src/shims.js', - output: { - file: 'files/shims.js', - format: 'esm' - }, - plugins: [clearOutput('files/shims.js'), prefixBuiltinModules()], + external: ['ENV', 'MANIFEST', 'SERVER'], platform: 'node' } ]; diff --git a/packages/adapter-node/src/handler.js b/packages/adapter-node/src/handler.js index b8fd2f38cbe5..72e5a105a73b 100644 --- a/packages/adapter-node/src/handler.js +++ b/packages/adapter-node/src/handler.js @@ -1,4 +1,3 @@ -import 'SHIMS'; import fs from 'node:fs'; import path from 'node:path'; import process from 'node:process'; diff --git a/packages/adapter-node/src/shims.js b/packages/adapter-node/src/shims.js deleted file mode 100644 index 2490311daa1e..000000000000 --- a/packages/adapter-node/src/shims.js +++ /dev/null @@ -1,2 +0,0 @@ -import { installPolyfills } from '@sveltejs/kit/node/polyfills'; -installPolyfills(); diff --git a/packages/kit/package.json b/packages/kit/package.json index c7b871f19160..457b8a990bbb 100644 --- a/packages/kit/package.json +++ b/packages/kit/package.json @@ -112,10 +112,6 @@ "types": "./types/index.d.ts", "import": "./src/exports/node/index.js" }, - "./node/polyfills": { - "types": "./types/index.d.ts", - "import": "./src/exports/node/polyfills.js" - }, "./hooks": { "types": "./types/index.d.ts", "import": "./src/exports/hooks/index.js" diff --git a/packages/kit/scripts/generate-dts.js b/packages/kit/scripts/generate-dts.js index b470d6d63494..60c7fe7d103f 100644 --- a/packages/kit/scripts/generate-dts.js +++ b/packages/kit/scripts/generate-dts.js @@ -7,7 +7,6 @@ await createBundle({ '@sveltejs/kit': 'src/exports/public.d.ts', '@sveltejs/kit/hooks': 'src/exports/hooks/index.js', '@sveltejs/kit/node': 'src/exports/node/index.js', - '@sveltejs/kit/node/polyfills': 'src/exports/node/polyfills.js', '@sveltejs/kit/vite': 'src/exports/vite/index.js', '$app/environment': 'src/runtime/app/environment/types.d.ts', '$app/forms': 'src/runtime/app/forms.js', diff --git a/packages/kit/src/core/postbuild/analyse.js b/packages/kit/src/core/postbuild/analyse.js index aa99609e6a04..76936b253e24 100644 --- a/packages/kit/src/core/postbuild/analyse.js +++ b/packages/kit/src/core/postbuild/analyse.js @@ -4,7 +4,6 @@ import { pathToFileURL } from 'node:url'; import { validate_server_exports } from '../../utils/exports.js'; import { load_config } from '../config/index.js'; import { forked } from '../../utils/fork.js'; -import { installPolyfills } from '../../exports/node/polyfills.js'; import { ENDPOINT_METHODS } from '../../constants.js'; import { filter_env } from '../../utils/env.js'; import { has_server_load, resolve_route } from '../../utils/routing.js'; @@ -50,8 +49,6 @@ async function analyse({ /** @type {import('types').ServerInternalModule} */ const internal = await import(pathToFileURL(`${server_root}/server/internal.js`).href); - installPolyfills(); - // configure `import { building } from '$app/environment'` — // essential we do this before analysing the code internal.set_building(); diff --git a/packages/kit/src/core/postbuild/fallback.js b/packages/kit/src/core/postbuild/fallback.js index 39356887a289..ef0d0530955f 100644 --- a/packages/kit/src/core/postbuild/fallback.js +++ b/packages/kit/src/core/postbuild/fallback.js @@ -1,7 +1,6 @@ import { readFileSync } from 'node:fs'; import { join } from 'node:path'; import { pathToFileURL } from 'node:url'; -import { installPolyfills } from '../../exports/node/polyfills.js'; import { load_config } from '../config/index.js'; import { forked } from '../../utils/fork.js'; @@ -17,8 +16,6 @@ async function generate_fallback({ manifest_path, env }) { /** @type {import('types').ValidatedKitConfig} */ const config = (await load_config()).kit; - installPolyfills(); - const server_root = join(config.outDir, 'output'); /** @type {import('types').ServerInternalModule} */ diff --git a/packages/kit/src/core/postbuild/prerender.js b/packages/kit/src/core/postbuild/prerender.js index 8caa68fdfe85..6acf8e47dff4 100644 --- a/packages/kit/src/core/postbuild/prerender.js +++ b/packages/kit/src/core/postbuild/prerender.js @@ -1,7 +1,6 @@ import { existsSync, readFileSync, statSync, writeFileSync } from 'node:fs'; import { dirname, join } from 'node:path'; import { pathToFileURL } from 'node:url'; -import { installPolyfills } from '../../exports/node/polyfills.js'; import { mkdirp, posixify, walk } from '../../utils/filesystem.js'; import { decode_uri, is_root_relative, resolve } from '../../utils/url.js'; import { escape_html } from '../../utils/escape.js'; @@ -124,8 +123,6 @@ async function prerender({ hash, out, manifest_path, metadata, verbose, env }) { /** @type {import('types').Logger} */ const log = logger({ verbose }); - installPolyfills(); - /** @type {Map} */ const saved = new Map(); diff --git a/packages/kit/src/exports/hooks/sequence.spec.js b/packages/kit/src/exports/hooks/sequence.spec.js index e3ccc1cf930e..a6516f445f4a 100644 --- a/packages/kit/src/exports/hooks/sequence.spec.js +++ b/packages/kit/src/exports/hooks/sequence.spec.js @@ -2,7 +2,6 @@ /** @import { RequestState } from 'types' */ import { assert, expect, test, vi } from 'vitest'; import { sequence } from './sequence.js'; -import { installPolyfills } from '../node/polyfills.js'; import { noop_span } from '../../runtime/telemetry/noop.js'; const dummy_event = vi.hoisted( @@ -29,8 +28,6 @@ vi.mock(import('@sveltejs/kit/internal/server'), async (actualPromise) => { }; }); -installPolyfills(); - test('applies handlers in sequence', async () => { /** @type {string[]} */ const order = []; diff --git a/packages/kit/src/exports/vite/dev/index.js b/packages/kit/src/exports/vite/dev/index.js index cc116bac0792..7313f237d353 100644 --- a/packages/kit/src/exports/vite/dev/index.js +++ b/packages/kit/src/exports/vite/dev/index.js @@ -7,7 +7,6 @@ import { styleText } from 'node:util'; import sirv from 'sirv'; import { isCSSRequest, loadEnv, buildErrorMessage } from 'vite'; import { createReadableStream, getRequest, setResponse } from '../../../exports/node/index.js'; -import { installPolyfills } from '../../../exports/node/polyfills.js'; import { coalesce_to_error } from '../../../utils/error.js'; import { from_fs, posixify, resolve_entry, to_fs } from '../../../utils/filesystem.js'; import { load_error_page } from '../../../core/config/index.js'; @@ -32,8 +31,6 @@ const vite_css_query_regex = /(?:\?|&)(?:raw|url|inline)(?:&|$)/; * @return {Promise void>>} */ export async function dev(vite, vite_config, svelte_config, get_remotes) { - installPolyfills(); - const async_local_storage = new AsyncLocalStorage(); globalThis.__SVELTEKIT_TRACK__ = (label) => { diff --git a/packages/kit/src/exports/vite/preview/index.js b/packages/kit/src/exports/vite/preview/index.js index 02a89e9e6dd4..54c856418d63 100644 --- a/packages/kit/src/exports/vite/preview/index.js +++ b/packages/kit/src/exports/vite/preview/index.js @@ -5,7 +5,6 @@ import { lookup } from 'mrmime'; import sirv from 'sirv'; import { loadEnv, normalizePath } from 'vite'; import { createReadableStream, getRequest, setResponse } from '../../../exports/node/index.js'; -import { installPolyfills } from '../../../exports/node/polyfills.js'; import { SVELTE_KIT_ASSETS } from '../../../constants.js'; import { not_found } from '../utils.js'; @@ -19,8 +18,6 @@ import { not_found } from '../utils.js'; * @param {import('types').ValidatedConfig} svelte_config */ export async function preview(vite, vite_config, svelte_config) { - installPolyfills(); - const { paths } = svelte_config.kit; const base = paths.base; const assets = paths.assets ? SVELTE_KIT_ASSETS : paths.base; diff --git a/packages/kit/src/runtime/server/cookie.spec.js b/packages/kit/src/runtime/server/cookie.spec.js index 658697aebac5..efcb8c531458 100644 --- a/packages/kit/src/runtime/server/cookie.spec.js +++ b/packages/kit/src/runtime/server/cookie.spec.js @@ -1,9 +1,6 @@ import process from 'node:process'; import { assert, expect, test, describe } from 'vitest'; import { domain_matches, path_matches, get_cookies } from './cookie.js'; -import { installPolyfills } from '@sveltejs/kit/node/polyfills'; - -installPolyfills(); const domains = { positive: [ diff --git a/packages/kit/tsconfig.json b/packages/kit/tsconfig.json index f94a6a9ec71c..952ee7b30d3f 100644 --- a/packages/kit/tsconfig.json +++ b/packages/kit/tsconfig.json @@ -11,7 +11,6 @@ "paths": { "@sveltejs/kit": ["./src/exports/public.d.ts"], "@sveltejs/kit/node": ["./src/exports/node/index.js"], - "@sveltejs/kit/node/polyfills": ["./src/exports/node/polyfills.js"], "@sveltejs/kit/internal": ["./src/exports/internal/index.js"], "@sveltejs/kit/internal/server": ["./src/exports/internal/server.js"], "$app/paths": ["./src/runtime/app/paths/public.d.ts"], diff --git a/packages/kit/types/index.d.ts b/packages/kit/types/index.d.ts index e9fcea6e04f4..0815489c9c08 100644 --- a/packages/kit/types/index.d.ts +++ b/packages/kit/types/index.d.ts @@ -2878,17 +2878,6 @@ declare module '@sveltejs/kit/node' { export {}; } -declare module '@sveltejs/kit/node/polyfills' { - /** - * Make various web APIs available as globals: - * - `crypto` - * - `File` - */ - export function installPolyfills(): void; - - export {}; -} - declare module '@sveltejs/kit/vite' { /** * Returns the SvelteKit Vite plugins. From c4e70eb01c5297fd58c62ee7e19deeb9b46b1390 Mon Sep 17 00:00:00 2001 From: Tee Ming Date: Fri, 27 Feb 2026 01:59:11 +0800 Subject: [PATCH 031/545] chore: migrate from esbuild to rolldown (#15432) closes #15424 closes https://github.com/sveltejs/kit/issues/13609 This PR switches the Vercel and Netlify adapters to use rolldown instead of esbuild It also updates the build targets from es2020 to es2022 to support top-level await I _also_ made the Vercel adapter run the test app build after the unit tests just because it's a quick and cheap way to verify the build runs if we don't run platform tests. --- ### Please don't delete this checklist! Before submitting the PR, please make sure you do the following: - [x] It's really useful if your PR references an issue where it is discussed ahead of time. In many cases, features are absent for a reason. For large changes, please create an RFC: https://github.com/sveltejs/rfcs - [x] This message body should clearly illustrate what problems it solves. - [ ] Ideally, include a test that fails without this PR but passes with it. ### Tests - [ ] Run the tests with `pnpm test` and lint the project with `pnpm lint` and `pnpm check` ### Changesets - [x] If your PR makes a change that should be noted in one or more packages' changelogs, generate a changeset by running `pnpm changeset` and following the prompts. Changesets that add features should be `minor` and those that fix bugs should be `patch`. Please prefix changeset messages with `feat:`, `fix:`, or `chore:`. ### Edits - [x] Please ensure that 'Allow edits from maintainers' is checked. PRs without this option may be closed. --------- Co-authored-by: Ben McCann <322311+benmccann@users.noreply.github.com> --- .changeset/clean-papers-give.md | 6 + .changeset/polite-lemons-refuse.md | 6 + package.json | 1 - packages/adapter-cloudflare/package.json | 4 +- .../adapter-cloudflare/rolldown.config.js | 10 + packages/adapter-cloudflare/tsconfig.json | 1 + packages/adapter-netlify/index.js | 66 +- packages/adapter-netlify/package.json | 3 +- packages/adapter-node/package.json | 2 +- packages/adapter-vercel/index.js | 138 ++--- packages/adapter-vercel/package.json | 6 +- packages/enhanced-img/package.json | 2 +- packages/kit/package.json | 2 +- pnpm-lock.yaml | 574 ++++++------------ pnpm-workspace.yaml | 1 + renovate.json | 1 - 16 files changed, 303 insertions(+), 520 deletions(-) create mode 100644 .changeset/clean-papers-give.md create mode 100644 .changeset/polite-lemons-refuse.md create mode 100644 packages/adapter-cloudflare/rolldown.config.js diff --git a/.changeset/clean-papers-give.md b/.changeset/clean-papers-give.md new file mode 100644 index 000000000000..44d488dfee8f --- /dev/null +++ b/.changeset/clean-papers-give.md @@ -0,0 +1,6 @@ +--- +'@sveltejs/adapter-netlify': major +'@sveltejs/adapter-vercel': major +--- + +chore: use `rolldown` for edge function bundling diff --git a/.changeset/polite-lemons-refuse.md b/.changeset/polite-lemons-refuse.md new file mode 100644 index 000000000000..053810bb3e1d --- /dev/null +++ b/.changeset/polite-lemons-refuse.md @@ -0,0 +1,6 @@ +--- +'@sveltejs/adapter-netlify': major +'@sveltejs/adapter-vercel': major +--- + +breaking: edge function build target is now `es2022` diff --git a/package.json b/package.json index 07eca2a3f0c0..537d642b472c 100644 --- a/package.json +++ b/package.json @@ -39,7 +39,6 @@ "pnpm": { "onlyBuiltDependencies": [ "@parcel/watcher", - "esbuild", "protobufjs", "rolldown", "sharp", diff --git a/packages/adapter-cloudflare/package.json b/packages/adapter-cloudflare/package.json index 8133bcdec436..f7fd0ff8fda8 100644 --- a/packages/adapter-cloudflare/package.json +++ b/packages/adapter-cloudflare/package.json @@ -34,7 +34,7 @@ "ambient.d.ts" ], "scripts": { - "build": "esbuild src/worker.js --bundle --outfile=files/worker.js --external:SERVER --external:MANIFEST --external:cloudflare:workers --format=esm", + "build": "rolldown -c", "lint": "prettier --check .", "format": "pnpm lint --write", "check": "tsc --skipLibCheck", @@ -51,7 +51,7 @@ "@playwright/test": "catalog:", "@sveltejs/kit": "workspace:^", "@types/node": "catalog:", - "esbuild": "catalog:", + "rolldown": "catalog:", "typescript": "catalog:", "vite": "catalog:", "vitest": "catalog:" diff --git a/packages/adapter-cloudflare/rolldown.config.js b/packages/adapter-cloudflare/rolldown.config.js new file mode 100644 index 000000000000..89e1458358b4 --- /dev/null +++ b/packages/adapter-cloudflare/rolldown.config.js @@ -0,0 +1,10 @@ +import { defineConfig } from 'rolldown'; + +export default defineConfig({ + input: 'src/worker.js', + output: { + file: 'files/worker.js' + }, + external: ['SERVER', 'MANIFEST', 'cloudflare:workers'], + platform: 'browser' +}); diff --git a/packages/adapter-cloudflare/tsconfig.json b/packages/adapter-cloudflare/tsconfig.json index 14cf70a313f9..6b387d40f5f3 100644 --- a/packages/adapter-cloudflare/tsconfig.json +++ b/packages/adapter-cloudflare/tsconfig.json @@ -19,6 +19,7 @@ "index.js", "utils.js", "utils.spec.js", + "rolldown.config.js", "test/utils.js", "internal.d.ts", "src/worker.js" diff --git a/packages/adapter-netlify/index.js b/packages/adapter-netlify/index.js index 627c64a5a8f4..2dce87fa0e71 100644 --- a/packages/adapter-netlify/index.js +++ b/packages/adapter-netlify/index.js @@ -1,11 +1,10 @@ -/** @import { BuildOptions } from 'esbuild' */ import { existsSync, readdirSync, readFileSync, writeFileSync } from 'node:fs'; import { join, posix } from 'node:path'; import { fileURLToPath } from 'node:url'; import { builtinModules } from 'node:module'; import process from 'node:process'; -import esbuild from 'esbuild'; import toml from '@iarna/toml'; +import { build } from 'rolldown'; import { matches, get_publish_directory, s } from './utils.js'; /** @@ -329,6 +328,24 @@ ${config}`; }; } +/** @satisfies {import('rolldown').BuildOptions} */ +const rolldown_config = { + platform: 'browser', + output: { + sourcemap: true, + codeSplitting: false + }, + transform: { + target: 'es2022' + }, + // Node built-ins are allowed, but must be prefixed with `node:` + // https://docs.netlify.com/edge-functions/api/#runtime-environment + external: builtinModules.map((id) => `node:${id}`), + resolve: { + alias: Object.fromEntries(builtinModules.map((id) => [id, `node:${id}`])) + } +}; + /** * @param { object } params * @param {import('@sveltejs/kit').Builder} params.builder @@ -383,40 +400,23 @@ async function generate_edge_functions({ builder }) { '/.netlify/*' ]; - /** @type {BuildOptions} */ - const esbuild_config = { - bundle: true, - format: 'esm', - platform: 'browser', - sourcemap: 'linked', - target: 'es2020', - loader: { - '.wasm': 'copy', - '.woff': 'copy', - '.woff2': 'copy', - '.ttf': 'copy', - '.eot': 'copy', - '.otf': 'copy' - }, - // Node built-ins are allowed, but must be prefixed with `node:` - // https://docs.netlify.com/edge-functions/api/#runtime-environment - external: builtinModules.map((id) => `node:${id}`), - alias: Object.fromEntries(builtinModules.map((id) => [id, `node:${id}`])) - }; - await Promise.all([ - esbuild.build({ - entryPoints: [`${tmp}/entry.js`], - outfile: `${netlify_framework_edge_path}/${FUNCTION_PREFIX}render.js`, - ...esbuild_config + build({ + ...rolldown_config, + input: `${tmp}/entry.js`, + output: { + ...rolldown_config.output, + file: `${netlify_framework_edge_path}/${FUNCTION_PREFIX}render.js` + } }), builder.hasServerInstrumentationFile() && - esbuild.build({ - entryPoints: [ - `${builder.getServerDirectory()}/${FUNCTION_PREFIX}instrumentation.server.js` - ], - outfile: `${netlify_framework_edge_path}/${FUNCTION_PREFIX}instrumentation.server.js`, - ...esbuild_config + build({ + ...rolldown_config, + input: `${builder.getServerDirectory()}/instrumentation.server.js`, + output: { + ...rolldown_config.output, + file: `${netlify_framework_edge_path}/${FUNCTION_PREFIX}instrumentation.server.js` + } }) ]); diff --git a/packages/adapter-netlify/package.json b/packages/adapter-netlify/package.json index 2ff69f788cb3..b5329e0a425d 100644 --- a/packages/adapter-netlify/package.json +++ b/packages/adapter-netlify/package.json @@ -45,7 +45,7 @@ }, "dependencies": { "@iarna/toml": "^2.2.5", - "esbuild": "^0.25.4" + "rolldown": "^1.0.0-rc.6" }, "devDependencies": { "@netlify/dev": "catalog:", @@ -56,7 +56,6 @@ "@sveltejs/kit": "workspace:^", "@sveltejs/vite-plugin-svelte": "catalog:", "@types/node": "catalog:", - "rolldown": "^1.0.0-rc.5", "typescript": "catalog:", "vite": "catalog:", "vitest": "catalog:" diff --git a/packages/adapter-node/package.json b/packages/adapter-node/package.json index 2c7bfc788423..3aa58f2999a2 100644 --- a/packages/adapter-node/package.json +++ b/packages/adapter-node/package.json @@ -53,7 +53,7 @@ "vitest": "catalog:" }, "dependencies": { - "rolldown": "^1.0.0-rc.5" + "rolldown": "^1.0.0-rc.6" }, "peerDependencies": { "@sveltejs/kit": "^2.4.0" diff --git a/packages/adapter-vercel/index.js b/packages/adapter-vercel/index.js index d6213e554d4b..6ba0e2f8945f 100644 --- a/packages/adapter-vercel/index.js +++ b/packages/adapter-vercel/index.js @@ -1,12 +1,11 @@ -/** @import { BuildOptions } from 'esbuild' */ import fs from 'node:fs'; import path from 'node:path'; import process from 'node:process'; import { fileURLToPath } from 'node:url'; +import { VERSION } from '@sveltejs/kit'; import { nodeFileTrace } from '@vercel/nft'; -import esbuild from 'esbuild'; +import { build } from 'rolldown'; import { get_pathname, parse_isr_expiration, pattern_to_src, resolve_runtime } from './utils.js'; -import { VERSION } from '@sveltejs/kit'; /** * @template T @@ -27,6 +26,33 @@ const [kit_major, kit_minor] = VERSION.split('.'); // https://vercel.com/docs/functions/edge-functions/edge-runtime#compatible-node.js-modules const compatible_node_modules = ['async_hooks', 'events', 'buffer', 'assert', 'util']; +/** @satisfies {import('rolldown').BuildOptions} */ +const rolldown_config = { + platform: 'browser', + resolve: { + conditionNames: [ + // Vercel's Edge runtime key https://runtime-keys.proposal.wintercg.org/#edge-light + 'edge-light', + // re-include these since they are included by default when no conditions are specified + 'import', + 'browser', + 'default' + ] + }, + external: [...compatible_node_modules, ...compatible_node_modules.map((id) => `node:${id}`)], + transform: { + // minimum Node.js version supported is v14.6.0 that is mapped to ES2019 + // https://edge-runtime.vercel.app/features/polyfills + // TODO verify the latest ES version the edge runtime supports + target: 'es2022' + }, + output: { + sourcemap: true, + banner: () => 'globalThis.global = globalThis;', + codeSplitting: false + } +}; + /** @type {import('./index.js').default} **/ const plugin = function (defaults = {}) { if ('edge' in defaults) { @@ -139,52 +165,33 @@ const plugin = function (defaults = {}) { try { const outdir = `${dirs.functions}/${name}.func`; - /** @type {BuildOptions} */ - const esbuild_config = { - // minimum Node.js version supported is v14.6.0 that is mapped to ES2019 - // https://edge-runtime.vercel.app/features/polyfills - // TODO verify the latest ES version the edge runtime supports - target: 'es2020', - bundle: true, - platform: 'browser', - conditions: [ - // Vercel's Edge runtime key https://runtime-keys.proposal.wintercg.org/#edge-light - 'edge-light', - // re-include these since they are included by default when no conditions are specified - // https://esbuild.github.io/api/#conditions - 'module' - ], - format: 'esm', - external: [ - ...compatible_node_modules, - ...compatible_node_modules.map((id) => `node:${id}`), - ...(config.external || []) - ], - sourcemap: 'linked', - banner: { js: 'globalThis.global = globalThis;' }, - loader: { - '.wasm': 'copy', - '.woff': 'copy', - '.woff2': 'copy', - '.ttf': 'copy', - '.eot': 'copy', - '.otf': 'copy' - } + + const build_config = { + ...rolldown_config, + external: [...rolldown_config.external, ...(config.external || [])] }; - const result = await esbuild.build({ - entryPoints: [`${tmp}/edge.js`], - outfile: `${outdir}/index.js`, - ...esbuild_config - }); - let instrumentation_result; - if (builder.hasServerInstrumentationFile?.()) { - instrumentation_result = await esbuild.build({ - entryPoints: [`${builder.getServerDirectory()}/instrumentation.server.js`], - outfile: `${outdir}/instrumentation.server.js`, - ...esbuild_config - }); + await Promise.all([ + build({ + ...build_config, + input: `${tmp}/edge.js`, + output: { + ...build_config.output, + file: `${outdir}/index.js` + } + }), + builder.hasServerInstrumentationFile?.() && + build({ + ...build_config, + input: `${builder.getServerDirectory()}/instrumentation.server.js`, + output: { + ...build_config.output, + file: `${outdir}/instrumentation.server.js` + } + }) + ]); + if (builder.hasServerInstrumentationFile?.()) { builder.instrument?.({ entrypoint: `${outdir}/index.js`, instrumentation: `${outdir}/instrumentation.server.js`, @@ -193,45 +200,10 @@ const plugin = function (defaults = {}) { } }); } - - const warnings = instrumentation_result - ? [...result.warnings, ...instrumentation_result.warnings] - : result.warnings; - - if (warnings.length > 0) { - const formatted = await esbuild.formatMessages(warnings, { - kind: 'warning', - color: true - }); - - console.error(formatted.join('\n')); - } } catch (err) { - const error = /** @type {import('esbuild').BuildFailure} */ (err); - for (const e of error.errors) { - for (const node of e.notes) { - const match = - /The package "(.+)" wasn't found on the file system but is built into node/.exec( - node.text - ); - - if (match) { - node.text = `Cannot use "${match[1]}" when deploying to Vercel Edge Functions.`; - } - } - } - - const formatted = await esbuild.formatMessages(error.errors, { - kind: 'error', - color: true - }); - - console.error(formatted.join('\n')); - throw new Error( - `Bundling with esbuild failed with ${error.errors.length} ${ - error.errors.length === 1 ? 'error' : 'errors' - }`, + 'Bundling edge function with Rolldown failed' + + (err instanceof Error ? `: ${err.message}` : ''), { cause: err } ); } diff --git a/packages/adapter-vercel/package.json b/packages/adapter-vercel/package.json index 770d85b93d39..d9a485d44c33 100644 --- a/packages/adapter-vercel/package.json +++ b/packages/adapter-vercel/package.json @@ -37,11 +37,13 @@ "lint": "prettier --check .", "format": "pnpm lint --write", "check": "tsc", - "test": "vitest run" + "test:unit": "vitest run", + "test:build": "cd test/apps/basic && pnpm build", + "test": "pnpm test:unit && pnpm test:build" }, "dependencies": { "@vercel/nft": "^1.3.2", - "esbuild": "^0.25.4" + "rolldown": "^1.0.0-rc.6" }, "devDependencies": { "@sveltejs/kit": "workspace:^", diff --git a/packages/enhanced-img/package.json b/packages/enhanced-img/package.json index e1625c5c976d..9d2ad76e82e3 100644 --- a/packages/enhanced-img/package.json +++ b/packages/enhanced-img/package.json @@ -48,7 +48,7 @@ "@sveltejs/vite-plugin-svelte": "catalog:", "@types/estree": "catalog:", "@types/node": "catalog:", - "rolldown": "^1.0.0-rc.5", + "rolldown": "catalog:", "svelte": "catalog:", "typescript": "catalog:", "vite": "catalog:", diff --git a/packages/kit/package.json b/packages/kit/package.json index 457b8a990bbb..7f1fdcc281ce 100644 --- a/packages/kit/package.json +++ b/packages/kit/package.json @@ -35,7 +35,7 @@ "@types/connect": "catalog:", "@types/node": "catalog:", "dts-buddy": "catalog:", - "rolldown": "^1.0.0-rc.5", + "rolldown": "catalog:", "svelte": "catalog:", "svelte-preprocess": "catalog:", "typescript": "catalog:", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b5f039da75a5..e105397185aa 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -63,9 +63,6 @@ catalogs: dts-buddy: specifier: ^0.7.0 version: 0.7.0 - esbuild: - specifier: ^0.25.4 - version: 0.25.12 eslint: specifier: ^10.0.0 version: 10.0.0 @@ -75,6 +72,9 @@ catalogs: publint: specifier: ^0.3.0 version: 0.3.0 + rolldown: + specifier: ^1.0.0-rc.6 + version: 1.0.0-rc.6 sirv-cli: specifier: ^3.0.0 version: 3.0.0 @@ -171,18 +171,18 @@ importers: '@types/node': specifier: 'catalog:' version: 24.10.13 - esbuild: + rolldown: specifier: 'catalog:' - version: 0.25.12 + version: 1.0.0-rc.6 typescript: specifier: 'catalog:' version: 5.9.3 vite: specifier: 'catalog:' - version: 8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.25.12)(jiti@2.4.2)(yaml@2.8.0) + version: 8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0) vitest: specifier: 'catalog:' - version: 4.1.0-beta.4(@opentelemetry/api@1.9.0)(@types/node@24.10.13)(@vitest/browser-playwright@4.1.0-beta.4)(vite@8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.25.12)(jiti@2.4.2)(yaml@2.8.0)) + version: 4.1.0-beta.4(@opentelemetry/api@1.9.0)(@types/node@24.10.13)(@vitest/browser-playwright@4.1.0-beta.4)(vite@8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0)) packages/adapter-cloudflare/test/apps/pages: devDependencies: @@ -231,9 +231,9 @@ importers: '@iarna/toml': specifier: ^2.2.5 version: 2.2.5 - esbuild: - specifier: ^0.25.4 - version: 0.25.12 + rolldown: + specifier: ^1.0.0-rc.6 + version: 1.0.0-rc.6 devDependencies: '@netlify/dev': specifier: 'catalog:' @@ -255,22 +255,19 @@ importers: version: link:../kit '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 7.0.0(svelte@5.53.5)(vite@8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.25.12)(jiti@2.4.2)(yaml@2.8.0)) + version: 7.0.0(svelte@5.53.5)(vite@8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0)) '@types/node': specifier: 'catalog:' version: 24.10.13 - rolldown: - specifier: ^1.0.0-rc.5 - version: 1.0.0-rc.5 typescript: specifier: 'catalog:' version: 5.9.3 vite: specifier: 'catalog:' - version: 8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.25.12)(jiti@2.4.2)(yaml@2.8.0) + version: 8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0) vitest: specifier: 'catalog:' - version: 4.1.0-beta.4(@opentelemetry/api@1.9.0)(@types/node@24.10.13)(@vitest/browser-playwright@4.1.0-beta.4)(vite@8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.25.12)(jiti@2.4.2)(yaml@2.8.0)) + version: 4.1.0-beta.4(@opentelemetry/api@1.9.0)(@types/node@24.10.13)(@vitest/browser-playwright@4.1.0-beta.4)(vite@8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0)) packages/adapter-netlify/test/apps/basic: devDependencies: @@ -335,8 +332,8 @@ importers: packages/adapter-node: dependencies: rolldown: - specifier: ^1.0.0-rc.5 - version: 1.0.0-rc.5 + specifier: ^1.0.0-rc.6 + version: 1.0.0-rc.6 devDependencies: '@polka/url': specifier: 'catalog:' @@ -434,16 +431,16 @@ importers: '@vercel/nft': specifier: ^1.3.2 version: 1.3.2(rollup@4.57.1) - esbuild: - specifier: ^0.25.4 - version: 0.25.12 + rolldown: + specifier: ^1.0.0-rc.6 + version: 1.0.0-rc.6 devDependencies: '@sveltejs/kit': specifier: workspace:^ version: link:../kit '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 7.0.0(svelte@5.53.5)(vite@8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.25.12)(jiti@2.4.2)(yaml@2.8.0)) + version: 7.0.0(svelte@5.53.5)(vite@8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0)) '@types/node': specifier: 'catalog:' version: 24.10.13 @@ -452,10 +449,10 @@ importers: version: 5.9.3 vite: specifier: 'catalog:' - version: 8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.25.12)(jiti@2.4.2)(yaml@2.8.0) + version: 8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0) vitest: specifier: 'catalog:' - version: 4.1.0-beta.4(@opentelemetry/api@1.9.0)(@types/node@24.10.13)(@vitest/browser-playwright@4.1.0-beta.4)(vite@8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.25.12)(jiti@2.4.2)(yaml@2.8.0)) + version: 4.1.0-beta.4(@opentelemetry/api@1.9.0)(@types/node@24.10.13)(@vitest/browser-playwright@4.1.0-beta.4)(vite@8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0)) packages/adapter-vercel/test/apps/basic: devDependencies: @@ -512,8 +509,8 @@ importers: specifier: 'catalog:' version: 24.10.13 rolldown: - specifier: ^1.0.0-rc.5 - version: 1.0.0-rc.5 + specifier: 'catalog:' + version: 1.0.0-rc.6 svelte: specifier: 'catalog:' version: 5.53.5 @@ -594,8 +591,8 @@ importers: specifier: 'catalog:' version: 0.7.0(typescript@5.9.3) rolldown: - specifier: ^1.0.0-rc.5 - version: 1.0.0-rc.5 + specifier: 'catalog:' + version: 1.0.0-rc.6 svelte: specifier: 'catalog:' version: 5.53.5 @@ -1613,12 +1610,6 @@ packages: resolution: {integrity: sha512-cxgkB66RQB95H3X27jlnxCRNTmPuSTgmBAq6/4n2Dtv4hsk4yz8FadA1ggmd0uZzvKqWD6CR+WFgTjhDqg7eyw==} engines: {node: '>=18.0.0'} - '@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.27.2': resolution: {integrity: sha512-GZMB+a0mOMZs4MpDbj8RJp4cw+w1WV5NYD6xzgvzUJ5Ek2jerwfO2eADyI6ExDSUED+1X8aMbegahsJi+8mgpw==} engines: {node: '>=18'} @@ -1631,12 +1622,6 @@ packages: 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.27.2': resolution: {integrity: sha512-pvz8ZZ7ot/RBphf8fv60ljmaoydPU12VuXHImtAs0XhLLw+EXBi2BLe3OYSBslR4rryHvweW5gmkKFwTiFy6KA==} engines: {node: '>=18'} @@ -1649,12 +1634,6 @@ packages: 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.27.2': resolution: {integrity: sha512-DVNI8jlPa7Ujbr1yjU2PfUSRtAUZPG9I1RwW4F4xFB1Imiu2on0ADiI/c3td+KmDtVKNbi+nffGDQMfcIMkwIA==} engines: {node: '>=18'} @@ -1667,12 +1646,6 @@ packages: 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.27.2': resolution: {integrity: sha512-z8Ank4Byh4TJJOh4wpz8g2vDy75zFL0TlZlkUkEwYXuPSgX8yzep596n6mT7905kA9uHZsf/o2OJZubl2l3M7A==} engines: {node: '>=18'} @@ -1685,12 +1658,6 @@ packages: 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.27.2': resolution: {integrity: sha512-davCD2Zc80nzDVRwXTcQP/28fiJbcOwvdolL0sOiOsbwBa72kegmVU0Wrh1MYrbuCL98Omp5dVhQFWRKR2ZAlg==} engines: {node: '>=18'} @@ -1703,12 +1670,6 @@ packages: 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.27.2': resolution: {integrity: sha512-ZxtijOmlQCBWGwbVmwOF/UCzuGIbUkqB1faQRf5akQmxRJ1ujusWsb3CVfk/9iZKr2L5SMU5wPBi1UWbvL+VQA==} engines: {node: '>=18'} @@ -1721,12 +1682,6 @@ packages: 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.27.2': resolution: {integrity: sha512-lS/9CN+rgqQ9czogxlMcBMGd+l8Q3Nj1MFQwBZJyoEKI50XGxwuzznYdwcav6lpOGv5BqaZXqvBSiB/kJ5op+g==} engines: {node: '>=18'} @@ -1739,12 +1694,6 @@ packages: 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.27.2': resolution: {integrity: sha512-tAfqtNYb4YgPnJlEFu4c212HYjQWSO/w/h/lQaBK7RbwGIkBOuNKQI9tqWzx7Wtp7bTPaGC6MJvWI608P3wXYA==} engines: {node: '>=18'} @@ -1757,12 +1706,6 @@ packages: 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.27.2': resolution: {integrity: sha512-hYxN8pr66NsCCiRFkHUAsxylNOcAQaxSSkHMMjcpx0si13t1LHFphxJZUiGwojB1a/Hd5OiPIqDdXONia6bhTw==} engines: {node: '>=18'} @@ -1775,12 +1718,6 @@ packages: 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.27.2': resolution: {integrity: sha512-vWfq4GaIMP9AIe4yj1ZUW18RDhx6EPQKjwe7n8BbIecFtCQG4CfHGaHuh7fdfq+y3LIA2vGS/o9ZBGVxIDi9hw==} engines: {node: '>=18'} @@ -1793,12 +1730,6 @@ packages: 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.27.2': resolution: {integrity: sha512-MJt5BRRSScPDwG2hLelYhAAKh9imjHK5+NE/tvnRLbIqUWa+0E9N4WNMjmp/kXXPHZGqPLxggwVhz7QP8CTR8w==} engines: {node: '>=18'} @@ -1811,12 +1742,6 @@ packages: 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.27.2': resolution: {integrity: sha512-lugyF1atnAT463aO6KPshVCJK5NgRnU4yb3FUumyVz+cGvZbontBgzeGFO1nF+dPueHD367a2ZXe1NtUkAjOtg==} engines: {node: '>=18'} @@ -1829,12 +1754,6 @@ packages: 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.27.2': resolution: {integrity: sha512-nlP2I6ArEBewvJ2gjrrkESEZkB5mIoaTswuqNFRv/WYd+ATtUpe9Y09RnJvgvdag7he0OWgEZWhviS1OTOKixw==} engines: {node: '>=18'} @@ -1847,12 +1766,6 @@ packages: 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.27.2': resolution: {integrity: sha512-C92gnpey7tUQONqg1n6dKVbx3vphKtTHJaNG2Ok9lGwbZil6DrfyecMsp9CrmXGQJmZ7iiVXvvZH6Ml5hL6XdQ==} engines: {node: '>=18'} @@ -1865,12 +1778,6 @@ packages: 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.27.2': resolution: {integrity: sha512-B5BOmojNtUyN8AXlK0QJyvjEZkWwy/FKvakkTDCziX95AowLZKR6aCDhG7LeF7uMCXEJqwa8Bejz5LTPYm8AvA==} engines: {node: '>=18'} @@ -1883,12 +1790,6 @@ packages: 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.27.2': resolution: {integrity: sha512-p4bm9+wsPwup5Z8f4EpfN63qNagQ47Ua2znaqGH6bqLlmJ4bx97Y9JdqxgGZ6Y8xVTixUnEkoKSHcpRlDnNr5w==} engines: {node: '>=18'} @@ -1901,12 +1802,6 @@ packages: 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.27.2': resolution: {integrity: sha512-uwp2Tip5aPmH+NRUwTcfLb+W32WXjpFejTIOWZFw/v7/KnpCDKG66u4DLcurQpiYTiYwQ9B7KOeMJvLCu/OvbA==} engines: {node: '>=18'} @@ -1919,12 +1814,6 @@ packages: 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.27.2': resolution: {integrity: sha512-Kj6DiBlwXrPsCRDeRvGAUb/LNrBASrfqAIok+xB0LxK8CHqxZ037viF13ugfsIpePH93mX7xfJp97cyDuTZ3cw==} engines: {node: '>=18'} @@ -1937,12 +1826,6 @@ packages: 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.27.2': resolution: {integrity: sha512-HwGDZ0VLVBY3Y+Nw0JexZy9o/nUAWq9MlV7cahpaXKW6TOzfVno3y3/M8Ga8u8Yr7GldLOov27xiCnqRZf0tCA==} engines: {node: '>=18'} @@ -1955,12 +1838,6 @@ packages: 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.27.2': resolution: {integrity: sha512-DNIHH2BPQ5551A7oSHD0CKbwIA/Ox7+78/AWkbS5QoRzaqlev2uFayfSxq68EkonB+IKjiuxBFoV8ESJy8bOHA==} engines: {node: '>=18'} @@ -1973,12 +1850,6 @@ packages: 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.27.2': resolution: {integrity: sha512-/it7w9Nb7+0KFIzjalNJVR5bOzA9Vay+yIPLVHfIQYG/j+j9VTH84aNB8ExGKPU4AzfaEvN9/V4HV+F+vo8OEg==} engines: {node: '>=18'} @@ -1991,12 +1862,6 @@ packages: 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.27.2': resolution: {integrity: sha512-LRBbCmiU51IXfeXk59csuX/aSaToeG7w48nMwA6049Y4J4+VbWALAuXcs+qcD04rHDuSCSRKdmY63sruDS5qag==} engines: {node: '>=18'} @@ -2009,12 +1874,6 @@ packages: 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.27.2': resolution: {integrity: sha512-kMtx1yqJHTmqaqHPAzKCAkDaKsffmXkPHThSfRwZGyuqyIeBvf08KSsYXl+abf5HDAPMJIPnbBfXvP2ZC2TfHg==} engines: {node: '>=18'} @@ -2027,12 +1886,6 @@ packages: 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.27.2': resolution: {integrity: sha512-Yaf78O/B3Kkh+nKABUF++bvJv5Ijoy9AN1ww904rOXZFLWVc5OLOfL56W+C8F9xn5JQZa3UX6m+IktJnIb1Jjg==} engines: {node: '>=18'} @@ -2045,12 +1898,6 @@ packages: 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.27.2': resolution: {integrity: sha512-Iuws0kxo4yusk7sw70Xa2E2imZU5HoixzxfGCdxwBdhiDgt9vX9VUCBhqcwY7/uh//78A1hMkkROMJq9l27oLQ==} engines: {node: '>=18'} @@ -2063,12 +1910,6 @@ packages: 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.27.2': resolution: {integrity: sha512-sRdU18mcKf7F+YgheI/zGf5alZatMUTKj/jNS6l744f9u3WFu4v7twcUI9vu4mknF4Y9aDlblIie0IM+5xxaqQ==} engines: {node: '>=18'} @@ -2742,6 +2583,9 @@ packages: '@oxc-project/types@0.114.0': resolution: {integrity: sha512-//nBfbzHQHvJs8oFIjv6coZ6uxQ4alLfiPe6D5vit6c4pmxATHHlVwgB1k+Hv4yoAMyncdxgRBF5K4BYWUCzvA==} + '@oxc-project/types@0.115.0': + resolution: {integrity: sha512-4n91DKnebUS4yjUHl2g3/b2T+IUdCfmoZGhmwsovZCDaJSs+QkVAM+0AqqTxHSsHfeiMuueT75cZaZcT/m0pSw==} + '@parcel/watcher-android-arm64@2.5.1': resolution: {integrity: sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA==} engines: {node: '>= 10.0.0'} @@ -2897,30 +2741,60 @@ packages: cpu: [arm64] os: [android] + '@rolldown/binding-android-arm64@1.0.0-rc.6': + resolution: {integrity: sha512-kvjTSWGcrv+BaR2vge57rsKiYdVR8V8CoS0vgKrc570qRBfty4bT+1X0z3j2TaVV+kAYzA0PjeB9+mdZyqUZlg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [android] + '@rolldown/binding-darwin-arm64@1.0.0-rc.5': resolution: {integrity: sha512-ZP9xb9lPAex36pvkNWCjSEJW/Gfdm9I3ssiqOFLmpZ/vosPXgpoGxCmh+dX1Qs+/bWQE6toNFXWWL8vYoKoK9Q==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [darwin] + '@rolldown/binding-darwin-arm64@1.0.0-rc.6': + resolution: {integrity: sha512-+tJhD21KvGNtUrpLXrZQlT+j5HZKiEwR2qtcZb3vNOUpvoT9QjEykr75ZW/Kr0W89gose/HVXU6351uVZD8Qvw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [darwin] + '@rolldown/binding-darwin-x64@1.0.0-rc.5': resolution: {integrity: sha512-7IdrPunf6dp9mywMgTOKMMGDnMHQ6+h5gRl6LW8rhD8WK2kXX0IwzcM5Zc0B5J7xQs8QWOlKjv8BJsU/1CD3pg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [darwin] + '@rolldown/binding-darwin-x64@1.0.0-rc.6': + resolution: {integrity: sha512-DKNhjMk38FAWaHwUt1dFR3rA/qRAvn2NUvSG2UGvxvlMxSmN/qqww/j4ABAbXhNRXtGQNmrAINMXRuwHl16ZHg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [darwin] + '@rolldown/binding-freebsd-x64@1.0.0-rc.5': resolution: {integrity: sha512-o/JCk+dL0IN68EBhZ4DqfsfvxPfMeoM6cJtxORC1YYoxGHZyth2Kb2maXDb4oddw2wu8iIbnYXYPEzBtAF5CAg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [freebsd] + '@rolldown/binding-freebsd-x64@1.0.0-rc.6': + resolution: {integrity: sha512-8TThsRkCPAnfyMBShxrGdtoOE6h36QepqRQI97iFaQSCRbHFWHcDHppcojZnzXoruuhPnjMEygzaykvPVJsMRg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [freebsd] + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.5': resolution: {integrity: sha512-IIBwTtA6VwxQLcEgq2mfrUgam7VvPZjhd/jxmeS1npM+edWsrrpRLHUdze+sk4rhb8/xpP3flemgcZXXUW6ukw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.6': + resolution: {integrity: sha512-ZfmFoOwPUZCWtGOVC9/qbQzfc0249FrRUOzV2XabSMUV60Crp211OWLQN1zmQAsRIVWRcEwhJ46Z1mXGo/L/nQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] + '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.5': resolution: {integrity: sha512-KSol1De1spMZL+Xg7K5IBWXIvRWv7+pveaxFWXpezezAG7CS6ojzRjtCGCiLxQricutTAi/LkNWKMsd2wNhMKQ==} engines: {node: ^20.19.0 || >=22.12.0} @@ -2928,6 +2802,13 @@ packages: os: [linux] libc: [glibc] + '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.6': + resolution: {integrity: sha512-ZsGzbNETxPodGlLTYHaCSGVhNN/rvkMDCJYHdT7PZr5jFJRmBfmDi2awhF64Dt2vxrJqY6VeeYSgOzEbHRsb7Q==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [glibc] + '@rolldown/binding-linux-arm64-musl@1.0.0-rc.5': resolution: {integrity: sha512-WFljyDkxtXRlWxMjxeegf7xMYXxUr8u7JdXlOEWKYgDqEgxUnSEsVDxBiNWQ1D5kQKwf8Wo4sVKEYPRhCdsjwA==} engines: {node: ^20.19.0 || >=22.12.0} @@ -2935,6 +2816,13 @@ packages: os: [linux] libc: [musl] + '@rolldown/binding-linux-arm64-musl@1.0.0-rc.6': + resolution: {integrity: sha512-elPpdevtCdUOqziemR86C4CSCr/5sUxalzDrf/CJdMT+kZt2C556as++qHikNOz0vuFf52h+GJNXZM08eWgGPQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [musl] + '@rolldown/binding-linux-x64-gnu@1.0.0-rc.5': resolution: {integrity: sha512-CUlplTujmbDWp2gamvrqVKi2Or8lmngXT1WxsizJfts7JrvfGhZObciaY/+CbdbS9qNnskvwMZNEhTPrn7b+WA==} engines: {node: ^20.19.0 || >=22.12.0} @@ -2942,6 +2830,13 @@ packages: os: [linux] libc: [glibc] + '@rolldown/binding-linux-x64-gnu@1.0.0-rc.6': + resolution: {integrity: sha512-IBwXsf56o3xhzAyaZxdM1CX8UFiBEUFCjiVUgny67Q8vPIqkjzJj0YKhd3TbBHanuxThgBa59f6Pgutg2OGk5A==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [glibc] + '@rolldown/binding-linux-x64-musl@1.0.0-rc.5': resolution: {integrity: sha512-wdf7g9NbVZCeAo2iGhsjJb7I8ZFfs6X8bumfrWg82VK+8P6AlLXwk48a1ASiJQDTS7Svq2xVzZg3sGO2aXpHRA==} engines: {node: ^20.19.0 || >=22.12.0} @@ -2949,32 +2844,65 @@ packages: os: [linux] libc: [musl] + '@rolldown/binding-linux-x64-musl@1.0.0-rc.6': + resolution: {integrity: sha512-vOk7G8V9Zm+8a6PL6JTpCea61q491oYlGtO6CvnsbhNLlKdf0bbCPytFzGQhYmCKZDKkEbmnkcIprTEGCURnwg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [musl] + '@rolldown/binding-openharmony-arm64@1.0.0-rc.5': resolution: {integrity: sha512-0CWY7ubu12nhzz+tkpHjoG3IRSTlWYe0wrfJRf4qqjqQSGtAYgoL9kwzdvlhaFdZ5ffVeyYw9qLsChcjUMEloQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [openharmony] + '@rolldown/binding-openharmony-arm64@1.0.0-rc.6': + resolution: {integrity: sha512-ASjEDI4MRv7XCQb2JVaBzfEYO98JKCGrAgoW6M03fJzH/ilCnC43Mb3ptB9q/lzsaahoJyIBoAGKAYEjUvpyvQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [openharmony] + '@rolldown/binding-wasm32-wasi@1.0.0-rc.5': resolution: {integrity: sha512-LztXnGzv6t2u830mnZrFLRVqT/DPJ9DL4ZTz/y93rqUVkeHjMMYIYaFj+BUthiYxbVH9dH0SZYufETspKY/NhA==} engines: {node: '>=14.0.0'} cpu: [wasm32] + '@rolldown/binding-wasm32-wasi@1.0.0-rc.6': + resolution: {integrity: sha512-mYa1+h2l6Zc0LvmwUh0oXKKYihnw/1WC73vTqw+IgtfEtv47A+rWzzcWwVDkW73+UDr0d/Ie/HRXoaOY22pQDw==} + engines: {node: '>=14.0.0'} + cpu: [wasm32] + '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.5': resolution: {integrity: sha512-jUct1XVeGtyjqJXEAfvdFa8xoigYZ2rge7nYEm70ppQxpfH9ze2fbIrpHmP2tNM2vL/F6Dd0CpXhpjPbC6bSxQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [win32] + '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.6': + resolution: {integrity: sha512-e2ABskbNH3MRUBMjgxaMjYIw11DSwjLJxBII3UgpF6WClGLIh8A20kamc+FKH5vIaFVnYQInmcLYSUVpqMPLow==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [win32] + '@rolldown/binding-win32-x64-msvc@1.0.0-rc.5': resolution: {integrity: sha512-VQ8F9ld5gw29epjnVGdrx8ugiLTe8BMqmhDYy7nGbdeDo4HAt4bgdZvLbViEhg7DZyHLpiEUlO5/jPSUrIuxRQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [win32] + '@rolldown/binding-win32-x64-msvc@1.0.0-rc.6': + resolution: {integrity: sha512-dJVc3ifhaRXxIEh1xowLohzFrlQXkJ66LepHm+CmSprTWgVrPa8Fx3OL57xwIqDEH9hufcKkDX2v65rS3NZyRA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [win32] + '@rolldown/pluginutils@1.0.0-rc.5': resolution: {integrity: sha512-RxlLX/DPoarZ9PtxVrQgZhPoor987YtKQqCo5zkjX+0S0yLJ7Vv515Wk6+xtTL67VONKJKxETWZwuZjss2idYw==} + '@rolldown/pluginutils@1.0.0-rc.6': + resolution: {integrity: sha512-Y0+JT8Mi1mmW08K6HieG315XNRu4L0rkfCpA364HtytjgiqYnMYRdFPcxRl+BQQqNXzecL2S9nii+RUpO93XIA==} + '@rollup/pluginutils@5.1.3': resolution: {integrity: sha512-Pnsb6f32CD2W3uCaLZIzDmeFyQ2b8UWMFI7xtwUezpcGBDVDW6y9XgAWIlARiGAo6eNF5FK5aQTr0LFyNyqq5A==} engines: {node: '>=14.0.0'} @@ -3897,11 +3825,6 @@ packages: es-module-lexer@2.0.0: resolution: {integrity: sha512-5POEcUuZybH7IdmGsD8wlf0AI55wMecM9rVBTI/qEAy2c1kTOm3DjFYjrBdI2K3BaJjJYfYFeRtM0t9ssnRuxw==} - esbuild@0.25.12: - resolution: {integrity: sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==} - engines: {node: '>=18'} - hasBin: true - esbuild@0.27.2: resolution: {integrity: sha512-HyNQImnsOC7X9PMNaCIeAm4ISCQXs5a5YasTXVliKv4uuBo1dKrG0A+uQS8M5eXjVMnLg3WgXaKvprHlFJQffw==} engines: {node: '>=18'} @@ -5236,6 +5159,11 @@ packages: engines: {node: ^20.19.0 || >=22.12.0} hasBin: true + rolldown@1.0.0-rc.6: + resolution: {integrity: sha512-B8vFPV1ADyegoYfhg+E7RAucYKv0xdVlwYYsIJgfPNeiSxZGWNxts9RqhyGzC11ULK/VaeXyKezGCwpMiH8Ktw==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + rollup@4.57.1: resolution: {integrity: sha512-oQL6lgK3e2QZeQ7gcgIkS2YZPg5slw37hYufJ3edKlfQSGGm8ICoxswK15ntSzF/a8+h7ekRy7k7oWc3BQ7y8A==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} @@ -6225,234 +6153,156 @@ snapshots: '@whatwg-node/promise-helpers': 1.3.2 tslib: 2.8.1 - '@esbuild/aix-ppc64@0.25.12': - optional: true - '@esbuild/aix-ppc64@0.27.2': optional: true '@esbuild/aix-ppc64@0.27.3': optional: true - '@esbuild/android-arm64@0.25.12': - optional: true - '@esbuild/android-arm64@0.27.2': optional: true '@esbuild/android-arm64@0.27.3': optional: true - '@esbuild/android-arm@0.25.12': - optional: true - '@esbuild/android-arm@0.27.2': optional: true '@esbuild/android-arm@0.27.3': optional: true - '@esbuild/android-x64@0.25.12': - optional: true - '@esbuild/android-x64@0.27.2': optional: true '@esbuild/android-x64@0.27.3': optional: true - '@esbuild/darwin-arm64@0.25.12': - optional: true - '@esbuild/darwin-arm64@0.27.2': optional: true '@esbuild/darwin-arm64@0.27.3': optional: true - '@esbuild/darwin-x64@0.25.12': - optional: true - '@esbuild/darwin-x64@0.27.2': optional: true '@esbuild/darwin-x64@0.27.3': optional: true - '@esbuild/freebsd-arm64@0.25.12': - optional: true - '@esbuild/freebsd-arm64@0.27.2': optional: true '@esbuild/freebsd-arm64@0.27.3': optional: true - '@esbuild/freebsd-x64@0.25.12': - optional: true - '@esbuild/freebsd-x64@0.27.2': optional: true '@esbuild/freebsd-x64@0.27.3': optional: true - '@esbuild/linux-arm64@0.25.12': - optional: true - '@esbuild/linux-arm64@0.27.2': optional: true '@esbuild/linux-arm64@0.27.3': optional: true - '@esbuild/linux-arm@0.25.12': - optional: true - '@esbuild/linux-arm@0.27.2': optional: true '@esbuild/linux-arm@0.27.3': optional: true - '@esbuild/linux-ia32@0.25.12': - optional: true - '@esbuild/linux-ia32@0.27.2': optional: true '@esbuild/linux-ia32@0.27.3': optional: true - '@esbuild/linux-loong64@0.25.12': - optional: true - '@esbuild/linux-loong64@0.27.2': optional: true '@esbuild/linux-loong64@0.27.3': optional: true - '@esbuild/linux-mips64el@0.25.12': - optional: true - '@esbuild/linux-mips64el@0.27.2': optional: true '@esbuild/linux-mips64el@0.27.3': optional: true - '@esbuild/linux-ppc64@0.25.12': - optional: true - '@esbuild/linux-ppc64@0.27.2': optional: true '@esbuild/linux-ppc64@0.27.3': optional: true - '@esbuild/linux-riscv64@0.25.12': - optional: true - '@esbuild/linux-riscv64@0.27.2': optional: true '@esbuild/linux-riscv64@0.27.3': optional: true - '@esbuild/linux-s390x@0.25.12': - optional: true - '@esbuild/linux-s390x@0.27.2': optional: true '@esbuild/linux-s390x@0.27.3': optional: true - '@esbuild/linux-x64@0.25.12': - optional: true - '@esbuild/linux-x64@0.27.2': optional: true '@esbuild/linux-x64@0.27.3': optional: true - '@esbuild/netbsd-arm64@0.25.12': - optional: true - '@esbuild/netbsd-arm64@0.27.2': optional: true '@esbuild/netbsd-arm64@0.27.3': optional: true - '@esbuild/netbsd-x64@0.25.12': - optional: true - '@esbuild/netbsd-x64@0.27.2': optional: true '@esbuild/netbsd-x64@0.27.3': optional: true - '@esbuild/openbsd-arm64@0.25.12': - optional: true - '@esbuild/openbsd-arm64@0.27.2': optional: true '@esbuild/openbsd-arm64@0.27.3': optional: true - '@esbuild/openbsd-x64@0.25.12': - optional: true - '@esbuild/openbsd-x64@0.27.2': optional: true '@esbuild/openbsd-x64@0.27.3': optional: true - '@esbuild/openharmony-arm64@0.25.12': - optional: true - '@esbuild/openharmony-arm64@0.27.2': optional: true '@esbuild/openharmony-arm64@0.27.3': optional: true - '@esbuild/sunos-x64@0.25.12': - optional: true - '@esbuild/sunos-x64@0.27.2': optional: true '@esbuild/sunos-x64@0.27.3': optional: true - '@esbuild/win32-arm64@0.25.12': - optional: true - '@esbuild/win32-arm64@0.27.2': optional: true '@esbuild/win32-arm64@0.27.3': optional: true - '@esbuild/win32-ia32@0.25.12': - optional: true - '@esbuild/win32-ia32@0.27.2': optional: true '@esbuild/win32-ia32@0.27.3': optional: true - '@esbuild/win32-x64@0.25.12': - optional: true - '@esbuild/win32-x64@0.27.2': optional: true @@ -7320,6 +7170,8 @@ snapshots: '@oxc-project/types@0.114.0': {} + '@oxc-project/types@0.115.0': {} + '@parcel/watcher-android-arm64@2.5.1': optional: true @@ -7434,46 +7286,89 @@ snapshots: '@rolldown/binding-android-arm64@1.0.0-rc.5': optional: true + '@rolldown/binding-android-arm64@1.0.0-rc.6': + optional: true + '@rolldown/binding-darwin-arm64@1.0.0-rc.5': optional: true + '@rolldown/binding-darwin-arm64@1.0.0-rc.6': + optional: true + '@rolldown/binding-darwin-x64@1.0.0-rc.5': optional: true + '@rolldown/binding-darwin-x64@1.0.0-rc.6': + optional: true + '@rolldown/binding-freebsd-x64@1.0.0-rc.5': optional: true + '@rolldown/binding-freebsd-x64@1.0.0-rc.6': + optional: true + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.5': optional: true + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.6': + optional: true + '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.5': optional: true + '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.6': + optional: true + '@rolldown/binding-linux-arm64-musl@1.0.0-rc.5': optional: true + '@rolldown/binding-linux-arm64-musl@1.0.0-rc.6': + optional: true + '@rolldown/binding-linux-x64-gnu@1.0.0-rc.5': optional: true + '@rolldown/binding-linux-x64-gnu@1.0.0-rc.6': + optional: true + '@rolldown/binding-linux-x64-musl@1.0.0-rc.5': optional: true + '@rolldown/binding-linux-x64-musl@1.0.0-rc.6': + optional: true + '@rolldown/binding-openharmony-arm64@1.0.0-rc.5': optional: true + '@rolldown/binding-openharmony-arm64@1.0.0-rc.6': + optional: true + '@rolldown/binding-wasm32-wasi@1.0.0-rc.5': dependencies: '@napi-rs/wasm-runtime': 1.1.1 optional: true + '@rolldown/binding-wasm32-wasi@1.0.0-rc.6': + dependencies: + '@napi-rs/wasm-runtime': 1.1.1 + optional: true + '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.5': optional: true + '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.6': + optional: true + '@rolldown/binding-win32-x64-msvc@1.0.0-rc.5': optional: true + '@rolldown/binding-win32-x64-msvc@1.0.0-rc.6': + optional: true + '@rolldown/pluginutils@1.0.0-rc.5': {} + '@rolldown/pluginutils@1.0.0-rc.6': {} + '@rollup/pluginutils@5.1.3(rollup@4.57.1)': dependencies: '@types/estree': 1.0.8 @@ -7587,15 +7482,6 @@ snapshots: typescript: 5.9.3 typescript-eslint: 8.56.0(eslint@10.0.0(jiti@2.4.2))(typescript@5.9.3) - '@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.53.5)(vite@8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.25.12)(jiti@2.4.2)(yaml@2.8.0))': - dependencies: - deepmerge: 4.3.1 - magic-string: 0.30.21 - obug: 2.1.1 - svelte: 5.53.5 - vite: 8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.25.12)(jiti@2.4.2)(yaml@2.8.0) - vitefu: 1.1.2(vite@8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.25.12)(jiti@2.4.2)(yaml@2.8.0)) - '@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.53.5)(vite@8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0))': dependencies: deepmerge: 4.3.1 @@ -7800,20 +7686,6 @@ snapshots: - rollup - supports-color - '@vitest/browser-playwright@4.1.0-beta.4(playwright@1.58.2)(vite@8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.25.12)(jiti@2.4.2)(yaml@2.8.0))(vitest@4.1.0-beta.4)': - dependencies: - '@vitest/browser': 4.1.0-beta.4(vite@8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.25.12)(jiti@2.4.2)(yaml@2.8.0))(vitest@4.1.0-beta.4) - '@vitest/mocker': 4.1.0-beta.4(vite@8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.25.12)(jiti@2.4.2)(yaml@2.8.0)) - playwright: 1.58.2 - tinyrainbow: 3.0.3 - vitest: 4.1.0-beta.4(@opentelemetry/api@1.9.0)(@types/node@24.10.13)(@vitest/browser-playwright@4.1.0-beta.4)(vite@8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.25.12)(jiti@2.4.2)(yaml@2.8.0)) - transitivePeerDependencies: - - bufferutil - - msw - - utf-8-validate - - vite - optional: true - '@vitest/browser-playwright@4.1.0-beta.4(playwright@1.58.2)(vite@8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0))(vitest@4.1.0-beta.4)': dependencies: '@vitest/browser': 4.1.0-beta.4(vite@8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0))(vitest@4.1.0-beta.4) @@ -7827,24 +7699,6 @@ snapshots: - utf-8-validate - vite - '@vitest/browser@4.1.0-beta.4(vite@8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.25.12)(jiti@2.4.2)(yaml@2.8.0))(vitest@4.1.0-beta.4)': - dependencies: - '@vitest/mocker': 4.1.0-beta.4(vite@8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.25.12)(jiti@2.4.2)(yaml@2.8.0)) - '@vitest/utils': 4.1.0-beta.4 - magic-string: 0.30.21 - pixelmatch: 7.1.0 - pngjs: 7.0.0 - sirv: 3.0.2 - tinyrainbow: 3.0.3 - vitest: 4.1.0-beta.4(@opentelemetry/api@1.9.0)(@types/node@24.10.13)(@vitest/browser-playwright@4.1.0-beta.4)(vite@8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.25.12)(jiti@2.4.2)(yaml@2.8.0)) - ws: 8.19.0 - transitivePeerDependencies: - - bufferutil - - msw - - utf-8-validate - - vite - optional: true - '@vitest/browser@4.1.0-beta.4(vite@8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0))(vitest@4.1.0-beta.4)': dependencies: '@vitest/mocker': 4.1.0-beta.4(vite@8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0)) @@ -7871,14 +7725,6 @@ snapshots: chai: 6.2.2 tinyrainbow: 3.0.3 - '@vitest/mocker@4.1.0-beta.4(vite@8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.25.12)(jiti@2.4.2)(yaml@2.8.0))': - dependencies: - '@vitest/spy': 4.1.0-beta.4 - estree-walker: 3.0.3 - magic-string: 0.30.21 - optionalDependencies: - vite: 8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.25.12)(jiti@2.4.2)(yaml@2.8.0) - '@vitest/mocker@4.1.0-beta.4(vite@8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0))': dependencies: '@vitest/spy': 4.1.0-beta.4 @@ -8460,35 +8306,6 @@ snapshots: es-module-lexer@2.0.0: {} - 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.27.2: optionalDependencies: '@esbuild/aix-ppc64': 0.27.2 @@ -9872,6 +9689,25 @@ snapshots: '@rolldown/binding-win32-arm64-msvc': 1.0.0-rc.5 '@rolldown/binding-win32-x64-msvc': 1.0.0-rc.5 + rolldown@1.0.0-rc.6: + dependencies: + '@oxc-project/types': 0.115.0 + '@rolldown/pluginutils': 1.0.0-rc.6 + optionalDependencies: + '@rolldown/binding-android-arm64': 1.0.0-rc.6 + '@rolldown/binding-darwin-arm64': 1.0.0-rc.6 + '@rolldown/binding-darwin-x64': 1.0.0-rc.6 + '@rolldown/binding-freebsd-x64': 1.0.0-rc.6 + '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-rc.6 + '@rolldown/binding-linux-arm64-gnu': 1.0.0-rc.6 + '@rolldown/binding-linux-arm64-musl': 1.0.0-rc.6 + '@rolldown/binding-linux-x64-gnu': 1.0.0-rc.6 + '@rolldown/binding-linux-x64-musl': 1.0.0-rc.6 + '@rolldown/binding-openharmony-arm64': 1.0.0-rc.6 + '@rolldown/binding-wasm32-wasi': 1.0.0-rc.6 + '@rolldown/binding-win32-arm64-msvc': 1.0.0-rc.6 + '@rolldown/binding-win32-x64-msvc': 1.0.0-rc.6 + rollup@4.57.1: dependencies: '@types/estree': 1.0.8 @@ -10351,21 +10187,6 @@ snapshots: transitivePeerDependencies: - rollup - vite@8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.25.12)(jiti@2.4.2)(yaml@2.8.0): - dependencies: - '@oxc-project/runtime': 0.114.0 - lightningcss: 1.31.1 - picomatch: 4.0.3 - postcss: 8.5.6 - rolldown: 1.0.0-rc.5 - tinyglobby: 0.2.15 - optionalDependencies: - '@types/node': 24.10.13 - esbuild: 0.25.12 - fsevents: 2.3.3 - jiti: 2.4.2 - yaml: 2.8.0 - vite@8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0): dependencies: '@oxc-project/runtime': 0.114.0 @@ -10381,43 +10202,10 @@ snapshots: jiti: 2.4.2 yaml: 2.8.0 - vitefu@1.1.2(vite@8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.25.12)(jiti@2.4.2)(yaml@2.8.0)): - optionalDependencies: - vite: 8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.25.12)(jiti@2.4.2)(yaml@2.8.0) - vitefu@1.1.2(vite@8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0)): optionalDependencies: vite: 8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0) - vitest@4.1.0-beta.4(@opentelemetry/api@1.9.0)(@types/node@24.10.13)(@vitest/browser-playwright@4.1.0-beta.4)(vite@8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.25.12)(jiti@2.4.2)(yaml@2.8.0)): - dependencies: - '@vitest/expect': 4.1.0-beta.4 - '@vitest/mocker': 4.1.0-beta.4(vite@8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.25.12)(jiti@2.4.2)(yaml@2.8.0)) - '@vitest/pretty-format': 4.1.0-beta.4 - '@vitest/runner': 4.1.0-beta.4 - '@vitest/snapshot': 4.1.0-beta.4 - '@vitest/spy': 4.1.0-beta.4 - '@vitest/utils': 4.1.0-beta.4 - es-module-lexer: 2.0.0 - expect-type: 1.3.0 - magic-string: 0.30.21 - obug: 2.1.1 - pathe: 2.0.3 - picomatch: 4.0.3 - std-env: 3.10.0 - tinybench: 2.9.0 - tinyexec: 1.0.2 - tinyglobby: 0.2.15 - tinyrainbow: 3.0.3 - vite: 8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.25.12)(jiti@2.4.2)(yaml@2.8.0) - why-is-node-running: 2.3.0 - optionalDependencies: - '@opentelemetry/api': 1.9.0 - '@types/node': 24.10.13 - '@vitest/browser-playwright': 4.1.0-beta.4(playwright@1.58.2)(vite@8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.25.12)(jiti@2.4.2)(yaml@2.8.0))(vitest@4.1.0-beta.4) - transitivePeerDependencies: - - msw - vitest@4.1.0-beta.4(@opentelemetry/api@1.9.0)(@types/node@24.10.13)(@vitest/browser-playwright@4.1.0-beta.4)(vite@8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0)): dependencies: '@vitest/expect': 4.1.0-beta.4 diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 9bc1c0bdcacf..302e485f7463 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -38,6 +38,7 @@ catalog: eslint: ^10.0.0 polka: ^1.0.0-next.28 publint: ^0.3.0 + rolldown: ^1.0.0-rc.6 semver: ^7.5.4 sirv-cli: ^3.0.0 svelte: ^5.53.5 diff --git a/renovate.json b/renovate.json index b490bdda612b..fcf282536e0f 100644 --- a/renovate.json +++ b/renovate.json @@ -10,7 +10,6 @@ }, "ignoreDeps": [ "@types/node", - "esbuild", "rollup", "typescript" ], From 9d429e01dd01f32b10dc326c87247a264578527e Mon Sep 17 00:00:00 2001 From: Ben McCann <322311+benmccann@users.noreply.github.com> Date: Thu, 26 Feb 2026 11:55:29 -0800 Subject: [PATCH 032/545] chore: make use of `import.meta.dirname` (#15434) --- .../test/apps/workers/test/test.js | 8 ++-- .../test/apps/basic/test/test.js | 15 +++--- .../test/apps/edge/test/test.js | 10 ++-- .../enhanced-img/test/markup-plugin.spec.js | 2 +- packages/kit/src/core/adapt/builder.spec.js | 13 ++--- packages/kit/src/core/config/index.spec.js | 14 ++---- packages/kit/test/apps/dev-only/test/test.js | 48 ++++++++++++++----- packages/kit/test/apps/options-2/test/test.js | 4 +- packages/kit/test/apps/writes/test/test.js | 6 ++- packages/kit/test/build-errors/env.spec.js | 12 ++--- .../kit/test/build-errors/prerender.spec.js | 7 ++- .../kit/test/build-errors/server-only.spec.js | 8 ++-- .../test/build-errors/syntax-error.spec.js | 3 +- packages/package/test/index.spec.js | 20 ++++---- 14 files changed, 92 insertions(+), 78 deletions(-) diff --git a/packages/adapter-cloudflare/test/apps/workers/test/test.js b/packages/adapter-cloudflare/test/apps/workers/test/test.js index 40072953a16f..44832c70890f 100644 --- a/packages/adapter-cloudflare/test/apps/workers/test/test.js +++ b/packages/adapter-cloudflare/test/apps/workers/test/test.js @@ -1,10 +1,7 @@ import fs from 'node:fs'; import path from 'node:path'; -import { fileURLToPath } from 'node:url'; import { expect, test } from '@playwright/test'; -const __dirname = path.dirname(fileURLToPath(import.meta.url)); - test('worker', async ({ page }) => { await page.goto('/'); await expect(page.locator('h1')).toContainText('Sum: 3'); @@ -16,7 +13,10 @@ test('ctx', async ({ request }) => { }); test('read from $app/server works', async ({ request }) => { - const content = fs.readFileSync(path.resolve(__dirname, '../src/routes/read/file.txt'), 'utf-8'); + const content = fs.readFileSync( + path.resolve(import.meta.dirname, '../src/routes/read/file.txt'), + 'utf-8' + ); const response = await request.get('/read'); expect(await response.text()).toBe(content); }); diff --git a/packages/adapter-netlify/test/apps/basic/test/test.js b/packages/adapter-netlify/test/apps/basic/test/test.js index 89d91598c165..b208dd54a8b7 100644 --- a/packages/adapter-netlify/test/apps/basic/test/test.js +++ b/packages/adapter-netlify/test/apps/basic/test/test.js @@ -1,10 +1,7 @@ import fs from 'node:fs'; import path from 'node:path'; -import { fileURLToPath } from 'node:url'; import { expect, test } from '@playwright/test'; -const __dirname = path.dirname(fileURLToPath(import.meta.url)); - test('page renders', async ({ request }) => { const response = await request.get('/'); expect(response.status()).toBe(200); @@ -18,17 +15,23 @@ test('dynamic route works', async ({ request }) => { }); test('read from $app/server works', async ({ request }) => { - const content = fs.readFileSync(path.resolve(__dirname, '../src/routes/read/file.txt'), 'utf-8'); + const content = fs.readFileSync( + path.resolve(import.meta.dirname, '../src/routes/read/file.txt'), + 'utf-8' + ); const response = await request.get('/read'); expect(await response.text()).toBe(content); }); test('_redirects are copied to publish directory', () => { - const redirects = fs.readFileSync(path.resolve(__dirname, '../build/_redirects'), 'utf-8'); + const redirects = fs.readFileSync( + path.resolve(import.meta.dirname, '../build/_redirects'), + 'utf-8' + ); expect(redirects).toContain('/redirect-me /greeting/redirected 301'); }); test('_headers are copied to publish directory', () => { - const headers = fs.readFileSync(path.resolve(__dirname, '../build/_headers'), 'utf-8'); + const headers = fs.readFileSync(path.resolve(import.meta.dirname, '../build/_headers'), 'utf-8'); expect(headers).toContain('X-Custom-Header: test-value'); }); diff --git a/packages/adapter-netlify/test/apps/edge/test/test.js b/packages/adapter-netlify/test/apps/edge/test/test.js index 8053aaa563a2..11818baa35c5 100644 --- a/packages/adapter-netlify/test/apps/edge/test/test.js +++ b/packages/adapter-netlify/test/apps/edge/test/test.js @@ -1,10 +1,7 @@ import fs from 'node:fs'; import path from 'node:path'; -import { fileURLToPath } from 'node:url'; import { expect, test } from '@playwright/test'; -const __dirname = path.dirname(fileURLToPath(import.meta.url)); - test('page renders', async ({ request }) => { const response = await request.get('/'); expect(response.status()).toBe(200); @@ -18,12 +15,15 @@ test('dynamic route works', async ({ request }) => { }); test('read from $app/server works', async ({ request }) => { - const content = fs.readFileSync(path.resolve(__dirname, '../src/routes/read/file.txt'), 'utf-8'); + const content = fs.readFileSync( + path.resolve(import.meta.dirname, '../src/routes/read/file.txt'), + 'utf-8' + ); const response = await request.get('/read'); expect(await response.text()).toBe(content); }); test('_headers are copied to publish directory', () => { - const headers = fs.readFileSync(path.resolve(__dirname, '../build/_headers'), 'utf-8'); + const headers = fs.readFileSync(path.resolve(import.meta.dirname, '../build/_headers'), 'utf-8'); expect(headers).toContain('X-Custom-Header: test-value'); }); diff --git a/packages/enhanced-img/test/markup-plugin.spec.js b/packages/enhanced-img/test/markup-plugin.spec.js index b6dacafe3ec1..33b9288a6c0c 100644 --- a/packages/enhanced-img/test/markup-plugin.spec.js +++ b/packages/enhanced-img/test/markup-plugin.spec.js @@ -3,7 +3,7 @@ import path from 'node:path'; import { expect, it } from 'vitest'; import { image_plugin, parse_object } from '../src/vite-plugin.js'; -const resolve = /** @param {string} file */ (file) => path.resolve(__dirname, file); +const resolve = /** @param {string} file */ (file) => path.resolve(import.meta.dirname, file); it('Image preprocess snapshot test', async () => { const filename = 'Input.svelte'; diff --git a/packages/kit/src/core/adapt/builder.spec.js b/packages/kit/src/core/adapt/builder.spec.js index b69c7b8296bb..304a1ba5987d 100644 --- a/packages/kit/src/core/adapt/builder.spec.js +++ b/packages/kit/src/core/adapt/builder.spec.js @@ -6,11 +6,8 @@ import { create_builder } from './builder.js'; import { posixify } from '../../utils/filesystem.js'; import { list_files } from '../utils.js'; -const __filename = fileURLToPath(import.meta.url); -const __dirname = join(__filename, '..'); - test('copy files', () => { - const cwd = join(__dirname, 'fixtures/basic'); + const cwd = join(import.meta.dirname, 'fixtures/basic'); const outDir = join(cwd, '.svelte-kit'); /** @type {import('@sveltejs/kit').Config} */ @@ -19,7 +16,7 @@ test('copy files', () => { kit: { appDir: '_app', files: { - assets: join(__dirname, 'fixtures/basic/static') + assets: join(import.meta.dirname, 'fixtures/basic/static') }, outDir } @@ -42,7 +39,7 @@ test('copy files', () => { log: {} }); - const dest = join(__dirname, 'output'); + const dest = join(import.meta.dirname, 'output'); rmSync(dest, { recursive: true, force: true }); @@ -74,8 +71,8 @@ test('compress files', async () => { }); test('instrument generates facade with posix paths', () => { - const fixtureDir = join(__dirname, 'fixtures/instrument'); - const dest = join(__dirname, 'output'); + const fixtureDir = join(import.meta.dirname, 'fixtures/instrument'); + const dest = join(import.meta.dirname, 'output'); rmSync(dest, { recursive: true, force: true }); mkdirSync(join(dest, 'server'), { recursive: true }); diff --git a/packages/kit/src/core/config/index.spec.js b/packages/kit/src/core/config/index.spec.js index 549538e20d18..5a32221a0d58 100644 --- a/packages/kit/src/core/config/index.spec.js +++ b/packages/kit/src/core/config/index.spec.js @@ -1,12 +1,8 @@ import { join } from 'node:path'; -import { fileURLToPath } from 'node:url'; import { assert, expect, test } from 'vitest'; import { validate_config, load_config } from './index.js'; import process from 'node:process'; -const __filename = fileURLToPath(import.meta.url); -const __dirname = join(__filename, '..'); - /** * mutates and remove keys from an object when check callback returns true * @param {Record} o any object @@ -362,7 +358,7 @@ validate_paths( ); test('load default config (esm)', async () => { - const cwd = join(__dirname, 'fixtures/default'); + const cwd = join(import.meta.dirname, 'fixtures/default'); const config = await load_config({ cwd }); remove_keys(config, ([, v]) => typeof v === 'function'); @@ -374,7 +370,7 @@ test('load default config (esm)', async () => { }); test('load default config (esm) with .ts extensions', async () => { - const cwd = join(__dirname, 'fixtures/typescript'); + const cwd = join(import.meta.dirname, 'fixtures/typescript'); const config = await load_config({ cwd }); remove_keys(config, ([, v]) => typeof v === 'function'); @@ -386,7 +382,7 @@ test('load default config (esm) with .ts extensions', async () => { }); test('load .js config when both .js and .ts configs are present', async () => { - const cwd = join(__dirname, 'fixtures/multiple'); + const cwd = join(import.meta.dirname, 'fixtures/multiple'); const config = await load_config({ cwd }); remove_keys(config, ([, v]) => typeof v === 'function'); @@ -401,7 +397,7 @@ test('errors on loading config with incorrect default export', async () => { let message = null; try { - const cwd = join(__dirname, 'fixtures', 'export-string'); + const cwd = join(import.meta.dirname, 'fixtures', 'export-string'); await load_config({ cwd }); } catch (/** @type {any} */ e) { message = e.message; @@ -505,7 +501,7 @@ test('errors on invalid forkPreloads values', () => { }); test('uses src prefix for other kit.files options', async () => { - const cwd = join(__dirname, 'fixtures/custom-src'); + const cwd = join(import.meta.dirname, 'fixtures/custom-src'); const config = await load_config({ cwd }); remove_keys(config, ([, v]) => typeof v === 'function'); diff --git a/packages/kit/test/apps/dev-only/test/test.js b/packages/kit/test/apps/dev-only/test/test.js index 1b9099a923f1..6e2a96dd8782 100644 --- a/packages/kit/test/apps/dev-only/test/test.js +++ b/packages/kit/test/apps/dev-only/test/test.js @@ -3,9 +3,6 @@ import { test } from '../../../utils.js'; import fs from 'node:fs'; import path from 'node:path'; import process from 'node:process'; -import { fileURLToPath } from 'node:url'; - -const __dirname = path.dirname(fileURLToPath(import.meta.url)); /** @typedef {import('@playwright/test').Response} Response */ @@ -86,7 +83,10 @@ test.describe('Vite', () => { await page.goto('/'); await page.getByText('hello world!').waitFor(); - const manifest_path = path.join(__dirname, '../node_modules/.vite/deps/_metadata.json'); + const manifest_path = path.join( + import.meta.dirname, + '../node_modules/.vite/deps/_metadata.json' + ); const manifest = JSON.parse(fs.readFileSync(manifest_path, 'utf-8')); expect(manifest).toHaveProperty('optimized.e2e-test-dep-page-svelte'); @@ -96,7 +96,10 @@ test.describe('Vite', () => { await page.goto('/'); await page.getByText('hello world!').waitFor(); - const manifest_path = path.join(__dirname, '../node_modules/.vite/deps/_metadata.json'); + const manifest_path = path.join( + import.meta.dirname, + '../node_modules/.vite/deps/_metadata.json' + ); const manifest = JSON.parse(fs.readFileSync(manifest_path, 'utf-8')); expect(manifest).toHaveProperty('optimized.e2e-test-dep-page-universal'); @@ -106,7 +109,10 @@ test.describe('Vite', () => { await page.goto('/'); await page.getByText('hello world!').waitFor(); - const manifest_path = path.join(__dirname, '../node_modules/.vite/deps/_metadata.json'); + const manifest_path = path.join( + import.meta.dirname, + '../node_modules/.vite/deps/_metadata.json' + ); const manifest = JSON.parse(fs.readFileSync(manifest_path, 'utf-8')); expect(manifest).not.toHaveProperty('optimized.e2e-test-dep-page-server'); @@ -116,7 +122,10 @@ test.describe('Vite', () => { await page.goto('/'); await page.getByText('hello world!').waitFor(); - const manifest_path = path.join(__dirname, '../node_modules/.vite/deps/_metadata.json'); + const manifest_path = path.join( + import.meta.dirname, + '../node_modules/.vite/deps/_metadata.json' + ); const manifest = JSON.parse(fs.readFileSync(manifest_path, 'utf-8')); expect(manifest).toHaveProperty('optimized.e2e-test-dep-layout-svelte'); @@ -126,7 +135,10 @@ test.describe('Vite', () => { await page.goto('/'); await page.getByText('hello world!').waitFor(); - const manifest_path = path.join(__dirname, '../node_modules/.vite/deps/_metadata.json'); + const manifest_path = path.join( + import.meta.dirname, + '../node_modules/.vite/deps/_metadata.json' + ); const manifest = JSON.parse(fs.readFileSync(manifest_path, 'utf-8')); expect(manifest).toHaveProperty('optimized.e2e-test-dep-layout-universal'); @@ -136,7 +148,10 @@ test.describe('Vite', () => { await page.goto('/'); await page.getByText('hello world!').waitFor(); - const manifest_path = path.join(__dirname, '../node_modules/.vite/deps/_metadata.json'); + const manifest_path = path.join( + import.meta.dirname, + '../node_modules/.vite/deps/_metadata.json' + ); const manifest = JSON.parse(fs.readFileSync(manifest_path, 'utf-8')); expect(manifest).not.toHaveProperty('optimized.e2e-test-dep-layout-server'); @@ -146,7 +161,10 @@ test.describe('Vite', () => { await page.goto('/'); await page.getByText('hello world!').waitFor(); - const manifest_path = path.join(__dirname, '../node_modules/.vite/deps/_metadata.json'); + const manifest_path = path.join( + import.meta.dirname, + '../node_modules/.vite/deps/_metadata.json' + ); const manifest = JSON.parse(fs.readFileSync(manifest_path, 'utf-8')); expect(manifest).toHaveProperty('optimized.e2e-test-dep-error'); @@ -156,7 +174,10 @@ test.describe('Vite', () => { await page.goto('/'); await page.getByText('hello world!').waitFor(); - const manifest_path = path.join(__dirname, '../node_modules/.vite/deps/_metadata.json'); + const manifest_path = path.join( + import.meta.dirname, + '../node_modules/.vite/deps/_metadata.json' + ); const manifest = JSON.parse(fs.readFileSync(manifest_path, 'utf-8')); expect(manifest).toHaveProperty('optimized.e2e-test-dep-hooks-client'); @@ -166,7 +187,10 @@ test.describe('Vite', () => { await page.goto('/'); await page.getByText('hello world!').waitFor(); - const manifest_path = path.join(__dirname, '../node_modules/.vite/deps/_metadata.json'); + const manifest_path = path.join( + import.meta.dirname, + '../node_modules/.vite/deps/_metadata.json' + ); const manifest = JSON.parse(fs.readFileSync(manifest_path, 'utf-8')); expect(manifest).toHaveProperty('optimized.e2e-test-dep-hooks'); diff --git a/packages/kit/test/apps/options-2/test/test.js b/packages/kit/test/apps/options-2/test/test.js index f3df40146a8d..8a1d74487ab8 100644 --- a/packages/kit/test/apps/options-2/test/test.js +++ b/packages/kit/test/apps/options-2/test/test.js @@ -1,6 +1,5 @@ import path from 'node:path'; import process from 'node:process'; -import { fileURLToPath } from 'node:url'; import { expect } from '@playwright/test'; import { test } from '../../../utils.js'; @@ -126,11 +125,10 @@ test.describe('trailing slash', () => { test.describe('Service worker', () => { if (process.env.DEV) { test('import proxy /basepath/service-worker.js', async ({ request }) => { - const __dirname = path.dirname(fileURLToPath(import.meta.url)); const response = await request.get('/basepath/service-worker.js'); const content = await response.text(); expect(content).toEqual( - `import '${path.join('/basepath', '/@fs', __dirname, '../src/service-worker.js')}';` + `import '${path.join('/basepath', '/@fs', import.meta.dirname, '../src/service-worker.js')}';` ); }); diff --git a/packages/kit/test/apps/writes/test/test.js b/packages/kit/test/apps/writes/test/test.js index e513c647f37d..83c069633829 100644 --- a/packages/kit/test/apps/writes/test/test.js +++ b/packages/kit/test/apps/writes/test/test.js @@ -18,8 +18,10 @@ test.describe('Filesystem updates', () => { // future test file that has the same name const route = 'zzzz' + Date.now(); const content = 'Hello new route'; - const __dirname = path.dirname(fileURLToPath(import.meta.url)); - const filepath = path.join(__dirname, `../src/routes/new-route/${route}/+page.svelte`); + const filepath = path.join( + import.meta.dirname, + `../src/routes/new-route/${route}/+page.svelte` + ); const dir = path.dirname(filepath); try { diff --git a/packages/kit/test/build-errors/env.spec.js b/packages/kit/test/build-errors/env.spec.js index aa41d4db6545..061d6a3c9a77 100644 --- a/packages/kit/test/build-errors/env.spec.js +++ b/packages/kit/test/build-errors/env.spec.js @@ -13,7 +13,7 @@ test('$env/dynamic/private is not statically importable from the client', { time assert.throws( () => execSync('pnpm build', { - cwd: path.join(process.cwd(), 'apps/private-dynamic-env'), + cwd: path.join(import.meta.dirname, 'apps/private-dynamic-env'), stdio: 'pipe', timeout, env @@ -26,7 +26,7 @@ test('$env/dynamic/private is not dynamically importable from the client', { tim assert.throws( () => execSync('pnpm build', { - cwd: path.join(process.cwd(), 'apps/private-dynamic-env-dynamic-import'), + cwd: path.join(import.meta.dirname, 'apps/private-dynamic-env-dynamic-import'), stdio: 'pipe', timeout, env @@ -39,7 +39,7 @@ test('$env/static/private is not statically importable from the client', { timeo assert.throws( () => execSync('pnpm build', { - cwd: path.join(process.cwd(), 'apps/private-static-env'), + cwd: path.join(import.meta.dirname, 'apps/private-static-env'), stdio: 'pipe', timeout, env @@ -52,7 +52,7 @@ test('$env/static/private is not dynamically importable from the client', { time assert.throws( () => execSync('pnpm build', { - cwd: path.join(process.cwd(), 'apps/private-static-env-dynamic-import'), + cwd: path.join(import.meta.dirname, 'apps/private-static-env-dynamic-import'), stdio: 'pipe', timeout, env @@ -65,7 +65,7 @@ test('$env/dynamic/private is not importable from the service worker', { timeout assert.throws( () => execSync('pnpm build', { - cwd: path.join(process.cwd(), 'apps/service-worker-private-env'), + cwd: path.join(import.meta.dirname, 'apps/service-worker-private-env'), stdio: 'pipe', timeout, env @@ -78,7 +78,7 @@ test('$env/dynamic/public is not importable from the service worker', { timeout assert.throws( () => execSync('pnpm build', { - cwd: path.join(process.cwd(), 'apps/service-worker-dynamic-public-env'), + cwd: path.join(import.meta.dirname, 'apps/service-worker-dynamic-public-env'), stdio: 'pipe', timeout, env diff --git a/packages/kit/test/build-errors/prerender.spec.js b/packages/kit/test/build-errors/prerender.spec.js index 903d2491e858..e788055bac8b 100644 --- a/packages/kit/test/build-errors/prerender.spec.js +++ b/packages/kit/test/build-errors/prerender.spec.js @@ -2,7 +2,6 @@ import { assert, test } from 'vitest'; import { execSync } from 'node:child_process'; import path from 'node:path'; import { EOL } from 'node:os'; -import process from 'node:process'; const timeout = 60_000; @@ -10,7 +9,7 @@ test('prerenderable routes must be prerendered', { timeout }, () => { assert.throws( () => execSync('pnpm build', { - cwd: path.join(process.cwd(), 'apps/prerenderable-not-prerendered'), + cwd: path.join(import.meta.dirname, 'apps/prerenderable-not-prerendered'), stdio: 'pipe', timeout }), @@ -22,7 +21,7 @@ test('entry generators should match their own route', { timeout }, () => { assert.throws( () => execSync('pnpm build', { - cwd: path.join(process.cwd(), 'apps/prerender-entry-generator-mismatch'), + cwd: path.join(import.meta.dirname, 'apps/prerender-entry-generator-mismatch'), stdio: 'pipe', timeout }), @@ -34,7 +33,7 @@ test('an error in a `prerender` function should fail the build', { timeout }, () assert.throws( () => execSync('pnpm build', { - cwd: path.join(process.cwd(), 'apps/prerender-remote-function-error'), + cwd: path.join(import.meta.dirname, 'apps/prerender-remote-function-error'), stdio: 'pipe', timeout }), diff --git a/packages/kit/test/build-errors/server-only.spec.js b/packages/kit/test/build-errors/server-only.spec.js index 67bccd96afd3..1de049a8ff56 100644 --- a/packages/kit/test/build-errors/server-only.spec.js +++ b/packages/kit/test/build-errors/server-only.spec.js @@ -13,7 +13,7 @@ test('$lib/*.server.* is not statically importable from the client', { timeout } assert.throws( () => execSync('pnpm build', { - cwd: path.join(process.cwd(), 'apps/server-only-module'), + cwd: path.join(import.meta.dirname, 'apps/server-only-module'), stdio: 'pipe', timeout, env @@ -26,7 +26,7 @@ test('$lib/*.server.* is not dynamically importable from the client', { timeout assert.throws( () => execSync('pnpm build', { - cwd: path.join(process.cwd(), 'apps/server-only-module-dynamic-import'), + cwd: path.join(import.meta.dirname, 'apps/server-only-module-dynamic-import'), stdio: 'pipe', timeout, env @@ -39,7 +39,7 @@ test('$lib/server/* is not statically importable from the client', { timeout }, assert.throws( () => execSync('pnpm build', { - cwd: path.join(process.cwd(), 'apps/server-only-folder'), + cwd: path.join(import.meta.dirname, 'apps/server-only-folder'), stdio: 'pipe', timeout, env @@ -52,7 +52,7 @@ test('$lib/server/* is not dynamically importable from the client', { timeout }, assert.throws( () => execSync('pnpm build', { - cwd: path.join(process.cwd(), 'apps/server-only-folder-dynamic-import'), + cwd: path.join(import.meta.dirname, 'apps/server-only-folder-dynamic-import'), stdio: 'pipe', timeout, env diff --git a/packages/kit/test/build-errors/syntax-error.spec.js b/packages/kit/test/build-errors/syntax-error.spec.js index 9abc21f59ba2..5d0456b761f6 100644 --- a/packages/kit/test/build-errors/syntax-error.spec.js +++ b/packages/kit/test/build-errors/syntax-error.spec.js @@ -1,14 +1,13 @@ import { assert, test } from 'vitest'; import { execSync } from 'node:child_process'; import path from 'node:path'; -import process from 'node:process'; const timeout = 60_000; test('$lib/*.server.* is not statically importable from the client', { timeout }, () => { try { execSync('pnpm build', { - cwd: path.join(process.cwd(), 'apps/syntax-error'), + cwd: path.join(import.meta.dirname, 'apps/syntax-error'), stdio: 'pipe', timeout }); diff --git a/packages/package/test/index.spec.js b/packages/package/test/index.spec.js index e972d823ed4f..4ed145ca1abf 100644 --- a/packages/package/test/index.spec.js +++ b/packages/package/test/index.spec.js @@ -1,7 +1,6 @@ import fs from 'node:fs'; import process from 'node:process'; import { join, resolve } from 'node:path'; -import { fileURLToPath } from 'node:url'; import prettier from 'prettier'; import { test, expect } from 'vitest'; @@ -12,15 +11,12 @@ import { rimraf, walk } from '../src/filesystem.js'; import { _create_validator } from '../src/validate.js'; import { resolve_aliases } from '../src/utils.js'; -const __filename = fileURLToPath(import.meta.url); -const __dirname = join(__filename, '..'); - /** * @param {string} path * @param {Partial} [options] */ async function test_make_package(path, options) { - const cwd = join(__dirname, 'fixtures', path); + const cwd = join(import.meta.dirname, 'fixtures', path); const ewd = join(cwd, 'expected'); const output = join(cwd, 'dist'); @@ -85,9 +81,9 @@ async function format(file, content) { }); } -for (const dir of fs.readdirSync(join(__dirname, 'errors'))) { +for (const dir of fs.readdirSync(join(import.meta.dirname, 'errors'))) { test(`package error [${dir}]`, async () => { - const cwd = join(__dirname, 'errors', dir); + const cwd = join(import.meta.dirname, 'errors', dir); const output = join(cwd, 'dist'); const config = await load_config({ cwd }); @@ -177,7 +173,7 @@ test('create package with tsconfig specified', async () => { // chokidar doesn't fire events in github actions :shrug: if (!process.env.CI) { test('watches for changes', async () => { - const cwd = join(__dirname, 'watch'); + const cwd = join(import.meta.dirname, 'watch'); const config = await load_config({ cwd }); @@ -197,7 +193,7 @@ if (!process.env.CI) { /** @param {string} file */ function read(file) { - return fs.readFileSync(join(__dirname, 'watch', file), 'utf-8'); + return fs.readFileSync(join(import.meta.dirname, 'watch', file), 'utf-8'); } /** @@ -205,12 +201,12 @@ if (!process.env.CI) { * @param {string} data */ function write(file, data) { - return fs.writeFileSync(join(__dirname, 'watch', file), data); + return fs.writeFileSync(join(import.meta.dirname, 'watch', file), data); } /** @param {string} file */ function remove(file) { - const filepath = join(__dirname, 'watch', file); + const filepath = join(import.meta.dirname, 'watch', file); if (fs.existsSync(filepath)) fs.unlinkSync(filepath); } @@ -346,7 +342,7 @@ test('validates package (all ok 2)', () => { }); test('create package with preserved output', async () => { - const output = join(__dirname, 'fixtures', 'preserve-output', 'dist'); + const output = join(import.meta.dirname, 'fixtures', 'preserve-output', 'dist'); rimraf(output); fs.mkdirSync(join(output, 'assets'), { recursive: true }); fs.writeFileSync(join(output, 'assets', 'theme.css'), ':root { color: red }'); From 4bea2d235c64588b1f17b6d4c204effcd06567c4 Mon Sep 17 00:00:00 2001 From: Ben McCann <322311+benmccann@users.noreply.github.com> Date: Thu, 26 Feb 2026 12:19:18 -0800 Subject: [PATCH 033/545] chore: add esbuild back to onlyBuiltDependencies. it's still pulled in via netlify --- package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/package.json b/package.json index 6d619a53bbed..e8cd58b3efe4 100644 --- a/package.json +++ b/package.json @@ -39,6 +39,7 @@ "pnpm": { "onlyBuiltDependencies": [ "@parcel/watcher", + "esbuild", "protobufjs", "rolldown", "sharp", From 87603d13d009cada171c9b5d5daad5adad4f72de Mon Sep 17 00:00:00 2001 From: Ben McCann <322311+benmccann@users.noreply.github.com> Date: Thu, 26 Feb 2026 15:25:58 -0800 Subject: [PATCH 034/545] breaking: remove the deprecated CSRF option (#15437) Left it in the types so that it shows up in the reference docs for users who are still on SvelteKit 2 --- .changeset/gentle-radios-go.md | 5 ++++ packages/kit/src/core/config/index.spec.js | 5 ++-- packages/kit/src/core/config/options.js | 24 +++++++++++++++---- packages/kit/src/core/sync/write_server.js | 2 +- packages/kit/src/exports/public.d.ts | 2 +- .../kit/test/apps/basics/svelte.config.js | 1 - packages/kit/types/index.d.ts | 2 +- 7 files changed, 31 insertions(+), 10 deletions(-) create mode 100644 .changeset/gentle-radios-go.md diff --git a/.changeset/gentle-radios-go.md b/.changeset/gentle-radios-go.md new file mode 100644 index 000000000000..33d159e8acb5 --- /dev/null +++ b/.changeset/gentle-radios-go.md @@ -0,0 +1,5 @@ +--- +'@sveltejs/kit': major +--- + +breaking: remove the deprecated CSRF `checkOrigin` option in favor of `trustedOrigins` diff --git a/packages/kit/src/core/config/index.spec.js b/packages/kit/src/core/config/index.spec.js index 5a32221a0d58..28d65b5458cd 100644 --- a/packages/kit/src/core/config/index.spec.js +++ b/packages/kit/src/core/config/index.spec.js @@ -64,7 +64,7 @@ const get_defaults = (prefix = '') => ({ reportOnly: directive_defaults }, csrf: { - checkOrigin: true, + checkOrigin: undefined, trustedOrigins: [] }, embedded: false, @@ -96,13 +96,14 @@ const get_defaults = (prefix = '') => ({ }, inlineStyleThreshold: 0, moduleExtensions: ['.js', '.ts'], - output: { bundleStrategy: 'split' }, + output: { bundleStrategy: 'split', preloadStrategy: undefined }, outDir: join(prefix, '.svelte-kit'), router: { type: 'pathname', resolution: 'client' }, serviceWorker: { + options: undefined, register: true }, typescript: {}, diff --git a/packages/kit/src/core/config/options.js b/packages/kit/src/core/config/options.js index 26cb922ff89c..27f302306f79 100644 --- a/packages/kit/src/core/config/options.js +++ b/packages/kit/src/core/config/options.js @@ -109,10 +109,8 @@ const options = object( }), csrf: object({ - checkOrigin: deprecate( - boolean(true), - (keypath) => - `\`${keypath}\` has been deprecated in favour of \`csrf.trustedOrigins\`. It will be removed in a future version` + checkOrigin: removed( + (keypath) => `\`${keypath}\` has been removed in favour of \`csrf.trustedOrigins\`` ), trustedOrigins: string_array([]) }), @@ -159,6 +157,9 @@ const options = object( outDir: string('.svelte-kit'), output: object({ + preloadStrategy: removed( + (keypath) => `\`${keypath}\` has been removed. modulepreload will always be used` + ), bundleStrategy: list(['split', 'single', 'inline']) }), @@ -335,6 +336,21 @@ function deprecate( }; } +/** + * @param {(keypath: string) => string} get_message + * @returns {Validator} + */ +function removed( + get_message = (keypath) => + `The \`${keypath}\` option has been removed. Please see the list of breaking changes for your major release` +) { + return (input, keypath) => { + if (typeof input !== 'undefined') { + throw new Error(get_message(keypath)); + } + }; +} + /** * @param {Record} children * @param {boolean} [allow_unknown] diff --git a/packages/kit/src/core/sync/write_server.js b/packages/kit/src/core/sync/write_server.js index 64ca62d1f0c0..5ef57288b1f6 100644 --- a/packages/kit/src/core/sync/write_server.js +++ b/packages/kit/src/core/sync/write_server.js @@ -39,7 +39,7 @@ export const options = { app_template_contains_nonce: ${template.includes('%sveltekit.nonce%')}, async: ${s(!!config.compilerOptions?.experimental?.async)}, csp: ${s(config.kit.csp)}, - csrf_check_origin: ${s(config.kit.csrf.checkOrigin && !config.kit.csrf.trustedOrigins.includes('*'))}, + csrf_check_origin: ${s(!config.kit.csrf.trustedOrigins.includes('*'))}, csrf_trusted_origins: ${s(config.kit.csrf.trustedOrigins)}, embedded: ${config.kit.embedded}, env_public_prefix: '${config.kit.env.publicPrefix}', diff --git a/packages/kit/src/exports/public.d.ts b/packages/kit/src/exports/public.d.ts index aa290bb669a6..3a71e65bb354 100644 --- a/packages/kit/src/exports/public.d.ts +++ b/packages/kit/src/exports/public.d.ts @@ -421,7 +421,7 @@ export interface KitConfig { * * To allow people to make `POST`, `PUT`, `PATCH`, or `DELETE` requests with a `Content-Type` of `application/x-www-form-urlencoded`, `multipart/form-data`, or `text/plain` to your app from other origins, you will need to disable this option. Be careful! * @default true - * @deprecated Use `trustedOrigins: ['*']` instead + * @deprecated removed in 3.0. Use `trustedOrigins: ['*']` instead */ checkOrigin?: boolean; /** diff --git a/packages/kit/test/apps/basics/svelte.config.js b/packages/kit/test/apps/basics/svelte.config.js index d13136edee93..8630e784a24d 100644 --- a/packages/kit/test/apps/basics/svelte.config.js +++ b/packages/kit/test/apps/basics/svelte.config.js @@ -38,7 +38,6 @@ const config = { }, csrf: { - checkOrigin: true, trustedOrigins: ['https://trusted.example.com', 'https://payment-gateway.test'] }, diff --git a/packages/kit/types/index.d.ts b/packages/kit/types/index.d.ts index 0815489c9c08..ddb3a450efba 100644 --- a/packages/kit/types/index.d.ts +++ b/packages/kit/types/index.d.ts @@ -395,7 +395,7 @@ declare module '@sveltejs/kit' { * * To allow people to make `POST`, `PUT`, `PATCH`, or `DELETE` requests with a `Content-Type` of `application/x-www-form-urlencoded`, `multipart/form-data`, or `text/plain` to your app from other origins, you will need to disable this option. Be careful! * @default true - * @deprecated Use `trustedOrigins: ['*']` instead + * @deprecated removed in 3.0. Use `trustedOrigins: ['*']` instead */ checkOrigin?: boolean; /** From 8823037b4a341013cc40a9bb688ee23bda3dbb04 Mon Sep 17 00:00:00 2001 From: Ben McCann <322311+benmccann@users.noreply.github.com> Date: Fri, 27 Feb 2026 22:27:32 -0800 Subject: [PATCH 035/545] chore: deprecate `Response` helpers (#15448) closes https://github.com/sveltejs/kit/issues/12708 --- .changeset/shiny-feet-crash.md | 5 +++++ packages/kit/src/exports/index.js | 2 ++ packages/kit/types/index.d.ts | 2 ++ 3 files changed, 9 insertions(+) create mode 100644 .changeset/shiny-feet-crash.md diff --git a/.changeset/shiny-feet-crash.md b/.changeset/shiny-feet-crash.md new file mode 100644 index 000000000000..0d1485671007 --- /dev/null +++ b/.changeset/shiny-feet-crash.md @@ -0,0 +1,5 @@ +--- +'@sveltejs/kit': minor +--- + +chore: deprecate `Response` helpers in favor of platform-provided alternatives diff --git a/packages/kit/src/exports/index.js b/packages/kit/src/exports/index.js index 2378d41009c1..ccc37c85a4f8 100644 --- a/packages/kit/src/exports/index.js +++ b/packages/kit/src/exports/index.js @@ -134,6 +134,7 @@ export function isRedirect(e) { * Create a JSON `Response` object from the supplied data. * @param {any} data The value that will be serialized as JSON. * @param {ResponseInit} [init] Options such as `status` and `headers` that will be added to the response. `Content-Type: application/json` and `Content-Length` headers will be added automatically. + * @deprecated use `Response.json` */ export function json(data, init) { // TODO deprecate this in favour of `Response.json` when it's @@ -162,6 +163,7 @@ export function json(data, init) { * Create a `Response` object from the supplied body. * @param {string} body The value that will be used as-is. * @param {ResponseInit} [init] Options such as `status` and `headers` that will be added to the response. A `Content-Length` header will be added automatically. + * @deprecated use `new Response` */ export function text(body, init) { const headers = new Headers(init?.headers); diff --git a/packages/kit/types/index.d.ts b/packages/kit/types/index.d.ts index ddb3a450efba..a8dd1410d08e 100644 --- a/packages/kit/types/index.d.ts +++ b/packages/kit/types/index.d.ts @@ -2700,12 +2700,14 @@ declare module '@sveltejs/kit' { * Create a JSON `Response` object from the supplied data. * @param data The value that will be serialized as JSON. * @param init Options such as `status` and `headers` that will be added to the response. `Content-Type: application/json` and `Content-Length` headers will be added automatically. + * @deprecated use `Response.json` */ export function json(data: any, init?: ResponseInit): Response; /** * Create a `Response` object from the supplied body. * @param body The value that will be used as-is. * @param init Options such as `status` and `headers` that will be added to the response. A `Content-Length` header will be added automatically. + * @deprecated use `new Response` */ export function text(body: string, init?: ResponseInit): Response; /** From 23782eb9de9aa023b33619b4acf455b1a4d4e692 Mon Sep 17 00:00:00 2001 From: Ben McCann <322311+benmccann@users.noreply.github.com> Date: Sun, 1 Mar 2026 09:18:54 -0800 Subject: [PATCH 036/545] chore: faster builds with Vite 8 hook filters (#15439) closes https://github.com/sveltejs/kit/issues/13756 This PR is going to be hard to look at because of all the indentation changes, but basically I moved some `if` statements in our Vite plugin hooks to a `filter` methods to be faster. The changes themselves are pretty straightforward if you ignore the spacing changes. There was only one where it was a little gnarly to convert the `if` to a regex. I put a comment on that regex explaining what it's supposed to do --------- Co-authored-by: Tee Ming --- .changeset/cold-carrots-raise.md | 1 + .changeset/nine-coins-cheer.md | 1 + packages/enhanced-img/package.json | 4 +- packages/kit/src/exports/vite/index.js | 442 ++++++++++++++----------- pnpm-lock.yaml | 15 +- 5 files changed, 261 insertions(+), 202 deletions(-) diff --git a/.changeset/cold-carrots-raise.md b/.changeset/cold-carrots-raise.md index b715e26dbc8e..5b77b8c63f25 100644 --- a/.changeset/cold-carrots-raise.md +++ b/.changeset/cold-carrots-raise.md @@ -1,6 +1,7 @@ --- '@sveltejs/package': major '@sveltejs/kit': major +'@sveltejs/enhanced-img': major --- breaking: require Node 22 or newer diff --git a/.changeset/nine-coins-cheer.md b/.changeset/nine-coins-cheer.md index 8f78036d0edd..efaf5ad2ecdc 100644 --- a/.changeset/nine-coins-cheer.md +++ b/.changeset/nine-coins-cheer.md @@ -1,4 +1,5 @@ --- +'@sveltejs/enhanced-img': major '@sveltejs/kit': major --- diff --git a/packages/enhanced-img/package.json b/packages/enhanced-img/package.json index 9d2ad76e82e3..6419c68bdb14 100644 --- a/packages/enhanced-img/package.json +++ b/packages/enhanced-img/package.json @@ -41,7 +41,7 @@ "magic-string": "^0.30.5", "sharp": "^0.34.1", "svelte-parse-markup": "^0.1.5", - "vite-imagetools": "^9.0.3", + "vite-imagetools": "^10.0.0", "zimmerframe": "^1.1.2" }, "devDependencies": { @@ -57,6 +57,6 @@ "peerDependencies": { "@sveltejs/vite-plugin-svelte": "^6.0.0", "svelte": "^5.0.0", - "vite": "^6.3.0 || >=7.0.0" + "vite": ">=8.0.0" } } diff --git a/packages/kit/src/exports/vite/index.js b/packages/kit/src/exports/vite/index.js index dd742f0b0511..96ccab11bb78 100644 --- a/packages/kit/src/exports/vite/index.js +++ b/packages/kit/src/exports/vite/index.js @@ -3,6 +3,8 @@ import path from 'node:path'; import process from 'node:process'; import { styleText } from 'node:util'; +import { exactRegex, prefixRegex } from 'rolldown/filter'; + import { copy, mkdirp, posixify, read, resolve_entry, rimraf } from '../../utils/filesystem.js'; import { create_static_module, create_dynamic_module } from '../../core/env.js'; import * as sync from '../../core/sync/sync.js'; @@ -29,6 +31,7 @@ import { s } from '../../utils/misc.js'; import { hash } from '../../utils/hash.js'; import { dedent } from '../../core/sync/utils.js'; import { + app_server, env_dynamic_private, env_dynamic_public, env_static_private, @@ -168,6 +171,15 @@ let manifest_data; /** @type {import('types').ServerMetadata | undefined} only set at build time once analysis is finished */ let build_metadata = undefined; +/** + * TODO: SvelteKit 4 - replace with RegExp.escape - available only in Node 24 + * @param {string} str + * @returns + */ +const reg_exp_escape = function (str) { + return str.replace(/[-[\]{}()*+!<=:?.\\/\\^$|#\s,]/g, '\\$&'); +}; + /** * Returns the SvelteKit Vite plugin. Vite executes Rollup hooks as well as some of its own. * Background reading is available at: @@ -423,7 +435,7 @@ async function kit({ svelte_config }) { // If importing from a service-worker, only allow $service-worker & $env/static/public, but none of the other virtual modules. // This check won't catch transitive imports, but it will warn when the import comes from a service-worker directly. // Transitive imports will be caught during the build. - // TODO move this logic to plugin_guard + // TODO move this logic to plugin_guard. add a filter to this resolveId when doing so if (importer) { const parsed_importer = path.parse(importer); @@ -456,45 +468,55 @@ async function kit({ svelte_config }) { return `\0virtual:${id}`; } }, + load: { + filter: { + id: [ + exactRegex(env_static_private), + exactRegex(env_static_public), + exactRegex(env_dynamic_private), + exactRegex(env_dynamic_public), + exactRegex(service_worker), + exactRegex(sveltekit_environment), + exactRegex(sveltekit_server) + ] + }, + handler(id, options) { + switch (id) { + case env_static_private: + return create_static_module('$env/static/private', env.private); + + case env_static_public: + return create_static_module('$env/static/public', env.public); + + case env_dynamic_private: + return create_dynamic_module( + 'private', + vite_config_env.command === 'serve' ? env.private : undefined + ); - load(id, options) { - const browser = !options?.ssr; - - const global = is_build - ? `globalThis.__sveltekit_${version_hash}` - : 'globalThis.__sveltekit_dev'; - - switch (id) { - case env_static_private: - return create_static_module('$env/static/private', env.private); - - case env_static_public: - return create_static_module('$env/static/public', env.public); - - case env_dynamic_private: - return create_dynamic_module( - 'private', - vite_config_env.command === 'serve' ? env.private : undefined - ); + case env_dynamic_public: { + const browser = !options?.ssr; + // populate `$env/dynamic/public` from `window` + if (browser) { + const global = is_build + ? `globalThis.__sveltekit_${version_hash}` + : 'globalThis.__sveltekit_dev'; + return `export const env = ${global}.env;`; + } - case env_dynamic_public: - // populate `$env/dynamic/public` from `window` - if (browser) { - return `export const env = ${global}.env;`; + return create_dynamic_module( + 'public', + vite_config_env.command === 'serve' ? env.public : undefined + ); } - return create_dynamic_module( - 'public', - vite_config_env.command === 'serve' ? env.public : undefined - ); - - case service_worker: - return create_service_worker_module(svelte_config); + case service_worker: + return create_service_worker_module(svelte_config); - case sveltekit_environment: { - const { version } = svelte_config.kit; + case sveltekit_environment: { + const { version } = svelte_config.kit; - return dedent` + return dedent` export const version = ${s(version.name)}; export let building = false; export let prerendering = false; @@ -507,10 +529,10 @@ async function kit({ svelte_config }) { prerendering = true; } `; - } + } - case sveltekit_server: { - return dedent` + case sveltekit_server: { + return dedent` export let read_implementation = null; export let manifest = null; @@ -523,11 +545,13 @@ async function kit({ svelte_config }) { manifest = _; } `; + } } } } }; + const skip_plugin_guard = process.env.TEST === 'true'; /** @type {Map>} */ const import_map = new Map(); const server_only_pattern = /.*\.server\..+/; @@ -544,102 +568,121 @@ async function kit({ svelte_config }) { // are added to the module graph enforce: 'pre', - async resolveId(id, importer, options) { - if (importer && !importer.endsWith('index.html')) { - const resolved = await this.resolve(id, importer, { ...options, skipSelf: true }); - - if (resolved) { - const normalized = normalize_id(resolved.id, normalized_lib, normalized_cwd); - - let importers = import_map.get(normalized); + resolveId: skip_plugin_guard + ? undefined + : { + // TODO: use composable filter API here when supported: + // https://github.com/vitejs/rolldown-vite/issues/605 + // filter: ([ + // exclude(importerId(/index\.html$/)), + // include(importerId(/.+/)) + // ]), + async handler(id, importer, options) { + if (importer && !importer.endsWith('index.html')) { + const resolved = await this.resolve(id, importer, { ...options, skipSelf: true }); + + if (resolved) { + const normalized = normalize_id(resolved.id, normalized_lib, normalized_cwd); + + let importers = import_map.get(normalized); + + if (!importers) { + importers = new Set(); + import_map.set(normalized, importers); + } - if (!importers) { - importers = new Set(); - import_map.set(normalized, importers); + importers.add(normalize_id(importer, normalized_lib, normalized_cwd)); + } + } } + }, - importers.add(normalize_id(importer, normalized_lib, normalized_cwd)); - } - } - }, - - load(id, options) { - if (options?.ssr === true || process.env.TEST === 'true') { - return; - } - - // skip .server.js files outside the cwd or in node_modules, as the filename might not mean 'server-only module' in this context - const is_internal = id.startsWith(normalized_cwd) && !id.startsWith(normalized_node_modules); - - const normalized = normalize_id(id, normalized_lib, normalized_cwd); - - const is_server_only = - normalized === '$env/static/private' || - normalized === '$env/dynamic/private' || - normalized === '$app/server' || - normalized.startsWith('$lib/server/') || - (is_internal && server_only_pattern.test(path.basename(id))); - - if (is_server_only) { - // in dev, this doesn't exist, so we need to create it - manifest_data ??= sync.all(svelte_config, vite_config_env.mode).manifest_data; - - /** @type {Set} */ - const entrypoints = new Set(); - for (const node of manifest_data.nodes) { - if (node.component) entrypoints.add(node.component); - if (node.universal) entrypoints.add(node.universal); - } + load: skip_plugin_guard + ? undefined + : { + filter: { + id: [ + exactRegex(env_static_private), + exactRegex(env_dynamic_private), + exactRegex(app_server), + prefixRegex(`${normalized_lib}/server/`), + // skip .server.js files outside the cwd or in node_modules, as the filename might not mean 'server-only module' in this context + // should be equivalent to: (id.startsWith(normalized_cwd) && !id.startsWith(normalized_node_modules) && server_only_pattern.test(path.basename(id)) + // TODO: address https://github.com/sveltejs/kit/issues/12529 + // if we decide to do it then remove the CWD portion of the regex + // if we decide not to do it then this regex is complicated enough that it should be refactored out and independently tested + new RegExp( + `^(?!${reg_exp_escape(normalized_node_modules)})${reg_exp_escape(normalized_cwd)}${server_only_pattern.source}$` + ) + ] + }, + handler(id, options) { + // TODO: replace with https://vite.dev/guide/api-environment-plugins#per-environment-plugins + if (options?.ssr === true) { + return; + } - if (manifest_data.hooks.client) entrypoints.add(manifest_data.hooks.client); - if (manifest_data.hooks.universal) entrypoints.add(manifest_data.hooks.universal); + // in dev, this doesn't exist, so we need to create it + manifest_data ??= sync.all(svelte_config, vite_config_env.mode).manifest_data; - const normalized = normalize_id(id, normalized_lib, normalized_cwd); - const chain = [normalized]; + /** @type {Set} */ + const entrypoints = new Set(); + for (const node of manifest_data.nodes) { + if (node.component) entrypoints.add(node.component); + if (node.universal) entrypoints.add(node.universal); + } - let current = normalized; - let includes_remote_file = false; + if (manifest_data.hooks.client) entrypoints.add(manifest_data.hooks.client); + if (manifest_data.hooks.universal) entrypoints.add(manifest_data.hooks.universal); - while (true) { - const importers = import_map.get(current); - if (!importers) break; + const normalized = normalize_id(id, normalized_lib, normalized_cwd); + const chain = [normalized]; - const candidates = Array.from(importers).filter((importer) => !chain.includes(importer)); - if (candidates.length === 0) break; + let current = normalized; + let includes_remote_file = false; - chain.push((current = candidates[0])); + while (true) { + const importers = import_map.get(current); + if (!importers) break; - includes_remote_file ||= svelte_config.kit.moduleExtensions.some((ext) => { - return current.endsWith(`.remote${ext}`); - }); + const candidates = Array.from(importers).filter( + (importer) => !chain.includes(importer) + ); + if (candidates.length === 0) break; + + chain.push((current = candidates[0])); + + includes_remote_file ||= svelte_config.kit.moduleExtensions.some((ext) => { + return current.endsWith(`.remote${ext}`); + }); + + if (entrypoints.has(current)) { + const pyramid = chain + .reverse() + .map((id, i) => { + return `${' '.repeat(i + 1)}${id}`; + }) + .join(' imports\n'); + + if (includes_remote_file) { + error_for_missing_config( + 'remote functions', + 'kit.experimental.remoteFunctions', + 'true' + ); + } - if (entrypoints.has(current)) { - const pyramid = chain - .reverse() - .map((id, i) => { - return `${' '.repeat(i + 1)}${id}`; - }) - .join(' imports\n'); + let message = `Cannot import ${normalized} into code that runs in the browser, as this could leak sensitive information.`; + message += `\n\n${pyramid}`; + message += `\n\nIf you're only using the import as a type, change it to \`import type\`.`; - if (includes_remote_file) { - error_for_missing_config( - 'remote functions', - 'kit.experimental.remoteFunctions', - 'true' - ); + throw stackless(message); + } } - let message = `Cannot import ${normalized} into code that runs in the browser, as this could leak sensitive information.`; - message += `\n\n${pyramid}`; - message += `\n\nIf you're only using the import as a type, change it to \`import type\`.`; - - throw stackless(message); + throw new Error('An impossible situation occurred'); } } - - throw new Error('An impossible situation occurred'); - } - } }; /** @type {import('vite').ViteDevServer} */ @@ -658,16 +701,25 @@ async function kit({ svelte_config }) { const plugin_remote = { name: 'vite-plugin-sveltekit-remote', - resolveId(id) { - if (id.startsWith('\0sveltekit-remote:')) return id; + // prevent other plugins from resolving our remote virtual module + resolveId: { + filter: { + id: prefixRegex('\0sveltekit-remote:') + }, + handler(id) { + return id; + } }, - load(id) { - // On-the-fly generated entry point for remote file just forwards the original module - // We're not using manualChunks because it can cause problems with circular dependencies - // (e.g. https://github.com/sveltejs/kit/issues/14679) and module ordering in general - // (e.g. https://github.com/sveltejs/kit/issues/14590). - if (id.startsWith('\0sveltekit-remote:')) { + load: { + filter: { + id: prefixRegex('\0sveltekit-remote:') + }, + handler(id) { + // On-the-fly generated entry point for remote file just forwards the original module + // We're not using manualChunks because it can cause problems with circular dependencies + // (e.g. https://github.com/sveltejs/kit/issues/14679) and module ordering in general + // (e.g. https://github.com/sveltejs/kit/issues/14590). const hash_id = id.slice('\0sveltekit-remote:'.length); const original = remote_original_by_hash.get(hash_id); if (!original) throw new Error(`Expected to find metadata for remote file ${id}`); @@ -679,31 +731,32 @@ async function kit({ svelte_config }) { dev_server = _dev_server; }, - async transform(code, id, opts) { - const normalized = normalize_id(id, normalized_lib, normalized_cwd); - if (!svelte_config.kit.moduleExtensions.some((ext) => normalized.endsWith(`.remote${ext}`))) { - return; - } - - const file = posixify(path.relative(cwd, id)); - const remote = { - hash: hash(file), - file - }; + transform: { + filter: { + id: new RegExp( + `\\.remote(?:${svelte_config.kit.moduleExtensions.map((e) => e.replaceAll('.', '\\.')).join('|')})(?:\\?.*)?$` + ) + }, + async handler(code, id, opts) { + const file = posixify(path.relative(cwd, id)); + const remote = { + hash: hash(file), + file + }; - remotes.push(remote); + remotes.push(remote); - if (opts?.ssr) { - // we need to add an `await Promise.resolve()` because if the user imports this function - // on the client AND in a load function when loading the client module we will trigger - // an ssrLoadModule during dev. During a link preload, the module can be mistakenly - // loaded and transformed twice and the first time all its exports would be undefined - // triggering a dev server error. By adding a microtask we ensure that the module is fully loaded + if (opts?.ssr) { + // we need to add an `await Promise.resolve()` because if the user imports this function + // on the client AND in a load function when loading the client module we will trigger + // an ssrLoadModule during dev. During a link preload, the module can be mistakenly + // loaded and transformed twice and the first time all its exports would be undefined + // triggering a dev server error. By adding a microtask we ensure that the module is fully loaded - // Extra newlines to prevent syntax errors around missing semicolons or comments - code += - '\n\n' + - dedent` + // Extra newlines to prevent syntax errors around missing semicolons or comments + code += + '\n\n' + + dedent` import * as $$_self_$$ from './${path.basename(id)}'; import { init_remote_functions as $$_init_$$ } from '@sveltejs/kit/internal'; @@ -717,69 +770,70 @@ async function kit({ svelte_config }) { } `; - // Emit a dedicated entry chunk for this remote in SSR builds (prod only) - if (!dev_server) { - remote_original_by_hash.set(remote.hash, id); - if (!emitted_remote_hashes.has(remote.hash)) { - this.emitFile({ - type: 'chunk', - id: `\0sveltekit-remote:${remote.hash}`, - name: `remote-${remote.hash}` - }); - emitted_remote_hashes.add(remote.hash); + // Emit a dedicated entry chunk for this remote in SSR builds (prod only) + if (!dev_server) { + remote_original_by_hash.set(remote.hash, id); + if (!emitted_remote_hashes.has(remote.hash)) { + this.emitFile({ + type: 'chunk', + id: `\0sveltekit-remote:${remote.hash}`, + name: `remote-${remote.hash}` + }); + emitted_remote_hashes.add(remote.hash); + } } - } - return code; - } + return code; + } - // For the client, read the exports and create a new module that only contains fetch functions with the correct metadata + // For the client, read the exports and create a new module that only contains fetch functions with the correct metadata - /** @type {Map} */ - const map = new Map(); + /** @type {Map} */ + const map = new Map(); - // in dev, load the server module here (which will result in this hook - // being called again with `opts.ssr === true` if the module isn't - // already loaded) so we can determine what it exports - if (dev_server) { - const module = await dev_server.ssrLoadModule(id); + // in dev, load the server module here (which will result in this hook + // being called again with `opts.ssr === true` if the module isn't + // already loaded) so we can determine what it exports + if (dev_server) { + const module = await dev_server.ssrLoadModule(id); - for (const [name, value] of Object.entries(module)) { - const type = value?.__?.type; - if (type) { - map.set(name, type); + for (const [name, value] of Object.entries(module)) { + const type = value?.__?.type; + if (type) { + map.set(name, type); + } } } - } - // in prod, we already built and analysed the server code before - // building the client code, so `remote_exports` is populated - else if (build_metadata?.remotes) { - const exports = build_metadata?.remotes.get(remote.hash); - if (!exports) throw new Error('Expected to find metadata for remote file ' + id); + // in prod, we already built and analysed the server code before + // building the client code, so `remote_exports` is populated + else if (build_metadata?.remotes) { + const exports = build_metadata?.remotes.get(remote.hash); + if (!exports) throw new Error('Expected to find metadata for remote file ' + id); - for (const [name, value] of exports) { - map.set(name, value.type); + for (const [name, value] of exports) { + map.set(name, value.type); + } } - } - let namespace = '__remote'; - let uid = 1; - while (map.has(namespace)) namespace = `__remote${uid++}`; + let namespace = '__remote'; + let uid = 1; + while (map.has(namespace)) namespace = `__remote${uid++}`; - const exports = Array.from(map).map(([name, type]) => { - return `export const ${name} = ${namespace}.${type}('${remote.hash}/${name}');`; - }); + const exports = Array.from(map).map(([name, type]) => { + return `export const ${name} = ${namespace}.${type}('${remote.hash}/${name}');`; + }); - let result = `import * as ${namespace} from '__sveltekit/remote';\n\n${exports.join('\n')}\n`; + let result = `import * as ${namespace} from '__sveltekit/remote';\n\n${exports.join('\n')}\n`; - if (dev_server) { - result += `\nimport.meta.hot?.accept();\n`; - } + if (dev_server) { + result += `\nimport.meta.hot?.accept();\n`; + } - return { - code: result - }; + return { + code: result + }; + } } }; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 41161822657c..b052ffafb205 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -493,8 +493,8 @@ importers: specifier: ^0.1.5 version: 0.1.5(svelte@5.53.5) vite-imagetools: - specifier: ^9.0.3 - version: 9.0.3(rollup@4.59.0) + specifier: ^10.0.0 + version: 10.0.0(rollup@4.59.0)(vite@8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0)) zimmerframe: specifier: ^1.1.2 version: 1.1.2 @@ -5672,9 +5672,11 @@ packages: resolution: {integrity: sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - vite-imagetools@9.0.3: - resolution: {integrity: sha512-FwjApRNZyN+RucPW9Z9kf0dyzyi3r3zlDfrTnzHXNaYpmT3pZ5w//d6QkApy1iypbDm+3fq+Gwfv+PYA4j4uYw==} - engines: {node: '>=20.0.0'} + vite-imagetools@10.0.0: + resolution: {integrity: sha512-+83L32YPU/2BOHWhudO2+9T5HBvb3+0qHoUNN7fb0+XcAoXilx7aE25cDPWU5kBi5Yc750zYCvHxgfyR+tAuMA==} + engines: {node: '>=22.0.0'} + peerDependencies: + vite: '>=7.0.0' vite@8.0.0-beta.15: resolution: {integrity: sha512-RHX7IvsJlEfjyA1rS7MY0UsmF91etdLAamslHR5lfuO3W/BXRdXm2tRE64ztpSPZbKqB4wAAZ0AwtF6QzfKZLA==} @@ -10180,11 +10182,12 @@ snapshots: validate-npm-package-name@5.0.1: {} - vite-imagetools@9.0.3(rollup@4.59.0): + vite-imagetools@10.0.0(rollup@4.59.0)(vite@8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0)): dependencies: '@rollup/pluginutils': 5.1.3(rollup@4.59.0) imagetools-core: 9.1.0 sharp: 0.34.5 + vite: 8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0) transitivePeerDependencies: - rollup From 58c453e80c5f713e62cd6a0e2028e171bf327c4e Mon Sep 17 00:00:00 2001 From: Tee Ming Date: Thu, 5 Mar 2026 06:09:53 +0800 Subject: [PATCH 037/545] chore: catalog typescript dev dependencies --- .../test/apps/basic/package.json | 2 +- packages/kit/test/apps/amp/package.json | 2 +- packages/kit/test/apps/async/package.json | 2 +- packages/kit/test/apps/basics/package.json | 2 +- packages/kit/test/apps/dev-only/package.json | 2 +- packages/kit/test/apps/embed/package.json | 2 +- .../test/apps/hash-based-routing/package.json | 2 +- packages/kit/test/apps/no-ssr/package.json | 2 +- packages/kit/test/apps/options-2/package.json | 2 +- packages/kit/test/apps/options-3/package.json | 2 +- packages/kit/test/apps/options/package.json | 2 +- .../prerendered-app-error-pages/package.json | 2 +- packages/kit/test/apps/writes/package.json | 2 +- .../package.json | 2 +- .../package.json | 2 +- .../package.json | 2 +- .../package.json | 2 +- .../package.json | 2 +- .../apps/private-dynamic-env/package.json | 2 +- .../package.json | 2 +- .../apps/private-static-env/package.json | 2 +- .../package.json | 2 +- .../apps/server-only-folder/package.json | 2 +- .../package.json | 2 +- .../apps/server-only-module/package.json | 2 +- .../package.json | 2 +- .../service-worker-private-env/package.json | 2 +- .../apps/syntax-error/package.json | 2 +- .../kit/test/prerendering/basics/package.json | 2 +- .../test/prerendering/options/package.json | 2 +- .../test/prerendering/paths-base/package.json | 2 +- playgrounds/basic/package.json | 2 +- pnpm-lock.yaml | 64 +++++++++---------- 33 files changed, 64 insertions(+), 64 deletions(-) diff --git a/packages/adapter-vercel/test/apps/basic/package.json b/packages/adapter-vercel/test/apps/basic/package.json index 974f76c2c2d7..821ffb4d56c1 100644 --- a/packages/adapter-vercel/test/apps/basic/package.json +++ b/packages/adapter-vercel/test/apps/basic/package.json @@ -12,7 +12,7 @@ "@sveltejs/kit": "workspace:*", "@sveltejs/vite-plugin-svelte": "catalog:", "svelte": "catalog:", - "typescript": "^5.3.3", + "typescript": "catalog:", "vite": "catalog:" }, "type": "module" diff --git a/packages/kit/test/apps/amp/package.json b/packages/kit/test/apps/amp/package.json index 105b2ed55ad8..69c12ca9ffc6 100644 --- a/packages/kit/test/apps/amp/package.json +++ b/packages/kit/test/apps/amp/package.json @@ -19,7 +19,7 @@ "dropcss": "catalog:", "svelte": "catalog:", "svelte-check": "catalog:", - "typescript": "^5.5.4", + "typescript": "catalog:", "vite": "catalog:" }, "type": "module" diff --git a/packages/kit/test/apps/async/package.json b/packages/kit/test/apps/async/package.json index 7afccae4847a..0a2094fca12e 100644 --- a/packages/kit/test/apps/async/package.json +++ b/packages/kit/test/apps/async/package.json @@ -18,7 +18,7 @@ "@sveltejs/vite-plugin-svelte": "catalog:", "svelte": "catalog:", "svelte-check": "catalog:", - "typescript": "^5.5.4", + "typescript": "catalog:", "valibot": "catalog:", "vite": "catalog:" } diff --git a/packages/kit/test/apps/basics/package.json b/packages/kit/test/apps/basics/package.json index 2225ff965100..d451306d741b 100644 --- a/packages/kit/test/apps/basics/package.json +++ b/packages/kit/test/apps/basics/package.json @@ -29,7 +29,7 @@ "svelte": "catalog:", "svelte-check": "catalog:", "test-redirect-importer": "workspace:*", - "typescript": "^5.5.4", + "typescript": "catalog:", "valibot": "catalog:", "vite": "catalog:", "vitest": "catalog:" diff --git a/packages/kit/test/apps/dev-only/package.json b/packages/kit/test/apps/dev-only/package.json index 92a6d820c5d9..8c5a91632c3d 100644 --- a/packages/kit/test/apps/dev-only/package.json +++ b/packages/kit/test/apps/dev-only/package.json @@ -25,7 +25,7 @@ "e2e-test-dep-server": "file:./_test_dependencies/cjs-only", "svelte": "catalog:", "svelte-check": "catalog:", - "typescript": "^5.5.4", + "typescript": "catalog:", "vite": "catalog:" }, "type": "module" diff --git a/packages/kit/test/apps/embed/package.json b/packages/kit/test/apps/embed/package.json index ca28362aa0af..2a0e722ffc06 100644 --- a/packages/kit/test/apps/embed/package.json +++ b/packages/kit/test/apps/embed/package.json @@ -17,7 +17,7 @@ "@sveltejs/vite-plugin-svelte": "catalog:", "svelte": "catalog:", "svelte-check": "catalog:", - "typescript": "^5.5.4", + "typescript": "catalog:", "vite": "catalog:" }, "type": "module" diff --git a/packages/kit/test/apps/hash-based-routing/package.json b/packages/kit/test/apps/hash-based-routing/package.json index a96d21fe7f8f..9384331118be 100644 --- a/packages/kit/test/apps/hash-based-routing/package.json +++ b/packages/kit/test/apps/hash-based-routing/package.json @@ -17,7 +17,7 @@ "@sveltejs/vite-plugin-svelte": "catalog:", "svelte": "catalog:", "svelte-check": "catalog:", - "typescript": "^5.5.4", + "typescript": "catalog:", "vite": "catalog:" }, "type": "module" diff --git a/packages/kit/test/apps/no-ssr/package.json b/packages/kit/test/apps/no-ssr/package.json index 315382d0d8b3..e4436793a993 100644 --- a/packages/kit/test/apps/no-ssr/package.json +++ b/packages/kit/test/apps/no-ssr/package.json @@ -17,7 +17,7 @@ "@sveltejs/vite-plugin-svelte": "catalog:", "svelte": "catalog:", "svelte-check": "catalog:", - "typescript": "^5.5.4", + "typescript": "catalog:", "vite": "catalog:" }, "type": "module" diff --git a/packages/kit/test/apps/options-2/package.json b/packages/kit/test/apps/options-2/package.json index bb41653fb9f9..f486ca1fb1db 100644 --- a/packages/kit/test/apps/options-2/package.json +++ b/packages/kit/test/apps/options-2/package.json @@ -18,7 +18,7 @@ "@sveltejs/vite-plugin-svelte": "catalog:", "svelte": "catalog:", "svelte-check": "catalog:", - "typescript": "^5.5.4", + "typescript": "catalog:", "valibot": "catalog:", "vite": "catalog:" }, diff --git a/packages/kit/test/apps/options-3/package.json b/packages/kit/test/apps/options-3/package.json index 44a7c7baa5d8..2ec4dbe2170c 100644 --- a/packages/kit/test/apps/options-3/package.json +++ b/packages/kit/test/apps/options-3/package.json @@ -16,7 +16,7 @@ "@sveltejs/vite-plugin-svelte": "catalog:", "svelte": "catalog:", "svelte-check": "catalog:", - "typescript": "^5.5.4", + "typescript": "catalog:", "vite": "catalog:" }, "type": "module" diff --git a/packages/kit/test/apps/options/package.json b/packages/kit/test/apps/options/package.json index 04ce65e2a148..33b0484cf1fa 100644 --- a/packages/kit/test/apps/options/package.json +++ b/packages/kit/test/apps/options/package.json @@ -20,7 +20,7 @@ "@sveltejs/vite-plugin-svelte": "catalog:", "svelte": "catalog:", "svelte-check": "catalog:", - "typescript": "^5.5.4", + "typescript": "catalog:", "vite": "catalog:" }, "type": "module" diff --git a/packages/kit/test/apps/prerendered-app-error-pages/package.json b/packages/kit/test/apps/prerendered-app-error-pages/package.json index 7f8511aefe07..32a0dd5fc089 100644 --- a/packages/kit/test/apps/prerendered-app-error-pages/package.json +++ b/packages/kit/test/apps/prerendered-app-error-pages/package.json @@ -19,7 +19,7 @@ "@sveltejs/vite-plugin-svelte": "catalog:", "svelte": "catalog:", "svelte-check": "catalog:", - "typescript": "^5.5.4", + "typescript": "catalog:", "vite": "catalog:" } } diff --git a/packages/kit/test/apps/writes/package.json b/packages/kit/test/apps/writes/package.json index 69656c154aef..f4a932aa834d 100644 --- a/packages/kit/test/apps/writes/package.json +++ b/packages/kit/test/apps/writes/package.json @@ -17,7 +17,7 @@ "@sveltejs/vite-plugin-svelte": "catalog:", "svelte": "catalog:", "svelte-check": "catalog:", - "typescript": "^5.5.4", + "typescript": "catalog:", "vite": "catalog:" }, "type": "module" diff --git a/packages/kit/test/build-errors/apps/prerender-entry-generator-mismatch/package.json b/packages/kit/test/build-errors/apps/prerender-entry-generator-mismatch/package.json index e296847ef3e5..2d6008752294 100644 --- a/packages/kit/test/build-errors/apps/prerender-entry-generator-mismatch/package.json +++ b/packages/kit/test/build-errors/apps/prerender-entry-generator-mismatch/package.json @@ -15,7 +15,7 @@ "@sveltejs/vite-plugin-svelte": "catalog:", "svelte": "catalog:", "svelte-check": "catalog:", - "typescript": "^5.5.4", + "typescript": "catalog:", "vite": "catalog:" }, "type": "module" diff --git a/packages/kit/test/build-errors/apps/prerender-remote-function-error/package.json b/packages/kit/test/build-errors/apps/prerender-remote-function-error/package.json index 2628dec79662..203ae3da2c2c 100644 --- a/packages/kit/test/build-errors/apps/prerender-remote-function-error/package.json +++ b/packages/kit/test/build-errors/apps/prerender-remote-function-error/package.json @@ -15,7 +15,7 @@ "@sveltejs/vite-plugin-svelte": "catalog:", "svelte": "catalog:", "svelte-check": "catalog:", - "typescript": "^5.5.4", + "typescript": "catalog:", "vite": "catalog:" }, "type": "module" diff --git a/packages/kit/test/build-errors/apps/prerenderable-incorrect-fragment/package.json b/packages/kit/test/build-errors/apps/prerenderable-incorrect-fragment/package.json index e296847ef3e5..2d6008752294 100644 --- a/packages/kit/test/build-errors/apps/prerenderable-incorrect-fragment/package.json +++ b/packages/kit/test/build-errors/apps/prerenderable-incorrect-fragment/package.json @@ -15,7 +15,7 @@ "@sveltejs/vite-plugin-svelte": "catalog:", "svelte": "catalog:", "svelte-check": "catalog:", - "typescript": "^5.5.4", + "typescript": "catalog:", "vite": "catalog:" }, "type": "module" diff --git a/packages/kit/test/build-errors/apps/prerenderable-not-prerendered/package.json b/packages/kit/test/build-errors/apps/prerenderable-not-prerendered/package.json index 680769944384..910a1384ae52 100644 --- a/packages/kit/test/build-errors/apps/prerenderable-not-prerendered/package.json +++ b/packages/kit/test/build-errors/apps/prerenderable-not-prerendered/package.json @@ -15,7 +15,7 @@ "@sveltejs/vite-plugin-svelte": "catalog:", "svelte": "catalog:", "svelte-check": "catalog:", - "typescript": "^5.5.4", + "typescript": "catalog:", "vite": "catalog:" }, "type": "module" diff --git a/packages/kit/test/build-errors/apps/private-dynamic-env-dynamic-import/package.json b/packages/kit/test/build-errors/apps/private-dynamic-env-dynamic-import/package.json index c632d6b093d3..f702ab6ef15e 100644 --- a/packages/kit/test/build-errors/apps/private-dynamic-env-dynamic-import/package.json +++ b/packages/kit/test/build-errors/apps/private-dynamic-env-dynamic-import/package.json @@ -15,7 +15,7 @@ "@sveltejs/vite-plugin-svelte": "catalog:", "svelte": "catalog:", "svelte-check": "catalog:", - "typescript": "^5.5.4", + "typescript": "catalog:", "vite": "catalog:" }, "type": "module" diff --git a/packages/kit/test/build-errors/apps/private-dynamic-env/package.json b/packages/kit/test/build-errors/apps/private-dynamic-env/package.json index f4d3402beb89..b1a4d2d81566 100644 --- a/packages/kit/test/build-errors/apps/private-dynamic-env/package.json +++ b/packages/kit/test/build-errors/apps/private-dynamic-env/package.json @@ -15,7 +15,7 @@ "@sveltejs/vite-plugin-svelte": "catalog:", "svelte": "catalog:", "svelte-check": "catalog:", - "typescript": "^5.5.4", + "typescript": "catalog:", "vite": "catalog:" }, "type": "module" diff --git a/packages/kit/test/build-errors/apps/private-static-env-dynamic-import/package.json b/packages/kit/test/build-errors/apps/private-static-env-dynamic-import/package.json index 328098a1b6e0..df5aa6240d04 100644 --- a/packages/kit/test/build-errors/apps/private-static-env-dynamic-import/package.json +++ b/packages/kit/test/build-errors/apps/private-static-env-dynamic-import/package.json @@ -15,7 +15,7 @@ "@sveltejs/vite-plugin-svelte": "catalog:", "svelte": "catalog:", "svelte-check": "catalog:", - "typescript": "^5.5.4", + "typescript": "catalog:", "vite": "catalog:" }, "type": "module" diff --git a/packages/kit/test/build-errors/apps/private-static-env/package.json b/packages/kit/test/build-errors/apps/private-static-env/package.json index 4ad0b870dbc0..6f570213db2a 100644 --- a/packages/kit/test/build-errors/apps/private-static-env/package.json +++ b/packages/kit/test/build-errors/apps/private-static-env/package.json @@ -15,7 +15,7 @@ "@sveltejs/vite-plugin-svelte": "catalog:", "svelte": "catalog:", "svelte-check": "catalog:", - "typescript": "^5.5.4", + "typescript": "catalog:", "vite": "catalog:" }, "type": "module" diff --git a/packages/kit/test/build-errors/apps/server-only-folder-dynamic-import/package.json b/packages/kit/test/build-errors/apps/server-only-folder-dynamic-import/package.json index 5baa5a4a983d..9873dad7fe5e 100644 --- a/packages/kit/test/build-errors/apps/server-only-folder-dynamic-import/package.json +++ b/packages/kit/test/build-errors/apps/server-only-folder-dynamic-import/package.json @@ -15,7 +15,7 @@ "@sveltejs/vite-plugin-svelte": "catalog:", "svelte": "catalog:", "svelte-check": "catalog:", - "typescript": "^5.5.4", + "typescript": "catalog:", "vite": "catalog:" }, "type": "module" diff --git a/packages/kit/test/build-errors/apps/server-only-folder/package.json b/packages/kit/test/build-errors/apps/server-only-folder/package.json index 0ee204db1366..d5a1f2fd3c97 100644 --- a/packages/kit/test/build-errors/apps/server-only-folder/package.json +++ b/packages/kit/test/build-errors/apps/server-only-folder/package.json @@ -15,7 +15,7 @@ "@sveltejs/vite-plugin-svelte": "catalog:", "svelte": "catalog:", "svelte-check": "catalog:", - "typescript": "^5.5.4", + "typescript": "catalog:", "vite": "catalog:" }, "type": "module" diff --git a/packages/kit/test/build-errors/apps/server-only-module-dynamic-import/package.json b/packages/kit/test/build-errors/apps/server-only-module-dynamic-import/package.json index f8ec05958665..7dd73677753e 100644 --- a/packages/kit/test/build-errors/apps/server-only-module-dynamic-import/package.json +++ b/packages/kit/test/build-errors/apps/server-only-module-dynamic-import/package.json @@ -15,7 +15,7 @@ "@sveltejs/vite-plugin-svelte": "catalog:", "svelte": "catalog:", "svelte-check": "catalog:", - "typescript": "^5.5.4", + "typescript": "catalog:", "vite": "catalog:" }, "type": "module" diff --git a/packages/kit/test/build-errors/apps/server-only-module/package.json b/packages/kit/test/build-errors/apps/server-only-module/package.json index a064e2ab00bb..ac29787fce27 100644 --- a/packages/kit/test/build-errors/apps/server-only-module/package.json +++ b/packages/kit/test/build-errors/apps/server-only-module/package.json @@ -15,7 +15,7 @@ "@sveltejs/vite-plugin-svelte": "catalog:", "svelte": "catalog:", "svelte-check": "catalog:", - "typescript": "^5.5.4", + "typescript": "catalog:", "vite": "catalog:" }, "type": "module" diff --git a/packages/kit/test/build-errors/apps/service-worker-dynamic-public-env/package.json b/packages/kit/test/build-errors/apps/service-worker-dynamic-public-env/package.json index 87ef62005b4f..08a2e94abd8d 100644 --- a/packages/kit/test/build-errors/apps/service-worker-dynamic-public-env/package.json +++ b/packages/kit/test/build-errors/apps/service-worker-dynamic-public-env/package.json @@ -15,7 +15,7 @@ "@sveltejs/vite-plugin-svelte": "catalog:", "svelte": "catalog:", "svelte-check": "catalog:", - "typescript": "^5.5.4", + "typescript": "catalog:", "vite": "catalog:" }, "type": "module" diff --git a/packages/kit/test/build-errors/apps/service-worker-private-env/package.json b/packages/kit/test/build-errors/apps/service-worker-private-env/package.json index ee64fc9cb964..d237a0113d7b 100644 --- a/packages/kit/test/build-errors/apps/service-worker-private-env/package.json +++ b/packages/kit/test/build-errors/apps/service-worker-private-env/package.json @@ -15,7 +15,7 @@ "@sveltejs/vite-plugin-svelte": "catalog:", "svelte": "catalog:", "svelte-check": "catalog:", - "typescript": "^5.5.4", + "typescript": "catalog:", "vite": "catalog:" }, "type": "module" diff --git a/packages/kit/test/build-errors/apps/syntax-error/package.json b/packages/kit/test/build-errors/apps/syntax-error/package.json index d4111a628c8f..04bae44de898 100644 --- a/packages/kit/test/build-errors/apps/syntax-error/package.json +++ b/packages/kit/test/build-errors/apps/syntax-error/package.json @@ -13,7 +13,7 @@ "@sveltejs/vite-plugin-svelte": "catalog:", "svelte": "catalog:", "svelte-check": "catalog:", - "typescript": "^5.5.4", + "typescript": "catalog:", "vite": "catalog:" }, "type": "module" diff --git a/packages/kit/test/prerendering/basics/package.json b/packages/kit/test/prerendering/basics/package.json index 39a5db2dfdba..93d41ba907ae 100644 --- a/packages/kit/test/prerendering/basics/package.json +++ b/packages/kit/test/prerendering/basics/package.json @@ -16,7 +16,7 @@ "@sveltejs/vite-plugin-svelte": "catalog:", "svelte": "catalog:", "svelte-check": "catalog:", - "typescript": "^5.5.4", + "typescript": "catalog:", "vite": "catalog:", "vitest": "catalog:" }, diff --git a/packages/kit/test/prerendering/options/package.json b/packages/kit/test/prerendering/options/package.json index 633673769613..7bfa4cba3fd2 100644 --- a/packages/kit/test/prerendering/options/package.json +++ b/packages/kit/test/prerendering/options/package.json @@ -15,7 +15,7 @@ "@sveltejs/vite-plugin-svelte": "catalog:", "svelte": "catalog:", "svelte-check": "catalog:", - "typescript": "^5.5.4", + "typescript": "catalog:", "vite": "catalog:", "vitest": "catalog:" }, diff --git a/packages/kit/test/prerendering/paths-base/package.json b/packages/kit/test/prerendering/paths-base/package.json index 114c7903284f..f04cdcbc2da1 100644 --- a/packages/kit/test/prerendering/paths-base/package.json +++ b/packages/kit/test/prerendering/paths-base/package.json @@ -15,7 +15,7 @@ "@sveltejs/vite-plugin-svelte": "catalog:", "svelte": "catalog:", "svelte-check": "catalog:", - "typescript": "^5.5.4", + "typescript": "catalog:", "vite": "catalog:", "vitest": "catalog:" }, diff --git a/playgrounds/basic/package.json b/playgrounds/basic/package.json index 1c3f95cb27a3..44d2dc2580d6 100644 --- a/playgrounds/basic/package.json +++ b/playgrounds/basic/package.json @@ -31,7 +31,7 @@ "publint": "catalog:", "svelte": "catalog:", "svelte-check": "catalog:", - "typescript": "^5.5.0", + "typescript": "catalog:", "valibot": "catalog:", "vite": "catalog:" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 55c9535ebed0..6457a939b64f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -472,7 +472,7 @@ importers: specifier: 'catalog:' version: 5.53.5 typescript: - specifier: ^5.3.3 + specifier: 'catalog:' version: 5.9.3 vite: specifier: 'catalog:' @@ -636,7 +636,7 @@ importers: specifier: 'catalog:' version: 4.3.4(picomatch@4.0.3)(svelte@5.53.5)(typescript@5.9.3) typescript: - specifier: ^5.5.4 + specifier: 'catalog:' version: 5.9.3 vite: specifier: 'catalog:' @@ -657,7 +657,7 @@ importers: specifier: 'catalog:' version: 4.3.4(picomatch@4.0.3)(svelte@5.53.5)(typescript@5.9.3) typescript: - specifier: ^5.5.4 + specifier: 'catalog:' version: 5.9.3 valibot: specifier: 'catalog:' @@ -696,7 +696,7 @@ importers: specifier: workspace:* version: link:../../../../test-redirect-importer typescript: - specifier: ^5.5.4 + specifier: 'catalog:' version: 5.9.3 valibot: specifier: 'catalog:' @@ -753,7 +753,7 @@ importers: specifier: 'catalog:' version: 4.3.4(picomatch@4.0.3)(svelte@5.53.5)(typescript@5.9.3) typescript: - specifier: ^5.5.4 + specifier: 'catalog:' version: 5.9.3 vite: specifier: 'catalog:' @@ -774,7 +774,7 @@ importers: specifier: 'catalog:' version: 4.3.4(picomatch@4.0.3)(svelte@5.53.5)(typescript@5.9.3) typescript: - specifier: ^5.5.4 + specifier: 'catalog:' version: 5.9.3 vite: specifier: 'catalog:' @@ -795,7 +795,7 @@ importers: specifier: 'catalog:' version: 4.3.4(picomatch@4.0.3)(svelte@5.53.5)(typescript@5.9.3) typescript: - specifier: ^5.5.4 + specifier: 'catalog:' version: 5.9.3 vite: specifier: 'catalog:' @@ -816,7 +816,7 @@ importers: specifier: 'catalog:' version: 4.3.4(picomatch@4.0.3)(svelte@5.53.5)(typescript@5.9.3) typescript: - specifier: ^5.5.4 + specifier: 'catalog:' version: 5.9.3 vite: specifier: 'catalog:' @@ -840,7 +840,7 @@ importers: specifier: 'catalog:' version: 4.3.4(picomatch@4.0.3)(svelte@5.53.5)(typescript@5.9.3) typescript: - specifier: ^5.5.4 + specifier: 'catalog:' version: 5.9.3 vite: specifier: 'catalog:' @@ -864,7 +864,7 @@ importers: specifier: 'catalog:' version: 4.3.4(picomatch@4.0.3)(svelte@5.53.5)(typescript@5.9.3) typescript: - specifier: ^5.5.4 + specifier: 'catalog:' version: 5.9.3 valibot: specifier: 'catalog:' @@ -891,7 +891,7 @@ importers: specifier: 'catalog:' version: 4.3.4(picomatch@4.0.3)(svelte@5.53.5)(typescript@5.9.3) typescript: - specifier: ^5.5.4 + specifier: 'catalog:' version: 5.9.3 vite: specifier: 'catalog:' @@ -912,7 +912,7 @@ importers: specifier: 'catalog:' version: 4.3.4(picomatch@4.0.3)(svelte@5.53.5)(typescript@5.9.3) typescript: - specifier: ^5.5.4 + specifier: 'catalog:' version: 5.9.3 vite: specifier: 'catalog:' @@ -933,7 +933,7 @@ importers: specifier: 'catalog:' version: 4.3.4(picomatch@4.0.3)(svelte@5.53.5)(typescript@5.9.3) typescript: - specifier: ^5.5.4 + specifier: 'catalog:' version: 5.9.3 vite: specifier: 'catalog:' @@ -963,7 +963,7 @@ importers: specifier: 'catalog:' version: 4.3.4(picomatch@4.0.3)(svelte@5.53.5)(typescript@5.9.3) typescript: - specifier: ^5.5.4 + specifier: 'catalog:' version: 5.9.3 vite: specifier: 'catalog:' @@ -987,7 +987,7 @@ importers: specifier: 'catalog:' version: 4.3.4(picomatch@4.0.3)(svelte@5.53.5)(typescript@5.9.3) typescript: - specifier: ^5.5.4 + specifier: 'catalog:' version: 5.9.3 vite: specifier: 'catalog:' @@ -1011,7 +1011,7 @@ importers: specifier: 'catalog:' version: 4.3.4(picomatch@4.0.3)(svelte@5.53.5)(typescript@5.9.3) typescript: - specifier: ^5.5.4 + specifier: 'catalog:' version: 5.9.3 vite: specifier: 'catalog:' @@ -1035,7 +1035,7 @@ importers: specifier: 'catalog:' version: 4.3.4(picomatch@4.0.3)(svelte@5.53.5)(typescript@5.9.3) typescript: - specifier: ^5.5.4 + specifier: 'catalog:' version: 5.9.3 vite: specifier: 'catalog:' @@ -1056,7 +1056,7 @@ importers: specifier: 'catalog:' version: 4.3.4(picomatch@4.0.3)(svelte@5.53.5)(typescript@5.9.3) typescript: - specifier: ^5.5.4 + specifier: 'catalog:' version: 5.9.3 vite: specifier: 'catalog:' @@ -1077,7 +1077,7 @@ importers: specifier: 'catalog:' version: 4.3.4(picomatch@4.0.3)(svelte@5.53.5)(typescript@5.9.3) typescript: - specifier: ^5.5.4 + specifier: 'catalog:' version: 5.9.3 vite: specifier: 'catalog:' @@ -1098,7 +1098,7 @@ importers: specifier: 'catalog:' version: 4.3.4(picomatch@4.0.3)(svelte@5.53.5)(typescript@5.9.3) typescript: - specifier: ^5.5.4 + specifier: 'catalog:' version: 5.9.3 vite: specifier: 'catalog:' @@ -1119,7 +1119,7 @@ importers: specifier: 'catalog:' version: 4.3.4(picomatch@4.0.3)(svelte@5.53.5)(typescript@5.9.3) typescript: - specifier: ^5.5.4 + specifier: 'catalog:' version: 5.9.3 vite: specifier: 'catalog:' @@ -1140,7 +1140,7 @@ importers: specifier: 'catalog:' version: 4.3.4(picomatch@4.0.3)(svelte@5.53.5)(typescript@5.9.3) typescript: - specifier: ^5.5.4 + specifier: 'catalog:' version: 5.9.3 vite: specifier: 'catalog:' @@ -1161,7 +1161,7 @@ importers: specifier: 'catalog:' version: 4.3.4(picomatch@4.0.3)(svelte@5.53.5)(typescript@5.9.3) typescript: - specifier: ^5.5.4 + specifier: 'catalog:' version: 5.9.3 vite: specifier: 'catalog:' @@ -1182,7 +1182,7 @@ importers: specifier: 'catalog:' version: 4.3.4(picomatch@4.0.3)(svelte@5.53.5)(typescript@5.9.3) typescript: - specifier: ^5.5.4 + specifier: 'catalog:' version: 5.9.3 vite: specifier: 'catalog:' @@ -1203,7 +1203,7 @@ importers: specifier: 'catalog:' version: 4.3.4(picomatch@4.0.3)(svelte@5.53.5)(typescript@5.9.3) typescript: - specifier: ^5.5.4 + specifier: 'catalog:' version: 5.9.3 vite: specifier: 'catalog:' @@ -1224,7 +1224,7 @@ importers: specifier: 'catalog:' version: 4.3.4(picomatch@4.0.3)(svelte@5.53.5)(typescript@5.9.3) typescript: - specifier: ^5.5.4 + specifier: 'catalog:' version: 5.9.3 vite: specifier: 'catalog:' @@ -1245,7 +1245,7 @@ importers: specifier: 'catalog:' version: 4.3.4(picomatch@4.0.3)(svelte@5.53.5)(typescript@5.9.3) typescript: - specifier: ^5.5.4 + specifier: 'catalog:' version: 5.9.3 vite: specifier: 'catalog:' @@ -1266,7 +1266,7 @@ importers: specifier: 'catalog:' version: 4.3.4(picomatch@4.0.3)(svelte@5.53.5)(typescript@5.9.3) typescript: - specifier: ^5.5.4 + specifier: 'catalog:' version: 5.9.3 vite: specifier: 'catalog:' @@ -1287,7 +1287,7 @@ importers: specifier: 'catalog:' version: 4.3.4(picomatch@4.0.3)(svelte@5.53.5)(typescript@5.9.3) typescript: - specifier: ^5.5.4 + specifier: 'catalog:' version: 5.9.3 vite: specifier: 'catalog:' @@ -1311,7 +1311,7 @@ importers: specifier: 'catalog:' version: 4.3.4(picomatch@4.0.3)(svelte@5.53.5)(typescript@5.9.3) typescript: - specifier: ^5.5.4 + specifier: 'catalog:' version: 5.9.3 vite: specifier: 'catalog:' @@ -1335,7 +1335,7 @@ importers: specifier: 'catalog:' version: 4.3.4(picomatch@4.0.3)(svelte@5.53.5)(typescript@5.9.3) typescript: - specifier: ^5.5.4 + specifier: 'catalog:' version: 5.9.3 vite: specifier: 'catalog:' @@ -1444,7 +1444,7 @@ importers: specifier: 'catalog:' version: 4.3.4(picomatch@4.0.3)(svelte@5.53.5)(typescript@5.9.3) typescript: - specifier: ^5.5.0 + specifier: 'catalog:' version: 5.9.3 valibot: specifier: 'catalog:' From 1b3810d907fe3e0052887a80a2387338469ee944 Mon Sep 17 00:00:00 2001 From: Tee Ming Date: Fri, 6 Mar 2026 03:26:36 +0800 Subject: [PATCH 038/545] chore: bump peer dep on SvelteKit (#15496) This PR removes some guards and optional chaining that were only necessary to support older Kit versions --- ### Please don't delete this checklist! Before submitting the PR, please make sure you do the following: - [ ] It's really useful if your PR references an issue where it is discussed ahead of time. In many cases, features are absent for a reason. For large changes, please create an RFC: https://github.com/sveltejs/rfcs - [ ] This message body should clearly illustrate what problems it solves. - [ ] Ideally, include a test that fails without this PR but passes with it. ### Tests - [ ] Run the tests with `pnpm test` and lint the project with `pnpm lint` and `pnpm check` ### Changesets - [ ] If your PR makes a change that should be noted in one or more packages' changelogs, generate a changeset by running `pnpm changeset` and following the prompts. Changesets that add features should be `minor` and those that fix bugs should be `patch`. Please prefix changeset messages with `feat:`, `fix:`, or `chore:`. ### Edits - [ ] Please ensure that 'Allow edits from maintainers' is checked. PRs without this option may be closed. --------- Co-authored-by: Ben McCann <322311+benmccann@users.noreply.github.com> --- packages/adapter-vercel/index.js | 57 ++++++---------------------- packages/adapter-vercel/package.json | 2 +- 2 files changed, 13 insertions(+), 46 deletions(-) diff --git a/packages/adapter-vercel/index.js b/packages/adapter-vercel/index.js index 6ba0e2f8945f..a17c6e3d6194 100644 --- a/packages/adapter-vercel/index.js +++ b/packages/adapter-vercel/index.js @@ -7,22 +7,9 @@ import { nodeFileTrace } from '@vercel/nft'; import { build } from 'rolldown'; import { get_pathname, parse_isr_expiration, pattern_to_src, resolve_runtime } from './utils.js'; -/** - * @template T - * @template {keyof T} K - * @typedef {Partial> & Required>} PartialExcept - */ - -/** - * We use a custom `Builder` type here to support the minimum version of SvelteKit. - * @typedef {PartialExcept} Builder2_4_0 - */ - const name = '@sveltejs/adapter-vercel'; const INTERNAL = '![-]'; // this name is guaranteed not to conflict with user routes -const [kit_major, kit_minor] = VERSION.split('.'); - // https://vercel.com/docs/functions/edge-functions/edge-runtime#compatible-node.js-modules const compatible_node_modules = ['async_hooks', 'events', 'buffer', 'assert', 'util']; @@ -61,7 +48,7 @@ const plugin = function (defaults = {}) { return { name, - /** @param {Builder2_4_0} builder */ + /** @param {import('@sveltejs/kit').Builder} builder */ async adapt(builder) { if (!builder.routes) { throw new Error( @@ -113,8 +100,8 @@ const plugin = function (defaults = {}) { MANIFEST: './manifest.js' } }); - if (builder.hasServerInstrumentationFile?.()) { - builder.instrument?.({ + if (builder.hasServerInstrumentationFile()) { + builder.instrument({ entrypoint: `${tmp}/index.js`, instrumentation: `${builder.getServerDirectory()}/instrumentation.server.js` }); @@ -180,7 +167,7 @@ const plugin = function (defaults = {}) { file: `${outdir}/index.js` } }), - builder.hasServerInstrumentationFile?.() && + builder.hasServerInstrumentationFile() && build({ ...build_config, input: `${builder.getServerDirectory()}/instrumentation.server.js`, @@ -191,8 +178,8 @@ const plugin = function (defaults = {}) { }) ]); - if (builder.hasServerInstrumentationFile?.()) { - builder.instrument?.({ + if (builder.hasServerInstrumentationFile()) { + builder.instrument({ entrypoint: `${outdir}/index.js`, instrumentation: `${outdir}/instrumentation.server.js`, module: { @@ -458,8 +445,7 @@ const plugin = function (defaults = {}) { } } - // optional chaining to support older versions that don't have this setting yet - if (builder.config.kit.router?.resolution === 'server') { + if (builder.config.kit.router.resolution === 'server') { // Create a separate edge function just for server-side route resolution. // By omitting all routes we're ensuring it's small (the routes will still be available // to the route resolution, because it does not rely on the server routing manifest) @@ -488,18 +474,7 @@ const plugin = function (defaults = {}) { }, supports: { - read: ({ config, route }) => { - const runtime = config.runtime ?? defaults.runtime; - - // TODO bump peer dep in next adapter major to simplify this - if (runtime === 'edge' && kit_major === '2' && kit_minor < '25') { - throw new Error( - `${name}: Cannot use \`read\` from \`$app/server\` in route \`${route.id}\` configured with \`runtime: 'edge'\` and SvelteKit < 2.25.0` - ); - } - - return true; - }, + read: () => true, instrumentation: () => true } }; @@ -533,7 +508,7 @@ function write(file, data) { // This function is duplicated in adapter-static /** - * @param {Builder2_4_0} builder + * @param {import('@sveltejs/kit').Builder} builder * @param {import('./index.js').Config} config * @param {string} dir */ @@ -671,7 +646,7 @@ function static_vercel_config(builder, config, dir) { } /** - * @param {Builder2_4_0} builder + * @param {import('@sveltejs/kit').Builder} builder * @param {string} entry * @param {string} dir * @param {import('./index.js').ServerlessConfig} config @@ -792,18 +767,10 @@ async function create_function_bundle(builder, entry, dir, config) { } /** - * - * @param {Builder2_4_0} builder - * @param {any} vercel_config + * @param {import('@sveltejs/kit').Builder} builder + * @param {any} vercel_config see https://vercel.com/docs/project-configuration/vercel-json */ function validate_vercel_json(builder, vercel_config) { - if (builder.routes.length > 0 && !builder.routes[0].api) { - // bail — we're on an older SvelteKit version that doesn't - // populate `route.api.methods`, so we can't check - // to see if cron paths are valid - return; - } - const crons = /** @type {Array} */ ( Array.isArray(vercel_config?.crons) ? vercel_config.crons : [] ); diff --git a/packages/adapter-vercel/package.json b/packages/adapter-vercel/package.json index d9a485d44c33..db7b7050cb67 100644 --- a/packages/adapter-vercel/package.json +++ b/packages/adapter-vercel/package.json @@ -54,6 +54,6 @@ "vitest": "catalog:" }, "peerDependencies": { - "@sveltejs/kit": "^2.4.0" + "@sveltejs/kit": "^3.0.0" } } From 587bea1dcde3a13b14dea43a13c4de1ab5d55617 Mon Sep 17 00:00:00 2001 From: Tee Ming Date: Fri, 6 Mar 2026 03:29:26 +0800 Subject: [PATCH 039/545] chore: bump peer dep version for SvelteKit (#15494) Part of https://github.com/sveltejs/kit/issues/1247 Removes some TODOs that we wanted to get done for the next adapter major such as ensuring new Kit features are always available by bumping the peer dep and removing workarounds for ambient types not being available (they are now) --- ### Please don't delete this checklist! Before submitting the PR, please make sure you do the following: - [ ] It's really useful if your PR references an issue where it is discussed ahead of time. In many cases, features are absent for a reason. For large changes, please create an RFC: https://github.com/sveltejs/rfcs - [ ] This message body should clearly illustrate what problems it solves. - [ ] Ideally, include a test that fails without this PR but passes with it. ### Tests - [ ] Run the tests with `pnpm test` and lint the project with `pnpm lint` and `pnpm check` ### Changesets - [ ] If your PR makes a change that should be noted in one or more packages' changelogs, generate a changeset by running `pnpm changeset` and following the prompts. Changesets that add features should be `minor` and those that fix bugs should be `patch`. Please prefix changeset messages with `feat:`, `fix:`, or `chore:`. ### Edits - [ ] Please ensure that 'Allow edits from maintainers' is checked. PRs without this option may be closed. --- packages/adapter-cloudflare/index.js | 19 +++--------- packages/adapter-cloudflare/internal.d.ts | 29 ------------------- packages/adapter-cloudflare/package.json | 2 +- .../test/apps/workers/src/app.d.ts | 3 -- packages/adapter-cloudflare/utils.js | 2 +- 5 files changed, 6 insertions(+), 49 deletions(-) delete mode 100644 packages/adapter-cloudflare/test/apps/workers/src/app.d.ts diff --git a/packages/adapter-cloudflare/index.js b/packages/adapter-cloudflare/index.js index 7d51fd0967ea..d3b2a61f556d 100644 --- a/packages/adapter-cloudflare/index.js +++ b/packages/adapter-cloudflare/index.js @@ -1,4 +1,3 @@ -import { VERSION } from '@sveltejs/kit'; import { copyFileSync, existsSync, readFileSync, writeFileSync } from 'node:fs'; import path from 'node:path'; import process from 'node:process'; @@ -12,13 +11,12 @@ import { } from './utils.js'; const name = '@sveltejs/adapter-cloudflare'; -const [kit_major, kit_minor] = VERSION.split('.'); /** @type {import('./index.js').default} */ export default function (options = {}) { return { name, - /** @param {Builder2_0_0} builder */ + /** @param {import('@sveltejs/kit').Builder} builder */ async adapt(builder) { if ( existsSync('_routes.json') || @@ -126,8 +124,8 @@ export default function (options = {}) { ASSETS: assets_binding } }); - if (builder.hasServerInstrumentationFile?.()) { - builder.instrument?.({ + if (builder.hasServerInstrumentationFile()) { + builder.instrument({ entrypoint: worker_dest, instrumentation: `${builder.getServerDirectory()}/instrumentation.server.js` }); @@ -214,16 +212,7 @@ export default function (options = {}) { }; }, supports: { - read: ({ route }) => { - // TODO bump peer dep in next adapter major to simplify this - if (kit_major === '2' && kit_minor < '25') { - throw new Error( - `${name}: Cannot use \`read\` from \`$app/server\` in route \`${route.id}\` when using SvelteKit < 2.25.0` - ); - } - - return true; - }, + read: () => true, instrumentation: () => true } }; diff --git a/packages/adapter-cloudflare/internal.d.ts b/packages/adapter-cloudflare/internal.d.ts index 848182720e5d..6c79569f7f7f 100644 --- a/packages/adapter-cloudflare/internal.d.ts +++ b/packages/adapter-cloudflare/internal.d.ts @@ -10,32 +10,3 @@ declare module 'MANIFEST' { export const app_path: string; export const base_path: string; } - -type PartialExcept = Partial> & Required>; - -/** - * We use a custom `Builder` type here to ensure compatibility with the minimum version of SvelteKit. - */ -type Builder2_0_0 = PartialExcept< - import('@sveltejs/kit').Builder, - | 'log' - | 'rimraf' - | 'mkdirp' - | 'config' - | 'prerendered' - | 'routes' - | 'createEntries' - | 'generateFallback' - | 'generateEnvModule' - | 'generateManifest' - | 'getBuildDirectory' - | 'getClientDirectory' - | 'getServerDirectory' - | 'getAppPath' - | 'writeClient' - | 'writePrerendered' - | 'writePrerendered' - | 'writeServer' - | 'copy' - | 'compress' ->; diff --git a/packages/adapter-cloudflare/package.json b/packages/adapter-cloudflare/package.json index f7fd0ff8fda8..8b185d760303 100644 --- a/packages/adapter-cloudflare/package.json +++ b/packages/adapter-cloudflare/package.json @@ -57,7 +57,7 @@ "vitest": "catalog:" }, "peerDependencies": { - "@sveltejs/kit": "^2.0.0", + "@sveltejs/kit": "^3.0.0", "wrangler": "^4.67.0" } } diff --git a/packages/adapter-cloudflare/test/apps/workers/src/app.d.ts b/packages/adapter-cloudflare/test/apps/workers/src/app.d.ts deleted file mode 100644 index 101a9db0b8bf..000000000000 --- a/packages/adapter-cloudflare/test/apps/workers/src/app.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -// TODO: remove this in 3.0 once svelte.config.js is included by the generated tsconfig.json -// this ensures we get the ambient types from the adapter -import '../../../../index.js'; diff --git a/packages/adapter-cloudflare/utils.js b/packages/adapter-cloudflare/utils.js index f4b27e98d50f..2b1c7c74b567 100644 --- a/packages/adapter-cloudflare/utils.js +++ b/packages/adapter-cloudflare/utils.js @@ -81,7 +81,7 @@ export function parse_redirects(file_contents) { /** * Generates the [_routes.json](https://developers.cloudflare.com/pages/functions/routing/#create-a-_routesjson-file) * file that dictates which routes invoke the Cloudflare Worker. - * @param {Builder2_0_0} builder + * @param {import('@sveltejs/kit').Builder} builder * @param {string[]} client_assets * @param {string[]} redirects * @param {import('./index.js').AdapterOptions['routes']} routes From 8e11b8f831637404ff020373e182ed8918e60037 Mon Sep 17 00:00:00 2001 From: Tee Ming Date: Fri, 6 Mar 2026 03:46:38 +0800 Subject: [PATCH 040/545] use import.meta.dirname --- packages/adapter-netlify/test/apps/split/test/test.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/adapter-netlify/test/apps/split/test/test.js b/packages/adapter-netlify/test/apps/split/test/test.js index 9ab80a929fb5..4093bf3fb413 100644 --- a/packages/adapter-netlify/test/apps/split/test/test.js +++ b/packages/adapter-netlify/test/apps/split/test/test.js @@ -1,10 +1,7 @@ import fs from 'node:fs'; import path from 'node:path'; -import { fileURLToPath } from 'node:url'; import { expect, test } from '@playwright/test'; -const __dirname = path.dirname(fileURLToPath(import.meta.url)); - test('routes to routes with dynamic params', async ({ page }) => { await page.goto('/dynamic/123'); await expect(page.locator('p')).toHaveText('id: 123'); @@ -27,12 +24,15 @@ test('client-side fetch for query remote function data', async ({ page }) => { }); test('split generates multiple function files', () => { - const functions_dir = path.resolve(__dirname, '../.netlify/v1/functions'); + const functions_dir = path.resolve(import.meta.dirname, '../.netlify/v1/functions'); const files = fs.readdirSync(functions_dir).filter((f) => f.startsWith('sveltekit-')); expect(files.length).toBeGreaterThan(1); }); test('_redirects are copied to publish directory', () => { - const redirects = fs.readFileSync(path.resolve(__dirname, '../build/_redirects'), 'utf-8'); + const redirects = fs.readFileSync( + path.resolve(import.meta.dirname, '../build/_redirects'), + 'utf-8' + ); expect(redirects).toContain('/redirect-me /greeting/redirected 301'); }); From 8af47eb06f9a1a883058de059ccf81aab4e85627 Mon Sep 17 00:00:00 2001 From: Tee Ming Date: Fri, 6 Mar 2026 04:16:43 +0800 Subject: [PATCH 041/545] fix: use Vite `root` config setting instead of current working directory (#15469) closes https://github.com/sveltejs/kit/issues/11356 closes https://github.com/sveltejs/kit/issues/12140 closes https://github.com/sveltejs/kit/pull/15188 This PR standardises the use of `process.cwd()` to prefer the Vite config `root` setting when available [similar to VPS](https://github.com/sveltejs/vite-plugin-svelte/blob/main/packages/vite-plugin-svelte/src/utils/options.js#L354-L356). This helps us resolve paths correctly before reading files or generating tsconfig paths. It eases lots of monorepo tooling usage, particularly Vitest workspaces. This also allows us to use the Vitest IDE extension to run unit tests (which didn't work before because of the aforementioned issues). We _could_ backport these changes to v2 but it's a bit easier to base it on v3 which already makes use of `import.meta.dirname` in many places thanks to https://github.com/sveltejs/kit/pull/15434 I've only made changes to `kit` itself for now, so other packages still default to `process.cwd()` but those are probably less problematic since they won't run for Vitest tests --- ### Please don't delete this checklist! Before submitting the PR, please make sure you do the following: - [x] It's really useful if your PR references an issue where it is discussed ahead of time. In many cases, features are absent for a reason. For large changes, please create an RFC: https://github.com/sveltejs/rfcs - [x] This message body should clearly illustrate what problems it solves. - [ ] Ideally, include a test that fails without this PR but passes with it. ### Tests - [ ] Run the tests with `pnpm test` and lint the project with `pnpm lint` and `pnpm check` ### Changesets - [x] If your PR makes a change that should be noted in one or more packages' changelogs, generate a changeset by running `pnpm changeset` and following the prompts. Changesets that add features should be `minor` and those that fix bugs should be `patch`. Please prefix changeset messages with `feat:`, `fix:`, or `chore:`. ### Edits - [x] Please ensure that 'Allow edits from maintainers' is checked. PRs without this option may be closed. --------- Co-authored-by: Ben McCann <322311+benmccann@users.noreply.github.com> --- .changeset/nasty-impalas-wear.md | 5 + package.json | 3 +- packages/adapter-auto/vitest.config.js | 5 + packages/adapter-cloudflare/tsconfig.json | 1 + packages/adapter-cloudflare/vitest.config.js | 5 + packages/adapter-netlify/vitest.config.js | 5 + packages/adapter-node/tsconfig.json | 1 + packages/adapter-node/vitest.config.js | 5 + packages/adapter-vercel/vitest.config.js | 5 + packages/enhanced-img/tsconfig.json | 2 +- packages/enhanced-img/vitest.config.js | 5 + packages/kit/scripts/generate-version.js | 7 +- packages/kit/src/cli.js | 2 +- packages/kit/src/core/adapt/builder.js | 12 +- packages/kit/src/core/config/index.js | 9 +- packages/kit/src/core/env.js | 7 +- .../generate_manifest/find_server_assets.js | 5 +- .../kit/src/core/generate_manifest/index.js | 14 +- packages/kit/src/core/postbuild/analyse.js | 18 +- packages/kit/src/core/postbuild/fallback.js | 7 +- packages/kit/src/core/postbuild/prerender.js | 10 +- .../core/sync/create_manifest_data/index.js | 11 +- .../sync/create_manifest_data/index.spec.js | 19 +- packages/kit/src/core/sync/sync.js | 43 +- packages/kit/src/core/sync/write_server.js | 6 +- packages/kit/src/core/sync/write_tsconfig.js | 29 +- .../kit/src/core/sync/write_tsconfig.spec.js | 8 +- .../kit/src/core/sync/write_types/index.js | 53 ++- .../src/core/sync/write_types/index.spec.js | 12 +- .../write_types/test/actions/+page.server.js | 2 +- .../test/layout-advanced/(main)/+page.js | 2 +- .../test/layout-advanced/(main)/sub/+page.js | 4 +- .../sync/write_types/test/layout/+layout.js | 2 +- .../write_types/test/layout/+layout.server.js | 2 +- .../sync/write_types/test/layout/+page.js | 4 +- .../+page.js | 2 +- .../param-type-inference/required/+layout.js | 2 +- .../[narrowedParam=narrowed]/+page.js | 2 +- .../[regularParam=not_narrowed]/+page.js | 2 +- .../spread/[...spread=narrowed]/+page.js | 2 +- .../simple-page-server-and-shared/+page.js | 4 +- .../simple-page-server-only/+page.server.js | 4 +- .../sub/+page.server.js | 4 +- .../test/simple-page-shared-only/+page.js | 2 +- .../test/simple-page-shared-only/sub/+page.js | 4 +- .../+layout.js | 2 +- .../nested/+layout.js | 2 +- .../sync/write_types/test/slugs/+layout.js | 2 +- .../write_types/test/slugs/[...rest]/+page.js | 2 +- .../write_types/test/slugs/[slug]/+page.js | 2 +- .../test/slugs/x/[[optional]]/+page.js | 2 +- packages/kit/src/core/utils.js | 11 +- .../src/exports/vite/build/build_server.js | 16 +- .../vite/build/build_service_worker.js | 5 +- packages/kit/src/exports/vite/build/utils.js | 12 +- packages/kit/src/exports/vite/dev/index.js | 31 +- packages/kit/src/exports/vite/index.js | 410 +++++++++++------- .../src/exports/vite/static_analysis/index.js | 16 +- packages/kit/src/exports/vite/utils.js | 9 +- packages/kit/src/exports/vite/utils.spec.js | 2 +- packages/kit/src/runtime/server/utils.js | 3 +- packages/kit/src/utils/import.js | 13 +- packages/kit/src/version.spec.js | 24 +- .../kit/test/apps/basics/svelte.config.js | 6 + packages/kit/test/apps/basics/vite.config.js | 22 +- .../kit/test/build-errors/vitest.config.js | 5 + .../test/prerendering/basics/globalSetup.js | 2 +- .../test/prerendering/basics/vite.config.js | 2 +- packages/package/vitest.config.js | 5 + pnpm-lock.yaml | 3 + scripts/sync-all.js | 4 +- tsconfig.json | 2 +- vitest.config.js | 28 ++ 73 files changed, 617 insertions(+), 384 deletions(-) create mode 100644 .changeset/nasty-impalas-wear.md create mode 100644 packages/adapter-auto/vitest.config.js create mode 100644 packages/adapter-cloudflare/vitest.config.js create mode 100644 packages/adapter-netlify/vitest.config.js create mode 100644 packages/adapter-node/vitest.config.js create mode 100644 packages/adapter-vercel/vitest.config.js create mode 100644 packages/enhanced-img/vitest.config.js create mode 100644 packages/kit/test/build-errors/vitest.config.js create mode 100644 packages/package/vitest.config.js create mode 100644 vitest.config.js diff --git a/.changeset/nasty-impalas-wear.md b/.changeset/nasty-impalas-wear.md new file mode 100644 index 000000000000..14fef49885f0 --- /dev/null +++ b/.changeset/nasty-impalas-wear.md @@ -0,0 +1,5 @@ +--- +'@sveltejs/kit': minor +--- + +feat: resolve paths using the Vite config `root` option instead of `process.cwd()` to better support monorepo configurations such as Vitest workspaces diff --git a/package.json b/package.json index 7426bc24bb67..00bd89d7b612 100644 --- a/package.json +++ b/package.json @@ -30,7 +30,8 @@ "@svitejs/changesets-changelog-github-compact": "catalog:", "eslint": "catalog:", "prettier": "catalog:", - "prettier-plugin-svelte": "catalog:" + "prettier-plugin-svelte": "catalog:", + "vitest": "catalog:" }, "packageManager": "pnpm@10.30.3+sha512.c961d1e0a2d8e354ecaa5166b822516668b7f44cb5bd95122d590dd81922f606f5473b6d23ec4a5be05e7fcd18e8488d47d978bbe981872f1145d06e9a740017", "engines": { diff --git a/packages/adapter-auto/vitest.config.js b/packages/adapter-auto/vitest.config.js new file mode 100644 index 000000000000..a15b3a470a6d --- /dev/null +++ b/packages/adapter-auto/vitest.config.js @@ -0,0 +1,5 @@ +// we need this file to prevent Vitest from resolving a Vitest config from another directory + +import { defineConfig } from 'vitest/config'; + +export default defineConfig({}); diff --git a/packages/adapter-cloudflare/tsconfig.json b/packages/adapter-cloudflare/tsconfig.json index 6b387d40f5f3..8e8b455d2fd2 100644 --- a/packages/adapter-cloudflare/tsconfig.json +++ b/packages/adapter-cloudflare/tsconfig.json @@ -20,6 +20,7 @@ "utils.js", "utils.spec.js", "rolldown.config.js", + "vitest.config.js", "test/utils.js", "internal.d.ts", "src/worker.js" diff --git a/packages/adapter-cloudflare/vitest.config.js b/packages/adapter-cloudflare/vitest.config.js new file mode 100644 index 000000000000..a15b3a470a6d --- /dev/null +++ b/packages/adapter-cloudflare/vitest.config.js @@ -0,0 +1,5 @@ +// we need this file to prevent Vitest from resolving a Vitest config from another directory + +import { defineConfig } from 'vitest/config'; + +export default defineConfig({}); diff --git a/packages/adapter-netlify/vitest.config.js b/packages/adapter-netlify/vitest.config.js new file mode 100644 index 000000000000..a15b3a470a6d --- /dev/null +++ b/packages/adapter-netlify/vitest.config.js @@ -0,0 +1,5 @@ +// we need this file to prevent Vitest from resolving a Vitest config from another directory + +import { defineConfig } from 'vitest/config'; + +export default defineConfig({}); diff --git a/packages/adapter-node/tsconfig.json b/packages/adapter-node/tsconfig.json index f97ac86855b3..e075f510dcb2 100644 --- a/packages/adapter-node/tsconfig.json +++ b/packages/adapter-node/tsconfig.json @@ -17,6 +17,7 @@ "include": [ "index.js", "rolldown.config.js", + "vitest.config.js", "src/**/*.js", "tests/**/*.js", "tests/**/*.ts", diff --git a/packages/adapter-node/vitest.config.js b/packages/adapter-node/vitest.config.js new file mode 100644 index 000000000000..a15b3a470a6d --- /dev/null +++ b/packages/adapter-node/vitest.config.js @@ -0,0 +1,5 @@ +// we need this file to prevent Vitest from resolving a Vitest config from another directory + +import { defineConfig } from 'vitest/config'; + +export default defineConfig({}); diff --git a/packages/adapter-vercel/vitest.config.js b/packages/adapter-vercel/vitest.config.js new file mode 100644 index 000000000000..a15b3a470a6d --- /dev/null +++ b/packages/adapter-vercel/vitest.config.js @@ -0,0 +1,5 @@ +// we need this file to prevent Vitest from resolving a Vitest config from another directory + +import { defineConfig } from 'vitest/config'; + +export default defineConfig({}); diff --git a/packages/enhanced-img/tsconfig.json b/packages/enhanced-img/tsconfig.json index 0ff94d9e3f38..9dd4dc4fd688 100644 --- a/packages/enhanced-img/tsconfig.json +++ b/packages/enhanced-img/tsconfig.json @@ -15,5 +15,5 @@ "noUnusedLocals": true, "noUnusedParameters": true }, - "include": ["src/**/*", "types/**/*", "test/**/*"] + "include": ["src/**/*", "types/**/*", "test/**/*", "vitest.config.js"] } diff --git a/packages/enhanced-img/vitest.config.js b/packages/enhanced-img/vitest.config.js new file mode 100644 index 000000000000..a15b3a470a6d --- /dev/null +++ b/packages/enhanced-img/vitest.config.js @@ -0,0 +1,5 @@ +// we need this file to prevent Vitest from resolving a Vitest config from another directory + +import { defineConfig } from 'vitest/config'; + +export default defineConfig({}); diff --git a/packages/kit/scripts/generate-version.js b/packages/kit/scripts/generate-version.js index ecf715c9a15c..1ab7960f55ab 100644 --- a/packages/kit/scripts/generate-version.js +++ b/packages/kit/scripts/generate-version.js @@ -1,8 +1,11 @@ import fs from 'node:fs'; +import path from 'node:path'; -const pkg = JSON.parse(fs.readFileSync('package.json', 'utf-8')); +const pkg = JSON.parse( + fs.readFileSync(path.join(import.meta.dirname, '..', 'package.json'), 'utf-8') +); fs.writeFileSync( - './src/version.js', + path.join(import.meta.dirname, '..', 'src', 'version.js'), `// generated during release, do not modify\n\n/** @type {string} */\nexport const VERSION = '${pkg.version}';\n` ); diff --git a/packages/kit/src/cli.js b/packages/kit/src/cli.js index f1efe75e8bb5..4b810ae9f697 100755 --- a/packages/kit/src/cli.js +++ b/packages/kit/src/cli.js @@ -81,7 +81,7 @@ if (command === 'sync') { } try { - const config = await load_config(); + const config = await load_config({ cwd: process.cwd() }); const sync = await import('./core/sync/sync.js'); sync.all_types(config, values.mode); } catch (error) { diff --git a/packages/kit/src/core/adapt/builder.js b/packages/kit/src/core/adapt/builder.js index 52114110c0f8..0c064eed4975 100644 --- a/packages/kit/src/core/adapt/builder.js +++ b/packages/kit/src/core/adapt/builder.js @@ -147,7 +147,8 @@ export function create_builder({ prerendered: [], relative_path: relativePath, routes: Array.from(filtered), - remotes + remotes, + root: vite_config.root }) }); } @@ -157,7 +158,8 @@ export function create_builder({ findServerAssets(route_data) { return find_server_assets( build_data, - route_data.map((route) => /** @type {import('types').RouteData} */ (lookup.get(route))) + route_data.map((route) => /** @type {import('types').RouteData} */ (lookup.get(route))), + vite_config.root ); }, @@ -167,7 +169,8 @@ export function create_builder({ const fallback = await generate_fallback({ manifest_path, - env: { ...env.private, ...env.public } + env: { ...env.private, ...env.public }, + root: vite_config.root }); if (existsSync(dest)) { @@ -197,7 +200,8 @@ export function create_builder({ routes: subset ? subset.map((route) => /** @type {import('types').RouteData} */ (lookup.get(route))) : route_data.filter((route) => prerender_map.get(route.id) !== true), - remotes + remotes, + root: vite_config.root }); }, diff --git a/packages/kit/src/core/config/index.js b/packages/kit/src/core/config/index.js index ae35a708132b..e3f0e0798b88 100644 --- a/packages/kit/src/core/config/index.js +++ b/packages/kit/src/core/config/index.js @@ -1,6 +1,5 @@ import fs from 'node:fs'; import path from 'node:path'; -import process from 'node:process'; import * as url from 'node:url'; import options from './options.js'; @@ -58,10 +57,10 @@ export function load_error_page(config) { /** * Loads and validates Svelte config file - * @param {{ cwd?: string }} options + * @param {{ cwd: string }} options * @returns {Promise} */ -export async function load_config({ cwd = process.cwd() } = {}) { +export async function load_config({ cwd }) { const config_files = ['js', 'ts'] .map((ext) => path.join(cwd, `svelte.config.${ext}`)) .filter((f) => fs.existsSync(f)); @@ -93,11 +92,13 @@ export async function load_config({ cwd = process.cwd() } = {}) { /** * @param {import('@sveltejs/kit').Config} config + * @param {{ cwd: string }} options * @returns {import('types').ValidatedConfig} */ -function process_config(config, { cwd = process.cwd() } = {}) { +export function process_config(config, { cwd }) { const validated = validate_config(config); + validated.kit.env.dir = path.resolve(cwd, validated.kit.env.dir); validated.kit.outDir = path.resolve(cwd, validated.kit.outDir); for (const key in validated.kit.files) { diff --git a/packages/kit/src/core/env.js b/packages/kit/src/core/env.js index 455eb0f44b68..fcc8ec66779f 100644 --- a/packages/kit/src/core/env.js +++ b/packages/kit/src/core/env.js @@ -1,6 +1,6 @@ import { GENERATED_COMMENT } from '../constants.js'; import { dedent } from './sync/utils.js'; -import { runtime_base } from './utils.js'; +import { get_runtime_base } from './utils.js'; /** * @typedef {'public' | 'private'} EnvType @@ -32,15 +32,16 @@ export function create_static_module(id, env) { /** * @param {EnvType} type * @param {Record | undefined} dev_values If in a development mode, values to pre-populate the module with. + * @param {string} root */ -export function create_dynamic_module(type, dev_values) { +export function create_dynamic_module(type, dev_values, root) { if (dev_values) { const keys = Object.entries(dev_values).map( ([k, v]) => `${JSON.stringify(k)}: ${JSON.stringify(v)}` ); return `export const env = {\n${keys.join(',\n')}\n}`; } - return `export { ${type}_env as env } from '${runtime_base}/shared-server.js';`; + return `export { ${type}_env as env } from '${get_runtime_base(root)}/shared-server.js';`; } /** diff --git a/packages/kit/src/core/generate_manifest/find_server_assets.js b/packages/kit/src/core/generate_manifest/find_server_assets.js index 044db8419107..393941919b54 100644 --- a/packages/kit/src/core/generate_manifest/find_server_assets.js +++ b/packages/kit/src/core/generate_manifest/find_server_assets.js @@ -4,8 +4,9 @@ import { find_deps } from '../../exports/vite/build/utils.js'; * Finds all the assets that are imported by server files associated with `routes` * @param {import('types').BuildData} build_data * @param {import('types').RouteData[]} routes + * @param {string} root */ -export function find_server_assets(build_data, routes) { +export function find_server_assets(build_data, routes, root) { /** * All nodes actually used in the routes definition (prerendered routes are omitted). * Root layout/error is always included as they are needed for 404 and root errors. @@ -19,7 +20,7 @@ export function find_server_assets(build_data, routes) { /** @param {string} id */ function add_assets(id) { if (id in build_data.server_manifest) { - const deps = find_deps(build_data.server_manifest, id, false); + const deps = find_deps(build_data.server_manifest, id, false, root); for (const asset of deps.assets) { server_assets.add(asset); } diff --git a/packages/kit/src/core/generate_manifest/index.js b/packages/kit/src/core/generate_manifest/index.js index 6b2445aa2107..4bbc78509bdf 100644 --- a/packages/kit/src/core/generate_manifest/index.js +++ b/packages/kit/src/core/generate_manifest/index.js @@ -20,9 +20,17 @@ import { uneval } from 'devalue'; * relative_path: string; * routes: import('types').RouteData[]; * remotes: RemoteChunk[]; + * root: string; * }} opts */ -export function generate_manifest({ build_data, prerendered, relative_path, routes, remotes }) { +export function generate_manifest({ + build_data, + prerendered, + relative_path, + routes, + remotes, + root +}) { /** * @type {Map} The new index of each node in the filtered nodes array */ @@ -34,7 +42,7 @@ export function generate_manifest({ build_data, prerendered, relative_path, rout */ const used_nodes = new Set([0, 1]); - const server_assets = find_server_assets(build_data, routes); + const server_assets = find_server_assets(build_data, routes, root); for (const route of routes) { if (route.page) { @@ -119,7 +127,7 @@ export function generate_manifest({ build_data, prerendered, relative_path, rout pattern: ${route.pattern}, params: ${s(route.params)}, page: ${route.page ? `{ layouts: ${get_nodes(route.page.layouts)}, errors: ${get_nodes(route.page.errors)}, leaf: ${reindexed.get(route.page.leaf)} }` : 'null'}, - endpoint: ${route.endpoint ? loader(join_relative(relative_path, resolve_symlinks(build_data.server_manifest, route.endpoint.file).chunk.file)) : 'null'} + endpoint: ${route.endpoint ? loader(join_relative(relative_path, resolve_symlinks(build_data.server_manifest, route.endpoint.file, root).chunk.file)) : 'null'} } `; }).filter(Boolean).join(',\n')} diff --git a/packages/kit/src/core/postbuild/analyse.js b/packages/kit/src/core/postbuild/analyse.js index 76936b253e24..184478d94b4e 100644 --- a/packages/kit/src/core/postbuild/analyse.js +++ b/packages/kit/src/core/postbuild/analyse.js @@ -25,6 +25,7 @@ export default forked(import.meta.url, analyse); * out: string; * output_config: import('types').RecursiveRequired; * remotes: RemoteChunk[]; + * root: string; * }} opts */ async function analyse({ @@ -36,13 +37,14 @@ async function analyse({ env, out, output_config, - remotes + remotes, + root }) { /** @type {import('@sveltejs/kit').SSRManifest} */ const manifest = (await import(pathToFileURL(manifest_path).href)).manifest; /** @type {import('types').ValidatedKitConfig} */ - const config = (await load_config()).kit; + const config = (await load_config({ cwd: root })).kit; const server_root = join(config.outDir, 'output'); @@ -63,7 +65,17 @@ async function analyse({ internal.set_read_implementation((file) => createReadableStream(`${server_root}/server/${file}`)); // first, build server nodes without the client manifest so we can analyse it - build_server_nodes(out, config, manifest_data, server_manifest, null, null, null, output_config); + build_server_nodes( + out, + config, + manifest_data, + server_manifest, + null, + null, + null, + output_config, + root + ); /** @type {import('types').ServerMetadata} */ const metadata = { diff --git a/packages/kit/src/core/postbuild/fallback.js b/packages/kit/src/core/postbuild/fallback.js index ef0d0530955f..66fa0c6379e7 100644 --- a/packages/kit/src/core/postbuild/fallback.js +++ b/packages/kit/src/core/postbuild/fallback.js @@ -9,12 +9,13 @@ export default forked(import.meta.url, generate_fallback); /** * @param {{ * manifest_path: string; - * env: Record + * env: Record; + * root: string; * }} opts */ -async function generate_fallback({ manifest_path, env }) { +async function generate_fallback({ manifest_path, env, root }) { /** @type {import('types').ValidatedKitConfig} */ - const config = (await load_config()).kit; + const config = (await load_config({ cwd: root })).kit; const server_root = join(config.outDir, 'output'); diff --git a/packages/kit/src/core/postbuild/prerender.js b/packages/kit/src/core/postbuild/prerender.js index 6acf8e47dff4..f8d8603bdb32 100644 --- a/packages/kit/src/core/postbuild/prerender.js +++ b/packages/kit/src/core/postbuild/prerender.js @@ -31,10 +31,11 @@ const SPECIAL_HASHLINKS = new Set(['', 'top']); * manifest_path: string; * metadata: import('types').ServerMetadata; * verbose: boolean; - * env: Record + * env: Record; + * root: string; * }} opts */ -async function prerender({ hash, out, manifest_path, metadata, verbose, env }) { +async function prerender({ hash, out, manifest_path, metadata, verbose, env, root }) { /** @type {import('@sveltejs/kit').SSRManifest} */ const manifest = (await import(pathToFileURL(manifest_path).href)).manifest; @@ -99,12 +100,13 @@ async function prerender({ hash, out, manifest_path, metadata, verbose, env }) { const prerendered_routes = new Set(); /** @type {import('types').ValidatedKitConfig} */ - const config = (await load_config()).kit; + const config = (await load_config({ cwd: root })).kit; if (hash) { const fallback = await generate_fallback({ manifest_path, - env + env, + root }); const file = output_filename('/', true); diff --git a/packages/kit/src/core/sync/create_manifest_data/index.js b/packages/kit/src/core/sync/create_manifest_data/index.js index 27dc4f8cba5d..d7ffe012d6bd 100644 --- a/packages/kit/src/core/sync/create_manifest_data/index.js +++ b/packages/kit/src/core/sync/create_manifest_data/index.js @@ -1,7 +1,6 @@ import { lookup } from 'mrmime'; import fs from 'node:fs'; import path from 'node:path'; -import process from 'node:process'; import { styleText } from 'node:util'; import { posixify, resolve_entry } from '../../../utils/filesystem.js'; import { parse_route_id } from '../../../utils/routing.js'; @@ -17,14 +16,14 @@ import { * @param {{ * config: import('types').ValidatedConfig; * fallback?: string; - * cwd?: string; + * cwd: string; * }} opts * @returns {import('types').ManifestData} */ export default function create_manifest_data({ config, fallback = `${runtime_directory}/components`, - cwd = process.cwd() + cwd }) { const assets = create_assets(config); const hooks = create_hooks(config, cwd); @@ -114,8 +113,8 @@ function create_matchers(config, cwd) { } /** - * @param {import('types').ValidatedConfig} config * @param {string} cwd + * @param {import('types').ValidatedConfig} config * @param {string} fallback */ function create_routes_and_nodes(cwd, config, fallback) { @@ -418,7 +417,7 @@ function create_routes_and_nodes(cwd, config, fallback) { const indexes = new Map(nodes.map((node, i) => [node, i])); - const node_analyser = create_node_analyser(); + const node_analyser = create_node_analyser(cwd); for (const route of routes) { if (!route.leaf) continue; @@ -470,7 +469,7 @@ function create_routes_and_nodes(cwd, config, fallback) { for (const route of routes) { if (route.endpoint) { - route.endpoint.page_options = get_page_options(route.endpoint.file); + route.endpoint.page_options = get_page_options(route.endpoint.file, cwd); } } diff --git a/packages/kit/src/core/sync/create_manifest_data/index.spec.js b/packages/kit/src/core/sync/create_manifest_data/index.spec.js index 09f732bed8f9..6a7a1b1b1c4c 100644 --- a/packages/kit/src/core/sync/create_manifest_data/index.spec.js +++ b/packages/kit/src/core/sync/create_manifest_data/index.spec.js @@ -1,12 +1,11 @@ import fs from 'node:fs'; import path from 'node:path'; -import { fileURLToPath } from 'node:url'; import { assert, expect, test } from 'vitest'; import create_manifest_data from './index.js'; import { sort_routes } from './sort.js'; import { validate_config } from '../../config/index.js'; -const cwd = fileURLToPath(new URL('./test', import.meta.url)); +const cwd = path.join(import.meta.dirname, 'test'); /** * @param {string} dir @@ -87,7 +86,7 @@ test('creates routes', () => { { id: '/blog.json', pattern: '/^/blog.json/?$/', - endpoint: { file: 'samples/basic/blog.json/+server.js', page_options: null } + endpoint: { file: 'samples/basic/blog.json/+server.js', page_options: {} } }, { id: '/blog', @@ -99,7 +98,7 @@ test('creates routes', () => { pattern: '/^/blog/([^/]+?).json/?$/', endpoint: { file: 'samples/basic/blog/[slug].json/+server.ts', - page_options: null + page_options: {} } }, { @@ -310,7 +309,7 @@ test('allows rest parameters inside segments', () => { pattern: '/^/([^]*?).json/?$/', endpoint: { file: 'samples/rest-prefix-suffix/[...rest].json/+server.js', - page_options: null + page_options: {} } } ]); @@ -348,7 +347,7 @@ test('optional parameters', () => { { id: '/[[foo]]bar', pattern: '/^/([^/]*)?bar/?$/', - endpoint: { file: 'samples/optional/[[foo]]bar/+server.js', page_options: null } + endpoint: { file: 'samples/optional/[[foo]]bar/+server.js', page_options: {} } }, { id: '/nested', pattern: '/^/nested/?$/' }, { @@ -481,7 +480,7 @@ test('allows multiple slugs', () => { pattern: '/^/([^/]+?).([^/]+?)/?$/', endpoint: { file: 'samples/multiple-slugs/[file].[ext]/+server.js', - page_options: null + page_options: {} } } ]); @@ -506,7 +505,7 @@ test('ignores things that look like lockfiles', () => { pattern: '/^/foo/?$/', endpoint: { file: 'samples/lockfiles/foo/+server.js', - page_options: null + page_options: {} } } ]); @@ -542,7 +541,7 @@ test('works with custom extensions', () => { pattern: '/^/blog.json/?$/', endpoint: { file: 'samples/custom-extension/blog.json/+server.js', - page_options: null + page_options: {} } }, { @@ -555,7 +554,7 @@ test('works with custom extensions', () => { pattern: '/^/blog/([^/]+?).json/?$/', endpoint: { file: 'samples/custom-extension/blog/[slug].json/+server.js', - page_options: null + page_options: {} } }, { diff --git a/packages/kit/src/core/sync/sync.js b/packages/kit/src/core/sync/sync.js index d8643e989128..bdcddc338a76 100644 --- a/packages/kit/src/core/sync/sync.js +++ b/packages/kit/src/core/sync/sync.js @@ -1,4 +1,5 @@ import path from 'node:path'; +import process from 'node:process'; import create_manifest_data from './create_manifest_data/index.js'; import { write_client_manifest } from './write_client_manifest.js'; import { write_root } from './write_root.js'; @@ -16,25 +17,27 @@ import { * Initialize SvelteKit's generated files that only depend on the config and mode. * @param {import('types').ValidatedConfig} config * @param {string} mode + * @param {string} root The project root directory */ -export function init(config, mode) { - write_tsconfig(config.kit); +export function init(config, mode, root) { + write_tsconfig(config.kit, root); write_ambient(config.kit, mode); } /** * Update SvelteKit's generated files * @param {import('types').ValidatedConfig} config + * @param {string} root The project root directory */ -export function create(config) { - const manifest_data = create_manifest_data({ config }); +export function create(config, root) { + const manifest_data = create_manifest_data({ config, cwd: root }); const output = path.join(config.kit.outDir, 'generated'); write_client_manifest(config.kit, manifest_data, `${output}/client`); - write_server(config, output); + write_server(config, output, root); write_root(manifest_data, output); - write_all_types(config, manifest_data); + write_all_types(config, manifest_data, root); write_non_ambient(config.kit, manifest_data); return { manifest_data }; @@ -47,9 +50,10 @@ export function create(config) { * @param {import('types').ValidatedConfig} config * @param {import('types').ManifestData} manifest_data * @param {string} file + * @param {string} root The project root directory */ -export function update(config, manifest_data, file) { - const node_analyser = create_node_analyser(); +export function update(config, manifest_data, file, root) { + const node_analyser = create_node_analyser(root); for (const node of manifest_data.nodes) { node.page_options = node_analyser.get_page_options(node); @@ -57,11 +61,11 @@ export function update(config, manifest_data, file) { for (const route of manifest_data.routes) { if (route.endpoint) { - route.endpoint.page_options = get_page_options(route.endpoint.file); + route.endpoint.page_options = get_page_options(route.endpoint.file, root); } } - write_types(config, manifest_data, file); + write_types(config, manifest_data, file, root); write_non_ambient(config.kit, manifest_data); } @@ -69,10 +73,11 @@ export function update(config, manifest_data, file) { * Run sync.init and sync.create in series, returning the result from sync.create. * @param {import('types').ValidatedConfig} config * @param {string} mode The Vite mode + * @param {string} root The project root directory */ -export function all(config, mode) { - init(config, mode); - return create(config); +export function all(config, mode, root) { + init(config, mode, root); + return create(config, root); } /** @@ -81,16 +86,18 @@ export function all(config, mode) { * @param {string} mode The Vite mode */ export function all_types(config, mode) { - init(config, mode); - const manifest_data = create_manifest_data({ config }); - write_all_types(config, manifest_data); + const cwd = process.cwd(); + init(config, mode, cwd); + const manifest_data = create_manifest_data({ config, cwd }); + write_all_types(config, manifest_data, cwd); write_non_ambient(config.kit, manifest_data); } /** * Regenerate __SERVER__/internal.js in response to src/{app.html,error.html,service-worker.js} changing * @param {import('types').ValidatedConfig} config + * @param {string} root The project root directory */ -export function server(config) { - write_server(config, path.join(config.kit.outDir, 'generated')); +export function server(config, root) { + write_server(config, path.join(config.kit.outDir, 'generated'), root); } diff --git a/packages/kit/src/core/sync/write_server.js b/packages/kit/src/core/sync/write_server.js index 5ef57288b1f6..c062a262d971 100644 --- a/packages/kit/src/core/sync/write_server.js +++ b/packages/kit/src/core/sync/write_server.js @@ -1,5 +1,4 @@ import path from 'node:path'; -import process from 'node:process'; import { styleText } from 'node:util'; import { hash } from '../../utils/hash.js'; import { posixify, resolve_entry } from '../../utils/filesystem.js'; @@ -101,8 +100,9 @@ export { set_assets, set_building, set_manifest, set_prerendering, set_private_e * Write server configuration to disk * @param {import('types').ValidatedConfig} config * @param {string} output + * @param {string} root The project root directory */ -export function write_server(config, output) { +export function write_server(config, output, root) { const server_hooks_file = resolve_entry(config.kit.files.hooks.server); const universal_hooks_file = resolve_entry(config.kit.files.hooks.universal); @@ -133,7 +133,7 @@ export function write_server(config, output) { has_service_worker: config.kit.serviceWorker.register && !!resolve_entry(config.kit.files.serviceWorker), runtime_directory: relative(runtime_directory), - template: load_template(process.cwd(), config), + template: load_template(root, config), error_page: load_error_page(config) }) ); diff --git a/packages/kit/src/core/sync/write_tsconfig.js b/packages/kit/src/core/sync/write_tsconfig.js index 9782950bd2a3..9c038bde2b25 100644 --- a/packages/kit/src/core/sync/write_tsconfig.js +++ b/packages/kit/src/core/sync/write_tsconfig.js @@ -1,6 +1,5 @@ import fs from 'node:fs'; import path from 'node:path'; -import process from 'node:process'; import { styleText } from 'node:util'; import { posixify } from '../../utils/filesystem.js'; import { write_if_changed } from './utils.js'; @@ -17,10 +16,11 @@ function maybe_file(cwd, file) { } /** + * @param {string} cwd * @param {string} file */ -function project_relative(file) { - return posixify(path.relative('.', file)); +function project_relative(cwd, file) { + return posixify(path.relative(cwd, file)); } /** @@ -37,21 +37,23 @@ function remove_trailing_slashstar(file) { /** * Generates the tsconfig that the user's tsconfig inherits from. * @param {import('types').ValidatedKitConfig} kit + * @param {string} cwd */ -export function write_tsconfig(kit, cwd = process.cwd()) { +export function write_tsconfig(kit, cwd) { const out = path.join(kit.outDir, 'tsconfig.json'); const user_config = load_user_tsconfig(cwd); if (user_config) validate_user_config(cwd, out, user_config); - write_if_changed(out, JSON.stringify(get_tsconfig(kit), null, '\t')); + write_if_changed(out, JSON.stringify(get_tsconfig(kit, cwd), null, '\t')); } /** * Generates the tsconfig that the user's tsconfig inherits from. * @param {import('types').ValidatedKitConfig} kit + * @param {string} cwd */ -export function get_tsconfig(kit) { +export function get_tsconfig(kit, cwd) { /** @param {string} file */ const config_relative = (file) => posixify(path.relative(kit.outDir, file)); @@ -75,11 +77,11 @@ export function get_tsconfig(kit) { // Test folder is a special case - we advocate putting tests in a top-level test folder // and it's not configurable (should we make it?) - const test_folder = project_relative('test'); + const test_folder = project_relative(cwd, 'test'); include.add(config_relative(`${test_folder}/**/*.js`)); include.add(config_relative(`${test_folder}/**/*.ts`)); include.add(config_relative(`${test_folder}/**/*.svelte`)); - const tests_folder = project_relative('tests'); + const tests_folder = project_relative(cwd, 'tests'); include.add(config_relative(`${tests_folder}/**/*.js`)); include.add(config_relative(`${tests_folder}/**/*.ts`)); include.add(config_relative(`${tests_folder}/**/*.svelte`)); @@ -102,7 +104,7 @@ export function get_tsconfig(kit) { compilerOptions: { // generated options paths: { - ...get_tsconfig_paths(kit), + ...get_tsconfig_paths(kit, cwd), '$app/types': ['./types/index.d.ts'] }, rootDirs: [config_relative('.'), './types'], @@ -176,7 +178,7 @@ function validate_user_config(cwd, out, config) { ); } } else { - let relative = posixify(path.relative('.', out)); + let relative = posixify(path.relative(cwd, out)); if (!relative.startsWith('./')) relative = './' + relative; console.warn( @@ -199,8 +201,9 @@ const value_regex = /^(.*?)((\/\*)|(\.\w+))?$/; * Related to vite alias creation. * * @param {import('types').ValidatedKitConfig} config + * @param {string} cwd */ -function get_tsconfig_paths(config) { +function get_tsconfig_paths(config, cwd) { /** @param {string} file */ const config_relative = (file) => { let relative_path = path.relative(config.outDir, file); @@ -211,8 +214,8 @@ function get_tsconfig_paths(config) { }; const alias = { ...config.alias }; - if (fs.existsSync(project_relative(config.files.lib))) { - alias['$lib'] = project_relative(config.files.lib); + if (fs.existsSync(project_relative(cwd, config.files.lib))) { + alias['$lib'] = project_relative(cwd, config.files.lib); } /** @type {Record} */ diff --git a/packages/kit/src/core/sync/write_tsconfig.spec.js b/packages/kit/src/core/sync/write_tsconfig.spec.js index 90cec2d223b1..47e03dac5273 100644 --- a/packages/kit/src/core/sync/write_tsconfig.spec.js +++ b/packages/kit/src/core/sync/write_tsconfig.spec.js @@ -15,7 +15,7 @@ test('Creates tsconfig path aliases from kit.alias', () => { } }); - const { compilerOptions } = get_tsconfig(kit); + const { compilerOptions } = get_tsconfig(kit, '.'); // $lib isn't part of the outcome because there's a "path exists" // check in the implementation @@ -42,7 +42,7 @@ test('Allows generated tsconfig to be mutated', () => { } }); - const config = get_tsconfig(kit); + const config = get_tsconfig(kit, '.'); // @ts-expect-error assert.equal(config.extends, 'some/other/tsconfig.json'); @@ -60,7 +60,7 @@ test('Allows generated tsconfig to be replaced', () => { } }); - const config = get_tsconfig(kit); + const config = get_tsconfig(kit, '.'); // @ts-expect-error assert.equal(config.extends, 'some/other/tsconfig.json'); @@ -75,7 +75,7 @@ test('Creates tsconfig include from kit.files', () => { } }); - const { include } = get_tsconfig(kit); + const { include } = get_tsconfig(kit, '.'); expect(include).toEqual([ 'ambient.d.ts', diff --git a/packages/kit/src/core/sync/write_types/index.js b/packages/kit/src/core/sync/write_types/index.js index a7f48109548d..95f493810a52 100644 --- a/packages/kit/src/core/sync/write_types/index.js +++ b/packages/kit/src/core/sync/write_types/index.js @@ -1,6 +1,5 @@ import fs from 'node:fs'; import path from 'node:path'; -import process from 'node:process'; import MagicString from 'magic-string'; import { posixify, rimraf, walk } from '../../../utils/filesystem.js'; import { compact } from '../../../utils/array.js'; @@ -25,21 +24,20 @@ const is_whitespace = (/** @type {string} */ char) => /\s/.test(char); * @typedef {Map} RoutesMap */ -const cwd = process.cwd(); - /** * Creates types for the whole manifest * @param {import('types').ValidatedConfig} config * @param {import('types').ManifestData} manifest_data + * @param {string} root The project root directory */ -export function write_all_types(config, manifest_data) { +export function write_all_types(config, manifest_data, root) { if (!ts) return; const types_dir = `${config.kit.outDir}/types`; // empty out files that no longer need to exist const routes_dir = remove_relative_parent_traversals( - posixify(path.relative('.', config.kit.files.routes)) + posixify(path.relative(root, config.kit.files.routes)) ); const expected_directories = new Set( manifest_data.routes.map((route) => path.join(routes_dir, route.id)) @@ -109,7 +107,7 @@ export function write_all_types(config, manifest_data) { const source_last_updated = Math.max( // ctimeMs includes move operations whereas mtimeMs does not - ...input_files.map((file) => fs.statSync(file).ctimeMs) + ...input_files.map((file) => fs.statSync(path.resolve(root, file)).ctimeMs) ); const types_last_updated = Math.max(...output_files.map((file) => file.updated)); @@ -124,7 +122,7 @@ export function write_all_types(config, manifest_data) { if (should_generate) { // track which old files end up being surplus to requirements const to_delete = new Set(output_files.map((file) => file.name)); - update_types(config, routes_map, route, to_delete); + update_types(config, routes_map, route, root, to_delete); meta_data[route.id] = input_files; } } @@ -138,8 +136,9 @@ export function write_all_types(config, manifest_data) { * @param {import('types').ValidatedConfig} config * @param {import('types').ManifestData} manifest_data * @param {string} file + * @param {string} root The project root directory */ -export function write_types(config, manifest_data, file) { +export function write_types(config, manifest_data, file, root) { if (!ts) return; if (!path.basename(file).startsWith('+')) { @@ -153,7 +152,7 @@ export function write_types(config, manifest_data, file) { if (!route) return; if (!route.leaf && !route.layout && !route.endpoint) return; // nothing to do - update_types(config, create_routes_map(manifest_data), route); + update_types(config, create_routes_map(manifest_data), route, root); } /** @@ -176,11 +175,12 @@ function create_routes_map(manifest_data) { * @param {import('types').ValidatedConfig} config * @param {RoutesMap} routes * @param {import('types').RouteData} route + * @param {string} root The project root directory * @param {Set} [to_delete] */ -function update_types(config, routes, route, to_delete = new Set()) { +function update_types(config, routes, route, root, to_delete = new Set()) { const routes_dir = remove_relative_parent_traversals( - posixify(path.relative('.', config.kit.files.routes)) + posixify(path.relative(root, config.kit.files.routes)) ); const outdir = path.join(config.kit.outDir, 'types', routes_dir, route.id); @@ -255,7 +255,7 @@ function update_types(config, routes, route, to_delete = new Set()) { declarations: d, exports: e, proxies - } = process_node(route.leaf, outdir, true, route_info.proxies); + } = process_node(route.leaf, outdir, true, route_info.proxies, root); exports.push(...e); declarations.push(...d); @@ -304,7 +304,7 @@ function update_types(config, routes, route, to_delete = new Set()) { layout_params.push({ ...param, optional: true }); } - ensureProxies(page, leaf.proxies); + ensureProxies(page, leaf.proxies, root); if ( // Be defensive - if a proxy doesn't exist (because it couldn't be created), assume a load function exists. @@ -340,6 +340,7 @@ function update_types(config, routes, route, to_delete = new Set()) { outdir, false, { server: null, universal: null }, + root, all_pages_have_load ); @@ -379,9 +380,10 @@ function update_types(config, routes, route, to_delete = new Set()) { * @param {string} outdir * @param {boolean} is_page * @param {Proxies} proxies + * @param {string} root The project root directory * @param {boolean} [all_pages_have_load] */ -function process_node(node, outdir, is_page, proxies, all_pages_have_load = true) { +function process_node(node, outdir, is_page, proxies, root, all_pages_have_load = true) { const params = `${is_page ? 'Route' : 'Layout'}Params`; const prefix = is_page ? 'Page' : 'Layout'; @@ -397,7 +399,7 @@ function process_node(node, outdir, is_page, proxies, all_pages_have_load = true /** @type {string} */ let data; - ensureProxies(node, proxies); + ensureProxies(node, proxies, root); if (node.server) { const basename = path.basename(node.server); @@ -430,7 +432,7 @@ function process_node(node, outdir, is_page, proxies, all_pages_have_load = true // The advantage is that type updates are reflected without saving. const from = proxy.modified ? `./proxy${replace_ext_with_js(basename)}` - : path_to_original(outdir, node.server); + : path_to_original(outdir, node.server, root); exports.push( 'type ExcludeActionFailure = T extends Kit.ActionFailure ? never : T extends void ? never : T;', @@ -499,7 +501,7 @@ function process_node(node, outdir, is_page, proxies, all_pages_have_load = true // The advantage is that type updates are reflected without saving. const from = proxy.modified ? `./proxy${replace_ext_with_js(path.basename(file_path))}` - : path_to_original(outdir, file_path); + : path_to_original(outdir, file_path, root); const type = `Kit.LoadProperties>>`; return expand ? `Expand>>` : type; } else { @@ -519,24 +521,26 @@ function process_node(node, outdir, is_page, proxies, all_pages_have_load = true * * @param {import('types').PageNode} node * @param {Proxies} proxies + * @param {string} root The project root directory */ -function ensureProxies(node, proxies) { +function ensureProxies(node, proxies, root) { if (node.server && !proxies.server) { - proxies.server = createProxy(node.server, true); + proxies.server = createProxy(node.server, true, root); } if (node.universal && !proxies.universal) { - proxies.universal = createProxy(node.universal, false); + proxies.universal = createProxy(node.universal, false, root); } } /** * @param {string} file_path * @param {boolean} is_server + * @param {string} root The project root directory * @returns {Proxy} */ -function createProxy(file_path, is_server) { - const proxy = tweak_types(fs.readFileSync(file_path, 'utf8'), is_server); +function createProxy(file_path, is_server, root) { + const proxy = tweak_types(fs.readFileSync(path.resolve(root, file_path), 'utf8'), is_server); if (proxy) { return { ...proxy, @@ -581,9 +585,10 @@ function get_parent_type(node, type) { /** * @param {string} outdir * @param {string} file_path + * @param {string} root The project root directory */ -function path_to_original(outdir, file_path) { - return posixify(path.relative(outdir, path.join(cwd, replace_ext_with_js(file_path)))); +function path_to_original(outdir, file_path, root) { + return posixify(path.relative(outdir, path.join(root, replace_ext_with_js(file_path)))); } /** diff --git a/packages/kit/src/core/sync/write_types/index.spec.js b/packages/kit/src/core/sync/write_types/index.spec.js index 647ceff6611e..15f79e4c15bb 100644 --- a/packages/kit/src/core/sync/write_types/index.spec.js +++ b/packages/kit/src/core/sync/write_types/index.spec.js @@ -2,7 +2,6 @@ import { execSync } from 'node:child_process'; import fs from 'node:fs'; import path from 'node:path'; import process from 'node:process'; -import { fileURLToPath } from 'node:url'; import { assert, expect, test } from 'vitest'; import { rimraf } from '../../../utils/filesystem.js'; import create_manifest_data from '../create_manifest_data/index.js'; @@ -10,7 +9,7 @@ import { tweak_types, write_all_types } from './index.js'; import { write_non_ambient } from '../write_non_ambient.js'; import { validate_config } from '../../config/index.js'; -const cwd = fileURLToPath(new URL('./test', import.meta.url)); +const cwd = path.join(import.meta.dirname, 'test'); /** * @param {string} dir @@ -23,13 +22,16 @@ function run_test(dir) { initial.kit.files.assets = path.resolve(cwd, 'static'); initial.kit.files.params = path.resolve(cwd, dir, 'params'); initial.kit.files.routes = path.resolve(cwd, dir); - initial.kit.outDir = path.resolve(cwd, path.join(dir, '.svelte-kit')); + initial.kit.outDir = path.resolve(cwd, dir, '.svelte-kit'); + + const root = path.join(cwd, dir); const manifest = create_manifest_data({ - config: /** @type {import('types').ValidatedConfig} */ (initial) + config: /** @type {import('types').ValidatedConfig} */ (initial), + cwd: root }); - write_all_types(initial, manifest); + write_all_types(initial, manifest, root); write_non_ambient(initial.kit, manifest); } diff --git a/packages/kit/src/core/sync/write_types/test/actions/+page.server.js b/packages/kit/src/core/sync/write_types/test/actions/+page.server.js index 3347ea120fac..453d08708447 100644 --- a/packages/kit/src/core/sync/write_types/test/actions/+page.server.js +++ b/packages/kit/src/core/sync/write_types/test/actions/+page.server.js @@ -39,7 +39,7 @@ export const actions = { /** * Ordinarily this would live in a +page.svelte, but to make it easy to run the tests, we put it here. * The `export` is so that eslint doesn't throw a hissy fit about the unused variable - * @type {import('./.svelte-kit/types/src/core/sync/write_types/test/actions/$types').SubmitFunction} + * @type {import('./.svelte-kit/types/$types').SubmitFunction} */ export const submit = () => { return ({ result }) => { diff --git a/packages/kit/src/core/sync/write_types/test/layout-advanced/(main)/+page.js b/packages/kit/src/core/sync/write_types/test/layout-advanced/(main)/+page.js index 2368bd47160f..37854020e94f 100644 --- a/packages/kit/src/core/sync/write_types/test/layout-advanced/(main)/+page.js +++ b/packages/kit/src/core/sync/write_types/test/layout-advanced/(main)/+page.js @@ -1,6 +1,6 @@ // test to see if layout adjusts correctly if +page.js exists, but no load function -/** @type {import('../.svelte-kit/types/src/core/sync/write_types/test/layout-advanced/(main)/$types').PageData} */ +/** @type {import('../.svelte-kit/types/(main)/$types').PageData} */ const data = { root: '' }; diff --git a/packages/kit/src/core/sync/write_types/test/layout-advanced/(main)/sub/+page.js b/packages/kit/src/core/sync/write_types/test/layout-advanced/(main)/sub/+page.js index 908adae6e5df..05cf07858240 100644 --- a/packages/kit/src/core/sync/write_types/test/layout-advanced/(main)/sub/+page.js +++ b/packages/kit/src/core/sync/write_types/test/layout-advanced/(main)/sub/+page.js @@ -1,4 +1,4 @@ -/** @type {import('../../.svelte-kit/types/src/core/sync/write_types/test/layout-advanced/(main)/sub/$types').PageLoad} */ +/** @type {import('../../.svelte-kit/types/(main)/sub/$types').PageLoad} */ export async function load({ parent }) { const p = await parent(); p.main; @@ -10,7 +10,7 @@ export async function load({ parent }) { }; } -/** @type {import('../../.svelte-kit/types/src/core/sync/write_types/test/layout-advanced/(main)/sub/$types').PageData} */ +/** @type {import('../../.svelte-kit/types/(main)/sub/$types').PageData} */ const data = { main: '', root: '', diff --git a/packages/kit/src/core/sync/write_types/test/layout/+layout.js b/packages/kit/src/core/sync/write_types/test/layout/+layout.js index c8bc95024f98..8643783872c6 100644 --- a/packages/kit/src/core/sync/write_types/test/layout/+layout.js +++ b/packages/kit/src/core/sync/write_types/test/layout/+layout.js @@ -1,4 +1,4 @@ -/** @type {import('./.svelte-kit/types/src/core/sync/write_types/test/layout/$types').LayoutLoad} */ +/** @type {import('./.svelte-kit/types/$types').LayoutLoad} */ export function load({ data }) { data.server; // @ts-expect-error diff --git a/packages/kit/src/core/sync/write_types/test/layout/+layout.server.js b/packages/kit/src/core/sync/write_types/test/layout/+layout.server.js index 77a2a9780b5b..f3b024c96c5b 100644 --- a/packages/kit/src/core/sync/write_types/test/layout/+layout.server.js +++ b/packages/kit/src/core/sync/write_types/test/layout/+layout.server.js @@ -1,4 +1,4 @@ -/** @type {import('./.svelte-kit/types/src/core/sync/write_types/test/layout/$types').LayoutServerLoad} */ +/** @type {import('./.svelte-kit/types/$types').LayoutServerLoad} */ export function load() { return { server: 'server' diff --git a/packages/kit/src/core/sync/write_types/test/layout/+page.js b/packages/kit/src/core/sync/write_types/test/layout/+page.js index 4abd01995480..63b0672410d7 100644 --- a/packages/kit/src/core/sync/write_types/test/layout/+page.js +++ b/packages/kit/src/core/sync/write_types/test/layout/+page.js @@ -1,4 +1,4 @@ -/** @type {import('./.svelte-kit/types/src/core/sync/write_types/test/layout/$types').PageLoad} */ +/** @type {import('./.svelte-kit/types/$types').PageLoad} */ export function load({ data }) { data.pageServer; // @ts-expect-error @@ -8,7 +8,7 @@ export function load({ data }) { }; } -/** @type {import('./.svelte-kit/types/src/core/sync/write_types/test/layout/$types').PageData} */ +/** @type {import('./.svelte-kit/types/$types').PageData} */ const data = { shared: 'asd', pageShared: 'asd' diff --git a/packages/kit/src/core/sync/write_types/test/param-type-inference/optional/[[optionalNarrowedParam=narrowed]]/+page.js b/packages/kit/src/core/sync/write_types/test/param-type-inference/optional/[[optionalNarrowedParam=narrowed]]/+page.js index 024289bef97e..cbb0d64378c9 100644 --- a/packages/kit/src/core/sync/write_types/test/param-type-inference/optional/[[optionalNarrowedParam=narrowed]]/+page.js +++ b/packages/kit/src/core/sync/write_types/test/param-type-inference/optional/[[optionalNarrowedParam=narrowed]]/+page.js @@ -1,6 +1,6 @@ /* eslint-disable */ -/** @type {import('../../.svelte-kit/types/src/core/sync/write_types/test/param-type-inference/optional/[[optionalNarrowedParam=narrowed]]/$types').PageLoad} */ +/** @type {import('../../.svelte-kit/types/optional/[[optionalNarrowedParam=narrowed]]/$types').PageLoad} */ export function load({ params }) { if (params.optionalNarrowedParam) { /** @type {"a" | "b"} */ diff --git a/packages/kit/src/core/sync/write_types/test/param-type-inference/required/+layout.js b/packages/kit/src/core/sync/write_types/test/param-type-inference/required/+layout.js index 5a67f890cd8c..3c27fddc8492 100644 --- a/packages/kit/src/core/sync/write_types/test/param-type-inference/required/+layout.js +++ b/packages/kit/src/core/sync/write_types/test/param-type-inference/required/+layout.js @@ -1,6 +1,6 @@ /* eslint-disable */ -/** @type {import('../.svelte-kit/types/src/core/sync/write_types/test/param-type-inference/required/$types').LayoutLoad} */ +/** @type {import('../.svelte-kit/types/required/$types').LayoutLoad} */ export function load({ params }) { if (params.narrowedParam) { /** @type {"a" | "b"} */ diff --git a/packages/kit/src/core/sync/write_types/test/param-type-inference/required/[narrowedParam=narrowed]/+page.js b/packages/kit/src/core/sync/write_types/test/param-type-inference/required/[narrowedParam=narrowed]/+page.js index 395ae659aa1d..76d9483badff 100644 --- a/packages/kit/src/core/sync/write_types/test/param-type-inference/required/[narrowedParam=narrowed]/+page.js +++ b/packages/kit/src/core/sync/write_types/test/param-type-inference/required/[narrowedParam=narrowed]/+page.js @@ -1,6 +1,6 @@ /* eslint-disable */ -/** @type {import('../../.svelte-kit/types/src/core/sync/write_types/test/param-type-inference/required/[narrowedParam=narrowed]/$types').PageLoad} */ +/** @type {import('../../.svelte-kit/types/required/[narrowedParam=narrowed]/$types').PageLoad} */ export function load({ params }) { /** @type {"a" | "b"} */ let a; diff --git a/packages/kit/src/core/sync/write_types/test/param-type-inference/required/[regularParam=not_narrowed]/+page.js b/packages/kit/src/core/sync/write_types/test/param-type-inference/required/[regularParam=not_narrowed]/+page.js index 6fd50653a023..bd803fe94597 100644 --- a/packages/kit/src/core/sync/write_types/test/param-type-inference/required/[regularParam=not_narrowed]/+page.js +++ b/packages/kit/src/core/sync/write_types/test/param-type-inference/required/[regularParam=not_narrowed]/+page.js @@ -1,6 +1,6 @@ /* eslint-disable */ -/** @type {import('../../.svelte-kit/types/src/core/sync/write_types/test/param-type-inference/required/[regularParam=not_narrowed]/$types').PageLoad} */ +/** @type {import('../../.svelte-kit/types/required/[regularParam=not_narrowed]/$types').PageLoad} */ export function load({ params }) { /** @type {string} a*/ const a = params.regularParam; diff --git a/packages/kit/src/core/sync/write_types/test/param-type-inference/spread/[...spread=narrowed]/+page.js b/packages/kit/src/core/sync/write_types/test/param-type-inference/spread/[...spread=narrowed]/+page.js index f26d10e3aa74..393446edfb18 100644 --- a/packages/kit/src/core/sync/write_types/test/param-type-inference/spread/[...spread=narrowed]/+page.js +++ b/packages/kit/src/core/sync/write_types/test/param-type-inference/spread/[...spread=narrowed]/+page.js @@ -1,6 +1,6 @@ /* eslint-disable */ -/** @type {import('../../.svelte-kit/types/src/core/sync/write_types/test/param-type-inference/spread/[...spread=narrowed]/$types').PageLoad} */ +/** @type {import('../../.svelte-kit/types/spread/[...spread=narrowed]/$types').PageLoad} */ export function load({ params }) { /** @type {"a" | "b"} */ let a; diff --git a/packages/kit/src/core/sync/write_types/test/simple-page-server-and-shared/+page.js b/packages/kit/src/core/sync/write_types/test/simple-page-server-and-shared/+page.js index 9d11e44f0552..e9b7de888b7f 100644 --- a/packages/kit/src/core/sync/write_types/test/simple-page-server-and-shared/+page.js +++ b/packages/kit/src/core/sync/write_types/test/simple-page-server-and-shared/+page.js @@ -1,4 +1,4 @@ -/** @type {import('./.svelte-kit/types/src/core/sync/write_types/test/simple-page-server-and-shared/$types').PageLoad} */ +/** @type {import('./.svelte-kit/types/$types').PageLoad} */ export function load({ data }) { data.server; // @ts-expect-error @@ -8,7 +8,7 @@ export function load({ data }) { }; } -/** @type {import('./.svelte-kit/types/src/core/sync/write_types/test/simple-page-server-and-shared/$types').PageData} */ +/** @type {import('./.svelte-kit/types/$types').PageData} */ const data = { shared: 'asd' }; diff --git a/packages/kit/src/core/sync/write_types/test/simple-page-server-only/+page.server.js b/packages/kit/src/core/sync/write_types/test/simple-page-server-only/+page.server.js index cfdb779689e4..b33e149baf62 100644 --- a/packages/kit/src/core/sync/write_types/test/simple-page-server-only/+page.server.js +++ b/packages/kit/src/core/sync/write_types/test/simple-page-server-only/+page.server.js @@ -8,7 +8,7 @@ export const actions = { default: () => ({ action: 'bar' }) }; -/** @type {import('./.svelte-kit/types/src/core/sync/write_types/test/simple-page-server-only/$types').PageData} */ +/** @type {import('./.svelte-kit/types/$types').PageData} */ const data = { foo: 'asd' }; @@ -16,7 +16,7 @@ data.foo; // @ts-expect-error data.bar; -/** @type {import('./.svelte-kit/types/src/core/sync/write_types/test/simple-page-server-only/$types').ActionData} */ +/** @type {import('./.svelte-kit/types/$types').ActionData} */ const actionData = { action: 'bar' }; actionData.action; // @ts-expect-error diff --git a/packages/kit/src/core/sync/write_types/test/simple-page-server-only/sub/+page.server.js b/packages/kit/src/core/sync/write_types/test/simple-page-server-only/sub/+page.server.js index 58b4c36ac541..836f9d5e0d67 100644 --- a/packages/kit/src/core/sync/write_types/test/simple-page-server-only/sub/+page.server.js +++ b/packages/kit/src/core/sync/write_types/test/simple-page-server-only/sub/+page.server.js @@ -1,4 +1,4 @@ -/** @type {import('../.svelte-kit/types/src/core/sync/write_types/test/simple-page-server-only/sub/$types').PageServerLoad} */ +/** @type {import('../.svelte-kit/types/sub/$types').PageServerLoad} */ export function load() { if (Math.random() > 0.5) { return { @@ -7,7 +7,7 @@ export function load() { } } -/** @type {import('../.svelte-kit/types/src/core/sync/write_types/test/simple-page-server-only/sub/$types').PageData} */ +/** @type {import('../.svelte-kit/types/sub/$types').PageData} */ const data = /** @type {any} */ ({ foo: 'bar' }); // the any cast prevents TypeScript from narrowing this to foo being defined diff --git a/packages/kit/src/core/sync/write_types/test/simple-page-shared-only/+page.js b/packages/kit/src/core/sync/write_types/test/simple-page-shared-only/+page.js index 900e9369bd13..03eee6efca6b 100644 --- a/packages/kit/src/core/sync/write_types/test/simple-page-shared-only/+page.js +++ b/packages/kit/src/core/sync/write_types/test/simple-page-shared-only/+page.js @@ -4,7 +4,7 @@ export function load() { }; } -/** @type {import('./.svelte-kit/types/src/core/sync/write_types/test/simple-page-shared-only/$types').PageData} */ +/** @type {import('./.svelte-kit/types/$types').PageData} */ const data = { shared: 'asd' }; diff --git a/packages/kit/src/core/sync/write_types/test/simple-page-shared-only/sub/+page.js b/packages/kit/src/core/sync/write_types/test/simple-page-shared-only/sub/+page.js index b1d06b96d262..0ffaf618e561 100644 --- a/packages/kit/src/core/sync/write_types/test/simple-page-shared-only/sub/+page.js +++ b/packages/kit/src/core/sync/write_types/test/simple-page-shared-only/sub/+page.js @@ -1,4 +1,4 @@ -/** @type {import('../.svelte-kit/types/src/core/sync/write_types/test/simple-page-shared-only/sub/$types').PageLoad} */ +/** @type {import('../.svelte-kit/types/sub/$types').PageLoad} */ export function load() { if (Math.random() > 0.5) { return { @@ -7,7 +7,7 @@ export function load() { } } -/** @type {import('../.svelte-kit/types/src/core/sync/write_types/test/simple-page-shared-only/sub/$types').PageData} */ +/** @type {import('../.svelte-kit/types/sub/$types').PageData} */ const data = /** @type {any} */ ({ foo: 'bar' }); // the any cast prevents TypeScript from narrowing this to foo being defined diff --git a/packages/kit/src/core/sync/write_types/test/slugs-layout-not-all-pages-have-load/+layout.js b/packages/kit/src/core/sync/write_types/test/slugs-layout-not-all-pages-have-load/+layout.js index f0ae674a8f07..44f1d712d137 100644 --- a/packages/kit/src/core/sync/write_types/test/slugs-layout-not-all-pages-have-load/+layout.js +++ b/packages/kit/src/core/sync/write_types/test/slugs-layout-not-all-pages-have-load/+layout.js @@ -1,4 +1,4 @@ -/** @type {import('./.svelte-kit/types/src/core/sync/write_types/test/slugs-layout-not-all-pages-have-load/$types').LayoutLoad} */ +/** @type {import('./.svelte-kit/types/$types').LayoutLoad} */ export function load({ params }) { params.rest; params.slug; diff --git a/packages/kit/src/core/sync/write_types/test/slugs-layout-not-all-pages-have-load/nested/+layout.js b/packages/kit/src/core/sync/write_types/test/slugs-layout-not-all-pages-have-load/nested/+layout.js index d41974fea45b..563f8f2c81f3 100644 --- a/packages/kit/src/core/sync/write_types/test/slugs-layout-not-all-pages-have-load/nested/+layout.js +++ b/packages/kit/src/core/sync/write_types/test/slugs-layout-not-all-pages-have-load/nested/+layout.js @@ -1,4 +1,4 @@ -/** @type {import('../.svelte-kit/types/src/core/sync/write_types/test/slugs-layout-not-all-pages-have-load/nested/$types').LayoutLoad} */ +/** @type {import('../.svelte-kit/types/nested/$types').LayoutLoad} */ export function load({ params }) { params.rest; // @ts-expect-error diff --git a/packages/kit/src/core/sync/write_types/test/slugs/+layout.js b/packages/kit/src/core/sync/write_types/test/slugs/+layout.js index 8eea8cfcc18f..88e9d5dba3cd 100644 --- a/packages/kit/src/core/sync/write_types/test/slugs/+layout.js +++ b/packages/kit/src/core/sync/write_types/test/slugs/+layout.js @@ -1,4 +1,4 @@ -/** @type {import('./.svelte-kit/types/src/core/sync/write_types/test/slugs/$types').LayoutLoad} */ +/** @type {import('./.svelte-kit/types/$types').LayoutLoad} */ export function load({ params }) { params.optional; params.rest; diff --git a/packages/kit/src/core/sync/write_types/test/slugs/[...rest]/+page.js b/packages/kit/src/core/sync/write_types/test/slugs/[...rest]/+page.js index cdebe4d37303..067a12c5c1d0 100644 --- a/packages/kit/src/core/sync/write_types/test/slugs/[...rest]/+page.js +++ b/packages/kit/src/core/sync/write_types/test/slugs/[...rest]/+page.js @@ -1,4 +1,4 @@ -/** @type {import('../.svelte-kit/types/src/core/sync/write_types/test/slugs/[...rest]/$types').PageLoad} */ +/** @type {import('../.svelte-kit/types/[...rest]/$types').PageLoad} */ export function load({ params }) { params.rest.charAt(1); // @ts-expect-error diff --git a/packages/kit/src/core/sync/write_types/test/slugs/[slug]/+page.js b/packages/kit/src/core/sync/write_types/test/slugs/[slug]/+page.js index 9a82f5ab5782..0f0777d66937 100644 --- a/packages/kit/src/core/sync/write_types/test/slugs/[slug]/+page.js +++ b/packages/kit/src/core/sync/write_types/test/slugs/[slug]/+page.js @@ -1,4 +1,4 @@ -/** @type {import('../.svelte-kit/types/src/core/sync/write_types/test/slugs/[slug]/$types').PageLoad} */ +/** @type {import('../.svelte-kit/types/[slug]/$types').PageLoad} */ export function load({ params }) { params.slug.charAt(1); // @ts-expect-error diff --git a/packages/kit/src/core/sync/write_types/test/slugs/x/[[optional]]/+page.js b/packages/kit/src/core/sync/write_types/test/slugs/x/[[optional]]/+page.js index 4085ce7295cb..55c3ddcd0ec3 100644 --- a/packages/kit/src/core/sync/write_types/test/slugs/x/[[optional]]/+page.js +++ b/packages/kit/src/core/sync/write_types/test/slugs/x/[[optional]]/+page.js @@ -1,4 +1,4 @@ -/** @type {import('../../.svelte-kit/types/src/core/sync/write_types/test/slugs/x/[[optional]]/$types').PageLoad} */ +/** @type {import('../../.svelte-kit/types/x/[[optional]]/$types').PageLoad} */ export async function load({ parent, params }) { const p = await parent(); /** @type {NonNullable} */ diff --git a/packages/kit/src/core/utils.js b/packages/kit/src/core/utils.js index ff6b7a460639..73ded00b82fb 100644 --- a/packages/kit/src/core/utils.js +++ b/packages/kit/src/core/utils.js @@ -1,6 +1,5 @@ import fs from 'node:fs'; import path from 'node:path'; -import process from 'node:process'; import { fileURLToPath } from 'node:url'; import { styleText } from 'node:util'; import { posixify, to_fs } from '../utils/filesystem.js'; @@ -19,10 +18,14 @@ export const runtime_directory = posixify(fileURLToPath(new URL('../runtime', im * This allows us to import SvelteKit internals that aren't exposed via `pkg.exports` in a * way that works whether `@sveltejs/kit` is installed inside the project's `node_modules` * or in a workspace root + * @param {string} root + * @returns {string} */ -export const runtime_base = runtime_directory.startsWith(process.cwd()) - ? `/${path.relative('.', runtime_directory)}` - : to_fs(runtime_directory); +export function get_runtime_base(root) { + return runtime_directory.startsWith(root) + ? `/${path.relative(root, runtime_directory)}` + : to_fs(runtime_directory); +} function noop() {} diff --git a/packages/kit/src/exports/vite/build/build_server.js b/packages/kit/src/exports/vite/build/build_server.js index 379e0be23e3e..10ace8a58762 100644 --- a/packages/kit/src/exports/vite/build/build_server.js +++ b/packages/kit/src/exports/vite/build/build_server.js @@ -15,6 +15,7 @@ import { fix_css_urls } from '../../../utils/css.js'; * @param {string | null} assets_path * @param {import('vite').Rollup.RollupOutput['output'] | null} client_chunks * @param {import('types').RecursiveRequired} output_config + * @param {string} root */ export function build_server_nodes( out, @@ -24,7 +25,8 @@ export function build_server_nodes( client_manifest, assets_path, client_chunks, - output_config + output_config, + root ) { mkdirp(`${out}/server/nodes`); mkdirp(`${out}/server/stylesheets`); @@ -113,7 +115,7 @@ export function build_server_nodes( exports.push( 'let component_cache;', `export const component = async () => component_cache ??= (await import('../${ - resolve_symlinks(server_manifest, node.component).chunk.file + resolve_symlinks(server_manifest, node.component, root).chunk.file }')).default;` ); } @@ -123,7 +125,7 @@ export function build_server_nodes( exports.push(`export const universal = ${s(node.page_options, null, 2)};`); } else { imports.push( - `import * as universal from '../${resolve_symlinks(server_manifest, node.universal).chunk.file}';` + `import * as universal from '../${resolve_symlinks(server_manifest, node.universal, root).chunk.file}';` ); // TODO: when building for analysis, explain why the file was loaded on the server if we fail to load it exports.push('export { universal };'); @@ -133,7 +135,7 @@ export function build_server_nodes( if (node.server) { imports.push( - `import * as server from '../${resolve_symlinks(server_manifest, node.server).chunk.file}';` + `import * as server from '../${resolve_symlinks(server_manifest, node.server, root).chunk.file}';` ); exports.push('export { server };'); exports.push(`export const server_id = ${s(node.server)};`); @@ -145,7 +147,7 @@ export function build_server_nodes( output_config.bundleStrategy === 'split' ) { const entry_path = `${normalizePath(kit.outDir)}/generated/client-optimized/nodes/${i}.js`; - const entry = find_deps(client_manifest, entry_path, true); + const entry = find_deps(client_manifest, entry_path, true, root); // Eagerly load client stylesheets and fonts imported by the SSR-ed page to avoid FOUC. // However, if it is not used during SSR (not present in the server manifest), @@ -154,13 +156,13 @@ export function build_server_nodes( /** @type {import('types').AssetDependencies | undefined} */ let component; if (node.component) { - component = find_deps(server_manifest, node.component, true); + component = find_deps(server_manifest, node.component, true, root); } /** @type {import('types').AssetDependencies | undefined} */ let universal; if (node.universal) { - universal = find_deps(server_manifest, node.universal, true); + universal = find_deps(server_manifest, node.universal, true, root); } /** @type {Set} */ diff --git a/packages/kit/src/exports/vite/build/build_service_worker.js b/packages/kit/src/exports/vite/build/build_service_worker.js index aa9b6e3a6ac1..d9ab47f331f1 100644 --- a/packages/kit/src/exports/vite/build/build_service_worker.js +++ b/packages/kit/src/exports/vite/build/build_service_worker.js @@ -1,4 +1,3 @@ -import process from 'node:process'; import * as vite from 'vite'; import { dedent } from '../../../core/sync/utils.js'; import { s } from '../../../utils/misc.js'; @@ -84,7 +83,7 @@ export async function build_service_worker( return create_static_module('$env/static/public', env.public); } - const normalized_cwd = vite.normalizePath(process.cwd()); + const normalized_cwd = vite.normalizePath(vite_config.root); const normalized_lib = vite.normalizePath(kit.files.lib); const relative = normalize_id(id, normalized_lib, normalized_cwd); const stripped = strip_virtual_prefix(relative); @@ -116,7 +115,7 @@ export async function build_service_worker( publicDir: false, plugins: [sw_virtual_modules], resolve: { - alias: [...get_config_aliases(kit)] + alias: [...get_config_aliases(kit, vite_config.root)] }, experimental: { renderBuiltUrl(filename) { diff --git a/packages/kit/src/exports/vite/build/utils.js b/packages/kit/src/exports/vite/build/utils.js index 8da2e7020c6a..86a0dd33b0b1 100644 --- a/packages/kit/src/exports/vite/build/utils.js +++ b/packages/kit/src/exports/vite/build/utils.js @@ -8,9 +8,10 @@ import { s } from '../../../utils/misc.js'; * @param {import('vite').Manifest} manifest * @param {string} entry * @param {boolean} add_dynamic_css + * @param {string} root * @returns {import('types').AssetDependencies} */ -export function find_deps(manifest, entry, add_dynamic_css) { +export function find_deps(manifest, entry, add_dynamic_css, root) { /** @type {Set} */ const seen = new Set(); @@ -36,7 +37,7 @@ export function find_deps(manifest, entry, add_dynamic_css) { if (seen.has(current)) return; seen.add(current); - const { chunk } = resolve_symlinks(manifest, current); + const { chunk } = resolve_symlinks(manifest, current, root); if (add_js) imports.add(chunk.file); @@ -82,7 +83,7 @@ export function find_deps(manifest, entry, add_dynamic_css) { } } - const { chunk, file } = resolve_symlinks(manifest, entry); + const { chunk, file } = resolve_symlinks(manifest, entry, root); traverse(file, true, entry, 0); @@ -102,10 +103,11 @@ export function find_deps(manifest, entry, add_dynamic_css) { /** * @param {import('vite').Manifest} manifest * @param {string} file + * @param {string} root */ -export function resolve_symlinks(manifest, file) { +export function resolve_symlinks(manifest, file, root) { while (!manifest[file]) { - const next = normalizePath(path.relative('.', fs.realpathSync(file))); + const next = normalizePath(path.relative(root, fs.realpathSync(file))); if (next === file) throw new Error(`Could not find file "${file}" in Vite manifest`); file = next; } diff --git a/packages/kit/src/exports/vite/dev/index.js b/packages/kit/src/exports/vite/dev/index.js index 7313f237d353..52923f56e880 100644 --- a/packages/kit/src/exports/vite/dev/index.js +++ b/packages/kit/src/exports/vite/dev/index.js @@ -1,6 +1,5 @@ import fs from 'node:fs'; import path from 'node:path'; -import process from 'node:process'; import { URL } from 'node:url'; import { AsyncLocalStorage } from 'node:async_hooks'; import { styleText } from 'node:util'; @@ -12,14 +11,13 @@ import { from_fs, posixify, resolve_entry, to_fs } from '../../../utils/filesyst import { load_error_page } from '../../../core/config/index.js'; import { SVELTE_KIT_ASSETS } from '../../../constants.js'; import * as sync from '../../../core/sync/sync.js'; -import { get_mime_lookup, runtime_base } from '../../../core/utils.js'; +import { get_mime_lookup, get_runtime_base } from '../../../core/utils.js'; import { compact } from '../../../utils/array.js'; import { not_found } from '../utils.js'; import { SCHEME } from '../../../utils/url.js'; import { check_feature } from '../../../utils/features.js'; import { escape_html } from '../../../utils/escape.js'; -const cwd = process.cwd(); // vite-specifc queries that we should skip handling for css urls const vite_css_query_regex = /(?:\?|&)(?:raw|url|inline)(?:&|$)/; @@ -28,9 +26,10 @@ const vite_css_query_regex = /(?:\?|&)(?:raw|url|inline)(?:&|$)/; * @param {import('vite').ResolvedConfig} vite_config * @param {import('types').ValidatedConfig} svelte_config * @param {() => Array<{ hash: string, file: string }>} get_remotes + * @param {string} root The project root directory * @return {Promise void>>} */ -export async function dev(vite, vite_config, svelte_config, get_remotes) { +export async function dev(vite, vite_config, svelte_config, get_remotes, root) { const async_local_storage = new AsyncLocalStorage(); globalThis.__SVELTEKIT_TRACK__ = (label) => { @@ -51,7 +50,7 @@ export async function dev(vite, vite_config, svelte_config, get_remotes) { return fetch(info, init); }; - sync.init(svelte_config, vite_config.mode); + sync.init(svelte_config, vite_config.mode, root); /** @type {import('types').ManifestData} */ let manifest_data; @@ -103,7 +102,7 @@ export async function dev(vite, vite_config, svelte_config, get_remotes) { function update_manifest() { try { - ({ manifest_data } = sync.create(svelte_config)); + ({ manifest_data } = sync.create(svelte_config, root)); if (manifest_error) { manifest_error = null; @@ -131,7 +130,7 @@ export async function dev(vite, vite_config, svelte_config, get_remotes) { mimeTypes: get_mime_lookup(manifest_data), _: { client: { - start: `${runtime_base}/client/entry.js`, + start: `${get_runtime_base(root)}/client/entry.js`, app: `${to_fs(svelte_config.kit.outDir)}/generated/client/app.js`, imports: [], stylesheets: [], @@ -274,7 +273,7 @@ export async function dev(vite, vite_config, svelte_config, get_remotes) { page: route.page, endpoint: endpoint ? async () => { - const url = path.resolve(cwd, endpoint.file); + const url = path.resolve(root, endpoint.file); return await loud_ssr_load_module(url); } : null, @@ -288,7 +287,7 @@ export async function dev(vite, vite_config, svelte_config, get_remotes) { for (const key in manifest_data.matchers) { const file = manifest_data.matchers[key]; - const url = path.resolve(cwd, file); + const url = path.resolve(root, file); const module = await vite.ssrLoadModule(url, { fixStacktrace: true }); if (module.match) { @@ -358,7 +357,7 @@ export async function dev(vite, vite_config, svelte_config, get_remotes) { // Don't run for a single file if the whole manifest is about to get updated // Unless it's a file where the trailing slash page option might have changed if (timeout || restarting || !/\+(page|layout|server).*$/.test(file)) return; - sync.update(svelte_config, manifest_data, file); + sync.update(svelte_config, manifest_data, file, root); }); const { appTemplate, errorTemplate, serviceWorker, hooks } = svelte_config.kit.files; @@ -381,7 +380,7 @@ export async function dev(vite, vite_config, svelte_config, get_remotes) { file.startsWith(serviceWorker) || file.startsWith(hooks.server) ) { - sync.server(svelte_config); + sync.server(svelte_config, root); } }); @@ -453,7 +452,9 @@ export async function dev(vite, vite_config, svelte_config, get_remotes) { }`; const decoded = decodeURI(new URL(base + req.url).pathname); - const file = posixify(path.resolve(decoded.slice(svelte_config.kit.paths.base.length + 1))); + const file = posixify( + path.resolve(root, decoded.slice(svelte_config.kit.paths.base.length + 1)) + ); const is_file = fs.existsSync(file) && !fs.statSync(file).isDirectory(); const allowed = !vite_config.server.fs.strict || @@ -496,11 +497,13 @@ export async function dev(vite, vite_config, svelte_config, get_remotes) { // we have to import `Server` before calling `set_assets` const { Server } = /** @type {import('types').ServerModule} */ ( - await vite.ssrLoadModule(`${runtime_base}/server/index.js`, { fixStacktrace: true }) + await vite.ssrLoadModule(`${get_runtime_base(root)}/server/index.js`, { + fixStacktrace: true + }) ); const { set_fix_stack_trace } = await vite.ssrLoadModule( - `${runtime_base}/shared-server.js` + `${get_runtime_base(root)}/shared-server.js` ); set_fix_stack_trace(fix_stack_trace); diff --git a/packages/kit/src/exports/vite/index.js b/packages/kit/src/exports/vite/index.js index 96ccab11bb78..162d45121dde 100644 --- a/packages/kit/src/exports/vite/index.js +++ b/packages/kit/src/exports/vite/index.js @@ -10,7 +10,6 @@ import { create_static_module, create_dynamic_module } from '../../core/env.js'; import * as sync from '../../core/sync/sync.js'; import { create_assets } from '../../core/sync/create_manifest_data/index.js'; import { runtime_directory, logger } from '../../core/utils.js'; -import { load_config } from '../../core/config/index.js'; import { generate_manifest } from '../../core/generate_manifest/index.js'; import { build_server_nodes } from './build/build_server.js'; import { build_service_worker } from './build/build_service_worker.js'; @@ -43,8 +42,12 @@ import { import { import_peer } from '../../utils/import.js'; import { compact } from '../../utils/array.js'; import { should_ignore, has_children } from './static_analysis/utils.js'; +import { load_config } from '../../core/config/index.js'; + +const cwd = process.cwd(); -const cwd = posixify(process.cwd()); +/** @type {string} */ +let root; /** @type {import('./types.js').EnforcedConfig} */ const enforced_config = { @@ -79,8 +82,7 @@ const enforced_config = { $lib: true, '$service-worker': true } - }, - root: true + } }; const options_regex = /(export\s+const\s+(prerender|csr|ssr|trailingSlash))\s*=/s; @@ -100,7 +102,7 @@ const warning_preprocessor = { const fixed = basename.replace('.svelte', '(.server).js/ts'); const message = - `\n${styleText(['bold', 'red'], path.relative('.', filename))}\n` + + `\n${styleText(['bold', 'red'], path.relative(root, filename))}\n` + `\`${match[1]}\` will be ignored — move it to ${fixed} instead. See https://svelte.dev/docs/kit/page-options for more information.`; if (!warned.has(message)) { @@ -117,7 +119,7 @@ const warning_preprocessor = { if (basename.startsWith('+layout.') && !has_children(content, true)) { const message = - `\n${styleText(['bold', 'red'], path.relative('.', filename))}\n` + + `\n${styleText(['bold', 'red'], path.relative(root, filename))}\n` + '`` or `{@render ...}` tag' + ' missing — inner content will not be rendered'; @@ -129,36 +131,88 @@ const warning_preprocessor = { } }; +/** @type {import('@sveltejs/vite-plugin-svelte')} */ +let vite_plugin_svelte; + /** * Returns the SvelteKit Vite plugins. * @returns {Promise} */ export async function sveltekit() { - const svelte_config = await load_config(); - - /** @type {import('@sveltejs/vite-plugin-svelte').Options['preprocess']} */ - let preprocess = svelte_config.preprocess; - if (Array.isArray(preprocess)) { - preprocess = [...preprocess, warning_preprocessor]; - } else if (preprocess) { - preprocess = [preprocess, warning_preprocessor]; - } else { - preprocess = warning_preprocessor; - } + // the config options will be set only after the Vite `config` hook runs + // because we need to find `svelte.config.js` relative to `vite.config.root` + const svelte_config = /** @type {import('types').ValidatedConfig} */ ({}); /** @type {import('@sveltejs/vite-plugin-svelte').Options} */ const vite_plugin_svelte_options = { - configFile: false, - extensions: svelte_config.extensions, - preprocess, - onwarn: svelte_config.onwarn, - compilerOptions: { ...svelte_config.compilerOptions }, - ...svelte_config.vitePlugin + // we don't want vite-plugin-svelte to load the config file itself because + // it will try to validate it without knowing that kit options are valid + configFile: false }; - const { svelte } = await import_peer('@sveltejs/vite-plugin-svelte'); + /** @type {import('@sveltejs/vite-plugin-svelte')} */ + vite_plugin_svelte = await import_peer('@sveltejs/vite-plugin-svelte', cwd); + + return [ + plugin_svelte_config({ vite_plugin_svelte_options, svelte_config }), + ...vite_plugin_svelte.svelte(vite_plugin_svelte_options), + ...kit({ svelte_config }) + ]; +} - return [...svelte(vite_plugin_svelte_options), ...(await kit({ svelte_config }))]; +/** @param {import('vite').UserConfig | import('vite').ResolvedConfig} vite_config */ +function resolve_root(vite_config) { + return posixify(vite_config.root ? path.resolve(vite_config.root) : cwd); +} + +/** + * Resolves the Svelte config using the `vite.config.root` setting before any + * of our other plugins try to access the config objects + * @param {{ + * vite_plugin_svelte_options: import('@sveltejs/vite-plugin-svelte').Options; + * svelte_config: import('types').ValidatedConfig; + * }} options + * @return {import('vite').Plugin} + */ +function plugin_svelte_config({ vite_plugin_svelte_options, svelte_config }) { + return { + name: 'vite-plugin-sveltekit-resolve-svelte-config', + // make sure it runs first + enforce: 'pre', + config: { + order: 'pre', + async handler(config) { + root = resolve_root(config); + + const user_svelte_config = await load_config({ cwd: root }); + + /** @type {import('@sveltejs/vite-plugin-svelte').Options['preprocess']} */ + let preprocess = user_svelte_config.preprocess; + if (Array.isArray(preprocess)) { + preprocess = [...preprocess, warning_preprocessor]; + } else if (preprocess) { + preprocess = [preprocess, warning_preprocessor]; + } else { + preprocess = warning_preprocessor; + } + + vite_plugin_svelte_options.extensions = user_svelte_config.extensions; + vite_plugin_svelte_options.preprocess = preprocess; + vite_plugin_svelte_options.onwarn = user_svelte_config.onwarn; + vite_plugin_svelte_options.compilerOptions = { ...user_svelte_config.compilerOptions }; + Object.assign(vite_plugin_svelte_options, user_svelte_config.vitePlugin); + + Object.assign(svelte_config, user_svelte_config); + } + }, + // TODO: do we even need to set `root` based on the final Vite config? + configResolved: { + order: 'pre', + handler(config) { + root = resolve_root(config); + } + } + }; } // These variables live outside the `kit()` function because it is re-invoked by each Vite build @@ -171,15 +225,6 @@ let manifest_data; /** @type {import('types').ServerMetadata | undefined} only set at build time once analysis is finished */ let build_metadata = undefined; -/** - * TODO: SvelteKit 4 - replace with RegExp.escape - available only in Node 24 - * @param {string} str - * @returns - */ -const reg_exp_escape = function (str) { - return str.replace(/[-[\]{}()*+!<=:?.\\/\\^$|#\s,]/g, '\\$&'); -}; - /** * Returns the SvelteKit Vite plugin. Vite executes Rollup hooks as well as some of its own. * Background reading is available at: @@ -191,16 +236,19 @@ const reg_exp_escape = function (str) { * - https://rollupjs.org/guide/en/#output-generation-hooks * * @param {{ svelte_config: import('types').ValidatedConfig }} options - * @return {Promise} + * @return {import('vite').Plugin[]} */ -async function kit({ svelte_config }) { +function kit({ svelte_config }) { /** @type {import('vite')} */ - const vite = await import_peer('vite'); + let vite; - const { kit } = svelte_config; - const out = `${kit.outDir}/output`; + /** @type {import('types').ValidatedKitConfig} */ + let kit; + /** @type {string} */ + let out; - const version_hash = hash(kit.version.name); + /** @type {string} */ + let version_hash; /** @type {import('vite').ResolvedConfig} */ let vite_config; @@ -220,13 +268,17 @@ async function kit({ svelte_config }) { /** @type {import('vite').UserConfig} */ let initial_config; - const service_worker_entry_file = resolve_entry(kit.files.serviceWorker); - const parsed_service_worker = path.parse(kit.files.serviceWorker); - - const normalized_cwd = vite.normalizePath(cwd); - const normalized_lib = vite.normalizePath(kit.files.lib); - const normalized_node_modules = vite.normalizePath(path.resolve('node_modules')); - + /** @type {string | null} */ + let service_worker_entry_file; + /** @type {import('node:path').ParsedPath} */ + let parsed_service_worker; + + /** @type {string} */ + let normalized_cwd; + /** @type {string} */ + let normalized_lib; + /** @type {string} */ + let normalized_node_modules; /** * A map showing which features (such as `$app/server:read`) are defined * in which chunks, so that we can later determine which routes use which features @@ -240,25 +292,38 @@ async function kit({ svelte_config }) { /** @type {import('vite').Plugin} */ const plugin_setup = { name: 'vite-plugin-sveltekit-setup', - /** * Build the SvelteKit-provided Vite config to be merged with the user's vite.config.js file. * @see https://vitejs.dev/guide/api-plugin.html#config */ - config(config, config_env) { + async config(config, config_env) { initial_config = config; vite_config_env = config_env; is_build = config_env.command === 'build'; + ({ kit } = svelte_config); + out = `${kit.outDir}/output`; + + version_hash = hash(kit.version.name); + env = get_env(kit.env, vite_config_env.mode); + service_worker_entry_file = resolve_entry(kit.files.serviceWorker); + parsed_service_worker = path.parse(kit.files.serviceWorker); + + vite = await import_peer('vite', root); + + normalized_cwd = vite.normalizePath(root); + normalized_lib = vite.normalizePath(kit.files.lib); + normalized_node_modules = vite.normalizePath(path.resolve(root, 'node_modules')); + const allow = new Set([ kit.files.lib, kit.files.routes, kit.outDir, - path.resolve('src'), // TODO this isn't correct if user changed all his files to sth else than src (like in test/options) - path.resolve('node_modules'), - path.resolve(vite.searchForWorkspaceRoot(cwd), 'node_modules') + path.resolve(root, kit.files.src), + path.resolve(root, 'node_modules'), + path.resolve(cwd, 'node_modules') ]); // We can only add directories to the allow list, so we find out @@ -275,10 +340,9 @@ async function kit({ svelte_config }) { alias: [ { find: '__SERVER__', replacement: `${generated}/server` }, { find: '$app', replacement: `${runtime_directory}/app` }, - ...get_config_aliases(kit) + ...get_config_aliases(kit, root) ] }, - root: cwd, server: { cors: { preflightContinue: true }, fs: { @@ -375,7 +439,7 @@ async function kit({ svelte_config }) { }; if (!secondary_build_started) { - manifest_data = sync.all(svelte_config, config_env.mode).manifest_data; + manifest_data = sync.all(svelte_config, config_env.mode, root).manifest_data; // During the initial server build we don't know yet new_config.define.__SVELTEKIT_HAS_SERVER_LOAD__ = 'true'; new_config.define.__SVELTEKIT_HAS_UNIVERSAL_LOAD__ = 'true'; @@ -491,7 +555,8 @@ async function kit({ svelte_config }) { case env_dynamic_private: return create_dynamic_module( 'private', - vite_config_env.command === 'serve' ? env.private : undefined + vite_config_env.command === 'serve' ? env.private : undefined, + root ); case env_dynamic_public: { @@ -506,7 +571,8 @@ async function kit({ svelte_config }) { return create_dynamic_module( 'public', - vite_config_env.command === 'serve' ? env.public : undefined + vite_config_env.command === 'serve' ? env.public : undefined, + root ); } @@ -605,15 +671,8 @@ async function kit({ svelte_config }) { exactRegex(env_static_private), exactRegex(env_dynamic_private), exactRegex(app_server), - prefixRegex(`${normalized_lib}/server/`), - // skip .server.js files outside the cwd or in node_modules, as the filename might not mean 'server-only module' in this context - // should be equivalent to: (id.startsWith(normalized_cwd) && !id.startsWith(normalized_node_modules) && server_only_pattern.test(path.basename(id)) - // TODO: address https://github.com/sveltejs/kit/issues/12529 - // if we decide to do it then remove the CWD portion of the regex - // if we decide not to do it then this regex is complicated enough that it should be refactored out and independently tested - new RegExp( - `^(?!${reg_exp_escape(normalized_node_modules)})${reg_exp_escape(normalized_cwd)}${server_only_pattern.source}$` - ) + /\/server\//, + new RegExp(`${server_only_pattern.source}$`) ] }, handler(id, options) { @@ -622,8 +681,27 @@ async function kit({ svelte_config }) { return; } + // skip .server.js files outside the cwd or in node_modules, as the filename might not mean 'server-only module' in this context + const is_internal = + id.startsWith(normalized_cwd) && !id.startsWith(normalized_node_modules); + + const normalized = normalize_id(id, normalized_lib, normalized_cwd); + + const is_server_only = + normalized === '$env/static/private' || + normalized === '$env/dynamic/private' || + normalized === '$app/server' || + normalized.startsWith('$lib/server/') || + (is_internal && server_only_pattern.test(path.basename(id))); + + // skip .server.js files outside the cwd or in node_modules, as the filename might not mean 'server-only module' in this context + // TODO: address https://github.com/sveltejs/kit/issues/12529 + if (!is_server_only) { + return; + } + // in dev, this doesn't exist, so we need to create it - manifest_data ??= sync.all(svelte_config, vite_config_env.mode).manifest_data; + manifest_data ??= sync.all(svelte_config, vite_config_env.mode, root).manifest_data; /** @type {Set} */ const entrypoints = new Set(); @@ -635,7 +713,6 @@ async function kit({ svelte_config }) { if (manifest_data.hooks.client) entrypoints.add(manifest_data.hooks.client); if (manifest_data.hooks.universal) entrypoints.add(manifest_data.hooks.universal); - const normalized = normalize_id(id, normalized_lib, normalized_cwd); const chain = [normalized]; let current = normalized; @@ -716,6 +793,10 @@ async function kit({ svelte_config }) { id: prefixRegex('\0sveltekit-remote:') }, handler(id) { + if (!kit.experimental.remoteFunctions) { + return null; + } + // On-the-fly generated entry point for remote file just forwards the original module // We're not using manualChunks because it can cause problems with circular dependencies // (e.g. https://github.com/sveltejs/kit/issues/14679) and module ordering in general @@ -728,35 +809,42 @@ async function kit({ svelte_config }) { }, configureServer(_dev_server) { + if (!kit.experimental.remoteFunctions) { + return; + } + dev_server = _dev_server; }, - transform: { - filter: { - id: new RegExp( - `\\.remote(?:${svelte_config.kit.moduleExtensions.map((e) => e.replaceAll('.', '\\.')).join('|')})(?:\\?.*)?$` - ) - }, - async handler(code, id, opts) { - const file = posixify(path.relative(cwd, id)); - const remote = { - hash: hash(file), - file - }; + async transform(code, id, opts) { + if (!kit.experimental.remoteFunctions) { + return; + } - remotes.push(remote); + const normalized = normalize_id(id, normalized_lib, normalized_cwd); + if (!svelte_config.kit.moduleExtensions.some((ext) => normalized.endsWith(`.remote${ext}`))) { + return; + } + + const file = posixify(path.relative(root, id)); + const remote = { + hash: hash(file), + file + }; - if (opts?.ssr) { - // we need to add an `await Promise.resolve()` because if the user imports this function - // on the client AND in a load function when loading the client module we will trigger - // an ssrLoadModule during dev. During a link preload, the module can be mistakenly - // loaded and transformed twice and the first time all its exports would be undefined - // triggering a dev server error. By adding a microtask we ensure that the module is fully loaded + remotes.push(remote); - // Extra newlines to prevent syntax errors around missing semicolons or comments - code += - '\n\n' + - dedent` + if (opts?.ssr) { + // we need to add an `await Promise.resolve()` because if the user imports this function + // on the client AND in a load function when loading the client module we will trigger + // an ssrLoadModule during dev. During a link preload, the module can be mistakenly + // loaded and transformed twice and the first time all its exports would be undefined + // triggering a dev server error. By adding a microtask we ensure that the module is fully loaded + + // Extra newlines to prevent syntax errors around missing semicolons or comments + code += + '\n\n' + + dedent` import * as $$_self_$$ from './${path.basename(id)}'; import { init_remote_functions as $$_init_$$ } from '@sveltejs/kit/internal'; @@ -770,70 +858,69 @@ async function kit({ svelte_config }) { } `; - // Emit a dedicated entry chunk for this remote in SSR builds (prod only) - if (!dev_server) { - remote_original_by_hash.set(remote.hash, id); - if (!emitted_remote_hashes.has(remote.hash)) { - this.emitFile({ - type: 'chunk', - id: `\0sveltekit-remote:${remote.hash}`, - name: `remote-${remote.hash}` - }); - emitted_remote_hashes.add(remote.hash); - } + // Emit a dedicated entry chunk for this remote in SSR builds (prod only) + if (!dev_server) { + remote_original_by_hash.set(remote.hash, id); + if (!emitted_remote_hashes.has(remote.hash)) { + this.emitFile({ + type: 'chunk', + id: `\0sveltekit-remote:${remote.hash}`, + name: `remote-${remote.hash}` + }); + emitted_remote_hashes.add(remote.hash); } - - return code; } - // For the client, read the exports and create a new module that only contains fetch functions with the correct metadata + return code; + } - /** @type {Map} */ - const map = new Map(); + // For the client, read the exports and create a new module that only contains fetch functions with the correct metadata - // in dev, load the server module here (which will result in this hook - // being called again with `opts.ssr === true` if the module isn't - // already loaded) so we can determine what it exports - if (dev_server) { - const module = await dev_server.ssrLoadModule(id); + /** @type {Map} */ + const map = new Map(); - for (const [name, value] of Object.entries(module)) { - const type = value?.__?.type; - if (type) { - map.set(name, type); - } + // in dev, load the server module here (which will result in this hook + // being called again with `opts.ssr === true` if the module isn't + // already loaded) so we can determine what it exports + if (dev_server) { + const module = await dev_server.ssrLoadModule(id); + + for (const [name, value] of Object.entries(module)) { + const type = value?.__?.type; + if (type) { + map.set(name, type); } } + } - // in prod, we already built and analysed the server code before - // building the client code, so `remote_exports` is populated - else if (build_metadata?.remotes) { - const exports = build_metadata?.remotes.get(remote.hash); - if (!exports) throw new Error('Expected to find metadata for remote file ' + id); + // in prod, we already built and analysed the server code before + // building the client code, so `remote_exports` is populated + else if (build_metadata?.remotes) { + const exports = build_metadata?.remotes.get(remote.hash); + if (!exports) throw new Error('Expected to find metadata for remote file ' + id); - for (const [name, value] of exports) { - map.set(name, value.type); - } + for (const [name, value] of exports) { + map.set(name, value.type); } + } - let namespace = '__remote'; - let uid = 1; - while (map.has(namespace)) namespace = `__remote${uid++}`; + let namespace = '__remote'; + let uid = 1; + while (map.has(namespace)) namespace = `__remote${uid++}`; - const exports = Array.from(map).map(([name, type]) => { - return `export const ${name} = ${namespace}.${type}('${remote.hash}/${name}');`; - }); - - let result = `import * as ${namespace} from '__sveltekit/remote';\n\n${exports.join('\n')}\n`; + const exports = Array.from(map).map(([name, type]) => { + return `export const ${name} = ${namespace}.${type}('${remote.hash}/${name}');`; + }); - if (dev_server) { - result += `\nimport.meta.hot?.accept();\n`; - } + let result = `import * as ${namespace} from '__sveltekit/remote';\n\n${exports.join('\n')}\n`; - return { - code: result - }; + if (dev_server) { + result += `\nimport.meta.hot?.accept();\n`; } + + return { + code: result + }; } }; @@ -866,7 +953,7 @@ async function kit({ svelte_config }) { // add entry points for every endpoint... manifest_data.routes.forEach((route) => { if (route.endpoint) { - const resolved = path.resolve(route.endpoint.file); + const resolved = path.resolve(root, route.endpoint.file); const relative = decodeURIComponent(path.relative(kit.files.routes, resolved)); const name = posixify(path.join('entries/endpoints', relative.replace(/\.js$/, ''))); input[name] = resolved; @@ -877,7 +964,7 @@ async function kit({ svelte_config }) { manifest_data.nodes.forEach((node) => { for (const file of [node.component, node.universal, node.server]) { if (file) { - const resolved = path.resolve(file); + const resolved = path.resolve(root, file); const relative = decodeURIComponent(path.relative(kit.files.routes, resolved)); const name = relative.startsWith('..') @@ -891,15 +978,15 @@ async function kit({ svelte_config }) { // ...and every matcher Object.entries(manifest_data.matchers).forEach(([key, file]) => { const name = posixify(path.join('entries/matchers', key)); - input[name] = path.resolve(file); + input[name] = path.resolve(root, file); }); // ...and the hooks files if (manifest_data.hooks.server) { - input['entries/hooks.server'] = path.resolve(manifest_data.hooks.server); + input['entries/hooks.server'] = path.resolve(root, manifest_data.hooks.server); } if (manifest_data.hooks.universal) { - input['entries/hooks.universal'] = path.resolve(manifest_data.hooks.universal); + input['entries/hooks.universal'] = path.resolve(root, manifest_data.hooks.universal); } // ...and the server instrumentation file @@ -1016,7 +1103,7 @@ async function kit({ svelte_config }) { * @see https://vitejs.dev/guide/api-plugin.html#configureserver */ async configureServer(vite) { - return await dev(vite, vite_config, svelte_config, () => remotes); + return await dev(vite, vite_config, svelte_config, () => remotes, root); }, /** @@ -1100,7 +1187,8 @@ async function kit({ svelte_config }) { prerendered: [], relative_path: '.', routes: manifest_data.routes, - remotes + remotes, + root })};\n` ); @@ -1115,7 +1203,8 @@ async function kit({ svelte_config }) { env: { ...env.private, ...env.public }, out, output_config: svelte_config.output, - remotes + remotes, + root }); build_metadata = metadata; @@ -1210,7 +1299,7 @@ async function kit({ svelte_config }) { * @param {boolean} [add_dynamic_css] */ const deps_of = (entry, add_dynamic_css = false) => - find_deps(client_manifest, posixify(path.relative('.', entry)), add_dynamic_css); + find_deps(client_manifest, posixify(path.relative(root, entry)), add_dynamic_css, root); if (svelte_config.kit.output.bundleStrategy === 'split') { const start = deps_of(`${runtime_directory}/client/entry.js`); @@ -1237,7 +1326,8 @@ async function kit({ svelte_config }) { const deps = deps_of(entry, true); const file = resolve_symlinks( client_manifest, - `${kit.outDir}/generated/client-optimized/nodes/${i}.js` + `${kit.outDir}/generated/client-optimized/nodes/${i}.js`, + root ).chunk.file; return { file, css: deps.stylesheets }; @@ -1301,7 +1391,8 @@ async function kit({ svelte_config }) { prerendered: [], relative_path: '.', routes: manifest_data.routes, - remotes + remotes, + root })};\n` ); @@ -1314,7 +1405,8 @@ async function kit({ svelte_config }) { client_manifest, assets_path, client_chunks, - svelte_config.kit.output + svelte_config.kit.output, + root ); // ...and prerender @@ -1324,7 +1416,8 @@ async function kit({ svelte_config }) { manifest_path, metadata, verbose, - env: { ...env.private, ...env.public } + env: { ...env.private, ...env.public }, + root }); // generate a new manifest that doesn't include prerendered pages @@ -1335,7 +1428,8 @@ async function kit({ svelte_config }) { prerendered: prerendered.paths, relative_path: '.', routes: manifest_data.routes.filter((route) => prerender_map.get(route.id) !== true), - remotes + remotes, + root })};\n` ); @@ -1408,13 +1502,9 @@ async function kit({ svelte_config }) { } }; - return [ - plugin_setup, - kit.experimental.remoteFunctions && plugin_remote, - plugin_virtual_modules, - plugin_guard, - plugin_compile - ].filter((p) => !!p); + return [plugin_setup, plugin_remote, plugin_virtual_modules, plugin_guard, plugin_compile].filter( + (p) => !!p + ); } /** diff --git a/packages/kit/src/exports/vite/static_analysis/index.js b/packages/kit/src/exports/vite/static_analysis/index.js index 6d4248032da5..015a58c45b84 100644 --- a/packages/kit/src/exports/vite/static_analysis/index.js +++ b/packages/kit/src/exports/vite/static_analysis/index.js @@ -1,3 +1,4 @@ +import path from 'node:path'; import { tsPlugin } from '@sveltejs/acorn-typescript'; import { Parser } from 'acorn'; import { read } from '../../../utils/filesystem.js'; @@ -213,11 +214,13 @@ function get_name(node) { /** * Reads and statically analyses a file for page options * @param {string} filepath + * @param {string} root The project root directory * @returns {PageOptions | null} Returns the page options for the file or `null` if unanalysable */ -export function get_page_options(filepath) { +export function get_page_options(filepath, root) { + const input = read(path.resolve(root, filepath)); + try { - const input = read(filepath); const page_options = statically_analyse_page_options(filepath, input); if (page_options === null) { return null; @@ -229,7 +232,10 @@ export function get_page_options(filepath) { } } -export function create_node_analyser() { +/** + * @param {string} root + */ +export function create_node_analyser(root) { const static_exports = new Map(); /** @@ -273,7 +279,7 @@ export function create_node_analyser() { } if (node.server) { - const server_page_options = get_page_options(node.server); + const server_page_options = get_page_options(node.server, root); if (server_page_options === null) { cache(key, null); return null; @@ -282,7 +288,7 @@ export function create_node_analyser() { } if (node.universal) { - const universal_page_options = get_page_options(node.universal); + const universal_page_options = get_page_options(node.universal, root); if (universal_page_options === null) { cache(key, null); return null; diff --git a/packages/kit/src/exports/vite/utils.js b/packages/kit/src/exports/vite/utils.js index 77743bda77c9..117ce6575c15 100644 --- a/packages/kit/src/exports/vite/utils.js +++ b/packages/kit/src/exports/vite/utils.js @@ -20,8 +20,9 @@ import { * Related to tsconfig path alias creation. * * @param {import('types').ValidatedKitConfig} config + * @param {string} root * */ -export function get_config_aliases(config) { +export function get_config_aliases(config, root) { /** @type {import('vite').Alias[]} */ const alias = [ // For now, we handle `$lib` specially here rather than make it a default value for @@ -38,16 +39,16 @@ export function get_config_aliases(config) { // Doing just `{ find: key.slice(0, -2) ,..}` would mean `import .. from "key"` would also be matched, which we don't want alias.push({ find: new RegExp(`^${escape_for_regexp(key.slice(0, -2))}\\/(.+)$`), - replacement: `${path.resolve(value)}/$1` + replacement: `${path.resolve(root, value)}/$1` }); } else if (key + '/*' in config.alias) { // key and key/* both exist -> the replacement for key needs to happen _only_ on import .. from "key" alias.push({ find: new RegExp(`^${escape_for_regexp(key)}$`), - replacement: path.resolve(value) + replacement: path.resolve(root, value) }); } else { - alias.push({ find: key, replacement: path.resolve(value) }); + alias.push({ find: key, replacement: path.resolve(root, value) }); } } diff --git a/packages/kit/src/exports/vite/utils.spec.js b/packages/kit/src/exports/vite/utils.spec.js index 90c9ee0c91e1..7878487573fe 100644 --- a/packages/kit/src/exports/vite/utils.spec.js +++ b/packages/kit/src/exports/vite/utils.spec.js @@ -18,7 +18,7 @@ test('transform kit.alias to resolve.alias', () => { } }); - const aliases = get_config_aliases(config.kit); + const aliases = get_config_aliases(config.kit, '.'); const transformed = aliases.map((entry) => { const replacement = posixify(path.relative('.', entry.replacement)); diff --git a/packages/kit/src/runtime/server/utils.js b/packages/kit/src/runtime/server/utils.js index 3394bb038070..2257328df8d4 100644 --- a/packages/kit/src/runtime/server/utils.js +++ b/packages/kit/src/runtime/server/utils.js @@ -223,9 +223,8 @@ let relative = (file) => file; if (DEV) { try { const path = await import('node:path'); - const process = await import('node:process'); - relative = (file) => path.relative(process.cwd(), file); + relative = (file) => path.relative('.', file); } catch { // do nothing } diff --git a/packages/kit/src/utils/import.js b/packages/kit/src/utils/import.js index 3ed96fa46484..da80140d9b19 100644 --- a/packages/kit/src/utils/import.js +++ b/packages/kit/src/utils/import.js @@ -1,16 +1,16 @@ -import process from 'node:process'; import fs from 'node:fs'; import path from 'node:path'; /** - * Resolves a peer dependency relative to the current CWD. Duplicated with `packages/adapter-auto` + * Resolves a peer dependency relative to the current working directory. Duplicated with `packages/adapter-auto` * @param {string} dependency + * @param {string} root */ -function resolve_peer(dependency) { +function resolve_peer(dependency, root) { let [name, ...parts] = dependency.split('/'); if (name[0] === '@') name += `/${parts.shift()}`; - let dir = process.cwd(); + let dir = root; while (!fs.existsSync(`${dir}/node_modules/${name}/package.json`)) { if (dir === (dir = path.dirname(dir))) { @@ -42,10 +42,11 @@ function resolve_peer(dependency) { * Resolve a dependency relative to the current working directory, * rather than relative to this package (but falls back to trying that, if necessary) * @param {string} dependency + * @param {string} root */ -export async function import_peer(dependency) { +export async function import_peer(dependency, root) { try { - return await import(resolve_peer(dependency)); + return await import(resolve_peer(dependency, root)); } catch { return await import(dependency); } diff --git a/packages/kit/src/version.spec.js b/packages/kit/src/version.spec.js index fa44692da9ff..fd4073523494 100644 --- a/packages/kit/src/version.spec.js +++ b/packages/kit/src/version.spec.js @@ -4,16 +4,18 @@ import { assert, describe, it } from 'vitest'; // runs the version generation as a side-effect of importing import '../scripts/generate-version.js'; +import { join } from 'node:path'; -describe('@sveltejs/kit VERSION', async () => { - it('should be the exact version from package.json'); - const { VERSION } = await import('./version.js'); - const pkg = JSON.parse( - readFileSync(fileURLToPath(new URL('../package.json', import.meta.url)), 'utf-8') - ); - assert.equal( - VERSION, - pkg.version, - 'VERSION export in src/version.js does not equal version in package.json' - ); +describe('@sveltejs/kit VERSION', () => { + it('should be the exact version from package.json', async () => { + const { VERSION } = await import(join(import.meta.dirname, 'version.js')); + const pkg = JSON.parse( + readFileSync(fileURLToPath(new URL('../package.json', import.meta.url)), 'utf-8') + ); + assert.equal( + VERSION, + pkg.version, + 'VERSION export in src/version.js does not equal version in package.json' + ); + }); }); diff --git a/packages/kit/test/apps/basics/svelte.config.js b/packages/kit/test/apps/basics/svelte.config.js index 8630e784a24d..61af6dff4fd5 100644 --- a/packages/kit/test/apps/basics/svelte.config.js +++ b/packages/kit/test/apps/basics/svelte.config.js @@ -72,6 +72,12 @@ const config = { router: { resolution: /** @type {'client' | 'server'} */ (process.env.ROUTER_RESOLUTION) || 'client' + }, + + typescript: { + config: (config) => { + config.include.push('../unit-test'); + } } }, diff --git a/packages/kit/test/apps/basics/vite.config.js b/packages/kit/test/apps/basics/vite.config.js index 7352ce2054df..415957fac6da 100644 --- a/packages/kit/test/apps/basics/vite.config.js +++ b/packages/kit/test/apps/basics/vite.config.js @@ -21,20 +21,12 @@ export default defineConfig({ }, test: { expect: { requireAssertions: true }, - projects: [ - { - extends: './vite.config.js', - test: { - name: 'client', - browser: { - enabled: true, - provider: playwright(), - instances: [{ browser: 'chromium' }], - headless: true - }, - include: ['unit-test/**/*.spec.js'] - } - } - ] + browser: { + enabled: true, + provider: playwright(), + instances: [{ browser: 'chromium' }], + headless: true + }, + include: ['unit-test/**/*.spec.js'] } }); diff --git a/packages/kit/test/build-errors/vitest.config.js b/packages/kit/test/build-errors/vitest.config.js new file mode 100644 index 000000000000..a15b3a470a6d --- /dev/null +++ b/packages/kit/test/build-errors/vitest.config.js @@ -0,0 +1,5 @@ +// we need this file to prevent Vitest from resolving a Vitest config from another directory + +import { defineConfig } from 'vitest/config'; + +export default defineConfig({}); diff --git a/packages/kit/test/prerendering/basics/globalSetup.js b/packages/kit/test/prerendering/basics/globalSetup.js index 3175a7093312..240a2e05bc8e 100644 --- a/packages/kit/test/prerendering/basics/globalSetup.js +++ b/packages/kit/test/prerendering/basics/globalSetup.js @@ -1,5 +1,5 @@ import { execSync } from 'node:child_process'; export default function setup() { - execSync('svelte-kit sync && pnpm run build'); + execSync('svelte-kit sync && pnpm run build', { cwd: import.meta.dirname }); } diff --git a/packages/kit/test/prerendering/basics/vite.config.js b/packages/kit/test/prerendering/basics/vite.config.js index 701326176284..253a50dc5b65 100644 --- a/packages/kit/test/prerendering/basics/vite.config.js +++ b/packages/kit/test/prerendering/basics/vite.config.js @@ -24,7 +24,7 @@ const config = { }, test: { - globalSetup: './globalSetup.js' + globalSetup: path.join(import.meta.dirname, 'globalSetup.js') } }; diff --git a/packages/package/vitest.config.js b/packages/package/vitest.config.js new file mode 100644 index 000000000000..a15b3a470a6d --- /dev/null +++ b/packages/package/vitest.config.js @@ -0,0 +1,5 @@ +// we need this file to prevent Vitest from resolving a Vitest config from another directory + +import { defineConfig } from 'vitest/config'; + +export default defineConfig({}); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 11c19e3c5b47..be5c5d189b12 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -134,6 +134,9 @@ importers: prettier-plugin-svelte: specifier: 'catalog:' version: 3.5.1(prettier@3.8.1)(svelte@5.53.5) + vitest: + specifier: 'catalog:' + version: 4.1.0-beta.4(@opentelemetry/api@1.9.0)(@types/node@24.10.13)(@vitest/browser-playwright@4.1.0-beta.4)(vite@8.0.0-beta.15(@types/node@24.10.13)(esbuild@0.27.3)(jiti@2.4.2)(yaml@2.8.0)) packages/adapter-auto: devDependencies: diff --git a/scripts/sync-all.js b/scripts/sync-all.js index 08cf8bcf808c..b6d0e9876ce4 100644 --- a/scripts/sync-all.js +++ b/scripts/sync-all.js @@ -14,12 +14,12 @@ for (const directories of [ for (const dir of fs.readdirSync(directories)) { const cwd = path.join(directories, dir); - if (!fs.existsSync(path.join(cwd,'svelte.config.js'))) { + if (!fs.existsSync(path.join(cwd, 'svelte.config.js'))) { continue; } chdir(cwd); - syncAll(await load_config({ cwd }), 'development'); + syncAll(await load_config({ cwd }), 'development', cwd); } } diff --git a/tsconfig.json b/tsconfig.json index d7ccc88d75da..451d37bf30b3 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -6,5 +6,5 @@ "target": "ESNext", "moduleResolution": "bundler" }, - "include": ["eslint.config.js", ".eslint/*.js", "scripts"] + "include": ["eslint.config.js", ".eslint/*.js", "scripts", "vitest.config.js"] } diff --git a/vitest.config.js b/vitest.config.js new file mode 100644 index 000000000000..36b774f3b08c --- /dev/null +++ b/vitest.config.js @@ -0,0 +1,28 @@ +import { defineConfig } from 'vitest/config'; + +export default defineConfig({ + test: { + projects: [ + 'packages/*', + // prevent Vitest from crawling nested Vite apps in the kit test directory + // which do not use Vitest but have a vite.config.js file + '!packages/kit', + { + extends: 'packages/kit/kit.vitest.config.js', + root: 'packages/kit' + }, + { + extends: 'packages/kit/test/apps/basics/vite.config.js', + root: 'packages/kit/test/apps/basics' + }, + 'packages/kit/test/build-errors', + { + extends: 'packages/kit/test/prerendering/basics/vite.config.js', + root: 'packages/kit/test/prerendering/basics', + test: { + name: 'kit-prerendering-basics' + } + } + ] + } +}); From 669f4fd691b27a0de33aa27f18abd6e1a8b813df Mon Sep 17 00:00:00 2001 From: Tee Ming Date: Fri, 6 Mar 2026 10:33:44 +0800 Subject: [PATCH 042/545] chore: remove Node 18 workarounds (#15498) --- packages/enhanced-img/src/vite-plugin.js | 2 +- packages/enhanced-img/test/apps/basics/test/test.js | 5 +---- packages/enhanced-img/test/utils.js | 13 ++++--------- 3 files changed, 6 insertions(+), 14 deletions(-) diff --git a/packages/enhanced-img/src/vite-plugin.js b/packages/enhanced-img/src/vite-plugin.js index c8ccb26b3f17..105a1651acbf 100644 --- a/packages/enhanced-img/src/vite-plugin.js +++ b/packages/enhanced-img/src/vite-plugin.js @@ -33,7 +33,7 @@ export function image_plugin(imagetools_plugin) { } const api = svelteConfigPlugin.api; // @ts-expect-error plugin.transform is defined below before configResolved is called - plugin.transform.filter.id = (api.filter ?? api.idFilter).id; // TODO: idFilter was used by earlier versions of vite-plugin-svelte@6, remove when @7 is required + plugin.transform.filter.id = api.filter.id; }, transform: { order: 'pre', // puts it before vite-plugin-svelte:compile diff --git a/packages/enhanced-img/test/apps/basics/test/test.js b/packages/enhanced-img/test/apps/basics/test/test.js index 4644464605ff..d8bb982bbea6 100644 --- a/packages/enhanced-img/test/apps/basics/test/test.js +++ b/packages/enhanced-img/test/apps/basics/test/test.js @@ -1,8 +1,5 @@ import { expect, test } from '@playwright/test'; -import process from 'node:process'; -const is_node18 = process.versions.node.startsWith('18.'); -// TODO: remove with SvelteKit 3 -test.skip(is_node18, 'enhanced-img requires vite-plugin-svelte@6 which requires node20'); + test('images are properly rendered', async ({ page }) => { await page.goto('/'); diff --git a/packages/enhanced-img/test/utils.js b/packages/enhanced-img/test/utils.js index 3417a89c55f4..66d9762807b2 100644 --- a/packages/enhanced-img/test/utils.js +++ b/packages/enhanced-img/test/utils.js @@ -2,20 +2,15 @@ import { devices } from '@playwright/test'; import process from 'node:process'; import { number_from_env } from '../../../test-utils/index.js'; -// TODO: remove with SvelteKit 3 -const is_node18 = process.versions.node.startsWith('18.'); /** @type {import('@playwright/test').PlaywrightTestConfig} */ export const config = { forbidOnly: !!process.env.CI, // generous timeouts on CI timeout: process.env.CI ? 45000 : 15000, - webServer: is_node18 - ? undefined - : { - // do not try to build on node18 - command: 'pnpm build && pnpm preview', - port: 4173 - }, + webServer: { + command: 'pnpm build && pnpm preview', + port: 4173 + }, retries: process.env.CI ? 2 : number_from_env('KIT_E2E_RETRIES', 0), projects: [ { From 8c288dca4456923b2d932e14a6aa3408b9db81d8 Mon Sep 17 00:00:00 2001 From: Tee Ming Date: Sat, 7 Mar 2026 21:37:42 +0800 Subject: [PATCH 043/545] fix lint after merge --- packages/kit/src/core/config/options.js | 36 ++++++++++++------------- 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/packages/kit/src/core/config/options.js b/packages/kit/src/core/config/options.js index b991554aadf3..ca3c9d34c787 100644 --- a/packages/kit/src/core/config/options.js +++ b/packages/kit/src/core/config/options.js @@ -317,24 +317,24 @@ const options = object( true ); -/** - * @param {Validator} fn - * @param {(keypath: string) => string} get_message - * @returns {Validator} - */ -function deprecate( - fn, - get_message = (keypath) => - `The \`${keypath}\` option is deprecated, and will be removed in a future version` -) { - return (input, keypath) => { - if (input !== undefined) { - console.warn(styleText(['bold', 'yellow'], get_message(keypath))); - } - - return fn(input, keypath); - }; -} +// /** +// * @param {Validator} fn +// * @param {(keypath: string) => string} get_message +// * @returns {Validator} +// */ +// function deprecate( +// fn, +// get_message = (keypath) => +// `The \`${keypath}\` option is deprecated, and will be removed in a future version` +// ) { +// return (input, keypath) => { +// if (input !== undefined) { +// console.warn(styleText(['bold', 'yellow'], get_message(keypath))); +// } + +// return fn(input, keypath); +// }; +// } /** * @param {(keypath: string) => string} get_message From f5e38478ae942ccbf88ecf28cf14f70aea22a23a Mon Sep 17 00:00:00 2001 From: Tee Ming Date: Sat, 7 Mar 2026 23:33:19 +0800 Subject: [PATCH 044/545] fix lint --- packages/kit/src/core/config/options.js | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/kit/src/core/config/options.js b/packages/kit/src/core/config/options.js index ca3c9d34c787..bfb769c8d095 100644 --- a/packages/kit/src/core/config/options.js +++ b/packages/kit/src/core/config/options.js @@ -1,5 +1,4 @@ import process from 'node:process'; -import { styleText } from 'node:util'; /** @typedef {import('./types.js').Validator} Validator */ From 9565db5523792c07fcb1482bc31f3bbffef45217 Mon Sep 17 00:00:00 2001 From: Tee Ming Date: Sun, 8 Mar 2026 22:22:14 +0800 Subject: [PATCH 045/545] chore: remove `with_resolvers` in favour of `Promise.withResolvers()` (#15510) --- packages/kit/src/core/postbuild/queue.js | 7 +++--- packages/kit/src/runtime/server/index.js | 6 ++--- packages/kit/src/utils/promise.js | 29 ------------------------ packages/kit/src/utils/streaming.js | 6 ++--- packages/kit/tsconfig.json | 6 ++--- 5 files changed, 11 insertions(+), 43 deletions(-) delete mode 100644 packages/kit/src/utils/promise.js diff --git a/packages/kit/src/core/postbuild/queue.js b/packages/kit/src/core/postbuild/queue.js index a816e6eb2350..3edcfe94b7e5 100644 --- a/packages/kit/src/core/postbuild/queue.js +++ b/packages/kit/src/core/postbuild/queue.js @@ -1,6 +1,3 @@ -/** @import { PromiseWithResolvers } from '../../utils/promise.js' */ -import { with_resolvers } from '../../utils/promise.js'; - /** * @typedef {{ * fn: () => Promise, @@ -13,7 +10,9 @@ import { with_resolvers } from '../../utils/promise.js'; export function queue(concurrency) { /** @type {Task[]} */ const tasks = []; - const { promise, resolve, reject } = /** @type {PromiseWithResolvers} */ (with_resolvers()); + const { promise, resolve, reject } = /** @type {PromiseWithResolvers} */ ( + Promise.withResolvers() + ); let current = 0; let closed = false; diff --git a/packages/kit/src/runtime/server/index.js b/packages/kit/src/runtime/server/index.js index 3fbc43e5e4ff..0dbeecb2d1d5 100644 --- a/packages/kit/src/runtime/server/index.js +++ b/packages/kit/src/runtime/server/index.js @@ -1,5 +1,3 @@ -/** @import { PromiseWithResolvers } from '../../utils/promise.js' */ -import { with_resolvers } from '../../utils/promise.js'; import { IN_WEBCONTAINER } from './constants.js'; import { respond } from './respond.js'; import { set_private_env, set_public_env } from '../shared-server.js'; @@ -36,7 +34,9 @@ export class Server { /** @type {typeof respond} */ this.respond = async (...args) => { - const { promise, resolve } = /** @type {PromiseWithResolvers} */ (with_resolvers()); + const { promise, resolve } = /** @type {PromiseWithResolvers} */ ( + Promise.withResolvers() + ); const previous = current; current = promise; diff --git a/packages/kit/src/utils/promise.js b/packages/kit/src/utils/promise.js deleted file mode 100644 index c7890541c61a..000000000000 --- a/packages/kit/src/utils/promise.js +++ /dev/null @@ -1,29 +0,0 @@ -/** @see https://github.com/microsoft/TypeScript/blob/904e7dd97dc8da1352c8e05d70829dff17c73214/src/lib/es2024.promise.d.ts */ - -/** - * @template T - * @typedef {{ - * promise: Promise; - * resolve: (value: T | PromiseLike) => void; - * reject: (reason?: any) => void; - * }} PromiseWithResolvers - */ - -/** - * TODO: Whenever Node >21 is minimum supported version, we can use `Promise.withResolvers` to avoid this ceremony - * - * @template T - * @returns {PromiseWithResolvers} - */ -export function with_resolvers() { - let resolve; - let reject; - - const promise = new Promise((res, rej) => { - resolve = res; - reject = rej; - }); - - // @ts-expect-error `resolve` and `reject` are assigned! - return { promise, resolve, reject }; -} diff --git a/packages/kit/src/utils/streaming.js b/packages/kit/src/utils/streaming.js index 6595405ea0ad..c9fac76a5a6d 100644 --- a/packages/kit/src/utils/streaming.js +++ b/packages/kit/src/utils/streaming.js @@ -1,5 +1,3 @@ -import { with_resolvers } from './promise.js'; - /** * Create an async iterator and a function to push values into it * @template T @@ -12,7 +10,7 @@ export function create_async_iterator() { let resolved = -1; let returned = -1; - /** @type {import('./promise.js').PromiseWithResolvers[]} */ + /** @type {PromiseWithResolvers[]} */ const deferred = []; return { @@ -32,7 +30,7 @@ export function create_async_iterator() { }; }, add: (promise) => { - deferred.push(with_resolvers()); + deferred.push(Promise.withResolvers()); void promise.then((value) => { deferred[++resolved].resolve(value); }); diff --git a/packages/kit/tsconfig.json b/packages/kit/tsconfig.json index 952ee7b30d3f..533431738447 100644 --- a/packages/kit/tsconfig.json +++ b/packages/kit/tsconfig.json @@ -4,9 +4,9 @@ "checkJs": true, "noEmit": true, "strict": true, - "target": "es2023", - "module": "node16", - "moduleResolution": "node16", + "target": "esnext", + "module": "nodenext", + "moduleResolution": "nodenext", "allowSyntheticDefaultImports": true, "paths": { "@sveltejs/kit": ["./src/exports/public.d.ts"], From 20b75f453eaccb0e366c22ab74fd38a9fe84cda9 Mon Sep 17 00:00:00 2001 From: Tee Ming Date: Mon, 9 Mar 2026 13:14:13 +0800 Subject: [PATCH 046/545] chore: bump peer on kit for adapters (#15506) This PR cleans up some unnecessary types/guards because we were trying to support older versions of SvelteKit. Now that we will only support v3, we don't need to be careful about which features from SvelteKit aren't available such as instrumentation --- ### Please don't delete this checklist! Before submitting the PR, please make sure you do the following: - [ ] It's really useful if your PR references an issue where it is discussed ahead of time. In many cases, features are absent for a reason. For large changes, please create an RFC: https://github.com/sveltejs/rfcs - [x] This message body should clearly illustrate what problems it solves. - [ ] Ideally, include a test that fails without this PR but passes with it. ### Tests - [x] Run the tests with `pnpm test` and lint the project with `pnpm lint` and `pnpm check` ### Changesets - [ ] If your PR makes a change that should be noted in one or more packages' changelogs, generate a changeset by running `pnpm changeset` and following the prompts. Changesets that add features should be `minor` and those that fix bugs should be `patch`. Please prefix changeset messages with `feat:`, `fix:`, or `chore:`. ### Edits - [x] Please ensure that 'Allow edits from maintainers' is checked. PRs without this option may be closed. --------- Co-authored-by: Ben McCann <322311+benmccann@users.noreply.github.com> --- .changeset/late-lions-crash.md | 9 +++++++++ packages/adapter-auto/index.js | 14 +------------- packages/adapter-auto/package.json | 2 +- packages/adapter-cloudflare/index.js | 1 - packages/adapter-netlify/index.js | 1 - packages/adapter-node/index.js | 18 +++--------------- packages/adapter-node/package.json | 2 +- packages/adapter-node/src/env.js | 1 - packages/adapter-node/src/handler.js | 3 --- packages/adapter-static/index.js | 2 -- packages/adapter-static/package.json | 2 +- packages/adapter-static/platforms.js | 4 ++-- packages/adapter-static/tsconfig.json | 2 +- 13 files changed, 19 insertions(+), 42 deletions(-) create mode 100644 .changeset/late-lions-crash.md diff --git a/.changeset/late-lions-crash.md b/.changeset/late-lions-crash.md new file mode 100644 index 000000000000..f120c80d8caa --- /dev/null +++ b/.changeset/late-lions-crash.md @@ -0,0 +1,9 @@ +--- +"@sveltejs/adapter-auto": major +"@sveltejs/adapter-cloudflare": major +"@sveltejs/adapter-netlify": major +"@sveltejs/adapter-node": major +"@sveltejs/adapter-static": major +--- + +breaking: require SvelteKit 3 diff --git a/packages/adapter-auto/index.js b/packages/adapter-auto/index.js index 64bc04312afc..6813807e0086 100644 --- a/packages/adapter-auto/index.js +++ b/packages/adapter-auto/index.js @@ -4,17 +4,6 @@ import path from 'node:path'; import fs from 'node:fs'; import process from 'node:process'; -/** - * @template T - * @template {keyof T} K - * @typedef {Partial> & Required>} PartialExcept - */ - -/** - * We use a custom `Builder` type here to support the minimum version of SvelteKit. - * @typedef {PartialExcept} Builder2_0_0 - */ - /** @type {Record string>} */ const commands = { npm: (name, version) => `npm install -D ${name}@${version}`, @@ -149,11 +138,10 @@ async function get_adapter() { /** @type {() => Adapter} */ export default () => ({ name: '@sveltejs/adapter-auto', - /** @param {Builder2_0_0} builder */ adapt: async (builder) => { const adapter = await get_adapter(); - if (adapter) return adapter.adapt(/** @type {import('@sveltejs/kit').Builder} */ (builder)); + if (adapter) return adapter.adapt(builder); builder.log.warn( 'Could not detect a supported production environment. See https://svelte.dev/docs/kit/adapters to learn how to configure your app to run on the platform of your choosing' diff --git a/packages/adapter-auto/package.json b/packages/adapter-auto/package.json index b10e4a1d4912..7a33765279cf 100644 --- a/packages/adapter-auto/package.json +++ b/packages/adapter-auto/package.json @@ -48,6 +48,6 @@ "vitest": "catalog:" }, "peerDependencies": { - "@sveltejs/kit": "^2.0.0" + "@sveltejs/kit": "^3.0.0" } } diff --git a/packages/adapter-cloudflare/index.js b/packages/adapter-cloudflare/index.js index d3b2a61f556d..66c8a2da246e 100644 --- a/packages/adapter-cloudflare/index.js +++ b/packages/adapter-cloudflare/index.js @@ -16,7 +16,6 @@ const name = '@sveltejs/adapter-cloudflare'; export default function (options = {}) { return { name, - /** @param {import('@sveltejs/kit').Builder} builder */ async adapt(builder) { if ( existsSync('_routes.json') || diff --git a/packages/adapter-netlify/index.js b/packages/adapter-netlify/index.js index 2dce87fa0e71..db7f6b2e8e1d 100644 --- a/packages/adapter-netlify/index.js +++ b/packages/adapter-netlify/index.js @@ -34,7 +34,6 @@ const FUNCTION_PREFIX = 'sveltekit-'; export default function ({ split = false, edge = edge_set_in_env_var } = {}) { return { name, - /** @param {import('@sveltejs/kit').Builder} builder */ async adapt(builder) { if (!builder.routes) { throw new Error( diff --git a/packages/adapter-node/index.js b/packages/adapter-node/index.js index a6b3358d4a5a..3949e366ea8a 100644 --- a/packages/adapter-node/index.js +++ b/packages/adapter-node/index.js @@ -2,17 +2,6 @@ import { readFileSync, writeFileSync } from 'node:fs'; import { fileURLToPath } from 'node:url'; import { rolldown } from 'rolldown'; -/** - * @template T - * @template {keyof T} K - * @typedef {Partial> & Required>} PartialExcept - */ - -/** - * We use a custom `Builder` type here to support the minimum version of SvelteKit. - * @typedef {PartialExcept} Builder2_4_0 - */ - const files = fileURLToPath(new URL('./files', import.meta.url).href); /** @type {import('./index.js').default} */ @@ -21,7 +10,6 @@ export default function (opts = {}) { return { name: '@sveltejs/adapter-node', - /** @param {Builder2_4_0} builder */ async adapt(builder) { const tmp = builder.getBuildDirectory('adapter-node'); @@ -62,7 +50,7 @@ export default function (opts = {}) { manifest: `${tmp}/manifest.js` }; - if (builder.hasServerInstrumentationFile?.()) { + if (builder.hasServerInstrumentationFile()) { input['instrumentation.server'] = `${tmp}/instrumentation.server.js`; } @@ -99,8 +87,8 @@ export default function (opts = {}) { } }); - if (builder.hasServerInstrumentationFile?.()) { - builder.instrument?.({ + if (builder.hasServerInstrumentationFile()) { + builder.instrument({ entrypoint: `${out}/index.js`, instrumentation: `${out}/server/instrumentation.server.js`, module: { diff --git a/packages/adapter-node/package.json b/packages/adapter-node/package.json index 26bef62d94a4..6fe45be3bbec 100644 --- a/packages/adapter-node/package.json +++ b/packages/adapter-node/package.json @@ -56,6 +56,6 @@ "rolldown": "^1.0.0-rc.6" }, "peerDependencies": { - "@sveltejs/kit": "^2.4.0" + "@sveltejs/kit": "^3.0.0" } } diff --git a/packages/adapter-node/src/env.js b/packages/adapter-node/src/env.js index 05251f8658b2..f7e5c2edf0d9 100644 --- a/packages/adapter-node/src/env.js +++ b/packages/adapter-node/src/env.js @@ -1,4 +1,3 @@ -/* global ENV_PREFIX */ import process from 'node:process'; const expected = new Set([ diff --git a/packages/adapter-node/src/handler.js b/packages/adapter-node/src/handler.js index 72e5a105a73b..a6c7d9eca50a 100644 --- a/packages/adapter-node/src/handler.js +++ b/packages/adapter-node/src/handler.js @@ -10,9 +10,6 @@ import { manifest, prerendered, base } from 'MANIFEST'; import { env } from 'ENV'; import { parse_as_bytes, parse_origin } from '../utils.js'; -/* global ENV_PREFIX */ -/* global PRECOMPRESS */ - const server = new Server(manifest); // parse_origin validates ORIGIN and throws descriptive errors for invalid values diff --git a/packages/adapter-static/index.js b/packages/adapter-static/index.js index c2b87301c8a8..6ba84906c6c5 100644 --- a/packages/adapter-static/index.js +++ b/packages/adapter-static/index.js @@ -5,7 +5,6 @@ import { platforms } from './platforms.js'; export default function (options) { return { name: '@sveltejs/adapter-static', - /** @param {import('./internal.js').Builder2_0_0} builder */ async adapt(builder) { if (!options?.fallback && builder.config.kit.router?.type !== 'hash') { const dynamic_routes = builder.routes.filter((route) => route.prerender !== true); @@ -52,7 +51,6 @@ See https://svelte.dev/docs/kit/page-options#prerender for more details` } const { - // @ts-ignore pages = 'build', assets = pages, fallback, diff --git a/packages/adapter-static/package.json b/packages/adapter-static/package.json index 3b42bc57735e..22cfb3c91686 100644 --- a/packages/adapter-static/package.json +++ b/packages/adapter-static/package.json @@ -49,6 +49,6 @@ "vite": "catalog:" }, "peerDependencies": { - "@sveltejs/kit": "^2.0.0" + "@sveltejs/kit": "^3.0.0" } } diff --git a/packages/adapter-static/platforms.js b/packages/adapter-static/platforms.js index 6ed421625668..51a6bf0a3562 100644 --- a/packages/adapter-static/platforms.js +++ b/packages/adapter-static/platforms.js @@ -6,12 +6,12 @@ import process from 'node:process'; * name: string; * test: () => boolean; * defaults: import('./index.js').AdapterOptions; - * done: (builder: import('./internal.js').Builder2_0_0) => void; + * done: (builder: import('@sveltejs/kit').Builder) => void; * }} * Platform */ // This function is duplicated in adapter-vercel -/** @param {import('./internal.js').Builder2_0_0} builder */ +/** @param {import('@sveltejs/kit').Builder} builder */ function static_vercel_config(builder) { /** @type {any[]} */ const prerendered_redirects = []; diff --git a/packages/adapter-static/tsconfig.json b/packages/adapter-static/tsconfig.json index ad019b486258..d77c9c034e04 100644 --- a/packages/adapter-static/tsconfig.json +++ b/packages/adapter-static/tsconfig.json @@ -14,5 +14,5 @@ "@sveltejs/kit": ["../kit/types/index"] } }, - "include": ["index.js", "internal.d.ts", "test/utils.js"] + "include": ["index.js", "test/utils.js"] } From 047d6a0f1c3fd1bc6f90a81177a2834b023a64b3 Mon Sep 17 00:00:00 2001 From: Tee Ming Date: Tue, 10 Mar 2026 02:20:24 +0800 Subject: [PATCH 047/545] breaking: remove `builder.createEntries` (#15509) This PR removes the deprecated `builder.createEntries` API. Requires https://github.com/sveltejs/kit/pull/15506 to be merged first to remove references to it in the adapters --- ### Please don't delete this checklist! Before submitting the PR, please make sure you do the following: - [ ] It's really useful if your PR references an issue where it is discussed ahead of time. In many cases, features are absent for a reason. For large changes, please create an RFC: https://github.com/sveltejs/rfcs - [ ] This message body should clearly illustrate what problems it solves. - [ ] Ideally, include a test that fails without this PR but passes with it. ### Tests - [ ] Run the tests with `pnpm test` and lint the project with `pnpm lint` and `pnpm check` ### Changesets - [ ] If your PR makes a change that should be noted in one or more packages' changelogs, generate a changeset by running `pnpm changeset` and following the prompts. Changesets that add features should be `minor` and those that fix bugs should be `patch`. Please prefix changeset messages with `feat:`, `fix:`, or `chore:`. ### Edits - [ ] Please ensure that 'Allow edits from maintainers' is checked. PRs without this option may be closed. --- .changeset/eighty-paws-love.md | 5 +++ packages/kit/src/core/adapt/builder.js | 52 -------------------------- packages/kit/src/exports/public.d.ts | 5 +-- packages/kit/types/index.d.ts | 5 +-- 4 files changed, 9 insertions(+), 58 deletions(-) create mode 100644 .changeset/eighty-paws-love.md diff --git a/.changeset/eighty-paws-love.md b/.changeset/eighty-paws-love.md new file mode 100644 index 000000000000..b301fa8f1b2c --- /dev/null +++ b/.changeset/eighty-paws-love.md @@ -0,0 +1,5 @@ +--- +'@sveltejs/kit': major +--- + +breaking: remove `createEntries` from the `Builder` object passed to adapter functions diff --git a/packages/kit/src/core/adapt/builder.js b/packages/kit/src/core/adapt/builder.js index 0c064eed4975..bb5ef66edea7 100644 --- a/packages/kit/src/core/adapt/builder.js +++ b/packages/kit/src/core/adapt/builder.js @@ -103,58 +103,6 @@ export function create_builder({ ); }, - async createEntries(fn) { - const seen = new Set(); - - for (let i = 0; i < route_data.length; i += 1) { - const route = route_data[i]; - if (prerender_map.get(route.id) === true) continue; - const { id, filter, complete } = fn(routes[i]); - - if (seen.has(id)) continue; - seen.add(id); - - const group = [route]; - - // figure out which lower priority routes should be considered fallbacks - for (let j = i + 1; j < route_data.length; j += 1) { - if (prerender_map.get(routes[j].id) === true) continue; - if (filter(routes[j])) { - group.push(route_data[j]); - } - } - - const filtered = new Set(group); - - // heuristic: if /foo/[bar] is included, /foo/[bar].json should - // also be included, since the page likely needs the endpoint - // TODO is this still necessary, given the new way of doing things? - filtered.forEach((route) => { - if (route.page) { - const endpoint = route_data.find((candidate) => candidate.id === route.id + '.json'); - - if (endpoint) { - filtered.add(endpoint); - } - } - }); - - if (filtered.size > 0) { - await complete({ - generateManifest: ({ relativePath }) => - generate_manifest({ - build_data, - prerendered: [], - relative_path: relativePath, - routes: Array.from(filtered), - remotes, - root: vite_config.root - }) - }); - } - } - }, - findServerAssets(route_data) { return find_server_assets( build_data, diff --git a/packages/kit/src/exports/public.d.ts b/packages/kit/src/exports/public.d.ts index 2f3b95808cab..d086466c6aef 100644 --- a/packages/kit/src/exports/public.d.ts +++ b/packages/kit/src/exports/public.d.ts @@ -122,13 +122,12 @@ export interface Builder { /** An array of all routes (including prerendered) */ routes: RouteDefinition[]; - // TODO 3.0 remove this method /** * Create separate functions that map to one or more routes of your app. * @param fn A function that groups a set of routes into an entry point - * @deprecated Use `builder.routes` instead + * @deprecated removed in 3.0. Use `builder.routes` instead */ - createEntries: (fn: (route: RouteDefinition) => AdapterEntry) => Promise; + createEntries?: (fn: (route: RouteDefinition) => AdapterEntry) => Promise; /** * Find all the assets imported by server files belonging to `routes` diff --git a/packages/kit/types/index.d.ts b/packages/kit/types/index.d.ts index b144e95547e5..8ea68a54c68c 100644 --- a/packages/kit/types/index.d.ts +++ b/packages/kit/types/index.d.ts @@ -97,13 +97,12 @@ declare module '@sveltejs/kit' { /** An array of all routes (including prerendered) */ routes: RouteDefinition[]; - // TODO 3.0 remove this method /** * Create separate functions that map to one or more routes of your app. * @param fn A function that groups a set of routes into an entry point - * @deprecated Use `builder.routes` instead + * @deprecated removed in 3.0. Use `builder.routes` instead */ - createEntries: (fn: (route: RouteDefinition) => AdapterEntry) => Promise; + createEntries?: (fn: (route: RouteDefinition) => AdapterEntry) => Promise; /** * Find all the assets imported by server files belonging to `routes` From 096962c47b0b0f63acd0d539d3973797e4867487 Mon Sep 17 00:00:00 2001 From: Tee Ming Date: Wed, 11 Mar 2026 07:14:29 +0800 Subject: [PATCH 048/545] breaking: remove `delta` from non-popstate navigations (#15522) This PR addresses a TODO comment to remove the `delta` property from navigation events which aren't `popstate` --- ### Please don't delete this checklist! Before submitting the PR, please make sure you do the following: - [x] It's really useful if your PR references an issue where it is discussed ahead of time. In many cases, features are absent for a reason. For large changes, please create an RFC: https://github.com/sveltejs/rfcs - [x] This message body should clearly illustrate what problems it solves. - [ ] Ideally, include a test that fails without this PR but passes with it. ### Tests - [ ] Run the tests with `pnpm test` and lint the project with `pnpm lint` and `pnpm check` ### Changesets - [x] If your PR makes a change that should be noted in one or more packages' changelogs, generate a changeset by running `pnpm changeset` and following the prompts. Changesets that add features should be `minor` and those that fix bugs should be `patch`. Please prefix changeset messages with `feat:`, `fix:`, or `chore:`. ### Edits - [x] Please ensure that 'Allow edits from maintainers' is checked. PRs without this option may be closed. --- .changeset/gentle-signs-cross.md | 5 ++++ packages/kit/src/exports/public.d.ts | 30 +------------------- packages/kit/src/runtime/app/state/client.js | 2 +- packages/kit/src/runtime/client/client.js | 2 +- packages/kit/types/index.d.ts | 30 +------------------- 5 files changed, 9 insertions(+), 60 deletions(-) create mode 100644 .changeset/gentle-signs-cross.md diff --git a/.changeset/gentle-signs-cross.md b/.changeset/gentle-signs-cross.md new file mode 100644 index 000000000000..b819bf018351 --- /dev/null +++ b/.changeset/gentle-signs-cross.md @@ -0,0 +1,5 @@ +--- +'@sveltejs/kit': major +--- + +breaking: the `delta` property now only exists for `popstate` navigation events diff --git a/packages/kit/src/exports/public.d.ts b/packages/kit/src/exports/public.d.ts index d086466c6aef..da8f1dca659f 100644 --- a/packages/kit/src/exports/public.d.ts +++ b/packages/kit/src/exports/public.d.ts @@ -611,7 +611,7 @@ export interface KitConfig { * - `preload-mjs` - uses `` but with the `.mjs` extension which prevents double-parsing in Chromium. Some static webservers will fail to serve .mjs files with a `Content-Type: application/javascript` header, which will cause your application to break. If that doesn't apply to you, this is the option that will deliver the best performance for the largest number of users, until `modulepreload` is more widely supported. * @default "modulepreload" * @since 1.8.4 - * @deprecated removed in 3.0.0 + * @deprecated removed in 3.0 */ preloadStrategy?: 'modulepreload' | 'preload-js' | 'preload-mjs'; /** @@ -1265,13 +1265,6 @@ export interface NavigationGoto extends NavigationBase { * - `goto`: Navigation was triggered by a `goto(...)` call or a redirect */ type: 'goto'; - - // TODO 3.0 remove this property, so that it only exists when type is 'popstate' - // (would possibly be a breaking change to do it prior to that) - /** - * In case of a history back/forward navigation, the number of steps to go back/forward - */ - delta?: undefined; } export interface NavigationLeave extends NavigationBase { @@ -1280,13 +1273,6 @@ export interface NavigationLeave extends NavigationBase { * - `leave`: The app is being left either because the tab is being closed or a navigation to a different document is occurring */ type: 'leave'; - - // TODO 3.0 remove this property, so that it only exists when type is 'popstate' - // (would possibly be a breaking change to do it prior to that) - /** - * In case of a history back/forward navigation, the number of steps to go back/forward - */ - delta?: undefined; } export interface NavigationFormSubmit extends NavigationBase { @@ -1300,13 +1286,6 @@ export interface NavigationFormSubmit extends NavigationBase { * The `SubmitEvent` that caused the navigation */ event: SubmitEvent; - - // TODO 3.0 remove this property, so that it only exists when type is 'popstate' - // (would possibly be a breaking change to do it prior to that) - /** - * In case of a history back/forward navigation, the number of steps to go back/forward - */ - delta?: undefined; } export interface NavigationPopState extends NavigationBase { @@ -1338,13 +1317,6 @@ export interface NavigationLink extends NavigationBase { * The `PointerEvent` that caused the navigation */ event: PointerEvent; - - // TODO 3.0 remove this property, so that it only exists when type is 'popstate' - // (would possibly be a breaking change to do it prior to that) - /** - * In case of a history back/forward navigation, the number of steps to go back/forward - */ - delta?: undefined; } export type Navigation = diff --git a/packages/kit/src/runtime/app/state/client.js b/packages/kit/src/runtime/app/state/client.js index 7a276d0d9512..ff9c55cfe634 100644 --- a/packages/kit/src/runtime/app/state/client.js +++ b/packages/kit/src/runtime/app/state/client.js @@ -46,7 +46,7 @@ export const navigating = { return _navigating.current ? _navigating.current.willUnload : null; }, get delta() { - return _navigating.current ? _navigating.current.delta : null; + return _navigating.current?.type === 'popstate' ? _navigating.current.delta : null; }, get complete() { return _navigating.current ? _navigating.current.complete : null; diff --git a/packages/kit/src/runtime/client/client.js b/packages/kit/src/runtime/client/client.js index 0faada3d4b01..cd1d1ae7d86a 100644 --- a/packages/kit/src/runtime/client/client.js +++ b/packages/kit/src/runtime/client/client.js @@ -1476,7 +1476,7 @@ function _before_navigate({ url, type, intent, delta, event, scroll }) { const nav = create_navigation(current, intent, url, type, scroll ?? null); - if (delta !== undefined) { + if (nav.navigation.type === 'popstate' && delta !== undefined) { nav.navigation.delta = delta; } diff --git a/packages/kit/types/index.d.ts b/packages/kit/types/index.d.ts index 8ea68a54c68c..ba2a7b713bbb 100644 --- a/packages/kit/types/index.d.ts +++ b/packages/kit/types/index.d.ts @@ -585,7 +585,7 @@ declare module '@sveltejs/kit' { * - `preload-mjs` - uses `` but with the `.mjs` extension which prevents double-parsing in Chromium. Some static webservers will fail to serve .mjs files with a `Content-Type: application/javascript` header, which will cause your application to break. If that doesn't apply to you, this is the option that will deliver the best performance for the largest number of users, until `modulepreload` is more widely supported. * @default "modulepreload" * @since 1.8.4 - * @deprecated removed in 3.0.0 + * @deprecated removed in 3.0 */ preloadStrategy?: 'modulepreload' | 'preload-js' | 'preload-mjs'; /** @@ -1239,13 +1239,6 @@ declare module '@sveltejs/kit' { * - `goto`: Navigation was triggered by a `goto(...)` call or a redirect */ type: 'goto'; - - // TODO 3.0 remove this property, so that it only exists when type is 'popstate' - // (would possibly be a breaking change to do it prior to that) - /** - * In case of a history back/forward navigation, the number of steps to go back/forward - */ - delta?: undefined; } export interface NavigationLeave extends NavigationBase { @@ -1254,13 +1247,6 @@ declare module '@sveltejs/kit' { * - `leave`: The app is being left either because the tab is being closed or a navigation to a different document is occurring */ type: 'leave'; - - // TODO 3.0 remove this property, so that it only exists when type is 'popstate' - // (would possibly be a breaking change to do it prior to that) - /** - * In case of a history back/forward navigation, the number of steps to go back/forward - */ - delta?: undefined; } export interface NavigationFormSubmit extends NavigationBase { @@ -1274,13 +1260,6 @@ declare module '@sveltejs/kit' { * The `SubmitEvent` that caused the navigation */ event: SubmitEvent; - - // TODO 3.0 remove this property, so that it only exists when type is 'popstate' - // (would possibly be a breaking change to do it prior to that) - /** - * In case of a history back/forward navigation, the number of steps to go back/forward - */ - delta?: undefined; } export interface NavigationPopState extends NavigationBase { @@ -1312,13 +1291,6 @@ declare module '@sveltejs/kit' { * The `PointerEvent` that caused the navigation */ event: PointerEvent; - - // TODO 3.0 remove this property, so that it only exists when type is 'popstate' - // (would possibly be a breaking change to do it prior to that) - /** - * In case of a history back/forward navigation, the number of steps to go back/forward - */ - delta?: undefined; } export type Navigation = From 2c71180f307f9c5b7088c3bc9aa829cd89ef97c4 Mon Sep 17 00:00:00 2001 From: Tee Ming Date: Wed, 11 Mar 2026 15:05:51 +0800 Subject: [PATCH 049/545] chore: remove old migration warnings (#15523) --- .changeset/cold-carrots-raise.md | 2 +- packages/enhanced-img/package.json | 3 ++ packages/kit/package.json | 2 +- packages/kit/src/exports/node/index.js | 23 +++------ .../kit/src/runtime/app/server/remote/form.js | 51 ------------------- packages/kit/src/runtime/app/state/client.js | 7 --- .../client/remote-functions/form.svelte.js | 40 --------------- packages/kit/src/runtime/form-utils.js | 40 --------------- packages/package/package.json | 2 +- 9 files changed, 12 insertions(+), 158 deletions(-) diff --git a/.changeset/cold-carrots-raise.md b/.changeset/cold-carrots-raise.md index 5b77b8c63f25..b42f613dc0fd 100644 --- a/.changeset/cold-carrots-raise.md +++ b/.changeset/cold-carrots-raise.md @@ -4,4 +4,4 @@ '@sveltejs/enhanced-img': major --- -breaking: require Node 22 or newer +breaking: require Node 22.17.0 or newer diff --git a/packages/enhanced-img/package.json b/packages/enhanced-img/package.json index 6419c68bdb14..f2071e25bb34 100644 --- a/packages/enhanced-img/package.json +++ b/packages/enhanced-img/package.json @@ -58,5 +58,8 @@ "@sveltejs/vite-plugin-svelte": "^6.0.0", "svelte": "^5.0.0", "vite": ">=8.0.0" + }, + "engines": { + "node": ">=22.17" } } diff --git a/packages/kit/package.json b/packages/kit/package.json index c263f34c2775..fbf8e46bc0a9 100644 --- a/packages/kit/package.json +++ b/packages/kit/package.json @@ -123,6 +123,6 @@ }, "types": "types/index.d.ts", "engines": { - "node": ">=22" + "node": ">=22.17" } } diff --git a/packages/kit/src/exports/node/index.js b/packages/kit/src/exports/node/index.js index 35bd3564cc55..73c9a059750c 100644 --- a/packages/kit/src/exports/node/index.js +++ b/packages/kit/src/exports/node/index.js @@ -35,16 +35,11 @@ function get_raw_body(req, body_size_limit) { return new ReadableStream({ start(controller) { if (body_size_limit !== undefined && content_length > body_size_limit) { - let message = `Content-length of ${content_length} exceeds limit of ${body_size_limit} bytes.`; - - if (body_size_limit === 0) { - // https://github.com/sveltejs/kit/pull/11589 - // TODO this exists to aid migration — remove in a future version - message += ' To disable body size limits, specify Infinity rather than 0.'; - } - - const error = new SvelteKitError(413, 'Payload Too Large', message); - + const error = new SvelteKitError( + 413, + 'Payload Too Large', + `Content-length of ${content_length} exceeds limit of ${body_size_limit} bytes.` + ); controller.error(error); return; } @@ -119,15 +114,9 @@ export async function getRequest({ request, base, bodySizeLimit }) { delete headers[':scheme']; } - // TODO: Whenever Node >=22 is minimum supported version, we can use `request.readableAborted` - // @see https://github.com/nodejs/node/blob/5cf3c3e24c7257a0c6192ed8ef71efec8ddac22b/lib/internal/streams/readable.js#L1443-L1453 const controller = new AbortController(); - let errored = false; - let end_emitted = false; - request.once('error', () => (errored = true)); - request.once('end', () => (end_emitted = true)); request.once('close', () => { - if ((errored || request.destroyed) && !end_emitted) { + if (request.readableAborted) { controller.abort(); } }); diff --git a/packages/kit/src/runtime/app/server/remote/form.js b/packages/kit/src/runtime/app/server/remote/form.js index 7b40124066f9..7d5590c4bd6a 100644 --- a/packages/kit/src/runtime/app/server/remote/form.js +++ b/packages/kit/src/runtime/app/server/remote/form.js @@ -2,11 +2,9 @@ /** @import { InternalRemoteFormIssue, MaybePromise, RemoteInfo } from 'types' */ /** @import { StandardSchemaV1 } from '@standard-schema/spec' */ import { get_request_store } from '@sveltejs/kit/internal/server'; -import { DEV } from 'esm-env'; import { create_field_proxy, set_nested_value, - throw_on_old_property_access, deep_set, normalize_issue, flatten_issues @@ -90,32 +88,6 @@ export function form(validate_or_fn, maybe_fn) { name: '', id: '', fn: async (data, meta, form_data) => { - // TODO 3.0 remove this warning - if (DEV && !data) { - const error = () => { - throw new Error( - 'Remote form functions no longer get passed a FormData object. ' + - "`form` now has the same signature as `query` or `command`, i.e. it expects to be invoked like `form(schema, callback)` or `form('unchecked', callback)`. " + - 'The payload of the callback function is now a POJO instead of a FormData object. See https://kit.svelte.dev/docs/remote-functions#form for details.' - ); - }; - data = {}; - for (const key of [ - 'append', - 'delete', - 'entries', - 'forEach', - 'get', - 'getAll', - 'has', - 'keys', - 'set', - 'values' - ]) { - Object.defineProperty(data, key, { get: error }); - } - } - /** @type {{ submission: true, input?: Record, issues?: InternalRemoteFormIssue[], result: Output }} */ const output = {}; @@ -202,20 +174,6 @@ export function form(validate_or_fn, maybe_fn) { } }); - // TODO 3.0 remove - if (DEV) { - throw_on_old_property_access(instance); - - Object.defineProperty(instance, 'buttonProps', { - get() { - throw new Error( - '`form.buttonProps` has been removed: Instead of ` + + + +

{`${data?.type}`} {`${data?.status}`} {`${data?.error?.message}`}

diff --git a/packages/kit/test/apps/basics/src/routes/routing/preloading/error/[id]/+page.js b/packages/kit/test/apps/basics/src/routes/routing/preloading/error/[id]/+page.js new file mode 100644 index 000000000000..de1c0a6e2774 --- /dev/null +++ b/packages/kit/test/apps/basics/src/routes/routing/preloading/error/[id]/+page.js @@ -0,0 +1,12 @@ +import { error } from '@sveltejs/kit'; + +/** @type {import('./$types').PageLoad} */ +export function load({ params }) { + if (params.id === '404') { + error(404, { message: 'Not found' }); + } + + if (params.id === '500') { + throw new Error('Oopsie'); + } +} diff --git a/packages/kit/test/apps/basics/src/routes/routing/preloading/error/[id]/+page.server.js b/packages/kit/test/apps/basics/src/routes/routing/preloading/error/[id]/+page.server.js new file mode 100644 index 000000000000..2c464be7ecce --- /dev/null +++ b/packages/kit/test/apps/basics/src/routes/routing/preloading/error/[id]/+page.server.js @@ -0,0 +1,12 @@ +import { error } from '@sveltejs/kit'; + +/** @type {import('./$types').PageServerLoad} */ +export function load({ params }) { + if (params.id === '404') { + error(404, { message: 'Not found' }); + } + + if (params.id === '500') { + throw new Error('Oopsie'); + } +} diff --git a/packages/kit/test/apps/basics/src/routes/routing/preloading/error/[id]/+page.svelte b/packages/kit/test/apps/basics/src/routes/routing/preloading/error/[id]/+page.svelte new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/packages/kit/test/apps/basics/test/cross-platform/client.test.js b/packages/kit/test/apps/basics/test/cross-platform/client.test.js index b3ea18c42f99..7c18baaad127 100644 --- a/packages/kit/test/apps/basics/test/cross-platform/client.test.js +++ b/packages/kit/test/apps/basics/test/cross-platform/client.test.js @@ -927,6 +927,18 @@ test.describe('Prefetching', () => { await app.goto('/routing/preloading/preload-error'); await expect(page.locator('p')).toHaveText('hello'); }); + + test('preloads errors', async ({ page }) => { + await page.goto('/routing/preloading/error'); + + await expect(page.locator('p')).toHaveText('undefined undefined undefined'); + + page.locator('button', { hasText: '404' }).click(); + await expect(page.locator('p')).toHaveText('error 404 Not found'); + + page.locator('button', { hasText: '500' }).click(); + await expect(page.locator('p')).toHaveText('error 500 Oopsie (500 Internal Error)'); + }); }); test.describe('Routing', () => { diff --git a/packages/kit/test/prerendering/basics/test/tests.spec.js b/packages/kit/test/prerendering/basics/test/tests.spec.js index 77db87523fe6..429815e58a13 100644 --- a/packages/kit/test/prerendering/basics/test/tests.spec.js +++ b/packages/kit/test/prerendering/basics/test/tests.spec.js @@ -48,6 +48,7 @@ test('renders a server-side redirect', () => { expect(data).toEqual({ type: 'redirect', + status: 301, location: 'https://example.com/redirected' }); }); diff --git a/packages/kit/types/index.d.ts b/packages/kit/types/index.d.ts index 4365e82adc4a..2d8d0ec4f456 100644 --- a/packages/kit/types/index.d.ts +++ b/packages/kit/types/index.d.ts @@ -3269,13 +3269,17 @@ declare module '$app/navigation' { * * @param href Page to preload * */ - export function preloadData(href: string): Promise<{ + export function preloadData(href: string): Promise<({ type: "loaded"; - status: number; data: Record; } | { type: "redirect"; location: string; + } | { + type: "error"; + error: App.Error; + }) & { + status: number; }>; /** * Programmatically imports the code for routes that haven't yet been fetched. From a9629f136d3256b14a8b3c10114c99832b977f6c Mon Sep 17 00:00:00 2001 From: Tee Ming Date: Fri, 26 Jun 2026 10:49:49 +1000 Subject: [PATCH 177/545] breaking: remove `base`, `assets`, and `resolveRoute` (#15507) This PR removes the deprecated `base`, `assets` and `resolveRoute` APIs from `$app/paths`. It also removes/refactors some tests related to those APIs. For the removed tests, I wasn't sure if they were superseded by some `resolve` and `asset` tests or if we still needed them. Requires https://github.com/sveltejs/svelte.dev/pull/1848 to get the site building --- ### Please don't delete this checklist! Before submitting the PR, please make sure you do the following: - [ ] It's really useful if your PR references an issue where it is discussed ahead of time. In many cases, features are absent for a reason. For large changes, please create an RFC: https://github.com/sveltejs/rfcs - [x] This message body should clearly illustrate what problems it solves. - [ ] Ideally, include a test that fails without this PR but passes with it. ### Tests - [ ] Run the tests with `pnpm test` and lint the project with `pnpm lint` and `pnpm check` ### Changesets - [x] If your PR makes a change that should be noted in one or more packages' changelogs, generate a changeset by running `pnpm changeset` and following the prompts. Changesets that add features should be `minor` and those that fix bugs should be `patch`. Please prefix changeset messages with `feat:`, `fix:`, or `chore:`. ### Edits - [x] Please ensure that 'Allow edits from maintainers' is checked. PRs without this option may be closed. --- .changeset/easy-weeks-tan.md | 5 ++ .../docs/98-reference/20-$app-paths.md | 3 + packages/kit/src/core/postbuild/prerender.js | 2 +- packages/kit/src/exports/public.d.ts | 4 +- packages/kit/src/runtime/app/paths/client.js | 2 - .../kit/src/runtime/app/paths/public.d.ts | 28 --------- packages/kit/src/runtime/app/paths/server.js | 2 - packages/kit/src/runtime/client/client.js | 2 +- packages/kit/src/runtime/client/utils.js | 2 +- .../apps/basics/src/routes/paths/+page.svelte | 5 -- .../routes/paths/deeply/nested/+page.svelte | 5 -- packages/kit/test/apps/basics/test/test.js | 20 ------ .../routes/trailing-slash-server/+page.svelte | 6 +- .../apps/options/source/pages/base/+page.js | 6 +- .../options/source/pages/match/+server.js | 7 ++- .../source/pages/resolve-route/+page.svelte | 7 --- .../pages/resolve-route/[foo]/+page.svelte | 5 -- .../options/source/pages/slash/+page.svelte | 4 +- .../apps/options/test/paths-assets.test.js | 15 ++--- packages/kit/test/apps/options/test/test.js | 27 ++++---- .../paths-base/src/routes/redirect/+page.js | 4 +- packages/kit/types/index.d.ts | 62 ++++++------------- 22 files changed, 67 insertions(+), 156 deletions(-) create mode 100644 .changeset/easy-weeks-tan.md delete mode 100644 packages/kit/test/apps/basics/src/routes/paths/+page.svelte delete mode 100644 packages/kit/test/apps/basics/src/routes/paths/deeply/nested/+page.svelte delete mode 100644 packages/kit/test/apps/options/source/pages/resolve-route/+page.svelte delete mode 100644 packages/kit/test/apps/options/source/pages/resolve-route/[foo]/+page.svelte diff --git a/.changeset/easy-weeks-tan.md b/.changeset/easy-weeks-tan.md new file mode 100644 index 000000000000..8bfab1133b4b --- /dev/null +++ b/.changeset/easy-weeks-tan.md @@ -0,0 +1,5 @@ +--- +'@sveltejs/kit': major +--- + +breaking: remove `base`, `assets`, and `resolveRoute` from `$app/paths` diff --git a/documentation/docs/98-reference/20-$app-paths.md b/documentation/docs/98-reference/20-$app-paths.md index 32a350965e4a..b5a1cb781b68 100644 --- a/documentation/docs/98-reference/20-$app-paths.md +++ b/documentation/docs/98-reference/20-$app-paths.md @@ -3,3 +3,6 @@ title: $app/paths --- > MODULE: $app/paths + +> [!LEGACY] +> `base`, `assets`, and `resolveRoute` were removed in 3.0 diff --git a/packages/kit/src/core/postbuild/prerender.js b/packages/kit/src/core/postbuild/prerender.js index 255cc7c0aaf5..a60806f378c0 100644 --- a/packages/kit/src/core/postbuild/prerender.js +++ b/packages/kit/src/core/postbuild/prerender.js @@ -151,7 +151,7 @@ async function prerender({ hash, out, manifest_path, metadata, verbose, env, vit ({ status, path, referrer, referenceType }) => { const message = status === 404 && !path.startsWith(config.paths.base) - ? `${path} does not begin with \`base\`, which is configured in \`paths.base\` and can be imported from \`$app/paths\` - see https://svelte.dev/docs/kit/configuration#paths for more info` + ? `${path} does not begin with \`base\`. You can fix this by using \`resolve('${path}')\` from \`$app/paths\`. The base path is configurable from \`paths.base\` - see https://svelte.dev/docs/kit/configuration#paths for more info` : path; return `${status} ${message}${referrer ? ` (${referenceType} from ${referrer})` : ''}`; diff --git a/packages/kit/src/exports/public.d.ts b/packages/kit/src/exports/public.d.ts index f060b1bc5b1f..421979d55f9e 100644 --- a/packages/kit/src/exports/public.d.ts +++ b/packages/kit/src/exports/public.d.ts @@ -673,14 +673,14 @@ export interface KitConfig { */ assets?: '' | `http://${string}` | `https://${string}`; /** - * A root-relative path that must start, but not end with `/` (e.g. `/base-path`), unless it is the empty string. This specifies where your app is served from and allows the app to live on a non-root path. Note that you need to prepend all your root-relative links with the base value or they will point to the root of your domain, not your `base` (this is how the browser works). You can use [`base` from `$app/paths`](https://svelte.dev/docs/kit/$app-paths#base) for that: `Link`. If you find yourself writing this often, it may make sense to extract this into a reusable component. + * A root-relative path that must start, but not end with `/` (e.g. `/base-path`), unless it is the empty string. This specifies where your app is served from and allows the app to live on a non-root path. Note that you need to prepend all your root-relative links with the base value or they will point to the root of your domain, not your `base` (this is how the browser works). You can use [`resolve(...)` from `$app/paths`](https://svelte.dev/docs/kit/$app-paths#resolve) for that: `Link`. If you find yourself writing this often, it may make sense to extract this into a reusable component. * @default "" */ base?: '' | `/${string}`; /** * Whether to use relative asset paths. * - * If `true`, `base` and `assets` imported from `$app/paths` will be replaced with relative asset paths during server-side rendering, resulting in more portable HTML. + * If `true`, paths created with `resolve()` and `asset()` imported from `$app/paths` will be replaced with relative asset paths during server-side rendering, resulting in more portable HTML. * If `false`, `%sveltekit.assets%` and references to build artifacts will always be root-relative paths, unless `paths.assets` is an external URL * * [Single-page app](https://svelte.dev/docs/kit/single-page-apps) fallback pages will always use absolute paths, regardless of this setting. diff --git a/packages/kit/src/runtime/app/paths/client.js b/packages/kit/src/runtime/app/paths/client.js index e143897b2d6a..2039026a71c5 100644 --- a/packages/kit/src/runtime/app/paths/client.js +++ b/packages/kit/src/runtime/app/paths/client.js @@ -102,5 +102,3 @@ export async function match(url) { return null; } - -export { base, assets, resolve as resolveRoute }; diff --git a/packages/kit/src/runtime/app/paths/public.d.ts b/packages/kit/src/runtime/app/paths/public.d.ts index 600a10317234..878560588121 100644 --- a/packages/kit/src/runtime/app/paths/public.d.ts +++ b/packages/kit/src/runtime/app/paths/public.d.ts @@ -1,29 +1 @@ -import { RouteIdWithSearchOrHash, PathnameWithSearchOrHash, ResolvedPathname } from '$app/types'; -import { ResolveArgs } from './types.js'; - export { resolve, asset, match } from './client.js'; - -/** - * A string that matches [`config.kit.paths.base`](https://svelte.dev/docs/kit/configuration#paths). - * - * Example usage: `Link` - * - * @deprecated Use [`resolve(...)`](https://svelte.dev/docs/kit/$app-paths#resolve) instead - */ -export let base: '' | `/${string}`; - -/** - * An absolute path that matches [`config.kit.paths.assets`](https://svelte.dev/docs/kit/configuration#paths). - * - * > [!NOTE] If a value for `config.kit.paths.assets` is specified, it will be replaced with `'/_svelte_kit_assets'` during `vite dev` or `vite preview`, since the assets don't yet live at their eventual URL. - * - * @deprecated Use [`asset(...)`](https://svelte.dev/docs/kit/$app-paths#asset) instead - */ -export let assets: '' | `https://${string}` | `http://${string}` | '/_svelte_kit_assets'; - -/** - * @deprecated Use [`resolve(...)`](https://svelte.dev/docs/kit/$app-paths#resolve) instead - */ -export function resolveRoute( - ...args: ResolveArgs -): ResolvedPathname; diff --git a/packages/kit/src/runtime/app/paths/server.js b/packages/kit/src/runtime/app/paths/server.js index 38ff6895f17c..bbb696bb11bf 100644 --- a/packages/kit/src/runtime/app/paths/server.js +++ b/packages/kit/src/runtime/app/paths/server.js @@ -80,5 +80,3 @@ export async function match(url) { return null; } - -export { base, assets, resolve as resolveRoute }; diff --git a/packages/kit/src/runtime/client/client.js b/packages/kit/src/runtime/client/client.js index 19cb46d6d7f2..74b9984459a2 100644 --- a/packages/kit/src/runtime/client/client.js +++ b/packages/kit/src/runtime/client/client.js @@ -30,7 +30,7 @@ import { create_updated_store, load_css } from './utils.js'; -import { base } from '$app/paths'; +import { base } from '$app/paths/internal/client'; import * as devalue from 'devalue'; import { HISTORY_INDEX, diff --git a/packages/kit/src/runtime/client/utils.js b/packages/kit/src/runtime/client/utils.js index fc17dca84a32..2a4250cde359 100644 --- a/packages/kit/src/runtime/client/utils.js +++ b/packages/kit/src/runtime/client/utils.js @@ -1,6 +1,6 @@ import { BROWSER, DEV } from 'esm-env'; import { writable } from 'svelte/store'; -import { assets } from '$app/paths'; +import { assets } from '$app/paths/internal/client'; import { version } from '$app/env'; import { noop } from '../../utils/functions.js'; import { PRELOAD_PRIORITIES } from './constants.js'; diff --git a/packages/kit/test/apps/basics/src/routes/paths/+page.svelte b/packages/kit/test/apps/basics/src/routes/paths/+page.svelte deleted file mode 100644 index 73d1cb7eb4ef..000000000000 --- a/packages/kit/test/apps/basics/src/routes/paths/+page.svelte +++ /dev/null @@ -1,5 +0,0 @@ - - -
{JSON.stringify({ base, assets })}
diff --git a/packages/kit/test/apps/basics/src/routes/paths/deeply/nested/+page.svelte b/packages/kit/test/apps/basics/src/routes/paths/deeply/nested/+page.svelte deleted file mode 100644 index 73d1cb7eb4ef..000000000000 --- a/packages/kit/test/apps/basics/src/routes/paths/deeply/nested/+page.svelte +++ /dev/null @@ -1,5 +0,0 @@ - - -
{JSON.stringify({ base, assets })}
diff --git a/packages/kit/test/apps/basics/test/test.js b/packages/kit/test/apps/basics/test/test.js index a5e0b87b5e35..3c3960c839a8 100644 --- a/packages/kit/test/apps/basics/test/test.js +++ b/packages/kit/test/apps/basics/test/test.js @@ -730,22 +730,6 @@ test.describe('$app/env', () => { }); test.describe('$app/paths', () => { - test('includes paths', async ({ page, javaScriptEnabled }) => { - test.skip( - process.env.SVELTE_ASYNC === 'true', - 'does not work with async, should use new functions instead' - ); - await page.goto('/paths'); - - let base = javaScriptEnabled ? '' : '.'; - expect(await page.innerHTML('pre')).toBe(JSON.stringify({ base, assets: base })); - - await page.goto('/paths/deeply/nested'); - - base = javaScriptEnabled ? '' : '../..'; - expect(await page.innerHTML('pre')).toBe(JSON.stringify({ base, assets: base })); - }); - // some browsers will re-request assets after a `pushState` // https://github.com/sveltejs/kit/issues/3748#issuecomment-1125980897 test('replaces %sveltekit.assets% in template with relative path, and makes it absolute in the client', async ({ @@ -753,10 +737,6 @@ test.describe('$app/paths', () => { page, javaScriptEnabled }) => { - test.skip( - process.env.SVELTE_ASYNC === 'true', - 'does not work with async, should use new functions instead' - ); const absolute = `${baseURL}/favicon.png`; await page.goto('/'); diff --git a/packages/kit/test/apps/options-2/src/routes/trailing-slash-server/+page.svelte b/packages/kit/test/apps/options-2/src/routes/trailing-slash-server/+page.svelte index 71d69f88341a..b9feeb1bbaf1 100644 --- a/packages/kit/test/apps/options-2/src/routes/trailing-slash-server/+page.svelte +++ b/packages/kit/test/apps/options-2/src/routes/trailing-slash-server/+page.svelte @@ -1,5 +1,7 @@ -{base}/trailing-slash-server/prerender +{resolve('/trailing-slash-server/prerender')} diff --git a/packages/kit/test/apps/options/source/pages/base/+page.js b/packages/kit/test/apps/options/source/pages/base/+page.js index fd56523450f6..75732cff2f61 100644 --- a/packages/kit/test/apps/options/source/pages/base/+page.js +++ b/packages/kit/test/apps/options/source/pages/base/+page.js @@ -1,11 +1,11 @@ -import { base, assets } from '$app/paths'; +import { resolve, asset } from '$app/paths'; /** @type {import('@sveltejs/kit').Load} */ export async function load() { return { paths: { - base, - assets + base: resolve('/'), + assets: asset('/') } }; } diff --git a/packages/kit/test/apps/options/source/pages/match/+server.js b/packages/kit/test/apps/options/source/pages/match/+server.js index f1e5f3f53fce..6448f441713d 100644 --- a/packages/kit/test/apps/options/source/pages/match/+server.js +++ b/packages/kit/test/apps/options/source/pages/match/+server.js @@ -1,10 +1,11 @@ import { json } from '@sveltejs/kit'; import { match } from '$app/paths'; +/** @satisfies {import('$app/types').ResolvedPathname[]} */ const test_paths = [ - '/path-base/resolve-route', - '/path-base/resolve-route/resolved', - '/path-base/not-a-real-route-that-exists' + '/path-base/base/', + '/path-base/base/resolved/', + '/path-base/not-a-real-route-that-exists/' ]; export async function GET() { diff --git a/packages/kit/test/apps/options/source/pages/resolve-route/+page.svelte b/packages/kit/test/apps/options/source/pages/resolve-route/+page.svelte deleted file mode 100644 index 012be59f5a26..000000000000 --- a/packages/kit/test/apps/options/source/pages/resolve-route/+page.svelte +++ /dev/null @@ -1,7 +0,0 @@ - - - -click me diff --git a/packages/kit/test/apps/options/source/pages/resolve-route/[foo]/+page.svelte b/packages/kit/test/apps/options/source/pages/resolve-route/[foo]/+page.svelte deleted file mode 100644 index cfa4977e5705..000000000000 --- a/packages/kit/test/apps/options/source/pages/resolve-route/[foo]/+page.svelte +++ /dev/null @@ -1,5 +0,0 @@ - - -

{page.params.foo}

diff --git a/packages/kit/test/apps/options/source/pages/slash/+page.svelte b/packages/kit/test/apps/options/source/pages/slash/+page.svelte index 4b73899f4db6..dc0046be8a95 100644 --- a/packages/kit/test/apps/options/source/pages/slash/+page.svelte +++ b/packages/kit/test/apps/options/source/pages/slash/+page.svelte @@ -1,8 +1,8 @@

{page.url.pathname}

-/slash/child +/slash/child diff --git a/packages/kit/test/apps/options/test/paths-assets.test.js b/packages/kit/test/apps/options/test/paths-assets.test.js index 87b5a24e6082..f6946eb58fe9 100644 --- a/packages/kit/test/apps/options/test/paths-assets.test.js +++ b/packages/kit/test/apps/options/test/paths-assets.test.js @@ -42,10 +42,12 @@ test.describe('base path', () => { expect(await response.text()).toBe('hello there world\n'); }); - test('paths available on server side', async ({ page }) => { + test('paths available on server side', async ({ page, javaScriptEnabled }) => { await page.goto('/path-base/base/'); - expect(await page.textContent('[data-source="base"]')).toBe('/path-base'); - expect(await page.textContent('[data-source="assets"]')).toBe('/_svelte_kit_assets'); + expect(await page.textContent('[data-source="base"]')).toBe( + javaScriptEnabled ? '/path-base/' : '../' + ); + expect(await page.textContent('[data-source="assets"]')).toBe('/_svelte_kit_assets/'); }); test('loads javascript', async ({ page, javaScriptEnabled }) => { @@ -72,13 +74,6 @@ test.describe('base path', () => { expect(await page.textContent('h2')).toBe('two'); }); - test('resolveRoute accounts for base path', async ({ baseURL, page, clicknav }) => { - await page.goto('/path-base/resolve-route'); - await clicknav('[data-id=target]'); - expect(page.url()).toBe(`${baseURL}/path-base/resolve-route/resolved/`); - expect(await page.textContent('h2')).toBe('resolved'); - }); - test('server load fetch without base path does not invoke the server', async ({ page, baseURL diff --git a/packages/kit/test/apps/options/test/test.js b/packages/kit/test/apps/options/test/test.js index 01254fc0eec0..8a9683d541f7 100644 --- a/packages/kit/test/apps/options/test/test.js +++ b/packages/kit/test/apps/options/test/test.js @@ -199,7 +199,7 @@ test.describe('trailingSlash', () => { page, javaScriptEnabled }) => { - if (!javaScriptEnabled) return; + test.skip(!javaScriptEnabled, 'data-sveltekit-* only works with JavaScript'); await page.goto('/path-base/preloading'); @@ -245,17 +245,20 @@ test.describe('$app/paths', () => { test('match() works with base paths', async ({ request }) => { const response = await request.get('/path-base/match'); - expect(await response.json()).toEqual([ - { - path: '/path-base/resolve-route', - result: { id: '/resolve-route', params: {} } - }, - { - path: '/path-base/resolve-route/resolved', - result: { id: '/resolve-route/[foo]', params: { foo: 'resolved' } } - }, - { path: '/path-base/not-a-real-route-that-exists', result: null } - ]); + expect(await response.json()).toEqual( + /** @satisfies {({ path: import('$app/types').ResolvedPathname ; result: { id: import('$app/types').RouteId; params: Record } | null})[]} */ + ([ + { + path: '/path-base/base/', + result: { id: '/base', params: {} } + }, + { + path: '/path-base/base/resolved/', + result: { id: '/base/[slug]', params: { slug: 'resolved' } } + }, + { path: '/path-base/not-a-real-route-that-exists/', result: null } + ]) + ); }); }); diff --git a/packages/kit/test/prerendering/paths-base/src/routes/redirect/+page.js b/packages/kit/test/prerendering/paths-base/src/routes/redirect/+page.js index d27f8e81c372..f9b4d7bb9ffa 100644 --- a/packages/kit/test/prerendering/paths-base/src/routes/redirect/+page.js +++ b/packages/kit/test/prerendering/paths-base/src/routes/redirect/+page.js @@ -1,6 +1,6 @@ import { redirect } from '@sveltejs/kit'; -import { base } from '$app/paths'; +import { resolve } from '$app/paths'; export function load() { - redirect(301, `${base}/dynamic/foo`); + redirect(301, resolve('/dynamic/foo')); } diff --git a/packages/kit/types/index.d.ts b/packages/kit/types/index.d.ts index 628973b7feee..666676851ab0 100644 --- a/packages/kit/types/index.d.ts +++ b/packages/kit/types/index.d.ts @@ -646,14 +646,14 @@ declare module '@sveltejs/kit' { */ assets?: '' | `http://${string}` | `https://${string}`; /** - * A root-relative path that must start, but not end with `/` (e.g. `/base-path`), unless it is the empty string. This specifies where your app is served from and allows the app to live on a non-root path. Note that you need to prepend all your root-relative links with the base value or they will point to the root of your domain, not your `base` (this is how the browser works). You can use [`base` from `$app/paths`](https://svelte.dev/docs/kit/$app-paths#base) for that: `Link`. If you find yourself writing this often, it may make sense to extract this into a reusable component. + * A root-relative path that must start, but not end with `/` (e.g. `/base-path`), unless it is the empty string. This specifies where your app is served from and allows the app to live on a non-root path. Note that you need to prepend all your root-relative links with the base value or they will point to the root of your domain, not your `base` (this is how the browser works). You can use [`resolve(...)` from `$app/paths`](https://svelte.dev/docs/kit/$app-paths#resolve) for that: `Link`. If you find yourself writing this often, it may make sense to extract this into a reusable component. * @default "" */ base?: '' | `/${string}`; /** * Whether to use relative asset paths. * - * If `true`, `base` and `assets` imported from `$app/paths` will be replaced with relative asset paths during server-side rendering, resulting in more portable HTML. + * If `true`, paths created with `resolve()` and `asset()` imported from `$app/paths` will be replaced with relative asset paths during server-side rendering, resulting in more portable HTML. * If `false`, `%sveltekit.assets%` and references to build artifacts will always be root-relative paths, unless `paths.assets` is an external URL * * [Single-page app](https://svelte.dev/docs/kit/single-page-apps) fallback pages will always use absolute paths, regardless of this setting. @@ -3310,47 +3310,7 @@ declare module '$app/navigation' { } declare module '$app/paths' { - import type { RouteIdWithSearchOrHash, PathnameWithSearchOrHash, ResolvedPathname, RouteId, RouteParams, Asset, Pathname } from '$app/types'; - /** - * A string that matches [`config.kit.paths.base`](https://svelte.dev/docs/kit/configuration#paths). - * - * Example usage: `Link` - * - * @deprecated Use [`resolve(...)`](https://svelte.dev/docs/kit/$app-paths#resolve) instead - */ - export let base: '' | `/${string}`; - - /** - * An absolute path that matches [`config.kit.paths.assets`](https://svelte.dev/docs/kit/configuration#paths). - * - * > [!NOTE] If a value for `config.kit.paths.assets` is specified, it will be replaced with `'/_svelte_kit_assets'` during `vite dev` or `vite preview`, since the assets don't yet live at their eventual URL. - * - * @deprecated Use [`asset(...)`](https://svelte.dev/docs/kit/$app-paths#asset) instead - */ - export let assets: '' | `https://${string}` | `http://${string}` | '/_svelte_kit_assets'; - - /** - * @deprecated Use [`resolve(...)`](https://svelte.dev/docs/kit/$app-paths#resolve) instead - */ - export function resolveRoute( - ...args: ResolveArgs - ): ResolvedPathname; - type StripSearchOrHash = T extends `${infer Pathname}?${string}` - ? Pathname - : T extends `${infer Pathname}#${string}` - ? Pathname - : T; - - type ResolveArgs = - T extends RouteId - ? RouteParams extends Record - ? [route: T] - : [route: T, params: RouteParams] - : StripSearchOrHash extends infer U extends RouteId - ? RouteParams extends Record - ? [route: T] - : [route: T, params: RouteParams] - : [route: T]; + import type { Asset, RouteIdWithSearchOrHash, PathnameWithSearchOrHash, ResolvedPathname, Pathname, RouteId, RouteParams } from '$app/types'; /** * Resolve the URL of an asset in your `static` directory, by prefixing it with [`config.kit.paths.assets`](https://svelte.dev/docs/kit/configuration#paths) if configured, or otherwise by prefixing it with the base path. * @@ -3411,6 +3371,22 @@ declare module '$app/paths' { id: RouteId; params: Record; } | null>; + type StripSearchOrHash = T extends `${infer Pathname}?${string}` + ? Pathname + : T extends `${infer Pathname}#${string}` + ? Pathname + : T; + + type ResolveArgs = + T extends RouteId + ? RouteParams extends Record + ? [route: T] + : [route: T, params: RouteParams] + : StripSearchOrHash extends infer U extends RouteId + ? RouteParams extends Record + ? [route: T] + : [route: T, params: RouteParams] + : [route: T]; export {}; } From 271d7287096ebe2b30cc6ccb6952aa2fb4e03a2c Mon Sep 17 00:00:00 2001 From: Tee Ming Date: Fri, 26 Jun 2026 10:52:04 +1000 Subject: [PATCH 178/545] fix: use `root` for `kit.env.dir` fallback (#15792) Follow up to https://github.com/sveltejs/kit/pull/15469 where we started using the Vite `root` instead of `process.cwd()`. The fallback value of `kit.env.dir` should not use `process.cwd()` when validating the config as later on in `process_config` it will correctly be resolve to the Vite `root` setting --- ### Please don't delete this checklist! Before submitting the PR, please make sure you do the following: - [ ] It's really useful if your PR references an issue where it is discussed ahead of time. In many cases, features are absent for a reason. For large changes, please create an RFC: https://github.com/sveltejs/rfcs - [x] This message body should clearly illustrate what problems it solves. - [ ] Ideally, include a test that fails without this PR but passes with it. ### Tests - [ ] Run the tests with `pnpm test` and lint the project with `pnpm lint` and `pnpm check` ### Changesets - [ ] If your PR makes a change that should be noted in one or more packages' changelogs, generate a changeset by running `pnpm changeset` and following the prompts. Changesets that add features should be `minor` and those that fix bugs should be `patch`. Please prefix changeset messages with `feat:`, `fix:`, or `chore:`. ### Edits - [ ] Please ensure that 'Allow edits from maintainers' is checked. PRs without this option may be closed. --- packages/kit/src/core/config/index.js | 1 + packages/kit/src/core/config/index.spec.js | 3 +-- packages/kit/src/core/config/options.js | 4 +--- 3 files changed, 3 insertions(+), 5 deletions(-) diff --git a/packages/kit/src/core/config/index.js b/packages/kit/src/core/config/index.js index ec42da9807c9..f81165619bad 100644 --- a/packages/kit/src/core/config/index.js +++ b/packages/kit/src/core/config/index.js @@ -140,6 +140,7 @@ export function process_config(config, { cwd = process.cwd(), source = 'svelte.c const validated = validate_config(config, cwd); validated.kit.outDir = path.resolve(cwd, validated.kit.outDir); + validated.kit.env.dir = path.resolve(cwd, validated.kit.env.dir); for (const key in validated.kit.files) { if (key === 'hooks') { diff --git a/packages/kit/src/core/config/index.spec.js b/packages/kit/src/core/config/index.spec.js index ecf1febe86b6..cb26407713e6 100644 --- a/packages/kit/src/core/config/index.spec.js +++ b/packages/kit/src/core/config/index.spec.js @@ -1,7 +1,6 @@ import { join } from 'node:path'; import { assert, expect, test } from 'vitest'; import { validate_config, split_config } from './index.js'; -import process from 'node:process'; /** * mutates and remove keys from an object when check callback returns true @@ -68,7 +67,7 @@ const get_defaults = (prefix = '') => ({ }, embedded: false, env: { - dir: process.cwd() + dir: prefix }, experimental: { tracing: { server: false }, diff --git a/packages/kit/src/core/config/options.js b/packages/kit/src/core/config/options.js index 1e0b6e12dec6..f7e15461d92f 100644 --- a/packages/kit/src/core/config/options.js +++ b/packages/kit/src/core/config/options.js @@ -1,7 +1,5 @@ /** @import { Validator } from './types.js' */ -import process from 'node:process'; - const directives = object({ 'child-src': string_array(), 'default-src': string_array(), @@ -111,7 +109,7 @@ export const options = object( embedded: boolean(false), env: object({ - dir: string(process.cwd()) + dir: string('') }), experimental: object({ From 5597151bb0d166adb1c34d38357c07efa2106c01 Mon Sep 17 00:00:00 2001 From: Tee Ming Date: Fri, 26 Jun 2026 11:18:00 +1000 Subject: [PATCH 179/545] chore: ensure `wait_for_start` appears in autocomplete (#16154) Very insignificant but omitting the default `goto` type from the playwright test fixture allows us to override it correctly --- ### Please don't delete this checklist! Before submitting the PR, please make sure you do the following: - [ ] It's really useful if your PR references an issue where it is discussed ahead of time. In many cases, features are absent for a reason. For large changes, please create an RFC: https://github.com/sveltejs/rfcs - [ ] This message body should clearly illustrate what problems it solves. - [ ] Ideally, include a test that fails without this PR but passes with it. ### Tests - [ ] Run the tests with `pnpm test` and lint the project with `pnpm lint` and `pnpm check` ### Changesets - [ ] If your PR makes a change that should be noted in one or more packages' changelogs, generate a changeset by running `pnpm changeset` and following the prompts. Changesets that add features should be `minor` and those that fix bugs should be `patch`. Please prefix changeset messages with `feat:`, `fix:`, or `chore:`. ### Edits - [ ] Please ensure that 'Allow edits from maintainers' is checked. PRs without this option may be closed. --- packages/kit/test/types.d.ts | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/packages/kit/test/types.d.ts b/packages/kit/test/types.d.ts index 57cb80126fa7..dfe41a22eb17 100644 --- a/packages/kit/test/types.d.ts +++ b/packages/kit/test/types.d.ts @@ -11,7 +11,7 @@ import '../types/index.d.ts'; import { AfterNavigate, BeforeNavigate } from '@sveltejs/kit'; export const test: TestType< - PlaywrightTestArgs & + Omit & PlaywrightTestOptions & { app: { goto(url: string, opts?: { replaceState?: boolean }): Promise; @@ -36,10 +36,13 @@ export const test: TestType< start_server( handler: (req: IncomingMessage, res: ServerResponse) => void ): Promise<{ port: number }>; - page: Page & { + page: Omit & { goto: ( url: string, - opts?: Parameters[1] & { wait_for_started?: boolean } + opts?: Parameters[1] & { + /** Wait for `onMount` to add the 'started' class to the `` */ + wait_for_started?: boolean; + } ) => ReturnType; }; baseURL: string; From ab12cb6a07269e2a18c0a3867e608e9838c592f3 Mon Sep 17 00:00:00 2001 From: Tee Ming Date: Fri, 26 Jun 2026 11:35:32 +1000 Subject: [PATCH 180/545] breaking: remove support for `svelte.config.js` (#16007) This PR adjusts the docs and code to accept configuration only through the SvelteKit Vite plugin. Notably, it hides the `config.kit` prefix in favour of just`config.` since that `kit` property no longer exists when passing options to the SvelteKit Vite plugin ~EDIT: blocked by https://github.com/sveltejs/language-tools/issues/3055 so svelte check will fail until this is resolved~ --- ### Please don't delete this checklist! Before submitting the PR, please make sure you do the following: - [ ] It's really useful if your PR references an issue where it is discussed ahead of time. In many cases, features are absent for a reason. For large changes, please create an RFC: https://github.com/sveltejs/rfcs - [x] This message body should clearly illustrate what problems it solves. - [ ] Ideally, include a test that fails without this PR but passes with it. ### Tests - [ ] Run the tests with `pnpm test` and lint the project with `pnpm lint` and `pnpm check` ### Changesets - [x] If your PR makes a change that should be noted in one or more packages' changelogs, generate a changeset by running `pnpm changeset` and following the prompts. Changesets that add features should be `minor` and those that fix bugs should be `patch`. Please prefix changeset messages with `feat:`, `fix:`, or `chore:`. ### Edits - [x] Please ensure that 'Allow edits from maintainers' is checked. PRs without this option may be closed. --------- Co-authored-by: Rich Harris Co-authored-by: Rich Harris --- .changeset/fluffy-dolls-grow.md | 5 + .github/workflows/ci.yml | 2 - .../30-project-structure.md | 9 +- .../docs/20-core-concepts/40-page-options.md | 6 +- .../20-core-concepts/60-remote-functions.md | 36 ++-- .../docs/25-build-and-deploy/20-adapters.md | 3 - .../25-build-and-deploy/40-adapter-node.md | 9 +- .../25-build-and-deploy/50-adapter-static.md | 26 +-- .../55-single-page-apps.md | 3 - .../60-adapter-cloudflare.md | 3 - .../25-build-and-deploy/80-adapter-netlify.md | 5 +- .../25-build-and-deploy/90-adapter-vercel.md | 3 - documentation/docs/30-advanced/25-errors.md | 24 +-- .../docs/30-advanced/68-observability.md | 38 ++-- .../docs/30-advanced/70-packaging.md | 2 +- .../docs/40-best-practices/20-seo.md | 24 +-- documentation/docs/60-appendix/10-faq.md | 2 +- .../docs/60-appendix/20-integrations.md | 25 +-- .../30-migrating-to-sveltekit-2.md | 2 +- .../docs/60-appendix/40-migrating.md | 2 +- documentation/docs/60-appendix/60-glossary.md | 4 +- .../docs/98-reference/50-configuration.md | 30 +--- documentation/docs/98-reference/54-types.md | 2 +- packages/adapter-cloudflare/index.js | 2 +- packages/kit/src/core/adapt/index.js | 5 +- packages/kit/src/core/config/index.js | 6 +- packages/kit/src/core/config/index.spec.js | 40 ++--- packages/kit/src/core/config/options.js | 18 +- packages/kit/src/core/postbuild/analyse.js | 11 +- packages/kit/src/core/postbuild/prerender.js | 9 +- .../core/sync/create_manifest_data/index.js | 2 +- packages/kit/src/core/sync/write_tsconfig.js | 3 +- .../kit/src/core/sync/write_tsconfig.spec.js | 1 - packages/kit/src/exports/public.d.ts | 142 ++++++++------- packages/kit/src/exports/vite/dev/index.js | 30 ++-- packages/kit/src/exports/vite/index.js | 124 ++++++------- .../kit/src/exports/vite/preview/index.js | 5 +- packages/kit/src/exports/vite/utils.js | 18 +- packages/kit/src/exports/vite/utils.spec.js | 38 ++-- packages/kit/src/runtime/app/env/types.d.ts | 2 +- packages/kit/src/runtime/app/forms.js | 2 +- packages/kit/src/runtime/app/paths/client.js | 2 +- packages/kit/src/runtime/client/client.js | 4 +- .../kit/src/runtime/server/page/render.js | 4 +- packages/kit/src/runtime/server/utils.js | 2 +- packages/kit/src/runtime/telemetry/otel.js | 2 +- .../runtime/telemetry/otel.missing.spec.js | 2 +- packages/kit/src/types/ambient.d.ts | 8 +- packages/kit/src/types/global-private.d.ts | 8 +- packages/kit/src/types/internal.d.ts | 6 +- packages/kit/src/types/synthetic/$lib.md | 2 +- packages/kit/test/apps/async/svelte.config.js | 9 - .../kit/test/apps/basics/test/client.test.js | 3 +- packages/kit/test/apps/options/package.json | 2 +- .../kit/test/apps/options/svelte.config.js | 11 -- .../prerendering/options/svelte.config.js | 8 - packages/kit/types/index.d.ts | 167 ++++++++++-------- packages/package/src/config.js | 2 +- .../errors/no-lib-folder/svelte.config.js | 1 - .../fixtures/emitTypes-false/svelte.config.js | 3 - .../fixtures/tsconfig-specified/src/app.html | 12 ++ .../tsconfig-specified/svelte.config.js | 5 - .../tsconfig-specified/vite.config.js | 10 ++ pnpm-lock.yaml | 75 ++++---- pnpm-workspace.yaml | 2 +- 65 files changed, 505 insertions(+), 568 deletions(-) create mode 100644 .changeset/fluffy-dolls-grow.md delete mode 100644 packages/kit/test/apps/async/svelte.config.js delete mode 100644 packages/kit/test/apps/options/svelte.config.js delete mode 100644 packages/kit/test/prerendering/options/svelte.config.js delete mode 100644 packages/package/test/errors/no-lib-folder/svelte.config.js delete mode 100644 packages/package/test/fixtures/emitTypes-false/svelte.config.js create mode 100644 packages/package/test/fixtures/tsconfig-specified/src/app.html delete mode 100644 packages/package/test/fixtures/tsconfig-specified/svelte.config.js create mode 100644 packages/package/test/fixtures/tsconfig-specified/vite.config.js diff --git a/.changeset/fluffy-dolls-grow.md b/.changeset/fluffy-dolls-grow.md new file mode 100644 index 000000000000..9974b9f90f03 --- /dev/null +++ b/.changeset/fluffy-dolls-grow.md @@ -0,0 +1,5 @@ +--- +'@sveltejs/kit': major +--- + +breaking: require Svelte config options to be passed through the Vite plugin diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 66a4bbaab262..7cf1f4dfe990 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -83,8 +83,6 @@ jobs: - run: pnpm playwright install ${{ matrix.e2e-browser }} - run: pnpm run sync-all - run: pnpm test:kit - env: - NODE_OPTIONS: ${{matrix.node-version == 22 && '--experimental-strip-types' || ''}} # allows loading svelte.config.ts - name: Print flaky test report run: node scripts/print-flaky-test-report.js - name: Archive test results diff --git a/documentation/docs/10-getting-started/30-project-structure.md b/documentation/docs/10-getting-started/30-project-structure.md index 948ed337a377..11b304e509d4 100644 --- a/documentation/docs/10-getting-started/30-project-structure.md +++ b/documentation/docs/10-getting-started/30-project-structure.md @@ -26,7 +26,6 @@ my-project/ ├ tests/ │ └ [your tests] ├ package.json -├ svelte.config.js ├ tsconfig.json └ vite.config.js ``` @@ -77,18 +76,14 @@ Your `package.json` file must include `@sveltejs/kit`, `svelte` and `vite` as `d When you create a project with `npx sv create`, you'll also notice that `package.json` includes `"type": "module"`. This means that `.js` files are interpreted as native JavaScript modules with `import` and `export` keywords. Legacy CommonJS files need a `.cjs` file extension. -### svelte.config.js +### vite.config.js -This file contains your Svelte and SvelteKit [configuration](configuration). +A SvelteKit project is really just a [Vite](https://vitejs.dev) project that uses the [`@sveltejs/kit/vite`](@sveltejs-kit-vite) plugin, along with any other [Vite configuration](https://vitejs.dev/config/). The plugin accepts your Svelte and SvelteKit [configuration](configuration). ### tsconfig.json This file (or `jsconfig.json`, if you prefer type-checked `.js` files over `.ts` files) configures TypeScript, if you added typechecking during `npx sv create`. Since SvelteKit relies on certain configuration being set a specific way, it generates its own `.svelte-kit/tsconfig.json` file which your own config `extends`. To make changes to top-level options such as `include` and `exclude`, we recommend extending the generated config; see the [`typescript.config` setting](configuration#typescript) for more details. -### vite.config.js - -A SvelteKit project is really just a [Vite](https://vitejs.dev) project that uses the [`@sveltejs/kit/vite`](@sveltejs-kit-vite) plugin, along with any other [Vite configuration](https://vitejs.dev/config/). - ## Other files ### .svelte-kit diff --git a/documentation/docs/20-core-concepts/40-page-options.md b/documentation/docs/20-core-concepts/40-page-options.md index 1cfa034aebba..3136792378cf 100644 --- a/documentation/docs/20-core-concepts/40-page-options.md +++ b/documentation/docs/20-core-concepts/40-page-options.md @@ -33,7 +33,7 @@ export const prerender = 'auto'; > [!NOTE] If your entire app is suitable for prerendering, you can use [`adapter-static`](adapter-static), which will output files suitable for use with any static webserver. -The prerenderer will start at the root of your app and generate files for any prerenderable pages or `+server.js` routes it finds. Each page is scanned for `` elements that point to other pages that are candidates for prerendering — because of this, you generally don't need to specify which pages should be accessed. If you _do_ need to specify which pages should be accessed by the prerenderer, you can do so with [`config.kit.prerender.entries`](configuration#prerender), or by exporting an [`entries`](#entries) function from your dynamic route. +The prerenderer will start at the root of your app and generate files for any prerenderable pages or `+server.js` routes it finds. Each page is scanned for `` elements that point to other pages that are candidates for prerendering — because of this, you generally don't need to specify which pages should be accessed. If you _do_ need to specify which pages should be accessed by the prerenderer, you can do so with [`config.prerender.entries`](configuration#prerender), or by exporting an [`entries`](#entries) function from your dynamic route. While prerendering, the value of `building` imported from [`$app/env`]($app-env) will be `true`. @@ -80,7 +80,7 @@ If you encounter an error like 'The following routes were marked as prerenderabl Since these routes cannot be dynamically server-rendered, this will cause errors when people try to access the route in question. There are a few ways to fix it: -* Ensure that SvelteKit can find the route by following links from [`config.kit.prerender.entries`](configuration#prerender) or the [`entries`](#entries) page option. Add links to dynamic routes (i.e. pages with `[parameters]` ) to this option if they are not found through crawling the other entry points, else they are not prerendered because SvelteKit doesn't know what value the parameters should have. Pages not marked as prerenderable will be ignored and their links to other pages will not be crawled, even if some of them would be prerenderable. +* Ensure that SvelteKit can find the route by following links from [`config.prerender.entries`](configuration#prerender) or the [`entries`](#entries) page option. Add links to dynamic routes (i.e. pages with `[parameters]` ) to this option if they are not found through crawling the other entry points, else they are not prerendered because SvelteKit doesn't know what value the parameters should have. Pages not marked as prerenderable will be ignored and their links to other pages will not be crawled, even if some of them would be prerenderable. * Ensure that SvelteKit can find the route by discovering a link to it from one of your other prerendered pages that have server-side rendering enabled. * Change `export const prerender = true` to `export const prerender = 'auto'`. Routes with `'auto'` can be dynamically server rendered @@ -98,7 +98,7 @@ SvelteKit will discover pages to prerender automatically, by starting at _entry Most of the time, that's enough. In some situations, links to pages like `/blog/hello-world` might not exist (or might not exist on prerendered pages), in which case we need to tell SvelteKit about their existence. -This can be done with [`config.kit.prerender.entries`](configuration#prerender), or by exporting an `entries` function from a `+page.js`, a `+page.server.js` or a `+server.js` belonging to a dynamic route: +This can be done with [`config.prerender.entries`](configuration#prerender), or by exporting an `entries` function from a `+page.js`, a `+page.server.js` or a `+server.js` belonging to a dynamic route: ```js /// file: src/routes/blog/[slug]/+page.server.js diff --git a/documentation/docs/20-core-concepts/60-remote-functions.md b/documentation/docs/20-core-concepts/60-remote-functions.md index 03882234ae7d..152f7f5b4d4f 100644 --- a/documentation/docs/20-core-concepts/60-remote-functions.md +++ b/documentation/docs/20-core-concepts/60-remote-functions.md @@ -10,25 +10,27 @@ Remote functions are a tool for type-safe communication between client and serve Combined with Svelte's experimental support for [`await`](/docs/svelte/await-expressions), it allows you to load and manipulate data directly inside your components. -This feature is currently experimental, meaning it is likely to contain bugs and is subject to change without notice. You must opt in by adding the `compilerOptions.experimental.async` and `kit.experimental.remoteFunctions` options in your `svelte.config.js`: +This feature is currently experimental, meaning it is likely to contain bugs and is subject to change without notice. You must opt in by adding the `compilerOptions.experimental.async` and `experimental.remoteFunctions` options to the SvelteKit plugin in your `vite.config.js`: ```js -/// file: svelte.config.js -/** @type {import('@sveltejs/kit').Config} */ -const config = { - kit: { - experimental: { - +++remoteFunctions: true+++ - } - }, - compilerOptions: { - experimental: { - +++async: true+++ - } - } -}; - -export default config; +/// file: vite.config.js +import { sveltekit } from '@sveltejs/kit/vite'; +import { defineConfig } from 'vite'; + +export default defineConfig({ + plugins: [ + sveltekit({ + experimental: { + +++remoteFunctions: true+++ + }, + compilerOptions: { + experimental: { + +++async: true+++ + } + } + }) + ], +}); ``` ## Overview diff --git a/documentation/docs/25-build-and-deploy/20-adapters.md b/documentation/docs/25-build-and-deploy/20-adapters.md index 264689902a61..ae9999044ccb 100644 --- a/documentation/docs/25-build-and-deploy/20-adapters.md +++ b/documentation/docs/25-build-and-deploy/20-adapters.md @@ -42,9 +42,6 @@ export default defineConfig({ }); ``` -> [!LEGACY] -> The `adapter` option was moved to the SvelteKit Vite plugin in SvelteKit 3.0.0. In earlier versions, you had to add it to the `kit` property in the `svelte.config.js` file instead. - ## Platform-specific context Some adapters may have access to additional information about the request. For example, Cloudflare Workers can access an `env` object containing KV namespaces etc. This can be passed to the `RequestEvent` used in [hooks](hooks) and [server routes](routing#server) as the `platform` property — consult each adapter's documentation to learn more. diff --git a/documentation/docs/25-build-and-deploy/40-adapter-node.md b/documentation/docs/25-build-and-deploy/40-adapter-node.md index f3f595d5da6a..a7aa2b659c38 100644 --- a/documentation/docs/25-build-and-deploy/40-adapter-node.md +++ b/documentation/docs/25-build-and-deploy/40-adapter-node.md @@ -16,13 +16,14 @@ import { sveltekit } from '@sveltejs/kit/vite'; import { defineConfig } from 'vite'; export default defineConfig({ - plugins: [sveltekit({ adapter: adapter() })] + plugins: [ + sveltekit({ + adapter: adapter() + }) + ] }); ``` -> [!LEGACY] -> The `adapter` option was moved to the SvelteKit Vite plugin in SvelteKit 3.0.0. In earlier versions, you had to add it to the `kit` property in the `svelte.config.js` file instead. - ## Deploying First, build your app with `npm run build`. This will create the production server in the output directory specified in the adapter options, defaulting to `build`. diff --git a/documentation/docs/25-build-and-deploy/50-adapter-static.md b/documentation/docs/25-build-and-deploy/50-adapter-static.md index d9760021d634..fa34009fc7af 100644 --- a/documentation/docs/25-build-and-deploy/50-adapter-static.md +++ b/documentation/docs/25-build-and-deploy/50-adapter-static.md @@ -48,9 +48,6 @@ export const prerender = true; > [!NOTE] You must ensure SvelteKit's [`ssr`](page-options#ssr) option isn't set to `false`. Otherwise, prerendering will save an empty 'shell' page instead of the fully rendered content. -> [!LEGACY] -> The `adapter` option was moved to the SvelteKit Vite plugin in SvelteKit 3.0.0. In earlier versions, you had to add it to the `kit` property in the `svelte.config.js` file instead. - ## Zero-config support Some platforms have zero-config support (more to come in future): @@ -101,7 +98,7 @@ By default, `adapter-static` checks that either all pages and endpoints (if any) ## GitHub Pages -When building for [GitHub Pages](https://docs.github.com/en/pages/getting-started-with-github-pages/about-github-pages), if your repo name is not equivalent to `your-username.github.io`, make sure to update [`config.kit.paths.base`](configuration#paths) to match your repo name. This is because the site will be served from `https://your-username.github.io/your-repo-name` rather than from the root. +When building for [GitHub Pages](https://docs.github.com/en/pages/getting-started-with-github-pages/about-github-pages), if your repo name is not equivalent to `your-username.github.io`, make sure to update [`config.paths.base`](configuration#paths) to match your repo name. This is because the site will be served from `https://your-username.github.io/your-repo-name` rather than from the root. You'll also want to generate a fallback `404.html` page to replace the default 404 page shown by GitHub Pages. @@ -109,22 +106,8 @@ A config for GitHub Pages might look like the following: ```js // @errors: 2307 2322 -/// file: svelte.config.js -/** @type {import('@sveltejs/kit').Config} */ -const config = { - kit: { - paths: { - base: process.argv.includes('dev') ? '' : process.env.BASE_PATH - } - } -}; - -export default config; -``` - -```js -// @errors: 2307 /// file: vite.config.js +import process from 'node:process'; import adapter from '@sveltejs/adapter-static'; import { sveltekit } from '@sveltejs/kit/vite'; import { defineConfig } from 'vite'; @@ -134,7 +117,10 @@ export default defineConfig({ sveltekit({ adapter: adapter({ fallback: '404.html' - }) + }), + paths: { + base: process.argv.includes('dev') ? '' : process.env.BASE_PATH + }, }) ] }); diff --git a/documentation/docs/25-build-and-deploy/55-single-page-apps.md b/documentation/docs/25-build-and-deploy/55-single-page-apps.md index bb7c8e2de7fe..5314dda869f8 100644 --- a/documentation/docs/25-build-and-deploy/55-single-page-apps.md +++ b/documentation/docs/25-build-and-deploy/55-single-page-apps.md @@ -42,9 +42,6 @@ On some hosts it may be something else entirely — consult your platform's docu > [!NOTE] Note that the fallback page will always contain absolute asset paths (i.e. beginning with `/` rather than `.`) regardless of the value of [`paths.relative`](configuration#paths), since it is used to respond to requests for arbitrary paths. -> [!LEGACY] -> The `adapter` option was moved to the SvelteKit Vite plugin in SvelteKit 3.0.0. In earlier versions, you had to add it to the `kit` property in the `svelte.config.js` file instead. - ## Prerendering individual pages If you want certain pages to be prerendered, you can re-enable `ssr` alongside `prerender` for just those parts of your app: diff --git a/documentation/docs/25-build-and-deploy/60-adapter-cloudflare.md b/documentation/docs/25-build-and-deploy/60-adapter-cloudflare.md index 8273a08485a1..5003c5710e7f 100644 --- a/documentation/docs/25-build-and-deploy/60-adapter-cloudflare.md +++ b/documentation/docs/25-build-and-deploy/60-adapter-cloudflare.md @@ -45,9 +45,6 @@ export default defineConfig({ }); ``` -> [!LEGACY] -> The `adapter` option was moved to the SvelteKit Vite plugin in SvelteKit 3.0.0. In earlier versions, you had to add it to the `kit` property in the `svelte.config.js` file instead. - ## Options ### config diff --git a/documentation/docs/25-build-and-deploy/80-adapter-netlify.md b/documentation/docs/25-build-and-deploy/80-adapter-netlify.md index 4d4bb28b5887..f415c66b9e8f 100644 --- a/documentation/docs/25-build-and-deploy/80-adapter-netlify.md +++ b/documentation/docs/25-build-and-deploy/80-adapter-netlify.md @@ -45,9 +45,6 @@ Then, make sure you have a [netlify.toml](https://docs.netlify.com/configure-bui If the `netlify.toml` file or the `build.publish` value is missing, a default value of `"build"` will be used. Note that if you have set the publish directory in the Netlify UI to something else then you will need to set it in `netlify.toml` too, or use the default value of `"build"`. -> [!LEGACY] -> The `adapter` option was moved to the SvelteKit Vite plugin in SvelteKit 3.0.0. In earlier versions, you had to add it to the `kit` property in the `svelte.config.js` file instead. - ### Node version New projects will use the current Node LTS version by default. However, if you're upgrading a project you created a while ago it may be stuck on an older version. See [the Netlify docs](https://docs.netlify.com/configure-builds/manage-dependencies/#node-js-and-javascript) for details on manually specifying a current Node version. @@ -87,7 +84,7 @@ The [`_headers`](https://docs.netlify.com/routing/headers/#syntax-for-the-header ### Netlify Forms 1. Create your Netlify HTML form as described [here](https://docs.netlify.com/forms/setup/#html-forms), e.g. as `/routes/contact/+page.svelte`. (Don't forget to add the hidden `form-name` input element!) -2. Netlify's build bot parses your HTML files at deploy time, which means your form must be [prerendered](page-options#prerender) as HTML. You can either add `export const prerender = true` to your `contact.svelte` to prerender just that page or set the `kit.prerender.force: true` option to prerender all pages. +2. Netlify's build bot parses your HTML files at deploy time, which means your form must be [prerendered](page-options#prerender) as HTML. You can either add `export const prerender = true` to your `contact.svelte` to prerender just that page or set the `prerender.force: true` option to prerender all pages. 3. If your Netlify form has a [custom success message](https://docs.netlify.com/forms/setup/#success-messages) like `
` then ensure the corresponding `/routes/success/+page.svelte` exists and is prerendered. ### Netlify Functions diff --git a/documentation/docs/25-build-and-deploy/90-adapter-vercel.md b/documentation/docs/25-build-and-deploy/90-adapter-vercel.md index bc27c4a3c0c4..29ba141a2535 100644 --- a/documentation/docs/25-build-and-deploy/90-adapter-vercel.md +++ b/documentation/docs/25-build-and-deploy/90-adapter-vercel.md @@ -28,9 +28,6 @@ export default defineConfig({ }); ``` -> [!LEGACY] -> The `adapter` option was moved to the SvelteKit Vite plugin in SvelteKit 3.0.0. In earlier versions, you had to add it to the `kit` property in the `svelte.config.js` file instead. - ## Deployment configuration To control how your routes are deployed to Vercel as functions, you can specify deployment configuration, either through the option shown above or with [`export const config`](page-options#config) inside `+server.js`, `+page(.server).js` and `+layout(.server).js` files. diff --git a/documentation/docs/30-advanced/25-errors.md b/documentation/docs/30-advanced/25-errors.md index 95538d279afe..81b615e38691 100644 --- a/documentation/docs/30-advanced/25-errors.md +++ b/documentation/docs/30-advanced/25-errors.md @@ -107,17 +107,19 @@ Ordinarily, if an error happens during server-side rendering (for example inside Since SvelteKit 2.54 and Svelte 5.53, you can change this by enabling the experimental `handleRenderingErrors` option in your config: ```js -/// file: svelte.config.js -/** @type {import('@sveltejs/kit').Config} */ -const config = { - kit: { - experimental: { - handleRenderingErrors: true - } - } -}; - -export default config; +/// file: vite.config.js +import { sveltekit } from '@sveltejs/kit/vite'; +import { defineConfig } from 'vite'; + +export default defineConfig({ + plugins: [ + sveltekit({ + experimental: { + handleRenderingErrors: true + } + }) + ] +}); ``` When this is enabled, SvelteKit will wrap your route components in an error boundary. If an error occurs during rendering, the nearest [`+error.svelte`](routing#error) page will be shown, just as if the error had occurred in a `load` function. diff --git a/documentation/docs/30-advanced/68-observability.md b/documentation/docs/30-advanced/68-observability.md index 0d7840294b9a..e2be898dace9 100644 --- a/documentation/docs/30-advanced/68-observability.md +++ b/documentation/docs/30-advanced/68-observability.md @@ -15,25 +15,27 @@ Sometimes, you may need to observe how your application is behaving in order to Just telling SvelteKit to emit spans won't get you far, though — you need to actually collect them somewhere to be able to view them. SvelteKit provides `src/instrumentation.server.ts` as a place to write your tracing setup and instrumentation code. It's guaranteed to be run prior to your application code being imported, providing your deployment platform supports it and your adapter is aware of it. -Both of these features are currently experimental, meaning they are likely to contain bugs and are subject to change without notice. You must opt in by adding the `kit.experimental.tracing.server` and `kit.experimental.instrumentation.server` option in your `svelte.config.js`: +Both of these features are currently experimental, meaning they are likely to contain bugs and are subject to change without notice. You must opt in by adding the `experimental.tracing.server` and `experimental.instrumentation.server` option of the SvelteKit plugin in your `vite.config.js`: ```js -/// file: svelte.config.js -/** @type {import('@sveltejs/kit').Config} */ -const config = { - kit: { - experimental: { - +++tracing: { - server: true - }, - instrumentation: { - server: true - }+++ - } - } -}; - -export default config; +/// file: vite.config.js +import { sveltekit } from '@sveltejs/kit/vite'; +import { defineConfig } from 'vite'; + +export default defineConfig({ + plugins: [ + sveltekit({ + experimental: { + +++tracing: { + server: true + }, + instrumentation: { + server: true + }+++ + } + }) + ] +}); ``` > [!NOTE] Tracing — and more significantly, observability instrumentation — can have a nontrivial overhead. Before you go all-in on tracing, consider whether or not you really need it, or if it might be more appropriate to turn it on in development and preview environments only. @@ -66,7 +68,7 @@ async function authenticate() { To view your first trace, you'll need to set up a local collector. We'll use [Jaeger](https://www.jaegertracing.io/docs/getting-started/) in this example, as they provide an easy-to-use quickstart command. Once your collector is running locally: -- Turn on the experimental flags mentioned earlier in your `svelte.config.js` file +- Turn on the experimental flags mentioned earlier in your `vite.config.js` file - Use your package manager to install the dependencies you'll need: ```sh npm i @opentelemetry/sdk-node @opentelemetry/auto-instrumentations-node @opentelemetry/exporter-trace-otlp-proto import-in-the-middle diff --git a/documentation/docs/30-advanced/70-packaging.md b/documentation/docs/30-advanced/70-packaging.md index 680fada3c0aa..12d9eb852e51 100644 --- a/documentation/docs/30-advanced/70-packaging.md +++ b/documentation/docs/30-advanced/70-packaging.md @@ -189,7 +189,7 @@ You can read more about that feature [here](https://www.typescriptlang.org/docs/ You should avoid using SvelteKit-specific modules like `$app/env` in your packages unless you intend for them to only be consumable by other SvelteKit projects. E.g. rather than using `import { browser } from '$app/env'` you could use `import { BROWSER } from 'esm-env'` ([see esm-env docs](https://github.com/benmccann/esm-env)). You may also wish to pass in things like the current URL or a navigation action as a prop rather than relying directly on `$app/state`, `$app/navigation`, etc. Writing your app in this more generic fashion will also make it easier to set up tools for testing, UI demos and so on. -Ensure that you add [aliases](configuration#alias) via `svelte.config.js` (not `vite.config.js` or `tsconfig.json`), so that they are processed by `svelte-package`. +Ensure that you add [aliases](configuration#alias) via the SvelteKit plugin in your `vite.config.js` (not `tsconfig.json`), so that they are processed by `svelte-package`. You should think carefully about whether or not the changes you make to your package are a bug fix, a new feature, or a breaking change, and update the package version accordingly. Note that if you remove any paths from `exports` or any `export` conditions inside them from your existing library, that should be regarded as a breaking change. diff --git a/documentation/docs/40-best-practices/20-seo.md b/documentation/docs/40-best-practices/20-seo.md index b3c50c1e38ef..bf53c42203e3 100644 --- a/documentation/docs/40-best-practices/20-seo.md +++ b/documentation/docs/40-best-practices/20-seo.md @@ -62,17 +62,19 @@ export async function GET() { An unfortunate reality of modern web development is that it is sometimes necessary to create an [Accelerated Mobile Pages (AMP)](https://amp.dev/) version of your site. In SvelteKit this can be done by setting the [`inlineStyleThreshold`](configuration#inlineStyleThreshold) option... ```js -/// file: svelte.config.js -/** @type {import('@sveltejs/kit').Config} */ -const config = { - kit: { - // since isn't - // allowed, inline all styles - inlineStyleThreshold: Infinity - } -}; - -export default config; +/// file: vite.config.js +import { defineConfig } from 'vite'; +import { sveltekit } from '@sveltejs/kit/vite'; + +export default defineConfig({ + plugins: [ + sveltekit({ + // since isn't + // allowed, inline all styles + inlineStyleThreshold: Infinity + }) + ] +}); ``` ...disabling `csr` in your root `+layout.js`/`+layout.server.js`... diff --git a/documentation/docs/60-appendix/10-faq.md b/documentation/docs/60-appendix/10-faq.md index f713d4e3cce1..a488eee1b681 100644 --- a/documentation/docs/60-appendix/10-faq.md +++ b/documentation/docs/60-appendix/10-faq.md @@ -16,7 +16,7 @@ If you'd like to include your application's version number or other information ```ts // @errors: 2732 -/// file: svelte.config.js +/// file: vite.config.js import pkg from './package.json' with { type: 'json' }; ``` diff --git a/documentation/docs/60-appendix/20-integrations.md b/documentation/docs/60-appendix/20-integrations.md index 89499c832c24..e38ccefed3ee 100644 --- a/documentation/docs/60-appendix/20-integrations.md +++ b/documentation/docs/60-appendix/20-integrations.md @@ -7,20 +7,21 @@ title: Integrations [`vitePreprocess`](https://github.com/sveltejs/vite-plugin-svelte/blob/main/docs/preprocess.md) preprocesses ``; - }); - - css = dropcss({ css, html: markup }).css; - return markup.replace('', `${css}`); - } - } - }); -} - -``` - -> [!NOTE] It's a good idea to use the `handle` hook to validate the transformed HTML using `amphtml-validator`, but only if you're prerendering pages since it's very slow. diff --git a/packages/amp/.gitignore b/packages/amp/.gitignore deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/packages/amp/CHANGELOG.md b/packages/amp/CHANGELOG.md deleted file mode 100644 index 336e7c6fe82b..000000000000 --- a/packages/amp/CHANGELOG.md +++ /dev/null @@ -1,92 +0,0 @@ -# @sveltejs/amp - -## 1.1.5 -### Patch Changes - - -- chore: add `.git` to the end of `package.json` repository url ([#14134](https://github.com/sveltejs/kit/pull/14134)) - -- Updated dependencies [[`c968aef`](https://github.com/sveltejs/kit/commit/c968aef5727f978244d5160657b4a7ac651384ae)]: - - @sveltejs/kit@2.27.3 - -## 1.1.4 -### Patch Changes - - -- docs: update URLs for new svelte.dev site ([#12857](https://github.com/sveltejs/kit/pull/12857)) - -- Updated dependencies [[`dcbe4222a194c5f90cfc0fc020cf065f7a4e4c46`](https://github.com/sveltejs/kit/commit/dcbe4222a194c5f90cfc0fc020cf065f7a4e4c46), [`4cdbf76fbbf0c0ce7f574ef69c8daddcf954d39d`](https://github.com/sveltejs/kit/commit/4cdbf76fbbf0c0ce7f574ef69c8daddcf954d39d), [`3a9b78f04786898ca93f6d4b75ab18d26bc45192`](https://github.com/sveltejs/kit/commit/3a9b78f04786898ca93f6d4b75ab18d26bc45192), [`723eb8b31e6a22c82f730c30e485386c8676b746`](https://github.com/sveltejs/kit/commit/723eb8b31e6a22c82f730c30e485386c8676b746), [`8ec471c875345b751344e67580ff1b772ef2735b`](https://github.com/sveltejs/kit/commit/8ec471c875345b751344e67580ff1b772ef2735b)]: - - @sveltejs/kit@2.7.3 - -## 1.1.3 -### Patch Changes - - -- chore: configure provenance in a simpler manner ([#12570](https://github.com/sveltejs/kit/pull/12570)) - -- Updated dependencies [[`087a43d391fc38b8c008fb39a804dc6988974101`](https://github.com/sveltejs/kit/commit/087a43d391fc38b8c008fb39a804dc6988974101)]: - - @sveltejs/kit@2.5.22 - -## 1.1.2 -### Patch Changes - - -- chore: package provenance ([#12567](https://github.com/sveltejs/kit/pull/12567)) - -- Updated dependencies [[`4930a8443caa53bcecee7b690cd28e429b1c8a20`](https://github.com/sveltejs/kit/commit/4930a8443caa53bcecee7b690cd28e429b1c8a20)]: - - @sveltejs/kit@2.5.21 - -## 1.1.1 - -### Patch Changes - -- chore: add keywords for discovery in npm search ([#12330](https://github.com/sveltejs/kit/pull/12330)) - -- Updated dependencies [[`25acb1d9fce998dccd8050b93cf4142c2b082611`](https://github.com/sveltejs/kit/commit/25acb1d9fce998dccd8050b93cf4142c2b082611), [`642c4a4aff4351b786fe6274aa2f0bf7d905faf9`](https://github.com/sveltejs/kit/commit/642c4a4aff4351b786fe6274aa2f0bf7d905faf9), [`0a0e9aa897123ebec50af08e9385b2ca4fc5bb28`](https://github.com/sveltejs/kit/commit/0a0e9aa897123ebec50af08e9385b2ca4fc5bb28)]: - - @sveltejs/kit@2.5.11 - -## 1.1.0 - -### Minor Changes - -- feat: allow SvelteKit 2 as peer dependency ([#11233](https://github.com/sveltejs/kit/pull/11233)) - -## 1.0.2 - -### Patch Changes - -- fix: publish missing files ([#8532](https://github.com/sveltejs/kit/pull/8532)) - -## 1.0.1 - -### Patch Changes - -- chore: remove superfluous main field from package.json ([#8519](https://github.com/sveltejs/kit/pull/8519)) - -- Updated dependencies [[`7e2d3405`](https://github.com/sveltejs/kit/commit/7e2d34056e99f371e22406d941b764df365a2649)]: - - @sveltejs/kit@1.1.1 - -## 1.0.0 - -### Major Changes - -First major release, see below for the history of changes that lead up to this. -Starting from now all releases follow semver and changes will be listed as Major/Minor/Patch - -## 1.0.0-next.3 - -### Patch Changes - -- chore: add peerDependencies, add more specific next version ([#8141](https://github.com/sveltejs/kit/pull/8141)) - -## 1.0.0-next.2 - -### Patch Changes - -- Amend boilerplate to match current recommendations ([#7184](https://github.com/sveltejs/kit/pull/7184)) - -## 1.0.0-next.1 - -### Patch Changes - -- Add types to pkg.exports ([#5045](https://github.com/sveltejs/kit/pull/5045)) diff --git a/packages/amp/index.d.ts b/packages/amp/index.d.ts deleted file mode 100644 index 475cec2b75c3..000000000000 --- a/packages/amp/index.d.ts +++ /dev/null @@ -1 +0,0 @@ -export function transform(html: string): string; diff --git a/packages/amp/index.js b/packages/amp/index.js deleted file mode 100644 index 0c1baedb1838..000000000000 --- a/packages/amp/index.js +++ /dev/null @@ -1,28 +0,0 @@ -// https://amp.dev/documentation/guides-and-tutorials/learn/spec/amp-boilerplate/ -const boilerplate = ` - - - -`; - -/** @param {string} html */ -export function transform(html) { - return html - .replace(//, (_match, $1) => ``; - }); - - css = dropcss({ css, html: markup }).css; - return markup.replace('', `${css}`); - } - } - }); -} diff --git a/packages/kit/test/apps/amp/src/routes/http-equiv/cache-control/+page.js b/packages/kit/test/apps/amp/src/routes/http-equiv/cache-control/+page.js deleted file mode 100644 index feb67e3e4c07..000000000000 --- a/packages/kit/test/apps/amp/src/routes/http-equiv/cache-control/+page.js +++ /dev/null @@ -1,8 +0,0 @@ -export const prerender = true; - -/** @type {import('./$types').PageLoad} */ -export function load({ setHeaders }) { - setHeaders({ - 'cache-control': 'public, max-age=300' - }); -} diff --git a/packages/kit/test/apps/amp/src/routes/http-equiv/cache-control/+page.svelte b/packages/kit/test/apps/amp/src/routes/http-equiv/cache-control/+page.svelte deleted file mode 100644 index 63edda10a55f..000000000000 --- a/packages/kit/test/apps/amp/src/routes/http-equiv/cache-control/+page.svelte +++ /dev/null @@ -1 +0,0 @@ -

the cache-control headers should be removed from this page

diff --git a/packages/kit/test/apps/amp/src/routes/invalid/+page.svelte b/packages/kit/test/apps/amp/src/routes/invalid/+page.svelte deleted file mode 100644 index cfb5e5dd32a5..000000000000 --- a/packages/kit/test/apps/amp/src/routes/invalid/+page.svelte +++ /dev/null @@ -1,2 +0,0 @@ - -
invalid diff --git a/packages/kit/test/apps/amp/src/routes/invalid/has-stylesheet/+page.svelte b/packages/kit/test/apps/amp/src/routes/invalid/has-stylesheet/+page.svelte deleted file mode 100644 index e6c9b2bdb3c2..000000000000 --- a/packages/kit/test/apps/amp/src/routes/invalid/has-stylesheet/+page.svelte +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/packages/kit/test/apps/amp/src/routes/origin.json/+server.js b/packages/kit/test/apps/amp/src/routes/origin.json/+server.js deleted file mode 100644 index 142be28ffbca..000000000000 --- a/packages/kit/test/apps/amp/src/routes/origin.json/+server.js +++ /dev/null @@ -1,6 +0,0 @@ -import { json } from '@sveltejs/kit'; - -/** @type {import('@sveltejs/kit').RequestHandler} */ -export function GET({ url }) { - return json({ origin: url.origin }); -} diff --git a/packages/kit/test/apps/amp/src/routes/origin/+page.js b/packages/kit/test/apps/amp/src/routes/origin/+page.js deleted file mode 100644 index 298a00a667d7..000000000000 --- a/packages/kit/test/apps/amp/src/routes/origin/+page.js +++ /dev/null @@ -1,10 +0,0 @@ -/** @type {import('@sveltejs/kit').Load} */ -export async function load({ url, fetch }) { - const res = await fetch('/origin.json'); - const data = await res.json(); - - return { - origin: url.origin, - data - }; -} diff --git a/packages/kit/test/apps/amp/src/routes/origin/+page.svelte b/packages/kit/test/apps/amp/src/routes/origin/+page.svelte deleted file mode 100644 index ad574575c080..000000000000 --- a/packages/kit/test/apps/amp/src/routes/origin/+page.svelte +++ /dev/null @@ -1,10 +0,0 @@ - - -

{data.origin}

-

{page.url.origin}

-

{data.data.origin}

diff --git a/packages/kit/test/apps/amp/src/routes/styles/+page.svelte b/packages/kit/test/apps/amp/src/routes/styles/+page.svelte deleted file mode 100644 index 08db544b1211..000000000000 --- a/packages/kit/test/apps/amp/src/routes/styles/+page.svelte +++ /dev/null @@ -1,16 +0,0 @@ - - -{#if Math.random() <= 1} -

this text is rendered

-{:else} - -{/if} - - diff --git a/packages/kit/test/apps/amp/src/routes/styles/Unused.svelte b/packages/kit/test/apps/amp/src/routes/styles/Unused.svelte deleted file mode 100644 index 76039659e1e2..000000000000 --- a/packages/kit/test/apps/amp/src/routes/styles/Unused.svelte +++ /dev/null @@ -1,7 +0,0 @@ -

this component will never be rendered

- - diff --git a/packages/kit/test/apps/amp/src/routes/styles/imported.css b/packages/kit/test/apps/amp/src/routes/styles/imported.css deleted file mode 100644 index 9a9f3c1f3279..000000000000 --- a/packages/kit/test/apps/amp/src/routes/styles/imported.css +++ /dev/null @@ -1,3 +0,0 @@ -.shouty { - text-transform: uppercase; -} diff --git a/packages/kit/test/apps/amp/src/routes/valid.json/+server.js b/packages/kit/test/apps/amp/src/routes/valid.json/+server.js deleted file mode 100644 index 714189a71ae4..000000000000 --- a/packages/kit/test/apps/amp/src/routes/valid.json/+server.js +++ /dev/null @@ -1,5 +0,0 @@ -import { json } from '@sveltejs/kit'; - -export function GET() { - return json({ answer: 42 }); -} diff --git a/packages/kit/test/apps/amp/src/routes/valid/+page.js b/packages/kit/test/apps/amp/src/routes/valid/+page.js deleted file mode 100644 index aaf112e513dc..000000000000 --- a/packages/kit/test/apps/amp/src/routes/valid/+page.js +++ /dev/null @@ -1,6 +0,0 @@ -/** @type {import('@sveltejs/kit').Load} */ -export async function load({ fetch }) { - const res = await fetch('/valid.json'); - const { answer } = await res.json(); - return { answer }; -} diff --git a/packages/kit/test/apps/amp/src/routes/valid/+page.svelte b/packages/kit/test/apps/amp/src/routes/valid/+page.svelte deleted file mode 100644 index b8a04f49232a..000000000000 --- a/packages/kit/test/apps/amp/src/routes/valid/+page.svelte +++ /dev/null @@ -1,16 +0,0 @@ - - -

Hello from the {browser ? 'client' : 'server'} in {dev ? 'dev' : 'prod'} mode!

-

The answer is {data.answer}

-

This text is red

- - diff --git a/packages/kit/test/apps/amp/test/test.js b/packages/kit/test/apps/amp/test/test.js deleted file mode 100644 index 06e0b8977c8f..000000000000 --- a/packages/kit/test/apps/amp/test/test.js +++ /dev/null @@ -1,91 +0,0 @@ -import fs from 'node:fs'; -import process from 'node:process'; -import { expect } from '@playwright/test'; -import { test } from '../../../utils.js'; - -test.describe.configure({ mode: 'parallel' }); - -test('renders an AMP page', async ({ page, baseURL }) => { - await page.goto(`${baseURL}/valid`); - - await expect(page.locator('h1')).toHaveText( - `Hello from the server in ${process.env.DEV ? 'dev' : 'prod'} mode!` - ); - - await expect(page.locator('h2')).toHaveText('The answer is 42'); - - // should not include serialized data - expect(await page.$('script[sveltekit\\:data-type="data"]')).toBeNull(); -}); - -test('styles are applied', async ({ page, baseURL, get_computed_style }) => { - await page.goto(`${baseURL}/valid`); - - expect(await get_computed_style('p', 'color')).toEqual('rgb(255, 0, 0)'); - expect(await get_computed_style('footer', 'color')).toEqual('rgb(128, 0, 128)'); -}); - -test('sets origin', async ({ baseURL, page }) => { - const { origin } = new URL(/** @type {string} */ (baseURL)); - - await page.goto(`${baseURL}/origin`); - - await expect(page.locator('[data-source="load"]')).toHaveText(origin); - await expect(page.locator('[data-source="store"]')).toHaveText(origin); - await expect(page.locator('[data-source="endpoint"]')).toHaveText(origin); -}); - -test('only includes CSS for rendered components', async ({ page, baseURL }) => { - await page.goto(`${baseURL}/styles`); - - const style = await page.innerHTML('style[amp-custom]'); - - expect(style).toContain('#ff3e00'); // rendered styles - expect(style).toContain('uppercase'); // imported styles - expect(style).not.toContain('#40b3ff'); // unrendered styles -}); - -test('http-equiv tags are removed', async ({ page }) => { - await page.goto('/http-equiv/cache-control'); - - expect(await page.textContent('h1')).toBe( - 'the cache-control headers should be removed from this page' - ); - expect(await page.innerHTML('head')).not.toContain('http-equiv="cache-control"'); -}); - -// validation tests are skipped because amphtml-validator doesn't -// play nicely with CI, and is also abominably slow, because -// everything AMP-related is awful -test.skip('prints validation errors', async ({ page, baseURL }) => { - await page.goto(`${baseURL}/invalid`); - - const body = await page.innerHTML('body'); - - expect(body).toContain("Invalid URL protocol 'javascript:' for attribute 'href' in tag 'a'"); -}); - -test.skip('throws error on encountering stylesheet links', async ({ page }) => { - await page.goto('/invalid/has-stylesheet'); - - expect(await page.textContent('body')).toContain( - 'An AMP document cannot contain — ensure that inlineStyleThreshold is set to Infinity, and remove links from your page template and elements' - ); -}); - -test('skips client build if every node has CSR disabled', async ({ page, request }) => { - test.skip(!!process.env.DEV); - - const files = fs.existsSync('.svelte-kit/output/client/_app/immutable/nodes'); - expect(files).toBe(false); - - await page.goto('/assets'); - const src = await page.locator('img').getAttribute('src'); - if (!src) throw new Error('Image src not found on /assets page'); - - const img_response = await request.get(src); - expect(img_response.status()).toBe(200); - - const public_asset_response = await request.get('/asset.json'); - expect(public_asset_response.status()).toBe(200); -}); diff --git a/packages/kit/test/apps/amp/package.json b/packages/kit/test/apps/no-csr/package.json similarity index 74% rename from packages/kit/test/apps/amp/package.json rename to packages/kit/test/apps/no-csr/package.json index 69c12ca9ffc6..c58ccfa7ad4f 100644 --- a/packages/kit/test/apps/amp/package.json +++ b/packages/kit/test/apps/no-csr/package.json @@ -1,5 +1,5 @@ { - "name": "test-amp", + "name": "test-no-csr", "private": true, "version": "0.0.1", "scripts": { @@ -8,15 +8,12 @@ "preview": "vite preview", "prepare": "svelte-kit sync", "check": "svelte-kit sync && tsc && svelte-check", - "test": "pnpm test:dev && pnpm test:build", - "test:dev": "DEV=true playwright test", + "test": "pnpm test:build", "test:build": "playwright test" }, "devDependencies": { - "@sveltejs/amp": "workspace:^", "@sveltejs/kit": "workspace:^", "@sveltejs/vite-plugin-svelte": "catalog:", - "dropcss": "catalog:", "svelte": "catalog:", "svelte-check": "catalog:", "typescript": "catalog:", diff --git a/packages/kit/test/apps/no-csr/playwright.config.js b/packages/kit/test/apps/no-csr/playwright.config.js new file mode 100644 index 000000000000..33d36b651014 --- /dev/null +++ b/packages/kit/test/apps/no-csr/playwright.config.js @@ -0,0 +1 @@ +export { config as default } from '../../utils.js'; diff --git a/packages/kit/test/apps/amp/src/app.d.ts b/packages/kit/test/apps/no-csr/src/app.d.ts similarity index 100% rename from packages/kit/test/apps/amp/src/app.d.ts rename to packages/kit/test/apps/no-csr/src/app.d.ts diff --git a/packages/kit/test/apps/amp/src/app.html b/packages/kit/test/apps/no-csr/src/app.html similarity index 75% rename from packages/kit/test/apps/amp/src/app.html rename to packages/kit/test/apps/no-csr/src/app.html index b8e986c5d51a..b8ba4699b2ba 100644 --- a/packages/kit/test/apps/amp/src/app.html +++ b/packages/kit/test/apps/no-csr/src/app.html @@ -1,9 +1,8 @@ - + - %sveltekit.head% diff --git a/packages/kit/test/apps/amp/src/routes/+layout.js b/packages/kit/test/apps/no-csr/src/routes/+layout.js similarity index 100% rename from packages/kit/test/apps/amp/src/routes/+layout.js rename to packages/kit/test/apps/no-csr/src/routes/+layout.js diff --git a/packages/kit/test/apps/amp/src/routes/+layout.svelte b/packages/kit/test/apps/no-csr/src/routes/+layout.svelte similarity index 100% rename from packages/kit/test/apps/amp/src/routes/+layout.svelte rename to packages/kit/test/apps/no-csr/src/routes/+layout.svelte diff --git a/packages/kit/test/apps/amp/src/routes/assets/+page.svelte b/packages/kit/test/apps/no-csr/src/routes/assets/+page.svelte similarity index 100% rename from packages/kit/test/apps/amp/src/routes/assets/+page.svelte rename to packages/kit/test/apps/no-csr/src/routes/assets/+page.svelte diff --git a/packages/kit/test/apps/amp/src/routes/assets/favicon.png b/packages/kit/test/apps/no-csr/src/routes/assets/favicon.png similarity index 100% rename from packages/kit/test/apps/amp/src/routes/assets/favicon.png rename to packages/kit/test/apps/no-csr/src/routes/assets/favicon.png diff --git a/packages/kit/test/apps/amp/static/asset.json b/packages/kit/test/apps/no-csr/static/asset.json similarity index 100% rename from packages/kit/test/apps/amp/static/asset.json rename to packages/kit/test/apps/no-csr/static/asset.json diff --git a/packages/kit/test/apps/no-csr/test/test.js b/packages/kit/test/apps/no-csr/test/test.js new file mode 100644 index 000000000000..c7a1c49e465c --- /dev/null +++ b/packages/kit/test/apps/no-csr/test/test.js @@ -0,0 +1,25 @@ +import fs from 'node:fs'; +import process from 'node:process'; +import { expect } from '@playwright/test'; +import { test } from '../../../utils.js'; + +test.skip(({ javaScriptEnabled }) => javaScriptEnabled); + +test.describe.configure({ mode: 'parallel' }); + +test('skips client build if every node has CSR disabled', async ({ page, request }) => { + test.skip(!!process.env.DEV); + + const files = fs.existsSync('.svelte-kit/output/client/_app/immutable/nodes'); + expect(files).toBe(false); + + await page.goto('/assets'); + const src = await page.locator('img').getAttribute('src'); + if (!src) throw new Error('Image src not found on /assets page'); + + const img_response = await request.get(src); + expect(img_response.status()).toBe(200); + + const public_asset_response = await request.get('/asset.json'); + expect(public_asset_response.status()).toBe(200); +}); diff --git a/packages/kit/test/apps/amp/tsconfig.json b/packages/kit/test/apps/no-csr/tsconfig.json similarity index 100% rename from packages/kit/test/apps/amp/tsconfig.json rename to packages/kit/test/apps/no-csr/tsconfig.json diff --git a/packages/kit/test/apps/amp/vite.config.js b/packages/kit/test/apps/no-csr/vite.config.js similarity index 80% rename from packages/kit/test/apps/amp/vite.config.js rename to packages/kit/test/apps/no-csr/vite.config.js index 13bb0ffb6f8a..69200cdb7cd8 100644 --- a/packages/kit/test/apps/amp/vite.config.js +++ b/packages/kit/test/apps/no-csr/vite.config.js @@ -7,11 +7,7 @@ const config = { minify: false }, clearScreen: false, - plugins: [ - sveltekit({ - inlineStyleThreshold: Infinity - }) - ], + plugins: [sveltekit()], server: { fs: { allow: [path.resolve('../../../src')] diff --git a/playgrounds/basic/package.json b/playgrounds/basic/package.json index a1330e203cc7..d164fcfe4896 100644 --- a/playgrounds/basic/package.json +++ b/playgrounds/basic/package.json @@ -21,7 +21,6 @@ "@sveltejs/adapter-node": "workspace:*", "@sveltejs/adapter-static": "workspace:*", "@sveltejs/adapter-vercel": "workspace:*", - "@sveltejs/amp": "workspace:*", "@sveltejs/enhanced-img": "workspace:*", "@sveltejs/kit": "workspace:*", "@sveltejs/package": "workspace:*", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ad460a8fb904..fe500b05b4ea 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -48,9 +48,6 @@ catalogs: '@vitest/browser-playwright': specifier: ^4.1.10 version: 4.1.10 - dropcss: - specifier: ^1.0.16 - version: 1.0.16 eslint: specifier: ^10.8.0 version: 10.8.0 @@ -463,15 +460,6 @@ importers: specifier: 'catalog:' version: 8.1.5(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0) - packages/amp: - devDependencies: - '@sveltejs/kit': - specifier: workspace:^ - version: link:../kit - typescript: - specifier: 'catalog:' - version: 6.0.3 - packages/enhanced-img: dependencies: '@sveltejs/vite-plugin-svelte': @@ -669,33 +657,6 @@ importers: specifier: ~6.0.3 version: 6.0.3 - packages/kit/test/apps/amp: - devDependencies: - '@sveltejs/amp': - specifier: workspace:^ - version: link:../../../../amp - '@sveltejs/kit': - specifier: workspace:^ - version: link:../../.. - '@sveltejs/vite-plugin-svelte': - specifier: 'catalog:' - version: 7.0.0(svelte@5.56.3(@typescript-eslint/types@8.61.1))(vite@8.1.5(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0)) - dropcss: - specifier: 'catalog:' - version: 1.0.16 - svelte: - specifier: 'catalog:' - version: 5.56.3(@typescript-eslint/types@8.61.1) - svelte-check: - specifier: 'catalog:' - version: 4.7.0(picomatch@4.0.5)(svelte@5.56.3(@typescript-eslint/types@8.61.1))(typescript@6.0.3) - typescript: - specifier: 'catalog:' - version: 6.0.3 - vite: - specifier: 'catalog:' - version: 8.1.5(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0) - packages/kit/test/apps/async: devDependencies: '@sveltejs/kit': @@ -861,6 +822,27 @@ importers: specifier: 'catalog:' version: 8.1.5(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0) + packages/kit/test/apps/no-csr: + devDependencies: + '@sveltejs/kit': + specifier: workspace:^ + version: link:../../.. + '@sveltejs/vite-plugin-svelte': + specifier: 'catalog:' + version: 7.0.0(svelte@5.56.3(@typescript-eslint/types@8.61.1))(vite@8.1.5(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0)) + svelte: + specifier: 'catalog:' + version: 5.56.3(@typescript-eslint/types@8.61.1) + svelte-check: + specifier: 'catalog:' + version: 4.7.0(picomatch@4.0.5)(svelte@5.56.3(@typescript-eslint/types@8.61.1))(typescript@6.0.3) + typescript: + specifier: 'catalog:' + version: 6.0.3 + vite: + specifier: 'catalog:' + version: 8.1.5(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0) + packages/kit/test/apps/no-ssr: devDependencies: '@sveltejs/kit': @@ -1536,9 +1518,6 @@ importers: '@sveltejs/adapter-vercel': specifier: workspace:* version: link:../../packages/adapter-vercel - '@sveltejs/amp': - specifier: workspace:* - version: link:../../packages/amp '@sveltejs/enhanced-img': specifier: workspace:* version: link:../../packages/enhanced-img @@ -3184,9 +3163,6 @@ packages: devalue@5.8.1: resolution: {integrity: sha512-4CXDYRBGqN+57wVJkuXBYmpAVUSg3L6JAQa/DFqm238G73E1wuyc/JhGQJzN7vUf/CMphYau2zXbfWzDR5aTEw==} - dropcss@1.0.16: - resolution: {integrity: sha512-QgA6BUh2SoBYE/dSuMmeGhNdoGtGewt3Rn66xKyXoGNyjrKRXf163wuM+xeQ83p87l/3ALoB6Il1dgKyGS5pEw==} - dts-buddy@0.8.3: resolution: {integrity: sha512-1x/UrAYRlQYA7QeLjyiTo5x6u5FvsU2hheGXT/hJWJ1zQzR+dMSQMMGPmuSKAH4/rhdCuLAtUZUr+NIXubwjfQ==} hasBin: true @@ -5798,8 +5774,6 @@ snapshots: devalue@5.8.1: {} - dropcss@1.0.16: {} - dts-buddy@0.8.3(typescript@6.0.3): dependencies: '@jridgewell/source-map': 0.3.6 From fc1a64253128f1a2329752c2694513050a4e277a Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 5 Aug 2026 12:58:20 -0400 Subject: [PATCH 437/545] chore(deps): update all non-major dependencies (#16466) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR contains the following updates: | Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | Type | Update | Pending | |---|---|---|---|---|---|---| | [@changesets/changelog-github](https://redirect.github.com/changesets/changesets/tree/main#readme) ([source](https://redirect.github.com/changesets/changesets)) | [`1.0.0-next.7` → `1.0.0-next.9`](https://renovatebot.com/diffs/npm/@changesets%2fchangelog-github/1.0.0-next.7/1.0.0-next.9) | ![age](https://developer.mend.io/api/mc/badges/age/npm/@changesets%2fchangelog-github/1.0.0-next.9?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@changesets%2fchangelog-github/1.0.0-next.7/1.0.0-next.9?slim=true) | pnpm.catalog.default | patch | | | [@changesets/cli](https://redirect.github.com/changesets/changesets/tree/main#readme) ([source](https://redirect.github.com/changesets/changesets)) | [`3.0.0-next.10` → `3.0.0-next.11`](https://renovatebot.com/diffs/npm/@changesets%2fcli/3.0.0-next.10/3.0.0-next.11) | ![age](https://developer.mend.io/api/mc/badges/age/npm/@changesets%2fcli/3.0.0-next.11?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@changesets%2fcli/3.0.0-next.10/3.0.0-next.11?slim=true) | pnpm.catalog.default | patch | | | [@opentelemetry/sdk-node](https://redirect.github.com/open-telemetry/opentelemetry-js/tree/main/experimental/packages/opentelemetry-sdk-node) ([source](https://redirect.github.com/open-telemetry/opentelemetry-js)) | [`^0.220.0` → `^0.221.0`](https://renovatebot.com/diffs/npm/@opentelemetry%2fsdk-node/0.220.0/0.221.0) | ![age](https://developer.mend.io/api/mc/badges/age/npm/@opentelemetry%2fsdk-node/0.221.0?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@opentelemetry%2fsdk-node/0.220.0/0.221.0?slim=true) | pnpm.catalog.default | minor | | | [@playwright/test](https://playwright.dev) ([source](https://redirect.github.com/microsoft/playwright)) | [`~1.61.0` → `~1.62.0`](https://renovatebot.com/diffs/npm/@playwright%2ftest/1.61.1/1.62.1) | ![age](https://developer.mend.io/api/mc/badges/age/npm/@playwright%2ftest/1.62.1?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@playwright%2ftest/1.61.1/1.62.1?slim=true) | pnpm.catalog.default | minor | | | [changesets/action](https://redirect.github.com/changesets/action) | `v2.0.0-next.3` → `v2.0.0-next.4` | ![age](https://developer.mend.io/api/mc/badges/age/github-tags/changesets%2faction/v2.0.0-next.4?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/github-tags/changesets%2faction/v2.0.0-next.3/v2.0.0-next.4?slim=true) | action | patch | | | [pnpm](https://pnpm.io) ([source](https://redirect.github.com/pnpm/pnpm/tree/HEAD/pnpm11/pnpm)) | [`11.15.1+sha512.81350b07e53c9538a02f1f2303b4290fa2d7be04e56e2a970c4cc4b417dc761de196edabd49d55c7dc9580db81007c44143e4e3d7e462b3000d23c255122d065` → `11.19.0`](https://renovatebot.com/diffs/npm/pnpm/11.15.1/11.19.0) | ![age](https://developer.mend.io/api/mc/badges/age/npm/pnpm/11.19.0?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/pnpm/11.15.1/11.19.0?slim=true) | packageManager | minor | `11.20.0` | | [pnpm/action-setup](https://redirect.github.com/pnpm/action-setup) | `v6.0.9` → `v6.0.10` | ![age](https://developer.mend.io/api/mc/badges/age/github-tags/pnpm%2faction-setup/v6.0.10?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/github-tags/pnpm%2faction-setup/v6.0.9/v6.0.10?slim=true) | action | patch | | --- ### Release Notes
changesets/changesets (@​changesets/changelog-github) ### [`v1.0.0-next.9`](https://redirect.github.com/changesets/changesets/releases/tag/%40changesets/changelog-github%401.0.0-next.9) ##### Patch Changes - Updated dependencies \[[`96b65ee`](https://redirect.github.com/changesets/changesets/commit/96b65eec4af2c58301a11cd7dff42a6bde9c9f8a)]: - [@​changesets/types](https://redirect.github.com/changesets/types)@​7.0.0-next.9
open-telemetry/opentelemetry-js (@​opentelemetry/sdk-node) ### [`v0.221.0`](https://redirect.github.com/open-telemetry/opentelemetry-js/compare/40d67b7690a61bd9af0a4e5b5b9f4a14b11fc50e...76fa6b509e2b48d9cbee31cb37a2efc61dc4d384) [Compare Source](https://redirect.github.com/open-telemetry/opentelemetry-js/compare/40d67b7690a61bd9af0a4e5b5b9f4a14b11fc50e...76fa6b509e2b48d9cbee31cb37a2efc61dc4d384)
microsoft/playwright (@​playwright/test) ### [`v1.62.1`](https://redirect.github.com/microsoft/playwright/compare/v1.62.0...26a9e470a7b3c7822084b09fb7f13902c5f37b51) [Compare Source](https://redirect.github.com/microsoft/playwright/compare/v1.62.0...v1.62.1) ### [`v1.62.0`](https://redirect.github.com/microsoft/playwright/releases/tag/v1.62.0) [Compare Source](https://redirect.github.com/microsoft/playwright/compare/v1.61.1...v1.62.0) ##### 🧱 New component testing model [Component testing](https://playwright.dev/docs/test-components) moves to a **stories and galleries** model. A **story** wraps your component in one specific scenario — hard-coded props, mock data, providers — and a **gallery** page that you serve renders stories on demand. The new [fixtures.mount()](https://playwright.dev/docs/api/class-fixtures#fixtures-mount) fixture navigates to the gallery, mounts a story by id, and returns a [Locator](https://playwright.dev/docs/api/class-locator) scoped to the story's root element: ```js test('click should expand', async ({ mount }) => { const component = await mount('components/Expandable/Stateful'); await component.getByRole('button').click(); await expect(component.getByTestId('expanded')).toHaveValue('true'); }); ``` Pass a story type as a template argument to type-check its props, and use `update(props)` / `unmount()` on the returned locator to re-render or tear down within a test. ##### 🛑 Cancel operations with AbortSignal Most operations and web-first assertions now accept a `signal` option that takes an [`AbortSignal`](https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal), letting you cancel long-running actions, navigations, waits, and assertions: ```js const controller = new AbortController(); setTimeout(() => controller.abort(), 1000); await page.getByRole('button', { name: 'Submit' }).click({ signal: controller.signal }); await expect(page.getByText('Done')).toBeVisible({ signal: controller.signal }); ``` Providing a signal does not disable the default timeout; pass `timeout: 0` to disable it. ##### 🖼️ WebP screenshots [expect(page).toHaveScreenshot()](https://playwright.dev/docs/api/class-pageassertions#page-assertions-to-have-screenshot-1) and [expect(locator).toHaveScreenshot()](https://playwright.dev/docs/api/class-locatorassertions#locator-assertions-to-have-screenshot-1) can now store snapshots in the WebP format — just give the snapshot a `.webp` name: ```js // Visual comparisons store the golden snapshot as lossless WebP. await expect(page).toHaveScreenshot('homepage.webp'); // Standalone screenshots can trade quality for size with lossy WebP. await page.screenshot({ path: 'homepage.webp', quality: 50 }); ``` [page.screenshot()](https://playwright.dev/docs/api/class-page#page-screenshot) and [locator.screenshot()](https://playwright.dev/docs/api/class-locator#locator-screenshot) also accept `webp` as a `type`, where quality `100` (the default) is lossless and lower values use lossy compression. ##### 🧩 Custom test filtering with Reporter.preprocess() New [reporter.preprocess()](https://playwright.dev/docs/api/class-reporter#reporter-preprocess) hook runs after the configuration is resolved and before [reporter.onBegin()](https://playwright.dev/docs/api/class-reporter#reporter-on-begin), letting a reporter mark individual tests as skipped, excluded, fixed, or failing through a [TestRun](https://playwright.dev/docs/api/class-testrun) object: ```js class MyReporter { async preprocess({ config, suite, testRun }) { for (const test of suite.allTests()) { if (shouldSkip(test)) testRun.skip(test); } } } ``` ##### 🔁 Isolated retries New [testConfig.retryStrategy](https://playwright.dev/docs/api/class-testconfig#test-config-retry-strategy) controls when failed tests are retried. The default `'immediate'` retries as soon as a worker is free; `'isolated'` runs all retries at the end, one by one in a single worker, to minimize interference with the rest of the suite: ```js // playwright.config.ts export default defineConfig({ retries: 2, retryStrategy: 'isolated', }); ``` ##### New APIs ##### Browser and Context - New option [`credentials`](https://playwright.dev/docs/api/class-browsercontext#browser-context-storage-state-option-credentials) includes the context's virtual WebAuthn [Credentials](https://playwright.dev/docs/api/class-credentials) (passkeys) in the storage state, so they can be persisted and re-seeded into later contexts. ##### Actions - New `scroll` option (`"auto"` | `"none"`) on actions to opt out of Playwright's automatic scroll-into-view. ##### Network - New [apiResponse.timing()](https://playwright.dev/docs/api/class-apiresponse#api-response-timing) returns resource timing information for an API response. ##### Evaluation - New [locator.waitForFunction()](https://playwright.dev/docs/api/class-locator#locator-wait-for-function) waits until a function — called with the matching element — returns a truthy value. - [page.evaluate()](https://playwright.dev/docs/api/class-page#page-evaluate) and related methods now accept functions as evaluate arguments. - [page.addInitScript()](https://playwright.dev/docs/api/class-page#page-add-init-script) / [browserContext.addInitScript()](https://playwright.dev/docs/api/class-browsercontext#browser-context-add-init-script) now accept functions as init-script arguments. ##### Command line & MCP - Playwright now bundles the [Playwright MCP](https://playwright.dev/docs/getting-started-mcp) server and [`playwright-cli`](https://playwright.dev/docs/getting-started-cli), runnable via `npx playwright mcp` and `npx playwright cli`. ##### Reporters - The HTML report's **Merge files** grouping — previously only a UI toggle — can now be enabled from the config with the new `mergeFiles` reporter option: ```js // playwright.config.ts export default defineConfig({ reporter: [['html', { mergeFiles: true }]], }); ``` ##### Announcements - ⚠️ Debian 11 is not supported anymore. ##### Browser Versions - Chromium 151.0.7922.34 - Mozilla Firefox 153.0 - WebKit 26.5 This version was also tested against the following stable channels: - Google Chrome 151 - Microsoft Edge 151
changesets/action (changesets/action) ### [`v2.0.0-next.4`](https://redirect.github.com/changesets/action/releases/tag/v2.0.0-next.4) [Compare Source](https://redirect.github.com/changesets/action/compare/v2.0.0-next.3...v2.0.0-next.4) ##### Major Changes - [#​692](https://redirect.github.com/changesets/action/pull/692) [`cb3f011`](https://redirect.github.com/changesets/action/commit/cb3f0110d7423cd340b1c5d63584c0ea6ee63959) Thanks [@​Andarist](https://redirect.github.com/Andarist)! - Release commits and tags are now pushed using the GitHub API by default. Replace the `commit-mode` input with the boolean `push-with-git-cli` input. Set `push-with-git-cli: true` to continue using the Git CLI. Regardless of the push mode, custom GitHub tokens must be passed explicitly through the `github-token` input. The `GITHUB_TOKEN` environment variable and credentials configured by `actions/checkout` or embedded in remote URLs are not substitutes for this input. When the Git CLI is enabled, `github-token` takes precedence over those repository credentials. - [#​695](https://redirect.github.com/changesets/action/pull/695) [`469993c`](https://redirect.github.com/changesets/action/commit/469993ce5783c6a38e72541d4ba0d25588702b9a) Thanks [@​bluwy](https://redirect.github.com/bluwy)! - Removed `.npmrc` handling when the `NPM_TOKEN` environment variable is set. Authentication should be handled via Trusted Publishing instead. If a token is still needed, use `actions/setup-node` to set it up instead via the `registry-url` option. Check out the updated action README for more information of setting up npm authentication in GitHub Actions. ##### Patch Changes - [#​699](https://redirect.github.com/changesets/action/pull/699) [`5b307d3`](https://redirect.github.com/changesets/action/commit/5b307d3df25daf51c41dff70d2f66df1579ae9fa) Thanks [@​Andarist](https://redirect.github.com/Andarist)! - Validate that projects use Changesets CLI v3 and direct Changesets CLI v2 users to `changesets/action@v1`. - [#​697](https://redirect.github.com/changesets/action/pull/697) [`84d78c6`](https://redirect.github.com/changesets/action/commit/84d78c68f98f20e24dfff22b22193e7b4f326ad9) Thanks [@​Andarist](https://redirect.github.com/Andarist)! - Allow custom publish scripts to complete without a Changesets output file, warning that GitHub releases and git tags cannot be created when that file is missing. - [#​705](https://redirect.github.com/changesets/action/pull/705) [`77be81b`](https://redirect.github.com/changesets/action/commit/77be81bcb9d2d1007c53c4f98bffe51da428d6a5) Thanks [@​Andarist](https://redirect.github.com/Andarist)! - Fixed a regression making it impossible to sync new versions of versioning pull requests with base branch updates when using GitHub API pushes. - [#​688](https://redirect.github.com/changesets/action/pull/688) [`219ea82`](https://redirect.github.com/changesets/action/commit/219ea82e52caaff2a10a5e34d3455093cf958238) Thanks [@​Andarist](https://redirect.github.com/Andarist)! - Remove the `setup-git-user` input. Complete custom Git identities are now preserved automatically, while `github-actions[bot]` is configured as a fallback before creating local release commits or tags.
pnpm/pnpm (pnpm) ### [`v11.19.0`](https://redirect.github.com/pnpm/pnpm/releases/tag/v11.19.0): pnpm 11.19 [Compare Source](https://redirect.github.com/pnpm/pnpm/compare/v11.18.0...v11.19.0) #### Minor Changes - `pnpm login` no longer requires an interactive terminal when the registry supports web-based login: without a TTY it prints the authentication URL (skipping the QR code and the "Press ENTER to open the URL in your browser" prompt) and polls the registry until the browser approval completes. Only the classic username/password login still fails with `ERR_PNPM_LOGIN_NON_INTERACTIVE` in a non-interactive terminal. - The `save-prefix` setting now accepts `=`: newly added dependencies are saved with an explicit `=` operator (`=1.2.3`) instead of the setting being silently treated as the default `^`. #### Patch Changes - `allowBuilds` entries can now approve git-hosted packages that pnpm downloads as a tarball, such as `github:` dependencies (which are fetched from `codeload.github.com` rather than cloned), by their repository URL without the resolved commit hash. This matches the hashless `git+` matching already supported for cloned git dependencies. For example: ```yaml allowBuilds: "foo@git+https://github.com/org/foo.git": true ``` This approves the package whether pnpm clones it or downloads a tarball, so the entry no longer has to be updated every time the pinned commit changes. GitLab and Bitbucket tarball downloads are matched the same way. Approving or denying a specific resolved commit by its full tarball dep path continues to work. - `pnpm outdated --include-github-actions` no longer blocks on an interactive git credential prompt when a workflow uses a private action repo. - Prevented `minimumReleaseAge` from replacing `latest` with a SemVer-greater version than the registry tag target [#​13034](https://redirect.github.com/pnpm/pnpm/issues/13034). - Fixed empty `bundledDependencies` and `bundleDependencies` arrays causing nondeterministic lockfile changes. See [#​13123](https://redirect.github.com/pnpm/pnpm/issues/13123). - The install summary no longer prints `(X is available)` when the registry's `dist-tags.latest` is still held back by the active `minimumReleaseAge` policy. The hint only ever names the actual latest tag, so an immature latest suppresses the hint instead of advertising the version pnpm just refused to install [#​11698](https://redirect.github.com/pnpm/pnpm/issues/11698). - `pnpm update` keeps the explicit `=` operator of an exact version pin: a dependency saved as `=3.5.1` now updates to `=3.5.2` instead of the bare `3.5.2`. See [#​13168](https://redirect.github.com/pnpm/pnpm/issues/13168). - Preserve a workspace dependency's `link:` entry when a run does not target it — e.g. `pnpm update ` (with or without `--recursive`), or a plain install after a root/catalog dependency change — with `injectWorkspacePackages`, instead of spuriously rewriting it to a peer-suffixed `file:` protocol. See [#​10433](https://redirect.github.com/pnpm/pnpm/issues/10433). - Workspace dependencies declared with a relative path (e.g. `"foo": "workspace:../foo"`) are no longer silently dropped from the workspace projects graph, so `--filter` selection and the topological order of recursive commands take them into account. #### Platinum Sponsors
Bit
OpenAI
#### Gold Sponsors
Sanity Discord Vite
SerpApi CodeRabbit Stackblitz
Workleap Nx
### [`v11.18.0`](https://redirect.github.com/pnpm/pnpm/releases/tag/v11.18.0): pnpm 11.18 [Compare Source](https://redirect.github.com/pnpm/pnpm/compare/v11.17.0...v11.18.0) #### Minor Changes - Fixed an installed optional dependency being left without one of its own required dependencies. When a package reached through `optionalDependencies` is installable on the current system but one of its regular `dependencies` is not, a lockfile-based install skipped that dependency and installed the parent anyway, so importing the parent failed with `MODULE_NOT_FOUND`. The dependency is now installed, and an install-check warning reports the incompatibility. A dependency is still only skipped when every path to it is optional, or when the package that pulls it in was itself skipped [#​13286](https://redirect.github.com/pnpm/pnpm/issues/13286). - `pnpm setup` now appends `PNPM_HOME` and the global bin directory to the GitHub Actions environment files (`GITHUB_ENV` and `GITHUB_PATH`), so later steps in the same job can run `pnpm add --global` and other global commands [#​9191](https://redirect.github.com/pnpm/pnpm/issues/9191). - Added support for `publishConfig.name`, which publishes a package under a different name than the one its manifest carries in the workspace. It is for a project whose published name is already taken by a sibling project, which otherwise has to be renamed by a build step just before publishing. Only the published artifact is renamed — dependents, `pnpm-lock.yaml`, and release tooling keep addressing the project by its manifest name — and the new name reaches the packed manifest, the tarball filename, and everything that addresses the package at the registry: the already-published check of `pnpm publish -r`, its registry selection, and the release-planning probes of `pnpm change status` and `pnpm version -r` [#​13345](https://redirect.github.com/pnpm/pnpm/issues/13345). - `pnpm self-update` no longer takes any instruction from the project it is run in: - pnpm is fetched through the same trusted registry and auth configuration used when switching pnpm versions, so a project `.npmrc` or `pnpm-workspace.yaml` can no longer redirect the download or attach credentials to it, and the project's default `.pnpmfile.(c|m)js` is no longer loaded. Pnpmfiles from trusted sources (the `pnpmfile` setting, the global pnpmfile, config dependencies) still apply. - The `minimumReleaseAge` settings in `pnpm-workspace.yaml` no longer affect `self-update`. They still govern the project's own dependencies; for `self-update` the cooldown now comes from the built-in default, your global config, a `PNPM_CONFIG_*` environment variable, or a command-line flag. This fixes `self-update` failing inside a workspace that raises the cutoff while succeeding everywhere else, and stops a repository from either waiving the cooldown or keeping you on an outdated pnpm by raising it. - The same applies to the `trustPolicy` settings and to `ci`: a project can no longer weaken the trust check that guards the pnpm download, nor re-enable the confirmation prompt that a CI run suppresses. When `self-update` refuses a version that is younger than the cutoff, an interactive run now offers to update anyway; non-interactive runs still fail. CI never prompts, even on a runner that attaches a TTY. #### Patch Changes - Fixed `pnpm licenses list` to report every version when the same package is installed under multiple aliases [pnpm/pnpm#13438](https://redirect.github.com/pnpm/pnpm/issues/13438). - Sort `pnpm dedupe --check` snapshot changes for stable output across pnpm implementations. - Strip Unicode formatting characters from registry- and manifest-derived terminal output. - Speed up installs after compatible catalog or direct dependency range changes by retaining the locked version without resolving the dependency graph again. - Speed up installs after safe override changes by reusing unambiguous compatible dependency resolutions, pruning obsolete dependencies, applying independent replacements and removals together, and handling parent-scoped `"-"` overrides without full lockfile resolution. - Installing a local `file:` directory dependency with the global virtual store enabled no longer fails with `TypeError: Cannot read properties of undefined (reading 'split')` [#​13335](https://redirect.github.com/pnpm/pnpm/issues/13335). Local directory dependencies — `file:` directories and injected workspace packages — now get a global-virtual-store slot of their own per project. They used to share one slot across every project that depended on a directory of the same name, so a project could end up linked to another project's copy of the dependency. - The `Workspace` column of `pnpm update --interactive` now falls back to the project's path when its `name` is only whitespace, as it already did for a missing or empty one — all three render an equally blank label otherwise. - Checking GitHub Actions dependencies for updates is now opt-in for every command. Neither `pnpm outdated` nor `pnpm update` reads the workflow files unless `--include-github-actions` is passed or `update.githubActions` is set to `true` in `pnpm-workspace.yaml`. Reading them runs `git ls-remote` against every referenced repository, which fails in environments where GitHub is not reachable the way pnpm assumes (a GitHub Enterprise Server, a custom certificate authority, or an offline network) [#​13254](https://redirect.github.com/pnpm/pnpm/issues/13254). `pnpm outdated` accepts the `--include-github-actions` option too. - `pnpm update --interactive` now measures its table in terminal columns rather than in characters. A package name, workspace name, or version containing wide characters (CJK, most emoji) no longer knocks its row's columns out of line with the rest of the group, and a wide character in a version no longer aborts the command with `Subject parameter value width cannot be greater than the container width` [#​13357](https://redirect.github.com/pnpm/pnpm/issues/13357). - The `Workspace` column of `pnpm update --interactive` is more informative in two cases. A dependency outdated at the same version in several workspace projects is offered as one choice, since selecting it updates every project — that choice now names all of them instead of only the first. And a workspace project without a `name` is now labelled with its path rather than left blank, so several unnamed projects can be told apart. - An auto-installed *optional* peer is no longer hoisted at a version the workspace root's own dependency on that package excludes. `resolvePeersFromWorkspaceRoot` already made the workspace root's specifier decide which version a missing *required* peer is installed at; the optional-peer picker ignored it and always took the highest version present anywhere in the graph. In a workspace whose root pins `postcss: 8.5.10`, an importer that depends on `webpack` and declares no `postcss` of its own got `postcss@8.5.22` hoisted for `terser-webpack-plugin`'s optional `postcss` peer, leaving two `postcss@8.5.x` instances in the graph [#​13320](https://redirect.github.com/pnpm/pnpm/issues/13320). - `overrides` now also govern peers that pnpm auto-installs. Previously an override only rewrote dependencies declared in a manifest, so a peer nobody declares — installed because `autoInstallPeers` is on — resolved against its declared peer range and could bring in a second copy of the very package the override pinned. For example, with `overrides: { react: npm:react@19.2.0 }` and a lone `lucide-react` dependency, pnpm installed `react@18.3.1`; it now installs the pinned `react@19.2.0` [#​13320](https://redirect.github.com/pnpm/pnpm/issues/13320). - Under `resolvePeersFromWorkspaceRoot`, a workspace root dependency declared with `link:` or `file:` (or the path form of `workspace:`, such as `workspace:../pkg`) now satisfies another project's missing peer dependency at the linked package's own version, instead of being hoisted as a path. Those specifiers are relative to the project that declares them, so the same specifier reached a different directory — or none — from the project the peer was hoisted into, leaving a broken link. The root now has the same authority over the peer as it has when it declares the package with a version range [#​13373](https://redirect.github.com/pnpm/pnpm/issues/13373). - Installs through a pnpr server now apply the project's whole verification policy. `minimumReleaseAgeExclude`, `minimumReleaseAgeIgnoreMissingTime`, `trustPolicy`, `trustPolicyExclude`, `trustPolicyIgnoreAfter`, and `trustLockfile` were ignored, so excluded packages were still held back and a lockfile containing them could be rejected. `trustPolicy: no-downgrade` no longer fails with `TRUST_POLICY_INCOMPATIBLE_WITH_PNPR` when a pnpr server is configured. `--frozen-lockfile` and `--no-prefer-frozen-lockfile` are now honored on the pnpr path, instead of resolving and rewriting the lockfile anyway. Since `frozenLockfile` defaults to `true` on CI, a CI install through a pnpr server now fails on an out-of-date lockfile rather than updating it. - Workspace installs through a pnpr server no longer crash with `Cannot read properties of undefined (reading 'filter')` after linking, when `minimumReleaseAge` is active [#​13275](https://redirect.github.com/pnpm/pnpm/issues/13275). - Fixed `pnpm dedupe` updating valid catalog resolutions when another matching version exists in the lockfile. - `pnpm -r run "/pattern/" --no-bail` no longer exits zero when one of a project's matched scripts fails and a later one passes. The run summary carries a single status per project, and the passing script overwrote the recorded failure. - Restored the store block a first install prints, naming how packages were materialized and where the stores live [#​13315](https://redirect.github.com/pnpm/pnpm/issues/13315): ```text Packages are hard linked from the content-addressable store to the virtual store. Content-addressable store is at: ~/.local/share/pnpm/store/v11 Virtual store is at: node_modules/.pnpm ``` - The root project's `pnpm:devPreinstall` script now runs before resolution and linking, as it does in pnpm 11. It is skipped under `--ignore-scripts`, `--lockfile-only` and `--dry-run`, by `pnpm fetch` and `pnpm rebuild`, and by a repeat install that is already up to date. Workspaces that use the hook to prepare state the install depends on — such as [next.js](https://redirect.github.com/vercel/next.js), which generates a placeholder `next` bin with it — were left with dependents linked against files that were never created [#​13313](https://redirect.github.com/pnpm/pnpm/issues/13313). - Prevented `pnpm dedupe --check` from removing an incompatible `node_modules` directory. - `pnpm update --workspace` no longer links dependencies the user never named: - Running it with `updateConfig.ignoreDependencies` configured no longer fails with `ERR_PNPM_WORKSPACE_PACKAGE_NOT_FOUND` for a dependency that is only published to the registry. Such dependencies keep their specifiers, as they already did when no dependencies were ignored. - Passing package selectors that match no direct dependency no longer falls back to linking every workspace dependency. #### Platinum Sponsors
Bit
OpenAI
#### Gold Sponsors
Sanity Discord Vite
SerpApi CodeRabbit Stackblitz
Workleap Nx
### [`v11.17.0`](https://redirect.github.com/pnpm/pnpm/releases/tag/v11.17.0): pnpm 11.17 [Compare Source](https://redirect.github.com/pnpm/pnpm/compare/v11.16.0...v11.17.0) ##### Minor Changes - Added a new setting, `update.githubActionsServer`, for specifying the base URL of the GitHub server that hosts the repositories of the GitHub Actions referenced by the workflow files (for example, a GitHub Enterprise Server). When the setting is not defined, the URL is read from the `GITHUB_SERVER_URL` environment variable, falling back to `https://github.com`. The URL must use the `https://` or `http://` protocol [#​13220](https://redirect.github.com/pnpm/pnpm/issues/13220). `pnpm outdated` and `pnpm update` no longer fail when the refs of a GitHub Action's repository cannot be read (for example, when the action's repository is private or hosted on a different GitHub server). Such actions are now skipped with a warning. Setting `update.githubActions` to `false` now makes `pnpm outdated` and the interactive `pnpm update` skip GitHub Actions dependencies. ##### Patch Changes - The token poll for web-based authentication no longer reads the body of non-OK or still-pending (HTTP 202) responses, and caps the token response body it does read at 64 KiB, so a malicious or compromised registry cannot exhaust memory through the poll [pnpm/pnpm#12721](https://redirect.github.com/pnpm/pnpm/issues/12721). - Fixed `catalog:` references in dependencies and overrides failing to resolve when installing through a pnpr server, which errored with "No catalog entry '' was found for catalog 'default'." even though the catalog entry existed. Also fixed a crash on Windows when installing a nested workspace member (e.g. `packages/foo`) through a pnpr server [#​13232](https://redirect.github.com/pnpm/pnpm/issues/13232). - Republished every package: the tarballs published by the v11.13.1 through v11.16.0 releases were missing most of their compiled files due to a packing bug [#​13164](https://redirect.github.com/pnpm/pnpm/issues/13164). - Revert script ordering change for `pnpm run --sequential /regex/` - Support the `from-git` argument in the `pnpm version` command. - When the authentication URL cannot be rendered as a QR code (for example when it exceeds the maximum QR data capacity), web-based login now displays the URL alone with a warning instead of aborting authentication [pnpm/pnpm#12721](https://redirect.github.com/pnpm/pnpm/issues/12721). ##### Platinum Sponsors
Bit
OpenAI
##### Gold Sponsors
Sanity Discord Vite
SerpApi CodeRabbit Stackblitz
Workleap Nx
### [`v11.16.0`](https://redirect.github.com/pnpm/pnpm/releases/tag/v11.16.0): pnpm 11.16 [Compare Source](https://redirect.github.com/pnpm/pnpm/compare/v11.15.1...v11.16.0) #### Minor Changes - The first release of a package now publishes the version written in its manifest verbatim, instead of bumping off it. `pnpm version -r` and `pnpm change status` check the registry for each release's current version; when that version is not yet published, the package debuts at it and its pending changesets apply only from the next release. A newly added package seeded at `1100.0.0` with a `minor` changeset is therefore published as `1100.0.0` rather than skipping straight to `1100.1.0`. - Added a `--changeset` flag to `pnpm update`. Set `update.changeset` to `true` in `pnpm-workspace.yaml` to enable this behavior by default, and use `--no-changeset` to override the setting for one update. After the update completes, pnpm writes a `.changeset/pnpm-update-.md` file declaring a patch bump for every workspace package whose `dependencies` or `optionalDependencies` were changed by the update and a major bump when `peerDependencies` changed, including packages that consume an updated catalog entry via the `catalog:` protocol. Private packages, packages without a name, and packages listed in the `ignore` array of `.changeset/config.json` are skipped. If `.changeset/config.json` does not exist, a warning is printed and no changeset is generated. - Added GitHub Actions dependencies to `pnpm outdated` and interactive `pnpm update`. Non-interactive updates can include them with `--include-github-actions` or by setting `update.githubActions` to `true` in `pnpm-workspace.yaml`. Updated actions are pinned to exact commit hashes with their release tags preserved in comments. - Added `update` and `audit` settings sections to `pnpm-workspace.yaml`, superseding the awkwardly named `updateConfig`, `auditConfig`, and top-level `auditLevel` settings: ```yaml update: ignoreDeps: # was updateConfig.ignoreDependencies - webpack - "@babel/*" audit: level: high # was auditLevel ignore: # was auditConfig.ignoreGhsas - GHSA-xxxx-yyyy-zzzz ``` `update.ignoreDeps` lists dependency name patterns that `pnpm update` and `pnpm outdated` should skip. `audit.level` and `audit.ignore` tune `pnpm audit`. The deprecated `updateConfig`, `auditConfig`, and `auditLevel` settings keep working until the next major version. When both a new section value and its deprecated counterpart are set, the new section takes precedence and a warning is printed. Both the TypeScript CLI and the Rust config surface (pacquet) recognize the new sections. #### Patch Changes - Fixed `pnpm add --save-exact`/`--save-prefix` and `pnpm update` writing a package's version with the `peerDependencies` range's prefix (e.g. `^19.2.7` instead of the requested `19.2.7`) whenever the same package also appeared in `peerDependencies`. A real `dependencies`/`devDependencies`/`optionalDependencies` entry now takes precedence over a same-named `peerDependencies` entry when computing the current specifiers [#​13108](https://redirect.github.com/pnpm/pnpm/issues/13108). #### Platinum Sponsors
Bit
OpenAI
#### Gold Sponsors
Sanity Discord Vite
SerpApi CodeRabbit Stackblitz
Workleap Nx
pnpm/action-setup (pnpm/action-setup) ### [`v6.0.10`](https://redirect.github.com/pnpm/action-setup/compare/v6.0.9...v6.0.10) [Compare Source](https://redirect.github.com/pnpm/action-setup/compare/v6.0.9...v6.0.10)
--- ### Configuration 📅 **Schedule**: (UTC) - Branch creation - At any time (no schedule defined) - Automerge - At any time (no schedule defined) 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 👻 **Immortal**: This PR will be recreated if closed unmerged. Get [config help](https://redirect.github.com/renovatebot/renovate/discussions) if that's undesired. --- - [ ] If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/sveltejs/kit). --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Rich Harris --- .github/actions/node-setup/action.yml | 2 +- .github/workflows/release.yml | 4 +- package.json | 2 +- pnpm-lock.yaml | 604 ++++++++++++++------------ pnpm-workspace.yaml | 10 +- 5 files changed, 338 insertions(+), 284 deletions(-) diff --git a/.github/actions/node-setup/action.yml b/.github/actions/node-setup/action.yml index c288e9cbef4c..39566cd0a2e9 100644 --- a/.github/actions/node-setup/action.yml +++ b/.github/actions/node-setup/action.yml @@ -10,7 +10,7 @@ inputs: runs: using: 'composite' steps: - - uses: pnpm/action-setup@0ebf47130e4866e96fce0953f49152a61190b271 # v6.0.9 + - uses: pnpm/action-setup@0977fd99725f1db4007ccb2928dbb4e90d06cc86 # v6.0.10 - uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0 with: diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 916dcabf895a..490422e8f4bc 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -26,7 +26,7 @@ jobs: uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false - - uses: pnpm/action-setup@0ebf47130e4866e96fce0953f49152a61190b271 # v6.0.9 + - uses: pnpm/action-setup@0977fd99725f1db4007ccb2928dbb4e90d06cc86 # v6.0.10 - name: Setup Node.js uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0 with: @@ -37,7 +37,7 @@ jobs: - name: Create Release Pull Request or Publish to npm id: changesets - uses: changesets/action@c47fa68bd43bb8ae0bae7e558622593deebf5955 # v2.0.0-next.3 + uses: changesets/action@2d9f7af6402422be60d377f151c7618011bba45a # v2.0.0-next.4 with: # This expects you to have a script called release which does a build for your packages and calls changeset publish publish-script: pnpm changeset:release diff --git a/package.json b/package.json index 0d65a31276ac..a0a5d07e36e6 100644 --- a/package.json +++ b/package.json @@ -37,7 +37,7 @@ "prettier-plugin-svelte": "catalog:", "vitest": "catalog:" }, - "packageManager": "pnpm@11.15.1+sha512.81350b07e53c9538a02f1f2303b4290fa2d7be04e56e2a970c4cc4b417dc761de196edabd49d55c7dc9580db81007c44143e4e3d7e462b3000d23c255122d065", + "packageManager": "pnpm@11.19.0+sha512.7881f3ed590d472c4a955e2b88b2121791116066dcc88cbca3849ec9b60f1bbaa6d2ccb221fa91da4e1c65bef2bcbe379365aea7ac539c7bf86dedc3a1b22dce", "engines": { "pnpm": ">=11.0.0" } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index fe500b05b4ea..dabfdd7191ec 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -7,23 +7,23 @@ settings: catalogs: default: '@changesets/changelog-github': - specifier: 1.0.0-next.7 - version: 1.0.0-next.7 + specifier: 1.0.0-next.9 + version: 1.0.0-next.9 '@changesets/cli': - specifier: 3.0.0-next.10 - version: 3.0.0-next.10 + specifier: 3.0.0-next.11 + version: 3.0.0-next.11 '@fontsource/libre-barcode-128-text': specifier: ^5.1.0 version: 5.1.0 '@opentelemetry/sdk-node': - specifier: ^0.220.0 - version: 0.220.0 + specifier: ^0.221.0 + version: 0.221.0 '@opentelemetry/sdk-trace-node': specifier: ^2.8.0 version: 2.9.0 '@playwright/test': - specifier: ~1.61.0 - version: 1.61.1 + specifier: ^1.62.0 + version: 1.62.1 '@polka/url': specifier: ^1.0.0-next.28 version: 1.0.0-next.28 @@ -103,13 +103,13 @@ importers: devDependencies: '@changesets/changelog-github': specifier: 'catalog:' - version: 1.0.0-next.7 + version: 1.0.0-next.9 '@changesets/cli': specifier: 'catalog:' - version: 3.0.0-next.10 + version: 3.0.0-next.11 '@playwright/test': specifier: 'catalog:' - version: 1.61.1 + version: 1.62.1 '@sveltejs/eslint-config': specifier: 'catalog:' version: 10.0.3(@eslint/js@10.0.1(eslint@10.8.0(jiti@2.4.2)(supports-color@10.2.2)))(@stylistic/eslint-plugin@5.10.0(eslint@10.8.0(jiti@2.4.2)(supports-color@10.2.2)))(eslint-config-prettier@9.1.0(eslint@10.8.0(jiti@2.4.2)(supports-color@10.2.2)))(eslint-plugin-n@17.24.0(eslint@10.8.0(jiti@2.4.2)(supports-color@10.2.2))(typescript@6.0.3))(eslint-plugin-svelte@3.15.0(eslint@10.8.0(jiti@2.4.2)(supports-color@10.2.2))(svelte@5.56.3(@typescript-eslint/types@8.61.1)))(eslint@10.8.0(jiti@2.4.2)(supports-color@10.2.2))(typescript-eslint@8.58.0(eslint@10.8.0(jiti@2.4.2)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3))(typescript@6.0.3) @@ -152,7 +152,7 @@ importers: devDependencies: '@playwright/test': specifier: 'catalog:' - version: 1.61.1 + version: 1.62.1 '@sveltejs/kit': specifier: workspace:^ version: link:../kit @@ -331,7 +331,7 @@ importers: devDependencies: '@playwright/test': specifier: 'catalog:' - version: 1.61.1 + version: 1.62.1 '@sveltejs/kit': specifier: workspace:^ version: link:../../../../kit @@ -349,7 +349,7 @@ importers: devDependencies: '@playwright/test': specifier: 'catalog:' - version: 1.61.1 + version: 1.62.1 '@sveltejs/kit': specifier: workspace:^ version: link:../kit @@ -556,7 +556,7 @@ importers: version: 1.9.0 '@playwright/test': specifier: 'catalog:' - version: 1.61.1 + version: 1.62.1 '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' version: 7.0.0(svelte@5.56.3(@typescript-eslint/types@8.61.1))(vite@8.1.5(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0)) @@ -694,7 +694,7 @@ importers: version: 1.9.0 '@opentelemetry/sdk-node': specifier: 'catalog:' - version: 0.220.0(@opentelemetry/api@1.9.0)(supports-color@10.2.2) + version: 0.221.0(@opentelemetry/api@1.9.0)(supports-color@10.2.2) '@opentelemetry/sdk-trace-node': specifier: 'catalog:' version: 2.9.0(@opentelemetry/api@1.9.0) @@ -706,7 +706,7 @@ importers: version: 7.0.0(svelte@5.56.3(@typescript-eslint/types@8.61.1))(vite@8.1.5(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0)) '@vitest/browser-playwright': specifier: 'catalog:' - version: 4.1.10(playwright@1.61.1)(vite@8.1.5(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0))(vitest@4.1.10) + version: 4.1.10(playwright@1.62.1)(vite@8.1.5(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0))(vitest@4.1.10) svelte: specifier: 'catalog:' version: 5.56.3(@typescript-eslint/types@8.61.1) @@ -1579,29 +1579,29 @@ packages: resolution: {integrity: sha512-ctxtJ/eA+t+6q2++vj5j7FYX3nRu311q1wfYH3xjlLOsczhlhxAg2FWNUXhpGvAw3BWo1xBcvOV6/YLc2r5FJw==} hasBin: true - '@changesets/apply-release-plan@8.0.0-next.9': - resolution: {integrity: sha512-Q/mQVsu4R40WlrAQ9fYnGXUCqmDLq2ZnAIsduSHVR71MUN6I1lCxYuUyoEm5FT2nHtR2tg4epbqVdwRzZYrqfQ==} + '@changesets/apply-release-plan@8.0.0-next.10': + resolution: {integrity: sha512-Yps335/MoZe8nKMJ8Jt4CCZ4N9zFF+5q0INfmcCuDJebrB/cvCfJMJLMVQ/Pz4lFY7fWgCVFSsvRFHiT23G08g==} engines: {node: ^22.11 || ^24 || >=26} - '@changesets/assemble-release-plan@7.0.0-next.9': - resolution: {integrity: sha512-Ea6YLYjHC6AHI8nUdu2vfQeL3QxvfOBLzsbmTw5xaoyuAHusnkDkTy/eqatfvjzyQSQPQ5cypjx32YnGE0xeng==} + '@changesets/assemble-release-plan@7.0.0-next.10': + resolution: {integrity: sha512-zuC3jl9KQi2dc0WeT1mpwPDfk6Y6kswx7sER65YN53AtWY0PJCSa0t9zDMLKfTO0yYeqrk40Z/AEOwum9jA/vg==} engines: {node: ^22.11 || ^24 || >=26} - '@changesets/changelog-git@1.0.0-next.8': - resolution: {integrity: sha512-K+PkmKBPdnfH065xdEF6rGmLKj0oMoVNRBRkhgrKBSoNneggNNQ46uvwBoVYCLZZOpRC0MLCmBq7IfGxnzriUg==} + '@changesets/changelog-git@1.0.0-next.9': + resolution: {integrity: sha512-v9YatKMVoljRPRPzI9PoxDHxBsLXZs+ndKBts6nOJlRpGHoGyzScOyC2YYce0krYhFxhn+lOiIto/7AOlTFuwA==} engines: {node: ^22.11 || ^24 || >=26} - '@changesets/changelog-github@1.0.0-next.7': - resolution: {integrity: sha512-JP2uFcqTLsjVKZ/OXW+Kvp1PAgwwd0z8HkJomM9gUH0Jp/TpcbIYX9mRlqrFHzM9cA22eVP9GaUgeI01ZGtoEQ==} + '@changesets/changelog-github@1.0.0-next.9': + resolution: {integrity: sha512-xGtpDLiJeQdyoOGNfKIKp09+o41J7KTNJ+QXWq8OqrzFbOCuI+KZC1AlyIDAsjZce3tBYLhu9sQtAMkmRnGOew==} engines: {node: ^22.11 || ^24 || >=26} - '@changesets/cli@3.0.0-next.10': - resolution: {integrity: sha512-8FXpcTI+QElN04xHY3/J2jrrhMuwiuXv2B2Xq5Am9SUcCyvEtgZEQ0tLYzQxm+qzTyY/MWCcwwiaFnRAHqzCAA==} + '@changesets/cli@3.0.0-next.11': + resolution: {integrity: sha512-yH79OtoLPruqx0BTO0eKE1rxupgk7Qf1SzmVhwdDqikkOoFlPD5/QEAN3zvRXLoGcT0VN0Wuq2zCFTi8CyJgLA==} engines: {node: ^22.11 || ^24 || >=26, npm: '>=10.9.0', pnpm: '>=10.0.0', yarn: '>=4.5.2'} hasBin: true - '@changesets/config@4.0.0-next.8': - resolution: {integrity: sha512-qVpW9OnDRkIoQdrOYtbYp30IRYTk/co7pvP12/4mBpHnS7oEfKegIY3sPalbKoND+gT+QNyS4c7uevx65tvvxQ==} + '@changesets/config@4.0.0-next.9': + resolution: {integrity: sha512-V/dN3IQ2gnYguztEQuT6z+IQ6vqcA0KUue0CdjWOjLRHA8dQaMrcKBKZlbNecvm31fGc1qIWu9IyXML1Xf3NUw==} engines: {node: ^22.11 || ^24 || >=26} '@changesets/errors@1.0.0-next.4': @@ -1612,40 +1612,40 @@ packages: resolution: {integrity: sha512-OBN/xfe+lcNWCv8P4Ogop9EOTi5QRKd1c2JJfZRBT9AT3AybzDYDfHeX4Y7j20Q4e16BPu3XvcdOe9sPZmTEig==} engines: {node: ^22.11 || ^24 || >=26} - '@changesets/get-dependents-graph@3.0.0-next.8': - resolution: {integrity: sha512-szwdzMZAu75ZdLjZOGFKD7lXvEwsWgDj91M4Pgj4uCtEj9K0lmeAer7SaKTqwiqj+DgEWWlxAXyKkgaSA34ozA==} + '@changesets/get-dependents-graph@3.0.0-next.9': + resolution: {integrity: sha512-zyukhblBz0TO7Ze4rJHS/LN8dLvNpKPGEm3YhYRpZnlRCT+r4X9YtrHJjUFHbnjn2wNRRzzy6eHzsFn43YI3jQ==} engines: {node: ^22.11 || ^24 || >=26} '@changesets/get-github-info@1.0.0-next.4': resolution: {integrity: sha512-Bosh+XOoFvLMzAj301tg6phbrEggBtvEccrnceEvYsKSM7PjcIa32Fy22SU5g+501HZywkdwcAlybdWF+e/zzw==} engines: {node: ^22.11 || ^24 || >=26} - '@changesets/git@4.0.0-next.8': - resolution: {integrity: sha512-PZqzc7NtBHRLmUcRj4ZOATAvDtcIl6DKVFuQPHWKEUqCXhnmgKheCfC6SA0Kxx4w+9JywkEjVX1f/h8y4cv9jg==} + '@changesets/git@4.0.0-next.9': + resolution: {integrity: sha512-7WqrwEVpsKZKbBGR7hPRuHTbkIMiDdoyxSsQDOWrmuBh13wDTGaIV6yYQoOs0I3l56khxydm/68v01c/+4g9jQ==} engines: {node: ^22.11 || ^24 || >=26} - '@changesets/parse@1.0.0-next.9': - resolution: {integrity: sha512-U7SAqJgr3zcjsVE6GwsvkwztOYKiTvxoiy/p0M6TIeND3ny7AODvaKu7+JjoULZwmiJtFJKt5ZnAzdonTCjwlg==} + '@changesets/parse@1.0.0-next.10': + resolution: {integrity: sha512-ENFmw8Ytq6fNY3O+uC99KDdChZ3dM8PFgth3qi1Ms78GCCHsSgik0ojQwGht5VPsP6WhfTkNqW3fCakFt+euHg==} engines: {node: ^22.11 || ^24 || >=26} - '@changesets/pre@3.0.0-next.8': - resolution: {integrity: sha512-C2SUMfANcZRcGP7KrDiniOr9XepVRbahy5QD/s4eSeCIq26r+i2KuZit50BvPt2nBOentla1IOlAG/Q+xQwk0A==} + '@changesets/pre@3.0.0-next.9': + resolution: {integrity: sha512-NznGjw/PCDy6d74DusPriYbLZQl6O8cvRwuv/qsSKUTF/9O9+EvJnXTx+wtHS9SLJnJqRaGprQ1EMSkjRRyDGQ==} engines: {node: ^22.11 || ^24 || >=26} - '@changesets/read@1.0.0-next.9': - resolution: {integrity: sha512-jqbSU0oO3Forv/6abO05eDrXYFrtxccAzdmp7M9SYzACtX4EVjY2p6x3OJPchBaJgCwqOmW8T9aQuTai6tuVkQ==} + '@changesets/read@1.0.0-next.10': + resolution: {integrity: sha512-wmhNbv8gnN6Gv6dpFftmqkyy5OTQfFWFlyfwLa7s+b0vMihA5ZYwU/Zd8VN53AsSlYp6k8s4sc43ZJk0zUIkRA==} engines: {node: ^22.11 || ^24 || >=26} - '@changesets/should-skip-package@1.0.0-next.8': - resolution: {integrity: sha512-MNEErvWCrsLn2s2ZRzMKbDoHN0lZJcX0vnrFCMZWDTpl+DCa7zD1+LWWZbZtOgicra7AKdnvv6i+2TcO82y65A==} + '@changesets/should-skip-package@1.0.0-next.9': + resolution: {integrity: sha512-KaDRCnNy+J4Q8vTZIyKGV3wtDyW79bJN7+XBg919ZKneAj7jJpJLIPkVK+MlyGqyWoxhWEcDBRZ3aTjVkx/tnw==} engines: {node: ^22.11 || ^24 || >=26} - '@changesets/types@7.0.0-next.8': - resolution: {integrity: sha512-OLo8iYUapRK92AXRW2vCxN0YtkB8B+E5viuxnVLZAlm3fcmQIpMXic0Yloha5Q0v4p1iw4vXWOYIeBj3HQ8vbg==} + '@changesets/types@7.0.0-next.9': + resolution: {integrity: sha512-okzQIKr+HZXZne37+QI0o0GrKNNTinP8jqsSdr2jUXEt8qhiwdG/X2o7aukp4WBtG4R395BOGyJVfaCy+xg7IA==} engines: {node: ^22.11 || ^24 || >=26} - '@changesets/write@1.0.0-next.8': - resolution: {integrity: sha512-cLU+1MLWYlqV8JbV4gGK3CyDFuZAe7qx81ezjkiXruTquUI90UKSSH5gynhOwG7tZEqpY4xHTOBQ2ssXU0b4sw==} + '@changesets/write@1.0.0-next.9': + resolution: {integrity: sha512-vZ7iTrI8FhJydoWla4G9LSk1kJf4yOtA9m3h9Wffvn+0v5DXUe3LrP/7ZBxHlFCu+WY5ypKo+ClLaDvB9I7Zpg==} engines: {node: ^22.11 || ^24 || >=26} '@clack/core@1.4.3': @@ -2372,154 +2372,178 @@ packages: resolution: {integrity: sha512-8/g0Pt6y6wXj5Ia5eeYLiXhRfWeqZXGXpGFeCiiQdUOem+FPtXdA4+YdGxqzWc7D0AvptKSO01KGeeVWHSu8Kg==} engines: {node: ^18.14.0 || >=20} - '@opentelemetry/api-logs@0.220.0': - resolution: {integrity: sha512-CmVa4ImJ+ynfrPMNaAXHET6Bhb44SwzmfyVJFq9ni2jgXJR/l7C6gfVFddNmHP+ZOkP9cf4f9DBe68qVLTHc9w==} + '@opentelemetry/api-logs@0.221.0': + resolution: {integrity: sha512-OlanaW1vv7ufTqQ3/fPLI4arGt5ZoM+P8abOMki6uEYnpRazepSWDwDnnw+la7kE26SHVC18//SMccrDvLKOXQ==} engines: {node: '>=8.0.0'} '@opentelemetry/api@1.9.0': resolution: {integrity: sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==} engines: {node: '>=8.0.0'} - '@opentelemetry/configuration@0.220.0': - resolution: {integrity: sha512-glfIVKnZevRin8fY/9uES/mhRtMT1lGINLHc9MIo5fTQZXswEEHamJtgjv4MTtzgnhHGC92mIS/0lzAUZMyE0w==} + '@opentelemetry/configuration@0.221.0': + resolution: {integrity: sha512-uE9y56Zdi9Gt/RdxYnVOo3YmFZkKJJMA0gqtBe8wh8gdtF5Asqe+Oh/TWiDtFb1s+31jNY4CWgnfIB1KOITfFA==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': ^1.9.0 + '@opentelemetry/context-async-hooks@2.10.0': + resolution: {integrity: sha512-bvyMcgLEkozzSzpEEEo1OMoeQ97bxj6Qs2uN3mPrSdDvObMI1myffD/BPqcLlzZO9//d1SqQA/WPw7Cz2AiqhA==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.10.0' + '@opentelemetry/context-async-hooks@2.9.0': resolution: {integrity: sha512-OQ0vzvbZBiUhjqLnUaoNfYmP8553Crr3aggB4y0ZUi815mZ7idpdJXQmoKdeBKJelYttoBlLSSHubmyw3wvX4w==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': '>=1.0.0 <1.10.0' + '@opentelemetry/core@2.10.0': + resolution: {integrity: sha512-/wNZ8twnEQQA4HoHu22+vcsdru6pWPWxW+7w+FlxT6Id7PE/WIbZmVKkte+PF72e0F2dnImFeHD2syyE1Mw6MQ==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.10.0' + '@opentelemetry/core@2.9.0': resolution: {integrity: sha512-m2nckMT80NnmjTYSPjJQObBJ+8dgkoajEOUbznL8AHZ3T3yHRk2P7gI1PhEBc1+lOnrYE9UWrWHqJDsmqjmNbw==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': '>=1.0.0 <1.10.0' - '@opentelemetry/exporter-logs-otlp-grpc@0.220.0': - resolution: {integrity: sha512-s0sRPCSlXYqlgObOpCftomJllp3LfUL9FobQ5csg2172ydVhSEnu1ptpsVBJadazs5nUNp7vDuLE03FAFWTLOQ==} + '@opentelemetry/exporter-logs-otlp-grpc@0.221.0': + resolution: {integrity: sha512-txG1G0IrYSsKKMeiWZfj/i5cQmWB+h+hf3HzPpF3RqZVwp+iQQEIsv8Vtmzy6RWVdHdJZfygmVrBI39YTBvWcw==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/exporter-logs-otlp-http@0.220.0': - resolution: {integrity: sha512-8186thl+pTw64iz/qEEen5oJZoZ/gO73XruChdaGlYdWOdBIQ42r+vHLf6a7vIDqTD4b8ZOoMlyxptanECaI9A==} + '@opentelemetry/exporter-logs-otlp-http@0.221.0': + resolution: {integrity: sha512-nKXkr4Tomi6fjYVOf+ytcW3dZAVr4v4Bv5gsT6dr2gvpUPJpKgHB4XbMufMsPotRE3g0XH2GwVVCkN2w6SON+Q==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/exporter-logs-otlp-proto@0.220.0': - resolution: {integrity: sha512-8LZAxdJ0ENDAFwr4j0oY35mHBltiSzvlhdQAPGiC7p9VnxtuSq4SW1gfBAdW6t6hiQG6OwUl8w7KHaOdJPKHWg==} + '@opentelemetry/exporter-logs-otlp-proto@0.221.0': + resolution: {integrity: sha512-AH6EY+47gXFaWYgG3hfeOneGiE9xIZGtDBk+9g0sM8NZWzsQhhmqPbQQXJzS7pyCh5jRRr2nYNXVrkCmoojRvQ==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/exporter-metrics-otlp-grpc@0.220.0': - resolution: {integrity: sha512-U128izvJfX/dW9jRGP0gIfadR1Hg7ft3UEGIeRxLFK70m2BWw6AtNCOnsUygpw2zCgR/ygdWbGpcL6TmhW0ZGw==} + '@opentelemetry/exporter-metrics-otlp-grpc@0.221.0': + resolution: {integrity: sha512-KOgCtO15FC6C1T/xOqBcr7EyUs7B+7yomGNb5Y97d3s38rPbCCk5sewkmE2b0/itOkQ/PptX8CLlD+kn2mEtTg==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/exporter-metrics-otlp-http@0.220.0': - resolution: {integrity: sha512-Yqt3RBw/bRVncaE9qIIhk4WfjbAQqXuP9FgAaU+IKPndnLEp/cUqZlSC324+bpmduRz7DoTjig8Ub0PeILWXUA==} + '@opentelemetry/exporter-metrics-otlp-http@0.221.0': + resolution: {integrity: sha512-sRfCKbOzgy8xZQV2as0RzIZlnCmCseCKZGLfRcrpo2CBngJDr+rPtX0zkG0+oUCV5kfQPUoW3W3C96Ag3Y/Clg==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/exporter-metrics-otlp-proto@0.220.0': - resolution: {integrity: sha512-lyO+IQBdSvqHN/ZOW/OzrSWemtfD+HgWngn+HBNLhjy0YrCQQTz0OE/kSekH2Pl340dn9DWzhqHdz5Eftr+HLA==} + '@opentelemetry/exporter-metrics-otlp-proto@0.221.0': + resolution: {integrity: sha512-YMF4LveY2I3yhw61rn6nmC9FE8U24IZHPeKU1Duc5+sbwjMd8FwZAwba318ImdThCg/HuVQvhm2y6bfgNPnfYg==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/exporter-prometheus@0.220.0': - resolution: {integrity: sha512-JZD5DL/NBpVd2BHefvYosm3G40UZ/KzExLv5tc0eZe0CtrsHHtcOk3YPUxR2EINmUeBf8+w5UReTV8fFPn95lA==} + '@opentelemetry/exporter-prometheus@0.221.0': + resolution: {integrity: sha512-kW79a20qWESIuAdDrxzg9WKM98twV/NBWBFRAH57ap/+ssZhiCo0hckzKT0zpuwR/gSHrFAQhJL0bYDrnEM34g==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/exporter-trace-otlp-grpc@0.220.0': - resolution: {integrity: sha512-bv1xmNhmNwIM6MdUBw4yYuJeVcEViVLk3uD69vOQMwueHBnfyl/u0HnBlB1FNY/Te0UOzJzvcbyR8wN6b+iGbA==} + '@opentelemetry/exporter-trace-otlp-grpc@0.221.0': + resolution: {integrity: sha512-zXminlZedtq9LvOW64CnNkOqk15zV75k8JgtdTuWFge6+jk2m4GmAUm6L2eIiG1o2a2bZxXw2PDrszm+bps0IA==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/exporter-trace-otlp-http@0.220.0': - resolution: {integrity: sha512-/+ExB3lRkf+erv4PnoywyL7RHKITidxtUpUTS55k7OQ0dB42S7gEF1gry7swb9MSm1hYLUhJg4QQh9W8SpwwqA==} + '@opentelemetry/exporter-trace-otlp-http@0.221.0': + resolution: {integrity: sha512-AySXiKoC+meiWm6zdVj5T2LnPDZuatveBby1cMOeQteIWsYXAUxs8Sru13G2pVSPrUXz6vF+og7QVBX6GdC/oQ==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/exporter-trace-otlp-proto@0.220.0': - resolution: {integrity: sha512-voTAD8XgJxlK7zLkXh8EzMB09zrQr3tyY/BsnDTlDiQU/UdK58MZ63A3mUjdEDrxMjCVmBHU3WQJhRmQe+Dvzg==} + '@opentelemetry/exporter-trace-otlp-proto@0.221.0': + resolution: {integrity: sha512-Z9i2T7vgZbWe9rSLYxXVIbeW+XyzUq4rZanW3ZyVNwVDqCsh0EJKUgBWWQ0CZfeuUA+RQPzKgJQHMuWAUnKqXw==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/exporter-zipkin@2.9.0': - resolution: {integrity: sha512-RwINoce2BH8T4obT5pMcAla2sWma1YZvYuaktWmTluQ0PkQdvv5D060rWI1+kawX+J2qBRcMbwrZJJNcMJUauQ==} + '@opentelemetry/exporter-zipkin@2.10.0': + resolution: {integrity: sha512-7gsvgf0UDoJ4l9ObrwBmz5G/ZogiPk+lq+g5GpLp24YQF/vPM/BSsnOfcLnfinast5ASUgLo78uSC/ObjlnXgg==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': ^1.0.0 - '@opentelemetry/instrumentation@0.220.0': - resolution: {integrity: sha512-xQx3E2WxP1mDvKzxLxX+CTCtNLa560YJZ3087qYHerl2YmiKpv7AH+dAy7vmx+eVrZ5BwhfWUAVoKOoxCNHcpw==} + '@opentelemetry/instrumentation@0.221.0': + resolution: {integrity: sha512-cCk80Z/iRDf/5gfsKMB4f74LqVA5yKETB/9ojPzVW/6/f70iu89nJvGxsFCxx4XfSohaOofkU19kiYm84AiAlw==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/otlp-exporter-base@0.220.0': - resolution: {integrity: sha512-CXYo8UD5Mn9YbgebO2EL4wejtA+gxLmLiu6HCk2KH2BR7XhFN6/6p1UlCb23DYCjeYkndevLHuejCCN1yx4+OQ==} + '@opentelemetry/otlp-exporter-base@0.221.0': + resolution: {integrity: sha512-UFPIq80OH3Ns/oPFHRj14d4DTOxUo+MUFU8hUiCq5jTqFhdeJnfVSANHT+xp92409cA+oxzvlZCe6NM1wvCuBA==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/otlp-grpc-exporter-base@0.220.0': - resolution: {integrity: sha512-/eIkBPMBTIvM3x/0mDX4aJeSkYifYClnBPr68PL1h5LV4VQv4+SV6CGrpiZ4fIWDnobVmhTWCm1J/QRdAWUfvA==} + '@opentelemetry/otlp-grpc-exporter-base@0.221.0': + resolution: {integrity: sha512-rQDmNgyiGCTrescjnzH2ntVyUKVIq6I2UjuK8+stT/Xg0ZOT71FVJqwjFdspQl6Yol/Yqsut9bDo+ame8oTmDQ==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/otlp-transformer@0.220.0': - resolution: {integrity: sha512-lXGrv7KXZ0gNH9SVNUaa6vv6phVYGvJxfXAlMbzbakiXru75f5MZl8Z7oqiMMQD77riVHJCFlQvbZs/VVN2/4A==} + '@opentelemetry/otlp-transformer@0.221.0': + resolution: {integrity: sha512-lg6lkOU08Az23jVcn/0Els9HP+V8PnR4Km6p0KgpTggS0n/WuhnmY64rSh83Of9iR9nD+dpWr6adlcX8KzAwjg==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/propagator-b3@2.9.0': - resolution: {integrity: sha512-WrOT1WsOUG+B7hstD2RYoMPIOK76G8E9AQHhMjUvrQaGx/oA7rPWQvvr1Rqv7+yy4R0ZMVwWLC4vW2xnkgWPAQ==} + '@opentelemetry/propagator-b3@2.10.0': + resolution: {integrity: sha512-GnA5B24H+1w8BO21J0q+IWNB0z1v+AGbcquTdIt/dufibhnhgxaA8YKvz0I3akRZhB1jHT+/tlzK+qlAjEDybQ==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': '>=1.0.0 <1.10.0' - '@opentelemetry/propagator-jaeger@2.9.0': - resolution: {integrity: sha512-4mYGty27rYvSM0jtp1ZUOqd3LfVRCYg9H5G9OFzSx5HViYToU21MFhWfco7x1HwXr7ER8yGOiCIHZUwjPksc0Q==} + '@opentelemetry/propagator-jaeger@2.10.0': + resolution: {integrity: sha512-yw/IX8DL470dSMZJoE82ScfYGp7JWZ/G8kFJo35ZILUVTB2jFPTOaioN+8s09pH0RHsWNhweVZb+ZnjJJpCChg==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': '>=1.0.0 <1.10.0' + '@opentelemetry/resources@2.10.0': + resolution: {integrity: sha512-q6MMm2zhggzsHVNbabYwut+a6nbuQQe3URUoxaojM/8K1IBfwwPzvxIjNi2/lI1TFe+fMHMW9MWhrtDLEXEnkA==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': '>=1.3.0 <1.10.0' + '@opentelemetry/resources@2.9.0': resolution: {integrity: sha512-jyA5MBLQ+Dkl3+JsZkUoUvL7yHvU64kLsvpXKarWm6347Sl1t1bXFTFykUePNpT5WH5pm9a2Qtt03iIYQhZ1Fg==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': '>=1.3.0 <1.10.0' - '@opentelemetry/sdk-logs@0.220.0': - resolution: {integrity: sha512-WywcTkQtv2iNmt+6y5Kcd4rzvx9bLVsBa2Nwcmg01IUaBTkTow3W4d9KE5vNBpEDtb9tp21WcRBY/lANRrApYA==} + '@opentelemetry/sdk-logs@0.221.0': + resolution: {integrity: sha512-FaDcazjyMp7TZZZAsqbo4IkovP0UegoCu0EBkiNt+qCqvUf7FPAsfcrZ3+ZEkKgXZ/jHafop+JoGPDk3A0SmLg==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': '>=1.4.0 <1.10.0' - '@opentelemetry/sdk-metrics@2.9.0': - resolution: {integrity: sha512-Xx8RGS4H5XEBl01WuCreMIpiah9cCXMbSkeuIePPdD2cUpq/vUzYmj8E/MK1OsbOc93FuAD4jfn2WOacKwLn7Q==} + '@opentelemetry/sdk-metrics@2.10.0': + resolution: {integrity: sha512-t6r1VSvXNtSDnPXU1FbZeetJb7yyovHmgu0wRSoftxtE0g2rSNhQZQUy69sRUCL+iioJpX8SN/S6wq6ZtvLySQ==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': '>=1.9.0 <1.10.0' - '@opentelemetry/sdk-node@0.220.0': - resolution: {integrity: sha512-wHtGyHhSKHNH3fym33xRu4Ef/HXTFvX8eQ42xdQdEO9LYx9Y2qNyBDJytyqVlvmo6abWZlNYTUthuAGUMYqYnQ==} + '@opentelemetry/sdk-node@0.221.0': + resolution: {integrity: sha512-UbYuvtBrQQB5Prsh9KOKy4kxzexFxfMs5MkteHeWMoswsEB7kiNhyUVkAOFW/qsEzNHtrkgyghrD2ilZJa+5YA==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': '>=1.3.0 <1.10.0' + + '@opentelemetry/sdk-trace-base@2.10.0': + resolution: {integrity: sha512-GuYQQT7QD2EeO8lcZLRQzcbOyhqAzL+6WWTKTU9mSUBYBazkEDl+VrQcXQhbB08OWM9anD1aHleVadzulpOaUQ==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': '>=1.3.0 <1.10.0' @@ -2530,12 +2554,24 @@ packages: peerDependencies: '@opentelemetry/api': '>=1.3.0 <1.10.0' + '@opentelemetry/sdk-trace-node@2.10.0': + resolution: {integrity: sha512-GZK/G6oZyBLGlH1pUgeDch7D91KoHd2uotUGIkWCPi9GI5T9X0p4L7nNAMDR1BQjkRYoDqo+ddfVx9t5Uhys+Q==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.10.0' + '@opentelemetry/sdk-trace-node@2.9.0': resolution: {integrity: sha512-ec9a7ps37huy5itYk0MalaZdSLlM6AXWp/FhtEjgMpp5leEGojBDvAl/UWttQnkMZOvFHKzRESn8TD3yKTF5nQ==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': '>=1.0.0 <1.10.0' + '@opentelemetry/sdk-trace@2.10.0': + resolution: {integrity: sha512-MfQGq3GRmTh5fM/y+OjaO0vj6+luCB1XO2gfXCalKCfgKw0eHL++sm75DNweC6ohlp+aFvACqeE0fYayqdRaoQ==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': '>=1.3.0 <1.10.0' + '@opentelemetry/sdk-trace@2.9.0': resolution: {integrity: sha512-sGA19HvtrrSKYsseHphluH6j3p6Xa3fqc7c7y8f/7mYWejc1lyDFcpSdD1kYa50HCLUeEo4zA5bW0pniaPszuw==} engines: {node: ^18.19.0 || >=20.6.0} @@ -2552,9 +2588,9 @@ packages: '@oxc-project/types@0.140.0': resolution: {integrity: sha512-h5LUOzGArYemnW1NMz/DuuQhBi96J6JL2Bk8zE4kvqxB5Sg3jxmCiH4uyOWHDkiKSt5vWlG4FIwCR/DbstcNRQ==} - '@playwright/test@1.61.1': - resolution: {integrity: sha512-8nKv6+0RJSL9FE4jYOEGXnPeM/Hg12qZpmqzZjRh3qM0Y7c3z1mrOTfFLids72RDQYVh9WpLEfR5WdpNX4fkig==} - engines: {node: '>=18'} + '@playwright/test@1.62.1': + resolution: {integrity: sha512-DTcUc8qii+cpHvtOwggMtBRMjKZHXYWdw8syRYu2vtzuq4Wxphqq4NfCs5Zt44L6mA8rfDfj+PHnxFc/FeK6mQ==} + engines: {node: '>=20'} hasBin: true '@pnpm/deps.graph-sequencer@1100.0.1': @@ -3724,14 +3760,14 @@ packages: resolution: {integrity: sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==} engines: {node: '>=12'} - playwright-core@1.61.1: - resolution: {integrity: sha512-h7Qlt6m4REp25qvIdvbDtVmD4LqVXfpRxhORv9L0jzETM05p4fuPJ3dKyuSXQxDSbXnmS79HAgi9589lGSpLkg==} - engines: {node: '>=18'} + playwright-core@1.62.1: + resolution: {integrity: sha512-wPYSwEBJY9GHraISXqyqtx0na0LpO3XEX7jNDhntbex7tzUS7kLnZsOlFruFJB4Hi/rhDMjXGqHewDZ68nYZVw==} + engines: {node: '>=20'} hasBin: true - playwright@1.61.1: - resolution: {integrity: sha512-DWnY5o3YbLWK4GovuAVwpqL+1VwGNdUGrRr++8j8PtQQzvAVZUIMjKQ90fY689sEJZJBbZVw1rXaOKSTitkzPQ==} - engines: {node: '>=18'} + playwright@1.62.1: + resolution: {integrity: sha512-0M+L3LAD8/nm554LOla9Ayx0j0tmFZ0FBcoQ7F1VuVHpM/XpiC8RcDzBQB8W5+hA8L22THxELzeF+2WcUzvcLg==} + engines: {node: '>=20'} hasBin: true pngjs@7.0.0: @@ -4355,48 +4391,48 @@ snapshots: dependencies: css-tree: 3.2.1 - '@changesets/apply-release-plan@8.0.0-next.9': + '@changesets/apply-release-plan@8.0.0-next.10': dependencies: - '@changesets/config': 4.0.0-next.8 + '@changesets/config': 4.0.0-next.9 '@changesets/format': 0.1.1 - '@changesets/git': 4.0.0-next.8 - '@changesets/should-skip-package': 1.0.0-next.8 - '@changesets/types': 7.0.0-next.8 + '@changesets/git': 4.0.0-next.9 + '@changesets/should-skip-package': 1.0.0-next.9 + '@changesets/types': 7.0.0-next.9 import-meta-resolve: 4.2.0 jsonc-parser: 3.3.1 semver: 7.8.5 - '@changesets/assemble-release-plan@7.0.0-next.9': + '@changesets/assemble-release-plan@7.0.0-next.10': dependencies: '@changesets/errors': 1.0.0-next.4 - '@changesets/get-dependents-graph': 3.0.0-next.8 - '@changesets/should-skip-package': 1.0.0-next.8 - '@changesets/types': 7.0.0-next.8 + '@changesets/get-dependents-graph': 3.0.0-next.9 + '@changesets/should-skip-package': 1.0.0-next.9 + '@changesets/types': 7.0.0-next.9 semver: 7.8.5 - '@changesets/changelog-git@1.0.0-next.8': + '@changesets/changelog-git@1.0.0-next.9': dependencies: - '@changesets/types': 7.0.0-next.8 + '@changesets/types': 7.0.0-next.9 - '@changesets/changelog-github@1.0.0-next.7': + '@changesets/changelog-github@1.0.0-next.9': dependencies: '@changesets/get-github-info': 1.0.0-next.4 - '@changesets/types': 7.0.0-next.8 + '@changesets/types': 7.0.0-next.9 - '@changesets/cli@3.0.0-next.10': + '@changesets/cli@3.0.0-next.11': dependencies: - '@changesets/apply-release-plan': 8.0.0-next.9 - '@changesets/assemble-release-plan': 7.0.0-next.9 - '@changesets/changelog-git': 1.0.0-next.8 - '@changesets/config': 4.0.0-next.8 + '@changesets/apply-release-plan': 8.0.0-next.10 + '@changesets/assemble-release-plan': 7.0.0-next.10 + '@changesets/changelog-git': 1.0.0-next.9 + '@changesets/config': 4.0.0-next.9 '@changesets/errors': 1.0.0-next.4 - '@changesets/get-dependents-graph': 3.0.0-next.8 - '@changesets/git': 4.0.0-next.8 - '@changesets/pre': 3.0.0-next.8 - '@changesets/read': 1.0.0-next.9 - '@changesets/should-skip-package': 1.0.0-next.8 - '@changesets/types': 7.0.0-next.8 - '@changesets/write': 1.0.0-next.8 + '@changesets/get-dependents-graph': 3.0.0-next.9 + '@changesets/git': 4.0.0-next.9 + '@changesets/pre': 3.0.0-next.9 + '@changesets/read': 1.0.0-next.10 + '@changesets/should-skip-package': 1.0.0-next.9 + '@changesets/types': 7.0.0-next.9 + '@changesets/write': 1.0.0-next.9 '@clack/prompts': 1.7.0 '@manypkg/get-packages': 3.1.0 '@pnpm/deps.graph-sequencer': 1100.0.1 @@ -4407,11 +4443,11 @@ snapshots: semver: 7.8.5 tinyexec: 1.2.4 - '@changesets/config@4.0.0-next.8': + '@changesets/config@4.0.0-next.9': dependencies: - '@changesets/get-dependents-graph': 3.0.0-next.8 - '@changesets/should-skip-package': 1.0.0-next.8 - '@changesets/types': 7.0.0-next.8 + '@changesets/get-dependents-graph': 3.0.0-next.9 + '@changesets/should-skip-package': 1.0.0-next.9 + '@changesets/types': 7.0.0-next.9 '@manypkg/get-packages': 3.1.0 picomatch: 4.0.5 @@ -4422,50 +4458,50 @@ snapshots: package-manager-detector: 1.8.0 tinyexec: 1.2.4 - '@changesets/get-dependents-graph@3.0.0-next.8': + '@changesets/get-dependents-graph@3.0.0-next.9': dependencies: - '@changesets/types': 7.0.0-next.8 + '@changesets/types': 7.0.0-next.9 semver: 7.8.5 '@changesets/get-github-info@1.0.0-next.4': dependencies: dataloader: 2.2.3 - '@changesets/git@4.0.0-next.8': + '@changesets/git@4.0.0-next.9': dependencies: '@changesets/errors': 1.0.0-next.4 - '@changesets/types': 7.0.0-next.8 + '@changesets/types': 7.0.0-next.9 '@manypkg/get-packages': 3.1.0 picomatch: 4.0.5 tinyexec: 1.2.4 - '@changesets/parse@1.0.0-next.9': + '@changesets/parse@1.0.0-next.10': dependencies: - '@changesets/types': 7.0.0-next.8 + '@changesets/types': 7.0.0-next.9 yaml: 2.9.0 - '@changesets/pre@3.0.0-next.8': + '@changesets/pre@3.0.0-next.9': dependencies: '@changesets/errors': 1.0.0-next.4 - '@changesets/types': 7.0.0-next.8 + '@changesets/types': 7.0.0-next.9 '@manypkg/get-packages': 3.1.0 - '@changesets/read@1.0.0-next.9': + '@changesets/read@1.0.0-next.10': dependencies: - '@changesets/git': 4.0.0-next.8 - '@changesets/parse': 1.0.0-next.9 - '@changesets/types': 7.0.0-next.8 + '@changesets/git': 4.0.0-next.9 + '@changesets/parse': 1.0.0-next.10 + '@changesets/types': 7.0.0-next.9 - '@changesets/should-skip-package@1.0.0-next.8': + '@changesets/should-skip-package@1.0.0-next.9': dependencies: - '@changesets/types': 7.0.0-next.8 + '@changesets/types': 7.0.0-next.9 - '@changesets/types@7.0.0-next.8': {} + '@changesets/types@7.0.0-next.9': {} - '@changesets/write@1.0.0-next.8': + '@changesets/write@1.0.0-next.9': dependencies: '@changesets/format': 0.1.1 - '@changesets/types': 7.0.0-next.8 + '@changesets/types': 7.0.0-next.9 human-id: 4.2.0 '@clack/core@1.4.3': @@ -4992,169 +5028,167 @@ snapshots: '@netlify/types@2.8.0': {} - '@opentelemetry/api-logs@0.220.0': + '@opentelemetry/api-logs@0.221.0': dependencies: '@opentelemetry/api': 1.9.0 '@opentelemetry/api@1.9.0': {} - '@opentelemetry/configuration@0.220.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/configuration@0.221.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.9.0(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 2.10.0(@opentelemetry/api@1.9.0) yaml: 2.9.0 + '@opentelemetry/context-async-hooks@2.10.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/context-async-hooks@2.9.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 + '@opentelemetry/core@2.10.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/semantic-conventions': 1.36.0 + '@opentelemetry/core@2.9.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 '@opentelemetry/semantic-conventions': 1.36.0 - '@opentelemetry/exporter-logs-otlp-grpc@0.220.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/exporter-logs-otlp-grpc@0.221.0(@opentelemetry/api@1.9.0)': dependencies: - '@grpc/grpc-js': 1.14.4 '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.9.0(@opentelemetry/api@1.9.0) - '@opentelemetry/otlp-exporter-base': 0.220.0(@opentelemetry/api@1.9.0) - '@opentelemetry/otlp-grpc-exporter-base': 0.220.0(@opentelemetry/api@1.9.0) - '@opentelemetry/otlp-transformer': 0.220.0(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-logs': 0.220.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-exporter-base': 0.221.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-grpc-exporter-base': 0.221.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-transformer': 0.221.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-logs': 0.221.0(@opentelemetry/api@1.9.0) - '@opentelemetry/exporter-logs-otlp-http@0.220.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/exporter-logs-otlp-http@0.221.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/api-logs': 0.220.0 - '@opentelemetry/core': 2.9.0(@opentelemetry/api@1.9.0) - '@opentelemetry/otlp-exporter-base': 0.220.0(@opentelemetry/api@1.9.0) - '@opentelemetry/otlp-transformer': 0.220.0(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-logs': 0.220.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-exporter-base': 0.221.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-transformer': 0.221.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-logs': 0.221.0(@opentelemetry/api@1.9.0) - '@opentelemetry/exporter-logs-otlp-proto@0.220.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/exporter-logs-otlp-proto@0.221.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/otlp-exporter-base': 0.220.0(@opentelemetry/api@1.9.0) - '@opentelemetry/otlp-transformer': 0.220.0(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-logs': 0.220.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-exporter-base': 0.221.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-transformer': 0.221.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-logs': 0.221.0(@opentelemetry/api@1.9.0) - '@opentelemetry/exporter-metrics-otlp-grpc@0.220.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/exporter-metrics-otlp-grpc@0.221.0(@opentelemetry/api@1.9.0)': dependencies: - '@grpc/grpc-js': 1.14.4 '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.9.0(@opentelemetry/api@1.9.0) - '@opentelemetry/exporter-metrics-otlp-http': 0.220.0(@opentelemetry/api@1.9.0) - '@opentelemetry/otlp-exporter-base': 0.220.0(@opentelemetry/api@1.9.0) - '@opentelemetry/otlp-grpc-exporter-base': 0.220.0(@opentelemetry/api@1.9.0) - '@opentelemetry/otlp-transformer': 0.220.0(@opentelemetry/api@1.9.0) - '@opentelemetry/resources': 2.9.0(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-metrics': 2.9.0(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-metrics-otlp-http': 0.221.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-grpc-exporter-base': 0.221.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-transformer': 0.221.0(@opentelemetry/api@1.9.0) - '@opentelemetry/exporter-metrics-otlp-http@0.220.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/exporter-metrics-otlp-http@0.221.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.9.0(@opentelemetry/api@1.9.0) - '@opentelemetry/otlp-exporter-base': 0.220.0(@opentelemetry/api@1.9.0) - '@opentelemetry/otlp-transformer': 0.220.0(@opentelemetry/api@1.9.0) - '@opentelemetry/resources': 2.9.0(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-metrics': 2.9.0(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 2.10.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-exporter-base': 0.221.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-transformer': 0.221.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 2.10.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-metrics': 2.10.0(@opentelemetry/api@1.9.0) - '@opentelemetry/exporter-metrics-otlp-proto@0.220.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/exporter-metrics-otlp-proto@0.221.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.9.0(@opentelemetry/api@1.9.0) - '@opentelemetry/exporter-metrics-otlp-http': 0.220.0(@opentelemetry/api@1.9.0) - '@opentelemetry/otlp-exporter-base': 0.220.0(@opentelemetry/api@1.9.0) - '@opentelemetry/otlp-transformer': 0.220.0(@opentelemetry/api@1.9.0) - '@opentelemetry/resources': 2.9.0(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-metrics': 2.9.0(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-metrics-otlp-http': 0.221.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-exporter-base': 0.221.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-transformer': 0.221.0(@opentelemetry/api@1.9.0) - '@opentelemetry/exporter-prometheus@0.220.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/exporter-prometheus@0.221.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.9.0(@opentelemetry/api@1.9.0) - '@opentelemetry/resources': 2.9.0(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-metrics': 2.9.0(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 2.10.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 2.10.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-metrics': 2.10.0(@opentelemetry/api@1.9.0) '@opentelemetry/semantic-conventions': 1.36.0 - '@opentelemetry/exporter-trace-otlp-grpc@0.220.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/exporter-trace-otlp-grpc@0.221.0(@opentelemetry/api@1.9.0)': dependencies: - '@grpc/grpc-js': 1.14.4 '@opentelemetry/api': 1.9.0 - '@opentelemetry/otlp-exporter-base': 0.220.0(@opentelemetry/api@1.9.0) - '@opentelemetry/otlp-grpc-exporter-base': 0.220.0(@opentelemetry/api@1.9.0) - '@opentelemetry/otlp-transformer': 0.220.0(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-trace': 2.9.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-exporter-base': 0.221.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-grpc-exporter-base': 0.221.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-transformer': 0.221.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace': 2.10.0(@opentelemetry/api@1.9.0) - '@opentelemetry/exporter-trace-otlp-http@0.220.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/exporter-trace-otlp-http@0.221.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.9.0(@opentelemetry/api@1.9.0) - '@opentelemetry/otlp-exporter-base': 0.220.0(@opentelemetry/api@1.9.0) - '@opentelemetry/otlp-transformer': 0.220.0(@opentelemetry/api@1.9.0) - '@opentelemetry/resources': 2.9.0(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-trace': 2.9.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-exporter-base': 0.221.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-transformer': 0.221.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace': 2.10.0(@opentelemetry/api@1.9.0) - '@opentelemetry/exporter-trace-otlp-proto@0.220.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/exporter-trace-otlp-proto@0.221.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.9.0(@opentelemetry/api@1.9.0) - '@opentelemetry/otlp-exporter-base': 0.220.0(@opentelemetry/api@1.9.0) - '@opentelemetry/otlp-transformer': 0.220.0(@opentelemetry/api@1.9.0) - '@opentelemetry/resources': 2.9.0(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-trace': 2.9.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-exporter-base': 0.221.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-transformer': 0.221.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace': 2.10.0(@opentelemetry/api@1.9.0) - '@opentelemetry/exporter-zipkin@2.9.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/exporter-zipkin@2.10.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.9.0(@opentelemetry/api@1.9.0) - '@opentelemetry/resources': 2.9.0(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-trace': 2.9.0(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 2.10.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 2.10.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace': 2.10.0(@opentelemetry/api@1.9.0) '@opentelemetry/semantic-conventions': 1.36.0 - '@opentelemetry/instrumentation@0.220.0(@opentelemetry/api@1.9.0)(supports-color@10.2.2)': + '@opentelemetry/instrumentation@0.221.0(@opentelemetry/api@1.9.0)(supports-color@10.2.2)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/api-logs': 0.220.0 + '@opentelemetry/api-logs': 0.221.0 import-in-the-middle: 3.0.0 require-in-the-middle: 8.0.0(supports-color@10.2.2) transitivePeerDependencies: - supports-color - '@opentelemetry/otlp-exporter-base@0.220.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/otlp-exporter-base@0.221.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.9.0(@opentelemetry/api@1.9.0) - '@opentelemetry/otlp-transformer': 0.220.0(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 2.10.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-transformer': 0.221.0(@opentelemetry/api@1.9.0) - '@opentelemetry/otlp-grpc-exporter-base@0.220.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/otlp-grpc-exporter-base@0.221.0(@opentelemetry/api@1.9.0)': dependencies: '@grpc/grpc-js': 1.14.4 '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.9.0(@opentelemetry/api@1.9.0) - '@opentelemetry/otlp-exporter-base': 0.220.0(@opentelemetry/api@1.9.0) - '@opentelemetry/otlp-transformer': 0.220.0(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 2.10.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-exporter-base': 0.221.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-transformer': 0.221.0(@opentelemetry/api@1.9.0) - '@opentelemetry/otlp-transformer@0.220.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/otlp-transformer@0.221.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/api-logs': 0.220.0 - '@opentelemetry/core': 2.9.0(@opentelemetry/api@1.9.0) - '@opentelemetry/resources': 2.9.0(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-logs': 0.220.0(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-metrics': 2.9.0(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-trace': 2.9.0(@opentelemetry/api@1.9.0) + '@opentelemetry/api-logs': 0.221.0 + '@opentelemetry/core': 2.10.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 2.10.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-logs': 0.221.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-metrics': 2.10.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace': 2.10.0(@opentelemetry/api@1.9.0) - '@opentelemetry/propagator-b3@2.9.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/propagator-b3@2.10.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.9.0(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 2.10.0(@opentelemetry/api@1.9.0) - '@opentelemetry/propagator-jaeger@2.9.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/propagator-jaeger@2.10.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.9.0(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 2.10.0(@opentelemetry/api@1.9.0) + + '@opentelemetry/resources@2.10.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.10.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.36.0 '@opentelemetry/resources@2.9.0(@opentelemetry/api@1.9.0)': dependencies: @@ -5162,53 +5196,61 @@ snapshots: '@opentelemetry/core': 2.9.0(@opentelemetry/api@1.9.0) '@opentelemetry/semantic-conventions': 1.36.0 - '@opentelemetry/sdk-logs@0.220.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/sdk-logs@0.221.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/api-logs': 0.220.0 - '@opentelemetry/core': 2.9.0(@opentelemetry/api@1.9.0) - '@opentelemetry/resources': 2.9.0(@opentelemetry/api@1.9.0) + '@opentelemetry/api-logs': 0.221.0 + '@opentelemetry/core': 2.10.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 2.10.0(@opentelemetry/api@1.9.0) '@opentelemetry/semantic-conventions': 1.36.0 - '@opentelemetry/sdk-metrics@2.9.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/sdk-metrics@2.10.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.9.0(@opentelemetry/api@1.9.0) - '@opentelemetry/resources': 2.9.0(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 2.10.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 2.10.0(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-node@0.220.0(@opentelemetry/api@1.9.0)(supports-color@10.2.2)': + '@opentelemetry/sdk-node@0.221.0(@opentelemetry/api@1.9.0)(supports-color@10.2.2)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/api-logs': 0.220.0 - '@opentelemetry/configuration': 0.220.0(@opentelemetry/api@1.9.0) - '@opentelemetry/context-async-hooks': 2.9.0(@opentelemetry/api@1.9.0) - '@opentelemetry/core': 2.9.0(@opentelemetry/api@1.9.0) - '@opentelemetry/exporter-logs-otlp-grpc': 0.220.0(@opentelemetry/api@1.9.0) - '@opentelemetry/exporter-logs-otlp-http': 0.220.0(@opentelemetry/api@1.9.0) - '@opentelemetry/exporter-logs-otlp-proto': 0.220.0(@opentelemetry/api@1.9.0) - '@opentelemetry/exporter-metrics-otlp-grpc': 0.220.0(@opentelemetry/api@1.9.0) - '@opentelemetry/exporter-metrics-otlp-http': 0.220.0(@opentelemetry/api@1.9.0) - '@opentelemetry/exporter-metrics-otlp-proto': 0.220.0(@opentelemetry/api@1.9.0) - '@opentelemetry/exporter-prometheus': 0.220.0(@opentelemetry/api@1.9.0) - '@opentelemetry/exporter-trace-otlp-grpc': 0.220.0(@opentelemetry/api@1.9.0) - '@opentelemetry/exporter-trace-otlp-http': 0.220.0(@opentelemetry/api@1.9.0) - '@opentelemetry/exporter-trace-otlp-proto': 0.220.0(@opentelemetry/api@1.9.0) - '@opentelemetry/exporter-zipkin': 2.9.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation': 0.220.0(@opentelemetry/api@1.9.0)(supports-color@10.2.2) - '@opentelemetry/otlp-exporter-base': 0.220.0(@opentelemetry/api@1.9.0) - '@opentelemetry/otlp-grpc-exporter-base': 0.220.0(@opentelemetry/api@1.9.0) - '@opentelemetry/propagator-b3': 2.9.0(@opentelemetry/api@1.9.0) - '@opentelemetry/propagator-jaeger': 2.9.0(@opentelemetry/api@1.9.0) - '@opentelemetry/resources': 2.9.0(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-logs': 0.220.0(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-metrics': 2.9.0(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-trace': 2.9.0(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-trace-base': 2.9.0(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-trace-node': 2.9.0(@opentelemetry/api@1.9.0) + '@opentelemetry/api-logs': 0.221.0 + '@opentelemetry/configuration': 0.221.0(@opentelemetry/api@1.9.0) + '@opentelemetry/context-async-hooks': 2.10.0(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 2.10.0(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-logs-otlp-grpc': 0.221.0(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-logs-otlp-http': 0.221.0(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-logs-otlp-proto': 0.221.0(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-metrics-otlp-grpc': 0.221.0(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-metrics-otlp-http': 0.221.0(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-metrics-otlp-proto': 0.221.0(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-prometheus': 0.221.0(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-trace-otlp-grpc': 0.221.0(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-trace-otlp-http': 0.221.0(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-trace-otlp-proto': 0.221.0(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-zipkin': 2.10.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.221.0(@opentelemetry/api@1.9.0)(supports-color@10.2.2) + '@opentelemetry/otlp-exporter-base': 0.221.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-grpc-exporter-base': 0.221.0(@opentelemetry/api@1.9.0) + '@opentelemetry/propagator-b3': 2.10.0(@opentelemetry/api@1.9.0) + '@opentelemetry/propagator-jaeger': 2.10.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 2.10.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-logs': 0.221.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-metrics': 2.10.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace': 2.10.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': 2.10.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-node': 2.10.0(@opentelemetry/api@1.9.0) '@opentelemetry/semantic-conventions': 1.36.0 transitivePeerDependencies: - supports-color + '@opentelemetry/sdk-trace-base@2.10.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.10.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 2.10.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace': 2.10.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.36.0 + '@opentelemetry/sdk-trace-base@2.9.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -5217,6 +5259,13 @@ snapshots: '@opentelemetry/sdk-trace': 2.9.0(@opentelemetry/api@1.9.0) '@opentelemetry/semantic-conventions': 1.36.0 + '@opentelemetry/sdk-trace-node@2.10.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/context-async-hooks': 2.10.0(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 2.10.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': 2.10.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-node@2.9.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -5224,6 +5273,13 @@ snapshots: '@opentelemetry/core': 2.9.0(@opentelemetry/api@1.9.0) '@opentelemetry/sdk-trace-base': 2.9.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace@2.10.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.10.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 2.10.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.36.0 + '@opentelemetry/sdk-trace@2.9.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -5237,9 +5293,9 @@ snapshots: '@oxc-project/types@0.140.0': {} - '@playwright/test@1.61.1': + '@playwright/test@1.62.1': dependencies: - playwright: 1.61.1 + playwright: 1.62.1 '@pnpm/deps.graph-sequencer@1100.0.1': {} @@ -5572,11 +5628,11 @@ snapshots: - rollup - supports-color - '@vitest/browser-playwright@4.1.10(playwright@1.61.1)(vite@8.1.5(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0))(vitest@4.1.10)': + '@vitest/browser-playwright@4.1.10(playwright@1.62.1)(vite@8.1.5(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0))(vitest@4.1.10)': dependencies: '@vitest/browser': 4.1.10(vite@8.1.5(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0))(vitest@4.1.10) '@vitest/mocker': 4.1.10(vite@8.1.5(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0)) - playwright: 1.61.1 + playwright: 1.62.1 tinyrainbow: 3.1.0 vitest: 4.1.10(@opentelemetry/api@1.9.0)(@types/node@22.19.19)(@vitest/browser-playwright@4.1.10)(jsdom@29.1.1)(vite@8.1.5(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0)) transitivePeerDependencies: @@ -6320,11 +6376,11 @@ snapshots: picomatch@4.0.5: {} - playwright-core@1.61.1: {} + playwright-core@1.62.1: {} - playwright@1.61.1: + playwright@1.62.1: dependencies: - playwright-core: 1.61.1 + playwright-core: 1.62.1 optionalDependencies: fsevents: 2.3.2 @@ -6801,7 +6857,7 @@ snapshots: optionalDependencies: '@opentelemetry/api': 1.9.0 '@types/node': 22.19.19 - '@vitest/browser-playwright': 4.1.10(playwright@1.61.1)(vite@8.1.5(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0))(vitest@4.1.10) + '@vitest/browser-playwright': 4.1.10(playwright@1.62.1)(vite@8.1.5(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0))(vitest@4.1.10) jsdom: 29.1.1 transitivePeerDependencies: - msw diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 66b4575daf4a..fceb7b37159f 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -45,16 +45,14 @@ allowBuilds: # wouldn't require publishing a new package version # see https://github.com/changesets/changesets/issues/1707 catalog: - '@changesets/cli': 3.0.0-next.10 + '@changesets/cli': 3.0.0-next.11 # pin the version of changelog-github because we're using the experimental # template feature which can change in a patch version - '@changesets/changelog-github': 1.0.0-next.7 + '@changesets/changelog-github': 1.0.0-next.9 '@fontsource/libre-barcode-128-text': ^5.1.0 - '@opentelemetry/sdk-node': ^0.220.0 + '@opentelemetry/sdk-node': ^0.221.0 '@opentelemetry/sdk-trace-node': ^2.8.0 - # pin playwright because ^1.62.0 can't recognise our $app/types tsconfig - # extend setting and it throws an error - '@playwright/test': ~1.61.0 + '@playwright/test': ^1.62.0 '@polka/url': ^1.0.0-next.28 '@sveltejs/eslint-config': ^10.0.3 '@sveltejs/vite-plugin-svelte': ^7.0.0 From 6044d055031bc17deedc069dc4016565364bd4f4 Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Wed, 5 Aug 2026 12:58:39 -0400 Subject: [PATCH 438/545] feat: warn when tsconfig doesn't exclude service worker (#16645) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit closes #16581. Different approach to #16593 — rather than adding an empty `include` array from the generated `tsconfig.json`, we just get rid of the `exclude` array and validate the result. This removes a layer of magic and makes it easier for the user to understand the shape of their config. --- ### Please don't delete this checklist! Before submitting the PR, please make sure you do the following: - [x] It's really useful if your PR references an issue where it is discussed ahead of time. In many cases, features are absent for a reason. For large changes, please create an RFC: https://github.com/sveltejs/rfcs - [x] This message body should clearly illustrate what problems it solves. - [x] Ideally, include a test that fails without this PR but passes with it. ### Tests - [x] Run the tests with `pnpm test` and lint the project with `pnpm lint` and `pnpm check` ### Changesets - [x] If your PR makes a change that should be noted in one or more packages' changelogs, generate a changeset by running `pnpm changeset` and following the prompts. Changesets that add features should be `minor` and those that fix bugs should be `patch`. Please prefix changeset messages with `feat:`, `fix:`, or `chore:`. ### Edits - [x] Please ensure that 'Allow edits from maintainers' is checked. PRs without this option may be closed. --------- Co-authored-by: vercel[bot] <35613825+vercel[bot]@users.noreply.github.com> Co-authored-by: Vercel Co-authored-by: Nic Polumeyv --- .changeset/curvy-seas-camp.md | 5 + .../kit/src/core/sync/write_tsconfig/index.js | 124 +++++++++-------- .../kit/src/core/sync/write_tsconfig/utils.js | 61 --------- .../core/sync/write_tsconfig/utils.spec.js | 31 +---- .../src/core/sync/write_tsconfig/validate.js | 128 ++++++++++++++++++ .../core/sync/write_tsconfig/validate.spec.js | 60 ++++++++ 6 files changed, 265 insertions(+), 144 deletions(-) create mode 100644 .changeset/curvy-seas-camp.md create mode 100644 packages/kit/src/core/sync/write_tsconfig/validate.js create mode 100644 packages/kit/src/core/sync/write_tsconfig/validate.spec.js diff --git a/.changeset/curvy-seas-camp.md b/.changeset/curvy-seas-camp.md new file mode 100644 index 000000000000..a27ed7fa6153 --- /dev/null +++ b/.changeset/curvy-seas-camp.md @@ -0,0 +1,5 @@ +--- +'@sveltejs/kit': minor +--- + +feat: warn when tsconfig doesn't exclude service worker diff --git a/packages/kit/src/core/sync/write_tsconfig/index.js b/packages/kit/src/core/sync/write_tsconfig/index.js index 4e327331a2e0..803b5ed1f97d 100644 --- a/packages/kit/src/core/sync/write_tsconfig/index.js +++ b/packages/kit/src/core/sync/write_tsconfig/index.js @@ -6,13 +6,12 @@ import { styleText } from 'node:util'; import { write_if_changed } from '../utils.js'; import { ESSENTIAL_OPTIONS, - extends_id, get_subpath_imports, normalize_config, RECOMMENDED_OPTIONS, - remove_trailing_slashstar, - validate_resolved_config + remove_trailing_slashstar } from './utils.js'; +import { extends_id, validate_resolved_config } from './validate.js'; /** @type {import('typescript')} */ let ts; @@ -29,16 +28,16 @@ try { */ export function write_tsconfig(kit, root) { const paths = get_paths(kit, root); + const types = ['$app/types']; write_parent_tsconfig( - root, root, '$app/tsconfig', { compilerOptions: { paths, rootDirs: ['.', `${kit.outDir}/types`], - types: ['$app/types'], + types, // This is required for svelte-package to work as expected // Can be overwritten @@ -46,45 +45,48 @@ export function write_tsconfig(kit, root) { ...ESSENTIAL_OPTIONS, ...RECOMMENDED_OPTIONS - }, - exclude: [kit.files.serviceWorker] - }, - { - extends: '$app/tsconfig', - include: ['src'] + } }, kit.typescript.config ); - write_parent_tsconfig( - root, - kit.files.serviceWorker, - '$app/tsconfig/service-worker', - { - compilerOptions: { - paths, - types: ['$app/types'], - lib: ['ESNext', 'WebWorker'], - ...ESSENTIAL_OPTIONS - } - }, - { + validate_config(root, { + paths, + types, + exclusions: [kit.files.serviceWorker], + example: { + extends: '$app/tsconfig' + } + }); + + write_parent_tsconfig(root, '$app/tsconfig/service-worker', { + compilerOptions: { + paths, + types, + lib: ['ESNext', 'WebWorker'], + ...ESSENTIAL_OPTIONS, + ...RECOMMENDED_OPTIONS + } + }); + + validate_config(kit.files.serviceWorker, { + paths, + types, + example: { extends: '$app/tsconfig/service-worker' } - ); + }); } /** * Write a generated `tsconfig.json` inside `node_modules`, for the * user config to extend * @param {string} root The project root - * @param {string} dir The directory to resolve a user config from * @param {string} id The id of the generated config * @param {any} config The contents of the generated tsconfig, with paths relative to `root` - * @param {any} example What to print if the user config does _not_ extend the generated config * @param {ValidatedKitConfig['typescript']['config']} [transform] TODO get rid of this */ -function write_parent_tsconfig(root, dir, id, config, example, transform) { +function write_parent_tsconfig(root, id, config, transform) { // simplified tsconfig resolvers (e.g. Playwright's) only find `${id}.json`, not `${id}/tsconfig.json` const out_file = path.join(root, `node_modules/${id}.json`); @@ -92,44 +94,60 @@ function write_parent_tsconfig(root, dir, id, config, example, transform) { normalized = transform?.(normalized) ?? normalized; write_if_changed(out_file, JSON.stringify(normalized, null, '\t')); +} +/** + * @param {string} dir The directory to resolve a user config from + * @param {Object} options + * @param {Record} options.paths The expected paths + * @param {string[]} options.types The expected types + * @param {string[]} [options.exclusions] Files that should be excluded + * @param {any} options.example What to print if the user config does _not_ extend the generated config + */ +function validate_config(dir, options) { if (!ts) { // The user has not installed TypeScript. Skip validation of config. return; } const user_config = load_user_tsconfig(dir); + if (!user_config || !modified_since_last_check(user_config.file)) return; - if (user_config && modified_since_last_check(user_config.file)) { - // now that we've written the parent config, we can resolve the - // user config and validate that nothing important was overwritten - if (!extends_id(user_config.options, id)) { - console.warn( - styleText( - ['bold', 'yellow'], - `${path.relative(process.cwd(), user_config.file)} should extend SvelteKit's built-in configuration:` - ) - ); + // now that we've written the parent config, we can resolve the + // user config and validate that nothing important was overwritten + if (!extends_id(user_config.options, options.example.extends)) { + console.warn( + styleText( + ['bold', 'yellow'], + `${path.relative(process.cwd(), user_config.file)} should extend SvelteKit's built-in configuration:` + ) + ); - console.warn(JSON.stringify(example, null, ' ')); + console.warn(JSON.stringify(options.example, null, ' ')); - return; - } + return; + } - const resolved = ts.parseJsonConfigFileContent(user_config.options, ts.sys, dir).options; - const warnings = validate_resolved_config(resolved, config.compilerOptions); + const resolved = ts.parseJsonConfigFileContent(user_config.options, ts.sys, dir); - if (warnings.length > 0) { - console.warn( - styleText( - ['bold', 'yellow'], - `Found issues while validating ${path.relative(process.cwd(), user_config.file)}` - ) - ); + const warnings = validate_resolved_config( + dir, + resolved, + options.paths, + options.types, + options.exclusions + ); - for (const warning of warnings) { - console.warn(` - ${warning}`); - } + if (warnings.length > 0) { + console.warn( + styleText( + ['bold', 'yellow'], + `Found issues while validating ${path.relative(process.cwd(), user_config.file)}` + ) + ); + + for (const warning of warnings) { + console.warn(` - ${warning}`); } } } diff --git a/packages/kit/src/core/sync/write_tsconfig/utils.js b/packages/kit/src/core/sync/write_tsconfig/utils.js index 472b402b499f..a4dc0020a22e 100644 --- a/packages/kit/src/core/sync/write_tsconfig/utils.js +++ b/packages/kit/src/core/sync/write_tsconfig/utils.js @@ -36,16 +36,6 @@ export const RECOMMENDED_OPTIONS = { noEmit: true // prevent tsconfig error "overwriting input files" - Vite handles the build and ignores this }; -/** - * Validates that a tsconfig contains `"extends": ""` - * @param {any} options - * @param {string} id - */ -export function extends_id(options, id) { - const o = options.extends; - return Array.isArray(o) ? o.includes(id) : o === id; -} - /** * Makes paths relative to the output file * @param {string} out @@ -76,57 +66,6 @@ export function normalize_config(out, config, transform) { return transform?.(normalized) ?? normalized; } -/** - * @param {any} resolved - * @param {any} options - */ -export function validate_resolved_config(resolved, options) { - const warnings = []; - - const join = (/** @type {string[]} */ array) => - array - .map((v) => JSON.stringify(v)) - .join(', ') - .replace(/, ([^,]*)$/, ' and $1'); - - const missing_types = options.types?.filter( - (/** @type {string} */ type) => !resolved.types?.includes(type) - ); - - if (missing_types.length > 0) { - warnings.push(`"types" was overwritten. It must include ${join(missing_types)}`); - } - - if (options.paths) { - /** @type {Set} */ - const mismatch = new Set(); - - for (const [k, expected] of Object.entries(options.paths)) { - const actual = resolved.paths?.[k]?.map((/** @type {string} */ x) => - path.resolve(/** @type {string} */ (resolved.pathsBasePath), x) - ); - - if (JSON.stringify(expected) !== JSON.stringify(actual)) { - mismatch.add(remove_trailing_slashstar(k)); - } - } - - if (mismatch.size > 0) { - const joined = join([...mismatch]); - - warnings.push(`"paths" was overwritten. Imports from ${joined} may not typecheck`); - } - } - - for (const key in ESSENTIAL_OPTIONS) { - if (resolved[key] !== options[key]) { - warnings.push(`"${key}" was overwritten. It should be ${JSON.stringify(options[key])}`); - } - } - - return warnings; -} - /** * @param {string} file */ diff --git a/packages/kit/src/core/sync/write_tsconfig/utils.spec.js b/packages/kit/src/core/sync/write_tsconfig/utils.spec.js index 5a3cf7af73b8..4f1531f63b4c 100644 --- a/packages/kit/src/core/sync/write_tsconfig/utils.spec.js +++ b/packages/kit/src/core/sync/write_tsconfig/utils.spec.js @@ -1,10 +1,5 @@ import { assert, describe, test } from 'vitest'; -import { - extends_id, - get_subpath_imports, - normalize_config, - validate_resolved_config -} from './utils.js'; +import { get_subpath_imports, normalize_config } from './utils.js'; describe('normalize_config', () => { test('normalizes rootDirs', () => { @@ -73,27 +68,3 @@ describe('get_subpath_imports', () => { }); }); }); - -describe('extends_id', () => { - const id = 'POTATO'; - - test('validates that a config extends an id (string)', () => { - assert.equal(extends_id({ extends: id }, id), true); - }); - - test('validates that a config extends an id (array)', () => { - assert.equal(extends_id({ extends: [id] }, id), true); - }); - - test('validates that a config does not extend an id', () => { - assert.equal(extends_id({}, id), false); - }); -}); - -describe('validate_resolved_config', () => { - test('warns if types is overwritten', () => { - const warnings = validate_resolved_config({ types: [] }, { types: ['pinky', 'perky'] }); - - assert.deepEqual(warnings, ['"types" was overwritten. It must include "pinky" and "perky"']); - }); -}); diff --git a/packages/kit/src/core/sync/write_tsconfig/validate.js b/packages/kit/src/core/sync/write_tsconfig/validate.js new file mode 100644 index 000000000000..c6ade51b9457 --- /dev/null +++ b/packages/kit/src/core/sync/write_tsconfig/validate.js @@ -0,0 +1,128 @@ +/** @import ts from 'typescript' */ +import path from 'node:path'; +import { ESSENTIAL_OPTIONS, remove_trailing_slashstar } from './utils.js'; +import { posixify } from '../../../utils/os.js'; + +const formatter = new Intl.ListFormat('en-gb', { type: 'conjunction' }); + +/** + * @param {string[]} things + */ +function join(things) { + return formatter.format(things.map((thing) => JSON.stringify(thing))); +} + +/** + * @param {string} dir + * @param {ts.ParsedCommandLine} resolved + * @param {Record} paths + * @param {string[]} types + * @param {string[]} [exclusions] + */ +export function validate_resolved_config(dir, resolved, paths, types, exclusions) { + /** @type {string[]} */ + const warnings = []; + + if (resolved.options.types) { + validate_types(warnings, types, resolved.options.types); + } + + if (resolved.options.paths) { + validate_paths( + warnings, + /** @type {string} */ (resolved.options.pathsBasePath), + paths, + resolved.options.paths + ); + } + + if (exclusions) { + validate_exclusions(warnings, dir, exclusions, resolved.fileNames); + } + + for (const key in ESSENTIAL_OPTIONS) { + if (resolved.options[key] !== ESSENTIAL_OPTIONS[key]) { + warnings.push( + `"${key}" was overwritten. It should be ${JSON.stringify(ESSENTIAL_OPTIONS[key])}` + ); + } + } + + return warnings; +} + +/** + * @param {string[]} warnings + * @param {string[]} expected + * @param {string[]} actual + */ +export function validate_types(warnings, expected, actual) { + const missing_types = expected.filter((/** @type {string} */ type) => !actual.includes(type)); + + if (missing_types.length > 0) { + warnings.push(`"types" was overwritten. It must include ${join(missing_types)}`); + } + + return warnings; +} + +/** + * @param {string[]} warnings + * @param {string} base + * @param {Record} expected + * @param {ts.MapLike} actual + */ +export function validate_paths(warnings, base, expected, actual) { + /** @type {Set} */ + const mismatch = new Set(); + + for (const [k, e] of Object.entries(expected)) { + const a = actual[k]?.map((/** @type {string} */ x) => + path.resolve(/** @type {string} */ (base), x) + ); + + if (JSON.stringify(e) !== JSON.stringify(a)) { + mismatch.add(remove_trailing_slashstar(k)); + } + } + + if (mismatch.size > 0) { + const joined = join([...mismatch]); + + warnings.push(`"paths" was overwritten. Imports from ${joined} may not typecheck`); + } + + return warnings; +} + +/** + * @param {string[]} warnings + * @param {string} dir + * @param {string[]} exclusions + * @param {string[]} files + */ +export function validate_exclusions(warnings, dir, exclusions, files) { + const missing_exclusions = exclusions.map(posixify).filter((exclusion) => { + return files.some( + (f) => f === exclusion || f.startsWith(exclusion + '/') || f.startsWith(exclusion + '.') + ); + }); + + if (missing_exclusions.length > 0) { + warnings.push( + `${join(missing_exclusions.map((file) => posixify(path.relative(dir, file))))} should be added to the "exclude" array` + ); + } + + return warnings; +} + +/** + * Validates that a tsconfig contains `"extends": ""` + * @param {any} options + * @param {string} id + */ +export function extends_id(options, id) { + const o = options.extends; + return Array.isArray(o) ? o.includes(id) : o === id; +} diff --git a/packages/kit/src/core/sync/write_tsconfig/validate.spec.js b/packages/kit/src/core/sync/write_tsconfig/validate.spec.js new file mode 100644 index 000000000000..7689ed7644ee --- /dev/null +++ b/packages/kit/src/core/sync/write_tsconfig/validate.spec.js @@ -0,0 +1,60 @@ +import { assert, describe, test } from 'vitest'; +import { extends_id, validate_exclusions, validate_types } from './validate.js'; + +describe('extends_id', () => { + const id = 'POTATO'; + + test('validates that a config extends an id (string)', () => { + assert.equal(extends_id({ extends: id }, id), true); + }); + + test('validates that a config extends an id (array)', () => { + assert.equal(extends_id({ extends: [id] }, id), true); + }); + + test('validates that a config does not extend an id', () => { + assert.equal(extends_id({}, id), false); + }); +}); + +describe('validate_types', () => { + test('warns if types is overwritten', () => { + const warnings = validate_types([], ['pinky', 'perky'], []); + + assert.deepEqual(warnings, ['"types" was overwritten. It must include "pinky" and "perky"']); + }); +}); + +describe('validate_exclusions', () => { + test('warns if service worker is incorrectly included', () => { + const warnings = validate_exclusions( + [], + '/path/to/project', + ['/path/to/project/src/service-worker'], + ['/path/to/project/src/service-worker/index.ts'] + ); + + assert.deepEqual(warnings, ['"src/service-worker" should be added to the "exclude" array']); + }); + + test('does not warn if service worker is absent', () => { + const warnings = validate_exclusions( + [], + '/path/to/project', + ['/path/to/project/src/service-worker'], + [] + ); + + assert.deepEqual(warnings, []); + }); + + test('detects windows-style exclusions', () => { + const warnings = validate_exclusions( + [], + 'C:/project', + ['C:\\project\\src\\service-worker'], + ['C:/project/src/service-worker/index.ts'] + ); + assert.deepEqual(warnings, ['"src/service-worker" should be added to the "exclude" array']); + }); +}); From 43abc28e3c4321b499884fde205991cea14e8328 Mon Sep 17 00:00:00 2001 From: Tee Ming Date: Thu, 6 Aug 2026 01:22:07 +0800 Subject: [PATCH 439/545] chore: use the peer imported Vite consistently (#16659) fixes an error in the vite ecosystem ci where the `isRunnableDevEnvironment` fails because of different Vite instances being imported https://github.com/vitejs/vite-ecosystem-ci/actions/runs/30985451349/job/92239036950#step:7:1943 (the helper uses an `instanceOf` check which fails because the class then comes from different imported instances) This PR refactors the code such that we're using the same imported Vite module --- packages/kit/src/cli.js | 9 ++-- packages/kit/src/core/config/index.js | 9 ++-- packages/kit/src/core/env.js | 6 +-- packages/kit/src/core/sync/sync.js | 5 +- packages/kit/src/exports/vite/dev/index.js | 56 ++++++++++++---------- packages/kit/src/exports/vite/index.js | 6 ++- packages/kit/src/runner.js | 6 ++- 7 files changed, 56 insertions(+), 41 deletions(-) diff --git a/packages/kit/src/cli.js b/packages/kit/src/cli.js index 4221f33a1fbf..508ea2027526 100755 --- a/packages/kit/src/cli.js +++ b/packages/kit/src/cli.js @@ -2,8 +2,9 @@ import fs from 'node:fs'; import process from 'node:process'; import { parseArgs, styleText } from 'node:util'; import { extract_svelte_config, load_vite_config } from './core/config/index.js'; -import { coalesce_to_error } from './utils/error.js'; import { resolve_explicit_env_entry } from './core/env.js'; +import { coalesce_to_error } from './utils/error.js'; +import { import_peer } from './utils/import.js'; /** @param {unknown} e */ function handle_error(e) { @@ -96,14 +97,16 @@ if (command === 'sync') { } try { - const vite_config = await load_vite_config(values.config); + const vite = /** @type {import('vite')} */ (await import_peer('vite', process.cwd())); + + const vite_config = await load_vite_config(values.config, vite); const sveltekit_config = extract_svelte_config(vite_config); const sync = await import('./core/sync/sync.js'); sync.all_types(sveltekit_config, vite_config.root); const explicit_env_entry = resolve_explicit_env_entry(sveltekit_config.kit); - await sync.env(sveltekit_config.kit, explicit_env_entry, vite_config.root, values.mode); + await sync.env(vite, sveltekit_config.kit, explicit_env_entry, vite_config.root, values.mode); } catch (error) { handle_error(error); } finally { diff --git a/packages/kit/src/core/config/index.js b/packages/kit/src/core/config/index.js index 9665fe38d68e..2d1e967f216d 100644 --- a/packages/kit/src/core/config/index.js +++ b/packages/kit/src/core/config/index.js @@ -120,13 +120,12 @@ export function load_error_page(config) { /** * @param {string} [config] + * @param {typeof import('vite')} [vite] */ -export async function load_vite_config(config) { - const { resolveConfig } = /** @type {import('vite')} */ ( - await import_peer('vite', process.cwd()) - ); +export async function load_vite_config(config, vite) { + vite ??= /** @type {import('vite')} */ (await import_peer('vite', process.cwd())); - return resolveConfig({ configFile: config }, 'build', process.env.MODE ?? 'production'); + return vite.resolveConfig({ configFile: config }, 'build', process.env.MODE ?? 'production'); } /** diff --git a/packages/kit/src/core/env.js b/packages/kit/src/core/env.js index 00703266a046..9c943a9c08b9 100644 --- a/packages/kit/src/core/env.js +++ b/packages/kit/src/core/env.js @@ -2,7 +2,6 @@ /** @import { EnvVarConfig } from '@sveltejs/kit' */ /** @import { ValidatedKitConfig } from 'types' */ import path from 'node:path'; -import * as vite from 'vite'; import * as devalue from 'devalue'; import { GENERATED_COMMENT } from '../constants.js'; import { dedent } from './sync/utils.js'; @@ -25,13 +24,14 @@ export function resolve_explicit_env_entry(config) { } /** + * @param {typeof import('vite')} vite * @param {ValidatedKitConfig} kit * @param {string | null} file * @param {string} root * @param {string} mode * @returns {Promise> | null>} */ -export async function load_explicit_env(kit, file, root, mode) { +export async function load_explicit_env(vite, kit, file, root, mode) { if (!file) return null; const server = await vite.createServer({ @@ -53,7 +53,7 @@ export async function load_explicit_env(kit, file, root, mode) { /** @type {Record>} */ let variables; - const runner = get_runner(server); + const runner = get_runner(vite, server); /** @type {import('../runtime/app/env/internal.js')} */ ( await runner.import(`${runtime_directory}/app/env/internal.js`) diff --git a/packages/kit/src/core/sync/sync.js b/packages/kit/src/core/sync/sync.js index c4780f90ba22..5d06a39d0002 100644 --- a/packages/kit/src/core/sync/sync.js +++ b/packages/kit/src/core/sync/sync.js @@ -89,13 +89,14 @@ export function all_types(config, root) { /** * Generate modules and types for explicit env vars + * @param {typeof import('vite')} vite * @param {import('types').ValidatedKitConfig} kit * @param {string | null} entry * @param {string} root The Vite root * @param {string} mode The Vite mode */ -export async function env(kit, entry, root, mode) { - const env_config = await load_explicit_env(kit, entry, root, mode); +export async function env(vite, kit, entry, root, mode) { + const env_config = await load_explicit_env(vite, kit, entry, root, mode); write_env(entry, env_config, root); diff --git a/packages/kit/src/exports/vite/dev/index.js b/packages/kit/src/exports/vite/dev/index.js index 9a85948b9e0f..2dec6d74d782 100644 --- a/packages/kit/src/exports/vite/dev/index.js +++ b/packages/kit/src/exports/vite/dev/index.js @@ -8,7 +8,6 @@ import { URL } from 'node:url'; import { AsyncLocalStorage } from 'node:async_hooks'; import { styleText } from 'node:util'; import sirv from 'sirv'; -import { isCSSRequest, loadEnv, buildErrorMessage } from 'vite'; import { createReadableStream, getRequest, setResponse } from '../../../exports/node/index.js'; import { coalesce_to_error } from '../../../utils/error.js'; import { resolve_entry } from '../../../utils/filesystem.js'; @@ -31,7 +30,8 @@ import { get_runner } from '../../../runner.js'; const vite_css_query_regex = /(?:\?|&)(?:raw|url|inline)(?:&|$)/; /** - * @param {ViteDevServer} vite + * @param {typeof import('vite')} vite the peer resolved vite module + * @param {ViteDevServer} vite_dev_server * @param {ResolvedConfig} vite_config * @param {ValidatedConfig} svelte_config * @param {() => RemoteChunk[]} get_remotes @@ -39,7 +39,15 @@ const vite_css_query_regex = /(?:\?|&)(?:raw|url|inline)(?:&|$)/; * @param {(manifest_data: ManifestData) => void} set_manifest_data * @return {Promise void>>} */ -export async function dev(vite, vite_config, svelte_config, get_remotes, root, set_manifest_data) { +export async function dev( + vite, + vite_dev_server, + vite_config, + svelte_config, + get_remotes, + root, + set_manifest_data +) { /** @type {AsyncLocalStorage<{ event: RequestEvent, config: any, prerender: PrerenderOption }>} */ const async_local_storage = new AsyncLocalStorage(); @@ -76,7 +84,7 @@ export async function dev(vite, vite_config, svelte_config, get_remotes, root, s /** @type {Error | null} */ let manifest_error = null; - const runner = get_runner(vite); + const runner = get_runner(vite, vite_dev_server); /** * @param {string} url @@ -86,19 +94,19 @@ export async function dev(vite, vite_config, svelte_config, get_remotes, root, s try { return await runner.import(url); } catch (/** @type {any} */ err) { - const msg = buildErrorMessage(err, [ + const msg = vite.buildErrorMessage(err, [ styleText('red', `Internal server error: ${err.message}`) ]); - if (!vite.config.logger.hasErrorLogged(err)) { - vite.config.logger.error(msg, { error: err }); + if (!vite_dev_server.config.logger.hasErrorLogged(err)) { + vite_dev_server.config.logger.error(msg, { error: err }); } // TODO this is inadequate — it doesn't reliably show the overlay on every page load, // and when it does appear it may immediately vanish. `vite.hot.send` broadcasts // to all connected clients, even ones that are unaffected by the error. // we need a more considered approach - vite.hot.send({ + vite_dev_server.hot.send({ type: 'error', err: /** @type {ErrorPayload['err']} */ ({ ...err, @@ -119,7 +127,7 @@ export async function dev(vite, vite_config, svelte_config, get_remotes, root, s const module = await loud_ssr_load_module(url); - const module_node = await vite.environments.ssr.moduleGraph.getModuleByUrl(url); + const module_node = await vite_dev_server.environments.ssr.moduleGraph.getModuleByUrl(url); if (!module_node) throw new Error(`Could not find node for ${url}`); return { module, module_node, url }; @@ -139,13 +147,13 @@ export async function dev(vite, vite_config, svelte_config, get_remotes, root, s if (manifest_error) { manifest_error = null; - vite.hot.send({ type: 'full-reload' }); + vite_dev_server.hot.send({ type: 'full-reload' }); } } catch (error) { manifest_error = /** @type {Error} */ (error); console.error(styleText(['bold', 'red'], manifest_error.message)); - vite.hot.send({ + vite_dev_server.hot.send({ type: 'error', err: { message: manifest_error.message ?? 'Invalid routes', @@ -256,14 +264,14 @@ export async function dev(vite, vite_config, svelte_config, get_remotes, root, s const deps = new Set(); for (const module_node of module_nodes) { - await find_deps(vite, module_node, deps); + await find_deps(vite_dev_server, module_node, deps); } /** @type {Record} */ const styles = {}; for (const dep of deps) { - if (isCSSRequest(dep.url) && !vite_css_query_regex.test(dep.url)) { + if (vite.isCSSRequest(dep.url) && !vite_css_query_regex.test(dep.url)) { const inlineCssUrl = dep.url.includes('?') ? dep.url.replace('?', '?inline&') : dep.url + '?inline'; @@ -381,7 +389,7 @@ export async function dev(vite, vite_config, svelte_config, get_remotes, root, s * @param {(file: string) => void} cb */ const watch = (event, cb) => { - vite.watcher.on(event, (file) => { + vite_dev_server.watcher.on(event, (file) => { if ( file.startsWith(svelte_config.kit.files.routes + path.sep) || file.startsWith(svelte_config.kit.files.assets + path.sep) || @@ -429,14 +437,14 @@ export async function dev(vite, vite_config, svelte_config, get_remotes, root, s // kit defaults to src/app.html, so unless user changed that to index.html // send the vite client a full-reload event without path being set if (appTemplate !== 'index.html') { - vite.watcher.on('change', (file) => { + vite_dev_server.watcher.on('change', (file) => { if (file === appTemplate) { - vite.hot.send({ type: 'full-reload' }); + vite_dev_server.hot.send({ type: 'full-reload' }); } }); } - vite.watcher.on('all', (_, file) => { + vite_dev_server.watcher.on('all', (_, file) => { if ( file === appTemplate || file === errorTemplate || @@ -455,8 +463,8 @@ export async function dev(vite, vite_config, svelte_config, get_remotes, root, s extensions: [] }); - vite.middlewares.use((req, res, next) => { - const base = `${vite.config.server.https ? 'https' : 'http'}://${ + vite_dev_server.middlewares.use((req, res, next) => { + const base = `${vite_dev_server.config.server.https ? 'https' : 'http'}://${ req.headers[':authority'] || req.headers.host }`; @@ -478,23 +486,23 @@ export async function dev(vite, vite_config, svelte_config, get_remotes, root, s next(); }); - const env = loadEnv(vite_config.mode, svelte_config.kit.env.dir, ''); + const env = vite.loadEnv(vite_config.mode, svelte_config.kit.env.dir, ''); const emulator = await svelte_config.kit.adapter?.emulate?.(); /** @type {Promise | undefined} */ let init_manifest; return () => { - const serve_static_middleware = vite.middlewares.stack.find( + const serve_static_middleware = vite_dev_server.middlewares.stack.find( (middleware) => /** @type {Function} */ (middleware.handle).name === 'viteServeStaticMiddleware' ); // Vite will give a 403 on URLs like /test, /static, and /package.json preventing us from // serving routes with those names. See https://github.com/vitejs/vite/issues/7363 - remove_static_middlewares(vite.middlewares); + remove_static_middlewares(vite_dev_server.middlewares); - vite.middlewares.use(async (req, res) => { + vite_dev_server.middlewares.use(async (req, res) => { // Vite throws a Cannot read properties of undefined (reading 'wrapDynamicImport') // if you try to run ssr.runner.import before the server has started so // we do it inside here to avoid that @@ -504,7 +512,7 @@ export async function dev(vite, vite_config, svelte_config, get_remotes, root, s const original_url = req.url; req.url = req.originalUrl; try { - const base = `${vite.config.server.https ? 'https' : 'http'}://${ + const base = `${vite_dev_server.config.server.https ? 'https' : 'http'}://${ req.headers[':authority'] || req.headers.host }`; diff --git a/packages/kit/src/exports/vite/index.js b/packages/kit/src/exports/vite/index.js index 570703ac87af..a37f5e64fa6c 100644 --- a/packages/kit/src/exports/vite/index.js +++ b/packages/kit/src/exports/vite/index.js @@ -619,7 +619,7 @@ function kit({ svelte_config }) { async configResolved(config) { explicit_env_entry = resolve_explicit_env_entry(kit); - explicit_env_config = await sync.env(kit, explicit_env_entry, config.root, config.mode); + explicit_env_config = await sync.env(vite, kit, explicit_env_entry, config.root, config.mode); }, configureServer(server) { @@ -633,6 +633,7 @@ function kit({ svelte_config }) { if (file === explicit_env_entry || file === resolved) { explicit_env_entry = resolved; explicit_env_config = await sync.env( + vite, kit, explicit_env_entry, vite_config.root, @@ -995,7 +996,7 @@ function kit({ svelte_config }) { // being called again with `opts.ssr === true` if the module isn't // already loaded) so we can determine what it exports if (dev_server) { - const module = await get_runner(dev_server).import(id); + const module = await get_runner(vite, dev_server).import(id); for (const [name, value] of Object.entries(module)) { const type = value?.__?.type; @@ -1542,6 +1543,7 @@ function kit({ svelte_config }) { */ async configureServer(server) { return await dev( + vite, server, vite_config, svelte_config, diff --git a/packages/kit/src/runner.js b/packages/kit/src/runner.js index 59f27bd4398c..6c8791594de6 100644 --- a/packages/kit/src/runner.js +++ b/packages/kit/src/runner.js @@ -1,10 +1,12 @@ /** @import { ViteDevServer } from 'vite' */ -import * as vite from 'vite'; /** + * @param {typeof import('vite')} vite the peer resolved vite module * @param {ViteDevServer} server */ -export function get_runner(server) { +export function get_runner(vite, server) { + // `isRunnableDevEnvironment` does an `instanceof` check and will fail if + // we're using different instances of Vite if (!vite.isRunnableDevEnvironment(server.environments.ssr)) { throw new Error('The configured Vite SSR environment must be a RunnableDevEnvironment'); } From f150b20c73adbf892858b2609bf6fbf2b3c0d319 Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Wed, 5 Aug 2026 14:47:03 -0400 Subject: [PATCH 440/545] chore: centralise `transport` stuff (#16658) This is #16406 but takes the idea to its logical conclusion: by having an internal module where this stuff is managed, we don't need to pass anything around at all and can delete/simplify a bunch of stuff. Once this is in, will rebase #14129 against `version-3` and update it to use this. Co-authored-by: Elliott Johnson --- packages/kit/package.json | 3 + packages/kit/src/core/postbuild/prerender.js | 6 +- packages/kit/src/runtime/app/forms.js | 11 +- .../kit/src/runtime/app/internal/transport.js | 53 ++++++++ .../runtime/app/server/remote/prerender.js | 16 +-- .../app/server/remote/prerender.spec.js | 7 +- .../src/runtime/app/server/remote/query.js | 6 +- .../runtime/app/server/remote/requested.js | 4 +- .../src/runtime/app/server/remote/shared.js | 17 +-- packages/kit/src/runtime/client/client.js | 3 + .../client/remote-functions/command.svelte.js | 3 +- .../instance.unhandled.svelte.spec.js | 1 - .../remote-functions/prerender.svelte.js | 2 +- .../remote-functions/query-live/proxy.js | 4 +- .../query-live/proxy.svelte.spec.js | 1 - .../client/remote-functions/query/proxy.js | 4 +- .../query/proxy.svelte.spec.js | 1 - .../remote-functions/shared.transport.spec.js | 1 - packages/kit/src/runtime/server/app.js | 9 -- packages/kit/src/runtime/server/index.js | 18 +-- .../kit/src/runtime/server/page/actions.js | 39 ++---- .../runtime/server/page/data_serializer.js | 9 +- .../kit/src/runtime/server/page/render.js | 10 +- .../src/runtime/server/remote-functions.js | 26 ++-- packages/kit/src/runtime/server/state.js | 1 - packages/kit/src/runtime/server/utils.js | 20 --- packages/kit/src/runtime/shared.js | 54 +++------ packages/kit/src/runtime/shared.spec.js | 114 ++++++++---------- packages/kit/src/types/internal.d.ts | 3 +- 29 files changed, 187 insertions(+), 259 deletions(-) create mode 100644 packages/kit/src/runtime/app/internal/transport.js delete mode 100644 packages/kit/src/runtime/server/app.js diff --git a/packages/kit/package.json b/packages/kit/package.json index 67081345509b..72d75b6e01eb 100644 --- a/packages/kit/package.json +++ b/packages/kit/package.json @@ -91,6 +91,9 @@ "generate:types": "node scripts/generate-dts.js" }, "imports": { + "#app/internal/transport": { + "default": "./src/runtime/app/internal/transport.js" + }, "#app/paths": { "workerd": "./src/runtime/app/paths/server.js", "browser": "./src/runtime/app/paths/client.js", diff --git a/packages/kit/src/core/postbuild/prerender.js b/packages/kit/src/core/postbuild/prerender.js index 89c43f828a8a..199bc1ee36e2 100644 --- a/packages/kit/src/core/postbuild/prerender.js +++ b/packages/kit/src/core/postbuild/prerender.js @@ -629,14 +629,10 @@ async function prerender({ hash, out, manifest_path, metadata, verbose, env, vit } } - const transport = (await internal.get_hooks()).transport ?? {}; for (const internals of prerender_functions) { if (internals.has_arg) { for (const arg of (await internals.inputs?.()) ?? []) { - void enqueue( - null, - remote_prefix + internals.id + '/' + stringify_remote_arg(arg, transport) - ); + void enqueue(null, remote_prefix + internals.id + '/' + stringify_remote_arg(arg)); } } else { void enqueue(null, remote_prefix + internals.id); diff --git a/packages/kit/src/runtime/app/forms.js b/packages/kit/src/runtime/app/forms.js index 00480ed52627..7f088cb934a8 100644 --- a/packages/kit/src/runtime/app/forms.js +++ b/packages/kit/src/runtime/app/forms.js @@ -1,10 +1,9 @@ -import * as devalue from 'devalue'; -import { BROWSER, DEV } from 'esm-env'; +import { DEV } from 'esm-env'; import { noop } from '../../utils/functions.js'; import { refreshAll } from './navigation.js'; -import { app as client_app, applyAction, handle_error } from '../client/client.js'; -import { app as server_app } from '../server/app.js'; +import { applyAction, handle_error } from '../client/client.js'; import { notify_version } from '../client/state.svelte.js'; +import { parse } from '#app/internal/transport'; export { applyAction }; @@ -38,9 +37,7 @@ export function deserialize(result) { const parsed = JSON.parse(result); if (parsed.data) { - // the decoders should never be initialised at the top-level because `app` - // will not be initialised yet if `output.bundleStrategy` is 'single' or 'inline' - parsed.data = devalue.parse(parsed.data, BROWSER ? client_app.decoders : server_app.decoders); + parsed.data = parse(parsed.data); } return parsed; diff --git a/packages/kit/src/runtime/app/internal/transport.js b/packages/kit/src/runtime/app/internal/transport.js new file mode 100644 index 000000000000..cd4d51de7cb8 --- /dev/null +++ b/packages/kit/src/runtime/app/internal/transport.js @@ -0,0 +1,53 @@ +/** @import { Transport } from '@sveltejs/kit' */ +import * as devalue from 'devalue'; +import { DEV } from 'esm-env'; + +/** @type {(thing: any) => string} */ +export let uneval = () => { + throw new Error(DEV ? 'called uneval before init_transport' : ''); +}; + +/** @type {(data: any) => string} */ +export let stringify = () => { + throw new Error(DEV ? 'called stringify before init_transport' : ''); +}; + +/** @type {(data: string) => any} */ +export let parse = () => { + throw new Error(DEV ? 'called parse before init_transport' : ''); +}; + +/** @type {Record any>} */ +export let encoders = {}; + +/** @type {Record any>} */ +export let decoders = {}; + +export let has_custom_transporters = false; + +/** + * + * @param {Transport} transport + */ +export function init_transport(transport) { + const transporters = Object.entries(transport); + + has_custom_transporters = transporters.length > 0; + + /** @param {unknown} thing */ + const replacer = (thing) => { + for (const key of Object.keys(transport)) { + const encoded = transport[key].encode(thing); + if (encoded) { + return `app.decode('${key}', ${devalue.uneval(encoded, replacer)})`; + } + } + }; + + encoders = Object.fromEntries(transporters.map(([k, v]) => [k, v.encode])); + decoders = Object.fromEntries(transporters.map(([k, v]) => [k, v.decode])); + + uneval = (data) => devalue.uneval(data, replacer); + stringify = (data) => devalue.stringify(data, encoders); + parse = (data) => devalue.parse(data, decoders); +} diff --git a/packages/kit/src/runtime/app/server/remote/prerender.js b/packages/kit/src/runtime/app/server/remote/prerender.js index bd83c16bb22b..30f753250141 100644 --- a/packages/kit/src/runtime/app/server/remote/prerender.js +++ b/packages/kit/src/runtime/app/server/remote/prerender.js @@ -4,15 +4,11 @@ import { json } from '@sveltejs/kit'; import { HttpError } from '@sveltejs/kit/internal'; import { get_request_store } from '@sveltejs/kit/internal/server'; -import { stringify, stringify_remote_arg } from '../../../shared.js'; +import { stringify_remote_arg } from '../../../shared.js'; +import { parse, stringify } from '#app/internal/transport'; import { noop } from '../../../../utils/functions.js'; import { app_dir, base } from '$app/paths/internal/server'; -import { - create_validator, - get_response, - parse_remote_response, - run_remote_function -} from './shared.js'; +import { create_validator, get_response, run_remote_function } from './shared.js'; /** * Creates a remote prerender function. When called from the browser, the function will be invoked on the server via a `fetch` call. @@ -89,7 +85,7 @@ export function prerender(validate_or_fn, fn_or_options, maybe_options) { /** @type {RemotePrerenderFunction & { __: RemotePrerenderInternals }} */ const wrapper = (arg) => { const { event, state } = get_request_store(); - const payload = stringify_remote_arg(arg, state.transport); + const payload = stringify_remote_arg(arg); // `get_response` (as opposed to bare `get_cache`) also registers the call in the // implicit lookup, so that the result is inlined into the page payload (`data.p`) @@ -121,7 +117,7 @@ export function prerender(validate_or_fn, fn_or_options, maybe_options) { throw new HttpError(prerendered.error); } - return parse_remote_response(prerendered.data, state.transport)._; + return parse(prerendered.data)._; } } @@ -146,7 +142,7 @@ export function prerender(validate_or_fn, fn_or_options, maybe_options) { const result = await promise; if (state.prerendering) { - const body = { type: 'result', data: stringify({ _: result }, state.transport) }; + const body = { type: 'result', data: stringify({ _: result }) }; state.prerendering.dependencies.set(url, { body: JSON.stringify(body), response: json(body) diff --git a/packages/kit/src/runtime/app/server/remote/prerender.spec.js b/packages/kit/src/runtime/app/server/remote/prerender.spec.js index 79c4853b076f..af081f361357 100644 --- a/packages/kit/src/runtime/app/server/remote/prerender.spec.js +++ b/packages/kit/src/runtime/app/server/remote/prerender.spec.js @@ -3,7 +3,9 @@ import { expect, test, vi } from 'vitest'; import { HttpError } from '@sveltejs/kit/internal'; import { prerender } from './prerender.js'; -import { stringify } from '../../../shared.js'; +import { init_transport, stringify } from '#app/internal/transport'; + +init_transport({}); const store = vi.hoisted(() => ({ current: /** @type {any} */ (null) })); @@ -37,7 +39,6 @@ function setup(fetch_impl) { ), state: /** @type {RequestState} */ ( /** @type {unknown} */ ({ - transport: {}, remote: {}, prerendering: undefined, is_in_remote_query: false @@ -69,7 +70,7 @@ test('propagates an error response instead of running the function', async () => test('parses a prerendered result without running the function', async () => { const { fn, wrapper } = setup( () => - new Response(JSON.stringify({ type: 'result', data: stringify({ _: 'prerendered' }, {}) }), { + new Response(JSON.stringify({ type: 'result', data: stringify({ _: 'prerendered' }) }), { status: 200 }) ); diff --git a/packages/kit/src/runtime/app/server/remote/query.js b/packages/kit/src/runtime/app/server/remote/query.js index 185bf17f081e..0df6e68a9073 100644 --- a/packages/kit/src/runtime/app/server/remote/query.js +++ b/packages/kit/src/runtime/app/server/remote/query.js @@ -98,7 +98,7 @@ export function query(validate_or_fn, maybe_fn) { } const { event, state } = get_request_store(); - const payload = stringify_remote_arg(arg, state.transport); + const payload = stringify_remote_arg(arg); return create_query_resource(__, payload, event, state, () => run_remote_function( @@ -197,7 +197,7 @@ function live(validate_or_fn, maybe_fn) { } const { event, state } = get_request_store(); - const payload = stringify_remote_arg(arg, state.transport); + const payload = stringify_remote_arg(arg); return create_live_query_resource(__, payload, event, state, () => run(event, state, () => validate(arg)) @@ -376,7 +376,7 @@ function batch(validate_or_fn, maybe_fn) { } const { event, state } = get_request_store(); - const payload = stringify_remote_arg(arg, state.transport); + const payload = stringify_remote_arg(arg); return create_query_resource(__, payload, event, state, () => // Collect all the calls to the same query in the same macrotask, diff --git a/packages/kit/src/runtime/app/server/remote/requested.js b/packages/kit/src/runtime/app/server/remote/requested.js index 257c5305ad9d..b92d5caf0441 100644 --- a/packages/kit/src/runtime/app/server/remote/requested.js +++ b/packages/kit/src/runtime/app/server/remote/requested.js @@ -163,7 +163,7 @@ export function requested(query, limit) { *[Symbol.iterator]() { for (const payload of selected) { try { - const parsed = parse_remote_arg(payload, state.transport); + const parsed = parse_remote_arg(payload); const validated = __.validate(parsed); if (is_thenable(validated)) { @@ -183,7 +183,7 @@ export function requested(query, limit) { async *[Symbol.asyncIterator]() { yield* race_all(selected, async (payload) => { try { - const parsed = parse_remote_arg(payload, state.transport); + const parsed = parse_remote_arg(payload); const validated = await __.validate(parsed); return { arg: validated, query: __.bind(payload, validated) }; } catch (error) { diff --git a/packages/kit/src/runtime/app/server/remote/shared.js b/packages/kit/src/runtime/app/server/remote/shared.js index 19dee8abb28e..bf88e75f8193 100644 --- a/packages/kit/src/runtime/app/server/remote/shared.js +++ b/packages/kit/src/runtime/app/server/remote/shared.js @@ -1,6 +1,5 @@ /** @import { RequestEvent } from '@sveltejs/kit' */ -/** @import { ServerHooks, MaybePromise, RequestState, RemoteInternals, RequestStore, RemoteLiveQueryUserFunctionReturnType } from 'types' */ -import { parse } from 'devalue'; +/** @import { MaybePromise, RequestState, RemoteInternals, RequestStore, RemoteLiveQueryUserFunctionReturnType } from 'types' */ import { error } from '@sveltejs/kit'; import { with_request_store, get_request_store } from '@sveltejs/kit/internal/server'; @@ -80,20 +79,6 @@ export async function get_response(internals, payload, state, get_result) { return (cache[payload] ??= get_result()); } -/** - * @param {any} data - * @param {ServerHooks['transport']} transport - */ -export function parse_remote_response(data, transport) { - /** @type {Record} */ - const revivers = {}; - for (const key in transport) { - revivers[key] = transport[key].decode; - } - - return parse(data, revivers); -} - /** * @param {RequestEvent} event * @param {RequestState} state diff --git a/packages/kit/src/runtime/client/client.js b/packages/kit/src/runtime/client/client.js index d10b53952e6e..062b28430996 100644 --- a/packages/kit/src/runtime/client/client.js +++ b/packages/kit/src/runtime/client/client.js @@ -50,6 +50,7 @@ import { noop_span } from '../telemetry/noop.js'; import { read_ndjson } from './ndjson.js'; import Root from '../components/root.svelte'; import { Props, RenderNode } from '../props.svelte.js'; +import { init_transport } from '#app/internal/transport'; /** * @typedef {{ @@ -487,6 +488,8 @@ async function _start(_app, _target, data) { app = _app; + init_transport(app.hooks.transport ?? {}); + await _app.hooks.init?.(); routes = __SVELTEKIT_CLIENT_ROUTING__ ? parse(_app) : []; diff --git a/packages/kit/src/runtime/client/remote-functions/command.svelte.js b/packages/kit/src/runtime/client/remote-functions/command.svelte.js index a2bdc81a3cd6..0284f577ed1f 100644 --- a/packages/kit/src/runtime/client/remote-functions/command.svelte.js +++ b/packages/kit/src/runtime/client/remote-functions/command.svelte.js @@ -1,6 +1,5 @@ /** @import { RemoteCommand, RemoteQueryUpdate } from '@sveltejs/kit' */ import { app_dir, base } from '$app/paths/internal/client'; -import { app } from '../client.js'; import { stringify_command_arg } from '../../shared.js'; import { get_remote_request_headers, categorize_updates, remote_request } from './shared.svelte.js'; @@ -48,7 +47,7 @@ export function command(id) { const response = await remote_request(`${base}/${app_dir}/remote/${id}`, { method: 'POST', body: JSON.stringify({ - payload: await stringify_command_arg(arg, app.hooks.transport), + payload: await stringify_command_arg(arg), refreshes: Array.from(refreshes ?? []) }), headers diff --git a/packages/kit/src/runtime/client/remote-functions/instance.unhandled.svelte.spec.js b/packages/kit/src/runtime/client/remote-functions/instance.unhandled.svelte.spec.js index 9092fa5ef8e9..1f62f8ca7461 100644 --- a/packages/kit/src/runtime/client/remote-functions/instance.unhandled.svelte.spec.js +++ b/packages/kit/src/runtime/client/remote-functions/instance.unhandled.svelte.spec.js @@ -10,7 +10,6 @@ import { HttpError } from '@sveltejs/kit/internal'; vi.mock(new URL('../client.js', import.meta.url).pathname, async () => { const { HttpError } = await import('@sveltejs/kit/internal'); return { - app: { hooks: { transport: {} }, decoders: {}, encoders: {} }, query_map: new Map(), query_responses: {}, live_query_map: new Map(), diff --git a/packages/kit/src/runtime/client/remote-functions/prerender.svelte.js b/packages/kit/src/runtime/client/remote-functions/prerender.svelte.js index 79156af947d5..dbbd6aa14ea7 100644 --- a/packages/kit/src/runtime/client/remote-functions/prerender.svelte.js +++ b/packages/kit/src/runtime/client/remote-functions/prerender.svelte.js @@ -57,7 +57,7 @@ function put(url, encoded) { */ export function prerender(id) { return (arg) => { - const payload = stringify_remote_arg(arg, app.hooks.transport); + const payload = stringify_remote_arg(arg); const cache_key = create_remote_key(id, payload); let resource = prerender_resources.get(cache_key)?.deref(); diff --git a/packages/kit/src/runtime/client/remote-functions/query-live/proxy.js b/packages/kit/src/runtime/client/remote-functions/query-live/proxy.js index 66a3a216b220..ebe283cbb279 100644 --- a/packages/kit/src/runtime/client/remote-functions/query-live/proxy.js +++ b/packages/kit/src/runtime/client/remote-functions/query-live/proxy.js @@ -1,4 +1,4 @@ -import { app, live_query_map } from '../../client.js'; +import { live_query_map } from '../../client.js'; import { pin_in_effect, pin_while_resolving, QUERY_RESOURCE_KEY } from '../shared.svelte.js'; import { create_remote_key, stringify_remote_arg } from '../../../shared.js'; import { LiveQuery } from './instance.svelte.js'; @@ -20,7 +20,7 @@ export class LiveQueryProxy { */ constructor(id, arg) { this.#id = id; - this.#payload = stringify_remote_arg(arg, app.hooks.transport); + this.#payload = stringify_remote_arg(arg); this.#key = create_remote_key(id, this.#payload); Object.defineProperty(this, QUERY_RESOURCE_KEY, { value: this.#key }); diff --git a/packages/kit/src/runtime/client/remote-functions/query-live/proxy.svelte.spec.js b/packages/kit/src/runtime/client/remote-functions/query-live/proxy.svelte.spec.js index 66e2f8f7d740..f082e22392b0 100644 --- a/packages/kit/src/runtime/client/remote-functions/query-live/proxy.svelte.spec.js +++ b/packages/kit/src/runtime/client/remote-functions/query-live/proxy.svelte.spec.js @@ -6,7 +6,6 @@ import { tick } from 'svelte'; // virtual module that only exists during a real SvelteKit build. We only need // the cache `Map`s and a stub `app` for the proxy's interaction with the cache. vi.mock(new URL('../../client.js', import.meta.url).pathname, () => ({ - app: { hooks: { transport: {} }, decoders: {} }, query_map: new Map(), query_responses: {}, live_query_map: new Map(), diff --git a/packages/kit/src/runtime/client/remote-functions/query/proxy.js b/packages/kit/src/runtime/client/remote-functions/query/proxy.js index 923b70e6dedd..178077e114cc 100644 --- a/packages/kit/src/runtime/client/remote-functions/query/proxy.js +++ b/packages/kit/src/runtime/client/remote-functions/query/proxy.js @@ -1,4 +1,4 @@ -import { app, query_map } from '../../client.js'; +import { query_map } from '../../client.js'; import { pin_in_effect, pin_while_resolving, @@ -29,7 +29,7 @@ export class QueryProxy { */ constructor(id, arg, fn) { this.#id = id; - this.#payload = stringify_remote_arg(arg, app.hooks.transport); + this.#payload = stringify_remote_arg(arg); this.#key = create_remote_key(id, this.#payload); Object.defineProperty(this, QUERY_RESOURCE_KEY, { value: this.#key }); this.#fn = fn; diff --git a/packages/kit/src/runtime/client/remote-functions/query/proxy.svelte.spec.js b/packages/kit/src/runtime/client/remote-functions/query/proxy.svelte.spec.js index 2cfdb5ae1a6d..3d6c3bdbb547 100644 --- a/packages/kit/src/runtime/client/remote-functions/query/proxy.svelte.spec.js +++ b/packages/kit/src/runtime/client/remote-functions/query/proxy.svelte.spec.js @@ -6,7 +6,6 @@ import { tick } from 'svelte'; // virtual module that only exists during a real SvelteKit build. We only need // the cache `Map`s and a stub `app` for the proxy's interaction with the cache. vi.mock(new URL('../../client.js', import.meta.url).pathname, () => ({ - app: { hooks: { transport: {} }, decoders: {} }, query_map: new Map(), query_responses: {}, live_query_map: new Map(), diff --git a/packages/kit/src/runtime/client/remote-functions/shared.transport.spec.js b/packages/kit/src/runtime/client/remote-functions/shared.transport.spec.js index f79e03bf08aa..0f6ad4a54248 100644 --- a/packages/kit/src/runtime/client/remote-functions/shared.transport.spec.js +++ b/packages/kit/src/runtime/client/remote-functions/shared.transport.spec.js @@ -5,7 +5,6 @@ import { describe, expect, test, vi, beforeEach } from 'vitest'; // exists during a real SvelteKit build. We only need stubs for the names that // `shared.svelte.js` imports. vi.mock(new URL('../client.js', import.meta.url).pathname, () => ({ - app: { hooks: { transport: {} }, decoders: {} }, query_map: new Map(), query_responses: {}, live_query_map: new Map(), diff --git a/packages/kit/src/runtime/server/app.js b/packages/kit/src/runtime/server/app.js deleted file mode 100644 index b5788f204f01..000000000000 --- a/packages/kit/src/runtime/server/app.js +++ /dev/null @@ -1,9 +0,0 @@ -/** @type {{ decoders: Record any> }} */ -export let app; - -/** - * @param {{ decoders: Record any> }} value - */ -export function set_app(value) { - app = value; -} diff --git a/packages/kit/src/runtime/server/index.js b/packages/kit/src/runtime/server/index.js index e7d9f54d6eb6..65eea62c9539 100644 --- a/packages/kit/src/runtime/server/index.js +++ b/packages/kit/src/runtime/server/index.js @@ -4,9 +4,9 @@ import { respond } from './respond.js'; import { options, get_hooks } from '__SERVER__/internal.js'; import { set_read_implementation, set_manifest, fix_stack_trace } from './internal.js'; import { set_env } from '__sveltekit/env'; -import { set_app } from './app.js'; import { SvelteKitError } from '@sveltejs/kit/internal'; import { DEV } from 'esm-env'; +import { init_transport } from '#app/internal/transport'; /** @type {Promise} */ let init_promise; @@ -151,15 +151,10 @@ export class Server { console.error('Remote function schema validation failed:', issues); return { message: 'Bad Request', status: 400 }; }), - reroute: module.reroute || noop, - transport: module.transport || {} + reroute: module.reroute || noop }; - set_app({ - decoders: module.transport - ? Object.fromEntries(Object.entries(module.transport).map(([k, v]) => [k, v.decode])) - : {} - }); + init_transport(module.transport ?? {}); if (module.init) { await module.init(); @@ -175,13 +170,8 @@ export class Server { handleValidationError: () => { return { message: 'Bad Request' }; }, - reroute: noop, - transport: {} + reroute: noop }; - - set_app({ - decoders: {} - }); } else { throw e; } diff --git a/packages/kit/src/runtime/server/page/actions.js b/packages/kit/src/runtime/server/page/actions.js index 315fff550560..df1c6f81fbab 100644 --- a/packages/kit/src/runtime/server/page/actions.js +++ b/packages/kit/src/runtime/server/page/actions.js @@ -1,15 +1,15 @@ /** @import { RequestEvent, ActionResult, Actions } from '@sveltejs/kit' */ -/** @import { SSROptions, SSRNode, ServerNode, ServerHooks } from 'types' */ -import * as devalue from 'devalue'; +/** @import { SSROptions, SSRNode, ServerNode } from 'types' */ import { DEV } from 'esm-env'; import { json } from '@sveltejs/kit'; import { HttpError, Redirect, ActionFailure, SvelteKitError } from '@sveltejs/kit/internal'; import { with_request_store, merge_tracing } from '@sveltejs/kit/internal/server'; import { normalize_error } from '../../../utils/error.js'; import { is_form_content_type, negotiate } from '../../../utils/http.js'; -import { create_replacer, with_version_header } from '../utils.js'; +import { with_version_header } from '../utils.js'; import { handle_error_and_jsonify } from '../errors.js'; import { record_span } from '../../telemetry/record_span.js'; +import { stringify, uneval } from '#app/internal/transport'; /** @param {RequestEvent} event */ export function is_action_json_request(event) { @@ -72,11 +72,7 @@ export async function handle_action_json_request(event, event_state, options, se // @ts-expect-error we assign a string to what is supposed to be an object. That's ok // because we don't use the object outside, and this way we have better code navigation // through knowing where the related interface is used. - data: stringify_action_response( - data.data, - /** @type {string} */ (event.route.id), - options.hooks.transport - ) + data: try_serialize(data.data, stringify, /** @type {string} */ (event.route.id)) }, { status: data.status @@ -87,11 +83,7 @@ export async function handle_action_json_request(event, event_state, options, se type: 'success', status: 200, // @ts-expect-error see comment above - data: stringify_action_response( - data, - /** @type {string} */ (event.route.id), - options.hooks.transport - ) + data: try_serialize(data, stringify, /** @type {string} */ (event.route.id)) }); } else { // no data returned — use 204 No Content (without a body, per the spec) @@ -314,26 +306,9 @@ function validate_action_return(data) { * Try to `devalue.uneval` the data object, and if it fails, return a proper Error with context * @param {any} data * @param {string} route_id - * @param {ServerHooks['transport']} transport */ -export function uneval_action_response(data, route_id, transport) { - const replacer = create_replacer(transport); - - return try_serialize(data, (value) => devalue.uneval(value, replacer), route_id); -} - -/** - * Try to `devalue.stringify` the data object, and if it fails, return a proper Error with context - * @param {any} data - * @param {string} route_id - * @param {ServerHooks['transport']} transport - */ -function stringify_action_response(data, route_id, transport) { - const encoders = Object.fromEntries( - Object.entries(transport).map(([key, value]) => [key, value.encode]) - ); - - return try_serialize(data, (value) => devalue.stringify(value, encoders), route_id); +export function uneval_action_response(data, route_id) { + return try_serialize(data, uneval, route_id); } /** diff --git a/packages/kit/src/runtime/server/page/data_serializer.js b/packages/kit/src/runtime/server/page/data_serializer.js index 8c4dab90185d..21c16d8ef562 100644 --- a/packages/kit/src/runtime/server/page/data_serializer.js +++ b/packages/kit/src/runtime/server/page/data_serializer.js @@ -3,6 +3,7 @@ import { compact } from '../../../utils/array.js'; import { create_async_iterator } from '../../../utils/streaming.js'; import { clarify_devalue_error, get_global_name, serialize_uses } from '../utils.js'; import { handle_error_and_jsonify } from '../errors.js'; +import { encoders } from '#app/internal/transport'; /** * If the serialized data contains promises, `chunks` will be an @@ -64,8 +65,8 @@ export function server_data_serializer(event, event_state, options) { return `${global}.defer(${id})`; } else { - for (const key in options.hooks.transport) { - const encoded = options.hooks.transport[key].encode(thing); + for (const key in encoders) { + const encoded = encoders[key](thing); if (encoded) { return `app.decode('${key}', ${devalue.uneval(encoded, replacer)})`; } @@ -135,9 +136,7 @@ export function server_data_serializer_json(event, event_state, options) { const iterator = create_async_iterator(); const reducers = { - ...Object.fromEntries( - Object.entries(options.hooks.transport).map(([key, value]) => [key, value.encode]) - ), + ...encoders, /** @param {any} thing */ Promise: (thing) => { if (typeof thing?.then !== 'function') { diff --git a/packages/kit/src/runtime/server/page/render.js b/packages/kit/src/runtime/server/page/render.js index de1eaf54ecb6..ed01b8611b76 100644 --- a/packages/kit/src/runtime/server/page/render.js +++ b/packages/kit/src/runtime/server/page/render.js @@ -18,13 +18,14 @@ import { } from '../../pathname.js'; import { try_get_request_store, with_request_store } from '@sveltejs/kit/internal/server'; import { text_encoder } from '../../utils.js'; -import { count_non_ssi_comments, create_replacer, get_global_name } from '../utils.js'; +import { count_non_ssi_comments, get_global_name } from '../utils.js'; import { handle_error_and_jsonify } from '../errors.js'; import * as env from '__sveltekit/env'; import { collect_remote_data } from '../remote-functions.js'; import Root from '../../components/root.svelte'; import { render } from 'svelte/server'; import { Props, RenderNode } from '../../props.svelte.js'; +import { has_custom_transporters, uneval } from '#app/internal/transport'; // TODO rename this function/module @@ -431,7 +432,7 @@ export async function render_response({ let app_declaration = ''; - if (Object.keys(options.hooks.transport).length > 0) { + if (has_custom_transporters) { if (client.inline) { app_declaration = `const app = ${global}.app.app;`; } else if (client.app) { @@ -482,8 +483,7 @@ export async function render_response({ if (form_value) { serialized.form = uneval_action_response( form_value, - /** @type {string} */ (event.route.id), - options.hooks.transport + /** @type {string} */ (event.route.id) ); } @@ -522,7 +522,7 @@ export async function render_response({ const serialized_data = Object.keys(remote_data).length > 0 - ? `${global}.data = ${devalue.uneval(remote_data, create_replacer(options.hooks.transport))};\n\n\t\t\t\t\t\t` + ? `${global}.data = ${uneval(remote_data)};\n\n\t\t\t\t\t\t` : ''; // `client.app` is a proxy for `bundleStrategy === 'split'` diff --git a/packages/kit/src/runtime/server/remote-functions.js b/packages/kit/src/runtime/server/remote-functions.js index 08e0f988aaa5..2e89bea08ffa 100644 --- a/packages/kit/src/runtime/server/remote-functions.js +++ b/packages/kit/src/runtime/server/remote-functions.js @@ -6,7 +6,8 @@ import { Redirect, SvelteKitError } from '@sveltejs/kit/internal'; import { with_request_store, merge_tracing } from '@sveltejs/kit/internal/server'; import { app_dir, base } from '$app/paths/internal/server'; import { is_form_content_type } from '../../utils/http.js'; -import { create_remote_key, parse_remote_arg, split_remote_key, stringify } from '../shared.js'; +import { create_remote_key, parse_remote_arg, split_remote_key } from '../shared.js'; +import { stringify } from '#app/internal/transport'; import { handle_error_and_jsonify } from './errors.js'; import { normalize_error } from '../../utils/error.js'; import { check_incorrect_fail_use } from './page/actions.js'; @@ -59,7 +60,6 @@ async function handle_remote_call_internal(event, state, options, manifest, id) /** @type {RemoteInternals} */ const internals = fn.__; - const transport = options.hooks.transport; event.tracing.current.setAttributes({ 'sveltekit.remote.call.type': internals.type, @@ -87,7 +87,7 @@ async function handle_remote_call_internal(event, state, options, manifest, id) new URL(event.request.url).searchParams.get('payload') ); - const generator = internals.run(event, state, parse_remote_arg(payload, transport)); + const generator = internals.run(event, state, parse_remote_arg(payload)); const encoder = new TextEncoder(); @@ -156,7 +156,7 @@ async function handle_remote_call_internal(event, state, options, manifest, id) } // only send changed data - if (result !== (result = stringify(value, transport))) { + if (result !== (result = stringify(value))) { send(controller, { type: 'result', result @@ -214,9 +214,7 @@ async function handle_remote_call_internal(event, state, options, manifest, id) /** @type {{ payloads: string[] }} */ const { payloads } = await event.request.json(); - const args = await Promise.all( - payloads.map((payload) => parse_remote_arg(payload, transport)) - ); + const args = await Promise.all(payloads.map((payload) => parse_remote_arg(payload))); data._ = await with_request_store({ event, state }, () => internals.run(args, options)); @@ -266,7 +264,7 @@ async function handle_remote_call_internal(event, state, options, manifest, id) return json( /** @type {RemoteFunctionResponse} */ ({ type: 'result', - data: stringify(data, transport) + data: stringify(data) }), { headers } ); @@ -279,7 +277,7 @@ async function handle_remote_call_internal(event, state, options, manifest, id) /** @type {{ payload: string, refreshes?: string[] }} */ const { payload, refreshes } = await event.request.json(); state.remote.requested = create_requested_map(refreshes); - const arg = parse_remote_arg(payload, transport); + const arg = parse_remote_arg(payload); data._ = await with_request_store( { event, state: { ...state, is_in_remote_form_or_command: true } }, @@ -291,7 +289,7 @@ async function handle_remote_call_internal(event, state, options, manifest, id) case 'prerender': { data._ = await with_request_store({ event, state }, () => - fn(parse_remote_arg(additional_args, transport)) + fn(parse_remote_arg(additional_args)) ); break; @@ -303,9 +301,7 @@ async function handle_remote_call_internal(event, state, options, manifest, id) new URL(event.request.url).searchParams.get('payload') ); - data._ = await with_request_store({ event, state }, () => - fn(parse_remote_arg(payload, transport)) - ); + data._ = await with_request_store({ event, state }, () => fn(parse_remote_arg(payload))); break; } @@ -316,7 +312,7 @@ async function handle_remote_call_internal(event, state, options, manifest, id) return json( /** @type {RemoteFunctionResponse} */ ({ type: 'result', - data: stringify(data, transport) + data: stringify(data) }), { headers } ); @@ -327,7 +323,7 @@ async function handle_remote_call_internal(event, state, options, manifest, id) return json( /** @type {RemoteFunctionResponse} */ ({ type: 'result', - data: stringify(data, transport) + data: stringify(data) }), { headers } ); diff --git a/packages/kit/src/runtime/server/state.js b/packages/kit/src/runtime/server/state.js index 8ad2773c8ab4..c80bfb68cc48 100644 --- a/packages/kit/src/runtime/server/state.js +++ b/packages/kit/src/runtime/server/state.js @@ -10,7 +10,6 @@ export function create_request_state(state, hooks) { // Request state is rebuilt fresh, resetting remote caches and context flags. return { prerendering: state.prerendering, - transport: hooks.transport, handleValidationError: hooks.handleValidationError, tracing: { record_span diff --git a/packages/kit/src/runtime/server/utils.js b/packages/kit/src/runtime/server/utils.js index 75351e22bd59..990decb06821 100644 --- a/packages/kit/src/runtime/server/utils.js +++ b/packages/kit/src/runtime/server/utils.js @@ -1,5 +1,3 @@ -/** @import { ServerHooks } from 'types' */ -import * as devalue from 'devalue'; import { text } from '@sveltejs/kit'; import { ENDPOINT_METHODS } from '../../constants.js'; @@ -139,21 +137,3 @@ export function get_node_type(node_id) { export function count_non_ssi_comments(str) { return (str.match(/ + + + + + +
+ + +
+ +
+ +
+ +
+ +
+ + +
+ + +
+ +
+ + +
+ +
+ +
+ +
+ +
+ + +
+ + +
+ + +
+ async ({ update }) => + update({ navigate: false })} +> + + +
+ +
+ async ({ update }) => + update({ navigate: false })} +> + +
diff --git a/packages/kit/test/apps/basics/src/routes/actions/update-form/+page.svelte b/packages/kit/test/apps/basics/src/routes/actions/update-form/+page.svelte index 3cee4d352d6f..e5978b462e4f 100644 --- a/packages/kit/test/apps/basics/src/routes/actions/update-form/+page.svelte +++ b/packages/kit/test/apps/basics/src/routes/actions/update-form/+page.svelte @@ -7,7 +7,12 @@ /** @param {'success' | 'failure'} type */ function update(type) { - applyAction({ type, status: 200, data: { count: count++ } }); + applyAction({ + type, + status: 200, + data: { count: count++ }, + location: '/actions/enhance' + }); } function redirect() { applyAction({ type: 'redirect', status: 303, location: '/' }); diff --git a/packages/kit/test/apps/basics/test/client.test.js b/packages/kit/test/apps/basics/test/client.test.js index 9df1a0d64f99..684efff3ad5f 100644 --- a/packages/kit/test/apps/basics/test/client.test.js +++ b/packages/kit/test/apps/basics/test/client.test.js @@ -1462,6 +1462,140 @@ test.describe('Actions', () => { await page.evaluate('window.svelte_tick()'); await expect(pre).toHaveText('prop: 1, state: 1'); }); + + test('cross-page action navigation is client-side', async ({ page }) => { + await page.goto('/actions/cross-page/source'); + await page.evaluate(() => (window.nav_marker = true)); + + await page.locator('button.submit-success').click(); + + await expect(page.locator('pre.destination-form')).toHaveText( + JSON.stringify({ source: 'destination', username: 'paolo' }) + ); + expect(await page.evaluate(() => window.nav_marker)).toBe(true); + }); + + test('same-page action drops query params omitted from the action', async ({ page }) => { + await page.goto('/actions/cross-page/same-page?page=2'); + await page.locator('button.submit-relative').click(); + + await expect(page.locator('pre.form-json')).toHaveText( + JSON.stringify({ where: '/actions/cross-page/same-page' }) + ); + + const url = new URL(page.url()); + expect(url.pathname).toBe('/actions/cross-page/same-page'); + expect(url.search).toBe(''); + }); + + test('semantically identical action query refreshes without navigating', async ({ page }) => { + await page.goto('/actions/cross-page/same-page?a=1&b=2'); + const loaded_at = await page.locator('pre.loaded-at').innerText(); + await page.evaluate(() => (window.nav_marker = true)); + + await page.locator('button.submit-reordered').click(); + + await expect(page.locator('pre.form-json')).toHaveText( + JSON.stringify({ where: '/actions/cross-page/same-page' }) + ); + await expect(page.locator('pre.loaded-at')).not.toHaveText(loaded_at); + expect(await page.evaluate(() => window.nav_marker)).toBe(true); + expect(new URL(page.url()).search).toBe('?a=1&b=2'); + }); + + test('failures do not refresh by default but can opt in', async ({ page }) => { + await page.goto('/actions/cross-page/same-page'); + let loaded_at = await page.locator('pre.loaded-at').innerText(); + + await page.locator('button.submit-failure').click(); + await expect(page.locator('pre.form-json')).toHaveText(JSON.stringify({ failed: true })); + await expect(page.locator('pre.loaded-at')).toHaveText(loaded_at); + + loaded_at = await page.locator('pre.loaded-at').innerText(); + await page.locator('button.submit-failure-refresh').click(); + await expect(page.locator('pre.form-json')).toHaveText(JSON.stringify({ failed: true })); + await expect(page.locator('pre.loaded-at')).not.toHaveText(loaded_at); + }); + + test('cross-page refresh defaults depend on the result type', async ({ page }) => { + await page.goto('/actions/cross-page/source'); + let layout_loaded_at = await page.locator('pre.layout-loaded-at').innerText(); + + await page.locator('button.submit-failure').click(); + await expect(page.locator('pre.destination-form')).toHaveText( + JSON.stringify({ problem: 'invalid', username: 'paolo' }) + ); + await expect(page.locator('pre.layout-loaded-at')).toHaveText(layout_loaded_at); + + await page.goto('/actions/cross-page/source'); + layout_loaded_at = await page.locator('pre.layout-loaded-at').innerText(); + await page.locator('button.submit-success').click(); + await expect(page.locator('pre.layout-loaded-at')).not.toHaveText(layout_loaded_at); + }); + + test('cross-page action navigation strips only the named-action param', async ({ page }) => { + await page.goto('/actions/cross-page/source'); + await page.locator('button.submit-extra-params').click(); + + await expect(page.locator('pre.destination-form')).toHaveText( + JSON.stringify({ source: 'destination', username: 'paolo' }) + ); + + const url = new URL(page.url()); + expect(url.pathname).toBe('/actions/cross-page/destination'); + expect(url.searchParams.get('redirectTo')).toBe('/dashboard'); + expect([...url.searchParams.keys()].some((key) => key.startsWith('/'))).toBe(false); + + // the destination's `load` sees the stripped URL + await expect(page.locator('pre.load-search')).toHaveText('?redirectTo=%2Fdashboard'); + }); + + test('cross-page action navigation pushes a history entry', async ({ page }) => { + await page.goto('/actions/cross-page/source'); + await page.locator('button.submit-success').click(); + + await expect(page.locator('pre.destination-form')).toHaveText( + JSON.stringify({ source: 'destination', username: 'paolo' }) + ); + + await page.goBack(); + await expect(page.locator('h1.source')).toHaveText('source'); + expect(new URL(page.url()).pathname).toBe('/actions/cross-page/source'); + + // form data is ephemeral — going forward again renders the destination without it + await page.goForward(); + await expect(page.locator('pre.destination-form')).toHaveText(JSON.stringify(null)); + }); + + test('update navigate option applies the result to the current page', async ({ page }) => { + await page.goto('/actions/cross-page/source'); + await page.locator('button.submit-stay').click(); + + await expect(page.locator('pre.source-form')).toHaveText( + JSON.stringify({ problem: 'invalid', username: 'paolo' }) + ); + expect(new URL(page.url()).pathname).toBe('/actions/cross-page/source'); + }); + + test('update navigate option does not suppress redirects', async ({ page }) => { + await page.goto('/actions/cross-page/source'); + await page.locator('button.submit-redirect-stay').click(); + + await expect(page.locator('h1.redirected')).toHaveText('redirected'); + expect(new URL(page.url()).pathname).toBe('/actions/cross-page/redirected'); + }); + + test('update({ refreshAll: false }) still navigates to the cross-page action', async ({ + page + }) => { + await page.goto('/actions/cross-page/refreshall-false'); + await page.locator('button.submit-success').click(); + + await expect(page.locator('pre.destination-form')).toHaveText( + JSON.stringify({ source: 'destination', username: 'paolo' }) + ); + expect(new URL(page.url()).pathname).toBe('/actions/cross-page/destination'); + }); }); test.describe('Assets', () => { diff --git a/packages/kit/test/apps/basics/test/server.test.js b/packages/kit/test/apps/basics/test/server.test.js index 1eef97fc5bf9..752db7dfa6ec 100644 --- a/packages/kit/test/apps/basics/test/server.test.js +++ b/packages/kit/test/apps/basics/test/server.test.js @@ -648,6 +648,7 @@ test.describe('Errors', () => { expect(res_json?.status()).toBe(405); expect(await res_json.json()).toEqual({ type: 'error', + location: '/errors/missing-actions', error: { message: process.env.DEV ? 'POST method not allowed. No form actions exist for the page at /errors/missing-actions (405 Method Not Allowed)' @@ -874,8 +875,33 @@ test.describe('Shadowed pages', () => { } }); - expect(response.status()).toBe(204); - expect(await response.text()).toBe(''); + expect(response.status()).toBe(200); + expect(await response.json()).toEqual({ + type: 'success', + status: 204, + location: '/shadowed/simple/post' + }); + }); + + test('action response includes the stripped landing location', async ({ baseURL, request }) => { + const response = await request.post( + '/actions/cross-page/destination?redirectTo=%2Fdashboard&/failure', + { + form: { username: 'paolo' }, + headers: { + accept: 'application/json', + origin: new URL(baseURL).origin + } + } + ); + + expect(response.status()).toBe(400); + expect(await response.json()).toEqual({ + type: 'failure', + status: 400, + location: '/actions/cross-page/destination?redirectTo=%2Fdashboard', + data: '[{"problem":1,"username":2},"invalid","paolo"]' + }); }); test('Action fail() returns matching HTTP status code', async ({ baseURL, request }) => { diff --git a/packages/kit/test/apps/basics/test/test.js b/packages/kit/test/apps/basics/test/test.js index 92f32cec6a99..6a781fe8cc40 100644 --- a/packages/kit/test/apps/basics/test/test.js +++ b/packages/kit/test/apps/basics/test/test.js @@ -1474,6 +1474,75 @@ test.describe('Actions', () => { expect(response.status()).toBe(404); }); + test('cross-page action success navigates to action page', async ({ + page, + javaScriptEnabled + }) => { + await page.goto('/actions/cross-page/source'); + + await page + .locator(javaScriptEnabled ? 'button.submit-success' : 'button.native-success') + .click(); + + await expect(page.locator('pre.destination-form')).toHaveText( + JSON.stringify({ source: 'destination', username: 'paolo' }) + ); + await expect(page.locator('span.status')).toHaveText('200'); + + const url = new URL(page.url()); + expect(url.pathname).toBe('/actions/cross-page/destination'); + // enhanced submissions strip the `?/name` param; native ones can't + expect(url.search).toBe(javaScriptEnabled ? '' : '?/success'); + }); + + test('cross-page action failure navigates with failure data and status', async ({ + page, + javaScriptEnabled + }) => { + await page.goto('/actions/cross-page/source'); + + await page + .locator(javaScriptEnabled ? 'button.submit-failure' : 'button.native-failure') + .click(); + + await expect(page.locator('pre.destination-form')).toHaveText( + JSON.stringify({ problem: 'invalid', username: 'paolo' }) + ); + await expect(page.locator('span.status')).toHaveText('400'); + + const url = new URL(page.url()); + expect(url.pathname).toBe('/actions/cross-page/destination'); + expect(url.search).toBe(javaScriptEnabled ? '' : '?/failure'); + }); + + test('cross-page action redirect is followed', async ({ page, javaScriptEnabled }) => { + await page.goto('/actions/cross-page/source'); + + await page + .locator(javaScriptEnabled ? 'button.submit-redirect' : 'button.native-redirect') + .click(); + + await expect(page.locator('h1.redirected')).toHaveText('redirected'); + expect(new URL(page.url()).pathname).toBe('/actions/cross-page/redirected'); + }); + + test('cross-page action error renders the destination error boundary', async ({ + page, + javaScriptEnabled + }) => { + await page.goto('/actions/cross-page/source'); + + await page.locator(javaScriptEnabled ? 'button.submit-error' : 'button.native-error').click(); + + await expect(page.locator('h1.destination-error')).toHaveText( + 'destination error: cross-page action error' + ); + + const url = new URL(page.url()); + expect(url.pathname).toBe('/actions/cross-page/destination'); + expect(url.search).toBe(javaScriptEnabled ? '?throw-in-load=' : '?throw-in-load&/error'); + }); + for (const name of ['toString', 'constructor', '__proto__', 'hasOwnProperty']) { test(`submitting to a form action named '${name}' (an Object.prototype member) returns http status code 404`, async ({ baseURL, diff --git a/packages/kit/types/index.d.ts b/packages/kit/types/index.d.ts index e34db8989067..f98a657f4e57 100644 --- a/packages/kit/types/index.d.ts +++ b/packages/kit/types/index.d.ts @@ -1898,15 +1898,20 @@ declare module '@sveltejs/kit' { * }; * }} * ``` + * + * Success and failure results carry the root-relative `pathname + search` of the action URL, with + * the `?/actionName` parameter removed. Redirect results carry the redirect target. Server-generated + * error results also carry the action location, while client-generated errors such as network + * failures do not. `update` uses this location to emulate native form navigation. */ export type ActionResult< Success extends Record | undefined = Record, Failure extends Record | undefined = Record > = - | { type: 'success'; status: number; data?: Success } - | { type: 'failure'; status: number; data?: Failure } + | { type: 'success'; status: number; data?: Success; location: string } + | { type: 'failure'; status: number; data?: Failure; location: string } | { type: 'redirect'; status: number; location: string } - | { type: 'error'; status?: number; error: App.Error }; + | { type: 'error'; status?: number; error: App.Error; location?: string }; /** * The object returned by the [`error`](https://svelte.dev/docs/kit/@sveltejs-kit#error) function. @@ -1947,10 +1952,15 @@ declare module '@sveltejs/kit' { result: ActionResult; /** * Call this to get the default behavior of a form submission response. - * @param options Set `reset: false` if you don't want the `
` values to be reset after a successful submission. - * @param invalidateAll Set `invalidateAll: false` if you don't want the action to call `invalidateAll` after submission. + * @param options Set `reset: false` if you don't want the `` values to be reset after a successful submission. `refreshAll` defaults to `true` for successful results and `false` for failures. When the submission navigates, setting it to `false` still runs the destination's `load` functions but may reuse shared layout data. Set `navigate: false` to apply non-redirect results to the current page instead of navigating to `result.location`. Redirects are always followed. */ - update: (options?: { reset?: boolean; invalidateAll?: boolean }) => Promise; + update: (options?: { + reset?: boolean; + refreshAll?: boolean; + navigate?: boolean; + /** @deprecated Use `refreshAll` instead. */ + invalidateAll?: boolean; + }) => Promise; }) => MaybePromise) >; @@ -3112,17 +3122,18 @@ declare module '$app/forms' { * If a function is returned, that function is called with the response from the server. * If nothing is returned, the fallback will be used. * - * If this function or its return value isn't set, it - * - falls back to updating the `form` prop with the returned data if the action is on the same page as the form - * - updates `page.status` - * - resets the `` element and invalidates all data in case of successful submission with no redirect response + * If this function or its return value isn't set, it emulates the browser-native behaviour, just without the full-page reload. It + * - resets the `` element and refreshes all data in case of a successful submission with no redirect response + * - updates the `form` prop, `page.form` and `page.status` if the action is on the same page as the form + * - navigates to the page the submission lands on — populating that page's `form` prop and `page.status` — on success and failure if that isn't the current page, just as a native form submission would, but with the `?/actionName` param stripped from the destination URL * - redirects in case of a redirect response - * - redirects to the nearest error page in case of an unexpected error + * - renders the nearest error page in case of an unexpected error — the one nearest the action's route, if the action is on a different page * * If you provide a custom function with a callback and want to use the default behavior, invoke `update` in your callback. * It accepts an options object * - `reset: false` if you don't want the `` values to be reset after a successful submission - * - `invalidateAll: false` if you don't want the action to call `invalidateAll` after submission + * - `refreshAll` to control whether all data is refreshed after submission; it defaults to `true` for successes and `false` for failures + * - `navigate: false` to apply non-redirect results to the current page rather than navigating to `result.location`; redirects are always followed * @param form_element The form element * @param submit Submit callback */ @@ -3130,8 +3141,9 @@ declare module '$app/forms' { destroy(): void; }; /** - * This action updates the `form` property of the current page with the given data and updates `page.status`. - * In case of an error, it redirects to the nearest error page. + * Updates the `form` property of the current page with the given data and updates `page.status`. + * In case of an error, it renders the nearest error page. In case of a redirect, it navigates to + * the redirect location. * */ export function applyAction | undefined, Failure extends Record | undefined>(result: import("@sveltejs/kit").ActionResult): Promise; From a343c23781f476fc709cb9e1b61d634b3fc7dc68 Mon Sep 17 00:00:00 2001 From: Nic Polumeyv Date: Fri, 7 Aug 2026 20:19:51 -0400 Subject: [PATCH 457/545] chore: import record_span directly instead of passing it through state (#16675) Follow-up to https://github.com/sveltejs/kit/pull/16605#discussion_r3731480016, using the #16658 treatment so it works from `sequence`. On top of #16605. --- packages/kit/src/exports/hooks/sequence.js | 3 +- .../kit/src/exports/hooks/sequence.spec.js | 7 +- .../kit/src/exports/internal/server/index.js | 2 + .../server/telemetry.disabled.spec.js | 12 +++ .../server/telemetry.enabled.spec.js} | 34 ++++--- .../src/exports/internal/server/telemetry.js | 95 +++++++++++++++++++ .../server/telemetry.missing.spec.js} | 14 +-- packages/kit/src/runtime/server/index.js | 3 + .../kit/src/runtime/server/page/actions.js | 3 +- .../kit/src/runtime/server/page/load_data.js | 3 +- .../src/runtime/server/remote-functions.js | 3 +- packages/kit/src/runtime/server/respond.js | 9 +- packages/kit/src/runtime/server/state.js | 4 - .../runtime/telemetry/otel.disabled.spec.js | 10 -- .../runtime/telemetry/otel.enabled.spec.js | 10 -- packages/kit/src/runtime/telemetry/otel.js | 21 ---- .../telemetry/record_span.disabled.spec.js | 15 --- .../kit/src/runtime/telemetry/record_span.js | 65 ------------- packages/kit/src/types/internal.d.ts | 3 - 19 files changed, 144 insertions(+), 172 deletions(-) create mode 100644 packages/kit/src/exports/internal/server/telemetry.disabled.spec.js rename packages/kit/src/{runtime/telemetry/record_span.enabled.spec.js => exports/internal/server/telemetry.enabled.spec.js} (89%) create mode 100644 packages/kit/src/exports/internal/server/telemetry.js rename packages/kit/src/{runtime/telemetry/otel.missing.spec.js => exports/internal/server/telemetry.missing.spec.js} (51%) delete mode 100644 packages/kit/src/runtime/telemetry/otel.disabled.spec.js delete mode 100644 packages/kit/src/runtime/telemetry/otel.enabled.spec.js delete mode 100644 packages/kit/src/runtime/telemetry/otel.js delete mode 100644 packages/kit/src/runtime/telemetry/record_span.disabled.spec.js delete mode 100644 packages/kit/src/runtime/telemetry/record_span.js diff --git a/packages/kit/src/exports/hooks/sequence.js b/packages/kit/src/exports/hooks/sequence.js index 892dc973fbd4..feb4cf99429e 100644 --- a/packages/kit/src/exports/hooks/sequence.js +++ b/packages/kit/src/exports/hooks/sequence.js @@ -2,6 +2,7 @@ import { merge_tracing, get_request_store, + record_span, with_request_store } from '@sveltejs/kit/internal/server'; @@ -95,7 +96,7 @@ export function sequence(...handlers) { function apply_handle(i, event, parent_options) { const handle = handlers[i]; - return state.tracing.record_span({ + return record_span({ name: `sveltekit.handle.sequenced.${handle.name ? handle.name : i}`, attributes: {}, fn: async (current) => { diff --git a/packages/kit/src/exports/hooks/sequence.spec.js b/packages/kit/src/exports/hooks/sequence.spec.js index 7fe3afa49bdc..b9292e13f1fe 100644 --- a/packages/kit/src/exports/hooks/sequence.spec.js +++ b/packages/kit/src/exports/hooks/sequence.spec.js @@ -2,7 +2,6 @@ /** @import { RequestState } from 'types' */ import { assert, expect, test, vi } from 'vitest'; import { sequence } from './sequence.js'; -import { noop_span } from '../../runtime/telemetry/noop.js'; const dummy_event = vi.hoisted( () => @@ -19,11 +18,7 @@ vi.mock(import('@sveltejs/kit/internal/server'), async (actualPromise) => { ...actual, get_request_store: () => ({ event: dummy_event, - state: /** @type {RequestState} */ ({ - tracing: { - record_span: ({ fn }) => fn(noop_span) - } - }) + state: /** @type {RequestState} */ (/** @type {unknown} */ ({})) }) }; }); diff --git a/packages/kit/src/exports/internal/server/index.js b/packages/kit/src/exports/internal/server/index.js index 2fe6434ae3fe..a48db594f0db 100644 --- a/packages/kit/src/exports/internal/server/index.js +++ b/packages/kit/src/exports/internal/server/index.js @@ -32,4 +32,6 @@ export { export { init_remote_functions } from './remote-functions.js'; +export { init_tracing, otel, record_span } from './telemetry.js'; + export * from '../shared.js'; diff --git a/packages/kit/src/exports/internal/server/telemetry.disabled.spec.js b/packages/kit/src/exports/internal/server/telemetry.disabled.spec.js new file mode 100644 index 000000000000..ed2b3d83cf3f --- /dev/null +++ b/packages/kit/src/exports/internal/server/telemetry.disabled.spec.js @@ -0,0 +1,12 @@ +import { test, expect, vi } from 'vitest'; +import { otel, record_span } from './telemetry.js'; +import { noop_span } from '../../../runtime/telemetry/noop.js'; + +test('record_span uses the noop span when tracing is not initialized', async () => { + expect(otel).toBeNull(); + + const fn = vi.fn().mockResolvedValue('result'); + const result = await record_span({ name: 'test', attributes: {}, fn }); + expect(result).toBe('result'); + expect(fn).toHaveBeenCalledWith(noop_span); +}); diff --git a/packages/kit/src/runtime/telemetry/record_span.enabled.spec.js b/packages/kit/src/exports/internal/server/telemetry.enabled.spec.js similarity index 89% rename from packages/kit/src/runtime/telemetry/record_span.enabled.spec.js rename to packages/kit/src/exports/internal/server/telemetry.enabled.spec.js index f2e3bd6472f6..c952819fbdbe 100644 --- a/packages/kit/src/runtime/telemetry/record_span.enabled.spec.js +++ b/packages/kit/src/exports/internal/server/telemetry.enabled.spec.js @@ -1,12 +1,8 @@ /** @import { Span, Tracer } from '@opentelemetry/api' */ import { describe, test, expect, vi, beforeEach } from 'vitest'; -import { record_span } from './record_span.js'; +import { init_tracing, otel, record_span } from './telemetry.js'; import { HttpError, Redirect } from '@sveltejs/kit/internal'; -vi.hoisted(() => { - vi.stubGlobal('__SVELTEKIT_SERVER_TRACING_ENABLED__', true); -}); - const { tracer, span } = vi.hoisted(() => { const mock_span = /** @type {Span} */ ( /** @type {unknown} */ ({ @@ -31,24 +27,26 @@ const { tracer, span } = vi.hoisted(() => { return { tracer: mock_tracer, span: mock_span }; }); -vi.mock(import('./otel.js'), async (original) => { - const { otel: unresolved_otel } = await original(); - const otel = await unresolved_otel; - - if (otel === null) { - throw new Error('Problem setting up tests; otel is null'); - } +vi.mock(import('@opentelemetry/api'), async (original) => { + const api = await original(); return { - otel: Promise.resolve({ - tracer, - SpanStatusCode: otel.SpanStatusCode, - propagation: otel.propagation, - context: otel.context - }) + ...api, + trace: /** @type {typeof api.trace} */ ( + /** @type {unknown} */ ({ + ...api.trace, + getTracer: () => tracer + }) + ) }; }); +init_tracing(import('@opentelemetry/api')); + +test('otel is defined when tracing is enabled', () => { + expect(otel).not.toBeNull(); +}); + describe('record_span', () => { beforeEach(() => { vi.resetAllMocks(); diff --git a/packages/kit/src/exports/internal/server/telemetry.js b/packages/kit/src/exports/internal/server/telemetry.js new file mode 100644 index 000000000000..06ecabc82c70 --- /dev/null +++ b/packages/kit/src/exports/internal/server/telemetry.js @@ -0,0 +1,95 @@ +/** @import { Tracer, SpanStatusCode, PropagationAPI, ContextAPI } from '@opentelemetry/api' */ +/** @import { RecordSpan } from 'types' */ +import { HttpError, Redirect } from '../shared.js'; +import { noop_span } from '../../../runtime/telemetry/noop.js'; + +// Import this module by its bare specifier so bundled and external code share its state. + +/** @type {Promise<{ tracer: Tracer, SpanStatusCode: typeof SpanStatusCode, propagation: PropagationAPI, context: ContextAPI }> | null} */ +export let otel = null; + +/** + * The caller passes in `import('@opentelemetry/api')` so the import lives behind + * `__SVELTEKIT_SERVER_TRACING_ENABLED__` in the bundled runtime and is eliminated + * from builds with tracing disabled, where the package may not be installed. + * @param {Promise} api + * @returns {void} + */ +export function init_tracing(api) { + otel ??= api + .then((module) => { + return { + tracer: module.trace.getTracer('sveltekit'), + propagation: module.propagation, + context: module.context, + SpanStatusCode: module.SpanStatusCode + }; + }) + .catch(() => { + throw new Error( + 'Tracing is enabled (see the SvelteKit plugin `tracing.server` option in your vite.config.js), but `@opentelemetry/api` is not available. This error will likely resolve itself when you set up your tracing instrumentation in `instrumentation.server.js`. For more information, see https://svelte.dev/docs/kit/observability#opentelemetry-api' + ); + }); +} + +/** @type {RecordSpan} */ +export async function record_span({ name, attributes, fn }) { + if (otel === null) { + return fn(noop_span); + } + + const { SpanStatusCode, tracer } = await otel; + + return tracer.startActiveSpan(name, { attributes }, async (span) => { + try { + return await fn(span); + } catch (error) { + if (error instanceof HttpError) { + span.setAttributes({ + [`${name}.result.type`]: 'known_error', + [`${name}.result.status`]: error.status, + [`${name}.result.message`]: error.body.message + }); + if (error.status >= 500) { + span.recordException({ + name: 'HttpError', + message: error.body.message + }); + span.setStatus({ + code: SpanStatusCode.ERROR, + message: error.body.message + }); + } + } else if (error instanceof Redirect) { + span.setAttributes({ + [`${name}.result.type`]: 'redirect', + [`${name}.result.status`]: error.status, + [`${name}.result.location`]: error.location + }); + } else if (error instanceof Error) { + span.setAttributes({ + [`${name}.result.type`]: 'unknown_error' + }); + span.recordException({ + name: error.name, + message: error.message, + // conditional so this compiles under consumers' `exactOptionalPropertyTypes` + ...(error.stack !== undefined && { stack: error.stack }) + }); + span.setStatus({ + code: SpanStatusCode.ERROR, + message: error.message + }); + } else { + span.setAttributes({ + [`${name}.result.type`]: 'unknown_error' + }); + span.setStatus({ code: SpanStatusCode.ERROR }); + } + + throw error; + } finally { + span.end(); + } + }); +} diff --git a/packages/kit/src/runtime/telemetry/otel.missing.spec.js b/packages/kit/src/exports/internal/server/telemetry.missing.spec.js similarity index 51% rename from packages/kit/src/runtime/telemetry/otel.missing.spec.js rename to packages/kit/src/exports/internal/server/telemetry.missing.spec.js index ba25c91b9cb7..c5d110cd9c80 100644 --- a/packages/kit/src/runtime/telemetry/otel.missing.spec.js +++ b/packages/kit/src/exports/internal/server/telemetry.missing.spec.js @@ -1,15 +1,9 @@ -import { test, expect, vi } from 'vitest'; +import { test, expect } from 'vitest'; +import { init_tracing, otel } from './telemetry.js'; -vi.hoisted(() => { - vi.stubGlobal('__SVELTEKIT_SERVER_TRACING_ENABLED__', true); -}); - -vi.mock('@opentelemetry/api', () => { - throw new Error('Not available'); -}); +test('otel throws an error when tracing is enabled but @opentelemetry/api is not available', async () => { + init_tracing(Promise.reject(new Error('Not available'))); -test('otel should throw an error when tracing is enabled but @opentelemetry/api is not available', async () => { - const { otel } = await import('./otel.js'); await expect(otel).rejects.toThrow( 'Tracing is enabled (see the SvelteKit plugin `tracing.server` option in your vite.config.js), but `@opentelemetry/api` is not available. This error will likely resolve itself when you set up your tracing instrumentation in `instrumentation.server.js`. For more information, see https://svelte.dev/docs/kit/observability#opentelemetry-api' ); diff --git a/packages/kit/src/runtime/server/index.js b/packages/kit/src/runtime/server/index.js index 25194d077665..218dee43fe1b 100644 --- a/packages/kit/src/runtime/server/index.js +++ b/packages/kit/src/runtime/server/index.js @@ -6,6 +6,7 @@ import { options, get_hooks } from '__SERVER__/internal.js'; import { set_read_implementation, set_manifest, fix_stack_trace } from './internal.js'; import { set_env } from '__sveltekit/env'; import { SvelteKitError } from '@sveltejs/kit/internal'; +import { init_tracing } from '@sveltejs/kit/internal/server'; import { DEV } from 'esm-env'; import { init_transport } from '#app/internal/transport'; @@ -90,6 +91,8 @@ export class Server { // so anything that shouldn't be rerun should be wrapped in an `if` block to make sure it hasn't // been done already. + if (__SVELTEKIT_SERVER_TRACING_ENABLED__) init_tracing(import('@opentelemetry/api')); + // set env, in case it's used in initialisation set_env(env); diff --git a/packages/kit/src/runtime/server/page/actions.js b/packages/kit/src/runtime/server/page/actions.js index 6daeaaf866f2..77252420dd9b 100644 --- a/packages/kit/src/runtime/server/page/actions.js +++ b/packages/kit/src/runtime/server/page/actions.js @@ -3,12 +3,11 @@ import { DEV } from 'esm-env'; import { json } from '@sveltejs/kit'; import { HttpError, Redirect, ActionFailure, SvelteKitError } from '@sveltejs/kit/internal'; -import { with_request_store, merge_tracing } from '@sveltejs/kit/internal/server'; +import { with_request_store, merge_tracing, record_span } from '@sveltejs/kit/internal/server'; import { normalize_error } from '../../../utils/error.js'; import { is_form_content_type, negotiate } from '../../../utils/http.js'; import { with_version_header } from '../utils.js'; import { handle_error_and_jsonify } from '../errors.js'; -import { record_span } from '../../telemetry/record_span.js'; import { stringify, uneval } from '#app/internal/transport'; /** @param {RequestEvent} event */ diff --git a/packages/kit/src/runtime/server/page/load_data.js b/packages/kit/src/runtime/server/page/load_data.js index 89bb35461aa1..07b5cafa5094 100644 --- a/packages/kit/src/runtime/server/page/load_data.js +++ b/packages/kit/src/runtime/server/page/load_data.js @@ -2,8 +2,7 @@ import { DEV } from 'esm-env'; import { noop } from '../../../utils/functions.js'; import { disable_search, make_trackable } from '../../../utils/url.js'; import { validate_depends, validate_load_response } from '../../shared.js'; -import { with_request_store, merge_tracing } from '@sveltejs/kit/internal/server'; -import { record_span } from '../../telemetry/record_span.js'; +import { with_request_store, merge_tracing, record_span } from '@sveltejs/kit/internal/server'; import { base64_encode } from '../../utils.js'; import { NULL_BODY_STATUS } from '../constants.js'; import { get_node_type } from '../utils.js'; diff --git a/packages/kit/src/runtime/server/remote-functions.js b/packages/kit/src/runtime/server/remote-functions.js index d460bc91976f..481798f3f040 100644 --- a/packages/kit/src/runtime/server/remote-functions.js +++ b/packages/kit/src/runtime/server/remote-functions.js @@ -3,7 +3,7 @@ import { json, error } from '@sveltejs/kit'; import { Redirect, SvelteKitError } from '@sveltejs/kit/internal'; -import { with_request_store, merge_tracing } from '@sveltejs/kit/internal/server'; +import { with_request_store, merge_tracing, record_span } from '@sveltejs/kit/internal/server'; import { app_dir, base } from '$app/paths/internal/server'; import { is_form_content_type } from '../../utils/http.js'; import { create_remote_key, parse_remote_arg, split_remote_key } from '../shared.js'; @@ -12,7 +12,6 @@ import { handle_error_and_jsonify } from './errors.js'; import { normalize_error } from '../../utils/error.js'; import { check_incorrect_fail_use, get_action_location } from './page/actions.js'; import { DEV } from 'esm-env'; -import { record_span } from '../telemetry/record_span.js'; import { deserialize_binary_form } from '../form-utils.js'; import { with_version_header } from './utils.js'; diff --git a/packages/kit/src/runtime/server/respond.js b/packages/kit/src/runtime/server/respond.js index f29c8a6a6cab..e92c4aacc99a 100644 --- a/packages/kit/src/runtime/server/respond.js +++ b/packages/kit/src/runtime/server/respond.js @@ -2,7 +2,12 @@ import { DEV } from 'esm-env'; import { json, text } from '@sveltejs/kit'; import { Redirect, SvelteKitError } from '@sveltejs/kit/internal'; -import { merge_tracing, with_request_store } from '@sveltejs/kit/internal/server'; +import { + merge_tracing, + otel, + record_span, + with_request_store +} from '@sveltejs/kit/internal/server'; import { base, app_dir } from '$app/paths/internal/server'; import { is_endpoint_request, render_endpoint } from './endpoint.js'; import { render_page } from './page/index.js'; @@ -40,8 +45,6 @@ import { } from '../pathname.js'; import { server_data_serializer } from './page/data_serializer.js'; import { get_remote_id, handle_remote_call } from './remote-functions.js'; -import { record_span } from '../telemetry/record_span.js'; -import { otel } from '../telemetry/otel.js'; /** @type {import('types').RequiredResolveOptions['transformPageChunk']} */ const default_transform = ({ html }) => html; diff --git a/packages/kit/src/runtime/server/state.js b/packages/kit/src/runtime/server/state.js index ea1474151dcc..07c5a9f965ee 100644 --- a/packages/kit/src/runtime/server/state.js +++ b/packages/kit/src/runtime/server/state.js @@ -1,5 +1,4 @@ /** @import { InternalRequestOptions, RequestState, ServerHooks } from 'types' */ -import { record_span } from '../telemetry/record_span.js'; /** Per-request caches and context flags — never carried into a fork. */ function transient_fields() { @@ -40,9 +39,6 @@ export function create_request_state(options, hooks) { error: false, depth: 0, handleValidationError: hooks.handleValidationError, - tracing: { - record_span - }, ...transient_fields() }; } diff --git a/packages/kit/src/runtime/telemetry/otel.disabled.spec.js b/packages/kit/src/runtime/telemetry/otel.disabled.spec.js deleted file mode 100644 index d14fddd2d097..000000000000 --- a/packages/kit/src/runtime/telemetry/otel.disabled.spec.js +++ /dev/null @@ -1,10 +0,0 @@ -import { test, expect, vi } from 'vitest'; -import { otel } from './otel.js'; - -vi.hoisted(() => { - vi.stubGlobal('__SVELTEKIT_SERVER_TRACING_ENABLED__', false); -}); - -test('otel should be null when tracing is disabled', () => { - expect(otel).toBeNull(); -}); diff --git a/packages/kit/src/runtime/telemetry/otel.enabled.spec.js b/packages/kit/src/runtime/telemetry/otel.enabled.spec.js deleted file mode 100644 index 1df7b45dceb6..000000000000 --- a/packages/kit/src/runtime/telemetry/otel.enabled.spec.js +++ /dev/null @@ -1,10 +0,0 @@ -import { test, expect, vi } from 'vitest'; -import { otel } from './otel.js'; - -vi.hoisted(() => { - vi.stubGlobal('__SVELTEKIT_SERVER_TRACING_ENABLED__', true); -}); - -test('otel should be defined when tracing is enabled', () => { - expect(otel).not.toBeNull(); -}); diff --git a/packages/kit/src/runtime/telemetry/otel.js b/packages/kit/src/runtime/telemetry/otel.js deleted file mode 100644 index a293423ebade..000000000000 --- a/packages/kit/src/runtime/telemetry/otel.js +++ /dev/null @@ -1,21 +0,0 @@ -/** @import { Tracer, SpanStatusCode, PropagationAPI, ContextAPI } from '@opentelemetry/api' */ - -/** @type {Promise<{ tracer: Tracer, SpanStatusCode: typeof SpanStatusCode, propagation: PropagationAPI, context: ContextAPI }> | null} */ -export let otel = null; - -if (__SVELTEKIT_SERVER_TRACING_ENABLED__) { - otel = import('@opentelemetry/api') - .then((module) => { - return { - tracer: module.trace.getTracer('sveltekit'), - propagation: module.propagation, - context: module.context, - SpanStatusCode: module.SpanStatusCode - }; - }) - .catch(() => { - throw new Error( - 'Tracing is enabled (see the SvelteKit plugin `tracing.server` option in your vite.config.js), but `@opentelemetry/api` is not available. This error will likely resolve itself when you set up your tracing instrumentation in `instrumentation.server.js`. For more information, see https://svelte.dev/docs/kit/observability#opentelemetry-api' - ); - }); -} diff --git a/packages/kit/src/runtime/telemetry/record_span.disabled.spec.js b/packages/kit/src/runtime/telemetry/record_span.disabled.spec.js deleted file mode 100644 index 7a750391d2b9..000000000000 --- a/packages/kit/src/runtime/telemetry/record_span.disabled.spec.js +++ /dev/null @@ -1,15 +0,0 @@ -import { test, expect, vi } from 'vitest'; -import { record_span } from './record_span.js'; -import { noop_span } from './noop.js'; - -vi.hoisted(() => { - vi.stubGlobal('__SVELTEKIT_SERVER_TRACING_ENABLED__', false); -}); - -test('it runs function with noop span if @opentelemetry/api is not available', async () => { - const fn = vi.fn().mockResolvedValue('result'); - - const result = await record_span({ name: 'test', attributes: {}, fn }); - expect(result).toBe('result'); - expect(fn).toHaveBeenCalledWith(noop_span); -}); diff --git a/packages/kit/src/runtime/telemetry/record_span.js b/packages/kit/src/runtime/telemetry/record_span.js deleted file mode 100644 index eaabb1ea5e4c..000000000000 --- a/packages/kit/src/runtime/telemetry/record_span.js +++ /dev/null @@ -1,65 +0,0 @@ -/** @import { RecordSpan } from 'types' */ -import { HttpError, Redirect } from '@sveltejs/kit/internal'; -import { noop_span } from './noop.js'; -import { otel } from './otel.js'; - -/** @type {RecordSpan} */ -export async function record_span({ name, attributes, fn }) { - if (otel === null) { - return fn(noop_span); - } - - const { SpanStatusCode, tracer } = await otel; - - return tracer.startActiveSpan(name, { attributes }, async (span) => { - try { - return await fn(span); - } catch (error) { - if (error instanceof HttpError) { - span.setAttributes({ - [`${name}.result.type`]: 'known_error', - [`${name}.result.status`]: error.status, - [`${name}.result.message`]: error.body.message - }); - if (error.status >= 500) { - span.recordException({ - name: 'HttpError', - message: error.body.message - }); - span.setStatus({ - code: SpanStatusCode.ERROR, - message: error.body.message - }); - } - } else if (error instanceof Redirect) { - span.setAttributes({ - [`${name}.result.type`]: 'redirect', - [`${name}.result.status`]: error.status, - [`${name}.result.location`]: error.location - }); - } else if (error instanceof Error) { - span.setAttributes({ - [`${name}.result.type`]: 'unknown_error' - }); - span.recordException({ - name: error.name, - message: error.message, - stack: error.stack - }); - span.setStatus({ - code: SpanStatusCode.ERROR, - message: error.message - }); - } else { - span.setAttributes({ - [`${name}.result.type`]: 'unknown_error' - }); - span.setStatus({ code: SpanStatusCode.ERROR }); - } - - throw error; - } finally { - span.end(); - } - }); -} diff --git a/packages/kit/src/types/internal.d.ts b/packages/kit/src/types/internal.d.ts index 0a0edf62dde9..4e4267bf4032 100644 --- a/packages/kit/src/types/internal.d.ts +++ b/packages/kit/src/types/internal.d.ts @@ -679,9 +679,6 @@ export interface RequestState { */ readonly depth: number; readonly handleValidationError: ServerHooks['handleValidationError']; - readonly tracing: { - record_span: RecordSpan; - }; readonly remote: { /** Resolved query/prerender data, populated by `await myQuery()` or `myQuery.set(...)` */ data: null | Map>>; From 82cf73e748129d21066b4598eebab1c297d40b4b Mon Sep 17 00:00:00 2001 From: Ben McCann <322311+benmccann@users.noreply.github.com> Date: Sat, 8 Aug 2026 09:18:57 -0700 Subject: [PATCH 458/545] chore: upgrade to vite-imagetools 12 (#16690) --- .changeset/pre/plenty-wasps-hang.md | 2 +- packages/enhanced-img/package.json | 2 +- pnpm-lock.yaml | 18 +++++++++--------- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/.changeset/pre/plenty-wasps-hang.md b/.changeset/pre/plenty-wasps-hang.md index bfba6f09127a..45947bf988b9 100644 --- a/.changeset/pre/plenty-wasps-hang.md +++ b/.changeset/pre/plenty-wasps-hang.md @@ -2,4 +2,4 @@ '@sveltejs/enhanced-img': patch --- -chore: bump `vite-imagetools` to v11 +chore: bump `vite-imagetools` to v12 diff --git a/packages/enhanced-img/package.json b/packages/enhanced-img/package.json index b7d8a6abdaaf..6318eb45d5f0 100644 --- a/packages/enhanced-img/package.json +++ b/packages/enhanced-img/package.json @@ -41,7 +41,7 @@ "magic-string": "^0.30.21", "sharp": "^0.35.3", "svelte-parse-markup": "^0.1.5", - "vite-imagetools": "^11.0.0", + "vite-imagetools": "^12.0.0", "zimmerframe": "^1.1.2" }, "devDependencies": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ee88e2ea4854..a2a675ac1bdc 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -475,8 +475,8 @@ importers: specifier: ^0.1.5 version: 0.1.5(svelte@5.56.3(@typescript-eslint/types@8.61.1)) vite-imagetools: - specifier: ^11.0.0 - version: 11.0.0(@types/node@22.19.19)(vite@8.1.5(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0)) + specifier: ^12.0.0 + version: 12.0.0(@types/node@22.19.19)(vite@8.1.5(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0)) zimmerframe: specifier: ^1.1.2 version: 1.1.2 @@ -3469,8 +3469,8 @@ packages: resolution: {integrity: sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==} engines: {node: '>= 4'} - imagetools-core@11.0.0: - resolution: {integrity: sha512-BaNX7im/o7PqGmck3/wElRx4xugnJYIMtPfOIAHEd2ZV1ZyalewE0H9nm/czZcjdtsgxVW7IzL0oJQn6J8kZuA==} + imagetools-core@12.0.0: + resolution: {integrity: sha512-9u1nEZrA6qd/dv1okXT/i1bLOnL9YAAg7k5BqnBJe5PxYYRecZ/GNyGxUXG5x6ybyvCa25zlx5XX++nSEAkjQw==} engines: {node: '>=22.0.0'} import-in-the-middle@3.0.0: @@ -4158,8 +4158,8 @@ packages: typescript: optional: true - vite-imagetools@11.0.0: - resolution: {integrity: sha512-9mMuI/gum/hg7OT2VUfVJvolmACJbc1kStMmm0ydoUHX+3jsj1zvsbmI0DYt2K8u2Tex6kiTuj86xDuIYNgV2A==} + vite-imagetools@12.0.0: + resolution: {integrity: sha512-OafPbvTNTaWy/IDKfjO58rNIPL4+yazyd/6A9qqL5h/ThmDiCjWTOxPgQxbBmmmhFjbGOTvsO63qGrapXZCD0A==} engines: {node: '>=22.0.0'} peerDependencies: vite: '>=8.0.0' @@ -6145,7 +6145,7 @@ snapshots: ignore@7.0.5: {} - imagetools-core@11.0.0: {} + imagetools-core@12.0.0: {} import-in-the-middle@3.0.0: dependencies: @@ -6821,10 +6821,10 @@ snapshots: optionalDependencies: typescript: 6.0.3 - vite-imagetools@11.0.0(@types/node@22.19.19)(vite@8.1.5(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0)): + vite-imagetools@12.0.0(@types/node@22.19.19)(vite@8.1.5(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0)): dependencies: '@rollup/pluginutils': 5.4.0 - imagetools-core: 11.0.0 + imagetools-core: 12.0.0 sharp: 0.35.3(@types/node@22.19.19) vite: 8.1.5(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0) transitivePeerDependencies: From 9703b94b51d71ffd5ebbce8229d35695db790f15 Mon Sep 17 00:00:00 2001 From: Nic Polumeyv Date: Sat, 8 Aug 2026 12:24:36 -0400 Subject: [PATCH 459/545] feat: add `snapshot` helper to `$app/navigation` (#16685) Implements #16670. Default ids hash the callsite's stack frame; a build-time transform (like remote function ids) could replace that later without breaking anything, since ids are just cache keys. Supersedes #16346: capture happens at beforeunload, where sessionStorage is synchronous and IndexedDB isn't. Structured clone also strips prototypes from transport-class values, so IndexedDB wouldn't remove the need for devalue. Costs `File` snapshots. Deprecating `export const snapshot` is a separate PR. --- .changeset/snapshot-helper.md | 5 + packages/kit/src/runtime/app/navigation.js | 1 + packages/kit/src/runtime/client/client.js | 74 ++++++--- packages/kit/src/runtime/client/constants.js | 1 + packages/kit/src/runtime/client/snapshots.js | 147 ++++++++++++++++++ .../src/routes/snapshot/helper/+layout.svelte | 20 +++ .../src/routes/snapshot/helper/+page.svelte | 52 +++++++ .../src/routes/snapshot/helper/b/+page.svelte | 3 + .../src/routes/snapshot/stale/Stale.svelte | 13 ++ .../src/routes/snapshot/stale/a/+page.svelte | 1 + .../src/routes/snapshot/stale/b/+page.svelte | 13 ++ .../kit/test/apps/basics/test/client.test.js | 71 +++++++++ packages/kit/types/index.d.ts | 15 ++ 13 files changed, 397 insertions(+), 19 deletions(-) create mode 100644 .changeset/snapshot-helper.md create mode 100644 packages/kit/src/runtime/client/snapshots.js create mode 100644 packages/kit/test/apps/basics/src/routes/snapshot/helper/+layout.svelte create mode 100644 packages/kit/test/apps/basics/src/routes/snapshot/helper/+page.svelte create mode 100644 packages/kit/test/apps/basics/src/routes/snapshot/helper/b/+page.svelte create mode 100644 packages/kit/test/apps/basics/src/routes/snapshot/stale/Stale.svelte create mode 100644 packages/kit/test/apps/basics/src/routes/snapshot/stale/a/+page.svelte create mode 100644 packages/kit/test/apps/basics/src/routes/snapshot/stale/b/+page.svelte diff --git a/.changeset/snapshot-helper.md b/.changeset/snapshot-helper.md new file mode 100644 index 000000000000..0b571c50f25c --- /dev/null +++ b/.changeset/snapshot-helper.md @@ -0,0 +1,5 @@ +--- +'@sveltejs/kit': minor +--- + +feat: add `snapshot` helper to `$app/navigation` diff --git a/packages/kit/src/runtime/app/navigation.js b/packages/kit/src/runtime/app/navigation.js index dd210cdb5fd3..f47fa847f1ad 100644 --- a/packages/kit/src/runtime/app/navigation.js +++ b/packages/kit/src/runtime/app/navigation.js @@ -12,3 +12,4 @@ export { pushState, replaceState } from '../client/client.js'; +export { snapshot } from '../client/snapshots.js'; diff --git a/packages/kit/src/runtime/client/client.js b/packages/kit/src/runtime/client/client.js index 0a10c0ae3eb0..049ea470bbfe 100644 --- a/packages/kit/src/runtime/client/client.js +++ b/packages/kit/src/runtime/client/client.js @@ -29,6 +29,14 @@ import { PRELOAD_PRIORITIES, SNAPSHOT_KEY } from './constants.js'; +import { + capture_navigation_snapshot, + current_registrations, + delete_navigation_snapshot, + init_snapshots, + persist_navigation_snapshots, + restore_navigation_snapshot +} from './snapshots.js'; import { validate_page_exports } from '../../utils/exports.js'; import { noop } from '../../utils/functions.js'; import { @@ -94,6 +102,8 @@ const history_info = storage.get(HISTORY_INFO_KEY) ?? {}; */ const snapshots = storage.get(SNAPSHOT_KEY) ?? {}; +init_snapshots(() => (started && !is_navigating && !updating ? current_history_index : null)); + /** @type {Props} */ let props; @@ -203,9 +213,12 @@ function reset_scroll_and_focus(url, scroll, reset, active_element) { function clear_onward_history(current_history_index, current_navigation_index) { // if we navigated back, then pushed a new state, we can // release memory by pruning the scroll/snapshot lookup + // the new entry reuses the first abandoned index, so its slot must start clean + delete_navigation_snapshot(current_history_index); let i = current_history_index + 1; while (history_info[i]) { delete history_info[i]; + delete_navigation_snapshot(i); i += 1; } @@ -693,6 +706,8 @@ function persist_state() { capture_snapshot(current_navigation_index); storage.set(SNAPSHOT_KEY, snapshots); + + persist_navigation_snapshots(current_history_index); } /** @@ -948,6 +963,7 @@ async function initialize(result, target, should_hydrate) { } restore_snapshot(current_navigation_index); + restore_navigation_snapshot(current_history_index); started = true; } @@ -1997,6 +2013,7 @@ async function navigate({ // store this before calling `accept()`, which may change the index const previous_history_index = current_history_index; const previous_navigation_index = current_navigation_index; + const previous_snapshot_registrations = current_registrations(); accept(); @@ -2105,6 +2122,11 @@ async function navigate({ capture_scroll(previous_history_index); capture_snapshot(previous_navigation_index); + if (replace_state) { + delete_navigation_snapshot(previous_history_index); + } else { + capture_navigation_snapshot(previous_history_index); + } // ensure the url pathname matches the page's trailing slash option if (navigation_result.props.page.url.pathname !== url.pathname) { @@ -2272,6 +2294,8 @@ async function navigate({ if (type === 'popstate') { restore_snapshot(current_navigation_index); } + // new and replaced entries have no stored values, so this only resets there + restore_navigation_snapshot(current_history_index, previous_snapshot_registrations); navigating.current = null; @@ -2937,6 +2961,7 @@ export async function replaceState(url, state) { */ async function update_state(intent, state, { replace, persist_state, reset }, caller) { const url = intent.url; + const previous_snapshot_registrations = current_registrations(); if (DEV && !started) { throw new Error(`Cannot call ${caller}(...) before router is initialized`); @@ -2957,7 +2982,12 @@ async function update_state(intent, state, { replace, persist_state, reset }, ca updating = true; } - if (!replace) capture_scroll(current_history_index); + if (replace) { + delete_navigation_snapshot(current_history_index); + } else { + capture_scroll(current_history_index); + capture_navigation_snapshot(current_history_index); + } if (reset) current_reset_index += 1; // as above, serialize-then-parse to prevent bugs @@ -3013,33 +3043,37 @@ async function update_state(intent, state, { replace, persist_state, reset }, ca url }; - if (!nav) return; + if (nav) { + const { activeElement } = document; - const { activeElement } = document; + await settled(); - await settled(); + if (navigation_token !== nav_token) { + // a new navigation happened while we were waiting for the DOM to update, so abort + nav.reject(new Error('navigation aborted')); + return; + } - if (navigation_token !== nav_token) { - // a new navigation happened while we were waiting for the DOM to update, so abort - nav.reject(new Error('navigation aborted')); - return; - } + reset_scroll_and_focus(url, reset ? null : scroll_state(), reset, activeElement); - reset_scroll_and_focus(url, reset ? null : scroll_state(), reset, activeElement); + is_navigating = false; + nav.fulfil(undefined); - is_navigating = false; - nav.fulfil(undefined); + if (nav.navigation.to) { + nav.navigation.to.scroll = scroll_state(); + } - if (nav.navigation.to) { - nav.navigation.to.scroll = scroll_state(); + after_navigate_callbacks.forEach((fn) => + fn(/** @type {import('@sveltejs/kit').AfterNavigate} */ (nav.navigation)) + ); } - after_navigate_callbacks.forEach((fn) => - fn(/** @type {import('@sveltejs/kit').AfterNavigate} */ (nav.navigation)) - ); + restore_navigation_snapshot(current_history_index, previous_snapshot_registrations); - navigating.current = null; - updating = false; + if (nav) { + navigating.current = null; + updating = false; + } } /** @@ -3439,9 +3473,11 @@ function _start_router() { update_url(url); capture_scroll(current_history_index); + capture_navigation_snapshot(current_history_index); current_history_index = history_index; current_reset_index = reset_index; if (reset && scroll) scrollTo(scroll.x, scroll.y); + restore_navigation_snapshot(current_history_index, current_registrations()); return; } diff --git a/packages/kit/src/runtime/client/constants.js b/packages/kit/src/runtime/client/constants.js index 3ea23144d125..b576c64dcc9c 100644 --- a/packages/kit/src/runtime/client/constants.js +++ b/packages/kit/src/runtime/client/constants.js @@ -1,4 +1,5 @@ export const SNAPSHOT_KEY = 'sveltekit:snapshot'; +export const NAVIGATION_SNAPSHOT_KEY = 'sveltekit:navigation-snapshot'; export const HISTORY_INFO_KEY = 'sveltekit:history-info'; export const HISTORY_METADATA_KEY = 'sveltekit:metadata'; diff --git a/packages/kit/src/runtime/client/snapshots.js b/packages/kit/src/runtime/client/snapshots.js new file mode 100644 index 000000000000..54d9476c4217 --- /dev/null +++ b/packages/kit/src/runtime/client/snapshots.js @@ -0,0 +1,147 @@ +import { BROWSER, DEV } from 'esm-env'; +import { onMount } from 'svelte'; +import * as storage from './session-storage.js'; +import { NAVIGATION_SNAPSHOT_KEY } from './constants.js'; +import { hash } from '../../utils/hash.js'; +import { parse, stringify } from '#app/internal/transport'; + +/** + * @typedef {{ id: string; capture: () => any; restore: (value: any) => void; reset?: () => void }} SnapshotRegistration + */ + +// Function snapshots use history indexes so shallow entries have distinct state. +/** @type {Record>} */ +const navigation_snapshots = storage.get(NAVIGATION_SNAPSHOT_KEY) ?? {}; + +/** @type {Set} */ +const snapshot_registrations = new Set(); + +/** + * The registrations mounted right now. Take before navigating and pass to + * `restore_navigation_snapshot` — only these are eligible for `reset`. + * @returns {Set} + */ +export function current_registrations() { + return new Set(snapshot_registrations); +} + +// injected by client.js: the live history index while the router is idle, null mid-navigation +/** @type {() => number | null} */ +let get_idle_history_index = () => null; + +/** @param {() => number | null} fn */ +export function init_snapshots(fn) { + get_idle_history_index = fn; +} + +/** @param {number} index */ +export function capture_navigation_snapshot(index) { + if (snapshot_registrations.size === 0) { + delete navigation_snapshots[index]; + return; + } + + navigation_snapshots[index] = Object.fromEntries( + Array.from(snapshot_registrations, ({ id, capture }) => [id, stringify(capture())]) + ); +} + +/** + * @param {number} index + * @param {Set} [reset_registrations] + */ +export function restore_navigation_snapshot(index, reset_registrations) { + const values = navigation_snapshots[index]; + + for (const registration of snapshot_registrations) { + if (values && Object.hasOwn(values, registration.id)) { + registration.restore(parse(values[registration.id])); + } else if (reset_registrations?.has(registration)) { + registration.reset?.(); + } + } +} + +/** @param {number} index */ +export function delete_navigation_snapshot(index) { + delete navigation_snapshots[index]; +} + +/** @param {number} index */ +export function persist_navigation_snapshots(index) { + capture_navigation_snapshot(index); + storage.set(NAVIGATION_SNAPSHOT_KEY, navigation_snapshots); +} + +/** + * @param {string | undefined} stack + * @returns {string} + */ +function callsite_id(stack) { + let frames = stack?.split('\n') ?? []; + if (frames[0]?.trim() === 'Error') frames = frames.slice(1); + + // only the callsite frame is stable: frames above it differ between hydration and + // re-mounting, and Vite query strings (stripped here) change on module invalidation + const frame = frames[1]?.replace(/\?[^)\s]*(?=:\d+:\d+\)?$)/, ''); + + if (!frame) { + throw new Error('Could not generate a snapshot id from the stack trace. Pass an `id` instead.'); + } + + return hash(frame); +} + +/** + * A lifecycle function that captures state before navigating and restores it when traversing history. + * + * By default, the snapshot `id` is generated from the call site. Pass an explicit `id` to keep snapshots stable across deployments or distinguish multiple uses of a shared helper. + * + * The optional `reset` callback runs on navigations where there is no captured value to restore, such as when a new history entry is created. Captured values are serialized with the app's transport hook. + * + * `snapshot` must be called during a component initialization. It remains active as long as the component is mounted. + * @template T + * @param {{ id?: string; capture: () => T; restore: (value: T) => void; reset?: () => void }} options + * @returns {void} + */ +export function snapshot(options) { + if (!BROWSER) return; + + let id = options.id; + if (id === undefined) { + // restore any lowered third-party limit, else every callsite collapses to one id + const limit = Error.stackTraceLimit; + const lowered = typeof limit === 'number' && limit < 3; + if (lowered) Error.stackTraceLimit = 3; + const stack = new Error().stack; + if (lowered) Error.stackTraceLimit = limit; + + id = callsite_id(stack); + } + + const registration = { ...options, id }; + + onMount(() => { + if (DEV && Array.from(snapshot_registrations).some((existing) => existing.id === id)) { + throw new Error( + options.id === undefined + ? 'snapshot() was called multiple times from the same call site. Pass a unique `id` to distinguish the instances.' + : `A snapshot with id "${options.id}" is already registered. Pass a unique \`id\`.` + ); + } + + const index = get_idle_history_index(); + if (index !== null) { + const values = navigation_snapshots[index]; + if (values && Object.hasOwn(values, id)) { + registration.restore(parse(values[id])); + } + } + + snapshot_registrations.add(registration); + + return () => { + snapshot_registrations.delete(registration); + }; + }); +} diff --git a/packages/kit/test/apps/basics/src/routes/snapshot/helper/+layout.svelte b/packages/kit/test/apps/basics/src/routes/snapshot/helper/+layout.svelte new file mode 100644 index 000000000000..42495b3af6ce --- /dev/null +++ b/packages/kit/test/apps/basics/src/routes/snapshot/helper/+layout.svelte @@ -0,0 +1,20 @@ + + + + +{@render children()} diff --git a/packages/kit/test/apps/basics/src/routes/snapshot/helper/+page.svelte b/packages/kit/test/apps/basics/src/routes/snapshot/helper/+page.svelte new file mode 100644 index 000000000000..7bae68a22b97 --- /dev/null +++ b/packages/kit/test/apps/basics/src/routes/snapshot/helper/+page.svelte @@ -0,0 +1,52 @@ + + + + + + + + + +b + +

{foo.bar()}

+

{order.join(',')}

diff --git a/packages/kit/test/apps/basics/src/routes/snapshot/helper/b/+page.svelte b/packages/kit/test/apps/basics/src/routes/snapshot/helper/b/+page.svelte new file mode 100644 index 000000000000..c17a194f1242 --- /dev/null +++ b/packages/kit/test/apps/basics/src/routes/snapshot/helper/b/+page.svelte @@ -0,0 +1,3 @@ +

b

+ +a diff --git a/packages/kit/test/apps/basics/src/routes/snapshot/stale/Stale.svelte b/packages/kit/test/apps/basics/src/routes/snapshot/stale/Stale.svelte new file mode 100644 index 000000000000..606a3223d088 --- /dev/null +++ b/packages/kit/test/apps/basics/src/routes/snapshot/stale/Stale.svelte @@ -0,0 +1,13 @@ + + + diff --git a/packages/kit/test/apps/basics/src/routes/snapshot/stale/a/+page.svelte b/packages/kit/test/apps/basics/src/routes/snapshot/stale/a/+page.svelte new file mode 100644 index 000000000000..acf693cc8a81 --- /dev/null +++ b/packages/kit/test/apps/basics/src/routes/snapshot/stale/a/+page.svelte @@ -0,0 +1 @@ +b diff --git a/packages/kit/test/apps/basics/src/routes/snapshot/stale/b/+page.svelte b/packages/kit/test/apps/basics/src/routes/snapshot/stale/b/+page.svelte new file mode 100644 index 000000000000..1beddb386603 --- /dev/null +++ b/packages/kit/test/apps/basics/src/routes/snapshot/stale/b/+page.svelte @@ -0,0 +1,13 @@ + + + + +{#if shown} + +{/if} + +a diff --git a/packages/kit/test/apps/basics/test/client.test.js b/packages/kit/test/apps/basics/test/client.test.js index 684efff3ad5f..7e9363f68df0 100644 --- a/packages/kit/test/apps/basics/test/client.test.js +++ b/packages/kit/test/apps/basics/test/client.test.js @@ -1336,6 +1336,77 @@ test.describe('Snapshots', () => { await expect(page.locator('[data-testid="order"]')).toHaveText('afterNavigate,restore'); }); + + test('captures and restores function snapshots', async ({ page, clicknav }) => { + await page.goto('/snapshot/helper'); + await page.locator('[data-testid="default"]').fill('default value'); + await page.locator('[data-testid="manual"]').fill('manual value'); + await page.locator('[data-testid="layout"]').fill('layout value'); + + await clicknav('[href="/snapshot/helper/b"]'); + await expect(page.locator('[data-testid="layout"]')).toHaveValue(''); + + await page.goBack(); + + await expect(page.locator('[data-testid="default"]')).toHaveValue('default value'); + await expect(page.locator('[data-testid="manual"]')).toHaveValue('manual value'); + await expect(page.locator('[data-testid="layout"]')).toHaveValue('layout value'); + await expect(page.locator('[data-testid="order"]')).toHaveText('afterNavigate,restore'); + }); + + test('persists function snapshots with transport support', async ({ page }) => { + await page.goto('/snapshot/helper'); + await page.locator('[data-testid="default"]').fill('reload value'); + await page.getByRole('button', { name: 'change transport value' }).click(); + + await page.reload(); + + await expect(page.locator('[data-testid="default"]')).toHaveValue('reload value'); + await expect(page.locator('[data-testid="transport"]')).toHaveText('restored!'); + await expect(page.locator('[data-testid="order"]')).toHaveText('afterNavigate,restore'); + }); + + test('starts fresh when a pushed entry reuses an abandoned history index', async ({ + page, + clicknav + }) => { + await page.goto('/snapshot/stale/a'); + await clicknav('[href="/snapshot/stale/b"]'); + + await page.locator('[data-testid="toggle"]').click(); + await page.locator('[data-testid="stale-input"]').fill('abandoned value'); + + await clicknav('[href="/snapshot/stale/a"]'); + + // jump straight back two entries so the abandoned entry is never revisited + const index = await page.evaluate(() => history.state['sveltekit:metadata'].historyIndex); + await page.evaluate(() => history.go(-2)); + await page.waitForFunction( + (previous) => history.state['sveltekit:metadata'].historyIndex === previous - 2, + index + ); + await page.waitForTimeout(200); + + // pushing reuses the abandoned entry's index, whose snapshot must not leak + await clicknav('[href="/snapshot/stale/b"]'); + await page.locator('[data-testid="toggle"]').click(); + await expect(page.locator('[data-testid="stale-input"]')).toHaveValue(''); + }); + + test('captures and restores function snapshots on shallow navigations', async ({ page }) => { + await page.goto('/snapshot/helper'); + const input = page.locator('[data-testid="default"]'); + + await input.fill('one'); + await page.getByRole('button', { name: 'shallow', exact: true }).click(); + await input.fill('two'); + + await page.goBack(); + await expect(input).toHaveValue('one'); + + await page.goForward(); + await expect(input).toHaveValue('two'); + }); }); test.describe('Streaming', () => { diff --git a/packages/kit/types/index.d.ts b/packages/kit/types/index.d.ts index f98a657f4e57..715a3df543d2 100644 --- a/packages/kit/types/index.d.ts +++ b/packages/kit/types/index.d.ts @@ -3152,6 +3152,21 @@ declare module '$app/forms' { declare module '$app/navigation' { import type { RouteId } from '$app/types'; + /** + * A lifecycle function that captures state before navigating and restores it when traversing history. + * + * By default, the snapshot `id` is generated from the call site. Pass an explicit `id` to keep snapshots stable across deployments or distinguish multiple uses of a shared helper. + * + * The optional `reset` callback runs on navigations where there is no captured value to restore, such as when a new history entry is created. Captured values are serialized with the app's transport hook. + * + * `snapshot` must be called during a component initialization. It remains active as long as the component is mounted. + * */ + export function snapshot(options: { + id?: string; + capture: () => T; + restore: (value: T) => void; + reset?: () => void; + }): void; /** * A lifecycle function that runs the supplied `callback` when the current component mounts, and also whenever we navigate to a URL. * From 0bee0e8f2bed771a92a3d6860363cda7c710839a Mon Sep 17 00:00:00 2001 From: Nic Polumeyv <162764842+Nic-Polumeyv@users.noreply.github.com> Date: Fri, 7 Aug 2026 22:11:24 -0400 Subject: [PATCH 460/545] chore: deprecate `export const snapshot` --- .changeset/snapshot-deprecate.md | 5 +++ .../docs/30-advanced/65-snapshots.md | 39 +++++++++++++++---- .../kit/src/core/sync/write_types/index.js | 1 + packages/kit/src/exports/public.d.ts | 1 + packages/kit/src/runtime/client/client.js | 8 ++++ packages/kit/types/index.d.ts | 1 + 6 files changed, 48 insertions(+), 7 deletions(-) create mode 100644 .changeset/snapshot-deprecate.md diff --git a/.changeset/snapshot-deprecate.md b/.changeset/snapshot-deprecate.md new file mode 100644 index 000000000000..2b61da240ea3 --- /dev/null +++ b/.changeset/snapshot-deprecate.md @@ -0,0 +1,5 @@ +--- +'@sveltejs/kit': minor +--- + +chore: deprecate `export const snapshot` in favour of the `snapshot` helper diff --git a/documentation/docs/30-advanced/65-snapshots.md b/documentation/docs/30-advanced/65-snapshots.md index cc7477f0fe66..250a4453ce08 100644 --- a/documentation/docs/30-advanced/65-snapshots.md +++ b/documentation/docs/30-advanced/65-snapshots.md @@ -6,18 +6,19 @@ Ephemeral DOM state — like scroll positions on sidebars, the content of ` @@ -27,8 +28,32 @@ To do this, export a `snapshot` object with `capture` and `restore` methods from ``` -When you navigate away from this page, the `capture` function is called immediately before the page updates, and the returned value is associated with the current entry in the browser's history stack. If you navigate back, the `restore` function is called with the stored value as soon as the page is updated. +When you navigate away from this page — including via [shallow routing](shallow-routing) — the `capture` function is called immediately before the page updates, and the returned value is associated with the current entry in the browser's history stack. If you navigate back, the `restore` function is called with the stored value as soon as the page is updated. + +By default, the snapshot `id` is generated from the call site. Pass an explicit `id` to keep snapshots stable across deployments or distinguish multiple uses of a shared helper. -The data must be serializable as JSON so that it can be persisted to `sessionStorage`. This allows the state to be restored when the page is reloaded, or when the user navigates back from a different site. +The optional `reset` callback runs on navigations where there is no captured value to restore, such as when a new history entry is created. + +Captured values are serialized with [devalue](https://github.com/sveltejs/devalue), which handles JSON as well as types like `Date` and `Map`, and values handled by your [`transport`](hooks#Universal-hooks-transport) hook. The serialized data is persisted to `sessionStorage`, which allows the state to be restored when the page is reloaded, or when the user navigates back from a different site. > [!NOTE] Avoid returning very large objects from `capture` — once captured, objects will be retained in memory for the duration of the session, and in extreme cases may be too large to persist to `sessionStorage`. + +## export const snapshot + +> [!LEGACY] +> Previously, snapshots were created by exporting a `snapshot` object with `capture` and `restore` methods from a `+page.svelte` or `+layout.svelte`. This form is deprecated in favour of the `snapshot` helper, which can be called from any component. + +```svelte + + +``` + +Values captured this way are serialized as JSON, and shallow navigations do not capture them. diff --git a/packages/kit/src/core/sync/write_types/index.js b/packages/kit/src/core/sync/write_types/index.js index 92c3ad1a7e36..c4c1e141be20 100644 --- a/packages/kit/src/core/sync/write_types/index.js +++ b/packages/kit/src/core/sync/write_types/index.js @@ -232,6 +232,7 @@ function update_types(config, routes, route, root, to_delete = new Set()) { 'type OptionalUnion, A extends keyof U = U extends U ? keyof U : never> = U extends unknown ? { [P in Exclude]?: never } & U : never;', // Re-export `Snapshot` from @sveltejs/kit — in future we could use this to infer from the return type of `snapshot.capture` + '/** @deprecated Use the `snapshot` helper from `$app/navigation` instead. */', 'export type Snapshot = Kit.Snapshot;', 'export type ErrorProps = { error: App.Error };' diff --git a/packages/kit/src/exports/public.d.ts b/packages/kit/src/exports/public.d.ts index dfcdc7c92d80..64c852afbf78 100644 --- a/packages/kit/src/exports/public.d.ts +++ b/packages/kit/src/exports/public.d.ts @@ -2009,6 +2009,7 @@ export type SubmitFunction< /** * The type of `export const snapshot` exported from a page or layout component. + * @deprecated Use the [`snapshot`](https://svelte.dev/docs/kit/$app-navigation#snapshot) helper from `$app/navigation` instead. */ export interface Snapshot { capture: () => T; diff --git a/packages/kit/src/runtime/client/client.js b/packages/kit/src/runtime/client/client.js index 049ea470bbfe..bdd73ba91816 100644 --- a/packages/kit/src/runtime/client/client.js +++ b/packages/kit/src/runtime/client/client.js @@ -686,9 +686,17 @@ function reset_invalidation() { force_invalidation = false; } +let warned_snapshot_export = false; + /** @param {number} index */ function capture_snapshot(index) { if (props.components.some((c) => c?.snapshot)) { + if (DEV && !warned_snapshot_export) { + warned_snapshot_export = true; + console.warn( + '`export const snapshot` is deprecated. Use the `snapshot` helper from `$app/navigation` instead.' + ); + } snapshots[index] = props.components.map((c) => c?.snapshot?.capture()); } } diff --git a/packages/kit/types/index.d.ts b/packages/kit/types/index.d.ts index 715a3df543d2..6122f53e10aa 100644 --- a/packages/kit/types/index.d.ts +++ b/packages/kit/types/index.d.ts @@ -1966,6 +1966,7 @@ declare module '@sveltejs/kit' { /** * The type of `export const snapshot` exported from a page or layout component. + * @deprecated Use the [`snapshot`](https://svelte.dev/docs/kit/$app-navigation#snapshot) helper from `$app/navigation` instead. */ export interface Snapshot { capture: () => T; From 84e83d41e7fed20f253a4e5af046e67028416ad0 Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Sat, 8 Aug 2026 12:35:22 -0400 Subject: [PATCH 461/545] mark stuff deprecated internally so we remember to delete in 4.0 --- packages/kit/src/runtime/client/client.js | 11 +++++++++-- packages/kit/src/runtime/props.svelte.js | 1 + 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/packages/kit/src/runtime/client/client.js b/packages/kit/src/runtime/client/client.js index bdd73ba91816..355d6bb27d2d 100644 --- a/packages/kit/src/runtime/client/client.js +++ b/packages/kit/src/runtime/client/client.js @@ -99,6 +99,7 @@ const history_info = storage.get(HISTORY_INFO_KEY) ?? {}; /** * navigation index -> any * @type {Record} + * @deprecated TODO 4.0 get rid of this */ const snapshots = storage.get(SNAPSHOT_KEY) ?? {}; @@ -688,7 +689,10 @@ function reset_invalidation() { let warned_snapshot_export = false; -/** @param {number} index */ +/** + * @param {number} index + * @deprecated TODO 4.0 get rid of this + */ function capture_snapshot(index) { if (props.components.some((c) => c?.snapshot)) { if (DEV && !warned_snapshot_export) { @@ -701,7 +705,10 @@ function capture_snapshot(index) { } } -/** @param {number} index */ +/** + * @param {number} index + * @deprecated TODO 4.0 get rid of this + */ function restore_snapshot(index) { snapshots[index]?.forEach((value, i) => { props.components[i]?.snapshot?.restore(value); diff --git a/packages/kit/src/runtime/props.svelte.js b/packages/kit/src/runtime/props.svelte.js index ca46ea7ea5b9..8208c596c9a7 100644 --- a/packages/kit/src/runtime/props.svelte.js +++ b/packages/kit/src/runtime/props.svelte.js @@ -12,6 +12,7 @@ export class Props { * that currently live on the page — used for capturing and restoring snapshots. * It's updated/manipulated through `bind:this` in `Root.svelte`. * @type {Array>} + * @deprecated only used for `export const snapshot` — TODO 4.0 get rid */ components = []; From 946b059ada42a3d0887d31b8345d3e4f33176b58 Mon Sep 17 00:00:00 2001 From: Nic Polumeyv Date: Sat, 8 Aug 2026 12:35:39 -0400 Subject: [PATCH 462/545] Update documentation/docs/30-advanced/65-snapshots.md Co-authored-by: Rich Harris --- documentation/docs/30-advanced/65-snapshots.md | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/documentation/docs/30-advanced/65-snapshots.md b/documentation/docs/30-advanced/65-snapshots.md index 250a4453ce08..616e06341a3c 100644 --- a/documentation/docs/30-advanced/65-snapshots.md +++ b/documentation/docs/30-advanced/65-snapshots.md @@ -30,7 +30,15 @@ To do this, call `snapshot` from `$app/navigation` during component initializati When you navigate away from this page — including via [shallow routing](shallow-routing) — the `capture` function is called immediately before the page updates, and the returned value is associated with the current entry in the browser's history stack. If you navigate back, the `restore` function is called with the stored value as soon as the page is updated. -By default, the snapshot `id` is generated from the call site. Pass an explicit `id` to keep snapshots stable across deployments or distinguish multiple uses of a shared helper. +Snapshots must have a unique ID in order to survive across component remounts and page reloads. By default, this is generated from the stack trace when `snapshot(...)` is called, but you can also explicitly provide an `id` to (for example) keep snapshots stable across deployments, even if the stack trace differs because of changes to the source code, or to distinguish snapshots created via a shared wrapper function or in multiple instances of the same component: + +```js +snapshot({ + +++id: 'comment',+++ + capture: () => comment, + restore: (value) => (comment = value) +}); +``` The optional `reset` callback runs on navigations where there is no captured value to restore, such as when a new history entry is created. From aa810a04146b98b77592f7b384347140d29ff599 Mon Sep 17 00:00:00 2001 From: Nic Polumeyv Date: Sat, 8 Aug 2026 13:12:07 -0400 Subject: [PATCH 463/545] chore: lint rule and windows CI leg to guard the recurring windows path bug class (#16649) closes #16620 The rule's one live catch was adapter-netlify's `file://` manifest import. The unit suites in the new windows job have never run on windows-latest before. --- .changeset/tangy-llamas-attack.md | 5 ++ .eslint/require-path-to-file-url.js | 89 +++++++++++++++++++++++++++++ .github/workflows/ci.yml | 13 +++++ eslint.config.js | 23 ++++++++ package.json | 1 + packages/adapter-auto/package.json | 3 +- packages/adapter-netlify/index.js | 5 +- packages/adapter-node/package.json | 1 + packages/kit/src/utils/import.js | 1 + packages/kit/src/version.spec.js | 3 +- packages/package/package.json | 3 +- packages/package/src/config.js | 1 + 12 files changed, 141 insertions(+), 7 deletions(-) create mode 100644 .changeset/tangy-llamas-attack.md create mode 100644 .eslint/require-path-to-file-url.js diff --git a/.changeset/tangy-llamas-attack.md b/.changeset/tangy-llamas-attack.md new file mode 100644 index 000000000000..83cf86f5c081 --- /dev/null +++ b/.changeset/tangy-llamas-attack.md @@ -0,0 +1,5 @@ +--- +'@sveltejs/adapter-netlify': patch +--- + +fix: import the generated manifest via `pathToFileURL`, which handles special characters in the project path diff --git a/.eslint/require-path-to-file-url.js b/.eslint/require-path-to-file-url.js new file mode 100644 index 000000000000..81f206ca8a38 --- /dev/null +++ b/.eslint/require-path-to-file-url.js @@ -0,0 +1,89 @@ +/** + * @type {import('eslint').Rule.RuleModule} + */ +export default { + meta: { + type: 'problem', + docs: { + description: 'require dynamic imports of computed file paths to go through pathToFileURL' + }, + schema: [], + messages: { + requirePathToFileURL: + 'Dynamic import() of a computed path must be wrapped in pathToFileURL(...).href — on Windows, absolute paths parse as URLs with the drive letter as protocol and fail to import. See https://github.com/sveltejs/kit/issues/16620' + } + }, + + create(context) { + /** + * Returns true if the expression is safe to pass to `import()`: + * a static specifier, a relative computed specifier, or a value + * wrapped in `pathToFileURL`/`new URL` + * @param {import('estree').Node} node + * @param {number} depth + * @returns {boolean} + */ + function is_safe(node, depth = 0) { + if (node.type === 'Literal') { + return true; + } + + if (node.type === 'TemplateLiteral') { + if (node.expressions.length === 0) return true; + + // a computed specifier with a static relative prefix resolves + // relative to the importing module — no drive letters involved + const prefix = node.quasis[0].value.cooked ?? ''; + return prefix.startsWith('./') || prefix.startsWith('../'); + } + + if (node.type === 'CallExpression' || node.type === 'NewExpression') { + const callee = node.callee; + if (callee.type !== 'Identifier') return false; + + // single-argument new URL(path) misparses absolute windows paths just like import(), so require a base + return ( + callee.name === 'pathToFileURL' || (callee.name === 'URL' && node.arguments.length > 1) + ); + } + + // `pathToFileURL(...).href` and `new URL(...).href` + if (node.type === 'MemberExpression') { + return ( + node.property.type === 'Identifier' && + node.property.name === 'href' && + is_safe(node.object, depth) + ); + } + + // resolve an identifier one hop to its declaration + if (node.type === 'Identifier' && depth === 0) { + const variable = context.sourceCode + .getScope(node) + .references.find((ref) => ref.identifier === node)?.resolved; + + const def = variable?.defs[0]; + + if ( + variable?.defs.length === 1 && + def?.type === 'Variable' && + def.node.init && + // a reassignment after a safe initializer would not be seen here + variable.references.every((ref) => !ref.isWrite() || ref.init) + ) { + return is_safe(def.node.init, depth + 1); + } + } + + return false; + } + + return { + ImportExpression(node) { + if (!is_safe(node.source)) { + context.report({ node: node.source, messageId: 'requirePathToFileURL' }); + } + } + }; + } +}; diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index d100760e66a1..57324c81b607 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -256,3 +256,16 @@ jobs: node-version: ${{ matrix.node-version }} - run: cd packages/kit && pnpm prepublishOnly - run: pnpm run test:others + test-others-windows: + runs-on: windows-latest + timeout-minutes: 30 + steps: + - run: git config --global core.autocrlf false + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 + with: + persist-credentials: false + - uses: ./.github/actions/node-setup + with: + node-version: 24 + - run: cd packages/kit && pnpm prepublishOnly + - run: pnpm run test:others:unit diff --git a/eslint.config.js b/eslint.config.js index 69d473346052..b4285eccfb8a 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -1,5 +1,6 @@ import svelte_config from '@sveltejs/eslint-config'; import noRuntimeToExportsImports from './.eslint/no-runtime-to-exports-imports.js'; +import requirePathToFileURL from './.eslint/require-path-to-file-url.js'; /** @type {import('eslint').Linter.Config[]} */ export default [ @@ -24,6 +25,28 @@ export default [ 'kit-custom/no-runtime-to-exports-imports': 'error' } }, + { + // code that runs in Node, where dynamic imports of absolute paths + // need `pathToFileURL` to work on Windows + files: [ + 'packages/kit/src/**/*.js', + 'packages/adapter-*/*.js', + 'packages/adapter-*/src/**/*.js', + 'packages/package/src/**/*.js' + ], + // the client runtime's dynamic imports are resolved by vite, not Node + ignores: ['packages/kit/src/runtime/**'], + plugins: { + 'kit-node-custom': { + rules: { + 'require-path-to-file-url': requirePathToFileURL + } + } + }, + rules: { + 'kit-node-custom/require-path-to-file-url': 'error' + } + }, { ignores: [ '**/.svelte-kit', diff --git a/package.json b/package.json index a0a5d07e36e6..9891e82b4d6c 100644 --- a/package.json +++ b/package.json @@ -17,6 +17,7 @@ "test:svelte-async:build": "pnpm run --dir packages/kit test:svelte-async:build", "test:vite-ecosystem-ci": "pnpm --dir packages/kit test", "test:others": "pnpm -r --filter='./packages/*' --filter=!./packages/kit/ --workspace-concurrency=1 test", + "test:others:unit": "pnpm -r --filter=\"./packages/*\" --filter=\"!./packages/kit\" --workspace-concurrency=1 test:unit", "test:unit": "vitest run", "check": "pnpm -r prepublishOnly && pnpm -r check", "lint": "pnpm -r lint && echo '\nRunning eslint...' && eslint --cache --cache-location node_modules/.eslintcache 'packages/**/*.{js,d.ts}'", diff --git a/packages/adapter-auto/package.json b/packages/adapter-auto/package.json index 7ec1e0d1f2d2..c41df551b7d5 100644 --- a/packages/adapter-auto/package.json +++ b/packages/adapter-auto/package.json @@ -36,7 +36,8 @@ "lint": "prettier --check .", "format": "pnpm lint --write", "check": "tsc", - "test": "vitest run" + "test": "vitest run", + "test:unit": "vitest run" }, "devDependencies": { "@sveltejs/kit": "workspace:^", diff --git a/packages/adapter-netlify/index.js b/packages/adapter-netlify/index.js index 6380d6052e0c..f073adee206c 100644 --- a/packages/adapter-netlify/index.js +++ b/packages/adapter-netlify/index.js @@ -1,6 +1,6 @@ import { existsSync, mkdirSync, readdirSync, readFileSync, rmSync, writeFileSync } from 'node:fs'; import { join, posix } from 'node:path'; -import { fileURLToPath } from 'node:url'; +import { fileURLToPath, pathToFileURL } from 'node:url'; import { builtinModules } from 'node:module'; import process from 'node:process'; import toml from '@iarna/toml'; @@ -378,8 +378,7 @@ async function generate_edge_functions({ builder }) { writeFileSync(`${tmp}/manifest.js`, `export const manifest = ${manifest};\n`); /** @type {{ assets: Set }} */ - // we have to prepend the file:// protocol because Windows doesn't support absolute path imports - const { assets } = (await import(`file://${tmp}/manifest.js`)).manifest; + const { assets } = (await import(pathToFileURL(`${tmp}/manifest.js`).href)).manifest; const path = '/*'; // We only need to specify paths without the trailing slash because diff --git a/packages/adapter-node/package.json b/packages/adapter-node/package.json index 82b79509ddcb..970675c93d46 100644 --- a/packages/adapter-node/package.json +++ b/packages/adapter-node/package.json @@ -36,6 +36,7 @@ "dev": "rolldown -cw", "build": "rolldown -c", "test": "vitest run", + "test:unit": "vitest run", "check": "tsc", "lint": "prettier --check .", "format": "pnpm lint --write", diff --git a/packages/kit/src/utils/import.js b/packages/kit/src/utils/import.js index 19b93b119db8..5501f87810c1 100644 --- a/packages/kit/src/utils/import.js +++ b/packages/kit/src/utils/import.js @@ -54,6 +54,7 @@ export async function import_peer(dependency, root) { try { return await import(/* @vite-ignore */ pathToFileURL(resolve_peer(dependency, root)).href); } catch { + // eslint-disable-next-line kit-node-custom/require-path-to-file-url -- bare package specifier, not a path return await import(/* @vite-ignore */ dependency); } } diff --git a/packages/kit/src/version.spec.js b/packages/kit/src/version.spec.js index fd4073523494..6bf8b4c4bed4 100644 --- a/packages/kit/src/version.spec.js +++ b/packages/kit/src/version.spec.js @@ -4,11 +4,10 @@ import { assert, describe, it } from 'vitest'; // runs the version generation as a side-effect of importing import '../scripts/generate-version.js'; -import { join } from 'node:path'; describe('@sveltejs/kit VERSION', () => { it('should be the exact version from package.json', async () => { - const { VERSION } = await import(join(import.meta.dirname, 'version.js')); + const { VERSION } = await import(new URL('./version.js', import.meta.url).href); const pkg = JSON.parse( readFileSync(fileURLToPath(new URL('../package.json', import.meta.url)), 'utf-8') ); diff --git a/packages/package/package.json b/packages/package/package.json index 906299547c1a..7034d57ef395 100644 --- a/packages/package/package.json +++ b/packages/package/package.json @@ -56,7 +56,8 @@ "check": "tsc", "check:all": "tsc && pnpm -r --filter=\"./**\" check", "format": "pnpm lint --write", - "test": "vitest run" + "test": "vitest run", + "test:unit": "vitest run" }, "exports": { "./package.json": "./package.json" diff --git a/packages/package/src/config.js b/packages/package/src/config.js index 94544be7d471..4aac61b68f45 100644 --- a/packages/package/src/config.js +++ b/packages/package/src/config.js @@ -42,6 +42,7 @@ async function import_peer(dependency, root) { try { return await import(/* @vite-ignore */ pathToFileURL(resolve_peer(dependency, root)).href); } catch { + // eslint-disable-next-line kit-node-custom/require-path-to-file-url -- bare package specifier, not a path return await import(/* @vite-ignore */ dependency); } } From 4da1b4b2a5e5c45f819090856b9bd365459cacc6 Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Sun, 9 Aug 2026 06:39:04 -0400 Subject: [PATCH 464/545] chore: tidy up write_types unit tests (#16693) --- eslint.config.js | 1 + .../src/core/sync/write_types/index.spec.js | 2 ++ .../write_types/test/actions/tsconfig.json | 17 ++++------------- .../write_types/test/app-types/tsconfig.json | 19 +++++-------------- .../test/layout-advanced/tsconfig.json | 17 ++++------------- .../write_types/test/layout/tsconfig.json | 17 ++++------------- .../test/param-type-inference/tsconfig.json | 15 +++------------ .../tsconfig.json | 17 ++++------------- .../simple-page-server-only/tsconfig.json | 17 ++++------------- .../simple-page-shared-only/tsconfig.json | 17 ++++------------- .../tsconfig.json | 17 ++++------------- .../sync/write_types/test/slugs/tsconfig.json | 17 ++++------------- 12 files changed, 43 insertions(+), 130 deletions(-) diff --git a/eslint.config.js b/eslint.config.js index b4285eccfb8a..13e17f225d8d 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -59,6 +59,7 @@ export default [ 'packages/adapter-node/files', 'packages/kit/src/core/config/fixtures/multiple', // dir contains svelte config with multiple extensions tripping eslint 'packages/kit/src/core/sync/create_manifest_data/test/samples/**/*', + 'packages/kit/src/core/sync/write_types/test/*/**/*', 'packages/kit/types/index.d.ts', // generated file 'packages/*/test/apps/**/*', 'packages/*/test/**/build/**', diff --git a/packages/kit/src/core/sync/write_types/index.spec.js b/packages/kit/src/core/sync/write_types/index.spec.js index 4bad115fabe7..1f44193f382e 100644 --- a/packages/kit/src/core/sync/write_types/index.spec.js +++ b/packages/kit/src/core/sync/write_types/index.spec.js @@ -8,6 +8,7 @@ import { tweak_types, write_all_types } from './index.js'; import { write_app_types } from '../write_app_types.js'; import { validate_config } from '../../config/index.js'; import { write_env } from '../write_env.js'; +import { write_tsconfig } from '../write_tsconfig/index.js'; const cwd = path.join(import.meta.dirname, 'test'); @@ -33,6 +34,7 @@ function run_test(dir) { write_all_types(initial, manifest, root); write_app_types(initial.kit, manifest, root); + write_tsconfig(initial.kit, root); write_env('', {}, root); } diff --git a/packages/kit/src/core/sync/write_types/test/actions/tsconfig.json b/packages/kit/src/core/sync/write_types/test/actions/tsconfig.json index 69890689bee2..26cbb36daef1 100644 --- a/packages/kit/src/core/sync/write_types/test/actions/tsconfig.json +++ b/packages/kit/src/core/sync/write_types/test/actions/tsconfig.json @@ -1,18 +1,9 @@ { + "extends": "$app/tsconfig", "compilerOptions": { - "allowJs": true, - "checkJs": true, - "noEmit": true, - "target": "esnext", - "module": "esnext", - "moduleResolution": "bundler", "paths": { "@sveltejs/kit": ["../../../../../exports/public"], - "types": ["../../../../../types/internal"], - "$app/types": ["../../../../../types/ambient.d.ts"] - }, - "types": ["node"] - }, - "include": ["./**/*.js", "./**/*.ts", ".svelte-kit/non-ambient.d.ts"], - "exclude": ["..svelte-kit/**"] + "types": ["../../../../../types/internal"] + } + } } diff --git a/packages/kit/src/core/sync/write_types/test/app-types/tsconfig.json b/packages/kit/src/core/sync/write_types/test/app-types/tsconfig.json index db3fd82b4d9d..efff86512ab5 100644 --- a/packages/kit/src/core/sync/write_types/test/app-types/tsconfig.json +++ b/packages/kit/src/core/sync/write_types/test/app-types/tsconfig.json @@ -1,20 +1,11 @@ { + "extends": "$app/tsconfig", "compilerOptions": { - "allowJs": true, - "checkJs": true, - "exactOptionalPropertyTypes": true, - "noEmit": true, - "strictNullChecks": true, - "target": "esnext", - "module": "esnext", - "moduleResolution": "bundler", "paths": { "@sveltejs/kit": ["../../../../../exports/public"], - "types": ["../../../../../types/internal"], - "$app/types": ["../../../../../types/ambient.d.ts"] + "types": ["../../../../../types/internal"] }, - "types": ["node"] - }, - "include": ["./**/*.js", "./**/*.ts", ".svelte-kit/non-ambient.d.ts", "node_modules/$app/types"], - "exclude": ["..svelte-kit/**"] + "exactOptionalPropertyTypes": true, + "strictNullChecks": true + } } diff --git a/packages/kit/src/core/sync/write_types/test/layout-advanced/tsconfig.json b/packages/kit/src/core/sync/write_types/test/layout-advanced/tsconfig.json index 69890689bee2..26cbb36daef1 100644 --- a/packages/kit/src/core/sync/write_types/test/layout-advanced/tsconfig.json +++ b/packages/kit/src/core/sync/write_types/test/layout-advanced/tsconfig.json @@ -1,18 +1,9 @@ { + "extends": "$app/tsconfig", "compilerOptions": { - "allowJs": true, - "checkJs": true, - "noEmit": true, - "target": "esnext", - "module": "esnext", - "moduleResolution": "bundler", "paths": { "@sveltejs/kit": ["../../../../../exports/public"], - "types": ["../../../../../types/internal"], - "$app/types": ["../../../../../types/ambient.d.ts"] - }, - "types": ["node"] - }, - "include": ["./**/*.js", "./**/*.ts", ".svelte-kit/non-ambient.d.ts"], - "exclude": ["..svelte-kit/**"] + "types": ["../../../../../types/internal"] + } + } } diff --git a/packages/kit/src/core/sync/write_types/test/layout/tsconfig.json b/packages/kit/src/core/sync/write_types/test/layout/tsconfig.json index 69890689bee2..26cbb36daef1 100644 --- a/packages/kit/src/core/sync/write_types/test/layout/tsconfig.json +++ b/packages/kit/src/core/sync/write_types/test/layout/tsconfig.json @@ -1,18 +1,9 @@ { + "extends": "$app/tsconfig", "compilerOptions": { - "allowJs": true, - "checkJs": true, - "noEmit": true, - "target": "esnext", - "module": "esnext", - "moduleResolution": "bundler", "paths": { "@sveltejs/kit": ["../../../../../exports/public"], - "types": ["../../../../../types/internal"], - "$app/types": ["../../../../../types/ambient.d.ts"] - }, - "types": ["node"] - }, - "include": ["./**/*.js", "./**/*.ts", ".svelte-kit/non-ambient.d.ts"], - "exclude": ["..svelte-kit/**"] + "types": ["../../../../../types/internal"] + } + } } diff --git a/packages/kit/src/core/sync/write_types/test/param-type-inference/tsconfig.json b/packages/kit/src/core/sync/write_types/test/param-type-inference/tsconfig.json index f477e5594cef..3a633eecc22e 100644 --- a/packages/kit/src/core/sync/write_types/test/param-type-inference/tsconfig.json +++ b/packages/kit/src/core/sync/write_types/test/param-type-inference/tsconfig.json @@ -1,19 +1,10 @@ { + "extends": "$app/tsconfig", "compilerOptions": { - "allowJs": true, - "checkJs": true, - "noEmit": true, - "target": "esnext", - "module": "esnext", - "moduleResolution": "bundler", "paths": { "@sveltejs/kit": ["../../../../../exports/public"], "types": ["../../../../../types/internal"], - "$app/types": ["../../../../../types/ambient.d.ts"], "$app/paths/types.js": ["../../../../../runtime/app/paths/types.d.ts"] - }, - "types": ["node"] - }, - "include": ["./**/*.js", "./**/*.ts", ".svelte-kit/non-ambient.d.ts", "node_modules/$app/types"], - "exclude": ["..svelte-kit/**"] + } + } } diff --git a/packages/kit/src/core/sync/write_types/test/simple-page-server-and-shared/tsconfig.json b/packages/kit/src/core/sync/write_types/test/simple-page-server-and-shared/tsconfig.json index 69890689bee2..26cbb36daef1 100644 --- a/packages/kit/src/core/sync/write_types/test/simple-page-server-and-shared/tsconfig.json +++ b/packages/kit/src/core/sync/write_types/test/simple-page-server-and-shared/tsconfig.json @@ -1,18 +1,9 @@ { + "extends": "$app/tsconfig", "compilerOptions": { - "allowJs": true, - "checkJs": true, - "noEmit": true, - "target": "esnext", - "module": "esnext", - "moduleResolution": "bundler", "paths": { "@sveltejs/kit": ["../../../../../exports/public"], - "types": ["../../../../../types/internal"], - "$app/types": ["../../../../../types/ambient.d.ts"] - }, - "types": ["node"] - }, - "include": ["./**/*.js", "./**/*.ts", ".svelte-kit/non-ambient.d.ts"], - "exclude": ["..svelte-kit/**"] + "types": ["../../../../../types/internal"] + } + } } diff --git a/packages/kit/src/core/sync/write_types/test/simple-page-server-only/tsconfig.json b/packages/kit/src/core/sync/write_types/test/simple-page-server-only/tsconfig.json index 69890689bee2..26cbb36daef1 100644 --- a/packages/kit/src/core/sync/write_types/test/simple-page-server-only/tsconfig.json +++ b/packages/kit/src/core/sync/write_types/test/simple-page-server-only/tsconfig.json @@ -1,18 +1,9 @@ { + "extends": "$app/tsconfig", "compilerOptions": { - "allowJs": true, - "checkJs": true, - "noEmit": true, - "target": "esnext", - "module": "esnext", - "moduleResolution": "bundler", "paths": { "@sveltejs/kit": ["../../../../../exports/public"], - "types": ["../../../../../types/internal"], - "$app/types": ["../../../../../types/ambient.d.ts"] - }, - "types": ["node"] - }, - "include": ["./**/*.js", "./**/*.ts", ".svelte-kit/non-ambient.d.ts"], - "exclude": ["..svelte-kit/**"] + "types": ["../../../../../types/internal"] + } + } } diff --git a/packages/kit/src/core/sync/write_types/test/simple-page-shared-only/tsconfig.json b/packages/kit/src/core/sync/write_types/test/simple-page-shared-only/tsconfig.json index 69890689bee2..26cbb36daef1 100644 --- a/packages/kit/src/core/sync/write_types/test/simple-page-shared-only/tsconfig.json +++ b/packages/kit/src/core/sync/write_types/test/simple-page-shared-only/tsconfig.json @@ -1,18 +1,9 @@ { + "extends": "$app/tsconfig", "compilerOptions": { - "allowJs": true, - "checkJs": true, - "noEmit": true, - "target": "esnext", - "module": "esnext", - "moduleResolution": "bundler", "paths": { "@sveltejs/kit": ["../../../../../exports/public"], - "types": ["../../../../../types/internal"], - "$app/types": ["../../../../../types/ambient.d.ts"] - }, - "types": ["node"] - }, - "include": ["./**/*.js", "./**/*.ts", ".svelte-kit/non-ambient.d.ts"], - "exclude": ["..svelte-kit/**"] + "types": ["../../../../../types/internal"] + } + } } diff --git a/packages/kit/src/core/sync/write_types/test/slugs-layout-not-all-pages-have-load/tsconfig.json b/packages/kit/src/core/sync/write_types/test/slugs-layout-not-all-pages-have-load/tsconfig.json index 69890689bee2..26cbb36daef1 100644 --- a/packages/kit/src/core/sync/write_types/test/slugs-layout-not-all-pages-have-load/tsconfig.json +++ b/packages/kit/src/core/sync/write_types/test/slugs-layout-not-all-pages-have-load/tsconfig.json @@ -1,18 +1,9 @@ { + "extends": "$app/tsconfig", "compilerOptions": { - "allowJs": true, - "checkJs": true, - "noEmit": true, - "target": "esnext", - "module": "esnext", - "moduleResolution": "bundler", "paths": { "@sveltejs/kit": ["../../../../../exports/public"], - "types": ["../../../../../types/internal"], - "$app/types": ["../../../../../types/ambient.d.ts"] - }, - "types": ["node"] - }, - "include": ["./**/*.js", "./**/*.ts", ".svelte-kit/non-ambient.d.ts"], - "exclude": ["..svelte-kit/**"] + "types": ["../../../../../types/internal"] + } + } } diff --git a/packages/kit/src/core/sync/write_types/test/slugs/tsconfig.json b/packages/kit/src/core/sync/write_types/test/slugs/tsconfig.json index 69890689bee2..26cbb36daef1 100644 --- a/packages/kit/src/core/sync/write_types/test/slugs/tsconfig.json +++ b/packages/kit/src/core/sync/write_types/test/slugs/tsconfig.json @@ -1,18 +1,9 @@ { + "extends": "$app/tsconfig", "compilerOptions": { - "allowJs": true, - "checkJs": true, - "noEmit": true, - "target": "esnext", - "module": "esnext", - "moduleResolution": "bundler", "paths": { "@sveltejs/kit": ["../../../../../exports/public"], - "types": ["../../../../../types/internal"], - "$app/types": ["../../../../../types/ambient.d.ts"] - }, - "types": ["node"] - }, - "include": ["./**/*.js", "./**/*.ts", ".svelte-kit/non-ambient.d.ts"], - "exclude": ["..svelte-kit/**"] + "types": ["../../../../../types/internal"] + } + } } From 58dfda5845f7e07f94b1fc92280f13d2857e39df Mon Sep 17 00:00:00 2001 From: Tee Ming Date: Mon, 10 Aug 2026 01:47:43 +0800 Subject: [PATCH 465/545] chore: skip unnecessary type checks (#16698) There's no real need to run prepublish and check on the playground and the build-error test apps. This shaves off 10 seconds for `pnpm check` --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 9891e82b4d6c..488a41cf5967 100644 --- a/package.json +++ b/package.json @@ -19,7 +19,7 @@ "test:others": "pnpm -r --filter='./packages/*' --filter=!./packages/kit/ --workspace-concurrency=1 test", "test:others:unit": "pnpm -r --filter=\"./packages/*\" --filter=\"!./packages/kit\" --workspace-concurrency=1 test:unit", "test:unit": "vitest run", - "check": "pnpm -r prepublishOnly && pnpm -r check", + "check": "pnpm --filter='./packages/**' prepublishOnly && pnpm --filter='./packages/**' --filter='!./packages/kit/test/build-errors/**' check", "lint": "pnpm -r lint && echo '\nRunning eslint...' && eslint --cache --cache-location node_modules/.eslintcache 'packages/**/*.{js,d.ts}'", "format": "pnpm -r format", "precommit": "pnpm format && pnpm lint", From 1dfcb16bf16f590d863d8da7212af37d9575443e Mon Sep 17 00:00:00 2001 From: Tee Ming Date: Mon, 10 Aug 2026 05:03:49 +0800 Subject: [PATCH 466/545] docs: add types for snapshot snippet (#16701) fixes kit 3 previews --- documentation/docs/30-advanced/65-snapshots.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/documentation/docs/30-advanced/65-snapshots.md b/documentation/docs/30-advanced/65-snapshots.md index 616e06341a3c..0d1d3c6018f4 100644 --- a/documentation/docs/30-advanced/65-snapshots.md +++ b/documentation/docs/30-advanced/65-snapshots.md @@ -33,6 +33,11 @@ When you navigate away from this page — including via [shallow routing](shallo Snapshots must have a unique ID in order to survive across component remounts and page reloads. By default, this is generated from the stack trace when `snapshot(...)` is called, but you can also explicitly provide an `id` to (for example) keep snapshots stable across deployments, even if the stack trace differs because of changes to the source code, or to distinguish snapshots created via a shared wrapper function or in multiple instances of the same component: ```js +import { snapshot } from '$app/navigation'; + +let comment = ''; + +// ---cut--- snapshot({ +++id: 'comment',+++ capture: () => comment, From 617950f107869972f047334d59b6020888612b3e Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 10 Aug 2026 04:53:36 -0400 Subject: [PATCH 467/545] Version Packages (next) (#16686) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR was opened by the [Changesets release](https://github.com/changesets/action) GitHub action. When you're ready to do a release, you can merge this and the packages will be published to npm automatically. If you're not ready to do a release yet, that's fine, whenever you add more changesets to version-3, this PR will be updated. ⚠️⚠️⚠️⚠️⚠️⚠️ `version-3` is currently in **pre mode** so this branch has prereleases rather than normal releases. If you want to exit prereleases, run `changeset pre exit` on `version-3`. ⚠️⚠️⚠️⚠️⚠️⚠️ # Releases ## @sveltejs/kit@3.0.0-next.17 ### Major Changes - breaking: enhanced cross-page form actions now navigate to the action page on success and failure, matching native form behavior ([#16684](https://github.com/sveltejs/kit/pull/16684)) ### Minor Changes - chore: deprecate `export const snapshot` in favour of the `snapshot` helper ([#16687](https://github.com/sveltejs/kit/pull/16687)) - feat: add `snapshot` helper to `$app/navigation` ([#16685](https://github.com/sveltejs/kit/pull/16685)) ## @sveltejs/adapter-netlify@7.0.0-next.7 ### Patch Changes - fix: import the generated manifest via `pathToFileURL`, which handles special characters in the project path ([#16649](https://github.com/sveltejs/kit/pull/16649)) - Updated dependencies [[`c66e589`](https://github.com/sveltejs/kit/commit/c66e589d9ba2dba7577c2c4857c8989dd65c066d), [`0bee0e8`](https://github.com/sveltejs/kit/commit/0bee0e8f2bed771a92a3d6860363cda7c710839a), [`9703b94`](https://github.com/sveltejs/kit/commit/9703b94b51d71ffd5ebbce8229d35695db790f15)]: - @sveltejs/kit@3.0.0-next.17 Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- .changeset/{ => pre}/hungry-jokes-repeat.md | 0 .changeset/{ => pre}/snapshot-deprecate.md | 0 .changeset/{ => pre}/snapshot-helper.md | 0 .changeset/{ => pre}/tangy-llamas-attack.md | 0 packages/adapter-netlify/CHANGELOG.md | 8 ++++++++ packages/adapter-netlify/package.json | 2 +- packages/kit/CHANGELOG.md | 12 ++++++++++++ packages/kit/package.json | 2 +- packages/kit/src/version.js | 2 +- 9 files changed, 23 insertions(+), 3 deletions(-) rename .changeset/{ => pre}/hungry-jokes-repeat.md (100%) rename .changeset/{ => pre}/snapshot-deprecate.md (100%) rename .changeset/{ => pre}/snapshot-helper.md (100%) rename .changeset/{ => pre}/tangy-llamas-attack.md (100%) diff --git a/.changeset/hungry-jokes-repeat.md b/.changeset/pre/hungry-jokes-repeat.md similarity index 100% rename from .changeset/hungry-jokes-repeat.md rename to .changeset/pre/hungry-jokes-repeat.md diff --git a/.changeset/snapshot-deprecate.md b/.changeset/pre/snapshot-deprecate.md similarity index 100% rename from .changeset/snapshot-deprecate.md rename to .changeset/pre/snapshot-deprecate.md diff --git a/.changeset/snapshot-helper.md b/.changeset/pre/snapshot-helper.md similarity index 100% rename from .changeset/snapshot-helper.md rename to .changeset/pre/snapshot-helper.md diff --git a/.changeset/tangy-llamas-attack.md b/.changeset/pre/tangy-llamas-attack.md similarity index 100% rename from .changeset/tangy-llamas-attack.md rename to .changeset/pre/tangy-llamas-attack.md diff --git a/packages/adapter-netlify/CHANGELOG.md b/packages/adapter-netlify/CHANGELOG.md index 8634572a399f..b8a5541f9fd6 100644 --- a/packages/adapter-netlify/CHANGELOG.md +++ b/packages/adapter-netlify/CHANGELOG.md @@ -1,5 +1,13 @@ # @sveltejs/adapter-netlify +## 7.0.0-next.7 + +### Patch Changes + +- fix: import the generated manifest via `pathToFileURL`, which handles special characters in the project path ([#16649](https://github.com/sveltejs/kit/pull/16649)) +- Updated dependencies [[`c66e589`](https://github.com/sveltejs/kit/commit/c66e589d9ba2dba7577c2c4857c8989dd65c066d), [`0bee0e8`](https://github.com/sveltejs/kit/commit/0bee0e8f2bed771a92a3d6860363cda7c710839a), [`9703b94`](https://github.com/sveltejs/kit/commit/9703b94b51d71ffd5ebbce8229d35695db790f15)]: + - @sveltejs/kit@3.0.0-next.17 + ## 7.0.0-next.6 ### Major Changes diff --git a/packages/adapter-netlify/package.json b/packages/adapter-netlify/package.json index 9ea00462b9bb..5972e814d012 100644 --- a/packages/adapter-netlify/package.json +++ b/packages/adapter-netlify/package.json @@ -1,6 +1,6 @@ { "name": "@sveltejs/adapter-netlify", - "version": "7.0.0-next.6", + "version": "7.0.0-next.7", "description": "A SvelteKit adapter that creates a Netlify app", "keywords": [ "adapter", diff --git a/packages/kit/CHANGELOG.md b/packages/kit/CHANGELOG.md index 64358951a54a..aad5a98a6987 100644 --- a/packages/kit/CHANGELOG.md +++ b/packages/kit/CHANGELOG.md @@ -1,5 +1,17 @@ # @sveltejs/kit +## 3.0.0-next.17 + +### Major Changes + +- breaking: enhanced cross-page form actions now navigate to the action page on success and failure, matching native form behavior ([#16684](https://github.com/sveltejs/kit/pull/16684)) + +### Minor Changes + +- chore: deprecate `export const snapshot` in favour of the `snapshot` helper ([#16687](https://github.com/sveltejs/kit/pull/16687)) + +- feat: add `snapshot` helper to `$app/navigation` ([#16685](https://github.com/sveltejs/kit/pull/16685)) + ## 3.0.0-next.16 ### Patch Changes diff --git a/packages/kit/package.json b/packages/kit/package.json index 057187c38ce2..c57d11295af8 100644 --- a/packages/kit/package.json +++ b/packages/kit/package.json @@ -1,6 +1,6 @@ { "name": "@sveltejs/kit", - "version": "3.0.0-next.16", + "version": "3.0.0-next.17", "description": "SvelteKit is the fastest way to build Svelte apps", "keywords": [ "framework", diff --git a/packages/kit/src/version.js b/packages/kit/src/version.js index 297a4238f14e..09fba24ff906 100644 --- a/packages/kit/src/version.js +++ b/packages/kit/src/version.js @@ -1,4 +1,4 @@ // generated during release, do not modify /** @type {string} */ -export const VERSION = '3.0.0-next.16'; +export const VERSION = '3.0.0-next.17'; From cdee64921069e8f425767221b5a3bf1613271c75 Mon Sep 17 00:00:00 2001 From: Tee Ming Date: Mon, 10 Aug 2026 21:58:28 +0800 Subject: [PATCH 468/545] docs: fix broken links (#16706) --- documentation/docs/20-core-concepts/30-form-actions.md | 2 +- documentation/docs/30-advanced/65-snapshots.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/documentation/docs/20-core-concepts/30-form-actions.md b/documentation/docs/20-core-concepts/30-form-actions.md index 0fcc828819ff..29f553ae956f 100644 --- a/documentation/docs/20-core-concepts/30-form-actions.md +++ b/documentation/docs/20-core-concepts/30-form-actions.md @@ -456,7 +456,7 @@ The behaviour of `applyAction(result)` depends on `result.type`: - `redirect` — calls `goto(result.location, { refreshAll: true })` - `error` — renders the current route's nearest `+error` boundary with `result.error` -In all cases, [focus will be reset](accessibility#Focus-management). `applyAction` does not navigate to the `location` of a non-redirect result or refresh data. Use `update` to get the complete default enhanced behavior, including carrying form data and status into a cross-page navigation. When implementing enhancement manually, inspect `result.location` and use [`goto`](../$app-navigation#goto) or [`refreshAll`](../$app-navigation#refreshAll) as appropriate. +In all cases, [focus will be reset](accessibility#Focus-management). `applyAction` does not navigate to the `location` of a non-redirect result or refresh data. Use `update` to get the complete default enhanced behavior, including carrying form data and status into a cross-page navigation. When implementing enhancement manually, inspect `result.location` and use [`goto`]($app-navigation#goto) or [`refreshAll`]($app-navigation#refreshAll) as appropriate. ### Custom event listener diff --git a/documentation/docs/30-advanced/65-snapshots.md b/documentation/docs/30-advanced/65-snapshots.md index 0d1d3c6018f4..e65ebae56610 100644 --- a/documentation/docs/30-advanced/65-snapshots.md +++ b/documentation/docs/30-advanced/65-snapshots.md @@ -47,7 +47,7 @@ snapshot({ The optional `reset` callback runs on navigations where there is no captured value to restore, such as when a new history entry is created. -Captured values are serialized with [devalue](https://github.com/sveltejs/devalue), which handles JSON as well as types like `Date` and `Map`, and values handled by your [`transport`](hooks#Universal-hooks-transport) hook. The serialized data is persisted to `sessionStorage`, which allows the state to be restored when the page is reloaded, or when the user navigates back from a different site. +Captured values are serialized with [devalue](https://github.com/sveltejs/devalue), which handles JSON, objects such as `Date` and `Map`, and custom types specified in your [`transport`](hooks#transport) hook. The serialized data is persisted to `sessionStorage`, which allows the state to be restored when the page is reloaded, or when the user navigates back from a different site. > [!NOTE] Avoid returning very large objects from `capture` — once captured, objects will be retained in memory for the duration of the session, and in extreme cases may be too large to persist to `sessionStorage`. From 6f83ce8e7e6e1fd37b71164800210e962b98c301 Mon Sep 17 00:00:00 2001 From: Simon H <5968653+dummdidumm@users.noreply.github.com> Date: Mon, 10 Aug 2026 17:50:36 +0200 Subject: [PATCH 469/545] docs: add migration guide (#16505) closes #16173 --------- Co-authored-by: vercel[bot] <35613825+vercel[bot]@users.noreply.github.com> Co-authored-by: Mudiaga Arharhire <76590594+mudiageo@users.noreply.github.com> Co-authored-by: Theodore Brown Co-authored-by: Nic Polumeyv Co-authored-by: Rich Harris Co-authored-by: Rich Harris --- .../70-environment-variables.md | 12 +- .../35-migrating-to-sveltekit-3.md | 560 ++++++++++++++++++ packages/kit/src/runtime/server/csrf.js | 2 +- 3 files changed, 567 insertions(+), 7 deletions(-) create mode 100644 documentation/docs/60-appendix/35-migrating-to-sveltekit-3.md diff --git a/documentation/docs/20-core-concepts/70-environment-variables.md b/documentation/docs/20-core-concepts/70-environment-variables.md index 2a332ef1b1ef..40e1f15ddf31 100644 --- a/documentation/docs/20-core-concepts/70-environment-variables.md +++ b/documentation/docs/20-core-concepts/70-environment-variables.md @@ -19,7 +19,7 @@ After following the setup below, they can be imported via the following modules: > [!LEGACY] > The `$env/*` modules, along with `$app/environment` were deprecated in SvelteKit 3 (and will be removed in SvelteKit 4) in favour of explicit environment variables that were added in SvelteKit 2.62 as an experimental option. -### Setup +## Setup Add a `src/env.ts` (or `src/env.js`) file that exports a `variables` object: @@ -36,7 +36,7 @@ Each value in the object passed to [`defineEnvVars`](@sveltejs-kit-env#defineEnv > [!NOTE] `defineEnvVars` returns its argument unaltered — it exists purely to help with type safety. -### Private variables +## Private variables By default, all variables are considered private. For example, you don't want to reveal your `API_KEY`: @@ -59,7 +59,7 @@ import { API_KEY } from '$app/env/private'; The `$app/env/private` module cannot be imported into code that runs in the browser, so that you can't accidentally reveal your secrets in a JavaScript bundle. -### Public variables +## Public variables Some variables are perfectly safe — necessary, even — to expose to the browser. For these, we can specify `public: true`: @@ -104,7 +104,7 @@ export const variables = defineEnvVars({ ``` -### Validation +## Validation You can specify a [Standard Schema](https://standardschema.dev/) validator such as [Zod](https://zod.dev/) or [Valibot](https://valibot.dev/) to check that an environment variable value is correct: @@ -156,7 +156,7 @@ export const variables = defineEnvVars({ You can use validators to make values optional, or transform them (such as turning a string into a boolean, or parsing JSON) — see your validation library's documentation to learn how. -### Static variables +## Static variables By default, variables are dynamic. If a variable is configured with `static: true`, it will be inlined into your application code, enabling optimisations like dead-code elimination: @@ -200,7 +200,7 @@ SHOW_DEBUG_OVERLAY=true npm run build ...then the component will be included and shown. -### Documenting variables +## Documenting variables You can document the purpose of an environment variable by adding a `description`: diff --git a/documentation/docs/60-appendix/35-migrating-to-sveltekit-3.md b/documentation/docs/60-appendix/35-migrating-to-sveltekit-3.md new file mode 100644 index 000000000000..f29f896f7663 --- /dev/null +++ b/documentation/docs/60-appendix/35-migrating-to-sveltekit-3.md @@ -0,0 +1,560 @@ +--- +title: Migrating to SvelteKit v3 +--- + +SvelteKit 3 removes some legacy features, moves configuration out of `svelte.config.js` into the Vite plugin, and raises the minimum version of certain dependencies. For many of these breaking changes, you can automatically migrate: + +```bash +npx sv migrate sveltekit-3 +``` + +We recommend upgrading to the most recent 2.x version before upgrading to 3.0 so that you can take advantage of targeted deprecation warnings. + +## Updated dependencies + +SvelteKit 3 requires the following minimum versions: + +- Node v22.17 +- TypeScript v6 +- Svelte v5.56.4 +- Vite v8.0.12 (the first Vite 8 release bundling stable `rolldown` v1) +- `@sveltejs/vite-plugin-svelte` v7 + +Update the versions in your `package.json` and run your package manager's install command. + +## Configuration + +### svelte.config.js is no longer supported + +Instead of declaring project configuration in `svelte.config.js`, it must now be passed to the `sveltekit` Vite plugin in `vite.config.js`. Options that previously lived under `config.kit.*` are now top-level plugin options, alongside things like `compilerOptions`: + +```js +/// file: vite.config.js +import { defineConfig } from 'vite'; +import { sveltekit } from '@sveltejs/kit/vite'; +import adapter from '@sveltejs/adapter-auto'; + +export default defineConfig({ + plugins: [ ++++ sveltekit({ + compilerOptions: { experimental: { async: true }}, + adapter: adapter() + })+++ + ] +}); +``` + +See the [configuration docs](configuration) for further examples. + +### Removed options + +The following options are obsolete and should be removed from your `vite.config.js`: + +- `files.lib` ([details](#$lib-is-now-lib)) +- `experimental.handleRenderingErrors` is no longer required ([details](#Error-handling-Rendering-errors-are-now-handled)) +- `experimental.instrumentation` is no longer required ([details](#Observability)) +- `experimental.tracing` is now a top level `tracing` option ([details](#Observability)) +- `preloadStrategy` is removed — `modulepreload` is now supported everywhere and so is always used +- `prerender.origin` is removed in favour of `paths.origin` +- `csrf.checkOrigin` is removed in favour of `csrf.trustedOrigins` + +### Added options + +- `output.linkHeaderPreload` determines whether to use `Link` HTTP headers to preload resources like `.js` and `.css` files rather than injecting `` elements in the rendered HTML. This can cause issues when the headers grow too large, so SvelteKit 3 uses `` elements by default instead. +- `csrf.trustedOrigins` allows you to specify external origins that are allowed to make form submissions. +- `paths.origin` replaces `prerender.origin`, and should reflect your app's public-facing origin if it can't reliably be derived from request headers (for example because it's behind a reverse proxy). It will be used for CSRF checks on form submissions and remote function calls. If using `adapter-node`, this replaces the `ORIGIN` environment variable. + +### Changed options + +- `version.pollInterval` now defaults to one hour, meaning SvelteKit will periodically check for new deployments and set [`updated.current`]($app-state#updated) to `true` accordingly. Previously, no polling occurred by default. + +## `$lib` is now `#lib` + +The `$lib` alias is no longer generated automatically by SvelteKit. It is replaced by a `#lib` alias that you declare in the [`imports`](https://nodejs.org/api/packages.html#subpath-imports) field of your `package.json`, leveraging Node's built-in subpath imports (which Vite and TypeScript resolve natively). Add this to your `package.json`... + +```json +/// file: package.json +{ + "imports": { + "#lib": "./src/lib/index.js", + "#lib/*": "./src/lib/*" + } +} +``` + +...and replace `$lib` with `#lib` across your codebase. + +## `$app/environment` (renamed) + +The `$app/environment` module has been renamed to [`$app/env`]($app-env). It can now be imported inside your service worker, where previously if you needed to access `version` you would use the now-removed [`$service-worker`](#$service-worker-(removed)) module. + +## `$app/forms` + +Forms with [`use:enhance`]($app-forms#enhance) that specify an `action` on a different page will navigate to that page upon submission, rather than staying on the current page. This ensures that the enhanced behaviour more closely matches the native, non-enhanced behaviour. + +## `$app/manifest` + +A new [`$app/manifest`]($app-manifest) module gives you access to metadata about your app. You can import this anywhere in your app, including in service workers for offline caching purposes, for which you would previously use the now-removed [`$service-worker`](#$service-worker-(removed)) module. + +## `$app/navigation` + +### Changes to shallow routing + +For [shallow routing](shallow-routing), `pushState/replaceState` are deprecated in favor of [`goto`]($app-navigation#goto): + +```js +const state = {}; +import { goto } from '$app/navigation'; +// ---cut--- +// instead of this... +---pushState('/foo', state);--- +---replaceState('/bar', state);--- + +// ...do this: ++++goto('/foo', { shallow: true, state });+++ ++++goto('/bar', { shallow: true, replace: true, state });+++ +``` + +A new `persistState: true` option will cause `page.state` to be reapplied following a page reload. + +Shallow routing now triggers navigation hooks ([`beforeNavigate`]($app-navigation#beforeNavigate), [`onNavigate`]($app-navigation#onNavigate) and [`afterNavigate`]($app-navigation#afterNavigate)). You can filter them out by checking the `shallow` property of the object passed to those navigation hooks. + +### `invalidateAll` is deprecated in favour of `refreshAll` + +`invalidateAll` is deprecated in favour of [`refreshAll`]($app-navigation#refreshAll). The difference is that `refreshAll` does _not_ reset `page.state` to an empty object, which is usually what you want when using [shallow routing](shallow-routing). + +Additionally, calling `invalidateAll()` or `invalidate(...)` during an in-flight navigation no longer aborts that navigation. + +### `goto` options are updated + +In addition to the new `shallow` option described [above](#$app-navigation-Changes-to-shallow-routing), various [`goto`]($app-navigation#goto) options have changed: + +- `invalidateAll` is now `refreshAll`, to mirror the [above change](#$app-navigation-invalidateAll-is-deprecated-in-favour-of-refreshAll) +- `keepFocus: true` and `noScroll: true` have been combined as `reset: false` +- `replaceState` is now `replace` + +### `goto` rejects for URLs that don't resolve to a route + +`goto(...)` now rejects when called with a URL that does not resolve to a route within the app, matching the existing behaviour for external URLs. To navigate to an external URL, use `window.location.href = url`. + +### `delta` only exists for `popstate` navigations + +The `delta` property on navigation events ([`beforeNavigate`]($app-navigation#beforeNavigate), [`onNavigate`]($app-navigation#onNavigate) and [`afterNavigate`]($app-navigation#afterNavigate)) now only exists for `popstate` navigations (back/forward). It is `undefined` for all other navigation types. + +### `preloadData` can return an `error` result + +`preloadData(...)` now returns `{ type: 'error', status, error }` when the target page fails to load, instead of returning `{ type: 'loaded' }` with a 200 status. The `'redirect'` result now also includes the correct `status`. Add an `error` branch to any code that consumes the result: + +```js +import { preloadData } from '$app/navigation'; +const url = '/somewhere'; +// ---cut--- +const result = await preloadData(url); + +if (result.type === 'loaded') { + // ... ++++} else if (result.type === 'error') { + // do something in case of an error +}+++ +``` + +## `$app/paths` + +### `base`, `assets`, and `resolveRoute` removed + +The deprecated `base`, `assets`, and `resolveRoute` exports have been removed from [`$app/paths`]($app-paths). Use [`asset`]($app-paths#asset) and [`resolve`]($app-paths#resolve) instead: + +```js +let base = ''; +let assets = ''; +let slug = ''; +import { asset, resolve } from '$app/paths'; +// ---cut--- +// instead of this... +---const pathname = base + resolveRoute('/blog/[slug]', { slug });--- +---const file = assets + '/foo.png';--- + +// ...do this: ++++const pathname = resolve('/blog/[slug]', { slug });+++ ++++const file = asset('foo.png');+++ +``` + +The `Pathname` and `Asset` types have also been renamed to `Path` and `AssetPath`, and the leading `/` has been removed from those types — so `asset('/foo.png')` should now be `asset('foo.png')`, and pathnames passed to `resolve` no longer start with `/` (e.g. `resolve('blog/hello-world')`). Only route IDs start with `/` now. + +### Service workers can now import `$app/paths` + +Previously, you needed to import `base` from the now-removed [`$service-worker`](#$service-worker-(removed)) module. You can now use [`asset(...)`]($app-paths#asset) and [`resolve(...)`]($app-paths#resolve) from `$app/paths`. + +## `$app/service-worker` + +A new [`$app/service-worker`]($app-service-worker) provides type-safe access to the service worker execution context in your `src/service-worker/index.ts`, provided you have a `src/service-worker/tsconfig.json` that extends [`$app/tsconfig/service-worker`](#$app-tsconfig-service-worker). + +## `$app/state` + +### `page.url` is now readonly + +`page.url` is now typed as a `ReadonlyURL` with `ReadonlyURLSearchParams`, so mutating it — e.g. `page.url.searchParams.set(...)` or assigning to `page.url.pathname` — is now a type error. If you need a mutable URL, copy it first: + +```js +const url = +++new URL(page.url.href);+++ +url.searchParams.set('q', 'svelte'); +``` + +### `updated` updates automatically + +The `updated.current` property becomes `true` when SvelteKit detects that a new version of the app has been deployed. Previously, this would only happen following a manual `updated.check()`, or after a failed navigation. In SvelteKit 3 it happens more frequently: + +- on any navigation that results in data being fetched from the server +- on any remote function call +- when the window becomes visible or focused (e.g. when switching back from another tab) +- after a polling interval (which now defaults to one hour) + +Note that if you use a feature like Vercel's [skew protection](adapter-vercel#Skew-protection), passive detection on navigation and remote functions may report false negatives, since the request will be handled by the earlier deployment. Polling and event-based checks will still work, since they bypass skew protection. + +## `$app/stores` (removed) + +The `$app/stores` module (which exports the `$page`, `$navigating`, and `$updated` stores) has been removed. Use [`$app/state`]($app-state) instead, which provides fine-grained Svelte 5 [state](../svelte/$state), and remove the `$` prefix when reading values (i.e. `page` rather than `$page`): + +```svelte + + +

current pathname: {page.url.pathname}

+``` + +## `$app/tsconfig` + +Your project's `tsconfig.json` should now extend `$app/tsconfig` rather than `./.svelte-kit/tsconfig.json`. It should also specify `include` and `exclude` arrays, as `$app/tsconfig` does not specify these: + +```json +/// file: tsconfig.json +{ + "extends": "$app/tsconfig", + "include": ["src", "test", "*"], + "exclude": ["src/service-worker"] +} +``` + +Some essential `compilerOptions` (`isolatedModules` and `verbatimModuleSyntax`) are included in `$app/tsconfig`, alongside various options that are strongly recommend but which can be overridden in your own config. + +## `$app/tsconfig/service-worker` + +Your service worker needs to be part of a separate TypeScript project, otherwise the types for things like `fetch` events will be incorrect. To do this, exclude the service worker from your project's root `tsconfig.json`, and add a `src/service-worker/tsconfig.json` that extends `$app/tsconfig/service-worker`: + +```json +/// file: src/service-worker/tsconfig.json +{ + "extends": "$app/tsconfig/service-worker" +} +``` + +## `$env/...` (deprecated) + +The various `$env/...` modules have been deprecated in favour of `$app/env/private` and `$app/env/public` — see [Environment variables](environment-variables) for more details. + +## `$service-worker` (removed) + +The `$service-worker` module has been removed. Import `version` from [`$app/env`]($app-env), `assets`, `immutable` and `prerendered` from [`$app/manifest`]($app-manifest), and `resolved` from [`$app/paths`]($app-paths) instead. + +## `@sveltejs/kit` + +### `error`, `isHttpError`, `redirect`, and `isRedirect` refer to public types + +`error`, `isHttpError`, `redirect`, and `isRedirect` now refer to the public types rather than the internal classes. If you were importing the internal `HttpError`/`Redirect` classes from `@sveltejs/kit/internal`, or doing `instanceof` checks against them, use `isHttpError`/`isRedirect` from `@sveltejs/kit` instead. + +### `json` and `text` are deprecated + +The `json(...)` and `text(...)` helpers for generating responses are deprecated. Use `Response.json(...)` and `new Response(text)` instead. + +## `@sveltejs/kit/hooks` + +The `defineEnvVars` function has moved from `@sveltejs/kit/hooks` to `@sveltejs/kit/env`. + +## `@sveltejs/kit/node` + +The [`getRequest`](@sveltejs-kit-node#getRequest) and [`setResponse`](@sveltejs-kit-node#setResponse) helpers are now synchronous and no longer return Promises. Remove `await` from calls in custom Node servers or adapters. + +## `@sveltejs/kit/node/polyfills` (removed) + +The `@sveltejs/kit/node/polyfills` module (and the Node global shims in `adapter-node` and `adapter-netlify`) applied to Node versions that are no longer supported. Remove any `import '@sveltejs/kit/node/polyfills'` statements from your custom server code. + +## Security + +### `csrf.checkOrigin` replaced by `csrf.trustedOrigins` + +The deprecated `csrf.checkOrigin` option has been removed. CSRF protection is always on; instead of disabling it with `checkOrigin: false`, allow trusted cross-origin hosts with `csrf.trustedOrigins`. + +```js +/// file: vite.config.js +import { defineConfig } from 'vite'; +import { sveltekit } from '@sveltejs/kit/vite'; +// ---cut--- +export default defineConfig({ + plugins: [ + sveltekit({ + csrf: { + ---checkOrigin: false--- + +++trustedOrigins: ['https://trusted-site.com']+++ + } + }) + ] +}); +``` + +### Cross-origin form submissions require a `Content-Type` header + +Cross-origin mutative requests that omit a `Content-Type` header are now rejected as CSRF. Ensure cross-origin form submissions include a `Content-Type` header, or add the origin to `csrf.trustedOrigins`. + +### CORS for static assets in development is handled by Vite + +SvelteKit no longer sets `access-control-allow-origin: *` on every static asset request in development. CORS is now delegated to Vite's built-in middleware. If you rely on cross-origin access to static assets in dev, configure it in your Vite config: + +```js +/// file: vite.config.js +import { defineConfig } from 'vite'; +// ---cut--- +export default defineConfig({ + server: { ++++ cors: { origin: '*' }+++ + } +}); +``` + +## Cookies + +### Updated to `cookie` v2 + +SvelteKit now uses [`cookie`](https://npmx.dev/package/cookie) v2, which involves certain changes: + +- cookie names can only contain ASCII characters. Non-ASCII characters (including Latin-1 Supplement characters like `á`) are rejected +- the `CookieSerializeOptions` type has been renamed to `SerializeOptions` +- the `CookieParseOptions` type has been renamed to `ParseOptions` + +### Paths default to `'/'` + +When setting a cookie without an explicit `path` (which was previously forbidden), the path defaults to `'/'` rather than the current request path, meaning the cookie applies to the entire site. This matches what most developers expect. You can pass an explicit `path` if necessary: + +```ts +declare const cookies: import('@sveltejs/kit').Cookies; +declare const name: string; +declare const value: string; +// ---cut--- +cookies.set(name, value, +++{ path: '/some/path' }+++); +``` + +## Error handling + +### `App.Error` always includes `status` + +An `App.Error` object, such as the `error` prop of an `+error.svelte` component, has a `status` property reflecting the HTTP status of the error that caused it (e.g. 404 for a Not Found error, or 500 for a generic internal error), in addition to `message` and whatever properties you define in your [`app.d.ts`](types#app.d.ts) file. + +### `error(...)` arguments changed + +Previously, the second argument to [`error(...)`](@sveltejs-kit#error) could be either the `message` as a `string`, or an object containing `message` alongside any additional properties defined in `app.d.ts` (such as a tracking `code`). + +Now, the second argument must always be a `string`. If there are additional properties, they must be passed as a third argument. + +### `handleValidationError` is removed + +Validation errors are now passed to [`handleError`](hooks#handleError), with `kind: 'validation'`. + +### `handleError` receives all errors + +In SvelteKit 2, `handleError` was not called in the case of _expected_ errors, which is to say those created with the [`error(...)`](@sveltejs-kit#error) helper. In SvelteKit 3, _all_ errors are passed to `handleError`. See the [docs](hooks#handleError) for more information. + +### `handleError` can influence the status code + +If you need to control the HTTP status code used to render a page in the case of an error, you can do so by returning a `status` property from `handleError` alongside any other required properties of `App.Error`. + +### Rendering errors are now handled + +Errors thrown during rendering are now always routed through `handleError` and then passed to the nearest [error boundary](../svelte/svelte-boundary). Error boundaries are automatically created for each of your `+error.svelte` components. + +If you have an async `handleError` hook in `hooks.client.ts`, enable `compilerOptions.experimental.async` in the `sveltekit(...)` plugin options of your Vite config so it can be awaited during rendering. + +### Form action responses use the `fail` status code + +Enhanced form action responses now use the HTTP status code passed to `fail(...)` instead of always returning `200`. If you inspect status codes on enhanced form submissions (for example in a `use:enhance` callback or in tests), they now reflect the value passed to `fail`. + +### Sourcemaps are applied + +Sourcemaps are generated by default, and applied to stack traces when errors occur. For this to work in production (as opposed to `vite preview`), adapters need to avoid any destructive changes (such as rebundling without generating additional — and correct — sourcemaps). For first-party adapters this is a work in progress. + +## Params + +[Param matchers](advanced-routing#Matching) are no longer files inside the `src/params` directory. Declare all matchers in a single `src/params.ts` (or `src/params.js`) file using the `defineParams` helper. A matcher can be a function that returns a parsed value (or `undefined`, if the param does not match), or a [Standard Schema](https://standardschema.dev). + +```js +/// file: src/params.js +import { defineParams } from '@sveltejs/kit'; +import * as v from 'valibot'; + +export const params = defineParams({ + // schema variant + integer: v.pipe(v.string(), v.toNumber()), + + // function variant + fruit: (param) => { + if (param === 'apple' || param === 'orange') { + return param; + } + } +}); +``` + +## Observability + +Server-side [instrumentation](observability) now happens automatically if a `src/instrumentation.server.js` file exists. + +To opt into [OpenTelemetry](https://opentelemetry.io/) tracing, add `tracing.server` configuration: + +```js +import { defineConfig } from 'vite'; +import { sveltekit } from '@sveltejs/kit/vite'; +/// file: vite.config.js +// ---cut--- +export default defineConfig({ + plugins: [ + sveltekit({ + +++tracing: { server: true }+++ + }) + ] +}); +``` + +## Adapters + +All first-party adapters now require SvelteKit 3, alongside these adapter-specific changes: + +### `adapter-cloudflare` + + - minimum `wrangler` is now `^4.67.0` + - `@cloudflare/workers-types` upgraded + - `platform.context` removed in favour of `platform.ctx` + +### `adapter-node` + + - bundling now happens with `rolldown` + - the `ORIGIN` environment variable is removed (set `paths.origin` in your Vite config instead) + +### `adapter-netlify` + + - output now conforms to the stable [Netlify Frameworks API](https://docs.netlify.com/build/frameworks/frameworks-api/) + - deploying/previewing with the Netlify CLI requires `v17.31.0` or later (`npm i -g netlify-cli@latest`) + - edge function build target is `es2022` + +### `adapter-vercel` + + - the `edge` runtime is no longer supported + +### Adapter API changes + +For adapter authors, there are some additional changes: + +- adapters can augment the Vite config with additional plugins +- `builder.createEntries` has been removed — use `builder.writeClient`, `builder.writeServer` and `builder.writePrerendered` directly +- `builder.compress` returns a list of compressed files +- `builder.mkdirp` and `builder.rimraf` are deprecated in favour of `node:fs` methods + +## Responses + +### 204 responses return no content + +Returning a `204` (or any empty `2xx`) response from a `+server.js` handler now results in a response with no body, per the HTTP spec, rather than a SvelteKit envelope. Code that consumed the body of such responses needs to handle the empty body. + +### `resolve` always returns a `Promise` + +The `resolve` function passed to [`handle`](hooks#handle) is now typed to always return a `Promise` rather than `MaybePromise`. + +## Server-only modules + +### Files + +Server-only modules are now designated by a filename with a `server` segment, rather than a `.server.` infix — in other words, `stuff.server.ts`, `stuff.server.test.ts` and `server.ts` are all treated as server-only modules, whereas `server.ts` previously was not. + +### Directories + +Previously, any module inside `src/lib/server` was treated as server-only. This treatment now applies to _any_ `server` directory in the project with the exception of `src/routes` and your `static` directory. + +## Remote functions + +Remove functions are still considered experimental — opt in via the `experimental.remoteFunctions` flag alongside `compilerOptions.experimental.async`: + +```js +/// file: vite.config.js +import { defineConfig } from 'vite'; +import { sveltekit } from '@sveltejs/kit/vite'; +// ---cut--- +export default defineConfig({ + plugins: [ + sveltekit({ + compilerOptions: { + experimental: { + +++async: true+++ + } + }, + experimental: { + +++remoteFunctions: true+++ + } + }) + ] +}); +``` + +### Remote module filenames + +As with server-only modules, a `remote` segment in a filename designates a remote module — `stuff.remote.ts`, `stuff.remote.test.ts` and `remote.ts` are all remote modules. + +If `experimental.remoteFunctions` is not enabled, the existence of these files will cause an error. + +### `event.url`, `event.params`, and `event.route` cannot be accessed inside queries + +Accessing `event.url`, `event.params`, or `event.route` inside a remote `query` function now throws an error. These properties are not meaningful in the context of a remote function (which can be called from anywhere). Pass any values you need explicitly as arguments to the function. + +### Errors are typed as `App.Error | undefined` + +The `error` property on remote function resources (queries, live queries, forms, prerender functions) is now typed as `App.Error | undefined` rather than `any`, as the error is always transformed by `handleError`. + +### Form submissions require `field.as(...)` + +A form control must use attributes from a field associated with the current `form` object: + +```svelte + +``` + +Manually specifying a name (``) will cause the submission to be rejected. + +## Miscellaneous + +### Links to the current page cause a refresh + +If the user clicks a link that points to the current location, SvelteKit will `refreshAll()` instead of doing nothing. + +### `data-sveltekit-*` uses `false` instead of `'off'` + +The `'off'` value for `data-sveltekit-*` link attributes has been removed in favour of `false`. + +```svelte +------ +++++++ +``` + +### External redirects must be opted into + +To [`redirect`](@sveltejs-kit#redirect) to an external URL you must now pass an `external` option — either `true` to allow any external URL (except `javascript:` URLs, which remain blocked), or an array of allowed origins (which _can_ include `javascript:` URLs). + +```js +import { redirect } from '@sveltejs/kit'; +// ---cut--- +redirect(307, 'https://example.com', +++{ external: true }+++); +``` + +### Universal `config` takes precedence over server `config` + +Route `config` exported from a universal `+page.js` or `+layout.js` now takes precedence over `config` exported from the corresponding `+page.server.js` or `+layout.server.js`, matching how other page options are resolved. If you export `config` from both, move the canonical export to the universal file or consolidate them. + +### Service worker registrations use `type: 'module'` + +Module service workers are now widely supported. As such, SvelteKit will bundle and register your service worker as a module, rather than as a script. diff --git a/packages/kit/src/runtime/server/csrf.js b/packages/kit/src/runtime/server/csrf.js index 6d48fe3991e3..7119fd71fe5b 100644 --- a/packages/kit/src/runtime/server/csrf.js +++ b/packages/kit/src/runtime/server/csrf.js @@ -22,7 +22,7 @@ export function get_self_origin(paths_origin, url_origin) { /** * Determines whether a non-remote request should be rejected as a cross-site - * form submission (CSRF). Used by `respond.js` to gate form `POST`/`PUT`/ + * request forgery (CSRF). Used by `respond.js` to gate form `POST`/`PUT`/ * `PATCH`/`DELETE` requests whose `Origin` header doesn't match the app's * self-origin (and isn't in `trusted_origins`). * From 362d512dcf4c901771d3299612a8497620cfd7cb Mon Sep 17 00:00:00 2001 From: Tee Ming Date: Tue, 11 Aug 2026 00:38:03 +0800 Subject: [PATCH 470/545] docs: fix migration snippet (#16710) --- documentation/docs/60-appendix/35-migrating-to-sveltekit-3.md | 1 + 1 file changed, 1 insertion(+) diff --git a/documentation/docs/60-appendix/35-migrating-to-sveltekit-3.md b/documentation/docs/60-appendix/35-migrating-to-sveltekit-3.md index f29f896f7663..32e2899ff8ea 100644 --- a/documentation/docs/60-appendix/35-migrating-to-sveltekit-3.md +++ b/documentation/docs/60-appendix/35-migrating-to-sveltekit-3.md @@ -29,6 +29,7 @@ Update the versions in your `package.json` and run your package manager's instal Instead of declaring project configuration in `svelte.config.js`, it must now be passed to the `sveltekit` Vite plugin in `vite.config.js`. Options that previously lived under `config.kit.*` are now top-level plugin options, alongside things like `compilerOptions`: ```js +// @errors: 2307 ignore adapter auto types missing /// file: vite.config.js import { defineConfig } from 'vite'; import { sveltekit } from '@sveltejs/kit/vite'; From 919dd9d853dafe4b0e27248f89d1aaa89b6bfc31 Mon Sep 17 00:00:00 2001 From: ottomated <31470743+ottomated@users.noreply.github.com> Date: Mon, 10 Aug 2026 10:01:23 -0700 Subject: [PATCH 471/545] feat: allow adapter Vite plugins to be either pre or post (#16711) part of #16705 --- ### Please don't delete this checklist! Before submitting the PR, please make sure you do the following: - [ ] It's really useful if your PR references an issue where it is discussed ahead of time. In many cases, features are absent for a reason. For large changes, please create an RFC: https://github.com/sveltejs/rfcs - [ ] This message body should clearly illustrate what problems it solves. - [ ] Ideally, include a test that fails without this PR but passes with it. ### Tests - [x] Run the tests with `pnpm test` and lint the project with `pnpm lint` and `pnpm check` ### Changesets - [x] If your PR makes a change that should be noted in one or more packages' changelogs, generate a changeset by running `pnpm changeset` and following the prompts. Changesets that add features should be `minor` and those that fix bugs should be `patch`. Please prefix changeset messages with `feat:`, `fix:`, or `chore:`. --------- Co-authored-by: vercel[bot] <35613825+vercel[bot]@users.noreply.github.com> Co-authored-by: Vercel Co-authored-by: teemingc --- .changeset/strict-bees-arrive.md | 5 +++++ .../25-build-and-deploy/99-writing-adapters.md | 8 +++++--- packages/kit/src/exports/public.d.ts | 17 ++++++++++++----- packages/kit/src/exports/vite/index.js | 5 +++-- packages/kit/types/index.d.ts | 17 ++++++++++++----- 5 files changed, 37 insertions(+), 15 deletions(-) create mode 100644 .changeset/strict-bees-arrive.md diff --git a/.changeset/strict-bees-arrive.md b/.changeset/strict-bees-arrive.md new file mode 100644 index 000000000000..9943a53c21cd --- /dev/null +++ b/.changeset/strict-bees-arrive.md @@ -0,0 +1,5 @@ +--- +'@sveltejs/kit': major +--- + +breaking: separate adapter Vite plugins into `pre` and `post` diff --git a/documentation/docs/25-build-and-deploy/99-writing-adapters.md b/documentation/docs/25-build-and-deploy/99-writing-adapters.md index 204445e5e889..a4002696a018 100644 --- a/documentation/docs/25-build-and-deploy/99-writing-adapters.md +++ b/documentation/docs/25-build-and-deploy/99-writing-adapters.md @@ -41,9 +41,11 @@ export default function (options) { } }, vite: { - plugins: [ + plugins: { // add plugins here to integrate with Vite - ] + pre: [], + post: [] + } } }; @@ -51,7 +53,7 @@ export default function (options) { } ``` -Of these, `name` and `adapt` are required. `emulate`, `vite.plugins` and `supports` are optional. +Of these, `name` and `adapt` are required. `emulate`, `vite`, and `supports` are optional. Within the `adapt` method, there are a number of things that an adapter should do: diff --git a/packages/kit/src/exports/public.d.ts b/packages/kit/src/exports/public.d.ts index 64c852afbf78..cc2680c5c123 100644 --- a/packages/kit/src/exports/public.d.ts +++ b/packages/kit/src/exports/public.d.ts @@ -72,11 +72,18 @@ export interface Adapter { */ emulate?: () => MaybePromise; vite?: { - /** - * Plugins provided by the adapter are placed before any of SvelteKit's own plugins. - * @since 3.0.0 - */ - plugins?: Plugin[]; + plugins?: { + /** + * Vite plugins placed before any of SvelteKit's own plugins. + * @since 3.0.0 + */ + pre?: Plugin[]; + /** + * Vite plugins placed after any of SvelteKit's own plugins. + * @since 3.0.0 + */ + post?: Plugin[]; + }; }; } diff --git a/packages/kit/src/exports/vite/index.js b/packages/kit/src/exports/vite/index.js index a37f5e64fa6c..60492415edec 100644 --- a/packages/kit/src/exports/vite/index.js +++ b/packages/kit/src/exports/vite/index.js @@ -2056,7 +2056,7 @@ function kit({ svelte_config }) { return /** @type {Plugin[]} */ ( [ - svelte_config.kit.adapter?.vite?.plugins, + svelte_config.kit.adapter?.vite?.plugins?.pre, plugin_resolve_root, plugin_setup, plugin_remote_guard, @@ -2066,7 +2066,8 @@ function kit({ svelte_config }) { plugin_service_worker, plugin_service_worker_env, plugin_compile, - plugin_adapter + plugin_adapter, + svelte_config.kit.adapter?.vite?.plugins?.post ].filter(Boolean) ); } diff --git a/packages/kit/types/index.d.ts b/packages/kit/types/index.d.ts index 6122f53e10aa..0fee1c96649c 100644 --- a/packages/kit/types/index.d.ts +++ b/packages/kit/types/index.d.ts @@ -46,11 +46,18 @@ declare module '@sveltejs/kit' { */ emulate?: () => MaybePromise; vite?: { - /** - * Plugins provided by the adapter are placed before any of SvelteKit's own plugins. - * @since 3.0.0 - */ - plugins?: Plugin[]; + plugins?: { + /** + * Vite plugins placed before any of SvelteKit's own plugins. + * @since 3.0.0 + */ + pre?: Plugin[]; + /** + * Vite plugins placed after any of SvelteKit's own plugins. + * @since 3.0.0 + */ + post?: Plugin[]; + }; }; } From 18026d6043ee3877f25c4403efaab5444a9d099a Mon Sep 17 00:00:00 2001 From: Tee Ming Date: Tue, 11 Aug 2026 02:09:18 +0800 Subject: [PATCH 472/545] docs: use code fence (#16713) using a code fence in the example avoids shiki from rendering them as actual clickable links, which prevents our static site generator from erroring on them. The actual type hover in the IDE looks the exact same. --- packages/kit/src/exports/public.d.ts | 5 ++++- packages/kit/types/index.d.ts | 5 ++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/packages/kit/src/exports/public.d.ts b/packages/kit/src/exports/public.d.ts index cc2680c5c123..72838ec6a765 100644 --- a/packages/kit/src/exports/public.d.ts +++ b/packages/kit/src/exports/public.d.ts @@ -467,7 +467,10 @@ export interface KitConfig { * * CSRF checks only apply in production, not in local development. * @default [] - * @example ['https://checkout.stripe.com', 'https://accounts.google.com'] + * @example + * ```js + * ['https://checkout.stripe.com', 'https://accounts.google.com'] + * ``` */ trustedOrigins?: string[]; }; diff --git a/packages/kit/types/index.d.ts b/packages/kit/types/index.d.ts index 0fee1c96649c..8683e3b59be4 100644 --- a/packages/kit/types/index.d.ts +++ b/packages/kit/types/index.d.ts @@ -439,7 +439,10 @@ declare module '@sveltejs/kit' { * * CSRF checks only apply in production, not in local development. * @default [] - * @example ['https://checkout.stripe.com', 'https://accounts.google.com'] + * @example + * ```js + * ['https://checkout.stripe.com', 'https://accounts.google.com'] + * ``` */ trustedOrigins?: string[]; }; From d584eb78d61d4d5ac23d0e5aeb7a100c1ed32254 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 10 Aug 2026 15:06:43 -0400 Subject: [PATCH 473/545] Version Packages (next) (#16712) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR was opened by the [Changesets release](https://github.com/changesets/action) GitHub action. When you're ready to do a release, you can merge this and the packages will be published to npm automatically. If you're not ready to do a release yet, that's fine, whenever you add more changesets to version-3, this PR will be updated. ⚠️⚠️⚠️⚠️⚠️⚠️ `version-3` is currently in **pre mode** so this branch has prereleases rather than normal releases. If you want to exit prereleases, run `changeset pre exit` on `version-3`. ⚠️⚠️⚠️⚠️⚠️⚠️ # Releases ## @sveltejs/kit@3.0.0-next.18 ### Major Changes - breaking: separate adapter Vite plugins into `pre` and `post` ([#16711](https://github.com/sveltejs/kit/pull/16711)) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- .changeset/{ => pre}/strict-bees-arrive.md | 0 packages/kit/CHANGELOG.md | 6 ++++++ packages/kit/package.json | 2 +- packages/kit/src/version.js | 2 +- 4 files changed, 8 insertions(+), 2 deletions(-) rename .changeset/{ => pre}/strict-bees-arrive.md (100%) diff --git a/.changeset/strict-bees-arrive.md b/.changeset/pre/strict-bees-arrive.md similarity index 100% rename from .changeset/strict-bees-arrive.md rename to .changeset/pre/strict-bees-arrive.md diff --git a/packages/kit/CHANGELOG.md b/packages/kit/CHANGELOG.md index aad5a98a6987..2220cf27c552 100644 --- a/packages/kit/CHANGELOG.md +++ b/packages/kit/CHANGELOG.md @@ -1,5 +1,11 @@ # @sveltejs/kit +## 3.0.0-next.18 + +### Major Changes + +- breaking: separate adapter Vite plugins into `pre` and `post` ([#16711](https://github.com/sveltejs/kit/pull/16711)) + ## 3.0.0-next.17 ### Major Changes diff --git a/packages/kit/package.json b/packages/kit/package.json index c57d11295af8..d6d13e803262 100644 --- a/packages/kit/package.json +++ b/packages/kit/package.json @@ -1,6 +1,6 @@ { "name": "@sveltejs/kit", - "version": "3.0.0-next.17", + "version": "3.0.0-next.18", "description": "SvelteKit is the fastest way to build Svelte apps", "keywords": [ "framework", diff --git a/packages/kit/src/version.js b/packages/kit/src/version.js index 09fba24ff906..2c9f8a2b0fb6 100644 --- a/packages/kit/src/version.js +++ b/packages/kit/src/version.js @@ -1,4 +1,4 @@ // generated during release, do not modify /** @type {string} */ -export const VERSION = '3.0.0-next.17'; +export const VERSION = '3.0.0-next.18'; From 7d11304601c45df8b781e95e3682f6287ea01ee0 Mon Sep 17 00:00:00 2001 From: Tee Ming Date: Tue, 11 Aug 2026 03:14:04 +0800 Subject: [PATCH 474/545] chore: use tsgo for type checking (#16692) Uses typescript 7 for type checking and `svelte-check` across the repo. This shaves off another 15 seconds (on my machine). EDIT: Seems like CI wins much more. Previous PR got it down from 2m 20s -> 1m 40s. This PR gets it down to 40s. --------- Co-authored-by: GitButler --- .gitignore | 1 + packages/adapter-auto/index.js | 2 +- packages/adapter-auto/package.json | 2 +- packages/adapter-cloudflare/index.js | 2 +- packages/adapter-cloudflare/package.json | 2 +- packages/adapter-netlify/files/edge.js | 1 - packages/adapter-netlify/files/tsconfig.json | 15 + packages/adapter-netlify/index.js | 2 +- packages/adapter-netlify/package.json | 6 +- packages/adapter-netlify/tsconfig.json | 2 +- packages/adapter-node/index.js | 2 +- packages/adapter-node/package.json | 2 +- packages/adapter-static/index.js | 2 +- packages/adapter-static/package.json | 2 +- packages/adapter-vercel/index.js | 2 +- packages/adapter-vercel/package.json | 2 +- packages/enhanced-img/package.json | 2 +- packages/kit/package.json | 6 +- packages/kit/src/cli.js | 2 +- packages/kit/src/core/config/index.js | 2 +- packages/kit/src/core/env.js | 2 +- packages/kit/src/core/postbuild/analyse.js | 2 +- packages/kit/src/core/postbuild/prerender.js | 2 +- .../sync/create_manifest_data/index.spec.js | 3 +- packages/kit/src/core/sync/ts.js | 2 +- .../kit/src/core/sync/write_tsconfig/index.js | 2 +- .../write_types/test/actions/package.json | 5 +- .../write_types/test/app-types/package.json | 5 +- .../test/layout-advanced/package.json | 5 +- .../sync/write_types/test/layout/package.json | 5 +- .../test/param-type-inference/package.json | 3 +- .../package.json | 5 +- .../test/simple-page-server-only/package.json | 5 +- .../test/simple-page-shared-only/package.json | 5 +- .../package.json | 5 +- .../sync/write_types/test/slugs/package.json | 5 +- .../src/exports/vite/build/build_server.js | 4 +- packages/kit/src/exports/vite/dev/index.js | 3 +- packages/kit/src/runtime/app/paths/server.js | 6 +- .../kit/src/runtime/app/server/remote/form.js | 7 +- packages/kit/src/runtime/client/entry.js | 4 +- .../client/remote-functions/command.svelte.js | 68 +-- .../client/remote-functions/form.svelte.js | 139 ++--- .../src/runtime/server/page/server_routing.js | 2 +- packages/kit/src/utils/page_nodes.js | 5 +- packages/kit/test/apps/async/package.json | 3 +- .../apps/async/src/routes/remote/+page.svelte | 9 +- .../src/routes/remote/batch-ssr/+page.svelte | 2 +- .../src/routes/remote/batch/+page.svelte | 2 +- packages/kit/test/apps/basics/package.json | 3 +- .../form-errors-persist-fields/+page.svelte | 2 +- .../routes/actions/success-data/+page.svelte | 5 +- .../routes/actions/update-form/+page.svelte | 1 + packages/kit/test/apps/dev-only/package.json | 3 +- packages/kit/test/apps/embed/package.json | 3 +- .../test/apps/hash-based-routing/package.json | 3 +- packages/kit/test/apps/no-csr/package.json | 3 +- packages/kit/test/apps/no-ssr/package.json | 3 +- packages/kit/test/apps/options-2/package.json | 3 +- packages/kit/test/apps/options-3/package.json | 3 +- packages/kit/test/apps/options/package.json | 3 +- .../prerendered-app-error-pages/package.json | 8 +- packages/kit/test/apps/writes/package.json | 3 +- .../apps/env-private-dynamic/package.json | 5 +- .../env-private-service-worker/package.json | 5 +- .../apps/env-private/package.json | 5 +- .../package.json | 3 +- .../package.json | 3 +- .../package.json | 3 +- .../package.json | 3 +- .../package.json | 3 +- .../remote-function-without-flag/package.json | 5 +- .../apps/removed-lib-import/package.json | 5 +- .../package.json | 5 +- .../package.json | 5 +- .../apps/server-only-folder/package.json | 5 +- .../package.json | 5 +- .../apps/server-only-module/package.json | 5 +- .../apps/server-only-shared/package.json | 5 +- .../apps/syntax-error/package.json | 1 + .../kit/test/prerendering/basics/package.json | 3 +- .../prerendering/basics/test/tests.spec.js | 10 +- .../test/prerendering/options/package.json | 3 +- .../test/prerendering/paths-base/package.json | 3 +- packages/package/package.json | 10 +- packages/package/src/cli.js | 3 +- packages/package/src/config.js | 2 +- packages/package/src/typescript.js | 2 +- playgrounds/basic/package.json | 5 +- pnpm-lock.yaml | 543 +++++++++++++----- pnpm-workspace.yaml | 5 +- 91 files changed, 713 insertions(+), 367 deletions(-) create mode 100644 packages/adapter-netlify/files/tsconfig.json diff --git a/.gitignore b/.gitignore index e105f8313444..c06d169301c8 100644 --- a/.gitignore +++ b/.gitignore @@ -10,6 +10,7 @@ vite.config.js.timestamp-* .env .vercel_build_output .svelte-kit +.svelte-check .cloudflare .pnpm-debug.log .netlify diff --git a/packages/adapter-auto/index.js b/packages/adapter-auto/index.js index f2e5edf07c80..ef8aaf7ae0a4 100644 --- a/packages/adapter-auto/index.js +++ b/packages/adapter-auto/index.js @@ -136,7 +136,7 @@ async function get_adapter() { }; } -/** @type {import('./index.js').default} */ +/** @type {typeof import('./index.js').default} */ export default () => ({ name: '@sveltejs/adapter-auto', adapt: async (builder) => { diff --git a/packages/adapter-auto/package.json b/packages/adapter-auto/package.json index c41df551b7d5..d19b698ffec8 100644 --- a/packages/adapter-auto/package.json +++ b/packages/adapter-auto/package.json @@ -42,7 +42,7 @@ "devDependencies": { "@sveltejs/kit": "workspace:^", "@types/node": "catalog:", - "typescript": "catalog:", + "typescript": "catalog:typescript-native", "vitest": "catalog:" }, "peerDependencies": { diff --git a/packages/adapter-cloudflare/index.js b/packages/adapter-cloudflare/index.js index 185c964ceafc..53e9c7e5c4e1 100644 --- a/packages/adapter-cloudflare/index.js +++ b/packages/adapter-cloudflare/index.js @@ -13,7 +13,7 @@ import { const name = '@sveltejs/adapter-cloudflare'; -/** @type {import('./index.js').default} */ +/** @type {typeof import('./index.js').default} */ export default function (options = {}) { return { name, diff --git a/packages/adapter-cloudflare/package.json b/packages/adapter-cloudflare/package.json index 50f117f3fb8f..fcf6bb0b8621 100644 --- a/packages/adapter-cloudflare/package.json +++ b/packages/adapter-cloudflare/package.json @@ -48,7 +48,7 @@ "@playwright/test": "catalog:", "@sveltejs/kit": "workspace:^", "@types/node": "catalog:", - "typescript": "catalog:", + "typescript": "catalog:typescript-native", "vitest": "catalog:" }, "peerDependencies": { diff --git a/packages/adapter-netlify/files/edge.js b/packages/adapter-netlify/files/edge.js index c65a2d468240..518593892b06 100644 --- a/packages/adapter-netlify/files/edge.js +++ b/packages/adapter-netlify/files/edge.js @@ -1,4 +1,3 @@ -/** @import {} from 'deno' */ import { Server } from '0SERVER'; import { manifest } from 'MANIFEST'; diff --git a/packages/adapter-netlify/files/tsconfig.json b/packages/adapter-netlify/files/tsconfig.json new file mode 100644 index 000000000000..247eef0a082d --- /dev/null +++ b/packages/adapter-netlify/files/tsconfig.json @@ -0,0 +1,15 @@ +{ + "compilerOptions": { + "allowJs": true, + "checkJs": true, + "noEmit": true, + "target": "es2022", + "module": "node16", + "moduleResolution": "node16", + "paths": { + "@sveltejs/kit": ["../../kit/types/index"] + }, + "types": ["deno"] + }, + "include": ["edge.js", "../internal.d.ts"] +} diff --git a/packages/adapter-netlify/index.js b/packages/adapter-netlify/index.js index f073adee206c..ee12a192f7cc 100644 --- a/packages/adapter-netlify/index.js +++ b/packages/adapter-netlify/index.js @@ -30,7 +30,7 @@ const netlify_framework_edge_path = '.netlify/v1/edge-functions'; const FUNCTION_PREFIX = 'sveltekit-'; -/** @type {import('./index.js').default} */ +/** @type {typeof import('./index.js').default} */ export default function ({ split = false, edge = edge_set_in_env_var } = {}) { return { name, diff --git a/packages/adapter-netlify/package.json b/packages/adapter-netlify/package.json index 5972e814d012..88c9635a5bef 100644 --- a/packages/adapter-netlify/package.json +++ b/packages/adapter-netlify/package.json @@ -27,14 +27,14 @@ }, "types": "index.d.ts", "files": [ - "files", + "files/*.js", "index.js", "utils.js", "index.d.ts", "ambient.d.ts" ], "scripts": { - "check": "tsc", + "check": "tsc && tsc --project files/tsconfig.json", "lint": "prettier --check .", "format": "pnpm lint --write", "test:unit": "vitest run", @@ -51,7 +51,7 @@ "@sveltejs/kit": "workspace:^", "@types/deno": "^2.7.0", "@types/node": "catalog:", - "typescript": "catalog:", + "typescript": "catalog:typescript-native", "vitest": "catalog:" }, "peerDependencies": { diff --git a/packages/adapter-netlify/tsconfig.json b/packages/adapter-netlify/tsconfig.json index 5e9f20b4452e..ed0b586c30f6 100644 --- a/packages/adapter-netlify/tsconfig.json +++ b/packages/adapter-netlify/tsconfig.json @@ -11,5 +11,5 @@ }, "types": ["node"] }, - "include": ["*.js", "files", "internal.d.ts", "test/utils.js"] + "include": ["*.js", "files/serverless.js", "internal.d.ts", "test/utils.js"] } diff --git a/packages/adapter-node/index.js b/packages/adapter-node/index.js index 07df66d08aa5..68d70f47721e 100644 --- a/packages/adapter-node/index.js +++ b/packages/adapter-node/index.js @@ -11,7 +11,7 @@ function escape_regex(str) { return str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); } -/** @type {import('./index.js').default} */ +/** @type {typeof import('./index.js').default} */ export default function (opts = {}) { const { out = 'build', precompress = true, envPrefix = '' } = opts; diff --git a/packages/adapter-node/package.json b/packages/adapter-node/package.json index 970675c93d46..60bf24114c9a 100644 --- a/packages/adapter-node/package.json +++ b/packages/adapter-node/package.json @@ -48,7 +48,7 @@ "@types/node": "catalog:", "polka": "catalog:", "sirv": "^3.0.2", - "typescript": "catalog:", + "typescript": "catalog:typescript-native", "vitest": "catalog:" }, "dependencies": { diff --git a/packages/adapter-static/index.js b/packages/adapter-static/index.js index f6c0b5a450c4..889108714f8c 100644 --- a/packages/adapter-static/index.js +++ b/packages/adapter-static/index.js @@ -2,7 +2,7 @@ import { rmSync } from 'node:fs'; import path from 'node:path'; import { platforms } from './platforms.js'; -/** @type {import('./index.js').default} */ +/** @type {typeof import('./index.js').default} */ export default function (options) { return { name: '@sveltejs/adapter-static', diff --git a/packages/adapter-static/package.json b/packages/adapter-static/package.json index b2cb7e63c2bf..18153f2efb05 100644 --- a/packages/adapter-static/package.json +++ b/packages/adapter-static/package.json @@ -44,7 +44,7 @@ "@types/node": "catalog:", "sirv": "^3.0.2", "svelte": "catalog:", - "typescript": "catalog:", + "typescript": "catalog:typescript-native", "vite": "catalog:" }, "peerDependencies": { diff --git a/packages/adapter-vercel/index.js b/packages/adapter-vercel/index.js index 209b2fa04269..01e64ea2ec84 100644 --- a/packages/adapter-vercel/index.js +++ b/packages/adapter-vercel/index.js @@ -8,7 +8,7 @@ import { get_pathname, parse_isr_expiration, pattern_to_src, resolve_runtime } f const INTERNAL = '![-]'; // this name is guaranteed not to conflict with user routes -/** @type {import('./index.js').default} **/ +/** @type {typeof import('./index.js').default} **/ const plugin = function (defaults = {}) { // @ts-ignore TODO remove this in a future version if ('edge' in defaults || defaults.runtime === 'edge') { diff --git a/packages/adapter-vercel/package.json b/packages/adapter-vercel/package.json index 143518da7ebf..d6f46d887379 100644 --- a/packages/adapter-vercel/package.json +++ b/packages/adapter-vercel/package.json @@ -46,7 +46,7 @@ "devDependencies": { "@sveltejs/kit": "workspace:^", "@types/node": "catalog:", - "typescript": "catalog:", + "typescript": "catalog:typescript-native", "vitest": "catalog:" }, "peerDependencies": { diff --git a/packages/enhanced-img/package.json b/packages/enhanced-img/package.json index 6318eb45d5f0..4b6bbaaaef40 100644 --- a/packages/enhanced-img/package.json +++ b/packages/enhanced-img/package.json @@ -49,7 +49,7 @@ "@types/node": "catalog:", "rolldown": "catalog:", "svelte": "catalog:", - "typescript": "catalog:", + "typescript": "catalog:typescript-native", "vite": "catalog:", "vitest": "catalog:" }, diff --git a/packages/kit/package.json b/packages/kit/package.json index d6d13e803262..e9efd4f1a0ab 100644 --- a/packages/kit/package.json +++ b/packages/kit/package.json @@ -33,6 +33,7 @@ "@playwright/test": "catalog:", "@sveltejs/vite-plugin-svelte": "catalog:", "@types/connect": "catalog:", + "@typescript/native": "catalog:", "@types/node": "catalog:", "dts-buddy": "^0.8.3", "jsdom": "catalog:", @@ -72,8 +73,8 @@ ], "scripts": { "lint": "prettier --config ../../.prettierrc --check .", - "check": "tsc && cd ./test/types && tsc && cd ./app-error-enhanced && tsc", - "check:all": "tsc && pnpm -r --filter=\"./**\" check", + "check": "pnpm tsc-native && pnpm tsc-native --project test/types/tsconfig.json && pnpm tsc-native --project test/types/app-error-enhanced/tsconfig.json", + "check:all": "pnpm tsc-native && pnpm -r --filter=\"./**\" check", "format": "prettier --config ../../.prettierrc --write .", "test": "pnpm test:unit && pnpm test:integration", "test:integration": "pnpm -r --workspace-concurrency 1 --filter=\"./test/**\" test", @@ -86,6 +87,7 @@ "test:svelte-async:dev": "pnpm -r --workspace-concurrency 1 --filter=\"./test/**\" test:svelte-async:dev", "test:svelte-async:build": "pnpm -r --workspace-concurrency 1 --filter=\"./test/**\" test:svelte-async:build", "test:unit": "vitest run ./", + "tsc-native": "node node_modules/@typescript/native/bin/tsc", "prepublishOnly": "pnpm generate:types", "generate:version": "node scripts/generate-version.js", "generate:types": "node scripts/generate-dts.js" diff --git a/packages/kit/src/cli.js b/packages/kit/src/cli.js index 508ea2027526..a0958be5a480 100755 --- a/packages/kit/src/cli.js +++ b/packages/kit/src/cli.js @@ -97,7 +97,7 @@ if (command === 'sync') { } try { - const vite = /** @type {import('vite')} */ (await import_peer('vite', process.cwd())); + const vite = /** @type {typeof import('vite')} */ (await import_peer('vite', process.cwd())); const vite_config = await load_vite_config(values.config, vite); const sveltekit_config = extract_svelte_config(vite_config); diff --git a/packages/kit/src/core/config/index.js b/packages/kit/src/core/config/index.js index 2d1e967f216d..48d21b3e477b 100644 --- a/packages/kit/src/core/config/index.js +++ b/packages/kit/src/core/config/index.js @@ -123,7 +123,7 @@ export function load_error_page(config) { * @param {typeof import('vite')} [vite] */ export async function load_vite_config(config, vite) { - vite ??= /** @type {import('vite')} */ (await import_peer('vite', process.cwd())); + vite ??= /** @type {typeof import('vite')} */ (await import_peer('vite', process.cwd())); return vite.resolveConfig({ configFile: config }, 'build', process.env.MODE ?? 'production'); } diff --git a/packages/kit/src/core/env.js b/packages/kit/src/core/env.js index 9c943a9c08b9..ef4d79790b78 100644 --- a/packages/kit/src/core/env.js +++ b/packages/kit/src/core/env.js @@ -55,7 +55,7 @@ export async function load_explicit_env(vite, kit, file, root, mode) { const runner = get_runner(vite, server); - /** @type {import('../runtime/app/env/internal.js')} */ ( + /** @type {typeof import('../runtime/app/env/internal.js')} */ ( await runner.import(`${runtime_directory}/app/env/internal.js`) ).set_building(); diff --git a/packages/kit/src/core/postbuild/analyse.js b/packages/kit/src/core/postbuild/analyse.js index 46e099222ac6..cd748dab36ba 100644 --- a/packages/kit/src/core/postbuild/analyse.js +++ b/packages/kit/src/core/postbuild/analyse.js @@ -54,7 +54,7 @@ async function analyse({ // `set_env` lives in a separate module that imports the user's `src/env` config. We import it // *after* `set_building()` so that `building`-dependent expressions resolve correctly - /** @type {import('__sveltekit/env')} */ + /** @type {typeof import('__sveltekit/env')} */ const { set_env } = await import(pathToFileURL(`${server_root}/server/env.js`).href); set_env(env); diff --git a/packages/kit/src/core/postbuild/prerender.js b/packages/kit/src/core/postbuild/prerender.js index 199bc1ee36e2..da1702941ac5 100644 --- a/packages/kit/src/core/postbuild/prerender.js +++ b/packages/kit/src/core/postbuild/prerender.js @@ -52,7 +52,7 @@ async function prerender({ hash, out, manifest_path, metadata, verbose, env, vit // `set_env` and `Server` live in modules that import the user's `src/env` config. We import them // *after* `set_building()` so that `building`-dependent expressions resolve correctly - /** @type {import('__sveltekit/env')} */ + /** @type {typeof import('__sveltekit/env')} */ const { set_env } = await import(pathToFileURL(`${out}/server/env.js`).href); set_env(env); diff --git a/packages/kit/src/core/sync/create_manifest_data/index.spec.js b/packages/kit/src/core/sync/create_manifest_data/index.spec.js index d4db35caf991..05876712a8b5 100644 --- a/packages/kit/src/core/sync/create_manifest_data/index.spec.js +++ b/packages/kit/src/core/sync/create_manifest_data/index.spec.js @@ -35,8 +35,7 @@ const default_error = { /** @param {import('types').PageNode} node */ function simplify_node(node) { - /** @type {import('types').PageNode} */ - const simplified = {}; + const simplified = /** @type {import('types').PageNode} */ ({}); if (node.component) simplified.component = node.component; if (node.universal) simplified.universal = node.universal; diff --git a/packages/kit/src/core/sync/ts.js b/packages/kit/src/core/sync/ts.js index 61c79e37f882..7f161e63d101 100644 --- a/packages/kit/src/core/sync/ts.js +++ b/packages/kit/src/core/sync/ts.js @@ -1,4 +1,4 @@ -/** @type {import('typescript')} */ +/** @type {typeof import('typescript')} */ // @ts-ignore export let ts = undefined; try { diff --git a/packages/kit/src/core/sync/write_tsconfig/index.js b/packages/kit/src/core/sync/write_tsconfig/index.js index 803b5ed1f97d..964b179179b7 100644 --- a/packages/kit/src/core/sync/write_tsconfig/index.js +++ b/packages/kit/src/core/sync/write_tsconfig/index.js @@ -13,7 +13,7 @@ import { } from './utils.js'; import { extends_id, validate_resolved_config } from './validate.js'; -/** @type {import('typescript')} */ +/** @type {typeof import('typescript')} */ let ts; try { ts = await import('typescript'); diff --git a/packages/kit/src/core/sync/write_types/test/actions/package.json b/packages/kit/src/core/sync/write_types/test/actions/package.json index 15ddc701a691..ddafe062930b 100644 --- a/packages/kit/src/core/sync/write_types/test/actions/package.json +++ b/packages/kit/src/core/sync/write_types/test/actions/package.json @@ -3,9 +3,10 @@ "private": true, "type": "module", "devDependencies": { - "typescript": "~6.0.3" + "typescript": "~6.0.3", + "@typescript/native": "catalog:" }, "scripts": { - "testtypes": "tsc" + "testtypes": "node node_modules/@typescript/native/bin/tsc" } } diff --git a/packages/kit/src/core/sync/write_types/test/app-types/package.json b/packages/kit/src/core/sync/write_types/test/app-types/package.json index 0f684ebd3938..09665b7a1865 100644 --- a/packages/kit/src/core/sync/write_types/test/app-types/package.json +++ b/packages/kit/src/core/sync/write_types/test/app-types/package.json @@ -3,9 +3,10 @@ "private": true, "type": "module", "devDependencies": { - "typescript": "~6.0.3" + "typescript": "~6.0.3", + "@typescript/native": "catalog:" }, "scripts": { - "testtypes": "tsc" + "testtypes": "node node_modules/@typescript/native/bin/tsc" } } diff --git a/packages/kit/src/core/sync/write_types/test/layout-advanced/package.json b/packages/kit/src/core/sync/write_types/test/layout-advanced/package.json index 5cbb7b76de21..54f89796416c 100644 --- a/packages/kit/src/core/sync/write_types/test/layout-advanced/package.json +++ b/packages/kit/src/core/sync/write_types/test/layout-advanced/package.json @@ -3,9 +3,10 @@ "private": true, "type": "module", "devDependencies": { - "typescript": "~6.0.3" + "typescript": "~6.0.3", + "@typescript/native": "catalog:" }, "scripts": { - "testtypes": "tsc" + "testtypes": "node node_modules/@typescript/native/bin/tsc" } } diff --git a/packages/kit/src/core/sync/write_types/test/layout/package.json b/packages/kit/src/core/sync/write_types/test/layout/package.json index 94d134c8bd96..1b12aa2dda69 100644 --- a/packages/kit/src/core/sync/write_types/test/layout/package.json +++ b/packages/kit/src/core/sync/write_types/test/layout/package.json @@ -3,9 +3,10 @@ "private": true, "type": "module", "devDependencies": { - "typescript": "~6.0.3" + "typescript": "~6.0.3", + "@typescript/native": "catalog:" }, "scripts": { - "testtypes": "tsc" + "testtypes": "node node_modules/@typescript/native/bin/tsc" } } diff --git a/packages/kit/src/core/sync/write_types/test/param-type-inference/package.json b/packages/kit/src/core/sync/write_types/test/param-type-inference/package.json index e49075df5014..3780e0bc63da 100644 --- a/packages/kit/src/core/sync/write_types/test/param-type-inference/package.json +++ b/packages/kit/src/core/sync/write_types/test/param-type-inference/package.json @@ -4,9 +4,10 @@ "type": "module", "devDependencies": { "typescript": "~6.0.3", + "@typescript/native": "catalog:", "valibot": "catalog:" }, "scripts": { - "testtypes": "tsc" + "testtypes": "node node_modules/@typescript/native/bin/tsc" } } diff --git a/packages/kit/src/core/sync/write_types/test/simple-page-server-and-shared/package.json b/packages/kit/src/core/sync/write_types/test/simple-page-server-and-shared/package.json index 70a051132c65..90c8cea04bfd 100644 --- a/packages/kit/src/core/sync/write_types/test/simple-page-server-and-shared/package.json +++ b/packages/kit/src/core/sync/write_types/test/simple-page-server-and-shared/package.json @@ -3,9 +3,10 @@ "private": true, "type": "module", "devDependencies": { - "typescript": "~6.0.3" + "typescript": "~6.0.3", + "@typescript/native": "catalog:" }, "scripts": { - "testtypes": "tsc" + "testtypes": "node node_modules/@typescript/native/bin/tsc" } } diff --git a/packages/kit/src/core/sync/write_types/test/simple-page-server-only/package.json b/packages/kit/src/core/sync/write_types/test/simple-page-server-only/package.json index 91e31f06e0dc..5ce59a0fc083 100644 --- a/packages/kit/src/core/sync/write_types/test/simple-page-server-only/package.json +++ b/packages/kit/src/core/sync/write_types/test/simple-page-server-only/package.json @@ -3,9 +3,10 @@ "private": true, "type": "module", "devDependencies": { - "typescript": "~6.0.3" + "typescript": "~6.0.3", + "@typescript/native": "catalog:" }, "scripts": { - "testtypes": "tsc" + "testtypes": "node node_modules/@typescript/native/bin/tsc" } } diff --git a/packages/kit/src/core/sync/write_types/test/simple-page-shared-only/package.json b/packages/kit/src/core/sync/write_types/test/simple-page-shared-only/package.json index 329e21ac0abc..127da956f306 100644 --- a/packages/kit/src/core/sync/write_types/test/simple-page-shared-only/package.json +++ b/packages/kit/src/core/sync/write_types/test/simple-page-shared-only/package.json @@ -3,9 +3,10 @@ "private": true, "type": "module", "devDependencies": { - "typescript": "~6.0.3" + "typescript": "~6.0.3", + "@typescript/native": "catalog:" }, "scripts": { - "testtypes": "tsc" + "testtypes": "node node_modules/@typescript/native/bin/tsc" } } diff --git a/packages/kit/src/core/sync/write_types/test/slugs-layout-not-all-pages-have-load/package.json b/packages/kit/src/core/sync/write_types/test/slugs-layout-not-all-pages-have-load/package.json index f793f37fff65..db9159a98c2d 100644 --- a/packages/kit/src/core/sync/write_types/test/slugs-layout-not-all-pages-have-load/package.json +++ b/packages/kit/src/core/sync/write_types/test/slugs-layout-not-all-pages-have-load/package.json @@ -3,9 +3,10 @@ "private": true, "type": "module", "devDependencies": { - "typescript": "~6.0.3" + "typescript": "~6.0.3", + "@typescript/native": "catalog:" }, "scripts": { - "testtypes": "tsc" + "testtypes": "node node_modules/@typescript/native/bin/tsc" } } diff --git a/packages/kit/src/core/sync/write_types/test/slugs/package.json b/packages/kit/src/core/sync/write_types/test/slugs/package.json index 121fd2a9a312..bb6273f05f33 100644 --- a/packages/kit/src/core/sync/write_types/test/slugs/package.json +++ b/packages/kit/src/core/sync/write_types/test/slugs/package.json @@ -3,9 +3,10 @@ "private": true, "type": "module", "devDependencies": { - "typescript": "~6.0.3" + "typescript": "~6.0.3", + "@typescript/native": "catalog:" }, "scripts": { - "testtypes": "tsc" + "testtypes": "node node_modules/@typescript/native/bin/tsc" } } diff --git a/packages/kit/src/exports/vite/build/build_server.js b/packages/kit/src/exports/vite/build/build_server.js index 1de30641c14c..dcd4b56b0bcd 100644 --- a/packages/kit/src/exports/vite/build/build_server.js +++ b/packages/kit/src/exports/vite/build/build_server.js @@ -1,4 +1,4 @@ -/** @import { AssetDependencies, ManifestData, SSRNode, ValidatedKitConfig } from 'types' */ +/** @import { AssetDependencies, ManifestData, ValidatedKitConfig } from 'types' */ /** @import { Manifest, Rolldown } from 'vite' */ import fs from 'node:fs'; import { @@ -118,7 +118,7 @@ export function build_server_nodes( const imports = []; // String representation of - /** @type {SSRNode} */ + /* @type {SSRNode} */ /** @type {string[]} */ const exports = [`export const index = ${i};`]; diff --git a/packages/kit/src/exports/vite/dev/index.js b/packages/kit/src/exports/vite/dev/index.js index 2dec6d74d782..cb6966179691 100644 --- a/packages/kit/src/exports/vite/dev/index.js +++ b/packages/kit/src/exports/vite/dev/index.js @@ -215,8 +215,7 @@ export async function dev( ), nodes: manifest_data.nodes.map((node, index) => { return async () => { - /** @type {SSRNode} */ - const result = {}; + const result = /** @type {SSRNode} */ ({}); result.index = index; result.universal_id = node.universal; result.server_id = node.server; diff --git a/packages/kit/src/runtime/app/paths/server.js b/packages/kit/src/runtime/app/paths/server.js index 863f0629768d..550d95561fc5 100644 --- a/packages/kit/src/runtime/app/paths/server.js +++ b/packages/kit/src/runtime/app/paths/server.js @@ -7,7 +7,7 @@ import { manifest } from '../../server/internal.js'; import { get_hooks } from '__SERVER__/internal.js'; import { DEV } from 'esm-env'; -/** @type {import('./client.js').asset} */ +/** @type {typeof import('./client.js').asset} */ export function asset(file) { // TODO 4.0 remove this if (file[0] === '/') { @@ -21,7 +21,7 @@ export function asset(file) { return assets !== base ? `${assets}/${file}` : resolve(file); } -/** @type {import('./client.js').resolve} */ +/** @type {typeof import('./client.js').resolve} */ export function resolve(id, params) { let resolved; @@ -56,7 +56,7 @@ export function resolve(id, params) { return base + resolved; } -/** @type {import('./client.js').match} */ +/** @type {typeof import('./client.js').match} */ export async function match(url) { const store = try_get_request_store(); diff --git a/packages/kit/src/runtime/app/server/remote/form.js b/packages/kit/src/runtime/app/server/remote/form.js index 30af82bb27c6..a3fd1defd02a 100644 --- a/packages/kit/src/runtime/app/server/remote/form.js +++ b/packages/kit/src/runtime/app/server/remote/form.js @@ -72,8 +72,7 @@ export function form(validate_or_fn, maybe_fn) { * @param {string | number | boolean} [key] */ function create_instance(key) { - /** @type {RemoteForm} */ - const instance = {}; + const instance = /** @type {RemoteForm} */ ({}); instance.method = 'POST'; @@ -89,8 +88,8 @@ export function form(validate_or_fn, maybe_fn) { name: '', id: '', fn: async (data, meta, form_data) => { - /** @type {{ submission: true, input?: Record, issues?: InternalRemoteFormIssue[], result: Output }} */ - const output = {}; + const output = + /** @type {{ submission: true, input?: Record, issues?: InternalRemoteFormIssue[], result: Output }} */ ({}); // make it possible to differentiate between user submission and programmatic `field.set(...)` updates output.submission = true; diff --git a/packages/kit/src/runtime/client/entry.js b/packages/kit/src/runtime/client/entry.js index 82c3140d661f..8cbd1bdffbca 100644 --- a/packages/kit/src/runtime/client/entry.js +++ b/packages/kit/src/runtime/client/entry.js @@ -13,12 +13,12 @@ export function init(payload) { client ??= import('./client-entry.js'); } -/** @param {Parameters} args */ +/** @param {Parameters} args */ export async function start(...args) { return (await client).start(...args); } -/** @param {Parameters} args */ +/** @param {Parameters} args */ export async function load_css(...args) { return (await client).load_css(...args); } diff --git a/packages/kit/src/runtime/client/remote-functions/command.svelte.js b/packages/kit/src/runtime/client/remote-functions/command.svelte.js index 0284f577ed1f..5e969fb03861 100644 --- a/packages/kit/src/runtime/client/remote-functions/command.svelte.js +++ b/packages/kit/src/runtime/client/remote-functions/command.svelte.js @@ -34,39 +34,41 @@ export function command(id) { ...get_remote_request_headers() }; - /** @type {Promise & { updates: (...args: RemoteQueryUpdate[]) => Promise }} */ - const promise = (async () => { - try { - // Wait a tick to give room for the `updates` method to be called - await Promise.resolve(); - - if (updates_error) { - throw updates_error; - } - - const response = await remote_request(`${base}/${app_dir}/remote/${id}`, { - method: 'POST', - body: JSON.stringify({ - payload: await stringify_command_arg(arg), - refreshes: Array.from(refreshes ?? []) - }), - headers - }); - - if (response.redirect) { - throw new Error( - 'Redirects are not allowed in commands. Return a result instead and use goto on the client' - ); - } - - return response._; - } finally { - overrides?.forEach((fn) => fn()); - - // Decrement pending count when command completes - pending_count--; - } - })(); + const promise = + /** @type {Promise & { updates: (...args: RemoteQueryUpdate[]) => Promise }} */ ( + (async () => { + try { + // Wait a tick to give room for the `updates` method to be called + await Promise.resolve(); + + if (updates_error) { + throw updates_error; + } + + const response = await remote_request(`${base}/${app_dir}/remote/${id}`, { + method: 'POST', + body: JSON.stringify({ + payload: await stringify_command_arg(arg), + refreshes: Array.from(refreshes ?? []) + }), + headers + }); + + if (response.redirect) { + throw new Error( + 'Redirects are not allowed in commands. Return a result instead and use goto on the client' + ); + } + + return response._; + } finally { + overrides?.forEach((fn) => fn()); + + // Decrement pending count when command completes + pending_count--; + } + })() + ); let updates_called = false; promise.updates = (...args) => { diff --git a/packages/kit/src/runtime/client/remote-functions/form.svelte.js b/packages/kit/src/runtime/client/remote-functions/form.svelte.js index 07f86075209a..0e3a2f7d73c5 100644 --- a/packages/kit/src/runtime/client/remote-functions/form.svelte.js +++ b/packages/kit/src/runtime/client/remote-functions/form.svelte.js @@ -222,82 +222,84 @@ export function form(id) { /** @type {Error | undefined} */ let updates_error; - /** @type {Promise & { updates: (...args: RemoteQueryUpdate[]) => Promise }} */ - const promise = (async () => { - try { - await Promise.resolve(); - - if (updates_error) { - throw updates_error; - } - - if (should_preflight) { - const valid = await preflight(form_data); - if (!valid) return false; - } - - const { blob } = serialize_binary_form(convert(form_data), { - remote_refreshes: Array.from(refreshes ?? []) - }); - - const response = await remote_request( - `${base}/${app_dir}/remote/${action_id_without_key}`, - { - method: 'POST', - headers: { - 'Content-Type': BINARY_FORM_CONTENT_TYPE, - // Forms cannot be called during rendering, so it's save to use location here - 'x-sveltekit-pathname': location.pathname, - 'x-sveltekit-search': location.search - }, - body: blob - } - ); + const promise = + /** @type {Promise & { updates: (...args: RemoteQueryUpdate[]) => Promise }} */ ( + (async () => { + try { + await Promise.resolve(); + + if (updates_error) { + throw updates_error; + } - ({ issues: raw_issues = [], result } = response._ ?? {}); + if (should_preflight) { + const valid = await preflight(form_data); + if (!valid) return false; + } - // if the developer took control of updates via `.updates(...)` (even with - // no arguments), or the server performed explicit refreshes, don't invalidateAll - const should_refresh = refreshes === null && !response.r; + const { blob } = serialize_binary_form(convert(form_data), { + remote_refreshes: Array.from(refreshes ?? []) + }); + + const response = await remote_request( + `${base}/${app_dir}/remote/${action_id_without_key}`, + { + method: 'POST', + headers: { + 'Content-Type': BINARY_FORM_CONTENT_TYPE, + // Forms cannot be called during rendering, so it's save to use location here + 'x-sveltekit-pathname': location.pathname, + 'x-sveltekit-search': location.search + }, + body: blob + } + ); - if (response.redirect) { - // Use internal version to allow redirects to external URLs - void _goto(response.redirect, { - refreshAll: should_refresh - }); - return true; - } + ({ issues: raw_issues = [], result } = response._ ?? {}); - const succeeded = raw_issues.length === 0; + // if the developer took control of updates via `.updates(...)` (even with + // no arguments), or the server performed explicit refreshes, don't invalidateAll + const should_refresh = refreshes === null && !response.r; - if (succeeded) { - if (should_refresh) { - void refreshAll(); - } - } else { - if (DEV) { - warn_on_missing_issue_reads(); - } - } + if (response.redirect) { + // Use internal version to allow redirects to external URLs + void _goto(response.redirect, { + refreshAll: should_refresh + }); + return true; + } - return succeeded; - } catch (e) { - result = undefined; - raw_issues = []; - throw e; - } finally { - overrides?.forEach((fn) => fn()); + const succeeded = raw_issues.length === 0; - void tick().then(() => { - if (entry) { - entry.count--; - if (entry.count === 0) { - instances.delete(key); + if (succeeded) { + if (should_refresh) { + void refreshAll(); + } + } else { + if (DEV) { + warn_on_missing_issue_reads(); + } } + + return succeeded; + } catch (e) { + result = undefined; + raw_issues = []; + throw e; + } finally { + overrides?.forEach((fn) => fn()); + + void tick().then(() => { + if (entry) { + entry.count--; + if (entry.count === 0) { + instances.delete(key); + } + } + }); } - }); - } - })(); + })() + ); let updates_called = false; promise.updates = (...args) => { @@ -376,8 +378,7 @@ export function form(id) { return true; } - /** @type {RemoteForm} */ - const instance = {}; + const instance = /** @type {RemoteForm} */ ({}); instance.method = 'POST'; Object.defineProperty(instance, 'action', { diff --git a/packages/kit/src/runtime/server/page/server_routing.js b/packages/kit/src/runtime/server/page/server_routing.js index 0cc9a027faba..d4d6f48bd9b1 100644 --- a/packages/kit/src/runtime/server/page/server_routing.js +++ b/packages/kit/src/runtime/server/page/server_routing.js @@ -20,7 +20,7 @@ export function generate_route_object(route, url, client) { .join(',\n\t\t'); // stringified version of - /** @type {import('types').CSRRouteServer} */ + /* @type {import('types').CSRRouteServer} */ return [ `{\n\tid: ${s(route.id)}`, `errors: ${s(route.errors)}`, diff --git a/packages/kit/src/utils/page_nodes.js b/packages/kit/src/utils/page_nodes.js index d92ffe27233b..bff6904cdfe7 100644 --- a/packages/kit/src/utils/page_nodes.js +++ b/packages/kit/src/utils/page_nodes.js @@ -1,3 +1,4 @@ +/** @import { UniversalNode, ServerNode } from 'types' */ import { validate_layout_exports, validate_layout_server_exports, @@ -42,10 +43,10 @@ export class PageNodes { /** * @template {'prerender' | 'ssr' | 'csr' | 'trailingSlash'} Option * @param {Option} option - * @returns {Value | undefined} + * @returns {(UniversalNode | ServerNode)[Option] | undefined} */ #get_option(option) { - /** @typedef {(import('types').UniversalNode | import('types').ServerNode)[Option]} Value */ + /** @typedef {(UniversalNode | ServerNode)[Option]} Value */ return this.data.reduce((value, node) => { return node?.universal?.[option] ?? node?.server?.[option] ?? value; diff --git a/packages/kit/test/apps/async/package.json b/packages/kit/test/apps/async/package.json index d2f810926cbb..9cc534955127 100644 --- a/packages/kit/test/apps/async/package.json +++ b/packages/kit/test/apps/async/package.json @@ -8,7 +8,7 @@ "build": "vite build", "preview": "vite preview", "prepare": "svelte-kit sync || echo ''", - "check": "svelte-kit sync && tsc && svelte-check", + "check": "svelte-kit sync && node node_modules/@typescript/native/bin/tsc && svelte-check --tsgo --incremental", "test": "pnpm test:dev && pnpm test:build", "test:dev": "DEV=true playwright test", "test:build": "vitest run && playwright test" @@ -18,6 +18,7 @@ "@sveltejs/vite-plugin-svelte": "catalog:", "svelte": "catalog:", "svelte-check": "catalog:", + "@typescript/native": "catalog:", "typescript": "catalog:", "valibot": "catalog:", "vite": "catalog:", diff --git a/packages/kit/test/apps/async/src/routes/remote/+page.svelte b/packages/kit/test/apps/async/src/routes/remote/+page.svelte index 8860c5059dd9..dc17e54b9bc4 100644 --- a/packages/kit/test/apps/async/src/routes/remote/+page.svelte +++ b/packages/kit/test/apps/async/src/routes/remote/+page.svelte @@ -1,4 +1,4 @@ -

Create a new post

@@ -917,14 +917,14 @@ As with `query` and `form`, if the function accepts an argument, it should be [v ```ts /// file: likes.remote.js // @filename: ambient.d.ts -declare module '#lib/server/database' { +declare module '#lib/server/database.js' { export function sql(strings: TemplateStringsArray, ...values: any[]): Promise; } // @filename: index.js // ---cut--- import * as v from 'valibot'; import { query, command } from '$app/server'; -import * as db from '#lib/server/database'; +import * as db from '#lib/server/database.js'; export const getLikes = query(v.string(), async (id) => { const [row] = await db.sql` @@ -951,7 +951,7 @@ Now simply call `addLike`, from (for example) an event handler: @@ -1132,13 +1132,13 @@ The `prerender` function is similar to `query`, except that it will be invoked a ```js /// file: src/routes/blog/data.remote.js // @filename: ambient.d.ts -declare module '#lib/server/database' { +declare module '#lib/server/database.js' { export function sql(strings: TemplateStringsArray, ...values: any[]): Promise; } // @filename: index.js // ---cut--- import { prerender } from '$app/server'; -import * as db from '#lib/server/database'; +import * as db from '#lib/server/database.js'; export const getPosts = prerender(async () => { const posts = await db.sql` @@ -1163,7 +1163,7 @@ As with queries, prerender functions can accept an argument, which should be [va ```js /// file: src/routes/blog/data.remote.js // @filename: ambient.d.ts -declare module '#lib/server/database' { +declare module '#lib/server/database.js' { export function sql(strings: TemplateStringsArray, ...values: any[]): Promise; } // @filename: index.js @@ -1171,7 +1171,7 @@ declare module '#lib/server/database' { import * as v from 'valibot'; import { error } from '@sveltejs/kit'; import { prerender } from '$app/server'; -import * as db from '#lib/server/database'; +import * as db from '#lib/server/database.js'; export const getPosts = prerender(async () => { /* ... */ }); @@ -1277,14 +1277,14 @@ interface User { avatar: string; } -declare module '#lib/server/database' { +declare module '#lib/server/database.js' { export function findUser(sessionId: string | undefined): Promise; } // @filename: index.js // ---cut--- import { getRequestEvent, query } from '$app/server'; -import { findUser } from '#lib/server/database'; +import { findUser } from '#lib/server/database.js'; export const getProfile = query(async () => { const user = await getUser(); diff --git a/documentation/docs/25-build-and-deploy/10-building-your-app.md b/documentation/docs/25-build-and-deploy/10-building-your-app.md index 953780764ce5..263e73ad793c 100644 --- a/documentation/docs/25-build-and-deploy/10-building-your-app.md +++ b/documentation/docs/25-build-and-deploy/10-building-your-app.md @@ -14,7 +14,7 @@ SvelteKit will load your `+page/layout(.server).js` files (and all files they im ```js +++import { building } from '$app/env';+++ -import { initialiseDatabase } from '#lib/server/database'; +import { initialiseDatabase } from '#lib/server/database.js'; +++if (!building) {+++ initialiseDatabase(); diff --git a/documentation/docs/30-advanced/10-advanced-routing.md b/documentation/docs/30-advanced/10-advanced-routing.md index 56dca90d09e8..22656e8aa3bf 100644 --- a/documentation/docs/30-advanced/10-advanced-routing.md +++ b/documentation/docs/30-advanced/10-advanced-routing.md @@ -301,12 +301,12 @@ Not all use cases are suited for layout grouping, nor should you feel compelled ```js /// file: src/routes/nested/route/+layout.js // @filename: ambient.d.ts -declare module "#lib/reusable-load-function" { +declare module "#lib/reusable-load-function.js" { export function reusableLoad(event: import('@sveltejs/kit').LoadEvent): Promise>; } // @filename: index.js // ---cut--- -import { reusableLoad } from '#lib/reusable-load-function'; +import { reusableLoad } from '#lib/reusable-load-function.js'; /** @type {import('./$types').PageLoad} */ export function load(event) { diff --git a/documentation/docs/30-advanced/20-hooks.md b/documentation/docs/30-advanced/20-hooks.md index 4e92800f4a3d..b8403b687695 100644 --- a/documentation/docs/30-advanced/20-hooks.md +++ b/documentation/docs/30-advanced/20-hooks.md @@ -294,7 +294,7 @@ This function runs once, when the server is created or the app starts in the bro ```js // @errors: 2307 /// file: src/hooks.server.js -import * as db from '#lib/server/database'; +import * as db from '#lib/server/database.js'; /** @type {import('@sveltejs/kit').ServerInit} */ export async function init() { @@ -367,7 +367,7 @@ This is a collection of _transporters_, which allow you to pass custom types — ```js // @errors: 2307 /// file: src/hooks.js -import { Vector } from '#lib/math'; +import { Vector } from '#lib/math.js'; /** @type {import('@sveltejs/kit').Transport} */ export const transport = { diff --git a/documentation/docs/30-advanced/25-errors.md b/documentation/docs/30-advanced/25-errors.md index 766362f08059..cf60f95bf029 100644 --- a/documentation/docs/30-advanced/25-errors.md +++ b/documentation/docs/30-advanced/25-errors.md @@ -17,14 +17,14 @@ An _app_ error is one created with the [`error`](@sveltejs-kit#error) helper imp ```js /// file: src/routes/blog/[slug]/+page.server.js // @filename: ambient.d.ts -declare module '#lib/server/database' { +declare module '#lib/server/database.js' { export function getPost(slug: string): Promise<{ title: string, content: string } | undefined> } // @filename: index.js // ---cut--- import { error } from '@sveltejs/kit'; -import * as db from '#lib/server/database'; +import * as db from '#lib/server/database.js'; /** @type {import('./$types').PageServerLoad} */ export async function load({ params }) { diff --git a/documentation/docs/30-advanced/68-observability.md b/documentation/docs/30-advanced/68-observability.md index 63555582cd99..dd1b64893f58 100644 --- a/documentation/docs/30-advanced/68-observability.md +++ b/documentation/docs/30-advanced/68-observability.md @@ -43,14 +43,14 @@ SvelteKit provides access to the `root` span and the `current` span on the reque /// file: #lib/authenticate.ts // @filename: ambient.d.ts -declare module '#lib/auth-core' { +declare module '#lib/auth-core.js' { export function getAuthenticatedUser(): Promise<{ id: string }> } // @filename: index.js // ---cut--- import { getRequestEvent } from '$app/server'; -import { getAuthenticatedUser } from '#lib/auth-core'; +import { getAuthenticatedUser } from '#lib/auth-core.js'; async function authenticate() { const user = await getAuthenticatedUser(); diff --git a/documentation/docs/60-appendix/35-migrating-to-sveltekit-3.md b/documentation/docs/60-appendix/35-migrating-to-sveltekit-3.md index df31fef0d8b9..dfb087774054 100644 --- a/documentation/docs/60-appendix/35-migrating-to-sveltekit-3.md +++ b/documentation/docs/60-appendix/35-migrating-to-sveltekit-3.md @@ -83,7 +83,12 @@ The `$lib` alias is no longer generated automatically by SvelteKit. It is replac } ``` -...and replace `$lib` with `#lib` across your codebase. +...and replace `$lib` with `#lib` across your codebase. Note that you will also have to add the module extensions (e.g. `.js` or `.ts`) to these imports. + +```js +---import { foo } from '$lib/foo';--- ++++import { foo } from '#lib/foo.js';+++ +``` ## `$app/environment` (renamed) diff --git a/packages/kit/src/core/sync/write_tsconfig/index.js b/packages/kit/src/core/sync/write_tsconfig/index.js index 964b179179b7..8f7ad5a71bd0 100644 --- a/packages/kit/src/core/sync/write_tsconfig/index.js +++ b/packages/kit/src/core/sync/write_tsconfig/index.js @@ -6,7 +6,6 @@ import { styleText } from 'node:util'; import { write_if_changed } from '../utils.js'; import { ESSENTIAL_OPTIONS, - get_subpath_imports, normalize_config, RECOMMENDED_OPTIONS, remove_trailing_slashstar @@ -243,8 +242,7 @@ const alias_value = /^(.+?)((\/\*)|(\.\w+))?$/; */ function get_paths(config, root) { const alias = { - ...config.alias, - ...get_subpath_imports(root) + ...config.alias }; /** @type {Record} */ diff --git a/packages/kit/src/core/sync/write_tsconfig/utils.js b/packages/kit/src/core/sync/write_tsconfig/utils.js index a4dc0020a22e..cacd79767bcb 100644 --- a/packages/kit/src/core/sync/write_tsconfig/utils.js +++ b/packages/kit/src/core/sync/write_tsconfig/utils.js @@ -1,5 +1,4 @@ import path from 'node:path'; -import { normalize_import_value, read_package_imports } from '../../../utils/imports.js'; import { posixify } from '../../../utils/os.js'; /** @@ -76,26 +75,3 @@ export function remove_trailing_slashstar(file) { return file; } } - -/** - * @param {string} root - */ -export function get_subpath_imports(root) { - // Add all `#`-prefixed imports from package.json as path aliases - const imports = read_package_imports(root); - - /** @type {Record} */ - const alias = {}; - - if (imports) { - for (const [key, raw_value] of Object.entries(imports)) { - if (!key.startsWith('#')) continue; - const value = normalize_import_value(raw_value); - if (value) { - alias[key] = value; - } - } - } - - return alias; -} diff --git a/packages/kit/src/core/sync/write_tsconfig/utils.spec.js b/packages/kit/src/core/sync/write_tsconfig/utils.spec.js index 4f1531f63b4c..122744f74907 100644 --- a/packages/kit/src/core/sync/write_tsconfig/utils.spec.js +++ b/packages/kit/src/core/sync/write_tsconfig/utils.spec.js @@ -1,5 +1,5 @@ import { assert, describe, test } from 'vitest'; -import { get_subpath_imports, normalize_config } from './utils.js'; +import { normalize_config } from './utils.js'; describe('normalize_config', () => { test('normalizes rootDirs', () => { @@ -59,12 +59,3 @@ describe('normalize_config', () => { assert.equal(c, 3); }); }); - -describe('get_subpath_imports', () => { - test('gets normalized subpath imports', () => { - assert.deepEqual(get_subpath_imports(import.meta.dirname + '/test-app'), { - '#lib': 'src/lib', - '#lib/*': 'src/lib/*' - }); - }); -}); From 81d6319eef08a765ccd3922790a7aee16e284cc2 Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Tue, 11 Aug 2026 13:19:00 -0400 Subject: [PATCH 501/545] breaking: move env-related types to `@sveltejs/kit/env` (#16739) Another part of https://github.com/sveltejs/kit/issues/16676 --- ### Please don't delete this checklist! Before submitting the PR, please make sure you do the following: - [x] It's really useful if your PR references an issue where it is discussed ahead of time. In many cases, features are absent for a reason. For large changes, please create an RFC: https://github.com/sveltejs/rfcs - [x] This message body should clearly illustrate what problems it solves. - [ ] Ideally, include a test that fails without this PR but passes with it. ### Tests - [x] Run the tests with `pnpm test` and lint the project with `pnpm lint` and `pnpm check` ### Changesets - [x] If your PR makes a change that should be noted in one or more packages' changelogs, generate a changeset by running `pnpm changeset` and following the prompts. Changesets that add features should be `minor` and those that fix bugs should be `patch`. Please prefix changeset messages with `feat:`, `fix:`, or `chore:`. ### Edits - [x] Please ensure that 'Allow edits from maintainers' is checked. PRs without this option may be closed. --------- Co-authored-by: vercel[bot] <35613825+vercel[bot]@users.noreply.github.com> Co-authored-by: Vercel Co-authored-by: github-actions[bot] --- .changeset/ten-signs-sing.md | 6 + .../35-migrating-to-sveltekit-3.md | 4 + packages/kit/scripts/generate-dts.js | 2 +- packages/kit/src/core/adapt/builder.js | 3 +- packages/kit/src/core/adapt/index.js | 2 +- packages/kit/src/core/env.js | 2 +- packages/kit/src/core/sync/write_env.js | 2 +- packages/kit/src/exports/env/index.js | 2 +- packages/kit/src/exports/env/public.d.ts | 55 +++++++++ packages/kit/src/exports/internal/env.js | 2 +- packages/kit/src/exports/public.d.ts | 57 +-------- packages/kit/src/exports/vite/index.js | 3 +- packages/kit/tsconfig.json | 2 +- packages/kit/types/index.d.ts | 110 +++++++++--------- 14 files changed, 136 insertions(+), 116 deletions(-) create mode 100644 .changeset/ten-signs-sing.md create mode 100644 packages/kit/src/exports/env/public.d.ts diff --git a/.changeset/ten-signs-sing.md b/.changeset/ten-signs-sing.md new file mode 100644 index 000000000000..d66f7146a58c --- /dev/null +++ b/.changeset/ten-signs-sing.md @@ -0,0 +1,6 @@ +--- +"@sveltejs/kit": major +--- + +breaking: move env-related types to `@sveltejs/kit/env` + \ No newline at end of file diff --git a/documentation/docs/60-appendix/35-migrating-to-sveltekit-3.md b/documentation/docs/60-appendix/35-migrating-to-sveltekit-3.md index dfb087774054..576026c7a62f 100644 --- a/documentation/docs/60-appendix/35-migrating-to-sveltekit-3.md +++ b/documentation/docs/60-appendix/35-migrating-to-sveltekit-3.md @@ -277,6 +277,10 @@ The `json(...)` and `text(...)` helpers for generating responses are deprecated. The `defineParams` function for creating [param matchers](advanced-routing#Matching), along with the associated types, now live in [`@sveltejs/kit/params`](@sveltejs-kit-params). +### Env-related types moved to `@sveltejs/kit/env` + +Types like `EnvVarConfig`, used with [`defineEnvVars`](@sveltejs-kit-env#defineEnvVars) hook, now live in `@sveltejs/kit/env`. + ## `@sveltejs/kit/hooks` The `defineEnvVars` function has moved from `@sveltejs/kit/hooks` to `@sveltejs/kit/env`. diff --git a/packages/kit/scripts/generate-dts.js b/packages/kit/scripts/generate-dts.js index 4ff5d7e42cd3..c11bbc1782b3 100644 --- a/packages/kit/scripts/generate-dts.js +++ b/packages/kit/scripts/generate-dts.js @@ -5,7 +5,7 @@ await createBundle({ output: 'types/index.d.ts', modules: { '@sveltejs/kit': 'src/exports/public.d.ts', - '@sveltejs/kit/env': 'src/exports/env/index.js', + '@sveltejs/kit/env': 'src/exports/env/public.d.ts', '@sveltejs/kit/hooks': 'src/exports/hooks/index.js', '@sveltejs/kit/node': 'src/exports/node/index.js', '@sveltejs/kit/params': 'src/exports/params/public.d.ts', diff --git a/packages/kit/src/core/adapt/builder.js b/packages/kit/src/core/adapt/builder.js index 4d0f42254cee..80195b239aa1 100644 --- a/packages/kit/src/core/adapt/builder.js +++ b/packages/kit/src/core/adapt/builder.js @@ -1,7 +1,8 @@ /** @import { StandardSchemaV1 } from '@standard-schema/spec' */ /** @import { Builder } from '@sveltejs/kit' */ /** @import { ResolvedConfig } from 'vite' */ -/** @import { RouteDefinition, EnvVarConfig } from '@sveltejs/kit' */ +/** @import { RouteDefinition } from '@sveltejs/kit' */ +/** @import { EnvVarConfig } from '@sveltejs/kit/env' */ /** @import { RouteData, ValidatedConfig, BuildData, ServerMetadata, ServerMetadataRoute, Prerendered, PrerenderMap, Logger, RemoteChunk } from 'types' */ import { loadEnv } from 'vite'; import * as devalue from 'devalue'; diff --git a/packages/kit/src/core/adapt/index.js b/packages/kit/src/core/adapt/index.js index b8d8f0b17ebe..f9b3bc397e2f 100644 --- a/packages/kit/src/core/adapt/index.js +++ b/packages/kit/src/core/adapt/index.js @@ -10,7 +10,7 @@ import { create_builder } from './builder.js'; * @param {import('types').Logger} log * @param {import('types').RemoteChunk[]} remotes * @param {import('vite').ResolvedConfig} vite_config - * @param {Record> | null} explicit_env_config + * @param {Record> | null} explicit_env_config */ export async function adapt( config, diff --git a/packages/kit/src/core/env.js b/packages/kit/src/core/env.js index ef4d79790b78..4bf93609793b 100644 --- a/packages/kit/src/core/env.js +++ b/packages/kit/src/core/env.js @@ -1,5 +1,5 @@ /** @import { StandardSchemaV1 } from '@standard-schema/spec' */ -/** @import { EnvVarConfig } from '@sveltejs/kit' */ +/** @import { EnvVarConfig } from '@sveltejs/kit/env' */ /** @import { ValidatedKitConfig } from 'types' */ import path from 'node:path'; import * as devalue from 'devalue'; diff --git a/packages/kit/src/core/sync/write_env.js b/packages/kit/src/core/sync/write_env.js index 402e2ac6fb46..170b6fbb51d0 100644 --- a/packages/kit/src/core/sync/write_env.js +++ b/packages/kit/src/core/sync/write_env.js @@ -1,4 +1,4 @@ -/** @import { EnvVarConfig } from '@sveltejs/kit' */ +/** @import { EnvVarConfig } from '@sveltejs/kit/env' */ import path from 'node:path'; import { create_explicit_env_types } from '../env.js'; import { write_if_changed } from './utils.js'; diff --git a/packages/kit/src/exports/env/index.js b/packages/kit/src/exports/env/index.js index fa4b073b37cf..ac84c02e3cc2 100644 --- a/packages/kit/src/exports/env/index.js +++ b/packages/kit/src/exports/env/index.js @@ -1,5 +1,5 @@ /** @import { StandardSchemaV1 } from '@standard-schema/spec' */ -/** @import { DefinedEnvVars, EnvVarConfig } from '@sveltejs/kit' */ +/** @import { DefinedEnvVars, EnvVarConfig } from '@sveltejs/kit/env' */ /** * Utility for defining [environment variables](https://svelte.dev/docs/kit/environment-variables), diff --git a/packages/kit/src/exports/env/public.d.ts b/packages/kit/src/exports/env/public.d.ts new file mode 100644 index 000000000000..b883f88b5334 --- /dev/null +++ b/packages/kit/src/exports/env/public.d.ts @@ -0,0 +1,55 @@ +import { StandardSchemaV1 } from '@standard-schema/spec'; + +export * from './index.js'; + +/** + * [Environment variables](https://svelte.dev/docs/kit/environment-variables) can be configured by exporting + * a `variables` object from `src/env.ts`, using [`defineEnvVars`](https://svelte.dev/docs/kit/@sveltejs-kit-env#defineEnvVars). + */ +export interface EnvVarConfig { + /** + * Whether the environment variable can be accessed by client-side code. + * - if `true`, it can be imported from `$app/env/public` + * - if `false`, it can be imported from `$app/env/private`, which is a [server-only module](https://svelte.dev/docs/kit/server-only-modules) + * @default false + */ + public?: boolean; + /** + * Whether the value is determined at build time or when the app runs. + * - if `true`, the build time value is inlined into the bundle. This enables optimisations like dead-code elimination + * - if `false`, the value is read from the environment when the app starts + * @default false + */ + static?: boolean; + /** + * A [Standard Schema](https://standardschema.dev/) validator that is applied to the value when the app starts. + * Alternatively, a function that returns the (possibly transformed) value, or throws an error explaining + * the problem. Returning `undefined` is valid, so a function can describe an optional variable. + * The validator can output any value — not necessarily a string — but public, non-static values must be + * serializable by [devalue](https://github.com/sveltejs/devalue) so that they can be sent to the browser. + * + * If omitted, the value must be set, but may be an empty string. + */ + schema?: StandardSchemaV1 | ((value: string | undefined) => T | undefined); + /** + * A description of the variable that will be used for inline documentation on hover. + */ + description?: string; +} + +/** + * The return type of [`defineEnvVars`](https://svelte.dev/docs/kit/@sveltejs-kit-env#defineEnvVars). + */ +export type DefinedEnvVars>> = { + readonly [K in keyof T]: EnvVarEntry; +}; + +/** + * Normalizes an environment variable config's schema (standard schema or function) to standard schema. + */ +type EnvVarEntry> = + C['schema'] extends StandardSchemaV1 + ? C + : C['schema'] extends (value: any) => infer R + ? Omit & { schema: StandardSchemaV1 } + : C; diff --git a/packages/kit/src/exports/internal/env.js b/packages/kit/src/exports/internal/env.js index e01edb9edfd2..163f7fcbaf9f 100644 --- a/packages/kit/src/exports/internal/env.js +++ b/packages/kit/src/exports/internal/env.js @@ -1,5 +1,5 @@ /** @import { StandardSchemaV1 } from '@standard-schema/spec' */ -/** @import { EnvVarConfig } from '@sveltejs/kit' */ +/** @import { EnvVarConfig } from '@sveltejs/kit/env' */ import { stackless } from '../../utils/error.js'; diff --git a/packages/kit/src/exports/public.d.ts b/packages/kit/src/exports/public.d.ts index 17383f59138d..9ff14db8e68a 100644 --- a/packages/kit/src/exports/public.d.ts +++ b/packages/kit/src/exports/public.d.ts @@ -43,7 +43,10 @@ type AppErrorWithOptionalDefaults = Omit & { * to those of the caught error. If `App.Error` is augmented with required properties, the hook * must return them, so returning nothing becomes a type error. */ -type VoidIfNoRequiredAppErrorProperties = { status: number; message: string } extends App.Error +type VoidIfNoRequiredAppErrorProperties = { + status: number; + message: string; +} extends App.Error ? void : never; @@ -2118,56 +2121,4 @@ export type RemoteLiveQueryFunction = ( arg: undefined extends Input ? Input | void : Input ) => RemoteLiveQuery; -/** - * [Environment variables](https://svelte.dev/docs/kit/environment-variables) can be configured by exporting - * a `variables` object from `src/env.ts`, using [`defineEnvVars`](https://svelte.dev/docs/kit/@sveltejs-kit-env#defineEnvVars). - */ -export interface EnvVarConfig { - /** - * Whether the environment variable can be accessed by client-side code. - * - if `true`, it can be imported from `$app/env/public` - * - if `false`, it can be imported from `$app/env/private`, which is a [server-only module](https://svelte.dev/docs/kit/server-only-modules) - * @default false - */ - public?: boolean; - /** - * Whether the value is determined at build time or when the app runs. - * - if `true`, the build time value is inlined into the bundle. This enables optimisations like dead-code elimination - * - if `false`, the value is read from the environment when the app starts - * @default false - */ - static?: boolean; - /** - * A [Standard Schema](https://standardschema.dev/) validator that is applied to the value when the app starts. - * Alternatively, a function that returns the (possibly transformed) value, or throws an error explaining - * the problem. Returning `undefined` is valid, so a function can describe an optional variable. - * The validator can output any value — not necessarily a string — but public, non-static values must be - * serializable by [devalue](https://github.com/sveltejs/devalue) so that they can be sent to the browser. - * - * If omitted, the value must be set, but may be an empty string. - */ - schema?: StandardSchemaV1 | ((value: string | undefined) => T | undefined); - /** - * A description of the variable that will be used for inline documentation on hover. - */ - description?: string; -} - -/** - * The return type of [`defineEnvVars`](https://svelte.dev/docs/kit/@sveltejs-kit-env#defineEnvVars). - */ -export type DefinedEnvVars>> = { - readonly [K in keyof T]: EnvVarEntry; -}; - -/** - * Normalizes an environment variable config's schema (standard schema or function) to standard schema. - */ -type EnvVarEntry> = - C['schema'] extends StandardSchemaV1 - ? C - : C['schema'] extends (value: any) => infer R - ? Omit & { schema: StandardSchemaV1 } - : C; - export * from './index.js'; diff --git a/packages/kit/src/exports/vite/index.js b/packages/kit/src/exports/vite/index.js index 1a35a25217b0..a5ee709bf30c 100644 --- a/packages/kit/src/exports/vite/index.js +++ b/packages/kit/src/exports/vite/index.js @@ -1,4 +1,5 @@ -/** @import { EnvVarConfig, KitConfig } from '@sveltejs/kit' */ +/** @import { KitConfig } from '@sveltejs/kit' */ +/** @import { EnvVarConfig } from '@sveltejs/kit/env' */ /** @import { Options, SvelteConfig } from '@sveltejs/vite-plugin-svelte' */ /** @import { PreprocessorGroup } from 'svelte/compiler' */ /** @import { Asset, BuildData, ManifestData, Prerendered, RemoteChunk, RemoteInternals, RouteData, ServerMetadata, ValidatedConfig, ValidatedKitConfig } from 'types' */ diff --git a/packages/kit/tsconfig.json b/packages/kit/tsconfig.json index a220bd329fab..8af5dcd5f9f9 100644 --- a/packages/kit/tsconfig.json +++ b/packages/kit/tsconfig.json @@ -8,7 +8,7 @@ "moduleResolution": "nodenext", "paths": { "@sveltejs/kit": ["./src/exports/public.d.ts"], - "@sveltejs/kit/env": ["./src/exports/env/index.js"], + "@sveltejs/kit/env": ["./src/exports/env/public.d.ts"], "@sveltejs/kit/params": ["./src/exports/params/public.d.ts"], "@sveltejs/kit/vite": ["./src/exports/vite/index.js"], "@sveltejs/kit/node": ["./src/exports/node/index.js"], diff --git a/packages/kit/types/index.d.ts b/packages/kit/types/index.d.ts index 59f7f0709c52..d573fa9c75bc 100644 --- a/packages/kit/types/index.d.ts +++ b/packages/kit/types/index.d.ts @@ -20,7 +20,10 @@ declare module '@sveltejs/kit' { * to those of the caught error. If `App.Error` is augmented with required properties, the hook * must return them, so returning nothing becomes a type error. */ - type VoidIfNoRequiredAppErrorProperties = { status: number; message: string } extends App.Error + type VoidIfNoRequiredAppErrorProperties = { + status: number; + message: string; + } extends App.Error ? void : never; @@ -2079,58 +2082,6 @@ declare module '@sveltejs/kit' { export type RemoteLiveQueryFunction = ( arg: undefined extends Input ? Input | void : Input ) => RemoteLiveQuery; - - /** - * [Environment variables](https://svelte.dev/docs/kit/environment-variables) can be configured by exporting - * a `variables` object from `src/env.ts`, using [`defineEnvVars`](https://svelte.dev/docs/kit/@sveltejs-kit-env#defineEnvVars). - */ - export interface EnvVarConfig { - /** - * Whether the environment variable can be accessed by client-side code. - * - if `true`, it can be imported from `$app/env/public` - * - if `false`, it can be imported from `$app/env/private`, which is a [server-only module](https://svelte.dev/docs/kit/server-only-modules) - * @default false - */ - public?: boolean; - /** - * Whether the value is determined at build time or when the app runs. - * - if `true`, the build time value is inlined into the bundle. This enables optimisations like dead-code elimination - * - if `false`, the value is read from the environment when the app starts - * @default false - */ - static?: boolean; - /** - * A [Standard Schema](https://standardschema.dev/) validator that is applied to the value when the app starts. - * Alternatively, a function that returns the (possibly transformed) value, or throws an error explaining - * the problem. Returning `undefined` is valid, so a function can describe an optional variable. - * The validator can output any value — not necessarily a string — but public, non-static values must be - * serializable by [devalue](https://github.com/sveltejs/devalue) so that they can be sent to the browser. - * - * If omitted, the value must be set, but may be an empty string. - */ - schema?: StandardSchemaV1 | ((value: string | undefined) => T | undefined); - /** - * A description of the variable that will be used for inline documentation on hover. - */ - description?: string; - } - - /** - * The return type of [`defineEnvVars`](https://svelte.dev/docs/kit/@sveltejs-kit-env#defineEnvVars). - */ - export type DefinedEnvVars>> = { - readonly [K in keyof T]: EnvVarEntry; - }; - - /** - * Normalizes an environment variable config's schema (standard schema or function) to standard schema. - */ - type EnvVarEntry> = - C['schema'] extends StandardSchemaV1 - ? C - : C['schema'] extends (value: any) => infer R - ? Omit & { schema: StandardSchemaV1 } - : C; interface AdapterEntry { /** * A string that uniquely identifies an HTTP service (e.g. serverless function) and is used for deduplication. @@ -2576,7 +2527,58 @@ declare module '@sveltejs/kit' { } declare module '@sveltejs/kit/env' { - import type { EnvVarConfig, DefinedEnvVars } from '@sveltejs/kit'; + import type { StandardSchemaV1 } from '@standard-schema/spec'; + /** + * [Environment variables](https://svelte.dev/docs/kit/environment-variables) can be configured by exporting + * a `variables` object from `src/env.ts`, using [`defineEnvVars`](https://svelte.dev/docs/kit/@sveltejs-kit-env#defineEnvVars). + */ + export interface EnvVarConfig { + /** + * Whether the environment variable can be accessed by client-side code. + * - if `true`, it can be imported from `$app/env/public` + * - if `false`, it can be imported from `$app/env/private`, which is a [server-only module](https://svelte.dev/docs/kit/server-only-modules) + * @default false + */ + public?: boolean; + /** + * Whether the value is determined at build time or when the app runs. + * - if `true`, the build time value is inlined into the bundle. This enables optimisations like dead-code elimination + * - if `false`, the value is read from the environment when the app starts + * @default false + */ + static?: boolean; + /** + * A [Standard Schema](https://standardschema.dev/) validator that is applied to the value when the app starts. + * Alternatively, a function that returns the (possibly transformed) value, or throws an error explaining + * the problem. Returning `undefined` is valid, so a function can describe an optional variable. + * The validator can output any value — not necessarily a string — but public, non-static values must be + * serializable by [devalue](https://github.com/sveltejs/devalue) so that they can be sent to the browser. + * + * If omitted, the value must be set, but may be an empty string. + */ + schema?: StandardSchemaV1 | ((value: string | undefined) => T | undefined); + /** + * A description of the variable that will be used for inline documentation on hover. + */ + description?: string; + } + + /** + * The return type of [`defineEnvVars`](https://svelte.dev/docs/kit/@sveltejs-kit-env#defineEnvVars). + */ + export type DefinedEnvVars>> = { + readonly [K in keyof T]: EnvVarEntry; + }; + + /** + * Normalizes an environment variable config's schema (standard schema or function) to standard schema. + */ + type EnvVarEntry> = + C['schema'] extends StandardSchemaV1 + ? C + : C['schema'] extends (value: any) => infer R + ? Omit & { schema: StandardSchemaV1 } + : C; /** * Utility for defining [environment variables](https://svelte.dev/docs/kit/environment-variables), * which are made available via `$app/env/public` and `$app/env/private`. From 9b13a15a3bdcad659bff99bbbfcc913265f81844 Mon Sep 17 00:00:00 2001 From: Tee Ming Date: Wed, 12 Aug 2026 01:21:38 +0800 Subject: [PATCH 502/545] docs: fix snippet type error (#16741) --- documentation/docs/60-appendix/35-migrating-to-sveltekit-3.md | 1 + 1 file changed, 1 insertion(+) diff --git a/documentation/docs/60-appendix/35-migrating-to-sveltekit-3.md b/documentation/docs/60-appendix/35-migrating-to-sveltekit-3.md index 576026c7a62f..df65657db1fc 100644 --- a/documentation/docs/60-appendix/35-migrating-to-sveltekit-3.md +++ b/documentation/docs/60-appendix/35-migrating-to-sveltekit-3.md @@ -86,6 +86,7 @@ The `$lib` alias is no longer generated automatically by SvelteKit. It is replac ...and replace `$lib` with `#lib` across your codebase. Note that you will also have to add the module extensions (e.g. `.js` or `.ts`) to these imports. ```js +// @errors: 2307 imported module has no types ---import { foo } from '$lib/foo';--- +++import { foo } from '#lib/foo.js';+++ ``` From 194e76c372629395bc3fb1d79aaede33ecd22312 Mon Sep 17 00:00:00 2001 From: Tee Ming Date: Wed, 12 Aug 2026 02:08:02 +0800 Subject: [PATCH 503/545] docs: fix env link (#16743) --- documentation/docs/20-core-concepts/70-environment-variables.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/documentation/docs/20-core-concepts/70-environment-variables.md b/documentation/docs/20-core-concepts/70-environment-variables.md index 40e1f15ddf31..8b282fef7855 100644 --- a/documentation/docs/20-core-concepts/70-environment-variables.md +++ b/documentation/docs/20-core-concepts/70-environment-variables.md @@ -32,7 +32,7 @@ export const variables = defineEnvVars({ }); ``` -Each value in the object passed to [`defineEnvVars`](@sveltejs-kit-env#defineEnvVars) is an [`EnvVarConfig`](@sveltejs-kit#EnvVarConfig) object that configures the environment variable. +Each value in the object passed to [`defineEnvVars`](@sveltejs-kit-env#defineEnvVars) is an [`EnvVarConfig`](@sveltejs-kit-env#EnvVarConfig) object that configures the environment variable. > [!NOTE] `defineEnvVars` returns its argument unaltered — it exists purely to help with type safety. From 42bf482edbeaeaf218b49a31c0505a8954295d43 Mon Sep 17 00:00:00 2001 From: Tee Ming Date: Wed, 12 Aug 2026 02:09:53 +0800 Subject: [PATCH 504/545] chore: sync `main` and `version-3` (#16742) not sure how it got out of sync again Co-authored-by: github-actions[bot] From 1742811562358caf6042bed33c60ce6427a3e831 Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Tue, 11 Aug 2026 14:46:29 -0400 Subject: [PATCH 505/545] breaking: move remote function types to `$app/server` (#16740) another part of #16676 --- ### Please don't delete this checklist! Before submitting the PR, please make sure you do the following: - [x] It's really useful if your PR references an issue where it is discussed ahead of time. In many cases, features are absent for a reason. For large changes, please create an RFC: https://github.com/sveltejs/rfcs - [x] This message body should clearly illustrate what problems it solves. - [ ] Ideally, include a test that fails without this PR but passes with it. ### Tests - [x] Run the tests with `pnpm test` and lint the project with `pnpm lint` and `pnpm check` ### Changesets - [x] If your PR makes a change that should be noted in one or more packages' changelogs, generate a changeset by running `pnpm changeset` and following the prompts. Changesets that add features should be `minor` and those that fix bugs should be `patch`. Please prefix changeset messages with `feat:`, `fix:`, or `chore:`. ### Edits - [x] Please ensure that 'Allow edits from maintainers' is checked. PRs without this option may be closed. --------- Co-authored-by: github-actions[bot] Co-authored-by: vercel[bot] <35613825+vercel[bot]@users.noreply.github.com> Co-authored-by: Vercel Co-authored-by: teemingc --- .changeset/afraid-peaches-stay.md | 6 + .../20-core-concepts/60-remote-functions.md | 7 +- packages/kit/scripts/generate-dts.js | 2 +- packages/kit/src/exports/index.js | 2 +- packages/kit/src/exports/public.d.ts | 519 +---- .../kit/src/runtime/app/server/public.d.ts | 519 +++++ .../src/runtime/app/server/remote/command.js | 2 +- .../kit/src/runtime/app/server/remote/form.js | 2 +- .../runtime/app/server/remote/prerender.js | 2 +- .../src/runtime/app/server/remote/query.js | 3 +- .../runtime/app/server/remote/requested.js | 2 +- .../client/remote-functions/command.svelte.js | 2 +- .../client/remote-functions/form.svelte.js | 2 +- .../remote-functions/prerender.svelte.js | 2 +- .../remote-functions/query-batch.svelte.js | 2 +- .../remote-functions/query-live/index.js | 2 +- .../client/remote-functions/query/index.js | 2 +- .../client/remote-functions/shared.svelte.js | 2 +- .../src/runtime/server/remote-functions.js | 3 +- packages/kit/src/types/internal.d.ts | 6 +- .../not-tracked/+page.svelte | 2 +- .../src/routes/remote/validation/+page.svelte | 21 +- packages/kit/test/types/remote.test.ts | 14 +- packages/kit/tsconfig.json | 2 +- packages/kit/types/index.d.ts | 1745 ++++++++--------- 25 files changed, 1444 insertions(+), 1429 deletions(-) create mode 100644 .changeset/afraid-peaches-stay.md create mode 100644 packages/kit/src/runtime/app/server/public.d.ts diff --git a/.changeset/afraid-peaches-stay.md b/.changeset/afraid-peaches-stay.md new file mode 100644 index 000000000000..414bb33f131f --- /dev/null +++ b/.changeset/afraid-peaches-stay.md @@ -0,0 +1,6 @@ +--- +"@sveltejs/kit": major +--- + +breaking: move remote function types to `$app/server` + \ No newline at end of file diff --git a/documentation/docs/20-core-concepts/60-remote-functions.md b/documentation/docs/20-core-concepts/60-remote-functions.md index 946e7edf68df..57673a380093 100644 --- a/documentation/docs/20-core-concepts/60-remote-functions.md +++ b/documentation/docs/20-core-concepts/60-remote-functions.md @@ -296,7 +296,7 @@ If you need direct, imperative access to the underlying stream of values (rather ```js // @filename: time.remote.ts -import { RemoteLiveQueryFunction } from '@sveltejs/kit'; +import { RemoteLiveQueryFunction } from '$app/server'; export declare const getTime: RemoteLiveQueryFunction; // @errors: 2304 // @filename: index.js @@ -1057,7 +1057,7 @@ Unfortunately, life isn't always as simple as the preceding example. The server SvelteKit makes this easy by allowing the client to _request_ that the server updates specific data using `submit().updates` (for `form`) or `myCommand().updates` (for `command`): ```ts -import type { RemoteQueryUpdate, RemoteQuery } from '@sveltejs/kit'; +import type { RemoteQueryUpdate, RemoteQuery } from '$app/server'; interface Post {} declare function submit(): Promise & { updates(...updates: RemoteQueryUpdate[]): Promise; @@ -1112,8 +1112,7 @@ export const createPost = form( Additionally, `requested` allows a simple shorthand when all you want to do is refresh the requested query instances: ```ts -import type { RemoteQueryFunction } from '@sveltejs/kit'; -import { requested } from '$app/server'; +import { requested, type RemoteQueryFunction } from '$app/server'; declare const getPosts: RemoteQueryFunction; // ---cut--- // this is the same as looping over the result and calling `void query.refresh()`. diff --git a/packages/kit/scripts/generate-dts.js b/packages/kit/scripts/generate-dts.js index c11bbc1782b3..16d53ed24699 100644 --- a/packages/kit/scripts/generate-dts.js +++ b/packages/kit/scripts/generate-dts.js @@ -14,7 +14,7 @@ await createBundle({ '$app/forms': 'src/runtime/app/forms/public.d.ts', '$app/navigation': 'src/runtime/app/navigation/public.d.ts', '$app/paths': 'src/runtime/app/paths/public.d.ts', - '$app/server': 'src/runtime/app/server/index.js', + '$app/server': 'src/runtime/app/server/public.d.ts', '$app/service-worker': 'src/runtime/app/service-worker/index.js', '$app/state': 'src/runtime/app/state/public.d.ts' }, diff --git a/packages/kit/src/exports/index.js b/packages/kit/src/exports/index.js index 80132d84411a..8dd08e4a7537 100644 --- a/packages/kit/src/exports/index.js +++ b/packages/kit/src/exports/index.js @@ -273,7 +273,7 @@ export function invalid(...issues) { /** * Checks whether this is an validation error thrown by {@link invalid}. * @param {unknown} e The object to check. - * @return {e is import('./public.js').ActionFailure} + * @return {e is import('$app/server').ValidationError} * @since 2.47.3 */ export function isValidationError(e) { diff --git a/packages/kit/src/exports/public.d.ts b/packages/kit/src/exports/public.d.ts index 9ff14db8e68a..6e822a58169b 100644 --- a/packages/kit/src/exports/public.d.ts +++ b/packages/kit/src/exports/public.d.ts @@ -16,9 +16,7 @@ import { PrerenderUnseenRoutesHandlerValue, PrerenderOption, RequestOptions, - RouteSegment, - DeepPartial, - IsAny + RouteSegment } from '../types/private.js'; import { BuildData, SSRNodeLoader, SSRRoute, ValidatedConfig } from 'types'; import { SvelteConfig } from '@sveltejs/vite-plugin-svelte'; @@ -1258,67 +1256,6 @@ export interface NavigationEvent< url: URL; } -/** - * A single entry yielded by [`requested`](https://svelte.dev/docs/kit/$app-server#requested) - * when called with a regular `query`. `arg` is the validated argument (the input *after* - * the query's schema validated and transformed it, if applicable); `query` is a - * `RemoteQuery` bound to the client's original cache key, so `refresh()` / `set()` will - * update the correct client entry. - */ -export type RequestedEntry = { - arg: Validated; - query: RemoteQuery; -}; - -/** - * A single entry yielded by [`requested`](https://svelte.dev/docs/kit/$app-server#requested) - * when called with a `query.live`. `arg` is the validated argument; `query` is a - * `RemoteLiveQuery` bound to the client's original cache key, so `reconnect()` targets - * the correct client subscription. - */ -export type LiveRequestedEntry = { - arg: Validated; - query: RemoteLiveQuery; -}; - -export type QueryRequestedResult = Iterable> & - AsyncIterable> & { - /** - * Call `refresh` on all queries selected by this `requested` invocation. - * This is identical to: - * ```ts - * import { requested } from '$app/server'; - * - * for await (const { query } of requested(getPost, ...)) { - * void query.refresh(); - * } - * ``` - */ - refreshAll: () => Promise; - }; - -export type LiveQueryRequestedResult = Iterable< - LiveRequestedEntry -> & - AsyncIterable> & { - /** - * Call `reconnect` on all live queries selected by this `requested` invocation. - * This is identical to: - * ```ts - * import { requested } from '$app/server'; - * - * for await (const { query } of requested(liveQuery, ...)) { - * void query.reconnect(); - * } - * ``` - */ - reconnectAll: () => Promise; - }; - -export type RequestedResult = - | QueryRequestedResult - | LiveQueryRequestedResult; - export interface RequestEvent< Params extends AppLayoutParams<'/'> = AppLayoutParams<'/'>, RouteId extends AppRouteId | null = AppRouteId | null @@ -1667,458 +1604,4 @@ export interface Snapshot { restore: (snapshot: T) => void; } -// If T is unknown or has an index signature, the types below will recurse indefinitely and create giant unions that TS can't handle -type WillRecurseIndefinitely = unknown extends T ? true : string extends keyof T ? true : false; - -// Input type mappings for form fields -type InputTypeMap = { - text: string; - email: string; - password: string; - url: string; - tel: string; - search: string; - number: number; - range: number; - date: string; - 'datetime-local': string; - time: string; - month: string; - week: string; - color: string; - checkbox: boolean | string[]; - radio: string; - file: File; - hidden: string | number | boolean; - submit: string | number | boolean; - button: string; - reset: string; - image: string; - select: string; - 'select multiple': string[]; - 'file multiple': File[]; -}; - -// Valid input types for a given value type -export type RemoteFormFieldType = { - [K in keyof InputTypeMap]: T extends InputTypeMap[K] ? K : never; -}[keyof InputTypeMap]; - -// Input element properties based on type -type InputElementProps = T extends 'checkbox' | 'radio' - ? { - name: string; - type: T; - value?: string; - 'aria-invalid': boolean | 'false' | 'true' | undefined; - get checked(): boolean; - set checked(value: boolean); - readonly defaultChecked?: boolean; - } - : T extends 'file' - ? { - name: string; - type: 'file'; - 'aria-invalid': boolean | 'false' | 'true' | undefined; - get files(): FileList | null; - set files(v: FileList | null); - } - : T extends 'select' - ? { - name: string; - 'aria-invalid': boolean | 'false' | 'true' | undefined; - get value(): string; - set value(v: string); - } - : T extends 'select multiple' - ? { - name: string; - multiple: true; - 'aria-invalid': boolean | 'false' | 'true' | undefined; - get value(): string[]; - set value(v: string[]); - } - : T extends 'text' - ? { - name: string; - 'aria-invalid': boolean | 'false' | 'true' | undefined; - get value(): string | number; - set value(v: string | number); - readonly defaultValue?: string | number; - } - : { - name: string; - type: T; - 'aria-invalid': boolean | 'false' | 'true' | undefined; - get value(): string | number; - set value(v: string | number); - readonly defaultValue?: string | number; - }; - -type RemoteFormFieldMethods = { - /** The values that will be submitted */ - value(): DeepPartial; - /** Set the values that will be submitted */ - set(input: DeepPartial): DeepPartial; - /** Whether the field or any nested field has been interacted with since the form was mounted */ - touched(): boolean; - /** Whether the field or any nested field has been edited since the form was mounted */ - dirty(): boolean; - /** Validation issues, if any */ - issues(): RemoteFormIssue[] | undefined; -}; - -// These two types use "T extends unknown ? .. : .." to distribute over unions. -// Example: if "type T = A | b" then "keyof T" only contains keys that both A and B have, with "KeysOfUnion" we get the keys of both A and B -type KeysOfUnion = T extends unknown ? keyof T : never; -type ValueOfUnionKey = T extends unknown - ? K extends keyof T - ? T[K] - : never - : never; - -export type RemoteFormFieldValue = string | string[] | number | boolean | File | File[]; - -type AsArgs = Type extends 'checkbox' - ? Value extends string[] - ? [type: Type, value: Value[number] | (string & {})] - : Value extends boolean - ? [type: Type] | [type: Type, value: boolean] - : [type: Type] | [type: Type, value: Value | (string & {})] - : Type extends 'submit' | 'hidden' - ? Value extends string - ? [type: Type, value: Value | (string & {})] - : [type: Type, value: Value] - : Type extends 'radio' - ? [type: Type, value: Value | (string & {})] - : Type extends 'file' | 'file multiple' - ? [type: Type] - : [type: Type] | [type: Type, value: Value | undefined]; - -/** - * Form field accessor type that provides name(), value(), and issues() methods - */ -export type RemoteFormField = RemoteFormFieldMethods & { - /** - * Returns an object that can be spread onto an input element with the correct type attribute, - * aria-invalid attribute if the field is invalid, and appropriate value/checked property getters/setters. - * @example - * ```svelte - * - * - * - * ``` - */ - as>(...args: AsArgs): InputElementProps; -}; - -type RemoteFormFieldContainer = RemoteFormFieldMethods & { - /** Validation issues belonging to this or any of the fields that belong to it, if any */ - allIssues(): RemoteFormIssue[] | undefined; -}; - -type UnknownField = RemoteFormFieldMethods & { - /** Validation issues belonging to this or any of the fields that belong to it, if any */ - allIssues(): RemoteFormIssue[] | undefined; - /** - * Returns an object that can be spread onto an input element with the correct type attribute, - * aria-invalid attribute if the field is invalid, and appropriate value/checked property getters/setters. - * @example - * ```svelte - * - * - * - * ``` - */ - as>(...args: AsArgs): InputElementProps; -} & { - [key: string | number]: UnknownField; -}; - -type RemoteFormFieldsRoot = - IsAny extends true - ? RecursiveFormFields - : Input extends void - ? { - /** Validation issues, if any */ - issues(): RemoteFormIssue[] | undefined; - /** Validation issues belonging to this or any of the fields that belong to it, if any */ - allIssues(): RemoteFormIssue[] | undefined; - } - : RemoteFormFields; - -/** - * Recursive type to build form fields structure with proxy access - */ -export type RemoteFormFields = - WillRecurseIndefinitely extends true - ? RecursiveFormFields - : NonNullable extends string | number | boolean | File - ? RemoteFormField> - : // [NonNullable] is used to prevent distributing over union while still allowing - // nullable wrappers (e.g. `string[] | undefined` from a schema with `.default([])`) - // to be treated as arrays; only the last condition should distribute over unions - [NonNullable] extends [string[] | File[]] - ? RemoteFormField> & { - [K in number]: RemoteFormField[number]>; - } - : [NonNullable] extends [Array] - ? RemoteFormFieldContainer> & { - [K in number]: RemoteFormFields; - } - : RemoteFormFieldContainer & { - [K in KeysOfUnion]-?: RemoteFormFields>; - }; - -// By breaking this out into its own type, we avoid the TS recursion depth limit -type RecursiveFormFields = RemoteFormFieldContainer & { - [key: string | number]: UnknownField; -}; - -type MaybeArray = T | T[]; - -export interface RemoteFormInput { - [key: string]: MaybeArray | undefined; -} - -export interface RemoteFormIssue { - message: string; - path: Array; -} - -// If the schema specifies `id` as a string or number, ensure that `for(...)` -// only accepts that type. Otherwise, accept `string | number` -type ExtractId = Input extends { id: infer Id } - ? Id extends string | number - ? Id - : string | number - : string | number; - -/** - * A function and proxy object used to imperatively create validation errors in form handlers. - * - * Access properties to create field-specific issues: `issue.fieldName('message')`. - * The type structure mirrors the input data structure for type-safe field access. - * Call `invalid(issue.foo(...), issue.nested.bar(...))` to throw a validation error. - */ -export type InvalidField = - WillRecurseIndefinitely extends true - ? Record - : NonNullable extends string | number | boolean | File - ? (message: string) => StandardSchemaV1.Issue - : NonNullable extends Array - ? { - [K in number]: InvalidField; - } & ((message: string) => StandardSchemaV1.Issue) - : NonNullable extends RemoteFormInput - ? { - [K in keyof T]-?: InvalidField; - } & ((message: string) => StandardSchemaV1.Issue) - : Record; - -/** - * A validation error thrown by `invalid`. - */ -export interface ValidationError { - /** The validation issues */ - issues: StandardSchemaV1.Issue[]; -} - -/** - * The form instance as received inside an `enhance` callback. See [Remote functions](https://svelte.dev/docs/kit/remote-functions#form) for full documentation. - */ -export type RemoteFormEnhanceInstance< - Input extends RemoteFormInput | void = RemoteFormInput | void, - Output = any -> = Omit, 'enhance' | 'element'> & { - readonly element: HTMLFormElement; -}; - -/** - * The callback passed to a remote form's `enhance` method. See [Remote functions](https://svelte.dev/docs/kit/remote-functions#form) for full documentation. - */ -export type RemoteFormEnhanceCallback< - Input extends RemoteFormInput | void = RemoteFormInput | void, - Output = any -> = (form: RemoteFormEnhanceInstance) => MaybePromise; - -/** - * The type of a remote `form` function. See [Remote functions](https://svelte.dev/docs/kit/remote-functions#form) for full documentation. - */ -export type RemoteForm = { - /** Attachment that sets up an event handler that intercepts the form submission on the client to prevent a full page reload */ - [attachment: symbol]: (node: HTMLFormElement) => void; - method: 'POST'; - /** The URL to send the form to. */ - action: string; - /** The `
` element this instance is currently attached to, if any. */ - get element(): HTMLFormElement | null; - /** Submit the currently attached form programmatically. */ - submit(): Promise & { - updates: (...updates: RemoteQueryUpdate[]) => Promise; - }; - /** Use the `enhance` method to influence what happens when the form is submitted. */ - enhance(callback: RemoteFormEnhanceCallback): { - method: 'POST'; - action: string; - [attachment: symbol]: (node: HTMLFormElement) => void; - }; - /** - * Create an instance of the form for the given `id`. - * The `id` is stringified and used for deduplication to potentially reuse existing instances. - * Useful when you have multiple forms that use the same remote form action, for example in a loop. - * ```svelte - * {#each todos as todo} - * {@const todoForm = updateTodo.for(todo.id)} - * - * {#if todoForm.result?.invalid}

Invalid data

{/if} - * ... - * - * {/each} - * ``` - */ - for(id: ExtractId): Omit, 'for'>; - /** Preflight checks */ - preflight(schema: StandardSchemaV1): RemoteForm; - /** Validate the form contents programmatically */ - validate(options?: { - /** - * Set this to `true` to also show validation issues of fields that haven't yet been - * edited and blurred. This option is ignored for forms that have previously been - * submitted, in which case all fields are always subject to validation - * (unless the form is reset, at which point it is treated as pristine) - */ - all?: boolean; - /** Set this to `true` to only run the `preflight` validation. */ - preflightOnly?: boolean; - }): Promise; - /** The result of the form submission */ - get result(): Output | undefined; - /** The number of pending submissions */ - get pending(): number; - /** True if the form has been submitted at least once, and hasn't been reset since */ - get submitted(): boolean; - /** Access form fields using object notation */ - fields: RemoteFormFieldsRoot; -}; - -/** - * The type of a remote `command` function. See [Remote functions](https://svelte.dev/docs/kit/remote-functions#command) for full documentation. - */ -export type RemoteCommand = { - (arg: undefined extends Input ? Input | void : Input): Promise & { - updates(...updates: RemoteQueryUpdate[]): Promise; - }; - /** The number of pending command executions */ - get pending(): number; -}; - -export type RemoteQueryUpdate = - | RemoteQuery - | RemoteLiveQuery - | RemoteQueryFunction - | RemoteLiveQueryFunction - | RemoteQueryOverride; - -export type RemoteResource = Promise & { - /** The error in case the query fails. */ - get error(): App.Error | undefined; - /** `true` before the first result is available and during refreshes */ - get loading(): boolean; -} & ( - | { - /** The current value of the query. Undefined until `ready` is `true` */ - get current(): undefined; - ready: false; - } - | { - /** The current value of the query. Undefined until `ready` is `true` */ - get current(): T; - ready: true; - } - ); - -export type RemoteQuery = RemoteResource & { - /** - * On the client, this function will update the value of the query without re-fetching it. - * - * On the server, this can be called in the context of a `command` or `form` and the specified data will accompany the action response back to the client. - * This prevents SvelteKit needing to refresh all queries on the page in a second server round-trip. - */ - set(value: T): void; - /** - * On the client, this function will re-fetch the query from the server. - * - * On the server, this can be called in the context of a `command` or `form` and the refreshed data will accompany the action response back to the client. - * This prevents SvelteKit needing to refresh all queries on the page in a second server round-trip. - */ - refresh(): Promise; - /** - * Temporarily override a query's value during a [single-flight mutation](https://svelte.dev/docs/kit/remote-functions#Single-flight-mutations) to provide optimistic updates. - * - * ```svelte - * - * - *
{ - * await form.submit().updates( - * todos.withOverride((todos) => [...todos, { text: form.fields.text.value() }]) - * ); - * })}> - * - * - *
- * ``` - */ - withOverride(update: (current: T) => T): RemoteQueryOverride; -}; - -export type RemoteLiveQuery = RemoteResource & - AsyncIterable & { - /** `true` if the live stream is currently connected. */ - readonly connected: boolean; - /** `true` once the current live stream iterator is done. */ - readonly done: boolean; - /** Reconnects the live stream immediately. */ - reconnect(): Promise; - }; - -export type RemoteQueryOverride = () => void; - -/** - * The type of a remote `prerender` function. See [Remote functions](https://svelte.dev/docs/kit/remote-functions#prerender) for full documentation. - */ -export type RemotePrerenderFunction = ( - arg: undefined extends Input ? Input | void : Input -) => RemoteResource; - -/** - * The return value of a remote `query` function. See [Remote functions](https://svelte.dev/docs/kit/remote-functions#query) for full documentation. - * - * The optional `Validated` generic parameter represents the argument type *after* the - * query's schema has validated and (optionally) transformed it — this is the type the - * query's implementation function receives on the server, and the type yielded by - * [`requested`](https://svelte.dev/docs/kit/$app-server#requested). For queries declared - * with [Standard Schema](https://standardschema.dev/) it differs from `Input` when the - * schema contains a transform (e.g. `v.pipe(v.number(), v.transform(String))` has - * `Input = number` but `Validated = string`). For `'unchecked'` validators and queries - * without arguments it defaults to `Input`. - */ -export type RemoteQueryFunction = ( - arg: undefined extends Input ? Input | void : Input -) => RemoteQuery; - -/** - * The type of a remote `query.live` function. See [Remote functions](https://svelte.dev/docs/kit/remote-functions#query.live) for full documentation. - * - * The optional `Validated` generic parameter represents the argument type *after* the - * query's schema has validated and (optionally) transformed it, and matches the type - * yielded by [`requested`](https://svelte.dev/docs/kit/$app-server#requested). - */ -export type RemoteLiveQueryFunction = ( - arg: undefined extends Input ? Input | void : Input -) => RemoteLiveQuery; - export * from './index.js'; diff --git a/packages/kit/src/runtime/app/server/public.d.ts b/packages/kit/src/runtime/app/server/public.d.ts new file mode 100644 index 000000000000..db917dc1487b --- /dev/null +++ b/packages/kit/src/runtime/app/server/public.d.ts @@ -0,0 +1,519 @@ +import { StandardSchemaV1 } from '@standard-schema/spec'; +import { DeepPartial, IsAny, MaybePromise } from 'types'; + +export * from './index.js'; + +// If T is unknown or has an index signature, the types below will recurse indefinitely and create giant unions that TS can't handle +type WillRecurseIndefinitely = unknown extends T ? true : string extends keyof T ? true : false; + +// Input type mappings for form fields +type InputTypeMap = { + text: string; + email: string; + password: string; + url: string; + tel: string; + search: string; + number: number; + range: number; + date: string; + 'datetime-local': string; + time: string; + month: string; + week: string; + color: string; + checkbox: boolean | string[]; + radio: string; + file: File; + hidden: string | number | boolean; + submit: string | number | boolean; + button: string; + reset: string; + image: string; + select: string; + 'select multiple': string[]; + 'file multiple': File[]; +}; + +// Valid input types for a given value type +export type RemoteFormFieldType = { + [K in keyof InputTypeMap]: T extends InputTypeMap[K] ? K : never; +}[keyof InputTypeMap]; + +// Input element properties based on type +type InputElementProps = T extends 'checkbox' | 'radio' + ? { + name: string; + type: T; + value?: string; + 'aria-invalid': boolean | 'false' | 'true' | undefined; + get checked(): boolean; + set checked(value: boolean); + readonly defaultChecked?: boolean; + } + : T extends 'file' + ? { + name: string; + type: 'file'; + 'aria-invalid': boolean | 'false' | 'true' | undefined; + get files(): FileList | null; + set files(v: FileList | null); + } + : T extends 'select' + ? { + name: string; + 'aria-invalid': boolean | 'false' | 'true' | undefined; + get value(): string; + set value(v: string); + } + : T extends 'select multiple' + ? { + name: string; + multiple: true; + 'aria-invalid': boolean | 'false' | 'true' | undefined; + get value(): string[]; + set value(v: string[]); + } + : T extends 'text' + ? { + name: string; + 'aria-invalid': boolean | 'false' | 'true' | undefined; + get value(): string | number; + set value(v: string | number); + readonly defaultValue?: string | number; + } + : { + name: string; + type: T; + 'aria-invalid': boolean | 'false' | 'true' | undefined; + get value(): string | number; + set value(v: string | number); + readonly defaultValue?: string | number; + }; + +type RemoteFormFieldMethods = { + /** The values that will be submitted */ + value(): DeepPartial; + /** Set the values that will be submitted */ + set(input: DeepPartial): DeepPartial; + /** Whether the field or any nested field has been interacted with since the form was mounted */ + touched(): boolean; + /** Whether the field or any nested field has been edited since the form was mounted */ + dirty(): boolean; + /** Validation issues, if any */ + issues(): RemoteFormIssue[] | undefined; +}; + +// These two types use "T extends unknown ? .. : .." to distribute over unions. +// Example: if "type T = A | b" then "keyof T" only contains keys that both A and B have, with "KeysOfUnion" we get the keys of both A and B +type KeysOfUnion = T extends unknown ? keyof T : never; +type ValueOfUnionKey = T extends unknown + ? K extends keyof T + ? T[K] + : never + : never; + +export type RemoteFormFieldValue = string | string[] | number | boolean | File | File[]; + +type AsArgs = Type extends 'checkbox' + ? Value extends string[] + ? [type: Type, value: Value[number] | (string & {})] + : Value extends boolean + ? [type: Type] | [type: Type, value: boolean] + : [type: Type] | [type: Type, value: Value | (string & {})] + : Type extends 'submit' | 'hidden' + ? Value extends string + ? [type: Type, value: Value | (string & {})] + : [type: Type, value: Value] + : Type extends 'radio' + ? [type: Type, value: Value | (string & {})] + : Type extends 'file' | 'file multiple' + ? [type: Type] + : [type: Type] | [type: Type, value: Value | undefined]; + +/** + * Form field accessor type that provides name(), value(), and issues() methods + */ +export type RemoteFormField = RemoteFormFieldMethods & { + /** + * Returns an object that can be spread onto an input element with the correct type attribute, + * aria-invalid attribute if the field is invalid, and appropriate value/checked property getters/setters. + * @example + * ```svelte + * + * + * + * ``` + */ + as>(...args: AsArgs): InputElementProps; +}; + +type RemoteFormFieldContainer = RemoteFormFieldMethods & { + /** Validation issues belonging to this or any of the fields that belong to it, if any */ + allIssues(): RemoteFormIssue[] | undefined; +}; + +type UnknownField = RemoteFormFieldMethods & { + /** Validation issues belonging to this or any of the fields that belong to it, if any */ + allIssues(): RemoteFormIssue[] | undefined; + /** + * Returns an object that can be spread onto an input element with the correct type attribute, + * aria-invalid attribute if the field is invalid, and appropriate value/checked property getters/setters. + * @example + * ```svelte + * + * + * + * ``` + */ + as>(...args: AsArgs): InputElementProps; +} & { + [key: string | number]: UnknownField; +}; + +type RemoteFormFieldsRoot = + IsAny extends true + ? RecursiveFormFields + : Input extends void + ? { + /** Validation issues, if any */ + issues(): RemoteFormIssue[] | undefined; + /** Validation issues belonging to this or any of the fields that belong to it, if any */ + allIssues(): RemoteFormIssue[] | undefined; + } + : RemoteFormFields; + +/** + * Recursive type to build form fields structure with proxy access + */ +export type RemoteFormFields = + WillRecurseIndefinitely extends true + ? RecursiveFormFields + : NonNullable extends string | number | boolean | File + ? RemoteFormField> + : // [NonNullable] is used to prevent distributing over union while still allowing + // nullable wrappers (e.g. `string[] | undefined` from a schema with `.default([])`) + // to be treated as arrays; only the last condition should distribute over unions + [NonNullable] extends [string[] | File[]] + ? RemoteFormField> & { + [K in number]: RemoteFormField[number]>; + } + : [NonNullable] extends [Array] + ? RemoteFormFieldContainer> & { + [K in number]: RemoteFormFields; + } + : RemoteFormFieldContainer & { + [K in KeysOfUnion]-?: RemoteFormFields>; + }; + +// By breaking this out into its own type, we avoid the TS recursion depth limit +type RecursiveFormFields = RemoteFormFieldContainer & { + [key: string | number]: UnknownField; +}; + +type MaybeArray = T | T[]; + +export interface RemoteFormInput { + [key: string]: MaybeArray | undefined; +} + +export interface RemoteFormIssue { + message: string; + path: Array; +} + +// If the schema specifies `id` as a string or number, ensure that `for(...)` +// only accepts that type. Otherwise, accept `string | number` +type ExtractId = Input extends { id: infer Id } + ? Id extends string | number + ? Id + : string | number + : string | number; + +/** + * A function and proxy object used to imperatively create validation errors in form handlers. + * + * Access properties to create field-specific issues: `issue.fieldName('message')`. + * The type structure mirrors the input data structure for type-safe field access. + * Call `invalid(issue.foo(...), issue.nested.bar(...))` to throw a validation error. + */ +export type InvalidField = + WillRecurseIndefinitely extends true + ? Record + : NonNullable extends string | number | boolean | File + ? (message: string) => StandardSchemaV1.Issue + : NonNullable extends Array + ? { + [K in number]: InvalidField; + } & ((message: string) => StandardSchemaV1.Issue) + : NonNullable extends RemoteFormInput + ? { + [K in keyof T]-?: InvalidField; + } & ((message: string) => StandardSchemaV1.Issue) + : Record; + +/** + * A validation error thrown by `invalid`. + */ +export interface ValidationError { + /** The validation issues */ + issues: StandardSchemaV1.Issue[]; +} + +/** + * The form instance as received inside an `enhance` callback. See [Remote functions](https://svelte.dev/docs/kit/remote-functions#form) for full documentation. + */ +export type RemoteFormEnhanceInstance< + Input extends RemoteFormInput | void = RemoteFormInput | void, + Output = any +> = Omit, 'enhance' | 'element'> & { + readonly element: HTMLFormElement; +}; + +/** + * The callback passed to a remote form's `enhance` method. See [Remote functions](https://svelte.dev/docs/kit/remote-functions#form) for full documentation. + */ +export type RemoteFormEnhanceCallback< + Input extends RemoteFormInput | void = RemoteFormInput | void, + Output = any +> = (form: RemoteFormEnhanceInstance) => MaybePromise; + +/** + * The type of a remote `form` function. See [Remote functions](https://svelte.dev/docs/kit/remote-functions#form) for full documentation. + */ +export type RemoteForm = { + /** Attachment that sets up an event handler that intercepts the form submission on the client to prevent a full page reload */ + [attachment: symbol]: (node: HTMLFormElement) => void; + method: 'POST'; + /** The URL to send the form to. */ + action: string; + /** The `
` element this instance is currently attached to, if any. */ + get element(): HTMLFormElement | null; + /** Submit the currently attached form programmatically. */ + submit(): Promise & { + updates: (...updates: RemoteQueryUpdate[]) => Promise; + }; + /** Use the `enhance` method to influence what happens when the form is submitted. */ + enhance(callback: RemoteFormEnhanceCallback): { + method: 'POST'; + action: string; + [attachment: symbol]: (node: HTMLFormElement) => void; + }; + /** + * Create an instance of the form for the given `id`. + * The `id` is stringified and used for deduplication to potentially reuse existing instances. + * Useful when you have multiple forms that use the same remote form action, for example in a loop. + * ```svelte + * {#each todos as todo} + * {@const todoForm = updateTodo.for(todo.id)} + * + * {#if todoForm.result?.invalid}

Invalid data

{/if} + * ... + * + * {/each} + * ``` + */ + for(id: ExtractId): Omit, 'for'>; + /** Preflight checks */ + preflight(schema: StandardSchemaV1): RemoteForm; + /** Validate the form contents programmatically */ + validate(options?: { + /** + * Set this to `true` to also show validation issues of fields that haven't yet been + * edited and blurred. This option is ignored for forms that have previously been + * submitted, in which case all fields are always subject to validation + * (unless the form is reset, at which point it is treated as pristine) + */ + all?: boolean; + /** Set this to `true` to only run the `preflight` validation. */ + preflightOnly?: boolean; + }): Promise; + /** The result of the form submission */ + get result(): Output | undefined; + /** The number of pending submissions */ + get pending(): number; + /** True if the form has been submitted at least once, and hasn't been reset since */ + get submitted(): boolean; + /** Access form fields using object notation */ + fields: RemoteFormFieldsRoot; +}; + +/** + * The type of a remote `command` function. See [Remote functions](https://svelte.dev/docs/kit/remote-functions#command) for full documentation. + */ +export type RemoteCommand = { + (arg: undefined extends Input ? Input | void : Input): Promise & { + updates(...updates: RemoteQueryUpdate[]): Promise; + }; + /** The number of pending command executions */ + get pending(): number; +}; + +export type RemoteQueryUpdate = + | RemoteQuery + | RemoteLiveQuery + | RemoteQueryFunction + | RemoteLiveQueryFunction + | RemoteQueryOverride; + +export type RemoteResource = Promise & { + /** The error in case the query fails. */ + get error(): App.Error | undefined; + /** `true` before the first result is available and during refreshes */ + get loading(): boolean; +} & ( + | { + /** The current value of the query. Undefined until `ready` is `true` */ + get current(): undefined; + ready: false; + } + | { + /** The current value of the query. Undefined until `ready` is `true` */ + get current(): T; + ready: true; + } + ); + +export type RemoteQuery = RemoteResource & { + /** + * On the client, this function will update the value of the query without re-fetching it. + * + * On the server, this can be called in the context of a `command` or `form` and the specified data will accompany the action response back to the client. + * This prevents SvelteKit needing to refresh all queries on the page in a second server round-trip. + */ + set(value: T): void; + /** + * On the client, this function will re-fetch the query from the server. + * + * On the server, this can be called in the context of a `command` or `form` and the refreshed data will accompany the action response back to the client. + * This prevents SvelteKit needing to refresh all queries on the page in a second server round-trip. + */ + refresh(): Promise; + /** + * Temporarily override a query's value during a [single-flight mutation](https://svelte.dev/docs/kit/remote-functions#Single-flight-mutations) to provide optimistic updates. + * + * ```svelte + * + * + *
{ + * await form.submit().updates( + * todos.withOverride((todos) => [...todos, { text: form.fields.text.value() }]) + * ); + * })}> + * + * + *
+ * ``` + */ + withOverride(update: (current: T) => T): RemoteQueryOverride; +}; + +export type RemoteLiveQuery = RemoteResource & + AsyncIterable & { + /** `true` if the live stream is currently connected. */ + readonly connected: boolean; + /** `true` once the current live stream iterator is done. */ + readonly done: boolean; + /** Reconnects the live stream immediately. */ + reconnect(): Promise; + }; + +export type RemoteQueryOverride = () => void; + +/** + * The type of a remote `prerender` function. See [Remote functions](https://svelte.dev/docs/kit/remote-functions#prerender) for full documentation. + */ +export type RemotePrerenderFunction = ( + arg: undefined extends Input ? Input | void : Input +) => RemoteResource; + +/** + * The return value of a remote `query` function. See [Remote functions](https://svelte.dev/docs/kit/remote-functions#query) for full documentation. + * + * The optional `Validated` generic parameter represents the argument type *after* the + * query's schema has validated and (optionally) transformed it — this is the type the + * query's implementation function receives on the server, and the type yielded by + * [`requested`](https://svelte.dev/docs/kit/$app-server#requested). For queries declared + * with [Standard Schema](https://standardschema.dev/) it differs from `Input` when the + * schema contains a transform (e.g. `v.pipe(v.number(), v.transform(String))` has + * `Input = number` but `Validated = string`). For `'unchecked'` validators and queries + * without arguments it defaults to `Input`. + */ +export type RemoteQueryFunction = ( + arg: undefined extends Input ? Input | void : Input +) => RemoteQuery; + +/** + * The type of a remote `query.live` function. See [Remote functions](https://svelte.dev/docs/kit/remote-functions#query.live) for full documentation. + * + * The optional `Validated` generic parameter represents the argument type *after* the + * query's schema has validated and (optionally) transformed it, and matches the type + * yielded by [`requested`](https://svelte.dev/docs/kit/$app-server#requested). + */ +export type RemoteLiveQueryFunction = ( + arg: undefined extends Input ? Input | void : Input +) => RemoteLiveQuery; + +/** + * A single entry yielded by [`requested`](https://svelte.dev/docs/kit/$app-server#requested) + * when called with a regular `query`. `arg` is the validated argument (the input *after* + * the query's schema validated and transformed it, if applicable); `query` is a + * `RemoteQuery` bound to the client's original cache key, so `refresh()` / `set()` will + * update the correct client entry. + */ +export type RequestedEntry = { + arg: Validated; + query: RemoteQuery; +}; + +/** + * A single entry yielded by [`requested`](https://svelte.dev/docs/kit/$app-server#requested) + * when called with a `query.live`. `arg` is the validated argument; `query` is a + * `RemoteLiveQuery` bound to the client's original cache key, so `reconnect()` targets + * the correct client subscription. + */ +export type LiveRequestedEntry = { + arg: Validated; + query: RemoteLiveQuery; +}; + +export type QueryRequestedResult = Iterable> & + AsyncIterable> & { + /** + * Call `refresh` on all queries selected by this `requested` invocation. + * This is identical to: + * ```ts + * import { requested } from '$app/server'; + * + * for await (const { query } of requested(getPost, ...)) { + * void query.refresh(); + * } + * ``` + */ + refreshAll: () => Promise; + }; + +export type LiveQueryRequestedResult = Iterable< + LiveRequestedEntry +> & + AsyncIterable> & { + /** + * Call `reconnect` on all live queries selected by this `requested` invocation. + * This is identical to: + * ```ts + * import { requested } from '$app/server'; + * + * for await (const { query } of requested(liveQuery, ...)) { + * void query.reconnect(); + * } + * ``` + */ + reconnectAll: () => Promise; + }; + +export type RequestedResult = + | QueryRequestedResult + | LiveQueryRequestedResult; diff --git a/packages/kit/src/runtime/app/server/remote/command.js b/packages/kit/src/runtime/app/server/remote/command.js index 946833c85031..ddc9fcb9be9e 100644 --- a/packages/kit/src/runtime/app/server/remote/command.js +++ b/packages/kit/src/runtime/app/server/remote/command.js @@ -1,4 +1,4 @@ -/** @import { RemoteCommand } from '@sveltejs/kit' */ +/** @import { RemoteCommand } from '$app/server' */ /** @import { MaybePromise, RemoteCommandInternals } from 'types' */ /** @import { StandardSchemaV1 } from '@standard-schema/spec' */ import { get_request_store } from '@sveltejs/kit/internal/server'; diff --git a/packages/kit/src/runtime/app/server/remote/form.js b/packages/kit/src/runtime/app/server/remote/form.js index a3fd1defd02a..49db49eec37c 100644 --- a/packages/kit/src/runtime/app/server/remote/form.js +++ b/packages/kit/src/runtime/app/server/remote/form.js @@ -1,4 +1,4 @@ -/** @import { RemoteFormInput, RemoteForm, InvalidField } from '@sveltejs/kit' */ +/** @import { RemoteFormInput, RemoteForm, InvalidField } from '$app/server' */ /** @import { InternalRemoteFormIssue, MaybePromise, HasNonOptionalBoolean, RemoteFormInternals } from 'types' */ /** @import { StandardSchemaV1 } from '@standard-schema/spec' */ import { get_request_store } from '@sveltejs/kit/internal/server'; diff --git a/packages/kit/src/runtime/app/server/remote/prerender.js b/packages/kit/src/runtime/app/server/remote/prerender.js index 2646ac0926af..a7c0a8081742 100644 --- a/packages/kit/src/runtime/app/server/remote/prerender.js +++ b/packages/kit/src/runtime/app/server/remote/prerender.js @@ -1,4 +1,4 @@ -/** @import { RemoteResource, RemotePrerenderFunction } from '@sveltejs/kit' */ +/** @import { RemoteResource, RemotePrerenderFunction } from '$app/server' */ /** @import { RemoteFunctionResponse, RemotePrerenderInputsGenerator, RemotePrerenderInternals, MaybePromise } from 'types' */ /** @import { StandardSchemaV1 } from '@standard-schema/spec' */ import { json } from '@sveltejs/kit'; diff --git a/packages/kit/src/runtime/app/server/remote/query.js b/packages/kit/src/runtime/app/server/remote/query.js index 0df6e68a9073..18410118ca48 100644 --- a/packages/kit/src/runtime/app/server/remote/query.js +++ b/packages/kit/src/runtime/app/server/remote/query.js @@ -1,4 +1,5 @@ -/** @import { RemoteLiveQuery, RemoteLiveQueryFunction, RemoteQuery, RemoteQueryFunction, RequestEvent } from '@sveltejs/kit' */ +/** @import { RequestEvent } from '@sveltejs/kit' */ +/** @import { RemoteLiveQuery, RemoteLiveQueryFunction, RemoteQuery, RemoteQueryFunction } from '$app/server' */ /** @import { RemoteInternals, MaybePromise, RequestState, RemoteQueryLiveInternals, RemoteQueryBatchInternals, RemoteQueryInternals, RemoteLiveQueryUserFunctionReturnType } from 'types' */ /** @import { StandardSchemaV1 } from '@standard-schema/spec' */ import { get_request_store } from '@sveltejs/kit/internal/server'; diff --git a/packages/kit/src/runtime/app/server/remote/requested.js b/packages/kit/src/runtime/app/server/remote/requested.js index b92d5caf0441..534f16c7e450 100644 --- a/packages/kit/src/runtime/app/server/remote/requested.js +++ b/packages/kit/src/runtime/app/server/remote/requested.js @@ -1,4 +1,4 @@ -/** @import { RemoteLiveQuery, RemoteLiveQueryFunction, RemoteQuery, RemoteQueryFunction, RequestedResult, QueryRequestedResult, LiveQueryRequestedResult } from '@sveltejs/kit' */ +/** @import { RemoteLiveQuery, RemoteLiveQueryFunction, RemoteQuery, RemoteQueryFunction, RequestedResult, QueryRequestedResult, LiveQueryRequestedResult } from '$app/server' */ /** @import { MaybePromise, RemoteAnyQueryInternals } from 'types' */ import { HttpError } from '@sveltejs/kit/internal'; import { get_request_store } from '@sveltejs/kit/internal/server'; diff --git a/packages/kit/src/runtime/client/remote-functions/command.svelte.js b/packages/kit/src/runtime/client/remote-functions/command.svelte.js index 1831bf1bbff2..48c58429b02f 100644 --- a/packages/kit/src/runtime/client/remote-functions/command.svelte.js +++ b/packages/kit/src/runtime/client/remote-functions/command.svelte.js @@ -1,4 +1,4 @@ -/** @import { RemoteCommand, RemoteQueryUpdate } from '@sveltejs/kit' */ +/** @import { RemoteCommand, RemoteQueryUpdate } from '$app/server' */ import { app_dir, base } from '#app/paths'; import { stringify_command_arg } from '../../shared.js'; import { get_remote_request_headers, categorize_updates, remote_request } from './shared.svelte.js'; diff --git a/packages/kit/src/runtime/client/remote-functions/form.svelte.js b/packages/kit/src/runtime/client/remote-functions/form.svelte.js index 96e29bdfbfd8..2e01667ef479 100644 --- a/packages/kit/src/runtime/client/remote-functions/form.svelte.js +++ b/packages/kit/src/runtime/client/remote-functions/form.svelte.js @@ -1,5 +1,5 @@ /** @import { StandardSchemaV1 } from '@standard-schema/spec' */ -/** @import { RemoteFormInput, RemoteForm, RemoteQueryUpdate } from '@sveltejs/kit' */ +/** @import { RemoteFormInput, RemoteForm, RemoteQueryUpdate } from '$app/server' */ /** @import { InternalRemoteFormIssue } from 'types' */ import { app_dir, base } from '#app/paths'; import { DEV } from 'esm-env'; diff --git a/packages/kit/src/runtime/client/remote-functions/prerender.svelte.js b/packages/kit/src/runtime/client/remote-functions/prerender.svelte.js index 0d4740a449e9..0e1bd857c36b 100644 --- a/packages/kit/src/runtime/client/remote-functions/prerender.svelte.js +++ b/packages/kit/src/runtime/client/remote-functions/prerender.svelte.js @@ -1,4 +1,4 @@ -/** @import { RemotePrerenderFunction } from '@sveltejs/kit' */ +/** @import { RemotePrerenderFunction } from '$app/server' */ import { app_dir, base } from '#app/paths'; import { version } from '$app/env'; import * as devalue from 'devalue'; diff --git a/packages/kit/src/runtime/client/remote-functions/query-batch.svelte.js b/packages/kit/src/runtime/client/remote-functions/query-batch.svelte.js index c99c7627f359..b3dbd5a2c292 100644 --- a/packages/kit/src/runtime/client/remote-functions/query-batch.svelte.js +++ b/packages/kit/src/runtime/client/remote-functions/query-batch.svelte.js @@ -1,4 +1,4 @@ -/** @import { RemoteQueryFunction } from '@sveltejs/kit' */ +/** @import { RemoteQueryFunction } from '$app/server' */ import { app_dir, base } from '#app/paths'; import { _goto } from '../client.js'; import { QUERY_FUNCTION_ID, remote_request } from './shared.svelte.js'; diff --git a/packages/kit/src/runtime/client/remote-functions/query-live/index.js b/packages/kit/src/runtime/client/remote-functions/query-live/index.js index 0ed42f3123c4..6e8e9525dd4e 100644 --- a/packages/kit/src/runtime/client/remote-functions/query-live/index.js +++ b/packages/kit/src/runtime/client/remote-functions/query-live/index.js @@ -1,4 +1,4 @@ -/** @import { RemoteLiveQuery, RemoteLiveQueryFunction } from '@sveltejs/kit' */ +/** @import { RemoteLiveQuery, RemoteLiveQueryFunction } from '$app/server' */ import { live_query_map } from '../../client.js'; import { QUERY_FUNCTION_ID } from '../shared.svelte.js'; import { DEV } from 'esm-env'; diff --git a/packages/kit/src/runtime/client/remote-functions/query/index.js b/packages/kit/src/runtime/client/remote-functions/query/index.js index 3703381f6163..0d7f881de792 100644 --- a/packages/kit/src/runtime/client/remote-functions/query/index.js +++ b/packages/kit/src/runtime/client/remote-functions/query/index.js @@ -1,4 +1,4 @@ -/** @import { RemoteQueryFunction } from '@sveltejs/kit' */ +/** @import { RemoteQueryFunction } from '$app/server' */ import { app_dir, base } from '#app/paths'; import { _goto, query_map } from '../../client.js'; import { QUERY_FUNCTION_ID, remote_request } from '../shared.svelte.js'; diff --git a/packages/kit/src/runtime/client/remote-functions/shared.svelte.js b/packages/kit/src/runtime/client/remote-functions/shared.svelte.js index 49fee58e7c95..52d60ce1ccc4 100644 --- a/packages/kit/src/runtime/client/remote-functions/shared.svelte.js +++ b/packages/kit/src/runtime/client/remote-functions/shared.svelte.js @@ -1,5 +1,5 @@ /** @import { RemoteFunctionResponse, RemoteFunctionData, RemoteFunctionDataNode } from 'types' */ -/** @import { RemoteQueryUpdate } from '@sveltejs/kit' */ +/** @import { RemoteQueryUpdate } from '$app/server' */ /** @import { CacheEntry } from './cache.svelte.js' */ import * as devalue from 'devalue'; import { app, _goto, live_query_map, query_map, query_responses } from '../client.js'; diff --git a/packages/kit/src/runtime/server/remote-functions.js b/packages/kit/src/runtime/server/remote-functions.js index 68e0a729b95a..a146ffdc0d0f 100644 --- a/packages/kit/src/runtime/server/remote-functions.js +++ b/packages/kit/src/runtime/server/remote-functions.js @@ -1,4 +1,5 @@ -/** @import { RemoteForm, RequestEvent, SSRManifest } from '@sveltejs/kit' */ +/** @import { RequestEvent, SSRManifest } from '@sveltejs/kit' */ +/** @import { RemoteForm } from '$app/server' */ /** @import { ActionResult } from '$app/forms' */ /** @import { RemoteFormInternals, RemoteFunctionData, RemoteFunctionResponse, RemoteInternals, RequestState, SSROptions } from 'types' */ diff --git a/packages/kit/src/types/internal.d.ts b/packages/kit/src/types/internal.d.ts index e5e4f6896847..f4d8857d9af5 100644 --- a/packages/kit/src/types/internal.d.ts +++ b/packages/kit/src/types/internal.d.ts @@ -19,11 +19,9 @@ import { Emulator, ServerInit, ClientInit, - Transport, - RemoteFormIssue, - RemoteQuery, - RemoteLiveQuery + Transport } from '@sveltejs/kit'; +import { RemoteFormIssue, RemoteQuery, RemoteLiveQuery } from '$app/server'; import { HttpMethod, MaybePromise, diff --git a/packages/kit/test/apps/async/src/routes/remote/query-runtime-errors/not-tracked/+page.svelte b/packages/kit/test/apps/async/src/routes/remote/query-runtime-errors/not-tracked/+page.svelte index 6da26867edac..31c519366ed2 100644 --- a/packages/kit/test/apps/async/src/routes/remote/query-runtime-errors/not-tracked/+page.svelte +++ b/packages/kit/test/apps/async/src/routes/remote/query-runtime-errors/not-tracked/+page.svelte @@ -1,5 +1,5 @@ - * - *
{ - * await form.submit().updates( - * todos.withOverride((todos) => [...todos, { text: form.fields.text.value() }]) - * ); - * })}> - * - * - *
- * ``` + * A map of redirects encountered during prerendering. */ - withOverride(update: (current: T) => T): RemoteQueryOverride; - }; + redirects: Map< + string, + { + status: number; + location: string; + } + >; + /** An array of prerendered paths (without trailing slashes, regardless of the trailingSlash config) */ + paths: string[]; + } - export type RemoteLiveQuery = RemoteResource & - AsyncIterable & { - /** `true` if the live stream is currently connected. */ - readonly connected: boolean; - /** `true` once the current live stream iterator is done. */ - readonly done: boolean; - /** Reconnects the live stream immediately. */ - reconnect(): Promise; - }; + interface PrerenderHttpErrorHandler { + (details: { + status: number; + path: string; + referrer: string | null; + referenceType: 'linked' | 'fetched'; + message: string; + }): void; + } - export type RemoteQueryOverride = () => void; + interface PrerenderMissingIdHandler { + (details: { path: string; id: string; referrers: string[]; message: string }): void; + } - /** - * The type of a remote `prerender` function. See [Remote functions](https://svelte.dev/docs/kit/remote-functions#prerender) for full documentation. - */ - export type RemotePrerenderFunction = ( - arg: undefined extends Input ? Input | void : Input - ) => RemoteResource; + interface PrerenderEntryGeneratorMismatchHandler { + (details: { generatedFromId: string; entry: string; matchedId: string; message: string }): void; + } - /** - * The return value of a remote `query` function. See [Remote functions](https://svelte.dev/docs/kit/remote-functions#query) for full documentation. - * - * The optional `Validated` generic parameter represents the argument type *after* the - * query's schema has validated and (optionally) transformed it — this is the type the - * query's implementation function receives on the server, and the type yielded by - * [`requested`](https://svelte.dev/docs/kit/$app-server#requested). For queries declared - * with [Standard Schema](https://standardschema.dev/) it differs from `Input` when the - * schema contains a transform (e.g. `v.pipe(v.number(), v.transform(String))` has - * `Input = number` but `Validated = string`). For `'unchecked'` validators and queries - * without arguments it defaults to `Input`. - */ - export type RemoteQueryFunction = ( - arg: undefined extends Input ? Input | void : Input - ) => RemoteQuery; + interface PrerenderUnseenRoutesHandler { + (details: { routes: string[]; message: string }): void; + } - /** - * The type of a remote `query.live` function. See [Remote functions](https://svelte.dev/docs/kit/remote-functions#query.live) for full documentation. - * - * The optional `Validated` generic parameter represents the argument type *after* the - * query's schema has validated and (optionally) transformed it, and matches the type - * yielded by [`requested`](https://svelte.dev/docs/kit/$app-server#requested). - */ - export type RemoteLiveQueryFunction = ( - arg: undefined extends Input ? Input | void : Input - ) => RemoteLiveQuery; - interface AdapterEntry { - /** - * A string that uniquely identifies an HTTP service (e.g. serverless function) and is used for deduplication. - * For example, `/foo/a-[b]` and `/foo/[c]` are different routes, but would both - * be represented in a Netlify _redirects file as `/foo/:param`, so they share an ID - */ - id: string; + interface PrerenderInvalidUrlHandler { + (details: { href: string; referrer: string | null; message: string }): void; + } - /** - * A function that compares the candidate route with the current route to determine - * if it should be grouped with the current route. - * - * Use cases: - * - Fallback pages: `/foo/[c]` is a fallback for `/foo/a-[b]`, and `/[...catchall]` is a fallback for all routes - * - Grouping routes that share a common `config`: `/foo` should be deployed to the edge, `/bar` and `/baz` should be deployed to a serverless function - */ - filter(route: RouteDefinition): boolean; + type PrerenderHttpErrorHandlerValue = 'fail' | 'warn' | 'ignore' | PrerenderHttpErrorHandler; + type PrerenderMissingIdHandlerValue = 'fail' | 'warn' | 'ignore' | PrerenderMissingIdHandler; + type PrerenderUnseenRoutesHandlerValue = + | 'fail' + | 'warn' + | 'ignore' + | PrerenderUnseenRoutesHandler; + type PrerenderEntryGeneratorMismatchHandlerValue = + | 'fail' + | 'warn' + | 'ignore' + | PrerenderEntryGeneratorMismatchHandler; + type PrerenderInvalidUrlHandlerValue = + | 'fail' + | 'warn' + | 'ignore' + | PrerenderInvalidUrlHandler; - /** - * A function that is invoked once the entry has been created. This is where you - * should write the function to the filesystem and generate redirect manifests. - */ - complete(entry: { generateManifest(opts: { relativePath: string }): string }): MaybePromise; + export type PrerenderOption = boolean | 'auto'; + + interface RequestOptions { + getClientAddress(): string; + platform?: App.Platform; } - // Based on https://github.com/josh-hemphill/csp-typed-directives/blob/latest/src/csp.types.ts - // - // MIT License - // - // Copyright (c) 2021-present, Joshua Hemphill - // Copyright (c) 2021, Tecnico Corporation - // - // Permission is hereby granted, free of charge, to any person obtaining a copy - // of this software and associated documentation files (the "Software"), to deal - // in the Software without restriction, including without limitation the rights - // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - // copies of the Software, and to permit persons to whom the Software is - // furnished to do so, subject to the following conditions: - // - // The above copyright notice and this permission notice shall be included in all - // copies or substantial portions of the Software. - // - // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - // SOFTWARE. - - namespace Csp { - type ActionSource = 'strict-dynamic' | 'report-sample'; - type BaseSource = - | 'self' - | 'unsafe-eval' - | 'unsafe-hashes' - | 'unsafe-inline' - | 'unsafe-allow-redirects' - | 'unsafe-webtransport-hashes' - | 'wasm-unsafe-eval' - | 'trusted-types-eval' - | 'none'; - type CryptoSource = `${'nonce' | 'sha256' | 'sha384' | 'sha512'}-${string}`; - type FrameSource = HostSource | SchemeSource | 'self' | 'none'; - type HostNameScheme = `${string}.${string}` | 'localhost'; - type HostSource = `${HostProtocolSchemes}${HostNameScheme}${PortScheme}`; - type HostProtocolSchemes = `${string}://` | ''; - type HttpDelineator = '/' | '?' | '#' | '\\'; - type PortScheme = `:${number}` | '' | ':*'; - type SchemeSource = - | 'http:' - | 'https:' - | 'ws:' - | 'wss:' - | 'data:' - | 'mediastream:' - | 'blob:' - | 'filesystem:' - | (`${string}:` & {}); - type Source = HostSource | SchemeSource | CryptoSource | BaseSource; - type Sources = Source[]; - } - - interface CspDirectives { - 'child-src'?: Csp.Sources; - 'default-src'?: Array; - 'frame-src'?: Csp.Sources; - 'worker-src'?: Csp.Sources; - 'connect-src'?: Csp.Sources; - 'font-src'?: Csp.Sources; - 'img-src'?: Csp.Sources; - 'manifest-src'?: Csp.Sources; - 'media-src'?: Csp.Sources; - 'object-src'?: Csp.Sources; - 'prefetch-src'?: Csp.Sources; - 'script-src'?: Array; - 'script-src-elem'?: Csp.Sources; - 'script-src-attr'?: Csp.Sources; - 'style-src'?: Array; - 'style-src-elem'?: Csp.Sources; - 'style-src-attr'?: Csp.Sources; - 'base-uri'?: Array; - sandbox?: Array< - | 'allow-downloads-without-user-activation' - | 'allow-forms' - | 'allow-modals' - | 'allow-orientation-lock' - | 'allow-pointer-lock' - | 'allow-popups' - | 'allow-popups-to-escape-sandbox' - | 'allow-presentation' - | 'allow-same-origin' - | 'allow-scripts' - | 'allow-storage-access-by-user-activation' - | 'allow-top-navigation' - | 'allow-top-navigation-by-user-activation' - >; - 'form-action'?: Array; - 'frame-ancestors'?: Array; - 'navigate-to'?: Array; - 'report-uri'?: string[]; - 'report-to'?: string[]; - - 'require-trusted-types-for'?: Array<'script'>; - 'trusted-types'?: Array<'none' | 'allow-duplicates' | '*' | string>; - 'upgrade-insecure-requests'?: boolean; - - /** @deprecated */ - 'require-sri-for'?: Array<'script' | 'style' | 'script style'>; - - /** @deprecated */ - 'block-all-mixed-content'?: boolean; - - /** @deprecated */ - 'plugin-types'?: Array<`${string}/${string}` | 'none'>; - - /** @deprecated */ - referrer?: Array< - | 'no-referrer' - | 'no-referrer-when-downgrade' - | 'origin' - | 'origin-when-cross-origin' - | 'same-origin' - | 'strict-origin' - | 'strict-origin-when-cross-origin' - | 'unsafe-url' - | 'none' - >; - } - - type HttpMethod = 'GET' | 'HEAD' | 'POST' | 'PUT' | 'DELETE' | 'PATCH' | 'OPTIONS'; - - interface Logger { - (msg: string): void; - success(msg: string): void; - /** Print a bold red message to stderr */ - error(msg: string): void; - /** Print a bold yellow message to stderr */ - warn(msg: string): void; - /** Print faded text to stdout if `verbose === true` */ - minor(msg: string): void; - /** Print to stdout if `verbose === true` */ - info(msg: string): void; - /** Print to stderr without formatting */ - err(msg: string): void; - /** Print a bold red message, followed by a stack trace for each error (following `.cause` chains) */ - prettyError(error: unknown, caller?: string): void; - } - - type MaybePromise = T | Promise; - - interface Prerendered { - /** - * A map of `path` to `{ file }` objects, where a path like `/foo` corresponds to `foo.html` and a path like `/bar/` corresponds to `bar/index.html`. - */ - pages: Map< - string, - { - /** The location of the .html file relative to the output directory */ - file: string; - } - >; - /** - * A map of `path` to `{ type }` objects. - */ - assets: Map< - string, - { - /** The MIME type of the asset */ - type: string; - } - >; - /** - * A map of redirects encountered during prerendering. - */ - redirects: Map< - string, - { - status: number; - location: string; - } - >; - /** An array of prerendered paths (without trailing slashes, regardless of the trailingSlash config) */ - paths: string[]; - } - - interface PrerenderHttpErrorHandler { - (details: { - status: number; - path: string; - referrer: string | null; - referenceType: 'linked' | 'fetched'; - message: string; - }): void; - } - - interface PrerenderMissingIdHandler { - (details: { path: string; id: string; referrers: string[]; message: string }): void; - } - - interface PrerenderEntryGeneratorMismatchHandler { - (details: { generatedFromId: string; entry: string; matchedId: string; message: string }): void; - } - - interface PrerenderUnseenRoutesHandler { - (details: { routes: string[]; message: string }): void; - } - - interface PrerenderInvalidUrlHandler { - (details: { href: string; referrer: string | null; message: string }): void; - } - - type PrerenderHttpErrorHandlerValue = 'fail' | 'warn' | 'ignore' | PrerenderHttpErrorHandler; - type PrerenderMissingIdHandlerValue = 'fail' | 'warn' | 'ignore' | PrerenderMissingIdHandler; - type PrerenderUnseenRoutesHandlerValue = - | 'fail' - | 'warn' - | 'ignore' - | PrerenderUnseenRoutesHandler; - type PrerenderEntryGeneratorMismatchHandlerValue = - | 'fail' - | 'warn' - | 'ignore' - | PrerenderEntryGeneratorMismatchHandler; - type PrerenderInvalidUrlHandlerValue = - | 'fail' - | 'warn' - | 'ignore' - | PrerenderInvalidUrlHandler; - - export type PrerenderOption = boolean | 'auto'; - - interface RequestOptions { - getClientAddress(): string; - platform?: App.Platform; - } - - interface RouteSegment { - content: string; - dynamic: boolean; - rest: boolean; - } - - type DeepPartial = T extends Record | unknown[] - ? { - [K in keyof T]?: T[K] extends Record | unknown[] - ? DeepPartial - : T[K]; - } - : T | undefined; - - type IsAny = 0 extends 1 & T ? true : false; - type RecursiveRequired = { - // Recursive implementation of TypeScript's Required utility type. - // Will recursively continue until it reaches a primitive or Function - // eslint-disable-next-line @typescript-eslint/no-unsafe-function-type - [K in keyof T]-?: Extract extends never // If it does not have a Function type - ? RecursiveRequired // recursively continue through. - : T[K]; // Use the exact type for everything else - }; + interface RouteSegment { + content: string; + dynamic: boolean; + rest: boolean; + } + type RecursiveRequired = { + // Recursive implementation of TypeScript's Required utility type. + // Will recursively continue until it reaches a primitive or Function + // eslint-disable-next-line @typescript-eslint/no-unsafe-function-type + [K in keyof T]-?: Extract extends never // If it does not have a Function type + ? RecursiveRequired // recursively continue through. + : T[K]; // Use the exact type for everything else + }; type ValidatedConfig = Omit & { kit: ValidatedKitConfig; @@ -2502,7 +1977,7 @@ declare module '@sveltejs/kit' { * @param e The object to check. * @since 2.47.3 */ - export function isValidationError(e: unknown): e is ActionFailure; + export function isValidationError(e: unknown): e is import("$app/server").ValidationError; /** * Strips possible SvelteKit-internal suffixes and trailing slashes from the URL pathname. * Returns the normalized URL as well as a method for adding the potential suffix back @@ -3298,104 +2773,627 @@ declare module '$app/navigation' { * */ export function preloadCode(id: import("$app/types").RouteId): Promise; /** - * Programmatically create a new history entry with the given `page.state`. Used for [shallow routing](https://svelte.dev/docs/kit/shallow-routing). - * - * @deprecated Use `goto(url, { state, shallow: true })` instead. - * */ - export function pushState(url: string | URL, state: App.PageState): Promise; + * Programmatically create a new history entry with the given `page.state`. Used for [shallow routing](https://svelte.dev/docs/kit/shallow-routing). + * + * @deprecated Use `goto(url, { state, shallow: true })` instead. + * */ + export function pushState(url: string | URL, state: App.PageState): Promise; + /** + * Programmatically replace the current history entry with the given `page.state`. Used for [shallow routing](https://svelte.dev/docs/kit/shallow-routing). + * + * @deprecated Use `goto(url, { state, shallow: true, replace: true })` instead. + * */ + export function replaceState(url: string | URL, state: App.PageState): Promise; + type MaybePromise = T | Promise; + + export {}; +} + +declare module '$app/paths' { + import type { AssetPath, RouteIdWithSearchOrHash, PathnameWithSearchOrHash, ResolvedPathname, RouteId, RouteParams } from '$app/types'; + /** + * Resolve the URL of an asset in your `static` directory, by prefixing it with [`config.paths.assets`](https://svelte.dev/docs/kit/configuration#paths) if configured, or otherwise by prefixing it with the base path. + * + * During server rendering, the base path is relative and depends on the page currently being rendered. + * + * @example + * ```svelte + * + * + * a potato + * ``` + * @since 2.26 + * + * */ + export function asset(file: AssetPath): string; + /** + * Resolve a pathname by prefixing it with the base path, if any, or resolve a route ID by populating dynamic segments with parameters. + * + * During server rendering, the base path is relative and depends on the page currently being rendered. + * + * @example + * ```js + * import { resolve } from '$app/paths'; + * + * // using a pathname + * const resolved = resolve(`blog/hello-world`); + * + * // using a route ID plus parameters + * const resolved = resolve('/blog/[slug]', { + * slug: 'hello-world' + * }); + * ``` + * @since 2.26 + * + * */ + export function resolve(...args: ResolveArgs): ResolvedPathname; + /** + * Match a path or URL to a route ID and extracts any parameters. + * + * @example + * ```js + * import { match } from '$app/paths'; + * + * const route = await match('blog/hello-world'); + * + * if (route?.id === '/blog/[slug]') { + * const slug = route.params.slug; + * const response = await fetch(`/api/posts/${slug}`); + * const post = await response.json(); + * } + * ``` + * @since 2.52.0 + * + * */ + export function match(url: URL | string): Promise<{ [K in RouteId]: { + id: K; + params: RouteParams; + }; }[RouteId] | null>; + type StripSearchOrHash = T extends `${infer U}?${string}` + ? U + : T extends `${infer U}#${string}` + ? U + : T; + + type ResolveArgs = T extends `/${string}` + ? StripSearchOrHash extends infer U extends RouteId + ? RouteParams extends Record + ? [route: T] + : [route: T, params: RouteParams] + : [never] + : [pathname: T]; + + export {}; +} + +declare module '$app/server' { + import type { StandardSchemaV1 } from '@standard-schema/spec'; + import type { RequestEvent } from '@sveltejs/kit'; + // If T is unknown or has an index signature, the types below will recurse indefinitely and create giant unions that TS can't handle + type WillRecurseIndefinitely = unknown extends T ? true : string extends keyof T ? true : false; + + // Input type mappings for form fields + type InputTypeMap = { + text: string; + email: string; + password: string; + url: string; + tel: string; + search: string; + number: number; + range: number; + date: string; + 'datetime-local': string; + time: string; + month: string; + week: string; + color: string; + checkbox: boolean | string[]; + radio: string; + file: File; + hidden: string | number | boolean; + submit: string | number | boolean; + button: string; + reset: string; + image: string; + select: string; + 'select multiple': string[]; + 'file multiple': File[]; + }; + + // Valid input types for a given value type + export type RemoteFormFieldType = { + [K in keyof InputTypeMap]: T extends InputTypeMap[K] ? K : never; + }[keyof InputTypeMap]; + + // Input element properties based on type + type InputElementProps = T extends 'checkbox' | 'radio' + ? { + name: string; + type: T; + value?: string; + 'aria-invalid': boolean | 'false' | 'true' | undefined; + get checked(): boolean; + set checked(value: boolean); + readonly defaultChecked?: boolean; + } + : T extends 'file' + ? { + name: string; + type: 'file'; + 'aria-invalid': boolean | 'false' | 'true' | undefined; + get files(): FileList | null; + set files(v: FileList | null); + } + : T extends 'select' + ? { + name: string; + 'aria-invalid': boolean | 'false' | 'true' | undefined; + get value(): string; + set value(v: string); + } + : T extends 'select multiple' + ? { + name: string; + multiple: true; + 'aria-invalid': boolean | 'false' | 'true' | undefined; + get value(): string[]; + set value(v: string[]); + } + : T extends 'text' + ? { + name: string; + 'aria-invalid': boolean | 'false' | 'true' | undefined; + get value(): string | number; + set value(v: string | number); + readonly defaultValue?: string | number; + } + : { + name: string; + type: T; + 'aria-invalid': boolean | 'false' | 'true' | undefined; + get value(): string | number; + set value(v: string | number); + readonly defaultValue?: string | number; + }; + + type RemoteFormFieldMethods = { + /** The values that will be submitted */ + value(): DeepPartial; + /** Set the values that will be submitted */ + set(input: DeepPartial): DeepPartial; + /** Whether the field or any nested field has been interacted with since the form was mounted */ + touched(): boolean; + /** Whether the field or any nested field has been edited since the form was mounted */ + dirty(): boolean; + /** Validation issues, if any */ + issues(): RemoteFormIssue[] | undefined; + }; + + // These two types use "T extends unknown ? .. : .." to distribute over unions. + // Example: if "type T = A | b" then "keyof T" only contains keys that both A and B have, with "KeysOfUnion" we get the keys of both A and B + type KeysOfUnion = T extends unknown ? keyof T : never; + type ValueOfUnionKey = T extends unknown + ? K extends keyof T + ? T[K] + : never + : never; + + export type RemoteFormFieldValue = string | string[] | number | boolean | File | File[]; + + type AsArgs = Type extends 'checkbox' + ? Value extends string[] + ? [type: Type, value: Value[number] | (string & {})] + : Value extends boolean + ? [type: Type] | [type: Type, value: boolean] + : [type: Type] | [type: Type, value: Value | (string & {})] + : Type extends 'submit' | 'hidden' + ? Value extends string + ? [type: Type, value: Value | (string & {})] + : [type: Type, value: Value] + : Type extends 'radio' + ? [type: Type, value: Value | (string & {})] + : Type extends 'file' | 'file multiple' + ? [type: Type] + : [type: Type] | [type: Type, value: Value | undefined]; + + /** + * Form field accessor type that provides name(), value(), and issues() methods + */ + export type RemoteFormField = RemoteFormFieldMethods & { + /** + * Returns an object that can be spread onto an input element with the correct type attribute, + * aria-invalid attribute if the field is invalid, and appropriate value/checked property getters/setters. + * @example + * ```svelte + * + * + * + * ``` + */ + as>(...args: AsArgs): InputElementProps; + }; + + type RemoteFormFieldContainer = RemoteFormFieldMethods & { + /** Validation issues belonging to this or any of the fields that belong to it, if any */ + allIssues(): RemoteFormIssue[] | undefined; + }; + + type UnknownField = RemoteFormFieldMethods & { + /** Validation issues belonging to this or any of the fields that belong to it, if any */ + allIssues(): RemoteFormIssue[] | undefined; + /** + * Returns an object that can be spread onto an input element with the correct type attribute, + * aria-invalid attribute if the field is invalid, and appropriate value/checked property getters/setters. + * @example + * ```svelte + * + * + * + * ``` + */ + as>(...args: AsArgs): InputElementProps; + } & { + [key: string | number]: UnknownField; + }; + + type RemoteFormFieldsRoot = + IsAny extends true + ? RecursiveFormFields + : Input extends void + ? { + /** Validation issues, if any */ + issues(): RemoteFormIssue[] | undefined; + /** Validation issues belonging to this or any of the fields that belong to it, if any */ + allIssues(): RemoteFormIssue[] | undefined; + } + : RemoteFormFields; + + /** + * Recursive type to build form fields structure with proxy access + */ + export type RemoteFormFields = + WillRecurseIndefinitely extends true + ? RecursiveFormFields + : NonNullable extends string | number | boolean | File + ? RemoteFormField> + : // [NonNullable] is used to prevent distributing over union while still allowing + // nullable wrappers (e.g. `string[] | undefined` from a schema with `.default([])`) + // to be treated as arrays; only the last condition should distribute over unions + [NonNullable] extends [string[] | File[]] + ? RemoteFormField> & { + [K in number]: RemoteFormField[number]>; + } + : [NonNullable] extends [Array] + ? RemoteFormFieldContainer> & { + [K in number]: RemoteFormFields; + } + : RemoteFormFieldContainer & { + [K in KeysOfUnion]-?: RemoteFormFields>; + }; + + // By breaking this out into its own type, we avoid the TS recursion depth limit + type RecursiveFormFields = RemoteFormFieldContainer & { + [key: string | number]: UnknownField; + }; + + type MaybeArray = T | T[]; + + export interface RemoteFormInput { + [key: string]: MaybeArray | undefined; + } + + export interface RemoteFormIssue { + message: string; + path: Array; + } + + // If the schema specifies `id` as a string or number, ensure that `for(...)` + // only accepts that type. Otherwise, accept `string | number` + type ExtractId = Input extends { id: infer Id } + ? Id extends string | number + ? Id + : string | number + : string | number; + + /** + * A function and proxy object used to imperatively create validation errors in form handlers. + * + * Access properties to create field-specific issues: `issue.fieldName('message')`. + * The type structure mirrors the input data structure for type-safe field access. + * Call `invalid(issue.foo(...), issue.nested.bar(...))` to throw a validation error. + */ + export type InvalidField = + WillRecurseIndefinitely extends true + ? Record + : NonNullable extends string | number | boolean | File + ? (message: string) => StandardSchemaV1.Issue + : NonNullable extends Array + ? { + [K in number]: InvalidField; + } & ((message: string) => StandardSchemaV1.Issue) + : NonNullable extends RemoteFormInput + ? { + [K in keyof T]-?: InvalidField; + } & ((message: string) => StandardSchemaV1.Issue) + : Record; + + /** + * A validation error thrown by `invalid`. + */ + export interface ValidationError { + /** The validation issues */ + issues: StandardSchemaV1.Issue[]; + } + + /** + * The form instance as received inside an `enhance` callback. See [Remote functions](https://svelte.dev/docs/kit/remote-functions#form) for full documentation. + */ + export type RemoteFormEnhanceInstance< + Input extends RemoteFormInput | void = RemoteFormInput | void, + Output = any + > = Omit, 'enhance' | 'element'> & { + readonly element: HTMLFormElement; + }; + + /** + * The callback passed to a remote form's `enhance` method. See [Remote functions](https://svelte.dev/docs/kit/remote-functions#form) for full documentation. + */ + export type RemoteFormEnhanceCallback< + Input extends RemoteFormInput | void = RemoteFormInput | void, + Output = any + > = (form: RemoteFormEnhanceInstance) => MaybePromise; + + /** + * The type of a remote `form` function. See [Remote functions](https://svelte.dev/docs/kit/remote-functions#form) for full documentation. + */ + export type RemoteForm = { + /** Attachment that sets up an event handler that intercepts the form submission on the client to prevent a full page reload */ + [attachment: symbol]: (node: HTMLFormElement) => void; + method: 'POST'; + /** The URL to send the form to. */ + action: string; + /** The `
` element this instance is currently attached to, if any. */ + get element(): HTMLFormElement | null; + /** Submit the currently attached form programmatically. */ + submit(): Promise & { + updates: (...updates: RemoteQueryUpdate[]) => Promise; + }; + /** Use the `enhance` method to influence what happens when the form is submitted. */ + enhance(callback: RemoteFormEnhanceCallback): { + method: 'POST'; + action: string; + [attachment: symbol]: (node: HTMLFormElement) => void; + }; + /** + * Create an instance of the form for the given `id`. + * The `id` is stringified and used for deduplication to potentially reuse existing instances. + * Useful when you have multiple forms that use the same remote form action, for example in a loop. + * ```svelte + * {#each todos as todo} + * {@const todoForm = updateTodo.for(todo.id)} + * + * {#if todoForm.result?.invalid}

Invalid data

{/if} + * ... + * + * {/each} + * ``` + */ + for(id: ExtractId): Omit, 'for'>; + /** Preflight checks */ + preflight(schema: StandardSchemaV1): RemoteForm; + /** Validate the form contents programmatically */ + validate(options?: { + /** + * Set this to `true` to also show validation issues of fields that haven't yet been + * edited and blurred. This option is ignored for forms that have previously been + * submitted, in which case all fields are always subject to validation + * (unless the form is reset, at which point it is treated as pristine) + */ + all?: boolean; + /** Set this to `true` to only run the `preflight` validation. */ + preflightOnly?: boolean; + }): Promise; + /** The result of the form submission */ + get result(): Output | undefined; + /** The number of pending submissions */ + get pending(): number; + /** True if the form has been submitted at least once, and hasn't been reset since */ + get submitted(): boolean; + /** Access form fields using object notation */ + fields: RemoteFormFieldsRoot; + }; + + /** + * The type of a remote `command` function. See [Remote functions](https://svelte.dev/docs/kit/remote-functions#command) for full documentation. + */ + export type RemoteCommand = { + (arg: undefined extends Input ? Input | void : Input): Promise & { + updates(...updates: RemoteQueryUpdate[]): Promise; + }; + /** The number of pending command executions */ + get pending(): number; + }; + + export type RemoteQueryUpdate = + | RemoteQuery + | RemoteLiveQuery + | RemoteQueryFunction + | RemoteLiveQueryFunction + | RemoteQueryOverride; + + export type RemoteResource = Promise & { + /** The error in case the query fails. */ + get error(): App.Error | undefined; + /** `true` before the first result is available and during refreshes */ + get loading(): boolean; + } & ( + | { + /** The current value of the query. Undefined until `ready` is `true` */ + get current(): undefined; + ready: false; + } + | { + /** The current value of the query. Undefined until `ready` is `true` */ + get current(): T; + ready: true; + } + ); + + export type RemoteQuery = RemoteResource & { + /** + * On the client, this function will update the value of the query without re-fetching it. + * + * On the server, this can be called in the context of a `command` or `form` and the specified data will accompany the action response back to the client. + * This prevents SvelteKit needing to refresh all queries on the page in a second server round-trip. + */ + set(value: T): void; + /** + * On the client, this function will re-fetch the query from the server. + * + * On the server, this can be called in the context of a `command` or `form` and the refreshed data will accompany the action response back to the client. + * This prevents SvelteKit needing to refresh all queries on the page in a second server round-trip. + */ + refresh(): Promise; + /** + * Temporarily override a query's value during a [single-flight mutation](https://svelte.dev/docs/kit/remote-functions#Single-flight-mutations) to provide optimistic updates. + * + * ```svelte + * + * + *
{ + * await form.submit().updates( + * todos.withOverride((todos) => [...todos, { text: form.fields.text.value() }]) + * ); + * })}> + * + * + *
+ * ``` + */ + withOverride(update: (current: T) => T): RemoteQueryOverride; + }; + + export type RemoteLiveQuery = RemoteResource & + AsyncIterable & { + /** `true` if the live stream is currently connected. */ + readonly connected: boolean; + /** `true` once the current live stream iterator is done. */ + readonly done: boolean; + /** Reconnects the live stream immediately. */ + reconnect(): Promise; + }; + + export type RemoteQueryOverride = () => void; + + /** + * The type of a remote `prerender` function. See [Remote functions](https://svelte.dev/docs/kit/remote-functions#prerender) for full documentation. + */ + export type RemotePrerenderFunction = ( + arg: undefined extends Input ? Input | void : Input + ) => RemoteResource; + /** - * Programmatically replace the current history entry with the given `page.state`. Used for [shallow routing](https://svelte.dev/docs/kit/shallow-routing). + * The return value of a remote `query` function. See [Remote functions](https://svelte.dev/docs/kit/remote-functions#query) for full documentation. * - * @deprecated Use `goto(url, { state, shallow: true, replace: true })` instead. - * */ - export function replaceState(url: string | URL, state: App.PageState): Promise; - type MaybePromise = T | Promise; - - export {}; -} + * The optional `Validated` generic parameter represents the argument type *after* the + * query's schema has validated and (optionally) transformed it — this is the type the + * query's implementation function receives on the server, and the type yielded by + * [`requested`](https://svelte.dev/docs/kit/$app-server#requested). For queries declared + * with [Standard Schema](https://standardschema.dev/) it differs from `Input` when the + * schema contains a transform (e.g. `v.pipe(v.number(), v.transform(String))` has + * `Input = number` but `Validated = string`). For `'unchecked'` validators and queries + * without arguments it defaults to `Input`. + */ + export type RemoteQueryFunction = ( + arg: undefined extends Input ? Input | void : Input + ) => RemoteQuery; -declare module '$app/paths' { - import type { AssetPath, RouteIdWithSearchOrHash, PathnameWithSearchOrHash, ResolvedPathname, RouteId, RouteParams } from '$app/types'; /** - * Resolve the URL of an asset in your `static` directory, by prefixing it with [`config.paths.assets`](https://svelte.dev/docs/kit/configuration#paths) if configured, or otherwise by prefixing it with the base path. - * - * During server rendering, the base path is relative and depends on the page currently being rendered. - * - * @example - * ```svelte - * - * - * a potato - * ``` - * @since 2.26 + * The type of a remote `query.live` function. See [Remote functions](https://svelte.dev/docs/kit/remote-functions#query.live) for full documentation. * - * */ - export function asset(file: AssetPath): string; + * The optional `Validated` generic parameter represents the argument type *after* the + * query's schema has validated and (optionally) transformed it, and matches the type + * yielded by [`requested`](https://svelte.dev/docs/kit/$app-server#requested). + */ + export type RemoteLiveQueryFunction = ( + arg: undefined extends Input ? Input | void : Input + ) => RemoteLiveQuery; + /** - * Resolve a pathname by prefixing it with the base path, if any, or resolve a route ID by populating dynamic segments with parameters. - * - * During server rendering, the base path is relative and depends on the page currently being rendered. - * - * @example - * ```js - * import { resolve } from '$app/paths'; - * - * // using a pathname - * const resolved = resolve(`blog/hello-world`); - * - * // using a route ID plus parameters - * const resolved = resolve('/blog/[slug]', { - * slug: 'hello-world' - * }); - * ``` - * @since 2.26 - * - * */ - export function resolve(...args: ResolveArgs): ResolvedPathname; + * A single entry yielded by [`requested`](https://svelte.dev/docs/kit/$app-server#requested) + * when called with a regular `query`. `arg` is the validated argument (the input *after* + * the query's schema validated and transformed it, if applicable); `query` is a + * `RemoteQuery` bound to the client's original cache key, so `refresh()` / `set()` will + * update the correct client entry. + */ + export type RequestedEntry = { + arg: Validated; + query: RemoteQuery; + }; + /** - * Match a path or URL to a route ID and extracts any parameters. - * - * @example - * ```js - * import { match } from '$app/paths'; - * - * const route = await match('blog/hello-world'); - * - * if (route?.id === '/blog/[slug]') { - * const slug = route.params.slug; - * const response = await fetch(`/api/posts/${slug}`); - * const post = await response.json(); - * } - * ``` - * @since 2.52.0 - * - * */ - export function match(url: URL | string): Promise<{ [K in RouteId]: { - id: K; - params: RouteParams; - }; }[RouteId] | null>; - type StripSearchOrHash = T extends `${infer U}?${string}` - ? U - : T extends `${infer U}#${string}` - ? U - : T; + * A single entry yielded by [`requested`](https://svelte.dev/docs/kit/$app-server#requested) + * when called with a `query.live`. `arg` is the validated argument; `query` is a + * `RemoteLiveQuery` bound to the client's original cache key, so `reconnect()` targets + * the correct client subscription. + */ + export type LiveRequestedEntry = { + arg: Validated; + query: RemoteLiveQuery; + }; - type ResolveArgs = T extends `/${string}` - ? StripSearchOrHash extends infer U extends RouteId - ? RouteParams extends Record - ? [route: T] - : [route: T, params: RouteParams] - : [never] - : [pathname: T]; + export type QueryRequestedResult = Iterable> & + AsyncIterable> & { + /** + * Call `refresh` on all queries selected by this `requested` invocation. + * This is identical to: + * ```ts + * import { requested } from '$app/server'; + * + * for await (const { query } of requested(getPost, ...)) { + * void query.refresh(); + * } + * ``` + */ + refreshAll: () => Promise; + }; - export {}; -} + export type LiveQueryRequestedResult = Iterable< + LiveRequestedEntry + > & + AsyncIterable> & { + /** + * Call `reconnect` on all live queries selected by this `requested` invocation. + * This is identical to: + * ```ts + * import { requested } from '$app/server'; + * + * for await (const { query } of requested(liveQuery, ...)) { + * void query.reconnect(); + * } + * ``` + */ + reconnectAll: () => Promise; + }; -declare module '$app/server' { - import type { StandardSchemaV1 } from '@standard-schema/spec'; - import type { RequestEvent, RemoteCommand, RemoteForm, RemoteFormInput, InvalidField, RemotePrerenderFunction, RemoteQueryFunction, RemoteLiveQueryFunction, QueryRequestedResult, LiveQueryRequestedResult } from '@sveltejs/kit'; + export type RequestedResult = + | QueryRequestedResult + | LiveQueryRequestedResult; + type RemoteLiveQueryUserFunctionReturnType = MaybePromise< + | AsyncGenerator + | AsyncIterator + | AsyncIterable + | Generator + | Iterator + | Iterable + >; + type RemotePrerenderInputsGenerator = () => MaybePromise; /** * Read the contents of an imported asset from the filesystem * @example @@ -3409,6 +3407,28 @@ declare module '$app/server' { * @since 2.4.0 */ export function read(asset: string): Response; + type MaybePromise = T | Promise; + + type DeepPartial = T extends Record | unknown[] + ? { + [K in keyof T]?: T[K] extends Record | unknown[] + ? DeepPartial + : T[K]; + } + : T | undefined; + + type IsAny = 0 extends 1 & T ? true : false; + + type HasNonOptionalBoolean = + IsAny extends true + ? never + : [T] extends [boolean] + ? true + : T extends Array + ? HasNonOptionalBoolean + : T extends Record + ? { [K in keyof T]: HasNonOptionalBoolean }[keyof T] + : never; /** * Returns the current `RequestEvent`. Can be used inside server hooks, server `load` functions, actions, and endpoints (and functions called by them). * @@ -3625,29 +3645,6 @@ declare module '$app/server' { * * */ export function requested(query: RemoteLiveQueryFunction, limit: number): LiveQueryRequestedResult; - type RemoteLiveQueryUserFunctionReturnType = MaybePromise< - | AsyncGenerator - | AsyncIterator - | AsyncIterable - | Generator - | Iterator - | Iterable - >; - type RemotePrerenderInputsGenerator = () => MaybePromise; - type MaybePromise = T | Promise; - - type IsAny = 0 extends 1 & T ? true : false; - - type HasNonOptionalBoolean = - IsAny extends true - ? never - : [T] extends [boolean] - ? true - : T extends Array - ? HasNonOptionalBoolean - : T extends Record - ? { [K in keyof T]: HasNonOptionalBoolean }[keyof T] - : never; export {}; } From 529346d96369f92cdd804be9c4313c598efe34b8 Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Tue, 11 Aug 2026 15:44:46 -0400 Subject: [PATCH 506/545] breaking: move hooks-related types to `@sveltejs/kit/hooks` (#16737) Another part of #16676. @dummdidumm will this need changes to the auto-injected types? The diff is larger than it needs to be, presumably because of formatting-related changes after switching to `oxfmt` --- ### Please don't delete this checklist! Before submitting the PR, please make sure you do the following: - [x] It's really useful if your PR references an issue where it is discussed ahead of time. In many cases, features are absent for a reason. For large changes, please create an RFC: https://github.com/sveltejs/rfcs - [x] This message body should clearly illustrate what problems it solves. - [ ] Ideally, include a test that fails without this PR but passes with it. ### Tests - [x] Run the tests with `pnpm test` and lint the project with `pnpm lint` and `pnpm check` ### Changesets - [x] If your PR makes a change that should be noted in one or more packages' changelogs, generate a changeset by running `pnpm changeset` and following the prompts. Changesets that add features should be `minor` and those that fix bugs should be `patch`. Please prefix changeset messages with `feat:`, `fix:`, or `chore:`. ### Edits - [x] Please ensure that 'Allow edits from maintainers' is checked. PRs without this option may be closed. --------- Co-authored-by: vercel[bot] <35613825+vercel[bot]@users.noreply.github.com> Co-authored-by: Vercel Co-authored-by: github-actions[bot] Co-authored-by: Tee Ming --- .changeset/loose-cases-know.md | 6 + .../docs/20-core-concepts/30-form-actions.md | 2 +- .../20-core-concepts/60-remote-functions.md | 2 +- documentation/docs/30-advanced/20-hooks.md | 22 +- documentation/docs/30-advanced/25-errors.md | 2 +- .../40-best-practices/10-accessibility.md | 2 +- .../35-migrating-to-sveltekit-3.md | 8 +- .../docs/60-appendix/40-migrating.md | 2 +- .../test/apps/basic/src/hooks.server.js | 2 +- packages/kit/scripts/generate-dts.js | 2 +- packages/kit/src/exports/hooks/public.d.ts | 194 +++++++++ packages/kit/src/exports/hooks/sequence.js | 7 +- packages/kit/src/exports/public.d.ts | 190 --------- .../kit/src/runtime/app/internal/transport.js | 2 +- packages/kit/src/runtime/client/client.js | 2 +- packages/kit/src/runtime/server/errors.js | 4 +- .../kit/src/runtime/server/page/load_data.js | 2 +- packages/kit/src/runtime/server/respond.js | 2 +- packages/kit/src/types/internal.d.ts | 22 +- .../kit/test/apps/async/src/hooks.client.js | 2 +- packages/kit/test/apps/async/src/hooks.js | 2 +- .../kit/test/apps/async/src/hooks.server.js | 4 +- .../kit/test/apps/basics/src/hooks.client.js | 2 +- packages/kit/test/apps/basics/src/hooks.js | 4 +- .../kit/test/apps/basics/src/hooks.server.js | 4 +- .../test/apps/dev-only/src/hooks.client.js | 2 +- packages/kit/test/apps/dev-only/src/hooks.js | 2 +- .../test/apps/dev-only/src/hooks.server.js | 2 +- .../test/apps/hash-based-routing/src/hooks.js | 2 +- packages/kit/test/apps/options-2/src/hooks.js | 2 +- .../test/apps/options-2/src/hooks.server.js | 2 +- packages/kit/test/apps/options-3/src/hooks.js | 2 +- .../test/apps/options/source/hooks.server.js | 2 +- .../prerendering/basics/src/hooks.server.js | 2 +- .../types/app-error-enhanced/error.test.ts | 3 +- packages/kit/test/types/error.test.ts | 3 +- packages/kit/tsconfig.json | 1 + packages/kit/types/index.d.ts | 387 +++++++++--------- 38 files changed, 463 insertions(+), 442 deletions(-) create mode 100644 .changeset/loose-cases-know.md create mode 100644 packages/kit/src/exports/hooks/public.d.ts diff --git a/.changeset/loose-cases-know.md b/.changeset/loose-cases-know.md new file mode 100644 index 000000000000..2a95d4074b7e --- /dev/null +++ b/.changeset/loose-cases-know.md @@ -0,0 +1,6 @@ +--- +"@sveltejs/kit": major +--- + +breaking: move hooks-related types to `@sveltejs/kit/hooks` + \ No newline at end of file diff --git a/documentation/docs/20-core-concepts/30-form-actions.md b/documentation/docs/20-core-concepts/30-form-actions.md index 4a3bf04a59dd..1a3d2ad03e40 100644 --- a/documentation/docs/20-core-concepts/30-form-actions.md +++ b/documentation/docs/20-core-concepts/30-form-actions.md @@ -301,7 +301,7 @@ export {}; // @filename: index.js // ---cut--- -/** @type {import('@sveltejs/kit').Handle} */ +/** @type {import('@sveltejs/kit/hooks').Handle} */ export async function handle({ event, resolve }) { event.locals.user = await getUser(event.cookies.get('sessionid')); return resolve(event); diff --git a/documentation/docs/20-core-concepts/60-remote-functions.md b/documentation/docs/20-core-concepts/60-remote-functions.md index 57673a380093..257942dc82bb 100644 --- a/documentation/docs/20-core-concepts/60-remote-functions.md +++ b/documentation/docs/20-core-concepts/60-remote-functions.md @@ -1239,7 +1239,7 @@ In the second case, we don't want to give the attacker any help, so SvelteKit wi ```js /// file: src/hooks.server.js -/** @type {import('@sveltejs/kit').HandleServerError} */ +/** @type {import('@sveltejs/kit/hooks').HandleServerError} */ export function handleError({ kind, issues }) { if (kind === 'validation') { console.error(issues); diff --git a/documentation/docs/30-advanced/20-hooks.md b/documentation/docs/30-advanced/20-hooks.md index b8403b687695..20d61ae7b52a 100644 --- a/documentation/docs/30-advanced/20-hooks.md +++ b/documentation/docs/30-advanced/20-hooks.md @@ -20,7 +20,7 @@ This function runs every time the SvelteKit server receives a [request](web-stan ```js /// file: src/hooks.server.js -/** @type {import('@sveltejs/kit').Handle} */ +/** @type {import('@sveltejs/kit/hooks').Handle} */ export async function handle({ event, resolve }) { if (event.url.pathname.startsWith('/custom')) { return new Response('custom response'); @@ -49,7 +49,7 @@ You can define multiple `handle` functions and execute them with the [`sequence` ```js /// file: src/hooks.server.js -/** @type {import('@sveltejs/kit').Handle} */ +/** @type {import('@sveltejs/kit/hooks').Handle} */ export async function handle({ event, resolve }) { const response = await resolve(event, { transformPageChunk: ({ html }) => html.replace('old', 'new'), @@ -84,7 +84,7 @@ const getUserInformation: (cookie: string | void) => Promise; // @filename: index.js // ---cut--- -/** @type {import('@sveltejs/kit').Handle} */ +/** @type {import('@sveltejs/kit/hooks').Handle} */ export async function handle({ event, resolve }) { event.locals.user = await getUserInformation(event.cookies.get('sessionid')); @@ -112,7 +112,7 @@ For example, your `load` function might make a request to a public URL like `htt ```js /// file: src/hooks.server.js -/** @type {import('@sveltejs/kit').HandleFetch} */ +/** @type {import('@sveltejs/kit/hooks').HandleFetch} */ export async function handleFetch({ request, fetch }) { if (request.url.startsWith('https://api.yourapp.com/')) { // clone the original request, but change the URL @@ -133,7 +133,7 @@ There is one caveat: if your app and your API are on sibling subdomains — `www ```js /// file: src/hooks.server.js // @errors: 2345 -/** @type {import('@sveltejs/kit').HandleFetch} */ +/** @type {import('@sveltejs/kit/hooks').HandleFetch} */ export async function handleFetch({ event, request, fetch }) { if (request.url.startsWith('https://api.my-domain.com/')) { request.headers.set('cookie', event.request.headers.get('cookie')); @@ -206,7 +206,7 @@ import * as Sentry from '@sentry/sveltekit'; Sentry.init({/*...*/}) -/** @type {import('@sveltejs/kit').HandleServerError} */ +/** @type {import('@sveltejs/kit/hooks').HandleServerError} */ export async function handleError({ kind, error, event }) { if (kind === 'app') { // you created this error with `error(...)`, so it already @@ -251,7 +251,7 @@ import * as Sentry from '@sentry/sveltekit'; Sentry.init({/*...*/}) -/** @type {import('@sveltejs/kit').HandleClientError} */ +/** @type {import('@sveltejs/kit/hooks').HandleClientError} */ export async function handleError({ kind, error, event }) { if (kind === 'app') { return error; @@ -296,7 +296,7 @@ This function runs once, when the server is created or the app starts in the bro /// file: src/hooks.server.js import * as db from '#lib/server/database.js'; -/** @type {import('@sveltejs/kit').ServerInit} */ +/** @type {import('@sveltejs/kit/hooks').ServerInit} */ export async function init() { await db.connect(); } @@ -324,7 +324,7 @@ const translated = { '/fr/a-propos': '/fr/about', }; -/** @type {import('@sveltejs/kit').Reroute} */ +/** @type {import('@sveltejs/kit/hooks').Reroute} */ export function reroute({ url }) { if (url.pathname in translated) { return translated[url.pathname]; @@ -342,7 +342,7 @@ Since version 2.18, the `reroute` hook can be asynchronous, allowing it to (for // @errors: 2345 2304 /// file: src/hooks.js -/** @type {import('@sveltejs/kit').Reroute} */ +/** @type {import('@sveltejs/kit/hooks').Reroute} */ export async function reroute({ url, fetch }) { // Ask a special endpoint within your app about the destination if (url.pathname === '/api/reroute') return; @@ -369,7 +369,7 @@ This is a collection of _transporters_, which allow you to pass custom types — /// file: src/hooks.js import { Vector } from '#lib/math.js'; -/** @type {import('@sveltejs/kit').Transport} */ +/** @type {import('@sveltejs/kit/hooks').Transport} */ export const transport = { Vector: { encode: (value) => value instanceof Vector && [value.x, value.y], diff --git a/documentation/docs/30-advanced/25-errors.md b/documentation/docs/30-advanced/25-errors.md index cf60f95bf029..e71adcc6782b 100644 --- a/documentation/docs/30-advanced/25-errors.md +++ b/documentation/docs/30-advanced/25-errors.md @@ -94,7 +94,7 @@ Anything you return overrides the defaults, so you can — for example — use t // Assuming you have this ... class NotFound extends Error {} -/** @type {import('@sveltejs/kit').HandleServerError} */ +/** @type {import('@sveltejs/kit/hooks').HandleServerError} */ export function handleError({ kind, error, event }) { if (kind === 'unknown') { // ... you can do this diff --git a/documentation/docs/40-best-practices/10-accessibility.md b/documentation/docs/40-best-practices/10-accessibility.md index 0eb3c6705f46..5e174655d7bc 100644 --- a/documentation/docs/40-best-practices/10-accessibility.md +++ b/documentation/docs/40-best-practices/10-accessibility.md @@ -73,7 +73,7 @@ export function get_lang(event: import('@sveltejs/kit').RequestEvent) { // @filename: hooks.server.js import { get_lang } from './utils'; // ---cut--- -/** @type {import('@sveltejs/kit').Handle} */ +/** @type {import('@sveltejs/kit/hooks').Handle} */ export function handle({ event, resolve }) { return resolve(event, { transformPageChunk: ({ html }) => html.replace('%lang%', get_lang(event)) diff --git a/documentation/docs/60-appendix/35-migrating-to-sveltekit-3.md b/documentation/docs/60-appendix/35-migrating-to-sveltekit-3.md index df65657db1fc..eafb8b9eca90 100644 --- a/documentation/docs/60-appendix/35-migrating-to-sveltekit-3.md +++ b/documentation/docs/60-appendix/35-migrating-to-sveltekit-3.md @@ -87,8 +87,8 @@ The `$lib` alias is no longer generated automatically by SvelteKit. It is replac ```js // @errors: 2307 imported module has no types ----import { foo } from '$lib/foo';--- -+++import { foo } from '#lib/foo.js';+++ +---import { foo } from '$lib/foo';--- ++++import { foo } from '#lib/foo.js';+++ ``` ## `$app/environment` (renamed) @@ -282,6 +282,10 @@ The `defineParams` function for creating [param matchers](advanced-routing#Match Types like `EnvVarConfig`, used with [`defineEnvVars`](@sveltejs-kit-env#defineEnvVars) hook, now live in `@sveltejs/kit/env`. +### Hooks-related types moved to `@sveltejs/kit/hooks` + +Types like `Handle`, which defines the type of your [`handle`](hooks#handle) hook, now live in `@sveltejs/kit/hooks`. + ## `@sveltejs/kit/hooks` The `defineEnvVars` function has moved from `@sveltejs/kit/hooks` to `@sveltejs/kit/env`. diff --git a/documentation/docs/60-appendix/40-migrating.md b/documentation/docs/60-appendix/40-migrating.md index 21eb4bc9decc..3b40169ac60f 100644 --- a/documentation/docs/60-appendix/40-migrating.md +++ b/documentation/docs/60-appendix/40-migrating.md @@ -181,7 +181,7 @@ const minification_options = { sortClassName: true }; -/** @type {import('@sveltejs/kit').Handle} */ +/** @type {import('@sveltejs/kit/hooks').Handle} */ export async function handle({ event, resolve }) { let page = ''; diff --git a/packages/adapter-node/test/apps/basic/src/hooks.server.js b/packages/adapter-node/test/apps/basic/src/hooks.server.js index 19785d34b31b..008bd4bd68a4 100644 --- a/packages/adapter-node/test/apps/basic/src/hooks.server.js +++ b/packages/adapter-node/test/apps/basic/src/hooks.server.js @@ -2,7 +2,7 @@ // see https://github.com/sveltejs/kit/issues/16092 import { MY_CUSTOM_PORT } from '$app/env/private'; -/** @type {import('@sveltejs/kit').Handle} */ +/** @type {import('@sveltejs/kit/hooks').Handle} */ export function handle({ event, resolve }) { if (!MY_CUSTOM_PORT) throw new Error('MY_CUSTOM_PORT should be defined'); return resolve(event); diff --git a/packages/kit/scripts/generate-dts.js b/packages/kit/scripts/generate-dts.js index 16d53ed24699..febf912e0ad0 100644 --- a/packages/kit/scripts/generate-dts.js +++ b/packages/kit/scripts/generate-dts.js @@ -6,7 +6,7 @@ await createBundle({ modules: { '@sveltejs/kit': 'src/exports/public.d.ts', '@sveltejs/kit/env': 'src/exports/env/public.d.ts', - '@sveltejs/kit/hooks': 'src/exports/hooks/index.js', + '@sveltejs/kit/hooks': 'src/exports/hooks/public.d.ts', '@sveltejs/kit/node': 'src/exports/node/index.js', '@sveltejs/kit/params': 'src/exports/params/public.d.ts', '@sveltejs/kit/vite': 'src/exports/vite/index.js', diff --git a/packages/kit/src/exports/hooks/public.d.ts b/packages/kit/src/exports/hooks/public.d.ts new file mode 100644 index 000000000000..9a606504f9af --- /dev/null +++ b/packages/kit/src/exports/hooks/public.d.ts @@ -0,0 +1,194 @@ +import { StandardSchemaV1 } from '@standard-schema/spec'; +import { NavigationEvent, RequestEvent } from '@sveltejs/kit'; +import { MaybePromise } from 'types'; + +export * from './index.js'; + +/** + * The [`handle`](https://svelte.dev/docs/kit/hooks#handle) hook runs every time the SvelteKit server receives a [request](https://svelte.dev/docs/kit/web-standards#Fetch-APIs-Request) and + * determines the [response](https://svelte.dev/docs/kit/web-standards#Fetch-APIs-Response). + * It receives an `event` object representing the request and a function called `resolve`, which renders the route and generates a `Response`. + * This allows you to modify response headers or bodies, or bypass SvelteKit entirely (for implementing routes programmatically, for example). + */ +export type Handle = (input: { + event: RequestEvent; + resolve: (event: RequestEvent, opts?: ResolveOptions) => Promise; +}) => MaybePromise; + +type CaughtErrorMap = { + app: App.Error; + framework: { status: number; message: string }; + unknown: unknown; +}; + +type ValidationCaughtError = { + kind: 'validation'; + error: { status: number; message: string }; + issues: Issue[]; +}; + +/** + * The error passed to the [`handleError`](https://svelte.dev/docs/kit/hooks#handleError) hooks. + * Use the `kind` discriminant to distinguish errors from your app (thrown with the + * [`error`](https://svelte.dev/docs/kit/errors#App-errors) helper), errors generated by + * SvelteKit itself (such as 404s), validation errors, and unknown errors (thrown by your code, + * or code it calls). + */ +export type CaughtError = + | { + [Kind in keyof CaughtErrorMap]: { + /** Identifies the category and origin of the error */ + kind: Kind; + /** The caught error. Its type depends on `kind` */ + error: CaughtErrorMap[Kind]; + /** Only present for validation errors */ + issues?: undefined; + }; + }[keyof CaughtErrorMap] + | ValidationCaughtError; + +/** The error passed to the client-side `handleError` hook. */ +export type ClientCaughtError = Exclude; + +/** + * The server-side [`handleError`](https://svelte.dev/docs/kit/hooks#handleError) hook runs for every error thrown while responding to a request, except redirects. + * + * The `kind` property discriminates between _app_ errors (thrown with the [`error`](https://svelte.dev/docs/kit/errors#App-errors) helper), + * _framework_ errors (generated by SvelteKit itself, such as 404s), _validation_ errors (caused by invalid remote function arguments) + * and _unknown_ errors (thrown by your code, or code it calls). + * + * The hook returns an object matching `App.Error`, in which `status` and `message` are optional — return them only to + * override the defaults. Omitted properties are inherited from the caught error: the body passed to `error(...)` for app errors, + * the status and safe message for framework and validation errors, and `500`/`'Internal Error'` for unknown errors. Return nothing to + * keep the defaults entirely (if you augment `App.Error` with required properties, you must return those). + * + * Make sure that this function _never_ throws an error. + */ +export type HandleServerError = ( + input: CaughtError & { event: RequestEvent } +) => MaybePromise; + +/** + * The client-side [`handleError`](https://svelte.dev/docs/kit/hooks#handleError) hook runs for every error thrown while navigating, except redirects. + * Errors that were already transformed by the server-side hook are not passed to it a second time. + * + * The `kind` property discriminates between _app_ errors (thrown with the [`error`](https://svelte.dev/docs/kit/errors#App-errors) helper), + * _framework_ errors (generated by SvelteKit itself, such as 404s) and _unknown_ errors (thrown by your code, or code it calls). + * + * The hook returns an object matching `App.Error`, in which `status` and `message` are optional — return them only to + * override the defaults. Omitted properties are inherited from the caught error: the body passed to `error(...)` for app errors, + * the status and safe message for framework errors, and `500`/`'Internal Error'` for unknown errors. Return nothing to + * keep the defaults entirely (if you augment `App.Error` with required properties, you must return those). + * + * Make sure that this function _never_ throws an error. + */ +export type HandleClientError = ( + input: ClientCaughtError & { event: NavigationEvent } +) => MaybePromise; + +/** + * The [`handleFetch`](https://svelte.dev/docs/kit/hooks#handleFetch) hook allows you to modify (or replace) the result of an [`event.fetch`](https://svelte.dev/docs/kit/load#Making-fetch-requests) call that runs on the server (or during prerendering) inside an endpoint, `load`, `action`, `handle`, `handleError` or `reroute`. + */ +export type HandleFetch = (input: { + event: RequestEvent; + request: Request; + fetch: typeof fetch; +}) => MaybePromise; + +/** + * The [`init`](https://svelte.dev/docs/kit/hooks#init) will be invoked before the server responds to its first request + * @since 2.10.0 + */ +export type ServerInit = () => MaybePromise; + +/** + * The [`init`](https://svelte.dev/docs/kit/hooks#init) will be invoked once the app starts in the browser + * @since 2.10.0 + */ +export type ClientInit = () => MaybePromise; + +/** + * The [`reroute`](https://svelte.dev/docs/kit/hooks#reroute) hook allows you to modify the URL before it is used to determine which route to render. + * @since 2.3.0 + */ +export type Reroute = (event: { url: URL; fetch: typeof fetch }) => MaybePromise; + +/** + * The [`transport`](https://svelte.dev/docs/kit/hooks#transport) hook allows you to transport custom types across the server/client boundary. + * + * Each transporter has a pair of `encode` and `decode` functions. On the server, `encode` determines whether a value is an instance of the custom type and, if so, returns a non-falsy encoding of the value which can be an object or an array (or `false` otherwise). + * + * In the browser, `decode` turns the encoding back into an instance of the custom type. + * + * ```ts + * import type { Transport } from '@sveltejs/kit/hooks'; + * + * declare class MyCustomType { + * data: any + * } + * + * // hooks.js + * export const transport: Transport = { + * MyCustomType: { + * encode: (value) => value instanceof MyCustomType && [value.data], + * decode: ([data]) => new MyCustomType(data) + * } + * }; + * ``` + * @since 2.11.0 + */ +export type Transport = Record; + +/** + * A member of the [`transport`](https://svelte.dev/docs/kit/hooks#transport) hook. + */ +export interface Transporter< + T = any, + U = any /* minus falsy values, but we can't properly express that */ +> { + encode: (value: T) => false | U; + decode: (data: U) => T; +} + +export interface ResolveOptions { + /** + * Applies custom transforms to HTML. If `done` is true, it's the final chunk. Chunks are not guaranteed to be well-formed HTML + * (they could include an element's opening tag but not its closing tag, for example) + * but they will always be split at sensible boundaries such as `%sveltekit.head%` or layout/page components. + * @param input the html chunk and the info if this is the last chunk + */ + transformPageChunk?: (input: { html: string; done: boolean }) => MaybePromise; + /** + * Determines which headers should be included in serialized responses when a `load` function loads a resource with `fetch`. + * By default, none will be included. + * @param name header name + * @param value header value + */ + filterSerializedResponseHeaders?: (name: string, value: string) => boolean; + /** + * Determines which files should be preloaded. Files are preloaded via `` tags added to the + * `` tag; if `output.linkHeaderPreload` is enabled, dynamically rendered pages use the + * [`Link` response header](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Link) instead. + * By default, `js` and `css` files will be preloaded. + * @param input the type of the file and its path + */ + preload?: (input: { type: 'font' | 'css' | 'js' | 'asset'; path: string }) => boolean; +} + +type AppErrorWithOptionalDefaults = Omit & { + status?: App.Error['status']; + message?: App.Error['message']; +}; + +/** + * `void` is only a valid `handleError` return when `App.Error` adds no required properties + * beyond `status` and `message` — both of which are optional in the return, since they default + * to those of the caught error. If `App.Error` is augmented with required properties, the hook + * must return them, so returning nothing becomes a type error. + */ +type VoidIfNoRequiredAppErrorProperties = { + status: number; + message: string; +} extends App.Error + ? void + : never; diff --git a/packages/kit/src/exports/hooks/sequence.js b/packages/kit/src/exports/hooks/sequence.js index feb4cf99429e..8dd0b546c84e 100644 --- a/packages/kit/src/exports/hooks/sequence.js +++ b/packages/kit/src/exports/hooks/sequence.js @@ -1,4 +1,5 @@ -/** @import { Handle, RequestEvent, ResolveOptions } from '@sveltejs/kit' */ +/** @import { RequestEvent } from '@sveltejs/kit' */ +/** @import { Handle, ResolveOptions } from '@sveltejs/kit/hooks' */ import { merge_tracing, get_request_store, @@ -17,7 +18,7 @@ import { * /// file: src/hooks.server.js * import { sequence } from '@sveltejs/kit/hooks'; * - * /// type: import('@sveltejs/kit').Handle + * /// type: import('@sveltejs/kit/hooks').Handle * async function first({ event, resolve }) { * console.log('first pre-processing'); * const result = await resolve(event, { @@ -36,7 +37,7 @@ import { * return result; * } * - * /// type: import('@sveltejs/kit').Handle + * /// type: import('@sveltejs/kit/hooks').Handle * async function second({ event, resolve }) { * console.log('second pre-processing'); * const result = await resolve(event, { diff --git a/packages/kit/src/exports/public.d.ts b/packages/kit/src/exports/public.d.ts index 6e822a58169b..2fd2fa841bb3 100644 --- a/packages/kit/src/exports/public.d.ts +++ b/packages/kit/src/exports/public.d.ts @@ -20,7 +20,6 @@ import { } from '../types/private.js'; import { BuildData, SSRNodeLoader, SSRRoute, ValidatedConfig } from 'types'; import { SvelteConfig } from '@sveltejs/vite-plugin-svelte'; -import { StandardSchemaV1 } from '@standard-schema/spec'; import { Plugin } from 'vite'; import { RouteId as AppRouteId, LayoutParams as AppLayoutParams } from '$app/types'; import { ParamMatcher } from '@sveltejs/kit/params'; @@ -30,24 +29,6 @@ export { PrerenderOption } from '../types/private.js'; // @ts-ignore this is an optional peer dependency so could be missing. Written like this so dts-buddy preserves the ts-ignore type Span = import('@opentelemetry/api').Span; -type AppErrorWithOptionalDefaults = Omit & { - status?: App.Error['status']; - message?: App.Error['message']; -}; - -/** - * `void` is only a valid `handleError` return when `App.Error` adds no required properties - * beyond `status` and `message` — both of which are optional in the return, since they default - * to those of the caught error. If `App.Error` is augmented with required properties, the hook - * must return them, so returning nothing becomes a type error. - */ -type VoidIfNoRequiredAppErrorProperties = { - status: number; - message: string; -} extends App.Error - ? void - : never; - /** * [Adapters](https://svelte.dev/docs/kit/adapters) are responsible for taking the production build and turning it into something that can be deployed to a platform of your choosing. */ @@ -950,152 +931,6 @@ export interface KitConfig { }; } -/** - * The [`handle`](https://svelte.dev/docs/kit/hooks#handle) hook runs every time the SvelteKit server receives a [request](https://svelte.dev/docs/kit/web-standards#Fetch-APIs-Request) and - * determines the [response](https://svelte.dev/docs/kit/web-standards#Fetch-APIs-Response). - * It receives an `event` object representing the request and a function called `resolve`, which renders the route and generates a `Response`. - * This allows you to modify response headers or bodies, or bypass SvelteKit entirely (for implementing routes programmatically, for example). - */ -export type Handle = (input: { - event: RequestEvent; - resolve: (event: RequestEvent, opts?: ResolveOptions) => Promise; -}) => MaybePromise; - -type CaughtErrorMap = { - app: App.Error; - framework: { status: number; message: string }; - unknown: unknown; -}; - -type ValidationCaughtError = { - kind: 'validation'; - error: { status: number; message: string }; - issues: Issue[]; -}; - -/** - * The error passed to the [`handleError`](https://svelte.dev/docs/kit/hooks#handleError) hooks. - * Use the `kind` discriminant to distinguish errors from your app (thrown with the - * [`error`](https://svelte.dev/docs/kit/errors#App-errors) helper), errors generated by - * SvelteKit itself (such as 404s), validation errors, and unknown errors (thrown by your code, - * or code it calls). - */ -export type CaughtError = - | { - [Kind in keyof CaughtErrorMap]: { - /** Identifies the category and origin of the error */ - kind: Kind; - /** The caught error. Its type depends on `kind` */ - error: CaughtErrorMap[Kind]; - /** Only present for validation errors */ - issues?: undefined; - }; - }[keyof CaughtErrorMap] - | ValidationCaughtError; - -/** The error passed to the client-side `handleError` hook. */ -export type ClientCaughtError = Exclude; - -/** - * The server-side [`handleError`](https://svelte.dev/docs/kit/hooks#handleError) hook runs for every error thrown while responding to a request, except redirects. - * - * The `kind` property discriminates between _app_ errors (thrown with the [`error`](https://svelte.dev/docs/kit/errors#App-errors) helper), - * _framework_ errors (generated by SvelteKit itself, such as 404s), _validation_ errors (caused by invalid remote function arguments) - * and _unknown_ errors (thrown by your code, or code it calls). - * - * The hook returns an object matching `App.Error`, in which `status` and `message` are optional — return them only to - * override the defaults. Omitted properties are inherited from the caught error: the body passed to `error(...)` for app errors, - * the status and safe message for framework and validation errors, and `500`/`'Internal Error'` for unknown errors. Return nothing to - * keep the defaults entirely (if you augment `App.Error` with required properties, you must return those). - * - * Make sure that this function _never_ throws an error. - */ -export type HandleServerError = ( - input: CaughtError & { event: RequestEvent } -) => MaybePromise; - -/** - * The client-side [`handleError`](https://svelte.dev/docs/kit/hooks#handleError) hook runs for every error thrown while navigating, except redirects. - * Errors that were already transformed by the server-side hook are not passed to it a second time. - * - * The `kind` property discriminates between _app_ errors (thrown with the [`error`](https://svelte.dev/docs/kit/errors#App-errors) helper), - * _framework_ errors (generated by SvelteKit itself, such as 404s) and _unknown_ errors (thrown by your code, or code it calls). - * - * The hook returns an object matching `App.Error`, in which `status` and `message` are optional — return them only to - * override the defaults. Omitted properties are inherited from the caught error: the body passed to `error(...)` for app errors, - * the status and safe message for framework errors, and `500`/`'Internal Error'` for unknown errors. Return nothing to - * keep the defaults entirely (if you augment `App.Error` with required properties, you must return those). - * - * Make sure that this function _never_ throws an error. - */ -export type HandleClientError = ( - input: ClientCaughtError & { event: NavigationEvent } -) => MaybePromise; - -/** - * The [`handleFetch`](https://svelte.dev/docs/kit/hooks#handleFetch) hook allows you to modify (or replace) the result of an [`event.fetch`](https://svelte.dev/docs/kit/load#Making-fetch-requests) call that runs on the server (or during prerendering) inside an endpoint, `load`, `action`, `handle`, `handleError` or `reroute`. - */ -export type HandleFetch = (input: { - event: RequestEvent; - request: Request; - fetch: typeof fetch; -}) => MaybePromise; - -/** - * The [`init`](https://svelte.dev/docs/kit/hooks#init) will be invoked before the server responds to its first request - * @since 2.10.0 - */ -export type ServerInit = () => MaybePromise; - -/** - * The [`init`](https://svelte.dev/docs/kit/hooks#init) will be invoked once the app starts in the browser - * @since 2.10.0 - */ -export type ClientInit = () => MaybePromise; - -/** - * The [`reroute`](https://svelte.dev/docs/kit/hooks#reroute) hook allows you to modify the URL before it is used to determine which route to render. - * @since 2.3.0 - */ -export type Reroute = (event: { url: URL; fetch: typeof fetch }) => MaybePromise; - -/** - * The [`transport`](https://svelte.dev/docs/kit/hooks#transport) hook allows you to transport custom types across the server/client boundary. - * - * Each transporter has a pair of `encode` and `decode` functions. On the server, `encode` determines whether a value is an instance of the custom type and, if so, returns a non-falsy encoding of the value which can be an object or an array (or `false` otherwise). - * - * In the browser, `decode` turns the encoding back into an instance of the custom type. - * - * ```ts - * import type { Transport } from '@sveltejs/kit'; - * - * declare class MyCustomType { - * data: any - * } - * - * // hooks.js - * export const transport: Transport = { - * MyCustomType: { - * encode: (value) => value instanceof MyCustomType && [value.data], - * decode: ([data]) => new MyCustomType(data) - * } - * }; - * ``` - * @since 2.11.0 - */ -export type Transport = Record; - -/** - * A member of the [`transport`](https://svelte.dev/docs/kit/hooks#transport) hook. - */ -export interface Transporter< - T = any, - U = any /* minus falsy values, but we can't properly express that */ -> { - encode: (value: T) => false | U; - decode: (data: U) => T; -} - /** * The generic form of `PageLoad` and `LayoutLoad`. You should import those from `./$types` (see [generated types](https://svelte.dev/docs/kit/types#Generated-types)) * rather than using `Load` directly. @@ -1387,31 +1222,6 @@ export type RequestHandler< RouteId extends AppRouteId | null = AppRouteId | null > = (event: RequestEvent) => MaybePromise; -export interface ResolveOptions { - /** - * Applies custom transforms to HTML. If `done` is true, it's the final chunk. Chunks are not guaranteed to be well-formed HTML - * (they could include an element's opening tag but not its closing tag, for example) - * but they will always be split at sensible boundaries such as `%sveltekit.head%` or layout/page components. - * @param input the html chunk and the info if this is the last chunk - */ - transformPageChunk?: (input: { html: string; done: boolean }) => MaybePromise; - /** - * Determines which headers should be included in serialized responses when a `load` function loads a resource with `fetch`. - * By default, none will be included. - * @param name header name - * @param value header value - */ - filterSerializedResponseHeaders?: (name: string, value: string) => boolean; - /** - * Determines which files should be preloaded. Files are preloaded via `` tags added to the - * `` tag; if `output.linkHeaderPreload` is enabled, dynamically rendered pages use the - * [`Link` response header](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Link) instead. - * By default, `js` and `css` files will be preloaded. - * @param input the type of the file and its path - */ - preload?: (input: { type: 'font' | 'css' | 'js' | 'asset'; path: string }) => boolean; -} - export interface RouteDefinition { id: string; api: { diff --git a/packages/kit/src/runtime/app/internal/transport.js b/packages/kit/src/runtime/app/internal/transport.js index cd4d51de7cb8..430f44e3d961 100644 --- a/packages/kit/src/runtime/app/internal/transport.js +++ b/packages/kit/src/runtime/app/internal/transport.js @@ -1,4 +1,4 @@ -/** @import { Transport } from '@sveltejs/kit' */ +/** @import { Transport } from '@sveltejs/kit/hooks' */ import * as devalue from 'devalue'; import { DEV } from 'esm-env'; diff --git a/packages/kit/src/runtime/client/client.js b/packages/kit/src/runtime/client/client.js index 6d938c6846aa..0cfe4ca19244 100644 --- a/packages/kit/src/runtime/client/client.js +++ b/packages/kit/src/runtime/client/client.js @@ -2518,7 +2518,7 @@ export async function handle_error(error, event) { return error.body; } - /** @type {import('@sveltejs/kit').ClientCaughtError} */ + /** @type {import('@sveltejs/kit/hooks').ClientCaughtError} */ let caught; if (error instanceof HttpError) { diff --git a/packages/kit/src/runtime/server/errors.js b/packages/kit/src/runtime/server/errors.js index 8e1e7155b77c..377627a4add0 100644 --- a/packages/kit/src/runtime/server/errors.js +++ b/packages/kit/src/runtime/server/errors.js @@ -48,7 +48,7 @@ export function handle_error_and_jsonify(event, state, options, error) { return error.body; } - /** @type {import('@sveltejs/kit').CaughtError} */ + /** @type {import('@sveltejs/kit/hooks').CaughtError} */ let caught; if (error instanceof HttpError) { @@ -77,7 +77,7 @@ export function handle_error_and_jsonify(event, state, options, error) { /** * The hook returns only the properties it wants to override; anything it omits * (including by returning nothing at all) is inherited from the caught error. - * @param {Awaited>} body + * @param {Awaited>} body * @returns {App.Error} */ function merge(body) { diff --git a/packages/kit/src/runtime/server/page/load_data.js b/packages/kit/src/runtime/server/page/load_data.js index 2de3adbba403..f2efa89f1f4c 100644 --- a/packages/kit/src/runtime/server/page/load_data.js +++ b/packages/kit/src/runtime/server/page/load_data.js @@ -260,7 +260,7 @@ export async function load_data({ * @param {import('types').PrerenderOptions | undefined} prerendering * @param {import('./types.js').Fetched[]} fetched * @param {boolean} csr - * @param {Pick, 'filterSerializedResponseHeaders'>} resolve_opts + * @param {Pick, 'filterSerializedResponseHeaders'>} resolve_opts * @returns {typeof fetch} */ export function create_universal_fetch(event, prerendering, fetched, csr, resolve_opts) { diff --git a/packages/kit/src/runtime/server/respond.js b/packages/kit/src/runtime/server/respond.js index aab6dd0c8563..8121051104cb 100644 --- a/packages/kit/src/runtime/server/respond.js +++ b/packages/kit/src/runtime/server/respond.js @@ -576,7 +576,7 @@ export async function internal_respond(request, options, manifest, state) { /** * @param {import('@sveltejs/kit').RequestEvent} event * @param {PageNodes | undefined} page_nodes - * @param {import('@sveltejs/kit').ResolveOptions} [opts] + * @param {import('@sveltejs/kit/hooks').ResolveOptions} [opts] */ async function resolve(event, page_nodes, opts) { try { diff --git a/packages/kit/src/types/internal.d.ts b/packages/kit/src/types/internal.d.ts index f4d8857d9af5..66c2308b9610 100644 --- a/packages/kit/src/types/internal.d.ts +++ b/packages/kit/src/types/internal.d.ts @@ -2,26 +2,28 @@ import { Component } from 'svelte'; import { Config, ServerLoad, - Handle, - HandleServerError, KitConfig, Load, RequestHandler, - ResolveOptions, Server, ServerInitOptions, - HandleFetch, Actions, - HandleClientError, - Reroute, RequestEvent, SSRManifest, - Emulator, - ServerInit, - ClientInit, - Transport + Emulator } from '@sveltejs/kit'; import { RemoteFormIssue, RemoteQuery, RemoteLiveQuery } from '$app/server'; +import { + ClientInit, + Handle, + HandleClientError, + HandleFetch, + HandleServerError, + Reroute, + ResolveOptions, + ServerInit, + Transport +} from '@sveltejs/kit/hooks'; import { HttpMethod, MaybePromise, diff --git a/packages/kit/test/apps/async/src/hooks.client.js b/packages/kit/test/apps/async/src/hooks.client.js index 2207cfef3ac8..598e971f83fd 100644 --- a/packages/kit/test/apps/async/src/hooks.client.js +++ b/packages/kit/test/apps/async/src/hooks.client.js @@ -1,6 +1,6 @@ import { isRedirect } from '@sveltejs/kit'; -/** @type {import('@sveltejs/kit').HandleClientError} */ +/** @type {import('@sveltejs/kit/hooks').HandleClientError} */ export const handleError = (input) => { // helps us catch sveltekit redirects thrown in component code if (isRedirect(input.error)) { diff --git a/packages/kit/test/apps/async/src/hooks.js b/packages/kit/test/apps/async/src/hooks.js index f06506d054be..96240b3cc14f 100644 --- a/packages/kit/test/apps/async/src/hooks.js +++ b/packages/kit/test/apps/async/src/hooks.js @@ -1,6 +1,6 @@ import { Foo } from '#lib'; -/** @type {import("@sveltejs/kit").Transport} */ +/** @type {import("@sveltejs/kit/hooks").Transport} */ export const transport = { Foo: { encode: (value) => value instanceof Foo && [value.message], diff --git a/packages/kit/test/apps/async/src/hooks.server.js b/packages/kit/test/apps/async/src/hooks.server.js index 0f0f50009e8f..0c246c2eba65 100644 --- a/packages/kit/test/apps/async/src/hooks.server.js +++ b/packages/kit/test/apps/async/src/hooks.server.js @@ -1,7 +1,7 @@ import { isRedirect } from '@sveltejs/kit'; import { do_something } from './routes/remote/server-action/action.remote'; -/** @type {import('@sveltejs/kit').Handle} */ +/** @type {import('@sveltejs/kit/hooks').Handle} */ export async function handle({ event, resolve }) { // Assign each browser session a unique id so that the in-memory `count` // state in `routes/remote/query-command.remote.js` is isolated per test. @@ -38,7 +38,7 @@ export async function handle({ event, resolve }) { return resolve(event); } -/** @type {import('@sveltejs/kit').HandleServerError} */ +/** @type {import('@sveltejs/kit/hooks').HandleServerError} */ export const handleError = (input) => { // helps us catch sveltekit redirects thrown in component code if (isRedirect(input.error)) { diff --git a/packages/kit/test/apps/basics/src/hooks.client.js b/packages/kit/test/apps/basics/src/hooks.client.js index d9fc318f4a6c..3e55518bd13f 100644 --- a/packages/kit/test/apps/basics/src/hooks.client.js +++ b/packages/kit/test/apps/basics/src/hooks.client.js @@ -2,7 +2,7 @@ import { PUBLIC_DYNAMIC } from '$app/env/public'; window.PUBLIC_DYNAMIC = PUBLIC_DYNAMIC; -/** @type{import("@sveltejs/kit").HandleClientError} */ +/** @type{import("@sveltejs/kit/hooks").HandleClientError} */ export function handleError(input) { const { kind } = input; diff --git a/packages/kit/test/apps/basics/src/hooks.js b/packages/kit/test/apps/basics/src/hooks.js index df627ced2bdb..edc98555edac 100644 --- a/packages/kit/test/apps/basics/src/hooks.js +++ b/packages/kit/test/apps/basics/src/hooks.js @@ -9,7 +9,7 @@ const mapping = { '/reroute/invalidate/a': '/reroute/invalidate' }; -/** @type {import("@sveltejs/kit").Reroute} */ +/** @type {import("@sveltejs/kit/hooks").Reroute} */ export const reroute = ({ url, fetch }) => { //Try to rewrite the external url used in /reroute/external to the homepage - This should not work if (browser && url.href.startsWith('https://expired.badssl.com')) { @@ -45,7 +45,7 @@ export const reroute = ({ url, fetch }) => { } }; -/** @type {import("@sveltejs/kit").Transport} */ +/** @type {import("@sveltejs/kit/hooks").Transport} */ export const transport = { Foo: { encode: (value) => value instanceof Foo && [value.message], diff --git a/packages/kit/test/apps/basics/src/hooks.server.js b/packages/kit/test/apps/basics/src/hooks.server.js index cce84f3a929b..f3c6bc6619d0 100644 --- a/packages/kit/test/apps/basics/src/hooks.server.js +++ b/packages/kit/test/apps/basics/src/hooks.server.js @@ -28,7 +28,7 @@ export function error_to_pojo(error) { return { name, message, stack, ...custom }; } -/** @type {import('@sveltejs/kit').HandleServerError} */ +/** @type {import('@sveltejs/kit/hooks').HandleServerError} */ export const handleError = ({ event, kind, error }) => { // TODO we do this because there's no other way (that i'm aware of) // to communicate errors back to the test suite. even if we could @@ -215,7 +215,7 @@ export const handle = sequence( } ); -/** @type {import('@sveltejs/kit').HandleFetch} */ +/** @type {import('@sveltejs/kit/hooks').HandleFetch} */ export async function handleFetch({ request, fetch }) { if (request.url.endsWith('/server-fetch-request.json')) { request = new Request( diff --git a/packages/kit/test/apps/dev-only/src/hooks.client.js b/packages/kit/test/apps/dev-only/src/hooks.client.js index 676f8a3f09db..81d674beb231 100644 --- a/packages/kit/test/apps/dev-only/src/hooks.client.js +++ b/packages/kit/test/apps/dev-only/src/hooks.client.js @@ -2,7 +2,7 @@ import cjs from 'e2e-test-dep-hooks-client'; cjs.cjs(); -/** @type {import("@sveltejs/kit").HandleClientError} */ +/** @type {import("@sveltejs/kit/hooks").HandleClientError} */ export function handleError({ kind, error }) { if (kind !== 'unknown') return error; return { message: /**@type{any}*/ (error).message }; diff --git a/packages/kit/test/apps/dev-only/src/hooks.js b/packages/kit/test/apps/dev-only/src/hooks.js index e54da5469b85..8107466a0394 100644 --- a/packages/kit/test/apps/dev-only/src/hooks.js +++ b/packages/kit/test/apps/dev-only/src/hooks.js @@ -2,7 +2,7 @@ import cjs from 'e2e-test-dep-hooks'; cjs.cjs(); -/** @type {import("@sveltejs/kit").Reroute} */ +/** @type {import("@sveltejs/kit/hooks").Reroute} */ export function reroute({ url }) { return url.pathname; } diff --git a/packages/kit/test/apps/dev-only/src/hooks.server.js b/packages/kit/test/apps/dev-only/src/hooks.server.js index 391927e8cc4d..5a19231aefc5 100644 --- a/packages/kit/test/apps/dev-only/src/hooks.server.js +++ b/packages/kit/test/apps/dev-only/src/hooks.server.js @@ -1,4 +1,4 @@ -/** @type {import("@sveltejs/kit").HandleServerError} */ +/** @type {import("@sveltejs/kit/hooks").HandleServerError} */ export function handleError({ kind, error }) { if (kind !== 'unknown') return error; return { message: /**@type{any}*/ (error).message }; diff --git a/packages/kit/test/apps/hash-based-routing/src/hooks.js b/packages/kit/test/apps/hash-based-routing/src/hooks.js index 2bf240631398..2a3185484ddf 100644 --- a/packages/kit/test/apps/hash-based-routing/src/hooks.js +++ b/packages/kit/test/apps/hash-based-routing/src/hooks.js @@ -1,4 +1,4 @@ -/** @type {import('@sveltejs/kit').Reroute} */ +/** @type {import('@sveltejs/kit/hooks').Reroute} */ export function reroute({ url }) { if (url.hash === '#/reroute-a') { // works with leading hash... diff --git a/packages/kit/test/apps/options-2/src/hooks.js b/packages/kit/test/apps/options-2/src/hooks.js index f06506d054be..96240b3cc14f 100644 --- a/packages/kit/test/apps/options-2/src/hooks.js +++ b/packages/kit/test/apps/options-2/src/hooks.js @@ -1,6 +1,6 @@ import { Foo } from '#lib'; -/** @type {import("@sveltejs/kit").Transport} */ +/** @type {import("@sveltejs/kit/hooks").Transport} */ export const transport = { Foo: { encode: (value) => value instanceof Foo && [value.message], diff --git a/packages/kit/test/apps/options-2/src/hooks.server.js b/packages/kit/test/apps/options-2/src/hooks.server.js index 6870d6835477..dcdd53bddc30 100644 --- a/packages/kit/test/apps/options-2/src/hooks.server.js +++ b/packages/kit/test/apps/options-2/src/hooks.server.js @@ -1,4 +1,4 @@ -/** @type {import("@sveltejs/kit").Handle} */ +/** @type {import("@sveltejs/kit/hooks").Handle} */ export async function handle({ event, resolve }) { // isolates the in-memory count in count.remote.js per browser session if (!event.cookies.get('session')) { diff --git a/packages/kit/test/apps/options-3/src/hooks.js b/packages/kit/test/apps/options-3/src/hooks.js index f06506d054be..96240b3cc14f 100644 --- a/packages/kit/test/apps/options-3/src/hooks.js +++ b/packages/kit/test/apps/options-3/src/hooks.js @@ -1,6 +1,6 @@ import { Foo } from '#lib'; -/** @type {import("@sveltejs/kit").Transport} */ +/** @type {import("@sveltejs/kit/hooks").Transport} */ export const transport = { Foo: { encode: (value) => value instanceof Foo && [value.message], diff --git a/packages/kit/test/apps/options/source/hooks.server.js b/packages/kit/test/apps/options/source/hooks.server.js index ced823b76a68..c20df75940b8 100644 --- a/packages/kit/test/apps/options/source/hooks.server.js +++ b/packages/kit/test/apps/options/source/hooks.server.js @@ -4,7 +4,7 @@ import { building } from '$app/env'; // eslint-disable-next-line @typescript-eslint/no-unused-vars import { TOP_SECRET_SHH_PLS } from '$app/env/private'; -/** @type {import('@sveltejs/kit').Handle} */ +/** @type {import('@sveltejs/kit/hooks').Handle} */ export function handle({ event, resolve }) { return resolve(event, { // this allows us to check that is still added diff --git a/packages/kit/test/prerendering/basics/src/hooks.server.js b/packages/kit/test/prerendering/basics/src/hooks.server.js index 5b77d3906229..6e9cf5d0de57 100644 --- a/packages/kit/test/prerendering/basics/src/hooks.server.js +++ b/packages/kit/test/prerendering/basics/src/hooks.server.js @@ -2,7 +2,7 @@ import { building } from '$app/env'; const initial_building = building; -/** @type {import('@sveltejs/kit').Handle} */ +/** @type {import('@sveltejs/kit/hooks').Handle} */ export const handle = async ({ event, resolve }) => { if (event.url.pathname === '/prerendering-true' && building) { return await resolve(event, { diff --git a/packages/kit/test/types/app-error-enhanced/error.test.ts b/packages/kit/test/types/app-error-enhanced/error.test.ts index 9976ee1234b0..a0f9196effae 100644 --- a/packages/kit/test/types/app-error-enhanced/error.test.ts +++ b/packages/kit/test/types/app-error-enhanced/error.test.ts @@ -1,4 +1,5 @@ -import { error, type HandleClientError, type HandleServerError } from '@sveltejs/kit'; +import { error } from '@sveltejs/kit'; +import { type HandleClientError, type HandleServerError } from '@sveltejs/kit/hooks'; const app_error: App.Error = { status: 500, message: 'Unexpected error', additional: true }; diff --git a/packages/kit/test/types/error.test.ts b/packages/kit/test/types/error.test.ts index 8f8821c5af0b..a083855365d3 100644 --- a/packages/kit/test/types/error.test.ts +++ b/packages/kit/test/types/error.test.ts @@ -1,4 +1,5 @@ -import { error, type HandleClientError, type HandleServerError } from '@sveltejs/kit'; +import { error } from '@sveltejs/kit'; +import { type HandleClientError, type HandleServerError } from '@sveltejs/kit/hooks'; import type { StandardSchemaV1 } from '@standard-schema/spec'; declare global { diff --git a/packages/kit/tsconfig.json b/packages/kit/tsconfig.json index 0dca65d44e8b..3e3eadb21bd0 100644 --- a/packages/kit/tsconfig.json +++ b/packages/kit/tsconfig.json @@ -9,6 +9,7 @@ "paths": { "@sveltejs/kit": ["./src/exports/public.d.ts"], "@sveltejs/kit/env": ["./src/exports/env/public.d.ts"], + "@sveltejs/kit/hooks": ["./src/exports/hooks/public.d.ts"], "@sveltejs/kit/params": ["./src/exports/params/public.d.ts"], "@sveltejs/kit/vite": ["./src/exports/vite/index.js"], "@sveltejs/kit/node": ["./src/exports/node/index.js"], diff --git a/packages/kit/types/index.d.ts b/packages/kit/types/index.d.ts index f0894c8c7a9b..ac3a6ed1dc86 100644 --- a/packages/kit/types/index.d.ts +++ b/packages/kit/types/index.d.ts @@ -3,30 +3,12 @@ declare module '@sveltejs/kit' { import type { SvelteConfig } from '@sveltejs/vite-plugin-svelte'; - import type { StandardSchemaV1 } from '@standard-schema/spec'; import type { Plugin } from 'vite'; import type { RouteId as AppRouteId, LayoutParams as AppLayoutParams } from '$app/types'; + import type { StandardSchemaV1 } from '@standard-schema/spec'; // @ts-ignore this is an optional peer dependency so could be missing. Written like this so dts-buddy preserves the ts-ignore type Span = import('@opentelemetry/api').Span; - type AppErrorWithOptionalDefaults = Omit & { - status?: App.Error['status']; - message?: App.Error['message']; - }; - - /** - * `void` is only a valid `handleError` return when `App.Error` adds no required properties - * beyond `status` and `message` — both of which are optional in the return, since they default - * to those of the caught error. If `App.Error` is augmented with required properties, the hook - * must return them, so returning nothing becomes a type error. - */ - type VoidIfNoRequiredAppErrorProperties = { - status: number; - message: string; - } extends App.Error - ? void - : never; - /** * [Adapters](https://svelte.dev/docs/kit/adapters) are responsible for taking the production build and turning it into something that can be deployed to a platform of your choosing. */ @@ -927,152 +909,6 @@ declare module '@sveltejs/kit' { }; } - /** - * The [`handle`](https://svelte.dev/docs/kit/hooks#handle) hook runs every time the SvelteKit server receives a [request](https://svelte.dev/docs/kit/web-standards#Fetch-APIs-Request) and - * determines the [response](https://svelte.dev/docs/kit/web-standards#Fetch-APIs-Response). - * It receives an `event` object representing the request and a function called `resolve`, which renders the route and generates a `Response`. - * This allows you to modify response headers or bodies, or bypass SvelteKit entirely (for implementing routes programmatically, for example). - */ - export type Handle = (input: { - event: RequestEvent; - resolve: (event: RequestEvent, opts?: ResolveOptions) => Promise; - }) => MaybePromise; - - type CaughtErrorMap = { - app: App.Error; - framework: { status: number; message: string }; - unknown: unknown; - }; - - type ValidationCaughtError = { - kind: 'validation'; - error: { status: number; message: string }; - issues: Issue[]; - }; - - /** - * The error passed to the [`handleError`](https://svelte.dev/docs/kit/hooks#handleError) hooks. - * Use the `kind` discriminant to distinguish errors from your app (thrown with the - * [`error`](https://svelte.dev/docs/kit/errors#App-errors) helper), errors generated by - * SvelteKit itself (such as 404s), validation errors, and unknown errors (thrown by your code, - * or code it calls). - */ - export type CaughtError = - | { - [Kind in keyof CaughtErrorMap]: { - /** Identifies the category and origin of the error */ - kind: Kind; - /** The caught error. Its type depends on `kind` */ - error: CaughtErrorMap[Kind]; - /** Only present for validation errors */ - issues?: undefined; - }; - }[keyof CaughtErrorMap] - | ValidationCaughtError; - - /** The error passed to the client-side `handleError` hook. */ - export type ClientCaughtError = Exclude; - - /** - * The server-side [`handleError`](https://svelte.dev/docs/kit/hooks#handleError) hook runs for every error thrown while responding to a request, except redirects. - * - * The `kind` property discriminates between _app_ errors (thrown with the [`error`](https://svelte.dev/docs/kit/errors#App-errors) helper), - * _framework_ errors (generated by SvelteKit itself, such as 404s), _validation_ errors (caused by invalid remote function arguments) - * and _unknown_ errors (thrown by your code, or code it calls). - * - * The hook returns an object matching `App.Error`, in which `status` and `message` are optional — return them only to - * override the defaults. Omitted properties are inherited from the caught error: the body passed to `error(...)` for app errors, - * the status and safe message for framework and validation errors, and `500`/`'Internal Error'` for unknown errors. Return nothing to - * keep the defaults entirely (if you augment `App.Error` with required properties, you must return those). - * - * Make sure that this function _never_ throws an error. - */ - export type HandleServerError = ( - input: CaughtError & { event: RequestEvent } - ) => MaybePromise; - - /** - * The client-side [`handleError`](https://svelte.dev/docs/kit/hooks#handleError) hook runs for every error thrown while navigating, except redirects. - * Errors that were already transformed by the server-side hook are not passed to it a second time. - * - * The `kind` property discriminates between _app_ errors (thrown with the [`error`](https://svelte.dev/docs/kit/errors#App-errors) helper), - * _framework_ errors (generated by SvelteKit itself, such as 404s) and _unknown_ errors (thrown by your code, or code it calls). - * - * The hook returns an object matching `App.Error`, in which `status` and `message` are optional — return them only to - * override the defaults. Omitted properties are inherited from the caught error: the body passed to `error(...)` for app errors, - * the status and safe message for framework errors, and `500`/`'Internal Error'` for unknown errors. Return nothing to - * keep the defaults entirely (if you augment `App.Error` with required properties, you must return those). - * - * Make sure that this function _never_ throws an error. - */ - export type HandleClientError = ( - input: ClientCaughtError & { event: NavigationEvent } - ) => MaybePromise; - - /** - * The [`handleFetch`](https://svelte.dev/docs/kit/hooks#handleFetch) hook allows you to modify (or replace) the result of an [`event.fetch`](https://svelte.dev/docs/kit/load#Making-fetch-requests) call that runs on the server (or during prerendering) inside an endpoint, `load`, `action`, `handle`, `handleError` or `reroute`. - */ - export type HandleFetch = (input: { - event: RequestEvent; - request: Request; - fetch: typeof fetch; - }) => MaybePromise; - - /** - * The [`init`](https://svelte.dev/docs/kit/hooks#init) will be invoked before the server responds to its first request - * @since 2.10.0 - */ - export type ServerInit = () => MaybePromise; - - /** - * The [`init`](https://svelte.dev/docs/kit/hooks#init) will be invoked once the app starts in the browser - * @since 2.10.0 - */ - export type ClientInit = () => MaybePromise; - - /** - * The [`reroute`](https://svelte.dev/docs/kit/hooks#reroute) hook allows you to modify the URL before it is used to determine which route to render. - * @since 2.3.0 - */ - export type Reroute = (event: { url: URL; fetch: typeof fetch }) => MaybePromise; - - /** - * The [`transport`](https://svelte.dev/docs/kit/hooks#transport) hook allows you to transport custom types across the server/client boundary. - * - * Each transporter has a pair of `encode` and `decode` functions. On the server, `encode` determines whether a value is an instance of the custom type and, if so, returns a non-falsy encoding of the value which can be an object or an array (or `false` otherwise). - * - * In the browser, `decode` turns the encoding back into an instance of the custom type. - * - * ```ts - * import type { Transport } from '@sveltejs/kit'; - * - * declare class MyCustomType { - * data: any - * } - * - * // hooks.js - * export const transport: Transport = { - * MyCustomType: { - * encode: (value) => value instanceof MyCustomType && [value.data], - * decode: ([data]) => new MyCustomType(data) - * } - * }; - * ``` - * @since 2.11.0 - */ - export type Transport = Record; - - /** - * A member of the [`transport`](https://svelte.dev/docs/kit/hooks#transport) hook. - */ - export interface Transporter< - T = any, - U = any /* minus falsy values, but we can't properly express that */ - > { - encode: (value: T) => false | U; - decode: (data: U) => T; - } - /** * The generic form of `PageLoad` and `LayoutLoad`. You should import those from `./$types` (see [generated types](https://svelte.dev/docs/kit/types#Generated-types)) * rather than using `Load` directly. @@ -1364,31 +1200,6 @@ declare module '@sveltejs/kit' { RouteId extends AppRouteId | null = AppRouteId | null > = (event: RequestEvent) => MaybePromise; - export interface ResolveOptions { - /** - * Applies custom transforms to HTML. If `done` is true, it's the final chunk. Chunks are not guaranteed to be well-formed HTML - * (they could include an element's opening tag but not its closing tag, for example) - * but they will always be split at sensible boundaries such as `%sveltekit.head%` or layout/page components. - * @param input the html chunk and the info if this is the last chunk - */ - transformPageChunk?: (input: { html: string; done: boolean }) => MaybePromise; - /** - * Determines which headers should be included in serialized responses when a `load` function loads a resource with `fetch`. - * By default, none will be included. - * @param name header name - * @param value header value - */ - filterSerializedResponseHeaders?: (name: string, value: string) => boolean; - /** - * Determines which files should be preloaded. Files are preloaded via `` tags added to the - * `` tag; if `output.linkHeaderPreload` is enabled, dynamically rendered pages use the - * [`Link` response header](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Link) instead. - * By default, `js` and `css` files will be preloaded. - * @param input the type of the file and its path - */ - preload?: (input: { type: 'font' | 'css' | 'js' | 'asset'; path: string }) => boolean; - } - export interface RouteDefinition { id: string; api: { @@ -2085,7 +1896,197 @@ declare module '@sveltejs/kit/env' { } declare module '@sveltejs/kit/hooks' { - import type { Handle } from '@sveltejs/kit'; + import type { StandardSchemaV1 } from '@standard-schema/spec'; + import type { NavigationEvent, RequestEvent } from '@sveltejs/kit'; + /** + * The [`handle`](https://svelte.dev/docs/kit/hooks#handle) hook runs every time the SvelteKit server receives a [request](https://svelte.dev/docs/kit/web-standards#Fetch-APIs-Request) and + * determines the [response](https://svelte.dev/docs/kit/web-standards#Fetch-APIs-Response). + * It receives an `event` object representing the request and a function called `resolve`, which renders the route and generates a `Response`. + * This allows you to modify response headers or bodies, or bypass SvelteKit entirely (for implementing routes programmatically, for example). + */ + export type Handle = (input: { + event: RequestEvent; + resolve: (event: RequestEvent, opts?: ResolveOptions) => Promise; + }) => MaybePromise; + + type CaughtErrorMap = { + app: App.Error; + framework: { status: number; message: string }; + unknown: unknown; + }; + + type ValidationCaughtError = { + kind: 'validation'; + error: { status: number; message: string }; + issues: Issue[]; + }; + + /** + * The error passed to the [`handleError`](https://svelte.dev/docs/kit/hooks#handleError) hooks. + * Use the `kind` discriminant to distinguish errors from your app (thrown with the + * [`error`](https://svelte.dev/docs/kit/errors#App-errors) helper), errors generated by + * SvelteKit itself (such as 404s), validation errors, and unknown errors (thrown by your code, + * or code it calls). + */ + export type CaughtError = + | { + [Kind in keyof CaughtErrorMap]: { + /** Identifies the category and origin of the error */ + kind: Kind; + /** The caught error. Its type depends on `kind` */ + error: CaughtErrorMap[Kind]; + /** Only present for validation errors */ + issues?: undefined; + }; + }[keyof CaughtErrorMap] + | ValidationCaughtError; + + /** The error passed to the client-side `handleError` hook. */ + export type ClientCaughtError = Exclude; + + /** + * The server-side [`handleError`](https://svelte.dev/docs/kit/hooks#handleError) hook runs for every error thrown while responding to a request, except redirects. + * + * The `kind` property discriminates between _app_ errors (thrown with the [`error`](https://svelte.dev/docs/kit/errors#App-errors) helper), + * _framework_ errors (generated by SvelteKit itself, such as 404s), _validation_ errors (caused by invalid remote function arguments) + * and _unknown_ errors (thrown by your code, or code it calls). + * + * The hook returns an object matching `App.Error`, in which `status` and `message` are optional — return them only to + * override the defaults. Omitted properties are inherited from the caught error: the body passed to `error(...)` for app errors, + * the status and safe message for framework and validation errors, and `500`/`'Internal Error'` for unknown errors. Return nothing to + * keep the defaults entirely (if you augment `App.Error` with required properties, you must return those). + * + * Make sure that this function _never_ throws an error. + */ + export type HandleServerError = ( + input: CaughtError & { event: RequestEvent } + ) => MaybePromise; + + /** + * The client-side [`handleError`](https://svelte.dev/docs/kit/hooks#handleError) hook runs for every error thrown while navigating, except redirects. + * Errors that were already transformed by the server-side hook are not passed to it a second time. + * + * The `kind` property discriminates between _app_ errors (thrown with the [`error`](https://svelte.dev/docs/kit/errors#App-errors) helper), + * _framework_ errors (generated by SvelteKit itself, such as 404s) and _unknown_ errors (thrown by your code, or code it calls). + * + * The hook returns an object matching `App.Error`, in which `status` and `message` are optional — return them only to + * override the defaults. Omitted properties are inherited from the caught error: the body passed to `error(...)` for app errors, + * the status and safe message for framework errors, and `500`/`'Internal Error'` for unknown errors. Return nothing to + * keep the defaults entirely (if you augment `App.Error` with required properties, you must return those). + * + * Make sure that this function _never_ throws an error. + */ + export type HandleClientError = ( + input: ClientCaughtError & { event: NavigationEvent } + ) => MaybePromise; + + /** + * The [`handleFetch`](https://svelte.dev/docs/kit/hooks#handleFetch) hook allows you to modify (or replace) the result of an [`event.fetch`](https://svelte.dev/docs/kit/load#Making-fetch-requests) call that runs on the server (or during prerendering) inside an endpoint, `load`, `action`, `handle`, `handleError` or `reroute`. + */ + export type HandleFetch = (input: { + event: RequestEvent; + request: Request; + fetch: typeof fetch; + }) => MaybePromise; + + /** + * The [`init`](https://svelte.dev/docs/kit/hooks#init) will be invoked before the server responds to its first request + * @since 2.10.0 + */ + export type ServerInit = () => MaybePromise; + + /** + * The [`init`](https://svelte.dev/docs/kit/hooks#init) will be invoked once the app starts in the browser + * @since 2.10.0 + */ + export type ClientInit = () => MaybePromise; + + /** + * The [`reroute`](https://svelte.dev/docs/kit/hooks#reroute) hook allows you to modify the URL before it is used to determine which route to render. + * @since 2.3.0 + */ + export type Reroute = (event: { url: URL; fetch: typeof fetch }) => MaybePromise; + + /** + * The [`transport`](https://svelte.dev/docs/kit/hooks#transport) hook allows you to transport custom types across the server/client boundary. + * + * Each transporter has a pair of `encode` and `decode` functions. On the server, `encode` determines whether a value is an instance of the custom type and, if so, returns a non-falsy encoding of the value which can be an object or an array (or `false` otherwise). + * + * In the browser, `decode` turns the encoding back into an instance of the custom type. + * + * ```ts + * import type { Transport } from '@sveltejs/kit/hooks'; + * + * declare class MyCustomType { + * data: any + * } + * + * // hooks.js + * export const transport: Transport = { + * MyCustomType: { + * encode: (value) => value instanceof MyCustomType && [value.data], + * decode: ([data]) => new MyCustomType(data) + * } + * }; + * ``` + * @since 2.11.0 + */ + export type Transport = Record; + + /** + * A member of the [`transport`](https://svelte.dev/docs/kit/hooks#transport) hook. + */ + export interface Transporter< + T = any, + U = any /* minus falsy values, but we can't properly express that */ + > { + encode: (value: T) => false | U; + decode: (data: U) => T; + } + + export interface ResolveOptions { + /** + * Applies custom transforms to HTML. If `done` is true, it's the final chunk. Chunks are not guaranteed to be well-formed HTML + * (they could include an element's opening tag but not its closing tag, for example) + * but they will always be split at sensible boundaries such as `%sveltekit.head%` or layout/page components. + * @param input the html chunk and the info if this is the last chunk + */ + transformPageChunk?: (input: { html: string; done: boolean }) => MaybePromise; + /** + * Determines which headers should be included in serialized responses when a `load` function loads a resource with `fetch`. + * By default, none will be included. + * @param name header name + * @param value header value + */ + filterSerializedResponseHeaders?: (name: string, value: string) => boolean; + /** + * Determines which files should be preloaded. Files are preloaded via `` tags added to the + * `` tag; if `output.linkHeaderPreload` is enabled, dynamically rendered pages use the + * [`Link` response header](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Link) instead. + * By default, `js` and `css` files will be preloaded. + * @param input the type of the file and its path + */ + preload?: (input: { type: 'font' | 'css' | 'js' | 'asset'; path: string }) => boolean; + } + + type AppErrorWithOptionalDefaults = Omit & { + status?: App.Error['status']; + message?: App.Error['message']; + }; + + /** + * `void` is only a valid `handleError` return when `App.Error` adds no required properties + * beyond `status` and `message` — both of which are optional in the return, since they default + * to those of the caught error. If `App.Error` is augmented with required properties, the hook + * must return them, so returning nothing becomes a type error. + */ + type VoidIfNoRequiredAppErrorProperties = { + status: number; + message: string; + } extends App.Error + ? void + : never; + type MaybePromise = T | Promise; /** * A helper function for sequencing multiple `handle` calls in a middleware-like manner. * The behavior for the `handle` options is as follows: @@ -2097,7 +2098,7 @@ declare module '@sveltejs/kit/hooks' { * /// file: src/hooks.server.js * import { sequence } from '@sveltejs/kit/hooks'; * - * /// type: import('@sveltejs/kit').Handle + * /// type: import('@sveltejs/kit/hooks').Handle * async function first({ event, resolve }) { * console.log('first pre-processing'); * const result = await resolve(event, { @@ -2116,7 +2117,7 @@ declare module '@sveltejs/kit/hooks' { * return result; * } * - * /// type: import('@sveltejs/kit').Handle + * /// type: import('@sveltejs/kit/hooks').Handle * async function second({ event, resolve }) { * console.log('second pre-processing'); * const result = await resolve(event, { From 1611c617a1ec1b32e10627c2815fb7e6673f3157 Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Tue, 11 Aug 2026 16:54:22 -0400 Subject: [PATCH 507/545] feat: better response logging (#16744) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit small quality of life improvement — response logging is a bit quieter, especially when prerendering lots of stuff (as we do on svelte.dev for example) --------- Co-authored-by: vercel[bot] <35613825+vercel[bot]@users.noreply.github.com> Co-authored-by: Vercel Co-authored-by: Tee Ming Co-authored-by: Simon H <5968653+dummdidumm@users.noreply.github.com> --- .changeset/crisp-steaks-jump.md | 6 ++ packages/kit/src/core/postbuild/prerender.js | 69 ++++++++++++++++--- packages/kit/src/core/sync/write_server.js | 4 +- packages/kit/src/exports/vite/dev/index.js | 4 +- packages/kit/src/exports/vite/index.js | 3 +- packages/kit/src/exports/vite/utils.js | 16 ----- packages/kit/src/runtime/server/internal.js | 39 +++++++++++ .../src/runtime/server/remote-functions.js | 19 +++-- packages/kit/src/types/internal.d.ts | 1 + 9 files changed, 128 insertions(+), 33 deletions(-) create mode 100644 .changeset/crisp-steaks-jump.md diff --git a/.changeset/crisp-steaks-jump.md b/.changeset/crisp-steaks-jump.md new file mode 100644 index 000000000000..1607fdfa13b4 --- /dev/null +++ b/.changeset/crisp-steaks-jump.md @@ -0,0 +1,6 @@ +--- +"@sveltejs/kit": minor +--- + +feat: better response logging + \ No newline at end of file diff --git a/packages/kit/src/core/postbuild/prerender.js b/packages/kit/src/core/postbuild/prerender.js index da1702941ac5..48aeec56b9cb 100644 --- a/packages/kit/src/core/postbuild/prerender.js +++ b/packages/kit/src/core/postbuild/prerender.js @@ -1,5 +1,7 @@ +import process from 'node:process'; import { existsSync, mkdirSync, readFileSync, statSync, writeFileSync } from 'node:fs'; import { dirname, join } from 'node:path'; +import { clearLine, moveCursor } from 'node:readline'; import { pathToFileURL } from 'node:url'; import { walk } from '../../utils/filesystem.js'; import { posixify } from '../../utils/os.js'; @@ -16,7 +18,6 @@ import * as devalue from 'devalue'; import { createReadableStream } from '@sveltejs/kit/node'; import generate_fallback from './fallback.js'; import { stringify_remote_arg } from '../../runtime/shared.js'; -import { log_response } from '../../exports/vite/utils.js'; import { matches_content_type } from '../../utils/http.js'; export default forked(import.meta.url, prerender); @@ -36,19 +37,30 @@ const SPECIAL_HASHLINKS = new Set(['', 'top']); * verbose: boolean; * env: Record; * vite_config_file: string | undefined; + * is_tty: boolean | undefined; * }} opts */ -async function prerender({ hash, out, manifest_path, metadata, verbose, env, vite_config_file }) { +async function prerender({ + hash, + out, + manifest_path, + metadata, + verbose, + env, + vite_config_file, + is_tty +}) { /** @type {import('@sveltejs/kit').SSRManifest} */ const manifest = (await import(pathToFileURL(manifest_path).href)).manifest; /** @type {import('types').ServerInternalModule} */ - const internal = await import(pathToFileURL(`${out}/server/internal.js`).href); + const { set_building, set_prerendering, set_manifest, set_read_implementation, log_response } = + await import(pathToFileURL(`${out}/server/internal.js`).href); // configure `import { building } from `$app/env` — // essential we do this before analysing the code - internal.set_building(); - internal.set_prerendering(); + set_building(); + set_prerendering(); // `set_env` and `Server` live in modules that import the user's `src/env` config. We import them // *after* `set_building()` so that `building`-dependent expressions resolve correctly @@ -263,6 +275,45 @@ async function prerender({ hash, out, manifest_path, metadata, verbose, env, vit /** @type {Map>} */ const remote_responses = new Map(); + /** @type {(path: string) => void} */ + let progress_line = noop; + + if (is_tty) { + // Where possible, provide progress feedback by showing the path we're + // currently requesting, then clearing the line once the response comes in. + // This avoids the wall of text that happens when you prerender + // many pages and log each response + let current = false; + const stdout_write = process.stdout.write; + const stderr_write = process.stderr.write; + + process.stdout.write = new Proxy(stdout_write, { + apply(target, this_arg, args) { + current = false; + return Reflect.apply(target, this_arg, args); + } + }); + + process.stderr.write = new Proxy(stderr_write, { + apply(target, this_arg, args) { + current = false; + return Reflect.apply(target, this_arg, args); + } + }); + + progress_line = (path) => { + // If app code writes to stdout or stderr, don't move the cursor to clear + // the previous progress log, because that will corrupt things + if (current) { + moveCursor(process.stdout, 0, -1); + clearLine(process.stdout, 0); + } + + stdout_write.call(process.stdout, `rendering ${path}...\n`); + current = true; + }; + } + /** @type {Set} */ const resolved_route_ids = new Set(); @@ -303,6 +354,8 @@ async function prerender({ hash, out, manifest_path, metadata, verbose, env, vit /** @type {Map} */ const dependencies = new Map(); + progress_line(decoded); + const request = new Request(prerender_origin + encoded); const response = await server.respond(request, { @@ -344,7 +397,7 @@ async function prerender({ hash, out, manifest_path, metadata, verbose, env, vit }); } - if (response.status !== 204) { + if (response.status >= 400) { log_response(response.status, request); } @@ -574,8 +627,8 @@ async function prerender({ hash, out, manifest_path, metadata, verbose, env, vit // the user's remote function modules may reference `read` or the `manifest` at the top-level // so we need to set them before evaluating those modules to avoid potential runtime errors - internal.set_manifest(manifest); - internal.set_read_implementation((file) => createReadableStream(`${out}/server/${file}`)); + set_manifest(manifest); + set_read_implementation((file) => createReadableStream(`${out}/server/${file}`)); /** @type {Array} */ const prerender_functions = []; diff --git a/packages/kit/src/core/sync/write_server.js b/packages/kit/src/core/sync/write_server.js index 4f76cbdeb093..c13616df07ad 100644 --- a/packages/kit/src/core/sync/write_server.js +++ b/packages/kit/src/core/sync/write_server.js @@ -25,7 +25,7 @@ const server_template = ({ }) => ` import { set_building, set_prerendering } from '$app/env/internal'; import { set_assets } from '$app/paths/internal/server'; -import { set_fix_stack_trace, set_manifest, set_read_implementation } from '__sveltekit/server'; +import { set_fix_stack_trace, set_manifest, set_read_implementation, log_response } from '__sveltekit/server'; import error from '../shared/error-template.js'; export const options = { @@ -78,7 +78,7 @@ export async function get_hooks() { }; } -export { set_assets, set_building, set_fix_stack_trace, set_manifest, set_prerendering, set_read_implementation }; +export { set_assets, set_building, set_fix_stack_trace, set_manifest, set_prerendering, set_read_implementation, log_response }; `; /** diff --git a/packages/kit/src/exports/vite/dev/index.js b/packages/kit/src/exports/vite/dev/index.js index a78b51182257..024fb980046e 100644 --- a/packages/kit/src/exports/vite/dev/index.js +++ b/packages/kit/src/exports/vite/dev/index.js @@ -20,7 +20,7 @@ import * as sync from '../../../core/sync/sync.js'; import { get_mime_lookup, get_runtime_base } from '../../../core/utils.js'; import '../../../utils/mime.js'; // extend mrmime with additional types (affects sirv too) import { compact } from '../../../utils/array.js'; -import { is_chrome_devtools_request, is_remote_module, log_response, not_found } from '../utils.js'; +import { is_chrome_devtools_request, is_remote_module, not_found } from '../utils.js'; import { SCHEME } from '../../../utils/url.js'; import { check_feature } from '../../../utils/features.js'; import { escape_html } from '../../../utils/escape.js'; @@ -579,7 +579,7 @@ export async function dev( await runner.import(`${get_runtime_base(root)}/server/index.js`) ); - const { set_fix_stack_trace } = await runner.import( + const { set_fix_stack_trace, log_response } = await runner.import( `${get_runtime_base(root)}/server/internal.js` ); set_fix_stack_trace(fix_stack_trace); diff --git a/packages/kit/src/exports/vite/index.js b/packages/kit/src/exports/vite/index.js index a5ee709bf30c..694f6d5bf981 100644 --- a/packages/kit/src/exports/vite/index.js +++ b/packages/kit/src/exports/vite/index.js @@ -1967,7 +1967,8 @@ function kit({ svelte_config }) { metadata, verbose, env, - vite_config_file: vite_config.configFile + vite_config_file: vite_config.configFile, + is_tty: process.stdout.isTTY }); // this silly hack is necessary to ensure that stderr from prerender is flushed before we continue diff --git a/packages/kit/src/exports/vite/utils.js b/packages/kit/src/exports/vite/utils.js index b7c8f125a7df..06bb2e723dfe 100644 --- a/packages/kit/src/exports/vite/utils.js +++ b/packages/kit/src/exports/vite/utils.js @@ -7,7 +7,6 @@ import { escape_for_regexp } from '../../utils/regex.js'; import { stackless } from '../../utils/error.js'; import { dedent } from '../../core/sync/utils.js'; import { app_server, app_env_private, sveltekit_env_private } from './module_ids.js'; -import { styleText } from 'node:util'; /** * Transforms alias to a valid vite.resolve.alias array. @@ -230,18 +229,3 @@ export function error_for_missing_config(feature_name, path, value) { ` ); } - -/** - * @param {number} status - * @param {Request} request - */ -export function log_response(status, request) { - const url = new URL(request.url); - const log = `[${status}] ${request.method} ${url.href.replace(url.origin, '')}`; - - if (status < 400) { - console.log(log); - } else { - console.error(styleText(['bold', 'red'], log)); - } -} diff --git a/packages/kit/src/runtime/server/internal.js b/packages/kit/src/runtime/server/internal.js index 7649f1dbc5bc..e4a68fc0f613 100644 --- a/packages/kit/src/runtime/server/internal.js +++ b/packages/kit/src/runtime/server/internal.js @@ -1,5 +1,18 @@ /** @import { SSRManifest } from '@sveltejs/kit'; */ import { restore, save } from './dev.js'; +import { + has_data_suffix, + has_resolution_suffix, + strip_data_suffix, + strip_resolution_suffix +} from '../../pathname.js'; +import { has_remote_prefix, strip_remote_prefix } from '../../runtime/server/remote-functions.js'; + +// using `getBuiltinModule` rather than `import` makes this safe to run in non-Node-compatible environments +const styleText = + // eslint-disable-next-line n/prefer-global/process + globalThis.process?.getBuiltinModule?.('node:util')?.styleText ?? + /** @type {(format: unknown, text: string) => string} */ ((_format, text) => text); const read_implementation_key = Symbol.for('sveltekit.read_implementation'); const manifest_key = Symbol.for('sveltekit.manifest'); @@ -29,4 +42,30 @@ export function set_manifest(value) { if (__SVELTEKIT_DEV__) save(manifest_key, value); } +/** + * @param {number} status + * @param {Request} request + */ +export function log_response(status, request) { + const url = new URL(request.url); + const requested = url.href.replace(url.origin, ''); + + let log = `${styleText(status < 400 ? ['cyan'] : ['bold', 'red'], `${status}`)} ${request.method} `; + + if (has_data_suffix(url.pathname)) { + const pathname = strip_data_suffix(url.pathname) || '/'; + log += pathname + styleText('dim', requested.slice(pathname.length)); + } else if (has_resolution_suffix(url.pathname)) { + const pathname = strip_resolution_suffix(url.pathname) || '/'; + log += pathname + styleText('dim', requested.slice(pathname.length)); + } else if (has_remote_prefix(url)) { + const id = /** @type {string} */ (strip_remote_prefix(url).split('/').pop()); + log += styleText('dim', url.pathname.slice(0, -id.length)) + id + styleText('dim', url.search); + } else { + log += requested; + } + + console.log(log); +} + export { fix_stack_trace, set_fix_stack_trace } from './sourcemaps.js'; diff --git a/packages/kit/src/runtime/server/remote-functions.js b/packages/kit/src/runtime/server/remote-functions.js index a146ffdc0d0f..43674bc0abf9 100644 --- a/packages/kit/src/runtime/server/remote-functions.js +++ b/packages/kit/src/runtime/server/remote-functions.js @@ -610,14 +610,25 @@ async function handle_remote_form_post_internal(event, state, manifest, id) { } } +/** + * @param {URL} url + */ +export function has_remote_prefix(url) { + return url.pathname.startsWith(`${base}/${app_dir}/remote/`); +} + +/** + * @param {URL} url + */ +export function strip_remote_prefix(url) { + return url.pathname.replace(`${base}/${app_dir}/remote/`, ''); +} + /** * @param {URL} url */ export function get_remote_id(url) { - return ( - url.pathname.startsWith(`${base}/${app_dir}/remote/`) && - url.pathname.replace(`${base}/${app_dir}/remote/`, '') - ); + return has_remote_prefix(url) && strip_remote_prefix(url); } /** diff --git a/packages/kit/src/types/internal.d.ts b/packages/kit/src/types/internal.d.ts index 66c2308b9610..4dd7e46e3d20 100644 --- a/packages/kit/src/types/internal.d.ts +++ b/packages/kit/src/types/internal.d.ts @@ -48,6 +48,7 @@ export interface ServerInternalModule { set_version(version: string): void; set_fix_stack_trace(fix_stack_trace: (error: Error) => void): void; get_hooks: () => Promise>; + log_response: (status: number, request: Request) => void; } export interface Asset { From b361b815e79828a6b7404d759d0a4c3892814a4e Mon Sep 17 00:00:00 2001 From: Tee Ming Date: Wed, 12 Aug 2026 04:55:49 +0800 Subject: [PATCH 508/545] chore: bump deps (#16745) closes https://github.com/sveltejs/kit/pull/16369 --- .changeset/crisp-adults-give.md | 6 + .changeset/curly-taxes-hug.md | 6 + .changeset/gold-tips-lead.md | 6 + .changeset/icy-turtles-leave.md | 7 + .changeset/lemon-ways-glow.md | 6 + .changeset/ready-chairs-fold.md | 6 + .changeset/silent-dogs-warn.md | 6 + .changeset/sixty-dragons-hide.md | 6 + .changeset/ten-snakes-show.md | 6 + .changeset/wacky-mice-attack.md | 6 + .github/workflows/release.yml | 2 +- package.json | 2 +- packages/adapter-cloudflare/package.json | 2 +- packages/adapter-netlify/package.json | 2 +- packages/adapter-node/package.json | 2 +- packages/enhanced-img/package.json | 4 +- packages/kit/package.json | 14 +- packages/kit/test/apps/basics/package.json | 2 +- packages/package/package.json | 2 +- packages/package/tsconfig.json | 2 + playgrounds/basic/package.json | 3 +- pnpm-lock.yaml | 1957 +++++++++----------- pnpm-workspace.yaml | 46 +- 23 files changed, 954 insertions(+), 1147 deletions(-) create mode 100644 .changeset/crisp-adults-give.md create mode 100644 .changeset/curly-taxes-hug.md create mode 100644 .changeset/gold-tips-lead.md create mode 100644 .changeset/icy-turtles-leave.md create mode 100644 .changeset/lemon-ways-glow.md create mode 100644 .changeset/ready-chairs-fold.md create mode 100644 .changeset/silent-dogs-warn.md create mode 100644 .changeset/sixty-dragons-hide.md create mode 100644 .changeset/ten-snakes-show.md create mode 100644 .changeset/wacky-mice-attack.md diff --git a/.changeset/crisp-adults-give.md b/.changeset/crisp-adults-give.md new file mode 100644 index 000000000000..a89b0809bcfd --- /dev/null +++ b/.changeset/crisp-adults-give.md @@ -0,0 +1,6 @@ +--- +"@sveltejs/package": patch +--- + +chore: bump `svelte2tsx` to 0.7.59 + \ No newline at end of file diff --git a/.changeset/curly-taxes-hug.md b/.changeset/curly-taxes-hug.md new file mode 100644 index 000000000000..577e412b65cd --- /dev/null +++ b/.changeset/curly-taxes-hug.md @@ -0,0 +1,6 @@ +--- +"@sveltejs/kit": patch +--- + +chore: bump `mrmime` to 2.0.1 + \ No newline at end of file diff --git a/.changeset/gold-tips-lead.md b/.changeset/gold-tips-lead.md new file mode 100644 index 000000000000..a8fd52037ada --- /dev/null +++ b/.changeset/gold-tips-lead.md @@ -0,0 +1,6 @@ +--- +"@sveltejs/kit": patch +--- + +chore: bump `@sveltejs/acorn-typescript` to 1.0.12 + \ No newline at end of file diff --git a/.changeset/icy-turtles-leave.md b/.changeset/icy-turtles-leave.md new file mode 100644 index 000000000000..6634ac126978 --- /dev/null +++ b/.changeset/icy-turtles-leave.md @@ -0,0 +1,7 @@ +--- +"@sveltejs/enhanced-img": patch +"@sveltejs/kit": patch +--- + +chore: bump `magic-string` to 1.1.0 + \ No newline at end of file diff --git a/.changeset/lemon-ways-glow.md b/.changeset/lemon-ways-glow.md new file mode 100644 index 000000000000..9e61ce1ace12 --- /dev/null +++ b/.changeset/lemon-ways-glow.md @@ -0,0 +1,6 @@ +--- +"@sveltejs/kit": patch +--- + +chore: bump `devalue` to 5.9.0 + \ No newline at end of file diff --git a/.changeset/ready-chairs-fold.md b/.changeset/ready-chairs-fold.md new file mode 100644 index 000000000000..b44cb58ea001 --- /dev/null +++ b/.changeset/ready-chairs-fold.md @@ -0,0 +1,6 @@ +--- +"@sveltejs/enhanced-img": patch +--- + +chore: bump `zimmerframe` to 1.1.4 + \ No newline at end of file diff --git a/.changeset/silent-dogs-warn.md b/.changeset/silent-dogs-warn.md new file mode 100644 index 000000000000..b6c4e94fe52e --- /dev/null +++ b/.changeset/silent-dogs-warn.md @@ -0,0 +1,6 @@ +--- +"@sveltejs/kit": patch +--- + +chore: bump `cookie` to 2.0.1 + \ No newline at end of file diff --git a/.changeset/sixty-dragons-hide.md b/.changeset/sixty-dragons-hide.md new file mode 100644 index 000000000000..ad02352ba196 --- /dev/null +++ b/.changeset/sixty-dragons-hide.md @@ -0,0 +1,6 @@ +--- +"@sveltejs/adapter-netlify": patch +"@sveltejs/adapter-node": patch +--- + +chore: bump `rolldown` to 1.2.3 diff --git a/.changeset/ten-snakes-show.md b/.changeset/ten-snakes-show.md new file mode 100644 index 000000000000..5e4cf65f7260 --- /dev/null +++ b/.changeset/ten-snakes-show.md @@ -0,0 +1,6 @@ +--- +"@sveltejs/kit": patch +--- + +chore: bump `acorn` to 8.18.0 + \ No newline at end of file diff --git a/.changeset/wacky-mice-attack.md b/.changeset/wacky-mice-attack.md new file mode 100644 index 000000000000..5e6d531bf847 --- /dev/null +++ b/.changeset/wacky-mice-attack.md @@ -0,0 +1,6 @@ +--- +"@sveltejs/adapter-cloudflare": patch +--- + +chore: bump `@cloudflare/worker-types` to 5.20260809.1 + \ No newline at end of file diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 490422e8f4bc..fd4ea07318b0 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -37,7 +37,7 @@ jobs: - name: Create Release Pull Request or Publish to npm id: changesets - uses: changesets/action@2d9f7af6402422be60d377f151c7618011bba45a # v2.0.0-next.4 + uses: changesets/action@22ccf9aa43179fe9e27dc62e575971d28cce197c # v2.0.0 with: # This expects you to have a script called release which does a build for your packages and calls changeset publish publish-script: pnpm changeset:release diff --git a/package.json b/package.json index f2e4684fd402..8f494acd13d9 100644 --- a/package.json +++ b/package.json @@ -37,7 +37,7 @@ "oxfmt": "^0.62.0", "vitest": "catalog:" }, - "packageManager": "pnpm@11.19.0+sha512.7881f3ed590d472c4a955e2b88b2121791116066dcc88cbca3849ec9b60f1bbaa6d2ccb221fa91da4e1c65bef2bcbe379365aea7ac539c7bf86dedc3a1b22dce", + "packageManager": "pnpm@11.21.0+sha512.521705bce689924eac72f5a3587122f362689ef6571e55ba80076fd637c11132ecffada26fad4ea79c485bfddbfd3d5a2a5b05805a77e893de71ec8a6cca3bb1", "engines": { "pnpm": ">=11.0.0" } diff --git a/packages/adapter-cloudflare/package.json b/packages/adapter-cloudflare/package.json index e56bfeb98016..5a3ebcdb8c3a 100644 --- a/packages/adapter-cloudflare/package.json +++ b/packages/adapter-cloudflare/package.json @@ -42,7 +42,7 @@ "test": "pnpm test:unit && pnpm test:e2e" }, "dependencies": { - "@cloudflare/workers-types": "^5.20260730.1" + "@cloudflare/workers-types": "^5.20260809.1" }, "devDependencies": { "@playwright/test": "catalog:", diff --git a/packages/adapter-netlify/package.json b/packages/adapter-netlify/package.json index 8fc8a97e296d..f86142bf29e0 100644 --- a/packages/adapter-netlify/package.json +++ b/packages/adapter-netlify/package.json @@ -44,7 +44,7 @@ "dependencies": { "@iarna/toml": "^2.2.5", "@netlify/types": "^2.8.0", - "rolldown": "^1.2.0" + "rolldown": "^1.2.3" }, "devDependencies": { "@netlify/edge-functions": "^3.0.8", diff --git a/packages/adapter-node/package.json b/packages/adapter-node/package.json index cd8e9c4c2372..93203cab564f 100644 --- a/packages/adapter-node/package.json +++ b/packages/adapter-node/package.json @@ -52,7 +52,7 @@ "vitest": "catalog:" }, "dependencies": { - "rolldown": "^1.2.0" + "rolldown": "^1.2.3" }, "peerDependencies": { "@sveltejs/kit": "^3.0.0-next.0" diff --git a/packages/enhanced-img/package.json b/packages/enhanced-img/package.json index 05cdd7ecc849..a06aec4004d2 100644 --- a/packages/enhanced-img/package.json +++ b/packages/enhanced-img/package.json @@ -38,11 +38,11 @@ }, "types": "types/index.d.ts", "dependencies": { - "magic-string": "^0.30.21", + "magic-string": "^1.1.0", "sharp": "^0.35.3", "svelte-parse-markup": "^0.1.5", "vite-imagetools": "^12.0.0", - "zimmerframe": "^1.1.2" + "zimmerframe": "^1.1.4" }, "devDependencies": { "@types/estree": "catalog:", diff --git a/packages/kit/package.json b/packages/kit/package.json index 9342e64653dc..c2b4de528bb1 100644 --- a/packages/kit/package.json +++ b/packages/kit/package.json @@ -19,17 +19,17 @@ "type": "module", "dependencies": { "@standard-schema/spec": "^1.1.0", - "@sveltejs/acorn-typescript": "^1.0.10", - "acorn": "^8.17.0", - "cookie": "^2.0.0", - "devalue": "^5.8.1", + "@sveltejs/acorn-typescript": "^1.0.12", + "acorn": "^8.18.0", + "cookie": "^2.0.1", + "devalue": "^5.9.0", "esm-env": "^1.2.2", - "magic-string": "^0.30.21", - "mrmime": "^2.0.0", + "magic-string": "^1.1.0", + "mrmime": "^2.0.1", "sirv": "^3.0.2" }, "devDependencies": { - "@opentelemetry/api": "^1.9.0", + "@opentelemetry/api": "catalog:", "@playwright/test": "catalog:", "@sveltejs/vite-plugin-svelte": "catalog:", "@types/connect": "catalog:", diff --git a/packages/kit/test/apps/basics/package.json b/packages/kit/test/apps/basics/package.json index 5d6a3bfc562a..f50381956287 100644 --- a/packages/kit/test/apps/basics/package.json +++ b/packages/kit/test/apps/basics/package.json @@ -20,7 +20,7 @@ "test:client-import": "vitest run" }, "devDependencies": { - "@opentelemetry/api": "^1.9.0", + "@opentelemetry/api": "catalog:", "@opentelemetry/sdk-node": "catalog:", "@opentelemetry/sdk-trace-node": "catalog:", "@sveltejs/kit": "workspace:^", diff --git a/packages/package/package.json b/packages/package/package.json index 68a187caa9f0..ab1eba145aea 100644 --- a/packages/package/package.json +++ b/packages/package/package.json @@ -22,7 +22,7 @@ "dependencies": { "chokidar": "^5.0.0", "semver": "^7.8.5", - "svelte2tsx": "~0.7.56" + "svelte2tsx": "~0.7.59" }, "devDependencies": { "@sveltejs/kit": "workspace:^", diff --git a/packages/package/tsconfig.json b/packages/package/tsconfig.json index d9994d64c9b6..f602ca975661 100644 --- a/packages/package/tsconfig.json +++ b/packages/package/tsconfig.json @@ -6,6 +6,8 @@ "target": "es2022", "module": "node16", "moduleResolution": "node16", + // TODO: remove this when svelte2tsx has migrated to magic-string v1 + "skipLibCheck": true, "types": ["node"] }, "include": ["*.js", "src/**/*", "test/index.spec.js"] diff --git a/playgrounds/basic/package.json b/playgrounds/basic/package.json index 4a300951ca6a..af35939b8f55 100644 --- a/playgrounds/basic/package.json +++ b/playgrounds/basic/package.json @@ -6,7 +6,7 @@ "dev": "vite dev", "build": "vite build", "preview": "vite preview", - "package": "svelte-kit sync && svelte-package && publint", + "package": "svelte-kit sync && svelte-package", "prepare": "svelte-kit sync", "prepublishOnly": "pnpm run package", "check": "svelte-kit sync && svelte-check --tsgo --incremental", @@ -26,7 +26,6 @@ "@sveltejs/package": "workspace:*", "@sveltejs/vite-plugin-svelte": "catalog:", "@typescript/native": "catalog:", - "publint": "catalog:", "svelte": "catalog:", "svelte-check": "catalog:", "typescript": "catalog:", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 390c8031fcc6..64be756125c8 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -10,11 +10,14 @@ catalogs: specifier: 1.0.0-next.9 version: 1.0.0-next.9 '@changesets/cli': - specifier: ^3.0.0-next.12 - version: 3.0.0-next.12 + specifier: ^3.0.0 + version: 3.0.0 '@fontsource/libre-barcode-128-text': - specifier: ^5.1.0 - version: 5.1.0 + specifier: ^5.3.0 + version: 5.3.0 + '@opentelemetry/api': + specifier: ^1.9.1 + version: 1.9.1 '@opentelemetry/sdk-node': specifier: ^0.221.0 version: 0.221.0 @@ -25,14 +28,14 @@ catalogs: specifier: ^1.62.0 version: 1.62.1 '@polka/url': - specifier: ^1.0.0-next.28 - version: 1.0.0-next.28 + specifier: ^1.0.0-next.29 + version: 1.0.0-next.29 '@sveltejs/eslint-config': - specifier: ^10.0.3 - version: 10.0.3 + specifier: ^10.0.4 + version: 10.0.4 '@sveltejs/vite-plugin-svelte': - specifier: ^7.0.0 - version: 7.0.0 + specifier: ^7.3.0 + version: 7.3.0 '@types/connect': specifier: ^3.4.38 version: 3.4.38 @@ -43,8 +46,8 @@ catalogs: specifier: ^22.19.19 version: 22.19.19 '@types/semver': - specifier: ^7.5.8 - version: 7.5.8 + specifier: ^7.8.0 + version: 7.8.0 '@typescript/native': specifier: npm:typescript@^7.0.2 version: 7.0.2 @@ -52,8 +55,8 @@ catalogs: specifier: ^4.1.10 version: 4.1.10 eslint: - specifier: ^10.8.0 - version: 10.8.0 + specifier: ^10.8.1 + version: 10.8.1 jsdom: specifier: ^30.0.0 version: 30.0.1 @@ -66,18 +69,15 @@ catalogs: prettier-plugin-svelte: specifier: ^4.1.1 version: 4.1.1 - publint: - specifier: ^0.3.0 - version: 0.3.0 rolldown: - specifier: ^1.2.0 - version: 1.2.0 + specifier: ^1.2.3 + version: 1.2.3 sirv-cli: - specifier: ^3.0.0 - version: 3.0.0 + specifier: ^3.0.1 + version: 3.0.1 svelte: - specifier: ^5.56.3 - version: 5.56.3 + specifier: ^5.56.8 + version: 5.56.8 svelte-check: specifier: ^4.7.5 version: 4.7.5 @@ -91,14 +91,14 @@ catalogs: specifier: ^1.4.2 version: 1.4.2 vite: - specifier: ^8.1.5 - version: 8.1.5 + specifier: ^8.2.1 + version: 8.2.1 vitest: specifier: ^4.1.10 version: 4.1.10 wrangler: - specifier: ^4.118.0 - version: 4.118.0 + specifier: ^4.120.1 + version: 4.120.1 typescript-native: typescript: specifier: ^7.0.2 @@ -113,22 +113,22 @@ importers: version: 1.0.0-next.9 '@changesets/cli': specifier: 'catalog:' - version: 3.0.0-next.12 + version: 3.0.0 '@playwright/test': specifier: 'catalog:' version: 1.62.1 '@sveltejs/eslint-config': specifier: 'catalog:' - version: 10.0.3(@eslint/js@10.0.1(eslint@10.8.0(jiti@2.4.2)(supports-color@10.2.2)))(@stylistic/eslint-plugin@5.10.0(eslint@10.8.0(jiti@2.4.2)(supports-color@10.2.2)))(eslint-config-prettier@9.1.0(eslint@10.8.0(jiti@2.4.2)(supports-color@10.2.2)))(eslint-plugin-n@17.24.0(eslint@10.8.0(jiti@2.4.2)(supports-color@10.2.2))(typescript@6.0.3))(eslint-plugin-svelte@3.15.0(eslint@10.8.0(jiti@2.4.2)(supports-color@10.2.2))(svelte@5.56.3(@typescript-eslint/types@8.61.1)))(eslint@10.8.0(jiti@2.4.2)(supports-color@10.2.2))(typescript-eslint@8.58.0(eslint@10.8.0(jiti@2.4.2)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3))(typescript@6.0.3) + version: 10.0.4(@eslint/js@10.0.1(eslint@10.8.1(jiti@2.4.2)(supports-color@10.2.2)))(@stylistic/eslint-plugin@5.10.0(eslint@10.8.1(jiti@2.4.2)(supports-color@10.2.2)))(eslint-config-prettier@9.1.0(eslint@10.8.1(jiti@2.4.2)(supports-color@10.2.2)))(eslint-plugin-n@17.24.0(eslint@10.8.1(jiti@2.4.2)(supports-color@10.2.2))(typescript@6.0.3))(eslint-plugin-svelte@3.15.0(eslint@10.8.1(jiti@2.4.2)(supports-color@10.2.2))(svelte@5.56.8(@typescript-eslint/types@8.61.1)))(eslint@10.8.1(jiti@2.4.2)(supports-color@10.2.2))(typescript-eslint@8.58.0(eslint@10.8.1(jiti@2.4.2)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3))(typescript@6.0.3) eslint: specifier: 'catalog:' - version: 10.8.0(jiti@2.4.2)(supports-color@10.2.2) + version: 10.8.1(jiti@2.4.2)(supports-color@10.2.2) oxfmt: specifier: ^0.62.0 - version: 0.62.0(svelte@5.56.3(@typescript-eslint/types@8.61.1)) + version: 0.62.0(svelte@5.56.8(@typescript-eslint/types@8.61.1)) vitest: specifier: 'catalog:' - version: 4.1.10(@opentelemetry/api@1.9.0)(@types/node@22.19.19)(@vitest/browser-playwright@4.1.10)(jsdom@30.0.1)(vite@8.1.5(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0)) + version: 4.1.10(@opentelemetry/api@1.9.1)(@types/node@22.19.19)(@vitest/browser-playwright@4.1.10)(jsdom@30.0.1)(vite@8.2.1(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0)) packages/adapter-auto: devDependencies: @@ -143,16 +143,16 @@ importers: version: 7.0.2 vitest: specifier: 'catalog:' - version: 4.1.10(@opentelemetry/api@1.9.0)(@types/node@22.19.19)(@vitest/browser-playwright@4.1.10)(jsdom@30.0.1)(vite@8.1.5(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0)) + version: 4.1.10(@opentelemetry/api@1.9.1)(@types/node@22.19.19)(@vitest/browser-playwright@4.1.10)(jsdom@30.0.1)(vite@8.2.1(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0)) packages/adapter-cloudflare: dependencies: '@cloudflare/workers-types': - specifier: ^5.20260730.1 - version: 5.20260804.1 + specifier: ^5.20260809.1 + version: 5.20260809.1 wrangler: specifier: ^4.118.0 - version: 4.118.0(@cloudflare/workers-types@5.20260804.1) + version: 4.120.1(@cloudflare/workers-types@5.20260809.1) devDependencies: '@playwright/test': specifier: 'catalog:' @@ -168,7 +168,7 @@ importers: version: 7.0.2 vitest: specifier: 'catalog:' - version: 4.1.10(@opentelemetry/api@1.9.0)(@types/node@22.19.19)(@vitest/browser-playwright@4.1.10)(jsdom@30.0.1)(vite@8.1.5(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0)) + version: 4.1.10(@opentelemetry/api@1.9.1)(@types/node@22.19.19)(@vitest/browser-playwright@4.1.10)(jsdom@30.0.1)(vite@8.2.1(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0)) packages/adapter-cloudflare/test/apps/pages: devDependencies: @@ -177,19 +177,19 @@ importers: version: link:../../../../kit '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 7.0.0(svelte@5.56.3(@typescript-eslint/types@8.61.1))(vite@8.1.5(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0)) + version: 7.3.0(svelte@5.56.8(@typescript-eslint/types@8.61.1))(vite@8.2.1(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0)) server-side-dep: specifier: file:server-side-dep version: file:packages/adapter-cloudflare/test/apps/pages/server-side-dep svelte: specifier: 'catalog:' - version: 5.56.3(@typescript-eslint/types@8.61.1) + version: 5.56.8(@typescript-eslint/types@8.61.1) vite: specifier: 'catalog:' - version: 8.1.5(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0) + version: 8.2.1(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0) wrangler: specifier: 'catalog:' - version: 4.118.0(@cloudflare/workers-types@5.20260804.1) + version: 4.120.1(@cloudflare/workers-types@5.20260809.1) packages/adapter-cloudflare/test/apps/workers: devDependencies: @@ -198,19 +198,19 @@ importers: version: link:../../../../kit '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 7.0.0(svelte@5.56.3(@typescript-eslint/types@8.61.1))(vite@8.1.5(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0)) + version: 7.3.0(svelte@5.56.8(@typescript-eslint/types@8.61.1))(vite@8.2.1(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0)) server-side-dep: specifier: file:server-side-dep version: file:packages/adapter-cloudflare/test/apps/workers/server-side-dep svelte: specifier: 'catalog:' - version: 5.56.3(@typescript-eslint/types@8.61.1) + version: 5.56.8(@typescript-eslint/types@8.61.1) vite: specifier: 'catalog:' - version: 8.1.5(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0) + version: 8.2.1(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0) wrangler: specifier: 'catalog:' - version: 4.118.0(@cloudflare/workers-types@5.20260804.1) + version: 4.120.1(@cloudflare/workers-types@5.20260809.1) packages/adapter-netlify: dependencies: @@ -221,8 +221,8 @@ importers: specifier: ^2.8.0 version: 2.8.0 rolldown: - specifier: ^1.2.0 - version: 1.2.0 + specifier: ^1.2.3 + version: 1.2.3 devDependencies: '@netlify/edge-functions': specifier: ^3.0.8 @@ -241,7 +241,7 @@ importers: version: 7.0.2 vitest: specifier: 'catalog:' - version: 4.1.10(@opentelemetry/api@1.9.0)(@types/node@22.19.19)(@vitest/browser-playwright@4.1.10)(jsdom@30.0.1)(vite@8.1.5(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0)) + version: 4.1.10(@opentelemetry/api@1.9.1)(@types/node@22.19.19)(@vitest/browser-playwright@4.1.10)(jsdom@30.0.1)(vite@8.2.1(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0)) packages/adapter-netlify/test/apps/basic: devDependencies: @@ -250,13 +250,13 @@ importers: version: link:../../../../kit '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 7.0.0(svelte@5.56.3(@typescript-eslint/types@8.61.1))(vite@8.1.5(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0)) + version: 7.3.0(svelte@5.56.8(@typescript-eslint/types@8.61.1))(vite@8.2.1(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0)) svelte: specifier: 'catalog:' - version: 5.56.3(@typescript-eslint/types@8.61.1) + version: 5.56.8(@typescript-eslint/types@8.61.1) vite: specifier: 'catalog:' - version: 8.1.5(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0) + version: 8.2.1(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0) packages/adapter-netlify/test/apps/edge: devDependencies: @@ -265,13 +265,13 @@ importers: version: link:../../../../kit '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 7.0.0(svelte@5.56.3(@typescript-eslint/types@8.61.1))(vite@8.1.5(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0)) + version: 7.3.0(svelte@5.56.8(@typescript-eslint/types@8.61.1))(vite@8.2.1(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0)) svelte: specifier: 'catalog:' - version: 5.56.3(@typescript-eslint/types@8.61.1) + version: 5.56.8(@typescript-eslint/types@8.61.1) vite: specifier: 'catalog:' - version: 8.1.5(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0) + version: 8.2.1(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0) packages/adapter-netlify/test/apps/instrumentation: devDependencies: @@ -280,13 +280,13 @@ importers: version: link:../../../../kit '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 7.0.0(svelte@5.56.3(@typescript-eslint/types@8.61.1))(vite@8.1.5(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0)) + version: 7.3.0(svelte@5.56.8(@typescript-eslint/types@8.61.1))(vite@8.2.1(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0)) svelte: specifier: 'catalog:' - version: 5.56.3(@typescript-eslint/types@8.61.1) + version: 5.56.8(@typescript-eslint/types@8.61.1) vite: specifier: 'catalog:' - version: 8.1.5(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0) + version: 8.2.1(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0) packages/adapter-netlify/test/apps/split: devDependencies: @@ -295,23 +295,23 @@ importers: version: link:../../../../kit '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 7.0.0(svelte@5.56.3(@typescript-eslint/types@8.61.1))(vite@8.1.5(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0)) + version: 7.3.0(svelte@5.56.8(@typescript-eslint/types@8.61.1))(vite@8.2.1(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0)) svelte: specifier: 'catalog:' - version: 5.56.3(@typescript-eslint/types@8.61.1) + version: 5.56.8(@typescript-eslint/types@8.61.1) vite: specifier: 'catalog:' - version: 8.1.5(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0) + version: 8.2.1(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0) packages/adapter-node: dependencies: rolldown: - specifier: ^1.2.0 - version: 1.2.0 + specifier: ^1.2.3 + version: 1.2.3 devDependencies: '@polka/url': specifier: 'catalog:' - version: 1.0.0-next.28 + version: 1.0.0-next.29 '@sveltejs/kit': specifier: workspace:^ version: link:../kit @@ -329,7 +329,7 @@ importers: version: 7.0.2 vitest: specifier: 'catalog:' - version: 4.1.10(@opentelemetry/api@1.9.0)(@types/node@22.19.19)(@vitest/browser-playwright@4.1.10)(jsdom@30.0.1)(vite@8.1.5(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0)) + version: 4.1.10(@opentelemetry/api@1.9.1)(@types/node@22.19.19)(@vitest/browser-playwright@4.1.10)(jsdom@30.0.1)(vite@8.2.1(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0)) packages/adapter-node/test/apps/basic: devDependencies: @@ -341,13 +341,13 @@ importers: version: link:../../../../kit '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 7.0.0(svelte@5.56.3(@typescript-eslint/types@8.61.1))(vite@8.1.5(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0)) + version: 7.3.0(svelte@5.56.8(@typescript-eslint/types@8.61.1))(vite@8.2.1(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0)) svelte: specifier: 'catalog:' - version: 5.56.3(@typescript-eslint/types@8.61.1) + version: 5.56.8(@typescript-eslint/types@8.61.1) vite: specifier: 'catalog:' - version: 8.1.5(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0) + version: 8.2.1(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0) packages/adapter-static: devDependencies: @@ -365,13 +365,13 @@ importers: version: 3.0.2 svelte: specifier: 'catalog:' - version: 5.56.3(@typescript-eslint/types@8.61.1) + version: 5.56.8(@typescript-eslint/types@8.61.1) typescript: specifier: catalog:typescript-native version: 7.0.2 vite: specifier: 'catalog:' - version: 8.1.5(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0) + version: 8.2.1(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0) packages/adapter-static/test/apps/prerendered: devDependencies: @@ -380,16 +380,16 @@ importers: version: link:../../../../kit '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 7.0.0(svelte@5.56.3(@typescript-eslint/types@8.61.1))(vite@8.1.5(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0)) + version: 7.3.0(svelte@5.56.8(@typescript-eslint/types@8.61.1))(vite@8.2.1(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0)) sirv-cli: specifier: 'catalog:' - version: 3.0.0 + version: 3.0.1 svelte: specifier: 'catalog:' - version: 5.56.3(@typescript-eslint/types@8.61.1) + version: 5.56.8(@typescript-eslint/types@8.61.1) vite: specifier: 'catalog:' - version: 8.1.5(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0) + version: 8.2.1(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0) packages/adapter-static/test/apps/spa: devDependencies: @@ -398,16 +398,16 @@ importers: version: link:../../../../kit '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 7.0.0(svelte@5.56.3(@typescript-eslint/types@8.61.1))(vite@8.1.5(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0)) + version: 7.3.0(svelte@5.56.8(@typescript-eslint/types@8.61.1))(vite@8.2.1(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0)) sirv-cli: specifier: 'catalog:' - version: 3.0.0 + version: 3.0.1 svelte: specifier: 'catalog:' - version: 5.56.3(@typescript-eslint/types@8.61.1) + version: 5.56.8(@typescript-eslint/types@8.61.1) vite: specifier: 'catalog:' - version: 8.1.5(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0) + version: 8.2.1(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0) packages/adapter-vercel: dependencies: @@ -426,7 +426,7 @@ importers: version: 7.0.2 vitest: specifier: 'catalog:' - version: 4.1.10(@opentelemetry/api@1.9.0)(@types/node@22.19.19)(@vitest/browser-playwright@4.1.10)(jsdom@30.0.1)(vite@8.1.5(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0)) + version: 4.1.10(@opentelemetry/api@1.9.1)(@types/node@22.19.19)(@vitest/browser-playwright@4.1.10)(jsdom@30.0.1)(vite@8.2.1(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0)) packages/adapter-vercel/test/apps/basic: devDependencies: @@ -435,16 +435,16 @@ importers: version: link:../../../../kit '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 7.0.0(svelte@5.56.3(@typescript-eslint/types@8.61.1))(vite@8.1.5(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0)) + version: 7.3.0(svelte@5.56.8(@typescript-eslint/types@8.61.1))(vite@8.2.1(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0)) svelte: specifier: 'catalog:' - version: 5.56.3(@typescript-eslint/types@8.61.1) + version: 5.56.8(@typescript-eslint/types@8.61.1) typescript: specifier: 'catalog:' version: 6.0.3 vite: specifier: 'catalog:' - version: 8.1.5(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0) + version: 8.2.1(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0) packages/adapter-vercel/test/apps/split: devDependencies: @@ -453,37 +453,37 @@ importers: version: link:../../../../kit '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 7.0.0(svelte@5.56.3(@typescript-eslint/types@8.61.1))(vite@8.1.5(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0)) + version: 7.3.0(svelte@5.56.8(@typescript-eslint/types@8.61.1))(vite@8.2.1(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0)) svelte: specifier: 'catalog:' - version: 5.56.3(@typescript-eslint/types@8.61.1) + version: 5.56.8(@typescript-eslint/types@8.61.1) typescript: specifier: 'catalog:' version: 6.0.3 vite: specifier: 'catalog:' - version: 8.1.5(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0) + version: 8.2.1(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0) packages/enhanced-img: dependencies: '@sveltejs/vite-plugin-svelte': specifier: ^7.0.0 - version: 7.0.0(svelte@5.56.3(@typescript-eslint/types@8.61.1))(vite@8.1.5(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0)) + version: 7.3.0(svelte@5.56.8(@typescript-eslint/types@8.61.1))(vite@8.2.1(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0)) magic-string: - specifier: ^0.30.21 - version: 0.30.21 + specifier: ^1.1.0 + version: 1.1.0 sharp: specifier: ^0.35.3 version: 0.35.3(@types/node@22.19.19) svelte-parse-markup: specifier: ^0.1.5 - version: 0.1.5(svelte@5.56.3(@typescript-eslint/types@8.61.1)) + version: 0.1.5(svelte@5.56.8(@typescript-eslint/types@8.61.1)) vite-imagetools: specifier: ^12.0.0 - version: 12.0.0(@types/node@22.19.19)(vite@8.1.5(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0)) + version: 12.0.0(@types/node@22.19.19)(vite@8.2.1(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0)) zimmerframe: - specifier: ^1.1.2 - version: 1.1.2 + specifier: ^1.1.4 + version: 1.1.4 devDependencies: '@types/estree': specifier: 'catalog:' @@ -493,19 +493,19 @@ importers: version: 22.19.19 rolldown: specifier: 'catalog:' - version: 1.2.0 + version: 1.2.3 svelte: specifier: 'catalog:' - version: 5.56.3(@typescript-eslint/types@8.61.1) + version: 5.56.8(@typescript-eslint/types@8.61.1) typescript: specifier: catalog:typescript-native version: 7.0.2 vite: specifier: 'catalog:' - version: 8.1.5(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0) + version: 8.2.1(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0) vitest: specifier: 'catalog:' - version: 4.1.10(@opentelemetry/api@1.9.0)(@types/node@22.19.19)(@vitest/browser-playwright@4.1.10)(jsdom@30.0.1)(vite@8.1.5(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0)) + version: 4.1.10(@opentelemetry/api@1.9.1)(@types/node@22.19.19)(@vitest/browser-playwright@4.1.10)(jsdom@30.0.1)(vite@8.2.1(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0)) packages/enhanced-img/test/apps/basics: devDependencies: @@ -517,13 +517,13 @@ importers: version: link:../../../../kit '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 7.0.0(svelte@5.56.3(@typescript-eslint/types@8.61.1))(vite@8.1.5(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0)) + version: 7.3.0(svelte@5.56.8(@typescript-eslint/types@8.61.1))(vite@8.2.1(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0)) svelte: specifier: 'catalog:' - version: 5.56.3(@typescript-eslint/types@8.61.1) + version: 5.56.8(@typescript-eslint/types@8.61.1) vite: specifier: 'catalog:' - version: 8.1.5(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0) + version: 8.2.1(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0) packages/kit: dependencies: @@ -531,39 +531,39 @@ importers: specifier: ^1.1.0 version: 1.1.0 '@sveltejs/acorn-typescript': - specifier: ^1.0.10 - version: 1.0.10(acorn@8.17.0) + specifier: ^1.0.12 + version: 1.0.12(acorn@8.18.0) acorn: - specifier: ^8.17.0 - version: 8.17.0 + specifier: ^8.18.0 + version: 8.18.0 cookie: - specifier: ^2.0.0 - version: 2.0.0 + specifier: ^2.0.1 + version: 2.0.1 devalue: - specifier: ^5.8.1 - version: 5.8.1 + specifier: ^5.9.0 + version: 5.9.0 esm-env: specifier: ^1.2.2 version: 1.2.2 magic-string: - specifier: ^0.30.21 - version: 0.30.21 + specifier: ^1.1.0 + version: 1.1.0 mrmime: - specifier: ^2.0.0 - version: 2.0.0 + specifier: ^2.0.1 + version: 2.0.1 sirv: specifier: ^3.0.2 version: 3.0.2 devDependencies: '@opentelemetry/api': - specifier: ^1.9.0 - version: 1.9.0 + specifier: 'catalog:' + version: 1.9.1 '@playwright/test': specifier: 'catalog:' version: 1.62.1 '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 7.0.0(svelte@5.56.3(@typescript-eslint/types@8.61.1))(vite@8.1.5(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0)) + version: 7.3.0(svelte@5.56.8(@typescript-eslint/types@8.61.1))(vite@8.2.1(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0)) '@types/connect': specifier: 'catalog:' version: 3.4.38 @@ -581,13 +581,13 @@ importers: version: 30.0.1 rolldown: specifier: 'catalog:' - version: 1.2.0 + version: 1.2.3 svelte: specifier: 'catalog:' - version: 5.56.3(@typescript-eslint/types@8.61.1) + version: 5.56.8(@typescript-eslint/types@8.61.1) svelte-preprocess: specifier: 'catalog:' - version: 6.0.5(postcss-load-config@3.1.4(postcss@8.5.19))(postcss@8.5.19)(svelte@5.56.3(@typescript-eslint/types@8.61.1))(typescript@6.0.3) + version: 6.0.5(postcss-load-config@3.1.4(postcss@8.5.26))(postcss@8.5.26)(svelte@5.56.8(@typescript-eslint/types@8.61.1))(typescript@6.0.3) typescript: specifier: ~6.0.3 version: 6.0.3 @@ -596,10 +596,10 @@ importers: version: 1.4.2(typescript@6.0.3) vite: specifier: 'catalog:' - version: 8.1.5(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0) + version: 8.2.1(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0) vitest: specifier: 'catalog:' - version: 4.1.10(@opentelemetry/api@1.9.0)(@types/node@22.19.19)(@vitest/browser-playwright@4.1.10)(jsdom@30.0.1)(vite@8.1.5(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0)) + version: 4.1.10(@opentelemetry/api@1.9.1)(@types/node@22.19.19)(@vitest/browser-playwright@4.1.10)(jsdom@30.0.1)(vite@8.2.1(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0)) packages/kit/src/core/sync/write_types/test/actions: devDependencies: @@ -701,7 +701,7 @@ importers: version: link:../../.. '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 7.0.0(svelte@5.56.3(@typescript-eslint/types@8.61.1))(vite@8.1.5(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0)) + version: 7.3.0(svelte@5.56.8(@typescript-eslint/types@8.61.1))(vite@8.2.1(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0)) '@typescript/native': specifier: 'catalog:' version: typescript@7.0.2 @@ -713,10 +713,10 @@ importers: version: file:packages/kit/test/apps/async/_test_dependencies/remote-lib(@sveltejs/kit@packages+kit) svelte: specifier: 'catalog:' - version: 5.56.3(@typescript-eslint/types@8.61.1) + version: 5.56.8(@typescript-eslint/types@8.61.1) svelte-check: specifier: 'catalog:' - version: 4.7.5(picomatch@4.0.5)(svelte@5.56.3(@typescript-eslint/types@8.61.1))(typescript@6.0.3) + version: 4.7.5(picomatch@4.0.5)(svelte@5.56.8(@typescript-eslint/types@8.61.1))(typescript@6.0.3) typescript: specifier: 'catalog:' version: 6.0.3 @@ -725,37 +725,37 @@ importers: version: 1.4.2(typescript@6.0.3) vite: specifier: 'catalog:' - version: 8.1.5(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0) + version: 8.2.1(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0) packages/kit/test/apps/basics: devDependencies: '@opentelemetry/api': - specifier: ^1.9.0 - version: 1.9.0 + specifier: 'catalog:' + version: 1.9.1 '@opentelemetry/sdk-node': specifier: 'catalog:' - version: 0.221.0(@opentelemetry/api@1.9.0)(supports-color@10.2.2) + version: 0.221.0(@opentelemetry/api@1.9.1)(supports-color@10.2.2) '@opentelemetry/sdk-trace-node': specifier: 'catalog:' - version: 2.10.0(@opentelemetry/api@1.9.0) + version: 2.10.0(@opentelemetry/api@1.9.1) '@sveltejs/kit': specifier: workspace:^ version: link:../../.. '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 7.0.0(svelte@5.56.3(@typescript-eslint/types@8.61.1))(vite@8.1.5(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0)) + version: 7.3.0(svelte@5.56.8(@typescript-eslint/types@8.61.1))(vite@8.2.1(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0)) '@typescript/native': specifier: 'catalog:' version: typescript@7.0.2 '@vitest/browser-playwright': specifier: 'catalog:' - version: 4.1.10(playwright@1.62.1)(vite@8.1.5(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0))(vitest@4.1.10) + version: 4.1.10(playwright@1.62.1)(vite@8.2.1(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0))(vitest@4.1.10) svelte: specifier: 'catalog:' - version: 5.56.3(@typescript-eslint/types@8.61.1) + version: 5.56.8(@typescript-eslint/types@8.61.1) svelte-check: specifier: 'catalog:' - version: 4.7.5(picomatch@4.0.5)(svelte@5.56.3(@typescript-eslint/types@8.61.1))(typescript@6.0.3) + version: 4.7.5(picomatch@4.0.5)(svelte@5.56.8(@typescript-eslint/types@8.61.1))(typescript@6.0.3) test-redirect-importer: specifier: workspace:* version: link:../../../../test-redirect-importer @@ -767,10 +767,10 @@ importers: version: 1.4.2(typescript@6.0.3) vite: specifier: 'catalog:' - version: 8.1.5(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0) + version: 8.2.1(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0) vitest: specifier: 'catalog:' - version: 4.1.10(@opentelemetry/api@1.9.0)(@types/node@22.19.19)(@vitest/browser-playwright@4.1.10)(jsdom@30.0.1)(vite@8.1.5(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0)) + version: 4.1.10(@opentelemetry/api@1.9.1)(@types/node@22.19.19)(@vitest/browser-playwright@4.1.10)(jsdom@30.0.1)(vite@8.2.1(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0)) packages/kit/test/apps/dev-only: devDependencies: @@ -779,7 +779,7 @@ importers: version: link:../../.. '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 7.0.0(svelte@5.56.3(@typescript-eslint/types@8.61.1))(vite@8.1.5(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0)) + version: 7.3.0(svelte@5.56.8(@typescript-eslint/types@8.61.1))(vite@8.2.1(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0)) '@typescript/native': specifier: 'catalog:' version: typescript@7.0.2 @@ -815,16 +815,16 @@ importers: version: e2e-test-dep-cjs-only@file:packages/kit/test/apps/dev-only/_test_dependencies/cjs-only svelte: specifier: 'catalog:' - version: 5.56.3(@typescript-eslint/types@8.61.1) + version: 5.56.8(@typescript-eslint/types@8.61.1) svelte-check: specifier: 'catalog:' - version: 4.7.5(picomatch@4.0.5)(svelte@5.56.3(@typescript-eslint/types@8.61.1))(typescript@6.0.3) + version: 4.7.5(picomatch@4.0.5)(svelte@5.56.8(@typescript-eslint/types@8.61.1))(typescript@6.0.3) typescript: specifier: 'catalog:' version: 6.0.3 vite: specifier: 'catalog:' - version: 8.1.5(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0) + version: 8.2.1(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0) packages/kit/test/apps/embed: devDependencies: @@ -833,22 +833,22 @@ importers: version: link:../../.. '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 7.0.0(svelte@5.56.3(@typescript-eslint/types@8.61.1))(vite@8.1.5(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0)) + version: 7.3.0(svelte@5.56.8(@typescript-eslint/types@8.61.1))(vite@8.2.1(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0)) '@typescript/native': specifier: 'catalog:' version: typescript@7.0.2 svelte: specifier: 'catalog:' - version: 5.56.3(@typescript-eslint/types@8.61.1) + version: 5.56.8(@typescript-eslint/types@8.61.1) svelte-check: specifier: 'catalog:' - version: 4.7.5(picomatch@4.0.5)(svelte@5.56.3(@typescript-eslint/types@8.61.1))(typescript@6.0.3) + version: 4.7.5(picomatch@4.0.5)(svelte@5.56.8(@typescript-eslint/types@8.61.1))(typescript@6.0.3) typescript: specifier: 'catalog:' version: 6.0.3 vite: specifier: 'catalog:' - version: 8.1.5(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0) + version: 8.2.1(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0) packages/kit/test/apps/hash-based-routing: devDependencies: @@ -857,22 +857,22 @@ importers: version: link:../../.. '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 7.0.0(svelte@5.56.3(@typescript-eslint/types@8.61.1))(vite@8.1.5(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0)) + version: 7.3.0(svelte@5.56.8(@typescript-eslint/types@8.61.1))(vite@8.2.1(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0)) '@typescript/native': specifier: 'catalog:' version: typescript@7.0.2 svelte: specifier: 'catalog:' - version: 5.56.3(@typescript-eslint/types@8.61.1) + version: 5.56.8(@typescript-eslint/types@8.61.1) svelte-check: specifier: 'catalog:' - version: 4.7.5(picomatch@4.0.5)(svelte@5.56.3(@typescript-eslint/types@8.61.1))(typescript@6.0.3) + version: 4.7.5(picomatch@4.0.5)(svelte@5.56.8(@typescript-eslint/types@8.61.1))(typescript@6.0.3) typescript: specifier: 'catalog:' version: 6.0.3 vite: specifier: 'catalog:' - version: 8.1.5(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0) + version: 8.2.1(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0) packages/kit/test/apps/no-csr: devDependencies: @@ -881,22 +881,22 @@ importers: version: link:../../.. '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 7.0.0(svelte@5.56.3(@typescript-eslint/types@8.61.1))(vite@8.1.5(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0)) + version: 7.3.0(svelte@5.56.8(@typescript-eslint/types@8.61.1))(vite@8.2.1(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0)) '@typescript/native': specifier: 'catalog:' version: typescript@7.0.2 svelte: specifier: 'catalog:' - version: 5.56.3(@typescript-eslint/types@8.61.1) + version: 5.56.8(@typescript-eslint/types@8.61.1) svelte-check: specifier: 'catalog:' - version: 4.7.5(picomatch@4.0.5)(svelte@5.56.3(@typescript-eslint/types@8.61.1))(typescript@6.0.3) + version: 4.7.5(picomatch@4.0.5)(svelte@5.56.8(@typescript-eslint/types@8.61.1))(typescript@6.0.3) typescript: specifier: 'catalog:' version: 6.0.3 vite: specifier: 'catalog:' - version: 8.1.5(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0) + version: 8.2.1(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0) packages/kit/test/apps/no-ssr: devDependencies: @@ -905,52 +905,52 @@ importers: version: link:../../.. '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 7.0.0(svelte@5.56.3(@typescript-eslint/types@8.61.1))(vite@8.1.5(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0)) + version: 7.3.0(svelte@5.56.8(@typescript-eslint/types@8.61.1))(vite@8.2.1(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0)) '@typescript/native': specifier: 'catalog:' version: typescript@7.0.2 svelte: specifier: 'catalog:' - version: 5.56.3(@typescript-eslint/types@8.61.1) + version: 5.56.8(@typescript-eslint/types@8.61.1) svelte-check: specifier: 'catalog:' - version: 4.7.5(picomatch@4.0.5)(svelte@5.56.3(@typescript-eslint/types@8.61.1))(typescript@6.0.3) + version: 4.7.5(picomatch@4.0.5)(svelte@5.56.8(@typescript-eslint/types@8.61.1))(typescript@6.0.3) typescript: specifier: 'catalog:' version: 6.0.3 vite: specifier: 'catalog:' - version: 8.1.5(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0) + version: 8.2.1(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0) packages/kit/test/apps/options: devDependencies: '@fontsource/libre-barcode-128-text': specifier: 'catalog:' - version: 5.1.0 + version: 5.3.0 '@sveltejs/kit': specifier: workspace:^ version: link:../../.. '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 7.0.0(svelte@5.56.3(@typescript-eslint/types@8.61.1))(vite@8.1.5(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0)) + version: 7.3.0(svelte@5.56.8(@typescript-eslint/types@8.61.1))(vite@8.2.1(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0)) '@typescript/native': specifier: 'catalog:' version: typescript@7.0.2 svelte: specifier: 'catalog:' - version: 5.56.3(@typescript-eslint/types@8.61.1) + version: 5.56.8(@typescript-eslint/types@8.61.1) svelte-check: specifier: 'catalog:' - version: 4.7.5(picomatch@4.0.5)(svelte@5.56.3(@typescript-eslint/types@8.61.1))(typescript@6.0.3) + version: 4.7.5(picomatch@4.0.5)(svelte@5.56.8(@typescript-eslint/types@8.61.1))(typescript@6.0.3) typescript: specifier: 'catalog:' version: 6.0.3 vite: specifier: 'catalog:' - version: 8.1.5(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0) + version: 8.2.1(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0) vitest: specifier: 'catalog:' - version: 4.1.10(@opentelemetry/api@1.9.0)(@types/node@22.19.19)(@vitest/browser-playwright@4.1.10)(jsdom@30.0.1)(vite@8.1.5(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0)) + version: 4.1.10(@opentelemetry/api@1.9.1)(@types/node@22.19.19)(@vitest/browser-playwright@4.1.10)(jsdom@30.0.1)(vite@8.2.1(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0)) packages/kit/test/apps/options-2: devDependencies: @@ -962,16 +962,16 @@ importers: version: link:../../.. '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 7.0.0(svelte@5.56.3(@typescript-eslint/types@8.61.1))(vite@8.1.5(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0)) + version: 7.3.0(svelte@5.56.8(@typescript-eslint/types@8.61.1))(vite@8.2.1(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0)) '@typescript/native': specifier: 'catalog:' version: typescript@7.0.2 svelte: specifier: 'catalog:' - version: 5.56.3(@typescript-eslint/types@8.61.1) + version: 5.56.8(@typescript-eslint/types@8.61.1) svelte-check: specifier: 'catalog:' - version: 4.7.5(picomatch@4.0.5)(svelte@5.56.3(@typescript-eslint/types@8.61.1))(typescript@6.0.3) + version: 4.7.5(picomatch@4.0.5)(svelte@5.56.8(@typescript-eslint/types@8.61.1))(typescript@6.0.3) typescript: specifier: 'catalog:' version: 6.0.3 @@ -980,7 +980,7 @@ importers: version: 1.4.2(typescript@6.0.3) vite: specifier: 'catalog:' - version: 8.1.5(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0) + version: 8.2.1(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0) packages/kit/test/apps/options-3: devDependencies: @@ -992,22 +992,22 @@ importers: version: link:../../.. '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 7.0.0(svelte@5.56.3(@typescript-eslint/types@8.61.1))(vite@8.1.5(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0)) + version: 7.3.0(svelte@5.56.8(@typescript-eslint/types@8.61.1))(vite@8.2.1(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0)) '@typescript/native': specifier: 'catalog:' version: typescript@7.0.2 svelte: specifier: 'catalog:' - version: 5.56.3(@typescript-eslint/types@8.61.1) + version: 5.56.8(@typescript-eslint/types@8.61.1) svelte-check: specifier: 'catalog:' - version: 4.7.5(picomatch@4.0.5)(svelte@5.56.3(@typescript-eslint/types@8.61.1))(typescript@6.0.3) + version: 4.7.5(picomatch@4.0.5)(svelte@5.56.8(@typescript-eslint/types@8.61.1))(typescript@6.0.3) typescript: specifier: 'catalog:' version: 6.0.3 vite: specifier: 'catalog:' - version: 8.1.5(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0) + version: 8.2.1(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0) packages/kit/test/apps/prerendered-app-error-pages: devDependencies: @@ -1016,22 +1016,22 @@ importers: version: link:../../.. '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 7.0.0(svelte@5.56.3(@typescript-eslint/types@8.61.1))(vite@8.1.5(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0)) + version: 7.3.0(svelte@5.56.8(@typescript-eslint/types@8.61.1))(vite@8.2.1(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0)) '@typescript/native': specifier: 'catalog:' version: typescript@7.0.2 svelte: specifier: 'catalog:' - version: 5.56.3(@typescript-eslint/types@8.61.1) + version: 5.56.8(@typescript-eslint/types@8.61.1) svelte-check: specifier: 'catalog:' - version: 4.7.5(picomatch@4.0.5)(svelte@5.56.3(@typescript-eslint/types@8.61.1))(typescript@6.0.3) + version: 4.7.5(picomatch@4.0.5)(svelte@5.56.8(@typescript-eslint/types@8.61.1))(typescript@6.0.3) typescript: specifier: 'catalog:' version: 6.0.3 vite: specifier: 'catalog:' - version: 8.1.5(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0) + version: 8.2.1(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0) packages/kit/test/apps/writes: devDependencies: @@ -1040,28 +1040,28 @@ importers: version: link:../../.. '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 7.0.0(svelte@5.56.3(@typescript-eslint/types@8.61.1))(vite@8.1.5(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0)) + version: 7.3.0(svelte@5.56.8(@typescript-eslint/types@8.61.1))(vite@8.2.1(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0)) '@typescript/native': specifier: 'catalog:' version: typescript@7.0.2 svelte: specifier: 'catalog:' - version: 5.56.3(@typescript-eslint/types@8.61.1) + version: 5.56.8(@typescript-eslint/types@8.61.1) svelte-check: specifier: 'catalog:' - version: 4.7.5(picomatch@4.0.5)(svelte@5.56.3(@typescript-eslint/types@8.61.1))(typescript@6.0.3) + version: 4.7.5(picomatch@4.0.5)(svelte@5.56.8(@typescript-eslint/types@8.61.1))(typescript@6.0.3) typescript: specifier: 'catalog:' version: 6.0.3 vite: specifier: 'catalog:' - version: 8.1.5(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0) + version: 8.2.1(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0) packages/kit/test/build-errors: devDependencies: vitest: specifier: 'catalog:' - version: 4.1.10(@opentelemetry/api@1.9.0)(@types/node@22.19.19)(@vitest/browser-playwright@4.1.10)(jsdom@30.0.1)(vite@8.1.5(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0)) + version: 4.1.10(@opentelemetry/api@1.9.1)(@types/node@22.19.19)(@vitest/browser-playwright@4.1.10)(jsdom@30.0.1)(vite@8.2.1(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0)) packages/kit/test/build-errors/apps/env-private: devDependencies: @@ -1070,22 +1070,22 @@ importers: version: link:../../../.. '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 7.0.0(svelte@5.56.3(@typescript-eslint/types@8.61.1))(vite@8.1.5(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0)) + version: 7.3.0(svelte@5.56.8(@typescript-eslint/types@8.61.1))(vite@8.2.1(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0)) '@typescript/native': specifier: 'catalog:' version: typescript@7.0.2 svelte: specifier: 'catalog:' - version: 5.56.3(@typescript-eslint/types@8.61.1) + version: 5.56.8(@typescript-eslint/types@8.61.1) svelte-check: specifier: 'catalog:' - version: 4.7.5(picomatch@4.0.5)(svelte@5.56.3(@typescript-eslint/types@8.61.1))(typescript@6.0.3) + version: 4.7.5(picomatch@4.0.5)(svelte@5.56.8(@typescript-eslint/types@8.61.1))(typescript@6.0.3) typescript: specifier: 'catalog:' version: 6.0.3 vite: specifier: 'catalog:' - version: 8.1.5(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0) + version: 8.2.1(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0) packages/kit/test/build-errors/apps/env-private-dynamic: devDependencies: @@ -1094,22 +1094,22 @@ importers: version: link:../../../.. '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 7.0.0(svelte@5.56.3(@typescript-eslint/types@8.61.1))(vite@8.1.5(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0)) + version: 7.3.0(svelte@5.56.8(@typescript-eslint/types@8.61.1))(vite@8.2.1(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0)) '@typescript/native': specifier: 'catalog:' version: typescript@7.0.2 svelte: specifier: 'catalog:' - version: 5.56.3(@typescript-eslint/types@8.61.1) + version: 5.56.8(@typescript-eslint/types@8.61.1) svelte-check: specifier: 'catalog:' - version: 4.7.5(picomatch@4.0.5)(svelte@5.56.3(@typescript-eslint/types@8.61.1))(typescript@6.0.3) + version: 4.7.5(picomatch@4.0.5)(svelte@5.56.8(@typescript-eslint/types@8.61.1))(typescript@6.0.3) typescript: specifier: 'catalog:' version: 6.0.3 vite: specifier: 'catalog:' - version: 8.1.5(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0) + version: 8.2.1(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0) packages/kit/test/build-errors/apps/env-private-service-worker: devDependencies: @@ -1118,22 +1118,22 @@ importers: version: link:../../../.. '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 7.0.0(svelte@5.56.3(@typescript-eslint/types@8.61.1))(vite@8.1.5(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0)) + version: 7.3.0(svelte@5.56.8(@typescript-eslint/types@8.61.1))(vite@8.2.1(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0)) '@typescript/native': specifier: 'catalog:' version: typescript@7.0.2 svelte: specifier: 'catalog:' - version: 5.56.3(@typescript-eslint/types@8.61.1) + version: 5.56.8(@typescript-eslint/types@8.61.1) svelte-check: specifier: 'catalog:' - version: 4.7.5(picomatch@4.0.5)(svelte@5.56.3(@typescript-eslint/types@8.61.1))(typescript@6.0.3) + version: 4.7.5(picomatch@4.0.5)(svelte@5.56.8(@typescript-eslint/types@8.61.1))(typescript@6.0.3) typescript: specifier: 'catalog:' version: 6.0.3 vite: specifier: 'catalog:' - version: 8.1.5(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0) + version: 8.2.1(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0) packages/kit/test/build-errors/apps/prerender-entry-generator-mismatch: devDependencies: @@ -1145,22 +1145,22 @@ importers: version: link:../../../.. '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 7.0.0(svelte@5.56.3(@typescript-eslint/types@8.61.1))(vite@8.1.5(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0)) + version: 7.3.0(svelte@5.56.8(@typescript-eslint/types@8.61.1))(vite@8.2.1(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0)) '@typescript/native': specifier: 'catalog:' version: typescript@7.0.2 svelte: specifier: 'catalog:' - version: 5.56.3(@typescript-eslint/types@8.61.1) + version: 5.56.8(@typescript-eslint/types@8.61.1) svelte-check: specifier: 'catalog:' - version: 4.7.5(picomatch@4.0.5)(svelte@5.56.3(@typescript-eslint/types@8.61.1))(typescript@6.0.3) + version: 4.7.5(picomatch@4.0.5)(svelte@5.56.8(@typescript-eslint/types@8.61.1))(typescript@6.0.3) typescript: specifier: 'catalog:' version: 6.0.3 vite: specifier: 'catalog:' - version: 8.1.5(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0) + version: 8.2.1(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0) packages/kit/test/build-errors/apps/prerender-remote-function-error: devDependencies: @@ -1172,22 +1172,22 @@ importers: version: link:../../../.. '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 7.0.0(svelte@5.56.3(@typescript-eslint/types@8.61.1))(vite@8.1.5(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0)) + version: 7.3.0(svelte@5.56.8(@typescript-eslint/types@8.61.1))(vite@8.2.1(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0)) '@typescript/native': specifier: 'catalog:' version: typescript@7.0.2 svelte: specifier: 'catalog:' - version: 5.56.3(@typescript-eslint/types@8.61.1) + version: 5.56.8(@typescript-eslint/types@8.61.1) svelte-check: specifier: 'catalog:' - version: 4.7.5(picomatch@4.0.5)(svelte@5.56.3(@typescript-eslint/types@8.61.1))(typescript@6.0.3) + version: 4.7.5(picomatch@4.0.5)(svelte@5.56.8(@typescript-eslint/types@8.61.1))(typescript@6.0.3) typescript: specifier: 'catalog:' version: 6.0.3 vite: specifier: 'catalog:' - version: 8.1.5(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0) + version: 8.2.1(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0) packages/kit/test/build-errors/apps/prerender-root-non-html-server: devDependencies: @@ -1199,22 +1199,22 @@ importers: version: link:../../../.. '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 7.0.0(svelte@5.56.3(@typescript-eslint/types@8.61.1))(vite@8.1.5(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0)) + version: 7.3.0(svelte@5.56.8(@typescript-eslint/types@8.61.1))(vite@8.2.1(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0)) '@typescript/native': specifier: 'catalog:' version: typescript@7.0.2 svelte: specifier: 'catalog:' - version: 5.56.3(@typescript-eslint/types@8.61.1) + version: 5.56.8(@typescript-eslint/types@8.61.1) svelte-check: specifier: 'catalog:' - version: 4.7.5(picomatch@4.0.5)(svelte@5.56.3(@typescript-eslint/types@8.61.1))(typescript@6.0.3) + version: 4.7.5(picomatch@4.0.5)(svelte@5.56.8(@typescript-eslint/types@8.61.1))(typescript@6.0.3) typescript: specifier: 'catalog:' version: 6.0.3 vite: specifier: 'catalog:' - version: 8.1.5(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0) + version: 8.2.1(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0) packages/kit/test/build-errors/apps/prerenderable-incorrect-fragment: devDependencies: @@ -1226,22 +1226,22 @@ importers: version: link:../../../.. '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 7.0.0(svelte@5.56.3(@typescript-eslint/types@8.61.1))(vite@8.1.5(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0)) + version: 7.3.0(svelte@5.56.8(@typescript-eslint/types@8.61.1))(vite@8.2.1(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0)) '@typescript/native': specifier: 'catalog:' version: typescript@7.0.2 svelte: specifier: 'catalog:' - version: 5.56.3(@typescript-eslint/types@8.61.1) + version: 5.56.8(@typescript-eslint/types@8.61.1) svelte-check: specifier: 'catalog:' - version: 4.7.5(picomatch@4.0.5)(svelte@5.56.3(@typescript-eslint/types@8.61.1))(typescript@6.0.3) + version: 4.7.5(picomatch@4.0.5)(svelte@5.56.8(@typescript-eslint/types@8.61.1))(typescript@6.0.3) typescript: specifier: 'catalog:' version: 6.0.3 vite: specifier: 'catalog:' - version: 8.1.5(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0) + version: 8.2.1(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0) packages/kit/test/build-errors/apps/prerenderable-not-prerendered: devDependencies: @@ -1253,22 +1253,22 @@ importers: version: link:../../../.. '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 7.0.0(svelte@5.56.3(@typescript-eslint/types@8.61.1))(vite@8.1.5(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0)) + version: 7.3.0(svelte@5.56.8(@typescript-eslint/types@8.61.1))(vite@8.2.1(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0)) '@typescript/native': specifier: 'catalog:' version: typescript@7.0.2 svelte: specifier: 'catalog:' - version: 5.56.3(@typescript-eslint/types@8.61.1) + version: 5.56.8(@typescript-eslint/types@8.61.1) svelte-check: specifier: 'catalog:' - version: 4.7.5(picomatch@4.0.5)(svelte@5.56.3(@typescript-eslint/types@8.61.1))(typescript@6.0.3) + version: 4.7.5(picomatch@4.0.5)(svelte@5.56.8(@typescript-eslint/types@8.61.1))(typescript@6.0.3) typescript: specifier: 'catalog:' version: 6.0.3 vite: specifier: 'catalog:' - version: 8.1.5(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0) + version: 8.2.1(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0) packages/kit/test/build-errors/apps/remote-function-without-flag: devDependencies: @@ -1277,22 +1277,22 @@ importers: version: link:../../../.. '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 7.0.0(svelte@5.56.3(@typescript-eslint/types@8.61.1))(vite@8.1.5(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0)) + version: 7.3.0(svelte@5.56.8(@typescript-eslint/types@8.61.1))(vite@8.2.1(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0)) '@typescript/native': specifier: 'catalog:' version: typescript@7.0.2 svelte: specifier: 'catalog:' - version: 5.56.3(@typescript-eslint/types@8.61.1) + version: 5.56.8(@typescript-eslint/types@8.61.1) svelte-check: specifier: 'catalog:' - version: 4.7.5(picomatch@4.0.5)(svelte@5.56.3(@typescript-eslint/types@8.61.1))(typescript@6.0.3) + version: 4.7.5(picomatch@4.0.5)(svelte@5.56.8(@typescript-eslint/types@8.61.1))(typescript@6.0.3) typescript: specifier: 'catalog:' version: 6.0.3 vite: specifier: 'catalog:' - version: 8.1.5(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0) + version: 8.2.1(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0) packages/kit/test/build-errors/apps/removed-lib-import: devDependencies: @@ -1301,22 +1301,22 @@ importers: version: link:../../../.. '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 7.0.0(svelte@5.56.3(@typescript-eslint/types@8.61.1))(vite@8.1.5(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0)) + version: 7.3.0(svelte@5.56.8(@typescript-eslint/types@8.61.1))(vite@8.2.1(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0)) '@typescript/native': specifier: 'catalog:' version: typescript@7.0.2 svelte: specifier: 'catalog:' - version: 5.56.3(@typescript-eslint/types@8.61.1) + version: 5.56.8(@typescript-eslint/types@8.61.1) svelte-check: specifier: 'catalog:' - version: 4.7.5(picomatch@4.0.5)(svelte@5.56.3(@typescript-eslint/types@8.61.1))(typescript@6.0.3) + version: 4.7.5(picomatch@4.0.5)(svelte@5.56.8(@typescript-eslint/types@8.61.1))(typescript@6.0.3) typescript: specifier: 'catalog:' version: 6.0.3 vite: specifier: 'catalog:' - version: 8.1.5(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0) + version: 8.2.1(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0) packages/kit/test/build-errors/apps/removed-service-worker-import: devDependencies: @@ -1325,22 +1325,22 @@ importers: version: link:../../../.. '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 7.0.0(svelte@5.56.3(@typescript-eslint/types@8.61.1))(vite@8.1.5(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0)) + version: 7.3.0(svelte@5.56.8(@typescript-eslint/types@8.61.1))(vite@8.2.1(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0)) '@typescript/native': specifier: 'catalog:' version: typescript@7.0.2 svelte: specifier: 'catalog:' - version: 5.56.3(@typescript-eslint/types@8.61.1) + version: 5.56.8(@typescript-eslint/types@8.61.1) svelte-check: specifier: 'catalog:' - version: 4.7.5(picomatch@4.0.5)(svelte@5.56.3(@typescript-eslint/types@8.61.1))(typescript@6.0.3) + version: 4.7.5(picomatch@4.0.5)(svelte@5.56.8(@typescript-eslint/types@8.61.1))(typescript@6.0.3) typescript: specifier: 'catalog:' version: 6.0.3 vite: specifier: 'catalog:' - version: 8.1.5(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0) + version: 8.2.1(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0) packages/kit/test/build-errors/apps/server-only-folder: devDependencies: @@ -1349,22 +1349,22 @@ importers: version: link:../../../.. '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 7.0.0(svelte@5.56.3(@typescript-eslint/types@8.61.1))(vite@8.1.5(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0)) + version: 7.3.0(svelte@5.56.8(@typescript-eslint/types@8.61.1))(vite@8.2.1(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0)) '@typescript/native': specifier: 'catalog:' version: typescript@7.0.2 svelte: specifier: 'catalog:' - version: 5.56.3(@typescript-eslint/types@8.61.1) + version: 5.56.8(@typescript-eslint/types@8.61.1) svelte-check: specifier: 'catalog:' - version: 4.7.5(picomatch@4.0.5)(svelte@5.56.3(@typescript-eslint/types@8.61.1))(typescript@6.0.3) + version: 4.7.5(picomatch@4.0.5)(svelte@5.56.8(@typescript-eslint/types@8.61.1))(typescript@6.0.3) typescript: specifier: 'catalog:' version: 6.0.3 vite: specifier: 'catalog:' - version: 8.1.5(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0) + version: 8.2.1(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0) packages/kit/test/build-errors/apps/server-only-folder-dynamic-import: devDependencies: @@ -1373,22 +1373,22 @@ importers: version: link:../../../.. '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 7.0.0(svelte@5.56.3(@typescript-eslint/types@8.61.1))(vite@8.1.5(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0)) + version: 7.3.0(svelte@5.56.8(@typescript-eslint/types@8.61.1))(vite@8.2.1(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0)) '@typescript/native': specifier: 'catalog:' version: typescript@7.0.2 svelte: specifier: 'catalog:' - version: 5.56.3(@typescript-eslint/types@8.61.1) + version: 5.56.8(@typescript-eslint/types@8.61.1) svelte-check: specifier: 'catalog:' - version: 4.7.5(picomatch@4.0.5)(svelte@5.56.3(@typescript-eslint/types@8.61.1))(typescript@6.0.3) + version: 4.7.5(picomatch@4.0.5)(svelte@5.56.8(@typescript-eslint/types@8.61.1))(typescript@6.0.3) typescript: specifier: 'catalog:' version: 6.0.3 vite: specifier: 'catalog:' - version: 8.1.5(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0) + version: 8.2.1(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0) packages/kit/test/build-errors/apps/server-only-module: devDependencies: @@ -1397,22 +1397,22 @@ importers: version: link:../../../.. '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 7.0.0(svelte@5.56.3(@typescript-eslint/types@8.61.1))(vite@8.1.5(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0)) + version: 7.3.0(svelte@5.56.8(@typescript-eslint/types@8.61.1))(vite@8.2.1(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0)) '@typescript/native': specifier: 'catalog:' version: typescript@7.0.2 svelte: specifier: 'catalog:' - version: 5.56.3(@typescript-eslint/types@8.61.1) + version: 5.56.8(@typescript-eslint/types@8.61.1) svelte-check: specifier: 'catalog:' - version: 4.7.5(picomatch@4.0.5)(svelte@5.56.3(@typescript-eslint/types@8.61.1))(typescript@6.0.3) + version: 4.7.5(picomatch@4.0.5)(svelte@5.56.8(@typescript-eslint/types@8.61.1))(typescript@6.0.3) typescript: specifier: 'catalog:' version: 6.0.3 vite: specifier: 'catalog:' - version: 8.1.5(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0) + version: 8.2.1(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0) packages/kit/test/build-errors/apps/server-only-module-dynamic-import: devDependencies: @@ -1421,22 +1421,22 @@ importers: version: link:../../../.. '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 7.0.0(svelte@5.56.3(@typescript-eslint/types@8.61.1))(vite@8.1.5(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0)) + version: 7.3.0(svelte@5.56.8(@typescript-eslint/types@8.61.1))(vite@8.2.1(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0)) '@typescript/native': specifier: 'catalog:' version: typescript@7.0.2 svelte: specifier: 'catalog:' - version: 5.56.3(@typescript-eslint/types@8.61.1) + version: 5.56.8(@typescript-eslint/types@8.61.1) svelte-check: specifier: 'catalog:' - version: 4.7.5(picomatch@4.0.5)(svelte@5.56.3(@typescript-eslint/types@8.61.1))(typescript@6.0.3) + version: 4.7.5(picomatch@4.0.5)(svelte@5.56.8(@typescript-eslint/types@8.61.1))(typescript@6.0.3) typescript: specifier: 'catalog:' version: 6.0.3 vite: specifier: 'catalog:' - version: 8.1.5(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0) + version: 8.2.1(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0) packages/kit/test/build-errors/apps/server-only-shared: devDependencies: @@ -1445,22 +1445,22 @@ importers: version: link:../../../.. '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 7.0.0(svelte@5.56.3(@typescript-eslint/types@8.61.1))(vite@8.1.5(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0)) + version: 7.3.0(svelte@5.56.8(@typescript-eslint/types@8.61.1))(vite@8.2.1(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0)) '@typescript/native': specifier: 'catalog:' version: typescript@7.0.2 svelte: specifier: 'catalog:' - version: 5.56.3(@typescript-eslint/types@8.61.1) + version: 5.56.8(@typescript-eslint/types@8.61.1) svelte-check: specifier: 'catalog:' - version: 4.7.5(picomatch@4.0.5)(svelte@5.56.3(@typescript-eslint/types@8.61.1))(typescript@6.0.3) + version: 4.7.5(picomatch@4.0.5)(svelte@5.56.8(@typescript-eslint/types@8.61.1))(typescript@6.0.3) typescript: specifier: 'catalog:' version: 6.0.3 vite: specifier: 'catalog:' - version: 8.1.5(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0) + version: 8.2.1(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0) packages/kit/test/build-errors/apps/service-worker-invalid-app-imports: devDependencies: @@ -1469,13 +1469,13 @@ importers: version: link:../../../.. '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 7.0.0(svelte@5.56.3(@typescript-eslint/types@8.61.1))(vite@8.1.5(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0)) + version: 7.3.0(svelte@5.56.8(@typescript-eslint/types@8.61.1))(vite@8.2.1(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0)) svelte: specifier: 'catalog:' - version: 5.56.3(@typescript-eslint/types@8.61.1) + version: 5.56.8(@typescript-eslint/types@8.61.1) vite: specifier: 'catalog:' - version: 8.1.5(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0) + version: 8.2.1(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0) packages/kit/test/build-errors/apps/syntax-error: devDependencies: @@ -1484,22 +1484,22 @@ importers: version: link:../../../.. '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 7.0.0(svelte@5.56.3(@typescript-eslint/types@8.61.1))(vite@8.1.5(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0)) + version: 7.3.0(svelte@5.56.8(@typescript-eslint/types@8.61.1))(vite@8.2.1(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0)) '@typescript/native': specifier: 'catalog:' version: typescript@7.0.2 svelte: specifier: 'catalog:' - version: 5.56.3(@typescript-eslint/types@8.61.1) + version: 5.56.8(@typescript-eslint/types@8.61.1) svelte-check: specifier: 'catalog:' - version: 4.7.5(picomatch@4.0.5)(svelte@5.56.3(@typescript-eslint/types@8.61.1))(typescript@6.0.3) + version: 4.7.5(picomatch@4.0.5)(svelte@5.56.8(@typescript-eslint/types@8.61.1))(typescript@6.0.3) typescript: specifier: 'catalog:' version: 6.0.3 vite: specifier: 'catalog:' - version: 8.1.5(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0) + version: 8.2.1(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0) packages/kit/test/prerendering/basics: devDependencies: @@ -1508,25 +1508,25 @@ importers: version: link:../../.. '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 7.0.0(svelte@5.56.3(@typescript-eslint/types@8.61.1))(vite@8.1.5(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0)) + version: 7.3.0(svelte@5.56.8(@typescript-eslint/types@8.61.1))(vite@8.2.1(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0)) '@typescript/native': specifier: 'catalog:' version: typescript@7.0.2 svelte: specifier: 'catalog:' - version: 5.56.3(@typescript-eslint/types@8.61.1) + version: 5.56.8(@typescript-eslint/types@8.61.1) svelte-check: specifier: 'catalog:' - version: 4.7.5(picomatch@4.0.5)(svelte@5.56.3(@typescript-eslint/types@8.61.1))(typescript@6.0.3) + version: 4.7.5(picomatch@4.0.5)(svelte@5.56.8(@typescript-eslint/types@8.61.1))(typescript@6.0.3) typescript: specifier: 'catalog:' version: 6.0.3 vite: specifier: 'catalog:' - version: 8.1.5(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0) + version: 8.2.1(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0) vitest: specifier: 'catalog:' - version: 4.1.10(@opentelemetry/api@1.9.0)(@types/node@22.19.19)(@vitest/browser-playwright@4.1.10)(jsdom@30.0.1)(vite@8.1.5(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0)) + version: 4.1.10(@opentelemetry/api@1.9.1)(@types/node@22.19.19)(@vitest/browser-playwright@4.1.10)(jsdom@30.0.1)(vite@8.2.1(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0)) packages/kit/test/prerendering/options: devDependencies: @@ -1535,25 +1535,25 @@ importers: version: link:../../.. '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 7.0.0(svelte@5.56.3(@typescript-eslint/types@8.61.1))(vite@8.1.5(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0)) + version: 7.3.0(svelte@5.56.8(@typescript-eslint/types@8.61.1))(vite@8.2.1(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0)) '@typescript/native': specifier: 'catalog:' version: typescript@7.0.2 svelte: specifier: 'catalog:' - version: 5.56.3(@typescript-eslint/types@8.61.1) + version: 5.56.8(@typescript-eslint/types@8.61.1) svelte-check: specifier: 'catalog:' - version: 4.7.5(picomatch@4.0.5)(svelte@5.56.3(@typescript-eslint/types@8.61.1))(typescript@6.0.3) + version: 4.7.5(picomatch@4.0.5)(svelte@5.56.8(@typescript-eslint/types@8.61.1))(typescript@6.0.3) typescript: specifier: 'catalog:' version: 6.0.3 vite: specifier: 'catalog:' - version: 8.1.5(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0) + version: 8.2.1(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0) vitest: specifier: 'catalog:' - version: 4.1.10(@opentelemetry/api@1.9.0)(@types/node@22.19.19)(@vitest/browser-playwright@4.1.10)(jsdom@30.0.1)(vite@8.1.5(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0)) + version: 4.1.10(@opentelemetry/api@1.9.1)(@types/node@22.19.19)(@vitest/browser-playwright@4.1.10)(jsdom@30.0.1)(vite@8.2.1(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0)) packages/kit/test/prerendering/paths-base: devDependencies: @@ -1562,25 +1562,25 @@ importers: version: link:../../.. '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 7.0.0(svelte@5.56.3(@typescript-eslint/types@8.61.1))(vite@8.1.5(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0)) + version: 7.3.0(svelte@5.56.8(@typescript-eslint/types@8.61.1))(vite@8.2.1(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0)) '@typescript/native': specifier: 'catalog:' version: typescript@7.0.2 svelte: specifier: 'catalog:' - version: 5.56.3(@typescript-eslint/types@8.61.1) + version: 5.56.8(@typescript-eslint/types@8.61.1) svelte-check: specifier: 'catalog:' - version: 4.7.5(picomatch@4.0.5)(svelte@5.56.3(@typescript-eslint/types@8.61.1))(typescript@6.0.3) + version: 4.7.5(picomatch@4.0.5)(svelte@5.56.8(@typescript-eslint/types@8.61.1))(typescript@6.0.3) typescript: specifier: 'catalog:' version: 6.0.3 vite: specifier: 'catalog:' - version: 8.1.5(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0) + version: 8.2.1(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0) vitest: specifier: 'catalog:' - version: 4.1.10(@opentelemetry/api@1.9.0)(@types/node@22.19.19)(@vitest/browser-playwright@4.1.10)(jsdom@30.0.1)(vite@8.1.5(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0)) + version: 4.1.10(@opentelemetry/api@1.9.1)(@types/node@22.19.19)(@vitest/browser-playwright@4.1.10)(jsdom@30.0.1)(vite@8.2.1(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0)) packages/package: dependencies: @@ -1591,21 +1591,21 @@ importers: specifier: ^7.8.5 version: 7.8.5 svelte2tsx: - specifier: ~0.7.56 - version: 0.7.59(svelte@5.56.3(@typescript-eslint/types@8.61.1))(typescript@6.0.3) + specifier: ~0.7.59 + version: 0.7.59(svelte@5.56.8(@typescript-eslint/types@8.61.1))(typescript@6.0.3) devDependencies: '@sveltejs/kit': specifier: workspace:^ version: link:../kit '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 7.0.0(svelte@5.56.3(@typescript-eslint/types@8.61.1))(vite@8.1.5(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0)) + version: 7.3.0(svelte@5.56.8(@typescript-eslint/types@8.61.1))(vite@8.2.1(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0)) '@types/node': specifier: 'catalog:' version: 22.19.19 '@types/semver': specifier: 'catalog:' - version: 7.5.8 + version: 7.8.0 '@typescript/native': specifier: 'catalog:' version: typescript@7.0.2 @@ -1614,22 +1614,22 @@ importers: version: 3.9.6 prettier-plugin-svelte: specifier: 'catalog:' - version: 4.1.1(prettier@3.9.6)(svelte@5.56.3(@typescript-eslint/types@8.61.1)) + version: 4.1.1(prettier@3.9.6)(svelte@5.56.8(@typescript-eslint/types@8.61.1)) svelte: specifier: 'catalog:' - version: 5.56.3(@typescript-eslint/types@8.61.1) + version: 5.56.8(@typescript-eslint/types@8.61.1) svelte-preprocess: specifier: 'catalog:' - version: 6.0.5(postcss-load-config@3.1.4(postcss@8.5.19))(postcss@8.5.19)(svelte@5.56.3(@typescript-eslint/types@8.61.1))(typescript@6.0.3) + version: 6.0.5(postcss-load-config@3.1.4(postcss@8.5.26))(postcss@8.5.26)(svelte@5.56.8(@typescript-eslint/types@8.61.1))(typescript@6.0.3) typescript: specifier: ^6.0.3 version: 6.0.3 vite: specifier: 'catalog:' - version: 8.1.5(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0) + version: 8.2.1(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0) vitest: specifier: 'catalog:' - version: 4.1.10(@opentelemetry/api@1.9.0)(@types/node@22.19.19)(@vitest/browser-playwright@4.1.10)(jsdom@30.0.1)(vite@8.1.5(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0)) + version: 4.1.10(@opentelemetry/api@1.9.1)(@types/node@22.19.19)(@vitest/browser-playwright@4.1.10)(jsdom@30.0.1)(vite@8.2.1(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0)) packages/test-redirect-importer: dependencies: @@ -1668,19 +1668,16 @@ importers: version: link:../../packages/package '@sveltejs/vite-plugin-svelte': specifier: 'catalog:' - version: 7.0.0(svelte@5.56.3(@typescript-eslint/types@8.61.1))(vite@8.1.5(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0)) + version: 7.3.0(svelte@5.56.8(@typescript-eslint/types@8.61.1))(vite@8.2.1(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0)) '@typescript/native': specifier: 'catalog:' version: typescript@7.0.2 - publint: - specifier: 'catalog:' - version: 0.3.0 svelte: specifier: 'catalog:' - version: 5.56.3(@typescript-eslint/types@8.61.1) + version: 5.56.8(@typescript-eslint/types@8.61.1) svelte-check: specifier: 'catalog:' - version: 4.7.5(picomatch@4.0.5)(svelte@5.56.3(@typescript-eslint/types@8.61.1))(typescript@6.0.3) + version: 4.7.5(picomatch@4.0.5)(svelte@5.56.8(@typescript-eslint/types@8.61.1))(typescript@6.0.3) typescript: specifier: 'catalog:' version: 6.0.3 @@ -1689,7 +1686,7 @@ importers: version: 1.4.2(typescript@6.0.3) vite: specifier: 'catalog:' - version: 8.1.5(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0) + version: 8.2.1(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0) packages: @@ -1708,73 +1705,73 @@ packages: resolution: {integrity: sha512-ctxtJ/eA+t+6q2++vj5j7FYX3nRu311q1wfYH3xjlLOsczhlhxAg2FWNUXhpGvAw3BWo1xBcvOV6/YLc2r5FJw==} hasBin: true - '@changesets/apply-release-plan@8.0.0-next.11': - resolution: {integrity: sha512-PEBXU4RT4TDjqZLlQ8dKAptC/rhRTQHCb35cqNdkZNMUzEngW1HnW9e90RnBuC5I9n9BK6T0aeOVU/Z4Ep9Hdg==} + '@changesets/apply-release-plan@8.0.0': + resolution: {integrity: sha512-kUd2pbf1w5/AYmBMb0Tt+rkIPCjFJdT0SZMrkOjJT/WV/QbtmvkyB5jkV0oaNPheavprZk+SfUiozUti7TIL2w==} engines: {node: ^22.11 || ^24 || >=26} - '@changesets/assemble-release-plan@7.0.0-next.11': - resolution: {integrity: sha512-Ziwfmz4mRybA3nuXgXXRXSsYZJn+gXt2zp46hKEwlfTOXik/O/D4Ex0U9h6HWhm2t4hgsqt5O0StYjhop3P9Fg==} + '@changesets/assemble-release-plan@7.0.0': + resolution: {integrity: sha512-oEW8BxdA604kGGtDSCiHr5w9Tv4UWe9I2k61IBNZzCOE1kbYaJj4v+lFQNgcEZFkUc2pV/+hASErGDvpJOZCTg==} engines: {node: ^22.11 || ^24 || >=26} - '@changesets/changelog-git@1.0.0-next.9': - resolution: {integrity: sha512-v9YatKMVoljRPRPzI9PoxDHxBsLXZs+ndKBts6nOJlRpGHoGyzScOyC2YYce0krYhFxhn+lOiIto/7AOlTFuwA==} + '@changesets/changelog-git@1.0.0': + resolution: {integrity: sha512-3Dst2Ime2Op5nd4XmWJLPIgp11ZFqJqSkVug9izK6TDcIV4YlhPS4ECbEVR+eGI0bk0r1ItogD4j2Oli87bJrA==} engines: {node: ^22.11 || ^24 || >=26} '@changesets/changelog-github@1.0.0-next.9': resolution: {integrity: sha512-xGtpDLiJeQdyoOGNfKIKp09+o41J7KTNJ+QXWq8OqrzFbOCuI+KZC1AlyIDAsjZce3tBYLhu9sQtAMkmRnGOew==} engines: {node: ^22.11 || ^24 || >=26} - '@changesets/cli@3.0.0-next.12': - resolution: {integrity: sha512-/KqQB/YyZn6c01PpUkCrFjNUwMuCkMBOJfRiY6R66G88u2YJWYDr9iLP0y/imukkm7axvUPNRDvfdGXMArytfQ==} + '@changesets/cli@3.0.0': + resolution: {integrity: sha512-V7Gm+GP5OT3mJinMI2YcJD/JyO/a4WChnaMCCzTRhWHgu1zhtsyY7zCjP6n5W6zsgSjJKs+yPmvtREvE0F2g8A==} engines: {node: ^22.11 || ^24 || >=26, npm: '>=10.9.0', pnpm: '>=10.0.0', yarn: '>=4.5.2'} hasBin: true - '@changesets/config@4.0.0-next.10': - resolution: {integrity: sha512-+4fnpbGlL3igY8Q4H8JXNz/c0rl9bX7VC/3skkzZoXDPENVAbDtlIqYo4jhh7uZVttiicp37Uos0YBEOfCZFcw==} + '@changesets/config@4.0.0': + resolution: {integrity: sha512-mw95/YrkOuhZZxfnVAA4bSXOFUi+KlhzOBTM8C4x777NhUU6HWIl9Z+K+nME+E4PVsv5NQVQwTfiHihAS1A/ow==} engines: {node: ^22.11 || ^24 || >=26} - '@changesets/errors@1.0.0-next.4': - resolution: {integrity: sha512-ZUoabMz+a4t0/Eoz5uUHzufcWfXIlkpCuCUWUMkWErqcCjgB0pwuPWSU2CamhufsG7ZKDUlUoIGVSQWyPc77CA==} + '@changesets/errors@1.0.0': + resolution: {integrity: sha512-ElN/mEzn6zmETgjwf5MclCMa9ef59sAR0lfO8VSYIsiRvbC2FbLB/92EoYw10Sl0kGixxHFiJZUSv7dA+YpR8g==} engines: {node: ^22.11 || ^24 || >=26} '@changesets/format@0.1.1': resolution: {integrity: sha512-OBN/xfe+lcNWCv8P4Ogop9EOTi5QRKd1c2JJfZRBT9AT3AybzDYDfHeX4Y7j20Q4e16BPu3XvcdOe9sPZmTEig==} engines: {node: ^22.11 || ^24 || >=26} - '@changesets/get-dependents-graph@3.0.0-next.9': - resolution: {integrity: sha512-zyukhblBz0TO7Ze4rJHS/LN8dLvNpKPGEm3YhYRpZnlRCT+r4X9YtrHJjUFHbnjn2wNRRzzy6eHzsFn43YI3jQ==} + '@changesets/get-dependents-graph@3.0.0': + resolution: {integrity: sha512-ji/t5wFA1zREKXRUePE6Qi+Qu2UgxCeSSGQrphezwvQZrp49B7sJ+8+wvM0tA7zPeSxYKCojDy3WWgrl+s+awg==} engines: {node: ^22.11 || ^24 || >=26} '@changesets/get-github-info@1.0.0-next.4': resolution: {integrity: sha512-Bosh+XOoFvLMzAj301tg6phbrEggBtvEccrnceEvYsKSM7PjcIa32Fy22SU5g+501HZywkdwcAlybdWF+e/zzw==} engines: {node: ^22.11 || ^24 || >=26} - '@changesets/git@4.0.0-next.9': - resolution: {integrity: sha512-7WqrwEVpsKZKbBGR7hPRuHTbkIMiDdoyxSsQDOWrmuBh13wDTGaIV6yYQoOs0I3l56khxydm/68v01c/+4g9jQ==} + '@changesets/git@4.0.0': + resolution: {integrity: sha512-uIEswpPUgzBBqrC0qg13byNaPorzhf05LE2T+gRizEKCXvMsJC6NPJp5iNDSV/gYj4Viqh09UiOF5E7XWeH5lQ==} engines: {node: ^22.11 || ^24 || >=26} - '@changesets/parse@1.0.0-next.10': - resolution: {integrity: sha512-ENFmw8Ytq6fNY3O+uC99KDdChZ3dM8PFgth3qi1Ms78GCCHsSgik0ojQwGht5VPsP6WhfTkNqW3fCakFt+euHg==} + '@changesets/parse@1.0.0': + resolution: {integrity: sha512-P0iaMb9p9CRYZiTgAllEIF9AUMQHIy1G72tKlcIqJp61icZSsKQNiOPdxAMZG8m/DvZwt/oz5xEbTpike//dWg==} engines: {node: ^22.11 || ^24 || >=26} - '@changesets/pre@3.0.0-next.9': - resolution: {integrity: sha512-NznGjw/PCDy6d74DusPriYbLZQl6O8cvRwuv/qsSKUTF/9O9+EvJnXTx+wtHS9SLJnJqRaGprQ1EMSkjRRyDGQ==} + '@changesets/pre@3.0.0': + resolution: {integrity: sha512-Zm/6YliV/a2oeWTqHJf6KxLrQwgcK1i/BRDl2m0EKZvbnxV5fG9QRhwJJGshjsZTUTS6dkfURQ2K6aAvgNw/3Q==} engines: {node: ^22.11 || ^24 || >=26} - '@changesets/read@1.0.0-next.10': - resolution: {integrity: sha512-wmhNbv8gnN6Gv6dpFftmqkyy5OTQfFWFlyfwLa7s+b0vMihA5ZYwU/Zd8VN53AsSlYp6k8s4sc43ZJk0zUIkRA==} + '@changesets/read@1.0.0': + resolution: {integrity: sha512-8TdE2PwG6yArPt5Ozej83Z6iHz1G8BDBKvIEKZ455MccR4K3GNbLR2XqjBxa+5yLFnEd3xAOPXYboBg1pt8stQ==} engines: {node: ^22.11 || ^24 || >=26} - '@changesets/should-skip-package@1.0.0-next.9': - resolution: {integrity: sha512-KaDRCnNy+J4Q8vTZIyKGV3wtDyW79bJN7+XBg919ZKneAj7jJpJLIPkVK+MlyGqyWoxhWEcDBRZ3aTjVkx/tnw==} + '@changesets/should-skip-package@1.0.0': + resolution: {integrity: sha512-pwqoJmbONn1XgXmZXPEExgAaT+HdZLjALFTDgIm+PnS5KeO2nLtzA2/Q+4aMFY14kFMuXKG30MObhvDzWgzDgg==} engines: {node: ^22.11 || ^24 || >=26} - '@changesets/types@7.0.0-next.9': - resolution: {integrity: sha512-okzQIKr+HZXZne37+QI0o0GrKNNTinP8jqsSdr2jUXEt8qhiwdG/X2o7aukp4WBtG4R395BOGyJVfaCy+xg7IA==} + '@changesets/types@7.0.0': + resolution: {integrity: sha512-c5GoiQyt3pxiXjrWSNoP8/GRf4kG+VnKzovx1OQM8dYYALlSwgedmkPmJ+ZqGxqwg9D3Bkj85Uo4KLd5BN3A0w==} engines: {node: ^22.11 || ^24 || >=26} - '@changesets/write@1.0.0-next.9': - resolution: {integrity: sha512-vZ7iTrI8FhJydoWla4G9LSk1kJf4yOtA9m3h9Wffvn+0v5DXUe3LrP/7ZBxHlFCu+WY5ypKo+ClLaDvB9I7Zpg==} + '@changesets/write@1.0.0': + resolution: {integrity: sha512-xCK3/4C7Z7muQB/wguE6HcbjtY9iOtaK9orZKE+7xi573cMGD8rLZz7qlo6IvK7s+SIUIKajzj1l+F1QuP97tw==} engines: {node: ^22.11 || ^24 || >=26} '@clack/core@1.4.3': @@ -1798,38 +1795,38 @@ packages: workerd: optional: true - '@cloudflare/workerd-darwin-64@1.20260730.1': - resolution: {integrity: sha512-+MBHmPaiTe2KajryW0T24rZvWFxb41hD3d8anNzQqHzft6vSEb18+sp0znSwxgij7ApPhSM1+vhkNg4f3YMguA==} + '@cloudflare/workerd-darwin-64@1.20260804.1': + resolution: {integrity: sha512-191/PPEFicRK2wK69eXzSjnLgHL79k7zR2VUpyIr8rhFgGns1b5bTHgnBuUrgU2LPbEtwbE5eL2hJ0uhLAFEow==} engines: {node: '>=16'} cpu: [x64] os: [darwin] - '@cloudflare/workerd-darwin-arm64@1.20260730.1': - resolution: {integrity: sha512-SBHKntPkKvNPgaCrTe99xC1CAl8ygJDzlYfK0LbuJ1muKadIw35WnhO0wu894fKBtllsVQdNzDLee+cm0ppLSQ==} + '@cloudflare/workerd-darwin-arm64@1.20260804.1': + resolution: {integrity: sha512-aI2cAFLsrNkSz3kLSQrgrO9ICTfY7jb2h0jgaWDE9mQLQQDfpXeYrKWt07tTgMmeNP79o9w3NZe3aqtt8mTGHQ==} engines: {node: '>=16'} cpu: [arm64] os: [darwin] - '@cloudflare/workerd-linux-64@1.20260730.1': - resolution: {integrity: sha512-ouyPOSMbiKPeSwUJUvxtMcxGAXs2J4aPE4T5ABIYX5ClcQx5j5bbHTmnqOQEY8sAuLTPjH7dY+iB6UI5ISlwwA==} + '@cloudflare/workerd-linux-64@1.20260804.1': + resolution: {integrity: sha512-KBCjxBIlN2jucfQGaTK4EgmPsWzQgYR/zYhPfi3mkWwdoTyG1dgrt2aizKps/SYse85ci/SOxojKk0/K7vstPw==} engines: {node: '>=16'} cpu: [x64] os: [linux] - '@cloudflare/workerd-linux-arm64@1.20260730.1': - resolution: {integrity: sha512-YQ+Mi78U3TPdgBPtwq+Sm6rJU+Ihl2y0pjYtuuKkdmUbYzL7oLR6Xqq9wljhasnuCFICssDJaqhMep5WizYoEQ==} + '@cloudflare/workerd-linux-arm64@1.20260804.1': + resolution: {integrity: sha512-7lswfarBZ7xkHpTFrNb74ExwOltIalVaASc+GOYfCNtnwFxK/JZSVByfm/hnZEBtrHU7fMY2z7dYT64rwS0pHg==} engines: {node: '>=16'} cpu: [arm64] os: [linux] - '@cloudflare/workerd-windows-64@1.20260730.1': - resolution: {integrity: sha512-27fAN+vUECW1oYVc1KOcHYpkL8COM2Uxtxql7TL595kxbjoqS5yckw7NLz7bTf2pALFCZWjqXDjZGJ/xbG4ZKQ==} + '@cloudflare/workerd-windows-64@1.20260804.1': + resolution: {integrity: sha512-GOgRWYtxISN5rAWfx3K7zubt3xEn0/ZPFrbcLL+GwT4ouCKyNoHqfT1cPNB6Nx7t8BHEjnuTG7gkHO4Wd5ORdg==} engines: {node: '>=16'} cpu: [x64] os: [win32] - '@cloudflare/workers-types@5.20260804.1': - resolution: {integrity: sha512-B1dwxpN6e5RZXZkE5zpZj+ooNeNZ1mwavLIyHDYe10ojhlGTwDfe8sAl7R1mMXc1cyIsbr+jKVdvmMEyVcdTdg==} + '@cloudflare/workers-types@5.20260809.1': + resolution: {integrity: sha512-sBM+0I5lCY9LgTnorn/N2UyrA6KVbUzj9tncxwH8v6sH8tVeAyJj+i0z3xXWY4l4fd1oDcwt8CGf50vGwVISYQ==} '@cspotcode/source-map-support@0.8.1': resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} @@ -1871,21 +1868,9 @@ packages: resolution: {integrity: sha512-QxULHAm7cNu72w97JUNCBFODFaXpbDg+dP8b/oWFAZ2MTRppA3U00Y2L1HqaS4J6yBqxwa/Y3nMBaxVKbB/NsA==} engines: {node: '>=20.19.0'} - '@emnapi/core@1.11.1': - resolution: {integrity: sha512-RSvbQmHzdKzNsLYa/wHrbc3KN4sYLKAdPZxqiM2HATqv/SBk2/ENSHpvXGaLOMcsAyz0poEGqkmmKYG3OWiJEQ==} - - '@emnapi/core@1.11.2': - resolution: {integrity: sha512-TC8MkTuZUtcTSiFeuC0ksCh9QIJ5+F21MvZ4Wn4ORfYaFJ/0dsiudv5tVkejgwZlwQ39jL9WWDe2lz8x0WglOA==} - - '@emnapi/runtime@1.11.1': - resolution: {integrity: sha512-vgj7R3y3Wgx24IQaGPA/R6YFXLHVMOZ0uVEyIQPaWs+rd1AzfEMXlAC22FYwO1XkKR6NPsq7mUandH8oIRdZFw==} - '@emnapi/runtime@1.11.2': resolution: {integrity: sha512-kyOl3X0DuTiT1h2ft8r2fYO8JYtU9a9Xis/zBSiGArNaagCOWx90N1k2wxp18czFDH+OgcWGb5ZP/XMt3dcyPA==} - '@emnapi/wasi-threads@1.2.2': - resolution: {integrity: sha512-c95qOXkHdydNKhscBTebqEC1CVAZpyqOfVfBzQ1qgzyl3gfeldUjIggDbIZgDKsHLgnsM+igH7TJ/eAasaVuMA==} - '@esbuild/aix-ppc64@0.28.1': resolution: {integrity: sha512-Svl7tq8k/08+p6CXPpRjQ1fKX+1odH/BQbb48fV6fj3CWHhsoIOoY87w1oHXm0qEpkIK3ZfVgp0hed3XBXzXMQ==} engines: {node: '>=18'} @@ -2090,8 +2075,8 @@ packages: '@noble/hashes': optional: true - '@fontsource/libre-barcode-128-text@5.1.0': - resolution: {integrity: sha512-MC7foQFRT0NDcsqBWQua2T3gs/fh/uTowTxfoPqGQWjqroiMxRZhQh7jerjnpcI+Xi3yR5bwCo6W2uwCza1FRw==} + '@fontsource/libre-barcode-128-text@5.3.0': + resolution: {integrity: sha512-QHATuG1O7twkXA1yZxcgeYjH9kf6d/0YLzVRBgRhGH4yXzkD131OI1SHlwWn+h58BR0sfGpYTfB0eGfPfLBh6A==} '@grpc/grpc-js@1.14.4': resolution: {integrity: sha512-k9Dj3DV/itK9D06Y8f190Qgop7/Ui+D0njFV3LHMPwPT75DpXLQohE9Wmz0QElrJnzsjB7KPWiKJbOl7IPDArQ==} @@ -2496,12 +2481,6 @@ packages: engines: {node: '>=18'} hasBin: true - '@napi-rs/wasm-runtime@1.1.6': - resolution: {integrity: sha512-ZLv/JdUfkvOy9eCnnBaGfiO+XimbjebAeO+MRQqD/B+FR1tnRN0tpKSJHRbE8sFfS6aqsXZ67TQjfwfsxULVbg==} - peerDependencies: - '@emnapi/core': ^1.7.1 - '@emnapi/runtime': ^1.7.1 - '@netlify/edge-functions@3.0.8': resolution: {integrity: sha512-ml1oCDsRTTRmZS2nUj8XRD1b6+foEiZT3lPk7qQ4nv/jnxylHJ20ooPzPDH+cJmGjXFrMeR14/91W1o6D2ftBg==} engines: {node: '>=18.0.0'} @@ -2514,8 +2493,8 @@ packages: resolution: {integrity: sha512-OlanaW1vv7ufTqQ3/fPLI4arGt5ZoM+P8abOMki6uEYnpRazepSWDwDnnw+la7kE26SHVC18//SMccrDvLKOXQ==} engines: {node: '>=8.0.0'} - '@opentelemetry/api@1.9.0': - resolution: {integrity: sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==} + '@opentelemetry/api@1.9.1': + resolution: {integrity: sha512-gLyJlPHPZYdAk1JENA9LeHejZe1Ti77/pTeFm/nMXmQH/HFZlcS/O2XJB+L8fkbrNSqhdtlvjBVjxwUYanNH5Q==} engines: {node: '>=8.0.0'} '@opentelemetry/configuration@0.221.0': @@ -2684,11 +2663,8 @@ packages: resolution: {integrity: sha512-TtxJSRD8Ohxp6bKkhrm27JRHAxPczQA7idtcTOMYI+wQRRrfgqxHv1cFbCApcSnNjtXkmzFozn6jQtFrOmbjPQ==} engines: {node: '>=14'} - '@oxc-project/types@0.139.0': - resolution: {integrity: sha512-r9gHphtCs+1M7J0pw6Sn/hh/Wpa/iQrOOkrNAlVLF/gHq+/CJmHIWKKUUhdWjcD6CIa8idarspCsASiXCXvFUw==} - - '@oxc-project/types@0.140.0': - resolution: {integrity: sha512-h5LUOzGArYemnW1NMz/DuuQhBi96J6JL2Bk8zE4kvqxB5Sg3jxmCiH4uyOWHDkiKSt5vWlG4FIwCR/DbstcNRQ==} + '@oxc-project/types@0.143.0': + resolution: {integrity: sha512-u6JZdLBTLotrNC9Vd6vPssINdzcCzleKAH6EJKImQb7GtYvX5keN2dxkoK44stCc4tffE6QQRtZTXVSzsLUlWA==} '@oxfmt/binding-android-arm-eabi@0.62.0': resolution: {integrity: sha512-pdsv0C4gPjJ8H1+sd8u0BDx+yLACTL+rgeMIOL1ln4ihSnhw8CWXtYWgvcSkyTfgGBIzFKab+d8rx9Xl4en/Kw==} @@ -2821,8 +2797,8 @@ packages: resolution: {integrity: sha512-pOr5+q1fLYKwFN3LAJuGZEnfXDcQ73zqgDHMtGy+K+uIoUqyY+6MeDCWFwfu+4EFuq76I5EPFofoNAI+Bmmq4A==} engines: {node: '>=22.13'} - '@polka/url@1.0.0-next.28': - resolution: {integrity: sha512-8LduaNlMZGwdZ6qWrKlfa+2M4gahzFkprZiAt2TF8uS0qQgBizKXpXURqvTJ4WtmupWxaLqjRb2UCTe72mu+Aw==} + '@polka/url@1.0.0-next.29': + resolution: {integrity: sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==} '@poppinss/colors@4.1.6': resolution: {integrity: sha512-H9xkIdFswbS8n1d6vmRd8+c10t2Qe+rZITbbDHHkQixH5+2x1FDGmi/0K+WgWiqQFKPSlIYB7jlH6Kpfn6Fleg==} @@ -2860,196 +2836,92 @@ packages: '@protobufjs/utf8@1.1.1': resolution: {integrity: sha512-oOAWABowe8EAbMyWKM0tYDKi8Yaox52D+HWZhAIJqQXbqe0xI/GV7FhLWqlEKreMkfDjshR5FKgi3mnle0h6Eg==} - '@publint/pack@0.1.0': - resolution: {integrity: sha512-NvV5jPAQIMCoHvaJ0ZhfouBJ2woFYYf+o6B7dCHGh/tLKSPVoxhjffi35xPuMHgOv65aTOKUzML5XwQF9EkDAA==} - engines: {node: '>=18'} - - '@rolldown/binding-android-arm64@1.1.5': - resolution: {integrity: sha512-lZg8fqIv2v7FF237bwMgzGZEJvGL79/s5knJ/i6FmsGF4XXlzccZ4jb+TrFIxtSSxFtIpdsgrPZeMk1I9AFcyQ==} + '@rolldown/binding-android-arm64@1.2.3': + resolution: {integrity: sha512-zrJtHDcaZJ1Fp7xf4hNl+7seH9Cn/N5TwLYkhgXREtBwAd/jaqW3uqeHxpDugJLVICWg4eW44kOQEGJ1r6jCGw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [android] - '@rolldown/binding-android-arm64@1.2.0': - resolution: {integrity: sha512-9yB1l95IrJuNGDFdOYe79vdApdz6WWBCObE+rQ2LUliYUlcyFwSYIb2xb5/Ifw7dAtMy2ZqNyd8QTSOc7duAKw==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [android] - - '@rolldown/binding-darwin-arm64@1.1.5': - resolution: {integrity: sha512-51Bnx9pNiMRKSUNtBfySkNJ9vMU9Hh3I1ozDd6gyPPYzaXCfnptUcEZxXGYFn+ul2dtcMUiqGR1Yai2K10uoTw==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [darwin] - - '@rolldown/binding-darwin-arm64@1.2.0': - resolution: {integrity: sha512-pexNaW9ACLUOaBITOpU6qVu4VrsOFIjTv6bzgu0YUATo4eUJx0V605PxwZfndpPOn0ilqGqvGQ0M8UW0IE24jg==} + '@rolldown/binding-darwin-arm64@1.2.3': + resolution: {integrity: sha512-ieIiibVCp0tX7TLu2cafoNPv8wJyYi01ekXpbf8q2j7F4rGAhhXb/eQh7ge9DRBY78GwmRQtvjZDux7EDbA8kA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [darwin] - '@rolldown/binding-darwin-x64@1.1.5': - resolution: {integrity: sha512-Tm+gbfC0aHu1tBA/JvKQh32S0K6YgCHkiAF4/W6xX0K0RmNuc94VeK419dJoE65R5aRxmo+noZQSWrAMF6yb6g==} + '@rolldown/binding-darwin-x64@1.2.3': + resolution: {integrity: sha512-Zh9tCon19eDXJoihx0rqKhMUlMYqzwj3aPsSuHmI4RWZh62dWUL+DJN4C5YQya5TcQBJU/Fe8+rY0jhXTQITqA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [darwin] - '@rolldown/binding-darwin-x64@1.2.0': - resolution: {integrity: sha512-NqKYaq0355ZmNMG4QGpxtEDxsc7tGDhjhCm4PpE0cwnBW+5Il95LJyq414niEiaKLVjnVHBEjSo1wngKxJNiFw==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [x64] - os: [darwin] - - '@rolldown/binding-freebsd-x64@1.1.5': - resolution: {integrity: sha512-JMzDKCCXq93YccG5gz3hvOs1oXRKAf0XYpfOS88e+wZrC8Iugj6j68867vrYZkvpDDpKn/KoKORThmchMpF6TA==} + '@rolldown/binding-freebsd-x64@1.2.3': + resolution: {integrity: sha512-nGbJWewA1wrXXZiQhjAT5rhibGfns5ZNkDVqxsO6zJ3f3YvpoDNNmGMSbbhLuXKjNScaBJVOAboztAWVespQMg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [freebsd] - '@rolldown/binding-freebsd-x64@1.2.0': - resolution: {integrity: sha512-3vPoHzh6eBTz9IbB0/qZdSr0Qeks2echn+I4cHu2joV74VriPDdldswksEDzrl1mBB+oPRi+67+3Ib59paxIPQ==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [x64] - os: [freebsd] - - '@rolldown/binding-linux-arm-gnueabihf@1.1.5': - resolution: {integrity: sha512-uML21j2K5TfPGutKxub+M+nLjZIrWjXQ5Grx4lCe/nimTj9B4L63zHpjXLl4y0L3mcm2htEQIb06oCG/szerNw==} + '@rolldown/binding-linux-arm-gnueabihf@1.2.3': + resolution: {integrity: sha512-QNniJr5Kml0kDEB98jiDOJjXNroxIIi0IXIbdYzY26Xt1pVbeP62+KnoIZLwirOymX/0jDk/2gI/bNUv7A7OIw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] - '@rolldown/binding-linux-arm-gnueabihf@1.2.0': - resolution: {integrity: sha512-E6NNefZ1bUVmKJq2tJkf45J4Zyczj7qm9rUT7NY+Xo2474Y13qWAwc2tvBt0BAVbmtXR1llkxXg0Ou1jbDf2SQ==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm] - os: [linux] - - '@rolldown/binding-linux-arm64-gnu@1.1.5': - resolution: {integrity: sha512-navSiuTMogvnQoZoM/v+l3ZWo50/NTwSHSzheABx/RCnmUPaKwq9qSo4Br2OYRs21+Fz8uFqITZM3H4opOB0/Q==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [linux] - libc: [glibc] - - '@rolldown/binding-linux-arm64-gnu@1.2.0': - resolution: {integrity: sha512-D+TgkdgM1vu+7/Fpf8+v0ARW+RXEP9Ccazgm8zQ4JFFd9Q7SrYQ2TakU5S5ihazQDgpKyAgZDOcIFsvoHmTZ8w==} + '@rolldown/binding-linux-arm64-gnu@1.2.3': + resolution: {integrity: sha512-TkqEAcmmvH3I/q4114NB4RVt6241Dao48pF45uLcFGrwAaIn0iITgTAKP/dLjbN0R4buJjGb91+UHSoFmpgIWw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [glibc] - '@rolldown/binding-linux-arm64-musl@1.1.5': - resolution: {integrity: sha512-lAryqH7IteztmCXQXk0etKj4wBQ7Gx5S6LjKhsgp9zb8I5bsuvU/2llH1hDQcjsFeqIsovMVN339/8pUDDBXxA==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [linux] - libc: [musl] - - '@rolldown/binding-linux-arm64-musl@1.2.0': - resolution: {integrity: sha512-wUqdwJBbAv0APN87GecstdMUtLjjNTs0hBALpxETD73mccFxdmt/XeizXDtN5RAlBwNKmI+Tg+blect2G+8IeQ==} + '@rolldown/binding-linux-arm64-musl@1.2.3': + resolution: {integrity: sha512-NHqjnxpsndf4MPymxteFAWHHfkTL8HjWh1KB7z23ofZ6QO2euONuxDXjat69dKZRALnGypg8k8SsK8vZJoXv1Q==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [musl] - '@rolldown/binding-linux-ppc64-gnu@1.1.5': - resolution: {integrity: sha512-fsK/sNBnxzBlL4O1JNrZakVQxPspqpED5dLtNsZS9oOKmtSpdNIzxH2kkol5HYTWJN47sE20ztMJPxfZ89qGOg==} + '@rolldown/binding-linux-ppc64-gnu@1.2.3': + resolution: {integrity: sha512-6tbrbwfz5GB9DQ4Jwo6hy9v+vR31xZlvzZ6n5Xut6Hhx5PvrA9q/HsK8KMaYQp063iqZGXwNvZtYNLD7EM/x0w==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ppc64] os: [linux] libc: [glibc] - '@rolldown/binding-linux-ppc64-gnu@1.2.0': - resolution: {integrity: sha512-9DtF35qR9/NrfhM4oxLplCzVVjE+KKm8Pjemi0i/sdhAWkUasjmSo8WTTubNJClhSHCfyk2yeyoXDQEDPtDAAw==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [ppc64] - os: [linux] - libc: [glibc] - - '@rolldown/binding-linux-s390x-gnu@1.1.5': - resolution: {integrity: sha512-gLYb4BIadlfTOYT5gO503n8zQjXflgzpD0FcyKh0Mzx3rqCZKnHoJWV9xe1KXUJ5lx2JfcSHr/mhzS0PC/McAA==} + '@rolldown/binding-linux-s390x-gnu@1.2.3': + resolution: {integrity: sha512-oyuXxXmoZHjXC917IAPFAAv4wWAa0cM9afk8nx1+9/jNNOX1uPf8yDA6p7G0RypOfw/X0PQt5IfoquY1um+zSg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [s390x] os: [linux] libc: [glibc] - '@rolldown/binding-linux-s390x-gnu@1.2.0': - resolution: {integrity: sha512-RzuHrBh8X8Hntd2N4VR02QGEciq/9JhcZoTpR/Cee6otRrlILGCf3cg2ygHuih+ZebUnWmMrDX6ITI85btO6rQ==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [s390x] - os: [linux] - libc: [glibc] - - '@rolldown/binding-linux-x64-gnu@1.1.5': - resolution: {integrity: sha512-FjcpEKUyJygHgs1o50VYNvkt5+7Le/VEdYt0AkRpkL33MnyQfwr8l5mXwMmfmTbyMPr5vJLC+8/Gd9gXnwU1QQ==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [x64] - os: [linux] - libc: [glibc] - - '@rolldown/binding-linux-x64-gnu@1.2.0': - resolution: {integrity: sha512-MK7L0018jjh1jR3mh21G2j1zAVcpscJBlPo2z19pRjv2XOYGRhaV4LyiD8HO6nCDdZln9IFgCMIV5yt4E3klGQ==} + '@rolldown/binding-linux-x64-gnu@1.2.3': + resolution: {integrity: sha512-TytMwF2KVGqP2tgd0I1OY0PAv78dZRAYcF5ssDzjM34SUXCED3uXvSd5+lHoC0bTD6eEdFz7LdQNCO1y0oVk9w==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [glibc] - '@rolldown/binding-linux-x64-musl@1.1.5': - resolution: {integrity: sha512-Me+PfPI2TMeOQk0gYWfLQZtTktrmzbr8cDboqX83XKc7UrgAi55gF+2dUkWdxd19n55Essp2yeca+O9N5rBxHg==} + '@rolldown/binding-linux-x64-musl@1.2.3': + resolution: {integrity: sha512-/E9m3qstrJFVPoULV25mVQblSNExY2+kBsYe4sy0Tn0yOOgJ8wZbZt3KnRbF/XeU2Gl1STKUQnDNTqhIE5MD4A==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [musl] - '@rolldown/binding-linux-x64-musl@1.2.0': - resolution: {integrity: sha512-gyrxLQ9NfGb/9LoVnC4kb9miUghw1mghnkfYvNHSnVIXriabnfgGPUP4RLcJm87q3KgYz4FYUG8IDiWUT+CpSw==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [x64] - os: [linux] - libc: [musl] - - '@rolldown/binding-openharmony-arm64@1.1.5': - resolution: {integrity: sha512-yc5WrLzXks6zCQfn9Oxr8pORKyl/pF+QjHmW/Qx3qu0oyrrNC+y2JLTU1E2rcWYAmzlnqngWXHQjy51VzW70Vw==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [openharmony] - - '@rolldown/binding-openharmony-arm64@1.2.0': - resolution: {integrity: sha512-/6VFMQGRmrhP77KXDC+StIxGzcNp5JOIyYtw0CQ8gPlzhpiIRucYfoM5FaFamHd5BJYIdH86yfP46l1p3WdrFA==} + '@rolldown/binding-openharmony-arm64@1.2.3': + resolution: {integrity: sha512-Kr0OcsoQI816i6HOl3vFHpd1K0eZyh76zgfj4c1nTyaTsd5r2Mj1lwM4R90y/qaCfmTn9eHy0SKwi98eitRxug==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [openharmony] - '@rolldown/binding-wasm32-wasi@1.1.5': - resolution: {integrity: sha512-VbQGPX2b4r48TAMIM2cjgluIM1HYutm4pcTEJsle7iEP7sB1dFqtPLBVbdLAZCxy1txCcPxf4QFf4v8uvltPqA==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [wasm32] - - '@rolldown/binding-wasm32-wasi@1.2.0': - resolution: {integrity: sha512-rwdbUL465kisF24WEJLvP3JrEG6E5GRuIHt5wpMwHGERtHe4Wm2CIvtf5gTBgr2tGOHKh5NdKEAFS2VkOPE91g==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [wasm32] - - '@rolldown/binding-win32-arm64-msvc@1.1.5': - resolution: {integrity: sha512-gHv82k63z4qpV5+Q1y/12KrK0ltWBukVDI8nZcbT7Tt/ZlOIVwppazneq0F93oDxTo3IgAMEDIoQh3E2n6mVsw==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [win32] - - '@rolldown/binding-win32-arm64-msvc@1.2.0': - resolution: {integrity: sha512-+5suHwRiKGmhwyUaNT8a5QbrBvLFh2DbO910TEmGRH1aSxwrCezodvGQnulv4uiWEIv1Kq4ypRsJ5+O+ry1DiA==} + '@rolldown/binding-win32-arm64-msvc@1.2.3': + resolution: {integrity: sha512-hOtMwTqnME+/gJcH/PCZ0wn0zPUjiWOgkHpxbSJpfGKMezHltx1S7/k1SitzVa7Ww2cqrDDaFbZEhcJZO8o+Jw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [win32] - '@rolldown/binding-win32-x64-msvc@1.1.5': - resolution: {integrity: sha512-tTZuDBPw85tEN5PQi1pnEBzDy0Z49HtScLAbD5t6hyeU92A95pRWaSMw1GZZi/RwgSgUIl0xrSlXIT/9QzvYSA==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [x64] - os: [win32] - - '@rolldown/binding-win32-x64-msvc@1.2.0': - resolution: {integrity: sha512-WfFv6/qGufotqBSBzBYwgpCkJBk8Nj7697LL9vTz/XWc67e0r3oewu8iMRwQj3AUL45GVD7wVsPjCsAAtW66Wg==} + '@rolldown/binding-win32-x64-msvc@1.2.3': + resolution: {integrity: sha512-ekcqMMkI2PlhYnfzQnB/cEdYUVVJViWvoUyLrbzgDoi3Snfc1mVBwdnc306ufA5ejy8JSPjT2RlW1nQSjW7efg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [win32] @@ -3082,13 +2954,13 @@ packages: peerDependencies: eslint: ^9.0.0 || ^10.0.0 - '@sveltejs/acorn-typescript@1.0.10': - resolution: {integrity: sha512-4WfKk68eTih+MiJD4fSbxN7E8kVBmTMPWHUPYjvl2N0rMs53YLTT8/YjKU5Dtnz5LqDjl7LEw4U7lXR2W3J5WA==} + '@sveltejs/acorn-typescript@1.0.12': + resolution: {integrity: sha512-J1jNYG23QWd67UfrQSFHtjhV37r9mVi0gdc12A3MWPldOjRK35Xk+um+qACPVjgw3AleiqoyEAhok8Wm3q46NA==} peerDependencies: acorn: ^8.9.0 - '@sveltejs/eslint-config@10.0.3': - resolution: {integrity: sha512-k6EGVh588kev4uyMWBQ0Ej6xr+jaclutzxcjDSZsInfmoJydaOHQEJvEuOlj84XyqzXF7mhjnGc1f6bHk+xa0Q==} + '@sveltejs/eslint-config@10.0.4': + resolution: {integrity: sha512-pkXIUO5nDFJFrxfR0pms5R7n6AMZ/tI00RnMKFfb08FIhzkIgTMv09hMkTj1JeAxdvYr9eZSZgotR1FGYKK5kw==} peerDependencies: '@eslint/js': '>= 10' '@stylistic/eslint-plugin': '>= 5' @@ -3103,16 +2975,13 @@ packages: resolution: {integrity: sha512-K7dsJDQxBOF+f+epuhMactcjK2VP4MRkLKtwSykNtEI+cKVEyzrmmhQ1pmoxI800m4JKcyJ05L2M4yPwAGiBNw==} engines: {node: '>= 18.0.0'} - '@sveltejs/vite-plugin-svelte@7.0.0': - resolution: {integrity: sha512-ILXmxC7HAsnkK2eslgPetrqqW1BKSL7LktsFgqzNj83MaivMGZzluWq32m25j2mDOjmSKX7GGWahePhuEs7P/g==} + '@sveltejs/vite-plugin-svelte@7.3.0': + resolution: {integrity: sha512-QbRoJyD92e9R0ufeQIWRHrCC0ObcqSv/aBDdrQMoU+sypav3cDx5wytdQ6GLdXjEMO6xjrXGzfkUygng8JMv0A==} engines: {node: ^20.19 || ^22.12 || >=24} peerDependencies: svelte: ^5.46.4 vite: ^8.0.0-beta.7 || ^8.0.0 - '@tybys/wasm-util@0.10.3': - resolution: {integrity: sha512-F3fo1MYrRJYL3zER0OUOmkutjr1Vp23m7OsSgp7nq4SP6OqX6C/56XFIPAl5bt3zaBRjmW7SGz3u/6LwFpYcOg==} - '@types/chai@5.2.3': resolution: {integrity: sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==} @@ -3137,8 +3006,8 @@ packages: '@types/node@22.19.19': resolution: {integrity: sha512-dyh/xO2Fh5bYrfWaaqGrRQQGkNdmYw6AmaAUvYeUMNTWQtvb796ikLdmTchRmOlOiIJ1TDXfWgVx1QkUlQ6Hew==} - '@types/semver@7.5.8': - resolution: {integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==} + '@types/semver@7.8.0': + resolution: {integrity: sha512-1mAINjtQCXXeLkJ9ehXkwOcBpqtLxiVtKhpUf83DdRNdQKV0iXZpaHYqRr7nj+wvxuJzoAmAwXI+sCNMv1CzLQ==} '@types/trusted-types@2.0.7': resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==} @@ -3385,8 +3254,8 @@ packages: peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - acorn@8.17.0: - resolution: {integrity: sha512-xRQbDb9BnwDafYNn6Vwl839DYVjqXYb1XVGtWAZ1kcDc6iwAL4hg3B1dZlRiuENFeO2H53gFG3in621AdERVAg==} + acorn@8.18.0: + resolution: {integrity: sha512-lGq+9yr1/GuAWaVYIHRjvvySG5/4VfKIvC8EWxStPdcDh/Ka7FG3twP6v4d5BkravUilhIAsG4Qj83t02LWUPQ==} engines: {node: '>=0.4.0'} hasBin: true @@ -3490,8 +3359,8 @@ packages: resolution: {integrity: sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==} engines: {node: '>=18'} - cookie@2.0.0: - resolution: {integrity: sha512-hRSFuKJ6SYHrFVNltQdagQFMk7e0Q/VrORTGqZGyUAmmhA3EwPeldHCTg0HqUaDodQOfQDe7qXuOtpf4lwCsaA==} + cookie@2.0.1: + resolution: {integrity: sha512-yuToqVvRrj6pfDXREyQAAv8SkAEk/8GS3jQRTiUMm66TVtBYmqQeoEjL2Lmq8Rpo6271vH76InTChTitEAm65w==} engines: {node: '>=22'} cross-spawn@7.0.6: @@ -3540,8 +3409,8 @@ packages: resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} engines: {node: '>=8'} - devalue@5.8.1: - resolution: {integrity: sha512-4CXDYRBGqN+57wVJkuXBYmpAVUSg3L6JAQa/DFqm238G73E1wuyc/JhGQJzN7vUf/CMphYau2zXbfWzDR5aTEw==} + devalue@5.9.0: + resolution: {integrity: sha512-RWrqdArjvPbsATEhOPUo6Wndc/iWnkWKlhIrdlF3zMMYo/c3CVtoaVAyLtWxz5h8nSlkHzxnzV2uLydPXmtF+A==} dts-buddy@0.8.3: resolution: {integrity: sha512-1x/UrAYRlQYA7QeLjyiTo5x6u5FvsU2hheGXT/hJWJ1zQzR+dMSQMMGPmuSKAH4/rhdCuLAtUZUr+NIXubwjfQ==} @@ -3644,8 +3513,8 @@ packages: resolution: {integrity: sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} - eslint@10.8.0: - resolution: {integrity: sha512-nuKKvN+oIBO0koN7Tm7dlkmnkc21mtt0QJLwAKzjLq14y6lRTdVG36MZHJ8eQHwdJMwZbQNMlPOYedMq/oVJvQ==} + eslint@10.8.1: + resolution: {integrity: sha512-wqA7W2jbsC/BnV9Iv1UZpKVFkO1AdNoSmYW8NWG4HNOBbkAMvIqDZ27pI2f07dqn583NcIC44ckjAcOXDL1QbQ==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} hasBin: true peerDependencies: @@ -3669,8 +3538,8 @@ packages: resolution: {integrity: sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==} engines: {node: '>=0.10'} - esrap@2.2.11: - resolution: {integrity: sha512-gPdx+I+BjYEinNMQaBXFjbaJVyoPMU4ZODg5mE+M4DqVG9VusAVHHjcBX+zqyITlI0DIARwDMMzZwAWj36dRoQ==} + esrap@2.3.2: + resolution: {integrity: sha512-40GyiEJevYKXzYTHtZkFqAgTjLOuFcaXMao8TPyOlnWTlkHDlvZ6mPMJaJyOqVwrVCgomEG1WhJd81w0X+IcCw==} peerDependencies: '@typescript-eslint/types': ^8.2.0 peerDependenciesMeta: @@ -3781,8 +3650,8 @@ packages: resolution: {integrity: sha512-c/c15i26VrJ4IRt5Z89DnIzCGDn9EcebibhAOjw5ibqEHsE1wLUgkPn9RDmNcUKyU87GeaL633nyJ+pplFR2ZQ==} engines: {node: '>=18'} - globals@17.7.0: - resolution: {integrity: sha512-Czmyns5dUsq4seFBR/Kdydhmo8y9kC79hiSkPn0YcGtNnYWnrgt0vjrSjx9tspoDGWm2CMarffRuLjM4xUz8xg==} + globals@17.9.0: + resolution: {integrity: sha512-m/MvAW61QVU5VDNF1Vj8axt016h8w7L5TU1e9zlab7XIttAT2YAlCwl75K1fOqvMM9apmD7lbCIRhpfkhmxhCg==} engines: {node: '>=18'} globrex@0.1.2: @@ -3892,78 +3761,78 @@ packages: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} - lightningcss-android-arm64@1.32.0: - resolution: {integrity: sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==} + lightningcss-android-arm64@1.33.0: + resolution: {integrity: sha512-gEpRTalKdosp4Bb8qWtc2iOgE5SeIHlpS1up9bFq2wAyYhl1UdTObYiHe98zEM9SQvSoqQZ1IQD0JNpg3Ml5pg==} engines: {node: '>= 12.0.0'} cpu: [arm64] os: [android] - lightningcss-darwin-arm64@1.32.0: - resolution: {integrity: sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==} + lightningcss-darwin-arm64@1.33.0: + resolution: {integrity: sha512-Sciaz8eenNTKn9b3t7+xr0ipTp9YxKQY4npwQ3mrRuL0BAVHBLyZxofhaKBAVtzmtRZ/zTyo0/to4B1uWG/Djg==} engines: {node: '>= 12.0.0'} cpu: [arm64] os: [darwin] - lightningcss-darwin-x64@1.32.0: - resolution: {integrity: sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==} + lightningcss-darwin-x64@1.33.0: + resolution: {integrity: sha512-Z5UPAxzrjlWNNyGy6i65cJzzvgJ5D3T6wMvs+gWpY9d7qRhANrxqAp6LhxIgZhWEw18RfJTGcRxjuLIBr+m8XQ==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [darwin] - lightningcss-freebsd-x64@1.32.0: - resolution: {integrity: sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==} + lightningcss-freebsd-x64@1.33.0: + resolution: {integrity: sha512-QQM/Ti/hQajJwCY+RiWuCZ9sdtI/XQk7nDK5vC8kkdwixezOlDgvDx7+RT+QjK6FcFT4MpsuoBnHIo/O3StRRg==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [freebsd] - lightningcss-linux-arm-gnueabihf@1.32.0: - resolution: {integrity: sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==} + lightningcss-linux-arm-gnueabihf@1.33.0: + resolution: {integrity: sha512-N7FVBe6iS24MlM6R/4RBTxGhQheZGs7tiQ9U32UtF75NzP5Q7xWPRqLBCKxlRQRk3rY1jCIPLzx7WzOhuUIRLQ==} engines: {node: '>= 12.0.0'} cpu: [arm] os: [linux] - lightningcss-linux-arm64-gnu@1.32.0: - resolution: {integrity: sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==} + lightningcss-linux-arm64-gnu@1.33.0: + resolution: {integrity: sha512-j2v/itmy4HlNxlc6voKXYgBqNi0Ng2LShg4z7GufpEgs05P+2suBVyi9I6YHq5uoVFx9ETin3eCEhLVyXGQnKg==} engines: {node: '>= 12.0.0'} cpu: [arm64] os: [linux] libc: [glibc] - lightningcss-linux-arm64-musl@1.32.0: - resolution: {integrity: sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==} + lightningcss-linux-arm64-musl@1.33.0: + resolution: {integrity: sha512-yiO5ROMuYQgXbC60yjZU5CYSFZGKXL0HFATXt9mHJn1+zW55oCtMI9NfcVhYLMFDL7gV7oBPon/EmMMGg2OvtQ==} engines: {node: '>= 12.0.0'} cpu: [arm64] os: [linux] libc: [musl] - lightningcss-linux-x64-gnu@1.32.0: - resolution: {integrity: sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==} + lightningcss-linux-x64-gnu@1.33.0: + resolution: {integrity: sha512-ar+Ju7LmcN0Jo4FpL4hpFybwNG9/3A/Br5KW2n2jyODg3MEZXaDYADdemoNS+BDNfMgKvylJLj4S5tyRActuAg==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [linux] libc: [glibc] - lightningcss-linux-x64-musl@1.32.0: - resolution: {integrity: sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==} + lightningcss-linux-x64-musl@1.33.0: + resolution: {integrity: sha512-RYiYbkokw0trfKqqzfF55lginwEPrD3OJDfTuJzFs1MK6iFnDenaz1fqLLtX4ITG3OktJQXOeTaw1awrBAlZPw==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [linux] libc: [musl] - lightningcss-win32-arm64-msvc@1.32.0: - resolution: {integrity: sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==} + lightningcss-win32-arm64-msvc@1.33.0: + resolution: {integrity: sha512-1K+MPfLSFVpphzpdbfkhlWk6wBrTObBzS2T6db10PNOZgR9GoVsAWzwNyuhUYYbTp23j+4RrncfujZ4uAzXvwA==} engines: {node: '>= 12.0.0'} cpu: [arm64] os: [win32] - lightningcss-win32-x64-msvc@1.32.0: - resolution: {integrity: sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==} + lightningcss-win32-x64-msvc@1.33.0: + resolution: {integrity: sha512-OlEICDx/Xl0FqSp4bry8zFnCvGpig3Gl4gCquvYwHuqJKEC1+n9NgDniFvqHGmMv1ZkqDJrDqKKSykTDX+ehuA==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [win32] - lightningcss@1.32.0: - resolution: {integrity: sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==} + lightningcss@1.33.0: + resolution: {integrity: sha512-WkUDrojuJs0xkgGf2udWxa3yGBRxPtxUkB79i6aCZLRgc7PM8fZe9TosfPDcvEpQZbuFASnHYmRLBLUbmLOIIA==} engines: {node: '>= 12.0.0'} lilconfig@2.1.0: @@ -3994,11 +3863,14 @@ packages: magic-string@0.30.21: resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} + magic-string@1.1.0: + resolution: {integrity: sha512-kS3VHe0nEPST2saQV4Rbkchcd3UBRkVTQHo1D3h/ZTwFDhai/mfKkmtPAtD129EOI7K3HlHIsFOt0WrI2/oU9g==} + mdn-data@2.27.1: resolution: {integrity: sha512-9Yubnt3e8A0OKwxYSXyhLymGW4sCufcLG6VdiDdUGVkPhpqLxlvP5vl1983gQjJl3tqbrM731mjaZaP68AgosQ==} - miniflare@5.20260730.0-alpha: - resolution: {integrity: sha512-8/dspSXDshP6nSkCpjKO7BYc2qZoYSXm7iM+QxY7qJyJpAB3onnQSaiu0cvKJlfuMGwULl55hG69FJCcCMXU1Q==} + miniflare@5.20260804.0-alpha: + resolution: {integrity: sha512-UDegnTukIpJCI/lNyQXU7B8kYFLcMZihlxqqOocnc62tV8AO6XofmFmZm3ZLDXTWZpkZnLLJ2sKCSlTIEXO3dQ==} engines: {node: '>=22.0.0'} minimatch@10.2.5: @@ -4020,15 +3892,15 @@ packages: resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} engines: {node: '>=4'} - mrmime@2.0.0: - resolution: {integrity: sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==} + mrmime@2.0.1: + resolution: {integrity: sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==} engines: {node: '>=10'} ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - nanoid@3.3.12: - resolution: {integrity: sha512-ZB9RH/39qpq5Vu6Y+NmUaFhQR6pp+M2Xt76XBnEwDaGcVAqhlvxrl3B2bKS5D3NH3QR76v3aSrKaF/Kiy7lEtQ==} + 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} hasBin: true @@ -4082,9 +3954,6 @@ packages: resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} engines: {node: '>=10'} - package-manager-detector@0.2.8: - resolution: {integrity: sha512-ts9KSdroZisdvKMWVAVCXiKqnqNfXz4+IbrBG8/BWx/TR5le+jfenvoBuIZ6UWM9nz47W7AbD9qYfAwfWMIwzA==} - package-manager-detector@1.8.0: resolution: {integrity: sha512-yQA4H19AmPEoMUeavPMDIe1higySl/gH/yaQrkT/s07Qp+7pp2hYz30N3z2l5BkjVkF9Ow6o0wjJamm2y7Sn0A==} @@ -4162,8 +4031,8 @@ packages: resolution: {integrity: sha512-HeP7D2wyhkR+XaK6v4W8oRF62Dsz4flyuczALJp61GckGm42u1saSSJ/0auvcBqxs3jMRFEcPK34At/0JBKdOg==} engines: {node: '>=4'} - postcss@8.5.19: - resolution: {integrity: sha512-Mz8SaolMd8nB+G13WkORcxQKHZ/NE4xXevtkJHVuG+guo9/wYKlIMTKAqGdEmYOXR2ijPjTYNHssizdaVSUNdQ==} + postcss@8.5.26: + resolution: {integrity: sha512-u82N74LFzG8ca+dD8puPnplTXoGH4fTPpVGuIbt36G3qvNlkvfD0lEAZSxaly3KX8TS/L1A1gsCEmvKmBcVbkQ==} engines: {node: ^10 || ^12 || >=14} prelude-ls@1.2.1: @@ -4186,11 +4055,6 @@ packages: resolution: {integrity: sha512-/FPD0nUc9jH6rfFjji9IBqOz4pcSE3CsT1m7Ep6Mdb0LxSUMj8hgl6GomOvZzpNpAqqGaXA0P3VSrZLFzIhQrw==} engines: {node: '>=12.0.0'} - publint@0.3.0: - resolution: {integrity: sha512-B7efom03c86OGqN1Jp2mDduiamb5apEuolvlbUeHaa14geCzJKz35oPIiKoXPMvM3tGABEZ1oLfY6xJNvOh69g==} - engines: {node: '>=18'} - hasBin: true - punycode@2.3.1: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} @@ -4226,13 +4090,8 @@ packages: resolve-pkg-maps@1.0.0: resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} - rolldown@1.1.5: - resolution: {integrity: sha512-t9z29cJjXf/vxQ8dyhCSpt6H6aSwHTk8cT5I3iy6SMXuFpk5mB6PL6XfC8PCwrPTx93udwKUm9HRteAlTGBLiA==} - engines: {node: ^20.19.0 || >=22.12.0} - hasBin: true - - rolldown@1.2.0: - resolution: {integrity: sha512-u7tgm5l4Yw1iTqUL4EcYOAt7fFvCgQMLeidrnD4GALlC6aOznCjezYajgxeyKw27u0Q5N7fwgCzjVyPIWzwuBA==} + rolldown@1.2.3: + resolution: {integrity: sha512-rn9wpmxplLf7NLNyCk9FyWh3FM43DbY8jOzCdEPzH7uflhTftRbCEpqi6Ly2osgoU8OwObtmavMbWLaWy4LX7A==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true @@ -4290,8 +4149,8 @@ packages: siginfo@2.0.0: resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} - sirv-cli@3.0.0: - resolution: {integrity: sha512-p88yHl8DmTOUJroRiW2o9ezJc/YRLxphBydX2NGQc3naKBA09B3EM4Q/yaN8FYF0e50fRSZP7dyatr72b1u5Jw==} + sirv-cli@3.0.1: + resolution: {integrity: sha512-ICXaF2u6IQhLZ0EXF6nqUF4YODfSQSt+mGykt4qqO5rY+oIiwdg7B8w2PVDBJlQulaS2a3J8666CUoDoAuCGvg==} engines: {node: '>=18'} hasBin: true @@ -4389,8 +4248,8 @@ packages: svelte: ^3.55 || ^4.0.0-next.0 || ^4.0 || ^5.0.0-next.0 typescript: ^4.9.4 || ^5.0.0 || ^6.0.0 - svelte@5.56.3: - resolution: {integrity: sha512-w7JvrM5IFl5cmfbY0TLik9o7mjRUJmRMhOR51tBPu708Gr/MjbGs7VnJnr/B0CaXeI4vtnOh7RKxDr0cwhMdDA==} + svelte@5.56.8: + resolution: {integrity: sha512-PY8LOw7xP6c8IOiVqdo0sbbZVYhXRSfklOQLAUyGBKqjTX0wx/z4l/9J+PmBpmlLnxzEb1NqltxQ5/wZme/Cmg==} engines: {node: '>=18'} symbol-tree@3.2.4: @@ -4497,8 +4356,8 @@ packages: undici-types@6.21.0: resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} - undici@7.28.0: - resolution: {integrity: sha512-cRZYrTDwWznlnRiPjggAGxZXanty6M8RV1ff8Wm4LWXBp7/IG8v5DnOm74DtUBp9OONpK75YlPnIjQqX0dBDtA==} + undici@7.29.0: + resolution: {integrity: sha512-IDxfleLmmbSskfWSUATiN1nfn2rDuvnMOqb5CWR92iIfojA0Ud+ulOAAEQ57LPr9rWmsreUyf5lwyao+7GNNVw==} engines: {node: '>=20.18.1'} undici@8.10.0: @@ -4528,13 +4387,13 @@ packages: peerDependencies: vite: '>=8.0.0' - vite@8.1.5: - resolution: {integrity: sha512-7ULLwsCdYx/nRyrpiEwvqb5TFHrMVZyBt+rg/OAXT7rgj/z+DtTDyKFeLAdDkubDVDKD8jOsndmy7m55XcfUsw==} + vite@8.2.1: + resolution: {integrity: sha512-EU/eS7BH3XROHh2YnBefjM6DBKA6ZeMZEYQbj7NLWg5wHYlhB8B/Mayd5XsgWq+NFYccDOTemRpdETWR6Ka/lw==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true peerDependencies: '@types/node': ^20.19.0 || >=22.12.0 - '@vitejs/devtools': ^0.3.0 + '@vitejs/devtools': ^0.4.0 esbuild: ^0.27.0 || ^0.28.0 jiti: '>=1.21.0' less: ^4.0.0 @@ -4660,17 +4519,17 @@ packages: resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} engines: {node: '>=0.10.0'} - workerd@1.20260730.1: - resolution: {integrity: sha512-zmfNIjwYSWFY5chGBOjWtH3xAE7p97FTC6vR4Ep98290ho6AeAR/NVcBD274YCLEUYzqm8yxdtZlxMybU8a3jA==} + workerd@1.20260804.1: + resolution: {integrity: sha512-b0P38g5/ssemwWxd/mafNYggEZ0ere7PCiUH6RCHkgqjRhhXTP45nDiL2L3iIvi8uF2IjNrGpVgMXEunCaeY/w==} engines: {node: '>=16'} hasBin: true - wrangler@4.118.0: - resolution: {integrity: sha512-9pkBw/b8zWqGx2S+oLhgHMR1M/4VOE8SynUFABnGWiSFGlcOQ4xiI/B71Xf66RYP2xzngU37IQFPtUruij3lYw==} + wrangler@4.120.1: + resolution: {integrity: sha512-rQJ38rY02XiVITbSBWHC7oap3M2evcXgsC4CdlIX4WQENUZMMnue9j2vXO4aIi39KR+jDH+UHK8JNqp1+UjkRQ==} engines: {node: '>=22.0.0'} hasBin: true peerDependencies: - '@cloudflare/workers-types': ^5.20260730.1 + '@cloudflare/workers-types': ^5.20260804.1 peerDependenciesMeta: '@cloudflare/workers-types': optional: true @@ -4733,8 +4592,8 @@ packages: youch@4.1.0-beta.10: resolution: {integrity: sha512-rLfVLB4FgQneDr0dv1oddCVZmKjcJ6yX6mS4pU82Mq/Dt9a3cLZQ62pDBL4AUO+uVrCvtWz3ZFUL2HFAFJ/BXQ==} - zimmerframe@1.1.2: - resolution: {integrity: sha512-rAbqEGa8ovJy4pyBxZM70hg4pE6gDgaQ0Sl9M3enG3I0d6H4XSAM3GeNGLKnsBpuijUow064sf7ww1nutC5/3w==} + zimmerframe@1.1.4: + resolution: {integrity: sha512-B58NGBEoc8Y9MWWCQGl/gq9xBCe4IiKM0a2x7GZdQKOW5Exr8S1W24J6OgM1njK8xCRGvAJIL/MxXHf6SkmQKQ==} snapshots: @@ -4759,48 +4618,48 @@ snapshots: dependencies: css-tree: 3.2.1 - '@changesets/apply-release-plan@8.0.0-next.11': + '@changesets/apply-release-plan@8.0.0': dependencies: - '@changesets/config': 4.0.0-next.10 + '@changesets/config': 4.0.0 '@changesets/format': 0.1.1 - '@changesets/git': 4.0.0-next.9 - '@changesets/should-skip-package': 1.0.0-next.9 - '@changesets/types': 7.0.0-next.9 + '@changesets/git': 4.0.0 + '@changesets/should-skip-package': 1.0.0 + '@changesets/types': 7.0.0 import-meta-resolve: 4.2.0 jsonc-parser: 3.3.1 semver: 7.8.5 - '@changesets/assemble-release-plan@7.0.0-next.11': + '@changesets/assemble-release-plan@7.0.0': dependencies: - '@changesets/errors': 1.0.0-next.4 - '@changesets/get-dependents-graph': 3.0.0-next.9 - '@changesets/should-skip-package': 1.0.0-next.9 - '@changesets/types': 7.0.0-next.9 + '@changesets/errors': 1.0.0 + '@changesets/get-dependents-graph': 3.0.0 + '@changesets/should-skip-package': 1.0.0 + '@changesets/types': 7.0.0 semver: 7.8.5 - '@changesets/changelog-git@1.0.0-next.9': + '@changesets/changelog-git@1.0.0': dependencies: - '@changesets/types': 7.0.0-next.9 + '@changesets/types': 7.0.0 '@changesets/changelog-github@1.0.0-next.9': dependencies: '@changesets/get-github-info': 1.0.0-next.4 - '@changesets/types': 7.0.0-next.9 - - '@changesets/cli@3.0.0-next.12': - dependencies: - '@changesets/apply-release-plan': 8.0.0-next.11 - '@changesets/assemble-release-plan': 7.0.0-next.11 - '@changesets/changelog-git': 1.0.0-next.9 - '@changesets/config': 4.0.0-next.10 - '@changesets/errors': 1.0.0-next.4 - '@changesets/get-dependents-graph': 3.0.0-next.9 - '@changesets/git': 4.0.0-next.9 - '@changesets/pre': 3.0.0-next.9 - '@changesets/read': 1.0.0-next.10 - '@changesets/should-skip-package': 1.0.0-next.9 - '@changesets/types': 7.0.0-next.9 - '@changesets/write': 1.0.0-next.9 + '@changesets/types': 7.0.0 + + '@changesets/cli@3.0.0': + dependencies: + '@changesets/apply-release-plan': 8.0.0 + '@changesets/assemble-release-plan': 7.0.0 + '@changesets/changelog-git': 1.0.0 + '@changesets/config': 4.0.0 + '@changesets/errors': 1.0.0 + '@changesets/get-dependents-graph': 3.0.0 + '@changesets/git': 4.0.0 + '@changesets/pre': 3.0.0 + '@changesets/read': 1.0.0 + '@changesets/should-skip-package': 1.0.0 + '@changesets/types': 7.0.0 + '@changesets/write': 1.0.0 '@clack/prompts': 1.7.0 '@manypkg/get-packages': 3.1.0 '@pnpm/deps.graph-sequencer': 1100.0.1 @@ -4811,65 +4670,65 @@ snapshots: semver: 7.8.5 tinyexec: 1.3.0 - '@changesets/config@4.0.0-next.10': + '@changesets/config@4.0.0': dependencies: - '@changesets/get-dependents-graph': 3.0.0-next.9 - '@changesets/should-skip-package': 1.0.0-next.9 - '@changesets/types': 7.0.0-next.9 + '@changesets/get-dependents-graph': 3.0.0 + '@changesets/should-skip-package': 1.0.0 + '@changesets/types': 7.0.0 '@manypkg/get-packages': 3.1.0 picomatch: 4.0.5 - '@changesets/errors@1.0.0-next.4': {} + '@changesets/errors@1.0.0': {} '@changesets/format@0.1.1': dependencies: package-manager-detector: 1.8.0 tinyexec: 1.3.0 - '@changesets/get-dependents-graph@3.0.0-next.9': + '@changesets/get-dependents-graph@3.0.0': dependencies: - '@changesets/types': 7.0.0-next.9 + '@changesets/types': 7.0.0 semver: 7.8.5 '@changesets/get-github-info@1.0.0-next.4': dependencies: dataloader: 2.2.3 - '@changesets/git@4.0.0-next.9': + '@changesets/git@4.0.0': dependencies: - '@changesets/errors': 1.0.0-next.4 - '@changesets/types': 7.0.0-next.9 + '@changesets/errors': 1.0.0 + '@changesets/types': 7.0.0 '@manypkg/get-packages': 3.1.0 picomatch: 4.0.5 tinyexec: 1.3.0 - '@changesets/parse@1.0.0-next.10': + '@changesets/parse@1.0.0': dependencies: - '@changesets/types': 7.0.0-next.9 + '@changesets/types': 7.0.0 yaml: 2.9.0 - '@changesets/pre@3.0.0-next.9': + '@changesets/pre@3.0.0': dependencies: - '@changesets/errors': 1.0.0-next.4 - '@changesets/types': 7.0.0-next.9 + '@changesets/errors': 1.0.0 + '@changesets/types': 7.0.0 '@manypkg/get-packages': 3.1.0 - '@changesets/read@1.0.0-next.10': + '@changesets/read@1.0.0': dependencies: - '@changesets/git': 4.0.0-next.9 - '@changesets/parse': 1.0.0-next.10 - '@changesets/types': 7.0.0-next.9 + '@changesets/git': 4.0.0 + '@changesets/parse': 1.0.0 + '@changesets/types': 7.0.0 - '@changesets/should-skip-package@1.0.0-next.9': + '@changesets/should-skip-package@1.0.0': dependencies: - '@changesets/types': 7.0.0-next.9 + '@changesets/types': 7.0.0 - '@changesets/types@7.0.0-next.9': {} + '@changesets/types@7.0.0': {} - '@changesets/write@1.0.0-next.9': + '@changesets/write@1.0.0': dependencies: '@changesets/format': 0.1.1 - '@changesets/types': 7.0.0-next.9 + '@changesets/types': 7.0.0 human-id: 4.2.0 '@clack/core@1.4.3': @@ -4886,28 +4745,28 @@ snapshots: '@cloudflare/kv-asset-handler@0.5.0': {} - '@cloudflare/unenv-preset@2.16.1(unenv@2.0.0-rc.24)(workerd@1.20260730.1)': + '@cloudflare/unenv-preset@2.16.1(unenv@2.0.0-rc.24)(workerd@1.20260804.1)': dependencies: unenv: 2.0.0-rc.24 optionalDependencies: - workerd: 1.20260730.1 + workerd: 1.20260804.1 - '@cloudflare/workerd-darwin-64@1.20260730.1': + '@cloudflare/workerd-darwin-64@1.20260804.1': optional: true - '@cloudflare/workerd-darwin-arm64@1.20260730.1': + '@cloudflare/workerd-darwin-arm64@1.20260804.1': optional: true - '@cloudflare/workerd-linux-64@1.20260730.1': + '@cloudflare/workerd-linux-64@1.20260804.1': optional: true - '@cloudflare/workerd-linux-arm64@1.20260730.1': + '@cloudflare/workerd-linux-arm64@1.20260804.1': optional: true - '@cloudflare/workerd-windows-64@1.20260730.1': + '@cloudflare/workerd-windows-64@1.20260804.1': optional: true - '@cloudflare/workers-types@5.20260804.1': {} + '@cloudflare/workers-types@5.20260809.1': {} '@cspotcode/source-map-support@0.8.1': dependencies: @@ -4937,33 +4796,11 @@ snapshots: '@csstools/css-tokenizer@4.0.0': {} - '@emnapi/core@1.11.1': - dependencies: - '@emnapi/wasi-threads': 1.2.2 - tslib: 2.8.1 - optional: true - - '@emnapi/core@1.11.2': - dependencies: - '@emnapi/wasi-threads': 1.2.2 - tslib: 2.8.1 - optional: true - - '@emnapi/runtime@1.11.1': - dependencies: - tslib: 2.8.1 - optional: true - '@emnapi/runtime@1.11.2': dependencies: tslib: 2.8.1 optional: true - '@emnapi/wasi-threads@1.2.2': - dependencies: - tslib: 2.8.1 - optional: true - '@esbuild/aix-ppc64@0.28.1': optional: true @@ -5042,9 +4879,9 @@ snapshots: '@esbuild/win32-x64@0.28.1': optional: true - '@eslint-community/eslint-utils@4.10.1(eslint@10.8.0(jiti@2.4.2)(supports-color@10.2.2))': + '@eslint-community/eslint-utils@4.10.1(eslint@10.8.1(jiti@2.4.2)(supports-color@10.2.2))': dependencies: - eslint: 10.8.0(jiti@2.4.2)(supports-color@10.2.2) + eslint: 10.8.1(jiti@2.4.2)(supports-color@10.2.2) eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.12.2': {} @@ -5065,9 +4902,9 @@ snapshots: dependencies: '@types/json-schema': 7.0.15 - '@eslint/js@10.0.1(eslint@10.8.0(jiti@2.4.2)(supports-color@10.2.2))': + '@eslint/js@10.0.1(eslint@10.8.1(jiti@2.4.2)(supports-color@10.2.2))': optionalDependencies: - eslint: 10.8.0(jiti@2.4.2)(supports-color@10.2.2) + eslint: 10.8.1(jiti@2.4.2)(supports-color@10.2.2) '@eslint/object-schema@3.0.5': {} @@ -5078,7 +4915,7 @@ snapshots: '@exodus/bytes@1.15.1': {} - '@fontsource/libre-barcode-128-text@5.1.0': {} + '@fontsource/libre-barcode-128-text@5.3.0': {} '@grpc/grpc-js@1.14.4': dependencies: @@ -5386,20 +5223,6 @@ snapshots: - encoding - supports-color - '@napi-rs/wasm-runtime@1.1.6(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)': - dependencies: - '@emnapi/core': 1.11.1 - '@emnapi/runtime': 1.11.1 - '@tybys/wasm-util': 0.10.3 - optional: true - - '@napi-rs/wasm-runtime@1.1.6(@emnapi/core@1.11.2)(@emnapi/runtime@1.11.2)': - dependencies: - '@emnapi/core': 1.11.2 - '@emnapi/runtime': 1.11.2 - '@tybys/wasm-util': 0.10.3 - optional: true - '@netlify/edge-functions@3.0.8': dependencies: '@netlify/types': 2.8.0 @@ -5408,231 +5231,229 @@ snapshots: '@opentelemetry/api-logs@0.221.0': dependencies: - '@opentelemetry/api': 1.9.0 + '@opentelemetry/api': 1.9.1 - '@opentelemetry/api@1.9.0': {} + '@opentelemetry/api@1.9.1': {} - '@opentelemetry/configuration@0.221.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/configuration@0.221.0(@opentelemetry/api@1.9.1)': dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.10.0(@opentelemetry/api@1.9.0) + '@opentelemetry/api': 1.9.1 + '@opentelemetry/core': 2.10.0(@opentelemetry/api@1.9.1) yaml: 2.9.0 - '@opentelemetry/context-async-hooks@2.10.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/context-async-hooks@2.10.0(@opentelemetry/api@1.9.1)': dependencies: - '@opentelemetry/api': 1.9.0 + '@opentelemetry/api': 1.9.1 - '@opentelemetry/core@2.10.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/core@2.10.0(@opentelemetry/api@1.9.1)': dependencies: - '@opentelemetry/api': 1.9.0 + '@opentelemetry/api': 1.9.1 '@opentelemetry/semantic-conventions': 1.36.0 - '@opentelemetry/exporter-logs-otlp-grpc@0.221.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/exporter-logs-otlp-grpc@0.221.0(@opentelemetry/api@1.9.1)': dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/otlp-exporter-base': 0.221.0(@opentelemetry/api@1.9.0) - '@opentelemetry/otlp-grpc-exporter-base': 0.221.0(@opentelemetry/api@1.9.0) - '@opentelemetry/otlp-transformer': 0.221.0(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-logs': 0.221.0(@opentelemetry/api@1.9.0) + '@opentelemetry/api': 1.9.1 + '@opentelemetry/otlp-exporter-base': 0.221.0(@opentelemetry/api@1.9.1) + '@opentelemetry/otlp-grpc-exporter-base': 0.221.0(@opentelemetry/api@1.9.1) + '@opentelemetry/otlp-transformer': 0.221.0(@opentelemetry/api@1.9.1) + '@opentelemetry/sdk-logs': 0.221.0(@opentelemetry/api@1.9.1) - '@opentelemetry/exporter-logs-otlp-http@0.221.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/exporter-logs-otlp-http@0.221.0(@opentelemetry/api@1.9.1)': dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/otlp-exporter-base': 0.221.0(@opentelemetry/api@1.9.0) - '@opentelemetry/otlp-transformer': 0.221.0(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-logs': 0.221.0(@opentelemetry/api@1.9.0) + '@opentelemetry/api': 1.9.1 + '@opentelemetry/otlp-exporter-base': 0.221.0(@opentelemetry/api@1.9.1) + '@opentelemetry/otlp-transformer': 0.221.0(@opentelemetry/api@1.9.1) + '@opentelemetry/sdk-logs': 0.221.0(@opentelemetry/api@1.9.1) - '@opentelemetry/exporter-logs-otlp-proto@0.221.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/exporter-logs-otlp-proto@0.221.0(@opentelemetry/api@1.9.1)': dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/otlp-exporter-base': 0.221.0(@opentelemetry/api@1.9.0) - '@opentelemetry/otlp-transformer': 0.221.0(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-logs': 0.221.0(@opentelemetry/api@1.9.0) + '@opentelemetry/api': 1.9.1 + '@opentelemetry/otlp-exporter-base': 0.221.0(@opentelemetry/api@1.9.1) + '@opentelemetry/otlp-transformer': 0.221.0(@opentelemetry/api@1.9.1) + '@opentelemetry/sdk-logs': 0.221.0(@opentelemetry/api@1.9.1) - '@opentelemetry/exporter-metrics-otlp-grpc@0.221.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/exporter-metrics-otlp-grpc@0.221.0(@opentelemetry/api@1.9.1)': dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/exporter-metrics-otlp-http': 0.221.0(@opentelemetry/api@1.9.0) - '@opentelemetry/otlp-grpc-exporter-base': 0.221.0(@opentelemetry/api@1.9.0) - '@opentelemetry/otlp-transformer': 0.221.0(@opentelemetry/api@1.9.0) + '@opentelemetry/api': 1.9.1 + '@opentelemetry/exporter-metrics-otlp-http': 0.221.0(@opentelemetry/api@1.9.1) + '@opentelemetry/otlp-grpc-exporter-base': 0.221.0(@opentelemetry/api@1.9.1) + '@opentelemetry/otlp-transformer': 0.221.0(@opentelemetry/api@1.9.1) - '@opentelemetry/exporter-metrics-otlp-http@0.221.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/exporter-metrics-otlp-http@0.221.0(@opentelemetry/api@1.9.1)': dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.10.0(@opentelemetry/api@1.9.0) - '@opentelemetry/otlp-exporter-base': 0.221.0(@opentelemetry/api@1.9.0) - '@opentelemetry/otlp-transformer': 0.221.0(@opentelemetry/api@1.9.0) - '@opentelemetry/resources': 2.10.0(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-metrics': 2.10.0(@opentelemetry/api@1.9.0) + '@opentelemetry/api': 1.9.1 + '@opentelemetry/core': 2.10.0(@opentelemetry/api@1.9.1) + '@opentelemetry/otlp-exporter-base': 0.221.0(@opentelemetry/api@1.9.1) + '@opentelemetry/otlp-transformer': 0.221.0(@opentelemetry/api@1.9.1) + '@opentelemetry/resources': 2.10.0(@opentelemetry/api@1.9.1) + '@opentelemetry/sdk-metrics': 2.10.0(@opentelemetry/api@1.9.1) - '@opentelemetry/exporter-metrics-otlp-proto@0.221.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/exporter-metrics-otlp-proto@0.221.0(@opentelemetry/api@1.9.1)': dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/exporter-metrics-otlp-http': 0.221.0(@opentelemetry/api@1.9.0) - '@opentelemetry/otlp-exporter-base': 0.221.0(@opentelemetry/api@1.9.0) - '@opentelemetry/otlp-transformer': 0.221.0(@opentelemetry/api@1.9.0) + '@opentelemetry/api': 1.9.1 + '@opentelemetry/exporter-metrics-otlp-http': 0.221.0(@opentelemetry/api@1.9.1) + '@opentelemetry/otlp-exporter-base': 0.221.0(@opentelemetry/api@1.9.1) + '@opentelemetry/otlp-transformer': 0.221.0(@opentelemetry/api@1.9.1) - '@opentelemetry/exporter-prometheus@0.221.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/exporter-prometheus@0.221.0(@opentelemetry/api@1.9.1)': dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.10.0(@opentelemetry/api@1.9.0) - '@opentelemetry/resources': 2.10.0(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-metrics': 2.10.0(@opentelemetry/api@1.9.0) + '@opentelemetry/api': 1.9.1 + '@opentelemetry/core': 2.10.0(@opentelemetry/api@1.9.1) + '@opentelemetry/resources': 2.10.0(@opentelemetry/api@1.9.1) + '@opentelemetry/sdk-metrics': 2.10.0(@opentelemetry/api@1.9.1) '@opentelemetry/semantic-conventions': 1.36.0 - '@opentelemetry/exporter-trace-otlp-grpc@0.221.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/exporter-trace-otlp-grpc@0.221.0(@opentelemetry/api@1.9.1)': dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/otlp-exporter-base': 0.221.0(@opentelemetry/api@1.9.0) - '@opentelemetry/otlp-grpc-exporter-base': 0.221.0(@opentelemetry/api@1.9.0) - '@opentelemetry/otlp-transformer': 0.221.0(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-trace': 2.10.0(@opentelemetry/api@1.9.0) + '@opentelemetry/api': 1.9.1 + '@opentelemetry/otlp-exporter-base': 0.221.0(@opentelemetry/api@1.9.1) + '@opentelemetry/otlp-grpc-exporter-base': 0.221.0(@opentelemetry/api@1.9.1) + '@opentelemetry/otlp-transformer': 0.221.0(@opentelemetry/api@1.9.1) + '@opentelemetry/sdk-trace': 2.10.0(@opentelemetry/api@1.9.1) - '@opentelemetry/exporter-trace-otlp-http@0.221.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/exporter-trace-otlp-http@0.221.0(@opentelemetry/api@1.9.1)': dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/otlp-exporter-base': 0.221.0(@opentelemetry/api@1.9.0) - '@opentelemetry/otlp-transformer': 0.221.0(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-trace': 2.10.0(@opentelemetry/api@1.9.0) + '@opentelemetry/api': 1.9.1 + '@opentelemetry/otlp-exporter-base': 0.221.0(@opentelemetry/api@1.9.1) + '@opentelemetry/otlp-transformer': 0.221.0(@opentelemetry/api@1.9.1) + '@opentelemetry/sdk-trace': 2.10.0(@opentelemetry/api@1.9.1) - '@opentelemetry/exporter-trace-otlp-proto@0.221.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/exporter-trace-otlp-proto@0.221.0(@opentelemetry/api@1.9.1)': dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/otlp-exporter-base': 0.221.0(@opentelemetry/api@1.9.0) - '@opentelemetry/otlp-transformer': 0.221.0(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-trace': 2.10.0(@opentelemetry/api@1.9.0) + '@opentelemetry/api': 1.9.1 + '@opentelemetry/otlp-exporter-base': 0.221.0(@opentelemetry/api@1.9.1) + '@opentelemetry/otlp-transformer': 0.221.0(@opentelemetry/api@1.9.1) + '@opentelemetry/sdk-trace': 2.10.0(@opentelemetry/api@1.9.1) - '@opentelemetry/exporter-zipkin@2.10.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/exporter-zipkin@2.10.0(@opentelemetry/api@1.9.1)': dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.10.0(@opentelemetry/api@1.9.0) - '@opentelemetry/resources': 2.10.0(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-trace': 2.10.0(@opentelemetry/api@1.9.0) + '@opentelemetry/api': 1.9.1 + '@opentelemetry/core': 2.10.0(@opentelemetry/api@1.9.1) + '@opentelemetry/resources': 2.10.0(@opentelemetry/api@1.9.1) + '@opentelemetry/sdk-trace': 2.10.0(@opentelemetry/api@1.9.1) '@opentelemetry/semantic-conventions': 1.36.0 - '@opentelemetry/instrumentation@0.221.0(@opentelemetry/api@1.9.0)(supports-color@10.2.2)': + '@opentelemetry/instrumentation@0.221.0(@opentelemetry/api@1.9.1)(supports-color@10.2.2)': dependencies: - '@opentelemetry/api': 1.9.0 + '@opentelemetry/api': 1.9.1 '@opentelemetry/api-logs': 0.221.0 import-in-the-middle: 3.0.0 require-in-the-middle: 8.0.0(supports-color@10.2.2) transitivePeerDependencies: - supports-color - '@opentelemetry/otlp-exporter-base@0.221.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/otlp-exporter-base@0.221.0(@opentelemetry/api@1.9.1)': dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.10.0(@opentelemetry/api@1.9.0) - '@opentelemetry/otlp-transformer': 0.221.0(@opentelemetry/api@1.9.0) + '@opentelemetry/api': 1.9.1 + '@opentelemetry/core': 2.10.0(@opentelemetry/api@1.9.1) + '@opentelemetry/otlp-transformer': 0.221.0(@opentelemetry/api@1.9.1) - '@opentelemetry/otlp-grpc-exporter-base@0.221.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/otlp-grpc-exporter-base@0.221.0(@opentelemetry/api@1.9.1)': dependencies: '@grpc/grpc-js': 1.14.4 - '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.10.0(@opentelemetry/api@1.9.0) - '@opentelemetry/otlp-exporter-base': 0.221.0(@opentelemetry/api@1.9.0) - '@opentelemetry/otlp-transformer': 0.221.0(@opentelemetry/api@1.9.0) + '@opentelemetry/api': 1.9.1 + '@opentelemetry/core': 2.10.0(@opentelemetry/api@1.9.1) + '@opentelemetry/otlp-exporter-base': 0.221.0(@opentelemetry/api@1.9.1) + '@opentelemetry/otlp-transformer': 0.221.0(@opentelemetry/api@1.9.1) - '@opentelemetry/otlp-transformer@0.221.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/otlp-transformer@0.221.0(@opentelemetry/api@1.9.1)': dependencies: - '@opentelemetry/api': 1.9.0 + '@opentelemetry/api': 1.9.1 '@opentelemetry/api-logs': 0.221.0 - '@opentelemetry/core': 2.10.0(@opentelemetry/api@1.9.0) - '@opentelemetry/resources': 2.10.0(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-logs': 0.221.0(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-metrics': 2.10.0(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-trace': 2.10.0(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 2.10.0(@opentelemetry/api@1.9.1) + '@opentelemetry/resources': 2.10.0(@opentelemetry/api@1.9.1) + '@opentelemetry/sdk-logs': 0.221.0(@opentelemetry/api@1.9.1) + '@opentelemetry/sdk-metrics': 2.10.0(@opentelemetry/api@1.9.1) + '@opentelemetry/sdk-trace': 2.10.0(@opentelemetry/api@1.9.1) - '@opentelemetry/propagator-b3@2.10.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/propagator-b3@2.10.0(@opentelemetry/api@1.9.1)': dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.10.0(@opentelemetry/api@1.9.0) + '@opentelemetry/api': 1.9.1 + '@opentelemetry/core': 2.10.0(@opentelemetry/api@1.9.1) - '@opentelemetry/propagator-jaeger@2.10.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/propagator-jaeger@2.10.0(@opentelemetry/api@1.9.1)': dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.10.0(@opentelemetry/api@1.9.0) + '@opentelemetry/api': 1.9.1 + '@opentelemetry/core': 2.10.0(@opentelemetry/api@1.9.1) - '@opentelemetry/resources@2.10.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/resources@2.10.0(@opentelemetry/api@1.9.1)': dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.10.0(@opentelemetry/api@1.9.0) + '@opentelemetry/api': 1.9.1 + '@opentelemetry/core': 2.10.0(@opentelemetry/api@1.9.1) '@opentelemetry/semantic-conventions': 1.36.0 - '@opentelemetry/sdk-logs@0.221.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/sdk-logs@0.221.0(@opentelemetry/api@1.9.1)': dependencies: - '@opentelemetry/api': 1.9.0 + '@opentelemetry/api': 1.9.1 '@opentelemetry/api-logs': 0.221.0 - '@opentelemetry/core': 2.10.0(@opentelemetry/api@1.9.0) - '@opentelemetry/resources': 2.10.0(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 2.10.0(@opentelemetry/api@1.9.1) + '@opentelemetry/resources': 2.10.0(@opentelemetry/api@1.9.1) '@opentelemetry/semantic-conventions': 1.36.0 - '@opentelemetry/sdk-metrics@2.10.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/sdk-metrics@2.10.0(@opentelemetry/api@1.9.1)': dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.10.0(@opentelemetry/api@1.9.0) - '@opentelemetry/resources': 2.10.0(@opentelemetry/api@1.9.0) + '@opentelemetry/api': 1.9.1 + '@opentelemetry/core': 2.10.0(@opentelemetry/api@1.9.1) + '@opentelemetry/resources': 2.10.0(@opentelemetry/api@1.9.1) - '@opentelemetry/sdk-node@0.221.0(@opentelemetry/api@1.9.0)(supports-color@10.2.2)': + '@opentelemetry/sdk-node@0.221.0(@opentelemetry/api@1.9.1)(supports-color@10.2.2)': dependencies: - '@opentelemetry/api': 1.9.0 + '@opentelemetry/api': 1.9.1 '@opentelemetry/api-logs': 0.221.0 - '@opentelemetry/configuration': 0.221.0(@opentelemetry/api@1.9.0) - '@opentelemetry/context-async-hooks': 2.10.0(@opentelemetry/api@1.9.0) - '@opentelemetry/core': 2.10.0(@opentelemetry/api@1.9.0) - '@opentelemetry/exporter-logs-otlp-grpc': 0.221.0(@opentelemetry/api@1.9.0) - '@opentelemetry/exporter-logs-otlp-http': 0.221.0(@opentelemetry/api@1.9.0) - '@opentelemetry/exporter-logs-otlp-proto': 0.221.0(@opentelemetry/api@1.9.0) - '@opentelemetry/exporter-metrics-otlp-grpc': 0.221.0(@opentelemetry/api@1.9.0) - '@opentelemetry/exporter-metrics-otlp-http': 0.221.0(@opentelemetry/api@1.9.0) - '@opentelemetry/exporter-metrics-otlp-proto': 0.221.0(@opentelemetry/api@1.9.0) - '@opentelemetry/exporter-prometheus': 0.221.0(@opentelemetry/api@1.9.0) - '@opentelemetry/exporter-trace-otlp-grpc': 0.221.0(@opentelemetry/api@1.9.0) - '@opentelemetry/exporter-trace-otlp-http': 0.221.0(@opentelemetry/api@1.9.0) - '@opentelemetry/exporter-trace-otlp-proto': 0.221.0(@opentelemetry/api@1.9.0) - '@opentelemetry/exporter-zipkin': 2.10.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation': 0.221.0(@opentelemetry/api@1.9.0)(supports-color@10.2.2) - '@opentelemetry/otlp-exporter-base': 0.221.0(@opentelemetry/api@1.9.0) - '@opentelemetry/otlp-grpc-exporter-base': 0.221.0(@opentelemetry/api@1.9.0) - '@opentelemetry/propagator-b3': 2.10.0(@opentelemetry/api@1.9.0) - '@opentelemetry/propagator-jaeger': 2.10.0(@opentelemetry/api@1.9.0) - '@opentelemetry/resources': 2.10.0(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-logs': 0.221.0(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-metrics': 2.10.0(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-trace': 2.10.0(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-trace-base': 2.10.0(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-trace-node': 2.10.0(@opentelemetry/api@1.9.0) + '@opentelemetry/configuration': 0.221.0(@opentelemetry/api@1.9.1) + '@opentelemetry/context-async-hooks': 2.10.0(@opentelemetry/api@1.9.1) + '@opentelemetry/core': 2.10.0(@opentelemetry/api@1.9.1) + '@opentelemetry/exporter-logs-otlp-grpc': 0.221.0(@opentelemetry/api@1.9.1) + '@opentelemetry/exporter-logs-otlp-http': 0.221.0(@opentelemetry/api@1.9.1) + '@opentelemetry/exporter-logs-otlp-proto': 0.221.0(@opentelemetry/api@1.9.1) + '@opentelemetry/exporter-metrics-otlp-grpc': 0.221.0(@opentelemetry/api@1.9.1) + '@opentelemetry/exporter-metrics-otlp-http': 0.221.0(@opentelemetry/api@1.9.1) + '@opentelemetry/exporter-metrics-otlp-proto': 0.221.0(@opentelemetry/api@1.9.1) + '@opentelemetry/exporter-prometheus': 0.221.0(@opentelemetry/api@1.9.1) + '@opentelemetry/exporter-trace-otlp-grpc': 0.221.0(@opentelemetry/api@1.9.1) + '@opentelemetry/exporter-trace-otlp-http': 0.221.0(@opentelemetry/api@1.9.1) + '@opentelemetry/exporter-trace-otlp-proto': 0.221.0(@opentelemetry/api@1.9.1) + '@opentelemetry/exporter-zipkin': 2.10.0(@opentelemetry/api@1.9.1) + '@opentelemetry/instrumentation': 0.221.0(@opentelemetry/api@1.9.1)(supports-color@10.2.2) + '@opentelemetry/otlp-exporter-base': 0.221.0(@opentelemetry/api@1.9.1) + '@opentelemetry/otlp-grpc-exporter-base': 0.221.0(@opentelemetry/api@1.9.1) + '@opentelemetry/propagator-b3': 2.10.0(@opentelemetry/api@1.9.1) + '@opentelemetry/propagator-jaeger': 2.10.0(@opentelemetry/api@1.9.1) + '@opentelemetry/resources': 2.10.0(@opentelemetry/api@1.9.1) + '@opentelemetry/sdk-logs': 0.221.0(@opentelemetry/api@1.9.1) + '@opentelemetry/sdk-metrics': 2.10.0(@opentelemetry/api@1.9.1) + '@opentelemetry/sdk-trace': 2.10.0(@opentelemetry/api@1.9.1) + '@opentelemetry/sdk-trace-base': 2.10.0(@opentelemetry/api@1.9.1) + '@opentelemetry/sdk-trace-node': 2.10.0(@opentelemetry/api@1.9.1) '@opentelemetry/semantic-conventions': 1.36.0 transitivePeerDependencies: - supports-color - '@opentelemetry/sdk-trace-base@2.10.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/sdk-trace-base@2.10.0(@opentelemetry/api@1.9.1)': dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.10.0(@opentelemetry/api@1.9.0) - '@opentelemetry/resources': 2.10.0(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-trace': 2.10.0(@opentelemetry/api@1.9.0) + '@opentelemetry/api': 1.9.1 + '@opentelemetry/core': 2.10.0(@opentelemetry/api@1.9.1) + '@opentelemetry/resources': 2.10.0(@opentelemetry/api@1.9.1) + '@opentelemetry/sdk-trace': 2.10.0(@opentelemetry/api@1.9.1) '@opentelemetry/semantic-conventions': 1.36.0 - '@opentelemetry/sdk-trace-node@2.10.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/sdk-trace-node@2.10.0(@opentelemetry/api@1.9.1)': dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/context-async-hooks': 2.10.0(@opentelemetry/api@1.9.0) - '@opentelemetry/core': 2.10.0(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-trace-base': 2.10.0(@opentelemetry/api@1.9.0) + '@opentelemetry/api': 1.9.1 + '@opentelemetry/context-async-hooks': 2.10.0(@opentelemetry/api@1.9.1) + '@opentelemetry/core': 2.10.0(@opentelemetry/api@1.9.1) + '@opentelemetry/sdk-trace-base': 2.10.0(@opentelemetry/api@1.9.1) - '@opentelemetry/sdk-trace@2.10.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/sdk-trace@2.10.0(@opentelemetry/api@1.9.1)': dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.10.0(@opentelemetry/api@1.9.0) - '@opentelemetry/resources': 2.10.0(@opentelemetry/api@1.9.0) + '@opentelemetry/api': 1.9.1 + '@opentelemetry/core': 2.10.0(@opentelemetry/api@1.9.1) + '@opentelemetry/resources': 2.10.0(@opentelemetry/api@1.9.1) '@opentelemetry/semantic-conventions': 1.36.0 '@opentelemetry/semantic-conventions@1.36.0': {} - '@oxc-project/types@0.139.0': {} - - '@oxc-project/types@0.140.0': {} + '@oxc-project/types@0.143.0': {} '@oxfmt/binding-android-arm-eabi@0.62.0': optional: true @@ -5697,7 +5518,7 @@ snapshots: '@pnpm/deps.graph-sequencer@1100.0.1': {} - '@polka/url@1.0.0-next.28': {} + '@polka/url@1.0.0-next.29': {} '@poppinss/colors@4.1.6': dependencies: @@ -5731,104 +5552,46 @@ snapshots: '@protobufjs/utf8@1.1.1': {} - '@publint/pack@0.1.0': {} - - '@rolldown/binding-android-arm64@1.1.5': - optional: true - - '@rolldown/binding-android-arm64@1.2.0': - optional: true - - '@rolldown/binding-darwin-arm64@1.1.5': - optional: true - - '@rolldown/binding-darwin-arm64@1.2.0': + '@rolldown/binding-android-arm64@1.2.3': optional: true - '@rolldown/binding-darwin-x64@1.1.5': + '@rolldown/binding-darwin-arm64@1.2.3': optional: true - '@rolldown/binding-darwin-x64@1.2.0': + '@rolldown/binding-darwin-x64@1.2.3': optional: true - '@rolldown/binding-freebsd-x64@1.1.5': + '@rolldown/binding-freebsd-x64@1.2.3': optional: true - '@rolldown/binding-freebsd-x64@1.2.0': + '@rolldown/binding-linux-arm-gnueabihf@1.2.3': optional: true - '@rolldown/binding-linux-arm-gnueabihf@1.1.5': + '@rolldown/binding-linux-arm64-gnu@1.2.3': optional: true - '@rolldown/binding-linux-arm-gnueabihf@1.2.0': + '@rolldown/binding-linux-arm64-musl@1.2.3': optional: true - '@rolldown/binding-linux-arm64-gnu@1.1.5': + '@rolldown/binding-linux-ppc64-gnu@1.2.3': optional: true - '@rolldown/binding-linux-arm64-gnu@1.2.0': + '@rolldown/binding-linux-s390x-gnu@1.2.3': optional: true - '@rolldown/binding-linux-arm64-musl@1.1.5': + '@rolldown/binding-linux-x64-gnu@1.2.3': optional: true - '@rolldown/binding-linux-arm64-musl@1.2.0': + '@rolldown/binding-linux-x64-musl@1.2.3': optional: true - '@rolldown/binding-linux-ppc64-gnu@1.1.5': + '@rolldown/binding-openharmony-arm64@1.2.3': optional: true - '@rolldown/binding-linux-ppc64-gnu@1.2.0': + '@rolldown/binding-win32-arm64-msvc@1.2.3': optional: true - '@rolldown/binding-linux-s390x-gnu@1.1.5': - optional: true - - '@rolldown/binding-linux-s390x-gnu@1.2.0': - optional: true - - '@rolldown/binding-linux-x64-gnu@1.1.5': - optional: true - - '@rolldown/binding-linux-x64-gnu@1.2.0': - optional: true - - '@rolldown/binding-linux-x64-musl@1.1.5': - optional: true - - '@rolldown/binding-linux-x64-musl@1.2.0': - optional: true - - '@rolldown/binding-openharmony-arm64@1.1.5': - optional: true - - '@rolldown/binding-openharmony-arm64@1.2.0': - optional: true - - '@rolldown/binding-wasm32-wasi@1.1.5': - dependencies: - '@emnapi/core': 1.11.1 - '@emnapi/runtime': 1.11.1 - '@napi-rs/wasm-runtime': 1.1.6(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1) - optional: true - - '@rolldown/binding-wasm32-wasi@1.2.0': - dependencies: - '@emnapi/core': 1.11.2 - '@emnapi/runtime': 1.11.2 - '@napi-rs/wasm-runtime': 1.1.6(@emnapi/core@1.11.2)(@emnapi/runtime@1.11.2) - optional: true - - '@rolldown/binding-win32-arm64-msvc@1.1.5': - optional: true - - '@rolldown/binding-win32-arm64-msvc@1.2.0': - optional: true - - '@rolldown/binding-win32-x64-msvc@1.1.5': - optional: true - - '@rolldown/binding-win32-x64-msvc@1.2.0': + '@rolldown/binding-win32-x64-msvc@1.2.3': optional: true '@rolldown/pluginutils@1.0.1': {} @@ -5845,47 +5608,42 @@ snapshots: '@standard-schema/spec@1.1.0': {} - '@stylistic/eslint-plugin@5.10.0(eslint@10.8.0(jiti@2.4.2)(supports-color@10.2.2))': + '@stylistic/eslint-plugin@5.10.0(eslint@10.8.1(jiti@2.4.2)(supports-color@10.2.2))': dependencies: - '@eslint-community/eslint-utils': 4.10.1(eslint@10.8.0(jiti@2.4.2)(supports-color@10.2.2)) + '@eslint-community/eslint-utils': 4.10.1(eslint@10.8.1(jiti@2.4.2)(supports-color@10.2.2)) '@typescript-eslint/types': 8.61.1 - eslint: 10.8.0(jiti@2.4.2)(supports-color@10.2.2) + eslint: 10.8.1(jiti@2.4.2)(supports-color@10.2.2) eslint-visitor-keys: 4.2.1 espree: 10.4.0 estraverse: 5.3.0 picomatch: 4.0.5 - '@sveltejs/acorn-typescript@1.0.10(acorn@8.17.0)': + '@sveltejs/acorn-typescript@1.0.12(acorn@8.18.0)': dependencies: - acorn: 8.17.0 + acorn: 8.18.0 - '@sveltejs/eslint-config@10.0.3(@eslint/js@10.0.1(eslint@10.8.0(jiti@2.4.2)(supports-color@10.2.2)))(@stylistic/eslint-plugin@5.10.0(eslint@10.8.0(jiti@2.4.2)(supports-color@10.2.2)))(eslint-config-prettier@9.1.0(eslint@10.8.0(jiti@2.4.2)(supports-color@10.2.2)))(eslint-plugin-n@17.24.0(eslint@10.8.0(jiti@2.4.2)(supports-color@10.2.2))(typescript@6.0.3))(eslint-plugin-svelte@3.15.0(eslint@10.8.0(jiti@2.4.2)(supports-color@10.2.2))(svelte@5.56.3(@typescript-eslint/types@8.61.1)))(eslint@10.8.0(jiti@2.4.2)(supports-color@10.2.2))(typescript-eslint@8.58.0(eslint@10.8.0(jiti@2.4.2)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3))(typescript@6.0.3)': + '@sveltejs/eslint-config@10.0.4(@eslint/js@10.0.1(eslint@10.8.1(jiti@2.4.2)(supports-color@10.2.2)))(@stylistic/eslint-plugin@5.10.0(eslint@10.8.1(jiti@2.4.2)(supports-color@10.2.2)))(eslint-config-prettier@9.1.0(eslint@10.8.1(jiti@2.4.2)(supports-color@10.2.2)))(eslint-plugin-n@17.24.0(eslint@10.8.1(jiti@2.4.2)(supports-color@10.2.2))(typescript@6.0.3))(eslint-plugin-svelte@3.15.0(eslint@10.8.1(jiti@2.4.2)(supports-color@10.2.2))(svelte@5.56.8(@typescript-eslint/types@8.61.1)))(eslint@10.8.1(jiti@2.4.2)(supports-color@10.2.2))(typescript-eslint@8.58.0(eslint@10.8.1(jiti@2.4.2)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3))(typescript@6.0.3)': dependencies: - '@eslint/js': 10.0.1(eslint@10.8.0(jiti@2.4.2)(supports-color@10.2.2)) - '@stylistic/eslint-plugin': 5.10.0(eslint@10.8.0(jiti@2.4.2)(supports-color@10.2.2)) - eslint: 10.8.0(jiti@2.4.2)(supports-color@10.2.2) - eslint-config-prettier: 9.1.0(eslint@10.8.0(jiti@2.4.2)(supports-color@10.2.2)) - eslint-plugin-n: 17.24.0(eslint@10.8.0(jiti@2.4.2)(supports-color@10.2.2))(typescript@6.0.3) - eslint-plugin-svelte: 3.15.0(eslint@10.8.0(jiti@2.4.2)(supports-color@10.2.2))(svelte@5.56.3(@typescript-eslint/types@8.61.1)) - globals: 17.7.0 + '@eslint/js': 10.0.1(eslint@10.8.1(jiti@2.4.2)(supports-color@10.2.2)) + '@stylistic/eslint-plugin': 5.10.0(eslint@10.8.1(jiti@2.4.2)(supports-color@10.2.2)) + eslint: 10.8.1(jiti@2.4.2)(supports-color@10.2.2) + eslint-config-prettier: 9.1.0(eslint@10.8.1(jiti@2.4.2)(supports-color@10.2.2)) + eslint-plugin-n: 17.24.0(eslint@10.8.1(jiti@2.4.2)(supports-color@10.2.2))(typescript@6.0.3) + eslint-plugin-svelte: 3.15.0(eslint@10.8.1(jiti@2.4.2)(supports-color@10.2.2))(svelte@5.56.8(@typescript-eslint/types@8.61.1)) + globals: 17.9.0 typescript: 6.0.3 - typescript-eslint: 8.58.0(eslint@10.8.0(jiti@2.4.2)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3) + typescript-eslint: 8.58.0(eslint@10.8.1(jiti@2.4.2)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3) '@sveltejs/load-config@0.2.2': {} - '@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.56.3(@typescript-eslint/types@8.61.1))(vite@8.1.5(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0))': + '@sveltejs/vite-plugin-svelte@7.3.0(svelte@5.56.8(@typescript-eslint/types@8.61.1))(vite@8.2.1(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0))': dependencies: deepmerge: 4.3.1 - magic-string: 0.30.21 + magic-string: 1.1.0 obug: 2.1.4 - svelte: 5.56.3(@typescript-eslint/types@8.61.1) - vite: 8.1.5(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0) - vitefu: 1.1.3(vite@8.1.5(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0)) - - '@tybys/wasm-util@0.10.3': - dependencies: - tslib: 2.8.1 - optional: true + svelte: 5.56.8(@typescript-eslint/types@8.61.1) + vite: 8.2.1(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0) + vitefu: 1.1.3(vite@8.2.1(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0)) '@types/chai@5.2.3': dependencies: @@ -5910,19 +5668,19 @@ snapshots: dependencies: undici-types: 6.21.0 - '@types/semver@7.5.8': {} + '@types/semver@7.8.0': {} '@types/trusted-types@2.0.7': {} - '@typescript-eslint/eslint-plugin@8.58.0(@typescript-eslint/parser@8.58.0(eslint@10.8.0(jiti@2.4.2)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3))(eslint@10.8.0(jiti@2.4.2)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3)': + '@typescript-eslint/eslint-plugin@8.58.0(@typescript-eslint/parser@8.58.0(eslint@10.8.1(jiti@2.4.2)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3))(eslint@10.8.1(jiti@2.4.2)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3)': dependencies: '@eslint-community/regexpp': 4.12.2 - '@typescript-eslint/parser': 8.58.0(eslint@10.8.0(jiti@2.4.2)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3) + '@typescript-eslint/parser': 8.58.0(eslint@10.8.1(jiti@2.4.2)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3) '@typescript-eslint/scope-manager': 8.58.0 - '@typescript-eslint/type-utils': 8.58.0(eslint@10.8.0(jiti@2.4.2)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3) - '@typescript-eslint/utils': 8.58.0(eslint@10.8.0(jiti@2.4.2)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3) + '@typescript-eslint/type-utils': 8.58.0(eslint@10.8.1(jiti@2.4.2)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3) + '@typescript-eslint/utils': 8.58.0(eslint@10.8.1(jiti@2.4.2)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3) '@typescript-eslint/visitor-keys': 8.58.0 - eslint: 10.8.0(jiti@2.4.2)(supports-color@10.2.2) + eslint: 10.8.1(jiti@2.4.2)(supports-color@10.2.2) ignore: 7.0.5 natural-compare: 1.4.0 ts-api-utils: 2.5.0(typescript@6.0.3) @@ -5930,14 +5688,14 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.58.0(eslint@10.8.0(jiti@2.4.2)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3)': + '@typescript-eslint/parser@8.58.0(eslint@10.8.1(jiti@2.4.2)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3)': dependencies: '@typescript-eslint/scope-manager': 8.58.0 '@typescript-eslint/types': 8.58.0 '@typescript-eslint/typescript-estree': 8.58.0(supports-color@10.2.2)(typescript@6.0.3) '@typescript-eslint/visitor-keys': 8.58.0 debug: 4.4.3(supports-color@10.2.2) - eslint: 10.8.0(jiti@2.4.2)(supports-color@10.2.2) + eslint: 10.8.1(jiti@2.4.2)(supports-color@10.2.2) typescript: 6.0.3 transitivePeerDependencies: - supports-color @@ -5960,13 +5718,13 @@ snapshots: dependencies: typescript: 6.0.3 - '@typescript-eslint/type-utils@8.58.0(eslint@10.8.0(jiti@2.4.2)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3)': + '@typescript-eslint/type-utils@8.58.0(eslint@10.8.1(jiti@2.4.2)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3)': dependencies: '@typescript-eslint/types': 8.58.0 '@typescript-eslint/typescript-estree': 8.58.0(supports-color@10.2.2)(typescript@6.0.3) - '@typescript-eslint/utils': 8.58.0(eslint@10.8.0(jiti@2.4.2)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3) + '@typescript-eslint/utils': 8.58.0(eslint@10.8.1(jiti@2.4.2)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3) debug: 4.4.3(supports-color@10.2.2) - eslint: 10.8.0(jiti@2.4.2)(supports-color@10.2.2) + eslint: 10.8.1(jiti@2.4.2)(supports-color@10.2.2) ts-api-utils: 2.5.0(typescript@6.0.3) typescript: 6.0.3 transitivePeerDependencies: @@ -5991,13 +5749,13 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.58.0(eslint@10.8.0(jiti@2.4.2)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3)': + '@typescript-eslint/utils@8.58.0(eslint@10.8.1(jiti@2.4.2)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3)': dependencies: - '@eslint-community/eslint-utils': 4.10.1(eslint@10.8.0(jiti@2.4.2)(supports-color@10.2.2)) + '@eslint-community/eslint-utils': 4.10.1(eslint@10.8.1(jiti@2.4.2)(supports-color@10.2.2)) '@typescript-eslint/scope-manager': 8.58.0 '@typescript-eslint/types': 8.58.0 '@typescript-eslint/typescript-estree': 8.58.0(supports-color@10.2.2)(typescript@6.0.3) - eslint: 10.8.0(jiti@2.4.2)(supports-color@10.2.2) + eslint: 10.8.1(jiti@2.4.2)(supports-color@10.2.2) typescript: 6.0.3 transitivePeerDependencies: - supports-color @@ -6071,8 +5829,8 @@ snapshots: dependencies: '@mapbox/node-pre-gyp': 2.0.0(supports-color@10.2.2) '@rollup/pluginutils': 5.4.0 - acorn: 8.17.0 - acorn-import-attributes: 1.9.5(acorn@8.17.0) + acorn: 8.18.0 + acorn-import-attributes: 1.9.5(acorn@8.18.0) async-sema: 3.1.1 bindings: 1.5.0 estree-walker: 2.0.2 @@ -6086,29 +5844,29 @@ snapshots: - rollup - supports-color - '@vitest/browser-playwright@4.1.10(playwright@1.62.1)(vite@8.1.5(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0))(vitest@4.1.10)': + '@vitest/browser-playwright@4.1.10(playwright@1.62.1)(vite@8.2.1(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0))(vitest@4.1.10)': dependencies: - '@vitest/browser': 4.1.10(vite@8.1.5(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0))(vitest@4.1.10) - '@vitest/mocker': 4.1.10(vite@8.1.5(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0)) + '@vitest/browser': 4.1.10(vite@8.2.1(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0))(vitest@4.1.10) + '@vitest/mocker': 4.1.10(vite@8.2.1(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0)) playwright: 1.62.1 tinyrainbow: 3.1.0 - vitest: 4.1.10(@opentelemetry/api@1.9.0)(@types/node@22.19.19)(@vitest/browser-playwright@4.1.10)(jsdom@30.0.1)(vite@8.1.5(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0)) + vitest: 4.1.10(@opentelemetry/api@1.9.1)(@types/node@22.19.19)(@vitest/browser-playwright@4.1.10)(jsdom@30.0.1)(vite@8.2.1(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0)) transitivePeerDependencies: - bufferutil - msw - utf-8-validate - vite - '@vitest/browser@4.1.10(vite@8.1.5(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0))(vitest@4.1.10)': + '@vitest/browser@4.1.10(vite@8.2.1(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0))(vitest@4.1.10)': dependencies: '@blazediff/core': 1.9.1 - '@vitest/mocker': 4.1.10(vite@8.1.5(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0)) + '@vitest/mocker': 4.1.10(vite@8.2.1(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0)) '@vitest/utils': 4.1.10 magic-string: 0.30.21 pngjs: 7.0.0 sirv: 3.0.2 tinyrainbow: 3.1.0 - vitest: 4.1.10(@opentelemetry/api@1.9.0)(@types/node@22.19.19)(@vitest/browser-playwright@4.1.10)(jsdom@30.0.1)(vite@8.1.5(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0)) + vitest: 4.1.10(@opentelemetry/api@1.9.1)(@types/node@22.19.19)(@vitest/browser-playwright@4.1.10)(jsdom@30.0.1)(vite@8.2.1(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0)) ws: 8.21.0 transitivePeerDependencies: - bufferutil @@ -6125,13 +5883,13 @@ snapshots: chai: 6.2.2 tinyrainbow: 3.1.0 - '@vitest/mocker@4.1.10(vite@8.1.5(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0))': + '@vitest/mocker@4.1.10(vite@8.2.1(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0))': dependencies: '@vitest/spy': 4.1.10 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - vite: 8.1.5(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0) + vite: 8.2.1(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0) '@vitest/pretty-format@4.1.10': dependencies: @@ -6159,15 +5917,15 @@ snapshots: abbrev@2.0.0: {} - acorn-import-attributes@1.9.5(acorn@8.17.0): + acorn-import-attributes@1.9.5(acorn@8.18.0): dependencies: - acorn: 8.17.0 + acorn: 8.18.0 - acorn-jsx@5.3.2(acorn@8.17.0): + acorn-jsx@5.3.2(acorn@8.18.0): dependencies: - acorn: 8.17.0 + acorn: 8.18.0 - acorn@8.17.0: {} + acorn@8.18.0: {} agent-base@7.1.3: {} @@ -6246,7 +6004,7 @@ snapshots: cookie@1.1.1: {} - cookie@2.0.0: {} + cookie@2.0.1: {} cross-spawn@7.0.6: dependencies: @@ -6286,7 +6044,7 @@ snapshots: detect-libc@2.1.2: {} - devalue@5.8.1: {} + devalue@5.9.0: {} dts-buddy@0.8.3(typescript@6.0.3): dependencies: @@ -6354,28 +6112,28 @@ snapshots: escape-string-regexp@4.0.0: {} - eslint-compat-utils@0.5.1(eslint@10.8.0(jiti@2.4.2)(supports-color@10.2.2)): + eslint-compat-utils@0.5.1(eslint@10.8.1(jiti@2.4.2)(supports-color@10.2.2)): dependencies: - eslint: 10.8.0(jiti@2.4.2)(supports-color@10.2.2) + eslint: 10.8.1(jiti@2.4.2)(supports-color@10.2.2) semver: 7.8.5 - eslint-config-prettier@9.1.0(eslint@10.8.0(jiti@2.4.2)(supports-color@10.2.2)): + eslint-config-prettier@9.1.0(eslint@10.8.1(jiti@2.4.2)(supports-color@10.2.2)): dependencies: - eslint: 10.8.0(jiti@2.4.2)(supports-color@10.2.2) + eslint: 10.8.1(jiti@2.4.2)(supports-color@10.2.2) - eslint-plugin-es-x@7.8.0(eslint@10.8.0(jiti@2.4.2)(supports-color@10.2.2)): + eslint-plugin-es-x@7.8.0(eslint@10.8.1(jiti@2.4.2)(supports-color@10.2.2)): dependencies: - '@eslint-community/eslint-utils': 4.10.1(eslint@10.8.0(jiti@2.4.2)(supports-color@10.2.2)) + '@eslint-community/eslint-utils': 4.10.1(eslint@10.8.1(jiti@2.4.2)(supports-color@10.2.2)) '@eslint-community/regexpp': 4.12.2 - eslint: 10.8.0(jiti@2.4.2)(supports-color@10.2.2) - eslint-compat-utils: 0.5.1(eslint@10.8.0(jiti@2.4.2)(supports-color@10.2.2)) + eslint: 10.8.1(jiti@2.4.2)(supports-color@10.2.2) + eslint-compat-utils: 0.5.1(eslint@10.8.1(jiti@2.4.2)(supports-color@10.2.2)) - eslint-plugin-n@17.24.0(eslint@10.8.0(jiti@2.4.2)(supports-color@10.2.2))(typescript@6.0.3): + eslint-plugin-n@17.24.0(eslint@10.8.1(jiti@2.4.2)(supports-color@10.2.2))(typescript@6.0.3): dependencies: - '@eslint-community/eslint-utils': 4.10.1(eslint@10.8.0(jiti@2.4.2)(supports-color@10.2.2)) + '@eslint-community/eslint-utils': 4.10.1(eslint@10.8.1(jiti@2.4.2)(supports-color@10.2.2)) enhanced-resolve: 5.24.0 - eslint: 10.8.0(jiti@2.4.2)(supports-color@10.2.2) - eslint-plugin-es-x: 7.8.0(eslint@10.8.0(jiti@2.4.2)(supports-color@10.2.2)) + eslint: 10.8.1(jiti@2.4.2)(supports-color@10.2.2) + eslint-plugin-es-x: 7.8.0(eslint@10.8.1(jiti@2.4.2)(supports-color@10.2.2)) get-tsconfig: 4.14.0 globals: 15.15.0 globrex: 0.1.2 @@ -6385,21 +6143,21 @@ snapshots: transitivePeerDependencies: - typescript - eslint-plugin-svelte@3.15.0(eslint@10.8.0(jiti@2.4.2)(supports-color@10.2.2))(svelte@5.56.3(@typescript-eslint/types@8.61.1)): + eslint-plugin-svelte@3.15.0(eslint@10.8.1(jiti@2.4.2)(supports-color@10.2.2))(svelte@5.56.8(@typescript-eslint/types@8.61.1)): dependencies: - '@eslint-community/eslint-utils': 4.10.1(eslint@10.8.0(jiti@2.4.2)(supports-color@10.2.2)) + '@eslint-community/eslint-utils': 4.10.1(eslint@10.8.1(jiti@2.4.2)(supports-color@10.2.2)) '@jridgewell/sourcemap-codec': 1.5.5 - eslint: 10.8.0(jiti@2.4.2)(supports-color@10.2.2) + eslint: 10.8.1(jiti@2.4.2)(supports-color@10.2.2) esutils: 2.0.3 globals: 16.5.0 known-css-properties: 0.37.0 - postcss: 8.5.19 - postcss-load-config: 3.1.4(postcss@8.5.19) - postcss-safe-parser: 7.0.1(postcss@8.5.19) + postcss: 8.5.26 + postcss-load-config: 3.1.4(postcss@8.5.26) + postcss-safe-parser: 7.0.1(postcss@8.5.26) semver: 7.8.5 - svelte-eslint-parser: 1.8.0(svelte@5.56.3(@typescript-eslint/types@8.61.1)) + svelte-eslint-parser: 1.8.0(svelte@5.56.8(@typescript-eslint/types@8.61.1)) optionalDependencies: - svelte: 5.56.3(@typescript-eslint/types@8.61.1) + svelte: 5.56.8(@typescript-eslint/types@8.61.1) transitivePeerDependencies: - ts-node @@ -6421,9 +6179,9 @@ snapshots: eslint-visitor-keys@5.0.1: {} - eslint@10.8.0(jiti@2.4.2)(supports-color@10.2.2): + eslint@10.8.1(jiti@2.4.2)(supports-color@10.2.2): dependencies: - '@eslint-community/eslint-utils': 4.10.1(eslint@10.8.0(jiti@2.4.2)(supports-color@10.2.2)) + '@eslint-community/eslint-utils': 4.10.1(eslint@10.8.1(jiti@2.4.2)(supports-color@10.2.2)) '@eslint-community/regexpp': 4.12.2 '@eslint/config-array': 0.23.5(supports-color@10.2.2) '@eslint/config-helpers': 0.7.0 @@ -6462,21 +6220,21 @@ snapshots: espree@10.4.0: dependencies: - acorn: 8.17.0 - acorn-jsx: 5.3.2(acorn@8.17.0) + acorn: 8.18.0 + acorn-jsx: 5.3.2(acorn@8.18.0) eslint-visitor-keys: 4.2.1 espree@11.2.0: dependencies: - acorn: 8.17.0 - acorn-jsx: 5.3.2(acorn@8.17.0) + acorn: 8.18.0 + acorn-jsx: 5.3.2(acorn@8.18.0) eslint-visitor-keys: 5.0.1 esquery@1.7.0: dependencies: estraverse: 5.3.0 - esrap@2.2.11(@typescript-eslint/types@8.61.1): + esrap@2.3.2(@typescript-eslint/types@8.61.1): dependencies: '@jridgewell/sourcemap-codec': 1.5.5 optionalDependencies: @@ -6564,7 +6322,7 @@ snapshots: globals@16.5.0: {} - globals@17.7.0: {} + globals@17.9.0: {} globrex@0.1.2: {} @@ -6593,8 +6351,8 @@ snapshots: import-in-the-middle@3.0.0: dependencies: - acorn: 8.17.0 - acorn-import-attributes: 1.9.5(acorn@8.17.0) + acorn: 8.18.0 + acorn-import-attributes: 1.9.5(acorn@8.18.0) cjs-module-lexer: 2.2.0 module-details-from-path: 1.0.4 @@ -6675,54 +6433,54 @@ snapshots: prelude-ls: 1.2.1 type-check: 0.4.0 - lightningcss-android-arm64@1.32.0: + lightningcss-android-arm64@1.33.0: optional: true - lightningcss-darwin-arm64@1.32.0: + lightningcss-darwin-arm64@1.33.0: optional: true - lightningcss-darwin-x64@1.32.0: + lightningcss-darwin-x64@1.33.0: optional: true - lightningcss-freebsd-x64@1.32.0: + lightningcss-freebsd-x64@1.33.0: optional: true - lightningcss-linux-arm-gnueabihf@1.32.0: + lightningcss-linux-arm-gnueabihf@1.33.0: optional: true - lightningcss-linux-arm64-gnu@1.32.0: + lightningcss-linux-arm64-gnu@1.33.0: optional: true - lightningcss-linux-arm64-musl@1.32.0: + lightningcss-linux-arm64-musl@1.33.0: optional: true - lightningcss-linux-x64-gnu@1.32.0: + lightningcss-linux-x64-gnu@1.33.0: optional: true - lightningcss-linux-x64-musl@1.32.0: + lightningcss-linux-x64-musl@1.33.0: optional: true - lightningcss-win32-arm64-msvc@1.32.0: + lightningcss-win32-arm64-msvc@1.33.0: optional: true - lightningcss-win32-x64-msvc@1.32.0: + lightningcss-win32-x64-msvc@1.33.0: optional: true - lightningcss@1.32.0: + lightningcss@1.33.0: dependencies: detect-libc: 2.1.2 optionalDependencies: - lightningcss-android-arm64: 1.32.0 - lightningcss-darwin-arm64: 1.32.0 - lightningcss-darwin-x64: 1.32.0 - lightningcss-freebsd-x64: 1.32.0 - lightningcss-linux-arm-gnueabihf: 1.32.0 - lightningcss-linux-arm64-gnu: 1.32.0 - lightningcss-linux-arm64-musl: 1.32.0 - lightningcss-linux-x64-gnu: 1.32.0 - lightningcss-linux-x64-musl: 1.32.0 - lightningcss-win32-arm64-msvc: 1.32.0 - lightningcss-win32-x64-msvc: 1.32.0 + lightningcss-android-arm64: 1.33.0 + lightningcss-darwin-arm64: 1.33.0 + lightningcss-darwin-x64: 1.33.0 + lightningcss-freebsd-x64: 1.33.0 + lightningcss-linux-arm-gnueabihf: 1.33.0 + lightningcss-linux-arm64-gnu: 1.33.0 + lightningcss-linux-arm64-musl: 1.33.0 + lightningcss-linux-x64-gnu: 1.33.0 + lightningcss-linux-x64-musl: 1.33.0 + lightningcss-win32-arm64-msvc: 1.33.0 + lightningcss-win32-x64-msvc: 1.33.0 lilconfig@2.1.0: {} @@ -6744,14 +6502,18 @@ snapshots: dependencies: '@jridgewell/sourcemap-codec': 1.5.5 + magic-string@1.1.0: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 + mdn-data@2.27.1: {} - miniflare@5.20260730.0-alpha: + miniflare@5.20260804.0-alpha: dependencies: '@cspotcode/source-map-support': 0.8.1 sharp: 0.35.2 - undici: 7.28.0 - workerd: 1.20260730.1 + undici: 7.29.0 + workerd: 1.20260804.1 ws: 8.21.0 youch: 4.1.0-beta.10 transitivePeerDependencies: @@ -6772,11 +6534,11 @@ snapshots: mri@1.2.0: {} - mrmime@2.0.0: {} + mrmime@2.0.1: {} ms@2.1.3: {} - nanoid@3.3.12: {} + nanoid@3.3.18: {} natural-compare@1.4.0: {} @@ -6801,7 +6563,7 @@ snapshots: type-check: 0.4.0 word-wrap: 1.2.5 - oxfmt@0.62.0(svelte@5.56.3(@typescript-eslint/types@8.61.1)): + oxfmt@0.62.0(svelte@5.56.8(@typescript-eslint/types@8.61.1)): dependencies: tinypool: 2.1.0 optionalDependencies: @@ -6824,7 +6586,7 @@ snapshots: '@oxfmt/binding-win32-arm64-msvc': 0.62.0 '@oxfmt/binding-win32-ia32-msvc': 0.62.0 '@oxfmt/binding-win32-x64-msvc': 0.62.0 - svelte: 5.56.3(@typescript-eslint/types@8.61.1) + svelte: 5.56.8(@typescript-eslint/types@8.61.1) p-limit@3.1.0: dependencies: @@ -6834,8 +6596,6 @@ snapshots: dependencies: p-limit: 3.1.0 - package-manager-detector@0.2.8: {} - package-manager-detector@1.8.0: {} parse5@8.0.1: @@ -6871,41 +6631,41 @@ snapshots: polka@1.0.0-next.28: dependencies: - '@polka/url': 1.0.0-next.28 + '@polka/url': 1.0.0-next.29 trouter: 4.0.0 - postcss-load-config@3.1.4(postcss@8.5.19): + postcss-load-config@3.1.4(postcss@8.5.26): dependencies: lilconfig: 2.1.0 yaml: 1.10.3 optionalDependencies: - postcss: 8.5.19 + postcss: 8.5.26 - postcss-safe-parser@7.0.1(postcss@8.5.19): + postcss-safe-parser@7.0.1(postcss@8.5.26): dependencies: - postcss: 8.5.19 + postcss: 8.5.26 - postcss-scss@4.0.9(postcss@8.5.19): + postcss-scss@4.0.9(postcss@8.5.26): dependencies: - postcss: 8.5.19 + postcss: 8.5.26 postcss-selector-parser@7.1.4: dependencies: cssesc: 3.0.0 util-deprecate: 1.0.2 - postcss@8.5.19: + postcss@8.5.26: dependencies: - nanoid: 3.3.12 + nanoid: 3.3.18 picocolors: 1.1.1 source-map-js: 1.2.1 prelude-ls@1.2.1: {} - prettier-plugin-svelte@4.1.1(prettier@3.9.6)(svelte@5.56.3(@typescript-eslint/types@8.61.1)): + prettier-plugin-svelte@4.1.1(prettier@3.9.6)(svelte@5.56.8(@typescript-eslint/types@8.61.1)): dependencies: prettier: 3.9.6 - svelte: 5.56.3(@typescript-eslint/types@8.61.1) + svelte: 5.56.8(@typescript-eslint/types@8.61.1) prettier@3.9.6: {} @@ -6923,13 +6683,6 @@ snapshots: '@types/node': 22.19.19 long: 5.3.2 - publint@0.3.0: - dependencies: - '@publint/pack': 0.1.0 - package-manager-detector: 0.2.8 - picocolors: 1.1.1 - sade: 1.8.1 - punycode@2.3.1: {} readdirp@4.1.2: {} @@ -6953,47 +6706,25 @@ snapshots: resolve-pkg-maps@1.0.0: {} - rolldown@1.1.5: + rolldown@1.2.3: dependencies: - '@oxc-project/types': 0.139.0 - '@rolldown/pluginutils': 1.0.1 - optionalDependencies: - '@rolldown/binding-android-arm64': 1.1.5 - '@rolldown/binding-darwin-arm64': 1.1.5 - '@rolldown/binding-darwin-x64': 1.1.5 - '@rolldown/binding-freebsd-x64': 1.1.5 - '@rolldown/binding-linux-arm-gnueabihf': 1.1.5 - '@rolldown/binding-linux-arm64-gnu': 1.1.5 - '@rolldown/binding-linux-arm64-musl': 1.1.5 - '@rolldown/binding-linux-ppc64-gnu': 1.1.5 - '@rolldown/binding-linux-s390x-gnu': 1.1.5 - '@rolldown/binding-linux-x64-gnu': 1.1.5 - '@rolldown/binding-linux-x64-musl': 1.1.5 - '@rolldown/binding-openharmony-arm64': 1.1.5 - '@rolldown/binding-wasm32-wasi': 1.1.5 - '@rolldown/binding-win32-arm64-msvc': 1.1.5 - '@rolldown/binding-win32-x64-msvc': 1.1.5 - - rolldown@1.2.0: - dependencies: - '@oxc-project/types': 0.140.0 + '@oxc-project/types': 0.143.0 '@rolldown/pluginutils': 1.0.1 optionalDependencies: - '@rolldown/binding-android-arm64': 1.2.0 - '@rolldown/binding-darwin-arm64': 1.2.0 - '@rolldown/binding-darwin-x64': 1.2.0 - '@rolldown/binding-freebsd-x64': 1.2.0 - '@rolldown/binding-linux-arm-gnueabihf': 1.2.0 - '@rolldown/binding-linux-arm64-gnu': 1.2.0 - '@rolldown/binding-linux-arm64-musl': 1.2.0 - '@rolldown/binding-linux-ppc64-gnu': 1.2.0 - '@rolldown/binding-linux-s390x-gnu': 1.2.0 - '@rolldown/binding-linux-x64-gnu': 1.2.0 - '@rolldown/binding-linux-x64-musl': 1.2.0 - '@rolldown/binding-openharmony-arm64': 1.2.0 - '@rolldown/binding-wasm32-wasi': 1.2.0 - '@rolldown/binding-win32-arm64-msvc': 1.2.0 - '@rolldown/binding-win32-x64-msvc': 1.2.0 + '@rolldown/binding-android-arm64': 1.2.3 + '@rolldown/binding-darwin-arm64': 1.2.3 + '@rolldown/binding-darwin-x64': 1.2.3 + '@rolldown/binding-freebsd-x64': 1.2.3 + '@rolldown/binding-linux-arm-gnueabihf': 1.2.3 + '@rolldown/binding-linux-arm64-gnu': 1.2.3 + '@rolldown/binding-linux-arm64-musl': 1.2.3 + '@rolldown/binding-linux-ppc64-gnu': 1.2.3 + '@rolldown/binding-linux-s390x-gnu': 1.2.3 + '@rolldown/binding-linux-x64-gnu': 1.2.3 + '@rolldown/binding-linux-x64-musl': 1.2.3 + '@rolldown/binding-openharmony-arm64': 1.2.3 + '@rolldown/binding-win32-arm64-msvc': 1.2.3 + '@rolldown/binding-win32-x64-msvc': 1.2.3 sade@1.8.1: dependencies: @@ -7088,7 +6819,7 @@ snapshots: siginfo@2.0.0: {} - sirv-cli@3.0.0: + sirv-cli@3.0.1: dependencies: console-clear: 1.1.1 get-port: 5.1.1 @@ -7101,8 +6832,8 @@ snapshots: sirv@3.0.2: dependencies: - '@polka/url': 1.0.0-next.28 - mrmime: 2.0.0 + '@polka/url': 1.0.0-next.29 + mrmime: 2.0.1 totalist: 3.0.1 sisteransi@1.0.5: {} @@ -7125,7 +6856,7 @@ snapshots: supports-color@10.2.2: {} - svelte-check@4.7.5(picomatch@4.0.5)(svelte@5.56.3(@typescript-eslint/types@8.61.1))(typescript@6.0.3): + svelte-check@4.7.5(picomatch@4.0.5)(svelte@5.56.8(@typescript-eslint/types@8.61.1))(typescript@6.0.3): dependencies: '@jridgewell/trace-mapping': 0.3.25 '@sveltejs/load-config': 0.2.2 @@ -7133,60 +6864,60 @@ snapshots: fdir: 6.5.0(picomatch@4.0.5) picocolors: 1.1.1 sade: 1.8.1 - svelte: 5.56.3(@typescript-eslint/types@8.61.1) + svelte: 5.56.8(@typescript-eslint/types@8.61.1) typescript: 6.0.3 transitivePeerDependencies: - picomatch - svelte-eslint-parser@1.8.0(svelte@5.56.3(@typescript-eslint/types@8.61.1)): + svelte-eslint-parser@1.8.0(svelte@5.56.8(@typescript-eslint/types@8.61.1)): dependencies: eslint-scope: 8.4.0 eslint-visitor-keys: 4.2.1 espree: 10.4.0 - postcss: 8.5.19 - postcss-scss: 4.0.9(postcss@8.5.19) + postcss: 8.5.26 + postcss-scss: 4.0.9(postcss@8.5.26) postcss-selector-parser: 7.1.4 semver: 7.8.5 optionalDependencies: - svelte: 5.56.3(@typescript-eslint/types@8.61.1) + svelte: 5.56.8(@typescript-eslint/types@8.61.1) - svelte-parse-markup@0.1.5(svelte@5.56.3(@typescript-eslint/types@8.61.1)): + svelte-parse-markup@0.1.5(svelte@5.56.8(@typescript-eslint/types@8.61.1)): dependencies: - svelte: 5.56.3(@typescript-eslint/types@8.61.1) + svelte: 5.56.8(@typescript-eslint/types@8.61.1) - svelte-preprocess@6.0.5(postcss-load-config@3.1.4(postcss@8.5.19))(postcss@8.5.19)(svelte@5.56.3(@typescript-eslint/types@8.61.1))(typescript@6.0.3): + svelte-preprocess@6.0.5(postcss-load-config@3.1.4(postcss@8.5.26))(postcss@8.5.26)(svelte@5.56.8(@typescript-eslint/types@8.61.1))(typescript@6.0.3): dependencies: - svelte: 5.56.3(@typescript-eslint/types@8.61.1) + svelte: 5.56.8(@typescript-eslint/types@8.61.1) optionalDependencies: - postcss: 8.5.19 - postcss-load-config: 3.1.4(postcss@8.5.19) + postcss: 8.5.26 + postcss-load-config: 3.1.4(postcss@8.5.26) typescript: 6.0.3 - svelte2tsx@0.7.59(svelte@5.56.3(@typescript-eslint/types@8.61.1))(typescript@6.0.3): + svelte2tsx@0.7.59(svelte@5.56.8(@typescript-eslint/types@8.61.1))(typescript@6.0.3): dependencies: dedent-js: 1.0.1 scule: 1.3.0 - svelte: 5.56.3(@typescript-eslint/types@8.61.1) + svelte: 5.56.8(@typescript-eslint/types@8.61.1) typescript: 6.0.3 - svelte@5.56.3(@typescript-eslint/types@8.61.1): + svelte@5.56.8(@typescript-eslint/types@8.61.1): dependencies: '@jridgewell/remapping': 2.3.5 '@jridgewell/sourcemap-codec': 1.5.5 - '@sveltejs/acorn-typescript': 1.0.10(acorn@8.17.0) + '@sveltejs/acorn-typescript': 1.0.12(acorn@8.18.0) '@types/estree': 1.0.9 '@types/trusted-types': 2.0.7 - acorn: 8.17.0 + acorn: 8.18.0 aria-query: 5.3.1 axobject-query: 4.1.0 clsx: 2.1.1 - devalue: 5.8.1 + devalue: 5.9.0 esm-env: 1.2.2 - esrap: 2.2.11(@typescript-eslint/types@8.61.1) + esrap: 2.3.2(@typescript-eslint/types@8.61.1) is-reference: 3.0.3 locate-character: 3.0.0 magic-string: 0.30.21 - zimmerframe: 1.1.2 + zimmerframe: 1.1.4 transitivePeerDependencies: - '@typescript-eslint/types' @@ -7259,13 +6990,13 @@ snapshots: dependencies: prelude-ls: 1.2.1 - typescript-eslint@8.58.0(eslint@10.8.0(jiti@2.4.2)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3): + typescript-eslint@8.58.0(eslint@10.8.1(jiti@2.4.2)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3): dependencies: - '@typescript-eslint/eslint-plugin': 8.58.0(@typescript-eslint/parser@8.58.0(eslint@10.8.0(jiti@2.4.2)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3))(eslint@10.8.0(jiti@2.4.2)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3) - '@typescript-eslint/parser': 8.58.0(eslint@10.8.0(jiti@2.4.2)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3) + '@typescript-eslint/eslint-plugin': 8.58.0(@typescript-eslint/parser@8.58.0(eslint@10.8.1(jiti@2.4.2)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3))(eslint@10.8.1(jiti@2.4.2)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3) + '@typescript-eslint/parser': 8.58.0(eslint@10.8.1(jiti@2.4.2)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3) '@typescript-eslint/typescript-estree': 8.58.0(supports-color@10.2.2)(typescript@6.0.3) - '@typescript-eslint/utils': 8.58.0(eslint@10.8.0(jiti@2.4.2)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3) - eslint: 10.8.0(jiti@2.4.2)(supports-color@10.2.2) + '@typescript-eslint/utils': 8.58.0(eslint@10.8.1(jiti@2.4.2)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3) + eslint: 10.8.1(jiti@2.4.2)(supports-color@10.2.2) typescript: 6.0.3 transitivePeerDependencies: - supports-color @@ -7297,7 +7028,7 @@ snapshots: undici-types@6.21.0: {} - undici@7.28.0: {} + undici@7.29.0: {} undici@8.10.0: {} @@ -7315,22 +7046,22 @@ snapshots: optionalDependencies: typescript: 6.0.3 - vite-imagetools@12.0.0(@types/node@22.19.19)(vite@8.1.5(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0)): + vite-imagetools@12.0.0(@types/node@22.19.19)(vite@8.2.1(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0)): dependencies: '@rollup/pluginutils': 5.4.0 imagetools-core: 12.0.0 sharp: 0.35.3(@types/node@22.19.19) - vite: 8.1.5(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0) + vite: 8.2.1(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0) transitivePeerDependencies: - '@types/node' - rollup - vite@8.1.5(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0): + vite@8.2.1(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0): dependencies: - lightningcss: 1.32.0 + lightningcss: 1.33.0 picomatch: 4.0.5 - postcss: 8.5.19 - rolldown: 1.1.5 + postcss: 8.5.26 + rolldown: 1.2.3 tinyglobby: 0.2.17 optionalDependencies: '@types/node': 22.19.19 @@ -7339,14 +7070,14 @@ snapshots: jiti: 2.4.2 yaml: 2.9.0 - vitefu@1.1.3(vite@8.1.5(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0)): + vitefu@1.1.3(vite@8.2.1(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0)): optionalDependencies: - vite: 8.1.5(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0) + vite: 8.2.1(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0) - vitest@4.1.10(@opentelemetry/api@1.9.0)(@types/node@22.19.19)(@vitest/browser-playwright@4.1.10)(jsdom@30.0.1)(vite@8.1.5(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0)): + vitest@4.1.10(@opentelemetry/api@1.9.1)(@types/node@22.19.19)(@vitest/browser-playwright@4.1.10)(jsdom@30.0.1)(vite@8.2.1(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0)): dependencies: '@vitest/expect': 4.1.10 - '@vitest/mocker': 4.1.10(vite@8.1.5(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0)) + '@vitest/mocker': 4.1.10(vite@8.2.1(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0)) '@vitest/pretty-format': 4.1.10 '@vitest/runner': 4.1.10 '@vitest/snapshot': 4.1.10 @@ -7363,12 +7094,12 @@ snapshots: tinyexec: 1.3.0 tinyglobby: 0.2.17 tinyrainbow: 3.1.0 - vite: 8.1.5(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0) + vite: 8.2.1(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0) why-is-node-running: 2.3.0 optionalDependencies: - '@opentelemetry/api': 1.9.0 + '@opentelemetry/api': 1.9.1 '@types/node': 22.19.19 - '@vitest/browser-playwright': 4.1.10(playwright@1.62.1)(vite@8.1.5(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0))(vitest@4.1.10) + '@vitest/browser-playwright': 4.1.10(playwright@1.62.1)(vite@8.2.1(@types/node@22.19.19)(esbuild@0.28.1)(jiti@2.4.2)(yaml@2.9.0))(vitest@4.1.10) jsdom: 30.0.1 transitivePeerDependencies: - msw @@ -7415,26 +7146,26 @@ snapshots: word-wrap@1.2.5: {} - workerd@1.20260730.1: + workerd@1.20260804.1: optionalDependencies: - '@cloudflare/workerd-darwin-64': 1.20260730.1 - '@cloudflare/workerd-darwin-arm64': 1.20260730.1 - '@cloudflare/workerd-linux-64': 1.20260730.1 - '@cloudflare/workerd-linux-arm64': 1.20260730.1 - '@cloudflare/workerd-windows-64': 1.20260730.1 + '@cloudflare/workerd-darwin-64': 1.20260804.1 + '@cloudflare/workerd-darwin-arm64': 1.20260804.1 + '@cloudflare/workerd-linux-64': 1.20260804.1 + '@cloudflare/workerd-linux-arm64': 1.20260804.1 + '@cloudflare/workerd-windows-64': 1.20260804.1 - wrangler@4.118.0(@cloudflare/workers-types@5.20260804.1): + wrangler@4.120.1(@cloudflare/workers-types@5.20260809.1): dependencies: '@cloudflare/kv-asset-handler': 0.5.0 - '@cloudflare/unenv-preset': 2.16.1(unenv@2.0.0-rc.24)(workerd@1.20260730.1) + '@cloudflare/unenv-preset': 2.16.1(unenv@2.0.0-rc.24)(workerd@1.20260804.1) blake3-wasm: 2.1.5 esbuild: 0.28.1 - miniflare: 5.20260730.0-alpha + miniflare: 5.20260804.0-alpha path-to-regexp: 6.3.0 unenv: 2.0.0-rc.24 - workerd: 1.20260730.1 + workerd: 1.20260804.1 optionalDependencies: - '@cloudflare/workers-types': 5.20260804.1 + '@cloudflare/workers-types': 5.20260809.1 fsevents: 2.3.3 transitivePeerDependencies: - bufferutil @@ -7487,4 +7218,4 @@ snapshots: cookie: 1.1.1 youch-core: 0.3.3 - zimmerframe@1.1.2: {} + zimmerframe@1.1.4: {} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 18b2331d61b9..e09fadc035fc 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -12,10 +12,23 @@ minimumReleaseAgeExclude: - esm-env - vite-imagetools - imagetools-core - - '@changesets/apply-release-plan@8.0.0-next.11' - - '@changesets/assemble-release-plan@7.0.0-next.11' - - '@changesets/cli@3.0.0-next.12' - - '@changesets/config@4.0.0-next.10' + # TODO: remove these when they're older than 2 days + - miniflare@5.20260804.0-alpha + - wrangler@4.120.1 + - '@changesets/apply-release-plan@8.0.0' + - '@changesets/assemble-release-plan@7.0.0' + - '@changesets/changelog-git@1.0.0' + - '@changesets/cli@3.0.0' + - '@changesets/config@4.0.0' + - '@changesets/errors@1.0.0' + - '@changesets/get-dependents-graph@3.0.0' + - '@changesets/git@4.0.0' + - '@changesets/parse@1.0.0' + - '@changesets/pre@3.0.0' + - '@changesets/read@1.0.0' + - '@changesets/should-skip-package@1.0.0' + - '@changesets/types@7.0.0' + - '@changesets/write@1.0.0' blockExoticSubdeps: true linkWorkspacePackages: true shellEmulator: true @@ -49,31 +62,32 @@ allowBuilds: # wouldn't require publishing a new package version # see https://github.com/changesets/changesets/issues/1707 catalog: - '@changesets/cli': ^3.0.0-next.12 + '@changesets/cli': ^3.0.0 # pin the version of changelog-github because we're using the experimental # template feature which can change in a patch version '@changesets/changelog-github': 1.0.0-next.9 - '@fontsource/libre-barcode-128-text': ^5.1.0 + '@fontsource/libre-barcode-128-text': ^5.3.0 + '@opentelemetry/api': ^1.9.1 '@opentelemetry/sdk-node': ^0.221.0 '@opentelemetry/sdk-trace-node': ^2.8.0 '@playwright/test': ^1.62.0 - '@polka/url': ^1.0.0-next.28 - '@sveltejs/eslint-config': ^10.0.3 - '@sveltejs/vite-plugin-svelte': ^7.0.0 + '@polka/url': ^1.0.0-next.29 + '@sveltejs/eslint-config': ^10.0.4 + '@sveltejs/vite-plugin-svelte': ^7.3.0 '@types/connect': ^3.4.38 '@types/estree': ^1.0.8 '@types/node': ^22.19.19 - '@types/semver': ^7.5.8 + '@types/semver': ^7.8.0 dropcss: ^1.0.16 - eslint: ^10.8.0 + eslint: ^10.8.1 polka: ^1.0.0-next.28 prettier: ^3.9.6 prettier-plugin-svelte: ^4.1.1 publint: ^0.3.0 - rolldown: ^1.2.0 + rolldown: ^1.2.3 semver: ^7.5.4 - sirv-cli: ^3.0.0 - svelte: ^5.56.3 + sirv-cli: ^3.0.1 + svelte: ^5.56.8 svelte-check: ^4.7.5 svelte-preprocess: ^6.0.5 # This version of TypeScript is for apps using it just for type checking. @@ -82,8 +96,8 @@ catalog: typescript: ^6.0.3 '@typescript/native': npm:typescript@^7.0.2 valibot: ^1.4.2 - vite: ^8.1.5 - wrangler: ^4.118.0 + vite: ^8.2.1 + wrangler: ^4.120.1 # unit test deps that should be upgraded together '@vitest/browser-playwright': ^4.1.10 From f84bf3b7125e903f90121f352540d196af8ce909 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 11 Aug 2026 17:00:40 -0400 Subject: [PATCH 509/545] Version Packages (next) (#16735) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR was opened by the [Changesets release](https://github.com/changesets/action) GitHub action. When you're ready to do a release, you can merge this and the packages will be published to npm automatically. If you're not ready to do a release yet, that's fine, whenever you add more changesets to version-3, this PR will be updated. ⚠️⚠️⚠️⚠️⚠️⚠️ `version-3` is currently in **pre mode** so this branch has prereleases rather than normal releases. If you want to exit prereleases, run `changeset pre exit` on `version-3`. ⚠️⚠️⚠️⚠️⚠️⚠️ # Releases ## @sveltejs/kit@3.0.0-next.20 ### Major Changes - breaking: move remote function types to `$app/server` ([#16740](https://github.com/sveltejs/kit/pull/16740)) - breaking: remove `#lib` definition from `paths`; requires explicit module extensions as a result ([#16736](https://github.com/sveltejs/kit/pull/16736)) - breaking: move hooks-related types to `@sveltejs/kit/hooks` ([#16737](https://github.com/sveltejs/kit/pull/16737)) - breaking: move env-related types to `@sveltejs/kit/env` ([#16739](https://github.com/sveltejs/kit/pull/16739)) ### Minor Changes - feat: better response logging ([#16744](https://github.com/sveltejs/kit/pull/16744)) ### Patch Changes - chore: bump `mrmime` to 2.0.1 ([#16745](https://github.com/sveltejs/kit/pull/16745)) - chore: bump `@sveltejs/acorn-typescript` to 1.0.12 ([#16745](https://github.com/sveltejs/kit/pull/16745)) - chore: bump `magic-string` to 1.1.0 ([#16745](https://github.com/sveltejs/kit/pull/16745)) - chore: bump `devalue` to 5.9.0 ([#16745](https://github.com/sveltejs/kit/pull/16745)) - chore: bump `cookie` to 2.0.1 ([#16745](https://github.com/sveltejs/kit/pull/16745)) - chore: bump `acorn` to 8.18.0 ([#16745](https://github.com/sveltejs/kit/pull/16745)) - fix: avoid infinite loop when building with `--watch` flag ([#16632](https://github.com/sveltejs/kit/pull/16632)) ## @sveltejs/adapter-cloudflare@8.0.0-next.6 ### Patch Changes - chore: bump `@cloudflare/worker-types` to 5.20260809.1 ([#16745](https://github.com/sveltejs/kit/pull/16745)) - Updated dependencies [[`1742811`](https://github.com/sveltejs/kit/commit/1742811562358caf6042bed33c60ce6427a3e831), [`1611c61`](https://github.com/sveltejs/kit/commit/1611c617a1ec1b32e10627c2815fb7e6673f3157), [`b361b81`](https://github.com/sveltejs/kit/commit/b361b815e79828a6b7404d759d0a4c3892814a4e), [`b361b81`](https://github.com/sveltejs/kit/commit/b361b815e79828a6b7404d759d0a4c3892814a4e), [`b361b81`](https://github.com/sveltejs/kit/commit/b361b815e79828a6b7404d759d0a4c3892814a4e), [`b361b81`](https://github.com/sveltejs/kit/commit/b361b815e79828a6b7404d759d0a4c3892814a4e), [`13e7b18`](https://github.com/sveltejs/kit/commit/13e7b186a94b5b8317771d2b1e795b432dcd6faf), [`529346d`](https://github.com/sveltejs/kit/commit/529346d96369f92cdd804be9c4313c598efe34b8), [`b361b81`](https://github.com/sveltejs/kit/commit/b361b815e79828a6b7404d759d0a4c3892814a4e), [`81d6319`](https://github.com/sveltejs/kit/commit/81d6319eef08a765ccd3922790a7aee16e284cc2), [`b361b81`](https://github.com/sveltejs/kit/commit/b361b815e79828a6b7404d759d0a4c3892814a4e), [`69a5bdf`](https://github.com/sveltejs/kit/commit/69a5bdf9f45810eeed2faa089c8d3206463d347e)]: - @sveltejs/kit@3.0.0-next.20 ## @sveltejs/adapter-netlify@7.0.0-next.8 ### Patch Changes - chore: bump `rolldown` to 1.2.3 ([#16745](https://github.com/sveltejs/kit/pull/16745)) - Updated dependencies [[`1742811`](https://github.com/sveltejs/kit/commit/1742811562358caf6042bed33c60ce6427a3e831), [`1611c61`](https://github.com/sveltejs/kit/commit/1611c617a1ec1b32e10627c2815fb7e6673f3157), [`b361b81`](https://github.com/sveltejs/kit/commit/b361b815e79828a6b7404d759d0a4c3892814a4e), [`b361b81`](https://github.com/sveltejs/kit/commit/b361b815e79828a6b7404d759d0a4c3892814a4e), [`b361b81`](https://github.com/sveltejs/kit/commit/b361b815e79828a6b7404d759d0a4c3892814a4e), [`b361b81`](https://github.com/sveltejs/kit/commit/b361b815e79828a6b7404d759d0a4c3892814a4e), [`13e7b18`](https://github.com/sveltejs/kit/commit/13e7b186a94b5b8317771d2b1e795b432dcd6faf), [`529346d`](https://github.com/sveltejs/kit/commit/529346d96369f92cdd804be9c4313c598efe34b8), [`b361b81`](https://github.com/sveltejs/kit/commit/b361b815e79828a6b7404d759d0a4c3892814a4e), [`81d6319`](https://github.com/sveltejs/kit/commit/81d6319eef08a765ccd3922790a7aee16e284cc2), [`b361b81`](https://github.com/sveltejs/kit/commit/b361b815e79828a6b7404d759d0a4c3892814a4e), [`69a5bdf`](https://github.com/sveltejs/kit/commit/69a5bdf9f45810eeed2faa089c8d3206463d347e)]: - @sveltejs/kit@3.0.0-next.20 ## @sveltejs/adapter-node@6.0.0-next.10 ### Patch Changes - chore: bump `rolldown` to 1.2.3 ([#16745](https://github.com/sveltejs/kit/pull/16745)) - Updated dependencies [[`1742811`](https://github.com/sveltejs/kit/commit/1742811562358caf6042bed33c60ce6427a3e831), [`1611c61`](https://github.com/sveltejs/kit/commit/1611c617a1ec1b32e10627c2815fb7e6673f3157), [`b361b81`](https://github.com/sveltejs/kit/commit/b361b815e79828a6b7404d759d0a4c3892814a4e), [`b361b81`](https://github.com/sveltejs/kit/commit/b361b815e79828a6b7404d759d0a4c3892814a4e), [`b361b81`](https://github.com/sveltejs/kit/commit/b361b815e79828a6b7404d759d0a4c3892814a4e), [`b361b81`](https://github.com/sveltejs/kit/commit/b361b815e79828a6b7404d759d0a4c3892814a4e), [`13e7b18`](https://github.com/sveltejs/kit/commit/13e7b186a94b5b8317771d2b1e795b432dcd6faf), [`529346d`](https://github.com/sveltejs/kit/commit/529346d96369f92cdd804be9c4313c598efe34b8), [`b361b81`](https://github.com/sveltejs/kit/commit/b361b815e79828a6b7404d759d0a4c3892814a4e), [`81d6319`](https://github.com/sveltejs/kit/commit/81d6319eef08a765ccd3922790a7aee16e284cc2), [`b361b81`](https://github.com/sveltejs/kit/commit/b361b815e79828a6b7404d759d0a4c3892814a4e), [`69a5bdf`](https://github.com/sveltejs/kit/commit/69a5bdf9f45810eeed2faa089c8d3206463d347e)]: - @sveltejs/kit@3.0.0-next.20 ## @sveltejs/enhanced-img@1.0.0-next.5 ### Patch Changes - chore: bump `magic-string` to 1.1.0 ([#16745](https://github.com/sveltejs/kit/pull/16745)) - chore: bump `zimmerframe` to 1.1.4 ([#16745](https://github.com/sveltejs/kit/pull/16745)) ## @sveltejs/package@3.0.0-next.6 ### Patch Changes - chore: bump `svelte2tsx` to 0.7.59 ([#16745](https://github.com/sveltejs/kit/pull/16745)) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- .changeset/{ => pre}/afraid-peaches-stay.md | 0 .changeset/{ => pre}/crisp-adults-give.md | 0 .changeset/{ => pre}/crisp-steaks-jump.md | 0 .changeset/{ => pre}/curly-taxes-hug.md | 0 .changeset/{ => pre}/gold-tips-lead.md | 0 .changeset/{ => pre}/icy-turtles-leave.md | 0 .changeset/{ => pre}/lemon-ways-glow.md | 0 .changeset/{ => pre}/light-apples-sleep.md | 0 .changeset/{ => pre}/loose-cases-know.md | 0 .changeset/{ => pre}/ready-chairs-fold.md | 0 .changeset/{ => pre}/silent-dogs-warn.md | 0 .changeset/{ => pre}/sixty-dragons-hide.md | 0 .changeset/{ => pre}/ten-signs-sing.md | 0 .changeset/{ => pre}/ten-snakes-show.md | 0 .changeset/{ => pre}/twenty-actors-relax.md | 0 .changeset/{ => pre}/wacky-mice-attack.md | 0 packages/adapter-cloudflare/CHANGELOG.md | 8 ++++++ packages/adapter-cloudflare/package.json | 2 +- packages/adapter-netlify/CHANGELOG.md | 8 ++++++ packages/adapter-netlify/package.json | 2 +- packages/adapter-node/CHANGELOG.md | 8 ++++++ packages/adapter-node/package.json | 2 +- packages/enhanced-img/CHANGELOG.md | 8 ++++++ packages/enhanced-img/package.json | 2 +- packages/kit/CHANGELOG.md | 32 +++++++++++++++++++++ packages/kit/package.json | 2 +- packages/kit/src/version.js | 2 +- packages/package/CHANGELOG.md | 6 ++++ packages/package/package.json | 2 +- 29 files changed, 77 insertions(+), 7 deletions(-) rename .changeset/{ => pre}/afraid-peaches-stay.md (100%) rename .changeset/{ => pre}/crisp-adults-give.md (100%) rename .changeset/{ => pre}/crisp-steaks-jump.md (100%) rename .changeset/{ => pre}/curly-taxes-hug.md (100%) rename .changeset/{ => pre}/gold-tips-lead.md (100%) rename .changeset/{ => pre}/icy-turtles-leave.md (100%) rename .changeset/{ => pre}/lemon-ways-glow.md (100%) rename .changeset/{ => pre}/light-apples-sleep.md (100%) rename .changeset/{ => pre}/loose-cases-know.md (100%) rename .changeset/{ => pre}/ready-chairs-fold.md (100%) rename .changeset/{ => pre}/silent-dogs-warn.md (100%) rename .changeset/{ => pre}/sixty-dragons-hide.md (100%) rename .changeset/{ => pre}/ten-signs-sing.md (100%) rename .changeset/{ => pre}/ten-snakes-show.md (100%) rename .changeset/{ => pre}/twenty-actors-relax.md (100%) rename .changeset/{ => pre}/wacky-mice-attack.md (100%) diff --git a/.changeset/afraid-peaches-stay.md b/.changeset/pre/afraid-peaches-stay.md similarity index 100% rename from .changeset/afraid-peaches-stay.md rename to .changeset/pre/afraid-peaches-stay.md diff --git a/.changeset/crisp-adults-give.md b/.changeset/pre/crisp-adults-give.md similarity index 100% rename from .changeset/crisp-adults-give.md rename to .changeset/pre/crisp-adults-give.md diff --git a/.changeset/crisp-steaks-jump.md b/.changeset/pre/crisp-steaks-jump.md similarity index 100% rename from .changeset/crisp-steaks-jump.md rename to .changeset/pre/crisp-steaks-jump.md diff --git a/.changeset/curly-taxes-hug.md b/.changeset/pre/curly-taxes-hug.md similarity index 100% rename from .changeset/curly-taxes-hug.md rename to .changeset/pre/curly-taxes-hug.md diff --git a/.changeset/gold-tips-lead.md b/.changeset/pre/gold-tips-lead.md similarity index 100% rename from .changeset/gold-tips-lead.md rename to .changeset/pre/gold-tips-lead.md diff --git a/.changeset/icy-turtles-leave.md b/.changeset/pre/icy-turtles-leave.md similarity index 100% rename from .changeset/icy-turtles-leave.md rename to .changeset/pre/icy-turtles-leave.md diff --git a/.changeset/lemon-ways-glow.md b/.changeset/pre/lemon-ways-glow.md similarity index 100% rename from .changeset/lemon-ways-glow.md rename to .changeset/pre/lemon-ways-glow.md diff --git a/.changeset/light-apples-sleep.md b/.changeset/pre/light-apples-sleep.md similarity index 100% rename from .changeset/light-apples-sleep.md rename to .changeset/pre/light-apples-sleep.md diff --git a/.changeset/loose-cases-know.md b/.changeset/pre/loose-cases-know.md similarity index 100% rename from .changeset/loose-cases-know.md rename to .changeset/pre/loose-cases-know.md diff --git a/.changeset/ready-chairs-fold.md b/.changeset/pre/ready-chairs-fold.md similarity index 100% rename from .changeset/ready-chairs-fold.md rename to .changeset/pre/ready-chairs-fold.md diff --git a/.changeset/silent-dogs-warn.md b/.changeset/pre/silent-dogs-warn.md similarity index 100% rename from .changeset/silent-dogs-warn.md rename to .changeset/pre/silent-dogs-warn.md diff --git a/.changeset/sixty-dragons-hide.md b/.changeset/pre/sixty-dragons-hide.md similarity index 100% rename from .changeset/sixty-dragons-hide.md rename to .changeset/pre/sixty-dragons-hide.md diff --git a/.changeset/ten-signs-sing.md b/.changeset/pre/ten-signs-sing.md similarity index 100% rename from .changeset/ten-signs-sing.md rename to .changeset/pre/ten-signs-sing.md diff --git a/.changeset/ten-snakes-show.md b/.changeset/pre/ten-snakes-show.md similarity index 100% rename from .changeset/ten-snakes-show.md rename to .changeset/pre/ten-snakes-show.md diff --git a/.changeset/twenty-actors-relax.md b/.changeset/pre/twenty-actors-relax.md similarity index 100% rename from .changeset/twenty-actors-relax.md rename to .changeset/pre/twenty-actors-relax.md diff --git a/.changeset/wacky-mice-attack.md b/.changeset/pre/wacky-mice-attack.md similarity index 100% rename from .changeset/wacky-mice-attack.md rename to .changeset/pre/wacky-mice-attack.md diff --git a/packages/adapter-cloudflare/CHANGELOG.md b/packages/adapter-cloudflare/CHANGELOG.md index 79468dc6e2ed..155c264d7974 100644 --- a/packages/adapter-cloudflare/CHANGELOG.md +++ b/packages/adapter-cloudflare/CHANGELOG.md @@ -1,5 +1,13 @@ # @sveltejs/adapter-cloudflare +## 8.0.0-next.6 + +### Patch Changes + +- chore: bump `@cloudflare/worker-types` to 5.20260809.1 ([#16745](https://github.com/sveltejs/kit/pull/16745)) +- Updated dependencies [[`1742811`](https://github.com/sveltejs/kit/commit/1742811562358caf6042bed33c60ce6427a3e831), [`1611c61`](https://github.com/sveltejs/kit/commit/1611c617a1ec1b32e10627c2815fb7e6673f3157), [`b361b81`](https://github.com/sveltejs/kit/commit/b361b815e79828a6b7404d759d0a4c3892814a4e), [`b361b81`](https://github.com/sveltejs/kit/commit/b361b815e79828a6b7404d759d0a4c3892814a4e), [`b361b81`](https://github.com/sveltejs/kit/commit/b361b815e79828a6b7404d759d0a4c3892814a4e), [`b361b81`](https://github.com/sveltejs/kit/commit/b361b815e79828a6b7404d759d0a4c3892814a4e), [`13e7b18`](https://github.com/sveltejs/kit/commit/13e7b186a94b5b8317771d2b1e795b432dcd6faf), [`529346d`](https://github.com/sveltejs/kit/commit/529346d96369f92cdd804be9c4313c598efe34b8), [`b361b81`](https://github.com/sveltejs/kit/commit/b361b815e79828a6b7404d759d0a4c3892814a4e), [`81d6319`](https://github.com/sveltejs/kit/commit/81d6319eef08a765ccd3922790a7aee16e284cc2), [`b361b81`](https://github.com/sveltejs/kit/commit/b361b815e79828a6b7404d759d0a4c3892814a4e), [`69a5bdf`](https://github.com/sveltejs/kit/commit/69a5bdf9f45810eeed2faa089c8d3206463d347e)]: + - @sveltejs/kit@3.0.0-next.20 + ## 8.0.0-next.5 ### Major Changes diff --git a/packages/adapter-cloudflare/package.json b/packages/adapter-cloudflare/package.json index 5a3ebcdb8c3a..4ad741a03261 100644 --- a/packages/adapter-cloudflare/package.json +++ b/packages/adapter-cloudflare/package.json @@ -1,6 +1,6 @@ { "name": "@sveltejs/adapter-cloudflare", - "version": "8.0.0-next.5", + "version": "8.0.0-next.6", "description": "Adapts SvelteKit applications for Cloudflare Workers or Cloudflare Pages", "keywords": [ "adapter", diff --git a/packages/adapter-netlify/CHANGELOG.md b/packages/adapter-netlify/CHANGELOG.md index b8a5541f9fd6..9623d5d621c8 100644 --- a/packages/adapter-netlify/CHANGELOG.md +++ b/packages/adapter-netlify/CHANGELOG.md @@ -1,5 +1,13 @@ # @sveltejs/adapter-netlify +## 7.0.0-next.8 + +### Patch Changes + +- chore: bump `rolldown` to 1.2.3 ([#16745](https://github.com/sveltejs/kit/pull/16745)) +- Updated dependencies [[`1742811`](https://github.com/sveltejs/kit/commit/1742811562358caf6042bed33c60ce6427a3e831), [`1611c61`](https://github.com/sveltejs/kit/commit/1611c617a1ec1b32e10627c2815fb7e6673f3157), [`b361b81`](https://github.com/sveltejs/kit/commit/b361b815e79828a6b7404d759d0a4c3892814a4e), [`b361b81`](https://github.com/sveltejs/kit/commit/b361b815e79828a6b7404d759d0a4c3892814a4e), [`b361b81`](https://github.com/sveltejs/kit/commit/b361b815e79828a6b7404d759d0a4c3892814a4e), [`b361b81`](https://github.com/sveltejs/kit/commit/b361b815e79828a6b7404d759d0a4c3892814a4e), [`13e7b18`](https://github.com/sveltejs/kit/commit/13e7b186a94b5b8317771d2b1e795b432dcd6faf), [`529346d`](https://github.com/sveltejs/kit/commit/529346d96369f92cdd804be9c4313c598efe34b8), [`b361b81`](https://github.com/sveltejs/kit/commit/b361b815e79828a6b7404d759d0a4c3892814a4e), [`81d6319`](https://github.com/sveltejs/kit/commit/81d6319eef08a765ccd3922790a7aee16e284cc2), [`b361b81`](https://github.com/sveltejs/kit/commit/b361b815e79828a6b7404d759d0a4c3892814a4e), [`69a5bdf`](https://github.com/sveltejs/kit/commit/69a5bdf9f45810eeed2faa089c8d3206463d347e)]: + - @sveltejs/kit@3.0.0-next.20 + ## 7.0.0-next.7 ### Patch Changes diff --git a/packages/adapter-netlify/package.json b/packages/adapter-netlify/package.json index f86142bf29e0..72e3c75473b2 100644 --- a/packages/adapter-netlify/package.json +++ b/packages/adapter-netlify/package.json @@ -1,6 +1,6 @@ { "name": "@sveltejs/adapter-netlify", - "version": "7.0.0-next.7", + "version": "7.0.0-next.8", "description": "A SvelteKit adapter that creates a Netlify app", "keywords": [ "adapter", diff --git a/packages/adapter-node/CHANGELOG.md b/packages/adapter-node/CHANGELOG.md index 57cd42b66458..b1cf97693e6c 100644 --- a/packages/adapter-node/CHANGELOG.md +++ b/packages/adapter-node/CHANGELOG.md @@ -1,5 +1,13 @@ # @sveltejs/adapter-node +## 6.0.0-next.10 + +### Patch Changes + +- chore: bump `rolldown` to 1.2.3 ([#16745](https://github.com/sveltejs/kit/pull/16745)) +- Updated dependencies [[`1742811`](https://github.com/sveltejs/kit/commit/1742811562358caf6042bed33c60ce6427a3e831), [`1611c61`](https://github.com/sveltejs/kit/commit/1611c617a1ec1b32e10627c2815fb7e6673f3157), [`b361b81`](https://github.com/sveltejs/kit/commit/b361b815e79828a6b7404d759d0a4c3892814a4e), [`b361b81`](https://github.com/sveltejs/kit/commit/b361b815e79828a6b7404d759d0a4c3892814a4e), [`b361b81`](https://github.com/sveltejs/kit/commit/b361b815e79828a6b7404d759d0a4c3892814a4e), [`b361b81`](https://github.com/sveltejs/kit/commit/b361b815e79828a6b7404d759d0a4c3892814a4e), [`13e7b18`](https://github.com/sveltejs/kit/commit/13e7b186a94b5b8317771d2b1e795b432dcd6faf), [`529346d`](https://github.com/sveltejs/kit/commit/529346d96369f92cdd804be9c4313c598efe34b8), [`b361b81`](https://github.com/sveltejs/kit/commit/b361b815e79828a6b7404d759d0a4c3892814a4e), [`81d6319`](https://github.com/sveltejs/kit/commit/81d6319eef08a765ccd3922790a7aee16e284cc2), [`b361b81`](https://github.com/sveltejs/kit/commit/b361b815e79828a6b7404d759d0a4c3892814a4e), [`69a5bdf`](https://github.com/sveltejs/kit/commit/69a5bdf9f45810eeed2faa089c8d3206463d347e)]: + - @sveltejs/kit@3.0.0-next.20 + ## 6.0.0-next.9 ### Patch Changes diff --git a/packages/adapter-node/package.json b/packages/adapter-node/package.json index 93203cab564f..f0f4cd3f4a32 100644 --- a/packages/adapter-node/package.json +++ b/packages/adapter-node/package.json @@ -1,6 +1,6 @@ { "name": "@sveltejs/adapter-node", - "version": "6.0.0-next.9", + "version": "6.0.0-next.10", "description": "Adapter for SvelteKit apps that generates a standalone Node server", "keywords": [ "adapter", diff --git a/packages/enhanced-img/CHANGELOG.md b/packages/enhanced-img/CHANGELOG.md index 15c28e9ba766..797fdcfa3acd 100644 --- a/packages/enhanced-img/CHANGELOG.md +++ b/packages/enhanced-img/CHANGELOG.md @@ -1,5 +1,13 @@ # @sveltejs/enhanced-img +## 1.0.0-next.5 + +### Patch Changes + +- chore: bump `magic-string` to 1.1.0 ([#16745](https://github.com/sveltejs/kit/pull/16745)) + +- chore: bump `zimmerframe` to 1.1.4 ([#16745](https://github.com/sveltejs/kit/pull/16745)) + ## 1.0.0-next.4 ### Major Changes diff --git a/packages/enhanced-img/package.json b/packages/enhanced-img/package.json index a06aec4004d2..a7494bba0d47 100644 --- a/packages/enhanced-img/package.json +++ b/packages/enhanced-img/package.json @@ -1,6 +1,6 @@ { "name": "@sveltejs/enhanced-img", - "version": "1.0.0-next.4", + "version": "1.0.0-next.5", "description": "Image optimization for your Svelte apps", "repository": { "type": "git", diff --git a/packages/kit/CHANGELOG.md b/packages/kit/CHANGELOG.md index f9accb13816c..c057cf4f3e89 100644 --- a/packages/kit/CHANGELOG.md +++ b/packages/kit/CHANGELOG.md @@ -1,5 +1,37 @@ # @sveltejs/kit +## 3.0.0-next.20 + +### Major Changes + +- breaking: move remote function types to `$app/server` ([#16740](https://github.com/sveltejs/kit/pull/16740)) + +- breaking: remove `#lib` definition from `paths`; requires explicit module extensions as a result ([#16736](https://github.com/sveltejs/kit/pull/16736)) + +- breaking: move hooks-related types to `@sveltejs/kit/hooks` ([#16737](https://github.com/sveltejs/kit/pull/16737)) + +- breaking: move env-related types to `@sveltejs/kit/env` ([#16739](https://github.com/sveltejs/kit/pull/16739)) + +### Minor Changes + +- feat: better response logging ([#16744](https://github.com/sveltejs/kit/pull/16744)) + +### Patch Changes + +- chore: bump `mrmime` to 2.0.1 ([#16745](https://github.com/sveltejs/kit/pull/16745)) + +- chore: bump `@sveltejs/acorn-typescript` to 1.0.12 ([#16745](https://github.com/sveltejs/kit/pull/16745)) + +- chore: bump `magic-string` to 1.1.0 ([#16745](https://github.com/sveltejs/kit/pull/16745)) + +- chore: bump `devalue` to 5.9.0 ([#16745](https://github.com/sveltejs/kit/pull/16745)) + +- chore: bump `cookie` to 2.0.1 ([#16745](https://github.com/sveltejs/kit/pull/16745)) + +- chore: bump `acorn` to 8.18.0 ([#16745](https://github.com/sveltejs/kit/pull/16745)) + +- fix: avoid infinite loop when building with `--watch` flag ([#16632](https://github.com/sveltejs/kit/pull/16632)) + ## 3.0.0-next.19 ### Major Changes diff --git a/packages/kit/package.json b/packages/kit/package.json index c2b4de528bb1..d36cd1a948d7 100644 --- a/packages/kit/package.json +++ b/packages/kit/package.json @@ -1,6 +1,6 @@ { "name": "@sveltejs/kit", - "version": "3.0.0-next.19", + "version": "3.0.0-next.20", "description": "SvelteKit is the fastest way to build Svelte apps", "keywords": [ "framework", diff --git a/packages/kit/src/version.js b/packages/kit/src/version.js index a3ff59705ad4..0d3fc97d00ad 100644 --- a/packages/kit/src/version.js +++ b/packages/kit/src/version.js @@ -1,4 +1,4 @@ // generated during release, do not modify /** @type {string} */ -export const VERSION = '3.0.0-next.19'; +export const VERSION = '3.0.0-next.20'; diff --git a/packages/package/CHANGELOG.md b/packages/package/CHANGELOG.md index 67cd7169b836..baac338d0e7b 100644 --- a/packages/package/CHANGELOG.md +++ b/packages/package/CHANGELOG.md @@ -1,5 +1,11 @@ # @sveltejs/package +## 3.0.0-next.6 + +### Patch Changes + +- chore: bump `svelte2tsx` to 0.7.59 ([#16745](https://github.com/sveltejs/kit/pull/16745)) + ## 3.0.0-next.5 ### Major Changes diff --git a/packages/package/package.json b/packages/package/package.json index ab1eba145aea..6b7cc91a5eea 100644 --- a/packages/package/package.json +++ b/packages/package/package.json @@ -1,6 +1,6 @@ { "name": "@sveltejs/package", - "version": "3.0.0-next.5", + "version": "3.0.0-next.6", "description": "The fastest way to build Svelte packages", "repository": { "type": "git", From bc07967c7f36a4141dc1f591d86642d3ea84ca29 Mon Sep 17 00:00:00 2001 From: Tee Ming Date: Wed, 12 Aug 2026 06:44:56 +0800 Subject: [PATCH 510/545] chore: remove `prepare` scripts (#16729) There's no reason to run all these `prepare` scripts on every `pnpm i`. Our `check` CI action already runs `svelte-kit sync` before type checking. This PR removes them and ignores the `postinstall` scripts from packages which only use them to emit warnings. Cuts 8s from `pnpm i` on my M1 Pro; ~maybe it's a little more in CI for each job~ seems to cut about 19 seconds from the install step. --------- Co-authored-by: vercel[bot] <35613825+vercel[bot]@users.noreply.github.com> Co-authored-by: Rich Harris --- package.json | 2 +- packages/adapter-cloudflare/test/apps/pages/package.json | 1 - .../adapter-cloudflare/test/apps/workers/package.json | 1 - packages/adapter-netlify/test/apps/basic/package.json | 1 - packages/adapter-netlify/test/apps/edge/package.json | 1 - .../test/apps/instrumentation/package.json | 1 - packages/adapter-netlify/test/apps/split/package.json | 1 - packages/adapter-node/test/apps/basic/package.json | 1 - packages/adapter-vercel/test/apps/basic/package.json | 1 - packages/adapter-vercel/test/apps/split/package.json | 1 - packages/kit/package.json | 2 +- packages/kit/test/apps/async/package.json | 5 ++--- packages/kit/test/apps/basics/package.json | 3 +-- packages/kit/test/apps/dev-only/package.json | 3 +-- packages/kit/test/apps/embed/package.json | 1 - packages/kit/test/apps/hash-based-routing/package.json | 1 - packages/kit/test/apps/no-csr/package.json | 1 - packages/kit/test/apps/no-ssr/package.json | 1 - packages/kit/test/apps/options-2/package.json | 3 +-- packages/kit/test/apps/options-3/package.json | 1 - packages/kit/test/apps/options/package.json | 8 ++++---- .../test/apps/prerendered-app-error-pages/package.json | 1 - packages/kit/test/apps/writes/package.json | 1 - .../build-errors/apps/env-private-dynamic/package.json | 1 - .../apps/env-private-service-worker/package.json | 1 - .../kit/test/build-errors/apps/env-private/package.json | 1 - .../apps/prerender-entry-generator-mismatch/package.json | 1 - .../apps/prerender-remote-function-error/package.json | 1 - .../apps/prerender-root-non-html-server/package.json | 1 - .../apps/prerenderable-incorrect-fragment/package.json | 1 - .../apps/prerenderable-not-prerendered/package.json | 1 - .../apps/remote-function-without-flag/package.json | 1 - .../build-errors/apps/removed-lib-import/package.json | 1 - .../apps/removed-service-worker-import/package.json | 1 - .../apps/server-only-folder-dynamic-import/package.json | 1 - .../build-errors/apps/server-only-folder/package.json | 1 - .../apps/server-only-module-dynamic-import/package.json | 1 - .../build-errors/apps/server-only-module/package.json | 1 - .../build-errors/apps/server-only-shared/package.json | 1 - .../kit/test/build-errors/apps/syntax-error/package.json | 3 +-- packages/kit/test/prerendering/basics/globalSetup.js | 2 +- packages/kit/test/prerendering/basics/package.json | 1 - packages/kit/test/prerendering/options/package.json | 1 - packages/kit/test/prerendering/paths-base/package.json | 1 - playgrounds/basic/package.json | 1 - pnpm-workspace.yaml | 6 ++---- 46 files changed, 15 insertions(+), 58 deletions(-) diff --git a/package.json b/package.json index 8f494acd13d9..1bd061b71311 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,7 @@ "type": "module", "scripts": { "test:kit": "pnpm run --dir packages/kit test", - "test:kit:unit": "vitest run packages/kit", + "test:kit:unit": "cd packages/kit && vitest run -c vitest.kit.config.js", "test:kit:dev": "pnpm run --dir packages/kit test:dev", "test:kit:build": "pnpm run --dir packages/kit test:build", "test:cross-platform:dev": "pnpm run --dir packages/kit test:cross-platform:dev", diff --git a/packages/adapter-cloudflare/test/apps/pages/package.json b/packages/adapter-cloudflare/test/apps/pages/package.json index dfd08f7249cc..3e758b7a59e1 100644 --- a/packages/adapter-cloudflare/test/apps/pages/package.json +++ b/packages/adapter-cloudflare/test/apps/pages/package.json @@ -6,7 +6,6 @@ "dev": "vite dev", "build": "vite build", "preview": "wrangler pages dev .svelte-kit/cloudflare --port 8787 --compatibility-date 2026-06-24", - "prepare": "svelte-kit sync || echo ''", "test": "playwright test" }, "devDependencies": { diff --git a/packages/adapter-cloudflare/test/apps/workers/package.json b/packages/adapter-cloudflare/test/apps/workers/package.json index 2414fec7cb50..c59a5adc2774 100644 --- a/packages/adapter-cloudflare/test/apps/workers/package.json +++ b/packages/adapter-cloudflare/test/apps/workers/package.json @@ -6,7 +6,6 @@ "dev": "vite dev", "build": "vite build", "preview": "wrangler dev dist/index.js --config config/wrangler.jsonc", - "prepare": "svelte-kit sync || echo ''", "test:dev": "DEV=true playwright test", "test:build": "playwright test", "test": "pnpm test:dev && pnpm test:build" diff --git a/packages/adapter-netlify/test/apps/basic/package.json b/packages/adapter-netlify/test/apps/basic/package.json index 16540a0375c0..efbe559d533f 100644 --- a/packages/adapter-netlify/test/apps/basic/package.json +++ b/packages/adapter-netlify/test/apps/basic/package.json @@ -6,7 +6,6 @@ "dev": "vite dev", "build": "vite build", "preview": "vite preview", - "prepare": "svelte-kit sync || echo ''", "test:platform": "playwright test" }, "devDependencies": { diff --git a/packages/adapter-netlify/test/apps/edge/package.json b/packages/adapter-netlify/test/apps/edge/package.json index a8bed2c4f7bb..873608fb8298 100644 --- a/packages/adapter-netlify/test/apps/edge/package.json +++ b/packages/adapter-netlify/test/apps/edge/package.json @@ -6,7 +6,6 @@ "dev": "vite dev", "build": "vite build", "preview": "vite preview", - "prepare": "svelte-kit sync || echo ''", "test:platform": "playwright test" }, "devDependencies": { diff --git a/packages/adapter-netlify/test/apps/instrumentation/package.json b/packages/adapter-netlify/test/apps/instrumentation/package.json index 8560b666c4ea..f234bc41a823 100644 --- a/packages/adapter-netlify/test/apps/instrumentation/package.json +++ b/packages/adapter-netlify/test/apps/instrumentation/package.json @@ -6,7 +6,6 @@ "dev": "vite dev", "build": "vite build", "preview": "vite preview", - "prepare": "svelte-kit sync || echo ''", "test:platform": "playwright test" }, "devDependencies": { diff --git a/packages/adapter-netlify/test/apps/split/package.json b/packages/adapter-netlify/test/apps/split/package.json index 2af2c95a4b18..47b5988375bd 100644 --- a/packages/adapter-netlify/test/apps/split/package.json +++ b/packages/adapter-netlify/test/apps/split/package.json @@ -6,7 +6,6 @@ "dev": "vite dev", "build": "vite build", "preview": "vite preview", - "prepare": "svelte-kit sync || echo ''", "test:platform": "playwright test" }, "devDependencies": { diff --git a/packages/adapter-node/test/apps/basic/package.json b/packages/adapter-node/test/apps/basic/package.json index 3b251da38aeb..86b41481b8eb 100644 --- a/packages/adapter-node/test/apps/basic/package.json +++ b/packages/adapter-node/test/apps/basic/package.json @@ -6,7 +6,6 @@ "dev": "vite dev", "build": "MY_CUSTOM_PORT=5173 vite build", "preview": "MY_CUSTOM_PORT=5173 node build", - "prepare": "svelte-kit sync || echo ''", "test:platform": "playwright test" }, "devDependencies": { diff --git a/packages/adapter-vercel/test/apps/basic/package.json b/packages/adapter-vercel/test/apps/basic/package.json index cfba7e84a17c..808087e7676c 100644 --- a/packages/adapter-vercel/test/apps/basic/package.json +++ b/packages/adapter-vercel/test/apps/basic/package.json @@ -6,7 +6,6 @@ "dev": "vite dev", "preview": "vite preview", "build": "vite build", - "prepare": "svelte-kit sync || echo ''", "test:platform": "playwright test" }, "devDependencies": { diff --git a/packages/adapter-vercel/test/apps/split/package.json b/packages/adapter-vercel/test/apps/split/package.json index 130925759762..49fb9d27d13d 100644 --- a/packages/adapter-vercel/test/apps/split/package.json +++ b/packages/adapter-vercel/test/apps/split/package.json @@ -6,7 +6,6 @@ "dev": "vite dev", "preview": "vite preview", "build": "vite build", - "prepare": "svelte-kit sync || echo ''", "test:platform": "playwright test" }, "devDependencies": { diff --git a/packages/kit/package.json b/packages/kit/package.json index d36cd1a948d7..d1991ee14f19 100644 --- a/packages/kit/package.json +++ b/packages/kit/package.json @@ -86,7 +86,7 @@ "test:server-side-route-resolution:build": "pnpm -r --workspace-concurrency 1 --filter=\"./test/**\" test:server-side-route-resolution:build", "test:svelte-async:dev": "pnpm -r --workspace-concurrency 1 --filter=\"./test/**\" test:svelte-async:dev", "test:svelte-async:build": "pnpm -r --workspace-concurrency 1 --filter=\"./test/**\" test:svelte-async:build", - "test:unit": "vitest run ./", + "test:unit": "vitest run -c vitest.kit.config.js", "tsc-native": "node node_modules/@typescript/native/bin/tsc", "prepublishOnly": "pnpm generate:types", "generate:version": "node scripts/generate-version.js", diff --git a/packages/kit/test/apps/async/package.json b/packages/kit/test/apps/async/package.json index 9cc534955127..e324e3fa096c 100644 --- a/packages/kit/test/apps/async/package.json +++ b/packages/kit/test/apps/async/package.json @@ -4,14 +4,13 @@ "version": "0.0.1", "type": "module", "scripts": { - "dev": "vite dev", + "dev": "svelte-kit sync && vite dev", "build": "vite build", "preview": "vite preview", - "prepare": "svelte-kit sync || echo ''", "check": "svelte-kit sync && node node_modules/@typescript/native/bin/tsc && svelte-check --tsgo --incremental", "test": "pnpm test:dev && pnpm test:build", "test:dev": "DEV=true playwright test", - "test:build": "vitest run && playwright test" + "test:build": "svelte-kit sync && vitest run && playwright test" }, "devDependencies": { "@sveltejs/kit": "workspace:^", diff --git a/packages/kit/test/apps/basics/package.json b/packages/kit/test/apps/basics/package.json index f50381956287..9a9ec983edb1 100644 --- a/packages/kit/test/apps/basics/package.json +++ b/packages/kit/test/apps/basics/package.json @@ -6,7 +6,6 @@ "dev": "vite dev", "build": "vite build", "preview": "vite preview", - "prepare": "svelte-kit sync", "check": "svelte-kit sync && node node_modules/@typescript/native/bin/tsc && svelte-check --tsgo --incremental", "test": "pnpm test:dev && pnpm test:build", "test:dev": "node test/setup.js && DEV=true playwright test", @@ -17,7 +16,7 @@ "test:server-side-route-resolution:build": "node test/setup.js && PUBLIC_PRERENDERING=false ROUTER_RESOLUTION=server playwright test", "test:svelte-async:dev": "node test/setup.js && DEV=true SVELTE_ASYNC=true playwright test", "test:svelte-async:build": "node test/setup.js && PUBLIC_PRERENDERING=false SVELTE_ASYNC=true playwright test", - "test:client-import": "vitest run" + "test:client-import": "svelte-kit sync && vitest run" }, "devDependencies": { "@opentelemetry/api": "catalog:", diff --git a/packages/kit/test/apps/dev-only/package.json b/packages/kit/test/apps/dev-only/package.json index 28bfab90e509..dfaf0ca83b90 100644 --- a/packages/kit/test/apps/dev-only/package.json +++ b/packages/kit/test/apps/dev-only/package.json @@ -3,10 +3,9 @@ "private": true, "version": "0.0.2-next.0", "scripts": { - "dev": "vite dev", + "dev": "svelte-kit sync && vite dev", "build": "vite build", "preview": "vite preview", - "prepare": "svelte-kit sync", "check": "svelte-kit sync && node node_modules/@typescript/native/bin/tsc && svelte-check --tsgo --incremental", "test": "pnpm test:dev", "test:dev": "DEV=true playwright test" diff --git a/packages/kit/test/apps/embed/package.json b/packages/kit/test/apps/embed/package.json index 0c676e5505da..9ad3a377e6ef 100644 --- a/packages/kit/test/apps/embed/package.json +++ b/packages/kit/test/apps/embed/package.json @@ -6,7 +6,6 @@ "dev": "vite dev", "build": "vite build", "preview": "vite preview", - "prepare": "svelte-kit sync", "check": "svelte-kit sync && node node_modules/@typescript/native/bin/tsc && svelte-check --tsgo --incremental", "test": "pnpm test:dev && pnpm test:build", "test:dev": "DEV=true playwright test", diff --git a/packages/kit/test/apps/hash-based-routing/package.json b/packages/kit/test/apps/hash-based-routing/package.json index 36d6f466f6e9..2b971eb1e990 100644 --- a/packages/kit/test/apps/hash-based-routing/package.json +++ b/packages/kit/test/apps/hash-based-routing/package.json @@ -6,7 +6,6 @@ "dev": "vite dev", "build": "vite build", "preview": "vite preview", - "prepare": "svelte-kit sync", "check": "svelte-kit sync && node node_modules/@typescript/native/bin/tsc && svelte-check --tsgo --incremental", "test": "pnpm test:dev && pnpm test:build", "test:dev": "DEV=true playwright test", diff --git a/packages/kit/test/apps/no-csr/package.json b/packages/kit/test/apps/no-csr/package.json index 7d80b435ce6c..8c482a815c38 100644 --- a/packages/kit/test/apps/no-csr/package.json +++ b/packages/kit/test/apps/no-csr/package.json @@ -6,7 +6,6 @@ "dev": "vite dev", "build": "vite build", "preview": "vite preview", - "prepare": "svelte-kit sync", "check": "svelte-kit sync && node node_modules/@typescript/native/bin/tsc && svelte-check --tsgo --incremental", "test": "pnpm test:build", "test:build": "playwright test" diff --git a/packages/kit/test/apps/no-ssr/package.json b/packages/kit/test/apps/no-ssr/package.json index b1d0d3d36c1f..a9b1220b94e2 100644 --- a/packages/kit/test/apps/no-ssr/package.json +++ b/packages/kit/test/apps/no-ssr/package.json @@ -6,7 +6,6 @@ "dev": "vite dev", "build": "vite build", "preview": "vite preview", - "prepare": "svelte-kit sync", "check": "svelte-kit sync && node node_modules/@typescript/native/bin/tsc && svelte-check --tsgo --incremental", "test": "pnpm test:dev && pnpm test:build", "test:dev": "DEV=true playwright test", diff --git a/packages/kit/test/apps/options-2/package.json b/packages/kit/test/apps/options-2/package.json index 6240e72a264b..ff977740b7f1 100644 --- a/packages/kit/test/apps/options-2/package.json +++ b/packages/kit/test/apps/options-2/package.json @@ -3,10 +3,9 @@ "private": true, "version": "0.0.1", "scripts": { - "dev": "RUNTIME_ONLY=secret vite dev", + "dev": "svelte-kit sync && RUNTIME_ONLY=secret vite dev", "build": "vite build", "preview": "RUNTIME_ONLY=secret vite preview", - "prepare": "svelte-kit sync", "check": "svelte-kit sync && node node_modules/@typescript/native/bin/tsc && svelte-check --tsgo --incremental", "test": "pnpm test:dev && pnpm test:build", "test:dev": "DEV=true playwright test && REGISTER_SERVICE_WORKER=true DEV=true playwright test", diff --git a/packages/kit/test/apps/options-3/package.json b/packages/kit/test/apps/options-3/package.json index 95536deafdf8..bcb2aec5b4ad 100644 --- a/packages/kit/test/apps/options-3/package.json +++ b/packages/kit/test/apps/options-3/package.json @@ -6,7 +6,6 @@ "dev": "vite dev", "build": "vite build", "preview": "vite preview", - "prepare": "svelte-kit sync", "check": "svelte-kit sync && node node_modules/@typescript/native/bin/tsc && svelte-check --tsgo --incremental", "test": "pnpm test:build", "test:build": "playwright test" diff --git a/packages/kit/test/apps/options/package.json b/packages/kit/test/apps/options/package.json index b77369638060..caa49a712f1d 100644 --- a/packages/kit/test/apps/options/package.json +++ b/packages/kit/test/apps/options/package.json @@ -3,13 +3,13 @@ "private": true, "version": "0.0.1", "scripts": { - "dev": "vite dev -c vite.custom.config.js", + "sync": "svelte-kit sync -c vite.custom.config.js", + "dev": "pnpm sync && vite dev -c vite.custom.config.js", "build": "vite build -c vite.custom.config.js --mode custom", "preview": "vite preview -c vite.custom.config.js", - "prepare": "svelte-kit sync -c vite.custom.config.js", - "check": "svelte-kit sync -c vite.custom.config.js && node node_modules/@typescript/native/bin/tsc && svelte-check --tsgo --incremental --config vite.custom.config.js", + "check": "pnpm sync && node node_modules/@typescript/native/bin/tsc && svelte-check --tsgo --incremental --config vite.custom.config.js", "test": "pnpm test:dev && pnpm test:build", - "test:vitest": "vitest run --config vite.custom.config.js", + "test:vitest": "pnpm sync && vitest run --config vite.custom.config.js", "test:paths-relative:dev": "DEV=true playwright test", "test:paths-assets:dev": "DEV=true PATHS_ASSETS=https://cdn.example.com/stuff playwright test", "test:dev": "pnpm test:vitest && pnpm test:paths-relative:dev && pnpm test:paths-assets:dev", diff --git a/packages/kit/test/apps/prerendered-app-error-pages/package.json b/packages/kit/test/apps/prerendered-app-error-pages/package.json index cc5ea29be2a4..38185a34cd18 100644 --- a/packages/kit/test/apps/prerendered-app-error-pages/package.json +++ b/packages/kit/test/apps/prerendered-app-error-pages/package.json @@ -7,7 +7,6 @@ "dev": "vite dev", "build": "vite build", "preview": "vite preview", - "prepare": "svelte-kit sync || echo ''", "check": "svelte-kit sync && pnpm tsc-native && svelte-check --tsgo --incremental --tsconfig ./jsconfig.json", "check:watch": "svelte-kit sync && pnpm tsc-native && svelte-check --tsgo --incremental --tsconfig ./jsconfig.json --watch", "test": "pnpm test:dev && pnpm test:build", diff --git a/packages/kit/test/apps/writes/package.json b/packages/kit/test/apps/writes/package.json index c13f6684bb1a..93deadd7af6e 100644 --- a/packages/kit/test/apps/writes/package.json +++ b/packages/kit/test/apps/writes/package.json @@ -6,7 +6,6 @@ "dev": "vite dev", "build": "vite build", "preview": "vite preview", - "prepare": "svelte-kit sync", "check": "svelte-kit sync && node node_modules/@typescript/native/bin/tsc && svelte-check --tsgo --incremental", "test": "pnpm test:dev && pnpm test:build", "test:dev": "DEV=true playwright test", diff --git a/packages/kit/test/build-errors/apps/env-private-dynamic/package.json b/packages/kit/test/build-errors/apps/env-private-dynamic/package.json index 1ca70a2568ec..6c0ae3d24662 100644 --- a/packages/kit/test/build-errors/apps/env-private-dynamic/package.json +++ b/packages/kit/test/build-errors/apps/env-private-dynamic/package.json @@ -6,7 +6,6 @@ "dev": "vite dev", "build": "vite build", "preview": "vite preview", - "prepare": "svelte-kit sync", "check": "svelte-kit sync && node node_modules/@typescript/native/bin/tsc && svelte-check --tsgo --incremental", "check:watch": "svelte-check --watch --tsgo --incremental" }, diff --git a/packages/kit/test/build-errors/apps/env-private-service-worker/package.json b/packages/kit/test/build-errors/apps/env-private-service-worker/package.json index e9959d204c91..50398ed9a8e0 100644 --- a/packages/kit/test/build-errors/apps/env-private-service-worker/package.json +++ b/packages/kit/test/build-errors/apps/env-private-service-worker/package.json @@ -6,7 +6,6 @@ "dev": "vite dev", "build": "vite build", "preview": "vite preview", - "prepare": "svelte-kit sync", "check": "svelte-kit sync && node node_modules/@typescript/native/bin/tsc && svelte-check --tsgo --incremental", "check:watch": "svelte-check --watch --tsgo --incremental" }, diff --git a/packages/kit/test/build-errors/apps/env-private/package.json b/packages/kit/test/build-errors/apps/env-private/package.json index 2d9f0577c8ae..45c6388d410a 100644 --- a/packages/kit/test/build-errors/apps/env-private/package.json +++ b/packages/kit/test/build-errors/apps/env-private/package.json @@ -6,7 +6,6 @@ "dev": "vite dev", "build": "vite build", "preview": "vite preview", - "prepare": "svelte-kit sync", "check": "svelte-kit sync && node node_modules/@typescript/native/bin/tsc && svelte-check --tsgo --incremental", "check:watch": "svelte-check --watch --tsgo --incremental" }, diff --git a/packages/kit/test/build-errors/apps/prerender-entry-generator-mismatch/package.json b/packages/kit/test/build-errors/apps/prerender-entry-generator-mismatch/package.json index 1fcf9ee7e2de..fc0a29f40d6b 100644 --- a/packages/kit/test/build-errors/apps/prerender-entry-generator-mismatch/package.json +++ b/packages/kit/test/build-errors/apps/prerender-entry-generator-mismatch/package.json @@ -6,7 +6,6 @@ "dev": "vite dev", "build": "vite build", "preview": "vite preview", - "prepare": "svelte-kit sync", "check": "svelte-kit sync && node node_modules/@typescript/native/bin/tsc && svelte-check --tsgo --incremental" }, "devDependencies": { diff --git a/packages/kit/test/build-errors/apps/prerender-remote-function-error/package.json b/packages/kit/test/build-errors/apps/prerender-remote-function-error/package.json index d10c1c0df92a..6981301de2bc 100644 --- a/packages/kit/test/build-errors/apps/prerender-remote-function-error/package.json +++ b/packages/kit/test/build-errors/apps/prerender-remote-function-error/package.json @@ -6,7 +6,6 @@ "dev": "vite dev", "build": "vite build", "preview": "vite preview", - "prepare": "svelte-kit sync", "check": "svelte-kit sync && node node_modules/@typescript/native/bin/tsc && svelte-check --tsgo --incremental" }, "devDependencies": { diff --git a/packages/kit/test/build-errors/apps/prerender-root-non-html-server/package.json b/packages/kit/test/build-errors/apps/prerender-root-non-html-server/package.json index 270560203f14..ab03e7795631 100644 --- a/packages/kit/test/build-errors/apps/prerender-root-non-html-server/package.json +++ b/packages/kit/test/build-errors/apps/prerender-root-non-html-server/package.json @@ -6,7 +6,6 @@ "dev": "vite dev", "build": "vite build", "preview": "vite preview", - "prepare": "svelte-kit sync", "check": "svelte-kit sync && node node_modules/@typescript/native/bin/tsc && svelte-check --tsgo --incremental" }, "devDependencies": { diff --git a/packages/kit/test/build-errors/apps/prerenderable-incorrect-fragment/package.json b/packages/kit/test/build-errors/apps/prerenderable-incorrect-fragment/package.json index 1fcf9ee7e2de..fc0a29f40d6b 100644 --- a/packages/kit/test/build-errors/apps/prerenderable-incorrect-fragment/package.json +++ b/packages/kit/test/build-errors/apps/prerenderable-incorrect-fragment/package.json @@ -6,7 +6,6 @@ "dev": "vite dev", "build": "vite build", "preview": "vite preview", - "prepare": "svelte-kit sync", "check": "svelte-kit sync && node node_modules/@typescript/native/bin/tsc && svelte-check --tsgo --incremental" }, "devDependencies": { diff --git a/packages/kit/test/build-errors/apps/prerenderable-not-prerendered/package.json b/packages/kit/test/build-errors/apps/prerenderable-not-prerendered/package.json index 7588bcd3247a..f793ab2886c3 100644 --- a/packages/kit/test/build-errors/apps/prerenderable-not-prerendered/package.json +++ b/packages/kit/test/build-errors/apps/prerenderable-not-prerendered/package.json @@ -6,7 +6,6 @@ "dev": "vite dev", "build": "vite build", "preview": "vite preview", - "prepare": "svelte-kit sync", "check": "svelte-kit sync && node node_modules/@typescript/native/bin/tsc && svelte-check --tsgo --incremental" }, "devDependencies": { diff --git a/packages/kit/test/build-errors/apps/remote-function-without-flag/package.json b/packages/kit/test/build-errors/apps/remote-function-without-flag/package.json index d7f106fbbe2e..af097296e2e4 100644 --- a/packages/kit/test/build-errors/apps/remote-function-without-flag/package.json +++ b/packages/kit/test/build-errors/apps/remote-function-without-flag/package.json @@ -6,7 +6,6 @@ "dev": "vite dev", "build": "vite build", "preview": "vite preview", - "prepare": "svelte-kit sync", "check": "svelte-kit sync && node node_modules/@typescript/native/bin/tsc && svelte-check --tsgo --incremental", "check:watch": "svelte-check --watch --tsgo --incremental" }, diff --git a/packages/kit/test/build-errors/apps/removed-lib-import/package.json b/packages/kit/test/build-errors/apps/removed-lib-import/package.json index 48e5b3670543..f5cf6adac262 100644 --- a/packages/kit/test/build-errors/apps/removed-lib-import/package.json +++ b/packages/kit/test/build-errors/apps/removed-lib-import/package.json @@ -6,7 +6,6 @@ "dev": "vite dev", "build": "vite build", "preview": "vite preview", - "prepare": "svelte-kit sync", "check": "svelte-kit sync && node node_modules/@typescript/native/bin/tsc && svelte-check --tsgo --incremental", "check:watch": "svelte-check --watch --tsgo --incremental" }, diff --git a/packages/kit/test/build-errors/apps/removed-service-worker-import/package.json b/packages/kit/test/build-errors/apps/removed-service-worker-import/package.json index c84daba675f5..8cf1d41f0357 100644 --- a/packages/kit/test/build-errors/apps/removed-service-worker-import/package.json +++ b/packages/kit/test/build-errors/apps/removed-service-worker-import/package.json @@ -6,7 +6,6 @@ "dev": "vite dev", "build": "vite build", "preview": "vite preview", - "prepare": "svelte-kit sync", "check": "svelte-kit sync && node node_modules/@typescript/native/bin/tsc && svelte-check --tsgo --incremental", "check:watch": "svelte-check --watch --tsgo --incremental" }, diff --git a/packages/kit/test/build-errors/apps/server-only-folder-dynamic-import/package.json b/packages/kit/test/build-errors/apps/server-only-folder-dynamic-import/package.json index 2922c9944b4e..ee2ba8884edd 100644 --- a/packages/kit/test/build-errors/apps/server-only-folder-dynamic-import/package.json +++ b/packages/kit/test/build-errors/apps/server-only-folder-dynamic-import/package.json @@ -6,7 +6,6 @@ "dev": "vite dev", "build": "vite build", "preview": "vite preview", - "prepare": "svelte-kit sync", "check": "svelte-kit sync && node node_modules/@typescript/native/bin/tsc && svelte-check --tsgo --incremental", "check:watch": "svelte-check --watch --tsgo --incremental" }, diff --git a/packages/kit/test/build-errors/apps/server-only-folder/package.json b/packages/kit/test/build-errors/apps/server-only-folder/package.json index ba7f6df594fe..40423f758d53 100644 --- a/packages/kit/test/build-errors/apps/server-only-folder/package.json +++ b/packages/kit/test/build-errors/apps/server-only-folder/package.json @@ -6,7 +6,6 @@ "dev": "vite dev", "build": "vite build", "preview": "vite preview", - "prepare": "svelte-kit sync", "check": "svelte-kit sync && node node_modules/@typescript/native/bin/tsc && svelte-check --tsgo --incremental", "check:watch": "svelte-check --watch --tsgo --incremental" }, diff --git a/packages/kit/test/build-errors/apps/server-only-module-dynamic-import/package.json b/packages/kit/test/build-errors/apps/server-only-module-dynamic-import/package.json index 8c4d5a287a2c..8021f9ede90d 100644 --- a/packages/kit/test/build-errors/apps/server-only-module-dynamic-import/package.json +++ b/packages/kit/test/build-errors/apps/server-only-module-dynamic-import/package.json @@ -6,7 +6,6 @@ "dev": "vite dev", "build": "vite build", "preview": "vite preview", - "prepare": "svelte-kit sync", "check": "svelte-kit sync && node node_modules/@typescript/native/bin/tsc && svelte-check --tsgo --incremental", "check:watch": "svelte-check --watch --tsgo --incremental" }, diff --git a/packages/kit/test/build-errors/apps/server-only-module/package.json b/packages/kit/test/build-errors/apps/server-only-module/package.json index 3e2d57e8956f..4ba949c5e7bc 100644 --- a/packages/kit/test/build-errors/apps/server-only-module/package.json +++ b/packages/kit/test/build-errors/apps/server-only-module/package.json @@ -6,7 +6,6 @@ "dev": "vite dev", "build": "vite build", "preview": "vite preview", - "prepare": "svelte-kit sync", "check": "svelte-kit sync && node node_modules/@typescript/native/bin/tsc && svelte-check --tsgo --incremental", "check:watch": "svelte-check --watch --tsgo --incremental" }, diff --git a/packages/kit/test/build-errors/apps/server-only-shared/package.json b/packages/kit/test/build-errors/apps/server-only-shared/package.json index de351b46e067..34ea35e5c3ed 100644 --- a/packages/kit/test/build-errors/apps/server-only-shared/package.json +++ b/packages/kit/test/build-errors/apps/server-only-shared/package.json @@ -6,7 +6,6 @@ "dev": "vite dev", "build": "vite build", "preview": "vite preview", - "prepare": "svelte-kit sync", "check": "svelte-kit sync && node node_modules/@typescript/native/bin/tsc && svelte-check --tsgo --incremental", "check:watch": "svelte-check --watch --tsgo --incremental" }, diff --git a/packages/kit/test/build-errors/apps/syntax-error/package.json b/packages/kit/test/build-errors/apps/syntax-error/package.json index dddaad5eac64..dc0aa29250bd 100644 --- a/packages/kit/test/build-errors/apps/syntax-error/package.json +++ b/packages/kit/test/build-errors/apps/syntax-error/package.json @@ -5,8 +5,7 @@ "scripts": { "dev": "vite dev", "build": "vite build", - "preview": "vite preview", - "prepare": "svelte-kit sync" + "preview": "vite preview" }, "devDependencies": { "@sveltejs/kit": "workspace:^", diff --git a/packages/kit/test/prerendering/basics/globalSetup.js b/packages/kit/test/prerendering/basics/globalSetup.js index b3e61fff7cee..b2df8b558063 100644 --- a/packages/kit/test/prerendering/basics/globalSetup.js +++ b/packages/kit/test/prerendering/basics/globalSetup.js @@ -1,5 +1,5 @@ import { execSync } from 'node:child_process'; export default function setup() { - execSync('pnpm prepare && pnpm run build', { cwd: import.meta.dirname }); + execSync('pnpm svelte-kit sync && pnpm run build', { cwd: import.meta.dirname }); } diff --git a/packages/kit/test/prerendering/basics/package.json b/packages/kit/test/prerendering/basics/package.json index 37ade4467616..4c2f7e3a4b3b 100644 --- a/packages/kit/test/prerendering/basics/package.json +++ b/packages/kit/test/prerendering/basics/package.json @@ -6,7 +6,6 @@ "dev": "vite dev", "build": "rm -rf ./missing_ids && mkdir ./missing_ids && vite build", "preview": "vite preview", - "prepare": "svelte-kit sync", "check": "svelte-kit sync && node node_modules/@typescript/native/bin/tsc && svelte-check --tsgo --incremental", "test": "pnpm test:build", "test:build": "svelte-kit sync && vitest run", diff --git a/packages/kit/test/prerendering/options/package.json b/packages/kit/test/prerendering/options/package.json index 91432b003ed7..b46c7a04fac8 100644 --- a/packages/kit/test/prerendering/options/package.json +++ b/packages/kit/test/prerendering/options/package.json @@ -6,7 +6,6 @@ "dev": "vite dev", "build": "vite build", "preview": "vite preview", - "prepare": "svelte-kit sync", "check": "svelte-kit sync && node node_modules/@typescript/native/bin/tsc && svelte-check --tsgo --incremental", "test": "pnpm test:build", "test:build": "svelte-kit sync && pnpm build && vitest run" diff --git a/packages/kit/test/prerendering/paths-base/package.json b/packages/kit/test/prerendering/paths-base/package.json index a86f8e971922..6715fe2cb021 100644 --- a/packages/kit/test/prerendering/paths-base/package.json +++ b/packages/kit/test/prerendering/paths-base/package.json @@ -6,7 +6,6 @@ "dev": "vite dev", "build": "vite build", "preview": "vite preview", - "prepare": "svelte-kit sync", "check": "svelte-kit sync && node node_modules/@typescript/native/bin/tsc && svelte-check --tsgo --incremental", "test": "pnpm test:build", "test:build": "svelte-kit sync && pnpm build && vitest run" diff --git a/playgrounds/basic/package.json b/playgrounds/basic/package.json index af35939b8f55..422985b4caca 100644 --- a/playgrounds/basic/package.json +++ b/playgrounds/basic/package.json @@ -7,7 +7,6 @@ "build": "vite build", "preview": "vite preview", "package": "svelte-kit sync && svelte-package", - "prepare": "svelte-kit sync", "prepublishOnly": "pnpm run package", "check": "svelte-kit sync && svelte-check --tsgo --incremental", "check:watch": "svelte-kit sync && svelte-check --tsgo --incremental --watch", diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index e09fadc035fc..54e37dacc4a8 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -50,13 +50,11 @@ packages: - '!.test-tmp/**' - playgrounds/* allowBuilds: - '@parcel/watcher': true esbuild: true - protobufjs: true + protobufjs: false # postinstall script only prints warnings rolldown: true sharp: true - svelte-preprocess: true - unix-dgram: true + svelte-preprocess: false # postinstall script only prints warnings workerd: true # pnpm catalogs are currently only suitable for dependencies that # wouldn't require publishing a new package version From 87edbbde3669865c63ffd5a71f8b0e1babee4aab Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Wed, 12 Aug 2026 03:39:46 -0400 Subject: [PATCH 511/545] docs: update error handling docs (#16749) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit mostly just tweaking the order — it's weird to say 'An _unknown_ error is any other exception' for anything but the last mentioned category. also adds a mention of `validation` errors --- documentation/docs/30-advanced/20-hooks.md | 4 ++-- documentation/docs/30-advanced/25-errors.md | 22 +++++++++++++-------- 2 files changed, 16 insertions(+), 10 deletions(-) diff --git a/documentation/docs/30-advanced/20-hooks.md b/documentation/docs/30-advanced/20-hooks.md index 20d61ae7b52a..70ea50d824b2 100644 --- a/documentation/docs/30-advanced/20-hooks.md +++ b/documentation/docs/30-advanced/20-hooks.md @@ -149,10 +149,10 @@ export async function handleFetch({ event, request, fetch }) { > [!NOTE] Can be added to `src/hooks.server.js` and `src/hooks.client.js` -This function is called for _every_ error thrown while loading, rendering, or responding to a request. This allows for two things: +This function is called for every error thrown while loading, rendering, or responding to a request. This allows for two things: - you can log the error -- you can generate a custom representation of the error that is safe to show to users, omitting sensitive details like messages and stack traces. The returned value becomes the value of `page.error`. +- you can generate a custom representation of the error that is safe to show to users, omitting sensitive details like messages and stack traces Alongside the `event`, the hook receives a `kind` discriminant that tells you where the error came from, and the `error` itself: diff --git a/documentation/docs/30-advanced/25-errors.md b/documentation/docs/30-advanced/25-errors.md index e71adcc6782b..493b8d7a54fe 100644 --- a/documentation/docs/30-advanced/25-errors.md +++ b/documentation/docs/30-advanced/25-errors.md @@ -8,11 +8,11 @@ Errors are an inevitable fact of software development. SvelteKit handles errors Every error passes through the [`handleError`](hooks#handleError) hook — which can log it and customise it — before it is rendered. The hook's `kind` property identifies where the error came from: your app (`'app'`), SvelteKit (`'framework'`), validation of a [remote function](remote-functions) argument (`'validation'`) or an unknown source (`'unknown'`). By default, all are represented as simple `{ status: number, message: string }` objects. -You can add additional properties, like a `code` or a tracking `id`, as shown in the examples below. (When using TypeScript this requires you to redefine the `Error` type as described in [type safety](errors#Type-safety)). +You can add additional properties, like a `code` or a tracking `id`, as shown in the examples below. (When using TypeScript this requires you to redefine the `Error` type as described in [Type safety](errors#Type-safety) below). ## App errors -An _app_ error is one created with the [`error`](@sveltejs-kit#error) helper imported from `@sveltejs/kit`: +An app error is one thrown from your app code using the [`error`](@sveltejs-kit#error) function imported from `@sveltejs/kit`: ```js /// file: src/routes/blog/[slug]/+page.server.js @@ -75,6 +75,18 @@ error(404, 'Not found', { > [!NOTE] [In SvelteKit 1.x](migrating-to-sveltekit-2#redirect-and-error-are-no-longer-thrown-by-you) you had to `throw` the `error` yourself +## Framework errors + +Some errors are generated by SvelteKit itself rather than by your code — a request that doesn't match any route (404), a `POST` request to a page without actions (405), a request body that exceeds the size limit (413), and so on. + +These also go through `handleError`, with `kind: 'framework'`. The `error` you receive is a `{ status, message }` object whose `message` is a terse but safe description of what went wrong, such as `'Not Found'`, so it can be exposed to users as-is. + +If you log errors inside `handleError`, remember that framework errors such as 404s are routine — you will generally want to avoid logging them. + +## Validation errors + +Validation errors occur when a [remote function](remote-functions) is called with invalid data. When these are passed to `handleError`, they are accompanied by an array of `issues`. See [Handling validation errors](remote-functions#Handling-validation-errors) for more details. + ## Unknown errors An _unknown_ error is any other exception that occurs while handling a request. Since these can contain sensitive information, unknown error messages and stack traces are not exposed to users. @@ -113,13 +125,7 @@ export function handleError({ kind, error, event }) { } ``` -## Framework errors - -Some errors are generated by SvelteKit itself rather than by your code — a request for a page that doesn't exist (404), a `POST` request to a page without actions (405), a request body that exceeds the size limit (413), and so on. - -These also go through `handleError`, with a `kind` of `'framework'`. The `error` you receive is a `{ status, message }` object whose `message` is a terse but safe description of what went wrong, such as `'Not Found'`, so it can be exposed to users as-is. -If you log errors inside `handleError`, remember that framework errors such as 404s are routine — you will usually want to gate logging on `kind === 'unknown'`. ## Error boundaries From d7c613ae749cfebc805d9c1565bf4b16d1631340 Mon Sep 17 00:00:00 2001 From: Nic Polumeyv Date: Wed, 12 Aug 2026 05:17:30 -0400 Subject: [PATCH 512/545] breaking: move `RequestEvent` and `Cookies` to `$app/server` (#16751) closes #16676 --------- Co-authored-by: Tee Ming --- .changeset/calm-bears-wave.md | 5 + .../docs/20-core-concepts/10-routing.md | 2 +- .../docs/20-core-concepts/20-load.md | 2 +- .../20-core-concepts/60-remote-functions.md | 2 +- .../25-build-and-deploy/40-adapter-node.md | 2 +- .../docs/40-best-practices/03-auth.md | 2 +- .../40-best-practices/10-accessibility.md | 2 +- .../35-migrating-to-sveltekit-3.md | 6 +- .../kit/src/core/sync/write_types/index.js | 4 +- packages/kit/src/exports/hooks/public.d.ts | 3 +- packages/kit/src/exports/hooks/sequence.js | 2 +- .../kit/src/exports/hooks/sequence.spec.js | 2 +- .../kit/src/exports/internal/server/event.js | 2 +- packages/kit/src/exports/public.d.ts | 198 +-------- packages/kit/src/exports/vite/dev/index.js | 3 +- .../kit/src/runtime/app/server/public.d.ts | 199 +++++++++ .../app/server/remote/prerender.spec.js | 2 +- .../src/runtime/app/server/remote/query.js | 3 +- .../src/runtime/app/server/remote/shared.js | 2 +- packages/kit/src/runtime/server/cookie.js | 4 +- packages/kit/src/runtime/server/data/index.js | 2 +- packages/kit/src/runtime/server/endpoint.js | 6 +- packages/kit/src/runtime/server/errors.js | 4 +- packages/kit/src/runtime/server/fetch.js | 2 +- .../kit/src/runtime/server/page/actions.js | 3 +- .../runtime/server/page/data_serializer.js | 4 +- packages/kit/src/runtime/server/page/index.js | 3 +- .../kit/src/runtime/server/page/load_data.js | 6 +- .../src/runtime/server/page/load_data.spec.js | 4 +- .../kit/src/runtime/server/page/render.js | 2 +- .../runtime/server/page/respond_with_error.js | 2 +- .../src/runtime/server/remote-functions.js | 4 +- packages/kit/src/runtime/server/respond.js | 4 +- packages/kit/src/runtime/server/utils.js | 2 +- packages/kit/src/types/internal.d.ts | 3 +- packages/kit/test/types/request-event.test.ts | 2 +- packages/kit/types/index.d.ts | 401 +++++++++--------- 37 files changed, 462 insertions(+), 439 deletions(-) create mode 100644 .changeset/calm-bears-wave.md diff --git a/.changeset/calm-bears-wave.md b/.changeset/calm-bears-wave.md new file mode 100644 index 000000000000..8779e7f03cb4 --- /dev/null +++ b/.changeset/calm-bears-wave.md @@ -0,0 +1,5 @@ +--- +'@sveltejs/kit': major +--- + +breaking: move `RequestEvent` and `Cookies` to `$app/server` diff --git a/documentation/docs/20-core-concepts/10-routing.md b/documentation/docs/20-core-concepts/10-routing.md index 50031ef76c3c..728c916e3b68 100644 --- a/documentation/docs/20-core-concepts/10-routing.md +++ b/documentation/docs/20-core-concepts/10-routing.md @@ -293,7 +293,7 @@ Like `+layout.js`, `+layout.server.js` can export [page options](page-options) ## +server -As well as pages, you can define routes with a `+server.js` file (sometimes referred to as an 'API route' or an 'endpoint'), which gives you full control over the response. Your `+server.js` file exports functions corresponding to HTTP verbs like `GET`, `POST`, `PATCH`, `PUT`, `DELETE`, `OPTIONS`, and `HEAD` that take a [`RequestEvent`](@sveltejs-kit#RequestEvent) argument and return a [`Response`](https://developer.mozilla.org/en-US/docs/Web/API/Response) object. +As well as pages, you can define routes with a `+server.js` file (sometimes referred to as an 'API route' or an 'endpoint'), which gives you full control over the response. Your `+server.js` file exports functions corresponding to HTTP verbs like `GET`, `POST`, `PATCH`, `PUT`, `DELETE`, `OPTIONS`, and `HEAD` that take a [`RequestEvent`]($app-server#RequestEvent) argument and return a [`Response`](https://developer.mozilla.org/en-US/docs/Web/API/Response) object. For example we could create an `/api/random-number` route with a `GET` handler: diff --git a/documentation/docs/20-core-concepts/20-load.md b/documentation/docs/20-core-concepts/20-load.md index 733f7c15a471..d8895abe3859 100644 --- a/documentation/docs/20-core-concepts/20-load.md +++ b/documentation/docs/20-core-concepts/20-load.md @@ -292,7 +292,7 @@ export async function load({ fetch, params }) { ## Cookies -A server `load` function can get [`cookies`](@sveltejs-kit#Cookies) as shown below. When setting cookies, SvelteKit provides default values for `httpOnly`, `secure`, and `path` — as described in [the API documentation](@sveltejs-kit#Cookies) — in order to improve security and developer experience. +A server `load` function can get [`cookies`]($app-server#Cookies) as shown below. When setting cookies, SvelteKit provides default values for `httpOnly`, `secure`, and `path` — as described in [the API documentation]($app-server#Cookies) — in order to improve security and developer experience. ```js /// file: src/routes/+layout.server.js diff --git a/documentation/docs/20-core-concepts/60-remote-functions.md b/documentation/docs/20-core-concepts/60-remote-functions.md index 257942dc82bb..be9a9fde0533 100644 --- a/documentation/docs/20-core-concepts/60-remote-functions.md +++ b/documentation/docs/20-core-concepts/60-remote-functions.md @@ -1266,7 +1266,7 @@ export const getStuff = query('unchecked', async ({ id }: { id: string }) => { ## Using `getRequestEvent` -Inside `query`, `form` and `command` you can use [`getRequestEvent`]($app-server#getRequestEvent) to get the current [`RequestEvent`](@sveltejs-kit#RequestEvent) object. This makes it easy to build abstractions for interacting with cookies, for example: +Inside `query`, `form` and `command` you can use [`getRequestEvent`]($app-server#getRequestEvent) to get the current [`RequestEvent`]($app-server#RequestEvent) object. This makes it easy to build abstractions for interacting with cookies, for example: ```ts /// file: user.remote.js diff --git a/documentation/docs/25-build-and-deploy/40-adapter-node.md b/documentation/docs/25-build-and-deploy/40-adapter-node.md index 29ca294f9c57..ca827e0da0b8 100644 --- a/documentation/docs/25-build-and-deploy/40-adapter-node.md +++ b/documentation/docs/25-build-and-deploy/40-adapter-node.md @@ -121,7 +121,7 @@ If `adapter-node` can't correctly determine the URL of your deployment, you may ### `ADDRESS_HEADER` and `XFF_DEPTH` -The [`RequestEvent`](@sveltejs-kit#RequestEvent) object passed to hooks and endpoints includes an `event.getClientAddress()` function that returns the client's IP address. By default this is the connecting `remoteAddress`. If your server is behind one or more proxies (such as a load balancer), this value will contain the innermost proxy's IP address rather than the client's, so we need to specify an `ADDRESS_HEADER` to read the address from: +The [`RequestEvent`]($app-server#RequestEvent) object passed to hooks and endpoints includes an `event.getClientAddress()` function that returns the client's IP address. By default this is the connecting `remoteAddress`. If your server is behind one or more proxies (such as a load balancer), this value will contain the innermost proxy's IP address rather than the client's, so we need to specify an `ADDRESS_HEADER` to read the address from: ```sh ADDRESS_HEADER=True-Client-IP node build diff --git a/documentation/docs/40-best-practices/03-auth.md b/documentation/docs/40-best-practices/03-auth.md index 37080ff47e07..401505ea7922 100644 --- a/documentation/docs/40-best-practices/03-auth.md +++ b/documentation/docs/40-best-practices/03-auth.md @@ -14,7 +14,7 @@ In contrast, JWT generally are not checked against a datastore, which means they ## Integration points -Auth [cookies](@sveltejs-kit#Cookies) can be checked inside the [`handle`](hooks#handle) hook. If a user is found matching the provided credentials, the user information can be stored in [`locals`](hooks#handle-locals). +Auth [cookies]($app-server#Cookies) can be checked inside the [`handle`](hooks#handle) hook. If a user is found matching the provided credentials, the user information can be stored in [`locals`](hooks#handle-locals). ## Libraries diff --git a/documentation/docs/40-best-practices/10-accessibility.md b/documentation/docs/40-best-practices/10-accessibility.md index 5e174655d7bc..ea88916d1a5e 100644 --- a/documentation/docs/40-best-practices/10-accessibility.md +++ b/documentation/docs/40-best-practices/10-accessibility.md @@ -66,7 +66,7 @@ If your content is available in multiple languages, you should set the `lang` at ```js /// file: src/hooks.server.js // @filename: utils.ts -export function get_lang(event: import('@sveltejs/kit').RequestEvent) { +export function get_lang(event: import('$app/server').RequestEvent) { return 'en'; } diff --git a/documentation/docs/60-appendix/35-migrating-to-sveltekit-3.md b/documentation/docs/60-appendix/35-migrating-to-sveltekit-3.md index eafb8b9eca90..c734c3ded2ec 100644 --- a/documentation/docs/60-appendix/35-migrating-to-sveltekit-3.md +++ b/documentation/docs/60-appendix/35-migrating-to-sveltekit-3.md @@ -286,6 +286,10 @@ Types like `EnvVarConfig`, used with [`defineEnvVars`](@sveltejs-kit-env#defineE Types like `Handle`, which defines the type of your [`handle`](hooks#handle) hook, now live in `@sveltejs/kit/hooks`. +### Request-related types moved to `$app/server` + +Types like `RequestEvent` and `Cookies`, used by [`getRequestEvent`]($app-server#getRequestEvent), now live in `$app/server`. + ## `@sveltejs/kit/hooks` The `defineEnvVars` function has moved from `@sveltejs/kit/hooks` to `@sveltejs/kit/env`. @@ -355,7 +359,7 @@ SvelteKit now uses [`cookie`](https://npmx.dev/package/cookie) v2, which involve When setting a cookie without an explicit `path` (which was previously forbidden), the path defaults to `'/'` rather than the current request path, meaning the cookie applies to the entire site. This matches what most developers expect. You can pass an explicit `path` if necessary: ```ts -declare const cookies: import('@sveltejs/kit').Cookies; +declare const cookies: import('$app/server').Cookies; declare const name: string; declare const value: string; // ---cut--- diff --git a/packages/kit/src/core/sync/write_types/index.js b/packages/kit/src/core/sync/write_types/index.js index 7148978846e6..ab7c6743df54 100644 --- a/packages/kit/src/core/sync/write_types/index.js +++ b/packages/kit/src/core/sync/write_types/index.js @@ -354,7 +354,9 @@ function update_types(config, routes, route, root, to_delete = new Set()) { } if (route.leaf?.server || route.layout?.server || route.endpoint) { - exports.push('export type RequestEvent = Kit.RequestEvent;'); + exports.push( + "export type RequestEvent = import('$app/server').RequestEvent;" + ); } const output = [imports.join('\n'), declarations.join('\n'), exports.join('\n')] diff --git a/packages/kit/src/exports/hooks/public.d.ts b/packages/kit/src/exports/hooks/public.d.ts index 9a606504f9af..5c03a0acc283 100644 --- a/packages/kit/src/exports/hooks/public.d.ts +++ b/packages/kit/src/exports/hooks/public.d.ts @@ -1,5 +1,6 @@ import { StandardSchemaV1 } from '@standard-schema/spec'; -import { NavigationEvent, RequestEvent } from '@sveltejs/kit'; +import { NavigationEvent } from '@sveltejs/kit'; +import { RequestEvent } from '$app/server'; import { MaybePromise } from 'types'; export * from './index.js'; diff --git a/packages/kit/src/exports/hooks/sequence.js b/packages/kit/src/exports/hooks/sequence.js index 8dd0b546c84e..da4970330f46 100644 --- a/packages/kit/src/exports/hooks/sequence.js +++ b/packages/kit/src/exports/hooks/sequence.js @@ -1,4 +1,4 @@ -/** @import { RequestEvent } from '@sveltejs/kit' */ +/** @import { RequestEvent } from '$app/server' */ /** @import { Handle, ResolveOptions } from '@sveltejs/kit/hooks' */ import { merge_tracing, diff --git a/packages/kit/src/exports/hooks/sequence.spec.js b/packages/kit/src/exports/hooks/sequence.spec.js index 00cfaf06b6f7..d1b00c4aae76 100644 --- a/packages/kit/src/exports/hooks/sequence.spec.js +++ b/packages/kit/src/exports/hooks/sequence.spec.js @@ -1,4 +1,4 @@ -/** @import { RequestEvent } from '@sveltejs/kit' */ +/** @import { RequestEvent } from '$app/server' */ /** @import { RequestState } from 'types' */ import { assert, expect, test, vi } from 'vitest'; import { sequence } from './sequence.js'; diff --git a/packages/kit/src/exports/internal/server/event.js b/packages/kit/src/exports/internal/server/event.js index 3916562a8b00..2cba0746e947 100644 --- a/packages/kit/src/exports/internal/server/event.js +++ b/packages/kit/src/exports/internal/server/event.js @@ -1,4 +1,4 @@ -/** @import { RequestEvent } from '@sveltejs/kit' */ +/** @import { RequestEvent } from '$app/server' */ /** @import { RequestStore } from 'types' */ /** @import { AsyncLocalStorage } from 'node:async_hooks' */ import { IN_WEBCONTAINER } from '../../../constants.js'; diff --git a/packages/kit/src/exports/public.d.ts b/packages/kit/src/exports/public.d.ts index 2fd2fa841bb3..aba1ac9fa767 100644 --- a/packages/kit/src/exports/public.d.ts +++ b/packages/kit/src/exports/public.d.ts @@ -21,6 +21,7 @@ import { import { BuildData, SSRNodeLoader, SSRRoute, ValidatedConfig } from 'types'; import { SvelteConfig } from '@sveltejs/vite-plugin-svelte'; import { Plugin } from 'vite'; +import { RequestEvent } from '$app/server'; import { RouteId as AppRouteId, LayoutParams as AppLayoutParams } from '$app/types'; import { ParamMatcher } from '@sveltejs/kit/params'; @@ -277,80 +278,6 @@ export interface Config extends SvelteConfig { [key: string]: any; } -export interface Cookies { - /** - * Gets a cookie that was previously set with `cookies.set`, or from the request headers. - * @param name the name of the cookie - * @param opts the options, passed directly to `cookie.parseCookie`. See documentation [here](https://github.com/jshttp/cookie?tab=readme-ov-file#cookieparsecookiestr-options) - */ - get: (name: string, opts?: import('cookie').ParseOptions) => string | undefined; - - /** - * Gets all cookies that were previously set with `cookies.set`, or from the request headers. - * @param opts the options, passed directly to `cookie.parseCookie`. See documentation [here](https://github.com/jshttp/cookie?tab=readme-ov-file#cookieparsecookiestr-options) - */ - getAll: (opts?: import('cookie').ParseOptions) => Array<{ name: string; value: string }>; - - /** - * Sets a cookie. This will add a `set-cookie` header to the response, but also make the cookie available via `cookies.get` or `cookies.getAll` during the current request. - * - * The `httpOnly` is `true` by default, as is `secure`, except during development, when it defaults to `false`. These must be explicitly disabled if you want cookies to be readable by client-side JavaScript and/or transmitted over HTTP. - * - * The `path` option is `'/'` by default. You can use relative paths, or set `path: ''` to make the cookie only available on the current path and its children. - * @param name the name of the cookie - * @param value the cookie value - * @param opts the options passed to `cookie.stringifySetCookie` with the SvelteKit defaults described above. See documentation [here](https://github.com/jshttp/cookie?tab=readme-ov-file#cookiestringifysetcookiesetcookieobj-options) - */ - set: (name: string, value: string, opts: import('cookie').SerializeOptions) => void; - - /** - * Deletes a cookie by setting its value to an empty string and setting the expiry date in the past. - * - * The `httpOnly` is `true` by default, as is `secure`, except during development, when it defaults to `false`. These must be explicitly disabled if you want cookies to be readable by client-side JavaScript and/or transmitted over HTTP. - * - * The `path` option is `'/'` by default. You can use relative paths, or set `path: ''` to make the cookie only available on the current path and its children. - * @param name the name of the cookie - * @param opts the options passed to `cookie.stringifySetCookie` with the SvelteKit defaults described above. See documentation [here](https://github.com/jshttp/cookie?tab=readme-ov-file#cookiestringifysetcookiesetcookieobj-options) - */ - delete: (name: string, opts: import('cookie').SerializeOptions) => void; - - /** - * Parses a single `Set-Cookie` header. This allows you to apply cookies received from an external source: - * - * ```js - * import { getRequestEvent } from '$app/server'; - * - * export async function GET() { - * const { cookies } = getRequestEvent(); - * - * const response = await fetch('...'); - * - * for (const str of response.headers.getSetCookie()) { - * const { name, value, ...options } = cookies.parse(str); - * cookies.set(name, value, { ...options, path: '/' }); - * } - * - * // ... - * } - * ``` - * - * Note the use of `headers.getSetCookie()`, which returns an array of cookie headers, _not_ `headers.get('set-cookie')` which returns a single comma-separated string. - */ - parse: typeof import('cookie').parseSetCookie; - - /** - * Serialize a cookie name-value pair into a `Set-Cookie` header string, but don't apply it to the response. - * - * The `httpOnly` is `true` by default, as is `secure`, except during development, when it defaults to `false`. These must be explicitly disabled if you want cookies to be readable by client-side JavaScript and/or transmitted over HTTP. - * - * The `path` option is `'/'` by default. You can use relative paths, or set `path: ''` to make the cookie only available on the current path and its children. - * @param name the name of the cookie - * @param value the cookie value - * @param opts the options passed to `cookie.stringifySetCookie` with the SvelteKit defaults described above. See documentation [here](https://github.com/jshttp/cookie?tab=readme-ov-file#cookiestringifysetcookiesetcookieobj-options) - */ - serialize: (name: string, value: string, opts: import('cookie').SerializeOptions) => string; -} - /** * A collection of functions that influence the environment during dev, build and prerendering */ @@ -989,7 +916,7 @@ export interface LoadEvent< * * Setting the same header multiple times (even in separate `load` functions) is an error — you can only set a given header once. * - * You cannot add a `set-cookie` header with `setHeaders` — use the [`cookies`](https://svelte.dev/docs/kit/@sveltejs-kit#Cookies) API in a server-only `load` function instead. + * You cannot add a `set-cookie` header with `setHeaders` — use the [`cookies`](https://svelte.dev/docs/kit/$app-server#Cookies) API in a server-only `load` function instead. * * `setHeaders` has no effect when a `load` function runs in the browser. */ @@ -1091,127 +1018,6 @@ export interface NavigationEvent< url: URL; } -export interface RequestEvent< - Params extends AppLayoutParams<'/'> = AppLayoutParams<'/'>, - RouteId extends AppRouteId | null = AppRouteId | null -> { - /** - * Get or set cookies related to the current request - */ - readonly cookies: Cookies; - /** - * `fetch` is equivalent to the [native `fetch` web API](https://developer.mozilla.org/en-US/docs/Web/API/fetch), with a few additional features: - * - * - It can be used to make credentialed requests on the server, as it inherits the `cookie` and `authorization` headers for the page request. - * - It can make relative requests on the server (ordinarily, `fetch` requires a URL with an origin when used in a server context). - * - Internal requests (e.g. for `+server.js` routes) go directly to the handler function when running on the server, without the overhead of an HTTP call. - * - During server-side rendering, the response will be captured and inlined into the rendered HTML by hooking into the `text` and `json` methods of the `Response` object. Note that headers will _not_ be serialized, unless explicitly included via [`filterSerializedResponseHeaders`](https://svelte.dev/docs/kit/hooks#handle) - * - During hydration, the response will be read from the HTML, guaranteeing consistency and preventing an additional network request. - * - * You can learn more about making credentialed requests with cookies [here](https://svelte.dev/docs/kit/load#Cookies). - */ - readonly fetch: typeof fetch; - /** - * The client's IP address, set by the adapter. - */ - readonly getClientAddress: () => string; - /** - * Contains custom data that was added to the request within the [`server handle hook`](https://svelte.dev/docs/kit/hooks#handle). - */ - readonly locals: App.Locals; - /** - * The parameters of the current route - e.g. for a route like `/blog/[slug]`, a `{ slug: string }` object. - * - * Inside `query` functions (including `query.batch` and `query.live`), accessing this property throws an error. - * Pass values from the page as arguments to the query instead. Inside `form` and `command` functions it relates to the page - * the remote function was called from, _not_ the URL of the endpoint SvelteKit creates for the remote function. Never use it - * to determine whether or not a user is authorized to access certain data, as these values are part of the request which could be manipulated. - */ - readonly params: Params; - /** - * Additional data made available through the adapter. - */ - readonly platform: Readonly | undefined; - /** - * The original request object. - */ - readonly request: Request; - /** - * Info about the current route. - */ - readonly route: { - /** - * The ID of the current route - e.g. for `src/routes/blog/[slug]`, it would be `/blog/[slug]`. It is `null` when no route is matched. - * - * Inside `query` functions (including `query.batch` and `query.live`), accessing this property throws an error. - * Pass values from the page as arguments to the query instead. Inside `form` and `command` functions it relates to the page - * the remote function was called from, _not_ the URL of the endpoint SvelteKit creates for the remote function. Never use it - * to determine whether or not a user is authorized to access certain data, as these values are part of the request which could be manipulated. - */ - id: RouteId; - }; - /** - * If you need to set headers for the response, you can do so using the this method. This is useful if you want the page to be cached, for example: - * - * ```js - * /// file: src/routes/blog/+page.js - * export async function load({ fetch, setHeaders }) { - * const url = `https://cms.example.com/articles.json`; - * const response = await fetch(url); - * - * setHeaders({ - * age: response.headers.get('age'), - * 'cache-control': response.headers.get('cache-control') - * }); - * - * return response.json(); - * } - * ``` - * - * Setting the same header multiple times (even in separate `load` functions) is an error — you can only set a given header once. - * - * You cannot add a `set-cookie` header with `setHeaders` — use the [`cookies`](https://svelte.dev/docs/kit/@sveltejs-kit#Cookies) API instead. - */ - readonly setHeaders: (headers: Record) => void; - /** - * The requested URL. - * - * Inside `query` functions (including `query.batch` and `query.live`), accessing this property throws an error. - * Pass values from the page as arguments to the query instead. Inside `form` and `command` functions it relates to the page - * the remote function was called from, _not_ the URL of the endpoint SvelteKit creates for the remote function. Never use it - * to determine whether or not a user is authorized to access certain data, as these values are part of the request which could be manipulated. - */ - readonly url: URL; - /** - * `true` if the request comes from the client asking for `+page/layout.server.js` data. The `url` property will be stripped of the internal information - * related to the data request in this case. Use this property instead if the distinction is important to you. - */ - readonly isDataRequest: boolean; - /** - * `true` for `+server.js` calls coming from SvelteKit without the overhead of actually making an HTTP request. This happens when you make same-origin `fetch` requests on the server. - */ - readonly isSubRequest: boolean; - - /** - * Access to spans for tracing. If tracing is not enabled, these spans will do nothing. - * @since 2.31.0 - */ - readonly tracing: { - /** Whether tracing is enabled. */ - enabled: boolean; - /** The root span for the request. This span is named `sveltekit.handle.root`. */ - root: Span; - /** The span associated with the current `handle` hook, `load` function, or form action. */ - current: Span; - }; - - /** - * `true` if the request comes from the client via a remote function. The `url` property will be stripped of the internal information - * related to the data request in this case. Use this property instead if the distinction is important to you. - */ - readonly isRemoteRequest: boolean; -} - /** * A `(event: RequestEvent) => Response` function exported from a `+server.js` file that corresponds to an HTTP verb (`GET`, `PUT`, `PATCH`, etc) and handles requests with that method. * diff --git a/packages/kit/src/exports/vite/dev/index.js b/packages/kit/src/exports/vite/dev/index.js index 024fb980046e..b856d4ac5333 100644 --- a/packages/kit/src/exports/vite/dev/index.js +++ b/packages/kit/src/exports/vite/dev/index.js @@ -1,4 +1,5 @@ -/** @import { RequestEvent, SSRManifest } from '@sveltejs/kit' */ +/** @import { SSRManifest } from '@sveltejs/kit' */ +/** @import { RequestEvent } from '$app/server' */ /** @import { EnvironmentModuleNode, ErrorPayload, ResolvedConfig, ViteDevServer } from 'vite' */ /** @import { ManifestData, PrerenderOption, RemoteChunk, ServerModule, SSRNode, UniversalNode, ValidatedConfig } from 'types' */ import process from 'node:process'; diff --git a/packages/kit/src/runtime/app/server/public.d.ts b/packages/kit/src/runtime/app/server/public.d.ts index db917dc1487b..fcbc7762f7b7 100644 --- a/packages/kit/src/runtime/app/server/public.d.ts +++ b/packages/kit/src/runtime/app/server/public.d.ts @@ -1,8 +1,207 @@ import { StandardSchemaV1 } from '@standard-schema/spec'; import { DeepPartial, IsAny, MaybePromise } from 'types'; +import { RouteId as AppRouteId, LayoutParams as AppLayoutParams } from '$app/types'; export * from './index.js'; +// @ts-ignore this is an optional peer dependency so could be missing. Written like this so dts-buddy preserves the ts-ignore +type Span = import('@opentelemetry/api').Span; + +export interface Cookies { + /** + * Gets a cookie that was previously set with `cookies.set`, or from the request headers. + * @param name the name of the cookie + * @param opts the options, passed directly to `cookie.parseCookie`. See documentation [here](https://github.com/jshttp/cookie?tab=readme-ov-file#cookieparsecookiestr-options) + */ + get: (name: string, opts?: import('cookie').ParseOptions) => string | undefined; + + /** + * Gets all cookies that were previously set with `cookies.set`, or from the request headers. + * @param opts the options, passed directly to `cookie.parseCookie`. See documentation [here](https://github.com/jshttp/cookie?tab=readme-ov-file#cookieparsecookiestr-options) + */ + getAll: (opts?: import('cookie').ParseOptions) => Array<{ name: string; value: string }>; + + /** + * Sets a cookie. This will add a `set-cookie` header to the response, but also make the cookie available via `cookies.get` or `cookies.getAll` during the current request. + * + * The `httpOnly` is `true` by default, as is `secure`, except during development, when it defaults to `false`. These must be explicitly disabled if you want cookies to be readable by client-side JavaScript and/or transmitted over HTTP. + * + * The `path` option is `'/'` by default. You can use relative paths, or set `path: ''` to make the cookie only available on the current path and its children. + * @param name the name of the cookie + * @param value the cookie value + * @param opts the options passed to `cookie.stringifySetCookie` with the SvelteKit defaults described above. See documentation [here](https://github.com/jshttp/cookie?tab=readme-ov-file#cookiestringifysetcookiesetcookieobj-options) + */ + set: (name: string, value: string, opts: import('cookie').SerializeOptions) => void; + + /** + * Deletes a cookie by setting its value to an empty string and setting the expiry date in the past. + * + * The `httpOnly` is `true` by default, as is `secure`, except during development, when it defaults to `false`. These must be explicitly disabled if you want cookies to be readable by client-side JavaScript and/or transmitted over HTTP. + * + * The `path` option is `'/'` by default. You can use relative paths, or set `path: ''` to make the cookie only available on the current path and its children. + * @param name the name of the cookie + * @param opts the options passed to `cookie.stringifySetCookie` with the SvelteKit defaults described above. See documentation [here](https://github.com/jshttp/cookie?tab=readme-ov-file#cookiestringifysetcookiesetcookieobj-options) + */ + delete: (name: string, opts: import('cookie').SerializeOptions) => void; + + /** + * Parses a single `Set-Cookie` header. This allows you to apply cookies received from an external source: + * + * ```js + * import { getRequestEvent } from '$app/server'; + * + * export async function GET() { + * const { cookies } = getRequestEvent(); + * + * const response = await fetch('...'); + * + * for (const str of response.headers.getSetCookie()) { + * const { name, value, ...options } = cookies.parse(str); + * cookies.set(name, value, { ...options, path: '/' }); + * } + * + * // ... + * } + * ``` + * + * Note the use of `headers.getSetCookie()`, which returns an array of cookie headers, _not_ `headers.get('set-cookie')` which returns a single comma-separated string. + */ + parse: typeof import('cookie').parseSetCookie; + + /** + * Serialize a cookie name-value pair into a `Set-Cookie` header string, but don't apply it to the response. + * + * The `httpOnly` is `true` by default, as is `secure`, except during development, when it defaults to `false`. These must be explicitly disabled if you want cookies to be readable by client-side JavaScript and/or transmitted over HTTP. + * + * The `path` option is `'/'` by default. You can use relative paths, or set `path: ''` to make the cookie only available on the current path and its children. + * @param name the name of the cookie + * @param value the cookie value + * @param opts the options passed to `cookie.stringifySetCookie` with the SvelteKit defaults described above. See documentation [here](https://github.com/jshttp/cookie?tab=readme-ov-file#cookiestringifysetcookiesetcookieobj-options) + */ + serialize: (name: string, value: string, opts: import('cookie').SerializeOptions) => string; +} + +export interface RequestEvent< + Params extends AppLayoutParams<'/'> = AppLayoutParams<'/'>, + RouteId extends AppRouteId | null = AppRouteId | null +> { + /** + * Get or set cookies related to the current request + */ + readonly cookies: Cookies; + /** + * `fetch` is equivalent to the [native `fetch` web API](https://developer.mozilla.org/en-US/docs/Web/API/fetch), with a few additional features: + * + * - It can be used to make credentialed requests on the server, as it inherits the `cookie` and `authorization` headers for the page request. + * - It can make relative requests on the server (ordinarily, `fetch` requires a URL with an origin when used in a server context). + * - Internal requests (e.g. for `+server.js` routes) go directly to the handler function when running on the server, without the overhead of an HTTP call. + * - During server-side rendering, the response will be captured and inlined into the rendered HTML by hooking into the `text` and `json` methods of the `Response` object. Note that headers will _not_ be serialized, unless explicitly included via [`filterSerializedResponseHeaders`](https://svelte.dev/docs/kit/hooks#handle) + * - During hydration, the response will be read from the HTML, guaranteeing consistency and preventing an additional network request. + * + * You can learn more about making credentialed requests with cookies [here](https://svelte.dev/docs/kit/load#Cookies). + */ + readonly fetch: typeof fetch; + /** + * The client's IP address, set by the adapter. + */ + readonly getClientAddress: () => string; + /** + * Contains custom data that was added to the request within the [`server handle hook`](https://svelte.dev/docs/kit/hooks#handle). + */ + readonly locals: App.Locals; + /** + * The parameters of the current route - e.g. for a route like `/blog/[slug]`, a `{ slug: string }` object. + * + * Inside `query` functions (including `query.batch` and `query.live`), accessing this property throws an error. + * Pass values from the page as arguments to the query instead. Inside `form` and `command` functions it relates to the page + * the remote function was called from, _not_ the URL of the endpoint SvelteKit creates for the remote function. Never use it + * to determine whether or not a user is authorized to access certain data, as these values are part of the request which could be manipulated. + */ + readonly params: Params; + /** + * Additional data made available through the adapter. + */ + readonly platform: Readonly | undefined; + /** + * The original request object. + */ + readonly request: Request; + /** + * Info about the current route. + */ + readonly route: { + /** + * The ID of the current route - e.g. for `src/routes/blog/[slug]`, it would be `/blog/[slug]`. It is `null` when no route is matched. + * + * Inside `query` functions (including `query.batch` and `query.live`), accessing this property throws an error. + * Pass values from the page as arguments to the query instead. Inside `form` and `command` functions it relates to the page + * the remote function was called from, _not_ the URL of the endpoint SvelteKit creates for the remote function. Never use it + * to determine whether or not a user is authorized to access certain data, as these values are part of the request which could be manipulated. + */ + id: RouteId; + }; + /** + * If you need to set headers for the response, you can do so using the this method. This is useful if you want the page to be cached, for example: + * + * ```js + * /// file: src/routes/blog/+page.js + * export async function load({ fetch, setHeaders }) { + * const url = `https://cms.example.com/articles.json`; + * const response = await fetch(url); + * + * setHeaders({ + * age: response.headers.get('age'), + * 'cache-control': response.headers.get('cache-control') + * }); + * + * return response.json(); + * } + * ``` + * + * Setting the same header multiple times (even in separate `load` functions) is an error — you can only set a given header once. + * + * You cannot add a `set-cookie` header with `setHeaders` — use the [`cookies`](https://svelte.dev/docs/kit/$app-server#Cookies) API instead. + */ + readonly setHeaders: (headers: Record) => void; + /** + * The requested URL. + * + * Inside `query` functions (including `query.batch` and `query.live`), accessing this property throws an error. + * Pass values from the page as arguments to the query instead. Inside `form` and `command` functions it relates to the page + * the remote function was called from, _not_ the URL of the endpoint SvelteKit creates for the remote function. Never use it + * to determine whether or not a user is authorized to access certain data, as these values are part of the request which could be manipulated. + */ + readonly url: URL; + /** + * `true` if the request comes from the client asking for `+page/layout.server.js` data. The `url` property will be stripped of the internal information + * related to the data request in this case. Use this property instead if the distinction is important to you. + */ + readonly isDataRequest: boolean; + /** + * `true` for `+server.js` calls coming from SvelteKit without the overhead of actually making an HTTP request. This happens when you make same-origin `fetch` requests on the server. + */ + readonly isSubRequest: boolean; + + /** + * Access to spans for tracing. If tracing is not enabled, these spans will do nothing. + * @since 2.31.0 + */ + readonly tracing: { + /** Whether tracing is enabled. */ + enabled: boolean; + /** The root span for the request. This span is named `sveltekit.handle.root`. */ + root: Span; + /** The span associated with the current `handle` hook, `load` function, or form action. */ + current: Span; + }; + + /** + * `true` if the request comes from the client via a remote function. The `url` property will be stripped of the internal information + * related to the data request in this case. Use this property instead if the distinction is important to you. + */ + readonly isRemoteRequest: boolean; +} + // If T is unknown or has an index signature, the types below will recurse indefinitely and create giant unions that TS can't handle type WillRecurseIndefinitely = unknown extends T ? true : string extends keyof T ? true : false; diff --git a/packages/kit/src/runtime/app/server/remote/prerender.spec.js b/packages/kit/src/runtime/app/server/remote/prerender.spec.js index 83de8b14da4b..284e69cb2b7b 100644 --- a/packages/kit/src/runtime/app/server/remote/prerender.spec.js +++ b/packages/kit/src/runtime/app/server/remote/prerender.spec.js @@ -1,4 +1,4 @@ -/** @import { RequestEvent } from '@sveltejs/kit' */ +/** @import { RequestEvent } from '$app/server' */ /** @import { RequestState } from 'types' */ import { expect, test, vi } from 'vitest'; import { HandledHttpError, ValidationError } from '@sveltejs/kit/internal'; diff --git a/packages/kit/src/runtime/app/server/remote/query.js b/packages/kit/src/runtime/app/server/remote/query.js index 18410118ca48..9acdeae5c112 100644 --- a/packages/kit/src/runtime/app/server/remote/query.js +++ b/packages/kit/src/runtime/app/server/remote/query.js @@ -1,5 +1,4 @@ -/** @import { RequestEvent } from '@sveltejs/kit' */ -/** @import { RemoteLiveQuery, RemoteLiveQueryFunction, RemoteQuery, RemoteQueryFunction } from '$app/server' */ +/** @import { RemoteLiveQuery, RemoteLiveQueryFunction, RemoteQuery, RemoteQueryFunction, RequestEvent } from '$app/server' */ /** @import { RemoteInternals, MaybePromise, RequestState, RemoteQueryLiveInternals, RemoteQueryBatchInternals, RemoteQueryInternals, RemoteLiveQueryUserFunctionReturnType } from 'types' */ /** @import { StandardSchemaV1 } from '@standard-schema/spec' */ import { get_request_store } from '@sveltejs/kit/internal/server'; diff --git a/packages/kit/src/runtime/app/server/remote/shared.js b/packages/kit/src/runtime/app/server/remote/shared.js index ad74bcbcc04f..bbba4f3c8b57 100644 --- a/packages/kit/src/runtime/app/server/remote/shared.js +++ b/packages/kit/src/runtime/app/server/remote/shared.js @@ -1,4 +1,4 @@ -/** @import { RequestEvent } from '@sveltejs/kit' */ +/** @import { RequestEvent } from '$app/server' */ /** @import { MaybePromise, RequestState, RemoteInternals, RequestStore, RemoteLiveQueryUserFunctionReturnType } from 'types' */ import { error } from '@sveltejs/kit'; import { ValidationError } from '@sveltejs/kit/internal'; diff --git a/packages/kit/src/runtime/server/cookie.js b/packages/kit/src/runtime/server/cookie.js index e0f2f20f7abe..006545279808 100644 --- a/packages/kit/src/runtime/server/cookie.js +++ b/packages/kit/src/runtime/server/cookie.js @@ -76,11 +76,11 @@ export function get_cookies(request, url) { secure: !__SVELTEKIT_DEV__ && !(url.hostname === 'localhost' && url.protocol === 'http:') }; - /** @type {import('@sveltejs/kit').Cookies} */ + /** @type {import('$app/server').Cookies} */ const cookies = { // The JSDoc param annotations appearing below for get, set and delete // are necessary to expose the `cookie` library types to - // typescript users. `@type {import('@sveltejs/kit').Cookies}` above is not + // typescript users. `@type {import('$app/server').Cookies}` above is not // sufficient to do so. get(name, opts) { diff --git a/packages/kit/src/runtime/server/data/index.js b/packages/kit/src/runtime/server/data/index.js index 749cb9848709..11b49062d34a 100644 --- a/packages/kit/src/runtime/server/data/index.js +++ b/packages/kit/src/runtime/server/data/index.js @@ -10,7 +10,7 @@ import { text_encoder } from '../../utils.js'; import { with_version_header } from '../utils.js'; /** - * @param {import('@sveltejs/kit').RequestEvent} event + * @param {import('$app/server').RequestEvent} event * @param {import('types').RequestState} state * @param {import('types').SSRRoute} route * @param {import('types').SSROptions} options diff --git a/packages/kit/src/runtime/server/endpoint.js b/packages/kit/src/runtime/server/endpoint.js index 4d640769dcc4..03a448129385 100644 --- a/packages/kit/src/runtime/server/endpoint.js +++ b/packages/kit/src/runtime/server/endpoint.js @@ -5,7 +5,7 @@ import { negotiate } from '../../utils/http.js'; import { method_not_allowed } from './utils.js'; /** - * @param {import('@sveltejs/kit').RequestEvent} event + * @param {import('$app/server').RequestEvent} event * @param {import('types').RequestState} state * @param {import('types').SSREndpoint} mod * @returns {Promise} @@ -42,7 +42,7 @@ export async function render_endpoint(event, state, mod) { try { const response = await with_request_store({ event, state }, () => - handler(/** @type {import('@sveltejs/kit').RequestEvent>} */ (event)) + handler(/** @type {import('$app/server').RequestEvent>} */ (event)) ); if (!(response instanceof Response)) { @@ -89,7 +89,7 @@ export async function render_endpoint(event, state, mod) { } /** - * @param {import('@sveltejs/kit').RequestEvent} event + * @param {import('$app/server').RequestEvent} event */ export function is_endpoint_request(event) { const { method, headers } = event.request; diff --git a/packages/kit/src/runtime/server/errors.js b/packages/kit/src/runtime/server/errors.js index 377627a4add0..a25a3596f4f2 100644 --- a/packages/kit/src/runtime/server/errors.js +++ b/packages/kit/src/runtime/server/errors.js @@ -12,7 +12,7 @@ import { fix_stack_trace } from './internal.js'; import { escape_html } from '../../utils/escape.js'; /** - * @param {import('@sveltejs/kit').RequestEvent} event + * @param {import('$app/server').RequestEvent} event * @param {import('types').RequestState} state * @param {import('types').SSROptions} options * @param {unknown} error @@ -37,7 +37,7 @@ export async function handle_fatal_error(event, state, options, error) { } /** - * @param {import('@sveltejs/kit').RequestEvent} event + * @param {import('$app/server').RequestEvent} event * @param {import('types').RequestState} state * @param {import('types').SSROptions} options * @param {any} error diff --git a/packages/kit/src/runtime/server/fetch.js b/packages/kit/src/runtime/server/fetch.js index 262f7f69b766..a486c5ef38dd 100644 --- a/packages/kit/src/runtime/server/fetch.js +++ b/packages/kit/src/runtime/server/fetch.js @@ -8,7 +8,7 @@ import { fork_state_for_subrequest } from './state.js'; /** * @param {{ - * event: import('@sveltejs/kit').RequestEvent; + * event: import('$app/server').RequestEvent; * options: import('types').SSROptions; * manifest: import('@sveltejs/kit').SSRManifest; * state: import('types').RequestState; diff --git a/packages/kit/src/runtime/server/page/actions.js b/packages/kit/src/runtime/server/page/actions.js index 00e3a6dc0e64..054844409025 100644 --- a/packages/kit/src/runtime/server/page/actions.js +++ b/packages/kit/src/runtime/server/page/actions.js @@ -1,4 +1,5 @@ -/** @import { RequestEvent, Actions } from '@sveltejs/kit' */ +/** @import { Actions } from '@sveltejs/kit' */ +/** @import { RequestEvent } from '$app/server' */ /** @import { ActionResult } from '$app/forms' */ /** @import { SSROptions, SSRNode, ServerNode } from 'types' */ import { DEV } from 'esm-env'; diff --git a/packages/kit/src/runtime/server/page/data_serializer.js b/packages/kit/src/runtime/server/page/data_serializer.js index 700aa1f277f1..578f2aacc984 100644 --- a/packages/kit/src/runtime/server/page/data_serializer.js +++ b/packages/kit/src/runtime/server/page/data_serializer.js @@ -8,7 +8,7 @@ import { encoders } from '#app/internal/transport'; /** * If the serialized data contains promises, `chunks` will be an * async iterable containing their resolutions - * @param {import('@sveltejs/kit').RequestEvent} event + * @param {import('$app/server').RequestEvent} event * @param {import('types').RequestState} state * @param {import('types').SSROptions} options * @returns {import('./types.js').ServerDataSerializer} @@ -125,7 +125,7 @@ export function server_data_serializer(event, state, options) { /** * If the serialized data contains promises, `chunks` will be an * async iterable containing their resolutions - * @param {import('@sveltejs/kit').RequestEvent} event + * @param {import('$app/server').RequestEvent} event * @param {import('types').RequestState} state * @param {import('types').SSROptions} options * @returns {import('./types.js').ServerDataSerializerJson} diff --git a/packages/kit/src/runtime/server/page/index.js b/packages/kit/src/runtime/server/page/index.js index c6c7d62579f4..870ef2597f4e 100644 --- a/packages/kit/src/runtime/server/page/index.js +++ b/packages/kit/src/runtime/server/page/index.js @@ -1,5 +1,6 @@ /** @import { Component } from 'svelte' */ -/** @import { RequestEvent, SSRManifest } from '@sveltejs/kit' */ +/** @import { SSRManifest } from '@sveltejs/kit' */ +/** @import { RequestEvent } from '$app/server' */ /** @import { ActionResult } from '$app/forms' */ /** @import { PageNodeIndexes, RequestState, RequiredResolveOptions, ServerDataNode, SSRNode, SSROptions } from 'types' */ import { text } from '@sveltejs/kit'; diff --git a/packages/kit/src/runtime/server/page/load_data.js b/packages/kit/src/runtime/server/page/load_data.js index f2efa89f1f4c..c35ef1868c49 100644 --- a/packages/kit/src/runtime/server/page/load_data.js +++ b/packages/kit/src/runtime/server/page/load_data.js @@ -10,7 +10,7 @@ import { get_node_type } from '../utils.js'; /** * Calls the user's server `load` function. * @param {{ - * event: import('@sveltejs/kit').RequestEvent; + * event: import('$app/server').RequestEvent; * state: import('types').RequestState; * node: import('types').SSRNode | undefined; * parent: () => Promise>; @@ -191,7 +191,7 @@ export async function load_server_data({ event, state, node, parent }) { /** * Calls the user's `load` function. * @param {{ - * event: import('@sveltejs/kit').RequestEvent; + * event: import('$app/server').RequestEvent; * state: import('types').RequestState; * fetched: import('./types.js').Fetched[]; * node: import('types').SSRNode | undefined; @@ -256,7 +256,7 @@ export async function load_data({ } /** - * @param {Pick} event + * @param {Pick} event * @param {import('types').PrerenderOptions | undefined} prerendering * @param {import('./types.js').Fetched[]} fetched * @param {boolean} csr diff --git a/packages/kit/src/runtime/server/page/load_data.spec.js b/packages/kit/src/runtime/server/page/load_data.spec.js index 3a36df2c85e0..70aa452cd103 100644 --- a/packages/kit/src/runtime/server/page/load_data.spec.js +++ b/packages/kit/src/runtime/server/page/load_data.spec.js @@ -2,7 +2,7 @@ import { assert, expect, test } from 'vitest'; import { create_universal_fetch } from './load_data.js'; /** - * @param {Partial>} event + * @param {Partial>} event */ function create_fetch(event) { // @ts-expect-error @@ -15,7 +15,7 @@ function create_fetch(event) { // @ts-expect-error event.url ||= new URL('https://domain-a.com'); return create_universal_fetch( - /** @type {Pick} */ ( + /** @type {Pick} */ ( event ), undefined, diff --git a/packages/kit/src/runtime/server/page/render.js b/packages/kit/src/runtime/server/page/render.js index 6b4285b54c36..a875d63b4cb4 100644 --- a/packages/kit/src/runtime/server/page/render.js +++ b/packages/kit/src/runtime/server/page/render.js @@ -40,7 +40,7 @@ import { has_custom_transporters, uneval } from '#app/internal/transport'; * page_config: { ssr: boolean; csr: boolean }; * status: number; * error: App.Error | null; - * event: import('@sveltejs/kit').RequestEvent; + * event: import('$app/server').RequestEvent; * state: import('types').RequestState; * resolve_opts: import('types').RequiredResolveOptions; * action_result?: import('$app/forms').ActionResult; diff --git a/packages/kit/src/runtime/server/page/respond_with_error.js b/packages/kit/src/runtime/server/page/respond_with_error.js index 97752d405322..f50f0817f5ae 100644 --- a/packages/kit/src/runtime/server/page/respond_with_error.js +++ b/packages/kit/src/runtime/server/page/respond_with_error.js @@ -12,7 +12,7 @@ import { server_data_serializer } from './data_serializer.js'; /** * @param {{ - * event: import('@sveltejs/kit').RequestEvent; + * event: import('$app/server').RequestEvent; * state: import('types').RequestState; * options: import('types').SSROptions; * manifest: import('@sveltejs/kit').SSRManifest; diff --git a/packages/kit/src/runtime/server/remote-functions.js b/packages/kit/src/runtime/server/remote-functions.js index 43674bc0abf9..af528e529453 100644 --- a/packages/kit/src/runtime/server/remote-functions.js +++ b/packages/kit/src/runtime/server/remote-functions.js @@ -1,5 +1,5 @@ -/** @import { RequestEvent, SSRManifest } from '@sveltejs/kit' */ -/** @import { RemoteForm } from '$app/server' */ +/** @import { SSRManifest } from '@sveltejs/kit' */ +/** @import { RemoteForm, RequestEvent } from '$app/server' */ /** @import { ActionResult } from '$app/forms' */ /** @import { RemoteFormInternals, RemoteFunctionData, RemoteFunctionResponse, RemoteInternals, RequestState, SSROptions } from 'types' */ diff --git a/packages/kit/src/runtime/server/respond.js b/packages/kit/src/runtime/server/respond.js index 8121051104cb..079d5c810de6 100644 --- a/packages/kit/src/runtime/server/respond.js +++ b/packages/kit/src/runtime/server/respond.js @@ -183,7 +183,7 @@ export async function internal_respond(request, options, manifest, state) { url ); - /** @type {import('@sveltejs/kit').RequestEvent} */ + /** @type {import('$app/server').RequestEvent} */ const event = { cookies, // @ts-expect-error `fetch` needs to be created after the `event` itself @@ -574,7 +574,7 @@ export async function internal_respond(request, options, manifest, state) { } /** - * @param {import('@sveltejs/kit').RequestEvent} event + * @param {import('$app/server').RequestEvent} event * @param {PageNodes | undefined} page_nodes * @param {import('@sveltejs/kit/hooks').ResolveOptions} [opts] */ diff --git a/packages/kit/src/runtime/server/utils.js b/packages/kit/src/runtime/server/utils.js index 990decb06821..59c2a5777f3f 100644 --- a/packages/kit/src/runtime/server/utils.js +++ b/packages/kit/src/runtime/server/utils.js @@ -59,7 +59,7 @@ export function with_version_header(response) { } /** - * @param {import('@sveltejs/kit').RequestEvent} event + * @param {import('$app/server').RequestEvent} event * @param {Error & { path: string }} error */ export function clarify_devalue_error(event, error) { diff --git a/packages/kit/src/types/internal.d.ts b/packages/kit/src/types/internal.d.ts index 4dd7e46e3d20..81be8bfd0768 100644 --- a/packages/kit/src/types/internal.d.ts +++ b/packages/kit/src/types/internal.d.ts @@ -8,11 +8,10 @@ import { Server, ServerInitOptions, Actions, - RequestEvent, SSRManifest, Emulator } from '@sveltejs/kit'; -import { RemoteFormIssue, RemoteQuery, RemoteLiveQuery } from '$app/server'; +import { RemoteFormIssue, RemoteQuery, RemoteLiveQuery, RequestEvent } from '$app/server'; import { ClientInit, Handle, diff --git a/packages/kit/test/types/request-event.test.ts b/packages/kit/test/types/request-event.test.ts index 05833c0b6e40..06cd49b42e53 100644 --- a/packages/kit/test/types/request-event.test.ts +++ b/packages/kit/test/types/request-event.test.ts @@ -1,4 +1,4 @@ -import { RequestEvent } from '@sveltejs/kit'; +import { RequestEvent } from '$app/server'; declare const event: RequestEvent; diff --git a/packages/kit/types/index.d.ts b/packages/kit/types/index.d.ts index ac3a6ed1dc86..9801af5bd465 100644 --- a/packages/kit/types/index.d.ts +++ b/packages/kit/types/index.d.ts @@ -4,6 +4,7 @@ declare module '@sveltejs/kit' { import type { SvelteConfig } from '@sveltejs/vite-plugin-svelte'; import type { Plugin } from 'vite'; + import type { RequestEvent } from '$app/server'; import type { RouteId as AppRouteId, LayoutParams as AppLayoutParams } from '$app/types'; import type { StandardSchemaV1 } from '@standard-schema/spec'; // @ts-ignore this is an optional peer dependency so could be missing. Written like this so dts-buddy preserves the ts-ignore @@ -255,80 +256,6 @@ declare module '@sveltejs/kit' { [key: string]: any; } - export interface Cookies { - /** - * Gets a cookie that was previously set with `cookies.set`, or from the request headers. - * @param name the name of the cookie - * @param opts the options, passed directly to `cookie.parseCookie`. See documentation [here](https://github.com/jshttp/cookie?tab=readme-ov-file#cookieparsecookiestr-options) - */ - get: (name: string, opts?: import('cookie').ParseOptions) => string | undefined; - - /** - * Gets all cookies that were previously set with `cookies.set`, or from the request headers. - * @param opts the options, passed directly to `cookie.parseCookie`. See documentation [here](https://github.com/jshttp/cookie?tab=readme-ov-file#cookieparsecookiestr-options) - */ - getAll: (opts?: import('cookie').ParseOptions) => Array<{ name: string; value: string }>; - - /** - * Sets a cookie. This will add a `set-cookie` header to the response, but also make the cookie available via `cookies.get` or `cookies.getAll` during the current request. - * - * The `httpOnly` is `true` by default, as is `secure`, except during development, when it defaults to `false`. These must be explicitly disabled if you want cookies to be readable by client-side JavaScript and/or transmitted over HTTP. - * - * The `path` option is `'/'` by default. You can use relative paths, or set `path: ''` to make the cookie only available on the current path and its children. - * @param name the name of the cookie - * @param value the cookie value - * @param opts the options passed to `cookie.stringifySetCookie` with the SvelteKit defaults described above. See documentation [here](https://github.com/jshttp/cookie?tab=readme-ov-file#cookiestringifysetcookiesetcookieobj-options) - */ - set: (name: string, value: string, opts: import('cookie').SerializeOptions) => void; - - /** - * Deletes a cookie by setting its value to an empty string and setting the expiry date in the past. - * - * The `httpOnly` is `true` by default, as is `secure`, except during development, when it defaults to `false`. These must be explicitly disabled if you want cookies to be readable by client-side JavaScript and/or transmitted over HTTP. - * - * The `path` option is `'/'` by default. You can use relative paths, or set `path: ''` to make the cookie only available on the current path and its children. - * @param name the name of the cookie - * @param opts the options passed to `cookie.stringifySetCookie` with the SvelteKit defaults described above. See documentation [here](https://github.com/jshttp/cookie?tab=readme-ov-file#cookiestringifysetcookiesetcookieobj-options) - */ - delete: (name: string, opts: import('cookie').SerializeOptions) => void; - - /** - * Parses a single `Set-Cookie` header. This allows you to apply cookies received from an external source: - * - * ```js - * import { getRequestEvent } from '$app/server'; - * - * export async function GET() { - * const { cookies } = getRequestEvent(); - * - * const response = await fetch('...'); - * - * for (const str of response.headers.getSetCookie()) { - * const { name, value, ...options } = cookies.parse(str); - * cookies.set(name, value, { ...options, path: '/' }); - * } - * - * // ... - * } - * ``` - * - * Note the use of `headers.getSetCookie()`, which returns an array of cookie headers, _not_ `headers.get('set-cookie')` which returns a single comma-separated string. - */ - parse: typeof import('cookie').parseSetCookie; - - /** - * Serialize a cookie name-value pair into a `Set-Cookie` header string, but don't apply it to the response. - * - * The `httpOnly` is `true` by default, as is `secure`, except during development, when it defaults to `false`. These must be explicitly disabled if you want cookies to be readable by client-side JavaScript and/or transmitted over HTTP. - * - * The `path` option is `'/'` by default. You can use relative paths, or set `path: ''` to make the cookie only available on the current path and its children. - * @param name the name of the cookie - * @param value the cookie value - * @param opts the options passed to `cookie.stringifySetCookie` with the SvelteKit defaults described above. See documentation [here](https://github.com/jshttp/cookie?tab=readme-ov-file#cookiestringifysetcookiesetcookieobj-options) - */ - serialize: (name: string, value: string, opts: import('cookie').SerializeOptions) => string; - } - /** * A collection of functions that influence the environment during dev, build and prerendering */ @@ -967,7 +894,7 @@ declare module '@sveltejs/kit' { * * Setting the same header multiple times (even in separate `load` functions) is an error — you can only set a given header once. * - * You cannot add a `set-cookie` header with `setHeaders` — use the [`cookies`](https://svelte.dev/docs/kit/@sveltejs-kit#Cookies) API in a server-only `load` function instead. + * You cannot add a `set-cookie` header with `setHeaders` — use the [`cookies`](https://svelte.dev/docs/kit/$app-server#Cookies) API in a server-only `load` function instead. * * `setHeaders` has no effect when a `load` function runs in the browser. */ @@ -1069,127 +996,6 @@ declare module '@sveltejs/kit' { url: URL; } - export interface RequestEvent< - Params extends AppLayoutParams<'/'> = AppLayoutParams<'/'>, - RouteId extends AppRouteId | null = AppRouteId | null - > { - /** - * Get or set cookies related to the current request - */ - readonly cookies: Cookies; - /** - * `fetch` is equivalent to the [native `fetch` web API](https://developer.mozilla.org/en-US/docs/Web/API/fetch), with a few additional features: - * - * - It can be used to make credentialed requests on the server, as it inherits the `cookie` and `authorization` headers for the page request. - * - It can make relative requests on the server (ordinarily, `fetch` requires a URL with an origin when used in a server context). - * - Internal requests (e.g. for `+server.js` routes) go directly to the handler function when running on the server, without the overhead of an HTTP call. - * - During server-side rendering, the response will be captured and inlined into the rendered HTML by hooking into the `text` and `json` methods of the `Response` object. Note that headers will _not_ be serialized, unless explicitly included via [`filterSerializedResponseHeaders`](https://svelte.dev/docs/kit/hooks#handle) - * - During hydration, the response will be read from the HTML, guaranteeing consistency and preventing an additional network request. - * - * You can learn more about making credentialed requests with cookies [here](https://svelte.dev/docs/kit/load#Cookies). - */ - readonly fetch: typeof fetch; - /** - * The client's IP address, set by the adapter. - */ - readonly getClientAddress: () => string; - /** - * Contains custom data that was added to the request within the [`server handle hook`](https://svelte.dev/docs/kit/hooks#handle). - */ - readonly locals: App.Locals; - /** - * The parameters of the current route - e.g. for a route like `/blog/[slug]`, a `{ slug: string }` object. - * - * Inside `query` functions (including `query.batch` and `query.live`), accessing this property throws an error. - * Pass values from the page as arguments to the query instead. Inside `form` and `command` functions it relates to the page - * the remote function was called from, _not_ the URL of the endpoint SvelteKit creates for the remote function. Never use it - * to determine whether or not a user is authorized to access certain data, as these values are part of the request which could be manipulated. - */ - readonly params: Params; - /** - * Additional data made available through the adapter. - */ - readonly platform: Readonly | undefined; - /** - * The original request object. - */ - readonly request: Request; - /** - * Info about the current route. - */ - readonly route: { - /** - * The ID of the current route - e.g. for `src/routes/blog/[slug]`, it would be `/blog/[slug]`. It is `null` when no route is matched. - * - * Inside `query` functions (including `query.batch` and `query.live`), accessing this property throws an error. - * Pass values from the page as arguments to the query instead. Inside `form` and `command` functions it relates to the page - * the remote function was called from, _not_ the URL of the endpoint SvelteKit creates for the remote function. Never use it - * to determine whether or not a user is authorized to access certain data, as these values are part of the request which could be manipulated. - */ - id: RouteId; - }; - /** - * If you need to set headers for the response, you can do so using the this method. This is useful if you want the page to be cached, for example: - * - * ```js - * /// file: src/routes/blog/+page.js - * export async function load({ fetch, setHeaders }) { - * const url = `https://cms.example.com/articles.json`; - * const response = await fetch(url); - * - * setHeaders({ - * age: response.headers.get('age'), - * 'cache-control': response.headers.get('cache-control') - * }); - * - * return response.json(); - * } - * ``` - * - * Setting the same header multiple times (even in separate `load` functions) is an error — you can only set a given header once. - * - * You cannot add a `set-cookie` header with `setHeaders` — use the [`cookies`](https://svelte.dev/docs/kit/@sveltejs-kit#Cookies) API instead. - */ - readonly setHeaders: (headers: Record) => void; - /** - * The requested URL. - * - * Inside `query` functions (including `query.batch` and `query.live`), accessing this property throws an error. - * Pass values from the page as arguments to the query instead. Inside `form` and `command` functions it relates to the page - * the remote function was called from, _not_ the URL of the endpoint SvelteKit creates for the remote function. Never use it - * to determine whether or not a user is authorized to access certain data, as these values are part of the request which could be manipulated. - */ - readonly url: URL; - /** - * `true` if the request comes from the client asking for `+page/layout.server.js` data. The `url` property will be stripped of the internal information - * related to the data request in this case. Use this property instead if the distinction is important to you. - */ - readonly isDataRequest: boolean; - /** - * `true` for `+server.js` calls coming from SvelteKit without the overhead of actually making an HTTP request. This happens when you make same-origin `fetch` requests on the server. - */ - readonly isSubRequest: boolean; - - /** - * Access to spans for tracing. If tracing is not enabled, these spans will do nothing. - * @since 2.31.0 - */ - readonly tracing: { - /** Whether tracing is enabled. */ - enabled: boolean; - /** The root span for the request. This span is named `sveltekit.handle.root`. */ - root: Span; - /** The span associated with the current `handle` hook, `load` function, or form action. */ - current: Span; - }; - - /** - * `true` if the request comes from the client via a remote function. The `url` property will be stripped of the internal information - * related to the data request in this case. Use this property instead if the distinction is important to you. - */ - readonly isRemoteRequest: boolean; - } - /** * A `(event: RequestEvent) => Response` function exported from a `+server.js` file that corresponds to an HTTP verb (`GET`, `PUT`, `PATCH`, etc) and handles requests with that method. * @@ -1897,7 +1703,8 @@ declare module '@sveltejs/kit/env' { declare module '@sveltejs/kit/hooks' { import type { StandardSchemaV1 } from '@standard-schema/spec'; - import type { NavigationEvent, RequestEvent } from '@sveltejs/kit'; + import type { NavigationEvent } from '@sveltejs/kit'; + import type { RequestEvent } from '$app/server'; /** * The [`handle`](https://svelte.dev/docs/kit/hooks#handle) hook runs every time the SvelteKit server receives a [request](https://svelte.dev/docs/kit/web-standards#Fetch-APIs-Request) and * determines the [response](https://svelte.dev/docs/kit/web-standards#Fetch-APIs-Response). @@ -2871,7 +2678,205 @@ declare module '$app/paths' { declare module '$app/server' { import type { StandardSchemaV1 } from '@standard-schema/spec'; - import type { RequestEvent } from '@sveltejs/kit'; + import type { RouteId as AppRouteId, LayoutParams as AppLayoutParams } from '$app/types'; + // @ts-ignore this is an optional peer dependency so could be missing. Written like this so dts-buddy preserves the ts-ignore + type Span = import('@opentelemetry/api').Span; + + export interface Cookies { + /** + * Gets a cookie that was previously set with `cookies.set`, or from the request headers. + * @param name the name of the cookie + * @param opts the options, passed directly to `cookie.parseCookie`. See documentation [here](https://github.com/jshttp/cookie?tab=readme-ov-file#cookieparsecookiestr-options) + */ + get: (name: string, opts?: import('cookie').ParseOptions) => string | undefined; + + /** + * Gets all cookies that were previously set with `cookies.set`, or from the request headers. + * @param opts the options, passed directly to `cookie.parseCookie`. See documentation [here](https://github.com/jshttp/cookie?tab=readme-ov-file#cookieparsecookiestr-options) + */ + getAll: (opts?: import('cookie').ParseOptions) => Array<{ name: string; value: string }>; + + /** + * Sets a cookie. This will add a `set-cookie` header to the response, but also make the cookie available via `cookies.get` or `cookies.getAll` during the current request. + * + * The `httpOnly` is `true` by default, as is `secure`, except during development, when it defaults to `false`. These must be explicitly disabled if you want cookies to be readable by client-side JavaScript and/or transmitted over HTTP. + * + * The `path` option is `'/'` by default. You can use relative paths, or set `path: ''` to make the cookie only available on the current path and its children. + * @param name the name of the cookie + * @param value the cookie value + * @param opts the options passed to `cookie.stringifySetCookie` with the SvelteKit defaults described above. See documentation [here](https://github.com/jshttp/cookie?tab=readme-ov-file#cookiestringifysetcookiesetcookieobj-options) + */ + set: (name: string, value: string, opts: import('cookie').SerializeOptions) => void; + + /** + * Deletes a cookie by setting its value to an empty string and setting the expiry date in the past. + * + * The `httpOnly` is `true` by default, as is `secure`, except during development, when it defaults to `false`. These must be explicitly disabled if you want cookies to be readable by client-side JavaScript and/or transmitted over HTTP. + * + * The `path` option is `'/'` by default. You can use relative paths, or set `path: ''` to make the cookie only available on the current path and its children. + * @param name the name of the cookie + * @param opts the options passed to `cookie.stringifySetCookie` with the SvelteKit defaults described above. See documentation [here](https://github.com/jshttp/cookie?tab=readme-ov-file#cookiestringifysetcookiesetcookieobj-options) + */ + delete: (name: string, opts: import('cookie').SerializeOptions) => void; + + /** + * Parses a single `Set-Cookie` header. This allows you to apply cookies received from an external source: + * + * ```js + * import { getRequestEvent } from '$app/server'; + * + * export async function GET() { + * const { cookies } = getRequestEvent(); + * + * const response = await fetch('...'); + * + * for (const str of response.headers.getSetCookie()) { + * const { name, value, ...options } = cookies.parse(str); + * cookies.set(name, value, { ...options, path: '/' }); + * } + * + * // ... + * } + * ``` + * + * Note the use of `headers.getSetCookie()`, which returns an array of cookie headers, _not_ `headers.get('set-cookie')` which returns a single comma-separated string. + */ + parse: typeof import('cookie').parseSetCookie; + + /** + * Serialize a cookie name-value pair into a `Set-Cookie` header string, but don't apply it to the response. + * + * The `httpOnly` is `true` by default, as is `secure`, except during development, when it defaults to `false`. These must be explicitly disabled if you want cookies to be readable by client-side JavaScript and/or transmitted over HTTP. + * + * The `path` option is `'/'` by default. You can use relative paths, or set `path: ''` to make the cookie only available on the current path and its children. + * @param name the name of the cookie + * @param value the cookie value + * @param opts the options passed to `cookie.stringifySetCookie` with the SvelteKit defaults described above. See documentation [here](https://github.com/jshttp/cookie?tab=readme-ov-file#cookiestringifysetcookiesetcookieobj-options) + */ + serialize: (name: string, value: string, opts: import('cookie').SerializeOptions) => string; + } + + export interface RequestEvent< + Params extends AppLayoutParams<'/'> = AppLayoutParams<'/'>, + RouteId extends AppRouteId | null = AppRouteId | null + > { + /** + * Get or set cookies related to the current request + */ + readonly cookies: Cookies; + /** + * `fetch` is equivalent to the [native `fetch` web API](https://developer.mozilla.org/en-US/docs/Web/API/fetch), with a few additional features: + * + * - It can be used to make credentialed requests on the server, as it inherits the `cookie` and `authorization` headers for the page request. + * - It can make relative requests on the server (ordinarily, `fetch` requires a URL with an origin when used in a server context). + * - Internal requests (e.g. for `+server.js` routes) go directly to the handler function when running on the server, without the overhead of an HTTP call. + * - During server-side rendering, the response will be captured and inlined into the rendered HTML by hooking into the `text` and `json` methods of the `Response` object. Note that headers will _not_ be serialized, unless explicitly included via [`filterSerializedResponseHeaders`](https://svelte.dev/docs/kit/hooks#handle) + * - During hydration, the response will be read from the HTML, guaranteeing consistency and preventing an additional network request. + * + * You can learn more about making credentialed requests with cookies [here](https://svelte.dev/docs/kit/load#Cookies). + */ + readonly fetch: typeof fetch; + /** + * The client's IP address, set by the adapter. + */ + readonly getClientAddress: () => string; + /** + * Contains custom data that was added to the request within the [`server handle hook`](https://svelte.dev/docs/kit/hooks#handle). + */ + readonly locals: App.Locals; + /** + * The parameters of the current route - e.g. for a route like `/blog/[slug]`, a `{ slug: string }` object. + * + * Inside `query` functions (including `query.batch` and `query.live`), accessing this property throws an error. + * Pass values from the page as arguments to the query instead. Inside `form` and `command` functions it relates to the page + * the remote function was called from, _not_ the URL of the endpoint SvelteKit creates for the remote function. Never use it + * to determine whether or not a user is authorized to access certain data, as these values are part of the request which could be manipulated. + */ + readonly params: Params; + /** + * Additional data made available through the adapter. + */ + readonly platform: Readonly | undefined; + /** + * The original request object. + */ + readonly request: Request; + /** + * Info about the current route. + */ + readonly route: { + /** + * The ID of the current route - e.g. for `src/routes/blog/[slug]`, it would be `/blog/[slug]`. It is `null` when no route is matched. + * + * Inside `query` functions (including `query.batch` and `query.live`), accessing this property throws an error. + * Pass values from the page as arguments to the query instead. Inside `form` and `command` functions it relates to the page + * the remote function was called from, _not_ the URL of the endpoint SvelteKit creates for the remote function. Never use it + * to determine whether or not a user is authorized to access certain data, as these values are part of the request which could be manipulated. + */ + id: RouteId; + }; + /** + * If you need to set headers for the response, you can do so using the this method. This is useful if you want the page to be cached, for example: + * + * ```js + * /// file: src/routes/blog/+page.js + * export async function load({ fetch, setHeaders }) { + * const url = `https://cms.example.com/articles.json`; + * const response = await fetch(url); + * + * setHeaders({ + * age: response.headers.get('age'), + * 'cache-control': response.headers.get('cache-control') + * }); + * + * return response.json(); + * } + * ``` + * + * Setting the same header multiple times (even in separate `load` functions) is an error — you can only set a given header once. + * + * You cannot add a `set-cookie` header with `setHeaders` — use the [`cookies`](https://svelte.dev/docs/kit/$app-server#Cookies) API instead. + */ + readonly setHeaders: (headers: Record) => void; + /** + * The requested URL. + * + * Inside `query` functions (including `query.batch` and `query.live`), accessing this property throws an error. + * Pass values from the page as arguments to the query instead. Inside `form` and `command` functions it relates to the page + * the remote function was called from, _not_ the URL of the endpoint SvelteKit creates for the remote function. Never use it + * to determine whether or not a user is authorized to access certain data, as these values are part of the request which could be manipulated. + */ + readonly url: URL; + /** + * `true` if the request comes from the client asking for `+page/layout.server.js` data. The `url` property will be stripped of the internal information + * related to the data request in this case. Use this property instead if the distinction is important to you. + */ + readonly isDataRequest: boolean; + /** + * `true` for `+server.js` calls coming from SvelteKit without the overhead of actually making an HTTP request. This happens when you make same-origin `fetch` requests on the server. + */ + readonly isSubRequest: boolean; + + /** + * Access to spans for tracing. If tracing is not enabled, these spans will do nothing. + * @since 2.31.0 + */ + readonly tracing: { + /** Whether tracing is enabled. */ + enabled: boolean; + /** The root span for the request. This span is named `sveltekit.handle.root`. */ + root: Span; + /** The span associated with the current `handle` hook, `load` function, or form action. */ + current: Span; + }; + + /** + * `true` if the request comes from the client via a remote function. The `url` property will be stripped of the internal information + * related to the data request in this case. Use this property instead if the distinction is important to you. + */ + readonly isRemoteRequest: boolean; + } + // If T is unknown or has an index signature, the types below will recurse indefinitely and create giant unions that TS can't handle type WillRecurseIndefinitely = unknown extends T ? true : string extends keyof T ? true : false; From 68ec0abdf4a77956cf70b602f7a474ba43fe5e3e Mon Sep 17 00:00:00 2001 From: Filip Gornitzka Abelson Date: Wed, 12 Aug 2026 11:25:39 +0200 Subject: [PATCH 513/545] chore: update CI action to pnpm/setup (#16758) Uses `pnpm/setup` in accordance with [pnpm v11 docs for GitHub actions](https://pnpm.io/continuous-integration#github-actions). `--frozen-lockfile` is automatically added for CI environments: https://pnpm.io/cli/install#--frozen-lockfile I am not entirely sure of the performance impact on CI here tbh, so feel free to close. --- ### Please don't delete this checklist! Before submitting the PR, please make sure you do the following: - [ ] It's really useful if your PR references an issue where it is discussed ahead of time. In many cases, features are absent for a reason. For large changes, please create an RFC: https://github.com/sveltejs/rfcs - [x] This message body should clearly illustrate what problems it solves. - [ ] Ideally, include a test that fails without this PR but passes with it. ### Tests - [ ] Run the tests with `pnpm test` and lint the project with `pnpm lint` and `pnpm check` ### Changesets - [ ] If your PR makes a change that should be noted in one or more packages' changelogs, generate a changeset by running `pnpm changeset` and following the prompts. Changesets that add features should be `minor` and those that fix bugs should be `patch`. Please prefix changeset messages with `feat:`, `fix:`, or `chore:`. ### Edits - [x] Please ensure that 'Allow edits from maintainers' is checked. PRs without this option may be closed. --- .github/actions/node-setup/action.yml | 12 +++--------- .github/workflows/ci.yml | 2 -- .github/workflows/release.yml | 8 +++----- 3 files changed, 6 insertions(+), 16 deletions(-) diff --git a/.github/actions/node-setup/action.yml b/.github/actions/node-setup/action.yml index bbe962dfe433..990588bdbefe 100644 --- a/.github/actions/node-setup/action.yml +++ b/.github/actions/node-setup/action.yml @@ -10,13 +10,7 @@ inputs: runs: using: 'composite' steps: - - uses: pnpm/action-setup@0977fd99725f1db4007ccb2928dbb4e90d06cc86 # v6.0.10 - - - uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0 + - uses: pnpm/setup@84cb39b217b10273981911c288cd62326dc7c6d2 # v2.0.2 with: - node-version: ${{ inputs.node-version }} - cache: pnpm - - - name: Install dependencies - shell: bash - run: pnpm install --frozen-lockfile + runtime: node@${{ inputs.node-version }} + cache: true diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 5cfdd7b58fb1..c9076495c9df 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -224,8 +224,6 @@ jobs: with: persist-credentials: false - uses: ./.github/actions/node-setup - with: - node-version: ${{ matrix.node-version }} - run: pnpm run sync-all - run: pnpm test:svelte-async:${{ matrix.mode }} - name: Print flaky test report diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index fd4ea07318b0..6d41c9039b32 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -26,14 +26,12 @@ jobs: uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false - - uses: pnpm/action-setup@0977fd99725f1db4007ccb2928dbb4e90d06cc86 # v6.0.10 - name: Setup Node.js - uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0 + uses: pnpm/setup@84cb39b217b10273981911c288cd62326dc7c6d2 # v2.0.2 with: - node-version: 24.x + runtime: node@24 # don't cache pnpm for releases to circumvent cache poisoning - - - run: pnpm install --frozen-lockfile + cache: false - name: Create Release Pull Request or Publish to npm id: changesets From de08183195705f6a13da85f6e2d3024ba1d46b57 Mon Sep 17 00:00:00 2001 From: Tee Ming Date: Wed, 12 Aug 2026 19:38:22 +0800 Subject: [PATCH 514/545] chore: bump `svelte2tsx` (#16761) bumps `svelte2tsx` so we no longer have that type issue of it trying to import magic-string --- .changeset/tiny-cases-help.md | 6 ++++++ packages/package/package.json | 2 +- packages/package/tsconfig.json | 2 -- pnpm-lock.yaml | 10 +++++----- pnpm-workspace.yaml | 1 + 5 files changed, 13 insertions(+), 8 deletions(-) create mode 100644 .changeset/tiny-cases-help.md diff --git a/.changeset/tiny-cases-help.md b/.changeset/tiny-cases-help.md new file mode 100644 index 000000000000..85d2c4ef3219 --- /dev/null +++ b/.changeset/tiny-cases-help.md @@ -0,0 +1,6 @@ +--- +"@sveltejs/package": patch +--- + +chore: bump `svelte2tsx` to 0.7.60 + \ No newline at end of file diff --git a/packages/package/package.json b/packages/package/package.json index 6b7cc91a5eea..22e789da0c05 100644 --- a/packages/package/package.json +++ b/packages/package/package.json @@ -22,7 +22,7 @@ "dependencies": { "chokidar": "^5.0.0", "semver": "^7.8.5", - "svelte2tsx": "~0.7.59" + "svelte2tsx": "~0.7.60" }, "devDependencies": { "@sveltejs/kit": "workspace:^", diff --git a/packages/package/tsconfig.json b/packages/package/tsconfig.json index f602ca975661..d9994d64c9b6 100644 --- a/packages/package/tsconfig.json +++ b/packages/package/tsconfig.json @@ -6,8 +6,6 @@ "target": "es2022", "module": "node16", "moduleResolution": "node16", - // TODO: remove this when svelte2tsx has migrated to magic-string v1 - "skipLibCheck": true, "types": ["node"] }, "include": ["*.js", "src/**/*", "test/index.spec.js"] diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 64be756125c8..03d5880044e6 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1591,8 +1591,8 @@ importers: specifier: ^7.8.5 version: 7.8.5 svelte2tsx: - specifier: ~0.7.59 - version: 0.7.59(svelte@5.56.8(@typescript-eslint/types@8.61.1))(typescript@6.0.3) + specifier: ~0.7.60 + version: 0.7.60(svelte@5.56.8(@typescript-eslint/types@8.61.1))(typescript@6.0.3) devDependencies: '@sveltejs/kit': specifier: workspace:^ @@ -4242,8 +4242,8 @@ packages: typescript: optional: true - svelte2tsx@0.7.59: - resolution: {integrity: sha512-Itj7Wz9WIiGFl/uJa58+rf43ajezaljKK/KTOHq5abUjto56xe+o5SOzLwSoeJ5hma9NZEstpZiazFW2q1nZPQ==} + svelte2tsx@0.7.60: + resolution: {integrity: sha512-aefUopCWAA3AT+6K6PQj5JP19+C2dj31qSh06p+nLjVsizwYqGHtTarvhYsCFWl5tSzrD19GL0s+2FcB3K26Lg==} peerDependencies: svelte: ^3.55 || ^4.0.0-next.0 || ^4.0 || ^5.0.0-next.0 typescript: ^4.9.4 || ^5.0.0 || ^6.0.0 @@ -6893,7 +6893,7 @@ snapshots: postcss-load-config: 3.1.4(postcss@8.5.26) typescript: 6.0.3 - svelte2tsx@0.7.59(svelte@5.56.8(@typescript-eslint/types@8.61.1))(typescript@6.0.3): + svelte2tsx@0.7.60(svelte@5.56.8(@typescript-eslint/types@8.61.1))(typescript@6.0.3): dependencies: dedent-js: 1.0.1 scule: 1.3.0 diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 54e37dacc4a8..5fdfdee07738 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -9,6 +9,7 @@ minimumReleaseAgeExclude: - zimmerframe - prettier-plugin-svelte - svelte-check + - svelte2tsx - esm-env - vite-imagetools - imagetools-core From fd9ddbeeb4e88bbe8ce15b71f6a4876a4defd740 Mon Sep 17 00:00:00 2001 From: Tee Ming Date: Wed, 12 Aug 2026 20:05:39 +0800 Subject: [PATCH 515/545] fix: add dependency to compose plugin hook filters (#16760) We were incorrectly installing `rolldown` as a dev dep, so the import to `rolldown/filters` and the hook filter helpers weren't available after installing sveltekit 3. This PR fixes that by using the rolldown plugin utils dep. Also optimises some of the filters --- ### Please don't delete this checklist! Before submitting the PR, please make sure you do the following: - [ ] It's really useful if your PR references an issue where it is discussed ahead of time. In many cases, features are absent for a reason. For large changes, please create an RFC: https://github.com/sveltejs/rfcs - [x] This message body should clearly illustrate what problems it solves. - [ ] Ideally, include a test that fails without this PR but passes with it. ### Tests - [ ] Run the tests with `pnpm test` and lint the project with `pnpm lint` and `pnpm check` ### Changesets - [x] If your PR makes a change that should be noted in one or more packages' changelogs, generate a changeset by running `pnpm changeset` and following the prompts. Changesets that add features should be `minor` and those that fix bugs should be `patch`. Please prefix changeset messages with `feat:`, `fix:`, or `chore:`. ### Edits - [x] Please ensure that 'Allow edits from maintainers' is checked. PRs without this option may be closed. --- .changeset/curly-webs-lie.md | 6 ++ packages/enhanced-img/package.json | 1 - packages/kit/package.json | 2 +- packages/kit/src/exports/vite/index.js | 81 +++++++++++++++++--------- pnpm-lock.yaml | 12 +--- 5 files changed, 64 insertions(+), 38 deletions(-) create mode 100644 .changeset/curly-webs-lie.md diff --git a/.changeset/curly-webs-lie.md b/.changeset/curly-webs-lie.md new file mode 100644 index 000000000000..ffccd2bb4ad0 --- /dev/null +++ b/.changeset/curly-webs-lie.md @@ -0,0 +1,6 @@ +--- +"@sveltejs/kit": patch +--- + +fix: correctly implement Vite plugin hook filters + \ No newline at end of file diff --git a/packages/enhanced-img/package.json b/packages/enhanced-img/package.json index a7494bba0d47..b058df3fda1f 100644 --- a/packages/enhanced-img/package.json +++ b/packages/enhanced-img/package.json @@ -47,7 +47,6 @@ "devDependencies": { "@types/estree": "catalog:", "@types/node": "catalog:", - "rolldown": "catalog:", "svelte": "catalog:", "typescript": "catalog:typescript-native", "vite": "catalog:", diff --git a/packages/kit/package.json b/packages/kit/package.json index d1991ee14f19..ad78d3869985 100644 --- a/packages/kit/package.json +++ b/packages/kit/package.json @@ -18,6 +18,7 @@ "homepage": "https://svelte.dev", "type": "module", "dependencies": { + "@rolldown/pluginutils": "^1.0.1", "@standard-schema/spec": "^1.1.0", "@sveltejs/acorn-typescript": "^1.0.12", "acorn": "^8.18.0", @@ -37,7 +38,6 @@ "@types/node": "catalog:", "dts-buddy": "^0.8.3", "jsdom": "catalog:", - "rolldown": "catalog:", "svelte": "catalog:", "svelte-preprocess": "catalog:", "typescript": "~6.0.3", diff --git a/packages/kit/src/exports/vite/index.js b/packages/kit/src/exports/vite/index.js index 694f6d5bf981..88cd92c78153 100644 --- a/packages/kit/src/exports/vite/index.js +++ b/packages/kit/src/exports/vite/index.js @@ -1,3 +1,4 @@ +/** @import { TopLevelFilterExpression } from '@rolldown/pluginutils' */ /** @import { KitConfig } from '@sveltejs/kit' */ /** @import { EnvVarConfig } from '@sveltejs/kit/env' */ /** @import { Options, SvelteConfig } from '@sveltejs/vite-plugin-svelte' */ @@ -8,9 +9,17 @@ import fs from 'node:fs'; import path from 'node:path'; import process from 'node:process'; import { styleText } from 'node:util'; + +import { + and, + code, + exactRegex, + importerId, + include, + not, + prefixRegex +} from '@rolldown/pluginutils'; import MagicString from 'magic-string'; -import { loadEnv } from 'vite'; -import { exactRegex, prefixRegex } from 'rolldown/filter'; import { copy, read, resolve_entry } from '../../utils/filesystem.js'; import { posixify } from '../../utils/os.js'; @@ -203,7 +212,7 @@ export async function sveltekit(config) { /** @type {Partial} */ const inline_vps_config = { preprocess: svelte_config.preprocess, - ...(svelte_config.vitePlugin ?? {}), + ...svelte_config.vitePlugin, // pass through any options that SvelteKit doesn't use itself, so that // the options SvelteKit manages always take precedence ...split.vite_plugin_svelte_config, @@ -375,10 +384,10 @@ function kit({ svelte_config }) { ? `globalThis.__sveltekit_${version_hash}` : 'globalThis.__sveltekit_dev'; - env = loadEnv(config_env.mode, kit.env.dir, ''); - vite = await import_peer('vite', root); + env = vite.loadEnv(config_env.mode, kit.env.dir, ''); + normalized_cwd = vite.normalizePath(root); normalized_aliases = get_import_aliases(root, vite.normalizePath.bind(vite)); normalized_node_modules = vite.normalizePath(path.resolve(root, 'node_modules')); @@ -668,7 +677,7 @@ function kit({ svelte_config }) { resolveId: { filter: { - id: [prefixRegex('__sveltekit/')] + id: prefixRegex('__sveltekit/') }, handler(id) { if (id === '__sveltekit/manifest') { @@ -761,13 +770,16 @@ function kit({ svelte_config }) { }, resolveId: { - // TODO: use composable filter API here when supported: - // https://github.com/vitejs/rolldown-vite/issues/605 - // filter: ([ - // exclude(importerId(/index\.html$/)), - // include(importerId(/.+/)) - // ]), + // composable filters are not accepted type-wise but still work during build + // see https://github.com/vitejs/rolldown-vite/issues/605 + filter: /** @type {any} */ ( + /** @satisfies {TopLevelFilterExpression[]} */ ([ + include(and(importerId(/.+/), not(importerId(/index\.html$/)))) + ]) + ), async handler(id, importer, options) { + // composable filters only work during build so we still need this guard for dev + // see https://github.com/vitejs/rolldown-vite/issues/605 if (importer && !importer.endsWith('index.html')) { const resolved = await this.resolve(id, importer, { ...options, skipSelf: true }); @@ -1162,7 +1174,7 @@ function kit({ svelte_config }) { resolveId: { filter: { - id: [prefixRegex('__sveltekit/')] + id: prefixRegex('__sveltekit/') }, handler(id) { return `\0virtual:${id}`; @@ -1269,13 +1281,19 @@ function kit({ svelte_config }) { /** @type {Plugin} */ const plugin_service_worker_env = { name: 'vite-plugin-sveltekit-service-worker-env', + configResolved() { + if (service_worker_entry_file) { + // @ts-expect-error transform is defined in this object + plugin_service_worker_env.transform.filter = { + id: exactRegex(service_worker_entry_file) + }; + } + }, applyToEnvironment(environment) { return !!service_worker_entry_file && environment.config.consumer === 'client'; }, transform: { - handler(code, id) { - if (id !== service_worker_entry_file) return; - + handler(code) { // prepend the service worker with an import that configures // `env`, in case `$app/env/public` is imported. In production // this is required: dynamic public env vars aren't known at @@ -1601,17 +1619,26 @@ function kit({ svelte_config }) { return environment.name !== 'serviceWorker'; }, - renderChunk(code, chunk) { - if (code.includes('__SVELTEKIT_TRACK__')) { - return { - // Rolldown changes our single quotes to double quotes so we need it in the regex too - code: code.replace(/__SVELTEKIT_TRACK__\(['"](.+?)['"]\)/g, (_, label) => { - (tracked_features[chunk.name + '.js'] ??= []).push(label); - // put extra whitespace at the end of the comment to preserve the source size and avoid interfering with source maps - return `/* track ${label} */`; - }), - map: null // TODO we may need to generate a sourcemap in future - }; + renderChunk: { + // composable filters are not accepted type-wise but still work during build + // see https://github.com/vitejs/rolldown-vite/issues/605 + filter: /** @type {any} */ ( + /** @satisfies {TopLevelFilterExpression[]} */ ([include(code('__SVELTEKIT_TRACK__'))]) + ), + handler(code, chunk) { + // composable filters only work during build so we still need this guard for dev + // see https://github.com/vitejs/rolldown-vite/issues/605 + if (code.includes('__SVELTEKIT_TRACK__')) { + return { + // Rolldown changes our single quotes to double quotes so we need it in the regex too + code: code.replace(/__SVELTEKIT_TRACK__\(['"](.+?)['"]\)/g, (_, label) => { + (tracked_features[chunk.name + '.js'] ??= []).push(label); + // put extra whitespace at the end of the comment to preserve the source size and avoid interfering with source maps + return `/* track ${label} */`; + }), + map: null // TODO we may need to generate a sourcemap in future + }; + } } }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 03d5880044e6..cb600534f2a7 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -69,9 +69,6 @@ catalogs: prettier-plugin-svelte: specifier: ^4.1.1 version: 4.1.1 - rolldown: - specifier: ^1.2.3 - version: 1.2.3 sirv-cli: specifier: ^3.0.1 version: 3.0.1 @@ -491,9 +488,6 @@ importers: '@types/node': specifier: 'catalog:' version: 22.19.19 - rolldown: - specifier: 'catalog:' - version: 1.2.3 svelte: specifier: 'catalog:' version: 5.56.8(@typescript-eslint/types@8.61.1) @@ -527,6 +521,9 @@ importers: packages/kit: dependencies: + '@rolldown/pluginutils': + specifier: ^1.0.1 + version: 1.0.1 '@standard-schema/spec': specifier: ^1.1.0 version: 1.1.0 @@ -579,9 +576,6 @@ importers: jsdom: specifier: 'catalog:' version: 30.0.1 - rolldown: - specifier: 'catalog:' - version: 1.2.3 svelte: specifier: 'catalog:' version: 5.56.8(@typescript-eslint/types@8.61.1) From 1e0fcc9136be248fcacefc8cfb819c8ce55f44b2 Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Wed, 12 Aug 2026 10:06:48 -0400 Subject: [PATCH 516/545] fix: yield to allow prerender updates to be visible (#16748) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit follow-up to #16744 — turns out we need this or `stdout` can buffer updates for long enough that progress appears stalled. before: https://github.com/user-attachments/assets/25019619-5d60-42e8-aa8c-bc051fba64ca after: https://github.com/user-attachments/assets/094891d1-4028-4033-8c2e-56ab3dbcf394 --- ### Please don't delete this checklist! Before submitting the PR, please make sure you do the following: - [x] It's really useful if your PR references an issue where it is discussed ahead of time. In many cases, features are absent for a reason. For large changes, please create an RFC: https://github.com/sveltejs/rfcs - [x] This message body should clearly illustrate what problems it solves. - [ ] Ideally, include a test that fails without this PR but passes with it. ### Tests - [x] Run the tests with `pnpm test` and lint the project with `pnpm lint` and `pnpm check` ### Changesets - [x] If your PR makes a change that should be noted in one or more packages' changelogs, generate a changeset by running `pnpm changeset` and following the prompts. Changesets that add features should be `minor` and those that fix bugs should be `patch`. Please prefix changeset messages with `feat:`, `fix:`, or `chore:`. ### Edits - [x] Please ensure that 'Allow edits from maintainers' is checked. PRs without this option may be closed. --------- Co-authored-by: Nic Polumeyv --- .changeset/lemon-pots-tease.md | 6 +++ packages/kit/src/core/postbuild/prerender.js | 39 +++++++++++++++----- 2 files changed, 35 insertions(+), 10 deletions(-) create mode 100644 .changeset/lemon-pots-tease.md diff --git a/.changeset/lemon-pots-tease.md b/.changeset/lemon-pots-tease.md new file mode 100644 index 000000000000..d8945ba267a3 --- /dev/null +++ b/.changeset/lemon-pots-tease.md @@ -0,0 +1,6 @@ +--- +"@sveltejs/kit": patch +--- + +fix: yield to allow prerender updates to be visible + \ No newline at end of file diff --git a/packages/kit/src/core/postbuild/prerender.js b/packages/kit/src/core/postbuild/prerender.js index 48aeec56b9cb..b8fd903fa887 100644 --- a/packages/kit/src/core/postbuild/prerender.js +++ b/packages/kit/src/core/postbuild/prerender.js @@ -275,8 +275,8 @@ async function prerender({ /** @type {Map>} */ const remote_responses = new Map(); - /** @type {(path: string) => void} */ - let progress_line = noop; + /** @type {null | { clear: () => void; update: (path: string) => void; updated: number }} */ + let progress = null; if (is_tty) { // Where possible, provide progress feedback by showing the path we're @@ -301,17 +301,25 @@ async function prerender({ } }); - progress_line = (path) => { - // If app code writes to stdout or stderr, don't move the cursor to clear - // the previous progress log, because that will corrupt things - if (current) { + progress = { + clear: () => { + // If app code writes to stdout or stderr, don't move the cursor to clear + // the previous progress log, because that will corrupt things + if (!current) return; + moveCursor(process.stdout, 0, -1); clearLine(process.stdout, 0); - } + }, + + update: (path) => { + stdout_write.call(process.stdout, `crawling ${path}\n`); + current = true; + }, - stdout_write.call(process.stdout, `rendering ${path}...\n`); - current = true; + updated: 0 }; + + console.log(''); } /** @type {Set} */ @@ -354,7 +362,17 @@ async function prerender({ /** @type {Map} */ const dependencies = new Map(); - progress_line(decoded); + if (progress) { + progress.clear(); + progress.update(decoded); + + if (Date.now() - progress.updated > 50) { + progress.updated = Date.now(); + + // without this, the update will rarely be visible, and progress will appear stuck + await new Promise((f) => setTimeout(f, 0)); + } + } const request = new Request(prerender_origin + encoded); @@ -693,6 +711,7 @@ async function prerender({ } await q.done(); + progress?.clear(); // handle invalid fragment links for (const [key, referrers] of expected_hashlinks) { From e757808953e1f2eff9bcc5b20b940870a951027e Mon Sep 17 00:00:00 2001 From: Filip Gornitzka Abelson Date: Wed, 12 Aug 2026 17:16:15 +0200 Subject: [PATCH 517/545] chore: replace legacy const syntax (#16747) Replaces all instances of the legacy `{@const ...}` syntax with new `{const ...}` --- documentation/docs/20-core-concepts/60-remote-functions.md | 2 +- packages/kit/src/runtime/app/server/public.d.ts | 2 +- packages/kit/test/apps/async/src/routes/+page.svelte | 2 +- packages/kit/types/index.d.ts | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/documentation/docs/20-core-concepts/60-remote-functions.md b/documentation/docs/20-core-concepts/60-remote-functions.md index be9a9fde0533..312c979f65ad 100644 --- a/documentation/docs/20-core-concepts/60-remote-functions.md +++ b/documentation/docs/20-core-concepts/60-remote-functions.md @@ -847,7 +847,7 @@ When each instance should render different values, pass them as the second argum

Todos

{#each await getTodos() as todo} - {@const modify = modifyTodo.for(todo.id)} + {const modify = modifyTodo.for(todo.id)}
diff --git a/packages/kit/src/runtime/app/server/public.d.ts b/packages/kit/src/runtime/app/server/public.d.ts index fcbc7762f7b7..d3fbc0c532b8 100644 --- a/packages/kit/src/runtime/app/server/public.d.ts +++ b/packages/kit/src/runtime/app/server/public.d.ts @@ -504,7 +504,7 @@ export type RemoteForm = { * Useful when you have multiple forms that use the same remote form action, for example in a loop. * ```svelte * {#each todos as todo} - * {@const todoForm = updateTodo.for(todo.id)} + * {const todoForm = updateTodo.for(todo.id)} * * {#if todoForm.result?.invalid}

Invalid data

{/if} * ... diff --git a/packages/kit/test/apps/async/src/routes/+page.svelte b/packages/kit/test/apps/async/src/routes/+page.svelte index 0a71dbf7328a..514c4c49790c 100644 --- a/packages/kit/test/apps/async/src/routes/+page.svelte +++ b/packages/kit/test/apps/async/src/routes/+page.svelte @@ -5,7 +5,7 @@

Tests