({
projectDir,
packages,
scopedAppName,
databaseProvider,
})
| 7 | import { addPackageScript } from "~/utils/addPackageScript.js"; |
| 8 | |
| 9 | export const drizzleInstaller: Installer = ({ |
| 10 | projectDir, |
| 11 | packages, |
| 12 | scopedAppName, |
| 13 | databaseProvider, |
| 14 | }) => { |
| 15 | addPackageDependency({ |
| 16 | projectDir, |
| 17 | dependencies: ["drizzle-kit"], |
| 18 | devMode: true, |
| 19 | }); |
| 20 | addPackageDependency({ |
| 21 | projectDir, |
| 22 | dependencies: [ |
| 23 | "drizzle-orm", |
| 24 | ( |
| 25 | { |
| 26 | planetscale: "@planetscale/database", |
| 27 | mysql: "mysql2", |
| 28 | postgres: "postgres", |
| 29 | sqlite: "@libsql/client", |
| 30 | } as const |
| 31 | )[databaseProvider], |
| 32 | ], |
| 33 | devMode: false, |
| 34 | }); |
| 35 | |
| 36 | const extrasDir = path.join(PKG_ROOT, "template/extras"); |
| 37 | |
| 38 | const configFile = path.join( |
| 39 | extrasDir, |
| 40 | `config/drizzle-config-${ |
| 41 | databaseProvider === "planetscale" ? "mysql" : databaseProvider |
| 42 | }.ts` |
| 43 | ); |
| 44 | const configDest = path.join(projectDir, "drizzle.config.ts"); |
| 45 | |
| 46 | const schemaBaseName = packages?.betterAuth.inUse |
| 47 | ? "with-better-auth" |
| 48 | : packages?.nextAuth.inUse |
| 49 | ? "with-auth" |
| 50 | : "base"; |
| 51 | const schemaSrc = path.join( |
| 52 | extrasDir, |
| 53 | "src/server/db/schema-drizzle", |
| 54 | `${schemaBaseName}-${databaseProvider}.ts` |
| 55 | ); |
| 56 | const schemaDest = path.join(projectDir, "src/server/db/schema.ts"); |
| 57 | |
| 58 | // Replace placeholder table prefix with project name |
| 59 | let schemaContent = fs.readFileSync(schemaSrc, "utf-8"); |
| 60 | schemaContent = schemaContent.replace( |
| 61 | "project1_${name}", |
| 62 | `${scopedAppName}_\${name}` |
| 63 | ); |
| 64 | |
| 65 | let configContent = fs.readFileSync(configFile, "utf-8"); |
| 66 |
nothing calls this directly
no test coverage detected