fundus 0.29.0 → 0.29.1
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/build/client/_app/immutable/chunks/CE3cWlK6.js +1 -0
- package/build/client/_app/immutable/chunks/CE3cWlK6.js.br +0 -0
- package/build/client/_app/immutable/chunks/CE3cWlK6.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{kkVEh3_1.js → Cq3PJxJG.js} +1 -1
- package/build/client/_app/immutable/chunks/Cq3PJxJG.js.br +2 -0
- package/build/client/_app/immutable/chunks/Cq3PJxJG.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{BCmR1_e0.js → Wk7WcyQU.js} +1 -1
- package/build/client/_app/immutable/chunks/Wk7WcyQU.js.br +0 -0
- package/build/client/_app/immutable/chunks/Wk7WcyQU.js.gz +0 -0
- package/build/client/_app/immutable/entry/{app.DCXSqiQ1.js → app.Dit62aNJ.js} +2 -2
- package/build/client/_app/immutable/entry/app.Dit62aNJ.js.br +0 -0
- package/build/client/_app/immutable/entry/app.Dit62aNJ.js.gz +0 -0
- package/build/client/_app/immutable/entry/start.CCBu6ABN.js +1 -0
- package/build/client/_app/immutable/entry/start.CCBu6ABN.js.br +0 -0
- package/build/client/_app/immutable/entry/start.CCBu6ABN.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{0.CsqkK05g.js → 0.DnyKXqLr.js} +1 -1
- package/build/client/_app/immutable/nodes/0.DnyKXqLr.js.br +0 -0
- package/build/client/_app/immutable/nodes/0.DnyKXqLr.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{1.BVSXvtU9.js → 1.Cz-4S6LF.js} +1 -1
- package/build/client/_app/immutable/nodes/1.Cz-4S6LF.js.br +0 -0
- package/build/client/_app/immutable/nodes/1.Cz-4S6LF.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{2.BJEXWmrT.js → 2.C75-hsCY.js} +1 -1
- package/build/client/_app/immutable/nodes/2.C75-hsCY.js.br +0 -0
- package/build/client/_app/immutable/nodes/2.C75-hsCY.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{3.BDMmDyL1.js → 3.4pSddugU.js} +1 -1
- package/build/client/_app/immutable/nodes/3.4pSddugU.js.br +0 -0
- package/build/client/_app/immutable/nodes/3.4pSddugU.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{4.dd49_qQE.js → 4.KoQxJEWQ.js} +1 -1
- package/build/client/_app/immutable/nodes/4.KoQxJEWQ.js.br +0 -0
- package/build/client/_app/immutable/nodes/4.KoQxJEWQ.js.gz +0 -0
- package/build/client/_app/version.json +1 -1
- package/build/client/_app/version.json.br +0 -0
- package/build/client/_app/version.json.gz +0 -0
- package/build/handler.js +7 -7
- package/build/index.js +7 -7
- package/build/server/chunks/chunks/{context.js-DFZgDxCD.js → context.js-BR2IRl9z.js} +52 -24
- package/build/server/chunks/chunks/context.js-BR2IRl9z.js.map +1 -0
- package/build/server/chunks/chunks/{contract.js-DGZXpcNX.js → contract.js-DHeIVVv8.js} +44 -10
- package/build/server/chunks/chunks/contract.js-DHeIVVv8.js.map +1 -0
- package/build/server/chunks/chunks/{exports.js-BsVKSGJk.js → exports.js-CNZgoxR0.js} +2 -2
- package/build/server/chunks/chunks/{exports.js-BsVKSGJk.js.map → exports.js-CNZgoxR0.js.map} +1 -1
- package/build/server/chunks/chunks/{http.js-BQhjMaW9.js → http.js-dk5jbOFm.js} +2 -2
- package/build/server/chunks/chunks/{http.js-BQhjMaW9.js.map → http.js-dk5jbOFm.js.map} +1 -1
- package/build/server/chunks/chunks/{internal.js-DJGcNryj.js → internal.js-DlRiYJji.js} +3 -3
- package/build/server/chunks/chunks/{internal.js-DJGcNryj.js.map → internal.js-DlRiYJji.js.map} +1 -1
- package/build/server/chunks/chunks/internal2.js-BlXt2rfE.js.map +1 -1
- package/build/server/chunks/chunks/{raw-reconciliation2.js-CMpUvuMd.js → raw-reconciliation.js-Cco4r8lr.js} +51 -17
- package/build/server/chunks/chunks/raw-reconciliation.js-Cco4r8lr.js.map +1 -0
- package/build/server/chunks/chunks/{raw-reconciliation.js-D2sI2C-t.js → raw-reconciliation2.js-CuYSsYTP.js} +2 -2
- package/build/server/chunks/chunks/raw-reconciliation2.js-CuYSsYTP.js.map +1 -0
- package/build/server/chunks/chunks/{shared.js-BtmYg0tL.js → shared.js-C6qC0jnA.js} +2 -2
- package/build/server/chunks/chunks/{shared.js-BtmYg0tL.js.map → shared.js-C6qC0jnA.js.map} +1 -1
- package/build/server/chunks/chunks/{utils.js-CqXk0Ug6.js → utils.js-BZ32hXFI.js} +3 -3
- package/build/server/chunks/chunks/{utils.js-CqXk0Ug6.js.map → utils.js-BZ32hXFI.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/api/_...path_/{_server.ts.js-DKGD9Jk2.js → _server.ts.js-8jGLP2Aj.js} +4 -4
- package/build/server/chunks/entries/endpoints/api/_...path_/{_server.ts.js-DKGD9Jk2.js.map → _server.ts.js-8jGLP2Aj.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/api/assets/_id_/{_server.ts.js-C1UfF0EO.js → _server.ts.js-BOW9Ejim.js} +5 -5
- package/build/server/chunks/entries/endpoints/api/assets/_id_/{_server.ts.js-C1UfF0EO.js.map → _server.ts.js-BOW9Ejim.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/api/assets/_id_/raw/{_server.ts.js-DpASkk00.js → _server.ts.js-Clac8atJ.js} +5 -5
- package/build/server/chunks/entries/endpoints/api/assets/_id_/raw/{_server.ts.js-DpASkk00.js.map → _server.ts.js-Clac8atJ.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/api/assets/_id_/reimport/{_server.ts.js-C3jU2vC8.js → _server.ts.js-EdHTA-SO.js} +5 -5
- package/build/server/chunks/entries/endpoints/api/assets/_id_/reimport/{_server.ts.js-C3jU2vC8.js.map → _server.ts.js-EdHTA-SO.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/api/assets/_id_/retag/{_server.ts.js-B7OwufF3.js → _server.ts.js-ZBCRgRYi.js} +5 -5
- package/build/server/chunks/entries/endpoints/api/assets/_id_/retag/{_server.ts.js-B7OwufF3.js.map → _server.ts.js-ZBCRgRYi.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/api/assets/{_server.ts.js-COhg1nYk.js → _server.ts.js-DY_e5K6d.js} +5 -5
- package/build/server/chunks/entries/endpoints/api/assets/{_server.ts.js-COhg1nYk.js.map → _server.ts.js-DY_e5K6d.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/api/assets/delete/{_server.ts.js-DAEE17eM.js → _server.ts.js-Cl2jxJNi.js} +5 -5
- package/build/server/chunks/entries/endpoints/api/assets/delete/{_server.ts.js-DAEE17eM.js.map → _server.ts.js-Cl2jxJNi.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/api/assets/move/{_server.ts.js-BrZSS4gm.js → _server.ts.js-DrrZWUbd.js} +5 -5
- package/build/server/chunks/entries/endpoints/api/assets/move/{_server.ts.js-BrZSS4gm.js.map → _server.ts.js-DrrZWUbd.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/api/events/{_server.ts.js-Cfst-Brd.js → _server.ts.js-Bnw0HbEk.js} +5 -5
- package/build/server/chunks/entries/endpoints/api/events/{_server.ts.js-Cfst-Brd.js.map → _server.ts.js-Bnw0HbEk.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/api/folders/_path_/{_server.ts.js-aN_h2Ifo.js → _server.ts.js-NeVn2ap9.js} +5 -5
- package/build/server/chunks/entries/endpoints/api/folders/_path_/{_server.ts.js-aN_h2Ifo.js.map → _server.ts.js-NeVn2ap9.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/api/folders/{_server.ts.js-CX2A66ij.js → _server.ts.js-ENGDgoLy.js} +5 -5
- package/build/server/chunks/entries/endpoints/api/folders/{_server.ts.js-CX2A66ij.js.map → _server.ts.js-ENGDgoLy.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/api/imports/{_server.ts.js-CwTiaheP.js → _server.ts.js-BQVGCzBR.js} +5 -5
- package/build/server/chunks/entries/endpoints/api/imports/{_server.ts.js-CwTiaheP.js.map → _server.ts.js-BQVGCzBR.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/api/manifests/_name_/{_server.ts.js-fIbsr_2e.js → _server.ts.js-Pxver0Y-.js} +5 -5
- package/build/server/chunks/entries/endpoints/api/manifests/_name_/{_server.ts.js-fIbsr_2e.js.map → _server.ts.js-Pxver0Y-.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/api/manifests/{_server.ts.js-Dvo1bsLi.js → _server.ts.js-DYtiqzJq.js} +5 -5
- package/build/server/chunks/entries/endpoints/api/manifests/{_server.ts.js-Dvo1bsLi.js.map → _server.ts.js-DYtiqzJq.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/api/raw/adopt/{_server.ts.js-VLg1G3mN.js → _server.ts.js-lBgmEZHV.js} +5 -5
- package/build/server/chunks/entries/endpoints/api/raw/adopt/{_server.ts.js-VLg1G3mN.js.map → _server.ts.js-lBgmEZHV.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/api/raw/edited/accept/{_server.ts.js-DqctsOop.js → _server.ts.js-BJHyONFH.js} +5 -5
- package/build/server/chunks/entries/endpoints/api/raw/edited/accept/{_server.ts.js-DqctsOop.js.map → _server.ts.js-BJHyONFH.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/api/raw/edited/dismiss/{_server.ts.js-CoxSU5iO.js → _server.ts.js-Bm5XO80W.js} +5 -5
- package/build/server/chunks/entries/endpoints/api/raw/edited/dismiss/{_server.ts.js-CoxSU5iO.js.map → _server.ts.js-Bm5XO80W.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/api/reconcile/{_server.ts.js-wUxsLZdr.js → _server.ts.js-B7Z20kYf.js} +5 -5
- package/build/server/chunks/entries/endpoints/api/reconcile/{_server.ts.js-wUxsLZdr.js.map → _server.ts.js-B7Z20kYf.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/api/reveal/{_server.ts.js-BKsF0Oit.js → _server.ts.js-Cg-f37jc.js} +5 -5
- package/build/server/chunks/entries/endpoints/api/reveal/{_server.ts.js-BKsF0Oit.js.map → _server.ts.js-Cg-f37jc.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/api/state/{_server.ts.js-Dk9oOZwM.js → _server.ts.js-dIXZiq5l.js} +5 -5
- package/build/server/chunks/entries/endpoints/api/state/{_server.ts.js-Dk9oOZwM.js.map → _server.ts.js-dIXZiq5l.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/api/usage/{_server.ts.js-DxjNmmtL.js → _server.ts.js-CnTrS5pT.js} +5 -5
- package/build/server/chunks/entries/endpoints/api/usage/{_server.ts.js-DxjNmmtL.js.map → _server.ts.js-CnTrS5pT.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/files/_...path_/{_server.ts.js-DD0b38VV.js → _server.ts.js-B7TcFRuL.js} +4 -4
- package/build/server/chunks/entries/endpoints/files/_...path_/{_server.ts.js-DD0b38VV.js.map → _server.ts.js-B7TcFRuL.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/files/proxy/_...path_/{_server.ts.js-DId6F2i_.js → _server.ts.js-BkUQInqW.js} +5 -5
- package/build/server/chunks/entries/endpoints/files/proxy/_...path_/{_server.ts.js-DId6F2i_.js.map → _server.ts.js-BkUQInqW.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/files/raw/_...path_/{_server.ts.js-DKKkGoK2.js → _server.ts.js-CshyvqOq.js} +5 -5
- package/build/server/chunks/entries/endpoints/files/raw/_...path_/{_server.ts.js-DKKkGoK2.js.map → _server.ts.js-CshyvqOq.js.map} +1 -1
- package/build/server/chunks/entries/{hooks.server.js-B5Ctvorj.js → hooks.server.js-D4DECjz_.js} +6 -5
- package/build/server/chunks/entries/hooks.server.js-D4DECjz_.js.map +1 -0
- package/build/server/chunks/{handler-DwVfBx6r.js → handler-Cna54zf6.js} +5 -5
- package/build/server/chunks/{handler-DwVfBx6r.js.map → handler-Cna54zf6.js.map} +1 -1
- package/build/server/chunks/{index.js-DgPuPQJn.js → index.js-BnpHWDec.js} +5 -5
- package/build/server/chunks/{index.js-DgPuPQJn.js.map → index.js-BnpHWDec.js.map} +1 -1
- package/build/server/chunks/{manifest.js-B054EcAf.js → manifest.js-9WMEOpxH.js} +31 -31
- package/build/server/chunks/{manifest.js-B054EcAf.js.map → manifest.js-9WMEOpxH.js.map} +1 -1
- package/build/server/chunks/nodes/{0.js-DoHZTmnT.js → 0.js-C2b1a672.js} +2 -2
- package/build/server/chunks/nodes/{0.js-DoHZTmnT.js.map → 0.js-C2b1a672.js.map} +1 -1
- package/build/server/chunks/nodes/1.js-P3Ai28oj.js +7 -0
- package/build/server/chunks/nodes/{1.js-BcPlsloO.js.map → 1.js-P3Ai28oj.js.map} +1 -1
- package/build/server/chunks/nodes/{2.js-5qCXkvzl.js → 2.js-sM3j5BqB.js} +2 -2
- package/build/server/chunks/nodes/{2.js-5qCXkvzl.js.map → 2.js-sM3j5BqB.js.map} +1 -1
- package/build/server/chunks/nodes/3.js-G0jV-ymM.js +7 -0
- package/build/server/chunks/nodes/{3.js-D6fAMX1w.js.map → 3.js-G0jV-ymM.js.map} +1 -1
- package/build/server/chunks/nodes/{4.js-CGkeT0SQ.js → 4.js-BUTPrI45.js} +2 -2
- package/build/server/chunks/nodes/{4.js-CGkeT0SQ.js.map → 4.js-BUTPrI45.js.map} +1 -1
- package/dist/server/concurrency.d.ts +12 -0
- package/dist/server/concurrency.js +23 -0
- package/dist/server/image-duplicates.js +6 -4
- package/dist/server/operations.d.ts +7 -0
- package/dist/server/operations.js +53 -26
- package/dist/server/processing/processor.d.ts +29 -1
- package/dist/server/processing/processor.js +42 -5
- package/dist/server/raw-reconciliation.js +26 -10
- package/package.json +1 -1
- package/build/client/_app/immutable/chunks/BCmR1_e0.js.br +0 -0
- package/build/client/_app/immutable/chunks/BCmR1_e0.js.gz +0 -0
- package/build/client/_app/immutable/chunks/kkVEh3_1.js.br +0 -2
- package/build/client/_app/immutable/chunks/kkVEh3_1.js.gz +0 -0
- package/build/client/_app/immutable/chunks/wBLhaPea.js +0 -1
- package/build/client/_app/immutable/chunks/wBLhaPea.js.br +0 -0
- package/build/client/_app/immutable/chunks/wBLhaPea.js.gz +0 -0
- package/build/client/_app/immutable/entry/app.DCXSqiQ1.js.br +0 -0
- package/build/client/_app/immutable/entry/app.DCXSqiQ1.js.gz +0 -0
- package/build/client/_app/immutable/entry/start.BOUpxuMU.js +0 -1
- package/build/client/_app/immutable/entry/start.BOUpxuMU.js.br +0 -0
- package/build/client/_app/immutable/entry/start.BOUpxuMU.js.gz +0 -0
- package/build/client/_app/immutable/nodes/0.CsqkK05g.js.br +0 -0
- package/build/client/_app/immutable/nodes/0.CsqkK05g.js.gz +0 -0
- package/build/client/_app/immutable/nodes/1.BVSXvtU9.js.br +0 -2
- package/build/client/_app/immutable/nodes/1.BVSXvtU9.js.gz +0 -0
- package/build/client/_app/immutable/nodes/2.BJEXWmrT.js.br +0 -0
- package/build/client/_app/immutable/nodes/2.BJEXWmrT.js.gz +0 -0
- package/build/client/_app/immutable/nodes/3.BDMmDyL1.js.br +0 -0
- package/build/client/_app/immutable/nodes/3.BDMmDyL1.js.gz +0 -0
- package/build/client/_app/immutable/nodes/4.dd49_qQE.js.br +0 -0
- package/build/client/_app/immutable/nodes/4.dd49_qQE.js.gz +0 -0
- package/build/server/chunks/chunks/context.js-DFZgDxCD.js.map +0 -1
- package/build/server/chunks/chunks/contract.js-DGZXpcNX.js.map +0 -1
- package/build/server/chunks/chunks/raw-reconciliation.js-D2sI2C-t.js.map +0 -1
- package/build/server/chunks/chunks/raw-reconciliation2.js-CMpUvuMd.js.map +0 -1
- package/build/server/chunks/entries/hooks.server.js-B5Ctvorj.js.map +0 -1
- package/build/server/chunks/nodes/1.js-BcPlsloO.js +0 -7
- package/build/server/chunks/nodes/3.js-D6fAMX1w.js +0 -7
|
@@ -11,7 +11,7 @@ import { assetIdError, allDeliveredAssetIds, canonicalizeParameters, collectAllR
|
|
|
11
11
|
import { LibraryStore } from './library-store.js';
|
|
12
12
|
import { generateManifestModules, locateGeneratedAssetDeclaration, manifestModuleFileName } from './codegen.js';
|
|
13
13
|
import { descriptorsByType, serverPluginForType, serverPluginsByType } from './plugins.js';
|
|
14
|
-
import { processAssets, readCurrentProxy } from './processing/processor.js';
|
|
14
|
+
import { processAssets, ProxyInfoCache, readCurrentProxy } from './processing/processor.js';
|
|
15
15
|
import { encodeRelativePathForUrl } from './folder-filesystem.js';
|
|
16
16
|
import { classifyRawDirectory, verifyStableRawFile } from './raw-reconciliation.js';
|
|
17
17
|
import { rawSafetyIssues } from './raw-safety.js';
|
|
@@ -19,6 +19,7 @@ import { serverImporters } from './importers.js';
|
|
|
19
19
|
import { SourceImportError } from './importers/contract.js';
|
|
20
20
|
import { validateFigmaSourceParameters } from './importers/figma.js';
|
|
21
21
|
import { currentGitBranch, gitAssetChanges } from './git.js';
|
|
22
|
+
import { IO_CONCURRENCY, mapConcurrent } from './concurrency.js';
|
|
22
23
|
import { FundusUsageAnalyzer, usageSnapshotRevision } from './usage.js';
|
|
23
24
|
import { ImageDuplicateDetector } from './image-duplicates.js';
|
|
24
25
|
/**
|
|
@@ -71,6 +72,7 @@ export class FundusOperations {
|
|
|
71
72
|
#importers;
|
|
72
73
|
#usageAnalyzer;
|
|
73
74
|
#duplicateDetector = new ImageDuplicateDetector();
|
|
75
|
+
#proxyInfoCache = new ProxyInfoCache();
|
|
74
76
|
#operationQueue = Promise.resolve();
|
|
75
77
|
#pipelineQueue = Promise.resolve();
|
|
76
78
|
constructor(config, registry = serverPluginsByType, importerRegistry = serverImporters) {
|
|
@@ -180,6 +182,20 @@ export class FundusOperations {
|
|
|
180
182
|
const classification = await this.#classifyRawDirectory(library);
|
|
181
183
|
return this.#snapshotState(library, classification);
|
|
182
184
|
}
|
|
185
|
+
/**
|
|
186
|
+
* Fill the image-fingerprint and proxy-probe caches without scanning raws or
|
|
187
|
+
* joining the operation queue, so an early editor reconcile shares this
|
|
188
|
+
* in-flight work instead of waiting behind it. Both caches are keyed by
|
|
189
|
+
* content, so a concurrent mutation can only make an entry unused.
|
|
190
|
+
*/
|
|
191
|
+
async warmCaches() {
|
|
192
|
+
const library = await this.#store.read();
|
|
193
|
+
const delivered = allDeliveredAssetIds(computeLibraryMembership(library, collectAllReferences(library, descriptorsByType(this.#registry))));
|
|
194
|
+
await Promise.all([
|
|
195
|
+
this.#duplicateDetector.find(library, this.#config.rawDir),
|
|
196
|
+
mapConcurrent([...delivered].sort(compareCodeUnits), IO_CONCURRENCY, (assetId) => this.#proxyState(assetId, library.assets[assetId], delivered))
|
|
197
|
+
]);
|
|
198
|
+
}
|
|
183
199
|
/** Reconcile only changes that are safe without a user decision: unique moves and deletions. */
|
|
184
200
|
reconcileRawState() {
|
|
185
201
|
return this.#enqueueOperation(async () => {
|
|
@@ -921,15 +937,42 @@ export class FundusOperations {
|
|
|
921
937
|
state: await this.#snapshotState(latestLibrary, latestClassification, pipelineIssues)
|
|
922
938
|
};
|
|
923
939
|
}
|
|
940
|
+
async #proxyState(assetId, record, delivered) {
|
|
941
|
+
if (!delivered.has(assetId))
|
|
942
|
+
return { proxy: null };
|
|
943
|
+
try {
|
|
944
|
+
const currentProxy = await readCurrentProxy(assetId, record, this.#config, this.#registry, this.#proxyInfoCache);
|
|
945
|
+
if (!currentProxy) {
|
|
946
|
+
return {
|
|
947
|
+
proxy: null,
|
|
948
|
+
warning: 'Proxy is stale or missing — it will be (re)processed on the next save.'
|
|
949
|
+
};
|
|
950
|
+
}
|
|
951
|
+
return {
|
|
952
|
+
proxy: {
|
|
953
|
+
url: `/files/proxy/${encodeRelativePathForUrl(currentProxy.relativePath)}`,
|
|
954
|
+
upToDate: true,
|
|
955
|
+
...currentProxy
|
|
956
|
+
}
|
|
957
|
+
};
|
|
958
|
+
}
|
|
959
|
+
catch (cause) {
|
|
960
|
+
return { proxy: null, warning: cause instanceof Error ? cause.message : String(cause) };
|
|
961
|
+
}
|
|
962
|
+
}
|
|
924
963
|
async #buildState(library, issues, classification) {
|
|
925
|
-
const [gitBranch, changedGitAssets] = await Promise.all([
|
|
926
|
-
currentGitBranch(this.#config.projectRoot),
|
|
927
|
-
gitAssetChanges(this.#config.projectRoot, this.#config.library, library)
|
|
928
|
-
]);
|
|
929
964
|
const referencesByAsset = collectAllReferences(library, descriptorsByType(this.#registry));
|
|
930
|
-
const duplicatesByAsset = await this.#duplicateDetector.find(library, this.#config.rawDir);
|
|
931
965
|
const membershipByManifest = computeLibraryMembership(library, referencesByAsset);
|
|
932
966
|
const delivered = allDeliveredAssetIds(membershipByManifest);
|
|
967
|
+
const assetIds = Object.keys(library.assets).sort(compareCodeUnits);
|
|
968
|
+
// Independent I/O-bound reads; run together so large libraries load in parallel.
|
|
969
|
+
const [gitBranch, changedGitAssets, duplicatesByAsset, proxies] = await Promise.all([
|
|
970
|
+
currentGitBranch(this.#config.projectRoot),
|
|
971
|
+
gitAssetChanges(this.#config.projectRoot, this.#config.library, library),
|
|
972
|
+
this.#duplicateDetector.find(library, this.#config.rawDir),
|
|
973
|
+
mapConcurrent(assetIds, IO_CONCURRENCY, (assetId) => this.#proxyState(assetId, library.assets[assetId], delivered))
|
|
974
|
+
]);
|
|
975
|
+
this.#proxyInfoCache.retain(delivered);
|
|
933
976
|
// Per asset: the manifests it is a passive member of, with attribution.
|
|
934
977
|
const passiveManifestsByAsset = new Map();
|
|
935
978
|
for (const manifestName of Object.keys(library.manifests).sort(compareCodeUnits)) {
|
|
@@ -954,7 +997,7 @@ export class FundusOperations {
|
|
|
954
997
|
requiredByAsset.set(dependency.id, [...dependency.sources]);
|
|
955
998
|
}
|
|
956
999
|
const assets = [];
|
|
957
|
-
for (const assetId of
|
|
1000
|
+
for (const [index, assetId] of assetIds.entries()) {
|
|
958
1001
|
const record = library.assets[assetId];
|
|
959
1002
|
const warnings = [];
|
|
960
1003
|
for (const issue of issues) {
|
|
@@ -971,25 +1014,9 @@ export class FundusOperations {
|
|
|
971
1014
|
if (record.importSource && !this.#importers.has(record.importSource.importer)) {
|
|
972
1015
|
warnings.push(`Importer "${record.importSource.importer}" is unavailable; the local raw file remains usable.`);
|
|
973
1016
|
}
|
|
974
|
-
|
|
975
|
-
if (
|
|
976
|
-
|
|
977
|
-
const currentProxy = await readCurrentProxy(assetId, record, this.#config, this.#registry);
|
|
978
|
-
if (currentProxy) {
|
|
979
|
-
proxy = {
|
|
980
|
-
url: `/files/proxy/${encodeRelativePathForUrl(currentProxy.relativePath)}`,
|
|
981
|
-
upToDate: true,
|
|
982
|
-
...currentProxy
|
|
983
|
-
};
|
|
984
|
-
}
|
|
985
|
-
else {
|
|
986
|
-
warnings.push('Proxy is stale or missing — it will be (re)processed on the next save.');
|
|
987
|
-
}
|
|
988
|
-
}
|
|
989
|
-
catch (cause) {
|
|
990
|
-
warnings.push(cause instanceof Error ? cause.message : String(cause));
|
|
991
|
-
}
|
|
992
|
-
}
|
|
1017
|
+
const { proxy, warning: proxyWarning } = proxies[index];
|
|
1018
|
+
if (proxyWarning)
|
|
1019
|
+
warnings.push(proxyWarning);
|
|
993
1020
|
assets.push({
|
|
994
1021
|
id: assetId,
|
|
995
1022
|
type: record.type,
|
|
@@ -1,3 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The processing pipeline: every delivered asset gets exactly one
|
|
3
|
+
* proxy named `<assetId>.<jobHash>.<extension>`. Delivered = explicit or
|
|
4
|
+
* passive member of ≥ 1 manifest (codegen inlines referenced
|
|
5
|
+
* entries, so a passive member's proxy must exist even when the asset is in
|
|
6
|
+
* no manifest itself). Because the name is computable without running the job,
|
|
7
|
+
* staleness is a name check: expected name exists → up to date, else →
|
|
8
|
+
* process. Afterwards, files in the proxy directory that no asset expects are
|
|
9
|
+
* pruned.
|
|
10
|
+
*
|
|
11
|
+
* Type-agnostic: every per-type decision (preset resolution, extension, the
|
|
12
|
+
* sharp/ffmpeg step, proxy probing) lives on the server plugins; this module
|
|
13
|
+
* only consults the registry — which it takes as a parameter, so tests can
|
|
14
|
+
* drive the pipeline with fixture asset types.
|
|
15
|
+
*/
|
|
16
|
+
import { type Stats } from 'node:fs';
|
|
1
17
|
import { type AssetId, type AssetRecord, type Library } from '../../core/index.js';
|
|
2
18
|
import type { ResolvedFundusConfig } from '../config-loader.js';
|
|
3
19
|
import type { AssetProxyInfo, ProxyOutputInfo, ServerPluginRegistry } from '../plugins/contract.js';
|
|
@@ -35,8 +51,20 @@ export declare function expectedProxyRelativePath(assetId: string, record: Asset
|
|
|
35
51
|
* strategy: image-backed proxies via sharp, media proxies via ffprobe.
|
|
36
52
|
*/
|
|
37
53
|
export declare function readProxyOutputInfo(record: AssetRecord, proxyPath: string, config: ResolvedFundusConfig, registry?: ServerPluginRegistry): Promise<ProxyOutputInfo>;
|
|
54
|
+
/**
|
|
55
|
+
* Probed proxy output info, reused across editor snapshots so unchanged proxies
|
|
56
|
+
* skip sharp and ffprobe. Proxy names are content-addressed, so an entry stays
|
|
57
|
+
* valid while the proxy and the raw source handed to the probe keep their stat
|
|
58
|
+
* identity. In-flight probes are shared, so concurrent readers never probe twice.
|
|
59
|
+
*/
|
|
60
|
+
export declare class ProxyInfoCache {
|
|
61
|
+
#private;
|
|
62
|
+
read(assetId: AssetId, proxyPath: string, proxyStat: Stats, rawPath: string, probe: () => Promise<ProxyOutputInfo>): Promise<ProxyOutputInfo>;
|
|
63
|
+
/** Forget assets that no longer exist or are no longer delivered. */
|
|
64
|
+
retain(assetIds: ReadonlySet<AssetId>): void;
|
|
65
|
+
}
|
|
38
66
|
/** Read one asset's current proxy projection, or null when its expected file is absent. */
|
|
39
|
-
export declare function readCurrentProxy(assetId: string, record: AssetRecord, config: ResolvedFundusConfig, registry?: ServerPluginRegistry): Promise<AssetProxyInfo | null>;
|
|
67
|
+
export declare function readCurrentProxy(assetId: string, record: AssetRecord, config: ResolvedFundusConfig, registry?: ServerPluginRegistry, cache?: ProxyInfoCache): Promise<AssetProxyInfo | null>;
|
|
40
68
|
/**
|
|
41
69
|
* The delivered set: every explicit or passive member of ≥ 1 manifest —
|
|
42
70
|
* derived by the shared membership computation. Assets outside
|
|
@@ -65,17 +65,54 @@ export function expectedProxyRelativePath(assetId, record, config, registry = se
|
|
|
65
65
|
export async function readProxyOutputInfo(record, proxyPath, config, registry = serverPluginsByType) {
|
|
66
66
|
return serverPluginForType(record.type, registry).readProxyInfo(proxyPath, config, join(config.rawDir, record.raw));
|
|
67
67
|
}
|
|
68
|
+
function statIdentity(value) {
|
|
69
|
+
return `${value.dev}:${value.ino}:${value.size}:${value.mtimeMs}:${value.ctimeMs}`;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Probed proxy output info, reused across editor snapshots so unchanged proxies
|
|
73
|
+
* skip sharp and ffprobe. Proxy names are content-addressed, so an entry stays
|
|
74
|
+
* valid while the proxy and the raw source handed to the probe keep their stat
|
|
75
|
+
* identity. In-flight probes are shared, so concurrent readers never probe twice.
|
|
76
|
+
*/
|
|
77
|
+
export class ProxyInfoCache {
|
|
78
|
+
#entries = new Map();
|
|
79
|
+
async read(assetId, proxyPath, proxyStat, rawPath, probe) {
|
|
80
|
+
const rawIdentity = await stat(rawPath).then(statIdentity, () => 'missing');
|
|
81
|
+
const identity = `${proxyPath}|${statIdentity(proxyStat)}|${rawIdentity}`;
|
|
82
|
+
const cached = this.#entries.get(assetId);
|
|
83
|
+
if (cached?.identity === identity)
|
|
84
|
+
return cached.info;
|
|
85
|
+
const entry = { identity, info: probe() };
|
|
86
|
+
this.#entries.set(assetId, entry);
|
|
87
|
+
try {
|
|
88
|
+
return await entry.info;
|
|
89
|
+
}
|
|
90
|
+
catch (cause) {
|
|
91
|
+
if (this.#entries.get(assetId) === entry)
|
|
92
|
+
this.#entries.delete(assetId);
|
|
93
|
+
throw cause;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
/** Forget assets that no longer exist or are no longer delivered. */
|
|
97
|
+
retain(assetIds) {
|
|
98
|
+
for (const assetId of this.#entries.keys()) {
|
|
99
|
+
if (!assetIds.has(assetId))
|
|
100
|
+
this.#entries.delete(assetId);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
}
|
|
68
104
|
/** Read one asset's current proxy projection, or null when its expected file is absent. */
|
|
69
|
-
export async function readCurrentProxy(assetId, record, config, registry = serverPluginsByType) {
|
|
105
|
+
export async function readCurrentProxy(assetId, record, config, registry = serverPluginsByType, cache) {
|
|
70
106
|
const fileName = expectedProxyFileName(assetId, record, config, registry);
|
|
71
107
|
const relativePath = expectedProxyRelativePath(assetId, record, config, registry);
|
|
72
108
|
const proxyPath = join(config.proxyDir, relativePath);
|
|
73
109
|
if (!existsSync(proxyPath))
|
|
74
110
|
return null;
|
|
75
|
-
const
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
111
|
+
const proxyStat = await stat(proxyPath);
|
|
112
|
+
const probe = () => readProxyOutputInfo(record, proxyPath, config, registry);
|
|
113
|
+
const outputInfo = cache
|
|
114
|
+
? await cache.read(assetId, proxyPath, proxyStat, join(config.rawDir, record.raw), probe)
|
|
115
|
+
: await probe();
|
|
79
116
|
return { assetId, fileName, relativePath, ...outputInfo, fileSize: proxyStat.size };
|
|
80
117
|
}
|
|
81
118
|
/**
|
|
@@ -3,6 +3,7 @@ import { constants } from 'node:fs';
|
|
|
3
3
|
import { lstat, open, readdir } from 'node:fs/promises';
|
|
4
4
|
import { join } from 'node:path';
|
|
5
5
|
import { compareCodeUnits, folderPathError, isFundusTransactionName, portableRawPathKey, rawFilePathError } from '../core/index.js';
|
|
6
|
+
import { IO_CONCURRENCY, mapConcurrent } from './concurrency.js';
|
|
6
7
|
function objectIdentity(value) {
|
|
7
8
|
return `${value.dev}:${value.ino}:${value.mode}`;
|
|
8
9
|
}
|
|
@@ -58,6 +59,8 @@ export async function scanRawDirectory(rawDir, includeFile = () => true) {
|
|
|
58
59
|
const occupiedPaths = new Set();
|
|
59
60
|
const entryKinds = new Map();
|
|
60
61
|
const ignoredRegularPaths = [];
|
|
62
|
+
const pendingHashes = [];
|
|
63
|
+
const visitedDirectories = [];
|
|
61
64
|
let complete = true;
|
|
62
65
|
function markIncomplete(path, reason) {
|
|
63
66
|
complete = false;
|
|
@@ -112,15 +115,7 @@ export async function scanRawDirectory(rawDir, includeFile = () => true) {
|
|
|
112
115
|
blockers.push({ path, reason: problem });
|
|
113
116
|
continue;
|
|
114
117
|
}
|
|
115
|
-
|
|
116
|
-
files.push({ path, hash: await stableRawFileHash(join(rawDir, path)) });
|
|
117
|
-
}
|
|
118
|
-
catch (cause) {
|
|
119
|
-
blockers.push({
|
|
120
|
-
path,
|
|
121
|
-
reason: `Could not obtain a stable file hash: ${cause instanceof Error ? cause.message : String(cause)}`
|
|
122
|
-
});
|
|
123
|
-
}
|
|
118
|
+
pendingHashes.push(path);
|
|
124
119
|
continue;
|
|
125
120
|
}
|
|
126
121
|
const kind = entry.isSymbolicLink() ? 'symlink' : 'special';
|
|
@@ -128,6 +123,28 @@ export async function scanRawDirectory(rawDir, includeFile = () => true) {
|
|
|
128
123
|
entryKinds.set(path, kind);
|
|
129
124
|
blockers.push({ path, reason: 'Symlinks and special files are not supported.' });
|
|
130
125
|
}
|
|
126
|
+
visitedDirectories.push({ folder, absolutePath, before });
|
|
127
|
+
}
|
|
128
|
+
await visit('');
|
|
129
|
+
// Hashing dominates the scan, so it runs concurrently once the tree is known.
|
|
130
|
+
// Every hash verifies its own file, and directory identities are re-checked
|
|
131
|
+
// only afterwards so that check still spans the whole scan.
|
|
132
|
+
const hashes = await mapConcurrent(pendingHashes, IO_CONCURRENCY, async (path) => {
|
|
133
|
+
try {
|
|
134
|
+
return { hash: await stableRawFileHash(join(rawDir, path)) };
|
|
135
|
+
}
|
|
136
|
+
catch (cause) {
|
|
137
|
+
return { error: cause instanceof Error ? cause.message : String(cause) };
|
|
138
|
+
}
|
|
139
|
+
});
|
|
140
|
+
pendingHashes.forEach((path, index) => {
|
|
141
|
+
const result = hashes[index];
|
|
142
|
+
if (result.hash !== undefined)
|
|
143
|
+
files.push({ path, hash: result.hash });
|
|
144
|
+
else
|
|
145
|
+
blockers.push({ path, reason: `Could not obtain a stable file hash: ${result.error}` });
|
|
146
|
+
});
|
|
147
|
+
for (const { folder, absolutePath, before } of visitedDirectories) {
|
|
131
148
|
try {
|
|
132
149
|
const after = await lstat(absolutePath, { bigint: true });
|
|
133
150
|
if (!after.isDirectory() || objectIdentity(before) !== objectIdentity(after)) {
|
|
@@ -138,7 +155,6 @@ export async function scanRawDirectory(rawDir, includeFile = () => true) {
|
|
|
138
155
|
markIncomplete(folder, `${folder === '' ? 'Raw directory' : `Directory "${folder}"`} changed during traversal: ${cause instanceof Error ? cause.message : String(cause)}`);
|
|
139
156
|
}
|
|
140
157
|
}
|
|
141
|
-
await visit('');
|
|
142
158
|
const collisions = new Map();
|
|
143
159
|
for (const path of [...occupiedPaths].sort(compareCodeUnits)) {
|
|
144
160
|
const key = portableRawPathKey(path);
|
package/package.json
CHANGED
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{H as e,U as t,V as n,it as r,nt as i,r as a,t as o,tt as s}from"./DLEDBLL1.js";var c=class{constructor(e,t){this.status=e,typeof t==`string`?this.body={message:t}:t?this.body=t:this.body={message:`Error: ${e}`}}toString(){return JSON.stringify(this.body)}},l=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}},u=class extends Error{constructor(e,t,n){super(n),this.status=e,this.text=t}};new URL(`sveltekit-internal://`);function d(e,t){return e===`/`||t===`ignore`?e:t===`never`?e.endsWith(`/`)?e.slice(0,-1):e:t===`always`&&!e.endsWith(`/`)?e+`/`:e}function f(e){return e.split(`%25`).map(decodeURI).join(`%25`)}function p(e){for(let t in e)e[t]=decodeURIComponent(e[t]);return e}function m({href:e}){return e.split(`#`)[0]}function h(){}function ee(...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 g(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 _=window.fetch;window.fetch=(e,t)=>((e instanceof Request?e.method:t?.method||`GET`)!==`GET`&&v.delete(b(e)),_(e,t));var v=new Map;function te(e,t){let n=b(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=g(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 y(e,t,n){if(v.size>0){let t=b(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 b(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="${ee(...e)}"]`}return n}var ne=/^(\[)?(\.\.\.)?(\w+)(?:=(\w+))?(\])?$/,re=/^\/\((?:[^)]+)\)$/;function x(e){let t=[];return{pattern:e===`/`||re.test(e)?/^\/$/:RegExp(`^${ae(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 se(String.fromCharCode(parseInt(e.slice(2),16)));if(e.startsWith(`u+`))return se(String.fromCharCode(...e.slice(2).split(`-`).map(e=>parseInt(e,16))));let[,r,a,o,s]=ne.exec(e);return t.push({name:o,matcher:s,optional:!!r,rest:!!a,chained:a?n===1&&i[0]===``:!1}),a?`([^]*?)`:r?`([^/]*)?`:`([^/]+?)`}return se(e)}).join(``)}).join(``)}/?$`),params:t}}function ie(e){return e!==``&&!/^\([^)]+\)$/.test(e)}function ae(e){return e.slice(1).split(`/`).filter(ie)}function oe(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 se(e){return e.normalize().replace(/[[\]]/g,`\\$&`).replace(/%/g,`%25`).replace(/\//g,`%2[Ff]`).replace(/\?/g,`%3[Ff]`).replace(/#/g,`%23`).replace(/[.*+?^${}()|\\]/g,`\\$&`)}var ce=/\[(\[)?(\.\.\.)?(\w+?)(?:=(\w+))?\]\]?/g;function le(e,t){let n=ae(e),r=e!=`/`&&e.endsWith(`/`);return`/`+n.map(n=>n.replace(ce,(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 ue({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}=x(t),u={id:t,exec:e=>{let t=c.exec(e);if(t)return oe(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 de(e,t=JSON.parse){try{return t(sessionStorage[e])}catch{}}function fe(e,t,n=JSON.stringify){let r=n(t);try{sessionStorage[e]=r}catch{}}var S=globalThis.__sveltekit_191oeer?.base??``,pe=globalThis.__sveltekit_191oeer?.assets??S??``,me=``;function he(...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 S+me+le(e[0],e[1])}var ge=`1790767052989`,_e=`sveltekit:snapshot`,ve=`sveltekit:scroll`,ye=`sveltekit:states`,C=`sveltekit:history`,w=`sveltekit:navigation`,T={tap:1,hover:2,viewport:3,eager:4,off:-1,false:-1},E=location.origin;function be(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 D(){return{x:pageXOffset,y:pageYOffset}}function O(e,t){return e.getAttribute(`data-sveltekit-${t}`)}var xe={...T,"":T.hover};function Se(e){let t=e.assignedSlot??e.parentNode;return t?.nodeType===11&&(t=t.host),t}function Ce(e,t){for(;e&&e!==t;){if(e.nodeName.toUpperCase()===`A`&&e.hasAttribute(`href`))return e;e=Se(e)}}function we(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||A(r,t,n)||(e.getAttribute(`rel`)||``).split(/\s+/).includes(`external`),o=r?.origin===E&&e.hasAttribute(`download`);return{url:r,external:a,target:i,download:o}}function k(e){let t=null,n=null,r=null,i=null,a=null,o=null,s=e;for(;s&&s!==document.documentElement;)r===null&&(r=O(s,`preload-code`)),i===null&&(i=O(s,`preload-data`)),t===null&&(t=O(s,`keepfocus`)),n===null&&(n=O(s,`noscroll`)),a===null&&(a=O(s,`reload`)),o===null&&(o=O(s,`replacestate`)),s=Se(s);function c(e){switch(e){case``:case`true`:return!0;case`off`:case`false`:return!1;default:return}}return{preload_code:xe[r??`off`],preload_data:xe[i??`off`],keepfocus:c(t),noscroll:c(n),reload:c(a),replace_state:c(o)}}function Te(e){let t=r(e),n=!0;function i(){n=!0,t.update(e=>e)}function a(e){n=!1,t.set(e)}function o(e){let r;return t.subscribe(t=>{(r===void 0||n&&t!==r)&&e(r=t)})}return{notify:i,set:a,subscribe:o}}var Ee={v:h};function De(){let{set:e,subscribe:t}=r(!1);async function n(){clearTimeout(void 0);try{let t=await fetch(`${pe}/_app/version.json`,{headers:{pragma:`no-cache`,"cache-control":`no-cache`}});if(!t.ok)return!1;let n=(await t.json()).version!==ge;return n&&(e(!0),Ee.v(),clearTimeout(void 0)),n}catch{return!1}}return{subscribe:t,check:n}}function A(e,t,n){return e.origin!==E||!e.pathname.startsWith(t)?!0:n?e.pathname!==location.pathname:!1}function Oe(e){}var ke=new Set([`load`,`prerender`,`csr`,`ssr`,`trailingSlash`,`config`]);[...ke],[...new Set([...ke])];function Ae(e){return e.filter(e=>e!=null)}function j(e,t){return e+`/`+t}function je(e){return e instanceof c||e instanceof u?e.status:500}function Me(e){return e instanceof u?e.text:`Internal Error`}var M,N,P,Ne=a.toString().includes(`$$`)||/function \w+\(\) \{\}/.test(a.toString()),Pe=`a:`;Ne?(M={data:{},form:null,error:null,params:{},route:{id:null},state:{},status:-1,url:new URL(Pe)},N={current:null},P={current:!1}):(M=new class{#e=i({});get data(){return n(this.#e)}set data(e){s(this.#e,e)}#t=i(null);get form(){return n(this.#t)}set form(e){s(this.#t,e)}#n=i(null);get error(){return n(this.#n)}set error(e){s(this.#n,e)}#r=i({});get params(){return n(this.#r)}set params(e){s(this.#r,e)}#i=i({id:null});get route(){return n(this.#i)}set route(e){s(this.#i,e)}#a=i({});get state(){return n(this.#a)}set state(e){s(this.#a,e)}#o=i(-1);get status(){return n(this.#o)}set status(e){s(this.#o,e)}#s=i(new URL(Pe));get url(){return n(this.#s)}set url(e){s(this.#s,e)}},N=new class{#e=i(null);get current(){return n(this.#e)}set current(e){s(this.#e,e)}},P=new class{#e=i(!1);get current(){return n(this.#e)}set current(e){s(this.#e,e)}},Ee.v=()=>P.current=!0);function Fe(e){Object.assign(M,e)}var{onMount:Ie,tick:Le}=o,Re=new Set([`icon`,`shortcut icon`,`apple-touch-icon`]),F=null,I=de(`sveltekit:scroll`)??{},L=de(`sveltekit:snapshot`)??{},R={url:Te({}),page:Te({}),navigating:r(null),updated:De()};function ze(e){I[e]=D()}function Be(e,t){let n=e+1;for(;I[n];)delete I[n],n+=1;for(n=t+1;L[n];)delete L[n],n+=1}function z(e,t=!1){return t?location.replace(e.href):location.href=e.href,new Promise(h)}async function Ve(){if(`serviceWorker`in navigator){let e=await navigator.serviceWorker.getRegistration(S||`/`);e&&await e.update()}}var He,Ue,We,B,Ge,V,Ke={},qe={},Je=[],Ye=[],H=null;function Xe(){H?.fork?.then(e=>e?.discard()),H=null,Q={element:void 0,href:void 0}}var Ze=new Map,Qe=new Set,$e=new Set,U=new Set,W={branch:[],error:null,url:null,nav:null},et=!1,tt=!1,nt=!0,G=!1,K=!1,rt=!1,it=!1,at,q,J,Y,ot=new Set,st=new Map,ct=new Map;async function lt(e,t,n){if(globalThis.__sveltekit_191oeer.data){let{q:e={},p:t={},l:n={},f:r={}}=globalThis.__sveltekit_191oeer.data;for(let t in e)Ke[t]=e[t];for(let e in n)Ke[e]=n[e];for(let e in r)Ke[e]=r[e];for(let e in t)qe[e]=t[e]}document.URL!==location.href&&(location.href=location.href),V=e,await e.hooks.init?.(),He=ue(e),B=document.documentElement,Ge=t,Ue=e.nodes[0],We=e.nodes[1],Ue(),We(),q=history.state?.[C],J=history.state?.[w],q||(q=J=Date.now(),history.replaceState({...history.state,[C]:q,[w]:J},``));let r=I[q];function i(){r&&(history.scrollRestoration=`manual`,scrollTo(r.x,r.y))}n?(i(),await zt(Ge,n)):(await Z({type:`enter`,url:be(V.hash?Gt(new URL(location.href)):location.href),replace_state:!0}),i()),Rt()}function ut(){Je.length=0,it=!1}function dt(e){Ye.some(e=>e?.snapshot)&&(L[e]=Ye.map(e=>e?.snapshot?.capture()))}function ft(e){L[e]?.forEach((e,t)=>{Ye[t]?.snapshot?.restore(e)})}function pt(){ze(q),fe(ve,I),dt(J),fe(_e,L)}async function mt(e,n,r,i){let a,o;n.invalidateAll&&Xe(),await Z({type:`goto`,url:be(e),keepfocus:n.keepFocus,noscroll:n.noScroll,replace_state:n.replaceState,state:n.state,redirect_count:r,nav_token:i,accept:()=>{if(n.invalidateAll){it=!0,a=new Set;for(let[e,t]of st)for(let[n,r]of t)r.resource?.reset(),a.add(j(e,n));o=new Set;for(let[e,t]of ct)for(let n of t.keys())o.add(j(e,n))}n.invalidate&&n.invalidate.forEach(Lt)}}),n.invalidateAll&&t().then(t).then(()=>{for(let[e,t]of st)for(let[n,{resource:r}]of t)a?.has(j(e,n))&&r.start();for(let[e,t]of ct)for(let[n,{resource:r}]of t)o?.has(j(e,n))&&r.reconnect()})}async function ht(e){if(e.id!==H?.id){Xe();let t={};ot.add(t),H={id:e.id,token:t,promise:Tt({...e,preload:t}).then(e=>(ot.delete(t),e.type===`loaded`&&e.state.error&&Xe(),e)),fork:null}}return H.promise}async function gt(e){let t=(await X(e,!1))?.route;t&&await Promise.all([...t.layouts,t.leaf].filter(Boolean).map(e=>e[1]()))}async function _t(e,t,n){let r={params:W.params,route:{id:W.route?.id??null},url:new URL(location.href)};if(W={...e.state,nav:r},Fe(e.props.page),at=new V.root({target:t,props:{...e.props,stores:R,components:Ye},hydrate:n,sync:!1,transformError:void 0}),await Promise.resolve(),n){let e={from:null,to:{...r,scroll:I[q]??D()},willUnload:!1,type:`enter`,complete:Promise.resolve()};U.forEach(t=>t(e))}ft(J),tt=!0}async function vt({url:e,params:t,branch:n,errors:r,status:i,error:a,route:o,form:s}){let c=`never`;if(S&&(e.pathname===S||e.pathname===S+`/`))c=`always`;else for(let e of n)e?.slash!==void 0&&(c=e.slash);e.pathname=d(e.pathname,c),e.search=e.search;let l={type:`loaded`,state:{url:e,params:t,branch:n,error:a,route:o},props:{constructors:Ae(n).map(e=>e.node.component),page:Wt(M)}};s!==void 0&&(l.props.form=s);let u={},f=!M,p=0;for(let e=0;e<Math.max(n.length,W.branch.length);e+=1){let t=n[e],r=W.branch[e];t?.data!==r?.data&&(f=!0),t&&(u={...u,...t.data},f&&(l.props[`data_${p}`]=u),p+=1)}return(!W.url||e.href!==W.url.href||W.error!==a||s!==void 0&&s!==M.form||f)&&(l.props.page={error:a,params:t,route:{id:o?.id??null},state:{},status:i,url:new URL(e),form:s??null,data:f?u:M.data}),l}async function yt({loader:e,parent:t,url:n,params:r,route:i,server_data_node:a}){let o={dependencies:new Set,params:new Set,parent:!1,route:!1,url:!1,search_params:new Set},s=await e();return{node:s,loader:e,server:a,universal:s.universal?.load?{type:`data`,data:null,uses:o}:null,data:a?.data??null,slash:s.universal?.trailingSlash??a?.slash}}function bt(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:tt?y(r,i.href,t):te(r,t)}}function xt(e,t,n,r,i,a){if(it)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]!==W.params[e])return!0;for(let e of i.dependencies)if(Je.some(t=>t(new URL(e))))return!0;return!1}function St(e,t){return e?.type===`data`?e:e?.type===`skip`?t??null:null}function Ct(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 wt({error:e,url:t,route:n,params:r}){return{type:`loaded`,state:{error:e,url:t,route:n,params:r,branch:[]},props:{page:Wt(M),constructors:[]}}}async function Tt({id:e,invalidating:t,url:n,params:r,route:i,preload:a}){if(H?.id===e)return ot.delete(H.token),H.promise;let{errors:o,layouts:s,leaf:u}=i,d=[...s,u];o.forEach(e=>e?.().catch(h)),d.forEach(e=>e?.[1]().catch(h));let f=W.url?e!==At(W.url):!1,p=W.route?i.id!==W.route.id:!1,m=Ct(W.url,n),ee=!1,g=d.map(async(e,t)=>{if(!e)return;let a=W.branch[t];return e[1]===a?.loader&&!xt(ee,p,f,m,a.universal?.uses,r)?a:(ee=!0,yt({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 g[n])?.data);return e},server_data_node:St(e[0]?{type:`skip`}:null,e[0]?a?.server:void 0)}))});for(let e of g)e.catch(h);let _=[];for(let e=0;e<d.length;e+=1)if(d[e])try{_.push(await g[e])}catch(t){if(t instanceof l)return{type:`redirect`,location:t.location};if(a&&ot.has(a))return wt({error:await $(t,{params:r,url:n,route:{id:i.id}}),url:n,params:r,route:i});let s=je(t),u;if(t instanceof c)u=t.body;else{if(await R.updated.check())return await Ve(),await z(n);u=await $(t,{params:r,url:n,route:{id:i.id}})}let d=await Et(e,_,o);return d?vt({url:n,params:r,branch:_.slice(0,d.idx).concat(d.node),errors:o,status:s,error:u,route:i}):await Mt(n,{id:i.id},u,s)}else _.push(void 0);return vt({url:n,params:r,branch:_,errors:o,status:200,error:null,route:i,form:t?void 0:null})}async function Et(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 Dt({status:e,error:t,url:n,route:r}){let i={};try{return vt({url:n,params:i,branch:[await yt({loader:Ue,url:n,params:i,route:r,parent:()=>Promise.resolve({}),server_data_node:St(null)}),{node:await We(),loader:We,universal:null,server:null,data:null}],status:e,error:t,errors:[],route:null})}catch(t){if(t instanceof l){await mt(new URL(t.location,location.href),{},0);return}let a=await V.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 Ot(e){let t=e.href;if(Ze.has(t))return Ze.get(t);let n;try{let r=(async()=>{let t=await V.hooks.reroute({url:new URL(e),fetch:async(t,n)=>bt(t,n,e).promise})??e;if(typeof t==`string`){let n=new URL(e);V.hash?n.hash=t:n.pathname=t,t=n}return t})();Ze.set(t,r),n=await r}catch{Ze.delete(t);return}return n}async function X(e,t){if(e&&!A(e,S,V.hash)){let n=await Ot(e);if(!n)return;let r=kt(n);for(let n of He){let i=n.exec(r);if(i)return{id:At(e),invalidating:t,route:n,params:p(i),url:e}}}}function kt(e){return f(V.hash?e.hash.replace(/^#/,``).replace(/[?#].+/,``):e.pathname.slice(S.length))||`/`}function At(e){return(V.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=Ut(W,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||Qe.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:d={},accept:f=h,block:p=h,event:m}){let ee=Y;Y=d;let g=await X(r,!1),_=n===`enter`?Ut(W,g,r,n):jt({url:r,type:n,delta:i?.delta,intent:g,scroll:i?.scroll,event:m});if(!_){p(),Y===d&&(Y=ee);return}let v=q,te=J;f(),G=!0,tt&&_.navigation.type!==`enter`&&R.navigating.set(N.current=_.navigation);let y=g&&await Tt(g);if(!y){if(A(r,S,V.hash))return await z(r,s);y=await Mt(r,{id:null},await $(new u(404,`Not Found`,`Not found: ${r.pathname}`),{url:r,params:{},route:{id:null}}),404,s)}if(r=g?.url||r,Y!==d){_.reject(Error(`navigation aborted`));return}if(!y)return;if(y.type===`redirect`){if(l<20){await Z({type:n,url:new URL(y.location,r),popped:i,keepfocus:a,noscroll:o,replace_state:s,state:c,redirect_count:l+1,nav_token:d}),_.fulfil(void 0);return}if(y=await Dt({status:500,error:await $(Error(`Redirect loop`),{url:r,params:{},route:{id:null}}),url:r,route:{id:null}}),!y)return}else if(y.props.page.status>=400&&await R.updated.check())return await Ve(),await z(r,s);if(ut(),ze(v),dt(te),y.props.page.url.pathname!==r.pathname&&(r.pathname=y.props.page.url.pathname),c=i?i.state:c,!i){let e=+!s,t={[C]:q+=e,[w]:J+=e,[ye]:c};(s?history.replaceState:history.pushState).call(history,t,``,r),s||Be(q,J)}let b=g&&H?.id===g.id?H.fork:null;H?.fork&&!b?Xe():(H=null,Q={element:void 0,href:void 0}),y.props.page.state=c;let ne;if(tt){let t=(await Promise.all(Array.from($e,e=>e(_.navigation)))).filter(e=>typeof e==`function`);if(t.length>0){function e(){t.forEach(e=>{U.delete(e)})}t.push(e),t.forEach(e=>{U.add(e)})}let n=_.navigation.to;W={...y.state,nav:{params:n.params,route:n.route,url:n.url}},y.props.page&&(y.props.page.url=r),!a&&document.activeElement instanceof HTMLElement&&document.activeElement!==document.body&&document.activeElement.blur();let i=b&&await b;i?ne=i.commit():(F=null,at.$set(y.props),F&&Object.assign(y.props.page,F),Fe(y.props.page),ne=e?.()),rt=!0}else await _t(y,Ge,!1);let{activeElement:re}=document;if(await ne,await t(),await t(),Y!==d){_.reject(Error(`navigation aborted`));return}y.props.page&&F&&Object.assign(y.props.page,F);let x=null;if(nt){let e=i?i.scroll:o?D():null;e?scrollTo(e.x,e.y):(x=r.hash&&document.getElementById(Kt(r)))?x.scrollIntoView():scrollTo(0,0)}let ie=document.activeElement!==re&&document.activeElement!==document.body;!a&&!ie&&Ht(r,!x),nt=!0,G=!1,_.fulfil(void 0),_.navigation.to&&(_.navigation.to.scroll=D()),U.forEach(e=>e(_.navigation)),n===`popstate`&&ft(J),R.navigating.set(N.current=null)}async function Mt(e,t,n,r,i){return e.origin===E&&e.pathname===location.pathname&&!et?await Dt({status:r,error:n,url:e,route:t}):await z(e,i)}var Q={element:void 0,href:void 0};function Nt(){let e,t;B.addEventListener(`mousemove`,t=>{let n=t.target;clearTimeout(e),e=setTimeout(()=>{i(n,T.hover)},20)});function n(e){e.defaultPrevented||i(e.composedPath()[0],T.tap)}B.addEventListener(`mousedown`,n),B.addEventListener(`touchstart`,n,{passive:!0});let r=new IntersectionObserver(e=>{for(let t of e)t.isIntersecting&&(gt(new URL(t.target.href)),r.unobserve(t.target))},{threshold:0});async function i(e,n){let r=Ce(e,B),i=r===Q.element&&r?.href===Q.href&&n>=t;if(!r||i)return;let{url:a,external:o,download:s}=we(r,S,V.hash);if(o||s)return;let c=k(r),l=a&&At(W.url)===At(a);if(!(c.reload||l))if(n<=c.preload_data){Q={element:r,href:r.href},t=T.tap;let e=await X(a,!1);if(!e)return;ht(e)}else n<=c.preload_code&&(Q={element:r,href:r.href},t=n,gt(a))}function a(){r.disconnect();for(let e of B.querySelectorAll(`a`)){let{url:t,external:n,download:i}=we(e,S,V.hash);if(n||i)continue;let a=k(e);a.reload||(a.preload_code===T.viewport&&r.observe(e),a.preload_code===T.eager&>(t))}}U.add(a),a()}function $(e,t){if(e instanceof c)return e.body;let n=je(e),r=Me(e);return V.hooks.handleError({error:e,event:t,status:n,message:r})??{message:r}}function Pt(e,t){Ie(()=>(e.add(t),()=>{e.delete(t)}))}function Ft(e){Pt(U,e)}function It(e,t={}){return e=new URL(be(e)),e.origin===E?mt(e,t,0):Promise.reject(Error(`goto: invalid URL`))}function Lt(e){if(typeof e==`function`)Je.push(e);else{let{href:t}=new URL(e,location.href);Je.push(e=>e.href===t)}}function Rt(){history.scrollRestoration=`manual`,addEventListener(`beforeunload`,e=>{let t=!1;if(pt(),!G){let e=Ut(W,void 0,null,`leave`),n={...e.navigation,cancel:()=>{t=!0,e.reject(Error(`navigation cancelled`))}};Qe.forEach(e=>e(n))}t?(e.preventDefault(),e.returnValue=``):history.scrollRestoration=`auto`}),addEventListener(`visibilitychange`,()=>{document.visibilityState===`hidden`&&pt()}),navigator.connection?.saveData||Nt(),B.addEventListener(`click`,async t=>{if(t.button||t.which!==1||t.metaKey||t.ctrlKey||t.shiftKey||t.altKey||t.defaultPrevented)return;let n=Ce(t.composedPath()[0],B);if(!n)return;let{url:r,external:i,target:a,download:o}=we(n,S,V.hash);if(!r)return;if(a===`_parent`||a===`_top`){if(window.parent!==window)return}else if(a&&a!==`_self`)return;let s=k(n);if(!(n instanceof SVGAElement)&&r.protocol!==location.protocol&&!(r.protocol===`https:`||r.protocol===`http:`)||o)return;let[c,l]=(V.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]=W.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,ze(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})}),B.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(A(r,S,!1))return;let i=e.target,a=k(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(!Vt)if(t.state?.[`sveltekit:history`]){let n=t.state[C];if(Y={},n===q)return;let r=I[n],i=t.state[`sveltekit:states`]??{},a=new URL(t.state[`sveltekit:pageurl`]??location.href),o=t.state[w],s=W.url?m(location)===m(W.url):!1;if(o===J&&(rt||s)){i!==M.state&&(M.state=i),e(a),I[q]=D(),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)),V.hash&&location.reload())}),addEventListener(`hashchange`,()=>{K&&(K=!1,history.replaceState({...history.state,[C]:++q,[w]:J},``,location.href))});for(let e of document.querySelectorAll(`link`))Re.has(e.rel)&&(e.href=e.href);addEventListener(`pageshow`,e=>{e.persisted&&R.navigating.set(N.current=null)});function e(e){W.url=M.url=e,R.page.set(Wt(M)),R.page.notify()}}async function zt(e,{status:t=200,error:n,node_ids:r,params:i,route:a,server_route:o,data:s,form:c}){et=!0;let u=new URL(location.href),d;({params:i={},route:a={id:null}}=await X(u,!1)||{}),d=He.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=Bt(r.uses)),yt({loader:V.nodes[t],url:u,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:St(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 vt({url:u,params:i,branch:o,status:t,error:n,errors:d?.errors,form:c,route:d??null})}catch(t){if(t instanceof l)return await z(new URL(t.location,location.href));f=await Dt({status:je(t),error:await $(t,{url:u,params:i,route:a}),url:u,route:a}),e.textContent=``,p=!1}f&&(f.props.page&&(f.props.page.state={}),await _t(f,e,p))}function Bt(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 Vt=!1;function Ht(e,t=!0){let n=document.querySelector(`[autofocus]`);if(n)n.focus();else{let n=Kt(e);if(n&&document.getElementById(n)){let{x:r,y:i}=D();setTimeout(()=>{let a=history.state;Vt=!0,location.replace(new URL(`#${n}`,location.href)),history.replaceState(a,``,e),t&&scrollTo(r,i),Vt=!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 Ut(e,t,n,r,i=null){let a,o,s=new Promise((e,t)=>{a=e,o=t});return s.catch(h),{navigation:{from:{params:e.params,route:{id:e.route?.id??null},url:e.url,scroll:D()},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 Wt(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 Gt(e){let t=new URL(e);return t.hash=decodeURIComponent(e.hash),t}function Kt(e){let t;if(V.hash){let[,,n]=e.hash.split(`#`,3);t=n??``}else t=e.hash.slice(1);return decodeURIComponent(t)}export{N as a,Oe as c,R as i,he as l,It as n,M as o,lt as r,P as s,Ft as t};
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{c as e,r as t}from"../chunks/wBLhaPea.js";export{e as load_css,t as start};
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|