@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.
- package/build/cjs/_virtual/_rollupPluginBabelHelpers.js +0 -2
- package/build/cjs/_virtual/_rollupPluginBabelHelpers.js.map +1 -1
- package/build/cjs/{packages/router-core/src/index.js → index.js} +22 -6
- package/build/cjs/{packages/router-core/src/index.js.map → index.js.map} +1 -1
- package/build/cjs/{packages/router-core/src/path.js → path.js} +4 -28
- package/build/cjs/path.js.map +1 -0
- package/build/cjs/{packages/router-core/src/qss.js → qss.js} +8 -13
- package/build/cjs/qss.js.map +1 -0
- package/build/cjs/{packages/router-core/src/route.js → route.js} +7 -16
- package/build/cjs/route.js.map +1 -0
- package/build/cjs/{packages/router-core/src/routeConfig.js → routeConfig.js} +10 -12
- package/build/cjs/routeConfig.js.map +1 -0
- package/build/cjs/{packages/router-core/src/routeMatch.js → routeMatch.js} +15 -35
- package/build/cjs/routeMatch.js.map +1 -0
- package/build/cjs/{packages/router-core/src/router.js → router.js} +103 -159
- package/build/cjs/router.js.map +1 -0
- package/build/cjs/{packages/router-core/src/searchParams.js → searchParams.js} +7 -10
- package/build/cjs/searchParams.js.map +1 -0
- package/build/cjs/{packages/router-core/src/utils.js → utils.js} +10 -24
- package/build/cjs/utils.js.map +1 -0
- package/build/esm/index.js +150 -1112
- package/build/esm/index.js.map +1 -1
- package/build/stats-html.html +59 -49
- package/build/stats-react.json +155 -155
- package/build/types/index.d.ts +34 -20
- package/build/umd/index.development.js +145 -290
- package/build/umd/index.development.js.map +1 -1
- package/build/umd/index.production.js +1 -1
- package/build/umd/index.production.js.map +1 -1
- package/package.json +2 -2
- package/src/route.ts +8 -5
- package/src/routeConfig.ts +6 -10
- package/src/routeMatch.ts +1 -1
- package/src/router.ts +114 -51
- package/build/cjs/node_modules/@babel/runtime/helpers/esm/extends.js +0 -33
- package/build/cjs/node_modules/@babel/runtime/helpers/esm/extends.js.map +0 -1
- package/build/cjs/node_modules/history/index.js +0 -815
- package/build/cjs/node_modules/history/index.js.map +0 -1
- package/build/cjs/node_modules/tiny-invariant/dist/esm/tiny-invariant.js +0 -30
- package/build/cjs/node_modules/tiny-invariant/dist/esm/tiny-invariant.js.map +0 -1
- package/build/cjs/packages/router-core/src/path.js.map +0 -1
- package/build/cjs/packages/router-core/src/qss.js.map +0 -1
- package/build/cjs/packages/router-core/src/route.js.map +0 -1
- package/build/cjs/packages/router-core/src/routeConfig.js.map +0 -1
- package/build/cjs/packages/router-core/src/routeMatch.js.map +0 -1
- package/build/cjs/packages/router-core/src/router.js.map +0 -1
- package/build/cjs/packages/router-core/src/searchParams.js.map +0 -1
- 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('
|
|
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 : {});
|
|
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;
|
|
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;
|
|
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
|
-
}
|
|
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
|
-
};
|
|
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
|
-
}
|
|
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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"}
|