PowerSync collection: Upgrade PowerSync SDK to v2#1688
Conversation
📝 WalkthroughWalkthroughThe collection package is updated for PowerSync 2, including database type contracts, table-derived serialization types, structured logging, direct CRUD test queries, documentation, dependency versions, and release metadata. ChangesPowerSync 2 collection migration
Estimated code review effort: 3 (Moderate) | ~20 minutes 🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
Warning There were issues while running some tools. Please review the errors and either fix the tool's configuration or disable the tool if it's a critical failure. 🔧 Checkov (3.3.8)packages/powersync-db-collection/package.jsonTraceback (most recent call last): 🔧 ESLint
ESLint install timed out. The project may have too many dependencies for the sandbox. Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
|
Review the following changes in direct dependencies. Learn more about Socket for GitHub.
|
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@packages/powersync-db-collection/src/helpers.ts`:
- Around line 65-71: The AnyTableColumnType type uses any for column values;
replace it with unknown in the mapped type while preserving the existing keys
and id: string requirement.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro
Run ID: b88345c5-d8cc-4d9b-90ee-e8b1a52cc9eb
⛔ Files ignored due to path filters (1)
pnpm-lock.yamlis excluded by!**/pnpm-lock.yaml
📒 Files selected for processing (8)
.changeset/olive-guests-bathe.mddocs/collections/powersync-collection.mdpackages/powersync-db-collection/package.jsonpackages/powersync-db-collection/src/PowerSyncTransactor.tspackages/powersync-db-collection/src/helpers.tspackages/powersync-db-collection/src/powersync.tspackages/powersync-db-collection/src/serialization.tspackages/powersync-db-collection/tests/powersync.test.ts
| /** | ||
| * Maps the schema of TTable to a type which | ||
| * requires the keys be equal, but the values can have any value type. | ||
| */ | ||
| export type AnyTableColumnType<TTable extends Table> = { | ||
| [K in keyof TTable[`columnMap`]]: any | ||
| [K in keyof ExtractedTableColumns<TTable>]: any | ||
| } & { id: string } |
There was a problem hiding this comment.
📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win
Avoid using any types; prefer unknown.
As per coding guidelines: "Avoid using any types; use unknown instead when the type is truly unknown". Using unknown for the column values improves type safety by requiring type guards before operations on the values.
💻 Proposed fix
export type AnyTableColumnType<TTable extends Table> = {
- [K in keyof ExtractedTableColumns<TTable>]: any
+ [K in keyof ExtractedTableColumns<TTable>]: unknown
} & { id: string }📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| /** | |
| * Maps the schema of TTable to a type which | |
| * requires the keys be equal, but the values can have any value type. | |
| */ | |
| export type AnyTableColumnType<TTable extends Table> = { | |
| [K in keyof TTable[`columnMap`]]: any | |
| [K in keyof ExtractedTableColumns<TTable>]: any | |
| } & { id: string } | |
| /** | |
| * Maps the schema of TTable to a type which | |
| * requires the keys be equal, but the values can have any value type. | |
| */ | |
| export type AnyTableColumnType<TTable extends Table> = { | |
| [K in keyof ExtractedTableColumns<TTable>]: unknown | |
| } & { id: string } |
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@packages/powersync-db-collection/src/helpers.ts` around lines 65 - 71, The
AnyTableColumnType type uses any for column values; replace it with unknown in
the mapped type while preserving the existing keys and id: string requirement.
Source: Coding guidelines
🎯 Changes
This upgrades
@powersync/dependencies to their latest version, which includes breaking changes affecting@tanstack/powersync-db-collection:AbstractPowerSyncDatabaseis a deprecated type-alias, we should useCommonPowerSyncDatabaseinstead.log()function instead of one per severity now.Table.columnMaphas been removed in favor of a type parameter, this changes a few helper types toinferthe column structure instead of extracting it from a field.CrudEntryclass is an implementation detail and no longer exposed. The integration used that in tests, this replaces usages by directly querying from the underlying internal table instead.This simplifies some types around
serializeForSQLite, but nothing that affects compiled JS.✅ Checklist
pnpm test.🚀 Release Impact
Summary by CodeRabbit
New Features
Bug Fixes
Documentation