@sveltejs/kit 2.53.1 → 2.53.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sveltejs/kit",
3
- "version": "2.53.1",
3
+ "version": "2.53.2",
4
4
  "description": "SvelteKit is the fastest way to build Svelte apps",
5
5
  "keywords": [
6
6
  "framework",
package/src/constants.js CHANGED
@@ -8,4 +8,6 @@ export const GENERATED_COMMENT = '// this file is generated — do not edit it\n
8
8
 
9
9
  export const ENDPOINT_METHODS = ['GET', 'POST', 'PUT', 'PATCH', 'DELETE', 'OPTIONS', 'HEAD'];
10
10
 
11
+ export const MUTATIVE_METHODS = ['POST', 'PUT', 'PATCH', 'DELETE'];
12
+
11
13
  export const PAGE_METHODS = ['GET', 'POST', 'HEAD'];
@@ -16,6 +16,7 @@ import {
16
16
  PrerenderOption,
17
17
  RequestOptions,
18
18
  RouteSegment,
19
+ DeepPartial,
19
20
  IsAny
20
21
  } from '../types/private.js';
21
22
  import { BuildData, SSRNodeLoader, SSRRoute, ValidatedConfig } from 'types';
@@ -1910,9 +1911,9 @@ type InputElementProps<T extends keyof InputTypeMap> = T extends 'checkbox' | 'r
1910
1911
 
1911
1912
  type RemoteFormFieldMethods<T> = {
1912
1913
  /** The values that will be submitted */
1913
- value(): T;
1914
+ value(): DeepPartial<T>;
1914
1915
  /** Set the values that will be submitted */
1915
- set(input: T): T;
1916
+ set(input: DeepPartial<T>): DeepPartial<T>;
1916
1917
  /** Validation issues, if any */
1917
1918
  issues(): RemoteFormIssue[] | undefined;
1918
1919
  };
@@ -2110,7 +2111,7 @@ export type RemoteForm<Input extends RemoteFormInput | void, Output> = {
2110
2111
  * The return value of a remote `command` function. See [Remote functions](https://svelte.dev/docs/kit/remote-functions#command) for full documentation.
2111
2112
  */
2112
2113
  export type RemoteCommand<Input, Output> = {
2113
- (arg: Input): Promise<Awaited<Output>> & {
2114
+ (arg: undefined extends Input ? Input | void : Input): Promise<Awaited<Output>> & {
2114
2115
  updates(...queries: Array<RemoteQuery<any> | RemoteQueryOverride>): Promise<Awaited<Output>>;
2115
2116
  };
2116
2117
  /** The number of pending command executions */
@@ -2180,11 +2181,15 @@ export interface RemoteQueryOverride {
2180
2181
  /**
2181
2182
  * The return value of a remote `prerender` function. See [Remote functions](https://svelte.dev/docs/kit/remote-functions#prerender) for full documentation.
2182
2183
  */
2183
- export type RemotePrerenderFunction<Input, Output> = (arg: Input) => RemoteResource<Output>;
2184
+ export type RemotePrerenderFunction<Input, Output> = (
2185
+ arg: undefined extends Input ? Input | void : Input
2186
+ ) => RemoteResource<Output>;
2184
2187
 
2185
2188
  /**
2186
2189
  * The return value of a remote `query` function. See [Remote functions](https://svelte.dev/docs/kit/remote-functions#query) for full documentation.
2187
2190
  */
2188
- export type RemoteQueryFunction<Input, Output> = (arg: Input) => RemoteQuery<Output>;
2191
+ export type RemoteQueryFunction<Input, Output> = (
2192
+ arg: undefined extends Input ? Input | void : Input
2193
+ ) => RemoteQuery<Output>;
2189
2194
 
2190
2195
  export * from './index.js';
@@ -3,6 +3,7 @@
3
3
  /** @import { StandardSchemaV1 } from '@standard-schema/spec' */
4
4
  import { get_request_store } from '@sveltejs/kit/internal/server';
5
5
  import { create_validator, run_remote_function } from './shared.js';
6
+ import { MUTATIVE_METHODS } from '../../../../constants.js';
6
7
 
7
8
  /**
8
9
  * Creates a remote command. When called from the browser, the function will be invoked on the server via a `fetch` call.
@@ -64,15 +65,10 @@ export function command(validate_or_fn, maybe_fn) {
64
65
  const wrapper = (arg) => {
65
66
  const { event, state } = get_request_store();
66
67
 
67
- if (state.is_endpoint_request) {
68
- if (!['POST', 'PUT', 'PATCH', 'DELETE'].includes(event.request.method)) {
69
- throw new Error(
70
- `Cannot call a command (\`${__.name}(${maybe_fn ? '...' : ''})\`) from a ${event.request.method} handler`
71
- );
72
- }
73
- } else if (!event.isRemoteRequest) {
68
+ if (!state.allows_commands) {
69
+ const disallowed_method = !MUTATIVE_METHODS.includes(event.request.method);
74
70
  throw new Error(
75
- `Cannot call a command (\`${__.name}(${maybe_fn ? '...' : ''})\`) during server-side rendering`
71
+ `Cannot call a command (\`${__.name}(${maybe_fn ? '...' : ''})\`) ${disallowed_method ? `from a ${event.request.method} handler or ` : ''}during server-side rendering`
76
72
  );
77
73
  }
78
74
 
@@ -176,24 +176,28 @@ export function form(validate_or_fn, maybe_fn) {
176
176
 
177
177
  Object.defineProperty(instance, 'fields', {
178
178
  get() {
179
- const data = get_cache(__)?.[''];
180
- const issues = flatten_issues(data?.issues ?? []);
181
-
182
179
  return create_field_proxy(
183
180
  {},
184
- () => data?.input ?? {},
181
+ () => get_cache(__)?.['']?.input ?? {},
185
182
  (path, value) => {
183
+ const cache = get_cache(__);
184
+ const data = cache[''];
185
+
186
186
  if (data?.submission) {
187
187
  // don't override a submission
188
188
  return;
189
189
  }
190
190
 
191
- const input =
192
- path.length === 0 ? value : deep_set(data?.input ?? {}, path.map(String), value);
191
+ if (path.length === 0) {
192
+ (cache[''] ??= {}).input = value;
193
+ return;
194
+ }
193
195
 
194
- (get_cache(__)[''] ??= {}).input = input;
196
+ const input = data?.input ?? {};
197
+ deep_set(input, path.map(String), value);
198
+ (cache[''] ??= {}).input = input;
195
199
  },
196
- () => issues
200
+ () => flatten_issues(get_cache(__)?.['']?.issues ?? [])
197
201
  );
198
202
  }
199
203
  });
@@ -6,7 +6,7 @@ import * as devalue from 'devalue';
6
6
  import { HttpError } from '@sveltejs/kit/internal';
7
7
  import { app } from '../client.js';
8
8
  import { stringify_remote_arg } from '../../shared.js';
9
- import { refresh_queries, release_overrides } from './shared.svelte.js';
9
+ import { get_remote_request_headers, refresh_queries, release_overrides } from './shared.svelte.js';
10
10
 
11
11
  /**
12
12
  * Client-version of the `command` function from `$app/server`.
@@ -27,6 +27,13 @@ export function command(id) {
27
27
  // Increment pending count when command starts
28
28
  pending_count++;
29
29
 
30
+ // Noone should call commands during rendering but belts and braces.
31
+ // Do this here, after await Svelte' reactivity context is gone.
32
+ const headers = {
33
+ 'Content-Type': 'application/json',
34
+ ...get_remote_request_headers()
35
+ };
36
+
30
37
  /** @type {Promise<any> & { updates: (...args: any[]) => any }} */
31
38
  const promise = (async () => {
32
39
  try {
@@ -39,11 +46,7 @@ export function command(id) {
39
46
  payload: stringify_remote_arg(arg, app.hooks.transport),
40
47
  refreshes: updates.map((u) => u._key)
41
48
  }),
42
- headers: {
43
- 'Content-Type': 'application/json',
44
- 'x-sveltekit-pathname': location.pathname,
45
- 'x-sveltekit-search': location.search
46
- }
49
+ headers
47
50
  });
48
51
 
49
52
  if (!response.ok) {
@@ -201,6 +201,7 @@ export function form(id) {
201
201
  method: 'POST',
202
202
  headers: {
203
203
  'Content-Type': BINARY_FORM_CONTENT_TYPE,
204
+ // Forms cannot be called during rendering, so it's save to use location here
204
205
  'x-sveltekit-pathname': location.pathname,
205
206
  'x-sveltekit-search': location.search
206
207
  },
@@ -524,6 +525,7 @@ export function form(id) {
524
525
  method: 'POST',
525
526
  headers: {
526
527
  'Content-Type': BINARY_FORM_CONTENT_TYPE,
528
+ // Validation should not be and will not be called during rendering, so it's save to use location here
527
529
  'x-sveltekit-pathname': location.pathname,
528
530
  'x-sveltekit-search': location.search
529
531
  },
@@ -3,7 +3,11 @@ import { version } from '__sveltekit/environment';
3
3
  import * as devalue from 'devalue';
4
4
  import { DEV } from 'esm-env';
5
5
  import { app, remote_responses } from '../client.js';
6
- import { create_remote_function, remote_request } from './shared.svelte.js';
6
+ import {
7
+ create_remote_function,
8
+ get_remote_request_headers,
9
+ remote_request
10
+ } from './shared.svelte.js';
7
11
 
8
12
  // Initialize Cache API for prerender functions
9
13
  const CACHE_NAME = DEV ? `sveltekit:${Date.now()}` : `sveltekit:${version}`;
@@ -150,6 +154,9 @@ export function prerender(id) {
150
154
  return data;
151
155
  }
152
156
 
157
+ // Do this here, after await Svelte' reactivity context is gone.
158
+ const headers = get_remote_request_headers();
159
+
153
160
  // Check the Cache API first
154
161
  if (prerender_cache) {
155
162
  try {
@@ -164,7 +171,7 @@ export function prerender(id) {
164
171
  }
165
172
  }
166
173
 
167
- const encoded = await remote_request(url);
174
+ const encoded = await remote_request(url, headers);
168
175
 
169
176
  // For successful prerender requests, save to cache
170
177
  if (prerender_cache) {
@@ -3,7 +3,11 @@
3
3
  import { app_dir, base } from '$app/paths/internal/client';
4
4
  import { app, goto, query_map, remote_responses } from '../client.js';
5
5
  import { tick } from 'svelte';
6
- import { create_remote_function, remote_request } from './shared.svelte.js';
6
+ import {
7
+ create_remote_function,
8
+ get_remote_request_headers,
9
+ remote_request
10
+ } from './shared.svelte.js';
7
11
  import * as devalue from 'devalue';
8
12
  import { HttpError, Redirect } from '@sveltejs/kit/internal';
9
13
  import { DEV } from 'esm-env';
@@ -31,7 +35,7 @@ export function query(id) {
31
35
 
32
36
  const url = `${base}/${app_dir}/remote/${id}${payload ? `?payload=${payload}` : ''}`;
33
37
 
34
- const result = await remote_request(url);
38
+ const result = await remote_request(url, get_remote_request_headers());
35
39
  return devalue.parse(result, app.decoders);
36
40
  });
37
41
  });
@@ -63,6 +67,15 @@ export function query_batch(id) {
63
67
 
64
68
  if (batching.size > 1) return;
65
69
 
70
+ // Do this here, after await Svelte' reactivity context is gone.
71
+ // TODO is it possible to have batches of the same key
72
+ // but in different forks/async contexts and in the same macrotask?
73
+ // If so this would potentially be buggy
74
+ const headers = {
75
+ 'Content-Type': 'application/json',
76
+ ...get_remote_request_headers()
77
+ };
78
+
66
79
  // Wait for the next macrotask - don't use microtask as Svelte runtime uses these to collect changes and flush them,
67
80
  // and flushes could reveal more queries that should be batched.
68
81
  setTimeout(async () => {
@@ -76,9 +89,7 @@ export function query_batch(id) {
76
89
  body: JSON.stringify({
77
90
  payloads: Array.from(batched.keys())
78
91
  }),
79
- headers: {
80
- 'Content-Type': 'application/json'
81
- }
92
+ headers
82
93
  });
83
94
 
84
95
  if (!response.ok) {
@@ -4,21 +4,32 @@
4
4
  import * as devalue from 'devalue';
5
5
  import { app, goto, query_map, remote_responses } from '../client.js';
6
6
  import { HttpError, Redirect } from '@sveltejs/kit/internal';
7
- import { tick } from 'svelte';
7
+ import { tick, untrack } from 'svelte';
8
8
  import { create_remote_key, stringify_remote_arg } from '../../shared.js';
9
+ import { page } from '../state.svelte.js';
10
+
11
+ /**
12
+ * @returns {{ 'x-sveltekit-pathname': string, 'x-sveltekit-search': string }}
13
+ */
14
+ export function get_remote_request_headers() {
15
+ // This will be the correct value of the current or soon-current url,
16
+ // even in forks because it's state-based - therefore not using window.location.
17
+ // Use untrack(...) to Avoid accidental reactive dependency on pathname/search
18
+ return untrack(() => ({
19
+ 'x-sveltekit-pathname': page.url.pathname,
20
+ 'x-sveltekit-search': page.url.search
21
+ }));
22
+ }
9
23
 
10
24
  /**
11
- *
12
25
  * @param {string} url
26
+ * @param {HeadersInit} headers
13
27
  */
14
- export async function remote_request(url) {
28
+ export async function remote_request(url, headers) {
15
29
  const response = await fetch(url, {
16
30
  headers: {
17
- // TODO in future, when we support forking, we will likely need
18
- // to grab this from context as queries will run before
19
- // `location.pathname` is updated
20
- 'x-sveltekit-pathname': location.pathname,
21
- 'x-sveltekit-search': location.search
31
+ 'Content-Type': 'application/json',
32
+ ...headers
22
33
  }
23
34
  });
24
35
 
@@ -41,9 +41,8 @@ export async function render_endpoint(event, event_state, mod, state) {
41
41
  }
42
42
  }
43
43
 
44
- event_state.is_endpoint_request = true;
45
-
46
44
  try {
45
+ event_state.allows_commands = true;
47
46
  const response = await with_request_store({ event, state: event_state }, () =>
48
47
  handler(/** @type {import('@sveltejs/kit').RequestEvent<Record<string, any>>} */ (event))
49
48
  );
@@ -266,6 +266,7 @@ async function call_action(event, event_state, actions) {
266
266
  },
267
267
  fn: async (current) => {
268
268
  const traced_event = merge_tracing(event, current);
269
+ event_state.allows_commands = true;
269
270
  const result = await with_request_store({ event: traced_event, state: event_state }, () =>
270
271
  action(traced_event)
271
272
  );
@@ -200,6 +200,7 @@ export async function render_response({
200
200
  };
201
201
  }
202
202
 
203
+ event_state.allows_commands = false;
203
204
  rendered = await with_request_store({ event, state: event_state }, async () => {
204
205
  // use relative paths during rendering, so that the resulting HTML is as
205
206
  // portable as possible, but reset afterwards
@@ -39,6 +39,7 @@ import { server_data_serializer } from './page/data_serializer.js';
39
39
  import { get_remote_id, handle_remote_call } from './remote.js';
40
40
  import { record_span } from '../telemetry/record_span.js';
41
41
  import { otel } from '../telemetry/otel.js';
42
+ import { MUTATIVE_METHODS } from '../../constants.js';
42
43
 
43
44
  /* global __SVELTEKIT_ADAPTER_NAME__ */
44
45
 
@@ -419,6 +420,7 @@ export async function internal_respond(request, options, manifest, state) {
419
420
  current: root_span
420
421
  }
421
422
  };
423
+ event_state.allows_commands = MUTATIVE_METHODS.includes(request.method);
422
424
  return await with_request_store({ event: traced_event, state: event_state }, () =>
423
425
  options.hooks.handle({
424
426
  event: traced_event,
@@ -630,7 +630,7 @@ export interface RequestState {
630
630
  form_instances?: Map<any, any>;
631
631
  remote_data?: Map<RemoteInfo, Record<string, MaybePromise<any>>>;
632
632
  refreshes?: Record<string, Promise<any>>;
633
- is_endpoint_request?: boolean;
633
+ allows_commands?: boolean;
634
634
  }
635
635
 
636
636
  export interface RequestStore {
@@ -243,4 +243,12 @@ export interface RouteSegment {
243
243
  /** @default 'never' */
244
244
  export type TrailingSlash = 'never' | 'always' | 'ignore';
245
245
 
246
+ export type DeepPartial<T> = T extends Record<PropertyKey, unknown> | unknown[]
247
+ ? {
248
+ [K in keyof T]?: T[K] extends Record<PropertyKey, unknown> | unknown[]
249
+ ? DeepPartial<T[K]>
250
+ : T[K];
251
+ }
252
+ : T | undefined;
253
+
246
254
  export type IsAny<T> = 0 extends 1 & T ? true : false;
@@ -1,10 +1,43 @@
1
- This module provides access to runtime environment variables, as defined by the platform you're running on. For example if you're using [`adapter-node`](https://github.com/sveltejs/kit/tree/main/packages/adapter-node) (or running [`vite preview`](https://svelte.dev/docs/kit/cli)), this is equivalent to `process.env`. This module only includes variables that _do not_ begin with [`config.kit.env.publicPrefix`](https://svelte.dev/docs/kit/configuration#env) _and do_ start with [`config.kit.env.privatePrefix`](https://svelte.dev/docs/kit/configuration#env) (if configured).
1
+ This module provides access to environment variables set _dynamically_ at runtime and that are limited to _private_ access.
2
2
 
3
- This module cannot be imported into client-side code.
3
+ | | Runtime | Build time |
4
+ | ------- | -------------------------------------------------------------------------- | ------------------------------------------------------------------------ |
5
+ | Private | [`$env/dynamic/private`](https://svelte.dev/docs/kit/$env-dynamic-private) | [`$env/static/private`](https://svelte.dev/docs/kit/$env-static-private) |
6
+ | Public | [`$env/dynamic/public`](https://svelte.dev/docs/kit/$env-dynamic-public) | [`$env/static/public`](https://svelte.dev/docs/kit/$env-static-public) |
7
+
8
+ Dynamic environment variables are defined by the platform you're running on. For example if you're using [`adapter-node`](https://github.com/sveltejs/kit/tree/main/packages/adapter-node) (or running [`vite preview`](https://svelte.dev/docs/kit/cli)), this is equivalent to `process.env`.
9
+
10
+ **_Private_ access:**
11
+
12
+ - This module cannot be imported into client-side code
13
+ - This module includes variables that _do not_ begin with [`config.kit.env.publicPrefix`](https://svelte.dev/docs/kit/configuration#env) _and do_ start with [`config.kit.env.privatePrefix`](https://svelte.dev/docs/kit/configuration#env) (if configured)
14
+
15
+ > [!NOTE] In `dev`, `$env/dynamic` includes environment variables from `.env`. In `prod`, this behavior will depend on your adapter.
16
+
17
+ > [!NOTE] To get correct types, environment variables referenced in your code should be declared (for example in an `.env` file), even if they don't have a value until the app is deployed:
18
+ >
19
+ > ```env
20
+ > MY_FEATURE_FLAG=
21
+ > ```
22
+ >
23
+ > You can override `.env` values from the command line like so:
24
+ >
25
+ > ```sh
26
+ > MY_FEATURE_FLAG="enabled" npm run dev
27
+ > ```
28
+
29
+ For example, given the following runtime environment:
30
+
31
+ ```env
32
+ ENVIRONMENT=production
33
+ PUBLIC_BASE_URL=http://site.com
34
+ ```
35
+
36
+ With the default `publicPrefix` and `privatePrefix`:
4
37
 
5
38
  ```ts
6
39
  import { env } from '$env/dynamic/private';
7
- console.log(env.DEPLOYMENT_SPECIFIC_VARIABLE);
8
- ```
9
40
 
10
- > [!NOTE] In `dev`, `$env/dynamic` always includes environment variables from `.env`. In `prod`, this behavior will depend on your adapter.
41
+ console.log(env.ENVIRONMENT); // => "production"
42
+ console.log(env.PUBLIC_BASE_URL); // => undefined
43
+ ```
@@ -1,8 +1,46 @@
1
- Similar to [`$env/dynamic/private`](https://svelte.dev/docs/kit/$env-dynamic-private), but only includes variables that begin with [`config.kit.env.publicPrefix`](https://svelte.dev/docs/kit/configuration#env) (which defaults to `PUBLIC_`), and can therefore safely be exposed to client-side code.
1
+ This module provides access to environment variables set _dynamically_ at runtime and that are _publicly_ accessible.
2
2
 
3
- Note that public dynamic environment variables must all be sent from the server to the client, causing larger network requests — when possible, use `$env/static/public` instead.
3
+ | | Runtime | Build time |
4
+ | ------- | -------------------------------------------------------------------------- | ------------------------------------------------------------------------ |
5
+ | Private | [`$env/dynamic/private`](https://svelte.dev/docs/kit/$env-dynamic-private) | [`$env/static/private`](https://svelte.dev/docs/kit/$env-static-private) |
6
+ | Public | [`$env/dynamic/public`](https://svelte.dev/docs/kit/$env-dynamic-public) | [`$env/static/public`](https://svelte.dev/docs/kit/$env-static-public) |
7
+
8
+ Dynamic environment variables are defined by the platform you're running on. For example if you're using [`adapter-node`](https://github.com/sveltejs/kit/tree/main/packages/adapter-node) (or running [`vite preview`](https://svelte.dev/docs/kit/cli)), this is equivalent to `process.env`.
9
+
10
+ **_Public_ access:**
11
+
12
+ - This module _can_ be imported into client-side code
13
+ - **Only** variables that begin with [`config.kit.env.publicPrefix`](https://svelte.dev/docs/kit/configuration#env) (which defaults to `PUBLIC_`) are included
14
+
15
+ > [!NOTE] In `dev`, `$env/dynamic` includes environment variables from `.env`. In `prod`, this behavior will depend on your adapter.
16
+
17
+ > [!NOTE] To get correct types, environment variables referenced in your code should be declared (for example in an `.env` file), even if they don't have a value until the app is deployed:
18
+ >
19
+ > ```env
20
+ > MY_FEATURE_FLAG=
21
+ > ```
22
+ >
23
+ > You can override `.env` values from the command line like so:
24
+ >
25
+ > ```sh
26
+ > MY_FEATURE_FLAG="enabled" npm run dev
27
+ > ```
28
+
29
+ For example, given the following runtime environment:
30
+
31
+ ```env
32
+ ENVIRONMENT=production
33
+ PUBLIC_BASE_URL=http://example.com
34
+ ```
35
+
36
+ With the default `publicPrefix` and `privatePrefix`:
4
37
 
5
38
  ```ts
6
39
  import { env } from '$env/dynamic/public';
7
- console.log(env.PUBLIC_DEPLOYMENT_SPECIFIC_VARIABLE);
40
+ console.log(env.ENVIRONMENT); // => undefined, not public
41
+ console.log(env.PUBLIC_BASE_URL); // => "http://example.com"
42
+ ```
43
+
44
+ ```
45
+
8
46
  ```
@@ -1,19 +1,31 @@
1
- Environment variables [loaded by Vite](https://vitejs.dev/guide/env-and-mode.html#env-files) from `.env` files and `process.env`. Like [`$env/dynamic/private`](https://svelte.dev/docs/kit/$env-dynamic-private), this module cannot be imported into client-side code. This module only includes variables that _do not_ begin with [`config.kit.env.publicPrefix`](https://svelte.dev/docs/kit/configuration#env) _and do_ start with [`config.kit.env.privatePrefix`](https://svelte.dev/docs/kit/configuration#env) (if configured).
1
+ This module provides access to environment variables that are injected _statically_ into your bundle at build time and are limited to _private_ access.
2
2
 
3
- _Unlike_ [`$env/dynamic/private`](https://svelte.dev/docs/kit/$env-dynamic-private), the values exported from this module are statically injected into your bundle at build time, enabling optimisations like dead code elimination.
3
+ | | Runtime | Build time |
4
+ | ------- | -------------------------------------------------------------------------- | ------------------------------------------------------------------------ |
5
+ | Private | [`$env/dynamic/private`](https://svelte.dev/docs/kit/$env-dynamic-private) | [`$env/static/private`](https://svelte.dev/docs/kit/$env-static-private) |
6
+ | Public | [`$env/dynamic/public`](https://svelte.dev/docs/kit/$env-dynamic-public) | [`$env/static/public`](https://svelte.dev/docs/kit/$env-static-public) |
4
7
 
5
- ```ts
6
- import { API_KEY } from '$env/static/private';
7
- ```
8
+ Static environment variables are [loaded by Vite](https://vitejs.dev/guide/env-and-mode.html#env-files) from `.env` files and `process.env` at build time and then statically injected into your bundle at build time, enabling optimisations like dead code elimination.
8
9
 
9
- Note that all environment variables referenced in your code should be declared (for example in an `.env` file), even if they don't have a value until the app is deployed:
10
+ **_Private_ access:**
10
11
 
12
+ - This module cannot be imported into client-side code
13
+ - This module only includes variables that _do not_ begin with [`config.kit.env.publicPrefix`](https://svelte.dev/docs/kit/configuration#env) _and do_ start with [`config.kit.env.privatePrefix`](https://svelte.dev/docs/kit/configuration#env) (if configured)
14
+
15
+ For example, given the following build time environment:
16
+
17
+ ```env
18
+ ENVIRONMENT=production
19
+ PUBLIC_BASE_URL=http://site.com
11
20
  ```
12
- MY_FEATURE_FLAG=""
13
- ```
14
21
 
15
- You can override `.env` values from the command line like so:
22
+ With the default `publicPrefix` and `privatePrefix`:
23
+
24
+ ```ts
25
+ import { ENVIRONMENT, PUBLIC_BASE_URL } from '$env/static/private';
16
26
 
17
- ```sh
18
- MY_FEATURE_FLAG="enabled" npm run dev
27
+ console.log(ENVIRONMENT); // => "production"
28
+ console.log(PUBLIC_BASE_URL); // => throws error during build
19
29
  ```
30
+
31
+ The above values will be the same _even if_ different values for `ENVIRONMENT` or `PUBLIC_BASE_URL` are set at runtime, as they are statically replaced in your code with their build time values.
@@ -1,7 +1,31 @@
1
- Similar to [`$env/static/private`](https://svelte.dev/docs/kit/$env-static-private), except that it only includes environment variables that begin with [`config.kit.env.publicPrefix`](https://svelte.dev/docs/kit/configuration#env) (which defaults to `PUBLIC_`), and can therefore safely be exposed to client-side code.
1
+ This module provides access to environment variables that are injected _statically_ into your bundle at build time and are _publicly_ accessible.
2
2
 
3
- Values are replaced statically at build time.
3
+ | | Runtime | Build time |
4
+ | ------- | -------------------------------------------------------------------------- | ------------------------------------------------------------------------ |
5
+ | Private | [`$env/dynamic/private`](https://svelte.dev/docs/kit/$env-dynamic-private) | [`$env/static/private`](https://svelte.dev/docs/kit/$env-static-private) |
6
+ | Public | [`$env/dynamic/public`](https://svelte.dev/docs/kit/$env-dynamic-public) | [`$env/static/public`](https://svelte.dev/docs/kit/$env-static-public) |
7
+
8
+ Static environment variables are [loaded by Vite](https://vitejs.dev/guide/env-and-mode.html#env-files) from `.env` files and `process.env` at build time and then statically injected into your bundle at build time, enabling optimisations like dead code elimination.
9
+
10
+ **_Public_ access:**
11
+
12
+ - This module _can_ be imported into client-side code
13
+ - **Only** variables that begin with [`config.kit.env.publicPrefix`](https://svelte.dev/docs/kit/configuration#env) (which defaults to `PUBLIC_`) are included
14
+
15
+ For example, given the following build time environment:
16
+
17
+ ```env
18
+ ENVIRONMENT=production
19
+ PUBLIC_BASE_URL=http://site.com
20
+ ```
21
+
22
+ With the default `publicPrefix` and `privatePrefix`:
4
23
 
5
24
  ```ts
6
- import { PUBLIC_BASE_URL } from '$env/static/public';
25
+ import { ENVIRONMENT, PUBLIC_BASE_URL } from '$env/static/public';
26
+
27
+ console.log(ENVIRONMENT); // => throws error during build
28
+ console.log(PUBLIC_BASE_URL); // => "http://site.com"
7
29
  ```
30
+
31
+ The above values will be the same _even if_ different values for `ENVIRONMENT` or `PUBLIC_BASE_URL` are set at runtime, as they are statically replaced in your code with their build time values.
package/src/version.js CHANGED
@@ -1,4 +1,4 @@
1
1
  // generated during release, do not modify
2
2
 
3
3
  /** @type {string} */
4
- export const VERSION = '2.53.1';
4
+ export const VERSION = '2.53.2';
package/types/index.d.ts CHANGED
@@ -1885,9 +1885,9 @@ declare module '@sveltejs/kit' {
1885
1885
 
1886
1886
  type RemoteFormFieldMethods<T> = {
1887
1887
  /** The values that will be submitted */
1888
- value(): T;
1888
+ value(): DeepPartial<T>;
1889
1889
  /** Set the values that will be submitted */
1890
- set(input: T): T;
1890
+ set(input: DeepPartial<T>): DeepPartial<T>;
1891
1891
  /** Validation issues, if any */
1892
1892
  issues(): RemoteFormIssue[] | undefined;
1893
1893
  };
@@ -2085,7 +2085,7 @@ declare module '@sveltejs/kit' {
2085
2085
  * The return value of a remote `command` function. See [Remote functions](https://svelte.dev/docs/kit/remote-functions#command) for full documentation.
2086
2086
  */
2087
2087
  export type RemoteCommand<Input, Output> = {
2088
- (arg: Input): Promise<Awaited<Output>> & {
2088
+ (arg: undefined extends Input ? Input | void : Input): Promise<Awaited<Output>> & {
2089
2089
  updates(...queries: Array<RemoteQuery<any> | RemoteQueryOverride>): Promise<Awaited<Output>>;
2090
2090
  };
2091
2091
  /** The number of pending command executions */
@@ -2155,12 +2155,16 @@ declare module '@sveltejs/kit' {
2155
2155
  /**
2156
2156
  * The return value of a remote `prerender` function. See [Remote functions](https://svelte.dev/docs/kit/remote-functions#prerender) for full documentation.
2157
2157
  */
2158
- export type RemotePrerenderFunction<Input, Output> = (arg: Input) => RemoteResource<Output>;
2158
+ export type RemotePrerenderFunction<Input, Output> = (
2159
+ arg: undefined extends Input ? Input | void : Input
2160
+ ) => RemoteResource<Output>;
2159
2161
 
2160
2162
  /**
2161
2163
  * The return value of a remote `query` function. See [Remote functions](https://svelte.dev/docs/kit/remote-functions#query) for full documentation.
2162
2164
  */
2163
- export type RemoteQueryFunction<Input, Output> = (arg: Input) => RemoteQuery<Output>;
2165
+ export type RemoteQueryFunction<Input, Output> = (
2166
+ arg: undefined extends Input ? Input | void : Input
2167
+ ) => RemoteQuery<Output>;
2164
2168
  interface AdapterEntry {
2165
2169
  /**
2166
2170
  * A string that uniquely identifies an HTTP service (e.g. serverless function) and is used for deduplication.
@@ -2398,6 +2402,14 @@ declare module '@sveltejs/kit' {
2398
2402
  /** @default 'never' */
2399
2403
  type TrailingSlash = 'never' | 'always' | 'ignore';
2400
2404
 
2405
+ type DeepPartial<T> = T extends Record<PropertyKey, unknown> | unknown[]
2406
+ ? {
2407
+ [K in keyof T]?: T[K] extends Record<PropertyKey, unknown> | unknown[]
2408
+ ? DeepPartial<T[K]>
2409
+ : T[K];
2410
+ }
2411
+ : T | undefined;
2412
+
2401
2413
  type IsAny<T> = 0 extends 1 & T ? true : false;
2402
2414
  interface Asset {
2403
2415
  file: string;
@@ -103,6 +103,7 @@
103
103
  "RequestOptions",
104
104
  "RouteSegment",
105
105
  "TrailingSlash",
106
+ "DeepPartial",
106
107
  "IsAny",
107
108
  "Asset",
108
109
  "BuildData",
@@ -223,6 +224,6 @@
223
224
  null,
224
225
  null
225
226
  ],
226
- "mappings": "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",
227
+ "mappings": "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",
227
228
  "ignoreList": []
228
229
  }