@tanstack/solid-router 1.136.8 → 1.136.9

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.
@@ -93,23 +93,23 @@ function Script({
93
93
  });
94
94
  }
95
95
  });
96
- if (router && !router.isServer) {
97
- return null;
96
+ if (!router.isServer) {
97
+ return _tmpl$();
98
98
  }
99
99
  if (attrs?.src && typeof attrs.src === "string") {
100
100
  return (() => {
101
- var _el$ = _tmpl$();
102
- Solid.spread(_el$, attrs, false, false);
103
- return _el$;
101
+ var _el$2 = _tmpl$();
102
+ Solid.spread(_el$2, attrs, false, false);
103
+ return _el$2;
104
104
  })();
105
105
  }
106
106
  if (typeof children === "string") {
107
107
  return (() => {
108
- var _el$2 = _tmpl$();
109
- Solid.spread(_el$2, Solid.mergeProps(attrs, {
108
+ var _el$3 = _tmpl$();
109
+ Solid.spread(_el$3, Solid.mergeProps(attrs, {
110
110
  "innerHTML": children
111
111
  }), false, false);
112
- return _el$2;
112
+ return _el$3;
113
113
  })();
114
114
  }
115
115
  return null;
@@ -1 +1 @@
1
- {"version":3,"file":"Asset.cjs","sources":["../../src/Asset.tsx"],"sourcesContent":["import { Link, Meta, Style, Title } from '@solidjs/meta'\nimport { onCleanup, onMount } from 'solid-js'\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} innerHTML={children} />\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\n onMount(() => {\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 (router && !router.isServer) {\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"],"names":["Asset","tag","attrs","children","_$createComponent","Title","_$mergeProps","Meta","Link","Style","innerHTML","Script","router","useRouter","onMount","src","normSrc","base","document","baseURI","window","location","href","URL","existingScript","Array","from","querySelectorAll","find","el","script","createElement","key","value","Object","entries","undefined","setAttribute","String","head","appendChild","onCleanup","parentNode","removeChild","typeAttr","type","nonceAttr","nonce","HTMLScriptElement","sType","getAttribute","sNonce","textContent","isServer","_el$","_tmpl$","_$spread","_el$2"],"mappings":"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"}
1
+ {"version":3,"file":"Asset.cjs","sources":["../../src/Asset.tsx"],"sourcesContent":["import { Link, Meta, Style, Title } from '@solidjs/meta'\nimport { onCleanup, onMount } from 'solid-js'\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} innerHTML={children} />\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\n onMount(() => {\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 (!router.isServer) {\n // render an empty script on the client just to avoid hydration errors\n return <script />\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"],"names":["Asset","tag","attrs","children","_$createComponent","Title","_$mergeProps","Meta","Link","Style","innerHTML","Script","router","useRouter","onMount","src","normSrc","base","document","baseURI","window","location","href","URL","existingScript","Array","from","querySelectorAll","find","el","script","createElement","key","value","Object","entries","undefined","setAttribute","String","head","appendChild","onCleanup","parentNode","removeChild","typeAttr","type","nonceAttr","nonce","HTMLScriptElement","sType","getAttribute","sNonce","textContent","isServer","_tmpl$","_el$2","_$spread","_el$3"],"mappings":"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"}
@@ -102,11 +102,11 @@ const useTags = () => {
102
102
  return [...constructed, ...assets];
103
103
  }
104
104
  });
105
- const preloadMeta = useRouterState.useRouterState({
105
+ const preloadLinks = useRouterState.useRouterState({
106
106
  select: (state) => {
107
- const preloadMeta2 = [];
107
+ const preloadLinks2 = [];
108
108
  state.matches.map((match) => router.looseRoutesById[match.routeId]).forEach((route) => router.ssr?.manifest?.routes[route.id]?.preloads?.filter(Boolean).forEach((preload) => {
109
- preloadMeta2.push({
109
+ preloadLinks2.push({
110
110
  tag: "link",
111
111
  attrs: {
112
112
  rel: "modulepreload",
@@ -115,7 +115,7 @@ const useTags = () => {
115
115
  }
116
116
  });
117
117
  }));
118
- return preloadMeta2;
118
+ return preloadLinks2;
119
119
  }
120
120
  });
121
121
  const styles = useRouterState.useRouterState({
@@ -144,21 +144,7 @@ const useTags = () => {
144
144
  children
145
145
  }))
146
146
  });
147
- let serverHeadScript = void 0;
148
- if (router.serverSsr) {
149
- const bufferedScripts = router.serverSsr.takeBufferedScripts();
150
- if (bufferedScripts) {
151
- serverHeadScript = {
152
- tag: "script",
153
- attrs: {
154
- nonce,
155
- class: "$tsr"
156
- },
157
- children: bufferedScripts
158
- };
159
- }
160
- }
161
- return () => uniqBy([...meta2(), ...preloadMeta(), ...links(), ...styles(), ...serverHeadScript ? [serverHeadScript] : [], ...headScripts()], (d) => {
147
+ return () => uniqBy([...meta2(), ...preloadLinks(), ...links(), ...styles(), ...headScripts()], (d) => {
162
148
  return JSON.stringify(d);
163
149
  });
164
150
  };
@@ -1 +1 @@
1
- {"version":3,"file":"HeadContent.cjs","sources":["../../src/HeadContent.tsx"],"sourcesContent":["import * as Solid from 'solid-js'\nimport { MetaProvider } from '@solidjs/meta'\nimport { For } from 'solid-js'\nimport { Asset } from './Asset'\nimport { useRouter } from './useRouter'\nimport { useRouterState } from './useRouterState'\nimport type { RouterManagedTag } from '@tanstack/router-core'\n\nexport const useTags = () => {\n const router = useRouter()\n const nonce = router.options.ssr?.nonce\n const routeMeta = useRouterState({\n select: (state) => {\n return state.matches.map((match) => match.meta!).filter(Boolean)\n },\n })\n\n const meta: Solid.Accessor<Array<RouterManagedTag>> = Solid.createMemo(() => {\n const resultMeta: Array<RouterManagedTag> = []\n const metaByAttribute: Record<string, true> = {}\n let title: RouterManagedTag | undefined\n const routeMetasArray = routeMeta()\n for (let i = routeMetasArray.length - 1; i >= 0; i--) {\n const metas = routeMetasArray[i]!\n for (let j = metas.length - 1; j >= 0; j--) {\n const m = metas[j]\n if (!m) continue\n\n if (m.title) {\n if (!title) {\n title = {\n tag: 'title',\n children: m.title,\n }\n }\n } else {\n const attribute = m.name ?? m.property\n if (attribute) {\n if (metaByAttribute[attribute]) {\n continue\n } else {\n metaByAttribute[attribute] = true\n }\n }\n\n resultMeta.push({\n tag: 'meta',\n attrs: {\n ...m,\n nonce,\n },\n })\n }\n }\n }\n\n if (title) {\n resultMeta.push(title)\n }\n\n if (router.options.ssr?.nonce) {\n resultMeta.push({\n tag: 'meta',\n attrs: {\n property: 'csp-nonce',\n content: router.options.ssr.nonce,\n },\n })\n }\n resultMeta.reverse()\n\n return resultMeta\n })\n\n const links = useRouterState({\n select: (state) => {\n const constructed = state.matches\n .map((match) => match.links!)\n .filter(Boolean)\n .flat(1)\n .map((link) => ({\n tag: 'link',\n attrs: {\n ...link,\n nonce,\n },\n })) satisfies Array<RouterManagedTag>\n\n const manifest = router.ssr?.manifest\n\n // These are the assets extracted from the ViteManifest\n // using the `startManifestPlugin`\n const assets = state.matches\n .map((match) => manifest?.routes[match.routeId]?.assets ?? [])\n .filter(Boolean)\n .flat(1)\n .filter((asset) => asset.tag === 'link')\n .map(\n (asset) =>\n ({\n tag: 'link',\n attrs: { ...asset.attrs, nonce },\n }) satisfies RouterManagedTag,\n )\n\n return [...constructed, ...assets]\n },\n })\n\n const preloadMeta = useRouterState({\n select: (state) => {\n const preloadMeta: Array<RouterManagedTag> = []\n\n state.matches\n .map((match) => router.looseRoutesById[match.routeId]!)\n .forEach((route) =>\n router.ssr?.manifest?.routes[route.id]?.preloads\n ?.filter(Boolean)\n .forEach((preload) => {\n preloadMeta.push({\n tag: 'link',\n attrs: {\n rel: 'modulepreload',\n href: preload,\n nonce,\n },\n })\n }),\n )\n\n return preloadMeta\n },\n })\n\n const styles = useRouterState({\n select: (state) =>\n (\n state.matches\n .map((match) => match.styles!)\n .flat(1)\n .filter(Boolean) as Array<RouterManagedTag>\n ).map(({ children, ...style }) => ({\n tag: 'style',\n attrs: {\n ...style,\n nonce,\n },\n children,\n })),\n })\n\n const headScripts = useRouterState({\n select: (state) =>\n (\n state.matches\n .map((match) => match.headScripts!)\n .flat(1)\n .filter(Boolean) as Array<RouterManagedTag>\n ).map(({ children, ...script }) => ({\n tag: 'script',\n attrs: {\n ...script,\n nonce,\n },\n children,\n })),\n })\n\n let serverHeadScript: RouterManagedTag | undefined = undefined\n\n if (router.serverSsr) {\n const bufferedScripts = router.serverSsr.takeBufferedScripts()\n if (bufferedScripts) {\n serverHeadScript = {\n tag: 'script',\n attrs: {\n nonce,\n class: '$tsr',\n },\n children: bufferedScripts,\n }\n }\n }\n\n return () =>\n uniqBy(\n [\n ...meta(),\n ...preloadMeta(),\n ...links(),\n ...styles(),\n ...(serverHeadScript ? [serverHeadScript] : []),\n ...headScripts(),\n ] as Array<RouterManagedTag>,\n (d) => {\n return JSON.stringify(d)\n },\n )\n}\n\n/**\n * @description The `HeadContent` component is used to render meta tags, links, and scripts for the current route.\n * When using full document hydration (hydrating from `<html>`), this component should be rendered in the `<body>`\n * to ensure it's part of the reactive tree and updates correctly during client-side navigation.\n * The component uses portals internally to render content into the `<head>` element.\n */\nexport function HeadContent() {\n const tags = useTags()\n\n return (\n <MetaProvider>\n <For each={tags()}>{(tag) => <Asset {...tag} />}</For>\n </MetaProvider>\n )\n}\n\nfunction uniqBy<T>(arr: Array<T>, fn: (item: T) => string) {\n const seen = new Set<string>()\n return arr.filter((item) => {\n const key = fn(item)\n if (seen.has(key)) {\n return false\n }\n seen.add(key)\n return true\n })\n}\n"],"names":["useTags","router","useRouter","nonce","options","ssr","routeMeta","useRouterState","select","state","matches","map","match","meta","filter","Boolean","Solid","createMemo","resultMeta","metaByAttribute","title","routeMetasArray","i","length","metas","j","m","tag","children","attribute","name","property","push","attrs","content","reverse","links","constructed","flat","link","manifest","assets","routes","routeId","asset","preloadMeta","looseRoutesById","forEach","route","id","preloads","preload","rel","href","styles","style","headScripts","script","serverHeadScript","undefined","serverSsr","bufferedScripts","takeBufferedScripts","class","uniqBy","d","JSON","stringify","HeadContent","tags","_$createComponent","MetaProvider","For","each","Asset","arr","fn","seen","Set","item","key","has","add"],"mappings":"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"}
1
+ {"version":3,"file":"HeadContent.cjs","sources":["../../src/HeadContent.tsx"],"sourcesContent":["import * as Solid from 'solid-js'\nimport { MetaProvider } from '@solidjs/meta'\nimport { For } from 'solid-js'\nimport { Asset } from './Asset'\nimport { useRouter } from './useRouter'\nimport { useRouterState } from './useRouterState'\nimport type { RouterManagedTag } from '@tanstack/router-core'\n\nexport const useTags = () => {\n const router = useRouter()\n const nonce = router.options.ssr?.nonce\n const routeMeta = useRouterState({\n select: (state) => {\n return state.matches.map((match) => match.meta!).filter(Boolean)\n },\n })\n\n const meta: Solid.Accessor<Array<RouterManagedTag>> = Solid.createMemo(() => {\n const resultMeta: Array<RouterManagedTag> = []\n const metaByAttribute: Record<string, true> = {}\n let title: RouterManagedTag | undefined\n const routeMetasArray = routeMeta()\n for (let i = routeMetasArray.length - 1; i >= 0; i--) {\n const metas = routeMetasArray[i]!\n for (let j = metas.length - 1; j >= 0; j--) {\n const m = metas[j]\n if (!m) continue\n\n if (m.title) {\n if (!title) {\n title = {\n tag: 'title',\n children: m.title,\n }\n }\n } else {\n const attribute = m.name ?? m.property\n if (attribute) {\n if (metaByAttribute[attribute]) {\n continue\n } else {\n metaByAttribute[attribute] = true\n }\n }\n\n resultMeta.push({\n tag: 'meta',\n attrs: {\n ...m,\n nonce,\n },\n })\n }\n }\n }\n\n if (title) {\n resultMeta.push(title)\n }\n\n if (router.options.ssr?.nonce) {\n resultMeta.push({\n tag: 'meta',\n attrs: {\n property: 'csp-nonce',\n content: router.options.ssr.nonce,\n },\n })\n }\n resultMeta.reverse()\n\n return resultMeta\n })\n\n const links = useRouterState({\n select: (state) => {\n const constructed = state.matches\n .map((match) => match.links!)\n .filter(Boolean)\n .flat(1)\n .map((link) => ({\n tag: 'link',\n attrs: {\n ...link,\n nonce,\n },\n })) satisfies Array<RouterManagedTag>\n\n const manifest = router.ssr?.manifest\n\n // These are the assets extracted from the ViteManifest\n // using the `startManifestPlugin`\n const assets = state.matches\n .map((match) => manifest?.routes[match.routeId]?.assets ?? [])\n .filter(Boolean)\n .flat(1)\n .filter((asset) => asset.tag === 'link')\n .map(\n (asset) =>\n ({\n tag: 'link',\n attrs: { ...asset.attrs, nonce },\n }) satisfies RouterManagedTag,\n )\n\n return [...constructed, ...assets]\n },\n })\n\n const preloadLinks = useRouterState({\n select: (state) => {\n const preloadLinks: Array<RouterManagedTag> = []\n\n state.matches\n .map((match) => router.looseRoutesById[match.routeId]!)\n .forEach((route) =>\n router.ssr?.manifest?.routes[route.id]?.preloads\n ?.filter(Boolean)\n .forEach((preload) => {\n preloadLinks.push({\n tag: 'link',\n attrs: {\n rel: 'modulepreload',\n href: preload,\n nonce,\n },\n })\n }),\n )\n\n return preloadLinks\n },\n })\n\n const styles = useRouterState({\n select: (state) =>\n (\n state.matches\n .map((match) => match.styles!)\n .flat(1)\n .filter(Boolean) as Array<RouterManagedTag>\n ).map(({ children, ...style }) => ({\n tag: 'style',\n attrs: {\n ...style,\n nonce,\n },\n children,\n })),\n })\n\n const headScripts = useRouterState({\n select: (state) =>\n (\n state.matches\n .map((match) => match.headScripts!)\n .flat(1)\n .filter(Boolean) as Array<RouterManagedTag>\n ).map(({ children, ...script }) => ({\n tag: 'script',\n attrs: {\n ...script,\n nonce,\n },\n children,\n })),\n })\n\n return () =>\n uniqBy(\n [\n ...meta(),\n ...preloadLinks(),\n ...links(),\n ...styles(),\n ...headScripts(),\n ] as Array<RouterManagedTag>,\n (d) => {\n return JSON.stringify(d)\n },\n )\n}\n\n/**\n * @description The `HeadContent` component is used to render meta tags, links, and scripts for the current route.\n * When using full document hydration (hydrating from `<html>`), this component should be rendered in the `<body>`\n * to ensure it's part of the reactive tree and updates correctly during client-side navigation.\n * The component uses portals internally to render content into the `<head>` element.\n */\nexport function HeadContent() {\n const tags = useTags()\n\n return (\n <MetaProvider>\n <For each={tags()}>{(tag) => <Asset {...tag} />}</For>\n </MetaProvider>\n )\n}\n\nfunction uniqBy<T>(arr: Array<T>, fn: (item: T) => string) {\n const seen = new Set<string>()\n return arr.filter((item) => {\n const key = fn(item)\n if (seen.has(key)) {\n return false\n }\n seen.add(key)\n return true\n })\n}\n"],"names":["useTags","router","useRouter","nonce","options","ssr","routeMeta","useRouterState","select","state","matches","map","match","meta","filter","Boolean","Solid","createMemo","resultMeta","metaByAttribute","title","routeMetasArray","i","length","metas","j","m","tag","children","attribute","name","property","push","attrs","content","reverse","links","constructed","flat","link","manifest","assets","routes","routeId","asset","preloadLinks","looseRoutesById","forEach","route","id","preloads","preload","rel","href","styles","style","headScripts","script","uniqBy","d","JSON","stringify","HeadContent","tags","_$createComponent","MetaProvider","For","each","Asset","arr","fn","seen","Set","item","key","has","add"],"mappings":"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"}
@@ -12,15 +12,8 @@ function ScriptOnce({
12
12
  }
13
13
  return (() => {
14
14
  var _el$ = _tmpl$();
15
- Solid.effect((_p$) => {
16
- var _v$ = router.options.ssr?.nonce, _v$2 = [children].filter(Boolean).join("\n") + ";$_TSR.c()";
17
- _v$ !== _p$.e && Solid.setAttribute(_el$, "nonce", _p$.e = _v$);
18
- _v$2 !== _p$.t && (_el$.innerHTML = _p$.t = _v$2);
19
- return _p$;
20
- }, {
21
- e: void 0,
22
- t: void 0
23
- });
15
+ _el$.innerHTML = children + ';typeof $_TSR !== "undefined" && $_TSR?.c()';
16
+ Solid.effect(() => Solid.setAttribute(_el$, "nonce", router.options.ssr?.nonce));
24
17
  return _el$;
25
18
  })();
26
19
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ScriptOnce.cjs","sources":["../../src/ScriptOnce.tsx"],"sourcesContent":["import { useRouter } from './useRouter'\n\nexport function ScriptOnce({\n children,\n}: {\n children: string\n log?: boolean\n sync?: boolean\n}) {\n const router = useRouter()\n if (!router.isServer) {\n return null\n }\n return (\n <script\n nonce={router.options.ssr?.nonce}\n class=\"$tsr\"\n innerHTML={[children].filter(Boolean).join('\\n') + ';$_TSR.c()'}\n />\n )\n}\n"],"names":["ScriptOnce","children","router","useRouter","isServer","_el$","_tmpl$","_$effect","_p$","_v$","options","ssr","nonce","_v$2","filter","Boolean","join","e","_$setAttribute","t","innerHTML","undefined"],"mappings":";;;;;AAEO,SAASA,WAAW;AAAA,EACzBC;AAKF,GAAG;AACD,QAAMC,SAASC,UAAAA,UAAAA;AACf,MAAI,CAACD,OAAOE,UAAU;AACpB,WAAO;AAAA,EACT;AACA,UAAA,MAAA;AAAA,QAAAC,OAAAC,OAAAA;AAAAC,UAAAA,OAAAC,CAAAA,QAAA;AAAA,UAAAC,MAEWP,OAAOQ,QAAQC,KAAKC,OAAKC,OAErB,CAACZ,QAAQ,EAAEa,OAAOC,OAAO,EAAEC,KAAK,IAAI,IAAI;AAAYP,cAAAD,IAAAS,KAAAC,MAAAA,aAAAb,MAAA,SAAAG,IAAAS,IAAAR,GAAA;AAAAI,eAAAL,IAAAW,MAAAd,KAAAe,YAAAZ,IAAAW,IAAAN;AAAA,aAAAL;AAAAA,IAAA,GAAA;AAAA,MAAAS,GAAAI;AAAAA,MAAAF,GAAAE;AAAAA,IAAAA,CAAA;AAAA,WAAAhB;AAAAA,EAAA,GAAA;AAGrE;;"}
1
+ {"version":3,"file":"ScriptOnce.cjs","sources":["../../src/ScriptOnce.tsx"],"sourcesContent":["import { useRouter } from './useRouter'\n\nexport function ScriptOnce({\n children,\n}: {\n children: string\n log?: boolean\n sync?: boolean\n}) {\n const router = useRouter()\n if (!router.isServer) {\n return null\n }\n return (\n <script\n nonce={router.options.ssr?.nonce}\n class=\"$tsr\"\n innerHTML={children + ';typeof $_TSR !== \"undefined\" && $_TSR?.c()'}\n />\n )\n}\n"],"names":["ScriptOnce","children","router","useRouter","isServer","_el$","_tmpl$","innerHTML","_$effect","_$setAttribute","options","ssr","nonce"],"mappings":";;;;;AAEO,SAASA,WAAW;AAAA,EACzBC;AAKF,GAAG;AACD,QAAMC,SAASC,UAAAA,UAAAA;AACf,MAAI,CAACD,OAAOE,UAAU;AACpB,WAAO;AAAA,EACT;AACA,UAAA,MAAA;AAAA,QAAAC,OAAAC,OAAAA;AAAAD,SAAAE,YAIeN,WAAW;AAA6CO,iBAAA,MAAAC,MAAAA,aAAAJ,MAAA,SAF5DH,OAAOQ,QAAQC,KAAKC,KAAK,CAAA;AAAA,WAAAP;AAAAA,EAAA,GAAA;AAKtC;;"}
@@ -42,7 +42,14 @@ const Scripts = () => {
42
42
  }))
43
43
  })
44
44
  });
45
+ let serverBufferedScript = void 0;
46
+ if (router.serverSsr) {
47
+ serverBufferedScript = router.serverSsr.takeBufferedScripts();
48
+ }
45
49
  const allScripts = [...scripts().scripts, ...assetScripts()];
50
+ if (serverBufferedScript) {
51
+ allScripts.unshift(serverBufferedScript);
52
+ }
46
53
  return Solid.memo(() => allScripts.map((asset, i) => Solid.createComponent(Asset.Asset, asset)));
47
54
  };
