@tanstack/router-core 0.0.1-beta.51 → 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.
@@ -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'\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 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 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 Object.assign(this.options, opts)\n\n if (\n !this.history ||\n (this.options.history && this.options.history !== this.history)\n ) {\n this.history =\n this.options?.history ?? isServer\n ? createMemoryHistory()\n : createBrowserHistory()!\n\n this.store.setState((s) => {\n s.latestLocation = this.#parseLocation()\n s.currentLocation = s.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 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","store","createStore","getInitialRouterState","basepath","update","reset","setState","s","Object","assign","mount","isServer","state","currentMatches","length","load","unsubHistory","history","listen","latestLocation","visibilityChangeEvent","focusEvent","window","addEventListener","removeEventListener","opts","createMemoryHistory","createBrowserHistory","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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"}
@@ -107,13 +107,8 @@ function createMemoryHistory(opts = {
107
107
  const getLocation = () => parseLocation(entries[index], currentState);
108
108
  return createHistory({
109
109
  getLocation,
110
- listener: onUpdate => {
111
- window.addEventListener(popStateEvent, onUpdate);
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 = {
@@ -682,7 +677,7 @@ class RouteMatch {
682
677
  this.store.setState(s => s.status = 'success');
683
678
  }
684
679
  }
685
- #setLoaderData = loaderData => {
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.#setLoaderData(data);
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
- // __location: Location<TAllRouteInfo['fullSearchSchema']>
946
-
940
+ #unsubHistory;
947
941
  startedLoadingAt = Date.now();
948
942
  resolveNavigation = () => {};
949
943
  constructor(options) {
@@ -975,9 +969,6 @@ class Router {
975
969
  if (!this.store.state.currentMatches.length) {
976
970
  this.load();
977
971
  }
978
- const unsubHistory = this.history.listen(() => {
979
- this.load(this.#parseLocation(this.store.state.latestLocation));
980
- });
981
972
  const visibilityChangeEvent = 'visibilitychange';
982
973
  const focusEvent = 'focus';
983
974
 
@@ -990,7 +981,6 @@ class Router {
990
981
  window.addEventListener(focusEvent, this.#onFocus, false);
991
982
  }
992
983
  return () => {
993
- unsubHistory();
994
984
  if (window.removeEventListener) {
995
985
  // Be sure to unsubscribe if a new handler is set
996
986
 
@@ -1004,11 +994,17 @@ class Router {
1004
994
  update = opts => {
1005
995
  Object.assign(this.options, opts);
1006
996
  if (!this.history || this.options.history && this.options.history !== this.history) {
1007
- this.history = this.options?.history ?? isServer ? createMemoryHistory() : createBrowserHistory();
997
+ if (this.#unsubHistory) {
998
+ this.#unsubHistory();
999
+ }
1000
+ this.history = this.options.history ?? (isServer ? createMemoryHistory() : createBrowserHistory());
1008
1001
  this.store.setState(s => {
1009
1002
  s.latestLocation = this.#parseLocation();
1010
1003
  s.currentLocation = s.latestLocation;
1011
1004
  });
1005
+ this.#unsubHistory = this.history.listen(() => {
1006
+ this.load(this.#parseLocation(this.store.state.latestLocation));
1007
+ });
1012
1008
  }
1013
1009
  const {
1014
1010
  basepath,
@@ -1522,7 +1518,10 @@ class Router {
1522
1518
  currentMatches.forEach((match, index) => {
1523
1519
  const dehydratedMatch = dehydratedRouter.state.currentMatches[index];
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! 😬');
1525
- Object.assign(match, dehydratedMatch);
1521
+ match.store.setState(s => {
1522
+ Object.assign(s, dehydratedMatch.state);
1523
+ });
1524
+ match.setLoaderData(dehydratedMatch.state.routeLoaderData);
1526
1525
  });
1527
1526
  currentMatches.forEach(match => match.__validate());
1528
1527
  Object.assign(s, {