@selvajs/selva 4.7.0-beta.3 → 4.7.0-beta.4
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/{CP-uwdvv.js → 7KmSQDNg.js} +1 -1
- package/build/client/_app/immutable/chunks/7KmSQDNg.js.br +0 -0
- package/build/client/_app/immutable/chunks/7KmSQDNg.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{98yDWdDP2.js → BEq7tnZv2.js} +1 -1
- package/build/client/_app/immutable/chunks/BEq7tnZv2.js.br +0 -0
- package/build/client/_app/immutable/chunks/BEq7tnZv2.js.gz +0 -0
- package/build/client/_app/immutable/chunks/BPtz4qQZ2.js +1 -0
- package/build/client/_app/immutable/chunks/BPtz4qQZ2.js.br +0 -0
- package/build/client/_app/immutable/chunks/BPtz4qQZ2.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{DjxaiTC2.js → BYGjvVR1.js} +1 -1
- package/build/client/_app/immutable/chunks/BYGjvVR1.js.br +0 -0
- package/build/client/_app/immutable/chunks/BYGjvVR1.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{mHHlwTIC.js → CF05CSCN.js} +1 -1
- package/build/client/_app/immutable/chunks/CF05CSCN.js.br +0 -0
- package/build/client/_app/immutable/chunks/CF05CSCN.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CVdpVA5-2.js +1 -0
- package/build/client/_app/immutable/chunks/CVdpVA5-2.js.br +2 -0
- package/build/client/_app/immutable/chunks/CVdpVA5-2.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DIVddIqF.js +2 -0
- package/build/client/_app/immutable/chunks/DIVddIqF.js.br +0 -0
- package/build/client/_app/immutable/chunks/DIVddIqF.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DXTlR_fj.js +5462 -0
- package/build/client/_app/immutable/chunks/DXTlR_fj.js.br +0 -0
- package/build/client/_app/immutable/chunks/DXTlR_fj.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{C0dvFiQZ2.js → Dylhiw0P2.js} +1 -1
- package/build/client/_app/immutable/chunks/Dylhiw0P2.js.br +0 -0
- package/build/client/_app/immutable/chunks/Dylhiw0P2.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{5jv0Mvxq.js → blphzly5.js} +1 -1
- package/build/client/_app/immutable/chunks/blphzly5.js.br +2 -0
- package/build/client/_app/immutable/chunks/blphzly5.js.gz +0 -0
- package/build/client/_app/immutable/entry/{app.nA6FWjJw.js → app.DVv5Cs5X.js} +2 -2
- package/build/client/_app/immutable/entry/app.DVv5Cs5X.js.br +0 -0
- package/build/client/_app/immutable/entry/app.DVv5Cs5X.js.gz +0 -0
- package/build/client/_app/immutable/entry/start.44XxKImR.js +1 -0
- package/build/client/_app/immutable/entry/start.44XxKImR.js.br +1 -0
- package/build/client/_app/immutable/entry/start.44XxKImR.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{1.Be6vSNB-.js → 1.DEfTriL7.js} +1 -1
- package/build/client/_app/immutable/nodes/1.DEfTriL7.js.br +0 -0
- package/build/client/_app/immutable/nodes/1.DEfTriL7.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{11.C0Q9fRO2.js → 11.BcXDrSue.js} +1 -1
- package/build/client/_app/immutable/nodes/11.BcXDrSue.js.br +0 -0
- package/build/client/_app/immutable/nodes/11.BcXDrSue.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{13.CedLh4LC.js → 13.otRhkMKy.js} +1 -1
- package/build/client/_app/immutable/nodes/13.otRhkMKy.js.br +0 -0
- package/build/client/_app/immutable/nodes/13.otRhkMKy.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{14.kH0zVFuq.js → 14.C0FzqRRX.js} +1 -1
- package/build/client/_app/immutable/nodes/14.C0FzqRRX.js.br +0 -0
- package/build/client/_app/immutable/nodes/14.C0FzqRRX.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{15.CrGWXR_b.js → 15.rIiFqYaN.js} +1 -1
- package/build/client/_app/immutable/nodes/15.rIiFqYaN.js.br +0 -0
- package/build/client/_app/immutable/nodes/15.rIiFqYaN.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{16.BpzwC_7R.js → 16.C7jD28xO.js} +1 -1
- package/build/client/_app/immutable/nodes/16.C7jD28xO.js.br +0 -0
- package/build/client/_app/immutable/nodes/16.C7jD28xO.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{17.BAd6cLcK.js → 17.BWcO6PBP.js} +1 -1
- package/build/client/_app/immutable/nodes/17.BWcO6PBP.js.br +0 -0
- package/build/client/_app/immutable/nodes/17.BWcO6PBP.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{19.C2M0Gsw8.js → 19.Ce2gGmlG.js} +1 -1
- package/build/client/_app/immutable/nodes/19.Ce2gGmlG.js.br +0 -0
- package/build/client/_app/immutable/nodes/19.Ce2gGmlG.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{2.DCOz2pgm.js → 2.CY20qKG8.js} +1 -1
- package/build/client/_app/immutable/nodes/2.CY20qKG8.js.br +0 -0
- package/build/client/_app/immutable/nodes/2.CY20qKG8.js.gz +0 -0
- package/build/client/_app/immutable/nodes/20.C9y4Pq5e.js +12 -0
- package/build/client/_app/immutable/nodes/20.C9y4Pq5e.js.br +0 -0
- package/build/client/_app/immutable/nodes/20.C9y4Pq5e.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{21.BYQk6N76.js → 21.BaNiUOuW.js} +1 -1
- package/build/client/_app/immutable/nodes/21.BaNiUOuW.js.br +0 -0
- package/build/client/_app/immutable/nodes/21.BaNiUOuW.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{23.awLvoHTA.js → 23.Cs1CpKOT.js} +1 -1
- package/build/client/_app/immutable/nodes/23.Cs1CpKOT.js.br +0 -0
- package/build/client/_app/immutable/nodes/23.Cs1CpKOT.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{24.C4Mj39LU.js → 24.BDPW7D3H.js} +1 -1
- package/build/client/_app/immutable/nodes/24.BDPW7D3H.js.br +0 -0
- package/build/client/_app/immutable/nodes/24.BDPW7D3H.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{27.wW5vDHDP.js → 27.xwzED8a8.js} +1 -1
- package/build/client/_app/immutable/nodes/27.xwzED8a8.js.br +0 -0
- package/build/client/_app/immutable/nodes/27.xwzED8a8.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{28.B5qVpudr.js → 28.3i_My3fJ.js} +1 -1
- package/build/client/_app/immutable/nodes/28.3i_My3fJ.js.br +0 -0
- package/build/client/_app/immutable/nodes/28.3i_My3fJ.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{29.Cd65rWw6.js → 29.CEcPe16D.js} +1 -1
- package/build/client/_app/immutable/nodes/29.CEcPe16D.js.br +0 -0
- package/build/client/_app/immutable/nodes/29.CEcPe16D.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{3.BtG32r4S.js → 3.DIECCgcY.js} +1 -1
- package/build/client/_app/immutable/nodes/3.DIECCgcY.js.br +0 -0
- package/build/client/_app/immutable/nodes/3.DIECCgcY.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{30.DSQJo5j4.js → 30.BRsGl_6g.js} +1 -1
- package/build/client/_app/immutable/nodes/30.BRsGl_6g.js.br +0 -0
- package/build/client/_app/immutable/nodes/30.BRsGl_6g.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{5.CFazNCMc.js → 5.2RlfC8B_.js} +1 -1
- package/build/client/_app/immutable/nodes/5.2RlfC8B_.js.br +0 -0
- package/build/client/_app/immutable/nodes/5.2RlfC8B_.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{6.Ds4bdzGT.js → 6.C6BKkT5y.js} +1 -1
- package/build/client/_app/immutable/nodes/6.C6BKkT5y.js.br +0 -0
- package/build/client/_app/immutable/nodes/6.C6BKkT5y.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{7.DobLGX2q.js → 7.CirOm0bn.js} +1 -1
- package/build/client/_app/immutable/nodes/7.CirOm0bn.js.br +0 -0
- package/build/client/_app/immutable/nodes/7.CirOm0bn.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{8.ymwDCA4x.js → 8.FMalYuF8.js} +1 -1
- package/build/client/_app/immutable/nodes/8.FMalYuF8.js.br +0 -0
- package/build/client/_app/immutable/nodes/8.FMalYuF8.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{9.DjD6fOLl.js → 9.CZ8pmye1.js} +1 -1
- package/build/client/_app/immutable/nodes/9.CZ8pmye1.js.br +0 -0
- package/build/client/_app/immutable/nodes/9.CZ8pmye1.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 +4 -4
- package/build/index.js +4 -4
- package/build/server/chunks/chunks/{AppHeader.js-BfbJ9Wvh.js → AppHeader.js-DPeXjmPi.js} +3 -3
- package/build/server/chunks/chunks/{AppHeader.js-BfbJ9Wvh.js.map → AppHeader.js-DPeXjmPi.js.map} +1 -1
- package/build/server/chunks/chunks/{SideNav.js-CioG2cH9.js → SideNav.js-Dp1EFlHe.js} +2 -2
- package/build/server/chunks/chunks/{SideNav.js-CioG2cH9.js.map → SideNav.js-Dp1EFlHe.js.map} +1 -1
- package/build/server/chunks/chunks/{UserChip.js-2mLw8DG-.js → UserChip.js-JYI3D9Nt.js} +3 -3
- package/build/server/chunks/chunks/{UserChip.js-2mLw8DG-.js.map → UserChip.js-JYI3D9Nt.js.map} +1 -1
- package/build/server/chunks/chunks/{admin-auth.server.js-CpJLI73r.js → admin-auth.server.js-DBasnefm.js} +2 -2
- package/build/server/chunks/chunks/{admin-auth.server.js-CpJLI73r.js.map → admin-auth.server.js-DBasnefm.js.map} +1 -1
- package/build/server/chunks/chunks/admin-config.js-PsmeJe8H.js +3 -0
- package/build/server/chunks/chunks/admin-config.js-PsmeJe8H.js.map +1 -0
- package/build/server/chunks/chunks/{chunk-3SEQKFGD.js-hLBC6n0U.js → chunk-6TMSTNHN.js-3Bz2KNTb.js} +3 -3
- package/build/server/chunks/chunks/{chunk-3SEQKFGD.js-hLBC6n0U.js.map → chunk-6TMSTNHN.js-3Bz2KNTb.js.map} +1 -1
- package/build/server/chunks/chunks/chunk-NVMSD4CC.js-BgY8vvUs.js +2919 -0
- package/build/server/chunks/chunks/chunk-NVMSD4CC.js-BgY8vvUs.js.map +1 -0
- package/build/server/chunks/chunks/{client.js-0QVINoWt.js → client.js-Bpq0VuTu.js} +2 -2
- package/build/server/chunks/chunks/{client.js-0QVINoWt.js.map → client.js-Bpq0VuTu.js.map} +1 -1
- package/build/server/chunks/chunks/{clientCache.server.js-DnMvUcHP.js → clientCache.server.js-C9I-Kcfi.js} +4 -4
- package/build/server/chunks/chunks/{clientCache.server.js-DnMvUcHP.js.map → clientCache.server.js-C9I-Kcfi.js.map} +1 -1
- package/build/server/chunks/chunks/{compute.js-C2CcEWW8.js → compute.js-DGTy3YjO.js} +4 -4
- package/build/server/chunks/chunks/compute.js-DGTy3YjO.js.map +1 -0
- package/build/server/chunks/chunks/{computeLimits.js-vDIRMhzi.js → computeLimits.js-BxiPi8XP.js} +2 -2
- package/build/server/chunks/chunks/{computeLimits.js-vDIRMhzi.js.map → computeLimits.js-BxiPi8XP.js.map} +1 -1
- package/build/server/chunks/chunks/{evictChangedServers.js-Cym-2rnu.js → evictChangedServers.js-jOAazwbs.js} +2 -2
- package/build/server/chunks/chunks/{evictChangedServers.js-Cym-2rnu.js.map → evictChangedServers.js-jOAazwbs.js.map} +1 -1
- package/build/server/chunks/chunks/forms.js-BPoi2g-_.js +2 -0
- package/build/server/chunks/chunks/forms.js-BPoi2g-_.js.map +1 -0
- package/build/server/chunks/chunks/internal.js-WBVEU67X.js.map +1 -1
- package/build/server/chunks/chunks/{internal2.js-DcssKd4i.js → internal2.js-Bh_dm6kd.js} +3 -3
- package/build/server/chunks/chunks/{internal2.js-DcssKd4i.js.map → internal2.js-Bh_dm6kd.js.map} +1 -1
- package/build/server/chunks/chunks/navigation.js-BPoi2g-_.js +2 -0
- package/build/server/chunks/chunks/navigation.js-BPoi2g-_.js.map +1 -0
- package/build/server/chunks/chunks/{package.js-q_o0ZSj1.js → package.js-JTfJ56QW.js} +13 -2
- package/build/server/chunks/chunks/package.js-JTfJ56QW.js.map +1 -0
- package/build/server/chunks/chunks/{state.js-CCKu0CaC.js → state.js-DRIvCY3h.js} +2 -2
- package/build/server/chunks/chunks/{state.js-CCKu0CaC.js.map → state.js-DRIvCY3h.js.map} +1 -1
- package/build/server/chunks/chunks/{stores.js-Ce8w77Gm.js → stores.js-BB7k-hH4.js} +2 -2
- package/build/server/chunks/chunks/{stores.js-Ce8w77Gm.js.map → stores.js-BB7k-hH4.js.map} +1 -1
- package/build/server/chunks/chunks/visualization-BIHTM2KJ.js-tLehqRSm.js +21 -0
- package/build/server/chunks/chunks/visualization-BIHTM2KJ.js-tLehqRSm.js.map +1 -0
- package/build/server/chunks/entries/endpoints/admin/api/compute/{_server.ts.js-CGQtDXgk.js → _server.ts.js-C_ZbbcKO.js} +6 -6
- package/build/server/chunks/entries/endpoints/admin/api/compute/{_server.ts.js-CGQtDXgk.js.map → _server.ts.js-C_ZbbcKO.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/admin/api/orgs/_id_/assets/_kind_/{_server.ts.js-Dud1t6SV.js → _server.ts.js-B8BM3nKO.js} +4 -4
- package/build/server/chunks/entries/endpoints/admin/api/orgs/_id_/assets/_kind_/{_server.ts.js-Dud1t6SV.js.map → _server.ts.js-B8BM3nKO.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/api/compute/{_server.ts.js-CIagEbAJ.js → _server.ts.js-M1fUGfJP.js} +0 -0
- package/build/server/chunks/entries/endpoints/api/compute/{_server.ts.js-CIagEbAJ.js.map → _server.ts.js-M1fUGfJP.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/api/compute/schema/{_server.ts.js-B_OO7fR2.js → _server.ts.js-GXDupsWm.js} +5 -5
- package/build/server/chunks/entries/endpoints/api/compute/schema/{_server.ts.js-B_OO7fR2.js.map → _server.ts.js-GXDupsWm.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/api/definitions/_guid_/{_server.ts.js-B36u-OKF.js → _server.ts.js-Do6zqNwU.js} +4 -4
- package/build/server/chunks/entries/endpoints/api/definitions/_guid_/{_server.ts.js-B36u-OKF.js.map → _server.ts.js-Do6zqNwU.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/api/definitions/_guid_/image/_filename_/{_server.ts.js-DWDGwsDg.js → _server.ts.js-BG-xa8K0.js} +4 -4
- package/build/server/chunks/entries/endpoints/api/definitions/_guid_/image/_filename_/{_server.ts.js-DWDGwsDg.js.map → _server.ts.js-BG-xa8K0.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/api/definitions/_guid_/image/{_server.ts.js-BSb3_snz.js → _server.ts.js-DLZ0bJbO.js} +4 -4
- package/build/server/chunks/entries/endpoints/api/definitions/_guid_/image/{_server.ts.js-BSb3_snz.js.map → _server.ts.js-DLZ0bJbO.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/api/definitions/{_server.ts.js-C5S1tEiY.js → _server.ts.js-Nd67z7Ul.js} +4 -4
- package/build/server/chunks/entries/endpoints/api/definitions/{_server.ts.js-C5S1tEiY.js.map → _server.ts.js-Nd67z7Ul.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/api/org/compute/{_server.ts.js-DKhLOB_A.js → _server.ts.js-Cb3PJwZ1.js} +6 -6
- package/build/server/chunks/entries/endpoints/api/org/compute/{_server.ts.js-DKhLOB_A.js.map → _server.ts.js-Cb3PJwZ1.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/auth/email/callback/{_server.ts.js-DCjY9UXh.js → _server.ts.js-BLbLoQ6f.js} +4 -4
- package/build/server/chunks/entries/endpoints/auth/email/callback/{_server.ts.js-DCjY9UXh.js.map → _server.ts.js-BLbLoQ6f.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/auth/supabase/callback/{_server.ts.js-BG9aKYc1.js → _server.ts.js-BXmQuVvj.js} +4 -4
- package/build/server/chunks/entries/endpoints/auth/supabase/callback/{_server.ts.js-BG9aKYc1.js.map → _server.ts.js-BXmQuVvj.js.map} +1 -1
- package/build/server/chunks/entries/{hooks.server.js-XyglROqL.js → hooks.server.js-Bjj2EDCz.js} +4 -4
- package/build/server/chunks/entries/{hooks.server.js-XyglROqL.js.map → hooks.server.js-Bjj2EDCz.js.map} +1 -1
- package/build/server/chunks/entries/pages/{_error.svelte.js-DiCS9ZOL.js → _error.svelte.js-DWRpiLmd.js} +4 -4
- package/build/server/chunks/entries/pages/{_error.svelte.js-DiCS9ZOL.js.map → _error.svelte.js-DWRpiLmd.js.map} +1 -1
- package/build/server/chunks/entries/pages/{_page.svelte.js-2vvLdcex.js → _page.svelte.js-nw14XI4h.js} +6 -6
- package/build/server/chunks/entries/pages/{_page.svelte.js-2vvLdcex.js.map → _page.svelte.js-nw14XI4h.js.map} +1 -1
- package/build/server/chunks/entries/pages/accept-invite/{_page.server.ts.js-CxZpwJjl.js → _page.server.ts.js-Bt4yAkIi.js} +2 -2
- package/build/server/chunks/entries/pages/accept-invite/{_page.server.ts.js-CxZpwJjl.js.map → _page.server.ts.js-Bt4yAkIi.js.map} +1 -1
- package/build/server/chunks/entries/pages/accept-invite/{_page.svelte.js-D9QFHAsb.js → _page.svelte.js-shC-47yR.js} +4 -4
- package/build/server/chunks/entries/pages/accept-invite/{_page.svelte.js-D9QFHAsb.js.map → _page.svelte.js-shC-47yR.js.map} +1 -1
- package/build/server/chunks/entries/pages/admin/{_error.svelte.js-GXV5rID_.js → _error.svelte.js-DmBK1tNB.js} +4 -4
- package/build/server/chunks/entries/pages/admin/{_error.svelte.js-GXV5rID_.js.map → _error.svelte.js-DmBK1tNB.js.map} +1 -1
- package/build/server/chunks/entries/pages/admin/{_layout.svelte.js-DWK57cLF.js → _layout.svelte.js-BnQZ2Iy-.js} +7 -7
- package/build/server/chunks/entries/pages/admin/{_layout.svelte.js-DWK57cLF.js.map → _layout.svelte.js-BnQZ2Iy-.js.map} +1 -1
- package/build/server/chunks/entries/pages/admin/{_page.server.ts.js-DHyOJHu3.js → _page.server.ts.js-BqXsNjw_.js} +2 -2
- package/build/server/chunks/entries/pages/admin/{_page.server.ts.js-DHyOJHu3.js.map → _page.server.ts.js-BqXsNjw_.js.map} +1 -1
- package/build/server/chunks/entries/pages/admin/{_page.svelte.js-ZrOgAK44.js → _page.svelte.js-CbnxKkHH.js} +4 -4
- package/build/server/chunks/entries/pages/admin/{_page.svelte.js-ZrOgAK44.js.map → _page.svelte.js-CbnxKkHH.js.map} +1 -1
- package/build/server/chunks/entries/pages/admin/compute/{_page.svelte.js-Xc5KUiyr.js → _page.svelte.js-Du8Boz9T.js} +3 -3
- package/build/server/chunks/entries/pages/admin/compute/{_page.svelte.js-Xc5KUiyr.js.map → _page.svelte.js-Du8Boz9T.js.map} +1 -1
- package/build/server/chunks/entries/pages/admin/projects/_id_/{_page.svelte.js-CoN7LVs8.js → _page.svelte.js-D6tOb9S5.js} +3 -3
- package/build/server/chunks/entries/pages/admin/projects/_id_/{_page.svelte.js-CoN7LVs8.js.map → _page.svelte.js-D6tOb9S5.js.map} +1 -1
- package/build/server/chunks/entries/pages/admin/projects/{_page.svelte.js-C8I9RSSC.js → _page.svelte.js-COB9cKx0.js} +3 -3
- package/build/server/chunks/entries/pages/admin/projects/{_page.svelte.js-C8I9RSSC.js.map → _page.svelte.js-COB9cKx0.js.map} +1 -1
- package/build/server/chunks/entries/pages/admin/system/{_page.server.ts.js-5x0QUJqa.js → _page.server.ts.js-Bq7uxxR-.js} +3 -3
- package/build/server/chunks/entries/pages/admin/system/{_page.server.ts.js-5x0QUJqa.js.map → _page.server.ts.js-Bq7uxxR-.js.map} +1 -1
- package/build/server/chunks/entries/pages/admin/system/{_page.svelte.js-CSgpyJ77.js → _page.svelte.js-DtoVK7-K.js} +3 -3
- package/build/server/chunks/entries/pages/admin/system/{_page.svelte.js-CSgpyJ77.js.map → _page.svelte.js-DtoVK7-K.js.map} +1 -1
- package/build/server/chunks/entries/pages/admin/users/{_page.svelte.js-b_IBx7X1.js → _page.svelte.js-DMfzvW8J.js} +3 -3
- package/build/server/chunks/entries/pages/admin/users/{_page.svelte.js-b_IBx7X1.js.map → _page.svelte.js-DMfzvW8J.js.map} +1 -1
- package/build/server/chunks/entries/pages/auth/email/sent/{_page.svelte.js-sm6XU5LM.js → _page.svelte.js-CXxAG1xz.js} +4 -4
- package/build/server/chunks/entries/pages/auth/email/sent/{_page.svelte.js-sm6XU5LM.js.map → _page.svelte.js-CXxAG1xz.js.map} +1 -1
- package/build/server/chunks/entries/pages/auth/email/start/{_page.server.ts.js-BHpJppCP.js → _page.server.ts.js-DpzMyA3w.js} +2 -2
- package/build/server/chunks/entries/pages/auth/email/start/{_page.server.ts.js-BHpJppCP.js.map → _page.server.ts.js-DpzMyA3w.js.map} +1 -1
- package/build/server/chunks/entries/pages/library/_guid_/{_page.server.ts.js-D7rAHAZH.js → _page.server.ts.js-CECsYZWP.js} +3 -3
- package/build/server/chunks/entries/pages/library/_guid_/{_page.server.ts.js-D7rAHAZH.js.map → _page.server.ts.js-CECsYZWP.js.map} +1 -1
- package/build/server/chunks/entries/pages/library/_guid_/{_page.svelte.js-QmIuEZ6d.js → _page.svelte.js-DaCwd-Yj.js} +9 -8
- package/build/server/chunks/entries/pages/library/_guid_/{_page.svelte.js-QmIuEZ6d.js.map → _page.svelte.js-DaCwd-Yj.js.map} +1 -1
- package/build/server/chunks/entries/pages/library/{_page.svelte.js-BBecVQfU.js → _page.svelte.js-B4Nzrzfy.js} +6 -6
- package/build/server/chunks/entries/pages/library/{_page.svelte.js-BBecVQfU.js.map → _page.svelte.js-B4Nzrzfy.js.map} +1 -1
- package/build/server/chunks/entries/pages/login/{_page.server.ts.js-Zrm-wLis.js → _page.server.ts.js-CtQ4IGT7.js} +2 -2
- package/build/server/chunks/entries/pages/login/{_page.server.ts.js-Zrm-wLis.js.map → _page.server.ts.js-CtQ4IGT7.js.map} +1 -1
- package/build/server/chunks/entries/pages/login/{_page.svelte.js-mB5w-Owi.js → _page.svelte.js-Y6Yl4z9a.js} +4 -4
- package/build/server/chunks/entries/pages/login/{_page.svelte.js-mB5w-Owi.js.map → _page.svelte.js-Y6Yl4z9a.js.map} +1 -1
- package/build/server/chunks/entries/pages/logout/{_page.server.ts.js-DwVfN95n.js → _page.server.ts.js-xm3Vp1lV.js} +2 -2
- package/build/server/chunks/entries/pages/logout/{_page.server.ts.js-DwVfN95n.js.map → _page.server.ts.js-xm3Vp1lV.js.map} +1 -1
- package/build/server/chunks/entries/pages/projects/{_layout.svelte.js-B4At_98Y.js → _layout.svelte.js--dRe-afl.js} +6 -6
- package/build/server/chunks/entries/pages/projects/{_layout.svelte.js-B4At_98Y.js.map → _layout.svelte.js--dRe-afl.js.map} +1 -1
- package/build/server/chunks/entries/pages/projects/{_page.svelte.js-CWVFHh-G.js → _page.svelte.js-Db6fcqq1.js} +4 -4
- package/build/server/chunks/entries/pages/projects/{_page.svelte.js-CWVFHh-G.js.map → _page.svelte.js-Db6fcqq1.js.map} +1 -1
- package/build/server/chunks/entries/pages/setup/{_page.server.ts.js-BmWf9JNV.js → _page.server.ts.js-BR-dzHN4.js} +2 -2
- package/build/server/chunks/entries/pages/setup/{_page.server.ts.js-BmWf9JNV.js.map → _page.server.ts.js-BR-dzHN4.js.map} +1 -1
- package/build/server/chunks/entries/pages/setup/{_page.svelte.js-b-ulOSEP.js → _page.svelte.js-v-m0SHvj.js} +4 -4
- package/build/server/chunks/entries/pages/setup/{_page.svelte.js-b-ulOSEP.js.map → _page.svelte.js-v-m0SHvj.js.map} +1 -1
- package/build/server/chunks/entries/pages/team/{_layout.svelte.js-BvrC26--.js → _layout.svelte.js-BUcQyc61.js} +8 -8
- package/build/server/chunks/entries/pages/team/{_layout.svelte.js-BvrC26--.js.map → _layout.svelte.js-BUcQyc61.js.map} +1 -1
- package/build/server/chunks/entries/pages/team/compute/{_page.svelte.js-C9_52_y0.js → _page.svelte.js-Czydk6by.js} +4 -4
- package/build/server/chunks/entries/pages/team/compute/{_page.svelte.js-C9_52_y0.js.map → _page.svelte.js-Czydk6by.js.map} +1 -1
- package/build/server/chunks/entries/pages/team/members/{_page.svelte.js-BQJjsfNw.js → _page.svelte.js-CKin7PK3.js} +3 -3
- package/build/server/chunks/entries/pages/team/members/{_page.svelte.js-BQJjsfNw.js.map → _page.svelte.js-CKin7PK3.js.map} +1 -1
- package/build/server/chunks/entries/pages/team/projects/{_page.svelte.js-D309SyRZ.js → _page.svelte.js-DsISYtRg.js} +3 -3
- package/build/server/chunks/entries/pages/team/projects/{_page.svelte.js-D309SyRZ.js.map → _page.svelte.js-DsISYtRg.js.map} +1 -1
- package/build/server/chunks/entries/pages/team/reclaim/{_page.svelte.js-Cr2oIwjO.js → _page.svelte.js-D9V8gXac.js} +3 -3
- package/build/server/chunks/entries/pages/team/reclaim/{_page.svelte.js-Cr2oIwjO.js.map → _page.svelte.js-D9V8gXac.js.map} +1 -1
- package/build/server/chunks/{handler-BV0yMUrL.js → handler-xpfg6e-f.js} +3 -3
- package/build/server/chunks/{handler-BV0yMUrL.js.map → handler-xpfg6e-f.js.map} +1 -1
- package/build/server/chunks/{index.js-DYSFX7_4.js → index.js-BcDJb77u.js} +2 -2
- package/build/server/chunks/{index.js-DYSFX7_4.js.map → index.js-BcDJb77u.js.map} +1 -1
- package/build/server/chunks/{manifest.js-Dr8Qybxj.js → manifest.js-Djr-18fd.js} +38 -38
- package/build/server/chunks/{manifest.js-Dr8Qybxj.js.map → manifest.js-Djr-18fd.js.map} +1 -1
- package/build/server/chunks/nodes/{1.js-C-8Rfvho.js → 1.js-Qwdz1CC8.js} +3 -3
- package/build/server/chunks/nodes/{1.js-C-8Rfvho.js.map → 1.js-Qwdz1CC8.js.map} +1 -1
- package/build/server/chunks/nodes/{11.js-D1t3p85u.js → 11.js-DyFhqyc4.js} +3 -3
- package/build/server/chunks/nodes/{11.js-D1t3p85u.js.map → 11.js-DyFhqyc4.js.map} +1 -1
- package/build/server/chunks/nodes/{13.js-BUz2QEML.js → 13.js-ivS1Km9a.js} +3 -3
- package/build/server/chunks/nodes/{13.js-BUz2QEML.js.map → 13.js-ivS1Km9a.js.map} +1 -1
- package/build/server/chunks/nodes/{14.js-Bh_aAo2q.js → 14.js-DF8nXoZC.js} +3 -3
- package/build/server/chunks/nodes/{14.js-Bh_aAo2q.js.map → 14.js-DF8nXoZC.js.map} +1 -1
- package/build/server/chunks/nodes/{15.js-BeW2j8Pn.js → 15.js-CfihB92I.js} +8 -8
- package/build/server/chunks/nodes/{15.js-BeW2j8Pn.js.map → 15.js-CfihB92I.js.map} +1 -1
- package/build/server/chunks/nodes/{16.js-DpZU13_f.js → 16.js-30AnGDQF.js} +3 -3
- package/build/server/chunks/nodes/{16.js-DpZU13_f.js.map → 16.js-30AnGDQF.js.map} +1 -1
- package/build/server/chunks/nodes/{17.js-D6i2VLcE.js → 17.js-BTEGLUwj.js} +3 -3
- package/build/server/chunks/nodes/{17.js-D6i2VLcE.js.map → 17.js-BTEGLUwj.js.map} +1 -1
- package/build/server/chunks/nodes/{18.js-B0WEVjij.js → 18.js-DFfwIgO9.js} +5 -5
- package/build/server/chunks/nodes/{18.js-B0WEVjij.js.map → 18.js-DFfwIgO9.js.map} +1 -1
- package/build/server/chunks/nodes/{19.js-DEfe9zf5.js → 19.js-s2v5H_-E.js} +3 -3
- package/build/server/chunks/nodes/{19.js-DEfe9zf5.js.map → 19.js-s2v5H_-E.js.map} +1 -1
- package/build/server/chunks/nodes/{2.js-Co6yIP6U.js → 2.js-Beis-UKR.js} +3 -3
- package/build/server/chunks/nodes/{2.js-Co6yIP6U.js.map → 2.js-Beis-UKR.js.map} +1 -1
- package/build/server/chunks/nodes/{20.js-ClLuWFt_.js → 20.js-XXOyBU-M.js} +8 -8
- package/build/server/chunks/nodes/{20.js-ClLuWFt_.js.map → 20.js-XXOyBU-M.js.map} +1 -1
- package/build/server/chunks/nodes/{21.js-Bo0uqbOG.js → 21.js-mmKZktUK.js} +7 -7
- package/build/server/chunks/nodes/{21.js-Bo0uqbOG.js.map → 21.js-mmKZktUK.js.map} +1 -1
- package/build/server/chunks/nodes/{22.js-CZoQ-vGw.js → 22.js-WVUfBPzO.js} +5 -5
- package/build/server/chunks/nodes/{22.js-CZoQ-vGw.js.map → 22.js-WVUfBPzO.js.map} +1 -1
- package/build/server/chunks/nodes/{23.js-D3waTlCu.js → 23.js-C-5MtLa1.js} +3 -3
- package/build/server/chunks/nodes/{23.js-D3waTlCu.js.map → 23.js-C-5MtLa1.js.map} +1 -1
- package/build/server/chunks/nodes/{24.js-Brn465TS.js → 24.js-BAoMMD0a.js} +7 -7
- package/build/server/chunks/nodes/{24.js-Brn465TS.js.map → 24.js-BAoMMD0a.js.map} +1 -1
- package/build/server/chunks/nodes/{27.js-B7ISOOoI.js → 27.js-BI-YylUw.js} +3 -3
- package/build/server/chunks/nodes/{27.js-B7ISOOoI.js.map → 27.js-BI-YylUw.js.map} +1 -1
- package/build/server/chunks/nodes/{28.js-cV9efQ5F.js → 28.js-CbrX0sU8.js} +3 -3
- package/build/server/chunks/nodes/{28.js-cV9efQ5F.js.map → 28.js-CbrX0sU8.js.map} +1 -1
- package/build/server/chunks/nodes/{29.js-DPR3YsDG.js → 29.js-6jAIILUg.js} +3 -3
- package/build/server/chunks/nodes/{29.js-DPR3YsDG.js.map → 29.js-6jAIILUg.js.map} +1 -1
- package/build/server/chunks/nodes/{3.js-C7QkwQVS.js → 3.js-BTGDPklb.js} +3 -3
- package/build/server/chunks/nodes/{3.js-C7QkwQVS.js.map → 3.js-BTGDPklb.js.map} +1 -1
- package/build/server/chunks/nodes/{30.js-abRTzcez.js → 30.js-VMNOzeyu.js} +3 -3
- package/build/server/chunks/nodes/{30.js-abRTzcez.js.map → 30.js-VMNOzeyu.js.map} +1 -1
- package/build/server/chunks/nodes/{5.js-B1bqOaKM.js → 5.js-C9QDVqtj.js} +3 -3
- package/build/server/chunks/nodes/{5.js-B1bqOaKM.js.map → 5.js-C9QDVqtj.js.map} +1 -1
- package/build/server/chunks/nodes/{6.js-M_KLp3Ex.js → 6.js-CnEl-9M2.js} +3 -3
- package/build/server/chunks/nodes/{6.js-M_KLp3Ex.js.map → 6.js-CnEl-9M2.js.map} +1 -1
- package/build/server/chunks/nodes/{7.js-CnAZu4qX.js → 7.js-jYRFJJNd.js} +3 -3
- package/build/server/chunks/nodes/{7.js-CnAZu4qX.js.map → 7.js-jYRFJJNd.js.map} +1 -1
- package/build/server/chunks/nodes/{8.js-Cw_xT2FY.js → 8.js-o3KjyiXF.js} +7 -7
- package/build/server/chunks/nodes/{8.js-Cw_xT2FY.js.map → 8.js-o3KjyiXF.js.map} +1 -1
- package/build/server/chunks/nodes/{9.js-D6yL5RtR.js → 9.js-B7WFq5go.js} +5 -5
- package/build/server/chunks/nodes/{9.js-D6yL5RtR.js.map → 9.js-B7WFq5go.js.map} +1 -1
- package/package.json +17 -6
- package/build/client/_app/immutable/chunks/5jv0Mvxq.js.br +0 -0
- package/build/client/_app/immutable/chunks/5jv0Mvxq.js.gz +0 -0
- package/build/client/_app/immutable/chunks/98yDWdDP2.js.br +0 -0
- package/build/client/_app/immutable/chunks/98yDWdDP2.js.gz +0 -0
- package/build/client/_app/immutable/chunks/B_9q-Ef12.js +0 -1
- package/build/client/_app/immutable/chunks/B_9q-Ef12.js.br +0 -2
- package/build/client/_app/immutable/chunks/B_9q-Ef12.js.gz +0 -0
- package/build/client/_app/immutable/chunks/C0dvFiQZ2.js.br +0 -0
- package/build/client/_app/immutable/chunks/C0dvFiQZ2.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CP-uwdvv.js.br +0 -0
- package/build/client/_app/immutable/chunks/CP-uwdvv.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CYR7f9ts.js +0 -5404
- package/build/client/_app/immutable/chunks/CYR7f9ts.js.br +0 -0
- package/build/client/_app/immutable/chunks/CYR7f9ts.js.gz +0 -0
- package/build/client/_app/immutable/chunks/D4wDk12M2.js +0 -1
- package/build/client/_app/immutable/chunks/D4wDk12M2.js.br +0 -0
- package/build/client/_app/immutable/chunks/D4wDk12M2.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DjxaiTC2.js.br +0 -0
- package/build/client/_app/immutable/chunks/DjxaiTC2.js.gz +0 -0
- package/build/client/_app/immutable/chunks/Dn9CnbHs.js +0 -2
- package/build/client/_app/immutable/chunks/Dn9CnbHs.js.br +0 -0
- package/build/client/_app/immutable/chunks/Dn9CnbHs.js.gz +0 -0
- package/build/client/_app/immutable/chunks/mHHlwTIC.js.br +0 -0
- package/build/client/_app/immutable/chunks/mHHlwTIC.js.gz +0 -0
- package/build/client/_app/immutable/entry/app.nA6FWjJw.js.br +0 -0
- package/build/client/_app/immutable/entry/app.nA6FWjJw.js.gz +0 -0
- package/build/client/_app/immutable/entry/start.B5X4Akfe.js +0 -1
- package/build/client/_app/immutable/entry/start.B5X4Akfe.js.br +0 -0
- package/build/client/_app/immutable/entry/start.B5X4Akfe.js.gz +0 -0
- package/build/client/_app/immutable/nodes/1.Be6vSNB-.js.br +0 -0
- package/build/client/_app/immutable/nodes/1.Be6vSNB-.js.gz +0 -0
- package/build/client/_app/immutable/nodes/11.C0Q9fRO2.js.br +0 -0
- package/build/client/_app/immutable/nodes/11.C0Q9fRO2.js.gz +0 -0
- package/build/client/_app/immutable/nodes/13.CedLh4LC.js.br +0 -0
- package/build/client/_app/immutable/nodes/13.CedLh4LC.js.gz +0 -0
- package/build/client/_app/immutable/nodes/14.kH0zVFuq.js.br +0 -0
- package/build/client/_app/immutable/nodes/14.kH0zVFuq.js.gz +0 -0
- package/build/client/_app/immutable/nodes/15.CrGWXR_b.js.br +0 -0
- package/build/client/_app/immutable/nodes/15.CrGWXR_b.js.gz +0 -0
- package/build/client/_app/immutable/nodes/16.BpzwC_7R.js.br +0 -0
- package/build/client/_app/immutable/nodes/16.BpzwC_7R.js.gz +0 -0
- package/build/client/_app/immutable/nodes/17.BAd6cLcK.js.br +0 -0
- package/build/client/_app/immutable/nodes/17.BAd6cLcK.js.gz +0 -0
- package/build/client/_app/immutable/nodes/19.C2M0Gsw8.js.br +0 -0
- package/build/client/_app/immutable/nodes/19.C2M0Gsw8.js.gz +0 -0
- package/build/client/_app/immutable/nodes/2.DCOz2pgm.js.br +0 -0
- package/build/client/_app/immutable/nodes/2.DCOz2pgm.js.gz +0 -0
- package/build/client/_app/immutable/nodes/20.BBFt5t9T.js +0 -12
- package/build/client/_app/immutable/nodes/20.BBFt5t9T.js.br +0 -0
- package/build/client/_app/immutable/nodes/20.BBFt5t9T.js.gz +0 -0
- package/build/client/_app/immutable/nodes/21.BYQk6N76.js.br +0 -0
- package/build/client/_app/immutable/nodes/21.BYQk6N76.js.gz +0 -0
- package/build/client/_app/immutable/nodes/23.awLvoHTA.js.br +0 -0
- package/build/client/_app/immutable/nodes/23.awLvoHTA.js.gz +0 -0
- package/build/client/_app/immutable/nodes/24.C4Mj39LU.js.br +0 -0
- package/build/client/_app/immutable/nodes/24.C4Mj39LU.js.gz +0 -0
- package/build/client/_app/immutable/nodes/27.wW5vDHDP.js.br +0 -0
- package/build/client/_app/immutable/nodes/27.wW5vDHDP.js.gz +0 -0
- package/build/client/_app/immutable/nodes/28.B5qVpudr.js.br +0 -0
- package/build/client/_app/immutable/nodes/28.B5qVpudr.js.gz +0 -0
- package/build/client/_app/immutable/nodes/29.Cd65rWw6.js.br +0 -0
- package/build/client/_app/immutable/nodes/29.Cd65rWw6.js.gz +0 -0
- package/build/client/_app/immutable/nodes/3.BtG32r4S.js.br +0 -0
- package/build/client/_app/immutable/nodes/3.BtG32r4S.js.gz +0 -0
- package/build/client/_app/immutable/nodes/30.DSQJo5j4.js.br +0 -0
- package/build/client/_app/immutable/nodes/30.DSQJo5j4.js.gz +0 -0
- package/build/client/_app/immutable/nodes/5.CFazNCMc.js.br +0 -2
- package/build/client/_app/immutable/nodes/5.CFazNCMc.js.gz +0 -0
- package/build/client/_app/immutable/nodes/6.Ds4bdzGT.js.br +0 -0
- package/build/client/_app/immutable/nodes/6.Ds4bdzGT.js.gz +0 -0
- package/build/client/_app/immutable/nodes/7.DobLGX2q.js.br +0 -0
- package/build/client/_app/immutable/nodes/7.DobLGX2q.js.gz +0 -0
- package/build/client/_app/immutable/nodes/8.ymwDCA4x.js.br +0 -0
- package/build/client/_app/immutable/nodes/8.ymwDCA4x.js.gz +0 -0
- package/build/client/_app/immutable/nodes/9.DjD6fOLl.js.br +0 -0
- package/build/client/_app/immutable/nodes/9.DjD6fOLl.js.gz +0 -0
- package/build/server/chunks/chunks/admin-config.js-0akIzvfH.js +0 -3
- package/build/server/chunks/chunks/admin-config.js-0akIzvfH.js.map +0 -1
- package/build/server/chunks/chunks/chunk-INP5HVA2.js-ncp7W0Gu.js +0 -2194
- package/build/server/chunks/chunks/chunk-INP5HVA2.js-ncp7W0Gu.js.map +0 -1
- package/build/server/chunks/chunks/compute.js-C2CcEWW8.js.map +0 -1
- package/build/server/chunks/chunks/forms.js-B5Ttvmbg.js +0 -2
- package/build/server/chunks/chunks/forms.js-B5Ttvmbg.js.map +0 -1
- package/build/server/chunks/chunks/navigation.js-B5Ttvmbg.js +0 -2
- package/build/server/chunks/chunks/navigation.js-B5Ttvmbg.js.map +0 -1
- package/build/server/chunks/chunks/package.js-q_o0ZSj1.js.map +0 -1
- package/build/server/chunks/chunks/visualization-5RH6RSLV.js-DfUogATJ.js +0 -20
- package/build/server/chunks/chunks/visualization-5RH6RSLV.js-DfUogATJ.js.map +0 -1
|
@@ -2,7 +2,7 @@ import { i as index_server_exports } from './index-server.js-Dkqbavz2.js';
|
|
|
2
2
|
import './shared.js-DVKQackd.js';
|
|
3
3
|
import './exports.js-GeBTnchJ.js';
|
|
4
4
|
import { n as noop } from './server.js-DmrfOoxb.js';
|
|
5
|
-
import './internal2.js-
|
|
5
|
+
import './internal2.js-Bh_dm6kd.js';
|
|
6
6
|
import '@sveltejs/kit/internal';
|
|
7
7
|
import '@sveltejs/kit/internal/server';
|
|
8
8
|
|
|
@@ -55,4 +55,4 @@ function invalidateAll() {
|
|
|
55
55
|
}
|
|
56
56
|
|
|
57
57
|
export { goto as g, invalidateAll as i };
|
|
58
|
-
//# sourceMappingURL=client.js-
|
|
58
|
+
//# sourceMappingURL=client.js-Bpq0VuTu.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js-0QVINoWt.js","sources":["../../../../.svelte-kit/output/server/chunks/client.js"],"sourcesContent":["import { a as tick$1, i as settled, t as index_server_exports } from \"./index-server.js\";\nimport { b as unflatten, d as get_message, f as get_status, m as base64_decode, n as TRAILING_SLASH_PARAM, r as create_remote_key, t as INVALIDATED_PARAM, x as noop } from \"./shared.js\";\nimport { s as base } from \"./internal.js\";\nimport { S as compact, f as make_trackable, g as add_data_suffix, h as noop_span, l as decode_params, p as normalize_path, s as hash, u as decode_pathname } from \"./exports.js\";\nimport { Ct as noop$1, N as writable } from \"./server.js\";\nimport \"./internal2.js\";\nimport { HttpError, Redirect, SvelteKitError } from \"@sveltejs/kit/internal\";\nimport \"@sveltejs/kit/internal/server\";\nvar STATES_KEY = \"sveltekit:states\";\nvar HISTORY_INDEX = \"sveltekit:history\";\nvar NAVIGATION_INDEX = \"sveltekit:navigation\";\nvar PRELOAD_PRIORITIES = {\n\ttap: 1,\n\thover: 2,\n\tviewport: 3,\n\teager: 4,\n\toff: -1,\n\tfalse: -1\n};\n//#endregion\n//#region ../../node_modules/.pnpm/@sveltejs+kit@2.69.1_@opentelemetry+api@1.9.1_@sveltejs+vite-plugin-svelte@7.2.0_svelte_a72f1cdc05ff4a6cc1920f4bfb4e9fa9/node_modules/@sveltejs/kit/src/runtime/client/utils.js\nvar origin = \"\";\n/** @param {string | URL} url */\nfunction resolve_url(url) {\n\tif (url instanceof URL) return url;\n\tlet baseURI = document.baseURI;\n\tif (!baseURI) {\n\t\tconst baseTags = document.getElementsByTagName(\"base\");\n\t\tbaseURI = baseTags.length ? baseTags[0].href : document.URL;\n\t}\n\treturn new URL(url, baseURI);\n}\nfunction scroll_state() {\n\treturn {\n\t\tx: pageXOffset,\n\t\ty: pageYOffset\n\t};\n}\n({ ...PRELOAD_PRIORITIES }), PRELOAD_PRIORITIES.hover;\n/** @param {any} value */\nfunction notifiable_store(value) {\n\tconst store = writable(value);\n\tlet ready = true;\n\tfunction notify() {\n\t\tready = true;\n\t\tstore.update((val) => val);\n\t}\n\t/** @param {any} new_value */\n\tfunction set(new_value) {\n\t\tready = false;\n\t\tstore.set(new_value);\n\t}\n\t/** @param {(value: any) => void} run */\n\tfunction subscribe(run) {\n\t\t/** @type {any} */\n\t\tlet old_value;\n\t\treturn store.subscribe((new_value) => {\n\t\t\tif (old_value === void 0 || ready && new_value !== old_value) run(old_value = new_value);\n\t\t});\n\t}\n\treturn {\n\t\tnotify,\n\t\tset,\n\t\tsubscribe\n\t};\n}\nvar updated_listener = { v: noop };\nfunction create_updated_store() {\n\tconst { set, subscribe } = writable(false);\n\treturn {\n\t\tsubscribe,\n\t\tcheck: async () => false\n\t};\n}\n/**\n* Is external if\n* - origin different\n* - path doesn't start with base\n* - uses hash router and pathname is more than base\n* @param {URL} url\n* @param {string} base\n* @param {boolean} hash_routing\n*/\nfunction is_external_url(url, base, hash_routing) {\n\tif (url.origin !== origin || !url.pathname.startsWith(base)) return true;\n\tif (hash_routing) return url.pathname !== location.pathname;\n\treturn false;\n}\n//#endregion\n//#region ../../node_modules/.pnpm/@sveltejs+kit@2.69.1_@opentelemetry+api@1.9.1_@sveltejs+vite-plugin-svelte@7.2.0_svelte_a72f1cdc05ff4a6cc1920f4bfb4e9fa9/node_modules/@sveltejs/kit/src/runtime/client/state.svelte.js\nvar page;\nvar navigating;\nvar updated;\nvar is_legacy = noop$1.toString().includes(\"$$\") || /function \\w+\\(\\) \\{\\}/.test(noop$1.toString());\nvar placeholder_url = \"a:\";\nif (is_legacy) {\n\tpage = {\n\t\tdata: {},\n\t\tform: null,\n\t\terror: null,\n\t\tparams: {},\n\t\troute: { id: null },\n\t\tstate: {},\n\t\tstatus: -1,\n\t\turl: new URL(placeholder_url)\n\t};\n\tnavigating = { current: null };\n\tupdated = { current: false };\n} else {\n\tpage = new class Page {\n\t\tdata = {};\n\t\tform = null;\n\t\terror = null;\n\t\tparams = {};\n\t\troute = { id: null };\n\t\tstate = {};\n\t\tstatus = -1;\n\t\turl = new URL(placeholder_url);\n\t}();\n\tnavigating = new class Navigating {\n\t\tcurrent = null;\n\t}();\n\tupdated = new class Updated {\n\t\tcurrent = false;\n\t}();\n\tupdated_listener.v = () => updated.current = true;\n}\n/**\n* @param {import('@sveltejs/kit').Page} new_page\n*/\nfunction update(new_page) {\n\tObject.assign(page, new_page);\n}\nvar cache = /* @__PURE__ */ new Map();\n/**\n* Should be called on the initial run of load functions that hydrate the page.\n* Saves any requests with cache-control max-age to the cache.\n* @param {URL | string} resource\n* @param {RequestInit} [opts]\n*/\nfunction initial_fetch(resource, opts) {\n\tconst selector = build_selector(resource, opts);\n\tconst script = document.querySelector(selector);\n\tif (script?.textContent) {\n\t\tscript.remove();\n\t\tlet { body, ...init } = JSON.parse(script.textContent);\n\t\tif (script.getAttribute(\"data-b64\") !== null) body = base64_decode(body);\n\t\tconst ttl = script.getAttribute(\"data-ttl\");\n\t\tif (ttl) cache.set(selector, {\n\t\t\tbody,\n\t\t\tinit,\n\t\t\tttl: 1e3 * Number(ttl)\n\t\t});\n\t\treturn Promise.resolve(new Response(body, init));\n\t}\n\treturn window.fetch(resource, opts);\n}\n/**\n* Tries to get the response from the cache, if max-age allows it, else does a fetch.\n* @param {URL | string} resource\n* @param {string} resolved\n* @param {RequestInit} [opts]\n*/\nfunction subsequent_fetch(resource, resolved, opts) {\n\tif (cache.size > 0) {\n\t\tconst selector = build_selector(resource, opts);\n\t\tconst cached = cache.get(selector);\n\t\tif (cached) {\n\t\t\tif (performance.now() < cached.ttl && [\n\t\t\t\t\"default\",\n\t\t\t\t\"force-cache\",\n\t\t\t\t\"only-if-cached\",\n\t\t\t\tvoid 0\n\t\t\t].includes(opts?.cache)) return new Response(cached.body, cached.init);\n\t\t\tcache.delete(selector);\n\t\t}\n\t}\n\treturn window.fetch(resolved, opts);\n}\n/**\n* Build the cache key for a given request\n* @param {URL | RequestInfo} resource\n* @param {RequestInit} [opts]\n*/\nfunction build_selector(resource, opts) {\n\tlet selector = `script[data-sveltekit-fetched][data-url=${JSON.stringify(resource instanceof Request ? resource.url : resource)}]`;\n\tif (opts?.headers || opts?.body) {\n\t\t/** @type {import('types').StrictBody[]} */\n\t\tconst values = [];\n\t\tif (opts.headers) values.push([...new Headers(opts.headers)].join(\",\"));\n\t\tif (opts.body && (typeof opts.body === \"string\" || ArrayBuffer.isView(opts.body))) values.push(opts.body);\n\t\tselector += `[data-hash=\"${hash(...values)}\"]`;\n\t}\n\treturn selector;\n}\n//#endregion\n//#region ../../node_modules/.pnpm/@sveltejs+kit@2.69.1_@opentelemetry+api@1.9.1_@sveltejs+vite-plugin-svelte@7.2.0_svelte_a72f1cdc05ff4a6cc1920f4bfb4e9fa9/node_modules/@sveltejs/kit/src/runtime/client/session-storage.js\n/**\n* Read a value from `sessionStorage`\n* @param {string} key\n* @param {(value: string) => any} parse\n*/\n/*@__NO_SIDE_EFFECTS__*/\nfunction get(key, parse = JSON.parse) {\n\ttry {\n\t\treturn parse(sessionStorage[key]);\n\t} catch {}\n}\n//#endregion\n//#region ../../node_modules/.pnpm/@sveltejs+kit@2.69.1_@opentelemetry+api@1.9.1_@sveltejs+vite-plugin-svelte@7.2.0_svelte_a72f1cdc05ff4a6cc1920f4bfb4e9fa9/node_modules/@sveltejs/kit/src/runtime/client/stream.js\n/**\n* Reads from a stream, decoding it as text and yielding each block of content\n* separated by `delimiter`. The trailing block (if any) is yielded once the\n* stream closes.\n* @param {ReadableStreamDefaultReader<Uint8Array>} reader\n* @param {string} delimiter\n*/\nasync function* read_stream(reader, delimiter) {\n\tlet done = false;\n\tlet buffer = \"\";\n\tconst decoder = new TextDecoder();\n\twhile (true) {\n\t\tlet split = buffer.indexOf(delimiter);\n\t\twhile (split !== -1) {\n\t\t\tyield buffer.slice(0, split);\n\t\t\tbuffer = buffer.slice(split + delimiter.length);\n\t\t\tsplit = buffer.indexOf(delimiter);\n\t\t}\n\t\tif (done) {\n\t\t\tif (buffer) yield buffer;\n\t\t\treturn;\n\t\t}\n\t\tconst chunk = await reader.read();\n\t\tdone = chunk.done;\n\t\tif (chunk.value) buffer += decoder.decode(chunk.value, { stream: true });\n\t\tif (done) buffer += decoder.decode();\n\t}\n}\n//#endregion\n//#region ../../node_modules/.pnpm/@sveltejs+kit@2.69.1_@opentelemetry+api@1.9.1_@sveltejs+vite-plugin-svelte@7.2.0_svelte_a72f1cdc05ff4a6cc1920f4bfb4e9fa9/node_modules/@sveltejs/kit/src/runtime/client/ndjson.js\n/**\n* Yields parsed JSON objects from a ReadableStream of newline-delimited JSON.\n* Each yielded value is the raw `JSON.parse`'d object — callers handle deserialization.\n* @param {ReadableStreamDefaultReader<Uint8Array>} reader\n*/\nasync function* read_ndjson(reader) {\n\tfor await (const block of read_stream(reader, \"\\n\")) {\n\t\tconst line = block.trim();\n\t\tif (line) yield JSON.parse(line);\n\t}\n}\n//#endregion\n//#region ../../node_modules/.pnpm/@sveltejs+kit@2.69.1_@opentelemetry+api@1.9.1_@sveltejs+vite-plugin-svelte@7.2.0_svelte_a72f1cdc05ff4a6cc1920f4bfb4e9fa9/node_modules/@sveltejs/kit/src/runtime/client/client.js\n/** @import { RemoteFunctionDataNode, ServerNodesResponse, ServerRedirectNode } from 'types' */\n/** @import { CacheEntry } from './remote-functions/cache.svelte.js' */\n/** @import { Query } from './remote-functions/query/instance.svelte.js' */\n/** @import { LiveQuery } from './remote-functions/query-live/instance.svelte.js' */\nvar { onMount, tick } = index_server_exports;\n/**\n* Set via transformError, reset and read at the end of navigate.\n* Necessary because a navigation might succeed loading but during rendering\n* an error occurs, at which point the navigation result needs to be overridden with the error result.\n* TODO this is all very hacky, rethink for SvelteKit 3 where we can assume Svelte 5 and do an overhaul of client.js\n* @type {{ error: App.Error, status: number } | null}\n*/\nvar rendering_error = null;\n/**\n* history index -> { x, y }\n* @type {Record<number, { x: number; y: number }>}\n*/\nvar scroll_positions = /* @__PURE__ */ get(\"sveltekit:scroll\") ?? {};\n/**\n* navigation index -> any\n* @type {Record<string, any[]>}\n*/\nvar snapshots = /* @__PURE__ */ get(\"sveltekit:snapshot\") ?? {};\nvar stores = {\n\turl: /* @__PURE__ */ notifiable_store({}),\n\tpage: /* @__PURE__ */ notifiable_store({}),\n\tnavigating: /* @__PURE__ */ writable(null),\n\tupdated: /* @__PURE__ */ create_updated_store()\n};\n/** @param {number} index */\nfunction update_scroll_positions(index) {\n\tscroll_positions[index] = scroll_state();\n}\n/**\n* @param {number} current_history_index\n* @param {number} current_navigation_index\n*/\nfunction clear_onward_history(current_history_index, current_navigation_index) {\n\tlet i = current_history_index + 1;\n\twhile (scroll_positions[i]) {\n\t\tdelete scroll_positions[i];\n\t\ti += 1;\n\t}\n\ti = current_navigation_index + 1;\n\twhile (snapshots[i]) {\n\t\tdelete snapshots[i];\n\t\ti += 1;\n\t}\n}\n/**\n* Loads `href` the old-fashioned way, with a full page reload.\n* Returns a `Promise` that never resolves (to prevent any\n* subsequent work, e.g. history manipulation, from happening)\n* @param {URL} url\n* @param {boolean} [replace] if `true`, will replace the current `history` entry rather than creating a new one with `pushState`\n* @returns {Promise<any>} a promise that never resolves\n*/\nfunction native_navigation(url, replace = false) {\n\tif (replace) location.replace(url.href);\n\telse location.href = url.href;\n\treturn new Promise(noop);\n}\n/**\n* Checks whether a service worker is registered, and if it is,\n* tries to update it.\n*/\nasync function update_service_worker() {\n\tif (\"serviceWorker\" in navigator) {\n\t\tconst registration = await navigator.serviceWorker.getRegistration(base || \"/\");\n\t\tif (registration) await registration.update();\n\t}\n}\n/** @type {import('types').CSRRoute[]} All routes of the app. Only available when kit.router.resolution=client */\nvar routes;\n/** @type {import('types').CSRPageNodeLoader} */\nvar default_layout_loader;\n/** @type {import('types').CSRPageNodeLoader} */\nvar default_error_loader;\n/** @type {HTMLElement} */\nvar target;\n/** @type {import('./types.js').SvelteKitApp} */\nvar app;\n/** @type {Array<((url: URL) => boolean)>} */\nvar invalidated = [];\n/**\n* An array of the `+layout.svelte` and `+page.svelte` component instances\n* that currently live on the page — used for capturing and restoring snapshots.\n* It's updated/manipulated through `bind:this` in `Root.svelte`.\n* @type {import('svelte').SvelteComponent[]}\n*/\nvar components = [];\n/** @type {{id: string, token: {}, promise: Promise<import('./types.js').NavigationResult>, fork: Promise<import('svelte').Fork | null> | null} | null} */\nvar load_cache = null;\nfunction discard_load_cache() {\n\tload_cache?.fork?.then((f) => f?.discard());\n\tload_cache = null;\n\tcurrent_a = {\n\t\telement: void 0,\n\t\thref: void 0\n\t};\n}\n/**\n* @type {Map<string, Promise<URL>>}\n* Cache for client-side rerouting, since it could contain async calls which we want to\n* avoid running multiple times which would slow down navigations (e.g. else preloading\n* wouldn't help because on navigation it would be called again). Since `reroute` should be\n* a pure function (i.e. always return the same) value it's safe to cache across navigations.\n* The server reroute calls don't need to be cached because they are called using `import(...)`\n* which is cached per the JS spec.\n*/\nvar reroute_cache = /* @__PURE__ */ new Map();\n/**\n* Note on before_navigate_callbacks, on_navigate_callbacks and after_navigate_callbacks:\n* do not re-assign as some closures keep references to these Sets\n*/\n/** @type {Set<(navigation: import('@sveltejs/kit').BeforeNavigate) => void>} */\nvar before_navigate_callbacks = /* @__PURE__ */ new Set();\n/** @type {Set<(navigation: import('@sveltejs/kit').OnNavigate) => import('types').MaybePromise<(() => void) | void>>} */\nvar on_navigate_callbacks = /* @__PURE__ */ new Set();\n/** @type {Set<(navigation: import('@sveltejs/kit').AfterNavigate) => void>} */\nvar after_navigate_callbacks = /* @__PURE__ */ new Set();\n/** @type {import('./types.js').NavigationState & { nav: import('@sveltejs/kit').NavigationEvent }} */\nvar current = {\n\tbranch: [],\n\terror: null,\n\turl: null,\n\tnav: null\n};\n/** this being true means we SSR'd */\nvar hydrated = false;\nvar started = false;\nvar autoscroll = true;\nvar is_navigating = false;\nvar force_invalidation = false;\n/** @type {import('svelte').SvelteComponent} */\nvar root;\n/** @type {number} keeping track of the history index in order to prevent popstate navigation events if needed */\nvar current_history_index;\n/** @type {number} */\nvar current_navigation_index;\n/** @type {{}} */\nvar token;\n/**\n* A set of tokens which are associated to current preloads.\n* If a preload becomes a real navigation, it's removed from the set.\n* If a preload token is in the set and the preload errors, the error\n* handling logic (for example reloading) is skipped.\n*/\n/** @type {Set<{}>} */\nvar preload_tokens = /* @__PURE__ */ new Set();\n/**\n* @type {Map<string, Map<string, CacheEntry<Query<any>>>>}\n* A map of query id -> payload -> query internals for all active queries.\n*/\nvar query_map = /* @__PURE__ */ new Map();\n/**\n* @type {Map<string, Map<string, CacheEntry<LiveQuery<any>>>>}\n* A map of id -> payload -> live query internals for all active queries.\n*/\nvar live_query_map = /* @__PURE__ */ new Map();\nfunction reset_invalidation() {\n\tinvalidated.length = 0;\n\tforce_invalidation = false;\n}\n/** @param {number} index */\nfunction capture_snapshot(index) {\n\tif (components.some((c) => c?.snapshot)) snapshots[index] = components.map((c) => c?.snapshot?.capture());\n}\n/** @param {number} index */\nfunction restore_snapshot(index) {\n\tsnapshots[index]?.forEach((value, i) => {\n\t\tcomponents[i]?.snapshot?.restore(value);\n\t});\n}\n/**\n* @param {string | URL} url\n* @param {{ replaceState?: boolean; noScroll?: boolean; keepFocus?: boolean; invalidateAll?: boolean; invalidate?: Array<string | URL | ((url: URL) => boolean)>; state?: Record<string, any> }} options\n* @param {number} redirect_count\n* @param {{}} [nav_token]\n* @returns {Promise<void>}\n*/\nasync function _goto(url, options, redirect_count, nav_token) {\n\t/** @type {Set<string>} */\n\tlet query_keys;\n\t/** @type {Set<string>} */\n\tlet live_query_keys;\n\tif (options.invalidateAll) discard_load_cache();\n\tawait navigate({\n\t\ttype: \"goto\",\n\t\turl: resolve_url(url),\n\t\tkeepfocus: options.keepFocus,\n\t\tnoscroll: options.noScroll,\n\t\treplace_state: options.replaceState,\n\t\tstate: options.state,\n\t\tredirect_count,\n\t\tnav_token,\n\t\taccept: () => {\n\t\t\tif (options.invalidateAll) {\n\t\t\t\tforce_invalidation = true;\n\t\t\t\tquery_keys = /* @__PURE__ */ new Set();\n\t\t\t\tfor (const [id, entries] of query_map) for (const [payload, entry] of entries) {\n\t\t\t\t\tentry.resource?.reset();\n\t\t\t\t\tquery_keys.add(create_remote_key(id, payload));\n\t\t\t\t}\n\t\t\t\tlive_query_keys = /* @__PURE__ */ new Set();\n\t\t\t\tfor (const [id, entries] of live_query_map) for (const payload of entries.keys()) live_query_keys.add(create_remote_key(id, payload));\n\t\t\t}\n\t\t\tif (options.invalidate) options.invalidate.forEach(push_invalidated);\n\t\t}\n\t});\n\tif (options.invalidateAll) tick$1().then(tick$1).then(() => {\n\t\tfor (const [id, entries] of query_map) for (const [payload, { resource }] of entries) if (query_keys?.has(create_remote_key(id, payload))) resource.start();\n\t\tfor (const [id, entries] of live_query_map) for (const [payload, { resource }] of entries) if (live_query_keys?.has(create_remote_key(id, payload))) resource.reconnect();\n\t});\n}\n/**\n* @param {import('./types.js').NavigationFinished} result\n* @param {HTMLElement} target\n* @param {boolean} hydrate\n*/\nasync function initialize(result, target, hydrate) {\n\t/** @type {import('@sveltejs/kit').NavigationEvent} */\n\tconst nav = {\n\t\tparams: current.params,\n\t\troute: { id: current.route?.id ?? null },\n\t\turl: new URL(location.href)\n\t};\n\tcurrent = {\n\t\t...result.state,\n\t\tnav\n\t};\n\tupdate(result.props.page);\n\troot = new app.root({\n\t\ttarget,\n\t\tprops: {\n\t\t\t...result.props,\n\t\t\tstores,\n\t\t\tcomponents\n\t\t},\n\t\thydrate,\n\t\tsync: false,\n\t\ttransformError: void 0\n\t});\n\tawait Promise.resolve();\n\tif (hydrate) {\n\t\t/** @type {import('@sveltejs/kit').AfterNavigate} */\n\t\tconst navigation = {\n\t\t\tfrom: null,\n\t\t\tto: {\n\t\t\t\t...nav,\n\t\t\t\tscroll: scroll_positions[current_history_index] ?? scroll_state()\n\t\t\t},\n\t\t\twillUnload: false,\n\t\t\ttype: \"enter\",\n\t\t\tcomplete: Promise.resolve()\n\t\t};\n\t\tafter_navigate_callbacks.forEach((fn) => fn(navigation));\n\t}\n\trestore_snapshot(current_navigation_index);\n\tstarted = true;\n}\n/**\n*\n* @param {{\n* url: URL;\n* params: Record<string, string>;\n* branch: Array<import('./types.js').BranchNode | undefined>;\n* errors?: Array<import('types').CSRPageNodeLoader | undefined>;\n* status: number;\n* error: App.Error | null;\n* route: import('types').CSRRoute | null;\n* form?: Record<string, any> | null;\n* }} opts\n*/\nasync function get_navigation_result_from_branch({ url, params, branch, errors, status, error, route, form }) {\n\t/** @type {import('types').TrailingSlash} */\n\tlet slash = \"never\";\n\tif (base && (url.pathname === base || url.pathname === base + \"/\")) slash = \"always\";\n\telse for (const node of branch) if (node?.slash !== void 0) slash = node.slash;\n\turl.pathname = normalize_path(url.pathname, slash);\n\turl.search = url.search;\n\t/** @type {import('./types.js').NavigationFinished} */\n\tconst result = {\n\t\ttype: \"loaded\",\n\t\tstate: {\n\t\t\turl,\n\t\t\tparams,\n\t\t\tbranch,\n\t\t\terror,\n\t\t\troute\n\t\t},\n\t\tprops: {\n\t\t\tconstructors: compact(branch).map((branch_node) => branch_node.node.component),\n\t\t\tpage: clone_page(page)\n\t\t}\n\t};\n\tif (form !== void 0) result.props.form = form;\n\tlet data = {};\n\tlet data_changed = !page;\n\tlet p = 0;\n\tfor (let i = 0; i < Math.max(branch.length, current.branch.length); i += 1) {\n\t\tconst node = branch[i];\n\t\tconst prev = current.branch[i];\n\t\tif (node?.data !== prev?.data) data_changed = true;\n\t\tif (!node) continue;\n\t\tdata = {\n\t\t\t...data,\n\t\t\t...node.data\n\t\t};\n\t\tif (data_changed) result.props[`data_${p}`] = data;\n\t\tp += 1;\n\t}\n\tif (!current.url || url.href !== current.url.href || current.error !== error || form !== void 0 && form !== page.form || data_changed) result.props.page = {\n\t\terror,\n\t\tparams,\n\t\troute: { id: route?.id ?? null },\n\t\tstate: {},\n\t\tstatus,\n\t\turl: new URL(url),\n\t\tform: form ?? null,\n\t\tdata: data_changed ? data : page.data\n\t};\n\treturn result;\n}\n/**\n* Call the universal load function of the given node, if it exists.\n*\n* @param {{\n* loader: import('types').CSRPageNodeLoader;\n* \t parent: () => Promise<Record<string, any>>;\n* url: URL;\n* params: Record<string, string>;\n* route: { id: string | null };\n* \t server_data_node: import('./types.js').DataNode | null;\n* }} options\n* @returns {Promise<import('./types.js').BranchNode>}\n*/\nasync function load_node({ loader, parent, url, params, route, server_data_node }) {\n\t/** @type {Record<string, any> | null} */\n\tlet data = null;\n\tlet is_tracking = true;\n\t/** @type {import('types').Uses} */\n\tconst uses = {\n\t\tdependencies: /* @__PURE__ */ new Set(),\n\t\tparams: /* @__PURE__ */ new Set(),\n\t\tparent: false,\n\t\troute: false,\n\t\turl: false,\n\t\tsearch_params: /* @__PURE__ */ new Set()\n\t};\n\tconst node = await loader();\n\tif (node.universal?.load) {\n\t\t/** @param {string[]} deps */\n\t\tfunction depends(...deps) {\n\t\t\tfor (const dep of deps) {\n\t\t\t\tconst { href } = new URL(dep, url);\n\t\t\t\tuses.dependencies.add(href);\n\t\t\t}\n\t\t}\n\t\t/** @type {import('@sveltejs/kit').LoadEvent} */\n\t\tconst load_input = {\n\t\t\ttracing: {\n\t\t\t\tenabled: false,\n\t\t\t\troot: noop_span,\n\t\t\t\tcurrent: noop_span\n\t\t\t},\n\t\t\troute: new Proxy(route, { get: (target, key) => {\n\t\t\t\tif (is_tracking) uses.route = true;\n\t\t\t\treturn target[key];\n\t\t\t} }),\n\t\t\tparams: new Proxy(params, { get: (target, key) => {\n\t\t\t\tif (is_tracking) uses.params.add(key);\n\t\t\t\treturn target[key];\n\t\t\t} }),\n\t\t\tdata: server_data_node?.data ?? null,\n\t\t\turl: make_trackable(url, () => {\n\t\t\t\tif (is_tracking) uses.url = true;\n\t\t\t}, (param) => {\n\t\t\t\tif (is_tracking) uses.search_params.add(param);\n\t\t\t}, app.hash),\n\t\t\tasync fetch(resource, init) {\n\t\t\t\tif (resource instanceof Request) init = {\n\t\t\t\t\tbody: resource.method === \"GET\" || resource.method === \"HEAD\" ? void 0 : await resource.blob(),\n\t\t\t\t\tcache: resource.cache,\n\t\t\t\t\tcredentials: resource.credentials,\n\t\t\t\t\theaders: [...resource.headers].length > 0 ? resource?.headers : void 0,\n\t\t\t\t\tintegrity: resource.integrity,\n\t\t\t\t\tkeepalive: resource.keepalive,\n\t\t\t\t\tmethod: resource.method,\n\t\t\t\t\tmode: resource.mode,\n\t\t\t\t\tredirect: resource.redirect,\n\t\t\t\t\treferrer: resource.referrer,\n\t\t\t\t\treferrerPolicy: resource.referrerPolicy,\n\t\t\t\t\tsignal: resource.signal,\n\t\t\t\t\t...init\n\t\t\t\t};\n\t\t\t\tconst { resolved, promise } = resolve_fetch_url(resource, init, url);\n\t\t\t\tif (is_tracking) depends(resolved.href);\n\t\t\t\treturn promise;\n\t\t\t},\n\t\t\tsetHeaders: noop,\n\t\t\tdepends,\n\t\t\tparent() {\n\t\t\t\tif (is_tracking) uses.parent = true;\n\t\t\t\treturn parent();\n\t\t\t},\n\t\t\tuntrack(fn) {\n\t\t\t\tis_tracking = false;\n\t\t\t\ttry {\n\t\t\t\t\treturn fn();\n\t\t\t\t} finally {\n\t\t\t\t\tis_tracking = true;\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\tdata = await node.universal.load.call(null, load_input) ?? null;\n\t}\n\treturn {\n\t\tnode,\n\t\tloader,\n\t\tserver: server_data_node,\n\t\tuniversal: node.universal?.load ? {\n\t\t\ttype: \"data\",\n\t\t\tdata,\n\t\t\tuses\n\t\t} : null,\n\t\tdata: data ?? server_data_node?.data ?? null,\n\t\tslash: node.universal?.trailingSlash ?? server_data_node?.slash\n\t};\n}\n/**\n* @param {Request | string | URL} input\n* @param {RequestInit | undefined} init\n* @param {URL} url\n*/\nfunction resolve_fetch_url(input, init, url) {\n\tlet requested = input instanceof Request ? input.url : input;\n\tconst resolved = new URL(requested, url);\n\tif (resolved.origin === url.origin) requested = resolved.href.slice(url.origin.length);\n\treturn {\n\t\tresolved,\n\t\tpromise: started ? subsequent_fetch(requested, resolved.href, init) : initial_fetch(requested, init)\n\t};\n}\n/**\n* @param {boolean} parent_changed\n* @param {boolean} route_changed\n* @param {boolean} url_changed\n* @param {Set<string>} search_params_changed\n* @param {import('types').Uses | undefined} uses\n* @param {Record<string, string>} params\n*/\nfunction has_changed(parent_changed, route_changed, url_changed, search_params_changed, uses, params) {\n\tif (force_invalidation) return true;\n\tif (!uses) return false;\n\tif (uses.parent && parent_changed) return true;\n\tif (uses.route && route_changed) return true;\n\tif (uses.url && url_changed) return true;\n\tfor (const tracked_params of uses.search_params) if (search_params_changed.has(tracked_params)) return true;\n\tfor (const param of uses.params) if (params[param] !== current.params[param]) return true;\n\tfor (const href of uses.dependencies) if (invalidated.some((fn) => fn(new URL(href)))) return true;\n\treturn false;\n}\n/**\n* @param {import('types').ServerDataNode | import('types').ServerDataSkippedNode | null} node\n* @param {import('./types.js').DataNode | null} [previous]\n* @returns {import('./types.js').DataNode | null}\n*/\nfunction create_data_node(node, previous) {\n\tif (node?.type === \"data\") return node;\n\tif (node?.type === \"skip\") return previous ?? null;\n\treturn null;\n}\n/**\n* @param {URL | null} old_url\n* @param {URL} new_url\n*/\nfunction diff_search_params(old_url, new_url) {\n\tif (!old_url) return new Set(new_url.searchParams.keys());\n\tconst changed = /* @__PURE__ */ new Set([...old_url.searchParams.keys(), ...new_url.searchParams.keys()]);\n\tfor (const key of changed) {\n\t\tconst old_values = old_url.searchParams.getAll(key);\n\t\tconst new_values = new_url.searchParams.getAll(key);\n\t\tif (old_values.every((value) => new_values.includes(value)) && new_values.every((value) => old_values.includes(value))) changed.delete(key);\n\t}\n\treturn changed;\n}\n/**\n* @param {Omit<import('./types.js').NavigationFinished['state'], 'branch'> & { error: App.Error }} opts\n* @returns {import('./types.js').NavigationFinished}\n*/\nfunction preload_error({ error, url, route, params }) {\n\treturn {\n\t\ttype: \"loaded\",\n\t\tstate: {\n\t\t\terror,\n\t\t\turl,\n\t\t\troute,\n\t\t\tparams,\n\t\t\tbranch: []\n\t\t},\n\t\tprops: {\n\t\t\tpage: clone_page(page),\n\t\t\tconstructors: []\n\t\t}\n\t};\n}\n/**\n* @overload\n* @param {import('./types.js').NavigationIntent} intent\n* @returns {Promise<import('./types.js').NavigationResult | undefined>}\n*/\n/**\n* @overload\n* @param {import('./types.js').NavigationIntent & { preload: {} }} intent\n* @returns {Promise<import('./types.js').NavigationResult>}\n*/\n/**\n* @param {import('./types.js').NavigationIntent & { preload?: {} }} intent\n* @returns {Promise<import('./types.js').NavigationResult | undefined>}\n*/\nasync function load_route({ id, invalidating, url, params, route, preload }) {\n\tif (load_cache?.id === id) {\n\t\tpreload_tokens.delete(load_cache.token);\n\t\treturn load_cache.promise;\n\t}\n\tconst { errors, layouts, leaf } = route;\n\tconst loaders = [...layouts, leaf];\n\terrors.forEach((loader) => loader?.().catch(noop));\n\tloaders.forEach((loader) => loader?.[1]().catch(noop));\n\t/** @type {import('types').ServerNodesResponse | import('types').ServerRedirectNode | null} */\n\tlet server_data = null;\n\tconst url_changed = current.url ? id !== get_page_key(current.url) : false;\n\tconst route_changed = current.route ? route.id !== current.route.id : false;\n\tconst search_params_changed = diff_search_params(current.url, url);\n\tlet parent_invalid = false;\n\t{\n\t\tconst invalid_server_nodes = loaders.map((loader, i) => {\n\t\t\tconst previous = current.branch[i];\n\t\t\tconst invalid = !!loader?.[0] && (previous?.loader !== loader[1] || has_changed(parent_invalid, route_changed, url_changed, search_params_changed, previous.server?.uses, params));\n\t\t\tif (invalid) parent_invalid = true;\n\t\t\treturn invalid;\n\t\t});\n\t\tif (invalid_server_nodes.some(Boolean)) {\n\t\t\ttry {\n\t\t\t\tserver_data = await load_data(url, invalid_server_nodes);\n\t\t\t} catch (error) {\n\t\t\t\tconst handled_error = await handle_error(error, {\n\t\t\t\t\turl,\n\t\t\t\t\tparams,\n\t\t\t\t\troute: { id }\n\t\t\t\t});\n\t\t\t\tif (preload && preload_tokens.has(preload)) return preload_error({\n\t\t\t\t\terror: handled_error,\n\t\t\t\t\turl,\n\t\t\t\t\tparams,\n\t\t\t\t\troute\n\t\t\t\t});\n\t\t\t\treturn load_root_error_page({\n\t\t\t\t\tstatus: get_status(error),\n\t\t\t\t\terror: handled_error,\n\t\t\t\t\turl,\n\t\t\t\t\troute\n\t\t\t\t});\n\t\t\t}\n\t\t\tif (server_data.type === \"redirect\") return server_data;\n\t\t}\n\t}\n\tconst server_data_nodes = server_data?.nodes;\n\tlet parent_changed = false;\n\tconst branch_promises = loaders.map(async (loader, i) => {\n\t\tif (!loader) return;\n\t\t/** @type {import('./types.js').BranchNode | undefined} */\n\t\tconst previous = current.branch[i];\n\t\tconst server_data_node = server_data_nodes?.[i];\n\t\tif ((!server_data_node || server_data_node.type === \"skip\") && loader[1] === previous?.loader && !has_changed(parent_changed, route_changed, url_changed, search_params_changed, previous.universal?.uses, params)) return previous;\n\t\tparent_changed = true;\n\t\tif (server_data_node?.type === \"error\") throw server_data_node;\n\t\treturn load_node({\n\t\t\tloader: loader[1],\n\t\t\turl,\n\t\t\tparams,\n\t\t\troute,\n\t\t\tparent: async () => {\n\t\t\t\tconst data = {};\n\t\t\t\tfor (let j = 0; j < i; j += 1) Object.assign(data, (await branch_promises[j])?.data);\n\t\t\t\treturn data;\n\t\t\t},\n\t\t\tserver_data_node: create_data_node(server_data_node === void 0 && loader[0] ? { type: \"skip\" } : server_data_node ?? null, loader[0] ? previous?.server : void 0)\n\t\t});\n\t});\n\tfor (const p of branch_promises) p.catch(noop);\n\t/** @type {Array<import('./types.js').BranchNode | undefined>} */\n\tconst branch = [];\n\tfor (let i = 0; i < loaders.length; i += 1) if (loaders[i]) try {\n\t\tbranch.push(await branch_promises[i]);\n\t} catch (err) {\n\t\tif (err instanceof Redirect) return {\n\t\t\ttype: \"redirect\",\n\t\t\tlocation: err.location\n\t\t};\n\t\tif (preload && preload_tokens.has(preload)) return preload_error({\n\t\t\terror: await handle_error(err, {\n\t\t\t\tparams,\n\t\t\t\turl,\n\t\t\t\troute: { id: route.id }\n\t\t\t}),\n\t\t\turl,\n\t\t\tparams,\n\t\t\troute\n\t\t});\n\t\tlet status = get_status(err);\n\t\t/** @type {App.Error} */\n\t\tlet error;\n\t\tif (server_data_nodes?.includes(err)) {\n\t\t\tstatus = err.status ?? status;\n\t\t\terror = err.error;\n\t\t} else if (err instanceof HttpError) error = err.body;\n\t\telse {\n\t\t\tif (await stores.updated.check()) {\n\t\t\t\tawait update_service_worker();\n\t\t\t\treturn await native_navigation(url);\n\t\t\t}\n\t\t\terror = await handle_error(err, {\n\t\t\t\tparams,\n\t\t\t\turl,\n\t\t\t\troute: { id: route.id }\n\t\t\t});\n\t\t}\n\t\tconst error_load = await load_nearest_error_page(i, branch, errors);\n\t\tif (error_load) return get_navigation_result_from_branch({\n\t\t\turl,\n\t\t\tparams,\n\t\t\tbranch: branch.slice(0, error_load.idx).concat(error_load.node),\n\t\t\terrors,\n\t\t\tstatus,\n\t\t\terror,\n\t\t\troute\n\t\t});\n\t\telse return await server_fallback(url, { id: route.id }, error, status);\n\t}\n\telse branch.push(void 0);\n\treturn get_navigation_result_from_branch({\n\t\turl,\n\t\tparams,\n\t\tbranch,\n\t\terrors,\n\t\tstatus: 200,\n\t\terror: null,\n\t\troute,\n\t\tform: invalidating ? void 0 : null\n\t});\n}\n/**\n* @param {number} i Start index to backtrack from\n* @param {Array<import('./types.js').BranchNode | undefined>} branch Branch to backtrack\n* @param {Array<import('types').CSRPageNodeLoader | undefined>} errors All error pages for this branch\n* @returns {Promise<{idx: number; node: import('./types.js').BranchNode} | undefined>}\n*/\nasync function load_nearest_error_page(i, branch, errors) {\n\twhile (i--) if (errors[i]) {\n\t\tlet j = i;\n\t\twhile (!branch[j]) j -= 1;\n\t\ttry {\n\t\t\treturn {\n\t\t\t\tidx: j + 1,\n\t\t\t\tnode: {\n\t\t\t\t\tnode: await errors[i](),\n\t\t\t\t\tloader: errors[i],\n\t\t\t\t\tdata: {},\n\t\t\t\t\tserver: null,\n\t\t\t\t\tuniversal: null\n\t\t\t\t}\n\t\t\t};\n\t\t} catch {\n\t\t\tcontinue;\n\t\t}\n\t}\n}\n/**\n* @param {{\n* status: number;\n* error: App.Error;\n* url: URL;\n* route: { id: string | null }\n* }} opts\n* @returns {Promise<import('./types.js').NavigationFinished | undefined>} returns `undefined` in case of a redirect\n*/\nasync function load_root_error_page({ status, error, url, route }) {\n\t/** @type {Record<string, string>} */\n\tconst params = {};\n\t/** @type {import('types').ServerDataNode | null} */\n\tlet server_data_node = null;\n\tif (app.server_loads[0] === 0) try {\n\t\tconst server_data = await load_data(url, [true]);\n\t\tif (server_data.type !== \"data\" || server_data.nodes[0] && server_data.nodes[0].type !== \"data\") throw 0;\n\t\tserver_data_node = server_data.nodes[0] ?? null;\n\t} catch (e) {\n\t\tif (!(e instanceof HttpError && e.status === 404) && (url.origin !== origin || url.pathname !== location.pathname || hydrated)) return await native_navigation(url);\n\t}\n\ttry {\n\t\treturn get_navigation_result_from_branch({\n\t\t\turl,\n\t\t\tparams,\n\t\t\tbranch: [await load_node({\n\t\t\t\tloader: default_layout_loader,\n\t\t\t\turl,\n\t\t\t\tparams,\n\t\t\t\troute,\n\t\t\t\tparent: () => Promise.resolve({}),\n\t\t\t\tserver_data_node: create_data_node(server_data_node)\n\t\t\t}), {\n\t\t\t\tnode: await default_error_loader(),\n\t\t\t\tloader: default_error_loader,\n\t\t\t\tuniversal: null,\n\t\t\t\tserver: null,\n\t\t\t\tdata: null\n\t\t\t}],\n\t\t\tstatus,\n\t\t\terror,\n\t\t\terrors: [],\n\t\t\troute: null\n\t\t});\n\t} catch (error) {\n\t\tif (error instanceof Redirect) {\n\t\t\tawait _goto(new URL(error.location, location.href), {}, 0);\n\t\t\treturn;\n\t\t}\n\t\tconst error_template = await app.get_error_template();\n\t\tconst handled = await handle_error(error, {\n\t\t\turl,\n\t\t\tparams,\n\t\t\troute\n\t\t});\n\t\tconst html = error_template({\n\t\t\tstatus,\n\t\t\tmessage: String(handled?.message ?? \"\").replace(/&/g, \"&\").replace(/</g, \"<\").replace(/>/g, \">\")\n\t\t});\n\t\tconst parsed = new DOMParser().parseFromString(html, \"text/html\");\n\t\tdocument.documentElement.replaceChild(document.adoptNode(parsed.head), document.head);\n\t\tdocument.documentElement.replaceChild(document.adoptNode(parsed.body), document.body);\n\t\tthrow error;\n\t}\n}\n/**\n* Resolve the relative rerouted URL for a client-side navigation\n* @param {URL} url\n* @returns {Promise<URL | undefined>}\n*/\nasync function get_rerouted_url(url) {\n\tconst href = url.href;\n\tif (reroute_cache.has(href)) return reroute_cache.get(href);\n\tlet rerouted;\n\ttry {\n\t\tconst promise = (async () => {\n\t\t\tlet rerouted = await app.hooks.reroute({\n\t\t\t\turl: new URL(url),\n\t\t\t\tfetch: async (input, init) => {\n\t\t\t\t\treturn resolve_fetch_url(input, init, url).promise;\n\t\t\t\t}\n\t\t\t}) ?? url;\n\t\t\tif (typeof rerouted === \"string\") {\n\t\t\t\tconst tmp = new URL(url);\n\t\t\t\tif (app.hash) tmp.hash = rerouted;\n\t\t\t\telse tmp.pathname = rerouted;\n\t\t\t\trerouted = tmp;\n\t\t\t}\n\t\t\treturn rerouted;\n\t\t})();\n\t\treroute_cache.set(href, promise);\n\t\trerouted = await promise;\n\t} catch (e) {\n\t\treroute_cache.delete(href);\n\t\treturn;\n\t}\n\treturn rerouted;\n}\n/**\n* Resolve the full info (which route, params, etc.) for a client-side navigation from the URL,\n* taking the reroute hook into account. If this isn't a client-side-navigation (or the URL is undefined),\n* returns undefined.\n* @param {URL | undefined} url\n* @param {boolean} invalidating\n* @returns {Promise<import('./types.js').NavigationIntent | undefined>}\n*/\nasync function get_navigation_intent(url, invalidating) {\n\tif (!url) return;\n\tif (is_external_url(url, base, app.hash)) return;\n\t{\n\t\tconst rerouted = await get_rerouted_url(url);\n\t\tif (!rerouted) return;\n\t\tconst path = get_url_path(rerouted);\n\t\tfor (const route of routes) {\n\t\t\tconst params = route.exec(path);\n\t\t\tif (params) return {\n\t\t\t\tid: get_page_key(url),\n\t\t\t\tinvalidating,\n\t\t\t\troute,\n\t\t\t\tparams: decode_params(params),\n\t\t\t\turl\n\t\t\t};\n\t\t}\n\t}\n}\n/** @param {URL} url */\nfunction get_url_path(url) {\n\treturn decode_pathname(app.hash ? url.hash.replace(/^#/, \"\").replace(/[?#].+/, \"\") : url.pathname.slice(base.length)) || \"/\";\n}\n/** @param {URL} url */\nfunction get_page_key(url) {\n\treturn (app.hash ? url.hash.replace(/^#/, \"\") : url.pathname) + url.search;\n}\n/**\n* @param {{\n* url: URL;\n* type: import('@sveltejs/kit').Navigation[\"type\"];\n* intent?: import('./types.js').NavigationIntent;\n* delta?: number;\n* event?: PopStateEvent | MouseEvent;\n* scroll?: { x: number, y: number };\n* }} opts\n*/\nfunction _before_navigate({ url, type, intent, delta, event, scroll }) {\n\tlet should_block = false;\n\tconst nav = create_navigation(current, intent, url, type, scroll ?? null);\n\tif (delta !== void 0) nav.navigation.delta = delta;\n\tif (event !== void 0) nav.navigation.event = event;\n\tconst cancellable = {\n\t\t...nav.navigation,\n\t\tcancel: () => {\n\t\t\tshould_block = true;\n\t\t\tnav.reject(/* @__PURE__ */ new Error(\"navigation cancelled\"));\n\t\t}\n\t};\n\tif (!is_navigating) before_navigate_callbacks.forEach((fn) => fn(cancellable));\n\treturn should_block ? null : nav;\n}\n/**\n* @param {{\n* type: import('@sveltejs/kit').NavigationType;\n* url: URL;\n* popped?: {\n* state: Record<string, any>;\n* scroll: { x: number, y: number };\n* delta: number;\n* };\n* keepfocus?: boolean;\n* noscroll?: boolean;\n* replace_state?: boolean;\n* state?: Record<string, any>;\n* redirect_count?: number;\n* nav_token?: {};\n* accept?: () => void;\n* block?: () => void;\n* event?: Event\n* }} opts\n* @returns {Promise<void>}\n*/\nasync function navigate({ type, url, popped, keepfocus, noscroll, replace_state, state = {}, redirect_count = 0, nav_token = {}, accept = noop, block = noop, event }) {\n\tconst prev_token = token;\n\ttoken = nav_token;\n\tconst intent = await get_navigation_intent(url, false);\n\tconst nav = type === \"enter\" ? create_navigation(current, intent, url, type) : _before_navigate({\n\t\turl,\n\t\ttype,\n\t\tdelta: popped?.delta,\n\t\tintent,\n\t\tscroll: popped?.scroll,\n\t\tevent\n\t});\n\tif (!nav) {\n\t\tblock();\n\t\tif (token === nav_token) token = prev_token;\n\t\treturn;\n\t}\n\tconst previous_history_index = current_history_index;\n\tconst previous_navigation_index = current_navigation_index;\n\taccept();\n\tis_navigating = true;\n\tif (started && nav.navigation.type !== \"enter\") stores.navigating.set(navigating.current = nav.navigation);\n\tlet navigation_result = intent && await load_route(intent);\n\tif (!navigation_result) if (is_external_url(url, base, app.hash)) return await native_navigation(url, replace_state);\n\telse navigation_result = await server_fallback(url, { id: null }, await handle_error(new SvelteKitError(404, \"Not Found\", `Not found: ${url.pathname}`), {\n\t\turl,\n\t\tparams: {},\n\t\troute: { id: null }\n\t}), 404, replace_state);\n\turl = intent?.url || url;\n\tif (token !== nav_token) {\n\t\tnav.reject(/* @__PURE__ */ new Error(\"navigation aborted\"));\n\t\treturn;\n\t}\n\tif (!navigation_result) return;\n\tif (navigation_result.type === \"redirect\") {\n\t\tif (redirect_count < 20) {\n\t\t\tawait navigate({\n\t\t\t\ttype,\n\t\t\t\turl: new URL(navigation_result.location, url),\n\t\t\t\tpopped,\n\t\t\t\tkeepfocus,\n\t\t\t\tnoscroll,\n\t\t\t\treplace_state,\n\t\t\t\tstate,\n\t\t\t\tredirect_count: redirect_count + 1,\n\t\t\t\tnav_token\n\t\t\t});\n\t\t\tnav.fulfil(void 0);\n\t\t\treturn;\n\t\t}\n\t\tnavigation_result = await load_root_error_page({\n\t\t\tstatus: 500,\n\t\t\terror: await handle_error(/* @__PURE__ */ new Error(\"Redirect loop\"), {\n\t\t\t\turl,\n\t\t\t\tparams: {},\n\t\t\t\troute: { id: null }\n\t\t\t}),\n\t\t\turl,\n\t\t\troute: { id: null }\n\t\t});\n\t\tif (!navigation_result) return;\n\t} else if (navigation_result.props.page.status >= 400) {\n\t\tif (await stores.updated.check()) {\n\t\t\tawait update_service_worker();\n\t\t\treturn await native_navigation(url, replace_state);\n\t\t}\n\t}\n\treset_invalidation();\n\tupdate_scroll_positions(previous_history_index);\n\tcapture_snapshot(previous_navigation_index);\n\tif (navigation_result.props.page.url.pathname !== url.pathname) url.pathname = navigation_result.props.page.url.pathname;\n\tstate = popped ? popped.state : state;\n\tif (!popped) {\n\t\tconst change = replace_state ? 0 : 1;\n\t\tconst entry = {\n\t\t\t[HISTORY_INDEX]: current_history_index += change,\n\t\t\t[NAVIGATION_INDEX]: current_navigation_index += change,\n\t\t\t[STATES_KEY]: state\n\t\t};\n\t\t(replace_state ? history.replaceState : history.pushState).call(history, entry, \"\", url);\n\t\tif (!replace_state) clear_onward_history(current_history_index, current_navigation_index);\n\t}\n\tconst load_cache_fork = intent && load_cache?.id === intent.id ? load_cache.fork : null;\n\tif (load_cache?.fork && !load_cache_fork) discard_load_cache();\n\telse {\n\t\tload_cache = null;\n\t\tcurrent_a = {\n\t\t\telement: void 0,\n\t\t\thref: void 0\n\t\t};\n\t}\n\tnavigation_result.props.page.state = state;\n\t/**\n\t* @type {Promise<void> | undefined}\n\t*/\n\tlet commit_promise;\n\tif (started) {\n\t\tconst after_navigate = (await Promise.all(Array.from(on_navigate_callbacks, (fn) => fn(nav.navigation)))).filter(\n\t\t\t/** @returns {value is () => void} */\n\t\t\t(value) => typeof value === \"function\"\n\t\t);\n\t\tif (after_navigate.length > 0) {\n\t\t\tfunction cleanup() {\n\t\t\t\tafter_navigate.forEach((fn) => {\n\t\t\t\t\tafter_navigate_callbacks.delete(fn);\n\t\t\t\t});\n\t\t\t}\n\t\t\tafter_navigate.push(cleanup);\n\t\t\tafter_navigate.forEach((fn) => {\n\t\t\t\tafter_navigate_callbacks.add(fn);\n\t\t\t});\n\t\t}\n\t\tconst target = nav.navigation.to;\n\t\tcurrent = {\n\t\t\t...navigation_result.state,\n\t\t\tnav: {\n\t\t\t\tparams: target.params,\n\t\t\t\troute: target.route,\n\t\t\t\turl: target.url\n\t\t\t}\n\t\t};\n\t\tif (navigation_result.props.page) navigation_result.props.page.url = url;\n\t\tif (!keepfocus && document.activeElement instanceof HTMLElement && document.activeElement !== document.body) document.activeElement.blur();\n\t\tconst fork = load_cache_fork && await load_cache_fork;\n\t\tif (fork) commit_promise = fork.commit();\n\t\telse {\n\t\t\trendering_error = null;\n\t\t\troot.$set(navigation_result.props);\n\t\t\tif (rendering_error) Object.assign(navigation_result.props.page, rendering_error);\n\t\t\tupdate(navigation_result.props.page);\n\t\t\tcommit_promise = settled?.();\n\t\t}\n\t} else await initialize(navigation_result, target, false);\n\tconst { activeElement } = document;\n\tawait commit_promise;\n\tawait tick$1();\n\tawait tick$1();\n\tif (token !== nav_token) {\n\t\tnav.reject(/* @__PURE__ */ new Error(\"navigation aborted\"));\n\t\treturn;\n\t}\n\tif (navigation_result.props.page && rendering_error) Object.assign(navigation_result.props.page, rendering_error);\n\t/** @type {Element | null | ''} */\n\tlet deep_linked = null;\n\tif (autoscroll) {\n\t\tconst scroll = popped ? popped.scroll : noscroll ? scroll_state() : null;\n\t\tif (scroll) scrollTo(scroll.x, scroll.y);\n\t\telse if (deep_linked = url.hash && document.getElementById(get_id(url))) deep_linked.scrollIntoView();\n\t\telse scrollTo(0, 0);\n\t}\n\tconst changed_focus = document.activeElement !== activeElement && document.activeElement !== document.body;\n\tif (!keepfocus && !changed_focus) reset_focus(url, !deep_linked);\n\tautoscroll = true;\n\tis_navigating = false;\n\tnav.fulfil(void 0);\n\tif (nav.navigation.to) nav.navigation.to.scroll = scroll_state();\n\tafter_navigate_callbacks.forEach((fn) => fn(nav.navigation));\n\tif (type === \"popstate\") restore_snapshot(current_navigation_index);\n\tstores.navigating.set(navigating.current = null);\n}\n/**\n* Does a full page reload if it wouldn't result in an endless loop in the SPA case\n* @param {URL} url\n* @param {{ id: string | null }} route\n* @param {App.Error} error\n* @param {number} status\n* @param {boolean} [replace_state]\n* @returns {Promise<import('./types.js').NavigationFinished | undefined>}\n*/\nasync function server_fallback(url, route, error, status, replace_state) {\n\tif (url.origin === origin && url.pathname === location.pathname && !hydrated) return await load_root_error_page({\n\t\tstatus,\n\t\terror,\n\t\turl,\n\t\troute\n\t});\n\treturn await native_navigation(url, replace_state);\n}\n/** @typedef {(typeof PRELOAD_PRIORITIES)['hover'] | (typeof PRELOAD_PRIORITIES)['tap']} PreloadDataPriority */\n/**\n* The anchor element whose href is being preloaded. It is reset after navigation\n* or changes when a different anchor element is being preloaded.\n* @type {{ element: Element | SVGAElement | undefined; href: string | SVGAnimatedString | undefined }}\n*/\nvar current_a = {\n\telement: void 0,\n\thref: void 0\n};\n/**\n* @param {unknown} error\n* @param {import('@sveltejs/kit').NavigationEvent} event\n* @returns {import('types').MaybePromise<App.Error>}\n*/\nfunction handle_error(error, event) {\n\tif (error instanceof HttpError) return error.body;\n\tconst status = get_status(error);\n\tconst message = get_message(error);\n\treturn app.hooks.handleError({\n\t\terror,\n\t\tevent,\n\t\tstatus,\n\t\tmessage\n\t}) ?? { message };\n}\n/**\n* Allows you to navigate programmatically to a given route, with options such as keeping the current element focused.\n* Returns a Promise that resolves when SvelteKit navigates (or fails to navigate, in which case the promise rejects) to the specified `url`.\n*\n* For external URLs, use `window.location = url` instead of calling `goto(url)`.\n*\n* @param {string | URL} url Where to navigate to. Note that if you've set [`config.kit.paths.base`](https://svelte.dev/docs/kit/configuration#paths) and the URL is root-relative, you need to prepend the base path if you want to navigate within the app.\n* @param {Object} [opts] Options related to the navigation\n* @param {boolean} [opts.replaceState] If `true`, will replace the current `history` entry rather than creating a new one with `pushState`\n* @param {boolean} [opts.noScroll] If `true`, the browser will maintain its scroll position rather than scrolling to the top of the page after navigation\n* @param {boolean} [opts.keepFocus] If `true`, the currently focused element will retain focus after navigation. Otherwise, focus will be reset to the body\n* @param {boolean} [opts.invalidateAll] If `true`, all `load` functions of the page will be rerun. See https://svelte.dev/docs/kit/load#rerunning-load-functions for more info on invalidation.\n* @param {Array<string | URL | ((url: URL) => boolean)>} [opts.invalidate] Causes any load functions to re-run if they depend on one of the urls\n* @param {App.PageState} [opts.state] An optional object that will be available as `page.state`\n* @returns {Promise<void>}\n*/\nfunction goto(url, opts = {}) {\n\tthrow new Error(\"Cannot call goto(...) on the server\");\n}\n/**\n* @param {string | URL | ((url: URL) => boolean)} resource The invalidated URL\n*/\nfunction push_invalidated(resource) {\n\tif (typeof resource === \"function\") invalidated.push(resource);\n\telse {\n\t\tconst { href } = new URL(resource, location.href);\n\t\tinvalidated.push((url) => url.href === href);\n\t}\n}\n/**\n* Causes all `load` and `query` functions belonging to the currently active page to re-run. Returns a `Promise` that resolves when the page is subsequently updated.\n* @returns {Promise<void>}\n*/\nfunction invalidateAll() {\n\tthrow new Error(\"Cannot call invalidateAll() on the server\");\n}\n/**\n* @param {URL} url\n* @param {boolean[]} invalid\n* @returns {Promise<import('types').ServerNodesResponse | import('types').ServerRedirectNode>}\n*/\nasync function load_data(url, invalid) {\n\tconst data_url = new URL(url);\n\tdata_url.pathname = add_data_suffix(url.pathname);\n\tif (url.pathname.endsWith(\"/\")) data_url.searchParams.append(TRAILING_SLASH_PARAM, \"1\");\n\tdata_url.searchParams.append(INVALIDATED_PARAM, invalid.map((i) => i ? \"1\" : \"0\").join(\"\"));\n\tconst res = await (0, window.fetch)(data_url.href, {});\n\tif (!res.ok) {\n\t\t/** @type {string | undefined} */\n\t\tlet message;\n\t\tif (res.headers.get(\"content-type\")?.includes(\"application/json\")) message = await res.json();\n\t\telse if (res.status === 404) message = \"Not Found\";\n\t\telse if (res.status === 500) message = \"Internal Error\";\n\t\tthrow new HttpError(res.status, message);\n\t}\n\treturn new Promise((resolve, reject) => {\n\t\tprocess_stream(resolve, res).catch(reject);\n\t});\n}\n/**\n* @param {(value: ServerNodesResponse | ServerRedirectNode) => void} resolve\n* @param {Response} res\n* @returns {Promise<void>}\n*/\nasync function process_stream(resolve, res) {\n\tconst reader = res.body.getReader();\n\t/**\n\t* Map of deferred promises that will be resolved by a subsequent chunk of data\n\t* @type {Map<string, import('types').Deferred>}\n\t*/\n\tconst deferreds = /* @__PURE__ */ new Map();\n\t/**\n\t* @param {any} data\n\t*/\n\tfunction deserialize(data) {\n\t\treturn unflatten(data, {\n\t\t\t...app.decoders,\n\t\t\tPromise: (id) => {\n\t\t\t\treturn new Promise((fulfil, reject) => {\n\t\t\t\t\tdeferreds.set(id, {\n\t\t\t\t\t\tfulfil,\n\t\t\t\t\t\treject\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t}\n\tfor await (const node of read_ndjson(reader)) {\n\t\tif (node.type === \"redirect\") return resolve(node);\n\t\tif (node.type === \"data\") {\n\t\t\tnode.nodes?.forEach((node) => {\n\t\t\t\tif (node?.type === \"data\") {\n\t\t\t\t\tnode.uses = deserialize_uses(node.uses);\n\t\t\t\t\tnode.data = deserialize(node.data);\n\t\t\t\t}\n\t\t\t});\n\t\t\tresolve(node);\n\t\t} else if (node.type === \"chunk\") {\n\t\t\tconst { id, data, error } = node;\n\t\t\tconst deferred = deferreds.get(id);\n\t\t\tdeferreds.delete(id);\n\t\t\tif (error) deferred.reject(deserialize(error));\n\t\t\telse deferred.fulfil(deserialize(data));\n\t\t}\n\t}\n}\n/**\n* @param {any} uses\n* @return {import('types').Uses}\n*/\nfunction deserialize_uses(uses) {\n\treturn {\n\t\tdependencies: new Set(uses?.dependencies ?? []),\n\t\tparams: new Set(uses?.params ?? []),\n\t\tparent: !!uses?.parent,\n\t\troute: !!uses?.route,\n\t\turl: !!uses?.url,\n\t\tsearch_params: new Set(uses?.search_params ?? [])\n\t};\n}\n/**\n* @param {URL} url\n* @param {boolean} [scroll]\n*/\nfunction reset_focus(url, scroll = true) {\n\tconst autofocus = document.querySelector(\"[autofocus]\");\n\tif (autofocus) autofocus.focus();\n\telse {\n\t\tconst id = get_id(url);\n\t\tif (id && document.getElementById(id)) {\n\t\t\tconst { x, y } = scroll_state();\n\t\t\tsetTimeout(() => {\n\t\t\t\tconst history_state = history.state;\n\t\t\t\tlocation.replace(new URL(`#${id}`, location.href));\n\t\t\t\thistory.replaceState(history_state, \"\", url);\n\t\t\t\tif (scroll) scrollTo(x, y);\n\t\t\t});\n\t\t} else {\n\t\t\tconst root = document.body;\n\t\t\tconst tabindex = root.getAttribute(\"tabindex\");\n\t\t\troot.tabIndex = -1;\n\t\t\troot.focus({\n\t\t\t\tpreventScroll: true,\n\t\t\t\tfocusVisible: false\n\t\t\t});\n\t\t\tif (tabindex !== null) root.setAttribute(\"tabindex\", tabindex);\n\t\t\telse root.removeAttribute(\"tabindex\");\n\t\t}\n\t\tconst selection = getSelection();\n\t\tif (selection && selection.type !== \"None\") {\n\t\t\t/** @type {Range[]} */\n\t\t\tconst ranges = [];\n\t\t\tfor (let i = 0; i < selection.rangeCount; i += 1) ranges.push(selection.getRangeAt(i));\n\t\t\tsetTimeout(() => {\n\t\t\t\tif (selection.rangeCount !== ranges.length) return;\n\t\t\t\tfor (let i = 0; i < selection.rangeCount; i += 1) {\n\t\t\t\t\tconst a = ranges[i];\n\t\t\t\t\tconst b = selection.getRangeAt(i);\n\t\t\t\t\tif (a.commonAncestorContainer !== b.commonAncestorContainer || a.startContainer !== b.startContainer || a.endContainer !== b.endContainer || a.startOffset !== b.startOffset || a.endOffset !== b.endOffset) return;\n\t\t\t\t}\n\t\t\t\tselection.removeAllRanges();\n\t\t\t});\n\t\t}\n\t}\n}\n/**\n* @template {import('@sveltejs/kit').NavigationType} T\n* @param {import('./types.js').NavigationState} current\n* @param {import('./types.js').NavigationIntent | undefined} intent\n* @param {URL | null} url\n* @param {T} type\n* @param {{ x: number, y: number } | null} [target_scroll] The scroll position for the target (for popstate navigations)\n*/\nfunction create_navigation(current, intent, url, type, target_scroll = null) {\n\t/** @type {(value: any) => void} */\n\tlet fulfil;\n\t/** @type {(error: any) => void} */\n\tlet reject;\n\tconst complete = new Promise((f, r) => {\n\t\tfulfil = f;\n\t\treject = r;\n\t});\n\tcomplete.catch(noop);\n\treturn {\n\t\tnavigation: {\n\t\t\tfrom: {\n\t\t\t\tparams: current.params,\n\t\t\t\troute: { id: current.route?.id ?? null },\n\t\t\t\turl: current.url,\n\t\t\t\tscroll: scroll_state()\n\t\t\t},\n\t\t\tto: url && {\n\t\t\t\tparams: intent?.params ?? null,\n\t\t\t\troute: { id: intent?.route?.id ?? null },\n\t\t\t\turl,\n\t\t\t\tscroll: target_scroll\n\t\t\t},\n\t\t\twillUnload: !intent,\n\t\t\ttype,\n\t\t\tcomplete\n\t\t},\n\t\tfulfil,\n\t\treject\n\t};\n}\n/**\n* TODO: remove this in 3.0 when the page store is also removed\n*\n* We need to assign a new page object so that subscribers are correctly notified.\n* However, spreading `{ ...page }` returns an empty object so we manually\n* assign to each property instead.\n*\n* @param {import('@sveltejs/kit').Page} page\n*/\nfunction clone_page(page) {\n\treturn {\n\t\tdata: page.data,\n\t\terror: page.error,\n\t\tform: page.form,\n\t\tparams: page.params,\n\t\troute: page.route,\n\t\tstate: page.state,\n\t\tstatus: page.status,\n\t\turl: page.url\n\t};\n}\n/**\n* @param {URL} url\n* @returns {string}\n*/\nfunction get_id(url) {\n\tlet id;\n\tif (app.hash) {\n\t\tconst [, , second] = url.hash.split(\"#\", 3);\n\t\tid = second ?? \"\";\n\t} else id = url.hash.slice(1);\n\treturn decodeURIComponent(id);\n}\n//#endregion\nexport { page as a, navigating as i, invalidateAll as n, updated as o, stores as r, goto as t };\n"],"names":["noop$1"],"mappings":";;;;;;;;AA6FA,IAAI,SAAS,GAAGA,IAAM,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,uBAAuB,CAAC,IAAI,CAACA,IAAM,CAAC,QAAQ,EAAE,CAAC;AACnG,IAAI,eAAe,GAAG,IAAI;AAC1B,IAAI,SAAS,EAAE;AACf,EAAQ;AACR,EAAE,IAAI,EAAE,EAAE;AACV,EAAE,IAAI,EAAE,IAAI;AACZ,EAAE,KAAK,EAAE,IAAI;AACb,EAAE,MAAM,EAAE,EAAE;AACZ,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE;AACrB,EAAE,KAAK,EAAE,EAAE;AACX,EAAE,MAAM,EAAE,EAAE;AACZ,EAAE,GAAG,EAAE,IAAI,GAAG,CAAC,eAAe;AAC9B,GAAE;AAGF;AA+IA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,oBAAoB;AAmiC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,IAAI,CAAC,GAAG,EAAE,IAAI,GAAG,EAAE,EAAE;AAC9B,CAAC,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC;AACvD;AAWA;AACA;AACA;AACA;AACA,SAAS,aAAa,GAAG;AACzB,CAAC,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC;AAC7D;;;;"}
|
|
1
|
+
{"version":3,"file":"client.js-Bpq0VuTu.js","sources":["../../../../.svelte-kit/output/server/chunks/client.js"],"sourcesContent":["import { a as tick$1, i as settled, t as index_server_exports } from \"./index-server.js\";\nimport { b as unflatten, d as get_message, f as get_status, m as base64_decode, n as TRAILING_SLASH_PARAM, r as create_remote_key, t as INVALIDATED_PARAM, x as noop } from \"./shared.js\";\nimport { s as base } from \"./internal.js\";\nimport { S as compact, f as make_trackable, g as add_data_suffix, h as noop_span, l as decode_params, p as normalize_path, s as hash, u as decode_pathname } from \"./exports.js\";\nimport { Ct as noop$1, N as writable } from \"./server.js\";\nimport \"./internal2.js\";\nimport { HttpError, Redirect, SvelteKitError } from \"@sveltejs/kit/internal\";\nimport \"@sveltejs/kit/internal/server\";\nvar STATES_KEY = \"sveltekit:states\";\nvar HISTORY_INDEX = \"sveltekit:history\";\nvar NAVIGATION_INDEX = \"sveltekit:navigation\";\nvar PRELOAD_PRIORITIES = {\n\ttap: 1,\n\thover: 2,\n\tviewport: 3,\n\teager: 4,\n\toff: -1,\n\tfalse: -1\n};\n//#endregion\n//#region ../../node_modules/.pnpm/@sveltejs+kit@2.69.1_@opentelemetry+api@1.9.1_@sveltejs+vite-plugin-svelte@7.2.0_svelte_a72f1cdc05ff4a6cc1920f4bfb4e9fa9/node_modules/@sveltejs/kit/src/runtime/client/utils.js\nvar origin = \"\";\n/** @param {string | URL} url */\nfunction resolve_url(url) {\n\tif (url instanceof URL) return url;\n\tlet baseURI = document.baseURI;\n\tif (!baseURI) {\n\t\tconst baseTags = document.getElementsByTagName(\"base\");\n\t\tbaseURI = baseTags.length ? baseTags[0].href : document.URL;\n\t}\n\treturn new URL(url, baseURI);\n}\nfunction scroll_state() {\n\treturn {\n\t\tx: pageXOffset,\n\t\ty: pageYOffset\n\t};\n}\n({ ...PRELOAD_PRIORITIES }), PRELOAD_PRIORITIES.hover;\n/** @param {any} value */\nfunction notifiable_store(value) {\n\tconst store = writable(value);\n\tlet ready = true;\n\tfunction notify() {\n\t\tready = true;\n\t\tstore.update((val) => val);\n\t}\n\t/** @param {any} new_value */\n\tfunction set(new_value) {\n\t\tready = false;\n\t\tstore.set(new_value);\n\t}\n\t/** @param {(value: any) => void} run */\n\tfunction subscribe(run) {\n\t\t/** @type {any} */\n\t\tlet old_value;\n\t\treturn store.subscribe((new_value) => {\n\t\t\tif (old_value === void 0 || ready && new_value !== old_value) run(old_value = new_value);\n\t\t});\n\t}\n\treturn {\n\t\tnotify,\n\t\tset,\n\t\tsubscribe\n\t};\n}\nvar updated_listener = { v: noop };\nfunction create_updated_store() {\n\tconst { set, subscribe } = writable(false);\n\treturn {\n\t\tsubscribe,\n\t\tcheck: async () => false\n\t};\n}\n/**\n* Is external if\n* - origin different\n* - path doesn't start with base\n* - uses hash router and pathname is more than base\n* @param {URL} url\n* @param {string} base\n* @param {boolean} hash_routing\n*/\nfunction is_external_url(url, base, hash_routing) {\n\tif (url.origin !== origin || !url.pathname.startsWith(base)) return true;\n\tif (hash_routing) return url.pathname !== location.pathname;\n\treturn false;\n}\n//#endregion\n//#region ../../node_modules/.pnpm/@sveltejs+kit@2.69.1_@opentelemetry+api@1.9.1_@sveltejs+vite-plugin-svelte@7.2.0_svelte_a72f1cdc05ff4a6cc1920f4bfb4e9fa9/node_modules/@sveltejs/kit/src/runtime/client/state.svelte.js\nvar page;\nvar navigating;\nvar updated;\nvar is_legacy = noop$1.toString().includes(\"$$\") || /function \\w+\\(\\) \\{\\}/.test(noop$1.toString());\nvar placeholder_url = \"a:\";\nif (is_legacy) {\n\tpage = {\n\t\tdata: {},\n\t\tform: null,\n\t\terror: null,\n\t\tparams: {},\n\t\troute: { id: null },\n\t\tstate: {},\n\t\tstatus: -1,\n\t\turl: new URL(placeholder_url)\n\t};\n\tnavigating = { current: null };\n\tupdated = { current: false };\n} else {\n\tpage = new class Page {\n\t\tdata = {};\n\t\tform = null;\n\t\terror = null;\n\t\tparams = {};\n\t\troute = { id: null };\n\t\tstate = {};\n\t\tstatus = -1;\n\t\turl = new URL(placeholder_url);\n\t}();\n\tnavigating = new class Navigating {\n\t\tcurrent = null;\n\t}();\n\tupdated = new class Updated {\n\t\tcurrent = false;\n\t}();\n\tupdated_listener.v = () => updated.current = true;\n}\n/**\n* @param {import('@sveltejs/kit').Page} new_page\n*/\nfunction update(new_page) {\n\tObject.assign(page, new_page);\n}\nvar cache = /* @__PURE__ */ new Map();\n/**\n* Should be called on the initial run of load functions that hydrate the page.\n* Saves any requests with cache-control max-age to the cache.\n* @param {URL | string} resource\n* @param {RequestInit} [opts]\n*/\nfunction initial_fetch(resource, opts) {\n\tconst selector = build_selector(resource, opts);\n\tconst script = document.querySelector(selector);\n\tif (script?.textContent) {\n\t\tscript.remove();\n\t\tlet { body, ...init } = JSON.parse(script.textContent);\n\t\tif (script.getAttribute(\"data-b64\") !== null) body = base64_decode(body);\n\t\tconst ttl = script.getAttribute(\"data-ttl\");\n\t\tif (ttl) cache.set(selector, {\n\t\t\tbody,\n\t\t\tinit,\n\t\t\tttl: 1e3 * Number(ttl)\n\t\t});\n\t\treturn Promise.resolve(new Response(body, init));\n\t}\n\treturn window.fetch(resource, opts);\n}\n/**\n* Tries to get the response from the cache, if max-age allows it, else does a fetch.\n* @param {URL | string} resource\n* @param {string} resolved\n* @param {RequestInit} [opts]\n*/\nfunction subsequent_fetch(resource, resolved, opts) {\n\tif (cache.size > 0) {\n\t\tconst selector = build_selector(resource, opts);\n\t\tconst cached = cache.get(selector);\n\t\tif (cached) {\n\t\t\tif (performance.now() < cached.ttl && [\n\t\t\t\t\"default\",\n\t\t\t\t\"force-cache\",\n\t\t\t\t\"only-if-cached\",\n\t\t\t\tvoid 0\n\t\t\t].includes(opts?.cache)) return new Response(cached.body, cached.init);\n\t\t\tcache.delete(selector);\n\t\t}\n\t}\n\treturn window.fetch(resolved, opts);\n}\n/**\n* Build the cache key for a given request\n* @param {URL | RequestInfo} resource\n* @param {RequestInit} [opts]\n*/\nfunction build_selector(resource, opts) {\n\tlet selector = `script[data-sveltekit-fetched][data-url=${JSON.stringify(resource instanceof Request ? resource.url : resource)}]`;\n\tif (opts?.headers || opts?.body) {\n\t\t/** @type {import('types').StrictBody[]} */\n\t\tconst values = [];\n\t\tif (opts.headers) values.push([...new Headers(opts.headers)].join(\",\"));\n\t\tif (opts.body && (typeof opts.body === \"string\" || ArrayBuffer.isView(opts.body))) values.push(opts.body);\n\t\tselector += `[data-hash=\"${hash(...values)}\"]`;\n\t}\n\treturn selector;\n}\n//#endregion\n//#region ../../node_modules/.pnpm/@sveltejs+kit@2.69.1_@opentelemetry+api@1.9.1_@sveltejs+vite-plugin-svelte@7.2.0_svelte_a72f1cdc05ff4a6cc1920f4bfb4e9fa9/node_modules/@sveltejs/kit/src/runtime/client/session-storage.js\n/**\n* Read a value from `sessionStorage`\n* @param {string} key\n* @param {(value: string) => any} parse\n*/\n/*@__NO_SIDE_EFFECTS__*/\nfunction get(key, parse = JSON.parse) {\n\ttry {\n\t\treturn parse(sessionStorage[key]);\n\t} catch {}\n}\n//#endregion\n//#region ../../node_modules/.pnpm/@sveltejs+kit@2.69.1_@opentelemetry+api@1.9.1_@sveltejs+vite-plugin-svelte@7.2.0_svelte_a72f1cdc05ff4a6cc1920f4bfb4e9fa9/node_modules/@sveltejs/kit/src/runtime/client/stream.js\n/**\n* Reads from a stream, decoding it as text and yielding each block of content\n* separated by `delimiter`. The trailing block (if any) is yielded once the\n* stream closes.\n* @param {ReadableStreamDefaultReader<Uint8Array>} reader\n* @param {string} delimiter\n*/\nasync function* read_stream(reader, delimiter) {\n\tlet done = false;\n\tlet buffer = \"\";\n\tconst decoder = new TextDecoder();\n\twhile (true) {\n\t\tlet split = buffer.indexOf(delimiter);\n\t\twhile (split !== -1) {\n\t\t\tyield buffer.slice(0, split);\n\t\t\tbuffer = buffer.slice(split + delimiter.length);\n\t\t\tsplit = buffer.indexOf(delimiter);\n\t\t}\n\t\tif (done) {\n\t\t\tif (buffer) yield buffer;\n\t\t\treturn;\n\t\t}\n\t\tconst chunk = await reader.read();\n\t\tdone = chunk.done;\n\t\tif (chunk.value) buffer += decoder.decode(chunk.value, { stream: true });\n\t\tif (done) buffer += decoder.decode();\n\t}\n}\n//#endregion\n//#region ../../node_modules/.pnpm/@sveltejs+kit@2.69.1_@opentelemetry+api@1.9.1_@sveltejs+vite-plugin-svelte@7.2.0_svelte_a72f1cdc05ff4a6cc1920f4bfb4e9fa9/node_modules/@sveltejs/kit/src/runtime/client/ndjson.js\n/**\n* Yields parsed JSON objects from a ReadableStream of newline-delimited JSON.\n* Each yielded value is the raw `JSON.parse`'d object — callers handle deserialization.\n* @param {ReadableStreamDefaultReader<Uint8Array>} reader\n*/\nasync function* read_ndjson(reader) {\n\tfor await (const block of read_stream(reader, \"\\n\")) {\n\t\tconst line = block.trim();\n\t\tif (line) yield JSON.parse(line);\n\t}\n}\n//#endregion\n//#region ../../node_modules/.pnpm/@sveltejs+kit@2.69.1_@opentelemetry+api@1.9.1_@sveltejs+vite-plugin-svelte@7.2.0_svelte_a72f1cdc05ff4a6cc1920f4bfb4e9fa9/node_modules/@sveltejs/kit/src/runtime/client/client.js\n/** @import { RemoteFunctionDataNode, ServerNodesResponse, ServerRedirectNode } from 'types' */\n/** @import { CacheEntry } from './remote-functions/cache.svelte.js' */\n/** @import { Query } from './remote-functions/query/instance.svelte.js' */\n/** @import { LiveQuery } from './remote-functions/query-live/instance.svelte.js' */\nvar { onMount, tick } = index_server_exports;\n/**\n* Set via transformError, reset and read at the end of navigate.\n* Necessary because a navigation might succeed loading but during rendering\n* an error occurs, at which point the navigation result needs to be overridden with the error result.\n* TODO this is all very hacky, rethink for SvelteKit 3 where we can assume Svelte 5 and do an overhaul of client.js\n* @type {{ error: App.Error, status: number } | null}\n*/\nvar rendering_error = null;\n/**\n* history index -> { x, y }\n* @type {Record<number, { x: number; y: number }>}\n*/\nvar scroll_positions = /* @__PURE__ */ get(\"sveltekit:scroll\") ?? {};\n/**\n* navigation index -> any\n* @type {Record<string, any[]>}\n*/\nvar snapshots = /* @__PURE__ */ get(\"sveltekit:snapshot\") ?? {};\nvar stores = {\n\turl: /* @__PURE__ */ notifiable_store({}),\n\tpage: /* @__PURE__ */ notifiable_store({}),\n\tnavigating: /* @__PURE__ */ writable(null),\n\tupdated: /* @__PURE__ */ create_updated_store()\n};\n/** @param {number} index */\nfunction update_scroll_positions(index) {\n\tscroll_positions[index] = scroll_state();\n}\n/**\n* @param {number} current_history_index\n* @param {number} current_navigation_index\n*/\nfunction clear_onward_history(current_history_index, current_navigation_index) {\n\tlet i = current_history_index + 1;\n\twhile (scroll_positions[i]) {\n\t\tdelete scroll_positions[i];\n\t\ti += 1;\n\t}\n\ti = current_navigation_index + 1;\n\twhile (snapshots[i]) {\n\t\tdelete snapshots[i];\n\t\ti += 1;\n\t}\n}\n/**\n* Loads `href` the old-fashioned way, with a full page reload.\n* Returns a `Promise` that never resolves (to prevent any\n* subsequent work, e.g. history manipulation, from happening)\n* @param {URL} url\n* @param {boolean} [replace] if `true`, will replace the current `history` entry rather than creating a new one with `pushState`\n* @returns {Promise<any>} a promise that never resolves\n*/\nfunction native_navigation(url, replace = false) {\n\tif (replace) location.replace(url.href);\n\telse location.href = url.href;\n\treturn new Promise(noop);\n}\n/**\n* Checks whether a service worker is registered, and if it is,\n* tries to update it.\n*/\nasync function update_service_worker() {\n\tif (\"serviceWorker\" in navigator) {\n\t\tconst registration = await navigator.serviceWorker.getRegistration(base || \"/\");\n\t\tif (registration) await registration.update();\n\t}\n}\n/** @type {import('types').CSRRoute[]} All routes of the app. Only available when kit.router.resolution=client */\nvar routes;\n/** @type {import('types').CSRPageNodeLoader} */\nvar default_layout_loader;\n/** @type {import('types').CSRPageNodeLoader} */\nvar default_error_loader;\n/** @type {HTMLElement} */\nvar target;\n/** @type {import('./types.js').SvelteKitApp} */\nvar app;\n/** @type {Array<((url: URL) => boolean)>} */\nvar invalidated = [];\n/**\n* An array of the `+layout.svelte` and `+page.svelte` component instances\n* that currently live on the page — used for capturing and restoring snapshots.\n* It's updated/manipulated through `bind:this` in `Root.svelte`.\n* @type {import('svelte').SvelteComponent[]}\n*/\nvar components = [];\n/** @type {{id: string, token: {}, promise: Promise<import('./types.js').NavigationResult>, fork: Promise<import('svelte').Fork | null> | null} | null} */\nvar load_cache = null;\nfunction discard_load_cache() {\n\tload_cache?.fork?.then((f) => f?.discard());\n\tload_cache = null;\n\tcurrent_a = {\n\t\telement: void 0,\n\t\thref: void 0\n\t};\n}\n/**\n* @type {Map<string, Promise<URL>>}\n* Cache for client-side rerouting, since it could contain async calls which we want to\n* avoid running multiple times which would slow down navigations (e.g. else preloading\n* wouldn't help because on navigation it would be called again). Since `reroute` should be\n* a pure function (i.e. always return the same) value it's safe to cache across navigations.\n* The server reroute calls don't need to be cached because they are called using `import(...)`\n* which is cached per the JS spec.\n*/\nvar reroute_cache = /* @__PURE__ */ new Map();\n/**\n* Note on before_navigate_callbacks, on_navigate_callbacks and after_navigate_callbacks:\n* do not re-assign as some closures keep references to these Sets\n*/\n/** @type {Set<(navigation: import('@sveltejs/kit').BeforeNavigate) => void>} */\nvar before_navigate_callbacks = /* @__PURE__ */ new Set();\n/** @type {Set<(navigation: import('@sveltejs/kit').OnNavigate) => import('types').MaybePromise<(() => void) | void>>} */\nvar on_navigate_callbacks = /* @__PURE__ */ new Set();\n/** @type {Set<(navigation: import('@sveltejs/kit').AfterNavigate) => void>} */\nvar after_navigate_callbacks = /* @__PURE__ */ new Set();\n/** @type {import('./types.js').NavigationState & { nav: import('@sveltejs/kit').NavigationEvent }} */\nvar current = {\n\tbranch: [],\n\terror: null,\n\turl: null,\n\tnav: null\n};\n/** this being true means we SSR'd */\nvar hydrated = false;\nvar started = false;\nvar autoscroll = true;\nvar is_navigating = false;\nvar force_invalidation = false;\n/** @type {import('svelte').SvelteComponent} */\nvar root;\n/** @type {number} keeping track of the history index in order to prevent popstate navigation events if needed */\nvar current_history_index;\n/** @type {number} */\nvar current_navigation_index;\n/** @type {{}} */\nvar token;\n/**\n* A set of tokens which are associated to current preloads.\n* If a preload becomes a real navigation, it's removed from the set.\n* If a preload token is in the set and the preload errors, the error\n* handling logic (for example reloading) is skipped.\n*/\n/** @type {Set<{}>} */\nvar preload_tokens = /* @__PURE__ */ new Set();\n/**\n* @type {Map<string, Map<string, CacheEntry<Query<any>>>>}\n* A map of query id -> payload -> query internals for all active queries.\n*/\nvar query_map = /* @__PURE__ */ new Map();\n/**\n* @type {Map<string, Map<string, CacheEntry<LiveQuery<any>>>>}\n* A map of id -> payload -> live query internals for all active queries.\n*/\nvar live_query_map = /* @__PURE__ */ new Map();\nfunction reset_invalidation() {\n\tinvalidated.length = 0;\n\tforce_invalidation = false;\n}\n/** @param {number} index */\nfunction capture_snapshot(index) {\n\tif (components.some((c) => c?.snapshot)) snapshots[index] = components.map((c) => c?.snapshot?.capture());\n}\n/** @param {number} index */\nfunction restore_snapshot(index) {\n\tsnapshots[index]?.forEach((value, i) => {\n\t\tcomponents[i]?.snapshot?.restore(value);\n\t});\n}\n/**\n* @param {string | URL} url\n* @param {{ replaceState?: boolean; noScroll?: boolean; keepFocus?: boolean; invalidateAll?: boolean; invalidate?: Array<string | URL | ((url: URL) => boolean)>; state?: Record<string, any> }} options\n* @param {number} redirect_count\n* @param {{}} [nav_token]\n* @returns {Promise<void>}\n*/\nasync function _goto(url, options, redirect_count, nav_token) {\n\t/** @type {Set<string>} */\n\tlet query_keys;\n\t/** @type {Set<string>} */\n\tlet live_query_keys;\n\tif (options.invalidateAll) discard_load_cache();\n\tawait navigate({\n\t\ttype: \"goto\",\n\t\turl: resolve_url(url),\n\t\tkeepfocus: options.keepFocus,\n\t\tnoscroll: options.noScroll,\n\t\treplace_state: options.replaceState,\n\t\tstate: options.state,\n\t\tredirect_count,\n\t\tnav_token,\n\t\taccept: () => {\n\t\t\tif (options.invalidateAll) {\n\t\t\t\tforce_invalidation = true;\n\t\t\t\tquery_keys = /* @__PURE__ */ new Set();\n\t\t\t\tfor (const [id, entries] of query_map) for (const [payload, entry] of entries) {\n\t\t\t\t\tentry.resource?.reset();\n\t\t\t\t\tquery_keys.add(create_remote_key(id, payload));\n\t\t\t\t}\n\t\t\t\tlive_query_keys = /* @__PURE__ */ new Set();\n\t\t\t\tfor (const [id, entries] of live_query_map) for (const payload of entries.keys()) live_query_keys.add(create_remote_key(id, payload));\n\t\t\t}\n\t\t\tif (options.invalidate) options.invalidate.forEach(push_invalidated);\n\t\t}\n\t});\n\tif (options.invalidateAll) tick$1().then(tick$1).then(() => {\n\t\tfor (const [id, entries] of query_map) for (const [payload, { resource }] of entries) if (query_keys?.has(create_remote_key(id, payload))) resource.start();\n\t\tfor (const [id, entries] of live_query_map) for (const [payload, { resource }] of entries) if (live_query_keys?.has(create_remote_key(id, payload))) resource.reconnect();\n\t});\n}\n/**\n* @param {import('./types.js').NavigationFinished} result\n* @param {HTMLElement} target\n* @param {boolean} hydrate\n*/\nasync function initialize(result, target, hydrate) {\n\t/** @type {import('@sveltejs/kit').NavigationEvent} */\n\tconst nav = {\n\t\tparams: current.params,\n\t\troute: { id: current.route?.id ?? null },\n\t\turl: new URL(location.href)\n\t};\n\tcurrent = {\n\t\t...result.state,\n\t\tnav\n\t};\n\tupdate(result.props.page);\n\troot = new app.root({\n\t\ttarget,\n\t\tprops: {\n\t\t\t...result.props,\n\t\t\tstores,\n\t\t\tcomponents\n\t\t},\n\t\thydrate,\n\t\tsync: false,\n\t\ttransformError: void 0\n\t});\n\tawait Promise.resolve();\n\tif (hydrate) {\n\t\t/** @type {import('@sveltejs/kit').AfterNavigate} */\n\t\tconst navigation = {\n\t\t\tfrom: null,\n\t\t\tto: {\n\t\t\t\t...nav,\n\t\t\t\tscroll: scroll_positions[current_history_index] ?? scroll_state()\n\t\t\t},\n\t\t\twillUnload: false,\n\t\t\ttype: \"enter\",\n\t\t\tcomplete: Promise.resolve()\n\t\t};\n\t\tafter_navigate_callbacks.forEach((fn) => fn(navigation));\n\t}\n\trestore_snapshot(current_navigation_index);\n\tstarted = true;\n}\n/**\n*\n* @param {{\n* url: URL;\n* params: Record<string, string>;\n* branch: Array<import('./types.js').BranchNode | undefined>;\n* errors?: Array<import('types').CSRPageNodeLoader | undefined>;\n* status: number;\n* error: App.Error | null;\n* route: import('types').CSRRoute | null;\n* form?: Record<string, any> | null;\n* }} opts\n*/\nasync function get_navigation_result_from_branch({ url, params, branch, errors, status, error, route, form }) {\n\t/** @type {import('types').TrailingSlash} */\n\tlet slash = \"never\";\n\tif (base && (url.pathname === base || url.pathname === base + \"/\")) slash = \"always\";\n\telse for (const node of branch) if (node?.slash !== void 0) slash = node.slash;\n\turl.pathname = normalize_path(url.pathname, slash);\n\turl.search = url.search;\n\t/** @type {import('./types.js').NavigationFinished} */\n\tconst result = {\n\t\ttype: \"loaded\",\n\t\tstate: {\n\t\t\turl,\n\t\t\tparams,\n\t\t\tbranch,\n\t\t\terror,\n\t\t\troute\n\t\t},\n\t\tprops: {\n\t\t\tconstructors: compact(branch).map((branch_node) => branch_node.node.component),\n\t\t\tpage: clone_page(page)\n\t\t}\n\t};\n\tif (form !== void 0) result.props.form = form;\n\tlet data = {};\n\tlet data_changed = !page;\n\tlet p = 0;\n\tfor (let i = 0; i < Math.max(branch.length, current.branch.length); i += 1) {\n\t\tconst node = branch[i];\n\t\tconst prev = current.branch[i];\n\t\tif (node?.data !== prev?.data) data_changed = true;\n\t\tif (!node) continue;\n\t\tdata = {\n\t\t\t...data,\n\t\t\t...node.data\n\t\t};\n\t\tif (data_changed) result.props[`data_${p}`] = data;\n\t\tp += 1;\n\t}\n\tif (!current.url || url.href !== current.url.href || current.error !== error || form !== void 0 && form !== page.form || data_changed) result.props.page = {\n\t\terror,\n\t\tparams,\n\t\troute: { id: route?.id ?? null },\n\t\tstate: {},\n\t\tstatus,\n\t\turl: new URL(url),\n\t\tform: form ?? null,\n\t\tdata: data_changed ? data : page.data\n\t};\n\treturn result;\n}\n/**\n* Call the universal load function of the given node, if it exists.\n*\n* @param {{\n* loader: import('types').CSRPageNodeLoader;\n* \t parent: () => Promise<Record<string, any>>;\n* url: URL;\n* params: Record<string, string>;\n* route: { id: string | null };\n* \t server_data_node: import('./types.js').DataNode | null;\n* }} options\n* @returns {Promise<import('./types.js').BranchNode>}\n*/\nasync function load_node({ loader, parent, url, params, route, server_data_node }) {\n\t/** @type {Record<string, any> | null} */\n\tlet data = null;\n\tlet is_tracking = true;\n\t/** @type {import('types').Uses} */\n\tconst uses = {\n\t\tdependencies: /* @__PURE__ */ new Set(),\n\t\tparams: /* @__PURE__ */ new Set(),\n\t\tparent: false,\n\t\troute: false,\n\t\turl: false,\n\t\tsearch_params: /* @__PURE__ */ new Set()\n\t};\n\tconst node = await loader();\n\tif (node.universal?.load) {\n\t\t/** @param {string[]} deps */\n\t\tfunction depends(...deps) {\n\t\t\tfor (const dep of deps) {\n\t\t\t\tconst { href } = new URL(dep, url);\n\t\t\t\tuses.dependencies.add(href);\n\t\t\t}\n\t\t}\n\t\t/** @type {import('@sveltejs/kit').LoadEvent} */\n\t\tconst load_input = {\n\t\t\ttracing: {\n\t\t\t\tenabled: false,\n\t\t\t\troot: noop_span,\n\t\t\t\tcurrent: noop_span\n\t\t\t},\n\t\t\troute: new Proxy(route, { get: (target, key) => {\n\t\t\t\tif (is_tracking) uses.route = true;\n\t\t\t\treturn target[key];\n\t\t\t} }),\n\t\t\tparams: new Proxy(params, { get: (target, key) => {\n\t\t\t\tif (is_tracking) uses.params.add(key);\n\t\t\t\treturn target[key];\n\t\t\t} }),\n\t\t\tdata: server_data_node?.data ?? null,\n\t\t\turl: make_trackable(url, () => {\n\t\t\t\tif (is_tracking) uses.url = true;\n\t\t\t}, (param) => {\n\t\t\t\tif (is_tracking) uses.search_params.add(param);\n\t\t\t}, app.hash),\n\t\t\tasync fetch(resource, init) {\n\t\t\t\tif (resource instanceof Request) init = {\n\t\t\t\t\tbody: resource.method === \"GET\" || resource.method === \"HEAD\" ? void 0 : await resource.blob(),\n\t\t\t\t\tcache: resource.cache,\n\t\t\t\t\tcredentials: resource.credentials,\n\t\t\t\t\theaders: [...resource.headers].length > 0 ? resource?.headers : void 0,\n\t\t\t\t\tintegrity: resource.integrity,\n\t\t\t\t\tkeepalive: resource.keepalive,\n\t\t\t\t\tmethod: resource.method,\n\t\t\t\t\tmode: resource.mode,\n\t\t\t\t\tredirect: resource.redirect,\n\t\t\t\t\treferrer: resource.referrer,\n\t\t\t\t\treferrerPolicy: resource.referrerPolicy,\n\t\t\t\t\tsignal: resource.signal,\n\t\t\t\t\t...init\n\t\t\t\t};\n\t\t\t\tconst { resolved, promise } = resolve_fetch_url(resource, init, url);\n\t\t\t\tif (is_tracking) depends(resolved.href);\n\t\t\t\treturn promise;\n\t\t\t},\n\t\t\tsetHeaders: noop,\n\t\t\tdepends,\n\t\t\tparent() {\n\t\t\t\tif (is_tracking) uses.parent = true;\n\t\t\t\treturn parent();\n\t\t\t},\n\t\t\tuntrack(fn) {\n\t\t\t\tis_tracking = false;\n\t\t\t\ttry {\n\t\t\t\t\treturn fn();\n\t\t\t\t} finally {\n\t\t\t\t\tis_tracking = true;\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\tdata = await node.universal.load.call(null, load_input) ?? null;\n\t}\n\treturn {\n\t\tnode,\n\t\tloader,\n\t\tserver: server_data_node,\n\t\tuniversal: node.universal?.load ? {\n\t\t\ttype: \"data\",\n\t\t\tdata,\n\t\t\tuses\n\t\t} : null,\n\t\tdata: data ?? server_data_node?.data ?? null,\n\t\tslash: node.universal?.trailingSlash ?? server_data_node?.slash\n\t};\n}\n/**\n* @param {Request | string | URL} input\n* @param {RequestInit | undefined} init\n* @param {URL} url\n*/\nfunction resolve_fetch_url(input, init, url) {\n\tlet requested = input instanceof Request ? input.url : input;\n\tconst resolved = new URL(requested, url);\n\tif (resolved.origin === url.origin) requested = resolved.href.slice(url.origin.length);\n\treturn {\n\t\tresolved,\n\t\tpromise: started ? subsequent_fetch(requested, resolved.href, init) : initial_fetch(requested, init)\n\t};\n}\n/**\n* @param {boolean} parent_changed\n* @param {boolean} route_changed\n* @param {boolean} url_changed\n* @param {Set<string>} search_params_changed\n* @param {import('types').Uses | undefined} uses\n* @param {Record<string, string>} params\n*/\nfunction has_changed(parent_changed, route_changed, url_changed, search_params_changed, uses, params) {\n\tif (force_invalidation) return true;\n\tif (!uses) return false;\n\tif (uses.parent && parent_changed) return true;\n\tif (uses.route && route_changed) return true;\n\tif (uses.url && url_changed) return true;\n\tfor (const tracked_params of uses.search_params) if (search_params_changed.has(tracked_params)) return true;\n\tfor (const param of uses.params) if (params[param] !== current.params[param]) return true;\n\tfor (const href of uses.dependencies) if (invalidated.some((fn) => fn(new URL(href)))) return true;\n\treturn false;\n}\n/**\n* @param {import('types').ServerDataNode | import('types').ServerDataSkippedNode | null} node\n* @param {import('./types.js').DataNode | null} [previous]\n* @returns {import('./types.js').DataNode | null}\n*/\nfunction create_data_node(node, previous) {\n\tif (node?.type === \"data\") return node;\n\tif (node?.type === \"skip\") return previous ?? null;\n\treturn null;\n}\n/**\n* @param {URL | null} old_url\n* @param {URL} new_url\n*/\nfunction diff_search_params(old_url, new_url) {\n\tif (!old_url) return new Set(new_url.searchParams.keys());\n\tconst changed = /* @__PURE__ */ new Set([...old_url.searchParams.keys(), ...new_url.searchParams.keys()]);\n\tfor (const key of changed) {\n\t\tconst old_values = old_url.searchParams.getAll(key);\n\t\tconst new_values = new_url.searchParams.getAll(key);\n\t\tif (old_values.every((value) => new_values.includes(value)) && new_values.every((value) => old_values.includes(value))) changed.delete(key);\n\t}\n\treturn changed;\n}\n/**\n* @param {Omit<import('./types.js').NavigationFinished['state'], 'branch'> & { error: App.Error }} opts\n* @returns {import('./types.js').NavigationFinished}\n*/\nfunction preload_error({ error, url, route, params }) {\n\treturn {\n\t\ttype: \"loaded\",\n\t\tstate: {\n\t\t\terror,\n\t\t\turl,\n\t\t\troute,\n\t\t\tparams,\n\t\t\tbranch: []\n\t\t},\n\t\tprops: {\n\t\t\tpage: clone_page(page),\n\t\t\tconstructors: []\n\t\t}\n\t};\n}\n/**\n* @overload\n* @param {import('./types.js').NavigationIntent} intent\n* @returns {Promise<import('./types.js').NavigationResult | undefined>}\n*/\n/**\n* @overload\n* @param {import('./types.js').NavigationIntent & { preload: {} }} intent\n* @returns {Promise<import('./types.js').NavigationResult>}\n*/\n/**\n* @param {import('./types.js').NavigationIntent & { preload?: {} }} intent\n* @returns {Promise<import('./types.js').NavigationResult | undefined>}\n*/\nasync function load_route({ id, invalidating, url, params, route, preload }) {\n\tif (load_cache?.id === id) {\n\t\tpreload_tokens.delete(load_cache.token);\n\t\treturn load_cache.promise;\n\t}\n\tconst { errors, layouts, leaf } = route;\n\tconst loaders = [...layouts, leaf];\n\terrors.forEach((loader) => loader?.().catch(noop));\n\tloaders.forEach((loader) => loader?.[1]().catch(noop));\n\t/** @type {import('types').ServerNodesResponse | import('types').ServerRedirectNode | null} */\n\tlet server_data = null;\n\tconst url_changed = current.url ? id !== get_page_key(current.url) : false;\n\tconst route_changed = current.route ? route.id !== current.route.id : false;\n\tconst search_params_changed = diff_search_params(current.url, url);\n\tlet parent_invalid = false;\n\t{\n\t\tconst invalid_server_nodes = loaders.map((loader, i) => {\n\t\t\tconst previous = current.branch[i];\n\t\t\tconst invalid = !!loader?.[0] && (previous?.loader !== loader[1] || has_changed(parent_invalid, route_changed, url_changed, search_params_changed, previous.server?.uses, params));\n\t\t\tif (invalid) parent_invalid = true;\n\t\t\treturn invalid;\n\t\t});\n\t\tif (invalid_server_nodes.some(Boolean)) {\n\t\t\ttry {\n\t\t\t\tserver_data = await load_data(url, invalid_server_nodes);\n\t\t\t} catch (error) {\n\t\t\t\tconst handled_error = await handle_error(error, {\n\t\t\t\t\turl,\n\t\t\t\t\tparams,\n\t\t\t\t\troute: { id }\n\t\t\t\t});\n\t\t\t\tif (preload && preload_tokens.has(preload)) return preload_error({\n\t\t\t\t\terror: handled_error,\n\t\t\t\t\turl,\n\t\t\t\t\tparams,\n\t\t\t\t\troute\n\t\t\t\t});\n\t\t\t\treturn load_root_error_page({\n\t\t\t\t\tstatus: get_status(error),\n\t\t\t\t\terror: handled_error,\n\t\t\t\t\turl,\n\t\t\t\t\troute\n\t\t\t\t});\n\t\t\t}\n\t\t\tif (server_data.type === \"redirect\") return server_data;\n\t\t}\n\t}\n\tconst server_data_nodes = server_data?.nodes;\n\tlet parent_changed = false;\n\tconst branch_promises = loaders.map(async (loader, i) => {\n\t\tif (!loader) return;\n\t\t/** @type {import('./types.js').BranchNode | undefined} */\n\t\tconst previous = current.branch[i];\n\t\tconst server_data_node = server_data_nodes?.[i];\n\t\tif ((!server_data_node || server_data_node.type === \"skip\") && loader[1] === previous?.loader && !has_changed(parent_changed, route_changed, url_changed, search_params_changed, previous.universal?.uses, params)) return previous;\n\t\tparent_changed = true;\n\t\tif (server_data_node?.type === \"error\") throw server_data_node;\n\t\treturn load_node({\n\t\t\tloader: loader[1],\n\t\t\turl,\n\t\t\tparams,\n\t\t\troute,\n\t\t\tparent: async () => {\n\t\t\t\tconst data = {};\n\t\t\t\tfor (let j = 0; j < i; j += 1) Object.assign(data, (await branch_promises[j])?.data);\n\t\t\t\treturn data;\n\t\t\t},\n\t\t\tserver_data_node: create_data_node(server_data_node === void 0 && loader[0] ? { type: \"skip\" } : server_data_node ?? null, loader[0] ? previous?.server : void 0)\n\t\t});\n\t});\n\tfor (const p of branch_promises) p.catch(noop);\n\t/** @type {Array<import('./types.js').BranchNode | undefined>} */\n\tconst branch = [];\n\tfor (let i = 0; i < loaders.length; i += 1) if (loaders[i]) try {\n\t\tbranch.push(await branch_promises[i]);\n\t} catch (err) {\n\t\tif (err instanceof Redirect) return {\n\t\t\ttype: \"redirect\",\n\t\t\tlocation: err.location\n\t\t};\n\t\tif (preload && preload_tokens.has(preload)) return preload_error({\n\t\t\terror: await handle_error(err, {\n\t\t\t\tparams,\n\t\t\t\turl,\n\t\t\t\troute: { id: route.id }\n\t\t\t}),\n\t\t\turl,\n\t\t\tparams,\n\t\t\troute\n\t\t});\n\t\tlet status = get_status(err);\n\t\t/** @type {App.Error} */\n\t\tlet error;\n\t\tif (server_data_nodes?.includes(err)) {\n\t\t\tstatus = err.status ?? status;\n\t\t\terror = err.error;\n\t\t} else if (err instanceof HttpError) error = err.body;\n\t\telse {\n\t\t\tif (await stores.updated.check()) {\n\t\t\t\tawait update_service_worker();\n\t\t\t\treturn await native_navigation(url);\n\t\t\t}\n\t\t\terror = await handle_error(err, {\n\t\t\t\tparams,\n\t\t\t\turl,\n\t\t\t\troute: { id: route.id }\n\t\t\t});\n\t\t}\n\t\tconst error_load = await load_nearest_error_page(i, branch, errors);\n\t\tif (error_load) return get_navigation_result_from_branch({\n\t\t\turl,\n\t\t\tparams,\n\t\t\tbranch: branch.slice(0, error_load.idx).concat(error_load.node),\n\t\t\terrors,\n\t\t\tstatus,\n\t\t\terror,\n\t\t\troute\n\t\t});\n\t\telse return await server_fallback(url, { id: route.id }, error, status);\n\t}\n\telse branch.push(void 0);\n\treturn get_navigation_result_from_branch({\n\t\turl,\n\t\tparams,\n\t\tbranch,\n\t\terrors,\n\t\tstatus: 200,\n\t\terror: null,\n\t\troute,\n\t\tform: invalidating ? void 0 : null\n\t});\n}\n/**\n* @param {number} i Start index to backtrack from\n* @param {Array<import('./types.js').BranchNode | undefined>} branch Branch to backtrack\n* @param {Array<import('types').CSRPageNodeLoader | undefined>} errors All error pages for this branch\n* @returns {Promise<{idx: number; node: import('./types.js').BranchNode} | undefined>}\n*/\nasync function load_nearest_error_page(i, branch, errors) {\n\twhile (i--) if (errors[i]) {\n\t\tlet j = i;\n\t\twhile (!branch[j]) j -= 1;\n\t\ttry {\n\t\t\treturn {\n\t\t\t\tidx: j + 1,\n\t\t\t\tnode: {\n\t\t\t\t\tnode: await errors[i](),\n\t\t\t\t\tloader: errors[i],\n\t\t\t\t\tdata: {},\n\t\t\t\t\tserver: null,\n\t\t\t\t\tuniversal: null\n\t\t\t\t}\n\t\t\t};\n\t\t} catch {\n\t\t\tcontinue;\n\t\t}\n\t}\n}\n/**\n* @param {{\n* status: number;\n* error: App.Error;\n* url: URL;\n* route: { id: string | null }\n* }} opts\n* @returns {Promise<import('./types.js').NavigationFinished | undefined>} returns `undefined` in case of a redirect\n*/\nasync function load_root_error_page({ status, error, url, route }) {\n\t/** @type {Record<string, string>} */\n\tconst params = {};\n\t/** @type {import('types').ServerDataNode | null} */\n\tlet server_data_node = null;\n\tif (app.server_loads[0] === 0) try {\n\t\tconst server_data = await load_data(url, [true]);\n\t\tif (server_data.type !== \"data\" || server_data.nodes[0] && server_data.nodes[0].type !== \"data\") throw 0;\n\t\tserver_data_node = server_data.nodes[0] ?? null;\n\t} catch (e) {\n\t\tif (!(e instanceof HttpError && e.status === 404) && (url.origin !== origin || url.pathname !== location.pathname || hydrated)) return await native_navigation(url);\n\t}\n\ttry {\n\t\treturn get_navigation_result_from_branch({\n\t\t\turl,\n\t\t\tparams,\n\t\t\tbranch: [await load_node({\n\t\t\t\tloader: default_layout_loader,\n\t\t\t\turl,\n\t\t\t\tparams,\n\t\t\t\troute,\n\t\t\t\tparent: () => Promise.resolve({}),\n\t\t\t\tserver_data_node: create_data_node(server_data_node)\n\t\t\t}), {\n\t\t\t\tnode: await default_error_loader(),\n\t\t\t\tloader: default_error_loader,\n\t\t\t\tuniversal: null,\n\t\t\t\tserver: null,\n\t\t\t\tdata: null\n\t\t\t}],\n\t\t\tstatus,\n\t\t\terror,\n\t\t\terrors: [],\n\t\t\troute: null\n\t\t});\n\t} catch (error) {\n\t\tif (error instanceof Redirect) {\n\t\t\tawait _goto(new URL(error.location, location.href), {}, 0);\n\t\t\treturn;\n\t\t}\n\t\tconst error_template = await app.get_error_template();\n\t\tconst handled = await handle_error(error, {\n\t\t\turl,\n\t\t\tparams,\n\t\t\troute\n\t\t});\n\t\tconst html = error_template({\n\t\t\tstatus,\n\t\t\tmessage: String(handled?.message ?? \"\").replace(/&/g, \"&\").replace(/</g, \"<\").replace(/>/g, \">\")\n\t\t});\n\t\tconst parsed = new DOMParser().parseFromString(html, \"text/html\");\n\t\tdocument.documentElement.replaceChild(document.adoptNode(parsed.head), document.head);\n\t\tdocument.documentElement.replaceChild(document.adoptNode(parsed.body), document.body);\n\t\tthrow error;\n\t}\n}\n/**\n* Resolve the relative rerouted URL for a client-side navigation\n* @param {URL} url\n* @returns {Promise<URL | undefined>}\n*/\nasync function get_rerouted_url(url) {\n\tconst href = url.href;\n\tif (reroute_cache.has(href)) return reroute_cache.get(href);\n\tlet rerouted;\n\ttry {\n\t\tconst promise = (async () => {\n\t\t\tlet rerouted = await app.hooks.reroute({\n\t\t\t\turl: new URL(url),\n\t\t\t\tfetch: async (input, init) => {\n\t\t\t\t\treturn resolve_fetch_url(input, init, url).promise;\n\t\t\t\t}\n\t\t\t}) ?? url;\n\t\t\tif (typeof rerouted === \"string\") {\n\t\t\t\tconst tmp = new URL(url);\n\t\t\t\tif (app.hash) tmp.hash = rerouted;\n\t\t\t\telse tmp.pathname = rerouted;\n\t\t\t\trerouted = tmp;\n\t\t\t}\n\t\t\treturn rerouted;\n\t\t})();\n\t\treroute_cache.set(href, promise);\n\t\trerouted = await promise;\n\t} catch (e) {\n\t\treroute_cache.delete(href);\n\t\treturn;\n\t}\n\treturn rerouted;\n}\n/**\n* Resolve the full info (which route, params, etc.) for a client-side navigation from the URL,\n* taking the reroute hook into account. If this isn't a client-side-navigation (or the URL is undefined),\n* returns undefined.\n* @param {URL | undefined} url\n* @param {boolean} invalidating\n* @returns {Promise<import('./types.js').NavigationIntent | undefined>}\n*/\nasync function get_navigation_intent(url, invalidating) {\n\tif (!url) return;\n\tif (is_external_url(url, base, app.hash)) return;\n\t{\n\t\tconst rerouted = await get_rerouted_url(url);\n\t\tif (!rerouted) return;\n\t\tconst path = get_url_path(rerouted);\n\t\tfor (const route of routes) {\n\t\t\tconst params = route.exec(path);\n\t\t\tif (params) return {\n\t\t\t\tid: get_page_key(url),\n\t\t\t\tinvalidating,\n\t\t\t\troute,\n\t\t\t\tparams: decode_params(params),\n\t\t\t\turl\n\t\t\t};\n\t\t}\n\t}\n}\n/** @param {URL} url */\nfunction get_url_path(url) {\n\treturn decode_pathname(app.hash ? url.hash.replace(/^#/, \"\").replace(/[?#].+/, \"\") : url.pathname.slice(base.length)) || \"/\";\n}\n/** @param {URL} url */\nfunction get_page_key(url) {\n\treturn (app.hash ? url.hash.replace(/^#/, \"\") : url.pathname) + url.search;\n}\n/**\n* @param {{\n* url: URL;\n* type: import('@sveltejs/kit').Navigation[\"type\"];\n* intent?: import('./types.js').NavigationIntent;\n* delta?: number;\n* event?: PopStateEvent | MouseEvent;\n* scroll?: { x: number, y: number };\n* }} opts\n*/\nfunction _before_navigate({ url, type, intent, delta, event, scroll }) {\n\tlet should_block = false;\n\tconst nav = create_navigation(current, intent, url, type, scroll ?? null);\n\tif (delta !== void 0) nav.navigation.delta = delta;\n\tif (event !== void 0) nav.navigation.event = event;\n\tconst cancellable = {\n\t\t...nav.navigation,\n\t\tcancel: () => {\n\t\t\tshould_block = true;\n\t\t\tnav.reject(/* @__PURE__ */ new Error(\"navigation cancelled\"));\n\t\t}\n\t};\n\tif (!is_navigating) before_navigate_callbacks.forEach((fn) => fn(cancellable));\n\treturn should_block ? null : nav;\n}\n/**\n* @param {{\n* type: import('@sveltejs/kit').NavigationType;\n* url: URL;\n* popped?: {\n* state: Record<string, any>;\n* scroll: { x: number, y: number };\n* delta: number;\n* };\n* keepfocus?: boolean;\n* noscroll?: boolean;\n* replace_state?: boolean;\n* state?: Record<string, any>;\n* redirect_count?: number;\n* nav_token?: {};\n* accept?: () => void;\n* block?: () => void;\n* event?: Event\n* }} opts\n* @returns {Promise<void>}\n*/\nasync function navigate({ type, url, popped, keepfocus, noscroll, replace_state, state = {}, redirect_count = 0, nav_token = {}, accept = noop, block = noop, event }) {\n\tconst prev_token = token;\n\ttoken = nav_token;\n\tconst intent = await get_navigation_intent(url, false);\n\tconst nav = type === \"enter\" ? create_navigation(current, intent, url, type) : _before_navigate({\n\t\turl,\n\t\ttype,\n\t\tdelta: popped?.delta,\n\t\tintent,\n\t\tscroll: popped?.scroll,\n\t\tevent\n\t});\n\tif (!nav) {\n\t\tblock();\n\t\tif (token === nav_token) token = prev_token;\n\t\treturn;\n\t}\n\tconst previous_history_index = current_history_index;\n\tconst previous_navigation_index = current_navigation_index;\n\taccept();\n\tis_navigating = true;\n\tif (started && nav.navigation.type !== \"enter\") stores.navigating.set(navigating.current = nav.navigation);\n\tlet navigation_result = intent && await load_route(intent);\n\tif (!navigation_result) if (is_external_url(url, base, app.hash)) return await native_navigation(url, replace_state);\n\telse navigation_result = await server_fallback(url, { id: null }, await handle_error(new SvelteKitError(404, \"Not Found\", `Not found: ${url.pathname}`), {\n\t\turl,\n\t\tparams: {},\n\t\troute: { id: null }\n\t}), 404, replace_state);\n\turl = intent?.url || url;\n\tif (token !== nav_token) {\n\t\tnav.reject(/* @__PURE__ */ new Error(\"navigation aborted\"));\n\t\treturn;\n\t}\n\tif (!navigation_result) return;\n\tif (navigation_result.type === \"redirect\") {\n\t\tif (redirect_count < 20) {\n\t\t\tawait navigate({\n\t\t\t\ttype,\n\t\t\t\turl: new URL(navigation_result.location, url),\n\t\t\t\tpopped,\n\t\t\t\tkeepfocus,\n\t\t\t\tnoscroll,\n\t\t\t\treplace_state,\n\t\t\t\tstate,\n\t\t\t\tredirect_count: redirect_count + 1,\n\t\t\t\tnav_token\n\t\t\t});\n\t\t\tnav.fulfil(void 0);\n\t\t\treturn;\n\t\t}\n\t\tnavigation_result = await load_root_error_page({\n\t\t\tstatus: 500,\n\t\t\terror: await handle_error(/* @__PURE__ */ new Error(\"Redirect loop\"), {\n\t\t\t\turl,\n\t\t\t\tparams: {},\n\t\t\t\troute: { id: null }\n\t\t\t}),\n\t\t\turl,\n\t\t\troute: { id: null }\n\t\t});\n\t\tif (!navigation_result) return;\n\t} else if (navigation_result.props.page.status >= 400) {\n\t\tif (await stores.updated.check()) {\n\t\t\tawait update_service_worker();\n\t\t\treturn await native_navigation(url, replace_state);\n\t\t}\n\t}\n\treset_invalidation();\n\tupdate_scroll_positions(previous_history_index);\n\tcapture_snapshot(previous_navigation_index);\n\tif (navigation_result.props.page.url.pathname !== url.pathname) url.pathname = navigation_result.props.page.url.pathname;\n\tstate = popped ? popped.state : state;\n\tif (!popped) {\n\t\tconst change = replace_state ? 0 : 1;\n\t\tconst entry = {\n\t\t\t[HISTORY_INDEX]: current_history_index += change,\n\t\t\t[NAVIGATION_INDEX]: current_navigation_index += change,\n\t\t\t[STATES_KEY]: state\n\t\t};\n\t\t(replace_state ? history.replaceState : history.pushState).call(history, entry, \"\", url);\n\t\tif (!replace_state) clear_onward_history(current_history_index, current_navigation_index);\n\t}\n\tconst load_cache_fork = intent && load_cache?.id === intent.id ? load_cache.fork : null;\n\tif (load_cache?.fork && !load_cache_fork) discard_load_cache();\n\telse {\n\t\tload_cache = null;\n\t\tcurrent_a = {\n\t\t\telement: void 0,\n\t\t\thref: void 0\n\t\t};\n\t}\n\tnavigation_result.props.page.state = state;\n\t/**\n\t* @type {Promise<void> | undefined}\n\t*/\n\tlet commit_promise;\n\tif (started) {\n\t\tconst after_navigate = (await Promise.all(Array.from(on_navigate_callbacks, (fn) => fn(nav.navigation)))).filter(\n\t\t\t/** @returns {value is () => void} */\n\t\t\t(value) => typeof value === \"function\"\n\t\t);\n\t\tif (after_navigate.length > 0) {\n\t\t\tfunction cleanup() {\n\t\t\t\tafter_navigate.forEach((fn) => {\n\t\t\t\t\tafter_navigate_callbacks.delete(fn);\n\t\t\t\t});\n\t\t\t}\n\t\t\tafter_navigate.push(cleanup);\n\t\t\tafter_navigate.forEach((fn) => {\n\t\t\t\tafter_navigate_callbacks.add(fn);\n\t\t\t});\n\t\t}\n\t\tconst target = nav.navigation.to;\n\t\tcurrent = {\n\t\t\t...navigation_result.state,\n\t\t\tnav: {\n\t\t\t\tparams: target.params,\n\t\t\t\troute: target.route,\n\t\t\t\turl: target.url\n\t\t\t}\n\t\t};\n\t\tif (navigation_result.props.page) navigation_result.props.page.url = url;\n\t\tif (!keepfocus && document.activeElement instanceof HTMLElement && document.activeElement !== document.body) document.activeElement.blur();\n\t\tconst fork = load_cache_fork && await load_cache_fork;\n\t\tif (fork) commit_promise = fork.commit();\n\t\telse {\n\t\t\trendering_error = null;\n\t\t\troot.$set(navigation_result.props);\n\t\t\tif (rendering_error) Object.assign(navigation_result.props.page, rendering_error);\n\t\t\tupdate(navigation_result.props.page);\n\t\t\tcommit_promise = settled?.();\n\t\t}\n\t} else await initialize(navigation_result, target, false);\n\tconst { activeElement } = document;\n\tawait commit_promise;\n\tawait tick$1();\n\tawait tick$1();\n\tif (token !== nav_token) {\n\t\tnav.reject(/* @__PURE__ */ new Error(\"navigation aborted\"));\n\t\treturn;\n\t}\n\tif (navigation_result.props.page && rendering_error) Object.assign(navigation_result.props.page, rendering_error);\n\t/** @type {Element | null | ''} */\n\tlet deep_linked = null;\n\tif (autoscroll) {\n\t\tconst scroll = popped ? popped.scroll : noscroll ? scroll_state() : null;\n\t\tif (scroll) scrollTo(scroll.x, scroll.y);\n\t\telse if (deep_linked = url.hash && document.getElementById(get_id(url))) deep_linked.scrollIntoView();\n\t\telse scrollTo(0, 0);\n\t}\n\tconst changed_focus = document.activeElement !== activeElement && document.activeElement !== document.body;\n\tif (!keepfocus && !changed_focus) reset_focus(url, !deep_linked);\n\tautoscroll = true;\n\tis_navigating = false;\n\tnav.fulfil(void 0);\n\tif (nav.navigation.to) nav.navigation.to.scroll = scroll_state();\n\tafter_navigate_callbacks.forEach((fn) => fn(nav.navigation));\n\tif (type === \"popstate\") restore_snapshot(current_navigation_index);\n\tstores.navigating.set(navigating.current = null);\n}\n/**\n* Does a full page reload if it wouldn't result in an endless loop in the SPA case\n* @param {URL} url\n* @param {{ id: string | null }} route\n* @param {App.Error} error\n* @param {number} status\n* @param {boolean} [replace_state]\n* @returns {Promise<import('./types.js').NavigationFinished | undefined>}\n*/\nasync function server_fallback(url, route, error, status, replace_state) {\n\tif (url.origin === origin && url.pathname === location.pathname && !hydrated) return await load_root_error_page({\n\t\tstatus,\n\t\terror,\n\t\turl,\n\t\troute\n\t});\n\treturn await native_navigation(url, replace_state);\n}\n/** @typedef {(typeof PRELOAD_PRIORITIES)['hover'] | (typeof PRELOAD_PRIORITIES)['tap']} PreloadDataPriority */\n/**\n* The anchor element whose href is being preloaded. It is reset after navigation\n* or changes when a different anchor element is being preloaded.\n* @type {{ element: Element | SVGAElement | undefined; href: string | SVGAnimatedString | undefined }}\n*/\nvar current_a = {\n\telement: void 0,\n\thref: void 0\n};\n/**\n* @param {unknown} error\n* @param {import('@sveltejs/kit').NavigationEvent} event\n* @returns {import('types').MaybePromise<App.Error>}\n*/\nfunction handle_error(error, event) {\n\tif (error instanceof HttpError) return error.body;\n\tconst status = get_status(error);\n\tconst message = get_message(error);\n\treturn app.hooks.handleError({\n\t\terror,\n\t\tevent,\n\t\tstatus,\n\t\tmessage\n\t}) ?? { message };\n}\n/**\n* Allows you to navigate programmatically to a given route, with options such as keeping the current element focused.\n* Returns a Promise that resolves when SvelteKit navigates (or fails to navigate, in which case the promise rejects) to the specified `url`.\n*\n* For external URLs, use `window.location = url` instead of calling `goto(url)`.\n*\n* @param {string | URL} url Where to navigate to. Note that if you've set [`config.kit.paths.base`](https://svelte.dev/docs/kit/configuration#paths) and the URL is root-relative, you need to prepend the base path if you want to navigate within the app.\n* @param {Object} [opts] Options related to the navigation\n* @param {boolean} [opts.replaceState] If `true`, will replace the current `history` entry rather than creating a new one with `pushState`\n* @param {boolean} [opts.noScroll] If `true`, the browser will maintain its scroll position rather than scrolling to the top of the page after navigation\n* @param {boolean} [opts.keepFocus] If `true`, the currently focused element will retain focus after navigation. Otherwise, focus will be reset to the body\n* @param {boolean} [opts.invalidateAll] If `true`, all `load` functions of the page will be rerun. See https://svelte.dev/docs/kit/load#rerunning-load-functions for more info on invalidation.\n* @param {Array<string | URL | ((url: URL) => boolean)>} [opts.invalidate] Causes any load functions to re-run if they depend on one of the urls\n* @param {App.PageState} [opts.state] An optional object that will be available as `page.state`\n* @returns {Promise<void>}\n*/\nfunction goto(url, opts = {}) {\n\tthrow new Error(\"Cannot call goto(...) on the server\");\n}\n/**\n* @param {string | URL | ((url: URL) => boolean)} resource The invalidated URL\n*/\nfunction push_invalidated(resource) {\n\tif (typeof resource === \"function\") invalidated.push(resource);\n\telse {\n\t\tconst { href } = new URL(resource, location.href);\n\t\tinvalidated.push((url) => url.href === href);\n\t}\n}\n/**\n* Causes all `load` and `query` functions belonging to the currently active page to re-run. Returns a `Promise` that resolves when the page is subsequently updated.\n* @returns {Promise<void>}\n*/\nfunction invalidateAll() {\n\tthrow new Error(\"Cannot call invalidateAll() on the server\");\n}\n/**\n* @param {URL} url\n* @param {boolean[]} invalid\n* @returns {Promise<import('types').ServerNodesResponse | import('types').ServerRedirectNode>}\n*/\nasync function load_data(url, invalid) {\n\tconst data_url = new URL(url);\n\tdata_url.pathname = add_data_suffix(url.pathname);\n\tif (url.pathname.endsWith(\"/\")) data_url.searchParams.append(TRAILING_SLASH_PARAM, \"1\");\n\tdata_url.searchParams.append(INVALIDATED_PARAM, invalid.map((i) => i ? \"1\" : \"0\").join(\"\"));\n\tconst res = await (0, window.fetch)(data_url.href, {});\n\tif (!res.ok) {\n\t\t/** @type {string | undefined} */\n\t\tlet message;\n\t\tif (res.headers.get(\"content-type\")?.includes(\"application/json\")) message = await res.json();\n\t\telse if (res.status === 404) message = \"Not Found\";\n\t\telse if (res.status === 500) message = \"Internal Error\";\n\t\tthrow new HttpError(res.status, message);\n\t}\n\treturn new Promise((resolve, reject) => {\n\t\tprocess_stream(resolve, res).catch(reject);\n\t});\n}\n/**\n* @param {(value: ServerNodesResponse | ServerRedirectNode) => void} resolve\n* @param {Response} res\n* @returns {Promise<void>}\n*/\nasync function process_stream(resolve, res) {\n\tconst reader = res.body.getReader();\n\t/**\n\t* Map of deferred promises that will be resolved by a subsequent chunk of data\n\t* @type {Map<string, import('types').Deferred>}\n\t*/\n\tconst deferreds = /* @__PURE__ */ new Map();\n\t/**\n\t* @param {any} data\n\t*/\n\tfunction deserialize(data) {\n\t\treturn unflatten(data, {\n\t\t\t...app.decoders,\n\t\t\tPromise: (id) => {\n\t\t\t\treturn new Promise((fulfil, reject) => {\n\t\t\t\t\tdeferreds.set(id, {\n\t\t\t\t\t\tfulfil,\n\t\t\t\t\t\treject\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t}\n\tfor await (const node of read_ndjson(reader)) {\n\t\tif (node.type === \"redirect\") return resolve(node);\n\t\tif (node.type === \"data\") {\n\t\t\tnode.nodes?.forEach((node) => {\n\t\t\t\tif (node?.type === \"data\") {\n\t\t\t\t\tnode.uses = deserialize_uses(node.uses);\n\t\t\t\t\tnode.data = deserialize(node.data);\n\t\t\t\t}\n\t\t\t});\n\t\t\tresolve(node);\n\t\t} else if (node.type === \"chunk\") {\n\t\t\tconst { id, data, error } = node;\n\t\t\tconst deferred = deferreds.get(id);\n\t\t\tdeferreds.delete(id);\n\t\t\tif (error) deferred.reject(deserialize(error));\n\t\t\telse deferred.fulfil(deserialize(data));\n\t\t}\n\t}\n}\n/**\n* @param {any} uses\n* @return {import('types').Uses}\n*/\nfunction deserialize_uses(uses) {\n\treturn {\n\t\tdependencies: new Set(uses?.dependencies ?? []),\n\t\tparams: new Set(uses?.params ?? []),\n\t\tparent: !!uses?.parent,\n\t\troute: !!uses?.route,\n\t\turl: !!uses?.url,\n\t\tsearch_params: new Set(uses?.search_params ?? [])\n\t};\n}\n/**\n* @param {URL} url\n* @param {boolean} [scroll]\n*/\nfunction reset_focus(url, scroll = true) {\n\tconst autofocus = document.querySelector(\"[autofocus]\");\n\tif (autofocus) autofocus.focus();\n\telse {\n\t\tconst id = get_id(url);\n\t\tif (id && document.getElementById(id)) {\n\t\t\tconst { x, y } = scroll_state();\n\t\t\tsetTimeout(() => {\n\t\t\t\tconst history_state = history.state;\n\t\t\t\tlocation.replace(new URL(`#${id}`, location.href));\n\t\t\t\thistory.replaceState(history_state, \"\", url);\n\t\t\t\tif (scroll) scrollTo(x, y);\n\t\t\t});\n\t\t} else {\n\t\t\tconst root = document.body;\n\t\t\tconst tabindex = root.getAttribute(\"tabindex\");\n\t\t\troot.tabIndex = -1;\n\t\t\troot.focus({\n\t\t\t\tpreventScroll: true,\n\t\t\t\tfocusVisible: false\n\t\t\t});\n\t\t\tif (tabindex !== null) root.setAttribute(\"tabindex\", tabindex);\n\t\t\telse root.removeAttribute(\"tabindex\");\n\t\t}\n\t\tconst selection = getSelection();\n\t\tif (selection && selection.type !== \"None\") {\n\t\t\t/** @type {Range[]} */\n\t\t\tconst ranges = [];\n\t\t\tfor (let i = 0; i < selection.rangeCount; i += 1) ranges.push(selection.getRangeAt(i));\n\t\t\tsetTimeout(() => {\n\t\t\t\tif (selection.rangeCount !== ranges.length) return;\n\t\t\t\tfor (let i = 0; i < selection.rangeCount; i += 1) {\n\t\t\t\t\tconst a = ranges[i];\n\t\t\t\t\tconst b = selection.getRangeAt(i);\n\t\t\t\t\tif (a.commonAncestorContainer !== b.commonAncestorContainer || a.startContainer !== b.startContainer || a.endContainer !== b.endContainer || a.startOffset !== b.startOffset || a.endOffset !== b.endOffset) return;\n\t\t\t\t}\n\t\t\t\tselection.removeAllRanges();\n\t\t\t});\n\t\t}\n\t}\n}\n/**\n* @template {import('@sveltejs/kit').NavigationType} T\n* @param {import('./types.js').NavigationState} current\n* @param {import('./types.js').NavigationIntent | undefined} intent\n* @param {URL | null} url\n* @param {T} type\n* @param {{ x: number, y: number } | null} [target_scroll] The scroll position for the target (for popstate navigations)\n*/\nfunction create_navigation(current, intent, url, type, target_scroll = null) {\n\t/** @type {(value: any) => void} */\n\tlet fulfil;\n\t/** @type {(error: any) => void} */\n\tlet reject;\n\tconst complete = new Promise((f, r) => {\n\t\tfulfil = f;\n\t\treject = r;\n\t});\n\tcomplete.catch(noop);\n\treturn {\n\t\tnavigation: {\n\t\t\tfrom: {\n\t\t\t\tparams: current.params,\n\t\t\t\troute: { id: current.route?.id ?? null },\n\t\t\t\turl: current.url,\n\t\t\t\tscroll: scroll_state()\n\t\t\t},\n\t\t\tto: url && {\n\t\t\t\tparams: intent?.params ?? null,\n\t\t\t\troute: { id: intent?.route?.id ?? null },\n\t\t\t\turl,\n\t\t\t\tscroll: target_scroll\n\t\t\t},\n\t\t\twillUnload: !intent,\n\t\t\ttype,\n\t\t\tcomplete\n\t\t},\n\t\tfulfil,\n\t\treject\n\t};\n}\n/**\n* TODO: remove this in 3.0 when the page store is also removed\n*\n* We need to assign a new page object so that subscribers are correctly notified.\n* However, spreading `{ ...page }` returns an empty object so we manually\n* assign to each property instead.\n*\n* @param {import('@sveltejs/kit').Page} page\n*/\nfunction clone_page(page) {\n\treturn {\n\t\tdata: page.data,\n\t\terror: page.error,\n\t\tform: page.form,\n\t\tparams: page.params,\n\t\troute: page.route,\n\t\tstate: page.state,\n\t\tstatus: page.status,\n\t\turl: page.url\n\t};\n}\n/**\n* @param {URL} url\n* @returns {string}\n*/\nfunction get_id(url) {\n\tlet id;\n\tif (app.hash) {\n\t\tconst [, , second] = url.hash.split(\"#\", 3);\n\t\tid = second ?? \"\";\n\t} else id = url.hash.slice(1);\n\treturn decodeURIComponent(id);\n}\n//#endregion\nexport { page as a, navigating as i, invalidateAll as n, updated as o, stores as r, goto as t };\n"],"names":["noop$1"],"mappings":";;;;;;;;AA6FA,IAAI,SAAS,GAAGA,IAAM,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,uBAAuB,CAAC,IAAI,CAACA,IAAM,CAAC,QAAQ,EAAE,CAAC;AACnG,IAAI,eAAe,GAAG,IAAI;AAC1B,IAAI,SAAS,EAAE;AACf,EAAQ;AACR,EAAE,IAAI,EAAE,EAAE;AACV,EAAE,IAAI,EAAE,IAAI;AACZ,EAAE,KAAK,EAAE,IAAI;AACb,EAAE,MAAM,EAAE,EAAE;AACZ,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE;AACrB,EAAE,KAAK,EAAE,EAAE;AACX,EAAE,MAAM,EAAE,EAAE;AACZ,EAAE,GAAG,EAAE,IAAI,GAAG,CAAC,eAAe;AAC9B,GAAE;AAGF;AA+IA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,oBAAoB;AAmiC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,IAAI,CAAC,GAAG,EAAE,IAAI,GAAG,EAAE,EAAE;AAC9B,CAAC,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC;AACvD;AAWA;AACA;AACA;AACA;AACA,SAAS,aAAa,GAAG;AACzB,CAAC,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC;AAC7D;;;;"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { b as private_env } from './shared-server.js-DA4m8f1m.js';
|
|
2
2
|
import { g as getLogger } from './providers.server.js-Ck45V_zF.js';
|
|
3
3
|
import { e as ee } from './chunk-Y3M7P3BW.js-qwxSY5dh.js';
|
|
4
|
-
import { A } from './chunk-
|
|
5
|
-
import './compute.js-
|
|
6
|
-
import { g as COMPUTE_RESPONSE_CACHE_BYTES, h as COMPUTE_REUSE_DEFINITION_CACHE, i as COMPUTE_CACHE_ERRORED_SOLVES, j as COMPUTE_SERVER_CACHESOLVE, k as COMPUTE_QUEUE_WAIT_MS, l as COMPUTE_MAX_QUEUE_DEPTH, m as COMPUTE_MAX_CONCURRENT, f as MAX_SOLVE_DURATION_MS } from './computeLimits.js-
|
|
4
|
+
import { A } from './chunk-6TMSTNHN.js-3Bz2KNTb.js';
|
|
5
|
+
import './compute.js-DGTy3YjO.js';
|
|
6
|
+
import { g as COMPUTE_RESPONSE_CACHE_BYTES, h as COMPUTE_REUSE_DEFINITION_CACHE, i as COMPUTE_CACHE_ERRORED_SOLVES, j as COMPUTE_SERVER_CACHESOLVE, k as COMPUTE_QUEUE_WAIT_MS, l as COMPUTE_MAX_QUEUE_DEPTH, m as COMPUTE_MAX_CONCURRENT, f as MAX_SOLVE_DURATION_MS } from './computeLimits.js-BxiPi8XP.js';
|
|
7
7
|
|
|
8
8
|
//#region ../server/src/compute/client-cache.ts
|
|
9
9
|
var DEFAULT_MAX_CACHED_CLIENTS = 16;
|
|
@@ -192,4 +192,4 @@ function evictComputeClient(id) {
|
|
|
192
192
|
}
|
|
193
193
|
|
|
194
194
|
export { COMPUTE_DEBUG as C, evictComputeClient as e, getClient as g };
|
|
195
|
-
//# sourceMappingURL=clientCache.server.js-
|
|
195
|
+
//# sourceMappingURL=clientCache.server.js-C9I-Kcfi.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"clientCache.server.js-DnMvUcHP.js","sources":["../../../../.svelte-kit/output/server/chunks/clientCache.server.js"],"sourcesContent":["import { t as private_env } from \"./shared-server.js\";\nimport { f as getLogger } from \"./providers.server.js\";\nimport { l as ee } from \"./chunk-Y3M7P3BW.js\";\nimport { n as A } from \"./chunk-3SEQKFGD.js\";\nimport \"./compute.js\";\nimport { a as COMPUTE_QUEUE_WAIT_MS, i as COMPUTE_MAX_QUEUE_DEPTH, l as COMPUTE_REUSE_DEFINITION_CACHE, m as MAX_SOLVE_DURATION_MS, r as COMPUTE_MAX_CONCURRENT, s as COMPUTE_RESPONSE_CACHE_BYTES, t as COMPUTE_CACHE_ERRORED_SOLVES, u as COMPUTE_SERVER_CACHESOLVE } from \"./computeLimits.js\";\n//#region ../server/src/compute/client-cache.ts\nvar DEFAULT_MAX_CACHED_CLIENTS = 16;\n/**\n* Build a per-server warm-client cache. Each cache owns its own LRU `Map` keyed\n* on server `id`.\n*/\nfunction createClientCache(config) {\n\tconst maxCachedClients = config.maxCachedClients ?? DEFAULT_MAX_CACHED_CLIENTS;\n\tconst cache = /* @__PURE__ */ new Map();\n\tif (config.debugVerbose) ee();\n\tconst debugLog = (message) => {\n\t\tif (config.debug) config.onDebugLog?.(message);\n\t};\n\tasync function build(server, definitionGuid) {\n\t\tconst rhinoTiming = {\n\t\t\tlast: null,\n\t\t\tseq: 0\n\t\t};\n\t\tconst solveMeta = {\n\t\t\tlast: null,\n\t\t\tseq: 0\n\t\t};\n\t\tconst clientConfig = {\n\t\t\tserverUrl: server.serverUrl,\n\t\t\tapiKey: server.apiKey,\n\t\t\tdebug: config.debugVerbose,\n\t\t\tcachesolve: config.cachesolve,\n\t\t\tcacheerroredsolves: config.cacheerroredsolves,\n\t\t\tonServerTiming: (t) => {\n\t\t\t\tconst decode = t.decode ?? 0;\n\t\t\t\tconst solve = t.solve ?? 0;\n\t\t\t\tconst encode = t.encode ?? 0;\n\t\t\t\trhinoTiming.seq += 1;\n\t\t\t\trhinoTiming.last = {\n\t\t\t\t\tdecode,\n\t\t\t\t\tsolve,\n\t\t\t\t\tencode\n\t\t\t\t};\n\t\t\t\tif (!config.debug) return;\n\t\t\t\tconst defCache = decode <= 1 ? \"HIT (definition reused, no re-upload/parse)\" : \"miss (full parse)\";\n\t\t\t\tconst solveCache = config.cachesolve && solve <= 1 ? \"HIT (cached result, solve skipped)\" : config.cachesolve ? \"miss (solved fresh)\" : \"off\";\n\t\t\t\tdebugLog(`[Compute/rhino-cache] decode=${decode}ms solve=${solve}ms encode=${encode}ms | definition-cache: ${defCache} | solve-cache (cachesolve): ${solveCache}`);\n\t\t\t}\n\t\t};\n\t\tif (definitionGuid) clientConfig.headers = { \"X-Selva-Definition\": definitionGuid };\n\t\tconst client = await A.create(clientConfig);\n\t\treturn {\n\t\t\tclient,\n\t\t\tscheduler: client.createScheduler({\n\t\t\t\tmode: \"queue\",\n\t\t\t\tmaxConcurrent: config.maxConcurrentSolves,\n\t\t\t\tmaxQueueDepth: config.maxQueueDepth || void 0,\n\t\t\t\tqueueWaitMs: config.queueWaitMs || void 0,\n\t\t\t\ttimeoutMs: config.maxSolveDurationMs,\n\t\t\t\tcache: config.responseCacheMaxBytes > 0 ? {\n\t\t\t\t\tmaxEntries: 20,\n\t\t\t\t\tttlMs: 5 * 6e4,\n\t\t\t\t\tmaxBytes: config.responseCacheMaxBytes\n\t\t\t\t} : false,\n\t\t\t\treuseServerDefinitionCache: config.reuseServerDefinitionCache,\n\t\t\t\tonSettle: (_ctx, result) => {\n\t\t\t\t\tsolveMeta.seq += 1;\n\t\t\t\t\tif (result.status !== \"success\") return;\n\t\t\t\t\tsolveMeta.last = {\n\t\t\t\t\t\tfromCache: result.fromCache === true,\n\t\t\t\t\t\tdefinitionReuploaded: result.definitionReuploaded\n\t\t\t\t\t};\n\t\t\t\t\tif (!config.debug) return;\n\t\t\t\t\tdebugLog(`[Compute/selva-cache] ${result.fromCache ? \"HIT — served from cache (no compute call)\" : \"miss — went to Rhino.Compute\"} (${Math.round(result.durationMs)}ms)`);\n\t\t\t\t\tif (!result.fromCache) debugLog(result.definitionReuploaded === true ? \"[Compute/def-cache] miss — definition RE-UPLOADED (pointer was cold/stale)\" : result.definitionReuploaded === false ? \"[Compute/def-cache] HIT — definition reused from server cache (no upload)\" : \"[Compute/def-cache] n/a — reuse disabled or non-reusable definition\");\n\t\t\t\t\tif (!result.fromCache) {\n\t\t\t\t\t\tconst errs = result.response?.errors;\n\t\t\t\t\t\tconst errCount = Array.isArray(errs) ? errs.length : 0;\n\t\t\t\t\t\tif (errCount > 0) {\n\t\t\t\t\t\t\tconst cacheNote = config.cacheerroredsolves ? \"cached (cacheerroredsolves on)\" : \"not cached (cacheerroredsolves off) — re-run until fixed\";\n\t\t\t\t\t\t\tdebugLog(`[Compute/rhino-cache] ${errCount} GH error(s); ${cacheNote}. First: ${JSON.stringify(errs[0])}`);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}),\n\t\t\trhinoTiming,\n\t\t\tsolveMeta\n\t\t};\n\t}\n\treturn {\n\t\tasync getClient(server, opts) {\n\t\t\tconst key = server.id;\n\t\t\tconst existing = cache.get(key);\n\t\t\tif (existing) {\n\t\t\t\tcache.delete(key);\n\t\t\t\tcache.set(key, existing);\n\t\t\t\treturn existing;\n\t\t\t}\n\t\t\tdebugLog(`[Compute/client-cache] miss — building warm client for server ${key}`);\n\t\t\tconst entry = await build(server, opts?.definitionGuid);\n\t\t\tif (cache.size >= maxCachedClients) {\n\t\t\t\tconst oldestKey = cache.keys().next().value;\n\t\t\t\tif (oldestKey !== void 0) {\n\t\t\t\t\tdebugLog(`[Compute/client-cache] LRU evicted warm client for server ${oldestKey} (cap ${maxCachedClients})`);\n\t\t\t\t\tcache.get(oldestKey)?.scheduler.dispose();\n\t\t\t\t\tcache.delete(oldestKey);\n\t\t\t\t}\n\t\t\t}\n\t\t\tcache.set(key, entry);\n\t\t\treturn entry;\n\t\t},\n\t\tevict(id) {\n\t\t\tconst key = id;\n\t\t\tconst entry = cache.get(key);\n\t\t\tif (entry) {\n\t\t\t\tdebugLog(`[Compute/client-cache] evicted warm client for server ${key} (config change)`);\n\t\t\t\tentry.scheduler.dispose();\n\t\t\t\tcache.delete(key);\n\t\t\t}\n\t\t},\n\t\tdisposeAll() {\n\t\t\tdebugLog(`[Compute/client-cache] disposing all ${cache.size} warm client(s)`);\n\t\t\tfor (const entry of cache.values()) entry.scheduler.dispose();\n\t\t\tcache.clear();\n\t\t}\n\t};\n}\n//#endregion\n//#region src/lib/server/compute/clientCache.server.ts\n/**\n* App-side binding for the shared compute client cache. The cache itself —\n* one warm `GrasshopperClient` (+ `SolveScheduler`) per compute server, keyed\n* by the server's `id`, with an LRU bound — lives in `@selvajs/server`\n* (`createClientCache`, see ADR 0004). This module owns the single app-wide\n* instance, wired with the env-derived limits/flags, and adapts the app's\n* `ComputeServerConfig` to the cache's `ResolvedServer` shape.\n*\n* Identity is the server `id` (ADR 0004 D1). A rotated URL/apiKey keeps the same\n* key with stale connection details, so the config-write path MUST call\n* `evictComputeClient(id)` — see the admin/org compute PUT routes.\n*/\n/** Concise cache/timing logs (Selva cache hits, server decode/solve/encode). */\nvar COMPUTE_DEBUG = [\n\t\"true\",\n\t\"1\",\n\t\"yes\"\n].includes((private_env.SELVA_FLAG_COMPUTE_DEBUG ?? \"\").toLowerCase());\nvar cache = createClientCache({\n\tmaxSolveDurationMs: MAX_SOLVE_DURATION_MS,\n\tmaxConcurrentSolves: COMPUTE_MAX_CONCURRENT,\n\tmaxQueueDepth: COMPUTE_MAX_QUEUE_DEPTH,\n\tqueueWaitMs: COMPUTE_QUEUE_WAIT_MS,\n\tcachesolve: COMPUTE_SERVER_CACHESOLVE,\n\tcacheerroredsolves: COMPUTE_CACHE_ERRORED_SOLVES,\n\treuseServerDefinitionCache: COMPUTE_REUSE_DEFINITION_CACHE,\n\tresponseCacheMaxBytes: COMPUTE_RESPONSE_CACHE_BYTES,\n\tdebug: COMPUTE_DEBUG,\n\tdebugVerbose: [\n\t\t\"true\",\n\t\t\"1\",\n\t\t\"yes\"\n\t].includes((private_env.SELVA_FLAG_COMPUTE_DEBUG_VERBOSE ?? \"\").toLowerCase()),\n\tonDebugLog: (message) => getLogger().debug(message, { component: \"Compute/client-cache\" })\n});\n/**\n* Get (or create) the warm client + scheduler for a resolved compute server.\n* Callers pass the fully-resolved `ComputeServerConfig` (from\n* `resolveServerForOrg`); the cache keys on its `id`, so the same server always\n* hits the same entry regardless of which definition or path asked for it.\n*\n* `definitionGuid`, when passed, is stamped as `X-Selva-Definition` on this\n* client's outbound requests — routing/telemetry metadata for a future pool\n* (ADR 0004 D2), inert on a single-member server today.\n*/\nfunction getClient(serverConfig, opts) {\n\treturn cache.getClient({\n\t\tid: serverConfig.id,\n\t\tserverUrl: serverConfig.serverUrl,\n\t\tapiKey: serverConfig.apiKey\n\t}, opts);\n}\n/**\n* Drop the warm client for a server whose config just changed (URL/key rotation\n* or deletion via /admin/compute or /api/org/compute). Keyed on `id`, the entry\n* would otherwise keep stale connection details until it aged out of the LRU —\n* so config writes evict explicitly (ADR 0004 Consequences).\n*/\nfunction evictComputeClient(id) {\n\tcache.evict(id);\n}\n//#endregion\nexport { evictComputeClient as n, getClient as r, COMPUTE_DEBUG as t };\n"],"names":[],"mappings":";;;;;;;AAMA;AACA,IAAI,0BAA0B,GAAG,EAAE;AACnC;AACA;AACA;AACA;AACA,SAAS,iBAAiB,CAAC,MAAM,EAAE;AACnC,CAAC,MAAM,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,IAAI,0BAA0B;AAC/E,CAAC,MAAM,KAAK,mBAAmB,IAAI,GAAG,EAAE;AACxC,CAAC,IAAI,MAAM,CAAC,YAAY,EAAE,EAAE,EAAE;AAC9B,CAAC,MAAM,QAAQ,GAAG,CAAC,OAAO,KAAK;AAC/B,EAAE,IAAI,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,UAAU,GAAG,OAAO,CAAC;AAChD,CAAC,CAAC;AACF,CAAC,eAAe,KAAK,CAAC,MAAM,EAAE,cAAc,EAAE;AAC9C,EAAE,MAAM,WAAW,GAAG;AACtB,GAAG,IAAI,EAAE,IAAI;AACb,GAAG,GAAG,EAAE;AACR,GAAG;AACH,EAAE,MAAM,SAAS,GAAG;AACpB,GAAG,IAAI,EAAE,IAAI;AACb,GAAG,GAAG,EAAE;AACR,GAAG;AACH,EAAE,MAAM,YAAY,GAAG;AACvB,GAAG,SAAS,EAAE,MAAM,CAAC,SAAS;AAC9B,GAAG,MAAM,EAAE,MAAM,CAAC,MAAM;AACxB,GAAG,KAAK,EAAE,MAAM,CAAC,YAAY;AAC7B,GAAG,UAAU,EAAE,MAAM,CAAC,UAAU;AAChC,GAAG,kBAAkB,EAAE,MAAM,CAAC,kBAAkB;AAChD,GAAG,cAAc,EAAE,CAAC,CAAC,KAAK;AAC1B,IAAI,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,IAAI,CAAC;AAChC,IAAI,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC;AAC9B,IAAI,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,IAAI,CAAC;AAChC,IAAI,WAAW,CAAC,GAAG,IAAI,CAAC;AACxB,IAAI,WAAW,CAAC,IAAI,GAAG;AACvB,KAAK,MAAM;AACX,KAAK,KAAK;AACV,KAAK;AACL,KAAK;AACL,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;AACvB,IAAI,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,GAAG,6CAA6C,GAAG,mBAAmB;AACtG,IAAI,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,IAAI,KAAK,IAAI,CAAC,GAAG,oCAAoC,GAAG,MAAM,CAAC,UAAU,GAAG,qBAAqB,GAAG,KAAK;AACjJ,IAAI,QAAQ,CAAC,CAAC,6BAA6B,EAAE,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,UAAU,EAAE,MAAM,CAAC,uBAAuB,EAAE,QAAQ,CAAC,6BAA6B,EAAE,UAAU,CAAC,CAAC,CAAC;AACtK,GAAG;AACH,GAAG;AACH,EAAE,IAAI,cAAc,EAAE,YAAY,CAAC,OAAO,GAAG,EAAE,oBAAoB,EAAE,cAAc,EAAE;AACrF,EAAE,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC;AAC7C,EAAE,OAAO;AACT,GAAG,MAAM;AACT,GAAG,SAAS,EAAE,MAAM,CAAC,eAAe,CAAC;AACrC,IAAI,IAAI,EAAE,OAAO;AACjB,IAAI,aAAa,EAAE,MAAM,CAAC,mBAAmB;AAC7C,IAAI,aAAa,EAAE,MAAM,CAAC,aAAa,IAAI,MAAM;AACjD,IAAI,WAAW,EAAE,MAAM,CAAC,WAAW,IAAI,MAAM;AAC7C,IAAI,SAAS,EAAE,MAAM,CAAC,kBAAkB;AACxC,IAAI,KAAK,EAAE,MAAM,CAAC,qBAAqB,GAAG,CAAC,GAAG;AAC9C,KAAK,UAAU,EAAE,EAAE;AACnB,KAAK,KAAK,EAAE,CAAC,GAAG,GAAG;AACnB,KAAK,QAAQ,EAAE,MAAM,CAAC;AACtB,KAAK,GAAG,KAAK;AACb,IAAI,0BAA0B,EAAE,MAAM,CAAC,0BAA0B;AACjE,IAAI,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK;AAChC,KAAK,SAAS,CAAC,GAAG,IAAI,CAAC;AACvB,KAAK,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,EAAE;AACtC,KAAK,SAAS,CAAC,IAAI,GAAG;AACtB,MAAM,SAAS,EAAE,MAAM,CAAC,SAAS,KAAK,IAAI;AAC1C,MAAM,oBAAoB,EAAE,MAAM,CAAC;AACnC,MAAM;AACN,KAAK,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;AACxB,KAAK,QAAQ,CAAC,CAAC,sBAAsB,EAAE,MAAM,CAAC,SAAS,GAAG,4CAA4C,GAAG,8BAA8B,CAAC,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC;AAC/K,KAAK,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,oBAAoB,KAAK,IAAI,GAAG,4EAA4E,GAAG,MAAM,CAAC,oBAAoB,KAAK,KAAK,GAAG,4EAA4E,GAAG,qEAAqE,CAAC;AACxV,KAAK,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE;AAC5B,MAAM,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,EAAE,MAAM;AAC1C,MAAM,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC;AAC5D,MAAM,IAAI,QAAQ,GAAG,CAAC,EAAE;AACxB,OAAO,MAAM,SAAS,GAAG,MAAM,CAAC,kBAAkB,GAAG,gCAAgC,GAAG,0DAA0D;AAClJ,OAAO,QAAQ,CAAC,CAAC,sBAAsB,EAAE,QAAQ,CAAC,cAAc,EAAE,SAAS,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACjH,MAAM;AACN,KAAK;AACL,IAAI;AACJ,IAAI,CAAC;AACL,GAAG,WAAW;AACd,GAAG;AACH,GAAG;AACH,CAAC;AACD,CAAC,OAAO;AACR,EAAE,MAAM,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE;AAChC,GAAG,MAAM,GAAG,GAAG,MAAM,CAAC,EAAE;AACxB,GAAG,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC;AAClC,GAAG,IAAI,QAAQ,EAAE;AACjB,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC;AACrB,IAAI,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC;AAC5B,IAAI,OAAO,QAAQ;AACnB,GAAG;AACH,GAAG,QAAQ,CAAC,CAAC,8DAA8D,EAAE,GAAG,CAAC,CAAC,CAAC;AACnF,GAAG,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,MAAM,EAAE,IAAI,EAAE,cAAc,CAAC;AAC1D,GAAG,IAAI,KAAK,CAAC,IAAI,IAAI,gBAAgB,EAAE;AACvC,IAAI,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK;AAC/C,IAAI,IAAI,SAAS,KAAK,MAAM,EAAE;AAC9B,KAAK,QAAQ,CAAC,CAAC,0DAA0D,EAAE,SAAS,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAAC;AACjH,KAAK,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,SAAS,CAAC,OAAO,EAAE;AAC9C,KAAK,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC;AAC5B,IAAI;AACJ,GAAG;AACH,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC;AACxB,GAAG,OAAO,KAAK;AACf,EAAE,CAAC;AACH,EAAE,KAAK,CAAC,EAAE,EAAE;AACZ,GAAG,MAAM,GAAG,GAAG,EAAE;AACjB,GAAG,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC;AAC/B,GAAG,IAAI,KAAK,EAAE;AACd,IAAI,QAAQ,CAAC,CAAC,sDAAsD,EAAE,GAAG,CAAC,gBAAgB,CAAC,CAAC;AAC5F,IAAI,KAAK,CAAC,SAAS,CAAC,OAAO,EAAE;AAC7B,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC;AACrB,GAAG;AACH,EAAE,CAAC;AACH,EAAE,UAAU,GAAG;AACf,GAAG,QAAQ,CAAC,CAAC,qCAAqC,EAAE,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;AAChF,GAAG,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,MAAM,EAAE,EAAE,KAAK,CAAC,SAAS,CAAC,OAAO,EAAE;AAChE,GAAG,KAAK,CAAC,KAAK,EAAE;AAChB,EAAE;AACF,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACG,IAAC,aAAa,GAAG;AACpB,CAAC,MAAM;AACP,CAAC,GAAG;AACJ,CAAC;AACD,CAAC,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC,wBAAwB,IAAI,EAAE,EAAE,WAAW,EAAE;AACrE,IAAI,KAAK,GAAG,iBAAiB,CAAC;AAC9B,CAAC,kBAAkB,EAAE,qBAAqB;AAC1C,CAAC,mBAAmB,EAAE,sBAAsB;AAC5C,CAAC,aAAa,EAAE,uBAAuB;AACvC,CAAC,WAAW,EAAE,qBAAqB;AACnC,CAAC,UAAU,EAAE,yBAAyB;AACtC,CAAC,kBAAkB,EAAE,4BAA4B;AACjD,CAAC,0BAA0B,EAAE,8BAA8B;AAC3D,CAAC,qBAAqB,EAAE,4BAA4B;AACpD,CAAC,KAAK,EAAE,aAAa;AACrB,CAAC,YAAY,EAAE;AACf,EAAE,MAAM;AACR,EAAE,GAAG;AACL,EAAE;AACF,EAAE,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC,gCAAgC,IAAI,EAAE,EAAE,WAAW,EAAE,CAAC;AAC/E,CAAC,UAAU,EAAE,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,sBAAsB,EAAE;AAC1F,CAAC,CAAC;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,SAAS,CAAC,YAAY,EAAE,IAAI,EAAE;AACvC,CAAC,OAAO,KAAK,CAAC,SAAS,CAAC;AACxB,EAAE,EAAE,EAAE,YAAY,CAAC,EAAE;AACrB,EAAE,SAAS,EAAE,YAAY,CAAC,SAAS;AACnC,EAAE,MAAM,EAAE,YAAY,CAAC;AACvB,EAAE,EAAE,IAAI,CAAC;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,kBAAkB,CAAC,EAAE,EAAE;AAChC,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;AAChB;;;;"}
|
|
1
|
+
{"version":3,"file":"clientCache.server.js-C9I-Kcfi.js","sources":["../../../../.svelte-kit/output/server/chunks/clientCache.server.js"],"sourcesContent":["import { t as private_env } from \"./shared-server.js\";\nimport { f as getLogger } from \"./providers.server.js\";\nimport { l as ee } from \"./chunk-Y3M7P3BW.js\";\nimport { n as A } from \"./chunk-6TMSTNHN.js\";\nimport \"./compute.js\";\nimport { a as COMPUTE_QUEUE_WAIT_MS, i as COMPUTE_MAX_QUEUE_DEPTH, l as COMPUTE_REUSE_DEFINITION_CACHE, m as MAX_SOLVE_DURATION_MS, r as COMPUTE_MAX_CONCURRENT, s as COMPUTE_RESPONSE_CACHE_BYTES, t as COMPUTE_CACHE_ERRORED_SOLVES, u as COMPUTE_SERVER_CACHESOLVE } from \"./computeLimits.js\";\n//#region ../server/src/compute/client-cache.ts\nvar DEFAULT_MAX_CACHED_CLIENTS = 16;\n/**\n* Build a per-server warm-client cache. Each cache owns its own LRU `Map` keyed\n* on server `id`.\n*/\nfunction createClientCache(config) {\n\tconst maxCachedClients = config.maxCachedClients ?? DEFAULT_MAX_CACHED_CLIENTS;\n\tconst cache = /* @__PURE__ */ new Map();\n\tif (config.debugVerbose) ee();\n\tconst debugLog = (message) => {\n\t\tif (config.debug) config.onDebugLog?.(message);\n\t};\n\tasync function build(server, definitionGuid) {\n\t\tconst rhinoTiming = {\n\t\t\tlast: null,\n\t\t\tseq: 0\n\t\t};\n\t\tconst solveMeta = {\n\t\t\tlast: null,\n\t\t\tseq: 0\n\t\t};\n\t\tconst clientConfig = {\n\t\t\tserverUrl: server.serverUrl,\n\t\t\tapiKey: server.apiKey,\n\t\t\tdebug: config.debugVerbose,\n\t\t\tcachesolve: config.cachesolve,\n\t\t\tcacheerroredsolves: config.cacheerroredsolves,\n\t\t\tonServerTiming: (t) => {\n\t\t\t\tconst decode = t.decode ?? 0;\n\t\t\t\tconst solve = t.solve ?? 0;\n\t\t\t\tconst encode = t.encode ?? 0;\n\t\t\t\trhinoTiming.seq += 1;\n\t\t\t\trhinoTiming.last = {\n\t\t\t\t\tdecode,\n\t\t\t\t\tsolve,\n\t\t\t\t\tencode\n\t\t\t\t};\n\t\t\t\tif (!config.debug) return;\n\t\t\t\tconst defCache = decode <= 1 ? \"HIT (definition reused, no re-upload/parse)\" : \"miss (full parse)\";\n\t\t\t\tconst solveCache = config.cachesolve && solve <= 1 ? \"HIT (cached result, solve skipped)\" : config.cachesolve ? \"miss (solved fresh)\" : \"off\";\n\t\t\t\tdebugLog(`[Compute/rhino-cache] decode=${decode}ms solve=${solve}ms encode=${encode}ms | definition-cache: ${defCache} | solve-cache (cachesolve): ${solveCache}`);\n\t\t\t}\n\t\t};\n\t\tif (definitionGuid) clientConfig.headers = { \"X-Selva-Definition\": definitionGuid };\n\t\tconst client = await A.create(clientConfig);\n\t\treturn {\n\t\t\tclient,\n\t\t\tscheduler: client.createScheduler({\n\t\t\t\tmode: \"queue\",\n\t\t\t\tmaxConcurrent: config.maxConcurrentSolves,\n\t\t\t\tmaxQueueDepth: config.maxQueueDepth || void 0,\n\t\t\t\tqueueWaitMs: config.queueWaitMs || void 0,\n\t\t\t\ttimeoutMs: config.maxSolveDurationMs,\n\t\t\t\tcache: config.responseCacheMaxBytes > 0 ? {\n\t\t\t\t\tmaxEntries: 20,\n\t\t\t\t\tttlMs: 5 * 6e4,\n\t\t\t\t\tmaxBytes: config.responseCacheMaxBytes\n\t\t\t\t} : false,\n\t\t\t\treuseServerDefinitionCache: config.reuseServerDefinitionCache,\n\t\t\t\tonSettle: (_ctx, result) => {\n\t\t\t\t\tsolveMeta.seq += 1;\n\t\t\t\t\tif (result.status !== \"success\") return;\n\t\t\t\t\tsolveMeta.last = {\n\t\t\t\t\t\tfromCache: result.fromCache === true,\n\t\t\t\t\t\tdefinitionReuploaded: result.definitionReuploaded\n\t\t\t\t\t};\n\t\t\t\t\tif (!config.debug) return;\n\t\t\t\t\tdebugLog(`[Compute/selva-cache] ${result.fromCache ? \"HIT — served from cache (no compute call)\" : \"miss — went to Rhino.Compute\"} (${Math.round(result.durationMs)}ms)`);\n\t\t\t\t\tif (!result.fromCache) debugLog(result.definitionReuploaded === true ? \"[Compute/def-cache] miss — definition RE-UPLOADED (pointer was cold/stale)\" : result.definitionReuploaded === false ? \"[Compute/def-cache] HIT — definition reused from server cache (no upload)\" : \"[Compute/def-cache] n/a — reuse disabled or non-reusable definition\");\n\t\t\t\t\tif (!result.fromCache) {\n\t\t\t\t\t\tconst errs = result.response?.errors;\n\t\t\t\t\t\tconst errCount = Array.isArray(errs) ? errs.length : 0;\n\t\t\t\t\t\tif (errCount > 0) {\n\t\t\t\t\t\t\tconst cacheNote = config.cacheerroredsolves ? \"cached (cacheerroredsolves on)\" : \"not cached (cacheerroredsolves off) — re-run until fixed\";\n\t\t\t\t\t\t\tdebugLog(`[Compute/rhino-cache] ${errCount} GH error(s); ${cacheNote}. First: ${JSON.stringify(errs[0])}`);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}),\n\t\t\trhinoTiming,\n\t\t\tsolveMeta\n\t\t};\n\t}\n\treturn {\n\t\tasync getClient(server, opts) {\n\t\t\tconst key = server.id;\n\t\t\tconst existing = cache.get(key);\n\t\t\tif (existing) {\n\t\t\t\tcache.delete(key);\n\t\t\t\tcache.set(key, existing);\n\t\t\t\treturn existing;\n\t\t\t}\n\t\t\tdebugLog(`[Compute/client-cache] miss — building warm client for server ${key}`);\n\t\t\tconst entry = await build(server, opts?.definitionGuid);\n\t\t\tif (cache.size >= maxCachedClients) {\n\t\t\t\tconst oldestKey = cache.keys().next().value;\n\t\t\t\tif (oldestKey !== void 0) {\n\t\t\t\t\tdebugLog(`[Compute/client-cache] LRU evicted warm client for server ${oldestKey} (cap ${maxCachedClients})`);\n\t\t\t\t\tcache.get(oldestKey)?.scheduler.dispose();\n\t\t\t\t\tcache.delete(oldestKey);\n\t\t\t\t}\n\t\t\t}\n\t\t\tcache.set(key, entry);\n\t\t\treturn entry;\n\t\t},\n\t\tevict(id) {\n\t\t\tconst key = id;\n\t\t\tconst entry = cache.get(key);\n\t\t\tif (entry) {\n\t\t\t\tdebugLog(`[Compute/client-cache] evicted warm client for server ${key} (config change)`);\n\t\t\t\tentry.scheduler.dispose();\n\t\t\t\tcache.delete(key);\n\t\t\t}\n\t\t},\n\t\tdisposeAll() {\n\t\t\tdebugLog(`[Compute/client-cache] disposing all ${cache.size} warm client(s)`);\n\t\t\tfor (const entry of cache.values()) entry.scheduler.dispose();\n\t\t\tcache.clear();\n\t\t}\n\t};\n}\n//#endregion\n//#region src/lib/server/compute/clientCache.server.ts\n/**\n* App-side binding for the shared compute client cache. The cache itself —\n* one warm `GrasshopperClient` (+ `SolveScheduler`) per compute server, keyed\n* by the server's `id`, with an LRU bound — lives in `@selvajs/server`\n* (`createClientCache`, see ADR 0004). This module owns the single app-wide\n* instance, wired with the env-derived limits/flags, and adapts the app's\n* `ComputeServerConfig` to the cache's `ResolvedServer` shape.\n*\n* Identity is the server `id` (ADR 0004 D1). A rotated URL/apiKey keeps the same\n* key with stale connection details, so the config-write path MUST call\n* `evictComputeClient(id)` — see the admin/org compute PUT routes.\n*/\n/** Concise cache/timing logs (Selva cache hits, server decode/solve/encode). */\nvar COMPUTE_DEBUG = [\n\t\"true\",\n\t\"1\",\n\t\"yes\"\n].includes((private_env.SELVA_FLAG_COMPUTE_DEBUG ?? \"\").toLowerCase());\nvar cache = createClientCache({\n\tmaxSolveDurationMs: MAX_SOLVE_DURATION_MS,\n\tmaxConcurrentSolves: COMPUTE_MAX_CONCURRENT,\n\tmaxQueueDepth: COMPUTE_MAX_QUEUE_DEPTH,\n\tqueueWaitMs: COMPUTE_QUEUE_WAIT_MS,\n\tcachesolve: COMPUTE_SERVER_CACHESOLVE,\n\tcacheerroredsolves: COMPUTE_CACHE_ERRORED_SOLVES,\n\treuseServerDefinitionCache: COMPUTE_REUSE_DEFINITION_CACHE,\n\tresponseCacheMaxBytes: COMPUTE_RESPONSE_CACHE_BYTES,\n\tdebug: COMPUTE_DEBUG,\n\tdebugVerbose: [\n\t\t\"true\",\n\t\t\"1\",\n\t\t\"yes\"\n\t].includes((private_env.SELVA_FLAG_COMPUTE_DEBUG_VERBOSE ?? \"\").toLowerCase()),\n\tonDebugLog: (message) => getLogger().debug(message, { component: \"Compute/client-cache\" })\n});\n/**\n* Get (or create) the warm client + scheduler for a resolved compute server.\n* Callers pass the fully-resolved `ComputeServerConfig` (from\n* `resolveServerForOrg`); the cache keys on its `id`, so the same server always\n* hits the same entry regardless of which definition or path asked for it.\n*\n* `definitionGuid`, when passed, is stamped as `X-Selva-Definition` on this\n* client's outbound requests — routing/telemetry metadata for a future pool\n* (ADR 0004 D2), inert on a single-member server today.\n*/\nfunction getClient(serverConfig, opts) {\n\treturn cache.getClient({\n\t\tid: serverConfig.id,\n\t\tserverUrl: serverConfig.serverUrl,\n\t\tapiKey: serverConfig.apiKey\n\t}, opts);\n}\n/**\n* Drop the warm client for a server whose config just changed (URL/key rotation\n* or deletion via /admin/compute or /api/org/compute). Keyed on `id`, the entry\n* would otherwise keep stale connection details until it aged out of the LRU —\n* so config writes evict explicitly (ADR 0004 Consequences).\n*/\nfunction evictComputeClient(id) {\n\tcache.evict(id);\n}\n//#endregion\nexport { evictComputeClient as n, getClient as r, COMPUTE_DEBUG as t };\n"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import './src.js-BeFXhqDJ.js';
|
|
2
2
|
import { N as NoopLogger } from './limits.js-DfZnOKg5.js';
|
|
3
3
|
import { p, l } from './chunk-Y3M7P3BW.js-qwxSY5dh.js';
|
|
4
|
-
import { B, k as ke, $ } from './chunk-
|
|
4
|
+
import { B, k as ke, $ } from './chunk-6TMSTNHN.js-3Bz2KNTb.js';
|
|
5
5
|
import { createHash } from 'node:crypto';
|
|
6
6
|
import { gzip, gunzipSync } from 'node:zlib';
|
|
7
7
|
import { promisify } from 'node:util';
|
|
@@ -16,8 +16,8 @@ import { isIP } from 'node:net';
|
|
|
16
16
|
* ValueList/Geometry/File/Color), normalizes the lowercase UI paramType to its
|
|
17
17
|
* PascalCase form, and falls back gracefully on underspecified inputs — so we no longer
|
|
18
18
|
* maintain a parallel hand-rolled transform that silently coerced valueList/file/color
|
|
19
|
-
* to Text and drifted from the package (
|
|
20
|
-
*
|
|
19
|
+
* to Text and drifted from the package (whose consumers already delegate here).
|
|
20
|
+
* `values`/`acceptedFormats` are absent on `SchemaInput` (they live on the layout
|
|
21
21
|
* item's config), so valueList/file inputs fall back to carrying the selected value with
|
|
22
22
|
* no option list — the same value that reaches Grasshopper.
|
|
23
23
|
*/
|
|
@@ -744,4 +744,4 @@ function createRemoteDefinitionFetcher(config) {
|
|
|
744
744
|
}
|
|
745
745
|
|
|
746
746
|
export { adaptEnvelopeToEncoding as a, createRemoteDefinitionFetcher as c, runSolvePipeline as r };
|
|
747
|
-
//# sourceMappingURL=compute.js-
|
|
747
|
+
//# sourceMappingURL=compute.js-DGTy3YjO.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compute.js-DGTy3YjO.js","sources":["../../../../.svelte-kit/output/server/chunks/compute.js"],"sourcesContent":["import \"./src.js\";\nimport { r as NoopLogger } from \"./limits.js\";\nimport { d as l, h as p } from \"./chunk-Y3M7P3BW.js\";\nimport { a as ke, r as B, t as $ } from \"./chunk-6TMSTNHN.js\";\nimport { createHash } from \"node:crypto\";\nimport { gunzipSync, gzip } from \"node:zlib\";\nimport { promisify } from \"node:util\";\nimport { lookup } from \"node:dns/promises\";\nimport { isIP } from \"node:net\";\n//#region ../server/src/compute/transform-input.ts\n/**\n* Adapt a persisted `SchemaInput` (plus the user's chosen value) into the package's\n* raw `InputParamSchema`, then let `@selvajs/compute`'s own `processInput` produce the\n* typed `InputParam`. The package handles every paramType (Number/Integer/Text/Boolean/\n* ValueList/Geometry/File/Color), normalizes the lowercase UI paramType to its\n* PascalCase form, and falls back gracefully on underspecified inputs — so we no longer\n* maintain a parallel hand-rolled transform that silently coerced valueList/file/color\n* to Text and drifted from the package (whose consumers already delegate here).\n* `values`/`acceptedFormats` are absent on `SchemaInput` (they live on the layout\n* item's config), so valueList/file inputs fall back to carrying the selected value with\n* no option list — the same value that reaches Grasshopper.\n*/\nfunction transformInputParameter(input, value) {\n\tconst processed = ke({\n\t\tid: input.id,\n\t\tname: input.nickname,\n\t\tnickname: input.nickname || null,\n\t\tdescription: input.description || \"\",\n\t\tparamType: input.paramType === \"dynamicValueList\" ? \"valueList\" : input.paramType,\n\t\ttreeAccess: input.inputStructure === \"tree\",\n\t\tminimum: input.minimum ?? null,\n\t\tmaximum: input.maximum ?? null,\n\t\tatLeast: 1,\n\t\tatMost: 1,\n\t\tstepSize: input.stepSize,\n\t\tdefault: value ?? input.default\n\t});\n\tconst effective = value ?? input.default;\n\tif (processed.default == null && effective != null) {\n\t\tif (Array.isArray(effective)) processed.default = effective;\n\t\telse if (processed.paramType === \"ValueList\" && typeof effective !== \"object\") processed.default = effective;\n\t}\n\treturn processed;\n}\n//#endregion\n//#region ../server/src/compute/solve-cache-envelope.ts\n/**\n* L2 cache entry format (R6). An entry is the gzipped response body plus a tiny\n* metadata header, so a hit is near-CPU-free: no `JSON.stringify`, no re-solve —\n* gzip clients get the stored bytes verbatim, and the header carries just enough\n* to rebuild the `ok` outcome (error/warning counts for the metric, uncompressed\n* length for the `Content-Length` on a gunzip fallback).\n*\n* Wire layout (opaque to the `ISolveResultCache` backend, which sees only bytes):\n*\n* [ 4 bytes: header length N, big-endian uint32 ]\n* [ N bytes: UTF-8 JSON EnvelopeHeader ]\n* [ rest: gzipped JSON response body ]\n*\n* The `algo` echo (M3) is already stripped at the source in the package's\n* `runSolve`, so the body never carries the base64 definition — entries stay\n* small without a strip step here.\n*/\n/**\n* Encode a cache entry from the gzipped body + header. The body MUST already be\n* gzipped (the pipeline gzips before storing so every hit serves compressed\n* bytes; a rare non-gzip client gunzips on read).\n*/\nfunction encodeSolveCacheEntry(header, gzippedBody) {\n\tconst headerJson = Buffer.from(JSON.stringify(header), \"utf8\");\n\tconst out = Buffer.allocUnsafe(4 + headerJson.byteLength + gzippedBody.byteLength);\n\tout.writeUInt32BE(headerJson.byteLength, 0);\n\theaderJson.copy(out, 4);\n\tBuffer.from(gzippedBody.buffer, gzippedBody.byteOffset, gzippedBody.byteLength).copy(out, 4 + headerJson.byteLength);\n\treturn out;\n}\n/**\n* Decode a cache entry. Returns `null` on any malformed input (truncated, bad\n* length prefix, non-JSON header) — a corrupt entry is treated as a miss, never\n* an error, matching the best-effort cache contract.\n*/\nfunction decodeSolveCacheEntry(bytes) {\n\tif (bytes.byteLength < 4) return null;\n\tconst buf = Buffer.from(bytes.buffer, bytes.byteOffset, bytes.byteLength);\n\tconst headerEnd = 4 + buf.readUInt32BE(0);\n\tif (headerEnd > buf.byteLength) return null;\n\tlet header;\n\ttry {\n\t\theader = JSON.parse(buf.toString(\"utf8\", 4, headerEnd));\n\t} catch {\n\t\treturn null;\n\t}\n\tif (typeof header?.errorCount !== \"number\" || typeof header?.warningCount !== \"number\" || typeof header?.serializedBytes !== \"number\" || typeof header?.inputHash !== \"string\") return null;\n\tconst gzippedBody = new Uint8Array(bytes.buffer, bytes.byteOffset + headerEnd, bytes.byteLength - headerEnd);\n\treturn {\n\t\theader,\n\t\tgzippedBody\n\t};\n}\n/** Gunzip a stored body back to the JSON string, for a non-gzip client (rare). */\nfunction gunzipEntryBody(gzippedBody) {\n\treturn gunzipSync(gzippedBody).toString(\"utf8\");\n}\n//#endregion\n//#region ../server/src/compute/solve-pipeline.ts\n/**\n* Transport-agnostic solve pipeline — the callable core lifted out of the app's\n* `/api/compute` route (embeddable-server-layer plan, K3).\n*\n* Given an already-resolved solve context — the `.gh` bytes, the input params +\n* user values, and a warm `SolveScheduler` (from `createClientCache`) — this\n* runs the framework-free half of a solve:\n*\n* input tree build → scheduler.solve (with abort/timeout classification) →\n* JSON serialize (size-guarded) → optional gzip → Server-Timing envelope.\n*\n* It returns a discriminated {@link SolveOutcome}: `ok` carries the ready-to-send\n* {@link SolveEnvelope} (body + headers + phase metrics), while the error\n* variants (`timeout`, `client_abort`, `too_large`, `compute_error`) name a\n* failure the transport maps to its own status code. Nothing here throws for an\n* expected failure and nothing here touches auth, the database, share tokens,\n* rate limits, or metric sinks — those stay app policy in the route.\n*\n* The Server-Timing string it emits IS the versioned wire contract (audit D5):\n* see {@link COMPUTE_CONTRACT_VERSION} and {@link COMPUTE_VERSION_HEADER}.\n*/\n/** Async gzip (audit B8) — off the event loop, unlike the old `gzipSync`. */\nvar gzipAsync = promisify(gzip);\n/** Response header carrying {@link COMPUTE_CONTRACT_VERSION}. */\nvar COMPUTE_VERSION_HEADER = \"X-Selva-Compute-Version\";\n/**\n* Run the framework-free half of a solve and produce a typed outcome. See the\n* module doc for the phase sequence and the app/library boundary.\n*/\nasync function runSolvePipeline(args) {\n\tconst { client, signal } = args;\n\tconst treeBuildStart = performance.now();\n\tconst inputTree = B.fromInputParams(args.inputs.filter((input) => input.paramType).map((input) => transformInputParameter(input, args.values[input.id])));\n\tconst treeBuildMs = performance.now() - treeBuildStart;\n\tlet inputKey = null;\n\tif (args.solveCache) {\n\t\tinputKey = deriveSolveCacheInputKey(inputTree, args.solveCache.configSubset).hash;\n\t\tlet stored = null;\n\t\ttry {\n\t\t\tstored = await args.solveCache.lookup(inputKey);\n\t\t} catch {\n\t\t\tstored = null;\n\t\t}\n\t\tif (stored) {\n\t\t\tconst hit = buildEnvelopeFromCacheEntry(stored, inputKey, args);\n\t\t\tif (hit) return hit;\n\t\t\t(args.logger ?? new NoopLogger()).warn(\"Discarding corrupt or hash-mismatched L2 cache entry, solving fresh\", {\n\t\t\t\tcomponent: \"Compute/l2-cache\",\n\t\t\t\tinputKeyPrefix: inputKey.slice(0, 16)\n\t\t\t});\n\t\t}\n\t}\n\tconst settleSeqBefore = client.solveMeta.seq;\n\tconst rhinoSeqBefore = client.rhinoTiming.seq;\n\tlet result;\n\tconst solveStart = performance.now();\n\ttry {\n\t\tresult = await client.scheduler.solve(args.definitionSource, inputTree, { signal });\n\t} catch (err) {\n\t\tconst durationMs = performance.now() - solveStart;\n\t\tif (err instanceof Error && err.name === \"AbortError\") {\n\t\t\tif (signal.aborted) return {\n\t\t\t\tkind: \"client_abort\",\n\t\t\t\tdurationMs\n\t\t\t};\n\t\t\treturn {\n\t\t\t\tkind: \"timeout\",\n\t\t\t\tdurationMs,\n\t\t\t\tmessage: `Solve exceeded the ${Math.round(args.maxSolveDurationMs / 1e3)}s deadline.`\n\t\t\t};\n\t\t}\n\t\tif (err instanceof p) {\n\t\t\tif (err.code === l.QUEUE_FULL) return {\n\t\t\t\tkind: \"shed\",\n\t\t\t\tdurationMs,\n\t\t\t\treason: \"queue_full\",\n\t\t\t\tretryAfterSeconds: 1,\n\t\t\t\tmessage: \"Compute server is at capacity. Retry shortly.\"\n\t\t\t};\n\t\t\tif (err.code === l.QUEUE_TIMEOUT) return {\n\t\t\t\tkind: \"shed\",\n\t\t\t\tdurationMs,\n\t\t\t\treason: \"queue_timeout\",\n\t\t\t\tretryAfterSeconds: 1,\n\t\t\t\tmessage: \"Compute request waited too long in the queue. Retry shortly.\"\n\t\t\t};\n\t\t}\n\t\treturn {\n\t\t\tkind: \"compute_error\",\n\t\t\tdurationMs,\n\t\t\terror: err\n\t\t};\n\t}\n\tconst solveMs = performance.now() - solveStart;\n\tconst serializeStart = performance.now();\n\tlet serialized;\n\ttry {\n\t\tserialized = JSON.stringify(result);\n\t} catch (err) {\n\t\tif (err instanceof RangeError) return { kind: \"too_large\" };\n\t\tthrow err;\n\t}\n\tif (serialized.length > args.responseMaxBytes) return { kind: \"too_large\" };\n\tconst serializeMs = performance.now() - serializeStart;\n\tconst worthSendingGzip = /\\bgzip\\b/i.test(args.acceptEncoding) && serialized.length > 1024;\n\tconst willCache = args.solveCache != null;\n\tlet compressed = null;\n\tlet gzipMs = 0;\n\tif (worthSendingGzip || willCache) {\n\t\tconst gzipStart = performance.now();\n\t\tcompressed = await gzipAsync(Buffer.from(serialized));\n\t\tgzipMs = performance.now() - gzipStart;\n\t}\n\tif (args.solveCache && inputKey && compressed) {\n\t\tconst entry = encodeSolveCacheEntry({\n\t\t\terrorCount: result.errors?.length ?? 0,\n\t\t\twarningCount: result.warnings?.length ?? 0,\n\t\t\tserializedBytes: serialized.length,\n\t\t\tinputHash: inputKey\n\t\t}, new Uint8Array(compressed));\n\t\targs.solveCache.store(inputKey, entry);\n\t}\n\tconst serverTotalMs = performance.now() - args.loadStartMs;\n\tconst settle = client.solveMeta.seq === settleSeqBefore + 1 ? client.solveMeta.last : null;\n\tconst rhino = settle && !settle.fromCache && client.rhinoTiming.seq === rhinoSeqBefore + 1 ? client.rhinoTiming.last : null;\n\tconst sendCompressed = compressed && worthSendingGzip ? compressed : null;\n\tconst headers = {\n\t\t\"Content-Type\": \"application/json\",\n\t\t\"Server-Timing\": buildServerTiming({\n\t\t\tdefLoadMs: args.defLoadMs,\n\t\t\ttreeBuildMs,\n\t\t\tsolveMs,\n\t\t\tserializeMs,\n\t\t\tgzipMs,\n\t\t\tserverTotalMs,\n\t\t\trhino,\n\t\t\tsettle,\n\t\t\tbyteRefOutcome: args.byteRefOutcome,\n\t\t\tl2CacheHit: args.solveCache ? false : null,\n\t\t\tprepMarks: args.prepMarks ?? []\n\t\t}),\n\t\t[COMPUTE_VERSION_HEADER]: String(1),\n\t\tVary: \"Accept-Encoding\"\n\t};\n\tconst metrics = {\n\t\ttreeBuildMs,\n\t\tsolveMs,\n\t\tserializeMs,\n\t\tgzipMs,\n\t\tserverTotalMs,\n\t\tserializedBytes: serialized.length,\n\t\tcompressedBytes: sendCompressed?.byteLength ?? null,\n\t\tl2CacheHit: args.solveCache ? false : null\n\t};\n\tlet envelope;\n\tif (sendCompressed) {\n\t\theaders[\"Content-Encoding\"] = \"gzip\";\n\t\theaders[\"Content-Length\"] = String(sendCompressed.byteLength);\n\t\tenvelope = {\n\t\t\tbody: new Uint8Array(sendCompressed),\n\t\t\tencoding: \"gzip\",\n\t\t\theaders,\n\t\t\tresult,\n\t\t\tmetrics\n\t\t};\n\t} else {\n\t\theaders[\"Content-Length\"] = String(Buffer.byteLength(serialized));\n\t\tenvelope = {\n\t\t\tbody: serialized,\n\t\t\theaders,\n\t\t\tresult,\n\t\t\tmetrics\n\t\t};\n\t}\n\treturn {\n\t\tkind: \"ok\",\n\t\tenvelope,\n\t\tsolveMs,\n\t\terrorCount: result.errors?.length ?? 0,\n\t\twarningCount: result.warnings?.length ?? 0\n\t};\n}\n/**\n* Re-key a coalesced envelope to a single waiter's `Accept-Encoding` (audit C5).\n*\n* The single-flight coalescer (R4) runs ONE pipeline execution for N identical\n* concurrent solves and hands every waiter the same {@link SolveEnvelope}. That\n* envelope's wire form — gzip body + `Content-Encoding: gzip`, or the plain JSON\n* string — is baked from the FIRST caller's `Accept-Encoding`. A later waiter\n* with a different `Accept-Encoding` would otherwise receive a body labelled with\n* the wrong encoding: a non-gzip client joining a gzip flight gets gzip bytes it\n* cannot decode (`Vary` can't help — this is one object shared across waiters,\n* not a cache lookup). Encoding is not in the coalesce key by design, so mixed\n* clients still coalesce; this adapts the shared result to each waiter instead.\n*\n* Returns the body + headers to send THIS waiter. Only the correctness-critical\n* direction is adapted — a gzip envelope served to a non-gzip waiter is gunzipped\n* back to JSON. The reverse (a plain-JSON envelope to a gzip-capable waiter) is\n* left uncompressed: gzip is an optimisation the client advertises, never a\n* requirement, so sending it plain is correct, just not maximally small. The\n* common all-gzip case returns the envelope's own body/headers untouched.\n*/\nfunction adaptEnvelopeToEncoding(envelope, acceptEncoding) {\n\tconst waiterWantsGzip = /\\bgzip\\b/i.test(acceptEncoding);\n\tif (envelope.encoding === \"gzip\" && !waiterWantsGzip) {\n\t\tconst json = gunzipSync(envelope.body instanceof Uint8Array ? envelope.body : Buffer.from(envelope.body)).toString(\"utf8\");\n\t\tconst headers = { ...envelope.headers };\n\t\tdelete headers[\"Content-Encoding\"];\n\t\theaders[\"Content-Length\"] = String(Buffer.byteLength(json));\n\t\treturn {\n\t\t\tbody: json,\n\t\t\theaders\n\t\t};\n\t}\n\treturn {\n\t\tbody: envelope.body,\n\t\theaders: envelope.headers\n\t};\n}\n/**\n* Build the `ok` outcome from a stored L2 entry — the near-CPU-free hit path (no\n* solve, no `JSON.stringify`, no gzip). Returns `null` when the entry is corrupt\n* or its stored `inputHash` doesn't match the requesting key (defense-in-depth\n* against a wide-hash collision), so the caller falls through and solves.\n*/\nfunction buildEnvelopeFromCacheEntry(entryBytes, inputKey, args) {\n\tconst decoded = decodeSolveCacheEntry(entryBytes);\n\tif (!decoded || decoded.header.inputHash !== inputKey) return null;\n\tconst { header, gzippedBody } = decoded;\n\tconst clientWantsGzip = /\\bgzip\\b/i.test(args.acceptEncoding);\n\tconst serverTotalMs = performance.now() - args.loadStartMs;\n\tconst headers = {\n\t\t\"Content-Type\": \"application/json\",\n\t\t\"Server-Timing\": buildServerTiming({\n\t\t\tdefLoadMs: args.defLoadMs,\n\t\t\ttreeBuildMs: 0,\n\t\t\tsolveMs: 0,\n\t\t\tserializeMs: 0,\n\t\t\tgzipMs: 0,\n\t\t\tserverTotalMs,\n\t\t\trhino: null,\n\t\t\tsettle: null,\n\t\t\tbyteRefOutcome: args.byteRefOutcome,\n\t\t\tl2CacheHit: true,\n\t\t\tprepMarks: args.prepMarks ?? []\n\t\t}),\n\t\t[COMPUTE_VERSION_HEADER]: String(1),\n\t\tVary: \"Accept-Encoding\"\n\t};\n\tconst metrics = {\n\t\ttreeBuildMs: 0,\n\t\tsolveMs: 0,\n\t\tserializeMs: 0,\n\t\tgzipMs: 0,\n\t\tserverTotalMs,\n\t\tserializedBytes: header.serializedBytes,\n\t\tcompressedBytes: clientWantsGzip ? gzippedBody.byteLength : null,\n\t\tl2CacheHit: true\n\t};\n\tlet envelope;\n\tif (clientWantsGzip) {\n\t\theaders[\"Content-Encoding\"] = \"gzip\";\n\t\theaders[\"Content-Length\"] = String(gzippedBody.byteLength);\n\t\tenvelope = {\n\t\t\tbody: new Uint8Array(gzippedBody),\n\t\t\tencoding: \"gzip\",\n\t\t\theaders,\n\t\t\tmetrics\n\t\t};\n\t} else {\n\t\tconst json = gunzipEntryBody(gzippedBody);\n\t\theaders[\"Content-Length\"] = String(Buffer.byteLength(json));\n\t\tenvelope = {\n\t\t\tbody: json,\n\t\t\theaders,\n\t\t\tmetrics\n\t\t};\n\t}\n\treturn {\n\t\tkind: \"ok\",\n\t\tenvelope,\n\t\tsolveMs: 0,\n\t\terrorCount: header.errorCount,\n\t\twarningCount: header.warningCount\n\t};\n}\n/**\n* Assemble the `Server-Timing` header. The browser reads these to attribute its\n* round-trip: `total` here == the server's headers-to-out wall time, so browser\n* `ttfb − total` ≈ network+send latency. When the compute server reported its\n* own decode/solve/encode (VektorNode fork), `rhino_*` is time ON the compute\n* server and `compute_link` is everything between (network + queue wait). Prep\n* sub-phases ride as `p_*`; cache verdicts as 0/1 `selva_cache`/`def_reupload`.\n*/\nfunction buildServerTiming(parts) {\n\tlet header = `load;dur=${parts.defLoadMs.toFixed(1)}, tree;dur=${parts.treeBuildMs.toFixed(1)}, solve;dur=${parts.solveMs.toFixed(1)}, serialize;dur=${parts.serializeMs.toFixed(1)}, gzip;dur=${parts.gzipMs.toFixed(1)}, total;dur=${parts.serverTotalMs.toFixed(1)}`;\n\tconst rhino = parts.rhino;\n\tif (rhino) {\n\t\tconst onRhinoMs = rhino.decode + rhino.solve + rhino.encode;\n\t\tconst computeLinkMs = Math.max(0, parts.solveMs - onRhinoMs);\n\t\theader += `, rhino_decode;dur=${rhino.decode.toFixed(1)}, rhino_solve;dur=${rhino.solve.toFixed(1)}, rhino_encode;dur=${rhino.encode.toFixed(1)}, compute_link;dur=${computeLinkMs.toFixed(1)}`;\n\t}\n\tfor (const [label, ms] of parts.prepMarks) header += `, p_${label};dur=${ms.toFixed(1)}`;\n\tconst settle = parts.settle;\n\tif (settle) {\n\t\theader += `, selva_cache;dur=${settle.fromCache ? 1 : 0}`;\n\t\tif (settle.definitionReuploaded !== void 0) header += `, def_reupload;dur=${settle.definitionReuploaded ? 1 : 0}`;\n\t}\n\tconst byteRef = parts.byteRefOutcome;\n\tif (byteRef) {\n\t\tconst verdict = !byteRef.loaded ? \"skipped\" : byteRef.fromCache ? \"hit\" : \"miss\";\n\t\theader += `, def_bytes;desc=${verdict}`;\n\t}\n\tif (parts.l2CacheHit !== null) header += `, l2_cache;dur=${parts.l2CacheHit ? 1 : 0}`;\n\treturn header;\n}\n//#endregion\n//#region ../server/src/compute/solve-cache-key.ts\n/**\n* Durable L2 cache-key derivation (H2 / R8 / R13).\n*\n* The in-process L1 cache keys on a 32-bit FNV hash — fine for a 20-entry Map,\n* unsafe for a durable, cross-user cache where a collision serves user A's\n* geometry to user B (CONTEXT.md L92–97 records exactly this bug shipping once).\n* So the L2 key is a wide SHA-256 hash (SHA-256 collisions aren't a realistic\n* threat, so hash-to-hash comparison at hit time is defense-in-depth enough —\n* no byte-for-byte preimage comparison is done or needed).\n*\n* What goes into the key:\n* - The **transformed** input tree (R13) — the exact tree handed to the\n* scheduler, canonicalized with the package's exported `stableStringify` so\n* the L2 key parity-matches the L1 canonicalization path.\n* - A **config subset** (R8): everything OTHER than definition+inputs that\n* changes a solve's result — model units, tolerances, `dataversion`, the\n* compute contract version, and (when known) the Rhino server identity. A\n* durable key of `(versionId, inputHash)` alone would collide across\n* differing server configs or Rhino versions.\n*\n* `versionId`, `definitionId`, and `orgId` are NOT hashed in here — they're\n* separate parts of the {@link SolveCacheKey} tuple so the backend can scope its\n* keyspace (per-definition quota, per-org isolation) without unpacking the hash.\n*/\n/**\n* Derive the durable `inputKey` from the transformed input tree and the solve\n* config subset. Deterministic and stable across processes/instances: the same\n* tree + config always produce the same hash, which is what lets a shared cache\n* hit across app instances.\n*\n* @param transformedTree the tree AFTER `transformInputParameter`/`TreeBuilder`\n* (R13) — the exact object handed to `scheduler.solve`.\n* @param config solve-affecting config (R8); `COMPUTE_CONTRACT_VERSION` is folded\n* in automatically so a wire-contract bump invalidates old entries for free.\n*/\nfunction deriveSolveCacheInputKey(transformedTree, config) {\n\tconst canonical = $({\n\t\tv: 1,\n\t\ttree: transformedTree,\n\t\tconfig\n\t});\n\treturn { hash: createHash(\"sha256\").update(canonical).digest(\"hex\") };\n}\n//#endregion\n//#region ../server/src/compute/safe-url.ts\n/**\n* SSRF guard for `loadRemoteDefinition`. Without it an authenticated user could\n* submit `http://169.254.169.254/...` (cloud metadata) or any intranet endpoint\n* and the server would fetch it on their behalf.\n*\n* Two layers:\n*\n* 1. `isSafeRemoteDefinitionUrl` — synchronous literal pre-filter. Rejects\n* protocol, hostname literals, and every IP *encoding* that maps to a\n* blocked address (dotted-decimal, integer, octal, hex, short-form,\n* IPv4-mapped IPv6). Fast and DNS-free; safe to call anywhere.\n*\n* 2. `assertSafeRemoteDefinitionUrl` — resolves the hostname via DNS and\n* re-checks the *resolved* IP. This is the real defense: it catches a\n* public name that resolves to a private IP, which the literal filter\n* can't see. Still not bulletproof against rebinding (the IP can change\n* between this lookup and fetch's own); for that the caller would have to\n* connect to the resolved IP directly. Connecting by IP is a larger change\n* — this closes the practical bypasses (literal encodings + a DNS record\n* that points inward) which is what an attacker actually reaches for.\n*/\n/**\n* True when `ip` (a normalized IPv4 or IPv6 literal from `isIP`/`dns.lookup`)\n* is loopback, private, link-local, or otherwise must-not-fetch. IPv4-mapped\n* IPv6 (`::ffff:a.b.c.d`) is unwrapped to its embedded IPv4 first so the v4\n* rules apply.\n*/\nfunction isBlockedIp(ip) {\n\tlet addr = ip.toLowerCase();\n\tconst mappedDotted = /^::ffff:(\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3})$/.exec(addr);\n\tif (mappedDotted) addr = mappedDotted[1];\n\telse {\n\t\tconst mappedHex = /^::ffff:([0-9a-f]{1,4}):([0-9a-f]{1,4})$/.exec(addr);\n\t\tif (mappedHex) {\n\t\t\tconst hi = parseInt(mappedHex[1], 16);\n\t\t\tconst lo = parseInt(mappedHex[2], 16);\n\t\t\taddr = [\n\t\t\t\thi >> 8 & 255,\n\t\t\t\thi & 255,\n\t\t\t\tlo >> 8 & 255,\n\t\t\t\tlo & 255\n\t\t\t].join(\".\");\n\t\t}\n\t}\n\tif (isIP(addr) === 4) {\n\t\tconst octets = addr.split(\".\").map(Number);\n\t\tif (octets.length !== 4 || octets.some((o) => o > 255)) return true;\n\t\tconst [a, b] = octets;\n\t\tif (a === 0) return true;\n\t\tif (a === 127) return true;\n\t\tif (a === 10) return true;\n\t\tif (a === 192 && b === 168) return true;\n\t\tif (a === 172 && b >= 16 && b <= 31) return true;\n\t\tif (a === 169 && b === 254) return true;\n\t\treturn false;\n\t}\n\tif (addr === \"::1\" || addr === \"::\") return true;\n\tif (/^(fc|fd)[0-9a-f]{0,2}:/.test(addr)) return true;\n\tif (/^fe[89ab][0-9a-f]:/.test(addr)) return true;\n\treturn false;\n}\n/**\n* Parse a bare-IPv4 hostname in any encoding browsers/glibc accept — integer\n* (`2130706433`), octal (`0177.0.0.1`), hex (`0x7f000001`), and short forms\n* (`127.1`) — into a canonical dotted-decimal string. Returns null when the\n* host is not a numeric IPv4 literal (i.e. it's a real name or already-valid\n* dotted-quad, which callers handle separately).\n*/\nfunction canonicalizeNumericIpv4(host) {\n\tif (isIP(host) === 4) return host;\n\tconst rawParts = host.split(\".\");\n\tif (rawParts.length === 0 || rawParts.length > 4) return null;\n\tconst parseUInt = (s) => {\n\t\tif (s === \"\") return null;\n\t\tlet n;\n\t\tif (/^0x[0-9a-f]+$/i.test(s)) n = parseInt(s, 16);\n\t\telse if (/^0[0-7]+$/.test(s)) n = parseInt(s, 8);\n\t\telse if (/^[0-9]+$/.test(s)) n = parseInt(s, 10);\n\t\telse return null;\n\t\treturn Number.isFinite(n) ? n : null;\n\t};\n\tconst nums = rawParts.map(parseUInt);\n\tif (nums.some((n) => n === null)) return null;\n\tconst parts = nums;\n\tlet value;\n\tswitch (parts.length) {\n\t\tcase 1:\n\t\t\tvalue = parts[0];\n\t\t\tbreak;\n\t\tcase 2:\n\t\t\tif (parts[0] > 255 || parts[1] > 16777215) return null;\n\t\t\tvalue = parts[0] << 24 | parts[1];\n\t\t\tbreak;\n\t\tcase 3:\n\t\t\tif (parts[0] > 255 || parts[1] > 255 || parts[2] > 65535) return null;\n\t\t\tvalue = parts[0] << 24 | parts[1] << 16 | parts[2];\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tif (parts.some((p) => p > 255)) return null;\n\t\t\tvalue = parts[0] << 24 | parts[1] << 16 | parts[2] << 8 | parts[3];\n\t}\n\tvalue = value >>> 0;\n\tif (value > 4294967295) return null;\n\treturn [\n\t\tvalue >>> 24 & 255,\n\t\tvalue >>> 16 & 255,\n\t\tvalue >>> 8 & 255,\n\t\tvalue & 255\n\t].join(\".\");\n}\n/**\n* Synchronous literal pre-filter. Rejects bad schemes, loopback hostnames, and\n* any IP literal (in any encoding) that resolves to a blocked address. Does NOT\n* perform DNS — a public *name* that points at a private IP passes here and is\n* caught by `assertSafeRemoteDefinitionUrl`.\n*/\nfunction isSafeRemoteDefinitionUrl(raw) {\n\tlet parsed;\n\ttry {\n\t\tparsed = new URL(raw);\n\t} catch {\n\t\treturn false;\n\t}\n\tif (parsed.protocol !== \"http:\" && parsed.protocol !== \"https:\") return false;\n\tlet host = parsed.hostname.toLowerCase();\n\tif (!host) return false;\n\tif (host === \"localhost\" || host.endsWith(\".localhost\")) return false;\n\tif (host.startsWith(\"[\") && host.endsWith(\"]\")) host = host.slice(1, -1);\n\tif (isIP(host) === 6) return !isBlockedIp(host);\n\tconst canonical = canonicalizeNumericIpv4(host);\n\tif (canonical) return !isBlockedIp(canonical);\n\treturn true;\n}\n/**\n* Full SSRF check: literal pre-filter, then resolve every A/AAAA record and\n* reject if *any* resolved IP is blocked. Returns the original URL on success\n* so callers can `await assertSafeRemoteDefinitionUrl(url)` inline. Throws on\n* any rejection.\n*/\nasync function assertSafeRemoteDefinitionUrl(raw, logger = new NoopLogger()) {\n\tif (!isSafeRemoteDefinitionUrl(raw)) {\n\t\tlogger.warn(\"Blocked remote definition URL\", {\n\t\t\tcomponent: \"Compute/ssrf\",\n\t\t\treason: \"literal-filter\",\n\t\t\thost: hostOf(raw)\n\t\t});\n\t\tthrow new Error(\"Remote definition URL is not allowed\");\n\t}\n\tconst host = new URL(raw).hostname.toLowerCase().replace(/^\\[|\\]$/g, \"\");\n\tif (isIP(host) !== 0 || canonicalizeNumericIpv4(host)) return raw;\n\tlet resolved;\n\ttry {\n\t\tresolved = await lookup(host, { all: true });\n\t} catch {\n\t\tlogger.warn(\"Blocked remote definition URL\", {\n\t\t\tcomponent: \"Compute/ssrf\",\n\t\t\treason: \"dns-lookup-failed\",\n\t\t\thost\n\t\t});\n\t\tthrow new Error(\"Remote definition URL is not allowed\");\n\t}\n\tif (resolved.length === 0 || resolved.some((r) => isBlockedIp(r.address))) {\n\t\tconst blocked = resolved.filter((r) => isBlockedIp(r.address)).map((r) => r.address);\n\t\tlogger.warn(\"Blocked remote definition URL\", {\n\t\t\tcomponent: \"Compute/ssrf\",\n\t\t\treason: \"resolves-to-blocked-ip\",\n\t\t\thost,\n\t\t\tblockedIps: blocked\n\t\t});\n\t\tthrow new Error(\"Remote definition URL is not allowed\");\n\t}\n\treturn raw;\n}\n/** Best-effort hostname for logging; falls back to a truncated raw string. */\nfunction hostOf(raw) {\n\ttry {\n\t\treturn new URL(raw).hostname;\n\t} catch {\n\t\treturn raw.slice(0, 120);\n\t}\n}\n//#endregion\n//#region ../server/src/compute/remote-definition.ts\n/**\n* Remote-definition fetch: SSRF-guarded, size-capped, timed, and TTL-cached.\n*\n* A solve can reference its `.gh` by remote URL instead of a stored blob. That\n* URL is attacker-controllable (a share-token caller supplies `definitionUrl`),\n* so every fetch runs through {@link assertSafeRemoteDefinitionUrl} (literal +\n* DNS host validation, blocking private/loopback/link-local targets and\n* literal-encoding bypasses), streams the body with an early size cap, and\n* bounds the wall time with a deadline.\n*\n* The TTL cache is a per-fetcher `Map<url, {data, fetchedAt}>` so repeated\n* solves of the same remote definition skip the network. It's created by\n* {@link createRemoteDefinitionFetcher} rather than being module-global, so a\n* consuming app can hold one fetcher per process (the app binding does) or\n* several isolated ones (tests) without shared state leaking across them.\n*/\n/** Once the cache exceeds this many entries, evict the oldest 10 by `fetchedAt`. */\nvar CACHE_MAX_ENTRIES = 50;\nvar CACHE_EVICT_BATCH = 10;\n/**\n* Read a response body into memory, aborting (and throwing) as soon as the\n* running byte total exceeds `maxBytes`. Falls back to `arrayBuffer()` only when\n* the body isn't a readable stream (older fetch impls). Exported for direct use\n* and reuse; the fetcher below wraps it with SSRF + TTL.\n*/\nasync function readBodyWithCap(response, maxBytes, controller) {\n\tif (!response.body) {\n\t\tconst buffer = await response.arrayBuffer();\n\t\tif (buffer.byteLength > maxBytes) throw new Error(\"Remote definition exceeds size limit\");\n\t\treturn new Uint8Array(buffer);\n\t}\n\tconst reader = response.body.getReader();\n\tconst chunks = [];\n\tlet total = 0;\n\twhile (true) {\n\t\tconst { done, value } = await reader.read();\n\t\tif (done) break;\n\t\ttotal += value.byteLength;\n\t\tif (total > maxBytes) {\n\t\t\tcontroller.abort();\n\t\t\tthrow new Error(\"Remote definition exceeds size limit\");\n\t\t}\n\t\tchunks.push(value);\n\t}\n\tconst out = new Uint8Array(total);\n\tlet offset = 0;\n\tfor (const chunk of chunks) {\n\t\tout.set(chunk, offset);\n\t\toffset += chunk.byteLength;\n\t}\n\treturn out;\n}\n/**\n* Build a remote-definition fetcher owning its own TTL cache. Each fetcher's\n* cache is independent, so one per process shares warm bytes while test fetchers\n* stay isolated.\n*/\nfunction createRemoteDefinitionFetcher(config) {\n\tconst cache = /* @__PURE__ */ new Map();\n\tconst logger = config.logger ?? new NoopLogger();\n\treturn { async load(url) {\n\t\tawait assertSafeRemoteDefinitionUrl(url, logger);\n\t\tconst now = config.now();\n\t\tconst cached = cache.get(url);\n\t\tif (cached && now - cached.fetchedAt < config.cacheTtlMs) return cached.data;\n\t\tconst controller = new AbortController();\n\t\tconst timeout = setTimeout(() => controller.abort(), config.fetchTimeoutMs);\n\t\tlet data;\n\t\ttry {\n\t\t\tconst response = await fetch(url, {\n\t\t\t\tsignal: controller.signal,\n\t\t\t\tredirect: \"error\"\n\t\t\t});\n\t\t\tif (!response.ok) throw new Error(`HTTP ${response.status}: ${response.statusText}`);\n\t\t\tconst declared = Number(response.headers.get(\"content-length\"));\n\t\t\tif (Number.isFinite(declared) && declared > config.maxBytes) throw new Error(\"Remote definition exceeds size limit\");\n\t\t\tdata = await readBodyWithCap(response, config.maxBytes, controller);\n\t\t} finally {\n\t\t\tclearTimeout(timeout);\n\t\t}\n\t\tcache.set(url, {\n\t\t\tdata,\n\t\t\tfetchedAt: now\n\t\t});\n\t\tif (cache.size > CACHE_MAX_ENTRIES) {\n\t\t\tconst entries = Array.from(cache.entries());\n\t\t\tentries.sort((a, b) => a[1].fetchedAt - b[1].fetchedAt);\n\t\t\tfor (let i = 0; i < CACHE_EVICT_BATCH; i++) cache.delete(entries[i][0]);\n\t\t}\n\t\treturn data;\n\t} };\n}\n//#endregion\nexport { adaptEnvelopeToEncoding as n, runSolvePipeline as r, createRemoteDefinitionFetcher as t };\n"],"names":[],"mappings":"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"}
|
package/build/server/chunks/chunks/{computeLimits.js-vDIRMhzi.js → computeLimits.js-BxiPi8XP.js}
RENAMED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { b as private_env } from './shared-server.js-DA4m8f1m.js';
|
|
2
2
|
import { v as lazyLogger } from './providers.server.js-Ck45V_zF.js';
|
|
3
3
|
import { a as resolveComputeLimits } from './limits.js-DfZnOKg5.js';
|
|
4
|
-
import './compute.js-
|
|
4
|
+
import './compute.js-DGTy3YjO.js';
|
|
5
5
|
|
|
6
6
|
//#region src/lib/server/computeLimits.ts
|
|
7
7
|
/**
|
|
@@ -45,4 +45,4 @@ var SOLVE_CACHE_MAX_TOTAL_BYTES = limits.solveCacheMaxTotalBytes;
|
|
|
45
45
|
var SOLVE_CACHE_PROVIDER = (private_env.SOLVE_CACHE_PROVIDER ?? "off").toLowerCase();
|
|
46
46
|
|
|
47
47
|
export { COMPUTE_RESPONSE_MAX_BYTES as C, DEFINITION_CACHE_TTL_MS as D, MAX_IMAGE_FILE_SIZE as M, REMOTE_DEFINITION_FETCH_TIMEOUT_MS as R, SOLVE_CACHE_DEFAULT_MAX_ENTRIES as S, REMOTE_DEFINITION_MAX_BYTES as a, COMPUTE_REQUEST_MAX_BYTES as b, MAX_GH_FILE_SIZE as c, RATE_LIMIT_MAX_REQUESTS as d, RATE_LIMIT_WINDOW_MS as e, MAX_SOLVE_DURATION_MS as f, COMPUTE_RESPONSE_CACHE_BYTES as g, COMPUTE_REUSE_DEFINITION_CACHE as h, COMPUTE_CACHE_ERRORED_SOLVES as i, COMPUTE_SERVER_CACHESOLVE as j, COMPUTE_QUEUE_WAIT_MS as k, COMPUTE_MAX_QUEUE_DEPTH as l, COMPUTE_MAX_CONCURRENT as m, SOLVE_CACHE_PROVIDER as n, COMPUTE_DEFINITION_BYTE_CACHE_BYTES as o, SOLVE_CACHE_MAX_TOTAL_BYTES as p };
|
|
48
|
-
//# sourceMappingURL=computeLimits.js-
|
|
48
|
+
//# sourceMappingURL=computeLimits.js-BxiPi8XP.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"computeLimits.js-
|
|
1
|
+
{"version":3,"file":"computeLimits.js-BxiPi8XP.js","sources":["../../../../.svelte-kit/output/server/chunks/computeLimits.js"],"sourcesContent":["import { t as private_env } from \"./shared-server.js\";\nimport { S as lazyLogger } from \"./providers.server.js\";\nimport { n as resolveComputeLimits } from \"./limits.js\";\nimport \"./compute.js\";\n//#region src/lib/server/computeLimits.ts\n/**\n* App-side binding for the compute limits. The knobs, defaults, and env\n* parsing now live in `@selvajs/server` (`resolveComputeLimits`) so a consuming\n* app can reuse them; this module is the thin adapter that reads SvelteKit's\n* dynamic private env ONCE and re-exports the resolved values as the named\n* constants the rest of the app already imports.\n*\n* Why `$env/dynamic/private` and not bare `process.env`: in `vite dev` Vite\n* loads `.env` into this module but does NOT mirror it into `process.env`, so a\n* raw `process.env[name]` is undefined in dev and every knob silently fell back\n* to its default regardless of `.env`.\n*\n* Client-side counterparts (the in-flight compute throttle and the slider\n* debounce on inputs) live in `@selvajs/ui` and are bundled into the client, so\n* they cannot read env — see `compute/computeThrottle.svelte.ts` and the input\n* components.\n*/\nvar limits = resolveComputeLimits(private_env, lazyLogger);\nvar MAX_SOLVE_DURATION_MS = limits.maxSolveDurationMs;\nvar RATE_LIMIT_WINDOW_MS = limits.rateLimitWindowMs;\nvar RATE_LIMIT_MAX_REQUESTS = limits.rateLimitMaxRequests;\nvar MAX_GH_FILE_SIZE = limits.maxGhFileSize;\nvar MAX_IMAGE_FILE_SIZE = limits.maxImageFileSize;\nvar COMPUTE_REQUEST_MAX_BYTES = limits.computeRequestMaxBytes;\nvar COMPUTE_RESPONSE_MAX_BYTES = limits.computeResponseMaxBytes;\nvar REMOTE_DEFINITION_MAX_BYTES = limits.remoteDefinitionMaxBytes;\nvar REMOTE_DEFINITION_FETCH_TIMEOUT_MS = limits.remoteDefinitionFetchTimeoutMs;\nvar DEFINITION_CACHE_TTL_MS = limits.definitionCacheTtlMs;\nvar COMPUTE_REUSE_DEFINITION_CACHE = limits.computeReuseDefinitionCache;\nvar COMPUTE_SERVER_CACHESOLVE = limits.computeServerCachesolve;\nvar COMPUTE_CACHE_ERRORED_SOLVES = limits.computeCacheErroredSolves;\nvar COMPUTE_MAX_CONCURRENT = limits.computeMaxConcurrentSolves;\nvar COMPUTE_MAX_QUEUE_DEPTH = limits.computeMaxQueueDepth;\nvar COMPUTE_QUEUE_WAIT_MS = limits.computeQueueWaitMs;\nvar COMPUTE_DEFINITION_BYTE_CACHE_BYTES = limits.computeDefinitionByteCacheBytes;\nvar COMPUTE_RESPONSE_CACHE_BYTES = limits.computeResponseCacheBytes;\nvar SOLVE_CACHE_DEFAULT_MAX_ENTRIES = limits.solveCacheDefaultMaxEntries;\nvar SOLVE_CACHE_MAX_TOTAL_BYTES = limits.solveCacheMaxTotalBytes;\nvar SOLVE_CACHE_PROVIDER = (private_env.SOLVE_CACHE_PROVIDER ?? \"off\").toLowerCase();\n//#endregion\nexport { REMOTE_DEFINITION_FETCH_TIMEOUT_MS as _, COMPUTE_QUEUE_WAIT_MS as a, SOLVE_CACHE_MAX_TOTAL_BYTES as b, COMPUTE_RESPONSE_MAX_BYTES as c, DEFINITION_CACHE_TTL_MS as d, MAX_GH_FILE_SIZE as f, RATE_LIMIT_WINDOW_MS as g, RATE_LIMIT_MAX_REQUESTS as h, COMPUTE_MAX_QUEUE_DEPTH as i, COMPUTE_REUSE_DEFINITION_CACHE as l, MAX_SOLVE_DURATION_MS as m, COMPUTE_DEFINITION_BYTE_CACHE_BYTES as n, COMPUTE_REQUEST_MAX_BYTES as o, MAX_IMAGE_FILE_SIZE as p, COMPUTE_MAX_CONCURRENT as r, COMPUTE_RESPONSE_CACHE_BYTES as s, COMPUTE_CACHE_ERRORED_SOLVES as t, COMPUTE_SERVER_CACHESOLVE as u, REMOTE_DEFINITION_MAX_BYTES as v, SOLVE_CACHE_PROVIDER as x, SOLVE_CACHE_DEFAULT_MAX_ENTRIES as y };\n"],"names":[],"mappings":";;;;;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,MAAM,GAAG,oBAAoB,CAAC,WAAW,EAAE,UAAU,CAAC;AACvD,IAAC,qBAAqB,GAAG,MAAM,CAAC;AAChC,IAAC,oBAAoB,GAAG,MAAM,CAAC;AAC/B,IAAC,uBAAuB,GAAG,MAAM,CAAC;AAClC,IAAC,gBAAgB,GAAG,MAAM,CAAC;AAC3B,IAAC,mBAAmB,GAAG,MAAM,CAAC;AAC9B,IAAC,yBAAyB,GAAG,MAAM,CAAC;AACpC,IAAC,0BAA0B,GAAG,MAAM,CAAC;AACrC,IAAC,2BAA2B,GAAG,MAAM,CAAC;AACtC,IAAC,kCAAkC,GAAG,MAAM,CAAC;AAC7C,IAAC,uBAAuB,GAAG,MAAM,CAAC;AAClC,IAAC,8BAA8B,GAAG,MAAM,CAAC;AACzC,IAAC,yBAAyB,GAAG,MAAM,CAAC;AACpC,IAAC,4BAA4B,GAAG,MAAM,CAAC;AACvC,IAAC,sBAAsB,GAAG,MAAM,CAAC;AACjC,IAAC,uBAAuB,GAAG,MAAM,CAAC;AAClC,IAAC,qBAAqB,GAAG,MAAM,CAAC;AAChC,IAAC,mCAAmC,GAAG,MAAM,CAAC;AAC9C,IAAC,4BAA4B,GAAG,MAAM,CAAC;AACvC,IAAC,+BAA+B,GAAG,MAAM,CAAC;AAC1C,IAAC,2BAA2B,GAAG,MAAM,CAAC;AACtC,IAAC,oBAAoB,GAAG,CAAC,WAAW,CAAC,oBAAoB,IAAI,KAAK,EAAE,WAAW;;;;"}
|