@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 +2 -2
- package/src/exports/public.d.ts +48 -32
- package/src/runtime/app/server/remote/requested.js +8 -4
- package/src/runtime/client/client.js +53 -22
- package/src/runtime/client/remote-functions/form.svelte.js +39 -2
- package/src/runtime/form-utils.js +34 -5
- package/src/version.js +1 -1
- package/types/index.d.ts +56 -36
- package/types/index.d.ts.map +3 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sveltejs/kit",
|
|
3
|
-
"version": "2.
|
|
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.
|
|
47
|
+
"vitest": "^4.1.8"
|
|
48
48
|
},
|
|
49
49
|
"peerDependencies": {
|
|
50
50
|
"@opentelemetry/api": "^1.0.0",
|
package/src/exports/public.d.ts
CHANGED
|
@@ -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
|
-
*
|
|
12
|
-
* of `{ arg, query }` entries for the
|
|
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
|
-
*
|
|
58
|
-
* of `{ arg, query }` entries for the
|
|
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
|
-
|
|
104
|
-
//
|
|
105
|
-
|
|
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]
|
|
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
|
-
* @
|
|
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
|
|
1451
|
-
|
|
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
|
-
|
|
1488
|
-
return
|
|
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
|
|
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
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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
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
|
-
*
|
|
3648
|
-
* of `{ arg, query }` entries for the
|
|
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
|
-
*
|
|
3688
|
-
* of `{ arg, query }` entries for the
|
|
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
|
package/types/index.d.ts.map
CHANGED
|
@@ -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": ";;;;;;;;MAkCKA,IAAIA;;;;;kBAKQC,OAAOA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;aAiCZC,cAAcA;;;;;;aAMdC,cAAcA;;;;;;;;MAQrBC,aAAaA;;;;;OAKJC,YAAYA;;kBAETC,aAAaA;;;;;;MAMzBC,qBAAqBA;;;;;;;;;;;kBAWTC,OAAOA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBA8IPC,MAAMA;;;;;;;;;;;kBAWNC,OAAOA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBA4DPC,QAAQA;;;;;;;;kBAQRC,SAASA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;aAqmBdC,MAAMA;;;;;;;;;;;aAWNC,iBAAiBA;;;;;;;;;;;;aAYjBC,qBAAqBA;;;;;;;;;aASrBC,iBAAiBA;;;;;;;;;;aAUjBC,WAAWA;;;;;;;;;;aAUXC,UAAUA;;;;;;aAMVC,UAAUA;;;;;;aAMVC,OAAOA;;;;;;;;;;;;;;;;;;;;;;;;;;aA0BPC,SAASA;;;;;kBAKJC,WAAWA;;;;;;;;;;;;aAYhBC,IAAIA;;;;;;;;;;;;kBAYCC,SAASA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAyHTC,eAAeA;;;;;;;;;;;;;;;;;;;;;;;;;;kBA0BfC,gBAAgBA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;aA6CrBC,cAAcA;;kBAETC,cAAcA
|
|
254
|
+
"mappings": "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",
|
|
253
255
|
"ignoreList": []
|
|
254
256
|
}
|