Git Product home page Git Product logo

Comments (6)

ymc9 avatar ymc9 commented on May 28, 2024

Hi @levipro , I've implemented it and would like to see how well it'll solve your problem. The tricky part is, given a whitelist of models to generate Zod schema for, we need to build a transitive closure and include all model types that have a relation with the whitelisted ones. The reason is Prisma allows relation filtering in queries and allows you to traverse related models in query conditions.

This can be problematic when, say, you have a "hub" model like User, which transitively reaches all other models. Do you mind sharing some basic structure of your zmodel so I can check it? Thank you!

from zenstack.

levipro avatar levipro commented on May 28, 2024

When I do run prismas introspection on my database it creates quite a large schema file. I certainly have a few hub models throughout as well.

I can see how this is a complex issue to solve for. Is there a way to automatically exclude a relation if the model for that relation is not in the whitelist as well?

Do you have a branch I can try running this from to help test things? That would be the easiest way for me to try and help. Cleaning up my schema file and removing sensitive structures would take a lot of time.

from zenstack.

ymc9 avatar ymc9 commented on May 28, 2024

When I do run prismas introspection on my database it creates quite a large schema file. I certainly have a few hub models throughout as well.

I can see how this is a complex issue to solve for. Is there a way to automatically exclude a relation if the model for that relation is not in the whitelist as well?

Do you have a branch I can try running this from to help test things? That would be the easiest way for me to try and help. Cleaning up my schema file and removing sensitive structures would take a lot of time.

That's a good idea. You can install the v1.1 package from the preview registry:

npm i -D --registry https://preview.registry.zenstack.dev zenstack @zenstackhq/trpc

The updated trpc plugin has a "generateModels" option, you can pass a comma-separated list of model names to whitelist. It'll pass it down to the zod plugin that it implicitly activates. If you've also manually declared a zod plugin in your zmodel, you need to put the same option in it.

plugin trpc {
    ...
    generateModels = 'User,Post'
}

from zenstack.

levipro avatar levipro commented on May 28, 2024

Adding the above trpc setting did work to only generate the User/Post routers, but all the zod files were still generated. I also tried adding this but the same files were generated:

plugin zod {
  provider = '@core/zod'
  generateModels = 'User,Post'
}

I also had to add the node options -stack-size=2048 --max-old-space-size=12288 for this to complete

from zenstack.

ymc9 avatar ymc9 commented on May 28, 2024

Got it. I believe it's due to the transitive closure, as we discussed previously ... I think it's possible to exclude relation - a bit more work to do. I'm trying to wrap up v1.1 release and probably have to postpone it.

I'll keep thinking about this and hopefully get a complete resolution in the next one.

from zenstack.

ymc9 avatar ymc9 commented on May 28, 2024

Probably a real solution is to infer zod schemas instead of generating them.

from zenstack.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo 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.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.