({
projectDir,
runPkgManagerInstall,
pkgManager,
packages,
noInstall,
})
| 6 | import { execa } from "~/utils/execAsync.js"; |
| 7 | |
| 8 | export const prismaInstaller: Installer = async ({ |
| 9 | projectDir, |
| 10 | runPkgManagerInstall, |
| 11 | pkgManager, |
| 12 | packages, |
| 13 | noInstall, |
| 14 | }) => { |
| 15 | await runPkgManagerInstall({ |
| 16 | packages: ["prisma"], |
| 17 | devMode: true, |
| 18 | }); |
| 19 | await runPkgManagerInstall({ |
| 20 | packages: ["@prisma/client"], |
| 21 | }); |
| 22 | |
| 23 | const prismaAssetDir = path.join(PKG_ROOT, "template/addons/prisma"); |
| 24 | |
| 25 | const schemaSrc = path.join( |
| 26 | prismaAssetDir, |
| 27 | packages?.nextAuth.inUse ? "auth-schema.prisma" : "schema.prisma", |
| 28 | ); |
| 29 | const schemaDest = path.join(projectDir, "prisma/schema.prisma"); |
| 30 | |
| 31 | const clientSrc = path.join(prismaAssetDir, "client.ts"); |
| 32 | const clientDest = path.join(projectDir, "src/server/db/client.ts"); |
| 33 | |
| 34 | const sampleApiRouteSrc = path.join(prismaAssetDir, "sample-api.ts"); |
| 35 | const sampleApiRouteDest = path.join(projectDir, "src/pages/api/examples.ts"); |
| 36 | |
| 37 | // add postinstall script to package.json |
| 38 | const packageJsonPath = path.join(projectDir, "package.json"); |
| 39 | |
| 40 | const packageJsonContent = fs.readJSONSync(packageJsonPath) as PackageJson; |
| 41 | packageJsonContent.scripts!.postinstall = "prisma generate"; //eslint-disable-line @typescript-eslint/no-non-null-assertion |
| 42 | |
| 43 | await Promise.all([ |
| 44 | fs.copy(schemaSrc, schemaDest), |
| 45 | fs.copy(clientSrc, clientDest), |
| 46 | fs.copy(sampleApiRouteSrc, sampleApiRouteDest), |
| 47 | fs.writeJSON(packageJsonPath, packageJsonContent, { |
| 48 | spaces: 2, |
| 49 | }), |
| 50 | ]); |
| 51 | |
| 52 | // only generate client if we have installed the dependencies |
| 53 | if (!noInstall) { |
| 54 | const generateClientCmd = |
| 55 | pkgManager === "npm" |
| 56 | ? "npx prisma generate" |
| 57 | : `${pkgManager} prisma generate`; |
| 58 | await execa(generateClientCmd, { cwd: projectDir }); |
| 59 | } |
| 60 | }; |
nothing calls this directly
no test coverage detected