From ac95e2d95b0d3508e3428f852eb60aebfc96cb43 Mon Sep 17 00:00:00 2001 From: Arya Emami Date: Tue, 20 Jan 2026 00:44:13 -0600 Subject: [PATCH] feat!: rename `RootState` type to `ApiRootState` --- packages/toolkit/src/query/core/apiState.ts | 14 +++++++++++++- .../core/buildMiddleware/cacheLifecycle.ts | 4 ++-- .../src/query/core/buildMiddleware/index.ts | 4 ++-- .../src/query/core/buildMiddleware/types.ts | 10 +++++----- .../toolkit/src/query/core/buildSelectors.ts | 2 +- packages/toolkit/src/query/core/buildThunks.ts | 16 ++++++++-------- packages/toolkit/src/query/core/index.ts | 2 +- packages/toolkit/src/query/core/module.ts | 14 +++++++------- .../toolkit/src/query/endpointDefinitions.ts | 4 ++-- packages/toolkit/src/query/index.ts | 2 +- packages/toolkit/src/query/react/buildHooks.ts | 18 +++++++++--------- .../src/query/tests/queryLifecycle.test-d.tsx | 6 +++--- 12 files changed, 54 insertions(+), 42 deletions(-) diff --git a/packages/toolkit/src/query/core/apiState.ts b/packages/toolkit/src/query/core/apiState.ts index 6f21d5dc12..d899baa307 100644 --- a/packages/toolkit/src/query/core/apiState.ts +++ b/packages/toolkit/src/query/core/apiState.ts @@ -370,7 +370,19 @@ export type MutationState = { [requestId: string]: MutationSubState | undefined } -export type RootState< +/** + * Get the root state type for an RTK Query API slice. + * + * **Note**: This type was previously named **`RootState`**. + * + * @template Definitions - Endpoint definitions for the API. + * @template TagTypes - Tag types used by the API. + * @template ReducerPath - The **`reducerPath`** key the API reducer is mounted under. + * + * @since 3.0.0 + * @public + */ +export type ApiRootState< Definitions extends EndpointDefinitions, TagTypes extends string, ReducerPath extends string, diff --git a/packages/toolkit/src/query/core/buildMiddleware/cacheLifecycle.ts b/packages/toolkit/src/query/core/buildMiddleware/cacheLifecycle.ts index 012d28a361..78426905e3 100644 --- a/packages/toolkit/src/query/core/buildMiddleware/cacheLifecycle.ts +++ b/packages/toolkit/src/query/core/buildMiddleware/cacheLifecycle.ts @@ -9,7 +9,7 @@ import type { DefinitionType, } from '../../endpointDefinitions' import { isAnyQueryDefinition } from '../../endpointDefinitions' -import type { QueryCacheKey, RootState } from '../apiState' +import type { QueryCacheKey, ApiRootState } from '../apiState' import type { MutationResultSelectorResult, QueryResultSelectorResult, @@ -78,7 +78,7 @@ type LifecycleApi = { /** * A method to get the current state */ - getState(): RootState + getState(): ApiRootState /** * `extra` as provided as `thunk.extraArgument` to the `configureStore` `getDefaultMiddleware` option. */ diff --git a/packages/toolkit/src/query/core/buildMiddleware/index.ts b/packages/toolkit/src/query/core/buildMiddleware/index.ts index 0a7bc92222..dac8230d90 100644 --- a/packages/toolkit/src/query/core/buildMiddleware/index.ts +++ b/packages/toolkit/src/query/core/buildMiddleware/index.ts @@ -8,7 +8,7 @@ import type { EndpointDefinitions, FullTagDescription, } from '../../endpointDefinitions' -import type { QueryStatus, QuerySubState, RootState } from '../apiState' +import type { QueryStatus, QuerySubState, ApiRootState } from '../apiState' import type { QueryThunkArg } from '../buildThunks' import { createAction, isAction } from '../rtkImports' import { buildBatchedActionsHandler } from './batchActions' @@ -68,7 +68,7 @@ export function buildMiddleware< const middleware: Middleware< {}, - RootState, + ApiRootState, ThunkDispatch > = (mwApi) => { let initialized = false diff --git a/packages/toolkit/src/query/core/buildMiddleware/types.ts b/packages/toolkit/src/query/core/buildMiddleware/types.ts index d0b3aa288d..50ffdfca7f 100644 --- a/packages/toolkit/src/query/core/buildMiddleware/types.ts +++ b/packages/toolkit/src/query/core/buildMiddleware/types.ts @@ -16,7 +16,7 @@ import type { import type { QueryStatus, QuerySubState, - RootState, + ApiRootState, SubscriptionInternalState, SubscriptionState, } from '../apiState' @@ -83,7 +83,7 @@ export interface BuildMiddlewareInput< export type SubMiddlewareApi = MiddlewareAPI< ThunkDispatch, - RootState + ApiRootState > export interface BuildSubMiddlewareInput @@ -99,7 +99,7 @@ export interface BuildSubMiddlewareInput selectors: AllSelectors mwApi: MiddlewareAPI< ThunkDispatch, - RootState + ApiRootState > } @@ -107,7 +107,7 @@ export type SubMiddlewareBuilder = ( input: BuildSubMiddlewareInput, ) => Middleware< {}, - RootState, + ApiRootState, ThunkDispatch > @@ -116,7 +116,7 @@ type MwNext = Parameters>[0] export type ApiMiddlewareInternalHandler = ( action: Action, mwApi: SubMiddlewareApi & { next: MwNext }, - prevState: RootState, + prevState: ApiRootState, ) => Return export type InternalHandlerBuilder = ( diff --git a/packages/toolkit/src/query/core/buildSelectors.ts b/packages/toolkit/src/query/core/buildSelectors.ts index 58581928fc..e34e3bb458 100644 --- a/packages/toolkit/src/query/core/buildSelectors.ts +++ b/packages/toolkit/src/query/core/buildSelectors.ts @@ -23,7 +23,7 @@ import type { QueryState, QuerySubState, RequestStatusFlags, - RootState as _RootState, + ApiRootState as _RootState, QueryStatus, } from './apiState' import { STATUS_UNINITIALIZED, getRequestStatusFlags } from './apiState' diff --git a/packages/toolkit/src/query/core/buildThunks.ts b/packages/toolkit/src/query/core/buildThunks.ts index 0018073d16..3f2c4503e0 100644 --- a/packages/toolkit/src/query/core/buildThunks.ts +++ b/packages/toolkit/src/query/core/buildThunks.ts @@ -42,7 +42,7 @@ import { import { HandledError } from '../HandledError' import type { UnwrapPromise } from '../tsHelpers' import type { - RootState, + ApiRootState, QueryKeys, QuerySubstateIdentifier, InfiniteData, @@ -355,7 +355,7 @@ export function buildThunks< catchSchemaFailure: SchemaFailureConverter | undefined skipSchemaValidation: boolean | SchemaType[] | undefined }) { - type State = RootState + type State = ApiRootState const patchQueryData: PatchQueryDataThunk = (endpointName, arg, patches, updateProvided) => (dispatch, getState) => { @@ -377,7 +377,7 @@ export function buildThunks< const newValue = api.endpoints[endpointName].select(arg)( // Work around TS 4.1 mismatch - getState() as RootState, + getState() as ApiRootState, ) const providedTags = calculateProvidedBy( @@ -411,7 +411,7 @@ export function buildThunks< const currentState = endpointDefinition.select(arg)( // Work around TS 4.1 mismatch - getState() as RootState, + getState() as ApiRootState, ) const ret: PatchCollection = { @@ -494,7 +494,7 @@ export function buildThunks< const executeEndpoint: AsyncThunkPayloadCreator< ThunkResult, QueryThunkArg | MutationThunkArg | InfiniteQueryThunkArg, - ThunkApiMetaConfig & { state: RootState } + ThunkApiMetaConfig & { state: ApiRootState } > = async ( arg, { @@ -884,7 +884,7 @@ In the case of an unhandled error, no tags will be "provided" or "invalidated".` function isForcedQuery( arg: QueryThunkArg, - state: RootState, + state: ApiRootState, ) { const requestState = selectors.selectQueryEntry(state, arg.queryCacheKey) const baseFetchOnMountOrArgChange = @@ -910,7 +910,7 @@ In the case of an unhandled error, no tags will be "provided" or "invalidated".` const generatedQueryThunk = createAsyncThunk< ThunkResult, ThunkArgType, - ThunkApiMetaConfig & { state: RootState } + ThunkApiMetaConfig & { state: ApiRootState } >(`${reducerPath}/executeQuery`, executeEndpoint, { getPendingMeta({ arg }) { const endpointDefinition = endpointDefinitions[arg.endpointName] @@ -984,7 +984,7 @@ In the case of an unhandled error, no tags will be "provided" or "invalidated".` const mutationThunk = createAsyncThunk< ThunkResult, MutationThunkArg, - ThunkApiMetaConfig & { state: RootState } + ThunkApiMetaConfig & { state: ApiRootState } >(`${reducerPath}/executeMutation`, executeEndpoint, { getPendingMeta() { return addShouldAutoBatch({ startedTimeStamp: Date.now() }) diff --git a/packages/toolkit/src/query/core/index.ts b/packages/toolkit/src/query/core/index.ts index 636d3ede98..1e190cb14c 100644 --- a/packages/toolkit/src/query/core/index.ts +++ b/packages/toolkit/src/query/core/index.ts @@ -13,7 +13,7 @@ export type { QueryCacheKey, QueryKeys, QuerySubState, - RootState, + ApiRootState, SubscriptionOptions, } from './apiState' export type { diff --git a/packages/toolkit/src/query/core/module.ts b/packages/toolkit/src/query/core/module.ts index 263b7ed894..d792bcf0dd 100644 --- a/packages/toolkit/src/query/core/module.ts +++ b/packages/toolkit/src/query/core/module.ts @@ -34,7 +34,7 @@ import type { CombinedState, MutationKeys, QueryKeys, - RootState, + ApiRootState, } from './apiState' import type { BuildInitiateApiEndpointMutation, @@ -157,7 +157,7 @@ export interface ApiModules< */ middleware: Middleware< {}, - RootState, + ApiRootState, ThunkDispatch > /** @@ -274,7 +274,7 @@ export interface ApiModules< */ updateQueryData: UpdateQueryDataThunk< Definitions, - RootState + ApiRootState > /** @@ -298,7 +298,7 @@ export interface ApiModules< */ upsertQueryData: UpsertQueryDataThunk< Definitions, - RootState + ApiRootState > /** * A Redux thunk that applies a JSON diff/patch array to the cached data for a given query result. This immediately updates the Redux state with those changes. @@ -328,7 +328,7 @@ export interface ApiModules< */ patchQueryData: PatchQueryDataThunk< Definitions, - RootState + ApiRootState > /** @@ -381,7 +381,7 @@ export interface ApiModules< * Can be used for mutations that want to do optimistic updates instead of invalidating a set of tags, but don't know exactly what they need to update. */ selectInvalidatedBy: ( - state: RootState, + state: ApiRootState, tags: ReadonlyArray | null | undefined>, ) => Array<{ endpointName: string @@ -395,7 +395,7 @@ export interface ApiModules< * Can be used for mutations that want to do optimistic updates instead of invalidating a set of tags, but don't know exactly what they need to update. */ selectCachedArgsForQuery: >( - state: RootState, + state: ApiRootState, queryName: QueryName, ) => Array> } diff --git a/packages/toolkit/src/query/endpointDefinitions.ts b/packages/toolkit/src/query/endpointDefinitions.ts index d2362de9a7..1678d754a1 100644 --- a/packages/toolkit/src/query/endpointDefinitions.ts +++ b/packages/toolkit/src/query/endpointDefinitions.ts @@ -25,7 +25,7 @@ import type { InfiniteData, InfiniteQueryConfigOptions, QuerySubState, - RootState, + ApiRootState, } from './core/index' import type { SerializeQueryArgs } from './defaultSerializeQueryArgs' import type { NEVER } from './fakeBaseQuery' @@ -855,7 +855,7 @@ export interface QueryExtraOptions< forceRefetch?(params: { currentArg: QueryArg | undefined previousArg: QueryArg | undefined - state: RootState + state: ApiRootState endpointState?: QuerySubState }): boolean diff --git a/packages/toolkit/src/query/index.ts b/packages/toolkit/src/query/index.ts index 1542566fd1..35220af4c0 100644 --- a/packages/toolkit/src/query/index.ts +++ b/packages/toolkit/src/query/index.ts @@ -7,7 +7,7 @@ export type { QueryCacheKey, QueryKeys, QuerySubState, - RootState, + ApiRootState, SubscriptionOptions, } from './core/apiState' export { QueryStatus } from './core/apiState' diff --git a/packages/toolkit/src/query/react/buildHooks.ts b/packages/toolkit/src/query/react/buildHooks.ts index 3b4d16e7bc..81d1d7c1ae 100644 --- a/packages/toolkit/src/query/react/buildHooks.ts +++ b/packages/toolkit/src/query/react/buildHooks.ts @@ -30,7 +30,7 @@ import type { QueryResultSelectorResult, QuerySubState, ResultTypeFrom, - RootState, + ApiRootState, SerializeQueryArgs, SkipToken, SubscriptionOptions, @@ -1845,11 +1845,11 @@ export function buildHooks({ > const stableArg = useStableQueryArgs(skip ? skipToken : arg) - type ApiRootState = Parameters>[0] + type RootStateType = Parameters>[0] const lastValue = useRef(undefined) - const selectDefaultResult: Selector = useMemo( + const selectDefaultResult: Selector = useMemo( () => // Normally ts-ignores are bad and should be avoided, but we're // already casting this selector to be `Selector` anyway, @@ -1859,8 +1859,8 @@ export function buildHooks({ [ // @ts-ignore select(stableArg), - (_: ApiRootState, lastResult: any) => lastResult, - (_: ApiRootState) => stableArg, + (_: RootStateType, lastResult: any) => lastResult, + (_: RootStateType) => stableArg, ], preSelector, { @@ -1872,7 +1872,7 @@ export function buildHooks({ [select, stableArg], ) - const querySelector: Selector = useMemo( + const querySelector: Selector = useMemo( () => selectFromResult ? createSelector([selectDefaultResult], selectFromResult, { @@ -1883,12 +1883,12 @@ export function buildHooks({ ) const currentState = useSelector( - (state: RootState) => + (state: ApiRootState) => querySelector(state, lastValue.current), shallowEqual, ) - const store = useStore>() + const store = useStore>() const newLastValue = selectDefaultResult( store.getState(), lastValue.current, @@ -2250,7 +2250,7 @@ export function buildHooks({ [fixedCacheKey, promise, select], ) const mutationSelector = useMemo( - (): Selector, any> => + (): Selector, any> => selectFromResult ? createSelector([selectDefaultResult], selectFromResult) : selectDefaultResult, diff --git a/packages/toolkit/src/query/tests/queryLifecycle.test-d.tsx b/packages/toolkit/src/query/tests/queryLifecycle.test-d.tsx index d537186408..ba494f3164 100644 --- a/packages/toolkit/src/query/tests/queryLifecycle.test-d.tsx +++ b/packages/toolkit/src/query/tests/queryLifecycle.test-d.tsx @@ -1,9 +1,9 @@ import type { PatchCollection, Recipe } from '@internal/query/core/buildThunks' import type { ThunkDispatch, UnknownAction } from '@reduxjs/toolkit' import type { + ApiRootState, FetchBaseQueryError, FetchBaseQueryMeta, - RootState, TypedMutationOnQueryStarted, TypedQueryOnQueryStarted, } from '@reduxjs/toolkit/query' @@ -213,7 +213,7 @@ describe('type tests', () => { expectTypeOf(extra).toBeUnknown() expectTypeOf(getState).toEqualTypeOf< - () => RootState + () => ApiRootState >() expectTypeOf(requestId).toBeString() @@ -325,7 +325,7 @@ describe('type tests', () => { expectTypeOf(extra).toBeUnknown() expectTypeOf(getState).toEqualTypeOf< - () => RootState + () => ApiRootState >() expectTypeOf(requestId).toBeString()