165 lines
3.6 KiB
Markdown
165 lines
3.6 KiB
Markdown
# Schema Changes
|
|
|
|
Prisma v7 promotes `prisma-client` to the default generator. Update your generator block, output path, and imports accordingly.
|
|
|
|
This guide is for projects that are actually migrating to Prisma 7. Do not apply these schema changes to MongoDB projects; keep those on Prisma 6.x.
|
|
|
|
## Generator Block (v7)
|
|
|
|
```prisma
|
|
generator client {
|
|
provider = "prisma-client"
|
|
output = "../generated/prisma"
|
|
}
|
|
```
|
|
|
|
## Key Changes
|
|
|
|
### 1. Provider name
|
|
|
|
Use `prisma-client` in Prisma v7. The older `prisma-client-js` generator still exists in the repo for legacy setups, but `prisma-client` is the default path for current projects.
|
|
|
|
### 2. Output is required
|
|
|
|
The `output` field is mandatory when using `prisma-client`. Prisma Client no longer generates to `node_modules` with this generator.
|
|
|
|
```prisma
|
|
generator client {
|
|
provider = "prisma-client"
|
|
output = "../generated/prisma"
|
|
}
|
|
```
|
|
|
|
### 3. engineType changed
|
|
|
|
Legacy Rust engine settings are gone. With `prisma-client`, the relevant value is `engineType = "client"` if you want to state it explicitly, although it is typically inferred and can be omitted.
|
|
|
|
```prisma
|
|
generator client {
|
|
provider = "prisma-client"
|
|
output = "../generated/prisma"
|
|
engineType = "client"
|
|
}
|
|
```
|
|
|
|
### 4. moduleFormat is explicit when needed
|
|
|
|
If you must stay on CommonJS:
|
|
|
|
```prisma
|
|
generator client {
|
|
provider = "prisma-client"
|
|
output = "../generated/prisma"
|
|
moduleFormat = "cjs"
|
|
}
|
|
```
|
|
|
|
## Example Output Paths
|
|
|
|
### Standard project
|
|
|
|
```prisma
|
|
output = "../generated/prisma"
|
|
```
|
|
|
|
Creates files like:
|
|
|
|
```text
|
|
generated/prisma/
|
|
client.ts
|
|
browser.ts
|
|
enums.ts
|
|
models.ts
|
|
models/
|
|
```
|
|
|
|
### Monorepo
|
|
|
|
```prisma
|
|
output = "../../packages/database/generated/prisma"
|
|
```
|
|
|
|
### Same directory as schema
|
|
|
|
```prisma
|
|
output = "./generated/prisma"
|
|
```
|
|
|
|
Creates: `prisma/generated/prisma/client.ts`
|
|
|
|
## Datasource Block
|
|
|
|
The `url`, `directUrl`, and `shadowDatabaseUrl` fields in the `datasource` block are deprecated in Prisma v7. Move them to `prisma.config.ts` and keep only the provider in `schema.prisma`:
|
|
|
|
```prisma
|
|
datasource db {
|
|
provider = "postgresql"
|
|
}
|
|
```
|
|
|
|
```typescript
|
|
export default defineConfig({
|
|
datasource: {
|
|
url: env('DATABASE_URL'),
|
|
directUrl: env('DIRECT_URL'),
|
|
shadowDatabaseUrl: env('SHADOW_DATABASE_URL'),
|
|
},
|
|
})
|
|
```
|
|
|
|
## After Schema Changes
|
|
|
|
1. Run `prisma generate`:
|
|
```bash
|
|
npx prisma generate
|
|
```
|
|
|
|
2. Update imports throughout your codebase:
|
|
```typescript
|
|
import { PrismaClient } from '../generated/prisma/client'
|
|
```
|
|
|
|
3. Update `.gitignore` if you manage this manually:
|
|
```
|
|
/generated/prisma
|
|
```
|
|
|
|
4. Replace `Prisma.validator()` with TypeScript `satisfies` when using `prisma-client`:
|
|
```typescript
|
|
import { Prisma } from '../generated/prisma/client'
|
|
|
|
const userSelect = {
|
|
id: true,
|
|
email: true,
|
|
} satisfies Prisma.UserSelect
|
|
```
|
|
|
|
## Generated Entrypoints
|
|
|
|
- `client` - server-side Prisma Client and Prisma namespace
|
|
- `browser` - browser-safe types and enums without a real `PrismaClient`
|
|
- `enums` - slim enum-only entrypoint
|
|
- `models` - model types and derived helper types
|
|
|
|
## Preview Features
|
|
|
|
Preview features still work as before:
|
|
|
|
```prisma
|
|
generator client {
|
|
provider = "prisma-client"
|
|
output = "../generated/prisma"
|
|
previewFeatures = ["relationJoins", "fullTextSearch"]
|
|
}
|
|
```
|
|
|
|
Recent preview-feature examples also include `partialIndexes` for PostgreSQL, SQLite, SQL Server, and CockroachDB:
|
|
|
|
```prisma
|
|
generator client {
|
|
provider = "prisma-client"
|
|
output = "../generated/prisma"
|
|
previewFeatures = ["partialIndexes"]
|
|
}
|
|
```
|