@sveltejs/kit 2.65.1 → 2.65.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.65.1",
3
+ "version": "2.65.2",
4
4
  "description": "SvelteKit is the fastest way to build Svelte apps",
5
5
  "keywords": [
6
6
  "framework",
@@ -38,12 +38,12 @@
38
38
  "@types/connect": "^3.4.38",
39
39
  "@types/node": "^18.19.130",
40
40
  "@types/set-cookie-parser": "^2.4.7",
41
- "dts-buddy": "^0.8.0",
41
+ "dts-buddy": "^0.8.1",
42
42
  "jsdom": "^26.1.0",
43
43
  "rollup": "^4.59.0",
44
44
  "svelte": "^5.56.3",
45
45
  "typescript": "^5.3.3",
46
- "vite": "^6.4.2",
46
+ "vite": "^6.4.3",
47
47
  "vitest": "^4.1.7"
48
48
  },
49
49
  "peerDependencies": {
@@ -193,12 +193,12 @@ export function create_builder({
193
193
  },
194
194
 
195
195
  generateEnvModule() {
196
- if (!build_data.client?.uses_env_dynamic_public) return;
197
-
198
- const dest = `${config.kit.outDir}/output/prerendered/dependencies/${config.kit.appDir}/env.js`;
199
196
  const env = get_env(config.kit.env, vite_config.mode);
200
197
 
201
- const values = config.kit.experimental.explicitEnvironmentVariables ? {} : env.public;
198
+ const dest = `${config.kit.outDir}/output/prerendered/dependencies/${config.kit.appDir}`;
199
+
200
+ /** @type {string} */
201
+ let payload;
202
202
 
203
203
  if (config.kit.experimental.explicitEnvironmentVariables) {
204
204
  const variables = explicit_env_config ?? {};
@@ -206,15 +206,30 @@ export function create_builder({
206
206
  /** @type {Record<string, StandardSchemaV1.Issue[]>} */
207
207
  const issues = {};
208
208
 
209
+ /** @type {Record<string, any>} */
210
+ const values = {};
211
+
209
212
  for (const [name, config] of Object.entries(variables)) {
210
213
  if (config.static || !config.public) continue;
211
214
  values[name] = validate(variables, env.all[name], name, issues);
212
215
  }
213
216
 
214
217
  handle_issues(issues);
218
+
219
+ if (Object.keys(values).length === 0) return;
220
+
221
+ payload = devalue.uneval(values);
222
+
223
+ if (build_data.service_worker) {
224
+ write(`${dest}/env.script.js`, `globalThis.__sveltekit_sw={env:${payload}}`);
225
+ }
226
+ } else {
227
+ payload = devalue.uneval(env.public);
215
228
  }
216
229
 
217
- write(dest, `export const env=${devalue.uneval(values)}`);
230
+ if (build_data.client?.uses_env_dynamic_public) {
231
+ write(`${dest}/env.js`, `export const env=${payload}`);
232
+ }
218
233
  },
219
234
 
220
235
  generateManifest({ relativePath, routes: subset }) {
package/src/core/env.js CHANGED
@@ -72,6 +72,10 @@ export async function load_explicit_env(kit, file, mode) {
72
72
  /** @type {Record<string, EnvVarConfig<any>>} */
73
73
  let variables;
74
74
 
75
+ /** @type {import('../runtime/app/env/internal.js')} */ (
76
+ await server.ssrLoadModule(`${runtime_directory}/app/env/internal.js`)
77
+ ).set_building();
78
+
75
79
  try {
76
80
  ({ variables } = await server.ssrLoadModule(file));
77
81
 
@@ -157,7 +161,7 @@ export function create_dynamic_module(type, dev_values, disabled) {
157
161
 
158
162
  /**
159
163
  * Creates the `__sveltekit/env` module
160
- * @param {Record<string, EnvVarConfig<any>> | null} variables
164
+ * @param {Record<string, EnvVarConfig<any> | undefined> | null} variables
161
165
  * @param {Record<string, string>} env
162
166
  * @param {string | null} entry
163
167
  */
@@ -176,7 +180,7 @@ export function create_sveltekit_env(variables, env, entry) {
176
180
  const issues = {};
177
181
 
178
182
  for (const [name, config] of Object.entries(variables ?? {})) {
179
- if (config.static) {
183
+ if (config?.static) {
180
184
  if (config.public) {
181
185
  const value = validate(variables ?? {}, env[name], name, issues);
182
186
  declarations.push(`explicit_public_env.${name} = ${devalue.uneval(value)};`);
@@ -186,7 +190,7 @@ export function create_sveltekit_env(variables, env, entry) {
186
190
  `const ${name} = validate(variables, env.${name}, ${JSON.stringify(name)}, issues);`
187
191
  );
188
192
 
189
- if (config.public) {
193
+ if (config?.public) {
190
194
  setters.push(`explicit_public_env.${name} = ${name};`);
191
195
  setters.push(`rendered_env.${name} = ${name};`);
192
196
  } else {
@@ -58,10 +58,13 @@ async function analyse({
58
58
  const public_env = filter_env(env, public_prefix, private_prefix);
59
59
  internal.set_private_env(private_env);
60
60
  internal.set_public_env(public_env);
61
- internal.set_env(env);
62
61
  internal.set_manifest(manifest);
63
62
  internal.set_read_implementation((file) => createReadableStream(`${server_root}/server/${file}`));
64
63
 
64
+ /** @type {import('__sveltekit/env')} */
65
+ const { set_env } = await import(pathToFileURL(`${server_root}/server/env.js`).href);
66
+ set_env(env);
67
+
65
68
  /** @type {import('types').ServerMetadata} */
66
69
  const metadata = {
67
70
  nodes: [],
@@ -43,14 +43,18 @@ async function prerender({ hash, out, manifest_path, metadata, verbose, env }) {
43
43
  /** @type {import('types').ServerInternalModule} */
44
44
  const internal = await import(pathToFileURL(`${out}/server/internal.js`).href);
45
45
 
46
- /** @type {import('types').ServerModule} */
47
- const { Server } = await import(pathToFileURL(`${out}/server/index.js`).href);
48
-
49
46
  // configure `import { building } from '$app/environment'` and `$app/env` —
50
47
  // essential we do this before analysing the code
51
48
  internal.set_building();
52
49
  internal.set_prerendering();
53
50
 
51
+ /** @type {import('__sveltekit/env')} */
52
+ const { set_env } = await import(pathToFileURL(`${out}/server/env.js`).href);
53
+ set_env(env);
54
+
55
+ /** @type {import('types').ServerModule} */
56
+ const { Server } = await import(pathToFileURL(`${out}/server/index.js`).href);
57
+
54
58
  /**
55
59
  * @template {{message: string}} T
56
60
  * @template {Omit<T, 'message'>} K
@@ -382,6 +386,12 @@ async function prerender({ hash, out, manifest_path, metadata, verbose, env }) {
382
386
  const type = headers['content-type'];
383
387
  const is_html = response_type === REDIRECT || type === 'text/html';
384
388
 
389
+ if (!is_html && response.status === 200 && decoded.slice(config.paths.base.length + 1) === '') {
390
+ throw new Error(
391
+ `Cannot prerender a root +server.js that returns a non-HTML response - static hosts always serve an HTML file for \`${config.paths.base || '/'}\``
392
+ );
393
+ }
394
+
385
395
  const file = output_filename(decoded, is_html);
386
396
  const dest = `${config.outDir}/output/prerendered/${category}/${file}`;
387
397
 
@@ -499,7 +509,6 @@ async function prerender({ hash, out, manifest_path, metadata, verbose, env }) {
499
509
  const public_env = filter_env(env, public_prefix, private_prefix);
500
510
  internal.set_private_env(private_env);
501
511
  internal.set_public_env(public_env);
502
- internal.set_env(env);
503
512
  internal.set_manifest(manifest);
504
513
  internal.set_read_implementation((file) => createReadableStream(`${out}/server/${file}`));
505
514
 
@@ -33,7 +33,6 @@ import root from '../root.${isSvelte5Plus() ? 'js' : 'svelte'}';
33
33
  import { set_building, set_prerendering } from '$app/env/internal';
34
34
  import { set_assets } from '$app/paths/internal/server';
35
35
  import { set_manifest, set_read_implementation } from '__sveltekit/server';
36
- import { set_env } from '__sveltekit/env';
37
36
  import { set_private_env, set_public_env } from '${runtime_directory}/shared-server.js';
38
37
 
39
38
  export const options = {
@@ -93,7 +92,7 @@ export async function get_hooks() {
93
92
  };
94
93
  }
95
94
 
96
- export { set_assets, set_building, set_env, set_manifest, set_prerendering, set_private_env, set_public_env, set_read_implementation };
95
+ export { set_assets, set_building, set_manifest, set_prerendering, set_private_env, set_public_env, set_read_implementation };
97
96
  `;
98
97
 
99
98
  // TODO need to re-run this whenever src/app.html or src/error.html are
@@ -16,7 +16,7 @@ const ASYNC_VALIDATOR = {
16
16
  };
17
17
 
18
18
  /**
19
- * @param {Record<string, EnvVarConfig<any>>} variables
19
+ * @param {Record<string, EnvVarConfig<any> | undefined>} variables
20
20
  * @param {string | undefined} value
21
21
  * @param {string} name
22
22
  * @param {Record<string, StandardSchemaV1.Issue[]>} issues
@@ -141,7 +141,7 @@ export interface Builder {
141
141
  generateFallback: (dest: string) => Promise<void>;
142
142
 
143
143
  /**
144
- * Generate a module exposing build-time environment variables as `$env/dynamic/public` if the app uses it.
144
+ * Generate a module exposing build-time environment variables as `$env/dynamic/public` or `$app/env/public` if the app uses it.
145
145
  */
146
146
  generateEnvModule: () => void;
147
147
 
@@ -1550,6 +1550,10 @@ export interface RequestEvent<
1550
1550
  locals: App.Locals;
1551
1551
  /**
1552
1552
  * The parameters of the current route - e.g. for a route like `/blog/[slug]`, a `{ slug: string }` object.
1553
+ *
1554
+ * In the context of a remote function request initiated by the client, this relates to the page the remote function
1555
+ * was called from, _not_ the URL of the endpoint SvelteKit creates for the remote function. Never use this to determine
1556
+ * whether or not a user is authorized to access certain data, as these values are part of the request which could be manipulated.
1553
1557
  */
1554
1558
  params: Params;
1555
1559
  /**
@@ -1566,6 +1570,10 @@ export interface RequestEvent<
1566
1570
  route: {
1567
1571
  /**
1568
1572
  * 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.
1573
+ *
1574
+ * In the context of a remote function request initiated by the client, this relates to the page the remote function
1575
+ * was called from, _not_ the URL of the endpoint SvelteKit creates for the remote function. Never use this to determine
1576
+ * whether or not a user is authorized to access certain data, as these values are part of the request which could be manipulated.
1569
1577
  */
1570
1578
  id: RouteId;
1571
1579
  };
@@ -1594,6 +1602,10 @@ export interface RequestEvent<
1594
1602
  setHeaders: (headers: Record<string, string>) => void;
1595
1603
  /**
1596
1604
  * The requested URL.
1605
+ *
1606
+ * In the context of a remote function request initiated by the client, this relates to the page the remote function
1607
+ * was called from, _not_ the URL of the endpoint SvelteKit creates for the remote function. Never use this to determine
1608
+ * whether or not a user is authorized to access certain data, as these values are part of the request which could be manipulated.
1597
1609
  */
1598
1610
  url: URL;
1599
1611
  /**
@@ -147,7 +147,12 @@ export function build_server_nodes(
147
147
  }
148
148
 
149
149
  if (node.universal) {
150
- if (!!node.page_options && node.page_options.ssr === false) {
150
+ if (
151
+ (kit.router.type === 'hash' &&
152
+ node.page_options !== null &&
153
+ node.page_options?.ssr === undefined) ||
154
+ (node.page_options && node.page_options.ssr === false)
155
+ ) {
151
156
  exports.push(`export const universal = ${s(node.page_options, null, 2)};`);
152
157
  } else {
153
158
  imports.push(
@@ -106,11 +106,17 @@ export async function build_service_worker(
106
106
  }
107
107
 
108
108
  if (id === '\0virtual:app/env/public') {
109
- // TODO ideally we would only add the `importScripts` if there are dynamic vars that are known to be used
109
+ const has_dynamic_public_env = Object.values(env_config ?? {}).some(
110
+ (variable) => variable.public && !variable.static
111
+ );
112
+
110
113
  return create_sveltekit_env_public(
111
114
  env_config,
112
115
  env.all,
113
- `importScripts('${kit.paths.base}/${kit.appDir}/env.script.js'); const env = globalThis.__sveltekit_sw.env;`
116
+ has_dynamic_public_env
117
+ ? // the service worker isn't registered as ESM yet, so we need to use `importScripts`
118
+ `importScripts('${kit.paths.base}/${kit.appDir}/env.script.js'); const env = globalThis.__sveltekit_sw.env;`
119
+ : ''
114
120
  );
115
121
  }
116
122
 
@@ -293,8 +293,11 @@ async function kit({ svelte_config }) {
293
293
  const allow = new Set([
294
294
  kit.files.lib,
295
295
  kit.files.routes,
296
+ kit.files.src,
296
297
  kit.outDir,
297
- path.resolve('src'), // TODO this isn't correct if user changed all his files to sth else than src (like in test/options)
298
+ // ensures that the client entry is served even if it's located outside
299
+ // the local node_modules, such as the pnpm global virtual store
300
+ runtime_directory,
298
301
  path.resolve('node_modules'),
299
302
  path.resolve(vite.searchForWorkspaceRoot(cwd), 'node_modules')
300
303
  ]);
@@ -958,6 +961,7 @@ async function kit({ svelte_config }) {
958
961
  if (ssr) {
959
962
  input.index = `${runtime_directory}/server/index.js`;
960
963
  input.internal = `${out_dir}/generated/server/internal.js`;
964
+ input.env = `__sveltekit/env`;
961
965
  input['remote-entry'] = `${runtime_directory}/app/server/remote/index.js`;
962
966
 
963
967
  // add entry points for every endpoint...
@@ -1375,6 +1379,17 @@ async function kit({ svelte_config }) {
1375
1379
  const deps_of = (entry, add_dynamic_css = false) =>
1376
1380
  find_deps(manifest, posixify(path.relative('.', entry)), add_dynamic_css);
1377
1381
 
1382
+ const has_explicit_dynamic_public_env = Object.values(explicit_env_config ?? {}).some(
1383
+ (variable) => variable.public && !variable.static
1384
+ );
1385
+
1386
+ const uses_env_dynamic_public = client_chunks.some(
1387
+ (chunk) =>
1388
+ chunk.type === 'chunk' &&
1389
+ (chunk.modules[env_dynamic_public] ||
1390
+ (has_explicit_dynamic_public_env && chunk.modules[sveltekit_env_public_client]))
1391
+ );
1392
+
1378
1393
  if (svelte_config.kit.output.bundleStrategy === 'split') {
1379
1394
  const start = deps_of(`${runtime_directory}/client/entry.js`);
1380
1395
  const app = deps_of(`${out_dir}/generated/client-optimized/app.js`);
@@ -1385,9 +1400,7 @@ async function kit({ svelte_config }) {
1385
1400
  imports: [...start.imports, ...app.imports],
1386
1401
  stylesheets: [...start.stylesheets, ...app.stylesheets],
1387
1402
  fonts: [...start.fonts, ...app.fonts],
1388
- uses_env_dynamic_public: client_chunks.some(
1389
- (chunk) => chunk.type === 'chunk' && chunk.modules[env_dynamic_public]
1390
- )
1403
+ uses_env_dynamic_public
1391
1404
  };
1392
1405
 
1393
1406
  // In case of server-side route resolution, we create a purpose-built route manifest that is
@@ -1434,9 +1447,7 @@ async function kit({ svelte_config }) {
1434
1447
  imports: start.imports,
1435
1448
  stylesheets: start.stylesheets,
1436
1449
  fonts: start.fonts,
1437
- uses_env_dynamic_public: client_chunks.some(
1438
- (chunk) => chunk.type === 'chunk' && chunk.modules[env_dynamic_public]
1439
- )
1450
+ uses_env_dynamic_public
1440
1451
  };
1441
1452
 
1442
1453
  if (svelte_config.kit.output.bundleStrategy === 'inline') {
@@ -1633,13 +1644,18 @@ function find_overridden_config(config, resolved_config, enforced_config, path,
1633
1644
  for (const key in enforced_config) {
1634
1645
  if (typeof config === 'object' && key in config && key in resolved_config) {
1635
1646
  const enforced = enforced_config[key];
1647
+ const resolved = resolved_config[key];
1636
1648
 
1637
1649
  if (enforced === true) {
1638
- if (config[key] !== resolved_config[key]) {
1650
+ // Normalize path separators before comparing to avoid false positives on Windows,
1651
+ // where config values like `root` may use backslashes while SvelteKit uses forward slashes.
1652
+ const a = typeof config[key] === 'string' ? posixify(config[key]) : config[key];
1653
+ const b = typeof resolved === 'string' ? posixify(resolved) : resolved;
1654
+ if (a !== b) {
1639
1655
  out.push(path + key);
1640
1656
  }
1641
1657
  } else {
1642
- find_overridden_config(config[key], resolved_config[key], enforced, path + key + '.', out);
1658
+ find_overridden_config(config[key], resolved, enforced, path + key + '.', out);
1643
1659
  }
1644
1660
  }
1645
1661
  }
@@ -51,10 +51,19 @@ export async function preview(vite, vite_config, svelte_config) {
51
51
  set_assets(assets);
52
52
 
53
53
  const server = new Server(manifest);
54
- await server.init({
55
- env: loadEnv(vite_config.mode, svelte_config.kit.env.dir, ''),
56
- read: (file) => createReadableStream(`${dir}/${file}`)
57
- });
54
+
55
+ try {
56
+ await server.init({
57
+ env: loadEnv(vite_config.mode, svelte_config.kit.env.dir, ''),
58
+ read: (file) => createReadableStream(`${dir}/${file}`)
59
+ });
60
+ } catch (error) {
61
+ // Vite erases the error message when starting the preview server so we store
62
+ // it in the stack instead. This ensures errors thrown using `stackless`
63
+ // are still readable
64
+ if (error instanceof Error) error.stack = error.message;
65
+ throw error;
66
+ }
58
67
 
59
68
  const emulator = await svelte_config.kit.adapter?.emulate?.();
60
69
 
@@ -2419,7 +2419,9 @@ export async function preloadCode(pathname) {
2419
2419
  throw new Error('Cannot call preloadCode(...) on the server');
2420
2420
  }
2421
2421
 
2422
- const url = new URL(pathname, current.url);
2422
+ // `current.url` is null until the first navigation/hydration completes, so fall back
2423
+ // to `location` to support calling `preloadCode` during initial page load (#13297)
2424
+ const url = new URL(pathname, current.url ?? location.href);
2423
2425
 
2424
2426
  if (DEV) {
2425
2427
  if (!pathname.startsWith('/')) {
@@ -94,8 +94,6 @@ export function initial_fetch(resource, opts) {
94
94
  script.remove(); // In case multiple script tags match the same selector
95
95
  let { body, ...init } = JSON.parse(script.textContent);
96
96
 
97
- const ttl = script.getAttribute('data-ttl');
98
- if (ttl) cache.set(selector, { body, init, ttl: 1000 * Number(ttl) });
99
97
  const b64 = script.getAttribute('data-b64');
100
98
  if (b64 !== null) {
101
99
  // Can't use native_fetch('data:...;base64,${body}')
@@ -103,6 +101,9 @@ export function initial_fetch(resource, opts) {
103
101
  body = base64_decode(body);
104
102
  }
105
103
 
104
+ const ttl = script.getAttribute('data-ttl');
105
+ if (ttl) cache.set(selector, { body, init, ttl: 1000 * Number(ttl) });
106
+
106
107
  return Promise.resolve(new Response(body, init));
107
108
  }
108
109
 
@@ -565,9 +565,10 @@ export function form(id) {
565
565
 
566
566
  const submission = submit(form_data, true);
567
567
 
568
- void submission.finally(() => {
568
+ const decrement = () => {
569
569
  pending_count--;
570
- });
570
+ };
571
+ void submission.then(decrement, decrement);
571
572
 
572
573
  return submission;
573
574
  }
@@ -5,6 +5,7 @@ import * as devalue from 'devalue';
5
5
  import { app, goto, prerender_responses } from '../client.js';
6
6
  import { get_remote_request_headers, remote_request, unwrap_node } from './shared.svelte.js';
7
7
  import { create_remote_key, stringify_remote_arg } from '../../shared.js';
8
+ import { noop } from '../../../utils/functions.js';
8
9
 
9
10
  // Initialize Cache API for prerender functions
10
11
  const CACHE_NAME = __SVELTEKIT_DEV__ ? `sveltekit:${Date.now()}` : `sveltekit:${version}`;
@@ -166,6 +167,10 @@ class Prerender {
166
167
  throw error;
167
168
  }
168
169
  );
170
+
171
+ // rejections are surfaced via `.error` for reactive consumers — make sure the
172
+ // stored promise (consumed without `await`) never becomes an unhandled rejection
173
+ this.#promise.catch(noop);
169
174
  }
170
175
 
171
176
  /**
@@ -88,7 +88,9 @@ export class Query {
88
88
  // every time you see this comment, try removing the `tick.then` here and see
89
89
  // if all the tests still pass with the latest svelte version
90
90
  // if they do, congrats, you can remove tick.then
91
- void tick().then(() => this.#get_promise());
91
+ void tick()
92
+ .then(() => this.#get_promise())
93
+ .catch(noop);
92
94
  }
93
95
 
94
96
  #clear_pending() {
@@ -101,6 +103,11 @@ export class Query {
101
103
 
102
104
  const { promise, resolve, reject } = with_resolvers();
103
105
 
106
+ // the rejection is surfaced via `.error` / the `then` getter for awaiting
107
+ // consumers — a purely reactive consumer (`.current`) attaches no handler,
108
+ // so make sure the stored promise can never become an unhandled rejection
109
+ promise.catch(noop);
110
+
104
111
  this.#latest.push(resolve);
105
112
 
106
113
  Promise.resolve(this.#fn())
@@ -383,6 +383,7 @@ export class LiveQuery {
383
383
  void this.#interrupt?.();
384
384
 
385
385
  if (this.#reject_first) {
386
+ this.#promise.catch(noop);
386
387
  this.#reject_first(error);
387
388
  this.#resolve_first = null;
388
389
  this.#reject_first = null;
@@ -114,7 +114,13 @@ export async function remote_request(url, init) {
114
114
  const response = await fetch(url, init);
115
115
 
116
116
  if (!response.ok) {
117
- throw new HttpError(500, 'Failed to execute remote function');
117
+ const result = await response.json().catch(() => ({
118
+ type: 'error',
119
+ status: response.status,
120
+ error: response.statusText
121
+ }));
122
+
123
+ throw new HttpError(result.status ?? response.status ?? 500, result.error);
118
124
  }
119
125
 
120
126
  const result = /** @type {RemoteFunctionResponse} */ (await response.json());
@@ -368,7 +368,13 @@ export async function render_response({
368
368
  if (page_config.csr && client) {
369
369
  const route = client.routes?.find((r) => r.id === event.route.id) ?? null;
370
370
 
371
- if (client.uses_env_dynamic_public && state.prerendering) {
371
+ // when serving a prerendered page in an app that uses runtime public env vars, we must
372
+ // import the env.js module so that it evaluates before any user code can evaluate.
373
+ // TODO revert to using top-level await once https://bugs.webkit.org/show_bug.cgi?id=242740 is fixed
374
+ // https://github.com/sveltejs/kit/pull/11601
375
+ const load_env_eagerly = client.uses_env_dynamic_public && !!state.prerendering;
376
+
377
+ if (load_env_eagerly) {
372
378
  modulepreloads.add(`${paths.app_dir}/env.js`);
373
379
  }
374
380
 
@@ -401,15 +407,6 @@ export async function render_response({
401
407
 
402
408
  const blocks = [];
403
409
 
404
- // when serving a prerendered page in an app that uses $env/dynamic/public, we must
405
- // import the env.js module so that it evaluates before any user code can evaluate.
406
- // TODO revert to using top-level await once https://bugs.webkit.org/show_bug.cgi?id=242740 is fixed
407
- // https://github.com/sveltejs/kit/pull/11601
408
- const load_env_eagerly =
409
- (__SVELTEKIT_EXPERIMENTAL_EXPLICIT_ENVIRONMENT_VARIABLES__ ||
410
- client.uses_env_dynamic_public) &&
411
- state.prerendering;
412
-
413
410
  const properties = [`base: ${base_expression}`];
414
411
 
415
412
  if (paths.assets) {
@@ -57,6 +57,9 @@ async function handle_remote_call_internal(event, state, options, manifest, id)
57
57
  'sveltekit.remote.call.name': internals.name
58
58
  });
59
59
 
60
+ /** @type {HeadersInit | undefined} */
61
+ const headers = state.prerendering ? undefined : { 'cache-control': 'private, no-store' };
62
+
60
63
  try {
61
64
  /** @type {RemoteFunctionData} */
62
65
  const data = {};
@@ -226,7 +229,8 @@ async function handle_remote_call_internal(event, state, options, manifest, id)
226
229
  /** @type {RemoteFunctionResponse} */ ({
227
230
  type: 'result',
228
231
  data: stringify(data, transport)
229
- })
232
+ }),
233
+ { headers }
230
234
  );
231
235
  }
232
236
 
@@ -275,7 +279,8 @@ async function handle_remote_call_internal(event, state, options, manifest, id)
275
279
  /** @type {RemoteFunctionResponse} */ ({
276
280
  type: 'result',
277
281
  data: stringify(data, transport)
278
- })
282
+ }),
283
+ { headers }
279
284
  );
280
285
  } catch (error) {
281
286
  if (error instanceof Redirect) {
@@ -285,7 +290,8 @@ async function handle_remote_call_internal(event, state, options, manifest, id)
285
290
  /** @type {RemoteFunctionResponse} */ ({
286
291
  type: 'result',
287
292
  data: stringify(data, transport)
288
- })
293
+ }),
294
+ { headers }
289
295
  );
290
296
  }
291
297
 
@@ -44,7 +44,6 @@ export interface ServerModule {
44
44
  export interface ServerInternalModule {
45
45
  set_assets(path: string): void;
46
46
  set_building(): void;
47
- set_env(environment: Record<string, string>): void;
48
47
  set_manifest(manifest: SSRManifest): void;
49
48
  set_prerendering(): void;
50
49
  set_private_env(environment: Record<string, string>): void;
@@ -103,6 +102,9 @@ export interface BuildData {
103
102
  routes?: SSRClientRoute[];
104
103
  stylesheets: string[];
105
104
  fonts: string[];
105
+ /**
106
+ * Whether the client uses public dynamic env vars — `$env/dynamic/public` or `$app/env/public`.
107
+ */
106
108
  uses_env_dynamic_public: boolean;
107
109
  /** Only set in case of `bundleStrategy === 'inline'`. */
108
110
  inline?: {
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.65.1';
4
+ export const VERSION = '2.65.2';
package/types/index.d.ts CHANGED
@@ -116,7 +116,7 @@ declare module '@sveltejs/kit' {
116
116
  generateFallback: (dest: string) => Promise<void>;
117
117
 
118
118
  /**
119
- * Generate a module exposing build-time environment variables as `$env/dynamic/public` if the app uses it.
119
+ * Generate a module exposing build-time environment variables as `$env/dynamic/public` or `$app/env/public` if the app uses it.
120
120
  */
121
121
  generateEnvModule: () => void;
122
122
 
@@ -1524,6 +1524,10 @@ declare module '@sveltejs/kit' {
1524
1524
  locals: App.Locals;
1525
1525
  /**
1526
1526
  * The parameters of the current route - e.g. for a route like `/blog/[slug]`, a `{ slug: string }` object.
1527
+ *
1528
+ * In the context of a remote function request initiated by the client, this relates to the page the remote function
1529
+ * was called from, _not_ the URL of the endpoint SvelteKit creates for the remote function. Never use this to determine
1530
+ * whether or not a user is authorized to access certain data, as these values are part of the request which could be manipulated.
1527
1531
  */
1528
1532
  params: Params;
1529
1533
  /**
@@ -1540,6 +1544,10 @@ declare module '@sveltejs/kit' {
1540
1544
  route: {
1541
1545
  /**
1542
1546
  * 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.
1547
+ *
1548
+ * In the context of a remote function request initiated by the client, this relates to the page the remote function
1549
+ * was called from, _not_ the URL of the endpoint SvelteKit creates for the remote function. Never use this to determine
1550
+ * whether or not a user is authorized to access certain data, as these values are part of the request which could be manipulated.
1543
1551
  */
1544
1552
  id: RouteId;
1545
1553
  };
@@ -1568,6 +1576,10 @@ declare module '@sveltejs/kit' {
1568
1576
  setHeaders: (headers: Record<string, string>) => void;
1569
1577
  /**
1570
1578
  * The requested URL.
1579
+ *
1580
+ * In the context of a remote function request initiated by the client, this relates to the page the remote function
1581
+ * was called from, _not_ the URL of the endpoint SvelteKit creates for the remote function. Never use this to determine
1582
+ * whether or not a user is authorized to access certain data, as these values are part of the request which could be manipulated.
1571
1583
  */
1572
1584
  url: URL;
1573
1585
  /**
@@ -2612,6 +2624,9 @@ declare module '@sveltejs/kit' {
2612
2624
  routes?: SSRClientRoute[];
2613
2625
  stylesheets: string[];
2614
2626
  fonts: string[];
2627
+ /**
2628
+ * Whether the client uses public dynamic env vars — `$env/dynamic/public` or `$app/env/public`.
2629
+ */
2615
2630
  uses_env_dynamic_public: boolean;
2616
2631
  /** Only set in case of `bundleStrategy === 'inline'`. */
2617
2632
  inline?: {
@@ -2824,7 +2839,7 @@ declare module '@sveltejs/kit' {
2824
2839
  * @throws {HttpError} This error instructs SvelteKit to initiate HTTP error handling.
2825
2840
  * @throws {Error} If the provided status is invalid (not between 400 and 599).
2826
2841
  */
2827
- function error_1(status: number, body: App.Error): never;
2842
+ export function error(status: number, body: App.Error): never;
2828
2843
  /**
2829
2844
  * Throws an error with a HTTP status code and an optional message.
2830
2845
  * When called during request handling, this will cause SvelteKit to
@@ -2835,7 +2850,7 @@ declare module '@sveltejs/kit' {
2835
2850
  * @throws {HttpError} This error instructs SvelteKit to initiate HTTP error handling.
2836
2851
  * @throws {Error} If the provided status is invalid (not between 400 and 599).
2837
2852
  */
2838
- function error_1(status: number, body?: {
2853
+ export function error(status: number, body?: {
2839
2854
  message: string;
2840
2855
  } extends App.Error ? App.Error | string | undefined : never): never;
2841
2856
  /**
@@ -2976,7 +2991,7 @@ declare module '@sveltejs/kit' {
2976
2991
  }
2977
2992
  const valid_page_options_array: readonly ["ssr", "prerender", "csr", "trailingSlash", "config", "entries", "load"];
2978
2993
 
2979
- export { error_1 as error };
2994
+ export {};
2980
2995
  }
2981
2996
 
2982
2997
  declare module '@sveltejs/kit/hooks' {
@@ -3331,7 +3346,7 @@ declare module '$app/navigation' {
3331
3346
  }
3332
3347
 
3333
3348
  declare module '$app/paths' {
3334
- import type { RouteIdWithSearchOrHash, PathnameWithSearchOrHash, ResolvedPathname, RouteId, RouteParams, Asset, Pathname as Pathname_1 } from '$app/types';
3349
+ import type { RouteIdWithSearchOrHash, PathnameWithSearchOrHash, ResolvedPathname, RouteId, RouteParams, Asset, Pathname } from '$app/types';
3335
3350
  /**
3336
3351
  * A string that matches [`config.kit.paths.base`](https://svelte.dev/docs/kit/configuration#paths).
3337
3352
  *
@@ -3428,7 +3443,7 @@ declare module '$app/paths' {
3428
3443
  * @since 2.52.0
3429
3444
  *
3430
3445
  * */
3431
- export function match(url: Pathname_1 | URL | (string & {})): Promise<{
3446
+ export function match(url: Pathname | URL | (string & {})): Promise<{
3432
3447
  id: RouteId;
3433
3448
  params: Record<string, string>;
3434
3449
  } | null>;
@@ -3778,7 +3793,9 @@ declare module '$app/stores' {
3778
3793
  };
3779
3794
 
3780
3795
  export {};
3781
- }/**
3796
+ }
3797
+
3798
+ /**
3782
3799
  * It's possible to tell SvelteKit how to type objects inside your app by declaring the `App` namespace. By default, a new project will have a file called `src/app.d.ts` containing the following:
3783
3800
  *
3784
3801
  * ```ts
@@ -246,6 +246,6 @@
246
246
  null,
247
247
  null
248
248
  ],
249
- "mappings": "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",
249
+ "mappings": "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",
250
250
  "ignoreList": []
251
251
  }