Add serialization support for QueryBuilder where/sort/minus clauses#60
Merged
Add serialization support for QueryBuilder where/sort/minus clauses#60
Conversation
…her missing fields QueryBuilder.toJSON() was silently dropping where clauses, sort keys, minus entries, nullSubject, and pendingContextName. This meant any query with .where() would lose its filter when round-tripping through JSON serialization. - Add QueryBuilderSerialization.ts with serialize/deserialize helpers for WherePath, SortByPath, RawMinusEntry, and QueryArg types - Update QueryBuilderJSON type with where, sortBy, minusEntries, nullSubject, and pendingContextName fields - Update toJSON() to evaluate callbacks and serialize all fields - Update fromJSON() to deserialize and restore all fields via pre-evaluated data (_where, _sortBy, _rawMinusEntries) - Update _buildDirectRawInput() to use pre-evaluated data as fallback when callbacks aren't available (i.e. after JSON deserialization) - Add 18 round-trip serialization tests confirming identical IR output https://claude.ai/code/session_01P6n2XLm5DSugoa8RWN97yy
…lect Preloads were the last remaining field not serialized in toJSON(). Fixed by: - Merging preload entries into the FieldSet at serialization time (same merge logic as _buildDirectRawInput), so preloaded component fields appear as subSelect entries in the JSON - Adding preloadSubSelect handling in FieldSet.toJSON() so it serializes identically to subSelect (both produce the same IR) - Adding 3 round-trip tests confirming preload serialization https://claude.ai/code/session_01P6n2XLm5DSugoa8RWN97yy
Contributor
|
If this change doesn't need a release (docs, CI config, etc.), you can ignore this message. |
- Extract _fieldsWithPreloads() from duplicated preload merge logic in toJSON() and _buildDirectRawInput() - Extract _evaluateMinusEntries() from duplicated minus entry evaluation logic, reusing a single proxy instance - Fix WhereMethods cast from `as any` to `as WhereMethods` - Remove unused PropertyPath import from QueryBuilderSerialization.ts - Remove redundant inline comments that restated the code - Add changeset patch for the toJSON fix https://claude.ai/code/session_01P6n2XLm5DSugoa8RWN97yy
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
This PR adds comprehensive serialization and deserialization support for QueryBuilder's where clauses, sort keys, and minus entries. Previously, these complex runtime structures containing live object references could not be round-tripped through JSON. Now they are converted to plain JSON-safe representations that preserve all query semantics.
Key Changes
New
QueryBuilderSerialization.tsmodule: Provides serialization/deserialization helpers for:WherePathstructures (evaluation paths, AND/OR combinations, expression nodes)SortByPathstructures (property paths with direction)RawMinusEntrystructures (shape references, where clauses, property paths)QueryArgtypes (primitives, dates, node references, nested where clauses, arg paths)Updated
QueryBuilder.toJSON():nullSubjectandpendingContextNameflagsUpdated
QueryBuilder.fromJSON():_where,_sortBy,_rawMinusEntries)build()when callbacks are unavailablenullSubjectandpendingContextNameflagsUpdated
QueryBuilder.build():Comprehensive test coverage in
serialization.test.ts:Implementation Details
sanitize(restored.build())equalssanitize(original.build())https://claude.ai/code/session_01P6n2XLm5DSugoa8RWN97yy