48
55
  exports.Scripts = Scripts;
@@ -1 +1 @@
1
- {"version":3,"file":"Scripts.cjs","sources":["../../src/Scripts.tsx"],"sourcesContent":["import { Asset } from './Asset'\nimport { useRouterState } from './useRouterState'\nimport { useRouter } from './useRouter'\nimport type { RouterManagedTag } from '@tanstack/router-core'\n\nexport const Scripts = () => {\n const router = useRouter()\n const nonce = router.options.ssr?.nonce\n const assetScripts = useRouterState({\n select: (state) => {\n const assetScripts: Array<RouterManagedTag> = []\n const manifest = router.ssr?.manifest\n\n if (!manifest) {\n return []\n }\n\n state.matches\n .map((match) => router.looseRoutesById[match.routeId]!)\n .forEach((route) =>\n manifest.routes[route.id]?.assets\n ?.filter((d) => d.tag === 'script')\n .forEach((asset) => {\n assetScripts.push({\n tag: 'script',\n attrs: { ...asset.attrs, nonce },\n children: asset.children,\n } as any)\n }),\n )\n\n return assetScripts\n },\n })\n\n const scripts = useRouterState({\n select: (state) => ({\n scripts: (\n state.matches\n .map((match) => match.scripts!)\n .flat(1)\n .filter(Boolean) as Array<RouterManagedTag>\n ).map(({ children, ...script }) => ({\n tag: 'script',\n attrs: {\n ...script,\n nonce,\n },\n children,\n })),\n }),\n })\n\n const allScripts = [\n ...scripts().scripts,\n ...assetScripts(),\n ] as Array<RouterManagedTag>\n\n return (\n <>\n {allScripts.map((asset, i) => (\n <Asset {...asset} />\n ))}\n </>\n )\n}\n"],"names":["Scripts","router","useRouter","nonce","options","ssr","assetScripts","useRouterState","select","state","manifest","matches","map","match","looseRoutesById","routeId","forEach","route","routes","id","assets","filter","d","tag","asset","push","attrs","children","scripts","flat","Boolean","script","allScripts","_$memo","i","_$createComponent","Asset"],"mappings":";;;;;;AAKO,MAAMA,UAAUA,MAAM;AAC3B,QAAMC,SAASC,UAAAA,UAAAA;AACf,QAAMC,QAAQF,OAAOG,QAAQC,KAAKF;AAClC,QAAMG,eAAeC,eAAAA,eAAe;AAAA,IAClCC,QAASC,CAAAA,UAAU;AACjB,YAAMH,gBAAwC,CAAA;AAC9C,YAAMI,WAAWT,OAAOI,KAAKK;AAE7B,UAAI,CAACA,UAAU;AACb,eAAO,CAAA;AAAA,MACT;AAEAD,YAAME,QACHC,IAAKC,CAAAA,UAAUZ,OAAOa,gBAAgBD,MAAME,OAAO,CAAE,EACrDC,QAASC,CAAAA,UACRP,SAASQ,OAAOD,MAAME,EAAE,GAAGC,QACvBC,OAAQC,CAAAA,MAAMA,EAAEC,QAAQ,QAAQ,EACjCP,QAASQ,CAAAA,UAAU;AAClBlB,sBAAamB,KAAK;AAAA,UAChBF,KAAK;AAAA,UACLG,OAAO;AAAA,YAAE,GAAGF,MAAME;AAAAA,YAAOvB;AAAAA,UAAAA;AAAAA,UACzBwB,UAAUH,MAAMG;AAAAA,QAAAA,CACV;AAAA,MACV,CAAC,CACL;AAEF,aAAOrB;AAAAA,IACT;AAAA,EAAA,CACD;AAED,QAAMsB,UAAUrB,eAAAA,eAAe;AAAA,IAC7BC,QAASC,CAAAA,WAAW;AAAA,MAClBmB,SACEnB,MAAME,QACHC,IAAKC,WAAUA,MAAMe,OAAQ,EAC7BC,KAAK,CAAC,EACNR,OAAOS,OAAO,EACjBlB,IAAI,CAAC;AAAA,QAAEe;AAAAA,QAAU,GAAGI;AAAAA,MAAAA,OAAc;AAAA,QAClCR,KAAK;AAAA,QACLG,OAAO;AAAA,UACL,GAAGK;AAAAA,UACH5B;AAAAA,QAAAA;AAAAA,QAEFwB;AAAAA,MAAAA,EACA;AAAA,IAAA;AAAA,EACJ,CACD;AAED,QAAMK,aAAa,CACjB,GAAGJ,QAAAA,EAAUA,SACb,GAAGtB,cAAc;AAGnB,SAAA2B,WAAA,MAEKD,WAAWpB,IAAI,CAACY,OAAOU,MAACC,sBACtBC,MAAAA,OAAUZ,KAAK,CACjB,CAAC;AAGR;;"}
1
+ {"version":3,"file":"Scripts.cjs","sources":["../../src/Scripts.tsx"],"sourcesContent":["import { Asset } from './Asset'\nimport { useRouterState } from './useRouterState'\nimport { useRouter } from './useRouter'\nimport type { RouterManagedTag } from '@tanstack/router-core'\n\nexport const Scripts = () => {\n const router = useRouter()\n const nonce = router.options.ssr?.nonce\n const assetScripts = useRouterState({\n select: (state) => {\n const assetScripts: Array<RouterManagedTag> = []\n const manifest = router.ssr?.manifest\n\n if (!manifest) {\n return []\n }\n\n state.matches\n .map((match) => router.looseRoutesById[match.routeId]!)\n .forEach((route) =>\n manifest.routes[route.id]?.assets\n ?.filter((d) => d.tag === 'script')\n .forEach((asset) => {\n assetScripts.push({\n tag: 'script',\n attrs: { ...asset.attrs, nonce },\n children: asset.children,\n } as any)\n }),\n )\n\n return assetScripts\n },\n })\n\n const scripts = useRouterState({\n select: (state) => ({\n scripts: (\n state.matches\n .map((match) => match.scripts!)\n .flat(1)\n .filter(Boolean) as Array<RouterManagedTag>\n ).map(({ children, ...script }) => ({\n tag: 'script',\n attrs: {\n ...script,\n nonce,\n },\n children,\n })),\n }),\n })\n\n let serverBufferedScript: RouterManagedTag | undefined = undefined\n\n if (router.serverSsr) {\n serverBufferedScript = router.serverSsr.takeBufferedScripts()\n }\n\n const allScripts = [\n ...scripts().scripts,\n ...assetScripts(),\n ] as Array<RouterManagedTag>\n\n if (serverBufferedScript) {\n allScripts.unshift(serverBufferedScript)\n }\n\n return (\n <>\n {allScripts.map((asset, i) => (\n <Asset {...asset} />\n ))}\n </>\n )\n}\n"],"names":["Scripts","router","useRouter","nonce","options","ssr","assetScripts","useRouterState","select","state","manifest","matches","map","match","looseRoutesById","routeId","forEach","route","routes","id","assets","filter","d","tag","asset","push","attrs","children","scripts","flat","Boolean","script","serverBufferedScript","undefined","serverSsr","takeBufferedScripts","allScripts","unshift","_$memo","i","_$createComponent","Asset"],"mappings":";;;;;;AAKO,MAAMA,UAAUA,MAAM;AAC3B,QAAMC,SAASC,UAAAA,UAAAA;AACf,QAAMC,QAAQF,OAAOG,QAAQC,KAAKF;AAClC,QAAMG,eAAeC,eAAAA,eAAe;AAAA,IAClCC,QAASC,CAAAA,UAAU;AACjB,YAAMH,gBAAwC,CAAA;AAC9C,YAAMI,WAAWT,OAAOI,KAAKK;AAE7B,UAAI,CAACA,UAAU;AACb,eAAO,CAAA;AAAA,MACT;AAEAD,YAAME,QACHC,IAAKC,CAAAA,UAAUZ,OAAOa,gBAAgBD,MAAME,OAAO,CAAE,EACrDC,QAASC,CAAAA,UACRP,SAASQ,OAAOD,MAAME,EAAE,GAAGC,QACvBC,OAAQC,CAAAA,MAAMA,EAAEC,QAAQ,QAAQ,EACjCP,QAASQ,CAAAA,UAAU;AAClBlB,sBAAamB,KAAK;AAAA,UAChBF,KAAK;AAAA,UACLG,OAAO;AAAA,YAAE,GAAGF,MAAME;AAAAA,YAAOvB;AAAAA,UAAAA;AAAAA,UACzBwB,UAAUH,MAAMG;AAAAA,QAAAA,CACV;AAAA,MACV,CAAC,CACL;AAEF,aAAOrB;AAAAA,IACT;AAAA,EAAA,CACD;AAED,QAAMsB,UAAUrB,eAAAA,eAAe;AAAA,IAC7BC,QAASC,CAAAA,WAAW;AAAA,MAClBmB,SACEnB,MAAME,QACHC,IAAKC,WAAUA,MAAMe,OAAQ,EAC7BC,KAAK,CAAC,EACNR,OAAOS,OAAO,EACjBlB,IAAI,CAAC;AAAA,QAAEe;AAAAA,QAAU,GAAGI;AAAAA,MAAAA,OAAc;AAAA,QAClCR,KAAK;AAAA,QACLG,OAAO;AAAA,UACL,GAAGK;AAAAA,UACH5B;AAAAA,QAAAA;AAAAA,QAEFwB;AAAAA,MAAAA,EACA;AAAA,IAAA;AAAA,EACJ,CACD;AAED,MAAIK,uBAAqDC;AAEzD,MAAIhC,OAAOiC,WAAW;AACpBF,2BAAuB/B,OAAOiC,UAAUC,oBAAAA;AAAAA,EAC1C;AAEA,QAAMC,aAAa,CACjB,GAAGR,QAAAA,EAAUA,SACb,GAAGtB,cAAc;AAGnB,MAAI0B,sBAAsB;AACxBI,eAAWC,QAAQL,oBAAoB;AAAA,EACzC;AAEA,SAAAM,WAAA,MAEKF,WAAWxB,IAAI,CAACY,OAAOe,MAACC,sBACtBC,MAAAA,OAAUjB,KAAK,CACjB,CAAC;AAGR;;"}
package/dist/esm/Asset.js CHANGED
@@ -91,23 +91,23 @@ function Script({
91
91
  });
