( factory: FumaDBFactory<Schemas>, version: Version, provider: Exclude<SQLProvider, "mssql" | "cockroachdb">, )
| 322 | } |
| 323 | |
| 324 | export async function initDrizzleClient< |
| 325 | Schemas extends AnySchema[], |
| 326 | Version extends Schemas[number]["version"], |
| 327 | >( |
| 328 | factory: FumaDBFactory<Schemas>, |
| 329 | version: Version, |
| 330 | provider: Exclude<SQLProvider, "mssql" | "cockroachdb">, |
| 331 | ) { |
| 332 | const DrizzleAPI = await import("drizzle-kit/api"); |
| 333 | const { drizzleAdapter } = await import("../src/adapters/drizzle"); |
| 334 | const test = drizzleTests.find((t) => t.provider === provider)!; |
| 335 | |
| 336 | const db = test.db({}); |
| 337 | |
| 338 | const schema = factory |
| 339 | .client( |
| 340 | drizzleAdapter({ |
| 341 | db, |
| 342 | provider, |
| 343 | }), |
| 344 | ) |
| 345 | .generateSchema(version); |
| 346 | |
| 347 | schema.path = path.join(import.meta.dirname, `drizzle-schema.${provider}.ts`); |
| 348 | fs.writeFileSync(schema.path, schema.code); |
| 349 | const drizzleSchema = await import(`${schema.path}?hash=${Date.now()}`); |
| 350 | |
| 351 | if (provider === "postgresql") { |
| 352 | const { apply } = await DrizzleAPI.pushSchema(drizzleSchema, db as any); |
| 353 | await apply(); |
| 354 | } else if (provider === "mysql") { |
| 355 | const { sql } = await import("drizzle-orm"); |
| 356 | const prev = await DrizzleAPI.generateMySQLDrizzleJson({}); |
| 357 | const cur = await DrizzleAPI.generateMySQLDrizzleJson(drizzleSchema); |
| 358 | const statements = await DrizzleAPI.generateMySQLMigration(prev, cur); |
| 359 | |
| 360 | for (const statement of statements) { |
| 361 | await (db as any).execute(sql.raw(statement)); |
| 362 | } |
| 363 | } else { |
| 364 | // they need libsql |
| 365 | const { apply } = await DrizzleAPI.pushSQLiteSchema( |
| 366 | drizzleSchema, |
| 367 | db as any, |
| 368 | ); |
| 369 | await apply(); |
| 370 | } |
| 371 | |
| 372 | fs.rmSync(schema.path); |
| 373 | return factory.client( |
| 374 | drizzleAdapter({ |
| 375 | db: test.db(drizzleSchema), |
| 376 | provider, |
| 377 | }), |
| 378 | ); |
| 379 | } |
| 380 | |
| 381 | export const cleanupFiles = () => { |
no test coverage detected