@tanstack/react-router 0.0.1-beta.224 → 0.0.1-beta.226
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/CatchBoundary.js +3 -6
- package/build/cjs/CatchBoundary.js.map +1 -1
- package/build/cjs/Matches.js +8 -15
- package/build/cjs/Matches.js.map +1 -1
- package/build/cjs/RouterProvider.js +6 -11
- package/build/cjs/RouterProvider.js.map +1 -1
- package/build/cjs/_virtual/_rollupPluginBabelHelpers.js +1 -3
- package/build/cjs/_virtual/_rollupPluginBabelHelpers.js.map +1 -1
- package/build/cjs/awaited.js +0 -2
- package/build/cjs/awaited.js.map +1 -1
- package/build/cjs/defer.js +0 -2
- package/build/cjs/defer.js.map +1 -1
- package/build/cjs/fileRoute.js +0 -2
- package/build/cjs/fileRoute.js.map +1 -1
- package/build/cjs/index.js +3 -16
- package/build/cjs/index.js.map +1 -1
- package/build/cjs/lazyRouteComponent.js +3 -6
- package/build/cjs/lazyRouteComponent.js.map +1 -1
- package/build/cjs/link.js +4 -7
- package/build/cjs/link.js.map +1 -1
- package/build/cjs/path.js +0 -2
- package/build/cjs/path.js.map +1 -1
- package/build/cjs/qss.js +0 -2
- package/build/cjs/qss.js.map +1 -1
- package/build/cjs/redirects.js +0 -2
- package/build/cjs/redirects.js.map +1 -1
- package/build/cjs/route.js +2 -7
- package/build/cjs/route.js.map +1 -1
- package/build/cjs/router.js +13 -15
- package/build/cjs/router.js.map +1 -1
- package/build/cjs/scroll-restoration.js +3 -6
- package/build/cjs/scroll-restoration.js.map +1 -1
- package/build/cjs/searchParams.js +0 -2
- package/build/cjs/searchParams.js.map +1 -1
- package/build/cjs/useBlocker.js +3 -6
- package/build/cjs/useBlocker.js.map +1 -1
- package/build/cjs/useNavigate.js +3 -6
- package/build/cjs/useNavigate.js.map +1 -1
- package/build/cjs/useParams.js +0 -2
- package/build/cjs/useParams.js.map +1 -1
- package/build/cjs/useSearch.js +0 -2
- package/build/cjs/useSearch.js.map +1 -1
- package/build/cjs/utils.js +9 -6
- package/build/cjs/utils.js.map +1 -1
- package/build/esm/index.js +18 -5
- package/build/esm/index.js.map +1 -1
- package/build/stats-html.html +3494 -2700
- package/build/stats-react.json +290 -290
- package/build/types/CatchBoundary.d.ts +2 -2
- package/build/types/Matches.d.ts +3 -3
- package/build/types/RouterProvider.d.ts +2 -7
- package/build/types/awaited.d.ts +1 -0
- package/build/types/fileRoute.d.ts +3 -2
- package/build/types/route.d.ts +1 -1
- package/build/types/router.d.ts +7 -3
- package/build/umd/index.development.js +22 -11
- package/build/umd/index.development.js.map +1 -1
- package/build/umd/index.production.js +2 -2
- package/build/umd/index.production.js.map +1 -1
- package/package.json +2 -2
- package/src/RouterProvider.tsx +6 -8
- package/src/route.ts +37 -37
- package/src/router.ts +20 -13
package/build/cjs/router.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"router.js","sources":["../../src/router.ts"],"sourcesContent":["import {\n HistoryLocation,\n HistoryState,\n RouterHistory,\n createBrowserHistory,\n} from '@tanstack/history'\n\n//\n\nimport {\n AnySearchSchema,\n AnyRoute,\n AnyContext,\n AnyPathParams,\n RouteMask,\n Route,\n LoaderFnContext,\n} from './route'\nimport { FullSearchSchema, RoutesById, RoutesByPath } from './routeInfo'\nimport { defaultParseSearch, defaultStringifySearch } from './searchParams'\nimport {\n PickAsRequired,\n Updater,\n NonNullableUpdater,\n replaceEqualDeep,\n deepEqual,\n escapeJSON,\n functionalUpdate,\n last,\n pick,\n} from './utils'\nimport {\n ErrorRouteComponent,\n PendingRouteComponent,\n RouteComponent,\n} from './route'\nimport { AnyRouteMatch, RouteMatch } from './Matches'\nimport { ParsedLocation } from './location'\nimport { LocationState } from './location'\nimport { SearchSerializer, SearchParser } from './searchParams'\nimport {\n BuildLinkFn,\n BuildLocationFn,\n CommitLocationOptions,\n InjectedHtmlEntry,\n LoadFn,\n MatchRouteFn,\n NavigateFn,\n PathParamError,\n SearchParamError,\n getInitialRouterState,\n getRouteMatch,\n} from './RouterProvider'\nimport {\n cleanPath,\n interpolatePath,\n joinPaths,\n matchPathname,\n parsePathname,\n resolvePath,\n trimPath,\n trimPathRight,\n} from './path'\nimport invariant from 'tiny-invariant'\nimport { isRedirect } from './redirects'\nimport warning from 'tiny-warning'\n\n//\n\ndeclare global {\n interface Window {\n __TSR_DEHYDRATED__?: HydrationCtx\n __TSR_ROUTER_CONTEXT__?: React.Context<Router<any>>\n }\n}\n\nexport interface Register {\n // router: Router\n}\n\nexport type AnyRouter = Router<AnyRoute, any>\n\nexport type RegisteredRouter = Register extends {\n router: infer TRouter extends AnyRouter\n}\n ? TRouter\n : AnyRouter\n\nexport type HydrationCtx = {\n router: DehydratedRouter\n payload: Record<string, any>\n}\n\nexport type RouterContextOptions<TRouteTree extends AnyRoute> =\n AnyContext extends TRouteTree['types']['routerContext']\n ? {\n context?: TRouteTree['types']['routerContext']\n }\n : {\n context: TRouteTree['types']['routerContext']\n }\n\nexport interface RouterOptions<\n TRouteTree extends AnyRoute,\n TDehydrated extends Record<string, any> = Record<string, any>,\n> {\n history?: RouterHistory\n stringifySearch?: SearchSerializer\n parseSearch?: SearchParser\n defaultPreload?: false | 'intent'\n defaultPreloadDelay?: number\n defaultComponent?: RouteComponent<AnySearchSchema, AnyPathParams, AnyContext>\n defaultErrorComponent?: ErrorRouteComponent<\n AnySearchSchema,\n AnyPathParams,\n AnyContext\n >\n defaultPendingComponent?: PendingRouteComponent<\n AnySearchSchema,\n AnyPathParams,\n AnyContext\n >\n defaultMaxAge?: number\n defaultGcMaxAge?: number\n defaultPreloadMaxAge?: number\n caseSensitive?: boolean\n routeTree?: TRouteTree\n basepath?: string\n createRoute?: (opts: { route: AnyRoute; router: AnyRouter }) => void\n context?: TRouteTree['types']['routerContext']\n // dehydrate?: () => TDehydrated\n // hydrate?: (dehydrated: TDehydrated) => void\n routeMasks?: RouteMask<TRouteTree>[]\n unmaskOnReload?: boolean\n}\n\nexport interface RouterState<TRouteTree extends AnyRoute = AnyRoute> {\n status: 'pending' | 'idle'\n matches: RouteMatch<TRouteTree>[]\n pendingMatches: RouteMatch<TRouteTree>[]\n location: ParsedLocation<FullSearchSchema<TRouteTree>>\n resolvedLocation: ParsedLocation<FullSearchSchema<TRouteTree>>\n lastUpdated: number\n}\n\nexport type ListenerFn<TEvent extends RouterEvent> = (event: TEvent) => 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?: true | NonNullableUpdater<LocationState>\n mask?: {\n to?: string | number | null\n params?: true | Updater<unknown>\n search?: true | Updater<unknown>\n hash?: true | Updater<string>\n state?: true | NonNullableUpdater<LocationState>\n unmaskOnReload?: boolean\n }\n from?: string\n}\n\nexport interface DehydratedRouterState {\n dehydratedMatches: DehydratedRouteMatch[]\n}\n\nexport type DehydratedRouteMatch = Pick<\n RouteMatch,\n 'fetchedAt' | 'invalid' | 'id' | 'status' | 'updatedAt'\n>\n\nexport interface DehydratedRouter {\n state: DehydratedRouterState\n}\n\nexport type RouterConstructorOptions<\n TRouteTree extends AnyRoute,\n TDehydrated extends Record<string, any>,\n> = Omit<RouterOptions<TRouteTree, TDehydrated>, 'context'> &\n RouterContextOptions<TRouteTree>\n\nexport const componentTypes = [\n 'component',\n 'errorComponent',\n 'pendingComponent',\n] as const\n\nexport type RouterEvents = {\n onBeforeLoad: {\n type: 'onBeforeLoad'\n fromLocation: ParsedLocation\n toLocation: ParsedLocation\n pathChanged: boolean\n }\n onLoad: {\n type: 'onLoad'\n fromLocation: ParsedLocation\n toLocation: ParsedLocation\n pathChanged: boolean\n }\n onResolved: {\n type: 'onResolved'\n fromLocation: ParsedLocation\n toLocation: ParsedLocation\n pathChanged: boolean\n }\n}\n\nexport type RouterEvent = RouterEvents[keyof RouterEvents]\n\nexport type RouterListener<TRouterEvent extends RouterEvent> = {\n eventType: TRouterEvent['type']\n fn: ListenerFn<TRouterEvent>\n}\n\ntype LinkCurrentTargetElement = {\n preloadTimeout?: null | ReturnType<typeof setTimeout>\n}\n\nconst preloadWarning = 'Error preloading route! ☝️'\n\nexport class Router<\n TRouteTree extends AnyRoute = AnyRoute,\n TDehydrated extends Record<string, any> = Record<string, any>,\n> {\n // Option-independent properties\n tempLocationKey: string | undefined = `${Math.round(\n Math.random() * 10000000,\n )}`\n resetNextScroll: boolean = true\n navigateTimeout: NodeJS.Timeout | null = null\n latestLoadPromise: Promise<void> = Promise.resolve()\n subscribers = new Set<RouterListener<RouterEvent>>()\n pendingMatches: AnyRouteMatch[] = []\n injectedHtml: InjectedHtmlEntry[] = []\n dehydratedData?: TDehydrated\n\n // Must build in constructor\n state!: RouterState<TRouteTree>\n options!: PickAsRequired<\n RouterOptions<TRouteTree, TDehydrated>,\n 'stringifySearch' | 'parseSearch' | 'context'\n >\n history!: RouterHistory\n latestLocation!: ParsedLocation\n basepath!: string\n routeTree!: TRouteTree\n routesById!: RoutesById<TRouteTree>\n routesByPath!: RoutesByPath<TRouteTree>\n flatRoutes!: AnyRoute[]\n\n constructor(options: RouterConstructorOptions<TRouteTree, TDehydrated>) {\n this.updateOptions({\n defaultPreloadDelay: 50,\n context: undefined!,\n ...options,\n stringifySearch: options?.stringifySearch ?? defaultStringifySearch,\n parseSearch: options?.parseSearch ?? defaultParseSearch,\n })\n }\n\n startReactTransition: (fn: () => void) => void = () => {\n warning(\n false,\n 'startReactTransition implementation is missing. If you see this, please file an issue.',\n )\n }\n\n setState: (\n fn: (s: RouterState<TRouteTree>) => RouterState<TRouteTree>,\n ) => void = () => {\n warning(\n false,\n 'setState implementation is missing. If you see this, please file an issue.',\n )\n }\n\n updateOptions = (\n newOptions: PickAsRequired<\n RouterOptions<TRouteTree, TDehydrated>,\n 'stringifySearch' | 'parseSearch' | 'context'\n >,\n ) => {\n const previousOptions = this.options\n this.options = {\n ...this.options,\n ...newOptions,\n }\n\n this.basepath = `/${trimPath(newOptions.basepath ?? '') ?? ''}`\n\n if (\n !this.history ||\n (this.options.history && this.options.history !== this.history)\n ) {\n this.history = this.options.history ?? createBrowserHistory()\n this.latestLocation = this.parseLocation()\n }\n\n if (this.options.routeTree !== this.routeTree) {\n this.routeTree = this.options.routeTree as TRouteTree\n this.buildRouteTree()\n }\n\n if (!this.state) {\n this.state = getInitialRouterState(this.latestLocation)\n }\n }\n\n buildRouteTree = () => {\n this.routesById = {} as RoutesById<TRouteTree>\n this.routesByPath = {} as RoutesByPath<TRouteTree>\n\n const recurseRoutes = (childRoutes: AnyRoute[]) => {\n childRoutes.forEach((childRoute, i) => {\n // if (typeof childRoute === 'function') {\n // childRoute = (childRoute as any)()\n // }\n childRoute.init({ originalIndex: i })\n\n const existingRoute = (this.routesById as any)[childRoute.id]\n\n invariant(\n !existingRoute,\n `Duplicate routes found with id: ${String(childRoute.id)}`,\n )\n ;(this.routesById as any)[childRoute.id] = childRoute\n\n if (!childRoute.isRoot && childRoute.path) {\n const trimmedFullPath = trimPathRight(childRoute.fullPath)\n if (\n !(this.routesByPath as any)[trimmedFullPath] ||\n childRoute.fullPath.endsWith('/')\n ) {\n ;(this.routesByPath as any)[trimmedFullPath] = childRoute\n }\n }\n\n const children = childRoute.children as Route[]\n\n if (children?.length) {\n recurseRoutes(children)\n }\n })\n }\n\n recurseRoutes([this.routeTree])\n\n this.flatRoutes = (Object.values(this.routesByPath) as AnyRoute[])\n .map((d, i) => {\n const trimmed = trimPath(d.fullPath)\n const parsed = parsePathname(trimmed)\n\n while (parsed.length > 1 && parsed[0]?.value === '/') {\n parsed.shift()\n }\n\n const score = parsed.map((d) => {\n if (d.type === 'param') {\n return 0.5\n }\n\n if (d.type === 'wildcard') {\n return 0.25\n }\n\n return 1\n })\n\n return { child: d, trimmed, parsed, index: i, score }\n })\n .sort((a, b) => {\n let isIndex = a.trimmed === '/' ? 1 : b.trimmed === '/' ? -1 : 0\n\n if (isIndex !== 0) return isIndex\n\n const length = Math.min(a.score.length, b.score.length)\n\n // Sort by length of score\n if (a.score.length !== b.score.length) {\n return b.score.length - a.score.length\n }\n\n // Sort by min available score\n for (let i = 0; i < length; i++) {\n if (a.score[i] !== b.score[i]) {\n return b.score[i]! - a.score[i]!\n }\n }\n\n // Sort by min available parsed value\n for (let i = 0; i < length; i++) {\n if (a.parsed[i]!.value !== b.parsed[i]!.value) {\n return a.parsed[i]!.value! > b.parsed[i]!.value! ? 1 : -1\n }\n }\n\n // Sort by length of trimmed full path\n if (a.trimmed !== b.trimmed) {\n return a.trimmed > b.trimmed ? 1 : -1\n }\n\n // Sort by original index\n return a.index - b.index\n })\n .map((d, i) => {\n d.child.rank = i\n return d.child\n })\n }\n\n subscribe = <TType extends keyof RouterEvents>(\n eventType: TType,\n fn: ListenerFn<RouterEvents[TType]>,\n ) => {\n const listener: RouterListener<any> = {\n eventType,\n fn,\n }\n\n this.subscribers.add(listener)\n\n return () => {\n this.subscribers.delete(listener)\n }\n }\n\n emit = (routerEvent: RouterEvent) => {\n this.subscribers.forEach((listener) => {\n if (listener.eventType === routerEvent.type) {\n listener.fn(routerEvent)\n }\n })\n }\n\n checkLatest = (promise: Promise<void>): undefined | Promise<void> => {\n return this.latestLoadPromise !== promise\n ? this.latestLoadPromise\n : undefined\n }\n\n parseLocation = (\n previousLocation?: ParsedLocation,\n ): ParsedLocation<FullSearchSchema<TRouteTree>> => {\n const parse = ({\n pathname,\n search,\n hash,\n state,\n }: HistoryLocation): ParsedLocation<FullSearchSchema<TRouteTree>> => {\n const parsedSearch = this.options.parseSearch(search)\n\n return {\n pathname: pathname,\n searchStr: search,\n search: replaceEqualDeep(previousLocation?.search, parsedSearch) as any,\n hash: hash.split('#').reverse()[0] ?? '',\n href: `${pathname}${search}${hash}`,\n state: replaceEqualDeep(previousLocation?.state, state) as HistoryState,\n }\n }\n\n const location = parse(this.history.location)\n\n let { __tempLocation, __tempKey } = location.state\n\n if (__tempLocation && (!__tempKey || __tempKey === this.tempLocationKey)) {\n // Sync up the location keys\n const parsedTempLocation = parse(__tempLocation) as any\n parsedTempLocation.state.key = location.state.key\n\n delete parsedTempLocation.state.__tempLocation\n\n return {\n ...parsedTempLocation,\n maskedLocation: location,\n }\n }\n\n return location\n }\n\n resolvePathWithBase = (from: string, path: string) => {\n return resolvePath(this.basepath!, from, cleanPath(path))\n }\n\n get looseRoutesById() {\n return this.routesById as Record<string, AnyRoute>\n }\n\n matchRoutes = <TRouteTree extends AnyRoute>(\n pathname: string,\n locationSearch: AnySearchSchema,\n opts?: { throwOnError?: boolean; debug?: boolean },\n ): RouteMatch<TRouteTree>[] => {\n let routeParams: AnyPathParams = {}\n\n let foundRoute = this.flatRoutes.find((route) => {\n const matchedParams = matchPathname(\n this.basepath,\n trimPathRight(pathname),\n {\n to: route.fullPath,\n caseSensitive:\n route.options.caseSensitive ?? this.options.caseSensitive,\n fuzzy: false,\n },\n )\n\n if (matchedParams) {\n routeParams = matchedParams\n return true\n }\n\n return false\n })\n\n let routeCursor: AnyRoute =\n foundRoute || (this.routesById as any)['__root__']\n\n let matchedRoutes: AnyRoute[] = [routeCursor]\n // let includingLayouts = true\n while (routeCursor?.parentRoute) {\n routeCursor = routeCursor.parentRoute\n if (routeCursor) matchedRoutes.unshift(routeCursor)\n }\n\n // Existing matches are matches that are already loaded along with\n // pending matches that are still loading\n\n const parseErrors = matchedRoutes.map((route) => {\n let parsedParamsError\n\n if (route.options.parseParams) {\n try {\n const parsedParams = route.options.parseParams(routeParams)\n // Add the parsed params to the accumulated params bag\n Object.assign(routeParams, parsedParams)\n } catch (err: any) {\n parsedParamsError = new PathParamError(err.message, {\n cause: err,\n })\n\n if (opts?.throwOnError) {\n throw parsedParamsError\n }\n\n return parsedParamsError\n }\n }\n\n return\n })\n\n const matches = matchedRoutes.map((route, index) => {\n const interpolatedPath = interpolatePath(route.path, routeParams)\n const matchId = interpolatePath(route.id, routeParams, true)\n\n // Waste not, want not. If we already have a match for this route,\n // reuse it. This is important for layout routes, which might stick\n // around between navigation actions that only change leaf routes.\n const existingMatch = getRouteMatch(this.state, matchId)\n\n const cause = this.state.matches.find((d) => d.id === matchId)\n ? 'stay'\n : 'enter'\n\n if (existingMatch) {\n return { ...existingMatch, cause }\n }\n\n // Create a fresh route match\n const hasLoaders = !!(\n route.options.loader ||\n componentTypes.some((d) => (route.options[d] as any)?.preload)\n )\n\n const routeMatch: AnyRouteMatch = {\n id: matchId,\n routeId: route.id,\n params: routeParams,\n pathname: joinPaths([this.basepath, interpolatedPath]),\n updatedAt: Date.now(),\n routeSearch: {},\n search: {} as any,\n status: hasLoaders ? 'pending' : 'success',\n isFetching: false,\n invalid: false,\n error: undefined,\n paramsError: parseErrors[index],\n searchError: undefined,\n loadPromise: Promise.resolve(),\n context: undefined!,\n abortController: new AbortController(),\n shouldReloadDeps: undefined,\n fetchedAt: 0,\n cause,\n }\n\n return routeMatch\n })\n\n // Take each match and resolve its search params and context\n // This has to happen after the matches are created or found\n // so that we can use the parent match's search params and context\n matches.forEach((match, i): any => {\n const parentMatch = matches[i - 1]\n const route = this.looseRoutesById[match.routeId]!\n\n const searchInfo = (() => {\n // Validate the search params and stabilize them\n const parentSearchInfo = {\n search: parentMatch?.search ?? locationSearch,\n routeSearch: parentMatch?.routeSearch ?? locationSearch,\n }\n\n try {\n const validator =\n typeof route.options.validateSearch === 'object'\n ? route.options.validateSearch.parse\n : route.options.validateSearch\n\n let routeSearch = validator?.(parentSearchInfo.search) ?? {}\n\n let search = {\n ...parentSearchInfo.search,\n ...routeSearch,\n }\n\n routeSearch = replaceEqualDeep(match.routeSearch, routeSearch)\n search = replaceEqualDeep(match.search, search)\n\n return {\n routeSearch,\n search,\n searchDidChange: match.routeSearch !== routeSearch,\n }\n } catch (err: any) {\n match.searchError = new SearchParamError(err.message, {\n cause: err,\n })\n\n if (opts?.throwOnError) {\n throw match.searchError\n }\n\n return parentSearchInfo\n }\n })()\n\n Object.assign(match, searchInfo)\n })\n\n return matches as any\n }\n\n cancelMatch = (id: string) => {\n getRouteMatch(this.state, id)?.abortController?.abort()\n }\n\n cancelMatches = () => {\n this.state.matches.forEach((match) => {\n this.cancelMatch(match.id)\n })\n }\n\n buildLocation: BuildLocationFn<TRouteTree> = (opts) => {\n const build = (\n dest: BuildNextOptions & {\n unmaskOnReload?: boolean\n } = {},\n matches?: AnyRouteMatch[],\n ): ParsedLocation => {\n const from = this.latestLocation\n const fromPathname = dest.from ?? from.pathname\n\n let pathname = this.resolvePathWithBase(fromPathname, `${dest.to ?? ''}`)\n\n const fromMatches = this.matchRoutes(fromPathname, from.search)\n const stayingMatches = matches?.filter((d) =>\n fromMatches?.find((e) => e.routeId === d.routeId),\n )\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 matches\n ?.map((d) => this.looseRoutesById[d.routeId]!.options.stringifyParams)\n .filter(Boolean)\n .forEach((fn) => {\n nextParams = { ...nextParams!, ...fn!(nextParams!) }\n })\n }\n\n pathname = interpolatePath(pathname, nextParams ?? {})\n\n const preSearchFilters =\n stayingMatches\n ?.map(\n (match) =>\n this.looseRoutesById[match.routeId]!.options.preSearchFilters ??\n [],\n )\n .flat()\n .filter(Boolean) ?? []\n\n const postSearchFilters =\n stayingMatches\n ?.map(\n (match) =>\n this.looseRoutesById[match.routeId]!.options.postSearchFilters ??\n [],\n )\n .flat()\n .filter(Boolean) ?? []\n\n // Pre filters first\n const preFilteredSearch = preSearchFilters?.length\n ? preSearchFilters?.reduce(\n (prev, next) => next(prev) as any,\n from.search,\n )\n : from.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 : preSearchFilters?.length\n ? preFilteredSearch // Preserve resolvedFrom filters\n : {}\n\n // Then post filters\n const postFilteredSearch = postSearchFilters?.length\n ? postSearchFilters.reduce((prev, next) => next(prev), destSearch)\n : destSearch\n\n const search = replaceEqualDeep(from.search, postFilteredSearch)\n\n const searchStr = this.options.stringifySearch(search)\n\n const hash =\n dest.hash === true\n ? from.hash\n : dest.hash\n ? functionalUpdate(dest.hash!, from.hash)\n : from.hash\n\n const hashStr = hash ? `#${hash}` : ''\n\n let nextState =\n dest.state === true\n ? from.state\n : dest.state\n ? functionalUpdate(dest.state, from.state)\n : from.state\n\n nextState = replaceEqualDeep(from.state, nextState)\n\n return {\n pathname,\n search,\n searchStr,\n state: nextState as any,\n hash,\n href: this.history.createHref(`${pathname}${searchStr}${hashStr}`),\n unmaskOnReload: dest.unmaskOnReload,\n }\n }\n\n const buildWithMatches = (\n dest: BuildNextOptions = {},\n maskedDest?: BuildNextOptions,\n ) => {\n let next = build(dest)\n let maskedNext = maskedDest ? build(maskedDest) : undefined\n\n if (!maskedNext) {\n let params = {}\n\n let foundMask = this.options.routeMasks?.find((d) => {\n const match = matchPathname(this.basepath, next.pathname, {\n to: d.from,\n caseSensitive: false,\n fuzzy: false,\n })\n\n if (match) {\n params = match\n return true\n }\n\n return false\n })\n\n if (foundMask) {\n foundMask = {\n ...foundMask,\n from: interpolatePath(foundMask.from, params) as any,\n }\n maskedDest = foundMask\n maskedNext = build(maskedDest)\n }\n }\n\n const nextMatches = this.matchRoutes(next.pathname, next.search)\n const maskedMatches = maskedNext\n ? this.matchRoutes(maskedNext.pathname, maskedNext.search)\n : undefined\n const maskedFinal = maskedNext\n ? build(maskedDest, maskedMatches)\n : undefined\n\n const final = build(dest, nextMatches)\n\n if (maskedFinal) {\n final.maskedLocation = maskedFinal\n }\n\n return final\n }\n\n if (opts.mask) {\n return buildWithMatches(opts, {\n ...pick(opts, ['from']),\n ...opts.mask,\n })\n }\n\n return buildWithMatches(opts)\n }\n\n commitLocation = async ({\n startTransition,\n ...next\n }: ParsedLocation & CommitLocationOptions) => {\n if (this.navigateTimeout) clearTimeout(this.navigateTimeout)\n\n const isSameUrl = this.latestLocation.href === next.href\n\n // If the next urls are the same and we're not replacing,\n // do nothing\n if (!isSameUrl || !next.replace) {\n let { maskedLocation, ...nextHistory } = next\n\n if (maskedLocation) {\n nextHistory = {\n ...maskedLocation,\n state: {\n ...maskedLocation.state,\n __tempKey: undefined,\n __tempLocation: {\n ...nextHistory,\n search: nextHistory.searchStr,\n state: {\n ...nextHistory.state,\n __tempKey: undefined!,\n __tempLocation: undefined!,\n key: undefined!,\n },\n },\n },\n }\n\n if (\n nextHistory.unmaskOnReload ??\n this.options.unmaskOnReload ??\n false\n ) {\n nextHistory.state.__tempKey = this.tempLocationKey\n }\n }\n\n const apply = () => {\n this.history[next.replace ? 'replace' : 'push'](\n nextHistory.href,\n nextHistory.state,\n )\n }\n\n if (startTransition ?? true) {\n this.startReactTransition(apply)\n } else {\n apply()\n }\n }\n\n this.resetNextScroll = next.resetScroll ?? true\n\n return this.latestLoadPromise\n }\n\n buildAndCommitLocation = ({\n replace,\n resetScroll,\n startTransition,\n ...rest\n }: BuildNextOptions & CommitLocationOptions = {}) => {\n const location = this.buildLocation(rest)\n return this.commitLocation({\n ...location,\n startTransition,\n replace,\n resetScroll,\n })\n }\n\n navigate: NavigateFn<TRouteTree> = ({ from, to = '', ...rest }) => {\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 = typeof from === 'undefined' ? from : String(from)\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.buildAndCommitLocation({\n ...rest,\n from: fromString,\n to: toString,\n })\n }\n\n loadMatches = async ({\n checkLatest,\n matches,\n preload,\n }: {\n checkLatest: () => Promise<void> | undefined\n matches: AnyRouteMatch[]\n preload?: boolean\n }): Promise<RouteMatch[]> => {\n let latestPromise\n let firstBadMatchIndex: number | undefined\n\n // Check each match middleware to see if the route can be accessed\n try {\n for (let [index, match] of matches.entries()) {\n const parentMatch = matches[index - 1]\n const route = this.looseRoutesById[match.routeId]!\n\n const handleError = (err: any, code: string) => {\n err.routerCode = code\n firstBadMatchIndex = firstBadMatchIndex ?? index\n\n if (isRedirect(err)) {\n throw err\n }\n\n try {\n route.options.onError?.(err)\n } catch (errorHandlerErr) {\n err = errorHandlerErr\n\n if (isRedirect(errorHandlerErr)) {\n throw errorHandlerErr\n }\n }\n\n matches[index] = match = {\n ...match,\n error: err,\n status: 'error',\n updatedAt: Date.now(),\n }\n }\n\n try {\n if (match.paramsError) {\n handleError(match.paramsError, 'PARSE_PARAMS')\n }\n\n if (match.searchError) {\n handleError(match.searchError, 'VALIDATE_SEARCH')\n }\n\n const parentContext =\n parentMatch?.context ?? this.options.context ?? {}\n\n const beforeLoadContext =\n (await route.options.beforeLoad?.({\n search: match.search,\n abortController: match.abortController,\n params: match.params,\n preload: !!preload,\n context: parentContext,\n location: this.state.location,\n // TOOD: just expose state and router, etc\n navigate: (opts) =>\n this.navigate({ ...opts, from: match.pathname } as any),\n buildLocation: this.buildLocation,\n cause: match.cause,\n })) ?? ({} as any)\n\n const context = {\n ...parentContext,\n ...beforeLoadContext,\n }\n\n matches[index] = match = {\n ...match,\n context: replaceEqualDeep(match.context, context),\n }\n } catch (err) {\n handleError(err, 'BEFORE_LOAD')\n break\n }\n }\n } catch (err) {\n if (isRedirect(err)) {\n if (!preload) this.navigate(err as any)\n return matches\n }\n\n throw err\n }\n\n const validResolvedMatches = matches.slice(0, firstBadMatchIndex)\n const matchPromises: Promise<any>[] = []\n\n validResolvedMatches.forEach((match, index) => {\n matchPromises.push(\n (async () => {\n const parentMatchPromise = matchPromises[index - 1]\n const route = this.looseRoutesById[match.routeId]!\n\n const handleIfRedirect = (err: any) => {\n if (isRedirect(err)) {\n if (!preload) {\n this.navigate(err as any)\n }\n return true\n }\n return false\n }\n\n let loadPromise: Promise<void> | undefined\n\n matches[index] = match = {\n ...match,\n fetchedAt: Date.now(),\n invalid: false,\n }\n\n if (match.isFetching) {\n loadPromise = getRouteMatch(this.state, match.id)?.loadPromise\n } else {\n const loaderContext: LoaderFnContext = {\n params: match.params,\n search: match.search,\n preload: !!preload,\n parentMatchPromise,\n abortController: match.abortController,\n context: match.context,\n location: this.state.location,\n navigate: (opts) =>\n this.navigate({ ...opts, from: match.pathname } as any),\n cause: match.cause,\n }\n\n // Default to reloading the route all the time\n let shouldReload = true\n\n let shouldReloadDeps =\n typeof route.options.shouldReload === 'function'\n ? route.options.shouldReload?.(loaderContext)\n : !!(route.options.shouldReload ?? true)\n\n if (match.cause === 'enter') {\n match.shouldReloadDeps = shouldReloadDeps\n } else if (match.cause === 'stay') {\n if (typeof shouldReloadDeps === 'object') {\n // compare the deps to see if they've changed\n shouldReload = !deepEqual(\n shouldReloadDeps,\n match.shouldReloadDeps,\n )\n\n match.shouldReloadDeps = shouldReloadDeps\n } else {\n shouldReload = !!shouldReloadDeps\n }\n }\n\n // If the user doesn't want the route to reload, just\n // resolve with the existing loader data\n\n if (!shouldReload) {\n loadPromise = Promise.resolve(match.loaderData)\n } else {\n // Otherwise, load the route\n matches[index] = match = {\n ...match,\n isFetching: true,\n }\n\n const componentsPromise = Promise.all(\n componentTypes.map(async (type) => {\n const component = route.options[type]\n\n if ((component as any)?.preload) {\n await (component as any).preload()\n }\n }),\n )\n\n const loaderPromise = route.options.loader?.(loaderContext)\n\n loadPromise = Promise.all([\n componentsPromise,\n loaderPromise,\n ]).then((d) => d[1])\n }\n }\n\n matches[index] = match = {\n ...match,\n loadPromise,\n }\n\n if (!preload) {\n this.setState((s) => ({\n ...s,\n matches: s.matches.map((d) => (d.id === match.id ? match : d)),\n }))\n }\n\n try {\n const loaderData = await loadPromise\n if ((latestPromise = checkLatest())) return await latestPromise\n\n matches[index] = match = {\n ...match,\n error: undefined,\n status: 'success',\n isFetching: false,\n updatedAt: Date.now(),\n loaderData,\n loadPromise: undefined,\n }\n } catch (error) {\n if ((latestPromise = checkLatest())) return await latestPromise\n if (handleIfRedirect(error)) return\n\n try {\n route.options.onError?.(error)\n } catch (onErrorError) {\n error = onErrorError\n if (handleIfRedirect(onErrorError)) return\n }\n\n matches[index] = match = {\n ...match,\n error,\n status: 'error',\n isFetching: false,\n updatedAt: Date.now(),\n }\n }\n\n if (!preload) {\n this.setState((s) => ({\n ...s,\n matches: s.matches.map((d) => (d.id === match.id ? match : d)),\n }))\n }\n })(),\n )\n })\n\n await Promise.all(matchPromises)\n return matches\n }\n\n load: LoadFn = async () => {\n const promise = new Promise<void>(async (resolve, reject) => {\n const next = this.latestLocation\n const prevLocation = this.state.resolvedLocation\n const pathDidChange = prevLocation!.href !== next.href\n let latestPromise: Promise<void> | undefined | null\n\n // Cancel any pending matches\n this.cancelMatches()\n\n this.emit({\n type: 'onBeforeLoad',\n fromLocation: prevLocation,\n toLocation: next,\n pathChanged: pathDidChange,\n })\n\n // Match the routes\n let matches: RouteMatch<any, any>[] = this.matchRoutes(\n next.pathname,\n next.search,\n {\n debug: true,\n },\n )\n\n this.pendingMatches = matches\n\n const previousMatches = this.state.matches\n\n // Ingest the new matches\n this.setState((s) => ({\n ...s,\n status: 'pending',\n location: next,\n matches,\n }))\n\n try {\n try {\n // Load the matches\n await this.loadMatches({\n matches,\n checkLatest: () => this.checkLatest(promise),\n })\n } catch (err) {\n // swallow this error, since we'll display the\n // errors on the route components\n }\n\n // Only apply the latest transition\n if ((latestPromise = this.checkLatest(promise))) {\n return latestPromise\n }\n\n const exitingMatchIds = previousMatches.filter(\n (id) => !this.pendingMatches.includes(id),\n )\n const enteringMatchIds = this.pendingMatches.filter(\n (id) => !previousMatches.includes(id),\n )\n const stayingMatchIds = previousMatches.filter((id) =>\n this.pendingMatches.includes(id),\n )\n\n // setState((s) => ({\n // ...s,\n // status: 'idle',\n // resolvedLocation: s.location,\n // }))\n\n //\n ;(\n [\n [exitingMatchIds, 'onLeave'],\n [enteringMatchIds, 'onEnter'],\n [stayingMatchIds, 'onTransition'],\n ] as const\n ).forEach(([matches, hook]) => {\n matches.forEach((match) => {\n this.looseRoutesById[match.routeId]!.options[hook]?.(match)\n })\n })\n\n this.emit({\n type: 'onLoad',\n fromLocation: prevLocation,\n toLocation: next,\n pathChanged: pathDidChange,\n })\n\n resolve()\n } catch (err) {\n // Only apply the latest transition\n if ((latestPromise = this.checkLatest(promise))) {\n return latestPromise\n }\n\n reject(err)\n }\n })\n\n this.latestLoadPromise = promise\n\n return this.latestLoadPromise\n }\n\n preloadRoute = async (\n navigateOpts: BuildNextOptions = this.state.location,\n ) => {\n let next = this.buildLocation(navigateOpts)\n\n let matches = this.matchRoutes(next.pathname, next.search, {\n throwOnError: true,\n })\n\n await this.loadMatches({\n matches,\n preload: true,\n checkLatest: () => undefined,\n })\n\n return [last(matches)!, matches] as const\n }\n\n buildLink: BuildLinkFn<TRouteTree> = (dest) => {\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 const {\n to,\n preload: userPreload,\n preloadDelay: userPreloadDelay,\n activeOptions,\n disabled,\n target,\n replace,\n resetScroll,\n startTransition,\n } = dest\n\n try {\n new URL(`${to}`)\n return {\n type: 'external',\n href: to as any,\n }\n } catch (e) {}\n\n const nextOpts = dest\n const next = this.buildLocation(nextOpts as any)\n\n const preload = userPreload ?? this.options.defaultPreload\n const preloadDelay =\n userPreloadDelay ?? this.options.defaultPreloadDelay ?? 0\n\n // Compare path/hash for matches\n const currentPathSplit = this.latestLocation.pathname.split('/')\n const nextPathSplit = next.pathname.split('/')\n const pathIsFuzzyEqual = nextPathSplit.every(\n (d, i) => d === currentPathSplit[i],\n )\n // Combine the matches based on user this.options\n const pathTest = activeOptions?.exact\n ? this.latestLocation.pathname === next.pathname\n : pathIsFuzzyEqual\n const hashTest = activeOptions?.includeHash\n ? this.latestLocation.hash === next.hash\n : true\n const searchTest =\n activeOptions?.includeSearch ?? true\n ? deepEqual(this.latestLocation.search, next.search, true)\n : true\n\n // The final \"active\" test\n const isActive = pathTest && hashTest && searchTest\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\n // All is well? Navigate!\n this.commitLocation({ ...next, replace, resetScroll, startTransition })\n }\n }\n\n // The click handler\n const handleFocus = (e: MouseEvent) => {\n if (preload) {\n this.preloadRoute(nextOpts as any).catch((err) => {\n console.warn(err)\n console.warn(preloadWarning)\n })\n }\n }\n\n const handleTouchStart = (e: TouchEvent) => {\n this.preloadRoute(nextOpts as any).catch((err) => {\n console.warn(err)\n console.warn(preloadWarning)\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 as any).catch((err) => {\n console.warn(err)\n console.warn(preloadWarning)\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 handleTouchStart,\n isActive,\n disabled,\n }\n }\n\n matchRoute: MatchRouteFn<TRouteTree> = (location, opts) => {\n location = {\n ...location,\n to: location.to\n ? this.resolvePathWithBase((location.from || '') as string, location.to)\n : undefined,\n } as any\n\n const next = this.buildLocation(location as any)\n\n if (opts?.pending && this.state.status !== 'pending') {\n return false\n }\n\n const baseLocation = opts?.pending\n ? this.latestLocation\n : this.state.resolvedLocation\n\n // const baseLocation = state.resolvedLocation\n\n if (!baseLocation) {\n return false\n }\n\n const match = matchPathname(this.basepath, baseLocation.pathname, {\n ...opts,\n to: next.pathname,\n }) as any\n\n if (!match) {\n return false\n }\n\n if (match && (opts?.includeSearch ?? true)) {\n return deepEqual(baseLocation.search, next.search, true) ? match : false\n }\n\n return match\n }\n\n injectHtml = async (html: string | (() => Promise<string> | string)) => {\n this.injectedHtml.push(html)\n }\n\n dehydrateData = <T>(key: any, getData: T | (() => Promise<T> | T)) => {\n if (typeof document === 'undefined') {\n const strKey = typeof key === 'string' ? key : JSON.stringify(key)\n\n this.injectHtml(async () => {\n const id = `__TSR_DEHYDRATED__${strKey}`\n const data =\n typeof getData === 'function' ? await (getData as any)() : getData\n return `<script id='${id}' suppressHydrationWarning>window[\"__TSR_DEHYDRATED__${escapeJSON(\n strKey,\n )}\"] = ${JSON.stringify(data)}\n ;(() => {\n var el = document.getElementById('${id}')\n el.parentElement.removeChild(el)\n })()\n </script>`\n })\n\n return () => this.hydrateData<T>(key)\n }\n\n return () => undefined\n }\n\n hydrateData = <T extends any = unknown>(key: any) => {\n if (typeof document !== 'undefined') {\n const strKey = typeof key === 'string' ? key : JSON.stringify(key)\n\n return window[`__TSR_DEHYDRATED__${strKey}` as any] as T\n }\n\n return undefined\n }\n\n // dehydrate = (): DehydratedRouter => {\n // return {\n // state: {\n // dehydratedMatches: this.state.matches.map((d) =>\n // pick(d, ['fetchedAt', 'invalid', 'id', 'status', 'updatedAt']),\n // ),\n // },\n // }\n // }\n\n // hydrate = async (__do_not_use_server_ctx?: HydrationCtx) => {\n // let _ctx = __do_not_use_server_ctx\n // // Client hydrates from window\n // if (typeof document !== 'undefined') {\n // _ctx = window.__TSR_DEHYDRATED__\n // }\n\n // invariant(\n // _ctx,\n // 'Expected to find a __TSR_DEHYDRATED__ property on window... but we did not. Did you forget to render <DehydrateRouter /> in your app?',\n // )\n\n // const ctx = _ctx\n // this.dehydratedData = ctx.payload as any\n // this.options.hydrate?.(ctx.payload as any)\n // const dehydratedState = ctx.router.state\n\n // let matches = this.matchRoutes(\n // this.state.location.pathname,\n // this.state.location.search,\n // ).map((match) => {\n // const dehydratedMatch = dehydratedState.dehydratedMatches.find(\n // (d) => d.id === match.id,\n // )\n\n // invariant(\n // dehydratedMatch,\n // `Could not find a client-side match for dehydrated match with id: ${match.id}!`,\n // )\n\n // if (dehydratedMatch) {\n // return {\n // ...match,\n // ...dehydratedMatch,\n // }\n // }\n // return match\n // })\n\n // this.setState((s) => {\n // return {\n // ...s,\n // matches: dehydratedState.dehydratedMatches as any,\n // }\n // })\n // }\n\n // resolveMatchPromise = (matchId: string, key: string, value: any) => {\n // state.matches\n // .find((d) => d.id === matchId)\n // ?.__promisesByKey[key]?.resolve(value)\n // }\n}\n\n// A function that takes an import() argument which is a function and returns a new function that will\n// proxy arguments from the caller to the imported function, retaining all type\n// information along the way\nexport function lazyFn<\n T extends Record<string, (...args: any[]) => any>,\n TKey extends keyof T = 'default',\n>(fn: () => Promise<T>, key?: TKey) {\n return async (...args: Parameters<T[TKey]>): Promise<ReturnType<T[TKey]>> => {\n const imported = await fn()\n return imported[key || 'default'](...args)\n }\n}\n\nfunction isCtrlEvent(e: MouseEvent) {\n return !!(e.metaKey || e.altKey || e.ctrlKey || e.shiftKey)\n}\n"],"names":["componentTypes","preloadWarning","Router","tempLocationKey","Math","round","random","resetNextScroll","navigateTimeout","latestLoadPromise","Promise","resolve","subscribers","Set","pendingMatches","injectedHtml","constructor","options","updateOptions","defaultPreloadDelay","context","undefined","stringifySearch","defaultStringifySearch","parseSearch","defaultParseSearch","startReactTransition","warning","setState","newOptions","basepath","trimPath","history","createBrowserHistory","latestLocation","parseLocation","routeTree","buildRouteTree","state","getInitialRouterState","routesById","routesByPath","recurseRoutes","childRoutes","forEach","childRoute","i","init","originalIndex","existingRoute","id","invariant","String","isRoot","path","trimmedFullPath","trimPathRight","fullPath","endsWith","children","length","flatRoutes","Object","values","map","d","trimmed","parsed","parsePathname","value","shift","score","type","child","index","sort","a","b","isIndex","min","rank","subscribe","eventType","fn","listener","add","delete","emit","routerEvent","checkLatest","promise","previousLocation","parse","pathname","search","hash","parsedSearch","searchStr","replaceEqualDeep","split","reverse","href","location","__tempLocation","__tempKey","parsedTempLocation","key","maskedLocation","resolvePathWithBase","from","resolvePath","cleanPath","looseRoutesById","matchRoutes","locationSearch","opts","routeParams","foundRoute","find","route","matchedParams","matchPathname","to","caseSensitive","fuzzy","routeCursor","matchedRoutes","parentRoute","unshift","parseErrors","parsedParamsError","parseParams","parsedParams","assign","err","PathParamError","message","cause","throwOnError","matches","interpolatedPath","interpolatePath","matchId","existingMatch","getRouteMatch","hasLoaders","loader","some","preload","routeMatch","routeId","params","joinPaths","updatedAt","Date","now","routeSearch","status","isFetching","invalid","error","paramsError","searchError","loadPromise","abortController","AbortController","shouldReloadDeps","fetchedAt","match","parentMatch","searchInfo","parentSearchInfo","validator","validateSearch","searchDidChange","SearchParamError","cancelMatch","abort","cancelMatches","buildLocation","build","dest","fromPathname","fromMatches","stayingMatches","filter","e","prevParams","last","nextParams","functionalUpdate","stringifyParams","Boolean","preSearchFilters","flat","postSearchFilters","preFilteredSearch","reduce","prev","next","destSearch","postFilteredSearch","hashStr","nextState","createHref","unmaskOnReload","buildWithMatches","maskedDest","maskedNext","foundMask","routeMasks","nextMatches","maskedMatches","maskedFinal","final","mask","pick","commitLocation","startTransition","clearTimeout","isSameUrl","replace","nextHistory","apply","resetScroll","buildAndCommitLocation","rest","navigate","toString","fromString","isExternal","URL","loadMatches","latestPromise","firstBadMatchIndex","entries","handleError","code","routerCode","isRedirect","onError","errorHandlerErr","parentContext","beforeLoadContext","beforeLoad","validResolvedMatches","slice","matchPromises","push","parentMatchPromise","handleIfRedirect","loaderContext","shouldReload","deepEqual","loaderData","componentsPromise","all","component","loaderPromise","then","s","onErrorError","load","reject","prevLocation","resolvedLocation","pathDidChange","fromLocation","toLocation","pathChanged","debug","previousMatches","exitingMatchIds","includes","enteringMatchIds","stayingMatchIds","hook","preloadRoute","navigateOpts","buildLink","userPreload","preloadDelay","userPreloadDelay","activeOptions","disabled","target","nextOpts","defaultPreload","currentPathSplit","nextPathSplit","pathIsFuzzyEqual","every","pathTest","exact","hashTest","includeHash","searchTest","includeSearch","isActive","handleClick","isCtrlEvent","defaultPrevented","button","preventDefault","handleFocus","catch","console","warn","handleTouchStart","handleEnter","preloadTimeout","setTimeout","handleLeave","matchRoute","pending","baseLocation","injectHtml","html","dehydrateData","getData","document","strKey","JSON","stringify","data","escapeJSON","hydrateData","window","lazyFn","args","imported","metaKey","altKey","ctrlKey","shiftKey"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"router.js","sources":["../../src/router.ts"],"sourcesContent":["import {\n HistoryLocation,\n HistoryState,\n RouterHistory,\n createBrowserHistory,\n} from '@tanstack/history'\n\n//\n\nimport {\n AnySearchSchema,\n AnyRoute,\n AnyContext,\n AnyPathParams,\n RouteMask,\n Route,\n LoaderFnContext,\n} from './route'\nimport { FullSearchSchema, RoutesById, RoutesByPath } from './routeInfo'\nimport { defaultParseSearch, defaultStringifySearch } from './searchParams'\nimport {\n PickAsRequired,\n Updater,\n NonNullableUpdater,\n replaceEqualDeep,\n deepEqual,\n escapeJSON,\n functionalUpdate,\n last,\n pick,\n} from './utils'\nimport {\n ErrorRouteComponent,\n PendingRouteComponent,\n RouteComponent,\n} from './route'\nimport { AnyRouteMatch, RouteMatch } from './Matches'\nimport { ParsedLocation } from './location'\nimport { LocationState } from './location'\nimport { SearchSerializer, SearchParser } from './searchParams'\nimport {\n BuildLinkFn,\n BuildLocationFn,\n CommitLocationOptions,\n InjectedHtmlEntry,\n MatchRouteFn,\n NavigateFn,\n PathParamError,\n SearchParamError,\n getInitialRouterState,\n getRouteMatch,\n} from './RouterProvider'\nimport {\n cleanPath,\n interpolatePath,\n joinPaths,\n matchPathname,\n parsePathname,\n resolvePath,\n trimPath,\n trimPathRight,\n} from './path'\nimport invariant from 'tiny-invariant'\nimport { isRedirect } from './redirects'\nimport warning from 'tiny-warning'\n\n//\n\ndeclare global {\n interface Window {\n __TSR_DEHYDRATED__?: HydrationCtx\n __TSR_ROUTER_CONTEXT__?: React.Context<Router<any>>\n }\n}\n\nexport interface Register {\n // router: Router\n}\n\nexport type AnyRouter = Router<AnyRoute, any>\n\nexport type RegisteredRouter = Register extends {\n router: infer TRouter extends AnyRouter\n}\n ? TRouter\n : AnyRouter\n\nexport type HydrationCtx = {\n router: DehydratedRouter\n payload: Record<string, any>\n}\n\nexport type RouterContextOptions<TRouteTree extends AnyRoute> =\n AnyContext extends TRouteTree['types']['routerContext']\n ? {\n context?: TRouteTree['types']['routerContext']\n }\n : {\n context: TRouteTree['types']['routerContext']\n }\n\nexport interface RouterOptions<\n TRouteTree extends AnyRoute,\n TDehydrated extends Record<string, any> = Record<string, any>,\n> {\n history?: RouterHistory\n stringifySearch?: SearchSerializer\n parseSearch?: SearchParser\n defaultPreload?: false | 'intent'\n defaultPreloadDelay?: number\n defaultComponent?: RouteComponent<AnySearchSchema, AnyPathParams, AnyContext>\n defaultErrorComponent?: ErrorRouteComponent<\n AnySearchSchema,\n AnyPathParams,\n AnyContext\n >\n defaultPendingComponent?: PendingRouteComponent<\n AnySearchSchema,\n AnyPathParams,\n AnyContext\n >\n defaultMaxAge?: number\n defaultGcMaxAge?: number\n defaultPreloadMaxAge?: number\n caseSensitive?: boolean\n routeTree?: TRouteTree\n basepath?: string\n createRoute?: (opts: { route: AnyRoute; router: AnyRouter }) => void\n context?: TRouteTree['types']['routerContext']\n // dehydrate?: () => TDehydrated\n // hydrate?: (dehydrated: TDehydrated) => void\n routeMasks?: RouteMask<TRouteTree>[]\n unmaskOnReload?: boolean\n}\n\nexport interface RouterState<TRouteTree extends AnyRoute = AnyRoute> {\n status: 'pending' | 'idle'\n matches: RouteMatch<TRouteTree>[]\n pendingMatches: RouteMatch<TRouteTree>[]\n location: ParsedLocation<FullSearchSchema<TRouteTree>>\n resolvedLocation: ParsedLocation<FullSearchSchema<TRouteTree>>\n lastUpdated: number\n}\n\nexport type ListenerFn<TEvent extends RouterEvent> = (event: TEvent) => 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?: true | NonNullableUpdater<LocationState>\n mask?: {\n to?: string | number | null\n params?: true | Updater<unknown>\n search?: true | Updater<unknown>\n hash?: true | Updater<string>\n state?: true | NonNullableUpdater<LocationState>\n unmaskOnReload?: boolean\n }\n from?: string\n}\n\nexport interface DehydratedRouterState {\n dehydratedMatches: DehydratedRouteMatch[]\n}\n\nexport type DehydratedRouteMatch = Pick<\n RouteMatch,\n 'fetchedAt' | 'invalid' | 'id' | 'status' | 'updatedAt'\n>\n\nexport interface DehydratedRouter {\n state: DehydratedRouterState\n}\n\nexport type RouterConstructorOptions<\n TRouteTree extends AnyRoute,\n TDehydrated extends Record<string, any>,\n> = Omit<RouterOptions<TRouteTree, TDehydrated>, 'context'> &\n RouterContextOptions<TRouteTree>\n\nexport const componentTypes = [\n 'component',\n 'errorComponent',\n 'pendingComponent',\n] as const\n\nexport type RouterEvents = {\n onBeforeLoad: {\n type: 'onBeforeLoad'\n fromLocation: ParsedLocation\n toLocation: ParsedLocation\n pathChanged: boolean\n }\n onLoad: {\n type: 'onLoad'\n fromLocation: ParsedLocation\n toLocation: ParsedLocation\n pathChanged: boolean\n }\n onResolved: {\n type: 'onResolved'\n fromLocation: ParsedLocation\n toLocation: ParsedLocation\n pathChanged: boolean\n }\n}\n\nexport type RouterEvent = RouterEvents[keyof RouterEvents]\n\nexport type RouterListener<TRouterEvent extends RouterEvent> = {\n eventType: TRouterEvent['type']\n fn: ListenerFn<TRouterEvent>\n}\n\ntype LinkCurrentTargetElement = {\n preloadTimeout?: null | ReturnType<typeof setTimeout>\n}\n\nconst preloadWarning = 'Error preloading route! ☝️'\n\nexport class Router<\n TRouteTree extends AnyRoute = AnyRoute,\n TDehydrated extends Record<string, any> = Record<string, any>,\n> {\n // Option-independent properties\n tempLocationKey: string | undefined = `${Math.round(\n Math.random() * 10000000,\n )}`\n resetNextScroll: boolean = true\n navigateTimeout: NodeJS.Timeout | null = null\n latestLoadPromise: Promise<void> = Promise.resolve()\n subscribers = new Set<RouterListener<RouterEvent>>()\n pendingMatches: AnyRouteMatch[] = []\n injectedHtml: InjectedHtmlEntry[] = []\n dehydratedData?: TDehydrated\n\n // Must build in constructor\n state!: RouterState<TRouteTree>\n options!: PickAsRequired<\n RouterOptions<TRouteTree, TDehydrated>,\n 'stringifySearch' | 'parseSearch' | 'context'\n >\n history!: RouterHistory\n latestLocation!: ParsedLocation\n basepath!: string\n routeTree!: TRouteTree\n routesById!: RoutesById<TRouteTree>\n routesByPath!: RoutesByPath<TRouteTree>\n flatRoutes!: AnyRoute[]\n\n constructor(options: RouterConstructorOptions<TRouteTree, TDehydrated>) {\n this.updateOptions({\n defaultPreloadDelay: 50,\n context: undefined!,\n ...options,\n stringifySearch: options?.stringifySearch ?? defaultStringifySearch,\n parseSearch: options?.parseSearch ?? defaultParseSearch,\n })\n }\n\n startReactTransition: (fn: () => void) => void = () => {\n warning(\n false,\n 'startReactTransition implementation is missing. If you see this, please file an issue.',\n )\n }\n\n setState: (\n fn: (s: RouterState<TRouteTree>) => RouterState<TRouteTree>,\n ) => void = () => {\n warning(\n false,\n 'setState implementation is missing. If you see this, please file an issue.',\n )\n }\n\n updateOptions = (\n newOptions: PickAsRequired<\n RouterOptions<TRouteTree, TDehydrated>,\n 'stringifySearch' | 'parseSearch' | 'context'\n >,\n ) => {\n const previousOptions = this.options\n this.options = {\n ...this.options,\n ...newOptions,\n }\n\n this.basepath = `/${trimPath(newOptions.basepath ?? '') ?? ''}`\n\n if (\n !this.history ||\n (this.options.history && this.options.history !== this.history)\n ) {\n this.history = this.options.history ?? createBrowserHistory()\n this.latestLocation = this.parseLocation()\n }\n\n if (this.options.routeTree !== this.routeTree) {\n this.routeTree = this.options.routeTree as TRouteTree\n this.buildRouteTree()\n }\n\n if (!this.state) {\n this.state = getInitialRouterState(this.latestLocation)\n }\n }\n\n buildRouteTree = () => {\n this.routesById = {} as RoutesById<TRouteTree>\n this.routesByPath = {} as RoutesByPath<TRouteTree>\n\n const recurseRoutes = (childRoutes: AnyRoute[]) => {\n childRoutes.forEach((childRoute, i) => {\n // if (typeof childRoute === 'function') {\n // childRoute = (childRoute as any)()\n // }\n childRoute.init({ originalIndex: i })\n\n const existingRoute = (this.routesById as any)[childRoute.id]\n\n invariant(\n !existingRoute,\n `Duplicate routes found with id: ${String(childRoute.id)}`,\n )\n ;(this.routesById as any)[childRoute.id] = childRoute\n\n if (!childRoute.isRoot && childRoute.path) {\n const trimmedFullPath = trimPathRight(childRoute.fullPath)\n if (\n !(this.routesByPath as any)[trimmedFullPath] ||\n childRoute.fullPath.endsWith('/')\n ) {\n ;(this.routesByPath as any)[trimmedFullPath] = childRoute\n }\n }\n\n const children = childRoute.children as Route[]\n\n if (children?.length) {\n recurseRoutes(children)\n }\n })\n }\n\n recurseRoutes([this.routeTree])\n\n this.flatRoutes = (Object.values(this.routesByPath) as AnyRoute[])\n .map((d, i) => {\n const trimmed = trimPath(d.fullPath)\n const parsed = parsePathname(trimmed)\n\n while (parsed.length > 1 && parsed[0]?.value === '/') {\n parsed.shift()\n }\n\n const score = parsed.map((d) => {\n if (d.type === 'param') {\n return 0.5\n }\n\n if (d.type === 'wildcard') {\n return 0.25\n }\n\n return 1\n })\n\n return { child: d, trimmed, parsed, index: i, score }\n })\n .sort((a, b) => {\n let isIndex = a.trimmed === '/' ? 1 : b.trimmed === '/' ? -1 : 0\n\n if (isIndex !== 0) return isIndex\n\n const length = Math.min(a.score.length, b.score.length)\n\n // Sort by length of score\n if (a.score.length !== b.score.length) {\n return b.score.length - a.score.length\n }\n\n // Sort by min available score\n for (let i = 0; i < length; i++) {\n if (a.score[i] !== b.score[i]) {\n return b.score[i]! - a.score[i]!\n }\n }\n\n // Sort by min available parsed value\n for (let i = 0; i < length; i++) {\n if (a.parsed[i]!.value !== b.parsed[i]!.value) {\n return a.parsed[i]!.value! > b.parsed[i]!.value! ? 1 : -1\n }\n }\n\n // Sort by length of trimmed full path\n if (a.trimmed !== b.trimmed) {\n return a.trimmed > b.trimmed ? 1 : -1\n }\n\n // Sort by original index\n return a.index - b.index\n })\n .map((d, i) => {\n d.child.rank = i\n return d.child\n })\n }\n\n subscribe = <TType extends keyof RouterEvents>(\n eventType: TType,\n fn: ListenerFn<RouterEvents[TType]>,\n ) => {\n const listener: RouterListener<any> = {\n eventType,\n fn,\n }\n\n this.subscribers.add(listener)\n\n return () => {\n this.subscribers.delete(listener)\n }\n }\n\n emit = (routerEvent: RouterEvent) => {\n this.subscribers.forEach((listener) => {\n if (listener.eventType === routerEvent.type) {\n listener.fn(routerEvent)\n }\n })\n }\n\n checkLatest = (promise: Promise<void>): undefined | Promise<void> => {\n return this.latestLoadPromise !== promise\n ? this.latestLoadPromise\n : undefined\n }\n\n parseLocation = (\n previousLocation?: ParsedLocation,\n ): ParsedLocation<FullSearchSchema<TRouteTree>> => {\n const parse = ({\n pathname,\n search,\n hash,\n state,\n }: HistoryLocation): ParsedLocation<FullSearchSchema<TRouteTree>> => {\n const parsedSearch = this.options.parseSearch(search)\n\n return {\n pathname: pathname,\n searchStr: search,\n search: replaceEqualDeep(previousLocation?.search, parsedSearch) as any,\n hash: hash.split('#').reverse()[0] ?? '',\n href: `${pathname}${search}${hash}`,\n state: replaceEqualDeep(previousLocation?.state, state) as HistoryState,\n }\n }\n\n const location = parse(this.history.location)\n\n let { __tempLocation, __tempKey } = location.state\n\n if (__tempLocation && (!__tempKey || __tempKey === this.tempLocationKey)) {\n // Sync up the location keys\n const parsedTempLocation = parse(__tempLocation) as any\n parsedTempLocation.state.key = location.state.key\n\n delete parsedTempLocation.state.__tempLocation\n\n return {\n ...parsedTempLocation,\n maskedLocation: location,\n }\n }\n\n return location\n }\n\n resolvePathWithBase = (from: string, path: string) => {\n return resolvePath(this.basepath!, from, cleanPath(path))\n }\n\n get looseRoutesById() {\n return this.routesById as Record<string, AnyRoute>\n }\n\n matchRoutes = <TRouteTree extends AnyRoute>(\n pathname: string,\n locationSearch: AnySearchSchema,\n opts?: { throwOnError?: boolean; debug?: boolean },\n ): RouteMatch<TRouteTree>[] => {\n let routeParams: AnyPathParams = {}\n\n let foundRoute = this.flatRoutes.find((route) => {\n const matchedParams = matchPathname(\n this.basepath,\n trimPathRight(pathname),\n {\n to: route.fullPath,\n caseSensitive:\n route.options.caseSensitive ?? this.options.caseSensitive,\n fuzzy: false,\n },\n )\n\n if (matchedParams) {\n routeParams = matchedParams\n return true\n }\n\n return false\n })\n\n let routeCursor: AnyRoute =\n foundRoute || (this.routesById as any)['__root__']\n\n let matchedRoutes: AnyRoute[] = [routeCursor]\n // let includingLayouts = true\n while (routeCursor?.parentRoute) {\n routeCursor = routeCursor.parentRoute\n if (routeCursor) matchedRoutes.unshift(routeCursor)\n }\n\n // Existing matches are matches that are already loaded along with\n // pending matches that are still loading\n\n const parseErrors = matchedRoutes.map((route) => {\n let parsedParamsError\n\n if (route.options.parseParams) {\n try {\n const parsedParams = route.options.parseParams(routeParams)\n // Add the parsed params to the accumulated params bag\n Object.assign(routeParams, parsedParams)\n } catch (err: any) {\n parsedParamsError = new PathParamError(err.message, {\n cause: err,\n })\n\n if (opts?.throwOnError) {\n throw parsedParamsError\n }\n\n return parsedParamsError\n }\n }\n\n return\n })\n\n const matches = matchedRoutes.map((route, index) => {\n const interpolatedPath = interpolatePath(route.path, routeParams)\n const matchId = interpolatePath(route.id, routeParams, true)\n\n // Waste not, want not. If we already have a match for this route,\n // reuse it. This is important for layout routes, which might stick\n // around between navigation actions that only change leaf routes.\n const existingMatch = getRouteMatch(this.state, matchId)\n\n const cause = this.state.matches.find((d) => d.id === matchId)\n ? 'stay'\n : 'enter'\n\n if (existingMatch) {\n return { ...existingMatch, cause }\n }\n\n // Create a fresh route match\n const hasLoaders = !!(\n route.options.loader ||\n componentTypes.some((d) => (route.options[d] as any)?.preload)\n )\n\n const routeMatch: AnyRouteMatch = {\n id: matchId,\n routeId: route.id,\n params: routeParams,\n pathname: joinPaths([this.basepath, interpolatedPath]),\n updatedAt: Date.now(),\n routeSearch: {},\n search: {} as any,\n status: hasLoaders ? 'pending' : 'success',\n isFetching: false,\n invalid: false,\n error: undefined,\n paramsError: parseErrors[index],\n searchError: undefined,\n loadPromise: Promise.resolve(),\n context: undefined!,\n abortController: new AbortController(),\n shouldReloadDeps: undefined,\n fetchedAt: 0,\n cause,\n }\n\n return routeMatch\n })\n\n // Take each match and resolve its search params and context\n // This has to happen after the matches are created or found\n // so that we can use the parent match's search params and context\n matches.forEach((match, i): any => {\n const parentMatch = matches[i - 1]\n const route = this.looseRoutesById[match.routeId]!\n\n const searchInfo = (() => {\n // Validate the search params and stabilize them\n const parentSearchInfo = {\n search: parentMatch?.search ?? locationSearch,\n routeSearch: parentMatch?.routeSearch ?? locationSearch,\n }\n\n try {\n const validator =\n typeof route.options.validateSearch === 'object'\n ? route.options.validateSearch.parse\n : route.options.validateSearch\n\n let routeSearch = validator?.(parentSearchInfo.search) ?? {}\n\n let search = {\n ...parentSearchInfo.search,\n ...routeSearch,\n }\n\n routeSearch = replaceEqualDeep(match.routeSearch, routeSearch)\n search = replaceEqualDeep(match.search, search)\n\n return {\n routeSearch,\n search,\n searchDidChange: match.routeSearch !== routeSearch,\n }\n } catch (err: any) {\n match.searchError = new SearchParamError(err.message, {\n cause: err,\n })\n\n if (opts?.throwOnError) {\n throw match.searchError\n }\n\n return parentSearchInfo\n }\n })()\n\n Object.assign(match, searchInfo)\n })\n\n return matches as any\n }\n\n cancelMatch = (id: string) => {\n getRouteMatch(this.state, id)?.abortController?.abort()\n }\n\n cancelMatches = () => {\n this.state.matches.forEach((match) => {\n this.cancelMatch(match.id)\n })\n }\n\n buildLocation: BuildLocationFn<TRouteTree> = (opts) => {\n const build = (\n dest: BuildNextOptions & {\n unmaskOnReload?: boolean\n } = {},\n matches?: AnyRouteMatch[],\n ): ParsedLocation => {\n const from = this.latestLocation\n const fromPathname = dest.from ?? from.pathname\n\n let pathname = this.resolvePathWithBase(fromPathname, `${dest.to ?? ''}`)\n\n const fromMatches = this.matchRoutes(fromPathname, from.search)\n const stayingMatches = matches?.filter(\n (d) => fromMatches?.find((e) => e.routeId === d.routeId),\n )\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 matches\n ?.map((d) => this.looseRoutesById[d.routeId]!.options.stringifyParams)\n .filter(Boolean)\n .forEach((fn) => {\n nextParams = { ...nextParams!, ...fn!(nextParams!) }\n })\n }\n\n pathname = interpolatePath(pathname, nextParams ?? {})\n\n const preSearchFilters =\n stayingMatches\n ?.map(\n (match) =>\n this.looseRoutesById[match.routeId]!.options.preSearchFilters ??\n [],\n )\n .flat()\n .filter(Boolean) ?? []\n\n const postSearchFilters =\n stayingMatches\n ?.map(\n (match) =>\n this.looseRoutesById[match.routeId]!.options.postSearchFilters ??\n [],\n )\n .flat()\n .filter(Boolean) ?? []\n\n // Pre filters first\n const preFilteredSearch = preSearchFilters?.length\n ? preSearchFilters?.reduce(\n (prev, next) => next(prev) as any,\n from.search,\n )\n : from.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 : preSearchFilters?.length\n ? preFilteredSearch // Preserve resolvedFrom filters\n : {}\n\n // Then post filters\n const postFilteredSearch = postSearchFilters?.length\n ? postSearchFilters.reduce((prev, next) => next(prev), destSearch)\n : destSearch\n\n const search = replaceEqualDeep(from.search, postFilteredSearch)\n\n const searchStr = this.options.stringifySearch(search)\n\n const hash =\n dest.hash === true\n ? from.hash\n : dest.hash\n ? functionalUpdate(dest.hash!, from.hash)\n : from.hash\n\n const hashStr = hash ? `#${hash}` : ''\n\n let nextState =\n dest.state === true\n ? from.state\n : dest.state\n ? functionalUpdate(dest.state, from.state)\n : from.state\n\n nextState = replaceEqualDeep(from.state, nextState)\n\n return {\n pathname,\n search,\n searchStr,\n state: nextState as any,\n hash,\n href: this.history.createHref(`${pathname}${searchStr}${hashStr}`),\n unmaskOnReload: dest.unmaskOnReload,\n }\n }\n\n const buildWithMatches = (\n dest: BuildNextOptions = {},\n maskedDest?: BuildNextOptions,\n ) => {\n let next = build(dest)\n let maskedNext = maskedDest ? build(maskedDest) : undefined\n\n if (!maskedNext) {\n let params = {}\n\n let foundMask = this.options.routeMasks?.find((d) => {\n const match = matchPathname(this.basepath, next.pathname, {\n to: d.from,\n caseSensitive: false,\n fuzzy: false,\n })\n\n if (match) {\n params = match\n return true\n }\n\n return false\n })\n\n if (foundMask) {\n foundMask = {\n ...foundMask,\n from: interpolatePath(foundMask.from, params) as any,\n }\n maskedDest = foundMask\n maskedNext = build(maskedDest)\n }\n }\n\n const nextMatches = this.matchRoutes(next.pathname, next.search)\n const maskedMatches = maskedNext\n ? this.matchRoutes(maskedNext.pathname, maskedNext.search)\n : undefined\n const maskedFinal = maskedNext\n ? build(maskedDest, maskedMatches)\n : undefined\n\n const final = build(dest, nextMatches)\n\n if (maskedFinal) {\n final.maskedLocation = maskedFinal\n }\n\n return final\n }\n\n if (opts.mask) {\n return buildWithMatches(opts, {\n ...pick(opts, ['from']),\n ...opts.mask,\n })\n }\n\n return buildWithMatches(opts)\n }\n\n commitLocation = async ({\n startTransition,\n ...next\n }: ParsedLocation & CommitLocationOptions) => {\n if (this.navigateTimeout) clearTimeout(this.navigateTimeout)\n\n const isSameUrl = this.latestLocation.href === next.href\n\n // If the next urls are the same and we're not replacing,\n // do nothing\n if (!isSameUrl || !next.replace) {\n let { maskedLocation, ...nextHistory } = next\n\n if (maskedLocation) {\n nextHistory = {\n ...maskedLocation,\n state: {\n ...maskedLocation.state,\n __tempKey: undefined,\n __tempLocation: {\n ...nextHistory,\n search: nextHistory.searchStr,\n state: {\n ...nextHistory.state,\n __tempKey: undefined!,\n __tempLocation: undefined!,\n key: undefined!,\n },\n },\n },\n }\n\n if (\n nextHistory.unmaskOnReload ??\n this.options.unmaskOnReload ??\n false\n ) {\n nextHistory.state.__tempKey = this.tempLocationKey\n }\n }\n\n const apply = () => {\n this.history[next.replace ? 'replace' : 'push'](\n nextHistory.href,\n nextHistory.state,\n )\n }\n\n if (startTransition ?? true) {\n this.startReactTransition(apply)\n } else {\n apply()\n }\n }\n\n this.resetNextScroll = next.resetScroll ?? true\n\n return this.latestLoadPromise\n }\n\n buildAndCommitLocation = ({\n replace,\n resetScroll,\n startTransition,\n ...rest\n }: BuildNextOptions & CommitLocationOptions = {}) => {\n const location = this.buildLocation(rest)\n return this.commitLocation({\n ...location,\n startTransition,\n replace,\n resetScroll,\n })\n }\n\n navigate: NavigateFn<TRouteTree> = ({ from, to = '', ...rest }) => {\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 = typeof from === 'undefined' ? from : String(from)\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.buildAndCommitLocation({\n ...rest,\n from: fromString,\n to: toString,\n })\n }\n\n loadMatches = async ({\n checkLatest,\n matches,\n preload,\n invalidate,\n }: {\n checkLatest: () => Promise<void> | undefined\n matches: AnyRouteMatch[]\n preload?: boolean\n invalidate?: boolean\n }): Promise<RouteMatch[]> => {\n let latestPromise\n let firstBadMatchIndex: number | undefined\n\n // Check each match middleware to see if the route can be accessed\n try {\n for (let [index, match] of matches.entries()) {\n const parentMatch = matches[index - 1]\n const route = this.looseRoutesById[match.routeId]!\n\n const handleError = (err: any, code: string) => {\n err.routerCode = code\n firstBadMatchIndex = firstBadMatchIndex ?? index\n\n if (isRedirect(err)) {\n throw err\n }\n\n try {\n route.options.onError?.(err)\n } catch (errorHandlerErr) {\n err = errorHandlerErr\n\n if (isRedirect(errorHandlerErr)) {\n throw errorHandlerErr\n }\n }\n\n matches[index] = match = {\n ...match,\n error: err,\n status: 'error',\n updatedAt: Date.now(),\n }\n }\n\n try {\n if (match.paramsError) {\n handleError(match.paramsError, 'PARSE_PARAMS')\n }\n\n if (match.searchError) {\n handleError(match.searchError, 'VALIDATE_SEARCH')\n }\n\n const parentContext =\n parentMatch?.context ?? this.options.context ?? {}\n\n const beforeLoadContext =\n (await route.options.beforeLoad?.({\n search: match.search,\n abortController: match.abortController,\n params: match.params,\n preload: !!preload,\n context: parentContext,\n location: this.state.location,\n // TOOD: just expose state and router, etc\n navigate: (opts) =>\n this.navigate({ ...opts, from: match.pathname } as any),\n buildLocation: this.buildLocation,\n cause: match.cause,\n })) ?? ({} as any)\n\n const context = {\n ...parentContext,\n ...beforeLoadContext,\n }\n\n matches[index] = match = {\n ...match,\n context: replaceEqualDeep(match.context, context),\n }\n } catch (err) {\n handleError(err, 'BEFORE_LOAD')\n break\n }\n }\n } catch (err) {\n if (isRedirect(err)) {\n if (!preload) this.navigate(err as any)\n return matches\n }\n\n throw err\n }\n\n const validResolvedMatches = matches.slice(0, firstBadMatchIndex)\n const matchPromises: Promise<any>[] = []\n\n validResolvedMatches.forEach((match, index) => {\n matchPromises.push(\n (async () => {\n const parentMatchPromise = matchPromises[index - 1]\n const route = this.looseRoutesById[match.routeId]!\n\n const handleIfRedirect = (err: any) => {\n if (isRedirect(err)) {\n if (!preload) {\n this.navigate(err as any)\n }\n return true\n }\n return false\n }\n\n let loadPromise: Promise<void> | undefined\n\n matches[index] = match = {\n ...match,\n fetchedAt: Date.now(),\n invalid: false,\n }\n\n if (match.isFetching) {\n loadPromise = getRouteMatch(this.state, match.id)?.loadPromise\n } else {\n const loaderContext: LoaderFnContext = {\n params: match.params,\n search: match.search,\n preload: !!preload,\n parentMatchPromise,\n abortController: match.abortController,\n context: match.context,\n location: this.state.location,\n navigate: (opts) =>\n this.navigate({ ...opts, from: match.pathname } as any),\n cause: match.cause,\n }\n\n // Default to reloading the route all the time\n let shouldReload = true\n\n let shouldReloadDeps =\n typeof route.options.shouldReload === 'function'\n ? route.options.shouldReload?.(loaderContext)\n : !!(route.options.shouldReload ?? true)\n\n if (match.cause === 'enter' || invalidate) {\n match.shouldReloadDeps = shouldReloadDeps\n } else if (match.cause === 'stay') {\n if (typeof shouldReloadDeps === 'object') {\n // compare the deps to see if they've changed\n shouldReload = !deepEqual(\n shouldReloadDeps,\n match.shouldReloadDeps,\n )\n\n match.shouldReloadDeps = shouldReloadDeps\n } else {\n shouldReload = !!shouldReloadDeps\n }\n }\n\n // If the user doesn't want the route to reload, just\n // resolve with the existing loader data\n\n if (!shouldReload) {\n loadPromise = Promise.resolve(match.loaderData)\n } else {\n // Otherwise, load the route\n matches[index] = match = {\n ...match,\n isFetching: true,\n }\n\n const componentsPromise = Promise.all(\n componentTypes.map(async (type) => {\n const component = route.options[type]\n\n if ((component as any)?.preload) {\n await (component as any).preload()\n }\n }),\n )\n\n const loaderPromise = route.options.loader?.(loaderContext)\n\n loadPromise = Promise.all([\n componentsPromise,\n loaderPromise,\n ]).then((d) => d[1])\n }\n }\n\n matches[index] = match = {\n ...match,\n loadPromise,\n }\n\n if (!preload) {\n this.setState((s) => ({\n ...s,\n matches: s.matches.map((d) => (d.id === match.id ? match : d)),\n }))\n }\n\n try {\n const loaderData = await loadPromise\n if ((latestPromise = checkLatest())) return await latestPromise\n\n matches[index] = match = {\n ...match,\n error: undefined,\n status: 'success',\n isFetching: false,\n updatedAt: Date.now(),\n loaderData,\n loadPromise: undefined,\n }\n } catch (error) {\n if ((latestPromise = checkLatest())) return await latestPromise\n if (handleIfRedirect(error)) return\n\n try {\n route.options.onError?.(error)\n } catch (onErrorError) {\n error = onErrorError\n if (handleIfRedirect(onErrorError)) return\n }\n\n matches[index] = match = {\n ...match,\n error,\n status: 'error',\n isFetching: false,\n updatedAt: Date.now(),\n }\n }\n\n if (!preload) {\n this.setState((s) => ({\n ...s,\n matches: s.matches.map((d) => (d.id === match.id ? match : d)),\n }))\n }\n })(),\n )\n })\n\n await Promise.all(matchPromises)\n return matches\n }\n\n invalidate = () =>\n this.load({\n invalidate: true,\n })\n\n load = async (opts?: { invalidate?: boolean }): Promise<void> => {\n const promise = new Promise<void>(async (resolve, reject) => {\n const next = this.latestLocation\n const prevLocation = this.state.resolvedLocation\n const pathDidChange = prevLocation!.href !== next.href\n let latestPromise: Promise<void> | undefined | null\n\n // Cancel any pending matches\n this.cancelMatches()\n\n this.emit({\n type: 'onBeforeLoad',\n fromLocation: prevLocation,\n toLocation: next,\n pathChanged: pathDidChange,\n })\n\n // Match the routes\n let matches: RouteMatch<any, any>[] = this.matchRoutes(\n next.pathname,\n next.search,\n {\n debug: true,\n },\n )\n\n this.pendingMatches = matches\n\n const previousMatches = this.state.matches\n\n // Ingest the new matches\n this.setState((s) => ({\n ...s,\n status: 'pending',\n location: next,\n matches,\n }))\n\n try {\n try {\n // Load the matches\n await this.loadMatches({\n matches,\n checkLatest: () => this.checkLatest(promise),\n invalidate: opts?.invalidate,\n })\n } catch (err) {\n // swallow this error, since we'll display the\n // errors on the route components\n }\n\n // Only apply the latest transition\n if ((latestPromise = this.checkLatest(promise))) {\n return latestPromise\n }\n\n const exitingMatchIds = previousMatches.filter(\n (id) => !this.pendingMatches.includes(id),\n )\n const enteringMatchIds = this.pendingMatches.filter(\n (id) => !previousMatches.includes(id),\n )\n const stayingMatchIds = previousMatches.filter((id) =>\n this.pendingMatches.includes(id),\n )\n\n // setState((s) => ({\n // ...s,\n // status: 'idle',\n // resolvedLocation: s.location,\n // }))\n\n //\n ;(\n [\n [exitingMatchIds, 'onLeave'],\n [enteringMatchIds, 'onEnter'],\n [stayingMatchIds, 'onTransition'],\n ] as const\n ).forEach(([matches, hook]) => {\n matches.forEach((match) => {\n this.looseRoutesById[match.routeId]!.options[hook]?.(match)\n })\n })\n\n this.emit({\n type: 'onLoad',\n fromLocation: prevLocation,\n toLocation: next,\n pathChanged: pathDidChange,\n })\n\n resolve()\n } catch (err) {\n // Only apply the latest transition\n if ((latestPromise = this.checkLatest(promise))) {\n return latestPromise\n }\n\n reject(err)\n }\n })\n\n this.latestLoadPromise = promise\n\n return this.latestLoadPromise\n }\n\n preloadRoute = async (\n navigateOpts: BuildNextOptions = this.state.location,\n ) => {\n let next = this.buildLocation(navigateOpts)\n\n let matches = this.matchRoutes(next.pathname, next.search, {\n throwOnError: true,\n })\n\n await this.loadMatches({\n matches,\n preload: true,\n checkLatest: () => undefined,\n })\n\n return [last(matches)!, matches] as const\n }\n\n buildLink: BuildLinkFn<TRouteTree> = (dest) => {\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 const {\n to,\n preload: userPreload,\n preloadDelay: userPreloadDelay,\n activeOptions,\n disabled,\n target,\n replace,\n resetScroll,\n startTransition,\n } = dest\n\n try {\n new URL(`${to}`)\n return {\n type: 'external',\n href: to as any,\n }\n } catch (e) {}\n\n const nextOpts = dest\n const next = this.buildLocation(nextOpts as any)\n\n const preload = userPreload ?? this.options.defaultPreload\n const preloadDelay =\n userPreloadDelay ?? this.options.defaultPreloadDelay ?? 0\n\n // Compare path/hash for matches\n const currentPathSplit = this.latestLocation.pathname.split('/')\n const nextPathSplit = next.pathname.split('/')\n const pathIsFuzzyEqual = nextPathSplit.every(\n (d, i) => d === currentPathSplit[i],\n )\n // Combine the matches based on user this.options\n const pathTest = activeOptions?.exact\n ? this.latestLocation.pathname === next.pathname\n : pathIsFuzzyEqual\n const hashTest = activeOptions?.includeHash\n ? this.latestLocation.hash === next.hash\n : true\n const searchTest =\n activeOptions?.includeSearch ?? true\n ? deepEqual(this.latestLocation.search, next.search, true)\n : true\n\n // The final \"active\" test\n const isActive = pathTest && hashTest && searchTest\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\n // All is well? Navigate!\n this.commitLocation({ ...next, replace, resetScroll, startTransition })\n }\n }\n\n // The click handler\n const handleFocus = (e: MouseEvent) => {\n if (preload) {\n this.preloadRoute(nextOpts as any).catch((err) => {\n console.warn(err)\n console.warn(preloadWarning)\n })\n }\n }\n\n const handleTouchStart = (e: TouchEvent) => {\n this.preloadRoute(nextOpts as any).catch((err) => {\n console.warn(err)\n console.warn(preloadWarning)\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 as any).catch((err) => {\n console.warn(err)\n console.warn(preloadWarning)\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 handleTouchStart,\n isActive,\n disabled,\n }\n }\n\n matchRoute: MatchRouteFn<TRouteTree> = (location, opts) => {\n location = {\n ...location,\n to: location.to\n ? this.resolvePathWithBase((location.from || '') as string, location.to)\n : undefined,\n } as any\n\n const next = this.buildLocation(location as any)\n\n if (opts?.pending && this.state.status !== 'pending') {\n return false\n }\n\n const baseLocation = opts?.pending\n ? this.latestLocation\n : this.state.resolvedLocation\n\n // const baseLocation = state.resolvedLocation\n\n if (!baseLocation) {\n return false\n }\n\n const match = matchPathname(this.basepath, baseLocation.pathname, {\n ...opts,\n to: next.pathname,\n }) as any\n\n if (!match) {\n return false\n }\n\n if (match && (opts?.includeSearch ?? true)) {\n return deepEqual(baseLocation.search, next.search, true) ? match : false\n }\n\n return match\n }\n\n injectHtml = async (html: string | (() => Promise<string> | string)) => {\n this.injectedHtml.push(html)\n }\n\n dehydrateData = <T>(key: any, getData: T | (() => Promise<T> | T)) => {\n if (typeof document === 'undefined') {\n const strKey = typeof key === 'string' ? key : JSON.stringify(key)\n\n this.injectHtml(async () => {\n const id = `__TSR_DEHYDRATED__${strKey}`\n const data =\n typeof getData === 'function' ? await (getData as any)() : getData\n return `<script id='${id}' suppressHydrationWarning>window[\"__TSR_DEHYDRATED__${escapeJSON(\n strKey,\n )}\"] = ${JSON.stringify(data)}\n ;(() => {\n var el = document.getElementById('${id}')\n el.parentElement.removeChild(el)\n })()\n </script>`\n })\n\n return () => this.hydrateData<T>(key)\n }\n\n return () => undefined\n }\n\n hydrateData = <T extends any = unknown>(key: any) => {\n if (typeof document !== 'undefined') {\n const strKey = typeof key === 'string' ? key : JSON.stringify(key)\n\n return window[`__TSR_DEHYDRATED__${strKey}` as any] as T\n }\n\n return undefined\n }\n\n // dehydrate = (): DehydratedRouter => {\n // return {\n // state: {\n // dehydratedMatches: this.state.matches.map((d) =>\n // pick(d, ['fetchedAt', 'invalid', 'id', 'status', 'updatedAt']),\n // ),\n // },\n // }\n // }\n\n // hydrate = async (__do_not_use_server_ctx?: HydrationCtx) => {\n // let _ctx = __do_not_use_server_ctx\n // // Client hydrates from window\n // if (typeof document !== 'undefined') {\n // _ctx = window.__TSR_DEHYDRATED__\n // }\n\n // invariant(\n // _ctx,\n // 'Expected to find a __TSR_DEHYDRATED__ property on window... but we did not. Did you forget to render <DehydrateRouter /> in your app?',\n // )\n\n // const ctx = _ctx\n // this.dehydratedData = ctx.payload as any\n // this.options.hydrate?.(ctx.payload as any)\n // const dehydratedState = ctx.router.state\n\n // let matches = this.matchRoutes(\n // this.state.location.pathname,\n // this.state.location.search,\n // ).map((match) => {\n // const dehydratedMatch = dehydratedState.dehydratedMatches.find(\n // (d) => d.id === match.id,\n // )\n\n // invariant(\n // dehydratedMatch,\n // `Could not find a client-side match for dehydrated match with id: ${match.id}!`,\n // )\n\n // if (dehydratedMatch) {\n // return {\n // ...match,\n // ...dehydratedMatch,\n // }\n // }\n // return match\n // })\n\n // this.setState((s) => {\n // return {\n // ...s,\n // matches: dehydratedState.dehydratedMatches as any,\n // }\n // })\n // }\n\n // resolveMatchPromise = (matchId: string, key: string, value: any) => {\n // state.matches\n // .find((d) => d.id === matchId)\n // ?.__promisesByKey[key]?.resolve(value)\n // }\n}\n\n// A function that takes an import() argument which is a function and returns a new function that will\n// proxy arguments from the caller to the imported function, retaining all type\n// information along the way\nexport function lazyFn<\n T extends Record<string, (...args: any[]) => any>,\n TKey extends keyof T = 'default',\n>(fn: () => Promise<T>, key?: TKey) {\n return async (...args: Parameters<T[TKey]>): Promise<ReturnType<T[TKey]>> => {\n const imported = await fn()\n return imported[key || 'default'](...args)\n }\n}\n\nfunction isCtrlEvent(e: MouseEvent) {\n return !!(e.metaKey || e.altKey || e.ctrlKey || e.shiftKey)\n}\n"],"names":["componentTypes","preloadWarning","Router","tempLocationKey","Math","round","random","resetNextScroll","navigateTimeout","latestLoadPromise","Promise","resolve","subscribers","Set","pendingMatches","injectedHtml","constructor","options","updateOptions","defaultPreloadDelay","context","undefined","stringifySearch","defaultStringifySearch","parseSearch","defaultParseSearch","startReactTransition","warning","setState","newOptions","basepath","trimPath","history","createBrowserHistory","latestLocation","parseLocation","routeTree","buildRouteTree","state","getInitialRouterState","routesById","routesByPath","recurseRoutes","childRoutes","forEach","childRoute","i","init","originalIndex","existingRoute","id","invariant","String","isRoot","path","trimmedFullPath","trimPathRight","fullPath","endsWith","children","length","flatRoutes","Object","values","map","d","trimmed","parsed","parsePathname","value","shift","score","type","child","index","sort","a","b","isIndex","min","rank","subscribe","eventType","fn","listener","add","delete","emit","routerEvent","checkLatest","promise","previousLocation","parse","pathname","search","hash","parsedSearch","searchStr","replaceEqualDeep","split","reverse","href","location","__tempLocation","__tempKey","parsedTempLocation","key","maskedLocation","resolvePathWithBase","from","resolvePath","cleanPath","looseRoutesById","matchRoutes","locationSearch","opts","routeParams","foundRoute","find","route","matchedParams","matchPathname","to","caseSensitive","fuzzy","routeCursor","matchedRoutes","parentRoute","unshift","parseErrors","parsedParamsError","parseParams","parsedParams","assign","err","PathParamError","message","cause","throwOnError","matches","interpolatedPath","interpolatePath","matchId","existingMatch","getRouteMatch","hasLoaders","loader","some","preload","routeMatch","routeId","params","joinPaths","updatedAt","Date","now","routeSearch","status","isFetching","invalid","error","paramsError","searchError","loadPromise","abortController","AbortController","shouldReloadDeps","fetchedAt","match","parentMatch","searchInfo","parentSearchInfo","validator","validateSearch","searchDidChange","SearchParamError","cancelMatch","abort","cancelMatches","buildLocation","build","dest","fromPathname","fromMatches","stayingMatches","filter","e","prevParams","last","nextParams","functionalUpdate","stringifyParams","Boolean","preSearchFilters","flat","postSearchFilters","preFilteredSearch","reduce","prev","next","destSearch","postFilteredSearch","hashStr","nextState","createHref","unmaskOnReload","buildWithMatches","maskedDest","maskedNext","foundMask","routeMasks","nextMatches","maskedMatches","maskedFinal","final","mask","pick","commitLocation","startTransition","clearTimeout","isSameUrl","replace","nextHistory","apply","resetScroll","buildAndCommitLocation","rest","navigate","toString","fromString","isExternal","URL","loadMatches","invalidate","latestPromise","firstBadMatchIndex","entries","handleError","code","routerCode","isRedirect","onError","errorHandlerErr","parentContext","beforeLoadContext","beforeLoad","validResolvedMatches","slice","matchPromises","push","parentMatchPromise","handleIfRedirect","loaderContext","shouldReload","deepEqual","loaderData","componentsPromise","all","component","loaderPromise","then","s","onErrorError","load","reject","prevLocation","resolvedLocation","pathDidChange","fromLocation","toLocation","pathChanged","debug","previousMatches","exitingMatchIds","includes","enteringMatchIds","stayingMatchIds","hook","preloadRoute","navigateOpts","buildLink","userPreload","preloadDelay","userPreloadDelay","activeOptions","disabled","target","nextOpts","defaultPreload","currentPathSplit","nextPathSplit","pathIsFuzzyEqual","every","pathTest","exact","hashTest","includeHash","searchTest","includeSearch","isActive","handleClick","isCtrlEvent","defaultPrevented","button","preventDefault","handleFocus","catch","console","warn","handleTouchStart","handleEnter","preloadTimeout","setTimeout","handleLeave","matchRoute","pending","baseLocation","injectHtml","html","dehydrateData","getData","document","strKey","JSON","stringify","data","escapeJSON","hydrateData","window","lazyFn","args","imported","metaKey","altKey","ctrlKey","shiftKey"],"mappings":"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"}
|
|
@@ -10,14 +10,11 @@
|
|
|
10
10
|
*/
|
|
11
11
|
'use strict';
|
|
12
12
|
|
|
13
|
-
Object.defineProperty(exports, '__esModule', { value: true });
|
|
14
|
-
|
|
15
13
|
var React = require('react');
|
|
16
14
|
var RouterProvider = require('./RouterProvider.js');
|
|
17
15
|
var utils = require('./utils.js');
|
|
18
16
|
|
|
19
|
-
function
|
|
20
|
-
if (e && e.__esModule) return e;
|
|
17
|
+
function _interopNamespaceDefault(e) {
|
|
21
18
|
var n = Object.create(null);
|
|
22
19
|
if (e) {
|
|
23
20
|
Object.keys(e).forEach(function (k) {
|
|
@@ -30,11 +27,11 @@ function _interopNamespace(e) {
|
|
|
30
27
|
}
|
|
31
28
|
});
|
|
32
29
|
}
|
|
33
|
-
n
|
|
30
|
+
n.default = e;
|
|
34
31
|
return Object.freeze(n);
|
|
35
32
|
}
|
|
36
33
|
|
|
37
|
-
var React__namespace = /*#__PURE__*/
|
|
34
|
+
var React__namespace = /*#__PURE__*/_interopNamespaceDefault(React);
|
|
38
35
|
|
|
39
36
|
const useLayoutEffect = typeof window !== 'undefined' ? React__namespace.useLayoutEffect : React__namespace.useEffect;
|
|
40
37
|
const windowKey = 'window';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scroll-restoration.js","sources":["../../src/scroll-restoration.tsx"],"sourcesContent":["import * as React from 'react'\n\nconst useLayoutEffect =\n typeof window !== 'undefined' ? React.useLayoutEffect : React.useEffect\n\nimport { ParsedLocation } from './location'\nimport { useRouter } from './RouterProvider'\nimport { NonNullableUpdater, functionalUpdate } from './utils'\n\nconst windowKey = 'window'\nconst delimiter = '___'\n\nlet weakScrolledElements = new WeakSet<any>()\n\ntype CacheValue = Record<string, { scrollX: number; scrollY: number }>\ntype CacheState = {\n cached: CacheValue\n next: CacheValue\n}\n\ntype Cache = {\n state: CacheState\n set: (updater: NonNullableUpdater<CacheState>) => void\n}\n\nlet cache: Cache\n\nconst sessionsStorage = typeof window !== 'undefined' && window.sessionStorage\n\nexport type ScrollRestorationOptions = {\n getKey?: (location: ParsedLocation) => string\n}\n\nconst defaultGetKey = (location: ParsedLocation) => location.state.key!\n\nexport function useScrollRestoration(options?: ScrollRestorationOptions) {\n const router = useRouter()\n\n useLayoutEffect(() => {\n const getKey = options?.getKey || defaultGetKey\n\n if (sessionsStorage) {\n if (!cache) {\n cache = (() => {\n const storageKey = 'tsr-scroll-restoration-v2'\n\n const state: CacheState = JSON.parse(\n window.sessionStorage.getItem(storageKey) || 'null',\n ) || { cached: {}, next: {} }\n\n return {\n state,\n set: (updater) => {\n cache.state = functionalUpdate(updater, cache.state)\n window.sessionStorage.setItem(\n storageKey,\n JSON.stringify(cache.state),\n )\n },\n }\n })()\n }\n }\n\n const { history } = window\n if (history.scrollRestoration) {\n history.scrollRestoration = 'manual'\n }\n\n const onScroll = (event: Event) => {\n if (weakScrolledElements.has(event.target)) return\n weakScrolledElements.add(event.target)\n\n const elementSelector =\n event.target === document || event.target === window\n ? windowKey\n : getCssSelector(event.target)\n\n if (!cache.state.next[elementSelector]) {\n cache.set((c) => ({\n ...c,\n next: {\n ...c.next,\n [elementSelector]: {\n scrollX: NaN,\n scrollY: NaN,\n },\n },\n }))\n }\n }\n\n const getCssSelector = (el: any): string => {\n let path = [],\n parent\n while ((parent = el.parentNode)) {\n path.unshift(\n `${el.tagName}:nth-child(${\n ([].indexOf as any).call(parent.children, el) + 1\n })`,\n )\n el = parent\n }\n return `${path.join(' > ')}`.toLowerCase()\n }\n\n if (typeof document !== 'undefined') {\n document.addEventListener('scroll', onScroll, true)\n }\n\n const unsubOnBeforeLoad = router.subscribe('onBeforeLoad', (event) => {\n if (event.pathChanged) {\n const restoreKey = getKey(event.fromLocation)\n for (const elementSelector in cache.state.next) {\n const entry = cache.state.next[elementSelector]!\n if (elementSelector === windowKey) {\n entry.scrollX = window.scrollX || 0\n entry.scrollY = window.scrollY || 0\n } else if (elementSelector) {\n const element = document.querySelector(elementSelector)\n entry.scrollX = element?.scrollLeft || 0\n entry.scrollY = element?.scrollTop || 0\n }\n\n cache.set((c) => {\n const next = { ...c.next }\n delete next[elementSelector]\n\n return {\n ...c,\n next,\n cached: {\n ...c.cached,\n [[restoreKey, elementSelector].join(delimiter)]: entry,\n },\n }\n })\n }\n }\n })\n\n const unsubOnResolved = router.subscribe('onResolved', (event) => {\n if (event.pathChanged) {\n if (!router.resetNextScroll) {\n return\n }\n\n router.resetNextScroll = true\n\n const getKey = options?.getKey || defaultGetKey\n\n const restoreKey = getKey(event.toLocation)\n let windowRestored = false\n\n for (const cacheKey in cache.state.cached) {\n const entry = cache.state.cached[cacheKey]!\n const [key, elementSelector] = cacheKey.split(delimiter)\n if (key === restoreKey) {\n if (elementSelector === windowKey) {\n windowRestored = true\n window.scrollTo(entry.scrollX, entry.scrollY)\n } else if (elementSelector) {\n const element = document.querySelector(elementSelector)\n if (element) {\n element.scrollLeft = entry.scrollX\n element.scrollTop = entry.scrollY\n }\n }\n }\n }\n\n if (!windowRestored) {\n window.scrollTo(0, 0)\n }\n\n cache.set((c) => ({ ...c, next: {} }))\n weakScrolledElements = new WeakSet<any>()\n }\n })\n\n return () => {\n document.removeEventListener('scroll', onScroll)\n unsubOnBeforeLoad()\n unsubOnResolved()\n }\n }, [])\n}\n\nexport function ScrollRestoration(props: ScrollRestorationOptions) {\n useScrollRestoration(props)\n return null\n}\n"],"names":["useLayoutEffect","window","React","useEffect","windowKey","delimiter","weakScrolledElements","WeakSet","cache","sessionsStorage","sessionStorage","defaultGetKey","location","state","key","useScrollRestoration","options","router","useRouter","getKey","storageKey","JSON","parse","getItem","cached","next","set","updater","functionalUpdate","setItem","stringify","history","scrollRestoration","onScroll","event","has","target","add","elementSelector","document","getCssSelector","c","scrollX","NaN","scrollY","el","path","parent","parentNode","unshift","tagName","indexOf","call","children","join","toLowerCase","addEventListener","unsubOnBeforeLoad","subscribe","pathChanged","restoreKey","fromLocation","entry","element","querySelector","scrollLeft","scrollTop","unsubOnResolved","resetNextScroll","toLocation","windowRestored","cacheKey","split","scrollTo","removeEventListener","ScrollRestoration","props"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"scroll-restoration.js","sources":["../../src/scroll-restoration.tsx"],"sourcesContent":["import * as React from 'react'\n\nconst useLayoutEffect =\n typeof window !== 'undefined' ? React.useLayoutEffect : React.useEffect\n\nimport { ParsedLocation } from './location'\nimport { useRouter } from './RouterProvider'\nimport { NonNullableUpdater, functionalUpdate } from './utils'\n\nconst windowKey = 'window'\nconst delimiter = '___'\n\nlet weakScrolledElements = new WeakSet<any>()\n\ntype CacheValue = Record<string, { scrollX: number; scrollY: number }>\ntype CacheState = {\n cached: CacheValue\n next: CacheValue\n}\n\ntype Cache = {\n state: CacheState\n set: (updater: NonNullableUpdater<CacheState>) => void\n}\n\nlet cache: Cache\n\nconst sessionsStorage = typeof window !== 'undefined' && window.sessionStorage\n\nexport type ScrollRestorationOptions = {\n getKey?: (location: ParsedLocation) => string\n}\n\nconst defaultGetKey = (location: ParsedLocation) => location.state.key!\n\nexport function useScrollRestoration(options?: ScrollRestorationOptions) {\n const router = useRouter()\n\n useLayoutEffect(() => {\n const getKey = options?.getKey || defaultGetKey\n\n if (sessionsStorage) {\n if (!cache) {\n cache = (() => {\n const storageKey = 'tsr-scroll-restoration-v2'\n\n const state: CacheState = JSON.parse(\n window.sessionStorage.getItem(storageKey) || 'null',\n ) || { cached: {}, next: {} }\n\n return {\n state,\n set: (updater) => {\n cache.state = functionalUpdate(updater, cache.state)\n window.sessionStorage.setItem(\n storageKey,\n JSON.stringify(cache.state),\n )\n },\n }\n })()\n }\n }\n\n const { history } = window\n if (history.scrollRestoration) {\n history.scrollRestoration = 'manual'\n }\n\n const onScroll = (event: Event) => {\n if (weakScrolledElements.has(event.target)) return\n weakScrolledElements.add(event.target)\n\n const elementSelector =\n event.target === document || event.target === window\n ? windowKey\n : getCssSelector(event.target)\n\n if (!cache.state.next[elementSelector]) {\n cache.set((c) => ({\n ...c,\n next: {\n ...c.next,\n [elementSelector]: {\n scrollX: NaN,\n scrollY: NaN,\n },\n },\n }))\n }\n }\n\n const getCssSelector = (el: any): string => {\n let path = [],\n parent\n while ((parent = el.parentNode)) {\n path.unshift(\n `${el.tagName}:nth-child(${\n ([].indexOf as any).call(parent.children, el) + 1\n })`,\n )\n el = parent\n }\n return `${path.join(' > ')}`.toLowerCase()\n }\n\n if (typeof document !== 'undefined') {\n document.addEventListener('scroll', onScroll, true)\n }\n\n const unsubOnBeforeLoad = router.subscribe('onBeforeLoad', (event) => {\n if (event.pathChanged) {\n const restoreKey = getKey(event.fromLocation)\n for (const elementSelector in cache.state.next) {\n const entry = cache.state.next[elementSelector]!\n if (elementSelector === windowKey) {\n entry.scrollX = window.scrollX || 0\n entry.scrollY = window.scrollY || 0\n } else if (elementSelector) {\n const element = document.querySelector(elementSelector)\n entry.scrollX = element?.scrollLeft || 0\n entry.scrollY = element?.scrollTop || 0\n }\n\n cache.set((c) => {\n const next = { ...c.next }\n delete next[elementSelector]\n\n return {\n ...c,\n next,\n cached: {\n ...c.cached,\n [[restoreKey, elementSelector].join(delimiter)]: entry,\n },\n }\n })\n }\n }\n })\n\n const unsubOnResolved = router.subscribe('onResolved', (event) => {\n if (event.pathChanged) {\n if (!router.resetNextScroll) {\n return\n }\n\n router.resetNextScroll = true\n\n const getKey = options?.getKey || defaultGetKey\n\n const restoreKey = getKey(event.toLocation)\n let windowRestored = false\n\n for (const cacheKey in cache.state.cached) {\n const entry = cache.state.cached[cacheKey]!\n const [key, elementSelector] = cacheKey.split(delimiter)\n if (key === restoreKey) {\n if (elementSelector === windowKey) {\n windowRestored = true\n window.scrollTo(entry.scrollX, entry.scrollY)\n } else if (elementSelector) {\n const element = document.querySelector(elementSelector)\n if (element) {\n element.scrollLeft = entry.scrollX\n element.scrollTop = entry.scrollY\n }\n }\n }\n }\n\n if (!windowRestored) {\n window.scrollTo(0, 0)\n }\n\n cache.set((c) => ({ ...c, next: {} }))\n weakScrolledElements = new WeakSet<any>()\n }\n })\n\n return () => {\n document.removeEventListener('scroll', onScroll)\n unsubOnBeforeLoad()\n unsubOnResolved()\n }\n }, [])\n}\n\nexport function ScrollRestoration(props: ScrollRestorationOptions) {\n useScrollRestoration(props)\n return null\n}\n"],"names":["useLayoutEffect","window","React","useEffect","windowKey","delimiter","weakScrolledElements","WeakSet","cache","sessionsStorage","sessionStorage","defaultGetKey","location","state","key","useScrollRestoration","options","router","useRouter","getKey","storageKey","JSON","parse","getItem","cached","next","set","updater","functionalUpdate","setItem","stringify","history","scrollRestoration","onScroll","event","has","target","add","elementSelector","document","getCssSelector","c","scrollX","NaN","scrollY","el","path","parent","parentNode","unshift","tagName","indexOf","call","children","join","toLowerCase","addEventListener","unsubOnBeforeLoad","subscribe","pathChanged","restoreKey","fromLocation","entry","element","querySelector","scrollLeft","scrollTop","unsubOnResolved","resetNextScroll","toLocation","windowRestored","cacheKey","split","scrollTo","removeEventListener","ScrollRestoration","props"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"searchParams.js","sources":["../../src/searchParams.ts"],"sourcesContent":["import { decode, encode } from './qss'\nimport { AnySearchSchema } from './route'\n\nexport const defaultParseSearch = parseSearchWith(JSON.parse)\nexport const defaultStringifySearch = stringifySearchWith(\n JSON.stringify,\n JSON.parse,\n)\n\nexport function parseSearchWith(parser: (str: string) => any) {\n return (searchStr: string): AnySearchSchema => {\n if (searchStr.substring(0, 1) === '?') {\n searchStr = searchStr.substring(1)\n }\n\n let query: Record<string, unknown> = decode(searchStr)\n\n // Try to parse any query params that might be json\n for (let key in query) {\n const value = query[key]\n if (typeof value === 'string') {\n try {\n query[key] = parser(value)\n } catch (err) {\n //\n }\n }\n }\n\n return query\n }\n}\n\nexport function stringifySearchWith(\n stringify: (search: any) => string,\n parser?: (str: string) => any,\n) {\n function stringifyValue(val: any) {\n if (typeof val === 'object' && val !== null) {\n try {\n return stringify(val)\n } catch (err) {\n // silent\n }\n } else if (typeof val === 'string' && typeof parser === 'function') {\n try {\n // Check if it's a valid parseable string.\n // If it is, then stringify it again.\n parser(val)\n return stringify(val)\n } catch (err) {\n // silent\n }\n }\n return val\n }\n\n return (search: Record<string, any>) => {\n search = { ...search }\n\n if (search) {\n Object.keys(search).forEach((key) => {\n const val = search[key]\n if (typeof val === 'undefined' || val === undefined) {\n delete search[key]\n } else {\n search[key] = stringifyValue(val)\n }\n })\n }\n\n const searchStr = encode(search as Record<string, string>).toString()\n\n return searchStr ? `?${searchStr}` : ''\n }\n}\n\nexport type SearchSerializer = (searchObj: Record<string, any>) => string\nexport type SearchParser = (searchStr: string) => Record<string, any>\n"],"names":["defaultParseSearch","parseSearchWith","JSON","parse","defaultStringifySearch","stringifySearchWith","stringify","parser","searchStr","substring","query","decode","key","value","err","stringifyValue","val","search","Object","keys","forEach","undefined","encode","toString"],"mappings":"
|
|
1
|
+
{"version":3,"file":"searchParams.js","sources":["../../src/searchParams.ts"],"sourcesContent":["import { decode, encode } from './qss'\nimport { AnySearchSchema } from './route'\n\nexport const defaultParseSearch = parseSearchWith(JSON.parse)\nexport const defaultStringifySearch = stringifySearchWith(\n JSON.stringify,\n JSON.parse,\n)\n\nexport function parseSearchWith(parser: (str: string) => any) {\n return (searchStr: string): AnySearchSchema => {\n if (searchStr.substring(0, 1) === '?') {\n searchStr = searchStr.substring(1)\n }\n\n let query: Record<string, unknown> = decode(searchStr)\n\n // Try to parse any query params that might be json\n for (let key in query) {\n const value = query[key]\n if (typeof value === 'string') {\n try {\n query[key] = parser(value)\n } catch (err) {\n //\n }\n }\n }\n\n return query\n }\n}\n\nexport function stringifySearchWith(\n stringify: (search: any) => string,\n parser?: (str: string) => any,\n) {\n function stringifyValue(val: any) {\n if (typeof val === 'object' && val !== null) {\n try {\n return stringify(val)\n } catch (err) {\n // silent\n }\n } else if (typeof val === 'string' && typeof parser === 'function') {\n try {\n // Check if it's a valid parseable string.\n // If it is, then stringify it again.\n parser(val)\n return stringify(val)\n } catch (err) {\n // silent\n }\n }\n return val\n }\n\n return (search: Record<string, any>) => {\n search = { ...search }\n\n if (search) {\n Object.keys(search).forEach((key) => {\n const val = search[key]\n if (typeof val === 'undefined' || val === undefined) {\n delete search[key]\n } else {\n search[key] = stringifyValue(val)\n }\n })\n }\n\n const searchStr = encode(search as Record<string, string>).toString()\n\n return searchStr ? `?${searchStr}` : ''\n }\n}\n\nexport type SearchSerializer = (searchObj: Record<string, any>) => string\nexport type SearchParser = (searchStr: string) => Record<string, any>\n"],"names":["defaultParseSearch","parseSearchWith","JSON","parse","defaultStringifySearch","stringifySearchWith","stringify","parser","searchStr","substring","query","decode","key","value","err","stringifyValue","val","search","Object","keys","forEach","undefined","encode","toString"],"mappings":";;;;;;;;;;;;;;AAGO,MAAMA,kBAAkB,GAAGC,eAAe,CAACC,IAAI,CAACC,KAAK,EAAC;AAChDC,MAAAA,sBAAsB,GAAGC,mBAAmB,CACvDH,IAAI,CAACI,SAAS,EACdJ,IAAI,CAACC,KACP,EAAC;AAEM,SAASF,eAAeA,CAACM,MAA4B,EAAE;AAC5D,EAAA,OAAQC,SAAiB,IAAsB;IAC7C,IAAIA,SAAS,CAACC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,GAAG,EAAE;AACrCD,MAAAA,SAAS,GAAGA,SAAS,CAACC,SAAS,CAAC,CAAC,CAAC,CAAA;AACpC,KAAA;AAEA,IAAA,IAAIC,KAA8B,GAAGC,UAAM,CAACH,SAAS,CAAC,CAAA;;AAEtD;AACA,IAAA,KAAK,IAAII,GAAG,IAAIF,KAAK,EAAE;AACrB,MAAA,MAAMG,KAAK,GAAGH,KAAK,CAACE,GAAG,CAAC,CAAA;AACxB,MAAA,IAAI,OAAOC,KAAK,KAAK,QAAQ,EAAE;QAC7B,IAAI;AACFH,UAAAA,KAAK,CAACE,GAAG,CAAC,GAAGL,MAAM,CAACM,KAAK,CAAC,CAAA;SAC3B,CAAC,OAAOC,GAAG,EAAE;AACZ;AAAA,SAAA;AAEJ,OAAA;AACF,KAAA;AAEA,IAAA,OAAOJ,KAAK,CAAA;GACb,CAAA;AACH,CAAA;AAEO,SAASL,mBAAmBA,CACjCC,SAAkC,EAClCC,MAA6B,EAC7B;EACA,SAASQ,cAAcA,CAACC,GAAQ,EAAE;IAChC,IAAI,OAAOA,GAAG,KAAK,QAAQ,IAAIA,GAAG,KAAK,IAAI,EAAE;MAC3C,IAAI;QACF,OAAOV,SAAS,CAACU,GAAG,CAAC,CAAA;OACtB,CAAC,OAAOF,GAAG,EAAE;AACZ;AAAA,OAAA;KAEH,MAAM,IAAI,OAAOE,GAAG,KAAK,QAAQ,IAAI,OAAOT,MAAM,KAAK,UAAU,EAAE;MAClE,IAAI;AACF;AACA;QACAA,MAAM,CAACS,GAAG,CAAC,CAAA;QACX,OAAOV,SAAS,CAACU,GAAG,CAAC,CAAA;OACtB,CAAC,OAAOF,GAAG,EAAE;AACZ;AAAA,OAAA;AAEJ,KAAA;AACA,IAAA,OAAOE,GAAG,CAAA;AACZ,GAAA;AAEA,EAAA,OAAQC,MAA2B,IAAK;AACtCA,IAAAA,MAAM,GAAG;MAAE,GAAGA,MAAAA;KAAQ,CAAA;AAEtB,IAAA,IAAIA,MAAM,EAAE;MACVC,MAAM,CAACC,IAAI,CAACF,MAAM,CAAC,CAACG,OAAO,CAAER,GAAG,IAAK;AACnC,QAAA,MAAMI,GAAG,GAAGC,MAAM,CAACL,GAAG,CAAC,CAAA;QACvB,IAAI,OAAOI,GAAG,KAAK,WAAW,IAAIA,GAAG,KAAKK,SAAS,EAAE;UACnD,OAAOJ,MAAM,CAACL,GAAG,CAAC,CAAA;AACpB,SAAC,MAAM;AACLK,UAAAA,MAAM,CAACL,GAAG,CAAC,GAAGG,cAAc,CAACC,GAAG,CAAC,CAAA;AACnC,SAAA;AACF,OAAC,CAAC,CAAA;AACJ,KAAA;IAEA,MAAMR,SAAS,GAAGc,UAAM,CAACL,MAAgC,CAAC,CAACM,QAAQ,EAAE,CAAA;AAErE,IAAA,OAAOf,SAAS,GAAI,CAAA,CAAA,EAAGA,SAAU,CAAA,CAAC,GAAG,EAAE,CAAA;GACxC,CAAA;AACH;;;;;;;"}
|
package/build/cjs/useBlocker.js
CHANGED
|
@@ -10,13 +10,10 @@
|
|
|
10
10
|
*/
|
|
11
11
|
'use strict';
|
|
12
12
|
|
|
13
|
-
Object.defineProperty(exports, '__esModule', { value: true });
|
|
14
|
-
|
|
15
13
|
var React = require('react');
|
|
16
14
|
var RouterProvider = require('./RouterProvider.js');
|
|
17
15
|
|
|
18
|
-
function
|
|
19
|
-
if (e && e.__esModule) return e;
|
|
16
|
+
function _interopNamespaceDefault(e) {
|
|
20
17
|
var n = Object.create(null);
|
|
21
18
|
if (e) {
|
|
22
19
|
Object.keys(e).forEach(function (k) {
|
|
@@ -29,11 +26,11 @@ function _interopNamespace(e) {
|
|
|
29
26
|
}
|
|
30
27
|
});
|
|
31
28
|
}
|
|
32
|
-
n
|
|
29
|
+
n.default = e;
|
|
33
30
|
return Object.freeze(n);
|
|
34
31
|
}
|
|
35
32
|
|
|
36
|
-
var React__namespace = /*#__PURE__*/
|
|
33
|
+
var React__namespace = /*#__PURE__*/_interopNamespaceDefault(React);
|
|
37
34
|
|
|
38
35
|
function useBlocker(message, condition = true) {
|
|
39
36
|
const {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useBlocker.js","sources":["../../src/useBlocker.tsx"],"sourcesContent":["import * as React from 'react'\nimport { ReactNode } from './route'\nimport { useRouter } from './RouterProvider'\n\nexport function useBlocker(\n message: string,\n condition: boolean | any = true,\n): void {\n const { history } = useRouter()\n\n React.useEffect(() => {\n if (!condition) return\n\n let unblock = history.block((retry, cancel) => {\n if (window.confirm(message)) {\n unblock()\n retry()\n }\n })\n\n return unblock\n })\n}\n\nexport function Block({ message, condition, children }: PromptProps) {\n useBlocker(message, condition)\n return (children ?? null) as ReactNode\n}\n\nexport type PromptProps = {\n message: string\n condition?: boolean | any\n children?: ReactNode\n}\n"],"names":["useBlocker","message","condition","history","useRouter","React","useEffect","unblock","block","retry","cancel","window","confirm","Block","children"],"mappings":"
|
|
1
|
+
{"version":3,"file":"useBlocker.js","sources":["../../src/useBlocker.tsx"],"sourcesContent":["import * as React from 'react'\nimport { ReactNode } from './route'\nimport { useRouter } from './RouterProvider'\n\nexport function useBlocker(\n message: string,\n condition: boolean | any = true,\n): void {\n const { history } = useRouter()\n\n React.useEffect(() => {\n if (!condition) return\n\n let unblock = history.block((retry, cancel) => {\n if (window.confirm(message)) {\n unblock()\n retry()\n }\n })\n\n return unblock\n })\n}\n\nexport function Block({ message, condition, children }: PromptProps) {\n useBlocker(message, condition)\n return (children ?? null) as ReactNode\n}\n\nexport type PromptProps = {\n message: string\n condition?: boolean | any\n children?: ReactNode\n}\n"],"names":["useBlocker","message","condition","history","useRouter","React","useEffect","unblock","block","retry","cancel","window","confirm","Block","children"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIO,SAASA,UAAUA,CACxBC,OAAe,EACfC,SAAwB,GAAG,IAAI,EACzB;EACN,MAAM;AAAEC,IAAAA,OAAAA;GAAS,GAAGC,wBAAS,EAAE,CAAA;EAE/BC,gBAAK,CAACC,SAAS,CAAC,MAAM;IACpB,IAAI,CAACJ,SAAS,EAAE,OAAA;IAEhB,IAAIK,OAAO,GAAGJ,OAAO,CAACK,KAAK,CAAC,CAACC,KAAK,EAAEC,MAAM,KAAK;AAC7C,MAAA,IAAIC,MAAM,CAACC,OAAO,CAACX,OAAO,CAAC,EAAE;AAC3BM,QAAAA,OAAO,EAAE,CAAA;AACTE,QAAAA,KAAK,EAAE,CAAA;AACT,OAAA;AACF,KAAC,CAAC,CAAA;AAEF,IAAA,OAAOF,OAAO,CAAA;AAChB,GAAC,CAAC,CAAA;AACJ,CAAA;AAEO,SAASM,KAAKA,CAAC;EAAEZ,OAAO;EAAEC,SAAS;AAAEY,EAAAA,QAAAA;AAAsB,CAAC,EAAE;AACnEd,EAAAA,UAAU,CAACC,OAAO,EAAEC,SAAS,CAAC,CAAA;EAC9B,OAAQY,QAAQ,IAAI,IAAI,CAAA;AAC1B;;;;;"}
|