@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 繼承 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>
建立一個刪除查詢。
請參閱 DeleteQueryBuilder.where 方法,了解如何為刪除操作指定 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 的實例。如果資料庫傳回自動遞增的 id,InsertResult 會有 InsertResult.insertId | insertId 欄位,該欄位會保存插入列的自動遞增 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>
建立一個取代查詢。
一個僅限 MySQL 的陳述式,類似於 InsertQueryBuilder.onDuplicateKeyUpdate,會在衝突時刪除並插入值,而不是更新現有列。
此查詢的傳回值是 InsertResult 的實例。如果資料庫傳回自動遞增的 id,InsertResult 會有 InsertResult.insertId | insertId 欄位,該欄位會保存插入列的自動遞增 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
子句。
範例
為一個表格建立選取查詢
db.selectFrom('person').selectAll()
產生的 SQL (PostgreSQL)
select * from "person"
為具有別名的表格建立選取查詢
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"
從子查詢建立選取查詢
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 建立選取查詢
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>
建立一個更新查詢。
請參閱 UpdateQueryBuilder.where 方法,以取得如何為更新操作指定 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 | 字串 |
回傳值
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;
Codegen
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 > |