92
92
  }
93
93
  });
94
- if (router && !router.isServer) {
95
- return null;
94
+ if (!router.isServer) {
95
+ return _tmpl$();
96
96
  }
97
97
  if (attrs?.src && typeof attrs.src === "string") {
98
98
  return (() => {
99
- var _el$ = _tmpl$();
100
- spread(_el$, attrs, false, false);
101
- return _el$;
99
+ var _el$2 = _tmpl$();
100
+ spread(_el$2, attrs, false, false);
101
+ return _el$2;
102
102
  })();
103
103
  }
104
104
  if (typeof children === "string") {
105
105
  return (() => {
106
- var _el$2 = _tmpl$();
107
- spread(_el$2, mergeProps(attrs, {
106
+ var _el$3 = _tmpl$();
107
+ spread(_el$3, mergeProps(attrs, {
108
108
  "innerHTML": children
109
109
  }), false, false);
110
- return _el$2;
110
+ return _el$3;
111
111
  })();
112
112
  }
113
113
  return null;
@@ -1 +1 @@
1
- {"version":3,"file":"Asset.js","sources":["../../src/Asset.tsx"],"sourcesContent":["import { Link, Meta, Style, Title } from '@solidjs/meta'\nimport { onCleanup, onMount } from 'solid-js'\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} innerHTML={children} />\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\n onMount(() => {\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 (router && !router.isServer) {\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"],"names":["Asset","tag","attrs","children","_$createComponent","Title","_$mergeProps","Meta","Link","Style","innerHTML","Script","router","useRouter","onMount","src","normSrc","base","document","baseURI","window","location","href","URL","existingScript","Array","from","querySelectorAll","find","el","script","createElement","key","value","Object","entries","undefined","setAttribute","String","head","appendChild","onCleanup","parentNode","removeChild","typeAttr","type","nonceAttr","nonce","HTMLScriptElement","sType","getAttribute","sNonce","textContent","isServer","_el$","_tmpl$","_$spread","_el$2"],"mappings":"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"}
1
+ {"version":3,"file":"Asset.js","sources":["../../src/Asset.tsx"],"sourcesContent":["import { Link, Meta, Style, Title } from '@solidjs/meta'\nimport { onCleanup, onMount } from 'solid-js'\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} innerHTML={children} />\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\n onMount(() => {\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 (!router.isServer) {\n // render an empty script on the client just to avoid hydration errors\n return <script />\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"],"names":["Asset","tag","attrs","children","_$createComponent","Title","_$mergeProps","Meta","Link","Style","innerHTML","Script","router","useRouter","onMount","src","normSrc","base","document","baseURI","window","location","href","URL","existingScript","Array","from","querySelectorAll","find","el","script","createElement","key","value","Object","entries","undefined","setAttribute","String","head","appendChild","onCleanup","parentNode","removeChild","typeAttr","type","nonceAttr","nonce","HTMLScriptElement","sType","getAttribute","sNonce","textContent","isServer","_tmpl$","_el$2","_$spread","_el$3"],"mappings":"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"}
@@ -84,11 +84,11 @@ const useTags = () => {
84
84
  return [...constructed, ...assets];
85
85
  }
86
86
  });
87
- const preloadMeta = useRouterState({
87
+ const preloadLinks = useRouterState({
88
88
  select: (state) => {
89
- const preloadMeta2 = [];
89
+ const preloadLinks2 = [];
90
90
  state.matches.map((match) => router.looseRoutesById[match.routeId]).forEach((route) => router.ssr?.manifest?.routes[route.id]?.preloads?.filter(Boolean).forEach((preload) => {
91
- preloadMeta2.push({
91
+ preloadLinks2.push({
92
92
  tag: "link",
93
93
  attrs: {
94
94
  rel: "modulepreload",
@@ -97,7 +97,7 @@ const useTags = () => {
97
97
  }
98
98
  });
99
99
  }));
100
- return preloadMeta2;
100
+ return preloadLinks2;
101
101
  }
102
102
  });
103
103
  const styles = useRouterState({
@@ -126,21 +126,7 @@ const useTags = () => {
126
126
  children
127
127
  }))
128
128
  });
129
- let serverHeadScript = void 0;
130
- if (router.serverSsr) {
131
- const bufferedScripts = router.serverSsr.takeBufferedScripts();
132
- if (bufferedScripts) {
133
- serverHeadScript = {
134
- tag: "script",
135
- attrs: {
136
- nonce,
137
- class: "$tsr"
138
- },
139
- children: bufferedScripts
140
- };
141
- }
142
- }
143
- return () => uniqBy([...meta(), ...preloadMeta(), ...links(), ...styles(), ...serverHeadScript ? [serverHeadScript] : [], ...headScripts()], (d) => {
129
+ return () => uniqBy([...meta(), ...preloadLinks(), ...links(), ...styles(), ...headScripts()], (d) => {
144
130
  return JSON.stringify(d);
145
131
  });
146
132
  };
@@ -1 +1 @@
1
- {"version":3,"file":"HeadContent.js","sources":["../../src/HeadContent.tsx"],"sourcesContent":["import * as Solid from 'solid-js'\nimport { MetaProvider } from '@solidjs/meta'\nimport { For } from 'solid-js'\nimport { Asset } from './Asset'\nimport { useRouter } from './useRouter'\nimport { useRouterState } from './useRouterState'\nimport type { RouterManagedTag } from '@tanstack/router-core'\n\nexport const useTags = () => {\n const router = useRouter()\n const nonce = router.options.ssr?.nonce\n const routeMeta = useRouterState({\n select: (state) => {\n return state.matches.map((match) => match.meta!).filter(Boolean)\n },\n })\n\n const meta: Solid.Accessor<Array<RouterManagedTag>> = Solid.createMemo(() => {\n const resultMeta: Array<RouterManagedTag> = []\n const metaByAttribute: Record<string, true> = {}\n let title: RouterManagedTag | undefined\n const routeMetasArray = routeMeta()\n for (let i = routeMetasArray.length - 1; i >= 0; i--) {\n const metas = routeMetasArray[i]!\n for (let j = metas.length - 1; j >= 0; j--) {\n const m = metas[j]\n if (!m) continue\n\n if (m.title) {\n if (!title) {\n title = {\n tag: 'title',\n children: m.title,\n }\n }\n } else {\n const attribute = m.name ?? m.property\n if (attribute) {\n if (metaByAttribute[attribute]) {\n continue\n } else {\n metaByAttribute[attribute] = true\n }\n }\n\n resultMeta.push({\n tag: 'meta',\n attrs: {\n ...m,\n nonce,\n },\n })\n }\n }\n }\n\n if (title) {\n resultMeta.push(title)\n }\n\n if (router.options.ssr?.nonce) {\n resultMeta.push({\n tag: 'meta',\n attrs: {\n property: 'csp-nonce',\n content: router.options.ssr.nonce,\n },\n })\n }\n resultMeta.reverse()\n\n return resultMeta\n })\n\n const links = useRouterState({\n select: (state) => {\n const constructed = state.matches\n .map((match) => match.links!)\n .filter(Boolean)\n .flat(1)\n .map((link) => ({\n tag: 'link',\n attrs: {\n ...link,\n nonce,\n },\n })) satisfies Array<RouterManagedTag>\n\n const manifest = router.ssr?.manifest\n\n // These are the assets extracted from the ViteManifest\n // using the `startManifestPlugin`\n const assets = state.matches\n .map((match) => manifest?.routes[match.routeId]?.assets ?? [])\n .filter(Boolean)\n .flat(1)\n .filter((asset) => asset.tag === 'link')\n .map(\n (asset) =>\n ({\n tag: 'link',\n attrs: { ...asset.attrs, nonce },\n }) satisfies RouterManagedTag,\n )\n\n return [...constructed, ...assets]\n },\n })\n\n const preloadMeta = useRouterState({\n select: (state) => {\n const preloadMeta: Array<RouterManagedTag> = []\n\n state.matches\n .map((match) => router.looseRoutesById[match.routeId]!)\n .forEach((route) =>\n router.ssr?.manifest?.routes[route.id]?.preloads\n ?.filter(Boolean)\n .forEach((preload) => {\n preloadMeta.push({\n tag: 'link',\n attrs: {\n rel: 'modulepreload',\n href: preload,\n nonce,\n },\n })\n }),\n )\n\n return preloadMeta\n },\n })\n\n const styles = useRouterState({\n select: (state) =>\n (\n state.matches\n .map((match) => match.styles!)\n .flat(1)\n .filter(Boolean) as Array<RouterManagedTag>\n ).map(({ children, ...style }) => ({\n tag: 'style',\n attrs: {\n ...style,\n nonce,\n },\n children,\n })),\n })\n\n const headScripts = useRouterState({\n select: (state) =>\n (\n state.matches\n .map((match) => match.headScripts!)\n .flat(1)\n .filter(Boolean) as Array<RouterManagedTag>\n ).map(({ children, ...script }) => ({\n tag: 'script',\n attrs: {\n ...script,\n nonce,\n },\n children,\n })),\n })\n\n let serverHeadScript: RouterManagedTag | undefined = undefined\n\n if (router.serverSsr) {\n const bufferedScripts = router.serverSsr.takeBufferedScripts()\n if (bufferedScripts) {\n serverHeadScript = {\n tag: 'script',\n attrs: {\n nonce,\n class: '$tsr',\n },\n children: bufferedScripts,\n }\n }\n }\n\n return () =>\n uniqBy(\n [\n ...meta(),\n ...preloadMeta(),\n ...links(),\n ...styles(),\n ...(serverHeadScript ? [serverHeadScript] : []),\n ...headScripts(),\n ] as Array<RouterManagedTag>,\n (d) => {\n return JSON.stringify(d)\n },\n )\n}\n\n/**\n * @description The `HeadContent` component is used to render meta tags, links, and scripts for the current route.\n * When using full document hydration (hydrating from `<html>`), this component should be rendered in the `<body>`\n * to ensure it's part of the reactive tree and updates correctly during client-side navigation.\n * The component uses portals internally to render content into the `<head>` element.\n */\nexport function HeadContent() {\n const tags = useTags()\n\n return (\n <MetaProvider>\n <For each={tags()}>{(tag) => <Asset {...tag} />}</For>\n </MetaProvider>\n )\n}\n\nfunction uniqBy<T>(arr: Array<T>, fn: (item: T) => string) {\n const seen = new Set<string>()\n return arr.filter((item) => {\n const key = fn(item)\n if (seen.has(key)) {\n return false\n }\n seen.add(key)\n return true\n })\n}\n"],"names":["useTags","router","useRouter","nonce","options","ssr","routeMeta","useRouterState","select","state","matches","map","match","meta","filter","Boolean","Solid","createMemo","resultMeta","metaByAttribute","title","routeMetasArray","i","length","metas","j","m","tag","children","attribute","name","property","push","attrs","content","reverse","links","constructed","flat","link","manifest","assets","routes","routeId","asset","preloadMeta","looseRoutesById","forEach","route","id","preloads","preload","rel","href","styles","style","headScripts","script","serverHeadScript","undefined","serverSsr","bufferedScripts","takeBufferedScripts","class","uniqBy","d","JSON","stringify","HeadContent","tags","_$createComponent","MetaProvider","For","each","Asset","arr","fn","seen","Set","item","key","has","add"],"mappings":"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"}
1
+ {"version":3,"file":"HeadContent.js","sources":["../../src/HeadContent.tsx"],"sourcesContent":["import * as Solid from 'solid-js'\nimport { MetaProvider } from '@solidjs/meta'\nimport { For } from 'solid-js'\nimport { Asset } from './Asset'\nimport { useRouter } from './useRouter'\nimport { useRouterState } from './useRouterState'\nimport type { RouterManagedTag } from '@tanstack/router-core'\n\nexport const useTags = () => {\n const router = useRouter()\n const nonce = router.options.ssr?.nonce\n const routeMeta = useRouterState({\n select: (state) => {\n return state.matches.map((match) => match.meta!).filter(Boolean)\n },\n })\n\n const meta: Solid.Accessor<Array<RouterManagedTag>> = Solid.createMemo(() => {\n const resultMeta: Array<RouterManagedTag> = []\n const metaByAttribute: Record<string, true> = {}\n let title: RouterManagedTag | undefined\n const routeMetasArray = routeMeta()\n for (let i = routeMetasArray.length - 1; i >= 0; i--) {\n const metas = routeMetasArray[i]!\n for (let j = metas.length - 1; j >= 0; j--) {\n const m = metas[j]\n if (!m) continue\n\n if (m.title) {\n if (!title) {\n title = {\n tag: 'title',\n children: m.title,\n }\n }\n } else {\n const attribute = m.name ?? m.property\n if (attribute) {\n if (metaByAttribute[attribute]) {\n continue\n } else {\n metaByAttribute[attribute] = true\n }\n }\n\n resultMeta.push({\n tag: 'meta',\n attrs: {\n ...m,\n nonce,\n },\n })\n }\n }\n }\n\n if (title) {\n resultMeta.push(title)\n }\n\n if (router.options.ssr?.nonce) {\n resultMeta.push({\n tag: 'meta',\n attrs: {\n property: 'csp-nonce',\n content: router.options.ssr.nonce,\n },\n })\n }\n resultMeta.reverse()\n\n return resultMeta\n })\n\n const links = useRouterState({\n select: (state) => {\n const constructed = state.matches\n .map((match) => match.links!)\n .filter(Boolean)\n .flat(1)\n .map((link) => ({\n tag: 'link',\n attrs: {\n ...link,\n nonce,\n },\n })) satisfies Array<RouterManagedTag>\n\n const manifest = router.ssr?.manifest\n\n // These are the assets extracted from the ViteManifest\n // using the `startManifestPlugin`\n const assets = state.matches\n .map((match) => manifest?.routes[match.routeId]?.assets ?? [])\n .filter(Boolean)\n .flat(1)\n .filter((asset) => asset.tag === 'link')\n .map(\n (asset) =>\n ({\n tag: 'link',\n attrs: { ...asset.attrs, nonce },\n }) satisfies RouterManagedTag,\n )\n\n return [...constructed, ...assets]\n },\n })\n\n const preloadLinks = useRouterState({\n select: (state) => {\n const preloadLinks: Array<RouterManagedTag> = []\n\n state.matches\n .map((match) => router.looseRoutesById[match.routeId]!)\n .forEach((route) =>\n router.ssr?.manifest?.routes[route.id]?.preloads\n ?.filter(Boolean)\n .forEach((preload) => {\n preloadLinks.push({\n tag: 'link',\n attrs: {\n rel: 'modulepreload',\n href: preload,\n nonce,\n },\n })\n }),\n )\n\n return preloadLinks\n },\n })\n\n const styles = useRouterState({\n select: (state) =>\n (\n state.matches\n .map((match) => match.styles!)\n .flat(1)\n .filter(Boolean) as Array<RouterManagedTag>\n ).map(({ children, ...style }) => ({\n tag: 'style',\n attrs: {\n ...style,\n nonce,\n },\n children,\n })),\n })\n\n const headScripts = useRouterState({\n select: (state) =>\n (\n state.matches\n .map((match) => match.headScripts!)\n .flat(1)\n .filter(Boolean) as Array<RouterManagedTag>\n ).map(({ children, ...script }) => ({\n tag: 'script',\n attrs: {\n ...script,\n nonce,\n },\n children,\n })),\n })\n\n return () =>\n uniqBy(\n [\n ...meta(),\n ...preloadLinks(),\n ...links(),\n ...styles(),\n ...headScripts(),\n ] as Array<RouterManagedTag>,\n (d) => {\n return JSON.stringify(d)\n },\n )\n}\n\n/**\n * @description The `HeadContent` component is used to render meta tags, links, and scripts for the current route.\n * When using full document hydration (hydrating from `<html>`), this component should be rendered in the `<body>`\n * to ensure it's part of the reactive tree and updates correctly during client-side navigation.\n * The component uses portals internally to render content into the `<head>` element.\n */\nexport function HeadContent() {\n const tags = useTags()\n\n return (\n <MetaProvider>\n <For each={tags()}>{(tag) => <Asset {...tag} />}</For>\n </MetaProvider>\n )\n}\n\nfunction uniqBy<T>(arr: Array<T>, fn: (item: T) => string) {\n const seen = new Set<string>()\n return arr.filter((item) => {\n const key = fn(item)\n if (seen.has(key)) {\n return false\n }\n seen.add(key)\n return true\n })\n}\n"],"names":["useTags","router","useRouter","nonce","options","ssr","routeMeta","useRouterState","select","state","matches","map","match","meta","filter","Boolean","Solid","createMemo","resultMeta","metaByAttribute","title","routeMetasArray","i","length","metas","j","m","tag","children","attribute","name","property","push","attrs","content","reverse","links","constructed","flat","link","manifest","assets","routes","routeId","asset","preloadLinks","looseRoutesById","forEach","route","id","preloads","preload","rel","href","styles","style","headScripts","script","uniqBy","d","JSON","stringify","HeadContent","tags","_$createComponent","MetaProvider","For","each","Asset","arr","fn","seen","Set","item","key","has","add"],"mappings":"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"}
@@ -10,15 +10,8 @@ function ScriptOnce({
10
10
  }
11
11
  return (() => {
12
12
  var _el$ = _tmpl$();
13
- effect((_p$) => {
14
- var _v$ = router.options.ssr?.nonce, _v$2 = [children].filter(Boolean).join("\n") + ";$_TSR.c()";
15
- _v$ !== _p$.e && setAttribute(_el$, "nonce", _p$.e = _v$);
16
- _v$2 !== _p$.t && (_el$.innerHTML = _p$.t = _v$2);
17
- return _p$;
18
- }, {
19
- e: void 0,
20
- t: void 0
21
- });
13
+ _el$.innerHTML = children + ';typeof $_TSR !== "undefined" && $_TSR?.c()';
14
+ effect(() => setAttribute(_el$, "nonce", router.options.ssr?.nonce));
22
15
  return _el$;
23
16
  })();
24
17
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ScriptOnce.js","sources":["../../src/ScriptOnce.tsx"],"sourcesContent":["import { useRouter } from './useRouter'\n\nexport function ScriptOnce({\n children,\n}: {\n children: string\n log?: boolean\n sync?: boolean\n}) {\n const router = useRouter()\n if (!router.isServer) {\n return null\n }\n return (\n <script\n nonce={router.options.ssr?.nonce}\n class=\"$tsr\"\n innerHTML={[children].filter(Boolean).join('\\n') + ';$_TSR.c()'}\n />\n )\n}\n"],"names":["ScriptOnce","children","router","useRouter","isServer","_el$","_tmpl$","_$effect","_p$","_v$","options","ssr","nonce","_v$2","filter","Boolean","join","e","_$setAttribute","t","innerHTML","undefined"],"mappings":";;;AAEO,SAASA,WAAW;AAAA,EACzBC;AAKF,GAAG;AACD,QAAMC,SAASC,UAAAA;AACf,MAAI,CAACD,OAAOE,UAAU;AACpB,WAAO;AAAA,EACT;AACA,UAAA,MAAA;AAAA,QAAAC,OAAAC,OAAAA;AAAAC,WAAAC,CAAAA,QAAA;AAAA,UAAAC,MAEWP,OAAOQ,QAAQC,KAAKC,OAAKC,OAErB,CAACZ,QAAQ,EAAEa,OAAOC,OAAO,EAAEC,KAAK,IAAI,IAAI;AAAYP,cAAAD,IAAAS,KAAAC,aAAAb,MAAA,SAAAG,IAAAS,IAAAR,GAAA;AAAAI,eAAAL,IAAAW,MAAAd,KAAAe,YAAAZ,IAAAW,IAAAN;AAAA,aAAAL;AAAAA,IAAA,GAAA;AAAA,MAAAS,GAAAI;AAAAA,MAAAF,GAAAE;AAAAA,IAAAA,CAAA;AAAA,WAAAhB;AAAAA,EAAA,GAAA;AAGrE;"}
1
+ {"version":3,"file":"ScriptOnce.js","sources":["../../src/ScriptOnce.tsx"],"sourcesContent":["import { useRouter } from './useRouter'\n\nexport function ScriptOnce({\n children,\n}: {\n children: string\n log?: boolean\n sync?: boolean\n}) {\n const router = useRouter()\n if (!router.isServer) {\n return null\n }\n return (\n <script\n nonce={router.options.ssr?.nonce}\n class=\"$tsr\"\n innerHTML={children + ';typeof $_TSR !== \"undefined\" && $_TSR?.c()'}\n />\n )\n}\n"],"names":["ScriptOnce","children","router","useRouter","isServer","_el$","_tmpl$","innerHTML","_$effect","_$setAttribute","options","ssr","nonce"],"mappings":";;;AAEO,SAASA,WAAW;AAAA,EACzBC;AAKF,GAAG;AACD,QAAMC,SAASC,UAAAA;AACf,MAAI,CAACD,OAAOE,UAAU;AACpB,WAAO;AAAA,EACT;AACA,UAAA,MAAA;AAAA,QAAAC,OAAAC,OAAAA;AAAAD,SAAAE,YAIeN,WAAW;AAA6CO,WAAA,MAAAC,aAAAJ,MAAA,SAF5DH,OAAOQ,QAAQC,KAAKC,KAAK,CAAA;AAAA,WAAAP;AAAAA,EAAA,GAAA;AAKtC;"}
@@ -40,7 +40,14 @@ const Scripts = () => {
40
40
  }))
41
41
  })
42
42
  });
43
+ let serverBufferedScript = void 0;
44
+ if (router.serverSsr) {
45
+ serverBufferedScript = router.serverSsr.takeBufferedScripts();
46
+ }
43
47
  const allScripts = [...scripts().scripts, ...assetScripts()];
48
+ if (serverBufferedScript) {
49
+ allScripts.unshift(serverBufferedScript);
50
+ }
44
51
  return memo(() => allScripts.map((asset, i) => createComponent(Asset, asset)));
45
52
  };
