@tanstack/solid-router 1.133.15 → 1.133.18

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.
Files changed (55) hide show
  1. package/dist/cjs/ClientOnly.cjs +12 -2
  2. package/dist/cjs/ClientOnly.cjs.map +1 -1
  3. package/dist/cjs/ClientOnly.d.cts +1 -1
  4. package/dist/cjs/HeadContent.cjs.map +1 -1
  5. package/dist/cjs/HeadContent.d.cts +3 -1
  6. package/dist/cjs/Matches.cjs +16 -7
  7. package/dist/cjs/Matches.cjs.map +1 -1
  8. package/dist/cjs/RouterProvider.cjs +1 -1
  9. package/dist/cjs/RouterProvider.cjs.map +1 -1
  10. package/dist/cjs/Transitioner.cjs +3 -0
  11. package/dist/cjs/Transitioner.cjs.map +1 -1
  12. package/dist/cjs/ssr/renderRouterToStream.cjs +2 -1
  13. package/dist/cjs/ssr/renderRouterToStream.cjs.map +1 -1
  14. package/dist/cjs/ssr/renderRouterToString.cjs +1 -1
  15. package/dist/cjs/ssr/renderRouterToString.cjs.map +1 -1
  16. package/dist/esm/ClientOnly.d.ts +1 -1
  17. package/dist/esm/ClientOnly.js +13 -3
  18. package/dist/esm/ClientOnly.js.map +1 -1
  19. package/dist/esm/HeadContent.d.ts +3 -1
  20. package/dist/esm/HeadContent.js.map +1 -1
  21. package/dist/esm/Matches.js +16 -7
  22. package/dist/esm/Matches.js.map +1 -1
  23. package/dist/esm/RouterProvider.js +1 -1
  24. package/dist/esm/RouterProvider.js.map +1 -1
  25. package/dist/esm/Transitioner.js +3 -0
  26. package/dist/esm/Transitioner.js.map +1 -1
  27. package/dist/esm/ssr/renderRouterToStream.js +3 -1
  28. package/dist/esm/ssr/renderRouterToStream.js.map +1 -1
  29. package/dist/esm/ssr/renderRouterToString.js +1 -1
  30. package/dist/esm/ssr/renderRouterToString.js.map +1 -1
  31. package/dist/source/ClientOnly.d.ts +1 -1
  32. package/dist/source/ClientOnly.jsx +28 -2
  33. package/dist/source/ClientOnly.jsx.map +1 -1
  34. package/dist/source/HeadContent.d.ts +3 -1
  35. package/dist/source/HeadContent.jsx +3 -1
  36. package/dist/source/HeadContent.jsx.map +1 -1
  37. package/dist/source/Matches.jsx +7 -6
  38. package/dist/source/Matches.jsx.map +1 -1
  39. package/dist/source/RouterProvider.d.ts +1 -1
  40. package/dist/source/RouterProvider.jsx +1 -1
  41. package/dist/source/RouterProvider.jsx.map +1 -1
  42. package/dist/source/Transitioner.jsx +3 -0
  43. package/dist/source/Transitioner.jsx.map +1 -1
  44. package/dist/source/ssr/renderRouterToStream.jsx +5 -1
  45. package/dist/source/ssr/renderRouterToStream.jsx.map +1 -1
  46. package/dist/source/ssr/renderRouterToString.jsx +1 -1
  47. package/dist/source/ssr/renderRouterToString.jsx.map +1 -1
  48. package/package.json +2 -2
  49. package/src/ClientOnly.tsx +30 -3
  50. package/src/HeadContent.tsx +3 -1
  51. package/src/Matches.tsx +9 -6
  52. package/src/RouterProvider.tsx +2 -2
  53. package/src/Transitioner.tsx +4 -0
  54. package/src/ssr/renderRouterToStream.tsx +13 -3
  55. package/src/ssr/renderRouterToString.tsx +1 -1
@@ -20,15 +20,25 @@ function _interopNamespaceDefault(e) {
20
20
  }
21
21
  const Solid__namespace = /* @__PURE__ */ _interopNamespaceDefault(Solid$1);
22
22
  function ClientOnly(props) {
23
+ const hydrated = useHydrated();
23
24
  return Solid.createComponent(Solid__namespace.Show, {
24
- when: !Solid.isServer,
25
+ get when() {
26
+ return hydrated();
27
+ },
25
28
  get fallback() {
26
- return props.fallback;
29
+ return props.fallback ?? null;
27
30
  },
28
31
  get children() {
29
32
  return Solid.memo(() => props.children);
30
33
  }
31
34
  });
32
35
  }
36
+ function useHydrated() {
37
+ const [hydrated, setHydrated] = Solid__namespace.createSignal(false);
38
+ Solid__namespace.onMount(() => {
39
+ setHydrated(true);
40
+ });
41
+ return hydrated;
42
+ }
33
43
  exports.ClientOnly = ClientOnly;
34
44
  //# sourceMappingURL=ClientOnly.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"ClientOnly.cjs","sources":["../../src/ClientOnly.tsx"],"sourcesContent":["import * as Solid from 'solid-js'\nimport { isServer } from 'solid-js/web'\n\nexport interface ClientOnlyProps {\n /**\n * The children to render if the JS is loaded.\n */\n children: Solid.JSX.Element\n /**\n * The fallback component to render if the JS is not yet loaded.\n */\n fallback?: Solid.JSX.Element\n}\n\n/**\n * Render the children only after the JS has loaded client-side. Use an optional\n * fallback component if the JS is not yet loaded.\n *\n * @example\n * Render a Chart component if JS loads, renders a simple FakeChart\n * component server-side or if there is no JS. The FakeChart can have only the\n * UI without the behavior or be a loading spinner or skeleton.\n *\n * ```tsx\n * return (\n * <ClientOnly fallback={<FakeChart />}>\n * <Chart />\n * </ClientOnly>\n * )\n * ```\n */\nexport function ClientOnly(props: ClientOnlyProps) {\n return (\n <Solid.Show when={!isServer} fallback={props.fallback}>\n <>{props.children}</>\n </Solid.Show>\n )\n}\n"],"names":["ClientOnly","props","_$createComponent","Solid","Show","when","isServer","fallback","children","_$memo"],"mappings":";;;;;;;;;;;;;;;;;;;;;AA+BO,SAASA,WAAWC,OAAwB;AACjD,SAAAC,MAAAA,gBACGC,iBAAMC,MAAI;AAAA,IAACC,MAAM,CAACC,MAAAA;AAAAA,IAAQ,IAAEC,WAAQ;AAAA,aAAEN,MAAMM;AAAAA,IAAQ;AAAA,IAAA,IAAAC,WAAA;AAAA,aAAAC,MAAAA,KAAA,MAChDR,MAAMO,QAAQ;AAAA,IAAA;AAAA,EAAA,CAAA;AAGvB;;"}
1
+ {"version":3,"file":"ClientOnly.cjs","sources":["../../src/ClientOnly.tsx"],"sourcesContent":["import * as Solid from 'solid-js'\n\nexport interface ClientOnlyProps {\n /**\n * The children to render when the JS is loaded.\n */\n children: Solid.JSX.Element\n /**\n * The fallback component to render if the JS is not yet loaded.\n */\n fallback?: Solid.JSX.Element\n}\n\n/**\n * Render the children only after the JS has loaded client-side. Use an optional\n * fallback component if the JS is not yet loaded.\n *\n * @example\n * Render a Chart component if JS loads, renders a simple FakeChart\n * component server-side or if there is no JS. The FakeChart can have only the\n * UI without the behavior or be a loading spinner or skeleton.\n *\n * ```tsx\n * return (\n * <ClientOnly fallback={<FakeChart />}>\n * <Chart />\n * </ClientOnly>\n * )\n * ```\n */\nexport function ClientOnly(props: ClientOnlyProps) {\n const hydrated = useHydrated()\n return (\n <Solid.Show when={hydrated()} fallback={props.fallback ?? null}>\n <>{props.children}</>\n </Solid.Show>\n )\n}\n\n/**\n * Return a boolean indicating if the JS has been hydrated already.\n * When doing Server-Side Rendering, the result will always be false.\n * When doing Client-Side Rendering, the result will always be false on the\n * first render and true from then on. Even if a new component renders it will\n * always start with true.\n *\n * @example\n * ```tsx\n * // Disable a button that needs JS to work.\n * const hydrated = useHydrated()\n * return (\n * <button type=\"button\" disabled={!hydrated()} onClick={doSomethingCustom}>\n * Click me\n * </button>\n * )\n * ```\n * @returns True if the JS has been hydrated already, false otherwise.\n */\nfunction useHydrated(): Solid.Accessor<boolean> {\n const [hydrated, setHydrated] = Solid.createSignal(false)\n Solid.onMount(() => {\n setHydrated(true)\n })\n return hydrated\n}\n"],"names":["ClientOnly","props","hydrated","useHydrated","_$createComponent","Solid","Show","when","fallback","children","_$memo","setHydrated","createSignal","onMount"],"mappings":";;;;;;;;;;;;;;;;;;;;;AA8BO,SAASA,WAAWC,OAAwB;AACjD,QAAMC,WAAWC,YAAAA;AACjB,SAAAC,MAAAA,gBACGC,iBAAMC,MAAI;AAAA,IAAA,IAACC,OAAI;AAAA,aAAEL,SAAAA;AAAAA,IAAU;AAAA,IAAA,IAAEM,WAAQ;AAAA,aAAEP,MAAMO,YAAY;AAAA,IAAI;AAAA,IAAA,IAAAC,WAAA;AAAA,aAAAC,MAAAA,KAAA,MACzDT,MAAMQ,QAAQ;AAAA,IAAA;AAAA,EAAA,CAAA;AAGvB;AAqBA,SAASN,cAAuC;AAC9C,QAAM,CAACD,UAAUS,WAAW,IAAIN,iBAAMO,aAAa,KAAK;AACxDP,mBAAMQ,QAAQ,MAAM;AAClBF,gBAAY,IAAI;AAAA,EAClB,CAAC;AACD,SAAOT;AACT;;"}
@@ -1,7 +1,7 @@
1
1
  import * as Solid from 'solid-js';
