Skip to content

Conversation

@KyleAMathews
Copy link
Collaborator

It should accept any collection.

Fixes #761

Previously, when using queryCollectionOptions with startOfflineExecutor, TypeScript would throw a type error due to Collection type parameter variance.

The issue occurred because:

  • queryCollectionOptions creates Collection<ConcreteType, string>
  • OfflineConfig expected Record<string, Collection> which defaults to Collection<Record<string, unknown>, string | number>
  • TypeScript couldn't assign the more specific collection type to the more general expected type due to function parameter contravariance

Solution:
Updated OfflineConfig and related classes to explicitly accept Collection<any, any, any, any, any> to allow collections of any specific type to be passed in.

This is safe because the offline executor only accesses collection.id and doesn't call any type-specific methods like getKey directly.

Changes:

  • OfflineConfig.collections type updated
  • OutboxManager constructor parameter type updated
  • TransactionSerializer constructor and field types updated

🎯 Changes

✅ Checklist

  • I have followed the steps in the Contributing guide.
  • I have tested this code locally with pnpm test:pr.

🚀 Release Impact

  • This change affects published code, and I have generated a changeset.
  • This change is docs/CI/dev-only (no release).

@changeset-bot
Copy link

changeset-bot bot commented Nov 6, 2025

⚠️ No Changeset found

Latest commit: c37fb4a

Merging this PR will not cause a version bump for any packages. If these changes should not result in a new version, you're good to go. If these changes should result in a version bump, you need to add a changeset.

This PR includes no changesets

When changesets are added to this PR, you'll see the packages that this PR includes changesets for and the associated semver types

Click here to learn what changesets are, and how to add one.

Click here if you're a maintainer who wants to add a changeset to this PR

@pkg-pr-new
Copy link

pkg-pr-new bot commented Nov 6, 2025

More templates

@tanstack/angular-db

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

@tanstack/db

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

@tanstack/db-ivm

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

@tanstack/electric-db-collection

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

@tanstack/offline-transactions

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

@tanstack/powersync-db-collection

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

@tanstack/query-db-collection

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

@tanstack/react-db

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

@tanstack/rxdb-db-collection

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

@tanstack/solid-db

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

@tanstack/svelte-db

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

@tanstack/trailbase-db-collection

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

@tanstack/vue-db

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

commit: c37fb4a

@github-actions
Copy link
Contributor

github-actions bot commented Nov 6, 2025

Size Change: 0 B

Total Size: 79.8 kB

ℹ️ View Unchanged
Filename Size
./packages/db/dist/esm/collection/change-events.js 1.36 kB
./packages/db/dist/esm/collection/changes.js 977 B
./packages/db/dist/esm/collection/events.js 388 B
./packages/db/dist/esm/collection/index.js 3.12 kB
./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/index.js 2.36 kB
./packages/db/dist/esm/indexes/auto-index.js 731 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/functions.js 606 B
./packages/db/dist/esm/query/builder/index.js 3.85 kB
./packages/db/dist/esm/query/builder/ref-proxy.js 917 B
./packages/db/dist/esm/query/compiler/evaluators.js 1.34 kB
./packages/db/dist/esm/query/compiler/expressions.js 674 B
./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/order-by.js 1.17 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-config-builder.js 5.15 kB
./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 660 B
./packages/db/dist/esm/utils/index-optimization.js 1.49 kB
./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 6, 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

…lectionOptions

Fixes #761

Previously, when using queryCollectionOptions with startOfflineExecutor,
TypeScript would throw a type error due to Collection type parameter variance.

The issue occurred because:
- queryCollectionOptions creates Collection<ConcreteType, string>
- OfflineConfig expected Record<string, Collection> which defaults to
  Collection<Record<string, unknown>, string | number>
- TypeScript couldn't assign the more specific collection type to the
  more general expected type due to function parameter contravariance

Solution:
Updated OfflineConfig and related classes to explicitly accept
Collection<any, any, any, any, any> to allow collections of any
specific type to be passed in.

This is safe because the offline executor only accesses collection.id
and doesn't call any type-specific methods like getKey directly.

Changes:
- OfflineConfig.collections type updated
- OutboxManager constructor parameter type updated
- TransactionSerializer constructor and field types updated
@KyleAMathews KyleAMathews force-pushed the claude/investigate-issue-011CUsL7b8Mu7grXhYsSEsHv branch from 98587e5 to c37fb4a Compare November 10, 2025 16:25
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

startOfflineExecutor is not compatible with queryCollection types

3 participants