fundus 0.29.1 → 0.29.3
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/README.md +6 -7
- package/build/client/_app/immutable/chunks/{Cq3PJxJG.js → CtCLVGPE.js} +1 -1
- package/build/client/_app/immutable/chunks/CtCLVGPE.js.br +3 -0
- package/build/client/_app/immutable/chunks/CtCLVGPE.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DYQoWdCa.js +121 -0
- package/build/client/_app/immutable/chunks/DYQoWdCa.js.br +0 -0
- package/build/client/_app/immutable/chunks/DYQoWdCa.js.gz +0 -0
- package/build/client/_app/immutable/chunks/Den6nsPm.js +1 -0
- package/build/client/_app/immutable/chunks/Den6nsPm.js.br +0 -0
- package/build/client/_app/immutable/chunks/Den6nsPm.js.gz +0 -0
- package/build/client/_app/immutable/entry/{app.Dit62aNJ.js → app.DopOo-PH.js} +2 -2
- package/build/client/_app/immutable/entry/app.DopOo-PH.js.br +0 -0
- package/build/client/_app/immutable/entry/app.DopOo-PH.js.gz +0 -0
- package/build/client/_app/immutable/entry/start.BVHoCzj2.js +1 -0
- package/build/client/_app/immutable/entry/start.BVHoCzj2.js.br +0 -0
- package/build/client/_app/immutable/entry/start.BVHoCzj2.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{0.DnyKXqLr.js → 0.BQrGLMQU.js} +1 -1
- package/build/client/_app/immutable/nodes/0.BQrGLMQU.js.br +0 -0
- package/build/client/_app/immutable/nodes/0.BQrGLMQU.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{1.Cz-4S6LF.js → 1.C_g8kBDL.js} +1 -1
- package/build/client/_app/immutable/nodes/1.C_g8kBDL.js.br +1 -0
- package/build/client/_app/immutable/nodes/1.C_g8kBDL.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{2.C75-hsCY.js → 2.ClbmDuoO.js} +1 -1
- package/build/client/_app/immutable/nodes/2.ClbmDuoO.js.br +0 -0
- package/build/client/_app/immutable/nodes/2.ClbmDuoO.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{3.4pSddugU.js → 3.CqeLuqBs.js} +1 -1
- package/build/client/_app/immutable/nodes/3.CqeLuqBs.js.br +0 -0
- package/build/client/_app/immutable/nodes/3.CqeLuqBs.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{4.KoQxJEWQ.js → 4.Bx5yAlkf.js} +1 -1
- package/build/client/_app/immutable/nodes/4.Bx5yAlkf.js.br +0 -0
- package/build/client/_app/immutable/nodes/4.Bx5yAlkf.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-BR2IRl9z.js → context.js-C_581OHo.js} +2 -2
- package/build/server/chunks/chunks/{context.js-BR2IRl9z.js.map → context.js-C_581OHo.js.map} +1 -1
- package/build/server/chunks/chunks/{contract.js-DHeIVVv8.js → contract.js-CkXfem6U.js} +8 -5
- package/build/server/chunks/chunks/contract.js-CkXfem6U.js.map +1 -0
- package/build/server/chunks/chunks/{exports.js-CNZgoxR0.js → exports.js--DmMivD2.js} +2 -2
- package/build/server/chunks/chunks/{exports.js-CNZgoxR0.js.map → exports.js--DmMivD2.js.map} +1 -1
- package/build/server/chunks/chunks/{http.js-dk5jbOFm.js → http.js-gzmdrjmr.js} +2 -2
- package/build/server/chunks/chunks/{http.js-dk5jbOFm.js.map → http.js-gzmdrjmr.js.map} +1 -1
- package/build/server/chunks/chunks/{internal.js-DlRiYJji.js → internal.js-Cbp0-17k.js} +3 -3
- package/build/server/chunks/chunks/{internal.js-DlRiYJji.js.map → internal.js-Cbp0-17k.js.map} +1 -1
- package/build/server/chunks/chunks/internal2.js-BlXt2rfE.js.map +1 -1
- package/build/server/chunks/chunks/{shared.js-C6qC0jnA.js → shared.js-BejF-VOO.js} +2 -2
- package/build/server/chunks/chunks/{shared.js-C6qC0jnA.js.map → shared.js-BejF-VOO.js.map} +1 -1
- package/build/server/chunks/chunks/{utils.js-BZ32hXFI.js → utils.js-BUczVTgL.js} +3 -3
- package/build/server/chunks/chunks/{utils.js-BZ32hXFI.js.map → utils.js-BUczVTgL.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/api/_...path_/{_server.ts.js-8jGLP2Aj.js → _server.ts.js-CCSUkwIk.js} +4 -4
- package/build/server/chunks/entries/endpoints/api/_...path_/{_server.ts.js-8jGLP2Aj.js.map → _server.ts.js-CCSUkwIk.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/api/assets/_id_/{_server.ts.js-BOW9Ejim.js → _server.ts.js-Br-3jz-w.js} +5 -6
- package/build/server/chunks/entries/endpoints/api/assets/_id_/{_server.ts.js-BOW9Ejim.js.map → _server.ts.js-Br-3jz-w.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/api/assets/_id_/raw/{_server.ts.js-Clac8atJ.js → _server.ts.js-IE3Wtg58.js} +5 -6
- package/build/server/chunks/entries/endpoints/api/assets/_id_/raw/{_server.ts.js-Clac8atJ.js.map → _server.ts.js-IE3Wtg58.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/api/assets/_id_/reimport/{_server.ts.js-EdHTA-SO.js → _server.ts.js-DeERkiGY.js} +5 -6
- package/build/server/chunks/entries/endpoints/api/assets/_id_/reimport/{_server.ts.js-EdHTA-SO.js.map → _server.ts.js-DeERkiGY.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/api/assets/_id_/retag/{_server.ts.js-ZBCRgRYi.js → _server.ts.js-Bg3ghGrT.js} +5 -6
- package/build/server/chunks/entries/endpoints/api/assets/_id_/retag/{_server.ts.js-ZBCRgRYi.js.map → _server.ts.js-Bg3ghGrT.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/api/assets/{_server.ts.js-DY_e5K6d.js → _server.ts.js-C3skEzmK.js} +5 -6
- package/build/server/chunks/entries/endpoints/api/assets/{_server.ts.js-DY_e5K6d.js.map → _server.ts.js-C3skEzmK.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/api/assets/delete/{_server.ts.js-Cl2jxJNi.js → _server.ts.js-BKPDUSpo.js} +5 -6
- package/build/server/chunks/entries/endpoints/api/assets/delete/{_server.ts.js-Cl2jxJNi.js.map → _server.ts.js-BKPDUSpo.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/api/assets/move/{_server.ts.js-DrrZWUbd.js → _server.ts.js-Cj7U6IF9.js} +5 -6
- package/build/server/chunks/entries/endpoints/api/assets/move/{_server.ts.js-DrrZWUbd.js.map → _server.ts.js-Cj7U6IF9.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/api/events/{_server.ts.js-Bnw0HbEk.js → _server.ts.js-DXdvakNJ.js} +5 -6
- package/build/server/chunks/entries/endpoints/api/events/{_server.ts.js-Bnw0HbEk.js.map → _server.ts.js-DXdvakNJ.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/api/folders/_path_/{_server.ts.js-NeVn2ap9.js → _server.ts.js-E7HezGfG.js} +5 -6
- package/build/server/chunks/entries/endpoints/api/folders/_path_/{_server.ts.js-NeVn2ap9.js.map → _server.ts.js-E7HezGfG.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/api/folders/{_server.ts.js-ENGDgoLy.js → _server.ts.js-B6Ri4rdz.js} +5 -6
- package/build/server/chunks/entries/endpoints/api/folders/{_server.ts.js-ENGDgoLy.js.map → _server.ts.js-B6Ri4rdz.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/api/imports/{_server.ts.js-BQVGCzBR.js → _server.ts.js-BOoeDnm0.js} +5 -6
- package/build/server/chunks/entries/endpoints/api/imports/{_server.ts.js-BQVGCzBR.js.map → _server.ts.js-BOoeDnm0.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/api/manifests/_name_/{_server.ts.js-Pxver0Y-.js → _server.ts.js-DrmUI1s2.js} +5 -6
- package/build/server/chunks/entries/endpoints/api/manifests/_name_/{_server.ts.js-Pxver0Y-.js.map → _server.ts.js-DrmUI1s2.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/api/manifests/{_server.ts.js-DYtiqzJq.js → _server.ts.js-Try_45xL.js} +5 -6
- package/build/server/chunks/entries/endpoints/api/manifests/{_server.ts.js-DYtiqzJq.js.map → _server.ts.js-Try_45xL.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/api/raw/adopt/{_server.ts.js-lBgmEZHV.js → _server.ts.js-9dzHRtWu.js} +5 -6
- package/build/server/chunks/entries/endpoints/api/raw/adopt/{_server.ts.js-lBgmEZHV.js.map → _server.ts.js-9dzHRtWu.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/api/raw/edited/accept/{_server.ts.js-BJHyONFH.js → _server.ts.js-fW6YixfD.js} +5 -6
- package/build/server/chunks/entries/endpoints/api/raw/edited/accept/{_server.ts.js-BJHyONFH.js.map → _server.ts.js-fW6YixfD.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/api/raw/edited/dismiss/{_server.ts.js-Bm5XO80W.js → _server.ts.js-CaUNYjjt.js} +5 -6
- package/build/server/chunks/entries/endpoints/api/raw/edited/dismiss/{_server.ts.js-Bm5XO80W.js.map → _server.ts.js-CaUNYjjt.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/api/reconcile/{_server.ts.js-B7Z20kYf.js → _server.ts.js-BnB7Val_.js} +5 -6
- package/build/server/chunks/entries/endpoints/api/reconcile/{_server.ts.js-B7Z20kYf.js.map → _server.ts.js-BnB7Val_.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/api/reveal/{_server.ts.js-Cg-f37jc.js → _server.ts.js-DpTK9Nri.js} +5 -6
- package/build/server/chunks/entries/endpoints/api/reveal/{_server.ts.js-Cg-f37jc.js.map → _server.ts.js-DpTK9Nri.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/api/state/{_server.ts.js-dIXZiq5l.js → _server.ts.js-G4O-NUBJ.js} +5 -6
- package/build/server/chunks/entries/endpoints/api/state/{_server.ts.js-dIXZiq5l.js.map → _server.ts.js-G4O-NUBJ.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/api/usage/{_server.ts.js-CnTrS5pT.js → _server.ts.js-Dp8g688B.js} +5 -6
- package/build/server/chunks/entries/endpoints/api/usage/{_server.ts.js-CnTrS5pT.js.map → _server.ts.js-Dp8g688B.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/files/_...path_/{_server.ts.js-B7TcFRuL.js → _server.ts.js-DfQ9xywr.js} +4 -4
- package/build/server/chunks/entries/endpoints/files/_...path_/{_server.ts.js-B7TcFRuL.js.map → _server.ts.js-DfQ9xywr.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/files/proxy/_...path_/{_server.ts.js-BkUQInqW.js → _server.ts.js-bYq4Ayyw.js} +5 -6
- package/build/server/chunks/entries/endpoints/files/proxy/_...path_/{_server.ts.js-BkUQInqW.js.map → _server.ts.js-bYq4Ayyw.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/files/raw/_...path_/{_server.ts.js-CshyvqOq.js → _server.ts.js-BnQ-fziQ.js} +5 -6
- package/build/server/chunks/entries/endpoints/files/raw/_...path_/{_server.ts.js-CshyvqOq.js.map → _server.ts.js-BnQ-fziQ.js.map} +1 -1
- package/build/server/chunks/entries/{hooks.server.js-D4DECjz_.js → hooks.server.js-DHvjD7tO.js} +4 -5
- package/build/server/chunks/entries/{hooks.server.js-D4DECjz_.js.map → hooks.server.js-DHvjD7tO.js.map} +1 -1
- package/build/server/chunks/{handler-Cna54zf6.js → handler-lpdGRHA-.js} +5 -5
- package/build/server/chunks/{handler-Cna54zf6.js.map → handler-lpdGRHA-.js.map} +1 -1
- package/build/server/chunks/{index.js-BnpHWDec.js → index.js-BJ2riKAM.js} +5 -5
- package/build/server/chunks/{index.js-BnpHWDec.js.map → index.js-BJ2riKAM.js.map} +1 -1
- package/build/server/chunks/{manifest.js-9WMEOpxH.js → manifest.js-B7CByQbP.js} +31 -31
- package/build/server/chunks/{manifest.js-9WMEOpxH.js.map → manifest.js-B7CByQbP.js.map} +1 -1
- package/build/server/chunks/nodes/{0.js-C2b1a672.js → 0.js-CIEno0O_.js} +2 -2
- package/build/server/chunks/nodes/{0.js-C2b1a672.js.map → 0.js-CIEno0O_.js.map} +1 -1
- package/build/server/chunks/nodes/1.js-BDhDlx7m.js +7 -0
- package/build/server/chunks/nodes/{1.js-P3Ai28oj.js.map → 1.js-BDhDlx7m.js.map} +1 -1
- package/build/server/chunks/nodes/{2.js-sM3j5BqB.js → 2.js-CZGajL-G.js} +2 -2
- package/build/server/chunks/nodes/{2.js-sM3j5BqB.js.map → 2.js-CZGajL-G.js.map} +1 -1
- package/build/server/chunks/nodes/3.js-B_3IVFss.js +7 -0
- package/build/server/chunks/nodes/{3.js-G0jV-ymM.js.map → 3.js-B_3IVFss.js.map} +1 -1
- package/build/server/chunks/nodes/{4.js-BUTPrI45.js → 4.js-DgUv1tIQ.js} +2 -2
- package/build/server/chunks/nodes/{4.js-BUTPrI45.js.map → 4.js-DgUv1tIQ.js.map} +1 -1
- package/dist/core/plugins/video.d.ts +1 -1
- package/dist/runtime/canvas.d.ts +1 -1
- package/dist/runtime/components/Slice.svelte +12 -16
- package/dist/runtime/kind-handlers.d.ts +6 -10
- package/dist/runtime/kind-handlers.js +29 -49
- package/dist/runtime/manifest.d.ts +2 -8
- package/dist/runtime/manifest.js +4 -5
- package/dist/runtime/preload-registry.d.ts +5 -7
- package/dist/runtime/preload-registry.js +6 -9
- package/dist/runtime/retained-entry.d.ts +1 -1
- package/dist/runtime/retained-entry.js +1 -1
- package/dist/runtime/slice-source-lifecycle.d.ts +2 -10
- package/dist/runtime/slice-source-lifecycle.js +2 -11
- package/dist/server/config-loader.d.ts +1 -1
- package/dist/server/processing/ffmpeg.js +10 -5
- package/package.json +2 -3
- package/build/client/_app/immutable/chunks/CE3cWlK6.js +0 -1
- 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/Cq3PJxJG.js.br +0 -2
- package/build/client/_app/immutable/chunks/Cq3PJxJG.js.gz +0 -0
- package/build/client/_app/immutable/chunks/Wk7WcyQU.js +0 -121
- 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.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 +0 -1
- 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.DnyKXqLr.js.br +0 -0
- package/build/client/_app/immutable/nodes/0.DnyKXqLr.js.gz +0 -0
- 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.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.4pSddugU.js.br +0 -0
- package/build/client/_app/immutable/nodes/3.4pSddugU.js.gz +0 -0
- 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/server/chunks/chunks/contract.js-DHeIVVv8.js.map +0 -1
- package/build/server/chunks/nodes/1.js-P3Ai28oj.js +0 -7
- package/build/server/chunks/nodes/3.js-G0jV-ymM.js +0 -7
|
@@ -1,3 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The runtime part of the type-plugin contract: per-kind preload
|
|
3
|
+
* strategy and its inverse release strategy. Each first-party kind registers
|
|
4
|
+
* a handler that knows how its delivered file is loaded — images fetch and
|
|
5
|
+
* retain a decoded element, slices too, media kinds (video/audio) fetch
|
|
6
|
+
* fully and mint an object URL — and how what it loaded is disposed (revoke
|
|
7
|
+
* the object URL; decoded elements have nothing to dispose). An unknown kind
|
|
8
|
+
* falls back to a plain full fetch: no decode, no retention.
|
|
9
|
+
*
|
|
10
|
+
* Handlers are pure strategy: refcounting, cross-holder dedup, and
|
|
11
|
+
* in-flight bookkeeping live in the module-wide registry
|
|
12
|
+
* (preload-registry.ts); kind-agnostic orchestration lives in `Manifest` and
|
|
13
|
+
* `retainEntry`.
|
|
14
|
+
*/
|
|
1
15
|
import { plugins } from '../core/plugins/registry.js';
|
|
2
16
|
/**
|
|
3
17
|
* Entry kinds whose delivered file is retained as an object URL by
|
|
@@ -46,13 +60,21 @@ function verifyByteSize(url, expected, actual) {
|
|
|
46
60
|
}
|
|
47
61
|
}
|
|
48
62
|
/**
|
|
49
|
-
* The image strategy: fetch the full file, then decode it via an
|
|
63
|
+
* The image and slice strategy: fetch the full file, then decode it via an
|
|
50
64
|
* HTMLImageElement where a DOM exists (the browser serves the bytes from
|
|
51
|
-
* cache); headless environments (Node tests, SSR) skip decoding.
|
|
52
|
-
*
|
|
53
|
-
*
|
|
65
|
+
* cache); headless environments (Node tests, SSR) skip decoding. Retains the
|
|
66
|
+
* decoded element until the last holder releases, so canvas drawing and
|
|
67
|
+
* `SliceSourceLifecycle` commit synchronously — a preloaded slice paints in
|
|
68
|
+
* its mount frame — and a one-slice's mounted `<img>` paints from a warm
|
|
69
|
+
* cache. Nothing to explicitly dispose — release drops the registry's
|
|
70
|
+
* reference.
|
|
71
|
+
*
|
|
72
|
+
* Deliberately not an ImageBitmap: WebKit on iOS can empty a bitmap while the
|
|
73
|
+
* app is in the background (memory pressure, GPU process restart) yet keep
|
|
74
|
+
* its size, so every later draw or texture upload from it is silently blank.
|
|
75
|
+
* An element whose decoded pixels were purged is decoded again from its file.
|
|
54
76
|
*/
|
|
55
|
-
const
|
|
77
|
+
const decodedImageHandler = {
|
|
56
78
|
async preload(url, byteSize) {
|
|
57
79
|
const response = await fetchCompletely(url);
|
|
58
80
|
// Read the body fully so the file is actually transferred (and
|
|
@@ -68,48 +90,6 @@ const imageHandler = {
|
|
|
68
90
|
return {};
|
|
69
91
|
}
|
|
70
92
|
};
|
|
71
|
-
/**
|
|
72
|
-
* The slice strategy: fetch the full file and retain a decoded form while
|
|
73
|
-
* held, chosen by the entry's slicing mode. Multi-cell slices (nine,
|
|
74
|
-
* three-*) draw through a canvas and retain the pixels as an ImageBitmap —
|
|
75
|
-
* unlike a throwaway decode into the browser's evictable image cache, the
|
|
76
|
-
* bitmap survives memory pressure and lets `SliceSourceLifecycle` commit
|
|
77
|
-
* synchronously, so a preloaded slice paints in its mount frame. One-slice
|
|
78
|
-
* sources render as a plain `<img>`, which cannot paint from a bitmap: they
|
|
79
|
-
* retain the decoded HTMLImageElement instead — the same synchronous commit,
|
|
80
|
-
* and its decode warms the (evictable) cache the mounted `<img>` paints
|
|
81
|
-
* from. Release closes the bitmap; a retained element has nothing to
|
|
82
|
-
* dispose. Slice sources are small (the insets cover every rendered size),
|
|
83
|
-
* so retention is cheap. Environments without `createImageBitmap` retain the
|
|
84
|
-
* decoded element for every mode.
|
|
85
|
-
*
|
|
86
|
-
* Bitmaps are premultiplied so WebGL uploads match the premultiplied texture a
|
|
87
|
-
* retained element yields with `UNPACK_PREMULTIPLY_ALPHA_WEBGL` (bitmaps ignore
|
|
88
|
-
* that flag); Canvas 2D draws either form identically.
|
|
89
|
-
*/
|
|
90
|
-
const sliceHandler = {
|
|
91
|
-
async preload(url, byteSize, entry) {
|
|
92
|
-
const response = await fetchCompletely(url);
|
|
93
|
-
const blob = await response.blob();
|
|
94
|
-
verifyByteSize(url, byteSize, blob.size);
|
|
95
|
-
const oneSlice = entry?.slicing?.mode === 'one';
|
|
96
|
-
if (!oneSlice && typeof globalThis.createImageBitmap === 'function') {
|
|
97
|
-
return {
|
|
98
|
-
imageBitmap: await globalThis.createImageBitmap(blob, { premultiplyAlpha: 'premultiply' })
|
|
99
|
-
};
|
|
100
|
-
}
|
|
101
|
-
if (typeof globalThis.Image === 'function') {
|
|
102
|
-
const image = new globalThis.Image();
|
|
103
|
-
image.src = url;
|
|
104
|
-
await image.decode();
|
|
105
|
-
return { image };
|
|
106
|
-
}
|
|
107
|
-
return {};
|
|
108
|
-
},
|
|
109
|
-
release(resources) {
|
|
110
|
-
resources.imageBitmap?.close();
|
|
111
|
-
}
|
|
112
|
-
};
|
|
113
93
|
/**
|
|
114
94
|
* The retained-media strategy (video, chroma-key-video, audio): fetch the
|
|
115
95
|
* full file and retain it as an object URL so later playback does not touch
|
|
@@ -140,8 +120,8 @@ const unknownKindHandler = {
|
|
|
140
120
|
}
|
|
141
121
|
};
|
|
142
122
|
const runtimeHandlerCatalogue = {
|
|
143
|
-
image:
|
|
144
|
-
slice:
|
|
123
|
+
image: decodedImageHandler,
|
|
124
|
+
slice: decodedImageHandler,
|
|
145
125
|
video: retainedMediaHandler,
|
|
146
126
|
'chroma-key-video': retainedMediaHandler,
|
|
147
127
|
audio: retainedMediaHandler
|
|
@@ -16,12 +16,6 @@ export interface EntrySource {
|
|
|
16
16
|
url: string;
|
|
17
17
|
kind: string;
|
|
18
18
|
byteSize: number;
|
|
19
|
-
/**
|
|
20
|
-
* The (possibly inlined) entry the source came from. Kind strategies read
|
|
21
|
-
* per-entry metadata from it — the slice handler picks its retention form
|
|
22
|
-
* by slicing mode. Orchestration itself never looks inside.
|
|
23
|
-
*/
|
|
24
|
-
entry: Record<string, unknown>;
|
|
25
19
|
}
|
|
26
20
|
/** Reject an entry `byteSize` that is not a non-negative safe integer. */
|
|
27
21
|
export declare function assertEntryByteSize(src: string, byteSize: unknown): asserts byteSize is number;
|
|
@@ -57,8 +51,8 @@ export declare class Manifest {
|
|
|
57
51
|
* Drop this manifest's holds on everything it preloaded. Assets shared
|
|
58
52
|
* with another holder (a manifest or a `retainEntry` handle) stay fully
|
|
59
53
|
* alive for that holder; assets nobody holds anymore are disposed via their
|
|
60
|
-
* kind's release strategy (retained media object URLs are revoked,
|
|
61
|
-
*
|
|
54
|
+
* kind's release strategy (retained media object URLs are revoked,
|
|
55
|
+
* decoded image references dropped). Components fall back
|
|
62
56
|
* to the network URL.
|
|
63
57
|
*
|
|
64
58
|
* Safe in every state: before or without `preload()` it is a no-op, and
|
package/dist/runtime/manifest.js
CHANGED
|
@@ -34,8 +34,7 @@ export function collectEntrySources(entry) {
|
|
|
34
34
|
id: record.id,
|
|
35
35
|
url: record.src,
|
|
36
36
|
kind: record.kind,
|
|
37
|
-
byteSize: record.byteSize
|
|
38
|
-
entry: record
|
|
37
|
+
byteSize: record.byteSize
|
|
39
38
|
});
|
|
40
39
|
}
|
|
41
40
|
for (const nested of Object.values(record))
|
|
@@ -97,8 +96,8 @@ export class Manifest {
|
|
|
97
96
|
* Drop this manifest's holds on everything it preloaded. Assets shared
|
|
98
97
|
* with another holder (a manifest or a `retainEntry` handle) stay fully
|
|
99
98
|
* alive for that holder; assets nobody holds anymore are disposed via their
|
|
100
|
-
* kind's release strategy (retained media object URLs are revoked,
|
|
101
|
-
*
|
|
99
|
+
* kind's release strategy (retained media object URLs are revoked,
|
|
100
|
+
* decoded image references dropped). Components fall back
|
|
102
101
|
* to the network URL.
|
|
103
102
|
*
|
|
104
103
|
* Safe in every state: before or without `preload()` it is a no-op, and
|
|
@@ -132,7 +131,7 @@ export class Manifest {
|
|
|
132
131
|
const acquisitions = [];
|
|
133
132
|
for (const [url, source] of sourceByUrl) {
|
|
134
133
|
held.add(url);
|
|
135
|
-
acquisitions.push(acquireSource(url, source.kind, source.byteSize
|
|
134
|
+
acquisitions.push(acquireSource(url, source.kind, source.byteSize));
|
|
136
135
|
}
|
|
137
136
|
const outcomes = await Promise.allSettled(acquisitions);
|
|
138
137
|
const failure = outcomes.find((outcome) => outcome.status === 'rejected');
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* load clears the in-flight state so the URL stays retryable; the caller
|
|
6
6
|
* rolls back its own hold via `releaseSource`.
|
|
7
7
|
*/
|
|
8
|
-
export declare function acquireSource(url: string, kind: string, byteSize: number
|
|
8
|
+
export declare function acquireSource(url: string, kind: string, byteSize: number): Promise<void>;
|
|
9
9
|
/**
|
|
10
10
|
* Drop one hold on `url`. At zero holds the kind handler's release strategy
|
|
11
11
|
* runs (object URL revoked) and the entry is cleared — unless the load is
|
|
@@ -20,13 +20,11 @@ export declare function releaseSource(url: string): void;
|
|
|
20
20
|
*/
|
|
21
21
|
export declare function resolveRetainedSource(url: string): string;
|
|
22
22
|
/**
|
|
23
|
-
* The retained decoded
|
|
24
|
-
* it
|
|
25
|
-
*
|
|
26
|
-
* falls back to an async image load. Never returns a closed bitmap: closing
|
|
27
|
-
* happens only when the entry is dropped from the registry.
|
|
23
|
+
* The retained decoded element of an image or slice URL while a holder holds
|
|
24
|
+
* it, or `null` when not (or no longer) preloaded; the consumer then falls
|
|
25
|
+
* back to an async image load.
|
|
28
26
|
*/
|
|
29
|
-
export declare function resolveRetainedImageSource(url: string):
|
|
27
|
+
export declare function resolveRetainedImageSource(url: string): HTMLImageElement | null;
|
|
30
28
|
/**
|
|
31
29
|
* A source's preload state, for render-time diagnostics:
|
|
32
30
|
* - `loaded` — fully preloaded and held (every kind resolves non-null
|
|
@@ -26,7 +26,7 @@ const registryByUrl = new Map();
|
|
|
26
26
|
* load clears the in-flight state so the URL stays retryable; the caller
|
|
27
27
|
* rolls back its own hold via `releaseSource`.
|
|
28
28
|
*/
|
|
29
|
-
export function acquireSource(url, kind, byteSize
|
|
29
|
+
export function acquireSource(url, kind, byteSize) {
|
|
30
30
|
let entry = registryByUrl.get(url);
|
|
31
31
|
if (!entry) {
|
|
32
32
|
entry = { kind, byteSize, referenceCount: 0, pending: null, resources: null };
|
|
@@ -42,7 +42,7 @@ export function acquireSource(url, kind, byteSize, sourceEntry) {
|
|
|
42
42
|
if (!pending) {
|
|
43
43
|
const acquired = entry;
|
|
44
44
|
pending = runtimeHandlerFor(kind)
|
|
45
|
-
.preload(url, byteSize
|
|
45
|
+
.preload(url, byteSize)
|
|
46
46
|
.then((resources) => {
|
|
47
47
|
acquired.pending = null;
|
|
48
48
|
if (acquired.referenceCount === 0) {
|
|
@@ -92,15 +92,12 @@ export function resolveRetainedSource(url) {
|
|
|
92
92
|
return registryByUrl.get(url)?.resources?.objectUrl ?? url;
|
|
93
93
|
}
|
|
94
94
|
/**
|
|
95
|
-
* The retained decoded
|
|
96
|
-
* it
|
|
97
|
-
*
|
|
98
|
-
* falls back to an async image load. Never returns a closed bitmap: closing
|
|
99
|
-
* happens only when the entry is dropped from the registry.
|
|
95
|
+
* The retained decoded element of an image or slice URL while a holder holds
|
|
96
|
+
* it, or `null` when not (or no longer) preloaded; the consumer then falls
|
|
97
|
+
* back to an async image load.
|
|
100
98
|
*/
|
|
101
99
|
export function resolveRetainedImageSource(url) {
|
|
102
|
-
|
|
103
|
-
return resources?.imageBitmap ?? resources?.image ?? null;
|
|
100
|
+
return registryByUrl.get(url)?.resources?.image ?? null;
|
|
104
101
|
}
|
|
105
102
|
export function sourceStatus(url) {
|
|
106
103
|
const entry = registryByUrl.get(url);
|
|
@@ -13,7 +13,7 @@ import type { ManifestEntry } from '../core/index.js';
|
|
|
13
13
|
*/
|
|
14
14
|
export type RetainedSourceOf<E extends ManifestEntry> = E extends {
|
|
15
15
|
kind: 'image' | 'slice';
|
|
16
|
-
} ? HTMLImageElement
|
|
16
|
+
} ? HTMLImageElement : E extends {
|
|
17
17
|
kind: 'video' | 'chroma-key-video' | 'audio';
|
|
18
18
|
} ? string : never;
|
|
19
19
|
/** One hold on an entry's loaded source, from `retainEntry`. */
|
|
@@ -43,7 +43,7 @@ export async function retainEntry(entry) {
|
|
|
43
43
|
const { id, kind, src, byteSize } = entry;
|
|
44
44
|
assertEntryByteSize(src, byteSize);
|
|
45
45
|
try {
|
|
46
|
-
await acquireSource(src, kind, byteSize
|
|
46
|
+
await acquireSource(src, kind, byteSize);
|
|
47
47
|
}
|
|
48
48
|
catch (cause) {
|
|
49
49
|
releaseSource(src);
|
|
@@ -1,18 +1,10 @@
|
|
|
1
1
|
import type { SliceManifestEntry } from '../core/index.js';
|
|
2
|
-
/** What a committed slice draws from: a decoded element or a retained bitmap. */
|
|
3
|
-
export type SliceRenderSource = HTMLImageElement | ImageBitmap;
|
|
4
2
|
export interface LoadedSliceSnapshot {
|
|
5
3
|
entry: SliceManifestEntry;
|
|
6
|
-
image:
|
|
4
|
+
image: HTMLImageElement;
|
|
7
5
|
}
|
|
8
6
|
export type SliceImageLoader = (url: string) => Promise<HTMLImageElement>;
|
|
9
|
-
export type RetainedSliceSourceResolver = (url: string) =>
|
|
10
|
-
/**
|
|
11
|
-
* Whether a committed source can no longer be drawn: a preload-retained
|
|
12
|
-
* bitmap is closed when its last hold is released, and drawing a closed
|
|
13
|
-
* bitmap throws. A detached source is dropped and reloaded asynchronously.
|
|
14
|
-
*/
|
|
15
|
-
export declare function isDetachedSliceSource(image: SliceRenderSource): boolean;
|
|
7
|
+
export type RetainedSliceSourceResolver = (url: string) => HTMLImageElement | null;
|
|
16
8
|
export declare function loadSliceImage(url: string): Promise<HTMLImageElement>;
|
|
17
9
|
/** Coordinates requested slice entries with the last image-ready snapshot. */
|
|
18
10
|
export declare class SliceSourceLifecycle {
|
|
@@ -1,12 +1,4 @@
|
|
|
1
1
|
import { resolveRetainedImageSource } from './preload-registry.js';
|
|
2
|
-
/**
|
|
3
|
-
* Whether a committed source can no longer be drawn: a preload-retained
|
|
4
|
-
* bitmap is closed when its last hold is released, and drawing a closed
|
|
5
|
-
* bitmap throws. A detached source is dropped and reloaded asynchronously.
|
|
6
|
-
*/
|
|
7
|
-
export function isDetachedSliceSource(image) {
|
|
8
|
-
return typeof ImageBitmap !== 'undefined' && image instanceof ImageBitmap && image.width === 0;
|
|
9
|
-
}
|
|
10
2
|
export function loadSliceImage(url) {
|
|
11
3
|
const image = new Image();
|
|
12
4
|
image.decoding = 'async';
|
|
@@ -32,12 +24,11 @@ export class SliceSourceLifecycle {
|
|
|
32
24
|
return;
|
|
33
25
|
this.#requestedEntry = entry;
|
|
34
26
|
const displayed = this.#displayedSnapshot;
|
|
35
|
-
if (displayed?.entry.src === entry.src
|
|
27
|
+
if (displayed?.entry.src === entry.src) {
|
|
36
28
|
this.#commitSnapshot({ entry, image: displayed.image });
|
|
37
29
|
return;
|
|
38
30
|
}
|
|
39
|
-
// A preload-retained
|
|
40
|
-
// the decoded element of a one-slice) commits synchronously — the slice
|
|
31
|
+
// A preload-retained decoded element commits synchronously — the slice
|
|
41
32
|
// paints in its mount frame instead of one decode roundtrip later.
|
|
42
33
|
const retained = this.#resolveRetained(entry.src);
|
|
43
34
|
if (retained) {
|
|
@@ -7,7 +7,7 @@ export interface ResolvedVideoPluginConfig {
|
|
|
7
7
|
presets: Record<string, ResolvedVideoPreset>;
|
|
8
8
|
/** Absolute path of the ffmpeg binary to use; null = the bundled `ffmpeg-static`. */
|
|
9
9
|
ffmpegPath: string | null;
|
|
10
|
-
/** Absolute path of the ffprobe binary to use; null = the bundled
|
|
10
|
+
/** Absolute path of the ffprobe binary to use; null = the bundled `@ffprobe-installer/ffprobe`. */
|
|
11
11
|
ffprobePath: string | null;
|
|
12
12
|
}
|
|
13
13
|
export interface ResolvedAudioPluginConfig {
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* The ffmpeg/ffprobe toolchain layer: binary resolution (bundled
|
|
2
|
+
* The ffmpeg/ffprobe toolchain layer: binary resolution (bundled npm
|
|
3
3
|
* packages by default, with host-config overrides) and a spawn helper.
|
|
4
4
|
* Since proxies are committed, this toolchain is only needed where
|
|
5
5
|
* assets are authored/processed — host builds and CI never invoke it.
|
|
6
6
|
*/
|
|
7
7
|
import ffmpegStaticPath from 'ffmpeg-static';
|
|
8
|
-
import { path as ffprobeStaticPath } from 'ffprobe-static';
|
|
9
8
|
import { basename } from 'node:path';
|
|
10
9
|
import { execFile } from 'node:child_process';
|
|
10
|
+
import { createRequire } from 'node:module';
|
|
11
11
|
import { promisify } from 'node:util';
|
|
12
12
|
export function ffmpegBinaryPath(config) {
|
|
13
13
|
if (config.plugins.video.ffmpegPath)
|
|
@@ -20,10 +20,15 @@ export function ffmpegBinaryPath(config) {
|
|
|
20
20
|
export function ffprobeBinaryPath(config) {
|
|
21
21
|
if (config.plugins.video.ffprobePath)
|
|
22
22
|
return config.plugins.video.ffprobePath;
|
|
23
|
-
|
|
24
|
-
|
|
23
|
+
// Loaded lazily: the package throws on load when no binary matches the
|
|
24
|
+
// platform, which must not break importing the server or the config override.
|
|
25
|
+
try {
|
|
26
|
+
const ffprobeInstaller = createRequire(import.meta.url)('@ffprobe-installer/ffprobe');
|
|
27
|
+
return ffprobeInstaller.path;
|
|
28
|
+
}
|
|
29
|
+
catch {
|
|
30
|
+
throw new Error('@ffprobe-installer/ffprobe provides no binary for this platform — set "plugins.video.ffprobePath" in fundus.config.ts.');
|
|
25
31
|
}
|
|
26
|
-
return ffprobeStaticPath;
|
|
27
32
|
}
|
|
28
33
|
/**
|
|
29
34
|
* Run a toolchain binary with an argument array (never a shell string) and
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "fundus",
|
|
3
|
-
"version": "0.29.
|
|
3
|
+
"version": "0.29.3",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -49,8 +49,8 @@
|
|
|
49
49
|
"release": "changeset publish"
|
|
50
50
|
},
|
|
51
51
|
"dependencies": {
|
|
52
|
+
"@ffprobe-installer/ffprobe": "^2.1.2",
|
|
52
53
|
"ffmpeg-static": "^5.3.0",
|
|
53
|
-
"ffprobe-static": "^3.1.0",
|
|
54
54
|
"jiti": "^2.5.1",
|
|
55
55
|
"open": "^11.0.0",
|
|
56
56
|
"sharp": "^0.34.4"
|
|
@@ -65,7 +65,6 @@
|
|
|
65
65
|
"@sveltejs/kit": "^2.69.2",
|
|
66
66
|
"@sveltejs/package": "^2.5.8",
|
|
67
67
|
"@sveltejs/vite-plugin-svelte": "^7.1.2",
|
|
68
|
-
"@types/ffprobe-static": "^2.0.3",
|
|
69
68
|
"@types/node": "^24.13.3",
|
|
70
69
|
"@vitest/browser": "^3.2.7",
|
|
71
70
|
"fuse.js": "^7.4.2",
|
|
@@ -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_a43b4m?.base??``,pe=globalThis.__sveltekit_a43b4m?.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=`1790813234267`,_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_a43b4m.data){let{q:e={},p:t={},l:n={},f:r={}}=globalThis.__sveltekit_a43b4m.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
|