UNPKG

@tanstack/solid-router

Version:

Modern and scalable routing for Solid applications

1 lines 7.29 kB
{"version":3,"file":"Asset.cjs","names":["Link","Meta","Style","Title","onCleanup","onMount","isServer","useRouter","RouterManagedTag","JSX","Asset","tag","attrs","children","Element","_$createComponent","_$mergeProps","Script","ScriptAttrs","key","src","router","dataScript","type","normSrc","base","document","baseURI","window","location","href","URL","existingScript","Array","from","querySelectorAll","find","el","HTMLScriptElement","script","createElement","value","Object","entries","undefined","setAttribute","String","head","appendChild","parentNode","removeChild","typeAttr","nonceAttr","nonce","sType","getAttribute","sNonce","textContent","_el$","_tmpl$","_$spread","_el$2","_el$3"],"sources":["../../src/Asset.tsx"],"sourcesContent":["import { Link, Meta, Style, Title } from '@solidjs/meta'\nimport { onCleanup, onMount } from 'solid-js'\nimport { isServer } from '@tanstack/router-core/isServer'\nimport { useRouter } from './useRouter'\nimport type { RouterManagedTag } from '@tanstack/router-core'\nimport type { JSX } from 'solid-js'\n\nexport function Asset({\n tag,\n attrs,\n children,\n}: RouterManagedTag): JSX.Element | null {\n switch (tag) {\n case 'title':\n return <Title {...attrs}>{children}</Title>\n case 'meta':\n return <Meta {...attrs} />\n case 'link':\n return <Link {...attrs} />\n case 'style':\n return <Style {...attrs}>{children}</Style>\n case 'script':\n return <Script attrs={attrs}>{children}</Script>\n default:\n return null\n }\n}\n\ninterface ScriptAttrs {\n [key: string]: string | boolean | undefined\n src?: string\n}\n\nfunction Script({\n attrs,\n children,\n}: {\n attrs?: ScriptAttrs\n children?: string\n}): JSX.Element | null {\n const router = useRouter()\n const dataScript =\n typeof attrs?.type === 'string' &&\n attrs.type !== '' &&\n attrs.type !== 'text/javascript' &&\n attrs.type !== 'module'\n\n onMount(() => {\n if (dataScript) return\n\n if (attrs?.src) {\n const normSrc = (() => {\n try {\n const base = document.baseURI || window.location.href\n return new URL(attrs.src, base).href\n } catch {\n return attrs.src\n }\n })()\n const existingScript = Array.from(\n document.querySelectorAll('script[src]'),\n ).find((el) => (el as HTMLScriptElement).src === normSrc)\n\n if (existingScript) {\n return\n }\n\n const script = document.createElement('script')\n\n for (const [key, value] of Object.entries(attrs)) {\n if (value !== undefined && value !== false) {\n script.setAttribute(\n key,\n typeof value === 'boolean' ? '' : String(value),\n )\n }\n }\n\n document.head.appendChild(script)\n\n onCleanup(() => {\n if (script.parentNode) {\n script.parentNode.removeChild(script)\n }\n })\n }\n\n if (typeof children === 'string') {\n const typeAttr =\n typeof attrs?.type === 'string' ? attrs.type : 'text/javascript'\n const nonceAttr =\n typeof attrs?.nonce === 'string' ? attrs.nonce : undefined\n const existingScript = Array.from(\n document.querySelectorAll('script:not([src])'),\n ).find((el) => {\n if (!(el instanceof HTMLScriptElement)) return false\n const sType = el.getAttribute('type') ?? 'text/javascript'\n const sNonce = el.getAttribute('nonce') ?? undefined\n return (\n el.textContent === children &&\n sType === typeAttr &&\n sNonce === nonceAttr\n )\n })\n\n if (existingScript) {\n return\n }\n\n const script = document.createElement('script')\n script.textContent = children\n\n if (attrs) {\n for (const [key, value] of Object.entries(attrs)) {\n if (value !== undefined && value !== false) {\n script.setAttribute(\n key,\n typeof value === 'boolean' ? '' : String(value),\n )\n }\n }\n }\n\n document.head.appendChild(script)\n\n onCleanup(() => {\n if (script.parentNode) {\n script.parentNode.removeChild(script)\n }\n })\n }\n })\n\n if (!(isServer ?? router.isServer)) {\n if (dataScript && typeof children === 'string') {\n return <script {...attrs} innerHTML={children} />\n }\n\n // render an empty script on the client just to avoid hydration errors\n return null\n }\n\n if (attrs?.src && typeof attrs.src === 'string') {\n return <script {...attrs} />\n }\n\n if (typeof children === 'string') {\n return <script {...attrs} innerHTML={children} />\n }\n\n return null\n}\n"],"mappings":"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"}