Comments (4)
For people looking for it.
You can make client extensions like this:
import { z } from "zod";
import { Prisma } from "@prisma/client";
const schema = z.object({
slug: z
.string()
.max(100)
.regex(/^[a-z0-9]+(?:-[a-z0-9]+)*$/),
name: z.string().max(100),
description: z.string().max(1000),
price: z
.instanceof(Prisma.Decimal)
.refine((price) => price.gte("0.01") && price.lt("1000000.00")),
}) satisfies z.Schema<Prisma.ProductUncheckedCreateInput>;
export const ProductValidation = Prisma.defineExtension({
query: {
product: {
create({ args, query }) {
args.data = schema.parse(args.data);
return query(args);
},
update({ args, query }) {
args.data = schema.partial().parse(args.data);
return query(args);
},
updateMany({ args, query }) {
args.data = schema.partial().parse(args.data);
return query(args);
},
upsert({ args, query }) {
args.create = schema.parse(args.create);
args.update = schema.partial().parse(args.update);
return query(args);
},
},
},
});
And then use it like this:
import { Prisma, PrismaClient } from "@prisma/client";
import { ProductValidation } from "./models/product";
import { ReviewValidation } from "./models/review";
const prisma = new PrismaClient()
.$extends(ProductValidation)
.$extends(ReviewValidation);
See:
https://github.com/prisma/prisma-client-extensions/blob/main/input-validation/README.md
from epic-stack.
As stated here prisma/prisma#2219 (comment) this feature its not being developed in the future, maybe never, neither with check constraints or with any other method.
Here is another documentation explainig why they are opting-ing strictly for db-native features.
prisma/specs#330 (comment)
Some other native features are also not in the roadmap from the time beign e.g. JSON field type support: prisma/prisma#3786
from epic-stack.
As noted, I'm talking about using Prisma client extensions feature which does mean this wouldn't be a database-level enhancement, but just one for the client which is sufficient for us.
from epic-stack.
Thanks @L-Steinmacher!
from epic-stack.
Related Issues (20)
- Add documentation to run app locally with Docker HOT 2
- issues when scaling up machines on fly HOT 10
- Makes sense to substitute Express for Fastify? HOT 3
- Create an account button shows error but should not HOT 3
- Vitest fails after Prisma migration HOT 1
- npm test:e2e:run fails nearly all the time HOT 4
- Rate limiting can be bypassed with a spoofed ip HOT 5
- dev-server long running command does not give back shell input correctly on fish shell HOT 3
- dev-server does not restarts when it crashes HOT 3
- `npm run validate` without having to stop the dev server
- Running Playwright (or the stack) in Docker HOT 1
- No relative import paths HOT 2
- Configuration for the possibility of using postgresql
- /swapon command failing when deploying to production HOT 2
- Tests failing on a fresh install due to SyntaxErrors HOT 2
- Adding tags/releases to the repository HOT 6
- Running Vitest locally can cause errors due to missing schema updates in test database HOT 3
- SENTRY_PROJECT missing from deploy.yml HOT 3
- Conflict on seeding production db HOT 1
- Remove `@remix-run/server-runtime` as a dependency HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from epic-stack.