@sveltejs/kit 2.10.0 → 2.11.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.10.0",
3
+ "version": "2.11.0",
4
4
  "description": "SvelteKit is the fastest way to build Svelte apps",
5
5
  "keywords": [
6
6
  "framework",
@@ -152,10 +152,14 @@ export function write_client_manifest(kit, manifest_data, output, metadata) {
152
152
  client_hooks_file ? 'client_hooks.handleError || ' : ''
153
153
  }(({ error }) => { console.error(error) }),
154
154
  ${client_hooks_file ? 'init: client_hooks.init,' : ''}
155
-
156
- reroute: ${universal_hooks_file ? 'universal_hooks.reroute || ' : ''}(() => {})
155
+ reroute: ${universal_hooks_file ? 'universal_hooks.reroute || ' : ''}(() => {}),
156
+ transport: ${universal_hooks_file ? 'universal_hooks.transport || ' : ''}{}
157
157
  };
158
158
 
159
+ export const decoders = Object.fromEntries(Object.entries(hooks.transport).map(([k, v]) => [k, v.decode]));
160
+
161
+ export const decode = (type, value) => decoders[type](value);
162
+
159
163
  export { default as root } from '../root.${isSvelte5Plus() ? 'js' : 'svelte'}';
160
164
  `
161
165
  );
@@ -67,16 +67,20 @@ export async function get_hooks() {
67
67
  let handle;
68
68
  let handleFetch;
69
69
  let handleError;
70
- ${server_hooks ? `({ handle, handleFetch, handleError } = await import(${s(server_hooks)}));` : ''}
70
+ let init;
71
+ ${server_hooks ? `({ handle, handleFetch, handleError, init } = await import(${s(server_hooks)}));` : ''}
71
72
 
72
73
  let reroute;
73
- ${universal_hooks ? `({ reroute } = await import(${s(universal_hooks)}));` : ''}
74
+ let transport;
75
+ ${universal_hooks ? `({ reroute, transport } = await import(${s(universal_hooks)}));` : ''}
74
76
 
75
77
  return {
76
78
  handle,
77
79
  handleFetch,
78
80
  handleError,
81
+ init,
79
82
  reroute,
83
+ transport
80
84
  };
81
85
  }
82
86
 
@@ -726,11 +726,13 @@ export type HandleFetch = (input: {
726
726
 
727
727
  /**
728
728
  * The [`init`](https://svelte.dev/docs/kit/hooks#Shared-hooks-init) will be invoked before the server responds to its first request
729
+ * @since 2.10.0
729
730
  */
730
731
  export type ServerInit = () => MaybePromise<void>;
731
732
 
732
733
  /**
733
734
  * The [`init`](https://svelte.dev/docs/kit/hooks#Shared-hooks-init) will be invoked once the app starts in the browser
735
+ * @since 2.10.0
734
736
  */
735
737
  export type ClientInit = () => MaybePromise<void>;
736
738
 
@@ -740,6 +742,43 @@ export type ClientInit = () => MaybePromise<void>;
740
742
  */
741
743
  export type Reroute = (event: { url: URL }) => void | string;
742
744
 
745
+ /**
746
+ * The [`transport`](https://svelte.dev/docs/kit/hooks#Universal-hooks-transport) hook allows you to transport custom types across the server/client boundary.
747
+ *
748
+ * Each transporter has a pair of `encode` and `decode` functions. On the server, `encode` determines whether a value is an instance of the custom type and, if so, returns a non-falsy encoding of the value which can be an object or an array (or `false` otherwise).
749
+ *
750
+ * In the browser, `decode` turns the encoding back into an instance of the custom type.
751
+ *
752
+ * ```ts
753
+ * import type { Transport } from '@sveltejs/kit';
754
+ *
755
+ * declare class MyCustomType {
756
+ * data: any
757
+ * }
758
+ *
759
+ * // hooks.js
760
+ * export const transport: Transport = {
761
+ * MyCustomType: {
762
+ * encode: (value) => value instanceof MyCustomType && [value.data],
763
+ * decode: ([data]) => new MyCustomType(data)
764
+ * }
765
+ * };
766
+ * ```
767
+ * @since 2.11.0
768
+ */
769
+ export type Transport = Record<string, Transporter>;
770
+
771
+ /**
772
+ * A member of the [`transport`](https://svelte.dev/docs/kit/hooks#Universal-hooks-transport) hook.
773
+ */
774
+ export interface Transporter<
775
+ T = any,
776
+ U = Exclude<any, false | 0 | '' | null | undefined | typeof NaN>
777
+ > {
778
+ encode: (value: T) => false | U;
779
+ decode: (data: U) => T;
780
+ }
781
+
743
782
  /**
744
783
  * The generic form of `PageLoad` and `LayoutLoad`. You should import those from `./$types` (see [generated types](https://svelte.dev/docs/kit/types#Generated-types))
745
784
  * rather than using `Load` directly.
@@ -1,7 +1,7 @@
1
1
  import * as devalue from 'devalue';
2
2
  import { DEV } from 'esm-env';
3
3
  import { invalidateAll } from './navigation.js';
4
- import { applyAction } from '../client/client.js';
4
+ import { app, applyAction } from '../client/client.js';
5
5
 
6
6
  export { applyAction };
7
7
 
@@ -29,9 +29,11 @@ export { applyAction };
29
29
  */
30
30
  export function deserialize(result) {
31
31
  const parsed = JSON.parse(result);
32
+
32
33
  if (parsed.data) {
33
- parsed.data = devalue.parse(parsed.data);
34
+ parsed.data = devalue.parse(parsed.data, app.decoders);
34
35
  }
36
+
35
37
  return parsed;
36
38
  }
37
39
 
@@ -174,7 +174,7 @@ let container;
174
174
  /** @type {HTMLElement} */
175
175
  let target;
176
176
  /** @type {import('./types.js').SvelteKitApp} */
177
- let app;
177
+ export let app;
178
178
 
179
179
  /** @type {Array<((url: URL) => boolean)>} */
180
180
  const invalidated = [];
@@ -2493,6 +2493,7 @@ async function load_data(url, invalid) {
2493
2493
  */
2494
2494
  function deserialize(data) {
2495
2495
  return devalue.unflatten(data, {
2496
+ ...app.decoders,
2496
2497
  Promise: (id) => {
2497
2498
  return new Promise((fulfil, reject) => {
2498
2499
  deferreds.set(id, { fulfil, reject });
@@ -26,6 +26,10 @@ export interface SvelteKitApp {
26
26
 
27
27
  hooks: ClientHooks;
28
28
 
29
+ decode: (type: string, value: any) => any;
30
+
31
+ decoders: Record<string, (data: any) => any>;
32
+
29
33
  root: typeof SvelteComponent;
30
34
  }
31
35
 
@@ -54,7 +58,7 @@ export type NavigationFinished = {
54
58
  state: NavigationState;
55
59
  props: {
56
60
  constructors: Array<typeof SvelteComponent>;
57
- components?: Array<SvelteComponent>;
61
+ components?: SvelteComponent[];
58
62
  page: Page;
59
63
  form?: Record<string, any> | null;
60
64
  [key: `data_${number}`]: Record<string, any>;
@@ -197,6 +197,9 @@ export function get_data_json(event, options, nodes) {
197
197
  const { iterator, push, done } = create_async_iterator();
198
198
 
199
199
  const reducers = {
200
+ ...Object.fromEntries(
201
+ Object.entries(options.hooks.transport).map(([key, value]) => [key, value.encode])
202
+ ),
200
203
  /** @param {any} thing */
201
204
  Promise: (thing) => {
202
205
  if (typeof thing?.then === 'function') {
@@ -76,7 +76,8 @@ export class Server {
76
76
  handle: module.handle || (({ event, resolve }) => resolve(event)),
77
77
  handleError: module.handleError || (({ error }) => console.error(error)),
78
78
  handleFetch: module.handleFetch || (({ request, fetch }) => fetch(request)),
79
- reroute: module.reroute || (() => {})
79
+ reroute: module.reroute || (() => {}),
80
+ transport: module.transport || {}
80
81
  };
81
82
 
82
83
  if (module.init) {
@@ -90,7 +91,8 @@ export class Server {
90
91
  },
91
92
  handleError: ({ error }) => console.error(error),
92
93
  handleFetch: ({ request, fetch }) => fetch(request),
93
- reroute: () => {}
94
+ reroute: () => {},
95
+ transport: {}
94
96
  };
95
97
  } else {
96
98
  throw error;
@@ -61,14 +61,22 @@ export async function handle_action_json_request(event, options, server) {
61
61
  // @ts-expect-error we assign a string to what is supposed to be an object. That's ok
62
62
  // because we don't use the object outside, and this way we have better code navigation
63
63
  // through knowing where the related interface is used.
64
- data: stringify_action_response(data.data, /** @type {string} */ (event.route.id))
64
+ data: stringify_action_response(
65
+ data.data,
66
+ /** @type {string} */ (event.route.id),
67
+ options.hooks.transport
68
+ )
65
69
  });
66
70
  } else {
67
71
  return action_json({
68
72
  type: 'success',
69
73
  status: data ? 200 : 204,
70
74
  // @ts-expect-error see comment above
71
- data: stringify_action_response(data, /** @type {string} */ (event.route.id))
75
+ data: stringify_action_response(
76
+ data,
77
+ /** @type {string} */ (event.route.id),
78
+ options.hooks.transport
79
+ )
72
80
  });
73
81
  }
74
82
  } catch (e) {
@@ -254,18 +262,33 @@ function validate_action_return(data) {
254
262
  * Try to `devalue.uneval` the data object, and if it fails, return a proper Error with context
255
263
  * @param {any} data
256
264
  * @param {string} route_id
265
+ * @param {import('types').ServerHooks['transport']} transport
257
266
  */
258
- export function uneval_action_response(data, route_id) {
259
- return try_deserialize(data, devalue.uneval, route_id);
267
+ export function uneval_action_response(data, route_id, transport) {
268
+ const replacer = (/** @type {any} */ thing) => {
269
+ for (const key in transport) {
270
+ const encoded = transport[key].encode(thing);
271
+ if (encoded) {
272
+ return `app.decode('${key}', ${devalue.uneval(encoded, replacer)})`;
273
+ }
274
+ }
275
+ };
276
+
277
+ return try_serialize(data, (value) => devalue.uneval(value, replacer), route_id);
260
278
  }
261
279
 
262
280
  /**
263
281
  * Try to `devalue.stringify` the data object, and if it fails, return a proper Error with context
264
282
  * @param {any} data
265
283
  * @param {string} route_id
284
+ * @param {import('types').ServerHooks['transport']} transport
266
285
  */
267
- function stringify_action_response(data, route_id) {
268
- return try_deserialize(data, devalue.stringify, route_id);
286
+ function stringify_action_response(data, route_id, transport) {
287
+ const encoders = Object.fromEntries(
288
+ Object.entries(transport).map(([key, value]) => [key, value.encode])
289
+ );
290
+
291
+ return try_serialize(data, (value) => devalue.stringify(value, encoders), route_id);
269
292
  }
270
293
 
271
294
  /**
@@ -273,7 +296,7 @@ function stringify_action_response(data, route_id) {
273
296
  * @param {(data: any) => string} fn
274
297
  * @param {string} route_id
275
298
  */
276
- function try_deserialize(data, fn, route_id) {
299
+ function try_serialize(data, fn, route_id) {
277
300
  try {
278
301
  return fn(data);
279
302
  } catch (e) {
@@ -321,12 +321,20 @@ export async function render_response({
321
321
  deferred.set(id, { fulfil, reject });
322
322
  })`);
