@tanstack/solid-router 2.0.0-alpha.6 → 2.0.0-alpha.7

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 (219) hide show
  1. package/dist/cjs/Asset.cjs +2 -2
  2. package/dist/cjs/Asset.cjs.map +1 -1
  3. package/dist/cjs/HeadContent.cjs +11 -1
  4. package/dist/cjs/HeadContent.cjs.map +1 -1
  5. package/dist/cjs/HeadContent.dev.cjs +11 -1
  6. package/dist/cjs/HeadContent.dev.cjs.map +1 -1
  7. package/dist/cjs/Match.cjs +265 -248
  8. package/dist/cjs/Match.cjs.map +1 -1
  9. package/dist/cjs/Match.d.cts +1 -3
  10. package/dist/cjs/Matches.cjs +35 -34
  11. package/dist/cjs/Matches.cjs.map +1 -1
  12. package/dist/cjs/RouterProvider.cjs +12 -8
  13. package/dist/cjs/RouterProvider.cjs.map +1 -1
  14. package/dist/cjs/RouterProvider.d.cts +1 -1
  15. package/dist/cjs/Scripts.cjs +23 -12
  16. package/dist/cjs/Scripts.cjs.map +1 -1
  17. package/dist/cjs/Scripts.d.cts +2 -1
  18. package/dist/cjs/Transitioner.cjs +55 -34
  19. package/dist/cjs/Transitioner.cjs.map +1 -1
  20. package/dist/cjs/headContentUtils.cjs +26 -23
  21. package/dist/cjs/headContentUtils.cjs.map +1 -1
  22. package/dist/cjs/headContentUtils.d.cts +2 -1
  23. package/dist/cjs/index.cjs +1 -1
  24. package/dist/cjs/index.dev.cjs +1 -1
  25. package/dist/cjs/link.cjs +143 -101
  26. package/dist/cjs/link.cjs.map +1 -1
  27. package/dist/cjs/matchContext.cjs +7 -5
  28. package/dist/cjs/matchContext.cjs.map +1 -1
  29. package/dist/cjs/matchContext.d.cts +8 -2
  30. package/dist/cjs/not-found.cjs +8 -4
  31. package/dist/cjs/not-found.cjs.map +1 -1
  32. package/dist/cjs/not-found.d.cts +1 -1
  33. package/dist/cjs/router.cjs +2 -1
  34. package/dist/cjs/router.cjs.map +1 -1
  35. package/dist/cjs/routerStores.cjs +75 -0
  36. package/dist/cjs/routerStores.cjs.map +1 -0
  37. package/dist/cjs/routerStores.d.cts +10 -0
  38. package/dist/cjs/ssr/RouterClient.cjs +1 -1
  39. package/dist/cjs/ssr/RouterClient.cjs.map +1 -1
  40. package/dist/cjs/ssr/renderRouterToStream.cjs +1 -1
  41. package/dist/cjs/ssr/renderRouterToStream.cjs.map +1 -1
  42. package/dist/cjs/ssr/renderRouterToString.cjs +1 -1
  43. package/dist/cjs/ssr/renderRouterToString.cjs.map +1 -1
  44. package/dist/cjs/useBlocker.cjs +12 -3
  45. package/dist/cjs/useBlocker.cjs.map +1 -1
  46. package/dist/cjs/useCanGoBack.cjs +6 -2
  47. package/dist/cjs/useCanGoBack.cjs.map +1 -1
  48. package/dist/cjs/useCanGoBack.d.cts +2 -1
  49. package/dist/cjs/useLoaderDeps.cjs +2 -3
  50. package/dist/cjs/useLoaderDeps.cjs.map +1 -1
  51. package/dist/cjs/useLocation.cjs +13 -2
  52. package/dist/cjs/useLocation.cjs.map +1 -1
  53. package/dist/cjs/useMatch.cjs +27 -15
  54. package/dist/cjs/useMatch.cjs.map +1 -1
  55. package/dist/cjs/useParams.cjs +1 -1
  56. package/dist/cjs/useParams.cjs.map +1 -1
  57. package/dist/cjs/useRouterState.cjs +12 -30
  58. package/dist/cjs/useRouterState.cjs.map +1 -1
  59. package/dist/cjs/useSearch.cjs +2 -1
  60. package/dist/cjs/useSearch.cjs.map +1 -1
  61. package/dist/cjs/utils.cjs +3 -17
  62. package/dist/cjs/utils.cjs.map +1 -1
  63. package/dist/cjs/utils.d.cts +0 -5
  64. package/dist/esm/Asset.js +6 -6
  65. package/dist/esm/Asset.js.map +1 -1
  66. package/dist/esm/HeadContent.dev.js +12 -2
  67. package/dist/esm/HeadContent.dev.js.map +1 -1
  68. package/dist/esm/HeadContent.js +12 -2
  69. package/dist/esm/HeadContent.js.map +1 -1
  70. package/dist/esm/Match.d.ts +1 -3
  71. package/dist/esm/Match.js +267 -250
  72. package/dist/esm/Match.js.map +1 -1
  73. package/dist/esm/Matches.js +40 -39
  74. package/dist/esm/Matches.js.map +1 -1
  75. package/dist/esm/RouterProvider.d.ts +1 -1
  76. package/dist/esm/RouterProvider.js +10 -7
  77. package/dist/esm/RouterProvider.js.map +1 -1
  78. package/dist/esm/ScriptOnce.js +2 -2
  79. package/dist/esm/ScriptOnce.js.map +1 -1
  80. package/dist/esm/Scripts.d.ts +2 -1
  81. package/dist/esm/Scripts.js +21 -11
  82. package/dist/esm/Scripts.js.map +1 -1
  83. package/dist/esm/Transitioner.js +56 -35
  84. package/dist/esm/Transitioner.js.map +1 -1
  85. package/dist/esm/headContentUtils.d.ts +2 -1
  86. package/dist/esm/headContentUtils.js +26 -23
  87. package/dist/esm/headContentUtils.js.map +1 -1
  88. package/dist/esm/index.dev.js +1 -1
  89. package/dist/esm/index.js +1 -1
  90. package/dist/esm/link.js +146 -104
  91. package/dist/esm/link.js.map +1 -1
  92. package/dist/esm/matchContext.d.ts +8 -2
  93. package/dist/esm/matchContext.js +7 -4
  94. package/dist/esm/matchContext.js.map +1 -1
  95. package/dist/esm/not-found.d.ts +1 -1
  96. package/dist/esm/not-found.js +6 -3
  97. package/dist/esm/not-found.js.map +1 -1
  98. package/dist/esm/router.js +2 -1
  99. package/dist/esm/router.js.map +1 -1
  100. package/dist/esm/routerStores.d.ts +10 -0
  101. package/dist/esm/routerStores.js +73 -0
  102. package/dist/esm/routerStores.js.map +1 -0
  103. package/dist/esm/scroll-restoration.js +2 -2
  104. package/dist/esm/scroll-restoration.js.map +1 -1
  105. package/dist/esm/ssr/RouterClient.js +1 -1
  106. package/dist/esm/ssr/RouterClient.js.map +1 -1
  107. package/dist/esm/ssr/renderRouterToStream.js +1 -1
  108. package/dist/esm/ssr/renderRouterToStream.js.map +1 -1
  109. package/dist/esm/ssr/renderRouterToString.js +1 -1
  110. package/dist/esm/ssr/renderRouterToString.js.map +1 -1
  111. package/dist/esm/useBlocker.js +12 -3
  112. package/dist/esm/useBlocker.js.map +1 -1
  113. package/dist/esm/useCanGoBack.d.ts +2 -1
  114. package/dist/esm/useCanGoBack.js +4 -2
  115. package/dist/esm/useCanGoBack.js.map +1 -1
  116. package/dist/esm/useLoaderDeps.js +2 -3
  117. package/dist/esm/useLoaderDeps.js.map +1 -1
  118. package/dist/esm/useLocation.js +11 -2
  119. package/dist/esm/useLocation.js.map +1 -1
  120. package/dist/esm/useMatch.js +28 -16
  121. package/dist/esm/useMatch.js.map +1 -1
  122. package/dist/esm/useParams.js +1 -1
  123. package/dist/esm/useParams.js.map +1 -1
  124. package/dist/esm/useRouterState.js +11 -30
  125. package/dist/esm/useRouterState.js.map +1 -1
  126. package/dist/esm/useSearch.js +2 -1
  127. package/dist/esm/useSearch.js.map +1 -1
  128. package/dist/esm/utils.d.ts +0 -5
  129. package/dist/esm/utils.js +4 -17
  130. package/dist/esm/utils.js.map +1 -1
  131. package/dist/source/Asset.jsx +3 -3
  132. package/dist/source/Asset.jsx.map +1 -1
  133. package/dist/source/HeadContent.dev.jsx +5 -1
  134. package/dist/source/HeadContent.dev.jsx.map +1 -1
  135. package/dist/source/HeadContent.jsx +5 -1
  136. package/dist/source/HeadContent.jsx.map +1 -1
  137. package/dist/source/Match.d.ts +1 -3
  138. package/dist/source/Match.jsx +260 -264
  139. package/dist/source/Match.jsx.map +1 -1
  140. package/dist/source/Matches.jsx +46 -46
  141. package/dist/source/Matches.jsx.map +1 -1
  142. package/dist/source/RouterProvider.d.ts +1 -1
  143. package/dist/source/RouterProvider.jsx +13 -9
  144. package/dist/source/RouterProvider.jsx.map +1 -1
  145. package/dist/source/Scripts.d.ts +2 -1
  146. package/dist/source/Scripts.jsx +46 -47
  147. package/dist/source/Scripts.jsx.map +1 -1
  148. package/dist/source/Transitioner.jsx +78 -42
  149. package/dist/source/Transitioner.jsx.map +1 -1
  150. package/dist/source/headContentUtils.d.ts +2 -1
  151. package/dist/source/headContentUtils.jsx +79 -80
  152. package/dist/source/headContentUtils.jsx.map +1 -1
  153. package/dist/source/link.jsx +145 -112
  154. package/dist/source/link.jsx.map +1 -1
  155. package/dist/source/matchContext.d.ts +8 -2
  156. package/dist/source/matchContext.jsx +7 -3
  157. package/dist/source/matchContext.jsx.map +1 -1
  158. package/dist/source/not-found.d.ts +1 -1
  159. package/dist/source/not-found.jsx +6 -5
  160. package/dist/source/not-found.jsx.map +1 -1
  161. package/dist/source/router.js +2 -1
  162. package/dist/source/router.js.map +1 -1
  163. package/dist/source/routerStores.d.ts +10 -0
  164. package/dist/source/routerStores.js +82 -0
  165. package/dist/source/routerStores.js.map +1 -0
  166. package/dist/source/ssr/RouterClient.jsx +1 -1
  167. package/dist/source/ssr/RouterClient.jsx.map +1 -1
  168. package/dist/source/ssr/renderRouterToStream.jsx +1 -1
  169. package/dist/source/ssr/renderRouterToStream.jsx.map +1 -1
  170. package/dist/source/ssr/renderRouterToString.jsx +1 -1
  171. package/dist/source/ssr/renderRouterToString.jsx.map +1 -1
  172. package/dist/source/useBlocker.jsx +19 -8
  173. package/dist/source/useBlocker.jsx.map +1 -1
  174. package/dist/source/useCanGoBack.d.ts +2 -1
  175. package/dist/source/useCanGoBack.js +4 -2
  176. package/dist/source/useCanGoBack.js.map +1 -1
  177. package/dist/source/useLoaderDeps.jsx +2 -3
  178. package/dist/source/useLoaderDeps.jsx.map +1 -1
  179. package/dist/source/useLocation.jsx +13 -3
  180. package/dist/source/useLocation.jsx.map +1 -1
  181. package/dist/source/useMatch.jsx +33 -23
  182. package/dist/source/useMatch.jsx.map +1 -1
  183. package/dist/source/useParams.jsx +1 -1
  184. package/dist/source/useParams.jsx.map +1 -1
  185. package/dist/source/useRouterState.jsx +14 -55
  186. package/dist/source/useRouterState.jsx.map +1 -1
  187. package/dist/source/useSearch.jsx +2 -1
  188. package/dist/source/useSearch.jsx.map +1 -1
  189. package/dist/source/utils.d.ts +0 -5
  190. package/dist/source/utils.js +2 -15
  191. package/dist/source/utils.js.map +1 -1
  192. package/package.json +2 -2
  193. package/skills/solid-router/SKILL.md +2 -0
  194. package/src/Asset.tsx +3 -3
  195. package/src/HeadContent.dev.tsx +10 -1
  196. package/src/HeadContent.tsx +10 -1
  197. package/src/Match.tsx +395 -349
  198. package/src/Matches.tsx +55 -54
  199. package/src/RouterProvider.tsx +13 -10
  200. package/src/Scripts.tsx +55 -54
  201. package/src/Transitioner.tsx +101 -58
  202. package/src/headContentUtils.tsx +104 -96
  203. package/src/link.tsx +188 -146
  204. package/src/matchContext.tsx +16 -7
  205. package/src/not-found.tsx +6 -6
  206. package/src/router.ts +2 -1
  207. package/src/routerStores.ts +119 -0
  208. package/src/ssr/RouterClient.tsx +1 -1
  209. package/src/ssr/renderRouterToStream.tsx +1 -1
  210. package/src/ssr/renderRouterToString.tsx +1 -1
  211. package/src/useBlocker.tsx +80 -63
  212. package/src/useCanGoBack.ts +6 -2
  213. package/src/useLoaderDeps.tsx +2 -3
  214. package/src/useLocation.tsx +18 -5
  215. package/src/useMatch.tsx +37 -38
  216. package/src/useParams.tsx +2 -3
  217. package/src/useRouterState.tsx +21 -67
  218. package/src/useSearch.tsx +2 -1
  219. package/src/utils.ts +2 -24
