@tanstack/router-core 0.0.1-beta.185 → 0.0.1-beta.187
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/fileRoute.js.map +1 -1
- package/build/cjs/history.js +20 -18
- package/build/cjs/history.js.map +1 -1
- package/build/cjs/index.js +1 -0
- package/build/cjs/index.js.map +1 -1
- package/build/cjs/route.js +4 -0
- package/build/cjs/route.js.map +1 -1
- package/build/cjs/router.js +211 -101
- package/build/cjs/router.js.map +1 -1
- package/build/cjs/scroll-restoration.js +1 -1
- package/build/cjs/scroll-restoration.js.map +1 -1
- package/build/cjs/utils.js +15 -0
- package/build/cjs/utils.js.map +1 -1
- package/build/esm/index.js +252 -122
- package/build/esm/index.js.map +1 -1
- package/build/stats-html.html +1 -1
- package/build/stats-react.json +132 -132
- package/build/types/fileRoute.d.ts +1 -0
- package/build/types/history.d.ts +8 -3
- package/build/types/link.d.ts +23 -18
- package/build/types/route.d.ts +23 -7
- package/build/types/routeInfo.d.ts +3 -3
- package/build/types/router.d.ts +30 -20
- package/build/types/utils.d.ts +2 -11
- package/build/umd/index.development.js +252 -121
- 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 +1 -1
- package/src/fileRoute.ts +3 -3
- package/src/history.ts +33 -25
- package/src/link.ts +66 -51
- package/src/route.ts +61 -16
- package/src/routeInfo.ts +3 -3
- package/src/router.ts +331 -177
- package/src/scroll-restoration.ts +1 -1
- package/src/utils.ts +21 -17
package/build/cjs/router.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"router.js","sources":["../../src/router.ts"],"sourcesContent":["import { Store } from '@tanstack/store'\nimport invariant from 'tiny-invariant'\n\n//\n\nimport {\n LinkInfo,\n LinkOptions,\n NavigateOptions,\n ToOptions,\n ResolveRelativePath,\n} from './link'\nimport {\n cleanPath,\n interpolatePath,\n joinPaths,\n matchPathname,\n parsePathname,\n resolvePath,\n trimPath,\n trimPathRight,\n} from './path'\nimport {\n Route,\n AnySearchSchema,\n AnyRoute,\n AnyContext,\n AnyPathParams,\n RegisteredRouteComponent,\n RegisteredErrorRouteComponent,\n RegisteredPendingRouteComponent,\n} from './route'\nimport {\n RoutesById,\n RoutesByPath,\n ParseRoute,\n FullSearchSchema,\n RouteById,\n RoutePaths,\n RouteIds,\n} from './routeInfo'\nimport { defaultParseSearch, defaultStringifySearch } from './searchParams'\nimport {\n functionalUpdate,\n last,\n NoInfer,\n pick,\n PickAsRequired,\n Timeout,\n Updater,\n replaceEqualDeep,\n partialDeepEqual,\n} from './utils'\nimport {\n createBrowserHistory,\n createMemoryHistory,\n RouterHistory,\n} from './history'\nimport warning from 'tiny-warning'\n\n//\n\ndeclare global {\n interface Window {\n __TSR_DEHYDRATED__?: HydrationCtx\n }\n}\n\nexport interface Register {\n // router: Router\n}\n\nexport type AnyRouter = Router<any, any>\n\nexport type RegisteredRouter = Register extends {\n router: infer TRouter extends AnyRouter\n}\n ? TRouter\n : AnyRouter\n\nexport interface LocationState {}\n\nexport interface ParsedLocation<\n TSearchObj extends AnySearchSchema = {},\n // TState extends LocationState = LocationState,\n> {\n href: string\n pathname: string\n search: TSearchObj\n searchStr: string\n state: LocationState\n hash: string\n key?: string\n}\n\nexport interface FromLocation {\n pathname: string\n search?: unknown\n key?: string\n hash?: string\n}\n\nexport type SearchSerializer = (searchObj: Record<string, any>) => string\nexport type SearchParser = (searchStr: string) => Record<string, any>\n\nexport type HydrationCtx = {\n router: DehydratedRouter\n payload: Record<string, any>\n}\n\nexport interface RouteMatch<\n TRouteTree extends AnyRoute = AnyRoute,\n TRouteId extends RouteIds<TRouteTree> = ParseRoute<TRouteTree>['id'],\n> {\n id: string\n key?: string\n routeId: TRouteId\n pathname: string\n params: RouteById<TRouteTree, TRouteId>['types']['allParams']\n status: 'pending' | 'success' | 'error'\n isFetching: boolean\n invalid: boolean\n error: unknown\n paramsError: unknown\n searchError: unknown\n updatedAt: number\n maxAge: number\n preloadMaxAge: number\n loaderData: RouteById<TRouteTree, TRouteId>['types']['loader']\n loadPromise?: Promise<void>\n __resolveLoadPromise?: () => void\n routeContext: RouteById<TRouteTree, TRouteId>['types']['routeContext']\n context: RouteById<TRouteTree, TRouteId>['types']['context']\n routeSearch: RouteById<TRouteTree, TRouteId>['types']['searchSchema']\n search: FullSearchSchema<TRouteTree> &\n RouteById<TRouteTree, TRouteId>['types']['fullSearchSchema']\n fetchedAt: number\n abortController: AbortController\n}\n\nexport type AnyRouteMatch = RouteMatch<any>\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>,\n> {\n history?: RouterHistory\n stringifySearch?: SearchSerializer\n parseSearch?: SearchParser\n defaultPreload?: false | 'intent'\n defaultPreloadDelay?: number\n refetchOnWindowFocus?: boolean\n defaultComponent?: RegisteredRouteComponent<\n unknown,\n AnySearchSchema,\n AnyPathParams,\n AnyContext,\n AnyContext\n >\n defaultErrorComponent?: RegisteredErrorRouteComponent<\n AnySearchSchema,\n AnyPathParams,\n AnyContext,\n AnyContext\n >\n defaultPendingComponent?: RegisteredPendingRouteComponent<\n AnySearchSchema,\n AnyPathParams,\n AnyContext,\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 Wrap?: React.ComponentType<{\n children: React.ReactNode\n dehydratedState?: TDehydrated\n }>\n dehydrate?: () => TDehydrated\n hydrate?: (dehydrated: TDehydrated) => void\n}\n\nexport interface RouterState<TRouteTree extends AnyRoute = AnyRoute> {\n status: 'idle' | 'pending'\n isFetching: boolean\n matchesById: Record<string, RouteMatch<TRouteTree>>\n matchIds: string[]\n pendingMatchIds: string[]\n matches: RouteMatch<TRouteTree>[]\n pendingMatches: RouteMatch<TRouteTree>[]\n renderedMatchIds: string[]\n renderedMatches: 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?: LocationState\n key?: string\n from?: string\n fromCurrent?: boolean\n __matches?: AnyRouteMatch[]\n}\n\nexport interface MatchLocation {\n to?: string | number | null\n fuzzy?: boolean\n caseSensitive?: boolean\n from?: string\n fromCurrent?: boolean\n}\n\nexport interface MatchRouteOptions {\n pending?: boolean\n caseSensitive?: boolean\n includeSearch?: boolean\n fuzzy?: boolean\n}\n\ntype LinkCurrentTargetElement = {\n preloadTimeout?: null | ReturnType<typeof setTimeout>\n}\n\nexport interface DehydratedRouterState {\n matchIds: string[]\n dehydratedMatches: DehydratedRouteMatch[]\n}\n\nexport type DehydratedRouteMatch = Pick<\n RouteMatch,\n | 'fetchedAt'\n | 'invalid'\n | 'maxAge'\n | 'preloadMaxAge'\n | 'id'\n | 'loaderData'\n | 'status'\n | '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 from: ParsedLocation\n to: ParsedLocation\n pathChanged: boolean\n }\n onLoad: {\n type: 'onLoad'\n from: ParsedLocation\n to: 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\nconst visibilityChangeEvent = 'visibilitychange'\nconst focusEvent = 'focus'\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 types!: {\n RootRoute: TRouteTree\n }\n\n options: PickAsRequired<\n RouterOptions<TRouteTree, TDehydrated>,\n 'stringifySearch' | 'parseSearch' | 'context'\n >\n history!: RouterHistory\n #unsubHistory?: () => void\n basepath!: string\n routeTree!: TRouteTree\n routesById!: RoutesById<TRouteTree>\n routesByPath!: RoutesByPath<TRouteTree>\n flatRoutes!: ParseRoute<TRouteTree>[]\n navigateTimeout: undefined | Timeout\n nextAction: undefined | 'push' | 'replace'\n navigationPromise: undefined | Promise<void>\n\n __store: Store<RouterState<TRouteTree>>\n state: RouterState<TRouteTree>\n dehydratedData?: TDehydrated\n resetNextScroll = false\n\n constructor(options: RouterConstructorOptions<TRouteTree, TDehydrated>) {\n this.options = {\n defaultPreloadDelay: 50,\n context: undefined!,\n ...options,\n stringifySearch: options?.stringifySearch ?? defaultStringifySearch,\n parseSearch: options?.parseSearch ?? defaultParseSearch,\n // fetchServerDataFn: options?.fetchServerDataFn ?? defaultFetchServerDataFn,\n }\n\n this.__store = new Store<RouterState<TRouteTree>>(getInitialRouterState(), {\n onUpdate: () => {\n const prev = this.state\n\n const next = this.__store.state\n\n const matchesByIdChanged = prev.matchesById !== next.matchesById\n let matchesChanged\n let pendingMatchesChanged\n\n if (!matchesByIdChanged) {\n matchesChanged =\n prev.matchIds.length !== next.matchIds.length ||\n prev.matchIds.some((d, i) => d !== next.matchIds[i])\n\n pendingMatchesChanged =\n prev.pendingMatchIds.length !== next.pendingMatchIds.length ||\n prev.pendingMatchIds.some((d, i) => d !== next.pendingMatchIds[i])\n }\n\n if (matchesByIdChanged || matchesChanged) {\n next.matches = next.matchIds.map((id) => {\n return next.matchesById[id] as any\n })\n }\n\n if (matchesByIdChanged || pendingMatchesChanged) {\n next.pendingMatches = next.pendingMatchIds.map((id) => {\n return next.matchesById[id] as any\n })\n }\n\n if (matchesByIdChanged || matchesChanged || pendingMatchesChanged) {\n const hasPendingComponent = next.pendingMatches.some((d) => {\n const route = this.getRoute(d.routeId as any)\n return !!route?.options.pendingComponent\n })\n\n next.renderedMatchIds = hasPendingComponent\n ? next.pendingMatchIds\n : next.matchIds\n\n next.renderedMatches = next.renderedMatchIds.map((id) => {\n return next.matchesById[id] as any\n })\n }\n\n next.isFetching = [...next.matches, ...next.pendingMatches].some(\n (d) => d.isFetching,\n )\n\n this.state = next\n },\n defaultPriority: 'low',\n })\n\n this.state = this.__store.state\n\n this.update(options)\n\n const next = this.buildNext({\n hash: true,\n fromCurrent: true,\n search: true,\n state: true,\n })\n\n if (this.state.location.href !== next.href) {\n this.#commitLocation({ ...next, replace: true })\n }\n }\n\n subscribers = new Set<RouterListener<RouterEvent>>()\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 reset = () => {\n this.__store.setState((s) => Object.assign(s, getInitialRouterState()))\n }\n\n mount = () => {\n // addEventListener does not exist in React Native, but window does\n // In the future, we might need to invert control here for more adapters\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (typeof window !== 'undefined' && window.addEventListener) {\n window.addEventListener(visibilityChangeEvent, this.#onFocus, false)\n window.addEventListener(focusEvent, this.#onFocus, false)\n }\n\n this.safeLoad()\n\n return () => {\n if (typeof window !== 'undefined' && window.removeEventListener) {\n window.removeEventListener(visibilityChangeEvent, this.#onFocus)\n window.removeEventListener(focusEvent, this.#onFocus)\n }\n }\n }\n\n #onFocus = () => {\n if (this.options.refetchOnWindowFocus ?? true) {\n this.invalidate()\n }\n }\n\n update = (opts?: RouterOptions<any, any>): this => {\n this.options = {\n ...this.options,\n ...opts,\n context: {\n ...this.options.context,\n ...opts?.context,\n },\n }\n\n if (\n !this.history ||\n (this.options.history && this.options.history !== this.history)\n ) {\n if (this.#unsubHistory) {\n this.#unsubHistory()\n }\n\n this.history =\n this.options.history ??\n (isServer ? createMemoryHistory() : createBrowserHistory()!)\n\n const parsedLocation = this.#parseLocation()\n\n this.__store.setState((s) => ({\n ...s,\n resolvedLocation: parsedLocation as any,\n location: parsedLocation as any,\n }))\n\n this.#unsubHistory = this.history.subscribe(() => {\n this.safeLoad({\n next: this.#parseLocation(this.state.location),\n })\n })\n }\n\n const { basepath, routeTree } = this.options\n\n this.basepath = `/${trimPath(basepath ?? '') ?? ''}`\n\n if (routeTree && routeTree !== this.routeTree) {\n this.#processRoutes(routeTree)\n }\n\n return this\n }\n\n buildNext = (opts: BuildNextOptions): ParsedLocation => {\n const next = this.#buildLocation(opts)\n\n const __matches = this.matchRoutes(next.pathname, next.search)\n\n return this.#buildLocation({\n ...opts,\n __matches,\n })\n }\n\n cancelMatches = () => {\n this.state.matches.forEach((match) => {\n this.cancelMatch(match.id)\n })\n }\n\n cancelMatch = (id: string) => {\n this.getRouteMatch(id)?.abortController?.abort()\n }\n\n safeLoad = async (opts?: { next?: ParsedLocation }) => {\n try {\n return this.load(opts)\n } catch (err) {\n // Don't do anything\n }\n }\n\n latestLoadPromise: Promise<void> = Promise.resolve()\n\n load = async (opts?: {\n next?: ParsedLocation\n throwOnError?: boolean\n __dehydratedMatches?: DehydratedRouteMatch[]\n }) => {\n const promise = new Promise<void>(async (resolve, reject) => {\n const prevLocation = this.state.resolvedLocation\n const pathDidChange = !!(\n opts?.next && prevLocation!.href !== opts.next.href\n )\n\n let latestPromise: Promise<void> | undefined | null\n\n const checkLatest = (): undefined | Promise<void> | null => {\n return this.latestLoadPromise !== promise\n ? this.latestLoadPromise\n : undefined\n }\n\n // Cancel any pending matches\n\n let pendingMatches!: RouteMatch<any, any>[]\n\n this.#emit({\n type: 'onBeforeLoad',\n from: prevLocation,\n to: opts?.next ?? this.state.location,\n pathChanged: pathDidChange,\n })\n\n this.__store.batch(() => {\n if (opts?.next) {\n // Ingest the new location\n this.__store.setState((s) => ({\n ...s,\n location: opts.next! as any,\n }))\n }\n\n // Match the routes\n pendingMatches = this.matchRoutes(\n this.state.location.pathname,\n this.state.location.search,\n {\n throwOnError: opts?.throwOnError,\n debug: true,\n },\n )\n\n this.__store.setState((s) => ({\n ...s,\n status: 'pending',\n pendingMatchIds: pendingMatches.map((d) => d.id),\n matchesById: this.#mergeMatches(s.matchesById, pendingMatches),\n }))\n })\n\n try {\n // Load the matches\n try {\n await this.loadMatches(pendingMatches)\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 = checkLatest())) {\n return latestPromise\n }\n\n const exitingMatchIds = this.state.matchIds.filter(\n (id) => !this.state.pendingMatchIds.includes(id),\n )\n\n const enteringMatchIds = this.state.pendingMatchIds.filter(\n (id) => !this.state.matchIds.includes(id),\n )\n\n const stayingMatchIds = this.state.matchIds.filter((id) =>\n this.state.pendingMatchIds.includes(id),\n )\n\n this.__store.setState((s) => ({\n ...s,\n status: 'idle',\n resolvedLocation: s.location,\n matchIds: s.pendingMatchIds,\n pendingMatchIds: [],\n }))\n ;(\n [\n [exitingMatchIds, 'onLeave'],\n [enteringMatchIds, 'onEnter'],\n [stayingMatchIds, 'onTransition'],\n ] as const\n ).forEach(([matchIds, hook]) => {\n matchIds.forEach((id) => {\n const match = this.getRouteMatch(id)!\n const route = this.getRoute(match.routeId)\n route.options[hook]?.(match)\n })\n })\n\n this.#emit({\n type: 'onLoad',\n from: prevLocation,\n to: this.state.location,\n pathChanged: pathDidChange,\n })\n\n resolve()\n } catch (err) {\n // Only apply the latest transition\n if ((latestPromise = checkLatest())) {\n return latestPromise\n }\n\n reject(err)\n }\n })\n\n this.latestLoadPromise = promise\n\n this.latestLoadPromise.then(() => {\n this.cleanMatches()\n })\n\n return this.latestLoadPromise\n }\n\n #mergeMatches = (\n prevMatchesById: Record<string, RouteMatch<TRouteTree>>,\n nextMatches: AnyRouteMatch[],\n ): Record<string, RouteMatch<TRouteTree>> => {\n return {\n ...prevMatchesById,\n ...Object.fromEntries(nextMatches.map((match) => [match.id, match])),\n }\n }\n\n getRoute = (id: string): Route => {\n const route = (this.routesById as any)[id]\n\n invariant(route, `Route with id \"${id as string}\" not found`)\n\n return route as any\n }\n\n preloadRoute = async (\n navigateOpts: BuildNextOptions & {\n maxAge?: number\n } = this.state.location,\n ) => {\n const next = this.buildNext(navigateOpts)\n const matches = this.matchRoutes(next.pathname, next.search, {\n throwOnError: true,\n })\n\n this.__store.setState((s) => {\n return {\n ...s,\n matchesById: this.#mergeMatches(s.matchesById, matches),\n }\n })\n\n await this.loadMatches(matches, {\n preload: true,\n maxAge: navigateOpts.maxAge,\n })\n\n return matches\n }\n\n cleanMatches = () => {\n const now = Date.now()\n\n const outdatedMatchIds = Object.values(this.state.matchesById)\n .filter((match) => {\n const route = this.getRoute(match.routeId)\n\n return (\n !this.state.matchIds.includes(match.id) &&\n !this.state.pendingMatchIds.includes(match.id) &&\n (match.preloadMaxAge > -1\n ? match.updatedAt + match.preloadMaxAge < now\n : true) &&\n (route.options.gcMaxAge\n ? match.updatedAt + route.options.gcMaxAge < now\n : true)\n )\n })\n .map((d) => d.id)\n\n if (outdatedMatchIds.length) {\n this.__store.setState((s) => {\n const matchesById = { ...s.matchesById }\n outdatedMatchIds.forEach((id) => {\n delete matchesById[id]\n })\n return {\n ...s,\n matchesById,\n }\n })\n }\n }\n\n matchRoutes = (\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 },\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 key = route.options.key\n ? route.options.key({\n params: routeParams,\n search: locationSearch,\n }) ?? ''\n : ''\n\n const stringifiedKey = key ? JSON.stringify(key) : ''\n\n const matchId =\n interpolatePath(route.id, routeParams, true) + stringifiedKey\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 = this.getRouteMatch(matchId)\n\n if (existingMatch) {\n return { ...existingMatch }\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 key: stringifiedKey,\n routeId: route.id,\n params: routeParams,\n pathname: joinPaths([this.basepath, interpolatedPath]),\n updatedAt: Date.now(),\n maxAge: -1,\n preloadMaxAge: -1,\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 loaderData: undefined,\n loadPromise: Promise.resolve(),\n routeContext: undefined!,\n context: undefined!,\n abortController: new AbortController(),\n fetchedAt: 0,\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.getRoute(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 loadMatches = async (\n _resolvedMatches: AnyRouteMatch[],\n opts?: {\n preload?: boolean\n maxAge?: number\n },\n ) => {\n const getFreshMatches = () =>\n _resolvedMatches.map((d) => this.getRouteMatch(d.id)!)\n\n if (!opts?.preload) {\n getFreshMatches().forEach((match) => {\n // Update each match with its latest route data\n this.setRouteMatch(match.id, (s) => ({\n ...s,\n routeSearch: match.routeSearch,\n search: match.search,\n routeContext: match.routeContext,\n context: match.context,\n error: match.error,\n paramsError: match.paramsError,\n searchError: match.searchError,\n params: match.params,\n preloadMaxAge: 0,\n }))\n })\n }\n\n let firstBadMatchIndex: number | undefined\n\n // Check each match middleware to see if the route can be accessed\n try {\n for (const [index, match] of getFreshMatches().entries()) {\n const parentMatch = getFreshMatches()[index - 1]\n const route = this.getRoute(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 this.setRouteMatch(match.id, (s) => ({\n ...s,\n error: err,\n status: 'error',\n updatedAt: Date.now(),\n }))\n }\n\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 let didError = false\n\n try {\n const routeContext =\n (await route.options.beforeLoad?.({\n ...match,\n preload: !!opts?.preload,\n parentContext: parentMatch?.routeContext ?? {},\n context: parentMatch?.context ?? this?.options.context ?? {},\n })) ?? ({} as any)\n\n const context = {\n ...(parentMatch?.context ?? this?.options.context),\n ...routeContext,\n } as any\n\n this.setRouteMatch(match.id, (s) => ({\n ...s,\n context,\n routeContext,\n }))\n } catch (err) {\n handleError(err, 'BEFORE_LOAD')\n didError = true\n }\n\n // If we errored, do not run the next matches' middleware\n if (didError) {\n break\n }\n }\n } catch (err) {\n if (!opts?.preload) {\n this.navigate(err as any)\n }\n\n throw err\n }\n\n const validResolvedMatches = getFreshMatches().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.getRoute(match.routeId)\n\n if (\n match.isFetching ||\n (match.status === 'success' &&\n !isMatchInvalid(match, {\n preload: opts?.preload,\n }))\n ) {\n return this.getRouteMatch(match.id)?.loadPromise\n }\n\n const fetchedAt = Date.now()\n const checkLatest = () => {\n const latest = this.getRouteMatch(match.id)\n return latest && latest.fetchedAt !== fetchedAt\n ? latest.loadPromise\n : undefined\n }\n\n const handleIfRedirect = (err: any) => {\n if (isRedirect(err)) {\n if (!opts?.preload) {\n this.navigate(err as any)\n }\n return true\n }\n return false\n }\n\n const load = async () => {\n let latestPromise\n\n try {\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?.({\n ...match,\n preload: !!opts?.preload,\n parentMatchPromise,\n })\n\n const [_, loader] = await Promise.all([\n componentsPromise,\n loaderPromise,\n ])\n if ((latestPromise = checkLatest())) return await latestPromise\n\n this.setRouteMatchData(match.id, () => loader, opts)\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 this.setRouteMatch(match.id, (s) => ({\n ...s,\n error,\n status: 'error',\n isFetching: false,\n updatedAt: Date.now(),\n }))\n }\n }\n\n let loadPromise: Promise<void> | undefined\n\n this.__store.batch(() => {\n this.setRouteMatch(match.id, (s) => ({\n ...s,\n // status: s.status !== 'success' ? 'pending' : s.status,\n isFetching: true,\n fetchedAt,\n invalid: false,\n }))\n\n loadPromise = load()\n\n this.setRouteMatch(match.id, (s) => ({\n ...s,\n loadPromise,\n }))\n })\n\n await loadPromise\n })(),\n )\n })\n\n await Promise.all(matchPromises)\n }\n\n resolvePath = (from: string, path: string) => {\n return resolvePath(this.basepath!, from, cleanPath(path))\n }\n\n navigate = async <\n TFrom extends RoutePaths<TRouteTree> = '/',\n TTo extends string = '',\n >({\n from,\n to = '' as any,\n search,\n hash,\n replace,\n params,\n resetScroll,\n }: NavigateOptions<TRouteTree, TFrom, TTo>) => {\n // If this link simply reloads the current route,\n // make sure it has a new key so it will trigger a data refresh\n\n // If this `to` is a valid external URL, return\n // null for LinkUtils\n const toString = String(to)\n const fromString = 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.#commitLocation({\n from: fromString,\n to: toString,\n search,\n hash,\n replace,\n params,\n resetScroll,\n })\n }\n\n matchRoute = <\n TFrom extends RoutePaths<TRouteTree> = '/',\n TTo extends string = '',\n TResolved extends string = ResolveRelativePath<TFrom, NoInfer<TTo>>,\n >(\n location: ToOptions<TRouteTree, TFrom, TTo>,\n opts?: MatchRouteOptions,\n ): false | RouteById<TRouteTree, TResolved>['types']['allParams'] => {\n location = {\n ...location,\n to: location.to\n ? this.resolvePath(location.from ?? '', location.to)\n : undefined,\n } as any\n\n const next = this.buildNext(location)\n if (opts?.pending && this.state.status !== 'pending') {\n return false\n }\n\n const baseLocation = opts?.pending\n ? this.state.location\n : this.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 (opts?.includeSearch ?? true) {\n return partialDeepEqual(baseLocation.search, next.search) ? match : false\n }\n\n return match\n }\n\n buildLink = <\n TFrom extends RoutePaths<TRouteTree> = '/',\n TTo extends string = '',\n >({\n from,\n to = '.' as any,\n search,\n params,\n hash,\n target,\n replace,\n activeOptions,\n preload,\n preloadDelay: userPreloadDelay,\n disabled,\n state,\n resetScroll,\n }: LinkOptions<TRouteTree, TFrom, TTo>): LinkInfo => {\n // If this link simply reloads the current route,\n // make sure it has a new key so it will trigger a data refresh\n\n // If this `to` is a valid external URL, return\n // null for LinkUtils\n\n try {\n new URL(`${to}`)\n return {\n type: 'external',\n href: to,\n }\n } catch (e) {}\n\n const nextOpts = {\n from,\n to,\n search,\n params,\n hash,\n replace,\n state,\n resetScroll,\n }\n\n const next = this.buildNext(nextOpts)\n\n preload = preload ?? this.options.defaultPreload\n const preloadDelay =\n userPreloadDelay ?? this.options.defaultPreloadDelay ?? 0\n\n // Compare path/hash for matches\n const currentPathSplit = this.state.location.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 options\n const pathTest = activeOptions?.exact\n ? this.state.location.pathname === next.pathname\n : pathIsFuzzyEqual\n const hashTest = activeOptions?.includeHash\n ? this.state.location.hash === next.hash\n : true\n const searchTest =\n activeOptions?.includeSearch ?? true\n ? partialDeepEqual(this.state.location.search, next.search)\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(nextOpts as any)\n }\n }\n\n // The click handler\n const handleFocus = (e: MouseEvent) => {\n if (preload) {\n this.preloadRoute(nextOpts).catch((err) => {\n console.warn(err)\n console.warn(preloadWarning)\n })\n }\n }\n\n const handleTouchStart = (e: TouchEvent) => {\n this.preloadRoute(nextOpts).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).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 dehydrate = (): DehydratedRouter => {\n return {\n state: {\n matchIds: this.state.matchIds,\n dehydratedMatches: this.state.matches.map((d) =>\n pick(d, [\n 'fetchedAt',\n 'invalid',\n 'preloadMaxAge',\n 'maxAge',\n 'id',\n 'loaderData',\n 'status',\n 'updatedAt',\n ]),\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.__store.setState((s) => {\n return {\n ...s,\n matchIds: dehydratedState.matchIds,\n matches,\n matchesById: this.#mergeMatches(s.matchesById, matches),\n }\n })\n }\n\n injectedHtml: (string | (() => Promise<string> | string))[] = []\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 = 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 // resolveMatchPromise = (matchId: string, key: string, value: any) => {\n // this.state.matches\n // .find((d) => d.id === matchId)\n // ?.__promisesByKey[key]?.resolve(value)\n // }\n\n #processRoutes = (routeTree: TRouteTree) => {\n this.routeTree = routeTree as any\n this.routesById = {} as any\n this.routesByPath = {} as any\n this.flatRoutes = [] as any\n\n const recurseRoutes = (routes: AnyRoute[]) => {\n routes.forEach((route, i) => {\n route.init({ originalIndex: i, router: this })\n\n const existingRoute = (this.routesById as any)[route.id]\n\n invariant(\n !existingRoute,\n `Duplicate routes found with id: ${String(route.id)}`,\n )\n ;(this.routesById as any)[route.id] = route\n\n if (!route.isRoot && route.path) {\n const trimmedFullPath = trimPathRight(route.fullPath)\n if (\n !(this.routesByPath as any)[trimmedFullPath] ||\n route.fullPath.endsWith('/')\n ) {\n ;(this.routesByPath as any)[trimmedFullPath] = route\n }\n }\n\n const children = route.children as Route[]\n\n if (children?.length) {\n recurseRoutes(children)\n }\n })\n }\n\n recurseRoutes([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 }) as any\n }\n\n #parseLocation = (\n previousLocation?: ParsedLocation,\n ): ParsedLocation<FullSearchSchema<TRouteTree>> => {\n let { pathname, search, hash, state } = this.history.location\n\n const parsedSearch = this.options.parseSearch(search)\n\n return {\n pathname: pathname,\n searchStr: search,\n search: replaceEqualDeep(previousLocation?.search, parsedSearch) as any,\n hash: hash.split('#').reverse()[0] ?? '',\n href: `${pathname}${search}${hash}`,\n state: state as LocationState,\n key: state?.key || '__init__',\n }\n }\n\n #buildLocation = (dest: BuildNextOptions = {}): ParsedLocation => {\n dest.fromCurrent = dest.fromCurrent ?? dest.to === ''\n\n const fromPathname = dest.fromCurrent\n ? this.state.location.pathname\n : dest.from ?? this.state.location.pathname\n\n let pathname = resolvePath(\n this.basepath ?? '/',\n fromPathname,\n `${dest.to ?? ''}`,\n )\n\n const fromMatches = this.matchRoutes(\n this.state.location.pathname,\n this.state.location.search,\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 dest.__matches\n ?.map((d) => this.getRoute(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 dest.__matches\n ?.map(\n (match) =>\n this.getRoute(match.routeId).options.preSearchFilters ?? [],\n )\n .flat()\n .filter(Boolean) ?? []\n\n const postSearchFilters =\n dest.__matches\n ?.map(\n (match) =>\n this.getRoute(match.routeId).options.postSearchFilters ?? [],\n )\n .flat()\n .filter(Boolean) ?? []\n\n // Pre filters first\n const preFilteredSearch = preSearchFilters?.length\n ? preSearchFilters?.reduce(\n (prev, next) => next(prev),\n this.state.location.search,\n )\n : this.state.location.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(\n this.state.location.search,\n postFilteredSearch,\n )\n\n const searchStr = this.options.stringifySearch(search)\n\n const hash =\n dest.hash === true\n ? this.state.location.hash\n : functionalUpdate(dest.hash!, this.state.location.hash)\n\n const hashStr = hash ? `#${hash}` : ''\n\n const nextState =\n dest.state === true\n ? this.state.location.state\n : functionalUpdate(dest.state, this.state.location.state)!\n\n return {\n pathname,\n search,\n searchStr,\n state: nextState,\n hash,\n href: this.history.createHref(`${pathname}${searchStr}${hashStr}`),\n key: dest.key,\n }\n }\n\n #commitLocation = async (\n location: BuildNextOptions & { replace?: boolean; resetScroll?: boolean },\n ) => {\n const next = this.buildNext(location)\n\n if (this.navigateTimeout) clearTimeout(this.navigateTimeout)\n\n let nextAction: 'push' | 'replace' = 'replace'\n\n if (!location.replace) {\n nextAction = 'push'\n }\n\n const isSameUrl = this.state.location.href === next.href\n\n if (isSameUrl && !next.key) {\n nextAction = 'replace'\n }\n\n const href = `${next.pathname}${next.searchStr}${\n next.hash ? `#${next.hash}` : ''\n }`\n\n this.history[nextAction === 'push' ? 'push' : 'replace'](href, next.state)\n\n this.resetNextScroll = location.resetScroll ?? true\n\n return this.latestLoadPromise\n }\n\n getRouteMatch = (id: string): undefined | RouteMatch<TRouteTree> => {\n return this.state.matchesById[id]\n }\n\n setRouteMatch = (\n id: string,\n updater: (prev: RouteMatch<TRouteTree>) => RouteMatch<TRouteTree>,\n ) => {\n this.__store.setState((prev) => {\n if (!prev.matchesById[id]) {\n return prev\n }\n\n return {\n ...prev,\n matchesById: {\n ...prev.matchesById,\n [id]: updater(prev.matchesById[id] as any),\n },\n }\n })\n }\n\n setRouteMatchData = (\n id: string,\n updater: (prev: any) => any,\n opts?: {\n updatedAt?: number\n maxAge?: number\n },\n ) => {\n const match = this.getRouteMatch(id)\n\n if (!match) return\n\n const route = this.getRoute(match.routeId)\n const updatedAt = opts?.updatedAt ?? Date.now()\n\n const preloadMaxAge =\n opts?.maxAge ??\n route.options.preloadMaxAge ??\n this.options.defaultPreloadMaxAge ??\n 5000\n\n const maxAge =\n opts?.maxAge ?? route.options.maxAge ?? this.options.defaultMaxAge ?? -1\n\n this.setRouteMatch(id, (s) => ({\n ...s,\n error: undefined,\n status: 'success',\n isFetching: false,\n updatedAt: updatedAt,\n loaderData: functionalUpdate(updater, s.loaderData),\n preloadMaxAge,\n maxAge,\n }))\n }\n\n invalidate = async (opts?: {\n matchId?: string\n reload?: boolean\n }): Promise<void> => {\n if (opts?.matchId) {\n this.setRouteMatch(opts.matchId, (s) => ({\n ...s,\n invalid: true,\n }))\n const matchIndex = this.state.matches.findIndex(\n (d) => d.id === opts.matchId,\n )\n const childMatch = this.state.matches[matchIndex + 1]\n\n if (childMatch) {\n return this.invalidate({ matchId: childMatch.id, reload: false })\n }\n } else {\n this.__store.batch(() => {\n Object.values(this.state.matchesById).forEach((match) => {\n this.setRouteMatch(match.id, (s) => ({\n ...s,\n invalid: true,\n }))\n })\n })\n }\n\n if (opts?.reload ?? true) {\n return this.navigate({\n fromCurrent: true,\n replace: true,\n search: true,\n } as any)\n }\n }\n}\n\n// Detect if we're in the DOM\nconst isServer = typeof window === 'undefined' || !window.document.createElement\n\nfunction getInitialRouterState(): RouterState<any> {\n return {\n status: 'idle',\n isFetching: false,\n resolvedLocation: null!,\n location: null!,\n matchesById: {},\n matchIds: [],\n pendingMatchIds: [],\n matches: [],\n pendingMatches: [],\n renderedMatchIds: [],\n renderedMatches: [],\n lastUpdated: Date.now(),\n }\n}\n\nfunction isCtrlEvent(e: MouseEvent) {\n return !!(e.metaKey || e.altKey || e.ctrlKey || e.shiftKey)\n}\n\nexport type AnyRedirect = Redirect<any, any, any>\n\nexport type Redirect<\n TRouteTree extends AnyRoute = RegisteredRouter['routeTree'],\n TFrom extends RoutePaths<TRouteTree> = '/',\n TTo extends string = '',\n> = NavigateOptions<TRouteTree, TFrom, TTo> & {\n code?: number\n}\n\nexport function redirect<\n TRouteTree extends AnyRoute = RegisteredRouter['routeTree'],\n TFrom extends RoutePaths<TRouteTree> = '/',\n TTo extends string = '',\n>(opts: Redirect<TRouteTree, TFrom, TTo>): Redirect<TRouteTree, TFrom, TTo> {\n ;(opts as any).isRedirect = true\n return opts\n}\n\nexport function isRedirect(obj: any): obj is AnyRedirect {\n return !!obj?.isRedirect\n}\n\nexport class SearchParamError extends Error {}\nexport class PathParamError extends Error {}\n\nfunction escapeJSON(jsonString: string) {\n return jsonString\n .replace(/\\\\/g, '\\\\\\\\') // Escape backslashes\n .replace(/'/g, \"\\\\'\") // Escape single quotes\n .replace(/\"/g, '\\\\\"') // Escape double quotes\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\nexport function isMatchInvalid(\n match: AnyRouteMatch,\n opts?: { preload?: boolean },\n) {\n const now = Date.now()\n\n if (match.invalid) {\n return true\n }\n\n if (opts?.preload) {\n return match.preloadMaxAge < 0\n ? false\n : match.updatedAt + match.preloadMaxAge < now\n }\n\n return match.maxAge < 0 ? false : match.updatedAt + match.maxAge < now\n}\n"],"names":["componentTypes","visibilityChangeEvent","focusEvent","preloadWarning","Router","resetNextScroll","constructor","options","defaultPreloadDelay","context","undefined","stringifySearch","defaultStringifySearch","parseSearch","defaultParseSearch","__store","Store","getInitialRouterState","onUpdate","prev","state","next","matchesByIdChanged","matchesById","matchesChanged","pendingMatchesChanged","matchIds","length","some","d","i","pendingMatchIds","matches","map","id","pendingMatches","hasPendingComponent","route","getRoute","routeId","pendingComponent","renderedMatchIds","renderedMatches","isFetching","defaultPriority","update","buildNext","hash","fromCurrent","search","location","href","replace","subscribers","Set","subscribe","eventType","fn","listener","add","delete","routerEvent","forEach","type","reset","setState","s","Object","assign","mount","window","addEventListener","safeLoad","removeEventListener","#onFocus","refetchOnWindowFocus","invalidate","opts","history","isServer","createMemoryHistory","createBrowserHistory","parsedLocation","resolvedLocation","basepath","routeTree","trimPath","__matches","matchRoutes","pathname","cancelMatches","match","cancelMatch","getRouteMatch","abortController","abort","load","err","latestLoadPromise","Promise","resolve","promise","reject","prevLocation","pathDidChange","latestPromise","checkLatest","from","to","pathChanged","batch","throwOnError","debug","status","loadMatches","exitingMatchIds","filter","includes","enteringMatchIds","stayingMatchIds","hook","then","cleanMatches","#mergeMatches","prevMatchesById","nextMatches","fromEntries","routesById","invariant","preloadRoute","navigateOpts","preload","maxAge","now","Date","outdatedMatchIds","values","preloadMaxAge","updatedAt","gcMaxAge","locationSearch","routeParams","foundRoute","flatRoutes","find","matchedParams","matchPathname","trimPathRight","fullPath","caseSensitive","routeCursor","matchedRoutes","parentRoute","unshift","parseErrors","parsedParamsError","parseParams","parsedParams","PathParamError","message","cause","index","interpolatedPath","interpolatePath","path","key","params","stringifiedKey","JSON","stringify","matchId","existingMatch","hasLoaders","loader","routeMatch","joinPaths","routeSearch","invalid","error","paramsError","searchError","loaderData","loadPromise","routeContext","AbortController","fetchedAt","parentMatch","searchInfo","parentSearchInfo","validator","validateSearch","parse","replaceEqualDeep","searchDidChange","SearchParamError","_resolvedMatches","getFreshMatches","setRouteMatch","firstBadMatchIndex","entries","handleError","code","routerCode","isRedirect","onError","errorHandlerErr","didError","beforeLoad","parentContext","navigate","validResolvedMatches","slice","matchPromises","push","parentMatchPromise","isMatchInvalid","latest","handleIfRedirect","componentsPromise","all","component","loaderPromise","_","setRouteMatchData","onErrorError","resolvePath","cleanPath","resetScroll","toString","String","fromString","isExternal","URL","e","matchRoute","pending","baseLocation","includeSearch","partialDeepEqual","buildLink","target","activeOptions","preloadDelay","userPreloadDelay","disabled","nextOpts","defaultPreload","currentPathSplit","split","nextPathSplit","pathIsFuzzyEqual","every","pathTest","exact","hashTest","includeHash","searchTest","isActive","handleClick","isCtrlEvent","defaultPrevented","button","preventDefault","handleFocus","catch","console","warn","handleTouchStart","handleEnter","preloadTimeout","setTimeout","handleLeave","clearTimeout","dehydrate","dehydratedMatches","pick","hydrate","__do_not_use_server_ctx","_ctx","document","__TSR_DEHYDRATED__","ctx","dehydratedData","payload","dehydratedState","router","dehydratedMatch","injectedHtml","injectHtml","html","dehydrateData","getData","strKey","data","escapeJSON","hydrateData","routesByPath","recurseRoutes","routes","init","originalIndex","existingRoute","isRoot","trimmedFullPath","endsWith","children","trimmed","parsed","parsePathname","value","shift","score","child","sort","a","b","isIndex","Math","min","rank","previousLocation","parsedSearch","searchStr","reverse","#buildLocation","dest","fromPathname","fromMatches","prevParams","last","nextParams","functionalUpdate","stringifyParams","Boolean","preSearchFilters","flat","postSearchFilters","preFilteredSearch","reduce","destSearch","postFilteredSearch","hashStr","nextState","createHref","navigateTimeout","nextAction","isSameUrl","updater","defaultPreloadMaxAge","defaultMaxAge","matchIndex","findIndex","childMatch","reload","createElement","lastUpdated","metaKey","altKey","ctrlKey","shiftKey","redirect","obj","Error","jsonString","lazyFn","args","imported"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"router.js","sources":["../../src/router.ts"],"sourcesContent":["import { Store } from '@tanstack/store'\nimport invariant from 'tiny-invariant'\n\n//\n\nimport {\n LinkInfo,\n LinkOptions,\n NavigateOptions,\n ToOptions,\n ResolveRelativePath,\n} from './link'\nimport {\n cleanPath,\n interpolatePath,\n joinPaths,\n matchPathname,\n parsePathname,\n resolvePath,\n trimPath,\n trimPathRight,\n} from './path'\nimport {\n Route,\n AnySearchSchema,\n AnyRoute,\n AnyContext,\n AnyPathParams,\n RegisteredRouteComponent,\n RegisteredErrorRouteComponent,\n RegisteredPendingRouteComponent,\n RouteMask,\n} from './route'\nimport {\n RoutesById,\n RoutesByPath,\n ParseRoute,\n FullSearchSchema,\n RouteById,\n RoutePaths,\n RouteIds,\n} from './routeInfo'\nimport { defaultParseSearch, defaultStringifySearch } from './searchParams'\nimport {\n functionalUpdate,\n last,\n NoInfer,\n pick,\n PickAsRequired,\n Timeout,\n Updater,\n replaceEqualDeep,\n partialDeepEqual,\n NonNullableUpdater,\n} from './utils'\nimport {\n createBrowserHistory,\n createMemoryHistory,\n HistoryLocation,\n LocationState,\n RouterHistory,\n} from './history'\n\n//\n\ndeclare global {\n interface Window {\n __TSR_DEHYDRATED__?: HydrationCtx\n }\n}\n\nexport interface Register {\n // router: Router\n}\n\nexport type AnyRouter = Router<any, any>\n\nexport type RegisteredRouter = Register extends {\n router: infer TRouter extends AnyRouter\n}\n ? TRouter\n : AnyRouter\n\nexport interface ParsedLocation<TSearchObj extends AnySearchSchema = {}> {\n href: string\n pathname: string\n search: TSearchObj\n searchStr: string\n state: LocationState\n hash: string\n maskedLocation?: ParsedLocation<TSearchObj>\n unmaskOnReload?: boolean\n}\n\nexport interface FromLocation {\n pathname: string\n search?: unknown\n hash?: string\n}\n\nexport type SearchSerializer = (searchObj: Record<string, any>) => string\nexport type SearchParser = (searchStr: string) => Record<string, any>\n\nexport type HydrationCtx = {\n router: DehydratedRouter\n payload: Record<string, any>\n}\n\nexport interface RouteMatch<\n TRouteTree extends AnyRoute = AnyRoute,\n TRouteId extends RouteIds<TRouteTree> = ParseRoute<TRouteTree>['id'],\n> {\n id: string\n key?: string\n routeId: TRouteId\n pathname: string\n params: RouteById<TRouteTree, TRouteId>['types']['allParams']\n status: 'pending' | 'success' | 'error'\n isFetching: boolean\n invalid: boolean\n error: unknown\n paramsError: unknown\n searchError: unknown\n updatedAt: number\n maxAge: number\n preloadMaxAge: number\n loaderData: RouteById<TRouteTree, TRouteId>['types']['loader']\n loadPromise?: Promise<void>\n __resolveLoadPromise?: () => void\n routeContext: RouteById<TRouteTree, TRouteId>['types']['routeContext']\n context: RouteById<TRouteTree, TRouteId>['types']['context']\n routeSearch: RouteById<TRouteTree, TRouteId>['types']['searchSchema']\n search: FullSearchSchema<TRouteTree> &\n RouteById<TRouteTree, TRouteId>['types']['fullSearchSchema']\n fetchedAt: number\n abortController: AbortController\n}\n\nexport type AnyRouteMatch = RouteMatch<any>\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>,\n> {\n history?: RouterHistory\n stringifySearch?: SearchSerializer\n parseSearch?: SearchParser\n defaultPreload?: false | 'intent'\n defaultPreloadDelay?: number\n reloadOnWindowFocus?: boolean\n defaultComponent?: RegisteredRouteComponent<\n unknown,\n AnySearchSchema,\n AnyPathParams,\n AnyContext,\n AnyContext\n >\n defaultErrorComponent?: RegisteredErrorRouteComponent<\n AnySearchSchema,\n AnyPathParams,\n AnyContext,\n AnyContext\n >\n defaultPendingComponent?: RegisteredPendingRouteComponent<\n AnySearchSchema,\n AnyPathParams,\n AnyContext,\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 Wrap?: React.ComponentType<{\n children: React.ReactNode\n dehydratedState?: TDehydrated\n }>\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: 'idle' | 'pending'\n isFetching: boolean\n matchesById: Record<string, RouteMatch<TRouteTree>>\n matchIds: string[]\n pendingMatchIds: string[]\n matches: RouteMatch<TRouteTree>[]\n pendingMatches: RouteMatch<TRouteTree>[]\n renderedMatchIds: string[]\n renderedMatches: 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 CommitLocationOptions {\n replace?: boolean\n resetScroll?: boolean\n}\n\nexport interface MatchLocation {\n to?: string | number | null\n fuzzy?: boolean\n caseSensitive?: boolean\n from?: string\n}\n\nexport interface MatchRouteOptions {\n pending?: boolean\n caseSensitive?: boolean\n includeSearch?: boolean\n fuzzy?: boolean\n}\n\ntype LinkCurrentTargetElement = {\n preloadTimeout?: null | ReturnType<typeof setTimeout>\n}\n\nexport interface DehydratedRouterState {\n matchIds: string[]\n dehydratedMatches: DehydratedRouteMatch[]\n}\n\nexport type DehydratedRouteMatch = Pick<\n RouteMatch,\n | 'fetchedAt'\n | 'invalid'\n | 'maxAge'\n | 'preloadMaxAge'\n | 'id'\n | 'loaderData'\n | 'status'\n | '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 from: ParsedLocation\n to: ParsedLocation\n pathChanged: boolean\n }\n onLoad: {\n type: 'onLoad'\n from: ParsedLocation\n to: 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\nconst visibilityChangeEvent = 'visibilitychange'\nconst focusEvent = 'focus'\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 types!: {\n RootRoute: TRouteTree\n }\n\n options: PickAsRequired<\n RouterOptions<TRouteTree, TDehydrated>,\n 'stringifySearch' | 'parseSearch' | 'context'\n >\n history!: RouterHistory\n #unsubHistory?: () => void\n basepath!: string\n routeTree!: TRouteTree\n routesById!: RoutesById<TRouteTree>\n routesByPath!: RoutesByPath<TRouteTree>\n flatRoutes!: ParseRoute<TRouteTree>[]\n navigateTimeout: undefined | Timeout\n nextAction: undefined | 'push' | 'replace'\n navigationPromise: undefined | Promise<void>\n\n __store: Store<RouterState<TRouteTree>>\n state: RouterState<TRouteTree>\n dehydratedData?: TDehydrated\n resetNextScroll = false\n tempLocationKey = `${Math.round(Math.random() * 10000000)}`\n // nextTemporaryLocation?: ParsedLocation<FullSearchSchema<TRouteTree>>\n\n constructor(options: RouterConstructorOptions<TRouteTree, TDehydrated>) {\n this.options = {\n defaultPreloadDelay: 50,\n context: undefined!,\n ...options,\n stringifySearch: options?.stringifySearch ?? defaultStringifySearch,\n parseSearch: options?.parseSearch ?? defaultParseSearch,\n // fetchServerDataFn: options?.fetchServerDataFn ?? defaultFetchServerDataFn,\n }\n\n this.__store = new Store<RouterState<TRouteTree>>(getInitialRouterState(), {\n onUpdate: () => {\n const prev = this.state\n\n const next = this.__store.state\n\n const matchesByIdChanged = prev.matchesById !== next.matchesById\n let matchesChanged\n let pendingMatchesChanged\n\n if (!matchesByIdChanged) {\n matchesChanged =\n prev.matchIds.length !== next.matchIds.length ||\n prev.matchIds.some((d, i) => d !== next.matchIds[i])\n\n pendingMatchesChanged =\n prev.pendingMatchIds.length !== next.pendingMatchIds.length ||\n prev.pendingMatchIds.some((d, i) => d !== next.pendingMatchIds[i])\n }\n\n if (matchesByIdChanged || matchesChanged) {\n next.matches = next.matchIds.map((id) => {\n return next.matchesById[id] as any\n })\n }\n\n if (matchesByIdChanged || pendingMatchesChanged) {\n next.pendingMatches = next.pendingMatchIds.map((id) => {\n return next.matchesById[id] as any\n })\n }\n\n if (matchesByIdChanged || matchesChanged || pendingMatchesChanged) {\n const hasPendingComponent = next.pendingMatches.some((d) => {\n const route = this.getRoute(d.routeId as any)\n return !!route?.options.pendingComponent\n })\n\n next.renderedMatchIds = hasPendingComponent\n ? next.pendingMatchIds\n : next.matchIds\n\n next.renderedMatches = next.renderedMatchIds.map((id) => {\n return next.matchesById[id] as any\n })\n }\n\n next.isFetching = [...next.matches, ...next.pendingMatches].some(\n (d) => d.isFetching,\n )\n\n this.state = next\n },\n defaultPriority: 'low',\n })\n\n this.state = this.__store.state\n\n this.update(options)\n\n const nextLocation = this.buildLocation({\n search: true,\n params: true,\n hash: true,\n state: true,\n })\n\n if (this.state.location.href !== nextLocation.href) {\n this.#commitLocation({ ...nextLocation, replace: true })\n }\n }\n\n subscribers = new Set<RouterListener<RouterEvent>>()\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 reset = () => {\n this.__store.setState((s) => Object.assign(s, getInitialRouterState()))\n }\n\n mount = () => {\n // addEventListener does not exist in React Native, but window does\n // In the future, we might need to invert control here for more adapters\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (typeof window !== 'undefined' && window.addEventListener) {\n window.addEventListener(visibilityChangeEvent, this.#onFocus, false)\n window.addEventListener(focusEvent, this.#onFocus, false)\n }\n\n this.safeLoad()\n\n return () => {\n if (typeof window !== 'undefined' && window.removeEventListener) {\n window.removeEventListener(visibilityChangeEvent, this.#onFocus)\n window.removeEventListener(focusEvent, this.#onFocus)\n }\n }\n }\n\n #onFocus = () => {\n if (this.options.reloadOnWindowFocus ?? true) {\n this.invalidate({\n __fromFocus: true,\n })\n }\n }\n\n update = (opts?: RouterOptions<any, any>): this => {\n this.options = {\n ...this.options,\n ...opts,\n context: {\n ...this.options.context,\n ...opts?.context,\n },\n }\n\n if (\n !this.history ||\n (this.options.history && this.options.history !== this.history)\n ) {\n if (this.#unsubHistory) {\n this.#unsubHistory()\n }\n\n this.history =\n this.options.history ??\n (isServer ? createMemoryHistory() : createBrowserHistory()!)\n\n const parsedLocation = this.#parseLocation()\n\n this.__store.setState((s) => ({\n ...s,\n resolvedLocation: parsedLocation as any,\n location: parsedLocation as any,\n }))\n\n this.#unsubHistory = this.history.subscribe(() => {\n this.safeLoad({\n next: this.#parseLocation(this.state.location),\n })\n })\n }\n\n const { basepath, routeTree } = this.options\n\n this.basepath = `/${trimPath(basepath ?? '') ?? ''}`\n\n if (routeTree && routeTree !== this.routeTree) {\n this.#processRoutes(routeTree)\n }\n\n return this\n }\n\n cancelMatches = () => {\n this.state.matches.forEach((match) => {\n this.cancelMatch(match.id)\n })\n }\n\n cancelMatch = (id: string) => {\n this.getRouteMatch(id)?.abortController?.abort()\n }\n\n safeLoad = async (opts?: { next?: ParsedLocation }) => {\n try {\n return this.load(opts)\n } catch (err) {\n // Don't do anything\n }\n }\n\n latestLoadPromise: Promise<void> = Promise.resolve()\n\n load = async (opts?: {\n next?: ParsedLocation\n throwOnError?: boolean\n __dehydratedMatches?: DehydratedRouteMatch[]\n }) => {\n const promise = new Promise<void>(async (resolve, reject) => {\n const prevLocation = this.state.resolvedLocation\n const pathDidChange = !!(\n opts?.next && prevLocation!.href !== opts.next.href\n )\n\n let latestPromise: Promise<void> | undefined | null\n\n const checkLatest = (): undefined | Promise<void> | null => {\n return this.latestLoadPromise !== promise\n ? this.latestLoadPromise\n : undefined\n }\n\n // Cancel any pending matches\n\n let pendingMatches!: RouteMatch<any, any>[]\n\n this.#emit({\n type: 'onBeforeLoad',\n from: prevLocation,\n to: opts?.next ?? this.state.location,\n pathChanged: pathDidChange,\n })\n\n this.__store.batch(() => {\n if (opts?.next) {\n // Ingest the new location\n this.__store.setState((s) => ({\n ...s,\n location: opts.next! as any,\n }))\n }\n\n // Match the routes\n pendingMatches = this.matchRoutes(\n this.state.location.pathname,\n this.state.location.search,\n {\n throwOnError: opts?.throwOnError,\n debug: true,\n },\n )\n\n this.__store.setState((s) => ({\n ...s,\n status: 'pending',\n pendingMatchIds: pendingMatches.map((d) => d.id),\n matchesById: this.#mergeMatches(s.matchesById, pendingMatches),\n }))\n })\n\n try {\n // Load the matches\n try {\n await this.loadMatches(pendingMatches.map((d) => d.id))\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 = checkLatest())) {\n return latestPromise\n }\n\n const exitingMatchIds = this.state.matchIds.filter(\n (id) => !this.state.pendingMatchIds.includes(id),\n )\n\n const enteringMatchIds = this.state.pendingMatchIds.filter(\n (id) => !this.state.matchIds.includes(id),\n )\n\n const stayingMatchIds = this.state.matchIds.filter((id) =>\n this.state.pendingMatchIds.includes(id),\n )\n\n this.__store.setState((s) => ({\n ...s,\n status: 'idle',\n resolvedLocation: s.location,\n matchIds: s.pendingMatchIds,\n pendingMatchIds: [],\n }))\n ;(\n [\n [exitingMatchIds, 'onLeave'],\n [enteringMatchIds, 'onEnter'],\n [stayingMatchIds, 'onTransition'],\n ] as const\n ).forEach(([matchIds, hook]) => {\n matchIds.forEach((id) => {\n const match = this.getRouteMatch(id)!\n const route = this.getRoute(match.routeId)\n route.options[hook]?.(match)\n })\n })\n\n this.#emit({\n type: 'onLoad',\n from: prevLocation,\n to: this.state.location,\n pathChanged: pathDidChange,\n })\n\n resolve()\n } catch (err) {\n // Only apply the latest transition\n if ((latestPromise = checkLatest())) {\n return latestPromise\n }\n\n reject(err)\n }\n })\n\n this.latestLoadPromise = promise\n\n this.latestLoadPromise.then(() => {\n this.cleanMatches()\n })\n\n return this.latestLoadPromise\n }\n\n #mergeMatches = (\n prevMatchesById: Record<string, RouteMatch<TRouteTree>>,\n nextMatches: AnyRouteMatch[],\n ): Record<string, RouteMatch<TRouteTree>> => {\n let matchesById = { ...prevMatchesById }\n\n nextMatches.forEach((match) => {\n if (!matchesById[match.id]) {\n matchesById[match.id] = match\n }\n\n matchesById[match.id] = {\n ...matchesById[match.id],\n ...match,\n }\n })\n\n return matchesById\n }\n\n getRoute = (id: string): Route => {\n const route = (this.routesById as any)[id]\n\n invariant(route, `Route with id \"${id as string}\" not found`)\n\n return route as any\n }\n\n preloadRoute = async (\n navigateOpts: BuildNextOptions & {\n maxAge?: number\n } = this.state.location,\n ) => {\n let next = this.buildLocation(navigateOpts)\n\n const matches = this.matchRoutes(next.pathname, next.search, {\n throwOnError: true,\n })\n\n this.__store.setState((s) => {\n return {\n ...s,\n matchesById: this.#mergeMatches(s.matchesById, matches),\n }\n })\n\n await this.loadMatches(\n matches.map((d) => d.id),\n {\n preload: true,\n maxAge: navigateOpts.maxAge,\n },\n )\n\n return [last(matches)!, matches] as const\n }\n\n cleanMatches = () => {\n const now = Date.now()\n\n const outdatedMatchIds = Object.values(this.state.matchesById)\n .filter((match) => {\n const route = this.getRoute(match.routeId)\n\n return (\n !this.state.matchIds.includes(match.id) &&\n !this.state.pendingMatchIds.includes(match.id) &&\n (match.preloadMaxAge > -1\n ? match.updatedAt + match.preloadMaxAge < now\n : true) &&\n (route.options.gcMaxAge\n ? match.updatedAt + route.options.gcMaxAge < now\n : true)\n )\n })\n .map((d) => d.id)\n\n if (outdatedMatchIds.length) {\n this.__store.setState((s) => {\n const matchesById = { ...s.matchesById }\n outdatedMatchIds.forEach((id) => {\n delete matchesById[id]\n })\n return {\n ...s,\n matchesById,\n }\n })\n }\n }\n\n matchRoutes = (\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 },\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 key = route.options.key\n ? route.options.key({\n params: routeParams,\n search: locationSearch,\n }) ?? ''\n : ''\n\n const stringifiedKey = key ? JSON.stringify(key) : ''\n\n const matchId =\n interpolatePath(route.id, routeParams, true) + stringifiedKey\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 = this.getRouteMatch(matchId)\n\n if (existingMatch) {\n return { ...existingMatch }\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 key: stringifiedKey,\n routeId: route.id,\n params: routeParams,\n pathname: joinPaths([this.basepath, interpolatedPath]),\n updatedAt: Date.now(),\n maxAge: -1,\n preloadMaxAge: -1,\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 loaderData: undefined,\n loadPromise: Promise.resolve(),\n routeContext: undefined!,\n context: undefined!,\n abortController: new AbortController(),\n fetchedAt: 0,\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.getRoute(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 loadMatches = async (\n matchIds: string[],\n opts?: {\n preload?: boolean\n maxAge?: number\n },\n ) => {\n const getFreshMatches = () => matchIds.map((d) => this.getRouteMatch(d)!)\n\n if (!opts?.preload) {\n getFreshMatches().forEach((match) => {\n // Update each match with its latest route data\n this.setRouteMatch(match.id, (s) => ({\n ...s,\n routeSearch: match.routeSearch,\n search: match.search,\n routeContext: match.routeContext,\n context: match.context,\n error: match.error,\n paramsError: match.paramsError,\n searchError: match.searchError,\n params: match.params,\n preloadMaxAge: 0,\n }))\n })\n }\n\n let firstBadMatchIndex: number | undefined\n\n // Check each match middleware to see if the route can be accessed\n try {\n for (const [index, match] of getFreshMatches().entries()) {\n const parentMatch = getFreshMatches()[index - 1]\n const route = this.getRoute(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 this.setRouteMatch(match.id, (s) => ({\n ...s,\n error: err,\n status: 'error',\n updatedAt: Date.now(),\n }))\n }\n\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 let didError = false\n\n try {\n const routeContext =\n (await route.options.beforeLoad?.({\n ...match,\n preload: !!opts?.preload,\n parentContext: parentMatch?.routeContext ?? {},\n context: parentMatch?.context ?? this?.options.context ?? {},\n })) ?? ({} as any)\n\n const context = {\n ...(parentMatch?.context ?? this?.options.context),\n ...routeContext,\n } as any\n\n this.setRouteMatch(match.id, (s) => ({\n ...s,\n context,\n routeContext,\n }))\n } catch (err) {\n handleError(err, 'BEFORE_LOAD')\n didError = true\n }\n\n // If we errored, do not run the next matches' middleware\n if (didError) {\n break\n }\n }\n } catch (err) {\n if (isRedirect(err)) {\n if (!opts?.preload) this.navigate(err as any)\n return\n }\n\n throw err\n }\n\n const validResolvedMatches = getFreshMatches().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.getRoute(match.routeId)\n\n if (\n match.isFetching ||\n (match.status === 'success' &&\n !isMatchInvalid(match, {\n preload: opts?.preload,\n }))\n ) {\n return this.getRouteMatch(match.id)?.loadPromise\n }\n\n const fetchedAt = Date.now()\n const checkLatest = () => {\n const latest = this.getRouteMatch(match.id)\n return latest && latest.fetchedAt !== fetchedAt\n ? latest.loadPromise\n : undefined\n }\n\n const handleIfRedirect = (err: any) => {\n if (isRedirect(err)) {\n if (!opts?.preload) {\n this.navigate(err as any)\n }\n return true\n }\n return false\n }\n\n const load = async () => {\n let latestPromise\n\n try {\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?.({\n ...match,\n preload: !!opts?.preload,\n parentMatchPromise,\n })\n\n const [_, loader] = await Promise.all([\n componentsPromise,\n loaderPromise,\n ])\n if ((latestPromise = checkLatest())) return await latestPromise\n\n this.setRouteMatchData(match.id, () => loader, opts)\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 this.setRouteMatch(match.id, (s) => ({\n ...s,\n error,\n status: 'error',\n isFetching: false,\n updatedAt: Date.now(),\n }))\n }\n }\n\n let loadPromise: Promise<void> | undefined\n\n this.__store.batch(() => {\n this.setRouteMatch(match.id, (s) => ({\n ...s,\n // status: s.status !== 'success' ? 'pending' : s.status,\n isFetching: true,\n fetchedAt,\n invalid: false,\n }))\n\n loadPromise = load()\n\n this.setRouteMatch(match.id, (s) => ({\n ...s,\n loadPromise,\n }))\n })\n\n await loadPromise\n })(),\n )\n })\n\n await Promise.all(matchPromises)\n }\n\n resolvePath = (from: string, path: string) => {\n return resolvePath(this.basepath!, from, cleanPath(path))\n }\n\n navigate = async <\n TFrom extends RoutePaths<TRouteTree> = '/',\n TTo extends string = '',\n TMaskFrom extends RoutePaths<TRouteTree> = TFrom,\n TMaskTo extends string = '',\n >({\n from,\n to = '' as any,\n search,\n hash,\n replace,\n params,\n resetScroll,\n }: NavigateOptions<TRouteTree, TFrom, TTo, TMaskFrom, TMaskTo>) => {\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 from: fromString,\n to: toString,\n search,\n hash,\n params,\n replace,\n resetScroll,\n })\n }\n\n matchRoute = <\n TRouteTree extends AnyRoute = AnyRoute,\n TFrom extends RoutePaths<TRouteTree> = '/',\n TTo extends string = '',\n TResolved = ResolveRelativePath<TFrom, NoInfer<TTo>>,\n >(\n location: ToOptions<TRouteTree, TFrom, TTo>,\n opts?: MatchRouteOptions,\n ): false | RouteById<TRouteTree, TResolved>['types']['allParams'] => {\n location = {\n ...location,\n to: location.to\n ? this.resolvePath(location.from ?? '', location.to)\n : undefined,\n } as any\n\n const next = this.buildLocation(location)\n if (opts?.pending && this.state.status !== 'pending') {\n return false\n }\n\n const baseLocation = opts?.pending\n ? this.state.location\n : this.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 (opts?.includeSearch ?? true) {\n return partialDeepEqual(baseLocation.search, next.search) ? match : false\n }\n\n return match\n }\n\n buildLink = <\n TFrom extends RoutePaths<TRouteTree> = '/',\n TTo extends string = '',\n >({\n from,\n to = '.' as any,\n search,\n params,\n hash,\n target,\n replace,\n activeOptions,\n preload,\n preloadDelay: userPreloadDelay,\n disabled,\n state,\n mask,\n resetScroll,\n }: LinkOptions<TRouteTree, TFrom, TTo>): LinkInfo => {\n // If this link simply reloads the current route,\n // make sure it has a new key so it will trigger a data refresh\n\n // If this `to` is a valid external URL, return\n // null for LinkUtils\n\n try {\n new URL(`${to}`)\n return {\n type: 'external',\n href: to,\n }\n } catch (e) {}\n\n const nextOpts = {\n from,\n to,\n search,\n params,\n hash,\n replace,\n state,\n mask,\n resetScroll,\n }\n\n const next = this.buildLocation(nextOpts)\n\n preload = preload ?? this.options.defaultPreload\n const preloadDelay =\n userPreloadDelay ?? this.options.defaultPreloadDelay ?? 0\n\n // Compare path/hash for matches\n const currentPathSplit = this.state.location.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 options\n const pathTest = activeOptions?.exact\n ? this.state.location.pathname === next.pathname\n : pathIsFuzzyEqual\n const hashTest = activeOptions?.includeHash\n ? this.state.location.hash === next.hash\n : true\n const searchTest =\n activeOptions?.includeSearch ?? true\n ? partialDeepEqual(this.state.location.search, next.search)\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 })\n }\n }\n\n // The click handler\n const handleFocus = (e: MouseEvent) => {\n if (preload) {\n this.preloadRoute(nextOpts).catch((err) => {\n console.warn(err)\n console.warn(preloadWarning)\n })\n }\n }\n\n const handleTouchStart = (e: TouchEvent) => {\n this.preloadRoute(nextOpts).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).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 dehydrate = (): DehydratedRouter => {\n return {\n state: {\n matchIds: this.state.matchIds,\n dehydratedMatches: this.state.matches.map((d) =>\n pick(d, [\n 'fetchedAt',\n 'invalid',\n 'preloadMaxAge',\n 'maxAge',\n 'id',\n 'loaderData',\n 'status',\n 'updatedAt',\n ]),\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.__store.setState((s) => {\n return {\n ...s,\n matchIds: dehydratedState.matchIds,\n matches,\n matchesById: this.#mergeMatches(s.matchesById, matches),\n }\n })\n }\n\n injectedHtml: (string | (() => Promise<string> | string))[] = []\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 = 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 // resolveMatchPromise = (matchId: string, key: string, value: any) => {\n // this.state.matches\n // .find((d) => d.id === matchId)\n // ?.__promisesByKey[key]?.resolve(value)\n // }\n\n #processRoutes = (routeTree: TRouteTree) => {\n this.routeTree = routeTree as any\n this.routesById = {} as any\n this.routesByPath = {} as any\n this.flatRoutes = [] as any\n\n const recurseRoutes = (routes: AnyRoute[]) => {\n routes.forEach((route, i) => {\n route.init({ originalIndex: i, router: this })\n\n const existingRoute = (this.routesById as any)[route.id]\n\n invariant(\n !existingRoute,\n `Duplicate routes found with id: ${String(route.id)}`,\n )\n ;(this.routesById as any)[route.id] = route\n\n if (!route.isRoot && route.path) {\n const trimmedFullPath = trimPathRight(route.fullPath)\n if (\n !(this.routesByPath as any)[trimmedFullPath] ||\n route.fullPath.endsWith('/')\n ) {\n ;(this.routesByPath as any)[trimmedFullPath] = route\n }\n }\n\n const children = route.children as Route[]\n\n if (children?.length) {\n recurseRoutes(children)\n }\n })\n }\n\n recurseRoutes([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 }) as any\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(\n previousLocation?.state,\n state,\n ) as LocationState,\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 buildLocation = (opts: BuildNextOptions = {}): ParsedLocation => {\n const build = (\n dest: BuildNextOptions & {\n unmaskOnReload?: boolean\n } = {},\n matches?: AnyRouteMatch[],\n ): ParsedLocation => {\n const from = this.state.location\n\n const fromPathname = dest.from ?? from.pathname\n\n let pathname = resolvePath(\n this.basepath ?? '/',\n fromPathname,\n `${dest.to ?? ''}`,\n )\n\n const fromMatches = this.matchRoutes(fromPathname, from.search)\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.getRoute(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 matches\n ?.map(\n (match) =>\n this.getRoute(match.routeId).options.preSearchFilters ?? [],\n )\n .flat()\n .filter(Boolean) ?? []\n\n const postSearchFilters =\n matches\n ?.map(\n (match) =>\n this.getRoute(match.routeId).options.postSearchFilters ?? [],\n )\n .flat()\n .filter(Boolean) ?? []\n\n // Pre filters first\n const preFilteredSearch = preSearchFilters?.length\n ? preSearchFilters?.reduce((prev, next) => next(prev), from.search)\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,\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 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 #buildAndCommitLocation = ({\n replace,\n resetScroll,\n ...rest\n }: BuildNextOptions & CommitLocationOptions = {}) => {\n const location = this.buildLocation(rest)\n return this.#commitLocation({\n ...location,\n replace,\n resetScroll,\n })\n }\n\n #commitLocation = async (next: ParsedLocation & CommitLocationOptions) => {\n if (this.navigateTimeout) clearTimeout(this.navigateTimeout)\n\n let nextAction: 'push' | 'replace' = 'replace'\n\n if (!next.replace) {\n nextAction = 'push'\n }\n\n const isSameUrl = this.state.location.href === next.href\n\n if (isSameUrl) {\n nextAction = 'replace'\n }\n\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 (nextHistory.unmaskOnReload ?? this.options.unmaskOnReload ?? false) {\n nextHistory.state.__tempKey = this.tempLocationKey\n }\n }\n\n this.history[nextAction === 'push' ? 'push' : 'replace'](\n nextHistory.href,\n nextHistory.state,\n )\n\n this.resetNextScroll = next.resetScroll ?? true\n\n return this.latestLoadPromise\n }\n\n getRouteMatch = (id: string): undefined | RouteMatch<TRouteTree> => {\n return this.state.matchesById[id]\n }\n\n setRouteMatch = (\n id: string,\n updater: (prev: RouteMatch<TRouteTree>) => RouteMatch<TRouteTree>,\n ) => {\n this.__store.setState((prev) => {\n if (!prev.matchesById[id]) {\n return prev\n }\n\n return {\n ...prev,\n matchesById: {\n ...prev.matchesById,\n [id]: updater(prev.matchesById[id] as any),\n },\n }\n })\n }\n\n setRouteMatchData = (\n id: string,\n updater: (prev: any) => any,\n opts?: {\n updatedAt?: number\n maxAge?: number\n },\n ) => {\n const match = this.getRouteMatch(id)\n\n if (!match) return\n\n const route = this.getRoute(match.routeId)\n const updatedAt = opts?.updatedAt ?? Date.now()\n\n const preloadMaxAge =\n opts?.maxAge ??\n route.options.preloadMaxAge ??\n this.options.defaultPreloadMaxAge ??\n 5000\n\n const maxAge =\n opts?.maxAge ?? route.options.maxAge ?? this.options.defaultMaxAge ?? -1\n\n this.setRouteMatch(id, (s) => ({\n ...s,\n error: undefined,\n status: 'success',\n isFetching: false,\n updatedAt: updatedAt,\n loaderData: functionalUpdate(updater, s.loaderData),\n preloadMaxAge,\n maxAge,\n }))\n }\n\n invalidate = async (opts?: {\n matchId?: string\n reload?: boolean\n __fromFocus?: boolean\n }): Promise<void> => {\n if (opts?.matchId) {\n this.setRouteMatch(opts.matchId, (s) => ({\n ...s,\n invalid: true,\n }))\n\n const matchIndex = this.state.matches.findIndex(\n (d) => d.id === opts.matchId,\n )\n const childMatch = this.state.matches[matchIndex + 1]\n\n if (childMatch) {\n return this.invalidate({\n matchId: childMatch.id,\n reload: false,\n __fromFocus: opts.__fromFocus,\n })\n }\n } else {\n this.__store.batch(() => {\n Object.values(this.state.matchesById).forEach((match) => {\n const route = this.getRoute(match.routeId)\n const shouldInvalidate = opts?.__fromFocus\n ? route.options.reloadOnWindowFocus ?? true\n : true\n\n if (shouldInvalidate) {\n this.setRouteMatch(match.id, (s) => ({\n ...s,\n invalid: true,\n }))\n }\n })\n })\n }\n\n if (opts?.reload ?? true) {\n return this.load()\n }\n }\n}\n\n// Detect if we're in the DOM\nconst isServer = typeof window === 'undefined' || !window.document.createElement\n\nfunction getInitialRouterState(): RouterState<any> {\n return {\n status: 'idle',\n isFetching: false,\n resolvedLocation: null!,\n location: null!,\n matchesById: {},\n matchIds: [],\n pendingMatchIds: [],\n matches: [],\n pendingMatches: [],\n renderedMatchIds: [],\n renderedMatches: [],\n lastUpdated: Date.now(),\n }\n}\n\nfunction isCtrlEvent(e: MouseEvent) {\n return !!(e.metaKey || e.altKey || e.ctrlKey || e.shiftKey)\n}\n\nexport type AnyRedirect = Redirect<any, any, any>\n\nexport type Redirect<\n TRouteTree extends AnyRoute = RegisteredRouter['routeTree'],\n TFrom extends RoutePaths<TRouteTree> = '/',\n TTo extends string = '',\n TMaskFrom extends RoutePaths<TRouteTree> = TFrom,\n TMaskTo extends string = '',\n> = NavigateOptions<TRouteTree, TFrom, TTo, TMaskFrom, TMaskTo> & {\n code?: number\n}\n\nexport function redirect<\n TRouteTree extends AnyRoute = RegisteredRouter['routeTree'],\n TFrom extends RoutePaths<TRouteTree> = '/',\n TTo extends string = '',\n>(opts: Redirect<TRouteTree, TFrom, TTo>): Redirect<TRouteTree, TFrom, TTo> {\n ;(opts as any).isRedirect = true\n return opts\n}\n\nexport function isRedirect(obj: any): obj is AnyRedirect {\n return !!obj?.isRedirect\n}\n\nexport class SearchParamError extends Error {}\nexport class PathParamError extends Error {}\n\nfunction escapeJSON(jsonString: string) {\n return jsonString\n .replace(/\\\\/g, '\\\\\\\\') // Escape backslashes\n .replace(/'/g, \"\\\\'\") // Escape single quotes\n .replace(/\"/g, '\\\\\"') // Escape double quotes\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\nexport function isMatchInvalid(\n match: AnyRouteMatch,\n opts?: { preload?: boolean },\n) {\n const now = Date.now()\n\n if (match.invalid) {\n return true\n }\n\n if (opts?.preload) {\n return match.preloadMaxAge < 0\n ? false\n : match.updatedAt + match.preloadMaxAge < now\n }\n\n return match.maxAge < 0 ? false : match.updatedAt + match.maxAge < now\n}\n"],"names":["componentTypes","visibilityChangeEvent","focusEvent","preloadWarning","Router","resetNextScroll","tempLocationKey","Math","round","random","constructor","options","defaultPreloadDelay","context","undefined","stringifySearch","defaultStringifySearch","parseSearch","defaultParseSearch","__store","Store","getInitialRouterState","onUpdate","prev","state","next","matchesByIdChanged","matchesById","matchesChanged","pendingMatchesChanged","matchIds","length","some","d","i","pendingMatchIds","matches","map","id","pendingMatches","hasPendingComponent","route","getRoute","routeId","pendingComponent","renderedMatchIds","renderedMatches","isFetching","defaultPriority","update","nextLocation","buildLocation","search","params","hash","location","href","replace","subscribers","Set","subscribe","eventType","fn","listener","add","delete","routerEvent","forEach","type","reset","setState","s","Object","assign","mount","window","addEventListener","safeLoad","removeEventListener","#onFocus","reloadOnWindowFocus","invalidate","__fromFocus","opts","history","isServer","createMemoryHistory","createBrowserHistory","parsedLocation","resolvedLocation","basepath","routeTree","trimPath","cancelMatches","match","cancelMatch","getRouteMatch","abortController","abort","load","err","latestLoadPromise","Promise","resolve","promise","reject","prevLocation","pathDidChange","latestPromise","checkLatest","from","to","pathChanged","batch","matchRoutes","pathname","throwOnError","debug","status","loadMatches","exitingMatchIds","filter","includes","enteringMatchIds","stayingMatchIds","hook","then","cleanMatches","#mergeMatches","prevMatchesById","nextMatches","routesById","invariant","preloadRoute","navigateOpts","preload","maxAge","last","now","Date","outdatedMatchIds","values","preloadMaxAge","updatedAt","gcMaxAge","locationSearch","routeParams","foundRoute","flatRoutes","find","matchedParams","matchPathname","trimPathRight","fullPath","caseSensitive","routeCursor","matchedRoutes","parentRoute","unshift","parseErrors","parsedParamsError","parseParams","parsedParams","PathParamError","message","cause","index","interpolatedPath","interpolatePath","path","key","stringifiedKey","JSON","stringify","matchId","existingMatch","hasLoaders","loader","routeMatch","joinPaths","routeSearch","invalid","error","paramsError","searchError","loaderData","loadPromise","routeContext","AbortController","fetchedAt","parentMatch","searchInfo","parentSearchInfo","validator","validateSearch","parse","replaceEqualDeep","searchDidChange","SearchParamError","getFreshMatches","setRouteMatch","firstBadMatchIndex","entries","handleError","code","routerCode","isRedirect","onError","errorHandlerErr","didError","beforeLoad","parentContext","navigate","validResolvedMatches","slice","matchPromises","push","parentMatchPromise","isMatchInvalid","latest","handleIfRedirect","componentsPromise","all","component","loaderPromise","_","setRouteMatchData","onErrorError","resolvePath","cleanPath","resetScroll","toString","String","fromString","isExternal","URL","e","matchRoute","pending","baseLocation","includeSearch","partialDeepEqual","buildLink","target","activeOptions","preloadDelay","userPreloadDelay","disabled","mask","nextOpts","defaultPreload","currentPathSplit","split","nextPathSplit","pathIsFuzzyEqual","every","pathTest","exact","hashTest","includeHash","searchTest","isActive","handleClick","isCtrlEvent","defaultPrevented","button","preventDefault","handleFocus","catch","console","warn","handleTouchStart","handleEnter","preloadTimeout","setTimeout","handleLeave","clearTimeout","dehydrate","dehydratedMatches","pick","hydrate","__do_not_use_server_ctx","_ctx","document","__TSR_DEHYDRATED__","ctx","dehydratedData","payload","dehydratedState","router","dehydratedMatch","injectedHtml","injectHtml","html","dehydrateData","getData","strKey","data","escapeJSON","hydrateData","routesByPath","recurseRoutes","routes","init","originalIndex","existingRoute","isRoot","trimmedFullPath","endsWith","children","trimmed","parsed","parsePathname","value","shift","score","child","sort","a","b","isIndex","min","rank","previousLocation","parsedSearch","searchStr","reverse","__tempLocation","__tempKey","parsedTempLocation","maskedLocation","build","dest","fromPathname","fromMatches","prevParams","nextParams","functionalUpdate","stringifyParams","Boolean","preSearchFilters","flat","postSearchFilters","preFilteredSearch","reduce","destSearch","postFilteredSearch","hashStr","nextState","createHref","unmaskOnReload","buildWithMatches","maskedDest","maskedNext","foundMask","routeMasks","fuzzy","maskedMatches","maskedFinal","final","#buildAndCommitLocation","rest","navigateTimeout","nextAction","isSameUrl","nextHistory","updater","defaultPreloadMaxAge","defaultMaxAge","matchIndex","findIndex","childMatch","reload","shouldInvalidate","createElement","lastUpdated","metaKey","altKey","ctrlKey","shiftKey","redirect","obj","Error","jsonString","lazyFn","args","imported"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AA+DA;;AAyNO,MAAMA,cAAc,GAAG,CAC5B,WAAW,EACX,gBAAgB,EAChB,kBAAkB,EACV;AAwBV,MAAMC,qBAAqB,GAAG,kBAAkB,CAAA;AAChD,MAAMC,UAAU,GAAG,OAAO,CAAA;AAC1B,MAAMC,cAAc,GAAG,4BAA4B,CAAA;AAE5C,MAAMC,MAAM,CAGjB;AAUA,EAAA,aAAa,CAAA;AAabC,EAAAA,eAAe,GAAG,KAAK,CAAA;AACvBC,EAAAA,eAAe,GAAI,CAAA,EAAEC,IAAI,CAACC,KAAK,CAACD,IAAI,CAACE,MAAM,EAAE,GAAG,QAAQ,CAAE,CAAC,CAAA,CAAA;AAC3D;;EAEAC,WAAWA,CAACC,OAA0D,EAAE;IACtE,IAAI,CAACA,OAAO,GAAG;AACbC,MAAAA,mBAAmB,EAAE,EAAE;AACvBC,MAAAA,OAAO,EAAEC,SAAU;AACnB,MAAA,GAAGH,OAAO;AACVI,MAAAA,eAAe,EAAEJ,OAAO,EAAEI,eAAe,IAAIC,mCAAsB;AACnEC,MAAAA,WAAW,EAAEN,OAAO,EAAEM,WAAW,IAAIC,+BAAAA;AACrC;KACD,CAAA;;IAED,IAAI,CAACC,OAAO,GAAG,IAAIC,WAAK,CAA0BC,qBAAqB,EAAE,EAAE;MACzEC,QAAQ,EAAEA,MAAM;AACd,QAAA,MAAMC,IAAI,GAAG,IAAI,CAACC,KAAK,CAAA;AAEvB,QAAA,MAAMC,IAAI,GAAG,IAAI,CAACN,OAAO,CAACK,KAAK,CAAA;QAE/B,MAAME,kBAAkB,GAAGH,IAAI,CAACI,WAAW,KAAKF,IAAI,CAACE,WAAW,CAAA;AAChE,QAAA,IAAIC,cAAc,CAAA;AAClB,QAAA,IAAIC,qBAAqB,CAAA;QAEzB,IAAI,CAACH,kBAAkB,EAAE;AACvBE,UAAAA,cAAc,GACZL,IAAI,CAACO,QAAQ,CAACC,MAAM,KAAKN,IAAI,CAACK,QAAQ,CAACC,MAAM,IAC7CR,IAAI,CAACO,QAAQ,CAACE,IAAI,CAAC,CAACC,CAAC,EAAEC,CAAC,KAAKD,CAAC,KAAKR,IAAI,CAACK,QAAQ,CAACI,CAAC,CAAC,CAAC,CAAA;AAEtDL,UAAAA,qBAAqB,GACnBN,IAAI,CAACY,eAAe,CAACJ,MAAM,KAAKN,IAAI,CAACU,eAAe,CAACJ,MAAM,IAC3DR,IAAI,CAACY,eAAe,CAACH,IAAI,CAAC,CAACC,CAAC,EAAEC,CAAC,KAAKD,CAAC,KAAKR,IAAI,CAACU,eAAe,CAACD,CAAC,CAAC,CAAC,CAAA;AACtE,SAAA;QAEA,IAAIR,kBAAkB,IAAIE,cAAc,EAAE;UACxCH,IAAI,CAACW,OAAO,GAAGX,IAAI,CAACK,QAAQ,CAACO,GAAG,CAAEC,EAAE,IAAK;AACvC,YAAA,OAAOb,IAAI,CAACE,WAAW,CAACW,EAAE,CAAC,CAAA;AAC7B,WAAC,CAAC,CAAA;AACJ,SAAA;QAEA,IAAIZ,kBAAkB,IAAIG,qBAAqB,EAAE;UAC/CJ,IAAI,CAACc,cAAc,GAAGd,IAAI,CAACU,eAAe,CAACE,GAAG,CAAEC,EAAE,IAAK;AACrD,YAAA,OAAOb,IAAI,CAACE,WAAW,CAACW,EAAE,CAAC,CAAA;AAC7B,WAAC,CAAC,CAAA;AACJ,SAAA;AAEA,QAAA,IAAIZ,kBAAkB,IAAIE,cAAc,IAAIC,qBAAqB,EAAE;UACjE,MAAMW,mBAAmB,GAAGf,IAAI,CAACc,cAAc,CAACP,IAAI,CAAEC,CAAC,IAAK;YAC1D,MAAMQ,KAAK,GAAG,IAAI,CAACC,QAAQ,CAACT,CAAC,CAACU,OAAc,CAAC,CAAA;AAC7C,YAAA,OAAO,CAAC,CAACF,KAAK,EAAE9B,OAAO,CAACiC,gBAAgB,CAAA;AAC1C,WAAC,CAAC,CAAA;UAEFnB,IAAI,CAACoB,gBAAgB,GAAGL,mBAAmB,GACvCf,IAAI,CAACU,eAAe,GACpBV,IAAI,CAACK,QAAQ,CAAA;UAEjBL,IAAI,CAACqB,eAAe,GAAGrB,IAAI,CAACoB,gBAAgB,CAACR,GAAG,CAAEC,EAAE,IAAK;AACvD,YAAA,OAAOb,IAAI,CAACE,WAAW,CAACW,EAAE,CAAC,CAAA;AAC7B,WAAC,CAAC,CAAA;AACJ,SAAA;QAEAb,IAAI,CAACsB,UAAU,GAAG,CAAC,GAAGtB,IAAI,CAACW,OAAO,EAAE,GAAGX,IAAI,CAACc,cAAc,CAAC,CAACP,IAAI,CAC7DC,CAAC,IAAKA,CAAC,CAACc,UACX,CAAC,CAAA;QAED,IAAI,CAACvB,KAAK,GAAGC,IAAI,CAAA;OAClB;AACDuB,MAAAA,eAAe,EAAE,KAAA;AACnB,KAAC,CAAC,CAAA;AAEF,IAAA,IAAI,CAACxB,KAAK,GAAG,IAAI,CAACL,OAAO,CAACK,KAAK,CAAA;AAE/B,IAAA,IAAI,CAACyB,MAAM,CAACtC,OAAO,CAAC,CAAA;AAEpB,IAAA,MAAMuC,YAAY,GAAG,IAAI,CAACC,aAAa,CAAC;AACtCC,MAAAA,MAAM,EAAE,IAAI;AACZC,MAAAA,MAAM,EAAE,IAAI;AACZC,MAAAA,IAAI,EAAE,IAAI;AACV9B,MAAAA,KAAK,EAAE,IAAA;AACT,KAAC,CAAC,CAAA;IAEF,IAAI,IAAI,CAACA,KAAK,CAAC+B,QAAQ,CAACC,IAAI,KAAKN,YAAY,CAACM,IAAI,EAAE;MAClD,IAAI,CAAC,eAAe,CAAC;AAAE,QAAA,GAAGN,YAAY;AAAEO,QAAAA,OAAO,EAAE,IAAA;AAAK,OAAC,CAAC,CAAA;AAC1D,KAAA;AACF,GAAA;AAEAC,EAAAA,WAAW,GAAG,IAAIC,GAAG,EAA+B,CAAA;AAEpDC,EAAAA,SAAS,GAAGA,CACVC,SAAgB,EAChBC,EAAmC,KAChC;AACH,IAAA,MAAMC,QAA6B,GAAG;MACpCF,SAAS;AACTC,MAAAA,EAAAA;KACD,CAAA;AAED,IAAA,IAAI,CAACJ,WAAW,CAACM,GAAG,CAACD,QAAQ,CAAC,CAAA;AAE9B,IAAA,OAAO,MAAM;AACX,MAAA,IAAI,CAACL,WAAW,CAACO,MAAM,CAACF,QAAQ,CAAC,CAAA;KAClC,CAAA;GACF,CAAA;EAED,KAAK,GAAIG,WAAwB,IAAK;AACpC,IAAA,IAAI,CAACR,WAAW,CAACS,OAAO,CAAEJ,QAAQ,IAAK;AACrC,MAAA,IAAIA,QAAQ,CAACF,SAAS,KAAKK,WAAW,CAACE,IAAI,EAAE;AAC3CL,QAAAA,QAAQ,CAACD,EAAE,CAACI,WAAW,CAAC,CAAA;AAC1B,OAAA;AACF,KAAC,CAAC,CAAA;GACH,CAAA;EAEDG,KAAK,GAAGA,MAAM;AACZ,IAAA,IAAI,CAAClD,OAAO,CAACmD,QAAQ,CAAEC,CAAC,IAAKC,MAAM,CAACC,MAAM,CAACF,CAAC,EAAElD,qBAAqB,EAAE,CAAC,CAAC,CAAA;GACxE,CAAA;EAEDqD,KAAK,GAAGA,MAAM;AACZ;AACA;AACA;IACA,IAAI,OAAOC,MAAM,KAAK,WAAW,IAAIA,MAAM,CAACC,gBAAgB,EAAE;MAC5DD,MAAM,CAACC,gBAAgB,CAAC3E,qBAAqB,EAAE,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAA;MACpE0E,MAAM,CAACC,gBAAgB,CAAC1E,UAAU,EAAE,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAA;AAC3D,KAAA;IAEA,IAAI,CAAC2E,QAAQ,EAAE,CAAA;AAEf,IAAA,OAAO,MAAM;MACX,IAAI,OAAOF,MAAM,KAAK,WAAW,IAAIA,MAAM,CAACG,mBAAmB,EAAE;QAC/DH,MAAM,CAACG,mBAAmB,CAAC7E,qBAAqB,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAA;QAChE0E,MAAM,CAACG,mBAAmB,CAAC5E,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAA;AACvD,OAAA;KACD,CAAA;GACF,CAAA;EAED,QAAQ,GAAG6E,MAAM;AACf,IAAA,IAAI,IAAI,CAACpE,OAAO,CAACqE,mBAAmB,IAAI,IAAI,EAAE;MAC5C,IAAI,CAACC,UAAU,CAAC;AACdC,QAAAA,WAAW,EAAE,IAAA;AACf,OAAC,CAAC,CAAA;AACJ,KAAA;GACD,CAAA;EAEDjC,MAAM,GAAIkC,IAA8B,IAAW;IACjD,IAAI,CAACxE,OAAO,GAAG;MACb,GAAG,IAAI,CAACA,OAAO;AACf,MAAA,GAAGwE,IAAI;AACPtE,MAAAA,OAAO,EAAE;AACP,QAAA,GAAG,IAAI,CAACF,OAAO,CAACE,OAAO;AACvB,QAAA,GAAGsE,IAAI,EAAEtE,OAAAA;AACX,OAAA;KACD,CAAA;IAED,IACE,CAAC,IAAI,CAACuE,OAAO,IACZ,IAAI,CAACzE,OAAO,CAACyE,OAAO,IAAI,IAAI,CAACzE,OAAO,CAACyE,OAAO,KAAK,IAAI,CAACA,OAAQ,EAC/D;AACA,MAAA,IAAI,IAAI,CAAC,aAAa,EAAE;AACtB,QAAA,IAAI,CAAC,aAAa,EAAE,CAAA;AACtB,OAAA;AAEA,MAAA,IAAI,CAACA,OAAO,GACV,IAAI,CAACzE,OAAO,CAACyE,OAAO,KACnBC,QAAQ,GAAGC,2BAAmB,EAAE,GAAGC,4BAAoB,EAAG,CAAC,CAAA;AAE9D,MAAA,MAAMC,cAAc,GAAG,IAAI,CAAC,cAAc,EAAE,CAAA;AAE5C,MAAA,IAAI,CAACrE,OAAO,CAACmD,QAAQ,CAAEC,CAAC,KAAM;AAC5B,QAAA,GAAGA,CAAC;AACJkB,QAAAA,gBAAgB,EAAED,cAAqB;AACvCjC,QAAAA,QAAQ,EAAEiC,cAAAA;AACZ,OAAC,CAAC,CAAC,CAAA;MAEH,IAAI,CAAC,aAAa,GAAG,IAAI,CAACJ,OAAO,CAACxB,SAAS,CAAC,MAAM;QAChD,IAAI,CAACiB,QAAQ,CAAC;UACZpD,IAAI,EAAE,IAAI,CAAC,cAAc,CAAC,IAAI,CAACD,KAAK,CAAC+B,QAAQ,CAAA;AAC/C,SAAC,CAAC,CAAA;AACJ,OAAC,CAAC,CAAA;AACJ,KAAA;IAEA,MAAM;MAAEmC,QAAQ;AAAEC,MAAAA,SAAAA;KAAW,GAAG,IAAI,CAAChF,OAAO,CAAA;AAE5C,IAAA,IAAI,CAAC+E,QAAQ,GAAI,CAAA,CAAA,EAAGE,aAAQ,CAACF,QAAQ,IAAI,EAAE,CAAC,IAAI,EAAG,CAAC,CAAA,CAAA;AAEpD,IAAA,IAAIC,SAAS,IAAIA,SAAS,KAAK,IAAI,CAACA,SAAS,EAAE;AAC7C,MAAA,IAAI,CAAC,cAAc,CAACA,SAAS,CAAC,CAAA;AAChC,KAAA;AAEA,IAAA,OAAO,IAAI,CAAA;GACZ,CAAA;EAEDE,aAAa,GAAGA,MAAM;IACpB,IAAI,CAACrE,KAAK,CAACY,OAAO,CAAC+B,OAAO,CAAE2B,KAAK,IAAK;AACpC,MAAA,IAAI,CAACC,WAAW,CAACD,KAAK,CAACxD,EAAE,CAAC,CAAA;AAC5B,KAAC,CAAC,CAAA;GACH,CAAA;EAEDyD,WAAW,GAAIzD,EAAU,IAAK;IAC5B,IAAI,CAAC0D,aAAa,CAAC1D,EAAE,CAAC,EAAE2D,eAAe,EAAEC,KAAK,EAAE,CAAA;GACjD,CAAA;EAEDrB,QAAQ,GAAG,MAAOM,IAAgC,IAAK;IACrD,IAAI;AACF,MAAA,OAAO,IAAI,CAACgB,IAAI,CAAChB,IAAI,CAAC,CAAA;KACvB,CAAC,OAAOiB,GAAG,EAAE;AACZ;AAAA,KAAA;GAEH,CAAA;AAEDC,EAAAA,iBAAiB,GAAkBC,OAAO,CAACC,OAAO,EAAE,CAAA;EAEpDJ,IAAI,GAAG,MAAOhB,IAIb,IAAK;IACJ,MAAMqB,OAAO,GAAG,IAAIF,OAAO,CAAO,OAAOC,OAAO,EAAEE,MAAM,KAAK;AAC3D,MAAA,MAAMC,YAAY,GAAG,IAAI,CAAClF,KAAK,CAACiE,gBAAgB,CAAA;AAChD,MAAA,MAAMkB,aAAa,GAAG,CAAC,EACrBxB,IAAI,EAAE1D,IAAI,IAAIiF,YAAY,CAAElD,IAAI,KAAK2B,IAAI,CAAC1D,IAAI,CAAC+B,IAAI,CACpD,CAAA;AAED,MAAA,IAAIoD,aAA+C,CAAA;MAEnD,MAAMC,WAAW,GAAGA,MAAwC;QAC1D,OAAO,IAAI,CAACR,iBAAiB,KAAKG,OAAO,GACrC,IAAI,CAACH,iBAAiB,GACtBvF,SAAS,CAAA;OACd,CAAA;;AAED;;AAEA,MAAA,IAAIyB,cAAuC,CAAA;MAE3C,IAAI,CAAC,KAAK,CAAC;AACT6B,QAAAA,IAAI,EAAE,cAAc;AACpB0C,QAAAA,IAAI,EAAEJ,YAAY;QAClBK,EAAE,EAAE5B,IAAI,EAAE1D,IAAI,IAAI,IAAI,CAACD,KAAK,CAAC+B,QAAQ;AACrCyD,QAAAA,WAAW,EAAEL,aAAAA;AACf,OAAC,CAAC,CAAA;AAEF,MAAA,IAAI,CAACxF,OAAO,CAAC8F,KAAK,CAAC,MAAM;QACvB,IAAI9B,IAAI,EAAE1D,IAAI,EAAE;AACd;AACA,UAAA,IAAI,CAACN,OAAO,CAACmD,QAAQ,CAAEC,CAAC,KAAM;AAC5B,YAAA,GAAGA,CAAC;YACJhB,QAAQ,EAAE4B,IAAI,CAAC1D,IAAAA;AACjB,WAAC,CAAC,CAAC,CAAA;AACL,SAAA;;AAEA;QACAc,cAAc,GAAG,IAAI,CAAC2E,WAAW,CAC/B,IAAI,CAAC1F,KAAK,CAAC+B,QAAQ,CAAC4D,QAAQ,EAC5B,IAAI,CAAC3F,KAAK,CAAC+B,QAAQ,CAACH,MAAM,EAC1B;UACEgE,YAAY,EAAEjC,IAAI,EAAEiC,YAAY;AAChCC,UAAAA,KAAK,EAAE,IAAA;AACT,SACF,CAAC,CAAA;AAED,QAAA,IAAI,CAAClG,OAAO,CAACmD,QAAQ,CAAEC,CAAC,KAAM;AAC5B,UAAA,GAAGA,CAAC;AACJ+C,UAAAA,MAAM,EAAE,SAAS;UACjBnF,eAAe,EAAEI,cAAc,CAACF,GAAG,CAAEJ,CAAC,IAAKA,CAAC,CAACK,EAAE,CAAC;UAChDX,WAAW,EAAE,IAAI,CAAC,aAAa,CAAC4C,CAAC,CAAC5C,WAAW,EAAEY,cAAc,CAAA;AAC/D,SAAC,CAAC,CAAC,CAAA;AACL,OAAC,CAAC,CAAA;MAEF,IAAI;AACF;QACA,IAAI;AACF,UAAA,MAAM,IAAI,CAACgF,WAAW,CAAChF,cAAc,CAACF,GAAG,CAAEJ,CAAC,IAAKA,CAAC,CAACK,EAAE,CAAC,CAAC,CAAA;SACxD,CAAC,OAAO8D,GAAG,EAAE;AACZ;AACA;AAAA,SAAA;;AAGF;AACA,QAAA,IAAKQ,aAAa,GAAGC,WAAW,EAAE,EAAG;AACnC,UAAA,OAAOD,aAAa,CAAA;AACtB,SAAA;QAEA,MAAMY,eAAe,GAAG,IAAI,CAAChG,KAAK,CAACM,QAAQ,CAAC2F,MAAM,CAC/CnF,EAAE,IAAK,CAAC,IAAI,CAACd,KAAK,CAACW,eAAe,CAACuF,QAAQ,CAACpF,EAAE,CACjD,CAAC,CAAA;QAED,MAAMqF,gBAAgB,GAAG,IAAI,CAACnG,KAAK,CAACW,eAAe,CAACsF,MAAM,CACvDnF,EAAE,IAAK,CAAC,IAAI,CAACd,KAAK,CAACM,QAAQ,CAAC4F,QAAQ,CAACpF,EAAE,CAC1C,CAAC,CAAA;QAED,MAAMsF,eAAe,GAAG,IAAI,CAACpG,KAAK,CAACM,QAAQ,CAAC2F,MAAM,CAAEnF,EAAE,IACpD,IAAI,CAACd,KAAK,CAACW,eAAe,CAACuF,QAAQ,CAACpF,EAAE,CACxC,CAAC,CAAA;AAED,QAAA,IAAI,CAACnB,OAAO,CAACmD,QAAQ,CAAEC,CAAC,KAAM;AAC5B,UAAA,GAAGA,CAAC;AACJ+C,UAAAA,MAAM,EAAE,MAAM;UACd7B,gBAAgB,EAAElB,CAAC,CAAChB,QAAQ;UAC5BzB,QAAQ,EAAEyC,CAAC,CAACpC,eAAe;AAC3BA,UAAAA,eAAe,EAAE,EAAA;AACnB,SAAC,CAAC,CAAC,CAAA;QAED,CACE,CAACqF,eAAe,EAAE,SAAS,CAAC,EAC5B,CAACG,gBAAgB,EAAE,SAAS,CAAC,EAC7B,CAACC,eAAe,EAAE,cAAc,CAAC,CAClC,CACDzD,OAAO,CAAC,CAAC,CAACrC,QAAQ,EAAE+F,IAAI,CAAC,KAAK;AAC9B/F,UAAAA,QAAQ,CAACqC,OAAO,CAAE7B,EAAE,IAAK;AACvB,YAAA,MAAMwD,KAAK,GAAG,IAAI,CAACE,aAAa,CAAC1D,EAAE,CAAE,CAAA;YACrC,MAAMG,KAAK,GAAG,IAAI,CAACC,QAAQ,CAACoD,KAAK,CAACnD,OAAO,CAAC,CAAA;AAC1CF,YAAAA,KAAK,CAAC9B,OAAO,CAACkH,IAAI,CAAC,GAAG/B,KAAK,CAAC,CAAA;AAC9B,WAAC,CAAC,CAAA;AACJ,SAAC,CAAC,CAAA;QAEF,IAAI,CAAC,KAAK,CAAC;AACT1B,UAAAA,IAAI,EAAE,QAAQ;AACd0C,UAAAA,IAAI,EAAEJ,YAAY;AAClBK,UAAAA,EAAE,EAAE,IAAI,CAACvF,KAAK,CAAC+B,QAAQ;AACvByD,UAAAA,WAAW,EAAEL,aAAAA;AACf,SAAC,CAAC,CAAA;AAEFJ,QAAAA,OAAO,EAAE,CAAA;OACV,CAAC,OAAOH,GAAG,EAAE;AACZ;AACA,QAAA,IAAKQ,aAAa,GAAGC,WAAW,EAAE,EAAG;AACnC,UAAA,OAAOD,aAAa,CAAA;AACtB,SAAA;QAEAH,MAAM,CAACL,GAAG,CAAC,CAAA;AACb,OAAA;AACF,KAAC,CAAC,CAAA;IAEF,IAAI,CAACC,iBAAiB,GAAGG,OAAO,CAAA;AAEhC,IAAA,IAAI,CAACH,iBAAiB,CAACyB,IAAI,CAAC,MAAM;MAChC,IAAI,CAACC,YAAY,EAAE,CAAA;AACrB,KAAC,CAAC,CAAA;IAEF,OAAO,IAAI,CAAC1B,iBAAiB,CAAA;GAC9B,CAAA;AAED,EAAA,aAAa,GAAG2B,CACdC,eAAuD,EACvDC,WAA4B,KACe;AAC3C,IAAA,IAAIvG,WAAW,GAAG;MAAE,GAAGsG,eAAAA;KAAiB,CAAA;AAExCC,IAAAA,WAAW,CAAC/D,OAAO,CAAE2B,KAAK,IAAK;AAC7B,MAAA,IAAI,CAACnE,WAAW,CAACmE,KAAK,CAACxD,EAAE,CAAC,EAAE;AAC1BX,QAAAA,WAAW,CAACmE,KAAK,CAACxD,EAAE,CAAC,GAAGwD,KAAK,CAAA;AAC/B,OAAA;AAEAnE,MAAAA,WAAW,CAACmE,KAAK,CAACxD,EAAE,CAAC,GAAG;AACtB,QAAA,GAAGX,WAAW,CAACmE,KAAK,CAACxD,EAAE,CAAC;QACxB,GAAGwD,KAAAA;OACJ,CAAA;AACH,KAAC,CAAC,CAAA;AAEF,IAAA,OAAOnE,WAAW,CAAA;GACnB,CAAA;EAEDe,QAAQ,GAAIJ,EAAU,IAAY;AAChC,IAAA,MAAMG,KAAK,GAAI,IAAI,CAAC0F,UAAU,CAAS7F,EAAE,CAAC,CAAA;AAE1C8F,IAAAA,6BAAS,CAAC3F,KAAK,EAAG,CAAiBH,eAAAA,EAAAA,EAAa,aAAY,CAAC,CAAA;AAE7D,IAAA,OAAOG,KAAK,CAAA;GACb,CAAA;EAED4F,YAAY,GAAG,OACbC,YAEC,GAAG,IAAI,CAAC9G,KAAK,CAAC+B,QAAQ,KACpB;AACH,IAAA,IAAI9B,IAAI,GAAG,IAAI,CAAC0B,aAAa,CAACmF,YAAY,CAAC,CAAA;AAE3C,IAAA,MAAMlG,OAAO,GAAG,IAAI,CAAC8E,WAAW,CAACzF,IAAI,CAAC0F,QAAQ,EAAE1F,IAAI,CAAC2B,MAAM,EAAE;AAC3DgE,MAAAA,YAAY,EAAE,IAAA;AAChB,KAAC,CAAC,CAAA;AAEF,IAAA,IAAI,CAACjG,OAAO,CAACmD,QAAQ,CAAEC,CAAC,IAAK;MAC3B,OAAO;AACL,QAAA,GAAGA,CAAC;QACJ5C,WAAW,EAAE,IAAI,CAAC,aAAa,CAAC4C,CAAC,CAAC5C,WAAW,EAAES,OAAO,CAAA;OACvD,CAAA;AACH,KAAC,CAAC,CAAA;AAEF,IAAA,MAAM,IAAI,CAACmF,WAAW,CACpBnF,OAAO,CAACC,GAAG,CAAEJ,CAAC,IAAKA,CAAC,CAACK,EAAE,CAAC,EACxB;AACEiG,MAAAA,OAAO,EAAE,IAAI;MACbC,MAAM,EAAEF,YAAY,CAACE,MAAAA;AACvB,KACF,CAAC,CAAA;AAED,IAAA,OAAO,CAACC,UAAI,CAACrG,OAAO,CAAC,EAAGA,OAAO,CAAC,CAAA;GACjC,CAAA;EAED2F,YAAY,GAAGA,MAAM;AACnB,IAAA,MAAMW,GAAG,GAAGC,IAAI,CAACD,GAAG,EAAE,CAAA;AAEtB,IAAA,MAAME,gBAAgB,GAAGpE,MAAM,CAACqE,MAAM,CAAC,IAAI,CAACrH,KAAK,CAACG,WAAW,CAAC,CAC3D8F,MAAM,CAAE3B,KAAK,IAAK;MACjB,MAAMrD,KAAK,GAAG,IAAI,CAACC,QAAQ,CAACoD,KAAK,CAACnD,OAAO,CAAC,CAAA;AAE1C,MAAA,OACE,CAAC,IAAI,CAACnB,KAAK,CAACM,QAAQ,CAAC4F,QAAQ,CAAC5B,KAAK,CAACxD,EAAE,CAAC,IACvC,CAAC,IAAI,CAACd,KAAK,CAACW,eAAe,CAACuF,QAAQ,CAAC5B,KAAK,CAACxD,EAAE,CAAC,KAC7CwD,KAAK,CAACgD,aAAa,GAAG,CAAC,CAAC,GACrBhD,KAAK,CAACiD,SAAS,GAAGjD,KAAK,CAACgD,aAAa,GAAGJ,GAAG,GAC3C,IAAI,CAAC,KACRjG,KAAK,CAAC9B,OAAO,CAACqI,QAAQ,GACnBlD,KAAK,CAACiD,SAAS,GAAGtG,KAAK,CAAC9B,OAAO,CAACqI,QAAQ,GAAGN,GAAG,GAC9C,IAAI,CAAC,CAAA;KAEZ,CAAC,CACDrG,GAAG,CAAEJ,CAAC,IAAKA,CAAC,CAACK,EAAE,CAAC,CAAA;IAEnB,IAAIsG,gBAAgB,CAAC7G,MAAM,EAAE;AAC3B,MAAA,IAAI,CAACZ,OAAO,CAACmD,QAAQ,CAAEC,CAAC,IAAK;AAC3B,QAAA,MAAM5C,WAAW,GAAG;AAAE,UAAA,GAAG4C,CAAC,CAAC5C,WAAAA;SAAa,CAAA;AACxCiH,QAAAA,gBAAgB,CAACzE,OAAO,CAAE7B,EAAE,IAAK;UAC/B,OAAOX,WAAW,CAACW,EAAE,CAAC,CAAA;AACxB,SAAC,CAAC,CAAA;QACF,OAAO;AACL,UAAA,GAAGiC,CAAC;AACJ5C,UAAAA,WAAAA;SACD,CAAA;AACH,OAAC,CAAC,CAAA;AACJ,KAAA;GACD,CAAA;AAEDuF,EAAAA,WAAW,GAAGA,CACZC,QAAgB,EAChB8B,cAA+B,EAC/B9D,IAAkD,KACrB;IAC7B,IAAI+D,WAA0B,GAAG,EAAE,CAAA;IAEnC,IAAIC,UAAU,GAAG,IAAI,CAACC,UAAU,CAACC,IAAI,CAAE5G,KAAK,IAAK;AAC/C,MAAA,MAAM6G,aAAa,GAAGC,kBAAa,CACjC,IAAI,CAAC7D,QAAQ,EACb8D,kBAAa,CAACrC,QAAQ,CAAC,EACvB;QACEJ,EAAE,EAAEtE,KAAK,CAACgH,QAAQ;QAClBC,aAAa,EACXjH,KAAK,CAAC9B,OAAO,CAAC+I,aAAa,IAAI,IAAI,CAAC/I,OAAO,CAAC+I,aAAAA;AAChD,OACF,CAAC,CAAA;AAED,MAAA,IAAIJ,aAAa,EAAE;AACjBJ,QAAAA,WAAW,GAAGI,aAAa,CAAA;AAC3B,QAAA,OAAO,IAAI,CAAA;AACb,OAAA;AAEA,MAAA,OAAO,KAAK,CAAA;AACd,KAAC,CAAC,CAAA;IAEF,IAAIK,WAAqB,GACvBR,UAAU,IAAK,IAAI,CAAChB,UAAU,CAAS,UAAU,CAAC,CAAA;AAEpD,IAAA,IAAIyB,aAAyB,GAAG,CAACD,WAAW,CAAC,CAAA;AAC7C;IACA,OAAOA,WAAW,EAAEE,WAAW,EAAE;MAC/BF,WAAW,GAAGA,WAAW,CAACE,WAAW,CAAA;AACrC,MAAA,IAAIF,WAAW,EAAEC,aAAa,CAACE,OAAO,CAACH,WAAW,CAAC,CAAA;AACrD,KAAA;;AAEA;AACA;;AAEA,IAAA,MAAMI,WAAW,GAAGH,aAAa,CAACvH,GAAG,CAAEI,KAAK,IAAK;AAC/C,MAAA,IAAIuH,iBAAiB,CAAA;AAErB,MAAA,IAAIvH,KAAK,CAAC9B,OAAO,CAACsJ,WAAW,EAAE;QAC7B,IAAI;UACF,MAAMC,YAAY,GAAGzH,KAAK,CAAC9B,OAAO,CAACsJ,WAAW,CAACf,WAAW,CAAC,CAAA;AAC3D;AACA1E,UAAAA,MAAM,CAACC,MAAM,CAACyE,WAAW,EAAEgB,YAAY,CAAC,CAAA;SACzC,CAAC,OAAO9D,GAAQ,EAAE;AACjB4D,UAAAA,iBAAiB,GAAG,IAAIG,cAAc,CAAC/D,GAAG,CAACgE,OAAO,EAAE;AAClDC,YAAAA,KAAK,EAAEjE,GAAAA;AACT,WAAC,CAAC,CAAA;UAEF,IAAIjB,IAAI,EAAEiC,YAAY,EAAE;AACtB,YAAA,MAAM4C,iBAAiB,CAAA;AACzB,WAAA;AAEA,UAAA,OAAOA,iBAAiB,CAAA;AAC1B,SAAA;AACF,OAAA;AAEA,MAAA,OAAA;AACF,KAAC,CAAC,CAAA;IAEF,MAAM5H,OAAO,GAAGwH,aAAa,CAACvH,GAAG,CAAC,CAACI,KAAK,EAAE6H,KAAK,KAAK;MAClD,MAAMC,gBAAgB,GAAGC,oBAAe,CAAC/H,KAAK,CAACgI,IAAI,EAAEvB,WAAW,CAAC,CAAA;AACjE,MAAA,MAAMwB,GAAG,GAAGjI,KAAK,CAAC9B,OAAO,CAAC+J,GAAG,GACzBjI,KAAK,CAAC9B,OAAO,CAAC+J,GAAG,CAAC;AAChBrH,QAAAA,MAAM,EAAE6F,WAAW;AACnB9F,QAAAA,MAAM,EAAE6F,cAAAA;AACV,OAAC,CAAC,IAAI,EAAE,GACR,EAAE,CAAA;MAEN,MAAM0B,cAAc,GAAGD,GAAG,GAAGE,IAAI,CAACC,SAAS,CAACH,GAAG,CAAC,GAAG,EAAE,CAAA;AAErD,MAAA,MAAMI,OAAO,GACXN,oBAAe,CAAC/H,KAAK,CAACH,EAAE,EAAE4G,WAAW,EAAE,IAAI,CAAC,GAAGyB,cAAc,CAAA;;AAE/D;AACA;AACA;AACA,MAAA,MAAMI,aAAa,GAAG,IAAI,CAAC/E,aAAa,CAAC8E,OAAO,CAAC,CAAA;AAEjD,MAAA,IAAIC,aAAa,EAAE;QACjB,OAAO;UAAE,GAAGA,aAAAA;SAAe,CAAA;AAC7B,OAAA;;AAEA;MACA,MAAMC,UAAU,GAAG,CAAC,EAClBvI,KAAK,CAAC9B,OAAO,CAACsK,MAAM,IACpBjL,cAAc,CAACgC,IAAI,CAAEC,CAAC,IAAMQ,KAAK,CAAC9B,OAAO,CAACsB,CAAC,CAAC,EAAUsG,OAAO,CAAC,CAC/D,CAAA;AAED,MAAA,MAAM2C,UAAyB,GAAG;AAChC5I,QAAAA,EAAE,EAAEwI,OAAO;AACXJ,QAAAA,GAAG,EAAEC,cAAc;QACnBhI,OAAO,EAAEF,KAAK,CAACH,EAAE;AACjBe,QAAAA,MAAM,EAAE6F,WAAW;QACnB/B,QAAQ,EAAEgE,cAAS,CAAC,CAAC,IAAI,CAACzF,QAAQ,EAAE6E,gBAAgB,CAAC,CAAC;AACtDxB,QAAAA,SAAS,EAAEJ,IAAI,CAACD,GAAG,EAAE;QACrBF,MAAM,EAAE,CAAC,CAAC;QACVM,aAAa,EAAE,CAAC,CAAC;QACjBsC,WAAW,EAAE,EAAE;QACfhI,MAAM,EAAE,EAAS;AACjBkE,QAAAA,MAAM,EAAE0D,UAAU,GAAG,SAAS,GAAG,SAAS;AAC1CjI,QAAAA,UAAU,EAAE,KAAK;AACjBsI,QAAAA,OAAO,EAAE,KAAK;AACdC,QAAAA,KAAK,EAAExK,SAAS;AAChByK,QAAAA,WAAW,EAAExB,WAAW,CAACO,KAAK,CAAC;AAC/BkB,QAAAA,WAAW,EAAE1K,SAAS;AACtB2K,QAAAA,UAAU,EAAE3K,SAAS;AACrB4K,QAAAA,WAAW,EAAEpF,OAAO,CAACC,OAAO,EAAE;AAC9BoF,QAAAA,YAAY,EAAE7K,SAAU;AACxBD,QAAAA,OAAO,EAAEC,SAAU;AACnBmF,QAAAA,eAAe,EAAE,IAAI2F,eAAe,EAAE;AACtCC,QAAAA,SAAS,EAAE,CAAA;OACZ,CAAA;AAED,MAAA,OAAOX,UAAU,CAAA;AACnB,KAAC,CAAC,CAAA;;AAEF;AACA;AACA;AACA9I,IAAAA,OAAO,CAAC+B,OAAO,CAAC,CAAC2B,KAAK,EAAE5D,CAAC,KAAU;AACjC,MAAA,MAAM4J,WAAW,GAAG1J,OAAO,CAACF,CAAC,GAAG,CAAC,CAAC,CAAA;MAClC,MAAMO,KAAK,GAAG,IAAI,CAACC,QAAQ,CAACoD,KAAK,CAACnD,OAAO,CAAC,CAAA;MAE1C,MAAMoJ,UAAU,GAAG,CAAC,MAAM;AACxB;AACA,QAAA,MAAMC,gBAAgB,GAAG;AACvB5I,UAAAA,MAAM,EAAE0I,WAAW,EAAE1I,MAAM,IAAI6F,cAAc;AAC7CmC,UAAAA,WAAW,EAAEU,WAAW,EAAEV,WAAW,IAAInC,cAAAA;SAC1C,CAAA;QAED,IAAI;UACF,MAAMgD,SAAS,GACb,OAAOxJ,KAAK,CAAC9B,OAAO,CAACuL,cAAc,KAAK,QAAQ,GAC5CzJ,KAAK,CAAC9B,OAAO,CAACuL,cAAc,CAACC,KAAK,GAClC1J,KAAK,CAAC9B,OAAO,CAACuL,cAAc,CAAA;UAElC,IAAId,WAAW,GAAGa,SAAS,GAAGD,gBAAgB,CAAC5I,MAAM,CAAC,IAAI,EAAE,CAAA;AAE5D,UAAA,IAAIA,MAAM,GAAG;YACX,GAAG4I,gBAAgB,CAAC5I,MAAM;YAC1B,GAAGgI,WAAAA;WACJ,CAAA;UAEDA,WAAW,GAAGgB,sBAAgB,CAACtG,KAAK,CAACsF,WAAW,EAAEA,WAAW,CAAC,CAAA;UAC9DhI,MAAM,GAAGgJ,sBAAgB,CAACtG,KAAK,CAAC1C,MAAM,EAAEA,MAAM,CAAC,CAAA;UAE/C,OAAO;YACLgI,WAAW;YACXhI,MAAM;AACNiJ,YAAAA,eAAe,EAAEvG,KAAK,CAACsF,WAAW,KAAKA,WAAAA;WACxC,CAAA;SACF,CAAC,OAAOhF,GAAQ,EAAE;UACjBN,KAAK,CAAC0F,WAAW,GAAG,IAAIc,gBAAgB,CAAClG,GAAG,CAACgE,OAAO,EAAE;AACpDC,YAAAA,KAAK,EAAEjE,GAAAA;AACT,WAAC,CAAC,CAAA;UAEF,IAAIjB,IAAI,EAAEiC,YAAY,EAAE;YACtB,MAAMtB,KAAK,CAAC0F,WAAW,CAAA;AACzB,WAAA;AAEA,UAAA,OAAOQ,gBAAgB,CAAA;AACzB,SAAA;AACF,OAAC,GAAG,CAAA;AAEJxH,MAAAA,MAAM,CAACC,MAAM,CAACqB,KAAK,EAAEiG,UAAU,CAAC,CAAA;AAClC,KAAC,CAAC,CAAA;AAEF,IAAA,OAAO3J,OAAO,CAAA;GACf,CAAA;AAEDmF,EAAAA,WAAW,GAAG,OACZzF,QAAkB,EAClBqD,IAGC,KACE;AACH,IAAA,MAAMoH,eAAe,GAAGA,MAAMzK,QAAQ,CAACO,GAAG,CAAEJ,CAAC,IAAK,IAAI,CAAC+D,aAAa,CAAC/D,CAAC,CAAE,CAAC,CAAA;AAEzE,IAAA,IAAI,CAACkD,IAAI,EAAEoD,OAAO,EAAE;AAClBgE,MAAAA,eAAe,EAAE,CAACpI,OAAO,CAAE2B,KAAK,IAAK;AACnC;QACA,IAAI,CAAC0G,aAAa,CAAC1G,KAAK,CAACxD,EAAE,EAAGiC,CAAC,KAAM;AACnC,UAAA,GAAGA,CAAC;UACJ6G,WAAW,EAAEtF,KAAK,CAACsF,WAAW;UAC9BhI,MAAM,EAAE0C,KAAK,CAAC1C,MAAM;UACpBuI,YAAY,EAAE7F,KAAK,CAAC6F,YAAY;UAChC9K,OAAO,EAAEiF,KAAK,CAACjF,OAAO;UACtByK,KAAK,EAAExF,KAAK,CAACwF,KAAK;UAClBC,WAAW,EAAEzF,KAAK,CAACyF,WAAW;UAC9BC,WAAW,EAAE1F,KAAK,CAAC0F,WAAW;UAC9BnI,MAAM,EAAEyC,KAAK,CAACzC,MAAM;AACpByF,UAAAA,aAAa,EAAE,CAAA;AACjB,SAAC,CAAC,CAAC,CAAA;AACL,OAAC,CAAC,CAAA;AACJ,KAAA;AAEA,IAAA,IAAI2D,kBAAsC,CAAA;;AAE1C;IACA,IAAI;AACF,MAAA,KAAK,MAAM,CAACnC,KAAK,EAAExE,KAAK,CAAC,IAAIyG,eAAe,EAAE,CAACG,OAAO,EAAE,EAAE;QACxD,MAAMZ,WAAW,GAAGS,eAAe,EAAE,CAACjC,KAAK,GAAG,CAAC,CAAC,CAAA;QAChD,MAAM7H,KAAK,GAAG,IAAI,CAACC,QAAQ,CAACoD,KAAK,CAACnD,OAAO,CAAC,CAAA;AAE1C,QAAA,MAAMgK,WAAW,GAAGA,CAACvG,GAAQ,EAAEwG,IAAY,KAAK;UAC9CxG,GAAG,CAACyG,UAAU,GAAGD,IAAI,CAAA;UACrBH,kBAAkB,GAAGA,kBAAkB,IAAInC,KAAK,CAAA;AAEhD,UAAA,IAAIwC,UAAU,CAAC1G,GAAG,CAAC,EAAE;AACnB,YAAA,MAAMA,GAAG,CAAA;AACX,WAAA;UAEA,IAAI;AACF3D,YAAAA,KAAK,CAAC9B,OAAO,CAACoM,OAAO,GAAG3G,GAAG,CAAC,CAAA;WAC7B,CAAC,OAAO4G,eAAe,EAAE;AACxB5G,YAAAA,GAAG,GAAG4G,eAAe,CAAA;AAErB,YAAA,IAAIF,UAAU,CAACE,eAAe,CAAC,EAAE;AAC/B,cAAA,MAAMA,eAAe,CAAA;AACvB,aAAA;AACF,WAAA;UAEA,IAAI,CAACR,aAAa,CAAC1G,KAAK,CAACxD,EAAE,EAAGiC,CAAC,KAAM;AACnC,YAAA,GAAGA,CAAC;AACJ+G,YAAAA,KAAK,EAAElF,GAAG;AACVkB,YAAAA,MAAM,EAAE,OAAO;AACfyB,YAAAA,SAAS,EAAEJ,IAAI,CAACD,GAAG,EAAC;AACtB,WAAC,CAAC,CAAC,CAAA;SACJ,CAAA;QAED,IAAI5C,KAAK,CAACyF,WAAW,EAAE;AACrBoB,UAAAA,WAAW,CAAC7G,KAAK,CAACyF,WAAW,EAAE,cAAc,CAAC,CAAA;AAChD,SAAA;QAEA,IAAIzF,KAAK,CAAC0F,WAAW,EAAE;AACrBmB,UAAAA,WAAW,CAAC7G,KAAK,CAAC0F,WAAW,EAAE,iBAAiB,CAAC,CAAA;AACnD,SAAA;QAEA,IAAIyB,QAAQ,GAAG,KAAK,CAAA;QAEpB,IAAI;UACF,MAAMtB,YAAY,GAChB,CAAC,MAAMlJ,KAAK,CAAC9B,OAAO,CAACuM,UAAU,GAAG;AAChC,YAAA,GAAGpH,KAAK;AACRyC,YAAAA,OAAO,EAAE,CAAC,CAACpD,IAAI,EAAEoD,OAAO;AACxB4E,YAAAA,aAAa,EAAErB,WAAW,EAAEH,YAAY,IAAI,EAAE;YAC9C9K,OAAO,EAAEiL,WAAW,EAAEjL,OAAO,IAAI,IAAI,EAAEF,OAAO,CAACE,OAAO,IAAI,EAAC;WAC5D,CAAC,KAAM,EAAU,CAAA;AAEpB,UAAA,MAAMA,OAAO,GAAG;YACd,IAAIiL,WAAW,EAAEjL,OAAO,IAAI,IAAI,EAAEF,OAAO,CAACE,OAAO,CAAC;YAClD,GAAG8K,YAAAA;WACG,CAAA;UAER,IAAI,CAACa,aAAa,CAAC1G,KAAK,CAACxD,EAAE,EAAGiC,CAAC,KAAM;AACnC,YAAA,GAAGA,CAAC;YACJ1D,OAAO;AACP8K,YAAAA,YAAAA;AACF,WAAC,CAAC,CAAC,CAAA;SACJ,CAAC,OAAOvF,GAAG,EAAE;AACZuG,UAAAA,WAAW,CAACvG,GAAG,EAAE,aAAa,CAAC,CAAA;AAC/B6G,UAAAA,QAAQ,GAAG,IAAI,CAAA;AACjB,SAAA;;AAEA;AACA,QAAA,IAAIA,QAAQ,EAAE;AACZ,UAAA,MAAA;AACF,SAAA;AACF,OAAA;KACD,CAAC,OAAO7G,GAAG,EAAE;AACZ,MAAA,IAAI0G,UAAU,CAAC1G,GAAG,CAAC,EAAE;QACnB,IAAI,CAACjB,IAAI,EAAEoD,OAAO,EAAE,IAAI,CAAC6E,QAAQ,CAAChH,GAAU,CAAC,CAAA;AAC7C,QAAA,OAAA;AACF,OAAA;AAEA,MAAA,MAAMA,GAAG,CAAA;AACX,KAAA;IAEA,MAAMiH,oBAAoB,GAAGd,eAAe,EAAE,CAACe,KAAK,CAAC,CAAC,EAAEb,kBAAkB,CAAC,CAAA;IAC3E,MAAMc,aAA6B,GAAG,EAAE,CAAA;AAExCF,IAAAA,oBAAoB,CAAClJ,OAAO,CAAC,CAAC2B,KAAK,EAAEwE,KAAK,KAAK;AAC7CiD,MAAAA,aAAa,CAACC,IAAI,CAChB,CAAC,YAAY;AACX,QAAA,MAAMC,kBAAkB,GAAGF,aAAa,CAACjD,KAAK,GAAG,CAAC,CAAC,CAAA;QACnD,MAAM7H,KAAK,GAAG,IAAI,CAACC,QAAQ,CAACoD,KAAK,CAACnD,OAAO,CAAC,CAAA;AAE1C,QAAA,IACEmD,KAAK,CAAC/C,UAAU,IACf+C,KAAK,CAACwB,MAAM,KAAK,SAAS,IACzB,CAACoG,cAAc,CAAC5H,KAAK,EAAE;UACrByC,OAAO,EAAEpD,IAAI,EAAEoD,OAAAA;AACjB,SAAC,CAAE,EACL;UACA,OAAO,IAAI,CAACvC,aAAa,CAACF,KAAK,CAACxD,EAAE,CAAC,EAAEoJ,WAAW,CAAA;AAClD,SAAA;AAEA,QAAA,MAAMG,SAAS,GAAGlD,IAAI,CAACD,GAAG,EAAE,CAAA;QAC5B,MAAM7B,WAAW,GAAGA,MAAM;UACxB,MAAM8G,MAAM,GAAG,IAAI,CAAC3H,aAAa,CAACF,KAAK,CAACxD,EAAE,CAAC,CAAA;AAC3C,UAAA,OAAOqL,MAAM,IAAIA,MAAM,CAAC9B,SAAS,KAAKA,SAAS,GAC3C8B,MAAM,CAACjC,WAAW,GAClB5K,SAAS,CAAA;SACd,CAAA;QAED,MAAM8M,gBAAgB,GAAIxH,GAAQ,IAAK;AACrC,UAAA,IAAI0G,UAAU,CAAC1G,GAAG,CAAC,EAAE;AACnB,YAAA,IAAI,CAACjB,IAAI,EAAEoD,OAAO,EAAE;AAClB,cAAA,IAAI,CAAC6E,QAAQ,CAAChH,GAAU,CAAC,CAAA;AAC3B,aAAA;AACA,YAAA,OAAO,IAAI,CAAA;AACb,WAAA;AACA,UAAA,OAAO,KAAK,CAAA;SACb,CAAA;AAED,QAAA,MAAMD,IAAI,GAAG,YAAY;AACvB,UAAA,IAAIS,aAAa,CAAA;UAEjB,IAAI;AACF,YAAA,MAAMiH,iBAAiB,GAAGvH,OAAO,CAACwH,GAAG,CACnC9N,cAAc,CAACqC,GAAG,CAAC,MAAO+B,IAAI,IAAK;AACjC,cAAA,MAAM2J,SAAS,GAAGtL,KAAK,CAAC9B,OAAO,CAACyD,IAAI,CAAC,CAAA;cAErC,IAAK2J,SAAS,EAAUxF,OAAO,EAAE;AAC/B,gBAAA,MAAOwF,SAAS,CAASxF,OAAO,EAAE,CAAA;AACpC,eAAA;AACF,aAAC,CACH,CAAC,CAAA;AAED,YAAA,MAAMyF,aAAa,GAAGvL,KAAK,CAAC9B,OAAO,CAACsK,MAAM,GAAG;AAC3C,cAAA,GAAGnF,KAAK;AACRyC,cAAAA,OAAO,EAAE,CAAC,CAACpD,IAAI,EAAEoD,OAAO;AACxBkF,cAAAA,kBAAAA;AACF,aAAC,CAAC,CAAA;AAEF,YAAA,MAAM,CAACQ,CAAC,EAAEhD,MAAM,CAAC,GAAG,MAAM3E,OAAO,CAACwH,GAAG,CAAC,CACpCD,iBAAiB,EACjBG,aAAa,CACd,CAAC,CAAA;YACF,IAAKpH,aAAa,GAAGC,WAAW,EAAE,EAAG,OAAO,MAAMD,aAAa,CAAA;YAE/D,IAAI,CAACsH,iBAAiB,CAACpI,KAAK,CAACxD,EAAE,EAAE,MAAM2I,MAAM,EAAE9F,IAAI,CAAC,CAAA;WACrD,CAAC,OAAOmG,KAAK,EAAE;YACd,IAAK1E,aAAa,GAAGC,WAAW,EAAE,EAAG,OAAO,MAAMD,aAAa,CAAA;AAC/D,YAAA,IAAIgH,gBAAgB,CAACtC,KAAK,CAAC,EAAE,OAAA;YAE7B,IAAI;AACF7I,cAAAA,KAAK,CAAC9B,OAAO,CAACoM,OAAO,GAAGzB,KAAK,CAAC,CAAA;aAC/B,CAAC,OAAO6C,YAAY,EAAE;AACrB7C,cAAAA,KAAK,GAAG6C,YAAY,CAAA;AACpB,cAAA,IAAIP,gBAAgB,CAACO,YAAY,CAAC,EAAE,OAAA;AACtC,aAAA;YAEA,IAAI,CAAC3B,aAAa,CAAC1G,KAAK,CAACxD,EAAE,EAAGiC,CAAC,KAAM;AACnC,cAAA,GAAGA,CAAC;cACJ+G,KAAK;AACLhE,cAAAA,MAAM,EAAE,OAAO;AACfvE,cAAAA,UAAU,EAAE,KAAK;AACjBgG,cAAAA,SAAS,EAAEJ,IAAI,CAACD,GAAG,EAAC;AACtB,aAAC,CAAC,CAAC,CAAA;AACL,WAAA;SACD,CAAA;AAED,QAAA,IAAIgD,WAAsC,CAAA;AAE1C,QAAA,IAAI,CAACvK,OAAO,CAAC8F,KAAK,CAAC,MAAM;UACvB,IAAI,CAACuF,aAAa,CAAC1G,KAAK,CAACxD,EAAE,EAAGiC,CAAC,KAAM;AACnC,YAAA,GAAGA,CAAC;AACJ;AACAxB,YAAAA,UAAU,EAAE,IAAI;YAChB8I,SAAS;AACTR,YAAAA,OAAO,EAAE,KAAA;AACX,WAAC,CAAC,CAAC,CAAA;UAEHK,WAAW,GAAGvF,IAAI,EAAE,CAAA;UAEpB,IAAI,CAACqG,aAAa,CAAC1G,KAAK,CAACxD,EAAE,EAAGiC,CAAC,KAAM;AACnC,YAAA,GAAGA,CAAC;AACJmH,YAAAA,WAAAA;AACF,WAAC,CAAC,CAAC,CAAA;AACL,SAAC,CAAC,CAAA;AAEF,QAAA,MAAMA,WAAW,CAAA;OAClB,GACH,CAAC,CAAA;AACH,KAAC,CAAC,CAAA;AAEF,IAAA,MAAMpF,OAAO,CAACwH,GAAG,CAACP,aAAa,CAAC,CAAA;GACjC,CAAA;AAEDa,EAAAA,WAAW,GAAGA,CAACtH,IAAY,EAAE2D,MAAY,KAAK;AAC5C,IAAA,OAAO2D,gBAAW,CAAC,IAAI,CAAC1I,QAAQ,EAAGoB,IAAI,EAAEuH,cAAS,CAAC5D,MAAI,CAAC,CAAC,CAAA;GAC1D,CAAA;EAED2C,QAAQ,GAAG,OAKT;IACAtG,IAAI;AACJC,IAAAA,EAAE,GAAG,EAAS;IACd3D,MAAM;IACNE,IAAI;IACJG,OAAO;IACPJ,MAAM;AACNiL,IAAAA,WAAAA;AAC2D,GAAC,KAAK;AACjE;AACA;;AAEA;AACA;AACA,IAAA,MAAMC,QAAQ,GAAGC,MAAM,CAACzH,EAAE,CAAC,CAAA;AAC3B,IAAA,MAAM0H,UAAU,GAAG,OAAO3H,IAAI,KAAK,WAAW,GAAGA,IAAI,GAAG0H,MAAM,CAAC1H,IAAI,CAAC,CAAA;AACpE,IAAA,IAAI4H,UAAU,CAAA;IAEd,IAAI;AACF,MAAA,IAAIC,GAAG,CAAE,CAAEJ,EAAAA,QAAS,EAAC,CAAC,CAAA;AACtBG,MAAAA,UAAU,GAAG,IAAI,CAAA;AACnB,KAAC,CAAC,OAAOE,CAAC,EAAE,EAAC;AAEbxG,IAAAA,6BAAS,CACP,CAACsG,UAAU,EACX,4DACF,CAAC,CAAA;AAED,IAAA,OAAO,IAAI,CAAC,uBAAuB,CAAC;AAClC5H,MAAAA,IAAI,EAAE2H,UAAU;AAChB1H,MAAAA,EAAE,EAAEwH,QAAQ;MACZnL,MAAM;MACNE,IAAI;MACJD,MAAM;MACNI,OAAO;AACP6K,MAAAA,WAAAA;AACF,KAAC,CAAC,CAAA;GACH,CAAA;AAEDO,EAAAA,UAAU,GAAGA,CAMXtL,QAA2C,EAC3C4B,IAAwB,KAC2C;AACnE5B,IAAAA,QAAQ,GAAG;AACT,MAAA,GAAGA,QAAQ;AACXwD,MAAAA,EAAE,EAAExD,QAAQ,CAACwD,EAAE,GACX,IAAI,CAACqH,WAAW,CAAC7K,QAAQ,CAACuD,IAAI,IAAI,EAAE,EAAEvD,QAAQ,CAACwD,EAAE,CAAC,GAClDjG,SAAAA;KACE,CAAA;AAER,IAAA,MAAMW,IAAI,GAAG,IAAI,CAAC0B,aAAa,CAACI,QAAQ,CAAC,CAAA;IACzC,IAAI4B,IAAI,EAAE2J,OAAO,IAAI,IAAI,CAACtN,KAAK,CAAC8F,MAAM,KAAK,SAAS,EAAE;AACpD,MAAA,OAAO,KAAK,CAAA;AACd,KAAA;AAEA,IAAA,MAAMyH,YAAY,GAAG5J,IAAI,EAAE2J,OAAO,GAC9B,IAAI,CAACtN,KAAK,CAAC+B,QAAQ,GACnB,IAAI,CAAC/B,KAAK,CAACiE,gBAAgB,CAAA;IAE/B,IAAI,CAACsJ,YAAY,EAAE;AACjB,MAAA,OAAO,KAAK,CAAA;AACd,KAAA;IAEA,MAAMjJ,KAAK,GAAGyD,kBAAa,CAAC,IAAI,CAAC7D,QAAQ,EAAEqJ,YAAY,CAAC5H,QAAQ,EAAE;AAChE,MAAA,GAAGhC,IAAI;MACP4B,EAAE,EAAEtF,IAAI,CAAC0F,QAAAA;AACX,KAAC,CAAQ,CAAA;IAET,IAAI,CAACrB,KAAK,EAAE;AACV,MAAA,OAAO,KAAK,CAAA;AACd,KAAA;AAEA,IAAA,IAAIX,IAAI,EAAE6J,aAAa,IAAI,IAAI,EAAE;AAC/B,MAAA,OAAOC,sBAAgB,CAACF,YAAY,CAAC3L,MAAM,EAAE3B,IAAI,CAAC2B,MAAM,CAAC,GAAG0C,KAAK,GAAG,KAAK,CAAA;AAC3E,KAAA;AAEA,IAAA,OAAOA,KAAK,CAAA;GACb,CAAA;AAEDoJ,EAAAA,SAAS,GAAGA,CAGV;IACApI,IAAI;AACJC,IAAAA,EAAE,GAAG,GAAU;IACf3D,MAAM;IACNC,MAAM;IACNC,IAAI;IACJ6L,MAAM;IACN1L,OAAO;IACP2L,aAAa;IACb7G,OAAO;AACP8G,IAAAA,YAAY,EAAEC,gBAAgB;IAC9BC,QAAQ;IACR/N,KAAK;IACLgO,IAAI;AACJlB,IAAAA,WAAAA;AACmC,GAAC,KAAe;AACnD;AACA;;AAEA;AACA;;IAEA,IAAI;AACF,MAAA,IAAIK,GAAG,CAAE,CAAE5H,EAAAA,EAAG,EAAC,CAAC,CAAA;MAChB,OAAO;AACL3C,QAAAA,IAAI,EAAE,UAAU;AAChBZ,QAAAA,IAAI,EAAEuD,EAAAA;OACP,CAAA;AACH,KAAC,CAAC,OAAO6H,CAAC,EAAE,EAAC;AAEb,IAAA,MAAMa,QAAQ,GAAG;MACf3I,IAAI;MACJC,EAAE;MACF3D,MAAM;MACNC,MAAM;MACNC,IAAI;MACJG,OAAO;MACPjC,KAAK;MACLgO,IAAI;AACJlB,MAAAA,WAAAA;KACD,CAAA;AAED,IAAA,MAAM7M,IAAI,GAAG,IAAI,CAAC0B,aAAa,CAACsM,QAAQ,CAAC,CAAA;AAEzClH,IAAAA,OAAO,GAAGA,OAAO,IAAI,IAAI,CAAC5H,OAAO,CAAC+O,cAAc,CAAA;IAChD,MAAML,YAAY,GAChBC,gBAAgB,IAAI,IAAI,CAAC3O,OAAO,CAACC,mBAAmB,IAAI,CAAC,CAAA;;AAE3D;AACA,IAAA,MAAM+O,gBAAgB,GAAG,IAAI,CAACnO,KAAK,CAAC+B,QAAQ,CAAC4D,QAAQ,CAACyI,KAAK,CAAC,GAAG,CAAC,CAAA;IAChE,MAAMC,aAAa,GAAGpO,IAAI,CAAC0F,QAAQ,CAACyI,KAAK,CAAC,GAAG,CAAC,CAAA;AAC9C,IAAA,MAAME,gBAAgB,GAAGD,aAAa,CAACE,KAAK,CAC1C,CAAC9N,CAAC,EAAEC,CAAC,KAAKD,CAAC,KAAK0N,gBAAgB,CAACzN,CAAC,CACpC,CAAC,CAAA;AACD;AACA,IAAA,MAAM8N,QAAQ,GAAGZ,aAAa,EAAEa,KAAK,GACjC,IAAI,CAACzO,KAAK,CAAC+B,QAAQ,CAAC4D,QAAQ,KAAK1F,IAAI,CAAC0F,QAAQ,GAC9C2I,gBAAgB,CAAA;AACpB,IAAA,MAAMI,QAAQ,GAAGd,aAAa,EAAEe,WAAW,GACvC,IAAI,CAAC3O,KAAK,CAAC+B,QAAQ,CAACD,IAAI,KAAK7B,IAAI,CAAC6B,IAAI,GACtC,IAAI,CAAA;IACR,MAAM8M,UAAU,GACdhB,aAAa,EAAEJ,aAAa,IAAI,IAAI,GAChCC,sBAAgB,CAAC,IAAI,CAACzN,KAAK,CAAC+B,QAAQ,CAACH,MAAM,EAAE3B,IAAI,CAAC2B,MAAM,CAAC,GACzD,IAAI,CAAA;;AAEV;AACA,IAAA,MAAMiN,QAAQ,GAAGL,QAAQ,IAAIE,QAAQ,IAAIE,UAAU,CAAA;;AAEnD;IACA,MAAME,WAAW,GAAI1B,CAAa,IAAK;MACrC,IACE,CAACW,QAAQ,IACT,CAACgB,WAAW,CAAC3B,CAAC,CAAC,IACf,CAACA,CAAC,CAAC4B,gBAAgB,KAClB,CAACrB,MAAM,IAAIA,MAAM,KAAK,OAAO,CAAC,IAC/BP,CAAC,CAAC6B,MAAM,KAAK,CAAC,EACd;QACA7B,CAAC,CAAC8B,cAAc,EAAE,CAAA;;AAElB;QACA,IAAI,CAAC,eAAe,CAAC;AAAE,UAAA,GAAGjP,IAAI;UAAEgC,OAAO;AAAE6K,UAAAA,WAAAA;AAAY,SAAC,CAAC,CAAA;AACzD,OAAA;KACD,CAAA;;AAED;IACA,MAAMqC,WAAW,GAAI/B,CAAa,IAAK;AACrC,MAAA,IAAIrG,OAAO,EAAE;QACX,IAAI,CAACF,YAAY,CAACoH,QAAQ,CAAC,CAACmB,KAAK,CAAExK,GAAG,IAAK;AACzCyK,UAAAA,OAAO,CAACC,IAAI,CAAC1K,GAAG,CAAC,CAAA;AACjByK,UAAAA,OAAO,CAACC,IAAI,CAAC3Q,cAAc,CAAC,CAAA;AAC9B,SAAC,CAAC,CAAA;AACJ,OAAA;KACD,CAAA;IAED,MAAM4Q,gBAAgB,GAAInC,CAAa,IAAK;MAC1C,IAAI,CAACvG,YAAY,CAACoH,QAAQ,CAAC,CAACmB,KAAK,CAAExK,GAAG,IAAK;AACzCyK,QAAAA,OAAO,CAACC,IAAI,CAAC1K,GAAG,CAAC,CAAA;AACjByK,QAAAA,OAAO,CAACC,IAAI,CAAC3Q,cAAc,CAAC,CAAA;AAC9B,OAAC,CAAC,CAAA;KACH,CAAA;IAED,MAAM6Q,WAAW,GAAIpC,CAAa,IAAK;AACrC,MAAA,MAAMO,MAAM,GAAIP,CAAC,CAACO,MAAM,IAAI,EAA+B,CAAA;AAE3D,MAAA,IAAI5G,OAAO,EAAE;QACX,IAAI4G,MAAM,CAAC8B,cAAc,EAAE;AACzB,UAAA,OAAA;AACF,SAAA;AAEA9B,QAAAA,MAAM,CAAC8B,cAAc,GAAGC,UAAU,CAAC,MAAM;UACvC/B,MAAM,CAAC8B,cAAc,GAAG,IAAI,CAAA;UAC5B,IAAI,CAAC5I,YAAY,CAACoH,QAAQ,CAAC,CAACmB,KAAK,CAAExK,GAAG,IAAK;AACzCyK,YAAAA,OAAO,CAACC,IAAI,CAAC1K,GAAG,CAAC,CAAA;AACjByK,YAAAA,OAAO,CAACC,IAAI,CAAC3Q,cAAc,CAAC,CAAA;AAC9B,WAAC,CAAC,CAAA;SACH,EAAEkP,YAAY,CAAC,CAAA;AAClB,OAAA;KACD,CAAA;IAED,MAAM8B,WAAW,GAAIvC,CAAa,IAAK;AACrC,MAAA,MAAMO,MAAM,GAAIP,CAAC,CAACO,MAAM,IAAI,EAA+B,CAAA;MAE3D,IAAIA,MAAM,CAAC8B,cAAc,EAAE;AACzBG,QAAAA,YAAY,CAACjC,MAAM,CAAC8B,cAAc,CAAC,CAAA;QACnC9B,MAAM,CAAC8B,cAAc,GAAG,IAAI,CAAA;AAC9B,OAAA;KACD,CAAA;IAED,OAAO;AACL7M,MAAAA,IAAI,EAAE,UAAU;MAChB3C,IAAI;MACJkP,WAAW;MACXL,WAAW;MACXU,WAAW;MACXG,WAAW;MACXJ,gBAAgB;MAChBV,QAAQ;AACRd,MAAAA,QAAAA;KACD,CAAA;GACF,CAAA;EAED8B,SAAS,GAAGA,MAAwB;IAClC,OAAO;AACL7P,MAAAA,KAAK,EAAE;AACLM,QAAAA,QAAQ,EAAE,IAAI,CAACN,KAAK,CAACM,QAAQ;AAC7BwP,QAAAA,iBAAiB,EAAE,IAAI,CAAC9P,KAAK,CAACY,OAAO,CAACC,GAAG,CAAEJ,CAAC,IAC1CsP,UAAI,CAACtP,CAAC,EAAE,CACN,WAAW,EACX,SAAS,EACT,eAAe,EACf,QAAQ,EACR,IAAI,EACJ,YAAY,EACZ,QAAQ,EACR,WAAW,CACZ,CACH,CAAA;AACF,OAAA;KACD,CAAA;GACF,CAAA;EAEDuP,OAAO,GAAG,MAAOC,uBAAsC,IAAK;IAC1D,IAAIC,IAAI,GAAGD,uBAAuB,CAAA;AAClC;AACA,IAAA,IAAI,OAAOE,QAAQ,KAAK,WAAW,EAAE;MACnCD,IAAI,GAAG/M,MAAM,CAACiN,kBAAkB,CAAA;AAClC,KAAA;AAEAxJ,IAAAA,6BAAS,CACPsJ,IAAI,EACJ,uIACF,CAAC,CAAA;IAED,MAAMG,GAAG,GAAGH,IAAI,CAAA;AAChB,IAAA,IAAI,CAACI,cAAc,GAAGD,GAAG,CAACE,OAAc,CAAA;IACxC,IAAI,CAACpR,OAAO,CAAC6Q,OAAO,GAAGK,GAAG,CAACE,OAAc,CAAC,CAAA;AAC1C,IAAA,MAAMC,eAAe,GAAGH,GAAG,CAACI,MAAM,CAACzQ,KAAK,CAAA;IAExC,IAAIY,OAAO,GAAG,IAAI,CAAC8E,WAAW,CAC5B,IAAI,CAAC1F,KAAK,CAAC+B,QAAQ,CAAC4D,QAAQ,EAC5B,IAAI,CAAC3F,KAAK,CAAC+B,QAAQ,CAACH,MACtB,CAAC,CAACf,GAAG,CAAEyD,KAAK,IAAK;AACf,MAAA,MAAMoM,eAAe,GAAGF,eAAe,CAACV,iBAAiB,CAACjI,IAAI,CAC3DpH,CAAC,IAAKA,CAAC,CAACK,EAAE,KAAKwD,KAAK,CAACxD,EACxB,CAAC,CAAA;MAED8F,6BAAS,CACP8J,eAAe,EACd,CAAA,iEAAA,EAAmEpM,KAAK,CAACxD,EAAG,GAC/E,CAAC,CAAA;AAED,MAAA,IAAI4P,eAAe,EAAE;QACnB,OAAO;AACL,UAAA,GAAGpM,KAAK;UACR,GAAGoM,eAAAA;SACJ,CAAA;AACH,OAAA;AACA,MAAA,OAAOpM,KAAK,CAAA;AACd,KAAC,CAAC,CAAA;AAEF,IAAA,IAAI,CAAC3E,OAAO,CAACmD,QAAQ,CAAEC,CAAC,IAAK;MAC3B,OAAO;AACL,QAAA,GAAGA,CAAC;QACJzC,QAAQ,EAAEkQ,eAAe,CAAClQ,QAAQ;QAClCM,OAAO;QACPT,WAAW,EAAE,IAAI,CAAC,aAAa,CAAC4C,CAAC,CAAC5C,WAAW,EAAES,OAAO,CAAA;OACvD,CAAA;AACH,KAAC,CAAC,CAAA;GACH,CAAA;AAED+P,EAAAA,YAAY,GAAkD,EAAE,CAAA;EAEhEC,UAAU,GAAG,MAAOC,IAA+C,IAAK;AACtE,IAAA,IAAI,CAACF,YAAY,CAAC3E,IAAI,CAAC6E,IAAI,CAAC,CAAA;GAC7B,CAAA;AAEDC,EAAAA,aAAa,GAAGA,CAAI5H,GAAQ,EAAE6H,OAAmC,KAAK;AACpE,IAAA,IAAI,OAAOZ,QAAQ,KAAK,WAAW,EAAE;AACnC,MAAA,MAAMa,MAAM,GAAG,OAAO9H,GAAG,KAAK,QAAQ,GAAGA,GAAG,GAAGE,IAAI,CAACC,SAAS,CAACH,GAAG,CAAC,CAAA;MAElE,IAAI,CAAC0H,UAAU,CAAC,YAAY;AAC1B,QAAA,MAAM9P,EAAE,GAAI,CAAoBkQ,kBAAAA,EAAAA,MAAO,CAAC,CAAA,CAAA;AACxC,QAAA,MAAMC,IAAI,GACR,OAAOF,OAAO,KAAK,UAAU,GAAG,MAAOA,OAAO,EAAU,GAAGA,OAAO,CAAA;AACpE,QAAA,OAAQ,CAAcjQ,YAAAA,EAAAA,EAAG,CAAuDoQ,qDAAAA,EAAAA,UAAU,CACxFF,MACF,CAAE,CAAA,KAAA,EAAO5H,IAAI,CAACC,SAAS,CAAC4H,IAAI,CAAE,CAAA;AACtC;AACA,4CAAA,EAA8CnQ,EAAG,CAAA;AACjD;AACA;AACA,iBAAkB,CAAA,CAAA;AACZ,OAAC,CAAC,CAAA;AAEF,MAAA,OAAO,MAAM,IAAI,CAACqQ,WAAW,CAAIjI,GAAG,CAAC,CAAA;AACvC,KAAA;AAEA,IAAA,OAAO,MAAM5J,SAAS,CAAA;GACvB,CAAA;EAED6R,WAAW,GAAiBjI,GAAQ,IAAK;AACvC,IAAA,IAAI,OAAOiH,QAAQ,KAAK,WAAW,EAAE;AACnC,MAAA,MAAMa,MAAM,GAAG,OAAO9H,GAAG,KAAK,QAAQ,GAAGA,GAAG,GAAGE,IAAI,CAACC,SAAS,CAACH,GAAG,CAAC,CAAA;AAElE,MAAA,OAAO/F,MAAM,CAAE,CAAoB6N,kBAAAA,EAAAA,MAAO,EAAC,CAAQ,CAAA;AACrD,KAAA;AAEA,IAAA,OAAO1R,SAAS,CAAA;GACjB,CAAA;;AAED;AACA;AACA;AACA;AACA;;EAEA,cAAc,GAAI6E,SAAqB,IAAK;IAC1C,IAAI,CAACA,SAAS,GAAGA,SAAgB,CAAA;AACjC,IAAA,IAAI,CAACwC,UAAU,GAAG,EAAS,CAAA;AAC3B,IAAA,IAAI,CAACyK,YAAY,GAAG,EAAS,CAAA;IAC7B,IAAI,CAACxJ,UAAU,GAAG,EAAS,CAAA;IAE3B,MAAMyJ,aAAa,GAAIC,MAAkB,IAAK;AAC5CA,MAAAA,MAAM,CAAC3O,OAAO,CAAC,CAAC1B,KAAK,EAAEP,CAAC,KAAK;QAC3BO,KAAK,CAACsQ,IAAI,CAAC;AAAEC,UAAAA,aAAa,EAAE9Q,CAAC;AAAE+P,UAAAA,MAAM,EAAE,IAAA;AAAK,SAAC,CAAC,CAAA;QAE9C,MAAMgB,aAAa,GAAI,IAAI,CAAC9K,UAAU,CAAS1F,KAAK,CAACH,EAAE,CAAC,CAAA;AAExD8F,QAAAA,6BAAS,CACP,CAAC6K,aAAa,EACb,CAAkCzE,gCAAAA,EAAAA,MAAM,CAAC/L,KAAK,CAACH,EAAE,CAAE,CAAA,CACtD,CAAC,CAAA;QACC,IAAI,CAAC6F,UAAU,CAAS1F,KAAK,CAACH,EAAE,CAAC,GAAGG,KAAK,CAAA;QAE3C,IAAI,CAACA,KAAK,CAACyQ,MAAM,IAAIzQ,KAAK,CAACgI,IAAI,EAAE;AAC/B,UAAA,MAAM0I,eAAe,GAAG3J,kBAAa,CAAC/G,KAAK,CAACgH,QAAQ,CAAC,CAAA;AACrD,UAAA,IACE,CAAE,IAAI,CAACmJ,YAAY,CAASO,eAAe,CAAC,IAC5C1Q,KAAK,CAACgH,QAAQ,CAAC2J,QAAQ,CAAC,GAAG,CAAC,EAC5B;AACE,YAAA,IAAI,CAACR,YAAY,CAASO,eAAe,CAAC,GAAG1Q,KAAK,CAAA;AACtD,WAAA;AACF,SAAA;AAEA,QAAA,MAAM4Q,QAAQ,GAAG5Q,KAAK,CAAC4Q,QAAmB,CAAA;QAE1C,IAAIA,QAAQ,EAAEtR,MAAM,EAAE;UACpB8Q,aAAa,CAACQ,QAAQ,CAAC,CAAA;AACzB,SAAA;AACF,OAAC,CAAC,CAAA;KACH,CAAA;AAEDR,IAAAA,aAAa,CAAC,CAAClN,SAAS,CAAC,CAAC,CAAA;AAE1B,IAAA,IAAI,CAACyD,UAAU,GAAI5E,MAAM,CAACqE,MAAM,CAAC,IAAI,CAAC+J,YAAY,CAAC,CAChDvQ,GAAG,CAAC,CAACJ,CAAC,EAAEC,CAAC,KAAK;AACb,MAAA,MAAMoR,OAAO,GAAG1N,aAAQ,CAAC3D,CAAC,CAACwH,QAAQ,CAAC,CAAA;AACpC,MAAA,MAAM8J,MAAM,GAAGC,kBAAa,CAACF,OAAO,CAAC,CAAA;AAErC,MAAA,OAAOC,MAAM,CAACxR,MAAM,GAAG,CAAC,IAAIwR,MAAM,CAAC,CAAC,CAAC,EAAEE,KAAK,KAAK,GAAG,EAAE;QACpDF,MAAM,CAACG,KAAK,EAAE,CAAA;AAChB,OAAA;AAEA,MAAA,MAAMC,KAAK,GAAGJ,MAAM,CAAClR,GAAG,CAAEJ,CAAC,IAAK;AAC9B,QAAA,IAAIA,CAAC,CAACmC,IAAI,KAAK,OAAO,EAAE;AACtB,UAAA,OAAO,GAAG,CAAA;AACZ,SAAA;AAEA,QAAA,IAAInC,CAAC,CAACmC,IAAI,KAAK,UAAU,EAAE;AACzB,UAAA,OAAO,IAAI,CAAA;AACb,SAAA;AAEA,QAAA,OAAO,CAAC,CAAA;AACV,OAAC,CAAC,CAAA;MAEF,OAAO;AAAEwP,QAAAA,KAAK,EAAE3R,CAAC;QAAEqR,OAAO;QAAEC,MAAM;AAAEjJ,QAAAA,KAAK,EAAEpI,CAAC;AAAEyR,QAAAA,KAAAA;OAAO,CAAA;KACtD,CAAC,CACDE,IAAI,CAAC,CAACC,CAAC,EAAEC,CAAC,KAAK;AACd,MAAA,IAAIC,OAAO,GAAGF,CAAC,CAACR,OAAO,KAAK,GAAG,GAAG,CAAC,GAAGS,CAAC,CAACT,OAAO,KAAK,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAA;AAEhE,MAAA,IAAIU,OAAO,KAAK,CAAC,EAAE,OAAOA,OAAO,CAAA;AAEjC,MAAA,MAAMjS,MAAM,GAAGxB,IAAI,CAAC0T,GAAG,CAACH,CAAC,CAACH,KAAK,CAAC5R,MAAM,EAAEgS,CAAC,CAACJ,KAAK,CAAC5R,MAAM,CAAC,CAAA;;AAEvD;MACA,IAAI+R,CAAC,CAACH,KAAK,CAAC5R,MAAM,KAAKgS,CAAC,CAACJ,KAAK,CAAC5R,MAAM,EAAE;QACrC,OAAOgS,CAAC,CAACJ,KAAK,CAAC5R,MAAM,GAAG+R,CAAC,CAACH,KAAK,CAAC5R,MAAM,CAAA;AACxC,OAAA;;AAEA;MACA,KAAK,IAAIG,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGH,MAAM,EAAEG,CAAC,EAAE,EAAE;AAC/B,QAAA,IAAI4R,CAAC,CAACH,KAAK,CAACzR,CAAC,CAAC,KAAK6R,CAAC,CAACJ,KAAK,CAACzR,CAAC,CAAC,EAAE;AAC7B,UAAA,OAAO6R,CAAC,CAACJ,KAAK,CAACzR,CAAC,CAAC,GAAI4R,CAAC,CAACH,KAAK,CAACzR,CAAC,CAAE,CAAA;AAClC,SAAA;AACF,OAAA;;AAEA;MACA,KAAK,IAAIA,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGH,MAAM,EAAEG,CAAC,EAAE,EAAE;AAC/B,QAAA,IAAI4R,CAAC,CAACP,MAAM,CAACrR,CAAC,CAAC,CAAEuR,KAAK,KAAKM,CAAC,CAACR,MAAM,CAACrR,CAAC,CAAC,CAAEuR,KAAK,EAAE;UAC7C,OAAOK,CAAC,CAACP,MAAM,CAACrR,CAAC,CAAC,CAAEuR,KAAK,GAAIM,CAAC,CAACR,MAAM,CAACrR,CAAC,CAAC,CAAEuR,KAAM,GAAG,CAAC,GAAG,CAAC,CAAC,CAAA;AAC3D,SAAA;AACF,OAAA;;AAEA;AACA,MAAA,IAAIK,CAAC,CAACR,OAAO,KAAKS,CAAC,CAACT,OAAO,EAAE;QAC3B,OAAOQ,CAAC,CAACR,OAAO,GAAGS,CAAC,CAACT,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,CAAA;AACvC,OAAA;;AAEA;AACA,MAAA,OAAOQ,CAAC,CAACxJ,KAAK,GAAGyJ,CAAC,CAACzJ,KAAK,CAAA;KACzB,CAAC,CACDjI,GAAG,CAAC,CAACJ,CAAC,EAAEC,CAAC,KAAK;AACbD,MAAAA,CAAC,CAAC2R,KAAK,CAACM,IAAI,GAAGhS,CAAC,CAAA;MAChB,OAAOD,CAAC,CAAC2R,KAAK,CAAA;AAChB,KAAC,CAAQ,CAAA;GACZ,CAAA;EAED,cAAc,GACZO,gBAAiC,IACgB;IACjD,MAAMhI,KAAK,GAAGA,CAAC;MACbhF,QAAQ;MACR/D,MAAM;MACNE,IAAI;AACJ9B,MAAAA,KAAAA;AACe,KAAC,KAAmD;MACnE,MAAM4S,YAAY,GAAG,IAAI,CAACzT,OAAO,CAACM,WAAW,CAACmC,MAAM,CAAC,CAAA;MAErD,OAAO;AACL+D,QAAAA,QAAQ,EAAEA,QAAQ;AAClBkN,QAAAA,SAAS,EAAEjR,MAAM;QACjBA,MAAM,EAAEgJ,sBAAgB,CAAC+H,gBAAgB,EAAE/Q,MAAM,EAAEgR,YAAY,CAAQ;AACvE9Q,QAAAA,IAAI,EAAEA,IAAI,CAACsM,KAAK,CAAC,GAAG,CAAC,CAAC0E,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE;AACxC9Q,QAAAA,IAAI,EAAG,CAAE2D,EAAAA,QAAS,GAAE/D,MAAO,CAAA,EAAEE,IAAK,CAAC,CAAA;AACnC9B,QAAAA,KAAK,EAAE4K,sBAAgB,CACrB+H,gBAAgB,EAAE3S,KAAK,EACvBA,KACF,CAAA;OACD,CAAA;KACF,CAAA;IAED,MAAM+B,QAAQ,GAAG4I,KAAK,CAAC,IAAI,CAAC/G,OAAO,CAAC7B,QAAQ,CAAC,CAAA;IAE7C,IAAI;MAAEgR,cAAc;AAAEC,MAAAA,SAAAA;KAAW,GAAGjR,QAAQ,CAAC/B,KAAK,CAAA;IAElD,IAAI+S,cAAc,KAAK,CAACC,SAAS,IAAIA,SAAS,KAAK,IAAI,CAAClU,eAAe,CAAC,EAAE;AACxE;AACA,MAAA,MAAMmU,kBAAkB,GAAGtI,KAAK,CAACoI,cAAc,CAAQ,CAAA;MACvDE,kBAAkB,CAACjT,KAAK,CAACkJ,GAAG,GAAGnH,QAAQ,CAAC/B,KAAK,CAACkJ,GAAG,CAAA;AAEjD,MAAA,OAAO+J,kBAAkB,CAACjT,KAAK,CAAC+S,cAAc,CAAA;MAE9C,OAAO;AACL,QAAA,GAAGE,kBAAkB;AACrBC,QAAAA,cAAc,EAAEnR,QAAAA;OACjB,CAAA;AACH,KAAA;AAEA,IAAA,OAAOA,QAAQ,CAAA;GAChB,CAAA;AAEDJ,EAAAA,aAAa,GAAGA,CAACgC,IAAsB,GAAG,EAAE,KAAqB;IAC/D,MAAMwP,KAAK,GAAGA,CACZC,IAEC,GAAG,EAAE,EACNxS,OAAyB,KACN;AACnB,MAAA,MAAM0E,IAAI,GAAG,IAAI,CAACtF,KAAK,CAAC+B,QAAQ,CAAA;MAEhC,MAAMsR,YAAY,GAAGD,IAAI,CAAC9N,IAAI,IAAIA,IAAI,CAACK,QAAQ,CAAA;AAE/C,MAAA,IAAIA,QAAQ,GAAGiH,gBAAW,CACxB,IAAI,CAAC1I,QAAQ,IAAI,GAAG,EACpBmP,YAAY,EACX,GAAED,IAAI,CAAC7N,EAAE,IAAI,EAAG,EACnB,CAAC,CAAA;MAED,MAAM+N,WAAW,GAAG,IAAI,CAAC5N,WAAW,CAAC2N,YAAY,EAAE/N,IAAI,CAAC1D,MAAM,CAAC,CAAA;AAE/D,MAAA,MAAM2R,UAAU,GAAG;AAAE,QAAA,GAAGtM,UAAI,CAACqM,WAAW,CAAC,EAAEzR,MAAAA;OAAQ,CAAA;MAEnD,IAAI2R,UAAU,GACZ,CAACJ,IAAI,CAACvR,MAAM,IAAI,IAAI,MAAM,IAAI,GAC1B0R,UAAU,GACVE,sBAAgB,CAACL,IAAI,CAACvR,MAAM,EAAG0R,UAAU,CAAC,CAAA;AAEhD,MAAA,IAAIC,UAAU,EAAE;QACd5S,OAAO,EACHC,GAAG,CAAEJ,CAAC,IAAK,IAAI,CAACS,QAAQ,CAACT,CAAC,CAACU,OAAO,CAAC,CAAChC,OAAO,CAACuU,eAAe,CAAC,CAC7DzN,MAAM,CAAC0N,OAAO,CAAC,CACfhR,OAAO,CAAEL,EAAE,IAAK;AACfkR,UAAAA,UAAU,GAAG;AAAE,YAAA,GAAGA,UAAW;YAAE,GAAGlR,EAAE,CAAEkR,UAAW,CAAA;WAAG,CAAA;AACtD,SAAC,CAAC,CAAA;AACN,OAAA;MAEA7N,QAAQ,GAAGqD,oBAAe,CAACrD,QAAQ,EAAE6N,UAAU,IAAI,EAAE,CAAC,CAAA;AAEtD,MAAA,MAAMI,gBAAgB,GACpBhT,OAAO,EACHC,GAAG,CACFyD,KAAK,IACJ,IAAI,CAACpD,QAAQ,CAACoD,KAAK,CAACnD,OAAO,CAAC,CAAChC,OAAO,CAACyU,gBAAgB,IAAI,EAC7D,CAAC,CACAC,IAAI,EAAE,CACN5N,MAAM,CAAC0N,OAAO,CAAC,IAAI,EAAE,CAAA;AAE1B,MAAA,MAAMG,iBAAiB,GACrBlT,OAAO,EACHC,GAAG,CACFyD,KAAK,IACJ,IAAI,CAACpD,QAAQ,CAACoD,KAAK,CAACnD,OAAO,CAAC,CAAChC,OAAO,CAAC2U,iBAAiB,IAAI,EAC9D,CAAC,CACAD,IAAI,EAAE,CACN5N,MAAM,CAAC0N,OAAO,CAAC,IAAI,EAAE,CAAA;;AAE1B;MACA,MAAMI,iBAAiB,GAAGH,gBAAgB,EAAErT,MAAM,GAC9CqT,gBAAgB,EAAEI,MAAM,CAAC,CAACjU,IAAI,EAAEE,IAAI,KAAKA,IAAI,CAACF,IAAI,CAAC,EAAEuF,IAAI,CAAC1D,MAAM,CAAC,GACjE0D,IAAI,CAAC1D,MAAM,CAAA;;AAEf;MACA,MAAMqS,UAAU,GACdb,IAAI,CAACxR,MAAM,KAAK,IAAI,GAChBmS,iBAAiB;AAAC,QAClBX,IAAI,CAACxR,MAAM,GACX6R,sBAAgB,CAACL,IAAI,CAACxR,MAAM,EAAEmS,iBAAiB,CAAC,IAAI,EAAE;AAAC,QACvDH,gBAAgB,EAAErT,MAAM,GACxBwT,iBAAiB;AAAC,QAClB,EAAE,CAAA;;AAER;MACA,MAAMG,kBAAkB,GAAGJ,iBAAiB,EAAEvT,MAAM,GAChDuT,iBAAiB,CAACE,MAAM,CAAC,CAACjU,IAAI,EAAEE,IAAI,KAAKA,IAAI,CAACF,IAAI,CAAC,EAAEkU,UAAU,CAAC,GAChEA,UAAU,CAAA;MAEd,MAAMrS,MAAM,GAAGgJ,sBAAgB,CAACtF,IAAI,CAAC1D,MAAM,EAAEsS,kBAAkB,CAAC,CAAA;MAEhE,MAAMrB,SAAS,GAAG,IAAI,CAAC1T,OAAO,CAACI,eAAe,CAACqC,MAAM,CAAC,CAAA;AAEtD,MAAA,MAAME,IAAI,GACRsR,IAAI,CAACtR,IAAI,KAAK,IAAI,GACdwD,IAAI,CAACxD,IAAI,GACTsR,IAAI,CAACtR,IAAI,GACT2R,sBAAgB,CAACL,IAAI,CAACtR,IAAI,EAAGwD,IAAI,CAACxD,IAAI,CAAC,GACvCwD,IAAI,CAACxD,IAAI,CAAA;MAEf,MAAMqS,OAAO,GAAGrS,IAAI,GAAI,IAAGA,IAAK,CAAA,CAAC,GAAG,EAAE,CAAA;AAEtC,MAAA,IAAIsS,SAAS,GACXhB,IAAI,CAACpT,KAAK,KAAK,IAAI,GACfsF,IAAI,CAACtF,KAAK,GACVoT,IAAI,CAACpT,KAAK,GACVyT,sBAAgB,CAACL,IAAI,CAACpT,KAAK,EAAEsF,IAAI,CAACtF,KAAK,CAAC,GACxCsF,IAAI,CAACtF,KAAK,CAAA;MAEhBoU,SAAS,GAAGxJ,sBAAgB,CAACtF,IAAI,CAACtF,KAAK,EAAEoU,SAAS,CAAC,CAAA;MAEnD,OAAO;QACLzO,QAAQ;QACR/D,MAAM;QACNiR,SAAS;AACT7S,QAAAA,KAAK,EAAEoU,SAAS;QAChBtS,IAAI;AACJE,QAAAA,IAAI,EAAE,IAAI,CAAC4B,OAAO,CAACyQ,UAAU,CAAE,CAAE1O,EAAAA,QAAS,CAAEkN,EAAAA,SAAU,CAAEsB,EAAAA,OAAQ,EAAC,CAAC;QAClEG,cAAc,EAAElB,IAAI,CAACkB,cAAAA;OACtB,CAAA;KACF,CAAA;IAED,MAAMC,gBAAgB,GAAGA,CACvBnB,IAAsB,GAAG,EAAE,EAC3BoB,UAA6B,KAC1B;AACH,MAAA,IAAIvU,IAAI,GAAGkT,KAAK,CAACC,IAAI,CAAC,CAAA;MACtB,IAAIqB,UAAU,GAAGD,UAAU,GAAGrB,KAAK,CAACqB,UAAU,CAAC,GAAGlV,SAAS,CAAA;MAE3D,IAAI,CAACmV,UAAU,EAAE;QACf,IAAI5S,MAAM,GAAG,EAAE,CAAA;QAEf,IAAI6S,SAAS,GAAG,IAAI,CAACvV,OAAO,CAACwV,UAAU,EAAE9M,IAAI,CAAEpH,CAAC,IAAK;UACnD,MAAM6D,KAAK,GAAGyD,kBAAa,CAAC,IAAI,CAAC7D,QAAQ,EAAEjE,IAAI,CAAC0F,QAAQ,EAAE;YACxDJ,EAAE,EAAE9E,CAAC,CAAC6E,IAAI;AACVsP,YAAAA,KAAK,EAAE,KAAA;AACT,WAAC,CAAC,CAAA;AAEF,UAAA,IAAItQ,KAAK,EAAE;AACTzC,YAAAA,MAAM,GAAGyC,KAAK,CAAA;AACd,YAAA,OAAO,IAAI,CAAA;AACb,WAAA;AAEA,UAAA,OAAO,KAAK,CAAA;AACd,SAAC,CAAC,CAAA;AAEF,QAAA,IAAIoQ,SAAS,EAAE;AACbA,UAAAA,SAAS,GAAG;AACV,YAAA,GAAGA,SAAS;AACZpP,YAAAA,IAAI,EAAE0D,oBAAe,CAAC0L,SAAS,CAACpP,IAAI,EAAEzD,MAAM,CAAA;WAC7C,CAAA;AACD2S,UAAAA,UAAU,GAAGE,SAAS,CAAA;AACtBD,UAAAA,UAAU,GAAGtB,KAAK,CAACqB,UAAU,CAAC,CAAA;AAChC,SAAA;AACF,OAAA;AAEA,MAAA,MAAM9N,WAAW,GAAG,IAAI,CAAChB,WAAW,CAACzF,IAAI,CAAC0F,QAAQ,EAAE1F,IAAI,CAAC2B,MAAM,CAAC,CAAA;AAChE,MAAA,MAAMiT,aAAa,GAAGJ,UAAU,GAC5B,IAAI,CAAC/O,WAAW,CAAC+O,UAAU,CAAC9O,QAAQ,EAAE8O,UAAU,CAAC7S,MAAM,CAAC,GACxDtC,SAAS,CAAA;MACb,MAAMwV,WAAW,GAAGL,UAAU,GAC1BtB,KAAK,CAACqB,UAAU,EAAEK,aAAa,CAAC,GAChCvV,SAAS,CAAA;AAEb,MAAA,MAAMyV,KAAK,GAAG5B,KAAK,CAACC,IAAI,EAAE1M,WAAW,CAAC,CAAA;AAEtC,MAAA,IAAIoO,WAAW,EAAE;QACfC,KAAK,CAAC7B,cAAc,GAAG4B,WAAW,CAAA;AACpC,OAAA;AAEA,MAAA,OAAOC,KAAK,CAAA;KACb,CAAA;IAED,IAAIpR,IAAI,CAACqK,IAAI,EAAE;MACb,OAAOuG,gBAAgB,CAAC5Q,IAAI,EAAE;AAC5B,QAAA,GAAGoM,UAAI,CAACpM,IAAI,EAAE,CAAC,MAAM,CAAC,CAAC;AACvB,QAAA,GAAGA,IAAI,CAACqK,IAAAA;AACV,OAAC,CAAC,CAAA;AACJ,KAAA;IAEA,OAAOuG,gBAAgB,CAAC5Q,IAAI,CAAC,CAAA;GAC9B,CAAA;EAED,uBAAuB,GAAGqR,CAAC;IACzB/S,OAAO;IACP6K,WAAW;IACX,GAAGmI,IAAAA;GACsC,GAAG,EAAE,KAAK;AACnD,IAAA,MAAMlT,QAAQ,GAAG,IAAI,CAACJ,aAAa,CAACsT,IAAI,CAAC,CAAA;AACzC,IAAA,OAAO,IAAI,CAAC,eAAe,CAAC;AAC1B,MAAA,GAAGlT,QAAQ;MACXE,OAAO;AACP6K,MAAAA,WAAAA;AACF,KAAC,CAAC,CAAA;GACH,CAAA;AAED,EAAA,eAAe,GAAG,MAAO7M,IAA4C,IAAK;IACxE,IAAI,IAAI,CAACiV,eAAe,EAAEtF,YAAY,CAAC,IAAI,CAACsF,eAAe,CAAC,CAAA;IAE5D,IAAIC,UAA8B,GAAG,SAAS,CAAA;AAE9C,IAAA,IAAI,CAAClV,IAAI,CAACgC,OAAO,EAAE;AACjBkT,MAAAA,UAAU,GAAG,MAAM,CAAA;AACrB,KAAA;AAEA,IAAA,MAAMC,SAAS,GAAG,IAAI,CAACpV,KAAK,CAAC+B,QAAQ,CAACC,IAAI,KAAK/B,IAAI,CAAC+B,IAAI,CAAA;AAExD,IAAA,IAAIoT,SAAS,EAAE;AACbD,MAAAA,UAAU,GAAG,SAAS,CAAA;AACxB,KAAA;IAEA,IAAI;MAAEjC,cAAc;MAAE,GAAGmC,WAAAA;AAAY,KAAC,GAAGpV,IAAI,CAAA;AAE7C,IAAA,IAAIiT,cAAc,EAAE;AAClBmC,MAAAA,WAAW,GAAG;AACZ,QAAA,GAAGnC,cAAc;AACjBlT,QAAAA,KAAK,EAAE;UACL,GAAGkT,cAAc,CAAClT,KAAK;AACvBgT,UAAAA,SAAS,EAAE1T,SAAS;AACpByT,UAAAA,cAAc,EAAE;AACd,YAAA,GAAGsC,WAAW;YACdzT,MAAM,EAAEyT,WAAW,CAACxC,SAAS;AAC7B7S,YAAAA,KAAK,EAAE;cACL,GAAGqV,WAAW,CAACrV,KAAK;AACpBgT,cAAAA,SAAS,EAAE1T,SAAU;AACrByT,cAAAA,cAAc,EAAEzT,SAAU;AAC1B4J,cAAAA,GAAG,EAAE5J,SAAAA;AACP,aAAA;AACF,WAAA;AACF,SAAA;OACD,CAAA;MAED,IAAI+V,WAAW,CAACf,cAAc,IAAI,IAAI,CAACnV,OAAO,CAACmV,cAAc,IAAI,KAAK,EAAE;AACtEe,QAAAA,WAAW,CAACrV,KAAK,CAACgT,SAAS,GAAG,IAAI,CAAClU,eAAe,CAAA;AACpD,OAAA;AACF,KAAA;AAEA,IAAA,IAAI,CAAC8E,OAAO,CAACuR,UAAU,KAAK,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC,CACtDE,WAAW,CAACrT,IAAI,EAChBqT,WAAW,CAACrV,KACd,CAAC,CAAA;AAED,IAAA,IAAI,CAACnB,eAAe,GAAGoB,IAAI,CAAC6M,WAAW,IAAI,IAAI,CAAA;IAE/C,OAAO,IAAI,CAACjI,iBAAiB,CAAA;GAC9B,CAAA;EAEDL,aAAa,GAAI1D,EAAU,IAAyC;AAClE,IAAA,OAAO,IAAI,CAACd,KAAK,CAACG,WAAW,CAACW,EAAE,CAAC,CAAA;GAClC,CAAA;AAEDkK,EAAAA,aAAa,GAAGA,CACdlK,EAAU,EACVwU,OAAiE,KAC9D;AACH,IAAA,IAAI,CAAC3V,OAAO,CAACmD,QAAQ,CAAE/C,IAAI,IAAK;AAC9B,MAAA,IAAI,CAACA,IAAI,CAACI,WAAW,CAACW,EAAE,CAAC,EAAE;AACzB,QAAA,OAAOf,IAAI,CAAA;AACb,OAAA;MAEA,OAAO;AACL,QAAA,GAAGA,IAAI;AACPI,QAAAA,WAAW,EAAE;UACX,GAAGJ,IAAI,CAACI,WAAW;UACnB,CAACW,EAAE,GAAGwU,OAAO,CAACvV,IAAI,CAACI,WAAW,CAACW,EAAE,CAAQ,CAAA;AAC3C,SAAA;OACD,CAAA;AACH,KAAC,CAAC,CAAA;GACH,CAAA;AAED4L,EAAAA,iBAAiB,GAAGA,CAClB5L,EAAU,EACVwU,OAA2B,EAC3B3R,IAGC,KACE;AACH,IAAA,MAAMW,KAAK,GAAG,IAAI,CAACE,aAAa,CAAC1D,EAAE,CAAC,CAAA;IAEpC,IAAI,CAACwD,KAAK,EAAE,OAAA;IAEZ,MAAMrD,KAAK,GAAG,IAAI,CAACC,QAAQ,CAACoD,KAAK,CAACnD,OAAO,CAAC,CAAA;IAC1C,MAAMoG,SAAS,GAAG5D,IAAI,EAAE4D,SAAS,IAAIJ,IAAI,CAACD,GAAG,EAAE,CAAA;AAE/C,IAAA,MAAMI,aAAa,GACjB3D,IAAI,EAAEqD,MAAM,IACZ/F,KAAK,CAAC9B,OAAO,CAACmI,aAAa,IAC3B,IAAI,CAACnI,OAAO,CAACoW,oBAAoB,IACjC,IAAI,CAAA;AAEN,IAAA,MAAMvO,MAAM,GACVrD,IAAI,EAAEqD,MAAM,IAAI/F,KAAK,CAAC9B,OAAO,CAAC6H,MAAM,IAAI,IAAI,CAAC7H,OAAO,CAACqW,aAAa,IAAI,CAAC,CAAC,CAAA;AAE1E,IAAA,IAAI,CAACxK,aAAa,CAAClK,EAAE,EAAGiC,CAAC,KAAM;AAC7B,MAAA,GAAGA,CAAC;AACJ+G,MAAAA,KAAK,EAAExK,SAAS;AAChBwG,MAAAA,MAAM,EAAE,SAAS;AACjBvE,MAAAA,UAAU,EAAE,KAAK;AACjBgG,MAAAA,SAAS,EAAEA,SAAS;MACpB0C,UAAU,EAAEwJ,sBAAgB,CAAC6B,OAAO,EAAEvS,CAAC,CAACkH,UAAU,CAAC;MACnD3C,aAAa;AACbN,MAAAA,MAAAA;AACF,KAAC,CAAC,CAAC,CAAA;GACJ,CAAA;EAEDvD,UAAU,GAAG,MAAOE,IAInB,IAAoB;IACnB,IAAIA,IAAI,EAAE2F,OAAO,EAAE;MACjB,IAAI,CAAC0B,aAAa,CAACrH,IAAI,CAAC2F,OAAO,EAAGvG,CAAC,KAAM;AACvC,QAAA,GAAGA,CAAC;AACJ8G,QAAAA,OAAO,EAAE,IAAA;AACX,OAAC,CAAC,CAAC,CAAA;AAEH,MAAA,MAAM4L,UAAU,GAAG,IAAI,CAACzV,KAAK,CAACY,OAAO,CAAC8U,SAAS,CAC5CjV,CAAC,IAAKA,CAAC,CAACK,EAAE,KAAK6C,IAAI,CAAC2F,OACvB,CAAC,CAAA;MACD,MAAMqM,UAAU,GAAG,IAAI,CAAC3V,KAAK,CAACY,OAAO,CAAC6U,UAAU,GAAG,CAAC,CAAC,CAAA;AAErD,MAAA,IAAIE,UAAU,EAAE;QACd,OAAO,IAAI,CAAClS,UAAU,CAAC;UACrB6F,OAAO,EAAEqM,UAAU,CAAC7U,EAAE;AACtB8U,UAAAA,MAAM,EAAE,KAAK;UACblS,WAAW,EAAEC,IAAI,CAACD,WAAAA;AACpB,SAAC,CAAC,CAAA;AACJ,OAAA;AACF,KAAC,MAAM;AACL,MAAA,IAAI,CAAC/D,OAAO,CAAC8F,KAAK,CAAC,MAAM;AACvBzC,QAAAA,MAAM,CAACqE,MAAM,CAAC,IAAI,CAACrH,KAAK,CAACG,WAAW,CAAC,CAACwC,OAAO,CAAE2B,KAAK,IAAK;UACvD,MAAMrD,KAAK,GAAG,IAAI,CAACC,QAAQ,CAACoD,KAAK,CAACnD,OAAO,CAAC,CAAA;AAC1C,UAAA,MAAM0U,gBAAgB,GAAGlS,IAAI,EAAED,WAAW,GACtCzC,KAAK,CAAC9B,OAAO,CAACqE,mBAAmB,IAAI,IAAI,GACzC,IAAI,CAAA;AAER,UAAA,IAAIqS,gBAAgB,EAAE;YACpB,IAAI,CAAC7K,aAAa,CAAC1G,KAAK,CAACxD,EAAE,EAAGiC,CAAC,KAAM;AACnC,cAAA,GAAGA,CAAC;AACJ8G,cAAAA,OAAO,EAAE,IAAA;AACX,aAAC,CAAC,CAAC,CAAA;AACL,WAAA;AACF,SAAC,CAAC,CAAA;AACJ,OAAC,CAAC,CAAA;AACJ,KAAA;AAEA,IAAA,IAAIlG,IAAI,EAAEiS,MAAM,IAAI,IAAI,EAAE;AACxB,MAAA,OAAO,IAAI,CAACjR,IAAI,EAAE,CAAA;AACpB,KAAA;GACD,CAAA;AACH,CAAA;;AAEA;AACA,MAAMd,QAAQ,GAAG,OAAOV,MAAM,KAAK,WAAW,IAAI,CAACA,MAAM,CAACgN,QAAQ,CAAC2F,aAAa,CAAA;AAEhF,SAASjW,qBAAqBA,GAAqB;EACjD,OAAO;AACLiG,IAAAA,MAAM,EAAE,MAAM;AACdvE,IAAAA,UAAU,EAAE,KAAK;AACjB0C,IAAAA,gBAAgB,EAAE,IAAK;AACvBlC,IAAAA,QAAQ,EAAE,IAAK;IACf5B,WAAW,EAAE,EAAE;AACfG,IAAAA,QAAQ,EAAE,EAAE;AACZK,IAAAA,eAAe,EAAE,EAAE;AACnBC,IAAAA,OAAO,EAAE,EAAE;AACXG,IAAAA,cAAc,EAAE,EAAE;AAClBM,IAAAA,gBAAgB,EAAE,EAAE;AACpBC,IAAAA,eAAe,EAAE,EAAE;AACnByU,IAAAA,WAAW,EAAE5O,IAAI,CAACD,GAAG,EAAC;GACvB,CAAA;AACH,CAAA;AAEA,SAAS6H,WAAWA,CAAC3B,CAAa,EAAE;AAClC,EAAA,OAAO,CAAC,EAAEA,CAAC,CAAC4I,OAAO,IAAI5I,CAAC,CAAC6I,MAAM,IAAI7I,CAAC,CAAC8I,OAAO,IAAI9I,CAAC,CAAC+I,QAAQ,CAAC,CAAA;AAC7D,CAAA;AAcO,SAASC,QAAQA,CAItBzS,IAAsC,EAAoC;EACxEA,IAAI,CAAS2H,UAAU,GAAG,IAAI,CAAA;AAChC,EAAA,OAAO3H,IAAI,CAAA;AACb,CAAA;AAEO,SAAS2H,UAAUA,CAAC+K,GAAQ,EAAsB;AACvD,EAAA,OAAO,CAAC,CAACA,GAAG,EAAE/K,UAAU,CAAA;AAC1B,CAAA;AAEO,MAAMR,gBAAgB,SAASwL,KAAK,CAAC,EAAA;AACrC,MAAM3N,cAAc,SAAS2N,KAAK,CAAC,EAAA;AAE1C,SAASpF,UAAUA,CAACqF,UAAkB,EAAE;EACtC,OAAOA,UAAU,CACdtU,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC;AAAC,GACvBA,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC;AAAC,GACrBA,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AAC1B,CAAA;;AAEA;AACA;AACA;AACO,SAASuU,MAAMA,CAGpBlU,EAAoB,EAAE4G,GAAU,EAAE;EAClC,OAAO,OAAO,GAAGuN,IAAyB,KAAmC;AAC3E,IAAA,MAAMC,QAAQ,GAAG,MAAMpU,EAAE,EAAE,CAAA;IAC3B,OAAOoU,QAAQ,CAACxN,GAAG,IAAI,SAAS,CAAC,CAAC,GAAGuN,IAAI,CAAC,CAAA;GAC3C,CAAA;AACH,CAAA;AAEO,SAASvK,cAAcA,CAC5B5H,KAAoB,EACpBX,IAA4B,EAC5B;AACA,EAAA,MAAMuD,GAAG,GAAGC,IAAI,CAACD,GAAG,EAAE,CAAA;EAEtB,IAAI5C,KAAK,CAACuF,OAAO,EAAE;AACjB,IAAA,OAAO,IAAI,CAAA;AACb,GAAA;EAEA,IAAIlG,IAAI,EAAEoD,OAAO,EAAE;AACjB,IAAA,OAAOzC,KAAK,CAACgD,aAAa,GAAG,CAAC,GAC1B,KAAK,GACLhD,KAAK,CAACiD,SAAS,GAAGjD,KAAK,CAACgD,aAAa,GAAGJ,GAAG,CAAA;AACjD,GAAA;AAEA,EAAA,OAAO5C,KAAK,CAAC0C,MAAM,GAAG,CAAC,GAAG,KAAK,GAAG1C,KAAK,CAACiD,SAAS,GAAGjD,KAAK,CAAC0C,MAAM,GAAGE,GAAG,CAAA;AACxE;;;;;;;;;;;"}
|
|
@@ -18,7 +18,7 @@ let weakScrolledElementsByRestoreKey = {};
|
|
|
18
18
|
let cache;
|
|
19
19
|
let pathDidChange = false;
|
|
20
20
|
const sessionsStorage = typeof window !== 'undefined' && window.sessionStorage;
|
|
21
|
-
const defaultGetKey = location => location.key;
|
|
21
|
+
const defaultGetKey = location => location.state.key;
|
|
22
22
|
function watchScrollPositions(router, opts) {
|
|
23
23
|
const getKey = opts?.getKey || defaultGetKey;
|
|
24
24
|
if (sessionsStorage) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scroll-restoration.js","sources":["../../src/scroll-restoration.ts"],"sourcesContent":["import { AnyRouter, ParsedLocation } from './router'\n\nconst windowKey = 'window'\nconst delimiter = '___'\n\nlet weakScrolledElementsByRestoreKey: Record<string, WeakSet<any>> = {}\n\ntype CacheValue = Record<string, { scrollX: number; scrollY: number }>\n\ntype Cache = {\n current: CacheValue\n set: (key: string, value: any) => void\n}\n\nlet cache: Cache\n\nlet pathDidChange = false\n\nconst sessionsStorage = typeof window !== 'undefined' && window.sessionStorage\n\nexport type ScrollRestorationOptions = {\n getKey?: (location: ParsedLocation) => string\n}\n\nconst defaultGetKey = (location: ParsedLocation) => location.key!\n\nexport function watchScrollPositions(\n router: AnyRouter,\n opts?: ScrollRestorationOptions,\n) {\n const getKey = opts?.getKey || defaultGetKey\n\n if (sessionsStorage) {\n if (!cache) {\n cache = (() => {\n const storageKey = 'tsr-scroll-restoration-v1'\n\n const current: CacheValue = JSON.parse(\n window.sessionStorage.getItem(storageKey) || '{}',\n )\n\n return {\n current,\n set: (key: string, value: any) => {\n current[key] = value\n window.sessionStorage.setItem(storageKey, JSON.stringify(cache))\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 const restoreKey = getKey(router.state.resolvedLocation)\n\n if (!weakScrolledElementsByRestoreKey[restoreKey]) {\n weakScrolledElementsByRestoreKey[restoreKey] = new WeakSet()\n }\n\n const set = weakScrolledElementsByRestoreKey[restoreKey]!\n\n if (set.has(event.target)) return\n set.add(event.target)\n\n const cacheKey = [\n restoreKey,\n event.target === document || event.target === window\n ? windowKey\n : getCssSelector(event.target),\n ].join(delimiter)\n\n if (!cache.current[cacheKey]) {\n cache.set(cacheKey, {\n scrollX: NaN,\n scrollY: NaN,\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 const onPathWillChange = (from: ParsedLocation) => {\n const restoreKey = getKey(from)\n for (const cacheKey in cache.current) {\n const entry = cache.current[cacheKey]!\n const [key, elementSelector] = cacheKey.split(delimiter)\n if (restoreKey === key) {\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(cacheKey, entry)\n }\n }\n }\n\n const onPathChange = () => {\n pathDidChange = true\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) onPathWillChange(event.from)\n })\n\n const unsubOnLoad = router.subscribe('onLoad', (event) => {\n if (event.pathChanged) onPathChange()\n })\n\n return () => {\n document.removeEventListener('scroll', onScroll)\n unsubOnBeforeLoad()\n unsubOnLoad()\n }\n}\n\nexport function restoreScrollPositions(\n router: AnyRouter,\n opts?: ScrollRestorationOptions,\n) {\n if (pathDidChange) {\n if (!router.resetNextScroll) {\n return\n }\n\n const getKey = opts?.getKey || defaultGetKey\n\n pathDidChange = false\n\n const restoreKey = getKey(router.state.location)\n let windowRestored = false\n\n for (const cacheKey in cache.current) {\n const entry = cache.current[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}\n"],"names":["windowKey","delimiter","weakScrolledElementsByRestoreKey","cache","pathDidChange","sessionsStorage","window","sessionStorage","defaultGetKey","location","key","watchScrollPositions","router","opts","getKey","storageKey","current","JSON","parse","getItem","set","value","setItem","stringify","history","scrollRestoration","onScroll","event","restoreKey","state","resolvedLocation","WeakSet","has","target","add","cacheKey","document","getCssSelector","join","scrollX","NaN","scrollY","el","path","parent","parentNode","unshift","tagName","indexOf","call","children","toLowerCase","onPathWillChange","from","entry","elementSelector","split","element","querySelector","scrollLeft","scrollTop","onPathChange","addEventListener","unsubOnBeforeLoad","subscribe","pathChanged","unsubOnLoad","removeEventListener","restoreScrollPositions","resetNextScroll","windowRestored","scrollTo"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"scroll-restoration.js","sources":["../../src/scroll-restoration.ts"],"sourcesContent":["import { AnyRouter, ParsedLocation } from './router'\n\nconst windowKey = 'window'\nconst delimiter = '___'\n\nlet weakScrolledElementsByRestoreKey: Record<string, WeakSet<any>> = {}\n\ntype CacheValue = Record<string, { scrollX: number; scrollY: number }>\n\ntype Cache = {\n current: CacheValue\n set: (key: string, value: any) => void\n}\n\nlet cache: Cache\n\nlet pathDidChange = false\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 watchScrollPositions(\n router: AnyRouter,\n opts?: ScrollRestorationOptions,\n) {\n const getKey = opts?.getKey || defaultGetKey\n\n if (sessionsStorage) {\n if (!cache) {\n cache = (() => {\n const storageKey = 'tsr-scroll-restoration-v1'\n\n const current: CacheValue = JSON.parse(\n window.sessionStorage.getItem(storageKey) || '{}',\n )\n\n return {\n current,\n set: (key: string, value: any) => {\n current[key] = value\n window.sessionStorage.setItem(storageKey, JSON.stringify(cache))\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 const restoreKey = getKey(router.state.resolvedLocation)\n\n if (!weakScrolledElementsByRestoreKey[restoreKey]) {\n weakScrolledElementsByRestoreKey[restoreKey] = new WeakSet()\n }\n\n const set = weakScrolledElementsByRestoreKey[restoreKey]!\n\n if (set.has(event.target)) return\n set.add(event.target)\n\n const cacheKey = [\n restoreKey,\n event.target === document || event.target === window\n ? windowKey\n : getCssSelector(event.target),\n ].join(delimiter)\n\n if (!cache.current[cacheKey]) {\n cache.set(cacheKey, {\n scrollX: NaN,\n scrollY: NaN,\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 const onPathWillChange = (from: ParsedLocation) => {\n const restoreKey = getKey(from)\n for (const cacheKey in cache.current) {\n const entry = cache.current[cacheKey]!\n const [key, elementSelector] = cacheKey.split(delimiter)\n if (restoreKey === key) {\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(cacheKey, entry)\n }\n }\n }\n\n const onPathChange = () => {\n pathDidChange = true\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) onPathWillChange(event.from)\n })\n\n const unsubOnLoad = router.subscribe('onLoad', (event) => {\n if (event.pathChanged) onPathChange()\n })\n\n return () => {\n document.removeEventListener('scroll', onScroll)\n unsubOnBeforeLoad()\n unsubOnLoad()\n }\n}\n\nexport function restoreScrollPositions(\n router: AnyRouter,\n opts?: ScrollRestorationOptions,\n) {\n if (pathDidChange) {\n if (!router.resetNextScroll) {\n return\n }\n\n const getKey = opts?.getKey || defaultGetKey\n\n pathDidChange = false\n\n const restoreKey = getKey(router.state.location)\n let windowRestored = false\n\n for (const cacheKey in cache.current) {\n const entry = cache.current[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}\n"],"names":["windowKey","delimiter","weakScrolledElementsByRestoreKey","cache","pathDidChange","sessionsStorage","window","sessionStorage","defaultGetKey","location","state","key","watchScrollPositions","router","opts","getKey","storageKey","current","JSON","parse","getItem","set","value","setItem","stringify","history","scrollRestoration","onScroll","event","restoreKey","resolvedLocation","WeakSet","has","target","add","cacheKey","document","getCssSelector","join","scrollX","NaN","scrollY","el","path","parent","parentNode","unshift","tagName","indexOf","call","children","toLowerCase","onPathWillChange","from","entry","elementSelector","split","element","querySelector","scrollLeft","scrollTop","onPathChange","addEventListener","unsubOnBeforeLoad","subscribe","pathChanged","unsubOnLoad","removeEventListener","restoreScrollPositions","resetNextScroll","windowRestored","scrollTo"],"mappings":"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"}
|