Kysely dialects, plugins and other goodies for SurrealDB
MIT License
Bot releases are hidden (Show)
resolveBasePath
for 127.0.0.1
by @sonicjhon1 in https://github.com/igalklebanov/kysely-surrealdb/pull/13
Full Changelog: https://github.com/igalklebanov/kysely-surrealdb/compare/v0.7.3...v0.7.4
Published by igalklebanov over 1 year ago
New Features:
kysely-surrealdb/helpers
, first batch of helpers is basic types as SurrealQL literals.import { FALSE, NONE, NULL, TRUE } from 'kysely-surrealdb/helpers'
await db.create('person:123').set({
married: FALSE,
age: NONE,
children: NULL,
excited: TRUE,
}).execute()
// create person:123 set married = false, age = none, children = null, excited = true;
Other changes:
Full Changelog: https://github.com/igalklebanov/kysely-surrealdb/compare/v0.7.1...v0.7.3
Published by igalklebanov over 1 year ago
So apparently surrealdb.js has introduced some breaking changes at 0.6.0 and 0.7.x that make kysely-surrealdb unusable.
This patch version makes sure you stay on surrealdb.js v0.5.0 while we investigate further.
Full Changelog: https://github.com/igalklebanov/kysely-surrealdb/compare/v0.7.0...v0.7.1
Published by igalklebanov over 1 year ago
SurrealDbWebSocketsDialect
import {Kysely} from 'kysely'
import {SurrealDatabase, SurrealDbWebSocketsDialect, type SurrealEdge} from 'kysely-surrealdb'
import Surreal from 'surrealdb.js'
interface Database {
person: {
first_name: string | null
last_name: string | null
age: number
}
own: SurrealEdge<{
time: {
adopted: string
} | null
}>
pet: {
name: string
owner_id: string | null
}
}
// with username and password
const db = new Kysely<SurrealDatabase<Database>>({
dialect: new SurrealDbWebSocketsDialect({
database: '<database>',
Driver: Surreal,
hostname: '<hostname>', // e.g. 'localhost:8000'
namespace: '<namespace>',
password: '<password>',
// scope: '<scope>', // optional
username: '<username>',
}),
})
// alternatively, with a token
const dbWithToken = new Kysely<SurrealDatabase<Database>>({
dialect: new SurrealDbWebSocketsDialect({
database: '<database>',
Driver: Surreal,
hostname: '<hostname>', // e.g. 'localhost:8000'
namespace: '<namespace>',
token: '<token>',
}),
})
Note: transactions with Kysely's built-in methods don't work yet.
Published by igalklebanov over 1 year ago
IF ELSE
statement support. Try out SurrealKysely.ifThen(condition, expression)
.const accounts = await db
.ifThen(sql`${scope} = ${sql.literal('admin')}`, db.selectFrom('account').selectAll())
.elseIfThen(sql`${scope} = ${sql.literal('user')}`, sql<Account[]>`(select * from ${auth}.account)`)
.else(sql<[]>`[]`)
.end()
.execute()
const result = await db.updateTable('person').set({
railcard: db
.ifThen(sql`${sql.ref('age')} <= 10`, sql.literal('junior'))
.elseIfThen(sql`${sql.ref('age')} <= 21`, sql.literal('student'))
.elseIfThen(sql`${sql.ref('age')} >= 65`, sql.literal('senior'))
.else(sql`null`)
.end(),
})
.executeTakeFirstOrThrow()
These would be very nice once the new Kysely ExpressionBuilder
capabilities are released!
call
, if
, withPlugin
, etc methods to align with Kysely's changes (adding $
prefix to utility non-sql methods).>= 0.23.5
.