From 247ec73015a3864d5d1431c4223b851c2e768d58 Mon Sep 17 00:00:00 2001 From: Benjamin Grant Date: Mon, 20 Jul 2026 16:09:38 +0100 Subject: [PATCH 1/2] Bump to redux v5 --- package-lock.json | 119 ++++++++++++++++++------------------ package.json | 6 +- webpack.dev.config.babel.js | 1 - 3 files changed, 62 insertions(+), 64 deletions(-) diff --git a/package-lock.json b/package-lock.json index 8168bc44960..f85b602fe44 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,7 +9,7 @@ "license": "MPL-2.0", "dependencies": { "@mozilla-protocol/tokens": "7.0.0", - "@reduxjs/toolkit": "1.9.7", + "@reduxjs/toolkit": "2.12.0", "@willdurand/isomorphic-formdata": "2.2.0", "addons-moz-compare": "1.3.0", "base62": "2.0.2", @@ -60,14 +60,14 @@ "react-onclickoutside": "6.13.2", "react-photoswipe-gallery": "4.0.0", "react-qr-code": "2.2.0", - "react-redux": "8.1.3", + "react-redux": "9.3.0", "react-router": "5.3.4", "react-router-dom": "5.3.4", "react-super-responsive-table": "6.0.2", "react-textarea-autosize": "8.5.9", "react-transition-group": "4.4.5", "readable-stream": "4.7.0", - "redux": "4.2.1", + "redux": "5.0.1", "redux-first-history": "5.2.0", "redux-logger": "3.0.6", "redux-saga": "1.5.0", @@ -4007,17 +4007,21 @@ "license": "MIT" }, "node_modules/@reduxjs/toolkit": { - "version": "1.9.7", + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/@reduxjs/toolkit/-/toolkit-2.12.0.tgz", + "integrity": "sha512-KiT+RzZbp6mQET+Mg+h2c97+9j1sNflUxQkIHI7Yuzf6Peu+OYpmkn6nbHWmLLWj+1ZODUJFwGZ7gx3L9R9EOw==", "license": "MIT", "dependencies": { - "immer": "^9.0.21", - "redux": "^4.2.1", - "redux-thunk": "^2.4.2", - "reselect": "^4.1.8" + "@standard-schema/spec": "^1.0.0", + "@standard-schema/utils": "^0.3.0", + "immer": "^11.0.0", + "redux": "^5.0.1", + "redux-thunk": "^3.1.0", + "reselect": "^5.1.0" }, "peerDependencies": { - "react": "^16.9.0 || ^17.0.0 || ^18", - "react-redux": "^7.2.1 || ^8.0.2" + "react": "^16.9.0 || ^17.0.0 || ^18 || ^19", + "react-redux": "^7.2.1 || ^8.1.3 || ^9.0.0" }, "peerDependenciesMeta": { "react": { @@ -4073,6 +4077,18 @@ "node": ">=4" } }, + "node_modules/@standard-schema/spec": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.1.0.tgz", + "integrity": "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==", + "license": "MIT" + }, + "node_modules/@standard-schema/utils": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@standard-schema/utils/-/utils-0.3.0.tgz", + "integrity": "sha512-e7Mew686owMaPJVNNLs55PUvgz371nKgwsc4vxE49zsODpJEnxgxRo2y/OKrqueavXgZNMDVj3DdHFlaSAeU8g==", + "license": "MIT" + }, "node_modules/@testing-library/dom": { "version": "10.4.1", "dev": true, @@ -4285,31 +4301,23 @@ "dev": true, "license": "MIT" }, - "node_modules/@types/prop-types": { - "version": "15.7.5", - "license": "MIT" - }, "node_modules/@types/react": { - "version": "17.0.93", + "version": "19.2.17", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.17.tgz", + "integrity": "sha512-MXfmqaVPEVgkBT/aY0aGCkRWWtByiYQXo3xdQ8r5RzuFrPiRn8Gar2tQdXSUQ2GKV3bkXckek89V8wQBY2Q/Aw==", "license": "MIT", "dependencies": { - "@types/prop-types": "*", - "@types/scheduler": "^0.16", "csstype": "^3.2.2" } }, "node_modules/@types/react-dom": { "version": "18.0.9", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@types/react": "*" } }, - "node_modules/@types/scheduler": { - "version": "0.16.2", - "license": "MIT" - }, "node_modules/@types/stack-utils": { "version": "2.0.3", "dev": true, @@ -4328,7 +4336,9 @@ "optional": true }, "node_modules/@types/use-sync-external-store": { - "version": "0.0.3", + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/@types/use-sync-external-store/-/use-sync-external-store-0.0.6.tgz", + "integrity": "sha512-zFDAD+tlpf2r4asuHEj0XH6pY6i0g5NeAHPn+15wk3BV6JA69eERFXC1gyGThDkVa1zCyKr5jox1+2LbV/AMLg==", "license": "MIT" }, "node_modules/@types/yargs": { @@ -9827,7 +9837,9 @@ "license": "MIT" }, "node_modules/immer": { - "version": "9.0.21", + "version": "11.1.15", + "resolved": "https://registry.npmjs.org/immer/-/immer-11.1.15.tgz", + "integrity": "sha512-VrNANlmnWQnh5COXIIOQXM9oOJw7naGKlBT74ZOOR6lpVXc3gFEu9FJLDFcpCJ2j+NWr8TIwtWD//T6ZX6TKiQ==", "license": "MIT", "funding": { "type": "opencollective", @@ -14862,46 +14874,28 @@ } }, "node_modules/react-redux": { - "version": "8.1.3", + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-9.3.0.tgz", + "integrity": "sha512-KQopgqFo/p/fgmAs5qz6p5RWaNAzq40WAu7fJIXnQpYxFPbJYtsJPWvGeF2rOBaY/kEuV77AVsX8TsQzKm+A/g==", "license": "MIT", "dependencies": { - "@babel/runtime": "^7.12.1", - "@types/hoist-non-react-statics": "^3.3.1", - "@types/use-sync-external-store": "^0.0.3", - "hoist-non-react-statics": "^3.3.2", - "react-is": "^18.0.0", - "use-sync-external-store": "^1.0.0" + "@types/use-sync-external-store": "^0.0.6", + "use-sync-external-store": "^1.4.0" }, "peerDependencies": { - "@types/react": "^16.8 || ^17.0 || ^18.0", - "@types/react-dom": "^16.8 || ^17.0 || ^18.0", - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0", - "react-native": ">=0.59", - "redux": "^4 || ^5.0.0-beta.0" + "@types/react": "^18.2.25 || ^19", + "react": "^18.0 || ^19", + "redux": "^5.0.0" }, "peerDependenciesMeta": { "@types/react": { "optional": true }, - "@types/react-dom": { - "optional": true - }, - "react-dom": { - "optional": true - }, - "react-native": { - "optional": true - }, "redux": { "optional": true } } }, - "node_modules/react-redux/node_modules/react-is": { - "version": "18.2.0", - "license": "MIT" - }, "node_modules/react-router": { "version": "5.3.4", "license": "MIT", @@ -15112,11 +15106,10 @@ } }, "node_modules/redux": { - "version": "4.2.1", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.9.2" - } + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/redux/-/redux-5.0.1.tgz", + "integrity": "sha512-M9/ELqF6fy8FwmkpnF0S3YKOqMyoWJ4+CS5Efg2ct3oY9daQvd/Pc71FpGZsVsbl3Cpb+IIcjBDUnnyBdQbq4w==", + "license": "MIT" }, "node_modules/redux-first-history": { "version": "5.2.0", @@ -15150,10 +15143,12 @@ } }, "node_modules/redux-thunk": { - "version": "2.4.2", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/redux-thunk/-/redux-thunk-3.1.0.tgz", + "integrity": "sha512-NW2r5T6ksUKXCabzhL9z+h206HQw/NJkcLm1GPImRQ8IzfXwRGqjVhKJGauHirT0DAuyy6hjdnMZaRoAcy0Klw==", "license": "MIT", "peerDependencies": { - "redux": "^4" + "redux": "^5.0.0" } }, "node_modules/reflect.getprototypeof": { @@ -15398,7 +15393,9 @@ "license": "MIT" }, "node_modules/reselect": { - "version": "4.1.8", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/reselect/-/reselect-5.2.0.tgz", + "integrity": "sha512-AgZ3UOZm3YndfrJ4OYjgrT7bmCm/1iqkjvEfH/oYjzh6PD2qw4QuT3jjnXIrpdt4MTpMXclMT3lXbmRY+XRakw==", "license": "MIT" }, "node_modules/resize-observer-polyfill": { @@ -18234,10 +18231,12 @@ } }, "node_modules/use-sync-external-store": { - "version": "1.2.0", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.6.0.tgz", + "integrity": "sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w==", "license": "MIT", "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "node_modules/util-deprecate": { diff --git a/package.json b/package.json index f3d1c3d9f48..25e824ab6ec 100644 --- a/package.json +++ b/package.json @@ -161,7 +161,7 @@ "homepage": "https://github.com/mozilla/addons-frontend#readme", "dependencies": { "@mozilla-protocol/tokens": "7.0.0", - "@reduxjs/toolkit": "1.9.7", + "@reduxjs/toolkit": "2.12.0", "@willdurand/isomorphic-formdata": "2.2.0", "addons-moz-compare": "1.3.0", "base62": "2.0.2", @@ -212,14 +212,14 @@ "react-onclickoutside": "6.13.2", "react-photoswipe-gallery": "4.0.0", "react-qr-code": "2.2.0", - "react-redux": "8.1.3", + "react-redux": "9.3.0", "react-router": "5.3.4", "react-router-dom": "5.3.4", "react-super-responsive-table": "6.0.2", "react-textarea-autosize": "8.5.9", "react-transition-group": "4.4.5", "readable-stream": "4.7.0", - "redux": "4.2.1", + "redux": "5.0.1", "redux-first-history": "5.2.0", "redux-logger": "3.0.6", "redux-saga": "1.5.0", diff --git a/webpack.dev.config.babel.js b/webpack.dev.config.babel.js index 21908f12f0d..e79ed59fddf 100644 --- a/webpack.dev.config.babel.js +++ b/webpack.dev.config.babel.js @@ -66,7 +66,6 @@ export default { // /^react-dom$/, // 'react-dom/umd/react-dom.development.js', // ), - new webpack.NormalModuleReplacementPlugin(/^redux$/, 'redux/dist/redux.js'), new webpack.HotModuleReplacementPlugin(), new webpack.IgnorePlugin({ resourceRegExp: /webpack-stats\.json$/ }), webpackIsomorphicToolsPlugin.development(), From 35f2de404112a4432e5aae6c3103b9d0e48ae5ff Mon Sep 17 00:00:00 2001 From: Benjamin Grant Date: Tue, 21 Jul 2026 13:28:40 +0100 Subject: [PATCH 2/2] Remove plugin unminified comments from webpack.dev --- webpack.dev.config.babel.js | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/webpack.dev.config.babel.js b/webpack.dev.config.babel.js index e79ed59fddf..bb7b1addc43 100644 --- a/webpack.dev.config.babel.js +++ b/webpack.dev.config.babel.js @@ -50,22 +50,6 @@ export default { }, plugins: [ ...getPlugins(), - // Load unminified React and Redux in development to get better error - // messages, because they use - // [Invariant](https://github.com/zertosh/invariant) which hides error - // messages in the production build. - // - // We can no longer load the React versions from /umd/ as it no longer - // exists. - // See https://github.com/mozilla/addons-frontend/issues/11737 - // new webpack.NormalModuleReplacementPlugin( - // /^react$/, - // 'react/umd/react.development.js', - // ), - // new webpack.NormalModuleReplacementPlugin( - // /^react-dom$/, - // 'react-dom/umd/react-dom.development.js', - // ), new webpack.HotModuleReplacementPlugin(), new webpack.IgnorePlugin({ resourceRegExp: /webpack-stats\.json$/ }), webpackIsomorphicToolsPlugin.development(),