@tanstack/vue-router 1.168.1 → 1.168.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 (57) hide show
  1. package/dist/esm/HeadContent.d.ts +18 -2
  2. package/dist/esm/HeadContent.dev.d.ts +15 -2
  3. package/dist/esm/HeadContent.dev.js +6 -2
  4. package/dist/esm/HeadContent.dev.js.map +1 -1
  5. package/dist/esm/HeadContent.js +6 -2
  6. package/dist/esm/HeadContent.js.map +1 -1
  7. package/dist/esm/Match.js +14 -7
  8. package/dist/esm/Match.js.map +1 -1
  9. package/dist/esm/Matches.js +2 -3
  10. package/dist/esm/Matches.js.map +1 -1
  11. package/dist/esm/fileRoute.js +4 -3
  12. package/dist/esm/fileRoute.js.map +1 -1
  13. package/dist/esm/headContentUtils.d.ts +2 -2
  14. package/dist/esm/headContentUtils.js +9 -4
  15. package/dist/esm/headContentUtils.js.map +1 -1
  16. package/dist/esm/renderRouteNotFound.js +3 -2
  17. package/dist/esm/renderRouteNotFound.js.map +1 -1
  18. package/dist/esm/useLoaderDeps.d.ts +3 -2
  19. package/dist/esm/useLoaderDeps.js.map +1 -1
  20. package/dist/esm/useMatch.js +9 -3
  21. package/dist/esm/useMatch.js.map +1 -1
  22. package/dist/esm/useRouter.js +3 -2
  23. package/dist/esm/useRouter.js.map +1 -1
  24. package/dist/source/HeadContent.d.ts +18 -2
  25. package/dist/source/HeadContent.dev.d.ts +15 -2
  26. package/dist/source/HeadContent.dev.jsx +8 -2
  27. package/dist/source/HeadContent.dev.jsx.map +1 -1
  28. package/dist/source/HeadContent.jsx +8 -2
  29. package/dist/source/HeadContent.jsx.map +1 -1
  30. package/dist/source/Match.jsx +22 -7
  31. package/dist/source/Match.jsx.map +1 -1
  32. package/dist/source/Matches.jsx +2 -3
  33. package/dist/source/Matches.jsx.map +1 -1
  34. package/dist/source/fileRoute.js +4 -3
  35. package/dist/source/fileRoute.js.map +1 -1
  36. package/dist/source/headContentUtils.d.ts +2 -2
  37. package/dist/source/headContentUtils.jsx +11 -4
  38. package/dist/source/headContentUtils.jsx.map +1 -1
  39. package/dist/source/renderRouteNotFound.jsx +4 -3
  40. package/dist/source/renderRouteNotFound.jsx.map +1 -1
  41. package/dist/source/useLoaderDeps.d.ts +3 -2
  42. package/dist/source/useLoaderDeps.jsx.map +1 -1
  43. package/dist/source/useMatch.jsx +14 -4
  44. package/dist/source/useMatch.jsx.map +1 -1
  45. package/dist/source/useRouter.jsx +5 -2
  46. package/dist/source/useRouter.jsx.map +1 -1
  47. package/package.json +3 -5
  48. package/src/HeadContent.dev.tsx +9 -2
  49. package/src/HeadContent.tsx +13 -2
  50. package/src/Match.tsx +27 -9
  51. package/src/Matches.tsx +3 -5
  52. package/src/fileRoute.ts +7 -8
  53. package/src/headContentUtils.tsx +21 -5
  54. package/src/renderRouteNotFound.tsx +6 -6
  55. package/src/useLoaderDeps.tsx +4 -3
  56. package/src/useMatch.tsx +23 -13
  57. package/src/useRouter.tsx +7 -5
@@ -1,7 +1,8 @@
1
+ import type * as Vue from 'vue';
1
2
  import type { AnyRouter, RegisteredRouter, ResolveUseLoaderDeps, StrictOrFrom, UseLoaderDepsResult } from '@tanstack/router-core';
2
3
  export interface UseLoaderDepsBaseOptions<TRouter extends AnyRouter, TFrom, TSelected> {
3
4
  select?: (deps: ResolveUseLoaderDeps<TRouter, TFrom>) => TSelected;
4
5
  }
