@toa.io/extensions.exposition 1.0.0-alpha.312 → 1.0.0-alpha.314
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/components/exposition.octets/package.json +2 -2
- package/components/identity.basic/package.json +1 -1
- package/components/identity.federation/package.json +1 -1
- package/components/identity.passkeys/package.json +1 -1
- package/components/identity.tokens/package.json +2 -2
- package/package.json +6 -4
- package/readme.md +1 -0
- package/transpiled/Factory.d.ts +5 -0
- package/transpiled/Factory.js +3 -0
- package/transpiled/Factory.js.map +1 -1
- package/transpiled/directives/index.js +2 -0
- package/transpiled/directives/index.js.map +1 -1
- package/transpiled/directives/realtime/Hub.d.ts +45 -0
- package/transpiled/directives/realtime/Hub.js +221 -0
- package/transpiled/directives/realtime/Hub.js.map +1 -0
- package/transpiled/directives/realtime/Realtime.d.ts +18 -0
- package/transpiled/directives/realtime/Realtime.js +37 -0
- package/transpiled/directives/realtime/Realtime.js.map +1 -0
- package/transpiled/directives/realtime/Stream.d.ts +38 -0
- package/transpiled/directives/realtime/Stream.js +89 -0
- package/transpiled/directives/realtime/Stream.js.map +1 -0
- package/transpiled/directives/realtime/index.d.ts +2 -0
- package/transpiled/directives/realtime/index.js +3 -0
- package/transpiled/directives/realtime/index.js.map +1 -0
- package/transpiled/directives/realtime/measurements.d.ts +1 -0
- package/transpiled/directives/realtime/measurements.js +11 -0
- package/transpiled/directives/realtime/measurements.js.map +1 -0
- package/transpiled/realtime/Destination.d.ts +24 -0
- package/transpiled/realtime/Destination.js +83 -0
- package/transpiled/realtime/Destination.js.map +1 -0
- package/transpiled/realtime/Factory.d.ts +11 -0
- package/transpiled/realtime/Factory.js +15 -0
- package/transpiled/realtime/Factory.js.map +1 -0
- package/transpiled/realtime/measurements.d.ts +1 -0
- package/transpiled/realtime/measurements.js +11 -0
- package/transpiled/realtime/measurements.js.map +1 -0
- package/transpiled/realtime/redis.d.ts +36 -0
- package/transpiled/realtime/redis.js +83 -0
- package/transpiled/realtime/redis.js.map +1 -0
- package/transpiled/root.js +15 -0
- package/transpiled/root.js.map +1 -1
- package/ui/dist/_app/immutable/chunks/{CrvExPUH.js → 3z-MngL5.js} +1 -1
- package/ui/dist/_app/immutable/chunks/{DRHH1IZ6.js → CubNYXGc.js} +1 -1
- package/ui/dist/_app/immutable/chunks/DnwsDdVR.js +6 -0
- package/ui/dist/_app/immutable/chunks/{qtkBHvJX.js → gT7UvzUs.js} +1 -1
- package/ui/dist/_app/immutable/entry/{app.prc8D_7j.js → app.BuIzcMse.js} +2 -2
- package/ui/dist/_app/immutable/entry/start.Djj5Mm5B.js +1 -0
- package/ui/dist/_app/immutable/nodes/{0.viBY06uQ.js → 0.CwHL4JQh.js} +1 -1
- package/ui/dist/_app/immutable/nodes/{1.CJVJ5gi6.js → 1.DgOr0IJQ.js} +1 -1
- package/ui/dist/_app/immutable/nodes/{2.DhzIPVlj.js → 2.1ODUSz5b.js} +1 -1
- package/ui/dist/_app/immutable/nodes/{3.jGOeu924.js → 3._pT85mpt.js} +1 -1
- package/ui/dist/_app/immutable/nodes/{4.DXHvFLcC.js → 4.DiXgB9MQ.js} +1 -1
- package/ui/dist/_app/immutable/nodes/{5.tGdgzTwp.js → 5.D7U8VR0l.js} +1 -1
- package/ui/dist/_app/immutable/nodes/{6.DfOhdTZ4.js → 6.CiZdC04N.js} +1 -1
- package/ui/dist/_app/version.json +1 -1
- package/ui/dist/index.html +10 -10
- package/ui/dist/_app/immutable/chunks/DJsGiBo1.js +0 -6
- package/ui/dist/_app/immutable/entry/start.B8R-hX_D.js +0 -1
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { registry } from 'openspan';
|
|
2
|
+
/**
|
|
3
|
+
* Counted where the gateway pushes an event to the readers of a key it serves. Against
|
|
4
|
+
* `toa.realtime.routed`, which the components that write events count, it says what arrived.
|
|
5
|
+
*/
|
|
6
|
+
const meters = registry();
|
|
7
|
+
const delivered = meters.counter('toa.realtime.delivered', { event: null });
|
|
8
|
+
export function deliver(event) {
|
|
9
|
+
delivered.add(1, { event });
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=measurements.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"measurements.js","sourceRoot":"","sources":["../../../source/directives/realtime/measurements.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AAEnC;;;GAGG;AACH,MAAM,MAAM,GAAG,QAAQ,EAAE,CAAA;AAEzB,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,wBAAwB,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;AAE3E,MAAM,UAAU,OAAO,CAAC,KAAa;IACnC,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,CAAA;AAC7B,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { Connector, type Locator } from '@toa.io/core';
|
|
2
|
+
import type { Route } from '@toa.io/definitions/extensions.exposition/realtime';
|
|
3
|
+
import type { outbox } from '@toa.io/core/types';
|
|
4
|
+
/**
|
|
5
|
+
* Where a component's routed events go: the stream of each of their keys, and its channel. Each
|
|
6
|
+
* event of a row is rendered by the component's own condition and payload, fitted to what its
|
|
7
|
+
* route exposes, and written in one call per Redis its keys are kept on — to the streams of them
|
|
8
|
+
* that exist, which are the ones that are consumed.
|
|
9
|
+
*
|
|
10
|
+
* At least once: a row written again by the pump is written to the streams again.
|
|
11
|
+
*/
|
|
12
|
+
export declare class Destination extends Connector implements outbox.Destination {
|
|
13
|
+
readonly name = "realtime";
|
|
14
|
+
readonly renders: string[];
|
|
15
|
+
rendering?: outbox.Rendering;
|
|
16
|
+
private readonly locator;
|
|
17
|
+
private readonly routes;
|
|
18
|
+
private shards;
|
|
19
|
+
constructor(locator: Locator, routes: Route[]);
|
|
20
|
+
emit(row: outbox.Row): Promise<void>;
|
|
21
|
+
protected open(): Promise<void>;
|
|
22
|
+
protected close(): Promise<void>;
|
|
23
|
+
private route;
|
|
24
|
+
}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { console } from 'openspan';
|
|
2
|
+
import { Connector } from '@toa.io/core';
|
|
3
|
+
import { APPEND, MAXLEN, Shards, shard } from './redis.js';
|
|
4
|
+
import * as measure from './measurements.js';
|
|
5
|
+
/**
|
|
6
|
+
* Where a component's routed events go: the stream of each of their keys, and its channel. Each
|
|
7
|
+
* event of a row is rendered by the component's own condition and payload, fitted to what its
|
|
8
|
+
* route exposes, and written in one call per Redis its keys are kept on — to the streams of them
|
|
9
|
+
* that exist, which are the ones that are consumed.
|
|
10
|
+
*
|
|
11
|
+
* At least once: a row written again by the pump is written to the streams again.
|
|
12
|
+
*/
|
|
13
|
+
export class Destination extends Connector {
|
|
14
|
+
name = 'realtime';
|
|
15
|
+
renders;
|
|
16
|
+
rendering;
|
|
17
|
+
locator;
|
|
18
|
+
routes;
|
|
19
|
+
shards = null;
|
|
20
|
+
constructor(locator, routes) {
|
|
21
|
+
super();
|
|
22
|
+
this.locator = locator;
|
|
23
|
+
this.routes = routes;
|
|
24
|
+
this.renders = [...new Set(routes.map(({ event }) => event))];
|
|
25
|
+
}
|
|
26
|
+
async emit(row) {
|
|
27
|
+
const writes = this.routes.map(async (route) => await this.route(route, row));
|
|
28
|
+
await Promise.all(writes);
|
|
29
|
+
}
|
|
30
|
+
async open() {
|
|
31
|
+
const shards = new Shards();
|
|
32
|
+
for (const redis of shards.connections) {
|
|
33
|
+
// it reconnects on its own; a write while it is away fails, and the outbox writes it again
|
|
34
|
+
redis.on('error', (error) => console.debug('Realtime streams unreachable', {
|
|
35
|
+
error: error.code ?? error.message
|
|
36
|
+
}));
|
|
37
|
+
redis.defineCommand('append', { lua: APPEND });
|
|
38
|
+
}
|
|
39
|
+
this.shards = shards;
|
|
40
|
+
await shards.connect();
|
|
41
|
+
}
|
|
42
|
+
async close() {
|
|
43
|
+
this.shards?.disconnect();
|
|
44
|
+
this.shards = null;
|
|
45
|
+
}
|
|
46
|
+
async route(route, row) {
|
|
47
|
+
const raised = await this.rendering.render(route.event, row);
|
|
48
|
+
if (raised === null)
|
|
49
|
+
return;
|
|
50
|
+
const payload = raised.payload;
|
|
51
|
+
const keys = keysOf(payload, route.properties);
|
|
52
|
+
if (keys.length === 0)
|
|
53
|
+
return;
|
|
54
|
+
const event = `${this.locator.id}.${route.event}`;
|
|
55
|
+
const data = JSON.stringify(fit(payload, route.expose));
|
|
56
|
+
const connections = this.shards.connections;
|
|
57
|
+
const byShard = new Map();
|
|
58
|
+
for (const key of keys) {
|
|
59
|
+
const i = shard(key, connections.length);
|
|
60
|
+
byShard.set(i, [...(byShard.get(i) ?? []), key]);
|
|
61
|
+
}
|
|
62
|
+
const writes = [...byShard].map(async ([i, keys]) => await connections[i].append(keys.length, ...keys, event, data, MAXLEN));
|
|
63
|
+
await Promise.all(writes);
|
|
64
|
+
measure.route(event);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
/** The values of the key properties: each a key, or a list of them. */
|
|
68
|
+
function keysOf(payload, properties) {
|
|
69
|
+
const keys = new Set();
|
|
70
|
+
for (const property of properties) {
|
|
71
|
+
const value = payload?.[property];
|
|
72
|
+
const values = Array.isArray(value) ? value : [value];
|
|
73
|
+
for (const key of values)
|
|
74
|
+
if (typeof key === 'string')
|
|
75
|
+
keys.add(key);
|
|
76
|
+
}
|
|
77
|
+
return [...keys];
|
|
78
|
+
}
|
|
79
|
+
/** What the route names of the payload, and nothing else. */
|
|
80
|
+
function fit(payload, expose) {
|
|
81
|
+
return Object.fromEntries(Object.entries(payload).filter(([key]) => expose.includes(key)));
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=Destination.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Destination.js","sourceRoot":"","sources":["../../source/realtime/Destination.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { type Declaration } from '@toa.io/definitions/extensions.exposition/realtime';
|
|
2
|
+
import { Destination } from './Destination.ts';
|
|
3
|
+
import type { Locator } from '@toa.io/core';
|
|
4
|
+
import type { extensions } from '@toa.io/core/types';
|
|
5
|
+
/**
|
|
6
|
+
* What `@toa.io/extensions.exposition#realtime` is to a component that declares routes: the
|
|
7
|
+
* destination its routed events are written by.
|
|
8
|
+
*/
|
|
9
|
+
export declare class Realtime implements extensions.Factory {
|
|
10
|
+
destination(locator: Locator, declaration: Declaration | null): Destination | undefined;
|
|
11
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { parse } from '@toa.io/definitions/extensions.exposition/realtime';
|
|
2
|
+
import { Destination } from './Destination.js';
|
|
3
|
+
/**
|
|
4
|
+
* What `@toa.io/extensions.exposition#realtime` is to a component that declares routes: the
|
|
5
|
+
* destination its routed events are written by.
|
|
6
|
+
*/
|
|
7
|
+
export class Realtime {
|
|
8
|
+
destination(locator, declaration) {
|
|
9
|
+
const routes = declaration === null || declaration === undefined ? [] : parse(declaration);
|
|
10
|
+
if (routes.length === 0)
|
|
11
|
+
return undefined;
|
|
12
|
+
return new Destination(locator, routes);
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=Factory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Factory.js","sourceRoot":"","sources":["../../source/realtime/Factory.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,EAEN,MAAM,oDAAoD,CAAA;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAI9C;;;GAGG;AACH,MAAM,OAAO,QAAQ;IACZ,WAAW,CAChB,OAAgB,EAChB,WAA+B;QAE/B,MAAM,MAAM,GACV,WAAW,KAAK,IAAI,IAAI,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,CAAA;QAE7E,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,SAAS,CAAA;QAEzC,OAAO,IAAI,WAAW,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;IACzC,CAAC;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function route(event: string): void;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { registry } from 'openspan';
|
|
2
|
+
/**
|
|
3
|
+
* Counted where a component writes an event to the streams of its keys, whether or not any of
|
|
4
|
+
* them is read. Against `toa.realtime.delivered`, which the gateway counts, it says what arrived.
|
|
5
|
+
*/
|
|
6
|
+
const meters = registry();
|
|
7
|
+
const routed = meters.counter('toa.realtime.routed', { event: null });
|
|
8
|
+
export function route(event) {
|
|
9
|
+
routed.add(1, { event });
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=measurements.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"measurements.js","sourceRoot":"","sources":["../../source/realtime/measurements.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AAEnC;;;GAGG;AACH,MAAM,MAAM,GAAG,QAAQ,EAAE,CAAA;AAEzB,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,qBAAqB,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;AAErE,MAAM,UAAU,KAAK,CAAC,KAAa;IACjC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,CAAA;AAC1B,CAAC"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { Redis } from 'ioredis';
|
|
2
|
+
/**
|
|
3
|
+
* The Redis the streams are kept in, as the components that write them and the gateway that reads
|
|
4
|
+
* them both reach it: the addresses the `realtime` annotation names, one connection to each. A
|
|
5
|
+
* key is kept by the one its hash falls to, so every process finds it on the same one.
|
|
6
|
+
*/
|
|
7
|
+
export declare class Shards {
|
|
8
|
+
readonly connections: Redis[];
|
|
9
|
+
constructor();
|
|
10
|
+
/** The connection a key is kept on. */
|
|
11
|
+
of(key: string): Redis;
|
|
12
|
+
connect(): Promise<void>;
|
|
13
|
+
disconnect(): void;
|
|
14
|
+
}
|
|
15
|
+
/** Whether the streams have anywhere to be kept: the `realtime` annotation names it. */
|
|
16
|
+
export declare function configured(): boolean;
|
|
17
|
+
/** What a key is stored and published under: the scope, so contexts sharing a Redis do not meet. */
|
|
18
|
+
export declare function prefix(): string;
|
|
19
|
+
/** Seconds a stream outlives its last reader: the window a reader reconnects in. */
|
|
20
|
+
export declare function expire(): number;
|
|
21
|
+
/**
|
|
22
|
+
* FNV-1a over the key's UTF-16 code units: the same number in every process, and cheap enough to
|
|
23
|
+
* take for every event.
|
|
24
|
+
*/
|
|
25
|
+
export declare function shard(key: string, n: number): number;
|
|
26
|
+
/**
|
|
27
|
+
* Appends an event to the streams of its keys, and publishes it on their channels — only to a
|
|
28
|
+
* stream that exists, which is one that is consumed. One call per Redis, whatever the keys it
|
|
29
|
+
* keeps: they are all on it.
|
|
30
|
+
*
|
|
31
|
+
* `KEYS` are the streams; `ARGV` is the event, its payload as JSON, and the length a stream is
|
|
32
|
+
* trimmed to. What is published is `[id, event, data]`, `data` the JSON it was given.
|
|
33
|
+
*/
|
|
34
|
+
export declare const APPEND = "\nfor _, key in ipairs(KEYS) do\n if redis.call('EXISTS', key) == 1 then\n local id = redis.call('XADD', key, 'MAXLEN', '~', ARGV[3], '*', 'type', ARGV[1], 'data', ARGV[2])\n redis.call('SPUBLISH', key, cjson.encode({ id, ARGV[1], ARGV[2] }))\n end\nend\n";
|
|
35
|
+
/** How many entries a stream keeps: what a reader that reconnects can be given at most. */
|
|
36
|
+
export declare const MAXLEN = 1000;
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { Redis } from 'ioredis';
|
|
2
|
+
import { environment } from '@toa.io/generic';
|
|
3
|
+
import { EXPIRE, STREAMS } from '@toa.io/definitions/extensions.exposition/realtime';
|
|
4
|
+
/**
|
|
5
|
+
* The Redis the streams are kept in, as the components that write them and the gateway that reads
|
|
6
|
+
* them both reach it: the addresses the `realtime` annotation names, one connection to each. A
|
|
7
|
+
* key is kept by the one its hash falls to, so every process finds it on the same one.
|
|
8
|
+
*/
|
|
9
|
+
export class Shards {
|
|
10
|
+
connections;
|
|
11
|
+
constructor() {
|
|
12
|
+
// a key's, and its channel's: the prefix applies to a sharded channel as to a key
|
|
13
|
+
const keyPrefix = prefix();
|
|
14
|
+
this.connections = addresses().map((address) => new Redis(address, { keyPrefix, lazyConnect: true }));
|
|
15
|
+
}
|
|
16
|
+
/** The connection a key is kept on. */
|
|
17
|
+
of(key) {
|
|
18
|
+
return this.connections[shard(key, this.connections.length)];
|
|
19
|
+
}
|
|
20
|
+
async connect() {
|
|
21
|
+
await Promise.all(this.connections.map(async (connection) => await connection.connect()));
|
|
22
|
+
}
|
|
23
|
+
disconnect() {
|
|
24
|
+
for (const connection of this.connections)
|
|
25
|
+
connection.disconnect();
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
/** Whether the streams have anywhere to be kept: the `realtime` annotation names it. */
|
|
29
|
+
export function configured() {
|
|
30
|
+
return environment.get('TOA_DEV') === '1' || environment.has(STREAMS);
|
|
31
|
+
}
|
|
32
|
+
/** What a key is stored and published under: the scope, so contexts sharing a Redis do not meet. */
|
|
33
|
+
export function prefix() {
|
|
34
|
+
return `${environment.scope()}:realtime:`;
|
|
35
|
+
}
|
|
36
|
+
/** Seconds a stream outlives its last reader: the window a reader reconnects in. */
|
|
37
|
+
export function expire() {
|
|
38
|
+
const value = Number(environment.get(EXPIRE));
|
|
39
|
+
return Number.isNaN(value) || value <= 0 ? DEFAULT_EXPIRE : value;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* FNV-1a over the key's UTF-16 code units: the same number in every process, and cheap enough to
|
|
43
|
+
* take for every event.
|
|
44
|
+
*/
|
|
45
|
+
export function shard(key, n) {
|
|
46
|
+
if (n === 1)
|
|
47
|
+
return 0;
|
|
48
|
+
let hash = 0x811c9dc5;
|
|
49
|
+
for (let i = 0; i < key.length; i++) {
|
|
50
|
+
hash ^= key.charCodeAt(i);
|
|
51
|
+
hash = Math.imul(hash, 0x01000193);
|
|
52
|
+
}
|
|
53
|
+
return (hash >>> 0) % n;
|
|
54
|
+
}
|
|
55
|
+
function addresses() {
|
|
56
|
+
const value = environment.get(STREAMS);
|
|
57
|
+
// Toa's own development stack is not on the conventional ports. See CONTRIBUTING.md.
|
|
58
|
+
if (value === undefined && environment.get('TOA_DEV') === '1')
|
|
59
|
+
return ['redis://localhost:31040'];
|
|
60
|
+
if (value === undefined)
|
|
61
|
+
throw new Error(`${STREAMS} is not set: the context has no realtime`);
|
|
62
|
+
return value.split(' ').filter(Boolean);
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Appends an event to the streams of its keys, and publishes it on their channels — only to a
|
|
66
|
+
* stream that exists, which is one that is consumed. One call per Redis, whatever the keys it
|
|
67
|
+
* keeps: they are all on it.
|
|
68
|
+
*
|
|
69
|
+
* `KEYS` are the streams; `ARGV` is the event, its payload as JSON, and the length a stream is
|
|
70
|
+
* trimmed to. What is published is `[id, event, data]`, `data` the JSON it was given.
|
|
71
|
+
*/
|
|
72
|
+
export const APPEND = `
|
|
73
|
+
for _, key in ipairs(KEYS) do
|
|
74
|
+
if redis.call('EXISTS', key) == 1 then
|
|
75
|
+
local id = redis.call('XADD', key, 'MAXLEN', '~', ARGV[3], '*', 'type', ARGV[1], 'data', ARGV[2])
|
|
76
|
+
redis.call('SPUBLISH', key, cjson.encode({ id, ARGV[1], ARGV[2] }))
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
`;
|
|
80
|
+
/** How many entries a stream keeps: what a reader that reconnects can be given at most. */
|
|
81
|
+
export const MAXLEN = 1000;
|
|
82
|
+
const DEFAULT_EXPIRE = 300;
|
|
83
|
+
//# sourceMappingURL=redis.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"redis.js","sourceRoot":"","sources":["../../source/realtime/redis.ts"],"names":[],"mappings":"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"}
|
package/transpiled/root.js
CHANGED
|
@@ -47,6 +47,21 @@ const PREDEFINED = {
|
|
|
47
47
|
],
|
|
48
48
|
directives: []
|
|
49
49
|
}
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
// an identity's own stream, which it reads whatever the application declares
|
|
53
|
+
path: '/realtime/:id',
|
|
54
|
+
node: {
|
|
55
|
+
isolated: true,
|
|
56
|
+
routes: [],
|
|
57
|
+
methods: [
|
|
58
|
+
{
|
|
59
|
+
verb: 'GET',
|
|
60
|
+
directives: [{ family: 'realtime', name: 'stream', value: 'id' }]
|
|
61
|
+
}
|
|
62
|
+
],
|
|
63
|
+
directives: [{ family: 'auth', name: 'id', value: 'id' }]
|
|
64
|
+
}
|
|
50
65
|
}
|
|
51
66
|
],
|
|
52
67
|
methods: [],
|
package/transpiled/root.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"root.js","sourceRoot":"","sources":["../source/root.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAA;AACpD,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AAEvC,MAAM,UAAU,OAAO;IACrB,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAA;IAC/C,MAAM,IAAI,GACR,KAAK,KAAK,SAAS,CAAC,CAAC,CAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAiB,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,EAAE,CAAA;IAEhF,KAAK,CAAC,IAAI,EAAE,UAAU,CAAC,CAAA;IAEvB,OAAO,IAAI,CAAA;AACb,CAAC;AAED,MAAM,UAAU,GAAgB;IAC9B,MAAM,EAAE;QACN;YACE,IAAI,EAAE,WAAW;YACjB,IAAI,EAAE;gBACJ,QAAQ,EAAE,IAAI;gBACd,MAAM,EAAE,EAAE;gBACV,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,KAAK;wBACX,UAAU,EAAE;4BACV;gCACE,MAAM,EAAE,IAAI;gCACZ,IAAI,EAAE,QAAQ;gCACd,KAAK,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC;6BACvB;4BACD;gCACE,MAAM,EAAE,MAAM;gCACd,IAAI,EAAE,MAAM;gCACZ,KAAK,EAAE,IAAI;6BACZ;yBACF;qBACF;oBACD;wBACE,IAAI,EAAE,MAAM;wBACZ,UAAU,EAAE;4BACV;gCACE,MAAM,EAAE,IAAI;gCACZ,IAAI,EAAE,QAAQ;gCACd,KAAK,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC;6BACvB;4BACD;gCACE,MAAM,EAAE,MAAM;gCACd,IAAI,EAAE,QAAQ;gCACd,KAAK,EAAE,IAAI;6BACZ;yBACF;qBACF;iBACF;gBACD,UAAU,EAAE,EAAE;aACf;SACF;KACF;IACD,OAAO,EAAE,EAAE;IACX,UAAU,EAAE,EAAE;CACf,CAAA"}
|
|
1
|
+
{"version":3,"file":"root.js","sourceRoot":"","sources":["../source/root.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAA;AACpD,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AAEvC,MAAM,UAAU,OAAO;IACrB,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAA;IAC/C,MAAM,IAAI,GACR,KAAK,KAAK,SAAS,CAAC,CAAC,CAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAiB,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,EAAE,CAAA;IAEhF,KAAK,CAAC,IAAI,EAAE,UAAU,CAAC,CAAA;IAEvB,OAAO,IAAI,CAAA;AACb,CAAC;AAED,MAAM,UAAU,GAAgB;IAC9B,MAAM,EAAE;QACN;YACE,IAAI,EAAE,WAAW;YACjB,IAAI,EAAE;gBACJ,QAAQ,EAAE,IAAI;gBACd,MAAM,EAAE,EAAE;gBACV,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,KAAK;wBACX,UAAU,EAAE;4BACV;gCACE,MAAM,EAAE,IAAI;gCACZ,IAAI,EAAE,QAAQ;gCACd,KAAK,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC;6BACvB;4BACD;gCACE,MAAM,EAAE,MAAM;gCACd,IAAI,EAAE,MAAM;gCACZ,KAAK,EAAE,IAAI;6BACZ;yBACF;qBACF;oBACD;wBACE,IAAI,EAAE,MAAM;wBACZ,UAAU,EAAE;4BACV;gCACE,MAAM,EAAE,IAAI;gCACZ,IAAI,EAAE,QAAQ;gCACd,KAAK,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC;6BACvB;4BACD;gCACE,MAAM,EAAE,MAAM;gCACd,IAAI,EAAE,QAAQ;gCACd,KAAK,EAAE,IAAI;6BACZ;yBACF;qBACF;iBACF;gBACD,UAAU,EAAE,EAAE;aACf;SACF;QACD;YACE,6EAA6E;YAC7E,IAAI,EAAE,eAAe;YACrB,IAAI,EAAE;gBACJ,QAAQ,EAAE,IAAI;gBACd,MAAM,EAAE,EAAE;gBACV,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,KAAK;wBACX,UAAU,EAAE,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;qBAClE;iBACF;gBACD,UAAU,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;aAC1D;SACF;KACF;IACD,OAAO,EAAE,EAAE;IACX,UAAU,EAAE,EAAE;CACf,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{H as e,U as t,V as n,W as r,it as i,n as a,ot as o,t as s,vt as c}from"./BVDJTrf4.js";var l=class{constructor(e,t){this.status=e,this.body=typeof t==`string`?{message:t}:t||{message:`Error: ${e}`}}toString(){return JSON.stringify(this.body)}},u=class{constructor(e,t){try{new Headers({location:t})}catch{throw Error(`Invalid redirect location ${JSON.stringify(t)}: this string contains characters that cannot be used in HTTP headers`)}this.status=e,this.location=t}},d=class extends Error{constructor(e,t,n){super(n),this.status=e,this.text=t}};new URL(`sveltekit-internal://`);function f(e,t){return e===`/`||t===`ignore`?e:t===`never`?e.endsWith(`/`)?e.slice(0,-1):e:t===`always`&&!e.endsWith(`/`)?e+`/`:e}function p(e){return e.split(`%25`).map(decodeURI).join(`%25`)}function ee(e){for(let t in e)e[t]=decodeURIComponent(e[t]);return e}function m({href:e}){return e.split(`#`)[0]}function h(e,t,n,r=!1){let i=new URL(e);Object.defineProperty(i,"searchParams",{value:new Proxy(i.searchParams,{get(e,r){if(r===`get`||r===`getAll`||r===`has`)return(t,...i)=>(n(t),e[r](t,...i));t();let i=Reflect.get(e,r);return typeof i==`function`?i.bind(e):i}}),enumerable:!0,configurable:!0});let a=[`href`,`pathname`,`search`,`toString`,`toJSON`];r&&a.push(`hash`);for(let n of a)Object.defineProperty(i,n,{get(){return t(),e[n]},enumerable:!0,configurable:!0});return i}function g(){}function _(...e){let t=5381;for(let n of e)if(typeof n==`string`){let e=n.length;for(;e;)t=t*33^n.charCodeAt(--e)}else if(ArrayBuffer.isView(n)){let e=new Uint8Array(n.buffer,n.byteOffset,n.byteLength),r=e.length;for(;r;)t=t*33^e[--r]}else throw TypeError(`value must be a string or TypedArray`);return(t>>>0).toString(36)}new TextEncoder;function te(e){let t=atob(e),n=new Uint8Array(t.length);for(let e=0;e<t.length;e++)n[e]=t.charCodeAt(e);return n}var ne=window.fetch;window.fetch=(e,t)=>((e instanceof Request?e.method:t?.method||`GET`)!==`GET`&&v.delete(ie(e)),ne(e,t));var v=new Map;function y(e,t){let n=ie(e,t),r=document.querySelector(n);if(r?.textContent){r.remove();let{body:e,...t}=JSON.parse(r.textContent);r.getAttribute(`data-b64`)!==null&&(e=te(e));let i=r.getAttribute(`data-ttl`);return i&&v.set(n,{body:e,init:t,ttl:1e3*Number(i)}),Promise.resolve(new Response(e,t))}return window.fetch(e,t)}function re(e,t,n){if(v.size>0){let t=ie(e,n),r=v.get(t);if(r){if(performance.now()<r.ttl&&[`default`,`force-cache`,`only-if-cached`,void 0].includes(n?.cache))return new Response(r.body,r.init);v.delete(t)}}return window.fetch(t,n)}function ie(e,t){let n=`script[data-sveltekit-fetched][data-url=${JSON.stringify(e instanceof Request?e.url:e)}]`;if(t?.headers||t?.body){let e=[];t.headers&&e.push([...new Headers(t.headers)].join(`,`)),t.body&&(typeof t.body==`string`||ArrayBuffer.isView(t.body))&&e.push(t.body),n+=`[data-hash="${_(...e)}"]`}return n}var ae=/^(\[)?(\.\.\.)?(\w+)(?:=(\w+))?(\])?$/,oe=/^\/\((?:[^)]+)\)$/;function se(e){let t=[];return{pattern:e===`/`||oe.test(e)?/^\/$/:RegExp(`^${le(e).map(e=>{let n=/^\[\.\.\.(\w+)(?:=(\w+))?\]$/.exec(e);if(n)return t.push({name:n[1],matcher:n[2],optional:!1,rest:!0,chained:!0}),`(?:/([^]*))?`;let r=/^\[\[(\w+)(?:=(\w+))?\]\]$/.exec(e);if(r)return t.push({name:r[1],matcher:r[2],optional:!0,rest:!1,chained:!0}),`(?:/([^/]+))?`;if(!e)return;let i=e.split(/\[(.+?)\](?!\])/);return`/`+i.map((e,n)=>{if(n%2){if(e.startsWith(`x+`))return de(String.fromCharCode(parseInt(e.slice(2),16)));if(e.startsWith(`u+`))return de(String.fromCharCode(...e.slice(2).split(`-`).map(e=>parseInt(e,16))));let[,r,a,o,s]=ae.exec(e);return t.push({name:o,matcher:s,optional:!!r,rest:!!a,chained:a?n===1&&i[0]===``:!1}),a?`([^]*?)`:r?`([^/]*)?`:`([^/]+?)`}return de(e)}).join(``)}).join(``)}/?$`),params:t}}function ce(e){return e!==``&&!/^\([^)]+\)$/.test(e)}function le(e){return e.slice(1).split(`/`).filter(ce)}function ue(e,t,n){let r={},i=e.slice(1),a=i.filter(e=>e!==void 0),o=0;for(let e=0;e<t.length;e+=1){let s=t[e],c=i[e-o];if(s.chained&&s.rest&&o&&(c=i.slice(e-o,e+1).filter(e=>e).join(`/`),o=0),c===void 0){if(s.rest)c=``;else continue}if(!s.matcher||n[s.matcher](c)){r[s.name]=c;let n=t[e+1],l=i[e+1];n&&!n.rest&&n.optional&&l&&s.chained&&(o=0),!n&&!l&&Object.keys(r).length===a.length&&(o=0);continue}if(s.optional&&s.chained){o++;continue}return}if(!o)return r}function de(e){return e.normalize().replace(/[[\]]/g,`\\$&`).replace(/%/g,`%25`).replace(/\//g,`%2[Ff]`).replace(/\?/g,`%3[Ff]`).replace(/#/g,`%23`).replace(/[.*+?^${}()|\\]/g,`\\$&`)}var fe=/\[(\[)?(\.\.\.)?(\w+?)(?:=(\w+))?\]\]?/g;function pe(e,t){let n=le(e),r=e!=`/`&&e.endsWith(`/`);return`/`+n.map(n=>n.replace(fe,(n,r,i,a)=>{let o=t[a];if(!o){if(r||i&&o!==void 0)return``;throw Error(`Missing parameter '${a}' in route ${e}`)}if(o.startsWith(`/`)||o.endsWith(`/`))throw Error(`Parameter '${a}' in route ${e} cannot start or end with a slash -- this would cause an invalid route like foo//bar`);return o})).filter(Boolean).join(`/`)+(r?`/`:``)}function me({nodes:e,server_loads:t,dictionary:n,matchers:r}){let i=new Set(t);return Object.entries(n).map(([t,[n,i,s]])=>{let{pattern:c,params:l}=se(t),u={id:t,exec:e=>{let t=c.exec(e);if(t)return ue(t,l,r)},errors:[1,...s||[]].map(t=>e[t]),layouts:[0,...i||[]].map(o),leaf:a(n)};return u.errors.length=u.layouts.length=Math.max(u.errors.length,u.layouts.length),u});function a(t){let n=t<0;return n&&(t=~t),[n,e[t]]}function o(t){return t===void 0?t:[i.has(t),e[t]]}}function he(e,t=JSON.parse){try{return t(sessionStorage[e])}catch{}}function ge(e,t,n=JSON.stringify){let r=n(t);try{sessionStorage[e]=r}catch{}}var b=globalThis.__sveltekit_1n6ye5w?.base??`/.discovery`,_e=globalThis.__sveltekit_1n6ye5w?.assets??b??``,ve=``;function ye(...e){if(!e[0].startsWith(`/`))throw Error(`Cannot use \`resolve(...)\` with a non-absolute pathname or route ID (got "${e[0]}"). \`resolve\` is only for internal pathnames and route IDs; external URLs should be used directly.`);return b+ve+pe(e[0],e[1])}var be=`1789725080835`,xe=`sveltekit:snapshot`,Se=`sveltekit:scroll`,Ce=`sveltekit:states`,we=`sveltekit:pageurl`,x=`sveltekit:history`,S=`sveltekit:navigation`,C={tap:1,hover:2,viewport:3,eager:4,off:-1,false:-1},Te=location.origin;function Ee(e){if(e instanceof URL)return e;let t=document.baseURI;if(!t){let e=document.getElementsByTagName(`base`);t=e.length?e[0].href:document.URL}return new URL(e,t)}function w(){return{x:pageXOffset,y:pageYOffset}}function T(e,t){return e.getAttribute(`data-sveltekit-${t}`)}var De={...C,"":C.hover};function Oe(e){let t=e.assignedSlot??e.parentNode;return t?.nodeType===11&&(t=t.host),t}function ke(e,t){for(;e&&e!==t;){if(e.nodeName.toUpperCase()===`A`&&e.hasAttribute(`href`))return e;e=Oe(e)}}function Ae(e,t,n){let r;try{if(r=new URL(e instanceof SVGAElement?e.href.baseVal:e.href,document.baseURI),n&&r.hash.match(/^#[^/]/)){let e=location.hash.split(`#`)[1]||`/`;r.hash=`#${e}${r.hash}`}}catch{}let i=e instanceof SVGAElement?e.target.baseVal:e.target,a=!r||!!i||D(r,t,n)||(e.getAttribute(`rel`)||``).split(/\s+/).includes(`external`),o=r?.origin===Te&&e.hasAttribute(`download`);return{url:r,external:a,target:i,download:o}}function E(e){let t=null,n=null,r=null,i=null,a=null,o=null,s=e;for(;s&&s!==document.documentElement;)r===null&&(r=T(s,`preload-code`)),i===null&&(i=T(s,`preload-data`)),t===null&&(t=T(s,`keepfocus`)),n===null&&(n=T(s,`noscroll`)),a===null&&(a=T(s,`reload`)),o===null&&(o=T(s,`replacestate`)),s=Oe(s);function c(e){switch(e){case``:case`true`:return!0;case`off`:case`false`:return!1;default:return}}return{preload_code:De[r??`off`],preload_data:De[i??`off`],keepfocus:c(t),noscroll:c(n),reload:c(a),replace_state:c(o)}}function je(e){let t=c(e),n=!0;function r(){n=!0,t.update(e=>e)}function i(e){n=!1,t.set(e)}function a(e){let r;return t.subscribe(t=>{(r===void 0||n&&t!==r)&&e(r=t)})}return{notify:r,set:i,subscribe:a}}var Me={v:g};function Ne(){let{set:e,subscribe:t}=c(!1),n;async function r(){clearTimeout(n);try{let t=await fetch(`${_e}/_app/version.json`,{headers:{pragma:`no-cache`,"cache-control":`no-cache`}});if(!t.ok)return!1;let r=(await t.json()).version!==be;return r&&(e(!0),Me.v(),clearTimeout(n)),r}catch{return!1}}return{subscribe:t,check:r}}function D(e,t,n){return e.origin!==Te||!e.pathname.startsWith(t)?!0:n?e.pathname!==location.pathname:!1}function Pe(e){}var Fe=2**32-1-1,Ie=Object.getOwnPropertyNames(Object.prototype).sort().join(`\0`);function Le(e){let t=Object.getPrototypeOf(e);return t===Object.prototype||t===null||Object.getPrototypeOf(t)===null||Object.getOwnPropertyNames(t).sort().join(`\0`)===Ie}function Re(e){return Object.prototype.toString.call(e).slice(8,-1)}function ze(e){return Object.getOwnPropertySymbols(e).filter(t=>Object.getOwnPropertyDescriptor(e,t).enumerable)}function Be(e){return!(!Number.isInteger(e)||e<0||e>Fe)}function Ve(e){if(e.length===0||e.length>1&&e.charCodeAt(0)===48)return!1;for(let t=0;t<e.length;t++){let n=e.charCodeAt(t);if(n<48||n>57)return!1}return Be(+e)}function He(e){for(var t=e.length-1;t>=0&&!Ve(e[t]);t--);return t+1}function Ue(e){let t=Object.keys(e);return t.length=He(t),t}Uint8Array.fromBase64,typeof process==`object`&&process.versions?.node;var We=Object.freeze({kind:`not-plain`}),Ge=Object.freeze({kind:`symbol-keys`});Object.freeze({identify:e=>e,typeOf:e=>e===null?`null`:typeof e,toPrimitive:e=>e,tagOf:e=>Re(e),isThenable:e=>typeof e.then==`function`,toPromise:e=>Promise.resolve(e),unbox:e=>e.valueOf(),toISOString:e=>isNaN(e.getDate())?``:e.toISOString(),toStringValue:e=>e.toString(),regExpInfo:e=>({source:e.source,flags:e.flags}),valuesOf:e=>e,entriesOf:e=>e,viewInfo:e=>({buffer:e.buffer,byteOffset:e.byteOffset,byteLength:e.byteLength,length:e.length,bufferByteLength:e.buffer.byteLength}),toArrayBuffer:e=>e,lengthOf:e=>e.length,hasOwn:(e,t)=>Object.hasOwn(e,t),indicesOf:e=>Ue(e),shapeOf:e=>Le(e)?ze(e).length>0?Ge:{kind:Object.getPrototypeOf(e)===null?`null-proto`:`plain`,keys:Object.keys(e)}:We,get:(e,t)=>e[t]}),Object.freeze({fromPrimitive:e=>e,fromISOString:e=>new Date(e),fromStringValue:(e,t)=>e===`URL`?new URL(t):e===`URLSearchParams`?new URLSearchParams(t):Temporal[e.slice(9)].from(t),fromArrayBuffer:e=>e,fromRegExpInfo:(e,t)=>new RegExp(e,t),fromViewInfo:(e,t,n,r)=>{let i=globalThis[e];return n===void 0?new i(t):new i(t,n,r)},box:e=>Object(e),createArray:e=>Array(e),createSparseArray:e=>{let t=[];return t[Fe]=void 0,delete t[Fe],t.length=e,t},createObject:()=>({}),createNullPrototypeObject:()=>Object.create(null),createSet:()=>new Set,createMap:()=>new Map,set:(e,t,n)=>{e[t]=n},addValue:(e,t)=>{e.add(t)},addEntry:(e,t,n)=>{e.set(t,n)}});var Ke=new Set([`load`,`prerender`,`csr`,`ssr`,`trailingSlash`,`config`]);[...Ke],[...new Set([...Ke])];function qe(e){return e.filter(e=>e!=null)}function O(e,t){return e+`/`+t}function Je(e){return e instanceof l||e instanceof d?e.status:500}function Ye(e){return e instanceof d?e.text:`Internal Error`}var k,A,Xe,Ze=a.toString().includes(`$$`)||/function \w+\(\) \{\}/.test(a.toString()),Qe=`a:`;Ze?(k={data:{},form:null,error:null,params:{},route:{id:null},state:{},status:-1,url:new URL(Qe)},A={current:null},Xe={current:!1}):(k=new class{#e=o({});get data(){return n(this.#e)}set data(e){i(this.#e,e)}#t=o(null);get form(){return n(this.#t)}set form(e){i(this.#t,e)}#n=o(null);get error(){return n(this.#n)}set error(e){i(this.#n,e)}#r=o({});get params(){return n(this.#r)}set params(e){i(this.#r,e)}#i=o({id:null});get route(){return n(this.#i)}set route(e){i(this.#i,e)}#a=o({});get state(){return n(this.#a)}set state(e){i(this.#a,e)}#o=o(-1);get status(){return n(this.#o)}set status(e){i(this.#o,e)}#s=o(new URL(Qe));get url(){return n(this.#s)}set url(e){i(this.#s,e)}},A=new class{#e=o(null);get current(){return n(this.#e)}set current(e){i(this.#e,e)}},Xe=new class{#e=o(!1);get current(){return n(this.#e)}set current(e){i(this.#e,e)}},Me.v=()=>Xe.current=!0);function $e(e){Object.assign(k,e)}var et={spanContext(){return tt},setAttribute(){return this},setAttributes(){return this},addEvent(){return this},setStatus(){return this},updateName(){return this},end(){return this},isRecording(){return!1},recordException(){return this},addLink(){return this},addLinks(){return this}},tt={traceId:``,spanId:``,traceFlags:0},{onMount:nt,tick:rt}=s,it=r??(e=>e()),at=new Set([`icon`,`shortcut icon`,`apple-touch-icon`]),j=null,M=he(`sveltekit:scroll`)??{},N=he(`sveltekit:snapshot`)??{},P={url:je({}),page:je({}),navigating:c(null),updated:Ne()};function ot(e){M[e]=w()}function st(e,t){let n=e+1;for(;M[n];)delete M[n],n+=1;for(n=t+1;N[n];)delete N[n],n+=1}function F(e,t=!1){return t?location.replace(e.href):location.href=e.href,new Promise(g)}async function ct(){if(`serviceWorker`in navigator){let e=await navigator.serviceWorker.getRegistration(b||`/`);e&&await e.update()}}var lt,ut,I,L,dt,R,ft={},pt={},mt=[],ht=[],z=null;function B(){z?.fork?.then(e=>e?.discard()),z=null,Q={element:void 0,href:void 0}}var V=new Map,gt=new Set,_t=new Set,H=new Set,U={branch:[],error:null,url:null,nav:null},vt=!1,W=!1,yt=!0,G=!1,K=!1,bt=!1,xt=!1,St,q,J,Y,X=new Set,Ct=new Map,wt=new Map;async function Tt(e,t,n){if(globalThis.__sveltekit_1n6ye5w.data){let{q:e={},p:t={},l:n={},f:r={}}=globalThis.__sveltekit_1n6ye5w.data;for(let t in e)ft[t]=e[t];for(let e in n)ft[e]=n[e];for(let e in r)ft[e]=r[e];for(let e in t)pt[e]=t[e]}document.URL!==location.href&&(location.href=location.href),R=e,await e.hooks.init?.(),lt=me(e),L=document.documentElement,dt=t,ut=e.nodes[0],I=e.nodes[1],ut(),I(),q=history.state?.[x],J=history.state?.[S],q||(q=J=Date.now(),history.replaceState({...history.state,[x]:q,[S]:J},``));let r=M[q];function i(){r&&(history.scrollRestoration=`manual`,scrollTo(r.x,r.y))}n?(i(),await nn(dt,n)):(await Z({type:`enter`,url:Ee(R.hash?ln(new URL(location.href)):location.href),replace_state:!0}),i()),tn()}function Et(){mt.length=0,xt=!1}function Dt(e){ht.some(e=>e?.snapshot)&&(N[e]=ht.map(e=>e?.snapshot?.capture()))}function Ot(e){N[e]?.forEach((e,t)=>{ht[t]?.snapshot?.restore(e)})}function kt(){ot(q),ge(Se,M),Dt(J),ge(xe,N)}async function At(e,n,r,i){let a,o;n.invalidateAll&&B(),await Z({type:`goto`,url:Ee(e),keepfocus:n.keepFocus,noscroll:n.noScroll,replace_state:n.replaceState,state:n.state,redirect_count:r,nav_token:i,accept:()=>{if(n.invalidateAll){xt=!0,a=new Set;for(let[e,t]of Ct)for(let[n,r]of t)r.resource?.reset(),a.add(O(e,n));o=new Set;for(let[e,t]of wt)for(let n of t.keys())o.add(O(e,n))}n.invalidate&&n.invalidate.forEach($t)}}),n.invalidateAll&&t().then(t).then(()=>{for(let[e,t]of Ct)for(let[n,{resource:r}]of t)a?.has(O(e,n))&&r.start();for(let[e,t]of wt)for(let[n,{resource:r}]of t)o?.has(O(e,n))&&r.reconnect()})}async function jt(e){if(e.id!==z?.id){B();let t={};X.add(t),z={id:e.id,token:t,promise:Vt({...e,preload:t}).then(e=>(X.delete(t),e.type===`loaded`&&e.state.error&&B(),e)),fork:null}}return z.promise}async function Mt(e){let t=(await Gt(e,!1))?.route;t&&await Promise.all([...t.layouts,t.leaf].filter(Boolean).map(e=>e[1]()))}async function Nt(e,t,n){let r={params:U.params,route:{id:U.route?.id??null},url:new URL(location.href)};if(U={...e.state,nav:r},$e(e.props.page),St=new R.root({target:t,props:{...e.props,stores:P,components:ht},hydrate:n,sync:!1,transformError:void 0}),await Promise.resolve(),n){let e={from:null,to:{...r,scroll:M[q]??w()},willUnload:!1,type:`enter`,complete:Promise.resolve()};H.forEach(t=>t(e))}Ot(J),W=!0}async function Pt({url:e,params:t,branch:n,errors:r,status:i,error:a,route:o,form:s}){let c=`never`;if(b&&(e.pathname===b||e.pathname===b+`/`))c=`always`;else for(let e of n)e?.slash!==void 0&&(c=e.slash);e.pathname=f(e.pathname,c),e.search=e.search;let l={type:`loaded`,state:{url:e,params:t,branch:n,error:a,route:o},props:{constructors:qe(n).map(e=>e.node.component),page:cn(k)}};s!==void 0&&(l.props.form=s);let u={},d=!k,p=0;for(let e=0;e<Math.max(n.length,U.branch.length);e+=1){let t=n[e],r=U.branch[e];t?.data!==r?.data&&(d=!0),t&&(u={...u,...t.data},d&&(l.props[`data_${p}`]=u),p+=1)}return(!U.url||e.href!==U.url.href||U.error!==a||s!==void 0&&s!==k.form||d)&&(l.props.page={error:a,params:t,route:{id:o?.id??null},state:{},status:i,url:new URL(e),form:s??null,data:d?u:k.data}),l}async function Ft({loader:e,parent:t,url:n,params:r,route:i,server_data_node:a}){let o=null,s=!0,c={dependencies:new Set,params:new Set,parent:!1,route:!1,url:!1,search_params:new Set},l=await e();if(l.universal?.load){function e(...e){for(let t of e){let{href:e}=new URL(t,n);c.dependencies.add(e)}}let u={tracing:{enabled:!1,root:et,current:et},route:new Proxy(i,{get:(e,t)=>(s&&(c.route=!0),e[t])}),params:new Proxy(r,{get:(e,t)=>(s&&c.params.add(t),e[t])}),data:a?.data??null,url:h(n,()=>{s&&(c.url=!0)},e=>{s&&c.search_params.add(e)},R.hash),async fetch(t,r){t instanceof Request&&(r={body:t.method===`GET`||t.method===`HEAD`?void 0:await t.blob(),cache:t.cache,credentials:t.credentials,headers:[...t.headers].length>0?t?.headers:void 0,integrity:t.integrity,keepalive:t.keepalive,method:t.method,mode:t.mode,redirect:t.redirect,referrer:t.referrer,referrerPolicy:t.referrerPolicy,signal:t.signal,...r});let{resolved:i,promise:a}=It(t,r,n);return s&&e(i.href),a},setHeaders:g,depends:e,parent(){return s&&(c.parent=!0),t()},untrack(e){s=!1;try{return e()}finally{s=!0}}};o=await l.universal.load.call(null,u)??null}return{node:l,loader:e,server:a,universal:l.universal?.load?{type:`data`,data:o,uses:c}:null,data:o??a?.data??null,slash:l.universal?.trailingSlash??a?.slash}}function It(e,t,n){let r=e instanceof Request?e.url:e,i=new URL(r,n);return i.origin===n.origin&&(r=i.href.slice(n.origin.length)),{resolved:i,promise:W?re(r,i.href,t):y(r,t)}}function Lt(e,t,n,r,i,a){if(xt)return!0;if(!i)return!1;if(i.parent&&e||i.route&&t||i.url&&n)return!0;for(let e of i.search_params)if(r.has(e))return!0;for(let e of i.params)if(a[e]!==U.params[e])return!0;for(let e of i.dependencies)if(mt.some(t=>t(new URL(e))))return!0;return!1}function Rt(e,t){return e?.type===`data`?e:e?.type===`skip`?t??null:null}function zt(e,t){if(!e)return new Set(t.searchParams.keys());let n=new Set([...e.searchParams.keys(),...t.searchParams.keys()]);for(let r of n){let i=e.searchParams.getAll(r),a=t.searchParams.getAll(r);i.every(e=>a.includes(e))&&a.every(e=>i.includes(e))&&n.delete(r)}return n}function Bt({error:e,url:t,route:n,params:r}){return{type:`loaded`,state:{error:e,url:t,route:n,params:r,branch:[]},props:{page:cn(k),constructors:[]}}}async function Vt({id:e,invalidating:t,url:n,params:r,route:i,preload:a}){if(z?.id===e)return X.delete(z.token),z.promise;let{errors:o,layouts:s,leaf:c}=i,d=[...s,c];o.forEach(e=>e?.().catch(g)),d.forEach(e=>e?.[1]().catch(g));let f=U.url?e!==qt(U.url):!1,p=U.route?i.id!==U.route.id:!1,ee=zt(U.url,n),m=!1,h=d.map(async(e,t)=>{if(!e)return;let a=U.branch[t];return e[1]===a?.loader&&!Lt(m,p,f,ee,a.universal?.uses,r)?a:(m=!0,Ft({loader:e[1],url:n,params:r,route:i,parent:async()=>{let e={};for(let n=0;n<t;n+=1)Object.assign(e,(await h[n])?.data);return e},server_data_node:Rt(e[0]?{type:`skip`}:null,e[0]?a?.server:void 0)}))});for(let e of h)e.catch(g);let _=[];for(let e=0;e<d.length;e+=1)if(d[e])try{_.push(await h[e])}catch(t){if(t instanceof u)return{type:`redirect`,location:t.location};if(a&&X.has(a))return Bt({error:await $(t,{params:r,url:n,route:{id:i.id}}),url:n,params:r,route:i});let s=Je(t),c;if(t instanceof l)c=t.body;else{if(await P.updated.check())return await ct(),await F(n);c=await $(t,{params:r,url:n,route:{id:i.id}})}let d=await Ht(e,_,o);return d?Pt({url:n,params:r,branch:_.slice(0,d.idx).concat(d.node),errors:o,status:s,error:c,route:i}):await Yt(n,{id:i.id},c,s)}else _.push(void 0);return Pt({url:n,params:r,branch:_,errors:o,status:200,error:null,route:i,form:t?void 0:null})}async function Ht(e,t,n){for(;e--;)if(n[e]){let r=e;for(;!t[r];)--r;try{return{idx:r+1,node:{node:await n[e](),loader:n[e],data:{},server:null,universal:null}}}catch{continue}}}async function Ut({status:e,error:t,url:n,route:r}){let i={};try{return Pt({url:n,params:i,branch:[await Ft({loader:ut,url:n,params:i,route:r,parent:()=>Promise.resolve({}),server_data_node:Rt(null)}),{node:await I(),loader:I,universal:null,server:null,data:null}],status:e,error:t,errors:[],route:null})}catch(t){if(t instanceof u){await At(new URL(t.location,location.href),{},0);return}let a=await R.get_error_template(),o=await $(t,{url:n,params:i,route:r}),s=a({status:e,message:String(o?.message??``).replace(/&/g,`&`).replace(/</g,`<`).replace(/>/g,`>`)}),c=new DOMParser().parseFromString(s,`text/html`);throw document.documentElement.replaceChild(document.adoptNode(c.head),document.head),document.documentElement.replaceChild(document.adoptNode(c.body),document.body),t}}async function Wt(e){let t=e.href;if(V.has(t))return V.get(t);let n;try{let r=(async()=>{let t=await R.hooks.reroute({url:new URL(e),fetch:async(t,n)=>It(t,n,e).promise})??e;if(typeof t==`string`){let n=new URL(e);R.hash?n.hash=t:n.pathname=t,t=n}return t})();V.set(t,r),n=await r}catch{V.delete(t);return}return n}async function Gt(e,t){if(e&&!D(e,b,R.hash)){let n=await Wt(e);if(!n)return;let r=Kt(n);for(let n of lt){let i=n.exec(r);if(i)return{id:qt(e),invalidating:t,route:n,params:ee(i),url:e}}}}function Kt(e){return p(R.hash?e.hash.replace(/^#/,``).replace(/[?#].+/,``):e.pathname.slice(b.length))||`/`}function qt(e){return(R.hash?e.hash.replace(/^#/,``):e.pathname)+e.search}function Jt({url:e,type:t,intent:n,delta:r,event:i,scroll:a}){let o=!1,s=sn(U,n,e,t,a??null);r!==void 0&&(s.navigation.delta=r),i!==void 0&&(s.navigation.event=i);let c={...s.navigation,cancel:()=>{o=!0,s.reject(Error(`navigation cancelled`))}};return G||gt.forEach(e=>e(c)),o?null:s}async function Z({type:n,url:r,popped:i,keepfocus:a,noscroll:o,replace_state:s,state:c={},redirect_count:l=0,nav_token:u={},accept:f=g,block:p=g,event:ee}){let m=Y;Y=u;let h=await Gt(r,!1),_=n===`enter`?sn(U,h,r,n):Jt({url:r,type:n,delta:i?.delta,intent:h,scroll:i?.scroll,event:ee});if(!_){p(),Y===u&&(Y=m);return}let te=q,ne=J;f(),G=!0,W&&_.navigation.type!==`enter`&&P.navigating.set(A.current=_.navigation);let v=h&&await Vt(h);if(!v){if(D(r,b,R.hash))return await F(r,s);v=await Yt(r,{id:null},await $(new d(404,`Not Found`,`Not found: ${r.pathname}`),{url:r,params:{},route:{id:null}}),404,s)}if(r=h?.url||r,Y!==u){_.reject(Error(`navigation aborted`));return}if(!v)return;if(v.type===`redirect`){if(l<20){await Z({type:n,url:new URL(v.location,r),popped:i,keepfocus:a,noscroll:o,replace_state:s,state:c,redirect_count:l+1,nav_token:u}),_.fulfil(void 0);return}if(v=await Ut({status:500,error:await $(Error(`Redirect loop`),{url:r,params:{},route:{id:null}}),url:r,route:{id:null}}),!v)return}else if(v.props.page.status>=400&&await P.updated.check())return await ct(),await F(r,s);if(Et(),ot(te),Dt(ne),v.props.page.url.pathname!==r.pathname&&(r.pathname=v.props.page.url.pathname),c=i?i.state:c,!i){let e=+!s,t={[x]:q+=e,[S]:J+=e,[Ce]:c};(s?history.replaceState:history.pushState).call(history,t,``,r),s||st(q,J)}let y=h&&z?.id===h.id?z.fork:null;z?.fork&&!y?B():(z=null,Q={element:void 0,href:void 0}),v.props.page.state=c;let re;if(W){let t=(await Promise.all(Array.from(_t,e=>e(_.navigation)))).filter(e=>typeof e==`function`);if(t.length>0){function e(){t.forEach(e=>{H.delete(e)})}t.push(e),t.forEach(e=>{H.add(e)})}let n=_.navigation.to;U={...v.state,nav:{params:n.params,route:n.route,url:n.url}},v.props.page&&(v.props.page.url=r),!a&&document.activeElement instanceof HTMLElement&&document.activeElement!==document.body&&document.activeElement.blur();let i=y&&await y;i?re=i.commit():(j=null,St.$set(v.props),j&&Object.assign(v.props.page,j),$e(v.props.page),re=e?.()),bt=!0}else await Nt(v,dt,!1);let{activeElement:ie}=document;if(await re,await t(),await t(),Y!==u){_.reject(Error(`navigation aborted`));return}v.props.page&&j&&Object.assign(v.props.page,j);let ae=null;if(yt){let e=i?i.scroll:o?w():null;e?scrollTo(e.x,e.y):(ae=r.hash&&document.getElementById(un(r)))?ae.scrollIntoView():scrollTo(0,0)}let oe=document.activeElement!==ie&&document.activeElement!==document.body;!a&&!oe&&on(r,!ae),yt=!0,G=!1,_.fulfil(void 0),_.navigation.to&&(_.navigation.to.scroll=w()),H.forEach(e=>e(_.navigation)),n===`popstate`&&Ot(J),P.navigating.set(A.current=null)}async function Yt(e,t,n,r,i){return e.origin===Te&&e.pathname===location.pathname&&!vt?await Ut({status:r,error:n,url:e,route:t}):await F(e,i)}var Q={element:void 0,href:void 0};function Xt(){let e,t;L.addEventListener(`mousemove`,t=>{let n=t.target;clearTimeout(e),e=setTimeout(()=>{i(n,C.hover)},20)});function n(e){e.defaultPrevented||i(e.composedPath()[0],C.tap)}L.addEventListener(`mousedown`,n),L.addEventListener(`touchstart`,n,{passive:!0});let r=new IntersectionObserver(e=>{for(let t of e)t.isIntersecting&&(Mt(new URL(t.target.href)),r.unobserve(t.target))},{threshold:0});async function i(e,n){let r=ke(e,L),i=r===Q.element&&r?.href===Q.href&&n>=t;if(!r||i)return;let{url:a,external:o,download:s}=Ae(r,b,R.hash);if(o||s)return;let c=E(r),l=a&&qt(U.url)===qt(a);if(!(c.reload||l)){if(n<=c.preload_data){Q={element:r,href:r.href},t=C.tap;let e=await Gt(a,!1);if(!e)return;jt(e)}else n<=c.preload_code&&(Q={element:r,href:r.href},t=n,Mt(a))}}function a(){r.disconnect();for(let e of L.querySelectorAll(`a`)){let{url:t,external:n,download:i}=Ae(e,b,R.hash);if(n||i)continue;let a=E(e);a.reload||(a.preload_code===C.viewport&&r.observe(e),a.preload_code===C.eager&&Mt(t))}}H.add(a),a()}function $(e,t){if(e instanceof l)return e.body;let n=Je(e),r=Ye(e);return R.hooks.handleError({error:e,event:t,status:n,message:r})??{message:r}}function Zt(e,t){nt(()=>(e.add(t),()=>{e.delete(t)}))}function Qt(e){Zt(_t,e)}function $t(e){if(typeof e==`function`)mt.push(e);else{let{href:t}=new URL(e,location.href);mt.push(e=>e.href===t)}}function en(e,t){let n={[x]:q,[S]:J,[we]:k.url.href,[Ce]:t};history.replaceState(n,``,Ee(e)),k.state=t,St.$set({page:it(()=>cn(k))})}function tn(){history.scrollRestoration=`manual`,addEventListener(`beforeunload`,e=>{let t=!1;if(kt(),!G){let e=sn(U,void 0,null,`leave`),n={...e.navigation,cancel:()=>{t=!0,e.reject(Error(`navigation cancelled`))}};gt.forEach(e=>e(n))}t?(e.preventDefault(),e.returnValue=``):history.scrollRestoration=`auto`}),addEventListener(`visibilitychange`,()=>{document.visibilityState===`hidden`&&kt()}),navigator.connection?.saveData||Xt(),L.addEventListener(`click`,async t=>{if(t.button||t.which!==1||t.metaKey||t.ctrlKey||t.shiftKey||t.altKey||t.defaultPrevented)return;let n=ke(t.composedPath()[0],L);if(!n)return;let{url:r,external:i,target:a,download:o}=Ae(n,b,R.hash);if(!r)return;if(a===`_parent`||a===`_top`){if(window.parent!==window)return}else if(a&&a!==`_self`)return;let s=E(n);if(!(n instanceof SVGAElement)&&r.protocol!==location.protocol&&r.protocol!==`https:`&&r.protocol!==`http:`||o)return;let[c,l]=(R.hash?r.hash.replace(/^#/,``):r.href).split(`#`),u=c===m(location);if(i||s.reload&&(!u||!l)){Jt({url:r,type:`link`,event:t})?G=!0:t.preventDefault();return}if(l!==void 0&&u){let[,i]=U.url.href.split(`#`);if(i===l){if(t.preventDefault(),l===``||l===`top`&&n.ownerDocument.getElementById(`top`)===null)scrollTo({top:0});else{let e=n.ownerDocument.getElementById(decodeURIComponent(l));e&&(e.scrollIntoView(),e.focus())}return}if(K=!0,ot(q),e(r),!s.replace_state)return;K=!1}t.preventDefault(),await new Promise(e=>{requestAnimationFrame(()=>{setTimeout(e,0)}),setTimeout(e,100)}),await Z({type:`link`,url:r,keepfocus:s.keepfocus,noscroll:s.noscroll,replace_state:s.replace_state??r.href===location.href,event:t})}),L.addEventListener(`submit`,e=>{if(e.defaultPrevented)return;let t=HTMLFormElement.prototype.cloneNode.call(e.target),n=e.submitter;if((n?.formTarget||t.target)===`_blank`||(n?.formMethod||t.method)!==`get`)return;let r=new URL(n?.hasAttribute(`formaction`)&&n?.formAction||t.action);if(D(r,b,!1))return;let i=e.target,a=E(i);if(a.reload)return;e.preventDefault(),e.stopPropagation();let o=new FormData(i,n);r.search=new URLSearchParams(o).toString(),Z({type:`form`,url:r,keepfocus:a.keepfocus,noscroll:a.noscroll,replace_state:a.replace_state??r.href===location.href,event:e})}),addEventListener(`popstate`,async t=>{if(!an){if(t.state?.[`sveltekit:history`]){let n=t.state[x];if(Y={},n===q)return;let r=M[n],i=t.state[`sveltekit:states`]??{},a=new URL(t.state[`sveltekit:pageurl`]??location.href),o=t.state[S],s=U.url?m(location)===m(U.url):!1;if(o===J&&(bt||s)){i!==k.state&&(k.state=i),e(a),M[q]=w(),r&&scrollTo(r.x,r.y),q=n;return}let c=n-q;await Z({type:`popstate`,url:a,popped:{state:i,scroll:r,delta:c},accept:()=>{q=n,J=o},block:()=>{history.go(-c)},nav_token:Y,event:t})}else K||(e(new URL(location.href)),R.hash&&location.reload())}}),addEventListener(`hashchange`,()=>{K&&(K=!1,history.replaceState({...history.state,[x]:++q,[S]:J},``,location.href))});for(let e of document.querySelectorAll(`link`))at.has(e.rel)&&(e.href=e.href);addEventListener(`pageshow`,e=>{e.persisted&&P.navigating.set(A.current=null)});function e(e){U.url=k.url=e,P.page.set(cn(k)),P.page.notify()}}async function nn(e,{status:t=200,error:n,node_ids:r,params:i,route:a,server_route:o,data:s,form:c}){vt=!0;let l=new URL(location.href),d;({params:i={},route:a={id:null}}=await Gt(l,!1)||{}),d=lt.find(({id:e})=>e===a.id);let f,p=!0;try{let e=r.map(async(t,n)=>{let r=s[n];return r?.uses&&(r.uses=rn(r.uses)),Ft({loader:R.nodes[t],url:l,params:i,route:a,parent:async()=>{let t={};for(let r=0;r<n;r+=1)Object.assign(t,(await e[r]).data);return t},server_data_node:Rt(r)})}),o=await Promise.all(e);if(d){let e=d.layouts;for(let t=0;t<e.length;t++)e[t]||o.splice(t,0,void 0)}f=await Pt({url:l,params:i,branch:o,status:t,error:n,errors:d?.errors,form:c,route:d??null})}catch(t){if(t instanceof u)return await F(new URL(t.location,location.href));f=await Ut({status:Je(t),error:await $(t,{url:l,params:i,route:a}),url:l,route:a}),e.textContent=``,p=!1}f&&(f.props.page&&(f.props.page.state={}),await Nt(f,e,p))}function rn(e){return{dependencies:new Set(e?.dependencies??[]),params:new Set(e?.params??[]),parent:!!e?.parent,route:!!e?.route,url:!!e?.url,search_params:new Set(e?.search_params??[])}}var an=!1;function on(e,t=!0){let n=document.querySelector(`[autofocus]`);if(n)n.focus();else{let n=un(e);if(n&&document.getElementById(n)){let{x:r,y:i}=w();setTimeout(()=>{let a=history.state;an=!0,location.replace(new URL(`#${n}`,location.href)),history.replaceState(a,``,e),t&&scrollTo(r,i),an=!1})}else{let e=document.body,t=e.getAttribute(`tabindex`);e.tabIndex=-1,e.focus({preventScroll:!0,focusVisible:!1}),t===null?e.removeAttribute(`tabindex`):e.setAttribute(`tabindex`,t)}let r=getSelection();if(r&&r.type!==`None`){let e=[];for(let t=0;t<r.rangeCount;t+=1)e.push(r.getRangeAt(t));setTimeout(()=>{if(r.rangeCount===e.length){for(let t=0;t<r.rangeCount;t+=1){let n=e[t],i=r.getRangeAt(t);if(n.commonAncestorContainer!==i.commonAncestorContainer||n.startContainer!==i.startContainer||n.endContainer!==i.endContainer||n.startOffset!==i.startOffset||n.endOffset!==i.endOffset)return}r.removeAllRanges()}})}}}function sn(e,t,n,r,i=null){let a,o,s=new Promise((e,t)=>{a=e,o=t});return s.catch(g),{navigation:{from:{params:e.params,route:{id:e.route?.id??null},url:e.url,scroll:w()},to:n&&{params:t?.params??null,route:{id:t?.route?.id??null},url:n,scroll:i},willUnload:!t,type:r,complete:s},fulfil:a,reject:o}}function cn(e){return{data:e.data,error:e.error,form:e.form,params:e.params,route:e.route,state:e.state,status:e.status,url:e.url}}function ln(e){let t=new URL(e);return t.hash=decodeURIComponent(e.hash),t}function un(e){let t;if(R.hash){let[,,n]=e.hash.split(`#`,3);t=n??``}else t=e.hash.slice(1);return decodeURIComponent(t)}export{k as a,ye as c,A as i,en as n,Pe as o,Tt as r,be as s,Qt as t};
|
|
1
|
+
import{H as e,U as t,V as n,W as r,it as i,n as a,ot as o,t as s,vt as c}from"./BVDJTrf4.js";var l=class{constructor(e,t){this.status=e,this.body=typeof t==`string`?{message:t}:t||{message:`Error: ${e}`}}toString(){return JSON.stringify(this.body)}},u=class{constructor(e,t){try{new Headers({location:t})}catch{throw Error(`Invalid redirect location ${JSON.stringify(t)}: this string contains characters that cannot be used in HTTP headers`)}this.status=e,this.location=t}},d=class extends Error{constructor(e,t,n){super(n),this.status=e,this.text=t}};new URL(`sveltekit-internal://`);function f(e,t){return e===`/`||t===`ignore`?e:t===`never`?e.endsWith(`/`)?e.slice(0,-1):e:t===`always`&&!e.endsWith(`/`)?e+`/`:e}function p(e){return e.split(`%25`).map(decodeURI).join(`%25`)}function ee(e){for(let t in e)e[t]=decodeURIComponent(e[t]);return e}function m({href:e}){return e.split(`#`)[0]}function h(e,t,n,r=!1){let i=new URL(e);Object.defineProperty(i,"searchParams",{value:new Proxy(i.searchParams,{get(e,r){if(r===`get`||r===`getAll`||r===`has`)return(t,...i)=>(n(t),e[r](t,...i));t();let i=Reflect.get(e,r);return typeof i==`function`?i.bind(e):i}}),enumerable:!0,configurable:!0});let a=[`href`,`pathname`,`search`,`toString`,`toJSON`];r&&a.push(`hash`);for(let n of a)Object.defineProperty(i,n,{get(){return t(),e[n]},enumerable:!0,configurable:!0});return i}function g(){}function _(...e){let t=5381;for(let n of e)if(typeof n==`string`){let e=n.length;for(;e;)t=t*33^n.charCodeAt(--e)}else if(ArrayBuffer.isView(n)){let e=new Uint8Array(n.buffer,n.byteOffset,n.byteLength),r=e.length;for(;r;)t=t*33^e[--r]}else throw TypeError(`value must be a string or TypedArray`);return(t>>>0).toString(36)}new TextEncoder;function te(e){let t=atob(e),n=new Uint8Array(t.length);for(let e=0;e<t.length;e++)n[e]=t.charCodeAt(e);return n}var ne=window.fetch;window.fetch=(e,t)=>((e instanceof Request?e.method:t?.method||`GET`)!==`GET`&&v.delete(ie(e)),ne(e,t));var v=new Map;function y(e,t){let n=ie(e,t),r=document.querySelector(n);if(r?.textContent){r.remove();let{body:e,...t}=JSON.parse(r.textContent);r.getAttribute(`data-b64`)!==null&&(e=te(e));let i=r.getAttribute(`data-ttl`);return i&&v.set(n,{body:e,init:t,ttl:1e3*Number(i)}),Promise.resolve(new Response(e,t))}return window.fetch(e,t)}function re(e,t,n){if(v.size>0){let t=ie(e,n),r=v.get(t);if(r){if(performance.now()<r.ttl&&[`default`,`force-cache`,`only-if-cached`,void 0].includes(n?.cache))return new Response(r.body,r.init);v.delete(t)}}return window.fetch(t,n)}function ie(e,t){let n=`script[data-sveltekit-fetched][data-url=${JSON.stringify(e instanceof Request?e.url:e)}]`;if(t?.headers||t?.body){let e=[];t.headers&&e.push([...new Headers(t.headers)].join(`,`)),t.body&&(typeof t.body==`string`||ArrayBuffer.isView(t.body))&&e.push(t.body),n+=`[data-hash="${_(...e)}"]`}return n}var ae=/^(\[)?(\.\.\.)?(\w+)(?:=(\w+))?(\])?$/,oe=/^\/\((?:[^)]+)\)$/;function se(e){let t=[];return{pattern:e===`/`||oe.test(e)?/^\/$/:RegExp(`^${le(e).map(e=>{let n=/^\[\.\.\.(\w+)(?:=(\w+))?\]$/.exec(e);if(n)return t.push({name:n[1],matcher:n[2],optional:!1,rest:!0,chained:!0}),`(?:/([^]*))?`;let r=/^\[\[(\w+)(?:=(\w+))?\]\]$/.exec(e);if(r)return t.push({name:r[1],matcher:r[2],optional:!0,rest:!1,chained:!0}),`(?:/([^/]+))?`;if(!e)return;let i=e.split(/\[(.+?)\](?!\])/);return`/`+i.map((e,n)=>{if(n%2){if(e.startsWith(`x+`))return de(String.fromCharCode(parseInt(e.slice(2),16)));if(e.startsWith(`u+`))return de(String.fromCharCode(...e.slice(2).split(`-`).map(e=>parseInt(e,16))));let[,r,a,o,s]=ae.exec(e);return t.push({name:o,matcher:s,optional:!!r,rest:!!a,chained:a?n===1&&i[0]===``:!1}),a?`([^]*?)`:r?`([^/]*)?`:`([^/]+?)`}return de(e)}).join(``)}).join(``)}/?$`),params:t}}function ce(e){return e!==``&&!/^\([^)]+\)$/.test(e)}function le(e){return e.slice(1).split(`/`).filter(ce)}function ue(e,t,n){let r={},i=e.slice(1),a=i.filter(e=>e!==void 0),o=0;for(let e=0;e<t.length;e+=1){let s=t[e],c=i[e-o];if(s.chained&&s.rest&&o&&(c=i.slice(e-o,e+1).filter(e=>e).join(`/`),o=0),c===void 0){if(s.rest)c=``;else continue}if(!s.matcher||n[s.matcher](c)){r[s.name]=c;let n=t[e+1],l=i[e+1];n&&!n.rest&&n.optional&&l&&s.chained&&(o=0),!n&&!l&&Object.keys(r).length===a.length&&(o=0);continue}if(s.optional&&s.chained){o++;continue}return}if(!o)return r}function de(e){return e.normalize().replace(/[[\]]/g,`\\$&`).replace(/%/g,`%25`).replace(/\//g,`%2[Ff]`).replace(/\?/g,`%3[Ff]`).replace(/#/g,`%23`).replace(/[.*+?^${}()|\\]/g,`\\$&`)}var fe=/\[(\[)?(\.\.\.)?(\w+?)(?:=(\w+))?\]\]?/g;function pe(e,t){let n=le(e),r=e!=`/`&&e.endsWith(`/`);return`/`+n.map(n=>n.replace(fe,(n,r,i,a)=>{let o=t[a];if(!o){if(r||i&&o!==void 0)return``;throw Error(`Missing parameter '${a}' in route ${e}`)}if(o.startsWith(`/`)||o.endsWith(`/`))throw Error(`Parameter '${a}' in route ${e} cannot start or end with a slash -- this would cause an invalid route like foo//bar`);return o})).filter(Boolean).join(`/`)+(r?`/`:``)}function me({nodes:e,server_loads:t,dictionary:n,matchers:r}){let i=new Set(t);return Object.entries(n).map(([t,[n,i,s]])=>{let{pattern:c,params:l}=se(t),u={id:t,exec:e=>{let t=c.exec(e);if(t)return ue(t,l,r)},errors:[1,...s||[]].map(t=>e[t]),layouts:[0,...i||[]].map(o),leaf:a(n)};return u.errors.length=u.layouts.length=Math.max(u.errors.length,u.layouts.length),u});function a(t){let n=t<0;return n&&(t=~t),[n,e[t]]}function o(t){return t===void 0?t:[i.has(t),e[t]]}}function he(e,t=JSON.parse){try{return t(sessionStorage[e])}catch{}}function ge(e,t,n=JSON.stringify){let r=n(t);try{sessionStorage[e]=r}catch{}}var b=globalThis.__sveltekit_1pzy7as?.base??`/.discovery`,_e=globalThis.__sveltekit_1pzy7as?.assets??b??``,ve=``;function ye(...e){if(!e[0].startsWith(`/`))throw Error(`Cannot use \`resolve(...)\` with a non-absolute pathname or route ID (got "${e[0]}"). \`resolve\` is only for internal pathnames and route IDs; external URLs should be used directly.`);return b+ve+pe(e[0],e[1])}var be=`1789832878080`,xe=`sveltekit:snapshot`,Se=`sveltekit:scroll`,Ce=`sveltekit:states`,we=`sveltekit:pageurl`,x=`sveltekit:history`,S=`sveltekit:navigation`,C={tap:1,hover:2,viewport:3,eager:4,off:-1,false:-1},Te=location.origin;function Ee(e){if(e instanceof URL)return e;let t=document.baseURI;if(!t){let e=document.getElementsByTagName(`base`);t=e.length?e[0].href:document.URL}return new URL(e,t)}function w(){return{x:pageXOffset,y:pageYOffset}}function T(e,t){return e.getAttribute(`data-sveltekit-${t}`)}var De={...C,"":C.hover};function Oe(e){let t=e.assignedSlot??e.parentNode;return t?.nodeType===11&&(t=t.host),t}function ke(e,t){for(;e&&e!==t;){if(e.nodeName.toUpperCase()===`A`&&e.hasAttribute(`href`))return e;e=Oe(e)}}function Ae(e,t,n){let r;try{if(r=new URL(e instanceof SVGAElement?e.href.baseVal:e.href,document.baseURI),n&&r.hash.match(/^#[^/]/)){let e=location.hash.split(`#`)[1]||`/`;r.hash=`#${e}${r.hash}`}}catch{}let i=e instanceof SVGAElement?e.target.baseVal:e.target,a=!r||!!i||D(r,t,n)||(e.getAttribute(`rel`)||``).split(/\s+/).includes(`external`),o=r?.origin===Te&&e.hasAttribute(`download`);return{url:r,external:a,target:i,download:o}}function E(e){let t=null,n=null,r=null,i=null,a=null,o=null,s=e;for(;s&&s!==document.documentElement;)r===null&&(r=T(s,`preload-code`)),i===null&&(i=T(s,`preload-data`)),t===null&&(t=T(s,`keepfocus`)),n===null&&(n=T(s,`noscroll`)),a===null&&(a=T(s,`reload`)),o===null&&(o=T(s,`replacestate`)),s=Oe(s);function c(e){switch(e){case``:case`true`:return!0;case`off`:case`false`:return!1;default:return}}return{preload_code:De[r??`off`],preload_data:De[i??`off`],keepfocus:c(t),noscroll:c(n),reload:c(a),replace_state:c(o)}}function je(e){let t=c(e),n=!0;function r(){n=!0,t.update(e=>e)}function i(e){n=!1,t.set(e)}function a(e){let r;return t.subscribe(t=>{(r===void 0||n&&t!==r)&&e(r=t)})}return{notify:r,set:i,subscribe:a}}var Me={v:g};function Ne(){let{set:e,subscribe:t}=c(!1),n;async function r(){clearTimeout(n);try{let t=await fetch(`${_e}/_app/version.json`,{headers:{pragma:`no-cache`,"cache-control":`no-cache`}});if(!t.ok)return!1;let r=(await t.json()).version!==be;return r&&(e(!0),Me.v(),clearTimeout(n)),r}catch{return!1}}return{subscribe:t,check:r}}function D(e,t,n){return e.origin!==Te||!e.pathname.startsWith(t)?!0:n?e.pathname!==location.pathname:!1}function Pe(e){}var Fe=2**32-1-1,Ie=Object.getOwnPropertyNames(Object.prototype).sort().join(`\0`);function Le(e){let t=Object.getPrototypeOf(e);return t===Object.prototype||t===null||Object.getPrototypeOf(t)===null||Object.getOwnPropertyNames(t).sort().join(`\0`)===Ie}function Re(e){return Object.prototype.toString.call(e).slice(8,-1)}function ze(e){return Object.getOwnPropertySymbols(e).filter(t=>Object.getOwnPropertyDescriptor(e,t).enumerable)}function Be(e){return!(!Number.isInteger(e)||e<0||e>Fe)}function Ve(e){if(e.length===0||e.length>1&&e.charCodeAt(0)===48)return!1;for(let t=0;t<e.length;t++){let n=e.charCodeAt(t);if(n<48||n>57)return!1}return Be(+e)}function He(e){for(var t=e.length-1;t>=0&&!Ve(e[t]);t--);return t+1}function Ue(e){let t=Object.keys(e);return t.length=He(t),t}Uint8Array.fromBase64,typeof process==`object`&&process.versions?.node;var We=Object.freeze({kind:`not-plain`}),Ge=Object.freeze({kind:`symbol-keys`});Object.freeze({identify:e=>e,typeOf:e=>e===null?`null`:typeof e,toPrimitive:e=>e,tagOf:e=>Re(e),isThenable:e=>typeof e.then==`function`,toPromise:e=>Promise.resolve(e),unbox:e=>e.valueOf(),toISOString:e=>isNaN(e.getDate())?``:e.toISOString(),toStringValue:e=>e.toString(),regExpInfo:e=>({source:e.source,flags:e.flags}),valuesOf:e=>e,entriesOf:e=>e,viewInfo:e=>({buffer:e.buffer,byteOffset:e.byteOffset,byteLength:e.byteLength,length:e.length,bufferByteLength:e.buffer.byteLength}),toArrayBuffer:e=>e,lengthOf:e=>e.length,hasOwn:(e,t)=>Object.hasOwn(e,t),indicesOf:e=>Ue(e),shapeOf:e=>Le(e)?ze(e).length>0?Ge:{kind:Object.getPrototypeOf(e)===null?`null-proto`:`plain`,keys:Object.keys(e)}:We,get:(e,t)=>e[t]}),Object.freeze({fromPrimitive:e=>e,fromISOString:e=>new Date(e),fromStringValue:(e,t)=>e===`URL`?new URL(t):e===`URLSearchParams`?new URLSearchParams(t):Temporal[e.slice(9)].from(t),fromArrayBuffer:e=>e,fromRegExpInfo:(e,t)=>new RegExp(e,t),fromViewInfo:(e,t,n,r)=>{let i=globalThis[e];return n===void 0?new i(t):new i(t,n,r)},box:e=>Object(e),createArray:e=>Array(e),createSparseArray:e=>{let t=[];return t[Fe]=void 0,delete t[Fe],t.length=e,t},createObject:()=>({}),createNullPrototypeObject:()=>Object.create(null),createSet:()=>new Set,createMap:()=>new Map,set:(e,t,n)=>{e[t]=n},addValue:(e,t)=>{e.add(t)},addEntry:(e,t,n)=>{e.set(t,n)}});var Ke=new Set([`load`,`prerender`,`csr`,`ssr`,`trailingSlash`,`config`]);[...Ke],[...new Set([...Ke])];function qe(e){return e.filter(e=>e!=null)}function O(e,t){return e+`/`+t}function Je(e){return e instanceof l||e instanceof d?e.status:500}function Ye(e){return e instanceof d?e.text:`Internal Error`}var k,A,Xe,Ze=a.toString().includes(`$$`)||/function \w+\(\) \{\}/.test(a.toString()),Qe=`a:`;Ze?(k={data:{},form:null,error:null,params:{},route:{id:null},state:{},status:-1,url:new URL(Qe)},A={current:null},Xe={current:!1}):(k=new class{#e=o({});get data(){return n(this.#e)}set data(e){i(this.#e,e)}#t=o(null);get form(){return n(this.#t)}set form(e){i(this.#t,e)}#n=o(null);get error(){return n(this.#n)}set error(e){i(this.#n,e)}#r=o({});get params(){return n(this.#r)}set params(e){i(this.#r,e)}#i=o({id:null});get route(){return n(this.#i)}set route(e){i(this.#i,e)}#a=o({});get state(){return n(this.#a)}set state(e){i(this.#a,e)}#o=o(-1);get status(){return n(this.#o)}set status(e){i(this.#o,e)}#s=o(new URL(Qe));get url(){return n(this.#s)}set url(e){i(this.#s,e)}},A=new class{#e=o(null);get current(){return n(this.#e)}set current(e){i(this.#e,e)}},Xe=new class{#e=o(!1);get current(){return n(this.#e)}set current(e){i(this.#e,e)}},Me.v=()=>Xe.current=!0);function $e(e){Object.assign(k,e)}var et={spanContext(){return tt},setAttribute(){return this},setAttributes(){return this},addEvent(){return this},setStatus(){return this},updateName(){return this},end(){return this},isRecording(){return!1},recordException(){return this},addLink(){return this},addLinks(){return this}},tt={traceId:``,spanId:``,traceFlags:0},{onMount:nt,tick:rt}=s,it=r??(e=>e()),at=new Set([`icon`,`shortcut icon`,`apple-touch-icon`]),j=null,M=he(`sveltekit:scroll`)??{},N=he(`sveltekit:snapshot`)??{},P={url:je({}),page:je({}),navigating:c(null),updated:Ne()};function ot(e){M[e]=w()}function st(e,t){let n=e+1;for(;M[n];)delete M[n],n+=1;for(n=t+1;N[n];)delete N[n],n+=1}function F(e,t=!1){return t?location.replace(e.href):location.href=e.href,new Promise(g)}async function ct(){if(`serviceWorker`in navigator){let e=await navigator.serviceWorker.getRegistration(b||`/`);e&&await e.update()}}var lt,ut,I,L,dt,R,ft={},pt={},mt=[],ht=[],z=null;function B(){z?.fork?.then(e=>e?.discard()),z=null,Q={element:void 0,href:void 0}}var V=new Map,gt=new Set,_t=new Set,H=new Set,U={branch:[],error:null,url:null,nav:null},vt=!1,W=!1,yt=!0,G=!1,K=!1,bt=!1,xt=!1,St,q,J,Y,X=new Set,Ct=new Map,wt=new Map;async function Tt(e,t,n){if(globalThis.__sveltekit_1pzy7as.data){let{q:e={},p:t={},l:n={},f:r={}}=globalThis.__sveltekit_1pzy7as.data;for(let t in e)ft[t]=e[t];for(let e in n)ft[e]=n[e];for(let e in r)ft[e]=r[e];for(let e in t)pt[e]=t[e]}document.URL!==location.href&&(location.href=location.href),R=e,await e.hooks.init?.(),lt=me(e),L=document.documentElement,dt=t,ut=e.nodes[0],I=e.nodes[1],ut(),I(),q=history.state?.[x],J=history.state?.[S],q||(q=J=Date.now(),history.replaceState({...history.state,[x]:q,[S]:J},``));let r=M[q];function i(){r&&(history.scrollRestoration=`manual`,scrollTo(r.x,r.y))}n?(i(),await nn(dt,n)):(await Z({type:`enter`,url:Ee(R.hash?ln(new URL(location.href)):location.href),replace_state:!0}),i()),tn()}function Et(){mt.length=0,xt=!1}function Dt(e){ht.some(e=>e?.snapshot)&&(N[e]=ht.map(e=>e?.snapshot?.capture()))}function Ot(e){N[e]?.forEach((e,t)=>{ht[t]?.snapshot?.restore(e)})}function kt(){ot(q),ge(Se,M),Dt(J),ge(xe,N)}async function At(e,n,r,i){let a,o;n.invalidateAll&&B(),await Z({type:`goto`,url:Ee(e),keepfocus:n.keepFocus,noscroll:n.noScroll,replace_state:n.replaceState,state:n.state,redirect_count:r,nav_token:i,accept:()=>{if(n.invalidateAll){xt=!0,a=new Set;for(let[e,t]of Ct)for(let[n,r]of t)r.resource?.reset(),a.add(O(e,n));o=new Set;for(let[e,t]of wt)for(let n of t.keys())o.add(O(e,n))}n.invalidate&&n.invalidate.forEach($t)}}),n.invalidateAll&&t().then(t).then(()=>{for(let[e,t]of Ct)for(let[n,{resource:r}]of t)a?.has(O(e,n))&&r.start();for(let[e,t]of wt)for(let[n,{resource:r}]of t)o?.has(O(e,n))&&r.reconnect()})}async function jt(e){if(e.id!==z?.id){B();let t={};X.add(t),z={id:e.id,token:t,promise:Vt({...e,preload:t}).then(e=>(X.delete(t),e.type===`loaded`&&e.state.error&&B(),e)),fork:null}}return z.promise}async function Mt(e){let t=(await Gt(e,!1))?.route;t&&await Promise.all([...t.layouts,t.leaf].filter(Boolean).map(e=>e[1]()))}async function Nt(e,t,n){let r={params:U.params,route:{id:U.route?.id??null},url:new URL(location.href)};if(U={...e.state,nav:r},$e(e.props.page),St=new R.root({target:t,props:{...e.props,stores:P,components:ht},hydrate:n,sync:!1,transformError:void 0}),await Promise.resolve(),n){let e={from:null,to:{...r,scroll:M[q]??w()},willUnload:!1,type:`enter`,complete:Promise.resolve()};H.forEach(t=>t(e))}Ot(J),W=!0}async function Pt({url:e,params:t,branch:n,errors:r,status:i,error:a,route:o,form:s}){let c=`never`;if(b&&(e.pathname===b||e.pathname===b+`/`))c=`always`;else for(let e of n)e?.slash!==void 0&&(c=e.slash);e.pathname=f(e.pathname,c),e.search=e.search;let l={type:`loaded`,state:{url:e,params:t,branch:n,error:a,route:o},props:{constructors:qe(n).map(e=>e.node.component),page:cn(k)}};s!==void 0&&(l.props.form=s);let u={},d=!k,p=0;for(let e=0;e<Math.max(n.length,U.branch.length);e+=1){let t=n[e],r=U.branch[e];t?.data!==r?.data&&(d=!0),t&&(u={...u,...t.data},d&&(l.props[`data_${p}`]=u),p+=1)}return(!U.url||e.href!==U.url.href||U.error!==a||s!==void 0&&s!==k.form||d)&&(l.props.page={error:a,params:t,route:{id:o?.id??null},state:{},status:i,url:new URL(e),form:s??null,data:d?u:k.data}),l}async function Ft({loader:e,parent:t,url:n,params:r,route:i,server_data_node:a}){let o=null,s=!0,c={dependencies:new Set,params:new Set,parent:!1,route:!1,url:!1,search_params:new Set},l=await e();if(l.universal?.load){function e(...e){for(let t of e){let{href:e}=new URL(t,n);c.dependencies.add(e)}}let u={tracing:{enabled:!1,root:et,current:et},route:new Proxy(i,{get:(e,t)=>(s&&(c.route=!0),e[t])}),params:new Proxy(r,{get:(e,t)=>(s&&c.params.add(t),e[t])}),data:a?.data??null,url:h(n,()=>{s&&(c.url=!0)},e=>{s&&c.search_params.add(e)},R.hash),async fetch(t,r){t instanceof Request&&(r={body:t.method===`GET`||t.method===`HEAD`?void 0:await t.blob(),cache:t.cache,credentials:t.credentials,headers:[...t.headers].length>0?t?.headers:void 0,integrity:t.integrity,keepalive:t.keepalive,method:t.method,mode:t.mode,redirect:t.redirect,referrer:t.referrer,referrerPolicy:t.referrerPolicy,signal:t.signal,...r});let{resolved:i,promise:a}=It(t,r,n);return s&&e(i.href),a},setHeaders:g,depends:e,parent(){return s&&(c.parent=!0),t()},untrack(e){s=!1;try{return e()}finally{s=!0}}};o=await l.universal.load.call(null,u)??null}return{node:l,loader:e,server:a,universal:l.universal?.load?{type:`data`,data:o,uses:c}:null,data:o??a?.data??null,slash:l.universal?.trailingSlash??a?.slash}}function It(e,t,n){let r=e instanceof Request?e.url:e,i=new URL(r,n);return i.origin===n.origin&&(r=i.href.slice(n.origin.length)),{resolved:i,promise:W?re(r,i.href,t):y(r,t)}}function Lt(e,t,n,r,i,a){if(xt)return!0;if(!i)return!1;if(i.parent&&e||i.route&&t||i.url&&n)return!0;for(let e of i.search_params)if(r.has(e))return!0;for(let e of i.params)if(a[e]!==U.params[e])return!0;for(let e of i.dependencies)if(mt.some(t=>t(new URL(e))))return!0;return!1}function Rt(e,t){return e?.type===`data`?e:e?.type===`skip`?t??null:null}function zt(e,t){if(!e)return new Set(t.searchParams.keys());let n=new Set([...e.searchParams.keys(),...t.searchParams.keys()]);for(let r of n){let i=e.searchParams.getAll(r),a=t.searchParams.getAll(r);i.every(e=>a.includes(e))&&a.every(e=>i.includes(e))&&n.delete(r)}return n}function Bt({error:e,url:t,route:n,params:r}){return{type:`loaded`,state:{error:e,url:t,route:n,params:r,branch:[]},props:{page:cn(k),constructors:[]}}}async function Vt({id:e,invalidating:t,url:n,params:r,route:i,preload:a}){if(z?.id===e)return X.delete(z.token),z.promise;let{errors:o,layouts:s,leaf:c}=i,d=[...s,c];o.forEach(e=>e?.().catch(g)),d.forEach(e=>e?.[1]().catch(g));let f=U.url?e!==qt(U.url):!1,p=U.route?i.id!==U.route.id:!1,ee=zt(U.url,n),m=!1,h=d.map(async(e,t)=>{if(!e)return;let a=U.branch[t];return e[1]===a?.loader&&!Lt(m,p,f,ee,a.universal?.uses,r)?a:(m=!0,Ft({loader:e[1],url:n,params:r,route:i,parent:async()=>{let e={};for(let n=0;n<t;n+=1)Object.assign(e,(await h[n])?.data);return e},server_data_node:Rt(e[0]?{type:`skip`}:null,e[0]?a?.server:void 0)}))});for(let e of h)e.catch(g);let _=[];for(let e=0;e<d.length;e+=1)if(d[e])try{_.push(await h[e])}catch(t){if(t instanceof u)return{type:`redirect`,location:t.location};if(a&&X.has(a))return Bt({error:await $(t,{params:r,url:n,route:{id:i.id}}),url:n,params:r,route:i});let s=Je(t),c;if(t instanceof l)c=t.body;else{if(await P.updated.check())return await ct(),await F(n);c=await $(t,{params:r,url:n,route:{id:i.id}})}let d=await Ht(e,_,o);return d?Pt({url:n,params:r,branch:_.slice(0,d.idx).concat(d.node),errors:o,status:s,error:c,route:i}):await Yt(n,{id:i.id},c,s)}else _.push(void 0);return Pt({url:n,params:r,branch:_,errors:o,status:200,error:null,route:i,form:t?void 0:null})}async function Ht(e,t,n){for(;e--;)if(n[e]){let r=e;for(;!t[r];)--r;try{return{idx:r+1,node:{node:await n[e](),loader:n[e],data:{},server:null,universal:null}}}catch{continue}}}async function Ut({status:e,error:t,url:n,route:r}){let i={};try{return Pt({url:n,params:i,branch:[await Ft({loader:ut,url:n,params:i,route:r,parent:()=>Promise.resolve({}),server_data_node:Rt(null)}),{node:await I(),loader:I,universal:null,server:null,data:null}],status:e,error:t,errors:[],route:null})}catch(t){if(t instanceof u){await At(new URL(t.location,location.href),{},0);return}let a=await R.get_error_template(),o=await $(t,{url:n,params:i,route:r}),s=a({status:e,message:String(o?.message??``).replace(/&/g,`&`).replace(/</g,`<`).replace(/>/g,`>`)}),c=new DOMParser().parseFromString(s,`text/html`);throw document.documentElement.replaceChild(document.adoptNode(c.head),document.head),document.documentElement.replaceChild(document.adoptNode(c.body),document.body),t}}async function Wt(e){let t=e.href;if(V.has(t))return V.get(t);let n;try{let r=(async()=>{let t=await R.hooks.reroute({url:new URL(e),fetch:async(t,n)=>It(t,n,e).promise})??e;if(typeof t==`string`){let n=new URL(e);R.hash?n.hash=t:n.pathname=t,t=n}return t})();V.set(t,r),n=await r}catch{V.delete(t);return}return n}async function Gt(e,t){if(e&&!D(e,b,R.hash)){let n=await Wt(e);if(!n)return;let r=Kt(n);for(let n of lt){let i=n.exec(r);if(i)return{id:qt(e),invalidating:t,route:n,params:ee(i),url:e}}}}function Kt(e){return p(R.hash?e.hash.replace(/^#/,``).replace(/[?#].+/,``):e.pathname.slice(b.length))||`/`}function qt(e){return(R.hash?e.hash.replace(/^#/,``):e.pathname)+e.search}function Jt({url:e,type:t,intent:n,delta:r,event:i,scroll:a}){let o=!1,s=sn(U,n,e,t,a??null);r!==void 0&&(s.navigation.delta=r),i!==void 0&&(s.navigation.event=i);let c={...s.navigation,cancel:()=>{o=!0,s.reject(Error(`navigation cancelled`))}};return G||gt.forEach(e=>e(c)),o?null:s}async function Z({type:n,url:r,popped:i,keepfocus:a,noscroll:o,replace_state:s,state:c={},redirect_count:l=0,nav_token:u={},accept:f=g,block:p=g,event:ee}){let m=Y;Y=u;let h=await Gt(r,!1),_=n===`enter`?sn(U,h,r,n):Jt({url:r,type:n,delta:i?.delta,intent:h,scroll:i?.scroll,event:ee});if(!_){p(),Y===u&&(Y=m);return}let te=q,ne=J;f(),G=!0,W&&_.navigation.type!==`enter`&&P.navigating.set(A.current=_.navigation);let v=h&&await Vt(h);if(!v){if(D(r,b,R.hash))return await F(r,s);v=await Yt(r,{id:null},await $(new d(404,`Not Found`,`Not found: ${r.pathname}`),{url:r,params:{},route:{id:null}}),404,s)}if(r=h?.url||r,Y!==u){_.reject(Error(`navigation aborted`));return}if(!v)return;if(v.type===`redirect`){if(l<20){await Z({type:n,url:new URL(v.location,r),popped:i,keepfocus:a,noscroll:o,replace_state:s,state:c,redirect_count:l+1,nav_token:u}),_.fulfil(void 0);return}if(v=await Ut({status:500,error:await $(Error(`Redirect loop`),{url:r,params:{},route:{id:null}}),url:r,route:{id:null}}),!v)return}else if(v.props.page.status>=400&&await P.updated.check())return await ct(),await F(r,s);if(Et(),ot(te),Dt(ne),v.props.page.url.pathname!==r.pathname&&(r.pathname=v.props.page.url.pathname),c=i?i.state:c,!i){let e=+!s,t={[x]:q+=e,[S]:J+=e,[Ce]:c};(s?history.replaceState:history.pushState).call(history,t,``,r),s||st(q,J)}let y=h&&z?.id===h.id?z.fork:null;z?.fork&&!y?B():(z=null,Q={element:void 0,href:void 0}),v.props.page.state=c;let re;if(W){let t=(await Promise.all(Array.from(_t,e=>e(_.navigation)))).filter(e=>typeof e==`function`);if(t.length>0){function e(){t.forEach(e=>{H.delete(e)})}t.push(e),t.forEach(e=>{H.add(e)})}let n=_.navigation.to;U={...v.state,nav:{params:n.params,route:n.route,url:n.url}},v.props.page&&(v.props.page.url=r),!a&&document.activeElement instanceof HTMLElement&&document.activeElement!==document.body&&document.activeElement.blur();let i=y&&await y;i?re=i.commit():(j=null,St.$set(v.props),j&&Object.assign(v.props.page,j),$e(v.props.page),re=e?.()),bt=!0}else await Nt(v,dt,!1);let{activeElement:ie}=document;if(await re,await t(),await t(),Y!==u){_.reject(Error(`navigation aborted`));return}v.props.page&&j&&Object.assign(v.props.page,j);let ae=null;if(yt){let e=i?i.scroll:o?w():null;e?scrollTo(e.x,e.y):(ae=r.hash&&document.getElementById(un(r)))?ae.scrollIntoView():scrollTo(0,0)}let oe=document.activeElement!==ie&&document.activeElement!==document.body;!a&&!oe&&on(r,!ae),yt=!0,G=!1,_.fulfil(void 0),_.navigation.to&&(_.navigation.to.scroll=w()),H.forEach(e=>e(_.navigation)),n===`popstate`&&Ot(J),P.navigating.set(A.current=null)}async function Yt(e,t,n,r,i){return e.origin===Te&&e.pathname===location.pathname&&!vt?await Ut({status:r,error:n,url:e,route:t}):await F(e,i)}var Q={element:void 0,href:void 0};function Xt(){let e,t;L.addEventListener(`mousemove`,t=>{let n=t.target;clearTimeout(e),e=setTimeout(()=>{i(n,C.hover)},20)});function n(e){e.defaultPrevented||i(e.composedPath()[0],C.tap)}L.addEventListener(`mousedown`,n),L.addEventListener(`touchstart`,n,{passive:!0});let r=new IntersectionObserver(e=>{for(let t of e)t.isIntersecting&&(Mt(new URL(t.target.href)),r.unobserve(t.target))},{threshold:0});async function i(e,n){let r=ke(e,L),i=r===Q.element&&r?.href===Q.href&&n>=t;if(!r||i)return;let{url:a,external:o,download:s}=Ae(r,b,R.hash);if(o||s)return;let c=E(r),l=a&&qt(U.url)===qt(a);if(!(c.reload||l)){if(n<=c.preload_data){Q={element:r,href:r.href},t=C.tap;let e=await Gt(a,!1);if(!e)return;jt(e)}else n<=c.preload_code&&(Q={element:r,href:r.href},t=n,Mt(a))}}function a(){r.disconnect();for(let e of L.querySelectorAll(`a`)){let{url:t,external:n,download:i}=Ae(e,b,R.hash);if(n||i)continue;let a=E(e);a.reload||(a.preload_code===C.viewport&&r.observe(e),a.preload_code===C.eager&&Mt(t))}}H.add(a),a()}function $(e,t){if(e instanceof l)return e.body;let n=Je(e),r=Ye(e);return R.hooks.handleError({error:e,event:t,status:n,message:r})??{message:r}}function Zt(e,t){nt(()=>(e.add(t),()=>{e.delete(t)}))}function Qt(e){Zt(_t,e)}function $t(e){if(typeof e==`function`)mt.push(e);else{let{href:t}=new URL(e,location.href);mt.push(e=>e.href===t)}}function en(e,t){let n={[x]:q,[S]:J,[we]:k.url.href,[Ce]:t};history.replaceState(n,``,Ee(e)),k.state=t,St.$set({page:it(()=>cn(k))})}function tn(){history.scrollRestoration=`manual`,addEventListener(`beforeunload`,e=>{let t=!1;if(kt(),!G){let e=sn(U,void 0,null,`leave`),n={...e.navigation,cancel:()=>{t=!0,e.reject(Error(`navigation cancelled`))}};gt.forEach(e=>e(n))}t?(e.preventDefault(),e.returnValue=``):history.scrollRestoration=`auto`}),addEventListener(`visibilitychange`,()=>{document.visibilityState===`hidden`&&kt()}),navigator.connection?.saveData||Xt(),L.addEventListener(`click`,async t=>{if(t.button||t.which!==1||t.metaKey||t.ctrlKey||t.shiftKey||t.altKey||t.defaultPrevented)return;let n=ke(t.composedPath()[0],L);if(!n)return;let{url:r,external:i,target:a,download:o}=Ae(n,b,R.hash);if(!r)return;if(a===`_parent`||a===`_top`){if(window.parent!==window)return}else if(a&&a!==`_self`)return;let s=E(n);if(!(n instanceof SVGAElement)&&r.protocol!==location.protocol&&r.protocol!==`https:`&&r.protocol!==`http:`||o)return;let[c,l]=(R.hash?r.hash.replace(/^#/,``):r.href).split(`#`),u=c===m(location);if(i||s.reload&&(!u||!l)){Jt({url:r,type:`link`,event:t})?G=!0:t.preventDefault();return}if(l!==void 0&&u){let[,i]=U.url.href.split(`#`);if(i===l){if(t.preventDefault(),l===``||l===`top`&&n.ownerDocument.getElementById(`top`)===null)scrollTo({top:0});else{let e=n.ownerDocument.getElementById(decodeURIComponent(l));e&&(e.scrollIntoView(),e.focus())}return}if(K=!0,ot(q),e(r),!s.replace_state)return;K=!1}t.preventDefault(),await new Promise(e=>{requestAnimationFrame(()=>{setTimeout(e,0)}),setTimeout(e,100)}),await Z({type:`link`,url:r,keepfocus:s.keepfocus,noscroll:s.noscroll,replace_state:s.replace_state??r.href===location.href,event:t})}),L.addEventListener(`submit`,e=>{if(e.defaultPrevented)return;let t=HTMLFormElement.prototype.cloneNode.call(e.target),n=e.submitter;if((n?.formTarget||t.target)===`_blank`||(n?.formMethod||t.method)!==`get`)return;let r=new URL(n?.hasAttribute(`formaction`)&&n?.formAction||t.action);if(D(r,b,!1))return;let i=e.target,a=E(i);if(a.reload)return;e.preventDefault(),e.stopPropagation();let o=new FormData(i,n);r.search=new URLSearchParams(o).toString(),Z({type:`form`,url:r,keepfocus:a.keepfocus,noscroll:a.noscroll,replace_state:a.replace_state??r.href===location.href,event:e})}),addEventListener(`popstate`,async t=>{if(!an){if(t.state?.[`sveltekit:history`]){let n=t.state[x];if(Y={},n===q)return;let r=M[n],i=t.state[`sveltekit:states`]??{},a=new URL(t.state[`sveltekit:pageurl`]??location.href),o=t.state[S],s=U.url?m(location)===m(U.url):!1;if(o===J&&(bt||s)){i!==k.state&&(k.state=i),e(a),M[q]=w(),r&&scrollTo(r.x,r.y),q=n;return}let c=n-q;await Z({type:`popstate`,url:a,popped:{state:i,scroll:r,delta:c},accept:()=>{q=n,J=o},block:()=>{history.go(-c)},nav_token:Y,event:t})}else K||(e(new URL(location.href)),R.hash&&location.reload())}}),addEventListener(`hashchange`,()=>{K&&(K=!1,history.replaceState({...history.state,[x]:++q,[S]:J},``,location.href))});for(let e of document.querySelectorAll(`link`))at.has(e.rel)&&(e.href=e.href);addEventListener(`pageshow`,e=>{e.persisted&&P.navigating.set(A.current=null)});function e(e){U.url=k.url=e,P.page.set(cn(k)),P.page.notify()}}async function nn(e,{status:t=200,error:n,node_ids:r,params:i,route:a,server_route:o,data:s,form:c}){vt=!0;let l=new URL(location.href),d;({params:i={},route:a={id:null}}=await Gt(l,!1)||{}),d=lt.find(({id:e})=>e===a.id);let f,p=!0;try{let e=r.map(async(t,n)=>{let r=s[n];return r?.uses&&(r.uses=rn(r.uses)),Ft({loader:R.nodes[t],url:l,params:i,route:a,parent:async()=>{let t={};for(let r=0;r<n;r+=1)Object.assign(t,(await e[r]).data);return t},server_data_node:Rt(r)})}),o=await Promise.all(e);if(d){let e=d.layouts;for(let t=0;t<e.length;t++)e[t]||o.splice(t,0,void 0)}f=await Pt({url:l,params:i,branch:o,status:t,error:n,errors:d?.errors,form:c,route:d??null})}catch(t){if(t instanceof u)return await F(new URL(t.location,location.href));f=await Ut({status:Je(t),error:await $(t,{url:l,params:i,route:a}),url:l,route:a}),e.textContent=``,p=!1}f&&(f.props.page&&(f.props.page.state={}),await Nt(f,e,p))}function rn(e){return{dependencies:new Set(e?.dependencies??[]),params:new Set(e?.params??[]),parent:!!e?.parent,route:!!e?.route,url:!!e?.url,search_params:new Set(e?.search_params??[])}}var an=!1;function on(e,t=!0){let n=document.querySelector(`[autofocus]`);if(n)n.focus();else{let n=un(e);if(n&&document.getElementById(n)){let{x:r,y:i}=w();setTimeout(()=>{let a=history.state;an=!0,location.replace(new URL(`#${n}`,location.href)),history.replaceState(a,``,e),t&&scrollTo(r,i),an=!1})}else{let e=document.body,t=e.getAttribute(`tabindex`);e.tabIndex=-1,e.focus({preventScroll:!0,focusVisible:!1}),t===null?e.removeAttribute(`tabindex`):e.setAttribute(`tabindex`,t)}let r=getSelection();if(r&&r.type!==`None`){let e=[];for(let t=0;t<r.rangeCount;t+=1)e.push(r.getRangeAt(t));setTimeout(()=>{if(r.rangeCount===e.length){for(let t=0;t<r.rangeCount;t+=1){let n=e[t],i=r.getRangeAt(t);if(n.commonAncestorContainer!==i.commonAncestorContainer||n.startContainer!==i.startContainer||n.endContainer!==i.endContainer||n.startOffset!==i.startOffset||n.endOffset!==i.endOffset)return}r.removeAllRanges()}})}}}function sn(e,t,n,r,i=null){let a,o,s=new Promise((e,t)=>{a=e,o=t});return s.catch(g),{navigation:{from:{params:e.params,route:{id:e.route?.id??null},url:e.url,scroll:w()},to:n&&{params:t?.params??null,route:{id:t?.route?.id??null},url:n,scroll:i},willUnload:!t,type:r,complete:s},fulfil:a,reject:o}}function cn(e){return{data:e.data,error:e.error,form:e.form,params:e.params,route:e.route,state:e.state,status:e.status,url:e.url}}function ln(e){let t=new URL(e);return t.hash=decodeURIComponent(e.hash),t}function un(e){let t;if(R.hash){let[,,n]=e.hash.split(`#`,3);t=n??``}else t=e.hash.slice(1);return decodeURIComponent(t)}export{k as a,ye as c,A as i,en as n,Pe as o,Tt as r,be as s,Qt as t};
|