bcgov / nr-results-exam

Repository for RESULTS Exam
Apache License 2.0
0 stars 0 forks source link

fix(deps): update redux (major) #205

Closed renovate[bot] closed 1 month ago

renovate[bot] commented 2 months ago

This PR contains the following updates:

Package Change Age Adoption Passing Confidence
react-redux ^8.1.3 -> ^9.0.0 age adoption passing confidence
redux (source) ^4.2.1 -> ^5.0.0 age adoption passing confidence
redux-thunk ^2.4.2 -> ^3.0.0 age adoption passing confidence

Release Notes

reduxjs/react-redux (react-redux) ### [`v9.1.2`](https://redirect.github.com/reduxjs/react-redux/compare/v9.1.1...eec5f9b320e2d4787af83b599a0c517fef4b510f) [Compare Source](https://redirect.github.com/reduxjs/react-redux/compare/v9.1.1...v9.1.2) ### [`v9.1.1`](https://redirect.github.com/reduxjs/react-redux/releases/tag/v9.1.1) [Compare Source](https://redirect.github.com/reduxjs/react-redux/compare/v9.1.0...v9.1.1) This bugfix release fixes an issue with `connect` and React Native caused by changes to our bundling setup in v9. Nested `connect` calls should work correctly now. #### What's Changed - Remove unused isProcessingDispatch by [@​Connormiha](https://redirect.github.com/Connormiha) in [https://github.com/reduxjs/react-redux/pull/2122](https://redirect.github.com/reduxjs/react-redux/pull/2122) - Move `Equals` constraint into an intersection type. by [@​DanielRosenwasser](https://redirect.github.com/DanielRosenwasser) in [https://github.com/reduxjs/react-redux/pull/2123](https://redirect.github.com/reduxjs/react-redux/pull/2123) - Fix `useIsomorphicLayoutEffect` usage in React Native environments by [@​aryaemami59](https://redirect.github.com/aryaemami59) in [https://github.com/reduxjs/react-redux/pull/2156](https://redirect.github.com/reduxjs/react-redux/pull/2156) **Full Changelog**: https://github.com/reduxjs/react-redux/compare/v9.1.0...v9.1.1 ### [`v9.1.0`](https://redirect.github.com/reduxjs/react-redux/compare/v9.0.4...v9.1.0) [Compare Source](https://redirect.github.com/reduxjs/react-redux/compare/v9.0.4...v9.1.0) ### [`v9.0.4`](https://redirect.github.com/reduxjs/react-redux/releases/tag/v9.0.4) [Compare Source](https://redirect.github.com/reduxjs/react-redux/compare/v9.0.3...v9.0.4) This **bugfix release** updates the React Native peer dependency to be `>= 0.69`, to better reflect the need for React 18 compat and (hopefully) resolve issues with the `npm` package manager throwing peer dep errors on install. #### What's Changed - Allow react-native newer than 0.69 as peer dependency by [@​R3DST0RM](https://redirect.github.com/R3DST0RM) in [https://github.com/reduxjs/react-redux/pull/2107](https://redirect.github.com/reduxjs/react-redux/pull/2107) **Full Changelog**: https://github.com/reduxjs/react-redux/compare/v9.0.3...v9.0.4 ### [`v9.0.3`](https://redirect.github.com/reduxjs/react-redux/releases/tag/v9.0.3) [Compare Source](https://redirect.github.com/reduxjs/react-redux/compare/v9.0.2...v9.0.3) This **bugfix release** drops the ReactDOM / React Native specific use of render batching, as React 18 now automatically batches, and updates the React types dependencies #### Changelog ##### Batching Dependency Updates React-Redux has long depended on React's `unstable_batchedUpdates` API to help batch renders queued by Redux updates. It also re-exported that method as a util named `batch`. However, React 18 now auto-batches all queued renders in the same event loop tick, so `unstable_batchedUpdates` is effectively a no-op. Using `unstable_batchedUpdates` has always been a pain point, because it's exported by the renderer package (ReactDOM or React Native), rather than the core `react` package. Our prior implementation relied on having separate `batch.ts` and `batch.native.ts` files in the codebase, and expecting React Native's bundler to find the right transpiled file at app build time. Now that we're pre-bundling artifacts in React-Redux v9, that approach has become a problem. Given that React 18 already batches by default, there's no further need to continue using `unstable_batchedUpdates` internally, so we've removed our use of that and simplified the internals. We still export a `batch` method, but it's effectively a no-op that just immediately runs the given callback, and we've marked it as `@deprecated`. We've also updated the build artifacts and packaging, as there's no longer a need for an `alternate-renderers` entry point that omits batching, or a separate artifact that imports from `"react-native"`. #### What's Changed - Drop renderer-specific batching behavior and deprecate `batch` by [@​markerikson](https://redirect.github.com/markerikson) in [https://github.com/reduxjs/react-redux/pull/2104](https://redirect.github.com/reduxjs/react-redux/pull/2104) - Drop `@types/react-dom` and lower `@types/react` to min needed by [@​markerikson](https://redirect.github.com/markerikson) in [https://github.com/reduxjs/react-redux/pull/2105](https://redirect.github.com/reduxjs/react-redux/pull/2105) **Full Changelog**: https://github.com/reduxjs/react-redux/compare/v9.0.2...v9.0.3 ### [`v9.0.2`](https://redirect.github.com/reduxjs/react-redux/releases/tag/v9.0.2) [Compare Source](https://redirect.github.com/reduxjs/react-redux/compare/v9.0.1...v9.0.2) This **bugfix release** makes additional tweaks to the React Native artifact filename to help resolve import and bundling issues with RN projects. #### What's Changed - Change react-native output extension from `.mjs` to `.js` by [@​aryaemami59](https://redirect.github.com/aryaemami59) in [https://github.com/reduxjs/react-redux/pull/2102](https://redirect.github.com/reduxjs/react-redux/pull/2102) **Full Changelog**: https://github.com/reduxjs/react-redux/compare/v9.0.1...v9.0.2 ### [`v9.0.1`](https://redirect.github.com/reduxjs/react-redux/releases/tag/v9.0.1) [Compare Source](https://redirect.github.com/reduxjs/react-redux/compare/v9.0.0...v9.0.1) This **bugfix release** updates the package to include a new `react-redux.react-native.js` bundle that specifically imports React Native, and consolidates all of the `'react'` imports into one file to save on bundle size (and enable some tricky React Native import handling). ##### What's Changed - Add an RN-specific bundle and consolidate imports by [@​markerikson](https://redirect.github.com/markerikson) in [https://github.com/reduxjs/react-redux/pull/2100](https://redirect.github.com/reduxjs/react-redux/pull/2100) **Full Changelog**: https://github.com/reduxjs/react-redux/compare/v9.0.0...v9.0.1 ### [`v9.0.0`](https://redirect.github.com/reduxjs/react-redux/releases/tag/v9.0.0) [Compare Source](https://redirect.github.com/reduxjs/react-redux/compare/v8.1.3...v9.0.0) This **major release**: - Switches to requiring React 18 and Redux Toolkit 2.0 / Redux 5.0 - Updates the packaging for better ESM/CJS compatibility and modernizes the build output - Updates the options for dev mode checks in `useSelector` - Adds a new React Server Components artifact that throws on use, to better indicate compat issues This release has **breaking changes**. This release is part of a wave of major versions of all the Redux packages: **Redux Toolkit 2.0, Redux core 5.0, React-Redux 9.0, Reselect 5.0, and Redux Thunk 3.0**. For full details on all of the breaking changes and other significant changes to all of those packages, see the **["Migrating to RTK 2.0 and Redux 5.0" migration guide](https://redux.js.org/usage/migrations/migrating-rtk-2)** in the Redux docs. > \[!NOTE] > The Redux core, Reselect, and Redux Thunk packages are included as part of Redux Toolkit, and RTK users do not need to manually upgrade them - you'll get them as part of the upgrade to RTK 2.0. (If you're not using Redux Toolkit yet, [**please start migrating your existing legacy Redux code to use Redux Toolkit today!**](https://redux.js.org/usage/migrating-to-modern-redux)) > React-Redux is a separate, package, but we expect you'll be upgrading them together. ```bash ##### React-Redux npm install react-redux yarn add react-redux ##### RTK npm install @​reduxjs/toolkit yarn add @​reduxjs/toolkit ##### Standalone Redux core npm install redux yarn add redux ``` ##### Changelog ##### React 18 and RTK 2 / Redux core 5 Are Required React-Redux 7.x and 8.x worked with all versions of React that had hooks (16.8+, 17.x, 18.x). However, React-Redux v8 used React 18's new `useSyncExternalStore` hook. In order to maintain backwards compatibility with older React versions, we used the `use-sync-external-store` "shim" package that provided an official userland implementation of the `useSyncExternalStore` hook when used with React 16 or 17. This meant that if you *were* using React 18, there were a few hundred extra bytes of shim code being imported even though it wasn't needed. For React-Redux v9, we're switching so that **React 18 is now *required*!** This both simplifies the maintenance burden on our side (fewer versions of React to test against), and also lets us drop the extra bytes because we can import `useSyncExternalStore` directly. React 18 has been out for a year and a half, and other libraries like React Query are also switching to require React 18 in their next major version. This seems like a reasonable time to make that switch. Similarly, React-Redux now depends on Redux core v5 for updated TS types (but not runtime behavior). We strongly encourage all Redux users to be using Redux Toolkit, which already includes the Redux core. Redux Toolkit 2.0 comes with Redux core 5.0 built in. ##### ESM/CJS Package Compatibility The biggest theme of the Redux v5 and RTK 2.0 releases is trying to get "true" ESM package publishing compatibility in place, while still supporting CJS in the published package. **The primary build artifact is now an ESM file, `dist/react-redux.mjs`**. Most build tools should pick this up. There's also a CJS artifact, and a second copy of the ESM file named `react-redux.legacy-esm.js` to support Webpack 4 (which does not recognize the `exports` field in `package.json`). There's also two special-case artifacts: an "alternate renderers" artifact that should be used for any renderer other than ReactDOM or React Native (such as the `ink` React CLI renderer), and a React Server Components artifact that throws when any import is used (since using hooks or context would error anyway in an RSC environment). Additionally, all of the build artifacts now live under `./dist/` in the published package. Previous releases actually shipped separate individual transpiled source files - the build artifacts are now pre-bundled, same as the rest of the Redux libraries. ##### Modernized Build Output We now publish modern JS syntax targeting ES2020, including optional chaining, object spread, and other modern syntax. If you need to ##### Build Tooling We're now building the package using https://github.com/egoist/tsup. We also now include sourcemaps for the ESM and CJS artifacts. ##### Dropping UMD Builds Redux has always shipped with UMD build artifacts. These are primarily meant for direct import as script tags, such as in a CodePen or a no-bundler build environment. We've dropped those build artifacts from the published package, on the grounds that the use cases seem pretty rare today. There's now a `react-redux.browser.mjs` file in the package that can be loaded from a CDN like Unpkg. If you have strong use cases for us continuing to include UMD build artifacts, please let us know! ##### React Server Components Behavior Per [Mark's post "My Experience Modernizing Packages to ESM"](https://blog.isquaredsoftware.com/2023/08/esm-modernization-lessons/), one of the recent pain points has been [the rollout of React Server Components and the limits the Next.js + React teams have added to RSCs](https://blog.isquaredsoftware.com/2023/08/esm-modernization-lessons/#problems-with-next-js-and-react-server-components). We see many users try to import and use React-Redux APIs in React Server Component files, then get confused why things aren't working right. To address that, we've added a new entry point with a `"react-server"` condition. Every export in that file will throw an error as soon as it's called, to help catch this mistake earlier. ##### Dev Mode Checks Updated In [v8.1.0](https://redirect.github.com/reduxjs/react-redux/releases/tag/v8.1.0), we updated `useSelector` to accept an options object containing options to check for selectors that always calculate new values, or that always return the root state. We've renamed the `noopCheck` option to `identityFunctionCheck` for clarity. We've also changed the structure of the options object to be: ```ts export type DevModeCheckFrequency = 'never' | 'once' | 'always' export interface UseSelectorOptions { equalityFn?: EqualityFn devModeChecks?: { stabilityCheck?: DevModeCheckFrequency identityFunctionCheck?: DevModeCheckFrequency } } ``` ##### `hoist-non-react-statics` and `react-is` Deps Inlined Higher Order Components have been discouraged in the React ecosystem over the last few years. However, we still include the `connect` API. It's now in maintenance mode and not in active development. As described in [the React legacy docs on HOCs](https://legacy.reactjs.org/docs/higher-order-components.html#static-methods-must-be-copied-over), one quirk of HOCs is needing to copy over static methods to the wrapper component. The `hoist-non-react-statics` package has been the standard tool to do that. We've inlined a copy of `hoist-non-react-statics` and removed the package dep, and confirmed that this improves tree-shaking. We've also done the same with the `react-is` package as well, which was also only used by `connect`. This should have no user-facing effects. ##### TypeScript Support We've dropped support for TS 4.6 and earlier, and our support matrix is now TS 4.7+. ##### What's Changed - Update packaging, build config, and entry points for v9 by [@​markerikson](https://redirect.github.com/markerikson) in [https://github.com/reduxjs/react-redux/pull/2038](https://redirect.github.com/reduxjs/react-redux/pull/2038) - Add stack to dev mode checks by [@​EskiMojo14](https://redirect.github.com/EskiMojo14) in [https://github.com/reduxjs/react-redux/pull/2064](https://redirect.github.com/reduxjs/react-redux/pull/2064) - add an extra entrypoint for React Server Components by [@​phryneas](https://redirect.github.com/phryneas) in [https://github.com/reduxjs/react-redux/pull/2062](https://redirect.github.com/reduxjs/react-redux/pull/2062) - Inline hoist-non-react-statics to eliminate a dep and help shaking by [@​markerikson](https://redirect.github.com/markerikson) in [https://github.com/reduxjs/react-redux/pull/2066](https://redirect.github.com/reduxjs/react-redux/pull/2066) - Make context typing more accurate by [@​EskiMojo14](https://redirect.github.com/EskiMojo14) in [https://github.com/reduxjs/react-redux/pull/2041](https://redirect.github.com/reduxjs/react-redux/pull/2041) - Fix `uSES` imports and run against RTK CI examples by [@​markerikson](https://redirect.github.com/markerikson) in [https://github.com/reduxjs/react-redux/pull/2070](https://redirect.github.com/reduxjs/react-redux/pull/2070) - Copy CI setup for RTK examples by [@​markerikson](https://redirect.github.com/markerikson) in [https://github.com/reduxjs/react-redux/pull/2072](https://redirect.github.com/reduxjs/react-redux/pull/2072) - Fix useSelector() in combination with lazy loaded components breaks with react v18 ([#​1977](https://redirect.github.com/reduxjs/react-redux/issues/1977)) by [@​jeroenpx](https://redirect.github.com/jeroenpx) in [https://github.com/reduxjs/react-redux/pull/2068](https://redirect.github.com/reduxjs/react-redux/pull/2068) - Actually add `sideEffects: "false"` to `package.json` in v9 by [@​markerikson](https://redirect.github.com/markerikson) in [https://github.com/reduxjs/react-redux/pull/2079](https://redirect.github.com/reduxjs/react-redux/pull/2079) - Inline `react-is` utils to fix tree-shaking in 9.0 by [@​markerikson](https://redirect.github.com/markerikson) in [https://github.com/reduxjs/react-redux/pull/2085](https://redirect.github.com/reduxjs/react-redux/pull/2085) - Rename `noopCheck` to `identityFunctionCheck` by [@​aryaemami59](https://redirect.github.com/aryaemami59) in [https://github.com/reduxjs/react-redux/pull/2091](https://redirect.github.com/reduxjs/react-redux/pull/2091) - Use scoped JSX for React types by [@​markerikson](https://redirect.github.com/markerikson) in [https://github.com/reduxjs/react-redux/pull/2092](https://redirect.github.com/reduxjs/react-redux/pull/2092) **Full Changelog**: https://github.com/reduxjs/react-redux/compare/v8.1.2...v9.0.0
reduxjs/redux (redux) ### [`v5.0.1`](https://redirect.github.com/reduxjs/redux/releases/tag/v5.0.1) [Compare Source](https://redirect.github.com/reduxjs/redux/compare/v5.0.0...v5.0.1) This **patch release** adjusts the `isPlainObject` util to allow objects created via `Object.create(null)`, and fixes a type issue which accidentally made the store state type non-nullable. #### What's Changed - fix(isPlainObject): support check Object.create(null) by [@​zhe-he](https://redirect.github.com/zhe-he) in [https://github.com/reduxjs/redux/pull/4633](https://redirect.github.com/reduxjs/redux/pull/4633) - fix(types/store): Unexpectedly narrowed return type of function `Store['getState']` by [@​exuanbo](https://redirect.github.com/exuanbo) in [https://github.com/reduxjs/redux/pull/4638](https://redirect.github.com/reduxjs/redux/pull/4638) **Full Changelog**: https://github.com/reduxjs/redux/compare/v5.0.0...v5.0.1 ### [`v5.0.0`](https://redirect.github.com/reduxjs/redux/releases/tag/v5.0.0) [Compare Source](https://redirect.github.com/reduxjs/redux/compare/v4.2.1...v5.0.0) This **major release**: - Converts the codebase to TypeScript - Updates the packaging for better ESM/CJS compatibility and modernizes the build output - Requires that `action.type` *must* be a string - Continues to mark `createStore` as deprecated - Deprecates the `AnyAction` type in favor of an `UnknownAction` type that is used everywhere - Removes the `PreloadedState` type in favor of a new generic argument for the `Reducer` type. This release has **breaking changes**. This release is part of a wave of major versions of all the Redux packages: **Redux Toolkit 2.0, Redux core 5.0, React-Redux 9.0, Reselect 5.0, and Redux Thunk 3.0**. For full details on all of the breaking changes and other significant changes to all of those packages, see the **["Migrating to RTK 2.0 and Redux 5.0" migration guide](https://redux.js.org/usage/migrations/migrating-rtk-2)** in the Redux docs. > \[!NOTE] > The Redux core, Reselect, and Redux Thunk packages are included as part of Redux Toolkit, and RTK users do not need to manually upgrade them - you'll get them as part of the upgrade to RTK 2.0. (If you're not using Redux Toolkit yet, [**please start migrating your existing legacy Redux code to use Redux Toolkit today!**](https://redux.js.org/usage/migrating-to-modern-redux)) ```bash ### RTK npm install @​reduxjs/toolkit yarn add @​reduxjs/toolkit ### Standalone npm install redux yarn add redux ``` #### Changelog ##### ESM/CJS Package Compatibility The biggest theme of the Redux v5 and RTK 2.0 releases is trying to get "true" ESM package publishing compatibility in place, while still supporting CJS in the published package. **The primary build artifact is now an ESM file, `dist/redux.mjs`**. Most build tools should pick this up. There's also a CJS artifact, and a second copy of the ESM file named `redux.legacy-esm.js` to support Webpack 4 (which does not recognize the `exports` field in `package.json`). Additionally, all of the build artifacts now live under `./dist/` in the published package. ##### Modernized Build Output We now publish modern JS syntax targeting ES2020, including optional chaining, object spread, and other modern syntax. If you need to ##### Build Tooling We're now building the package using https://github.com/egoist/tsup. We also now include sourcemaps for the ESM and CJS artifacts. ##### Dropping UMD Builds Redux has always shipped with UMD build artifacts. These are primarily meant for direct import as script tags, such as in a CodePen or a no-bundler build environment. We've dropped those build artifacts from the published package, on the grounds that the use cases seem pretty rare today. There's now a `redux.browser.mjs` file in the package that can be loaded from a CDN like Unpkg. If you have strong use cases for us continuing to include UMD build artifacts, please let us know! ##### `createStore` Marked Deprecated In [Redux 4.2.0, we marked the original `createStore` method as `@deprecated`](https://redirect.github.com/reduxjs/redux/releases/tag/v4.2.0). Strictly speaking, **this is *not* a breaking change**, nor is it new in 5.0, but we're documenting it here for completeness. **This deprecation is solely a *visual* indicator that is meant to encourage users to [migrate their apps from legacy Redux patterns to use the modern Redux Toolkit APIs](https://redux.js.org/usage/migrating-to-modern-redux)**. The deprecation results in a **visual strikethrough** when imported and used, like **~~`createStore`~~**, but with ***no* runtime errors or warnings**. **`createStore` will continue to work indefinitely, and will *not* ever be removed**. But, today we want *all* Redux users to be using Redux Toolkit for all of their Redux logic. To fix this, there are three options: - **[Follow our strong suggestion to switch over to Redux Toolkit and `configureStore`](https://redux.js.org/usage/migrating-to-modern-redux)** - Do nothing. It's just a visual strikethrough, and it doesn't affect how your code behaves. Ignore it. - Switch to using the `legacy_createStore` API that is now exported, which is the exact same function but with no `@deprecated` tag. The simplest option is to do an aliased import rename, like `import { legacy_createStore as createStore } from 'redux'` ##### Action types *must* be strings We've always specifically told our users that [actions and state *must* be serializable](https://redux.js.org/style-guide/#do-not-put-non-serializable-values-in-state-or-actions), and that `action.type` *should* be a string. This is both to ensure that actions are serializable, and to help provide a readable action history in the Redux DevTools. `store.dispatch(action)` now specifically enforces that **`action.type` *must* be a string** and will throw an error if not, in the same way it throws an error if the action is not a plain object. In practice, this was already true 99.99% of the time and shouldn't have any effect on users (especially those using Redux Toolkit and `createSlice`), but there may be some legacy Redux codebases that opted to use Symbols as action types. ##### TypeScript Changes We've dropped support for TS 4.6 and earlier, and our support matrix is now TS 4.7+. ##### Typescript rewrite In 2019, we began a community-powered conversion of the Redux codebase to TypeScript. The original effort was discussed in [#​3500: Port to TypeScript](https://redirect.github.com/reduxjs/redux/issues/3500), and the work was integrated in PR [#​3536: Convert to TypeScript](https://redirect.github.com/reduxjs/redux/issues/3536). However, the TS-converted code sat around in the repo for several years, unused and unpublished, due to concerns about possible compatibility issues with the existing ecosystem (as well as general inertia on our part). Redux core v5 is now built from that TS-converted source code. In theory, this should be almost identical in both runtime behavior and types to the 4.x build, but it's very likely that some of the changes may cause types issues. Please report any unexpected compatibility issues!! ##### `AnyAction` deprecated in favour of `UnknownAction` The Redux TS types have always exported an `AnyAction` type, which is defined to have `{type: string}` and treat any other field as `any`. This makes it easy to write uses like `console.log(action.whatever)`, but unfortunately does not provide any meaningful type safety. We now export an `UnknownAction` type, which treats all fields other than `action.type` as `unknown`. This encourages users to write type guards that check the action object and assert its *specific* TS type. Inside of those checks, you can access a field with better type safety. `UnknownAction` is now the default any place in the Redux source that expects an action object. `AnyAction` still exists for compatibility, but has been marked as deprecated. Note that [Redux Toolkit's action creators have a `.match()` method](https://redux-toolkit.js.org/api/createAction#actioncreatormatch) that acts as a useful type guard: ```ts if (todoAdded.match(someUnknownAction)) { // action is now typed as a PayloadAction } ``` You can also use the new `isAction` util to check if an unknown value is some kind of action object. ##### `Middleware` type changed - Middleware `action` and `next` are typed as `unknown` Previously, the `next` parameter is typed as the `D` type parameter passed, and `action` is typed as the `Action` extracted from the dispatch type. Neither of these are a safe assumption: - `next` would be typed to have **all** of the dispatch extensions, including the ones earlier in the chain that would no longer apply. - Technically it would be *mostly* safe to type `next` as the default Dispatch implemented by the base redux store, however this would cause `next(action)` to error (as we cannot promise `action` is actually an `Action`) - and it wouldn't account for any following middlewares that return anything other than the action they're given when they see a specific action. - `action` is not necessarily a known action, it can be literally anything - for example a thunk would be a function with no `.type` property (so `AnyAction` would be inaccurate) We've changed `next` to be `(action: unknown) => unknown` (which is accurate, we have no idea what `next` expects or will return), and changed the `action` parameter to be `unknown` (which as above, is accurate). In order to safely interact with values or access fields inside of the `action` argument, you must first do a type guard check to narrow the type, such as `isAction(action)` or `someActionCreator.match(action)`. This new type is incompatible with the v4 `Middleware` type, so if a package's middleware is saying it's incompatible, check which version of Redux it's getting its types from! ##### `PreloadedState` type removed in favour of `Reducer` generic We've made tweaks to the TS types to improve type safety and behavior. First, the `Reducer` type now has a `PreloadedState` possible generic: ```ts type Reducer = ( state: S | PreloadedState | undefined, action: A ) => S ``` Per the explanation in [#​4491](https://redirect.github.com/reduxjs/redux/pull/4491): Why the need for this change? When the store is first created by `createStore`/`configureStore`, the initial state is set to whatever is passed as the `preloadedState` argument (or `undefined` if nothing is passed). That means that the first time that the reducer is called, it is called with the `preloadedState`. After the first call, the reducer is always passed the current state (which is `S`). For most normal reducers, `S | undefined` accurately describes what can be passed in for the `preloadedState`. However the `combineReducers` function allows for a preloaded state of `Partial | undefined`. The solution is to have a separate generic that represents what the reducer accepts for its preloaded state. That way `createStore` can then use that generic for its `preloadedState` argument. Previously, this was handled by a `$CombinedState` type, but that complicated things and led to some user-reported issues. This removes the need for `$CombinedState` altogether. This change does include some breaking changes, but overall should not have a huge impact on users upgrading in user-land: - The `Reducer`, `ReducersMapObject`, and `createStore`/`configureStore` types/function take an additional `PreloadedState` generic which defaults to `S`. - The overloads for `combineReducers` are removed in favor of a single function definition that takes the `ReducersMapObject` as its generic parameter. Removing the overloads was necessary with these changes, since sometimes it was choosing the wrong overload. - Enhancers that explicitly list the generics for the reducer will need to add the third generic. ##### Other Changes ##### Internal Listener Implementation The Redux store has always used an array to track listener callbacks, and used `listeners.findIndex` to remove listeners on unsubscribe. As we found in React-Redux, that can have perf issues when many listeners are unsubscribing at once. In React-Redux, we fixed that with a more sophisticated linked list approach. Here, we've updated the `listeners` to be stored in a `Map` instead, which has better delete performance than an array. In practice this shouldn't have any real effect, because React-Redux sets up a subscription in ``, and all nested components subscribe to that. But, nice to fix it here as well. ##### `isAction` Predicate We recently added an `isAction` predicate to RTK, then realized it's better suited for the Redux core. This can be used anywhere you have a value that *could* be a Redux action object, and you need to check if it is actually an action. This is specifically useful for use with the updated Redux middleware TS types, where the default value is now `unknown` and you need to use a type guard to tell TS that the current value is actually an action: We've also exported the `isPlainObject` util that's been in the Redux codebase for years as well. #### What's Changed Entirely too many PRs to list here, as it's been a few years since 4.2 was released :) See the diff below. **Full Changelog**: https://github.com/reduxjs/redux/compare/v4.2.1...v5.0.0
reduxjs/redux-thunk (redux-thunk) ### [`v3.1.0`](https://redirect.github.com/reduxjs/redux-thunk/releases/tag/v3.1.0) [Compare Source](https://redirect.github.com/reduxjs/redux-thunk/compare/v3.0.1...v3.1.0) This **major release**: - Updates the packaging for better ESM/CJS compatibility - Changes the package to use named exports instead of a default export This release has **breaking changes**. (Note: this actually points to v3.1.0, which includes a hotfix that was meant for 3.0.0.) This release is part of a wave of major versions of all the Redux packages: **Redux Toolkit 2.0, Redux core 5.0, React-Redux 9.0, Reselect 5.0, and Redux Thunk 3.0**. For full details on all of the breaking changes and other significant changes to all of those packages, see the **["Migrating to RTK 2.0 and Redux 5.0" migration guide](https://redux.js.org/usage/migrations/migrating-rtk-2)** in the Redux docs. > \[!NOTE] > The Redux core, Reselect, and Redux Thunk packages are included as part of Redux Toolkit, and RTK users do not need to manually upgrade them - you'll get them as part of the upgrade to RTK 2.0. (If you're not using Redux Toolkit yet, [**please start migrating your existing legacy Redux code to use Redux Toolkit today!**](https://redux.js.org/usage/migrating-to-modern-redux)) ```bash ### RTK npm install @​reduxjs/toolkit yarn add @​reduxjs/toolkit ### Standalone npm install redux-thunk yarn add redux-thunk ``` #### Changelog ##### Named Exports Instead of Default Exports The `redux-thunk` package previously used a single default export that was the thunk middleware, with an attached field named `withExtraArgument` that allowed customization. **The default export has been removed. There are now two named exports: `thunk` (the basic middleware) and `withExtraArgument`.** If you are using Redux Toolkit, this should have no effect, as RTK already handles this inside of `configureStore`. ##### ESM/CJS Package Compatibility The biggest theme of the Redux v5 and RTK 2.0 releases is trying to get "true" ESM package publishing compatibility in place, while still supporting CJS in the published package. **The primary build artifact is now an ESM file, `dist/redux-thunk.mjs`**. Most build tools should pick this up. There's also a CJS artifact, and a second copy of the ESM file named `redux-thunk.legacy-esm.js` to support Webpack 4 (which does not recognize the `exports` field in `package.json`). ##### Build Tooling We're now building the package using https://github.com/egoist/tsup. We also now include sourcemaps for the ESM and CJS artifacts. The repo has been updated to use Yarn 3 for dependencies and Vitest for running tests. ##### Dropping UMD Builds Redux has always shipped with UMD build artifacts. These are primarily meant for direct import as script tags, such as in a CodePen or a no-bundler build environment. For now, we're dropping those build artifacts from the published package, on the grounds that the use cases seem pretty rare today. Since the code is so simple, the ESM artifact can be used directly in the browser via Unpkg. If you have strong use cases for us continuing to include UMD build artifacts, please let us know! ##### `extend-redux` Typedefs Removed Redux Thunk 2.x included a `redux-thunk/extend-redux` TS-only entry point, which extended the types of `dispatch` and `bindActionCreators` to globally give them knowledge of the thunk types. We feel that global overrides from a library are an anti-pattern, and we've removed this entry point. (*Note*: this ended up being released in 3.1.0, as it was missed in the original 3.0.0 release.) Please follow our [TS setup guidelines](https://redux.js.org/tutorials/typescript-quick-start#define-root-state-and-dispatch-types) to infer the correct type of `dispatch` for your store. #### What's Changed - Migrate thunk package to ESM by [@​markerikson](https://redirect.github.com/markerikson) in [https://github.com/reduxjs/redux-thunk/pull/340](https://redirect.github.com/reduxjs/redux-thunk/pull/340) - Switch package manager to Yarn 3 and update CI jobs by [@​markerikson](https://redirect.github.com/markerikson) in [https://github.com/reduxjs/redux-thunk/pull/341](https://redirect.github.com/reduxjs/redux-thunk/pull/341) - Run RTK publish CI examples on built artifact by [@​markerikson](https://redirect.github.com/markerikson) in [https://github.com/reduxjs/redux-thunk/pull/342](https://redirect.github.com/reduxjs/redux-thunk/pull/342) - Rewrite build/test setup and hopefully fix ESM compat by [@​markerikson](https://redirect.github.com/markerikson) in [https://github.com/reduxjs/redux-thunk/pull/344](https://redirect.github.com/reduxjs/redux-thunk/pull/344) - Change artifact names to be `redux-thunk` by [@​markerikson](https://redirect.github.com/markerikson) in [https://github.com/reduxjs/redux-thunk/pull/345](https://redirect.github.com/reduxjs/redux-thunk/pull/345) - Support Webpack 4 with a "legacy ESM" artifact by [@​markerikson](https://redirect.github.com/markerikson) in [https://github.com/reduxjs/redux-thunk/pull/346](https://redirect.github.com/reduxjs/redux-thunk/pull/346) - update README and types to match named export by [@​EskiMojo14](https://redirect.github.com/EskiMojo14) in [https://github.com/reduxjs/redux-thunk/pull/347](https://redirect.github.com/reduxjs/redux-thunk/pull/347) - Bump Redux peer dep for RC and update build tooling by [@​markerikson](https://redirect.github.com/markerikson) in [https://github.com/reduxjs/redux-thunk/pull/356](https://redirect.github.com/reduxjs/redux-thunk/pull/356) - Drop the extend-redux addition by [@​markerikson](https://redirect.github.com/markerikson) in [https://github.com/reduxjs/redux-thunk/pull/357](https://redirect.github.com/reduxjs/redux-thunk/pull/357) **Full Changelog**: https://github.com/reduxjs/redux-thunk/compare/v2.4.2...v3.1.0 ### [`v3.0.1`](https://redirect.github.com/reduxjs/redux-thunk/compare/v3.0.0...v3.0.1) [Compare Source](https://redirect.github.com/reduxjs/redux-thunk/compare/v3.0.0...v3.0.1) ### [`v3.0.0`](https://redirect.github.com/reduxjs/redux-thunk/compare/v2.4.2...v3.0.0) [Compare Source](https://redirect.github.com/reduxjs/redux-thunk/compare/v2.4.2...v3.0.0)

Configuration

📅 Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 Automerge: Enabled.

Rebasing: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.

👻 Immortal: This PR will be recreated if closed unmerged. Get config help if that's undesired.


  • [ ] If you want to rebase/retry this PR, check this box

This PR was generated by Mend Renovate. View the repository job log.


Thanks for the PR!

Deployments, as required, will be available below:

Please create PRs in draft mode. Mark as ready to enable:

After merge, new images are deployed in: