mirror of
https://gitea.tendokyu.moe/sk1982/actaeon.git
synced 2026-07-14 07:22:50 -05:00
33 lines
806 B
TypeScript
33 lines
806 B
TypeScript
import { DB } from '@/types/db';
|
|
import { createPool } from 'mysql2';
|
|
import { Generated, Kysely, MysqlDialect } from 'kysely';
|
|
|
|
const createDb = () => {
|
|
if (process.env.NEXT_RUNTIME === 'edge')
|
|
return null;
|
|
|
|
if ((globalThis as any).db)
|
|
return (globalThis as any).db as Kysely<GeneratedDB>;
|
|
|
|
const dialect = new MysqlDialect({
|
|
pool: createPool(process.env.DATABASE_URL as string)
|
|
});
|
|
|
|
if (process.env.NODE_ENV === 'production')
|
|
delete process.env.DATABASE_URL;
|
|
|
|
return (globalThis as any).db = new Kysely<GeneratedDB>({ dialect });
|
|
}
|
|
|
|
|
|
type IdGenerated<C, T> = C extends 'id' ? Generated<T> : T;
|
|
|
|
// mark all id fields as generated
|
|
export type GeneratedDB = {
|
|
[Table in keyof DB]: {
|
|
[Column in keyof DB[Table]]: IdGenerated<Column, DB[Table][Column]>
|
|
}
|
|
};
|
|
|
|
export const db = createDb()!;
|