From 3b9722da69059481fd177b945b94bc0832ac2971 Mon Sep 17 00:00:00 2001 From: Mark Erikson Date: Sun, 24 Sep 2023 00:12:10 -0400 Subject: [PATCH] Manually dedupe all RTK imports in RTKQ core --- packages/toolkit/src/index.ts | 6 +++++ .../core/buildMiddleware/cacheLifecycle.ts | 2 +- .../src/query/core/buildMiddleware/index.ts | 2 +- .../buildMiddleware/invalidationByTags.ts | 2 +- .../core/buildMiddleware/queryLifecycle.ts | 2 +- .../toolkit/src/query/core/buildSelectors.ts | 2 +- packages/toolkit/src/query/core/buildSlice.ts | 2 +- .../toolkit/src/query/core/buildThunks.ts | 5 ++-- packages/toolkit/src/query/core/rtkImports.ts | 24 +++++++++++++++++++ .../toolkit/src/query/core/setupListeners.ts | 2 +- packages/toolkit/src/query/createApi.ts | 2 +- .../src/query/defaultSerializeQueryArgs.ts | 2 +- packages/toolkit/src/query/fetchBaseQuery.ts | 2 +- packages/toolkit/src/query/index.ts | 4 ++++ .../toolkit/src/query/react/buildHooks.ts | 18 ++++---------- packages/toolkit/src/query/react/index.ts | 4 ++++ .../query/utils/copyWithStructuralSharing.ts | 2 +- packages/toolkit/src/react/index.ts | 3 +++ 18 files changed, 60 insertions(+), 26 deletions(-) create mode 100644 packages/toolkit/src/query/core/rtkImports.ts diff --git a/packages/toolkit/src/index.ts b/packages/toolkit/src/index.ts index e15803550e..8ee73148de 100644 --- a/packages/toolkit/src/index.ts +++ b/packages/toolkit/src/index.ts @@ -1,3 +1,7 @@ +// This must remain here so that the `mangleErrors.cjs` build script +// does not have to import this into each source file it rewrites. +import { formatProdErrorMessage } from './formatProdErrorMessage' + export * from 'redux' export { produce as createNextState, @@ -207,3 +211,5 @@ export { combineSlices } from './combineSlices' export type { WithSlice } from './combineSlices' export type { ExtractDispatchExtensions as TSHelpersExtractDispatchExtensions } from './tsHelpers' + +export { formatProdErrorMessage } from './formatProdErrorMessage' diff --git a/packages/toolkit/src/query/core/buildMiddleware/cacheLifecycle.ts b/packages/toolkit/src/query/core/buildMiddleware/cacheLifecycle.ts index d83a25b15f..247bd7434c 100644 --- a/packages/toolkit/src/query/core/buildMiddleware/cacheLifecycle.ts +++ b/packages/toolkit/src/query/core/buildMiddleware/cacheLifecycle.ts @@ -1,4 +1,4 @@ -import { isAsyncThunkAction, isFulfilled } from '@reduxjs/toolkit' +import { isAsyncThunkAction, isFulfilled } from '../rtkImports' import type { UnknownAction } from 'redux' import type { ThunkDispatch } from 'redux-thunk' import type { BaseQueryFn, BaseQueryMeta } from '../../baseQueryTypes' diff --git a/packages/toolkit/src/query/core/buildMiddleware/index.ts b/packages/toolkit/src/query/core/buildMiddleware/index.ts index 2ef7c7f347..aa58617d6f 100644 --- a/packages/toolkit/src/query/core/buildMiddleware/index.ts +++ b/packages/toolkit/src/query/core/buildMiddleware/index.ts @@ -4,7 +4,7 @@ import type { ThunkDispatch, UnknownAction, } from '@reduxjs/toolkit' -import { isAction, createAction } from '@reduxjs/toolkit' +import { isAction, createAction } from '../rtkImports' import type { EndpointDefinitions, diff --git a/packages/toolkit/src/query/core/buildMiddleware/invalidationByTags.ts b/packages/toolkit/src/query/core/buildMiddleware/invalidationByTags.ts index 975ff4827f..181e50f59a 100644 --- a/packages/toolkit/src/query/core/buildMiddleware/invalidationByTags.ts +++ b/packages/toolkit/src/query/core/buildMiddleware/invalidationByTags.ts @@ -1,4 +1,4 @@ -import { isAnyOf, isFulfilled, isRejectedWithValue } from '@reduxjs/toolkit' +import { isAnyOf, isFulfilled, isRejectedWithValue } from '../rtkImports' import type { FullTagDescription } from '../../endpointDefinitions' import { calculateProvidedBy } from '../../endpointDefinitions' diff --git a/packages/toolkit/src/query/core/buildMiddleware/queryLifecycle.ts b/packages/toolkit/src/query/core/buildMiddleware/queryLifecycle.ts index 0df42c159e..580581238c 100644 --- a/packages/toolkit/src/query/core/buildMiddleware/queryLifecycle.ts +++ b/packages/toolkit/src/query/core/buildMiddleware/queryLifecycle.ts @@ -1,4 +1,4 @@ -import { isPending, isRejected, isFulfilled } from '@reduxjs/toolkit' +import { isPending, isRejected, isFulfilled } from '../rtkImports' import type { BaseQueryError, BaseQueryFn, diff --git a/packages/toolkit/src/query/core/buildSelectors.ts b/packages/toolkit/src/query/core/buildSelectors.ts index 58967bb6b1..efd48b8170 100644 --- a/packages/toolkit/src/query/core/buildSelectors.ts +++ b/packages/toolkit/src/query/core/buildSelectors.ts @@ -1,4 +1,4 @@ -import { createNextState, createSelector } from '@reduxjs/toolkit' +import { createNextState, createSelector } from './rtkImports' import type { MutationSubState, QuerySubState, diff --git a/packages/toolkit/src/query/core/buildSlice.ts b/packages/toolkit/src/query/core/buildSlice.ts index ef37ca3023..4af8a310d5 100644 --- a/packages/toolkit/src/query/core/buildSlice.ts +++ b/packages/toolkit/src/query/core/buildSlice.ts @@ -8,7 +8,7 @@ import { isRejectedWithValue, createNextState, prepareAutoBatched, -} from '@reduxjs/toolkit' +} from './rtkImports' import type { QuerySubstateIdentifier, QuerySubState, diff --git a/packages/toolkit/src/query/core/buildThunks.ts b/packages/toolkit/src/query/core/buildThunks.ts index d0e609302c..9fbd436fcb 100644 --- a/packages/toolkit/src/query/core/buildThunks.ts +++ b/packages/toolkit/src/query/core/buildThunks.ts @@ -34,11 +34,12 @@ import { isPending, isRejected, isRejectedWithValue, -} from '@reduxjs/toolkit' + createAsyncThunk, + SHOULD_AUTOBATCH, +} from './rtkImports' import type { Patch } from 'immer' import { isDraftable, produceWithPatches } from 'immer' import type { ThunkAction, ThunkDispatch, AsyncThunk } from '@reduxjs/toolkit' -import { createAsyncThunk, SHOULD_AUTOBATCH } from '@reduxjs/toolkit' import { HandledError } from '../HandledError' diff --git a/packages/toolkit/src/query/core/rtkImports.ts b/packages/toolkit/src/query/core/rtkImports.ts new file mode 100644 index 0000000000..4ba180bab4 --- /dev/null +++ b/packages/toolkit/src/query/core/rtkImports.ts @@ -0,0 +1,24 @@ +// This file exists to consolidate all of the imports from the `@reduxjs/toolkit` package. +// ESBuild does not de-duplicate imports, so this file is used to ensure that each method +// imported is only listed once, and there's only one mention of the `@reduxjs/toolkit` package. + +export { + createAction, + createSlice, + createSelector, + createAsyncThunk, + combineReducers, + createNextState, + isAnyOf, + isAllOf, + isAction, + isPending, + isRejected, + isFulfilled, + isRejectedWithValue, + isAsyncThunkAction, + prepareAutoBatched, + SHOULD_AUTOBATCH, + isPlainObject, + nanoid, +} from '@reduxjs/toolkit' diff --git a/packages/toolkit/src/query/core/setupListeners.ts b/packages/toolkit/src/query/core/setupListeners.ts index 14a4e6e65f..01df593906 100644 --- a/packages/toolkit/src/query/core/setupListeners.ts +++ b/packages/toolkit/src/query/core/setupListeners.ts @@ -2,7 +2,7 @@ import type { ThunkDispatch, ActionCreatorWithoutPayload, // Workaround for API-Extractor } from '@reduxjs/toolkit' -import { createAction } from '@reduxjs/toolkit' +import { createAction } from './rtkImports' export const onFocus = /* @__PURE__ */ createAction('__rtkq/focused') export const onFocusLost = /* @__PURE__ */ createAction('__rtkq/unfocused') diff --git a/packages/toolkit/src/query/createApi.ts b/packages/toolkit/src/query/createApi.ts index a4bf7cf790..26ec2fb2d4 100644 --- a/packages/toolkit/src/query/createApi.ts +++ b/packages/toolkit/src/query/createApi.ts @@ -8,7 +8,7 @@ import type { EndpointDefinitions, } from './endpointDefinitions' import { DefinitionType, isQueryDefinition } from './endpointDefinitions' -import { nanoid } from '@reduxjs/toolkit' +import { nanoid } from './core/rtkImports' import type { UnknownAction } from '@reduxjs/toolkit' import type { NoInfer } from './tsHelpers' import { defaultMemoize } from 'reselect' diff --git a/packages/toolkit/src/query/defaultSerializeQueryArgs.ts b/packages/toolkit/src/query/defaultSerializeQueryArgs.ts index e4988ead2c..e3fe011b44 100644 --- a/packages/toolkit/src/query/defaultSerializeQueryArgs.ts +++ b/packages/toolkit/src/query/defaultSerializeQueryArgs.ts @@ -1,6 +1,6 @@ import type { QueryCacheKey } from './core/apiState' import type { EndpointDefinition } from './endpointDefinitions' -import { isPlainObject } from '@reduxjs/toolkit' +import { isPlainObject } from './core/rtkImports' const cache: WeakMap | undefined = WeakMap ? new WeakMap() diff --git a/packages/toolkit/src/query/fetchBaseQuery.ts b/packages/toolkit/src/query/fetchBaseQuery.ts index 158d53d173..6cf2b5a913 100644 --- a/packages/toolkit/src/query/fetchBaseQuery.ts +++ b/packages/toolkit/src/query/fetchBaseQuery.ts @@ -1,5 +1,5 @@ import { joinUrls } from './utils' -import { isPlainObject } from '@reduxjs/toolkit' +import { isPlainObject } from './core/rtkImports' import type { BaseQueryApi, BaseQueryFn } from './baseQueryTypes' import type { MaybePromise, Override } from './tsHelpers' diff --git a/packages/toolkit/src/query/index.ts b/packages/toolkit/src/query/index.ts index c75f3b4111..91d4135eea 100644 --- a/packages/toolkit/src/query/index.ts +++ b/packages/toolkit/src/query/index.ts @@ -1,3 +1,7 @@ +// This must remain here so that the `mangleErrors.cjs` build script +// does not have to import this into each source file it rewrites. +import { formatProdErrorMessage } from '@reduxjs/toolkit' + export type { QuerySubState, SubscriptionOptions, diff --git a/packages/toolkit/src/query/react/buildHooks.ts b/packages/toolkit/src/query/react/buildHooks.ts index 440d24bda8..2392c461e6 100644 --- a/packages/toolkit/src/query/react/buildHooks.ts +++ b/packages/toolkit/src/query/react/buildHooks.ts @@ -21,37 +21,29 @@ import type { SubscriptionOptions, QueryKeys, RootState, -} from '@reduxjs/toolkit/query' -import type { EndpointDefinitions, MutationDefinition, QueryDefinition, QueryArgFrom, ResultTypeFrom, -} from '@reduxjs/toolkit/query' -import type { QueryResultSelectorResult, MutationResultSelectorResult, SkipToken, -} from '@reduxjs/toolkit/query' -import type { QueryActionCreatorResult, MutationActionCreatorResult, -} from '@reduxjs/toolkit/query' -import type { SerializeQueryArgs } from '@reduxjs/toolkit/query' -import { shallowEqual } from 'react-redux' -import type { Api, ApiContext } from '@reduxjs/toolkit/query' -import type { + SerializeQueryArgs, + Api, + ApiContext, TSHelpersId, TSHelpersNoInfer, TSHelpersOverride, -} from '@reduxjs/toolkit/query' -import type { ApiEndpointMutation, ApiEndpointQuery, CoreModule, PrefetchOptions, } from '@reduxjs/toolkit/query' + +import { shallowEqual } from 'react-redux' import type { ReactHooksModuleOptions } from './module' import { useStableQueryArgs } from './useSerializedStableValue' import type { UninitializedValue } from './constants' diff --git a/packages/toolkit/src/query/react/index.ts b/packages/toolkit/src/query/react/index.ts index f0298381fc..5a9b5a6cdf 100644 --- a/packages/toolkit/src/query/react/index.ts +++ b/packages/toolkit/src/query/react/index.ts @@ -1,3 +1,7 @@ +// This must remain here so that the `mangleErrors.cjs` build script +// does not have to import this into each source file it rewrites. +import { formatProdErrorMessage } from '@reduxjs/toolkit' + import { coreModule, buildCreateApi } from '@reduxjs/toolkit/query' import { reactHooksModule, reactHooksModuleName } from './module' diff --git a/packages/toolkit/src/query/utils/copyWithStructuralSharing.ts b/packages/toolkit/src/query/utils/copyWithStructuralSharing.ts index 2d6fdc3027..11e6cecdd3 100644 --- a/packages/toolkit/src/query/utils/copyWithStructuralSharing.ts +++ b/packages/toolkit/src/query/utils/copyWithStructuralSharing.ts @@ -1,4 +1,4 @@ -import { isPlainObject as _iPO } from '@reduxjs/toolkit' +import { isPlainObject as _iPO } from '../core/rtkImports' // remove type guard const isPlainObject: (_: any) => boolean = _iPO diff --git a/packages/toolkit/src/react/index.ts b/packages/toolkit/src/react/index.ts index ed558047c4..739f7ba477 100644 --- a/packages/toolkit/src/react/index.ts +++ b/packages/toolkit/src/react/index.ts @@ -1,3 +1,6 @@ +// This must remain here so that the `mangleErrors.cjs` build script +// does not have to import this into each source file it rewrites. +import { formatProdErrorMessage } from '@reduxjs/toolkit' export * from '@reduxjs/toolkit' export { createDynamicMiddleware } from '../dynamicMiddleware/react'