Skip to content

Conversation

@samwillis
Copy link
Collaborator

@samwillis samwillis commented Nov 5, 2025

@changeset-bot
Copy link

changeset-bot bot commented Nov 5, 2025

🦋 Changeset detected

Latest commit: 471fa8f

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 13 packages
Name Type
@tanstack/db Patch
@tanstack/query-db-collection Patch
@tanstack/db-ivm Patch
@tanstack/electric-db-collection Patch
@tanstack/angular-db Patch
@tanstack/db-collection-e2e Patch
@tanstack/powersync-db-collection Patch
@tanstack/react-db Patch
@tanstack/rxdb-db-collection Patch
@tanstack/solid-db Patch
@tanstack/svelte-db Patch
@tanstack/trailbase-db-collection Patch
@tanstack/vue-db Patch

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

@pkg-pr-new
Copy link

pkg-pr-new bot commented Nov 5, 2025

More templates

@tanstack/angular-db

npm i https://pkg.pr.new/@tanstack/angular-db@763

@tanstack/db

npm i https://pkg.pr.new/@tanstack/db@763

@tanstack/db-ivm

npm i https://pkg.pr.new/@tanstack/db-ivm@763

@tanstack/electric-db-collection

npm i https://pkg.pr.new/@tanstack/electric-db-collection@763

@tanstack/offline-transactions

npm i https://pkg.pr.new/@tanstack/offline-transactions@763

@tanstack/powersync-db-collection

npm i https://pkg.pr.new/@tanstack/powersync-db-collection@763

@tanstack/query-db-collection

npm i https://pkg.pr.new/@tanstack/query-db-collection@763

@tanstack/react-db

npm i https://pkg.pr.new/@tanstack/react-db@763

@tanstack/rxdb-db-collection

npm i https://pkg.pr.new/@tanstack/rxdb-db-collection@763

@tanstack/solid-db

npm i https://pkg.pr.new/@tanstack/solid-db@763

@tanstack/svelte-db

npm i https://pkg.pr.new/@tanstack/svelte-db@763

@tanstack/trailbase-db-collection

npm i https://pkg.pr.new/@tanstack/trailbase-db-collection@763

@tanstack/vue-db

npm i https://pkg.pr.new/@tanstack/vue-db@763

commit: 471fa8f

@github-actions
Copy link
Contributor

github-actions bot commented Nov 5, 2025

Size Change: +5.99 kB (+7.49%) 🔍

Total Size: 86 kB

Filename Size Change
./packages/db/dist/esm/collection/change-events.js 1.38 kB +21 B (+1.54%)
./packages/db/dist/esm/collection/index.js 3.24 kB +121 B (+3.88%)
./packages/db/dist/esm/index.js 2.63 kB +266 B (+11.26%) ⚠️
./packages/db/dist/esm/indexes/auto-index.js 742 B +11 B (+1.5%)
./packages/db/dist/esm/query/builder/functions.js 733 B +127 B (+20.96%) 🚨
./packages/db/dist/esm/query/builder/index.js 3.84 kB -15 B (-0.39%)
./packages/db/dist/esm/query/compiler/expressions.js 691 B +17 B (+2.52%)
./packages/db/dist/esm/query/compiler/order-by.js 1.25 kB +79 B (+6.75%) 🔍
./packages/db/dist/esm/query/live/collection-config-builder.js 5.26 kB +109 B (+2.12%)
./packages/db/dist/esm/utils/index-optimization.js 1.51 kB +20 B (+1.34%)
./packages/db/dist/esm/query/expression-helpers.js 1.43 kB +1.43 kB (new file) 🆕
./packages/db/dist/esm/query/predicate-utils.js 2.88 kB +2.88 kB (new file) 🆕
./packages/db/dist/esm/query/subset-dedupe.js 921 B +921 B (new file) 🆕
ℹ️ View Unchanged
Filename Size
./packages/db/dist/esm/collection/changes.js 977 B
./packages/db/dist/esm/collection/events.js 388 B
./packages/db/dist/esm/collection/indexes.js 1.1 kB
./packages/db/dist/esm/collection/lifecycle.js 1.67 kB
./packages/db/dist/esm/collection/mutations.js 2.26 kB
./packages/db/dist/esm/collection/state.js 3.43 kB
./packages/db/dist/esm/collection/subscription.js 2.42 kB
./packages/db/dist/esm/collection/sync.js 2.12 kB
./packages/db/dist/esm/deferred.js 207 B
./packages/db/dist/esm/errors.js 4.11 kB
./packages/db/dist/esm/event-emitter.js 748 B
./packages/db/dist/esm/indexes/base-index.js 766 B
./packages/db/dist/esm/indexes/btree-index.js 1.87 kB
./packages/db/dist/esm/indexes/lazy-index.js 1.1 kB
./packages/db/dist/esm/indexes/reverse-index.js 513 B
./packages/db/dist/esm/local-only.js 837 B
./packages/db/dist/esm/local-storage.js 2.04 kB
./packages/db/dist/esm/optimistic-action.js 359 B
./packages/db/dist/esm/paced-mutations.js 496 B
./packages/db/dist/esm/proxy.js 3.22 kB
./packages/db/dist/esm/query/builder/ref-proxy.js 917 B
./packages/db/dist/esm/query/compiler/evaluators.js 1.35 kB
./packages/db/dist/esm/query/compiler/group-by.js 1.8 kB
./packages/db/dist/esm/query/compiler/index.js 1.96 kB
./packages/db/dist/esm/query/compiler/joins.js 2 kB
./packages/db/dist/esm/query/compiler/select.js 1.07 kB
./packages/db/dist/esm/query/ir.js 673 B
./packages/db/dist/esm/query/live-query-collection.js 360 B
./packages/db/dist/esm/query/live/collection-registry.js 264 B
./packages/db/dist/esm/query/live/collection-subscriber.js 1.77 kB
./packages/db/dist/esm/query/live/internal.js 130 B
./packages/db/dist/esm/query/optimizer.js 2.6 kB
./packages/db/dist/esm/scheduler.js 1.21 kB
./packages/db/dist/esm/SortedMap.js 1.18 kB
./packages/db/dist/esm/strategies/debounceStrategy.js 237 B
./packages/db/dist/esm/strategies/queueStrategy.js 418 B
./packages/db/dist/esm/strategies/throttleStrategy.js 236 B
./packages/db/dist/esm/transactions.js 2.9 kB
./packages/db/dist/esm/utils.js 881 B
./packages/db/dist/esm/utils/browser-polyfills.js 304 B
./packages/db/dist/esm/utils/btree.js 5.61 kB
./packages/db/dist/esm/utils/comparison.js 852 B
./packages/db/dist/esm/utils/type-guards.js 157 B

