tanstack_start_ts 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.wrangler/deploy/config.json +1 -0
- package/bunfig.toml +6 -0
- package/components.json +22 -0
- package/config.json +0 -0
- package/dist/client/.assetsignore +2 -0
- package/dist/client/assets/ProductCard-DbIkJAE-.js +1 -0
- package/dist/client/assets/about-AskxOruL.js +1 -0
- package/dist/client/assets/admin-BZVcAQM3.js +1 -0
- package/dist/client/assets/admin.functions--RdVcuBx.js +1 -0
- package/dist/client/assets/admin.login-QgrF_9Fp.js +1 -0
- package/dist/client/assets/affiliate-disclosure-BIAsA-HO.js +1 -0
- package/dist/client/assets/categories-D0N418mK.js +1 -0
- package/dist/client/assets/category._slug-aCaQm14E.js +1 -0
- package/dist/client/assets/contact-PhvO-V15.js +1 -0
- package/dist/client/assets/faq-BsiHWPM8.js +1 -0
- package/dist/client/assets/hero-bg-BP2eVUIX.jpg +0 -0
- package/dist/client/assets/index-BU9rnkF3.js +1 -0
- package/dist/client/assets/index-BpJWZkva.js +1 -0
- package/dist/client/assets/index-vRX-zAyq.js +1 -0
- package/dist/client/assets/login-DteE0ZGp.js +1 -0
- package/dist/client/assets/logo-pSNfLJQk.png +0 -0
- package/dist/client/assets/privacy-B_Pu7040.js +1 -0
- package/dist/client/assets/product-links-BkZ41Gv3.js +1 -0
- package/dist/client/assets/product._id-BVUysCW-.js +1 -0
- package/dist/client/assets/products.functions-cGzRziKO.js +1 -0
- package/dist/client/assets/profile-CveRcKq2.js +1 -0
- package/dist/client/assets/reset-password-ySEjItX_.js +1 -0
- package/dist/client/assets/saved-CHtdQDJF.js +1 -0
- package/dist/client/assets/search-CXWfET1y.js +1 -0
- package/dist/client/assets/signup-CEx90iuV.js +1 -0
- package/dist/client/assets/styles-DrNJG0BO.css +1 -0
- package/dist/client/assets/terms-VqJ9kX9b.js +1 -0
- package/dist/client/assets/update-password-C-d0ix5e.js +1 -0
- package/dist/client/assets/vendor-aria-hidden-DvXkyWUv.js +1 -0
- package/dist/client/assets/vendor-class-variance-authority-5VPnzWs2.js +1 -0
- package/dist/client/assets/vendor-clsx-B-dksMZM.js +1 -0
- package/dist/client/assets/vendor-cookie-es-CS0aJGDi.js +1 -0
- package/dist/client/assets/vendor-detect-node-es-l0sNRNKZ.js +1 -0
- package/dist/client/assets/vendor-floating-ui-core-BlUy28sp.js +1 -0
- package/dist/client/assets/vendor-floating-ui-dom-BxK0hn2R.js +1 -0
- package/dist/client/assets/vendor-floating-ui-react-dom-Bas3975S.js +1 -0
- package/dist/client/assets/vendor-floating-ui-utils-BfYUAVcw.js +1 -0
- package/dist/client/assets/vendor-framer-motion-BMdL-cuX.js +9 -0
- package/dist/client/assets/vendor-get-nonce-C-Z93AgS.js +1 -0
- package/dist/client/assets/vendor-iceberg-js-tWD4K6Lg.js +1 -0
- package/dist/client/assets/vendor-lovable.dev-cloud-auth-js-VuzqtJVg.js +1 -0
- package/dist/client/assets/vendor-lucide-react-b5K2fehp.js +1 -0
- package/dist/client/assets/vendor-motion-dom-BETJamZt.js +1 -0
- package/dist/client/assets/vendor-motion-utils-BuWewJbj.js +1 -0
- package/dist/client/assets/vendor-radix-ui-primitive-Dc_FVRD7.js +1 -0
- package/dist/client/assets/vendor-radix-ui-react-accordion-C22Rgxe9.js +1 -0
- package/dist/client/assets/vendor-radix-ui-react-arrow-DMHj2mKI.js +1 -0
- package/dist/client/assets/vendor-radix-ui-react-avatar-CVPBkFXg.js +1 -0
- package/dist/client/assets/vendor-radix-ui-react-collapsible-BvM-4sKX.js +1 -0
- package/dist/client/assets/vendor-radix-ui-react-collection-D9KtqmHm.js +1 -0
- package/dist/client/assets/vendor-radix-ui-react-compose-refs-Cvq0AS8Z.js +1 -0
- package/dist/client/assets/vendor-radix-ui-react-context-CAqqn5Nx.js +1 -0
- package/dist/client/assets/vendor-radix-ui-react-dialog-DZ01vOLq.js +5 -0
- package/dist/client/assets/vendor-radix-ui-react-direction-DxZwNuei.js +1 -0
- package/dist/client/assets/vendor-radix-ui-react-dismissable-layer-Dqgrs55Y.js +1 -0
- package/dist/client/assets/vendor-radix-ui-react-dropdown-menu-0uzvrqkn.js +1 -0
- package/dist/client/assets/vendor-radix-ui-react-focus-guards-DgWoZ-fP.js +1 -0
- package/dist/client/assets/vendor-radix-ui-react-focus-scope-BLIu5QaL.js +1 -0
- package/dist/client/assets/vendor-radix-ui-react-id-bpga_rLa.js +1 -0
- package/dist/client/assets/vendor-radix-ui-react-menu-D0qf2r6_.js +1 -0
- package/dist/client/assets/vendor-radix-ui-react-popper-BafIylxU.js +1 -0
- package/dist/client/assets/vendor-radix-ui-react-portal-BnAsfNCS.js +1 -0
- package/dist/client/assets/vendor-radix-ui-react-presence-C-f3UKQ2.js +1 -0
- package/dist/client/assets/vendor-radix-ui-react-primitive-zTHwXNoz.js +1 -0
- package/dist/client/assets/vendor-radix-ui-react-roving-focus-jyJB8K2E.js +1 -0
- package/dist/client/assets/vendor-radix-ui-react-slot-6LXHJrHl.js +1 -0
- package/dist/client/assets/vendor-radix-ui-react-use-callback-ref-E91aPc6s.js +1 -0
- package/dist/client/assets/vendor-radix-ui-react-use-controllable-state-Ca3eMtxa.js +1 -0
- package/dist/client/assets/vendor-radix-ui-react-use-effect-event-CPeX4A3c.js +1 -0
- package/dist/client/assets/vendor-radix-ui-react-use-escape-keydown-7n3YsXFo.js +1 -0
- package/dist/client/assets/vendor-radix-ui-react-use-is-hydrated-C1PY1qNv.js +1 -0
- package/dist/client/assets/vendor-radix-ui-react-use-layout-effect-B3AcGWPy.js +1 -0
- package/dist/client/assets/vendor-radix-ui-react-use-size-CXS04sct.js +1 -0
- package/dist/client/assets/vendor-react-dom-BnNs-kzm.js +9 -0
- package/dist/client/assets/vendor-react-gJPiVnX5.js +1 -0
- package/dist/client/assets/vendor-react-remove-scroll-DHKl-IMP.js +4 -0
- package/dist/client/assets/vendor-react-remove-scroll-bar-CSjdInc2.js +38 -0
- package/dist/client/assets/vendor-react-style-singleton-BqHpkgXn.js +1 -0
- package/dist/client/assets/vendor-scheduler-7OC5HNn7.js +1 -0
- package/dist/client/assets/vendor-seroval-B_Fur-nl.js +3 -0
- package/dist/client/assets/vendor-seroval-plugins-CBHnPkZJ.js +1 -0
- package/dist/client/assets/vendor-sonner-71-LdGG1.js +1 -0
- package/dist/client/assets/vendor-supabase-auth-js-DWrN-bIx.js +18 -0
- package/dist/client/assets/vendor-supabase-functions-js-uY_V-TxC.js +1 -0
- package/dist/client/assets/vendor-supabase-phoenix-BzEf37Ve.js +2 -0
- package/dist/client/assets/vendor-supabase-postgrest-js-C4rBWbCx.js +4 -0
- package/dist/client/assets/vendor-supabase-realtime-js-D6BlOYKE.js +23 -0
- package/dist/client/assets/vendor-supabase-storage-js-BG98L3Zz.js +1 -0
- package/dist/client/assets/vendor-supabase-supabase-js-DCCzdwBJ.js +1 -0
- package/dist/client/assets/vendor-tailwind-merge-Ct12j0u0.js +1 -0
- package/dist/client/assets/vendor-tanstack-history-C617CaxG.js +1 -0
- package/dist/client/assets/vendor-tanstack-query-core-7wuJJ5ZL.js +1 -0
- package/dist/client/assets/vendor-tanstack-react-query-HImzo8sX.js +1 -0
- package/dist/client/assets/vendor-tanstack-react-router-sIZLK-LU.js +1 -0
- package/dist/client/assets/vendor-tanstack-react-start-client-GiYCfWmf.js +1 -0
- package/dist/client/assets/vendor-tanstack-react-store-EvTi3ahh.js +1 -0
- package/dist/client/assets/vendor-tanstack-router-core-Cr7bYUZv.js +1 -0
- package/dist/client/assets/vendor-tanstack-start-client-core-C-00BBOu.js +2 -0
- package/dist/client/assets/vendor-tanstack-start-fn-stubs-l0sNRNKZ.js +1 -0
- package/dist/client/assets/vendor-tanstack-store-BC7mA7pq.js +1 -0
- package/dist/client/assets/vendor-tslib-Du-meQkk.js +1 -0
- package/dist/client/assets/vendor-use-callback-ref-C_fIAtot.js +1 -0
- package/dist/client/assets/vendor-use-sidecar-Bh0DDN6h.js +1 -0
- package/dist/client/assets/vendor-use-sync-external-store-ZvKHXaIn.js +1 -0
- package/dist/client/assets/vendor-vercel-analytics-DwPM5BWs.js +1 -0
- package/dist/client/assets/vendor-zod-By9teAtI.js +1 -0
- package/dist/client/robots.txt +2 -0
- package/dist/server/.dev.vars +5 -0
- package/dist/server/.vite/manifest.json +2528 -0
- package/dist/server/assets/ProductCard-CUPXy5Eo.js +149 -0
- package/dist/server/assets/_tanstack-start-manifest_v-do7vTWFD.js +4 -0
- package/dist/server/assets/about-TfKQw0Ga.js +28 -0
- package/dist/server/assets/admin-DspfJOJk.js +578 -0
- package/dist/server/assets/admin.functions-B78ppWLR.js +645 -0
- package/dist/server/assets/admin.functions-BWlKBoTL.js +93 -0
- package/dist/server/assets/admin.login-CV7QfeA6.js +139 -0
- package/dist/server/assets/affiliate-disclosure-B1wI1cDb.js +86 -0
- package/dist/server/assets/auth-middleware-Cn49MidW.js +62 -0
- package/dist/server/assets/categories-Z7jnAYZP.js +108 -0
- package/dist/server/assets/category._slug-D0XY3FGK.js +112 -0
- package/dist/server/assets/contact-IzyONsXs.js +104 -0
- package/dist/server/assets/faq-aRhB_CR3.js +133 -0
- package/dist/server/assets/hero-bg-BP2eVUIX.jpg +0 -0
- package/dist/server/assets/index-BTPHbXw9.js +221 -0
- package/dist/server/assets/index-ByJkHkrU.js +30 -0
- package/dist/server/assets/login-Dvy5Dm0f.js +175 -0
- package/dist/server/assets/logo-pSNfLJQk.png +0 -0
- package/dist/server/assets/privacy-B6Wiez1P.js +93 -0
- package/dist/server/assets/product-links-CGYEPP56.js +16 -0
- package/dist/server/assets/product._id-BpRa-1z0.js +231 -0
- package/dist/server/assets/products.functions-DSlmibYN.js +209 -0
- package/dist/server/assets/products.functions-DlHkRiqi.js +24 -0
- package/dist/server/assets/profile-B0NWzVAZ.js +314 -0
- package/dist/server/assets/reset-password-CY-rmqMr.js +115 -0
- package/dist/server/assets/saved-7FA6Dbom.js +126 -0
- package/dist/server/assets/search-Yw5c_fZa.js +329 -0
- package/dist/server/assets/signup-UPzgZo4i.js +143 -0
- package/dist/server/assets/styles-DrNJG0BO.css +1 -0
- package/dist/server/assets/terms-CMnX95bP.js +89 -0
- package/dist/server/assets/update-password-Cr94ea8n.js +131 -0
- package/dist/server/assets/vendor-aria-hidden-DPa16MWu.js +122 -0
- package/dist/server/assets/vendor-class-variance-authority-0YxJPB9Y.js +44 -0
- package/dist/server/assets/vendor-cloudflare-unenv-preset-ya0VEFBz.js +250 -0
- package/dist/server/assets/vendor-clsx-DgYk2OaC.js +16 -0
- package/dist/server/assets/vendor-cookie-es-DAoofYiI.js +44 -0
- package/dist/server/assets/vendor-detect-node-es-l0sNRNKZ.js +1 -0
- package/dist/server/assets/vendor-floating-ui-core-3tkK0THV.js +726 -0
- package/dist/server/assets/vendor-floating-ui-dom-C-cPtgJv.js +626 -0
- package/dist/server/assets/vendor-floating-ui-react-dom-CRG6gBpH.js +319 -0
- package/dist/server/assets/vendor-floating-ui-utils-DmXANH-E.js +320 -0
- package/dist/server/assets/vendor-framer-motion-X4zAkX3J.js +1979 -0
- package/dist/server/assets/vendor-get-nonce-DiSj3EHl.js +9 -0
- package/dist/server/assets/vendor-h3-v2-CCobnLY5.js +287 -0
- package/dist/server/assets/vendor-iceberg-js-bHCkXyJn.js +534 -0
- package/dist/server/assets/vendor-isbot-CZ7WjwVs.js +21 -0
- package/dist/server/assets/vendor-lovable.dev-cloud-auth-js-BE03njZw.js +180 -0
- package/dist/server/assets/vendor-lucide-react-Ddew6HYb.js +458 -0
- package/dist/server/assets/vendor-motion-dom-D2MTwGIG.js +5983 -0
- package/dist/server/assets/vendor-motion-utils-LJlIFN6m.js +161 -0
- package/dist/server/assets/vendor-radix-ui-primitive-B-mNdDrH.js +11 -0
- package/dist/server/assets/vendor-radix-ui-react-accordion-1Izf6x00.js +308 -0
- package/dist/server/assets/vendor-radix-ui-react-arrow-B882lnFK.js +23 -0
- package/dist/server/assets/vendor-radix-ui-react-avatar-BVgZt2Ab.js +209 -0
- package/dist/server/assets/vendor-radix-ui-react-collapsible-DCBbMZiS.js +147 -0
- package/dist/server/assets/vendor-radix-ui-react-collection-BZ2srfgU.js +150 -0
- package/dist/server/assets/vendor-radix-ui-react-compose-refs-D3qsKVk1.js +39 -0
- package/dist/server/assets/vendor-radix-ui-react-context-BVoNDLue.js +78 -0
- package/dist/server/assets/vendor-radix-ui-react-dialog-DlxMaNYK.js +406 -0
- package/dist/server/assets/vendor-radix-ui-react-direction-Dt_WDL1t.js +9 -0
- package/dist/server/assets/vendor-radix-ui-react-dismissable-layer-CjsuPohV.js +210 -0
- package/dist/server/assets/vendor-radix-ui-react-dropdown-menu-DVxKumY8.js +263 -0
- package/dist/server/assets/vendor-radix-ui-react-focus-guards-D_6NoePE.js +29 -0
- package/dist/server/assets/vendor-radix-ui-react-focus-scope-DEIhTJJH.js +206 -0
- package/dist/server/assets/vendor-radix-ui-react-id-DFFpgh6m.js +14 -0
- package/dist/server/assets/vendor-radix-ui-react-menu-CiTMLwjT.js +893 -0
- package/dist/server/assets/vendor-radix-ui-react-popper-23Ye2Vyc.js +286 -0
- package/dist/server/assets/vendor-radix-ui-react-portal-CZCH5uPk.js +16 -0
- package/dist/server/assets/vendor-radix-ui-react-presence-CaAULlDU.js +128 -0
- package/dist/server/assets/vendor-radix-ui-react-primitive-BeOk3UYa.js +124 -0
- package/dist/server/assets/vendor-radix-ui-react-roving-focus-DES9GR8l.js +224 -0
- package/dist/server/assets/vendor-radix-ui-react-slot-DUhZbzoH.js +103 -0
- package/dist/server/assets/vendor-radix-ui-react-use-callback-ref-BynBgohw.js +11 -0
- package/dist/server/assets/vendor-radix-ui-react-use-controllable-state-C9KpT6DG.js +69 -0
- package/dist/server/assets/vendor-radix-ui-react-use-effect-event-gpNY2xjS.js +1 -0
- package/dist/server/assets/vendor-radix-ui-react-use-escape-keydown-CcYRQ2pp.js +17 -0
- package/dist/server/assets/vendor-radix-ui-react-use-is-hydrated-D_LcBPXY.js +15 -0
- package/dist/server/assets/vendor-radix-ui-react-use-layout-effect-1LNLXAjr.js +6 -0
- package/dist/server/assets/vendor-radix-ui-react-use-size-D6fiKJQo.js +39 -0
- package/dist/server/assets/vendor-react-DvBrY0qp.js +511 -0
- package/dist/server/assets/vendor-react-dom-yvMLPM0j.js +10484 -0
- package/dist/server/assets/vendor-react-remove-scroll-BNtiEvVN.js +328 -0
- package/dist/server/assets/vendor-react-remove-scroll-bar-hLqRASRk.js +82 -0
- package/dist/server/assets/vendor-react-style-singleton-BXjcXskB.js +69 -0
- package/dist/server/assets/vendor-rou3-3NaGPdI8.js +8 -0
- package/dist/server/assets/vendor-seroval-dJyC-Zhz.js +1775 -0
- package/dist/server/assets/vendor-seroval-plugins-Pq_U2meB.js +58 -0
- package/dist/server/assets/vendor-sonner-CqbjhsRh.js +1086 -0
- package/dist/server/assets/vendor-srvx-BA-baEX9.js +6 -0
- package/dist/server/assets/vendor-supabase-auth-js-D4xjVprw.js +7602 -0
- package/dist/server/assets/vendor-supabase-functions-js-sWy4UYn1.js +322 -0
- package/dist/server/assets/vendor-supabase-phoenix-Bw3Uh2Nn.js +1777 -0
- package/dist/server/assets/vendor-supabase-postgrest-js-AO-BXa7I.js +4938 -0
- package/dist/server/assets/vendor-supabase-realtime-js-BtdNgJbm.js +2111 -0
- package/dist/server/assets/vendor-supabase-storage-js-Dk_MrPYO.js +2679 -0
- package/dist/server/assets/vendor-supabase-supabase-js-D1EEtG3j.js +697 -0
- package/dist/server/assets/vendor-tailwind-merge-BHb_obmC.js +3255 -0
- package/dist/server/assets/vendor-tanstack-history-C4pKJmkt.js +204 -0
- package/dist/server/assets/vendor-tanstack-query-core-PwwTR5ld.js +2552 -0
- package/dist/server/assets/vendor-tanstack-react-query-hhHzXAK1.js +190 -0
- package/dist/server/assets/vendor-tanstack-react-router-XzqpA65A.js +1120 -0
- package/dist/server/assets/vendor-tanstack-react-start-RvWUpvat.js +37 -0
- package/dist/server/assets/vendor-tanstack-react-start-client-gpNY2xjS.js +1 -0
- package/dist/server/assets/vendor-tanstack-react-start-server-uj_Y9pEN.js +15 -0
- package/dist/server/assets/vendor-tanstack-react-store-gpNY2xjS.js +1 -0
- package/dist/server/assets/vendor-tanstack-router-core-6wywV3KN.js +4252 -0
- package/dist/server/assets/vendor-tanstack-start-client-core-DoOKV2pA.js +1741 -0
- package/dist/server/assets/vendor-tanstack-start-fn-stubs-l0sNRNKZ.js +1 -0
- package/dist/server/assets/vendor-tanstack-start-server-core-CsAstXv7.js +1421 -0
- package/dist/server/assets/vendor-tanstack-start-storage-context-DgH9hIJT.js +17 -0
- package/dist/server/assets/vendor-tanstack-store-l0sNRNKZ.js +1 -0
- package/dist/server/assets/vendor-tslib-_8ICaZ64.js +67 -0
- package/dist/server/assets/vendor-unenv-DUvF4YIF.js +544 -0
- package/dist/server/assets/vendor-use-callback-ref-DMFDRvmi.js +66 -0
- package/dist/server/assets/vendor-use-sidecar-DG1tHua4.js +106 -0
- package/dist/server/assets/vendor-use-sync-external-store-rZ8vi0It.js +64 -0
- package/dist/server/assets/vendor-vercel-analytics-oP8BDp0L.js +168 -0
- package/dist/server/assets/vendor-zod-BRyQdbC-.js +3580 -0
- package/dist/server/index.js +158 -0
- package/dist/server/wrangler.json +1 -0
- package/enable-powershell.ps1 +7 -0
- package/eslint.config.js +41 -0
- package/lint.bat +4 -0
- package/package.json +95 -0
- package/public/robots.txt +2 -0
- package/run-npm-build.cjs +20 -0
- package/run-npm-build.js +20 -0
- package/src/assets/hero-bg.jpg +0 -0
- package/src/assets/logo.png +0 -0
- package/src/components/scrollsy/Footer.tsx +68 -0
- package/src/components/scrollsy/LiveTicker.tsx +31 -0
- package/src/components/scrollsy/Logo.tsx +28 -0
- package/src/components/scrollsy/Nav.tsx +255 -0
- package/src/components/scrollsy/ProductCard.tsx +190 -0
- package/src/components/scrollsy/ProductFilters.tsx +226 -0
- package/src/components/scrollsy/SupportWidget.tsx +197 -0
- package/src/components/ui/accordion.tsx +51 -0
- package/src/components/ui/alert-dialog.tsx +115 -0
- package/src/components/ui/alert.tsx +49 -0
- package/src/components/ui/aspect-ratio.tsx +5 -0
- package/src/components/ui/avatar.tsx +47 -0
- package/src/components/ui/badge.tsx +32 -0
- package/src/components/ui/breadcrumb.tsx +101 -0
- package/src/components/ui/button.tsx +49 -0
- package/src/components/ui/calendar.tsx +177 -0
- package/src/components/ui/card.tsx +55 -0
- package/src/components/ui/carousel.tsx +240 -0
- package/src/components/ui/chart.tsx +331 -0
- package/src/components/ui/checkbox.tsx +26 -0
- package/src/components/ui/collapsible.tsx +11 -0
- package/src/components/ui/command.tsx +143 -0
- package/src/components/ui/context-menu.tsx +187 -0
- package/src/components/ui/dialog.tsx +104 -0
- package/src/components/ui/drawer.tsx +98 -0
- package/src/components/ui/dropdown-menu.tsx +188 -0
- package/src/components/ui/form.tsx +171 -0
- package/src/components/ui/hover-card.tsx +27 -0
- package/src/components/ui/input-otp.tsx +69 -0
- package/src/components/ui/input.tsx +22 -0
- package/src/components/ui/label.tsx +21 -0
- package/src/components/ui/menubar.tsx +229 -0
- package/src/components/ui/navigation-menu.tsx +120 -0
- package/src/components/ui/pagination.tsx +98 -0
- package/src/components/ui/popover.tsx +31 -0
- package/src/components/ui/progress.tsx +25 -0
- package/src/components/ui/radio-group.tsx +36 -0
- package/src/components/ui/resizable.tsx +37 -0
- package/src/components/ui/scroll-area.tsx +44 -0
- package/src/components/ui/select.tsx +152 -0
- package/src/components/ui/separator.tsx +24 -0
- package/src/components/ui/sheet.tsx +122 -0
- package/src/components/ui/sidebar.tsx +744 -0
- package/src/components/ui/skeleton.tsx +7 -0
- package/src/components/ui/slider.tsx +23 -0
- package/src/components/ui/sonner.tsx +23 -0
- package/src/components/ui/switch.tsx +27 -0
- package/src/components/ui/table.tsx +94 -0
- package/src/components/ui/tabs.tsx +53 -0
- package/src/components/ui/textarea.tsx +21 -0
- package/src/components/ui/toggle-group.tsx +57 -0
- package/src/components/ui/toggle.tsx +42 -0
- package/src/components/ui/tooltip.tsx +32 -0
- package/src/hooks/use-auth.ts +26 -0
- package/src/hooks/use-mobile.tsx +19 -0
- package/src/integrations/lovable/index.ts +41 -0
- package/src/lib/admin.functions.ts +564 -0
- package/src/lib/error-capture.ts +27 -0
- package/src/lib/error-page.ts +30 -0
- package/src/lib/product-links.ts +39 -0
- package/src/lib/products.functions.ts +101 -0
- package/src/lib/utils.ts +6 -0
- package/src/routeTree.gen.ts +480 -0
- package/src/router.tsx +16 -0
- package/src/routes/__root.tsx +177 -0
- package/src/routes/about.tsx +66 -0
- package/src/routes/admin.login.tsx +95 -0
- package/src/routes/admin.tsx +811 -0
- package/src/routes/affiliate-disclosure.tsx +35 -0
- package/src/routes/categories.tsx +57 -0
- package/src/routes/category.$slug.tsx +51 -0
- package/src/routes/contact.tsx +69 -0
- package/src/routes/faq.tsx +63 -0
- package/src/routes/index.tsx +269 -0
- package/src/routes/login.tsx +160 -0
- package/src/routes/privacy.tsx +39 -0
- package/src/routes/product.$id.tsx +212 -0
- package/src/routes/profile.tsx +393 -0
- package/src/routes/reset-password.tsx +71 -0
- package/src/routes/saved.tsx +83 -0
- package/src/routes/search.tsx +136 -0
- package/src/routes/signup.tsx +108 -0
- package/src/routes/sitemap[.]xml.ts +34 -0
- package/src/routes/terms.tsx +40 -0
- package/src/routes/update-password.tsx +91 -0
- package/src/server.ts +80 -0
- package/src/start.ts +24 -0
- package/src/styles.css +333 -0
- package/terminal-test-output.txt +1 -0
- package/tsconfig.json +27 -0
- package/vercel.json +26 -0
- package/vite.config.ts +38 -0
- package/wrangler.jsonc +7 -0
|
@@ -0,0 +1,1421 @@
|
|
|
1
|
+
import { AsyncLocalStorage } from "node:async_hooks";
|
|
2
|
+
import { H as H3Event, t as toResponse } from "./vendor-h3-v2-CCobnLY5.js";
|
|
3
|
+
import { I as rootRouteId, e as createRawStreamRPCPlugin, t as invariant, x as isNotFound, y as isRedirect, H as resolveManifestAssetLink, r as getStylesheetHref, f as createSerializationAdapter, o as getNormalizedURL, p as getOrigin, b as attachRouterServerSsrUtils, z as isResolvedRedirect, D as mergeHeaders, l as executeRewriteInput } from "./vendor-tanstack-router-core-6wywV3KN.js";
|
|
4
|
+
import { d as FrameType, F as FRAME_HEADER_SIZE, p as getDefaultSerovalPlugins, i as X_TSS_SERIALIZED, T as TSS_CONTENT_TYPE_FRAMED_VERSIONED, g as TSS_FORMDATA_CONTEXT, t as safeObjectMerge, X as X_TSS_RAW_RESPONSE, h as TSS_SERVER_FUNCTION, k as createCsrfMiddleware, o as flattenMiddlewares, m as createNullProtoObject } from "./vendor-tanstack-start-client-core-DoOKV2pA.js";
|
|
5
|
+
import { i as iu, P as Pu, s as su } from "./vendor-seroval-dJyC-Zhz.js";
|
|
6
|
+
import { c as createMemoryHistory } from "./vendor-tanstack-history-C4pKJmkt.js";
|
|
7
|
+
import { r as runWithStartContext, g as getStartContext } from "./vendor-tanstack-start-storage-context-DgH9hIJT.js";
|
|
8
|
+
var GLOBAL_EVENT_STORAGE_KEY = /* @__PURE__ */ Symbol.for("tanstack-start:event-storage");
|
|
9
|
+
var globalObj = globalThis;
|
|
10
|
+
if (!globalObj[GLOBAL_EVENT_STORAGE_KEY]) globalObj[GLOBAL_EVENT_STORAGE_KEY] = new AsyncLocalStorage();
|
|
11
|
+
var eventStorage = globalObj[GLOBAL_EVENT_STORAGE_KEY];
|
|
12
|
+
function isPromiseLike(value) {
|
|
13
|
+
return typeof value.then === "function";
|
|
14
|
+
}
|
|
15
|
+
function getSetCookieValues(headers) {
|
|
16
|
+
const headersWithSetCookie = headers;
|
|
17
|
+
if (typeof headersWithSetCookie.getSetCookie === "function") return headersWithSetCookie.getSetCookie();
|
|
18
|
+
const value = headers.get("set-cookie");
|
|
19
|
+
return value ? [value] : [];
|
|
20
|
+
}
|
|
21
|
+
function mergeEventResponseHeaders(response, event) {
|
|
22
|
+
if (response.ok) return;
|
|
23
|
+
const eventSetCookies = getSetCookieValues(event.res.headers);
|
|
24
|
+
if (eventSetCookies.length === 0) return;
|
|
25
|
+
const responseSetCookies = getSetCookieValues(response.headers);
|
|
26
|
+
response.headers.delete("set-cookie");
|
|
27
|
+
for (const cookie of responseSetCookies) response.headers.append("set-cookie", cookie);
|
|
28
|
+
for (const cookie of eventSetCookies) response.headers.append("set-cookie", cookie);
|
|
29
|
+
}
|
|
30
|
+
function attachResponseHeaders(value, event) {
|
|
31
|
+
if (isPromiseLike(value)) return value.then((resolved) => {
|
|
32
|
+
if (resolved instanceof Response) mergeEventResponseHeaders(resolved, event);
|
|
33
|
+
return resolved;
|
|
34
|
+
});
|
|
35
|
+
if (value instanceof Response) mergeEventResponseHeaders(value, event);
|
|
36
|
+
return value;
|
|
37
|
+
}
|
|
38
|
+
function requestHandler(handler) {
|
|
39
|
+
return (request, requestOpts) => {
|
|
40
|
+
let h3Event;
|
|
41
|
+
try {
|
|
42
|
+
h3Event = new H3Event(request);
|
|
43
|
+
} catch (error) {
|
|
44
|
+
if (error instanceof URIError) return new Response(null, {
|
|
45
|
+
status: 400,
|
|
46
|
+
statusText: "Bad Request"
|
|
47
|
+
});
|
|
48
|
+
throw error;
|
|
49
|
+
}
|
|
50
|
+
return toResponse(attachResponseHeaders(eventStorage.run({ h3Event }, () => handler(request, requestOpts)), h3Event), h3Event);
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
function getH3Event() {
|
|
54
|
+
const event = eventStorage.getStore();
|
|
55
|
+
if (!event) throw new Error(`No StartEvent found in AsyncLocalStorage. Make sure you are using the function within the server runtime.`);
|
|
56
|
+
return event.h3Event;
|
|
57
|
+
}
|
|
58
|
+
function getRequest() {
|
|
59
|
+
return getH3Event().req;
|
|
60
|
+
}
|
|
61
|
+
function getResponse() {
|
|
62
|
+
return getH3Event().res;
|
|
63
|
+
}
|
|
64
|
+
var HEADERS = { TSS_SHELL: "X-TSS_SHELL" };
|
|
65
|
+
async function getStartManifest(matchedRoutes) {
|
|
66
|
+
const { tsrStartManifest } = await import("./_tanstack-start-manifest_v-do7vTWFD.js");
|
|
67
|
+
const startManifest = tsrStartManifest();
|
|
68
|
+
const rootRoute = startManifest.routes[rootRouteId] = startManifest.routes[rootRouteId] || {};
|
|
69
|
+
rootRoute.assets = rootRoute.assets || [];
|
|
70
|
+
let injectedHeadScripts;
|
|
71
|
+
return {
|
|
72
|
+
manifest: {
|
|
73
|
+
inlineCss: startManifest.inlineCss,
|
|
74
|
+
routes: Object.fromEntries(Object.entries(startManifest.routes).flatMap(([k, v]) => {
|
|
75
|
+
const result = {};
|
|
76
|
+
let hasData = false;
|
|
77
|
+
if (v.preloads && v.preloads.length > 0) {
|
|
78
|
+
result["preloads"] = v.preloads;
|
|
79
|
+
hasData = true;
|
|
80
|
+
}
|
|
81
|
+
if (v.assets && v.assets.length > 0) {
|
|
82
|
+
result["assets"] = v.assets;
|
|
83
|
+
hasData = true;
|
|
84
|
+
}
|
|
85
|
+
if (!hasData) return [];
|
|
86
|
+
return [[k, result]];
|
|
87
|
+
}))
|
|
88
|
+
},
|
|
89
|
+
clientEntry: startManifest.clientEntry,
|
|
90
|
+
injectedHeadScripts
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
const manifest = {
|
|
94
|
+
"0238da445528618169909df2f20865e4e94cdd1ae332dd4871ecfce3a4f5e2e2": {
|
|
95
|
+
functionName: "getProductsByCategory_createServerFn_handler",
|
|
96
|
+
importer: () => import("./products.functions-DSlmibYN.js")
|
|
97
|
+
},
|
|
98
|
+
"1d8e8cdce79172e2882528d5d32b80bd35c0ea1b2438720a98289b792614f340": {
|
|
99
|
+
functionName: "getHomeData_createServerFn_handler",
|
|
100
|
+
importer: () => import("./products.functions-DSlmibYN.js")
|
|
101
|
+
},
|
|
102
|
+
"1f15f91371ebbf2f3cadc34ffa88e17615477c189c7d20a14989f46b3a531730": {
|
|
103
|
+
functionName: "listAdmins_createServerFn_handler",
|
|
104
|
+
importer: () => import("./admin.functions-B78ppWLR.js")
|
|
105
|
+
},
|
|
106
|
+
"36d868d9acaba43916ce260adef4026deeafe7052311a1a61a689052f8d2a6a5": {
|
|
107
|
+
functionName: "createAdmin_createServerFn_handler",
|
|
108
|
+
importer: () => import("./admin.functions-B78ppWLR.js")
|
|
109
|
+
},
|
|
110
|
+
"3ce88ecd9b40619039a92eb9befb2a1baa534430c56c7c035dc6cc7fb6ea3320": {
|
|
111
|
+
functionName: "getAdminBootstrapStatus_createServerFn_handler",
|
|
112
|
+
importer: () => import("./admin.functions-B78ppWLR.js")
|
|
113
|
+
},
|
|
114
|
+
"87057b699c92d5e9cc4f021e767a44009606525481c8a27886c5fc0375dc6625": {
|
|
115
|
+
functionName: "upsertProduct_createServerFn_handler",
|
|
116
|
+
importer: () => import("./admin.functions-B78ppWLR.js")
|
|
117
|
+
},
|
|
118
|
+
"89e33d850036f54ba22d80a5c340288b7904337506fd94deacc6372a910c3cac": {
|
|
119
|
+
functionName: "importProductFromLink_createServerFn_handler",
|
|
120
|
+
importer: () => import("./admin.functions-B78ppWLR.js")
|
|
121
|
+
},
|
|
122
|
+
"8db3a7d2924568f7f51e14d9d73d2a96f312b0d2adb7276fdd08fe90dcf12de3": {
|
|
123
|
+
functionName: "listAllProducts_createServerFn_handler",
|
|
124
|
+
importer: () => import("./admin.functions-B78ppWLR.js")
|
|
125
|
+
},
|
|
126
|
+
"8e28ffefb35b7f29bda8f5128c6f8fb45636d264c3d475770b9bb49c082743e7": {
|
|
127
|
+
functionName: "getCategories_createServerFn_handler",
|
|
128
|
+
importer: () => import("./products.functions-DSlmibYN.js")
|
|
129
|
+
},
|
|
130
|
+
"911c12f56db314b9eea0d9463dda510d0464e04b72b14405d69546cc93ebeb33": {
|
|
131
|
+
functionName: "verifyAdminId_createServerFn_handler",
|
|
132
|
+
importer: () => import("./admin.functions-B78ppWLR.js")
|
|
133
|
+
},
|
|
134
|
+
"98f6ea06219c15c258067120d8debbcde0f6f83e0efb6c06816ddb77b33849a7": {
|
|
135
|
+
functionName: "searchProducts_createServerFn_handler",
|
|
136
|
+
importer: () => import("./products.functions-DSlmibYN.js")
|
|
137
|
+
},
|
|
138
|
+
"b1412d2ee3540c641acd3eadee47cab30a74bd74ee33cc79351c015701f7ed17": {
|
|
139
|
+
functionName: "getProduct_createServerFn_handler",
|
|
140
|
+
importer: () => import("./products.functions-DSlmibYN.js")
|
|
141
|
+
},
|
|
142
|
+
"c579e6cf81462f6a2bea1160758f9416a190d3246ad7147937aa785904bea01e": {
|
|
143
|
+
functionName: "grantSelfAdmin_createServerFn_handler",
|
|
144
|
+
importer: () => import("./admin.functions-B78ppWLR.js")
|
|
145
|
+
},
|
|
146
|
+
"d58e9647e4364d7098cb0d840b98a827719a64c5b316ad80080e28b97fb3f1cb": {
|
|
147
|
+
functionName: "deleteProduct_createServerFn_handler",
|
|
148
|
+
importer: () => import("./admin.functions-B78ppWLR.js")
|
|
149
|
+
},
|
|
150
|
+
"f228903e5a9f497053d1e0541c339d13437987d304e8fca9781a3a4b7021da29": {
|
|
151
|
+
functionName: "bootstrapMasterAdmin_createServerFn_handler",
|
|
152
|
+
importer: () => import("./admin.functions-B78ppWLR.js")
|
|
153
|
+
},
|
|
154
|
+
"f56374ba3aaffab4ed8ab7e2a3691b799933caea50cc55628ceb0dfe711b588b": {
|
|
155
|
+
functionName: "isAdmin_createServerFn_handler",
|
|
156
|
+
importer: () => import("./admin.functions-B78ppWLR.js")
|
|
157
|
+
}
|
|
158
|
+
};
|
|
159
|
+
async function getServerFnById(id, access) {
|
|
160
|
+
const serverFnInfo = manifest[id];
|
|
161
|
+
if (!serverFnInfo) {
|
|
162
|
+
throw new Error("Server function info not found for " + id);
|
|
163
|
+
}
|
|
164
|
+
const fnModule = serverFnInfo.module ?? await serverFnInfo.importer();
|
|
165
|
+
if (!fnModule) {
|
|
166
|
+
throw new Error("Server function module not resolved for " + id);
|
|
167
|
+
}
|
|
168
|
+
const action = fnModule[serverFnInfo.functionName];
|
|
169
|
+
if (!action) {
|
|
170
|
+
throw new Error("Server function module export not resolved for serverFn ID: " + id);
|
|
171
|
+
}
|
|
172
|
+
return action;
|
|
173
|
+
}
|
|
174
|
+
var textEncoder = new TextEncoder();
|
|
175
|
+
var EMPTY_PAYLOAD = new Uint8Array(0);
|
|
176
|
+
function encodeFrame(type, streamId, payload) {
|
|
177
|
+
const frame = new Uint8Array(FRAME_HEADER_SIZE + payload.length);
|
|
178
|
+
frame[0] = type;
|
|
179
|
+
frame[1] = streamId >>> 24 & 255;
|
|
180
|
+
frame[2] = streamId >>> 16 & 255;
|
|
181
|
+
frame[3] = streamId >>> 8 & 255;
|
|
182
|
+
frame[4] = streamId & 255;
|
|
183
|
+
frame[5] = payload.length >>> 24 & 255;
|
|
184
|
+
frame[6] = payload.length >>> 16 & 255;
|
|
185
|
+
frame[7] = payload.length >>> 8 & 255;
|
|
186
|
+
frame[8] = payload.length & 255;
|
|
187
|
+
frame.set(payload, FRAME_HEADER_SIZE);
|
|
188
|
+
return frame;
|
|
189
|
+
}
|
|
190
|
+
function encodeJSONFrame(json) {
|
|
191
|
+
return encodeFrame(FrameType.JSON, 0, textEncoder.encode(json));
|
|
192
|
+
}
|
|
193
|
+
function encodeChunkFrame(streamId, chunk) {
|
|
194
|
+
return encodeFrame(FrameType.CHUNK, streamId, chunk);
|
|
195
|
+
}
|
|
196
|
+
function encodeEndFrame(streamId) {
|
|
197
|
+
return encodeFrame(FrameType.END, streamId, EMPTY_PAYLOAD);
|
|
198
|
+
}
|
|
199
|
+
function encodeErrorFrame(streamId, error) {
|
|
200
|
+
const message = error instanceof Error ? error.message : String(error ?? "Unknown error");
|
|
201
|
+
return encodeFrame(FrameType.ERROR, streamId, textEncoder.encode(message));
|
|
202
|
+
}
|
|
203
|
+
function createMultiplexedStream(jsonStream, rawStreams, lateStreamSource) {
|
|
204
|
+
let controller;
|
|
205
|
+
let cancelled = false;
|
|
206
|
+
const readers = [];
|
|
207
|
+
const enqueue = (frame) => {
|
|
208
|
+
if (cancelled) return false;
|
|
209
|
+
try {
|
|
210
|
+
controller.enqueue(frame);
|
|
211
|
+
return true;
|
|
212
|
+
} catch {
|
|
213
|
+
return false;
|
|
214
|
+
}
|
|
215
|
+
};
|
|
216
|
+
const errorOutput = (error) => {
|
|
217
|
+
if (cancelled) return;
|
|
218
|
+
cancelled = true;
|
|
219
|
+
try {
|
|
220
|
+
controller.error(error);
|
|
221
|
+
} catch {
|
|
222
|
+
}
|
|
223
|
+
for (const reader of readers) reader.cancel().catch(() => {
|
|
224
|
+
});
|
|
225
|
+
};
|
|
226
|
+
async function pumpRawStream(streamId, stream) {
|
|
227
|
+
const reader = stream.getReader();
|
|
228
|
+
readers.push(reader);
|
|
229
|
+
try {
|
|
230
|
+
while (!cancelled) {
|
|
231
|
+
const { done, value } = await reader.read();
|
|
232
|
+
if (done) {
|
|
233
|
+
enqueue(encodeEndFrame(streamId));
|
|
234
|
+
return;
|
|
235
|
+
}
|
|
236
|
+
if (!enqueue(encodeChunkFrame(streamId, value))) return;
|
|
237
|
+
}
|
|
238
|
+
} catch (error) {
|
|
239
|
+
enqueue(encodeErrorFrame(streamId, error));
|
|
240
|
+
} finally {
|
|
241
|
+
reader.releaseLock();
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
async function pumpJSON() {
|
|
245
|
+
const reader = jsonStream.getReader();
|
|
246
|
+
readers.push(reader);
|
|
247
|
+
try {
|
|
248
|
+
while (!cancelled) {
|
|
249
|
+
const { done, value } = await reader.read();
|
|
250
|
+
if (done) return;
|
|
251
|
+
if (!enqueue(encodeJSONFrame(value))) return;
|
|
252
|
+
}
|
|
253
|
+
} catch (error) {
|
|
254
|
+
errorOutput(error);
|
|
255
|
+
throw error;
|
|
256
|
+
} finally {
|
|
257
|
+
reader.releaseLock();
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
async function pumpLateStreams() {
|
|
261
|
+
if (!lateStreamSource) return [];
|
|
262
|
+
const lateStreamPumps = [];
|
|
263
|
+
const reader = lateStreamSource.getReader();
|
|
264
|
+
readers.push(reader);
|
|
265
|
+
try {
|
|
266
|
+
while (!cancelled) {
|
|
267
|
+
const { done, value } = await reader.read();
|
|
268
|
+
if (done) break;
|
|
269
|
+
lateStreamPumps.push(pumpRawStream(value.id, value.stream));
|
|
270
|
+
}
|
|
271
|
+
} finally {
|
|
272
|
+
reader.releaseLock();
|
|
273
|
+
}
|
|
274
|
+
return lateStreamPumps;
|
|
275
|
+
}
|
|
276
|
+
return new ReadableStream({
|
|
277
|
+
async start(ctrl) {
|
|
278
|
+
controller = ctrl;
|
|
279
|
+
const pumps = [pumpJSON()];
|
|
280
|
+
for (const [streamId, stream] of rawStreams) pumps.push(pumpRawStream(streamId, stream));
|
|
281
|
+
if (lateStreamSource) pumps.push(pumpLateStreams());
|
|
282
|
+
try {
|
|
283
|
+
const latePumps = (await Promise.all(pumps)).find(Array.isArray);
|
|
284
|
+
if (latePumps && latePumps.length > 0) await Promise.all(latePumps);
|
|
285
|
+
if (!cancelled) try {
|
|
286
|
+
controller.close();
|
|
287
|
+
} catch {
|
|
288
|
+
}
|
|
289
|
+
} catch {
|
|
290
|
+
}
|
|
291
|
+
},
|
|
292
|
+
cancel() {
|
|
293
|
+
cancelled = true;
|
|
294
|
+
for (const reader of readers) reader.cancel().catch(() => {
|
|
295
|
+
});
|
|
296
|
+
readers.length = 0;
|
|
297
|
+
}
|
|
298
|
+
});
|
|
299
|
+
}
|
|
300
|
+
var serovalPlugins = void 0;
|
|
301
|
+
var FORM_DATA_CONTENT_TYPES = ["multipart/form-data", "application/x-www-form-urlencoded"];
|
|
302
|
+
var MAX_PAYLOAD_SIZE = 1e6;
|
|
303
|
+
var handleServerAction = async ({ request, context, serverFnId }) => {
|
|
304
|
+
const methodUpper = request.method.toUpperCase();
|
|
305
|
+
const url = new URL(request.url);
|
|
306
|
+
const action = await getServerFnById(serverFnId);
|
|
307
|
+
if (action.method && methodUpper !== action.method) return new Response(`expected ${action.method} method. Got ${methodUpper}`, {
|
|
308
|
+
status: 405,
|
|
309
|
+
headers: { Allow: action.method }
|
|
310
|
+
});
|
|
311
|
+
const isServerFn = request.headers.get("x-tsr-serverFn") === "true";
|
|
312
|
+
if (!serovalPlugins) serovalPlugins = getDefaultSerovalPlugins();
|
|
313
|
+
const contentType = request.headers.get("Content-Type");
|
|
314
|
+
function parsePayload(payload) {
|
|
315
|
+
return Pu(payload, { plugins: serovalPlugins });
|
|
316
|
+
}
|
|
317
|
+
return await (async () => {
|
|
318
|
+
try {
|
|
319
|
+
let serializeResult = function(res2) {
|
|
320
|
+
let nonStreamingBody = void 0;
|
|
321
|
+
const alsResponse = getResponse();
|
|
322
|
+
if (res2 !== void 0) {
|
|
323
|
+
const rawStreams = /* @__PURE__ */ new Map();
|
|
324
|
+
let initialPhase = true;
|
|
325
|
+
let lateStreamWriter;
|
|
326
|
+
let lateStreamReadable = void 0;
|
|
327
|
+
const pendingLateStreams = [];
|
|
328
|
+
const plugins = [createRawStreamRPCPlugin((id, stream) => {
|
|
329
|
+
if (initialPhase) {
|
|
330
|
+
rawStreams.set(id, stream);
|
|
331
|
+
return;
|
|
332
|
+
}
|
|
333
|
+
if (lateStreamWriter) {
|
|
334
|
+
lateStreamWriter.write({
|
|
335
|
+
id,
|
|
336
|
+
stream
|
|
337
|
+
}).catch(() => {
|
|
338
|
+
});
|
|
339
|
+
return;
|
|
340
|
+
}
|
|
341
|
+
pendingLateStreams.push({
|
|
342
|
+
id,
|
|
343
|
+
stream
|
|
344
|
+
});
|
|
345
|
+
}), ...serovalPlugins || []];
|
|
346
|
+
let done = false;
|
|
347
|
+
const callbacks = {
|
|
348
|
+
onParse: (value) => {
|
|
349
|
+
nonStreamingBody = value;
|
|
350
|
+
},
|
|
351
|
+
onDone: () => {
|
|
352
|
+
done = true;
|
|
353
|
+
},
|
|
354
|
+
onError: (error) => {
|
|
355
|
+
throw error;
|
|
356
|
+
}
|
|
357
|
+
};
|
|
358
|
+
iu(res2, {
|
|
359
|
+
refs: /* @__PURE__ */ new Map(),
|
|
360
|
+
plugins,
|
|
361
|
+
onParse(value) {
|
|
362
|
+
callbacks.onParse(value);
|
|
363
|
+
},
|
|
364
|
+
onDone() {
|
|
365
|
+
callbacks.onDone();
|
|
366
|
+
},
|
|
367
|
+
onError: (error) => {
|
|
368
|
+
callbacks.onError(error);
|
|
369
|
+
}
|
|
370
|
+
});
|
|
371
|
+
initialPhase = false;
|
|
372
|
+
if (done && rawStreams.size === 0) return new Response(nonStreamingBody ? JSON.stringify(nonStreamingBody) : void 0, {
|
|
373
|
+
status: alsResponse.status,
|
|
374
|
+
statusText: alsResponse.statusText,
|
|
375
|
+
headers: {
|
|
376
|
+
"Content-Type": "application/json",
|
|
377
|
+
[X_TSS_SERIALIZED]: "true"
|
|
378
|
+
}
|
|
379
|
+
});
|
|
380
|
+
const { readable, writable } = new TransformStream();
|
|
381
|
+
lateStreamReadable = readable;
|
|
382
|
+
lateStreamWriter = writable.getWriter();
|
|
383
|
+
for (const registration of pendingLateStreams) lateStreamWriter.write(registration).catch(() => {
|
|
384
|
+
});
|
|
385
|
+
pendingLateStreams.length = 0;
|
|
386
|
+
const multiplexedStream = createMultiplexedStream(new ReadableStream({
|
|
387
|
+
start(controller) {
|
|
388
|
+
callbacks.onParse = (value) => {
|
|
389
|
+
controller.enqueue(JSON.stringify(value) + "\n");
|
|
390
|
+
};
|
|
391
|
+
callbacks.onDone = () => {
|
|
392
|
+
try {
|
|
393
|
+
controller.close();
|
|
394
|
+
} catch {
|
|
395
|
+
}
|
|
396
|
+
lateStreamWriter?.close().catch(() => {
|
|
397
|
+
}).finally(() => {
|
|
398
|
+
lateStreamWriter = void 0;
|
|
399
|
+
});
|
|
400
|
+
};
|
|
401
|
+
callbacks.onError = (error) => {
|
|
402
|
+
controller.error(error);
|
|
403
|
+
lateStreamWriter?.abort(error).catch(() => {
|
|
404
|
+
}).finally(() => {
|
|
405
|
+
lateStreamWriter = void 0;
|
|
406
|
+
});
|
|
407
|
+
};
|
|
408
|
+
if (nonStreamingBody !== void 0) callbacks.onParse(nonStreamingBody);
|
|
409
|
+
if (done) callbacks.onDone();
|
|
410
|
+
},
|
|
411
|
+
cancel() {
|
|
412
|
+
lateStreamWriter?.abort().catch(() => {
|
|
413
|
+
});
|
|
414
|
+
lateStreamWriter = void 0;
|
|
415
|
+
}
|
|
416
|
+
}), rawStreams, lateStreamReadable);
|
|
417
|
+
return new Response(multiplexedStream, {
|
|
418
|
+
status: alsResponse.status,
|
|
419
|
+
statusText: alsResponse.statusText,
|
|
420
|
+
headers: {
|
|
421
|
+
"Content-Type": TSS_CONTENT_TYPE_FRAMED_VERSIONED,
|
|
422
|
+
[X_TSS_SERIALIZED]: "true"
|
|
423
|
+
}
|
|
424
|
+
});
|
|
425
|
+
}
|
|
426
|
+
return new Response(void 0, {
|
|
427
|
+
status: alsResponse.status,
|
|
428
|
+
statusText: alsResponse.statusText
|
|
429
|
+
});
|
|
430
|
+
};
|
|
431
|
+
let res = await (async () => {
|
|
432
|
+
if (FORM_DATA_CONTENT_TYPES.some((type) => contentType && contentType.includes(type))) {
|
|
433
|
+
if (methodUpper === "GET") {
|
|
434
|
+
if (false) ;
|
|
435
|
+
invariant();
|
|
436
|
+
}
|
|
437
|
+
const formData = await request.formData();
|
|
438
|
+
const serializedContext = formData.get(TSS_FORMDATA_CONTEXT);
|
|
439
|
+
formData.delete(TSS_FORMDATA_CONTEXT);
|
|
440
|
+
const params = {
|
|
441
|
+
context,
|
|
442
|
+
data: formData,
|
|
443
|
+
method: methodUpper
|
|
444
|
+
};
|
|
445
|
+
if (typeof serializedContext === "string") try {
|
|
446
|
+
const deserializedContext = Pu(JSON.parse(serializedContext), { plugins: serovalPlugins });
|
|
447
|
+
if (typeof deserializedContext === "object" && deserializedContext) params.context = safeObjectMerge(deserializedContext, context);
|
|
448
|
+
} catch (e) {
|
|
449
|
+
if (false) ;
|
|
450
|
+
}
|
|
451
|
+
return await action(params);
|
|
452
|
+
}
|
|
453
|
+
if (methodUpper === "GET") {
|
|
454
|
+
const payloadParam = url.searchParams.get("payload");
|
|
455
|
+
if (payloadParam && payloadParam.length > MAX_PAYLOAD_SIZE) throw new Error("Payload too large");
|
|
456
|
+
const payload2 = payloadParam ? parsePayload(JSON.parse(payloadParam)) : {};
|
|
457
|
+
payload2.context = safeObjectMerge(payload2.context, context);
|
|
458
|
+
payload2.method = methodUpper;
|
|
459
|
+
return await action(payload2);
|
|
460
|
+
}
|
|
461
|
+
let jsonPayload;
|
|
462
|
+
if (contentType?.includes("application/json")) jsonPayload = await request.json();
|
|
463
|
+
const payload = jsonPayload ? parsePayload(jsonPayload) : {};
|
|
464
|
+
payload.context = safeObjectMerge(payload.context, context);
|
|
465
|
+
payload.method = methodUpper;
|
|
466
|
+
return await action(payload);
|
|
467
|
+
})();
|
|
468
|
+
const unwrapped = res.result || res.error;
|
|
469
|
+
if (isNotFound(res)) res = isNotFoundResponse(res);
|
|
470
|
+
if (!isServerFn) return unwrapped;
|
|
471
|
+
if (unwrapped instanceof Response) {
|
|
472
|
+
if (isRedirect(unwrapped)) return unwrapped;
|
|
473
|
+
unwrapped.headers.set(X_TSS_RAW_RESPONSE, "true");
|
|
474
|
+
return unwrapped;
|
|
475
|
+
}
|
|
476
|
+
return serializeResult(res);
|
|
477
|
+
} catch (error) {
|
|
478
|
+
if (error instanceof Response) return error;
|
|
479
|
+
if (isNotFound(error)) return isNotFoundResponse(error);
|
|
480
|
+
console.info();
|
|
481
|
+
console.info("Server Fn Error!");
|
|
482
|
+
console.info();
|
|
483
|
+
console.error(error);
|
|
484
|
+
console.info();
|
|
485
|
+
const serializedError = JSON.stringify(await Promise.resolve(su(error, {
|
|
486
|
+
refs: /* @__PURE__ */ new Map(),
|
|
487
|
+
plugins: serovalPlugins
|
|
488
|
+
})));
|
|
489
|
+
const response = getResponse();
|
|
490
|
+
return new Response(serializedError, {
|
|
491
|
+
status: response.status ?? 500,
|
|
492
|
+
statusText: response.statusText,
|
|
493
|
+
headers: {
|
|
494
|
+
"Content-Type": "application/json",
|
|
495
|
+
[X_TSS_SERIALIZED]: "true"
|
|
496
|
+
}
|
|
497
|
+
});
|
|
498
|
+
}
|
|
499
|
+
})();
|
|
500
|
+
};
|
|
501
|
+
function isNotFoundResponse(error) {
|
|
502
|
+
const { headers, ...rest } = error;
|
|
503
|
+
return new Response(JSON.stringify(rest), {
|
|
504
|
+
status: 404,
|
|
505
|
+
headers: {
|
|
506
|
+
"Content-Type": "application/json",
|
|
507
|
+
...headers || {}
|
|
508
|
+
}
|
|
509
|
+
});
|
|
510
|
+
}
|
|
511
|
+
var LINK_PARAM_TOKEN_RE = /^[!#$%&'*+\-.^_`|~0-9A-Za-z]+$/;
|
|
512
|
+
var PRELOAD_AS_VALUES = /* @__PURE__ */ new Set([
|
|
513
|
+
"fetch",
|
|
514
|
+
"font",
|
|
515
|
+
"image",
|
|
516
|
+
"script",
|
|
517
|
+
"style",
|
|
518
|
+
"track"
|
|
519
|
+
]);
|
|
520
|
+
function buildLinkParam(name, value) {
|
|
521
|
+
if (value === void 0) return name;
|
|
522
|
+
if (LINK_PARAM_TOKEN_RE.test(value)) return `${name}=${value}`;
|
|
523
|
+
return `${name}=${JSON.stringify(value)}`;
|
|
524
|
+
}
|
|
525
|
+
function serializeEarlyHint(hint) {
|
|
526
|
+
const parts = [`<${hint.href}>`, buildLinkParam("rel", hint.rel)];
|
|
527
|
+
if (hint.as) parts.push(buildLinkParam("as", hint.as));
|
|
528
|
+
if (hint.crossOrigin !== void 0) parts.push(buildLinkParam("crossorigin", hint.crossOrigin || void 0));
|
|
529
|
+
if (hint.type) parts.push(buildLinkParam("type", hint.type));
|
|
530
|
+
if (hint.integrity) parts.push(buildLinkParam("integrity", hint.integrity));
|
|
531
|
+
if (hint.referrerPolicy) parts.push(buildLinkParam("referrerpolicy", hint.referrerPolicy));
|
|
532
|
+
if (hint.fetchPriority) parts.push(buildLinkParam("fetchpriority", hint.fetchPriority));
|
|
533
|
+
return parts.join("; ");
|
|
534
|
+
}
|
|
535
|
+
function getStringAttr(attrs, name, fallbackName) {
|
|
536
|
+
const value = attrs?.[name] ?? (fallbackName ? attrs?.[fallbackName] : void 0);
|
|
537
|
+
return typeof value === "string" ? value : void 0;
|
|
538
|
+
}
|
|
539
|
+
function getPreloadAs(attrs) {
|
|
540
|
+
const as = getStringAttr(attrs, "as");
|
|
541
|
+
return as && PRELOAD_AS_VALUES.has(as) ? as : void 0;
|
|
542
|
+
}
|
|
543
|
+
function addEarlyHintFetchAttrs(hint, attrs) {
|
|
544
|
+
const crossOrigin = getStringAttr(attrs, "crossOrigin", "crossorigin");
|
|
545
|
+
const type = getStringAttr(attrs, "type");
|
|
546
|
+
const integrity = getStringAttr(attrs, "integrity");
|
|
547
|
+
const referrerPolicy = getStringAttr(attrs, "referrerPolicy", "referrerpolicy");
|
|
548
|
+
const fetchPriority = getStringAttr(attrs, "fetchPriority", "fetchpriority");
|
|
549
|
+
if (crossOrigin !== void 0) hint.crossOrigin = crossOrigin;
|
|
550
|
+
if (type) hint.type = type;
|
|
551
|
+
if (integrity) hint.integrity = integrity;
|
|
552
|
+
if (referrerPolicy) hint.referrerPolicy = referrerPolicy;
|
|
553
|
+
if (fetchPriority) hint.fetchPriority = fetchPriority;
|
|
554
|
+
}
|
|
555
|
+
function linkAttrsToEarlyHint(attrs) {
|
|
556
|
+
const href = getStringAttr(attrs, "href");
|
|
557
|
+
const rel = getStringAttr(attrs, "rel");
|
|
558
|
+
if (!href || !rel) return void 0;
|
|
559
|
+
const relTokens = rel.split(/\s+/);
|
|
560
|
+
let hintRel;
|
|
561
|
+
let hintAs;
|
|
562
|
+
if (relTokens.includes("modulepreload")) {
|
|
563
|
+
hintRel = "modulepreload";
|
|
564
|
+
hintAs = "script";
|
|
565
|
+
} else if (relTokens.includes("stylesheet")) {
|
|
566
|
+
hintRel = "preload";
|
|
567
|
+
hintAs = "style";
|
|
568
|
+
} else if (relTokens.includes("preload")) {
|
|
569
|
+
hintAs = getPreloadAs(attrs);
|
|
570
|
+
if (!hintAs) return void 0;
|
|
571
|
+
hintRel = "preload";
|
|
572
|
+
} else if (relTokens.includes("preconnect")) {
|
|
573
|
+
hintRel = "preconnect";
|
|
574
|
+
hintAs = void 0;
|
|
575
|
+
} else if (relTokens.includes("dns-prefetch")) {
|
|
576
|
+
hintRel = "dns-prefetch";
|
|
577
|
+
hintAs = void 0;
|
|
578
|
+
}
|
|
579
|
+
if (!hintRel) return void 0;
|
|
580
|
+
const hint = {
|
|
581
|
+
href,
|
|
582
|
+
rel: hintRel
|
|
583
|
+
};
|
|
584
|
+
if (hintAs) hint.as = hintAs;
|
|
585
|
+
addEarlyHintFetchAttrs(hint, attrs);
|
|
586
|
+
return hint;
|
|
587
|
+
}
|
|
588
|
+
function collectStaticHintsFromManifest(manifest2, matchedRoutes) {
|
|
589
|
+
const hints = [];
|
|
590
|
+
for (const route of matchedRoutes) {
|
|
591
|
+
const routeManifest = manifest2.routes[route.id];
|
|
592
|
+
if (!routeManifest) continue;
|
|
593
|
+
for (const link of routeManifest.preloads ?? []) {
|
|
594
|
+
const { href, crossOrigin } = resolveManifestAssetLink(link);
|
|
595
|
+
const hint = {
|
|
596
|
+
href,
|
|
597
|
+
rel: "modulepreload",
|
|
598
|
+
as: "script"
|
|
599
|
+
};
|
|
600
|
+
if (crossOrigin !== void 0) hint.crossOrigin = crossOrigin;
|
|
601
|
+
hints.push(hint);
|
|
602
|
+
}
|
|
603
|
+
for (const asset of routeManifest.assets ?? []) {
|
|
604
|
+
if (asset.tag !== "link") continue;
|
|
605
|
+
const stylesheetHref = getStylesheetHref(asset);
|
|
606
|
+
if (stylesheetHref) {
|
|
607
|
+
if (manifest2.inlineCss?.styles[stylesheetHref] !== void 0) continue;
|
|
608
|
+
const hint2 = {
|
|
609
|
+
href: stylesheetHref,
|
|
610
|
+
rel: "preload",
|
|
611
|
+
as: "style"
|
|
612
|
+
};
|
|
613
|
+
addEarlyHintFetchAttrs(hint2, asset.attrs);
|
|
614
|
+
hints.push(hint2);
|
|
615
|
+
continue;
|
|
616
|
+
}
|
|
617
|
+
const hint = linkAttrsToEarlyHint(asset.attrs);
|
|
618
|
+
if (hint) hints.push(hint);
|
|
619
|
+
}
|
|
620
|
+
}
|
|
621
|
+
return hints;
|
|
622
|
+
}
|
|
623
|
+
function collectDynamicHintsFromMatches(matches) {
|
|
624
|
+
const hints = [];
|
|
625
|
+
for (const match of matches) {
|
|
626
|
+
const links = match.links;
|
|
627
|
+
if (!Array.isArray(links)) continue;
|
|
628
|
+
for (const link of links) {
|
|
629
|
+
const hint = linkAttrsToEarlyHint(link);
|
|
630
|
+
if (hint) hints.push(hint);
|
|
631
|
+
}
|
|
632
|
+
}
|
|
633
|
+
return hints;
|
|
634
|
+
}
|
|
635
|
+
function createEarlyHintsEvent(opts) {
|
|
636
|
+
const nextHints = [];
|
|
637
|
+
const nextLinks = [];
|
|
638
|
+
for (const hint of opts.hints) {
|
|
639
|
+
const link = serializeEarlyHint(hint);
|
|
640
|
+
if (opts.sentLinks.has(link)) continue;
|
|
641
|
+
opts.sentLinks.add(link);
|
|
642
|
+
opts.sentHints.push(hint);
|
|
643
|
+
nextHints.push(hint);
|
|
644
|
+
nextLinks.push(link);
|
|
645
|
+
}
|
|
646
|
+
if (!nextHints.length && opts.phase !== "dynamic") return void 0;
|
|
647
|
+
return {
|
|
648
|
+
phase: opts.phase,
|
|
649
|
+
hints: nextHints,
|
|
650
|
+
links: nextLinks,
|
|
651
|
+
allHints: opts.sentHints.slice(),
|
|
652
|
+
allLinks: Array.from(opts.sentLinks)
|
|
653
|
+
};
|
|
654
|
+
}
|
|
655
|
+
function createResponseLinkHeaderEntries(opts) {
|
|
656
|
+
for (const hint of opts.hints) {
|
|
657
|
+
const link = serializeEarlyHint(hint);
|
|
658
|
+
if (opts.sentLinks.has(link)) continue;
|
|
659
|
+
opts.sentLinks.add(link);
|
|
660
|
+
opts.entries.push({
|
|
661
|
+
phase: opts.phase,
|
|
662
|
+
hint,
|
|
663
|
+
link
|
|
664
|
+
});
|
|
665
|
+
}
|
|
666
|
+
}
|
|
667
|
+
function getResponseLinkHeaderEntries(opts) {
|
|
668
|
+
if (!opts.filter) return opts.entries.map((entry) => entry.link);
|
|
669
|
+
try {
|
|
670
|
+
const links = [];
|
|
671
|
+
for (const entry of opts.entries) if (opts.filter(entry)) links.push(entry.link);
|
|
672
|
+
return links;
|
|
673
|
+
} catch (err) {
|
|
674
|
+
console.error("Error filtering response Link headers:", err);
|
|
675
|
+
return [];
|
|
676
|
+
}
|
|
677
|
+
}
|
|
678
|
+
function notifyEarlyHints(phase, event, onEarlyHints) {
|
|
679
|
+
try {
|
|
680
|
+
const result = onEarlyHints(event);
|
|
681
|
+
if (result) Promise.resolve(result).catch((err) => {
|
|
682
|
+
console.error(`Error sending ${phase} early hints:`, err);
|
|
683
|
+
});
|
|
684
|
+
} catch (err) {
|
|
685
|
+
console.error(`Error sending ${phase} early hints:`, err);
|
|
686
|
+
}
|
|
687
|
+
}
|
|
688
|
+
function getResponseLinkHeaderFilter(responseLinkHeader) {
|
|
689
|
+
if (typeof responseLinkHeader !== "object") return;
|
|
690
|
+
return responseLinkHeader.filter;
|
|
691
|
+
}
|
|
692
|
+
function appendResponseLinkHeaders(opts) {
|
|
693
|
+
for (const link of getResponseLinkHeaderEntries(opts)) opts.responseHeaders.append("Link", link);
|
|
694
|
+
}
|
|
695
|
+
function collectResponseLinkHeaderEntries(opts) {
|
|
696
|
+
for (let index = 0; index < opts.event.hints.length; index++) opts.entries.push({
|
|
697
|
+
phase: opts.phase,
|
|
698
|
+
hint: opts.event.hints[index],
|
|
699
|
+
link: opts.event.links[index]
|
|
700
|
+
});
|
|
701
|
+
}
|
|
702
|
+
function collectEarlyHintsPhase(opts) {
|
|
703
|
+
const event = opts.onEarlyHints ? createEarlyHintsEvent({
|
|
704
|
+
phase: opts.phase,
|
|
705
|
+
hints: opts.hints,
|
|
706
|
+
sentLinks: opts.sentLinks,
|
|
707
|
+
sentHints: opts.sentHints
|
|
708
|
+
}) : void 0;
|
|
709
|
+
if (event) notifyEarlyHints(opts.phase, event, opts.onEarlyHints);
|
|
710
|
+
if (!opts.responseLinkHeaderEntries) return;
|
|
711
|
+
if (event) {
|
|
712
|
+
collectResponseLinkHeaderEntries({
|
|
713
|
+
phase: opts.phase,
|
|
714
|
+
event,
|
|
715
|
+
entries: opts.responseLinkHeaderEntries
|
|
716
|
+
});
|
|
717
|
+
return;
|
|
718
|
+
}
|
|
719
|
+
createResponseLinkHeaderEntries({
|
|
720
|
+
phase: opts.phase,
|
|
721
|
+
hints: opts.hints,
|
|
722
|
+
sentLinks: opts.sentLinks,
|
|
723
|
+
entries: opts.responseLinkHeaderEntries
|
|
724
|
+
});
|
|
725
|
+
}
|
|
726
|
+
function createEarlyHintsCollector(opts) {
|
|
727
|
+
if (!opts?.onEarlyHints && !opts?.responseLinkHeader) return;
|
|
728
|
+
const sentLinks = /* @__PURE__ */ new Set();
|
|
729
|
+
const sentHints = opts.onEarlyHints ? new Array() : void 0;
|
|
730
|
+
const responseLinkHeaderEntries = opts.responseLinkHeader ? new Array() : void 0;
|
|
731
|
+
const responseLinkHeaderFilter = getResponseLinkHeaderFilter(opts.responseLinkHeader);
|
|
732
|
+
return {
|
|
733
|
+
collectStatic: ({ manifest: manifest2, matchedRoutes }) => {
|
|
734
|
+
if (!matchedRoutes?.length) return;
|
|
735
|
+
collectEarlyHintsPhase({
|
|
736
|
+
phase: "static",
|
|
737
|
+
hints: collectStaticHintsFromManifest(manifest2, matchedRoutes),
|
|
738
|
+
sentLinks,
|
|
739
|
+
sentHints,
|
|
740
|
+
onEarlyHints: opts.onEarlyHints,
|
|
741
|
+
responseLinkHeaderEntries
|
|
742
|
+
});
|
|
743
|
+
},
|
|
744
|
+
collectDynamic: (matches) => {
|
|
745
|
+
collectEarlyHintsPhase({
|
|
746
|
+
phase: "dynamic",
|
|
747
|
+
hints: collectDynamicHintsFromMatches(matches),
|
|
748
|
+
sentLinks,
|
|
749
|
+
sentHints,
|
|
750
|
+
onEarlyHints: opts.onEarlyHints,
|
|
751
|
+
responseLinkHeaderEntries
|
|
752
|
+
});
|
|
753
|
+
},
|
|
754
|
+
appendResponseHeaders: (headers) => {
|
|
755
|
+
if (!responseLinkHeaderEntries?.length) return;
|
|
756
|
+
appendResponseLinkHeaders({
|
|
757
|
+
responseHeaders: headers,
|
|
758
|
+
entries: responseLinkHeaderEntries,
|
|
759
|
+
filter: responseLinkHeaderFilter
|
|
760
|
+
});
|
|
761
|
+
}
|
|
762
|
+
};
|
|
763
|
+
}
|
|
764
|
+
function normalizeTransformAssetResult(result) {
|
|
765
|
+
if (typeof result === "string") return { href: result };
|
|
766
|
+
return result;
|
|
767
|
+
}
|
|
768
|
+
function escapeCssString(value) {
|
|
769
|
+
return value.replace(/\\/g, "\\\\").replace(/"/g, '\\"').replace(/\n/g, "\\a ").replace(/\r/g, "\\d ").replace(/\f/g, "\\c ");
|
|
770
|
+
}
|
|
771
|
+
async function transformInlineCssTemplate(options) {
|
|
772
|
+
const { strings, urls } = options.template;
|
|
773
|
+
if (strings.length !== urls.length + 1) throw new Error(`TanStack Start inlineCss template for ${options.stylesheetHref} is invalid`);
|
|
774
|
+
let css = strings[0];
|
|
775
|
+
for (let index = 0; index < urls.length; index++) {
|
|
776
|
+
const transformed = normalizeTransformAssetResult(await options.transformFn({
|
|
777
|
+
kind: "css-url",
|
|
778
|
+
url: urls[index],
|
|
779
|
+
stylesheetHref: options.stylesheetHref
|
|
780
|
+
}));
|
|
781
|
+
css += escapeCssString(transformed.href) + strings[index + 1];
|
|
782
|
+
}
|
|
783
|
+
return css;
|
|
784
|
+
}
|
|
785
|
+
async function transformInlineCssStyles(inlineCss, transformFn) {
|
|
786
|
+
const transformedStyles = {};
|
|
787
|
+
const transformedEntries = await Promise.all(Object.entries(inlineCss.styles).map(async ([stylesheetHref, css]) => {
|
|
788
|
+
const template = inlineCss.templates?.[stylesheetHref];
|
|
789
|
+
return [stylesheetHref, template ? await transformInlineCssTemplate({
|
|
790
|
+
stylesheetHref,
|
|
791
|
+
template,
|
|
792
|
+
transformFn
|
|
793
|
+
}) : css];
|
|
794
|
+
}));
|
|
795
|
+
for (const [stylesheetHref, css] of transformedEntries) transformedStyles[stylesheetHref] = css;
|
|
796
|
+
return {
|
|
797
|
+
styles: transformedStyles,
|
|
798
|
+
...inlineCss.templates ? { templates: inlineCss.templates } : {}
|
|
799
|
+
};
|
|
800
|
+
}
|
|
801
|
+
function resolveTransformAssetsCrossOrigin(config, kind) {
|
|
802
|
+
if (!config) return void 0;
|
|
803
|
+
if (typeof config === "string") return config;
|
|
804
|
+
return config[kind];
|
|
805
|
+
}
|
|
806
|
+
function isObjectShorthand(transform) {
|
|
807
|
+
return "prefix" in transform;
|
|
808
|
+
}
|
|
809
|
+
function resolveTransformAssetsConfig(transform) {
|
|
810
|
+
if (typeof transform === "string") {
|
|
811
|
+
const prefix = transform;
|
|
812
|
+
return {
|
|
813
|
+
type: "transform",
|
|
814
|
+
transformFn: ({ url }) => ({ href: `${prefix}${url}` }),
|
|
815
|
+
cache: true
|
|
816
|
+
};
|
|
817
|
+
}
|
|
818
|
+
if (typeof transform === "function") return {
|
|
819
|
+
type: "transform",
|
|
820
|
+
transformFn: transform,
|
|
821
|
+
cache: true
|
|
822
|
+
};
|
|
823
|
+
if (isObjectShorthand(transform)) {
|
|
824
|
+
const { prefix, crossOrigin } = transform;
|
|
825
|
+
return {
|
|
826
|
+
type: "transform",
|
|
827
|
+
transformFn: ({ url, kind }) => {
|
|
828
|
+
const href = `${prefix}${url}`;
|
|
829
|
+
if (kind === "clientEntry" || kind === "css-url") return { href };
|
|
830
|
+
const co = resolveTransformAssetsCrossOrigin(crossOrigin, kind);
|
|
831
|
+
return co ? {
|
|
832
|
+
href,
|
|
833
|
+
crossOrigin: co
|
|
834
|
+
} : { href };
|
|
835
|
+
},
|
|
836
|
+
cache: true
|
|
837
|
+
};
|
|
838
|
+
}
|
|
839
|
+
if ("createTransform" in transform && transform.createTransform) return {
|
|
840
|
+
type: "createTransform",
|
|
841
|
+
createTransform: transform.createTransform,
|
|
842
|
+
cache: transform.cache !== false
|
|
843
|
+
};
|
|
844
|
+
return {
|
|
845
|
+
type: "transform",
|
|
846
|
+
transformFn: typeof transform.transform === "string" ? (({ url }) => ({ href: `${transform.transform}${url}` })) : transform.transform,
|
|
847
|
+
cache: transform.cache !== false
|
|
848
|
+
};
|
|
849
|
+
}
|
|
850
|
+
function buildClientEntryScriptTag(clientEntry, injectedHeadScripts) {
|
|
851
|
+
let script = `import(${JSON.stringify(clientEntry)})`;
|
|
852
|
+
if (injectedHeadScripts) script = `${injectedHeadScripts};${script}`;
|
|
853
|
+
return {
|
|
854
|
+
tag: "script",
|
|
855
|
+
attrs: {
|
|
856
|
+
type: "module",
|
|
857
|
+
async: true
|
|
858
|
+
},
|
|
859
|
+
children: script
|
|
860
|
+
};
|
|
861
|
+
}
|
|
862
|
+
function assignManifestAssetLink(link, next) {
|
|
863
|
+
if (typeof link === "string") return next.crossOrigin ? next : next.href;
|
|
864
|
+
return next.crossOrigin ? next : { href: next.href };
|
|
865
|
+
}
|
|
866
|
+
async function transformManifestAssets(source, transformFn, _opts) {
|
|
867
|
+
const manifest2 = structuredClone(source.manifest);
|
|
868
|
+
if (!(_opts?.inlineCss !== false)) delete manifest2.inlineCss;
|
|
869
|
+
else if (manifest2.inlineCss) manifest2.inlineCss = await transformInlineCssStyles(manifest2.inlineCss, transformFn);
|
|
870
|
+
for (const route of Object.values(manifest2.routes)) {
|
|
871
|
+
if (route.preloads) route.preloads = await Promise.all(route.preloads.map(async (link) => {
|
|
872
|
+
const result = normalizeTransformAssetResult(await transformFn({
|
|
873
|
+
url: resolveManifestAssetLink(link).href,
|
|
874
|
+
kind: "modulepreload"
|
|
875
|
+
}));
|
|
876
|
+
return assignManifestAssetLink(link, {
|
|
877
|
+
href: result.href,
|
|
878
|
+
crossOrigin: result.crossOrigin
|
|
879
|
+
});
|
|
880
|
+
}));
|
|
881
|
+
if (route.assets && !manifest2.inlineCss) {
|
|
882
|
+
for (const asset of route.assets) if (asset.tag === "link" && asset.attrs?.href) {
|
|
883
|
+
const rel = asset.attrs.rel;
|
|
884
|
+
if (!(typeof rel === "string" ? rel.split(/\s+/) : []).includes("stylesheet")) continue;
|
|
885
|
+
const result = normalizeTransformAssetResult(await transformFn({
|
|
886
|
+
url: asset.attrs.href,
|
|
887
|
+
kind: "stylesheet"
|
|
888
|
+
}));
|
|
889
|
+
asset.attrs.href = result.href;
|
|
890
|
+
if (result.crossOrigin) asset.attrs.crossOrigin = result.crossOrigin;
|
|
891
|
+
else delete asset.attrs.crossOrigin;
|
|
892
|
+
}
|
|
893
|
+
}
|
|
894
|
+
}
|
|
895
|
+
const transformedClientEntry = normalizeTransformAssetResult(await transformFn({
|
|
896
|
+
url: source.clientEntry,
|
|
897
|
+
kind: "clientEntry"
|
|
898
|
+
}));
|
|
899
|
+
const rootRoute = manifest2.routes[rootRouteId] = manifest2.routes[rootRouteId] || {};
|
|
900
|
+
rootRoute.assets = rootRoute.assets || [];
|
|
901
|
+
rootRoute.assets.push(buildClientEntryScriptTag(transformedClientEntry.href, source.injectedHeadScripts));
|
|
902
|
+
return manifest2;
|
|
903
|
+
}
|
|
904
|
+
function buildManifestWithClientEntry(source, opts) {
|
|
905
|
+
const scriptTag = buildClientEntryScriptTag(source.clientEntry, source.injectedHeadScripts);
|
|
906
|
+
const baseRootRoute = source.manifest.routes[rootRouteId];
|
|
907
|
+
const routes = {
|
|
908
|
+
...source.manifest.routes,
|
|
909
|
+
[rootRouteId]: {
|
|
910
|
+
...baseRootRoute,
|
|
911
|
+
assets: [...baseRootRoute?.assets || [], scriptTag]
|
|
912
|
+
}
|
|
913
|
+
};
|
|
914
|
+
return {
|
|
915
|
+
...opts?.inlineCss === false ? {} : { inlineCss: structuredClone(source.manifest.inlineCss) },
|
|
916
|
+
routes
|
|
917
|
+
};
|
|
918
|
+
}
|
|
919
|
+
function getStaticHandlerInlineCssDefault(handlerInlineCss) {
|
|
920
|
+
if (typeof handlerInlineCss === "function") return;
|
|
921
|
+
return handlerInlineCss ?? true;
|
|
922
|
+
}
|
|
923
|
+
async function resolveInlineCssForRequest(opts) {
|
|
924
|
+
if (opts.requestInlineCss !== void 0) return opts.requestInlineCss;
|
|
925
|
+
if (typeof opts.handlerInlineCss === "function") return await opts.handlerInlineCss({ request: opts.request });
|
|
926
|
+
return opts.handlerInlineCss ?? true;
|
|
927
|
+
}
|
|
928
|
+
function createCachedBaseManifestLoader(loadBaseManifest) {
|
|
929
|
+
let baseManifestPromise;
|
|
930
|
+
return () => {
|
|
931
|
+
if (!baseManifestPromise) baseManifestPromise = loadBaseManifest().catch((error) => {
|
|
932
|
+
baseManifestPromise = void 0;
|
|
933
|
+
throw error;
|
|
934
|
+
});
|
|
935
|
+
return baseManifestPromise;
|
|
936
|
+
};
|
|
937
|
+
}
|
|
938
|
+
function createFinalManifestTransformResolver(transformAssets, opts) {
|
|
939
|
+
const transformConfig = transformAssets !== void 0 ? resolveTransformAssetsConfig(transformAssets) : void 0;
|
|
940
|
+
const cache = transformConfig ? transformConfig.cache : true;
|
|
941
|
+
const warmup = !!transformAssets && typeof transformAssets === "object" && "warmup" in transformAssets && transformAssets.warmup === true;
|
|
942
|
+
let cachedCreateTransformPromise;
|
|
943
|
+
const clearCachedCreateTransform = () => {
|
|
944
|
+
cachedCreateTransformPromise = void 0;
|
|
945
|
+
};
|
|
946
|
+
return {
|
|
947
|
+
cache,
|
|
948
|
+
warmup,
|
|
949
|
+
clearCachedCreateTransform,
|
|
950
|
+
getTransformFn: async (ctx) => {
|
|
951
|
+
if (!transformConfig) return void 0;
|
|
952
|
+
if (transformConfig.type !== "createTransform") return transformConfig.transformFn;
|
|
953
|
+
if (!cache || false) return transformConfig.createTransform(ctx);
|
|
954
|
+
if (!cachedCreateTransformPromise) cachedCreateTransformPromise = Promise.resolve(transformConfig.createTransform(ctx)).catch((error) => {
|
|
955
|
+
clearCachedCreateTransform();
|
|
956
|
+
throw error;
|
|
957
|
+
});
|
|
958
|
+
return cachedCreateTransformPromise;
|
|
959
|
+
}
|
|
960
|
+
};
|
|
961
|
+
}
|
|
962
|
+
function createFinalManifestResolver(opts) {
|
|
963
|
+
const finalManifestCache = /* @__PURE__ */ new Map();
|
|
964
|
+
const transformResolver = createFinalManifestTransformResolver(opts.transformAssets);
|
|
965
|
+
const handlerDefaultInlineCss = getStaticHandlerInlineCssDefault(opts.inlineCss);
|
|
966
|
+
const getRequestManifestOptions = async (requestOpts) => {
|
|
967
|
+
const transformFn = await transformResolver.getTransformFn({
|
|
968
|
+
warmup: false,
|
|
969
|
+
request: requestOpts.request
|
|
970
|
+
});
|
|
971
|
+
const inlineCss = await resolveInlineCssForRequest({
|
|
972
|
+
request: requestOpts.request,
|
|
973
|
+
handlerInlineCss: opts.inlineCss,
|
|
974
|
+
requestInlineCss: requestOpts.requestInlineCss
|
|
975
|
+
});
|
|
976
|
+
return {
|
|
977
|
+
getBaseManifest: requestOpts.getBaseManifest,
|
|
978
|
+
transformFn,
|
|
979
|
+
cache: transformResolver.cache,
|
|
980
|
+
inlineCss
|
|
981
|
+
};
|
|
982
|
+
};
|
|
983
|
+
const resolveRequest = async (requestOpts, cache) => {
|
|
984
|
+
return resolveFinalManifest({
|
|
985
|
+
...await getRequestManifestOptions(requestOpts),
|
|
986
|
+
finalManifestCache: cache
|
|
987
|
+
});
|
|
988
|
+
};
|
|
989
|
+
return {
|
|
990
|
+
warmup: ({ getBaseManifest: getBaseManifest2 }) => warmupFinalManifest({
|
|
991
|
+
enabled: transformResolver.warmup,
|
|
992
|
+
handlerDefaultInlineCss,
|
|
993
|
+
cache: transformResolver.cache,
|
|
994
|
+
finalManifestCache,
|
|
995
|
+
getBaseManifest: getBaseManifest2,
|
|
996
|
+
getTransformFn: () => transformResolver.getTransformFn({ warmup: true }),
|
|
997
|
+
onError: transformResolver.clearCachedCreateTransform
|
|
998
|
+
}),
|
|
999
|
+
resolveCached: (requestOpts) => resolveRequest(requestOpts, finalManifestCache),
|
|
1000
|
+
resolveUncached: (requestOpts) => resolveRequest(requestOpts, void 0)
|
|
1001
|
+
};
|
|
1002
|
+
}
|
|
1003
|
+
function getFinalManifestCacheKey(inlineCss) {
|
|
1004
|
+
return inlineCss ? "inline-css" : "linked-css";
|
|
1005
|
+
}
|
|
1006
|
+
function cacheFinalManifestPromise(cachedFinalManifestPromises, cacheKey, promise) {
|
|
1007
|
+
const cachedFinalManifestPromise = promise.catch((error) => {
|
|
1008
|
+
if (cachedFinalManifestPromises.get(cacheKey) === cachedFinalManifestPromise) cachedFinalManifestPromises.delete(cacheKey);
|
|
1009
|
+
throw error;
|
|
1010
|
+
});
|
|
1011
|
+
cachedFinalManifestPromises.set(cacheKey, cachedFinalManifestPromise);
|
|
1012
|
+
return cachedFinalManifestPromise;
|
|
1013
|
+
}
|
|
1014
|
+
function getOrCreateCachedFinalManifestPromise(cachedFinalManifestPromises, cacheKey, computeFinalManifest) {
|
|
1015
|
+
const cachedFinalManifestPromise = cachedFinalManifestPromises.get(cacheKey);
|
|
1016
|
+
if (cachedFinalManifestPromise) return cachedFinalManifestPromise;
|
|
1017
|
+
return cacheFinalManifestPromise(cachedFinalManifestPromises, cacheKey, Promise.resolve().then(computeFinalManifest));
|
|
1018
|
+
}
|
|
1019
|
+
async function buildFinalManifest(opts) {
|
|
1020
|
+
return opts.transformFn ? await transformManifestAssets(opts.base, opts.transformFn, { inlineCss: opts.inlineCss }) : buildManifestWithClientEntry(opts.base, { inlineCss: opts.inlineCss });
|
|
1021
|
+
}
|
|
1022
|
+
async function resolveFinalManifest(opts) {
|
|
1023
|
+
const computeFinalManifest = async () => {
|
|
1024
|
+
return buildFinalManifest({
|
|
1025
|
+
base: await opts.getBaseManifest(),
|
|
1026
|
+
transformFn: opts.transformFn,
|
|
1027
|
+
inlineCss: opts.inlineCss
|
|
1028
|
+
});
|
|
1029
|
+
};
|
|
1030
|
+
if (opts.finalManifestCache && (!opts.transformFn || opts.cache)) return getOrCreateCachedFinalManifestPromise(opts.finalManifestCache, getFinalManifestCacheKey(opts.inlineCss), computeFinalManifest);
|
|
1031
|
+
return computeFinalManifest();
|
|
1032
|
+
}
|
|
1033
|
+
function warmupFinalManifest(opts) {
|
|
1034
|
+
if (!opts.enabled || opts.handlerDefaultInlineCss === void 0 || !opts.cache) return;
|
|
1035
|
+
const inlineCss = opts.handlerDefaultInlineCss;
|
|
1036
|
+
const warmupPromise = getOrCreateCachedFinalManifestPromise(opts.finalManifestCache, getFinalManifestCacheKey(inlineCss), async () => {
|
|
1037
|
+
const [base, transformFn] = await Promise.all([opts.getBaseManifest(), opts.getTransformFn()]);
|
|
1038
|
+
return buildFinalManifest({
|
|
1039
|
+
base,
|
|
1040
|
+
transformFn,
|
|
1041
|
+
inlineCss
|
|
1042
|
+
});
|
|
1043
|
+
});
|
|
1044
|
+
if (opts.onError) warmupPromise.catch(opts.onError);
|
|
1045
|
+
return warmupPromise;
|
|
1046
|
+
}
|
|
1047
|
+
var ServerFunctionSerializationAdapter = createSerializationAdapter({
|
|
1048
|
+
key: "$TSS/serverfn",
|
|
1049
|
+
test: (v) => {
|
|
1050
|
+
if (typeof v !== "function") return false;
|
|
1051
|
+
if (!(TSS_SERVER_FUNCTION in v)) return false;
|
|
1052
|
+
return !!v[TSS_SERVER_FUNCTION];
|
|
1053
|
+
},
|
|
1054
|
+
toSerializable: ({ serverFnMeta }) => ({ functionId: serverFnMeta.id }),
|
|
1055
|
+
fromSerializable: ({ functionId }) => {
|
|
1056
|
+
const fn = async (opts, signal) => {
|
|
1057
|
+
return (await (await getServerFnById(functionId))(opts ?? {}, signal)).result;
|
|
1058
|
+
};
|
|
1059
|
+
return fn;
|
|
1060
|
+
}
|
|
1061
|
+
});
|
|
1062
|
+
function getStartResponseHeaders(opts) {
|
|
1063
|
+
return mergeHeaders({ "Content-Type": "text/html; charset=utf-8" }, ...opts.router.stores.matches.get().map((match) => {
|
|
1064
|
+
return match.headers;
|
|
1065
|
+
}));
|
|
1066
|
+
}
|
|
1067
|
+
var entriesPromise;
|
|
1068
|
+
var hasWarnedMissingCsrfMiddleware = false;
|
|
1069
|
+
var defaultCsrfMiddleware = createCsrfMiddleware({ filter: (ctx) => ctx.handlerType === "serverFn" });
|
|
1070
|
+
var getCachedBaseManifest = createCachedBaseManifestLoader(() => getStartManifest());
|
|
1071
|
+
var getProdBaseManifest = () => getCachedBaseManifest();
|
|
1072
|
+
var getBaseManifest = getProdBaseManifest;
|
|
1073
|
+
var createEarlyHintsForRequest = createEarlyHintsCollector;
|
|
1074
|
+
async function loadEntries() {
|
|
1075
|
+
const [routerEntry, startEntry, pluginAdapters] = await Promise.all([
|
|
1076
|
+
import("./vendor-tanstack-start-client-core-DoOKV2pA.js").then((n) => n.s),
|
|
1077
|
+
import("./vendor-tanstack-start-client-core-DoOKV2pA.js").then((n) => n.u),
|
|
1078
|
+
import("./vendor-tanstack-start-client-core-DoOKV2pA.js").then((n) => n._)
|
|
1079
|
+
]);
|
|
1080
|
+
return {
|
|
1081
|
+
routerEntry,
|
|
1082
|
+
startEntry,
|
|
1083
|
+
pluginAdapters
|
|
1084
|
+
};
|
|
1085
|
+
}
|
|
1086
|
+
function getEntries() {
|
|
1087
|
+
if (!entriesPromise) entriesPromise = loadEntries();
|
|
1088
|
+
return entriesPromise;
|
|
1089
|
+
}
|
|
1090
|
+
function warnMissingCsrfMiddlewareOnce() {
|
|
1091
|
+
if (hasWarnedMissingCsrfMiddleware) return;
|
|
1092
|
+
hasWarnedMissingCsrfMiddleware = true;
|
|
1093
|
+
console.warn(`TanStack Start server functions are not protected by the CSRF middleware.
|
|
1094
|
+
|
|
1095
|
+
Server functions are same-origin RPC endpoints and should be protected from cross-site requests.
|
|
1096
|
+
|
|
1097
|
+
Add the CSRF middleware in src/start.ts:
|
|
1098
|
+
|
|
1099
|
+
const csrfMiddleware = createCsrfMiddleware({
|
|
1100
|
+
filter: (ctx) => ctx.handlerType === 'serverFn',
|
|
1101
|
+
})
|
|
1102
|
+
|
|
1103
|
+
export const startInstance = createStart(() => ({
|
|
1104
|
+
requestMiddleware: [csrfMiddleware],
|
|
1105
|
+
}))
|
|
1106
|
+
|
|
1107
|
+
If you intentionally handle CSRF another way, disable this warning:
|
|
1108
|
+
|
|
1109
|
+
tanstackStart({
|
|
1110
|
+
serverFns: {
|
|
1111
|
+
disableCsrfMiddlewareWarning: true,
|
|
1112
|
+
},
|
|
1113
|
+
})`);
|
|
1114
|
+
}
|
|
1115
|
+
var ROUTER_BASEPATH = "/";
|
|
1116
|
+
var SERVER_FN_BASE = "/_serverFn/";
|
|
1117
|
+
var IS_PRERENDERING = process.env.TSS_PRERENDERING === "true";
|
|
1118
|
+
var IS_SHELL_ENV = process.env.TSS_SHELL === "true";
|
|
1119
|
+
var ERR_NO_RESPONSE = "Internal Server Error";
|
|
1120
|
+
var ERR_NO_DEFER = "Internal Server Error";
|
|
1121
|
+
function throwRouteHandlerError() {
|
|
1122
|
+
throw new Error(ERR_NO_RESPONSE);
|
|
1123
|
+
}
|
|
1124
|
+
function throwIfMayNotDefer() {
|
|
1125
|
+
throw new Error(ERR_NO_DEFER);
|
|
1126
|
+
}
|
|
1127
|
+
function isSpecialResponse(value) {
|
|
1128
|
+
return value instanceof Response || isRedirect(value);
|
|
1129
|
+
}
|
|
1130
|
+
function handleCtxResult(result) {
|
|
1131
|
+
if (isSpecialResponse(result)) return { response: result };
|
|
1132
|
+
return result;
|
|
1133
|
+
}
|
|
1134
|
+
function executeMiddleware(middlewares, ctx) {
|
|
1135
|
+
let index = -1;
|
|
1136
|
+
const next = async (nextCtx) => {
|
|
1137
|
+
if (nextCtx) {
|
|
1138
|
+
if (nextCtx.context) ctx.context = safeObjectMerge(ctx.context, nextCtx.context);
|
|
1139
|
+
for (const key of Object.keys(nextCtx)) if (key !== "context") ctx[key] = nextCtx[key];
|
|
1140
|
+
}
|
|
1141
|
+
index++;
|
|
1142
|
+
const middleware = middlewares[index];
|
|
1143
|
+
if (!middleware) return ctx;
|
|
1144
|
+
let result;
|
|
1145
|
+
try {
|
|
1146
|
+
result = await middleware({
|
|
1147
|
+
...ctx,
|
|
1148
|
+
next
|
|
1149
|
+
});
|
|
1150
|
+
} catch (err) {
|
|
1151
|
+
if (isSpecialResponse(err)) {
|
|
1152
|
+
ctx.response = err;
|
|
1153
|
+
return ctx;
|
|
1154
|
+
}
|
|
1155
|
+
throw err;
|
|
1156
|
+
}
|
|
1157
|
+
const normalized = handleCtxResult(result);
|
|
1158
|
+
if (normalized) {
|
|
1159
|
+
if (normalized.response !== void 0) ctx.response = normalized.response;
|
|
1160
|
+
if (normalized.context) ctx.context = safeObjectMerge(ctx.context, normalized.context);
|
|
1161
|
+
}
|
|
1162
|
+
return ctx;
|
|
1163
|
+
};
|
|
1164
|
+
return next();
|
|
1165
|
+
}
|
|
1166
|
+
function handlerToMiddleware(handler, mayDefer = false) {
|
|
1167
|
+
if (mayDefer) return handler;
|
|
1168
|
+
return async (ctx) => {
|
|
1169
|
+
const response = await handler({
|
|
1170
|
+
...ctx,
|
|
1171
|
+
next: throwIfMayNotDefer
|
|
1172
|
+
});
|
|
1173
|
+
if (!response) throwRouteHandlerError();
|
|
1174
|
+
return response;
|
|
1175
|
+
};
|
|
1176
|
+
}
|
|
1177
|
+
function createStartHandler(cbOrOptions) {
|
|
1178
|
+
const handlerOptions = typeof cbOrOptions === "function" ? {} : cbOrOptions;
|
|
1179
|
+
const cb = typeof cbOrOptions === "function" ? cbOrOptions : cbOrOptions.handler;
|
|
1180
|
+
const finalManifestResolver = createFinalManifestResolver({
|
|
1181
|
+
...handlerOptions
|
|
1182
|
+
});
|
|
1183
|
+
const resolveManifestForRequest = finalManifestResolver.resolveCached;
|
|
1184
|
+
finalManifestResolver.warmup({ getBaseManifest: () => getBaseManifest() });
|
|
1185
|
+
const startRequestResolver = async (request, requestOpts) => {
|
|
1186
|
+
let router = null;
|
|
1187
|
+
let cbWillCleanup = false;
|
|
1188
|
+
try {
|
|
1189
|
+
const { url, handledProtocolRelativeURL } = getNormalizedURL(request.url);
|
|
1190
|
+
const href = url.pathname + url.search + url.hash;
|
|
1191
|
+
const origin = getOrigin(request);
|
|
1192
|
+
if (handledProtocolRelativeURL) return Response.redirect(url, 308);
|
|
1193
|
+
const entries = await getEntries();
|
|
1194
|
+
const hasStartInstance = !!entries.startEntry.startInstance;
|
|
1195
|
+
const startOptions = await entries.startEntry.startInstance?.getOptions() || {};
|
|
1196
|
+
const { hasPluginAdapters, pluginSerializationAdapters } = entries.pluginAdapters;
|
|
1197
|
+
const serializationAdapters = [
|
|
1198
|
+
...startOptions.serializationAdapters || [],
|
|
1199
|
+
...hasPluginAdapters ? pluginSerializationAdapters : [],
|
|
1200
|
+
ServerFunctionSerializationAdapter
|
|
1201
|
+
];
|
|
1202
|
+
const requestStartOptions = {
|
|
1203
|
+
...startOptions,
|
|
1204
|
+
requestMiddleware: hasStartInstance ? startOptions.requestMiddleware : [defaultCsrfMiddleware],
|
|
1205
|
+
serializationAdapters
|
|
1206
|
+
};
|
|
1207
|
+
const flattenedRequestMiddlewares = requestStartOptions.requestMiddleware ? flattenMiddlewares(requestStartOptions.requestMiddleware) : [];
|
|
1208
|
+
const executedRequestMiddlewares = new Set(flattenedRequestMiddlewares);
|
|
1209
|
+
const getRouter = async () => {
|
|
1210
|
+
if (router) return router;
|
|
1211
|
+
router = await entries.routerEntry.getRouter();
|
|
1212
|
+
let isShell = IS_SHELL_ENV;
|
|
1213
|
+
if (IS_PRERENDERING && !isShell) isShell = request.headers.get(HEADERS.TSS_SHELL) === "true";
|
|
1214
|
+
const history = createMemoryHistory({ initialEntries: [href] });
|
|
1215
|
+
router.update({
|
|
1216
|
+
history,
|
|
1217
|
+
isShell,
|
|
1218
|
+
isPrerendering: IS_PRERENDERING,
|
|
1219
|
+
origin: router.options.origin ?? origin,
|
|
1220
|
+
defaultSsr: requestStartOptions.defaultSsr,
|
|
1221
|
+
serializationAdapters: [...requestStartOptions.serializationAdapters, ...router.options.serializationAdapters || []],
|
|
1222
|
+
basepath: ROUTER_BASEPATH
|
|
1223
|
+
});
|
|
1224
|
+
return router;
|
|
1225
|
+
};
|
|
1226
|
+
if (SERVER_FN_BASE && url.pathname.startsWith(SERVER_FN_BASE)) {
|
|
1227
|
+
if (false) ;
|
|
1228
|
+
const serverFnId = url.pathname.slice(SERVER_FN_BASE.length).split("/")[0];
|
|
1229
|
+
if (!serverFnId) throw new Error("Invalid server action param for serverFnId");
|
|
1230
|
+
const serverFnHandler = async ({ context }) => {
|
|
1231
|
+
return runWithStartContext({
|
|
1232
|
+
getRouter,
|
|
1233
|
+
startOptions: requestStartOptions,
|
|
1234
|
+
contextAfterGlobalMiddlewares: context,
|
|
1235
|
+
request,
|
|
1236
|
+
executedRequestMiddlewares,
|
|
1237
|
+
handlerType: "serverFn"
|
|
1238
|
+
}, () => handleServerAction({
|
|
1239
|
+
request,
|
|
1240
|
+
context: requestOpts?.context,
|
|
1241
|
+
serverFnId
|
|
1242
|
+
}));
|
|
1243
|
+
};
|
|
1244
|
+
return handleRedirectResponse((await executeMiddleware([...flattenedRequestMiddlewares.map((d) => d.options.server), serverFnHandler], {
|
|
1245
|
+
request,
|
|
1246
|
+
pathname: url.pathname,
|
|
1247
|
+
handlerType: "serverFn",
|
|
1248
|
+
context: createNullProtoObject(requestOpts?.context)
|
|
1249
|
+
})).response, request, getRouter);
|
|
1250
|
+
}
|
|
1251
|
+
const executeRouter = async (serverContext, matchedRoutes) => {
|
|
1252
|
+
const acceptParts = (request.headers.get("Accept") || "*/*").split(",");
|
|
1253
|
+
if (!["*/*", "text/html"].some((mimeType) => acceptParts.some((part) => part.trim().startsWith(mimeType)))) return Response.json({ error: "Only HTML requests are supported here" }, { status: 500 });
|
|
1254
|
+
const manifest2 = await resolveManifestForRequest({
|
|
1255
|
+
request,
|
|
1256
|
+
requestInlineCss: requestOpts?.inlineCss,
|
|
1257
|
+
getBaseManifest: () => getBaseManifest(matchedRoutes)
|
|
1258
|
+
});
|
|
1259
|
+
const earlyHints = createEarlyHintsForRequest({
|
|
1260
|
+
onEarlyHints: requestOpts?.onEarlyHints,
|
|
1261
|
+
responseLinkHeader: requestOpts?.responseLinkHeader
|
|
1262
|
+
});
|
|
1263
|
+
earlyHints?.collectStatic({
|
|
1264
|
+
manifest: manifest2,
|
|
1265
|
+
matchedRoutes
|
|
1266
|
+
});
|
|
1267
|
+
const routerInstance = await getRouter();
|
|
1268
|
+
attachRouterServerSsrUtils({
|
|
1269
|
+
router: routerInstance,
|
|
1270
|
+
manifest: manifest2,
|
|
1271
|
+
getRequestAssets: () => getStartContext({ throwIfNotFound: false })?.requestAssets,
|
|
1272
|
+
includeUnmatchedRouteAssets: false
|
|
1273
|
+
});
|
|
1274
|
+
routerInstance.update({ additionalContext: { serverContext } });
|
|
1275
|
+
await routerInstance.load();
|
|
1276
|
+
if (routerInstance.state.redirect) return routerInstance.state.redirect;
|
|
1277
|
+
earlyHints?.collectDynamic(routerInstance.stores.matches.get());
|
|
1278
|
+
const ctx = getStartContext({ throwIfNotFound: false });
|
|
1279
|
+
await routerInstance.serverSsr.dehydrate({ requestAssets: ctx?.requestAssets });
|
|
1280
|
+
const responseHeaders = getStartResponseHeaders({ router: routerInstance });
|
|
1281
|
+
earlyHints?.appendResponseHeaders(responseHeaders);
|
|
1282
|
+
cbWillCleanup = true;
|
|
1283
|
+
return cb({
|
|
1284
|
+
request,
|
|
1285
|
+
router: routerInstance,
|
|
1286
|
+
responseHeaders
|
|
1287
|
+
});
|
|
1288
|
+
};
|
|
1289
|
+
const requestHandlerMiddleware = async ({ context }) => {
|
|
1290
|
+
return runWithStartContext({
|
|
1291
|
+
getRouter,
|
|
1292
|
+
startOptions: requestStartOptions,
|
|
1293
|
+
contextAfterGlobalMiddlewares: context,
|
|
1294
|
+
request,
|
|
1295
|
+
executedRequestMiddlewares,
|
|
1296
|
+
handlerType: "router"
|
|
1297
|
+
}, async () => {
|
|
1298
|
+
try {
|
|
1299
|
+
return await handleServerRoutes({
|
|
1300
|
+
getRouter,
|
|
1301
|
+
request,
|
|
1302
|
+
url,
|
|
1303
|
+
executeRouter,
|
|
1304
|
+
context,
|
|
1305
|
+
executedRequestMiddlewares
|
|
1306
|
+
});
|
|
1307
|
+
} catch (err) {
|
|
1308
|
+
if (err instanceof Response) return err;
|
|
1309
|
+
throw err;
|
|
1310
|
+
}
|
|
1311
|
+
});
|
|
1312
|
+
};
|
|
1313
|
+
return handleRedirectResponse((await executeMiddleware([...flattenedRequestMiddlewares.map((d) => d.options.server), requestHandlerMiddleware], {
|
|
1314
|
+
request,
|
|
1315
|
+
pathname: url.pathname,
|
|
1316
|
+
handlerType: "router",
|
|
1317
|
+
context: createNullProtoObject(requestOpts?.context)
|
|
1318
|
+
})).response, request, getRouter);
|
|
1319
|
+
} finally {
|
|
1320
|
+
if (router && !cbWillCleanup) router.serverSsr?.cleanup();
|
|
1321
|
+
router = null;
|
|
1322
|
+
}
|
|
1323
|
+
};
|
|
1324
|
+
return requestHandler(startRequestResolver);
|
|
1325
|
+
}
|
|
1326
|
+
async function handleRedirectResponse(response, request, getRouter) {
|
|
1327
|
+
if (!isRedirect(response)) return response;
|
|
1328
|
+
if (isResolvedRedirect(response)) {
|
|
1329
|
+
if (request.headers.get("x-tsr-serverFn") === "true") return Response.json({
|
|
1330
|
+
...response.options,
|
|
1331
|
+
isSerializedRedirect: true
|
|
1332
|
+
}, { headers: response.headers });
|
|
1333
|
+
return response;
|
|
1334
|
+
}
|
|
1335
|
+
const opts = response.options;
|
|
1336
|
+
if (opts.to && typeof opts.to === "string" && !opts.to.startsWith("/")) throw new Error(`Server side redirects must use absolute paths via the 'href' or 'to' options. The redirect() method's "to" property accepts an internal path only. Use the "href" property to provide an external URL. Received: ${JSON.stringify(opts)}`);
|
|
1337
|
+
if ([
|
|
1338
|
+
"params",
|
|
1339
|
+
"search",
|
|
1340
|
+
"hash"
|
|
1341
|
+
].some((d) => typeof opts[d] === "function")) throw new Error(`Server side redirects must use static search, params, and hash values and do not support functional values. Received functional values for: ${Object.keys(opts).filter((d) => typeof opts[d] === "function").map((d) => `"${d}"`).join(", ")}`);
|
|
1342
|
+
const redirect = (await getRouter()).resolveRedirect(response);
|
|
1343
|
+
if (request.headers.get("x-tsr-serverFn") === "true") return Response.json({
|
|
1344
|
+
...response.options,
|
|
1345
|
+
isSerializedRedirect: true
|
|
1346
|
+
}, { headers: response.headers });
|
|
1347
|
+
return redirect;
|
|
1348
|
+
}
|
|
1349
|
+
async function handleServerRoutes({ getRouter, request, url, executeRouter, context, executedRequestMiddlewares }) {
|
|
1350
|
+
const router = await getRouter();
|
|
1351
|
+
const pathname = executeRewriteInput(router.rewrite, url).pathname;
|
|
1352
|
+
const { matchedRoutes, foundRoute, routeParams } = router.getMatchedRoutes(pathname);
|
|
1353
|
+
const isExactMatch = foundRoute && routeParams["**"] === void 0;
|
|
1354
|
+
const routeMiddlewares = [];
|
|
1355
|
+
for (const route of matchedRoutes) {
|
|
1356
|
+
const serverMiddleware = route.options.server?.middleware;
|
|
1357
|
+
if (serverMiddleware) {
|
|
1358
|
+
const flattened = flattenMiddlewares(serverMiddleware);
|
|
1359
|
+
for (const m of flattened) if (!executedRequestMiddlewares.has(m)) routeMiddlewares.push(m.options.server);
|
|
1360
|
+
}
|
|
1361
|
+
}
|
|
1362
|
+
const server = foundRoute?.options.server;
|
|
1363
|
+
let isHeadFallback = false;
|
|
1364
|
+
if (server?.handlers && isExactMatch) {
|
|
1365
|
+
const handlers = typeof server.handlers === "function" ? server.handlers({ createHandlers: (d) => d }) : server.handlers;
|
|
1366
|
+
const requestMethod = request.method.toUpperCase();
|
|
1367
|
+
const handler = requestMethod === "HEAD" ? handlers["HEAD"] ?? handlers["GET"] ?? handlers["ANY"] : handlers[requestMethod] ?? handlers["ANY"];
|
|
1368
|
+
isHeadFallback = requestMethod === "HEAD" && handler !== void 0 && !handlers["HEAD"];
|
|
1369
|
+
if (handler) {
|
|
1370
|
+
const mayDefer = !!foundRoute.options.component;
|
|
1371
|
+
if (typeof handler === "function") routeMiddlewares.push(handlerToMiddleware(handler, mayDefer));
|
|
1372
|
+
else {
|
|
1373
|
+
if (handler.middleware?.length) {
|
|
1374
|
+
const handlerMiddlewares = flattenMiddlewares(handler.middleware);
|
|
1375
|
+
for (const m of handlerMiddlewares) routeMiddlewares.push(m.options.server);
|
|
1376
|
+
}
|
|
1377
|
+
if (handler.handler) routeMiddlewares.push(handlerToMiddleware(handler.handler, mayDefer));
|
|
1378
|
+
}
|
|
1379
|
+
}
|
|
1380
|
+
}
|
|
1381
|
+
routeMiddlewares.push((ctx2) => executeRouter(ctx2.context, matchedRoutes));
|
|
1382
|
+
const ctx = await executeMiddleware(routeMiddlewares, {
|
|
1383
|
+
request,
|
|
1384
|
+
context,
|
|
1385
|
+
params: routeParams,
|
|
1386
|
+
pathname,
|
|
1387
|
+
handlerType: "router"
|
|
1388
|
+
});
|
|
1389
|
+
if (isHeadFallback) {
|
|
1390
|
+
if (!ctx.response) throwRouteHandlerError();
|
|
1391
|
+
const resolved = await handleRedirectResponse(ctx.response, request, getRouter);
|
|
1392
|
+
return new Response(null, resolved);
|
|
1393
|
+
}
|
|
1394
|
+
return ctx.response;
|
|
1395
|
+
}
|
|
1396
|
+
var createServerRpc = (serverFnMeta, splitImportFn) => {
|
|
1397
|
+
const url = "/_serverFn/" + serverFnMeta.id;
|
|
1398
|
+
return Object.assign(splitImportFn, {
|
|
1399
|
+
url,
|
|
1400
|
+
serverFnMeta,
|
|
1401
|
+
[TSS_SERVER_FUNCTION]: true
|
|
1402
|
+
});
|
|
1403
|
+
};
|
|
1404
|
+
var createSsrRpc = (functionId) => {
|
|
1405
|
+
const url = "/_serverFn/" + functionId;
|
|
1406
|
+
const serverFnMeta = { id: functionId };
|
|
1407
|
+
const fn = async (...args) => {
|
|
1408
|
+
return (await getServerFnById(functionId))(...args);
|
|
1409
|
+
};
|
|
1410
|
+
return Object.assign(fn, {
|
|
1411
|
+
url,
|
|
1412
|
+
serverFnMeta,
|
|
1413
|
+
[TSS_SERVER_FUNCTION]: true
|
|
1414
|
+
});
|
|
1415
|
+
};
|
|
1416
|
+
export {
|
|
1417
|
+
createSsrRpc as a,
|
|
1418
|
+
createStartHandler as b,
|
|
1419
|
+
createServerRpc as c,
|
|
1420
|
+
getRequest as g
|
|
1421
|
+
};
|