Skip to content

Commit 506aaee

Browse files
committed
Merge branch 'main' into feat/watch-schema-changes
# Conflicts: # packages/react-native/package.json # pnpm-lock.yaml
2 parents ac2839f + 1753453 commit 506aaee

File tree

20 files changed

+979
-334
lines changed

20 files changed

+979
-334
lines changed

.changeset/perfect-zebras-marry.md

-7
This file was deleted.

.gitignore

+2-1
Original file line numberDiff line numberDiff line change
@@ -7,4 +7,5 @@ dist
77
.idea
88
.fleet
99
# Useful if running repository in VSCode dev container
10-
.pnpm-store
10+
.pnpm-store
11+
__screenshots__

packages/common/CHANGELOG.md

+6
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,11 @@
11
# @powersync/common
22

3+
## 1.20.2
4+
5+
### Patch Changes
6+
7+
- 96f1a87: Improved `getCrudBatch` to use a default limit of 100 CRUD entries.
8+
39
## 1.20.1
410

511
### Patch Changes

packages/common/package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@powersync/common",
3-
"version": "1.20.1",
3+
"version": "1.20.2",
44
"publishConfig": {
55
"registry": "https://registry.npmjs.org/",
66
"access": "public"

packages/kysely-driver/CHANGELOG.md

+12
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,17 @@
11
# @powersync/kysely-driver
22

3+
## 1.0.0
4+
5+
### Major Changes
6+
7+
- 16291ae: Move kysely out of Beta
8+
9+
### Patch Changes
10+
11+
- 7589720: Update kysely to 0.27.4
12+
- Updated dependencies [96f1a87]
13+
- @powersync/common@1.20.2
14+
315
## 0.4.2
416

517
### Patch Changes

packages/kysely-driver/README.md

+11-125
Original file line numberDiff line numberDiff line change
@@ -2,19 +2,15 @@
22

33
This package (`packages/kysely-driver`) brings the benefits of an ORM through our maintained [Kysely](https://kysely.dev/) driver to [PowerSync](https://powersync.com).
44

5-
## Beta Release
6-
7-
The `kysely-driver` package is currently in a beta release.
8-
95
## Getting started
106

117
Set up the PowerSync Database and wrap it with Kysely.
128

13-
Table column object type definitions are not yet available in JavaScript.
14-
159
```js
1610
import { wrapPowerSyncWithKysely } from '@powersync/kysely-driver';
1711
import { PowerSyncDatabase } from '@powersync/web';
12+
13+
// Define schema as in: https://docs.powersync.com/usage/installation/client-side-setup/define-your-schema
1814
import { appSchema } from './schema';
1915

2016
export const powerSyncDb = new PowerSyncDatabase({
@@ -25,26 +21,20 @@ export const powerSyncDb = new PowerSyncDatabase({
2521
});
2622

2723
export const db = wrapPowerSyncWithKysely(powerSyncDb);
24+
25+
const result = await db.selectFrom('users').selectAll().execute();
26+
27+
// [{ id: '1', name: 'user1' }, { id: '2', name: 'user2' }]
2828
```
2929

30-
When defining the app schema with new `TableV2` declarations, the TypeScript types for tables can be automatically generated.
31-
See an [example](https://github.com/powersync-ja/powersync-js/blob/main/demos/react-supabase-todolist/src/library/powersync/AppSchema.ts) of defining the app schema with `TableV2`.
30+
With typing for TypeScript:
3231

3332
```TypeScript
3433
import { wrapPowerSyncWithKysely } from '@powersync/kysely-driver';
3534
import { PowerSyncDatabase } from "@powersync/web";
3635

3736
// Define schema as in: https://docs.powersync.com/usage/installation/client-side-setup/define-your-schema
38-
import { appSchema } from "./schema";
39-
40-
// If using Schema with TableV2
41-
export type Database = (typeof appSchema)['types'];
42-
43-
// If using Schema with v1 tables
44-
export type Database = {
45-
todos: TodoRecord; // Interface defined externally for Todo item object
46-
lists: ListsRecord; // Interface defined externally for list item object
47-
};
37+
import { appSchema, Database } from "./schema";
4838

4939
export const powerSyncDb = new PowerSyncDatabase({
5040
database: {
@@ -55,116 +45,12 @@ export const powerSyncDb = new PowerSyncDatabase({
5545

5646
// `db` now automatically contains types for defined tables
5747
export const db = wrapPowerSyncWithKysely<Database>(powerSyncDb)
58-
```
59-
60-
For more information on Kysely typing, see [here](https://kysely.dev/docs/getting-started#types).
61-
62-
Now you are able to use Kysely queries:
63-
64-
### Select
65-
66-
- In Kysely
67-
68-
```js
69-
const result = await db.selectFrom('users').selectAll().execute();
70-
71-
// {id: '1', name: 'user1', id: '2', name: 'user2'}
72-
```
73-
74-
- In PowerSync
75-
76-
```js
77-
const result = await powerSyncDb.getAll('SELECT * from users');
78-
79-
// {id: '1', name: 'user1', id: '2', name: 'user2'}
80-
```
81-
82-
### Insert
83-
84-
- In Kysely
85-
86-
```js
87-
await db.insertInto('users').values({ id: '1', name: 'John' }).execute();
88-
const result = await db.selectFrom('users').selectAll().execute();
89-
90-
// {id: '1', name: 'John'}
91-
```
92-
93-
- In PowerSync
9448

95-
```js
96-
await powerSyncDb.execute('INSERT INTO users (id, name) VALUES(1, ?)', ['John']);
97-
const result = await powerSyncDb.getAll('SELECT * from users');
98-
99-
// {id: '1', name: 'John'}
100-
```
101-
102-
### Delete
103-
104-
- In Kysely
105-
106-
```js
107-
await db.insertInto('users').values({ id: '2', name: 'Ben' }).execute();
108-
await db.deleteFrom('users').where('name', '=', 'Ben').execute();
10949
const result = await db.selectFrom('users').selectAll().execute();
11050

111-
// { }
112-
```
113-
114-
- In PowerSync
115-
116-
```js
117-
await powerSyncDb.execute('INSERT INTO users (id, name) VALUES(2, ?)', ['Ben']);
118-
await powerSyncDb.execute(`DELETE FROM users WHERE name = ?`, ['Ben']);
119-
const result = await powerSyncDb.getAll('SELECT * from users');
120-
121-
// { }
122-
```
123-
124-
### Update
125-
126-
- In Kysely
127-
128-
```js
129-
await db.insertInto('users').values({ id: '3', name: 'Lucy' }).execute();
130-
await db.updateTable('users').where('name', '=', 'Lucy').set('name', 'Lucy Smith').execute();
131-
const result = await db.selectFrom('users').select('name').executeTakeFirstOrThrow();
132-
133-
// { id: '3', name: 'Lucy Smith' }
51+
// [{ id: '1', name: 'user1' }, { id: '2', name: 'user2' }]
13452
```
13553

136-
- In PowerSync
137-
138-
```js
139-
await powerSyncDb.execute('INSERT INTO users (id, name) VALUES(3, ?)', ['Lucy']);
140-
await powerSyncDb.execute('UPDATE users SET name = ? WHERE name = ?', ['Lucy Smith', 'Lucy']);
141-
const result = await powerSyncDb.getAll('SELECT * from users');
142-
143-
// { id: '3', name: 'Lucy Smith' }
144-
```
145-
146-
### Transaction
147-
148-
- In Kysely
149-
150-
```js
151-
await db.transaction().execute(async (transaction) => {
152-
await transaction.insertInto('users').values({ id: '4', name: 'James' }).execute();
153-
await transaction.updateTable('users').where('name', '=', 'James').set('name', 'James Smith').execute();
154-
});
155-
const result = await db.selectFrom('users').select('name').executeTakeFirstOrThrow();
156-
157-
// { id: '4', name: 'James Smith' }
158-
```
159-
160-
- In PowerSync
161-
162-
```js
163-
await powerSyncDb.writeTransaction((transaction) => {
164-
await transaction.execute('INSERT INTO users (id, name) VALUES(4, ?)', ['James']);
165-
await transaction.execute("UPDATE users SET name = ? WHERE name = ?", ['James Smith', 'James']);
166-
})
167-
const result = await powerSyncDb.getAll('SELECT * from users')
54+
For more information on Kysely typing, see [here](https://kysely.dev/docs/getting-started#types).
16855

169-
// { id: '4', name: 'James Smith' }
170-
```
56+
For more information on how to use Kysely queries in PowerSync, see [here](https://docs.powersync.com/client-sdk-references/javascript-web/javascript-orm/kysely#usage-examples).

packages/kysely-driver/package.json

+10-10
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@powersync/kysely-driver",
3-
"version": "0.4.2",
3+
"version": "1.0.0",
44
"description": "Kysely driver for PowerSync",
55
"main": "lib/src/index.js",
66
"types": "lib/src/index.d.ts",
@@ -26,23 +26,23 @@
2626
"test": "pnpm build && vitest"
2727
},
2828
"peerDependencies": {
29-
"@powersync/common": "workspace:^1.20.1"
29+
"@powersync/common": "workspace:^1.20.2"
3030
},
3131
"dependencies": {
32-
"kysely": "^0.27.2"
32+
"kysely": "^0.27.4"
3333
},
3434
"devDependencies": {
3535
"@powersync/web": "workspace:*",
3636
"@journeyapps/wa-sqlite": "^0.4.1",
37-
"@types/node": "^20.11.17",
38-
"@vitest/browser": "^1.3.1",
37+
"@types/node": "^20.17.6",
38+
"@vitest/browser": "^2.1.4",
3939
"ts-loader": "^9.5.1",
4040
"ts-node": "^10.9.2",
41-
"typescript": "^5.5.3",
42-
"vite": "^5.1.1",
43-
"vite-plugin-top-level-await": "^1.4.1",
41+
"typescript": "^5.6.3",
42+
"vite": "^5.4.10",
43+
"vite-plugin-top-level-await": "^1.4.4",
4444
"vite-plugin-wasm": "^3.3.0",
45-
"vitest": "^1.3.0",
46-
"webdriverio": "^8.32.3"
45+
"vitest": "^2.1.4",
46+
"webdriverio": "^9.2.8"
4747
}
4848
}

packages/kysely-driver/tests/setup/db.ts

+2-4
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
1-
import { Schema, TableV2, PowerSyncDatabase, column } from '@powersync/web';
2-
import { wrapPowerSyncWithKysely } from '../../src/sqlite/db';
3-
import { Database } from './types';
1+
import { Schema, PowerSyncDatabase, column, Table } from '@powersync/web';
42

5-
const users = new TableV2({
3+
const users = new Table({
64
name: column.text
75
});
86

packages/kysely-driver/tests/sqlite/db.test.ts

+14-2
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
import { afterEach, beforeEach, describe, expect, it } from 'vitest';
22
import * as SUT from '../../src/sqlite/db';
3-
import { Kysely } from 'kysely';
3+
import { Kysely, sql } from 'kysely';
44
import { getPowerSyncDb } from '../setup/db';
55
import { AbstractPowerSyncDatabase } from '@powersync/common';
6-
import { Database } from '../setup/types';
6+
import { Database, UsersTable } from '../setup/types';
77

88
describe('CRUD operations', () => {
99
let powerSyncDb: AbstractPowerSyncDatabase;
@@ -50,4 +50,16 @@ describe('CRUD operations', () => {
5050

5151
expect(result.name).toEqual('James Smith');
5252
});
53+
54+
55+
it('should insert a user and update that user within a transaction when raw sql is used', async () => {
56+
await db.transaction().execute(async (transaction) => {
57+
await sql`INSERT INTO users (id, name) VALUES ('4', 'James');`.execute(transaction)
58+
await transaction.updateTable('users').where('name', '=', 'James').set('name', 'James Smith').execute();
59+
});
60+
console.log(await db.selectFrom('users').selectAll().execute())
61+
const result = await db.selectFrom('users').select('name').executeTakeFirstOrThrow();
62+
63+
expect(result.name).toEqual('James Smith');
64+
});
5365
});

packages/powersync-op-sqlite/CHANGELOG.md

+7
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,12 @@
11
# @powersync/op-sqlite
22

3+
## 0.0.7
4+
5+
### Patch Changes
6+
7+
- Updated dependencies [96f1a87]
8+
- @powersync/common@1.20.2
9+
310
## 0.0.6
411

512
### Patch Changes

packages/powersync-op-sqlite/package.json

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@powersync/op-sqlite",
3-
"version": "0.0.6",
3+
"version": "0.0.7",
44
"description": "PowerSync - sync Postgres or MongoDB with SQLite in your React Native app for offline-first and real-time data",
55
"source": "./src/index.ts",
66
"main": "./lib/commonjs/index.js",
@@ -66,7 +66,7 @@
6666
},
6767
"peerDependencies": {
6868
"@op-engineering/op-sqlite": "^9.2.1",
69-
"@powersync/common": "workspace:^1.20.1",
69+
"@powersync/common": "workspace:^1.20.2",
7070
"react": "*",
7171
"react-native": "*"
7272
},

packages/react-native/CHANGELOG.md

+8
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,13 @@
11
# @powersync/react-native
22

3+
## 1.14.4
4+
5+
### Patch Changes
6+
7+
- 96f1a87: Improved `getCrudBatch` to use a default limit of 100 CRUD entries.
8+
- Updated dependencies [96f1a87]
9+
- @powersync/common@1.20.2
10+
311
## 1.14.3
412

513
### Patch Changes

packages/react-native/package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@powersync/react-native",
3-
"version": "1.14.3",
3+
"version": "1.14.4",
44
"publishConfig": {
55
"registry": "https://registry.npmjs.org/",
66
"access": "public"

packages/tanstack-react-query/CHANGELOG.md

+7
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,12 @@
11
# @powersync/tanstack-react-query
22

3+
## 0.0.7
4+
5+
### Patch Changes
6+
7+
- Updated dependencies [96f1a87]
8+
- @powersync/common@1.20.2
9+
310
## 0.0.6
411

512
### Patch Changes

packages/tanstack-react-query/package.json

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@powersync/tanstack-react-query",
3-
"version": "0.0.6",
3+
"version": "0.0.7",
44
"publishConfig": {
55
"registry": "https://registry.npmjs.org/",
66
"access": "public"
@@ -28,7 +28,7 @@
2828
},
2929
"homepage": "https://docs.powersync.com",
3030
"peerDependencies": {
31-
"@powersync/common": "workspace:^1.20.1",
31+
"@powersync/common": "workspace:^1.20.2",
3232
"react": "*"
3333
},
3434
"dependencies": {

0 commit comments

Comments
 (0)