@tanstack/router-core 0.0.1-beta.30 → 0.0.1-beta.31
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/route.js.map +1 -1
- package/build/cjs/routeMatch.js +1 -1
- package/build/cjs/routeMatch.js.map +1 -1
- package/build/cjs/router.js +22 -24
- package/build/cjs/router.js.map +1 -1
- package/build/esm/index.js +23 -25
- package/build/esm/index.js.map +1 -1
- package/build/stats-html.html +1 -1
- package/build/stats-react.json +132 -132
- package/build/types/index.d.ts +158 -160
- package/build/umd/index.development.js +23 -25
- 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 +62 -30
- package/src/route.ts +1 -1
- package/src/routeInfo.ts +4 -1
- package/src/routeMatch.ts +6 -4
- package/src/router.ts +28 -30
package/build/cjs/route.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"route.js","sources":["../../src/route.ts"],"sourcesContent":["import {\n CheckRelativePath,\n LinkInfo,\n LinkOptions,\n ResolveRelativePath,\n ToOptions,\n} from './link'\nimport { LoaderContext, RouteConfig, RouteOptions } from './routeConfig'\nimport {\n AnyAllRouteInfo,\n AnyRouteInfo,\n DefaultAllRouteInfo,\n RouteInfo,\n RouteInfoByPath,\n} from './routeInfo'\nimport {\n Action,\n ActionState,\n Loader,\n LoaderState,\n MatchRouteOptions,\n Router,\n} from './router'\nimport { NoInfer } from './utils'\n\nexport interface AnyRoute extends Route<any, any, any> {}\n\nexport interface Route<\n TAllRouteInfo extends AnyAllRouteInfo = DefaultAllRouteInfo,\n TRouteInfo extends AnyRouteInfo = RouteInfo,\n TRouterContext = unknown,\n> {\n routeInfo: TRouteInfo\n routeId: TRouteInfo['id']\n routeRouteId: TRouteInfo['routeId']\n routePath: TRouteInfo['path']\n fullPath: TRouteInfo['fullPath']\n parentRoute?: AnyRoute\n childRoutes?: AnyRoute[]\n options: RouteOptions\n router: Router<TAllRouteInfo['routeConfig'], TAllRouteInfo, TRouterContext>\n buildLink: <TTo extends string = '.'>(\n options: Omit<\n LinkOptions<TAllRouteInfo, TRouteInfo['fullPath'], TTo>,\n 'from'\n >,\n ) => LinkInfo\n matchRoute: <\n TTo extends string = '.',\n TResolved extends string = ResolveRelativePath<TRouteInfo['id'], TTo>,\n >(\n matchLocation: CheckRelativePath<\n TAllRouteInfo,\n TRouteInfo['fullPath'],\n NoInfer<TTo>\n > &\n Omit<ToOptions<TAllRouteInfo, TRouteInfo['fullPath'], TTo>, 'from'>,\n opts?: MatchRouteOptions,\n ) => RouteInfoByPath<TAllRouteInfo, TResolved>['allParams']\n navigate: <TTo extends string = '.'>(\n options: Omit<\n LinkOptions<TAllRouteInfo, TRouteInfo['fullPath'], TTo>,\n 'from'\n >,\n ) => Promise<void>\n action: unknown extends TRouteInfo['actionResponse']\n ?\n | Action<TRouteInfo['actionPayload'], TRouteInfo['actionResponse']>\n | undefined\n : Action<TRouteInfo['actionPayload'], TRouteInfo['actionResponse']>\n loader: unknown extends TRouteInfo['routeLoaderData']\n ?\n | Action<\n LoaderContext<\n TRouteInfo['fullSearchSchema'],\n TRouteInfo['allParams']\n >,\n TRouteInfo['routeLoaderData']\n >\n | undefined\n : Loader<\n TRouteInfo['fullSearchSchema'],\n TRouteInfo['allParams'],\n TRouteInfo['routeLoaderData']\n >\n}\n\nexport function createRoute<\n TAllRouteInfo extends AnyAllRouteInfo = DefaultAllRouteInfo,\n TRouteInfo extends AnyRouteInfo = RouteInfo,\n TRouterContext = unknown,\n>(\n routeConfig: RouteConfig,\n options: TRouteInfo['options'],\n parent: undefined | Route<TAllRouteInfo, any>,\n router: Router<TAllRouteInfo['routeConfig'], TAllRouteInfo, TRouterContext>,\n): Route<TAllRouteInfo, TRouteInfo, TRouterContext> {\n const { id, routeId, path: routePath, fullPath } = routeConfig\n\n const action =\n router.state.actions[id] ||\n (() => {\n router.state.actions[id] = {\n submissions: [],\n submit: async <T, U>(\n submission: T,\n actionOpts?: { invalidate?: boolean; multi?: boolean },\n ) => {\n if (!route) {\n return\n }\n\n const invalidate = actionOpts?.invalidate ?? true\n\n if (!actionOpts?.multi) {\n action.submissions = action.submissions.filter((d) => d.isMulti)\n }\n\n const actionState: ActionState<T, U> = {\n submittedAt: Date.now(),\n status: 'pending',\n submission,\n isMulti: !!actionOpts?.multi,\n }\n\n action.current = actionState\n action.latest = actionState\n action.submissions.push(actionState)\n\n router.notify()\n\n try {\n const res = await route.options.action?.(submission)\n actionState.data = res as U\n\n if (invalidate) {\n router.invalidateRoute({ to: '.', fromCurrent: true })\n await router.reload()\n }\n actionState.status = 'success'\n return res\n } catch (err) {\n console.log('tanner')\n console.error(err)\n actionState.error = err\n actionState.status = 'error'\n } finally {\n router.notify()\n }\n },\n }\n return router.state.actions[id]!\n })()\n\n const loader =\n router.state.loaders[id] ||\n (() => {\n router.state.loaders[id] = {\n pending: [],\n fetch: (async (loaderContext: LoaderContext<any, any>) => {\n if (!route) {\n return\n }\n\n const loaderState: LoaderState<any, any> = {\n loadedAt: Date.now(),\n loaderContext,\n }\n\n loader.current = loaderState\n loader.latest = loaderState\n loader.pending.push(loaderState)\n\n // router.state = {\n // ...router.state,\n // currentAction: loaderState,\n // latestAction: loaderState,\n // }\n\n router.notify()\n\n try {\n return await route.options.loader?.(loaderContext)\n } finally {\n loader.pending = loader.pending.filter((d) => d !== loaderState)\n // router.removeActionQueue.push({ loader, loaderState })\n router.notify()\n }\n }) as any,\n }\n return router.state.loaders[id]!\n })()\n\n let route: Route<TAllRouteInfo, TRouteInfo, TRouterContext> = {\n routeInfo: undefined!,\n routeId: id,\n routeRouteId: routeId,\n routePath,\n fullPath,\n options,\n router,\n childRoutes: undefined!,\n parentRoute: parent,\n action,\n loader: loader as any,\n\n buildLink: (options) => {\n return router.buildLink({\n ...options,\n from: fullPath,\n } as any) as any\n },\n\n navigate: (options) => {\n return router.navigate({\n ...options,\n from: fullPath,\n } as any) as any\n },\n\n matchRoute: (matchLocation, opts) => {\n return router.matchRoute(\n {\n ...matchLocation,\n from: fullPath,\n } as any,\n opts,\n )\n },\n }\n\n router.options.createRoute?.({ router, route })\n\n return route\n}\n"],"names":["createRoute","routeConfig","options","parent","router","id","routeId","path","routePath","fullPath","action","state","actions","submissions","submit","submission","actionOpts","route","invalidate","multi","filter","d","isMulti","actionState","submittedAt","Date","now","status","current","latest","push","notify","res","data","invalidateRoute","to","fromCurrent","reload","err","console","log","error","loader","loaders","pending","fetch","loaderContext","loaderState","loadedAt","routeInfo","undefined","routeRouteId","childRoutes","parentRoute","buildLink","_extends","from","navigate","matchRoute","matchLocation","opts"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"route.js","sources":["../../src/route.ts"],"sourcesContent":["import {\n CheckRelativePath,\n LinkInfo,\n LinkOptions,\n ResolveRelativePath,\n ToOptions,\n} from './link'\nimport { LoaderContext, RouteConfig, RouteOptions } from './routeConfig'\nimport {\n AnyAllRouteInfo,\n AnyRouteInfo,\n DefaultAllRouteInfo,\n RouteInfo,\n RouteInfoByPath,\n} from './routeInfo'\nimport {\n Action,\n ActionState,\n Loader,\n LoaderState,\n MatchRouteOptions,\n Router,\n} from './router'\nimport { NoInfer } from './utils'\n\nexport interface AnyRoute extends Route<any, any, any> {}\n\nexport interface Route<\n TAllRouteInfo extends AnyAllRouteInfo = DefaultAllRouteInfo,\n TRouteInfo extends AnyRouteInfo = RouteInfo,\n TRouterContext = unknown,\n> {\n routeInfo: TRouteInfo\n routeId: TRouteInfo['id']\n routeRouteId: TRouteInfo['routeId']\n routePath: TRouteInfo['path']\n fullPath: TRouteInfo['fullPath']\n parentRoute?: AnyRoute\n childRoutes?: AnyRoute[]\n options: RouteOptions\n router: Router<TAllRouteInfo['routeConfig'], TAllRouteInfo, TRouterContext>\n buildLink: <TTo extends string = '.'>(\n options: Omit<\n LinkOptions<TAllRouteInfo, TRouteInfo['fullPath'], TTo>,\n 'from'\n >,\n ) => LinkInfo\n matchRoute: <\n TTo extends string = '.',\n TResolved extends string = ResolveRelativePath<TRouteInfo['id'], TTo>,\n >(\n matchLocation: CheckRelativePath<\n TAllRouteInfo,\n TRouteInfo['fullPath'],\n NoInfer<TTo>\n > &\n Omit<ToOptions<TAllRouteInfo, TRouteInfo['fullPath'], TTo>, 'from'>,\n opts?: MatchRouteOptions,\n ) => RouteInfoByPath<TAllRouteInfo, TResolved>['allParams']\n navigate: <TTo extends string = '.'>(\n options: Omit<\n LinkOptions<TAllRouteInfo, TRouteInfo['fullPath'], TTo>,\n 'from'\n >,\n ) => Promise<void>\n action: unknown extends TRouteInfo['actionResponse']\n ?\n | Action<TRouteInfo['actionPayload'], TRouteInfo['actionResponse']>\n | undefined\n : Action<TRouteInfo['actionPayload'], TRouteInfo['actionResponse']>\n loader: unknown extends TRouteInfo['routeLoaderData']\n ?\n | Action<\n LoaderContext<\n TRouteInfo['fullSearchSchema'],\n TRouteInfo['allParams']\n >,\n TRouteInfo['routeLoaderData']\n >\n | undefined\n : Loader<\n TRouteInfo['fullSearchSchema'],\n TRouteInfo['allParams'],\n TRouteInfo['routeLoaderData']\n >\n}\n\nexport function createRoute<\n TAllRouteInfo extends AnyAllRouteInfo = DefaultAllRouteInfo,\n TRouteInfo extends AnyRouteInfo = RouteInfo,\n TRouterContext = unknown,\n>(\n routeConfig: RouteConfig,\n options: TRouteInfo['options'],\n parent: undefined | Route<TAllRouteInfo, any>,\n router: Router<TAllRouteInfo['routeConfig'], TAllRouteInfo, TRouterContext>,\n): Route<TAllRouteInfo, TRouteInfo, TRouterContext> {\n const { id, routeId, path: routePath, fullPath } = routeConfig\n\n const action =\n router.state.actions[id] ||\n (() => {\n router.state.actions[id] = {\n submissions: [],\n submit: async <T, U>(\n submission: T,\n actionOpts?: { invalidate?: boolean; multi?: boolean },\n ) => {\n if (!route) {\n return\n }\n\n const invalidate = actionOpts?.invalidate ?? true\n\n if (!actionOpts?.multi) {\n action.submissions = action.submissions.filter((d) => d.isMulti)\n }\n\n const actionState: ActionState<T, U> = {\n submittedAt: Date.now(),\n status: 'pending',\n submission,\n isMulti: !!actionOpts?.multi,\n }\n\n action.current = actionState\n action.latest = actionState\n action.submissions.push(actionState)\n\n router.notify()\n\n try {\n const res = await route.options.action?.(submission)\n actionState.data = res as U\n\n if (invalidate) {\n router.invalidateRoute({ to: '.', fromCurrent: true })\n await router.reload()\n }\n actionState.status = 'success'\n return res\n } catch (err) {\n console.log('tanner')\n console.error(err)\n actionState.error = err\n actionState.status = 'error'\n } finally {\n router.notify()\n }\n },\n }\n return router.state.actions[id]!\n })()\n\n const loader =\n router.state.loaders[id] ||\n (() => {\n router.state.loaders[id] = {\n pending: [],\n fetch: (async (loaderContext: LoaderContext<any, any>) => {\n if (!route) {\n return\n }\n\n const loaderState: LoaderState<any, any> = {\n loadedAt: Date.now(),\n loaderContext,\n }\n\n loader.current = loaderState\n loader.latest = loaderState\n loader.pending.push(loaderState)\n\n // router.state = {\n // ...router.state,\n // currentAction: loaderState,\n // latestAction: loaderState,\n // }\n\n router.notify()\n\n try {\n return await route.options.loader?.(loaderContext)\n } finally {\n loader.pending = loader.pending.filter((d) => d !== loaderState)\n // router.removeActionQueue.push({ loader, loaderState })\n router.notify()\n }\n }) as any,\n }\n return router.state.loaders[id]!\n })()\n\n let route: Route<TAllRouteInfo, TRouteInfo, TRouterContext> = {\n routeInfo: undefined!,\n routeId: id,\n routeRouteId: routeId,\n routePath,\n fullPath,\n options,\n router,\n childRoutes: undefined!,\n parentRoute: parent,\n action,\n loader: loader as any,\n\n buildLink: (options) => {\n return router.buildLink({\n ...options,\n from: fullPath,\n } as any) as any\n },\n\n navigate: (options) => {\n return router.navigate({\n ...options,\n from: fullPath,\n } as any) as any\n },\n\n matchRoute: (matchLocation, opts) => {\n return router.matchRoute(\n {\n ...matchLocation,\n from: fullPath,\n } as any,\n opts,\n ) as any\n },\n }\n\n router.options.createRoute?.({ router, route })\n\n return route\n}\n"],"names":["createRoute","routeConfig","options","parent","router","id","routeId","path","routePath","fullPath","action","state","actions","submissions","submit","submission","actionOpts","route","invalidate","multi","filter","d","isMulti","actionState","submittedAt","Date","now","status","current","latest","push","notify","res","data","invalidateRoute","to","fromCurrent","reload","err","console","log","error","loader","loaders","pending","fetch","loaderContext","loaderState","loadedAt","routeInfo","undefined","routeRouteId","childRoutes","parentRoute","buildLink","_extends","from","navigate","matchRoute","matchLocation","opts"],"mappings":"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"}
|
package/build/cjs/routeMatch.js
CHANGED
|
@@ -44,7 +44,7 @@ function createRouteMatch(router, route, opts) {
|
|
|
44
44
|
validate: () => {
|
|
45
45
|
var _routeMatch$parentMat, _routeMatch$parentMat2;
|
|
46
46
|
// Validate the search params and stabilize them
|
|
47
|
-
const parentSearch = (_routeMatch$parentMat = (_routeMatch$parentMat2 = routeMatch.parentMatch) == null ? void 0 : _routeMatch$parentMat2.search) != null ? _routeMatch$parentMat : router.
|
|
47
|
+
const parentSearch = (_routeMatch$parentMat = (_routeMatch$parentMat2 = routeMatch.parentMatch) == null ? void 0 : _routeMatch$parentMat2.search) != null ? _routeMatch$parentMat : router.__location.search;
|
|
48
48
|
try {
|
|
49
49
|
var _validator;
|
|
50
50
|
const prevSearch = routeMatch.routeSearch;
|
|
@@ -1 +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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"}
|
|
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 { Expand, 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: Expand<\n TAllRouteInfo['fullSearchSchema'] & TRouteInfo['fullSearchSchema']\n >\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: {} as any,\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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"}
|
package/build/cjs/router.js
CHANGED
|
@@ -66,7 +66,7 @@ function createRouter(userOptions) {
|
|
|
66
66
|
basepath: '',
|
|
67
67
|
routeTree: undefined,
|
|
68
68
|
routesById: {},
|
|
69
|
-
|
|
69
|
+
__location: undefined,
|
|
70
70
|
//
|
|
71
71
|
resolveNavigation: () => {},
|
|
72
72
|
matchCache: {},
|
|
@@ -99,7 +99,7 @@ function createRouter(userOptions) {
|
|
|
99
99
|
},
|
|
100
100
|
dehydrate: () => {
|
|
101
101
|
return {
|
|
102
|
-
location: router.
|
|
102
|
+
location: router.__location,
|
|
103
103
|
state: _rollupPluginBabelHelpers["extends"]({}, utils.pick(router.state, ['status', 'location', 'lastUpdated', 'location']), {
|
|
104
104
|
matches: router.state.matches.map(match => utils.pick(match, ['matchId', 'status', 'routeLoaderData', 'loaderData', 'isInvalid', 'invalidAt']))
|
|
105
105
|
}),
|
|
@@ -108,13 +108,13 @@ function createRouter(userOptions) {
|
|
|
108
108
|
},
|
|
109
109
|
hydrate: dehydratedState => {
|
|
110
110
|
// Update the location
|
|
111
|
-
router.
|
|
111
|
+
router.__location = dehydratedState.location;
|
|
112
112
|
|
|
113
113
|
// Update the context
|
|
114
114
|
router.options.context = dehydratedState.context;
|
|
115
115
|
|
|
116
116
|
// Match the routes
|
|
117
|
-
const matches = router.matchRoutes(router.
|
|
117
|
+
const matches = router.matchRoutes(router.__location.pathname, {
|
|
118
118
|
strictParseParams: true
|
|
119
119
|
});
|
|
120
120
|
matches.forEach((match, index) => {
|
|
@@ -136,14 +136,14 @@ function createRouter(userOptions) {
|
|
|
136
136
|
|
|
137
137
|
// If the current location isn't updated, trigger a navigation
|
|
138
138
|
// to the current location. Otherwise, load the current location.
|
|
139
|
-
if (next.href !== router.
|
|
139
|
+
if (next.href !== router.__location.href) {
|
|
140
140
|
router.__.commitLocation(next, true);
|
|
141
141
|
}
|
|
142
142
|
if (!router.state.matches.length) {
|
|
143
143
|
router.load();
|
|
144
144
|
}
|
|
145
145
|
const unsub = router.history.listen(event => {
|
|
146
|
-
router.load(router.__.parseLocation(event.location, router.
|
|
146
|
+
router.load(router.__.parseLocation(event.location, router.__location));
|
|
147
147
|
});
|
|
148
148
|
|
|
149
149
|
// addEventListener does not exist in React Native, but window does
|
|
@@ -167,12 +167,12 @@ function createRouter(userOptions) {
|
|
|
167
167
|
},
|
|
168
168
|
update: opts => {
|
|
169
169
|
const newHistory = (opts == null ? void 0 : opts.history) !== router.history;
|
|
170
|
-
if (!router.
|
|
170
|
+
if (!router.__location || newHistory) {
|
|
171
171
|
if (opts != null && opts.history) {
|
|
172
172
|
router.history = opts.history;
|
|
173
173
|
}
|
|
174
|
-
router.
|
|
175
|
-
router.state.location = router.
|
|
174
|
+
router.__location = router.__.parseLocation(router.history.location);
|
|
175
|
+
router.state.location = router.__location;
|
|
176
176
|
}
|
|
177
177
|
Object.assign(router.options, opts);
|
|
178
178
|
const {
|
|
@@ -197,28 +197,28 @@ function createRouter(userOptions) {
|
|
|
197
197
|
router.startedLoadingAt = id;
|
|
198
198
|
if (next) {
|
|
199
199
|
// Ingest the new location
|
|
200
|
-
router.
|
|
200
|
+
router.__location = next;
|
|
201
201
|
}
|
|
202
202
|
|
|
203
203
|
// Cancel any pending matches
|
|
204
204
|
router.cancelMatches();
|
|
205
205
|
|
|
206
206
|
// Match the routes
|
|
207
|
-
const matches = router.matchRoutes(router.
|
|
207
|
+
const matches = router.matchRoutes(router.__location.pathname, {
|
|
208
208
|
strictParseParams: true
|
|
209
209
|
});
|
|
210
210
|
if (typeof document !== 'undefined') {
|
|
211
211
|
router.state = _rollupPluginBabelHelpers["extends"]({}, router.state, {
|
|
212
212
|
pending: {
|
|
213
213
|
matches: matches,
|
|
214
|
-
location: router.
|
|
214
|
+
location: router.__location
|
|
215
215
|
},
|
|
216
216
|
status: 'loading'
|
|
217
217
|
});
|
|
218
218
|
} else {
|
|
219
219
|
router.state = _rollupPluginBabelHelpers["extends"]({}, router.state, {
|
|
220
220
|
matches: matches,
|
|
221
|
-
location: router.
|
|
221
|
+
location: router.__location,
|
|
222
222
|
status: 'loading'
|
|
223
223
|
});
|
|
224
224
|
}
|
|
@@ -302,7 +302,7 @@ function createRouter(userOptions) {
|
|
|
302
302
|
}
|
|
303
303
|
});
|
|
304
304
|
router.state = _rollupPluginBabelHelpers["extends"]({}, router.state, {
|
|
305
|
-
location: router.
|
|
305
|
+
location: router.__location,
|
|
306
306
|
matches,
|
|
307
307
|
pending: undefined,
|
|
308
308
|
status: 'idle'
|
|
@@ -331,7 +331,7 @@ function createRouter(userOptions) {
|
|
|
331
331
|
},
|
|
332
332
|
loadRoute: async function loadRoute(navigateOpts) {
|
|
333
333
|
if (navigateOpts === void 0) {
|
|
334
|
-
navigateOpts = router.
|
|
334
|
+
navigateOpts = router.__location;
|
|
335
335
|
}
|
|
336
336
|
const next = router.buildNext(navigateOpts);
|
|
337
337
|
const matches = router.matchRoutes(next.pathname, {
|
|
@@ -343,7 +343,7 @@ function createRouter(userOptions) {
|
|
|
343
343
|
preloadRoute: async function preloadRoute(navigateOpts, loaderOpts) {
|
|
344
344
|
var _ref3, _ref4, _loaderOpts$maxAge, _ref5, _ref6, _loaderOpts$gcMaxAge;
|
|
345
345
|
if (navigateOpts === void 0) {
|
|
346
|
-
navigateOpts = router.
|
|
346
|
+
navigateOpts = router.__location;
|
|
347
347
|
}
|
|
348
348
|
const next = router.buildNext(navigateOpts);
|
|
349
349
|
const matches = router.matchRoutes(next.pathname, {
|
|
@@ -723,11 +723,9 @@ function createRouter(userOptions) {
|
|
|
723
723
|
if (dest === void 0) {
|
|
724
724
|
dest = {};
|
|
725
725
|
}
|
|
726
|
-
|
|
727
|
-
// ...router.location,
|
|
728
|
-
const fromPathname = dest.fromCurrent ? router.location.pathname : (_dest$from = dest.from) != null ? _dest$from : router.location.pathname;
|
|
726
|
+
const fromPathname = dest.fromCurrent ? router.__location.pathname : (_dest$from = dest.from) != null ? _dest$from : router.__location.pathname;
|
|
729
727
|
let pathname = path.resolvePath((_router$basepath = router.basepath) != null ? _router$basepath : '/', fromPathname, "" + ((_dest$to = dest.to) != null ? _dest$to : '.'));
|
|
730
|
-
const fromMatches = router.matchRoutes(router.
|
|
728
|
+
const fromMatches = router.matchRoutes(router.__location.pathname, {
|
|
731
729
|
strictParseParams: true
|
|
732
730
|
});
|
|
733
731
|
const toMatches = router.matchRoutes(pathname);
|
|
@@ -741,7 +739,7 @@ function createRouter(userOptions) {
|
|
|
741
739
|
pathname = path.interpolatePath(pathname, nextParams != null ? nextParams : {});
|
|
742
740
|
|
|
743
741
|
// Pre filters first
|
|
744
|
-
const preFilteredSearch = (_dest$__preSearchFilt = dest.__preSearchFilters) != null && _dest$__preSearchFilt.length ? dest.__preSearchFilters.reduce((prev, next) => next(prev), router.
|
|
742
|
+
const preFilteredSearch = (_dest$__preSearchFilt = dest.__preSearchFilters) != null && _dest$__preSearchFilt.length ? dest.__preSearchFilters.reduce((prev, next) => next(prev), router.__location.search) : router.__location.search;
|
|
745
743
|
|
|
746
744
|
// Then the link/navigate function
|
|
747
745
|
const destSearch = dest.search === true ? preFilteredSearch // Preserve resolvedFrom true
|
|
@@ -751,15 +749,15 @@ function createRouter(userOptions) {
|
|
|
751
749
|
|
|
752
750
|
// Then post filters
|
|
753
751
|
const postFilteredSearch = (_dest$__postSearchFil = dest.__postSearchFilters) != null && _dest$__postSearchFil.length ? dest.__postSearchFilters.reduce((prev, next) => next(prev), destSearch) : destSearch;
|
|
754
|
-
const search = utils.replaceEqualDeep(router.
|
|
752
|
+
const search = utils.replaceEqualDeep(router.__location.search, postFilteredSearch);
|
|
755
753
|
const searchStr = router.options.stringifySearch(search);
|
|
756
|
-
let hash = dest.hash === true ? router.
|
|
754
|
+
let hash = dest.hash === true ? router.__location.hash : utils.functionalUpdate(dest.hash, router.__location.hash);
|
|
757
755
|
hash = hash ? "#" + hash : '';
|
|
758
756
|
return {
|
|
759
757
|
pathname,
|
|
760
758
|
search,
|
|
761
759
|
searchStr,
|
|
762
|
-
state: router.
|
|
760
|
+
state: router.__location.state,
|
|
763
761
|
hash,
|
|
764
762
|
href: "" + pathname + searchStr + hash,
|
|
765
763
|
key: dest.key
|