diff --git a/.changeset/pretty-beds-melt.md b/.changeset/pretty-beds-melt.md new file mode 100644 index 000000000000..cc9cb6bc5319 --- /dev/null +++ b/.changeset/pretty-beds-melt.md @@ -0,0 +1,5 @@ +--- +'@sveltejs/kit': patch +--- + +fix: don't bundle `@sveltejs/kit` diff --git a/eslint.config.js b/eslint.config.js index 9bb8dd2a7156..365ddb46e517 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -41,7 +41,8 @@ export default [ 'packages/kit/test/build-errors/**/*', 'packages/kit/test/prerendering/**/*', 'packages/package/test/errors/**/*', - 'packages/package/test/fixtures/**/*' + 'packages/package/test/fixtures/**/*', + 'packages/test-redirect-importer/index.js' ] } ]; diff --git a/packages/kit/package.json b/packages/kit/package.json index dcd44554a043..a1fb69b7c316 100644 --- a/packages/kit/package.json +++ b/packages/kit/package.json @@ -29,8 +29,7 @@ "mrmime": "^2.0.0", "sade": "^1.8.1", "set-cookie-parser": "^2.6.0", - "sirv": "^3.0.0", - "vitefu": "^1.0.6" + "sirv": "^3.0.0" }, "devDependencies": { "@playwright/test": "catalog:", @@ -84,6 +83,10 @@ "types": "./types/index.d.ts", "import": "./src/exports/index.js" }, + "./internal": { + "types": "./types/index.d.ts", + "import": "./src/exports/internal/index.js" + }, "./node": { "types": "./types/index.d.ts", "import": "./src/exports/node/index.js" diff --git a/packages/kit/src/exports/index.js b/packages/kit/src/exports/index.js index e587ede88581..d11e011d6d76 100644 --- a/packages/kit/src/exports/index.js +++ b/packages/kit/src/exports/index.js @@ -1,4 +1,4 @@ -import { HttpError, Redirect, ActionFailure } from '../runtime/control.js'; +import { HttpError, Redirect, ActionFailure } from './internal/index.js'; import { BROWSER, DEV } from 'esm-env'; import { add_data_suffix, diff --git a/packages/kit/src/runtime/control.js b/packages/kit/src/exports/internal/index.js similarity index 100% rename from packages/kit/src/runtime/control.js rename to packages/kit/src/exports/internal/index.js diff --git a/packages/kit/src/exports/node/index.js b/packages/kit/src/exports/node/index.js index a69b7ae6d906..e11cad1c12e7 100644 --- a/packages/kit/src/exports/node/index.js +++ b/packages/kit/src/exports/node/index.js @@ -1,7 +1,7 @@ import { createReadStream } from 'node:fs'; import { Readable } from 'node:stream'; import * as set_cookie_parser from 'set-cookie-parser'; -import { SvelteKitError } from '../../runtime/control.js'; +import { SvelteKitError } from '../internal/index.js'; /** * @param {import('http').IncomingMessage} req diff --git a/packages/kit/src/exports/vite/index.js b/packages/kit/src/exports/vite/index.js index 1c90895bfe49..4abb640fe4fb 100644 --- a/packages/kit/src/exports/vite/index.js +++ b/packages/kit/src/exports/vite/index.js @@ -36,7 +36,6 @@ import { } from './module_ids.js'; import { import_peer } from '../../utils/import.js'; import { compact } from '../../utils/array.js'; -import { crawlFrameworkPkgs } from 'vitefu'; const cwd = process.cwd(); @@ -229,7 +228,7 @@ async function kit({ svelte_config }) { * 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 */ - async config(config, config_env) { + config(config, config_env) { initial_config = config; vite_config_env = config_env; is_build = config_env.command === 'build'; @@ -252,20 +251,6 @@ async function kit({ svelte_config }) { const generated = path.posix.join(kit.outDir, 'generated'); - const packages_depending_on_svelte_kit = ( - await crawlFrameworkPkgs({ - root: cwd, - isBuild: is_build, - viteUserConfig: config, - isSemiFrameworkPkgByJson: (pkg_json) => { - return ( - !!pkg_json.dependencies?.['@sveltejs/kit'] || - !!pkg_json.peerDependencies?.['@sveltejs/kit'] - ); - } - }) - ).ssr.noExternal; - // dev and preview config can be shared /** @type {import('vite').UserConfig} */ const new_config = { @@ -299,7 +284,6 @@ async function kit({ svelte_config }) { `!${kit.files.routes}/**/+*server.*` ], exclude: [ - '@sveltejs/kit', // exclude kit features so that libraries using them work even when they are prebundled // this does not affect app code, just handling of imported libraries that use $app or $env '$app', @@ -313,20 +297,7 @@ async function kit({ svelte_config }) { // that bundle later on from resolving the export conditions incorrectly // and for example include browser-only code in the server output // because they for example use esbuild.build with `platform: 'browser'` - 'esm-env', - // We need this for two reasons: - // 1. Without this, `@sveltejs/kit` imports are kept as-is in the server output, - // and that causes modules and therefore classes like `Redirect` to be imported twice - // under different IDs, which breaks a bunch of stuff because of failing instanceof checks. - // 2. Vitest bypasses Vite when loading external modules, so we bundle - // when it is detected to keep our virtual modules working. - // See https://github.com/sveltejs/kit/pull/9172 - // and https://vitest.dev/config/#deps-registernodeloader - '@sveltejs/kit', - // We need to bundle any packages depending on @sveltejs/kit so that - // everyone uses the same instances of classes such as `Redirect` - // which we use in `instanceof` checks - ...packages_depending_on_svelte_kit + 'esm-env' ] } }; diff --git a/packages/kit/src/runtime/client/client.js b/packages/kit/src/runtime/client/client.js index 7d07af6aa5a6..4a4ac7777ea2 100644 --- a/packages/kit/src/runtime/client/client.js +++ b/packages/kit/src/runtime/client/client.js @@ -1,5 +1,6 @@ import { BROWSER, DEV } from 'esm-env'; import * as svelte from 'svelte'; +import { HttpError, Redirect, SvelteKitError } from '@sveltejs/kit/internal'; const { onMount, tick } = svelte; // Svelte 4 and under don't have `untrack`, so we have to fallback if `untrack` is not exported const untrack = svelte.untrack ?? ((value) => value()); @@ -38,7 +39,6 @@ import { } from './constants.js'; import { validate_page_exports } from '../../utils/exports.js'; import { compact } from '../../utils/array.js'; -import { HttpError, Redirect, SvelteKitError } from '../control.js'; import { INVALIDATED_PARAM, TRAILING_SLASH_PARAM, validate_depends } from '../shared.js'; import { get_message, get_status } from '../../utils/error.js'; import { writable } from 'svelte/store'; diff --git a/packages/kit/src/runtime/server/cookie.spec.js b/packages/kit/src/runtime/server/cookie.spec.js index e8f2cb08e623..8d98bcc3c283 100644 --- a/packages/kit/src/runtime/server/cookie.spec.js +++ b/packages/kit/src/runtime/server/cookie.spec.js @@ -1,6 +1,6 @@ import { assert, expect, test } from 'vitest'; import { domain_matches, path_matches, get_cookies } from './cookie.js'; -import { installPolyfills } from '../../exports/node/polyfills.js'; +import { installPolyfills } from '@sveltejs/kit/node/polyfills'; installPolyfills(); diff --git a/packages/kit/src/runtime/server/data/index.js b/packages/kit/src/runtime/server/data/index.js index 46150a987ae9..0c5d8f1d0ecf 100644 --- a/packages/kit/src/runtime/server/data/index.js +++ b/packages/kit/src/runtime/server/data/index.js @@ -1,10 +1,10 @@ -import { HttpError, SvelteKitError, Redirect } from '../../control.js'; +import { text } from '@sveltejs/kit'; +import { HttpError, SvelteKitError, Redirect } from '@sveltejs/kit/internal'; import { normalize_error } from '../../../utils/error.js'; import { once } from '../../../utils/functions.js'; import { load_server_data } from '../page/load_data.js'; import { clarify_devalue_error, handle_error_and_jsonify, serialize_uses } from '../utils.js'; import { normalize_path } from '../../../utils/url.js'; -import { text } from '../../../exports/index.js'; import * as devalue from 'devalue'; import { create_async_iterator } from '../../../utils/streaming.js'; diff --git a/packages/kit/src/runtime/server/endpoint.js b/packages/kit/src/runtime/server/endpoint.js index d480d344036b..a88a9f4c5a70 100644 --- a/packages/kit/src/runtime/server/endpoint.js +++ b/packages/kit/src/runtime/server/endpoint.js @@ -1,7 +1,7 @@ +import { Redirect } from '@sveltejs/kit/internal'; import { ENDPOINT_METHODS, PAGE_METHODS } from '../../constants.js'; import { negotiate } from '../../utils/http.js'; import { with_event } from '../app/server/event.js'; -import { Redirect } from '../control.js'; import { method_not_allowed } from './utils.js'; /** diff --git a/packages/kit/src/runtime/server/page/actions.js b/packages/kit/src/runtime/server/page/actions.js index e7703359234e..bd44060bfd2a 100644 --- a/packages/kit/src/runtime/server/page/actions.js +++ b/packages/kit/src/runtime/server/page/actions.js @@ -1,9 +1,9 @@ import * as devalue from 'devalue'; import { DEV } from 'esm-env'; -import { json } from '../../../exports/index.js'; +import { json } from '@sveltejs/kit'; +import { HttpError, Redirect, ActionFailure, SvelteKitError } from '@sveltejs/kit/internal'; import { get_status, normalize_error } from '../../../utils/error.js'; import { is_form_content_type, negotiate } from '../../../utils/http.js'; -import { HttpError, Redirect, ActionFailure, SvelteKitError } from '../../control.js'; import { handle_error_and_jsonify } from '../utils.js'; import { with_event } from '../../app/server/event.js'; diff --git a/packages/kit/src/runtime/server/page/index.js b/packages/kit/src/runtime/server/page/index.js index e7b462a74dda..de17e7666b0d 100644 --- a/packages/kit/src/runtime/server/page/index.js +++ b/packages/kit/src/runtime/server/page/index.js @@ -1,8 +1,8 @@ -import { text } from '../../../exports/index.js'; +import { text } from '@sveltejs/kit'; +import { Redirect } from '@sveltejs/kit/internal'; import { compact } from '../../../utils/array.js'; import { get_status, normalize_error } from '../../../utils/error.js'; import { add_data_suffix } from '../../pathname.js'; -import { Redirect } from '../../control.js'; import { redirect_response, static_error_page, handle_error_and_jsonify } from '../utils.js'; import { handle_action_json_request, diff --git a/packages/kit/src/runtime/server/page/render.js b/packages/kit/src/runtime/server/page/render.js index 13c07e8c10fd..853fb54cb0ac 100644 --- a/packages/kit/src/runtime/server/page/render.js +++ b/packages/kit/src/runtime/server/page/render.js @@ -1,6 +1,7 @@ import * as devalue from 'devalue'; import { readable, writable } from 'svelte/store'; import { DEV } from 'esm-env'; +import { text } from '@sveltejs/kit'; import * as paths from '__sveltekit/paths'; import { hash } from '../../hash.js'; import { serialize_data } from './serialize_data.js'; @@ -9,7 +10,6 @@ import { Csp } from './csp.js'; import { uneval_action_response } from './actions.js'; import { clarify_devalue_error, handle_error_and_jsonify, serialize_uses } from '../utils.js'; import { public_env, safe_public_env } from '../../shared-server.js'; -import { text } from '../../../exports/index.js'; import { create_async_iterator } from '../../../utils/streaming.js'; import { SVELTE_KIT_ASSETS } from '../../../constants.js'; import { SCHEME } from '../../../utils/url.js'; 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 f29e91329183..bb3e99054507 100644 --- a/packages/kit/src/runtime/server/page/respond_with_error.js +++ b/packages/kit/src/runtime/server/page/respond_with_error.js @@ -1,7 +1,7 @@ +import { Redirect } from '@sveltejs/kit/internal'; import { render_response } from './render.js'; import { load_data, load_server_data } from './load_data.js'; import { handle_error_and_jsonify, static_error_page, redirect_response } from '../utils.js'; -import { Redirect } from '../../control.js'; import { get_status } from '../../../utils/error.js'; import { PageNodes } from '../../../utils/page_nodes.js'; diff --git a/packages/kit/src/runtime/server/page/server_routing.js b/packages/kit/src/runtime/server/page/server_routing.js index 1228f0bfcb57..161e8e39f8f1 100644 --- a/packages/kit/src/runtime/server/page/server_routing.js +++ b/packages/kit/src/runtime/server/page/server_routing.js @@ -1,5 +1,5 @@ import { base, assets, relative } from '__sveltekit/paths'; -import { text } from '../../../exports/index.js'; +import { text } from '@sveltejs/kit'; import { s } from '../../../utils/misc.js'; import { exec } from '../../../utils/routing.js'; import { decode_params } from '../../../utils/url.js'; diff --git a/packages/kit/src/runtime/server/respond.js b/packages/kit/src/runtime/server/respond.js index 4ca265beab88..d37659cf899b 100644 --- a/packages/kit/src/runtime/server/respond.js +++ b/packages/kit/src/runtime/server/respond.js @@ -1,4 +1,6 @@ import { DEV } from 'esm-env'; +import { json, text } from '@sveltejs/kit'; +import { HttpError, Redirect, SvelteKitError } from '@sveltejs/kit/internal'; import { base, app_dir } from '__sveltekit/paths'; import { is_endpoint_request, render_endpoint } from './endpoint.js'; import { render_page } from './page/index.js'; @@ -17,9 +19,7 @@ import { redirect_json_response, render_data } from './data/index.js'; import { add_cookies_to_headers, get_cookies } from './cookie.js'; import { create_fetch } from './fetch.js'; import { PageNodes } from '../../utils/page_nodes.js'; -import { HttpError, Redirect, SvelteKitError } from '../control.js'; import { validate_server_exports } from '../../utils/exports.js'; -import { json, text } from '../../exports/index.js'; import { action_json_redirect, is_action_json_request } from './page/actions.js'; import { INVALIDATED_PARAM, TRAILING_SLASH_PARAM } from '../shared.js'; import { get_public_env } from './env_module.js'; diff --git a/packages/kit/src/runtime/server/utils.js b/packages/kit/src/runtime/server/utils.js index 880e966e99f1..57420e7404ce 100644 --- a/packages/kit/src/runtime/server/utils.js +++ b/packages/kit/src/runtime/server/utils.js @@ -1,8 +1,8 @@ import { DEV } from 'esm-env'; -import { json, text } from '../../exports/index.js'; +import { json, text } from '@sveltejs/kit'; +import { HttpError } from '@sveltejs/kit/internal'; import { coalesce_to_error, get_message, get_status } from '../../utils/error.js'; import { negotiate } from '../../utils/http.js'; -import { HttpError } from '../control.js'; import { fix_stack_trace } from '../shared-server.js'; import { ENDPOINT_METHODS } from '../../constants.js'; import { escape_html } from '../../utils/escape.js'; diff --git a/packages/kit/src/utils/error.js b/packages/kit/src/utils/error.js index 1247b94096aa..c12b98eff41c 100644 --- a/packages/kit/src/utils/error.js +++ b/packages/kit/src/utils/error.js @@ -1,4 +1,4 @@ -import { HttpError, SvelteKitError } from '../runtime/control.js'; +import { HttpError, SvelteKitError } from '@sveltejs/kit/internal'; /** * @param {unknown} err @@ -18,7 +18,7 @@ export function coalesce_to_error(err) { * @param {unknown} error */ export function normalize_error(error) { - return /** @type {import('../runtime/control.js').Redirect | HttpError | SvelteKitError | Error} */ ( + return /** @type {import('../exports/internal/index.js').Redirect | HttpError | SvelteKitError | Error} */ ( error ); } diff --git a/packages/kit/test/apps/basics/_test_dependencies/redirect-pkg/index.d.ts b/packages/kit/test/apps/basics/_test_dependencies/redirect-pkg/index.d.ts deleted file mode 100644 index 583653b211d3..000000000000 --- a/packages/kit/test/apps/basics/_test_dependencies/redirect-pkg/index.d.ts +++ /dev/null @@ -1 +0,0 @@ -export function authenticate(redirectUrl: string): never; diff --git a/packages/kit/test/apps/basics/_test_dependencies/redirect-pkg/package.json b/packages/kit/test/apps/basics/_test_dependencies/redirect-pkg/package.json deleted file mode 100644 index c9ef12f0be31..000000000000 --- a/packages/kit/test/apps/basics/_test_dependencies/redirect-pkg/package.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "redirect-pkg", - "private": true, - "version": "1.0.0", - "main": "index.js", - "types": "index.d.ts", - "files": [ - "index.js", - "index.d.ts" - ], - "type": "module", - "peerDependencies": { - "@sveltejs/kit": "workspace:*" - } -} diff --git a/packages/kit/test/apps/basics/package.json b/packages/kit/test/apps/basics/package.json index 4bcdd9c87f1b..2e741aabeaac 100644 --- a/packages/kit/test/apps/basics/package.json +++ b/packages/kit/test/apps/basics/package.json @@ -22,7 +22,7 @@ "cross-env": "catalog:", "svelte": "^5.23.1", "svelte-check": "^4.1.1", - "redirect-pkg": "file:./_test_dependencies/redirect-pkg", + "test-redirect-importer": "workspace:*", "typescript": "^5.5.4", "vite": "catalog:" }, diff --git a/packages/kit/test/apps/basics/src/routes/redirect/package/+page.server.js b/packages/kit/test/apps/basics/src/routes/redirect/package/+page.server.js index 36cbc83ac6c7..ebadf0415f09 100644 --- a/packages/kit/test/apps/basics/src/routes/redirect/package/+page.server.js +++ b/packages/kit/test/apps/basics/src/routes/redirect/package/+page.server.js @@ -1,4 +1,4 @@ -import { authenticate } from 'redirect-pkg'; +import { authenticate } from 'test-redirect-importer'; export function load() { authenticate('/redirect/c'); diff --git a/packages/kit/tsconfig.json b/packages/kit/tsconfig.json index 154c2a7fbfa9..155d34d9eaa9 100644 --- a/packages/kit/tsconfig.json +++ b/packages/kit/tsconfig.json @@ -11,6 +11,8 @@ "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"], // internal use only "types": ["./src/types/internal.d.ts"] }, diff --git a/packages/kit/test/apps/basics/_test_dependencies/redirect-pkg/index.js b/packages/test-redirect-importer/index.js similarity index 55% rename from packages/kit/test/apps/basics/_test_dependencies/redirect-pkg/index.js rename to packages/test-redirect-importer/index.js index 08645a5209d5..6ef56c424795 100644 --- a/packages/kit/test/apps/basics/_test_dependencies/redirect-pkg/index.js +++ b/packages/test-redirect-importer/index.js @@ -1,5 +1,8 @@ import { redirect } from '@sveltejs/kit'; +// This exists to check that an external package importing `redirect` +// will get something that satisfies the relevant `instanceof` checks + /** * @param {string} redirectUrl * @returns {never} diff --git a/packages/test-redirect-importer/package.json b/packages/test-redirect-importer/package.json new file mode 100644 index 000000000000..b8cc3d4ed729 --- /dev/null +++ b/packages/test-redirect-importer/package.json @@ -0,0 +1,12 @@ +{ + "name": "test-redirect-importer", + "version": "0.0.1", + "private": true, + "type": "module", + "exports": { + ".": "./index.js" + }, + "dependencies": { + "@sveltejs/kit": "workspace:*" + } +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 79fbf1aab031..dc3b5400e2e4 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -412,9 +412,6 @@ importers: sirv: specifier: ^3.0.0 version: 3.0.0 - vitefu: - specifier: ^1.0.6 - version: 1.0.6(vite@6.3.5(@types/node@18.19.50)(lightningcss@1.30.1)) devDependencies: '@playwright/test': specifier: 'catalog:' @@ -494,15 +491,15 @@ importers: cross-env: specifier: 'catalog:' version: 7.0.3 - redirect-pkg: - specifier: file:./_test_dependencies/redirect-pkg - version: file:packages/kit/test/apps/basics/_test_dependencies/redirect-pkg(@sveltejs/kit@packages+kit) svelte: specifier: ^5.23.1 version: 5.23.1 svelte-check: specifier: ^4.1.1 version: 4.1.1(picomatch@4.0.2)(svelte@5.23.1)(typescript@5.6.3) + test-redirect-importer: + specifier: workspace:* + version: link:../../../../test-redirect-importer typescript: specifier: ^5.5.4 version: 5.6.3 @@ -510,12 +507,6 @@ importers: specifier: 'catalog:' version: 6.3.5(@types/node@18.19.50)(lightningcss@1.30.1) - packages/kit/test/apps/basics/_test_dependencies/redirect-pkg: - dependencies: - '@sveltejs/kit': - specifier: workspace:* - version: link:../../../../.. - packages/kit/test/apps/dev-only: devDependencies: '@sveltejs/kit': @@ -1171,6 +1162,12 @@ importers: specifier: ^0.5.6 version: 0.5.6 + packages/test-redirect-importer: + dependencies: + '@sveltejs/kit': + specifier: workspace:* + version: link:../kit + playgrounds/basic: devDependencies: '@sveltejs/adapter-auto': @@ -3972,11 +3969,6 @@ packages: resolution: {integrity: sha512-GkMg9uOTpIWWKbSsgwb5fA4EavTR+SG/PMPoAY8hkhHfEEY0/vqljY+XHqtDf2cr2IJtoNRDbrrEpZUiZCkYRw==} engines: {node: '>= 14.16.0'} - redirect-pkg@file:packages/kit/test/apps/basics/_test_dependencies/redirect-pkg: - resolution: {directory: packages/kit/test/apps/basics/_test_dependencies/redirect-pkg, type: directory} - peerDependencies: - '@sveltejs/kit': workspace:* - regenerator-runtime@0.14.1: resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} @@ -7307,10 +7299,6 @@ snapshots: readdirp@4.0.1: {} - redirect-pkg@file:packages/kit/test/apps/basics/_test_dependencies/redirect-pkg(@sveltejs/kit@packages+kit): - dependencies: - '@sveltejs/kit': link:packages/kit - regenerator-runtime@0.14.1: {} regexparam@3.0.0: {} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 22100cc6619e..5ad4aae36e92 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -3,7 +3,6 @@ packages: - 'packages/adapter-cloudflare/test/apps/*' - 'packages/adapter-static/test/apps/*' - 'packages/kit/test/apps/*' - - 'packages/kit/test/apps/basics/_test_dependencies/redirect-pkg' - 'packages/kit/test/prerendering/*' - 'packages/kit/test/build-errors/**' - 'packages/kit/test/build-errors/apps/*' @@ -16,4 +15,4 @@ catalog: '@sveltejs/vite-plugin-svelte': '^6.0.0-next.0' 'cross-env': '^7.0.3' 'vitest': '^3.2.3' - 'vite': '^6.3.5' \ No newline at end of file + 'vite': '^6.3.5'