Repository navigation
pkg: Update react-native to 0.88 - #4401
Conversation
Take react-native's jest aliases from @react-native/jest-preset instead of copying them: 0.88 adds the exports-only react-native/react-private-interface entry, which the copied mapper resolved as a missing directory. React Native 0.88 bundles the React 19.3 renderer, so the native job runs the ReactNative suites on the installed React and only then downgrades to 19.2.3 for the previous-minor ReactDOM suites. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DtLiYpnhzjcWBNPipb6j8W
|
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
There was a problem hiding this comment.
Benchmark Spread
Details
| Benchmark suite | Current: bbe1d8a | Previous: a50e3aa | Ratio |
|---|---|---|---|
setOneEntity in 10k entity store |
195 ops/sec (±0.82%) |
150 ops/sec (±0.58%) |
0.77 |
This comment was automatically generated by workflow using github-action-benchmark.
|
Size Change: 0 B Total Size: 112 kB ℹ️ View Unchanged
|
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## master #4401 +/- ##
=======================================
Coverage 98.37% 98.37%
=======================================
Files 161 161
Lines 3072 3072
Branches 604 604
=======================================
Hits 3022 3022
Misses 10 10
Partials 40 40 ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
There was a problem hiding this comment.
Benchmark React
Details
| Benchmark suite | Current: bbe1d8a | Previous: a50e3aa | Ratio |
|---|---|---|---|
data-client: getlist-100 |
198.04 ops/s (± 7.9%) |
151.52 ops/s (± 9.3%) |
0.77 |
data-client: getlist-500 |
65.79 ops/s (± 3.1%) |
52.91 ops/s (± 3.4%) |
0.80 |
data-client: update-entity |
454.55 ops/s (± 7.4%) |
339.08 ops/s (± 7.0%) |
0.75 |
data-client: update-user |
416.67 ops/s (± 8.0%) |
384.62 ops/s (± 7.9%) |
0.92 |
data-client: getlist-500-sorted |
52.08 ops/s (± 7.3%) |
52.22 ops/s (± 8.3%) |
1.00 |
data-client: update-entity-sorted |
339.08 ops/s (± 7.7%) |
281.75 ops/s (± 7.8%) |
0.83 |
data-client: update-entity-multi-view |
345.24 ops/s (± 4.7%) |
322.58 ops/s (± 6.1%) |
0.93 |
data-client: list-detail-switch-10 |
15.53 ops/s (± 9.0%) |
10.8 ops/s (± 7.5%) |
0.70 |
data-client: update-user-10000 |
93.9 ops/s (± 8.4%) |
85.11 ops/s (± 10.7%) |
0.91 |
data-client: invalidate-and-resolve |
52.63 ops/s (± 4.9%) |
41.5 ops/s (± 5.8%) |
0.79 |
data-client: unshift-item |
303.03 ops/s (± 2.0%) |
227.27 ops/s (± 5.5%) |
0.75 |
data-client: delete-item |
454.55 ops/s (± 7.8%) |
363.76 ops/s (± 9.8%) |
0.80 |
data-client: move-item |
200 ops/s (± 8.1%) |
183.5 ops/s (± 6.7%) |
0.92 |
This comment was automatically generated by workflow using github-action-benchmark.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DtLiYpnhzjcWBNPipb6j8W
There was a problem hiding this comment.
Benchmark
Details
| Benchmark suite | Current: bbe1d8a | Previous: a50e3aa | Ratio |
|---|---|---|---|
normalizeLong |
431 ops/sec (±3.58%) |
211 ops/sec (±19.22%) |
0.49 |
normalizeLong Values |
390 ops/sec (±1.15%) |
200 ops/sec (±15.76%) |
0.51 |
normalizeLong Scalar |
355 ops/sec (±3.24%) |
319 ops/sec (±10.45%) |
0.90 |
normalizeLong Scalar update |
906 ops/sec (±0.25%) |
909 ops/sec (±0.20%) |
1.00 |
denormalizeLong |
237 ops/sec (±6.03%) |
234 ops/sec (±5.60%) |
0.99 |
denormalizeLong Values |
221 ops/sec (±4.20%) |
218 ops/sec (±4.91%) |
0.99 |
denormalizeLong donotcache |
940 ops/sec (±0.62%) |
1001 ops/sec (±0.74%) |
1.06 |
denormalizeLong Values donotcache |
732 ops/sec (±0.93%) |
742 ops/sec (±0.14%) |
1.01 |
denormalizeLong Scalar donotcache |
1067 ops/sec (±0.16%) |
1042 ops/sec (±0.34%) |
0.98 |
denormalizeShort donotcache 500x |
1412 ops/sec (±0.24%) |
1423 ops/sec (±0.10%) |
1.01 |
denormalizeShort 500x |
654 ops/sec (±6.64%) |
619 ops/sec (±7.09%) |
0.95 |
denormalizeShort 500x withCache |
6975 ops/sec (±0.13%) |
7031 ops/sec (±0.71%) |
1.01 |
queryShort 500x withCache |
3075 ops/sec (±0.92%) |
3118 ops/sec (±0.96%) |
1.01 |
buildQueryKey All |
58610 ops/sec (±0.53%) |
60001 ops/sec (±0.49%) |
1.02 |
query All withCache |
6062 ops/sec (±2.69%) |
6137 ops/sec (±2.76%) |
1.01 |
denormalizeLong with mixin Entity |
211 ops/sec (±7.31%) |
205 ops/sec (±7.25%) |
0.97 |
denormalizeLong withCache |
6453 ops/sec (±0.25%) |
6297 ops/sec (±1.79%) |
0.98 |
denormalizeLong withCache (Scalar churn) |
6432 ops/sec (±0.45%) |
6453 ops/sec (±0.70%) |
1.00 |
denormalizeLong Values withCache |
5217 ops/sec (±1.40%) |
5061 ops/sec (±2.13%) |
0.97 |
denormalizeLong Scalar withCache |
7643 ops/sec (±0.25%) |
7935 ops/sec (±0.42%) |
1.04 |
denormalizeLong Scalar update withCache |
4055 ops/sec (±0.23%) |
4113 ops/sec (±0.96%) |
1.01 |
denormalizeLong All withCache |
6295 ops/sec (±0.23%) |
4795 ops/sec (±33.61%) |
0.76 |
denormalizeLong Query-sorted withCache |
6344 ops/sec (±2.09%) |
5209 ops/sec (±17.26%) |
0.82 |
denormalizeLongAndShort withEntityCacheOnly |
1702 ops/sec (±0.31%) |
1319 ops/sec (±4.66%) |
0.77 |
denormalize bidirectional 50 |
4630 ops/sec (±9.72%) |
3535 ops/sec (±15.50%) |
0.76 |
denormalize bidirectional 50 donotcache |
42635 ops/sec (±1.67%) |
37496 ops/sec (±2.94%) |
0.88 |
getResponse |
4528 ops/sec (±3.32%) |
3531 ops/sec (±12.49%) |
0.78 |
getResponse (null) |
10332296 ops/sec (±0.63%) |
8900681 ops/sec (±4.41%) |
0.86 |
getResponse (clear cache) |
207 ops/sec (±7.77%) |
128 ops/sec (±12.04%) |
0.62 |
getSmallResponse |
3364 ops/sec (±0.85%) |
2669 ops/sec (±9.59%) |
0.79 |
getSmallInferredResponse |
2847 ops/sec (±0.24%) |
2543 ops/sec (±2.81%) |
0.89 |
getResponse Collection |
4265 ops/sec (±4.39%) |
3845 ops/sec (±8.73%) |
0.90 |
get Collection |
2738 ops/sec (±0.22%) |
1503 ops/sec (±44.20%) |
0.55 |
get Query-sorted |
5111 ops/sec (±1.25%) |
3835 ops/sec (±27.89%) |
0.75 |
setLong |
424 ops/sec (±0.24%) |
343 ops/sec (±11.56%) |
0.81 |
setLongWithMerge |
246 ops/sec (±0.71%) |
213 ops/sec (±2.16%) |
0.87 |
setLongWithSimpleMerge |
258 ops/sec (±0.70%) |
230 ops/sec (±2.39%) |
0.89 |
setSmallResponse 500x |
905 ops/sec (±1.55%) |
902 ops/sec (±1.35%) |
1.00 |
setMany 50x one-per-row |
151 ops/sec (±0.40%) |
138 ops/sec (±1.94%) |
0.91 |
setMany 50 batch |
3577 ops/sec (±2.62%) |
3442 ops/sec (±1.32%) |
0.96 |
setMany 500x one-per-row |
15.22 ops/sec (±0.64%) |
13.9 ops/sec (±4.10%) |
0.91 |
setMany 500 batch |
1429 ops/sec (±0.15%) |
1362 ops/sec (±2.84%) |
0.95 |
This comment was automatically generated by workflow using github-action-benchmark.
Requested by Nathaniel · project thread
Takes over #4399 (Renovate's non-major group, which carries the RN 0.88 bump) and adds what React Native 0.88 needs. Once this merges Renovate closes #4399, since its updates are already applied.
Motivation
On #4399,
unit_tests-nativefailed: every suite that rendered a core component crashed withCould not locate module react-native/react-private-interface.React Native 0.88 adds
react-native/react-private-interfaceas an entry point that exists only in packageexports. Our jest config copied@react-native/jest-preset's aliases by hand, so it was missing this one. Also, 0.88 bundles the React 19.3 renderer (peerreact ^19.3.0), but the native CI job downgraded React to 19.2.3 before running the React Native suites.React Native 0.88 itself makes no user-facing breaking changes, and Data Client's native code needs no change.
InteractionManagerstays removed, and therequestIdleCallbackfallback from #4355 still covers it. The newreact-native/setup-env/InitializeCoredeprecation and theTouchableexport removal don't affect us. So there's no changeset; the pending 0.87 changeset still describes the user-visible fix.Solution
jest.config.js: the ReactNative project now spreads@react-native/jest-preset'smoduleNameMapper, and also takes itsresolver,testEnvironment,setupFilesandhaste, instead of copying them. Entry points React Native adds later come in with the preset upgrade. We still can't use it as thepreset, because the project layers on@anansi/jest-preset.unit_tests-native: runs the ReactNative suites on the installed React 19.3, then downgrades to 19.2.3 for the previous-minor ReactDOM suites, so that coverage stays.Verified locally:
yarn test:ci --selectProjects ReactNativepasses, with 9 suites and 66 tests.Generated by Claude Code
Note
Low Risk
Primarily dev/CI and test tooling; no published library API changes, though Jest native resolution behavior now tracks the upstream preset.
Overview
Upgrades react-native and @react-native/jest-preset from 0.87 to 0.88 across the root and workspace devDependencies (with lockfile churn). CI uses cimg/node:26.12.
The ReactNative Jest project now pulls resolver, moduleNameMapper, testEnvironment, setupFiles, and haste from
@react-native/jest-presetinstead of maintaining partial copies—so newexports-only entry points (e.g.react-native/react-private-interface) resolve without manual aliases.For the
nativeunit-test matrix job, ReactNative suites run on the installed React 19.3 (matching RN 0.88’s peer); the 19.2.3 downgrade and targeted ReactDOM per-minor tests run after those suites, not during install.The examples/nextjs lockfile bumps Next.js 15.5.27 → 15.5.28.
Reviewed by Cursor Bugbot for commit bbe1d8a. Bugbot is set up for automated code reviews on this repo. Configure here.