@tanstack/router-core 0.0.1-alpha.7 → 0.0.1-alpha.9
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/packages/router-core/src/routeMatch.js +6 -5
- package/build/cjs/packages/router-core/src/routeMatch.js.map +1 -1
- package/build/cjs/packages/router-core/src/router.js +43 -27
- package/build/cjs/packages/router-core/src/router.js.map +1 -1
- package/build/esm/index.js +49 -32
- package/build/esm/index.js.map +1 -1
- package/build/stats-html.html +1 -1
- package/build/stats-react.json +134 -134
- package/build/types/index.d.ts +15 -6
- package/build/umd/index.development.js +49 -32
- 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 +1 -1
- package/src/link.ts +3 -1
- package/src/routeMatch.ts +11 -7
- package/src/router.ts +53 -31
|
@@ -28,12 +28,10 @@ function createRouteMatch(router, route, opts) {
|
|
|
28
28
|
isPending: false,
|
|
29
29
|
isFetching: false,
|
|
30
30
|
isInvalid: false,
|
|
31
|
+
invalidAt: Infinity,
|
|
31
32
|
getIsInvalid: () => {
|
|
32
|
-
var _ref, _routeMatch$options$l;
|
|
33
|
-
|
|
34
33
|
const now = Date.now();
|
|
35
|
-
|
|
36
|
-
return routeMatch.isInvalid || routeMatch.updatedAt + maxAge < now;
|
|
34
|
+
return routeMatch.isInvalid || routeMatch.invalidAt < now;
|
|
37
35
|
},
|
|
38
36
|
__: {
|
|
39
37
|
abortController: new AbortController(),
|
|
@@ -124,7 +122,7 @@ function createRouteMatch(router, route, opts) {
|
|
|
124
122
|
hasLoaders: () => {
|
|
125
123
|
return !!(route.options.loader || route.options.import || elementTypes.some(d => typeof route.options[d] === 'function'));
|
|
126
124
|
},
|
|
127
|
-
load: async
|
|
125
|
+
load: async opts => {
|
|
128
126
|
const id = '' + Date.now() + Math.random();
|
|
129
127
|
routeMatch.__.latestId = id; // If the match was in an error state, set it
|
|
130
128
|
// to a loading state again. Otherwise, keep it
|
|
@@ -179,6 +177,8 @@ function createRouteMatch(router, route, opts) {
|
|
|
179
177
|
|
|
180
178
|
routeMatch.__.dataPromise = Promise.resolve().then(async () => {
|
|
181
179
|
try {
|
|
180
|
+
var _ref, _ref2, _opts$maxAge;
|
|
181
|
+
|
|
182
182
|
if (routeMatch.options.loader) {
|
|
183
183
|
const data = await routeMatch.options.loader({
|
|
184
184
|
params: routeMatch.params,
|
|
@@ -196,6 +196,7 @@ function createRouteMatch(router, route, opts) {
|
|
|
196
196
|
routeMatch.error = undefined;
|
|
197
197
|
routeMatch.status = 'success';
|
|
198
198
|
routeMatch.updatedAt = Date.now();
|
|
199
|
+
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);
|
|
199
200
|
} catch (err) {
|
|
200
201
|
if (id !== routeMatch.__.latestId) {
|
|
201
202
|
return routeMatch.__.loaderPromise;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"routeMatch.js","sources":["../../../../../src/routeMatch.ts"],"sourcesContent":["import { GetFrameworkGeneric } from './frameworks'\nimport { Route } from './route'\nimport { AnyPathParams } from './routeConfig'\nimport {\n AnyAllRouteInfo,\n AnyRouteInfo,\n DefaultAllRouteInfo,\n RouteInfo,\n} from './routeInfo'\nimport { 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: AnyPathParams\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 isPending: boolean\n __: {\n element?: GetFrameworkGeneric<'Element'> // , TRouteInfo['loaderData']>\n errorElement?: GetFrameworkGeneric<'Element'> // , TRouteInfo['loaderData']>\n catchElement?: GetFrameworkGeneric<'Element'> // , TRouteInfo['loaderData']>\n pendingElement?: GetFrameworkGeneric<'Element'> // , TRouteInfo['loaderData']>\n loadPromise?: Promise<void>\n loaderPromise?: Promise<void>\n importPromise?: Promise<void>\n elementsPromise?: Promise<void>\n dataPromise?: Promise<void>\n pendingTimeout?: Timeout\n pendingMinTimeout?: Timeout\n pendingMinPromise?: 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 startPending: () => void\n cancelPending: () => void\n notify: () => void\n resolve: () => void\n }\n cancel: () => void\n load: () => Promise<void>\n invalidate: () => void\n hasLoaders: () => boolean\n}\n\nconst elementTypes = [\n 'element',\n 'errorElement',\n 'catchElement',\n 'pendingElement',\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 isPending: false,\n isFetching: false,\n isInvalid: false,\n getIsInvalid: () => {\n const now = Date.now()\n const maxAge =\n routeMatch.options.loaderMaxAge ??\n router.options.defaultLoaderMaxAge ??\n 0\n return routeMatch.isInvalid || routeMatch.updatedAt! + maxAge < now\n },\n __: {\n abortController: new AbortController(),\n latestId: '',\n resolve: () => {},\n notify: () => {\n routeMatch.__.resolve()\n routeMatch.router.notify()\n },\n startPending: () => {\n const pendingMs =\n routeMatch.options.pendingMs ?? router.options.defaultPendingMs\n const pendingMinMs =\n routeMatch.options.pendingMinMs ?? router.options.defaultPendingMinMs\n\n if (\n routeMatch.__.pendingTimeout ||\n routeMatch.status !== 'loading' ||\n typeof pendingMs === 'undefined'\n ) {\n return\n }\n\n routeMatch.__.pendingTimeout = setTimeout(() => {\n routeMatch.isPending = true\n routeMatch.__.resolve()\n if (typeof pendingMinMs !== 'undefined') {\n routeMatch.__.pendingMinPromise = new Promise(\n (r) =>\n (routeMatch.__.pendingMinTimeout = setTimeout(r, pendingMinMs)),\n )\n }\n }, pendingMs)\n },\n cancelPending: () => {\n routeMatch.isPending = false\n clearTimeout(routeMatch.__.pendingTimeout)\n clearTimeout(routeMatch.__.pendingMinTimeout)\n delete routeMatch.__.pendingMinPromise\n },\n // setParentMatch: (parentMatch?: RouteMatch) => {\n // routeMatch.parentMatch = parentMatch\n // },\n // addChildMatch: (childMatch: RouteMatch) => {\n // if (\n // routeMatch.childMatches.find((d) => d.matchId === childMatch.matchId)\n // ) {\n // return\n // }\n\n // routeMatch.childMatches.push(childMatch)\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 } 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 routeMatch.__.cancelPending()\n },\n invalidate: () => {\n routeMatch.isInvalid = true\n },\n hasLoaders: () => {\n return !!(\n route.options.loader ||\n route.options.import ||\n elementTypes.some((d) => typeof route.options[d] === 'function')\n )\n },\n load: async () => {\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 const loaderPromise = (async () => {\n const importer = routeMatch.options.import\n\n // First, run any importers\n if (importer) {\n routeMatch.__.importPromise = importer({\n params: routeMatch.params,\n // search: routeMatch.search,\n }).then((imported) => {\n routeMatch.__ = {\n ...routeMatch.__,\n ...imported,\n }\n })\n }\n\n // Wait for the importer to finish before\n // attempting to load elements and data\n await routeMatch.__.importPromise\n\n // Next, load the elements and data in parallel\n\n routeMatch.__.elementsPromise = (async () => {\n // then run all element and data loaders in parallel\n // For each element type, potentially load it asynchronously\n\n await Promise.all(\n elementTypes.map(async (type) => {\n const routeElement = routeMatch.options[type]\n\n if (routeMatch.__[type]) {\n return\n }\n\n if (typeof routeElement === 'function') {\n const res = await (routeElement as any)(routeMatch)\n\n routeMatch.__[type] = res\n } else {\n routeMatch.__[type] = routeMatch.options[type] as any\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.__.loaderPromise\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 } catch (err) {\n if (id !== routeMatch.__.latestId) {\n return routeMatch.__.loaderPromise\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.__.elementsPromise,\n routeMatch.__.dataPromise,\n ])\n if (id !== routeMatch.__.latestId) {\n return routeMatch.__.loaderPromise\n }\n\n if (routeMatch.__.pendingMinPromise) {\n await routeMatch.__.pendingMinPromise\n delete routeMatch.__.pendingMinPromise\n }\n } finally {\n if (id !== routeMatch.__.latestId) {\n return routeMatch.__.loaderPromise\n }\n routeMatch.__.cancelPending()\n routeMatch.isPending = false\n routeMatch.isFetching = false\n routeMatch.__.notify()\n }\n })()\n\n routeMatch.__.loaderPromise = loaderPromise\n await loaderPromise\n\n if (id !== routeMatch.__.latestId) {\n return routeMatch.__.loaderPromise\n }\n delete routeMatch.__.loaderPromise\n })\n\n return await routeMatch.__.loadPromise\n },\n }\n\n if (!routeMatch.hasLoaders()) {\n routeMatch.status = 'success'\n }\n\n return routeMatch\n}\n"],"names":["elementTypes","createRouteMatch","router","route","opts","routeMatch","_extends","routeSearch","search","childMatches","status","routeLoaderData","loaderData","isPending","isFetching","isInvalid","getIsInvalid","now","Date","maxAge","options","loaderMaxAge","defaultLoaderMaxAge","updatedAt","__","abortController","AbortController","latestId","resolve","notify","startPending","pendingMs","defaultPendingMs","pendingMinMs","defaultPendingMinMs","pendingTimeout","setTimeout","pendingMinPromise","Promise","r","pendingMinTimeout","cancelPending","clearTimeout","validate","parentSearch","parentMatch","location","prevSearch","validator","validateSearch","parse","nextSearch","replaceEqualDeep","err","console","error","Error","cause","code","cancel","abort","invalidate","hasLoaders","loader","import","some","d","load","id","Math","random","loadPromise","loaderPromise","importer","importPromise","params","then","imported","elementsPromise","all","map","type","routeElement","res","dataPromise","data","signal","undefined","process","env","NODE_ENV"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"routeMatch.js","sources":["../../../../../src/routeMatch.ts"],"sourcesContent":["import { GetFrameworkGeneric } from './frameworks'\nimport { Route } from './route'\nimport { AnyPathParams } from './routeConfig'\nimport {\n AnyAllRouteInfo,\n AnyRouteInfo,\n DefaultAllRouteInfo,\n RouteInfo,\n} from './routeInfo'\nimport { 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: AnyPathParams\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 isPending: boolean\n invalidAt: number\n __: {\n element?: GetFrameworkGeneric<'Element'> // , TRouteInfo['loaderData']>\n errorElement?: GetFrameworkGeneric<'Element'> // , TRouteInfo['loaderData']>\n catchElement?: GetFrameworkGeneric<'Element'> // , TRouteInfo['loaderData']>\n pendingElement?: GetFrameworkGeneric<'Element'> // , TRouteInfo['loaderData']>\n loadPromise?: Promise<void>\n loaderPromise?: Promise<void>\n importPromise?: Promise<void>\n elementsPromise?: Promise<void>\n dataPromise?: Promise<void>\n pendingTimeout?: Timeout\n pendingMinTimeout?: Timeout\n pendingMinPromise?: 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 startPending: () => void\n cancelPending: () => void\n notify: () => void\n resolve: () => void\n }\n cancel: () => void\n load: (opts?: { maxAge?: number }) => Promise<void>\n invalidate: () => void\n hasLoaders: () => boolean\n}\n\nconst elementTypes = [\n 'element',\n 'errorElement',\n 'catchElement',\n 'pendingElement',\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 isPending: false,\n isFetching: false,\n isInvalid: false,\n invalidAt: Infinity,\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 startPending: () => {\n const pendingMs =\n routeMatch.options.pendingMs ?? router.options.defaultPendingMs\n const pendingMinMs =\n routeMatch.options.pendingMinMs ?? router.options.defaultPendingMinMs\n\n if (\n routeMatch.__.pendingTimeout ||\n routeMatch.status !== 'loading' ||\n typeof pendingMs === 'undefined'\n ) {\n return\n }\n\n routeMatch.__.pendingTimeout = setTimeout(() => {\n routeMatch.isPending = true\n routeMatch.__.resolve()\n if (typeof pendingMinMs !== 'undefined') {\n routeMatch.__.pendingMinPromise = new Promise(\n (r) =>\n (routeMatch.__.pendingMinTimeout = setTimeout(r, pendingMinMs)),\n )\n }\n }, pendingMs)\n },\n cancelPending: () => {\n routeMatch.isPending = false\n clearTimeout(routeMatch.__.pendingTimeout)\n clearTimeout(routeMatch.__.pendingMinTimeout)\n delete routeMatch.__.pendingMinPromise\n },\n // setParentMatch: (parentMatch?: RouteMatch) => {\n // routeMatch.parentMatch = parentMatch\n // },\n // addChildMatch: (childMatch: RouteMatch) => {\n // if (\n // routeMatch.childMatches.find((d) => d.matchId === childMatch.matchId)\n // ) {\n // return\n // }\n\n // routeMatch.childMatches.push(childMatch)\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 } 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 routeMatch.__.cancelPending()\n },\n invalidate: () => {\n routeMatch.isInvalid = true\n },\n hasLoaders: () => {\n return !!(\n route.options.loader ||\n route.options.import ||\n elementTypes.some((d) => typeof route.options[d] === 'function')\n )\n },\n load: 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 const loaderPromise = (async () => {\n const importer = routeMatch.options.import\n\n // First, run any importers\n if (importer) {\n routeMatch.__.importPromise = importer({\n params: routeMatch.params,\n // search: routeMatch.search,\n }).then((imported) => {\n routeMatch.__ = {\n ...routeMatch.__,\n ...imported,\n }\n })\n }\n\n // Wait for the importer to finish before\n // attempting to load elements and data\n await routeMatch.__.importPromise\n\n // Next, load the elements and data in parallel\n\n routeMatch.__.elementsPromise = (async () => {\n // then run all element and data loaders in parallel\n // For each element type, potentially load it asynchronously\n\n await Promise.all(\n elementTypes.map(async (type) => {\n const routeElement = routeMatch.options[type]\n\n if (routeMatch.__[type]) {\n return\n }\n\n if (typeof routeElement === 'function') {\n const res = await (routeElement as any)(routeMatch)\n\n routeMatch.__[type] = res\n } else {\n routeMatch.__[type] = routeMatch.options[type] as any\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.__.loaderPromise\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.__.loaderPromise\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.__.elementsPromise,\n routeMatch.__.dataPromise,\n ])\n if (id !== routeMatch.__.latestId) {\n return routeMatch.__.loaderPromise\n }\n\n if (routeMatch.__.pendingMinPromise) {\n await routeMatch.__.pendingMinPromise\n delete routeMatch.__.pendingMinPromise\n }\n } finally {\n if (id !== routeMatch.__.latestId) {\n return routeMatch.__.loaderPromise\n }\n routeMatch.__.cancelPending()\n routeMatch.isPending = false\n routeMatch.isFetching = false\n routeMatch.__.notify()\n }\n })()\n\n routeMatch.__.loaderPromise = loaderPromise\n await loaderPromise\n\n if (id !== routeMatch.__.latestId) {\n return routeMatch.__.loaderPromise\n }\n delete routeMatch.__.loaderPromise\n })\n\n return await routeMatch.__.loadPromise\n },\n }\n\n if (!routeMatch.hasLoaders()) {\n routeMatch.status = 'success'\n }\n\n return routeMatch\n}\n"],"names":["elementTypes","createRouteMatch","router","route","opts","routeMatch","_extends","routeSearch","search","childMatches","status","routeLoaderData","loaderData","isPending","isFetching","isInvalid","invalidAt","Infinity","getIsInvalid","now","Date","__","abortController","AbortController","latestId","resolve","notify","startPending","pendingMs","options","defaultPendingMs","pendingMinMs","defaultPendingMinMs","pendingTimeout","setTimeout","pendingMinPromise","Promise","r","pendingMinTimeout","cancelPending","clearTimeout","validate","parentSearch","parentMatch","location","prevSearch","validator","validateSearch","parse","nextSearch","replaceEqualDeep","err","console","error","Error","cause","code","cancel","abort","invalidate","hasLoaders","loader","import","some","d","load","id","Math","random","loadPromise","loaderPromise","importer","importPromise","params","then","imported","elementsPromise","all","map","type","routeElement","res","dataPromise","data","signal","undefined","updatedAt","maxAge","loaderMaxAge","defaultLoaderMaxAge","process","env","NODE_ENV"],"mappings":"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"}
|
|
@@ -35,7 +35,8 @@ function createRouter(userOptions) {
|
|
|
35
35
|
const originalOptions = _rollupPluginBabelHelpers["extends"]({
|
|
36
36
|
defaultLoaderGcMaxAge: 5 * 60 * 1000,
|
|
37
37
|
defaultLoaderMaxAge: 0,
|
|
38
|
-
|
|
38
|
+
defaultPreloadMaxAge: 2000,
|
|
39
|
+
defaultPreloadDelay: 50
|
|
39
40
|
}, userOptions, {
|
|
40
41
|
stringifySearch: (_userOptions$stringif = userOptions == null ? void 0 : userOptions.stringifySearch) != null ? _userOptions$stringif : searchParams.defaultStringifySearch,
|
|
41
42
|
parseSearch: (_userOptions$parseSea = userOptions == null ? void 0 : userOptions.parseSearch) != null ? _userOptions$parseSea : searchParams.defaultParseSearch
|
|
@@ -432,7 +433,21 @@ function createRouter(userOptions) {
|
|
|
432
433
|
delete router.matchCache[matchId];
|
|
433
434
|
});
|
|
434
435
|
},
|
|
435
|
-
loadRoute: async function loadRoute(navigateOpts
|
|
436
|
+
loadRoute: async function loadRoute(navigateOpts) {
|
|
437
|
+
if (navigateOpts === void 0) {
|
|
438
|
+
navigateOpts = router.location;
|
|
439
|
+
}
|
|
440
|
+
|
|
441
|
+
const next = router.buildNext(navigateOpts);
|
|
442
|
+
const matches = router.matchRoutes(next.pathname, {
|
|
443
|
+
strictParseParams: true
|
|
444
|
+
});
|
|
445
|
+
await router.loadMatches(matches);
|
|
446
|
+
return matches;
|
|
447
|
+
},
|
|
448
|
+
preloadRoute: async function preloadRoute(navigateOpts, loaderOpts) {
|
|
449
|
+
var _ref4, _ref5, _loaderOpts$maxAge, _ref6, _ref7, _loaderOpts$gcMaxAge;
|
|
450
|
+
|
|
436
451
|
if (navigateOpts === void 0) {
|
|
437
452
|
navigateOpts = router.location;
|
|
438
453
|
}
|
|
@@ -443,7 +458,8 @@ function createRouter(userOptions) {
|
|
|
443
458
|
});
|
|
444
459
|
await router.loadMatches(matches, {
|
|
445
460
|
preload: true,
|
|
446
|
-
maxAge: loaderOpts.maxAge
|
|
461
|
+
maxAge: (_ref4 = (_ref5 = (_loaderOpts$maxAge = loaderOpts.maxAge) != null ? _loaderOpts$maxAge : router.options.defaultPreloadMaxAge) != null ? _ref5 : router.options.defaultLoaderMaxAge) != null ? _ref4 : 0,
|
|
462
|
+
gcMaxAge: (_ref6 = (_ref7 = (_loaderOpts$gcMaxAge = loaderOpts.gcMaxAge) != null ? _loaderOpts$gcMaxAge : router.options.defaultPreloadGcMaxAge) != null ? _ref7 : router.options.defaultLoaderGcMaxAge) != null ? _ref6 : 0
|
|
447
463
|
});
|
|
448
464
|
return matches;
|
|
449
465
|
},
|
|
@@ -538,32 +554,30 @@ function createRouter(userOptions) {
|
|
|
538
554
|
},
|
|
539
555
|
loadMatches: async (resolvedMatches, loaderOpts) => {
|
|
540
556
|
const now = Date.now();
|
|
557
|
+
const minMaxAge = loaderOpts != null && loaderOpts.preload ? Math.max(loaderOpts == null ? void 0 : loaderOpts.maxAge, loaderOpts == null ? void 0 : loaderOpts.gcMaxAge) : 0;
|
|
541
558
|
const matchPromises = resolvedMatches.map(async match => {
|
|
542
559
|
// Validate the match (loads search params etc)
|
|
543
|
-
match.__.validate(); // If
|
|
560
|
+
match.__.validate(); // If this is a preload, add it to the preload cache
|
|
544
561
|
|
|
545
562
|
|
|
546
|
-
if (
|
|
547
|
-
return;
|
|
548
|
-
} // If this is a preload, add it to the preload cache
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
if (loaderOpts != null && loaderOpts.preload && (loaderOpts == null ? void 0 : loaderOpts.maxAge) > 0) {
|
|
563
|
+
if (loaderOpts != null && loaderOpts.preload && minMaxAge > 0) {
|
|
552
564
|
// If the match is currently active, don't preload it
|
|
553
565
|
if (router.state.matches.find(d => d.matchId === match.matchId)) {
|
|
554
566
|
return;
|
|
555
567
|
}
|
|
556
568
|
|
|
557
569
|
router.matchCache[match.matchId] = {
|
|
558
|
-
gc: now + loaderOpts.
|
|
559
|
-
// TODO: Should this use the route's maxAge?
|
|
570
|
+
gc: now + loaderOpts.gcMaxAge,
|
|
560
571
|
match
|
|
561
572
|
};
|
|
562
573
|
} // If the match is invalid, errored or idle, trigger it to load
|
|
563
574
|
|
|
564
575
|
|
|
565
576
|
if (match.status === 'success' && match.getIsInvalid() || match.status === 'error' || match.status === 'idle') {
|
|
566
|
-
|
|
577
|
+
const maxAge = loaderOpts != null && loaderOpts.preload ? loaderOpts == null ? void 0 : loaderOpts.maxAge : undefined;
|
|
578
|
+
match.load({
|
|
579
|
+
maxAge
|
|
580
|
+
});
|
|
567
581
|
}
|
|
568
582
|
|
|
569
583
|
if (match.status === 'loading') {
|
|
@@ -625,7 +639,7 @@ function createRouter(userOptions) {
|
|
|
625
639
|
const next = router.buildNext(location);
|
|
626
640
|
return router.commitLocation(next, location.replace);
|
|
627
641
|
},
|
|
628
|
-
navigate: async
|
|
642
|
+
navigate: async _ref8 => {
|
|
629
643
|
let {
|
|
630
644
|
from,
|
|
631
645
|
to = '.',
|
|
@@ -633,7 +647,7 @@ function createRouter(userOptions) {
|
|
|
633
647
|
hash,
|
|
634
648
|
replace,
|
|
635
649
|
params
|
|
636
|
-
} =
|
|
650
|
+
} = _ref8;
|
|
637
651
|
// If this link simply reloads the current route,
|
|
638
652
|
// make sure it has a new key so it will trigger a data refresh
|
|
639
653
|
// If this `to` is a valid external URL, return
|
|
@@ -657,8 +671,8 @@ function createRouter(userOptions) {
|
|
|
657
671
|
params
|
|
658
672
|
});
|
|
659
673
|
},
|
|
660
|
-
buildLink:
|
|
661
|
-
var _preload,
|
|
674
|
+
buildLink: _ref9 => {
|
|
675
|
+
var _preload, _ref10;
|
|
662
676
|
|
|
663
677
|
let {
|
|
664
678
|
from,
|
|
@@ -671,9 +685,10 @@ function createRouter(userOptions) {
|
|
|
671
685
|
activeOptions,
|
|
672
686
|
preload,
|
|
673
687
|
preloadMaxAge: userPreloadMaxAge,
|
|
688
|
+
preloadGcMaxAge: userPreloadGcMaxAge,
|
|
674
689
|
preloadDelay: userPreloadDelay,
|
|
675
690
|
disabled
|
|
676
|
-
} =
|
|
691
|
+
} = _ref9;
|
|
677
692
|
|
|
678
693
|
// If this link simply reloads the current route,
|
|
679
694
|
// make sure it has a new key so it will trigger a data refresh
|
|
@@ -696,9 +711,8 @@ function createRouter(userOptions) {
|
|
|
696
711
|
replace
|
|
697
712
|
};
|
|
698
713
|
const next = router.buildNext(nextOpts);
|
|
699
|
-
preload = (_preload = preload) != null ? _preload : router.options.
|
|
700
|
-
const
|
|
701
|
-
const preloadDelay = (_ref8 = userPreloadDelay != null ? userPreloadDelay : router.options.defaultLinkPreloadDelay) != null ? _ref8 : 0; // Compare path/hash for matches
|
|
714
|
+
preload = (_preload = preload) != null ? _preload : router.options.defaultPreload;
|
|
715
|
+
const preloadDelay = (_ref10 = userPreloadDelay != null ? userPreloadDelay : router.options.defaultPreloadDelay) != null ? _ref10 : 0; // Compare path/hash for matches
|
|
702
716
|
|
|
703
717
|
const pathIsEqual = router.state.location.pathname === next.pathname;
|
|
704
718
|
const currentPathSplit = router.state.location.pathname.split('/');
|
|
@@ -726,9 +740,10 @@ function createRouter(userOptions) {
|
|
|
726
740
|
|
|
727
741
|
|
|
728
742
|
const handleFocus = e => {
|
|
729
|
-
if (preload
|
|
730
|
-
router.
|
|
731
|
-
maxAge:
|
|
743
|
+
if (preload) {
|
|
744
|
+
router.preloadRoute(nextOpts, {
|
|
745
|
+
maxAge: userPreloadMaxAge,
|
|
746
|
+
gcMaxAge: userPreloadGcMaxAge
|
|
732
747
|
});
|
|
733
748
|
}
|
|
734
749
|
};
|
|
@@ -736,15 +751,16 @@ function createRouter(userOptions) {
|
|
|
736
751
|
const handleEnter = e => {
|
|
737
752
|
const target = e.target || {};
|
|
738
753
|
|
|
739
|
-
if (preload
|
|
754
|
+
if (preload) {
|
|
740
755
|
if (target.preloadTimeout) {
|
|
741
756
|
return;
|
|
742
757
|
}
|
|
743
758
|
|
|
744
759
|
target.preloadTimeout = setTimeout(() => {
|
|
745
760
|
target.preloadTimeout = null;
|
|
746
|
-
router.
|
|
747
|
-
maxAge:
|
|
761
|
+
router.preloadRoute(nextOpts, {
|
|
762
|
+
maxAge: userPreloadMaxAge,
|
|
763
|
+
gcMaxAge: userPreloadGcMaxAge
|
|
748
764
|
});
|
|
749
765
|
}, preloadDelay);
|
|
750
766
|
}
|