Closed
Description
Just in case anyone needs it, here's how to reuse your generated Supabase types for Kysely:
import { Database } from './types/supabase'
type Tables = Database['public']['Tables']
type DB = {
[TableName in keyof Tables]: {
[ColumnName in keyof Tables[TableName]['Insert']]-?:
undefined extends Tables[TableName]['Insert'][ColumnName]
? Generated<NoUndefined<Tables[TableName]['Insert'][ColumnName]>>
: Tables[TableName]['Insert'][ColumnName]
}
}
type NoUndefined<T> = T extends undefined ? never : T
const db = new Kysely<DB>(...)
This transforms e.g. the following Supabase type:
interface Database {
public: {
Tables: {
projects: {
Row: {
created_at: string
id: number
name: string
}
Insert: {
created_at?: string
id?: number
name: string
}
Update: {
created_at?: string
id?: number
name?: string
}
}
}
}
}
into the following for Kysely:
type DB = {
projects: {
created_at: Generated<string>
id: Generated<number>
name: string
}
}
Not sure if it's perfect but it's a great starting point!