@tanstack/router-core 0.0.1-beta.14 → 0.0.1-beta.146

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