compressed-size-action::db-package-size

@github-actions
Copy link
Contributor

github-actions bot commented Nov 5, 2025

Size Change: 0 B

Total Size: 3.34 kB

ℹ️ View Unchanged
Filename Size
./packages/react-db/dist/esm/index.js 225 B
./packages/react-db/dist/esm/useLiveInfiniteQuery.js 1.17 kB
./packages/react-db/dist/esm/useLiveQuery.js 1.11 kB
./packages/react-db/dist/esm/useLiveSuspenseQuery.js 431 B
./packages/react-db/dist/esm/usePacedMutations.js 401 B

compressed-size-action::react-db-package-size

samwillis and others added 6 commits November 11, 2025 16:00
)

* Add unit tests that reproduce the problems with moveWindow on infinite limits

* Handle Infinity limit in move

* Changeset

* Add support for orderBy and limit options in currentStateAsChanges

* Unit tests for currentStateAsChanges

* changeset

* fix for eslint

* Move helper functions to the end of the file

* add predicate utils

* optimise in when all primatives

* optimisations

* changeset

* minusWherePredicates

* Add unit test for OR in both subset and superset that shows bug with OR handling

* Reorder OR handling to fix bug and handle AND similarly

* change chageset

* dedupe code

* add createDeduplicatedLoadSubset function

* convert deduper to a class, with reset, and dedupe inflight

* Simplify matching of inflight requests

* Improve minusWherePredicates such that it can handle common conditions in a conjunction

* Modify DeduplicatedLoadSubset.loadSubset such that it only loads the missing data

* Remove unused predicate helper functions

* Fix eslint issue

* Prettier

* Unify handling of IN and OR

* Handle subset that is false

* Fix isLimitSubset to correctly handle unlimited subsets

---------

Co-authored-by: Kevin De Porre <[email protected]>
* Callback that informs about deduplicated loadSubset calls

* Unit tests for onDeduplicate callback + move dedupe test files to the right folder

* changeset

* Object params

* Updated lockfile

* fix lock file

---------

Co-authored-by: Sam Willis <[email protected]>
* Handle pushed down predicates in query collection

Co-authored-by: Kevin De Porre <[email protected]>
Co-authored-by: Sam Willis <[email protected]>

* Deduplicate loadSubset requests in Query collection

* Unit test for deduplicating limited ordered queries in query collection

* GC tanstack query when subscription is unsubscribed

---------

Co-authored-by: Sam Willis <[email protected]>
Co-authored-by: Kevin De Porre <[email protected]>
* Handle pushed down predicates in Electric collection

Co-authored-by: Kevin De Porre <[email protected]>
Co-authored-by: Sam Willis <[email protected]>

* use the subsetDuduper for electric

* Leave fixme

* fix DeduplicatedLoadSubset call

* fix tests

---------

Co-authored-by: Sam Willis <[email protected]>
#762)

* Add optional compareOptions to the Collection Config which act as collection-wide config and allow queries to override those.

* Fix import

* changeset

* Ran prettier

* update docs

* Live queries inherit compare options from collection in the FROM clause

* Explicit compare options for live queries

* Rename compareOptions to defaultStringCollation in the collection config and live query collection config

* Docs update

