@tanstack/vue-router 1.147.1 → 1.149.3

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 (41) hide show
  1. package/dist/esm/HeadContent.d.ts +0 -2
  2. package/dist/esm/HeadContent.dev.d.ts +10 -0
  3. package/dist/esm/HeadContent.dev.js +26 -0
  4. package/dist/esm/HeadContent.dev.js.map +1 -0
  5. package/dist/esm/HeadContent.js +3 -135
  6. package/dist/esm/HeadContent.js.map +1 -1
  7. package/dist/esm/headContentUtils.d.ts +3 -0
  8. package/dist/esm/headContentUtils.js +128 -0
  9. package/dist/esm/headContentUtils.js.map +1 -0
  10. package/dist/esm/index.d.ts +1 -0
  11. package/dist/esm/index.dev.d.ts +2 -0
  12. package/dist/esm/index.dev.js +146 -0
  13. package/dist/esm/index.dev.js.map +1 -0
  14. package/dist/esm/index.js +3 -1
  15. package/dist/esm/index.js.map +1 -1
  16. package/dist/esm/ssr/RouterServer.js +1 -1
  17. package/dist/esm/ssr/RouterServer.js.map +1 -1
  18. package/dist/source/HeadContent.d.ts +0 -2
  19. package/dist/source/HeadContent.dev.d.ts +10 -0
  20. package/dist/source/HeadContent.dev.jsx +35 -0
  21. package/dist/source/HeadContent.dev.jsx.map +1 -0
  22. package/dist/source/HeadContent.jsx +2 -165
  23. package/dist/source/HeadContent.jsx.map +1 -1
  24. package/dist/source/headContentUtils.d.ts +3 -0
  25. package/dist/source/headContentUtils.jsx +150 -0
  26. package/dist/source/headContentUtils.jsx.map +1 -0
  27. package/dist/source/index.d.ts +1 -0
  28. package/dist/source/index.dev.d.ts +2 -0
  29. package/dist/source/index.dev.jsx +6 -0
  30. package/dist/source/index.dev.jsx.map +1 -0
  31. package/dist/source/index.jsx +1 -0
  32. package/dist/source/index.jsx.map +1 -1
  33. package/dist/source/ssr/RouterServer.jsx +1 -1
  34. package/dist/source/ssr/RouterServer.jsx.map +1 -1
  35. package/package.json +3 -2
  36. package/src/HeadContent.dev.tsx +42 -0
  37. package/src/HeadContent.tsx +2 -194
  38. package/src/headContentUtils.tsx +176 -0
  39. package/src/index.dev.tsx +6 -0
  40. package/src/index.tsx +1 -0
  41. package/src/ssr/RouterServer.tsx +1 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HeadContent.dev.jsx","sourceRoot":"","sources":["../../src/HeadContent.dev.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,MAAM,KAAK,CAAA;AAE1B,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAC/B,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAA;AAE5C,MAAM,eAAe,GAAG,iCAAiC,CAAA;AAEzD;;;;;GAKG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,GAAG,CAAC,eAAe,CAAC;IAC7C,IAAI,EAAE,aAAa;IACnB,KAAK;QACH,MAAM,IAAI,GAAG,OAAO,EAAE,CAAA;QACtB,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAA;QAE9B,gDAAgD;QAChD,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE;YACjB,QAAQ;iBACL,gBAAgB,CAAC,QAAQ,eAAe,GAAG,CAAC;iBAC5C,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,CAAA;QACjC,CAAC,CAAC,CAAA;QAEF,OAAO,GAAG,EAAE;YACV,wCAAwC;YACxC,MAAM,YAAY,GAAG,QAAQ,CAAC,KAAK;gBACjC,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,eAAe,CAAC,CAAC;gBACvD,CAAC,CAAC,IAAI,EAAE,CAAA;YAEV,OAAO,YAAY,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAC9B,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE;gBACX,GAAG,GAAG;gBACN,GAAG,EAAE,YAAY,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE;aACvC,CAAC,CACH,CAAA;QACH,CAAC,CAAA;IACH,CAAC;CACF,CAAC,CAAA"}
@@ -1,153 +1,6 @@
1
1
  import * as Vue from 'vue';
