@sveltejs/kit 2.36.3 → 2.37.0

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.36.3",
3
+ "version": "2.37.0",
4
4
  "description": "SvelteKit is the fastest way to build Svelte apps",
5
5
  "keywords": [
6
6
  "framework",
@@ -437,7 +437,9 @@ export interface KitConfig {
437
437
  *
438
438
  * If the array contains `'*'`, all origins will be trusted. This is generally not recommended!
439
439
  *
440
- * **Warning**: Only add origins you completely trust, as this bypasses CSRF protection for those origins.
440
+ * > [!NOTE] Only add origins you completely trust, as this bypasses CSRF protection for those origins.
441
+ *
442
+ * CSRF checks only apply in production, not in local development.
441
443
  * @default []
442
444
  * @example ['https://checkout.stripe.com', 'https://accounts.google.com']
443
445
  */
@@ -1802,6 +1804,13 @@ export type RemoteResource<T> = Promise<Awaited<T>> & {
1802
1804
  );
1803
1805
 
1804
1806
  export type RemoteQuery<T> = RemoteResource<T> & {
1807
+ /**
1808
+ * On the client, this function will update the value of the query without re-fetching it.
1809
+ *
1810
+ * On the server, this can be called in the context of a `command` or `form` and the specified data will accompany the action response back to the client.
1811
+ * This prevents SvelteKit needing to refresh all queries on the page in a second server round-trip.
1812
+ */
1813
+ set(value: T): void;
1805
1814
  /**
1806
1815
  * On the client, this function will re-fetch the query from the server.
1807
1816
  *
@@ -108,14 +108,15 @@ export function form(fn) {
108
108
  /** @type {RemoteForm<any>['for']} */
109
109
  value: (key) => {
110
110
  const { state } = get_request_store();
111
- let instance = (state.form_instances ??= new Map()).get(key);
111
+ const cache_key = __.id + '|' + JSON.stringify(key);
112
+ let instance = (state.form_instances ??= new Map()).get(cache_key);
112
113
 
113
114
  if (!instance) {
114
115
  instance = create_instance(key);
115
116
  instance.__.id = `${__.id}/${encodeURIComponent(JSON.stringify(key))}`;
116
117
  instance.__.name = __.name;
117
118
 
118
- state.form_instances.set(key, instance);
119
+ state.form_instances.set(cache_key, instance);
119
120
  }
120
121
 
121
122
  return instance;
@@ -72,14 +72,35 @@ export function query(validate_or_fn, maybe_fn) {
72
72
 
73
73
  const { event, state } = get_request_store();
74
74
 
75
+ const abort_controller = new AbortController();
75
76
  /** @type {Promise<any> & Partial<RemoteQuery<any>>} */
76
- const promise = get_response(__.id, arg, state, () =>
77
- run_remote_function(event, state, false, arg, validate, fn)
77
+ const promise = get_response(
78
+ __.id,
79
+ arg,
80
+ state,
81
+ () => run_remote_function(event, state, false, arg, validate, fn),
82
+ abort_controller.signal
78
83
  );
79
84
 
80
85
  promise.catch(() => {});
81
86
 
82
- promise.refresh = async () => {
87
+ /** @param {Output} value */
88
+ promise.set = (value) => {
89
+ abort_controller.abort();
90
+ const { state } = get_request_store();
91
+ const refreshes = state.refreshes;
92
+
93
+ if (!refreshes) {
94
+ throw new Error(
95
+ `Cannot call set on query '${__.name}' because it is not executed in the context of a command/form remote function`
96
+ );
97
+ }
98
+
99
+ const cache_key = create_remote_cache_key(__.id, stringify_remote_arg(arg, state.transport));
100
+ refreshes[cache_key] = Promise.resolve(value);
101
+ };
102
+
103
+ promise.refresh = () => {
83
104
  const { state } = get_request_store();
84
105
  const refreshes = state.refreshes;
85
106
 
@@ -90,10 +111,14 @@ export function query(validate_or_fn, maybe_fn) {
90
111
  }
91
112
 
92
113
  const cache_key = create_remote_cache_key(__.id, stringify_remote_arg(arg, state.transport));
93
- refreshes[cache_key] = await /** @type {Promise<any>} */ (promise);
114
+ refreshes[cache_key] = promise;
115
+
116
+ // TODO we could probably just return promise here, but would need to update the types
117
+ return promise.then(() => {});
94
118
  };
95
119
 
96
120
  promise.withOverride = () => {
121
+ abort_controller.abort();
97
122
  throw new Error(`Cannot call '${__.name}.withOverride()' on the server`);
98
123
  };
99
124
 
@@ -66,9 +66,14 @@ export function create_validator(validate_or_fn, maybe_fn) {
66
66
  * @param {any} arg
67
67
  * @param {RequestState} state
68
68
  * @param {() => Promise<T>} get_result
69
+ * @param {AbortSignal | undefined=} signal
69
70
  * @returns {Promise<T>}
70
71
  */
71
- export function get_response(id, arg, state, get_result) {
72
+ export async function get_response(id, arg, state, get_result, signal) {
73
+ if (signal) {
74
+ await new Promise((r) => setTimeout(r, 0));
75
+ if (signal.aborted) throw new DOMException('The operation was aborted.', 'AbortError');
76
+ }
72
77
  const cache_key = create_remote_cache_key(id, stringify_remote_arg(arg, state.transport));
73
78
 
74
79
  return ((state.remote_data ??= {})[cache_key] ??= get_result());
@@ -440,7 +440,7 @@ function persist_state() {
440
440
  * @param {number} redirect_count
441
441
  * @param {{}} [nav_token]
442
442
  */
443
- async function _goto(url, options, redirect_count, nav_token) {
443
+ export async function _goto(url, options, redirect_count, nav_token) {
444
444
  /** @type {string[]} */
445
445
  let query_keys;
446
446
  const result = await navigate({
@@ -9,7 +9,7 @@ import {
9
9
  app,
10
10
  remote_responses,
11
11
  started,
12
- goto,
12
+ _goto,
13
13
  set_nearest_error_page,
14
14
  invalidateAll
15
15
  } from '../client.js';
@@ -82,7 +82,6 @@ export function form(id) {
82
82
  if (!response.ok) {
83
83
  // We only end up here in case of a network error or if the server has an internal error
84
84
  // (which shouldn't happen because we handle errors on the server and always send a 200 response)
85
- result = undefined;
86
85
  throw new Error('Failed to execute remote function');
87
86
  }
88
87
 
@@ -102,12 +101,14 @@ export function form(id) {
102
101
  if (!invalidateAll) {
103
102
  refresh_queries(refreshes, updates);
104
103
  }
105
- void goto(form_result.location, { invalidateAll });
104
+ // Use internal version to allow redirects to external URLs
105
+ void _goto(form_result.location, { invalidateAll }, 0);
106
106
  } else {
107
107
  result = undefined;
108
108
  throw new HttpError(500, form_result.error);
109
109
  }
110
110
  } catch (e) {
111
+ result = undefined;
111
112
  release_overrides(updates);
112
113
  throw e;
113
114
  } finally {
@@ -149,34 +149,35 @@ async function handle_remote_call_internal(event, state, options, manifest, id)
149
149
  * @param {string[]} client_refreshes
150
150
  */
151
151
  async function serialize_refreshes(client_refreshes) {
152
- const refreshes = {
153
- ...state.refreshes,
154
- ...Object.fromEntries(
155
- await Promise.all(
156
- client_refreshes.map(async (key) => {
157
- const [hash, name, payload] = key.split('/');
158
- const loader = manifest._.remotes[hash];
152
+ const refreshes = /** @type {Record<string, Promise<any>>} */ (state.refreshes);
159
153
 
160
- // TODO what do we do in this case? erroring after the mutation has happened is not great
161
- if (!loader) error(400, 'Bad Request');
154
+ for (const key of client_refreshes) {
155
+ if (refreshes[key] !== undefined) continue;
162
156
 
163
- const module = await loader();
164
- const fn = module[name];
157
+ const [hash, name, payload] = key.split('/');
165
158
 
166
- if (!fn) error(400, 'Bad Request');
159
+ const loader = manifest._.remotes[hash];
160
+ const fn = (await loader?.())?.[name];
167
161
 
168
- return [
169
- key,
170
- await with_request_store({ event, state }, () =>
171
- fn(parse_remote_arg(payload, transport))
172
- )
173
- ];
174
- })
175
- )
176
- )
177
- };
162
+ if (!fn) error(400, 'Bad Request');
163
+
164
+ refreshes[key] = with_request_store({ event, state }, () =>
165
+ fn(parse_remote_arg(payload, transport))
166
+ );
167
+ }
168
+
169
+ if (Object.keys(refreshes).length === 0) {
170
+ return undefined;
171
+ }
178
172
 
179
- return Object.keys(refreshes).length > 0 ? stringify(refreshes, transport) : undefined;
173
+ return stringify(
174
+ Object.fromEntries(
175
+ await Promise.all(
176
+ Object.entries(refreshes).map(async ([key, promise]) => [key, await promise])
177
+ )
178
+ ),
179
+ transport
180
+ );
180
181
  }
181
182
  }
182
183
 
@@ -73,32 +73,34 @@ export async function internal_respond(request, options, manifest, state) {
73
73
  const is_data_request = has_data_suffix(url.pathname);
74
74
  const remote_id = get_remote_id(url);
75
75
 
76
- const request_origin = request.headers.get('origin');
76
+ if (!DEV) {
77
+ const request_origin = request.headers.get('origin');
77
78
 
78
- if (remote_id) {
79
- if (request.method !== 'GET' && request_origin !== url.origin) {
80
- const message = 'Cross-site remote requests are forbidden';
81
- return json({ message }, { status: 403 });
82
- }
83
- } else if (options.csrf_check_origin) {
84
- const forbidden =
85
- is_form_content_type(request) &&
86
- (request.method === 'POST' ||
87
- request.method === 'PUT' ||
88
- request.method === 'PATCH' ||
89
- request.method === 'DELETE') &&
90
- request_origin !== url.origin &&
91
- (!request_origin || !options.csrf_trusted_origins.includes(request_origin));
92
-
93
- if (forbidden) {
94
- const message = `Cross-site ${request.method} form submissions are forbidden`;
95
- const opts = { status: 403 };
96
-
97
- if (request.headers.get('accept') === 'application/json') {
98
- return json({ message }, opts);
79
+ if (remote_id) {
80
+ if (request.method !== 'GET' && request_origin !== url.origin) {
81
+ const message = 'Cross-site remote requests are forbidden';
82
+ return json({ message }, { status: 403 });
99
83
  }
84
+ } else if (options.csrf_check_origin) {
85
+ const forbidden =
86
+ is_form_content_type(request) &&
87
+ (request.method === 'POST' ||
88
+ request.method === 'PUT' ||
89
+ request.method === 'PATCH' ||
90
+ request.method === 'DELETE') &&
91
+ request_origin !== url.origin &&
92
+ (!request_origin || !options.csrf_trusted_origins.includes(request_origin));
93
+
94
+ if (forbidden) {
95
+ const message = `Cross-site ${request.method} form submissions are forbidden`;
96
+ const opts = { status: 403 };
97
+
98
+ if (request.headers.get('accept') === 'application/json') {
99
+ return json({ message }, opts);
100
+ }
100
101
 
101
- return text(message, opts);
102
+ return text(message, opts);
103
+ }
102
104
  }
103
105
  }
104
106
 
@@ -587,7 +587,7 @@ export interface RequestState {
587
587
  };
588
588
  form_instances?: Map<any, any>;
589
589
  remote_data?: Record<string, MaybePromise<any>>;
590
- refreshes?: Record<string, any>;
590
+ refreshes?: Record<string, Promise<any>>;
591
591
  }
592
592
 
593
593
  export interface RequestStore {
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.36.3';
4
+ export const VERSION = '2.37.0';
package/types/index.d.ts CHANGED
@@ -413,7 +413,9 @@ declare module '@sveltejs/kit' {
413
413
  *
414
414
  * If the array contains `'*'`, all origins will be trusted. This is generally not recommended!
415
415
  *
416
- * **Warning**: Only add origins you completely trust, as this bypasses CSRF protection for those origins.
416
+ * > [!NOTE] Only add origins you completely trust, as this bypasses CSRF protection for those origins.
417
+ *
418
+ * CSRF checks only apply in production, not in local development.
417
419
  * @default []
418
420
  * @example ['https://checkout.stripe.com', 'https://accounts.google.com']
419
421
  */
@@ -1778,6 +1780,13 @@ declare module '@sveltejs/kit' {
1778
1780
  );
1779
1781
 
1780
1782
  export type RemoteQuery<T> = RemoteResource<T> & {
1783
+ /**
1784
+ * On the client, this function will update the value of the query without re-fetching it.
1785
+ *
1786
+ * On the server, this can be called in the context of a `command` or `form` and the specified data will accompany the action response back to the client.
1787
+ * This prevents SvelteKit needing to refresh all queries on the page in a second server round-trip.
1788
+ */
1789
+ set(value: T): void;
1781
1790
  /**
1782
1791
  * On the client, this function will re-fetch the query from the server.
1783
1792
  *
@@ -187,6 +187,6 @@
187
187
  null,
188
188
  null
189
189
  ],
190
- "mappings": "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",
190
+ "mappings": "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",
191
191
  "ignoreList": []
192
192
  }