fix(svelte-query): handle shrinking createRawRef array by multiple entries (#10341)#10892
fix(svelte-query): handle shrinking createRawRef array by multiple entries (#10341)#10892ousamabenyounes wants to merge 1 commit into
Conversation
…tries (TanStack#10341) The `createRawRef` Proxy used by `createQueries` crashed with `TypeError: 'deleteProperty' on proxy: trap returned falsish for property 'N'` whenever the reactive query list was shrunk by two or more items in one update. Two compounding causes: 1. `update()` iterated `keysToRemove` in ascending index order. The trap decrements `target.length` after every deletion, so the next stale index was no longer `in target` and the trap returned `false`, which throws in strict mode (ES modules). 2. The trap returned `false` for missing props instead of treating delete on a nonexistent prop as a spec-compliant no-op. Fix: sort `keysToRemove` descending for arrays so each delete acts on the current tail, and return `true` from `deleteProperty` when the prop is already absent. Generated by Ora Studio Vibe coded by ousamabenyounes Co-Authored-By: Claude <noreply@anthropic.com>
|
Worried about impact? Review this PR in Change Stack to explore blast radius before you approve or request changes. No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Pro Run ID: 📒 Files selected for processing (3)
📝 WalkthroughWalkthroughFixed a proxy handler crash in ChangesArray Shrinking Proxy Fix
Estimated code review effort🎯 2 (Simple) | ⏱️ ~12 minutes Suggested reviewers
Poem
🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
Summary
Fix #10341
createQueriescrashed withTypeError: 'deleteProperty' on proxy: trap returned falsish for property 'N'whenever two or more items were removed from its reactive array in a single update. The crash bubbled up from the$effect.preincreateQueries.svelte.ts, but the root cause sits increateRawRef(packages/svelte-query/src/containers.svelte.ts).Root cause
createRawRef.update()iterateskeysToRemovein ascending index order. For arrays, thedeletePropertytrap decrementstarget.lengthon every successful delete — so after the first deletion the next stale index is no longerin target, the trap returnsfalse, anddeletethrows in strict mode (ES modules). The trap was also returningfalsewhen the property was already absent, which is not howdeleteis meant to behave on a missing prop.Fix
Two small, related changes in
packages/svelte-query/src/containers.svelte.ts:keysToRemovenumerically descending whennewValueis an array, so every delete acts on the current tail andlength--stays valid.truefromdeletePropertyfor missing props — the spec semantic fordeleteon an absent property is a no-op, not a strict-mode throw. This makes the trap robust against any other path that might also try to delete a stale index.Both are needed: (1) is the correctness fix; (2) is defense in depth that makes the trap behave like a normal object trap.
Verification
should handle shrinking an array by more than one entry at onceinpackages/svelte-query/tests/containers.svelte.test.ts— shrinks[1, 2, 3, 4, 5]→[1, 2]→[1, 2, 3, 4]→[].mainwith the exact symptom from the issue:TypeError: 'deleteProperty' on proxy: trap returned falsish for property '4'atsrc/containers.svelte.ts:93.@tanstack/svelte-query:test:lib— 22 files, 164 tests, all pass.test:eslintandtest:typesclean.Changeset
@tanstack/svelte-query:patch— runtime bug fix, no public API change.Generated by Ora Studio
Vibe coded by ousamabenyounes
Summary by CodeRabbit
createQueriescrashing with a TypeError when removing multiple items from a reactive array in a single update operation. This resolves instability when managing dynamic collections of queries and performing simultaneous removals, improving overall reliability of query management in Svelte applications.