{"version":3,"file":"Asset.cjs","names":["Link","Meta","Style","Title","onCleanup","onMount","isServer","useRouter","RouterManagedTag","JSX","INLINE_CSS_HYDRATION_ATTR","Asset","asset","Element","tag","attrs","children","_$createComponent","_$mergeProps","inlineCss","process","env","TSS_INLINE_CSS_ENABLED","undefined","InlineCssStyle","Script","Record","isInlineCssPlaceholder","html","document","querySelector","HTMLStyleElement","textContent","ScriptAttrs","key","src","router","dataScript","type","normSrc","base","baseURI","window","location","href","URL","existingScript","Array","from","querySelectorAll","find","el","HTMLScriptElement","script","createElement","value","Object","entries","setAttribute","String","head","appendChild","parentNode","removeChild","typeAttr","nonceAttr","nonce","sType","getAttribute","sNonce","_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\nconst INLINE_CSS_HYDRATION_ATTR = 'data-tsr-inline-css'\n\nexport function Asset(asset: RouterManagedTag): JSX.Element | null {\n  const { tag, attrs, children } = asset\n\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      if (\n        asset.inlineCss &&\n        (process.env.TSS_INLINE_CSS_ENABLED === 'true' ||\n          (process.env.TSS_INLINE_CSS_ENABLED === undefined && isServer))\n      ) {\n        return <InlineCssStyle attrs={attrs}>{children}</InlineCssStyle>\n      }\n\n      return <Style {...attrs}>{children}</Style>\n    case 'script':\n      return <Script attrs={attrs}>{children}</Script>\n    default:\n      return null\n  }\n}\n\nfunction InlineCssStyle({\n  attrs,\n  children,\n}: {\n  attrs?: Record<string, any>\n  children?: RouterManagedTag['children']\n}) {\n  const isInlineCssPlaceholder = children === undefined\n  const html = isInlineCssPlaceholder\n    ? typeof document === 'undefined'\n      ? ''\n      : (document.querySelector<HTMLStyleElement>(\n          `style[${INLINE_CSS_HYDRATION_ATTR}]`,\n        )?.textContent ?? '')\n    : (children ?? '')\n\n  return (\n    <Style {...attrs} {...{ [INLINE_CSS_HYDRATION_ATTR]: '' }}>\n      {html}\n    </Style>\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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"}