diff --git a/.changeset/wise-coats-wash.md b/.changeset/wise-coats-wash.md new file mode 100644 index 000000000..4a3df8f58 --- /dev/null +++ b/.changeset/wise-coats-wash.md @@ -0,0 +1,5 @@ +--- +'@powersync/kysely-driver': major +--- + +Move kysely out of Beta diff --git a/packages/kysely-driver/README.md b/packages/kysely-driver/README.md index 33eb2eab5..e2a185bf4 100644 --- a/packages/kysely-driver/README.md +++ b/packages/kysely-driver/README.md @@ -2,10 +2,6 @@ This package (`packages/kysely-driver`) brings the benefits of an ORM through our maintained [Kysely](https://kysely.dev/) driver to [PowerSync](https://powersync.com). -## Beta Release - -The `kysely-driver` package is currently in a beta release. - ## Getting started Set up the PowerSync Database and wrap it with Kysely. @@ -25,6 +21,10 @@ export const powerSyncDb = new PowerSyncDatabase({ }); export const db = wrapPowerSyncWithKysely(powerSyncDb); + +const result = await db.selectFrom('users').selectAll().execute(); + +// [{ id: '1', name: 'user1' }, { id: '2', name: 'user2' }] ``` With typing for TypeScript: @@ -34,7 +34,7 @@ import { wrapPowerSyncWithKysely } from '@powersync/kysely-driver'; import { PowerSyncDatabase } from "@powersync/web"; // Define schema as in: https://docs.powersync.com/usage/installation/client-side-setup/define-your-schema -import { appSchema } from "./schema"; +import { appSchema, Database } from "./schema"; export const powerSyncDb = new PowerSyncDatabase({ database: { @@ -45,128 +45,12 @@ export const powerSyncDb = new PowerSyncDatabase({ // `db` now automatically contains types for defined tables export const db = wrapPowerSyncWithKysely(powerSyncDb) -``` - -For more information on Kysely typing, see [here](https://kysely.dev/docs/getting-started#types). -Now you are able to use Kysely queries: - -### Select - -- In Kysely - -```js const result = await db.selectFrom('users').selectAll().execute(); // [{ id: '1', name: 'user1' }, { id: '2', name: 'user2' }] ``` -- In PowerSync - -```js -const result = await powerSyncDb.getAll('SELECT * from users'); - -// [{ id: '1', name: 'user1' }, { id: '2', name: 'user2' }] -``` - -### Insert - -- In Kysely - -```js -await db.insertInto('users').values({ id: '1', name: 'John' }).execute(); -const result = await db.selectFrom('users').selectAll().execute(); - -// [{ id: '1', name: 'John' }] -``` - -- In PowerSync - -```js -await powerSyncDb.execute('INSERT INTO users (id, name) VALUES(1, ?)', ['John']); -const result = await powerSyncDb.getAll('SELECT * from users'); - -// [{ id: '1', name: 'John' }] -``` - -### Delete - -- In Kysely - -```js -await db.insertInto('users').values({ id: '2', name: 'Ben' }).execute(); -await db.deleteFrom('users').where('name', '=', 'Ben').execute(); -const result = await db.selectFrom('users').selectAll().execute(); - -// [] -``` - -- In PowerSync - -```js -await powerSyncDb.execute('INSERT INTO users (id, name) VALUES(2, ?)', ['Ben']); -await powerSyncDb.execute(`DELETE FROM users WHERE name = ?`, ['Ben']); -const result = await powerSyncDb.getAll('SELECT * from users'); - -// [] -``` - -### Update - -- In Kysely - -```js -await db.insertInto('users').values({ id: '3', name: 'Lucy' }).execute(); -await db.updateTable('users').where('name', '=', 'Lucy').set('name', 'Lucy Smith').execute(); -const result = await db.selectFrom('users').select('name').executeTakeFirstOrThrow(); - -// 'Lucy Smith' -``` - -- In PowerSync - -```js -await powerSyncDb.execute('INSERT INTO users (id, name) VALUES(3, ?)', ['Lucy']); -await powerSyncDb.execute('UPDATE users SET name = ? WHERE name = ?', ['Lucy Smith', 'Lucy']); -const result = await powerSyncDb.get('SELECT name FROM users WHERE name = ?', ['Lucy Smith']) - -// 'Lucy Smith' -``` - -### Transaction - -- In Kysely - -```js -await db.transaction().execute(async (transaction) => { - await transaction.insertInto('users').values({ id: '4', name: 'James' }).execute(); - await transaction.updateTable('users').where('name', '=', 'James').set('name', 'James Smith').execute(); -}); -const result = await db.selectFrom('users').select('name').executeTakeFirstOrThrow(); - -// 'James Smith' -``` - -- In Kysely also using raw SQL - -```js -await db.transaction().execute(async (transaction) => { - await sql`INSERT INTO users (id, name) VALUES ('4', 'James');`.execute(transaction) - await transaction.updateTable('users').where('name', '=', 'James').set('name', 'James Smith').execute(); -}); -const result = await db.selectFrom('users').select('name').executeTakeFirstOrThrow(); - -// 'James Smith' -``` - -- In PowerSync - -```js - await powerSyncDb.writeTransaction((transaction) => { - await transaction.execute('INSERT INTO users (id, name) VALUES(4, ?)', ['James']); - await transaction.execute("UPDATE users SET name = ? WHERE name = ?", ['James Smith', 'James']); - }) - const result = await powerSyncDb.get('SELECT name FROM users WHERE name = ?', ['James Smith']) +For more information on Kysely typing, see [here](https://kysely.dev/docs/getting-started#types). - // 'James Smith' -``` +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).