@sveltejs/kit 2.67.0 → 2.68.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.67.0",
3
+ "version": "2.68.0",
4
4
  "description": "SvelteKit is the fastest way to build Svelte apps",
5
5
  "keywords": [
6
6
  "framework",
@@ -44,7 +44,7 @@
44
44
  "svelte": "^5.56.3",
45
45
  "typescript": "^5.3.3",
46
46
  "vite": "^6.4.3",
47
- "vitest": "^4.1.7"
47
+ "vitest": "^4.1.8"
48
48
  },
49
49
  "peerDependencies": {
50
50
  "@opentelemetry/api": "^1.0.0",
@@ -1248,14 +1248,24 @@ export interface NavigationTarget<
1248
1248
  /**
1249
1249
  * - `enter`: The app has hydrated/started
1250
1250
  * - `form`: The user submitted a `<form method="GET">`
1251
+ * - `goto`: Navigation was triggered by a `goto(...)` call or a redirect
1251
1252
  * - `leave`: The app is being left either because the tab is being closed or a navigation to a different document is occurring
1252
1253
  * - `link`: Navigation was triggered by a link click
1253
- * - `goto`: Navigation was triggered by a `goto(...)` call or a redirect
1254
1254
  * - `popstate`: Navigation was triggered by back/forward navigation
1255
1255
  */
1256
1256
  export type NavigationType = 'enter' | 'form' | 'leave' | 'link' | 'goto' | 'popstate';
1257
1257
 
1258
1258
  export interface NavigationBase {
1259
+ /**
1260
+ * The type of navigation:
1261
+ * - `enter`: The app has hydrated/started
1262
+ * - `form`: The user submitted a `<form method="GET">`
1263
+ * - `goto`: Navigation was triggered by a `goto(...)` call or a redirect
1264
+ * - `leave`: The app is being left either because the tab is being closed or a navigation to a different document is occurring
1265
+ * - `link`: Navigation was triggered by a link click
1266
+ * - `popstate`: Navigation was triggered by back/forward navigation
1267
+ */
1268
+ type: NavigationType;
1259
1269
  /**
1260
1270
  * Where navigation was triggered from
1261
1271
  */
@@ -1275,11 +1285,10 @@ export interface NavigationBase {
1275
1285
  complete: Promise<void>;
1276
1286
  }
1277
1287
 
1288
+ /**
1289
+ * The navigation that occurs when the app starts/hydrates
1290
+ */
1278
1291
  export interface NavigationEnter extends NavigationBase {
1279
- /**
1280
- * The type of navigation:
1281
- * - `enter`: The app has hydrated/started
1282
- */
1283
1292
  type: 'enter';
1284
1293
 
1285
1294
  /**
@@ -1295,11 +1304,10 @@ export interface NavigationEnter extends NavigationBase {
1295
1304
 
1296
1305
  export type NavigationExternal = NavigationGoto | NavigationLeave;
1297
1306
 
1307
+ /**
1308
+ * A navigation triggered by a `goto(...)` call or a redirect
1309
+ */
1298
1310
  export interface NavigationGoto extends NavigationBase {
1299
- /**
1300
- * The type of navigation:
1301
- * - `goto`: Navigation was triggered by a `goto(...)` call or a redirect
1302
- */
1303
1311
  type: 'goto';
1304
1312
 
1305
1313
  // TODO 3.0 remove this property, so that it only exists when type is 'popstate'
@@ -1310,11 +1318,10 @@ export interface NavigationGoto extends NavigationBase {
1310
1318
  delta?: undefined;
1311
1319
  }
1312
1320
 
1321
+ /**
1322
+ * A navigation triggered by the tab being closed, or the user navigating to a different document
1323
+ */
1313
1324
  export interface NavigationLeave extends NavigationBase {
1314
- /**
1315
- * The type of navigation:
1316
- * - `leave`: The app is being left either because the tab is being closed or a navigation to a different document is occurring
1317
- */
1318
1325
  type: 'leave';
1319
1326
 
1320
1327
  // TODO 3.0 remove this property, so that it only exists when type is 'popstate'
@@ -1325,11 +1332,10 @@ export interface NavigationLeave extends NavigationBase {
1325
1332
  delta?: undefined;
1326
1333
  }
1327
1334
 
1335
+ /**
1336
+ * A navigation triggered by a `<form method="GET">`
1337
+ */
1328
1338
  export interface NavigationFormSubmit extends NavigationBase {
1329
- /**
1330
- * The type of navigation:
1331
- * - `form`: The user submitted a `<form method="GET">`
1332
- */
1333
1339
  type: 'form';
1334
1340
 
1335
1341
  /**
@@ -1345,11 +1351,10 @@ export interface NavigationFormSubmit extends NavigationBase {
1345
1351
  delta?: undefined;
1346
1352
  }
1347
1353
 
1354
+ /**
1355
+ * A navigation triggered by back/forward navigation
1356
+ */
1348
1357
  export interface NavigationPopState extends NavigationBase {
1349
- /**
1350
- * The type of navigation:
1351
- * - `popstate`: Navigation was triggered by back/forward navigation
1352
- */
1353
1358
  type: 'popstate';
1354
1359
 
1355
1360
  /**
@@ -1363,11 +1368,10 @@ export interface NavigationPopState extends NavigationBase {
1363
1368
  event: PopStateEvent;
1364
1369
  }
1365
1370
 
1371
+ /**
1372
+ * A navigation triggered by a link click
1373
+ */
1366
1374
  export interface NavigationLink extends NavigationBase {
1367
- /**
1368
- * The type of navigation:
1369
- * - `link`: Navigation was triggered by a link click
1370
- */
1371
1375
  type: 'link';
1372
1376
 
1373
1377
  /**
@@ -2168,6 +2172,24 @@ export interface ValidationError {
2168
2172
  issues: StandardSchemaV1.Issue[];
2169
2173
  }
2170
2174
 
2175
+ /**
2176
+ * The form instance as received inside an `enhance` callback. See [Remote functions](https://svelte.dev/docs/kit/remote-functions#form) for full documentation.
2177
+ */
2178
+ export type RemoteFormEnhanceInstance<
2179
+ Input extends RemoteFormInput | void = RemoteFormInput | void,
2180
+ Output = any
2181
+ > = Omit<RemoteForm<Input, Output>, 'enhance' | 'element'> & {
2182
+ readonly element: HTMLFormElement;
2183
+ };
2184
+
2185
+ /**
2186
+ * The callback passed to a remote form's `enhance` method. See [Remote functions](https://svelte.dev/docs/kit/remote-functions#form) for full documentation.
2187
+ */
2188
+ export type RemoteFormEnhanceCallback<
2189
+ Input extends RemoteFormInput | void = RemoteFormInput | void,
2190
+ Output = any
2191
+ > = (form: RemoteFormEnhanceInstance<Input, Output>) => MaybePromise<void>;
2192
+
2171
2193
  /**
2172
2194
  * The type of a remote `form` function. See [Remote functions](https://svelte.dev/docs/kit/remote-functions#form) for full documentation.
2173
2195
  */
@@ -2184,13 +2206,7 @@ export type RemoteForm<Input extends RemoteFormInput | void, Output> = {
2184
2206
  updates: (...updates: RemoteQueryUpdate[]) => Promise<boolean>;
2185
2207
  };
2186
2208
  /** Use the `enhance` method to influence what happens when the form is submitted. */
2187
- enhance(
2188
- callback: (
2189
- form: Omit<RemoteForm<Input, Output>, 'enhance' | 'element'> & {
2190
- readonly element: HTMLFormElement;
2191
- }
2192
- ) => MaybePromise<void>
2193
- ): {
2209
+ enhance(callback: RemoteFormEnhanceCallback<Input, Output>): {
2194
2210
  method: 'POST';
2195
2211
  action: string;
2196
2212
  [attachment: symbol]: (node: HTMLFormElement) => void;
@@ -8,8 +8,8 @@ import { get_cache } from './shared.js';
8
8
  import { refresh } from './query.js';
9
9
 
10
10
  /**
11
- * In the context of a remote `command` or `form` request, returns an iterable
12
- * of `{ arg, query }` entries for the refreshes requested by the client, up to
11
+ * Inside a remote `command` or `form` callback, returns an iterable
12
+ * of `{ arg, query }` entries for the query instances the client asked to refresh, up to
13
13
  * the supplied `limit`. Each `query` is a `RemoteQuery` bound to the original
14
14
  * client-side cache key, so `refresh()` / `set()` propagate correctly even when
15
15
  * the query's schema transforms the input. `arg` is the *validated* argument,
@@ -18,6 +18,8 @@ import { refresh } from './query.js';
18
18
  *
19
19
  * Arguments that fail validation or exceed `limit` are recorded as failures in
20
20
  * the response to the client.
21
+ * See [Client-requested refreshes](https://svelte.dev/docs/kit/remote-functions#Single-flight-mutations-Client-requested-refreshes)
22
+ * for usage in a remote `command` or `form`.
21
23
  *
22
24
  * @example
23
25
  * ```ts
@@ -54,14 +56,16 @@ import { refresh } from './query.js';
54
56
  * @returns {QueryRequestedResult<Validated, Output>}
55
57
  */
56
58
  /**
57
- * In the context of a remote `command` or `form` request, returns an iterable
58
- * of `{ arg, query }` entries for the reconnects requested by the client, up to
59
+ * Inside a remote `command` or `form` callback, returns an iterable
60
+ * of `{ arg, query }` entries for the live query instances the client asked to reconnect, up to
59
61
  * the supplied `limit`. Each `query` is a `RemoteLiveQuery` bound to the original
60
62
  * client-side cache key, so `reconnect()` propagates correctly even when
61
63
  * the query's schema transforms the input. `arg` is the *validated* argument.
62
64
  *
63
65
  * Arguments that fail validation or exceed `limit` are recorded as failures in
64
66
  * the response to the client.
67
+ * See [Client-requested refreshes](https://svelte.dev/docs/kit/remote-functions#Single-flight-mutations-Client-requested-refreshes)
68
+ * for usage in a remote `command` or `form`.
65
69
  *
66
70
  * @example
67
71
  * ```ts
@@ -90,8 +90,6 @@ const snapshots = storage.get(SNAPSHOT_KEY) ?? {};
90
90
  if (DEV && BROWSER) {
91
91
  let warned = false;
92
92
 
93
- const current_module_url = import.meta.url.split('?')[0]; // remove query params that vite adds to the URL when it is loaded from node_modules
94
-
95
93
  const warn = () => {
96
94
  if (warned) return;
97
95
 
@@ -100,9 +98,13 @@ if (DEV && BROWSER) {
100
98
  let stack = new Error().stack?.split('\n');
101
99
  if (!stack) return;
102
100
  if (!stack[0].includes('https:') && !stack[0].includes('http:')) stack = stack.slice(1); // Chrome includes the error message in the stack
103
- stack = stack.slice(2); // remove `warn` and the place where `warn` was called
104
- // Can be falsy if was called directly from an anonymous function
105
- if (stack[0]?.includes(current_module_url)) return;
101
+
102
+ // skip over `warn` and the place where `warn` was called
103
+ const frame = stack[2];
104
+
105
+ // ignore calls that happen inside dependencies, including SvelteKit.
106
+ // `frame` can be falsy if we came from an anonymous function
107
+ if (frame?.includes('node_modules')) return;
106
108
 
107
109
  warned = true;
108
110
 
@@ -163,7 +165,8 @@ function clear_onward_history(current_history_index, current_navigation_index) {
163
165
  * Returns a `Promise` that never resolves (to prevent any
164
166
  * subsequent work, e.g. history manipulation, from happening)
165
167
  * @param {URL} url
166
- * @param {boolean} [replace] If `true`, will replace the current `history` entry rather than creating a new one with `pushState`
168
+ * @param {boolean} [replace] if `true`, will replace the current `history` entry rather than creating a new one with `pushState`
169
+ * @returns {Promise<any>} a promise that never resolves
167
170
  */
168
171
  function native_navigation(url, replace = false) {
169
172
  if (replace) {
@@ -301,6 +304,7 @@ let token;
301
304
  * If a preload token is in the set and the preload errors, the error
302
305
  * handling logic (for example reloading) is skipped.
303
306
  */
307
+ /** @type {Set<{}>} */
304
308
  const preload_tokens = new Set();
305
309
 
306
310
  /** @type {Promise<void> | null} */
@@ -527,6 +531,7 @@ function persist_state() {
527
531
  * @param {{ replaceState?: boolean; noScroll?: boolean; keepFocus?: boolean; invalidateAll?: boolean; invalidate?: Array<string | URL | ((url: URL) => boolean)>; state?: Record<string, any> }} options
528
532
  * @param {number} redirect_count
529
533
  * @param {{}} [nav_token]
534
+ * @returns {Promise<void>}
530
535
  */
531
536
  export async function _goto(url, options, redirect_count, nav_token) {
532
537
  /** @type {Set<string>} */
@@ -1167,9 +1172,19 @@ function preload_error({ error, url, route, params }) {
1167
1172
  }
1168
1173
 
1169
1174
  /**
1170
- * @param {import('./types.js').NavigationIntent & { preload?: {} }} intent
1175
+ * @overload
1176
+ * @param {import('./types.js').NavigationIntent} intent
1177
+ * @returns {Promise<import('./types.js').NavigationResult | undefined>}
1178
+ */
1179
+ /**
1180
+ * @overload
1181
+ * @param {import('./types.js').NavigationIntent & { preload: {} }} intent
1171
1182
  * @returns {Promise<import('./types.js').NavigationResult>}
1172
1183
  */
1184
+ /**
1185
+ * @param {import('./types.js').NavigationIntent & { preload?: {} }} intent
1186
+ * @returns {Promise<import('./types.js').NavigationResult | undefined>}
1187
+ */
1173
1188
  async function load_route({ id, invalidating, url, params, route, preload }) {
1174
1189
  if (load_cache?.id === id) {
1175
1190
  // the preload becomes the real navigation
@@ -1225,7 +1240,7 @@ async function load_route({ id, invalidating, url, params, route, preload }) {
1225
1240
  } catch (error) {
1226
1241
  const handled_error = await handle_error(error, { url, params, route: { id } });
1227
1242
 
1228
- if (preload_tokens.has(preload)) {
1243
+ if (preload && preload_tokens.has(preload)) {
1229
1244
  return preload_error({ error: handled_error, url, params, route });
1230
1245
  }
1231
1246
 
@@ -1315,7 +1330,7 @@ async function load_route({ id, invalidating, url, params, route, preload }) {
1315
1330
  };
1316
1331
  }
1317
1332
 
1318
- if (preload_tokens.has(preload)) {
1333
+ if (preload && preload_tokens.has(preload)) {
1319
1334
  return preload_error({
1320
1335
  error: await handle_error(err, { params, url, route: { id: route.id } }),
1321
1336
  url,
@@ -1418,7 +1433,7 @@ async function load_nearest_error_page(i, branch, errors) {
1418
1433
  * url: URL;
1419
1434
  * route: { id: string | null }
1420
1435
  * }} opts
1421
- * @returns {Promise<import('./types.js').NavigationFinished>}
1436
+ * @returns {Promise<import('./types.js').NavigationFinished | undefined>} returns `undefined` in case of a redirect
1422
1437
  */
1423
1438
  async function load_root_error_page({ status, error, url, route }) {
1424
1439
  /** @type {Record<string, string>} */
@@ -1444,11 +1459,15 @@ async function load_root_error_page({ status, error, url, route }) {
1444
1459
  }
1445
1460
 
1446
1461
  server_data_node = server_data.nodes[0] ?? null;
1447
- } catch {
1462
+ } catch (e) {
1448
1463
  // at this point we have no choice but to fall back to the server, if it wouldn't
1449
- // bring us right back here, turning this into an endless loop
1450
- if (url.origin !== origin || url.pathname !== location.pathname || hydrated) {
1451
- await native_navigation(url);
1464
+ // bring us right back here, turning this into an endless loop.
1465
+ // if __data.json returned 404, the route doesn't exist don't reload or we loop
1466
+ if (
1467
+ !(e instanceof HttpError && e.status === 404) &&
1468
+ (url.origin !== origin || url.pathname !== location.pathname || hydrated)
1469
+ ) {
1470
+ return await native_navigation(url);
1452
1471
  }
1453
1472
  }
1454
1473
  }
@@ -1483,11 +1502,14 @@ async function load_root_error_page({ status, error, url, route }) {
1483
1502
  route: null
1484
1503
  });
1485
1504
  } catch (error) {
1505
+ // client-side navigation if the root layout loader throws a redirect while
1506
+ // rendering the default error page
1486
1507
  if (error instanceof Redirect) {
1487
- // @ts-expect-error TODO investigate this
1488
- return _goto(new URL(error.location, location.href), {}, 0);
1508
+ await _goto(new URL(error.location, location.href), {}, 0);
1509
+ return;
1489
1510
  }
1490
1511
 
1512
+ // otherwise, render the static error page
1491
1513
  const error_template = await app.get_error_template();
1492
1514
  const handled = await handle_error(error, { url, params, route });
1493
1515
  const message = String(handled?.message ?? '')
@@ -1685,6 +1707,7 @@ function _before_navigate({ url, type, intent, delta, event, scroll }) {
1685
1707
  * block?: () => void;
1686
1708
  * event?: Event
1687
1709
  * }} opts
1710
+ * @returns {Promise<void>}
1688
1711
  */
1689
1712
  async function navigate({
1690
1713
  type,
@@ -1785,9 +1808,11 @@ async function navigate({
1785
1808
  // abort if user navigated during update
1786
1809
  if (token !== nav_token) {
1787
1810
  nav.reject(new Error('navigation aborted'));
1788
- return false;
1811
+ return;
1789
1812
  }
1790
1813
 
1814
+ if (!navigation_result) return;
1815
+
1791
1816
  if (navigation_result.type === 'redirect') {
1792
1817
  // whatwg fetch spec https://fetch.spec.whatwg.org/#http-redirect-fetch says to error after 20 redirects
1793
1818
  if (redirect_count < 20) {
@@ -1817,12 +1842,14 @@ async function navigate({
1817
1842
  url,
1818
1843
  route: { id: null }
1819
1844
  });
1845
+
1846
+ if (!navigation_result) return;
1820
1847
  } else if (/** @type {number} */ (navigation_result.props.page.status) >= 400) {
1821
1848
  const updated = await stores.updated.check();
1822
1849
  if (updated) {
1823
1850
  // Before reloading, try to update the service worker if it exists
1824
1851
  await update_service_worker();
1825
- await native_navigation(url, replace_state);
1852
+ return await native_navigation(url, replace_state);
1826
1853
  }
1827
1854
  }
1828
1855
 
@@ -1961,7 +1988,7 @@ async function navigate({
1961
1988
  if (token !== nav_token) {
1962
1989
  // a new navigation happened while we were waiting for the DOM to update, so abort
1963
1990
  nav.reject(new Error('navigation aborted'));
1964
- return false;
1991
+ return;
1965
1992
  }
1966
1993
 
1967
1994
  // Check for async rendering error
@@ -2032,7 +2059,7 @@ async function navigate({
2032
2059
  * @param {App.Error} error
2033
2060
  * @param {number} status
2034
2061
  * @param {boolean} [replace_state]
2035
- * @returns {Promise<import('./types.js').NavigationFinished>}
2062
+ * @returns {Promise<import('./types.js').NavigationFinished | undefined>}
2036
2063
  */
2037
2064
  async function server_fallback(url, route, error, status, replace_state) {
2038
2065
  if (url.origin === origin && url.pathname === location.pathname && !hydrated) {
@@ -2963,6 +2990,7 @@ function _start_router() {
2963
2990
  /**
2964
2991
  * @param {HTMLElement} target
2965
2992
  * @param {import('./types.js').HydrateOptions} opts
2993
+ * @returns {Promise<void>}
2966
2994
  */
2967
2995
  async function _hydrate(
2968
2996
  target,
@@ -3049,8 +3077,7 @@ async function _hydrate(
3049
3077
  if (error instanceof Redirect) {
3050
3078
  // this is a real edge case — `load` would need to return
3051
3079
  // a redirect but only in the browser
3052
- await native_navigation(new URL(error.location, location.href));
3053
- return;
3080
+ return await native_navigation(new URL(error.location, location.href));
3054
3081
  }
3055
3082
 
3056
3083
  result = await load_root_error_page({
@@ -3064,6 +3091,10 @@ async function _hydrate(
3064
3091
  hydrate = false;
3065
3092
  }
3066
3093
 
3094
+ // Exit early when we encounter a redirect while loading the root error page.
3095
+ // In this case, `initialize` will be called later on
3096
+ if (!result) return;
3097
+
3067
3098
  if (result.props.page) {
3068
3099
  result.props.page.state = {};
3069
3100
  }
@@ -94,7 +94,8 @@ export function form(id) {
94
94
  let enhance_callback = async (instance) => {
95
95
  if (await instance.submit()) {
96
96
  await tick();
97
- instance.element.reset();
97
+ // We call reset from the prototype to avoid DOM clobbering
98
+ HTMLFormElement.prototype.reset.call(instance.element);
98
99
  }
99
100
  };
100
101
 
@@ -109,6 +110,9 @@ export function form(id) {
109
110
  /** @type {InternalRemoteFormIssue[] | null} */
110
111
  let unread_issues = null;
111
112
 
113
+ /** @type {string | null} */
114
+ let previous_submitter_name = null;
115
+
112
116
  /**
113
117
  * In dev, warn if there are validation issues going unread
114
118
  */
@@ -401,6 +405,29 @@ export function form(id) {
401
405
 
402
406
  const form_data = new FormData(form, event.submitter);
403
407
 
408
+ if (
409
+ previous_submitter_name !== null &&
410
+ !Array.from(form_data.keys()).map(strip_prefix).includes(previous_submitter_name)
411
+ ) {
412
+ // Strip any `n:`/`b:` type prefix before clearing, otherwise
413
+ // `set_nested_value` would coerce `undefined` to `NaN`/`false`
414
+ // instead of clearing the previously-submitted value.
415
+ set_nested_value(input, previous_submitter_name, undefined);
416
+ }
417
+
418
+ if (event.submitter) {
419
+ const name = event.submitter.getAttribute('name');
420
+ const value = /** @type {any} */ (event.submitter).value;
421
+
422
+ if (name !== null && value !== undefined) {
423
+ set_nested_value(input, name, value);
424
+ }
425
+
426
+ previous_submitter_name = strip_prefix(name);
427
+ } else {
428
+ previous_submitter_name = null;
429
+ }
430
+
404
431
  if (DEV) {
405
432
  validate_form_data(form_data, clone(form).enctype);
406
433
  }
@@ -503,7 +530,7 @@ export function form(id) {
503
530
  );
504
531
  }
505
532
 
506
- name = name.replace(/^[nb]:/, '');
533
+ name = strip_prefix(name);
507
534
 
508
535
  touched[name] = true;
509
536
  };
@@ -769,3 +796,13 @@ function validate_form_data(form_data, enctype) {
769
796
  }
770
797
  }
771
798
  }
799
+
800
+ /**
801
+ * Remove the `n:` or `b:` prefix from a field name
802
+ * @template {string | null} T
803
+ * @param {T} name
804
+ * @returns {T}
805
+ */
806
+ function strip_prefix(name) {
807
+ return /** @type {T} */ (name && name.replace(/^[nb]:/, ''));
808
+ }
@@ -42,10 +42,6 @@ export function convert_formdata(data) {
42
42
 
43
43
  if (is_array) key = key.slice(0, -2);
44
44
 
45
- if (values.length > 1 && !is_array) {
46
- throw new Error(`Form cannot contain duplicated keys — "${key}" has ${values.length} values`);
47
- }
48
-
49
45
  // an empty `<input type="file">` will submit a non-existent file, bizarrely
50
46
  values = values.filter(
51
47
  (entry) => typeof entry === 'string' || entry.name !== '' || entry.size > 0
@@ -60,6 +56,10 @@ export function convert_formdata(data) {
60
56
  values = values.map((v) => v === 'on');
61
57
  }
62
58
 
59
+ if (values.length > 1 && !is_array) {
60
+ throw new Error(`Form cannot contain duplicated keys — "${key}" has ${values.length} values`);
61
+ }
62
+
63
63
  set_nested_value(result, key, is_array ? values : values[0]);
64
64
  }
65
65
 
@@ -607,6 +607,34 @@ function get_type_prefix(field_type, is_array, input_value) {
607
607
  return '';
608
608
  }
609
609
 
610
+ /**
611
+ * A deep-clone implementation specifically for form data, where
612
+ * we don't need to worry about cycles and whatnot
613
+ * @param {any} value
614
+ * @returns {any}
615
+ */
616
+ function deep_clone(value) {
617
+ if (value !== null && typeof value === 'object') {
618
+ if (value instanceof File) {
619
+ return value;
620
+ }
621
+
622
+ if (Array.isArray(value)) {
623
+ return value.map(deep_clone);
624
+ }
625
+
626
+ /** @type {Record<string, any>} */
627
+ const clone = {};
628
+ for (const key of Object.keys(value)) {
629
+ clone[key] = deep_clone(value[key]);
630
+ }
631
+
632
+ return clone;
633
+ }
634
+
635
+ return value;
636
+ }
637
+
610
638
  /**
611
639
  * Creates a proxy-based field accessor for form data
612
640
  * @param {any} target - Function or empty POJO
@@ -618,7 +646,8 @@ function get_type_prefix(field_type, is_array, input_value) {
618
646
  */
619
647
  export function create_field_proxy(target, get_input, set_input, get_issues, path = []) {
620
648
  const get_value = () => {
621
- return deep_get(get_input(), path);
649
+ const value = deep_get(get_input(), path);
650
+ return deep_clone(value);
622
651
  };
623
652
 
624
653
  return new Proxy(target, {
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.67.0';
4
+ export const VERSION = '2.68.0';
package/types/index.d.ts CHANGED
@@ -1221,14 +1221,24 @@ declare module '@sveltejs/kit' {
1221
1221
  /**
1222
1222
  * - `enter`: The app has hydrated/started
1223
1223
  * - `form`: The user submitted a `<form method="GET">`
1224
+ * - `goto`: Navigation was triggered by a `goto(...)` call or a redirect
1224
1225
  * - `leave`: The app is being left either because the tab is being closed or a navigation to a different document is occurring
1225
1226
  * - `link`: Navigation was triggered by a link click
1226
- * - `goto`: Navigation was triggered by a `goto(...)` call or a redirect
1227
1227
  * - `popstate`: Navigation was triggered by back/forward navigation
1228
1228
  */
1229
1229
  export type NavigationType = 'enter' | 'form' | 'leave' | 'link' | 'goto' | 'popstate';
1230
1230
 
1231
1231
  export interface NavigationBase {
1232
+ /**
1233
+ * The type of navigation:
1234
+ * - `enter`: The app has hydrated/started
1235
+ * - `form`: The user submitted a `<form method="GET">`
1236
+ * - `goto`: Navigation was triggered by a `goto(...)` call or a redirect
1237
+ * - `leave`: The app is being left either because the tab is being closed or a navigation to a different document is occurring
1238
+ * - `link`: Navigation was triggered by a link click
1239
+ * - `popstate`: Navigation was triggered by back/forward navigation
1240
+ */
1241
+ type: NavigationType;
1232
1242
  /**
1233
1243
  * Where navigation was triggered from
1234
1244
  */
@@ -1248,11 +1258,10 @@ declare module '@sveltejs/kit' {
1248
1258
  complete: Promise<void>;
1249
1259
  }
1250
1260
 
1261
+ /**
1262
+ * The navigation that occurs when the app starts/hydrates
1263
+ */
1251
1264
  export interface NavigationEnter extends NavigationBase {
1252
- /**
1253
- * The type of navigation:
1254
- * - `enter`: The app has hydrated/started
1255
- */
1256
1265
  type: 'enter';
1257
1266
 
1258
1267
  /**
@@ -1268,11 +1277,10 @@ declare module '@sveltejs/kit' {
1268
1277
 
1269
1278
  export type NavigationExternal = NavigationGoto | NavigationLeave;
1270
1279
 
1280
+ /**
1281
+ * A navigation triggered by a `goto(...)` call or a redirect
1282
+ */
1271
1283
  export interface NavigationGoto extends NavigationBase {
1272
- /**
1273
- * The type of navigation:
1274
- * - `goto`: Navigation was triggered by a `goto(...)` call or a redirect
1275
- */
1276
1284
  type: 'goto';
1277
1285
 
1278
1286
  // TODO 3.0 remove this property, so that it only exists when type is 'popstate'
@@ -1283,11 +1291,10 @@ declare module '@sveltejs/kit' {
1283
1291
  delta?: undefined;
1284
1292
  }
1285
1293
 
1294
+ /**
1295
+ * A navigation triggered by the tab being closed, or the user navigating to a different document
1296
+ */
1286
1297
  export interface NavigationLeave extends NavigationBase {
1287
- /**
1288
- * The type of navigation:
1289
- * - `leave`: The app is being left either because the tab is being closed or a navigation to a different document is occurring
1290
- */
1291
1298
  type: 'leave';
1292
1299
 
1293
1300
  // TODO 3.0 remove this property, so that it only exists when type is 'popstate'
@@ -1298,11 +1305,10 @@ declare module '@sveltejs/kit' {
1298
1305
  delta?: undefined;
1299
1306
  }
1300
1307
 
1308
+ /**
1309
+ * A navigation triggered by a `<form method="GET">`
1310
+ */
1301
1311
  export interface NavigationFormSubmit extends NavigationBase {
1302
- /**
1303
- * The type of navigation:
1304
- * - `form`: The user submitted a `<form method="GET">`
1305
- */
1306
1312
  type: 'form';
1307
1313
 
1308
1314
  /**
@@ -1318,11 +1324,10 @@ declare module '@sveltejs/kit' {
1318
1324
  delta?: undefined;
1319
1325
  }
1320
1326
 
1327
+ /**
1328
+ * A navigation triggered by back/forward navigation
1329
+ */
1321
1330
  export interface NavigationPopState extends NavigationBase {
1322
- /**
1323
- * The type of navigation:
1324
- * - `popstate`: Navigation was triggered by back/forward navigation
1325
- */
1326
1331
  type: 'popstate';
1327
1332
 
1328
1333
  /**
@@ -1336,11 +1341,10 @@ declare module '@sveltejs/kit' {
1336
1341
  event: PopStateEvent;
1337
1342
  }
1338
1343
 
1344
+ /**
1345
+ * A navigation triggered by a link click
1346
+ */
1339
1347
  export interface NavigationLink extends NavigationBase {
1340
- /**
1341
- * The type of navigation:
1342
- * - `link`: Navigation was triggered by a link click
1343
- */
1344
1348
  type: 'link';
1345
1349
 
1346
1350
  /**
@@ -2141,6 +2145,24 @@ declare module '@sveltejs/kit' {
2141
2145
  issues: StandardSchemaV1.Issue[];
2142
2146
  }
2143
2147
 
2148
+ /**
2149
+ * The form instance as received inside an `enhance` callback. See [Remote functions](https://svelte.dev/docs/kit/remote-functions#form) for full documentation.
2150
+ */
2151
+ export type RemoteFormEnhanceInstance<
2152
+ Input extends RemoteFormInput | void = RemoteFormInput | void,
2153
+ Output = any
2154
+ > = Omit<RemoteForm<Input, Output>, 'enhance' | 'element'> & {
2155
+ readonly element: HTMLFormElement;
2156
+ };
2157
+
2158
+ /**
2159
+ * The callback passed to a remote form's `enhance` method. See [Remote functions](https://svelte.dev/docs/kit/remote-functions#form) for full documentation.
2160
+ */
2161
+ export type RemoteFormEnhanceCallback<
2162
+ Input extends RemoteFormInput | void = RemoteFormInput | void,
2163
+ Output = any
2164
+ > = (form: RemoteFormEnhanceInstance<Input, Output>) => MaybePromise<void>;
2165
+
2144
2166
  /**
2145
2167
  * The type of a remote `form` function. See [Remote functions](https://svelte.dev/docs/kit/remote-functions#form) for full documentation.
2146
2168
  */
@@ -2157,13 +2179,7 @@ declare module '@sveltejs/kit' {
2157
2179
  updates: (...updates: RemoteQueryUpdate[]) => Promise<boolean>;
2158
2180
  };
2159
2181
  /** Use the `enhance` method to influence what happens when the form is submitted. */
2160
- enhance(
2161
- callback: (
2162
- form: Omit<RemoteForm<Input, Output>, 'enhance' | 'element'> & {
2163
- readonly element: HTMLFormElement;
2164
- }
2165
- ) => MaybePromise<void>
2166
- ): {
2182
+ enhance(callback: RemoteFormEnhanceCallback<Input, Output>): {
2167
2183
  method: 'POST';
2168
2184
  action: string;
2169
2185
  [attachment: symbol]: (node: HTMLFormElement) => void;
@@ -3644,8 +3660,8 @@ declare module '$app/server' {
3644
3660
  function live<Schema extends StandardSchemaV1, Output>(schema: Schema, fn: (arg: StandardSchemaV1.InferOutput<Schema>) => RemoteLiveQueryUserFunctionReturnType<Output>): RemoteLiveQueryFunction<StandardSchemaV1.InferInput<Schema>, Output, StandardSchemaV1.InferOutput<Schema>>;
3645
3661
  }
3646
3662
  /**
3647
- * In the context of a remote `command` or `form` request, returns an iterable
3648
- * of `{ arg, query }` entries for the refreshes requested by the client, up to
3663
+ * Inside a remote `command` or `form` callback, returns an iterable
3664
+ * of `{ arg, query }` entries for the query instances the client asked to refresh, up to
3649
3665
  * the supplied `limit`. Each `query` is a `RemoteQuery` bound to the original
3650
3666
  * client-side cache key, so `refresh()` / `set()` propagate correctly even when
3651
3667
  * the query's schema transforms the input. `arg` is the *validated* argument,
@@ -3654,6 +3670,8 @@ declare module '$app/server' {
3654
3670
  *
3655
3671
  * Arguments that fail validation or exceed `limit` are recorded as failures in
3656
3672
  * the response to the client.
3673
+ * See [Client-requested refreshes](https://svelte.dev/docs/kit/remote-functions#Single-flight-mutations-Client-requested-refreshes)
3674
+ * for usage in a remote `command` or `form`.
3657
3675
  *
3658
3676
  * @example
3659
3677
  * ```ts
@@ -3684,14 +3702,16 @@ declare module '$app/server' {
3684
3702
  * */
3685
3703
  export function requested<Input, Output, Validated = Input>(query: RemoteQueryFunction<Input, Output, Validated>, limit: number): QueryRequestedResult<Validated, Output>;
3686
3704
  /**
3687
- * In the context of a remote `command` or `form` request, returns an iterable
3688
- * of `{ arg, query }` entries for the reconnects requested by the client, up to
3705
+ * Inside a remote `command` or `form` callback, returns an iterable
3706
+ * of `{ arg, query }` entries for the live query instances the client asked to reconnect, up to
3689
3707
  * the supplied `limit`. Each `query` is a `RemoteLiveQuery` bound to the original
3690
3708
  * client-side cache key, so `reconnect()` propagates correctly even when
3691
3709
  * the query's schema transforms the input. `arg` is the *validated* argument.
3692
3710
  *
3693
3711
  * Arguments that fail validation or exceed `limit` are recorded as failures in
3694
3712
  * the response to the client.
3713
+ * See [Client-requested refreshes](https://svelte.dev/docs/kit/remote-functions#Single-flight-mutations-Client-requested-refreshes)
3714
+ * for usage in a remote `command` or `form`.
3695
3715
  *
3696
3716
  * @example
3697
3717
  * ```ts
@@ -86,6 +86,8 @@
86
86
  "ExtractId",
87
87
  "InvalidField",
88
88
  "ValidationError",
89
+ "RemoteFormEnhanceInstance",
90
+ "RemoteFormEnhanceCallback",
89
91
  "RemoteForm",
90
92
  "RemoteCommand",
91
93
  "RemoteQueryUpdate",
@@ -249,6 +251,6 @@
249
251
  null,
250
252
  null
251
253
  ],
252
- "mappings": "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",
254
+ "mappings": "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",
253
255
  "ignoreList": []
254
256
  }