UNPKG

@tanstack/solid-router

Version:

Modern and scalable routing for Solid applications

51 lines (50 loc) 1.72 kB
import { useRouter } from "./useRouter.js"; import { Asset } from "./Asset.js"; import { createComponent, memo } from "solid-js/web"; import * as Solid from "solid-js"; import { isServer } from "@tanstack/router-core/isServer"; //#region src/Scripts.tsx var Scripts = () => { const router = useRouter(); const nonce = router.options.ssr?.nonce; const getAssetScripts = (matches) => { const assetScripts = []; const manifest = router.ssr?.manifest; if (!manifest) return []; for (const match of matches) { const scripts = manifest.routes[match.routeId]?.scripts; if (!scripts) continue; for (const asset of scripts) assetScripts.push({ tag: "script", attrs: { ...asset.attrs, nonce }, children: asset.children }); } return assetScripts; }; const getScripts = (matches) => matches.map((match) => match.scripts).flat(1).filter(Boolean).map(({ children, ...script }) => ({ tag: "script", attrs: { ...script, nonce }, children })); const activeMatches = Solid.createMemo(() => router.stores.matches.get()); const assetScripts = Solid.createMemo(() => getAssetScripts(activeMatches())); return renderScripts(router, Solid.createMemo(() => getScripts(activeMatches()))(), assetScripts()); }; function renderScripts(router, scripts, assetScripts) { const allScripts = [...scripts, ...assetScripts]; if ((isServer ?? router.isServer) && router.serverSsr) { const serverBufferedScript = router.serverSsr.takeBufferedScripts(); if (serverBufferedScript) allScripts.unshift(serverBufferedScript); } return memo(() => allScripts.map((asset) => createComponent(Asset, asset))); } //#endregion export { Scripts }; //# sourceMappingURL=Scripts.js.map