Conversation
🦋 Changeset detectedLatest commit: db5b610 The changes in this PR will be included in the next version bump. This PR includes changesets to release 6 packages
Not sure what this means? Click here to learn what changesets are. Click here if you're a maintainer who wants to add another changeset to this PR |
|
Size Change: +60 B (+0.07%) Total Size: 80.5 kB
ℹ️ View Unchanged
|
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## master #3753 +/- ##
=======================================
Coverage 98.05% 98.05%
=======================================
Files 151 151
Lines 2821 2821
Branches 553 553
=======================================
Hits 2766 2766
Misses 11 11
Partials 44 44 ☔ View full report in Codecov by Sentry. 🚀 New features to boost your workflow:
|
There was a problem hiding this comment.
Benchmark
Details
| Benchmark suite | Current: db5b610 | Previous: 7d374d6 | Ratio |
|---|---|---|---|
normalizeLong |
459 ops/sec (±1.03%) |
448 ops/sec (±1.40%) |
0.98 |
normalizeLong Values |
421 ops/sec (±0.25%) |
406 ops/sec (±0.51%) |
0.96 |
denormalizeLong |
293 ops/sec (±2.86%) |
291 ops/sec (±2.97%) |
0.99 |
denormalizeLong Values |
270 ops/sec (±2.08%) |
264 ops/sec (±1.98%) |
0.98 |
denormalizeLong donotcache |
1057 ops/sec (±0.18%) |
1051 ops/sec (±0.16%) |
0.99 |
denormalizeLong Values donotcache |
778 ops/sec (±0.17%) |
756 ops/sec (±0.20%) |
0.97 |
denormalizeShort donotcache 500x |
1581 ops/sec (±0.13%) |
1609 ops/sec (±0.21%) |
1.02 |
denormalizeShort 500x |
858 ops/sec (±2.07%) |
839 ops/sec (±2.27%) |
0.98 |
denormalizeShort 500x withCache |
5974 ops/sec (±0.17%) |
6394 ops/sec (±0.32%) |
1.07 |
queryShort 500x withCache |
2780 ops/sec (±0.22%) |
2761 ops/sec (±0.45%) |
0.99 |
buildQueryKey All |
53808 ops/sec (±0.46%) |
53474 ops/sec (±0.61%) |
0.99 |
query All withCache |
6474 ops/sec (±0.33%) |
6489 ops/sec (±0.17%) |
1.00 |
denormalizeLong with mixin Entity |
282 ops/sec (±2.01%) |
276 ops/sec (±2.41%) |
0.98 |
denormalizeLong withCache |
8166 ops/sec (±0.18%) |
7251 ops/sec (±0.43%) |
0.89 |
denormalizeLong Values withCache |
5150 ops/sec (±0.17%) |
5073 ops/sec (±0.16%) |
0.99 |
denormalizeLong All withCache |
6256 ops/sec (±0.17%) |
6235 ops/sec (±0.10%) |
1.00 |
denormalizeLong Query-sorted withCache |
6448 ops/sec (±0.21%) |
6485 ops/sec (±0.12%) |
1.01 |
denormalizeLongAndShort withEntityCacheOnly |
1799 ops/sec (±0.29%) |
1725 ops/sec (±0.22%) |
0.96 |
getResponse |
4609 ops/sec (±0.59%) |
4574 ops/sec (±0.48%) |
0.99 |
getResponse (null) |
10416446 ops/sec (±0.89%) |
10403427 ops/sec (±0.98%) |
1.00 |
getResponse (clear cache) |
267 ops/sec (±2.10%) |
261 ops/sec (±2.21%) |
0.98 |
getSmallResponse |
3384 ops/sec (±0.17%) |
3294 ops/sec (±0.16%) |
0.97 |
getSmallInferredResponse |
2496 ops/sec (±0.39%) |
2518 ops/sec (±0.37%) |
1.01 |
getResponse Collection |
4570 ops/sec (±0.42%) |
4516 ops/sec (±0.38%) |
0.99 |
get Collection |
4563 ops/sec (±0.19%) |
4572 ops/sec (±0.28%) |
1.00 |
get Query-sorted |
5232 ops/sec (±0.33%) |
5198 ops/sec (±0.11%) |
0.99 |
setLong |
465 ops/sec (±0.23%) |
449 ops/sec (±0.24%) |
0.97 |
setLongWithMerge |
256 ops/sec (±0.31%) |
257 ops/sec (±0.26%) |
1.00 |
setLongWithSimpleMerge |
270 ops/sec (±0.23%) |
268 ops/sec (±0.34%) |
0.99 |
setSmallResponse 500x |
943 ops/sec (±0.23%) |
952 ops/sec (±0.08%) |
1.01 |
This comment was automatically generated by workflow using github-action-benchmark.
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes and found 2 potential issues.
Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.
| navigate_page → initScript: | ||
|
|
||
| window.__DC_ACTION_LOG__ = []; | ||
| const _origDispatch = Object.getOwnPropertyDescriptor(Object.getPrototypeOf({}), 'dispatch'); |
There was a problem hiding this comment.
Dead code in skill documentation example
Low Severity
The _origDispatch variable is assigned the result of Object.getOwnPropertyDescriptor(Object.getPrototypeOf({}), 'dispatch'), which always returns undefined since Object.prototype has no dispatch property. The variable is never referenced again in the code block. This appears to be leftover from an earlier approach and is dead code in a skill file that AI coding assistants will follow as a template.
| if (process.env.NODE_ENV !== 'production') { | ||
| (globalThis as any).__DC_CONTROLLERS__?.delete(this.devtoolsName); | ||
| } | ||
| } |
There was a problem hiding this comment.
Cleanup removes another provider's active controller entry
Low Severity
When multiple DataProviders use the default DevToolsManager (no custom name config), they share the same devtoolsName from DEFAULT_CONFIG.name. The cleanup() unconditionally deletes the map entry by name without checking if the entry still belongs to this instance. If Provider A unmounts, it removes Provider B's still-active controller from __DC_CONTROLLERS__, even though Provider B registered after A. The delete call needs an identity check like map.get(name) === this.controller before removing. The PR docs claim multiple providers are "fully supported," but the default naming makes this collision the common case.


