Skip to content

Commit df24e25

Browse files
authored
Update Immer dep to 10.2 and disable strict iteration for perf (#5127)
* Update Immer dep to 10.2 * Specifically disable Immer strict iteration for perf
1 parent 9392c4c commit df24e25

File tree

3 files changed

+22
-3
lines changed

3 files changed

+22
-3
lines changed

packages/toolkit/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -261,7 +261,7 @@
261261
"dependencies": {
262262
"@standard-schema/spec": "^1.0.0",
263263
"@standard-schema/utils": "^0.3.0",
264-
"immer": "^10.0.3",
264+
"immer": "^10.2.0",
265265
"redux": "^5.0.1",
266266
"redux-thunk": "^3.1.0",
267267
"reselect": "^5.1.0"

packages/toolkit/src/createReducer.ts

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,23 @@
11
import type { Draft } from 'immer'
2-
import { produce as createNextState, isDraft, isDraftable } from 'immer'
2+
import {
3+
produce as createNextState,
4+
isDraft,
5+
isDraftable,
6+
setUseStrictIteration,
7+
} from 'immer'
38
import type { Action, Reducer, UnknownAction } from 'redux'
49
import type { ActionReducerMapBuilder } from './mapBuilders'
510
import { executeReducerBuilderCallback } from './mapBuilders'
611
import type { NoInfer, TypeGuard } from './tsHelpers'
712
import { freezeDraftable } from './utils'
813

14+
// Immer 10.2 defaults to still using strict iteration (specifically
15+
// `Reflect.ownKeys()` for symbols support). However, we assume that
16+
// Redux users are not using symbols as state keys, so we'll override
17+
// this to prefer `Object.keys()` instead, as it provides a ~10% speedup.
18+
// If users do need symbol support, they can call `setUseStrictIteration(true)` themselves.
19+
setUseStrictIteration(false)
20+
921
/**
1022
* Defines a mapping from action types to corresponding action object shapes.
1123
*

yarn.lock

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7695,7 +7695,7 @@ __metadata:
76957695
eslint-plugin-react: "npm:^7.23.2"
76967696
eslint-plugin-react-hooks: "npm:^4.2.0"
76977697
fs-extra: "npm:^9.1.0"
7698-
immer: "npm:^10.0.3"
7698+
immer: "npm:^10.2.0"
76997699
invariant: "npm:^2.2.4"
77007700
jsdom: "npm:^25.0.1"
77017701
json-stringify-safe: "npm:^5.0.1"
@@ -18728,6 +18728,13 @@ __metadata:
1872818728
languageName: node
1872918729
linkType: hard
1873018730

18731+
"immer@npm:^10.2.0":
18732+
version: 10.2.0
18733+
resolution: "immer@npm:10.2.0"
18734+
checksum: 10/d73e218c8f8ffbb39f9290dfafa478b94af73403dcf26b5672eef35233bb30f09ffe231f8a78a6c9cb442968510edd89e851776ec90a5ddfa82cee6db6b35137
18735+
languageName: node
18736+
linkType: hard
18737+
1873118738
"immer@npm:^9.0.21, immer@npm:^9.0.7":
1873218739
version: 9.0.21
1873318740
resolution: "immer@npm:9.0.21"

0 commit comments

Comments
 (0)