arthurfiorette / prisma-json-types-generator

⚒️ Changes JsonValues to your custom typescript type.
https://npm.im/prisma-json-types-generator
MIT License
345 stars 18 forks source link

Help to set this up in nextjs #307

Open peguerosdc opened 3 months ago

peguerosdc commented 3 months ago

I am using this project as a template for my application and I can't set this library up.

I have created the following @types/my-prisma.d.ts similar to the existing @types/next-auth.d.ts with the following content:

declare global {
  namespace PrismaJson {
    type LocationJson =
      | {
          address: string;
          lat: number;
          lng: number;
        }
      | undefined;

And added this to my prisma.schema bellow the client generator:

generator json {
  provider = "prisma-json-types-generator"
}

Along with the types as comments in my models:

model Profile {
  // LocationJson
  location Json
}

But it is not working.

Can someone help me? In case it is something related to the typescript configuration, this is my tsconfig.json file:

{
  "compilerOptions": {
    "target": "es5",
    "lib": ["dom", "dom.iterable", "esnext"],
    "allowJs": true,
    "skipLibCheck": true,
    "strict": true,
    "forceConsistentCasingInFileNames": true,
    "noEmit": true,
    "esModuleInterop": true,
    "module": "esnext",
    "moduleResolution": "node",
    "resolveJsonModule": true,
    "isolatedModules": true,
    "jsx": "preserve",
    "incremental": true,
    "plugins": [
      {
        "name": "next",
      },
    ],
    "paths": {
      "@/*": ["./*"],
    },
    "types": ["node", "jest"],
  },
  "include": [
    "next-env.d.ts",
    "**/*.ts",
    "**/*.tsx",
    ".next/types/**/*.ts",
  ],
  "exclude": ["node_modules"],
}
peguerosdc commented 3 months ago

You can find a minimum reproducible error here. It's a commit adding prisma-json-types-generator to the template I mentioned.

arthurfiorette commented 2 months ago

Please provide logging details and what is not working. I do not have time to setup you maximum reproducible example.

peguerosdc commented 2 months ago

There are no logging details because nothing is logged and what is not working is that LocationJson is not being recognized as the type of Profile.location .

I thought that setting up a project for you with all my settings was the best way to share how to reproduce it. As I don't know where the problem is, I don't know how to make it smaller, sorry.

But don't worry, if you don't have the time to run it (it'd be one line in the terminal: git clone ... & npm install & npm run dev ) just feel free to close the ticket.

unflores commented 2 months ago

FWIW I have the same issue. @peguerosdc I've added a comment on your link that may be useful.

unflores commented 2 months ago

I'm running through the same case I think right now... @peguerosdc In running the lib I get the following:

unflores:prisma-json-types-generator (main*%) $ pnpm prisma generate --schema test/schemas/normal.prisma 
Prisma schema loaded from test/schemas/normal.prisma

✔ Generated Prisma Client (v5.13.0) to ./test/target/normal in 52ms

✔ Generated Prisma Json Types Generator (3.0.4) to ./test/schemas in 75ms

However, when I run it in my local app I don't see Generated Prisma Json Types Generator. So make sure that it is showing up in your output.

peguerosdc commented 2 months ago

@unflores thanks for taking a look! Indeed I made a type and the comments should have three backslashes, but that only partially solved the problem.

Now profile.location is correctly typed with PrismaJson.LocationJson, but its properties are not as they all show up as any.

Anyway, I committed the ///  fix to the repo :) and Generated Prisma Json Types Generator is being logged.