@tanstack/router-core 0.0.1-beta.26 → 0.0.1-beta.29

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 (48) hide show
  1. package/build/cjs/_virtual/_rollupPluginBabelHelpers.js +0 -2
  2. package/build/cjs/_virtual/_rollupPluginBabelHelpers.js.map +1 -1
  3. package/build/cjs/{packages/router-core/src/index.js → index.js} +22 -6
  4. package/build/cjs/{packages/router-core/src/index.js.map → index.js.map} +1 -1
  5. package/build/cjs/{packages/router-core/src/path.js → path.js} +4 -28
  6. package/build/cjs/path.js.map +1 -0
  7. package/build/cjs/{packages/router-core/src/qss.js → qss.js} +8 -13
  8. package/build/cjs/qss.js.map +1 -0
  9. package/build/cjs/{packages/router-core/src/route.js → route.js} +7 -16
  10. package/build/cjs/route.js.map +1 -0
  11. package/build/cjs/{packages/router-core/src/routeConfig.js → routeConfig.js} +10 -12
  12. package/build/cjs/routeConfig.js.map +1 -0
  13. package/build/cjs/{packages/router-core/src/routeMatch.js → routeMatch.js} +15 -35
  14. package/build/cjs/routeMatch.js.map +1 -0
  15. package/build/cjs/{packages/router-core/src/router.js → router.js} +103 -159
  16. package/build/cjs/router.js.map +1 -0
  17. package/build/cjs/{packages/router-core/src/searchParams.js → searchParams.js} +7 -10
  18. package/build/cjs/searchParams.js.map +1 -0
  19. package/build/cjs/{packages/router-core/src/utils.js → utils.js} +10 -24
  20. package/build/cjs/utils.js.map +1 -0
  21. package/build/esm/index.js +150 -1112
  22. package/build/esm/index.js.map +1 -1
  23. package/build/stats-html.html +59 -49
  24. package/build/stats-react.json +155 -155
  25. package/build/types/index.d.ts +34 -20
  26. package/build/umd/index.development.js +145 -290
  27. package/build/umd/index.development.js.map +1 -1
  28. package/build/umd/index.production.js +1 -1
  29. package/build/umd/index.production.js.map +1 -1
  30. package/package.json +2 -2
  31. package/src/route.ts +8 -5
  32. package/src/routeConfig.ts +6 -10
  33. package/src/routeMatch.ts +1 -1
  34. package/src/router.ts +114 -51
  35. package/build/cjs/node_modules/@babel/runtime/helpers/esm/extends.js +0 -33
  36. package/build/cjs/node_modules/@babel/runtime/helpers/esm/extends.js.map +0 -1
  37. package/build/cjs/node_modules/history/index.js +0 -815
  38. package/build/cjs/node_modules/history/index.js.map +0 -1
  39. package/build/cjs/node_modules/tiny-invariant/dist/esm/tiny-invariant.js +0 -30
  40. package/build/cjs/node_modules/tiny-invariant/dist/esm/tiny-invariant.js.map +0 -1
  41. package/build/cjs/packages/router-core/src/path.js.map +0 -1
  42. package/build/cjs/packages/router-core/src/qss.js.map +0 -1
  43. package/build/cjs/packages/router-core/src/route.js.map +0 -1
  44. package/build/cjs/packages/router-core/src/routeConfig.js.map +0 -1
  45. package/build/cjs/packages/router-core/src/routeMatch.js.map +0 -1
  46. package/build/cjs/packages/router-core/src/router.js.map +0 -1
  47. package/build/cjs/packages/router-core/src/searchParams.js.map +0 -1
  48. package/build/cjs/packages/router-core/src/utils.js.map +0 -1
@@ -12,7 +12,7 @@
12
12
 
13
13
  Object.defineProperty(exports, '__esModule', { value: true });
14
14
 