2
- import { buildDevStylesUrl, escapeHtml } from '@tanstack/router-core';
3
2
  import { Asset } from './Asset';
4
- import { useRouter } from './useRouter';
5
- import { useRouterState } from './useRouterState';
6
- /**
7
- * Renders a stylesheet link for dev mode CSS collection.
8
- * On the server, renders the full link with route-scoped CSS URL.
9
- * On the client, renders the same link to avoid hydration mismatch,
10
- * then removes it after hydration since Vite's HMR handles CSS updates.
11
- */
12
- const DevStylesLink = Vue.defineComponent({
13
- name: 'DevStylesLink',
14
- setup() {
15
- const router = useRouter();
16
- const routeIds = useRouterState({
17
- select: (state) => state.matches.map((match) => match.routeId),
18
- });
19
- Vue.onMounted(() => {
20
- // After hydration, remove the SSR-rendered dev styles link
21
- document
22
- .querySelectorAll('[data-tanstack-start-dev-styles]')
23
- .forEach((el) => el.remove());
24
- });
25
- const href = Vue.computed(() => buildDevStylesUrl(router.basepath, routeIds.value));
26
- return () => Vue.h('link', {
27
- rel: 'stylesheet',
28
- href: href.value,
29
- 'data-tanstack-start-dev-styles': true,
30
- });
31
- },
32
- });
33
- export const useTags = () => {
34
- const router = useRouter();
35
- const routeMeta = useRouterState({
36
- select: (state) => {
37
- return state.matches.map((match) => match.meta).filter(Boolean);
38
- },
39
- });
40
- const meta = Vue.computed(() => {
41
- const resultMeta = [];
42
- const metaByAttribute = {};
43
- let title;
44
- [...routeMeta.value].reverse().forEach((metas) => {
45
- ;
46
- [...metas].reverse().forEach((m) => {
47
- if (!m)
48
- return;
49
- if (m.title) {
50
- if (!title) {
51
- title = {
52
- tag: 'title',
53
- children: m.title,
54
- };
55
- }
56
- }
57
- else if ('script:ld+json' in m) {
58
- // Handle JSON-LD structured data
59
- // Content is HTML-escaped to prevent XSS when injected via innerHTML
60
- try {
61
- const json = JSON.stringify(m['script:ld+json']);
62
- resultMeta.push({
63
- tag: 'script',
64
- attrs: {
65
- type: 'application/ld+json',
66
- },
67
- children: escapeHtml(json),
68
- });
69
- }
70
- catch {
71
- // Skip invalid JSON-LD objects
72
- }
73
- }
74
- else {
75
- const attribute = m.name ?? m.property;
76
- if (attribute) {
77
- if (metaByAttribute[attribute]) {
78
- return;
79
- }
80
- else {
81
- metaByAttribute[attribute] = true;
82
- }
83
- }
84
- resultMeta.push({
85
- tag: 'meta',
86
- attrs: {
87
- ...m,
88
- },
89
- });
90
- }
91
- });
92
- });
93
- if (title) {
94
- resultMeta.push(title);
95
- }
96
- resultMeta.reverse();
97
- return resultMeta;
98
- });
99
- const links = useRouterState({
100
- select: (state) => state.matches
101
- .map((match) => match.links)
102
- .filter(Boolean)
103
- .flat(1)
104
- .map((link) => ({
105
- tag: 'link',
106
- attrs: {
107
- ...link,
108
- },
109
- })),
110
- });
111
- const preloadMeta = useRouterState({
112
- select: (state) => {
113
- const preloadMeta = [];
114
- state.matches
115
- .map((match) => router.looseRoutesById[match.routeId])
116
- .forEach((route) => router.ssr?.manifest?.routes[route.id]?.preloads
117
- ?.filter(Boolean)
118
- .forEach((preload) => {
119
- preloadMeta.push({
120
- tag: 'link',
121
- attrs: {
122
- rel: 'modulepreload',
123
- href: preload,
124
- },
125
- });
126
- }));
127
- return preloadMeta;
128
- },
129
- });
130
- const headScripts = useRouterState({
131
- select: (state) => state.matches
132
- .map((match) => match.headScripts)
133
- .flat(1)
134
- .filter(Boolean).map(({ children, ...script }) => ({
135
- tag: 'script',
136
- attrs: {
137
- ...script,
138
- },
139
- children,
140
- })),
141
- });
142
- return () => uniqBy([
143
- ...meta.value,
144
- ...preloadMeta.value,
145
- ...links.value,
146
- ...headScripts.value,
147
- ], (d) => {
148
- return JSON.stringify(d);
149
- });
150
- };
3
+ import { useTags } from './headContentUtils';
151
4
  /**
152
5
  * @description The `HeadContent` component is used to render meta tags, links, and scripts for the current route.
153
6
  * It should be rendered in the `<head>` of your document.
@@ -157,27 +10,11 @@ export const HeadContent = Vue.defineComponent({
157
10
  setup() {
158
11
  const tags = useTags();
159
12
  return () => {
160
- const children = tags().map((tag) => Vue.h(Asset, {
13
+ return tags().map((tag) => Vue.h(Asset, {
161
14
  ...tag,
162
15
  key: `tsr-meta-${JSON.stringify(tag)}`,
163
16
  }));
164
- // In dev mode, prepend the DevStylesLink
165
- if (process.env.NODE_ENV !== 'production') {
166
- return [Vue.h(DevStylesLink), ...children];
167
- }
168
- return children;
169
17
  };
170
18
  },
171
19
  });
172
- function uniqBy(arr, fn) {
173
- const seen = new Set();
174
- return arr.filter((item) => {
175
- const key = fn(item);
176
- if (seen.has(key)) {
177
- return false;
178
- }
179
- seen.add(key);
180
- return true;
181
- });
182
- }
183
20
  //# sourceMappingURL=HeadContent.jsx.map
@@ -1 +1 @@
1
- {"version":3,"file":"HeadContent.jsx","sourceRoot":"","sources":["../../src/HeadContent.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,MAAM,KAAK,CAAA;AAE1B,OAAO,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AACrE,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAC/B,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AACvC,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAGjD;;;;;GAKG;AACH,MAAM,aAAa,GAAG,GAAG,CAAC,eAAe,CAAC;IACxC,IAAI,EAAE,eAAe;IACrB,KAAK;QACH,MAAM,MAAM,GAAG,SAAS,EAAE,CAAA;QAC1B,MAAM,QAAQ,GAAG,cAAc,CAAC;YAC9B,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC;SAC/D,CAAC,CAAA;QAEF,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE;YACjB,2DAA2D;YAC3D,QAAQ;iBACL,gBAAgB,CAAC,kCAAkC,CAAC;iBACpD,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,CAAA;QACjC,CAAC,CAAC,CAAA;QAEF,MAAM,IAAI,GAAG,GAAG,CAAC,QAAQ,CAAC,GAAG,EAAE,CAC7B,iBAAiB,CAAC,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,KAAK,CAAC,CACnD,CAAA;QAED,OAAO,GAAG,EAAE,CACV,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE;YACZ,GAAG,EAAE,YAAY;YACjB,IAAI,EAAE,IAAI,CAAC,KAAK;YAChB,gCAAgC,EAAE,IAAI;SACvC,CAAC,CAAA;IACN,CAAC;CACF,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,OAAO,GAAG,GAAG,EAAE;IAC1B,MAAM,MAAM,GAAG,SAAS,EAAE,CAAA;IAE1B,MAAM,SAAS,GAAG,cAAc,CAAC;QAC/B,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE;YAChB,OAAO,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;QAClE,CAAC;KACF,CAAC,CAAA;IAEF,MAAM,IAAI,GAAqC,GAAG,CAAC,QAAQ,CAAC,GAAG,EAAE;QAC/D,MAAM,UAAU,GAA4B,EAAE,CAAA;QAC9C,MAAM,eAAe,GAAyB,EAAE,CAAA;QAChD,IAAI,KAAmC,CACtC;QAAA,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;YAChD,CAAC;YAAA,CAAC,GAAG,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;gBAClC,IAAI,CAAC,CAAC;oBAAE,OAAM;gBAEd,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;oBACZ,IAAI,CAAC,KAAK,EAAE,CAAC;wBACX,KAAK,GAAG;4BACN,GAAG,EAAE,OAAO;4BACZ,QAAQ,EAAE,CAAC,CAAC,KAAK;yBAClB,CAAA;oBACH,CAAC;gBACH,CAAC;qBAAM,IAAI,gBAAgB,IAAI,CAAC,EAAE,CAAC;oBACjC,iCAAiC;oBACjC,qEAAqE;oBACrE,IAAI,CAAC;wBACH,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAA;wBAChD,UAAU,CAAC,IAAI,CAAC;4BACd,GAAG,EAAE,QAAQ;4BACb,KAAK,EAAE;gCACL,IAAI,EAAE,qBAAqB;6BAC5B;4BACD,QAAQ,EAAE,UAAU,CAAC,IAAI,CAAC;yBAC3B,CAAC,CAAA;oBACJ,CAAC;oBAAC,MAAM,CAAC;wBACP,+BAA+B;oBACjC,CAAC;gBACH,CAAC;qBAAM,CAAC;oBACN,MAAM,SAAS,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,QAAQ,CAAA;oBACtC,IAAI,SAAS,EAAE,CAAC;wBACd,IAAI,eAAe,CAAC,SAAS,CAAC,EAAE,CAAC;4BAC/B,OAAM;wBACR,CAAC;6BAAM,CAAC;4BACN,eAAe,CAAC,SAAS,CAAC,GAAG,IAAI,CAAA;wBACnC,CAAC;oBACH,CAAC;oBAED,UAAU,CAAC,IAAI,CAAC;wBACd,GAAG,EAAE,MAAM;wBACX,KAAK,EAAE;4BACL,GAAG,CAAC;yBACL;qBACF,CAAC,CAAA;gBACJ,CAAC;YACH,CAAC,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;QAEF,IAAI,KAAK,EAAE,CAAC;YACV,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QACxB,CAAC;QAED,UAAU,CAAC,OAAO,EAAE,CAAA;QAEpB,OAAO,UAAU,CAAA;IACnB,CAAC,CAAC,CAAA;IAEF,MAAM,KAAK,GAAG,cAAc,CAAC;QAC3B,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CAChB,KAAK,CAAC,OAAO;aACV,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAM,CAAC;aAC5B,MAAM,CAAC,OAAO,CAAC;aACf,IAAI,CAAC,CAAC,CAAC;aACP,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YACd,GAAG,EAAE,MAAM;YACX,KAAK,EAAE;gBACL,GAAG,IAAI;aACR;SACF,CAAC,CAA4B;KACnC,CAAC,CAAA;IAEF,MAAM,WAAW,GAAG,cAAc,CAAC;QACjC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE;YAChB,MAAM,WAAW,GAA4B,EAAE,CAAA;YAE/C,KAAK,CAAC,OAAO;iBACV,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,OAAO,CAAE,CAAC;iBACtD,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CACjB,MAAM,CAAC,GAAG,EAAE,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,QAAQ;gBAC9C,EAAE,MAAM,CAAC,OAAO,CAAC;iBAChB,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;gBACnB,WAAW,CAAC,IAAI,CAAC;oBACf,GAAG,EAAE,MAAM;oBACX,KAAK,EAAE;wBACL,GAAG,EAAE,eAAe;wBACpB,IAAI,EAAE,OAAO;qBACd;iBACF,CAAC,CAAA;YACJ,CAAC,CAAC,CACL,CAAA;YAEH,OAAO,WAAW,CAAA;QACpB,CAAC;KACF,CAAC,CAAA;IAEF,MAAM,WAAW,GAAG,cAAc,CAAC;QACjC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CAEd,KAAK,CAAC,OAAO;aACV,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,WAAY,CAAC;aAClC,IAAI,CAAC,CAAC,CAAC;aACP,MAAM,CAAC,OAAO,CAClB,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,EAAE,GAAG,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC;YAClC,GAAG,EAAE,QAAQ;YACb,KAAK,EAAE;gBACL,GAAG,MAAM;aACV;YACD,QAAQ;SACT,CAAC,CAAC;KACN,CAAC,CAAA;IAEF,OAAO,GAAG,EAAE,CACV,MAAM,CACJ;QACE,GAAG,IAAI,CAAC,KAAK;QACb,GAAG,WAAW,CAAC,KAAK;QACpB,GAAG,KAAK,CAAC,KAAK;QACd,GAAG,WAAW,CAAC,KAAK;KACM,EAC5B,CAAC,CAAC,EAAE,EAAE;QACJ,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAA;IAC1B,CAAC,CACF,CAAA;AACL,CAAC,CAAA;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,GAAG,CAAC,eAAe,CAAC;IAC7C,IAAI,EAAE,aAAa;IACnB,KAAK;QACH,MAAM,IAAI,GAAG,OAAO,EAAE,CAAA;QAEtB,OAAO,GAAG,EAAE;YACV,MAAM,QAAQ,GAAG,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAClC,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE;gBACX,GAAG,GAAG;gBACN,GAAG,EAAE,YAAY,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE;aACvC,CAAC,CACH,CAAA;YAED,yCAAyC;YACzC,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,EAAE,CAAC;gBAC1C,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,aAAa,CAAC,EAAE,GAAG,QAAQ,CAAC,CAAA;YAC5C,CAAC;YAED,OAAO,QAAQ,CAAA;QACjB,CAAC,CAAA;IACH,CAAC;CACF,CAAC,CAAA;AAEF,SAAS,MAAM,CAAI,GAAa,EAAE,EAAuB;IACvD,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAA;IAC9B,OAAO,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;QACzB,MAAM,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,CAAA;QACpB,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YAClB,OAAO,KAAK,CAAA;QACd,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QACb,OAAO,IAAI,CAAA;IACb,CAAC,CAAC,CAAA;AACJ,CAAC"}
1
+ {"version":3,"file":"HeadContent.jsx","sourceRoot":"","sources":["../../src/HeadContent.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,MAAM,KAAK,CAAA;AAE1B,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAC/B,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAA;AAE5C;;;GAGG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,GAAG,CAAC,eAAe,CAAC;IAC7C,IAAI,EAAE,aAAa;IACnB,KAAK;QACH,MAAM,IAAI,GAAG,OAAO,EAAE,CAAA;QAEtB,OAAO,GAAG,EAAE;YACV,OAAO,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CACxB,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE;gBACX,GAAG,GAAG;gBACN,GAAG,EAAE,YAAY,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE;aACvC,CAAC,CACH,CAAA;QACH,CAAC,CAAA;IACH,CAAC;CACF,CAAC,CAAA"}
@@ -0,0 +1,3 @@
1
+ import type { RouterManagedTag } from '@tanstack/router-core';
2
+ export declare const useTags: () => () => RouterManagedTag[];
3
+ export declare function uniqBy<T>(arr: Array<T>, fn: (item: T) => string): T[];
@@ -0,0 +1,150 @@
1
+ import * as Vue from 'vue';
2
+ import { escapeHtml } from '@tanstack/router-core';
3
+ import { useRouter } from './useRouter';
4
+ import { useRouterState } from './useRouterState';
5
+ export const useTags = () => {
6
+ const router = useRouter();
7
+ const routeMeta = useRouterState({
8
+ select: (state) => {
9
+ return state.matches.map((match) => match.meta).filter(Boolean);
10
+ },
11
+ });
12
+ const meta = Vue.computed(() => {
13
+ const resultMeta = [];
14
+ const metaByAttribute = {};
15
+ let title;
16
+ [...routeMeta.value].reverse().forEach((metas) => {
17
+ ;
18
+ [...metas].reverse().forEach((m) => {
19
+ if (!m)
20
+ return;
21
+ if (m.title) {
22
+ if (!title) {
23
+ title = {
24
+ tag: 'title',
25
+ children: m.title,
26
+ };
27
+ }
28
+ }
29
+ else if ('script:ld+json' in m) {
30
+ // Handle JSON-LD structured data
31
+ // Content is HTML-escaped to prevent XSS when injected via innerHTML
32
+ try {
33
+ const json = JSON.stringify(m['script:ld+json']);
34
+ resultMeta.push({
35
+ tag: 'script',
36
+ attrs: {
37
+ type: 'application/ld+json',
38
+ },
39
+ children: escapeHtml(json),
40
+ });
41
+ }
42
+ catch {
43
+ // Skip invalid JSON-LD objects
44
+ }
45
+ }
46
+ else {
47
+ const attribute = m.name ?? m.property;
48
+ if (attribute) {
49
+ if (metaByAttribute[attribute]) {
50
+ return;
51
+ }
52
+ else {
53
+ metaByAttribute[attribute] = true;
54
+ }
55
+ }
56
+ resultMeta.push({
57
+ tag: 'meta',
58
+ attrs: {
59
+ ...m,
60
+ },
61
+ });
62
+ }
63
+ });
64
+ });
65
+ if (title) {
66
+ resultMeta.push(title);
67
+ }
68
+ resultMeta.reverse();
69
+ return resultMeta;
70
+ });
71
+ const links = useRouterState({
72
+ select: (state) => state.matches
73
+ .map((match) => match.links)
74
+ .filter(Boolean)
75
+ .flat(1)
76
+ .map((link) => ({
77
+ tag: 'link',
78
+ attrs: {
79
+ ...link,
80
+ },
81
+ })),
82
+ });
83
+ const preloadMeta = useRouterState({
84
+ select: (state) => {
85
+ const preloadMeta = [];
86
+ state.matches
87
+ .map((match) => router.looseRoutesById[match.routeId])
88
+ .forEach((route) => router.ssr?.manifest?.routes[route.id]?.preloads
89
+ ?.filter(Boolean)
90
+ .forEach((preload) => {
91
+ preloadMeta.push({
92
+ tag: 'link',
93
+ attrs: {
94
+ rel: 'modulepreload',
95
+ href: preload,
96
+ },
97
+ });
98
+ }));
99
+ return preloadMeta;
100
+ },
101
+ });
102
+ const headScripts = useRouterState({
103
+ select: (state) => state.matches
104
+ .map((match) => match.headScripts)
105
+ .flat(1)
106
+ .filter(Boolean).map(({ children, ...script }) => ({
107
+ tag: 'script',
108
+ attrs: {
109
+ ...script,
110
+ },
111
+ children,
112
+ })),
113
+ });
114
+ const manifestAssets = useRouterState({
115
+ select: (state) => {
116
+ const manifest = router.ssr?.manifest;
117
+ const assets = state.matches
118
+ .map((match) => manifest?.routes[match.routeId]?.assets ?? [])
119
+ .filter(Boolean)
120
+ .flat(1)
121
+ .filter((asset) => asset.tag === 'link')
122
+ .map((asset) => ({
123
+ tag: 'link',
124
+ attrs: { ...asset.attrs },
125
+ }));
126
+ return assets;
127
+ },
128
+ });
129
+ return () => uniqBy([
130
+ ...manifestAssets.value,
131
+ ...meta.value,
132
+ ...preloadMeta.value,
133
+ ...links.value,
134
+ ...headScripts.value,
135
+ ], (d) => {
136
+ return JSON.stringify(d);
137
+ });
138
+ };
139
+ export function uniqBy(arr, fn) {
140
+ const seen = new Set();
141
+ return arr.filter((item) => {
142
+ const key = fn(item);
143
+ if (seen.has(key)) {
144
+ return false;
145
+ }
146
+ seen.add(key);
147
+ return true;
148
+ });
149
+ }
150
+ //# sourceMappingURL=headContentUtils.jsx.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"headContentUtils.jsx","sourceRoot":"","sources":["../../src/headContentUtils.tsx"],"names":[],"mappings":"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"}
@@ -46,6 +46,7 @@ export type { ValidateFromPath, ValidateToPath, ValidateSearch, ValidateParams,
46
46
  export { ScriptOnce } from './ScriptOnce';
47
47
  export { Asset } from './Asset';
48
48
  export { HeadContent } from './HeadContent';
49
+ export { useTags } from './headContentUtils';
49
50
  export { Scripts } from './Scripts';
50
51
  export { Body } from './Body';
51
52
  export { Html } from './Html';
@@ -0,0 +1,2 @@
1
+ export * from './index';
2
+ export { HeadContent } from './HeadContent.dev';
@@ -0,0 +1,6 @@
1
+ // Development entry point - re-exports everything from index.tsx
2
+ // but overrides HeadContent with the dev version that handles
3
+ // dev styles cleanup after hydration
4
+ export * from './index';
5
+ export { HeadContent } from './HeadContent.dev';
6
+ //# sourceMappingURL=index.dev.jsx.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.dev.jsx","sourceRoot":"","sources":["../../src/index.dev.tsx"],"names":[],"mappings":"AAAA,iEAAiE;AACjE,8DAA8D;AAC9D,qCAAqC;AAErC,cAAc,SAAS,CAAA;AACvB,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA"}
@@ -35,6 +35,7 @@ export { notFound, isNotFound } from '@tanstack/router-core';
35
35
  export { ScriptOnce } from './ScriptOnce';
36
36
  export { Asset } from './Asset';
37
37
  export { HeadContent } from './HeadContent';
38
+ export { useTags } from './headContentUtils';
38
39
  export { Scripts } from './Scripts';
39
40
  export { Body } from './Body';
40
41
  export { Html } from './Html';
@@ -1 +1 @@
1
- {"version":3,"file":"index.jsx","sourceRoot":"","sources":["../../src/index.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.jsx","sourceRoot":"","sources":["../../src/index.tsx"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import * as Vue from 'vue';
2
2
  import { Asset } from '../Asset';
3
- import { useTags } from '../HeadContent';
3
+ import { useTags } from '../headContentUtils';
4
4
  import { RouterProvider } from '../RouterProvider';
5
5
  import { Scripts } from '../Scripts';
6
6
  const ServerHeadContent = Vue.defineComponent({
@@ -1 +1 @@
1
- {"version":3,"file":"RouterServer.jsx","sourceRoot":"","sources":["../../../src/ssr/RouterServer.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,MAAM,KAAK,CAAA;AAC1B,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAA;AAChC,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAA;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAClD,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AAGpC,MAAM,iBAAiB,GAAG,GAAG,CAAC,eAAe,CAAC;IAC5C,IAAI,EAAE,mBAAmB;IACzB,KAAK;QACH,MAAM,OAAO,GAAG,OAAO,EAAE,CAAA;QAEzB,OAAO,GAAG,EAAE,CACV,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC,GAAqB,EAAE,EAAE,CACtC,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,GAAI,GAAW,CAAC,EAAE,EAAE,GAAG,GAAG,EAAE,CAAC,CACzD,CAAA;IACL,CAAC;CACF,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,YAAY,GAAG,GAAG,CAAC,eAAe,CAAC;IAC9C,IAAI,EAAE,cAAc;IACpB,KAAK,EAAE;QACL,MAAM,EAAE;YACN,IAAI,EAAE,MAAyB;YAC/B,QAAQ,EAAE,IAAI;SACf;KACF;IACD,KAAK,CAAC,KAAK;QACT,OAAO,GAAG,EAAE,CACV,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE;YAClB,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC;YAC/C,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE;gBAClB,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE;oBAC5B,GAAG,CAAC,CAAC,CACH,cAAc,EACd;wBACE,MAAM,EAAE,KAAK,CAAC,MAAM;qBACrB,EACD;wBACE,SAAS,EAAE,CAAC,UAA6B,EAAE,EAAE,CAAC;4BAC5C,GAAG,CAAC,CAAC,CAAC,iBAAiB,CAAC;4BACxB,UAAU,CAAC,QAAQ;4BACnB,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC;yBACf;qBACF,CACF;iBACF,CAAC;aACH,CAAC;SACH,CAAC,CAAA;IACN,CAAC;CACF,CAAC,CAAA"}
1
+ {"version":3,"file":"RouterServer.jsx","sourceRoot":"","sources":["../../../src/ssr/RouterServer.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,MAAM,KAAK,CAAA;AAC1B,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAA;AAChC,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAClD,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AAGpC,MAAM,iBAAiB,GAAG,GAAG,CAAC,eAAe,CAAC;IAC5C,IAAI,EAAE,mBAAmB;IACzB,KAAK;QACH,MAAM,OAAO,GAAG,OAAO,EAAE,CAAA;QAEzB,OAAO,GAAG,EAAE,CACV,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC,GAAqB,EAAE,EAAE,CACtC,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,GAAI,GAAW,CAAC,EAAE,EAAE,GAAG,GAAG,EAAE,CAAC,CACzD,CAAA;IACL,CAAC;CACF,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,YAAY,GAAG,GAAG,CAAC,eAAe,CAAC;IAC9C,IAAI,EAAE,cAAc;IACpB,KAAK,EAAE;QACL,MAAM,EAAE;YACN,IAAI,EAAE,MAAyB;YAC/B,QAAQ,EAAE,IAAI;SACf;KACF;IACD,KAAK,CAAC,KAAK;QACT,OAAO,GAAG,EAAE,CACV,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE;YAClB,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC;YAC/C,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE;gBAClB,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE;oBAC5B,GAAG,CAAC,CAAC,CACH,cAAc,EACd;wBACE,MAAM,EAAE,KAAK,CAAC,MAAM;qBACrB,EACD;wBACE,SAAS,EAAE,CAAC,UAA6B,EAAE,EAAE,CAAC;4BAC5C,GAAG,CAAC,CAAC,CAAC,iBAAiB,CAAC;4BACxB,UAAU,CAAC,QAAQ;4BACnB,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC;yBACf;qBACF,CACF;iBACF,CAAC;aACH,CAAC;SACH,CAAC,CAAA;IACN,CAAC;CACF,CAAC,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tanstack/vue-router",
3
- "version": "1.147.1",
3
+ "version": "1.149.3",
4
4
  "description": "Modern and scalable routing for Vue applications",
5
5
  "author": "Tanner Linsley",
6
6
  "license": "MIT",
@@ -30,6 +30,7 @@
30
30
  ".": {
31
31
  "import": {
32
32
  "types": "./dist/esm/index.d.ts",
33
+ "development": "./dist/esm/index.dev.js",
33
34
  "default": "./dist/esm/index.js"
34
35
  }
35
36
  },
@@ -63,7 +64,7 @@
63
64
  "tiny-invariant": "^1.3.3",
64
65
  "tiny-warning": "^1.0.3",
65
66
  "@tanstack/history": "1.145.7",
66
- "@tanstack/router-core": "1.147.1"
67
+ "@tanstack/router-core": "1.149.3"
67
68
  },
68
69
  "devDependencies": {
69
70
  "@testing-library/jest-dom": "^6.6.3",
@@ -0,0 +1,42 @@
1
+ import * as Vue from 'vue'
2
+
3
+ import { Asset } from './Asset'
4
+ import { useHydrated } from './ClientOnly'
5
+ import { useTags } from './headContentUtils'
6
+
7
+ const DEV_STYLES_ATTR = 'data-tanstack-router-dev-styles'
8
+
9
+ /**
10
+ * @description The `HeadContent` component is used to render meta tags, links, and scripts for the current route.
11
+ * It should be rendered in the `<head>` of your document.
12
+ *
13
+ * This is the development version that filters out dev styles after hydration.
14
+ */
15
+ export const HeadContent = Vue.defineComponent({
16
+ name: 'HeadContent',
17
+ setup() {
18
+ const tags = useTags()
19
+ const hydrated = useHydrated()
20
+
21
+ // Fallback cleanup for hydration mismatch cases
22
+ Vue.onMounted(() => {
23
+ document
24
+ .querySelectorAll(`link[${DEV_STYLES_ATTR}]`)
25
+ .forEach((el) => el.remove())
26
+ })
27
+
28
+ return () => {
29
+ // Filter out dev styles after hydration
30
+ const filteredTags = hydrated.value
31
+ ? tags().filter((tag) => !tag.attrs?.[DEV_STYLES_ATTR])
32
+ : tags()
33
+
34
+ return filteredTags.map((tag) =>
35
+ Vue.h(Asset, {
36
+ ...tag,
37
+ key: `tsr-meta-${JSON.stringify(tag)}`,
38
+ }),
39
+ )
40
+ }
41
+ },
42
+ })