@tanstack/router-core 0.0.1-beta.5 → 0.0.1-beta.50
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/LICENSE +21 -0
- package/build/cjs/actions.js +94 -0
- package/build/cjs/actions.js.map +1 -0
- package/build/cjs/history.js +163 -0
- package/build/cjs/history.js.map +1 -0
- package/build/cjs/{packages/router-core/src/index.js → index.js} +26 -11
- package/build/cjs/{packages/router-core/src/index.js.map → index.js.map} +1 -1
- package/build/cjs/interop.js +175 -0
- package/build/cjs/interop.js.map +1 -0
- package/build/cjs/{packages/router-core/src/path.js → path.js} +23 -48
- package/build/cjs/path.js.map +1 -0
- package/build/cjs/{packages/router-core/src/qss.js → qss.js} +8 -13
- package/build/cjs/qss.js.map +1 -0
- package/build/cjs/route.js +33 -0
- package/build/cjs/route.js.map +1 -0
- package/build/cjs/{packages/router-core/src/routeConfig.js → routeConfig.js} +13 -18
- package/build/cjs/routeConfig.js.map +1 -0
- package/build/cjs/routeMatch.js +237 -0
- package/build/cjs/routeMatch.js.map +1 -0
- package/build/cjs/router.js +821 -0
- package/build/cjs/router.js.map +1 -0
- package/build/cjs/{packages/router-core/src/searchParams.js → searchParams.js} +10 -12
- package/build/cjs/searchParams.js.map +1 -0
- package/build/cjs/store.js +54 -0
- package/build/cjs/store.js.map +1 -0
- package/build/cjs/utils.js +47 -0
- package/build/cjs/utils.js.map +1 -0
- package/build/esm/index.js +1384 -2059
- package/build/esm/index.js.map +1 -1
- package/build/stats-html.html +59 -49
- package/build/stats-react.json +248 -193
- package/build/types/index.d.ts +385 -317
- package/build/umd/index.development.js +1486 -2142
- package/build/umd/index.development.js.map +1 -1
- package/build/umd/index.production.js +1 -1
- package/build/umd/index.production.js.map +1 -1
- package/package.json +6 -4
- package/src/actions.ts +157 -0
- package/src/frameworks.ts +2 -2
- package/src/history.ts +199 -0
- package/src/index.ts +4 -7
- package/src/interop.ts +169 -0
- package/src/link.ts +87 -44
- package/src/path.ts +12 -8
- package/src/route.ts +36 -229
- package/src/routeConfig.ts +99 -102
- package/src/routeInfo.ts +28 -25
- package/src/routeMatch.ts +294 -322
- package/src/router.ts +1047 -884
- package/src/store.ts +52 -0
- package/src/utils.ts +14 -72
- package/build/cjs/_virtual/_rollupPluginBabelHelpers.js +0 -33
- package/build/cjs/_virtual/_rollupPluginBabelHelpers.js.map +0 -1
- package/build/cjs/node_modules/@babel/runtime/helpers/esm/extends.js +0 -33
- package/build/cjs/node_modules/@babel/runtime/helpers/esm/extends.js.map +0 -1
- package/build/cjs/node_modules/history/index.js +0 -815
- package/build/cjs/node_modules/history/index.js.map +0 -1
- package/build/cjs/node_modules/tiny-invariant/dist/esm/tiny-invariant.js +0 -30
- package/build/cjs/node_modules/tiny-invariant/dist/esm/tiny-invariant.js.map +0 -1
- package/build/cjs/packages/router-core/src/path.js.map +0 -1
- package/build/cjs/packages/router-core/src/qss.js.map +0 -1
- package/build/cjs/packages/router-core/src/route.js +0 -161
- package/build/cjs/packages/router-core/src/route.js.map +0 -1
- package/build/cjs/packages/router-core/src/routeConfig.js.map +0 -1
- package/build/cjs/packages/router-core/src/routeMatch.js +0 -266
- package/build/cjs/packages/router-core/src/routeMatch.js.map +0 -1
- package/build/cjs/packages/router-core/src/router.js +0 -797
- package/build/cjs/packages/router-core/src/router.js.map +0 -1
- package/build/cjs/packages/router-core/src/searchParams.js.map +0 -1
- package/build/cjs/packages/router-core/src/utils.js +0 -118
- package/build/cjs/packages/router-core/src/utils.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"router.js","sources":["../../src/router.ts"],"sourcesContent":["import invariant from 'tiny-invariant'\nimport { GetFrameworkGeneric } from './frameworks'\n\nimport {\n LinkInfo,\n LinkOptions,\n NavigateOptions,\n ToOptions,\n ValidFromPath,\n ResolveRelativePath,\n} from './link'\nimport {\n cleanPath,\n interpolatePath,\n joinPaths,\n matchPathname,\n resolvePath,\n trimPath,\n} from './path'\nimport { AnyRoute, Route } from './route'\nimport {\n AnyLoaderData,\n AnyPathParams,\n AnyRouteConfig,\n AnySearchSchema,\n LoaderContext,\n RouteConfig,\n SearchFilter,\n} from './routeConfig'\nimport {\n AllRouteInfo,\n AnyAllRouteInfo,\n RouteInfo,\n RoutesById,\n} from './routeInfo'\nimport { RouteMatch, RouteMatchStore } from './routeMatch'\nimport { defaultParseSearch, defaultStringifySearch } from './searchParams'\nimport { createStore, batch, Store } from './store'\nimport {\n functionalUpdate,\n last,\n NoInfer,\n pick,\n PickAsRequired,\n PickRequired,\n Timeout,\n Updater,\n} from './utils'\nimport { replaceEqualDeep } from './interop'\nimport {\n createBrowserHistory,\n createMemoryHistory,\n RouterHistory,\n} from './history'\n\nexport interface RegisterRouter {\n // router: Router\n}\n\nexport type AnyRouter = Router<any, any, any>\n\nexport type RegisteredRouter = RegisterRouter extends {\n router: Router<infer TRouteConfig, infer TAllRouteInfo, infer TRouterContext>\n}\n ? Router<TRouteConfig, TAllRouteInfo, TRouterContext>\n : Router\n\nexport type RegisteredAllRouteInfo = RegisterRouter extends {\n router: Router<infer TRouteConfig, infer TAllRouteInfo, infer TRouterContext>\n}\n ? TAllRouteInfo\n : AnyAllRouteInfo\n\nexport interface LocationState {}\n\nexport interface ParsedLocation<\n TSearchObj extends AnySearchSchema = {},\n TState extends LocationState = LocationState,\n> {\n href: string\n pathname: string\n search: TSearchObj\n searchStr: string\n state: TState\n hash: string\n key?: string\n}\n\nexport interface FromLocation {\n pathname: string\n search?: unknown\n key?: string\n hash?: string\n}\n\nexport type SearchSerializer = (searchObj: Record<string, any>) => string\nexport type SearchParser = (searchStr: string) => Record<string, any>\nexport type FilterRoutesFn = <TRoute extends Route<any, RouteInfo>>(\n routeConfigs: TRoute[],\n) => TRoute[]\n\nexport interface RouterOptions<\n TRouteConfig extends AnyRouteConfig,\n TRouterContext,\n> {\n history?: RouterHistory\n stringifySearch?: SearchSerializer\n parseSearch?: SearchParser\n filterRoutes?: FilterRoutesFn\n defaultPreload?: false | 'intent'\n defaultPreloadMaxAge?: number\n defaultPreloadGcMaxAge?: number\n defaultPreloadDelay?: number\n defaultComponent?: GetFrameworkGeneric<'Component'>\n defaultErrorComponent?: GetFrameworkGeneric<'ErrorComponent'>\n defaultPendingComponent?: GetFrameworkGeneric<'Component'>\n defaultLoaderMaxAge?: number\n defaultLoaderGcMaxAge?: number\n caseSensitive?: boolean\n routeConfig?: TRouteConfig\n basepath?: string\n useServerData?: boolean\n createRouter?: (router: AnyRouter) => void\n createRoute?: (opts: { route: AnyRoute; router: AnyRouter }) => void\n context?: TRouterContext\n loadComponent?: (\n component: GetFrameworkGeneric<'Component'>,\n ) => Promise<GetFrameworkGeneric<'Component'>>\n onRouteChange?: () => void\n fetchServerDataFn?: FetchServerDataFn\n}\n\ntype FetchServerDataFn = (ctx: {\n router: AnyRouter\n routeMatch: RouteMatch\n}) => Promise<any>\n\nexport interface Loader<\n TFullSearchSchema extends AnySearchSchema = {},\n TAllParams extends AnyPathParams = {},\n TRouteLoaderData = AnyLoaderData,\n> {\n fetch: keyof PickRequired<TFullSearchSchema> extends never\n ? keyof TAllParams extends never\n ? (loaderContext: { signal?: AbortSignal }) => Promise<TRouteLoaderData>\n : (loaderContext: {\n params: TAllParams\n search?: TFullSearchSchema\n signal?: AbortSignal\n }) => Promise<TRouteLoaderData>\n : keyof TAllParams extends never\n ? (loaderContext: {\n search: TFullSearchSchema\n params: TAllParams\n signal?: AbortSignal\n }) => Promise<TRouteLoaderData>\n : (loaderContext: {\n search: TFullSearchSchema\n signal?: AbortSignal\n }) => Promise<TRouteLoaderData>\n current?: LoaderState<TFullSearchSchema, TAllParams>\n latest?: LoaderState<TFullSearchSchema, TAllParams>\n pending: LoaderState<TFullSearchSchema, TAllParams>[]\n}\n\nexport interface LoaderState<\n TFullSearchSchema extends AnySearchSchema = {},\n TAllParams extends AnyPathParams = {},\n> {\n loadedAt: number\n loaderContext: LoaderContext<TFullSearchSchema, TAllParams>\n}\n\nexport interface RouterStore<\n TSearchObj extends AnySearchSchema = {},\n TState extends LocationState = LocationState,\n> {\n status: 'idle' | 'loading'\n latestLocation: ParsedLocation<TSearchObj, TState>\n currentMatches: RouteMatch[]\n currentLocation: ParsedLocation<TSearchObj, TState>\n pendingMatches?: RouteMatch[]\n pendingLocation?: ParsedLocation<TSearchObj, TState>\n lastUpdated: number\n loaders: Record<string, Loader>\n isFetching: boolean\n isPreloading: boolean\n matchCache: Record<string, MatchCacheEntry>\n}\n\nexport type ListenerFn = () => void\n\nexport interface BuildNextOptions {\n to?: string | number | null\n params?: true | Updater<unknown>\n search?: true | Updater<unknown>\n hash?: true | Updater<string>\n state?: LocationState\n key?: string\n from?: string\n fromCurrent?: boolean\n __preSearchFilters?: SearchFilter<any>[]\n __postSearchFilters?: SearchFilter<any>[]\n}\n\nexport type MatchCacheEntry = {\n gc: number\n match: RouteMatch\n}\n\nexport interface MatchLocation {\n to?: string | number | null\n fuzzy?: boolean\n caseSensitive?: boolean\n from?: string\n fromCurrent?: boolean\n}\n\nexport interface MatchRouteOptions {\n pending?: boolean\n caseSensitive?: boolean\n fuzzy?: boolean\n}\n\ntype LinkCurrentTargetElement = {\n preloadTimeout?: null | ReturnType<typeof setTimeout>\n}\n\nexport interface DehydratedRouterState\n extends Pick<\n RouterStore,\n 'status' | 'latestLocation' | 'currentLocation' | 'lastUpdated'\n > {\n currentMatches: DehydratedRouteMatch[]\n}\n\nexport interface DehydratedRouter<TRouterContext = unknown> {\n // location: Router['__location']\n state: DehydratedRouterState\n context: TRouterContext\n}\n\nexport type MatchCache = Record<string, MatchCacheEntry>\n\ninterface DehydratedRouteMatch {\n matchId: string\n state: Pick<\n RouteMatchStore<any, any>,\n 'status' | 'routeLoaderData' | 'invalid' | 'invalidAt'\n >\n}\n\nexport interface RouterContext {}\n\nexport const defaultFetchServerDataFn: FetchServerDataFn = async ({\n router,\n routeMatch,\n}) => {\n const next = router.buildNext({\n to: '.',\n search: (d: any) => ({\n ...(d ?? {}),\n __data: {\n matchId: routeMatch.id,\n },\n }),\n })\n\n const res = await fetch(next.href, {\n method: 'GET',\n signal: routeMatch.abortController.signal,\n })\n\n if (res.ok) {\n return res.json()\n }\n\n throw new Error('Failed to fetch match data')\n}\n\nexport class Router<\n TRouteConfig extends AnyRouteConfig = RouteConfig,\n TAllRouteInfo extends AnyAllRouteInfo = AllRouteInfo<TRouteConfig>,\n TRouterContext = unknown,\n> {\n types!: {\n // Super secret internal stuff\n RouteConfig: TRouteConfig\n AllRouteInfo: TAllRouteInfo\n }\n\n options: PickAsRequired<\n RouterOptions<TRouteConfig, TRouterContext>,\n 'stringifySearch' | 'parseSearch' | 'context'\n >\n history: RouterHistory\n basepath: string\n // __location: Location<TAllRouteInfo['fullSearchSchema']>\n routeTree!: Route<TAllRouteInfo, RouteInfo>\n routesById!: RoutesById<TAllRouteInfo>\n navigateTimeout: undefined | Timeout\n nextAction: undefined | 'push' | 'replace'\n navigationPromise: undefined | Promise<void>\n\n store: Store<RouterStore<TAllRouteInfo['fullSearchSchema']>>\n startedLoadingAt = Date.now()\n resolveNavigation = () => {}\n\n constructor(options?: RouterOptions<TRouteConfig, TRouterContext>) {\n this.options = {\n defaultLoaderGcMaxAge: 5 * 60 * 1000,\n defaultLoaderMaxAge: 0,\n defaultPreloadMaxAge: 2000,\n defaultPreloadDelay: 50,\n context: undefined!,\n ...options,\n stringifySearch: options?.stringifySearch ?? defaultStringifySearch,\n parseSearch: options?.parseSearch ?? defaultParseSearch,\n fetchServerDataFn: options?.fetchServerDataFn ?? defaultFetchServerDataFn,\n }\n\n this.history = this.options?.history ?? createBrowserHistory()\n this.store = createStore(getInitialRouterState())\n this.basepath = ''\n\n this.update(options)\n\n // Allow frameworks to hook into the router creation\n this.options.createRouter?.(this)\n }\n\n reset = () => {\n this.store.setState((s) => Object.assign(s, getInitialRouterState()))\n }\n\n mount = () => {\n // Mount only does anything on the client\n if (!isServer) {\n // If the router matches are empty, load the matches\n if (!this.store.state.currentMatches.length) {\n this.load()\n }\n\n const unsubHistory = this.history.listen(() => {\n this.load(this.#parseLocation(this.store.state.latestLocation))\n })\n\n const visibilityChangeEvent = 'visibilitychange'\n const focusEvent = 'focus'\n\n // addEventListener does not exist in React Native, but window does\n // In the future, we might need to invert control here for more adapters\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (window.addEventListener) {\n // Listen to visibilitychange and focus\n window.addEventListener(visibilityChangeEvent, this.#onFocus, false)\n window.addEventListener(focusEvent, this.#onFocus, false)\n }\n\n return () => {\n unsubHistory()\n if (window.removeEventListener) {\n // Be sure to unsubscribe if a new handler is set\n\n window.removeEventListener(visibilityChangeEvent, this.#onFocus)\n window.removeEventListener(focusEvent, this.#onFocus)\n }\n }\n }\n\n return () => {}\n }\n\n update = <\n TRouteConfig extends RouteConfig = RouteConfig,\n TAllRouteInfo extends AnyAllRouteInfo = AllRouteInfo<TRouteConfig>,\n TRouterContext = unknown,\n >(\n opts?: RouterOptions<TRouteConfig, TRouterContext>,\n ): Router<TRouteConfig, TAllRouteInfo, TRouterContext> => {\n if (!this.store.state.latestLocation) {\n this.store.setState((s) => {\n s.latestLocation = this.#parseLocation()\n s.currentLocation = s.latestLocation\n })\n }\n\n Object.assign(this.options, opts)\n\n const { basepath, routeConfig } = this.options\n\n this.basepath = `/${trimPath(basepath ?? '') ?? ''}`\n\n if (routeConfig) {\n this.routesById = {} as any\n this.routeTree = this.#buildRouteTree(routeConfig)\n }\n\n return this as any\n }\n\n buildNext = (opts: BuildNextOptions) => {\n const next = this.#buildLocation(opts)\n\n const matches = this.matchRoutes(next.pathname)\n\n const __preSearchFilters = matches\n .map((match) => match.route.options.preSearchFilters ?? [])\n .flat()\n .filter(Boolean)\n\n const __postSearchFilters = matches\n .map((match) => match.route.options.postSearchFilters ?? [])\n .flat()\n .filter(Boolean)\n\n return this.#buildLocation({\n ...opts,\n __preSearchFilters,\n __postSearchFilters,\n })\n }\n\n cancelMatches = () => {\n ;[\n ...this.store.state.currentMatches,\n ...(this.store.state.pendingMatches || []),\n ].forEach((match) => {\n match.cancel()\n })\n }\n\n load = async (next?: ParsedLocation) => {\n let now = Date.now()\n const startedAt = now\n this.startedLoadingAt = startedAt\n\n // Cancel any pending matches\n this.cancelMatches()\n\n let matches!: RouteMatch<any, any>[]\n\n batch(() => {\n if (next) {\n // Ingest the new location\n this.store.setState((s) => {\n s.latestLocation = next\n })\n }\n\n // Match the routes\n matches = this.matchRoutes(this.store.state.latestLocation.pathname, {\n strictParseParams: true,\n })\n\n this.store.setState((s) => {\n s.status = 'loading'\n s.pendingMatches = matches\n s.pendingLocation = this.store.state.latestLocation\n })\n })\n\n // Load the matches\n try {\n await this.loadMatches(matches)\n } catch (err: any) {\n console.warn(err)\n invariant(\n false,\n 'Matches failed to load due to error above ☝️. Navigation cancelled!',\n )\n }\n\n if (this.startedLoadingAt !== startedAt) {\n // Ignore side-effects of outdated side-effects\n return this.navigationPromise\n }\n\n const previousMatches = this.store.state.currentMatches\n\n const exiting: RouteMatch[] = [],\n staying: RouteMatch[] = []\n\n previousMatches.forEach((d) => {\n if (matches.find((dd) => dd.id === d.id)) {\n staying.push(d)\n } else {\n exiting.push(d)\n }\n })\n\n const entering = matches.filter((d) => {\n return !previousMatches.find((dd) => dd.id === d.id)\n })\n\n now = Date.now()\n\n exiting.forEach((d) => {\n d.__onExit?.({\n params: d.params,\n search: d.store.state.routeSearch,\n })\n\n // Clear non-loading error states when match leaves\n if (d.store.state.status === 'error' && !d.store.state.isFetching) {\n d.store.setState((s) => {\n s.status = 'idle'\n s.error = undefined\n })\n }\n\n const gc = Math.max(\n d.route.options.loaderGcMaxAge ??\n this.options.defaultLoaderGcMaxAge ??\n 0,\n d.route.options.loaderMaxAge ?? this.options.defaultLoaderMaxAge ?? 0,\n )\n\n if (gc > 0) {\n this.store.setState((s) => {\n s.matchCache[d.id] = {\n gc: gc == Infinity ? Number.MAX_SAFE_INTEGER : now + gc,\n match: d,\n }\n })\n }\n })\n\n staying.forEach((d) => {\n d.route.options.onTransition?.({\n params: d.params,\n search: d.store.state.routeSearch,\n })\n })\n\n entering.forEach((d) => {\n d.__onExit = d.route.options.onLoaded?.({\n params: d.params,\n search: d.store.state.search,\n })\n delete this.store.state.matchCache[d.id]\n })\n\n this.store.setState((s) => {\n Object.assign(s, {\n status: 'idle',\n currentLocation: this.store.state.latestLocation,\n currentMatches: matches,\n pendingLocation: undefined,\n pendingMatches: undefined,\n })\n })\n\n this.options.onRouteChange?.()\n\n this.resolveNavigation()\n }\n\n cleanMatchCache = () => {\n const now = Date.now()\n\n this.store.setState((s) => {\n Object.keys(s.matchCache).forEach((matchId) => {\n const entry = s.matchCache[matchId]!\n\n // Don't remove loading matches\n if (entry.match.store.state.status === 'loading') {\n return\n }\n\n // Do not remove successful matches that are still valid\n if (entry.gc > 0 && entry.gc > now) {\n return\n }\n\n // Everything else gets removed\n delete s.matchCache[matchId]\n })\n })\n }\n\n getRoute = <TId extends keyof TAllRouteInfo['routeInfoById']>(\n id: TId,\n ): Route<TAllRouteInfo, TAllRouteInfo['routeInfoById'][TId]> => {\n const route = this.routesById[id]\n\n invariant(route, `Route with id \"${id as string}\" not found`)\n\n return route\n }\n\n loadRoute = async (\n navigateOpts: BuildNextOptions = this.store.state.latestLocation,\n ): Promise<RouteMatch[]> => {\n const next = this.buildNext(navigateOpts)\n const matches = this.matchRoutes(next.pathname, {\n strictParseParams: true,\n })\n await this.loadMatches(matches)\n return matches\n }\n\n preloadRoute = async (\n navigateOpts: BuildNextOptions = this.store.state.latestLocation,\n loaderOpts: { maxAge?: number; gcMaxAge?: number },\n ) => {\n const next = this.buildNext(navigateOpts)\n const matches = this.matchRoutes(next.pathname, {\n strictParseParams: true,\n })\n\n await this.loadMatches(matches, {\n preload: true,\n maxAge:\n loaderOpts.maxAge ??\n this.options.defaultPreloadMaxAge ??\n this.options.defaultLoaderMaxAge ??\n 0,\n gcMaxAge:\n loaderOpts.gcMaxAge ??\n this.options.defaultPreloadGcMaxAge ??\n this.options.defaultLoaderGcMaxAge ??\n 0,\n })\n return matches\n }\n\n matchRoutes = (pathname: string, opts?: { strictParseParams?: boolean }) => {\n const matches: RouteMatch[] = []\n\n if (!this.routeTree) {\n return matches\n }\n\n const existingMatches = [\n ...this.store.state.currentMatches,\n ...(this.store.state.pendingMatches ?? []),\n ]\n\n const recurse = async (routes: Route<any, any>[]): Promise<void> => {\n const parentMatch = last(matches)\n let params = parentMatch?.params ?? {}\n\n const filteredRoutes = this.options.filterRoutes?.(routes) ?? routes\n\n let foundRoutes: Route[] = []\n\n const findMatchInRoutes = (parentRoutes: Route[], routes: Route[]) => {\n routes.some((route) => {\n if (!route.path && route.childRoutes?.length) {\n return findMatchInRoutes([...foundRoutes, route], route.childRoutes)\n }\n\n const fuzzy = !!(route.path !== '/' || route.childRoutes?.length)\n\n const matchParams = matchPathname(this.basepath, pathname, {\n to: route.fullPath,\n fuzzy,\n caseSensitive:\n route.options.caseSensitive ?? this.options.caseSensitive,\n })\n\n if (matchParams) {\n let parsedParams\n\n try {\n parsedParams =\n route.options.parseParams?.(matchParams!) ?? matchParams\n } catch (err) {\n if (opts?.strictParseParams) {\n throw err\n }\n }\n\n params = {\n ...params,\n ...parsedParams,\n }\n }\n\n if (!!matchParams) {\n foundRoutes = [...parentRoutes, route]\n }\n\n return !!foundRoutes.length\n })\n\n return !!foundRoutes.length\n }\n\n findMatchInRoutes([], filteredRoutes)\n\n if (!foundRoutes.length) {\n return\n }\n\n foundRoutes.forEach((foundRoute) => {\n const interpolatedPath = interpolatePath(foundRoute.path, params)\n const matchId = interpolatePath(foundRoute.id, params, true)\n\n const match =\n existingMatches.find((d) => d.id === matchId) ||\n this.store.state.matchCache[matchId]?.match ||\n new RouteMatch(this, foundRoute, {\n matchId,\n params,\n pathname: joinPaths([this.basepath, interpolatedPath]),\n })\n\n matches.push(match)\n })\n\n const foundRoute = last(foundRoutes)!\n\n if (foundRoute.childRoutes?.length) {\n recurse(foundRoute.childRoutes)\n }\n }\n\n recurse([this.routeTree])\n\n linkMatches(matches)\n\n return matches\n }\n\n loadMatches = async (\n resolvedMatches: RouteMatch[],\n loaderOpts?:\n | { preload: true; maxAge: number; gcMaxAge: number }\n | { preload?: false; maxAge?: never; gcMaxAge?: never },\n ) => {\n this.cleanMatchCache()\n resolvedMatches.forEach(async (match) => {\n // Validate the match (loads search params etc)\n match.__validate()\n })\n\n // Check each match middleware to see if the route can be accessed\n await Promise.all(\n resolvedMatches.map(async (match) => {\n try {\n await match.route.options.beforeLoad?.({\n router: this as any,\n match,\n })\n } catch (err) {\n if (!loaderOpts?.preload) {\n match.route.options.onLoadError?.(err)\n }\n\n throw err\n }\n }),\n )\n\n const matchPromises = resolvedMatches.map(async (match, index) => {\n const prevMatch = resolvedMatches[(index = 1)]\n const search = match.store.state.search as { __data?: any }\n\n if (search.__data?.matchId && search.__data.matchId !== match.id) {\n return\n }\n\n match.load(loaderOpts)\n\n if (match.store.state.status !== 'success' && match.__loadPromise) {\n // Wait for the first sign of activity from the match\n await match.__loadPromise\n }\n\n if (prevMatch) {\n await prevMatch.__loadPromise\n }\n })\n\n await Promise.all(matchPromises)\n }\n\n loadMatchData = async (\n routeMatch: RouteMatch<any, any>,\n ): Promise<Record<string, unknown>> => {\n if (isServer || !this.options.useServerData) {\n return (\n (await routeMatch.route.options.loader?.({\n // parentLoaderPromise: routeMatch.parentMatch.dataPromise,\n params: routeMatch.params,\n search: routeMatch.store.state.routeSearch,\n signal: routeMatch.abortController.signal,\n })) || {}\n )\n } else {\n // Refresh:\n // '/dashboard'\n // '/dashboard/invoices/'\n // '/dashboard/invoices/123'\n\n // New:\n // '/dashboard/invoices/456'\n\n // TODO: batch requests when possible\n\n return this.options.fetchServerDataFn!({ router: this, routeMatch })\n }\n }\n\n invalidateRoute = async (opts: MatchLocation) => {\n const next = this.buildNext(opts)\n const unloadedMatchIds = this.matchRoutes(next.pathname).map((d) => d.id)\n\n await Promise.allSettled(\n [\n ...this.store.state.currentMatches,\n ...(this.store.state.pendingMatches ?? []),\n ].map(async (match) => {\n if (unloadedMatchIds.includes(match.id)) {\n return match.invalidate()\n }\n }),\n )\n }\n\n reload = () => {\n this.navigate({\n fromCurrent: true,\n replace: true,\n search: true,\n } as any)\n }\n\n resolvePath = (from: string, path: string) => {\n return resolvePath(this.basepath!, from, cleanPath(path))\n }\n\n navigate = async <\n TFrom extends ValidFromPath<TAllRouteInfo> = '/',\n TTo extends string = '.',\n >({\n from,\n to = '.' as any,\n search,\n hash,\n replace,\n params,\n }: NavigateOptions<TAllRouteInfo, TFrom, TTo>) => {\n // If this link simply reloads the current route,\n // make sure it has a new key so it will trigger a data refresh\n\n // If this `to` is a valid external URL, return\n // null for LinkUtils\n const toString = String(to)\n const fromString = String(from)\n\n let isExternal\n\n try {\n new URL(`${toString}`)\n isExternal = true\n } catch (e) {}\n\n invariant(\n !isExternal,\n 'Attempting to navigate to external url with this.navigate!',\n )\n\n return this.#commitLocation({\n from: fromString,\n to: toString,\n search,\n hash,\n replace,\n params,\n })\n }\n\n matchRoute = <\n TFrom extends ValidFromPath<TAllRouteInfo> = '/',\n TTo extends string = '.',\n >(\n location: ToOptions<TAllRouteInfo, TFrom, TTo>,\n opts?: MatchRouteOptions,\n ):\n | false\n | TAllRouteInfo['routeInfoById'][ResolveRelativePath<\n TFrom,\n NoInfer<TTo>\n >]['allParams'] => {\n location = {\n ...location,\n to: location.to\n ? this.resolvePath(location.from ?? '', location.to)\n : undefined,\n }\n\n const next = this.buildNext(location)\n\n if (opts?.pending) {\n if (!this.store.state.pendingLocation) {\n return false\n }\n\n return matchPathname(\n this.basepath,\n this.store.state.pendingLocation!.pathname,\n {\n ...opts,\n to: next.pathname,\n },\n ) as any\n }\n\n return matchPathname(\n this.basepath,\n this.store.state.currentLocation.pathname,\n {\n ...opts,\n to: next.pathname,\n },\n ) as any\n }\n\n buildLink = <\n TFrom extends ValidFromPath<TAllRouteInfo> = '/',\n TTo extends string = '.',\n >({\n from,\n to = '.' as any,\n search,\n params,\n hash,\n target,\n replace,\n activeOptions,\n preload,\n preloadMaxAge: userPreloadMaxAge,\n preloadGcMaxAge: userPreloadGcMaxAge,\n preloadDelay: userPreloadDelay,\n disabled,\n }: LinkOptions<TAllRouteInfo, TFrom, TTo>): LinkInfo => {\n // If this link simply reloads the current route,\n // make sure it has a new key so it will trigger a data refresh\n\n // If this `to` is a valid external URL, return\n // null for LinkUtils\n\n try {\n new URL(`${to}`)\n return {\n type: 'external',\n href: to,\n }\n } catch (e) {}\n\n const nextOpts = {\n from,\n to,\n search,\n params,\n hash,\n replace,\n }\n\n const next = this.buildNext(nextOpts)\n\n preload = preload ?? this.options.defaultPreload\n const preloadDelay =\n userPreloadDelay ?? this.options.defaultPreloadDelay ?? 0\n\n // Compare path/hash for matches\n const pathIsEqual =\n this.store.state.currentLocation.pathname === next.pathname\n const currentPathSplit =\n this.store.state.currentLocation.pathname.split('/')\n const nextPathSplit = next.pathname.split('/')\n const pathIsFuzzyEqual = nextPathSplit.every(\n (d, i) => d === currentPathSplit[i],\n )\n const hashIsEqual = this.store.state.currentLocation.hash === next.hash\n // Combine the matches based on user options\n const pathTest = activeOptions?.exact ? pathIsEqual : pathIsFuzzyEqual\n const hashTest = activeOptions?.includeHash ? hashIsEqual : true\n\n // The final \"active\" test\n const isActive = pathTest && hashTest\n\n // The click handler\n const handleClick = (e: MouseEvent) => {\n if (\n !disabled &&\n !isCtrlEvent(e) &&\n !e.defaultPrevented &&\n (!target || target === '_self') &&\n e.button === 0\n ) {\n e.preventDefault()\n if (pathIsEqual && !search && !hash) {\n this.invalidateRoute(nextOpts)\n }\n\n // All is well? Navigate!\n this.#commitLocation(nextOpts as any)\n }\n }\n\n // The click handler\n const handleFocus = (e: MouseEvent) => {\n if (preload) {\n this.preloadRoute(nextOpts, {\n maxAge: userPreloadMaxAge,\n gcMaxAge: userPreloadGcMaxAge,\n }).catch((err) => {\n console.warn(err)\n console.warn('Error preloading route! ☝️')\n })\n }\n }\n\n const handleEnter = (e: MouseEvent) => {\n const target = (e.target || {}) as LinkCurrentTargetElement\n\n if (preload) {\n if (target.preloadTimeout) {\n return\n }\n\n target.preloadTimeout = setTimeout(() => {\n target.preloadTimeout = null\n this.preloadRoute(nextOpts, {\n maxAge: userPreloadMaxAge,\n gcMaxAge: userPreloadGcMaxAge,\n }).catch((err) => {\n console.warn(err)\n console.warn('Error preloading route! ☝️')\n })\n }, preloadDelay)\n }\n }\n\n const handleLeave = (e: MouseEvent) => {\n const target = (e.target || {}) as LinkCurrentTargetElement\n\n if (target.preloadTimeout) {\n clearTimeout(target.preloadTimeout)\n target.preloadTimeout = null\n }\n }\n\n return {\n type: 'internal',\n next,\n handleFocus,\n handleClick,\n handleEnter,\n handleLeave,\n isActive,\n disabled,\n }\n }\n\n dehydrate = (): DehydratedRouter<TRouterContext> => {\n return {\n state: {\n ...pick(this.store.state, [\n 'latestLocation',\n 'currentLocation',\n 'status',\n 'lastUpdated',\n ]),\n currentMatches: this.store.state.currentMatches.map((match) => ({\n matchId: match.id,\n state: {\n ...pick(match.store.state, [\n 'status',\n 'routeLoaderData',\n 'invalidAt',\n 'invalid',\n ]),\n },\n })),\n },\n context: this.options.context as TRouterContext,\n }\n }\n\n hydrate = (dehydratedRouter: DehydratedRouter<TRouterContext>) => {\n this.store.setState((s) => {\n // Update the context TODO: make this part of state?\n this.options.context = dehydratedRouter.context\n\n // Match the routes\n const currentMatches = this.matchRoutes(\n dehydratedRouter.state.latestLocation.pathname,\n {\n strictParseParams: true,\n },\n )\n\n currentMatches.forEach((match, index) => {\n const dehydratedMatch = dehydratedRouter.state.currentMatches[index]\n invariant(\n dehydratedMatch && dehydratedMatch.matchId === match.id,\n 'Oh no! There was a hydration mismatch when attempting to rethis.store the state of the router! 😬',\n )\n Object.assign(match, dehydratedMatch)\n })\n\n currentMatches.forEach((match) => match.__validate())\n\n Object.assign(s, { ...dehydratedRouter.state, currentMatches })\n })\n }\n\n getLoader = <TFrom extends keyof TAllRouteInfo['routeInfoById'] = '/'>(opts: {\n from: TFrom\n }): unknown extends TAllRouteInfo['routeInfoById'][TFrom]['routeLoaderData']\n ?\n | Loader<\n LoaderContext<\n TAllRouteInfo['routeInfoById'][TFrom]['fullSearchSchema'],\n TAllRouteInfo['routeInfoById'][TFrom]['allParams']\n >,\n TAllRouteInfo['routeInfoById'][TFrom]['routeLoaderData']\n >\n | undefined\n : Loader<\n TAllRouteInfo['routeInfoById'][TFrom]['fullSearchSchema'],\n TAllRouteInfo['routeInfoById'][TFrom]['allParams'],\n TAllRouteInfo['routeInfoById'][TFrom]['routeLoaderData']\n > => {\n const id = opts.from || ('/' as any)\n\n const route = this.getRoute(id)\n\n if (!route) return undefined as any\n\n let loader =\n this.store.state.loaders[id] ||\n (() => {\n this.store.setState((s) => {\n s.loaders[id] = {\n pending: [],\n fetch: (async (loaderContext: LoaderContext<any, any>) => {\n if (!route) {\n return\n }\n const loaderState: LoaderState<any, any> = {\n loadedAt: Date.now(),\n loaderContext,\n }\n this.store.setState((s) => {\n s.loaders[id]!.current = loaderState\n s.loaders[id]!.latest = loaderState\n s.loaders[id]!.pending.push(loaderState)\n })\n try {\n return await route.options.loader?.(loaderContext)\n } finally {\n this.store.setState((s) => {\n s.loaders[id]!.pending = s.loaders[id]!.pending.filter(\n (d) => d !== loaderState,\n )\n })\n }\n }) as any,\n }\n })\n return this.store.state.loaders[id]!\n })()\n\n return loader as any\n }\n\n #buildRouteTree = (rootRouteConfig: RouteConfig) => {\n const recurseRoutes = (\n routeConfigs: RouteConfig[],\n parent?: Route<TAllRouteInfo, any, any>,\n ): Route<TAllRouteInfo, any, any>[] => {\n return routeConfigs.map((routeConfig, i) => {\n const routeOptions = routeConfig.options\n const route = new Route(routeConfig, routeOptions, i, parent, this)\n const existingRoute = (this.routesById as any)[route.id]\n\n if (existingRoute) {\n if (process.env.NODE_ENV !== 'production') {\n console.warn(\n `Duplicate routes found with id: ${String(route.id)}`,\n this.routesById,\n route,\n )\n }\n throw new Error()\n }\n\n ;(this.routesById as any)[route.id] = route\n\n const children = routeConfig.children as RouteConfig[]\n\n route.childRoutes = children.length\n ? recurseRoutes(children, route)\n : undefined\n\n return route\n })\n }\n\n const routes = recurseRoutes([rootRouteConfig])\n\n return routes[0]!\n }\n\n #parseLocation = (previousLocation?: ParsedLocation): ParsedLocation => {\n let { pathname, search, hash, state } = this.history.location\n\n const parsedSearch = this.options.parseSearch(search)\n\n return {\n pathname: pathname,\n searchStr: search,\n search: replaceEqualDeep(previousLocation?.search, parsedSearch),\n hash: hash.split('#').reverse()[0] ?? '',\n href: `${pathname}${search}${hash}`,\n state: state as LocationState,\n key: state?.key || '__init__',\n }\n }\n\n #onFocus = () => {\n this.load()\n }\n\n #buildLocation = (dest: BuildNextOptions = {}): ParsedLocation => {\n const fromPathname = dest.fromCurrent\n ? this.store.state.latestLocation.pathname\n : dest.from ?? this.store.state.latestLocation.pathname\n\n let pathname = resolvePath(\n this.basepath ?? '/',\n fromPathname,\n `${dest.to ?? '.'}`,\n )\n\n const fromMatches = this.matchRoutes(\n this.store.state.latestLocation.pathname,\n {\n strictParseParams: true,\n },\n )\n\n const toMatches = this.matchRoutes(pathname)\n\n const prevParams = { ...last(fromMatches)?.params }\n\n let nextParams =\n (dest.params ?? true) === true\n ? prevParams\n : functionalUpdate(dest.params!, prevParams)\n\n if (nextParams) {\n toMatches\n .map((d) => d.route.options.stringifyParams)\n .filter(Boolean)\n .forEach((fn) => {\n Object.assign({}, nextParams!, fn!(nextParams!))\n })\n }\n\n pathname = interpolatePath(pathname, nextParams ?? {})\n\n // Pre filters first\n const preFilteredSearch = dest.__preSearchFilters?.length\n ? dest.__preSearchFilters?.reduce(\n (prev, next) => next(prev),\n this.store.state.latestLocation.search,\n )\n : this.store.state.latestLocation.search\n\n // Then the link/navigate function\n const destSearch =\n dest.search === true\n ? preFilteredSearch // Preserve resolvedFrom true\n : dest.search\n ? functionalUpdate(dest.search, preFilteredSearch) ?? {} // Updater\n : dest.__preSearchFilters?.length\n ? preFilteredSearch // Preserve resolvedFrom filters\n : {}\n\n // Then post filters\n const postFilteredSearch = dest.__postSearchFilters?.length\n ? dest.__postSearchFilters.reduce((prev, next) => next(prev), destSearch)\n : destSearch\n\n const search = replaceEqualDeep(\n this.store.state.latestLocation.search,\n postFilteredSearch,\n )\n\n const searchStr = this.options.stringifySearch(search)\n let hash =\n dest.hash === true\n ? this.store.state.latestLocation.hash\n : functionalUpdate(dest.hash!, this.store.state.latestLocation.hash)\n hash = hash ? `#${hash}` : ''\n\n return {\n pathname,\n search,\n searchStr,\n state: this.store.state.latestLocation.state,\n hash,\n href: `${pathname}${searchStr}${hash}`,\n key: dest.key,\n }\n }\n\n #commitLocation = (location: BuildNextOptions & { replace?: boolean }) => {\n const next = this.buildNext(location)\n const id = '' + Date.now() + Math.random()\n\n if (this.navigateTimeout) clearTimeout(this.navigateTimeout)\n\n let nextAction: 'push' | 'replace' = 'replace'\n\n if (!location.replace) {\n nextAction = 'push'\n }\n\n const isSameUrl = this.store.state.latestLocation.href === next.href\n\n if (isSameUrl && !next.key) {\n nextAction = 'replace'\n }\n\n const href = `${next.pathname}${next.searchStr}${\n next.hash ? `#${next.hash}` : ''\n }`\n\n this.history[nextAction === 'push' ? 'push' : 'replace'](href, {\n id,\n ...next.state,\n })\n\n this.load(this.#parseLocation(this.store.state.latestLocation))\n\n return (this.navigationPromise = new Promise((resolve) => {\n const previousNavigationResolve = this.resolveNavigation\n\n this.resolveNavigation = () => {\n previousNavigationResolve()\n resolve()\n }\n }))\n }\n}\n\n// Detect if we're in the DOM\nconst isServer = typeof window === 'undefined' || !window.document.createElement\n\nfunction getInitialRouterState(): RouterStore {\n return {\n status: 'idle',\n latestLocation: null!,\n currentLocation: null!,\n currentMatches: [],\n loaders: {},\n lastUpdated: Date.now(),\n matchCache: {},\n get isFetching() {\n return (\n this.status === 'loading' ||\n this.currentMatches.some((d) => d.store.state.isFetching)\n )\n },\n get isPreloading() {\n return Object.values(this.matchCache).some(\n (d) =>\n d.match.store.state.isFetching &&\n !this.currentMatches.find((dd) => dd.id === d.match.id),\n )\n },\n }\n}\n\nfunction isCtrlEvent(e: MouseEvent) {\n return !!(e.metaKey || e.altKey || e.ctrlKey || e.shiftKey)\n}\n\nfunction linkMatches(matches: RouteMatch<any, any>[]) {\n matches.forEach((match, index) => {\n const parent = matches[index - 1]\n\n if (parent) {\n match.__setParentMatch(parent)\n }\n })\n}\n"],"names":["defaultFetchServerDataFn","router","routeMatch","next","buildNext","to","search","d","__data","matchId","id","res","fetch","href","method","signal","abortController","ok","json","Error","Router","startedLoadingAt","Date","now","resolveNavigation","constructor","options","defaultLoaderGcMaxAge","defaultLoaderMaxAge","defaultPreloadMaxAge","defaultPreloadDelay","context","undefined","stringifySearch","defaultStringifySearch","parseSearch","defaultParseSearch","fetchServerDataFn","history","createBrowserHistory","store","createStore","getInitialRouterState","basepath","update","createRouter","reset","setState","s","Object","assign","mount","isServer","state","currentMatches","length","load","unsubHistory","listen","latestLocation","visibilityChangeEvent","focusEvent","window","addEventListener","removeEventListener","opts","currentLocation","routeConfig","trimPath","routesById","routeTree","matches","matchRoutes","pathname","__preSearchFilters","map","match","route","preSearchFilters","flat","filter","Boolean","__postSearchFilters","postSearchFilters","cancelMatches","pendingMatches","forEach","cancel","startedAt","batch","strictParseParams","status","pendingLocation","loadMatches","err","console","warn","invariant","navigationPromise","previousMatches","exiting","staying","find","dd","push","entering","__onExit","params","routeSearch","isFetching","error","gc","Math","max","loaderGcMaxAge","loaderMaxAge","matchCache","Infinity","Number","MAX_SAFE_INTEGER","onTransition","onLoaded","onRouteChange","cleanMatchCache","keys","entry","getRoute","loadRoute","navigateOpts","preloadRoute","loaderOpts","preload","maxAge","gcMaxAge","defaultPreloadGcMaxAge","existingMatches","recurse","routes","parentMatch","last","filteredRoutes","filterRoutes","foundRoutes","findMatchInRoutes","parentRoutes","some","path","childRoutes","fuzzy","matchParams","matchPathname","fullPath","caseSensitive","parsedParams","parseParams","foundRoute","interpolatedPath","interpolatePath","RouteMatch","joinPaths","linkMatches","resolvedMatches","__validate","Promise","all","beforeLoad","onLoadError","matchPromises","index","prevMatch","__loadPromise","loadMatchData","useServerData","loader","invalidateRoute","unloadedMatchIds","allSettled","includes","invalidate","reload","navigate","fromCurrent","replace","resolvePath","from","cleanPath","hash","toString","String","fromString","isExternal","URL","e","matchRoute","location","pending","buildLink","target","activeOptions","preloadMaxAge","userPreloadMaxAge","preloadGcMaxAge","userPreloadGcMaxAge","preloadDelay","userPreloadDelay","disabled","type","nextOpts","defaultPreload","pathIsEqual","currentPathSplit","split","nextPathSplit","pathIsFuzzyEqual","every","i","hashIsEqual","pathTest","exact","hashTest","includeHash","isActive","handleClick","isCtrlEvent","defaultPrevented","button","preventDefault","handleFocus","catch","handleEnter","preloadTimeout","setTimeout","handleLeave","clearTimeout","dehydrate","pick","hydrate","dehydratedRouter","dehydratedMatch","getLoader","loaders","loaderContext","loaderState","loadedAt","current","latest","rootRouteConfig","recurseRoutes","routeConfigs","parent","routeOptions","Route","existingRoute","process","env","NODE_ENV","children","previousLocation","parsedSearch","searchStr","replaceEqualDeep","reverse","key","dest","fromPathname","fromMatches","toMatches","prevParams","nextParams","functionalUpdate","stringifyParams","fn","preFilteredSearch","reduce","prev","destSearch","postFilteredSearch","random","navigateTimeout","nextAction","isSameUrl","resolve","previousNavigationResolve","document","createElement","lastUpdated","isPreloading","values","metaKey","altKey","ctrlKey","shiftKey","__setParentMatch"],"mappings":"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"}
|
|
@@ -12,7 +12,6 @@
|
|
|
12
12
|
|
|
13
13
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
14
14
|
|
|
15
|
-
var _rollupPluginBabelHelpers = require('../../../_virtual/_rollupPluginBabelHelpers.js');
|
|
16
15
|
var qss = require('./qss.js');
|
|
17
16
|
|
|
18
17
|
const defaultParseSearch = parseSearchWith(JSON.parse);
|
|
@@ -22,44 +21,43 @@ function parseSearchWith(parser) {
|
|
|
22
21
|
if (searchStr.substring(0, 1) === '?') {
|
|
23
22
|
searchStr = searchStr.substring(1);
|
|
24
23
|
}
|
|
24
|
+
let query = qss.decode(searchStr);
|
|
25
25
|
|
|
26
|
-
|
|
27
|
-
|
|
26
|
+
// Try to parse any query params that might be json
|
|
28
27
|
for (let key in query) {
|
|
29
28
|
const value = query[key];
|
|
30
|
-
|
|
31
29
|
if (typeof value === 'string') {
|
|
32
30
|
try {
|
|
33
31
|
query[key] = parser(value);
|
|
34
|
-
} catch (err) {
|
|
32
|
+
} catch (err) {
|
|
33
|
+
//
|
|
35
34
|
}
|
|
36
35
|
}
|
|
37
36
|
}
|
|
38
|
-
|
|
39
37
|
return query;
|
|
40
38
|
};
|
|
41
39
|
}
|
|
42
40
|
function stringifySearchWith(stringify) {
|
|
43
41
|
return search => {
|
|
44
|
-
search =
|
|
45
|
-
|
|
42
|
+
search = {
|
|
43
|
+
...search
|
|
44
|
+
};
|
|
46
45
|
if (search) {
|
|
47
46
|
Object.keys(search).forEach(key => {
|
|
48
47
|
const val = search[key];
|
|
49
|
-
|
|
50
48
|
if (typeof val === 'undefined' || val === undefined) {
|
|
51
49
|
delete search[key];
|
|
52
50
|
} else if (val && typeof val === 'object' && val !== null) {
|
|
53
51
|
try {
|
|
54
52
|
search[key] = stringify(val);
|
|
55
|
-
} catch (err) {
|
|
53
|
+
} catch (err) {
|
|
54
|
+
// silent
|
|
56
55
|
}
|
|
57
56
|
}
|
|
58
57
|
});
|
|
59
58
|
}
|
|
60
|
-
|
|
61
59
|
const searchStr = qss.encode(search).toString();
|
|
62
|
-
return searchStr ?
|
|
60
|
+
return searchStr ? `?${searchStr}` : '';
|
|
63
61
|
};
|
|
64
62
|
}
|
|
65
63
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"searchParams.js","sources":["../../src/searchParams.ts"],"sourcesContent":["import { decode, encode } from './qss'\nimport { AnySearchSchema } from './routeConfig'\n\nexport const defaultParseSearch = parseSearchWith(JSON.parse)\nexport const defaultStringifySearch = stringifySearchWith(JSON.stringify)\n\nexport function parseSearchWith(parser: (str: string) => any) {\n return (searchStr: string): AnySearchSchema => {\n if (searchStr.substring(0, 1) === '?') {\n searchStr = searchStr.substring(1)\n }\n\n let query: Record<string, unknown> = decode(searchStr)\n\n // Try to parse any query params that might be json\n for (let key in query) {\n const value = query[key]\n if (typeof value === 'string') {\n try {\n query[key] = parser(value)\n } catch (err) {\n //\n }\n }\n }\n\n return query\n }\n}\n\nexport function stringifySearchWith(stringify: (search: any) => string) {\n return (search: Record<string, any>) => {\n search = { ...search }\n\n if (search) {\n Object.keys(search).forEach((key) => {\n const val = search[key]\n if (typeof val === 'undefined' || val === undefined) {\n delete search[key]\n } else if (val && typeof val === 'object' && val !== null) {\n try {\n search[key] = stringify(val)\n } catch (err) {\n // silent\n }\n }\n })\n }\n\n const searchStr = encode(search as Record<string, string>).toString()\n\n return searchStr ? `?${searchStr}` : ''\n }\n}\n"],"names":["defaultParseSearch","parseSearchWith","JSON","parse","defaultStringifySearch","stringifySearchWith","stringify","parser","searchStr","substring","query","decode","key","value","err","search","Object","keys","forEach","val","undefined","encode","toString"],"mappings":";;;;;;;;;;;;;;;;AAGO,MAAMA,kBAAkB,GAAGC,eAAe,CAACC,IAAI,CAACC,KAAK,EAAC;AACtD,MAAMC,sBAAsB,GAAGC,mBAAmB,CAACH,IAAI,CAACI,SAAS,EAAC;AAElE,SAASL,eAAe,CAACM,MAA4B,EAAE;AAC5D,EAAA,OAAQC,SAAiB,IAAsB;IAC7C,IAAIA,SAAS,CAACC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,GAAG,EAAE;AACrCD,MAAAA,SAAS,GAAGA,SAAS,CAACC,SAAS,CAAC,CAAC,CAAC,CAAA;AACpC,KAAA;AAEA,IAAA,IAAIC,KAA8B,GAAGC,UAAM,CAACH,SAAS,CAAC,CAAA;;AAEtD;AACA,IAAA,KAAK,IAAII,GAAG,IAAIF,KAAK,EAAE;AACrB,MAAA,MAAMG,KAAK,GAAGH,KAAK,CAACE,GAAG,CAAC,CAAA;AACxB,MAAA,IAAI,OAAOC,KAAK,KAAK,QAAQ,EAAE;QAC7B,IAAI;AACFH,UAAAA,KAAK,CAACE,GAAG,CAAC,GAAGL,MAAM,CAACM,KAAK,CAAC,CAAA;SAC3B,CAAC,OAAOC,GAAG,EAAE;AACZ;AAAA,SAAA;AAEJ,OAAA;AACF,KAAA;AAEA,IAAA,OAAOJ,KAAK,CAAA;GACb,CAAA;AACH,CAAA;AAEO,SAASL,mBAAmB,CAACC,SAAkC,EAAE;AACtE,EAAA,OAAQS,MAA2B,IAAK;AACtCA,IAAAA,MAAM,GAAG;MAAE,GAAGA,MAAAA;KAAQ,CAAA;AAEtB,IAAA,IAAIA,MAAM,EAAE;MACVC,MAAM,CAACC,IAAI,CAACF,MAAM,CAAC,CAACG,OAAO,CAAEN,GAAG,IAAK;AACnC,QAAA,MAAMO,GAAG,GAAGJ,MAAM,CAACH,GAAG,CAAC,CAAA;QACvB,IAAI,OAAOO,GAAG,KAAK,WAAW,IAAIA,GAAG,KAAKC,SAAS,EAAE;UACnD,OAAOL,MAAM,CAACH,GAAG,CAAC,CAAA;AACpB,SAAC,MAAM,IAAIO,GAAG,IAAI,OAAOA,GAAG,KAAK,QAAQ,IAAIA,GAAG,KAAK,IAAI,EAAE;UACzD,IAAI;AACFJ,YAAAA,MAAM,CAACH,GAAG,CAAC,GAAGN,SAAS,CAACa,GAAG,CAAC,CAAA;WAC7B,CAAC,OAAOL,GAAG,EAAE;AACZ;AAAA,WAAA;AAEJ,SAAA;AACF,OAAC,CAAC,CAAA;AACJ,KAAA;IAEA,MAAMN,SAAS,GAAGa,UAAM,CAACN,MAAM,CAA2B,CAACO,QAAQ,EAAE,CAAA;AAErE,IAAA,OAAOd,SAAS,GAAI,CAAA,CAAA,EAAGA,SAAU,CAAA,CAAC,GAAG,EAAE,CAAA;GACxC,CAAA;AACH;;;;;;;"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* router-core
|
|
3
|
+
*
|
|
4
|
+
* Copyright (c) TanStack
|
|
5
|
+
*
|
|
6
|
+
* This source code is licensed under the MIT license found in the
|
|
7
|
+
* LICENSE.md file in the root directory of this source tree.
|
|
8
|
+
*
|
|
9
|
+
* @license MIT
|
|
10
|
+
*/
|
|
11
|
+
'use strict';
|
|
12
|
+
|
|
13
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
14
|
+
|
|
15
|
+
var immer = require('immer');
|
|
16
|
+
|
|
17
|
+
immer.setAutoFreeze(false);
|
|
18
|
+
let queue = [];
|
|
19
|
+
let batching = false;
|
|
20
|
+
function flush() {
|
|
21
|
+
if (batching) return;
|
|
22
|
+
queue.forEach(cb => cb());
|
|
23
|
+
queue = [];
|
|
24
|
+
}
|
|
25
|
+
function createStore(initialState, debug) {
|
|
26
|
+
const listeners = new Set();
|
|
27
|
+
const store = {
|
|
28
|
+
state: initialState,
|
|
29
|
+
subscribe: listener => {
|
|
30
|
+
listeners.add(listener);
|
|
31
|
+
return () => listeners.delete(listener);
|
|
32
|
+
},
|
|
33
|
+
setState: updater => {
|
|
34
|
+
const previous = store.state;
|
|
35
|
+
store.state = immer.produce(d => {
|
|
36
|
+
updater(d);
|
|
37
|
+
})(previous);
|
|
38
|
+
if (debug) console.log(store.state);
|
|
39
|
+
queue.push(() => listeners.forEach(listener => listener(store.state, previous)));
|
|
40
|
+
flush();
|
|
41
|
+
}
|
|
42
|
+
};
|
|
43
|
+
return store;
|
|
44
|
+
}
|
|
45
|
+
function batch(cb) {
|
|
46
|
+
batching = true;
|
|
47
|
+
cb();
|
|
48
|
+
batching = false;
|
|
49
|
+
flush();
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
exports.batch = batch;
|
|
53
|
+
exports.createStore = createStore;
|
|
54
|
+
//# sourceMappingURL=store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"store.js","sources":["../../src/store.ts"],"sourcesContent":["import { produce, setAutoFreeze } from 'immer'\n\nsetAutoFreeze(false)\n\nexport type Store<TState> = {\n state: TState\n subscribe: (listener: (next: TState, prev: TState) => void) => () => void\n setState: (updater: (cb: TState) => void) => void\n}\n\nlet queue: ((...args: any[]) => void)[] = []\nlet batching = false\n\nfunction flush() {\n if (batching) return\n queue.forEach((cb) => cb())\n queue = []\n}\n\nexport function createStore<TState>(initialState: TState, debug?: boolean) {\n const listeners = new Set<(next: TState, prev: TState) => void>()\n\n const store: Store<TState> = {\n state: initialState,\n subscribe: (listener) => {\n listeners.add(listener)\n return () => listeners.delete(listener)\n },\n setState: (updater) => {\n const previous = store.state\n store.state = produce((d) => {\n updater(d)\n })(previous)\n\n if (debug) console.log(store.state)\n\n queue.push(() =>\n listeners.forEach((listener) => listener(store.state, previous)),\n )\n flush()\n },\n }\n\n return store\n}\n\nexport function batch(cb: () => void) {\n batching = true\n cb()\n batching = false\n flush()\n}\n"],"names":["setAutoFreeze","queue","batching","flush","forEach","cb","createStore","initialState","debug","listeners","Set","store","state","subscribe","listener","add","delete","setState","updater","previous","produce","d","console","log","push","batch"],"mappings":";;;;;;;;;;;;;;;;AAEAA,mBAAa,CAAC,KAAK,CAAC,CAAA;AAQpB,IAAIC,KAAmC,GAAG,EAAE,CAAA;AAC5C,IAAIC,QAAQ,GAAG,KAAK,CAAA;AAEpB,SAASC,KAAK,GAAG;AACf,EAAA,IAAID,QAAQ,EAAE,OAAA;AACdD,EAAAA,KAAK,CAACG,OAAO,CAAEC,EAAE,IAAKA,EAAE,EAAE,CAAC,CAAA;AAC3BJ,EAAAA,KAAK,GAAG,EAAE,CAAA;AACZ,CAAA;AAEO,SAASK,WAAW,CAASC,YAAoB,EAAEC,KAAe,EAAE;AACzE,EAAA,MAAMC,SAAS,GAAG,IAAIC,GAAG,EAAwC,CAAA;AAEjE,EAAA,MAAMC,KAAoB,GAAG;AAC3BC,IAAAA,KAAK,EAAEL,YAAY;IACnBM,SAAS,EAAGC,QAAQ,IAAK;AACvBL,MAAAA,SAAS,CAACM,GAAG,CAACD,QAAQ,CAAC,CAAA;AACvB,MAAA,OAAO,MAAML,SAAS,CAACO,MAAM,CAACF,QAAQ,CAAC,CAAA;KACxC;IACDG,QAAQ,EAAGC,OAAO,IAAK;AACrB,MAAA,MAAMC,QAAQ,GAAGR,KAAK,CAACC,KAAK,CAAA;AAC5BD,MAAAA,KAAK,CAACC,KAAK,GAAGQ,aAAO,CAAEC,CAAC,IAAK;QAC3BH,OAAO,CAACG,CAAC,CAAC,CAAA;OACX,CAAC,CAACF,QAAQ,CAAC,CAAA;MAEZ,IAAIX,KAAK,EAAEc,OAAO,CAACC,GAAG,CAACZ,KAAK,CAACC,KAAK,CAAC,CAAA;AAEnCX,MAAAA,KAAK,CAACuB,IAAI,CAAC,MACTf,SAAS,CAACL,OAAO,CAAEU,QAAQ,IAAKA,QAAQ,CAACH,KAAK,CAACC,KAAK,EAAEO,QAAQ,CAAC,CAAC,CACjE,CAAA;AACDhB,MAAAA,KAAK,EAAE,CAAA;AACT,KAAA;GACD,CAAA;AAED,EAAA,OAAOQ,KAAK,CAAA;AACd,CAAA;AAEO,SAASc,KAAK,CAACpB,EAAc,EAAE;AACpCH,EAAAA,QAAQ,GAAG,IAAI,CAAA;AACfG,EAAAA,EAAE,EAAE,CAAA;AACJH,EAAAA,QAAQ,GAAG,KAAK,CAAA;AAChBC,EAAAA,KAAK,EAAE,CAAA;AACT;;;;;"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* router-core
|
|
3
|
+
*
|
|
4
|
+
* Copyright (c) TanStack
|
|
5
|
+
*
|
|
6
|
+
* This source code is licensed under the MIT license found in the
|
|
7
|
+
* LICENSE.md file in the root directory of this source tree.
|
|
8
|
+
*
|
|
9
|
+
* @license MIT
|
|
10
|
+
*/
|
|
11
|
+
'use strict';
|
|
12
|
+
|
|
13
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
14
|
+
|
|
15
|
+
function last(arr) {
|
|
16
|
+
return arr[arr.length - 1];
|
|
17
|
+
}
|
|
18
|
+
function warning(cond, message) {
|
|
19
|
+
if (cond) {
|
|
20
|
+
if (typeof console !== 'undefined') console.warn(message);
|
|
21
|
+
try {
|
|
22
|
+
throw new Error(message);
|
|
23
|
+
} catch {}
|
|
24
|
+
}
|
|
25
|
+
return true;
|
|
26
|
+
}
|
|
27
|
+
function isFunction(d) {
|
|
28
|
+
return typeof d === 'function';
|
|
29
|
+
}
|
|
30
|
+
function functionalUpdate(updater, previous) {
|
|
31
|
+
if (isFunction(updater)) {
|
|
32
|
+
return updater(previous);
|
|
33
|
+
}
|
|
34
|
+
return updater;
|
|
35
|
+
}
|
|
36
|
+
function pick(parent, keys) {
|
|
37
|
+
return keys.reduce((obj, key) => {
|
|
38
|
+
obj[key] = parent[key];
|
|
39
|
+
return obj;
|
|
40
|
+
}, {});
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
exports.functionalUpdate = functionalUpdate;
|
|
44
|
+
exports.last = last;
|
|
45
|
+
exports.pick = pick;
|
|
46
|
+
exports.warning = warning;
|
|
47
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sources":["../../src/utils.ts"],"sourcesContent":["export type NoInfer<T> = [T][T extends any ? 0 : never]\nexport type IsAny<T, Y, N> = 1 extends 0 & T ? Y : N\nexport type IsAnyBoolean<T> = 1 extends 0 & T ? true : false\nexport type IsKnown<T, Y, N> = unknown extends T ? N : Y\nexport type PickAsRequired<T, K extends keyof T> = Omit<T, K> &\n Required<Pick<T, K>>\nexport type PickAsPartial<T, K extends keyof T> = Omit<T, K> &\n Partial<Pick<T, K>>\nexport type PickUnsafe<T, K> = K extends keyof T ? Pick<T, K> : never\nexport type PickExtra<T, K> = Expand<{\n [TKey in keyof K as string extends TKey\n ? never\n : TKey extends keyof T\n ? never\n : TKey]: K[TKey]\n}>\nexport type PickRequired<T> = {\n [K in keyof T as undefined extends T[K] ? never : K]: T[K]\n}\n\nexport type Expand<T> = T extends object\n ? T extends infer O\n ? { [K in keyof O]: O[K] }\n : never\n : T\n\nexport type UnionToIntersection<U> = (\n U extends any ? (k: U) => void : never\n) extends (k: infer I) => any\n ? I\n : never\n\nexport type Values<O> = O[ValueKeys<O>]\nexport type ValueKeys<O> = Extract<keyof O, PropertyKey>\n\nexport type DeepAwaited<T> = T extends Promise<infer A>\n ? DeepAwaited<A>\n : T extends Record<infer A, Promise<infer B>>\n ? { [K in A]: DeepAwaited<B> }\n : T\n\nexport type PathParamMask<TRoutePath extends string> =\n TRoutePath extends `${infer L}/$${infer C}/${infer R}`\n ? PathParamMask<`${L}/${string}/${R}`>\n : TRoutePath extends `${infer L}/$${infer C}`\n ? PathParamMask<`${L}/${string}`>\n : TRoutePath\n\nexport type Timeout = ReturnType<typeof setTimeout>\n\nexport type Updater<TPrevious, TResult = TPrevious> =\n | TResult\n | ((prev?: TPrevious) => TResult)\n\nexport type PickExtract<T, U> = {\n [K in keyof T as T[K] extends U ? K : never]: T[K]\n}\n\nexport type PickExclude<T, U> = {\n [K in keyof T as T[K] extends U ? never : K]: T[K]\n}\n\nexport function last<T>(arr: T[]) {\n return arr[arr.length - 1]\n}\n\nexport function warning(cond: any, message: string): cond is true {\n if (cond) {\n if (typeof console !== 'undefined') console.warn(message)\n\n try {\n throw new Error(message)\n } catch {}\n }\n\n return true\n}\n\nfunction isFunction(d: any): d is Function {\n return typeof d === 'function'\n}\n\nexport function functionalUpdate<TResult>(\n updater: Updater<TResult>,\n previous: TResult,\n) {\n if (isFunction(updater)) {\n return updater(previous as TResult)\n }\n\n return updater\n}\n\nexport function pick<T, K extends keyof T>(parent: T, keys: K[]): Pick<T, K> {\n return keys.reduce((obj: any, key: K) => {\n obj[key] = parent[key]\n return obj\n }, {} as any)\n}\n"],"names":["last","arr","length","warning","cond","message","console","warn","Error","isFunction","d","functionalUpdate","updater","previous","pick","parent","keys","reduce","obj","key"],"mappings":";;;;;;;;;;;;;;AA8DO,SAASA,IAAI,CAAIC,GAAQ,EAAE;AAChC,EAAA,OAAOA,GAAG,CAACA,GAAG,CAACC,MAAM,GAAG,CAAC,CAAC,CAAA;AAC5B,CAAA;AAEO,SAASC,OAAO,CAACC,IAAS,EAAEC,OAAe,EAAgB;AAChE,EAAA,IAAID,IAAI,EAAE;IACR,IAAI,OAAOE,OAAO,KAAK,WAAW,EAAEA,OAAO,CAACC,IAAI,CAACF,OAAO,CAAC,CAAA;IAEzD,IAAI;AACF,MAAA,MAAM,IAAIG,KAAK,CAACH,OAAO,CAAC,CAAA;KACzB,CAAC,MAAM,EAAC;AACX,GAAA;AAEA,EAAA,OAAO,IAAI,CAAA;AACb,CAAA;AAEA,SAASI,UAAU,CAACC,CAAM,EAAiB;EACzC,OAAO,OAAOA,CAAC,KAAK,UAAU,CAAA;AAChC,CAAA;AAEO,SAASC,gBAAgB,CAC9BC,OAAyB,EACzBC,QAAiB,EACjB;AACA,EAAA,IAAIJ,UAAU,CAACG,OAAO,CAAC,EAAE;IACvB,OAAOA,OAAO,CAACC,QAAQ,CAAY,CAAA;AACrC,GAAA;AAEA,EAAA,OAAOD,OAAO,CAAA;AAChB,CAAA;AAEO,SAASE,IAAI,CAAuBC,MAAS,EAAEC,IAAS,EAAc;EAC3E,OAAOA,IAAI,CAACC,MAAM,CAAC,CAACC,GAAQ,EAAEC,GAAM,KAAK;AACvCD,IAAAA,GAAG,CAACC,GAAG,CAAC,GAAGJ,MAAM,CAACI,GAAG,CAAC,CAAA;AACtB,IAAA,OAAOD,GAAG,CAAA;GACX,EAAE,EAAE,CAAQ,CAAA;AACf;;;;;;;"}
|