reduxjs/redux
### [`v4.2.0`](https://togithub.com/reduxjs/redux/releases/tag/v4.2.0)
[Compare Source](https://togithub.com/reduxjs/redux/compare/v4.1.2...v4.2.0)
This release marks the original `createStore` API as `@deprecated` to encourage users to migrate to Redux Toolkit, and adds a new `legacy_createStore` API as an alias without the deprecation warning.
#### Goal
Redux Toolkit (the `@reduxjs/toolkit` package) is the right way for Redux users to write Redux code today:
https://redux.js.org/introduction/why-rtk-is-redux-today
Unfortunately, many tutorials are still showing legacy "hand-written" Redux patterns, which result in a much worse experience for users. New learners going through a bootcamp or an outdated Udemy course just follow the examples they're being shown, don't know that RTK is the better and recommended approach, and don't even think to look at our docs.
Given that, the goal is to provide them with a visual indicator in their editor, like ~~createStore~~ . When users hover over the `createStore` import or function call, the doc tooltip recommends using `configureStore` from RTK instead, and points them to that docs page. We hope that new learners will see the strikethrough, read the tooltip, read the docs page, learn about RTK, and begin using it.
To be *extremely* clear:
**WE ARE *NOT* GOING TO ACTUALLY REMOVE THE `createStore` API, AND ALL YOUR EXISTING CODE WILL STILL CONTINUE TO WORK AS-IS!**
We are just marking `createStore` as ["deprecated"](https://en.wikipedia.org/wiki/Deprecation#Software):
> "the discouragement of use of some feature or practice, typically because it has been superseded or is no longer considered efficient or safe, without completely removing it or prohibiting its use"
For additional details, see the extensive discussion in [https://github.com/reduxjs/redux/issues/4325](https://togithub.com/reduxjs/redux/issues/4325) .
#### Rationale
- RTK provides a vastly improved Redux usage experience, with APIs that simplify standard usage patterns and eliminate common bugs like accidental mutations
- We've had suggestions to merge all of RTK into the `redux` core package, or fully deprecate the entire `redux` package and rename it to `@reduxjs/core`. Unfortunately, those bring up too many complexities:
- We already had a package rename from `redux-starter-kit` to `@reduxjs/toolkit`, and all of our docs and tutorials have pointed to it for the last three years. I don't want to put users through another whiplash package transition for no real benefit
- Merging or rearranging our packages would effectively require merging all of the Redux repos into a single monorepo. That would require hundreds of hours of effort from us maintainers, including needing to somehow merge all of our docs sites together. We don't have the time to do that.
- I don't want to add *runtime* warnings that would be really annoying
So, this is the minimum possible approach we can take to reach out to users who otherwise would never know that they are following outdated patterns, while avoiding breaking running user code or having to completely rewrite our package and repo structure.
#### Results
When a user imports `createStore` in their editor, they will see a visual strikethrough. Hovering over it will show a doc tooltip that encourages them to use `configureStore` from RTK, and points to an explanatory docs page:
![image](https://user-images.githubusercontent.com/1128784/163880823-85d27c38-1562-45a7-9c99-6810e8790c96.png)
Again, *no* broken code, and *no* runtime warnings.
If users do not want to see that strikethrough, they have three options:
- Follow our suggestion to switch over to Redux Toolkit and `configureStore`
- 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 `@deprecation` tag. The simplest option is to do an aliased import rename:
![image](https://user-images.githubusercontent.com/1128784/163880638-5dcd2046-a417-4515-be26-b98de002f4c4.png)
#### What's Changed
- Mark `createStore` as deprecated, and add `legacy_createStore` alias by [@markerikson](https://togithub.com/markerikson) in [https://github.com/reduxjs/redux/pull/4336](https://togithub.com/reduxjs/redux/pull/4336)
**Full Changelog**: https://github.com/reduxjs/redux/compare/v4.1.2...v4.2.0
### [`v4.1.2`](https://togithub.com/reduxjs/redux/releases/tag/v4.1.2)
[Compare Source](https://togithub.com/reduxjs/redux/compare/v4.1.1...v4.1.2)
This release fixes a small specific TS types issue where state types that had a nested `unknown` field inside would cause compilation failures when used as the `preloadedState` argument.
#### What's Changed
- Fix preloaded state type by [@phryneas](https://togithub.com/phryneas) in [https://github.com/reduxjs/redux/pull/4078](https://togithub.com/reduxjs/redux/pull/4078)
**Full Changelog**: https://github.com/reduxjs/redux/compare/v4.1.1...v4.1.2
### [`v4.1.1`](https://togithub.com/reduxjs/redux/releases/tag/v4.1.1)
[Compare Source](https://togithub.com/reduxjs/redux/compare/v4.1.0...v4.1.1)
Just a small fix for Safari users in development mode.
#### [Changes](https://togithub.com/reduxjs/redux/compare/v4.1.0...v4.1.1)
- Move miniKindOf out of if scope to fix ES5 compatibility issue ([#4090](https://togithub.com/reduxjs/redux/issues/4090) by [@embeddedt](https://togithub.com/embeddedt))
### [`v4.1.0`](https://togithub.com/reduxjs/redux/releases/tag/v4.1.0)
[Compare Source](https://togithub.com/reduxjs/redux/compare/v4.0.5...v4.1.0)
This release shrinks our bundle size via error message extraction, updates several error messages for clarity, and optimizes our list of runtime dependencies.
Overall, version 4.1 shrinks from 2.6K min+gz to 1.6K min+gz thanks to these changes.
Be sure to check out [the Redux Toolkit 1.6 alpha containing our new "RTK Query" data fetching APIs!](https://togithub.com/reduxjs/redux-toolkit/releases/tag/v1.6.0-alpha.1) It also includes Redux 4.1 as a dependency.
#### Changelog
##### Error Message Extraction and Improvements
We now extract all of our error messages from production builds in order to save on bundle size, using [a technique inspired from React's error code extraction](https://reactjs.org/blog/2016/07/11/introducing-reacts-error-code-system.html). The error messages will still show as normal in development, but in production they will reference a specific numeric error code and provide a link to a Redux docs page that has the full error message.
An example of this is: https://redux.js.org/errors?code=5 , which shows the "can't subscribe while reducers are executing" error.
The error code extraction saves about 800 bytes out of a production build.
Thanks to [@andrewmcgivery](https://togithub.com/andrewmcgivery) for doing all the hard work on implementing the error extraction!
We've also updated many of our error messages to provide additional details at runtime about what happened, especially runtime type checks such as "actions must be plain objects". They now provide a more specific type for the unexpected value, such as indicating `promise` or `function`:
```js
expect(() => store.dispatch(() => {})).toThrow(
/the actual type was: 'function'/
)
expect(() => store.dispatch(new Date())).toThrow(
/the actual type was: 'date'/
)
```
##### Dependency Updates
We've updated the list of runtime dependencies for Redux:
- We inlined the `symbol-observable` polyfill. This shrinks bundle size by a few bytes,
- We've removed the legacy `loose-envify` dependency, which was only ever needed by Browserify users. If you still happen to be using Browserify, please review your build settings and see if you need to make any updates.
- We now explicitly depend on `@babel/runtime` to extract some additional helpers out of our bundle. It's likely that your app already is pulling in those helpers anyway, so that removes some potential duplication.
##### Typing Tweaks
We've merged fixes for a couple edge cases in the 4.x TS typings related to state types.
#### [Changes](https://togithub.com/reduxjs/redux/compare/v4.0.5...v4.1.0)
- Remove symbol-observable and loose-envify deps ([#4058](https://togithub.com/reduxjs/redux/issues/4058) - [@markerikson](https://togithub.com/markerikson))
- Port error extraction setup from master ([#4057](https://togithub.com/reduxjs/redux/issues/4057) - [@markerikson](https://togithub.com/markerikson))
- Port build dependencies from master into 4.x ([#4056](https://togithub.com/reduxjs/redux/issues/4056) - [@markerikson](https://togithub.com/markerikson))
- Rewrite Redux core error messages ([#4055](https://togithub.com/reduxjs/redux/issues/4055) - [@markerikson](https://togithub.com/markerikson))
- feat: mangle error codes to error indexes ([#3920](https://togithub.com/reduxjs/redux/issues/3920) - [@andrewmcgivery](https://togithub.com/andrewmcgivery))
- fix: Declare "EmptyObject" interface to wrap $CombinedState ([#4031](https://togithub.com/reduxjs/redux/issues/4031) - [@JacobLey](https://togithub.com/JacobLey))
- Only apply mapped types to un-branded types ([#3805](https://togithub.com/reduxjs/redux/issues/3805) - [@invliD](https://togithub.com/invliD))
### [`v4.0.5`](https://togithub.com/reduxjs/redux/releases/tag/v4.0.5)
[Compare Source](https://togithub.com/reduxjs/redux/compare/v4.0.4...v4.0.5)
This release includes a memory leak fix, and a fix for removing reducers with replaceReducer and combineReducers.
There are also some TypeScript changes, which require version 3.5 or higher. This also removes our `DeepPartial` type, which wasn't intended to be a public API. If you need this type, you can find an equivalent of likely higher quality in the `utility-types` package.
Speaking of TypeScript, we are done with converting the code to TypeScript on `master` and are looking to get some TS improvements in before launching 5.0. If you're interested in helping, feel free to submit a PR with anything you'd like to contribute.
#### [Changes](https://togithub.com/reactjs/redux/compare/v4.0.4...v4.0.5)
- Clear current listeners on store unsubscribe ([#3475](https://togithub.com/reduxjs/redux/issues/3475) by [@dmitrysteblyuk](https://togithub.com/dmitrysteblyuk))
- Fix for combineReducers when replaceReducers removes a reducer ([#3490](https://togithub.com/reduxjs/redux/issues/3490) by [@anubhavgupta](https://togithub.com/anubhavgupta))
- *TypeScript:* Add strict type inference overload for combineReducers ([#3484](https://togithub.com/reduxjs/redux/issues/3484) by [@ChrisAckerman](https://togithub.com/ChrisAckerman))
- *TypeScript:* Preloaded state is now selectively partial (instead of deeply partial) ([#3485](https://togithub.com/reduxjs/redux/issues/3485) by [@ChrisAckerman](https://togithub.com/ChrisAckerman))
Configuration
📅 Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about this update again.
[ ] If you want to rebase/retry this PR, click this checkbox.
This PR has been generated by Mend Renovate. View repository job log here.
This PR contains the following updates:
^4.0.4
->4.2.0
Release Notes
reduxjs/redux
### [`v4.2.0`](https://togithub.com/reduxjs/redux/releases/tag/v4.2.0) [Compare Source](https://togithub.com/reduxjs/redux/compare/v4.1.2...v4.2.0) This release marks the original `createStore` API as `@deprecated` to encourage users to migrate to Redux Toolkit, and adds a new `legacy_createStore` API as an alias without the deprecation warning. #### Goal Redux Toolkit (the `@reduxjs/toolkit` package) is the right way for Redux users to write Redux code today: https://redux.js.org/introduction/why-rtk-is-redux-today Unfortunately, many tutorials are still showing legacy "hand-written" Redux patterns, which result in a much worse experience for users. New learners going through a bootcamp or an outdated Udemy course just follow the examples they're being shown, don't know that RTK is the better and recommended approach, and don't even think to look at our docs. Given that, the goal is to provide them with a visual indicator in their editor, like ~~createStore~~ . When users hover over the `createStore` import or function call, the doc tooltip recommends using `configureStore` from RTK instead, and points them to that docs page. We hope that new learners will see the strikethrough, read the tooltip, read the docs page, learn about RTK, and begin using it. To be *extremely* clear: **WE ARE *NOT* GOING TO ACTUALLY REMOVE THE `createStore` API, AND ALL YOUR EXISTING CODE WILL STILL CONTINUE TO WORK AS-IS!** We are just marking `createStore` as ["deprecated"](https://en.wikipedia.org/wiki/Deprecation#Software): > "the discouragement of use of some feature or practice, typically because it has been superseded or is no longer considered efficient or safe, without completely removing it or prohibiting its use" For additional details, see the extensive discussion in [https://github.com/reduxjs/redux/issues/4325](https://togithub.com/reduxjs/redux/issues/4325) . #### Rationale - RTK provides a vastly improved Redux usage experience, with APIs that simplify standard usage patterns and eliminate common bugs like accidental mutations - We've had suggestions to merge all of RTK into the `redux` core package, or fully deprecate the entire `redux` package and rename it to `@reduxjs/core`. Unfortunately, those bring up too many complexities: - We already had a package rename from `redux-starter-kit` to `@reduxjs/toolkit`, and all of our docs and tutorials have pointed to it for the last three years. I don't want to put users through another whiplash package transition for no real benefit - Merging or rearranging our packages would effectively require merging all of the Redux repos into a single monorepo. That would require hundreds of hours of effort from us maintainers, including needing to somehow merge all of our docs sites together. We don't have the time to do that. - I don't want to add *runtime* warnings that would be really annoying So, this is the minimum possible approach we can take to reach out to users who otherwise would never know that they are following outdated patterns, while avoiding breaking running user code or having to completely rewrite our package and repo structure. #### Results When a user imports `createStore` in their editor, they will see a visual strikethrough. Hovering over it will show a doc tooltip that encourages them to use `configureStore` from RTK, and points to an explanatory docs page: ![image](https://user-images.githubusercontent.com/1128784/163880823-85d27c38-1562-45a7-9c99-6810e8790c96.png) Again, *no* broken code, and *no* runtime warnings. If users do not want to see that strikethrough, they have three options: - Follow our suggestion to switch over to Redux Toolkit and `configureStore` - 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 `@deprecation` tag. The simplest option is to do an aliased import rename: ![image](https://user-images.githubusercontent.com/1128784/163880638-5dcd2046-a417-4515-be26-b98de002f4c4.png) #### What's Changed - Mark `createStore` as deprecated, and add `legacy_createStore` alias by [@markerikson](https://togithub.com/markerikson) in [https://github.com/reduxjs/redux/pull/4336](https://togithub.com/reduxjs/redux/pull/4336) **Full Changelog**: https://github.com/reduxjs/redux/compare/v4.1.2...v4.2.0 ### [`v4.1.2`](https://togithub.com/reduxjs/redux/releases/tag/v4.1.2) [Compare Source](https://togithub.com/reduxjs/redux/compare/v4.1.1...v4.1.2) This release fixes a small specific TS types issue where state types that had a nested `unknown` field inside would cause compilation failures when used as the `preloadedState` argument. #### What's Changed - Fix preloaded state type by [@phryneas](https://togithub.com/phryneas) in [https://github.com/reduxjs/redux/pull/4078](https://togithub.com/reduxjs/redux/pull/4078) **Full Changelog**: https://github.com/reduxjs/redux/compare/v4.1.1...v4.1.2 ### [`v4.1.1`](https://togithub.com/reduxjs/redux/releases/tag/v4.1.1) [Compare Source](https://togithub.com/reduxjs/redux/compare/v4.1.0...v4.1.1) Just a small fix for Safari users in development mode. #### [Changes](https://togithub.com/reduxjs/redux/compare/v4.1.0...v4.1.1) - Move miniKindOf out of if scope to fix ES5 compatibility issue ([#4090](https://togithub.com/reduxjs/redux/issues/4090) by [@embeddedt](https://togithub.com/embeddedt)) ### [`v4.1.0`](https://togithub.com/reduxjs/redux/releases/tag/v4.1.0) [Compare Source](https://togithub.com/reduxjs/redux/compare/v4.0.5...v4.1.0) This release shrinks our bundle size via error message extraction, updates several error messages for clarity, and optimizes our list of runtime dependencies. Overall, version 4.1 shrinks from 2.6K min+gz to 1.6K min+gz thanks to these changes. Be sure to check out [the Redux Toolkit 1.6 alpha containing our new "RTK Query" data fetching APIs!](https://togithub.com/reduxjs/redux-toolkit/releases/tag/v1.6.0-alpha.1) It also includes Redux 4.1 as a dependency. #### Changelog ##### Error Message Extraction and Improvements We now extract all of our error messages from production builds in order to save on bundle size, using [a technique inspired from React's error code extraction](https://reactjs.org/blog/2016/07/11/introducing-reacts-error-code-system.html). The error messages will still show as normal in development, but in production they will reference a specific numeric error code and provide a link to a Redux docs page that has the full error message. An example of this is: https://redux.js.org/errors?code=5 , which shows the "can't subscribe while reducers are executing" error. The error code extraction saves about 800 bytes out of a production build. Thanks to [@andrewmcgivery](https://togithub.com/andrewmcgivery) for doing all the hard work on implementing the error extraction! We've also updated many of our error messages to provide additional details at runtime about what happened, especially runtime type checks such as "actions must be plain objects". They now provide a more specific type for the unexpected value, such as indicating `promise` or `function`: ```js expect(() => store.dispatch(() => {})).toThrow( /the actual type was: 'function'/ ) expect(() => store.dispatch(new Date())).toThrow( /the actual type was: 'date'/ ) ``` ##### Dependency Updates We've updated the list of runtime dependencies for Redux: - We inlined the `symbol-observable` polyfill. This shrinks bundle size by a few bytes, - We've removed the legacy `loose-envify` dependency, which was only ever needed by Browserify users. If you still happen to be using Browserify, please review your build settings and see if you need to make any updates. - We now explicitly depend on `@babel/runtime` to extract some additional helpers out of our bundle. It's likely that your app already is pulling in those helpers anyway, so that removes some potential duplication. ##### Typing Tweaks We've merged fixes for a couple edge cases in the 4.x TS typings related to state types. #### [Changes](https://togithub.com/reduxjs/redux/compare/v4.0.5...v4.1.0) - Remove symbol-observable and loose-envify deps ([#4058](https://togithub.com/reduxjs/redux/issues/4058) - [@markerikson](https://togithub.com/markerikson)) - Port error extraction setup from master ([#4057](https://togithub.com/reduxjs/redux/issues/4057) - [@markerikson](https://togithub.com/markerikson)) - Port build dependencies from master into 4.x ([#4056](https://togithub.com/reduxjs/redux/issues/4056) - [@markerikson](https://togithub.com/markerikson)) - Rewrite Redux core error messages ([#4055](https://togithub.com/reduxjs/redux/issues/4055) - [@markerikson](https://togithub.com/markerikson)) - feat: mangle error codes to error indexes ([#3920](https://togithub.com/reduxjs/redux/issues/3920) - [@andrewmcgivery](https://togithub.com/andrewmcgivery)) - fix: Declare "EmptyObject" interface to wrap $CombinedState ([#4031](https://togithub.com/reduxjs/redux/issues/4031) - [@JacobLey](https://togithub.com/JacobLey)) - Only apply mapped types to un-branded types ([#3805](https://togithub.com/reduxjs/redux/issues/3805) - [@invliD](https://togithub.com/invliD)) ### [`v4.0.5`](https://togithub.com/reduxjs/redux/releases/tag/v4.0.5) [Compare Source](https://togithub.com/reduxjs/redux/compare/v4.0.4...v4.0.5) This release includes a memory leak fix, and a fix for removing reducers with replaceReducer and combineReducers. There are also some TypeScript changes, which require version 3.5 or higher. This also removes our `DeepPartial` type, which wasn't intended to be a public API. If you need this type, you can find an equivalent of likely higher quality in the `utility-types` package. Speaking of TypeScript, we are done with converting the code to TypeScript on `master` and are looking to get some TS improvements in before launching 5.0. If you're interested in helping, feel free to submit a PR with anything you'd like to contribute. #### [Changes](https://togithub.com/reactjs/redux/compare/v4.0.4...v4.0.5) - Clear current listeners on store unsubscribe ([#3475](https://togithub.com/reduxjs/redux/issues/3475) by [@dmitrysteblyuk](https://togithub.com/dmitrysteblyuk)) - Fix for combineReducers when replaceReducers removes a reducer ([#3490](https://togithub.com/reduxjs/redux/issues/3490) by [@anubhavgupta](https://togithub.com/anubhavgupta)) - *TypeScript:* Add strict type inference overload for combineReducers ([#3484](https://togithub.com/reduxjs/redux/issues/3484) by [@ChrisAckerman](https://togithub.com/ChrisAckerman)) - *TypeScript:* Preloaded state is now selectively partial (instead of deeply partial) ([#3485](https://togithub.com/reduxjs/redux/issues/3485) by [@ChrisAckerman](https://togithub.com/ChrisAckerman))Configuration
📅 Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about this update again.
This PR has been generated by Mend Renovate. View repository job log here.