@auth/kysely-adapter
Auth.js / NextAuth.js 的官方 Kysely 适配器。
安装
npm install kysely @auth/kysely-adapterKyselyAuth<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> |