@tanstack/router-core 0.0.1-beta.50 → 0.0.1-beta.52
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/actions.js +1 -1
- package/build/cjs/actions.js.map +1 -1
- package/build/cjs/history.js +2 -7
- package/build/cjs/history.js.map +1 -1
- package/build/cjs/routeMatch.js +3 -3
- package/build/cjs/routeMatch.js.map +1 -1
- package/build/cjs/router.js +23 -16
- package/build/cjs/router.js.map +1 -1
- package/build/esm/index.js +29 -27
- package/build/esm/index.js.map +1 -1
- package/build/stats-html.html +1 -1
- package/build/stats-react.json +154 -154
- package/build/types/index.d.ts +4 -3
- package/build/umd/index.development.js +29 -27
- 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/actions.ts +1 -1
- package/src/history.ts +2 -7
- package/src/routeMatch.ts +4 -5
- package/src/router.ts +38 -19
package/build/cjs/router.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"router.js","sources":["../../src/router.ts"],"sourcesContent":["import invariant from 'tiny-invariant'\nimport { GetFrameworkGeneric } from './frameworks'\n\nimport {\n LinkInfo,\n LinkOptions,\n NavigateOptions,\n ToOptions,\n ValidFromPath,\n ResolveRelativePath,\n} from './link'\nimport {\n cleanPath,\n interpolatePath,\n joinPaths,\n matchPathname,\n resolvePath,\n trimPath,\n} from './path'\nimport { AnyRoute, Route } from './route'\nimport {\n AnyLoaderData,\n AnyPathParams,\n AnyRouteConfig,\n AnySearchSchema,\n LoaderContext,\n RouteConfig,\n SearchFilter,\n} from './routeConfig'\nimport {\n AllRouteInfo,\n AnyAllRouteInfo,\n RouteInfo,\n RoutesById,\n} from './routeInfo'\nimport { RouteMatch, RouteMatchStore } from './routeMatch'\nimport { defaultParseSearch, defaultStringifySearch } from './searchParams'\nimport { createStore, batch, Store } from './store'\nimport {\n functionalUpdate,\n last,\n NoInfer,\n pick,\n PickAsRequired,\n PickRequired,\n Timeout,\n Updater,\n} from './utils'\nimport { replaceEqualDeep } from './interop'\nimport {\n createBrowserHistory,\n createMemoryHistory,\n RouterHistory,\n} from './history'\n\nexport interface RegisterRouter {\n // router: Router\n}\n\nexport type AnyRouter = Router<any, any, any>\n\nexport type RegisteredRouter = RegisterRouter extends {\n router: Router<infer TRouteConfig, infer TAllRouteInfo, infer TRouterContext>\n}\n ? Router<TRouteConfig, TAllRouteInfo, TRouterContext>\n : Router\n\nexport type RegisteredAllRouteInfo = RegisterRouter extends {\n router: Router<infer TRouteConfig, infer TAllRouteInfo, infer TRouterContext>\n}\n ? TAllRouteInfo\n : AnyAllRouteInfo\n\nexport interface LocationState {}\n\nexport interface ParsedLocation<\n TSearchObj extends AnySearchSchema = {},\n TState extends LocationState = LocationState,\n> {\n href: string\n pathname: string\n search: TSearchObj\n searchStr: string\n state: TState\n hash: string\n key?: string\n}\n\nexport interface FromLocation {\n pathname: string\n search?: unknown\n key?: string\n hash?: string\n}\n\nexport type SearchSerializer = (searchObj: Record<string, any>) => string\nexport type SearchParser = (searchStr: string) => Record<string, any>\nexport type FilterRoutesFn = <TRoute extends Route<any, RouteInfo>>(\n routeConfigs: TRoute[],\n) => TRoute[]\n\nexport interface RouterOptions<\n TRouteConfig extends AnyRouteConfig,\n TRouterContext,\n> {\n history?: RouterHistory\n stringifySearch?: SearchSerializer\n parseSearch?: SearchParser\n filterRoutes?: FilterRoutesFn\n defaultPreload?: false | 'intent'\n defaultPreloadMaxAge?: number\n defaultPreloadGcMaxAge?: number\n defaultPreloadDelay?: number\n defaultComponent?: GetFrameworkGeneric<'Component'>\n defaultErrorComponent?: GetFrameworkGeneric<'ErrorComponent'>\n defaultPendingComponent?: GetFrameworkGeneric<'Component'>\n defaultLoaderMaxAge?: number\n defaultLoaderGcMaxAge?: number\n caseSensitive?: boolean\n routeConfig?: TRouteConfig\n basepath?: string\n useServerData?: boolean\n createRouter?: (router: AnyRouter) => void\n createRoute?: (opts: { route: AnyRoute; router: AnyRouter }) => void\n context?: TRouterContext\n loadComponent?: (\n component: GetFrameworkGeneric<'Component'>,\n ) => Promise<GetFrameworkGeneric<'Component'>>\n onRouteChange?: () => void\n fetchServerDataFn?: FetchServerDataFn\n}\n\ntype FetchServerDataFn = (ctx: {\n router: AnyRouter\n routeMatch: RouteMatch\n}) => Promise<any>\n\nexport interface Loader<\n TFullSearchSchema extends AnySearchSchema = {},\n TAllParams extends AnyPathParams = {},\n TRouteLoaderData = AnyLoaderData,\n> {\n fetch: keyof PickRequired<TFullSearchSchema> extends never\n ? keyof TAllParams extends never\n ? (loaderContext: { signal?: AbortSignal }) => Promise<TRouteLoaderData>\n : (loaderContext: {\n params: TAllParams\n search?: TFullSearchSchema\n signal?: AbortSignal\n }) => Promise<TRouteLoaderData>\n : keyof TAllParams extends never\n ? (loaderContext: {\n search: TFullSearchSchema\n params: TAllParams\n signal?: AbortSignal\n }) => Promise<TRouteLoaderData>\n : (loaderContext: {\n search: TFullSearchSchema\n signal?: AbortSignal\n }) => Promise<TRouteLoaderData>\n current?: LoaderState<TFullSearchSchema, TAllParams>\n latest?: LoaderState<TFullSearchSchema, TAllParams>\n pending: LoaderState<TFullSearchSchema, TAllParams>[]\n}\n\nexport interface LoaderState<\n TFullSearchSchema extends AnySearchSchema = {},\n TAllParams extends AnyPathParams = {},\n> {\n loadedAt: number\n loaderContext: LoaderContext<TFullSearchSchema, TAllParams>\n}\n\nexport interface RouterStore<\n TSearchObj extends AnySearchSchema = {},\n TState extends LocationState = LocationState,\n> {\n status: 'idle' | 'loading'\n latestLocation: ParsedLocation<TSearchObj, TState>\n currentMatches: RouteMatch[]\n currentLocation: ParsedLocation<TSearchObj, TState>\n pendingMatches?: RouteMatch[]\n pendingLocation?: ParsedLocation<TSearchObj, TState>\n lastUpdated: number\n loaders: Record<string, Loader>\n isFetching: boolean\n isPreloading: boolean\n matchCache: Record<string, MatchCacheEntry>\n}\n\nexport type ListenerFn = () => void\n\nexport interface BuildNextOptions {\n to?: string | number | null\n params?: true | Updater<unknown>\n search?: true | Updater<unknown>\n hash?: true | Updater<string>\n state?: LocationState\n key?: string\n from?: string\n fromCurrent?: boolean\n __preSearchFilters?: SearchFilter<any>[]\n __postSearchFilters?: SearchFilter<any>[]\n}\n\nexport type MatchCacheEntry = {\n gc: number\n match: RouteMatch\n}\n\nexport interface MatchLocation {\n to?: string | number | null\n fuzzy?: boolean\n caseSensitive?: boolean\n from?: string\n fromCurrent?: boolean\n}\n\nexport interface MatchRouteOptions {\n pending?: boolean\n caseSensitive?: boolean\n fuzzy?: boolean\n}\n\ntype LinkCurrentTargetElement = {\n preloadTimeout?: null | ReturnType<typeof setTimeout>\n}\n\nexport interface DehydratedRouterState\n extends Pick<\n RouterStore,\n 'status' | 'latestLocation' | 'currentLocation' | 'lastUpdated'\n > {\n currentMatches: DehydratedRouteMatch[]\n}\n\nexport interface DehydratedRouter<TRouterContext = unknown> {\n // location: Router['__location']\n state: DehydratedRouterState\n context: TRouterContext\n}\n\nexport type MatchCache = Record<string, MatchCacheEntry>\n\ninterface DehydratedRouteMatch {\n matchId: string\n state: Pick<\n RouteMatchStore<any, any>,\n 'status' | 'routeLoaderData' | 'invalid' | 'invalidAt'\n >\n}\n\nexport interface RouterContext {}\n\nexport const defaultFetchServerDataFn: FetchServerDataFn = async ({\n router,\n routeMatch,\n}) => {\n const next = router.buildNext({\n to: '.',\n search: (d: any) => ({\n ...(d ?? {}),\n __data: {\n matchId: routeMatch.id,\n },\n }),\n })\n\n const res = await fetch(next.href, {\n method: 'GET',\n signal: routeMatch.abortController.signal,\n })\n\n if (res.ok) {\n return res.json()\n }\n\n throw new Error('Failed to fetch match data')\n}\n\nexport class Router<\n TRouteConfig extends AnyRouteConfig = RouteConfig,\n TAllRouteInfo extends AnyAllRouteInfo = AllRouteInfo<TRouteConfig>,\n TRouterContext = unknown,\n> {\n types!: {\n // Super secret internal stuff\n RouteConfig: TRouteConfig\n AllRouteInfo: TAllRouteInfo\n }\n\n options: PickAsRequired<\n RouterOptions<TRouteConfig, TRouterContext>,\n 'stringifySearch' | 'parseSearch' | 'context'\n >\n history: RouterHistory\n basepath: string\n // __location: Location<TAllRouteInfo['fullSearchSchema']>\n routeTree!: Route<TAllRouteInfo, RouteInfo>\n routesById!: RoutesById<TAllRouteInfo>\n navigateTimeout: undefined | Timeout\n nextAction: undefined | 'push' | 'replace'\n navigationPromise: undefined | Promise<void>\n\n store: Store<RouterStore<TAllRouteInfo['fullSearchSchema']>>\n startedLoadingAt = Date.now()\n resolveNavigation = () => {}\n\n constructor(options?: RouterOptions<TRouteConfig, TRouterContext>) {\n this.options = {\n defaultLoaderGcMaxAge: 5 * 60 * 1000,\n defaultLoaderMaxAge: 0,\n defaultPreloadMaxAge: 2000,\n defaultPreloadDelay: 50,\n context: undefined!,\n ...options,\n stringifySearch: options?.stringifySearch ?? defaultStringifySearch,\n parseSearch: options?.parseSearch ?? defaultParseSearch,\n fetchServerDataFn: options?.fetchServerDataFn ?? defaultFetchServerDataFn,\n }\n\n this.history = this.options?.history ?? createBrowserHistory()\n this.store = createStore(getInitialRouterState())\n this.basepath = ''\n\n this.update(options)\n\n // Allow frameworks to hook into the router creation\n this.options.createRouter?.(this)\n }\n\n reset = () => {\n this.store.setState((s) => Object.assign(s, getInitialRouterState()))\n }\n\n mount = () => {\n // Mount only does anything on the client\n if (!isServer) {\n // If the router matches are empty, load the matches\n if (!this.store.state.currentMatches.length) {\n this.load()\n }\n\n const unsubHistory = this.history.listen(() => {\n this.load(this.#parseLocation(this.store.state.latestLocation))\n })\n\n const visibilityChangeEvent = 'visibilitychange'\n const focusEvent = 'focus'\n\n // addEventListener does not exist in React Native, but window does\n // In the future, we might need to invert control here for more adapters\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (window.addEventListener) {\n // Listen to visibilitychange and focus\n window.addEventListener(visibilityChangeEvent, this.#onFocus, false)\n window.addEventListener(focusEvent, this.#onFocus, false)\n }\n\n return () => {\n unsubHistory()\n if (window.removeEventListener) {\n // Be sure to unsubscribe if a new handler is set\n\n window.removeEventListener(visibilityChangeEvent, this.#onFocus)\n window.removeEventListener(focusEvent, this.#onFocus)\n }\n }\n }\n\n return () => {}\n }\n\n update = <\n TRouteConfig extends RouteConfig = RouteConfig,\n TAllRouteInfo extends AnyAllRouteInfo = AllRouteInfo<TRouteConfig>,\n TRouterContext = unknown,\n >(\n opts?: RouterOptions<TRouteConfig, TRouterContext>,\n ): Router<TRouteConfig, TAllRouteInfo, TRouterContext> => {\n if (!this.store.state.latestLocation) {\n this.store.setState((s) => {\n s.latestLocation = this.#parseLocation()\n s.currentLocation = s.latestLocation\n })\n }\n\n Object.assign(this.options, opts)\n\n const { basepath, routeConfig } = this.options\n\n this.basepath = `/${trimPath(basepath ?? '') ?? ''}`\n\n if (routeConfig) {\n this.routesById = {} as any\n this.routeTree = this.#buildRouteTree(routeConfig)\n }\n\n return this as any\n }\n\n buildNext = (opts: BuildNextOptions) => {\n const next = this.#buildLocation(opts)\n\n const matches = this.matchRoutes(next.pathname)\n\n const __preSearchFilters = matches\n .map((match) => match.route.options.preSearchFilters ?? [])\n .flat()\n .filter(Boolean)\n\n const __postSearchFilters = matches\n .map((match) => match.route.options.postSearchFilters ?? [])\n .flat()\n .filter(Boolean)\n\n return this.#buildLocation({\n ...opts,\n __preSearchFilters,\n __postSearchFilters,\n })\n }\n\n cancelMatches = () => {\n ;[\n ...this.store.state.currentMatches,\n ...(this.store.state.pendingMatches || []),\n ].forEach((match) => {\n match.cancel()\n })\n }\n\n load = async (next?: ParsedLocation) => {\n let now = Date.now()\n const startedAt = now\n this.startedLoadingAt = startedAt\n\n // Cancel any pending matches\n this.cancelMatches()\n\n let matches!: RouteMatch<any, any>[]\n\n batch(() => {\n if (next) {\n // Ingest the new location\n this.store.setState((s) => {\n s.latestLocation = next\n })\n }\n\n // Match the routes\n matches = this.matchRoutes(this.store.state.latestLocation.pathname, {\n strictParseParams: true,\n })\n\n this.store.setState((s) => {\n s.status = 'loading'\n s.pendingMatches = matches\n s.pendingLocation = this.store.state.latestLocation\n })\n })\n\n // Load the matches\n try {\n await this.loadMatches(matches)\n } catch (err: any) {\n console.warn(err)\n invariant(\n false,\n 'Matches failed to load due to error above ☝️. Navigation cancelled!',\n )\n }\n\n if (this.startedLoadingAt !== startedAt) {\n // Ignore side-effects of outdated side-effects\n return this.navigationPromise\n }\n\n const previousMatches = this.store.state.currentMatches\n\n const exiting: RouteMatch[] = [],\n staying: RouteMatch[] = []\n\n previousMatches.forEach((d) => {\n if (matches.find((dd) => dd.id === d.id)) {\n staying.push(d)\n } else {\n exiting.push(d)\n }\n })\n\n const entering = matches.filter((d) => {\n return !previousMatches.find((dd) => dd.id === d.id)\n })\n\n now = Date.now()\n\n exiting.forEach((d) => {\n d.__onExit?.({\n params: d.params,\n search: d.store.state.routeSearch,\n })\n\n // Clear non-loading error states when match leaves\n if (d.store.state.status === 'error' && !d.store.state.isFetching) {\n d.store.setState((s) => {\n s.status = 'idle'\n s.error = undefined\n })\n }\n\n const gc = Math.max(\n d.route.options.loaderGcMaxAge ??\n this.options.defaultLoaderGcMaxAge ??\n 0,\n d.route.options.loaderMaxAge ?? this.options.defaultLoaderMaxAge ?? 0,\n )\n\n if (gc > 0) {\n this.store.setState((s) => {\n s.matchCache[d.id] = {\n gc: gc == Infinity ? Number.MAX_SAFE_INTEGER : now + gc,\n match: d,\n }\n })\n }\n })\n\n staying.forEach((d) => {\n d.route.options.onTransition?.({\n params: d.params,\n search: d.store.state.routeSearch,\n })\n })\n\n entering.forEach((d) => {\n d.__onExit = d.route.options.onLoaded?.({\n params: d.params,\n search: d.store.state.search,\n })\n delete this.store.state.matchCache[d.id]\n })\n\n this.store.setState((s) => {\n Object.assign(s, {\n status: 'idle',\n currentLocation: this.store.state.latestLocation,\n currentMatches: matches,\n pendingLocation: undefined,\n pendingMatches: undefined,\n })\n })\n\n this.options.onRouteChange?.()\n\n this.resolveNavigation()\n }\n\n cleanMatchCache = () => {\n const now = Date.now()\n\n this.store.setState((s) => {\n Object.keys(s.matchCache).forEach((matchId) => {\n const entry = s.matchCache[matchId]!\n\n // Don't remove loading matches\n if (entry.match.store.state.status === 'loading') {\n return\n }\n\n // Do not remove successful matches that are still valid\n if (entry.gc > 0 && entry.gc > now) {\n return\n }\n\n // Everything else gets removed\n delete s.matchCache[matchId]\n })\n })\n }\n\n getRoute = <TId extends keyof TAllRouteInfo['routeInfoById']>(\n id: TId,\n ): Route<TAllRouteInfo, TAllRouteInfo['routeInfoById'][TId]> => {\n const route = this.routesById[id]\n\n invariant(route, `Route with id \"${id as string}\" not found`)\n\n return route\n }\n\n loadRoute = async (\n navigateOpts: BuildNextOptions = this.store.state.latestLocation,\n ): Promise<RouteMatch[]> => {\n const next = this.buildNext(navigateOpts)\n const matches = this.matchRoutes(next.pathname, {\n strictParseParams: true,\n })\n await this.loadMatches(matches)\n return matches\n }\n\n preloadRoute = async (\n navigateOpts: BuildNextOptions = this.store.state.latestLocation,\n loaderOpts: { maxAge?: number; gcMaxAge?: number },\n ) => {\n const next = this.buildNext(navigateOpts)\n const matches = this.matchRoutes(next.pathname, {\n strictParseParams: true,\n })\n\n await this.loadMatches(matches, {\n preload: true,\n maxAge:\n loaderOpts.maxAge ??\n this.options.defaultPreloadMaxAge ??\n this.options.defaultLoaderMaxAge ??\n 0,\n gcMaxAge:\n loaderOpts.gcMaxAge ??\n this.options.defaultPreloadGcMaxAge ??\n this.options.defaultLoaderGcMaxAge ??\n 0,\n })\n return matches\n }\n\n matchRoutes = (pathname: string, opts?: { strictParseParams?: boolean }) => {\n const matches: RouteMatch[] = []\n\n if (!this.routeTree) {\n return matches\n }\n\n const existingMatches = [\n ...this.store.state.currentMatches,\n ...(this.store.state.pendingMatches ?? []),\n ]\n\n const recurse = async (routes: Route<any, any>[]): Promise<void> => {\n const parentMatch = last(matches)\n let params = parentMatch?.params ?? {}\n\n const filteredRoutes = this.options.filterRoutes?.(routes) ?? routes\n\n let foundRoutes: Route[] = []\n\n const findMatchInRoutes = (parentRoutes: Route[], routes: Route[]) => {\n routes.some((route) => {\n if (!route.path && route.childRoutes?.length) {\n return findMatchInRoutes([...foundRoutes, route], route.childRoutes)\n }\n\n const fuzzy = !!(route.path !== '/' || route.childRoutes?.length)\n\n const matchParams = matchPathname(this.basepath, pathname, {\n to: route.fullPath,\n fuzzy,\n caseSensitive:\n route.options.caseSensitive ?? this.options.caseSensitive,\n })\n\n if (matchParams) {\n let parsedParams\n\n try {\n parsedParams =\n route.options.parseParams?.(matchParams!) ?? matchParams\n } catch (err) {\n if (opts?.strictParseParams) {\n throw err\n }\n }\n\n params = {\n ...params,\n ...parsedParams,\n }\n }\n\n if (!!matchParams) {\n foundRoutes = [...parentRoutes, route]\n }\n\n return !!foundRoutes.length\n })\n\n return !!foundRoutes.length\n }\n\n findMatchInRoutes([], filteredRoutes)\n\n if (!foundRoutes.length) {\n return\n }\n\n foundRoutes.forEach((foundRoute) => {\n const interpolatedPath = interpolatePath(foundRoute.path, params)\n const matchId = interpolatePath(foundRoute.id, params, true)\n\n const match =\n existingMatches.find((d) => d.id === matchId) ||\n this.store.state.matchCache[matchId]?.match ||\n new RouteMatch(this, foundRoute, {\n matchId,\n params,\n pathname: joinPaths([this.basepath, interpolatedPath]),\n })\n\n matches.push(match)\n })\n\n const foundRoute = last(foundRoutes)!\n\n if (foundRoute.childRoutes?.length) {\n recurse(foundRoute.childRoutes)\n }\n }\n\n recurse([this.routeTree])\n\n linkMatches(matches)\n\n return matches\n }\n\n loadMatches = async (\n resolvedMatches: RouteMatch[],\n loaderOpts?:\n | { preload: true; maxAge: number; gcMaxAge: number }\n | { preload?: false; maxAge?: never; gcMaxAge?: never },\n ) => {\n this.cleanMatchCache()\n resolvedMatches.forEach(async (match) => {\n // Validate the match (loads search params etc)\n match.__validate()\n })\n\n // Check each match middleware to see if the route can be accessed\n await Promise.all(\n resolvedMatches.map(async (match) => {\n try {\n await match.route.options.beforeLoad?.({\n router: this as any,\n match,\n })\n } catch (err) {\n if (!loaderOpts?.preload) {\n match.route.options.onLoadError?.(err)\n }\n\n throw err\n }\n }),\n )\n\n const matchPromises = resolvedMatches.map(async (match, index) => {\n const prevMatch = resolvedMatches[(index = 1)]\n const search = match.store.state.search as { __data?: any }\n\n if (search.__data?.matchId && search.__data.matchId !== match.id) {\n return\n }\n\n match.load(loaderOpts)\n\n if (match.store.state.status !== 'success' && match.__loadPromise) {\n // Wait for the first sign of activity from the match\n await match.__loadPromise\n }\n\n if (prevMatch) {\n await prevMatch.__loadPromise\n }\n })\n\n await Promise.all(matchPromises)\n }\n\n loadMatchData = async (\n routeMatch: RouteMatch<any, any>,\n ): Promise<Record<string, unknown>> => {\n if (isServer || !this.options.useServerData) {\n return (\n (await routeMatch.route.options.loader?.({\n // parentLoaderPromise: routeMatch.parentMatch.dataPromise,\n params: routeMatch.params,\n search: routeMatch.store.state.routeSearch,\n signal: routeMatch.abortController.signal,\n })) || {}\n )\n } else {\n // Refresh:\n // '/dashboard'\n // '/dashboard/invoices/'\n // '/dashboard/invoices/123'\n\n // New:\n // '/dashboard/invoices/456'\n\n // TODO: batch requests when possible\n\n return this.options.fetchServerDataFn!({ router: this, routeMatch })\n }\n }\n\n invalidateRoute = async (opts: MatchLocation) => {\n const next = this.buildNext(opts)\n const unloadedMatchIds = this.matchRoutes(next.pathname).map((d) => d.id)\n\n await Promise.allSettled(\n [\n ...this.store.state.currentMatches,\n ...(this.store.state.pendingMatches ?? []),\n ].map(async (match) => {\n if (unloadedMatchIds.includes(match.id)) {\n return match.invalidate()\n }\n }),\n )\n }\n\n reload = () => {\n this.navigate({\n fromCurrent: true,\n replace: true,\n search: true,\n } as any)\n }\n\n resolvePath = (from: string, path: string) => {\n return resolvePath(this.basepath!, from, cleanPath(path))\n }\n\n navigate = async <\n TFrom extends ValidFromPath<TAllRouteInfo> = '/',\n TTo extends string = '.',\n >({\n from,\n to = '.' as any,\n search,\n hash,\n replace,\n params,\n }: NavigateOptions<TAllRouteInfo, TFrom, TTo>) => {\n // If this link simply reloads the current route,\n // make sure it has a new key so it will trigger a data refresh\n\n // If this `to` is a valid external URL, return\n // null for LinkUtils\n const toString = String(to)\n const fromString = String(from)\n\n let isExternal\n\n try {\n new URL(`${toString}`)\n isExternal = true\n } catch (e) {}\n\n invariant(\n !isExternal,\n 'Attempting to navigate to external url with this.navigate!',\n )\n\n return this.#commitLocation({\n from: fromString,\n to: toString,\n search,\n hash,\n replace,\n params,\n })\n }\n\n matchRoute = <\n TFrom extends ValidFromPath<TAllRouteInfo> = '/',\n TTo extends string = '.',\n >(\n location: ToOptions<TAllRouteInfo, TFrom, TTo>,\n opts?: MatchRouteOptions,\n ):\n | false\n | TAllRouteInfo['routeInfoById'][ResolveRelativePath<\n TFrom,\n NoInfer<TTo>\n >]['allParams'] => {\n location = {\n ...location,\n to: location.to\n ? this.resolvePath(location.from ?? '', location.to)\n : undefined,\n }\n\n const next = this.buildNext(location)\n\n if (opts?.pending) {\n if (!this.store.state.pendingLocation) {\n return false\n }\n\n return matchPathname(\n this.basepath,\n this.store.state.pendingLocation!.pathname,\n {\n ...opts,\n to: next.pathname,\n },\n ) as any\n }\n\n return matchPathname(\n this.basepath,\n this.store.state.currentLocation.pathname,\n {\n ...opts,\n to: next.pathname,\n },\n ) as any\n }\n\n buildLink = <\n TFrom extends ValidFromPath<TAllRouteInfo> = '/',\n TTo extends string = '.',\n >({\n from,\n to = '.' as any,\n search,\n params,\n hash,\n target,\n replace,\n activeOptions,\n preload,\n preloadMaxAge: userPreloadMaxAge,\n preloadGcMaxAge: userPreloadGcMaxAge,\n preloadDelay: userPreloadDelay,\n disabled,\n }: LinkOptions<TAllRouteInfo, TFrom, TTo>): LinkInfo => {\n // If this link simply reloads the current route,\n // make sure it has a new key so it will trigger a data refresh\n\n // If this `to` is a valid external URL, return\n // null for LinkUtils\n\n try {\n new URL(`${to}`)\n return {\n type: 'external',\n href: to,\n }\n } catch (e) {}\n\n const nextOpts = {\n from,\n to,\n search,\n params,\n hash,\n replace,\n }\n\n const next = this.buildNext(nextOpts)\n\n preload = preload ?? this.options.defaultPreload\n const preloadDelay =\n userPreloadDelay ?? this.options.defaultPreloadDelay ?? 0\n\n // Compare path/hash for matches\n const pathIsEqual =\n this.store.state.currentLocation.pathname === next.pathname\n const currentPathSplit =\n this.store.state.currentLocation.pathname.split('/')\n const nextPathSplit = next.pathname.split('/')\n const pathIsFuzzyEqual = nextPathSplit.every(\n (d, i) => d === currentPathSplit[i],\n )\n const hashIsEqual = this.store.state.currentLocation.hash === next.hash\n // Combine the matches based on user options\n const pathTest = activeOptions?.exact ? pathIsEqual : pathIsFuzzyEqual\n const hashTest = activeOptions?.includeHash ? hashIsEqual : true\n\n // The final \"active\" test\n const isActive = pathTest && hashTest\n\n // The click handler\n const handleClick = (e: MouseEvent) => {\n if (\n !disabled &&\n !isCtrlEvent(e) &&\n !e.defaultPrevented &&\n (!target || target === '_self') &&\n e.button === 0\n ) {\n e.preventDefault()\n if (pathIsEqual && !search && !hash) {\n this.invalidateRoute(nextOpts)\n }\n\n // All is well? Navigate!\n this.#commitLocation(nextOpts as any)\n }\n }\n\n // The click handler\n const handleFocus = (e: MouseEvent) => {\n if (preload) {\n this.preloadRoute(nextOpts, {\n maxAge: userPreloadMaxAge,\n gcMaxAge: userPreloadGcMaxAge,\n }).catch((err) => {\n console.warn(err)\n console.warn('Error preloading route! ☝️')\n })\n }\n }\n\n const handleEnter = (e: MouseEvent) => {\n const target = (e.target || {}) as LinkCurrentTargetElement\n\n if (preload) {\n if (target.preloadTimeout) {\n return\n }\n\n target.preloadTimeout = setTimeout(() => {\n target.preloadTimeout = null\n this.preloadRoute(nextOpts, {\n maxAge: userPreloadMaxAge,\n gcMaxAge: userPreloadGcMaxAge,\n }).catch((err) => {\n console.warn(err)\n console.warn('Error preloading route! ☝️')\n })\n }, preloadDelay)\n }\n }\n\n const handleLeave = (e: MouseEvent) => {\n const target = (e.target || {}) as LinkCurrentTargetElement\n\n if (target.preloadTimeout) {\n clearTimeout(target.preloadTimeout)\n target.preloadTimeout = null\n }\n }\n\n return {\n type: 'internal',\n next,\n handleFocus,\n handleClick,\n handleEnter,\n handleLeave,\n isActive,\n disabled,\n }\n }\n\n dehydrate = (): DehydratedRouter<TRouterContext> => {\n return {\n state: {\n ...pick(this.store.state, [\n 'latestLocation',\n 'currentLocation',\n 'status',\n 'lastUpdated',\n ]),\n currentMatches: this.store.state.currentMatches.map((match) => ({\n matchId: match.id,\n state: {\n ...pick(match.store.state, [\n 'status',\n 'routeLoaderData',\n 'invalidAt',\n 'invalid',\n ]),\n },\n })),\n },\n context: this.options.context as TRouterContext,\n }\n }\n\n hydrate = (dehydratedRouter: DehydratedRouter<TRouterContext>) => {\n this.store.setState((s) => {\n // Update the context TODO: make this part of state?\n this.options.context = dehydratedRouter.context\n\n // Match the routes\n const currentMatches = this.matchRoutes(\n dehydratedRouter.state.latestLocation.pathname,\n {\n strictParseParams: true,\n },\n )\n\n currentMatches.forEach((match, index) => {\n const dehydratedMatch = dehydratedRouter.state.currentMatches[index]\n invariant(\n dehydratedMatch && dehydratedMatch.matchId === match.id,\n 'Oh no! There was a hydration mismatch when attempting to rethis.store the state of the router! 😬',\n )\n Object.assign(match, dehydratedMatch)\n })\n\n currentMatches.forEach((match) => match.__validate())\n\n Object.assign(s, { ...dehydratedRouter.state, currentMatches })\n })\n }\n\n getLoader = <TFrom extends keyof TAllRouteInfo['routeInfoById'] = '/'>(opts: {\n from: TFrom\n }): unknown extends TAllRouteInfo['routeInfoById'][TFrom]['routeLoaderData']\n ?\n | Loader<\n LoaderContext<\n TAllRouteInfo['routeInfoById'][TFrom]['fullSearchSchema'],\n TAllRouteInfo['routeInfoById'][TFrom]['allParams']\n >,\n TAllRouteInfo['routeInfoById'][TFrom]['routeLoaderData']\n >\n | undefined\n : Loader<\n TAllRouteInfo['routeInfoById'][TFrom]['fullSearchSchema'],\n TAllRouteInfo['routeInfoById'][TFrom]['allParams'],\n TAllRouteInfo['routeInfoById'][TFrom]['routeLoaderData']\n > => {\n const id = opts.from || ('/' as any)\n\n const route = this.getRoute(id)\n\n if (!route) return undefined as any\n\n let loader =\n this.store.state.loaders[id] ||\n (() => {\n this.store.setState((s) => {\n s.loaders[id] = {\n pending: [],\n fetch: (async (loaderContext: LoaderContext<any, any>) => {\n if (!route) {\n return\n }\n const loaderState: LoaderState<any, any> = {\n loadedAt: Date.now(),\n loaderContext,\n }\n this.store.setState((s) => {\n s.loaders[id]!.current = loaderState\n s.loaders[id]!.latest = loaderState\n s.loaders[id]!.pending.push(loaderState)\n })\n try {\n return await route.options.loader?.(loaderContext)\n } finally {\n this.store.setState((s) => {\n s.loaders[id]!.pending = s.loaders[id]!.pending.filter(\n (d) => d !== loaderState,\n )\n })\n }\n }) as any,\n }\n })\n return this.store.state.loaders[id]!\n })()\n\n return loader as any\n }\n\n #buildRouteTree = (rootRouteConfig: RouteConfig) => {\n const recurseRoutes = (\n routeConfigs: RouteConfig[],\n parent?: Route<TAllRouteInfo, any, any>,\n ): Route<TAllRouteInfo, any, any>[] => {\n return routeConfigs.map((routeConfig, i) => {\n const routeOptions = routeConfig.options\n const route = new Route(routeConfig, routeOptions, i, parent, this)\n const existingRoute = (this.routesById as any)[route.id]\n\n if (existingRoute) {\n if (process.env.NODE_ENV !== 'production') {\n console.warn(\n `Duplicate routes found with id: ${String(route.id)}`,\n this.routesById,\n route,\n )\n }\n throw new Error()\n }\n\n ;(this.routesById as any)[route.id] = route\n\n const children = routeConfig.children as RouteConfig[]\n\n route.childRoutes = children.length\n ? recurseRoutes(children, route)\n : undefined\n\n return route\n })\n }\n\n const routes = recurseRoutes([rootRouteConfig])\n\n return routes[0]!\n }\n\n #parseLocation = (previousLocation?: ParsedLocation): ParsedLocation => {\n let { pathname, search, hash, state } = this.history.location\n\n const parsedSearch = this.options.parseSearch(search)\n\n return {\n pathname: pathname,\n searchStr: search,\n search: replaceEqualDeep(previousLocation?.search, parsedSearch),\n hash: hash.split('#').reverse()[0] ?? '',\n href: `${pathname}${search}${hash}`,\n state: state as LocationState,\n key: state?.key || '__init__',\n }\n }\n\n #onFocus = () => {\n this.load()\n }\n\n #buildLocation = (dest: BuildNextOptions = {}): ParsedLocation => {\n const fromPathname = dest.fromCurrent\n ? this.store.state.latestLocation.pathname\n : dest.from ?? this.store.state.latestLocation.pathname\n\n let pathname = resolvePath(\n this.basepath ?? '/',\n fromPathname,\n `${dest.to ?? '.'}`,\n )\n\n const fromMatches = this.matchRoutes(\n this.store.state.latestLocation.pathname,\n {\n strictParseParams: true,\n },\n )\n\n const toMatches = this.matchRoutes(pathname)\n\n const prevParams = { ...last(fromMatches)?.params }\n\n let nextParams =\n (dest.params ?? true) === true\n ? prevParams\n : functionalUpdate(dest.params!, prevParams)\n\n if (nextParams) {\n toMatches\n .map((d) => d.route.options.stringifyParams)\n .filter(Boolean)\n .forEach((fn) => {\n Object.assign({}, nextParams!, fn!(nextParams!))\n })\n }\n\n pathname = interpolatePath(pathname, nextParams ?? {})\n\n // Pre filters first\n const preFilteredSearch = dest.__preSearchFilters?.length\n ? dest.__preSearchFilters?.reduce(\n (prev, next) => next(prev),\n this.store.state.latestLocation.search,\n )\n : this.store.state.latestLocation.search\n\n // Then the link/navigate function\n const destSearch =\n dest.search === true\n ? preFilteredSearch // Preserve resolvedFrom true\n : dest.search\n ? functionalUpdate(dest.search, preFilteredSearch) ?? {} // Updater\n : dest.__preSearchFilters?.length\n ? preFilteredSearch // Preserve resolvedFrom filters\n : {}\n\n // Then post filters\n const postFilteredSearch = dest.__postSearchFilters?.length\n ? dest.__postSearchFilters.reduce((prev, next) => next(prev), destSearch)\n : destSearch\n\n const search = replaceEqualDeep(\n this.store.state.latestLocation.search,\n postFilteredSearch,\n )\n\n const searchStr = this.options.stringifySearch(search)\n let hash =\n dest.hash === true\n ? this.store.state.latestLocation.hash\n : functionalUpdate(dest.hash!, this.store.state.latestLocation.hash)\n hash = hash ? `#${hash}` : ''\n\n return {\n pathname,\n search,\n searchStr,\n state: this.store.state.latestLocation.state,\n hash,\n href: `${pathname}${searchStr}${hash}`,\n key: dest.key,\n }\n }\n\n #commitLocation = (location: BuildNextOptions & { replace?: boolean }) => {\n const next = this.buildNext(location)\n const id = '' + Date.now() + Math.random()\n\n if (this.navigateTimeout) clearTimeout(this.navigateTimeout)\n\n let nextAction: 'push' | 'replace' = 'replace'\n\n if (!location.replace) {\n nextAction = 'push'\n }\n\n const isSameUrl = this.store.state.latestLocation.href === next.href\n\n if (isSameUrl && !next.key) {\n nextAction = 'replace'\n }\n\n const href = `${next.pathname}${next.searchStr}${\n next.hash ? `#${next.hash}` : ''\n }`\n\n this.history[nextAction === 'push' ? 'push' : 'replace'](href, {\n id,\n ...next.state,\n })\n\n this.load(this.#parseLocation(this.store.state.latestLocation))\n\n return (this.navigationPromise = new Promise((resolve) => {\n const previousNavigationResolve = this.resolveNavigation\n\n this.resolveNavigation = () => {\n previousNavigationResolve()\n resolve()\n }\n }))\n }\n}\n\n// Detect if we're in the DOM\nconst isServer = typeof window === 'undefined' || !window.document.createElement\n\nfunction getInitialRouterState(): RouterStore {\n return {\n status: 'idle',\n latestLocation: null!,\n currentLocation: null!,\n currentMatches: [],\n loaders: {},\n lastUpdated: Date.now(),\n matchCache: {},\n get isFetching() {\n return (\n this.status === 'loading' ||\n this.currentMatches.some((d) => d.store.state.isFetching)\n )\n },\n get isPreloading() {\n return Object.values(this.matchCache).some(\n (d) =>\n d.match.store.state.isFetching &&\n !this.currentMatches.find((dd) => dd.id === d.match.id),\n )\n },\n }\n}\n\nfunction isCtrlEvent(e: MouseEvent) {\n return !!(e.metaKey || e.altKey || e.ctrlKey || e.shiftKey)\n}\n\nfunction linkMatches(matches: RouteMatch<any, any>[]) {\n matches.forEach((match, index) => {\n const parent = matches[index - 1]\n\n if (parent) {\n match.__setParentMatch(parent)\n }\n })\n}\n"],"names":["defaultFetchServerDataFn","router","routeMatch","next","buildNext","to","search","d","__data","matchId","id","res","fetch","href","method","signal","abortController","ok","json","Error","Router","startedLoadingAt","Date","now","resolveNavigation","constructor","options","defaultLoaderGcMaxAge","defaultLoaderMaxAge","defaultPreloadMaxAge","defaultPreloadDelay","context","undefined","stringifySearch","defaultStringifySearch","parseSearch","defaultParseSearch","fetchServerDataFn","history","createBrowserHistory","store","createStore","getInitialRouterState","basepath","update","createRouter","reset","setState","s","Object","assign","mount","isServer","state","currentMatches","length","load","unsubHistory","listen","latestLocation","visibilityChangeEvent","focusEvent","window","addEventListener","removeEventListener","opts","currentLocation","routeConfig","trimPath","routesById","routeTree","matches","matchRoutes","pathname","__preSearchFilters","map","match","route","preSearchFilters","flat","filter","Boolean","__postSearchFilters","postSearchFilters","cancelMatches","pendingMatches","forEach","cancel","startedAt","batch","strictParseParams","status","pendingLocation","loadMatches","err","console","warn","invariant","navigationPromise","previousMatches","exiting","staying","find","dd","push","entering","__onExit","params","routeSearch","isFetching","error","gc","Math","max","loaderGcMaxAge","loaderMaxAge","matchCache","Infinity","Number","MAX_SAFE_INTEGER","onTransition","onLoaded","onRouteChange","cleanMatchCache","keys","entry","getRoute","loadRoute","navigateOpts","preloadRoute","loaderOpts","preload","maxAge","gcMaxAge","defaultPreloadGcMaxAge","existingMatches","recurse","routes","parentMatch","last","filteredRoutes","filterRoutes","foundRoutes","findMatchInRoutes","parentRoutes","some","path","childRoutes","fuzzy","matchParams","matchPathname","fullPath","caseSensitive","parsedParams","parseParams","foundRoute","interpolatedPath","interpolatePath","RouteMatch","joinPaths","linkMatches","resolvedMatches","__validate","Promise","all","beforeLoad","onLoadError","matchPromises","index","prevMatch","__loadPromise","loadMatchData","useServerData","loader","invalidateRoute","unloadedMatchIds","allSettled","includes","invalidate","reload","navigate","fromCurrent","replace","resolvePath","from","cleanPath","hash","toString","String","fromString","isExternal","URL","e","matchRoute","location","pending","buildLink","target","activeOptions","preloadMaxAge","userPreloadMaxAge","preloadGcMaxAge","userPreloadGcMaxAge","preloadDelay","userPreloadDelay","disabled","type","nextOpts","defaultPreload","pathIsEqual","currentPathSplit","split","nextPathSplit","pathIsFuzzyEqual","every","i","hashIsEqual","pathTest","exact","hashTest","includeHash","isActive","handleClick","isCtrlEvent","defaultPrevented","button","preventDefault","handleFocus","catch","handleEnter","preloadTimeout","setTimeout","handleLeave","clearTimeout","dehydrate","pick","hydrate","dehydratedRouter","dehydratedMatch","getLoader","loaders","loaderContext","loaderState","loadedAt","current","latest","rootRouteConfig","recurseRoutes","routeConfigs","parent","routeOptions","Route","existingRoute","process","env","NODE_ENV","children","previousLocation","parsedSearch","searchStr","replaceEqualDeep","reverse","key","dest","fromPathname","fromMatches","toMatches","prevParams","nextParams","functionalUpdate","stringifyParams","fn","preFilteredSearch","reduce","prev","destSearch","postFilteredSearch","random","navigateTimeout","nextAction","isSameUrl","resolve","previousNavigationResolve","document","createElement","lastUpdated","isPreloading","values","metaKey","altKey","ctrlKey","shiftKey","__setParentMatch"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"router.js","sources":["../../src/router.ts"],"sourcesContent":["import invariant from 'tiny-invariant'\nimport { GetFrameworkGeneric } from './frameworks'\n\nimport {\n LinkInfo,\n LinkOptions,\n NavigateOptions,\n ToOptions,\n ValidFromPath,\n ResolveRelativePath,\n} from './link'\nimport {\n cleanPath,\n interpolatePath,\n joinPaths,\n matchPathname,\n resolvePath,\n trimPath,\n} from './path'\nimport { AnyRoute, Route } from './route'\nimport {\n AnyLoaderData,\n AnyPathParams,\n AnyRouteConfig,\n AnySearchSchema,\n LoaderContext,\n RouteConfig,\n SearchFilter,\n} from './routeConfig'\nimport {\n AllRouteInfo,\n AnyAllRouteInfo,\n RouteInfo,\n RoutesById,\n} from './routeInfo'\nimport { RouteMatch, RouteMatchStore } from './routeMatch'\nimport { defaultParseSearch, defaultStringifySearch } from './searchParams'\nimport { createStore, batch, Store } from './store'\nimport {\n functionalUpdate,\n last,\n NoInfer,\n pick,\n PickAsRequired,\n PickRequired,\n Timeout,\n Updater,\n} from './utils'\nimport { replaceEqualDeep } from './interop'\nimport {\n createBrowserHistory,\n createMemoryHistory,\n RouterHistory,\n} from './history'\nimport { createMemo } from '@solidjs/reactivity'\n\nexport interface RegisterRouter {\n // router: Router\n}\n\nexport type AnyRouter = Router<any, any, any>\n\nexport type RegisteredRouter = RegisterRouter extends {\n router: Router<infer TRouteConfig, infer TAllRouteInfo, infer TRouterContext>\n}\n ? Router<TRouteConfig, TAllRouteInfo, TRouterContext>\n : Router\n\nexport type RegisteredAllRouteInfo = RegisterRouter extends {\n router: Router<infer TRouteConfig, infer TAllRouteInfo, infer TRouterContext>\n}\n ? TAllRouteInfo\n : AnyAllRouteInfo\n\nexport interface LocationState {}\n\nexport interface ParsedLocation<\n TSearchObj extends AnySearchSchema = {},\n TState extends LocationState = LocationState,\n> {\n href: string\n pathname: string\n search: TSearchObj\n searchStr: string\n state: TState\n hash: string\n key?: string\n}\n\nexport interface FromLocation {\n pathname: string\n search?: unknown\n key?: string\n hash?: string\n}\n\nexport type SearchSerializer = (searchObj: Record<string, any>) => string\nexport type SearchParser = (searchStr: string) => Record<string, any>\nexport type FilterRoutesFn = <TRoute extends Route<any, RouteInfo>>(\n routeConfigs: TRoute[],\n) => TRoute[]\n\nexport interface RouterOptions<\n TRouteConfig extends AnyRouteConfig,\n TRouterContext,\n> {\n history?: RouterHistory\n stringifySearch?: SearchSerializer\n parseSearch?: SearchParser\n filterRoutes?: FilterRoutesFn\n defaultPreload?: false | 'intent'\n defaultPreloadMaxAge?: number\n defaultPreloadGcMaxAge?: number\n defaultPreloadDelay?: number\n defaultComponent?: GetFrameworkGeneric<'Component'>\n defaultErrorComponent?: GetFrameworkGeneric<'ErrorComponent'>\n defaultPendingComponent?: GetFrameworkGeneric<'Component'>\n defaultLoaderMaxAge?: number\n defaultLoaderGcMaxAge?: number\n caseSensitive?: boolean\n routeConfig?: TRouteConfig\n basepath?: string\n useServerData?: boolean\n Router?: (router: AnyRouter) => void\n createRoute?: (opts: { route: AnyRoute; router: AnyRouter }) => void\n context?: TRouterContext\n loadComponent?: (\n component: GetFrameworkGeneric<'Component'>,\n ) => Promise<GetFrameworkGeneric<'Component'>>\n onRouteChange?: () => void\n fetchServerDataFn?: FetchServerDataFn\n}\n\ntype FetchServerDataFn = (ctx: {\n router: AnyRouter\n routeMatch: RouteMatch\n}) => Promise<any>\n\nexport interface Loader<\n TFullSearchSchema extends AnySearchSchema = {},\n TAllParams extends AnyPathParams = {},\n TRouteLoaderData = AnyLoaderData,\n> {\n fetch: keyof PickRequired<TFullSearchSchema> extends never\n ? keyof TAllParams extends never\n ? (loaderContext: { signal?: AbortSignal }) => Promise<TRouteLoaderData>\n : (loaderContext: {\n params: TAllParams\n search?: TFullSearchSchema\n signal?: AbortSignal\n }) => Promise<TRouteLoaderData>\n : keyof TAllParams extends never\n ? (loaderContext: {\n search: TFullSearchSchema\n params: TAllParams\n signal?: AbortSignal\n }) => Promise<TRouteLoaderData>\n : (loaderContext: {\n search: TFullSearchSchema\n signal?: AbortSignal\n }) => Promise<TRouteLoaderData>\n current?: LoaderState<TFullSearchSchema, TAllParams>\n latest?: LoaderState<TFullSearchSchema, TAllParams>\n pending: LoaderState<TFullSearchSchema, TAllParams>[]\n}\n\nexport interface LoaderState<\n TFullSearchSchema extends AnySearchSchema = {},\n TAllParams extends AnyPathParams = {},\n> {\n loadedAt: number\n loaderContext: LoaderContext<TFullSearchSchema, TAllParams>\n}\n\nexport interface RouterStore<\n TSearchObj extends AnySearchSchema = {},\n TState extends LocationState = LocationState,\n> {\n status: 'idle' | 'loading'\n latestLocation: ParsedLocation<TSearchObj, TState>\n currentMatches: RouteMatch[]\n currentLocation: ParsedLocation<TSearchObj, TState>\n pendingMatches?: RouteMatch[]\n pendingLocation?: ParsedLocation<TSearchObj, TState>\n lastUpdated: number\n loaders: Record<string, Loader>\n isFetching: boolean\n isPreloading: boolean\n matchCache: Record<string, MatchCacheEntry>\n}\n\nexport type ListenerFn = () => void\n\nexport interface BuildNextOptions {\n to?: string | number | null\n params?: true | Updater<unknown>\n search?: true | Updater<unknown>\n hash?: true | Updater<string>\n state?: LocationState\n key?: string\n from?: string\n fromCurrent?: boolean\n __preSearchFilters?: SearchFilter<any>[]\n __postSearchFilters?: SearchFilter<any>[]\n}\n\nexport type MatchCacheEntry = {\n gc: number\n match: RouteMatch\n}\n\nexport interface MatchLocation {\n to?: string | number | null\n fuzzy?: boolean\n caseSensitive?: boolean\n from?: string\n fromCurrent?: boolean\n}\n\nexport interface MatchRouteOptions {\n pending?: boolean\n caseSensitive?: boolean\n fuzzy?: boolean\n}\n\ntype LinkCurrentTargetElement = {\n preloadTimeout?: null | ReturnType<typeof setTimeout>\n}\n\nexport interface DehydratedRouterState\n extends Pick<\n RouterStore,\n 'status' | 'latestLocation' | 'currentLocation' | 'lastUpdated'\n > {\n currentMatches: DehydratedRouteMatch[]\n}\n\nexport interface DehydratedRouter<TRouterContext = unknown> {\n // location: Router['__location']\n state: DehydratedRouterState\n context: TRouterContext\n}\n\nexport type MatchCache = Record<string, MatchCacheEntry>\n\ninterface DehydratedRouteMatch {\n id: string\n state: Pick<\n RouteMatchStore<any, any>,\n 'status' | 'routeLoaderData' | 'invalid' | 'invalidAt'\n >\n}\n\nexport interface RouterContext {}\n\nexport const defaultFetchServerDataFn: FetchServerDataFn = async ({\n router,\n routeMatch,\n}) => {\n const next = router.buildNext({\n to: '.',\n search: (d: any) => ({\n ...(d ?? {}),\n __data: {\n matchId: routeMatch.id,\n },\n }),\n })\n\n const res = await fetch(next.href, {\n method: 'GET',\n signal: routeMatch.abortController.signal,\n })\n\n if (res.ok) {\n return res.json()\n }\n\n throw new Error('Failed to fetch match data')\n}\n\nexport class Router<\n TRouteConfig extends AnyRouteConfig = RouteConfig,\n TAllRouteInfo extends AnyAllRouteInfo = AllRouteInfo<TRouteConfig>,\n TRouterContext = unknown,\n> {\n types!: {\n // Super secret internal stuff\n RouteConfig: TRouteConfig\n AllRouteInfo: TAllRouteInfo\n }\n\n options: PickAsRequired<\n RouterOptions<TRouteConfig, TRouterContext>,\n 'stringifySearch' | 'parseSearch' | 'context'\n >\n history!: RouterHistory\n #unsubHistory?: () => void\n basepath: string\n // __location: Location<TAllRouteInfo['fullSearchSchema']>\n routeTree!: Route<TAllRouteInfo, RouteInfo>\n routesById!: RoutesById<TAllRouteInfo>\n navigateTimeout: undefined | Timeout\n nextAction: undefined | 'push' | 'replace'\n navigationPromise: undefined | Promise<void>\n\n store: Store<RouterStore<TAllRouteInfo['fullSearchSchema']>>\n startedLoadingAt = Date.now()\n resolveNavigation = () => {}\n\n constructor(options?: RouterOptions<TRouteConfig, TRouterContext>) {\n this.options = {\n defaultLoaderGcMaxAge: 5 * 60 * 1000,\n defaultLoaderMaxAge: 0,\n defaultPreloadMaxAge: 2000,\n defaultPreloadDelay: 50,\n context: undefined!,\n ...options,\n stringifySearch: options?.stringifySearch ?? defaultStringifySearch,\n parseSearch: options?.parseSearch ?? defaultParseSearch,\n fetchServerDataFn: options?.fetchServerDataFn ?? defaultFetchServerDataFn,\n }\n\n this.store = createStore(getInitialRouterState())\n this.basepath = ''\n\n this.update(options)\n\n // Allow frameworks to hook into the router creation\n this.options.Router?.(this)\n }\n\n reset = () => {\n this.store.setState((s) => Object.assign(s, getInitialRouterState()))\n }\n\n mount = () => {\n // Mount only does anything on the client\n if (!isServer) {\n // If the router matches are empty, load the matches\n if (!this.store.state.currentMatches.length) {\n this.load()\n }\n\n const visibilityChangeEvent = 'visibilitychange'\n const focusEvent = 'focus'\n\n // addEventListener does not exist in React Native, but window does\n // In the future, we might need to invert control here for more adapters\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (window.addEventListener) {\n // Listen to visibilitychange and focus\n window.addEventListener(visibilityChangeEvent, this.#onFocus, false)\n window.addEventListener(focusEvent, this.#onFocus, false)\n }\n\n return () => {\n if (window.removeEventListener) {\n // Be sure to unsubscribe if a new handler is set\n\n window.removeEventListener(visibilityChangeEvent, this.#onFocus)\n window.removeEventListener(focusEvent, this.#onFocus)\n }\n }\n }\n\n return () => {}\n }\n\n update = <\n TRouteConfig extends RouteConfig = RouteConfig,\n TAllRouteInfo extends AnyAllRouteInfo = AllRouteInfo<TRouteConfig>,\n TRouterContext = unknown,\n >(\n opts?: RouterOptions<TRouteConfig, TRouterContext>,\n ): Router<TRouteConfig, TAllRouteInfo, TRouterContext> => {\n Object.assign(this.options, opts)\n\n if (\n !this.history ||\n (this.options.history && this.options.history !== this.history)\n ) {\n if (this.#unsubHistory) {\n this.#unsubHistory()\n }\n\n this.history =\n this.options.history ??\n (isServer ? createMemoryHistory() : createBrowserHistory()!)\n\n this.store.setState((s) => {\n s.latestLocation = this.#parseLocation()\n s.currentLocation = s.latestLocation\n })\n\n this.#unsubHistory = this.history.listen(() => {\n this.load(this.#parseLocation(this.store.state.latestLocation))\n })\n }\n\n const { basepath, routeConfig } = this.options\n\n this.basepath = `/${trimPath(basepath ?? '') ?? ''}`\n\n if (routeConfig) {\n this.routesById = {} as any\n this.routeTree = this.#buildRouteTree(routeConfig)\n }\n\n return this as any\n }\n\n buildNext = (opts: BuildNextOptions) => {\n const next = this.#buildLocation(opts)\n\n const matches = this.matchRoutes(next.pathname)\n\n const __preSearchFilters = matches\n .map((match) => match.route.options.preSearchFilters ?? [])\n .flat()\n .filter(Boolean)\n\n const __postSearchFilters = matches\n .map((match) => match.route.options.postSearchFilters ?? [])\n .flat()\n .filter(Boolean)\n\n return this.#buildLocation({\n ...opts,\n __preSearchFilters,\n __postSearchFilters,\n })\n }\n\n cancelMatches = () => {\n ;[\n ...this.store.state.currentMatches,\n ...(this.store.state.pendingMatches || []),\n ].forEach((match) => {\n match.cancel()\n })\n }\n\n load = async (next?: ParsedLocation) => {\n let now = Date.now()\n const startedAt = now\n this.startedLoadingAt = startedAt\n\n // Cancel any pending matches\n this.cancelMatches()\n\n let matches!: RouteMatch<any, any>[]\n\n batch(() => {\n if (next) {\n // Ingest the new location\n this.store.setState((s) => {\n s.latestLocation = next\n })\n }\n\n // Match the routes\n matches = this.matchRoutes(this.store.state.latestLocation.pathname, {\n strictParseParams: true,\n })\n\n this.store.setState((s) => {\n s.status = 'loading'\n s.pendingMatches = matches\n s.pendingLocation = this.store.state.latestLocation\n })\n })\n\n // Load the matches\n try {\n await this.loadMatches(matches)\n } catch (err: any) {\n console.warn(err)\n invariant(\n false,\n 'Matches failed to load due to error above ☝️. Navigation cancelled!',\n )\n }\n\n if (this.startedLoadingAt !== startedAt) {\n // Ignore side-effects of outdated side-effects\n return this.navigationPromise\n }\n\n const previousMatches = this.store.state.currentMatches\n\n const exiting: RouteMatch[] = [],\n staying: RouteMatch[] = []\n\n previousMatches.forEach((d) => {\n if (matches.find((dd) => dd.id === d.id)) {\n staying.push(d)\n } else {\n exiting.push(d)\n }\n })\n\n const entering = matches.filter((d) => {\n return !previousMatches.find((dd) => dd.id === d.id)\n })\n\n now = Date.now()\n\n exiting.forEach((d) => {\n d.__onExit?.({\n params: d.params,\n search: d.store.state.routeSearch,\n })\n\n // Clear non-loading error states when match leaves\n if (d.store.state.status === 'error' && !d.store.state.isFetching) {\n d.store.setState((s) => {\n s.status = 'idle'\n s.error = undefined\n })\n }\n\n const gc = Math.max(\n d.route.options.loaderGcMaxAge ??\n this.options.defaultLoaderGcMaxAge ??\n 0,\n d.route.options.loaderMaxAge ?? this.options.defaultLoaderMaxAge ?? 0,\n )\n\n if (gc > 0) {\n this.store.setState((s) => {\n s.matchCache[d.id] = {\n gc: gc == Infinity ? Number.MAX_SAFE_INTEGER : now + gc,\n match: d,\n }\n })\n }\n })\n\n staying.forEach((d) => {\n d.route.options.onTransition?.({\n params: d.params,\n search: d.store.state.routeSearch,\n })\n })\n\n entering.forEach((d) => {\n d.__onExit = d.route.options.onLoaded?.({\n params: d.params,\n search: d.store.state.search,\n })\n delete this.store.state.matchCache[d.id]\n })\n\n this.store.setState((s) => {\n Object.assign(s, {\n status: 'idle',\n currentLocation: this.store.state.latestLocation,\n currentMatches: matches,\n pendingLocation: undefined,\n pendingMatches: undefined,\n })\n })\n\n this.options.onRouteChange?.()\n\n this.resolveNavigation()\n }\n\n cleanMatchCache = () => {\n const now = Date.now()\n\n this.store.setState((s) => {\n Object.keys(s.matchCache).forEach((matchId) => {\n const entry = s.matchCache[matchId]!\n\n // Don't remove loading matches\n if (entry.match.store.state.status === 'loading') {\n return\n }\n\n // Do not remove successful matches that are still valid\n if (entry.gc > 0 && entry.gc > now) {\n return\n }\n\n // Everything else gets removed\n delete s.matchCache[matchId]\n })\n })\n }\n\n getRoute = <TId extends keyof TAllRouteInfo['routeInfoById']>(\n id: TId,\n ): Route<TAllRouteInfo, TAllRouteInfo['routeInfoById'][TId]> => {\n const route = this.routesById[id]\n\n invariant(route, `Route with id \"${id as string}\" not found`)\n\n return route\n }\n\n loadRoute = async (\n navigateOpts: BuildNextOptions = this.store.state.latestLocation,\n ): Promise<RouteMatch[]> => {\n const next = this.buildNext(navigateOpts)\n const matches = this.matchRoutes(next.pathname, {\n strictParseParams: true,\n })\n await this.loadMatches(matches)\n return matches\n }\n\n preloadRoute = async (\n navigateOpts: BuildNextOptions = this.store.state.latestLocation,\n loaderOpts: { maxAge?: number; gcMaxAge?: number },\n ) => {\n const next = this.buildNext(navigateOpts)\n const matches = this.matchRoutes(next.pathname, {\n strictParseParams: true,\n })\n\n await this.loadMatches(matches, {\n preload: true,\n maxAge:\n loaderOpts.maxAge ??\n this.options.defaultPreloadMaxAge ??\n this.options.defaultLoaderMaxAge ??\n 0,\n gcMaxAge:\n loaderOpts.gcMaxAge ??\n this.options.defaultPreloadGcMaxAge ??\n this.options.defaultLoaderGcMaxAge ??\n 0,\n })\n return matches\n }\n\n matchRoutes = (pathname: string, opts?: { strictParseParams?: boolean }) => {\n const matches: RouteMatch[] = []\n\n if (!this.routeTree) {\n return matches\n }\n\n const existingMatches = [\n ...this.store.state.currentMatches,\n ...(this.store.state.pendingMatches ?? []),\n ]\n\n const recurse = async (routes: Route<any, any>[]): Promise<void> => {\n const parentMatch = last(matches)\n let params = parentMatch?.params ?? {}\n\n const filteredRoutes = this.options.filterRoutes?.(routes) ?? routes\n\n let foundRoutes: Route[] = []\n\n const findMatchInRoutes = (parentRoutes: Route[], routes: Route[]) => {\n routes.some((route) => {\n if (!route.path && route.childRoutes?.length) {\n return findMatchInRoutes([...foundRoutes, route], route.childRoutes)\n }\n\n const fuzzy = !!(route.path !== '/' || route.childRoutes?.length)\n\n const matchParams = matchPathname(this.basepath, pathname, {\n to: route.fullPath,\n fuzzy,\n caseSensitive:\n route.options.caseSensitive ?? this.options.caseSensitive,\n })\n\n if (matchParams) {\n let parsedParams\n\n try {\n parsedParams =\n route.options.parseParams?.(matchParams!) ?? matchParams\n } catch (err) {\n if (opts?.strictParseParams) {\n throw err\n }\n }\n\n params = {\n ...params,\n ...parsedParams,\n }\n }\n\n if (!!matchParams) {\n foundRoutes = [...parentRoutes, route]\n }\n\n return !!foundRoutes.length\n })\n\n return !!foundRoutes.length\n }\n\n findMatchInRoutes([], filteredRoutes)\n\n if (!foundRoutes.length) {\n return\n }\n\n foundRoutes.forEach((foundRoute) => {\n const interpolatedPath = interpolatePath(foundRoute.path, params)\n const matchId = interpolatePath(foundRoute.id, params, true)\n\n const match =\n existingMatches.find((d) => d.id === matchId) ||\n this.store.state.matchCache[matchId]?.match ||\n new RouteMatch(this, foundRoute, {\n id: matchId,\n params,\n pathname: joinPaths([this.basepath, interpolatedPath]),\n })\n\n matches.push(match)\n })\n\n const foundRoute = last(foundRoutes)!\n\n if (foundRoute.childRoutes?.length) {\n recurse(foundRoute.childRoutes)\n }\n }\n\n recurse([this.routeTree])\n\n linkMatches(matches)\n\n return matches\n }\n\n loadMatches = async (\n resolvedMatches: RouteMatch[],\n loaderOpts?:\n | { preload: true; maxAge: number; gcMaxAge: number }\n | { preload?: false; maxAge?: never; gcMaxAge?: never },\n ) => {\n this.cleanMatchCache()\n resolvedMatches.forEach(async (match) => {\n // Validate the match (loads search params etc)\n match.__validate()\n })\n\n // Check each match middleware to see if the route can be accessed\n await Promise.all(\n resolvedMatches.map(async (match) => {\n try {\n await match.route.options.beforeLoad?.({\n router: this as any,\n match,\n })\n } catch (err) {\n if (!loaderOpts?.preload) {\n match.route.options.onLoadError?.(err)\n }\n\n throw err\n }\n }),\n )\n\n const matchPromises = resolvedMatches.map(async (match, index) => {\n const prevMatch = resolvedMatches[(index = 1)]\n const search = match.store.state.search as { __data?: any }\n\n if (search.__data?.matchId && search.__data.matchId !== match.id) {\n return\n }\n\n match.load(loaderOpts)\n\n if (match.store.state.status !== 'success' && match.__loadPromise) {\n // Wait for the first sign of activity from the match\n await match.__loadPromise\n }\n\n if (prevMatch) {\n await prevMatch.__loadPromise\n }\n })\n\n await Promise.all(matchPromises)\n }\n\n loadMatchData = async (\n routeMatch: RouteMatch<any, any>,\n ): Promise<Record<string, unknown>> => {\n if (isServer || !this.options.useServerData) {\n return (\n (await routeMatch.route.options.loader?.({\n // parentLoaderPromise: routeMatch.parentMatch.dataPromise,\n params: routeMatch.params,\n search: routeMatch.store.state.routeSearch,\n signal: routeMatch.abortController.signal,\n })) || {}\n )\n } else {\n // Refresh:\n // '/dashboard'\n // '/dashboard/invoices/'\n // '/dashboard/invoices/123'\n\n // New:\n // '/dashboard/invoices/456'\n\n // TODO: batch requests when possible\n\n const res = await this.options.fetchServerDataFn!({\n router: this,\n routeMatch,\n })\n\n return res\n }\n }\n\n invalidateRoute = async (opts: MatchLocation) => {\n const next = this.buildNext(opts)\n const unloadedMatchIds = this.matchRoutes(next.pathname).map((d) => d.id)\n\n await Promise.allSettled(\n [\n ...this.store.state.currentMatches,\n ...(this.store.state.pendingMatches ?? []),\n ].map(async (match) => {\n if (unloadedMatchIds.includes(match.id)) {\n return match.invalidate()\n }\n }),\n )\n }\n\n reload = () => {\n this.navigate({\n fromCurrent: true,\n replace: true,\n search: true,\n } as any)\n }\n\n resolvePath = (from: string, path: string) => {\n return resolvePath(this.basepath!, from, cleanPath(path))\n }\n\n navigate = async <\n TFrom extends ValidFromPath<TAllRouteInfo> = '/',\n TTo extends string = '.',\n >({\n from,\n to = '.' as any,\n search,\n hash,\n replace,\n params,\n }: NavigateOptions<TAllRouteInfo, TFrom, TTo>) => {\n // If this link simply reloads the current route,\n // make sure it has a new key so it will trigger a data refresh\n\n // If this `to` is a valid external URL, return\n // null for LinkUtils\n const toString = String(to)\n const fromString = String(from)\n\n let isExternal\n\n try {\n new URL(`${toString}`)\n isExternal = true\n } catch (e) {}\n\n invariant(\n !isExternal,\n 'Attempting to navigate to external url with this.navigate!',\n )\n\n return this.#commitLocation({\n from: fromString,\n to: toString,\n search,\n hash,\n replace,\n params,\n })\n }\n\n matchRoute = <\n TFrom extends ValidFromPath<TAllRouteInfo> = '/',\n TTo extends string = '.',\n >(\n location: ToOptions<TAllRouteInfo, TFrom, TTo>,\n opts?: MatchRouteOptions,\n ):\n | false\n | TAllRouteInfo['routeInfoById'][ResolveRelativePath<\n TFrom,\n NoInfer<TTo>\n >]['allParams'] => {\n location = {\n ...location,\n to: location.to\n ? this.resolvePath(location.from ?? '', location.to)\n : undefined,\n }\n\n const next = this.buildNext(location)\n\n if (opts?.pending) {\n if (!this.store.state.pendingLocation) {\n return false\n }\n\n return matchPathname(\n this.basepath,\n this.store.state.pendingLocation!.pathname,\n {\n ...opts,\n to: next.pathname,\n },\n ) as any\n }\n\n return matchPathname(\n this.basepath,\n this.store.state.currentLocation.pathname,\n {\n ...opts,\n to: next.pathname,\n },\n ) as any\n }\n\n buildLink = <\n TFrom extends ValidFromPath<TAllRouteInfo> = '/',\n TTo extends string = '.',\n >({\n from,\n to = '.' as any,\n search,\n params,\n hash,\n target,\n replace,\n activeOptions,\n preload,\n preloadMaxAge: userPreloadMaxAge,\n preloadGcMaxAge: userPreloadGcMaxAge,\n preloadDelay: userPreloadDelay,\n disabled,\n }: LinkOptions<TAllRouteInfo, TFrom, TTo>): LinkInfo => {\n // If this link simply reloads the current route,\n // make sure it has a new key so it will trigger a data refresh\n\n // If this `to` is a valid external URL, return\n // null for LinkUtils\n\n try {\n new URL(`${to}`)\n return {\n type: 'external',\n href: to,\n }\n } catch (e) {}\n\n const nextOpts = {\n from,\n to,\n search,\n params,\n hash,\n replace,\n }\n\n const next = this.buildNext(nextOpts)\n\n preload = preload ?? this.options.defaultPreload\n const preloadDelay =\n userPreloadDelay ?? this.options.defaultPreloadDelay ?? 0\n\n // Compare path/hash for matches\n const pathIsEqual =\n this.store.state.currentLocation.pathname === next.pathname\n const currentPathSplit =\n this.store.state.currentLocation.pathname.split('/')\n const nextPathSplit = next.pathname.split('/')\n const pathIsFuzzyEqual = nextPathSplit.every(\n (d, i) => d === currentPathSplit[i],\n )\n const hashIsEqual = this.store.state.currentLocation.hash === next.hash\n // Combine the matches based on user options\n const pathTest = activeOptions?.exact ? pathIsEqual : pathIsFuzzyEqual\n const hashTest = activeOptions?.includeHash ? hashIsEqual : true\n\n // The final \"active\" test\n const isActive = pathTest && hashTest\n\n // The click handler\n const handleClick = (e: MouseEvent) => {\n if (\n !disabled &&\n !isCtrlEvent(e) &&\n !e.defaultPrevented &&\n (!target || target === '_self') &&\n e.button === 0\n ) {\n e.preventDefault()\n if (pathIsEqual && !search && !hash) {\n this.invalidateRoute(nextOpts)\n }\n\n // All is well? Navigate!\n this.#commitLocation(nextOpts as any)\n }\n }\n\n // The click handler\n const handleFocus = (e: MouseEvent) => {\n if (preload) {\n this.preloadRoute(nextOpts, {\n maxAge: userPreloadMaxAge,\n gcMaxAge: userPreloadGcMaxAge,\n }).catch((err) => {\n console.warn(err)\n console.warn('Error preloading route! ☝️')\n })\n }\n }\n\n const handleEnter = (e: MouseEvent) => {\n const target = (e.target || {}) as LinkCurrentTargetElement\n\n if (preload) {\n if (target.preloadTimeout) {\n return\n }\n\n target.preloadTimeout = setTimeout(() => {\n target.preloadTimeout = null\n this.preloadRoute(nextOpts, {\n maxAge: userPreloadMaxAge,\n gcMaxAge: userPreloadGcMaxAge,\n }).catch((err) => {\n console.warn(err)\n console.warn('Error preloading route! ☝️')\n })\n }, preloadDelay)\n }\n }\n\n const handleLeave = (e: MouseEvent) => {\n const target = (e.target || {}) as LinkCurrentTargetElement\n\n if (target.preloadTimeout) {\n clearTimeout(target.preloadTimeout)\n target.preloadTimeout = null\n }\n }\n\n return {\n type: 'internal',\n next,\n handleFocus,\n handleClick,\n handleEnter,\n handleLeave,\n isActive,\n disabled,\n }\n }\n\n dehydrate = (): DehydratedRouter<TRouterContext> => {\n return {\n state: {\n ...pick(this.store.state, [\n 'latestLocation',\n 'currentLocation',\n 'status',\n 'lastUpdated',\n ]),\n currentMatches: this.store.state.currentMatches.map((match) => ({\n id: match.id,\n state: {\n ...pick(match.store.state, [\n 'status',\n 'routeLoaderData',\n 'invalidAt',\n 'invalid',\n ]),\n },\n })),\n },\n context: this.options.context as TRouterContext,\n }\n }\n\n hydrate = (dehydratedRouter: DehydratedRouter<TRouterContext>) => {\n this.store.setState((s) => {\n // Update the context TODO: make this part of state?\n this.options.context = dehydratedRouter.context\n\n // Match the routes\n const currentMatches = this.matchRoutes(\n dehydratedRouter.state.latestLocation.pathname,\n {\n strictParseParams: true,\n },\n )\n\n currentMatches.forEach((match, index) => {\n const dehydratedMatch = dehydratedRouter.state.currentMatches[index]\n invariant(\n dehydratedMatch && dehydratedMatch.id === match.id,\n 'Oh no! There was a hydration mismatch when attempting to rethis.store the state of the router! 😬',\n )\n match.store.setState((s) => {\n Object.assign(s, dehydratedMatch.state)\n })\n match.setLoaderData(dehydratedMatch.state.routeLoaderData)\n })\n\n currentMatches.forEach((match) => match.__validate())\n\n Object.assign(s, { ...dehydratedRouter.state, currentMatches })\n })\n }\n\n getLoader = <TFrom extends keyof TAllRouteInfo['routeInfoById'] = '/'>(opts: {\n from: TFrom\n }): unknown extends TAllRouteInfo['routeInfoById'][TFrom]['routeLoaderData']\n ?\n | Loader<\n LoaderContext<\n TAllRouteInfo['routeInfoById'][TFrom]['fullSearchSchema'],\n TAllRouteInfo['routeInfoById'][TFrom]['allParams']\n >,\n TAllRouteInfo['routeInfoById'][TFrom]['routeLoaderData']\n >\n | undefined\n : Loader<\n TAllRouteInfo['routeInfoById'][TFrom]['fullSearchSchema'],\n TAllRouteInfo['routeInfoById'][TFrom]['allParams'],\n TAllRouteInfo['routeInfoById'][TFrom]['routeLoaderData']\n > => {\n const id = opts.from || ('/' as any)\n\n const route = this.getRoute(id)\n\n if (!route) return undefined as any\n\n let loader =\n this.store.state.loaders[id] ||\n (() => {\n this.store.setState((s) => {\n s.loaders[id] = {\n pending: [],\n fetch: (async (loaderContext: LoaderContext<any, any>) => {\n if (!route) {\n return\n }\n const loaderState: LoaderState<any, any> = {\n loadedAt: Date.now(),\n loaderContext,\n }\n this.store.setState((s) => {\n s.loaders[id]!.current = loaderState\n s.loaders[id]!.latest = loaderState\n s.loaders[id]!.pending.push(loaderState)\n })\n try {\n return await route.options.loader?.(loaderContext)\n } finally {\n this.store.setState((s) => {\n s.loaders[id]!.pending = s.loaders[id]!.pending.filter(\n (d) => d !== loaderState,\n )\n })\n }\n }) as any,\n }\n })\n return this.store.state.loaders[id]!\n })()\n\n return loader as any\n }\n\n #buildRouteTree = (rootRouteConfig: RouteConfig) => {\n const recurseRoutes = (\n routeConfigs: RouteConfig[],\n parent?: Route<TAllRouteInfo, any, any>,\n ): Route<TAllRouteInfo, any, any>[] => {\n return routeConfigs.map((routeConfig, i) => {\n const routeOptions = routeConfig.options\n const route = new Route(routeConfig, routeOptions, i, parent, this)\n const existingRoute = (this.routesById as any)[route.id]\n\n if (existingRoute) {\n if (process.env.NODE_ENV !== 'production') {\n console.warn(\n `Duplicate routes found with id: ${String(route.id)}`,\n this.routesById,\n route,\n )\n }\n throw new Error()\n }\n\n ;(this.routesById as any)[route.id] = route\n\n const children = routeConfig.children as RouteConfig[]\n\n route.childRoutes = children.length\n ? recurseRoutes(children, route)\n : undefined\n\n return route\n })\n }\n\n const routes = recurseRoutes([rootRouteConfig])\n\n return routes[0]!\n }\n\n #parseLocation = (previousLocation?: ParsedLocation): ParsedLocation => {\n let { pathname, search, hash, state } = this.history.location\n\n const parsedSearch = this.options.parseSearch(search)\n\n return {\n pathname: pathname,\n searchStr: search,\n search: replaceEqualDeep(previousLocation?.search, parsedSearch),\n hash: hash.split('#').reverse()[0] ?? '',\n href: `${pathname}${search}${hash}`,\n state: state as LocationState,\n key: state?.key || '__init__',\n }\n }\n\n #onFocus = () => {\n this.load()\n }\n\n #buildLocation = (dest: BuildNextOptions = {}): ParsedLocation => {\n const fromPathname = dest.fromCurrent\n ? this.store.state.latestLocation.pathname\n : dest.from ?? this.store.state.latestLocation.pathname\n\n let pathname = resolvePath(\n this.basepath ?? '/',\n fromPathname,\n `${dest.to ?? '.'}`,\n )\n\n const fromMatches = this.matchRoutes(\n this.store.state.latestLocation.pathname,\n {\n strictParseParams: true,\n },\n )\n\n const toMatches = this.matchRoutes(pathname)\n\n const prevParams = { ...last(fromMatches)?.params }\n\n let nextParams =\n (dest.params ?? true) === true\n ? prevParams\n : functionalUpdate(dest.params!, prevParams)\n\n if (nextParams) {\n toMatches\n .map((d) => d.route.options.stringifyParams)\n .filter(Boolean)\n .forEach((fn) => {\n Object.assign({}, nextParams!, fn!(nextParams!))\n })\n }\n\n pathname = interpolatePath(pathname, nextParams ?? {})\n\n // Pre filters first\n const preFilteredSearch = dest.__preSearchFilters?.length\n ? dest.__preSearchFilters?.reduce(\n (prev, next) => next(prev),\n this.store.state.latestLocation.search,\n )\n : this.store.state.latestLocation.search\n\n // Then the link/navigate function\n const destSearch =\n dest.search === true\n ? preFilteredSearch // Preserve resolvedFrom true\n : dest.search\n ? functionalUpdate(dest.search, preFilteredSearch) ?? {} // Updater\n : dest.__preSearchFilters?.length\n ? preFilteredSearch // Preserve resolvedFrom filters\n : {}\n\n // Then post filters\n const postFilteredSearch = dest.__postSearchFilters?.length\n ? dest.__postSearchFilters.reduce((prev, next) => next(prev), destSearch)\n : destSearch\n\n const search = replaceEqualDeep(\n this.store.state.latestLocation.search,\n postFilteredSearch,\n )\n\n const searchStr = this.options.stringifySearch(search)\n let hash =\n dest.hash === true\n ? this.store.state.latestLocation.hash\n : functionalUpdate(dest.hash!, this.store.state.latestLocation.hash)\n hash = hash ? `#${hash}` : ''\n\n return {\n pathname,\n search,\n searchStr,\n state: this.store.state.latestLocation.state,\n hash,\n href: `${pathname}${searchStr}${hash}`,\n key: dest.key,\n }\n }\n\n #commitLocation = (location: BuildNextOptions & { replace?: boolean }) => {\n const next = this.buildNext(location)\n const id = '' + Date.now() + Math.random()\n\n if (this.navigateTimeout) clearTimeout(this.navigateTimeout)\n\n let nextAction: 'push' | 'replace' = 'replace'\n\n if (!location.replace) {\n nextAction = 'push'\n }\n\n const isSameUrl = this.store.state.latestLocation.href === next.href\n\n if (isSameUrl && !next.key) {\n nextAction = 'replace'\n }\n\n const href = `${next.pathname}${next.searchStr}${\n next.hash ? `#${next.hash}` : ''\n }`\n\n this.history[nextAction === 'push' ? 'push' : 'replace'](href, {\n id,\n ...next.state,\n })\n\n // this.load(this.#parseLocation(this.store.state.latestLocation))\n\n return (this.navigationPromise = new Promise((resolve) => {\n const previousNavigationResolve = this.resolveNavigation\n\n this.resolveNavigation = () => {\n previousNavigationResolve()\n resolve()\n }\n }))\n }\n}\n\n// Detect if we're in the DOM\nconst isServer = typeof window === 'undefined' || !window.document.createElement\n\nfunction getInitialRouterState(): RouterStore {\n return {\n status: 'idle',\n latestLocation: null!,\n currentLocation: null!,\n currentMatches: [],\n loaders: {},\n lastUpdated: Date.now(),\n matchCache: {},\n get isFetching() {\n return (\n this.status === 'loading' ||\n this.currentMatches.some((d) => d.store.state.isFetching)\n )\n },\n get isPreloading() {\n return Object.values(this.matchCache).some(\n (d) =>\n d.match.store.state.isFetching &&\n !this.currentMatches.find((dd) => dd.id === d.match.id),\n )\n },\n }\n}\n\nfunction isCtrlEvent(e: MouseEvent) {\n return !!(e.metaKey || e.altKey || e.ctrlKey || e.shiftKey)\n}\n\nfunction linkMatches(matches: RouteMatch<any, any>[]) {\n matches.forEach((match, index) => {\n const parent = matches[index - 1]\n\n if (parent) {\n match.__setParentMatch(parent)\n }\n })\n}\n"],"names":["defaultFetchServerDataFn","router","routeMatch","next","buildNext","to","search","d","__data","matchId","id","res","fetch","href","method","signal","abortController","ok","json","Error","Router","startedLoadingAt","Date","now","resolveNavigation","constructor","options","defaultLoaderGcMaxAge","defaultLoaderMaxAge","defaultPreloadMaxAge","defaultPreloadDelay","context","undefined","stringifySearch","defaultStringifySearch","parseSearch","defaultParseSearch","fetchServerDataFn","store","createStore","getInitialRouterState","basepath","update","reset","setState","s","Object","assign","mount","isServer","state","currentMatches","length","load","visibilityChangeEvent","focusEvent","window","addEventListener","removeEventListener","opts","history","createMemoryHistory","createBrowserHistory","latestLocation","currentLocation","listen","routeConfig","trimPath","routesById","routeTree","matches","matchRoutes","pathname","__preSearchFilters","map","match","route","preSearchFilters","flat","filter","Boolean","__postSearchFilters","postSearchFilters","cancelMatches","pendingMatches","forEach","cancel","startedAt","batch","strictParseParams","status","pendingLocation","loadMatches","err","console","warn","invariant","navigationPromise","previousMatches","exiting","staying","find","dd","push","entering","__onExit","params","routeSearch","isFetching","error","gc","Math","max","loaderGcMaxAge","loaderMaxAge","matchCache","Infinity","Number","MAX_SAFE_INTEGER","onTransition","onLoaded","onRouteChange","cleanMatchCache","keys","entry","getRoute","loadRoute","navigateOpts","preloadRoute","loaderOpts","preload","maxAge","gcMaxAge","defaultPreloadGcMaxAge","existingMatches","recurse","routes","parentMatch","last","filteredRoutes","filterRoutes","foundRoutes","findMatchInRoutes","parentRoutes","some","path","childRoutes","fuzzy","matchParams","matchPathname","fullPath","caseSensitive","parsedParams","parseParams","foundRoute","interpolatedPath","interpolatePath","RouteMatch","joinPaths","linkMatches","resolvedMatches","__validate","Promise","all","beforeLoad","onLoadError","matchPromises","index","prevMatch","__loadPromise","loadMatchData","useServerData","loader","invalidateRoute","unloadedMatchIds","allSettled","includes","invalidate","reload","navigate","fromCurrent","replace","resolvePath","from","cleanPath","hash","toString","String","fromString","isExternal","URL","e","matchRoute","location","pending","buildLink","target","activeOptions","preloadMaxAge","userPreloadMaxAge","preloadGcMaxAge","userPreloadGcMaxAge","preloadDelay","userPreloadDelay","disabled","type","nextOpts","defaultPreload","pathIsEqual","currentPathSplit","split","nextPathSplit","pathIsFuzzyEqual","every","i","hashIsEqual","pathTest","exact","hashTest","includeHash","isActive","handleClick","isCtrlEvent","defaultPrevented","button","preventDefault","handleFocus","catch","handleEnter","preloadTimeout","setTimeout","handleLeave","clearTimeout","dehydrate","pick","hydrate","dehydratedRouter","dehydratedMatch","setLoaderData","routeLoaderData","getLoader","loaders","loaderContext","loaderState","loadedAt","current","latest","rootRouteConfig","recurseRoutes","routeConfigs","parent","routeOptions","Route","existingRoute","process","env","NODE_ENV","children","previousLocation","parsedSearch","searchStr","replaceEqualDeep","reverse","key","dest","fromPathname","fromMatches","toMatches","prevParams","nextParams","functionalUpdate","stringifyParams","fn","preFilteredSearch","reduce","prev","destSearch","postFilteredSearch","random","navigateTimeout","nextAction","isSameUrl","resolve","previousNavigationResolve","document","createElement","lastUpdated","isPreloading","values","metaKey","altKey","ctrlKey","shiftKey","__setParentMatch"],"mappings":"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"}
|
package/build/esm/index.js
CHANGED
|
@@ -107,13 +107,8 @@ function createMemoryHistory(opts = {
|
|
|
107
107
|
const getLocation = () => parseLocation(entries[index], currentState);
|
|
108
108
|
return createHistory({
|
|
109
109
|
getLocation,
|
|
110
|
-
listener:
|
|
111
|
-
|
|
112
|
-
// We might need to handle the hashchange event in the future
|
|
113
|
-
// window.addEventListener(hashChangeEvent, onUpdate)
|
|
114
|
-
return () => {
|
|
115
|
-
window.removeEventListener(popStateEvent, onUpdate);
|
|
116
|
-
};
|
|
110
|
+
listener: () => {
|
|
111
|
+
return () => {};
|
|
117
112
|
},
|
|
118
113
|
pushState: (path, state) => {
|
|
119
114
|
currentState = {
|
|
@@ -664,7 +659,7 @@ class RouteMatch {
|
|
|
664
659
|
Object.assign(this, {
|
|
665
660
|
route,
|
|
666
661
|
router,
|
|
667
|
-
|
|
662
|
+
id: opts.id,
|
|
668
663
|
pathname: opts.pathname,
|
|
669
664
|
params: opts.params,
|
|
670
665
|
store: createStore({
|
|
@@ -682,7 +677,7 @@ class RouteMatch {
|
|
|
682
677
|
this.store.setState(s => s.status = 'success');
|
|
683
678
|
}
|
|
684
679
|
}
|
|
685
|
-
|
|
680
|
+
setLoaderData = loaderData => {
|
|
686
681
|
batch(() => {
|
|
687
682
|
this.store.setState(s => {
|
|
688
683
|
s.routeLoaderData = loaderData;
|
|
@@ -757,7 +752,7 @@ class RouteMatch {
|
|
|
757
752
|
if (this.route.options.loader) {
|
|
758
753
|
const data = await this.router.loadMatchData(this);
|
|
759
754
|
if (latestPromise = checkLatest()) return latestPromise;
|
|
760
|
-
this
|
|
755
|
+
this.setLoaderData(data);
|
|
761
756
|
}
|
|
762
757
|
this.store.setState(s => {
|
|
763
758
|
s.error = undefined;
|
|
@@ -942,8 +937,7 @@ const defaultFetchServerDataFn = async ({
|
|
|
942
937
|
throw new Error('Failed to fetch match data');
|
|
943
938
|
};
|
|
944
939
|
class Router {
|
|
945
|
-
|
|
946
|
-
|
|
940
|
+
#unsubHistory;
|
|
947
941
|
startedLoadingAt = Date.now();
|
|
948
942
|
resolveNavigation = () => {};
|
|
949
943
|
constructor(options) {
|
|
@@ -958,13 +952,12 @@ class Router {
|
|
|
958
952
|
parseSearch: options?.parseSearch ?? defaultParseSearch,
|
|
959
953
|
fetchServerDataFn: options?.fetchServerDataFn ?? defaultFetchServerDataFn
|
|
960
954
|
};
|
|
961
|
-
this.history = this.options?.history ?? createBrowserHistory();
|
|
962
955
|
this.store = createStore(getInitialRouterState());
|
|
963
956
|
this.basepath = '';
|
|
964
957
|
this.update(options);
|
|
965
958
|
|
|
966
959
|
// Allow frameworks to hook into the router creation
|
|
967
|
-
this.options.
|
|
960
|
+
this.options.Router?.(this);
|
|
968
961
|
}
|
|
969
962
|
reset = () => {
|
|
970
963
|
this.store.setState(s => Object.assign(s, getInitialRouterState()));
|
|
@@ -976,9 +969,6 @@ class Router {
|
|
|
976
969
|
if (!this.store.state.currentMatches.length) {
|
|
977
970
|
this.load();
|
|
978
971
|
}
|
|
979
|
-
const unsubHistory = this.history.listen(() => {
|
|
980
|
-
this.load(this.#parseLocation(this.store.state.latestLocation));
|
|
981
|
-
});
|
|
982
972
|
const visibilityChangeEvent = 'visibilitychange';
|
|
983
973
|
const focusEvent = 'focus';
|
|
984
974
|
|
|
@@ -991,7 +981,6 @@ class Router {
|
|
|
991
981
|
window.addEventListener(focusEvent, this.#onFocus, false);
|
|
992
982
|
}
|
|
993
983
|
return () => {
|
|
994
|
-
unsubHistory();
|
|
995
984
|
if (window.removeEventListener) {
|
|
996
985
|
// Be sure to unsubscribe if a new handler is set
|
|
997
986
|
|
|
@@ -1003,13 +992,20 @@ class Router {
|
|
|
1003
992
|
return () => {};
|
|
1004
993
|
};
|
|
1005
994
|
update = opts => {
|
|
1006
|
-
|
|
995
|
+
Object.assign(this.options, opts);
|
|
996
|
+
if (!this.history || this.options.history && this.options.history !== this.history) {
|
|
997
|
+
if (this.#unsubHistory) {
|
|
998
|
+
this.#unsubHistory();
|
|
999
|
+
}
|
|
1000
|
+
this.history = this.options.history ?? (isServer ? createMemoryHistory() : createBrowserHistory());
|
|
1007
1001
|
this.store.setState(s => {
|
|
1008
1002
|
s.latestLocation = this.#parseLocation();
|
|
1009
1003
|
s.currentLocation = s.latestLocation;
|
|
1010
1004
|
});
|
|
1005
|
+
this.#unsubHistory = this.history.listen(() => {
|
|
1006
|
+
this.load(this.#parseLocation(this.store.state.latestLocation));
|
|
1007
|
+
});
|
|
1011
1008
|
}
|
|
1012
|
-
Object.assign(this.options, opts);
|
|
1013
1009
|
const {
|
|
1014
1010
|
basepath,
|
|
1015
1011
|
routeConfig
|
|
@@ -1234,7 +1230,7 @@ class Router {
|
|
|
1234
1230
|
const interpolatedPath = interpolatePath(foundRoute.path, params);
|
|
1235
1231
|
const matchId = interpolatePath(foundRoute.id, params, true);
|
|
1236
1232
|
const match = existingMatches.find(d => d.id === matchId) || this.store.state.matchCache[matchId]?.match || new RouteMatch(this, foundRoute, {
|
|
1237
|
-
matchId,
|
|
1233
|
+
id: matchId,
|
|
1238
1234
|
params,
|
|
1239
1235
|
pathname: joinPaths([this.basepath, interpolatedPath])
|
|
1240
1236
|
});
|
|
@@ -1306,10 +1302,11 @@ class Router {
|
|
|
1306
1302
|
|
|
1307
1303
|
// TODO: batch requests when possible
|
|
1308
1304
|
|
|
1309
|
-
|
|
1305
|
+
const res = await this.options.fetchServerDataFn({
|
|
1310
1306
|
router: this,
|
|
1311
1307
|
routeMatch
|
|
1312
1308
|
});
|
|
1309
|
+
return res;
|
|
1313
1310
|
}
|
|
1314
1311
|
};
|
|
1315
1312
|
invalidateRoute = async opts => {
|
|
@@ -1500,7 +1497,7 @@ class Router {
|
|
|
1500
1497
|
state: {
|
|
1501
1498
|
...pick(this.store.state, ['latestLocation', 'currentLocation', 'status', 'lastUpdated']),
|
|
1502
1499
|
currentMatches: this.store.state.currentMatches.map(match => ({
|
|
1503
|
-
|
|
1500
|
+
id: match.id,
|
|
1504
1501
|
state: {
|
|
1505
1502
|
...pick(match.store.state, ['status', 'routeLoaderData', 'invalidAt', 'invalid'])
|
|
1506
1503
|
}
|
|
@@ -1520,8 +1517,11 @@ class Router {
|
|
|
1520
1517
|
});
|
|
1521
1518
|
currentMatches.forEach((match, index) => {
|
|
1522
1519
|
const dehydratedMatch = dehydratedRouter.state.currentMatches[index];
|
|
1523
|
-
invariant(dehydratedMatch && dehydratedMatch.
|
|
1524
|
-
|
|
1520
|
+
invariant(dehydratedMatch && dehydratedMatch.id === match.id, 'Oh no! There was a hydration mismatch when attempting to rethis.store the state of the router! 😬');
|
|
1521
|
+
match.store.setState(s => {
|
|
1522
|
+
Object.assign(s, dehydratedMatch.state);
|
|
1523
|
+
});
|
|
1524
|
+
match.setLoaderData(dehydratedMatch.state.routeLoaderData);
|
|
1525
1525
|
});
|
|
1526
1526
|
currentMatches.forEach(match => match.__validate());
|
|
1527
1527
|
Object.assign(s, {
|
|
@@ -1667,7 +1667,9 @@ class Router {
|
|
|
1667
1667
|
id,
|
|
1668
1668
|
...next.state
|
|
1669
1669
|
});
|
|
1670
|
-
|
|
1670
|
+
|
|
1671
|
+
// this.load(this.#parseLocation(this.store.state.latestLocation))
|
|
1672
|
+
|
|
1671
1673
|
return this.navigationPromise = new Promise(resolve => {
|
|
1672
1674
|
const previousNavigationResolve = this.resolveNavigation;
|
|
1673
1675
|
this.resolveNavigation = () => {
|
|
@@ -1709,7 +1711,7 @@ function linkMatches(matches) {
|
|
|
1709
1711
|
});
|
|
1710
1712
|
}
|
|
1711
1713
|
|
|
1712
|
-
//
|
|
1714
|
+
// RouterAction is a constrained identify function that takes options: key, action, onSuccess, onError, onSettled, etc
|
|
1713
1715
|
function createAction(options) {
|
|
1714
1716
|
const store = createStore({
|
|
1715
1717
|
submissions: []
|