15
- var _rollupPluginBabelHelpers = require('../../../_virtual/_rollupPluginBabelHelpers.js');
15
+ var _rollupPluginBabelHelpers = require('./_virtual/_rollupPluginBabelHelpers.js');
16
16
  var utils = require('./utils.js');
17
17
 
18
18
  const componentTypes = ['component', 'errorComponent', 'pendingComponent'];
@@ -39,31 +39,26 @@ function createRouteMatch(router, route, opts) {
39
39
  resolve: () => {},
40
40
  notify: () => {
41
41
  routeMatch.__.resolve();
42
-
43
42
  routeMatch.router.notify();
44
43
  },
45
44
  validate: () => {
46
45
  var _routeMatch$parentMat, _routeMatch$parentMat2;
47
-
48
46
  // Validate the search params and stabilize them
49
47
  const parentSearch = (_routeMatch$parentMat = (_routeMatch$parentMat2 = routeMatch.parentMatch) == null ? void 0 : _routeMatch$parentMat2.search) != null ? _routeMatch$parentMat : router.location.search;
50
-
51
48
  try {
52
49
  var _validator;
53
-
54
50
  const prevSearch = routeMatch.routeSearch;
55
51
  const validator = typeof routeMatch.options.validateSearch === 'object' ? routeMatch.options.validateSearch.parse : routeMatch.options.validateSearch;
56
- let nextSearch = utils.replaceEqualDeep(prevSearch, (_validator = validator == null ? void 0 : validator(parentSearch)) != null ? _validator : {}); // Invalidate route matches when search param stability changes
52
+ let nextSearch = utils.replaceEqualDeep(prevSearch, (_validator = validator == null ? void 0 : validator(parentSearch)) != null ? _validator : {});
57
53
 
54
+ // Invalidate route matches when search param stability changes
58
55
  if (prevSearch !== nextSearch) {
59
56
  routeMatch.isInvalid = true;
60
57
  }
61
-
62
58
  routeMatch.routeSearch = nextSearch;
63
59
  routeMatch.search = utils.replaceEqualDeep(parentSearch, _rollupPluginBabelHelpers["extends"]({}, parentSearch, nextSearch));
64
60
  componentTypes.map(async type => {
65
61
  const component = routeMatch.options[type];
66
-
67
62
  if (typeof routeMatch.__[type] !== 'function') {
68
63
  routeMatch.__[type] = component;
69
64
  }
@@ -75,15 +70,14 @@ function createRouteMatch(router, route, opts) {
75
70
  });
76
71
  error.code = 'INVALID_SEARCH_PARAMS';
77
72
  routeMatch.status = 'error';
78
- routeMatch.error = error; // Do not proceed with loading the route
79
-
73
+ routeMatch.error = error;
74
+ // Do not proceed with loading the route
80
75
  return;
81
76
  }
82
77
  }
83
78
  },
84
79
  cancel: () => {
85
80
  var _routeMatch$__$abortC;
86
-
87
81
  (_routeMatch$__$abortC = routeMatch.__.abortController) == null ? void 0 : _routeMatch$__$abortC.abort();
88
82
  },
89
83
  invalidate: () => {
@@ -92,27 +86,26 @@ function createRouteMatch(router, route, opts) {
92
86
  hasLoaders: () => {
93
87
  return !!(route.options.loader || componentTypes.some(d => {
94
88
  var _route$options$d;
95
-
96
89
  return (_route$options$d = route.options[d]) == null ? void 0 : _route$options$d.preload;
97
90
  }));
98
91
  },
99
92
  load: async loaderOpts => {
100
93
  const now = Date.now();
101
- const minMaxAge = loaderOpts != null && loaderOpts.preload ? Math.max(loaderOpts == null ? void 0 : loaderOpts.maxAge, loaderOpts == null ? void 0 : loaderOpts.gcMaxAge) : 0; // If this is a preload, add it to the preload cache
94
+ const minMaxAge = loaderOpts != null && loaderOpts.preload ? Math.max(loaderOpts == null ? void 0 : loaderOpts.maxAge, loaderOpts == null ? void 0 : loaderOpts.gcMaxAge) : 0;
102
95
 
96
+ // If this is a preload, add it to the preload cache
103
97
  if (loaderOpts != null && loaderOpts.preload && minMaxAge > 0) {
104
98
  // If the match is currently active, don't preload it
105
99
  if (router.state.matches.find(d => d.matchId === routeMatch.matchId)) {
106
100
  return;
107
101
  }
108
-
109
102
  router.matchCache[routeMatch.matchId] = {
110
103
  gc: now + loaderOpts.gcMaxAge,
111
104
  match: routeMatch
112
105
  };
113
- } // If the match is invalid, errored or idle, trigger it to load
114
-
106
+ }
115
107
 
108
+ // If the match is invalid, errored or idle, trigger it to load
116
109
  if (routeMatch.status === 'success' && routeMatch.getIsInvalid() || routeMatch.status === 'error' || routeMatch.status === 'idle') {
117
110
  const maxAge = loaderOpts != null && loaderOpts.preload ? loaderOpts == null ? void 0 : loaderOpts.maxAge : undefined;
118
111
  await routeMatch.fetch({
@@ -123,53 +116,47 @@ function createRouteMatch(router, route, opts) {
123
116
  fetch: async opts => {
124
117
  const loadId = '' + Date.now() + Math.random();
125
118
  routeMatch.__.latestId = loadId;
126
-
127
119
  const checkLatest = async () => {
128
120
  if (loadId !== routeMatch.__.latestId) {
129
121
  // warning(true, 'Data loader is out of date!')
130
122
  return new Promise(() => {});
131
123
  }
132
- }; // If the match was in an error state, set it
124
+ };
125
+
126
+ // If the match was in an error state, set it
133
127
  // to a loading state again. Otherwise, keep it
134
128
  // as loading or resolved
135
-
136
-
137
129
  if (routeMatch.status === 'idle') {
138
130
  routeMatch.status = 'loading';
139
- } // We started loading the route, so it's no longer invalid
140
-
131
+ }
141
132
 
133
+ // We started loading the route, so it's no longer invalid
142
134
  routeMatch.isInvalid = false;
143
135
  routeMatch.__.loadPromise = new Promise(async resolve => {
144
136
  // We are now fetching, even if it's in the background of a
145
137
  // resolved state
146
138
  routeMatch.isFetching = true;
147
139
  routeMatch.__.resolve = resolve;
148
-
149
140
  routeMatch.__.componentsPromise = (async () => {
150
141
  // then run all component and data loaders in parallel
151
142
  // For each component type, potentially load it asynchronously
143
+
152
144
  await Promise.all(componentTypes.map(async type => {
153
145
  var _routeMatch$__$type;
154
-
155
146
  const component = routeMatch.options[type];
156
-
157
147
  if ((_routeMatch$__$type = routeMatch.__[type]) != null && _routeMatch$__$type.preload) {
158
148
  routeMatch.__[type] = await router.options.loadComponent(component);
159
149
  }
160
150
  }));
161
151
  })();
162
-
163
152
  routeMatch.__.dataPromise = Promise.resolve().then(async () => {
164
153
  try {
165
154
  var _ref, _ref2, _opts$maxAge;
166
-
167
155
  if (routeMatch.options.loader) {
168
156
  const data = await router.loadMatchData(routeMatch);
169
157
  await checkLatest();
170
158
  routeMatch.routeLoaderData = utils.replaceEqualDeep(routeMatch.routeLoaderData, data);
171
159
  }
172
-
173
160
  routeMatch.error = undefined;
174
161
  routeMatch.status = 'success';
175
162
  routeMatch.updatedAt = Date.now();
@@ -177,26 +164,21 @@ function createRouteMatch(router, route, opts) {
177
164
  return routeMatch.routeLoaderData;
178
165
  } catch (err) {
179
166
  await checkLatest();
180
-
181
167
  if (process.env.NODE_ENV !== 'production') {
182
168
  console.error(err);
183
169
  }
184
-
185
170
  routeMatch.error = err;
186
171
  routeMatch.status = 'error';
187
172
  routeMatch.updatedAt = Date.now();
188
173
  throw err;
189
174
  }
190
175
  });
191
-
192
176
  const after = async () => {
193
177
  await checkLatest();
194
178
  routeMatch.isFetching = false;
195
179
  delete routeMatch.__.loadPromise;
196
-
197
180
  routeMatch.__.notify();
198
181
  };
199
-
200
182
  try {
201
183
  await Promise.all([routeMatch.__.componentsPromise, routeMatch.__.dataPromise.catch(() => {})]);
202
184
  after();
@@ -208,11 +190,9 @@ function createRouteMatch(router, route, opts) {
208
190
  await checkLatest();
209
191
  }
210
192
  });
211
-
212
193
  if (!routeMatch.hasLoaders()) {
213
194
  routeMatch.status = 'success';
214
195
  }
215
-
216
196
  return routeMatch;
217
197
  }
218
198
 
@@ -0,0 +1 @@
1
+ {"version":3,"file":"routeMatch.js","sources":["../../src/routeMatch.ts"],"sourcesContent":["import { GetFrameworkGeneric } from './frameworks'\nimport { Route } from './route'\nimport {\n AnyAllRouteInfo,\n AnyRouteInfo,\n DefaultAllRouteInfo,\n RouteInfo,\n} from './routeInfo'\nimport { Router } from './router'\nimport { replaceEqualDeep } from './utils'\n\nexport interface RouteMatch<\n TAllRouteInfo extends AnyAllRouteInfo = DefaultAllRouteInfo,\n TRouteInfo extends AnyRouteInfo = RouteInfo,\n> extends Route<TAllRouteInfo, TRouteInfo> {\n matchId: string\n pathname: string\n params: TRouteInfo['allParams']\n parentMatch?: RouteMatch\n childMatches: RouteMatch[]\n routeSearch: TRouteInfo['searchSchema']\n search: TRouteInfo['fullSearchSchema']\n status: 'idle' | 'loading' | 'success' | 'error'\n updatedAt?: number\n error?: unknown\n isInvalid: boolean\n getIsInvalid: () => boolean\n loaderData: TRouteInfo['loaderData']\n routeLoaderData: TRouteInfo['routeLoaderData']\n isFetching: boolean\n invalidAt: number\n __: {\n component?: GetFrameworkGeneric<'Component'>\n errorComponent?: GetFrameworkGeneric<'ErrorComponent'>\n pendingComponent?: GetFrameworkGeneric<'Component'>\n loadPromise?: Promise<void>\n componentsPromise?: Promise<void>\n dataPromise?: Promise<TRouteInfo['routeLoaderData']>\n onExit?:\n | void\n | ((matchContext: {\n params: TRouteInfo['allParams']\n search: TRouteInfo['fullSearchSchema']\n }) => void)\n abortController: AbortController\n latestId: string\n // setParentMatch: (parentMatch: RouteMatch) => void\n // addChildMatch: (childMatch: RouteMatch) => void\n validate: () => void\n notify: () => void\n resolve: () => void\n }\n cancel: () => void\n load: (\n loaderOpts?:\n | { preload: true; maxAge: number; gcMaxAge: number }\n | { preload?: false; maxAge?: never; gcMaxAge?: never },\n ) => Promise<TRouteInfo['routeLoaderData']>\n fetch: (opts?: { maxAge?: number }) => Promise<TRouteInfo['routeLoaderData']>\n invalidate: () => void\n hasLoaders: () => boolean\n}\n\nconst componentTypes = [\n 'component',\n 'errorComponent',\n 'pendingComponent',\n] as const\n\nexport function createRouteMatch<\n TAllRouteInfo extends AnyAllRouteInfo = DefaultAllRouteInfo,\n TRouteInfo extends AnyRouteInfo = RouteInfo,\n>(\n router: Router<any, any, any>,\n route: Route<TAllRouteInfo, TRouteInfo>,\n opts: {\n parentMatch?: RouteMatch<any, any>\n matchId: string\n params: TRouteInfo['allParams']\n pathname: string\n },\n): RouteMatch<TAllRouteInfo, TRouteInfo> {\n const routeMatch: RouteMatch<TAllRouteInfo, TRouteInfo> = {\n ...route,\n ...opts,\n router,\n routeSearch: {},\n search: {},\n childMatches: [],\n status: 'idle',\n routeLoaderData: {} as TRouteInfo['routeLoaderData'],\n loaderData: {} as TRouteInfo['loaderData'],\n isFetching: false,\n isInvalid: false,\n invalidAt: Infinity,\n // pendingActions: [],\n getIsInvalid: () => {\n const now = Date.now()\n return routeMatch.isInvalid || routeMatch.invalidAt < now\n },\n __: {\n abortController: new AbortController(),\n latestId: '',\n resolve: () => {},\n notify: () => {\n routeMatch.__.resolve()\n routeMatch.router.notify()\n },\n validate: () => {\n // Validate the search params and stabilize them\n const parentSearch =\n routeMatch.parentMatch?.search ?? router.location.search\n\n try {\n const prevSearch = routeMatch.routeSearch\n\n const validator =\n typeof routeMatch.options.validateSearch === 'object'\n ? routeMatch.options.validateSearch.parse\n : routeMatch.options.validateSearch\n\n let nextSearch = replaceEqualDeep(\n prevSearch,\n validator?.(parentSearch) ?? {},\n )\n\n // Invalidate route matches when search param stability changes\n if (prevSearch !== nextSearch) {\n routeMatch.isInvalid = true\n }\n\n routeMatch.routeSearch = nextSearch\n\n routeMatch.search = replaceEqualDeep(parentSearch, {\n ...parentSearch,\n ...nextSearch,\n })\n\n componentTypes.map(async (type) => {\n const component = routeMatch.options[type]\n\n if (typeof routeMatch.__[type] !== 'function') {\n routeMatch.__[type] = component\n }\n })\n } catch (err: any) {\n console.error(err)\n const error = new (Error as any)('Invalid search params found', {\n cause: err,\n })\n error.code = 'INVALID_SEARCH_PARAMS'\n routeMatch.status = 'error'\n routeMatch.error = error\n // Do not proceed with loading the route\n return\n }\n },\n },\n cancel: () => {\n routeMatch.__.abortController?.abort()\n },\n invalidate: () => {\n routeMatch.isInvalid = true\n },\n hasLoaders: () => {\n return !!(\n route.options.loader ||\n componentTypes.some((d) => route.options[d]?.preload)\n )\n },\n load: async (loaderOpts) => {\n const now = Date.now()\n const minMaxAge = loaderOpts?.preload\n ? Math.max(loaderOpts?.maxAge, loaderOpts?.gcMaxAge)\n : 0\n\n // If this is a preload, add it to the preload cache\n if (loaderOpts?.preload && minMaxAge > 0) {\n // If the match is currently active, don't preload it\n if (\n router.state.matches.find((d) => d.matchId === routeMatch.matchId)\n ) {\n return\n }\n\n router.matchCache[routeMatch.matchId] = {\n gc: now + loaderOpts.gcMaxAge,\n match: routeMatch as RouteMatch<any, any>,\n }\n }\n\n // If the match is invalid, errored or idle, trigger it to load\n if (\n (routeMatch.status === 'success' && routeMatch.getIsInvalid()) ||\n routeMatch.status === 'error' ||\n routeMatch.status === 'idle'\n ) {\n const maxAge = loaderOpts?.preload ? loaderOpts?.maxAge : undefined\n\n await routeMatch.fetch({ maxAge })\n }\n },\n fetch: async (opts) => {\n const loadId = '' + Date.now() + Math.random()\n routeMatch.__.latestId = loadId\n const checkLatest = async () => {\n if (loadId !== routeMatch.__.latestId) {\n // warning(true, 'Data loader is out of date!')\n return new Promise(() => {})\n }\n }\n\n // If the match was in an error state, set it\n // to a loading state again. Otherwise, keep it\n // as loading or resolved\n if (routeMatch.status === 'idle') {\n routeMatch.status = 'loading'\n }\n\n // We started loading the route, so it's no longer invalid\n routeMatch.isInvalid = false\n\n routeMatch.__.loadPromise = new Promise(async (resolve) => {\n // We are now fetching, even if it's in the background of a\n // resolved state\n routeMatch.isFetching = true\n routeMatch.__.resolve = resolve as () => void\n\n routeMatch.__.componentsPromise = (async () => {\n // then run all component and data loaders in parallel\n // For each component type, potentially load it asynchronously\n\n await Promise.all(\n componentTypes.map(async (type) => {\n const component = routeMatch.options[type]\n\n if (routeMatch.__[type]?.preload) {\n routeMatch.__[type] = await router.options.loadComponent!(\n component,\n )\n }\n }),\n )\n })()\n\n routeMatch.__.dataPromise = Promise.resolve().then(async () => {\n try {\n if (routeMatch.options.loader) {\n const data = await router.loadMatchData(routeMatch)\n await checkLatest()\n\n routeMatch.routeLoaderData = replaceEqualDeep(\n routeMatch.routeLoaderData,\n data,\n )\n }\n\n routeMatch.error = undefined\n routeMatch.status = 'success'\n routeMatch.updatedAt = Date.now()\n routeMatch.invalidAt =\n routeMatch.updatedAt +\n (opts?.maxAge ??\n routeMatch.options.loaderMaxAge ??\n router.options.defaultLoaderMaxAge ??\n 0)\n\n return routeMatch.routeLoaderData\n } catch (err) {\n await checkLatest()\n\n if (process.env.NODE_ENV !== 'production') {\n console.error(err)\n }\n\n routeMatch.error = err\n routeMatch.status = 'error'\n routeMatch.updatedAt = Date.now()\n\n throw err\n }\n })\n\n const after = async () => {\n await checkLatest()\n routeMatch.isFetching = false\n delete routeMatch.__.loadPromise\n routeMatch.__.notify()\n }\n\n try {\n await Promise.all([\n routeMatch.__.componentsPromise,\n routeMatch.__.dataPromise.catch(() => {}),\n ])\n after()\n } catch {\n after()\n }\n })\n\n await routeMatch.__.loadPromise\n await checkLatest()\n },\n }\n\n if (!routeMatch.hasLoaders()) {\n routeMatch.status = 'success'\n }\n\n return routeMatch\n}\n"],"names":["componentTypes","createRouteMatch","router","route","opts","routeMatch","_extends","routeSearch","search","childMatches","status","routeLoaderData","loaderData","isFetching","isInvalid","invalidAt","Infinity","getIsInvalid","now","Date","__","abortController","AbortController","latestId","resolve","notify","validate","parentSearch","parentMatch","location","prevSearch","validator","options","validateSearch","parse","nextSearch","replaceEqualDeep","map","type","component","err","console","error","Error","cause","code","cancel","abort","invalidate","hasLoaders","loader","some","d","preload","load","loaderOpts","minMaxAge","Math","max","maxAge","gcMaxAge","state","matches","find","matchId","matchCache","gc","match","undefined","fetch","loadId","random","checkLatest","Promise","loadPromise","componentsPromise","all","loadComponent","dataPromise","then","data","loadMatchData","updatedAt","loaderMaxAge","defaultLoaderMaxAge","process","env","NODE_ENV","after","catch"],"mappings":"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"}