Skip to content

Conversation

@KyleAMathews
Copy link
Collaborator

This was quite thin before.

claude and others added 8 commits October 23, 2025 16:44
…c team

This document clarifies the TInput/TOutput architecture and explains how
PowerSync can support arbitrary type transformations (like Date objects)
by handling serialization in their integration layer rather than
constraining TOutput to match SQLite types.

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

Co-Authored-By: Claude <[email protected]>
This proposal addresses the lack of documentation around TInput/TOutput
schema types and transformations. It includes:

- Complete content outline for new schemas.md guide
- Data flow diagrams and examples
- Guidance for both app developers and integration authors
- Common patterns for Date handling, defaults, and type conversions
- Updates to existing docs (overview, mutations, collection-options-creator)

The proposal directly addresses confusion like what the PowerSync team
experienced regarding how to handle type transformations and
serialization in integrations.

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

Co-Authored-By: Claude <[email protected]>
After investigating all existing docs (overview, mutations, error-handling,
live-queries, collection-options-creator) and examples, created a refined
plan that addresses:

KEY FINDING: Two distinct type conversion mechanisms
1. Integration-level parsing (storage format ↔ in-memory format)
2. Schema validation/transformation (TInput → TOutput for mutations)

The plan includes:
- Analysis of what's currently documented (and gaps)
- Comprehensive schemas.md guide structure (11 sections)
- Specific updates to 5 existing docs with exact content
- Separate guidance for app developers vs integration authors
- Clear distinction between integration parsing and schema validation
- Complete working examples and best practices
- Implementation order and success criteria

This directly addresses the PowerSync confusion about TInput/TOutput and
provides clear guidance for both audiences.

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

Co-Authored-By: Claude <[email protected]>
New guide (docs/guides/schemas.md) covering:

- Introduction with validation-first example
- Core concepts: TInput vs TOutput with data flow diagram
- Validation patterns (types, strings, numbers, enums, arrays, custom)
- Transformation patterns (Date conversion, JSON, computed fields)
- Default values (literals, functions, complex)
- Handling updates with union types pattern
- Error handling with SchemaValidationError
- Best practices (with performance callout)
- Two complete working examples (Todo app, E-commerce)
- Brief integration authors section linking to collection-options-creator
- Related topics links

This addresses the documentation gap identified in the PowerSync question
about TInput/TOutput and provides clear guidance for both app developers
and integration authors on schema validation and type transformations.

~850 lines, 12 sections, 30+ code examples

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

Co-Authored-By: Claude <[email protected]>
Address review feedback to make the guide more focused and practical:

- Add clarification that schemas only validate client changes, not server data
- Remove "Handling Sync Validation Errors" section
- Fix QueryFn example to show manual parsing is required for API responses
- Rename "Handling Updates" to "Handling Timestamps" with better focus on common patterns
- Remove "Safe Parsing (Zod)" section
- Remove "When to Use Schemas" from Best Practices
- Remove "Schema Organization" from Best Practices
- Replace lengthy "For Integration Authors" section with brief link to collection-options-creator.md

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

Co-Authored-By: Claude <[email protected]>
- Explicitly mention schemas catch invalid data from optimistic mutations
- Show reusing schema with .parse() in queryFn to transform API responses
- Remove The Data Flow diagram section (had errors and wasn't useful)

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

Co-Authored-By: Claude <[email protected]>
Updates across documentation to explain schemas and type transformations:

**overview.md:**
- Expand collection schemas section with comprehensive example
- Add list of what schemas do (validation, transformations, defaults, type safety)
- Link to new schemas guide

**mutations.md:**
- Add "Schema Validation in Mutation Handlers" section
- Explain that handlers receive TOutput (transformed data)
- Show serialization pattern for backends

**error-handling.md:**
- Add "When schema validation occurs" section
- Clarify schemas only validate client mutations, not sync data
- Link to schemas guide

**collection-options-creator.md:**
- Add "Schemas and Type Transformations" section
- Explain three approaches: parse/serialize helpers, user handles, automatic serialization
- Show examples from TrailBase and Query Collection
- Document design principles for integration authors

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

Co-Authored-By: Claude <[email protected]>
@changeset-bot
Copy link

changeset-bot bot commented Oct 31, 2025

⚠️ No Changeset found

Latest commit: d43d711

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 Oct 31, 2025

More templates

@tanstack/angular-db

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

@tanstack/db

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

@tanstack/db-ivm

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

@tanstack/electric-db-collection

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

@tanstack/query-db-collection

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

@tanstack/react-db

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

@tanstack/rxdb-db-collection

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

@tanstack/solid-db

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

@tanstack/svelte-db

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

@tanstack/trailbase-db-collection

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

@tanstack/vue-db

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

commit: d43d711

@KyleAMathews KyleAMathews requested a review from thruflo October 31, 2025 17:10
@github-actions
Copy link
Contributor

Size Change: 0 B

Total Size: 77.6 kB

ℹ️ View Unchanged
Filename Size
./packages/db/dist/esm/collection/change-events.js 1.34 kB
./packages/db/dist/esm/collection/changes.js 958 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 kB
./packages/db/dist/esm/collection/sync.js 2.02 kB
./packages/db/dist/esm/deferred.js 207 B
./packages/db/dist/esm/errors.js 3.29 kB
./packages/db/dist/esm/event-emitter.js 748 B
./packages/db/dist/esm/index.js 2.31 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.08 kB
./packages/db/dist/esm/optimistic-action.js 273 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.26 kB
./packages/db/dist/esm/query/compiler/expressions.js 674 B
./packages/db/dist/esm/query/compiler/group-by.js 1.78 kB
./packages/db/dist/esm/query/compiler/index.js 1.78 kB
./packages/db/dist/esm/query/compiler/joins.js 2 kB
./packages/db/dist/esm/query/compiler/order-by.js 1.18 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 kB
./packages/db/dist/esm/query/live/collection-registry.js 214 B
./packages/db/dist/esm/query/live/collection-subscriber.js 1.86 kB
./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.83 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

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

@github-actions
Copy link
Contributor

Size Change: 0 B

Total Size: 2.89 kB

ℹ️ View Unchanged
Filename Size
./packages/react-db/dist/esm/index.js 207 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/usePacedMutations.js 401 B

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

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