Skip to content

Comments

[fix] findOne returns array instead of single object in angular-db (issue #1261)#1273

Open
claude[bot] wants to merge 6 commits intomainfrom
ai/issue-1261-fix
Open

[fix] findOne returns array instead of single object in angular-db (issue #1261)#1273
claude[bot] wants to merge 6 commits intomainfrom
ai/issue-1261-fix

Conversation

@claude
Copy link
Contributor

@claude claude bot commented Feb 19, 2026

Summary

  • Fixes injectLiveQuery in @tanstack/angular-db to return a single object (or undefined) when used with findOne(), instead of always returning an array
  • Adds proper type overloads so TypeScript correctly infers Signal<T | undefined> for findOne() queries

Fixes #1261
Repro PR: #1272

Root cause

The angular-db adapter was missing the singleResult handling that was already implemented in react-db and vue-db. Specifically:

  1. Runtime: syncDataFromCollection always converted collection values to an array via Array.from(currentCollection.values()) and set it directly on the data signal. It never checked collection.config.singleResult to decide whether to return a single item or the full array.

  2. Types: InjectLiveQueryResult.data was always typed as Signal<Array<TResult>>, with no way to express Signal<TResult | undefined> for findOne() queries.

Fix

  • Added a computed signal for data that checks collection.config.singleResult and returns either the first element or the full array (matching the pattern in vue-db and react-db)
  • Updated InjectLiveQueryResult to use InferResultType<TContext> for the data signal type, which correctly resolves to T | undefined for SingleResult contexts and Array<T> otherwise
  • Added InjectLiveQueryResultWithCollection and InjectLiveQueryResultWithSingleResultCollection interfaces for pre-created collection overloads

How to test

pnpm --filter @tanstack/angular-db test -- --run

All 21 tests pass, including the new findOne test.

🤖 Generated with Claude Code

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@changeset-bot
Copy link

changeset-bot bot commented Feb 19, 2026

🦋 Changeset detected

Latest commit: 60c11dd

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

This PR includes changesets to release 1 package
Name Type
@tanstack/angular-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 Feb 19, 2026

More templates

@tanstack/angular-db

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

@tanstack/db

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

@tanstack/db-ivm

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

@tanstack/electric-db-collection

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

@tanstack/offline-transactions

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

@tanstack/powersync-db-collection

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

@tanstack/query-db-collection

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

@tanstack/react-db

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

@tanstack/rxdb-db-collection

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

@tanstack/solid-db

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

@tanstack/svelte-db

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

@tanstack/trailbase-db-collection

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

@tanstack/vue-db

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

commit: 60c11dd

@github-actions
Copy link
Contributor

github-actions bot commented Feb 19, 2026

Size Change: 0 B

Total Size: 92.1 kB

ℹ️ View Unchanged
Filename Size
./packages/db/dist/esm/collection/change-events.js 1.39 kB
./packages/db/dist/esm/collection/changes.js 1.22 kB
./packages/db/dist/esm/collection/events.js 388 B
./packages/db/dist/esm/collection/index.js 3.32 kB
./packages/db/dist/esm/collection/indexes.js 1.1 kB
./packages/db/dist/esm/collection/lifecycle.js 1.75 kB
./packages/db/dist/esm/collection/mutations.js 2.34 kB
./packages/db/dist/esm/collection/state.js 3.49 kB
./packages/db/dist/esm/collection/subscription.js 3.71 kB
./packages/db/dist/esm/collection/sync.js 2.41 kB
./packages/db/dist/esm/deferred.js 207 B
./packages/db/dist/esm/errors.js 4.7 kB
./packages/db/dist/esm/event-emitter.js 748 B
./packages/db/dist/esm/index.js 2.69 kB
./packages/db/dist/esm/indexes/auto-index.js 742 B
./packages/db/dist/esm/indexes/base-index.js 766 B
./packages/db/dist/esm/indexes/btree-index.js 2.17 kB
./packages/db/dist/esm/indexes/lazy-index.js 1.1 kB
./packages/db/dist/esm/indexes/reverse-index.js 538 B
./packages/db/dist/esm/local-only.js 808 B
./packages/db/dist/esm/local-storage.js 2.1 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.75 kB
./packages/db/dist/esm/query/builder/functions.js 733 B
./packages/db/dist/esm/query/builder/index.js 4.09 kB
./packages/db/dist/esm/query/builder/ref-proxy.js 1.05 kB
./packages/db/dist/esm/query/compiler/evaluators.js 1.43 kB
./packages/db/dist/esm/query/compiler/expressions.js 430 B
./packages/db/dist/esm/query/compiler/group-by.js 1.81 kB
./packages/db/dist/esm/query/compiler/index.js 2.02 kB
./packages/db/dist/esm/query/compiler/joins.js 2.11 kB
./packages/db/dist/esm/query/compiler/order-by.js 1.45 kB
./packages/db/dist/esm/query/compiler/select.js 1.06 kB
./packages/db/dist/esm/query/expression-helpers.js 1.43 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.44 kB
./packages/db/dist/esm/query/live/collection-registry.js 264 B
./packages/db/dist/esm/query/live/collection-subscriber.js 2.42 kB
./packages/db/dist/esm/query/live/internal.js 145 B
./packages/db/dist/esm/query/optimizer.js 2.62 kB
./packages/db/dist/esm/query/predicate-utils.js 2.97 kB
./packages/db/dist/esm/query/subset-dedupe.js 921 B
./packages/db/dist/esm/scheduler.js 1.3 kB
./packages/db/dist/esm/SortedMap.js 1.3 kB
./packages/db/dist/esm/strategies/debounceStrategy.js 247 B
./packages/db/dist/esm/strategies/queueStrategy.js 428 B
./packages/db/dist/esm/strategies/throttleStrategy.js 246 B
./packages/db/dist/esm/transactions.js 2.9 kB
./packages/db/dist/esm/utils.js 924 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 952 B
./packages/db/dist/esm/utils/cursor.js 457 B
./packages/db/dist/esm/utils/index-optimization.js 1.51 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 Feb 19, 2026

Size Change: 0 B

Total Size: 3.7 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.34 kB
./packages/react-db/dist/esm/useLiveSuspenseQuery.js 559 B
./packages/react-db/dist/esm/usePacedMutations.js 401 B

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

Adds inject-live-query.test-d.ts with expectTypeOf assertions verifying that
injectLiveQuery with findOne() types data as Signal<Person | undefined>
and regular queries type data as Signal<Array<T>>.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
kevin-dp and others added 3 commits February 19, 2026 15:35
- Add NonSingleResult to createMockCollection return type since mock
  collections are never singleResult
- Add non-null assertions for collection() signal access in tests

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
… (issue #1261)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
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.

findOne still returning array in angular-db

1 participant