diff --git a/.changeset/slow-files-stare.md b/.changeset/slow-files-stare.md new file mode 100644 index 000000000000..e68f7eaee10f --- /dev/null +++ b/.changeset/slow-files-stare.md @@ -0,0 +1,5 @@ +--- +'@sveltejs/kit': patch +--- + +[fix] allow SvelteKit to be used without bundling diff --git a/packages/kit/package.json b/packages/kit/package.json index 12e0eb45144f..f1cf41c77678 100644 --- a/packages/kit/package.json +++ b/packages/kit/package.json @@ -14,6 +14,7 @@ "@types/cookie": "^0.5.1", "cookie": "^0.5.0", "devalue": "^4.2.0", + "esm-env": "^1.0.0", "kleur": "^4.1.5", "magic-string": "^0.27.0", "mime": "^3.0.0", diff --git a/packages/kit/src/exports/index.js b/packages/kit/src/exports/index.js index 9efee4666bfa..63326a7fbcbf 100644 --- a/packages/kit/src/exports/index.js +++ b/packages/kit/src/exports/index.js @@ -1,4 +1,5 @@ import { HttpError, Redirect, ActionFailure } from '../runtime/control.js'; +import { BROWSER, DEV } from 'esm-env'; // For some reason we need to type the params as well here, // JSdoc doesn't seem to like @type with function overloads @@ -8,10 +9,7 @@ import { HttpError, Redirect, ActionFailure } from '../runtime/control.js'; * @param {any} message */ export function error(status, message) { - if ( - (!__SVELTEKIT_BROWSER__ || __SVELTEKIT_DEV__) && - (isNaN(status) || status < 400 || status > 599) - ) { + if ((!BROWSER || DEV) && (isNaN(status) || status < 400 || status > 599)) { throw new Error(`HTTP error status codes must be between 400 and 599 — ${status} is invalid`); } @@ -20,10 +18,7 @@ export function error(status, message) { /** @type {import('@sveltejs/kit').redirect} */ export function redirect(status, location) { - if ( - (!__SVELTEKIT_BROWSER__ || __SVELTEKIT_DEV__) && - (isNaN(status) || status < 300 || status > 308) - ) { + if ((!BROWSER || DEV) && (isNaN(status) || status < 300 || status > 308)) { throw new Error('Invalid status code'); } diff --git a/packages/kit/src/exports/vite/build/utils.js b/packages/kit/src/exports/vite/build/utils.js index 00877dc383d3..1d2a49743cd1 100644 --- a/packages/kit/src/exports/vite/build/utils.js +++ b/packages/kit/src/exports/vite/build/utils.js @@ -146,8 +146,6 @@ export function get_default_build_config({ config, input, ssr, outDir }) { __SVELTEKIT_ADAPTER_NAME__: JSON.stringify(config.kit.adapter?.name), __SVELTEKIT_APP_VERSION_FILE__: JSON.stringify(`${config.kit.appDir}/version.json`), __SVELTEKIT_APP_VERSION_POLL_INTERVAL__: JSON.stringify(config.kit.version.pollInterval), - __SVELTEKIT_BROWSER__: ssr ? 'false' : 'true', - __SVELTEKIT_DEV__: 'false', __SVELTEKIT_EMBEDDED__: config.kit.embedded ? 'true' : 'false' }, publicDir: ssr ? false : config.kit.files.assets, diff --git a/packages/kit/src/exports/vite/dev/index.js b/packages/kit/src/exports/vite/dev/index.js index aba100ef3fa6..56e148509134 100644 --- a/packages/kit/src/exports/vite/dev/index.js +++ b/packages/kit/src/exports/vite/dev/index.js @@ -26,12 +26,6 @@ const cwd = process.cwd(); export async function dev(vite, vite_config, svelte_config) { installPolyfills(); - // @ts-expect-error - globalThis.__SVELTEKIT_BROWSER__ = false; - - // @ts-expect-error - globalThis.__SVELTEKIT_DEV__ = true; - sync.init(svelte_config, vite_config.mode); /** @type {import('types').Respond} */ diff --git a/packages/kit/src/exports/vite/index.js b/packages/kit/src/exports/vite/index.js index 78221d9d30e6..729c51017a2a 100644 --- a/packages/kit/src/exports/vite/index.js +++ b/packages/kit/src/exports/vite/index.js @@ -261,8 +261,6 @@ function kit({ svelte_config }) { }, define: { __SVELTEKIT_APP_VERSION_POLL_INTERVAL__: '0', - __SVELTEKIT_BROWSER__: config_env.ssrBuild ? 'false' : 'true', - __SVELTEKIT_DEV__: 'true', __SVELTEKIT_EMBEDDED__: svelte_config.kit.embedded ? 'true' : 'false' }, publicDir: svelte_config.kit.files.assets, diff --git a/packages/kit/src/runtime/app/environment.js b/packages/kit/src/runtime/app/environment.js index b8f69708afae..e9a45aed151f 100644 --- a/packages/kit/src/runtime/app/environment.js +++ b/packages/kit/src/runtime/app/environment.js @@ -1,11 +1,13 @@ +import { BROWSER, DEV } from 'esm-env'; + /** * @type {import('$app/environment').browser} */ -export const browser = !import.meta.env.SSR; +export const browser = BROWSER; /** * @type {import('$app/environment').dev} */ -export const dev = __SVELTEKIT_DEV__; +export const dev = DEV; export { building, version } from '../env.js'; diff --git a/packages/kit/src/runtime/app/forms.js b/packages/kit/src/runtime/app/forms.js index 841c78c54475..734f91b993da 100644 --- a/packages/kit/src/runtime/app/forms.js +++ b/packages/kit/src/runtime/app/forms.js @@ -1,6 +1,7 @@ import * as devalue from 'devalue'; import { client } from '../client/singletons.js'; import { invalidateAll } from './navigation.js'; +import { BROWSER, DEV } from 'esm-env'; /** * @param {string} name @@ -11,10 +12,8 @@ function guard(name) { }; } -const ssr = import.meta.env.SSR; - /** @type {import('$app/forms').applyAction} */ -export const applyAction = ssr ? guard('applyAction') : client.apply_action; +export const applyAction = BROWSER ? client.apply_action : guard('applyAction'); /** @type {import('$app/forms').deserialize} */ export function deserialize(result) { @@ -27,7 +26,7 @@ export function deserialize(result) { /** @type {import('$app/forms').enhance} */ export function enhance(form, submit = () => {}) { - if (__SVELTEKIT_DEV__ && form.method !== 'post') { + if (DEV && form.method !== 'post') { throw new Error('use:enhance can only be used on