@auth/kysely-adapter
Auth.js / NextAuth.js 的官方 Kysely 适配器。
安装
npm install kysely @auth/kysely-adapter
KyselyAuth<DB, T>
围绕原始 Kysely
类进行包装,以便验证传入的数据库接口。也可以使用常规的 Kysely 实例,但将其包装可以确保数据库接口实现 Auth.js 所需的字段。当与 kysely-codegen
一起使用时,可以将 Codegen
类型作为第二个泛型参数传递。将使用生成的类型,而 KyselyAuth
将只验证是否存在正确的字段。
扩展
Kysely
<DB
>
类型参数
类型参数 | 值 |
---|---|
DB extends T | - |
T | 数据库 |
构造函数
new KyselyAuth(args)
new KyselyAuth<DB, T>(args): KyselyAuth<DB, T>
参数
参数 | 类型 |
---|---|
args | KyselyConfig |
返回值
KyselyAuth
<DB
, T
>
从继承
Kysely<DB>.constructor
new KyselyAuth(args)
new KyselyAuth<DB, T>(args): KyselyAuth<DB, T>
参数
参数 | 类型 |
---|---|
args | KyselyProps |
返回值
KyselyAuth
<DB
, T
>
从继承
Kysely<DB>.constructor
属性
#private
private #private: any;
从继承
Kysely.#private
#private
private #private: any;
从继承
Kysely.#private
访问器
dynamic
get dynamic(): DynamicModule
返回 DynamicModule 模块。
DynamicModule 模块可用于绕过严格类型检查并传入查询的动态值。
返回值
DynamicModule
fn
get fn(): FunctionModule<DB, keyof DB>
返回一个 FunctionModule,可用于编写类型安全的函数调用。
const { count } = db.fn
await db.selectFrom('person')
.innerJoin('pet', 'pet.owner_id', 'person.id')
.select([
'person.id',
count('pet.id').as('pet_count')
])
.groupBy('person.id')
.having(count('pet.id'), '>', 10)
.execute()
生成的 SQL(PostgreSQL)
select "person"."id", count("pet"."id") as "pet_count"
from "person"
inner join "pet" on "pet"."owner_id" = "person"."id"
group by "person"."id"
having count("pet"."id") > $1
返回值
FunctionModule
<DB
, keyof DB
>
introspection
get introspection(): DatabaseIntrospector
返回一个 DatabaseIntrospector | 数据库自省器。
返回值
DatabaseIntrospector
isTransaction
get isTransaction(): boolean
如果此 Kysely
实例是事务,则返回 true。
您也可以使用 db instanceof Transaction
。
返回值
boolean
schema
get schema(): SchemaModule
返回用于构建数据库架构的 SchemaModule 模块。
返回值
SchemaModule
方法
connection()
connection(): ConnectionBuilder<DB>
提供一个绑定到单个数据库连接的 kysely 实例。
示例
await db
.connection()
.execute(async (db) => {
// `db` is an instance of `Kysely` that's bound to a single
// database connection. All queries executed through `db` use
// the same connection.
await doStuff(db)
})
返回值
ConnectionBuilder
<DB
>
从继承
Kysely.connection
deleteFrom()
deleteFrom(from)
deleteFrom<TR>(from): DeleteQueryBuilder<DB, ExtractTableAlias<DB, TR>, DeleteResult>
创建删除查询。
有关如何为删除操作指定 where 子句的示例,请参阅 DeleteQueryBuilder.where 方法。
查询的返回值是 DeleteResult 的实例。
示例
删除 id 为 1 的人
const result = await db
.deleteFrom('person')
.where('person.id', '=', 1)
.executeTakeFirst()
console.log(result.numDeletedRows)
生成的 SQL(PostgreSQL)
delete from "person" where "person"."id" = $1
某些数据库(如 MySQL)支持从多个表中删除数据
const result = await db
.deleteFrom(['person', 'pet'])
.using('person')
.innerJoin('pet', 'pet.owner_id', '=', 'person.id')
.where('person.id', '=', 1)
.executeTakeFirst()
生成的 SQL(MySQL)
delete from `person`, `pet`
using `person`
inner join `pet` on `pet`.`owner_id` = `person`.`id`
where `person`.`id` = ?
类型参数
类型参数 |
---|
TR 扩展 string |
参数
参数 | 类型 |
---|---|
from | TR [] |
返回值
DeleteQueryBuilder
<DB
, ExtractTableAlias
<DB
, TR
>, DeleteResult
>
继承自
Kysely.deleteFrom
deleteFrom(tables)
deleteFrom<TR>(tables): DeleteQueryBuilder<From<DB, TR>, ExtractAliasFromTableExpression<DB, TR>, DeleteResult>
类型参数
类型参数 |
---|
TR 扩展 string | AliasedExpression <any , any > |
参数
参数 | 类型 |
---|---|
tables | TR [] |
返回值
DeleteQueryBuilder
<From
<DB
, TR
>, ExtractAliasFromTableExpression
<DB
, TR
>, DeleteResult
>
继承自
Kysely.deleteFrom
deleteFrom(from)
deleteFrom<TR>(from): DeleteQueryBuilder<DB, ExtractTableAlias<DB, TR>, DeleteResult>
类型参数
类型参数 |
---|
TR 扩展 string |
参数
参数 | 类型 |
---|---|
from | TR |
返回值
DeleteQueryBuilder
<DB
, ExtractTableAlias
<DB
, TR
>, DeleteResult
>
继承自
Kysely.deleteFrom
deleteFrom(table)
deleteFrom<TR>(table): DeleteQueryBuilder<From<DB, TR>, ExtractAliasFromTableExpression<DB, TR>, DeleteResult>
类型参数
类型参数 |
---|
TR 扩展 string | AliasedExpression <any , any > |
参数
参数 | 类型 |
---|---|
table | TR |
返回值
DeleteQueryBuilder
<From
<DB
, TR
>, ExtractAliasFromTableExpression
<DB
, TR
>, DeleteResult
>
继承自
Kysely.deleteFrom
destroy()
destroy(): Promise<void>
释放所有资源并断开与数据库的连接。
当您完成对 Kysely
实例的使用时,需要调用此方法。
返回值
Promise
<void
>
继承自
Kysely.destroy
executeQuery()
executeQuery<R>(query, queryId?): Promise<QueryResult<R>>
执行给定的已编译查询或查询构建器。
有关更多信息,请参阅 拆分构建、编译和执行代码食谱。
类型参数
类型参数 |
---|
R |
参数
参数 | 类型 |
---|---|
query | CompiledQuery <R > | Compilable <R > |
queryId ? | QueryId |
返回值
Promise
<QueryResult
<R
>>
继承自
Kysely.executeQuery
insertInto()
insertInto<T>(table): InsertQueryBuilder<DB, T, InsertResult>
创建插入查询。
此查询的返回值是 InsertResult 的实例。InsertResult 具有 InsertResult.insertId | insertId 字段,该字段保存插入行的自增 ID(如果数据库返回了一个 ID)。
有关更多信息和示例,请参阅 InsertQueryBuilder.values | values 方法。此外,请参阅 ReturningInterface.returning | returning 方法,该方法可用于在受支持的数据库(如 PostgreSQL)上返回列。
示例
const result = await db
.insertInto('person')
.values({
first_name: 'Jennifer',
last_name: 'Aniston'
})
.executeTakeFirst()
console.log(result.insertId)
一些数据库(如 PostgreSQL)支持 returning
方法
const { id } = await db
.insertInto('person')
.values({
first_name: 'Jennifer',
last_name: 'Aniston'
})
.returning('id')
.executeTakeFirst()
类型参数
类型参数 |
---|
T 扩展 string |
参数
参数 | 类型 |
---|---|
table | T |
返回值
InsertQueryBuilder
<DB
, T
, InsertResult
>
继承自
Kysely.insertInto
replaceInto()
replaceInto<T>(table): InsertQueryBuilder<DB, T, InsertResult>
创建替换查询。
类似于 InsertQueryBuilder.onDuplicateKeyUpdate 的 MySQL 独有语句,它在冲突时删除并插入值,而不是更新现有行。
此查询的返回值是 InsertResult 的实例。InsertResult 具有 InsertResult.insertId | insertId 字段,该字段保存插入行的自增 ID(如果数据库返回了一个 ID)。
有关更多信息和示例,请参阅 InsertQueryBuilder.values | values 方法。
示例
const result = await db
.replaceInto('person')
.values({
first_name: 'Jennifer',
last_name: 'Aniston'
})
.executeTakeFirst()
console.log(result.insertId)
类型参数
类型参数 |
---|
T 扩展 string |
参数
参数 | 类型 |
---|---|
table | T |
返回值
InsertQueryBuilder
<DB
, T
, InsertResult
>
继承自
Kysely.replaceInto
selectFrom()
selectFrom(from)
selectFrom<TE>(from): SelectQueryBuilder<DB, ExtractTableAlias<DB, TE>, {}>
为给定表或表创建 select
查询构建器。
传递给此方法的表作为查询的 from
子句构建。
示例
为一个表创建一个 select 查询
db.selectFrom('person').selectAll()
生成的 SQL(PostgreSQL)
select * from "person"
为一个带有别名的表创建一个 select 查询
const persons = await db.selectFrom('person as p')
.select(['p.id', 'first_name'])
.execute()
console.log(persons[0].id)
生成的 SQL(PostgreSQL)
select "p"."id", "first_name" from "person" as "p"
从子查询创建 select 查询
const persons = await db.selectFrom(
(eb) => eb.selectFrom('person').select('person.id as identifier').as('p')
)
.select('p.identifier')
.execute()
console.log(persons[0].identifier)
生成的 SQL(PostgreSQL)
select "p"."identifier",
from (
select "person"."id" as "identifier" from "person"
) as p
从原始 SQL 创建 select 查询
import { sql } from 'kysely'
const items = await db
.selectFrom(sql<{ one: number }>`(select 1 as one)`.as('q'))
.select('q.one')
.execute()
console.log(items[0].one)
生成的 SQL(PostgreSQL)
select "q"."one",
from (
select 1 as one
) as q
使用 sql
标签时,还需要提供原始代码段/查询的结果类型,以便 Kysely 可以确定哪些列可用于查询的其余部分。
selectFrom
方法还接受用于多个表的数组。上述所有示例也可以在数组中使用。
import { sql } from 'kysely'
const items = await db.selectFrom([
'person as p',
db.selectFrom('pet').select('pet.species').as('a'),
sql<{ one: number }>`(select 1 as one)`.as('q')
])
.select(['p.id', 'a.species', 'q.one'])
.execute()
生成的 SQL(PostgreSQL)
select "p".id, "a"."species", "q"."one"
from
"person" as "p",
(select "pet"."species" from "pet") as a,
(select 1 as one) as "q"
类型参数
类型参数 |
---|
TE 扩展 string |
参数
参数 | 类型 |
---|---|
from | TE [] |
返回值
SelectQueryBuilder
<DB
, ExtractTableAlias
<DB
, TE
>, {}>
继承自
Kysely.selectFrom
selectFrom(from)
selectFrom<TE>(from): SelectQueryBuilder<From<DB, TE>, ExtractAliasFromTableExpression<DB, TE>, {}>
类型参数
类型参数 |
---|
TE 扩展 string | AliasedExpression <any , any > | AliasedExpressionFactory <DB , keyof DB > |
参数
参数 | 类型 |
---|---|
from | TE [] |
返回值
SelectQueryBuilder
<From
<DB
, TE
>, ExtractAliasFromTableExpression
<DB
, TE
>, {}>
继承自
Kysely.selectFrom
selectFrom(from)
selectFrom<TE>(from): SelectQueryBuilder<DB, ExtractTableAlias<DB, TE>, {}>
类型参数
类型参数 |
---|
TE 扩展 string |
参数
参数 | 类型 |
---|---|
from | TE |
返回值
SelectQueryBuilder
<DB
, ExtractTableAlias
<DB
, TE
>, {}>
继承自
Kysely.selectFrom
selectFrom(from)
selectFrom<TE>(from): SelectQueryBuilder<DB & PickTableWithAlias<DB, TE>, ExtractTableAlias<DB, TE>, {}>
类型参数
类型参数 |
---|
TE 扩展 ${string} as ${string} |
参数
参数 | 类型 |
---|---|
from | TE |
返回值
SelectQueryBuilder
<DB
& PickTableWithAlias
<DB
, TE
>, ExtractTableAlias
<DB
, TE
>, {}>
继承自
Kysely.selectFrom
selectFrom(from)
selectFrom<TE>(from): SelectQueryBuilder<From<DB, TE>, ExtractAliasFromTableExpression<DB, TE>, {}>
类型参数
类型参数 |
---|
TE 扩展 string | AliasedExpression <any , any > | AliasedExpressionFactory <DB , keyof DB > |
参数
参数 | 类型 |
---|---|
from | TE |
返回值
SelectQueryBuilder
<From
<DB
, TE
>, ExtractAliasFromTableExpression
<DB
, TE
>, {}>
继承自
Kysely.selectFrom
transaction()
transaction(): TransactionBuilder<DB>
创建一个 TransactionBuilder,可用于在事务中运行查询。
返回的 TransactionBuilder 可用于配置事务。然后可以调用 TransactionBuilder.execute 方法来运行事务。TransactionBuilder.execute 接受在事务中运行的函数。如果函数抛出异常,则回滚事务。否则,提交事务。
传递给 TransactionBuilder.execute | execute 方法的回调函数仅将事务对象作为其参数。事务类型为 Transaction,它继承自 Kysely。通过事务对象启动的任何查询都在事务内执行。
示例
const catto = await db.transaction().execute(async (trx) => {
const jennifer = await trx.insertInto('person')
.values({
first_name: 'Jennifer',
last_name: 'Aniston',
})
.returning('id')
.executeTakeFirstOrThrow()
await someFunction(trx, jennifer)
return await trx.insertInto('pet')
.values({
user_id: jennifer.id,
name: 'Catto',
species: 'cat'
})
.returning('*')
.executeTakeFirst()
})
设置隔离级别
await db
.transaction()
.setIsolationLevel('serializable')
.execute(async (trx) => {
await doStuff(trx)
})
返回值
TransactionBuilder
<DB
>
继承自
Kysely.transaction
updateTable()
updateTable(table)
updateTable<TR>(table): UpdateQueryBuilder<DB, ExtractTableAlias<DB, TR>, ExtractTableAlias<DB, TR>, UpdateResult>
创建一个更新查询。
有关如何为更新操作指定 where 子句的示例,请参见 UpdateQueryBuilder.where 方法。
有关如何指定更新的示例,请参见 UpdateQueryBuilder.set 方法。
查询的返回值为 UpdateResult。
示例
const result = await db
.updateTable('person')
.set({ first_name: 'Jennifer' })
.where('person.id', '=', 1)
.executeTakeFirst()
console.log(result.numUpdatedRows)
类型参数
类型参数 |
---|
TR 扩展 string |
参数
参数 | 类型 |
---|---|
table | TR |
返回值
UpdateQueryBuilder
<DB
, ExtractTableAlias
<DB
, TR
>, ExtractTableAlias
<DB
, TR
>, UpdateResult
>
继承自
Kysely.updateTable
updateTable(table)
updateTable<TR>(table): UpdateQueryBuilder<DB & PickTableWithAlias<DB, TR>, ExtractTableAlias<DB, TR>, ExtractTableAlias<DB, TR>, UpdateResult>
类型参数
类型参数 |
---|
TR extends ${string} as ${string} |
参数
参数 | 类型 |
---|---|
table | TR |
返回值
UpdateQueryBuilder
<DB
& PickTableWithAlias
<DB
, TR
>, ExtractTableAlias
<DB
, TR
>, ExtractTableAlias
<DB
, TR
>, UpdateResult
>
继承自
Kysely.updateTable
updateTable(table)
updateTable<TR>(table): UpdateQueryBuilder<From<DB, TR>, ExtractAliasFromTableExpression<DB, TR>, ExtractAliasFromTableExpression<DB, TR>, UpdateResult>
类型参数
类型参数 |
---|
TR 扩展 string | AliasedExpression <any , any > |
参数
参数 | 类型 |
---|---|
table | TR |
返回值
UpdateQueryBuilder
<From
<DB
, TR
>, ExtractAliasFromTableExpression
<DB
, TR
>, ExtractAliasFromTableExpression
<DB
, TR
>, UpdateResult
>
继承自
Kysely.updateTable
with()
with<N, E>(name, expression): QueryCreatorWithCommonTableExpression<DB, N, E>
创建一个 with
查询(公用表表达式)。
示例
await db
.with('jennifers', (db) => db
.selectFrom('person')
.where('first_name', '=', 'Jennifer')
.select(['id', 'age'])
)
.with('adult_jennifers', (db) => db
.selectFrom('jennifers')
.where('age', '>', 18)
.select(['id', 'age'])
)
.selectFrom('adult_jennifers')
.where('age', '<', 60)
.selectAll()
.execute()
CTE 名称可以选择性地指定列名,除了名称之外。在这种情况下,Kysely 要求表达式返回具有相同列的行。
await db
.with('jennifers(id, age)', (db) => db
.selectFrom('person')
.where('first_name', '=', 'Jennifer')
// This is ok since we return columns with the same
// names as specified by `jennifers(id, age)`.
.select(['id', 'age'])
)
.selectFrom('jennifers')
.selectAll()
.execute()
类型参数
类型参数 |
---|
N extends string |
E extends CommonTableExpression <DB , N > |
参数
参数 | 类型 |
---|---|
name | N |
expression | E |
返回值
QueryCreatorWithCommonTableExpression
<DB
, N
, E
>
继承自
Kysely.with
withPlugin()
withPlugin(plugin): Kysely<DB>
返回安装了给定插件的此 Kysely 实例的副本。
参数
参数 | 类型 |
---|---|
plugin | KyselyPlugin |
返回值
Kysely
<DB
>
继承自
Kysely.withPlugin
withRecursive()
withRecursive<N, E>(name, expression): QueryCreatorWithCommonTableExpression<DB, N, E>
创建一个递归 with
查询(公用表表达式)。
有关示例和更多文档,请参见 with 方法。
类型参数
类型参数 |
---|
N extends string |
E extends RecursiveCommonTableExpression <DB , N > |
参数
参数 | 类型 |
---|---|
name | N |
expression | E |
返回值
QueryCreatorWithCommonTableExpression
<DB
, N
, E
>
继承自
Kysely.withRecursive
withSchema()
withSchema(schema): QueryCreator<DB>
设置所有未显式指定模式的表引用的模式。
这仅影响通过此方法返回的构建器创建的查询,不会修改 db
实例。
有关更详细的说明,请参见 此食谱。
示例
await db
.withSchema('mammals')
.selectFrom('pet')
.selectAll()
.innerJoin('public.person', 'public.person.id', 'pet.owner_id')
.execute()
生成的 SQL(PostgreSQL)
select * from "mammals"."pet"
inner join "public"."person"
on "public"."person"."id" = "mammals"."pet"."owner_id"
withSchema
足够聪明,不会为别名、公用表表达式或其他模式不属于的区域添加模式
await db
.withSchema('mammals')
.selectFrom('pet as p')
.select('p.name')
.execute()
生成的 SQL(PostgreSQL)
select "p"."name" from "mammals"."pet" as "p"
参数
参数 | 类型 |
---|---|
schema | string |
返回值
QueryCreator
<DB
>
继承自
Kysely.withSchema
withTables()
withTables<T>(): Kysely<DB & T>
返回一个包含已添加到其数据库类型的表的此 Kysely 实例的副本。
此方法仅修改类型,不会以任何方式影响任何执行的查询。
示例
以下示例添加并使用了一个临时表
类型参数
类型参数 |
---|
T extends Record <string , Record <string , any >> |
返回值
Kysely
<DB
& T
>
继承自
Kysely.withTables
示例
await db.schema
.createTable('temp_table')
.temporary()
.addColumn('some_column', 'integer')
.execute()
const tempDb = db.withTables<{
temp_table: {
some_column: number
}
}>()
await tempDb
.insertInto('temp_table')
.values({ some_column: 100 })
.execute()
withoutPlugins()
withoutPlugins(): Kysely<DB>
返回不包含任何插件的此 Kysely 实例的副本。
返回值
Kysely
<DB
>
继承自
Kysely.withoutPlugins
数据库
属性
帐户
Account: AdapterAccount;
会话
Session: AdapterSession;
用户
User: AdapterUser;
验证令牌
VerificationToken: VerificationToken;
代码生成
type Codegen: { [K in keyof Database]: { [J in keyof Database[K]]: unknown } };
格式
const format: {
from: T;
to: T;
};
类型声明
from()
类型参数
类型参数 |
---|
T |
参数
参数 | 类型 |
---|---|
object ? | Record <string , any > |
返回值
T
to()
类型参数
类型参数 |
---|
T |
参数
参数 | 类型 |
---|---|
object | Record <string , any > |
返回值
T
KyselyAdapter()
KyselyAdapter(db): Adapter
参数
参数 | 类型 |
---|---|
db | Kysely <Database > |