@@ -15,86 +15,104 @@ import {
1515import type {
1616 Adapter ,
1717 AdapterAccount ,
18+ AdapterAccountType ,
1819 AdapterSession ,
1920 AdapterUser ,
2021 VerificationToken ,
2122} from "@auth/core/adapters"
2223
23- export const mysqlUsersTable = mysqlTable ( "user" , {
24- id : varchar ( "id" , { length : 255 } )
25- . primaryKey ( )
26- . $defaultFn ( ( ) => crypto . randomUUID ( ) ) ,
27- name : varchar ( "name" , { length : 255 } ) ,
28- email : varchar ( "email" , { length : 255 } ) . notNull ( ) ,
29- emailVerified : timestamp ( "emailVerified" , { mode : "date" , fsp : 3 } ) ,
30- image : varchar ( "image" , { length : 255 } ) ,
31- } ) satisfies DefaultMySqlUsersTable
24+ export function defineTables (
25+ schema : Partial < DefaultMySqlSchema > = { }
26+ ) : Required < DefaultMySqlSchema > {
27+ const usersTable =
28+ schema . usersTable ??
29+ ( mysqlTable ( "user" , {
30+ id : varchar ( "id" , { length : 255 } )
31+ . primaryKey ( )
32+ . $defaultFn ( ( ) => crypto . randomUUID ( ) ) ,
33+ name : varchar ( "name" , { length : 255 } ) ,
34+ email : varchar ( "email" , { length : 255 } ) . notNull ( ) ,
35+ emailVerified : timestamp ( "emailVerified" , { mode : "date" , fsp : 3 } ) ,
36+ image : varchar ( "image" , { length : 255 } ) ,
37+ } ) satisfies DefaultMySqlUsersTable )
3238
33- export const mysqlAccountsTable = mysqlTable (
34- "account" ,
35- {
36- userId : varchar ( "userId" , { length : 255 } )
37- . notNull ( )
38- . references ( ( ) => mysqlUsersTable . id , { onDelete : "cascade" } ) ,
39- type : varchar ( "type" , { length : 255 } )
40- . $type < AdapterAccount [ "type" ] > ( )
41- . notNull ( ) ,
42- provider : varchar ( "provider" , { length : 255 } ) . notNull ( ) ,
43- providerAccountId : varchar ( "providerAccountId" , { length : 255 } ) . notNull ( ) ,
44- refresh_token : varchar ( "refresh_token" , { length : 255 } ) ,
45- access_token : varchar ( "access_token" , { length : 255 } ) ,
46- expires_at : int ( "expires_at" ) ,
47- token_type : varchar ( "token_type" , { length : 255 } ) ,
48- scope : varchar ( "scope" , { length : 255 } ) ,
49- id_token : varchar ( "id_token" , { length : 2048 } ) ,
50- session_state : varchar ( "session_state" , { length : 255 } ) ,
51- } ,
52- ( account ) => ( {
53- compositePk : primaryKey ( {
54- columns : [ account . provider , account . providerAccountId ] ,
55- } ) ,
56- } )
57- ) satisfies DefaultMySqlAccountsTable
39+ const accountsTable =
40+ schema . accountsTable ??
41+ ( mysqlTable (
42+ "account" ,
43+ {
44+ userId : varchar ( "userId" , { length : 255 } )
45+ . notNull ( )
46+ . references ( ( ) => usersTable . id , { onDelete : "cascade" } ) ,
47+ type : varchar ( "type" , { length : 255 } )
48+ . $type < AdapterAccountType > ( )
49+ . notNull ( ) ,
50+ provider : varchar ( "provider" , { length : 255 } ) . notNull ( ) ,
51+ providerAccountId : varchar ( "providerAccountId" , {
52+ length : 255 ,
53+ } ) . notNull ( ) ,
54+ refresh_token : varchar ( "refresh_token" , { length : 255 } ) ,
55+ access_token : varchar ( "access_token" , { length : 255 } ) ,
56+ expires_at : int ( "expires_at" ) ,
57+ token_type : varchar ( "token_type" , { length : 255 } ) ,
58+ scope : varchar ( "scope" , { length : 255 } ) ,
59+ id_token : varchar ( "id_token" , { length : 2048 } ) ,
60+ session_state : varchar ( "session_state" , { length : 255 } ) ,
61+ } ,
62+ ( account ) => ( {
63+ compositePk : primaryKey ( {
64+ columns : [ account . provider , account . providerAccountId ] ,
65+ } ) ,
66+ } )
67+ ) satisfies DefaultMySqlAccountsTable )
5868
59- export const mysqlSessionsTable = mysqlTable ( "session" , {
60- sessionToken : varchar ( "sessionToken" , { length : 255 } ) . primaryKey ( ) ,
61- userId : varchar ( "userId" , { length : 255 } )
62- . notNull ( )
63- . references ( ( ) => mysqlUsersTable . id , { onDelete : "cascade" } ) ,
64- expires : timestamp ( "expires" , { mode : "date" } ) . notNull ( ) ,
65- } ) satisfies DefaultMySqlSessionsTable
69+ const sessionsTable =
70+ schema . sessionsTable ??
71+ ( mysqlTable ( "session" , {
72+ sessionToken : varchar ( "sessionToken" , { length : 255 } ) . primaryKey ( ) ,
73+ userId : varchar ( "userId" , { length : 255 } )
74+ . notNull ( )
75+ . references ( ( ) => usersTable . id , { onDelete : "cascade" } ) ,
76+ expires : timestamp ( "expires" , { mode : "date" } ) . notNull ( ) ,
77+ } ) satisfies DefaultMySqlSessionsTable )
6678
67- export const mysqlVerificationTokensTable = mysqlTable (
68- "verificationToken" ,
69- {
70- identifier : varchar ( "identifier" , { length : 255 } ) . notNull ( ) ,
71- token : varchar ( "token" , { length : 255 } ) . notNull ( ) ,
72- expires : timestamp ( "expires" , { mode : "date" } ) . notNull ( ) ,
73- } ,
74- ( vt ) => ( {
75- compositePk : primaryKey ( { columns : [ vt . identifier , vt . token ] } ) ,
76- } )
77- ) satisfies DefaultMySqlVerificationTokenTable
79+ const verificationTokensTable =
80+ schema . verificationTokensTable ??
81+ ( mysqlTable (
82+ "verificationToken" ,
83+ {
84+ identifier : varchar ( "identifier" , { length : 255 } ) . notNull ( ) ,
85+ token : varchar ( "token" , { length : 255 } ) . notNull ( ) ,
86+ expires : timestamp ( "expires" , { mode : "date" } ) . notNull ( ) ,
87+ } ,
88+ ( vt ) => ( {
89+ compositePk : primaryKey ( { columns : [ vt . identifier , vt . token ] } ) ,
90+ } )
91+ ) satisfies DefaultMySqlVerificationTokenTable )
92+
93+ return {
94+ usersTable,
95+ accountsTable,
96+ sessionsTable,
97+ verificationTokensTable,
98+ }
99+ }
78100
79101export function MySqlDrizzleAdapter (
80102 client : MySqlDatabase < QueryResultHKT , PreparedQueryHKTBase , any > ,
81- schema : DefaultMySqlSchema = {
82- usersTable : mysqlUsersTable ,
83- accountsTable : mysqlAccountsTable ,
84- sessionsTable : mysqlSessionsTable ,
85- verificationTokensTable : mysqlVerificationTokensTable ,
86- }
103+ schema ?: DefaultMySqlSchema
87104) : Adapter {
88105 const { usersTable, accountsTable, sessionsTable, verificationTokensTable } =
89- schema
106+ defineTables ( schema )
90107
91108 return {
92109 async createUser ( data : AdapterUser ) {
110+ const { id, ...insertData } = data
93111 const hasDefaultId = getTableColumns ( usersTable ) [ "id" ] [ "hasDefault" ]
94112
95113 await client
96114 . insert ( usersTable )
97- . values ( hasDefaultId ? data : { ...data , id : crypto . randomUUID ( ) } )
115+ . values ( hasDefaultId ? insertData : { ...insertData , id } )
98116
99117 return client
100118 . select ( )
@@ -442,6 +460,6 @@ export type DefaultMySqlVerificationTokenTable = MySqlTableWithColumns<{
442460export type DefaultMySqlSchema = {
443461 usersTable : DefaultMySqlUsersTable
444462 accountsTable : DefaultMySqlAccountsTable
445- sessionsTable : DefaultMySqlSessionsTable
446- verificationTokensTable : DefaultMySqlVerificationTokenTable
463+ sessionsTable ? : DefaultMySqlSessionsTable
464+ verificationTokensTable ? : DefaultMySqlVerificationTokenTable
447465}
0 commit comments