323
323
 
324
+ // When resolving, the id might not yet be available due to the data
325
+ // be evaluated upon init of kit, so we use a timeout to retry
324
326
  properties.push(`resolve: ({ id, data, error }) => {
325
- const { fulfil, reject } = deferred.get(id);
326
- deferred.delete(id);
327
-
328
- if (error) reject(error);
329
- else fulfil(data);
327
+ const try_to_resolve = () => {
328
+ if (!deferred.has(id)) {
329
+ setTimeout(try_to_resolve, 0);
330
+ return;
331
+ }
332
+ const { fulfil, reject } = deferred.get(id);
333
+ deferred.delete(id);
334
+ if (error) reject(error);
335
+ else fulfil(data);
336
+ }
337
+ try_to_resolve();
330
338
  }`);
331
339
  }
332
340
 
@@ -342,12 +350,11 @@ export async function render_response({
342
350
  if (page_config.ssr) {
343
351
  const serialized = { form: 'null', error: 'null' };
344
352
 
345
- blocks.push(`const data = ${data};`);
346
-
347
353
  if (form_value) {
348
354
  serialized.form = uneval_action_response(
349
355
  form_value,
350
- /** @type {string} */ (event.route.id)
356
+ /** @type {string} */ (event.route.id),
357
+ options.hooks.transport
351
358
  );
352
359
  }
353
360
 
@@ -357,7 +364,7 @@ export async function render_response({
357
364
 
358
365
  const hydrate = [
359
366
  `node_ids: [${branch.map(({ node }) => node.index).join(', ')}]`,
360
- 'data',
367
+ `data: ${data}`,
361
368
  `form: ${serialized.form}`,
362
369
  `error: ${serialized.error}`
363
370
  ];
@@ -573,6 +580,13 @@ function get_data(event, options, nodes, csp, global) {
573
580
  );
574
581
 
575
582
  return `${global}.defer(${id})`;
583
+ } else {
584
+ for (const key in options.hooks.transport) {
585
+ const encoded = options.hooks.transport[key].encode(thing);
586
+ if (encoded) {
587
+ return `app.decode('${key}', ${devalue.uneval(encoded, replacer)})`;
588
+ }
589
+ }
576
590
  }
577
591
  }
578
592
 
@@ -19,7 +19,8 @@ import {
19
19
  Emulator,
20
20
  Adapter,
21
21
  ServerInit,
22
- ClientInit
22
+ ClientInit,
23
+ Transporter
23
24
  } from '@sveltejs/kit';
24
25
  import {
25
26
  HttpMethod,
@@ -111,12 +112,14 @@ export interface ServerHooks {
111
112
  handle: Handle;
112
113
  handleError: HandleServerError;
113
114
  reroute: Reroute;
115
+ transport: Record<string, Transporter>;
114
116
  init?: ServerInit;
115
117
  }
116
118
 
117
119
  export interface ClientHooks {
118
120
  handleError: HandleClientError;
119
121
  reroute: Reroute;
122
+ transport: Record<string, Transporter>;
120
123
  init?: ClientInit;
121
124
  }
122
125
 
@@ -169,8 +169,9 @@ export function from_fs(str) {
169
169
  export function resolve_entry(entry) {
170
170
  if (fs.existsSync(entry)) {
171
171
  const stats = fs.statSync(entry);
172
- if (stats.isDirectory()) {
173
- return resolve_entry(path.join(entry, 'index'));
172
+ const index = path.join(entry, 'index');
173
+ if (stats.isDirectory() && fs.existsSync(index)) {
174
+ return resolve_entry(index);
174
175
  }
175
176
 
176
177
  return entry;
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.10.0';
4
+ export const VERSION = '2.11.0';
package/types/index.d.ts CHANGED
@@ -708,11 +708,13 @@ declare module '@sveltejs/kit' {
708
708
 
709
709
  /**
710
710
  * The [`init`](https://svelte.dev/docs/kit/hooks#Shared-hooks-init) will be invoked before the server responds to its first request
711
+ * @since 2.10.0
711
712
  */
712
713
  export type ServerInit = () => MaybePromise<void>;
713
714
 
714
715
  /**
715
716
  * The [`init`](https://svelte.dev/docs/kit/hooks#Shared-hooks-init) will be invoked once the app starts in the browser
717
+ * @since 2.10.0
716
718
  */
717
719
  export type ClientInit = () => MaybePromise<void>;
718
720
 
@@ -722,6 +724,43 @@ declare module '@sveltejs/kit' {
722
724
  */
723
725
  export type Reroute = (event: { url: URL }) => void | string;
724
726
 
727
+ /**
728
+ * The [`transport`](https://svelte.dev/docs/kit/hooks#Universal-hooks-transport) hook allows you to transport custom types across the server/client boundary.
729
+ *
730
+ * Each transporter has a pair of `encode` and `decode` functions. On the server, `encode` determines whether a value is an instance of the custom type and, if so, returns a non-falsy encoding of the value which can be an object or an array (or `false` otherwise).
731
+ *
732
+ * In the browser, `decode` turns the encoding back into an instance of the custom type.
733
+ *
734
+ * ```ts
735
+ * import type { Transport } from '@sveltejs/kit';
736
+ *
737
+ * declare class MyCustomType {
738
+ * data: any
739
+ * }
740
+ *
741
+ * // hooks.js
742
+ * export const transport: Transport = {
743
+ * MyCustomType: {
744
+ * encode: (value) => value instanceof MyCustomType && [value.data],
745
+ * decode: ([data]) => new MyCustomType(data)
746
+ * }
747
+ * };
748
+ * ```
749
+ * @since 2.11.0
750
+ */
751
+ export type Transport = Record<string, Transporter>;
752
+
753
+ /**
754
+ * A member of the [`transport`](https://svelte.dev/docs/kit/hooks#Universal-hooks-transport) hook.
755
+ */
756
+ export interface Transporter<
757
+ T = any,
758
+ U = Exclude<any, false | 0 | '' | null | undefined | typeof NaN>
759
+ > {
760
+ encode: (value: T) => false | U;
761
+ decode: (data: U) => T;
762
+ }
763
+
725
764
  /**
726
765
  * The generic form of `PageLoad` and `LayoutLoad`. You should import those from `./$types` (see [generated types](https://svelte.dev/docs/kit/types#Generated-types))
727
766
  * rather than using `Load` directly.
@@ -18,6 +18,8 @@
18
18
  "ServerInit",
19
19
  "ClientInit",
20
20
  "Reroute",
21
+ "Transport",
22
+ "Transporter",
21
23
  "Load",
22
24
  "LoadEvent",
23
25
  "NavigationEvent",
@@ -155,6 +157,6 @@
155
157
  null,
156
158
  null
157
159
  ],
158
- "mappings": ";;;;;;;;;kBA2BiBA,OAAOA;;;;;;;;;;;;;;;;;;;;;;;;;;;aA2BZC,cAAcA;;;;;;aAMdC,cAAcA;;;;;;;;;;;;;;;kBAeTC,aAAaA;;;;;;;;;;;;;;;;;kBAiBbC,OAAOA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAkGPC,MAAMA;;;;;;;;;;;;;;;;;;;;;kBAqBNC,OAAOA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBA4DPC,QAAQA;;;;;;;;kBAQRC,SAASA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;aAuZdC,MAAMA;;;;;;;;;;;aAWNC,iBAAiBA;;;;;;;;;;;;;aAajBC,iBAAiBA;;;;;;;;;;aAUjBC,WAAWA;;;;;;;;;aASXC,UAAUA;;;;;aAKVC,UAAUA;;;;;;aAMVC,OAAOA;;;;;;aAMPC,IAAIA;;;;;;;;;;;;kBAYCC,SAASA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBA4GTC,eAAeA;;;;;;;;;;;;;;;;;;;;;;;;;;kBA0BfC,gBAAgBA;;;;;;;;;;;;;;;;;;;;;;;;aAwBrBC,cAAcA;;kBAETC,UAAUA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAoCVC,cAAcA;;;;;;;;;;kBAUdC,UAAUA;;;;;;;;;;;;;;;;;;kBAkBVC,aAAaA;;;;;;;;;;;;;;;;;;;kBAmBbC,IAAIA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;aA8CTC,YAAYA;;kBAEPC,YAAYA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;aA4FjBC,cAAcA;;;;;kBAKTC,cAAcA;;;;;;;;;;;;;;;;;;;;;;;kBAuBdC,eAAeA;;;;;;;;;;;;;;;cAenBC,MAAMA;;;;;;kBAMFC,iBAAiBA;;;;;;;kBAOjBC,WAAWA;;;;;;;;;;;;;;;;;;;;;aAqBhBC,UAAUA;;;;;;;kBAOLC,eAAeA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;aAqEpBC,MAAMA;;;;;;;;;;aAUNC,OAAOA;;;;;;;;;;;;;;;;aAgBPC,YAAYA;;;;;;;;;;;;kBCxyCXC,SAASA;;;;;;;;;;kBAqBTC,QAAQA;;;;;;;aDgzCTC,cAAcA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBA6BTC,QAAQA;;;;WE51CRC,YAAYA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;WAkDZC,GAAGA;;;;;;;;;;;;;;;;;;;;;WAqBHC,aAAaA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAmElBC,UAAUA;;WAELC,MAAMA;;;;;;;;;MASXC,YAAYA;;WAEPC,WAAWA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;WAmCXC,yBAAyBA;;;;;;;;;;WAUzBC,yBAAyBA;;;;WAIzBC,sCAAsCA;;;;MAI3CC,8BAA8BA;MAC9BC,8BAA8BA;MAC9BC,2CAA2CA;;;;;;aAM3CC,eAAeA;;WAIVC,cAAcA;;;;;WAKdC,YAAYA;;;;;;MAMjBC,aAAaA;WCzLRC,KAAKA;;;;;;WAcLC,SAASA;;;;;;;;;;;;;;;;;WA+ETC,YAAYA;;;;;;;;;;;;WAYZC,QAAQA;;;;;;;;;;;;;;MAyBbC,iBAAiBA;;;;;;;;WAUZC,UAAUA;;;;;;;;;;;;;WAaVC,SAASA;;;;;;;;;;;;;;;;;;;;;;;WAsGTC,YAAYA;;;;;;;;;;;;;MAajBC,kBAAkBA;;WAEbC,OAAOA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAsCZC,aAAaA;;WA2BRC,eAAeA;;;;;;MAMpBC,uBAAuBA;;MAEvBC,WAAWA;;;;;;;;WAQNC,QAAQA;;;;;;;;;MA2CbC,eAAeA;;;;;MAKfC,kBAAkBA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBCjXdC,WAAWA;;;;;;;;;;;iBAcXC,QAAQA;;;;;iBAiBRC,UAAUA;;;;;;iBASVC,IAAIA;;;;;;iBA8BJC,IAAIA;;;;;;;;;;;;;;;;iBAkDJC,eAAeA;;;cCnMlBC,OAAOA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBCoEJC,QAAQA;;;;;;iBCoCFC,UAAUA;;;;;;iBAkCVC,WAAWA;;;;;iBAgFjBC,oBAAoBA;;;;;;;;;;;iBC3MpBC,gBAAgBA;;;;;;;;;iBC+GVC,SAASA;;;;;;;;;cC9HlBC,OAAOA;;;;;cAKPC,GAAGA;;;;;cAKHC,QAAQA;;;;;cAKRC,OAAOA;;;;;;;;;;;;;;;;;;;;;;;;iBCWJC,WAAWA;;;;;;;;;;;;;;;;;;;;;iBAyCXC,OAAOA;;;;;;;iBCm2DDC,WAAWA;;;;;;;;;;;iBArSjBC,aAAaA;;;;;;;;;;;;iBAiBbC,cAAcA;;;;;;;;;;iBAedC,UAAUA;;;;;iBASVC,qBAAqBA;;;;;;;;iBA2BrBC,IAAIA;;;;;;;;;;;;;;;;;;;;;;;;iBAsCJC,UAAUA;;;;iBAmBVC,aAAaA;;;;;;;;;;;;iBAqBPC,WAAWA;;;;;;;;;;;;;;;;;;iBAoCjBC,WAAWA;;;;;iBA2BXC,SAASA;;;;;iBA4CTC,YAAYA;MVtuDhB3D,YAAYA;;;;;;;;;;;YWtJb4D,IAAIA;;;;;;;YAOJC,MAAMA;;;;;;;;;;;;;;;;;iBAiBDC,YAAYA;;;;;;;;;;;;;;;;;;iBCVZC,IAAIA;;;;;;iBCXPC,SAASA;;;;;;;;;;;;;;cAwBTC,IAAIA;;;;;;;;cAeJC,UAAUA;;;;;;cAaVC,OAAOA",
160
+ "mappings": "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",
159
161
  "ignoreList": []
160
162
  }