-
Notifications
You must be signed in to change notification settings - Fork 76
Refactor Ref System with Nested Optional Properties #386
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Conversation
Added comprehensive test coverage for querying nested objects across WHERE, SELECT, GROUP BY, and ORDER BY operations. Fixed query builder syntax issues by removing JavaScript expressions, null coalescing operators, and unnecessary optional chaining. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <[email protected]>
🦋 Changeset detectedLatest commit: 8eae2a8 The changes in this PR will be included in the next version bump. This PR includes changesets to release 8 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 |
More templates
@tanstack/db
@tanstack/db-ivm
@tanstack/electric-db-collection
@tanstack/query-db-collection
@tanstack/react-db
@tanstack/solid-db
@tanstack/svelte-db
@tanstack/trailbase-db-collection
@tanstack/vue-db
commit: |
Size Change: +99 B (+0.15%) Total Size: 64.5 kB
ℹ️ View Unchanged
|
Size Change: 0 B Total Size: 1.16 kB ℹ️ View Unchanged
|
@samwillis Do we really need |
Agreed, lets drop them |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I did a first pass over the core changes. Will review the changes to the tests after lunch.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The tests look good to me. Let's fix my comments where possible before we merge.
🎯 Overview
This PR introduces a comprehensive refactor of the ref system to properly support nested structures and optionality, bringing the type system in line with JavaScript's optional chaining behavior.
✨ Key Improvements
employees.profile?.bio
,orders.customer?.address?.street
)RefProxy<T> | undefined
with optionality outside the ref, enabling proper optional chainingisUndefined
,isNotUndefined
,isNull
,isNotNull
for proper null/undefined checks in queries🚨 Breaking Changes
IMPORTANT: Code that previously worked by ignoring optionality now requires proper optional chaining syntax.
🔧 Technical Changes
Type System Refactor
RefProxyForContext
: Now handles optionality outside refs (RefProxy<T> | undefined
)PrecomputeRefStructure
: Only wraps leaf values, leaving objects as plain TypeScriptSelectValue
: Support for nested projections and JavaScript literalsRuntime Improvements
isNotUndefined
,isUndefined
,isNull
,isNotNull
.groupBy()
calls now accumulate instead of replace📊 Testing
🗂️ Files Changed
Core Type System
packages/db/src/query/builder/types.ts
- Major refactor of ref typespackages/db/src/query/builder/index.ts
- Enhanced query builder methodspackages/db/src/query/builder/functions.ts
- New null/undefined functionsCompiler & Runtime
packages/db/src/query/compiler/evaluators.ts
- Added missing function implementationspackages/db/src/query/compiler/group-by.ts
- Fixed multiple GROUP BY validationTests & Documentation
🚀 Migration Guide
For existing codebases: Add
?.
when accessing potentially undefined nested properties. The TypeScript compiler will guide you to the correct syntax.🎉 Benefits
This enhancement significantly improves developer experience while maintaining the robustness and performance of the existing query system.