---------

Co-authored-by: Sam Willis <[email protected]>
…#786)

* feat: add expression helpers for parsing LoadSubsetOptions in queryFn

Add reusable expression parsing utilities to help developers translate TanStack DB
predicates (where, orderBy, limit) into their API's format.

- Add expression-helpers.ts with generic parsing utilities
  - parseWhereExpression: Parse where clauses with custom handlers
  - parseOrderByExpression: Parse order by into simple array
  - extractSimpleComparisons: Extract simple AND-ed filters
  - parseLoadSubsetOptions: Convenience function for all options
  - walkExpression, extractFieldPath, extractValue: Lower-level helpers

- Export helpers from query-db-collection package

- Add comprehensive documentation to query-collection.md
  - How LoadSubsetOptions are passed via ctx.meta
  - Expression helper usage with REST and GraphQL examples
  - API reference for all helper functions
  - Tips and best practices

This makes it much easier to implement query collections with predicate push-down
without having to manually parse expression AST trees.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <[email protected]>

* test: add comprehensive tests for expression helpers

- 35 test cases covering all helper functions
- Tests for parseWhereExpression with various operators
- Tests for parseOrderByExpression with sorting options
- Tests for extractSimpleComparisons
- Tests for parseLoadSubsetOptions
- Tests for low-level helpers (extractFieldPath, extractValue, walkExpression)
- Integration test for complex real-world query scenarios

All tests passing with 93.65% coverage of expression-helpers.ts

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <[email protected]>

* chore: add changeset for expression helpers

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <[email protected]>

* docs: make GraphQL example more generic

Remove Hasura-specific emphasis in GraphQL example section.
The underscore-prefixed operators are common GraphQL conventions.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <[email protected]>

* docs: clarify GraphQL format is not prescriptive

Change 'the GraphQL format' to 'a GraphQL format' to avoid
implying this is the only way to structure GraphQL queries.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <[email protected]>

* docs: remove Electric DB reference from tips

Remove implementation-specific reference to Electric DB Collection
from the tips section.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <[email protected]>

* refactor: make loadSubsetOptions always an object

- Add default empty object parameter to createQueryFromOpts
- Remove ?? {} pattern from all documentation
- Update changeset example
- Update PR description

This makes the API cleaner - users can now access
ctx.meta.loadSubsetOptions directly without null coalescing.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <[email protected]>

* fix: add explicit type annotations to avoid implicit any

- Import BasicExpression and OrderBy from IR namespace
- Add type annotations to all lambda parameters
- Remove unnecessary type checks that were always true
- Fix variable shadowing in walkExpression visitor parameter
- Fixes build type errors and eslint warnings in expression-helpers.ts

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <[email protected]>

* style: fix prettier formatting in changeset

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <[email protected]>

* fix: correct TypeScript types in expression-helpers tests

* feat: address Sam's review feedback

- Add OperatorName type and operators constant to db package
- Improve ParseWhereOptions handlers type to know IR operators
- Support array indices in FieldPath (string | number)
- Add locale/string collation options to ParsedOrderBy
- Make extractSimpleComparisons throw on unsupported operations (or, not, etc.)
- Update tests to expect throws instead of silent skipping

* fix: remove invalid sensitivity/locale fields from test mocks

CompareOptions uses StringCollationConfig which has stringSort, locale, and localeOptions fields, not sensitivity and locale at the top level.

* fix: handle discriminated union for CompareOptions properly

Use 'in' operator to check for optional fields (locale, localeOptions) that only exist when stringSort is 'locale'

* move helpers to main db package

---------

Co-authored-by: Claude <[email protected]>
Co-authored-by: Sam Willis <[email protected]>
* Implement end-to-end tests for sync feature

Implement end-to-end tests for sync feature

Implement end-to-end tests for sync feature

chore: revert pnpm-lock.yaml to match query-driven-sync

chore: update pnpm-lock.yaml with e2e test pg dependencies

bump pnpm/action-setup version

fix pnpmlockfile

format

only run normal tests on test command

tidy and fix types

fixes

ci fix

tidy

checkpoint

cleanup between each test

add cleanup between tests

all e2e tests pass!

cleanup live queries

fixes for ci

add propper mutations to e2e tests

fix ci timouts

move the badly named accumulated data tests

fix ci flake

working query e2e tests

fix lint

fix assertions

Fix race condition between test and logical replication stream

Handle isNull and isUndefined in expression helpers

Ran prettier.

fix ci

update docs

add suport for not to extractSimpleComparisons and get tests to pass

try and fix ci race

* increase timeout
@samwillis samwillis merged commit 528882e into main Nov 12, 2025
8 of 9 checks passed
@samwillis samwillis deleted the query-driven-sync branch November 12, 2025 00:30
@github-actions github-actions bot mentioned this pull request Nov 12, 2025
@github-actions
Copy link
Contributor

🎉 This PR has been released!

Thank you for your contribution!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: In Progress

Development

Successfully merging this pull request may close these issues.

4 participants