Skip to content

Conversation

samwillis
Copy link
Collaborator

@samwillis samwillis commented Sep 15, 2025

This adds a new event system for generic collection events, such as status changes or notification of the change in subscribers. It's strongly typed based on the passed in event name.

This can be used by #462 as the events to trigger subscribing/unsubscribing from Query. I also intend to use it in a refactor of the live query collection and its status triggers.

We should look to replace .onFirstReady with .once('status:ready', () => ...) in a followup, and deprecate that api.

@samwillis samwillis requested a review from kevin-dp September 15, 2025 17:45
Copy link

changeset-bot bot commented Sep 15, 2025

🦋 Changeset detected

Latest commit: 144165e

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

This PR includes changesets to release 12 packages
Name Type
@tanstack/db Patch
@tanstack/angular-db Patch
@tanstack/electric-db-collection Patch
@tanstack/query-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
todos Patch
@tanstack/db-example-react-todo 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

@samwillis samwillis requested review from KyleAMathews and kevin-dp and removed request for kevin-dp September 15, 2025 17:45
@samwillis samwillis force-pushed the samwillis/collection-events branch from db5408f to a4b1204 Compare September 15, 2025 18:32
Copy link

pkg-pr-new bot commented Sep 15, 2025

More templates

@tanstack/angular-db

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

@tanstack/db

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

@tanstack/db-ivm

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

@tanstack/electric-db-collection

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

@tanstack/query-db-collection

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

@tanstack/react-db

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

@tanstack/rxdb-db-collection

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

@tanstack/solid-db

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

@tanstack/svelte-db

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

@tanstack/trailbase-db-collection

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

@tanstack/vue-db

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

commit: 144165e

Copy link
Contributor

github-actions bot commented Sep 15, 2025

Size Change: +958 B (+1.42%)

Total Size: 68.4 kB

Filename Size Change
./packages/db/dist/esm/collection.js 10.9 kB +286 B (+2.69%)
./packages/db/dist/esm/collection-events.js 672 B +672 B (new file) 🆕
ℹ️ View Unchanged
Filename Size
./packages/db/dist/esm/change-events.js 1.13 kB
./packages/db/dist/esm/deferred.js 230 B
./packages/db/dist/esm/errors.js 3.1 kB
./packages/db/dist/esm/index.js 1.55 kB
./packages/db/dist/esm/indexes/auto-index.js 745 B
./packages/db/dist/esm/indexes/base-index.js 605 B
./packages/db/dist/esm/indexes/btree-index.js 1.74 kB
./packages/db/dist/esm/indexes/lazy-index.js 1.25 kB
./packages/db/dist/esm/local-only.js 827 B
./packages/db/dist/esm/local-storage.js 2.02 kB
./packages/db/dist/esm/optimistic-action.js 294 B
./packages/db/dist/esm/proxy.js 3.87 kB
./packages/db/dist/esm/query/builder/functions.js 615 B
./packages/db/dist/esm/query/builder/index.js 3.93 kB
./packages/db/dist/esm/query/builder/ref-proxy.js 938 B
./packages/db/dist/esm/query/compiler/evaluators.js 1.52 kB
./packages/db/dist/esm/query/compiler/expressions.js 631 B
./packages/db/dist/esm/query/compiler/group-by.js 2.08 kB
./packages/db/dist/esm/query/compiler/index.js 2.27 kB
./packages/db/dist/esm/query/compiler/joins.js 2.52 kB
./packages/db/dist/esm/query/compiler/order-by.js 1.23 kB
./packages/db/dist/esm/query/compiler/select.js 1.28 kB
./packages/db/dist/esm/query/ir.js 508 B
./packages/db/dist/esm/query/live-query-collection.js 333 B
./packages/db/dist/esm/query/live/collection-config-builder.js 2.59 kB
./packages/db/dist/esm/query/live/collection-subscriber.js 2.4 kB
./packages/db/dist/esm/query/optimizer.js 3.05 kB
./packages/db/dist/esm/SortedMap.js 1.24 kB
./packages/db/dist/esm/transactions.js 3.03 kB
./packages/db/dist/esm/utils.js 943 B
./packages/db/dist/esm/utils/btree.js 6.02 kB
./packages/db/dist/esm/utils/comparison.js 718 B
./packages/db/dist/esm/utils/index-optimization.js 1.62 kB

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

Copy link
Contributor

github-actions bot commented Sep 15, 2025

Size Change: 0 B

Total Size: 1.18 kB

ℹ️ View Unchanged
Filename Size
./packages/react-db/dist/esm/index.js 152 B
./packages/react-db/dist/esm/useLiveQuery.js 1.02 kB

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

event: T,
eventPayload: AllCollectionEvents[T]
) {
this.listeners.get(event)?.forEach((listener) => listener(eventPayload))
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

a listener exception could break the loop so let's wrap the listener call in a try/catch

subscriberCount: number
}

export type AllCollectionEvents = {
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Export a union: export type CollectionEvent = AllCollectionEvents[keyof AllCollectionEvents] for switch(event.type) ergonomics.

@samwillis samwillis merged commit cacfca2 into main Sep 18, 2025
6 checks passed
@samwillis samwillis deleted the samwillis/collection-events branch September 18, 2025 08:22
@github-actions github-actions bot mentioned this pull request Sep 18, 2025
Uziniii pushed a commit to Uziniii/db that referenced this pull request Sep 19, 2025
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.

3 participants