@tanstack/router-core 0.0.1-beta.50 → 0.0.1-beta.51

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.
@@ -19,7 +19,7 @@ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'defau
19
19
 
20
20
  var invariant__default = /*#__PURE__*/_interopDefaultLegacy(invariant);
21
21
 
22
- // createRouterAction is a constrained identify function that takes options: key, action, onSuccess, onError, onSettled, etc
22
+ // RouterAction is a constrained identify function that takes options: key, action, onSuccess, onError, onSettled, etc
23
23
  function createAction(options) {
24
24
  const store$1 = store.createStore({
25
25
  submissions: []
@@ -1 +1 @@
1
- {"version":3,"file":"actions.js","sources":["../../src/actions.ts"],"sourcesContent":["// createRouterAction is a constrained identify function that takes options: key, action, onSuccess, onError, onSettled, etc\n\nimport invariant from 'tiny-invariant'\nimport { batch, createStore, Store } from './store'\n\nexport interface ActionOptions<\n TKey extends string = string,\n TPayload = unknown,\n TResponse = unknown,\n TError = Error,\n> {\n key?: TKey\n action: (payload: TPayload) => TResponse | Promise<TResponse>\n onLatestSuccess?: ActionCallback<TPayload, TResponse, TError>\n onEachSuccess?: ActionCallback<TPayload, TResponse, TError>\n onLatestError?: ActionCallback<TPayload, TResponse, TError>\n onEachError?: ActionCallback<TPayload, TResponse, TError>\n onLatestSettled?: ActionCallback<TPayload, TResponse, TError>\n onEachSettled?: ActionCallback<TPayload, TResponse, TError>\n maxSubmissions?: number\n debug?: boolean\n}\n\ntype ActionCallback<TPayload, TResponse, TError> = (\n submission: ActionSubmission<TPayload, TResponse, TError>,\n) => void | Promise<void>\n\nexport interface Action<\n TKey extends string = string,\n TPayload = unknown,\n TResponse = unknown,\n TError = Error,\n> {\n options: ActionOptions<TKey, TPayload, TResponse, TError>\n submit: (payload?: TPayload) => Promise<TResponse>\n reset: () => void\n store: Store<ActionStore<TPayload, TResponse, TError>>\n}\n\nexport interface ActionStore<\n TPayload = unknown,\n TResponse = unknown,\n TError = Error,\n> {\n submissions: ActionSubmission<TPayload, TResponse, TError>[]\n}\n\nexport type ActionFn<TActionPayload = unknown, TActionResponse = unknown> = (\n submission: TActionPayload,\n) => TActionResponse | Promise<TActionResponse>\n\nexport interface ActionSubmission<\n TPayload = unknown,\n TResponse = unknown,\n TError = Error,\n> {\n submittedAt: number\n status: 'idle' | 'pending' | 'success' | 'error'\n payload: TPayload\n response?: TResponse\n error?: TError\n isInvalid?: boolean\n invalidate: () => void\n getIsLatest: () => boolean\n}\n\nexport function createAction<TKey extends string, TPayload, TResponse, TError>(\n options: ActionOptions<TKey, TPayload, TResponse, TError>,\n): Action<TKey, TPayload, TResponse, TError> {\n const store = createStore<ActionStore<TPayload, TResponse, TError>>(\n {\n submissions: [],\n },\n options.debug,\n )\n\n return {\n options,\n store,\n reset: () => {\n store.setState((s) => {\n s.submissions = []\n })\n },\n submit: async (payload) => {\n const submission: ActionSubmission<TPayload, TResponse, TError> = {\n submittedAt: Date.now(),\n status: 'pending',\n payload: payload as TPayload,\n invalidate: () => {\n setSubmission((s) => {\n s.isInvalid = true\n })\n },\n getIsLatest: () =>\n store.state.submissions[store.state.submissions.length - 1]\n ?.submittedAt === submission.submittedAt,\n }\n\n const setSubmission = (\n updater: (\n submission: ActionSubmission<TPayload, TResponse, TError>,\n ) => void,\n ) => {\n store.setState((s) => {\n const a = s.submissions.find(\n (d) => d.submittedAt === submission.submittedAt,\n )\n\n invariant(a, 'Could not find submission in store')\n\n updater(a)\n })\n }\n\n store.setState((s) => {\n s.submissions.push(submission)\n s.submissions.reverse()\n s.submissions = s.submissions.slice(0, options.maxSubmissions ?? 10)\n s.submissions.reverse()\n })\n\n const after = async () => {\n options.onEachSettled?.(submission)\n if (submission.getIsLatest())\n await options.onLatestSettled?.(submission)\n }\n\n try {\n const res = await options.action?.(submission.payload)\n setSubmission((s) => {\n s.response = res\n })\n await options.onEachSuccess?.(submission)\n if (submission.getIsLatest())\n await options.onLatestSuccess?.(submission)\n await after()\n setSubmission((s) => {\n s.status = 'success'\n })\n return res\n } catch (err: any) {\n console.error(err)\n setSubmission((s) => {\n s.error = err\n })\n await options.onEachError?.(submission)\n if (submission.getIsLatest()) await options.onLatestError?.(submission)\n await after()\n setSubmission((s) => {\n s.status = 'error'\n })\n throw err\n }\n },\n }\n}\n"],"names":["createAction","options","store","createStore","submissions","debug","reset","setState","s","submit","payload","submission","submittedAt","Date","now","status","invalidate","setSubmission","isInvalid","getIsLatest","state","length","updater","a","find","d","invariant","push","reverse","slice","maxSubmissions","after","onEachSettled","onLatestSettled","res","action","response","onEachSuccess","onLatestSuccess","err","console","error","onEachError","onLatestError"],"mappings":"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"}
1
+ {"version":3,"file":"actions.js","sources":["../../src/actions.ts"],"sourcesContent":["// RouterAction is a constrained identify function that takes options: key, action, onSuccess, onError, onSettled, etc\n\nimport invariant from 'tiny-invariant'\nimport { batch, createStore, Store } from './store'\n\nexport interface ActionOptions<\n TKey extends string = string,\n TPayload = unknown,\n TResponse = unknown,\n TError = Error,\n> {\n key?: TKey\n action: (payload: TPayload) => TResponse | Promise<TResponse>\n onLatestSuccess?: ActionCallback<TPayload, TResponse, TError>\n onEachSuccess?: ActionCallback<TPayload, TResponse, TError>\n onLatestError?: ActionCallback<TPayload, TResponse, TError>\n onEachError?: ActionCallback<TPayload, TResponse, TError>\n onLatestSettled?: ActionCallback<TPayload, TResponse, TError>\n onEachSettled?: ActionCallback<TPayload, TResponse, TError>\n maxSubmissions?: number\n debug?: boolean\n}\n\ntype ActionCallback<TPayload, TResponse, TError> = (\n submission: ActionSubmission<TPayload, TResponse, TError>,\n) => void | Promise<void>\n\nexport interface Action<\n TKey extends string = string,\n TPayload = unknown,\n TResponse = unknown,\n TError = Error,\n> {\n options: ActionOptions<TKey, TPayload, TResponse, TError>\n submit: (payload?: TPayload) => Promise<TResponse>\n reset: () => void\n store: Store<ActionStore<TPayload, TResponse, TError>>\n}\n\nexport interface ActionStore<\n TPayload = unknown,\n TResponse = unknown,\n TError = Error,\n> {\n submissions: ActionSubmission<TPayload, TResponse, TError>[]\n}\n\nexport type ActionFn<TActionPayload = unknown, TActionResponse = unknown> = (\n submission: TActionPayload,\n) => TActionResponse | Promise<TActionResponse>\n\nexport interface ActionSubmission<\n TPayload = unknown,\n TResponse = unknown,\n TError = Error,\n> {\n submittedAt: number\n status: 'idle' | 'pending' | 'success' | 'error'\n payload: TPayload\n response?: TResponse\n error?: TError\n isInvalid?: boolean\n invalidate: () => void\n getIsLatest: () => boolean\n}\n\nexport function createAction<TKey extends string, TPayload, TResponse, TError>(\n options: ActionOptions<TKey, TPayload, TResponse, TError>,\n): Action<TKey, TPayload, TResponse, TError> {\n const store = createStore<ActionStore<TPayload, TResponse, TError>>(\n {\n submissions: [],\n },\n options.debug,\n )\n\n return {\n options,\n store,\n reset: () => {\n store.setState((s) => {\n s.submissions = []\n })\n },\n submit: async (payload) => {\n const submission: ActionSubmission<TPayload, TResponse, TError> = {\n submittedAt: Date.now(),\n status: 'pending',\n payload: payload as TPayload,\n invalidate: () => {\n setSubmission((s) => {\n s.isInvalid = true\n })\n },\n getIsLatest: () =>\n store.state.submissions[store.state.submissions.length - 1]\n ?.submittedAt === submission.submittedAt,\n }\n\n const setSubmission = (\n updater: (\n submission: ActionSubmission<TPayload, TResponse, TError>,\n ) => void,\n ) => {\n store.setState((s) => {\n const a = s.submissions.find(\n (d) => d.submittedAt === submission.submittedAt,\n )\n\n invariant(a, 'Could not find submission in store')\n\n updater(a)\n })\n }\n\n store.setState((s) => {\n s.submissions.push(submission)\n s.submissions.reverse()\n s.submissions = s.submissions.slice(0, options.maxSubmissions ?? 10)\n s.submissions.reverse()\n })\n\n const after = async () => {\n options.onEachSettled?.(submission)\n if (submission.getIsLatest())\n await options.onLatestSettled?.(submission)\n }\n\n try {\n const res = await options.action?.(submission.payload)\n setSubmission((s) => {\n s.response = res\n })\n await options.onEachSuccess?.(submission)\n if (submission.getIsLatest())\n await options.onLatestSuccess?.(submission)\n await after()\n setSubmission((s) => {\n s.status = 'success'\n })\n return res\n } catch (err: any) {\n console.error(err)\n setSubmission((s) => {\n s.error = err\n })\n await options.onEachError?.(submission)\n if (submission.getIsLatest()) await options.onLatestError?.(submission)\n await after()\n setSubmission((s) => {\n s.status = 'error'\n })\n throw err\n }\n },\n }\n}\n"],"names":["createAction","options","store","createStore","submissions","debug","reset","setState","s","submit","payload","submission","submittedAt","Date","now","status","invalidate","setSubmission","isInvalid","getIsLatest","state","length","updater","a","find","d","invariant","push","reverse","slice","maxSubmissions","after","onEachSettled","onLatestSettled","res","action","response","onEachSuccess","onLatestSuccess","err","console","error","onEachError","onLatestError"],"mappings":"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"}
@@ -25,7 +25,7 @@ class RouteMatch {
25
25
  Object.assign(this, {
26
26
  route,
27
27
  router,
28
- matchId: opts.matchId,
28
+ id: opts.id,
29
29
  pathname: opts.pathname,
30
30
  params: opts.params,
31
31
  store: store.createStore({
@@ -1 +1 @@
1
- {"version":3,"file":"routeMatch.js","sources":["../../src/routeMatch.ts"],"sourcesContent":["import { GetFrameworkGeneric } from './frameworks'\nimport { Route } from './route'\nimport {\n AnyAllRouteInfo,\n AnyRouteInfo,\n DefaultAllRouteInfo,\n RouteInfo,\n} from './routeInfo'\nimport { AnyRouter, Router } from './router'\nimport { batch, createStore, Store } from './store'\nimport { Expand } from './utils'\nimport { replaceEqualDeep } from './interop'\n\nexport interface RouteMatchStore<\n TAllRouteInfo extends AnyAllRouteInfo = DefaultAllRouteInfo,\n TRouteInfo extends AnyRouteInfo = RouteInfo,\n> {\n routeSearch: TRouteInfo['searchSchema']\n search: Expand<\n TAllRouteInfo['fullSearchSchema'] & TRouteInfo['fullSearchSchema']\n >\n status: 'idle' | 'loading' | 'success' | 'error'\n updatedAt?: number\n error?: unknown\n invalid: boolean\n loaderData: TRouteInfo['loaderData']\n routeLoaderData: TRouteInfo['routeLoaderData']\n isFetching: boolean\n invalidAt: number\n}\n\nconst componentTypes = [\n 'component',\n 'errorComponent',\n 'pendingComponent',\n] as const\n\nexport class RouteMatch<\n TAllRouteInfo extends AnyAllRouteInfo = DefaultAllRouteInfo,\n TRouteInfo extends AnyRouteInfo = RouteInfo,\n> {\n route!: Route<TAllRouteInfo, TRouteInfo>\n router!: Router<TAllRouteInfo['routeConfig'], TAllRouteInfo>\n store!: Store<RouteMatchStore<TAllRouteInfo, TRouteInfo>>\n id!: string\n pathname!: string\n params!: TRouteInfo['allParams']\n\n component: GetFrameworkGeneric<'Component'>\n errorComponent: GetFrameworkGeneric<'ErrorComponent'>\n pendingComponent: GetFrameworkGeneric<'Component'>\n abortController = new AbortController()\n #latestId = ''\n #resolve = () => {}\n onLoaderDataListeners = new Set<() => void>()\n parentMatch?: RouteMatch\n\n __loadPromise?: Promise<void>\n __onExit?:\n | void\n | ((matchContext: {\n params: TRouteInfo['allParams']\n search: TRouteInfo['fullSearchSchema']\n }) => void)\n\n constructor(\n router: AnyRouter,\n route: Route<TAllRouteInfo, TRouteInfo>,\n opts: {\n matchId: string\n params: TRouteInfo['allParams']\n pathname: string\n },\n ) {\n Object.assign(this, {\n route,\n router,\n matchId: opts.matchId,\n pathname: opts.pathname,\n params: opts.params,\n store: createStore<RouteMatchStore<TAllRouteInfo, TRouteInfo>>({\n routeSearch: {},\n search: {} as any,\n status: 'idle',\n routeLoaderData: {} as TRouteInfo['routeLoaderData'],\n loaderData: {} as TRouteInfo['loaderData'],\n isFetching: false,\n invalid: false,\n invalidAt: Infinity,\n }),\n })\n\n if (!this.__hasLoaders()) {\n this.store.setState((s) => (s.status = 'success'))\n }\n }\n\n #setLoaderData = (loaderData: TRouteInfo['routeLoaderData']) => {\n batch(() => {\n this.store.setState((s) => {\n s.routeLoaderData = loaderData\n })\n this.#updateLoaderData()\n })\n }\n\n cancel = () => {\n this.abortController?.abort()\n }\n\n load = async (\n loaderOpts?:\n | { preload: true; maxAge: number; gcMaxAge: number }\n | { preload?: false; maxAge?: never; gcMaxAge?: never },\n ): Promise<void> => {\n const now = Date.now()\n const minMaxAge = loaderOpts?.preload\n ? Math.max(loaderOpts?.maxAge, loaderOpts?.gcMaxAge)\n : 0\n\n // If this is a preload, add it to the preload cache\n if (loaderOpts?.preload && minMaxAge > 0) {\n // If the match is currently active, don't preload it\n if (\n this.router.store.state.currentMatches.find((d) => d.id === this.id)\n ) {\n return\n }\n\n this.router.store.setState((s) => {\n s.matchCache[this.id] = {\n gc: now + loaderOpts.gcMaxAge,\n match: this as RouteMatch<any, any>,\n }\n })\n }\n\n // If the match is invalid, errored or idle, trigger it to load\n if (\n (this.store.state.status === 'success' && this.getIsInvalid()) ||\n this.store.state.status === 'error' ||\n this.store.state.status === 'idle'\n ) {\n const maxAge = loaderOpts?.preload ? loaderOpts?.maxAge : undefined\n await this.fetch({ maxAge })\n }\n }\n\n fetch = async (opts?: {\n maxAge?: number\n }): Promise<TRouteInfo['routeLoaderData']> => {\n this.__loadPromise = new Promise(async (resolve) => {\n const loadId = '' + Date.now() + Math.random()\n this.#latestId = loadId\n\n const checkLatest = () =>\n loadId !== this.#latestId\n ? this.__loadPromise?.then(() => resolve())\n : undefined\n\n let latestPromise\n\n batch(() => {\n // If the match was in an error state, set it\n // to a loading state again. Otherwise, keep it\n // as loading or resolved\n if (this.store.state.status === 'idle') {\n this.store.setState((s) => (s.status = 'loading'))\n }\n\n // We started loading the route, so it's no longer invalid\n this.store.setState((s) => (s.invalid = false))\n })\n\n // We are now fetching, even if it's in the background of a\n // resolved state\n this.store.setState((s) => (s.isFetching = true))\n this.#resolve = resolve as () => void\n\n const componentsPromise = (async () => {\n // then run all component and data loaders in parallel\n // For each component type, potentially load it asynchronously\n\n await Promise.all(\n componentTypes.map(async (type) => {\n const component = this.route.options[type]\n\n if (this[type]?.preload) {\n this[type] = await this.router.options.loadComponent!(component)\n }\n }),\n )\n })()\n\n const dataPromise = Promise.resolve().then(async () => {\n try {\n if (this.route.options.loader) {\n const data = await this.router.loadMatchData(this)\n if ((latestPromise = checkLatest())) return latestPromise\n\n this.#setLoaderData(data)\n }\n\n this.store.setState((s) => {\n s.error = undefined\n s.status = 'success'\n s.updatedAt = Date.now()\n s.invalidAt =\n s.updatedAt +\n (opts?.maxAge ??\n this.route.options.loaderMaxAge ??\n this.router.options.defaultLoaderMaxAge ??\n 0)\n })\n\n return this.store.state.routeLoaderData\n } catch (err) {\n if ((latestPromise = checkLatest())) return latestPromise\n\n if (process.env.NODE_ENV !== 'production') {\n console.error(err)\n }\n\n this.store.setState((s) => {\n s.error = err\n s.status = 'error'\n s.updatedAt = Date.now()\n })\n\n throw err\n }\n })\n\n const after = async () => {\n if ((latestPromise = checkLatest())) return latestPromise\n this.store.setState((s) => (s.isFetching = false))\n this.#resolve()\n delete this.__loadPromise\n }\n\n try {\n await Promise.all([componentsPromise, dataPromise.catch(() => {})])\n after()\n } catch {\n after()\n }\n })\n\n return this.__loadPromise\n }\n invalidate = async () => {\n this.store.setState((s) => (s.invalid = true))\n if (this.router.store.state.currentMatches.find((d) => d.id === this.id)) {\n await this.load()\n }\n }\n __hasLoaders = () => {\n return !!(\n this.route.options.loader ||\n componentTypes.some((d) => this.route.options[d]?.preload)\n )\n }\n getIsInvalid = () => {\n const now = Date.now()\n return this.store.state.invalid || this.store.state.invalidAt < now\n }\n\n #updateLoaderData = () => {\n this.store.setState((s) => {\n s.loaderData = replaceEqualDeep(s.loaderData, {\n ...this.parentMatch?.store.state.loaderData,\n ...s.routeLoaderData,\n }) as TRouteInfo['loaderData']\n })\n this.onLoaderDataListeners.forEach((listener) => listener())\n }\n\n __setParentMatch = (parentMatch?: RouteMatch) => {\n if (!this.parentMatch && parentMatch) {\n this.parentMatch = parentMatch\n this.parentMatch.__onLoaderData(() => {\n this.#updateLoaderData()\n })\n }\n }\n\n __onLoaderData = (listener: () => void) => {\n this.onLoaderDataListeners.add(listener)\n // return () => this.onLoaderDataListeners.delete(listener)\n }\n\n __validate = () => {\n // Validate the search params and stabilize them\n const parentSearch =\n this.parentMatch?.store.state.search ??\n this.router.store.state.latestLocation.search\n\n try {\n const prevSearch = this.store.state.routeSearch\n\n const validator =\n typeof this.route.options.validateSearch === 'object'\n ? this.route.options.validateSearch.parse\n : this.route.options.validateSearch\n\n let nextSearch = validator?.(parentSearch) ?? {}\n\n batch(() => {\n // Invalidate route matches when search param stability changes\n if (prevSearch !== nextSearch) {\n this.store.setState((s) => (s.invalid = true))\n }\n\n this.store.setState((s) => {\n s.routeSearch = nextSearch\n s.search = {\n ...parentSearch,\n ...nextSearch,\n } as any\n })\n })\n\n componentTypes.map(async (type) => {\n const component = this.route.options[type]\n\n if (typeof this[type] !== 'function') {\n this[type] = component\n }\n })\n } catch (err: any) {\n console.error(err)\n const error = new (Error as any)('Invalid search params found', {\n cause: err,\n })\n error.code = 'INVALID_SEARCH_PARAMS'\n\n this.store.setState((s) => {\n s.status = 'error'\n s.error = error\n })\n\n // Do not proceed with loading the route\n return\n }\n }\n}\n"],"names":["componentTypes","RouteMatch","abortController","AbortController","onLoaderDataListeners","Set","constructor","router","route","opts","Object","assign","matchId","pathname","params","store","createStore","routeSearch","search","status","routeLoaderData","loaderData","isFetching","invalid","invalidAt","Infinity","__hasLoaders","setState","s","batch","cancel","abort","load","loaderOpts","now","Date","minMaxAge","preload","Math","max","maxAge","gcMaxAge","state","currentMatches","find","d","id","matchCache","gc","match","getIsInvalid","undefined","fetch","__loadPromise","Promise","resolve","loadId","random","checkLatest","then","latestPromise","componentsPromise","all","map","type","component","options","loadComponent","dataPromise","loader","data","loadMatchData","error","updatedAt","loaderMaxAge","defaultLoaderMaxAge","err","process","env","NODE_ENV","console","after","catch","invalidate","some","replaceEqualDeep","parentMatch","forEach","listener","__setParentMatch","__onLoaderData","add","__validate","parentSearch","latestLocation","prevSearch","validator","validateSearch","parse","nextSearch","Error","cause","code"],"mappings":"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"}
1
+ {"version":3,"file":"routeMatch.js","sources":["../../src/routeMatch.ts"],"sourcesContent":["import { GetFrameworkGeneric } from './frameworks'\nimport { Route } from './route'\nimport {\n AnyAllRouteInfo,\n AnyRouteInfo,\n DefaultAllRouteInfo,\n RouteInfo,\n} from './routeInfo'\nimport { AnyRouter, Router } from './router'\nimport { batch, createStore, Store } from './store'\nimport { Expand } from './utils'\nimport { replaceEqualDeep } from './interop'\n\nexport interface RouteMatchStore<\n TAllRouteInfo extends AnyAllRouteInfo = DefaultAllRouteInfo,\n TRouteInfo extends AnyRouteInfo = RouteInfo,\n> {\n routeSearch: TRouteInfo['searchSchema']\n search: Expand<\n TAllRouteInfo['fullSearchSchema'] & TRouteInfo['fullSearchSchema']\n >\n status: 'idle' | 'loading' | 'success' | 'error'\n updatedAt?: number\n error?: unknown\n invalid: boolean\n loaderData: TRouteInfo['loaderData']\n routeLoaderData: TRouteInfo['routeLoaderData']\n isFetching: boolean\n invalidAt: number\n}\n\nconst componentTypes = [\n 'component',\n 'errorComponent',\n 'pendingComponent',\n] as const\n\nexport class RouteMatch<\n TAllRouteInfo extends AnyAllRouteInfo = DefaultAllRouteInfo,\n TRouteInfo extends AnyRouteInfo = RouteInfo,\n> {\n route!: Route<TAllRouteInfo, TRouteInfo>\n router!: Router<TAllRouteInfo['routeConfig'], TAllRouteInfo>\n store!: Store<RouteMatchStore<TAllRouteInfo, TRouteInfo>>\n id!: string\n pathname!: string\n params!: TRouteInfo['allParams']\n\n component: GetFrameworkGeneric<'Component'>\n errorComponent: GetFrameworkGeneric<'ErrorComponent'>\n pendingComponent: GetFrameworkGeneric<'Component'>\n abortController = new AbortController()\n #latestId = ''\n #resolve = () => {}\n onLoaderDataListeners = new Set<() => void>()\n parentMatch?: RouteMatch\n\n __loadPromise?: Promise<void>\n __onExit?:\n | void\n | ((matchContext: {\n params: TRouteInfo['allParams']\n search: TRouteInfo['fullSearchSchema']\n }) => void)\n\n constructor(\n router: AnyRouter,\n route: Route<TAllRouteInfo, TRouteInfo>,\n opts: {\n id: string\n params: TRouteInfo['allParams']\n pathname: string\n },\n ) {\n Object.assign(this, {\n route,\n router,\n id: opts.id,\n pathname: opts.pathname,\n params: opts.params,\n store: createStore<RouteMatchStore<TAllRouteInfo, TRouteInfo>>({\n routeSearch: {},\n search: {} as any,\n status: 'idle',\n routeLoaderData: {} as TRouteInfo['routeLoaderData'],\n loaderData: {} as TRouteInfo['loaderData'],\n isFetching: false,\n invalid: false,\n invalidAt: Infinity,\n }),\n })\n\n if (!this.__hasLoaders()) {\n this.store.setState((s) => (s.status = 'success'))\n }\n }\n\n #setLoaderData = (loaderData: TRouteInfo['routeLoaderData']) => {\n batch(() => {\n this.store.setState((s) => {\n s.routeLoaderData = loaderData\n })\n this.#updateLoaderData()\n })\n }\n\n cancel = () => {\n this.abortController?.abort()\n }\n\n load = async (\n loaderOpts?:\n | { preload: true; maxAge: number; gcMaxAge: number }\n | { preload?: false; maxAge?: never; gcMaxAge?: never },\n ): Promise<void> => {\n const now = Date.now()\n const minMaxAge = loaderOpts?.preload\n ? Math.max(loaderOpts?.maxAge, loaderOpts?.gcMaxAge)\n : 0\n\n // If this is a preload, add it to the preload cache\n if (loaderOpts?.preload && minMaxAge > 0) {\n // If the match is currently active, don't preload it\n if (\n this.router.store.state.currentMatches.find((d) => d.id === this.id)\n ) {\n return\n }\n\n this.router.store.setState((s) => {\n s.matchCache[this.id] = {\n gc: now + loaderOpts.gcMaxAge,\n match: this as RouteMatch<any, any>,\n }\n })\n }\n\n // If the match is invalid, errored or idle, trigger it to load\n if (\n (this.store.state.status === 'success' && this.getIsInvalid()) ||\n this.store.state.status === 'error' ||\n this.store.state.status === 'idle'\n ) {\n const maxAge = loaderOpts?.preload ? loaderOpts?.maxAge : undefined\n await this.fetch({ maxAge })\n }\n }\n\n fetch = async (opts?: {\n maxAge?: number\n }): Promise<TRouteInfo['routeLoaderData']> => {\n this.__loadPromise = new Promise(async (resolve) => {\n const loadId = '' + Date.now() + Math.random()\n this.#latestId = loadId\n\n const checkLatest = () =>\n loadId !== this.#latestId\n ? this.__loadPromise?.then(() => resolve())\n : undefined\n\n let latestPromise\n\n batch(() => {\n // If the match was in an error state, set it\n // to a loading state again. Otherwise, keep it\n // as loading or resolved\n if (this.store.state.status === 'idle') {\n this.store.setState((s) => (s.status = 'loading'))\n }\n\n // We started loading the route, so it's no longer invalid\n this.store.setState((s) => (s.invalid = false))\n })\n\n // We are now fetching, even if it's in the background of a\n // resolved state\n this.store.setState((s) => (s.isFetching = true))\n this.#resolve = resolve as () => void\n\n const componentsPromise = (async () => {\n // then run all component and data loaders in parallel\n // For each component type, potentially load it asynchronously\n\n await Promise.all(\n componentTypes.map(async (type) => {\n const component = this.route.options[type]\n\n if (this[type]?.preload) {\n this[type] = await this.router.options.loadComponent!(component)\n }\n }),\n )\n })()\n\n const dataPromise = Promise.resolve().then(async () => {\n try {\n if (this.route.options.loader) {\n const data = await this.router.loadMatchData(this)\n if ((latestPromise = checkLatest())) return latestPromise\n this.#setLoaderData(data)\n }\n\n this.store.setState((s) => {\n s.error = undefined\n s.status = 'success'\n s.updatedAt = Date.now()\n s.invalidAt =\n s.updatedAt +\n (opts?.maxAge ??\n this.route.options.loaderMaxAge ??\n this.router.options.defaultLoaderMaxAge ??\n 0)\n })\n\n return this.store.state.routeLoaderData\n } catch (err) {\n if ((latestPromise = checkLatest())) return latestPromise\n\n if (process.env.NODE_ENV !== 'production') {\n console.error(err)\n }\n\n this.store.setState((s) => {\n s.error = err\n s.status = 'error'\n s.updatedAt = Date.now()\n })\n\n throw err\n }\n })\n\n const after = async () => {\n if ((latestPromise = checkLatest())) return latestPromise\n this.store.setState((s) => (s.isFetching = false))\n this.#resolve()\n delete this.__loadPromise\n }\n\n try {\n await Promise.all([componentsPromise, dataPromise.catch(() => {})])\n after()\n } catch {\n after()\n }\n })\n\n return this.__loadPromise\n }\n invalidate = async () => {\n this.store.setState((s) => (s.invalid = true))\n if (this.router.store.state.currentMatches.find((d) => d.id === this.id)) {\n await this.load()\n }\n }\n __hasLoaders = () => {\n return !!(\n this.route.options.loader ||\n componentTypes.some((d) => this.route.options[d]?.preload)\n )\n }\n getIsInvalid = () => {\n const now = Date.now()\n return this.store.state.invalid || this.store.state.invalidAt < now\n }\n\n #updateLoaderData = () => {\n this.store.setState((s) => {\n s.loaderData = replaceEqualDeep(s.loaderData, {\n ...this.parentMatch?.store.state.loaderData,\n ...s.routeLoaderData,\n }) as TRouteInfo['loaderData']\n })\n this.onLoaderDataListeners.forEach((listener) => listener())\n }\n\n __setParentMatch = (parentMatch?: RouteMatch) => {\n if (!this.parentMatch && parentMatch) {\n this.parentMatch = parentMatch\n this.parentMatch.__onLoaderData(() => {\n this.#updateLoaderData()\n })\n }\n }\n\n __onLoaderData = (listener: () => void) => {\n this.onLoaderDataListeners.add(listener)\n // return () => this.onLoaderDataListeners.delete(listener)\n }\n\n __validate = () => {\n // Validate the search params and stabilize them\n const parentSearch =\n this.parentMatch?.store.state.search ??\n this.router.store.state.latestLocation.search\n\n try {\n const prevSearch = this.store.state.routeSearch\n\n const validator =\n typeof this.route.options.validateSearch === 'object'\n ? this.route.options.validateSearch.parse\n : this.route.options.validateSearch\n\n let nextSearch = validator?.(parentSearch) ?? {}\n\n batch(() => {\n // Invalidate route matches when search param stability changes\n if (prevSearch !== nextSearch) {\n this.store.setState((s) => (s.invalid = true))\n }\n\n this.store.setState((s) => {\n s.routeSearch = nextSearch\n s.search = {\n ...parentSearch,\n ...nextSearch,\n } as any\n })\n })\n\n componentTypes.map(async (type) => {\n const component = this.route.options[type]\n\n if (typeof this[type] !== 'function') {\n this[type] = component\n }\n })\n } catch (err: any) {\n console.error(err)\n const error = new (Error as any)('Invalid search params found', {\n cause: err,\n })\n error.code = 'INVALID_SEARCH_PARAMS'\n\n this.store.setState((s) => {\n s.status = 'error'\n s.error = error\n })\n\n // Do not proceed with loading the route\n return\n }\n }\n}\n"],"names":["componentTypes","RouteMatch","abortController","AbortController","onLoaderDataListeners","Set","constructor","router","route","opts","Object","assign","id","pathname","params","store","createStore","routeSearch","search","status","routeLoaderData","loaderData","isFetching","invalid","invalidAt","Infinity","__hasLoaders","setState","s","batch","cancel","abort","load","loaderOpts","now","Date","minMaxAge","preload","Math","max","maxAge","gcMaxAge","state","currentMatches","find","d","matchCache","gc","match","getIsInvalid","undefined","fetch","__loadPromise","Promise","resolve","loadId","random","checkLatest","then","latestPromise","componentsPromise","all","map","type","component","options","loadComponent","dataPromise","loader","data","loadMatchData","error","updatedAt","loaderMaxAge","defaultLoaderMaxAge","err","process","env","NODE_ENV","console","after","catch","invalidate","some","replaceEqualDeep","parentMatch","forEach","listener","__setParentMatch","__onLoaderData","add","__validate","parentSearch","latestLocation","prevSearch","validator","validateSearch","parse","nextSearch","Error","cause","code"],"mappings":"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"}
@@ -65,13 +65,12 @@ class Router {
65
65
  parseSearch: options?.parseSearch ?? searchParams.defaultParseSearch,
66
66
  fetchServerDataFn: options?.fetchServerDataFn ?? defaultFetchServerDataFn
67
67
  };
68
- this.history = this.options?.history ?? history.createBrowserHistory();
69
68
  this.store = store.createStore(getInitialRouterState());
70
69
  this.basepath = '';
71
70
  this.update(options);
72
71
 
73
72
  // Allow frameworks to hook into the router creation
74
- this.options.createRouter?.(this);
73
+ this.options.Router?.(this);
75
74
  }
76
75
  reset = () => {
77
76
  this.store.setState(s => Object.assign(s, getInitialRouterState()));
@@ -110,13 +109,14 @@ class Router {
110
109
  return () => {};
111
110
  };
112
111
  update = opts => {
113
- if (!this.store.state.latestLocation) {
112
+ Object.assign(this.options, opts);
113
+ if (!this.history || this.options.history && this.options.history !== this.history) {
114
+ this.history = this.options?.history ?? isServer ? history.createMemoryHistory() : history.createBrowserHistory();
114
115
  this.store.setState(s => {
115
116
  s.latestLocation = this.#parseLocation();
116
117
  s.currentLocation = s.latestLocation;
117
118
  });
118
119
  }
119
- Object.assign(this.options, opts);
120
120
  const {
121
121
  basepath,
122
122
  routeConfig
@@ -341,7 +341,7 @@ class Router {
341
341
  const interpolatedPath = path.interpolatePath(foundRoute.path, params);
342
342
  const matchId = path.interpolatePath(foundRoute.id, params, true);
343
343
  const match = existingMatches.find(d => d.id === matchId) || this.store.state.matchCache[matchId]?.match || new routeMatch.RouteMatch(this, foundRoute, {
344
- matchId,
344
+ id: matchId,
345
345
  params,
346
346
  pathname: path.joinPaths([this.basepath, interpolatedPath])
347
347
  });
@@ -413,10 +413,11 @@ class Router {
413
413
 
414
414
  // TODO: batch requests when possible
415
415
 
416
- return this.options.fetchServerDataFn({
416
+ const res = await this.options.fetchServerDataFn({
417
417
  router: this,
418
418
  routeMatch
419
419
  });
420
+ return res;
420
421
  }
421
422
  };
422
423
  invalidateRoute = async opts => {
@@ -607,7 +608,7 @@ class Router {
607
608
  state: {
608
609
  ...utils.pick(this.store.state, ['latestLocation', 'currentLocation', 'status', 'lastUpdated']),
609
610
  currentMatches: this.store.state.currentMatches.map(match => ({
610
- matchId: match.id,
611
+ id: match.id,
611
612
  state: {
612
613
  ...utils.pick(match.store.state, ['status', 'routeLoaderData', 'invalidAt', 'invalid'])
613
614
  }
@@ -627,7 +628,7 @@ class Router {
627
628
  });
628
629
  currentMatches.forEach((match, index) => {
629
630
  const dehydratedMatch = dehydratedRouter.state.currentMatches[index];
630
- invariant__default["default"](dehydratedMatch && dehydratedMatch.matchId === match.id, 'Oh no! There was a hydration mismatch when attempting to rethis.store the state of the router! 😬');
631
+ invariant__default["default"](dehydratedMatch && dehydratedMatch.id === match.id, 'Oh no! There was a hydration mismatch when attempting to rethis.store the state of the router! 😬');
631
632
  Object.assign(match, dehydratedMatch);
632
633
  });
633
634
  currentMatches.forEach(match => match.__validate());
@@ -774,7 +775,9 @@ class Router {
774
775
  id,
775
776
  ...next.state
776
777
  });
777
- this.load(this.#parseLocation(this.store.state.latestLocation));
778
+
779
+ // this.load(this.#parseLocation(this.store.state.latestLocation))
780
+
778
781
  return this.navigationPromise = new Promise(resolve => {
779
782
  const previousNavigationResolve = this.resolveNavigation;
780
783
  this.resolveNavigation = () => {