@@ -1,7 +1,6 @@
1
1
  import * as Solid from 'solid-js'
2
2
  import { escapeHtml } from '@tanstack/router-core'
3
3
  import { useRouter } from './useRouter'
4
- import { useRouterState } from './useRouterState'
5
4
  import type { RouterManagedTag } from '@tanstack/router-core'
6
5
 
7
6
  /**
@@ -11,11 +10,15 @@ import type { RouterManagedTag } from '@tanstack/router-core'
11
10
  export const useTags = () => {
12
11
  const router = useRouter()
13
12
  const nonce = router.options.ssr?.nonce
14
- const routeMeta = useRouterState({
15
- select: (state) => {
16
- return state.matches.map((match) => match.meta!).filter(Boolean)
17
- },
18
- })
13
+ const getTagKey = (tag: RouterManagedTag) => JSON.stringify(tag)
14
+ const activeMatches = Solid.createMemo(
15
+ () => router.stores.activeMatchesSnapshot.state,
16
+ )
17
+ const routeMeta = Solid.createMemo(() =>
18
+ activeMatches()
19
+ .map((match) => match.meta!)
20
+ .filter(Boolean),
21
+ )
19
22
 
20
23
  const meta: Solid.Accessor<Array<RouterManagedTag>> = Solid.createMemo(() => {
21
24
  const resultMeta: Array<RouterManagedTag> = []
@@ -89,100 +92,96 @@ export const useTags = () => {
89
92
  return resultMeta
90
93
  })
91
94
 
92
- const links = useRouterState({
93
- select: (state) => {
94
- const constructed = state.matches
95
- .map((match) => match.links!)
96
- .filter(Boolean)
97
- .flat(1)
98
- .map((link) => ({
99
- tag: 'link',
100
- attrs: {
101
- ...link,
102
- nonce,
103
- },
104
- })) satisfies Array<RouterManagedTag>
105
-
106
- const manifest = router.ssr?.manifest
107
-
108
- const assets = state.matches
109
- .map((match) => manifest?.routes[match.routeId]?.assets ?? [])
110
- .filter(Boolean)
111
- .flat(1)
112
- .filter((asset) => asset.tag === 'link')
113
- .map(
114
- (asset) =>
115
- ({
116
- tag: 'link',
117
- attrs: { ...asset.attrs, nonce },
118
- }) satisfies RouterManagedTag,
119
- )
120
-
121
- return [...constructed, ...assets]
122
- },
123
- })
124
-
125
- const preloadLinks = useRouterState({
126
- select: (state) => {
127
- const preloadLinks: Array<RouterManagedTag> = []
128
-
129
- state.matches
130
- .map((match) => router.looseRoutesById[match.routeId]!)
131
- .forEach((route) =>
132
- router.ssr?.manifest?.routes[route.id]?.preloads
133
- ?.filter(Boolean)
134
- .forEach((preload) => {
135
- preloadLinks.push({
136
- tag: 'link',
137
- attrs: {
138
- rel: 'modulepreload',
139
- href: preload,
140
- nonce,
141
- },
142
- })
143
- }),
144
- )
145
-
146
- return preloadLinks
147
- },
148
- })
149
-
150
- const styles = useRouterState({
151
- select: (state) =>
152
- (
153
- state.matches
154
- .map((match) => match.styles!)
155
- .flat(1)
156
- .filter(Boolean) as Array<RouterManagedTag>
157
- ).map(({ children, ...style }) => ({
158
- tag: 'style',
95
+ const links = Solid.createMemo(() => {
96
+ const matches = activeMatches()
97
+ const constructed = matches
98
+ .map((match) => match.links!)
99
+ .filter(Boolean)
100
+ .flat(1)
101
+ .map((link) => ({
102
+ tag: 'link',
159
103
  attrs: {
160
- ...style,
104
+ ...link,
161
105
  nonce,
162
106
  },
163
- children,
164
- })),
107
+ })) satisfies Array<RouterManagedTag>
108
+
109
+ const manifest = router.ssr?.manifest
110
+
111
+ const assets = matches
112
+ .map((match) => manifest?.routes[match.routeId]?.assets ?? [])
113
+ .filter(Boolean)
114
+ .flat(1)
115
+ .filter((asset) => asset.tag === 'link')
116
+ .map(
117
+ (asset) =>
118
+ ({
119
+ tag: 'link',
120
+ attrs: { ...asset.attrs, nonce },
121
+ }) satisfies RouterManagedTag,
122
+ )
123
+
124
+ return [...constructed, ...assets]
165
125
  })
166
126
 
167
- const headScripts = useRouterState({
168
- select: (state) =>
169
- (
170
- state.matches
171
- .map((match) => match.headScripts!)
172
- .flat(1)
173
- .filter(Boolean) as Array<RouterManagedTag>
174
- ).map(({ children, ...script }) => ({
175
- tag: 'script',
176
- attrs: {
177
- ...script,
178
- nonce,
179
- },
180
- children,
181
- })),
127
+ const preloadLinks = Solid.createMemo(() => {
128
+ const matches = activeMatches()
129
+ const preloadLinks: Array<RouterManagedTag> = []
130
+
131
+ matches
132
+ .map((match) => router.looseRoutesById[match.routeId]!)
133
+ .forEach((route) =>
134
+ router.ssr?.manifest?.routes[route.id]?.preloads
135
+ ?.filter(Boolean)
136
+ .forEach((preload) => {
137
+ preloadLinks.push({
138
+ tag: 'link',
139
+ attrs: {
140
+ rel: 'modulepreload',
141
+ href: preload,
142
+ nonce,
143
+ },
144
+ })
145
+ }),
146
+ )
147
+
148
+ return preloadLinks
182
149
  })
183
150
 
184
- return () =>
185
- uniqBy(
151
+ const styles = Solid.createMemo(() =>
152
+ (
153
+ activeMatches()
154
+ .map((match) => match.styles!)
155
+ .flat(1)
156
+ .filter(Boolean) as Array<RouterManagedTag>
157
+ ).map(({ children, ...style }) => ({
158
+ tag: 'style',
159
+ attrs: {
160
+ ...style,
161
+ nonce,
162
+ },
163
+ children,
164
+ })),
165
+ )
166
+
167
+ const headScripts = Solid.createMemo(() =>
168
+ (
169
+ activeMatches()
170
+ .map((match) => match.headScripts!)
171
+ .flat(1)
172
+ .filter(Boolean) as Array<RouterManagedTag>
173
+ ).map(({ children, ...script }) => ({
174
+ tag: 'script',
175
+ attrs: {
176
+ ...script,
177
+ nonce,
178
+ },
179
+ children,
180
+ })),
181
+ )
182
+
183
+ return Solid.createMemo((prev: Array<RouterManagedTag> | undefined) => {
184
+ const next = uniqBy(
186
185
  [
187
186
  ...meta(),
188
187
  ...preloadLinks(),
@@ -190,10 +189,19 @@ export const useTags = () => {
190
189
  ...styles(),
191
190
  ...headScripts(),
192
191
  ] as Array<RouterManagedTag>,
193
- (d) => {
194
- return JSON.stringify(d)
195
- },
192
+ getTagKey,
196
193
  )
194
+
195
+ if (
196
+ prev &&
197
+ prev.length === next.length &&
198
+ prev.every((tag, index) => getTagKey(tag) === getTagKey(next[index]!))
199
+ ) {
200
+ return prev
201
+ }
202
+
203
+ return next
204
+ })
197
205
  }
198
206
 
199
207
  export function uniqBy<T>(arr: Array<T>, fn: (item: T) => string) {