diff --git a/.changeset/legacy-env-imports.md b/.changeset/legacy-env-imports.md new file mode 100644 index 000000000000..4ca3ffec668b --- /dev/null +++ b/.changeset/legacy-env-imports.md @@ -0,0 +1,5 @@ +--- +'@sveltejs/kit': minor +--- + +feat: reinstate `$env/static/private`, `$env/dynamic/private`, `$env/static/public`, `$env/dynamic/public` and `$app/environment` as deprecated aliases for `$app/env/private` `$app/env/public` and `$app/env` diff --git a/documentation/docs/20-core-concepts/70-environment-variables.md b/documentation/docs/20-core-concepts/70-environment-variables.md index d785468585c0..c98ec820950e 100644 --- a/documentation/docs/20-core-concepts/70-environment-variables.md +++ b/documentation/docs/20-core-concepts/70-environment-variables.md @@ -17,7 +17,7 @@ After following the setup below, they can be imported via the following modules: - [`$app/env/public`]($app-env-public) > [!LEGACY] -> The `$env/*` modules, along with `$app/environment` were removed in SvelteKit 3 in favour of explicit environment variables that were added in SvelteKit 2.62 as an experimental option. +> 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 diff --git a/documentation/docs/98-reference/20-$app-environment.md b/documentation/docs/98-reference/20-$app-environment.md index 196d3061d844..2968e7f45367 100644 --- a/documentation/docs/98-reference/20-$app-environment.md +++ b/documentation/docs/98-reference/20-$app-environment.md @@ -2,4 +2,4 @@ title: $app/environment --- -This module was removed in SvelteKit 3 in favour of [$app/env]($app-env). +This module was deprecated in SvelteKit 3 in favour of [$app/env]($app-env). It will be removed in SvelteKit 4. diff --git a/documentation/docs/98-reference/25-$env-dynamic-private.md b/documentation/docs/98-reference/25-$env-dynamic-private.md index 127493349119..72b7391d4881 100644 --- a/documentation/docs/98-reference/25-$env-dynamic-private.md +++ b/documentation/docs/98-reference/25-$env-dynamic-private.md @@ -2,4 +2,4 @@ title: $env/dynamic/private --- -This module was removed in SvelteKit 3 in favour of [explicit environment variables](environment-variables). +This module was deprecated in SvelteKit 3 in favour of [explicit environment variables](environment-variables). It will be removed in SvelteKit 4. diff --git a/documentation/docs/98-reference/25-$env-dynamic-public.md b/documentation/docs/98-reference/25-$env-dynamic-public.md index 1f495fd66cd1..793995e9ba96 100644 --- a/documentation/docs/98-reference/25-$env-dynamic-public.md +++ b/documentation/docs/98-reference/25-$env-dynamic-public.md @@ -2,4 +2,4 @@ title: $env/dynamic/public --- -This module was removed in SvelteKit 3 in favour of [explicit environment variables](environment-variables). +This module was deprecated in SvelteKit 3 in favour of [explicit environment variables](environment-variables). It will be removed in SvelteKit 4. diff --git a/documentation/docs/98-reference/25-$env-static-private.md b/documentation/docs/98-reference/25-$env-static-private.md index ae16f1389960..19b14e4e2ce1 100644 --- a/documentation/docs/98-reference/25-$env-static-private.md +++ b/documentation/docs/98-reference/25-$env-static-private.md @@ -2,4 +2,4 @@ title: $env/static/private --- -This module was removed in SvelteKit 3 in favour of [explicit environment variables](environment-variables). +This module was deprecated in SvelteKit 3 in favour of [explicit environment variables](environment-variables). It will be removed in SvelteKit 4. diff --git a/documentation/docs/98-reference/25-$env-static-public.md b/documentation/docs/98-reference/25-$env-static-public.md index d55ec39cb150..7e936817d3d5 100644 --- a/documentation/docs/98-reference/25-$env-static-public.md +++ b/documentation/docs/98-reference/25-$env-static-public.md @@ -2,4 +2,4 @@ title: $env/static/public --- -This module was removed in SvelteKit 3 in favour of [explicit environment variables](environment-variables). +This module was deprecated in SvelteKit 3 in favour of [explicit environment variables](environment-variables). It will be removed in SvelteKit 4. diff --git a/packages/kit/src/exports/vite/index.js b/packages/kit/src/exports/vite/index.js index 56479d7ebe1d..f3d69b9957ca 100644 --- a/packages/kit/src/exports/vite/index.js +++ b/packages/kit/src/exports/vite/index.js @@ -97,6 +97,7 @@ const enforced_config = { resolve: { alias: { $app: true, + $env: true, $lib: true, '$service-worker': true } @@ -386,6 +387,7 @@ function kit({ svelte_config }) { alias: [ { find: '__SERVER__', replacement: `${generated}/server` }, { find: '$app', replacement: `${runtime_directory}/app` }, + { find: '$env', replacement: `${runtime_directory}/env` }, ...get_config_aliases(kit, root) ] }, diff --git a/packages/kit/src/runtime/app/environment/index.js b/packages/kit/src/runtime/app/environment/index.js index d57e433f52fa..573ed729d892 100644 --- a/packages/kit/src/runtime/app/environment/index.js +++ b/packages/kit/src/runtime/app/environment/index.js @@ -1,6 +1,6 @@ -import { dev } from '../env/index.js'; +import { DEV } from 'esm-env'; export * from '../env/index.js'; -if (dev) { - console.warn('`$app/environment` is now `$app/env`'); +if (DEV) { + console.warn('`$app/environment` is deprecated, use `$app/env` instead'); } diff --git a/packages/kit/src/runtime/env/dynamic/private.js b/packages/kit/src/runtime/env/dynamic/private.js new file mode 100644 index 000000000000..d1875571ac66 --- /dev/null +++ b/packages/kit/src/runtime/env/dynamic/private.js @@ -0,0 +1,7 @@ +import { DEV } from 'esm-env'; +import * as env from '../../app/env/private.js'; +export { env }; + +if (DEV) { + console.warn('`$env/dynamic/private` is deprecated, use `$app/env/private` instead'); +} diff --git a/packages/kit/src/runtime/env/dynamic/public.js b/packages/kit/src/runtime/env/dynamic/public.js new file mode 100644 index 000000000000..1c77e1e80b83 --- /dev/null +++ b/packages/kit/src/runtime/env/dynamic/public.js @@ -0,0 +1,7 @@ +import { DEV } from 'esm-env'; +import * as env from '../../app/env/public/index.js'; +export { env }; + +if (DEV) { + console.warn('`$env/dynamic/public` is deprecated, use `$app/env/public` instead'); +} diff --git a/packages/kit/src/runtime/env/static/private.js b/packages/kit/src/runtime/env/static/private.js new file mode 100644 index 000000000000..27beb05e7236 --- /dev/null +++ b/packages/kit/src/runtime/env/static/private.js @@ -0,0 +1,6 @@ +import { DEV } from 'esm-env'; +export * from '../../app/env/private.js'; + +if (DEV) { + console.warn('`$env/static/private` is deprecated, use `$app/env/private` instead'); +} diff --git a/packages/kit/src/runtime/env/static/public.js b/packages/kit/src/runtime/env/static/public.js new file mode 100644 index 000000000000..b5fc00d88707 --- /dev/null +++ b/packages/kit/src/runtime/env/static/public.js @@ -0,0 +1,6 @@ +import { DEV } from 'esm-env'; +export * from '../../app/env/public/index.js'; + +if (DEV) { + console.warn('`$env/static/public` is deprecated, use `$app/env/public` instead'); +} diff --git a/packages/kit/test/apps/basics/src/routes/env/legacy/+page.server.js b/packages/kit/test/apps/basics/src/routes/env/legacy/+page.server.js new file mode 100644 index 000000000000..336ff9408ba0 --- /dev/null +++ b/packages/kit/test/apps/basics/src/routes/env/legacy/+page.server.js @@ -0,0 +1,11 @@ +// @ts-expect-error no type definitions since deprecated +import { PRIVATE_STATIC } from '$env/static/private'; +// @ts-expect-error no type definitions since deprecated +import { env as dynamic_private } from '$env/dynamic/private'; + +export function load() { + return { + PRIVATE_STATIC, + PRIVATE_DYNAMIC: dynamic_private.PRIVATE_DYNAMIC + }; +} diff --git a/packages/kit/test/apps/basics/src/routes/env/legacy/+page.svelte b/packages/kit/test/apps/basics/src/routes/env/legacy/+page.svelte new file mode 100644 index 000000000000..730af04c99eb --- /dev/null +++ b/packages/kit/test/apps/basics/src/routes/env/legacy/+page.svelte @@ -0,0 +1,15 @@ + + +
PRIVATE_STATIC: {data.PRIVATE_STATIC}
+PRIVATE_DYNAMIC: {data.PRIVATE_DYNAMIC}
+ +PUBLIC_STATIC: {PUBLIC_STATIC}
+PUBLIC_DYNAMIC: {dynamic_public.PUBLIC_DYNAMIC}
diff --git a/packages/kit/test/apps/basics/test/test.js b/packages/kit/test/apps/basics/test/test.js index b6dac3ac1f07..2245869c1292 100644 --- a/packages/kit/test/apps/basics/test/test.js +++ b/packages/kit/test/apps/basics/test/test.js @@ -210,6 +210,24 @@ test.describe('$app/env', () => { 'PUBLIC_DYNAMIC: accessible anywhere/evaluated at run time' ); }); + + test('legacy $env/* imports still work', async ({ page }) => { + await page.goto('/env/legacy'); + + await expect(page.locator('#static-private')).toHaveText( + 'PRIVATE_STATIC: accessible to server-side code/replaced at build time' + ); + await expect(page.locator('#dynamic-private')).toHaveText( + 'PRIVATE_DYNAMIC: accessible to server-side code/evaluated at run time' + ); + + await expect(page.locator('#static-public')).toHaveText( + 'PUBLIC_STATIC: accessible anywhere/replaced at build time' + ); + await expect(page.locator('#dynamic-public')).toHaveText( + 'PUBLIC_DYNAMIC: accessible anywhere/evaluated at run time' + ); + }); }); test.describe('Load', () => {