Labsco
prisma logo

prisma-upgrade-v7-esm-support

✓ Official8

by prisma · part of prisma/cursor-plugin

ESM Support. Reference when using this Prisma feature.

🔥🔥🔥✓ VerifiedFreeAdvanced setup
🧩 One of 7 skills in the prisma/cursor-plugin package — works on its own, and pairs well with its siblings.

ESM Support. Reference when using this Prisma feature.

Inspect the full instructions your agent will receiveExpand

This is the exact playbook injected into your agent when the skill activates — shown here so you can audit it before installing. You don't need to read it to use the skill.

by prisma

ESM Support. Reference when using this Prisma feature. npx skills add https://github.com/prisma/cursor-plugin --skill prisma-upgrade-v7-esm-support Download ZIPGitHub8

ESM Support

Prisma ORM v7 ships as an ES module only. Your project must be configured for ESM.

Required Changes

package.json

Add the type field:

Copy & paste — that's it
{
 "type": "module",
 "scripts": {
 "build": "tsc",
 "start": "node dist/index.js"
 }
}

tsconfig.json

Configure for ESM:

Copy & paste — that's it
{
 "compilerOptions": {
 "module": "ESNext",
 "moduleResolution": "bundler",
 "target": "ES2023",
 "strict": true,
 "esModuleInterop": true,
 "skipLibCheck": true,
 "outDir": "dist"
 },
 "include": ["src/**/*", "prisma/**/*"]
}

Alternative: Node16/NodeNext

Copy & paste — that's it
{
 "compilerOptions": {
 "module": "Node16",
 "moduleResolution": "Node16",
 "target": "ES2022"
 }
}

Import Syntax Changes

Named imports

Copy & paste — that's it
// ESM (v7)
import { PrismaClient } from '../generated/client'

// Not: require()

File extensions

With moduleResolution: "Node16", add .js extensions:

Copy & paste — that's it
import { helper } from './utils/helper.js'

With moduleResolution: "bundler", extensions are optional.

Minimum Versions

Requirement Minimum Version Node.js 20.19.0 TypeScript 5.4.0

CommonJS Compatibility

If you must use CommonJS:

Dynamic import

Copy & paste — that's it
// CommonJS file
async function main() {
 const { PrismaClient } = await import('../generated/client.js')
 const prisma = new PrismaClient()
}

Separate ESM file

Create an ESM wrapper:

Copy & paste — that's it
// prisma.mjs
import { PrismaClient } from '../generated/client'
export const prisma = new PrismaClient()

Framework Considerations

Next.js

Next.js supports ESM. Ensure next.config.jsnext.config.mjs:

Copy & paste — that's it
// next.config.mjs
export default {
 // config
}

Express

Update entry point:

Copy & paste — that's it
// index.js (with "type": "module")
import express from 'express'
import { PrismaClient } from '../generated/client'

const app = express()
const prisma = new PrismaClient()

Jest

Configure Jest for ESM:

Copy & paste — that's it
{
 "jest": {
 "preset": "ts-jest/presets/default-esm",
 "extensionsToTreatAsEsm": [".ts"],
 "transform": {
 "^.+\\.tsx?$": ["ts-jest", { "useESM": true }]
 }
 }
}

Or use Vitest which has native ESM support.