46
53
  export {
@@ -1 +1 @@
1
- {"version":3,"file":"Scripts.js","sources":["../../src/Scripts.tsx"],"sourcesContent":["import { Asset } from './Asset'\nimport { useRouterState } from './useRouterState'\nimport { useRouter } from './useRouter'\nimport type { RouterManagedTag } from '@tanstack/router-core'\n\nexport const Scripts = () => {\n const router = useRouter()\n const nonce = router.options.ssr?.nonce\n const assetScripts = useRouterState({\n select: (state) => {\n const assetScripts: Array<RouterManagedTag> = []\n const manifest = router.ssr?.manifest\n\n if (!manifest) {\n return []\n }\n\n state.matches\n .map((match) => router.looseRoutesById[match.routeId]!)\n .forEach((route) =>\n manifest.routes[route.id]?.assets\n ?.filter((d) => d.tag === 'script')\n .forEach((asset) => {\n assetScripts.push({\n tag: 'script',\n attrs: { ...asset.attrs, nonce },\n children: asset.children,\n } as any)\n }),\n )\n\n return assetScripts\n },\n })\n\n const scripts = useRouterState({\n select: (state) => ({\n scripts: (\n state.matches\n .map((match) => match.scripts!)\n .flat(1)\n .filter(Boolean) as Array<RouterManagedTag>\n ).map(({ children, ...script }) => ({\n tag: 'script',\n attrs: {\n ...script,\n nonce,\n },\n children,\n })),\n }),\n })\n\n const allScripts = [\n ...scripts().scripts,\n ...assetScripts(),\n ] as Array<RouterManagedTag>\n\n return (\n <>\n {allScripts.map((asset, i) => (\n <Asset {...asset} />\n ))}\n </>\n )\n}\n"],"names":["Scripts","router","useRouter","nonce","options","ssr","assetScripts","useRouterState","select","state","manifest","matches","map","match","looseRoutesById","routeId","forEach","route","routes","id","assets","filter","d","tag","asset","push","attrs","children","scripts","flat","Boolean","script","allScripts","_$memo","i","_$createComponent","Asset"],"mappings":";;;;AAKO,MAAMA,UAAUA,MAAM;AAC3B,QAAMC,SAASC,UAAAA;AACf,QAAMC,QAAQF,OAAOG,QAAQC,KAAKF;AAClC,QAAMG,eAAeC,eAAe;AAAA,IAClCC,QAASC,CAAAA,UAAU;AACjB,YAAMH,gBAAwC,CAAA;AAC9C,YAAMI,WAAWT,OAAOI,KAAKK;AAE7B,UAAI,CAACA,UAAU;AACb,eAAO,CAAA;AAAA,MACT;AAEAD,YAAME,QACHC,IAAKC,CAAAA,UAAUZ,OAAOa,gBAAgBD,MAAME,OAAO,CAAE,EACrDC,QAASC,CAAAA,UACRP,SAASQ,OAAOD,MAAME,EAAE,GAAGC,QACvBC,OAAQC,CAAAA,MAAMA,EAAEC,QAAQ,QAAQ,EACjCP,QAASQ,CAAAA,UAAU;AAClBlB,sBAAamB,KAAK;AAAA,UAChBF,KAAK;AAAA,UACLG,OAAO;AAAA,YAAE,GAAGF,MAAME;AAAAA,YAAOvB;AAAAA,UAAAA;AAAAA,UACzBwB,UAAUH,MAAMG;AAAAA,QAAAA,CACV;AAAA,MACV,CAAC,CACL;AAEF,aAAOrB;AAAAA,IACT;AAAA,EAAA,CACD;AAED,QAAMsB,UAAUrB,eAAe;AAAA,IAC7BC,QAASC,CAAAA,WAAW;AAAA,MAClBmB,SACEnB,MAAME,QACHC,IAAKC,WAAUA,MAAMe,OAAQ,EAC7BC,KAAK,CAAC,EACNR,OAAOS,OAAO,EACjBlB,IAAI,CAAC;AAAA,QAAEe;AAAAA,QAAU,GAAGI;AAAAA,MAAAA,OAAc;AAAA,QAClCR,KAAK;AAAA,QACLG,OAAO;AAAA,UACL,GAAGK;AAAAA,UACH5B;AAAAA,QAAAA;AAAAA,QAEFwB;AAAAA,MAAAA,EACA;AAAA,IAAA;AAAA,EACJ,CACD;AAED,QAAMK,aAAa,CACjB,GAAGJ,QAAAA,EAAUA,SACb,GAAGtB,cAAc;AAGnB,SAAA2B,KAAA,MAEKD,WAAWpB,IAAI,CAACY,OAAOU,MAACC,gBACtBC,OAAUZ,KAAK,CACjB,CAAC;AAGR;"}
1
+ {"version":3,"file":"Scripts.js","sources":["../../src/Scripts.tsx"],"sourcesContent":["import { Asset } from './Asset'\nimport { useRouterState } from './useRouterState'\nimport { useRouter } from './useRouter'\nimport type { RouterManagedTag } from '@tanstack/router-core'\n\nexport const Scripts = () => {\n const router = useRouter()\n const nonce = router.options.ssr?.nonce\n const assetScripts = useRouterState({\n select: (state) => {\n const assetScripts: Array<RouterManagedTag> = []\n const manifest = router.ssr?.manifest\n\n if (!manifest) {\n return []\n }\n\n state.matches\n .map((match) => router.looseRoutesById[match.routeId]!)\n .forEach((route) =>\n manifest.routes[route.id]?.assets\n ?.filter((d) => d.tag === 'script')\n .forEach((asset) => {\n assetScripts.push({\n tag: 'script',\n attrs: { ...asset.attrs, nonce },\n children: asset.children,\n } as any)\n }),\n )\n\n return assetScripts\n },\n })\n\n const scripts = useRouterState({\n select: (state) => ({\n scripts: (\n state.matches\n .map((match) => match.scripts!)\n .flat(1)\n .filter(Boolean) as Array<RouterManagedTag>\n ).map(({ children, ...script }) => ({\n tag: 'script',\n attrs: {\n ...script,\n nonce,\n },\n children,\n })),\n }),\n })\n\n let serverBufferedScript: RouterManagedTag | undefined = undefined\n\n if (router.serverSsr) {\n serverBufferedScript = router.serverSsr.takeBufferedScripts()\n }\n\n const allScripts = [\n ...scripts().scripts,\n ...assetScripts(),\n ] as Array<RouterManagedTag>\n\n if (serverBufferedScript) {\n allScripts.unshift(serverBufferedScript)\n }\n\n return (\n <>\n {allScripts.map((asset, i) => (\n <Asset {...asset} />\n ))}\n </>\n )\n}\n"],"names":["Scripts","router","useRouter","nonce","options","ssr","assetScripts","useRouterState","select","state","manifest","matches","map","match","looseRoutesById","routeId","forEach","route","routes","id","assets","filter","d","tag","asset","push","attrs","children","scripts","flat","Boolean","script","serverBufferedScript","undefined","serverSsr","takeBufferedScripts","allScripts","unshift","_$memo","i","_$createComponent","Asset"],"mappings":";;;;AAKO,MAAMA,UAAUA,MAAM;AAC3B,QAAMC,SAASC,UAAAA;AACf,QAAMC,QAAQF,OAAOG,QAAQC,KAAKF;AAClC,QAAMG,eAAeC,eAAe;AAAA,IAClCC,QAASC,CAAAA,UAAU;AACjB,YAAMH,gBAAwC,CAAA;AAC9C,YAAMI,WAAWT,OAAOI,KAAKK;AAE7B,UAAI,CAACA,UAAU;AACb,eAAO,CAAA;AAAA,MACT;AAEAD,YAAME,QACHC,IAAKC,CAAAA,UAAUZ,OAAOa,gBAAgBD,MAAME,OAAO,CAAE,EACrDC,QAASC,CAAAA,UACRP,SAASQ,OAAOD,MAAME,EAAE,GAAGC,QACvBC,OAAQC,CAAAA,MAAMA,EAAEC,QAAQ,QAAQ,EACjCP,QAASQ,CAAAA,UAAU;AAClBlB,sBAAamB,KAAK;AAAA,UAChBF,KAAK;AAAA,UACLG,OAAO;AAAA,YAAE,GAAGF,MAAME;AAAAA,YAAOvB;AAAAA,UAAAA;AAAAA,UACzBwB,UAAUH,MAAMG;AAAAA,QAAAA,CACV;AAAA,MACV,CAAC,CACL;AAEF,aAAOrB;AAAAA,IACT;AAAA,EAAA,CACD;AAED,QAAMsB,UAAUrB,eAAe;AAAA,IAC7BC,QAASC,CAAAA,WAAW;AAAA,MAClBmB,SACEnB,MAAME,QACHC,IAAKC,WAAUA,MAAMe,OAAQ,EAC7BC,KAAK,CAAC,EACNR,OAAOS,OAAO,EACjBlB,IAAI,CAAC;AAAA,QAAEe;AAAAA,QAAU,GAAGI;AAAAA,MAAAA,OAAc;AAAA,QAClCR,KAAK;AAAA,QACLG,OAAO;AAAA,UACL,GAAGK;AAAAA,UACH5B;AAAAA,QAAAA;AAAAA,QAEFwB;AAAAA,MAAAA,EACA;AAAA,IAAA;AAAA,EACJ,CACD;AAED,MAAIK,uBAAqDC;AAEzD,MAAIhC,OAAOiC,WAAW;AACpBF,2BAAuB/B,OAAOiC,UAAUC,oBAAAA;AAAAA,EAC1C;AAEA,QAAMC,aAAa,CACjB,GAAGR,QAAAA,EAAUA,SACb,GAAGtB,cAAc;AAGnB,MAAI0B,sBAAsB;AACxBI,eAAWC,QAAQL,oBAAoB;AAAA,EACzC;AAEA,SAAAM,KAAA,MAEKF,WAAWxB,IAAI,CAACY,OAAOe,MAACC,gBACtBC,OAAUjB,KAAK,CACjB,CAAC;AAGR;"}
@@ -79,8 +79,9 @@ function Script({ attrs, children, }) {
79
79
  });