Motivation
AI coding assistants using Chrome DevTools MCP or Expo MCP have no programmatic way to inspect or interact with the data-client store. The Redux DevTools Extension integration is one-way (app → extension) with no API to read state back from page context via
evaluate_script.Solution
DevToolsManagernow registers each Controller onglobalThis.__DC_CONTROLLERS__(aMapkeyed by the devtools connection name) duringinit()in dev mode.__DC_CONTROLLERS__.values().next().value.getState()viaevaluate_scriptglobalThisinstead ofwindow, so it works with Hermes debugger and Expo MCPDataProviderregisters independently by namecleanup()to prevent leaksprocess.env.NODE_ENV !== 'production', matching the existing Redux DevTools integrationAlso includes docs update for
DevToolsManagerand blog entry.TODO
__DC_CONTROLLERS__with Chrome DevTools MCP)Made with Cursor
Note
Low Risk
Dev-only change that registers controllers on
globalThisduringDevToolsManager.init()and removes them oncleanup(), with minimal impact on production behavior.Overview
Dev-only controller exposure for tooling.
DevToolsManagernow registers itsControllerintoglobalThis.__DC_CONTROLLERS__(aMapkeyed by the devtools connection name) duringinit(), and removes it duringcleanup(), enabling programmatic store access in browser/RN/Node debugging tools.Docs and release notes are updated to describe accessing controllers via
__DC_CONTROLLERS__, and a new Cursor skill reference (devtools-debugging.md) documents Chrome DevTools MCP workflows (including optional action logging). Types are updated to include the newdevtoolsNamefield, and a changeset bumps@data-client/core/react/vueas patch releases.Written by Cursor Bugbot for commit db5b610. This will update automatically on new commits. Configure here.