2
2
  export interface ClientOnlyProps {
3
3
  /**
4
- * The children to render if the JS is loaded.
4
+ * The children to render when the JS is loaded.
5
5
  */
6
6
  children: Solid.JSX.Element;
7
7
  /**
@@ -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 { 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 return () =>\n uniqBy(\n [\n ...meta(),\n ...preloadMeta(),\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 * It should be rendered in the `<head>` of your document.\n */\nexport function HeadContent() {\n const tags = useTags()\n\n return (\n <MetaProvider>\n {tags().map((tag) => (\n <Asset {...tag} />\n ))}\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","uniqBy","d","JSON","stringify","HeadContent","tags","_$createComponent","MetaProvider","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 { 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 return () =>\n uniqBy(\n [\n ...meta(),\n ...preloadMeta(),\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 {tags().map((tag) => (\n <Asset {...tag} />\n ))}\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","uniqBy","d","JSON","stringify","HeadContent","tags","_$createComponent","MetaProvider","Asset","arr","fn","seen","Set","item","key","has","add"],"mappings":"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"}
@@ -3,6 +3,8 @@ import * as Solid from 'solid-js';
3
3
  export declare const useTags: () => () => RouterManagedTag[];
4
4
  /**
5
5
  * @description The `HeadContent` component is used to render meta tags, links, and scripts for the current route.
6
- * It should be rendered in the `<head>` of your document.
6
+ * When using full document hydration (hydrating from `<html>`), this component should be rendered in the `<body>`
7
+ * to ensure it's part of the reactive tree and updates correctly during client-side navigation.
8
+ * The component uses portals internally to render content into the `<head>` element.
7
9
  */
8
10
  export declare function HeadContent(): Solid.JSX.Element;
@@ -9,8 +9,8 @@ const useRouterState = require("./useRouterState.cjs");
9
9
  const useRouter = require("./useRouter.cjs");
10
10
  const Transitioner = require("./Transitioner.cjs");
11
11
  const matchContext = require("./matchContext.cjs");
12
- const Match = require("./Match.cjs");
13
12
  const SafeFragment = require("./SafeFragment.cjs");
13
+ const Match = require("./Match.cjs");
14
14
  function _interopNamespaceDefault(e) {
15
15
  const n = Object.create(null, { [Symbol.toStringTag]: { value: "Module" } });
16
16
  if (e) {
@@ -41,7 +41,7 @@ function Matches() {
41
41
  return PendingComponent ? Solid$1.createComponent(PendingComponent, {}) : null;
42
42
  },
43
43
  get children() {
44
- return [Solid$1.memo(() => Solid$1.memo(() => !!!router.isServer)() && Solid$1.createComponent(Transitioner.Transitioner, {})), Solid$1.createComponent(MatchesInner, {})];
44
+ return [Solid$1.createComponent(Transitioner.Transitioner, {}), Solid$1.createComponent(MatchesInner, {})];
45
45
  }
46
46
  });
47
47
  }
@@ -58,10 +58,18 @@ function MatchesInner() {
58
58
  select: (s) => s.loadedAt
59
59
  });
60
60
  const matchComponent = () => {
61
- const id = matchId();
62
- return id ? Solid$1.createComponent(Match.Match, {
63
- matchId: id
64
- }) : null;
61
+ return Solid$1.createComponent(Solid__namespace.Show, {
62
+ get when() {
63
+ return matchId();
64
+ },
65
+ get children() {
66
+ return Solid$1.createComponent(Match.Match, {
67
+ get matchId() {
68
+ return matchId();
69
+ }
70
+ });
71
+ }
72
+ });
65
73
  };
66
74
  return Solid$1.createComponent(matchContext.matchContext.Provider, {
67
75
  value: matchId,
@@ -70,7 +78,8 @@ function MatchesInner() {
70
78
  getResetKey: () => resetKey(),
71
79
  errorComponent: CatchBoundary.ErrorComponent,
72
80
  onCatch: (error) => {
73
- warning(false, `The following error wasn't caught by any route! At the very least, consider setting an 'errorComponent' in your RootRoute!`);
81
+ warning(false, `The following error wasn't caught by any route! At the very leas
82
+ t, consider setting an 'errorComponent' in your RootRoute!`);
74
83
  warning(false, error.message || error.toString());
75
84
  },
76
85
  get children() {
@@ -1 +1 @@
1
- {"version":3,"file":"Matches.cjs","sources":["../../src/Matches.tsx"],"sourcesContent":["import * as Solid from 'solid-js'\nimport warning from 'tiny-warning'\nimport { rootRouteId } from '@tanstack/router-core'\nimport { CatchBoundary, ErrorComponent } from './CatchBoundary'\nimport { useRouterState } from './useRouterState'\nimport { useRouter } from './useRouter'\nimport { Transitioner } from './Transitioner'\nimport { matchContext } from './matchContext'\nimport { Match } from './Match'\nimport { SafeFragment } from './SafeFragment'\nimport type {\n AnyRoute,\n AnyRouter,\n DeepPartial,\n Expand,\n MakeOptionalPathParams,\n MakeOptionalSearchParams,\n MakeRouteMatchUnion,\n MaskOptions,\n MatchRouteOptions,\n NoInfer,\n RegisteredRouter,\n ResolveRelativePath,\n ResolveRoute,\n RouteByPath,\n RouterState,\n ToSubOptionsProps,\n} from '@tanstack/router-core'\n\ndeclare module '@tanstack/router-core' {\n export interface RouteMatchExtensions {\n meta?: Array<Solid.JSX.IntrinsicElements['meta'] | undefined>\n links?: Array<Solid.JSX.IntrinsicElements['link'] | undefined>\n scripts?: Array<Solid.JSX.IntrinsicElements['script'] | undefined>\n styles?: Array<Solid.JSX.IntrinsicElements['style'] | undefined>\n headScripts?: Array<Solid.JSX.IntrinsicElements['script'] | undefined>\n }\n}\n\nexport function Matches() {\n const router = useRouter()\n\n // Do not render a root Suspense during SSR or hydrating from SSR\n const ResolvedSuspense =\n router.isServer || (typeof document !== 'undefined' && router.ssr)\n ? SafeFragment\n : Solid.Suspense\n\n const rootRoute: () => AnyRoute = () => router.routesById[rootRouteId]\n const PendingComponent =\n rootRoute().options.pendingComponent ??\n router.options.defaultPendingComponent\n\n const OptionalWrapper = router.options.InnerWrap || SafeFragment\n\n return (\n <OptionalWrapper>\n <ResolvedSuspense\n fallback={PendingComponent ? <PendingComponent /> : null}\n >\n {!router.isServer && <Transitioner />}\n <MatchesInner />\n </ResolvedSuspense>\n </OptionalWrapper>\n )\n}\n\nfunction MatchesInner() {\n const router = useRouter()\n const matchId = useRouterState({\n select: (s) => {\n return s.matches[0]?.id\n },\n })\n\n const resetKey = useRouterState({\n select: (s) => s.loadedAt,\n })\n\n const matchComponent = () => {\n const id = matchId()\n return id ? <Match matchId={id} /> : null\n }\n\n return (\n <matchContext.Provider value={matchId}>\n {router.options.disableGlobalCatchBoundary ? (\n matchComponent()\n ) : (\n <CatchBoundary\n getResetKey={() => resetKey()}\n errorComponent={ErrorComponent}\n onCatch={(error) => {\n warning(\n false,\n `The following error wasn't caught by any route! At the very least, consider setting an 'errorComponent' in your RootRoute!`,\n )\n warning(false, error.message || error.toString())\n }}\n >\n {matchComponent()}\n </CatchBoundary>\n )}\n </matchContext.Provider>\n )\n}\n\nexport type UseMatchRouteOptions<\n TRouter extends AnyRouter = RegisteredRouter,\n TFrom extends string = string,\n TTo extends string | undefined = undefined,\n TMaskFrom extends string = TFrom,\n TMaskTo extends string = '',\n> = ToSubOptionsProps<TRouter, TFrom, TTo> &\n DeepPartial<MakeOptionalSearchParams<TRouter, TFrom, TTo>> &\n DeepPartial<MakeOptionalPathParams<TRouter, TFrom, TTo>> &\n MaskOptions<TRouter, TMaskFrom, TMaskTo> &\n MatchRouteOptions\n\nexport function useMatchRoute<TRouter extends AnyRouter = RegisteredRouter>() {\n const router = useRouter()\n\n const status = useRouterState({\n select: (s) => s.status,\n })\n\n return <\n const TFrom extends string = string,\n const TTo extends string | undefined = undefined,\n const TMaskFrom extends string = TFrom,\n const TMaskTo extends string = '',\n >(\n opts: UseMatchRouteOptions<TRouter, TFrom, TTo, TMaskFrom, TMaskTo>,\n ): Solid.Accessor<\n false | Expand<ResolveRoute<TRouter, TFrom, TTo>['types']['allParams']>\n > => {\n const { pending, caseSensitive, fuzzy, includeSearch, ...rest } = opts\n\n const matchRoute = Solid.createMemo(() => {\n status()\n return router.matchRoute(rest as any, {\n pending,\n caseSensitive,\n fuzzy,\n includeSearch,\n })\n })\n\n return matchRoute\n }\n}\n\nexport type MakeMatchRouteOptions<\n TRouter extends AnyRouter = RegisteredRouter,\n TFrom extends string = string,\n TTo extends string | undefined = undefined,\n TMaskFrom extends string = TFrom,\n TMaskTo extends string = '',\n> = UseMatchRouteOptions<TRouter, TFrom, TTo, TMaskFrom, TMaskTo> & {\n // If a function is passed as a child, it will be given the `isActive` boolean to aid in further styling on the element it returns\n children?:\n | ((\n params?: RouteByPath<\n TRouter['routeTree'],\n ResolveRelativePath<TFrom, NoInfer<TTo>>\n >['types']['allParams'],\n ) => Solid.JSX.Element)\n | Solid.JSX.Element\n}\n\nexport function MatchRoute<\n TRouter extends AnyRouter = RegisteredRouter,\n const TFrom extends string = string,\n const TTo extends string | undefined = undefined,\n const TMaskFrom extends string = TFrom,\n const TMaskTo extends string = '',\n>(props: MakeMatchRouteOptions<TRouter, TFrom, TTo, TMaskFrom, TMaskTo>): any {\n const status = useRouterState({\n select: (s) => s.status,\n })\n\n return (\n <Solid.Show when={status()} keyed>\n {(_) => {\n const matchRoute = useMatchRoute()\n const params = matchRoute(props as any)() as boolean\n const child = props.children\n if (typeof child === 'function') {\n return (child as any)(params)\n }\n\n return params ? child : null\n }}\n </Solid.Show>\n )\n}\n\nexport interface UseMatchesBaseOptions<TRouter extends AnyRouter, TSelected> {\n select?: (matches: Array<MakeRouteMatchUnion<TRouter>>) => TSelected\n}\n\nexport type UseMatchesResult<\n TRouter extends AnyRouter,\n TSelected,\n> = unknown extends TSelected ? Array<MakeRouteMatchUnion<TRouter>> : TSelected\n\nexport function useMatches<\n TRouter extends AnyRouter = RegisteredRouter,\n TSelected = unknown,\n>(\n opts?: UseMatchesBaseOptions<TRouter, TSelected>,\n): Solid.Accessor<UseMatchesResult<TRouter, TSelected>> {\n return useRouterState({\n select: (state: RouterState<TRouter['routeTree']>) => {\n const matches = state.matches\n return opts?.select\n ? opts.select(matches as Array<MakeRouteMatchUnion<TRouter>>)\n : matches\n },\n } as any) as Solid.Accessor<UseMatchesResult<TRouter, TSelected>>\n}\n\nexport function useParentMatches<\n TRouter extends AnyRouter = RegisteredRouter,\n TSelected = unknown,\n>(\n opts?: UseMatchesBaseOptions<TRouter, TSelected>,\n): Solid.Accessor<UseMatchesResult<TRouter, TSelected>> {\n const contextMatchId = Solid.useContext(matchContext)\n\n return useMatches({\n select: (matches: Array<MakeRouteMatchUnion<TRouter>>) => {\n matches = matches.slice(\n 0,\n matches.findIndex((d) => d.id === contextMatchId()),\n )\n return opts?.select ? opts.select(matches) : matches\n },\n } as any)\n}\n\nexport function useChildMatches<\n TRouter extends AnyRouter = RegisteredRouter,\n TSelected = unknown,\n>(\n opts?: UseMatchesBaseOptions<TRouter, TSelected>,\n): Solid.Accessor<UseMatchesResult<TRouter, TSelected>> {\n const contextMatchId = Solid.useContext(matchContext)\n\n return useMatches({\n select: (matches: Array<MakeRouteMatchUnion<TRouter>>) => {\n matches = matches.slice(\n matches.findIndex((d) => d.id === contextMatchId()) + 1,\n )\n return opts?.select ? opts.select(matches) : matches\n },\n } as any)\n}\n"],"names":["Matches","router","useRouter","ResolvedSuspense","isServer","document","ssr","SafeFragment","Solid","Suspense","rootRoute","routesById","rootRouteId","PendingComponent","options","pendingComponent","defaultPendingComponent","OptionalWrapper","InnerWrap","_$createComponent","children","fallback","_$memo","Transitioner","MatchesInner","matchId","useRouterState","select","s","matches","id","resetKey","loadedAt","matchComponent","Match","matchContext","Provider","value","disableGlobalCatchBoundary","CatchBoundary","getResetKey","errorComponent","ErrorComponent","onCatch","error","warning","message","toString","useMatchRoute","status","opts","pending","caseSensitive","fuzzy","includeSearch","rest","matchRoute","createMemo","MatchRoute","props","Show","when","keyed","_","params","child","useMatches","state","useParentMatches","contextMatchId","useContext","slice","findIndex","d","useChildMatches"],"mappings":"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"}
1
+ {"version":3,"file":"Matches.cjs","sources":["../../src/Matches.tsx"],"sourcesContent":["import * as Solid from 'solid-js'\nimport warning from 'tiny-warning'\nimport { rootRouteId } from '@tanstack/router-core'\nimport { CatchBoundary, ErrorComponent } from './CatchBoundary'\nimport { useRouterState } from './useRouterState'\nimport { useRouter } from './useRouter'\nimport { Transitioner } from './Transitioner'\nimport { matchContext } from './matchContext'\nimport { SafeFragment } from './SafeFragment'\nimport { Match } from './Match'\nimport type {\n AnyRoute,\n AnyRouter,\n DeepPartial,\n Expand,\n MakeOptionalPathParams,\n MakeOptionalSearchParams,\n MakeRouteMatchUnion,\n MaskOptions,\n MatchRouteOptions,\n NoInfer,\n RegisteredRouter,\n ResolveRelativePath,\n ResolveRoute,\n RouteByPath,\n RouterState,\n ToSubOptionsProps,\n} from '@tanstack/router-core'\n\ndeclare module '@tanstack/router-core' {\n export interface RouteMatchExtensions {\n meta?: Array<Solid.JSX.IntrinsicElements['meta'] | undefined>\n links?: Array<Solid.JSX.IntrinsicElements['link'] | undefined>\n scripts?: Array<Solid.JSX.IntrinsicElements['script'] | undefined>\n styles?: Array<Solid.JSX.IntrinsicElements['style'] | undefined>\n headScripts?: Array<Solid.JSX.IntrinsicElements['script'] | undefined>\n }\n}\n\nexport function Matches() {\n const router = useRouter()\n\n const ResolvedSuspense =\n router.isServer || (typeof document !== 'undefined' && router.ssr)\n ? SafeFragment\n : Solid.Suspense\n\n const rootRoute: () => AnyRoute = () => router.routesById[rootRouteId]\n const PendingComponent =\n rootRoute().options.pendingComponent ??\n router.options.defaultPendingComponent\n\n const OptionalWrapper = router.options.InnerWrap || SafeFragment\n\n return (\n <OptionalWrapper>\n <ResolvedSuspense\n fallback={PendingComponent ? <PendingComponent /> : null}\n >\n <Transitioner />\n <MatchesInner />\n </ResolvedSuspense>\n </OptionalWrapper>\n )\n}\n\nfunction MatchesInner() {\n const router = useRouter()\n const matchId = useRouterState({\n select: (s) => {\n return s.matches[0]?.id\n },\n })\n\n const resetKey = useRouterState({\n select: (s) => s.loadedAt,\n })\n\n const matchComponent = () => {\n return (\n <Solid.Show when={matchId()}>\n <Match matchId={matchId()!} />\n </Solid.Show>\n )\n }\n\n return (\n <matchContext.Provider value={matchId}>\n {router.options.disableGlobalCatchBoundary ? (\n matchComponent()\n ) : (\n <CatchBoundary\n getResetKey={() => resetKey()}\n errorComponent={ErrorComponent}\n onCatch={(error) => {\n warning(\n false,\n `The following error wasn't caught by any route! At the very leas\n t, consider setting an 'errorComponent' in your RootRoute!`,\n )\n warning(false, error.message || error.toString())\n }}\n >\n {matchComponent()}\n </CatchBoundary>\n )}\n </matchContext.Provider>\n )\n}\n\nexport type UseMatchRouteOptions<\n TRouter extends AnyRouter = RegisteredRouter,\n TFrom extends string = string,\n TTo extends string | undefined = undefined,\n TMaskFrom extends string = TFrom,\n TMaskTo extends string = '',\n> = ToSubOptionsProps<TRouter, TFrom, TTo> &\n DeepPartial<MakeOptionalSearchParams<TRouter, TFrom, TTo>> &\n DeepPartial<MakeOptionalPathParams<TRouter, TFrom, TTo>> &\n MaskOptions<TRouter, TMaskFrom, TMaskTo> &\n MatchRouteOptions\n\nexport function useMatchRoute<TRouter extends AnyRouter = RegisteredRouter>() {\n const router = useRouter()\n\n const status = useRouterState({\n select: (s) => s.status,\n })\n\n return <\n const TFrom extends string = string,\n const TTo extends string | undefined = undefined,\n const TMaskFrom extends string = TFrom,\n const TMaskTo extends string = '',\n >(\n opts: UseMatchRouteOptions<TRouter, TFrom, TTo, TMaskFrom, TMaskTo>,\n ): Solid.Accessor<\n false | Expand<ResolveRoute<TRouter, TFrom, TTo>['types']['allParams']>\n > => {\n const { pending, caseSensitive, fuzzy, includeSearch, ...rest } = opts\n\n const matchRoute = Solid.createMemo(() => {\n status()\n return router.matchRoute(rest as any, {\n pending,\n caseSensitive,\n fuzzy,\n includeSearch,\n })\n })\n\n return matchRoute\n }\n}\n\nexport type MakeMatchRouteOptions<\n TRouter extends AnyRouter = RegisteredRouter,\n TFrom extends string = string,\n TTo extends string | undefined = undefined,\n TMaskFrom extends string = TFrom,\n TMaskTo extends string = '',\n> = UseMatchRouteOptions<TRouter, TFrom, TTo, TMaskFrom, TMaskTo> & {\n // If a function is passed as a child, it will be given the `isActive` boolean to aid in further styling on the element it returns\n children?:\n | ((\n params?: RouteByPath<\n TRouter['routeTree'],\n ResolveRelativePath<TFrom, NoInfer<TTo>>\n >['types']['allParams'],\n ) => Solid.JSX.Element)\n | Solid.JSX.Element\n}\n\nexport function MatchRoute<\n TRouter extends AnyRouter = RegisteredRouter,\n const TFrom extends string = string,\n const TTo extends string | undefined = undefined,\n const TMaskFrom extends string = TFrom,\n const TMaskTo extends string = '',\n>(props: MakeMatchRouteOptions<TRouter, TFrom, TTo, TMaskFrom, TMaskTo>): any {\n const status = useRouterState({\n select: (s) => s.status,\n })\n\n return (\n <Solid.Show when={status()} keyed>\n {(_) => {\n const matchRoute = useMatchRoute()\n const params = matchRoute(props as any)() as boolean\n const child = props.children\n if (typeof child === 'function') {\n return (child as any)(params)\n }\n\n return params ? child : null\n }}\n </Solid.Show>\n )\n}\n\nexport interface UseMatchesBaseOptions<TRouter extends AnyRouter, TSelected> {\n select?: (matches: Array<MakeRouteMatchUnion<TRouter>>) => TSelected\n}\n\nexport type UseMatchesResult<\n TRouter extends AnyRouter,\n TSelected,\n> = unknown extends TSelected ? Array<MakeRouteMatchUnion<TRouter>> : TSelected\n\nexport function useMatches<\n TRouter extends AnyRouter = RegisteredRouter,\n TSelected = unknown,\n>(\n opts?: UseMatchesBaseOptions<TRouter, TSelected>,\n): Solid.Accessor<UseMatchesResult<TRouter, TSelected>> {\n return useRouterState({\n select: (state: RouterState<TRouter['routeTree']>) => {\n const matches = state.matches\n return opts?.select\n ? opts.select(matches as Array<MakeRouteMatchUnion<TRouter>>)\n : matches\n },\n } as any) as Solid.Accessor<UseMatchesResult<TRouter, TSelected>>\n}\n\nexport function useParentMatches<\n TRouter extends AnyRouter = RegisteredRouter,\n TSelected = unknown,\n>(\n opts?: UseMatchesBaseOptions<TRouter, TSelected>,\n): Solid.Accessor<UseMatchesResult<TRouter, TSelected>> {\n const contextMatchId = Solid.useContext(matchContext)\n\n return useMatches({\n select: (matches: Array<MakeRouteMatchUnion<TRouter>>) => {\n matches = matches.slice(\n 0,\n matches.findIndex((d) => d.id === contextMatchId()),\n )\n return opts?.select ? opts.select(matches) : matches\n },\n } as any)\n}\n\nexport function useChildMatches<\n TRouter extends AnyRouter = RegisteredRouter,\n TSelected = unknown,\n>(\n opts?: UseMatchesBaseOptions<TRouter, TSelected>,\n): Solid.Accessor<UseMatchesResult<TRouter, TSelected>> {\n const contextMatchId = Solid.useContext(matchContext)\n\n return useMatches({\n select: (matches: Array<MakeRouteMatchUnion<TRouter>>) => {\n matches = matches.slice(\n matches.findIndex((d) => d.id === contextMatchId()) + 1,\n )\n return opts?.select ? opts.select(matches) : matches\n },\n } as any)\n}\n"],"names":["Matches","router","useRouter","ResolvedSuspense","isServer","document","ssr","SafeFragment","Solid","Suspense","rootRoute","routesById","rootRouteId","PendingComponent","options","pendingComponent","defaultPendingComponent","OptionalWrapper","InnerWrap","_$createComponent","children","fallback","Transitioner","MatchesInner","matchId","useRouterState","select","s","matches","id","resetKey","loadedAt","matchComponent","Show","when","Match","matchContext","Provider","value","_$memo","disableGlobalCatchBoundary","CatchBoundary","getResetKey","errorComponent","ErrorComponent","onCatch","error","warning","message","toString","useMatchRoute","status","opts","pending","caseSensitive","fuzzy","includeSearch","rest","matchRoute","createMemo","MatchRoute","props","keyed","_","params","child","useMatches","state","useParentMatches","contextMatchId","useContext","slice","findIndex","d","useChildMatches"],"mappings":"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"}
@@ -1,9 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const Solid = require("solid-js/web");
4
- const Matches = require("./Matches.cjs");
5
4
  const routerContext = require("./routerContext.cjs");
6
5
  const SafeFragment = require("./SafeFragment.cjs");
6
+ const Matches = require("./Matches.cjs");
7
7
  function RouterContextProvider({
8
8
  router,
9
9
  children,
@@ -1 +1 @@
1
- {"version":3,"file":"RouterProvider.cjs","sources":["../../src/RouterProvider.tsx"],"sourcesContent":["import { Matches } from './Matches'\nimport { getRouterContext } from './routerContext'\nimport { SafeFragment } from './SafeFragment'\nimport type * as Solid from 'solid-js'\nimport type {\n AnyRouter,\n RegisteredRouter,\n RouterOptions,\n} from '@tanstack/router-core'\n\nexport function RouterContextProvider<\n TRouter extends AnyRouter = RegisteredRouter,\n TDehydrated extends Record<string, any> = Record<string, any>,\n>({\n router,\n children,\n ...rest\n}: RouterProps<TRouter, TDehydrated> & {\n children: () => Solid.JSX.Element\n}) {\n // Allow the router to update options on the router instance\n router.update({\n ...router.options,\n ...rest,\n context: {\n ...router.options.context,\n ...rest.context,\n },\n } as any)\n\n const routerContext = getRouterContext()\n\n const OptionalWrapper = router.options.Wrap || SafeFragment\n\n return (\n <OptionalWrapper>\n <routerContext.Provider value={router as AnyRouter}>\n {children()}\n </routerContext.Provider>\n </OptionalWrapper>\n )\n}\n\nexport function RouterProvider<\n TRouter extends AnyRouter = RegisteredRouter,\n TDehydrated extends Record<string, any> = Record<string, any>,\n>({ router, ...rest }: RouterProps<TRouter, TDehydrated>) {\n return (\n <RouterContextProvider router={router} {...rest}>\n {() => <Matches />}\n </RouterContextProvider>\n )\n}\n\nexport type RouterProps<\n TRouter extends AnyRouter = RegisteredRouter,\n TDehydrated extends Record<string, any> = Record<string, any>,\n> = Omit<\n RouterOptions<\n TRouter['routeTree'],\n NonNullable<TRouter['options']['trailingSlash']>,\n false,\n TRouter['history'],\n TDehydrated\n >,\n 'context'\n> & {\n router: TRouter\n context?: Partial<\n RouterOptions<\n TRouter['routeTree'],\n NonNullable<TRouter['options']['trailingSlash']>,\n false,\n TRouter['history'],\n TDehydrated\n >['context']\n >\n}\n"],"names":["RouterContextProvider","router","children","rest","update","options","context","routerContext","getRouterContext","OptionalWrapper","Wrap","SafeFragment","_$createComponent","Provider","value","RouterProvider","_$mergeProps","Matches"],"mappings":";;;;;;AAUO,SAASA,sBAGd;AAAA,EACAC;AAAAA,EACAC;AAAAA,EACA,GAAGC;AAGL,GAAG;AAEDF,SAAOG,OAAO;AAAA,IACZ,GAAGH,OAAOI;AAAAA,IACV,GAAGF;AAAAA,IACHG,SAAS;AAAA,MACP,GAAGL,OAAOI,QAAQC;AAAAA,MAClB,GAAGH,KAAKG;AAAAA,IAAAA;AAAAA,EACV,CACM;AAER,QAAMC,kBAAgBC,cAAAA,iBAAAA;AAEtB,QAAMC,kBAAkBR,OAAOI,QAAQK,QAAQC,aAAAA;AAE/C,SAAAC,MAAAA,gBACGH,iBAAe;AAAA,IAAA,IAAAP,WAAA;AAAA,aAAAU,MAAAA,gBACbL,gBAAcM,UAAQ;AAAA,QAACC,OAAOb;AAAAA,QAAmB,IAAAC,WAAA;AAAA,iBAC/CA,SAAAA;AAAAA,QAAU;AAAA,MAAA,CAAA;AAAA,IAAA;AAAA,EAAA,CAAA;AAInB;AAEO,SAASa,eAGd;AAAA,EAAEd;AAAAA,EAAQ,GAAGE;AAAwC,GAAG;AACxD,SAAAS,MAAAA,gBACGZ,uBAAqBgB,iBAAA;AAAA,IAACf;AAAAA,EAAAA,GAAoBE,MAAI;AAAA,IAAAD,UAC5CA,MAAAU,sBAAOK,QAAAA,SAAO,CAAA,CAAA;AAAA,EAAA,CAAG,CAAA;AAGxB;;;"}
1
+ {"version":3,"file":"RouterProvider.cjs","sources":["../../src/RouterProvider.tsx"],"sourcesContent":["import { getRouterContext } from './routerContext'\nimport { SafeFragment } from './SafeFragment'\nimport { Matches } from './Matches'\nimport type {\n AnyRouter,\n RegisteredRouter,\n RouterOptions,\n} from '@tanstack/router-core'\nimport type * as Solid from 'solid-js'\n\nexport function RouterContextProvider<\n TRouter extends AnyRouter = RegisteredRouter,\n TDehydrated extends Record<string, any> = Record<string, any>,\n>({\n router,\n children,\n ...rest\n}: RouterProps<TRouter, TDehydrated> & {\n children: () => Solid.JSX.Element\n}) {\n // Allow the router to update options on the router instance\n router.update({\n ...router.options,\n ...rest,\n context: {\n ...router.options.context,\n ...rest.context,\n },\n } as any)\n\n const routerContext = getRouterContext()\n\n const OptionalWrapper = router.options.Wrap || SafeFragment\n\n return (\n <OptionalWrapper>\n <routerContext.Provider value={router as AnyRouter}>\n {children()}\n </routerContext.Provider>\n </OptionalWrapper>\n )\n}\n\nexport function RouterProvider<\n TRouter extends AnyRouter = RegisteredRouter,\n TDehydrated extends Record<string, any> = Record<string, any>,\n>({ router, ...rest }: RouterProps<TRouter, TDehydrated>) {\n return (\n <RouterContextProvider router={router} {...rest}>\n {() => <Matches />}\n </RouterContextProvider>\n )\n}\n\nexport type RouterProps<\n TRouter extends AnyRouter = RegisteredRouter,\n TDehydrated extends Record<string, any> = Record<string, any>,\n> = Omit<\n RouterOptions<\n TRouter['routeTree'],\n NonNullable<TRouter['options']['trailingSlash']>,\n false,\n TRouter['history'],\n TDehydrated\n >,\n 'context'\n> & {\n router: TRouter\n context?: Partial<\n RouterOptions<\n TRouter['routeTree'],\n NonNullable<TRouter['options']['trailingSlash']>,\n false,\n TRouter['history'],\n TDehydrated\n >['context']\n >\n}\n"],"names":["RouterContextProvider","router","children","rest","update","options","context","routerContext","getRouterContext","OptionalWrapper","Wrap","SafeFragment","_$createComponent","Provider","value","RouterProvider","_$mergeProps","Matches"],"mappings":";;;;;;AAUO,SAASA,sBAGd;AAAA,EACAC;AAAAA,EACAC;AAAAA,EACA,GAAGC;AAGL,GAAG;AAEDF,SAAOG,OAAO;AAAA,IACZ,GAAGH,OAAOI;AAAAA,IACV,GAAGF;AAAAA,IACHG,SAAS;AAAA,MACP,GAAGL,OAAOI,QAAQC;AAAAA,MAClB,GAAGH,KAAKG;AAAAA,IAAAA;AAAAA,EACV,CACM;AAER,QAAMC,kBAAgBC,cAAAA,iBAAAA;AAEtB,QAAMC,kBAAkBR,OAAOI,QAAQK,QAAQC,aAAAA;AAE/C,SAAAC,MAAAA,gBACGH,iBAAe;AAAA,IAAA,IAAAP,WAAA;AAAA,aAAAU,MAAAA,gBACbL,gBAAcM,UAAQ;AAAA,QAACC,OAAOb;AAAAA,QAAmB,IAAAC,WAAA;AAAA,iBAC/CA,SAAAA;AAAAA,QAAU;AAAA,MAAA,CAAA;AAAA,IAAA;AAAA,EAAA,CAAA;AAInB;AAEO,SAASa,eAGd;AAAA,EAAEd;AAAAA,EAAQ,GAAGE;AAAwC,GAAG;AACxD,SAAAS,MAAAA,gBACGZ,uBAAqBgB,iBAAA;AAAA,IAACf;AAAAA,EAAAA,GAAoBE,MAAI;AAAA,IAAAD,UAC5CA,MAAAU,sBAAOK,QAAAA,SAAO,CAAA,CAAA;AAAA,EAAA,CAAG,CAAA;AAGxB;;;"}
@@ -33,6 +33,9 @@ function Transitioner() {
33
33
  isLoading: isLoading2
34
34
  }) => isLoading2
35
35
  });
36
+ if (router.isServer) {
37
+ return null;
38
+ }
36
39
  const [isTransitioning, setIsTransitioning] = Solid__namespace.createSignal(false);
37
40
  const hasPendingMatches = useRouterState.useRouterState({
38
41
  select: (s) => s.matches.some((d) => d.status === "pending")
@@ -1 +1 @@
1
- {"version":3,"file":"Transitioner.cjs","sources":["../../src/Transitioner.tsx"],"sourcesContent":["import * as Solid from 'solid-js'\nimport {\n getLocationChangeInfo,\n handleHashScroll,\n trimPathRight,\n} from '@tanstack/router-core'\nimport { useRouter } from './useRouter'\nimport { useRouterState } from './useRouterState'\nimport { usePrevious } from './utils'\n\nexport function Transitioner() {\n const router = useRouter()\n let mountLoadForRouter = { router, mounted: false }\n const isLoading = useRouterState({\n select: ({ isLoading }) => isLoading,\n })\n\n const [isTransitioning, setIsTransitioning] = Solid.createSignal(false)\n // Track pending state changes\n const hasPendingMatches = useRouterState({\n select: (s) => s.matches.some((d) => d.status === 'pending'),\n })\n\n const previousIsLoading = usePrevious(isLoading)\n\n const isAnyPending = () =>\n isLoading() || isTransitioning() || hasPendingMatches()\n const previousIsAnyPending = usePrevious(isAnyPending)\n\n const isPagePending = () => isLoading() || hasPendingMatches()\n const previousIsPagePending = usePrevious(isPagePending)\n\n router.startTransition = async (fn: () => void | Promise<void>) => {\n setIsTransitioning(true)\n await fn()\n setIsTransitioning(false)\n }\n\n // Subscribe to location changes\n // and try to load the new location\n Solid.onMount(() => {\n const unsub = router.history.subscribe(router.load)\n\n const nextLocation = router.buildLocation({\n to: router.latestLocation.pathname,\n search: true,\n params: true,\n hash: true,\n state: true,\n _includeValidateSearch: true,\n })\n\n if (\n trimPathRight(router.latestLocation.href) !==\n trimPathRight(nextLocation.href)\n ) {\n router.commitLocation({ ...nextLocation, replace: true })\n }\n\n Solid.onCleanup(() => {\n unsub()\n })\n })\n\n // Try to load the initial location\n Solid.createRenderEffect(() => {\n Solid.untrack(() => {\n if (\n // if we are hydrating from SSR, loading is triggered in ssr-client\n (typeof window !== 'undefined' && router.ssr) ||\n (mountLoadForRouter.router === router && mountLoadForRouter.mounted)\n ) {\n return\n }\n mountLoadForRouter = { router, mounted: true }\n const tryLoad = async () => {\n try {\n await router.load()\n } catch (err) {\n console.error(err)\n }\n }\n tryLoad()\n })\n })\n\n Solid.createRenderEffect(\n Solid.on(\n [previousIsLoading, isLoading],\n ([previousIsLoading, isLoading]) => {\n if (previousIsLoading.previous && !isLoading) {\n router.emit({\n type: 'onLoad',\n ...getLocationChangeInfo(router.state),\n })\n }\n },\n ),\n )\n\n Solid.createRenderEffect(\n Solid.on(\n [isPagePending, previousIsPagePending],\n ([isPagePending, previousIsPagePending]) => {\n // emit onBeforeRouteMount\n if (previousIsPagePending.previous && !isPagePending) {\n router.emit({\n type: 'onBeforeRouteMount',\n ...getLocationChangeInfo(router.state),\n })\n }\n },\n ),\n )\n\n Solid.createRenderEffect(\n Solid.on(\n [isAnyPending, previousIsAnyPending],\n ([isAnyPending, previousIsAnyPending]) => {\n // The router was pending and now it's not\n if (previousIsAnyPending.previous && !isAnyPending) {\n router.emit({\n type: 'onResolved',\n ...getLocationChangeInfo(router.state),\n })\n\n router.__store.setState((s) => ({\n ...s,\n status: 'idle',\n resolvedLocation: s.location,\n }))\n\n handleHashScroll(router)\n }\n },\n ),\n )\n\n return null\n}\n"],"names":["Transitioner","router","useRouter","mountLoadForRouter","mounted","isLoading","useRouterState","select","isTransitioning","setIsTransitioning","Solid","createSignal","hasPendingMatches","s","matches","some","d","status","previousIsLoading","usePrevious","isAnyPending","previousIsAnyPending","isPagePending","previousIsPagePending","startTransition","fn","onMount","unsub","history","subscribe","load","nextLocation","buildLocation","to","latestLocation","pathname","search","params","hash","state","_includeValidateSearch","trimPathRight","href","commitLocation","replace","onCleanup","createRenderEffect","untrack","window","ssr","tryLoad","err","console","error","on","previous","emit","type","getLocationChangeInfo","__store","setState","resolvedLocation","location","handleHashScroll"],"mappings":"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"}
1
+ {"version":3,"file":"Transitioner.cjs","sources":["../../src/Transitioner.tsx"],"sourcesContent":["import * as Solid from 'solid-js'\nimport {\n getLocationChangeInfo,\n handleHashScroll,\n trimPathRight,\n} from '@tanstack/router-core'\nimport { useRouter } from './useRouter'\nimport { useRouterState } from './useRouterState'\nimport { usePrevious } from './utils'\n\nexport function Transitioner() {\n const router = useRouter()\n let mountLoadForRouter = { router, mounted: false }\n const isLoading = useRouterState({\n select: ({ isLoading }) => isLoading,\n })\n\n if (router.isServer) {\n return null\n }\n\n const [isTransitioning, setIsTransitioning] = Solid.createSignal(false)\n // Track pending state changes\n const hasPendingMatches = useRouterState({\n select: (s) => s.matches.some((d) => d.status === 'pending'),\n })\n\n const previousIsLoading = usePrevious(isLoading)\n\n const isAnyPending = () =>\n isLoading() || isTransitioning() || hasPendingMatches()\n const previousIsAnyPending = usePrevious(isAnyPending)\n\n const isPagePending = () => isLoading() || hasPendingMatches()\n const previousIsPagePending = usePrevious(isPagePending)\n\n router.startTransition = async (fn: () => void | Promise<void>) => {\n setIsTransitioning(true)\n await fn()\n setIsTransitioning(false)\n }\n\n // Subscribe to location changes\n // and try to load the new location\n Solid.onMount(() => {\n const unsub = router.history.subscribe(router.load)\n\n const nextLocation = router.buildLocation({\n to: router.latestLocation.pathname,\n search: true,\n params: true,\n hash: true,\n state: true,\n _includeValidateSearch: true,\n })\n\n if (\n trimPathRight(router.latestLocation.href) !==\n trimPathRight(nextLocation.href)\n ) {\n router.commitLocation({ ...nextLocation, replace: true })\n }\n\n Solid.onCleanup(() => {\n unsub()\n })\n })\n\n // Try to load the initial location\n Solid.createRenderEffect(() => {\n Solid.untrack(() => {\n if (\n // if we are hydrating from SSR, loading is triggered in ssr-client\n (typeof window !== 'undefined' && router.ssr) ||\n (mountLoadForRouter.router === router && mountLoadForRouter.mounted)\n ) {\n return\n }\n mountLoadForRouter = { router, mounted: true }\n const tryLoad = async () => {\n try {\n await router.load()\n } catch (err) {\n console.error(err)\n }\n }\n tryLoad()\n })\n })\n\n Solid.createRenderEffect(\n Solid.on(\n [previousIsLoading, isLoading],\n ([previousIsLoading, isLoading]) => {\n if (previousIsLoading.previous && !isLoading) {\n router.emit({\n type: 'onLoad',\n ...getLocationChangeInfo(router.state),\n })\n }\n },\n ),\n )\n\n Solid.createRenderEffect(\n Solid.on(\n [isPagePending, previousIsPagePending],\n ([isPagePending, previousIsPagePending]) => {\n // emit onBeforeRouteMount\n if (previousIsPagePending.previous && !isPagePending) {\n router.emit({\n type: 'onBeforeRouteMount',\n ...getLocationChangeInfo(router.state),\n })\n }\n },\n ),\n )\n\n Solid.createRenderEffect(\n Solid.on(\n [isAnyPending, previousIsAnyPending],\n ([isAnyPending, previousIsAnyPending]) => {\n // The router was pending and now it's not\n if (previousIsAnyPending.previous && !isAnyPending) {\n router.emit({\n type: 'onResolved',\n ...getLocationChangeInfo(router.state),\n })\n\n router.__store.setState((s) => ({\n ...s,\n status: 'idle',\n resolvedLocation: s.location,\n }))\n\n handleHashScroll(router)\n }\n },\n ),\n )\n\n return null\n}\n"],"names":["Transitioner","router","useRouter","mountLoadForRouter","mounted","isLoading","useRouterState","select","isServer","isTransitioning","setIsTransitioning","Solid","createSignal","hasPendingMatches","s","matches","some","d","status","previousIsLoading","usePrevious","isAnyPending","previousIsAnyPending","isPagePending","previousIsPagePending","startTransition","fn","onMount","unsub","history","subscribe","load","nextLocation","buildLocation","to","latestLocation","pathname","search","params","hash","state","_includeValidateSearch","trimPathRight","href","commitLocation","replace","onCleanup","createRenderEffect","untrack","window","ssr","tryLoad","err","console","error","on","previous","emit","type","getLocationChangeInfo","__store","setState","resolvedLocation","location","handleHashScroll"],"mappings":"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"}
@@ -30,7 +30,8 @@ const renderRouterToStream = async ({
30
30
  writable,
31
31
  readable
32
32
  } = new TransformStream();
33
- const stream = Solid__namespace.renderToStream(children, {
33
+ const docType = Solid__namespace.ssr("<!DOCTYPE html>");
34
+ const stream = Solid__namespace.renderToStream(() => [docType, Solid.memo(children)], {
34
35
  nonce: router.options.ssr?.nonce
35
36
  });
36
37
  if (isbot.isbot(request.headers.get("User-Agent"))) {
@@ -1 +1 @@
1
- {"version":3,"file":"renderRouterToStream.cjs","sources":["../../../src/ssr/renderRouterToStream.tsx"],"sourcesContent":["import * as Solid from 'solid-js/web'\nimport { isbot } from 'isbot'\nimport { transformReadableStreamWithRouter } from '@tanstack/router-core/ssr/server'\nimport type { JSXElement } from 'solid-js'\nimport type { ReadableStream } from 'node:stream/web'\nimport type { AnyRouter } from '@tanstack/router-core'\n\nexport const renderRouterToStream = async ({\n request,\n router,\n responseHeaders,\n children,\n}: {\n request: Request\n router: AnyRouter\n responseHeaders: Headers\n children: () => JSXElement\n}) => {\n const { writable, readable } = new TransformStream()\n\n const stream = Solid.renderToStream(children, {\n nonce: router.options.ssr?.nonce,\n })\n\n if (isbot(request.headers.get('User-Agent'))) {\n await stream\n }\n stream.pipeTo(writable)\n\n const responseStream = transformReadableStreamWithRouter(\n router,\n readable as unknown as ReadableStream,\n )\n return new Response(responseStream as any, {\n status: router.state.statusCode,\n headers: responseHeaders,\n })\n}\n"],"names":["renderRouterToStream","request","router","responseHeaders","children","writable","readable","TransformStream","stream","Solid","renderToStream","nonce","options","ssr","isbot","headers","get","pipeTo","responseStream","transformReadableStreamWithRouter","Response","status","state","statusCode"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAOO,MAAMA,uBAAuB,OAAO;AAAA,EACzCC;AAAAA,EACAC;AAAAA,EACAC;AAAAA,EACAC;AAMF,MAAM;AACJ,QAAM;AAAA,IAAEC;AAAAA,IAAUC;AAAAA,EAAAA,IAAa,IAAIC,gBAAAA;AAEnC,QAAMC,SAASC,iBAAMC,eAAeN,UAAU;AAAA,IAC5CO,OAAOT,OAAOU,QAAQC,KAAKF;AAAAA,EAAAA,CAC5B;AAED,MAAIG,MAAAA,MAAMb,QAAQc,QAAQC,IAAI,YAAY,CAAC,GAAG;AAC5C,UAAMR;AAAAA,EACR;AACAA,SAAOS,OAAOZ,QAAQ;AAEtB,QAAMa,iBAAiBC,OAAAA,kCACrBjB,QACAI,QACF;AACA,SAAO,IAAIc,SAASF,gBAAuB;AAAA,IACzCG,QAAQnB,OAAOoB,MAAMC;AAAAA,IACrBR,SAASZ;AAAAA,EAAAA,CACV;AACH;;"}
1
+ {"version":3,"file":"renderRouterToStream.cjs","sources":["../../../src/ssr/renderRouterToStream.tsx"],"sourcesContent":["import * as Solid from 'solid-js/web'\nimport { isbot } from 'isbot'\nimport { transformReadableStreamWithRouter } from '@tanstack/router-core/ssr/server'\nimport type { JSXElement } from 'solid-js'\nimport type { ReadableStream } from 'node:stream/web'\nimport type { AnyRouter } from '@tanstack/router-core'\n\nexport const renderRouterToStream = async ({\n request,\n router,\n responseHeaders,\n children,\n}: {\n request: Request\n router: AnyRouter\n responseHeaders: Headers\n children: () => JSXElement\n}) => {\n const { writable, readable } = new TransformStream()\n\n const docType = Solid.ssr('<!DOCTYPE html>')\n\n const stream = Solid.renderToStream(\n () => (\n <>\n {docType}\n {children()}\n </>\n ),\n {\n nonce: router.options.ssr?.nonce,\n },\n )\n\n if (isbot(request.headers.get('User-Agent'))) {\n await stream\n }\n stream.pipeTo(writable)\n\n const responseStream = transformReadableStreamWithRouter(\n router,\n readable as unknown as ReadableStream,\n )\n return new Response(responseStream as any, {\n status: router.state.statusCode,\n headers: responseHeaders,\n })\n}\n"],"names":["renderRouterToStream","request","router","responseHeaders","children","writable","readable","TransformStream","docType","Solid","ssr","stream","renderToStream","_$memo","nonce","options","isbot","headers","get","pipeTo","responseStream","transformReadableStreamWithRouter","Response","status","state","statusCode"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAOO,MAAMA,uBAAuB,OAAO;AAAA,EACzCC;AAAAA,EACAC;AAAAA,EACAC;AAAAA,EACAC;AAMF,MAAM;AACJ,QAAM;AAAA,IAAEC;AAAAA,IAAUC;AAAAA,EAAAA,IAAa,IAAIC,gBAAAA;AAEnC,QAAMC,UAAUC,iBAAMC,IAAI,iBAAiB;AAE3C,QAAMC,SAASF,iBAAMG,eACnB,MAAA,CAEKJ,SAAOK,MAAAA,KACPT,QAAQ,IAGb;AAAA,IACEU,OAAOZ,OAAOa,QAAQL,KAAKI;AAAAA,EAAAA,CAE/B;AAEA,MAAIE,MAAAA,MAAMf,QAAQgB,QAAQC,IAAI,YAAY,CAAC,GAAG;AAC5C,UAAMP;AAAAA,EACR;AACAA,SAAOQ,OAAOd,QAAQ;AAEtB,QAAMe,iBAAiBC,OAAAA,kCACrBnB,QACAI,QACF;AACA,SAAO,IAAIgB,SAASF,gBAAuB;AAAA,IACzCG,QAAQrB,OAAOsB,MAAMC;AAAAA,IACrBR,SAASd;AAAAA,EAAAA,CACV;AACH;;"}
@@ -30,7 +30,7 @@ const renderRouterToString = async ({
30
30
  router.serverSsr.setRenderFinished();
31
31
  const injectedHtml = await Promise.all(router.serverSsr.injectedHtml).then((htmls) => htmls.join(""));
32
32
  html = html.replace(`</body>`, `${injectedHtml}</body>`);
33
- return new Response(html, {
33
+ return new Response(`<!DOCTYPE html>${html}`, {
34
34
  status: router.state.statusCode,
35
35
  headers: responseHeaders
36
36
  });
@@ -1 +1 @@
1
- {"version":3,"file":"renderRouterToString.cjs","sources":["../../../src/ssr/renderRouterToString.tsx"],"sourcesContent":["import * as Solid from 'solid-js/web'\nimport type { JSXElement } from 'solid-js'\nimport type { AnyRouter } from '@tanstack/router-core'\n\nexport const renderRouterToString = async ({\n router,\n responseHeaders,\n children,\n}: {\n router: AnyRouter\n responseHeaders: Headers\n children: () => JSXElement\n}) => {\n try {\n let html = Solid.renderToString(children, {\n nonce: router.options.ssr?.nonce,\n })\n router.serverSsr!.setRenderFinished()\n const injectedHtml = await Promise.all(router.serverSsr!.injectedHtml).then(\n (htmls) => htmls.join(''),\n )\n html = html.replace(`</body>`, `${injectedHtml}</body>`)\n return new Response(html, {\n status: router.state.statusCode,\n headers: responseHeaders,\n })\n } catch (error) {\n console.error('Render to string error:', error)\n return new Response('Internal Server Error', {\n status: 500,\n headers: responseHeaders,\n })\n }\n}\n"],"names":["renderRouterToString","router","responseHeaders","children","html","Solid","renderToString","nonce","options","ssr","serverSsr","setRenderFinished","injectedHtml","Promise","all","then","htmls","join","replace","Response","status","state","statusCode","headers","error","console"],"mappings":";;;;;;;;;;;;;;;;;;;;AAIO,MAAMA,uBAAuB,OAAO;AAAA,EACzCC;AAAAA,EACAC;AAAAA,EACAC;AAKF,MAAM;AACJ,MAAI;AACF,QAAIC,OAAOC,iBAAMC,eAAeH,UAAU;AAAA,MACxCI,OAAON,OAAOO,QAAQC,KAAKF;AAAAA,IAAAA,CAC5B;AACDN,WAAOS,UAAWC,kBAAAA;AAClB,UAAMC,eAAe,MAAMC,QAAQC,IAAIb,OAAOS,UAAWE,YAAY,EAAEG,KACpEC,CAAAA,UAAUA,MAAMC,KAAK,EAAE,CAC1B;AACAb,WAAOA,KAAKc,QAAQ,WAAW,GAAGN,YAAY,SAAS;AACvD,WAAO,IAAIO,SAASf,MAAM;AAAA,MACxBgB,QAAQnB,OAAOoB,MAAMC;AAAAA,MACrBC,SAASrB;AAAAA,IAAAA,CACV;AAAA,EACH,SAASsB,OAAO;AACdC,YAAQD,MAAM,2BAA2BA,KAAK;AAC9C,WAAO,IAAIL,SAAS,yBAAyB;AAAA,MAC3CC,QAAQ;AAAA,MACRG,SAASrB;AAAAA,IAAAA,CACV;AAAA,EACH;AACF;;"}
1
+ {"version":3,"file":"renderRouterToString.cjs","sources":["../../../src/ssr/renderRouterToString.tsx"],"sourcesContent":["import * as Solid from 'solid-js/web'\nimport type { JSXElement } from 'solid-js'\nimport type { AnyRouter } from '@tanstack/router-core'\n\nexport const renderRouterToString = async ({\n router,\n responseHeaders,\n children,\n}: {\n router: AnyRouter\n responseHeaders: Headers\n children: () => JSXElement\n}) => {\n try {\n let html = Solid.renderToString(children, {\n nonce: router.options.ssr?.nonce,\n })\n router.serverSsr!.setRenderFinished()\n const injectedHtml = await Promise.all(router.serverSsr!.injectedHtml).then(\n (htmls) => htmls.join(''),\n )\n html = html.replace(`</body>`, `${injectedHtml}</body>`)\n return new Response(`<!DOCTYPE html>${html}`, {\n status: router.state.statusCode,\n headers: responseHeaders,\n })\n } catch (error) {\n console.error('Render to string error:', error)\n return new Response('Internal Server Error', {\n status: 500,\n headers: responseHeaders,\n })\n }\n}\n"],"names":["renderRouterToString","router","responseHeaders","children","html","Solid","renderToString","nonce","options","ssr","serverSsr","setRenderFinished","injectedHtml","Promise","all","then","htmls","join","replace","Response","status","state","statusCode","headers","error","console"],"mappings":";;;;;;;;;;;;;;;;;;;;AAIO,MAAMA,uBAAuB,OAAO;AAAA,EACzCC;AAAAA,EACAC;AAAAA,EACAC;AAKF,MAAM;AACJ,MAAI;AACF,QAAIC,OAAOC,iBAAMC,eAAeH,UAAU;AAAA,MACxCI,OAAON,OAAOO,QAAQC,KAAKF;AAAAA,IAAAA,CAC5B;AACDN,WAAOS,UAAWC,kBAAAA;AAClB,UAAMC,eAAe,MAAMC,QAAQC,IAAIb,OAAOS,UAAWE,YAAY,EAAEG,KACpEC,CAAAA,UAAUA,MAAMC,KAAK,EAAE,CAC1B;AACAb,WAAOA,KAAKc,QAAQ,WAAW,GAAGN,YAAY,SAAS;AACvD,WAAO,IAAIO,SAAS,kBAAkBf,IAAI,IAAI;AAAA,MAC5CgB,QAAQnB,OAAOoB,MAAMC;AAAAA,MACrBC,SAASrB;AAAAA,IAAAA,CACV;AAAA,EACH,SAASsB,OAAO;AACdC,YAAQD,MAAM,2BAA2BA,KAAK;AAC9C,WAAO,IAAIL,SAAS,yBAAyB;AAAA,MAC3CC,QAAQ;AAAA,MACRG,SAASrB;AAAAA,IAAAA,CACV;AAAA,EACH;AACF;;"}
@@ -1,7 +1,7 @@
1
1
  import * as Solid from 'solid-js';
2
2
  export interface ClientOnlyProps {
3
3
  /**
4
- * The children to render if the JS is loaded.
4
+ * The children to render when the JS is loaded.
5
5
  */
6
6
  children: Solid.JSX.Element;
7
7
  /**
@@ -1,16 +1,26 @@
1
- import { createComponent, memo, isServer } from "solid-js/web";
1
+ import { createComponent, memo } from "solid-js/web";
2
2
  import * as Solid from "solid-js";
3
3
  function ClientOnly(props) {
4
+ const hydrated = useHydrated();
4
5
  return createComponent(Solid.Show, {
5
- when: !isServer,
6
+ get when() {
7
+ return hydrated();
8
+ },
6
9
  get fallback() {
7
- return props.fallback;
10
+ return props.fallback ?? null;
8
11
  },
9
12
  get children() {
10
13
  return memo(() => props.children);
11
14
  }
12
15
  });
13
16
  }
17
+ function useHydrated() {
18
+ const [hydrated, setHydrated] = Solid.createSignal(false);
19
+ Solid.onMount(() => {
20
+ setHydrated(true);
21
+ });
22
+ return hydrated;
23
+ }
14
24
  export {
15
25
  ClientOnly
16
26
  };
@@ -1 +1 @@
1
- {"version":3,"file":"ClientOnly.js","sources":["../../src/ClientOnly.tsx"],"sourcesContent":["import * as Solid from 'solid-js'\nimport { isServer } from 'solid-js/web'\n\nexport interface ClientOnlyProps {\n /**\n * The children to render if the JS is loaded.\n */\n children: Solid.JSX.Element\n /**\n * The fallback component to render if the JS is not yet loaded.\n */\n fallback?: Solid.JSX.Element\n}\n\n/**\n * Render the children only after the JS has loaded client-side. Use an optional\n * fallback component if the JS is not yet loaded.\n *\n * @example\n * Render a Chart component if JS loads, renders a simple FakeChart\n * component server-side or if there is no JS. The FakeChart can have only the\n * UI without the behavior or be a loading spinner or skeleton.\n *\n * ```tsx\n * return (\n * <ClientOnly fallback={<FakeChart />}>\n * <Chart />\n * </ClientOnly>\n * )\n * ```\n */\nexport function ClientOnly(props: ClientOnlyProps) {\n return (\n <Solid.Show when={!isServer} fallback={props.fallback}>\n <>{props.children}</>\n </Solid.Show>\n )\n}\n"],"names":["ClientOnly","props","_$createComponent","Solid","Show","when","isServer","fallback","children","_$memo"],"mappings":";;AA+BO,SAASA,WAAWC,OAAwB;AACjD,SAAAC,gBACGC,MAAMC,MAAI;AAAA,IAACC,MAAM,CAACC;AAAAA,IAAQ,IAAEC,WAAQ;AAAA,aAAEN,MAAMM;AAAAA,IAAQ;AAAA,IAAA,IAAAC,WAAA;AAAA,aAAAC,KAAA,MAChDR,MAAMO,QAAQ;AAAA,IAAA;AAAA,EAAA,CAAA;AAGvB;"}
1
+ {"version":3,"file":"ClientOnly.js","sources":["../../src/ClientOnly.tsx"],"sourcesContent":["import * as Solid from 'solid-js'\n\nexport interface ClientOnlyProps {\n /**\n * The children to render when the JS is loaded.\n */\n children: Solid.JSX.Element\n /**\n * The fallback component to render if the JS is not yet loaded.\n */\n fallback?: Solid.JSX.Element\n}\n\n/**\n * Render the children only after the JS has loaded client-side. Use an optional\n * fallback component if the JS is not yet loaded.\n *\n * @example\n * Render a Chart component if JS loads, renders a simple FakeChart\n * component server-side or if there is no JS. The FakeChart can have only the\n * UI without the behavior or be a loading spinner or skeleton.\n *\n * ```tsx\n * return (\n * <ClientOnly fallback={<FakeChart />}>\n * <Chart />\n * </ClientOnly>\n * )\n * ```\n */\nexport function ClientOnly(props: ClientOnlyProps) {\n const hydrated = useHydrated()\n return (\n <Solid.Show when={hydrated()} fallback={props.fallback ?? null}>\n <>{props.children}</>\n </Solid.Show>\n )\n}\n\n/**\n * Return a boolean indicating if the JS has been hydrated already.\n * When doing Server-Side Rendering, the result will always be false.\n * When doing Client-Side Rendering, the result will always be false on the\n * first render and true from then on. Even if a new component renders it will\n * always start with true.\n *\n * @example\n * ```tsx\n * // Disable a button that needs JS to work.\n * const hydrated = useHydrated()\n * return (\n * <button type=\"button\" disabled={!hydrated()} onClick={doSomethingCustom}>\n * Click me\n * </button>\n * )\n * ```\n * @returns True if the JS has been hydrated already, false otherwise.\n */\nfunction useHydrated(): Solid.Accessor<boolean> {\n const [hydrated, setHydrated] = Solid.createSignal(false)\n Solid.onMount(() => {\n setHydrated(true)\n })\n return hydrated\n}\n"],"names":["ClientOnly","props","hydrated","useHydrated","_$createComponent","Solid","Show","when","fallback","children","_$memo","setHydrated","createSignal","onMount"],"mappings":";;AA8BO,SAASA,WAAWC,OAAwB;AACjD,QAAMC,WAAWC,YAAAA;AACjB,SAAAC,gBACGC,MAAMC,MAAI;AAAA,IAAA,IAACC,OAAI;AAAA,aAAEL,SAAAA;AAAAA,IAAU;AAAA,IAAA,IAAEM,WAAQ;AAAA,aAAEP,MAAMO,YAAY;AAAA,IAAI;AAAA,IAAA,IAAAC,WAAA;AAAA,aAAAC,KAAA,MACzDT,MAAMQ,QAAQ;AAAA,IAAA;AAAA,EAAA,CAAA;AAGvB;AAqBA,SAASN,cAAuC;AAC9C,QAAM,CAACD,UAAUS,WAAW,IAAIN,MAAMO,aAAa,KAAK;AACxDP,QAAMQ,QAAQ,MAAM;AAClBF,gBAAY,IAAI;AAAA,EAClB,CAAC;AACD,SAAOT;AACT;"}
@@ -3,6 +3,8 @@ import * as Solid from 'solid-js';
3
3
  export declare const useTags: () => () => RouterManagedTag[];
4
4
  /**
5
5
  * @description The `HeadContent` component is used to render meta tags, links, and scripts for the current route.
6
- * It should be rendered in the `<head>` of your document.
6
+ * When using full document hydration (hydrating from `<html>`), this component should be rendered in the `<body>`
7
+ * to ensure it's part of the reactive tree and updates correctly during client-side navigation.
8
+ * The component uses portals internally to render content into the `<head>` element.
7
9
  */
8
10
  export declare function HeadContent(): Solid.JSX.Element;
@@ -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 { 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 return () =>\n uniqBy(\n [\n ...meta(),\n ...preloadMeta(),\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 * It should be rendered in the `<head>` of your document.\n */\nexport function HeadContent() {\n const tags = useTags()\n\n return (\n <MetaProvider>\n {tags().map((tag) => (\n <Asset {...tag} />\n ))}\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","uniqBy","d","JSON","stringify","HeadContent","tags","_$createComponent","MetaProvider","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 { 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 return () =>\n uniqBy(\n [\n ...meta(),\n ...preloadMeta(),\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 {tags().map((tag) => (\n <Asset {...tag} />\n ))}\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","uniqBy","d","JSON","stringify","HeadContent","tags","_$createComponent","MetaProvider","Asset","arr","fn","seen","Set","item","key","has","add"],"mappings":"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"}
@@ -7,8 +7,8 @@ import { useRouterState } from "./useRouterState.js";
7
7
  import { useRouter } from "./useRouter.js";
8
8
  import { Transitioner } from "./Transitioner.js";
9
9
  import { matchContext } from "./matchContext.js";
10
- import { Match } from "./Match.js";
11
10
  import { SafeFragment } from "./SafeFragment.js";
11
+ import { Match } from "./Match.js";
12
12
  function Matches() {
13
13
  const router = useRouter();
14
14
  const ResolvedSuspense = router.isServer || typeof document !== "undefined" && router.ssr ? SafeFragment : Solid.Suspense;
@@ -22,7 +22,7 @@ function Matches() {
22
22
  return PendingComponent ? createComponent(PendingComponent, {}) : null;
23
23
  },
24
24
  get children() {
25
- return [memo(() => memo(() => !!!router.isServer)() && createComponent(Transitioner, {})), createComponent(MatchesInner, {})];
25
+ return [createComponent(Transitioner, {}), createComponent(MatchesInner, {})];
26
26
  }
27
27
  });
28
28
  }
@@ -39,10 +39,18 @@ function MatchesInner() {
39
39
  select: (s) => s.loadedAt
40
40
  });
41
41
  const matchComponent = () => {
42
- const id = matchId();
43
- return id ? createComponent(Match, {
44
- matchId: id
45
- }) : null;
42
+ return createComponent(Solid.Show, {
43
+ get when() {
44
+ return matchId();
45
+ },
46
+ get children() {
47
+ return createComponent(Match, {
48
+ get matchId() {
49
+ return matchId();
50
+ }
51
+ });
52
+ }
53
+ });
46
54
  };
47
55
  return createComponent(matchContext.Provider, {
48
56
  value: matchId,
@@ -51,7 +59,8 @@ function MatchesInner() {
51
59
  getResetKey: () => resetKey(),
52
60
  errorComponent: ErrorComponent,
53
61
  onCatch: (error) => {
54
- warning(false, `The following error wasn't caught by any route! At the very least, consider setting an 'errorComponent' in your RootRoute!`);
62
+ warning(false, `The following error wasn't caught by any route! At the very leas
63
+ t, consider setting an 'errorComponent' in your RootRoute!`);
55
64
  warning(false, error.message || error.toString());
56
65
  },
57
66
  get children() {