UNPKG

@tanstack/react-router

Version:

Modern and scalable routing for React applications

1 lines • 3.16 kB
{"version":3,"file":"Scripts.cjs","names":["useRouter","getSsrBodyScriptParts","composeSsrBodyScripts","isServer","useSelector","deepEqual","_Fragment","Asset"],"sources":["../../src/Scripts.tsx"],"sourcesContent":["import { useSelector } from '@tanstack/react-store'\nimport {\n composeSsrBodyScripts,\n deepEqual,\n getSsrBodyScriptParts,\n} from '@tanstack/router-core'\nimport { isServer } from '@tanstack/router-core/isServer'\nimport { Asset } from './Asset'\nimport { useRouter } from './useRouter'\nimport type { RouterManagedTag } from '@tanstack/router-core'\n\ntype ScriptRenderAsset = RouterManagedTag & {\n preventScriptHoist?: boolean\n}\n\nconst routeScriptAttrs = { suppressHydrationWarning: true }\n\n/**\n * Render body script tags collected from route matches and SSR manifests.\n * During streaming SSR, `<Scripts>` marks where late hydration scripts may\n * begin to be inserted.\n */\nexport const Scripts = () => {\n const router = useRouter()\n const nonce = router.options.ssr?.nonce\n\n const getParts = (matches: Array<any>) => {\n const parts = getSsrBodyScriptParts(\n matches,\n router.ssr?.manifest,\n nonce,\n routeScriptAttrs,\n )\n for (const script of parts[1]) {\n if (typeof script.attrs?.src === 'string') {\n const scriptWithHoist = script as ScriptRenderAsset\n scriptWithHoist.preventScriptHoist = true\n }\n }\n return parts\n }\n\n const getScripts = (matches: Array<any>) => {\n return composeSsrBodyScripts(getParts(matches))\n }\n\n if (isServer ?? router.isServer) {\n const activeMatches = router.stores.matches.get()\n return renderScripts(\n composeSsrBodyScripts(\n getParts(activeMatches),\n router.serverSsr?.takeInitialHydrationScriptTags(),\n ),\n )\n }\n\n // eslint-disable-next-line react-hooks/rules-of-hooks -- condition is static\n const scripts = useSelector(router.stores.matches, getScripts, {\n compare: deepEqual,\n })\n\n return renderScripts(scripts)\n}\n\nfunction renderScripts(scripts: Array<ScriptRenderAsset>) {\n return (\n <>\n {scripts.map((asset, i) => (\n <Asset {...asset} key={`tsr-scripts-${asset.tag}-${i}`} />\n ))}\n </>\n )\n}\n"],"mappings":";;;;;;;;AAeA,IAAM,mBAAmB,EAAE,0BAA0B,KAAK;;;;;;AAO1D,IAAa,gBAAgB;CAC3B,MAAM,SAASA,kBAAAA,UAAU;CACzB,MAAM,QAAQ,OAAO,QAAQ,KAAK;CAElC,MAAM,YAAY,YAAwB;EACxC,MAAM,SAAA,GAAQC,sBAAAA,sBAAAA,CACZ,SACA,OAAO,KAAK,UACZ,OACA,gBACF;EACA,KAAK,MAAM,UAAU,MAAM,IACzB,IAAI,OAAO,OAAO,OAAO,QAAQ,UAAU;GACzC,MAAM,kBAAkB;GACxB,gBAAgB,qBAAqB;EACvC;EAEF,OAAO;CACT;CAEA,MAAM,cAAc,YAAwB;EAC1C,QAAA,GAAOC,sBAAAA,sBAAAA,CAAsB,SAAS,OAAO,CAAC;CAChD;CAEA,IAAIC,+BAAAA,YAAY,OAAO,UAAU;EAC/B,MAAM,gBAAgB,OAAO,OAAO,QAAQ,IAAI;EAChD,OAAO,eAAA,GACLD,sBAAAA,sBAAAA,CACE,SAAS,aAAa,GACtB,OAAO,WAAW,+BAA+B,CACnD,CACF;CACF;CAOA,OAAO,eAAA,GAJSE,sBAAAA,YAAAA,CAAY,OAAO,OAAO,SAAS,YAAY,EAC7D,SAASC,sBAAAA,UACX,CAEqB,CAAO;AAC9B;AAEA,SAAS,cAAc,SAAmC;CACxD,OACE,iBAAA,GAAA,kBAAA,IAAA,CAAAC,kBAAAA,UAAA,EAAA,UACG,QAAQ,KAAK,OAAO,MACnB,iBAAA,GAAA,MAAA,cAAA,CAACC,cAAAA,OAAD;EAAO,GAAI;EAAO,KAAK,eAAe,MAAM,IAAI,GAAG;CAAM,CAAA,CAC1D,EACD,CAAA;AAEN"}