5
6
  export type UseLoaderDepsOptions<TRouter extends AnyRouter, TFrom extends string | undefined, TSelected> = StrictOrFrom<TRouter, TFrom> & UseLoaderDepsBaseOptions<TRouter, TFrom, TSelected>;
6
- export type UseLoaderDepsRoute<out TId> = <TRouter extends AnyRouter = RegisteredRouter, TSelected = unknown>(opts?: UseLoaderDepsBaseOptions<TRouter, TId, TSelected>) => UseLoaderDepsResult<TRouter, TId, TSelected>;
7
- export declare function useLoaderDeps<TRouter extends AnyRouter = RegisteredRouter, const TFrom extends string | undefined = undefined, TSelected = unknown>(opts: UseLoaderDepsOptions<TRouter, TFrom, TSelected>): UseLoaderDepsResult<TRouter, TFrom, TSelected>;
7
+ export type UseLoaderDepsRoute<out TId> = <TRouter extends AnyRouter = RegisteredRouter, TSelected = unknown>(opts?: UseLoaderDepsBaseOptions<TRouter, TId, TSelected>) => Vue.Ref<UseLoaderDepsResult<TRouter, TId, TSelected>>;
8
+ export declare function useLoaderDeps<TRouter extends AnyRouter = RegisteredRouter, const TFrom extends string | undefined = undefined, TSelected = unknown>(opts: UseLoaderDepsOptions<TRouter, TFrom, TSelected>): Vue.Ref<UseLoaderDepsResult<TRouter, TFrom, TSelected>>;
@@ -1 +1 @@
1
- {"version":3,"file":"useLoaderDeps.jsx","sourceRoot":"","sources":["../../src/useLoaderDeps.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AA+BrC,MAAM,UAAU,aAAa,CAK3B,IAAqD;IAErD,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,IAAI,CAAA;IAChC,OAAO,QAAQ,CAAC;QACd,GAAG,IAAI;QACP,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE;YACZ,OAAO,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAA;QACrD,CAAC;KACF,CAAmD,CAAA;AACtD,CAAC"}
1
+ {"version":3,"file":"useLoaderDeps.jsx","sourceRoot":"","sources":["../../src/useLoaderDeps.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAgCrC,MAAM,UAAU,aAAa,CAK3B,IAAqD;IAErD,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,IAAI,CAAA;IAChC,OAAO,QAAQ,CAAC;QACd,GAAG,IAAI;QACP,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE;YACZ,OAAO,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAA;QACrD,CAAC;KACF,CAA4D,CAAA;AAC/D,CAAC"}
@@ -1,7 +1,7 @@
1
1
  import * as Vue from 'vue';
2
+ import { invariant } from '@tanstack/router-core';
2
3
  import { useStore } from '@tanstack/vue-store';
3
4
  import { isServer } from '@tanstack/router-core/isServer';
4
- import invariant from 'tiny-invariant';
5
5
  import { injectDummyPendingMatch, injectPendingMatch, routeIdContext, } from './matchContext';
6
6
  import { useRouter } from './useRouter';
7
7
  export function useMatch(opts) {
@@ -14,7 +14,12 @@ export function useMatch(opts) {
14
14
  ? router.stores.getMatchStoreByRouteId(opts.from ?? nearestRouteId)
15
15
  : undefined;
16
16
  const match = matchStore?.state;
17
- invariant(!((opts.shouldThrow ?? true) && !match), `Could not find ${opts.from ? `an active match from "${opts.from}"` : 'a nearest match!'}`);
17
+ if ((opts.shouldThrow ?? true) && !match) {
18
+ if (process.env.NODE_ENV !== 'production') {
19
+ throw new Error(`Invariant failed: Could not find ${opts.from ? `an active match from "${opts.from}"` : 'a nearest match!'}`);
20
+ }
21
+ invariant();
22
+ }
18
23
  if (match === undefined) {
19
24
  return Vue.ref(undefined);
20
25
  }
@@ -54,9 +59,14 @@ export function useMatch(opts) {
54
59
  const hasPendingMatch = opts.from
55
60
  ? Boolean(hasPendingRouteMatch?.value[opts.from])
56
61
  : hasPendingNearestMatch.value;
57
- invariant(!(!hasPendingMatch &&
62
+ if (!hasPendingMatch &&
58
63
  !isTransitioning.value &&
59
- (opts.shouldThrow ?? true)), `Could not find ${opts.from ? `an active match from "${opts.from}"` : 'a nearest match!'}`);
64
+ (opts.shouldThrow ?? true)) {
65
+ if (process.env.NODE_ENV !== 'production') {
66
+ throw new Error(`Invariant failed: Could not find ${opts.from ? `an active match from "${opts.from}"` : 'a nearest match!'}`);
67
+ }
68
+ invariant();
69
+ }
60
70
  return undefined;
61
71
  }
62
72
  return opts.select ? opts.select(selectedMatch) : selectedMatch;
@@ -1 +1 @@
1
- {"version":3,"file":"useMatch.jsx","sourceRoot":"","sources":["../../src/useMatch.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"useMatch.jsx","sourceRoot":"","sources":["../../src/useMatch.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,MAAM,KAAK,CAAA;AAC1B,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAA;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAA;AACzD,OAAO,EACL,uBAAuB,EACvB,kBAAkB,EAClB,cAAc,GACf,MAAM,gBAAgB,CAAA;AACvB,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAmDvC,MAAM,UAAU,QAAQ,CAOtB,IAMC;IAID,MAAM,MAAM,GAAG,SAAS,EAAW,CAAA;IAEnC,gEAAgE;IAChE,8EAA8E;IAC9E,IAAI,QAAQ,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;QAChC,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,cAAc,CAAC,CAAA;QACzE,MAAM,UAAU,GACd,CAAC,IAAI,CAAC,IAAI,IAAI,cAAc,CAAC;YAC3B,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,sBAAsB,CAAC,IAAI,CAAC,IAAI,IAAI,cAAe,CAAC;YACpE,CAAC,CAAC,SAAS,CAAA;QACf,MAAM,KAAK,GAAG,UAAU,EAAE,KAAK,CAAA;QAE/B,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YACzC,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,EAAE,CAAC;gBAC1C,MAAM,IAAI,KAAK,CACb,oCAAoC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,yBAAyB,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,kBAAkB,EAAE,CAC7G,CAAA;YACH,CAAC;YAED,SAAS,EAAE,CAAA;QACb,CAAC;QAED,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,OAAO,GAAG,CAAC,GAAG,CAAC,SAAS,CAKvB,CAAA;QACH,CAAC;QAED,OAAO,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAKtD,CAAA;IACH,CAAC;IAED,MAAM,sBAAsB,GAAG,IAAI,CAAC,IAAI;QACtC,CAAC,CAAC,uBAAuB,EAAE;QAC3B,CAAC,CAAC,kBAAkB,EAAE,CAAA;IACxB,wDAAwD;IACxD,IAAI,KAA6B,CAAA;IAEjC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QACd,oEAAoE;QACpE,qDAAqD;QACrD,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAClE,KAAK,GAAG,QAAQ,CAAC,UAAU,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,CAAA;IAChD,CAAC;SAAM,CAAC;QACN,kEAAkE;QAClE,qEAAqE;QACrE,+DAA+D;QAC/D,MAAM,cAAc,GAAG,GAAG,CAAC,MAAM,CAAC,cAAc,CAAC,CAAA;QACjD,IAAI,cAAc,EAAE,CAAC;YACnB,KAAK,GAAG,QAAQ,CACd,MAAM,CAAC,MAAM,CAAC,sBAAsB,CAAC,cAAc,CAAC,EACpD,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CACjB,CAAA;QACH,CAAC;aAAM,CAAC;YACN,+DAA+D;YAC/D,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,SAAS,CAAiC,CAAA;QAC5D,CAAC;IACH,CAAC;IAED,MAAM,oBAAoB,GAAG,IAAI,CAAC,IAAI;QACpC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC;QACvD,CAAC,CAAC,SAAS,CAAA;IACb,MAAM,eAAe,GAAG,QAAQ,CAC9B,MAAM,CAAC,MAAM,CAAC,eAAe,EAC7B,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,EAChB,EAAE,KAAK,EAAE,MAAM,CAAC,EAAE,EAAE,CACrB,CAAA;IAED,MAAM,MAAM,GAAG,GAAG,CAAC,QAAQ,CAAC,GAAG,EAAE;QAC/B,MAAM,aAAa,GAAG,KAAK,CAAC,KAAK,CAAA;QACjC,IAAI,aAAa,KAAK,SAAS,EAAE,CAAC;YAChC,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI;gBAC/B,CAAC,CAAC,OAAO,CAAC,oBAAoB,EAAE,KAAK,CAAC,IAAI,CAAC,IAAK,CAAC,CAAC;gBAClD,CAAC,CAAC,sBAAsB,CAAC,KAAK,CAAA;YAChC,IACE,CAAC,eAAe;gBAChB,CAAC,eAAe,CAAC,KAAK;gBACtB,CAAC,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,EAC1B,CAAC;gBACD,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,EAAE,CAAC;oBAC1C,MAAM,IAAI,KAAK,CACb,oCAAoC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,yBAAyB,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,kBAAkB,EAAE,CAC7G,CAAA;gBACH,CAAC;gBAED,SAAS,EAAE,CAAA;YACb,CAAC;YAED,OAAO,SAAS,CAAA;QAClB,CAAC;QAED,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,aAAa,CAAA;IACjE,CAAC,CAAC,CAAA;IAEF,iFAAiF;IACjF,MAAM,CAAC,KAAK,CAAA;IAEZ,OAAO,MAAM,CAAA;AACf,CAAC"}
@@ -1,9 +1,12 @@
1
1
  import * as Vue from 'vue';
2
- import warning from 'tiny-warning';
3
2
  import { routerContext } from './routerContext';
4
3
  export function useRouter(opts) {
5
4
  const value = Vue.inject(routerContext, null);
6
- warning(!((opts?.warn ?? true) && !value), 'useRouter must be used inside a <RouterProvider> component!');
5
+ if (process.env.NODE_ENV !== 'production') {
6
+ if ((opts?.warn ?? true) && !value) {
7
+ console.warn('Warning: useRouter must be used inside a <RouterProvider> component!');
8
+ }
9
+ }
7
10
  return value;
8
11
  }
9
12
  //# sourceMappingURL=useRouter.jsx.map
@@ -1 +1 @@
1
- {"version":3,"file":"useRouter.jsx","sourceRoot":"","sources":["../../src/useRouter.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,MAAM,KAAK,CAAA;AAC1B,OAAO,OAAO,MAAM,cAAc,CAAA;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAG/C,MAAM,UAAU,SAAS,CAA+C,IAEvE;IACC,MAAM,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC,aAAoB,EAAE,IAAI,CAAC,CAAA;IACpD,OAAO,CACL,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EACjC,6DAA6D,CAC9D,CAAA;IACD,OAAO,KAAY,CAAA;AACrB,CAAC"}
1
+ {"version":3,"file":"useRouter.jsx","sourceRoot":"","sources":["../../src/useRouter.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,MAAM,KAAK,CAAA;AAC1B,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAG/C,MAAM,UAAU,SAAS,CAA+C,IAEvE;IACC,MAAM,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC,aAAoB,EAAE,IAAI,CAAC,CAAA;IACpD,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,EAAE,CAAC;QAC1C,IAAI,CAAC,IAAI,EAAE,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YACnC,OAAO,CAAC,IAAI,CACV,sEAAsE,CACvE,CAAA;QACH,CAAC;IACH,CAAC;IACD,OAAO,KAAY,CAAA;AACrB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tanstack/vue-router",
3
- "version": "1.168.1",
3
+ "version": "1.168.3",
4
4
  "description": "Modern and scalable routing for Vue applications",
5
5
  "author": "Tanner Linsley",
6
6
  "license": "MIT",
@@ -64,10 +64,8 @@
64
64
  "@vue/runtime-dom": "^3.5.25",
65
65
  "isbot": "^5.1.22",
66
66
  "jsesc": "^3.0.2",
67
- "tiny-invariant": "^1.3.3",
68
- "tiny-warning": "^1.0.3",
69
- "@tanstack/router-core": "1.168.1",
70
- "@tanstack/history": "1.161.6"
67
+ "@tanstack/history": "1.161.6",
68
+ "@tanstack/router-core": "1.168.3"
71
69
  },
72
70
  "devDependencies": {
73
71
  "@tanstack/intent": "^0.0.14",
@@ -3,6 +3,7 @@ import * as Vue from 'vue'
3
3
  import { Asset } from './Asset'
4
4
  import { useHydrated } from './ClientOnly'
5
5
  import { useTags } from './headContentUtils'
6
+ import type { AssetCrossOriginConfig } from '@tanstack/router-core'
6
7
 
7
8
  const DEV_STYLES_ATTR = 'data-tanstack-router-dev-styles'
8
9
 
@@ -14,8 +15,14 @@ const DEV_STYLES_ATTR = 'data-tanstack-router-dev-styles'
14
15
  */
15
16
  export const HeadContent = Vue.defineComponent({
16
17
  name: 'HeadContent',
17
- setup() {
18
- const tags = useTags()
18
+ props: {
19
+ assetCrossOrigin: {
20
+ type: [String, Object] as Vue.PropType<AssetCrossOriginConfig>,
21
+ default: undefined,
22
+ },
23
+ },
24
+ setup(props) {
25
+ const tags = useTags(props.assetCrossOrigin)
19
26
  const hydrated = useHydrated()
20
27
 
21
28
  // Fallback cleanup for hydration mismatch cases
@@ -2,6 +2,11 @@ import * as Vue from 'vue'
2
2
 
3
3
  import { Asset } from './Asset'
4
4
  import { useTags } from './headContentUtils'
5
+ import type { AssetCrossOriginConfig } from '@tanstack/router-core'
6
+
7
+ export interface HeadContentProps {
8
+ assetCrossOrigin?: AssetCrossOriginConfig
9
+ }
5
10
 
6
11
  /**
7
12
  * @description The `HeadContent` component is used to render meta tags, links, and scripts for the current route.
@@ -9,8 +14,14 @@ import { useTags } from './headContentUtils'
9
14
  */
10
15
  export const HeadContent = Vue.defineComponent({
11
16
  name: 'HeadContent',
12
- setup() {
13
- const tags = useTags()
17
+ props: {
18
+ assetCrossOrigin: {
19
+ type: [String, Object] as Vue.PropType<AssetCrossOriginConfig>,
20
+ default: undefined,
21
+ },
22
+ },
23
+ setup(props) {
24
+ const tags = useTags(props.assetCrossOrigin)
14
25
 
15
26
  return () => {
16
27
  return tags().map((tag) =>
package/src/Match.tsx CHANGED
@@ -1,9 +1,8 @@
1
1
  import * as Vue from 'vue'
2
- import invariant from 'tiny-invariant'
3
- import warning from 'tiny-warning'
4
2
  import {
5
3
  createControlledPromise,
6
4
  getLocationChangeInfo,
5
+ invariant,
7
6
  isNotFound,
8
7
  isRedirect,
9
8
  rootRouteId,
@@ -42,10 +41,15 @@ export const Match = Vue.defineComponent({
42
41
  props.matchId,
43
42
  )?.routeId
44
43
 
45
- invariant(
46
- routeId,
47
- `Could not find routeId for matchId "${props.matchId}". Please file an issue!`,
48
- )
44
+ if (!routeId) {
45
+ if (process.env.NODE_ENV !== 'production') {
46
+ throw new Error(
47
+ `Invariant failed: Could not find routeId for matchId "${props.matchId}". Please file an issue!`,
48
+ )
49
+ }
50
+
51
+ invariant()
52
+ }
49
53
 
50
54
  // Static route-tree check: is this route a direct child of the root?
51
55
  // parentRoute is set at build time, so no reactive tracking needed.
@@ -187,7 +191,9 @@ export const Match = Vue.defineComponent({
187
191
  onCatch: (error: Error) => {
188
192
  // Forward not found errors (we don't want to show the error component for these)
189
193
  if (isNotFound(error)) throw error
190
- warning(false, `Error in route match: ${actualMatchId}`)
194
+ if (process.env.NODE_ENV !== 'production') {
195
+ console.warn(`Warning: Error in route match: ${actualMatchId}`)
196
+ }
191
197
  routeOnCatch.value?.(error)
192
198
  },
193
199
  children: content,
@@ -358,12 +364,24 @@ export const MatchInner = Vue.defineComponent({
358
364
  }
359
365
 
360
366
  if (match.value.status === 'notFound') {
361
- invariant(isNotFound(match.value.error), 'Expected a notFound error')
367
+ if (!isNotFound(match.value.error)) {
368
+ if (process.env.NODE_ENV !== 'production') {
369
+ throw new Error('Invariant failed: Expected a notFound error')
370
+ }
371
+
372
+ invariant()
373
+ }
362
374
  return renderRouteNotFound(router, route.value, match.value.error)
363
375
  }
364
376
 
365
377
  if (match.value.status === 'redirected') {
366
- invariant(isRedirect(match.value.error), 'Expected a redirect error')
378
+ if (!isRedirect(match.value.error)) {
379
+ if (process.env.NODE_ENV !== 'production') {
380
+ throw new Error('Invariant failed: Expected a redirect error')
381
+ }
382
+
383
+ invariant()
384
+ }
367
385
  throw router.getMatch(match.value.id)?._nonReactive.loadPromise
368
386
  }
369
387
 
package/src/Matches.tsx CHANGED
@@ -1,5 +1,4 @@
1
1
  import * as Vue from 'vue'
2
- import warning from 'tiny-warning'
3
2
  import { isServer } from '@tanstack/router-core/isServer'
4
3
  import { useStore } from '@tanstack/vue-store'
5
4
  import { CatchBoundary } from './CatchBoundary'
@@ -129,11 +128,10 @@ const MatchesInner = Vue.defineComponent({
129
128
  onCatch:
130
129
  process.env.NODE_ENV !== 'production'
131
130
  ? (error: Error) => {
132
- warning(
133
- false,
134
- `The following error wasn't caught by any route! At the very least, consider setting an 'errorComponent' in your RootRoute!`,
131
+ console.warn(
132
+ `Warning: The following error wasn't caught by any route! At the very least, consider setting an 'errorComponent' in your RootRoute!`,
135
133
  )
136
- warning(false, error.message || error.toString())
134
+ console.warn(`Warning: ${error.message || error.toString()}`)
137
135
  }
138
136
  : undefined,
139
137
  children: childElement,
package/src/fileRoute.ts CHANGED
@@ -1,4 +1,3 @@
1
- import warning from 'tiny-warning'
2
1
  import { createRoute } from './route'
3
2
 
4
3
  import { useMatch } from './useMatch'
@@ -140,10 +139,11 @@ export class FileRoute<
140
139
  THandlers
141
140
  > => {
142
141
  if (process.env.NODE_ENV !== 'production') {
143
- warning(
144
- this.silent,
145
- 'FileRoute is deprecated and will be removed in the next major version. Use the createFileRoute(path)(options) function instead.',
146
- )
142
+ if (!this.silent) {
143
+ console.warn(
144
+ 'Warning: FileRoute is deprecated and will be removed in the next major version. Use the createFileRoute(path)(options) function instead.',
145
+ )
146
+ }
147
147
  }
148
148
  const route = createRoute(options as any)
149
149
  ;(route as any).isRoot = false
@@ -177,9 +177,8 @@ export function FileRouteLoader<
177
177
  >,
178
178
  ) => TLoaderFn {
179
179
  if (process.env.NODE_ENV !== 'production') {
180
- warning(
181
- false,
182
- `FileRouteLoader is deprecated and will be removed in the next major version. Please place the loader function in the the main route file, inside the \`createFileRoute('/path/to/file')(options)\` options`,
180
+ console.warn(
181
+ `Warning: FileRouteLoader is deprecated and will be removed in the next major version. Please place the loader function in the the main route file, inside the \`createFileRoute('/path/to/file')(options)\` options`,
183
182
  )
184
183
  }
185
184
  return (loaderFn) => loaderFn as any
@@ -1,10 +1,17 @@
1
1
  import * as Vue from 'vue'
2
- import { escapeHtml } from '@tanstack/router-core'
2
+ import {
3
+ escapeHtml,
4
+ getAssetCrossOrigin,
5
+ resolveManifestAssetLink,
6
+ } from '@tanstack/router-core'
3
7
  import { useStore } from '@tanstack/vue-store'
4
8
  import { useRouter } from './useRouter'
5
- import type { RouterManagedTag } from '@tanstack/router-core'
9
+ import type {
10
+ AssetCrossOriginConfig,
11
+ RouterManagedTag,
12
+ } from '@tanstack/router-core'
6
13
 
7
- export const useTags = () => {
14
+ export const useTags = (assetCrossOrigin?: AssetCrossOriginConfig) => {
8
15
  const router = useRouter()
9
16
  const matches = useStore(
10
17
  router.stores.activeMatchesSnapshot,
@@ -95,11 +102,15 @@ export const useTags = () => {
95
102
  router.ssr?.manifest?.routes[route.id]?.preloads
96
103
  ?.filter(Boolean)
97
104
  .forEach((preload) => {
105
+ const preloadLink = resolveManifestAssetLink(preload)
98
106
  preloadMeta.push({
99
107
  tag: 'link',
100
108
  attrs: {
101
109
  rel: 'modulepreload',
102
- href: preload,
110
+ href: preloadLink.href,
111
+ crossOrigin:
112
+ getAssetCrossOrigin(assetCrossOrigin, 'modulepreload') ??
113
+ preloadLink.crossOrigin,
103
114
  },
104
115
  })
105
116
  }),
@@ -135,7 +146,12 @@ export const useTags = () => {
135
146
  (asset) =>
136
147
  ({
137
148
  tag: 'link',
138
- attrs: { ...asset.attrs },
149
+ attrs: {
150
+ ...asset.attrs,
151
+ crossOrigin:
152
+ getAssetCrossOrigin(assetCrossOrigin, 'stylesheet') ??
153
+ asset.attrs?.crossOrigin,
154
+ },
139
155
  }) satisfies RouterManagedTag,
140
156
  )
141
157
 
@@ -1,5 +1,4 @@
1
1
  import * as Vue from 'vue'
2
- import warning from 'tiny-warning'
3
2
  import { DefaultGlobalNotFound } from './not-found'
4
3
  import type { AnyRoute, AnyRouter } from '@tanstack/router-core'
5
4
 
@@ -21,11 +20,12 @@ export function renderRouteNotFound(
21
20
  return Vue.h(router.options.defaultNotFoundComponent as any, data)
22
21
  }
23
22
 
24
- if (process.env.NODE_ENV === 'development') {
25
- warning(
26
- route.options.notFoundComponent,
27
- `A notFoundError was encountered on the route with ID "${route.id}", but a notFoundComponent option was not configured, nor was a router level defaultNotFoundComponent configured. Consider configuring at least one of these to avoid TanStack Router's overly generic defaultNotFoundComponent (<p>Not Found</p>)`,
28
- )
23
+ if (process.env.NODE_ENV !== 'production') {
24
+ if (!route.options.notFoundComponent) {
25
+ console.warn(
26
+ `Warning: A notFoundError was encountered on the route with ID "${route.id}", but a notFoundComponent option was not configured, nor was a router level defaultNotFoundComponent configured. Consider configuring at least one of these to avoid TanStack Router's overly generic defaultNotFoundComponent (<p>Not Found</p>)`,
27
+ )
28
+ }
29
29
  }
30
30
 
31
31
  return Vue.h(DefaultGlobalNotFound)
@@ -1,4 +1,5 @@
1
1
  import { useMatch } from './useMatch'
2
+ import type * as Vue from 'vue'
2
3
  import type {
3
4
  AnyRouter,
4
5
  RegisteredRouter,
@@ -27,7 +28,7 @@ export type UseLoaderDepsRoute<out TId> = <
27
28
  TSelected = unknown,
28
29
  >(
29
30
  opts?: UseLoaderDepsBaseOptions<TRouter, TId, TSelected>,
30
- ) => UseLoaderDepsResult<TRouter, TId, TSelected>
31
+ ) => Vue.Ref<UseLoaderDepsResult<TRouter, TId, TSelected>>
31
32
 
32
33
  export function useLoaderDeps<
33
34
  TRouter extends AnyRouter = RegisteredRouter,
@@ -35,12 +36,12 @@ export function useLoaderDeps<
35
36
  TSelected = unknown,
36
37
  >(
37
38
  opts: UseLoaderDepsOptions<TRouter, TFrom, TSelected>,
38
- ): UseLoaderDepsResult<TRouter, TFrom, TSelected> {
39
+ ): Vue.Ref<UseLoaderDepsResult<TRouter, TFrom, TSelected>> {
39
40
  const { select, ...rest } = opts
40
41
  return useMatch({
41
42
  ...rest,
42
43
  select: (s) => {
43
44
  return select ? select(s.loaderDeps) : s.loaderDeps
44
45
  },
45
- }) as UseLoaderDepsResult<TRouter, TFrom, TSelected>
46
+ }) as Vue.Ref<UseLoaderDepsResult<TRouter, TFrom, TSelected>>
46
47
  }
package/src/useMatch.tsx CHANGED
@@ -1,7 +1,7 @@
1
1
  import * as Vue from 'vue'
2
+ import { invariant } from '@tanstack/router-core'
2
3
  import { useStore } from '@tanstack/vue-store'
3
4
  import { isServer } from '@tanstack/router-core/isServer'
4
- import invariant from 'tiny-invariant'
5
5
  import {
6
6
  injectDummyPendingMatch,
7
7
  injectPendingMatch,
@@ -87,10 +87,15 @@ export function useMatch<
87
87
  : undefined
88
88
  const match = matchStore?.state
89
89
 
90
- invariant(
91
- !((opts.shouldThrow ?? true) && !match),
92
- `Could not find ${opts.from ? `an active match from "${opts.from}"` : 'a nearest match!'}`,
93
- )
90
+ if ((opts.shouldThrow ?? true) && !match) {
91
+ if (process.env.NODE_ENV !== 'production') {
92
+ throw new Error(
93
+ `Invariant failed: Could not find ${opts.from ? `an active match from "${opts.from}"` : 'a nearest match!'}`,
94
+ )
95
+ }
96
+
97
+ invariant()
98
+ }
94
99
 
95
100
  if (match === undefined) {
96
101
  return Vue.ref(undefined) as Vue.Ref<
@@ -151,14 +156,19 @@ export function useMatch<
151
156
  const hasPendingMatch = opts.from
152
157
  ? Boolean(hasPendingRouteMatch?.value[opts.from!])
153
158
  : hasPendingNearestMatch.value
154
- invariant(
155
- !(
156
- !hasPendingMatch &&
157
- !isTransitioning.value &&
158
- (opts.shouldThrow ?? true)
159
- ),
160
- `Could not find ${opts.from ? `an active match from "${opts.from}"` : 'a nearest match!'}`,
161
- )
159
+ if (
160
+ !hasPendingMatch &&
161
+ !isTransitioning.value &&
162
+ (opts.shouldThrow ?? true)
163
+ ) {
164
+ if (process.env.NODE_ENV !== 'production') {
165
+ throw new Error(
166
+ `Invariant failed: Could not find ${opts.from ? `an active match from "${opts.from}"` : 'a nearest match!'}`,
167
+ )
168
+ }
169
+
170
+ invariant()
171
+ }
162
172
 
163
173
  return undefined
164
174
  }
package/src/useRouter.tsx CHANGED
@@ -1,5 +1,4 @@
1
1
  import * as Vue from 'vue'
2
- import warning from 'tiny-warning'
3
2
  import { routerContext } from './routerContext'
4
3
  import type { AnyRouter, RegisteredRouter } from '@tanstack/router-core'
5
4
 
@@ -7,9 +6,12 @@ export function useRouter<TRouter extends AnyRouter = RegisteredRouter>(opts?: {
7
6
  warn?: boolean
8
7
  }): TRouter {
9
8
  const value = Vue.inject(routerContext as any, null)
10
- warning(
11
- !((opts?.warn ?? true) && !value),
12
- 'useRouter must be used inside a <RouterProvider> component!',
13
- )
9
+ if (process.env.NODE_ENV !== 'production') {
10
+ if ((opts?.warn ?? true) && !value) {
11
+ console.warn(
12
+ 'Warning: useRouter must be used inside a <RouterProvider> component!',
13
+ )
14
+ }
15
+ }
14
16
  return value as any
15
17
  }