80
80
  }
81
81
  });
82
- if (router && !router.isServer) {
83
- return null;
82
+ if (!router.isServer) {
83
+ // render an empty script on the client just to avoid hydration errors
84
+ return <script />;
84
85
  }
85
86
  if (attrs?.src && typeof attrs.src === 'string') {
86
87
  return <script {...attrs}/>;
@@ -1 +1 @@
1
- {"version":3,"file":"Asset.jsx","sourceRoot":"","sources":["../../src/Asset.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Asset.jsx","sourceRoot":"","sources":["../../src/Asset.tsx"],"names":[],"mappings":"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"}
@@ -94,15 +94,15 @@ export const useTags = () => {
94
94
  return [...constructed, ...assets];
95
95
  },
96
96
  });
97
- const preloadMeta = useRouterState({
97
+ const preloadLinks = useRouterState({
98
98
  select: (state) => {
99
- const preloadMeta = [];
99
+ const preloadLinks = [];
100
100
  state.matches
101
101
  .map((match) => router.looseRoutesById[match.routeId])
102
102
  .forEach((route) => router.ssr?.manifest?.routes[route.id]?.preloads
103
103
  ?.filter(Boolean)
104
104
  .forEach((preload) => {
105
- preloadMeta.push({
105
+ preloadLinks.push({
106
106
  tag: 'link',
107
107
  attrs: {
108
108
  rel: 'modulepreload',
@@ -111,7 +111,7 @@ export const useTags = () => {
111
111
  },
112
112
  });
113
113
  }));
114
- return preloadMeta;
114
+ return preloadLinks;
115
115
  },
116
116
  });
117
117
  const styles = useRouterState({
@@ -140,26 +140,11 @@ export const useTags = () => {
140
140
  children,
141
141
  })),
142
142
  });
143
- let serverHeadScript = undefined;
144
- if (router.serverSsr) {
145
- const bufferedScripts = router.serverSsr.takeBufferedScripts();
146
- if (bufferedScripts) {
147
- serverHeadScript = {
148
- tag: 'script',
149
- attrs: {
150
- nonce,
151
- class: '$tsr',
152
- },
153
- children: bufferedScripts,
154
- };
155
- }
156
- }
157
143
  return () => uniqBy([
158
144
  ...meta(),
159
- ...preloadMeta(),
145
+ ...preloadLinks(),
160
146
  ...links(),
161
147
  ...styles(),
162
- ...(serverHeadScript ? [serverHeadScript] : []),
163
148
  ...headScripts(),
164
149
  ], (d) => {
165
150
  return JSON.stringify(d);
@@ -1 +1 @@
1
- {"version":3,"file":"HeadContent.jsx","sourceRoot":"","sources":["../../src/HeadContent.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"HeadContent.jsx","sourceRoot":"","sources":["../../src/HeadContent.tsx"],"names":[],"mappings":"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"}
@@ -4,6 +4,6 @@ export function ScriptOnce({ children, }) {
4
4
  if (!router.isServer) {
5
5
  return null;
6
6
  }
7
- return (<script nonce={router.options.ssr?.nonce} class="$tsr" innerHTML={[children].filter(Boolean).join('\n') + ';$_TSR.c()'}/>);
7
+ return (<script nonce={router.options.ssr?.nonce} class="$tsr" innerHTML={children + ';typeof $_TSR !== "undefined" && $_TSR?.c()'}/>);
8
8
  }
9
9
  //# sourceMappingURL=ScriptOnce.jsx.map
@@ -1 +1 @@
1
- {"version":3,"file":"ScriptOnce.jsx","sourceRoot":"","sources":["../../src/ScriptOnce.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAEvC,MAAM,UAAU,UAAU,CAAC,EACzB,QAAQ,GAKT;IACC,MAAM,MAAM,GAAG,SAAS,EAAE,CAAA;IAC1B,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;QACrB,OAAO,IAAI,CAAA;IACb,CAAC;IACD,OAAO,CACL,CAAC,MAAM,CACL,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,CACjC,KAAK,CAAC,MAAM,CACZ,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,EAChE,CACH,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"ScriptOnce.jsx","sourceRoot":"","sources":["../../src/ScriptOnce.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAEvC,MAAM,UAAU,UAAU,CAAC,EACzB,QAAQ,GAKT;IACC,MAAM,MAAM,GAAG,SAAS,EAAE,CAAA;IAC1B,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;QACrB,OAAO,IAAI,CAAA;IACb,CAAC;IACD,OAAO,CACL,CAAC,MAAM,CACL,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,CACjC,KAAK,CAAC,MAAM,CACZ,SAAS,CAAC,CAAC,QAAQ,GAAG,6CAA6C,CAAC,EACpE,CACH,CAAA;AACH,CAAC"}
@@ -40,10 +40,17 @@ export const Scripts = () => {
40
40
  })),
41
41
  }),
42
42
  });
43
+ let serverBufferedScript = undefined;
44
+ if (router.serverSsr) {
45
+ serverBufferedScript = router.serverSsr.takeBufferedScripts();
46
+ }
43
47
  const allScripts = [
44
48
  ...scripts().scripts,
45
49
  ...assetScripts(),
46
50
  ];
51
+ if (serverBufferedScript) {
52
+ allScripts.unshift(serverBufferedScript);
53
+ }
47
54
  return (<>
48
55
  {allScripts.map((asset, i) => (<Asset {...asset}/>))}
49
56
  </>);
@@ -1 +1 @@
1
- {"version":3,"file":"Scripts.jsx","sourceRoot":"","sources":["../../src/Scripts.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAC/B,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAGvC,MAAM,CAAC,MAAM,OAAO,GAAG,GAAG,EAAE;IAC1B,MAAM,MAAM,GAAG,SAAS,EAAE,CAAA;IAC1B,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAA;IACvC,MAAM,YAAY,GAAG,cAAc,CAAC;QAClC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE;YAChB,MAAM,YAAY,GAA4B,EAAE,CAAA;YAChD,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,EAAE,QAAQ,CAAA;YAErC,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,OAAO,EAAE,CAAA;YACX,CAAC;YAED,KAAK,CAAC,OAAO;iBACV,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,OAAO,CAAE,CAAC;iBACtD,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CACjB,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,MAAM;gBAC/B,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,QAAQ,CAAC;iBAClC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;gBACjB,YAAY,CAAC,IAAI,CAAC;oBAChB,GAAG,EAAE,QAAQ;oBACb,KAAK,EAAE,EAAE,GAAG,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE;oBAChC,QAAQ,EAAE,KAAK,CAAC,QAAQ;iBAClB,CAAC,CAAA;YACX,CAAC,CAAC,CACL,CAAA;YAEH,OAAO,YAAY,CAAA;QACrB,CAAC;KACF,CAAC,CAAA;IAEF,MAAM,OAAO,GAAG,cAAc,CAAC;QAC7B,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YAClB,OAAO,EACL,KAAK,CAAC,OAAO;iBACV,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAQ,CAAC;iBAC9B,IAAI,CAAC,CAAC,CAAC;iBACP,MAAM,CAAC,OAAO,CAClB,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,EAAE,GAAG,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC;gBAClC,GAAG,EAAE,QAAQ;gBACb,KAAK,EAAE;oBACL,GAAG,MAAM;oBACT,KAAK;iBACN;gBACD,QAAQ;aACT,CAAC,CAAC;SACJ,CAAC;KACH,CAAC,CAAA;IAEF,MAAM,UAAU,GAAG;QACjB,GAAG,OAAO,EAAE,CAAC,OAAO;QACpB,GAAG,YAAY,EAAE;KACS,CAAA;IAE5B,OAAO,CACL,EACE;MAAA,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,CAC5B,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,EAAG,CACrB,CAAC,CACJ;IAAA,GAAG,CACJ,CAAA;AACH,CAAC,CAAA"}
1
+ {"version":3,"file":"Scripts.jsx","sourceRoot":"","sources":["../../src/Scripts.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAC/B,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAGvC,MAAM,CAAC,MAAM,OAAO,GAAG,GAAG,EAAE;IAC1B,MAAM,MAAM,GAAG,SAAS,EAAE,CAAA;IAC1B,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAA;IACvC,MAAM,YAAY,GAAG,cAAc,CAAC;QAClC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE;YAChB,MAAM,YAAY,GAA4B,EAAE,CAAA;YAChD,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,EAAE,QAAQ,CAAA;YAErC,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,OAAO,EAAE,CAAA;YACX,CAAC;YAED,KAAK,CAAC,OAAO;iBACV,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,OAAO,CAAE,CAAC;iBACtD,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CACjB,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,MAAM;gBAC/B,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,QAAQ,CAAC;iBAClC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;gBACjB,YAAY,CAAC,IAAI,CAAC;oBAChB,GAAG,EAAE,QAAQ;oBACb,KAAK,EAAE,EAAE,GAAG,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE;oBAChC,QAAQ,EAAE,KAAK,CAAC,QAAQ;iBAClB,CAAC,CAAA;YACX,CAAC,CAAC,CACL,CAAA;YAEH,OAAO,YAAY,CAAA;QACrB,CAAC;KACF,CAAC,CAAA;IAEF,MAAM,OAAO,GAAG,cAAc,CAAC;QAC7B,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YAClB,OAAO,EACL,KAAK,CAAC,OAAO;iBACV,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAQ,CAAC;iBAC9B,IAAI,CAAC,CAAC,CAAC;iBACP,MAAM,CAAC,OAAO,CAClB,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,EAAE,GAAG,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC;gBAClC,GAAG,EAAE,QAAQ;gBACb,KAAK,EAAE;oBACL,GAAG,MAAM;oBACT,KAAK;iBACN;gBACD,QAAQ;aACT,CAAC,CAAC;SACJ,CAAC;KACH,CAAC,CAAA;IAEF,IAAI,oBAAoB,GAAiC,SAAS,CAAA;IAElE,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;QACrB,oBAAoB,GAAG,MAAM,CAAC,SAAS,CAAC,mBAAmB,EAAE,CAAA;IAC/D,CAAC;IAED,MAAM,UAAU,GAAG;QACjB,GAAG,OAAO,EAAE,CAAC,OAAO;QACpB,GAAG,YAAY,EAAE;KACS,CAAA;IAE5B,IAAI,oBAAoB,EAAE,CAAC;QACzB,UAAU,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAA;IAC1C,CAAC;IAED,OAAO,CACL,EACE;MAAA,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,CAC5B,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,EAAG,CACrB,CAAC,CACJ;IAAA,GAAG,CACJ,CAAA;AACH,CAAC,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tanstack/solid-router",
3
- "version": "1.136.8",
3
+ "version": "1.136.9",
4
4
  "description": "Modern and scalable routing for Solid applications",
5
5
  "author": "Tanner Linsley",
6
6
  "license": "MIT",
@@ -89,7 +89,7 @@
89
89
  "tiny-invariant": "^1.3.3",
90
90
  "tiny-warning": "^1.0.3",
91
91
  "@tanstack/history": "1.133.28",
92
- "@tanstack/router-core": "1.136.8"
92
+ "@tanstack/router-core": "1.136.9"
93
93
  },
94
94
  "devDependencies": {
95
95
  "@solidjs/testing-library": "^0.8.10",
package/src/Asset.tsx CHANGED
@@ -123,8 +123,9 @@ function Script({
123
123
  }
124
124
  })
125
125
 
126
- if (router && !router.isServer) {
127
- return null
126
+ if (!router.isServer) {
127
+ // render an empty script on the client just to avoid hydration errors
128
+ return <script />
128
129
  }
129
130
 
130
131
  if (attrs?.src && typeof attrs.src === 'string') {
@@ -107,9 +107,9 @@ export const useTags = () => {
107
107
  },
108
108
  })
109
109
 
110
- const preloadMeta = useRouterState({
110
+ const preloadLinks = useRouterState({
111
111
  select: (state) => {
112
- const preloadMeta: Array<RouterManagedTag> = []
112
+ const preloadLinks: Array<RouterManagedTag> = []
113
113
 
114
114
  state.matches
115
115
  .map((match) => router.looseRoutesById[match.routeId]!)
@@ -117,7 +117,7 @@ export const useTags = () => {
117
117
  router.ssr?.manifest?.routes[route.id]?.preloads
118
118
  ?.filter(Boolean)
119
119
  .forEach((preload) => {
120
- preloadMeta.push({
120
+ preloadLinks.push({
121
121
  tag: 'link',
122
122
  attrs: {
123
123
  rel: 'modulepreload',
@@ -128,7 +128,7 @@ export const useTags = () => {
128
128
  }),
129
129
  )
130
130
 
131
- return preloadMeta
131
+ return preloadLinks
132
132
  },
133
133
  })
134
134
 
@@ -166,30 +166,13 @@ export const useTags = () => {
166
166
  })),
167
167
  })
168
168
 
169
- let serverHeadScript: RouterManagedTag | undefined = undefined
170
-
171
- if (router.serverSsr) {
172
- const bufferedScripts = router.serverSsr.takeBufferedScripts()
173
- if (bufferedScripts) {
174
- serverHeadScript = {
175
- tag: 'script',
176
- attrs: {
177
- nonce,
178
- class: '$tsr',
179
- },
180
- children: bufferedScripts,
181
- }
182
- }
183
- }
184
-
185
169
  return () =>
186
170
  uniqBy(
187
171
  [
188
172
  ...meta(),
189
- ...preloadMeta(),
173
+ ...preloadLinks(),
190
174
  ...links(),
191
175
  ...styles(),
192
- ...(serverHeadScript ? [serverHeadScript] : []),
193
176
  ...headScripts(),
194
177
  ] as Array<RouterManagedTag>,
195
178
  (d) => {
@@ -15,7 +15,7 @@ export function ScriptOnce({
15
15
  <script
16
16
  nonce={router.options.ssr?.nonce}
17
17
  class="$tsr"
18
- innerHTML={[children].filter(Boolean).join('\n') + ';$_TSR.c()'}
18
+ innerHTML={children + ';typeof $_TSR !== "undefined" && $_TSR?.c()'}
19
19
  />
20
20
  )
21
21
  }
package/src/Scripts.tsx CHANGED
@@ -51,11 +51,21 @@ export const Scripts = () => {
51
51
  }),
52
52
  })
53
53
 
54
+ let serverBufferedScript: RouterManagedTag | undefined = undefined
55
+
56
+ if (router.serverSsr) {
57
+ serverBufferedScript = router.serverSsr.takeBufferedScripts()
58
+ }
59
+
54
60
  const allScripts = [
55
61
  ...scripts().scripts,
56
62
  ...assetScripts(),
57
63
  ] as Array<RouterManagedTag>
58
64
 
65
+ if (serverBufferedScript) {
66
+ allScripts.unshift(serverBufferedScript)
67
+ }
68
+
59
69
  return (
60
70
  <>
61
71
  {allScripts.map((asset, i) => (