kysely-surrealdb
Kysely dialects, plugins and other goodies for SurrealDB.
SurrealQL is based on SQL, so why not? :trollface:
Installation
NPM 7+
npm i kysely-surrealdb
NPM <7
npm i kysely-surrealdb kysely
Yarn
yarn add kysely-surrealdb kysely
PNPM
pnpm add kysely-surrealdb kysely
Deno
This package uses/extends some Kysely types and classes, which are imported using it's NPM package name -- not a relative file path or CDN url.
To fix that, add an import_map.json
file.
{
"imports": {
"kysely": "https://cdn.jsdelivr.net/npm/kysely@0.22.0/dist/esm/index.js"
}
}
Usage
HTTP Dialect
SurrealDB's HTTP endpoints allows executing SurrealQL queries in the browser and is a great fit for serverless functions and other auto-scaling compute services.
Node.js 16.8+
Older node versions are supported as well, just swap undici
with node-fetch
.
import {Kysely} from 'kysely'
import {SurrealDatabase, SurrealDbHttpDialect} from 'kysely-surrealdb'
import {fetch} from 'undici'
interface Database {
person: {
id: GeneratedAlways<string>
first_name: string | null
last_name: string | null
age: number
}
pet: {
id: GeneratedAlways<string>
name: string
owner_id: string | null
}
}
const db = new Kysely<SurrealDatabase<Database>>({
dialect: new SurrealDbHttpDialect({
database: '<database>',
fetch,
hostname: '<hostname>',
namespace: '<namespace>',
password: '<password>',
username: '<username>',
}),
})
Web Socket Dialect - SoonTM
SurrealKysely Query Builder
The awesomeness of Kysely, with some SurrealQL query builders patched in.
import {Kysely} from 'kysely'
import {SurrealDatabase, SurrealDbHttpDialect} from 'kysely-surrealdb'
import {fetch} from 'undici'
interface Database {
person: {
id: string
first_name: string | null
last_name: string | null
}
pet: {
id: string
name: string
owner_id: string
}
}
const db = new SurrealKysely<Database>({
dialect: new SurrealDbHttpDialect({
database: '<database>',
fetch,
hostname: '<hostname>',
namespace: '<namespace>',
password: '<password>',
username: '<username>',
}),
})
await db
.create('person:100')
.set({
first_name: 'Jennifer',
age: 15,
})
.return('none')
.execute()
License
MIT License, see LICENSE