Skip to content
8fa4bd4
Compare
Choose a tag to compare

v5.0.0-alpha.0

Pre-release
Pre-release

Shameless plug: I'm working on a new company called Spaceship 🚀 It's a tool to launch your code anywhere in one click. Check it out!


⚠️ This is an experimental alpha release. Things may break. If they do, let us know! ⚠️

This release contains the TypeScript codebase conversion work we did in 2019, to let users check compatibility and see if this is suitable for publishing.

Changelog

TypeScript Conversion

In 2019, we began a community-powered conversion of the Redux codebase to TypeScript. The original effort was discussed in #3500: Port to TypeScript, and the work was integrated in PR #3536: Convert to TypeScript.

However, the TS-converted code in master has sat around since then, unused and unpublished, due to concerns about possible compatibility issues with the existing ecosystem (as well as general inertia on our part).

Given the recent updates to Reselect and Redux Thunk, where we successfully published new minor builds that contained conversions to TS and significant rewrites/improvements to the TS types, it's worth publishing the current conversion as an alpha to give the community a chance to report any compatibility issues.

In theory, this should be almost identical in both runtime behavior and types to the recently released 4.1.2 build, but it's very likely that some of the changes may cause types issues.

Please try this out and let us know how it works! We're especially interested in any TS types compatibility issues you might see.

You can provide feedback in #4129: Evaluate current Redux TS port status to determine remaining work for a 5.0 release

Changelog

Compare
Choose a tag to compare

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

Full Changelog: v4.1.1...v4.1.2

4d0730e
Compare
Choose a tag to compare

Just a small fix for Safari users in development mode.

Changes

  • Move miniKindOf out of if scope to fix ES5 compatibility issue (#4090 by @embeddedt)
Compare
Choose a tag to compare

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! 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. 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 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:

    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

Compare
Choose a tag to compare

v4.1.0-alpha.0

Pre-release
Pre-release

This pre-release for 4.1.0 shrinks our bundle size via tooling updates, and updates several error messages for clarity. This is all the changes we plan to have for 4.1, so if feedback looks good, we'll release 4.1.0 shortly.

Changelog Summary

The 4.1.0 release will have a more complete changelog, but summarizing:

  • Shrinks our bundle sizes by extracting error messages from production builds and replacing them with error codes (similar to React). Thanks to @andrewmcgivery for implementing this!
  • Inlines the symbol-observable polyfill
  • Drops the legacy loose-envify dependency
  • Externalizes the @babel/runtime helpers
  • Fixed a TS typedef to work better with TS 4.3

We've also updated the error messages to clarify what's happening, provide more details when runtime type checks fail, and link to relevant documentation.

Changes

  • Merge pull request #4058 from reduxjs/feature/4x-remove-legacy-deps 9a1d065
  • Inline the symbol-observable polyfill 0d7d94d
  • Remove symbol-observable and loose-envify deps b882d9a
  • Merge pull request #4057 from reduxjs/feature/4x-error-messages f3680b5
  • Port error message updates from master 46f5c94
  • Port error extraction setup from master 05d5505
  • Merge pull request #4056 from reduxjs/feature/4x-update-build-tooling 82ad636
  • fix: Declare "EmptyObject" interface to wrap $CombinedState (#4031) c3cbe2e
  • Only apply mapped types to un-branded types (#3805) e23aa59

v4.0.5...v4.1.0-alpha.0

45281b6
Compare
Choose a tag to compare

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

8aca937
Compare
Choose a tag to compare

This is a republish of 4.0.3 with an updated version of Babel to fix #3468

Changes

d4ceb7e
Compare
Choose a tag to compare

This is a quick revert of a change to our typings that broke compatibility. Apologies for the problems.

Also, if you are experiencing type errors related to [Symbol.observable], please ensure you have the same version of redux installed for all your dependencies with npm ls redux.

Changes

  • Reverts the change to combineReducers' type parameters (#3467 by @timdorr)
5893473
Compare
Choose a tag to compare

This is a very minor release with some nice improvements to our TypeScript type definitions. Enjoy!

Changes

c5d87d9
Compare
Choose a tag to compare

A very minor release. We've upgraded to Babel 7 internally and now provide a .mjs file which you can import cleanly into browsers that support ES modules natively. Enjoy!

Changes